diff --git a/data/Tupfile.lua b/data/Tupfile.lua index d621b0e2a..ee4a4c424 100644 --- a/data/Tupfile.lua +++ b/data/Tupfile.lua @@ -407,6 +407,7 @@ tup.append_table(img_files, { {"@SS", VAR_PROGS .. "/system/scrsaver/scrsaver"}, {"@VOLUME", VAR_PROGS .. "/media/volume/volume"}, {"HACONFIG", VAR_PROGS .. "/other/ha/HACONFIG"}, + {"ACLOCK", VAR_PROGS .. "/demos/aclock/aclock"}, {"APM", VAR_PROGS .. "/system/apm/apm"}, {"CALC", VAR_PROGS .. "/other/calc/trunk/calc"}, {"CALENDAR", VAR_PROGS .. "/system/calendar/trunk/calendar"}, @@ -441,6 +442,8 @@ tup.append_table(img_files, { {"TERMINAL", VAR_PROGS .. "/system/terminal/terminal"}, {"TEST", VAR_PROGS .. "/testing/protection/trunk/test"}, {"TINYPAD", VAR_PROGS .. "/develop/tinypad/trunk/tinypad"}, + {"TINFO", VAR_PROGS .. "/system/tinfo/tinfo"}, + {"TIMER", VAR_PROGS .. "/other/Timer/Timer"}, {"UNZ", VAR_PROGS .. "/fs/unz/unz"}, {"ZKEY", VAR_PROGS .. "/system/zkey/trunk/ZKEY"}, {"3D/3DWAV", VAR_PROGS .. "/demos/3dwav/trunk/3dwav"}, @@ -469,10 +472,12 @@ tup.append_table(img_files, { {"DEVELOP/COBJ", VAR_PROGS .. "/develop/cObj/trunk/cObj"}, {"DEVELOP/ENTROPYV", VAR_PROGS .. "/develop/entropyview/entropyview"}, {"DEVELOP/FASM", VAR_PROGS .. "/develop/fasm/1.73/fasm"}, + {"DEVELOP/GENFILES", VAR_PROGS .. "/testing/genfiles/GenFiles"}, {"DEVELOP/H2D2B", VAR_PROGS .. "/develop/h2d2b/trunk/h2d2b"}, {"DEVELOP/HEED", VAR_PROGS .. "/develop/heed/trunk/heed"}, {"DEVELOP/KEYASCII", VAR_PROGS .. "/develop/keyascii/trunk/keyascii"}, {"DEVELOP/MTDBG", VAR_PROGS .. "/develop/mtdbg/mtdbg"}, + {"DEVELOP/MSTATE", VAR_PROGS .. "/develop/mstate/mstate"}, {"DEVELOP/SCANCODE", VAR_PROGS .. "/develop/scancode/trunk/scancode"}, {"DEVELOP/EXAMPLES/CIRCLE", VAR_PROGS .. "/develop/examples/circle/trunk/circle"}, {"DEVELOP/EXAMPLES/COLORREF", VAR_PROGS .. "/demos/colorref/trunk/colorref"}, @@ -482,6 +487,7 @@ tup.append_table(img_files, { {"DEVELOP/EXAMPLES/USE_MB", VAR_PROGS .. "/demos/use_mb/use_mb"}, {"File Managers/KFAR", VAR_PROGS .. "/fs/kfar/trunk/kfar"}, {"File Managers/OPENDIAL", VAR_PROGS .. "/fs/opendial/opendial"}, + {"LOD", VAR_PROGS .. "/fs/lod/lod"}, {"GAMES/15", VAR_PROGS .. "/games/15/15"}, {"GAMES/DINO", VAR_PROGS .. "/games/dino/dino"}, {"GAMES/FREECELL", VAR_PROGS .. "/games/freecell/freecell"}, @@ -498,6 +504,7 @@ tup.append_table(img_files, { {"GAMES/SW", VAR_PROGS .. "/games/sw/sw"}, {"GAMES/TANKS", VAR_PROGS .. "/games/tanks/tanks"}, {"GAMES/TETRIS", VAR_PROGS .. "/games/tetris/tetris"}, + {"GAMES/C4", VAR_PROGS .. "/games/c4/c4"}, {"LIB/ARCHIVER.OBJ", VAR_PROGS .. "/fs/kfar/trunk/kfar_arc/kfar_arc.obj"}, {"LIB/BOX_LIB.OBJ", VAR_PROGS .. "/develop/libraries/box_lib/trunk/box_lib.obj"}, {"LIB/BUF2D.OBJ", VAR_PROGS .. "/develop/libraries/buf2d/trunk/buf2d.obj"}, @@ -517,6 +524,7 @@ tup.append_table(img_files, { {"LIB/SORT.OBJ", VAR_PROGS .. "/develop/libraries/sorter/sort.obj"}, {"LIB/TINYGL.OBJ", VAR_PROGS .. "/develop/libraries/TinyGL/asm_fork/tinygl.obj"}, {"MEDIA/ANIMAGE", VAR_PROGS .. "/media/animage/trunk/animage"}, + {"MEDIA/FILLSCR", VAR_PROGS .. "/media/FillScr/fillscr"}, {"MEDIA/KIV", VAR_PROGS .. "/media/kiv/trunk/kiv"}, {"MEDIA/LISTPLAY", VAR_PROGS .. "/media/listplay/trunk/listplay"}, {"MEDIA/MIDAMP", VAR_PROGS .. "/media/midamp/trunk/midamp"}, @@ -639,22 +647,6 @@ if build_type == "ru_RU" then tup.append_table(extra_files, { end -- tup.getconfig('NO_FASM') ~= 'full' --- Programs that require NASM to compile. -if tup.getconfig('NO_NASM') ~= 'full' then -tup.append_table(img_files, { - {"ACLOCK", VAR_PROGS .. "/demos/aclock/trunk/aclock"}, - {"LOD", VAR_PROGS .. "/fs/lod/lod"}, - {"TIMER", VAR_PROGS .. "/other/Timer/timer"}, - {"TINFO", VAR_PROGS .. "/system/tinfo/tinfo"}, - {"DEVELOP/MSTATE", VAR_PROGS .. "/develop/mstate/mstate"}, - {"DEVELOP/GENFILES", VAR_PROGS .. "/testing/genfiles/GenFiles"}, - {"GAMES/C4", VAR_PROGS .. "/games/c4/c4"}, - {"MEDIA/FILLSCR", VAR_PROGS .. "/media/FillScr/fillscr"}, -}) -tup.append_table(extra_files, { -}) -end -- tup.getconfig('NO_NASM') ~= 'full' - -- Programs that require JWASM to compile. if tup.getconfig('NO_JWASM') ~= 'full' then tup.append_table(img_files, { diff --git a/programs/demos/aclock/trunk/Readme.txt b/programs/demos/aclock/Readme.txt similarity index 100% rename from programs/demos/aclock/trunk/Readme.txt rename to programs/demos/aclock/Readme.txt diff --git a/programs/demos/aclock/Tupfile.lua b/programs/demos/aclock/Tupfile.lua new file mode 100644 index 000000000..08c171685 --- /dev/null +++ b/programs/demos/aclock/Tupfile.lua @@ -0,0 +1,2 @@ +if tup.getconfig("NO_FASM") ~= "" then return end +tup.rule("aclock.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "aclock") diff --git a/programs/demos/aclock/trunk/aclock.asm b/programs/demos/aclock/aclock.asm similarity index 72% rename from programs/demos/aclock/trunk/aclock.asm rename to programs/demos/aclock/aclock.asm index 298d48089..6da23b1df 100644 --- a/programs/demos/aclock/trunk/aclock.asm +++ b/programs/demos/aclock/aclock.asm @@ -16,44 +16,42 @@ ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - bits 32 - %include 'mos.inc' - section .text +use32 + org 0 + db 'MENUET01' + dd 1,main,image_end,memory_end,stacktop,cmdLine,0 + +include '../../macros.inc' +include '../../proc32.inc' +include '../../KOSfuncs.inc' ;******************************************************************** ; configuration stuff ;******************************************************************** - - %define APPNAME "Clock" - %define STACKSIZE 1024 + ; skinned window borders +MOS_WND_SKIN_BORDER_LEFT = 5 +MOS_WND_SKIN_BORDER_RIGHT = 5 +MOS_WND_SKIN_BORDER_BOTTOM = 5 ; default window position/dimensions (work area) - %define DEFAULT_XPOS -20 - %define DEFAULT_YPOS 20 - %define DEFAULT_WIDTH 110 - %define DEFAULT_HEIGHT 110 + DEFAULT_XPOS =-20 + DEFAULT_YPOS =20 + DEFAULT_WIDTH =110 + DEFAULT_HEIGHT =110 ; minimal size (horizontal and vertical) of work area - %define MIN_WIDTH 100 - %define MIN_HEIGHT 100 + MIN_WIDTH =100 + MIN_HEIGHT =100 -;******************************************************************** -; header -;******************************************************************** - - MOS_HEADER01 main,image_end,memory_end,stacktop-4,cmdLine,0 - ; these includes introduce code and thus mustn't stand ; before the menuet header =) - %include 'dbgboard.inc' - %include 'strlen.inc' - %include 'str2dwrd.inc' - %include 'strtok.inc' - %include 'cmdline.inc' - %include 'adjstwnd.inc' - %include 'draw.inc' + include 'dbgboard.inc' + include 'strfunct.inc' + include 'cmdline.inc' + include 'adjstwnd.inc' + include 'draw.inc' ;******************************************************************** ; main program @@ -89,20 +87,18 @@ main: ; call drawClock ; wait up to a second for next event - mov eax,MOS_SC_WAITEVENTTIMEOUT - mov ebx,100 - int 0x40 + mcall SF_WAIT_EVENT_TIMEOUT,100 test eax,eax jne .event_occured call drawClock .event_occured: - cmp eax,MOS_EVT_REDRAW + cmp eax,EV_REDRAW je .redraw - cmp eax,MOS_EVT_KEY + cmp eax,EV_KEY je .key - cmp eax,MOS_EVT_BUTTON + cmp eax,EV_BUTTON je .button jmp .msgpump @@ -110,12 +106,10 @@ main: call drawWindow jmp .msgpump .key: - mov eax,MOS_SC_GETKEY - int 0x40 + mcall SF_GET_KEY jmp .msgpump .button: - mov eax,MOS_SC_EXIT - int 0x40 + mcall SF_TERMINATE_PROCESS jmp .msgpump @@ -128,11 +122,7 @@ main: getDefaultWindowColors: pushad pushfd - mov eax,MOS_SC_WINDOWPROPERTIES - mov ebx,3 - mov ecx,wndColors - mov edx,MOS_WNDCOLORS_size - int 0x40 + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,wndColors,sizeof.system_colors popfd popad ret @@ -149,29 +139,24 @@ drawWindow: pusha ; start window redraw - mov eax,MOS_SC_REDRAWSTATUS - mov ebx,1 - int 0x40 + mcall SF_REDRAW,SSF_BEGIN_DRAW ; create window - mov eax,MOS_SC_DEFINEWINDOW mov ebx,[wndXPos] shl ebx,16 or ebx,[wndWidth] mov ecx,[wndYPos] shl ecx,16 or ecx,[wndHeight] - mov edx,[wndColors+MOS_WNDCOLORS.work] + mov edx,[wndColors.work] or edx,0x53000000 - mov edi,label - int 0x40 + mov edi,w_label + mcall SF_CREATE_WINDOW call drawClock ; end window redraw - mov eax,MOS_SC_REDRAWSTATUS - mov ebx,2 - int 0x40 + mcall SF_REDRAW,SSF_END_DRAW popa ret @@ -188,32 +173,29 @@ wndWidth dd DEFAULT_WIDTH wndHeight dd DEFAULT_HEIGHT ; window label -label db APPNAME,0 -LABEL_LEN equ ($-label-1) +w_label: db "Clock",0 +.end: +LABEL_LEN equ (w_label.end-w_label-1) ; token delimiter list for command line delimiters db 9,10,11,12,13,32,0 - ; don't insert anything after this label image_end: ;******************************************************************** ; uninitialized data ;******************************************************************** - section .bss align=4 - -wndColors resb MOS_WNDCOLORS_size -procInfo resb MOS_PROCESSINFO_size +align 4 +wndColors system_colors +procInfo process_information ; space for command line. at the end we have an additional ; byte for a terminating zero, just to be sure... -cmdLine resb 257 +cmdLine rb 257 - alignb 4 -stack resb STACKSIZE +align 4 + rb 1024 stacktop: - - ; don't insert anything after this label memory_end: diff --git a/programs/demos/aclock/trunk/aclock.bmp b/programs/demos/aclock/aclock.bmp similarity index 100% rename from programs/demos/aclock/trunk/aclock.bmp rename to programs/demos/aclock/aclock.bmp diff --git a/programs/demos/aclock/trunk/adjstwnd.inc b/programs/demos/aclock/adjstwnd.inc similarity index 95% rename from programs/demos/aclock/trunk/adjstwnd.inc rename to programs/demos/aclock/adjstwnd.inc index 83313e117..7a233089f 100644 --- a/programs/demos/aclock/trunk/adjstwnd.inc +++ b/programs/demos/aclock/adjstwnd.inc @@ -20,8 +20,6 @@ ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; -%ifndef _ADJSTWND_INC -%define _ADJSTWND_INC ;window types @@ -72,8 +70,7 @@ adjustWindowDimensions: ; clamp window dimensions .clamp: - mov eax,MOS_SC_GETSCREENMAX ; get screen dimensions - int 0x40 + mcall SF_GET_SCREEN_SIZE ; get screen dimensions mov edi,eax ; edi = screen width shr edi,16 mov ebp,eax ; ebp = screen height @@ -136,12 +133,10 @@ adjustWindowDimensions: add edx,MOS_WND_SKIN_BORDER_LEFT+MOS_WND_SKIN_BORDER_RIGHT ; adjust height (esi). we need the skin height to do this. push ebx - mov eax,MOS_SC_WINDOWPROPERTIES - mov ebx,4 - int 0x40 + mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT lea esi,[esi+eax+MOS_WND_SKIN_BORDER_BOTTOM] pop ebx jmp .clamp -%endif + diff --git a/programs/demos/aclock/build.bat b/programs/demos/aclock/build.bat new file mode 100644 index 000000000..fa69a2772 --- /dev/null +++ b/programs/demos/aclock/build.bat @@ -0,0 +1,3 @@ +@fasm.exe -m 16384 aclock.asm aclock.kex +@kpack aclock.kex +pause diff --git a/programs/demos/aclock/trunk/cmdline.inc b/programs/demos/aclock/cmdline.inc similarity index 97% rename from programs/demos/aclock/trunk/cmdline.inc rename to programs/demos/aclock/cmdline.inc index 3c704d04e..e146c951e 100644 --- a/programs/demos/aclock/trunk/cmdline.inc +++ b/programs/demos/aclock/cmdline.inc @@ -17,8 +17,6 @@ ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; -%ifndef _CMDLINE_INC -%define _CMDLINE_INC ;******************************************************************** @@ -105,8 +103,7 @@ parseCommandLine: ; output : eax contains position ; destroys : nothing parsePositionParam: - push ebx - push esi + push ebx esi pushfd ; is the second char of the parameter a '-' ? @@ -129,8 +126,7 @@ parsePositionParam: .rotationshyperboloid: popfd - pop esi - pop ebx + pop esi ebx ret ; parse dimension parameter @@ -147,5 +143,4 @@ parseSizeParam: ret -%endif diff --git a/programs/demos/aclock/trunk/dbgboard.inc b/programs/demos/aclock/dbgboard.inc similarity index 79% rename from programs/demos/aclock/trunk/dbgboard.inc rename to programs/demos/aclock/dbgboard.inc index 74940814b..b878bf0e0 100644 --- a/programs/demos/aclock/trunk/dbgboard.inc +++ b/programs/demos/aclock/dbgboard.inc @@ -19,20 +19,34 @@ ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; -%ifndef _DBGBOARD_INC -%define _DBGBOARD_INC -%ifdef DEBUG +if DEBUG eq +macro DBG_BOARD_PRINTNEWLINE { +} + +macro DBG_BOARD_PRINTCHAR c1 { +} + +macro DBG_BOARD_PRINTDWORD w1 { +} + +macro DBG_BOARD_PRINTSTRINGLITERAL p1 { +} + +macro DBG_BOARD_PRINTSTRING s1 { +} + +else ;******************************************************************** ; print newline ; no input ;******************************************************************** -%macro DBG_BOARD_PRINTNEWLINE 0 +macro DBG_BOARD_PRINTNEWLINE { call dbg_board_printnewline -%endm +} ;******************************************************************** @@ -44,12 +58,12 @@ ; DBG_BOARD_PRINTCHAR [esi] ; DBG_BOARD_PRINTCHAR [somevariable] ;******************************************************************** -%macro DBG_BOARD_PRINTCHAR 1 +macro DBG_BOARD_PRINTCHAR c1 { push ecx - mov cl,byte %1 + mov cl,byte c1 call dbg_board_printchar pop ecx -%endm +} @@ -60,10 +74,10 @@ ; DBG_BOARD_PRINTDWORD 0xdeadbeef ; DBG_BOARD_PRINTDWORD [somevariable] ;******************************************************************** -%macro DBG_BOARD_PRINTDWORD 1 - push dword %1 +macro DBG_BOARD_PRINTDWORD w1 { + push dword w1 call dbg_board_printdword -%endm +} ;******************************************************************** @@ -73,13 +87,14 @@ ; examples DBG_BOARD_PRINTSTRINGLITERAL "foo",0 ; DBG_BOARD_PRINTSTRINGLITERAL "bar",10,13,0 ;******************************************************************** -%macro DBG_BOARD_PRINTSTRINGLITERAL 1+ - jmp %%bar -%%foo db %1, 0 ; terminate string, just to be sure -%%bar: - push dword %%foo +macro DBG_BOARD_PRINTSTRINGLITERAL p1 { + local .foo + jmp @f +.foo db p1, 0 ; terminate string, just to be sure +@@: + push dword .foo call dbg_board_printstring -%endm +} ;******************************************************************** @@ -89,22 +104,18 @@ ; DBG_BOARD_PRINTSTRING esi ; DBG_BOARD_PRINTSTRING [ebx] ;******************************************************************** -%macro DBG_BOARD_PRINTSTRING 1 - push dword %1 +macro DBG_BOARD_PRINTSTRING s1 { + push dword s1 call dbg_board_printstring -%endm +} ; no input dbg_board_printnewline: pushad pushfd - mov eax,MOS_SC_DEBUGBOARD - mov ebx,1 - mov ecx,10 - int 0x40 - mov ecx,13 - int 0x40 + mcall SF_BOARD,SSF_DEBUG_WRITE,10 + mcall ,,13 popfd popad ret @@ -114,10 +125,8 @@ dbg_board_printnewline: dbg_board_printchar: pushad pushfd - mov eax,MOS_SC_DEBUGBOARD - mov ebx,1 and ecx,0xff - int 0x40 + mcall SF_BOARD,SSF_DEBUG_WRITE popfd popad ret @@ -127,20 +136,17 @@ dbg_board_printchar: dbg_board_printdword: enter 0,0 pushad - pushfd - mov eax,MOS_SC_DEBUGBOARD - mov ebx,1 - mov ecx,'0' ; print 0x prefix - int 0x40 - mov ecx,'x' - int 0x40 + pushfd + ; print 0x prefix + mcall SF_BOARD,SSF_DEBUG_WRITE,'0' + mcall ,,'x' mov edx,[ebp + 8] ; get dword to print mov esi,8 ; iterate through all nibbles .loop: mov ecx,edx ; display hex digit shr ecx,28 movzx ecx,byte [dbg_board_printdword_digits + ecx] - int 0x40 + mcall shl edx,4 ; next nibble dec esi jnz .loop @@ -166,35 +172,13 @@ dbg_board_printstring: or al,al ; zero ? je .done ; yeah -> get outta here movzx ecx,al ; nope -> display character - mov eax,MOS_SC_DEBUGBOARD - int 0x40 + mcall SF_BOARD jmp .loop .done: popfd popad leave ret 4 - -%else - -%macro DBG_BOARD_PRINTNEWLINE 0 -%endm - -%macro DBG_BOARD_PRINTCHAR 1 -%endm - -%macro DBG_BOARD_PRINTDWORD 1 -%endm - -%macro DBG_BOARD_PRINTSTRINGLITERAL 1+ -%endm - -%macro DBG_BOARD_PRINTSTRING 1 -%endm - -%endif - - -%endif +end if diff --git a/programs/demos/aclock/trunk/draw.inc b/programs/demos/aclock/draw.inc similarity index 69% rename from programs/demos/aclock/trunk/draw.inc rename to programs/demos/aclock/draw.inc index fefd32f02..ae0f2d590 100644 --- a/programs/demos/aclock/trunk/draw.inc +++ b/programs/demos/aclock/draw.inc @@ -17,8 +17,6 @@ ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; -%ifndef _DRAW_INC -%define _DRAW_INC TMR1_FACTOR dd 0.45 @@ -50,45 +48,36 @@ monthNames: ; output : nothing ; destroys : nothing ;******************************************************************** -drawClock: - %push drawClock_context - %stacksize flat - %assign %$localsize 0 - - %local i:dword, \ - TMR1X:dword, \ - TMR1Y:dword, \ - TMR2X:dword, \ - TMR2Y:dword, \ - SECRX:dword, \ - SECRY:dword, \ - MINRX:dword, \ - MINRY:dword, \ - HOURRX:dword, \ - HOURRY:dword, \ - workwidth:dword, \ - workheight:dword, \ - foo:dword - - enter %$localsize,0 +proc drawClock + locals + i dd ? + TMR1X dd ? + TMR1Y dd ? + TMR2X dd ? + TMR2Y dd ? + SECRX dd ? + SECRY dd ? + MINRX dd ? + MINRY dd ? + HOURRX dd ? + HOURRY dd ? + workwidth dd ? + workheight dd ? + foo dd ? + endl pushad pushfd ; get window dimensions - mov eax,MOS_SC_GETPROCESSINFO - mov ebx,procInfo - mov ecx,-1 - int 0x40 + mcall SF_THREAD_INFO,procInfo,-1 ; calculate work area size (width/height = ecx/edx) ; if the work area is too small (maybe the window is shaded) ; we don't draw anything. - mov eax,MOS_SC_WINDOWPROPERTIES - mov ebx,4 ; get skin height (eax) - int 0x40 - mov ecx,[procInfo + MOS_PROCESSINFO.wndWidth] + mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT ; get skin height (eax) + mov ecx,[procInfo.box.width] sub ecx,MOS_WND_SKIN_BORDER_LEFT+MOS_WND_SKIN_BORDER_RIGHT - mov edx,[procInfo + MOS_PROCESSINFO.wndHeight] + mov edx,[procInfo.box.height] sub edx,eax sub edx,MOS_WND_SKIN_BORDER_BOTTOM cmp ecx,0 ; width too small ? @@ -102,9 +91,9 @@ drawClock: mov [workheight],edx ; calculate center of clock (x/y = esi/edi) - mov esi,[procInfo + MOS_PROCESSINFO.wndWidth] + mov esi,[procInfo.box.width] shr esi,1 - mov edi,[procInfo + MOS_PROCESSINFO.wndHeight] + mov edi,[procInfo.box.height] sub edi,MOS_WND_SKIN_BORDER_BOTTOM sub edi,eax shr edi,1 @@ -119,9 +108,8 @@ drawClock: shl ecx,16 ; (=skin height) or ecx,edx ; height inc ecx - mov edx,[wndColors + MOS_WNDCOLORS.work] - mov eax,MOS_SC_DRAWBAR - int 0x40 + mov edx,[wndColors.work] + mcall SF_DRAW_RECT popad ; calculate second hand radii @@ -163,8 +151,7 @@ drawClock: fstp dword [TMR2Y] ; get system clock (edx) - mov eax,MOS_SC_GETSYSCLOCK - int 0x40 + mcall SF_GET_SYS_TIME mov edx,eax ; draw second hand @@ -173,21 +160,14 @@ drawClock: shr eax,16 call bcdbin mov ecx,eax ; save seconds for later - push ecx - push eax - fpush32 0.104719755 ; 2*pi/60 - push dword [SECRX] - push dword [SECRY] - push esi - push edi - call getHandCoords - mov eax,MOS_SC_DRAWLINE + ; 2*pi/60 + stdcall getHandCoords,edi,esi,[SECRY],[SECRX],0.104719755,eax,ecx shl ebx,16 or ebx,esi shl ecx,16 or ecx,edi - mov edx,[wndColors + MOS_WNDCOLORS.workText] - int 0x40 + mov edx,[wndColors.work_text] + mcall SF_DRAW_LINE pop ecx pop edx @@ -200,21 +180,14 @@ drawClock: mul edx add eax,ecx mov ecx,eax ; save for later - push ecx - push eax - fpush32 0.001745329 ; 2*pi/60/60 - push dword [MINRX] - push dword [MINRY] - push esi - push edi - call getHandCoords - mov eax,MOS_SC_DRAWLINE + ; 2*pi/60/60 + stdcall getHandCoords,edi,esi,[MINRY],[MINRX],0.001745329,eax,ecx shl ebx,16 or ebx,esi shl ecx,16 or ecx,edi - mov edx,[wndColors + MOS_WNDCOLORS.workText] - int 0x40 + mov edx,[wndColors.work_text] + mcall SF_DRAW_LINE pop ecx pop edx @@ -229,55 +202,39 @@ drawClock: mov edx,60*60 mul edx add eax,ecx - push eax - fpush32 0.000145444 ; 2*pi/60/60/12 - push dword [HOURRX] - push dword [HOURRY] - push esi - push edi - call getHandCoords - mov eax,MOS_SC_DRAWLINE + ; 2*pi/60/60/12 + stdcall getHandCoords,edi,esi,[HOURRY],[HOURRX],0.000145444,eax shl ebx,16 or ebx,esi shl ecx,16 or ecx,edi - mov edx,[wndColors + MOS_WNDCOLORS.workText] - int 0x40 + mov edx,[wndColors.work_text] + mcall SF_DRAW_LINE pop edx ; draw tick marks mov dword [i],11 ; draw 12 marks .drawtickmarks: - push dword [i] ; calculate start point - fpush32 0.523598776 ; 2*pi/12 - push dword [TMR1X] - push dword [TMR1Y] - push esi - push edi - call getHandCoords + ; calculate start point + ; 2*pi/12 + stdcall getHandCoords,edi,esi,[TMR1Y],[TMR1X],0.523598776,[i] mov eax,ebx ; save in eax and edx mov edx,ecx - push dword [i] - fpush32 0.523598776 ; 2*pi/12 - push dword [TMR2X] - push dword [TMR2Y] - push esi - push edi - call getHandCoords + ; 2*pi/12 + stdcall getHandCoords,edi,esi,[TMR2Y],[TMR2X],0.523598776,[i] shl eax,16 shl edx,16 or ebx,eax ; ebx = x start and end or ecx,edx ; ecx = y start and end - mov edx,[wndColors + MOS_WNDCOLORS.workText] - mov eax,MOS_SC_DRAWLINE - int 0x40 + mov edx,[wndColors.work_text] + mcall SF_DRAW_LINE dec dword [i] jns .drawtickmarks - %define DATE_WIDTH 48 + DATE_WIDTH =48 ; calculate text start position - mov eax,[procInfo+MOS_PROCESSINFO.wndWidth] + mov eax,[procInfo.box.width] sub eax,DATE_WIDTH ; x = (wndwidth-textwidth)/2 shr eax,1 ; eax = x fild dword [workheight] ; y = DATE_FACTOR*workheight... @@ -292,7 +249,7 @@ drawClock: jb .goodbye mov ecx,ebx ; text too high ? add ecx,10-1 - mov edx,[procInfo+MOS_PROCESSINFO.wndHeight] + mov edx,[procInfo.box.height] sub edx,MOS_WND_SKIN_BORDER_BOTTOM cmp ecx,edx jnae .yousuck @@ -306,8 +263,7 @@ drawClock: or ebx,eax ; get date (edi) - mov eax,MOS_SC_GETDATE - int 0x40 + mcall SF_GET_SYS_DATE mov edi,eax ; display month @@ -315,44 +271,41 @@ drawClock: shr eax,8 call bcdbin ; ebx contains already position - mov ecx,[wndColors+MOS_WNDCOLORS.workText] + mov ecx,[wndColors.work_text] lea edx,[monthNames-3+eax*2+eax]; -3 because eax = 1..12 =] mov esi,3 ; text length - mov eax,MOS_SC_WRITETEXT - int 0x40 + mcall SF_DRAW_TEXT ; display date - add ebx,MOS_DWORD(3*6+3,0) + add ebx,(3*6+3) shl 16 mov eax,edi ; get date shr eax,16 call bcdbin mov edx,ebx ; position must be in edx mov ebx,0x00020000 ; number, display two digits mov ecx,eax ; number to display - mov esi,[wndColors+MOS_WNDCOLORS.workText] - mov eax,MOS_SC_WRITENUMBER - int 0x40 + mov esi,[wndColors.work_text] + mcall SF_DRAW_NUMBER ; display year. the way we avoid the y2k bug is even ; simpler, yet much better than in the last version: ; now we simply display the last two digits and let the ; user decide wether it's the year 1903 or 2003 =] - add edx,MOS_DWORD(2*6+3,0) + add edx,(2*6+3) shl 16 mov eax,edi ; get year call bcdbin mov ebx,0x00020000 ; number, display two digits mov ecx,eax ; number to display ; edx contains already position - mov esi,[wndColors+MOS_WNDCOLORS.workText] - mov eax,MOS_SC_WRITENUMBER - int 0x40 + mov esi,[wndColors.work_text] + mcall SF_DRAW_NUMBER .byebye: popfd popad - leave + ;leave ret - %pop +endp ;********************************************************** @@ -397,36 +350,26 @@ bcdbin: ; destroys: ; nothing ;******************************************************************** -getHandCoords: - -ANGLE equ 28 -DEG2RAD equ 24 -RADIUSX equ 20 -RADIUSY equ 16 -CENTERX equ 12 -CENTERY equ 8 - - enter 0,0 +proc getHandCoords CENTERY:dword, CENTERX:dword, RADIUSY:dword, RADIUSX:dword, DEG2RAD:dword, ANGLE:dword pushfd - fild dword [ebp+ANGLE] ; get angle - fmul dword [ebp+DEG2RAD] ; convert to radians + fild dword [ANGLE] ; get angle + fmul dword [DEG2RAD] ; convert to radians fsincos - fmul dword [ebp+RADIUSY] ; -y * radius + clockcy + fmul dword [RADIUSY] ; -y * radius + clockcy fchs - fiadd dword [ebp+CENTERY] - fistp dword [ebp+CENTERY] - fmul dword [ebp+RADIUSX] ; x * radius + clockcx - fiadd dword [ebp+CENTERX] - fistp dword [ebp+CENTERX] + fiadd dword [CENTERY] + fistp dword [CENTERY] + fmul dword [RADIUSX] ; x * radius + clockcx + fiadd dword [CENTERX] + fistp dword [CENTERX] - mov ebx,[ebp+CENTERX] - mov ecx,[ebp+CENTERY] + mov ebx,[CENTERX] + mov ecx,[CENTERY] popfd - leave - ret 4*6 + ;leave + ret +endp -%endif - diff --git a/programs/demos/aclock/trunk/strtok.inc b/programs/demos/aclock/strfunct.inc similarity index 63% rename from programs/demos/aclock/trunk/strtok.inc rename to programs/demos/aclock/strfunct.inc index 5c8db3dad..bbc68bb73 100644 --- a/programs/demos/aclock/trunk/strtok.inc +++ b/programs/demos/aclock/strfunct.inc @@ -1,5 +1,3 @@ -; some strtok-like function -; ; Copyright (c) 2003 Thomas Mathys ; killer@vantage.ch ; @@ -17,8 +15,94 @@ ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; -%ifndef _STRTOK_INC -%define _STRTOK_INC + + +;******************************************************************** +; returns the length of an asciiz string +; input : esi = pointer to string +; output : eax = string length +; destroys : nothing +;******************************************************************** +strlen: + push ecx edi + pushfd + cld ; ! + mov ecx,-1 + mov edi,esi ; find terminating zero + xor al,al + repne scasb + mov eax,edi ; calculate string length + sub eax,esi + dec eax + popfd + pop edi ecx + ret + + +;******************************************************************** +; converts an asciiz string into an unsigned doubleword. +; (base 10 is assumed) +; +; - first, leading whitespaces are skipped +; - then the function converts the string, until it +; finds the terminating zero, another character it +; cannot convert or the number becomes too large. +; +; input : esi = pointer to string +; output : eax = unsigned doubleword +; the function tries to convert as +; many digits as possible, before it +; stops. if the value of the dword +; becomes too large, 0xffffffff is +; returned. +; destroys : nothing +;******************************************************************** +string2dword: + push ebx ecx edx esi + pushfd + + xor ebx,ebx ; ebx : dword + + ; skip leading whitespaces +.skipspaces: + lodsb + cmp al,32 ; space + je .skipspaces + cmp al,12 ; ff + je .skipspaces + cmp al,10 ; lf + je .skipspaces + cmp al,13 ; cr + je .skipspaces + cmp al,9 ; ht + je .skipspaces + cmp al,11 ; vt + je .skipspaces + + ; convert string + dec esi ; esi -> 1st non-whitespace +.convert: + xor eax,eax ; get character + lodsb + sub al,'0' ; convert to digit + cmp al,9 ; is digit in range [0,9] ? + ja .done ; nope -> stop conversion + mov ecx,eax ; save new digit + mov eax,10 ; dword = dword * 10 + mul ebx + jc .overflow + add eax,ecx ; + new digit + jc .overflow + mov ebx,eax + jmp .convert + +.overflow: + mov ebx,0xffffffff +.done: + mov eax,ebx + popfd + pop esi edx ecx ebx + ret ;******************************************************************** @@ -121,5 +205,3 @@ strtok: ret .adx dd 0 -%endif - diff --git a/programs/demos/aclock/trunk/Tupfile.lua b/programs/demos/aclock/trunk/Tupfile.lua deleted file mode 100644 index a5f3786eb..000000000 --- a/programs/demos/aclock/trunk/Tupfile.lua +++ /dev/null @@ -1,2 +0,0 @@ -if tup.getconfig("NO_NASM") ~= "" then return end -tup.rule("aclock.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "aclock") diff --git a/programs/demos/aclock/trunk/make.bat b/programs/demos/aclock/trunk/make.bat deleted file mode 100644 index e770ff785..000000000 --- a/programs/demos/aclock/trunk/make.bat +++ /dev/null @@ -1,3 +0,0 @@ -@rem nasm -t -f bin -o aclock -l aclock.lst aclock.asm -DDEBUG -nasmw -t -f bin -o aclock aclock.asm -@pause diff --git a/programs/demos/aclock/trunk/mos.inc b/programs/demos/aclock/trunk/mos.inc deleted file mode 100644 index 20274343c..000000000 --- a/programs/demos/aclock/trunk/mos.inc +++ /dev/null @@ -1,334 +0,0 @@ -; mos.inc 0.03 -; Copyright (c) 2002 Thomas Mathys -; killer@vantage.ch -; -; This program is free software; you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation; either version 2 of the License, or -; (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with this program; if not, write to the Free Software -; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -; -%ifndef _MOS_INC -%define _MOS_INC - - -;********************************************************** -; generates a menuetos 01 header -; takes 6 parameters: -; -; MOS_HEADER01 start, end, appmem, esp, i_param, i_icon -;********************************************************** - -%macro MOS_HEADER01 6 - org 0x0 - db 'MENUET01' ; 8 byte id - dd 0x01 ; header version - dd %1 ; start of code - dd %2 ; image size - dd %3 ; application memory - dd %4 ; esp - dd %5 ; i_param - dd %6 ; i_icon -%endmacro - - -;********************************************************** -; MOS_DWORD -; packs 2 words into a double word -;********************************************************** - -%define MOS_DWORD(hi,lo) ((((hi) & 0xffff) << 16) + ((lo) & 0xffff)) - - -;********************************************************** -; MOS_RGB -; creates a menuet os compatible color (0x00RRGGBB) -;********************************************************** - -%define MOS_RGB(r,g,b) ((((r) & 255) << 16) + (((g) & 255) << 8) + ((b) & 255)) - - -;********************************************************** -; window stuff -;********************************************************** - - ; default window colors -struc MOS_WNDCOLORS - .frame: resd 1 - .grab: resd 1 - .grabButton: resd 1 - .grabButtonText: resd 1 - .grabText: resd 1 - .work: resd 1 - .workButton: resd 1 - .workButtonText: resd 1 - .workText: resd 1 - .workGraphics: resd 1 -endstruc - - ; skinned window borders -MOS_WND_SKIN_BORDER_LEFT equ 5 -MOS_WND_SKIN_BORDER_RIGHT equ 5 -MOS_WND_SKIN_BORDER_BOTTOM equ 5 - - -;********************************************************** -; process info structure -;********************************************************** - -struc MOS_PROCESSINFO - .CPUUsage: resd 1 - .windowStackPos: resw 1 - .windowStackVal: resw 1 - .reserved1: resw 1 - .processName: resb 12 - .memStart: resd 1 - .memUsed: resd 1 - .pid: resd 1 - .wndXPos resd 1 - .wndYPos resd 1 - .wndWidth resd 1 - .wndHeight resd 1 - .reserved2: resb (1024 - 50) -endstruc - - - -;********************************************************** -; system call numbers -;********************************************************** - -MOS_SC_EXIT equ -1 -MOS_SC_DEFINEWINDOW equ 0 -MOS_SC_PUTPIXEL equ 1 -MOS_SC_GETKEY equ 2 -MOS_SC_GETSYSCLOCK equ 3 -MOS_SC_WRITETEXT equ 4 -MOS_SC_DELAY equ 5 -MOS_SC_OPENFILEFLOPPY equ 6 ; obsolete -MOS_SC_PUTIMAGE equ 7 -MOS_SC_DEFINEBUTTON equ 8 -MOS_SC_GETPROCESSINFO equ 9 -MOS_SC_WAITEVENT equ 10 -MOS_SC_CHECKEVENT equ 11 -MOS_SC_REDRAWSTATUS equ 12 -MOS_SC_DRAWBAR equ 13 -MOS_SC_GETSCREENMAX equ 14 -MOS_SC_SETBACKGROUND equ 15 -MOS_SC_GETPRESSEDBUTTON equ 17 -MOS_SC_SYSTEMSERVICE equ 18 -MOS_SC_STARTPROGRAM equ 19 ; obsolete -MOS_SC_MIDIINTERFACE equ 20 -MOS_SC_DEVICESETUP equ 21 -MOS_SC_WAITEVENTTIMEOUT equ 23 -MOS_SC_CDAUDIO equ 24 -MOS_SC_SB16MIXER1 equ 25 -MOS_SC_GETDEVICESETUP equ 26 -MOS_SC_WSS equ 27 -MOS_SC_SB16MIXER2 equ 28 -MOS_SC_GETDATE equ 29 -MOS_SC_READHD equ 30 ; obsolete -MOS_SC_STARTPROGRAMHD equ 31 ; obsolete -MOS_SC_DELETEFILEFLOPPY equ 32 -MOS_SC_SAVEFILERAMDISK equ 33 ; obsolete -MOS_SC_READDIRRAMDISK equ 34 ; obsolete -MOS_SC_GETSCREENPIXEL equ 35 -MOS_SC_GETMOUSEPOSITION equ 37 -MOS_SC_DRAWLINE equ 38 -MOS_SC_GETBACKGROUND equ 39 -MOS_SC_SETEVENTMASK equ 40 -MOS_SC_GETIRQOWNER equ 41 -MOS_SC_GETDATAREADBYIRQ equ 42 -MOS_SC_SENDDATATODEVICE equ 43 -MOS_SC_PROGRAMIRQS equ 44 -MOS_SC_RESERVEFREEIRQ equ 45 -MOS_SC_RESERVEFREEPORTS equ 46 -MOS_SC_WRITENUMBER equ 47 -MOS_SC_WINDOWPROPERTIES equ 48 -MOS_SC_SHAPEDWINDOWS equ 50 -MOS_SC_CREATETHREAD equ 51 -MOS_SC_STACKDRIVERSTATE equ 52 -MOS_SC_SOCKETINTERFACE equ 53 -MOS_SC_SOUNDINTERFACE equ 55 -MOS_SC_WRITEFILEHD equ 56 ; obsolete -MOS_SC_DELETEFILEHD equ 57 -MOS_SC_SYSTREEACCESS equ 58 -MOS_SC_SYSCALLTRACE equ 59 -MOS_SC_IPC equ 60 -MOS_SC_DIRECTGRAPHICS equ 61 -MOS_SC_PCI equ 62 -MOS_SC_DEBUGBOARD equ 63 - - -;********************************************************** -; event numbers -;********************************************************** - -MOS_EVT_NONE equ 0 -MOS_EVT_REDRAW equ 1 -MOS_EVT_KEY equ 2 -MOS_EVT_BUTTON equ 3 - - -;********************************************************** -; event bits -;********************************************************** - -MOS_EVTBIT_REDRAW equ (1 << 0) -MOS_EVTBIT_KEY equ (1 << 1) -MOS_EVTBIT_BUTTON equ (1 << 2) -MOS_EVTBIT_ENDREQUEST equ (1 << 3) -MOS_EVTBIT_BGDRAW equ (1 << 4) -MOS_EVTBIT_MOUSECHANGE equ (1 << 5) -MOS_EVTBIT_IPCEVENT equ (1 << 6) -MOS_EVTBIT_IRQ0 equ (1 << 16) -MOS_EVTBIT_IRQ1 equ (1 << 17) -MOS_EVTBIT_IRQ2 equ (1 << 18) -MOS_EVTBIT_IRQ3 equ (1 << 19) -MOS_EVTBIT_IRQ4 equ (1 << 20) -MOS_EVTBIT_IRQ5 equ (1 << 21) -MOS_EVTBIT_IRQ6 equ (1 << 22) -MOS_EVTBIT_IRQ7 equ (1 << 23) -MOS_EVTBIT_IRQ8 equ (1 << 24) -MOS_EVTBIT_IRQ9 equ (1 << 25) -MOS_EVTBIT_IRQ10 equ (1 << 26) -MOS_EVTBIT_IRQ11 equ (1 << 27) -MOS_EVTBIT_IRQ12 equ (1 << 28) -MOS_EVTBIT_IRQ13 equ (1 << 29) -MOS_EVTBIT_IRQ14 equ (1 << 30) -MOS_EVTBIT_IRQ15 equ (1 << 31) - - -;********************************************************** -; exit application (syscall -1) -;********************************************************** - -; exit application -%macro MOS_EXIT 0 - mov eax,MOS_SC_EXIT - int 0x40 -%endmacro - -; exit application, smaller version -%macro MOS_EXIT_S 0 - xor eax,eax - dec eax - int 0x40 -%endmacro - - -;********************************************************** -; wait event stuff -; (MOS_SC_WAITEVENT, syscall 10) -;********************************************************** - -; wait for event -; destroys : nothing -; returns : eax = event type -%macro MOS_WAITEVENT 0 - mov eax,MOS_SC_WAITEVENT - int 0x40 -%endmacro - -; wait for event, smaller version -; destroys : flags -; returns : eax = event type -%macro MOS_WAITEVENT_S 0 - xor eax,eax - mov al,MOS_SC_WAITEVENT - int 0x40 -%endmacro - - -;********************************************************** -; window redraw status stuff -; (MOS_SC_REDRAWSTATUS, syscall 12) -;********************************************************** - -MOS_RS_STARTREDRAW equ 1 -MOS_RS_ENDREDRAW equ 2 - -; start window redraw -; destroys: eax,ebx -%macro MOS_STARTREDRAW 0 - mov ebx,MOS_RS_STARTREDRAW - mov eax,MOS_SC_REDRAWSTATUS - int 0x40 -%endmacro - -; start window redraw, smaller version -; destroys: eax,ebx,flags -%macro MOS_STARTREDRAW_S 0 - xor ebx,ebx - inc ebx - xor eax,eax - mov al,MOS_SC_REDRAWSTATUS - int 0x40 -%endmacro - -; end window redraw -; destroys: eax,ebx -%macro MOS_ENDREDRAW 0 - mov ebx,MOS_RS_ENDREDRAW - mov eax,MOS_SC_REDRAWSTATUS - int 0x40 -%endmacro - -; end window redraw, smaller version -; destroys: eax,ebx,flags -%macro MOS_ENDREDRAW_S 0 - xor ebx,ebx - mov bl,MOS_RS_ENDREDRAW - xor eax,eax - mov al,MOS_SC_REDRAWSTATUS - int 0x40 -%endmacro - - -;********************************************************** -; get screen max stuff (syscall 14) -;********************************************************** - -; get screen dimensions in eax -; destroys: nothing -%macro MOS_GETSCREENMAX 0 - mov eax,MOS_SC_GETSCREENMAX - int 0x40 -%endmacro - -; get screen dimensions in eax, smaller version -; destroys: flags -%macro MOS_GETSCREENMAX_S 0 - xor eax,eax - mov al,MOS_SC_GETSCREENMAX - int 0x40 -%endmacro - - -;******************************************************************** -; opcode hacks -;******************************************************************** - -; nasm refuses to assemble stuff like -; push dword 4.44 -; with the following macro this becomes possible: -; fpush32 9.81 -; don't forget to use a decimal point. things like -; fpush32 1 -; will probably not do what you expect. instead, write: -; fpush32 1.0 -%macro fpush32 1 - db 0x68 ; push imm32 - dd %1 -%endm - -%endif - diff --git a/programs/demos/aclock/trunk/str2dwrd.inc b/programs/demos/aclock/trunk/str2dwrd.inc deleted file mode 100644 index d2f1cbfea..000000000 --- a/programs/demos/aclock/trunk/str2dwrd.inc +++ /dev/null @@ -1,92 +0,0 @@ -; string2dword - a useless string to double word conversion routine -; -; Copyright (c) 2003 Thomas Mathys -; killer@vantage.ch -; -; This program is free software; you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation; either version 2 of the License, or -; (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with this program; if not, write to the Free Software -; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -; - - -;******************************************************************** -; converts an asciiz string into an unsigned doubleword. -; (base 10 is assumed) -; -; - first, leading whitespaces are skipped -; - then the function converts the string, until it -; finds the terminating zero, another character it -; cannot convert or the number becomes too large. -; -; input : esi = pointer to string -; output : eax = unsigned doubleword -; the function tries to convert as -; many digits as possible, before it -; stops. if the value of the dword -; becomes too large, 0xffffffff is -; returned. -; destroys : nothing -;******************************************************************** -string2dword: - push ebx - push ecx - push edx - push esi - pushfd - - xor ebx,ebx ; ebx : dword - - ; skip leading whitespaces -.skipspaces: - lodsb - cmp al,32 ; space - je .skipspaces - cmp al,12 ; ff - je .skipspaces - cmp al,10 ; lf - je .skipspaces - cmp al,13 ; cr - je .skipspaces - cmp al,9 ; ht - je .skipspaces - cmp al,11 ; vt - je .skipspaces - - ; convert string - dec esi ; esi -> 1st non-whitespace -.convert: - xor eax,eax ; get character - lodsb - sub al,'0' ; convert to digit - cmp al,9 ; is digit in range [0,9] ? - ja .done ; nope -> stop conversion - mov ecx,eax ; save new digit - mov eax,10 ; dword = dword * 10 - mul ebx - jc .overflow - add eax,ecx ; + new digit - jc .overflow - mov ebx,eax - jmp .convert - -.overflow: - mov ebx,0xffffffff -.done: - mov eax,ebx - popfd - pop esi - pop edx - pop ecx - pop ebx - ret - diff --git a/programs/demos/aclock/trunk/strlen.inc b/programs/demos/aclock/trunk/strlen.inc deleted file mode 100644 index d4ece71a7..000000000 --- a/programs/demos/aclock/trunk/strlen.inc +++ /dev/null @@ -1,49 +0,0 @@ -; strlen function -; -; Copyright (c) 2003 Thomas Mathys -; killer@vantage.ch -; -; This program is free software; you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation; either version 2 of the License, or -; (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with this program; if not, write to the Free Software -; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -; -%ifndef _STRLEN_INC -%define _STRLEN_INC - - -;******************************************************************** -; returns the length of an asciiz string -; input : esi = pointer to string -; output : eax = string length -; destroys : nothing -;******************************************************************** -strlen: - push ecx - push edi - pushfd - cld ; ! - mov ecx,-1 - mov edi,esi ; find terminating zero - xor al,al - repne scasb - mov eax,edi ; calculate string length - sub eax,esi - dec eax - popfd - pop edi - pop ecx - ret - - -%endif - diff --git a/programs/develop/mstate/Tupfile.lua b/programs/develop/mstate/Tupfile.lua index 513abdfe3..f410da7af 100644 --- a/programs/develop/mstate/Tupfile.lua +++ b/programs/develop/mstate/Tupfile.lua @@ -1,2 +1,4 @@ -if tup.getconfig("NO_NASM") ~= "" then return end -tup.rule("mstate.asm", "nasm -t -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "mstate") +if tup.getconfig("NO_FASM") ~= "" then return end +HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") +tup.include(HELPERDIR .. "/use_fasm.lua") +tup.rule("mstate.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o " .. tup.getconfig("KPACK_CMD"), "mstate") diff --git a/programs/develop/mstate/build.bat b/programs/develop/mstate/build.bat new file mode 100644 index 000000000..fb02946b9 --- /dev/null +++ b/programs/develop/mstate/build.bat @@ -0,0 +1,3 @@ +@fasm.exe -m 16384 mstate.asm mstate.kex +@kpack mstate.kex +pause diff --git a/programs/develop/mstate/make.bat b/programs/develop/mstate/make.bat deleted file mode 100644 index 7405a06d1..000000000 --- a/programs/develop/mstate/make.bat +++ /dev/null @@ -1 +0,0 @@ -nasm -f bin mstate.asm -o mstate \ No newline at end of file diff --git a/programs/develop/mstate/mstate.asm b/programs/develop/mstate/mstate.asm index aee4def17..659166201 100644 --- a/programs/develop/mstate/mstate.asm +++ b/programs/develop/mstate/mstate.asm @@ -1,246 +1,227 @@ -; This program shows state of mouse buttons ; -; to compile: nasm -f bin mstate.asm -o mstate ; -ORG 0 -BITS 32 -; ---------------------------------------------------------------------------- ; -PATH_SIZE equ 256 -PARAMS_SIZE equ 256 -STACK_SIZE equ 256 -; ---------------------------------------------------------------------------- ; -TEXT_WIDTH equ 6 -TEXT_HEIGHT equ 9 -; ---------------------------------------------------------------------------- ; -MOUSE_LEFT_BUTTON_MASK equ 1b -MOUSE_RIGHT_BUTTON_MASK equ 10b -MOUSE_MIDDLE_BUTTON_MASK equ 100b -; ---------------------------------------------------------------------------- ; -EM_REDRAW equ 1b -EM_KEY equ 10b -EM_BUTTON equ 100b -EM_RESERVED0 equ 1000b -EM_REDRAW_BACKGROUND equ 10000b -EM_MOUSE equ 100000b -EM_IPC equ 1000000b -EM_NETWORK equ 10000000b -EM_DEBUG equ 100000000b -; ---------------------------------------------------------------------------- ; -WINDOW_STYLE_SKINNED_FIXED equ 0x4000000 -WINDOW_STYLE_COORD_CLIENT equ 0x20000000 -WINDOW_STYLE_CAPTION equ 0x10000000 -; ---------------------------------------------------------------------------- ; -WINDOW_BORDER_SIZE equ 5 -; ---------------------------------------------------------------------------- ; -WINDOW_STYLE equ WINDOW_STYLE_SKINNED_FIXED | WINDOW_STYLE_COORD_CLIENT | WINDOW_STYLE_CAPTION -; ---------------------------------------------------------------------------- ; -MOUSE_BODY_COLOR equ 0x007C7C96 -MOUSE_LEFT_BUTTON_COLOR equ 0x008293A4 -MOUSE_RIGHT_BUTTON_COLOR equ 0x008293A4 -MOUSE_MIDDLE_BUTTON_COLOR equ 0x00A48293 -MOUSE_LEFT_BUTTON_PRESSED_COLOR equ 0x00568EC7 -MOUSE_RIGHT_BUTTON_PRESSED_COLOR equ 0x00568EC7 -MOUSE_MIDDLE_BUTTON_PRESSED_COLOR equ 0x00C7568E -WINDOW_BACK_COLOR equ 0x00EFEFEF -; ---------------------------------------------------------------------------- ; -MOUSE_WIDTH equ 120 -MOUSE_HEIGHT equ 240 -MOUSE_MARGIN equ 4 -BUTTONS_MARGIN equ 2 -; ---------------------------------------------------------------------------- ; -MOUSE_LEFT equ MOUSE_MARGIN -MOUSE_TOP equ MOUSE_MARGIN -WINDOW_WIDTH equ MOUSE_WIDTH + WINDOW_BORDER_SIZE * 2 + MOUSE_MARGIN * 2 -MOUSE_BODY_HEIGHT equ (MOUSE_HEIGHT - BUTTONS_MARGIN) / 2 -MOUSE_BODY_TOP equ MOUSE_HEIGHT - MOUSE_BODY_HEIGHT + MOUSE_TOP -LEFT_BUTTON_HEIGHT equ MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN -RIGHT_BUTTON_HEIGHT equ MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN -LEFT_BUTTON_WIDTH equ (MOUSE_WIDTH - BUTTONS_MARGIN) / 2 -RIGHT_BUTTON_WIDTH equ MOUSE_WIDTH - LEFT_BUTTON_WIDTH - BUTTONS_MARGIN -LEFT_BUTTON_LEFT equ MOUSE_LEFT -RIGHT_BUTTON_LEFT equ LEFT_BUTTON_LEFT + LEFT_BUTTON_WIDTH + BUTTONS_MARGIN -MIDDLE_BUTTON_WIDTH equ MOUSE_WIDTH / 10 -MIDDLE_BUTTON_HEIGHT equ MOUSE_HEIGHT / 6 -MIDDLE_BUTTON_LEFT equ (MOUSE_WIDTH - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_LEFT -MIDDLE_BUTTON_TOP equ (MOUSE_WIDTH / 2 - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_TOP -; ---------------------------------------------------------------------------- ; -%define SZ_BUTTONS_STATE "Buttons state:" -%define SZ_BIN "bin:" -%define SZ_HEX "hex:0x" -%strlen LEN_SZ_BUTTONS_STATE SZ_BUTTONS_STATE -%strlen LEN_SZ_BIN SZ_BIN -%strlen LEN_SZ_HEX SZ_HEX -; ---------------------------------------------------------------------------- ; -STATE_VALUES_HEIGHT equ 3 * TEXT_HEIGHT ; we have three lines of text -STATE_VALUES_WIDTH equ LEN_SZ_BUTTONS_STATE * TEXT_WIDTH -STATE_VALUES_TOP equ (MOUSE_BODY_HEIGHT - STATE_VALUES_HEIGHT) / 2 + MOUSE_BODY_TOP -STATE_VALUES_LEFT equ (MOUSE_WIDTH - STATE_VALUES_WIDTH) / 2 + MOUSE_LEFT -; ---------------------------------------------------------------------------- ; -MENUET01 db 'MENUET01' -version dd 1 -program.start dd START -program.end dd _END -program.memory dd _END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE -program.stack dd _END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE -program.params dd _END + PATH_SIZE -program.path dd _END -; ---------------------------------------------------------------------------- ; -mouse_body_color dd MOUSE_BODY_COLOR -mouse_left_button_color dd MOUSE_LEFT_BUTTON_COLOR -mouse_right_button_color dd MOUSE_RIGHT_BUTTON_COLOR -mouse_middle_button_color dd MOUSE_MIDDLE_BUTTON_COLOR -; ---------------------------------------------------------------------------- ; -mouse.button dd 0 -; ---------------------------------------------------------------------------- ; -sz_caption db "MouseState",0 -; ---------------------------------------------------------------------------- ; -sz_button_state db SZ_BUTTONS_STATE,0 -sz_bin db SZ_BIN,0 -sz_hex db SZ_HEX,0 -; ---------------------------------------------------------------------------- ; -%macro DrawMouseBody 0 -; draw.rectangle - mov eax, 13 - mov ebx, MOUSE_LEFT << 16 | MOUSE_WIDTH - mov ecx, MOUSE_BODY_TOP << 16 | MOUSE_BODY_HEIGHT - mov edx, [mouse_body_color] - int 64 -; texts - mov eax, 4 - mov ecx, 1100b << 28 | WINDOW_BACK_COLOR - mov edi, [mouse_body_color] -; draw.text - mov ebx, (STATE_VALUES_LEFT << 16) | STATE_VALUES_TOP - mov edx, sz_button_state - int 64 -; draw.text - add ebx, TEXT_HEIGHT - mov edx, sz_bin - int 64 -; draw.text - add ebx, TEXT_HEIGHT - mov edx, sz_hex - int 64 -%endmacro -; ---------------------------------------------------------------------------- ; -align 4 -DrawMouseButtons: - mov eax, 13 -; draw.rectangle - mov ebx, LEFT_BUTTON_LEFT << 16 | LEFT_BUTTON_WIDTH - mov ecx, MOUSE_TOP << 16 | LEFT_BUTTON_HEIGHT - mov edx, [mouse_left_button_color] - int 64 -; draw.rectangle - mov ebx, RIGHT_BUTTON_LEFT << 16 | RIGHT_BUTTON_WIDTH - mov ecx, MOUSE_TOP << 16 | RIGHT_BUTTON_HEIGHT - mov edx, [mouse_right_button_color] - int 64 -; draw.rectangle - mov ebx, MIDDLE_BUTTON_LEFT << 16 | MIDDLE_BUTTON_WIDTH - mov ecx, MIDDLE_BUTTON_TOP << 16 | MIDDLE_BUTTON_HEIGHT - mov edx, [mouse_middle_button_color] - int 64 -; Draw State Values - mov eax, 47 - mov esi, 0100b << 28 | WINDOW_BACK_COLOR - mov ecx, [mouse.button] - mov edi, [mouse_body_color] -; draw.number - mov ebx, (10 << 16) | (2 << 8) ; 10 digits, base2 - mov edx, (LEN_SZ_BIN * TEXT_WIDTH + STATE_VALUES_LEFT) << 16 | (STATE_VALUES_TOP + TEXT_HEIGHT) - int 64 -; draw.number - mov ebx, (8 << 16) | (1 << 8) ; 8 digits, base16 - mov edx, (LEN_SZ_HEX * TEXT_WIDTH + STATE_VALUES_LEFT) << 16 | (STATE_VALUES_TOP + TEXT_HEIGHT * 2) - int 64 - ret -; ---------------------------------------------------------------------------- ; -align 4 -START: -; get.screen.size - mov eax, 61 - mov ebx, 1 - int 64 - mov edx, eax - movzx ecx, ax - shr edx, 16 -; skin.height - mov eax, 48 - mov ebx, 4 - int 64 - add eax, MOUSE_HEIGHT + WINDOW_BORDER_SIZE + MOUSE_MARGIN * 2 - 1 - mov esi, eax - sub edx, (WINDOW_WIDTH - 1) - sub ecx, eax - shr edx, 1 - shr ecx, 1 -; set.event - mov eax, 40 - mov ebx, EM_REDRAW | EM_BUTTON | EM_MOUSE - int 64 -; ---------------------------------------------------------------------------- ; -align 4 -on_redraw: -; redraw.start - mov eax, 12 - mov ebx, 1 - int 64 -; draw.window - xor eax, eax - mov ebx, edx ; window.left -; ecx = window.top - shl ebx, 16 - shl ecx, 16 - or ebx, (WINDOW_WIDTH - 1) - or ecx, esi ; window.height - mov edx, WINDOW_STYLE | WINDOW_BACK_COLOR - mov edi, sz_caption - xor esi, esi - int 64 -; redraw.finish - mov eax, 12 - mov ebx, 2 - int 64 - DrawMouseBody - call DrawMouseButtons -align 4 -wait.event: - mov eax, 10 ; redraw = 001b; 001b & 110b = 000b - int 64 ; button = 011b; 011b & 110b = 010b - test eax, 110b ; mouse = 110b; 110b & 110b = 110b - jz on_redraw - jnp on_button -; get.mouse.button - mov eax, 37 - mov ebx, 2 - int 64 - cmp [mouse.button], eax ; if equal - je wait.event ; then no need update - mov ebx, dword MOUSE_LEFT_BUTTON_COLOR - mov ecx, dword MOUSE_RIGHT_BUTTON_COLOR - mov edx, dword MOUSE_MIDDLE_BUTTON_COLOR -.left: - test eax, MOUSE_LEFT_BUTTON_MASK - jz .right - mov ebx, dword MOUSE_LEFT_BUTTON_PRESSED_COLOR -.right: - test eax, MOUSE_RIGHT_BUTTON_MASK - jz .middle - mov ecx, dword MOUSE_RIGHT_BUTTON_PRESSED_COLOR -.middle: - test eax, MOUSE_MIDDLE_BUTTON_MASK - jz .other - mov edx, dword MOUSE_MIDDLE_BUTTON_PRESSED_COLOR -.other: - mov [mouse_left_button_color], ebx - mov [mouse_right_button_color], ecx - mov [mouse_middle_button_color], edx - mov [mouse.button], eax - call DrawMouseButtons - jmp wait.event -align 4 -on_button: ; terminate because we have only one button(close button) - or eax, -1 - int 64 -; ---------------------------------------------------------------------------- ; -align 4 -_END: +; SPDX-License-Identifier: GPL-2.0-only +; SPDX-FileCopyrightText: 2024 KolibriOS-NG Team + +format binary as "" +use32 +org 0 +db 'MENUET01' ; signature +dd 1 ; header version +dd start ; entry point +dd _image_end ; end of image +dd _memory ; required memory size +dd _stacktop ; address of stack top +dd 0 ; buffer for command line arguments +dd 0 ; buffer for path + +include '../../macros.inc' +include '../../KOSfuncs.inc' + +TEXT_WIDTH = 8 +TEXT_HEIGHT = 16 + +MOUSE_LEFT_BUTTON_MASK = 1b +MOUSE_RIGHT_BUTTON_MASK = 10b +MOUSE_MIDDLE_BUTTON_MASK = 100b + +WINDOW_STYLE_SKINNED_FIXED = 0x4000000 +WINDOW_STYLE_COORD_CLIENT = 0x20000000 +WINDOW_STYLE_CAPTION = 0x10000000 + +WINDOW_BORDER_SIZE = 5 +WINDOW_STYLE = (WINDOW_STYLE_SKINNED_FIXED or WINDOW_STYLE_COORD_CLIENT or WINDOW_STYLE_CAPTION) + +MOUSE_BODY_COLOR = 0x007C7C96 +MOUSE_LEFT_BUTTON_COLOR = 0x008293A4 +MOUSE_RIGHT_BUTTON_COLOR = 0x008293A4 +MOUSE_MIDDLE_BUTTON_COLOR = 0x00A48293 +MOUSE_LEFT_BUTTON_PRESSED_COLOR = 0x00568EC7 +MOUSE_RIGHT_BUTTON_PRESSED_COLOR = 0x00568EC7 +MOUSE_MIDDLE_BUTTON_PRESSED_COLOR = 0x00C7568E +WINDOW_BACK_COLOR = 0x00EFEFEF + +MOUSE_WIDTH = 180 +MOUSE_HEIGHT = 240 +MOUSE_MARGIN = 4 +BUTTONS_MARGIN = 2 + +MOUSE_LEFT = MOUSE_MARGIN +MOUSE_TOP = MOUSE_MARGIN +WINDOW_WIDTH = MOUSE_WIDTH + WINDOW_BORDER_SIZE * 2 + MOUSE_MARGIN * 2 +MOUSE_BODY_HEIGHT = (MOUSE_HEIGHT - BUTTONS_MARGIN) / 2 +MOUSE_BODY_TOP = MOUSE_HEIGHT - MOUSE_BODY_HEIGHT + MOUSE_TOP +LEFT_BUTTON_HEIGHT = MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN +RIGHT_BUTTON_HEIGHT = MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN +LEFT_BUTTON_WIDTH = (MOUSE_WIDTH - BUTTONS_MARGIN) / 2 +RIGHT_BUTTON_WIDTH = MOUSE_WIDTH - LEFT_BUTTON_WIDTH - BUTTONS_MARGIN +LEFT_BUTTON_LEFT = MOUSE_LEFT +RIGHT_BUTTON_LEFT = LEFT_BUTTON_LEFT + LEFT_BUTTON_WIDTH + BUTTONS_MARGIN +MIDDLE_BUTTON_WIDTH = MOUSE_WIDTH / 10 +MIDDLE_BUTTON_HEIGHT = MOUSE_HEIGHT / 6 +MIDDLE_BUTTON_LEFT = (MOUSE_WIDTH - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_LEFT +MIDDLE_BUTTON_TOP = (MOUSE_WIDTH / 2 - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_TOP + +; data: +mouse_left_button_color dd MOUSE_LEFT_BUTTON_COLOR +mouse_right_button_color dd MOUSE_RIGHT_BUTTON_COLOR +mouse_middle_button_color dd MOUSE_MIDDLE_BUTTON_COLOR + +mouse_button dd 0 +sz_caption db "MouseState", 0 + +sz_button_state db "Buttons state:", 0 +STATE_VALUES_WIDTH = ($ - sz_button_state - 1)*TEXT_WIDTH +sz_bin db "bin: ", 0 +LEN_SZ_BIN = $ - sz_bin - 1 +sz_hex db "hex: 0x", 0 +LEN_SZ_HEX = $ - sz_hex - 1 + +STATE_VALUES_HEIGHT = 3*TEXT_HEIGHT ; we have three lines of text +STATE_VALUES_TOP = ((MOUSE_BODY_HEIGHT - STATE_VALUES_HEIGHT) / 2 + MOUSE_BODY_TOP) +STATE_VALUES_LEFT = ((MOUSE_WIDTH - STATE_VALUES_WIDTH) / 2 + MOUSE_LEFT) + + + +align 4 +draw_mouse_buttons: + mov eax, SF_DRAW_RECT + + mov ebx, (LEFT_BUTTON_LEFT shl 16) or LEFT_BUTTON_WIDTH + mov ecx, (MOUSE_TOP shl 16) or LEFT_BUTTON_HEIGHT + mov edx, [mouse_left_button_color] + mcall + + mov ebx, (RIGHT_BUTTON_LEFT shl 16) or RIGHT_BUTTON_WIDTH + mov ecx, (MOUSE_TOP shl 16) or RIGHT_BUTTON_HEIGHT + mov edx, [mouse_right_button_color] + mcall + + mov ebx, (MIDDLE_BUTTON_LEFT shl 16) or MIDDLE_BUTTON_WIDTH + mov ecx, (MIDDLE_BUTTON_TOP shl 16) or MIDDLE_BUTTON_HEIGHT + mov edx, [mouse_middle_button_color] + mcall +; draw state values + mov eax, SF_DRAW_NUMBER + mov esi, (0101b shl 28) or WINDOW_BACK_COLOR + mov ecx, [mouse_button] + mov edi, MOUSE_BODY_COLOR + + mov ebx, (10 shl 16) or (2 shl 8) ; 10 digits, base2 + mov edx, ((LEN_SZ_BIN * TEXT_WIDTH + STATE_VALUES_LEFT) shl 16) or (STATE_VALUES_TOP + TEXT_HEIGHT) + mcall + + mov ebx, (8 shl 16) or (1 shl 8) ; 8 digits, base16 + mov edx, ((LEN_SZ_HEX * TEXT_WIDTH + STATE_VALUES_LEFT) shl 16) or (STATE_VALUES_TOP + TEXT_HEIGHT * 2) + mcall + ret + + +align 4 +start: + mcall SF_GET_GRAPHICAL_PARAMS, SSF_SCREEN_SIZE + mov edx, eax + movzx ecx, ax + shr edx, 16 + + mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT + add eax, MOUSE_HEIGHT + WINDOW_BORDER_SIZE + MOUSE_MARGIN * 2 - 1 + mov esi, eax + sub edx, (WINDOW_WIDTH - 1) + sub ecx, eax + shr edx, 1 + shr ecx, 1 + + mov eax, SF_SET_EVENTS_MASK + mov ebx, EVM_REDRAW or EVM_BUTTON or EVM_MOUSE + mcall + + +align 4 +on_redraw: + mcall SF_REDRAW, SSF_BEGIN_DRAW + xor eax, eax ; SF_CREATE_WINDOW + mov ebx, edx ; window.left +; ecx = window.top + shl ebx, 16 + shl ecx, 16 + or ebx, (WINDOW_WIDTH - 1) + or ecx, esi ; window.height + mov edx, WINDOW_STYLE or WINDOW_BACK_COLOR + mov edi, sz_caption + xor esi, esi + mcall + + mcall SF_REDRAW, SSF_END_DRAW +; draw mouse body: + mov eax, SF_DRAW_RECT + mov ebx, (MOUSE_LEFT shl 16) or MOUSE_WIDTH + mov ecx, (MOUSE_BODY_TOP shl 16) or MOUSE_BODY_HEIGHT + mov edx, MOUSE_BODY_COLOR + mcall + + mov eax, SF_DRAW_TEXT + mov ecx, (1101b shl 28) or WINDOW_BACK_COLOR + mov edi, MOUSE_BODY_COLOR + + mov ebx, (STATE_VALUES_LEFT shl 16) or STATE_VALUES_TOP + mov edx, sz_button_state + mcall + + add ebx, TEXT_HEIGHT + mov edx, sz_bin + mcall + + add ebx, TEXT_HEIGHT + mov edx, sz_hex + mcall + call draw_mouse_buttons + + +align 4 +wait_event: + mcall SF_WAIT_EVENT + cmp eax, EV_REDRAW + je on_redraw + cmp eax, EV_BUTTON + je on_button + ; otherwise mouse: + + mcall SF_MOUSE_GET, SSF_BUTTON + cmp [mouse_button], eax ; if equal, then no need update + je wait_event + mov ebx, dword MOUSE_LEFT_BUTTON_COLOR + mov ecx, dword MOUSE_RIGHT_BUTTON_COLOR + mov edx, dword MOUSE_MIDDLE_BUTTON_COLOR +.left: + test eax, MOUSE_LEFT_BUTTON_MASK + jz .right + mov ebx, dword MOUSE_LEFT_BUTTON_PRESSED_COLOR +.right: + test eax, MOUSE_RIGHT_BUTTON_MASK + jz .middle + mov ecx, dword MOUSE_RIGHT_BUTTON_PRESSED_COLOR +.middle: + test eax, MOUSE_MIDDLE_BUTTON_MASK + jz .other + mov edx, dword MOUSE_MIDDLE_BUTTON_PRESSED_COLOR +.other: + mov [mouse_left_button_color], ebx + mov [mouse_right_button_color], ecx + mov [mouse_middle_button_color], edx + mov [mouse_button], eax + call draw_mouse_buttons + jmp wait_event + +align 4 +on_button: +; terminate because we have only one button (close) + mcall SF_TERMINATE_PROCESS + +align 16 +_image_end: + +; reserve for stack: + rb 256 +align 16 +_stacktop: +_memory: + diff --git a/programs/fs/lod/Tupfile.lua b/programs/fs/lod/Tupfile.lua index a3944d63d..bcba7dc87 100644 --- a/programs/fs/lod/Tupfile.lua +++ b/programs/fs/lod/Tupfile.lua @@ -1,2 +1,2 @@ -if tup.getconfig("NO_NASM") ~= "" then return end -tup.rule("lod.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "lod") +if tup.getconfig("NO_FASM") ~= "" then return end +tup.rule("lod.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "lod") diff --git a/programs/fs/lod/build.bat b/programs/fs/lod/build.bat new file mode 100644 index 000000000..b97086e97 --- /dev/null +++ b/programs/fs/lod/build.bat @@ -0,0 +1,3 @@ +@fasm.exe -m 16384 lod.asm lod.kex +@kpack lod.kex +pause diff --git a/programs/fs/lod/lod.asm b/programs/fs/lod/lod.asm index 202710b16..ce3c65872 100644 --- a/programs/fs/lod/lod.asm +++ b/programs/fs/lod/lod.asm @@ -8,11 +8,20 @@ ; Author 0CodErr ; http://board.kolibrios.org/viewtopic.php?f=9&t=2486 -ORG 0 -BITS 32 -; ---------------------------------------------------------------------------- ; -PARAMS_SIZE equ 256 -STACK_SIZE equ 256 +use32 + org 0 + db 'MENUET01' +version dd 1 + dd program.start + dd program.end + dd program.memory + dd program.stack + dd program.params + dd 0 +; ---------------------------- ; + +include '../../macros.inc' +include '../../KOSfuncs.inc' ; ---------------------------------------------------------------------------- ; PROCINFO_SIZE equ 1024 FILENAME_AREA_SIZE equ 256 @@ -21,18 +30,10 @@ OPENFILE_PATH_SIZE equ 4096 FILTER_AREA_SIZE equ 256 FILTER_BRACKET equ "*" ; and for example: LOD *bmp,png,jpeg*/sys/media/kiv ; ---------------------------------------------------------------------------- ; -MENUET01 db 'MENUET01' -version dd 1 -program.start dd START -program.end dd END -program.memory dd END + PARAMS_SIZE + STACK_SIZE -program.stack dd END + PARAMS_SIZE + STACK_SIZE -program.params dd END -program.path dd 0 -; ---------------------------------------------------------------------------- ; -START: - mov edi,[program.params] - cmp [edi],dword 0 +align 4 +program.start: + mov edi, program.params + cmp [edi], dword 0 je terminate call FakeDrawWindow @@ -43,19 +44,13 @@ START: je terminate mov [file_info.params], eax launch_program: - mov eax, 70 - mov ebx, file_info - int 64 + mcall SF_FILE, file_info terminate: - or eax, -1 - int 64 + mcall SF_TERMINATE_PROCESS ; ---------------------------------------------------------------------------- ; OpenDialogInit: ; load.library - mov eax, 68 - mov ebx, 19 - mov ecx, sz_proc_lib - int 64 + mcall SF_SYS_MISC,SSF_LOAD_DLL, sz_proc_lib mov [proclib], eax push dword[proclib] @@ -68,10 +63,7 @@ OpenDialogInit: call GetProcAddress mov [opendialog_start], eax ; memory.allocate - mov eax, 68 - mov ebx, 12 - mov ecx, PROCINFO_SIZE + FILENAME_AREA_SIZE + OPENDIR_PATH_SIZE + OPENFILE_PATH_SIZE - int 64 + mcall SF_SYS_MISC,SSF_MEM_ALLOC, PROCINFO_SIZE + FILENAME_AREA_SIZE + OPENDIR_PATH_SIZE + OPENFILE_PATH_SIZE mov [od.procinfo], eax add eax, PROCINFO_SIZE @@ -121,13 +113,9 @@ GetProcAddress: ; ---------------------------------------------------------------------------- ; FakeDrawWindow: ; redraw.start - mov eax, 12 - mov ebx, 1 - int 64 + mcall SF_REDRAW,SSF_BEGIN_DRAW ; get.screen.size - mov eax, 61 - mov ebx, 1 - int 64 + mcall SF_GET_GRAPHICAL_PARAMS,SSF_SCREEN_SIZE shr eax, 1 and eax, 0x7FFF7FFF ; draw.window @@ -136,17 +124,13 @@ FakeDrawWindow: shr eax, 16 movzx ebx, ax shl ebx, 16 - mov edx, 0x01000000 - xor eax, eax - int 64 + mcall SF_CREATE_WINDOW,,, 0x01000000 ; redraw.finish - mov eax, 12 - mov ebx, 2 - int 64 + mcall SF_REDRAW,SSF_END_DRAW ret ; ---------------------------------------------------------------------------- ; OpenDialogSetFilter: - mov edi, [program.params] + mov edi, program.params mov esi, filefilter + 4 ; skip spaces or ecx, -1 @@ -195,22 +179,17 @@ OpenDialogSetFilter: LaunchProgram: mov eax, [od.openfile_path] mov [file_info.params], eax - mov eax, 70 - mov ebx, file_info - int 64 + mcall SF_FILE, file_info ret ; ---------------------------------------------------------------------------- ; file_info: - dd 7 - dd 0 -.params dd 0 - dd 0 - dd 0 + dd SSF_START_APP,0 +.params dd 0,0,0 db 0 .file_path dd 0 ; ---------------------------------------------------------------------------- ; filefilter dd 0 - resb FILTER_AREA_SIZE + rb FILTER_AREA_SIZE .end db 0 ; ---------------------------------------------------------------------------- ; od: @@ -242,4 +221,10 @@ proclib dd 0 opendialog_init dd 0 opendialog_start dd 0 ; ---------------------------------------------------------------------------- ; -END: \ No newline at end of file +align 4 +program.end: + program.params rb 256 + rb 256 +align 16 +program.stack: +program.memory: \ No newline at end of file diff --git a/programs/fs/lod/make.bat b/programs/fs/lod/make.bat deleted file mode 100644 index 21616207d..000000000 --- a/programs/fs/lod/make.bat +++ /dev/null @@ -1,2 +0,0 @@ -nasm -f bin LOD.asm -o LOD -pause \ No newline at end of file diff --git a/programs/games/c4/Tupfile.lua b/programs/games/c4/Tupfile.lua index 7d087b234..a31601da4 100644 --- a/programs/games/c4/Tupfile.lua +++ b/programs/games/c4/Tupfile.lua @@ -1,7 +1,7 @@ -if tup.getconfig("NO_NASM") ~= "" then return end --- tup.rule is too unmannerly to %define -tup.definerule{ - command = "echo %%define lang '" .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. "'> %o", - outputs = {"lang_nasm.inc"} -} -tup.rule({"c4.asm", extra_inputs = {"lang_nasm.inc"}}, "nasm -I" .. tup.getvariantdir() .. "/ -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "c4") +if tup.getconfig("NO_FASM") ~= "" then return end +HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") +tup.include(HELPERDIR .. "/use_fasm.lua") +add_include(tup.getvariantdir()) + +tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"}) +tup.rule({"c4.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "c4") diff --git a/programs/games/c4/ai.inc b/programs/games/c4/ai.inc index 517bb2328..61f84cc5d 100644 --- a/programs/games/c4/ai.inc +++ b/programs/games/c4/ai.inc @@ -18,16 +18,11 @@ ; along with C4; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -%ifndef _AI_INC -%define _AI_INC - INFTY equ 1000000000 - section .data - ; table used to perform some primitive move "ordering": ; middle columns which are usually more important are ; searched first. @@ -46,18 +41,10 @@ evaltable: dd 0, 0, 0, 0, 0, 0, 0, 0, 0 dd 0, 0, 0, 0, 0, 0, 0, 0, 0 - - section .bss - -cpulevel resd 1 ; level of current cpu player -bestval resd 1 ; value of best move found so far -nbestmoves resd 1 ; # of best moves found so far -bestmoves resd 7 ; array to hold all best moves - - - - section .text - +cpulevel rd 1 ; level of current cpu player +bestval rd 1 ; value of best move found so far +nbestmoves rd 1 ; # of best moves found so far +bestmoves rd 7 ; array to hold all best moves ;********************************************************** @@ -148,15 +135,16 @@ aiGetMove: ; output : eax = move value ; destroys : everything ;********************************************************** +align 4 alphabeta: -%define ply (ebp+20) -%define player (ebp+16) -%define alpha (ebp+12) -%define beta (ebp+ 8) - - enter 0,0 +ply equ (ebp+20) +player equ (ebp+16) +alpha equ (ebp+12) +beta equ (ebp+ 8) + push ebp + mov ebp,esp ; win for other player -> end search mov eax,[player] BOARDGETOTHERPLAYER eax @@ -262,9 +250,8 @@ alphabeta: leave ; eax contains static value ret 4*4 -%undef ply -%undef player -%undef alpha -%undef beta +purge ply +purge player +purge alpha +purge beta -%endif diff --git a/programs/games/c4/board.inc b/programs/games/c4/board.inc index 6bf1ccd2b..dffea64de 100644 --- a/programs/games/c4/board.inc +++ b/programs/games/c4/board.inc @@ -18,9 +18,6 @@ ; along with C4; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -%ifndef _BOARD_INC -%define _BOARD_INC - ;********************************************************** ; magic numbers @@ -36,27 +33,15 @@ BHEIGHT equ 8 -;********************************************************** -; uninitialized data -;********************************************************** - - section .bss - -board resd BHEIGHT*BWIDTH ; the board -free resd BWIDTH ; # of free fields for each column -totalfree resd 1 ; total # of free fields -currentplayer resd 1 ; player to make next move -lastmove resd 1 ; last move done on the board +board rd BHEIGHT*BWIDTH ; the board +free rd BWIDTH ; # of free fields for each column +totalfree rd 1 ; total # of free fields +currentplayer rd 1 ; player to make next move +lastmove rd 1 ; last move done on the board ; (0 if no last move available) -;********************************************************** -; code -;********************************************************** - - section .text - ;********************************************************** ; boardReset @@ -102,9 +87,9 @@ boardReset: ; zero flag clear -> move is valid ; destroys : nothing ;********************************************************** -%macro BOARDISVALIDMOVE 1 - cmp dword [free+%1*4],0 -%endmacro +macro BOARDISVALIDMOVE p1 { + cmp dword [free+p1*4],0 +} @@ -160,9 +145,9 @@ boardUndoMove: ; output : current player is switched ; destroys : flags ;********************************************************** -%macro BOARDSWITCHPLAYERS 0 - xor dword [currentplayer],(PLAYER1 ^ PLAYER2) -%endmacro +macro BOARDSWITCHPLAYERS { + xor dword [currentplayer],(PLAYER1 xor PLAYER2) +} @@ -174,9 +159,9 @@ boardUndoMove: ; output : player changed ; destroys : flags ;********************************************************** -%macro BOARDGETOTHERPLAYER 1 - xor %1,(PLAYER1 ^ PLAYER2) -%endmacro +macro BOARDGETOTHERPLAYER r1 { + xor r1,(PLAYER1 xor PLAYER2) +} @@ -188,9 +173,9 @@ boardUndoMove: ; output : zero flag set -> board is full ; zero flag clear -> board isn't full ;********************************************************** -%macro BOARDISFULL 0 +macro BOARDISFULL { cmp dword [totalfree],0 -%endmacro +} @@ -313,6 +298,3 @@ boardIsWin: ; no win for this player xor eax,eax ret - - -%endif \ No newline at end of file diff --git a/programs/games/c4/build.bat b/programs/games/c4/build.bat deleted file mode 100644 index eb2e7b3c7..000000000 --- a/programs/games/c4/build.bat +++ /dev/null @@ -1,2 +0,0 @@ -@nasmw -f bin -o c4 c4.asm -@pause \ No newline at end of file diff --git a/programs/games/c4/build_en.bat b/programs/games/c4/build_en.bat new file mode 100644 index 000000000..aeaf367d6 --- /dev/null +++ b/programs/games/c4/build_en.bat @@ -0,0 +1,4 @@ +@echo lang fix en_EN >lang.inc +@fasm.exe -m 16384 c4.asm c4.kex +@kpack c4.kex +pause diff --git a/programs/games/c4/build_ru.bat b/programs/games/c4/build_ru.bat new file mode 100644 index 000000000..3fdd81844 --- /dev/null +++ b/programs/games/c4/build_ru.bat @@ -0,0 +1,4 @@ +@echo lang fix ru_RU >lang.inc +@fasm.exe -m 16384 c4.asm c4.kex +@kpack c4.kex +pause diff --git a/programs/games/c4/c4.asm b/programs/games/c4/c4.asm index e130210b5..b13b8b2b8 100644 --- a/programs/games/c4/c4.asm +++ b/programs/games/c4/c4.asm @@ -18,14 +18,15 @@ ; along with C4; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - bits 32 - %include 'mos.inc' - section .text - %include 'lang_nasm.inc' ;fedesco - - - MOS_HEADER01 start,end +use32 + org 0 + db 'MENUET01' + dd 1,start,i_end,mem,stacktop,0,0 +include '../../macros.inc' +include '../../proc32.inc' +include '../../KOSfuncs.inc' +include 'lang.inc' ;fedesco ;********************************************************** @@ -46,11 +47,20 @@ BUTTON_HEIGHT equ 12 BUTTON_NEW_X equ 14 BUTTON_NEW_Y equ 30 -%ifidn lang, 'it_IT' - BUTTON_NEW_WIDTH equ 56 + 28 -%else - BUTTON_NEW_WIDTH equ 56 -%endif +BUTTON_NEW_HEIGHT equ 32 +if lang eq it_IT + BUTTON_NEW_WIDTH = 56 + 28 + LABEL_PL1_X = 90 + 10 + LABEL_PL1TYPE_X = (LABEL_PL1_X + 10*6 - 4) +else if lang eq ru_RU + BUTTON_NEW_WIDTH = 56 + 12 + LABEL_PL1_X = 90 + LABEL_PL1TYPE_X = (LABEL_PL1_X + 10*6) +else + BUTTON_NEW_WIDTH = 56 + LABEL_PL1_X = 90 + LABEL_PL1TYPE_X = (LABEL_PL1_X + 10*6) +end if BUTTON_SPIN_WIDTH equ 8 BUTTON_PL1DN_X equ 228 @@ -64,19 +74,9 @@ BUTTON_PL2UP_X equ (BUTTON_PL2DN_X + BUTTON_SPIN_WIDTH + 1) BUTTON_PL2UP_Y equ BUTTON_PL2DN_Y ; label dimensions -%ifidn lang, 'it_IT' - LABEL_PL1_X equ 90 + 10 -%else - LABEL_PL1_X equ 90 -%endif LABEL_PL1_Y equ (1 + BUTTON_PL1DN_Y + (BUTTON_HEIGHT-8)/2) LABEL_PL2_X equ LABEL_PL1_X LABEL_PL2_Y equ (1 + BUTTON_PL2DN_Y + (BUTTON_HEIGHT-8)/2) -%ifidn lang, 'it_IT' - LABEL_PL1TYPE_X equ (LABEL_PL1_X + 10*6 - 4) -%else - LABEL_PL1TYPE_X equ (LABEL_PL1_X + 10*6) -%endif LABEL_PL1TYPE_Y equ LABEL_PL1_Y LABEL_PL2TYPE_X equ LABEL_PL1TYPE_X LABEL_PL2TYPE_Y equ LABEL_PL2_Y @@ -94,9 +94,7 @@ GRIDY equ 70 GRIDSPACING equ (STONESIZE + 1) ; space between lines GRIDHEIGHT equ (6*GRIDSPACING+1) ; total grid width and height GRIDWIDTH equ (7*GRIDSPACING+1) -GRIDCOLOR equ MOS_RGB(128,128,128) - - +GRIDCOLOR equ 0x808080 ; button id's BT_QUIT equ 1 @@ -106,55 +104,170 @@ BT_PLAYER1UP equ 4 BT_PLAYER2DN equ 5 BT_PLAYER2UP equ 6 +include "pcx.inc" +include "windows.inc" +include "board.inc" +include "rng.inc" +;include "randomai.inc" +include "ai.inc" +; +; label table +; + +if lang eq it_IT + newgame db "Nuova partita",0 + down db "<",0 + up db ">",0 + pl1 db "Giocatore 1:",0 + pl2 db "Giocatore 2:",0 + + playertypes: + db "Umano ",0 + .e1: + db "CPU 1 ",0 + db "CPU 2 ",0 + db "CPU 3 ",0 + db "CPU 4 ",0 + db "CPU 5 ",0 + db "CPU 6 ",0 + db "CPU 7 ",0 + db "CPU 8 ",0 +else if lang eq ru_RU + newgame db "Новая игра",0 + down db "<",0 + up db ">",0 + pl1 db "Игрок 1:",0 + pl2 db "Игрок 2:",0 + + playertypes: + db "Человек ",0 + .e1: + db "Процессор 1 ",0 + db "Процессор 2 ",0 + db "Процессор 3 ",0 + db "Процессор 4 ",0 + db "Процессор 5 ",0 + db "Процессор 6 ",0 + db "Процессор 7 ",0 + db "Процессор 8 ",0 +else + newgame db "New game",0 + down db "<",0 + up db ">",0 + pl1 db "Player 1:",0 + pl2 db "Player 2:",0 + + playertypes: + db "Human ",0 + .e1: + db "CPU level 1 ",0 + db "CPU level 2 ",0 + db "CPU level 3 ",0 + db "CPU level 4 ",0 + db "CPU level 5 ",0 + db "CPU level 6 ",0 + db "CPU level 7 ",0 + db "CPU level 8 ",0 +end if +playertypes_end: + +PLAYERTYPELEN equ (playertypes.e1 - playertypes) +NPLAYERTYPES equ ((playertypes_end-playertypes)/PLAYERTYPELEN) + +; +; button table +; +align 4 +buttons: +; new +BUTTON (BUTTON_NEW_X shl 16) + BUTTON_NEW_WIDTH, (BUTTON_NEW_Y shl 16) + BUTTON_NEW_HEIGHT, BT_NEW, BUTTON_COLOR_WORK +; player 1 down +BUTTON (BUTTON_PL1DN_X shl 16) + BUTTON_SPIN_WIDTH, (BUTTON_PL1DN_Y shl 16) + BUTTON_HEIGHT, BT_PLAYER1DN, BUTTON_COLOR_WORK +; player 1 up +BUTTON (BUTTON_PL1UP_X shl 16) + BUTTON_SPIN_WIDTH, (BUTTON_PL1UP_Y shl 16) + BUTTON_HEIGHT, BT_PLAYER1UP, BUTTON_COLOR_WORK +; player 2 down +BUTTON (BUTTON_PL2DN_X shl 16) + BUTTON_SPIN_WIDTH, (BUTTON_PL2DN_Y shl 16) + BUTTON_HEIGHT, BT_PLAYER2DN, BUTTON_COLOR_WORK +; player 2 up +BUTTON (BUTTON_PL2UP_X shl 16) + BUTTON_SPIN_WIDTH, (BUTTON_PL2UP_Y shl 16) + BUTTON_HEIGHT, BT_PLAYER2UP, BUTTON_COLOR_WORK +buttons_end: + +NBUTTONS equ ((buttons_end-buttons)/sizeof.BUTTON) + +align 4 +labels: +; new +LABEL ((BUTTON_NEW_X+4) shl 16) + (1+BUTTON_NEW_Y+(BUTTON_NEW_HEIGHT-8)/2), newgame,LABEL_COLOR_WORKBUTTON,LABEL_BGCOLOR_TRANSPARENT +; player 1 down +LABEL ((BUTTON_PL1DN_X+(BUTTON_SPIN_WIDTH-4)/2) shl 16) + (1+BUTTON_PL1DN_Y+(BUTTON_HEIGHT-8)/2), down,LABEL_COLOR_WORKBUTTON,LABEL_BGCOLOR_TRANSPARENT +; player 1 up +LABEL ((1+BUTTON_PL1UP_X+(BUTTON_SPIN_WIDTH-4)/2) shl 16) + (1+BUTTON_PL1UP_Y+(BUTTON_HEIGHT-8)/2), up,LABEL_COLOR_WORKBUTTON,LABEL_BGCOLOR_TRANSPARENT +; player 2 down +LABEL ((BUTTON_PL2DN_X+(BUTTON_SPIN_WIDTH-4)/2) shl 16) + (1+BUTTON_PL2DN_Y+(BUTTON_HEIGHT-8)/2), down,LABEL_COLOR_WORKBUTTON,LABEL_BGCOLOR_TRANSPARENT +; player 2 up +LABEL ((1+BUTTON_PL2UP_X+(BUTTON_SPIN_WIDTH-4)/2) shl 16) + (1+BUTTON_PL2UP_Y+(BUTTON_HEIGHT-8)/2), up,LABEL_COLOR_WORKBUTTON,LABEL_BGCOLOR_TRANSPARENT +; player 1 +LABEL (LABEL_PL1_X shl 16) + LABEL_PL1_Y, pl1,0xffffff,LABEL_BGCOLOR_TRANSPARENT +; player 2 +LABEL (LABEL_PL2_X shl 16) + LABEL_PL2_Y, pl2,0xffffff,LABEL_BGCOLOR_TRANSPARENT +; status bar +statusbar LABEL (LABEL_STATUS_X shl 16) + LABEL_STATUS_Y, 0,0xffffff,LABEL_BGCOLOR_TRANSPARENT + +if lang eq it_IT +label_pl1type LABEL ((LABEL_PL1TYPE_X + 18) shl 16) + LABEL_PL1TYPE_Y, playertypes+PL1TYPE_INIT*PLAYERTYPELEN,0xffffff,0 +label_pl2type LABEL ((LABEL_PL2TYPE_X + 18) shl 16) + LABEL_PL2TYPE_Y, playertypes+PL2TYPE_INIT*PLAYERTYPELEN,0xffffff,0 +else +label_pl1type LABEL (LABEL_PL1TYPE_X shl 16) + LABEL_PL1TYPE_Y, playertypes+PL1TYPE_INIT*PLAYERTYPELEN,0xffffff,0 +label_pl2type LABEL (LABEL_PL2TYPE_X shl 16) + LABEL_PL2TYPE_Y, playertypes+PL2TYPE_INIT*PLAYERTYPELEN,0xffffff,0 +end if +labels_end: + +NLABELS equ ((labels_end-labels)/sizeof.LABEL) + + +; button images +redpcx: +file "red.pcx" +REDPCXSIZE equ (bluepcx - redpcx) +bluepcx: +file "blue.pcx" +pcx_end: +BLUEPCXSIZE equ (pcx_end - bluepcx) + + +align 4 start: - jmp main - -%include "pcx.inc" -%include "windows.inc" -%include "board.inc" -%include "rng.inc" -; %include "randomai.inc" -%include "ai.inc" - - - -;********************************************************** -; main program -;********************************************************** -main: call randomize call defineWindow call decrunchImages call newGame +align 16 .msgpump: ; wait for event - mov ebx,1 - mov eax,MOS_SC_WAITEVENTTIMEOUT - int 0x40 + mcall SF_WAIT_EVENT_TIMEOUT,1 ; process events - cmp eax,MOS_EVT_REDRAW - je short .redraw - cmp eax,MOS_EVT_KEY - je short .key - cmp eax,MOS_EVT_BUTTON - je short .button + cmp eax,EV_REDRAW + je .redraw + cmp eax,EV_KEY + je .key + cmp eax,EV_BUTTON + je .button call pollMouse call gameLoop - jmp short .msgpump + jmp .msgpump .redraw: call defineWindow - jmp short .msgpump + jmp .msgpump .key: call keyboardInput - jmp short .msgpump + jmp .msgpump .button: call handleButton - jmp short .msgpump + jmp .msgpump @@ -162,28 +275,27 @@ main: ; button handling function ;********************************************************** handleButton: - mov eax,MOS_SC_GETPRESSEDBUTTON ; get button id - int 0x40 + mcall SF_GET_BUTTON ; get button id cmp al,1 ; button pressed ? - je short .bye ; nope -> nothing to do + je .bye ; nope -> nothing to do cmp ah,BT_QUIT ; which button has been pressed ? - je short .quit + je .quit cmp ah,BT_NEW - je short .new + je .new cmp ah,BT_PLAYER1DN - je short .player1dn + je .player1dn cmp ah,BT_PLAYER1UP - je short .player1up + je .player1up cmp ah,BT_PLAYER2DN - je short .player2dn + je .player2dn cmp ah,BT_PLAYER2UP - je short .player2up + je .player2up .bye: ret .quit: - MOS_EXIT + mcall SF_TERMINATE_PROCESS .new: call newGame ret @@ -234,7 +346,7 @@ handleButton: ; window definition function ;********************************************************** defineWindow: - MOS_STARTREDRAW + mcall SF_REDRAW,SSF_BEGIN_DRAW mov edi,window call drawWindow @@ -250,7 +362,7 @@ defineWindow: xor eax,eax call drawBoard - MOS_ENDREDRAW + mcall SF_REDRAW,SSF_END_DRAW ret @@ -270,11 +382,10 @@ updateStatusText: mov dword [statusbar + LABEL.caption],esi ; yeah -> save & redraw ; clear background - mov ebx,MOS_DWORD(LABEL_STATUS_X,LABEL_STATUS_WIDTH) - mov ecx,MOS_DWORD(LABEL_STATUS_Y,LABEL_STATUS_HEIGHT) + mov ebx, LABEL_STATUS_X shl 16 + LABEL_STATUS_WIDTH + mov ecx, LABEL_STATUS_Y shl 16 + LABEL_STATUS_HEIGHT xor edx,edx - mov eax,MOS_SC_DRAWBAR - int 0x40 + mcall SF_DRAW_RECT ; redraw label mov edi,statusbar @@ -310,50 +421,50 @@ updatePlayerType: ; draw whole board ; ; input : eax nonzero = clear board background +align 4 drawBoard: ; clear background ? or eax,eax jz .noclear - mov ebx,MOS_DWORD(GRIDX,GRIDWIDTH) - mov ecx,MOS_DWORD(GRIDY,GRIDHEIGHT) + mov ebx, GRIDX shl 16 + GRIDWIDTH + mov ecx, GRIDY shl 16 + GRIDHEIGHT mov edx,WND_WORKCOLOR - mov eax,MOS_SC_DRAWBAR - int 0x40 + mcall SF_DRAW_RECT .noclear: call drawGrid call drawStones ret - +align 4 drawGrid: ; vertical lines - mov ebx,MOS_DWORD(GRIDX,GRIDX) - mov ecx,MOS_DWORD(GRIDY,GRIDY+GRIDHEIGHT-1) + mov ebx, GRIDX shl 16 + GRIDX + mov ecx, GRIDY shl 16 + GRIDY+GRIDHEIGHT-1 mov edx,GRIDCOLOR - mov eax,MOS_SC_DRAWLINE + mcall SF_DRAW_LINE mov esi,8 .vlines: int 0x40 - add ebx,MOS_DWORD(GRIDSPACING,GRIDSPACING) + add ebx, GRIDSPACING shl 16 + GRIDSPACING dec esi jnz .vlines ; horizontal lines - mov ebx,MOS_DWORD(GRIDX,GRIDX+GRIDWIDTH-1) - mov ecx,MOS_DWORD(GRIDY,GRIDY) + mov ebx, GRIDX shl 16 + GRIDX+GRIDWIDTH-1 + mov ecx, GRIDY shl 16 + GRIDY mov esi,7 .hlines: int 0x40 - add ecx,MOS_DWORD(GRIDSPACING,GRIDSPACING) + add ecx, GRIDSPACING shl 16 + GRIDSPACING dec esi jnz .hlines ret - +align 4 drawStones: mov ebx,6 .col: @@ -369,6 +480,7 @@ drawStones: ; ecx = column (1..7) ; ebx = row (1..6) +align 4 drawStone: pushad @@ -402,9 +514,8 @@ drawStone: ; put image (position is already in edx) mov ebx,ebp ; image address - mov ecx,MOS_DWORD(STONESIZE,STONESIZE) ; image dimensions - mov eax,MOS_SC_PUTIMAGE - int 0x40 + mov ecx, (STONESIZE shl 16) + STONESIZE ; image dimensions + mcall SF_PUT_IMAGE .bye: popad @@ -461,9 +572,8 @@ newGame: ; destroys : everything ;********************************************************** pollMouse: - mov ebx,2 - mov eax,MOS_SC_GETMOUSEPOSITION - int 0x40 + mcall SF_MOUSE_GET,SSF_BUTTON + and eax,1 jz .mousenotpressed .mousepressed: @@ -502,10 +612,8 @@ pollMouse: ; destroys : everything ;********************************************************** getMouseCol: - - mov ebx,1 ; get mouse position, window relative - mov eax,MOS_SC_GETMOUSEPOSITION - int 0x40 + + mcall SF_MOUSE_GET,SSF_WINDOW_POSITION ; get mouse position, window relative movzx ebx,ax ; y clipping cmp ebx,GRIDY @@ -539,24 +647,15 @@ getMouseCol: ; destroys : everything ;********************************************************** isActiveApp: - -%define PROCINFO (ebp-MOS_PROCESSINFO_size) - - enter MOS_PROCESSINFO_size,0 - ; get process information - mov eax,MOS_SC_GETPROCESSINFO - lea ebx,[ebp-MOS_PROCESSINFO_size] - mov ecx,-1 - int 0x40 + mcall SF_THREAD_INFO,procinfo,-1 ; set al to 1 if we are the active application - cmp ax,[PROCINFO+MOS_PROCESSINFO.windowStackPos] + cmp ax,[procinfo+process_information.window_stack_position] sete al - leave + ;;;leave ret -%undef PROCINFO @@ -569,8 +668,7 @@ isActiveApp: ; destroys : everything ;********************************************************** keyboardInput: - mov eax,MOS_SC_GETKEY ; get key - int 0x40 + mcall SF_GET_KEY ; get key or al,al ; key available ? jnz .bye ; no -> bye cmp dword [playerinput],0 ; unprocessed input available ? @@ -698,7 +796,7 @@ updatePlayerStatusText: cmp dword [player1_type],0 je .statustextok mov esi,player1cpuprmpt - jmp short .statustextok + jmp .statustextok .player2: mov esi,player2hmnprmpt cmp dword [player2_type],0 @@ -714,196 +812,11 @@ updatePlayerStatusText: ; initialized data ;********************************************************** - section .data - ; ; window definition ; windowtitle db "C4",0 -window: -istruc WND - at WND.xposandsize, dd MOS_DWORD(0,WND_WIDTH) - at WND.yposandsize, dd MOS_DWORD(0,WND_HEIGHT) - at WND.workcolor, dd 0x14000000 | WND_WORKCOLOR - at WND.grabcolor, dd 0 - at WND.framecolor, dd 0 - at WND.caption, dd windowtitle - at WND.captioncolor, dd 0 - at WND.flags, dd WND_CENTER | WND_DEFAULT_GRABCOLOR | WND_DEFAULT_FRAMECOLOR | WND_DEFAULT_CAPTIONCOLOR -iend - -; -; button table -; -buttons: -istruc BUTTON ; new - at BUTTON.xposandsize - dd MOS_DWORD(BUTTON_NEW_X,BUTTON_NEW_WIDTH) - dd MOS_DWORD(BUTTON_NEW_Y,BUTTON_HEIGHT) - dd BT_NEW - dd BUTTON_COLOR_WORK -iend -istruc BUTTON ; player 1 down - at BUTTON.xposandsize - dd MOS_DWORD(BUTTON_PL1DN_X,BUTTON_SPIN_WIDTH) - dd MOS_DWORD(BUTTON_PL1DN_Y,BUTTON_HEIGHT) - dd BT_PLAYER1DN - dd BUTTON_COLOR_WORK -iend -istruc BUTTON ; player 1 up - at BUTTON.xposandsize - dd MOS_DWORD(BUTTON_PL1UP_X,BUTTON_SPIN_WIDTH) - dd MOS_DWORD(BUTTON_PL1UP_Y,BUTTON_HEIGHT) - dd BT_PLAYER1UP - dd BUTTON_COLOR_WORK -iend -istruc BUTTON ; player 2 down - at BUTTON.xposandsize - dd MOS_DWORD(BUTTON_PL2DN_X,BUTTON_SPIN_WIDTH) - dd MOS_DWORD(BUTTON_PL2DN_Y,BUTTON_HEIGHT) - dd BT_PLAYER2DN - dd BUTTON_COLOR_WORK -iend -istruc BUTTON ; player 2 up - at BUTTON.xposandsize - dd MOS_DWORD(BUTTON_PL2UP_X,BUTTON_SPIN_WIDTH) - dd MOS_DWORD(BUTTON_PL2UP_Y,BUTTON_HEIGHT) - dd BT_PLAYER2UP - dd BUTTON_COLOR_WORK -iend -NBUTTONS equ (($-buttons)/BUTTON_size) - - -; -; label table -; -%ifidn lang, 'it_IT' - newgame db "Nuova partita",0 -%else - newgame db "New game",0 -%endif -down db "<",0 -up db ">",0 -%ifidn lang, 'it_IT' - pl1 db "Giocatore 1:",0 - pl2 db "Giocatore 2:",0 -%else - pl1 db "Player 1:",0 - pl2 db "Player 2:",0 -%endif - -%ifidn lang, 'it_IT' - playertypes: - db "Umano",0 - PLAYERTYPELEN equ ($ - playertypes) - db "CPU 1 ",0 - db "CPU 2 ",0 - db "CPU 3 ",0 - db "CPU 4 ",0 - db "CPU 5 ",0 - db "CPU 6 ",0 - db "CPU 7 ",0 - db "CPU 8 ",0 -%else - playertypes: - db "Human ",0 - PLAYERTYPELEN equ ($ - playertypes) - db "CPU level 1 ",0 - db "CPU level 2 ",0 - db "CPU level 3 ",0 - db "CPU level 4 ",0 - db "CPU level 5 ",0 - db "CPU level 6 ",0 - db "CPU level 7 ",0 - db "CPU level 8 ",0 -%endif - -NPLAYERTYPES equ (($-playertypes)/PLAYERTYPELEN) - - -labels: -istruc LABEL ; new - at LABEL.position - dd MOS_DWORD(BUTTON_NEW_X+4,1+BUTTON_NEW_Y+(BUTTON_HEIGHT-8)/2) - dd newgame - dd LABEL_COLOR_WORKBUTTON - dd LABEL_BGCOLOR_TRANSPARENT -iend -istruc LABEL ; player 1 down - at LABEL.position - dd MOS_DWORD(BUTTON_PL1DN_X+(BUTTON_SPIN_WIDTH-4)/2,1+BUTTON_PL1DN_Y+(BUTTON_HEIGHT-8)/2) - dd down - dd LABEL_COLOR_WORKBUTTON - dd LABEL_BGCOLOR_TRANSPARENT -iend -istruc LABEL ; player 1 up - at LABEL.position - dd MOS_DWORD(1+BUTTON_PL1UP_X+(BUTTON_SPIN_WIDTH-4)/2,1+BUTTON_PL1UP_Y+(BUTTON_HEIGHT-8)/2) - dd up - dd LABEL_COLOR_WORKBUTTON - dd LABEL_BGCOLOR_TRANSPARENT -iend -istruc LABEL ; player 2 down - at LABEL.position - dd MOS_DWORD(BUTTON_PL2DN_X+(BUTTON_SPIN_WIDTH-4)/2,1+BUTTON_PL2DN_Y+(BUTTON_HEIGHT-8)/2) - dd down - dd LABEL_COLOR_WORKBUTTON - dd LABEL_BGCOLOR_TRANSPARENT -iend -istruc LABEL ; player 2 up - at LABEL.position - dd MOS_DWORD(1+BUTTON_PL2UP_X+(BUTTON_SPIN_WIDTH-4)/2,1+BUTTON_PL2UP_Y+(BUTTON_HEIGHT-8)/2) - dd up - dd LABEL_COLOR_WORKBUTTON - dd LABEL_BGCOLOR_TRANSPARENT -iend -istruc LABEL ; player 1 - at LABEL.position - dd MOS_DWORD(LABEL_PL1_X,LABEL_PL1_Y) - dd pl1 - dd MOS_RGB(255,255,255) - dd LABEL_BGCOLOR_TRANSPARENT -iend -istruc LABEL ; player 2 - at LABEL.position - dd MOS_DWORD(LABEL_PL2_X,LABEL_PL2_Y) - dd pl2 - dd MOS_RGB(255,255,255) - dd LABEL_BGCOLOR_TRANSPARENT -iend -statusbar: ; status bar -istruc LABEL - at LABEL.position - dd MOS_DWORD(LABEL_STATUS_X,LABEL_STATUS_Y) - dd 0 - dd MOS_RGB(255,255,255) - dd LABEL_BGCOLOR_TRANSPARENT -iend -label_pl1type: -istruc LABEL - at LABEL.position - %ifidn lang, 'it_IT' - dd MOS_DWORD(LABEL_PL1TYPE_X + 18,LABEL_PL1TYPE_Y) - %else - dd MOS_DWORD(LABEL_PL1TYPE_X,LABEL_PL1TYPE_Y) - %endif - dd playertypes+PL1TYPE_INIT*PLAYERTYPELEN - dd MOS_RGB(255,255,255) - dd MOS_RGB(0,0,0) -iend -label_pl2type: -istruc LABEL - at LABEL.position - %ifidn lang, 'it_IT' - dd MOS_DWORD(LABEL_PL2TYPE_X + 18,LABEL_PL2TYPE_Y) - %else - dd MOS_DWORD(LABEL_PL2TYPE_X,LABEL_PL2TYPE_Y) - %endif - dd playertypes+PL2TYPE_INIT*PLAYERTYPELEN - dd MOS_RGB(255,255,255) - dd MOS_RGB(0,0,0) -iend -NLABELS equ (($-labels)/LABEL_size) +window WND WND_WIDTH, WND_HEIGHT, 0x14000000 or WND_WORKCOLOR, 0,0,windowtitle,0, WND_CENTER or WND_DEFAULT_GRABCOLOR or WND_DEFAULT_FRAMECOLOR or WND_DEFAULT_CAPTIONCOLOR ; player types @@ -912,23 +825,31 @@ player2_type dd PL2TYPE_INIT ; status messages -%ifidn lang, 'it_IT' +if lang eq it_IT player1hmnprmpt db "Turno del giocatore 1",0 player2hmnprmpt db "Turno del giocatore 2",0 player1cpuprmpt db "Attendi, giocatore 1 sta pensando...",0 player2cpuprmpt db "Attendi, giocatore 2 sta pensando...",0 itisadraw db "Pareggio",0 player1wins db "Vince giocatore 1",0 - player2wins db "Vince Giocatore 2",0 -%else - player1hmnprmpt db "Make your move, player 1.",0 - player2hmnprmpt db "Make your move, player 2.",0 + player2wins db "Vince giocatore 2",0 +else if lang eq ru_RU + player1hmnprmpt db "Игрок 1 сделайте ход",0 + player2hmnprmpt db "Игрок 2 сделайте ход",0 + player1cpuprmpt db "Подождите, игрок 1 думает......",0 + player2cpuprmpt db "Подождите, игрок 2 думает......",0 + itisadraw db "Это ничья",0 + player1wins db "Игрок 1 выиграл",0 + player2wins db "Игрок 2 выиграл",0 +else + player1hmnprmpt db "Make your move, player 1",0 + player2hmnprmpt db "Make your move, player 2",0 player1cpuprmpt db "Player 1 is thinking, please wait...",0 player2cpuprmpt db "Player 2 is thinking, please wait...",0 - itisadraw db "It's a draw.",0 - player1wins db "Player 1 wins.",0 - player2wins db "Player 2 wins.",0 -%endif + itisadraw db "It's a draw",0 + player1wins db "Player 1 wins",0 + player2wins db "Player 2 wins",0 +end if ; pointer to ai player. future releases C4 might @@ -936,29 +857,22 @@ player2_type dd PL2TYPE_INIT aicode dd aiGetMove -; button images -redpcx: incbin "red.pcx" -REDPCXSIZE equ ($ - redpcx) -bluepcx: incbin "blue.pcx" -BLUEPCXSIZE equ ($ - bluepcx) +align 16 +i_end: + sc system_colors + procinfo process_information + rb 1024 +align 16 +stacktop: + ; player input + ; 0 : no input available + ; 1..7 : column to drop stone into + playerinput rd 1 + mouseinput rd 1 + gameover rd 1 + redstone rb STONESIZE*STONESIZE*3 + bluestone rb STONESIZE*STONESIZE*3 +mem: -;********************************************************** -; uninitialized data -;********************************************************** - - section .bss - -; player input -; 0 : no input available -; 1..7 : column to drop stone into -playerinput resd 1 - -mouseinput resd 1 -gameover resd 1 - -redstone resb STONESIZE*STONESIZE*3 -bluestone resb STONESIZE*STONESIZE*3 - -end: diff --git a/programs/games/c4/mos.inc b/programs/games/c4/mos.inc deleted file mode 100644 index 72ab5ba7c..000000000 --- a/programs/games/c4/mos.inc +++ /dev/null @@ -1,305 +0,0 @@ -; mos.inc 0.0.2 -; Copyright (c) 2002 Thomas Mathys -; killer@vantage.ch -; -; This program is free software; you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation; either version 2 of the License, or -; (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with this program; if not, write to the Free Software -; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -; -; -; -; revision history -; ---------------- -; -; 10-04-2002 version 0.0.2 -; - removed MOS_WNDCOLORS_SIZE and similar constants. -; while reading the docs i realized that NASM creates -; such symbols already itself... -; + macros: MOS_WAITEVENT, MOS_WAITEVENT_S, MOS_STARTREDRAW, -; MOS_STARTREDRAW_S, MOS_ENDREDRAW, MOS_ENDREDRAW_S, -; MOS_GETSCREENMAX, MOS_GETSCREENMAX_S, MOS_EXIT, MOS_EXIT_S -; + event bit masks -; + some syscall numbers -; + process info structure -; -; 08-??-2002 version 0.0.1 -; first release -; -%ifndef _MOS_INC -%define _MOS_INC - - - -;********************************************************** -; generates a menuetos 01 header -; takes 2-6 parameters: -; -; MOS_HEADER01 start,end[,appmem,esp,i_param,i_icon] -;********************************************************** - -%macro MOS_HEADER01 2-6 0x100000,0x7fff0,0,0 - org 0x0 - db 'MENUET01' ; 8 byte id - dd 0x01 ; header version - dd %1 ; start of code - dd %2 ; image size - dd %3 ; application memory - dd %4 ; esp - dd %5 ; i_param - dd %6 ; i_icon -%endmacro - - -;********************************************************** -; MOS_DWORD -; packs 2 words into a double word -;********************************************************** - -%define MOS_DWORD(hi,lo) ((((hi) & 0xffff) << 16) + ((lo) & 0xffff)) - - -;********************************************************** -; MOS_RGB -; creates a menuet os compatible color (0x00RRGGBB) -;********************************************************** - -%define MOS_RGB(r,g,b) ((((r) & 255) << 16) + (((g) & 255) << 8) + ((b) & 255)) - - -;********************************************************** -; window color structure -;********************************************************** - -struc MOS_WNDCOLORS - .frame: resd 1 - .grab: resd 1 - .grabButton: resd 1 - .grabButtonText: resd 1 - .grabText: resd 1 - .work: resd 1 - .workButton: resd 1 - .workButtonText: resd 1 - .workText: resd 1 - .workGraphics: resd 1 -endstruc - - -;********************************************************** -; process info structure -;********************************************************** - -struc MOS_PROCESSINFO - .CPUUsage: resd 1 ; cpu usage - .windowStackPos: resw 1 ; process' position in windowing stack - .windowStackVal: resw 1 ; window stack value at ecx - .reserved1: resw 1 - .processName: resb 12 ; process name - .memStart: resd 1 ; start of process memory - .memUsed: resd 1 ; memory used by the process - .pid: resd 1 ; process id - .reserved2: resb (1024-34) -endstruc - - - -;********************************************************** -; system call numbers -;********************************************************** - -MOS_SC_EXIT equ -1 -MOS_SC_DEFINEWINDOW equ 0 -MOS_SC_PUTPIXEL equ 1 -MOS_SC_GETKEY equ 2 -MOS_SC_GETSYSCLOCK equ 3 -MOS_SC_WRITETEXT equ 4 -MOS_SC_DELAY equ 5 -MOS_SC_OPENFILEFLOPPY equ 6 -MOS_SC_PUTIMAGE equ 7 -MOS_SC_DEFINEBUTTON equ 8 -MOS_SC_GETPROCESSINFO equ 9 -MOS_SC_WAITEVENT equ 10 -MOS_SC_CHECKEVENT equ 11 -MOS_SC_REDRAWSTATUS equ 12 -MOS_SC_DRAWBAR equ 13 -MOS_SC_GETSCREENMAX equ 14 -MOS_SC_SETBACKGROUND equ 15 -MOS_SC_GETPRESSEDBUTTON equ 17 -MOS_SC_SYSTEMSERVICE equ 18 -MOS_SC_STARTPROGRAM equ 19 -MOS_SC_MIDIINTERFACE equ 20 -MOS_SC_DEVICESETUP equ 21 -MOS_SC_WAITEVENTTIMEOUT equ 23 -MOS_SC_CDAUDIO equ 24 -MOS_SC_SB16MIXER1 equ 25 -MOS_SC_GETDEVICESETUP equ 26 -MOS_SC_WSS equ 27 -MOS_SC_SB16MIXER2 equ 28 -MOS_SC_GETDATE equ 29 -MOS_SC_READHD equ 30 -MOS_SC_STARTPROGRAMHD equ 31 -MOS_SC_GETSCREENPIXEL equ 35 -MOS_SC_GETMOUSEPOSITION equ 37 -MOS_SC_DRAWLINE equ 38 -MOS_SC_GETBACKGROUND equ 39 -MOS_SC_SETEVENTMASK equ 40 -MOS_SC_WRITENUMBER equ 47 -MOS_SC_WINDOWPROPERTIES equ 48 - - -;********************************************************** -; event numbers -;********************************************************** - -MOS_EVT_NONE equ 0 -MOS_EVT_REDRAW equ 1 -MOS_EVT_KEY equ 2 -MOS_EVT_BUTTON equ 3 - - -;********************************************************** -; event bits -;********************************************************** - -MOS_EVTBIT_REDRAW equ (1 << 0) -MOS_EVTBIT_KEY equ (1 << 1) -MOS_EVTBIT_BUTTON equ (1 << 2) -MOS_EVTBIT_ENDREQUEST equ (1 << 3) -MOS_EVTBIT_BGDRAW equ (1 << 4) -MOS_EVTBIT_MOUSECHANGE equ (1 << 5) -MOS_EVTBIT_IPCEVENT equ (1 << 6) -MOS_EVTBIT_IRQ0 equ (1 << 16) -MOS_EVTBIT_IRQ1 equ (1 << 17) -MOS_EVTBIT_IRQ2 equ (1 << 18) -MOS_EVTBIT_IRQ3 equ (1 << 19) -MOS_EVTBIT_IRQ4 equ (1 << 20) -MOS_EVTBIT_IRQ5 equ (1 << 21) -MOS_EVTBIT_IRQ6 equ (1 << 22) -MOS_EVTBIT_IRQ7 equ (1 << 23) -MOS_EVTBIT_IRQ8 equ (1 << 24) -MOS_EVTBIT_IRQ9 equ (1 << 25) -MOS_EVTBIT_IRQ10 equ (1 << 26) -MOS_EVTBIT_IRQ11 equ (1 << 27) -MOS_EVTBIT_IRQ12 equ (1 << 28) -MOS_EVTBIT_IRQ13 equ (1 << 29) -MOS_EVTBIT_IRQ14 equ (1 << 30) -MOS_EVTBIT_IRQ15 equ (1 << 31) - - -;********************************************************** -; exit application (syscall -1) -;********************************************************** - -; exit application -%macro MOS_EXIT 0 - mov eax,MOS_SC_EXIT - int 0x40 -%endmacro - -; exit application, smaller version -%macro MOS_EXIT_S 0 - xor eax,eax - dec eax - int 0x40 -%endmacro - - -;********************************************************** -; wait event stuff -; (MOS_SC_WAITEVENT, syscall 10) -;********************************************************** - -; wait for event -; destroys : nothing -; returns : eax = event type -%macro MOS_WAITEVENT 0 - mov eax,MOS_SC_WAITEVENT - int 0x40 -%endmacro - -; wait for event, smaller version -; destroys : flags -; returns : eax = event type -%macro MOS_WAITEVENT_S 0 - xor eax,eax - mov al,MOS_SC_WAITEVENT - int 0x40 -%endmacro - - -;********************************************************** -; window redraw status stuff -; (MOS_SC_REDRAWSTATUS, syscall 12) -;********************************************************** - -MOS_RS_STARTREDRAW equ 1 -MOS_RS_ENDREDRAW equ 2 - -; start window redraw -; destroys: eax,ebx -%macro MOS_STARTREDRAW 0 - mov ebx,MOS_RS_STARTREDRAW - mov eax,MOS_SC_REDRAWSTATUS - int 0x40 -%endmacro - -; start window redraw, smaller version -; destroys: eax,ebx,flags -%macro MOS_STARTREDRAW_S 0 - xor ebx,ebx - inc ebx - xor eax,eax - mov al,MOS_SC_REDRAWSTATUS - int 0x40 -%endmacro - -; end window redraw -; destroys: eax,ebx -%macro MOS_ENDREDRAW 0 - mov ebx,MOS_RS_ENDREDRAW - mov eax,MOS_SC_REDRAWSTATUS - int 0x40 -%endmacro - -; end window redraw, smaller version -; destroys: eax,ebx,flags -%macro MOS_ENDREDRAW_S 0 - xor ebx,ebx - mov bl,MOS_RS_ENDREDRAW - xor eax,eax - mov al,MOS_SC_REDRAWSTATUS - int 0x40 -%endmacro - - -;********************************************************** -; get screen max stuff (syscall 14) -;********************************************************** - -; get screen dimensions in eax -; destroys: nothing -%macro MOS_GETSCREENMAX 0 - mov eax,MOS_SC_GETSCREENMAX - int 0x40 -%endmacro - -; get screen dimensions in eax, smaller version -; destroys: flags -%macro MOS_GETSCREENMAX_S 0 - xor eax,eax - mov al,MOS_SC_GETSCREENMAX - int 0x40 -%endmacro - - - -%endif \ No newline at end of file diff --git a/programs/games/c4/pcx.inc b/programs/games/c4/pcx.inc index 5b9755b14..973b56a4f 100644 --- a/programs/games/c4/pcx.inc +++ b/programs/games/c4/pcx.inc @@ -16,38 +16,32 @@ ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -%ifndef _PCX_INC -%define _PCX_INC - ;********************************************************** ; pcx header ;********************************************************** PCXHEADER_SIZE equ 128 -struc PCXHEADER - .id: resb 1 ; id, should be 10 - .version: resb 1 ; pcx version - .encoding: resb 1 ; 1 = rle - .bpp: resb 1 ; bits per pixel - .xmin: resw 1 ; image dimensions - .ymin: resw 1 - .xmax: resw 1 - .ymax: resw 1 - .hdpi: resw 1 ; horizontal resolution in dpi - .vdpi: resw 1 ; verttical resolution in dpi - .colormap: resb 48 ; 16 color palette - .reserved1: resb 1 - .nplanes: resb 1 ; # of color planes - .bytesperline: resw 1 ; # of bytes per scanline. always even - .palinfo: resw 1 ; 1 = color/bw, 2 = grayscale - .hscreensize: resw 1 ; horizontal screen size - .vscreensize: resw 1 ; vertical screen size - .reserved2: resb 54 -endstruc - - -section .text +struct PCXHEADER + id rb 1 ; id, should be 10 + version rb 1 ; pcx version + encoding rb 1 ; 1 = rle + bpp rb 1 ; bits per pixel + xmin rw 1 ; image dimensions + ymin rw 1 + xmax rw 1 + ymax rw 1 + hdpi rw 1 ; horizontal resolution in dpi + vdpi rw 1 ; verttical resolution in dpi + colormap rb 48 ; 16 color palette + reserved1 rb 1 + nplanes rb 1 ; # of color planes + bytesperline rw 1 ; # of bytes per scanline. always even + palinfo rw 1 ; 1 = color/bw, 2 = grayscale + hscreensize rw 1 ; horizontal screen size + vscreensize rw 1 ; vertical screen size + reserved2 rb 54 +ends @@ -98,7 +92,7 @@ loadPCX: .decode: lodsb ; read byte from input stream cmp al,192 ; encoded/unencoded byte ? - jae short .encoded + jae .encoded lea edx,[eax*2+eax] ; read color values from mov al,[ebx+edx+2] ; palette and store them stosb ; in the destination image @@ -107,7 +101,7 @@ loadPCX: mov al,[ebx+edx+0] stosb dec ebp ; one less to go... - jmp short .continue + jmp .continue .encoded: and al,00111111b ; calc # of times to repeat mov cl,al @@ -127,11 +121,8 @@ loadPCX: xor ah,ah ; reset ah to 0 ! .continue: or ebp,ebp ; all pixels decoded ? - jnz short .decode + jnz .decode popfd popad ret - - -%endif \ No newline at end of file diff --git a/programs/games/c4/randomai.inc b/programs/games/c4/randomai.inc index 5fedd0b62..298c03cad 100644 --- a/programs/games/c4/randomai.inc +++ b/programs/games/c4/randomai.inc @@ -18,12 +18,6 @@ ; along with C4; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -%infdef _RANDOMAI_INC -%define _RANDOMAI_INC - - section .text - - ;********************************************************** ; randomaiGetMove @@ -47,4 +41,3 @@ randomaiGetMove mov eax,edx ; return move ret -%endif \ No newline at end of file diff --git a/programs/games/c4/rng.inc b/programs/games/c4/rng.inc index c175218d1..e8c04ef62 100644 --- a/programs/games/c4/rng.inc +++ b/programs/games/c4/rng.inc @@ -18,10 +18,6 @@ ; along with C4; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -%ifndef _RNG_INC -%define _RNG_INC - - section .data ; random seed @@ -29,9 +25,6 @@ seed dd 0 - section .text - - ;********************************************************** ; randomize ; initialize random number generator. @@ -43,8 +36,7 @@ seed dd 0 ;********************************************************** randomize: push eax - mov eax,MOS_SC_GETSYSCLOCK - int 0x40 + mcall SF_GET_SYS_TIME mov [seed],eax pop eax ret @@ -72,5 +64,3 @@ rand: pop edx popfd ret - -%endif \ No newline at end of file diff --git a/programs/games/c4/windows.inc b/programs/games/c4/windows.inc index 05cd588c6..2e287aa41 100644 --- a/programs/games/c4/windows.inc +++ b/programs/games/c4/windows.inc @@ -16,63 +16,52 @@ ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -%ifndef _WINDOWS_INC -%define _WINDOWS_INC - -WND_CENTER equ (1 << 0) -WND_DEFAULT_WORKCOLOR equ (1 << 1) -WND_DEFAULT_GRABCOLOR equ (1 << 2) -WND_DEFAULT_FRAMECOLOR equ (1 << 3) -WND_DEFAULT_CAPTIONCOLOR equ (1 << 4) +WND_CENTER equ (1 shl 0) +WND_DEFAULT_WORKCOLOR equ (1 shl 1) +WND_DEFAULT_GRABCOLOR equ (1 shl 2) +WND_DEFAULT_FRAMECOLOR equ (1 shl 3) +WND_DEFAULT_CAPTIONCOLOR equ (1 shl 4) WND_DEFAULT_COLORS equ (WND_DEFAULT_WORKCOLOR | WND_DEFAULT_GRABCOLOR | WND_DEFAULT_FRAMECOLOR | WND_DEFAULT_CAPTIONCOLOR) -struc WND - .xposandsize resd 1 ; x position and size (like syscall) - .yposandsize resd 1 ; y position and size (like syscall) - .workcolor resd 1 ; work area color (like syscall) - .grabcolor resd 1 ; grab bar color (like syscall) - .framecolor resd 1 ; frame color (like syscall) - .caption resd 1 ; pointer to caption (zero terminated) +struct WND + xposandsize rd 1 ; x position and size (like syscall) + yposandsize rd 1 ; y position and size (like syscall) + workcolor rd 1 ; work area color (like syscall) + grabcolor rd 1 ; grab bar color (like syscall) + framecolor rd 1 ; frame color (like syscall) + caption rd 1 ; pointer to caption (zero terminated) ; can be zero, if no caption is desired. - .captioncolor resd 1 ; caption color - .flags resd 1 ; combination of WND_xxx flags, or zero. -endstruc + captioncolor rd 1 ; caption color + flags rd 1 ; combination of WND_xxx flags, or zero. +ends + +USE_SYSTEM_COLORS equ 0 ;0 or 1 +BUTTON_COLOR_WORK equ 0x505050 -BUTTON_COLOR_GRAB equ 0x01000000 -BUTTON_COLOR_WORK equ 0x02000000 - - -struc BUTTON - .xposandsize resd 1 ; x position and size (like syscall) - .yposandsize resd 1 ; y position and size (like syscall) - .id resd 1 ; button id - .color resd 1 ; button color. can be a real color +struct BUTTON + xposandsize rd 1 ; x position and size (like syscall) + yposandsize rd 1 ; y position and size (like syscall) + id rd 1 ; button id + color rd 1 ; button color. can be a real color ; or one of the BUTTON_COLOR_xxx constants -endstruc +ends -LABEL_COLOR_GRABBUTTON equ 0x01000000 ; use grab button text default color -LABEL_COLOR_GRAB equ 0x02000000 ; use grab text default color -LABEL_COLOR_WORKBUTTON equ 0x03000000 ; use work button text default color -LABEL_COLOR_WORK equ 0x04000000 ; use work text default color +LABEL_COLOR_WORKBUTTON equ 0xffffff ; use work button text default color LABEL_BGCOLOR_TRANSPARENT equ 0x01000000 ; transparent -LABEL_BGCOLOR_WORK equ 0x02000000 ; use work area color -struc LABEL - .position resd 1 ; position, x in upper word, y in lower word - .caption resd 1 ; pointer to caption (zero terminated) +struct LABEL + position rd 1 ; position, x in upper word, y in lower word + caption rd 1 ; pointer to caption (zero terminated) ; if this is field is zero, the label will ; not be drawn. - .color resd 1 ; text color, or a LABEL_COLOR_xxx constant - .bgcolor resd 1 ; background color, or a LABEL_BGCOLOR_xxx constant -endstruc - - - section .text + color rd 1 ; text color, or a LABEL_COLOR_xxx constant + bgcolor rd 1 ; background color, or a LABEL_BGCOLOR_xxx constant +ends ;*********************************************************** @@ -87,61 +76,47 @@ endstruc ;*********************************************************** drawWindow: - -%define WNDCOLORS ebp-MOS_WNDCOLORS_size - - enter MOS_WNDCOLORS_size,0 pushfd pushad ; get default window colors - mov ebx,3 - lea ecx,[WNDCOLORS] - mov edx,MOS_WNDCOLORS_size - mov eax,MOS_SC_WINDOWPROPERTIES - int 0x40 + mcall SF_STYLE_SETTINGS,3,sc,sizeof.system_colors ; ; window position ; test dword [edi + WND.flags],WND_CENTER ; center window ? - jnz short .center + jnz .center mov ebx,[edi + WND.xposandsize] ; nope -> just load dimensions mov ecx,[edi + WND.yposandsize] - jmp short .positionok + jmp .positionok .center: ; so let's center this window... - MOS_GETSCREENMAX ; get screen dimensions + mcall SF_GET_SCREEN_SIZE ; get screen dimensions mov ebx,eax ; xpos = (screenx-width)/2 shr ebx,16 - sub bx,[edi + WND.xposandsize] - jns short .xok + sub bx,word[edi + WND.xposandsize] + jns .xok xor ebx,ebx .xok: shl ebx,15 ; / 2, move result to hi-word - mov bx,[edi + WND.xposandsize] + mov bx,word[edi + WND.xposandsize] movzx ecx,ax ; same for ypos - sub cx,[edi + WND.yposandsize] - jns short .yok + sub cx,word[edi + WND.yposandsize] + jns .yok xor ecx,ecx .yok: shl ecx,15 - mov cx,[edi + WND.yposandsize] + mov cx,word[edi + WND.yposandsize] .positionok: ; ebx/ecx contain dimensions - push edi - ; define window - mov eax,MOS_SC_DEFINEWINDOW mov edx,[edi + WND.workcolor] mov edi,windowtitle - int 0x40 - pop edi + mcall SF_CREATE_WINDOW popad popfd - leave ret -%undef WNDCOLORS ;*********************************************************** @@ -153,53 +128,40 @@ drawWindow: ; destroys: nothing ; notes: you must call begin redraw/end redraw yourself ;*********************************************************** - +align 4 drawButtons: - -%define WNDCOLORS ebp-MOS_WNDCOLORS_size - or ecx,ecx - jnz short .ok + jnz .ok ret .ok: - enter MOS_WNDCOLORS_size,0 pushfd pushad ; get default window colors + if USE_SYSTEM_COLORS eq 1 push ecx - mov ebx,3 - lea ecx,[WNDCOLORS] - mov edx,MOS_WNDCOLORS_size - mov eax,MOS_SC_WINDOWPROPERTIES - int 0x40 + mcall SF_STYLE_SETTINGS,3,sc,sizeof.system_colors pop ecx - + end if +align 4 .drawall: push ecx mov ebx,[edi + BUTTON.xposandsize] mov ecx,[edi + BUTTON.yposandsize] mov edx,[edi + BUTTON.id] - mov esi,[edi + BUTTON.color] - cmp esi,BUTTON_COLOR_GRAB ; use a default color ? - jne .ok1 - mov esi,[WNDCOLORS + MOS_WNDCOLORS.grabButton] -.ok1: - cmp esi,BUTTON_COLOR_WORK - jne .ok2 - mov esi,[WNDCOLORS + MOS_WNDCOLORS.workButton] -.ok2: - mov eax,MOS_SC_DEFINEBUTTON - int 0x40 - add edi,BUTTON_size + if USE_SYSTEM_COLORS eq 1 + mov esi,[sc.work_button] ; use a system color + else + mov esi,[edi + BUTTON.color] ; use a default color + end if + mcall SF_DEFINE_BUTTON + add edi,sizeof.BUTTON pop ecx loop .drawall popad popfd - leave ret -%undef WNDCOLORS ;*********************************************************** @@ -210,33 +172,27 @@ drawButtons: ; output: nothing ; destroys: nothing ;*********************************************************** - +align 4 drawLabels: - -%define WNDCOLORS ebp-MOS_WNDCOLORS_size - or ecx,ecx - jnz short .ok + jnz .ok ret .ok: - enter MOS_WNDCOLORS_size,0 pushfd pushad ; get default window colors + if USE_SYSTEM_COLORS eq 1 push ecx - mov ebx,3 - lea ecx,[WNDCOLORS] - mov edx,MOS_WNDCOLORS_size - mov eax,MOS_SC_WINDOWPROPERTIES - int 0x40 + mcall SF_STYLE_SETTINGS,3,sc,sizeof.system_colors pop ecx + end if .drawall: push ecx cmp dword [edi + LABEL.caption],0 - jne short .notnull + jne .notnull jmp .next .notnull: @@ -261,41 +217,28 @@ drawLabels: mov bx,ax mov ecx,[edi + LABEL.position] ; ecx = ystart/height shl ecx,16 - mov cx,8 + mov cx,8 + if USE_SYSTEM_COLORS eq 1 + mov edx,[sc.work] + else mov edx,[edi + LABEL.bgcolor] - cmp edx,LABEL_BGCOLOR_WORK - jne short .bgcolorok - mov edx,[WNDCOLORS + MOS_WNDCOLORS.work] -.bgcolorok: - mov eax,MOS_SC_DRAWBAR - int 0x40 + end if + mcall SF_DRAW_RECT .clearok: ; draw label mov ebx,[edi + LABEL.position] ; ebx = label position mov edx,[edi + LABEL.caption] ; edx -> caption + + if USE_SYSTEM_COLORS eq 1 + mov ecx,[sc.work_button_text] + else mov ecx,[edi + LABEL.color] ; ecx = color - cmp ecx,LABEL_COLOR_GRABBUTTON - jne short .ok1 - mov ecx,[WNDCOLORS + MOS_WNDCOLORS.grabButtonText] -.ok1: - cmp ecx,LABEL_COLOR_GRAB - jne short .ok2 - mov ecx,[WNDCOLORS + MOS_WNDCOLORS.grabText] -.ok2: - cmp ecx,LABEL_COLOR_WORKBUTTON - jne short .ok3 - mov ecx,[WNDCOLORS + MOS_WNDCOLORS.workButtonText] -.ok3: - cmp ecx,LABEL_COLOR_WORK - jne short .ok4 - mov ecx,[WNDCOLORS + MOS_WNDCOLORS.workText] -.ok4: - mov eax,MOS_SC_WRITETEXT - int 0x40 + end if + mcall SF_DRAW_TEXT .next: - add edi,LABEL_size ; next label + add edi,sizeof.LABEL ; next label pop ecx dec ecx jz .done @@ -304,9 +247,5 @@ drawLabels: popad popfd - leave ret -%undef WNDCOLORS - -%endif \ No newline at end of file diff --git a/programs/media/FillScr/Tupfile.lua b/programs/media/FillScr/Tupfile.lua index eb156beba..e2e55198b 100644 --- a/programs/media/FillScr/Tupfile.lua +++ b/programs/media/FillScr/Tupfile.lua @@ -1,2 +1,2 @@ -if tup.getconfig("NO_NASM") ~= "" then return end -tup.rule("fillscr.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "fillscr") \ No newline at end of file +if tup.getconfig("NO_FASM") ~= "" then return end +tup.rule("fillscr.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "fillscr") diff --git a/programs/media/FillScr/build.bat b/programs/media/FillScr/build.bat new file mode 100644 index 000000000..7761428e6 --- /dev/null +++ b/programs/media/FillScr/build.bat @@ -0,0 +1,3 @@ +@fasm.exe -m 16384 fillscr.asm fillscr.kex +@kpack fillscr.kex +pause diff --git a/programs/media/FillScr/fillscr.asm b/programs/media/FillScr/fillscr.asm index d34b69e2e..2784e80af 100644 --- a/programs/media/FillScr/fillscr.asm +++ b/programs/media/FillScr/fillscr.asm @@ -1,28 +1,29 @@ -; to compile: nasm -f bin fillscr.asm -o fillscr ; ; to generate random colors use "fillscr rnd" ; ; otherwise use "filscr r,g,b, r,g,b, r,g,b,..." ; -ORG 0 -BITS 32 +use32 + org 0 + db 'MENUET01' +version dd 1 + dd program.start + dd program.end + dd program.memory + dd program.stack + dd program.params + dd 0 ; ---------------------------- ; -points equ END -POINTS_SIZE equ 108 -PARAMS_SIZE equ 256 -; ---------------------------- ; -MENUET01 db 'MENUET01' -version dd 1 -program.start dd START -program.end dd END -program.memory dd END + POINTS_SIZE + PARAMS_SIZE -program.stack dd 0 -program.params dd END + POINTS_SIZE -program.path dd 0 + +include '../../macros.inc' +include '../../KOSfuncs.inc' + ; ---------------------------- ; +POINTS_SIZE = 108 points_count dd 0 rnd dd 0 ; ---------------------------- ; -START: +align 4 +program.start: mov edi, points - mov esi, [program.params] + mov esi, program.params cmp [esi], dword "rnd" jne .not_rnd mov [points_count], dword POINTS_SIZE / 3 @@ -125,32 +126,29 @@ START: @@: add edx, 2 sub eax, edx - jnle @@ + jnle @b sbb edx, -1 shr edx, 1 ; set width, height - mov eax, 15 - mov ebx, 1 mov ecx, edx - int 64 + mcall SF_BACKGROUND_SET,SSF_SIZE_BG ; set "stretch" -; mov eax, 15 - mov ebx, 4 - mov ecx, 2 - int 64 + mcall ,SSF_MODE_BG ; put pixels -; mov eax, 15 - mov ebx, 5 - mov ecx, points ; BBGGRRBBGGRR... xor edx, edx mov esi, [points_count] ; size of data = count * 3 lea esi, [esi * 2 + esi] - int 64 + mcall ,SSF_IMAGE_BG, points ; BBGGRRBBGGRR... ; refresh screen -; mov eax, 15 - mov ebx, 3 - int 64 + mcall ,SSF_REDRAW_BG ; thread terminate - mov eax, -1 - int 64 -END: \ No newline at end of file + mcall SF_TERMINATE_PROCESS + +align 4 +program.end: + points rb POINTS_SIZE + program.params rb 256 + rb 256 +align 16 +program.stack: +program.memory: \ No newline at end of file diff --git a/programs/media/FillScr/make.bat b/programs/media/FillScr/make.bat deleted file mode 100644 index 5d06a2bd4..000000000 --- a/programs/media/FillScr/make.bat +++ /dev/null @@ -1,2 +0,0 @@ -nasm -f bin fillscr.asm -o fillscr -pause \ No newline at end of file diff --git a/programs/other/Timer/Timer.asm b/programs/other/Timer/Timer.asm index 942b478a7..595696504 100644 --- a/programs/other/Timer/Timer.asm +++ b/programs/other/Timer/Timer.asm @@ -1,11 +1,21 @@ ; Timer with three buttons ; ; %define lang "ru_RU" ; %define lang "it_IT" -ORG 0 -BITS 32 -; ---------------------------------------------------------------------------- ; -STACK_SIZE equ 256 +use32 + org 0 + db 'MENUET01' +version dd 1 + dd program.start + dd program.end + dd program.memory + dd program.stack + dd 0,0 +include '../../macros.inc' +include '../../proc32.inc' +include '../../KOSfuncs.inc' +include 'lang.inc' +; ---------------------------------------------------------------------------- ; BUTTON_START equ 2 BUTTON_PAUSE equ 3 BUTTON_RESET equ 4 @@ -19,33 +29,24 @@ CHAR_WIDTH equ 6 CHAR2_WIDTH equ 8 CHAR_HEIGHT equ 9 -BUTTON_START_WIDTH equ (BUTTON_PADDING * 2) + (sz_start.end - sz_start) * CHAR_WIDTH -BUTTON_PAUSE_WIDTH equ (BUTTON_PADDING * 2) + (sz_pause.end - sz_pause) * CHAR_WIDTH -BUTTON_RESET_WIDTH equ (BUTTON_PADDING * 2) + (sz_reset.end - sz_reset) * CHAR_WIDTH +BUTTON_START_WIDTH = (BUTTON_PADDING * 2) + (sz_start.end - sz_start) * CHAR_WIDTH +BUTTON_PAUSE_WIDTH = (BUTTON_PADDING * 2) + (sz_pause.end - sz_pause) * CHAR_WIDTH +BUTTON_RESET_WIDTH = (BUTTON_PADDING * 2) + (sz_reset.end - sz_reset) * CHAR_WIDTH -BUTTON_HEIGHT equ (BUTTON_PADDING * 2) + CHAR_HEIGHT + 1 +BUTTON_HEIGHT = (BUTTON_PADDING * 2) + CHAR_HEIGHT + 1 -WINDOW_WIDTH equ (BORDER_SIZE * 2) + (MARGIN * 2) + (BUTTON_MARGIN * 2) + (BUTTON_START_WIDTH + BUTTON_PAUSE_WIDTH + BUTTON_RESET_WIDTH) +WINDOW_WIDTH = (BORDER_SIZE * 2) + (MARGIN * 2) + (BUTTON_MARGIN * 2) + (BUTTON_START_WIDTH + BUTTON_PAUSE_WIDTH + BUTTON_RESET_WIDTH) -TIME_AREA_WIDTH equ (CHAR2_WIDTH * 8) ; HH MM SS -TIME_AREA_LEFT equ (WINDOW_WIDTH - BORDER_SIZE * 2 - TIME_AREA_WIDTH) / 2 -TIME_AREA_TOP equ MARGIN + 1 +TIME_AREA_WIDTH = (CHAR2_WIDTH * 8) ; HH MM SS +TIME_AREA_LEFT = (WINDOW_WIDTH - BORDER_SIZE * 2 - TIME_AREA_WIDTH) / 2 +TIME_AREA_TOP = MARGIN + 1 -TEXT_ON_BUTTONS_TOP equ (MARGIN + CHAR_HEIGHT + MARGIN + BUTTON_PADDING) + 1 +TEXT_ON_BUTTONS_TOP = (MARGIN + CHAR_HEIGHT + MARGIN + BUTTON_PADDING) + 1 BUTTON_START_BACK_COLOR equ 0x880000 BUTTON_PAUSE_BACK_COLOR equ 0x008800 BUTTON_RESET_BACK_COLOR equ 0x000088 ; ---------------------------------------------------------------------------- ; -MENUET01 db 'MENUET01' -version dd 1 -program.start dd START -program.end dd END -program.memory dd END + STACK_SIZE -program.stack dd END + STACK_SIZE -program.params dd 0 -program.path dd 0 -; ---------------------------------------------------------------------------- ; screen: .height dw 0 .width dw 0 @@ -56,17 +57,7 @@ window: .width dd WINDOW_WIDTH .height dd 0 ; ---------------------------------------------------------------------------- ; -sc: -.frames dd 0 -.grab dd 0 -.work_dark dd 0 -.work_light dd 0 -.grab_text dd 0 -.work dd 0 -.work_button dd 0 -.work_button_text dd 0 -.work_text dd 0 -.work_graph dd 0 +sc system_colors ; ---------------------------------------------------------------------------- ; timer_ticks dd 0 last_timer_ticks dd 0 @@ -88,16 +79,16 @@ ButtonEvents: .pause dd EmptyProc ; at start Pause must not work .reset dd On_ButtonReset ; ---------------------------------------------------------------------------- ; -%ifidn lang, "ru_RU" - sz_timer db "╥рщьхЁ",0 +if lang eq ru_RU + sz_timer db "Таймер",0 - sz_start: db "ёЄрЁЄ" + sz_start: db "старт" .end: db 0 - sz_pause: db "ярєчр" + sz_pause: db "пауза" .end: db 0 - sz_reset: db "ёсЁюё" + sz_reset: db "сброс" .end: db 0 -%elifidn lang, "it_IT" +else if lang eq it_IT sz_timer db "Timer",0 sz_start: db "lancio" @@ -106,7 +97,7 @@ ButtonEvents: .end: db 0 sz_reset: db "reset" .end: db 0 -%else +else sz_timer db "Timer",0 sz_start: db "start" @@ -115,13 +106,12 @@ ButtonEvents: .end: db 0 sz_reset: db "reset" .end: db 0 -%endif +end if ; ---------------------------------------------------------------------------- ; -START: +align 4 +program.start: ; get.screen.size - mov eax, 61 - mov ebx, 1 - int 64 + mcall SF_GET_GRAPHICAL_PARAMS,SSF_SCREEN_SIZE mov [screen], eax movzx eax, word[screen.width] @@ -130,9 +120,7 @@ START: mov [window.left], eax ; skin.height - mov eax, 48 - mov ebx, 4 - int 64 + mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT mov [window.height], eax @@ -144,33 +132,26 @@ START: call On_Redraw ; ---------------------------------------------------------------------------- ; wait.event: - mov eax, 23 - mov ebx, 50 - int 64 - call [eax * 4 + Events] + mcall SF_WAIT_EVENT_TIMEOUT, 50 + call dword[eax * 4 + Events] jmp wait.event ; ---------------------------------------------------------------------------- ; On_KeyPress: - mov eax, 2 - int 64 + mcall SF_GET_KEY ret ; ---------------------------------------------------------------------------- ; On_ButtonPress: - mov eax, 17 - int 64 + mcall SF_GET_BUTTON movzx eax, ah - call [eax * 4 + ButtonEvents] + call dword[eax * 4 + ButtonEvents] ret ; ---------------------------------------------------------------------------- ; On_ButtonClose: - or eax, -1 - int 64 + mcall SF_TERMINATE_PROCESS ; ---------------------------------------------------------------------------- ; On_ButtonStart: ; get system counter - mov eax, 26 - mov ebx, 9 - int 64 + mcall SF_SYSTEM_GET,SSF_TIME_COUNT sub eax, [last_timer_ticks] and [last_timer_ticks], dword 0 mov [timer_ticks], eax @@ -181,9 +162,7 @@ On_ButtonStart: ; ---------------------------------------------------------------------------- ; On_ButtonPause: ; get system counter - mov eax, 26 - mov ebx, 9 - int 64 + mcall SF_SYSTEM_GET,SSF_TIME_COUNT sub eax, [timer_ticks] mov [last_timer_ticks], eax mov [timer_proc], dword EmptyProc @@ -204,23 +183,14 @@ On_ButtonReset: ; ---------------------------------------------------------------------------- ; On_Redraw: ; redraw.start - mov eax, 12 - mov ebx, 1 - int 64 + mcall SF_REDRAW,SSF_BEGIN_DRAW ; get.standart.colors - mov eax, 48 - mov ebx, 3 - mov ecx, sc - mov edx, 40 - int 64 + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors ; skin.height - mov eax, 48 - mov ebx, 4 - int 64 + mcall ,SSF_GET_SKIN_HEIGHT add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT mov [window.height], eax ; draw.window - xor eax, eax mov ebx, [window.left] shl ebx, 16 add ebx, [window.width] @@ -230,51 +200,28 @@ On_Redraw: mov edx, [sc.work] or edx, 0x34000000 mov edi, sz_timer - int 64 + mcall SF_CREATE_WINDOW ; draw.buttons: - mov eax, 8 - mov ecx, ((MARGIN + CHAR_HEIGHT + MARGIN) << 16) | BUTTON_HEIGHT + mcall SF_DEFINE_BUTTON, (MARGIN shl 16) or BUTTON_START_WIDTH, ((MARGIN + CHAR_HEIGHT + MARGIN) shl 16) or BUTTON_HEIGHT, BUTTON_START, BUTTON_START_BACK_COLOR - mov ebx, (MARGIN << 16) | BUTTON_START_WIDTH - mov edx, BUTTON_START - mov esi, BUTTON_START_BACK_COLOR - int 64 + mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN) shl 16) or BUTTON_PAUSE_WIDTH,, BUTTON_PAUSE, BUTTON_PAUSE_BACK_COLOR - mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN) << 16) | BUTTON_PAUSE_WIDTH - mov edx, BUTTON_PAUSE - mov esi, BUTTON_PAUSE_BACK_COLOR - int 64 - - mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN) << 16) | BUTTON_RESET_WIDTH - mov edx, BUTTON_RESET - mov esi, BUTTON_RESET_BACK_COLOR - int 64 + mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN) shl 16) or BUTTON_RESET_WIDTH,, BUTTON_RESET, BUTTON_RESET_BACK_COLOR ;---------------------- ; draw.texts: - mov eax, 4 - mov ecx, 0x80FFFFFF + mcall SF_DRAW_TEXT, ((MARGIN + BUTTON_PADDING + 1) shl 16) or TEXT_ON_BUTTONS_TOP, 0x80FFFFFF, sz_start - mov ebx, ((MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP - mov edx, sz_start - int 64 + mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) shl 16) or TEXT_ON_BUTTONS_TOP,, sz_pause - mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP - mov edx, sz_pause - int 64 - - mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP - mov edx, sz_reset - int 64 + mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) shl 16) or TEXT_ON_BUTTONS_TOP,, sz_reset ;---------------------- call On_Idle ; redraw.finish - mov eax, 12 - mov ebx, 2 - int 64 + mcall SF_REDRAW,SSF_END_DRAW ret ; ---------------------------------------------------------------------------- ; DrawTime: - mov ebx, (1 << 16) + mov ebx, (1 shl 16) mov esi, [sc.work_text] mov edi, [sc.work] ; HH @@ -287,24 +234,16 @@ DrawTime: mov ecx, eax ; [hours] first digit or esi, 0x70000000 - mov eax, 47 - mov edx, (TIME_AREA_LEFT << 16) | TIME_AREA_TOP - int 64 + mcall SF_DRAW_NUMBER,,, (TIME_AREA_LEFT shl 16) or TIME_AREA_TOP and esi, 0x30FFFFFF - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + 1) << 16) | TIME_AREA_TOP - int 64 + mcall ,,, ((TIME_AREA_LEFT + 1) shl 16) or TIME_AREA_TOP mov ecx, ebp ; [hours] second digit or esi, 0x70000000 - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP - int 64 + mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH) shl 16) or TIME_AREA_TOP and esi, 0x30FFFFFF - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP - int 64 + mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH + 1) shl 16) or TIME_AREA_TOP ; MM mov eax, [minutes] xor edx, edx @@ -315,24 +254,16 @@ DrawTime: mov ecx, eax ; [minutes] first digit or esi, 0x70000000 - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3) << 16) | TIME_AREA_TOP - int 64 + mcall SF_DRAW_NUMBER,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3) shl 16) or TIME_AREA_TOP and esi, 0x30FFFFFF - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3 + 1) << 16) | TIME_AREA_TOP - int 64 + mcall ,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3 + 1) shl 16) or TIME_AREA_TOP mov ecx, ebp ; [minutes] second digit or esi, 0x70000000 - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP - int 64 + mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH) shl 16) or TIME_AREA_TOP and esi, 0x30FFFFFF - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP - int 64 + mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH + 1) shl 16) or TIME_AREA_TOP ; SS mov eax, [seconds] xor edx, edx @@ -343,24 +274,16 @@ DrawTime: mov ecx, eax ; [seconds] first digit or esi, 0x70000000 - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6) << 16) | TIME_AREA_TOP - int 64 + mcall SF_DRAW_NUMBER,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6) shl 16) or TIME_AREA_TOP and esi, 0x30FFFFFF - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6 + 1) << 16) | TIME_AREA_TOP - int 64 + mcall ,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6 + 1) shl 16) or TIME_AREA_TOP mov ecx, ebp ; [seconds] second digit or esi, 0x70000000 - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP - int 64 + mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH) shl 16) or TIME_AREA_TOP and esi, 0x30FFFFFF - mov eax, 47 - mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP - int 64 + mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH + 1) shl 16) or TIME_AREA_TOP ret ; ---------------------------------------------------------------------------- ; On_Idle: @@ -370,9 +293,7 @@ On_Idle: ; ---------------------------------------------------------------------------- ; TimerStarted: ; get system counter - mov eax, 26 - mov ebx, 9 - int 64 + mcall SF_SYSTEM_GET,SSF_TIME_COUNT sub eax, [timer_ticks] xor edx, edx mov ecx, 100 @@ -390,4 +311,9 @@ TimerStarted: EmptyProc: ret ; ---------------------------------------------------------------------------- ; -END: +align 4 +program.end: + rb 512 +align 16 +program.stack: +program.memory: diff --git a/programs/other/Timer/Tupfile.lua b/programs/other/Timer/Tupfile.lua index b83b07ba2..630699d36 100644 --- a/programs/other/Timer/Tupfile.lua +++ b/programs/other/Timer/Tupfile.lua @@ -1,2 +1,7 @@ -if tup.getconfig("NO_NASM") ~= "" then return end -tup.rule("Timer.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "timer") +if tup.getconfig("NO_FASM") ~= "" then return end +HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") +tup.include(HELPERDIR .. "/use_fasm.lua") +add_include(tup.getvariantdir()) + +tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"}) +tup.rule({"Timer.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "Timer") diff --git a/programs/other/Timer/build_en.bat b/programs/other/Timer/build_en.bat new file mode 100644 index 000000000..0b16adb34 --- /dev/null +++ b/programs/other/Timer/build_en.bat @@ -0,0 +1,4 @@ +@echo lang fix en_EN >lang.inc +@fasm.exe -m 16384 timer.asm timer.kex +@kpack timer.kex +pause diff --git a/programs/other/Timer/build_ru.bat b/programs/other/Timer/build_ru.bat new file mode 100644 index 000000000..26e5c9a39 --- /dev/null +++ b/programs/other/Timer/build_ru.bat @@ -0,0 +1,4 @@ +@echo lang fix ru_RU >lang.inc +@fasm.exe -m 16384 timer.asm timer.kex +@kpack timer.kex +pause diff --git a/programs/other/Timer/make.bat b/programs/other/Timer/make.bat deleted file mode 100644 index 99437d661..000000000 --- a/programs/other/Timer/make.bat +++ /dev/null @@ -1 +0,0 @@ -nasm -f bin Timer.asm -o Timer diff --git a/programs/system/tinfo/Tupfile.lua b/programs/system/tinfo/Tupfile.lua index d582246bc..45c75e8c7 100644 --- a/programs/system/tinfo/Tupfile.lua +++ b/programs/system/tinfo/Tupfile.lua @@ -1,2 +1,7 @@ -if tup.getconfig("NO_NASM") ~= "" then return end -tup.rule("tinfo.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "tinfo") +if tup.getconfig("NO_FASM") ~= "" then return end +HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") +tup.include(HELPERDIR .. "/use_fasm.lua") +add_include(tup.getvariantdir()) + +tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"}) +tup.rule({"tinfo.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "tinfo") diff --git a/programs/system/tinfo/build_en.bat b/programs/system/tinfo/build_en.bat new file mode 100644 index 000000000..9593fe1f3 --- /dev/null +++ b/programs/system/tinfo/build_en.bat @@ -0,0 +1,4 @@ +@echo lang fix en_EN >lang.inc +@fasm.exe -m 16384 tinfo.asm tinfo.kex +@kpack tinfo.kex +pause diff --git a/programs/system/tinfo/build_ru.bat b/programs/system/tinfo/build_ru.bat new file mode 100644 index 000000000..9094662e3 --- /dev/null +++ b/programs/system/tinfo/build_ru.bat @@ -0,0 +1,4 @@ +@echo lang fix ru_RU >lang.inc +@fasm.exe -m 16384 tinfo.asm tinfo.kex +@kpack tinfo.kex +pause diff --git a/programs/system/tinfo/make.bat b/programs/system/tinfo/make.bat deleted file mode 100644 index 62295c0e0..000000000 --- a/programs/system/tinfo/make.bat +++ /dev/null @@ -1 +0,0 @@ -nasm -f bin tinfo.asm -o tinfo \ No newline at end of file diff --git a/programs/system/tinfo/tinfo.asm b/programs/system/tinfo/tinfo.asm index c7fb4fff9..3ea77204c 100644 --- a/programs/system/tinfo/tinfo.asm +++ b/programs/system/tinfo/tinfo.asm @@ -2,140 +2,109 @@ ; usage: tinfo [slot of the thread] ; ; if slot number is omitted then assume slot = -1 ; ; to compile: nasm -f bin tinfo.asm -o tinfo ; -ORG 0 -BITS 32 + +use32 + org 0 + db 'MENUET01' +version dd 1 + dd program.start + dd program.end + dd program.memory + dd program.stack + dd program.params + dd program.path + +include '../../macros.inc' +include '../../proc32.inc' +include '../../KOSfuncs.inc' +include 'lang.inc' + ; ---------------------------------------------------------------------------- ; -PATH_SIZE equ 1024 -PARAMS_SIZE equ 256 -STACK_SIZE equ 256 -PROC_INFO_SIZE equ 1024 -TMP_BUFFER_SIZE equ 64 +TEXT_WIDTH = 8 +BOLD_TEXT_WIDTH = TEXT_WIDTH + 1 ; ---------------------------------------------------------------------------- ; -TEXT_WIDTH equ 8 -BOLD_TEXT_WIDTH equ TEXT_WIDTH + 1 +if lang eq ru_RU +COLUMN1_MAX_COUNT = 19 +COLUMN2_MAX_COUNT = 12 +COLUMN3_MAX_COUNT = 26 +else +COLUMN1_MAX_COUNT = 13 +COLUMN2_MAX_COUNT = 12 +COLUMN3_MAX_COUNT = 26 +end if ; ---------------------------------------------------------------------------- ; -COLUMN1_MAX_COUNT equ 13 -COLUMN2_MAX_COUNT equ 12 -COLUMN3_MAX_COUNT equ 26 +COLUMN_PADDING = 3 +COLUMN1_PADDING = COLUMN_PADDING +COLUMN2_PADDING = COLUMN_PADDING +COLUMN3_PADDING = COLUMN_PADDING ; ---------------------------------------------------------------------------- ; -COLUMN_PADDING equ 3 -COLUMN1_PADDING equ COLUMN_PADDING -COLUMN2_PADDING equ COLUMN_PADDING -COLUMN3_PADDING equ COLUMN_PADDING +ITEM_HEIGHT = 22 +TEXT_HEIGHT = 16 +;COLUMN1_ITEM_WIDTH = COLUMN1_MAX_COUNT * BOLD_TEXT_WIDTH + COLUMN1_PADDING * 2 +;COLUMN2_ITEM_WIDTH = COLUMN2_MAX_COUNT * BOLD_TEXT_WIDTH + COLUMN2_PADDING * 2 +;COLUMN3_ITEM_WIDTH = COLUMN3_MAX_COUNT * BOLD_TEXT_WIDTH + COLUMN3_PADDING * 2 +COLUMN1_ITEM_WIDTH = COLUMN1_MAX_COUNT * TEXT_WIDTH + COLUMN1_PADDING * 2 +COLUMN2_ITEM_WIDTH = COLUMN2_MAX_COUNT * TEXT_WIDTH + COLUMN2_PADDING * 2 +COLUMN3_ITEM_WIDTH = COLUMN3_MAX_COUNT * TEXT_WIDTH + COLUMN3_PADDING * 2 +ITEM_MARGIN = 6 +ITEM_BACK_COLOR_1 = 0x00EAEAEA +ITEM_BACK_COLOR_2 = 0x00F4F4F4 +ITEM_COUNT = 18 ; at current time we have 18 items ; ---------------------------------------------------------------------------- ; -ITEM_HEIGHT equ 22 -TEXT_HEIGHT equ 16 -%IF 0 -COLUMN1_ITEM_WIDTH equ COLUMN1_MAX_COUNT * BOLD_TEXT_WIDTH + COLUMN1_PADDING * 2 -COLUMN2_ITEM_WIDTH equ COLUMN2_MAX_COUNT * BOLD_TEXT_WIDTH + COLUMN2_PADDING * 2 -COLUMN3_ITEM_WIDTH equ COLUMN3_MAX_COUNT * BOLD_TEXT_WIDTH + COLUMN3_PADDING * 2 -%ENDIF -COLUMN1_ITEM_WIDTH equ COLUMN1_MAX_COUNT * TEXT_WIDTH + COLUMN1_PADDING * 2 -COLUMN2_ITEM_WIDTH equ COLUMN2_MAX_COUNT * TEXT_WIDTH + COLUMN2_PADDING * 2 -COLUMN3_ITEM_WIDTH equ COLUMN3_MAX_COUNT * TEXT_WIDTH + COLUMN3_PADDING * 2 -ITEM_MARGIN equ 6 -ITEM_BACK_COLOR_1 equ 0x00EAEAEA -ITEM_BACK_COLOR_2 equ 0x00F4F4F4 -ITEM_COUNT equ 18 ; at current time we have 18 items +COLUMN_Y = 10 +COLUMN1_X = 10 +COLUMN2_X = COLUMN1_X + COLUMN1_ITEM_WIDTH + ITEM_MARGIN +COLUMN3_X = COLUMN2_X + COLUMN2_ITEM_WIDTH + ITEM_MARGIN ; ---------------------------------------------------------------------------- ; -COLUMN_Y equ 10 -COLUMN1_X equ 10 -COLUMN2_X equ COLUMN1_X + COLUMN1_ITEM_WIDTH + ITEM_MARGIN -COLUMN3_X equ COLUMN2_X + COLUMN2_ITEM_WIDTH + ITEM_MARGIN +COLUMN1_TEXT_X = COLUMN1_X + COLUMN1_PADDING +COLUMN2_TEXT_X = COLUMN2_X + COLUMN2_PADDING +COLUMN3_TEXT_X = COLUMN3_X + COLUMN3_PADDING ; ---------------------------------------------------------------------------- ; -COLUMN1_TEXT_X equ COLUMN1_X + COLUMN1_PADDING -COLUMN2_TEXT_X equ COLUMN2_X + COLUMN2_PADDING -COLUMN3_TEXT_X equ COLUMN3_X + COLUMN3_PADDING +FRAME_TOP = COLUMN_Y - ITEM_MARGIN / 2 +FRAME_BOTTOM = COLUMN_Y + ITEM_HEIGHT * ITEM_COUNT + ITEM_MARGIN / 2 - 1 ; ---------------------------------------------------------------------------- ; -FRAME_TOP equ COLUMN_Y - ITEM_MARGIN / 2 -FRAME_BOTTOM equ COLUMN_Y + ITEM_HEIGHT * ITEM_COUNT + ITEM_MARGIN / 2 - 1 - ; ---------------------------------------------------------------------------- ; -FRAME1_LEFT equ COLUMN1_X - ITEM_MARGIN / 2 -FRAME1_RIGHT equ COLUMN1_X + COLUMN1_ITEM_WIDTH + ITEM_MARGIN / 2 - 1 +FRAME1_LEFT = COLUMN1_X - ITEM_MARGIN / 2 +FRAME1_RIGHT = COLUMN1_X + COLUMN1_ITEM_WIDTH + ITEM_MARGIN / 2 - 1 ; ---------------------------------------------------------------------------- ; -FRAME2_LEFT equ COLUMN2_X - ITEM_MARGIN / 2 -FRAME2_RIGHT equ COLUMN2_X + COLUMN2_ITEM_WIDTH + ITEM_MARGIN / 2 - 1 +FRAME2_LEFT = COLUMN2_X - ITEM_MARGIN / 2 +FRAME2_RIGHT = COLUMN2_X + COLUMN2_ITEM_WIDTH + ITEM_MARGIN / 2 - 1 ; ---------------------------------------------------------------------------- ; -FRAME3_LEFT equ COLUMN3_X - ITEM_MARGIN / 2 -FRAME3_RIGHT equ COLUMN3_X + COLUMN3_ITEM_WIDTH + ITEM_MARGIN / 2 - 1 +FRAME3_LEFT = COLUMN3_X - ITEM_MARGIN / 2 +FRAME3_RIGHT = COLUMN3_X + COLUMN3_ITEM_WIDTH + ITEM_MARGIN / 2 - 1 ; ---------------------------------------------------------------------------- ; -WINDOW_STYLE_SKINNED_FIXED equ 0x4000000 -WINDOW_STYLE_COORD_CLIENT equ 0x20000000 -WINDOW_STYLE_CAPTION equ 0x10000000 +WINDOW_STYLE_SKINNED_FIXED = 0x4000000 +WINDOW_STYLE_COORD_CLIENT = 0x20000000 +WINDOW_STYLE_CAPTION = 0x10000000 ; ---------------------------------------------------------------------------- ; -WINDOW_BORDER_SIZE equ 5 -WINDOW_WIDTH equ FRAME3_RIGHT + FRAME1_LEFT + WINDOW_BORDER_SIZE * 2 -WINDOW_STYLE equ WINDOW_STYLE_SKINNED_FIXED | WINDOW_STYLE_COORD_CLIENT | WINDOW_STYLE_CAPTION -WINDOW_BACK_COLOR equ 0x00FFFFFF +WINDOW_BORDER_SIZE = 5 +WINDOW_WIDTH = FRAME3_RIGHT + FRAME1_LEFT + WINDOW_BORDER_SIZE * 2 +WINDOW_STYLE = WINDOW_STYLE_SKINNED_FIXED or WINDOW_STYLE_COORD_CLIENT or WINDOW_STYLE_CAPTION +WINDOW_BACK_COLOR = 0x00FFFFFF ; ---------------------------------------------------------------------------- ; -INDICATOR_WIDTH equ 3 -INDICATOR_HEIGHT equ 3 -INDICATOR_LEFT equ COLUMN3_X + COLUMN3_ITEM_WIDTH + ITEM_MARGIN / 2 -INDICATOR_TOP equ COLUMN_Y - ITEM_MARGIN / 2 - INDICATOR_HEIGHT +INDICATOR_WIDTH = 3 +INDICATOR_HEIGHT = 3 +INDICATOR_LEFT = COLUMN3_X + COLUMN3_ITEM_WIDTH + ITEM_MARGIN / 2 +INDICATOR_TOP = COLUMN_Y - ITEM_MARGIN / 2 - INDICATOR_HEIGHT ; ---------------------------------------------------------------------------- ; -UPDATE_TIME equ 28 +UPDATE_TIME = 28 ; ---------------------------------------------------------------------------- ; -thread_info equ END + PATH_SIZE + PARAMS_SIZE -tmpbuffer equ END + PATH_SIZE + PARAMS_SIZE + PROC_INFO_SIZE +KEYBOARD_MODE_ASCII = 0 +KEYBOARD_MODE_SCAN = 1 ; ---------------------------------------------------------------------------- ; -KEYBOARD_MODE_ASCII equ 0 -KEYBOARD_MODE_SCAN equ 1 +WINDOW_STATE_MAXIMIZED = 1 +WINDOW_STATE_MINIMIZED = 2 +WINDOW_STATE_ROLLED_UP = 4 ; ---------------------------------------------------------------------------- ; -WINDOW_STATE_MAXIMIZED equ 1 -WINDOW_STATE_MINIMIZED equ 2 -WINDOW_STATE_ROLLED_UP equ 4 +THREAD_STATE_RUNNING = 0 +THREAD_STATE_SUSPENDED = 1 +THREAD_STATE_SUSPENDED_WAIT_EVENT = 2 +THREAD_STATE_NORMAL_TERMINATING = 3 +THREAD_STATE_EXCEPT_TERMINATING = 4 +THREAD_STATE_WAIT_EVENT = 5 +THREAD_STATE_SLOT_IS_FREE = 9 ; ---------------------------------------------------------------------------- ; -THREAD_STATE_RUNNING equ 0 -THREAD_STATE_SUSPENDED equ 1 -THREAD_STATE_SUSPENDED_WAIT_EVENT equ 2 -THREAD_STATE_NORMAL_TERMINATING equ 3 -THREAD_STATE_EXCEPT_TERMINATING equ 4 -THREAD_STATE_WAIT_EVENT equ 5 -THREAD_STATE_SLOT_IS_FREE equ 9 -; ---------------------------------------------------------------------------- ; -EM_REDRAW equ 1b -EM_KEY equ 10b -EM_BUTTON equ 100b -EM_RESERVED0 equ 1000b -EM_REDRAW_BACKGROUND equ 10000b -EM_MOUSE equ 100000b -EM_IPC equ 1000000b -EM_NETWORK equ 10000000b -EM_DEBUG equ 100000000b -; ---------------------------------------------------------------------------- ; -struc THREAD_INFO - .cpu_usage resd 1 ; usage of the processor - .win_stack_pos resw 1 ; position of the window of thread in the window stack - .reserved0 resw 1 ; has no relation to the specified thread - .reserved1 resw 1 ; reserved - .name resb 11 ; name of the started file - executable file without extension - .reserved2 resb 1 ; reserved, this byte is not changed - .mem_address resd 1 ; address of the process in memory - .mem_usage resd 1 ; size of used memory - 1 - .identifier resd 1 ; identifier (PID/TID) - .x resd 1 ; coordinate of the thread window on axis x - .y resd 1 ; coordinate of the thread window on axis y - .size_x resd 1 ; size of the thread window on axis x - .size_y resd 1 ; size of the thread window on axis y - .thread_state resw 1 ; status of the thread slot - .reserved3 resw 1 ; reserved, this word is not changed - .client_x resd 1 ; coordinate of the client area on axis x - .client_y resd 1 ; coordinate of the client area on axis y - .client_size_x resd 1 ; width of the client area - .client_size_y resd 1 ; height of the client area - .window_state resb 1 ; state of the window - bitfield - .event_mask resd 1 ; event mask - .keyboard_mode resb 1 ; keyboard mode -endstruc -; ---------------------------------------------------------------------------- ; -MENUET01 db 'MENUET01' -version dd 1 -program.start dd START -program.end dd END -program.memory dd END + PATH_SIZE + PARAMS_SIZE + PROC_INFO_SIZE + TMP_BUFFER_SIZE + STACK_SIZE -program.stack dd END + PATH_SIZE + PARAMS_SIZE + PROC_INFO_SIZE + TMP_BUFFER_SIZE + STACK_SIZE -program.params dd END + PATH_SIZE -program.path dd END + + ; ---------------------------------------------------------------------------- ; slot dd -1 ; for default if no params ; ---------------------------------------------------------------------------- ; @@ -163,14 +132,33 @@ IndicatorColors: dd 0x000AF000 dd 0x00000FA0 ; ---------------------------------------------------------------------------- ; -%define x [Pos.x] -%define y [Pos.y] +align 4 Pos: .x dd COLUMN1_X .y dd COLUMN_Y ; ---------------------------------------------------------------------------- ; sz_caption db "ThreadInfo",0 ; ---------------------------------------------------------------------------- ; +if lang eq ru_RU +sz_cpu_usage db "Использ. процессора",0 +sz_win_stack_pos db "Win stack pos",0 +sz_name db "Имя",0 +sz_mem_address db "Адрес в памяти",0 +sz_mem_usage db "Использовано памяти",0 +sz_identifier db "Идентификатор",0 +sz_x db "X",0 +sz_y db "Y",0 +sz_size_x db "Размер X",0 +sz_size_y db "Размер Y",0 +sz_thread_state db "Состояние процесса",0 +sz_client_x db "Client X",0 +sz_client_y db "Client Y",0 +sz_client_size_x db "Client Size X",0 +sz_client_size_y db "Client Size Y",0 +sz_window_state db "Состояние окна",0 +sz_event_mask db "Маска событий",0 +sz_keyboard_mode db "Режим клавиатуры",0 +else sz_cpu_usage db "CPU usage",0 sz_win_stack_pos db "Win stack pos",0 sz_name db "Name",0 @@ -189,6 +177,7 @@ sz_client_size_y db "Client Size Y",0 sz_window_state db "Window state",0 sz_event_mask db "Event mask",0 sz_keyboard_mode db "Keyboard mode",0 +end if ; ---------------------------------------------------------------------------- ; ; state of the window sz_maximized db "Max ",0 @@ -221,645 +210,359 @@ sz_debug db "dbg ",0 ; ---------------------------------------------------------------------------- ; sz_undefined db "UnDef ",0 ; **************************************************************************** ; -%macro DrawCpuUsage 0 +macro DrawCpuUsage { ; sz_cpu_usage - push dword COLUMN1_TEXT_X - push dword y - push dword sz_cpu_usage - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_cpu_usage,[Pos.y],COLUMN1_TEXT_X ; [cpu_usage] - push dword [thread_info + THREAD_INFO.cpu_usage] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.cpu_usage] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawWinStackPos 0 +macro DrawWinStackPos { ; sz_win_stack_pos - push dword COLUMN1_TEXT_X - push dword y - push dword sz_win_stack_pos - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_win_stack_pos,[Pos.y],COLUMN1_TEXT_X ; [win_stack_pos] - movzx eax, word [thread_info + THREAD_INFO.win_stack_pos] - push eax - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + movzx eax, word [thread_info.window_stack_position] + stdcall uint2str, eax + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawName 0 +macro DrawName { ; sz_name - push dword COLUMN1_TEXT_X - push dword y - push dword sz_name - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_name,[Pos.y],COLUMN1_TEXT_X ; name - push dword COLUMN2_TEXT_X - push dword y - push dword (thread_info + THREAD_INFO.name) - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],(thread_info.process_name),[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawMemAddress 0 +macro DrawMemAddress { ; sz_mem_address - push dword COLUMN1_TEXT_X - push dword y - push dword sz_mem_address - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_mem_address,[Pos.y],COLUMN1_TEXT_X ; [mem_address] - push dword [thread_info + THREAD_INFO.mem_address] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.memory_start] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawMemUsage 0 +macro DrawMemUsage { ; sz_mem_usage - push dword COLUMN1_TEXT_X - push dword y - push dword sz_mem_usage - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_mem_usage,[Pos.y],COLUMN1_TEXT_X ; [mem_usage] - push dword [thread_info + THREAD_INFO.mem_usage] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.used_memory] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawIdentifier 0 +macro DrawIdentifier { ; sz_identifier - push dword COLUMN1_TEXT_X - push dword y - push dword sz_identifier - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_identifier,[Pos.y],COLUMN1_TEXT_X ; [identifier] - push dword [thread_info + THREAD_INFO.identifier] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.PID] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawWindowX 0 +macro DrawWindowX { ; sz_x - push dword COLUMN1_TEXT_X - push dword y - push dword sz_x - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_x,[Pos.y],COLUMN1_TEXT_X ; [x] - push dword [thread_info + THREAD_INFO.x] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.box.left] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawWindowY 0 +macro DrawWindowY { ; sz_y - push dword COLUMN1_TEXT_X - push dword y - push dword sz_y - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_y,[Pos.y],COLUMN1_TEXT_X ; [y] - push dword [thread_info + THREAD_INFO.y] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.box.top] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawWindowSizeX 0 +macro DrawWindowSizeX { ; sz_size_x - push dword COLUMN1_TEXT_X - push dword y - push dword sz_size_x - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_size_x,[Pos.y],COLUMN1_TEXT_X ; [size_x] - push dword [thread_info + THREAD_INFO.size_x] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.box.width] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawWindowSizeY 0 +macro DrawWindowSizeY { ; sz_size_y - push dword COLUMN1_TEXT_X - push dword y - push dword sz_size_y - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_size_y,[Pos.y],COLUMN1_TEXT_X ; [size_y] - push dword [thread_info + THREAD_INFO.size_y] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.box.height] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawThreadState 0 +macro DrawThreadState { ; sz_thread_state - push dword COLUMN1_TEXT_X - push dword y - push dword sz_thread_state - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_thread_state,[Pos.y],COLUMN1_TEXT_X ; decoded_thread_state & [thread_state] - movzx eax, word [thread_info + THREAD_INFO.thread_state] + movzx eax, word [thread_info.slot_state] push eax ; for "call uint2str" below -%%running: + cmp eax, THREAD_STATE_RUNNING - jne %%suspended + jne @f mov eax, sz_running jmp %%draw_decoded_thread_state -%%suspended: +@@: cmp eax, THREAD_STATE_SUSPENDED - jne %%suspended_w + jne @f mov eax, sz_suspended jmp %%draw_decoded_thread_state -%%suspended_w: +@@: cmp eax, THREAD_STATE_SUSPENDED_WAIT_EVENT - jne %%normal_term + jne @f mov eax, sz_suspended_wait_event jmp %%draw_decoded_thread_state -%%normal_term: +@@: cmp eax, THREAD_STATE_NORMAL_TERMINATING - jne %%except_term + jne @f mov eax, sz_normal_terminating jmp %%draw_decoded_thread_state -%%except_term: +@@: cmp eax, THREAD_STATE_EXCEPT_TERMINATING - jne %%wait_event + jne @f mov eax, sz_except_terminating jmp %%draw_decoded_thread_state -%%wait_event: +@@: cmp eax, THREAD_STATE_WAIT_EVENT - jne %%slot_free + jne @f mov eax, sz_wait_event jmp %%draw_decoded_thread_state -%%slot_free: +@@: cmp eax, THREAD_STATE_SLOT_IS_FREE - jne %%undefined + jne @f mov eax, sz_slot_is_free jmp %%draw_decoded_thread_state -%%undefined: +@@: mov eax, sz_undefined %%draw_decoded_thread_state: - push dword COLUMN3_TEXT_X - push dword y - push eax - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],eax,[Pos.y],COLUMN3_TEXT_X call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawClientX 0 +macro DrawClientX { ; sz_client_x - push dword COLUMN1_TEXT_X - push dword y - push dword sz_client_x - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_client_x,[Pos.y],COLUMN1_TEXT_X ; [client_x] - push dword [thread_info + THREAD_INFO.client_x] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.client_box.left] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawClientY 0 +macro DrawClientY { ; sz_client_y - push dword COLUMN1_TEXT_X - push dword y - push dword sz_client_y - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_client_y,[Pos.y],COLUMN1_TEXT_X ; [client_y] - push dword [thread_info + THREAD_INFO.client_y] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.client_box.top] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawClientSizeX 0 +macro DrawClientSizeX { ; sz_client_size_x - push dword COLUMN1_TEXT_X - push dword y - push dword sz_client_size_x - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_client_size_x,[Pos.y],COLUMN1_TEXT_X ; [client_size_x] - push dword [thread_info + THREAD_INFO.client_size_x] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.client_box.width] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawClientSizeY 0 +macro DrawClientSizeY { ; sz_client_size_y - push dword COLUMN1_TEXT_X - push dword y - push dword sz_client_size_y - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_client_size_y,[Pos.y],COLUMN1_TEXT_X ; [client_size_y] - push dword [thread_info + THREAD_INFO.client_size_y] - call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall uint2str, [thread_info.client_box.height] + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawWindowState 0 +macro DrawWindowState { ; sz_window_state - push dword COLUMN1_TEXT_X - push dword y - push dword sz_window_state - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_window_state,[Pos.y],COLUMN1_TEXT_X ; decoded_window_state & [window_state] - movzx eax, byte [thread_info + THREAD_INFO.window_state] + movzx eax, byte [thread_info.wnd_state] push eax ; for "call uint2str" below mov ebx, eax mov [tmpbuffer], byte 0 -%%maximized: + test ebx, WINDOW_STATE_MAXIMIZED - jz %%minimized - push tmpbuffer - push sz_maximized - call StringConcatenate -%%minimized: + jz @f + stdcall StringConcatenate, sz_maximized,tmpbuffer +@@: test ebx, WINDOW_STATE_MINIMIZED - jz %%rolled_up - push tmpbuffer - push sz_minimized - call StringConcatenate -%%rolled_up: + jz @f + stdcall StringConcatenate, sz_minimized,tmpbuffer +@@: test ebx, WINDOW_STATE_ROLLED_UP - jz %%draw_decoded_window_state - push tmpbuffer - push sz_rolled_up - call StringConcatenate -%%draw_decoded_window_state: - push dword COLUMN3_MAX_COUNT - call PadBuffSpaces - push dword COLUMN3_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + jz @f + stdcall StringConcatenate, sz_rolled_up,tmpbuffer +@@: + stdcall PadBuffSpaces, COLUMN3_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN3_TEXT_X call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawEventMask 0 +macro DrawEventMask { ; sz_event_mask - push dword COLUMN1_TEXT_X - push dword y - push dword sz_event_mask - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_event_mask,[Pos.y],COLUMN1_TEXT_X ; decoded_event_mask & [event_mask] - mov eax, [thread_info + THREAD_INFO.event_mask] + mov eax, [thread_info.event_mask] push eax ; for "call uint2str" below mov ebx, eax mov [tmpbuffer], byte 0 -%%redraw: - test ebx, EM_REDRAW - jz %%key - push tmpbuffer - push sz_redraw - call StringConcatenate -%%key: - test ebx, EM_KEY - jz %%button - push tmpbuffer - push sz_key - call StringConcatenate -%%button: - test ebx, EM_BUTTON - jz %%reserved0 - push tmpbuffer - push sz_button - call StringConcatenate -%%reserved0: - test ebx, EM_RESERVED0 - jz %%redraw_background - push tmpbuffer - push sz_reserved0 - call StringConcatenate -%%redraw_background: - test ebx, EM_REDRAW_BACKGROUND - jz %%mouse - push tmpbuffer - push sz_redraw_background - call StringConcatenate -%%mouse: - test ebx, EM_MOUSE - jz %%ipc - push tmpbuffer - push sz_mouse - call StringConcatenate -%%ipc: - test ebx, EM_IPC - jz %%network - push tmpbuffer - push sz_ipc - call StringConcatenate -%%network: - test ebx, EM_NETWORK - jz %%debug - push tmpbuffer - push sz_network - call StringConcatenate -%%debug: - test ebx, EM_DEBUG - jz %%draw_decoded_event_mask - push tmpbuffer - push sz_debug - call StringConcatenate -%%draw_decoded_event_mask: - push dword COLUMN3_MAX_COUNT - call PadBuffSpaces - push dword COLUMN3_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + test ebx, EVM_REDRAW + jz @f + stdcall StringConcatenate, sz_redraw,tmpbuffer +@@: + test ebx, EVM_KEY + jz @f + stdcall StringConcatenate, sz_key,tmpbuffer +@@: + test ebx, EVM_BUTTON + jz @f + stdcall StringConcatenate, sz_button,tmpbuffer +@@: + test ebx, EVM_EXIT + jz @f + stdcall StringConcatenate, sz_reserved0,tmpbuffer +@@: + test ebx, EVM_BACKGROUND + jz @f + stdcall StringConcatenate, sz_redraw_background,tmpbuffer +@@: + test ebx, EVM_MOUSE + jz @f + stdcall StringConcatenate, sz_mouse,tmpbuffer +@@: + test ebx, EVM_IPC + jz @f + stdcall StringConcatenate, sz_ipc,tmpbuffer +@@: + test ebx, EVM_STACK + jz @f + stdcall StringConcatenate, sz_network,tmpbuffer +@@: + test ebx, EVM_DEBUG + jz @f + stdcall StringConcatenate, sz_debug,tmpbuffer +@@: + stdcall PadBuffSpaces, COLUMN3_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN3_TEXT_X call uint2str - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawKeyboardMode 0 - push dword COLUMN2_MAX_COUNT - call PadBuffSpaces +macro DrawKeyboardMode { + stdcall PadBuffSpaces, COLUMN2_MAX_COUNT ; sz_keyboard_mode - push dword COLUMN1_TEXT_X - push dword y - push dword sz_keyboard_mode - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],sz_keyboard_mode,[Pos.y],COLUMN1_TEXT_X ; decoded_keyboard_mode & [keyboard_mode] - movzx eax, byte [thread_info + THREAD_INFO.keyboard_mode] + movzx eax, byte [thread_info.keyboard_mode] push eax ; for "call uint2str" below -%%ascii: + cmp eax, KEYBOARD_MODE_ASCII - jne %%scan + jne @f mov eax, sz_ascii jmp %%draw_decoded_keyboard_mode -%%scan: +@@: cmp eax, KEYBOARD_MODE_SCAN - jne %%undefined + jne @f mov eax, sz_scan jmp %%draw_decoded_keyboard_mode -%%undefined: +@@: mov eax, sz_undefined %%draw_decoded_keyboard_mode: - push dword COLUMN3_TEXT_X - push dword y - push eax - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],eax,[Pos.y],COLUMN3_TEXT_X call uint2str - push dword COLUMN2_TEXT_X - push dword y - push dword tmpbuffer - push dword [fore_color] - push dword [back_color] - call DrawText + stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X call ChangeBackColor - add y, dword ITEM_HEIGHT -%endmacro + add [Pos.y], dword ITEM_HEIGHT +} ; **************************************************************************** ; -%macro DrawUpdateIndicator 0 +macro DrawUpdateIndicator { mov eax, [IndicatorColors] sub eax, 3 neg eax mov [IndicatorColors], eax ; draw.rectangle mov edx, [eax * 4 + IndicatorColors] - mov eax, 13 - mov ebx, INDICATOR_LEFT << 16 | INDICATOR_WIDTH - mov ecx, INDICATOR_TOP << 16 | INDICATOR_HEIGHT - int 64 -%endmacro + mcall SF_DRAW_RECT, (INDICATOR_LEFT shl 16) or INDICATOR_WIDTH, (INDICATOR_TOP shl 16) or INDICATOR_HEIGHT +} ; **************************************************************************** ; -%macro DrawTable 0 +macro DrawTable { ; DrawFrames - push dword FRAME1_LEFT - push dword FRAME_TOP - push dword FRAME1_RIGHT - push dword FRAME_BOTTOM - push dword [frame_color] - call DrawFrame - push dword FRAME2_LEFT - push dword FRAME_TOP - push dword FRAME2_RIGHT - push dword FRAME_BOTTOM - push dword [frame_color] - call DrawFrame - push dword FRAME3_LEFT - push dword FRAME_TOP - push dword FRAME3_RIGHT - push dword FRAME_BOTTOM - push dword [frame_color] - call DrawFrame + stdcall DrawFrame, [frame_color],FRAME_BOTTOM,FRAME1_RIGHT,FRAME_TOP,FRAME1_LEFT + stdcall DrawFrame, [frame_color],FRAME_BOTTOM,FRAME2_RIGHT,FRAME_TOP,FRAME2_LEFT + stdcall DrawFrame, [frame_color],FRAME_BOTTOM,FRAME3_RIGHT,FRAME_TOP,FRAME3_LEFT ; DrawItems mov esi, COLUMN_Y xor edi, edi -%%draw_item: +@@: cmp edi, ITEM_COUNT - jnl %%done + jnl @f mov ecx, esi shl ecx, 16 or ecx, ITEM_HEIGHT -; draw.rectangle - mov eax, 13 - mov ebx, COLUMN1_X << 16 | COLUMN1_ITEM_WIDTH - mov edx, [back_color] - int 64 -; draw.rectangle - mov eax, 13 - mov ebx, COLUMN2_X << 16 | COLUMN2_ITEM_WIDTH - mov edx, [back_color] - int 64 -; draw.rectangle - mov eax, 13 - mov ebx, COLUMN3_X << 16 | COLUMN3_ITEM_WIDTH - mov edx, [back_color] - int 64 +; draw rectangles + mcall SF_DRAW_RECT, (COLUMN1_X shl 16) or COLUMN1_ITEM_WIDTH,, [back_color] + mcall , (COLUMN2_X shl 16) or COLUMN2_ITEM_WIDTH + mcall , (COLUMN3_X shl 16) or COLUMN3_ITEM_WIDTH call ChangeBackColor add esi, ITEM_HEIGHT inc edi - jmp %%draw_item -%%done: -%endmacro + jmp @b +@@: +} ; ---------------------------------------------------------------------------- ; align 4 -START: - mov esi, [program.params] +program.start: + mov esi, program.params test [esi], byte 0xFF jz .no_params ; str2uint(program.params) @@ -876,14 +579,10 @@ START: mov [slot], ecx .no_params: ; get.screen.size - mov eax, 61 - mov ebx, 1 - int 64 + mcall SF_GET_GRAPHICAL_PARAMS,SSF_SCREEN_SIZE mov [screen], eax ; skin.height - mov eax, 48 - mov ebx, 4 - int 64 + mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT add eax, FRAME_BOTTOM + FRAME_TOP + WINDOW_BORDER_SIZE mov [window.width], dword WINDOW_WIDTH mov [window.height], eax @@ -896,39 +595,30 @@ START: mov [window.left], eax mov [window.top], edx ; set.event - mov eax, 40 - mov ebx, EM_REDRAW | EM_BUTTON - int 64 + mcall SF_SET_EVENTS_MASK, EVM_REDRAW or EVM_BUTTON ; ---------------------------------------------------------------------------- ; align 4 on_redraw: ; redraw.start - mov eax, 12 - mov ebx, 1 - int 64 + mcall SF_REDRAW,SSF_BEGIN_DRAW ; draw.window - xor eax, eax mov ebx, [window.left] mov ecx, [window.top] shl ebx, 16 shl ecx, 16 or ebx, [window.width] or ecx, [window.height] - mov edx, WINDOW_STYLE | WINDOW_BACK_COLOR + mov edx, WINDOW_STYLE or WINDOW_BACK_COLOR mov edi, sz_caption xor esi, esi - int 64 + mcall SF_CREATE_WINDOW ; redraw.finish - mov eax, 12 - mov ebx, 2 - int 64 + mcall SF_REDRAW,SSF_END_DRAW DrawTable call UpdateThreadInfo align 4 wait.event.by.time: - mov eax, 23 - mov ebx, UPDATE_TIME - int 64 + mcall SF_WAIT_EVENT_TIMEOUT,UPDATE_TIME dec eax jz on_redraw ; IF eax = 1 THEN redraw jns on_button ; ELSEIF eax = 2 THEN button @@ -936,19 +626,15 @@ wait.event.by.time: jmp wait.event.by.time align 4 on_button: ; terminate because we have only one button(close button) - or eax, -1 - int 64 + mcall SF_TERMINATE_PROCESS ; ---------------------------------------------------------------------------- ; align 4 UpdateThreadInfo: ; get.thread.info - mov eax, 9 - mov ebx, thread_info - mov ecx, [slot] - int 64 + mcall SF_THREAD_INFO, thread_info, [slot] - mov x, dword COLUMN1_X - mov y, dword COLUMN_Y + (ITEM_HEIGHT - TEXT_HEIGHT) / 2 + mov [Pos.x], dword COLUMN1_X + mov [Pos.y], dword COLUMN_Y + (ITEM_HEIGHT - TEXT_HEIGHT) / 2 mov [back_color], dword ITEM_BACK_COLOR_1 mov [BackColors], dword 1 ; order of next "Draw..." can be changed @@ -977,126 +663,96 @@ UpdateThreadInfo: ; ---------------------------------------------------------------------------- ; align 4 DrawFrame: -%define Color [esp + 4 +1*4] -%define Bottom [esp + 8 +1*4] -%define Top [esp + 16 +1*4] -%define Right [esp + 12 +1*4] -%define Left [esp + 20 +1*4] +Color equ [esp + 4 +4] +Bottom equ [esp + 8 +4] +Top equ [esp + 16 +4] +Right equ [esp + 12 +4] +Left equ [esp + 20 +4] push ebp - mov eax, 38 - mov edx, Color - mov esi, Bottom - mov edi, Top + mov edi, Top mov ebp, Right mov ebx, Left shl ebx, 16 mov bx, bp shrd ecx, edi, 16 mov cx, di - int 64 + mcall SF_DRAW_LINE,,, Color, Bottom shrd ecx, esi, 16 mov cx, si - int 64 + mcall shld esi, ebx, 16 mov bx, si shrd ecx, edi, 16 - int 64 + mcall shrd ebx, ebp, 16 mov bx, bp - int 64 + mcall pop ebp ret 20 -%undef Color -%undef Bottom -%undef Top -%undef Right -%undef Left +purge Color +purge Bottom +purge Top +purge Right +purge Left ; ---------------------------------------------------------------------------- ; align 4 -StringConcatenate: -%define stradd [esp + 4] -%define str [esp + 8] - mov esi, stradd +proc StringConcatenate, stradd:dword, str1:dword + mov esi, [stradd] or ecx, -1 mov edi, esi xor eax, eax repne scasb mov edx, ecx - mov edi, str + mov edi, [str1] repne scasb dec edi not edx - mov eax, str + mov eax, [str1] mov ecx, edx shr ecx, 2 and edx, 3 rep movsd mov ecx, edx rep movsb - ret 8 -%undef stradd -%undef str + ret +endp ; ---------------------------------------------------------------------------- ; align 4 -DrawText: -%define x [esp + 20] -%define y [esp + 16] -%define text [esp + 12] -%define fore_color [esp + 8] -%define back_color [esp + 4] - mov eax, 4 - mov ecx, fore_color - mov edi, back_color - mov edx, text - mov ebx, x +proc DrawText, b_color:dword, f_color:dword, text:dword, y:dword, x:dword + mov ebx, [x] shl ebx, 16 - or ebx, y + or ebx, [y] + mov ecx, [f_color] or ecx, 0xD0000000 - int 64 - ret 20 -%undef x -%undef y -%undef text -%undef fore_color -%undef back_color + mcall SF_DRAW_TEXT,,, [text],, [b_color] + ret +endp ; ---------------------------------------------------------------------------- ; -%IF 0 align 4 -DrawTextBold: -%define x [esp + 20] -%define y [esp + 16] -%define text [esp + 12] -%define fore_color [esp + 8] -%define back_color [esp + 4] - mov eax, 4 - mov ecx, fore_color - mov edi, back_color +proc DrawTextBold, b_color:dword, f_color:dword, text:dword, y:dword, x:dword + mov ecx, [f_color] + mov edi, [b_color] mov esi, 1 ; count - mov edx, text - mov ebx, x + mov edx, [text] + mov ebx, [x] shl ebx, 16 - or ebx, y + or ebx, [y] align 4 -.next: +@@: test [edx], byte 0xFF - jz .done + jz @f or ecx, 0x50000000 - int 64 - add ebx, (1 << 16) + mcall SF_DRAW_TEXT + add ebx, (1 shl 16) and ecx, 0x10FFFFFF - int 64 - add ebx, (TEXT_WIDTH << 16) + mcall + add ebx, (TEXT_WIDTH shl 16) inc edx - jmp .next + jmp @b align 4 -.done: - ret 20 -%undef x -%undef y -%undef text -%undef fore_color -%undef back_color -%ENDIF +@@: + ret +endp ; ---------------------------------------------------------------------------- ; align 4 ChangeBackColor: @@ -1110,19 +766,14 @@ ChangeBackColor: ; ---------------------------------------------------------------------------- ; align 4 uint2str: -%define value [esp + 4] - push dword value ; value - push dword 10 ; base(decimal) - push dword tmpbuffer ; buffer - call ConvertToBase + stdcall ConvertToBase, tmpbuffer,10,[esp + 4] ret 4 -%undef value ; ---------------------------------------------------------------------------- ; align 4 ConvertToBase: -%define value [esp + 12] ; value treated as unsigned -%define base [esp + 8] ; 2 <= base <= 36 -%define buffer [esp + 4] ; SizeOf(buffer) => (32 + 1) +value equ [esp + 12] ; value treated as unsigned +base equ [esp + 8] ; 2 <= base <= 36 +buffer equ [esp + 4] ; SizeOf(buffer) => (32 + 1) mov eax, value mov ecx, base mov esi, buffer @@ -1154,15 +805,15 @@ align 4 mov ecx, edx rep movsb ret 12 -%undef value -%undef base -%undef buffer +purge value +purge base +purge buffer align 4 .digits db "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; ---------------------------------------------------------------------------- ; align 4 PadBuffSpaces: -%define maxlen [esp + 4] +maxlen equ [esp + 4] mov edi, tmpbuffer or ecx, -1 xor eax, eax @@ -1181,7 +832,16 @@ PadBuffSpaces: rep stosb mov [edi], byte 0 ret 4 -%undef maxlen +purge maxlen ; ---------------------------------------------------------------------------- ; align 4 -END: \ No newline at end of file +program.end: + program.path rb 1024 + program.params rb 256 +thread_info process_information + +tmpbuffer rb 64 + rb 512 +align 16 +program.stack: +program.memory: \ No newline at end of file diff --git a/programs/testing/genfiles/GenFiles.asm b/programs/testing/genfiles/GenFiles.asm index 6e6036e14..03cb38040 100644 --- a/programs/testing/genfiles/GenFiles.asm +++ b/programs/testing/genfiles/GenFiles.asm @@ -2,36 +2,28 @@ ; path to folder in edit1 ; ; count of files in edit2 ; ; to compile: nasm -f bin GenFiles.asm -o GenFiles ; -ORG 0 -BITS 32 +use32 + org 0 + db 'MENUET01' +version dd 1 + dd program.start + dd program.end + dd program.memory + dd program.stack + dd 0,0 + +include '../../macros.inc' +include '../../proc32.inc' +include '../../KOSfuncs.inc' + ; ------------------------------------- ; -STACK_SIZE equ 256 +BUTTON_START = 2 ; ------------------------------------- ; -EM_REDRAW equ 0b1 -EM_KEY equ 0b10 -EM_BUTTON equ 0b100 -EM_MOUSE equ 0b100000 +ED_DISABLED = 100000000000b ; ------------------------------------- ; -BUTTON_START equ 2 -; ------------------------------------- ; -ED_DISABLED equ 0b100000000000 -; ------------------------------------- ; -EDIT1_MAX_LENGTH equ 1024 -EDIT2_MAX_LENGTH equ 10 -FILE_NAME_LENGTH equ 256 -; ------------------------------------- ; -text_buffer1 equ END + STACK_SIZE -text_buffer2 equ END + STACK_SIZE + (EDIT1_MAX_LENGTH + 2) -file_name equ END + STACK_SIZE + (EDIT1_MAX_LENGTH + 2) + (EDIT2_MAX_LENGTH + 2) -; ------------------------------------- ; -MENUET01 db 'MENUET01' -version dd 1 -program.start dd START -program.end dd END -program.memory dd END + STACK_SIZE + (EDIT1_MAX_LENGTH + 2) + (EDIT2_MAX_LENGTH + 2) + FILE_NAME_LENGTH -program.stack dd END + STACK_SIZE -program.params dd 0 -program.path dd 0 +EDIT1_MAX_LENGTH = 1024 +EDIT2_MAX_LENGTH = 10 +FILE_NAME_LENGTH = 256 ; ------------------------------------- ; align 4 Events: @@ -67,7 +59,7 @@ edit1: .width dd 100 .left dd 48 .top dd 8 -.color dd 0X00FFFFFF +.color dd 0x00FFFFFF .shift_color dd 0x94AECE .focus_border_color dd 0 .blur_border_color dd 0 @@ -88,7 +80,7 @@ edit2: .width dd 60 .left dd 216 .top dd 8 -.color dd 0X00FFFFFF +.color dd 0x00FFFFFF .shift_color dd 0x94AECE .focus_border_color dd 0 .blur_border_color dd 0 @@ -139,57 +131,39 @@ sz_error db "error",0 ; ------------------------------------- ; digits db "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; ------------------------------------- ; -START: +program.start: ; LoadLibrary: - mov eax, 68 - mov ebx, 19 - mov ecx, sz_box_lib - int 64 + mcall SF_SYS_MISC,SSF_LOAD_DLL, sz_box_lib mov [box_lib], eax - push dword[box_lib] - push sz_edit_box - call GetProcAddress + stdcall GetProcAddress,sz_edit_box,[box_lib] mov [edit_box_draw], eax - push dword[box_lib] - push sz_edit_box_key - call GetProcAddress + stdcall GetProcAddress,sz_edit_box_key,[box_lib] mov [edit_box_key], eax - push dword[box_lib] - push sz_edit_box_mouse - call GetProcAddress + stdcall GetProcAddress,sz_edit_box_mouse,[box_lib] mov [edit_box_mouse], eax - push dword[box_lib] - push sz_edit_box_set_text - call GetProcAddress + stdcall GetProcAddress,sz_edit_box_set_text,[box_lib] mov [edit_box_set_text], eax - push dword[box_lib] - push sz_progressbar_draw - call GetProcAddress + stdcall GetProcAddress,sz_progressbar_draw,[box_lib] mov [progressbar_draw], eax - push dword[box_lib] - push sz_progressbar_progress - call GetProcAddress + stdcall GetProcAddress,sz_progressbar_progress,[box_lib] mov [progressbar_progress], eax ; ------------------------------------- ; ; SetEventMask - mov eax, 40 - mov ebx, EM_REDRAW | EM_KEY | EM_BUTTON | EM_MOUSE - int 64 + mcall SF_SET_EVENTS_MASK, EVM_REDRAW or EVM_KEY or EVM_BUTTON or EVM_MOUSE ; ------------------------------------- ; align 4 WaitEvent: - mov eax, 10 - int 64 - call [eax * 4 + Events] + mcall SF_WAIT_EVENT + call dword[eax * 4 + Events] jmp WaitEvent ; ------------------------------------- ; -%macro CreateNextFile 0 +macro CreateNextFile { ; Base36(count) mov eax, [count] mov ecx, 36 ; because our base is 36 @@ -197,14 +171,14 @@ WaitEvent: mov edi, esi add esi, 7 ; base36(0xFFFFFFFF) = 1Z141Z3 : 7 simbols mov [esi], byte 0 -%%next: +@@: xor edx, edx div ecx dec esi mov dl, [edx + digits] mov [esi], dl test eax, eax - jnz %%next + jnz @b mov eax, esi sub eax, edi mov ecx, 7 + 1 @@ -218,12 +192,11 @@ WaitEvent: push dword 0 push dword 0 push dword 0 - push dword 2 ; SubFunction #2 Create/Rewrite file + push dword SSF_CREATE_FILE ; SubFunction #2 Create/Rewrite file mov ebx, esp - mov eax, 70 ; Function #70 - int 64 + mcall SF_FILE add esp, 25 ; restore stack -%endmacro +} ; ------------------------------------- ; align 4 DoAction: @@ -245,16 +218,12 @@ DoAction: mov [pb.max], ecx mov [pb.value], dword 0 ; draw progressbar - push pb - call [progressbar_draw] + stdcall [progressbar_draw], pb ; ------------------------------------- ; cmp [count], dword 0 jz .done ; SetCurrentDirectory - mov eax, 30 - mov ebx, 1 - mov ecx, [edit1.text] - int 64 + mcall SF_CURRENT_FOLDER,SSF_SET_CF, [edit1.text] ; mov [status_string], dword sz_doing call DrawStatus @@ -263,30 +232,23 @@ DoAction: test eax, eax jnz .error ; increase progress - push pb - call [progressbar_progress] + stdcall [progressbar_progress], pb ; CheckEvent - mov eax, 11 - int 64 - call [eax * 4 + Events] + mcall SF_CHECK_EVENT + call dword[eax * 4 + Events] dec dword [count] jnz .do .done: mov [status_string], dword sz_done call DrawStatus - ret + ret .error: mov [status_string], dword sz_error call DrawStatus - ret + ret ; ------------------------------------- ; DrawStatus: - mov eax, 4 - mov ecx, 0xD0000000 - mov ebx, (297 << 16) | 38 - mov edx, [status_string] - mov edi, 0x00FFFFFF - int 64 + mcall SF_DRAW_TEXT, (297 shl 16) or 38, 0xD0000000, [status_string],, 0x00FFFFFF ret ; ------------------------------------- ; align 4 @@ -296,83 +258,54 @@ On_Idle: align 4 On_Redraw: ; RedrawStart - mov eax, 12 - mov ebx, 1 - int 64 + mcall SF_REDRAW,SSF_BEGIN_DRAW ; DrawWindow - xor eax, eax - mov ebx, (50 << 16) | 360 - mov ecx, (50 << 16) | 88 - mov edx, 0x34FFFFFF mov edi, sz_caption xor esi, esi - int 64 + mcall SF_CREATE_WINDOW, (50 shl 16) or 360, (50 shl 16) or 88, 0x34FFFFFF ; draw progressbar - push pb - call [progressbar_draw] + stdcall [progressbar_draw], pb ; draw edit1 - push edit1 - call [edit_box_draw] + stdcall [edit_box_draw], edit1 ; draw edit2 - push edit2 - call [edit_box_draw] + stdcall [edit_box_draw], edit2 ; DrawButton - mov eax, 8 - mov ecx, (8 << 16) | 26 - mov ebx, (288 << 16) | 53 - mov edx, BUTTON_START - mov esi, 0x00DDDDDD - int 64 + mcall SF_DEFINE_BUTTON, (288 shl 16) or 53, (8 shl 16) or 26, BUTTON_START, 0x00DDDDDD ; DrawTexts - mov eax, 4 - mov ecx, 0x90000000 ; Path: - mov ebx, (8 << 16) | 11 - mov edx, sz_path - int 64 + mcall SF_DRAW_TEXT, (8 shl 16) or 11, 0x90000000, sz_path ; Count: - mov ebx, (168 << 16) | 11 - mov edx, sz_count - int 64 + mcall , (168 shl 16) or 11,, sz_count ; Start: - mov ebx, (297 << 16) | 15 - mov edx, sz_start - int 64 + mcall , (297 shl 16) or 15,, sz_start ; draw status call DrawStatus ; RedrawFinish - mov eax, 12 - mov ebx, 2 - int 64 + mcall SF_REDRAW,SSF_END_DRAW ret ; ------------------------------------- ; align 4 On_Key: ; GetKeyCode - mov eax, 2 - int 64 + mcall SF_GET_KEY ; notify edit1 about key event - push edit1 - call [edit_box_key] + stdcall [edit_box_key], edit1 ; notify edit2 about key event - push edit2 - call [edit_box_key] + stdcall [edit_box_key], edit2 ret ; ------------------------------------- ; align 4 On_Button: ; GetButtonNumber - mov eax, 17 - int 64 + mcall SF_GET_BUTTON movzx eax, ah - call [eax * 4 + ButtonEvents] + call dword[eax * 4 + ButtonEvents] ret ; ------------------------------------- ; align 4 On_ButtonClose: ; Terminate - or eax, -1 - int 64 + mcall SF_TERMINATE_PROCESS ; ret is not needed here because we are not back after terminate ; ------------------------------------- ; align 4 @@ -381,31 +314,25 @@ On_ButtonStart: or [edit1.flags], dword ED_DISABLED ; disable edit1 | we will or [edit2.flags], dword ED_DISABLED ; disable edit2 | in Action ; redraw edit1 after change flag - push edit1 - call [edit_box_draw] + stdcall [edit_box_draw], edit1 ; redraw edit2 after change flag - push edit2 - call [edit_box_draw] + stdcall [edit_box_draw], edit2 call DoAction mov [ButtonEvents.2], dword On_ButtonStart ; enable ButtonStart - and [edit1.flags], dword ~ED_DISABLED ; enable edit1 - and [edit2.flags], dword ~ED_DISABLED ; enable edit2 + and [edit1.flags], not ED_DISABLED ; enable edit1 + and [edit2.flags], not ED_DISABLED ; enable edit2 ; redraw edit1 after change flag - push edit1 - call [edit_box_draw] + stdcall [edit_box_draw], edit1 ; redraw edit2 after change flag - push edit2 - call [edit_box_draw] + stdcall [edit_box_draw], edit2 ret ; ------------------------------------- ; align 4 On_Mouse: ; notify edit1 about mouse event - push edit1 - call [edit_box_mouse] + stdcall [edit_box_mouse], edit1 ; notify edit2 about mouse event - push edit2 - call [edit_box_mouse] + stdcall [edit_box_mouse], edit2 ret ; ------------------------------------- ; align 4 @@ -436,4 +363,12 @@ GetProcAddress: ret 8 ; ------------------------------------- ; align 4 -END: \ No newline at end of file +program.end: +; ------------------------------------- ; +text_buffer1 rb EDIT1_MAX_LENGTH+2 +text_buffer2 rb EDIT2_MAX_LENGTH+2 +file_name rb FILE_NAME_LENGTH + rb 256 +align 16 +program.stack: +program.memory: \ No newline at end of file diff --git a/programs/testing/genfiles/Tupfile.lua b/programs/testing/genfiles/Tupfile.lua index 65c98b68b..2fc308c1a 100644 --- a/programs/testing/genfiles/Tupfile.lua +++ b/programs/testing/genfiles/Tupfile.lua @@ -1,2 +1,2 @@ -if tup.getconfig("NO_NASM") ~= "" then return end -tup.rule("GenFiles.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "GenFiles") +if tup.getconfig("NO_FASM") ~= "" then return end +tup.rule("GenFiles.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "GenFiles") diff --git a/programs/testing/genfiles/build.bat b/programs/testing/genfiles/build.bat new file mode 100644 index 000000000..58c375be9 --- /dev/null +++ b/programs/testing/genfiles/build.bat @@ -0,0 +1,3 @@ +@fasm.exe -m 16384 GenFiles.asm GenFiles.kex +@kpack GenFiles.kex +pause diff --git a/programs/testing/genfiles/make.bat b/programs/testing/genfiles/make.bat deleted file mode 100644 index f980a1f3f..000000000 --- a/programs/testing/genfiles/make.bat +++ /dev/null @@ -1,3 +0,0 @@ -@del GenFiles -nasm -f bin GenFiles.asm -o GenFiles -pause