Subversion Repositories Kolibri OS

Rev

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