Subversion Repositories Kolibri OS

Rev

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