Subversion Repositories Kolibri OS

Rev

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