Subversion Repositories Kolibri OS

Rev

Rev 3026 | Rev 3091 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;#___________________________________________________________________________________________________
  2. ;****************************************************************************************************|
  3. ; Program Palitra (c) Sergei Steshin (Akyltist)                                                      |
  4. ;----------------------------------------------------------------------------------------------------|
  5. ;; Charset:WIN-1251 Font:Courier New Size:9pt                                                         |
  6. ;.....................................................................................................
  7. ;; compiler:     FASM 1.69.31                                                                        |
  8. ;; version:      0.3.0                                                                               |
  9. ;; last update:  08/11/2012                                                                          |
  10. ;; e-mail:       dr.steshin@gmail.com                                                                |
  11. ;.....................................................................................................
  12. ;; History:                                                                                          |
  13. ;; 0.1.0 - Ïåðâàÿ âåðñèÿ ïðîãðàììû.                                                                  |
  14. ;; 0.2.0 - Èñïðàâëåíî ïîïàäàíèå â ñåòêó, áåðåòñÿ áëèæàéøèé ïî äèàãîíàëè ïèêñåëü.                     |
  15. ;;       - Äîáàâëåíû ïîëçóíêè, äëÿ ðåãóëèðîâàíèÿ rgb ñîñòàâëÿþùèõ öâåòà è âûâîä ýòèõ ñîñòàâëÿþùèõ.   |
  16. ;;       - Óáðàí âûâîä öâåòà â áèíàðíîì âèäå (ïîêà çà íå íàäîáíîñòüþ è íå àêòóàëüíîñòüþ).            |
  17. ;;       - Ìåëêàÿ êîñìåòèêà.                                                                         |
  18. ;; 0.3.0 - Äîáàâëåíî ïåðåêëþ÷åíèå âèäîâ öâåòîâûõ ñõåì (êíîïêà NEXT)                                  |
  19. ;;       - Óëó÷øåíû ïîëçóíêè, ïðîèçâîäèòñÿ îáðàáîòêà íàæàòèÿ ðÿäîì ñ ïîëçóíêîì.                      |
  20. ;;       - ×èñëî ñåòîê â öâåòîâîé ñõåìå óìåíüøåíî ñ 6 äî 4 (êðàòíîñòü 256, èíà÷å äóáëèðîâàíèå öâåòà).|
  21. ;;       - Ìåëêàÿ êîñìåòèêà.                                                                         |
  22. ;; 0.4.0 - Äîáàâëåíî ïåðåêëþ÷åíèå ìåæäó äâóìÿ öâåòàìè                                                |
  23. ;;       - Äîáàâëåí ïîëçóíîê ðåãóëèðîâàíèÿ ïðîçðà÷íîñòè (áåç âèçóàëèçàöèè).                          |
  24. ;;       - Äîáàâëåíî âûðàâíèâàíèå çíà÷åíèé rgba ïî öåíòðó, â çàâèñèìîñòè îò äëèííû.                  |
  25. ;;       - Êîñìåòè÷åñêèå ïðàâêè.                                                                     |
  26. ;;       - Íåáîëüøàÿ îïòèìèçàöèÿ.                                                                    |
  27. ;.....................................................................................................
  28. ;; All rights reserved.                                                                              |
  29. ;;                                                                                                   |
  30. ;; Redistribution and use in source and binary forms, with or without modification, are permitted    |
  31. ;; provided that the following conditions are met:                                                   |
  32. ;;       * Redistributions of source code must retain the above copyright notice, this list of       |
  33. ;;         conditions and the following disclaimer.                                                  |
  34. ;;       * Redistributions in binary form must reproduce the above copyright notice, this list of    |
  35. ;;         conditions and the following disclaimer in the documentation and/or other materials       |
  36. ;;         provided with the distribution.                                                           |
  37. ;;       * Neither the name of the <organization> nor the names of its contributors may be used to   |
  38. ;;         endorse or promote products derived from this software without specific prior written     |
  39. ;;         permission.                                                                               |
  40. ;;                                                                                                   |
  41. ;; THIS SOFTWARE IS PROVIDED BY Sergei Steshin ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,      |
  42. ;; INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A        |
  43. ;; PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY DIRECT, |
  44. ;; INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED    |
  45. ;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS       |
  46. ;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT          |
  47. ;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  |
  48. ;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                      |
  49. ;....................................................................................................|
  50.  
  51.  
  52. ;#___________________________________________________________________________________________________
  53. ;****************************************************************************************************|
  54. ; ÇÀÃÎËÎÂÎÊ ÈÑÏÎËÍßÅÌÎÃÎ ÔÀÉËÀ ÏÐÈËÎÆÅÍÈß ÄËß ÊÎËÈÁÐÈ ÎÑ                                             |
  55. ;----------------------------------------------------------------------------------------------------/
  56.   use32
  57.   org    0x0
  58.  
  59.   db     'MENUET01'
  60.   dd     0x01
  61.   dd     START
  62.   dd     I_END
  63.   dd     0x1000
  64.   dd     0x1000
  65.   dd     0x0
  66.   dd     0x0
  67.  
  68. include '../../../macros.inc'
  69.   WIN_W      equ 271                      ; øèðèíà îêíà
  70.   WIN_H      equ 192                      ; âûñîòà îêíà
  71.   WIN_X      equ 250                      ; êîîðäèíàòà õ îêíà
  72.   WIN_Y      equ 190                      ; êîîðäèíàòà ó îêíà
  73.  
  74. START:
  75. ;#___________________________________________________________________________________________________
  76. ;****************************************************************************************************|
  77. ; ÎÑÍÎÂÍÎÉ ÖÈÊË ÏÐÎÃÐÀÌÌÛ - ÎÁÐÀÁÎÒÊÀ ÑÎÁÛÒÈÉ                                                        |
  78. ;----------------------------------------------------------------------------------------------------/
  79. red:
  80.     call draw_window                      ; âûçûâàåì ïåðåðèñîâêó îêíà ïðèëîæåíèÿ
  81. still:
  82.     mcall   10                            ; ôóíêöèÿ 10 - æäàòü ñîáûòèÿ
  83.     cmp     eax,1                         ; ïåðåðèñîâàòü îêíî ?
  84.     je      red                           ; åñëè äà - íà ìåòêó red
  85.     cmp     eax,2                         ; íàæàòà êëàâèøà ?
  86.     je      key                           ; åñëè äà - íà key
  87.     cmp     eax,3                         ; íàæàòà êíîïêà ?
  88.     je      button                        ; åñëè äà - íà button
  89.     jmp     still                         ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà
  90. ;end_still
  91.  
  92.  
  93. key:                                      ; íàæàòà êëàâèøà íà êëàâèàòóðå
  94.     mcall   2                             ; ôóíêöèÿ 2 - ñ÷èòàòü êîä ñèìâîëà (â ah) (òóò â ïðèíöèïå íå íóæíà)
  95.     jmp     still                         ; âåðíóòüñÿ ê íà÷àëó öèêëà
  96. ;end_key
  97.  
  98. button:
  99.     mcall   17                            ; 17 - ïîëó÷èòü èäåíòèôèêàòîð íàæàòîé êíîïêè
  100.     cmp     ah, 1                         ; åñëè íàæàòà êíîïêà ñ íîìåðîì 1,
  101.     jz      bexit                         ; âûõîäèì
  102.   ;îáðàáîòêà êíîïêè Next
  103.     cmp     ah, 12                        ; åñëè íàæàòà êíîïêà NEXT
  104.     jne     set_bg                        ; âûõîäèì
  105.     inc     [pnext]                       ; óâåëè÷èâàåì ïðè íàæàòèè íîìåð ïàëèòðû
  106.     mov     eax,[pnext]                   ; çàíîñèì çíà÷åíèå â åàõ
  107.     cmp     al,6                          ; ñðàâíèâàåì ñ çàÿâëåííûì êîëè÷åñòâîì ïàëèòð
  108.     jne     next_redraw                   ; åñëè íå áîëüøå ìàêñèìóìà òî íà âûçîâ îòðèñîâêè
  109.     xor     eax,eax                       ; èíà÷å çàíóëÿåì ïàëèòðó íà default
  110.     mov     [pnext],eax                   ; è çàïîìèíàåì ÷òî ñáðîñèëè ïàëèòðó íà default
  111.   next_redraw:
  112.     call    draw_palitra                  ; ÐÈÑÓÅÌ ÏÀËÈÒÐÓ
  113.     jmp     still                         ; Óõîäèì íà îæèäàíèå äðóãîãî ñîáûòèÿ
  114.   set_bg:
  115.     cmp     ah, 14                        ; åñëè íàæàòà êíîïêà BACKGROUND
  116.     jne     next_end                      ; âûõîäèì
  117.         mcall   15,4,1
  118.         mcall   15,1,1,1
  119.         mcall   15,5,color,0,3*1*1
  120.         mcall   15,3
  121.         jmp     still
  122.   next_end:
  123.     cmp     ah,13                         ; COLOR SWAP
  124.     jne     color_swap_end
  125.     push    [color2]
  126.     push    [color]
  127.     pop     [color2]
  128.     pop     [color]
  129.     call    draw_result
  130.   color_swap_end:
  131.     cmp     ah, 7                         ; Ïðîâåðÿåì íàæàòà êíîïêà ñ ID=7
  132.     jne     color_button                  ; Åñëè íå íàæàòà, òî èä¸ì äàëüøå
  133.     call    mouse_get                     ; Èíà÷å âêëþ÷àåì îáðàáîò÷èê ìûøè, ÷òîáû ñ÷èòàòü çíà÷åíèå öâåòà ñ ïàëèòðû
  134.     jmp     still                         ; È óõîäèì íà îæèäàíèå äðóãîãî ñîáûòèÿ
  135.   color_button:                           ; ÐÀÑ×¨Ò êîîðäèíàò äëÿ ïîëçóíêîâ RGBA
  136.     push    eax                           ; çàïîìèíàåì åàõ
  137.     call    mouse_local                   ; ïîëó÷àåì ëîêàëüíûå êîîðäèíàòû
  138.     mov     ebx,137                       ; íèæíÿÿ ãðàíèöà ïîëçóíêà ïî Ó
  139.     mov     ecx,[mouse_y]                 ; çàíèñèì â åñõ çíà÷åíèå êóðñîðà ïî Ó
  140.     sub     ebx,ecx                       ; íàõîäèì ðàçíîñòü (ò.å. êóäà ñìåùàåòñÿ ïîëçóíîê)
  141.     mov     ecx,3                         ; çàíîñèì â åñõ öèôðó 3 (256/3=85, ãäå 85-âûñîòà ïîëçóíêîâ)
  142.     imul    ecx,ebx                       ; íàõîäèì èñòèííûé ïàðàìåòð öâåòà ñ ó÷¸òîì ìàñøòàáà ïîëçóíêà---+
  143.     pop     eax                           ; âîññòàíàâëèâàåì åàõ                                          :
  144.   ;red_button:                            ; Êðàñíûé Òðåêáàð                                              :
  145.     cmp     ah, 8                         ; ID=8                                                         :
  146.     jne     green_button                  ; åñëè íåò, òî ïðîâåðÿåì çåë¸íûé òðåêáàð                       :
  147.     mov     [cred],cl                     ; èíà÷å ïðèñâàèâàåì çíà÷åíèå, êðàñíîìó öâåòó ñïåêòðà    <------+
  148.     call    set_spectr                    ; óñòàíàâëèâàåì ñïåêòð
  149.     jmp     still                         ; Óõîäèì íà îæèäàíèå äðóãîãî ñîáûòèÿ
  150.   green_button:
  151.     cmp     ah, 9
  152.     jne     blue_button
  153.     mov     [cgreen],cl
  154.     call    set_spectr
  155.     jmp     still                         ; Óõîäèì íà îæèäàíèå äðóãîãî ñîáûòèÿ
  156.   blue_button:
  157.     cmp     ah, 10
  158.     jne     alpha_button
  159.     mov     [cblue],cl
  160.     call    set_spectr
  161.     jmp     still                         ; Óõîäèì íà îæèäàíèå äðóãîãî ñîáûòèÿ
  162.   alpha_button:
  163.     cmp     ah, 11
  164.     jne     still
  165.     mov     [calpha],cl
  166.     call    set_spectr
  167.     jmp     still                         ; Óõîäèì íà îæèäàíèå äðóãîãî ñîáûòèÿ
  168.   bexit:
  169.     mcall -1                              ; èíà÷å êîíåö ïðîãðàììû
  170. ;end_button
  171.  
  172. ;#___________________________________________________________________________________________________
  173. ;****************************************************************************************************|
  174. ; ÃËÀÂÍÛÉ ÌÎÄÓËÜ ÎÒÐÈÑÎÂÊÈ ÎÊÍÀ È ÝËÅÌÅÍÒÎÂ ÏÐÈËÎÆÅÍÈß                                               |
  175. ;----------------------------------------------------------------------------------------------------/
  176. draw_window:
  177.     mov     eax,12                        ; ôóíêöèÿ 12: îçíà÷àåò, ÷òî áóäåò ðèñîâàòüñÿ îêíî
  178.     mov     ebx,1                         ; 1,íà÷àëî ðèñîâàíèÿ
  179.     int     0x40                          ; Ïðåðûâàíèå
  180.  
  181.     mov     eax,48                        ; Ôóíêöèÿ 48 - ñòèëè îòîáðàæåíèÿ îêîí
  182.     mov     ebx,3                         ; Ïîäôóíêöèÿ 3 - ïîëó÷èòü ñòàíäàðòíûå öâåòà îêîí.
  183.     mov     ecx,sc                        ; Óêàçàòåëü íà áóôåð ðàçìåðîì edx áàéò, ïîä ñòðóêòóðó
  184.     mov     edx,sizeof.system_colors      ; Ðàçìåð òàáëèöû öâåòîâ (äîëæåí áûòü 40 áàéò)
  185.     int     0x40                          ; Ïðåðûâàíèå
  186.  
  187.     mov     eax,48                        ; Ôóíêöèÿ 48 - ñòèëè îòîáðàæåíèÿ îêîí.
  188.     mov     ebx,4                         ; Ïîäôóíêöèÿ 4 - âîçâðàùàåò eax = âûñîòà ñêèíà.
  189.     int     0x40                          ; Ïðåðûâàíèå
  190.     mov     ecx,eax                       ; Çàïîìèíàåì âûñîòó ñêèíà
  191.  
  192.     xor     eax,eax                       ; Î÷èùàåì eax (mov eax,0) (Ôóíêöèÿ 0)
  193.     mov     ebx,WIN_X shl 16+WIN_W        ; [êîîðäèíàòà ïî îñè x]*65536 + [ðàçìåð ïî îñè x]
  194.     add     ecx,WIN_Y shl 16+WIN_H        ; Âûñîòà ñêèíà + [êîîðäèíàòà ïî y]*65536 + [ðàçìåð ïî y] (168 äëÿ âåðñèè 0.2)
  195.     mov     edx,[sc.work]                 ; Âèäèìî ñòèëü îêíà ïî äåôîëòó
  196.     or      edx,0x34000000                ; Èëè îêíî ñî ñêèíîì ôèêñèðîâàííûõ ðàçìåðîâ
  197.     mov     edi,title                     ; Çàãîëîâîê îêíà
  198.     int     0x40                          ; Ïðåðûâàíèå
  199.  
  200.     call    draw_palitra                  ; ÐÈÑÓÅÌ ÏÀËÈÒÐÓ
  201.     call    draw_result                   ; ÐÈÑÓÅÌ ÐÅÇÓËÜÒÀÒ
  202.  
  203.     mov     eax,8                         ; Ôóíêöèÿ 8 - îïðåäåëèòü/óäàëèòü êíîïêó
  204.     mov     ebx,110 shl 16+147            ; Íà÷àëüíûå êîîðäèíàòû ïî õ [ê-òà x]*65536 + [ðàçìåð]
  205.     mov     ecx,9 shl 16+147              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  206.     mov     edx,0x60000007                ; Íà÷àëüíîå ID êíîïîê - 0xXYnnnnnn
  207.     int     0x40
  208.  
  209.     mov     ebx,13 shl 16+12              ; Íà÷àëüíûå êîîðäèíàòû ïî õ [ê-òà x]*65536 + [ðàçìåð]
  210.     mov     edx,0x60000008                ; ID = 8
  211.     mov     ecx,51 shl 16+85              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  212.     int     0x40                          ; Ðèñóåì íåâèäèìóþ êíîïêó ïîä ñëàéäåðîì red
  213.     add     ebx,23 shl 16                 ; Äîáàâëÿåì
  214.     inc     edx                           ; ID = 9
  215.     int     0x40                          ; Ðèñóåì íåâèäèìóþ êíîïêó ïîä ñëàéäåðîì green
  216.     add     ebx,23 shl 16                 ; Äîáàâëÿåì
  217.     inc     edx                           ; ID = 10
  218.     int     0x40                          ; Ðèñóåì íåâèäèìóþ êíîïêó ïîä ñëàéäåðîì blue
  219.     add     ebx,23 shl 16                 ; Äîáàâëÿåì
  220.     inc     edx                           ; ID = 11
  221.     int     0x40                          ; Ðèñóåì íåâèäèìóþ êíîïêó ïîä ñëàéäåðîì alpha
  222.  
  223.     mov     eax,8                         ; Ôóíêöèÿ 8 - îïðåäåëèòü/óäàëèòü êíîïêó (ÑÌÅÍÀ ÖÂÅÒÀ)
  224.     mov     ebx,11 shl 16+20              ; Íà÷àëüíûå êîîðäèíàòû ïî õ [ê-òà x]*65536 + [ðàçìåð]
  225.     mov     ecx,12 shl 16+20              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  226.     mov     edx,0x6000000D                ; ID = 13
  227.     int     0x40
  228.  
  229.     mov     eax,12                        ; ôóíêöèÿ 12: îçíà÷àåò, ÷òî áóäåò ðèñîâàòüñÿ îêíî
  230.     mov     ebx,2                         ; 2 - êîíåö ðèñîâàíèÿ
  231.     int     0x40                          ; Ïðåðûâàíèå
  232.  
  233.     ;.................................................................................................
  234.     ; Îòðèñîâêà íèæíåé ïàíåëè
  235.     ;.................................................................................................
  236.     mov     eax,8                         ; Ôóíêöèÿ 8 - îïðåäåëèòü/óäàëèòü êíîïêó
  237.     mov     ebx,4 shl 16+64               ; Íà÷àëüíûå êîîðäèíàòû ïî õ [ê-òà x]*65536 + [ðàçìåð]
  238.     mov     ecx,169 shl 16+16             ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  239.     mov     edx,12                        ; ID = 12
  240.     mov     esi,[sc.work_button]          ; öâåò
  241.     int     0x40
  242.        
  243.     mov     ebx,80 shl 16+102             ; Íà÷àëüíûå êîîðäèíàòû ïî õ [ê-òà x]*65536 + [ðàçìåð]
  244.     mov     edx,14                        ; BACKGROUND button
  245.     int     0x40
  246.  
  247.  
  248.     mov     eax,4                         ; 4 - âûâåñòè ñòðîêó òåêñòà â îêíî
  249.     mov     ebx,25 shl 16+174             ; [êîîðäèíàòà ïî îñè x]*65536 + [êîîðäèíàòà ïî îñè y]
  250.     mov     ecx,[sc.work_button_text]     ; 0xX0RRGGBB (RR, GG, BB çàäàþò öâåò òåêñòà)
  251.     mov     edx,bnext                     ; óêàçàòåëü íà íà÷àëî ñòðîêè
  252.     ;mov     esi,1                        ; âûâîäèòü esi ñèìâîëîâ
  253.     int     0x40
  254.  
  255.     ;mov     ebx,247 shl 16+64             ; Íà÷àëüíûå êîîðäèíàòû ïî õ [ê-òà x]*65536 + [ðàçìåð]
  256.     ;mov     edx,12                        ; ID = 12
  257.     ;int     0x40
  258.  
  259.     mov     eax,38                        ; Ôóíêöèÿ 38 - íàðèñîâàòü îòðåçîê.
  260.     mov     ebx,4 shl 16+257              ;[êîîðäèíàòà íà÷àëà ïî îñè x]*65536 + [êîîðäèíàòà êîíöà ïî îñè x]
  261.     mov     ecx,163 shl 16+163            ;[êîîðäèíàòà íà÷àëà ïî îñè y]*65536 + [êîîðäèíàòà êîíöà ïî îñè y]
  262.     mov     edx,0x00666666                ;0x00RRGGBB - öâåò
  263.     int     0x40
  264.  
  265.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  266.  
  267.  
  268. ;#___________________________________________________________________________________________________
  269. ;****************************************************************************************************|
  270. ; ÁËÎÊ ÂÑÏÎÌÎÃÀÒÅËÜÍÛÕ ÏÐÎÖÅÄÓÐ È ÔÓÍÊÖÈÉ ÏÐÈËÎÆÅÍÈß                                                 |
  271. ;----------------------------------------------------------------------------------------------------/
  272.  
  273. mouse_global:
  274.     ;.................................................................................................
  275.     ; Ïîëó÷àåì êîîðäèíàòû ìûøè
  276.     ;.................................................................................................
  277.     mov     eax,37                        ; Ôóíêöèÿ 37 - ðàáîòà ñ ìûøüþ
  278.     mov     ebx,0                         ; íàì íóæíû ãëîáàëüíûå êîîðäèíàòû
  279.     int     0x40                          ; eax = x*65536 + y, (x,y)=êîîðäèíàòû êóðñîðà ìûøè
  280.     mov     ecx,eax                       ;
  281.     shr     ecx,16                        ; ecx = x+1
  282.     movzx   edx,ax                        ; edx = y+1
  283.     dec     ecx                           ; ecx = x
  284.     dec     edx                           ; edx = y
  285.     mov     [mouse_x],ecx                 ; mouse_x = x
  286.     mov     [mouse_y],edx                 ; mouse_y = y
  287.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  288. ;end_mouse_global
  289.  
  290. mouse_local:
  291.     ;.................................................................................................
  292.     ; Ïîëó÷àåì êîîðäèíàòû ìûøè îòíîñèòåëüíî îêíà
  293.     ;.................................................................................................
  294.     mov     eax,37                        ; Ôóíêöèÿ 37 - ðàáîòà ñ ìûøüþ
  295.     mov     ebx,1                         ; íàì íóæíû ãëîáàëüíûå êîîðäèíàòû
  296.     int     0x40                          ; eax = x*65536 + y, (x,y)=êîîðäèíàòû êóðñîðà ìûøè
  297.     mov     ecx,eax                       ;
  298.     shr     ecx,16                        ; ecx = x+1
  299.     movzx   edx,ax                        ; edx = y+1
  300.     dec     ecx                           ; ecx = x
  301.     dec     edx                           ; edx = y
  302.     mov     [mouse_x],ecx                 ; mouse_x = x
  303.     mov     [mouse_y],edx                 ; mouse_y = y
  304.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  305. ;end_mouse_local
  306.  
  307. desktop_get:
  308.     ;.................................................................................................
  309.     ; Îïðåäåëÿåì øèðèíó ýêðàíà
  310.     ;.................................................................................................
  311.     mov     eax,14                        ; Îïðåäåëÿåì øèðèíó ýêðàíà (eax = [xsize]*65536 + [ysize])
  312.     int     0x40                          ; xsize = ðàçìåð ïî ãîðèçîíòàëè - 1
  313.     mov     ebx,eax                       ;
  314.     shr     ebx,16                        ; ebx = xsize-1
  315.     ;movzx   edx,ax                       ;; edx = ysize-1 (ëèøíèé êîä)
  316.     inc     ebx                           ; ebx = xsize
  317.     ;inc     edx                          ;; edx = ysize (ëèøíèé êîä)
  318.     mov     [desctop_w],ebx
  319.     ret
  320. ;end_desktop_get
  321.  
  322. mouse_get:
  323.     mov     esi,2                         ; ÊÎÑÒÛËÜ: ôëàã äëÿ èçáåæàíèÿ çàöèêëèâàíèÿ
  324.     call    mouse_global
  325.     call    desktop_get
  326.     re_mouse_loop:                        ; ÊÎÑÒÛËÜ: ìåòêà äëÿ âîçâðàòà åñëè ïîïàëè â ñåòêó
  327.       mov     ebx,[desctop_w]
  328.       imul    ebx,[mouse_y]               ; ebx = y*xsize
  329.       add     ebx,[mouse_x]               ; ebx = y*xsize+x
  330.  
  331.       ;.................................................................................................
  332.       ; Áåðåì öâåò ñ ïàëèòðû â ïåðåìåííóþ
  333.       ;.................................................................................................
  334.       mov     eax,35                      ; Ôóíêöèÿ âçÿòèÿ öâåòà
  335.       ;mov     ebx,ecx                    ;; ebx = y*xsize+x (ëèøíèé êîä)
  336.       int     0x40                        ; Ïîëó÷àåì öâåò â eax
  337.       cmp     eax,[sc.work]               ; Ñðàâíèâàåì ñ ôîíîì ïðèëîæåíèÿ
  338.       je      mouse_err                   ; Åñëè ýòî îí - òî íè÷åãî íå äåëàåì
  339.       cmp     eax,0x222222                ; Ñðàâíèâàåì ñ öâåòîì ñåòêè
  340.       je      mouse_err                   ; Åñëè ýòî îí - òî íè÷åãî íå äåëàåì
  341.       jmp     mouse_set                   ; ÊÎÑÒÛËÜ: ïðûãàåì ÷òîáû íå áðàòü öâåò ñåòêè
  342.     mouse_err:                            ; ÊÎÑÒÛËÜ: åñëè ïîïàëè â ñåòêó èëè ôîí
  343.       inc     [mouse_y]                   ; ÊÎÑÒÛËÜ: ñìåùàåì ïî äèàãîíàëè ñíà÷àëà ïî õ
  344.       inc     [mouse_x]                   ; ÊÎÑÒÛËÜ: ñìåùàåì ïî äèàãîíàëè ïîòîì ïî ó
  345.       dec     esi                         ; ÊÎÑÒÛËÜ: Óìåíüøàåì ôëàã
  346.       cmp     esi,0                       ; ÊÎÑÒÛËÜ: Ñðàâíèâàåì ñ íóëåì
  347.     jz        mouse_exit                  ; ÊÎÑÒÛËÜ: Åñëè íîëü òî ñäåëàëè âñ¸ ÷òî ìîãëè
  348.     jmp    re_mouse_loop                  ; ÊÎÑÒÛËÜ: Åñëè íå íîëü òî ïîïðîáóåì âçÿòü ñîñåëíèé ïèêñåëü
  349.     mouse_set:
  350.     mov     [color],eax                   ; Èíà÷å çàïîìèíàåì íîâûé öâåò
  351.     call    draw_result                   ; Âûâîäèì ðåçóëüòàò
  352.     mouse_exit:
  353.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  354. ;end_mouse_get----------------------------------------------------------------------------------------
  355.  
  356. draw_palitra:
  357.     ;.................................................................................................
  358.     ; Îòðèñîâêà ôîíà ïîä êíîïêè
  359.     ;.................................................................................................
  360.     mov     eax,13                        ; Ôóíêöèÿ 13 - íàðèñîâàòü ïðÿìîóãîëüíèê
  361.     mov     edx,0x222222                  ; öâåò
  362.     mov     ecx,9 shl 16+73               ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  363.     mov     esi,2                         ; Ñ÷åò÷èê ëèíèé ïîäëîæåê
  364.     re_draw:
  365.     mov     ebx,110 shl 16+73             ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  366.     mov     edi,2                         ; Ñ÷åò÷èê êîëè÷åñòâà ïîäëîæåê
  367.     for_fon_loop:
  368.       int     0x40                        ; Ïðåðûâàíèå
  369.       add     ebx,75 shl 16               ; Ñìåùàåì ïîëîæåíèå ëèíèè ïî õ
  370.       dec     edi                         ; Óìåíüøàåì ñ÷åò÷èê êíîïîê
  371.       cmp     edi,0                       ; Ñðàâíèâàåì ñ íóëåì
  372.     jnz     for_fon_loop                  ; Åñëè íå íîëü òî â íà÷àëî öèêëà
  373.     dec     esi                           ; Óìåíüøàåì åãî
  374.     cmp     esi,0                         ; Ñðàâíèâàåì ñ íóëåì
  375.     mov     ecx,84 shl 16+73              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  376.     jnz     re_draw                       ; Åñëè íå íîëü òî â íà÷àëî öèêëà
  377.  
  378.     ;.................................................................................................
  379.     ; Îòðèñîâêà êíîïîê ïî öèêëó
  380.     ;.................................................................................................
  381.     mov     eax,13                        ; Ôóíêöèÿ 13 - íàðèñîâàòü ïðÿìîóãîëüíèê
  382.     mov     edx,0x0FFFFFFF                ; öâåò
  383.     mov     esi,4                         ; Ñ÷åò÷èê êîëè÷åñòâà àáçàöåâ (#4,8)
  384.     mov     ebx,99 shl 16+8               ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  385.     for_abz:
  386.       ;;push    esi                       ; Ñîõðàíÿåì çíà÷åíèå ñ÷åò÷èêà ëèíèé â ñòåê
  387.       cmp     esi,2
  388.       jne     x2_line
  389.       mov     ebx,99 shl 16+8
  390.       x2_line:
  391.       add     ebx,3 shl 16                ; Ñìåùàåì ïîëîæåíèå ëèíèè ïî x
  392.       mov     edi,8                       ; Ñ÷åò÷èê êîëè÷åñòâà êíîïîê â ñòðîêå
  393.       for_stolbik:
  394.         push    edi                       ; Ñîõðàíÿåì çíà÷åíèå ñ÷åò÷èêà ëèíèé â ñòåê
  395.         mov     edi,8                     ; Ñ÷åò÷èê êîëè÷åñòâà êíîïîê â ñòðîêå
  396.         mov     ecx,  1 shl 16+8          ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]  
  397.         cmp     esi,2
  398.         jg      y2_line                   ; Åñëè áîëüøå 4 òî èãíîðèì
  399.         mov     ecx,76 shl 16+8
  400.         y2_line:
  401.         add     ebx,9 shl 16              ; Ñìåùàåì ïîëîæåíèå ëèíèè ïî x
  402.         for_loop:
  403.           add     ecx,9 shl 16            ; Ñìåùàåì ïîëîæåíèå ëèíèè ïî y
  404.           int     0x40                    ; Ïðåðûâàíèå
  405.           call    sub_red
  406.           dec     edi                     ; Óìåíüøàåì ñ÷åò÷èê êíîïîê
  407.           cmp     edi,0                   ; Ñðàâíèâàåì ñ íóëåì
  408.           jnz     for_loop                ; Åñëè íå íîëü òî â íà÷àëî öèêëà
  409.       call    sub_green
  410.       pop     edi                         ; Èíà÷å âîññòàíàâëèâàåì ñ÷åò÷èê ëèíèé
  411.       dec     edi                         ; Óìåíüøàåì åãî
  412.       cmp     edi,0                       ; Ñðàâíèâàåì ñ íóëåì
  413.       jnz     for_stolbik                 ; Åñëè íå íîëü òî â íà÷àëî öèêëà
  414.     call    sub_blue
  415.     ;;pop     esi                         ; Èíà÷å âîññòàíàâëèâàåì ñ÷åò÷èê ëèíèé
  416.     dec     esi                           ; Óìåíüøàåì åãî
  417.     cmp     esi,0                         ; Ñðàâíèâàåì ñ íóëåì
  418.     jnz     for_abz                       ; Åñëè íå íîëü òî â íà÷àëî öèêëà
  419.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  420. ;end_draw_palitra-------------------------------------------------------------------------------------
  421.  
  422.  
  423. sub_red:
  424.     ;.................................................................................................
  425.     ; Ðàñ÷¸ò ñìåùåíèé êðàñíîãî öâåòà â ãåíåðàöèè öâåòà ïàëèòðû
  426.     ;.................................................................................................
  427.     push    eax
  428.     mov     eax,[pnext]
  429.   ;sub_red_0                              ; palitra
  430.     cmp     al,0
  431.     jne     sub_red_1
  432.     sub     edx,0x20
  433.     jmp     sub_red_e
  434.   sub_red_1:                              ; random
  435.     cmp     al,1
  436.     jne     sub_red_2
  437.     sub     edx,0x40
  438.     jmp     sub_red_e
  439.   sub_red_2:                              ; gree
  440.     cmp     al,2
  441.     jne     sub_red_3
  442.     sub     edx,0x010101
  443.     jmp     sub_red_e
  444.   sub_red_3:                              ; red
  445.     cmp     al,3
  446.     jne     sub_red_4
  447.     sub     edx,0x0101
  448.     jmp     sub_red_e
  449.   sub_red_4:                              ; green
  450.     cmp     al,4
  451.     jne     sub_red_5
  452.     sub     edx,0x010001
  453.     jmp     sub_red_e
  454.   sub_red_5:                              ; blue
  455.     cmp     al,5
  456.     jne     sub_red_e
  457.     sub     edx,0x010100
  458.     jmp     sub_red_e
  459.   sub_red_e:
  460.     pop     eax
  461.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  462. ;end_sub_red------------------------------------------------------------------------------------------
  463.  
  464. sub_green:
  465.     ;.................................................................................................
  466.     ; Ðàñ÷¸ò ñìåùåíèé êðàñíîãî öâåòà â ãåíåðàöèè öâåòà ïàëèòðû
  467.     ;.................................................................................................
  468.     push    eax
  469.     mov     eax,[pnext]
  470.   ;sub_green_0
  471.     cmp     al,0
  472.     jne     sub_green_1
  473.     sub     edx,0x2000
  474.     jmp     sub_green_e
  475.   sub_green_1:
  476.     cmp     al,1
  477.     jne     sub_green_e
  478.     sub     edx,0x4000
  479.     ;jmp     sub_green_e
  480.   sub_green_e:
  481.     pop     eax
  482.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  483. ;end_sub_green----------------------------------------------------------------------------------------
  484.  
  485.  
  486. sub_blue:
  487.     ;.................................................................................................
  488.     ; Ðàñ÷¸ò ñìåùåíèé êðàñíîãî öâåòà â ãåíåðàöèè öâåòà ïàëèòðû
  489.     ;.................................................................................................
  490.     push    eax
  491.     mov     eax,[pnext]
  492.   ;sub_blue_0
  493.     cmp     al,0
  494.     jne     sub_blue_1
  495.     sub     edx,0x400000
  496.     jmp     sub_blue_e
  497.   sub_blue_1:
  498.     cmp     al,1
  499.     jne     sub_blue_e
  500.     sub     edx,0x600000
  501.     ;jmp     sub_blue_e
  502.   sub_blue_e:
  503.     pop     eax
  504.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  505. ;end_sub_blue-----------------------------------------------------------------------------------------
  506.  
  507. draw_result:
  508.     ;.................................................................................................
  509.     ; Áîëüøàÿ ðàìêà âûâîäà ðåçóëüòàòà
  510.     ;.................................................................................................
  511.     mov     eax,13                        ; Ôóíêöèÿ 13 - íàðèñîâàòü ïðÿìîóãîëüíèê
  512.     mov     edx,0x00666666                ; öâåò-îáâîäêè
  513.     mov     ebx,4 shl 16+98               ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  514.     mov     ecx,9 shl 16+148              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  515.     int     0x40
  516.     mov     edx,0x00F3F3F3                ; öâåò-ôîíà
  517.     mov     ebx,5 shl 16+96               ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  518.     mov     ecx,10 shl 16+146             ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  519.     int     0x40
  520.  
  521.     ;.................................................................................................
  522.     ; Îòðèñîâêà ðåçóëüòàòà öâåòà â hex color2
  523.     ;.................................................................................................
  524.     mov     eax,13                        ; Ôóíêöèÿ 13 - íàðèñîâàòü ïðÿìîóãîëüíèê
  525.     ; color 2 - draw fringle
  526.     mov     edx,0x222222                  ; öâåò-îáâîäêè
  527.     mov     ebx,16 shl 16+15              ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  528.     mov     ecx,16 shl 16+15              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  529.     int     0x40                          ; Ïðåðûâàíèå (îñ ðèñóåò ïðÿìîóãîëüíèê)
  530.     ; color 2 - draw color
  531.     mov     edx,[color2]                  ; öâåò
  532.     mov     ebx,17 shl 16+13              ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  533.     mov     ecx,17 shl 16+13              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  534.     int     0x40                          ; Ïðåðûâàíèå (îñ ðèñóåò ïðÿìîóãîëüíèê)
  535.     ; color 1 - draw fringle
  536.     mov     edx,0x222222                  ; öâåò-îáâîäêè
  537.     mov     ebx,11 shl 16+15              ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  538.     mov     ecx,12 shl 16+15              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  539.     int     0x40                          ; Ïðåðûâàíèå (îñ ðèñóåò ïðÿìîóãîëüíèê)
  540.     ; value - draw fringle
  541.     mov     ebx,34 shl 16+62              ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  542.     mov     ecx,16 shl 16+15              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  543.     int     0x40                          ; Ïðåðûâàíèå (îñ ðèñóåò ïðÿìîóãîëüíèê)
  544.  
  545.     ; color 2 - draw color
  546.     mov     edx,[color]                   ; öâåò
  547.     mov     ebx,12 shl 16+13              ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  548.     mov     ecx,13 shl 16+13              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  549.     int     0x40                          ; Ïðåðûâàíèå (îñ ðèñóåò ïðÿìîóãîëüíèê)
  550.     ; value - draw background
  551.     mov     edx,0xFFFFFF                  ; öâåò-ôîíà
  552.     mov     ebx,35 shl 16+60              ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  553.     mov     ecx,17 shl 16+13              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  554.     int     0x40                          ; Ïðåðûâàíèå (îñ ðèñóåò ïðÿìîóãîëüíèê)
  555.  
  556.     mov     eax,47                        ; Ôóíêöèÿ 47 - âûâîä ÷èñëà â îêíî
  557.     mov     ecx,[color]                   ; ÷èñëî (ïðè bl=0) èëè óêàçàòåëü (ïðè bl=1)
  558.     mov     esi,0x0                       ; 0xX0RRGGBB
  559.     mov     ebx,256+8 shl 16              ; ïàðàìåòðû ïðåîáðàçîâàíèÿ ÷èñëà â òåêñò (HEX)
  560.     mov     edx,45 shl 16+20              ; [êîîðäèíàòà ïî îñè x]*65536 + [êîîðäèíàòà ïî îñè y]
  561.     int     0x40                          ; Ïðåðûâàíèå - âûâîäèì ðåçóëüòàò â îêíî (HEX)
  562.  
  563.     mov     eax,4                         ; ôóíêöèÿ 4: íàïèñàòü òåêñò â îêíå
  564.     mov     ebx,38*65536+20               ; [x íà÷àëüíûé] *65536 + [y íà÷àëüíûé]
  565.     mov     ecx,0x0                       ; öâåò òåêñòà RRGGBB
  566.     mov     edx,hex                       ; ðèñóåì '#'
  567.     mov     esi,1                         ; äëèíà òåêñòà â áàéòàõ
  568.     int     0x40
  569.  
  570.     ;.................................................................................................
  571.     ; Îòðèñîâêà r g b çíà÷åíèé
  572.     ;.................................................................................................
  573.     call    get_spectr
  574.  
  575.     movzx   eax,[cred]                    ; êðàñíûé
  576.     mov     ebx,9*65536+142               ; [x íà÷àëüíûé] *65536 + [y íà÷àëüíûé]
  577.     call    draw_value                    ; âûâîäèì ðåçóëüòàò
  578.  
  579.     movzx   eax,[cgreen]                  ; çåëåíûé
  580.     mov     ebx,32*65536+142              ; [x íà÷àëüíûé] *65536 + [y íà÷àëüíûé]
  581.     call    draw_value                    ; âûâîäèì ðåçóëüòàò
  582.  
  583.     movzx   eax,[cblue]                   ; ñèíèé
  584.     mov     ebx,55*65536+142              ; [x íà÷àëüíûé] *65536 + [y íà÷àëüíûé]
  585.     call    draw_value                    ; âûâîäèì ðåçóëüòàò
  586.  
  587.     movzx   eax,[calpha]                  ; àëüôà
  588.     mov     ebx,78*65536+142              ; [x íà÷àëüíûé] *65536 + [y íà÷àëüíûé]
  589.     call    draw_value                    ; âûâîäèì ðåçóëüòàò
  590.  
  591.     ;.................................................................................................
  592.     ; Âûâîäèì áóêâû r g b a
  593.     ;.................................................................................................
  594.     mov     eax,4                         ; 4 - âûâåñòè ñòðîêó òåêñòà â îêíî
  595.     mov     ebx,16 shl 16+40              ; [êîîðäèíàòà ïî îñè x]*65536 + [êîîðäèíàòà ïî îñè y]
  596.     mov     ecx,0x0                       ; 0xX0RRGGBB (RR, GG, BB çàäàþò öâåò òåêñòà)
  597.     mov     edx,cname                     ; óêàçàòåëü íà íà÷àëî ñòðîêè
  598.     mov     esi,1                         ; âûâîäèòü esi ñèìâîëîâ
  599.     newline:                              ; öèêë
  600.       int     0x40                        ; Ïðåðûâàíèå
  601.       add     ebx,23 shl 16               ; Äîáàâëÿåì
  602.       add     edx,1                       ; Äîáàâëÿåì
  603.       cmp     [edx],byte 'x'              ; Ñðàâíåíèå ñ áàéòîì õ
  604.     jne    newline                        ; Åñëè íå íóëü èëè íå ðàâíî
  605.  
  606.     ;.................................................................................................
  607.     ; Îòðèñîâêà ñëàéäåðîâ
  608.     ;.................................................................................................
  609.     mov     eax,13                        ; Ôóíêöèÿ 13 - íàðèñîâàòü ïðÿìîóãîëüíèê
  610.     mov     edx,0x222222                  ; öâåò-îáâîäêè
  611.     mov     ebx,16 shl 16+4               ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  612.     mov     ecx,51 shl 16+86              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  613.     int     0x40
  614.     add     ebx,23 shl 16                 ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà y]*65536 + [ðàçìåð]
  615.     int     0x40
  616.     add     ebx,23 shl 16                 ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà y]*65536 + [ðàçìåð]
  617.     int     0x40
  618.     add     ebx,23 shl 16                 ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà y]*65536 + [ðàçìåð]
  619.     int     0x40
  620.  
  621.     mov     edx,0xFA0919                  ; öâåò-îáâîäêè
  622.     mov     ebx,17 shl 16+2               ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  623.     mov     ecx,52 shl 16+84              ; Íà÷àëüíûå êîîðäèíàòû ïî y [ê-òà y]*65536 + [ðàçìåð]
  624.     int     0x40
  625.     mov     edx,0x08CE19                  ; öâåò-îáâîäêè
  626.     add     ebx,23 shl 16                 ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà y]*65536 + [ðàçìåð]
  627.     int     0x40
  628.     mov     edx,0x0909FF                  ; öâåò-îáâîäêè
  629.     add     ebx,23 shl 16                 ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà y]*65536 + [ðàçìåð]
  630.     int     0x40
  631.     mov     edx,0xE4E4E4                  ; öâåò-îáâîäêè
  632.     add     ebx,23 shl 16                 ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà y]*65536 + [ðàçìåð]
  633.     int     0x40
  634.  
  635.     ;.................................................................................................
  636.     ; Îòðèñîâêà ïîëçóíêîâ
  637.     ;.................................................................................................
  638.     mov     edx,0x0                       ; öâåò-ïîëçóíêîâ
  639.     mov     ebx,17 shl 16+11              ; Íà÷àëüíûå êîîðäèíàòû ïî x [ê-òà x]*65536 + [ðàçìåð]
  640.     movzx   eax,[cred]                    ; áåðåì çíà÷åíèå öâåòà
  641.     call    draw_slider
  642.     add     ebx,23 shl 16
  643.     movzx   eax,[cgreen]                  ; áåðåì çíà÷åíèå öâåòà
  644.     call    draw_slider
  645.     add     ebx,23 shl 16
  646.     movzx   eax,[cblue]                   ; áåðåì çíà÷åíèå öâåòà
  647.     call    draw_slider
  648.     add     ebx,23 shl 16
  649.     movzx   eax,[calpha]                  ; áåðåì çíà÷åíèå öâåòà
  650.     call    draw_slider
  651.  
  652.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  653. ;end_draw_result
  654.  
  655. draw_slider:
  656.     xor     ecx,ecx
  657.     mov     cl,0x3                        ; áóäåì äåëèòü åãî íà 3 òàê êàê ïîëçóíêè äëèííîé 85 ïèêñåëåé
  658.     div     cl                            ; äåëèì - öåëîå â al îñòàòîê â ah
  659.     mov     cl,136                        ; íèæíÿÿ òî÷êà ïîëçóíêà
  660.     sub     cl,al                         ; cl=cl-al
  661.     shl     ecx,16
  662.     add     ecx,1                         ; çàäàåì íà÷àëüíîå ïîëîæåíèå
  663.     mov     eax,13                        ; Ôóíêöèÿ 13 - íàðèñîâàòü ïðÿìîóãîëüíèê
  664.     int     0x40
  665.     push    ebx                           ; ñîõðàíÿåì äëÿ ñëåäóþùåãî ïîëçóíêà x+w
  666.     sub     ebx,8                         ; òàê êàê øèðèíà ëèíèè 11 òî îòíèìàåì 8 ÷òîáû êóáèê ñòàë øèðèíîé 3
  667.     add     ebx,8 shl 16                  ; Êîîðäèíàòû ïî x äëÿ êâàäðàòà íà ïîëçóíêå ñìåùàåì íà 8 â ïðàâî
  668.     inc     ecx                           ; áûäëîêîäèì âûñîòó ïîëçóíêà äî 3-õ (1+1=2)
  669.     inc     ecx                           ; (2+1=3) íó âîò ó íàñ áóäåò êóáèê 3õ3 íà 8 â ïðàâî îò ëèíèè
  670.     int     0x40                          ; ðèñóåì
  671.     pop     ebx                           ; âîññòàíàâëèâàåì íîðìàëüíûå êîîðäèíàòû
  672.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  673.  
  674. ;end_slider
  675.  
  676. draw_value:
  677.     ;.................................................................................................
  678.     ; Âûâîä ÷èñëà èç ñòðîêè â óêàçàííîé îáëàñòè
  679.     ;.................................................................................................
  680.     push    ebx                           ; ñîõðàíÿåì ïðèñëàííûå êîîðäèíàòû
  681.     mov     ebx,10                        ; óñòàíàâëèâàåì îñíîâàíèå ñèñòåìû ñ÷èñëåíèÿ
  682.     mov     edi,buff                      ; óêàçàòåëü íà ñòðîêó áóôåðà
  683.     call    int2ascii                     ; êîíâåðòèðóåì ÷èñëî è ëîæèì êàê ñòðîêó â áóôåð + esi äëèíà
  684.     mov     eax,4                         ; ôóíêöèÿ 4: íàïèñàòü òåêñò â îêíå
  685.     pop     ebx                           ; äîñòàåì èç ñòåêà ïðèñëàííûå êîîðäèíàòû
  686.     cmp     esi,2                         ; ÖÅÍÒÐÈÐÎÂÀÍÈÅ ÒÅÊÑÒÀ
  687.     jne     draw_value_1
  688.     add     ebx,4 shl 16
  689.     jmp     draw_value_e
  690.   draw_value_1:
  691.     cmp     esi,1
  692.     jne     draw_value_e
  693.     add     ebx,7 shl 16
  694.   draw_value_e:
  695.     mov     ecx,0x0                       ; öâåò òåêñòà RRGGBB
  696.     mov     edx,buff                      ; óêàçàòåëü íà íà÷àëî òåêñòà
  697.     int     0x40
  698.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  699. ;end_draw_value
  700.  
  701. hex_digit:
  702.     ;.................................................................................................
  703.     ; Ïðåîáðàçîâàíèå â ASCII (âíå çàâèñèìîñòè îò ñèñòåìû ñ÷èñëåíèÿ)
  704.     ;.................................................................................................
  705.     cmp    dl,10                          ; â dl îæèäàåòñÿ ÷èñëî îò 0 äî 15
  706.     jb     .less                          ; åñëè dl<10 òî ïåðåõîäèì
  707.     add    dl,'A'-10                      ; 10->A 11->B 12->C ...
  708.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  709.     .less:
  710.     or     dl,'0'                         ; Åñëè ñèñòåìà ñ÷èñëåíèÿ 10-ÿ è ìåíåå
  711.     ret                                   ; Âîçâðàùàåì óïðàâëåíèå
  712. ;end_hex_digit
  713.  
  714. int2ascii:
  715.     ;.................................................................................................
  716.     ; Ïðåîáðàçîâàíèå ÷èñëà â ñòðîêó
  717.     ;.................................................................................................
  718.     ; eax - 32-õ çíà÷íîå ÷èñëî
  719.     ; ebx - îñíîâàíèå ñèñòåìû ñ÷èñëåíèÿ
  720.     ; edi - óêàçàòåëü íà ñòðîêó áóôåðà
  721.     ; Âîçâðàùàåò çàïîëíåííûé áóôåð è esi - äëèíà ñòðîêè
  722.     ;pushad
  723.     xor     esi,esi                       ; çàíóëÿåì ñ÷åò÷èê ñèìâîëîâ
  724.     convert_loop:
  725.     xor     edx,edx                       ; çàíóëÿåì ðåãèñòð ïîä îñòàòîê
  726.     div     ebx                           ; eax/ebx - îñòàòîê â edx
  727.     call    hex_digit                     ; ïðåîáðàçóåì ñèìâîë
  728.     push    edx                           ; ëîæèì â ñòåê
  729.     inc     esi                           ; óâåëè÷èâàåì ñ÷åò÷èê
  730.     test    eax,eax                       ; åñëè åùå ìîæíî äåëèòü
  731.     jnz     convert_loop                  ; òî äåëèåì åùå
  732.     cld                                   ; ÎÁßÇÀÒÅËÜÍÎ ñáðàñûâàåì ôëàã íàïðàâëåíèÿ DF (çàïèñü âïåð¸ä)
  733.     write_loop:                           ; èíà÷å
  734.     pop     eax                           ; äîñòàåì èç ñòåêà â åàõ
  735.     stosb                                 ; çàïèñûâàåì â áóôåð ïî àäðåñó ES:(E)DI
  736.     dec     esi                           ; óìåíüøàåì ñ÷åò÷èê
  737.     test    esi,esi                       ; åñëè åñòü ÷òî äîñòàâàòü èç ñòåêà
  738.     jnz     write_loop                    ; òî äîñòà¸ì
  739.     mov     byte [edi],0                  ; èíà÷å äîïèñûûâàåì íóëåâîé áàéò
  740.     ;popad                                 ; âîññòàíàâëèâàåì çíà÷åíèÿ ðåãèñòðîâ
  741.     ; êîä íèæå íå èìååò íè÷åãî îáùåãî ê ôóíêöèè, ïðîñòî âîçâðàùàåò åùå äëèííó ïîëó÷åííîé ñòðîêè
  742.     mov     edi,buff                      ; óêàçàòåëü íà íà÷àëî òåêñòà
  743.     call    str_len
  744.     mov     esi,eax
  745.     ret                                   ; è âîçâðàùàåì óïðàâëåíèå
  746. ;end_int2ascii
  747.  
  748. get_spectr:
  749.     ;.................................................................................................
  750.     ; âîçâðàùàåò r,g,b ñîñòîâëÿþùèå öâåòà
  751.     ;.................................................................................................
  752.     ;; get blue
  753.     ;mov     ecx,[color]
  754.     ;movzx   eax,cl
  755.     ;mov     [cblue],al
  756.     ;; get red
  757.     ;mov     eax,ecx
  758.     ;xor     ax,ax     ; à íàäî ëè????
  759.     ;shr     eax,16
  760.     ;mov     [cred],al
  761.     ;; get green
  762.     ;shl      ecx,16
  763.     ;shr      ecx,24
  764.     ;mov      [cgreen],cl
  765.  
  766.     mov     ecx,[color]
  767.     mov     [cblue],cl
  768.     shr     ecx,8
  769.     mov     [cgreen],cl
  770.     shr     ecx,8
  771.     mov     [cred],cl
  772.     shr     ecx,8
  773.     mov     [calpha],cl
  774.     ret                                   ; è âîçâðàùàåì óïðàâëåíèå
  775. ;end_get_spectr
  776.  
  777. set_spectr:
  778.     ;.................................................................................................
  779.     ; óñòàíàâëèâàåò èç r,g,b öâåò
  780.     ;.................................................................................................
  781.     movzx   eax,[calpha]
  782.     shl     eax,8
  783.     mov     al,[cred]
  784.     shl     eax,8
  785.     mov     al,[cgreen]
  786.     shl     eax,8
  787.     mov     al,[cblue]
  788.     mov     [color],eax
  789.     call    draw_result                   ; Âûâîäèì ðåçóëüòàò
  790.     ret                                   ; è âîçâðàùàåì óïðàâëåíèå
  791. ;end_get_spectr
  792.  
  793. str_len:
  794.     ;.................................................................................................
  795.     ; îïðåäåëÿåò äëèíó ñòðîêè (âõîä->EDI ZS offset ; âûõîä->EAX ZS length)
  796.     ;.................................................................................................
  797.         push ecx
  798.         push esi
  799.         push edi
  800.  
  801.         cld
  802.         xor   al, al
  803.         mov ecx, 0FFFFFFFFh
  804.         mov esi, edi
  805.         repne scasb
  806.         sub edi, esi
  807.         mov eax, edi
  808.         dec eax
  809.  
  810.         pop edi
  811.         pop esi
  812.         pop ecx
  813.  
  814.         ret
  815. ;end_str_len
  816. ;#___________________________________________________________________________________________________
  817. ;****************************************************************************************************|
  818. ; ÁËÎÊ ÏÅÐÅÌÅÍÍÛÕ È ÊÎÍÑÒÀÍÒ                                                                         |
  819. ;----------------------------------------------------------------------------------------------------/
  820.  
  821.     color       dd 00000000h              ; õðàíèò çíà÷åíèå âûáðàííîãî öâåòà
  822.     color2      dd 00FFFFFFh              ; õðàíèò çíà÷åíèå âòîðîãî âûáðàííîãî öâåòà
  823.     mouse_x     dd 0                      ; õðàíèò ãëîáàëüíóþ õ êîîðäèíàòó ìûøè
  824.     mouse_y     dd 0                      ; õðàíèò ãëîáàëüíóþ ó êîîðäèíàòó ìûøè
  825.     desctop_w   dd 0                      ; õðàíèò øèðèíó ýêðàíà
  826.     sc          system_colors             ; õðàíèò ñòðóêòóðó ñèñòåìíûõ öâåòîâ ñêèíà
  827.     title       db 'Palitra v0.4',0       ; õðàíèò èìÿ ïðîãðàììû
  828.     hex         db '#',0                  ; äëÿ âûâîäà ðåø¸òêè êàê òåêñòà
  829.     cname       db 'RGBAx'                ; õðàíèò ðàçðÿäû öâåòîâ (red,green,blue) x-ìåòêà êîíöà
  830.     cred        db 0                      ; õðàíèì êðàñíûé ñïåêðò
  831.     cgreen      db 0                      ; õðàíèì çåëåíûé ñïåêòð
  832.     cblue       db 0                      ; õðàíèì ñèíèé ñïåêòð
  833.     calpha      db 0                      ; õðàíèì ïðîçðà÷íîñòü
  834.     buff        db '000',0
  835.     bnext       db 'NEXT         BACKGROUND',0; èìÿ êíîïêè
  836.     pnext       dd 0                      ; ñ÷åò÷èê ïåðåêëþ÷åíèÿ ïàëèòðû
  837.  
  838.  
  839. I_END:
  840.  
  841.  
  842.