Subversion Repositories Kolibri OS

Rev

Rev 7443 | Rev 7459 | 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.6: Oct 9, 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.  
  119.     jmp     event_wait
  120.  
  121.  
  122. red:                     ;îáðàáîòêà ñîáûòèÿ ïåðåðèñîâêè îêíà
  123.    call    draw_window
  124.    jmp     event_wait
  125.  
  126. key:                                    ; Keypress event handler
  127.         mov     eax, 2                  ; The key is returned in ah. The key must be
  128.         mcall                           ; read and cleared from the system queue.
  129.  
  130.         invoke  edit_box_key, editLU
  131.         invoke  edit_box_key, editLD
  132.         invoke  edit_box_key, editRU
  133.         invoke  edit_box_key, editRD
  134.         jmp     event_wait              ; Just read the key, ignore it and jump to event_wait.
  135.  
  136. button:                                 ; Buttonpress event handler
  137.     mov     eax,17                  ; The button number defined in window_draw
  138.     mcall                           ; is returned to ah.
  139.  
  140.     cmp     ah,1                    ; button id=1 ?
  141.     jne     noclose
  142. exit:
  143.     mov     eax,-1                  ; Function -1 : close this program
  144.     mcall
  145. noclose:
  146.     cmp  ah, 2         ;êíîïêà "Ïðèìåíèòü"
  147.     jne  @f ;butend
  148.     call applyButton   ;âûçîâ íàøåãî îáðàáîò÷èêà íàæàòèÿ êíîïêè
  149.     jmp event_wait
  150. @@:
  151.     cmp ah, 4
  152.     jne @f
  153.     mov byte[editID], 4
  154.     call but_open_dlg
  155.     jmp  event_wait
  156. @@:
  157.     cmp ah, 5
  158.     jne @f
  159.     mov byte[editID], 5
  160.     call but_open_dlg
  161.     jmp  event_wait
  162. @@:
  163.     cmp ah, 6
  164.     jne @f
  165.     mov byte[editID], 6
  166.     call but_open_dlg
  167.     jmp  event_wait
  168. @@:
  169.     cmp ah, 7
  170.     jne @f
  171.     mov byte[editID], 7
  172.     call but_open_dlg
  173.     jmp  event_wait
  174. @@:
  175.     cmp ah, 8
  176.     jne @f
  177.     push eax ebx ecx
  178.     mcall 9, pi, -1 ;get window coord
  179.  
  180.                 mov eax, dword[pi+34]
  181.                 add eax, buttonModeX ;+ 5
  182.                 mov word[coordModeMenu.x], ax
  183.  
  184.                 mov eax, dword[pi+38]
  185.                 add eax, buttonModeY + 17 ;20 ;42
  186.                 mov word[coordModeMenu.y], ax
  187.  
  188.                 stdcall [ksubmenu_draw], [modeMenu], coordModeMenu
  189.     pop ecx ebx eax
  190.     jmp  event_wait
  191. @@:
  192.     cmp ah, 110
  193.     jne @f
  194.     mov byte[mode], 48 ;'0'
  195.     jmp  event_wait
  196. @@:
  197.     cmp ah, 111
  198.     jne @f
  199.     mov byte[mode], 49 ;'1'
  200.     jmp  event_wait
  201. @@:
  202.     cmp ah, 112
  203.     jne @f
  204.     mov byte[mode], 50 ;'2'
  205.     jmp  event_wait
  206. @@:
  207.     cmp ah, 113
  208.     jne @f
  209.     mov byte[mode], 51 ;'3'
  210.     jmp  event_wait
  211. @@:
  212. butend:
  213.     jmp  event_wait    ;this is for ignored events, useful at development
  214.  
  215.  
  216.  
  217. ;èìÿ êîíôèãóðàöèîííîãî ôàéëà
  218. fileName: db 'SETTINGS/HOTANGLES.CFG', 0
  219.  
  220. ;ñòðóêòóðà äëÿ ñîçäàíèÿ/ïåðåçàïèñè ôàéëà
  221. createFile:
  222.   .func     dd 2    ;íîìåð ïîäôóíêöèè
  223.   .re       dd 0, 0 ;çàðåçåðâèðîâàíî
  224.   .size     dd 0    ;ñêîëüêî áàéò ïèñàòü
  225.   .data_adr dd 0    ;óêàçàòåëü íà äàííûå
  226.   .path     db 0
  227.   .path_adr dd fileName    ;ïóòü
  228.  
  229. ;ñòðîêà ïàðàìåòðîâ ïî óìîë÷àíèþ è å¸ ðàçìåð
  230. 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
  231. defaultDataSize = 48+19
  232.  
  233.  
  234. copyParam:  ;êîïèðóåò ïàðàìåòð(êîìàíäó çàïóñêà) â áóôåð (ñì. äàëüøå)
  235.    push esi ebx ecx
  236.    mov ecx, dword[ebx] ;÷èòàåì ðàçìåð ñòðîêè
  237.  
  238.    cmp ecx, 0          ;ïóñòà ëè ñòðîêà?
  239.    jne copyParam.copy  ;åñëè íåò, òî ïåðåõîäèì ê êîïèðîâàíèþ ñîäåðæèìîãî ñòðîêè (ê  öèêëó)
  240.  
  241.    mov byte[eax], '-'  ;åñëè æå ïóñòî, òî çàìåíÿåì ñèìâîëîì ìèíóñ '-'
  242.    inc eax
  243.    ;jmp copyParam.copyEnd ;è âûõîäèì
  244.    ;äàëåå â íà÷àëå öèêëà ïðîèçîéä¸ò ñðàâíåíèå è âûõîä
  245.  
  246. .copy:  ;êîïèðóåì ñèìâîëû
  247.    cmp ecx, 0
  248.    je copyParam.copyEnd
  249.    mov bl, byte[esi]
  250.    mov byte[eax], bl
  251.    dec ecx
  252.    inc eax
  253.    inc esi
  254.    jmp copyParam.copy
  255. .copyEnd:
  256.    pop ecx ebx esi
  257.    ret
  258.  
  259.  
  260. addPerenos:  ;äîáàâëÿåò ïåðåíîñ ñòðîêè â áóôåð
  261.    mov byte[eax], 13
  262.    inc eax
  263.    mov byte[eax], 10
  264.    inc eax
  265.    ret
  266.  
  267. ;îáðàáîò÷èê êíîïêè "Ïðèìåíèòü"
  268. applyButton:
  269.     push eax ebx ecx
  270.         ;mov dword[createFile.data_adr], defaultDataForConfig
  271.         ;mov dword[createFile.size], defaultDataSize
  272.  
  273.         ;âû÷èñëèì ðàçìåð ôàéëà êîíôèãóðàöèè â áàéòàõ
  274.         mov ecx, 5*2+1 ;1 áàéò íà ñîñòîÿíèå àêòèâíîñòè è 5 ïàð ïåðåíîñîâ ñòðîê (ñèìâîëû 13, 10)
  275.         add ecx, dword[editLU.size] ;ïëþñ ðàçìåð êàæäîé ñòðîêè â áàéòàõ
  276.         add ecx, dword[editLD.size]
  277.         add ecx, dword[editRU.size]
  278.         add ecx, dword[editRD.size] ;dataBuffer.size4]
  279.  
  280.         ;åñëè çàäàíû ïóñòûå ñòðîêè, òî ìû àâòîìàòè÷åñêè äîáàâëÿåì çíàê ìèíóñ, çíà÷èò ðàçìåð +1 áàéò
  281.         cmp dword[editLU.size], 0
  282.         jne @f
  283.         inc ecx
  284. @@:
  285.         cmp dword[editLD.size], 0
  286.         jne @f
  287.         inc ecx
  288. @@:
  289.         cmp dword[editRU.size], 0
  290.         jne @f
  291.         inc ecx
  292. @@:
  293.         cmp dword[editRD.size], 0
  294.         jne @f
  295.         inc ecx
  296. @@:
  297.  
  298.         ;òåïåðü ðàçìåð ôàéëà êîíôèãóðàöèè â ecx
  299.         mov dword[createFile.size], ecx ;ïîëîæèì ðàçìåð áàéò â ñòðóêòóðó ñîçäàíèÿ/ïåðåçàïèñè ôàéëà
  300.         mcall 68, 12, ecx ;âûäåëÿåì áëîê ïàìÿòè ïîä áóôåð ñîäåðæèìîãî
  301.         mov dword[createFile.data_adr], eax ;ñîõðàíÿåì àäðåñ áóôåðà â ñòðóêòóðó
  302.  
  303.         ;çàïîëíèì áóôåð ñîäåðæèìîãî:
  304.         ;cmp byte[mode], 0
  305.         ;jne @f
  306.         ;@@:
  307.         ;
  308.  
  309.         push ebx    ;ñîõðàíÿåì âûáðàííûé ðåæèì
  310.         mov bl, byte[mode]
  311.         mov byte[eax], bl
  312.         pop ebx
  313.  
  314.         inc eax
  315.         call addPerenos
  316.  
  317.         push esi ebx
  318.         call UpdateEditsSizes ;îáíîâèòü ðàçìåðû òåêñòà â edit'àõ
  319.  
  320.         mov esi, dataBuffer.1     ;editLU.text
  321.         mov ebx, dataBuffer.size1 ;editLU.size
  322.         call copyParam
  323.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  324.  
  325.         mov esi, dataBuffer.2
  326.         mov ebx, dataBuffer.size2
  327.         call copyParam
  328.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  329.  
  330.         mov esi, dataBuffer.3
  331.         mov ebx, dataBuffer.size3
  332.         call copyParam
  333.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  334.  
  335.         mov esi, dataBuffer.4
  336.         mov ebx, dataBuffer.size4
  337.         call copyParam
  338.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  339.  
  340.         pop ebx esi
  341.  
  342.  
  343.     mov ebx, createFile
  344.     mcall 70
  345.         cmp eax, 0
  346.         je .end
  347.         ;èíà÷å çäåñü íóæíî âûâåñòè îêíî ñ îøèáêîé !!!
  348. .end:
  349.         mcall 68, 13, dword[createFile.data_adr]  ;îñâîáîæäàåì ïàìÿòü ïîä áóôåð
  350.         call finishHotAnglesApp ;çàâåðøàåì ðàáîòó âñåõ êîïèé ñåðâèñà @HOTANGLES
  351.         call loadConfig         ;ïåðåçàãðóæàåì ôàéë êîíôèãà
  352.         call draw_window        ;ïåðåðèñîâûâàåì îêíî
  353.         call startHotAnglesApp  ;ïåðåçàïóñêàåì @HOTANGLES
  354.         pop ecx ebx eax
  355.     ret
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362. compareBytes2:
  363.    push edi esi ecx ebx
  364.    xor eax, eax
  365.    mov ecx, 10  ;max ðàçìåð ñòðîê 11
  366. @@:
  367.    mov bl, byte[edi]
  368.    cmp bl, byte[esi]
  369.    jne compareBytes.no
  370.    inc edi
  371.    inc esi
  372.    cmp ecx, 0
  373.    je @f
  374.    dec ecx
  375.    jmp @b
  376. .no:
  377.    mov eax, 1
  378. @@:
  379.    pop ebx ecx esi edi
  380.    ret
  381.  
  382.  
  383. finishHotAnglesApp:
  384.    ;íàõîäèì âñå êîïèè ïðèëîæåíèÿ ïî èìåíè è çàâåðøàåì èõ
  385.    push eax ebx ecx esi edi
  386.    ;óêàçàòåëè, êîòîðûå íèêîãäà íå ìåíÿþòñÿ:
  387.    mov esi, startAppData.file_name       ;ïåðâàÿ ñòðîêà - èñêîìîå èìÿ ïðèëîæåíèÿ
  388.    mov edi, buf            ;âòîðàÿ ñòðîêà - èìÿ òåêóùåãî ñëîòà
  389.    add edi, 10
  390.  
  391.    mov ecx, 1
  392. @@:
  393.    mcall 9, buf, ecx              ;ïîëó÷àåì äàííûå î÷åðåäíîãî ñëîòà
  394.    mov dword[slotMax], eax
  395.  
  396.    call compareBytes2 ;ñðàâíèâàåì èìÿ
  397.    cmp eax, 0
  398.    jne finishHotAnglesApp.next   ;åñëè íå ñîâïàëî, òî ïåðåõîäèì íà ñëåäóþùèé ñëîò
  399.  
  400.    mcall 18, 2, ecx               ;èíà÷å çàâåðøàåì ñëîò
  401. .next:
  402.    inc  ecx
  403.    cmp ecx, dword[slotMax]
  404.    ja @f
  405.    jmp @b
  406. @@:
  407.    pop edi esi ecx ebx eax
  408.    ret
  409.  
  410. startHotAnglesApp:
  411.    ;çàïóñêàåì ïðèëîæåíèå çàíîâî
  412.    push eax ebx
  413.    mcall 70, startAppData
  414.    cmp eax, 0
  415.    ja @f       ;åñëè eax>0, òî óñïåøíî çàïóùåíî
  416.    ;!!! èíà÷å òóò ïå÷àòàåì îøèáêó
  417. @@:
  418.    pop ebx eax
  419.    ret
  420.  
  421. startAppData:
  422.     .subfunction dd   7
  423.     .flags       dd   0
  424.     .param       dd   0
  425.     .rezerv      dd   0, 0
  426.     .full_name   db   '/rd/1/'
  427.     .file_name   db   '@HOTANGLES', 0
  428.  
  429. UpdateEditsSizes:
  430.    push eax
  431.    mov eax, dword[editLU.size]
  432.    mov dword[dataBuffer.size1], eax
  433.  
  434.    mov eax, dword[editLD.size]
  435.    mov dword[dataBuffer.size2], eax
  436.  
  437.    mov eax, dword[editRU.size]
  438.    mov dword[dataBuffer.size3], eax
  439.  
  440.    mov eax, dword[editRD.size]
  441.    mov dword[dataBuffer.size4], eax
  442.  
  443.    pop eax
  444.    ret
  445.  
  446. fileAdr dd 0
  447.  
  448. loadConfig:
  449.    push eax ebx ecx edx
  450.    mcall 68, 27, fileName   ;çàãðóæàåì êîíôèãóðàöèîííûé ôàéë â ÎÇÓ
  451.    mov dword[fileAdr], eax  ;ñîõðàíÿåì àäðåñ áëîêà ïàìÿòè ôàéëà
  452.    cmp eax, 0
  453.    je loadConfig.default       ;åñëè ôàéëà êîíôèãóðàöèè íåò, òî ñòàâèì íàñòðîéêè ïî óìîë÷àíèþ
  454.    ;èíà÷å äàííûå çàãðóæåíû â ÎÇÓ, ðàçìåð â edx
  455.    cmp edx, 0               ;åñëè ôàéë ïóñò, â í¸ì íåò äàííûõ, òî ñòàâèì íàñòðîéêè ïî óìîë÷àíèþ
  456.    je loadConfig.default
  457. .start:
  458.    add edx, eax             ;êëàä¸ì â edx - àäðåñ êîíöà êîíôèã.äàííûõ
  459.  
  460. .chStart:
  461.  
  462.    push ebx
  463.    mov bl, byte[eax]
  464.    cmp bl, 48          ; åñëè çíà÷åíèå âûõîäèò çà äîïóñòèìûå ïðåäåëû, òî ïðîâåðÿåì íà 'n' (äëÿ ñîâìåñòèìîñòè)
  465.    jb loadConfig.checkN
  466.    cmp bl, 51
  467.    ja loadConfig.checkN
  468.  
  469.    mov byte[mode], bl  ;èíà÷å óñòàíàâëèâàåì ýòîò ðåæèì êàê åñòü
  470.    jmp loadConfig.modeEnd   ;è èä¸ì äàëüøå
  471. .checkN:
  472.    cmp bl, 'n'             ;åñëè n - òî ðåæèì "îòêëþ÷åíî"
  473.    jne @f
  474.    mov byte[mode], 48 ;'0'
  475.    jmp loadConfig.modeEnd
  476. @@:
  477.    mov byte[mode], 49 ;'1' èíà÷å ïî óìîë÷àíèþ âêëþ÷¸í êëàññè÷åñêèé ðåæèì ðàáîòû
  478. .modeEnd:
  479.    pop ebx
  480.    ;jmp loadConfig.end   ;êîìàíäà äëÿ óäîáñòâà îòëàäêè è ïîèñêà îøèáîê
  481.  
  482.    ;êîïèðóåì ñîäåðæèìîå ñòðîê â áóôåð
  483.    push edi esi ecx ebx eax
  484.    ;èíèöèàëèçèðóåì óêàçàòåëè íà àäðåñà áóôåðà ñòðîêè è å¸ ðàçìåðà
  485.    mov edi, dataBuffer.1
  486.    mov esi, dataBuffer.size1
  487.    ;ecx - ñ÷¸ò÷èê áàéò â ñòðîêå
  488. .block:
  489.    xor ecx, ecx ;îáíóëÿåì ñ÷¸ò÷èê
  490.    inc eax
  491.    cmp byte[eax], 10         ;åñëè î÷åðåäíîé êîä ñèìâîëà 10 èëè 13, òî ïðîïóñêàåì ñèìâîëû
  492.    je loadConfig.block       ;äî ïåðâîãî îòëè÷íîãî îò íèõ
  493.    cmp byte[eax], 13
  494.    je loadConfig.block
  495.  
  496.    ; ñèìâîë îòëè÷åí îò ïåðåíîñà ñòðîêè è âîçâðàòà êàðåòêè - íà÷èíàåì êîïèðîâàòü îòñþäà â áóôåð
  497.    mov bl, byte[eax]
  498.    mov byte[edi], bl
  499.    inc edi
  500.    inc eax
  501.    inc ecx ;óâåëè÷èâàåì ñ÷¸ò÷èê ñèìâîëîâ â ñòðîêå
  502.  
  503.    ;èä¸ì äî êîíöà ýòîé ñòðîêè: ïîêà íå âñòðåòèì î÷åðåäíîé 10, 13, 0 èëè file end
  504. .while:     ;è êîïèðóåì âñ¸ â áóôåð
  505.    cmp eax, edx           ;ïðîâåðÿåì çàêîí÷èëñÿ ëè ôàéë, à êîíöà ñòðîêè íå áûëî !!!
  506.    ja loadConfig.ura
  507.    cmp byte[eax], 10
  508.    je loadConfig.ura
  509.    cmp byte[eax], 0
  510.    je loadConfig.ura
  511.    cmp byte[eax], 13
  512.    je loadConfig.ura
  513.  
  514.    mov bl, byte[eax]
  515.    mov byte[edi], bl
  516.    inc edi
  517.    inc eax
  518.    inc ecx
  519.    cmp ecx, 511
  520.    jae loadConfig.ura
  521.    jmp loadConfig.while
  522. .ura:
  523.    mov byte[edi], 0      ;êëàä¸ì çàâåðøàþùèé 0 â ñòðîêó
  524.    mov dword[esi], ecx   ;ñîõðàíÿåì ðàçìåð ñòðîêè
  525.    add esi, 4            ;ïåðåõîäèì íà ðàçìåð ñëåäóþùåãî áóôåðà
  526.    sub edi, ecx          ;ïåðåõîäèì íà ñëåäóþùèé áóôåð
  527.    add edi, 512
  528.    ;xor ecx, ecx          ;îáíóëÿåì ðàçìåð ñòðîêè
  529.  
  530.    cmp edi, dataBuffer.size1 ;åñëè ýòî áûë ïîñëåäíèé áóôåð (è ìû âûøëè çà àäðåñà ðàçìåðîâ áóôåðîâ), òî âûõîäèì
  531.    jb loadConfig.block
  532.  
  533.    pop eax ebx ecx esi edi
  534.  
  535.    jmp loadConfig.end
  536. .default:
  537.    mov eax, defaultDataForConfig
  538.    mov edx, defaultDataSize
  539.    jmp loadConfig.start
  540. .end:
  541.    mov ecx, dword[fileAdr]    ;åñëè ôàéë áûë çàãðóæåí, òî
  542.    cmp ecx, 0
  543.    je @f
  544.    mcall 68, 13, ecx  ;âûãðóæàåì ôàéë èç ïàìÿòè
  545. @@:
  546.    call updateParams ;ïðèìåíÿåì íàñòðîéêè êàæäîãî áóôåðà
  547.    pop edx ecx ebx eax
  548.    ret
  549.  
  550.  
  551. updateParams: ;max, size, pos
  552.    push eax
  553.    mov eax, dword[dataBuffer.size1]
  554.    mov dword[editLU.size], eax
  555.    mov dword[editLU.pos], eax
  556.  
  557.    mov eax, dword[dataBuffer.size2]
  558.    mov dword[editLD.size], eax
  559.    mov dword[editLD.pos], eax
  560.  
  561.    mov eax, dword[dataBuffer.size3]
  562.    mov dword[editRU.size], eax
  563.    mov dword[editRU.pos], eax
  564.  
  565.    mov eax, dword[dataBuffer.size4]
  566.    mov dword[editRD.size], eax
  567.    mov dword[editRD.pos], eax
  568.    pop eax
  569.    ret
  570.  
  571.  
  572.  
  573. selfName db 'HACONFIG', 0
  574. selfNameSize = 8 ;äî 11 byte
  575. ;
  576. compareBytes:
  577.    push edi esi ecx ebx
  578.    mov eax, 0 ;xor eax, eax
  579.    mov ecx, selfNameSize    ;max ðàçìåð ñòðîê 11
  580. @@:
  581.    mov bl, byte[edi]
  582.    cmp bl, byte[esi]
  583.    jne compareBytes.no
  584.    inc edi
  585.    inc esi
  586.    cmp ecx, 0
  587.    je @f
  588.    dec ecx
  589.    jmp @b
  590. .no:
  591.    mov eax, 1
  592. @@:
  593.    pop ebx ecx esi edi
  594.    ret
  595. ;
  596. slotMax dd 0
  597. selfPID dd 0
  598. buf db 1024 dup(0)
  599. copyKill:
  600.    push eax ebx ecx esi edi
  601.  
  602.    ;ñïåðâà ïðî÷ò¸ì ñâîþ èíôîðìàöèþ
  603.    mcall 9, buf, -1
  604.    mov eax, dword[buf+30]
  605.    mov dword[selfPID], eax
  606.  
  607.    ;óêàçàòåëè, êîòîðûå íèêîãäà íå ìåíÿþòñÿ:
  608.    mov esi, selfName       ;ïåðâàÿ ñòðîêà - èìÿ òåêóùåãî ïðèëîæåíèÿ
  609.    mov edi, buf            ;âòîðàÿ ñòðîêà - èìÿ òåêóùåãî ñëîòà
  610.    add edi, 10
  611.  
  612.    mov ecx, 1
  613. @@:
  614.    mcall 9, buf, ecx
  615.    mov dword[slotMax], eax
  616.  
  617.    ;åñëè ýòî ìû ñàìè, òî ïðîïóñêàåì ïðîâåðêó
  618.    mov eax, dword[buf+30]
  619.    cmp eax, dword[selfPID]
  620.    je copyKill.propusk
  621.  
  622.    call compareBytes   ;ñðàâíèâàåì 11 áàéò ñòðîê, ðåçóëüòàò â eax
  623.  
  624.    cmp eax, 0
  625.    je copyKill.selfKill
  626.  
  627. .propusk:
  628.    inc ecx
  629.    cmp ecx, dword[slotMax]
  630.    ja @f
  631.    jmp @b
  632.  
  633. .selfKill:
  634.    pop edi esi ecx ebx eax
  635.    mcall -1
  636.    ret
  637. @@:
  638.    pop edi esi ecx ebx eax
  639.    ret
  640.  
  641.  WindowsWidth  = 450
  642.  WindowsHeight = 195
  643. coord:      ;êîîðäèíàòû îêíà ïðèëîæåíèÿ
  644.  .y dw 0
  645.  .x dw 0
  646.  
  647. draw_window:
  648.         ;óäàëÿåì êíîïêó, åñëè åñòü
  649.         mov edx, 0x80000002
  650.         mcall 8
  651.  
  652.         ;óäàëÿåì åù¸ 4 êíîïêè åñëè îíè åñòü
  653.         mov edx, 0x80000004
  654.         mcall 8
  655.         mov edx, 0x80000005
  656.         mcall 8
  657.         mov edx, 0x80000006
  658.         mcall 8
  659.         mov edx, 0x80000007
  660.         mcall 8
  661.  
  662.         mov     eax, 12                 ; function 12: tell os about windowdraw
  663.         mov     ebx, 1                  ; 1, start of draw
  664.         mcall
  665.  
  666.         ;îòîáðàçèì îêíî ïî öåíòðó ýêðàíà äëÿ ýòîãî:
  667.         mcall 14 ;ïîëó÷èì ðàçìåðû ýêðàíà
  668.         mov dword[coord], eax       ;ïîëîæèì ðàçìåðû ýêðàíà â êîîðäèíàòû
  669.         shr word[coord.x], 1        ;âåðíåå ïîëîæèì èõ ïîëîâèíó
  670.         shr word[coord.y], 1
  671.  
  672.         ;âû÷èñëÿåì êîîðäèíàòû îêíà, ÷òîáû îêíî áûëî ïî ñåðåäèíå ýêðàíà
  673.         sub word[coord.x], WindowsWidth/2
  674.         sub word[coord.y], WindowsHeight/2
  675.  
  676.         mov     eax, 0                  ; function 0 : define and draw window
  677.         mov     ebx, 0                  ; [x start] *65536 + [x size]
  678.         mov bx, word[coord.x]
  679.         shl  ebx, 16
  680.         mov bx, WindowsWidth
  681.  
  682.         mov ecx, 0
  683.         mov     cx, word[coord.y]       ; [y start] *65536 + [y size]
  684.         shl ecx, 16
  685.         mov cx, WindowsHeight
  686.  
  687.         mov     edx, 0x14ffffff         ; color of work area RRGGBB
  688.                                         ; 0x02000000 = window type 4 (fixed size, skinned window)
  689.         mov     esi, 0x808899ff         ; color of grab bar  RRGGBB
  690.                                         ; 0x80000000 = color glide
  691.         mov     edi, title
  692.         mcall
  693.  
  694.         invoke  edit_box_draw, editLU  ;ðèñîâàíèå edit box'îâ
  695.         invoke  edit_box_draw, editLD
  696.         invoke  edit_box_draw, editRU
  697.         invoke  edit_box_draw, editRD
  698.  
  699.         ;ðèñóåì êíîïêó
  700.         mov ebx, (WindowsWidth-80-Otstup)*65536 + 80 ;êîîðäèíàòà X, øèðèíà êíîïêè
  701.         mov ecx, 160*65536 + 20   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  702.         mov edx, 0x00000002 ;2    ;íîìåð êíîïêè
  703.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  704.         mcall 8
  705.         ;ðèñóåì òåêñò êíîïêè
  706.         mov     ebx, (WindowsWidth-80-Otstup+25-buttonTextXoffset) * 65536 + 166    ;êîîðäèíàòû òåêñòà (x, y)
  707.         mov     ecx, 0xFFFFFF     ;áåëûé öâåò òåêñòà
  708.         mov     edx, buttonText
  709.         mov     esi, buttonTextSize  ;ðàçìåð òåêñòà â ñèìâîëàõ
  710.         mcall 4
  711.  
  712.         ;ðèñóåì åù¸ 4 êíîïêè äëÿ äèàëîãîâîãî îêíà âûáîðà ôàéëà
  713.         ;íîìåðà 4,5,6 è 7
  714.         buttonH = 14
  715.         buttonW = 30
  716.         ;ëåâûé âåðõíèé óãîë
  717.         mov ebx, Otstup*65536 + buttonW ;êîîðäèíàòà X, øèðèíà êíîïêè
  718.         mov ecx, 85*65536 + buttonH   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  719.         mov edx, 0x00000004       ;íîìåð êíîïêè
  720.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  721.         mcall 8
  722.         ;ëåâûé íèæíèé óãîë
  723.         mov ebx, Otstup*65536 + buttonW ;êîîðäèíàòà X, øèðèíà êíîïêè
  724.         mov ecx, 120*65536 + buttonH   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  725.         mov edx, 0x00000005       ;íîìåð êíîïêè
  726.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  727.         mcall 8
  728.         ;ïðàâûé âåðõíèé óãîë
  729.         mov ebx, (WindowsWidth-Otstup-buttonW)*65536 + buttonW ;êîîðäèíàòà X, øèðèíà êíîïêè
  730.         mov ecx, 85*65536 + buttonH   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  731.         mov edx, 0x00000006       ;íîìåð êíîïêè
  732.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  733.         mcall 8
  734.         ;ïðàâûé íèæíèé óãîë
  735.         mov ebx, (WindowsWidth-Otstup-buttonW)*65536 + buttonW ;êîîðäèíàòà X, øèðèíà êíîïêè
  736.         mov ecx, 120*65536 + buttonH   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  737.         mov edx, 0x00000007       ;íîìåð êíîïêè
  738.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  739.         mcall 8
  740.  
  741.         ;ðèñóåì òåêñòû äëÿ ýòèõ 4 êíîïîê
  742.         mov     ecx, 0xFFFFFF              ;áåëûé öâåò òåêñòà
  743.         mov     edx, commonButtonText      ;ñòðîêà òåêñòà
  744.         mov     esi, commonButtonTextSize  ;ðàçìåð òåêñòà â ñèìâîëàõ
  745.         ;êîîðäèíàòû òåêñòà (x, y)
  746.         deltaCommonTextX = 7
  747.         deltaCommonTextY = 2
  748.         mov     ebx, (Otstup+deltaCommonTextX) * 65536 + (85 + deltaCommonTextY)
  749.         mcall 4
  750.         mov     ebx, (Otstup+deltaCommonTextX) * 65536 + (120 + deltaCommonTextY)
  751.         mcall 4
  752.         mov     ebx, (WindowsWidth-Otstup-buttonW+deltaCommonTextX) * 65536 + (85 + deltaCommonTextY)
  753.         mcall 4
  754.         mov     ebx, (WindowsWidth-Otstup-buttonW+deltaCommonTextX) * 65536 + (120 + deltaCommonTextY)
  755.         mcall 4
  756.  
  757.         ;delete mode button, if it exist
  758.         mov edx, 0x80000008
  759.         mcall 8
  760.         ;draw button Mode
  761.         buttonModeX = 30 ;433
  762.         buttonModeY = 160 ;50
  763.         buttonModeWidth = 221
  764.         buttonModeHeight = 20
  765.         buttonModeTextXoffset = 5
  766.         mov ebx, buttonModeX*65536 + buttonModeWidth  ;X + Width
  767.         mov ecx, buttonModeY*65536 + buttonModeHeight ;Y + Height
  768.         mov edx, 0x00000008    ;button id
  769.         mov esi, 0x00FFFFFF    ;color button
  770.         mcall 8
  771.         mov ebx, (buttonModeX+2+buttonModeWidth-20)*65536 + (20-2)  ;X + Width
  772.         mov ecx, (buttonModeY+1)*65536 + buttonModeHeight-2   ;Y + Height
  773.         mov edx, 0xAABBCC
  774.         mcall 13
  775.         ;draw text for button Mode
  776.         mov     ebx, (buttonModeX+buttonModeTextXoffset) * 65536 + (buttonModeY+6)    ;(x, y)
  777.         mov     ecx, 0x000000
  778.         call setTextModeMenu
  779.         mov     esi, valueModeMenuSize
  780.         mcall 4
  781.         mov     ebx, (buttonModeX+buttonModeWidth-12) * 65536 + (buttonModeY+6)
  782.         mov     ecx, 0x80FFFFFF
  783.         mov     edx, symbolDownArrow
  784.         mcall 4
  785.  
  786.         call draw_super_text
  787.  
  788.         LineLength = 62
  789.         mov     ebx, 40 * 65536 + 36    ; draw info text with function 4 (x, y)
  790.         mov     ecx, 0x224466
  791.         mov     edx, text
  792.         mov     esi, LineLength
  793.         mov     eax, 4
  794.  
  795.   .newline:                             ; text from the DATA AREA
  796.         mcall
  797.         add     ebx, 12
  798.         add     edx, LineLength
  799.         cmp     byte[edx], 0
  800.         jne     .newline
  801.  
  802.         mov     eax, 12                 ; function 12:tell os about windowdraw
  803.         mov     ebx, 2                  ; 2, end of draw
  804.         mcall
  805.  
  806.         ret
  807.  
  808.  
  809. setTextModeMenu:
  810.    cmp byte[mode], 48
  811.    jne @f
  812.         mov edx, valueModeMenu0
  813.         ret
  814. @@:
  815.    cmp byte[mode], 49
  816.    jne @f
  817.         mov edx, valueModeMenu1
  818.         ret
  819. @@:
  820.    cmp byte[mode], 50
  821.    jne @f
  822.         mov edx, valueModeMenu2
  823.         ret
  824. @@:
  825.    cmp byte[mode], 51
  826.    jne @f
  827.         mov edx, valueModeMenu3
  828.         ret
  829. @@:
  830.    mov edx, valueModeMenu1
  831.    ret
  832.  
  833.  
  834. align 16
  835. @IMPORT:
  836.  
  837. library box_lib, 'box_lib.obj'
  838.  
  839. import  box_lib,\
  840.         edit_box_draw,          'edit_box',\
  841.         edit_box_key,           'edit_box_key',\
  842.         edit_box_mouse,         'edit_box_mouse',\
  843.         init_checkbox,          'init_checkbox2',\
  844.         check_box_draw,         'check_box_draw2',\
  845.         check_box_mouse,        'check_box_mouse2',\
  846.         option_box_draw,        'option_box_draw',\
  847.         option_box_mouse,       'option_box_mouse'
  848.  
  849. commonButtonText db '...', 0  ;òåêñò äëÿ êíîïîê âûçîâà OpenDial
  850. commonButtonTextSize = 3
  851.  
  852. if lang eq ru  ;åñëè ÿçûê ñáîðêè ðóññêèé
  853.  
  854. text    db  "Š®­ä¨£ãà â®à Hot Angles ®â¢¥ç ¥â §  ­ áâனªã  ªâ¨¢­ëå 㣫®¢. "
  855.         db  " áâன⥠¯ à ¬¥âàë ¯®¤ á¥¡ï ¨«¨ ®âª«îç¨â¥ íâã ®¯æ¨î.         "
  856.         db  "                                                              ", 0
  857.  hed:
  858. title   db  "Š®­ä¨£ãà â®à ã⨫¨âë Hot Angles", 0
  859. buttonText db "à¨¬¥­¨âì", 0
  860. buttonTextSize = 9
  861. buttonTextXoffset = 12
  862.  
  863. ch_text db '‚ª«îç¨âì/ ªâ¨¢¨à®¢ âì "Hot Angles"', 0
  864.  
  865. superText:
  866.   .lu db 'Š®¬ ­¤  «¥¢®£® ¢¥àå­¥£® 㣫 : ', 0
  867.   .ld db 'Š®¬ ­¤  «¥¢®£® ­¨¦­¥£® 㣫 :  ', 0
  868.   .ru db 'Š®¬ ­¤  ¯à ¢®£® ¢¥àå­¥£® 㣫 :', 0
  869.   .rd db 'Š®¬ ­¤  ¯à ¢®£® ­¨¦­¥£® 㣫 : ', 0
  870. superTextSize = 30
  871.  
  872. valueModeMenuSize = 32
  873. ModeMenu  db '¥¦¨¬ à ¡®âë:',0
  874. valueModeMenu0  db '®âª«î祭®                       ',0
  875. valueModeMenu1  db 'ª« áá¨ç¥áª¨© ०¨¬              ',0
  876. valueModeMenu2  db '०¨¬ £®àï祩 ª« ¢¨è¨           ',0
  877. valueModeMenu3  db '०¨¬ ¦¥áâ  ¯® ª« ¢¨è¥  ªâ¨¢ æ¨¨',0
  878.  
  879. head_f_i:
  880.         head_f_l  db '‘¨á⥬­ ï ®è¨¡ª ',0
  881.         err_message_found_lib0 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'proc_lib.obj',39,0
  882.         err_message_import0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0
  883.         err_message_found_lib1 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'kmenu.obj',39,0
  884.         err_message_import1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'kmenu',39,0
  885.  
  886. else  ;èíà÷å àíãëèéñêèé òåêñò
  887.  
  888. text    db  "This is a Hot Angles Configurator.                            "
  889.         db  "Set the parameters bellow for yourself or disable this option."
  890.         db  "                                                              ", 0
  891.  hed:
  892. title   db  "Hot Angles Configurator", 0
  893. buttonText db "Apply", 0
  894. buttonTextSize = 5
  895. buttonTextXoffset = 0
  896.  
  897. ch_text db 'Activate "Hot Angles"',0       ;ñîïðîâîæäàþùèé òåêñò äëÿ ÷åê áîêñà
  898.  
  899. superText:
  900.   .lu db 'Left up angle command:   ', 0
  901.   .ld db 'Left down angle command: ', 0
  902.   .ru db 'Right up angle command:  ', 0
  903.   .rd db 'Right down angle command:', 0
  904. superTextSize = 25
  905.  
  906. valueModeMenuSize = 32
  907. ModeMenu  db 'Mode:',0
  908. valueModeMenu0  db 'disabled                        ',0
  909. valueModeMenu1  db 'classic mode                    ',0
  910. valueModeMenu2  db 'hot key mode                    ',0
  911. valueModeMenu3  db 'activation key gesture mode     ',0
  912.  
  913. head_f_i:
  914.         head_f_l  db 'System error',0
  915.         err_message_found_lib0 db 'Could not find library ',39,'proc_lib.obj',39,0
  916.         err_message_import0 db 'Error importing library ',39,'proc_lib.obj',39,0
  917.         err_message_found_lib1 db 'Could not find library ',39,'kmenu.obj',39,0
  918.         err_message_import1 db 'Error importing library ',39,'kmenu',39,0
  919.  
  920. end if
  921.  
  922.  
  923. draw_super_text:
  924.    push eax ebx ecx edx edi esi
  925.    mov     ebx, Otstup * 65536 + 74    ; draw info text with function 4 (x, y)
  926.    mov     ecx, 0x224466
  927.    mov eax, superText.lu
  928.    mov     edx, eax
  929.    mov     esi, superTextSize
  930.    mcall 4
  931.  
  932.    mov     ebx, Otstup * 65536 + 109
  933.    mov     edx, superText.ld
  934.    mov     esi, superTextSize
  935.    mcall 4
  936.  
  937.    mov     ebx, 240 * 65536 + 74
  938.    mov     edx, superText.ru
  939.    mov     esi, superTextSize
  940.    mcall 4
  941.  
  942.    mov     ebx, 240 * 65536 + 109
  943.    mov     edx, superText.rd
  944.    mov     esi, superTextSize
  945.    mcall 4
  946.  
  947.    mov     ebx, Otstup * 65536 + (buttonModeY-11)
  948.    or ecx, 0x80000000
  949.    mov     edx, ModeMenu
  950.    mov     esi, 3
  951.    mcall 4
  952.  
  953.    pop esi edi edx ecx ebx eax
  954.    ret
  955.  
  956. editID db 0
  957. initEBX:
  958.    cmp byte[editID], 4
  959.    jne @f
  960.    mov ebx, dataBuffer.1
  961.    ret
  962. @@:
  963.    cmp byte[editID], 5
  964.    jne @f
  965.    mov ebx, dataBuffer.2
  966.    ret
  967. @@:
  968.    cmp byte[editID], 6
  969.    jne @f
  970.    mov ebx, dataBuffer.3
  971.    ret
  972. @@:
  973.    cmp byte[editID], 7
  974.    jne @f
  975.    mov ebx, dataBuffer.4
  976.    ret
  977. @@:
  978.    ret
  979. setRESULT:
  980.    cmp byte[editID], 4
  981.    jne @f
  982.    mov dword[dataBuffer.size1], ecx
  983.    mov dword[editLU.size], ecx
  984.    mov dword[editLU.pos], ecx
  985.    ret
  986. @@:
  987.    cmp byte[editID], 5
  988.    jne @f
  989.    mov dword[dataBuffer.size2], ecx
  990.    mov dword[editLD.size], ecx
  991.    mov dword[editLD.pos], ecx
  992.    ret
  993. @@:
  994.    cmp byte[editID], 6
  995.    jne @f
  996.    mov dword[dataBuffer.size3], ecx
  997.    mov dword[editRU.size], ecx
  998.    mov dword[editRU.pos], ecx
  999.    ret
  1000. @@:
  1001.    cmp byte[editID], 7
  1002.    jne @f
  1003.    mov dword[dataBuffer.size4], ecx
  1004.    mov dword[editRD.size], ecx
  1005.    mov dword[editRD.pos], ecx
  1006.    ret
  1007. @@:
  1008.    ret
  1009. copyPath:
  1010.    push eax ebx ecx edx ;copy file name path
  1011.         mov eax, openfile_path ;dword[OpenDialog_data.openfile_path]
  1012.         call initEBX ;mov ebx, dataBuffer.1 ;.data
  1013.         mov ecx, 0
  1014.       @@:
  1015.         mov dl, byte[eax]
  1016.         cmp dl, 0 ;byte[eax], 0
  1017.         je @f
  1018.         mov byte[ebx], dl
  1019.         inc eax
  1020.         inc ebx
  1021.         inc ecx
  1022.         jmp @b
  1023.       @@:
  1024.         mov byte[ebx], 0
  1025.         call setRESULT
  1026.    pop edx ecx ebx eax
  1027.    ret
  1028.  
  1029.  
  1030. align 4
  1031. but_open_dlg:
  1032.         pushad
  1033.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  1034.         mov [OpenDialog_data.type],0
  1035.         stdcall[OpenDialog_Start], OpenDialog_data
  1036.         cmp [OpenDialog_data.status],2
  1037.         je @f
  1038.         cmp [OpenDialog_data.status],0 ;ïîëüçîâàòåëü íàæàë Cancel?
  1039.         je .end_open
  1040.                 ;êîä ïðè óäà÷íîì îòêðûòèè äèàëîãà
  1041.                 call copyPath
  1042.                 jmp .end_open
  1043.         @@:
  1044.                 ;êîä ïðè íå óäà÷íîì îòêðûòèè äèàëîãà
  1045.                 ;...
  1046.         .end_open:
  1047.         popad
  1048.         ret
  1049.  
  1050. ;äàííûå äëÿ äèàëîãà îòêðûòèÿ ôàéëîâ
  1051. align 4
  1052. OpenDialog_data:
  1053. .type                   dd 0 ;0 - îòêðûòü, 1 - ñîõðàíèòü, 2 - âûáðàòü äèðåêòîðèþ
  1054. .procinfo               dd procinfo
  1055. .com_area_name          dd communication_area_name ;+8
  1056. .com_area               dd 0           ;+12
  1057. .opendir_path           dd plugin_path ;+16
  1058. .dir_default_path       dd default_dir ;+20
  1059. .start_path             dd file_name   ;+24 ïóòü ê äèàëîãó îòêðûòèÿ ôàéëîâ
  1060. .draw_window            dd draw_window ;+28
  1061. .status                 dd 0           ;+32
  1062. .openfile_path          dd openfile_path ;+36 ïóòü ê îòêðûâàåìîìó ôàéëó
  1063. .filename_area          dd filename_area ;+40
  1064. .filter_area            dd Filter
  1065. .x:
  1066. .x_size                 dw 420 ;+48 ; Window X size
  1067. .x_start                dw 10  ;+50 ; Window X position
  1068. .y:
  1069. .y_size                 dw 320 ;+52 ; Window y size
  1070. .y_start                dw 10  ;+54 ; Window Y position
  1071.  
  1072. default_dir db '/rd/1',0 ;äèðåêòîðèÿ ïî óìîë÷àíèþ
  1073. communication_area_name: db 'FFFFFFFF_open_dialog',0
  1074. open_dialog_name:  db 'opendial',0
  1075. communication_area_default_path: db '/rd/1/File managers/',0
  1076.  
  1077. Filter:
  1078. dd Filter.end - Filter.1
  1079. .1:
  1080. ;db 'KEX',0
  1081. .end:
  1082. db 0
  1083.  
  1084. mode db 49 ;'1'
  1085. modeMenu dd 0
  1086. coordModeMenu:
  1087.   .x dw 100
  1088.   .y dw 200
  1089.  
  1090.  
  1091. align 4
  1092. proclib_import: ;îïèñàíèå ýêñïîðòèðóåìûõ ôóíêöèé
  1093.         OpenDialog_Init dd aOpenDialog_Init
  1094.         OpenDialog_Start dd aOpenDialog_Start
  1095. dd 0,0
  1096.         aOpenDialog_Init db 'OpenDialog_init',0
  1097.         aOpenDialog_Start db 'OpenDialog_start',0
  1098.  
  1099. system_dir0 db '/sys/lib/'
  1100. lib0_name db 'proc_lib.obj',0
  1101. lib1_name db 'kmenu.obj',0
  1102.  
  1103. symbolDownArrow db 25,0
  1104.  
  1105. ;library structures
  1106. l_libs_start:
  1107.     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
  1108.     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
  1109. load_lib_end:
  1110.  
  1111.  
  1112. edMaxSize = 510 ;òåïåðü ñ íîâûì êîìïîíåíòîì ìîæíî è 511 óêàçàòü
  1113. edMax = 0 ;max, size, pos
  1114.  
  1115. align 4
  1116. editLU   edit_box 180-buttonW,Otstup+buttonW,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.1, mouse_dd, 0, edMax, edMax  ;ed_focus
  1117. editLD   edit_box 180-buttonW,Otstup+buttonW,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.2, mouse_dd, 0, edMax, edMax
  1118. editRU   edit_box 180-buttonW,240,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.3, mouse_dd, 0, edMax, edMax
  1119. editRD   edit_box 180-buttonW,240,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.4, mouse_dd, 0, edMax, edMax
  1120.  
  1121. align 4
  1122. import_libkmenu:
  1123.         kmenu_init      dd akmenu_init
  1124.         kmainmenu_draw  dd akmainmenu_draw
  1125.         kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent
  1126.         ksubmenu_new    dd aksubmenu_new
  1127.         ksubmenu_delete dd aksubmenu_delete
  1128.         ksubmenu_draw   dd aksubmenu_draw
  1129.         ksubmenu_add    dd aksubmenu_add
  1130.         kmenuitem_new   dd akmenuitem_new
  1131.         kmenuitem_delete dd akmenuitem_delete
  1132.         kmenuitem_draw  dd akmenuitem_draw
  1133. dd 0,0
  1134.         akmenu_init     db 'kmenu_init',0
  1135.         akmainmenu_draw db 'kmainmenu_draw',0
  1136.         akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0
  1137.         aksubmenu_new   db 'ksubmenu_new',0
  1138.         aksubmenu_delete db 'ksubmenu_delete',0
  1139.         aksubmenu_draw  db 'ksubmenu_draw',0
  1140.         aksubmenu_add   db 'ksubmenu_add',0
  1141.         akmenuitem_new  db 'kmenuitem_new',0
  1142.         akmenuitem_delete db 'kmenuitem_delete',0
  1143.         akmenuitem_draw  db 'kmenuitem_draw',0
  1144.  
  1145. mouse_dd  dd ?
  1146. sc  system_colors
  1147.  
  1148. button_press  rd 0     ;for kmenu
  1149.  
  1150. sys_path:      rb 4096
  1151. file_name:     rb 4096
  1152. plugin_path:   rb 4096
  1153. openfile_path: rb 4096
  1154. filename_area: rb 256
  1155. rb 1024
  1156. procinfo process_information
  1157. pi rb 1024
  1158.  
  1159.  
  1160. dataBuffer:
  1161. .1: rb 512
  1162. .2: rb 512
  1163. .3: rb 512
  1164. .4: rb 512
  1165. .size1: rd 1
  1166. .size2: rd 1
  1167. .size3: rd 1
  1168. .size4: rd 1
  1169. ;255+255+2 = 512
  1170. ;äâà çàïàñíûõ áàéòà íåîáõîäèìû äëÿ òîãî ÷òî áû íå ïåïåðåïèñàòü ñëåäóþùèåé áàéòû, â êîíöå áóôåðà 0
  1171. dataBufferEnd:
  1172.  
  1173.  
  1174. I_END:
  1175.         rb 4096
  1176. align 16
  1177. STACKTOP:
  1178.  
  1179. MEM:
  1180.