Subversion Repositories Kolibri OS

Rev

Rev 7448 | Rev 7460 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; Hot Angles Config ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  4. ; Compile with FASM
  5. ; Version 0.3.7: Oct 14, 2018
  6.  
  7. ; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
  8. ; All rights reserved.
  9. ; Redistribution and use in source and binary forms, with or without modification,
  10. ; are permitted provided that the following conditions are met:
  11. ;    * Redistributions of source code must retain the above copyright notice, this
  12. ;    list of conditions and the following disclaimer.
  13. ;    * Redistributions in binary form must reproduce the above copyright  notice,
  14. ;    this list of conditions and the following disclaimer in the documentation and/or
  15. ;    other materials provided with the distribution.
  16. ;    * Neither the name of the <organization> nor the names of its contributors may
  17. ;    be used to endorse or promote products derived from this software without
  18. ;    specific prior written permission.
  19.  
  20. ; THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  21. ; INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  22. ; PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  23. ; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  24. ; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  25. ; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  26. ; --------------------------------------------------------------------------------------
  27.  
  28. ;P.S. Êîäó òðåáóåòñÿ îïòèìèçàöèÿ è äîðàáîòêà (ñì. òåìó ôîðóìà)
  29. format binary as ""     ; Binary file format without extension
  30. use32                   ; Tell compiler to use 32 bit instructions
  31. org 0                   ; the base address of code, always 0x0
  32.  
  33. ; Çàãîëîâîê èñïîëíÿåìîãî ôàéëà Êîëèáðè ÎÑ
  34. db 'MENUET01'
  35. dd 1
  36. dd START
  37. dd I_END
  38. dd MEM
  39. dd STACKTOP
  40. dd 0, 0
  41.  
  42. ; Íà÷àëî îáëàñòè êîäà
  43. include 'lang.inc'       ;ïîääåðæêà ÿçûêîâ ïðè êîìïèëÿöèè
  44. include '../../macros.inc'
  45. include '../../proc32.inc'
  46. include '../../dll.inc'
  47. include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;êîìïîíåíòû checkBox è editBox
  48. include '../../develop/libraries/box_lib/load_lib.mac'      ;ìàêðîñ äëÿ çàãðóçêè áèáëèîòåê
  49. @use_library
  50.  
  51. KMENUITEM_NORMAL    equ 0
  52. KMENUITEM_SUBMENU   equ 1
  53. KMENUITEM_SEPARATOR equ 2
  54.  
  55. Otstup = 30
  56.  
  57. START:
  58.     call copyKill        ;ïðîñòåéøàÿ çàùèòà îò çàïóñêà âòîðîé êîïèè ïðèëîæåíèÿ
  59.     mcall  68, 11        ;èíèöèàëèçàöèÿ êó÷è
  60.  
  61.     ;mcall 48,3,sc,sizeof.system_colors ;ïîëó÷èòü ñèñòåìíûå öâåòà
  62.     mov  eax,48          ;ïîëó÷èòü ñèñòåìíûå öâåòà
  63.     mov  ebx,3
  64.     mov  ecx, sc
  65.     mov  edx, sizeof.system_colors
  66.     mcall
  67.  
  68.     stdcall dll.Load, @IMPORT
  69.     or      eax, eax
  70.     jnz     exit
  71.  
  72.     mov  eax,40          ;óñòàíîâèòü ìàñêó äëÿ îæèäàåìûõ ñîáûòèé
  73.     mov  ebx,0x27        ;ñèñòåìà áóäåò ðåàãèðîâàòü òîëüêî íà ñîîáùåíèå î ïåðåðèñîâêå, íàæàòà êíîïêà, îïðåäåë¸ííàÿ ðàíåå, ñîáûòèå îò ìûøè (÷òî-òî ñëó÷èëîñü - íàæàòèå íà êíîïêó ìûøè èëè ïåðåìåùåíèå; ñáðàñûâàåòñÿ ïðè ïðî÷òåíèè)
  74.     mcall
  75.  
  76.     load_libraries l_libs_start,load_lib_end ;çàãðóçêà áèáëèîòåê(è)
  77.     stdcall [OpenDialog_Init],OpenDialog_data ;ïîäãîòîâêà äèàëîãà
  78.  
  79.     ;mode menu
  80.     stdcall [kmenu_init], sc    ;kmenu initialisation
  81.     stdcall [ksubmenu_new]
  82.     mov [modeMenu], eax
  83.     stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu0, 110
  84.     stdcall [ksubmenu_add], [modeMenu], eax
  85.     stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu1, 111
  86.     stdcall [ksubmenu_add], [modeMenu], eax
  87.     stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu2, 112
  88.     stdcall [ksubmenu_add], [modeMenu], eax
  89.     stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu3, 113
  90.     stdcall [ksubmenu_add], [modeMenu], eax
  91.         stdcall [kmenuitem_new], KMENUITEM_SUBMENU, valueModeMenu1, [modeMenu]
  92.  
  93.     call  loadConfig     ;çàãðóæàåì êîíôèãóðàöèþ èç ôàéëà, åñëè íåò - òî âûñòàâëÿåì ïàðàìåòðû ïî óìîë÷àíèþ
  94.     call  draw_window    ;îòðèñîâàòü îêíî ïðèëîæåíèÿ
  95.  
  96. ; Îáðàáîòêà öèêëà ñîáûòèé
  97. event_wait:
  98.     mov     eax, 10      ; function 10 : wait until event
  99.     mcall                ; event type is returned in eax
  100.  
  101.     cmp     eax, 1       ; Event redraw request ?
  102.     je      red          ; Expl.: there has been activity on screen and
  103.                          ; parts of the applications has to be redrawn.
  104.  
  105.     cmp     eax, 2       ; Event key in buffer ?
  106.     je      key          ; Expl.: User has pressed a key while the
  107.                          ; app is at the top of the window stack.
  108.  
  109.     cmp     eax, 3       ; Event button in buffer ?
  110.     je      button       ; Expl.: User has pressed one of the
  111.                          ; applications buttons.
  112.  
  113.     invoke  edit_box_mouse, editLU   ;ïðîâåðêà ñîáûòèé ìûøè äëÿ editBox'îâ
  114.     invoke  edit_box_mouse, editLD
  115.     invoke  edit_box_mouse, editRU
  116.     invoke  edit_box_mouse, editRD
  117.     ;stdcall [kmainmenu_dispatch_cursorevent], [modeMenu] ;ïðîâåðêà ìûøè äëÿ êîìáîáîêñà
  118.     invoke  edit_box_mouse, editRadius
  119.  
  120.     jmp     event_wait
  121.  
  122.  
  123. red:                     ;îáðàáîòêà ñîáûòèÿ ïåðåðèñîâêè îêíà
  124.    call    draw_window
  125.    jmp     event_wait
  126.  
  127. key:                                    ; Keypress event handler
  128.         mov     eax, 2                  ; The key is returned in ah. The key must be
  129.         mcall                           ; read and cleared from the system queue.
  130.  
  131.         ;push eax
  132.         invoke  edit_box_key, editLU
  133.         invoke  edit_box_key, editLD
  134.         invoke  edit_box_key, editRU
  135.         invoke  edit_box_key, editRD
  136.         invoke  edit_box_key, editRadius
  137.         ;pop eax
  138.  
  139.         cmp eax, 1
  140.         je event_wait ;.end ;@f
  141.         cmp word[hkSymbol], 0
  142.         jne event_wait ;.end ;@f
  143.         cmp al, 0
  144.         jne .next
  145.         mov byte[hkSymbol], ah
  146.  
  147.         push eax ecx esi            ;ñîõðàíÿåì ñêàíêîä êëàâèøè
  148.         shr eax, 16
  149.         mov byte[keyscan], al
  150.         mov ecx, 0
  151.         mov cl, al ;byte[keyscan]
  152.         mov esi, keystr.data
  153.         call IntToStr
  154.  
  155.         ;ñ÷èòàåì ïîëó÷åííûé ðàçìåð ñòðîêè
  156.         xor ecx, ecx
  157.         mov esi, keystr.data
  158.        @@:
  159.         cmp byte[esi], 0
  160.         je @f
  161.         inc esi
  162.         inc ecx
  163.         ;cmp ecx, 4
  164.         ;je @f
  165.         jmp @b
  166.        @@:
  167.         ;è ñîõðàíÿåì åãî
  168.         mov dword[keystr.size], ecx
  169.  
  170. ;        cmp ecx, 3
  171. ;        jbe @f
  172. ;        mcall -1
  173. ;      @@:
  174.  
  175.         pop esi ecx eax
  176.  
  177.         jmp red
  178. .next:
  179.         ;cmp al, 2
  180.         ;jne @f
  181.         ;cmp ah, 0
  182.         ;jne @f
  183.         ;ñ÷èòûâàåì óïðàâëÿþùèå êëàâèøè
  184.         ;shr eax, 16
  185.         ;bt eax, 0   ;left shift
  186.         ;jne @f
  187.         ;mov byte[hkSymbol], 2
  188.         ;jmp red
  189. @@:
  190. ;.end:
  191.         jmp     event_wait              ; Just read the key, ignore it and jump to event_wait.
  192.  
  193. button:                                 ; Buttonpress event handler
  194.     mov     eax,17                  ; The button number defined in window_draw
  195.     mcall                           ; is returned to ah.
  196.  
  197.     cmp     ah,1                    ; button id=1 ?
  198.     jne     noclose
  199. exit:
  200.     mov     eax,-1                  ; Function -1 : close this program
  201.     mcall
  202. noclose:
  203.     cmp  ah, 2         ;êíîïêà "Ïðèìåíèòü"
  204.     jne  @f ;butend
  205.     call applyButton   ;âûçîâ íàøåãî îáðàáîò÷èêà íàæàòèÿ êíîïêè
  206.     jmp event_wait
  207. @@:
  208.     cmp ah, 4
  209.     jne @f
  210.     mov byte[editID], 4
  211.     call but_open_dlg
  212.     jmp  event_wait
  213. @@:
  214.     cmp ah, 5
  215.     jne @f
  216.     mov byte[editID], 5
  217.     call but_open_dlg
  218.     jmp  event_wait
  219. @@:
  220.     cmp ah, 6
  221.     jne @f
  222.     mov byte[editID], 6
  223.     call but_open_dlg
  224.     jmp  event_wait
  225. @@:
  226.     cmp ah, 7
  227.     jne @f
  228.     mov byte[editID], 7
  229.     call but_open_dlg
  230.     jmp  event_wait
  231. @@:
  232.     cmp ah, 8
  233.     jne @f
  234.     push eax ebx ecx
  235.     mcall 9, pi, -1 ;get window coord
  236.  
  237.     mov eax, dword[pi+34]
  238.     add eax, buttonModeX ;+ 5
  239.     mov word[coordModeMenu.x], ax
  240.  
  241.     mov eax, dword[pi+38]
  242.     add eax, buttonModeY + 13 ;17
  243.     mov word[coordModeMenu.y], ax
  244.  
  245.     stdcall [ksubmenu_draw], [modeMenu], coordModeMenu
  246.     pop ecx ebx eax
  247.     jmp  event_wait
  248. @@:
  249.     cmp ah, 9
  250.     jne @f
  251.     mov word[hkSymbol], 0
  252.     jmp red ;event_wait
  253. @@:
  254.     cmp ah, 110
  255.     jne @f
  256.     mov byte[mode], 48 ;'0'
  257.     jmp  event_wait
  258. @@:
  259.     cmp ah, 111
  260.     jne @f
  261.     mov byte[mode], 49 ;'1'
  262.     jmp  event_wait
  263. @@:
  264.     cmp ah, 112
  265.     jne @f
  266.     mov byte[mode], 50 ;'2'
  267.     jmp  event_wait
  268. @@:
  269.     cmp ah, 113
  270.     jne @f
  271.     mov byte[mode], 51 ;'3'
  272.     jmp  event_wait
  273. @@:
  274. butend:
  275.     jmp  event_wait    ;this is for ignored events, useful at development
  276.  
  277.  
  278.  
  279. ;èìÿ êîíôèãóðàöèîííîãî ôàéëà
  280. fileName: db 'SETTINGS/HOTANGLES.CFG', 0
  281.  
  282. ;ñòðóêòóðà äëÿ ñîçäàíèÿ/ïåðåçàïèñè ôàéëà
  283. createFile:
  284.   .func     dd 2    ;íîìåð ïîäôóíêöèè
  285.   .re       dd 0, 0 ;çàðåçåðâèðîâàíî
  286.   .size     dd 0    ;ñêîëüêî áàéò ïèñàòü
  287.   .data_adr dd 0    ;óêàçàòåëü íà äàííûå
  288.   .path     db 0
  289.   .path_adr dd fileName    ;ïóòü
  290.  
  291. ;ñòðîêà ïàðàìåòðîâ ïî óìîë÷àíèþ è å¸ ðàçìåð
  292. defaultDataForConfig db 121,13,10,'/rd/1/HACONFIG',13,10,'/rd/1/HACONFIG',13,10,'/rd/1/HACONFIG',13,10,'/rd/1/HACONFIG',13,10,'Space',13,10,'57',13,10,'10',13,10,'s',13,10
  293. defaultDataSize = 85 ;48+19+4
  294.  
  295.  
  296. copyParam:  ;êîïèðóåò ïàðàìåòð(êîìàíäó çàïóñêà) â áóôåð (ñì. äàëüøå)
  297.    push esi ebx ecx
  298.    mov ecx, dword[ebx] ;÷èòàåì ðàçìåð ñòðîêè
  299.  
  300.    cmp ecx, 0          ;ïóñòà ëè ñòðîêà?
  301.    jne copyParam.copy  ;åñëè íåò, òî ïåðåõîäèì ê êîïèðîâàíèþ ñîäåðæèìîãî ñòðîêè (ê  öèêëó)
  302.  
  303.    mov byte[eax], '-'  ;åñëè æå ïóñòî, òî çàìåíÿåì ñèìâîëîì ìèíóñ '-'
  304.    inc eax
  305.    ;jmp copyParam.copyEnd ;è âûõîäèì
  306.    ;äàëåå â íà÷àëå öèêëà ïðîèçîéä¸ò ñðàâíåíèå è âûõîä
  307.  
  308. .copy:  ;êîïèðóåì ñèìâîëû
  309.    cmp ecx, 0
  310.    je copyParam.copyEnd
  311.    mov bl, byte[esi]
  312.    mov byte[eax], bl
  313.    dec ecx
  314.    inc eax
  315.    inc esi
  316.    jmp copyParam.copy
  317. .copyEnd:
  318.    pop ecx ebx esi
  319.    ret
  320.  
  321.  
  322. addPerenos:  ;äîáàâëÿåò ïåðåíîñ ñòðîêè â áóôåð
  323.    mov byte[eax], 13
  324.    inc eax
  325.    mov byte[eax], 10
  326.    inc eax
  327.    ret
  328.  
  329. ;îáðàáîò÷èê êíîïêè "Ïðèìåíèòü"
  330. applyButton:
  331.     push eax ebx ecx
  332.         ;mov dword[createFile.data_adr], defaultDataForConfig
  333.         ;mov dword[createFile.size], defaultDataSize
  334.  
  335.         ;âû÷èñëèì ðàçìåð ôàéëà êîíôèãóðàöèè â áàéòàõ
  336.         mov ecx, 9*2+1 ;1 áàéò íà ñîñòîÿíèå àêòèâíîñòè è 9 ïàð ïåðåíîñîâ ñòðîê (ñèìâîëû 13, 10)
  337.         add ecx, dword[editLU.size] ;ïëþñ ðàçìåð êàæäîé ñòðîêè â áàéòàõ
  338.         add ecx, dword[editLD.size]
  339.         add ecx, dword[editRU.size]
  340.         add ecx, dword[editRD.size] ;dataBuffer.size4]
  341.         add ecx, dword[editRadius.size]
  342.         add ecx, dword[hkSize] ;ðàçìåð èìåíè àêòèâàöèîííîé êíîïêè
  343.         add ecx, dword[keystr.size] ;ðàçìåð ñêàíêîäà àêòèâàöèîííîé êíîïêè
  344.         inc ecx ; åù¸ 1 áàéò äëÿ õðàíåíèÿ ðàçìåðà ýëåìåíòîâ
  345.         ;mov ecx, 85
  346.  
  347.         cmp dword[keystr.size], 3
  348.         jbe @f
  349.         ;mcall -1
  350.       @@:
  351.  
  352.         ;åñëè çàäàíû ïóñòûå ñòðîêè, òî ìû àâòîìàòè÷åñêè äîáàâëÿåì çíàê ìèíóñ, çíà÷èò ðàçìåð +1 áàéò
  353.         cmp dword[editLU.size], 0
  354.         jne @f
  355.         inc ecx
  356. @@:
  357.         cmp dword[editLD.size], 0
  358.         jne @f
  359.         inc ecx
  360. @@:
  361.         cmp dword[editRU.size], 0
  362.         jne @f
  363.         inc ecx
  364. @@:
  365.         cmp dword[editRD.size], 0
  366.         jne @f
  367.         inc ecx
  368. @@:
  369.  
  370.         ;òåïåðü ðàçìåð ôàéëà êîíôèãóðàöèè â ecx
  371.         mov dword[createFile.size], ecx ;ïîëîæèì ðàçìåð áàéò â ñòðóêòóðó ñîçäàíèÿ/ïåðåçàïèñè ôàéëà
  372.         mcall 68, 12, ecx ;âûäåëÿåì áëîê ïàìÿòè ïîä áóôåð ñîäåðæèìîãî
  373.         mov dword[createFile.data_adr], eax ;ñîõðàíÿåì àäðåñ áóôåðà â ñòðóêòóðó
  374.  
  375.         ;çàïîëíèì áóôåð ñîäåðæèìîãî:
  376.         ;cmp byte[mode], 0
  377.         ;jne @f
  378.         ;@@:
  379.  
  380.         push ebx    ;ñîõðàíÿåì âûáðàííûé ðåæèì
  381.         mov bl, byte[mode]
  382.         mov byte[eax], bl
  383.         pop ebx
  384.  
  385.         inc eax
  386.         call addPerenos
  387.  
  388.         push esi ebx
  389.         call UpdateEditsSizes ;îáíîâèòü ðàçìåðû òåêñòà â edit'àõ
  390.  
  391.         mov esi, dataBuffer.1     ;editLU.text
  392.         mov ebx, dataBuffer.size1 ;editLU.size
  393.         call copyParam
  394.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  395.  
  396.         mov esi, dataBuffer.2
  397.         mov ebx, dataBuffer.size2
  398.         call copyParam
  399.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  400.  
  401.         mov esi, dataBuffer.3
  402.         mov ebx, dataBuffer.size3
  403.         call copyParam
  404.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  405.  
  406.         mov esi, dataBuffer.4
  407.         mov ebx, dataBuffer.size4
  408.         call copyParam
  409.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  410.  
  411.         ;ñîõðàíÿåì êíîïêó àêòèâàöèè
  412.         call saveKey
  413.         call addPerenos
  414.  
  415.         ;ñîõðàíÿåì ñêàíêîä êíîïêè
  416.         mov esi, keystr.data    ;çàïèñûâàåì ñòðîêó keystr â ôàéë
  417.         xor ebx, ebx
  418.       @@:
  419.         cmp byte[esi], 0
  420.         je @f
  421.         mov bl, byte[esi]
  422.         mov byte[eax], bl
  423.         inc eax
  424.         inc esi
  425.         cmp esi, keystr.size-1
  426.         jae @f
  427.         jmp @b
  428.       @@:
  429.         call addPerenos
  430.  
  431.         ;ñîõðàíÿåì ðàäèóñ
  432.         ;!!! åñëè ðàäèóñ îñòàâëåí ïóñòûì, òî íóæíî ñîõðàíÿòü çíà÷åíèå ïî óìîë÷àíèþ (ñåé÷àñ ïèøåòñÿ '-')
  433.         mov esi, radiusBuffer.data
  434.         mov ebx, editRadius.size ;radiusBuffer.size
  435.         call copyParam
  436.         call addPerenos
  437.  
  438.         ;äîáàâëÿåì ðàçìåð ýëåìåíòîâ
  439.         push ebx    ;ñîõðàíÿåì âûáðàííûé ðåæèì
  440.         mov bl, byte[sizeStyle]
  441.         mov byte[eax], bl
  442.         pop ebx
  443.         inc eax
  444.         call addPerenos
  445.  
  446.         pop ebx esi
  447.  
  448.  
  449.     mov ebx, createFile
  450.     mcall 70
  451.         cmp eax, 0
  452.         je .end
  453.         ;èíà÷å çäåñü íóæíî âûâåñòè îêíî ñ îøèáêîé !!!
  454. .end:
  455.         mcall 68, 13, dword[createFile.data_adr]  ;îñâîáîæäàåì ïàìÿòü ïîä áóôåð
  456.         call finishHotAnglesApp ;çàâåðøàåì ðàáîòó âñåõ êîïèé ñåðâèñà @HOTANGLES
  457.         call loadConfig         ;ïåðåçàãðóæàåì ôàéë êîíôèãà
  458.         call draw_window        ;ïåðåðèñîâûâàåì îêíî
  459.         call startHotAnglesApp  ;ïåðåçàïóñêàåì @HOTANGLES
  460.         pop ecx ebx eax
  461.     ret
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468. compareBytes2:
  469.    push edi esi ecx ebx
  470.    xor eax, eax
  471.    mov ecx, 10  ;max ðàçìåð ñòðîê 11
  472. @@:
  473.    mov bl, byte[edi]
  474.    cmp bl, byte[esi]
  475.    jne compareBytes.no
  476.    inc edi
  477.    inc esi
  478.    cmp ecx, 0
  479.    je @f
  480.    dec ecx
  481.    jmp @b
  482. .no:
  483.    mov eax, 1
  484. @@:
  485.    pop ebx ecx esi edi
  486.    ret
  487.  
  488.  
  489. finishHotAnglesApp:
  490.    ;íàõîäèì âñå êîïèè ïðèëîæåíèÿ ïî èìåíè è çàâåðøàåì èõ
  491.    push eax ebx ecx esi edi
  492.    ;óêàçàòåëè, êîòîðûå íèêîãäà íå ìåíÿþòñÿ:
  493.    mov esi, startAppData.file_name       ;ïåðâàÿ ñòðîêà - èñêîìîå èìÿ ïðèëîæåíèÿ
  494.    mov edi, buf            ;âòîðàÿ ñòðîêà - èìÿ òåêóùåãî ñëîòà
  495.    add edi, 10
  496.  
  497.    mov ecx, 1
  498. @@:
  499.    mcall 9, buf, ecx              ;ïîëó÷àåì äàííûå î÷åðåäíîãî ñëîòà
  500.    mov dword[slotMax], eax
  501.  
  502.    call compareBytes2 ;ñðàâíèâàåì èìÿ
  503.    cmp eax, 0
  504.    jne finishHotAnglesApp.next   ;åñëè íå ñîâïàëî, òî ïåðåõîäèì íà ñëåäóþùèé ñëîò
  505.  
  506.    mcall 18, 2, ecx               ;èíà÷å çàâåðøàåì ñëîò
  507. .next:
  508.    inc  ecx
  509.    cmp ecx, dword[slotMax]
  510.    ja @f
  511.    jmp @b
  512. @@:
  513.    pop edi esi ecx ebx eax
  514.    ret
  515.  
  516. startHotAnglesApp:
  517.    ;çàïóñêàåì ïðèëîæåíèå çàíîâî
  518.    push eax ebx
  519.    mcall 70, startAppData
  520.    cmp eax, 0
  521.    ja @f       ;åñëè eax>0, òî óñïåøíî çàïóùåíî
  522.    ;!!! èíà÷å òóò ïå÷àòàåì îøèáêó
  523. @@:
  524.    pop ebx eax
  525.    ret
  526.  
  527. startAppData:
  528.     .subfunction dd   7
  529.     .flags       dd   0
  530.     .param       dd   0
  531.     .rezerv      dd   0, 0
  532.     .full_name   db   '/rd/1/'
  533.     .file_name   db   '@HOTANGLES', 0
  534.  
  535. UpdateEditsSizes:
  536.    push eax
  537.    mov eax, dword[editLU.size]
  538.    mov dword[dataBuffer.size1], eax
  539.  
  540.    mov eax, dword[editLD.size]
  541.    mov dword[dataBuffer.size2], eax
  542.  
  543.    mov eax, dword[editRU.size]
  544.    mov dword[dataBuffer.size3], eax
  545.  
  546.    mov eax, dword[editRD.size]
  547.    mov dword[dataBuffer.size4], eax
  548.  
  549.    mov eax, dword[editRadius.size]
  550.    mov dword[radiusBuffer.size], eax
  551.  
  552.    pop eax
  553.    ret
  554.  
  555. fileAdr dd 0
  556.  
  557. loadConfig:
  558.    push eax ebx ecx edx
  559.    mcall 68, 27, fileName   ;çàãðóæàåì êîíôèãóðàöèîííûé ôàéë â ÎÇÓ
  560.    mov dword[fileAdr], eax  ;ñîõðàíÿåì àäðåñ áëîêà ïàìÿòè ôàéëà
  561.    cmp eax, 0
  562.    je loadConfig.default       ;åñëè ôàéëà êîíôèãóðàöèè íåò, òî ñòàâèì íàñòðîéêè ïî óìîë÷àíèþ
  563.    ;èíà÷å äàííûå çàãðóæåíû â ÎÇÓ, ðàçìåð â edx
  564.    cmp edx, 0               ;åñëè ôàéë ïóñò, â í¸ì íåò äàííûõ, òî ñòàâèì íàñòðîéêè ïî óìîë÷àíèþ
  565.    je loadConfig.default
  566. .start:
  567.    add edx, eax             ;êëàä¸ì â edx - àäðåñ êîíöà êîíôèã.äàííûõ
  568.  
  569. .chStart:
  570.  
  571.    push ebx
  572.    mov bl, byte[eax]
  573.    cmp bl, 48          ; åñëè çíà÷åíèå âûõîäèò çà äîïóñòèìûå ïðåäåëû, òî ïðîâåðÿåì íà 'n' (äëÿ ñîâìåñòèìîñòè)
  574.    jb loadConfig.checkN
  575.    cmp bl, 51
  576.    ja loadConfig.checkN
  577.  
  578.    mov byte[mode], bl  ;èíà÷å óñòàíàâëèâàåì ýòîò ðåæèì êàê åñòü
  579.    jmp loadConfig.modeEnd   ;è èä¸ì äàëüøå
  580. .checkN:
  581.    cmp bl, 'n'             ;åñëè n - òî ðåæèì "îòêëþ÷åíî"
  582.    jne @f
  583.    mov byte[mode], 48 ;'0'
  584.    jmp loadConfig.modeEnd
  585. @@:
  586.    cmp bl, 'y'             ;åñëè y - òî êëàññè÷åñêèé ðåæèì
  587.    jne @f
  588.    mov byte[mode], 49 ;'1'
  589.    jmp loadConfig.modeEnd
  590. @@:
  591.    mov byte[mode], 48 ;'0' èíà÷å ïî óìîë÷àíèþ îòêëþ÷åíî
  592.    ;mov byte[mode], 49 ;'1' èíà÷å ïî óìîë÷àíèþ âêëþ÷¸í êëàññè÷åñêèé ðåæèì ðàáîòû
  593. .modeEnd:
  594.    pop ebx
  595.    ;jmp loadConfig.end   ;êîìàíäà äëÿ óäîáñòâà îòëàäêè è ïîèñêà îøèáîê
  596.  
  597.    ;êîïèðóåì ñîäåðæèìîå ñòðîê â áóôåð
  598.    push edi esi ecx ebx eax
  599.    ;èíèöèàëèçèðóåì óêàçàòåëè íà àäðåñà áóôåðà ñòðîêè è å¸ ðàçìåðà
  600.    mov edi, dataBuffer.1
  601.    mov esi, dataBuffer.size1
  602.    ;ecx - ñ÷¸ò÷èê áàéò â ñòðîêå
  603. .block:
  604.    xor ecx, ecx ;îáíóëÿåì ñ÷¸ò÷èê
  605.    inc eax
  606.    cmp byte[eax], 10         ;åñëè î÷åðåäíîé êîä ñèìâîëà 10 èëè 13, òî ïðîïóñêàåì ñèìâîëû
  607.    je loadConfig.block       ;äî ïåðâîãî îòëè÷íîãî îò íèõ
  608.    cmp byte[eax], 13
  609.    je loadConfig.block
  610.  
  611.    ; ñèìâîë îòëè÷åí îò ïåðåíîñà ñòðîêè è âîçâðàòà êàðåòêè - íà÷èíàåì êîïèðîâàòü îòñþäà â áóôåð
  612.    mov bl, byte[eax]
  613.    mov byte[edi], bl
  614.    inc edi
  615.    inc eax
  616.    inc ecx ;óâåëè÷èâàåì ñ÷¸ò÷èê ñèìâîëîâ â ñòðîêå
  617.  
  618.    ;èä¸ì äî êîíöà ýòîé ñòðîêè: ïîêà íå âñòðåòèì î÷åðåäíîé 10, 13, 0 èëè file end
  619. .while:     ;è êîïèðóåì âñ¸ â áóôåð
  620.    cmp eax, edx           ;ïðîâåðÿåì çàêîí÷èëñÿ ëè ôàéë, à êîíöà ñòðîêè íå áûëî !!!
  621.    ja loadConfig.ura
  622.    cmp byte[eax], 10
  623.    je loadConfig.ura
  624.    cmp byte[eax], 0
  625.    je loadConfig.ura
  626.    cmp byte[eax], 13
  627.    je loadConfig.ura
  628.  
  629.    mov bl, byte[eax]
  630.    mov byte[edi], bl
  631.    inc edi
  632.    inc eax
  633.    inc ecx
  634.    cmp ecx, 511
  635.    jae loadConfig.ura
  636.    jmp loadConfig.while
  637. .ura:
  638.    mov byte[edi], 0      ;êëàä¸ì çàâåðøàþùèé 0 â ñòðîêó
  639.    mov dword[esi], ecx   ;ñîõðàíÿåì ðàçìåð ñòðîêè
  640.    add esi, 4            ;ïåðåõîäèì íà ðàçìåð ñëåäóþùåãî áóôåðà
  641.    sub edi, ecx          ;ïåðåõîäèì íà ñëåäóþùèé áóôåð
  642.    add edi, 512
  643.    ;xor ecx, ecx          ;îáíóëÿåì ðàçìåð ñòðîêè
  644.  
  645.    cmp edi, dataBuffer.size1 ;åñëè ýòî áûë ïîñëåäíèé áóôåð (è ìû âûøëè çà àäðåñà ðàçìåðîâ áóôåðîâ), òî âûõîäèì
  646.    jb loadConfig.block
  647.  
  648.    call readOptKey        ;ñ÷èòûâàåì êëàâèøó
  649.    call gotoEndString
  650.  
  651.    ;ñ÷èòûâàåì ñêàíêîä êëàâèøè
  652.    call readScanKey
  653.    call gotoEndString
  654.  
  655.    call readOptRadius     ;ñ÷èòûâàåì çíà÷åíèå ðàäèóñà äëÿ mode 3
  656.    call gotoEndString
  657.    call readOptSize       ;ñ÷èòûâàåì ðàçìåð ýëåìåíòîâ
  658.    call gotoEndString
  659.  
  660.    pop eax ebx ecx esi edi
  661.  
  662.    jmp loadConfig.end
  663. .default:
  664.    mov eax, defaultDataForConfig
  665.    mov edx, defaultDataSize
  666.    jmp loadConfig.start
  667. .end:
  668.    mov ecx, dword[fileAdr]    ;åñëè ôàéë áûë çàãðóæåí, òî
  669.    cmp ecx, 0
  670.    je @f
  671.    mcall 68, 13, ecx  ;âûãðóæàåì ôàéë èç ïàìÿòè
  672. @@:
  673.    call updateParams ;ïðèìåíÿåì íàñòðîéêè êàæäîãî áóôåðà
  674.    call setMySize    ;ïðèìåíÿåì íàñòðîéêè ðàçìåðà ýëåìåíòîâ
  675.    pop edx ecx ebx eax
  676.    ret
  677.  
  678.  
  679. setMySize:
  680.    push eax
  681.    ;âûñòàâëÿåì mysize â çàâèñèìîñòè îò çíà÷åíèÿ sizeStyle
  682.    cmp byte[sizeStyle], '0'
  683.    jb @f
  684.    cmp byte[sizeStyle], '7'
  685.    ja @f
  686.    mov eax, 0                  ;åñëè çíà÷åíèå ðàçìåðà çàäàíî, òî åãî è âûñòàâëÿåì
  687.    mov al, byte[sizeStyle]
  688.    sub al, '0'
  689.    jmp .end
  690. @@:
  691.    cmp byte[sizeStyle], 'a'
  692.    je .auto
  693.    ;cmp byte[sizeStyle], 's'
  694.    ;je .system
  695. .system:     ;èíà÷å çíà÷åíèå ïî óìîë÷àíèþ: s - ñèñòåìíàÿ
  696. ;   push ebx ecx
  697.    ;!!!
  698. ;   mov eax, 9
  699. ;   mcall 48, 11   ;ïîëó÷àåì ñèñòåìíûé ðàçìåð øðèôòà
  700.    ;eax - âûñîòà øðèôòà â ïèêñåëÿõ
  701. ;   mov ecx, eax
  702. ;   push eax
  703. ;   mcall 48, 12, ecx  ;ïðèìåíÿåì ðàçìåð øðèôòà
  704. ;   pop eax
  705. ;   pop ecx ebx
  706.    ;temp fix -  äåëèì íà òåêóùèé ðàçìåð øðèôòà and -1
  707. ;   push ebx edx
  708. ;   mov ebx, 9
  709.    ;div ebx
  710. ;   pop edx ebx
  711.    ;cmp eax, 0
  712.    ;je .end
  713.    ;dec eax
  714.    mov eax, 0 ;xor eax, eax ;test temp
  715.    jmp .end
  716. .auto:       ;a - âûñòàâëÿåì â çàâèñèìîñòè îò ðàçðåøåíèÿ ýêðàíà
  717.    ;!!!
  718.    mcall 14
  719.    push ebx
  720.    xor ebx, ebx
  721.    mov bx, ax
  722.    shr eax, 16
  723.    cmp ax, bx       ;ïîëó÷àåì áîëüøèé ðàçìåð ñòîðîíû
  724.    jae .a
  725.    mov ax, bx
  726. .a:
  727.    pop ebx
  728.    cmp ax, 1919     ;ðàçìåðû ïîëó÷åííûå âûøå îò 0 è íà 1 ìåíüøå
  729.    jb .size0
  730.    cmp ax, 2047
  731.    jb .size1
  732.    cmp ax, 4095
  733.    jb .size2
  734.    cmp ax, 8191
  735.    jb .size3
  736.  
  737.    jmp .size4
  738.  
  739. .size0:
  740.    mov eax, 0
  741.    jmp .end
  742. .size1:
  743.    mov eax, 1
  744.    jmp .end
  745. .size2:
  746.    mov eax, 2
  747.    jmp .end
  748. .size3:
  749.    mov eax, 3
  750.    jmp .end
  751. .size4:
  752.    mov eax, 4
  753.    jmp .end
  754. .size5:
  755.    mov eax, 5
  756.    jmp .end
  757. .size6:
  758.    mov eax, 6
  759.    jmp .end
  760. .size7:
  761.    mov eax, 7
  762.    jmp .end
  763.  
  764. ;.default:
  765. ;   mov eax, 1
  766. .end:
  767.    mov byte[mysize], al ;mov dword[mysize], eax
  768.    pop eax
  769.    ret
  770.  
  771.  
  772. readScanKey:
  773.    ;ïðîïóñêàåì ïåðåíîñû ñòðîê â íà÷àëå
  774.    cmp eax, edx  ;åñëè ôàéë çàêîí÷èëñÿ, òî
  775.    ja .default   ;íàñòðîéêè ïî óìîë÷àíèþ
  776.    cmp byte[eax], 10
  777.    je @f
  778.    cmp byte[eax], 0
  779.    je @f
  780.    cmp byte[eax], 13
  781.    je @f
  782.  
  783.    push ecx ebx esi
  784.    mov ecx, 0 ;xor ecx, ecx
  785.    mov esi, keystr.data
  786. .copy:
  787.    mov bl, byte[eax]
  788.    cmp bl, 0
  789.    je .copyEnd
  790.    cmp bl, 10
  791.    je .copyEnd
  792.    cmp bl, 13
  793.    je .copyEnd
  794.    cmp esi, keystr.size-1
  795.    jae .copyEnd
  796.    mov byte[esi], bl
  797.    inc esi
  798.    inc eax
  799.    inc ecx
  800.    jmp .copy
  801. .copyEnd:
  802.    mov byte[esi], 0
  803.    mov dword[keystr.size], ecx
  804.    pop esi ebx ecx
  805.  
  806.    jmp .end
  807. @@:
  808.    inc eax
  809.    jmp readScanKey
  810. .default:
  811.    mov byte[keyscan], 57
  812.    mov word[keystr.data], '57'
  813.    mov byte[keystr.data+2], 0
  814.    mov dword[keystr.size], 2
  815. .end:
  816.    ret
  817.  
  818. readOptKey:  ;1;3;4;5 - space or shift
  819.    ;ïðîïóñêàåì ïåðåíîñû ñòðîê â íà÷àëå
  820.    cmp eax, edx  ;åñëè ôàéë çàêîí÷èëñÿ, òî
  821.    ja .default   ;íàñòðîéêè ïî óìîë÷àíèþ
  822.    cmp byte[eax], 10
  823.    je @f
  824.    cmp byte[eax], 0
  825.    je @f
  826.    cmp byte[eax], 13
  827.    je @f
  828.    ;èíà÷å ÷èòàåì êëàâèøó è âûõîäèì
  829.    cmp dword[eax], 'Ctrl'
  830.    jne .notCtrl
  831.    mov byte[hkSymbol], 3
  832.    mov dword[hkSize], 4
  833.    jmp .end
  834. .notCtrl:
  835.    cmp dword[eax], 'Shif'
  836.    jne .notShift
  837.    mov byte[hkSymbol], 2
  838.    mov dword[hkSize], 5
  839.    jmp .end
  840. .notShift:
  841.    cmp dword[eax], 'Spac'
  842.    jne .notSpace
  843.    mov byte[hkSymbol], 32
  844.    mov dword[hkSize], 5
  845.    jmp .end
  846. .notSpace:
  847.    cmp word[eax], 'Al'
  848.    jne .notAlt
  849.    mov byte[hkSymbol], 1
  850.    mov dword[hkSize], 3
  851.    jmp .end
  852. .notAlt:
  853.    ;óáåäèìñÿ, ÷òî òàì 1 ñèìâîë, à íå ñòðîêà
  854.    cmp byte[eax+1], 10
  855.    je .oneSymb
  856.    cmp byte[eax+1], 0
  857.    je .oneSymb
  858.    cmp byte[eax+1], 13
  859.    je .oneSymb
  860.    jmp .default
  861. .oneSymb:
  862.    ;ïðîâåðÿåì, ÷òî ñèìâîë ðàçðåø¸ííûé  !!!
  863.  
  864.    ;äîáàâëÿåì ñèìâîë êàê åñòü
  865.    push ebx
  866.    ;xor ebx, ebx
  867.    mov bl, byte[eax]
  868.    mov byte[hkSymbol], bl
  869.    mov dword[hkSize], 1
  870.    pop ebx
  871.  
  872.    jmp .end
  873. @@:
  874.    inc eax
  875.    jmp readOptKey
  876.  
  877. .default:
  878.    mov byte[hkSymbol], 32
  879.    mov dword[hkSize], 5
  880. .end:
  881.    mov byte[hkSymbol+1], 0
  882.    ret
  883.  
  884. ;ïðîõîäèì äî êîíöà òåêóùåé ñòðîêè
  885. gotoEndString:
  886.    cmp eax, edx  ;åñëè ôàéë çàêîí÷èëñÿ, òî
  887.    ja @f         ;âûõîäèì
  888.    cmp byte[eax], 10
  889.    je @f
  890.    cmp byte[eax], 0
  891.    je @f
  892.    cmp byte[eax], 13
  893.    je @f
  894.    ;èíà÷å ïåðåõîäèì íà ñëåäóþùèé ñèìâîë
  895.    inc eax
  896.    jmp gotoEndString
  897. @@:
  898.    ret
  899.  
  900. readOptRadius:
  901.    ;ïðîïóñêàåì ïåðåíîñû ñòðîê â íà÷àëå
  902.    cmp eax, edx  ;åñëè ôàéë çàêîí÷èëñÿ, òî
  903.    ja .default   ;íàñòðîéêè ïî óìîë÷àíèþ
  904.    cmp byte[eax], 10
  905.    je @f
  906.    cmp byte[eax], 0
  907.    je @f
  908.    cmp byte[eax], 13
  909.    je @f
  910.  
  911.    ;èíà÷å ñ÷èòûâàåì çíà÷åíèå
  912.    push ebx ecx
  913.    xor ecx, ecx
  914. .readValue:
  915.    mov bl, byte[eax]
  916.    mov byte[radiusBuffer.data+ecx], bl
  917.    inc ecx
  918.    inc eax
  919.    cmp eax, edx  ;åñëè ôàéë çàêîí÷èëñÿ, òî âûõîä
  920.    ja .readEnd
  921.    cmp byte[eax], 10
  922.    je .readEnd
  923.    cmp byte[eax], 0
  924.    je .readEnd
  925.    cmp byte[eax], 13
  926.    je .readEnd
  927.    cmp ecx, 6
  928.    jae .readEnd
  929.    jmp .readValue
  930. .readEnd:
  931.    mov byte[radiusBuffer.data+ecx], 0
  932.    mov dword[radiusBuffer.size], ecx
  933.    pop ecx ebx
  934.  
  935.    jmp .end
  936. @@:
  937.    inc eax
  938.    jmp readOptRadius
  939. .default:
  940.    mov byte[radiusBuffer.data], '0'
  941.    mov byte[radiusBuffer.data+1], 0
  942.    mov dword[radiusBuffer.size], 1
  943. .end:
  944.  
  945.    ret
  946.  
  947.  
  948. readOptSize:
  949.    ;ïðîïóñêàåì ïåðåíîñû ñòðîê â íà÷àëå
  950.    cmp eax, edx  ;åñëè ôàéë çàêîí÷èëñÿ, òî
  951.    ja .default   ;íàñòðîéêè ïî óìîë÷àíèþ
  952.    cmp byte[eax], 10
  953.    je @f
  954.    cmp byte[eax], 0
  955.    je @f
  956.    cmp byte[eax], 13
  957.    je @f
  958.  
  959.    ;ïðîâåðÿåì, ÷òî ýòî äîïóñòèìîå çíà÷åíèå: 1-7, a, s
  960.    cmp byte[eax], 'a'
  961.    je .setValue
  962.    cmp byte[eax], 's'
  963.    je .setValue
  964.    cmp byte[eax], '0'
  965.    je .setValue
  966.    cmp byte[eax], '1'
  967.    je .setValue
  968.    cmp byte[eax], '2'
  969.    je .setValue
  970.    cmp byte[eax], '3'
  971.    je .setValue
  972.    cmp byte[eax], '4'
  973.    je .setValue
  974.    cmp byte[eax], '5'
  975.    je .setValue
  976.    cmp byte[eax], '6'
  977.    je .setValue
  978.    cmp byte[eax], '7'
  979.    je .setValue
  980.  
  981.    jmp .default    ;èíà÷å ñòàâèì çíà÷åíèå ïî óìîë÷àíèþ
  982.  
  983. .setValue:
  984.    push ebx
  985.    mov bl, byte[eax]
  986.    mov byte[sizeStyle], bl
  987.    pop ebx
  988.  
  989.    jmp .end
  990. @@:
  991.    inc eax
  992.    jmp readOptSize
  993. .default:
  994.    mov byte[sizeStyle], 's'   ;ñèñòåìíûé
  995. .end:
  996.    ret
  997.  
  998.  
  999.  
  1000.  
  1001. updateParams: ;max, size, pos
  1002.    push eax
  1003.    mov eax, dword[dataBuffer.size1]
  1004.    mov dword[editLU.size], eax
  1005.    mov dword[editLU.pos], eax
  1006.  
  1007.    mov eax, dword[dataBuffer.size2]
  1008.    mov dword[editLD.size], eax
  1009.    mov dword[editLD.pos], eax
  1010.  
  1011.    mov eax, dword[dataBuffer.size3]
  1012.    mov dword[editRU.size], eax
  1013.    mov dword[editRU.pos], eax
  1014.  
  1015.    mov eax, dword[dataBuffer.size4]
  1016.    mov dword[editRD.size], eax
  1017.    mov dword[editRD.pos], eax
  1018.  
  1019.    mov eax, dword[radiusBuffer.size]
  1020.    mov dword[editRadius.size], eax
  1021.    mov dword[editRadius.pos], eax
  1022.    pop eax
  1023.    ret
  1024.  
  1025.  
  1026.  
  1027. selfName db 'HACONFIG', 0
  1028. selfNameSize = 8 ;äî 11 byte
  1029. ;
  1030. compareBytes:
  1031.    push edi esi ecx ebx
  1032.    mov eax, 0 ;xor eax, eax
  1033.    mov ecx, selfNameSize    ;max ðàçìåð ñòðîê 11
  1034. @@:
  1035.    mov bl, byte[edi]
  1036.    cmp bl, byte[esi]
  1037.    jne compareBytes.no
  1038.    inc edi
  1039.    inc esi
  1040.    cmp ecx, 0
  1041.    je @f
  1042.    dec ecx
  1043.    jmp @b
  1044. .no:
  1045.    mov eax, 1
  1046. @@:
  1047.    pop ebx ecx esi edi
  1048.    ret
  1049. ;
  1050. slotMax dd 0
  1051. selfPID dd 0
  1052. buf db 1024 dup(0)
  1053. copyKill:
  1054.    push eax ebx ecx esi edi
  1055.  
  1056.    ;ñïåðâà ïðî÷ò¸ì ñâîþ èíôîðìàöèþ
  1057.    mcall 9, buf, -1
  1058.    mov eax, dword[buf+30]
  1059.    mov dword[selfPID], eax
  1060.  
  1061.    ;óêàçàòåëè, êîòîðûå íèêîãäà íå ìåíÿþòñÿ:
  1062.    mov esi, selfName       ;ïåðâàÿ ñòðîêà - èìÿ òåêóùåãî ïðèëîæåíèÿ
  1063.    mov edi, buf            ;âòîðàÿ ñòðîêà - èìÿ òåêóùåãî ñëîòà
  1064.    add edi, 10
  1065.  
  1066.    mov ecx, 1
  1067. @@:
  1068.    mcall 9, buf, ecx
  1069.    mov dword[slotMax], eax
  1070.  
  1071.    ;åñëè ýòî ìû ñàìè, òî ïðîïóñêàåì ïðîâåðêó
  1072.    mov eax, dword[buf+30]
  1073.    cmp eax, dword[selfPID]
  1074.    je copyKill.propusk
  1075.  
  1076.    call compareBytes   ;ñðàâíèâàåì 11 áàéò ñòðîê, ðåçóëüòàò â eax
  1077.  
  1078.    cmp eax, 0
  1079.    je copyKill.selfKill
  1080.  
  1081. .propusk:
  1082.    inc ecx
  1083.    cmp ecx, dword[slotMax]
  1084.    ja @f
  1085.    jmp @b
  1086.  
  1087. .selfKill:
  1088.    pop edi esi ecx ebx eax
  1089.    mcall -1
  1090.    ret
  1091. @@:
  1092.    pop edi esi ecx ebx eax
  1093.    ret
  1094.  
  1095.  WindowsWidth  = 450
  1096.  WindowsHeight = 195 + 35 - 5
  1097. coord:      ;êîîðäèíàòû îêíà ïðèëîæåíèÿ
  1098.  .y dw 0
  1099.  .x dw 0
  1100.  
  1101. draw_window:
  1102.         ;óäàëÿåì êíîïêó, åñëè åñòü
  1103.         mov edx, 0x80000002
  1104.         mcall 8
  1105.  
  1106.         ;óäàëÿåì åù¸ 4 êíîïêè åñëè îíè åñòü
  1107.         mov edx, 0x80000004
  1108.         mcall 8
  1109.         mov edx, 0x80000005
  1110.         mcall 8
  1111.         mov edx, 0x80000006
  1112.         mcall 8
  1113.         mov edx, 0x80000007
  1114.         mcall 8
  1115.  
  1116.         mov     eax, 12                 ; function 12: tell os about windowdraw
  1117.         mov     ebx, 1                  ; 1, start of draw
  1118.         mcall
  1119.  
  1120.         ;îòîáðàçèì îêíî ïî öåíòðó ýêðàíà äëÿ ýòîãî:
  1121.         mcall 14 ;ïîëó÷èì ðàçìåðû ýêðàíà
  1122.         mov dword[coord], eax       ;ïîëîæèì ðàçìåðû ýêðàíà â êîîðäèíàòû
  1123.         shr word[coord.x], 1        ;âåðíåå ïîëîæèì èõ ïîëîâèíó
  1124.         shr word[coord.y], 1
  1125.  
  1126.         ;âû÷èñëÿåì êîîðäèíàòû îêíà, ÷òîáû îêíî áûëî ïî ñåðåäèíå ýêðàíà
  1127.         sub word[coord.x], WindowsWidth/2
  1128.         sub word[coord.y], WindowsHeight/2
  1129.  
  1130.         mov     eax, 0                  ; function 0 : define and draw window
  1131.         mov     ebx, 0                  ; [x start] *65536 + [x size]
  1132.         mov bx, word[coord.x]
  1133.         shl  ebx, 16
  1134.         mov bx, WindowsWidth
  1135.  
  1136.         mov ecx, 0
  1137.         mov     cx, word[coord.y]       ; [y start] *65536 + [y size]
  1138.         shl ecx, 16
  1139.         mov cx, WindowsHeight
  1140.  
  1141.         mov     edx, 0x14ffffff         ; color of work area RRGGBB
  1142.                                         ; 0x02000000 = window type 4 (fixed size, skinned window)
  1143.         mov     esi, 0x808899ff         ; color of grab bar  RRGGBB
  1144.                                         ; 0x80000000 = color glide
  1145.         mov     edi, title
  1146.         mcall
  1147.  
  1148.         invoke  edit_box_draw, editLU  ;ðèñîâàíèå edit box'îâ
  1149.         invoke  edit_box_draw, editLD
  1150.         invoke  edit_box_draw, editRU
  1151.         invoke  edit_box_draw, editRD
  1152.  
  1153.         ;ðèñóåì êíîïêó
  1154.         buttonAppleY = WindowsHeight-35 ;160
  1155.         mov ebx, (WindowsWidth-80-Otstup)*65536 + 80 ;êîîðäèíàòà X, øèðèíà êíîïêè
  1156.         mov ecx, buttonAppleY*65536 + 20   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  1157.         mov edx, 0x00000002 ;2    ;íîìåð êíîïêè
  1158.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  1159.         mcall 8
  1160.         ;ðèñóåì òåêñò êíîïêè
  1161.         mov     ebx, (WindowsWidth-80-Otstup+25-buttonTextXoffset) * 65536 + (buttonAppleY+6)    ;êîîðäèíàòû òåêñòà (x, y)
  1162.         mov     ecx, 0xFFFFFF     ;áåëûé öâåò òåêñòà
  1163.         mov     edx, buttonText
  1164.         mov     esi, buttonTextSize  ;ðàçìåð òåêñòà â ñèìâîëàõ
  1165.         mcall 4
  1166.  
  1167.         ;ðèñóåì åù¸ 4 êíîïêè äëÿ äèàëîãîâîãî îêíà âûáîðà ôàéëà
  1168.         ;íîìåðà 4,5,6 è 7
  1169.         buttonH = 14
  1170.         buttonW = 30
  1171.         ;ëåâûé âåðõíèé óãîë
  1172.         mov ebx, Otstup*65536 + buttonW ;êîîðäèíàòà X, øèðèíà êíîïêè
  1173.         mov ecx, 85*65536 + buttonH   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  1174.         mov edx, 0x00000004       ;íîìåð êíîïêè
  1175.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  1176.         mcall 8
  1177.         ;ëåâûé íèæíèé óãîë
  1178.         mov ebx, Otstup*65536 + buttonW ;êîîðäèíàòà X, øèðèíà êíîïêè
  1179.         mov ecx, 120*65536 + buttonH   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  1180.         mov edx, 0x00000005       ;íîìåð êíîïêè
  1181.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  1182.         mcall 8
  1183.         ;ïðàâûé âåðõíèé óãîë
  1184.         mov ebx, (WindowsWidth-Otstup-buttonW)*65536 + buttonW ;êîîðäèíàòà X, øèðèíà êíîïêè
  1185.         mov ecx, 85*65536 + buttonH   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  1186.         mov edx, 0x00000006       ;íîìåð êíîïêè
  1187.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  1188.         mcall 8
  1189.         ;ïðàâûé íèæíèé óãîë
  1190.         mov ebx, (WindowsWidth-Otstup-buttonW)*65536 + buttonW ;êîîðäèíàòà X, øèðèíà êíîïêè
  1191.         mov ecx, 120*65536 + buttonH   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  1192.         mov edx, 0x00000007       ;íîìåð êíîïêè
  1193.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  1194.         mcall 8
  1195.  
  1196.         ;ðèñóåì òåêñòû äëÿ ýòèõ 4 êíîïîê
  1197.         mov     ecx, 0xFFFFFF              ;áåëûé öâåò òåêñòà
  1198.         mov     edx, commonButtonText      ;ñòðîêà òåêñòà
  1199.         mov     esi, commonButtonTextSize  ;ðàçìåð òåêñòà â ñèìâîëàõ
  1200.         ;êîîðäèíàòû òåêñòà (x, y)
  1201.         deltaCommonTextX = 7
  1202.         deltaCommonTextY = 2
  1203.         mov     ebx, (Otstup+deltaCommonTextX) * 65536 + (85 + deltaCommonTextY)
  1204.         mcall 4
  1205.         mov     ebx, (Otstup+deltaCommonTextX) * 65536 + (120 + deltaCommonTextY)
  1206.         mcall 4
  1207.         mov     ebx, (WindowsWidth-Otstup-buttonW+deltaCommonTextX) * 65536 + (85 + deltaCommonTextY)
  1208.         mcall 4
  1209.         mov     ebx, (WindowsWidth-Otstup-buttonW+deltaCommonTextX) * 65536 + (120 + deltaCommonTextY)
  1210.         mcall 4
  1211.  
  1212.         ;delete mode button, if it exist
  1213.         mov edx, 0x80000008
  1214.         mcall 8
  1215.         ;draw button Mode
  1216.         buttonModeX = 30 ;433
  1217.         buttonModeY = 160 ;50
  1218.         buttonModeWidth = 221
  1219.         buttonModeHeight = 14 ;20
  1220.         buttonModeTextYoffset = 3;6
  1221.         buttonModeTextXoffset = 5
  1222.         mov ebx, buttonModeX*65536 + buttonModeWidth  ;X + Width
  1223.         mov ecx, buttonModeY*65536 + buttonModeHeight ;Y + Height
  1224.         mov edx, 0x00000008    ;button id
  1225.         mov esi, 0x00FFFFFF    ;color button
  1226.         mcall 8
  1227.         mov ebx, (buttonModeX+2+buttonModeWidth-20)*65536 + (20-2)  ;X + Width
  1228.         mov ecx, (buttonModeY+1)*65536 + buttonModeHeight-2   ;Y + Height
  1229.         mov edx, 0xAABBCC
  1230.         mcall 13
  1231.         ;draw text for button Mode
  1232.         mov     ebx, (buttonModeX+buttonModeTextXoffset) * 65536 + (buttonModeY+buttonModeTextYoffset)    ;(x, y)
  1233.         mov     ecx, 0x000000
  1234.         call setTextModeMenu
  1235.         mov     esi, valueModeMenuSize
  1236.         mcall 4
  1237.         mov     ebx, (buttonModeX+buttonModeWidth-12) * 65536 + (buttonModeY+buttonModeTextYoffset)
  1238.         mov     ecx, 0x80FFFFFF
  1239.         mov     edx, symbolDownArrow
  1240.         mcall 4
  1241.  
  1242.         ;êíîïêà âûáîðà ãîðÿ÷åé êëàâèøè
  1243.         buttonHotKeyX = 280-10
  1244.         buttonHotKeyWidth = 90
  1245.         mov edx, 0x80000009    ;óäàëÿåì
  1246.         mcall 8
  1247.     cmp byte[mode], 49    ;ðèñóåì âûáîð êëàâèøè, òîëüêî åñëè mode > 1
  1248.     jbe @f
  1249.         ;ðèñóåì íîâóþ
  1250.         push eax ebx ecx edx esi
  1251.         mov ebx, buttonHotKeyX*65536 + buttonHotKeyWidth  ;X + Width
  1252.         mov ecx, buttonModeY*65536 + buttonModeHeight ;Y + Height
  1253.         mov edx, 0x00000009    ;button id
  1254.         mov esi, 0x00FFFFFF    ;color button
  1255.         mcall 8
  1256.         pop esi edx ecx ebx eax
  1257.         ;òåêñò ïîäñêàçêè äëÿ ãîðÿ÷åé êëàâèøè
  1258.         mov     ebx, (buttonHotKeyX+buttonModeTextXoffset) * 65536 + (buttonModeY+buttonModeTextYoffset)    ;(x, y)
  1259.         mov     ecx, 0x80224466
  1260.         call setTextForHotKey
  1261.         mov     esi, valueModeMenuSize
  1262.         mcall 4
  1263.         ;çàãîëîâîê
  1264.         push eax ebx ecx edx edi esi
  1265.         mov     ebx, buttonHotKeyX * 65536 + (buttonModeY-11)
  1266.         mov ecx, 0x80224466
  1267.         mov     edx, hkCaption
  1268.         mov     esi, 3
  1269.         mcall 4
  1270.         pop esi edi edx ecx ebx eax
  1271.     @@:
  1272.  
  1273.     ;îòîáðàæàåì íàñòðîéêó ðàäèóñà äåéñòâèÿ æåñòà, òîëüêî åñëè âûáðàí ðåæèì 3
  1274.     cmp byte[mode], 51
  1275.     jne @f
  1276.         ;çàãîëîâîê
  1277.         push eax ebx ecx edx edi esi
  1278.         mov     ebx, (buttonHotKeyX + buttonHotKeyWidth + 20) * 65536 + (buttonModeY-11)
  1279.         mov ecx, 0x80224466
  1280.         mov     edx, radiusCaption
  1281.         mov     esi, 3
  1282.         mcall 4
  1283.         pop esi edi edx ecx ebx eax
  1284.         invoke  edit_box_draw, editRadius
  1285.     @@:
  1286.  
  1287.         call draw_super_text
  1288.  
  1289.         LineLength = 62
  1290.         mov     ebx, 40 * 65536 + 36    ; draw info text with function 4 (x, y)
  1291.  
  1292.         ;xor ecx, ecx
  1293.         ;mov cl, 1 ;byte[mysize]
  1294.         ;shl ecx, 24
  1295.         ;add ecx, 0x224466
  1296.         ;or ecx, 0x00224466  ;80224466
  1297.         mov     ecx, 0x224466
  1298.  
  1299.         mov     edx, text
  1300.         mov     esi, LineLength
  1301.         mov     eax, 4
  1302.  
  1303.   .newline:                             ; text from the DATA AREA
  1304.         mcall
  1305.         add     ebx, 12
  1306.         add     edx, LineLength
  1307.         cmp     byte[edx], 0
  1308.         jne     .newline
  1309.  
  1310.         mov     eax, 12                 ; function 12:tell os about windowdraw
  1311.         mov     ebx, 2                  ; 2, end of draw
  1312.         mcall
  1313.  
  1314.         ret
  1315.  
  1316. hkSymbol: db 0, 0
  1317.  
  1318. setTextForHotKey:
  1319.    push eax
  1320.    mov al, byte[hkSymbol]
  1321.    cmp al, 0
  1322.    jne @f
  1323.       mov edx, hkHint
  1324.       mov dword[hkSize], 5 ;çíà÷åíèå ïî óìîë÷àíèþ SPACE ;shift
  1325.       jmp setTextForHotKey.end
  1326. @@:
  1327.    cmp al, 1
  1328.    jne @f
  1329.       mov edx, hkAlt
  1330.       mov dword[hkSize], 3
  1331.       jmp setTextForHotKey.end
  1332. @@:
  1333.    cmp al, 2
  1334.    jne @f
  1335.       mov edx, hkShift
  1336.       mov dword[hkSize], 5
  1337.       jmp setTextForHotKey.end
  1338. @@:
  1339.    cmp al, 3
  1340.    jne @f
  1341.       mov edx, hkCtrl
  1342.       mov dword[hkSize], 4
  1343.       jmp setTextForHotKey.end
  1344. @@:
  1345.    cmp al, 32
  1346.    jne @f
  1347.       mov edx, hkSpace
  1348.       mov dword[hkSize], 5
  1349.       jmp setTextForHotKey.end
  1350. @@:
  1351.    cmp al, 96  ;'`'
  1352.    je  setTextForHotKey.symb
  1353.    cmp al, 126 ;'~'
  1354.    je  setTextForHotKey.symb
  1355.    cmp al, 48 ;'0'
  1356.    jb @f
  1357.    cmp al, 57 ;'9'
  1358.    ja @f
  1359. .symb:
  1360.       mov edx, hkSymbol
  1361.       mov dword[hkSize], 1
  1362.       jmp setTextForHotKey.end
  1363. @@:
  1364.    cmp al, 97  ;'a'
  1365.    jb @f
  1366.    cmp al, 122 ;'z'
  1367.    ja @f
  1368.       ;jmp setTextForHotKey.symb
  1369.       mov edx, hkSymbol
  1370.       mov dword[hkSize], 1
  1371.       jmp setTextForHotKey.end
  1372. @@:
  1373.    cmp al, 65  ;'A'
  1374.    jb @f
  1375.    cmp al, 90 ;'Z'
  1376.    ja @f
  1377.       ;jmp setTextForHotKey.symb
  1378.       mov edx, hkSymbol
  1379.       mov dword[hkSize], 1
  1380.       jmp setTextForHotKey.end
  1381. @@:
  1382.    mov word[hkSymbol], 0     ;åñëè æå ïîïàëî ÷òî-òî íåèçâåñòíîå, òî ñîòð¸ì åãî
  1383.    mov edx, hkHint
  1384.    mov dword[hkSize], 5 ;shift or space -  çíà÷åíèå ïî óìîë÷àíèþ
  1385. .end:
  1386.    pop eax
  1387.    ret
  1388.  
  1389.  
  1390. setTextModeMenu:
  1391.    cmp byte[mode], 48
  1392.    jne @f
  1393.         mov edx, valueModeMenu0
  1394.         ret
  1395. @@:
  1396.    cmp byte[mode], 49
  1397.    jne @f
  1398.         mov edx, valueModeMenu1
  1399.         ret
  1400. @@:
  1401.    cmp byte[mode], 50
  1402.    jne @f
  1403.         mov edx, valueModeMenu2
  1404.         ret
  1405. @@:
  1406.    cmp byte[mode], 51
  1407.    jne @f
  1408.         mov edx, valueModeMenu3
  1409.         ret
  1410. @@:
  1411.    mov edx, valueModeMenu1
  1412.    ret
  1413.  
  1414.  
  1415.  
  1416.  
  1417. saveKey:
  1418.    cmp word[hkSymbol], 0
  1419.    je .default
  1420.    cmp byte[hkSymbol], 1
  1421.    je .alt
  1422.    cmp byte[hkSymbol], 2
  1423.    je .shift
  1424.    cmp byte[hkSymbol], 3
  1425.    je .ctrl
  1426.    cmp byte[hkSymbol], 32
  1427.    je .space
  1428. .other:
  1429.    mov esi, hkSymbol
  1430.    mov byte[esi+1], 0
  1431.    mov dword[hkSize], 1
  1432.    jmp .end
  1433. .space:
  1434.    mov esi, hkSpace
  1435.    mov dword[hkSize], 5
  1436.    jmp .end
  1437. .ctrl:
  1438.    mov esi, hkCtrl
  1439.    mov dword[hkSize], 4
  1440.    jmp .end
  1441. .alt:
  1442.    mov esi, hkAlt
  1443.    mov dword[hkSize], 3
  1444.    jmp .end
  1445. .default:
  1446. .shift:
  1447.    mov esi, hkShift
  1448.    mov dword[hkSize], 5
  1449. .end:
  1450.    mov ebx, hkSize ;óêàçàòåëü íà dword[hkSize]
  1451.    call copyParam
  1452.    ret
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458. align 16
  1459. @IMPORT:
  1460.  
  1461. library box_lib, 'box_lib.obj'
  1462.  
  1463. import  box_lib,\
  1464.         edit_box_draw,          'edit_box',\
  1465.         edit_box_key,           'edit_box_key',\
  1466.         edit_box_mouse,         'edit_box_mouse',\
  1467.         init_checkbox,          'init_checkbox2',\
  1468.         check_box_draw,         'check_box_draw2',\
  1469.         check_box_mouse,        'check_box_mouse2',\
  1470.         option_box_draw,        'option_box_draw',\
  1471.         option_box_mouse,       'option_box_mouse'
  1472.  
  1473. commonButtonText db '...', 0  ;òåêñò äëÿ êíîïîê âûçîâà OpenDial
  1474. commonButtonTextSize = 3
  1475.  
  1476. if lang eq ru  ;åñëè ÿçûê ñáîðêè ðóññêèé
  1477.  
  1478. text    db  "Š®­ä¨£ãà â®à Hot Angles ®â¢¥ç ¥â §  ­ áâனªã  ªâ¨¢­ëå 㣫®¢. "
  1479.         db  " áâன⥠¯ à ¬¥âàë ¯®¤ á¥¡ï ¨«¨ ®âª«îç¨â¥ íâã ®¯æ¨î.         "
  1480.         db  "                                                              ", 0
  1481.  hed:
  1482. title   db  "Š®­ä¨£ãà â®à ã⨫¨âë Hot Angles", 0
  1483. buttonText db "à¨¬¥­¨âì", 0
  1484. buttonTextSize = 9
  1485. buttonTextXoffset = 12
  1486.  
  1487. ch_text db '‚ª«îç¨âì/ ªâ¨¢¨à®¢ âì "Hot Angles"', 0
  1488.  
  1489. superText:
  1490.   .lu db 'Š®¬ ­¤  «¥¢®£® ¢¥àå­¥£® 㣫 : ', 0
  1491.   .ld db 'Š®¬ ­¤  «¥¢®£® ­¨¦­¥£® 㣫 :  ', 0
  1492.   .ru db 'Š®¬ ­¤  ¯à ¢®£® ¢¥àå­¥£® 㣫 :', 0
  1493.   .rd db 'Š®¬ ­¤  ¯à ¢®£® ­¨¦­¥£® 㣫 : ', 0
  1494. superTextSize = 30
  1495.  
  1496. valueModeMenuSize = 32
  1497. ModeMenu  db '¥¦¨¬ à ¡®âë:',0
  1498. valueModeMenu0  db '®âª«î祭®                       ',0
  1499. valueModeMenu1  db 'ª« áá¨ç¥áª¨© ०¨¬              ',0
  1500. valueModeMenu2  db '०¨¬ £®àï祩 ª« ¢¨è¨           ',0
  1501. valueModeMenu3  db '०¨¬ ¦¥áâ  ¯® ª« ¢¨è¥  ªâ¨¢ æ¨¨',0
  1502.  
  1503. head_f_i:
  1504.         head_f_l  db '‘¨á⥬­ ï ®è¨¡ª ',0
  1505.         err_message_found_lib0 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'proc_lib.obj',39,0
  1506.         err_message_import0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0
  1507.         err_message_found_lib1 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'kmenu.obj',39,0
  1508.         err_message_import1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'kmenu',39,0
  1509.  
  1510. hkCaption: db 'Š« ¢¨è :',0
  1511. ;hkHint: db ' ¦¬¨â¥ «î¡ãî ª« ¢¨èã',0
  1512. radiusCaption: db ' ¤¨ãá:',0
  1513.  
  1514. else  ;èíà÷å àíãëèéñêèé òåêñò
  1515.  
  1516. text    db  "This is a Hot Angles Configurator.                            "
  1517.         db  "Set the parameters bellow for yourself or disable this option."
  1518.         db  "                                                              ", 0
  1519.  hed:
  1520. title   db  "Hot Angles Configurator", 0
  1521. buttonText db "Apply", 0
  1522. buttonTextSize = 5
  1523. buttonTextXoffset = 0
  1524.  
  1525. ch_text db 'Activate "Hot Angles"',0       ;ñîïðîâîæäàþùèé òåêñò äëÿ ÷åê áîêñà
  1526.  
  1527. superText:
  1528.   .lu db 'Left up angle command:   ', 0
  1529.   .ld db 'Left down angle command: ', 0
  1530.   .ru db 'Right up angle command:  ', 0
  1531.   .rd db 'Right down angle command:', 0
  1532. superTextSize = 25
  1533.  
  1534. valueModeMenuSize = 32
  1535. ModeMenu  db 'Mode:',0
  1536. valueModeMenu0  db 'disabled                        ',0
  1537. valueModeMenu1  db 'classic mode                    ',0
  1538. valueModeMenu2  db 'hot key mode                    ',0
  1539. valueModeMenu3  db 'activation key gesture mode     ',0
  1540.  
  1541. head_f_i:
  1542.         head_f_l  db 'System error',0
  1543.         err_message_found_lib0 db 'Could not find library ',39,'proc_lib.obj',39,0
  1544.         err_message_import0 db 'Error importing library ',39,'proc_lib.obj',39,0
  1545.         err_message_found_lib1 db 'Could not find library ',39,'kmenu.obj',39,0
  1546.         err_message_import1 db 'Error importing library ',39,'kmenu',39,0
  1547.  
  1548. hkCaption: db 'Key:',0
  1549. ;hkHint: db 'press any key',0
  1550. radiusCaption: db 'Radius:',0
  1551.  
  1552. end if
  1553.  
  1554. hkAlt:   db 'Alt',0
  1555. hkShift: db 'Shift',0
  1556. hkCtrl:  db 'Ctrl',0
  1557. hkSpace: db 'Space',0
  1558. hkHint: db '?',0
  1559. hkSize: rd 1 ;ðàçìåð ñòðîêè ñ èìåíåì êëàâèøè
  1560.  
  1561. draw_super_text:
  1562.    push eax ebx ecx edx edi esi
  1563.  
  1564.    mov ecx, 0
  1565.    mov ch, byte[mysize]
  1566.    shl ecx, 16
  1567.    add ecx, 0x224466
  1568.  
  1569.    mov     ebx, Otstup * 65536 + 74    ; draw info text with function 4 (x, y)
  1570.    ;mov     ecx, 0x224466
  1571.    mov eax, superText.lu
  1572.    mov     edx, eax
  1573.    mov     esi, superTextSize
  1574.    mcall 4
  1575.  
  1576.    mov     ebx, Otstup * 65536 + 109
  1577.    mov     edx, superText.ld
  1578.    mov     esi, superTextSize
  1579.    mcall 4
  1580.  
  1581.    mov     ebx, 240 * 65536 + 74
  1582.    mov     edx, superText.ru
  1583.    mov     esi, superTextSize
  1584.    mcall 4
  1585.  
  1586.    mov     ebx, 240 * 65536 + 109
  1587.    mov     edx, superText.rd
  1588.    mov     esi, superTextSize
  1589.    mcall 4
  1590.  
  1591.    mov     ebx, Otstup * 65536 + (buttonModeY-11)
  1592.    or ecx, 0x80000000
  1593.    mov     edx, ModeMenu
  1594.    mov     esi, 3
  1595.    mcall 4
  1596.  
  1597. ;   mov     ebx, buttonHotKeyX * 65536 + (buttonModeY-11)
  1598. ;   or ecx, 0x80000000
  1599. ;   mov     edx, hkCaption
  1600. ;   mov     esi, 3
  1601. ;   mcall 4
  1602.  
  1603.    pop esi edi edx ecx ebx eax
  1604.    ret
  1605.  
  1606. editID db 0
  1607. initEBX:
  1608.    cmp byte[editID], 4
  1609.    jne @f
  1610.    mov ebx, dataBuffer.1
  1611.    ret
  1612. @@:
  1613.    cmp byte[editID], 5
  1614.    jne @f
  1615.    mov ebx, dataBuffer.2
  1616.    ret
  1617. @@:
  1618.    cmp byte[editID], 6
  1619.    jne @f
  1620.    mov ebx, dataBuffer.3
  1621.    ret
  1622. @@:
  1623.    cmp byte[editID], 7
  1624.    jne @f
  1625.    mov ebx, dataBuffer.4
  1626.    ret
  1627. @@:
  1628.    ret
  1629. setRESULT:
  1630.    cmp byte[editID], 4
  1631.    jne @f
  1632.    mov dword[dataBuffer.size1], ecx
  1633.    mov dword[editLU.size], ecx
  1634.    mov dword[editLU.pos], ecx
  1635.    ret
  1636. @@:
  1637.    cmp byte[editID], 5
  1638.    jne @f
  1639.    mov dword[dataBuffer.size2], ecx
  1640.    mov dword[editLD.size], ecx
  1641.    mov dword[editLD.pos], ecx
  1642.    ret
  1643. @@:
  1644.    cmp byte[editID], 6
  1645.    jne @f
  1646.    mov dword[dataBuffer.size3], ecx
  1647.    mov dword[editRU.size], ecx
  1648.    mov dword[editRU.pos], ecx
  1649.    ret
  1650. @@:
  1651.    cmp byte[editID], 7
  1652.    jne @f
  1653.    mov dword[dataBuffer.size4], ecx
  1654.    mov dword[editRD.size], ecx
  1655.    mov dword[editRD.pos], ecx
  1656.    ret
  1657. @@:
  1658.    ret
  1659. copyPath:
  1660.    push eax ebx ecx edx ;copy file name path
  1661.         mov eax, openfile_path ;dword[OpenDialog_data.openfile_path]
  1662.         call initEBX ;mov ebx, dataBuffer.1 ;.data
  1663.         mov ecx, 0
  1664.       @@:
  1665.         mov dl, byte[eax]
  1666.         cmp dl, 0 ;byte[eax], 0
  1667.         je @f
  1668.         mov byte[ebx], dl
  1669.         inc eax
  1670.         inc ebx
  1671.         inc ecx
  1672.         jmp @b
  1673.       @@:
  1674.         mov byte[ebx], 0
  1675.         call setRESULT
  1676.    pop edx ecx ebx eax
  1677.    ret
  1678.  
  1679.  
  1680. IntToStr:  ;in esi - ñòðîêà; eñx - ÷èñëî
  1681.    push eax ecx edx esi
  1682.    cmp ecx, 0
  1683.    jne @f
  1684.    mov byte[esi], 48 ; '0'
  1685.    inc esi
  1686.    jmp .end
  1687. @@:
  1688.    mov eax, ecx
  1689.    mov ecx, 10
  1690. .next:
  1691.    mov edx, 0
  1692.    div ecx
  1693.    add edx, 48
  1694.  
  1695.    mov byte[esi], dl
  1696.  
  1697.    inc esi
  1698.    cmp eax, 0
  1699.    je .end
  1700.    jmp .next
  1701. .end:
  1702.    mov byte[esi], 0   ;êëàä¸ì çàâåðøàþùèé íîëü
  1703.    pop esi edx ecx eax
  1704.    call reverseString ;äåëàåì ðåâåðñ ñòðîêè
  1705.    ret
  1706.  
  1707. ;âõîä: esi - óêàçàòåëü íà ñòðîêó
  1708. reverseString:
  1709.    push eax esi edi
  1710.  
  1711.    mov al, byte[esi] ;åñëè ñòðîêà ïóñòàÿ òî âûõîäèì ðåâåðñ äåëàòü íå íàäî
  1712.    cmp al, 0
  1713.    je reverseString.end
  1714.  
  1715.    mov edi, esi  ;èíà÷å íàéä¸ì ïîçèöèþ ïîñëåäíåãî ñèìâîëà ñòðîêè è ïîëîæèì å¸ â edi
  1716. .go_last_symbol:
  1717.    mov al, byte[edi+1]
  1718.    cmp al, 0
  1719.    je @f
  1720.  
  1721.    inc edi
  1722.    jmp reverseString.go_last_symbol
  1723. @@:
  1724.    push ebx
  1725. .rev:
  1726.    cmp esi, edi
  1727.    jae @f
  1728.  
  1729.    ;ìåíÿåì ìåñòàìè ñèìâîëû â öèêëå
  1730.    mov al, byte[edi]
  1731.    mov bl, byte[esi]
  1732.    mov byte[edi], bl
  1733.    mov byte[esi], al
  1734.  
  1735.    inc esi
  1736.    dec edi
  1737.    jmp reverseString.rev
  1738. @@:
  1739.    pop ebx
  1740. .end:
  1741.    pop edi esi eax
  1742.    ret
  1743.  
  1744.  
  1745.  
  1746. align 4
  1747. but_open_dlg:
  1748.         pushad
  1749.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  1750.         mov [OpenDialog_data.type],0
  1751.         stdcall[OpenDialog_Start], OpenDialog_data
  1752.         cmp [OpenDialog_data.status],2
  1753.         je @f
  1754.         cmp [OpenDialog_data.status],0 ;ïîëüçîâàòåëü íàæàë Cancel?
  1755.         je .end_open
  1756.                 ;êîä ïðè óäà÷íîì îòêðûòèè äèàëîãà
  1757.                 call copyPath
  1758.                 jmp .end_open
  1759.         @@:
  1760.                 ;êîä ïðè íå óäà÷íîì îòêðûòèè äèàëîãà
  1761.                 ;...
  1762.         .end_open:
  1763.         popad
  1764.         ret
  1765.  
  1766. ;äàííûå äëÿ äèàëîãà îòêðûòèÿ ôàéëîâ
  1767. align 4
  1768. OpenDialog_data:
  1769. .type                   dd 0 ;0 - îòêðûòü, 1 - ñîõðàíèòü, 2 - âûáðàòü äèðåêòîðèþ
  1770. .procinfo               dd procinfo
  1771. .com_area_name          dd communication_area_name ;+8
  1772. .com_area               dd 0           ;+12
  1773. .opendir_path           dd plugin_path ;+16
  1774. .dir_default_path       dd default_dir ;+20
  1775. .start_path             dd file_name   ;+24 ïóòü ê äèàëîãó îòêðûòèÿ ôàéëîâ
  1776. .draw_window            dd draw_window ;+28
  1777. .status                 dd 0           ;+32
  1778. .openfile_path          dd openfile_path ;+36 ïóòü ê îòêðûâàåìîìó ôàéëó
  1779. .filename_area          dd filename_area ;+40
  1780. .filter_area            dd Filter
  1781. .x:
  1782. .x_size                 dw 420 ;+48 ; Window X size
  1783. .x_start                dw 10  ;+50 ; Window X position
  1784. .y:
  1785. .y_size                 dw 320 ;+52 ; Window y size
  1786. .y_start                dw 10  ;+54 ; Window Y position
  1787.  
  1788. default_dir db '/rd/1',0 ;äèðåêòîðèÿ ïî óìîë÷àíèþ
  1789. communication_area_name: db 'FFFFFFFF_open_dialog',0
  1790. open_dialog_name:  db 'opendial',0
  1791. communication_area_default_path: db '/rd/1/File managers/',0
  1792.  
  1793. Filter:
  1794. dd Filter.end - Filter.1
  1795. .1:
  1796. ;db 'KEX',0
  1797. .end:
  1798. db 0
  1799.  
  1800. mode db 49 ;'1'
  1801. modeMenu dd 0
  1802. coordModeMenu:
  1803.   .x dw 100
  1804.   .y dw 200
  1805.  
  1806.  
  1807. align 4
  1808. proclib_import: ;îïèñàíèå ýêñïîðòèðóåìûõ ôóíêöèé
  1809.         OpenDialog_Init dd aOpenDialog_Init
  1810.         OpenDialog_Start dd aOpenDialog_Start
  1811. dd 0,0
  1812.         aOpenDialog_Init db 'OpenDialog_init',0
  1813.         aOpenDialog_Start db 'OpenDialog_start',0
  1814.  
  1815. system_dir0 db '/sys/lib/'
  1816. lib0_name db 'proc_lib.obj',0
  1817. lib1_name db 'kmenu.obj',0
  1818.  
  1819. symbolDownArrow db 25,0
  1820.  
  1821. ;library structures
  1822. l_libs_start:
  1823.     lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, proclib_import,err_message_import0, head_f_i
  1824.     lib1 l_libs lib1_name, sys_path, file_name, system_dir0, err_message_found_lib1, head_f_l, import_libkmenu,err_message_import1,head_f_i
  1825. load_lib_end:
  1826.  
  1827.  
  1828. edMaxSize = 510 ;òåïåðü ñ íîâûì êîìïîíåíòîì ìîæíî è 511 óêàçàòü
  1829. edMax = 0 ;max, size, pos
  1830.  
  1831. align 4
  1832. editLU   edit_box 180-buttonW,Otstup+buttonW,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.1, mouse_dd, 0, edMax, edMax  ;ed_focus
  1833. editLD   edit_box 180-buttonW,Otstup+buttonW,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.2, mouse_dd, 0, edMax, edMax
  1834. editRU   edit_box 180-buttonW,240,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.3, mouse_dd, 0, edMax, edMax
  1835. editRD   edit_box 180-buttonW,240,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.4, mouse_dd, 0, edMax, edMax
  1836. editRadius edit_box 40,(buttonHotKeyX + buttonHotKeyWidth + 20),buttonModeY, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, 4, radiusBuffer.data, mouse_dd, ed_figure_only, edMax, edMax
  1837.  
  1838. align 4
  1839. import_libkmenu:
  1840.         kmenu_init      dd akmenu_init
  1841.         kmainmenu_draw  dd akmainmenu_draw
  1842.         kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent
  1843.         ksubmenu_new    dd aksubmenu_new
  1844.         ksubmenu_delete dd aksubmenu_delete
  1845.         ksubmenu_draw   dd aksubmenu_draw
  1846.         ksubmenu_add    dd aksubmenu_add
  1847.         kmenuitem_new   dd akmenuitem_new
  1848.         kmenuitem_delete dd akmenuitem_delete
  1849.         kmenuitem_draw  dd akmenuitem_draw
  1850. dd 0,0
  1851.         akmenu_init     db 'kmenu_init',0
  1852.         akmainmenu_draw db 'kmainmenu_draw',0
  1853.         akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0
  1854.         aksubmenu_new   db 'ksubmenu_new',0
  1855.         aksubmenu_delete db 'ksubmenu_delete',0
  1856.         aksubmenu_draw  db 'ksubmenu_draw',0
  1857.         aksubmenu_add   db 'ksubmenu_add',0
  1858.         akmenuitem_new  db 'kmenuitem_new',0
  1859.         akmenuitem_delete db 'kmenuitem_delete',0
  1860.         akmenuitem_draw  db 'kmenuitem_draw',0
  1861.  
  1862. ;mouse_dd  dd ?
  1863. sc  system_colors
  1864. mouse_dd  rd 1
  1865.  
  1866. sizeStyle: rb 1  ;ðàçìåð òåêñòà è îñòàëüíûõ ýëåìåíòîâ îêíà
  1867. mysize: rb 1     ;rd 1
  1868. radiusBuffer:    ;áóôåð äëÿ ïîëÿ ðàäèóñà æåñòà
  1869.  .data: rb 6
  1870.  .size: rd 1
  1871. radiusBufferEnd:
  1872.  
  1873. button_press  rd 0     ;for kmenu
  1874.  
  1875. sys_path:      rb 4096
  1876. file_name:     rb 4096
  1877. plugin_path:   rb 4096
  1878. openfile_path: rb 4096
  1879. filename_area: rb 256
  1880. rb 1024
  1881. procinfo process_information
  1882. pi rb 1024
  1883.  
  1884. keyscan: rb 1
  1885. keystr:
  1886.   .data: rb 4 ;ñòðîêà ñî çíà÷åíèåì ñêàíêîäà àêòèâàöèîííîé êëàâèøè
  1887.   .size: rd 1 ;ðàçìåð ñîäåðæèìîãî ñòðîêè áåç ïîñëåäíåãî íóëÿ
  1888.  
  1889. dataBuffer:
  1890. .1: rb 512
  1891. .2: rb 512
  1892. .3: rb 512
  1893. .4: rb 512
  1894. .size1: rd 1
  1895. .size2: rd 1
  1896. .size3: rd 1
  1897. .size4: rd 1
  1898. ;255+255+2 = 512
  1899. ;äâà çàïàñíûõ áàéòà íåîáõîäèìû äëÿ òîãî ÷òî áû íå ïåïåðåïèñàòü ñëåäóþùèåé áàéòû, â êîíöå áóôåðà 0
  1900. dataBufferEnd:
  1901.  
  1902.  
  1903. I_END:
  1904.         rb 4096
  1905. align 16
  1906. STACKTOP:
  1907.  
  1908. MEM:
  1909.