Subversion Repositories Kolibri OS

Rev

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