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.