Subversion Repositories Kolibri OS

Rev

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