Subversion Repositories Kolibri OS

Rev

Rev 111 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;
  2. ;   Assembler
  3. ;     SMALL
  4. ;       CODE
  5. ;         Libary
  6. ;
  7. ;  Ver 0.14 By Pavlushin Evgeni (RUSSIA)
  8. ;  www.waptap@mail.ru
  9.  
  10. ;Please compile aplications on FASM ver1.54 or higer!!!
  11.  
  12. ;InfoList
  13. ;0.01 scank,putpix,puttxt
  14. ;0.02 label,random,colors
  15. ;0.03 window,startwd,endwd,attributes
  16. ;0.04 close,delay,scevent ~30.04.2004
  17. ;0.05 small random, ~04.05.2004
  18. ;0.06 wtevent ~09.05.2004
  19. ;0.07 timeevent ~23.05.2004
  20. ;0.08 txtput ~14.06.2004
  21. ;0.09 opendialog,savedialog ~20.06.2004
  22. ;0.10 wordstoreg by halyavin, add at ~30.08.2004
  23. ; random bug deleted eax is use.
  24. ;0.11 loadfile from me +puttxt bug del ~07.09.2004
  25. ;0.12 open/save dialog ~13.09.2004
  26. ;0.13 dialogs bugs deleted
  27. ;0.14 drawlbut ~03.10.2004
  28. ;0.15 extendet label!
  29.  
  30. ; LOADFILE
  31. ; (SYNTAX)  LOADFILE 'full_path_to_file',file_load_area,file_temp_area
  32. ; (SAMPLE)  LOADFILE '/rd/1/clock.bmp',load_area,temp_area
  33.  
  34.  
  35. macro loadfile file_name,file_load_area,file_temp_area
  36. {
  37. local open,fileinfo,string
  38.     jmp open
  39. fileinfo:
  40.     dd 0
  41.     dd 0
  42.     dd 1
  43.     dd file_load_area
  44.     dd file_temp_area
  45. string:
  46.     db file_name,0
  47. open:
  48.     mov  dword [fileinfo+8],1 ; how many blocks to read (1)
  49.     mov  eax,58
  50.     mov  ebx,fileinfo
  51.     int  0x40
  52.     mov  eax,[file_load_area+2]
  53.     shr  eax,9 ; поделим на 512 и прибавим 1 - получим число блоков
  54.     inc  eax
  55.     mov  dword [fileinfo+8],eax
  56.     mov  eax,58
  57.     mov  ebx,fileinfo
  58.     int  0x40
  59. }
  60.  
  61.  
  62. ;***********************************************************
  63. macro savefile file_name,file_save_area,file_temp_area,fsize
  64. {
  65. local save,fileinfo,string ;,counter00
  66.     jmp save
  67. ;counter00 dd 0
  68. fileinfo:
  69.     dd 1
  70.     dd 0
  71.     dd fsize ;counter00
  72.     dd file_save_area
  73.     dd file_temp_area
  74. string:
  75.     db file_name,0
  76. save:
  77. ;xor edi,edi
  78. ; sub edi,file_save_area    ; calculate dump size
  79. ; mov edx,edi
  80. ;mov [counter00],edi
  81. ;    mov  dword [fileinfo+8],1 ; how many blocks to write (1)
  82. ;    mov  eax,58
  83. ;    mov  ebx,fileinfo
  84. ;    int  0x40
  85. ;    mov  eax,[file_load_area+2]
  86. ;    shr  eax,9 ; поделим на 512 и прибавим 1 - получим число блоков
  87. ;    inc  eax
  88. ;    mov  dword [fileinfo+8],eax
  89.     mov  eax,58
  90.     mov  ebx,fileinfo
  91.     int  0x40
  92. }
  93. ;***********************************************************
  94.  
  95.  
  96. ;macro wordstoreg reg,hiword,loword
  97. ;{
  98. ;if  hiword eqtype 0 & loword eqtype 0
  99. ;    mov  reg,dword hiword*65536+loword
  100. ;else if hiword eqtype 12 & loword eqtype eax
  101. ;    mov  reg,dword hiword*65536
  102. ;    add  reg,dword loword
  103. ;else if hiword eqtype 12 & loword eqtype [123]
  104. ;    mov  reg,dword hiword*65536
  105. ;    add  reg,dword loword
  106. ;else
  107. ;    mov  reg,dword hiword
  108. ;    shl  reg,16
  109. ;    add  reg,dword loword
  110. ;end if
  111. ;}
  112.  
  113. macro dword2reg reg,doubleword
  114. {
  115. if doubleword eq
  116.    ; not changes
  117. else
  118.    mov reg,dword doubleword
  119. end if
  120. }
  121.  
  122. macro words2reg reg,hiword,lowword
  123. {
  124. if hiword eq
  125.    if lowword eq
  126.       ; not changes
  127.    else
  128.       if lowword eqtype 12
  129.          and reg,dword 0xffff0000
  130.          add reg,dword lowword
  131.       else
  132.          and reg,dword 0xffff0000
  133.          add reg,dword lowword
  134.       end if
  135.    end if
  136. else
  137.    if lowword eq
  138.       if hiword eqtype 12
  139.          and reg,dword 0x0000ffff
  140.          add reg,dword hiword*65536
  141.       else
  142.          shl reg,16
  143.          add reg,dword hiword
  144.          ror reg,16
  145.       end if
  146.    else
  147.       if lowword eqtype 12 & hiword eqtype 12
  148.          if lowword eq 0 & hiword eq 0
  149.                xor reg,reg
  150.             else
  151.                mov reg,dword hiword*65536+lowword
  152.          end if
  153.       else
  154.          mov reg,dword hiword
  155.          shl reg,16
  156.          add reg,dword lowword
  157.       end if
  158.    end if
  159. end if
  160. }
  161.  
  162.  
  163.  
  164.  
  165. ; DRAW BUTTON with label
  166.  
  167. macro drawlbut x,y,xs,ys,text,id,bcolor,tcolor
  168. {
  169. local asd,lab
  170.     jmp asd
  171. lab db  text                 ;arg label
  172. asd:
  173.     words2reg ebx,x,xs
  174.     words2reg ecx,y,ys
  175.     mov edx,id
  176.     mov esi,bcolor
  177.     mov eax,8
  178.     int 0x40
  179.  
  180.     mov eax,asd-lab          ;calc size
  181.     mov ebx,6
  182.     mul ebx
  183.     mov esi,eax
  184.  
  185.     mov eax,xs
  186.     sub eax,esi
  187.     shr eax,1
  188.     add eax,x
  189.  
  190.     mov edx,ys
  191.     sub edx,7
  192.     shr edx,1
  193.     add edx,y
  194.  
  195.     mov ebx,eax
  196.     shl ebx,16
  197.     add ebx,edx
  198.  
  199.     mov ecx,tcolor             ;arg4 color
  200.     mov edx,lab
  201.     mov esi,asd-lab          ;calc size
  202.     mov eax,4
  203.     int 0x40
  204. }
  205.  
  206.  
  207. macro opendialog redproc,openoff,erroff,path
  208. {
  209. local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc
  210. local run_fileinfo, param
  211. local getmesloop, loox, mred, mkey, mbutton, mgetmes
  212. local dlg_is_work, ready, procinfo
  213. ;
  214. ; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
  215. ; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
  216. ;
  217.  
  218.     cld
  219. ;;    mov esi,path
  220.     mov edi,path
  221.     xor eax,eax
  222.     mov ecx,(1024+16)/4
  223.     rep stosd
  224.  
  225. ;mov [get_loops],0
  226. mov [dlg_pid_get],0
  227.  
  228. ; Get my PID in dec format 4 bytes
  229.     mov eax,9
  230.     mov ebx,procinfo
  231.     mov ecx,-1
  232.     int 0x40
  233.  
  234. ; convert eax bin to param dec
  235.     mov eax,dword [procinfo+30]  ;offset of myPID
  236.     mov edi,param+4-1            ;offset to 4 bytes
  237.     mov ecx,4
  238.     mov ebx,10
  239.     cld
  240. new_d:
  241.     xor edx,edx
  242.     div ebx
  243.     add dl,'0'
  244.     mov [edi],dl
  245.     dec edi
  246.     loop new_d
  247.  
  248. ; wirite 1 byte space to param
  249.     mov [param+4],byte 32    ;Space for next parametr
  250. ; and 1 byte type of dialog to param
  251.     mov [param+5],byte 'O'   ;Get Open dialog (Use 'S' for Save dialog)
  252.  
  253. ;
  254. ; STEP2 prepare IPC area for get messages
  255. ;
  256.  
  257. ; prepare IPC area
  258.     mov [path],dword 0
  259.     mov [path+4],dword 8
  260.  
  261. ; define IPC memory
  262.     mov eax,60
  263.     mov ebx,1        ; define IPC
  264.     mov ecx,path     ; offset of area
  265.     mov edx,1024+16  ; size
  266.     int 0x40
  267.  
  268. ; change wanted events list 7-bit IPC event
  269.     mov eax,40
  270.     mov ebx,01000111b
  271.     int 0x40
  272.  
  273. ;
  274. ; STEP 3 run SYSTEM XTREE with parameters
  275. ;
  276.  
  277.     mov eax,70
  278.     mov ebx,run_fileinfo
  279.     int 0x40
  280.  
  281.     call redproc
  282.  
  283.     mov [get_loops],0
  284. getmesloop:
  285.     mov eax,23
  286.     mov ebx,50     ;0.5 sec
  287.     int 0x40
  288.         dec     eax
  289.         jz      mred
  290.         dec     eax
  291.         jz      mkey
  292.         dec     eax
  293.         jz      mbutton
  294.         cmp     al, 7-3
  295.         jz      mgetmes
  296.  
  297. ; Get number of procces
  298.     mov ebx,procinfo
  299.     mov ecx,-1
  300.     mov eax,9
  301.     int 0x40
  302.     mov ebp,eax
  303.  
  304. loox:
  305.     mov eax,9
  306.     mov ebx,procinfo
  307.     mov ecx,ebp
  308.     int 0x40
  309.     mov eax,[DLGPID]
  310.     cmp [procinfo+30],eax    ;IF Dialog find
  311.     je  dlg_is_work          ;jmp to dlg_is_work
  312.     dec ebp
  313.     jnz loox
  314.  
  315.     jmp erroff
  316.  
  317. dlg_is_work:
  318.     cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated
  319.     je  erroff                 ;TESTODP2 terminated too
  320.  
  321.     cmp [dlg_pid_get],dword 1
  322.     je  getmesloop
  323.     inc [get_loops]
  324.     cmp [get_loops],4  ;2 sec if DLG_PID not get, TESTOP2  terminated
  325.     jae erroff
  326.     jmp getmesloop
  327.  
  328. mred:
  329.     call redproc
  330.     jmp  getmesloop
  331. mkey:
  332.     mov  eax,2
  333.     int  0x40                   ; read (eax=2)
  334.     jmp  getmesloop
  335. mbutton:
  336.     mov  eax,17                 ; get id
  337.     int  0x40
  338.     cmp  ah,1                   ; button id=1 ?
  339.     jne  getmesloop
  340.     mov  eax,-1                 ; close this program
  341.     int  0x40
  342. mgetmes:
  343.  
  344. ; If dlg_pid_get then second message get jmp to still
  345.     cmp  [dlg_pid_get],dword 1
  346.     je   ready
  347.  
  348. ; First message is number of PID SYSXTREE dialog
  349.  
  350. ; convert PID dec to PID bin
  351.     movzx eax,byte [path+16]
  352.     sub eax,48
  353.     imul eax,10
  354.     movzx ebx,byte [path+16+1]
  355.     add eax,ebx
  356.     sub eax,48
  357.     imul eax,10
  358.     movzx ebx,byte [path+16+2]
  359.     add eax,ebx
  360.     sub eax,48
  361.     imul eax,10
  362.     movzx ebx,byte [path+16+3]
  363.     add eax,ebx
  364.     sub eax,48
  365.     mov [DLGPID],eax
  366.  
  367. ; Claear and prepare IPC area for next message
  368.     mov [path],dword 0
  369.     mov [path+4],dword 8
  370.     mov [path+8],dword 0
  371.     mov [path+12],dword 0
  372.     mov [path+16],dword 0
  373.  
  374. ; Set dlg_pid_get for get next message
  375.     mov [dlg_pid_get],dword 1
  376.     call redproc   ;show DLG_PID
  377.     jmp  getmesloop
  378.  
  379. ready:
  380. ;
  381. ; The second message get
  382. ; Second message is 100 bytes path to SAVE/OPEN file
  383. ; shl path string on 16 bytes
  384. ;
  385.     cld
  386.     mov esi,path+16
  387.     mov edi,path
  388.     mov ecx,1024/4
  389.     rep movsd
  390.     mov [edi],byte 0
  391.  
  392.     jmp openoff
  393.  
  394.  
  395. ; DATA AREA
  396. get_loops   dd 0
  397. dlg_pid_get dd 0
  398. DLGPID      dd 0
  399.  
  400. param:
  401.    dd 0    ; My dec PID
  402.    dd 0,0  ; Type of dialog
  403.  
  404. run_fileinfo:
  405.  dd 7
  406.  dd 0
  407.  dd param
  408.  dd 0
  409.  dd 0
  410. ;run_filepath
  411.  db '/RD/1/SYSXTREE',0
  412.  
  413. procinfo:
  414. times 1024 db 0
  415. }
  416.  
  417.  
  418. macro savedialog redproc,openoff,erroff,path
  419. {
  420. local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc
  421. local run_fileinfo, run_filepath, param
  422. local getmesloop, loox, mred, mkey, mbutton, mgetmes
  423. local dlg_is_work, ready, procinfo
  424. ;
  425. ; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
  426. ; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
  427. ;
  428.  
  429.     cld
  430. ;;    mov esi,path
  431.     mov edi,path
  432.     xor eax,eax
  433.     mov ecx,(1024+16)/4
  434.     rep stosd
  435.  
  436. ;mov [get_loops],0
  437. mov [dlg_pid_get],0
  438.  
  439. ; Get my PID in dec format 4 bytes
  440.     mov eax,9
  441.     mov ebx,procinfo
  442.     mov ecx,-1
  443.     int 0x40
  444.  
  445. ; convert eax bin to param dec
  446.     mov eax,dword [procinfo+30]  ;offset of myPID
  447.     mov edi,param+4-1            ;offset to 4 bytes
  448.     mov ecx,4
  449.     mov ebx,10
  450.     cld
  451. new_d:
  452.     xor edx,edx
  453.     div ebx
  454.     add dl,'0'
  455.     mov [edi],dl
  456.     dec edi
  457.     loop new_d
  458.  
  459. ; wirite 1 byte space to param
  460.     mov [param+4],byte 32    ;Space for next parametr
  461. ; and 1 byte type of dialog to param
  462.     mov [param+5],byte 'S'   ;Get Open dialog (Use 'S' for Save dialog)
  463.  
  464. ;
  465. ; STEP2 prepare IPC area for get messages
  466. ;
  467.  
  468. ; prepare IPC area
  469.     mov [path],dword 0
  470.     mov [path+4],dword 8
  471.  
  472. ; define IPC memory
  473.     mov eax,60
  474.     mov ebx,1        ; define IPC
  475.     mov ecx,path     ; offset of area
  476.     mov edx,1024+16  ; size
  477.     int 0x40
  478.  
  479. ; change wanted events list 7-bit IPC event
  480.     mov eax,40
  481.     mov ebx,01000111b
  482.     int 0x40
  483.  
  484. ;
  485. ; STEP 3 run SYSTEM XTREE with parameters
  486. ;
  487.  
  488.     mov eax,70
  489.     mov ebx,run_fileinfo
  490.     int 0x40
  491.  
  492.     call redproc
  493.  
  494.     mov [get_loops],0
  495. getmesloop:
  496.     mov eax,23
  497.     mov ebx,50     ;0.5 sec
  498.     int 0x40
  499.         dec     eax
  500.         jz      mred
  501.         dec     eax
  502.         jz      mkey
  503.         dec     eax
  504.         jz      mbutton
  505.         cmp     al, 7-3
  506.         jz      mgetmes
  507.  
  508. ; Get number of procces
  509.     mov ebx,procinfo
  510.     mov ecx,-1
  511.     mov eax,9
  512.     int 0x40
  513.     mov ebp,eax
  514.  
  515. loox:
  516.     mov eax,9
  517.     mov ebx,procinfo
  518.     mov ecx,ebp
  519.     int 0x40
  520.     mov eax,[DLGPID]
  521.     cmp [procinfo+30],eax    ;IF Dialog find
  522.     je  dlg_is_work          ;jmp to dlg_is_work
  523.     dec ebp
  524.     jnz loox
  525.  
  526.     jmp erroff
  527.  
  528. dlg_is_work:
  529.     cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated
  530.     je  erroff                 ;TESTODP2 terminated too
  531.  
  532.     cmp [dlg_pid_get],dword 1
  533.     je  getmesloop
  534.     inc [get_loops]
  535.     cmp [get_loops],4  ;2 sec if DLG_PID not get, TESTOP2  terminated
  536.     jae erroff
  537.     jmp getmesloop
  538.  
  539. mred:
  540.     call redproc
  541.     jmp  getmesloop
  542. mkey:
  543.     mov  eax,2
  544.     int  0x40                   ; read (eax=2)
  545.     jmp  getmesloop
  546. mbutton:
  547.     mov  eax,17                 ; get id
  548.     int  0x40
  549.     cmp  ah,1                   ; button id=1 ?
  550.     jne  getmesloop
  551.     mov  eax,-1                 ; close this program
  552.     int  0x40
  553. mgetmes:
  554.  
  555. ; If dlg_pid_get then second message get jmp to still
  556.     cmp  [dlg_pid_get],dword 1
  557.     je   ready
  558.  
  559. ; First message is number of PID SYSXTREE dialog
  560.  
  561. ; convert PID dec to PID bin
  562.     movzx eax,byte [path+16]
  563.     sub eax,48
  564.     imul eax,10
  565.     movzx ebx,byte [path+16+1]
  566.     add eax,ebx
  567.     sub eax,48
  568.     imul eax,10
  569.     movzx ebx,byte [path+16+2]
  570.     add eax,ebx
  571.     sub eax,48
  572.     imul eax,10
  573.     movzx ebx,byte [path+16+3]
  574.     add eax,ebx
  575.     sub eax,48
  576.     mov [DLGPID],eax
  577.  
  578. ; Claear and prepare IPC area for next message
  579.     mov [path],dword 0
  580.     mov [path+4],dword 8
  581.     mov [path+8],dword 0
  582.     mov [path+12],dword 0
  583.     mov [path+16],dword 0
  584.  
  585. ; Set dlg_pid_get for get next message
  586.     mov [dlg_pid_get],dword 1
  587.     call redproc   ;show DLG_PID
  588.     jmp  getmesloop
  589.  
  590. ready:
  591. ;
  592. ; The second message get
  593. ; Second message is 100 bytes path to SAVE/OPEN file
  594. ; shl path string on 16 bytes
  595. ;
  596.     cld
  597.     mov esi,path+16
  598.     mov edi,path
  599.     mov ecx,1024/4
  600.     rep movsd
  601.     mov [edi],byte 0
  602.  
  603.     jmp openoff
  604.  
  605.  
  606. ; DATA AREA
  607. get_loops   dd 0
  608. dlg_pid_get dd 0
  609. DLGPID      dd 0
  610.  
  611. param:
  612.    dd 0  ; My dec PID
  613.    dd 0,0  ; Type of dialog
  614.  
  615. run_fileinfo:
  616.  dd 7
  617.  dd 0
  618.  dd param
  619.  dd 0
  620.  dd 0
  621. ;run_filepath:
  622.  db '/RD/1/SYSXTREE',0
  623.  
  624. procinfo:
  625. times 1024 db 0
  626. }
  627.  
  628.  
  629.  
  630.  
  631. ; RANDOM - generate random count (small)
  632. ; (SYNTAX)  RANDOM MaxCount,OutArgument
  633. ; (SAMPLE)  RANDOM 10000,eax
  634. ; ( NOTE )  Maxint<65536 ; use random 65536,eax for more combinations
  635.  
  636. randomuse = 0
  637.  
  638. macro random arg1,arg2
  639. {
  640. local rxproc
  641. randomuse = randomuse + 1
  642.  
  643.       jmp rxproc
  644.  
  645. if defined randomuse & randomuse = 1
  646. randomproc:
  647.       jmp rnj
  648. rsx1 dw 0x4321
  649. rsx2 dw 0x1234
  650. rnj:
  651. ;    mov eax,arg1
  652.     push bx
  653.     push cx
  654.     push dx
  655.     push si
  656.     push di
  657.     mov cx,ax
  658.     mov ax,word ptr rsx1
  659.     mov bx,word ptr rsx2
  660.     mov si,ax
  661.     mov di,bx
  662.     mov dl,ah
  663.     mov ah,al
  664.     mov al,bh
  665.     mov bh,bl
  666.     xor bl,bl
  667.     rcr dl,1
  668.     rcr ax,1
  669.     rcr bx,1
  670.     add bx,di
  671.     adc ax,si
  672.     add bx,0x62e9
  673.     adc ax,0x3619
  674.     mov word ptr rsx1,bx
  675.     mov word ptr rsx2,ax
  676.     xor dx,dx
  677.     cmp ax,0
  678.     je nodiv
  679.     cmp cx,0
  680.     je nodiv
  681.     div cx
  682. nodiv:
  683.     mov ax,dx
  684.     pop di
  685.     pop si
  686.     pop dx
  687.     pop cx
  688.     pop bx
  689.     and eax,0000ffffh
  690. ;    mov arg2,0
  691. ;    mov arg2,eax
  692.     ret
  693. end if
  694.  
  695. rxproc:
  696.     mov eax,arg1
  697.     call randomproc
  698.     mov arg2,eax
  699. }
  700.  
  701. macro scank
  702. {
  703.     mov eax,10
  704.     int 0x40
  705. }
  706.  
  707. macro putpix x,y,color
  708. {
  709.     mov ebx,x
  710.     mov ecx,y
  711.     mov edx,color
  712.     mov eax,1
  713.     int 0x40
  714. }
  715.  
  716. macro puttxt x,y,offs,size,color
  717. {
  718. ;    mov ebx,x
  719. ;    shl ebx,16
  720. ;    add ebx,y
  721.     words2reg ebx,x,y
  722.  
  723.     dword2reg ecx,color
  724.     dword2reg edx,offs
  725.     dword2reg esi,size
  726.  
  727. ;    mov ecx,color
  728. ;    mov edx,offs
  729. ;    mov esi,size
  730.     mov eax,4
  731.     int 0x40
  732. }
  733.  
  734. macro outcount data, x, y, color, numtype
  735. {
  736.     mov ecx,data
  737.     mov ebx,numtype
  738.     mov bl,0
  739. ;    mov edx,x*65536+y
  740.     words2reg edx,x,y
  741.     mov esi,color
  742.     mov eax,47
  743.     int 0x40
  744. }
  745.  
  746. ; SCEVENT - Scan event
  747.  
  748. macro scevent red,key,but
  749. {
  750.     mov eax,11
  751.     int 0x40
  752.     dec eax
  753.     jz  red
  754.     dec eax
  755.     jz  key
  756.     dec eax
  757.     jz  but
  758. }
  759.  
  760. ; WTEVENT - Wait event
  761.  
  762. macro wtevent red,key,but
  763. {
  764.     mov eax,10
  765.     int 0x40
  766.     dec eax
  767.     jz  red
  768.     dec eax
  769.     jz  key
  770.     dec eax
  771.     jz  but
  772. }
  773.  
  774. ; TIMEEVENT - Wite for event with timeout
  775.  
  776. macro timeevent xfps,noevent,red,key,but
  777. {
  778.     mov eax,23
  779.     mov ebx,xfps
  780.     int 0x40
  781.     cmp eax,0
  782.     je  noevent
  783.     dec eax
  784.     jz  red
  785.     dec eax
  786.     jz  key
  787.     dec eax
  788.     jz  but
  789. }
  790.  
  791.  
  792. ; CLOSE - Close program
  793.  
  794. macro close
  795. {
  796.     mov eax,-1
  797.     int 0x40
  798. }
  799.  
  800. ; DELAY - Create delay 1/100 sec
  801. ; (SYNTAX)  Delay time
  802. ; (SAMPLE)  Delay 100   ;delay 2 sec 1/100*200=2 sec
  803.  
  804. macro delay arg1
  805. {
  806.     mov eax,5
  807.     mov ebx,arg1
  808.     int 0x40
  809. }
  810.  
  811. ; WINDOW - Draw window
  812. ; (SYNTAX)  WINDOW Xstart,Ystart,'Text',Color
  813. ; (SAMPLE)  WINDOW 10,10,640+8,480+24,window_Skinned
  814.  
  815. macro window arg1,arg2,arg3,arg4,arg5
  816. {
  817. ;    mov ebx,arg1*65536+arg3
  818. ;    mov ecx,arg2*65536+arg4
  819.     words2reg ebx,arg1,arg3
  820.     words2reg ecx,arg2,arg4
  821.     mov edx,arg5
  822.     mov eax,0
  823.     int 0x40
  824. }
  825.  
  826. macro colorwindow arg1,arg2,arg3,arg4,arg5,arg6,arg7
  827. {
  828. ;    mov ebx,arg1*65536+arg3
  829. ;    mov ecx,arg2*65536+arg4
  830.     words2reg ebx,arg1,arg3
  831.     words2reg ecx,arg2,arg4
  832.     mov edx,arg5
  833.     mov esi,arg6
  834.     mov edi,arg7
  835.     mov eax,0
  836.     int 0x40
  837. }
  838.  
  839.  
  840. ; STARTWD - Start of window draw
  841.  
  842. macro startwd
  843. {
  844.     mov eax,12
  845.     mov ebx,1
  846.     int 0x40
  847. }
  848.  
  849. ; ENDWD - End window draw
  850.  
  851. macro endwd
  852. {
  853.     mov eax,12
  854.     mov ebx,2
  855.     int 0x40
  856. }
  857.  
  858. ; LABEL - Put text to frame
  859. ; (SYNTAX)  LABEL Xstart,Ystart,'Text',Color
  860. ; (SAMPLE)  LABEL 10,12,'Hello World!',cl_Green+font_Big
  861.  
  862. macro putlabel arg1,arg2,arg3,arg4
  863. {
  864. local asd,lab
  865.     jmp asd
  866. lab db  arg3                 ;arg label
  867. asd:
  868. ;    mov ebx,arg1             ;arg1=y arg2=x
  869. ;    shl ebx,16
  870. ;    add ebx,arg2
  871.  
  872.    words2reg ebx,arg1,arg2
  873.  
  874.    dword2reg ecx,arg4
  875.  
  876.     mov edx,lab
  877.     mov esi,asd-lab          ;calc size
  878.     mov eax,4
  879.     int 0x40
  880. }
  881.  
  882. ;Key's
  883. key_Up    equ 178
  884. key_Down   equ 177
  885. key_Right equ 179
  886. key_Left   equ 176
  887. key_Esc   equ 27
  888. key_Space equ 32
  889. key_Enter equ 13
  890. key_Bspace equ 8
  891. key_F1    equ 50
  892. key_F2    equ 51
  893. key_F3    equ 52
  894. key_F4    equ 53
  895. key_F5    equ 54
  896. key_F6    equ 55
  897. key_F7    equ 56
  898. key_F8    equ 57
  899. key_F9    equ 48
  900. key_F10   equ 49
  901. key_F11   equ 68
  902. key_F12   equ 255
  903. key_Home   equ 180
  904. key_End   equ 181
  905. key_PgUp   equ 184
  906. key_PgDown equ 183
  907.  
  908. ;Attributes
  909.  
  910. ;Window Attributes
  911. window_Skinned equ 0x03000000
  912. window_Type2   equ 0x02000000
  913. window_Type1   equ 0x00000000
  914. window_Reserve equ 0x01000000
  915.  
  916. ;Font Attributes
  917. font_Big equ 0x10000000
  918.  
  919. ;Colors
  920. cl_White equ 0x00ffffff
  921. cl_Black equ 0x00000000
  922. cl_Grey   equ 0x00888888
  923. cl_Red    equ 0x00ff0000
  924. cl_Lime   equ 0x0000ff00
  925. cl_Green equ 0x0000af00
  926. cl_Blue   equ 0x000000ff
  927. cl_Purple equ 0x008080ff
  928. cl_Violet equ 0x008040ff
  929. cl_Cyan   equ 0x0040e0ff
  930.