Subversion Repositories Kolibri OS

Rev

Rev 7395 | Rev 7397 | 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.2: Sep 19, 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 'editbox.inc'
  46. use_edit_box
  47. include 'check.inc'      ;âêëþ÷èòü ôàéë check.inc
  48. version_ch1              ;íåîáõîäèìûé ìàêðîñ äëÿ âêëþ÷åíèÿ new âåðñèè check_box1
  49. use_check_box            ;èñïîëüçóÿ ìàêðîñû, âíåñòè ïðîöåäóðû äëÿ ðèñîâàíèÿ ÷åê áîêñà
  50.  
  51. Otstup = 30
  52.  
  53. START:
  54.     call copyKill        ;ïðîñòåéøàÿ çàùèòà îò çàïóñêà âòîðîé êîïèè ïðèëîæåíèÿ
  55.     mcall  68, 11        ;èíèöèàëèçàöèÿ êó÷è
  56.  
  57.     mov  eax,48          ;ïîëó÷èòü ñèñòåìíûå öâåòà
  58.     mov  ebx,3
  59.     mov  ecx, sc
  60.     mov  edx, sizeof.system_colors
  61.     mcall
  62.  
  63.     mov  eax,40          ;óñòàíîâèòü ìàñêó äëÿ îæèäàåìûõ ñîáûòèé
  64.     mov  ebx,0x27        ;ñèñòåìà áóäåò ðåàãèðîâàòü òîëüêî íà ñîîáùåíèå î ïåðåðèñîâêå, íàæàòà êíîïêà, îïðåäåë¸ííàÿ ðàíåå, ñîáûòèå îò ìûøè (÷òî-òî ñëó÷èëîñü - íàæàòèå íà êíîïêó ìûøè èëè ïåðåìåùåíèå; ñáðàñûâàåòñÿ ïðè ïðî÷òåíèè)
  65.     mcall
  66.  
  67.     call  loadConfig     ;çàãðóæàåì êîíôèãóðàöèþ èç ôàéëà, åñëè íåò - òî âûñòàâëÿåì ïàðàìåòðû ïî óìîë÷àíèþ
  68.     call  draw_window    ;îòðèñîâàòü îêíî ïðèëîæåíèÿ
  69.  
  70.     ;âðåìåííûé fix áàãà: ñíÿòü ôîêóñ ñ ïîëåé ââîäà è ïåðåðèñîâàòü îêíî
  71.     mov dword[editLU.flags], 0 ;åñëè ýòî ñäåëàòü ïðè ñîçäàíèè, òî edit'û íå áóäóò ïðèíèìàòü áóêâû
  72.     mov dword[editLD.flags], 0 ;èëè íå áóäóò ðàáîòàòü âîâñå (òðåáóåòñÿ äîï. èçó÷åíèå ïðîáëåìû)
  73.     mov dword[editRU.flags], 0
  74.     mov dword[editRD.flags], 0 ;ed_focus
  75.     call draw_window
  76.  
  77. ; Îáðàáîòêà öèêëà ñîáûòèé
  78. event_wait:
  79.     mov     eax, 10      ; function 10 : wait until event
  80.     mcall                ; event type is returned in eax
  81.  
  82.     cmp     eax, 1       ; Event redraw request ?
  83.     je      red          ; Expl.: there has been activity on screen and
  84.                          ; parts of the applications has to be redrawn.
  85.  
  86.     cmp     eax, 2       ; Event key in buffer ?
  87.     je      key          ; Expl.: User has pressed a key while the
  88.                          ; app is at the top of the window stack.
  89.  
  90.     cmp     eax, 3       ; Event button in buffer ?
  91.     je      button       ; Expl.: User has pressed one of the
  92.                          ; applications buttons.
  93.  
  94.     mouse_edit_boxes editboxes,editboxes_end
  95.     mouse_check_boxes check_boxes,check_boxes_end  ;ïðîâåðêà ÷åê áîêñà
  96.     jmp     event_wait
  97.  
  98.  
  99. red:                     ;îáðàáîòêà ñîáûòèÿ ïåðåðèñîâêè îêíà
  100.    call    draw_window
  101.    jmp     event_wait
  102.  
  103. key:                                    ; Keypress event handler
  104.         mov     eax, 2                  ; The key is returned in ah. The key must be
  105.         mcall                           ; read and cleared from the system queue.
  106.         key_edit_boxes editboxes,editboxes_end
  107.         jmp     event_wait              ; Just read the key, ignore it and jump to event_wait.
  108.  
  109. button:                                 ; Buttonpress event handler
  110.     mov     eax,17                  ; The button number defined in window_draw
  111.     mcall                           ; is returned to ah.
  112.  
  113.     cmp     ah,1                    ; button id=1 ?
  114.     jne     noclose
  115.     mov     eax,-1                  ; Function -1 : close this program
  116.     mcall
  117. noclose:
  118.     cmp  ah, 2         ;êíîïêà "Ïðèìåíèòü"
  119.     jne  butend
  120.     call applyButton   ;âûçîâ íàøåãî îáðàáîò÷èêà íàæàòèÿ êíîïêè
  121. butend:
  122.     jmp  event_wait    ;this is for ignored events, useful at development
  123.  
  124.  
  125.  
  126. ;èìÿ êîíôèãóðàöèîííîãî ôàéëà
  127. fileName: db 'SETTINGS/HOTANGLES.CFG', 0
  128.  
  129. ;ñòðóêòóðà äëÿ ñîçäàíèÿ/ïåðåçàïèñè ôàéëà
  130. createFile:
  131.   .func     dd 2    ;íîìåð ïîäôóíêöèè
  132.   .re       dd 0, 0 ;çàðåçåðâèðîâàíî
  133.   .size     dd 0    ;ñêîëüêî áàéò ïèñàòü
  134.   .data_adr dd 0    ;óêàçàòåëü íà äàííûå
  135.   .path     db 0
  136.   .path_adr dd fileName    ;ïóòü
  137.  
  138. ;ñòðîêà ïàðàìåòðîâ ïî óìîë÷àíèþ è å¸ ðàçìåð
  139. 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
  140. defaultDataSize = 48+19
  141.  
  142.  
  143. copyParam:  ;êîïèðóåò ïàðàìåòð(êîìàíäó çàïóñêà) â áóôåð (ñì. äàëüøå)
  144.    push esi ebx ecx
  145.    mov ecx, dword[ebx] ;÷èòàåì ðàçìåð ñòðîêè
  146. .copy:  ;êîïèðóåì ñèìâîëû
  147.    cmp ecx, 0
  148.    je copyParam.copyEnd
  149.    mov bl, byte[esi]
  150.    mov byte[eax], bl
  151.    dec ecx
  152.    inc eax
  153.    inc esi
  154.    jmp copyParam.copy
  155. .copyEnd:
  156.    pop ecx ebx esi
  157.    ret
  158.  
  159.  
  160. addPerenos:  ;äîáàâëÿåò ïåðåíîñ ñòðîêè â áóôåð
  161.    mov byte[eax], 13
  162.    inc eax
  163.    mov byte[eax], 10
  164.    inc eax
  165.    ret
  166.  
  167. ;îáðàáîò÷èê êíîïêè "Ïðèìåíèòü"
  168. applyButton:
  169.     push eax ebx ecx
  170.         ;mov dword[createFile.data_adr], defaultDataForConfig
  171.         ;mov dword[createFile.size], defaultDataSize
  172.  
  173.         ;âû÷èñëèì ðàçìåð ôàéëà êîíôèãóðàöèè â áàéòàõ
  174.         mov ecx, 5*2+1 ;1 áàéò íà ñîñòîÿíèå àêòèâíîñòè è 5 ïàð ïåðåíîñîâ ñòðîê (ñèìâîëû 13, 10)
  175.         add ecx, dword[editLU.size] ;dataBuffer.size1]      ;ïëþñ ðàçìåð êàæäîé ñòðîêè â áàéòàõ
  176.         add ecx, dword[editLD.size] ;dataBuffer.size2]
  177.         add ecx, dword[editRU.size] ;dataBuffer.size3]
  178.         add ecx, dword[editRD.size] ;dataBuffer.size4]
  179.         ;òåïåðü ðàçìåð ôàéëà êîíôèãóðàöèè â ecx
  180.         mov dword[createFile.size], ecx ;ïîëîæèì ðàçìåð áàéò â ñòðóêòóðó ñîçäàíèÿ/ïåðåçàïèñè ôàéëà
  181.         mcall 68, 12, ecx ;âûäåëÿåì áëîê ïàìÿòè ïîä áóôåð ñîäåðæèìîãî
  182.         mov dword[createFile.data_adr], eax ;ñîõðàíÿåì àäðåñ áóôåðà â ñòðóêòóðó
  183.  
  184.         ;çàïîëíèì áóôåð ñîäåðæèìîãî:
  185.         mov byte[eax], 110; 'n' ;ïî óìîë÷àíèþ ôëàã ñíÿò
  186.         cmp word[ch1.flags], ch_flag_en   ;âûñòàâëåí checkBox èëè íåò?
  187.         jne applyButton.no
  188.         mov byte[eax], 121 ;èíà÷å êëàä¸ì 'y'
  189. .no:
  190.         inc eax
  191.         call addPerenos
  192.  
  193.         push esi ebx
  194.         call UpdateEditsSizes ;îáíîâèòü ðàçìåðû òåêñòà â edit'àõ
  195.  
  196.         mov esi, dataBuffer.1 ;editLU.text
  197.         mov ebx, dataBuffer.size1 ;editLU.size
  198.         call copyParam
  199.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  200.  
  201.         mov esi, dataBuffer.2 ;editLD.text
  202.         mov ebx, dataBuffer.size2 ;editLD.size
  203.         call copyParam
  204.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  205.  
  206.         mov esi, dataBuffer.3
  207.         mov ebx, dataBuffer.size3
  208.         call copyParam
  209.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  210.  
  211.         mov esi, dataBuffer.4
  212.         mov ebx, dataBuffer.size4
  213.         call copyParam
  214.         call addPerenos     ;äîáàâëÿåì ïåðåíîñ ñòðîêè
  215.  
  216.         pop ebx esi
  217.  
  218.  
  219.     mov ebx, createFile
  220.     mcall 70
  221.         cmp eax, 0
  222.         je .end
  223.         ;èíà÷å çäåñü íóæíî âûâåñòè îêíî ñ îøèáêîé !!!
  224. .end:
  225.         mcall 68, 13, dword[createFile.data_adr]  ;îñâîáîæäàåì ïàìÿòü ïîä áóôåð
  226.         call restartHotAnglesApp ;ïåðåçàïóñêàåì @HOTANGLES
  227.         pop ecx ebx eax
  228.     ret
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235. compareBytes2:
  236.    push edi esi ecx ebx
  237.    xor eax, eax
  238.    mov ecx, 10  ;max ðàçìåð ñòðîê 11
  239. @@:
  240.    mov bl, byte[edi]
  241.    cmp bl, byte[esi]
  242.    jne compareBytes.no
  243.    inc edi
  244.    inc esi
  245.    cmp ecx, 0
  246.    je @f
  247.    dec ecx
  248.    jmp @b
  249. .no:
  250.    mov eax, 1
  251. @@:
  252.    pop ebx ecx esi edi
  253.    ret
  254.  
  255.  
  256. restartHotAnglesApp:   ;!!!
  257.    ;íàõîäèì âñå êîïèè ïðèëîæåíèÿ ïî èìåíè è çàâåðøàåì èõ
  258.    push eax ebx ecx esi edi
  259.    ;óêàçàòåëè, êîòîðûå íèêîãäà íå ìåíÿþòñÿ:
  260.    mov esi, startAppData.file_name       ;ïåðâàÿ ñòðîêà - èñêîìîå èìÿ ïðèëîæåíèÿ
  261.    mov edi, buf            ;âòîðàÿ ñòðîêà - èìÿ òåêóùåãî ñëîòà
  262.    add edi, 10
  263.  
  264.    mov ecx, 1
  265. @@:
  266.    mcall 9, buf, ecx              ;ïîëó÷àåì äàííûå î÷åðåäíîãî ñëîòà
  267.    mov dword[slotMax], eax
  268.  
  269.    call compareBytes2 ;ñðàâíèâàåì èìÿ
  270.    cmp eax, 0
  271.    jne restartHotAnglesApp.next   ;åñëè íå ñîâïàëî, òî ïåðåõîäèì íà ñëåäóþùèé ñëîò
  272.  
  273.    ;push eax ebx ecx
  274.    mcall 18, 2, ecx               ;èíà÷å çàâåðøàåì ñëîò
  275.    ;pop ecx ebx eax
  276.  
  277. .next:
  278.    inc  ecx
  279.    cmp ecx, dword[slotMax]
  280.    ja @f
  281.    jmp @b
  282. @@:
  283.    pop edi esi ecx ebx eax
  284.  
  285.    ;çàïóñêàåì ïðèëîæåíèå çàíîâî
  286.    push eax ebx
  287.    mcall 70, startAppData
  288.    cmp eax, 0
  289.    ja @f       ;åñëè eax>0, òî óñïåøíî çàïóùåíî
  290.    ;!!! èíà÷å òóò ïå÷àòàåì îøèáêó
  291. @@:
  292.    pop ebx eax
  293.    ret
  294.  
  295. startAppData:
  296.     .subfunction dd   7
  297.     .flags       dd   0
  298.     .param       dd   0
  299.     .rezerv      dd   0, 0
  300.     .full_name   db   '/rd/1/'
  301.     .file_name   db   '@HOTANGLES', 0
  302.     ;db 0
  303.     ;.name: dd HotAnglesAppName
  304. ;HotAnglesAppName db '@HOTANGLES', 0
  305.  
  306.  
  307. UpdateEditsSizes:
  308.    push eax
  309.    mov eax, dword[editLU.size]
  310.    mov dword[dataBuffer.size1], eax
  311.  
  312.    mov eax, dword[editLD.size]
  313.    mov dword[dataBuffer.size2], eax
  314.  
  315.    mov eax, dword[editRU.size]
  316.    mov dword[dataBuffer.size3], eax
  317.  
  318.    mov eax, dword[editRD.size]
  319.    mov dword[dataBuffer.size4], eax
  320.  
  321.    pop eax
  322.    ret
  323.  
  324. fileAdr dd 0
  325.  
  326. loadConfig:
  327.    push eax ebx ecx edx
  328.    mcall 68, 27, fileName   ;çàãðóæàåì êîíôèãóðàöèîííûé ôàéë â ÎÇÓ
  329.    mov dword[fileAdr], eax  ;ñîõðàíÿåì àäðåñ áëîêà ïàìÿòè ôàéëà
  330.    cmp eax, 0
  331.    je loadConfig.default       ;åñëè ôàéëà êîíôèãóðàöèè íåò, òî ñòàâèì íàñòðîéêè ïî óìîë÷àíèþ
  332.    ;èíà÷å äàííûå çàãðóæåíû â ÎÇÓ, ðàçìåð â edx
  333.    cmp edx, 0               ;åñëè ôàéë ïóñò, â í¸ì íåò äàííûõ, òî ñòàâèì íàñòðîéêè ïî óìîë÷àíèþ
  334.    je loadConfig.default
  335. .start:
  336.    add edx, eax             ;êëàä¸ì â edx - àäðåñ êîíöà êîíôèã.äàííûõ
  337.  
  338. .chStart:
  339.    cmp byte[eax], 121 ;'y'  ;âûñòàâëÿåì checkBox - ïàðàìåòð àêòèâíîñòè ïðèëîæåíèÿ
  340.    jne loadConfig.no
  341. .yes:
  342.    mov word[ch1.flags], ch_flag_en
  343.    jmp loadConfig.chEnd
  344. .no:
  345.    mov word[ch1.flags], 0
  346. .chEnd:
  347.    ;jmp loadConfig.end   ;êîìàíäà äëÿ óäîáñòâà îòëàäêè è ïîèñêà îøèáîê
  348.  
  349.    ;êîïèðóåì ñîäåðæèìîå ñòðîê â áóôåð
  350.    push edi esi ecx ebx eax
  351.    ;èíèöèàëèçèðóåì óêàçàòåëè íà àäðåñà áóôåðà ñòðîêè è å¸ ðàçìåðà
  352.    mov edi, dataBuffer.1     ;dword[dataBuffer.1]
  353.    mov esi, dataBuffer.size1 ;dword[dataBuffer.size1]
  354.    ;ecx - ñ÷¸ò÷èê áàéò â ñòðîêå
  355. ;   mov ecx, 0 ;xor ecx, ecx
  356. .block:
  357.    xor ecx, ecx ;îáíóëÿåì ñ÷¸ò÷èê
  358.    inc eax
  359.    cmp byte[eax], 10         ;åñëè î÷åðåäíîé êîä ñèìâîëà 10 èëè 13, òî ïðîïóñêàåì ñèìâîëû
  360.    je loadConfig.block ;propusk     ;äî ïåðâîãî îòëè÷íîãî îò íèõ
  361.    cmp byte[eax], 13
  362.    je loadConfig.block ;propusk
  363.  
  364.    ; ñèìâîë îòëè÷åí îò ïåðåíîñà ñòðîêè è âîçâðàòà êàðåòêè - íà÷èíàåì êîïèðîâàòü îòñþäà â áóôåð
  365.    mov bl, byte[eax]
  366.    mov byte[edi], bl
  367.    inc edi
  368.    inc eax
  369.    inc ecx ;óâåëè÷èâàåì ñ÷¸ò÷èê ñèìâîëîâ â ñòðîêå
  370.  
  371.    ;èä¸ì äî êîíöà ýòîé ñòðîêè: ïîêà íå âñòðåòèì î÷åðåäíîé 10, 13, 0 èëè file end
  372. .while:     ;è êîïèðóåì âñ¸ â áóôåð
  373.    cmp eax, edx           ;ïðîâåðÿåì çàêîí÷èëñÿ ëè ôàéë, à êîíöà ñòðîêè íå áûëî !!!
  374.    ja loadConfig.ura
  375.    cmp byte[eax], 10
  376.    je loadConfig.ura
  377.    cmp byte[eax], 0
  378.    je loadConfig.ura
  379.    cmp byte[eax], 13
  380.    je loadConfig.ura
  381.  
  382.    mov bl, byte[eax]
  383.    mov byte[edi], bl
  384.    inc edi
  385.    inc eax
  386.    inc ecx
  387.    cmp ecx, 511
  388.    jae loadConfig.ura
  389.    jmp loadConfig.while
  390. .ura:
  391.    mov byte[edi], 0      ;êëàä¸ì çàâåðøàþùèé 0 â ñòðîêó
  392.    mov dword[esi], ecx   ;ñîõðàíÿåì ðàçìåð ñòðîêè
  393.    add esi, 4            ;ïåðåõîäèì íà ðàçìåð ñëåäóþùåãî áóôåðà
  394.    sub edi, ecx          ;ïåðåõîäèì íà ñëåäóþùèé áóôåð
  395.    add edi, 512
  396. ;   mov ecx, 0 ;xor ecx, ecx ;îáíóëÿåì ðàçìåð ñòðîêè
  397.  
  398.    cmp edi, dataBuffer.size1 ;åñëè ýòî áûë ïîñëåäíèé áóôåð (è ìû âûøëè çà àäðåñà ðàçìåðîâ áóôåðîâ), òî âûõîäèì
  399.    jb loadConfig.block
  400.  
  401.    pop eax ebx ecx esi edi
  402.  
  403.    jmp loadConfig.end
  404. .default:
  405.    mov eax, defaultDataForConfig
  406.    mov edx, defaultDataSize
  407.    jmp loadConfig.start
  408. .end:
  409.    mov ecx, dword[fileAdr]    ;åñëè ôàéë áûë çàãðóæåí, òî
  410.    cmp ecx, 0
  411.    je @f
  412.    mcall 68, 13, ecx  ;âûãðóæàåì ôàéë èç ïàìÿòè
  413. @@:
  414.    call updateParams ;ïðèìåíÿåì íàñòðîéêè êàæäîãî áóôåðà
  415.    pop edx ecx ebx eax
  416.    ret
  417.  
  418.  
  419. updateParams: ;max, size, pos
  420.    push eax
  421.    mov eax, dword[dataBuffer.size1]
  422.    mov dword[editLU.size], eax
  423.    mov dword[editLU.pos], eax
  424.  
  425.    mov eax, dword[dataBuffer.size2]
  426.    mov dword[editLD.size], eax
  427.    mov dword[editLD.pos], eax
  428.  
  429.    mov eax, dword[dataBuffer.size3]
  430.    mov dword[editRU.size], eax
  431.    mov dword[editRU.pos], eax
  432.  
  433.    mov eax, dword[dataBuffer.size4]
  434.    mov dword[editRD.size], eax
  435.    mov dword[editRD.pos], eax
  436.    pop eax
  437.    ret
  438.  
  439.  
  440.  
  441. selfName db 'HACONFIG', 0 ;'@HOTANGLES',0
  442. selfNameSize = 8;9 ;äî 11 byte
  443. ;
  444. compareBytes:
  445.    push edi esi ecx ebx
  446.    mov eax, 0 ;xor eax, eax
  447.    mov ecx, selfNameSize ;11    ;max ðàçìåð ñòðîê 11
  448. @@:
  449.    mov bl, byte[edi]
  450.    cmp bl, byte[esi]
  451.    jne compareBytes.no
  452.    inc edi
  453.    inc esi
  454.    cmp ecx, 0
  455.    je @f
  456.    dec ecx
  457.    jmp @b
  458. .no:
  459.    mov eax, 1
  460. @@:
  461.    pop ebx ecx esi edi
  462.    ret
  463. ;
  464. slotMax dd 0
  465. selfPID dd 0
  466. buf db 1024 dup(0)
  467. copyKill:
  468.    push eax ebx ecx esi edi
  469.  
  470.    ;ñïåðâà ïðî÷ò¸ì ñâîþ èíôîðìàöèþ
  471.    mcall 9, buf, -1
  472.    mov eax, dword[buf+30]
  473.    mov dword[selfPID], eax
  474.  
  475.    ;óêàçàòåëè, êîòîðûå íèêîãäà íå ìåíÿþòñÿ:
  476.    mov esi, selfName       ;ïåðâàÿ ñòðîêà - èìÿ òåêóùåãî ïðèëîæåíèÿ
  477.    mov edi, buf            ;âòîðàÿ ñòðîêà - èìÿ òåêóùåãî ñëîòà
  478.    add edi, 10
  479.  
  480.    mov ecx, 1
  481. @@:
  482.    mcall 9, buf, ecx
  483.    mov dword[slotMax], eax
  484.  
  485.    ;åñëè ýòî ìû ñàìè, òî ïðîïóñêàåì ïðîâåðêó
  486.    mov eax, dword[buf+30]
  487.    cmp eax, dword[selfPID]
  488.    je copyKill.propusk
  489.  
  490.    call compareBytes   ;ñðàâíèâàåì 11 áàéò ñòðîê, ðåçóëüòàò â eax
  491.  
  492.    cmp eax, 0
  493.    je copyKill.selfKill
  494.  
  495. .propusk:
  496.    inc ecx
  497.    cmp ecx, dword[slotMax]
  498.    ja @f
  499.    jmp @b
  500.  
  501. .selfKill:
  502.    pop edi esi ecx ebx eax
  503.    mcall -1
  504.    ret
  505. @@:
  506.    pop edi esi ecx ebx eax
  507.    ret
  508.  
  509.  WindowsWidth  = 450
  510.  WindowsHeight = 195
  511. coord:      ;êîîðäèíàòû îêíà ïðèëîæåíèÿ
  512.  .y dw 0
  513.  .x dw 0
  514.  
  515. draw_window:
  516.         ;óäàëÿåì êíîïêó, åñëè åñòü
  517.         mov edx, 0x80000002
  518.         mcall 8
  519.  
  520.         mov     eax, 12                 ; function 12: tell os about windowdraw
  521.         mov     ebx, 1                  ; 1, start of draw
  522.         mcall
  523.  
  524.         ;îòîáðàçèì îêíî ïî öåíòðó ýêðàíà äëÿ ýòîãî:
  525.         mcall 14 ;ïîëó÷èì ðàçìåðû ýêðàíà
  526.         mov dword[coord], eax       ;ïîëîæèì ðàçìåðû ýêðàíà â êîîðäèíàòû
  527.         shr word[coord.x], 1        ;âåðíåå ïîëîæèì èõ ïîëîâèíó
  528.         shr word[coord.y], 1
  529.  
  530.         ;âû÷èñëÿåì êîîðäèíàòû îêíà, ÷òîáû îêíî áûëî ïî ñåðåäèíå ýêðàíà
  531.         sub word[coord.x], WindowsWidth/2
  532.         sub word[coord.y], WindowsHeight/2
  533.  
  534.         mov     eax, 0                  ; function 0 : define and draw window
  535.         mov     ebx, 0 ;* 65536 + WindowsWidth   ; [x start] *65536 + [x size]
  536.         mov bx, word[coord.x]
  537.         shl  ebx, 16
  538.         mov bx, WindowsWidth
  539.  
  540.         mov ecx, 0
  541.         mov     cx, word[coord.y] ;* 65536 + WindowsHeight  ; [y start] *65536 + [y size]
  542.         shl ecx, 16
  543.         mov cx, WindowsHeight
  544.  
  545.         mov     edx, 0x14ffffff         ; color of work area RRGGBB
  546.                                         ; 0x02000000 = window type 4 (fixed size, skinned window)
  547.         mov     esi, 0x808899ff         ; color of grab bar  RRGGBB
  548.                                         ; 0x80000000 = color glide
  549.         mov     edi, title
  550.         mcall
  551.  
  552.         draw_check_boxes check_boxes,check_boxes_end ;ðèñîâàíèå ÷åêáîêñîâ
  553.         draw_edit_boxes editboxes,editboxes_end      ;ðèñîâàíèå edit box'îâ
  554.  
  555.         ;ðèñóåì êíîïêó
  556.         mov ebx, (WindowsWidth-80-Otstup)*65536 + 80 ;êîîðäèíàòà X, øèðèíà êíîïêè
  557.         mov ecx, 160*65536 + 20   ;êîîðäèíàòà Y, âûñîòà êíîïêè
  558.         mov edx, 0x00000002 ;2    ;íîìåð êíîïêè
  559.         mov esi, 0x00AABBCC       ;öâåò êíîïêè
  560.         mcall 8
  561.         ;ðèñóåì òåêñò êíîïêè
  562.         mov     ebx, (WindowsWidth-80-Otstup+25-buttonTextXoffset) * 65536 + 166    ;êîîðäèíàòû òåêñòà (x, y)
  563.         mov     ecx, 0xFFFFFF     ;áåëûé öâåò òåêñòà
  564.         mov     edx, buttonText
  565.         mov     esi, buttonTextSize ;5            ;ðàçìåð òåêñòà â ñèìâîëàõ
  566.         mcall 4
  567.  
  568.         call draw_super_text
  569.  
  570.         LineLength = 62 ;42
  571.         mov     ebx, 40 * 65536 + 36    ; draw info text with function 4 (x, y)
  572.         mov     ecx, 0x224466
  573.         mov     edx, text
  574.         mov     esi, LineLength
  575.         mov     eax, 4
  576.  
  577.   .newline:                             ; text from the DATA AREA
  578.         mcall
  579.         add     ebx, 12
  580.         add     edx, LineLength
  581.         cmp     byte[edx], 0
  582.         jne     .newline
  583.  
  584.         mov     eax, 12                 ; function 12:tell os about windowdraw
  585.         mov     ebx, 2                  ; 2, end of draw
  586.         mcall
  587.  
  588.         ret
  589.  
  590.  
  591.  
  592.  
  593. align 4
  594. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  595. ;DATA äàííûå  äëÿ check_box1 - èñïîëüçóåò ñèñòåìíûå öâåòà
  596. ;Ôîðìàò äàííûõ ÷åê áîêñà:
  597. ;   êîîðäèíàòà õ, êîîðäèíàòà ó, óêàçàòåëü íà íà÷àëî ñòðîêè, äëèíà ñòðîêè
  598. ;ñîñòîÿíèå ðàáîòû óòèëèòû: àêòèâíà/íåò
  599. check_boxes:
  600.    ch1 check_box1 30,160,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en
  601. check_boxes_end:
  602.  
  603.  
  604. if lang eq ru  ;åñëè ÿçûê ñáîðêè ðóññêèé
  605.  
  606. text    db  "Š®­ä¨£ãà â®à Hot Angles ®â¢¥ç ¥â §  ­ áâனªã  ªâ¨¢­ëå 㣫®¢. "
  607.         db  " áâன⥠¯ à ¬¥âàë ¯®¤ á¥¡ï ¨«¨ ®âª«îç¨â¥ íâã ®¯æ¨î.         "
  608.         db  "                                                              ", 0
  609.  hed:
  610. title   db  "Š®­ä¨£ãà â®à ã⨫¨âë Hot Angles", 0
  611. buttonText db "à¨¬¥­¨âì", 0
  612. buttonTextSize = 9
  613. buttonTextXoffset = 12
  614.  
  615. ch_text:        ;ñîïðîâîæäàþùèé òåêñò äëÿ ÷åê áîêñîâ
  616. .1 db '‚ª«îç¨âì/ ªâ¨¢¨à®¢ âì "Hot Angles"'
  617. .e1:
  618.  
  619. superText:
  620.   .lu db 'Š®¬ ­¤  «¥¢®£® ¢¥àå­¥£® 㣫 : ', 0
  621.   .ld db 'Š®¬ ­¤  «¥¢®£® ­¨¦­¥£® 㣫 :  ', 0
  622.   .ru db 'Š®¬ ­¤  ¯à ¢®£® ¢¥àå­¥£® 㣫 :', 0
  623.   .rd db 'Š®¬ ­¤  ¯à ¢®£® ­¨¦­¥£® 㣫 : ', 0
  624. superTextSize = 30
  625.  
  626. else  ;èíà÷å àíãëèéñêèé òåêñò
  627.  
  628. text    db  "This is a Hot Angles Configurator.                            "
  629.         db  "Set the parameters bellow for yourself or disable this option."
  630.         db  "                                                              ", 0
  631.  hed:
  632. title   db  "Hot Angles Configurator", 0
  633. buttonText db "Apply", 0
  634. buttonTextSize = 5
  635. buttonTextXoffset = 0
  636.  
  637. ch_text:        ;ñîïðîâîæäàþùèé òåêñò äëÿ ÷åê áîêñîâ
  638. .1 db 'Activate "Hot Angles"'
  639. .e1:
  640.  
  641. superText:
  642.   .lu db 'Left up angle command:   ', 0
  643.   .ld db 'Left down angle command: ', 0
  644.   .ru db 'Right up angle command:  ', 0
  645.   .rd db 'Right down angle command:', 0
  646. superTextSize = 25
  647.  
  648. end if
  649.  
  650.  
  651. draw_super_text:
  652.    push eax ebx ecx edx edi esi
  653.    mov     ebx, Otstup * 65536 + 74    ; draw info text with function 4 (x, y)
  654.    mov     ecx, 0x224466
  655.    mov eax, superText.lu
  656.    mov     edx, eax
  657.    mov     esi, superTextSize ;22
  658.    mcall 4
  659.  
  660.    mov     ebx, Otstup * 65536 + 109
  661.    mov     edx, superText.ld
  662.    mov     esi, superTextSize ;24
  663.    mcall 4
  664.  
  665.    mov     ebx, 240 * 65536 + 74
  666.    mov     edx, superText.ru
  667.    mov     esi, superTextSize ;23
  668.    mcall 4
  669.  
  670.    mov     ebx, 240 * 65536 + 109
  671.    mov     edx, superText.rd
  672.    mov     esi, superTextSize ;25
  673.    mcall 4
  674.  
  675.    pop esi edi edx ecx ebx eax
  676.    ret
  677.  
  678.  
  679. edMaxSize = 510
  680. edMax = 0 ;max, size, pos
  681.  
  682. editboxes:
  683. editLU edit_box 180,Otstup,85,0xffffff,0x6a9480,0,0xAABBCC,0,edMaxSize,dataBuffer.1,ed_focus,edMax,edMax
  684. editLD edit_box 180,Otstup,120,0xffffff,0x6a9480,0,0xAABBCC,0,edMaxSize,dataBuffer.2,ed_focus,edMax,edMax
  685. editRU edit_box 180,240,85,0xffffff,0x6a9480,0,0xAABBCC,0,edMaxSize,dataBuffer.3,ed_focus,edMax,edMax
  686. editRD edit_box 180,240,120,0xffffff,0x6a9480,0,0xAABBCC,0,edMaxSize,dataBuffer.4,ed_focus,edMax,edMax
  687. editboxes_end:
  688.  
  689. data_of_code dd 0
  690. mouse_flag dd 0x0
  691.  
  692. dataBuffer:
  693. .1: rb 512
  694. .2: rb 512
  695. .3: rb 512
  696. .4: rb 512
  697. .size1: rd 1
  698. .size2: rd 1
  699. .size3: rd 1
  700. .size4: rd 1
  701. ;255+255+2
  702. ;äâà çàïàñíûõ áàéòà íåîáõîäèìû äëÿ òîãî ÷òî áû íå ïåïåðåïèñàòü ñëåäóþùèåé áàéòû, â êîíöå áóôåðà 0
  703. dataBufferEnd:
  704.  
  705. sc  system_colors
  706.  
  707. I_END:
  708.         rb 4096
  709. align 16
  710. STACKTOP:
  711.  
  712. MEM:
  713.