Subversion Repositories Kolibri OS

Rev

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