6,625 → 6,272 |
; CODE |
; Libary |
; |
; Ver 0.14 By Pavlushin Evgeni (RUSSIA) |
; www.waptap@mail.ru |
; Ver 0.17 (for FASM v1.54 or higer) |
; |
|
;Please compile aplications on FASM ver1.54 or higer!!! |
|
;InfoList |
;0.01 scank,putpix,puttxt |
;0.02 label,random,colors |
;0.03 window,startwd,endwd,attributes |
;0.04 close,delay,scevent ~30.04.2004 |
;0.05 small random, ~04.05.2004 |
;0.06 wtevent ~09.05.2004 |
;0.07 timeevent ~23.05.2004 |
;0.08 txtput ~14.06.2004 |
;0.09 opendialog,savedialog ~20.06.2004 |
;0.10 wordstoreg by halyavin, add at ~30.08.2004 |
; random bug deleted eax is use. |
;0.11 loadfile from me +puttxt bug del ~07.09.2004 |
;0.12 open/save dialog ~13.09.2004 |
;0.13 dialogs bugs deleted |
;0.14 drawlbut ~03.10.2004 |
;0.15 extendet label! |
|
; LOADFILE |
; (SYNTAX) LOADFILE 'full_path_to_file',file_load_area,file_temp_area |
; (SAMPLE) LOADFILE '/rd/1/clock.bmp',load_area,temp_area |
|
|
macro loadfile file_name,file_load_area,file_temp_area |
macro movt op1,op2 |
{ |
local open,fileinfo,string |
jmp open |
fileinfo: |
dd 0 |
dd 0 |
dd 1 |
dd file_load_area |
dd file_temp_area |
string: |
db file_name,0 |
open: |
mov dword [fileinfo+8],1 ; how many blocks to read (1) |
mov eax,58 |
mov ebx,fileinfo |
mcall |
mov eax,[file_load_area+2] |
shr eax,9 ; ¯®¤¥«¨¬ 512 ¨ ¯à¨¡ ¢¨¬ 1 - ¯®«ã稬 ç¨á«® ¡«®ª®¢ |
inc eax |
mov dword [fileinfo+8],eax |
mov eax,58 |
mov ebx,fileinfo |
mcall |
} |
|
|
macro wordstoreg reg,hiword,loword |
{ |
if hiword eqtype 0 & loword eqtype 0 |
mov reg,dword (hiword)*65536+(loword) |
else if hiword eqtype 12 & loword eqtype eax |
mov reg,dword (hiword)*65536 |
add reg,dword loword |
else if hiword eqtype 12 & loword eqtype [123] |
mov reg,dword (hiword)*65536 |
add reg,dword loword |
if op2 eq |
;display 'not set' |
else |
mov reg,dword hiword |
shl reg,16 |
add reg,dword loword |
if op1 eq op2 |
display '+' |
;display 'skip mov ' # `op1 # ',' # `op2 , 10,13 |
else |
mov op1,op2 |
end if |
end if |
} |
|
|
|
macro dword2reg reg,doubleword |
macro clear_buffer buffer, buf_size, value |
{ |
if doubleword eq |
; not changes |
else |
mov reg,dword doubleword |
end if |
} |
movt edi,buffer ; edi = buffer adress |
movt ecx,buf_size ; ecx = buffer size |
movt al,value |
call clear_buffer_proc |
|
macro words2reg reg,hiword,lowword |
{ |
if hiword eq |
if lowword eq |
; not changes |
else |
if lowword eqtype 12 |
and reg,dword 0xffff0000 |
add reg,dword lowword |
else |
and reg,dword 0xffff0000 |
add reg,dword lowword |
if ~ defined clear_buffer_used |
clear_buffer_used equ 1 |
jmp @f |
clear_buffer_proc: |
mov ah,al |
push ax |
shl eax,16 |
pop ax ; eax = al:al:al:al |
push ecx |
shr ecx,2 ; ecx = ecx/4 when we use stosd |
cld ; set direction flag |
rep stosd |
pop ecx |
and ecx,011b ; last two bits |
rep stosb |
ret |
@@: |
end if |
end if |
else |
if lowword eq |
if hiword eqtype 12 |
and reg,dword 0x0000ffff |
add reg,dword hiword*65536 |
else |
shl reg,16 |
add reg,dword hiword |
ror reg,16 |
end if |
else |
if lowword eqtype 12 & hiword eqtype 12 |
if lowword eq 0 & hiword eq 0 |
xor reg,reg |
else |
mov reg,dword hiword*65536+lowword |
end if |
else |
mov reg,dword hiword |
shl reg,16 |
add reg,dword lowword |
end if |
end if |
end if |
} |
|
; draw_button - function for draw button with label placed at center |
|
|
|
; DRAW BUTTON with label |
|
macro drawlbut x,y,xs,ys,text,id,bcolor,tcolor |
macro draw_button button_id,x,y,xs,ys,text,button_color,text_color |
{ |
local asd,lab |
jmp asd |
lab db text ;arg label |
asd: |
words2reg ebx,x,xs |
words2reg ecx,y,ys |
mov edx,id |
mov esi,bcolor |
mov eax,8 |
local end_of_data,label |
jmp end_of_data |
label db text ;arg label |
end_of_data: |
words2reg ebx,x,xs ; ebx = x * 65536 + xsize |
words2reg ecx,y,ys ; ecx = y * 65536 + ysize |
mov edx,button_id |
mov esi,button_color |
push dword end_of_data-label |
push dword text_color |
push dword label |
call draw_button_proc |
if ~ defined draw_button_used |
draw_button_used equ 1 |
jmp @f |
draw_button_proc: |
mov eax,8 ; eax = 8 add button function |
mcall |
|
mov eax,asd-lab ;calc size |
mov ebx,6 |
mul ebx |
mov esi,eax |
mov esi,[esp+12] ; esi = lenght of label |
mov eax,esi |
mov edx,6 ; 6 - width of one char |
mul edx ; eax = size of label in pixels (chars number * 6) |
|
mov eax,xs |
sub eax,esi |
shr eax,1 |
add eax,x |
sub bx,ax |
shr bx,1 |
mov edi,ebx |
shr edi,16 |
add bx,di |
|
mov edx,ys |
sub edx,7 |
shr edx,1 |
add edx,y |
sub cx,7 |
shr cx,1 |
mov edi,ecx |
shr edi,16 |
add cx,di |
|
mov ebx,eax |
shl ebx,16 |
add ebx,edx |
mov bx,cx ; ebx = bx * 65536 + edx |
|
mov ecx,tcolor ;arg4 color |
mov edx,lab |
mov esi,asd-lab ;calc size |
mov eax,4 |
mov ecx,[esp+8] ; text color |
mov edx,[esp+4] ; set address of label |
mov eax,4 ; eax = 4 draw label function |
mcall |
ret 3*4 |
@@: |
end if |
} |
|
|
macro opendialog redproc,openoff,erroff,path |
; scan_event - Scan event without wait |
macro scan_event redraw,key,button |
{ |
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc |
local run_fileinfo, param |
local getmesloop, loox, mred, mkey, mbutton, mgetmes |
local dlg_is_work, ready, procinfo |
; |
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec, |
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save) |
; |
|
cld |
;; mov esi,path |
mov edi,path |
mov eax,0 |
mov ecx,200 |
rep stosb |
|
;mov [get_loops],0 |
mov [dlg_pid_get],0 |
|
; Get my PID in dec format 4 bytes |
mov eax,9 |
mov ebx,procinfo |
mov ecx,-1 |
mov eax,11 |
mcall |
dec eax |
jz redraw |
dec eax |
jz key |
dec eax |
jz button |
} |
|
; convert eax bin to param dec |
mov eax,dword [procinfo+30] ;offset of myPID |
mov edi,param+4-1 ;offset to 4 bytes |
mov ecx,4 |
mov ebx,10 |
cld |
new_d: |
xor edx,edx |
div ebx |
add dl,'0' |
mov [edi],dl |
dec edi |
loop new_d |
|
; wirite 1 byte space to param |
mov [param+4],byte 32 ;Space for next parametr |
; and 1 byte type of dialog to param |
mov [param+5],byte 'O' ;Get Open dialog (Use 'S' for Save dialog) |
|
; |
; STEP2 prepare IPC area for get messages |
; |
|
; prepare IPC area |
mov [path],dword 0 |
mov [path+4],dword 8 |
|
; define IPC memory |
mov eax,60 |
mov ebx,1 ; define IPC |
mov ecx,path ; offset of area |
mov edx,150 ; size 150 bytes |
; wait_event - Wait for event |
macro wait_event redraw,key,button |
{ |
mov eax,10 |
mcall |
dec eax |
jz redraw |
dec eax |
jz key |
dec eax |
jz button |
} |
|
; change wanted events list 7-bit IPC event |
mov eax,40 |
mov ebx,01000111b |
; time_event - Wait for event with timeout |
macro time_event xfps,noevent,redraw,key,button |
{ |
mov eax,23 |
mov ebx,xfps |
mcall |
;cmp eax,0 |
;je noevent |
dec eax |
js noevent |
jz redraw |
dec eax |
jz key |
dec eax |
jz button |
} |
|
; |
; STEP 3 run SYSTEM XTREE with parameters |
; |
|
mov eax,58 |
mov ebx,run_fileinfo |
; function for set ascii or scan code keyboard input mode |
macro keyboard_set_input_mode mode |
{ |
mov eax,66 ; eax = 66 - keyboard service function |
mov ebx,1 ; ebx = 1 - sub function for set input mode for keyboard |
mov ecx,mode ; ecx = mode 0 - ASCII; 1 - scan codes; |
mcall |
} |
|
call redproc |
|
mov [get_loops],0 |
getmesloop: |
mov eax,23 |
mov ebx,50 ;0.5 sec |
; function for read layout to 128 byte array |
macro keyboard_get_layout layout_type, layout_array |
{ |
mov eax,26 ; eax = 26 - hardware service function |
mov ebx,2 ; ebx = 2 - subfunction for get keyboard layout |
mov ecx,layout_type ; ecx = layout type: 1 - for normal layout |
mov edx,layout_array ; edx = address to 128 byte array |
mcall |
} |
|
cmp eax,1 |
je mred |
cmp eax,2 |
je mkey |
cmp eax,3 |
je mbutton |
cmp eax,7 |
je mgetmes |
|
; Get number of procces |
mov ebx,procinfo |
mov ecx,-1 |
mov eax,9 |
; function for get key from keyboard buffer |
macro window_get_key output |
{ |
mov eax,2 ; eax = 2 - get keyboard pressed key function |
mcall |
mov ebp,eax |
if ~output eq |
mov output,eax |
end if |
} |
|
loox: |
mov eax,9 |
mov ebx,procinfo |
mov ecx,ebp |
; function for get id of button pressed in window |
macro window_get_button output |
{ |
mov eax,17 ; eax = 17 - get id of pressed button function |
mcall |
mov eax,[DLGPID] |
cmp [procinfo+30],eax ;IF Dialog find |
je dlg_is_work ;jmp to dlg_is_work |
dec ebp |
jnz loox |
if ~output eq |
mov output,eax |
end if |
} |
|
jmp erroff |
|
dlg_is_work: |
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated |
je erroff ;TESTODP2 terminated too |
|
cmp [dlg_pid_get],dword 1 |
je getmesloop |
inc [get_loops] |
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated |
jae erroff |
jmp getmesloop |
|
mred: |
call redproc |
jmp getmesloop |
mkey: |
mov eax,2 |
mcall ; read (eax=2) |
jmp getmesloop |
mbutton: |
mov eax,17 ; get id |
macro draw_pixel x,y,color |
{ |
mov ebx,x |
mov ecx,y |
mov edx,color |
mov eax,1 |
mcall |
cmp ah,1 ; button id=1 ? |
jne getmesloop |
mov eax,-1 ; close this program |
mcall |
mgetmes: |
|
; If dlg_pid_get then second message get jmp to still |
cmp [dlg_pid_get],dword 1 |
je ready |
|
; First message is number of PID SYSXTREE dialog |
|
; convert PID dec to PID bin |
movzx eax,byte [path+16] |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+1] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+2] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+3] |
add eax,ebx |
sub eax,48 |
mov [DLGPID],eax |
|
; Claear and prepare IPC area for next message |
mov [path],dword 0 |
mov [path+4],dword 8 |
mov [path+8],dword 0 |
mov [path+12],dword 0 |
mov [path+16],dword 0 |
|
; Set dlg_pid_get for get next message |
mov [dlg_pid_get],dword 1 |
call redproc ;show DLG_PID |
jmp getmesloop |
|
ready: |
; |
; The second message get |
; Second message is 100 bytes path to SAVE/OPEN file |
; shl path string on 16 bytes |
; |
cld |
mov esi,path+16 |
mov edi,path |
mov ecx,200 |
rep movsb |
mov [edi],byte 0 |
|
jmp openoff |
|
|
; DATA AREA |
get_loops dd 0 |
dlg_pid_get dd 0 |
DLGPID dd 0 |
|
param: |
dd 0 ; My dec PID |
dd 0,0 ; Type of dialog |
|
run_fileinfo: |
dd 16 |
dd 0 |
dd param |
dd 0 |
dd procinfo ; 0x10000 |
;run_filepath |
db '/sys/SYSXTREE',0 |
|
procinfo: |
times 256 db 0 |
} |
|
|
macro savedialog redproc,openoff,erroff,path |
macro puttxt x,y,offs,size,color |
{ |
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc |
local run_fileinfo, run_filepath, param |
local getmesloop, loox, mred, mkey, mbutton, mgetmes |
local dlg_is_work, ready, procinfo |
; |
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec, |
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save) |
; |
|
cld |
;; mov esi,path |
mov edi,path |
mov eax,0 |
mov ecx,200 |
rep stosb |
|
;mov [get_loops],0 |
mov [dlg_pid_get],0 |
|
; Get my PID in dec format 4 bytes |
mov eax,9 |
mov ebx,procinfo |
mov ecx,-1 |
words2reg ebx,x,y |
mov ecx,color |
mov edx,offs |
mov esi,size |
mov eax,4 |
mcall |
} |
|
; convert eax bin to param dec |
mov eax,dword [procinfo+30] ;offset of myPID |
mov edi,param+4-1 ;offset to 4 bytes |
mov ecx,4 |
mov ebx,10 |
cld |
new_d: |
xor edx,edx |
div ebx |
add dl,'0' |
mov [edi],dl |
dec edi |
loop new_d |
|
; wirite 1 byte space to param |
mov [param+4],byte 32 ;Space for next parametr |
; and 1 byte type of dialog to param |
mov [param+5],byte 'S' ;Get Open dialog (Use 'S' for Save dialog) |
|
; |
; STEP2 prepare IPC area for get messages |
; |
|
; prepare IPC area |
mov [path],dword 0 |
mov [path+4],dword 8 |
|
; define IPC memory |
mov eax,60 |
mov ebx,1 ; define IPC |
mov ecx,path ; offset of area |
mov edx,120 ; size 150 bytes |
; window_begin_draw - Begin of draw window |
macro window_begin_draw |
{ |
mov eax,12 |
mov ebx,1 |
mcall |
} |
|
; change wanted events list 7-bit IPC event |
mov eax,40 |
mov ebx,01000111b |
; window_end_draw - End draw of window |
macro window_end_draw |
{ |
mov eax,12 |
mov ebx,2 |
mcall |
} |
|
; |
; STEP 3 run SYSTEM XTREE with parameters |
; |
; fs_read_file - read file from file system and save it to array |
; example: |
; fs_read_file '/rd/1/clock.bmp',load_area,temp_area |
|
macro fs_read_file file_name,file_load_area,file_temp_area |
{ |
local open,fileinfo,string |
jmp open |
fileinfo: |
dd 0 |
dd 0 |
dd 1 |
dd file_load_area |
dd file_temp_area |
string: |
db file_name,0 |
open: |
mov dword [fileinfo+8],1 ; how many blocks to read (1) |
mov eax,58 |
mov ebx,run_fileinfo |
mov ebx,fileinfo |
mcall |
|
call redproc |
|
mov [get_loops],0 |
getmesloop: |
mov eax,23 |
mov ebx,50 ;0.5 sec |
mov eax,[file_load_area+2] |
shr eax,9 ; div to 512 and add 1 - for get number of blocks |
inc eax |
mov dword [fileinfo+8],eax |
mov eax,58 |
mov ebx,fileinfo |
mcall |
|
cmp eax,1 |
je mred |
cmp eax,2 |
je mkey |
cmp eax,3 |
je mbutton |
cmp eax,7 |
je mgetmes |
|
; Get number of procces |
mov ebx,procinfo |
mov ecx,-1 |
mov eax,9 |
mcall |
mov ebp,eax |
|
loox: |
mov eax,9 |
mov ebx,procinfo |
mov ecx,ebp |
mcall |
mov eax,[DLGPID] |
cmp [procinfo+30],eax ;IF Dialog find |
je dlg_is_work ;jmp to dlg_is_work |
dec ebp |
jnz loox |
|
jmp erroff |
|
dlg_is_work: |
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated |
je erroff ;TESTODP2 terminated too |
|
cmp [dlg_pid_get],dword 1 |
je getmesloop |
inc [get_loops] |
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated |
jae erroff |
jmp getmesloop |
|
mred: |
call redproc |
jmp getmesloop |
mkey: |
mcall ; read (eax=2) |
jmp getmesloop |
mbutton: |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
jne getmesloop |
mov eax,-1 ; close this program |
mcall |
mgetmes: |
|
; If dlg_pid_get then second message get jmp to still |
cmp [dlg_pid_get],dword 1 |
je ready |
|
; First message is number of PID SYSXTREE dialog |
|
; convert PID dec to PID bin |
movzx eax,byte [path+16] |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+1] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+2] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+3] |
add eax,ebx |
sub eax,48 |
mov [DLGPID],eax |
|
; Claear and prepare IPC area for next message |
mov [path],dword 0 |
mov [path+4],dword 8 |
mov [path+8],dword 0 |
mov [path+12],dword 0 |
mov [path+16],dword 0 |
|
; Set dlg_pid_get for get next message |
mov [dlg_pid_get],dword 1 |
call redproc ;show DLG_PID |
jmp getmesloop |
|
ready: |
; |
; The second message get |
; Second message is 100 bytes path to SAVE/OPEN file |
; shl path string on 16 bytes |
; |
cld |
mov esi,path+16 |
mov edi,path |
mov ecx,200 |
rep movsb |
mov [edi],byte 0 |
|
jmp openoff |
|
|
; DATA AREA |
get_loops dd 0 |
dlg_pid_get dd 0 |
DLGPID dd 0 |
|
param: |
rb 4 ; My dec PID |
rb 6 ; Type of dialog |
|
run_fileinfo: |
dd 16 |
dd 0 |
dd param |
dd 0 |
dd procinfo |
run_filepath: |
db '/sys/SYSXTREE',0 |
|
procinfo: |
times 256 db 0 |
} |
|
; random - generate random count (small) |
; example: |
; random 10000,eax ; generate random value from 0 to 10000 and save it in eax |
; note: |
; max_value<65536 |
; only modificate eax register |
|
|
|
; RANDOM - generate random count (small) |
; (SYNTAX) RANDOM MaxCount,OutArgument |
; (SAMPLE) RANDOM 10000,eax |
; ( NOTE ) Maxint<65536 ; use random 65536,eax for more combinations |
|
randomuse = 0 |
|
macro random arg1,arg2 |
macro random max_value,result |
{ |
local rxproc |
randomuse = randomuse + 1 |
|
jmp rxproc |
|
if defined randomuse & randomuse = 1 |
randomproc: |
jmp rnj |
rsx1 dw 0x4321 |
rsx2 dw 0x1234 |
rnj: |
; mov eax,arg1 |
push bx |
push cx |
push dx |
push si |
push di |
;int3 |
;push bx |
;push cx |
;push dx |
;push si |
;push di |
pushad |
mov cx,ax |
mov ax,word ptr rsx1 |
mov bx,word ptr rsx2 |
651,112 → 298,25 |
je nodiv |
div cx |
nodiv: |
mov ax,dx |
pop di |
pop si |
pop dx |
pop cx |
pop bx |
and eax,0000ffffh |
; mov arg2,0 |
; mov arg2,eax |
mov [rnd_result],dx |
popad |
mov eax,dword [rnd_result] |
ret |
; data block after ret |
rsx1 dw 0x4321 |
rsx2 dw 0x1234 |
rnd_result dw 0 |
dw 0 |
end if |
|
rxproc: |
mov eax,arg1 |
movt eax,max_value |
call randomproc |
mov arg2,eax |
movt result,eax ;dword [rnd_result] |
} |
|
macro scank |
{ |
mov eax,10 |
mcall |
} |
; close - Close application |
|
macro putpix x,y,color |
{ |
mov ebx,x |
mov ecx,y |
mov edx,color |
mov eax,1 |
mcall |
} |
|
macro puttxt x,y,offs,size,color |
{ |
; mov ebx,x |
; shl ebx,16 |
; add ebx,y |
words2reg ebx,x,y |
mov ecx,color |
mov edx,offs |
mov esi,size |
mov eax,4 |
mcall |
} |
|
macro outcount data, x, y, color, numtype |
{ |
mov ecx,data |
mov ebx,numtype |
mov bl,0 |
; mov edx,x*65536+y |
words2reg edx,x,y |
mov esi,color |
mov eax,47 |
mcall |
} |
|
; SCEVENT - Scan event |
|
macro scevent red,key,but |
{ |
mov eax,11 |
mcall |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
|
; WTEVENT - Wait event |
|
macro wtevent red,key,but |
{ |
mov eax,10 |
mcall |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
|
; TIMEEVENT - Wite for event with timeout |
|
macro timeevent xfps,noevent,red,key,but |
{ |
mov eax,23 |
mov ebx,xfps |
mcall |
cmp eax,0 |
je noevent |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
|
|
; CLOSE - Close program |
|
macro close |
{ |
mov eax,-1 |
763,9 → 323,9 |
mcall |
} |
|
; DELAY - Create delay 1/100 sec |
; (SYNTAX) Delay time |
; (SAMPLE) Delay 100 ;delay 2 sec 1/100*200=2 sec |
; delay - Create delay 1/100 sec |
; example: |
; delay 100 ;delay 2 sec 1/100*200=2 sec |
|
macro delay arg1 |
{ |
774,14 → 334,13 |
mcall |
} |
|
; WINDOW - Draw window |
; (SYNTAX) WINDOW Xstart,Ystart,'Text',Color |
; (SAMPLE) WINDOW 10,10,640+8,480+24,window_Skinned |
; window - Draw window |
; window Xstart,Ystart,'Text',Color |
; example: |
; window 10,10,640+8,480+24,window_Skinned |
|
macro window arg1,arg2,arg3,arg4,arg5 |
{ |
; mov ebx,arg1*65536+arg3 |
; mov ecx,arg2*65536+arg4 |
words2reg ebx,arg1,arg3 |
words2reg ecx,arg2,arg4 |
mov edx,arg5 |
800,77 → 359,112 |
mcall |
} |
|
;Key's scan codes |
|
; STARTWD - Start of window draw |
ErrorCode equ 0 ; 0x00 |
key_Esc equ 1 ; 0x01 |
key_1 equ 2 ; 0x02 ! |
key_2 equ 3 ; 0x03 @ |
key_3 equ 4 ; 0x04 # |
key_4 equ 5 ; 0x05 $ |
key_5 equ 6 ; 0x06 % |
key_6 equ 7 ; 0x07 " |
key_7 equ 8 ; 0x08 & |
key_8 equ 9 ; 0x09 * |
key_9 equ 10 ; 0x0A ( |
key_0 equ 11 ; 0x0B ) |
|
macro startwd |
{ |
mov eax,12 |
mov ebx,1 |
mcall |
} |
key_Backspace equ 14 ; 0x0E |
key_Q equ 16 ; 0x10 |
key_W equ 17 ; 0x11 |
key_E equ 18 ; 0x12 |
key_R equ 19 ; 0x13 |
key_T equ 20 ; 0x14 |
key_Y equ 21 ; 0x15 |
key_U equ 22 ; 0x16 |
key_I equ 23 ; 0x17 |
key_O equ 24 ; 0x18 |
key_P equ 25 ; 0x19 |
|
; ENDWD - End window draw |
key_Enter equ 28 ; 0x1C |
key_A equ 30 ; 0x1E |
key_S equ 31 ; 0x1F |
key_D equ 32 ; 0x20 |
key_F equ 33 ; 0x21 |
key_G equ 34 ; 0x22 |
key_H equ 35 ; 0x23 |
key_J equ 36 ; 0x24 |
key_K equ 37 ; 0x25 |
key_L equ 38 ; 0x26 |
key_Colon equ 39 ; 0x27 ':;' |
key_DQuotes equ 0x28 ; 40 '"'' |
key_Tilda equ 0x29 ; 41 '~`' |
key_LShift equ 0x2A ; 42 |
key_Z equ 0x2C ; 44 |
key_X equ 0x2D ; 45 |
key_C equ 0x2E ; 46 |
key_V equ 0x2F ; 47 |
key_B equ 0x30 ; 48 |
key_N equ 0x31 ; 49 |
key_M equ 0x32 ; 50 |
key_Comma equ 0x33 ; 51 ',<' |
key_Dot equ 0x34 ; 52 '.>' |
key_Question equ 0x35 ; 53 '?/' |
key_RShift equ 0x36 ; 54 |
key_NumStar equ 0x37 ; 55 '*' |
key_LAlt equ 0x38 ; 56 |
key_Space equ 0x39 ; 57 |
key_CapsLock equ 0x3A ; 58 |
key_F1 equ 0x3B ; 59 |
key_F2 equ 0x3C ; 60 |
key_F3 equ 0x3D ; 61 |
key_F4 equ 62 |
key_F5 equ 63 |
key_F6 equ 64 |
key_F7 equ 65 |
key_F8 equ 66 |
key_F9 equ 67 |
key_F10 equ 0x44 ; 68 |
key_NumLock equ 0x45 ; 69 |
key_ScrollLock equ 0x46 ; 70 |
key_Up equ 0x48 ; 72 |
key_Num8 equ 0x48 ; 72 |
key_PageUp equ 0x49 ; 73 |
key_Num9 equ 0x49 ; 73 |
key_NumMinus equ 0x4A ; 74 |
key_Left equ 0x4B ; 75 |
key_Num4 equ 0x4B ; 75 |
key_Num5 equ 0x4C ; 76 |
key_Right equ 0x4D ; 77 |
key_Down equ 0x50 ; 80 |
key_Num2 equ 0x50 ; 80 |
key_F11 equ 0x57 ; 87 |
key_F12 equ 0x58 ; 88 |
key_PA1 equ 90 ; 0x5A |
key_Lwin equ 91 ; 0x5B |
key_F13 equ 91 ; 0x5B |
key_Rwin equ 92 ; 0x5C |
key_F14 equ 92 ; 0x5C |
key_Menu equ 93 ; 0x5D |
key_F15 equ 93 ; 0x5D |
key_F16 equ 99 ; 0x63 |
key_F17 equ 100 ; 0x64 |
key_F18 equ 101 ; 0x65 |
key_F19 equ 102 ; 0x66 |
key_F20 equ 103 ; 0x67 |
key_F21 equ 104 ; 0x68 |
key_F22 equ 105 ; 0x69 |
key_F23 equ 106 ; 0x6A |
key_F24 equ 107 ; 0x6B |
key_EraseEOF equ 109 ; 0x6D |
key_CopyPlay equ 111 ; 0x6F |
key_CrSel equ 114 ; 0x72 |
key_Delta equ 115 ; 0x73 |
key_ExSel equ 116 ; 0x74 |
key_Clear equ 118 ; 0x76 |
|
macro endwd |
{ |
mov eax,12 |
mov ebx,2 |
mcall |
} |
|
; LABEL - Put text to frame |
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color |
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big |
|
macro label arg1,arg2,arg3,arg4 |
{ |
local asd,lab |
jmp asd |
lab db arg3 ;arg label |
asd: |
; mov ebx,arg1 ;arg1=y arg2=x |
; shl ebx,16 |
; add ebx,arg2 |
|
|
words2reg ebx,arg1,arg2 |
|
dword2reg ecx,arg4 |
|
|
mov edx,lab |
mov esi,asd-lab ;calc size |
mov eax,4 |
mcall |
} |
|
;Key's |
key_Up equ 178 |
key_Down equ 177 |
key_Right equ 179 |
key_Left equ 176 |
key_Esc equ 27 |
key_Space equ 32 |
key_Enter equ 13 |
key_Bspace equ 8 |
key_F1 equ 50 |
key_F2 equ 51 |
key_F3 equ 52 |
key_F4 equ 53 |
key_F5 equ 54 |
key_F6 equ 55 |
key_F7 equ 56 |
key_F8 equ 57 |
key_F9 equ 48 |
key_F10 equ 49 |
key_F11 equ 68 |
key_F12 equ 255 |
key_Home equ 180 |
key_End equ 181 |
key_PgUp equ 184 |
key_PgDown equ 183 |
|
;Attributes |
|
;Window Attributes |
879,8 → 473,21 |
window_Type1 equ 0x00000000 |
window_Reserve equ 0x01000000 |
|
;Font Attributes |
font_Big equ 0x10000000 |
;Label Attributes |
ends_by_zero equ 10000000b shl 24 |
fill_background equ 01000000b shl 24 |
cp866_small equ 00000000b shl 24 |
cp866 equ 00010000b shl 24 |
utf16 equ 00100000b shl 24 |
utf8 equ 00110000b shl 24 |
font_size_x1 equ 00000000b shl 24 |
font_size_x2 equ 00000001b shl 24 |
font_size_x3 equ 00000010b shl 24 |
font_size_x4 equ 00000011b shl 24 |
font_size_x5 equ 00000100b shl 24 |
font_size_x6 equ 00000101b shl 24 |
font_size_x7 equ 00000110b shl 24 |
font_size_x8 equ 00000111b shl 24 |
|
;Colors |
cl_White equ 0x00ffffff |
888,8 → 495,78 |
cl_Grey equ 0x00888888 |
cl_Red equ 0x00ff0000 |
cl_Lime equ 0x0000ff00 |
cl_Blue equ 0x000000ff |
cl_Yellow equ 0x00ffff00 |
cl_Cyan equ 0x0000ffff |
cl_Green equ 0x0000af00 |
cl_Blue equ 0x000000ff |
cl_Purple equ 0x008080ff |
cl_Violet equ 0x008040ff |
cl_Cyan equ 0x0040e0ff |
;cl_Cyan equ 0x0040e0ff |
|
macro wordstoreg reg,hiword,loword |
{ |
if hiword eqtype 0 & loword eqtype 0 |
mov reg,dword (hiword)*65536+(loword) |
else if hiword eqtype 12 & loword eqtype eax |
mov reg,dword (hiword)*65536 |
add reg,dword loword |
else if hiword eqtype 12 & loword eqtype [123] |
mov reg,dword (hiword)*65536 |
add reg,dword loword |
else |
mov reg,dword hiword |
shl reg,16 |
add reg,dword loword |
end if |
} |
|
macro dword2reg reg,doubleword |
{ |
if doubleword eq |
; not changes |
else |
mov reg,dword doubleword |
end if |
} |
|
macro words2reg reg,hiword,lowword |
{ |
if hiword eq |
if lowword eq |
; if operators empty nothing do |
else |
if lowword eqtype 12/4 |
and reg,dword 0xffff0000 |
add reg,dword lowword |
else |
and reg,dword 0xffff0000 |
add reg,dword lowword |
end if |
end if |
else |
if lowword eq |
if hiword eqtype 12/4 |
and reg,dword 0x0000ffff |
add reg,dword hiword*65536 |
else |
shl reg,16 |
add reg,dword hiword |
ror reg,16 |
end if |
else |
if lowword eqtype 12/4 & hiword eqtype 12/4 |
if lowword = 0 & hiword = 0 |
xor reg,reg |
else |
; use brackets for calcualtion without error!!! |
mov reg,dword (hiword)*65536+(lowword) |
end if |
else |
mov reg,dword hiword |
shl reg,16 |
add reg,dword lowword |
end if |
end if |
end if |
} |