Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

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