Subversion Repositories Kolibri OS

Rev

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