Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9240 → Rev 9241

/programs/games/phenix/trunk/ascl.inc
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
}