From d3061ed9bcd5fb6bb7bb01c163ad0d50066979e0 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Sat, 8 Dec 2012 12:51:24 +0000 Subject: [PATCH] palitra 0.5 from Akylist git-svn-id: svn://kolibrios.org@3091 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/media/palitra/trunk/palitra.asm | 1006 ++++++++++++---------- 1 file changed, 569 insertions(+), 437 deletions(-) diff --git a/programs/media/palitra/trunk/palitra.asm b/programs/media/palitra/trunk/palitra.asm index 2b7ba654a7..39090e577b 100644 --- a/programs/media/palitra/trunk/palitra.asm +++ b/programs/media/palitra/trunk/palitra.asm @@ -2,7 +2,7 @@ ;****************************************************************************************************| ; Program Palitra (c) Sergei Steshin (Akyltist) | ;----------------------------------------------------------------------------------------------------| -;; Charset:WIN-1251 Font:Courier New Size:9pt | +;; Charset:DOS-866 Font:Courier New Size:9pt | ;..................................................................................................... ;; compiler: FASM 1.69.31 | ;; version: 0.3.0 | @@ -10,20 +10,24 @@ ;; e-mail: dr.steshin@gmail.com | ;..................................................................................................... ;; History: | -;; 0.1.0 - ╧хЁтр  тхЁёш  яЁюуЁрьь√. | -;; 0.2.0 - ╚ёяЁртыхэю яюярфрэшх т ёхЄъє, схЁхЄё  сышцрщ°шщ яю фшруюэрыш яшъёхы№. | -;; - ─юсртыхэ√ яюычєэъш, фы  ЁхуєышЁютрэш  rgb ёюёЄрты ■∙шї ЎтхЄр ш т√тюф ¤Єшї ёюёЄрты ■∙шї. | -;; - ╙сЁрэ т√тюф ЎтхЄр т сшэрЁэюь тшфх (яюър чр эх эрфюсэюёЄ№■ ш эх ръЄєры№эюёЄ№■). | -;; - ╠хыър  ъюёьхЄшър. | -;; 0.3.0 - ─юсртыхэю яхЁхъы■ўхэшх тшфют ЎтхЄют√ї ёїхь (ъэюяър NEXT) | -;; - ╙ыєў°хэ√ яюычєэъш, яЁюшчтюфшЄё  юсЁрсюЄър эрцрЄш  Ё фюь ё яюычєэъюь. | -;; - ╫шёыю ёхЄюъ т ЎтхЄютющ ёїхьх єьхэ№°хэю ё 6 фю 4 (ъЁрЄэюёЄ№ 256, шэрўх фєсышЁютрэшх ЎтхЄр).| -;; - ╠хыър  ъюёьхЄшър. | -;; 0.4.0 - ─юсртыхэю яхЁхъы■ўхэшх ьхцфє фтєь  ЎтхЄрьш | -;; - ─юсртыхэ яюычєэюъ ЁхуєышЁютрэш  яЁючЁрўэюёЄш (схч тшчєрышчрЎшш). | -;; - ─юсртыхэю т√Ёртэштрэшх чэрўхэшщ rgba яю ЎхэЄЁє, т чртшёшьюёЄш юЄ фышээ√. | -;; - ╩юёьхЄшўхёъшх яЁртъш. | -;; - ═хсюы№°р  юяЄшьшчрЎш . | +;; 0.1.0 - Первая версия программы. | +;; 0.2.0 - Исправлено попадание в сетку, берется ближайший по диагонали пиксель. | +;; - Добавлены ползунки, для регулирования rgb составляющих цвета и вывод этих составляющих. | +;; - Убран вывод цвета в бинарном виде (пока за не надобностью и не актуальностью). | +;; - Мелкая косметика. | +;; 0.3.0 - Добавлено переключение видов цветовых схем (кнопка NEXT) | +;; - Улучшены ползунки, производится обработка нажатия рядом с ползунком. | +;; - Число сеток в цветовой схеме уменьшено с 6 до 4 (кратность 256, иначе дублирование цвета).| +;; - Мелкая косметика. | +;; 0.4.0 - Добавлено переключение между двумя цветами | +;; - Добавлен ползунок регулирования прозрачности (без визуализации). | +;; - Добавлено выравнивание значений rgba по центру, в зависимости от длинны. | +;; - Косметические правки. | +;; - Небольшая оптимизация. | +;; 0.5.0 - Добавлена кнопка смены фона рабочего стола (от Leency). | +;; - Добавлено изменение фона рабочего стола градиентной заливкой. | +;; - Косметические правки. | +;; - Небольшая деоптимизация. | ;..................................................................................................... ;; All rights reserved. | ;; | @@ -51,7 +55,7 @@ ;#___________________________________________________________________________________________________ ;****************************************************************************************************| -; ╟└├╬╦╬┬╬╩ ╚╤╧╬╦═▀┼╠╬├╬ ╘└╔╦└ ╧╨╚╦╬╞┼═╚▀ ─╦▀ ╩╬╦╚┴╨╚ ╬╤ | +; ЗАГОЛОВОК ИСПОЛНЯЕМОГО ФАЙЛА ПРИЛОЖЕНИЯ ДЛЯ КОЛИБРИ ОС | ;----------------------------------------------------------------------------------------------------/ use32 org 0x0 @@ -60,65 +64,68 @@ dd 0x01 dd START dd I_END - dd 0x1000 + dd 0x100000 dd 0x1000 dd 0x0 dd 0x0 -include '../../../macros.inc' - WIN_W equ 271 ; °шЁшэр юъэр - WIN_H equ 192 ; т√ёюЄр юъэр - WIN_X equ 250 ; ъююЁфшэрЄр ї юъэр - WIN_Y equ 190 ; ъююЁфшэрЄр є юъэр + include '..\..\..\macros.inc' + WIN_W equ 295 ; ширина окна + WIN_H equ 195 ; высота окна + WIN_X equ 250 ; координата х окна + WIN_Y equ 190 ; координата у окна START: ;#___________________________________________________________________________________________________ ;****************************************************************************************************| -; ╬╤═╬┬═╬╔ ╓╚╩╦ ╧╨╬├╨└╠╠█ - ╬┴╨└┴╬╥╩└ ╤╬┴█╥╚╔ | +; ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ - ОБРАБОТКА СОБЫТИЙ | ;----------------------------------------------------------------------------------------------------/ red: - call draw_window ; т√ч√трхь яхЁхЁшёютъє юъэр яЁшыюцхэш  + call draw_main ; вызываем перерисовку окна приложения still: - mcall 10 ; ЇєэъЎш  10 - цфрЄ№ ёюс√Єш  - cmp eax,1 ; яхЁхЁшёютрЄ№ юъэю ? - je red ; хёыш фр - эр ьхЄъє red - cmp eax,2 ; эрцрЄр ъыртш°р ? - je key ; хёыш фр - эр key - cmp eax,3 ; эрцрЄр ъэюяър ? - je button ; хёыш фр - эр button - jmp still ; хёыш фЁєуюх ёюс√Єшх - т эрўрыю Ўшъыр + mcall 10 ; функция 10 - ждать события + cmp eax,1 ; перерисовать окно ? + je red ; если да - на метку red + cmp eax,2 ; нажата клавиша ? + je key ; если да - на key + cmp eax,3 ; нажата кнопка ? + je button ; если да - на button + jmp still ; если другое событие - в начало цикла ;end_still - -key: ; эрцрЄр ъыртш°р эр ъыртшрЄєЁх - mcall 2 ; ЇєэъЎш  2 - ёўшЄрЄ№ ъюф ёшьтюыр (т ah) (ЄєЄ т яЁшэЎшях эх эєцэр) - jmp still ; тхЁэєЄ№ё  ъ эрўрыє Ўшъыр +key: ; нажата клавиша на клавиатуре + mcall 2 ; функция 2 - считать код символа (в ah) (тут в принципе не нужна) + jmp still ; вернуться к началу цикла ;end_key button: - mcall 17 ; 17 - яюыєўшЄ№ шфхэЄшЇшърЄюЁ эрцрЄющ ъэюяъш - cmp ah, 1 ; хёыш эрцрЄр ъэюяър ё эюьхЁюь 1, - jz bexit ; т√їюфшь - ;юсЁрсюЄър ъэюяъш Next - cmp ah, 12 ; хёыш эрцрЄр ъэюяър NEXT - jne set_bg ; т√їюфшь - inc [pnext] ; єтхышўштрхь яЁш эрцрЄшш эюьхЁ ярышЄЁ√ - mov eax,[pnext] ; чрэюёшь чэрўхэшх т хрї - cmp al,6 ; ёЁртэштрхь ё чр тыхээ√ь ъюышўхёЄтюь ярышЄЁ - jne next_redraw ; хёыш эх сюы№°х ьръёшьєьр Єю эр т√чют юЄЁшёютъш - xor eax,eax ; шэрўх чрэєы хь ярышЄЁє эр default - mov [pnext],eax ; ш чряюьшэрхь ўЄю ёсЁюёшыш ярышЄЁє эр default + mcall 17 ; 17 - получить идентификатор нажатой кнопки + cmp ah, 1 ; если нажата кнопка с номером 1, + jz bexit ; выходим + ;обработка кнопки Next + cmp ah, 12 ; если нажата кнопка NEXT + jne next_bg ; выходим + inc [pnext] ; увеличиваем при нажатии номер палитры + mov [renmode],0 ; включаем цветовые схемы + mov eax,[pnext] ; заносим значение в еах + cmp al,6 ; сравниваем с заявленным количеством палитр + jne next_redraw ; если не больше максимума то на вызов отрисовки + xor eax,eax ; иначе зануляем палитру на default + mov [pnext],eax ; и запоминаем что сбросили палитру на default next_redraw: - call draw_palitra ; ╨╚╤╙┼╠ ╧└╦╚╥╨╙ - jmp still ; ╙їюфшь эр юцшфрэшх фЁєуюую ёюс√Єш  - set_bg: - cmp ah, 14 ; хёыш эрцрЄр ъэюяър BACKGROUND - jne next_end ; т√їюфшь - mcall 15,4,1 - mcall 15,1,1,1 - mcall 15,5,color,0,3*1*1 - mcall 15,3 - jmp still + call draw_palitra ; РИСУЕМ ПАЛИТРУ + jmp still ; Уходим на ожидание другого события + next_bg: + cmp ah, 14 ; Кнопка BACKGROUND + jne circle_bg ; если не нажата то выходим + call set_background ; иначе устанавливаем фон + jmp still ; и на ожидание события + circle_bg: + cmp ah, 15 ; Кнопка Круговая палитра + jne next_end ; если не нажата то выходим + ;mov [renmode],2 ; включаем отрисовку круговой палитры + call draw_palitra ; РИСУЕМ ПАЛИТРУ + jmp still ; и на ожидание события next_end: cmp ah,13 ; COLOR SWAP jne color_swap_end @@ -127,156 +134,200 @@ button: pop [color2] pop [color] call draw_result + jmp still ; И уходим на ожидание другого события color_swap_end: - cmp ah, 7 ; ╧ЁютхЁ хь эрцрЄр ъэюяър ё ID=7 - jne color_button ; ┼ёыш эх эрцрЄр, Єю шф╕ь фры№°х - call mouse_get ; ╚эрўх тъы■ўрхь юсЁрсюЄўшъ ь√°ш, ўЄюс√ ёўшЄрЄ№ чэрўхэшх ЎтхЄр ё ярышЄЁ√ - jmp still ; ╚ єїюфшь эр юцшфрэшх фЁєуюую ёюс√Єш  - color_button: ; ╨└╤╫и╥ ъююЁфшэрЄ фы  яюычєэъют RGBA - push eax ; чряюьшэрхь хрї - call mouse_local ; яюыєўрхь ыюъры№э√х ъююЁфшэрЄ√ - mov ebx,137 ; эшцэ   уЁрэшЎр яюычєэър яю ╙ - mov ecx,[mouse_y] ; чрэшёшь т хёї чэрўхэшх ъєЁёюЁр яю ╙ - sub ebx,ecx ; эрїюфшь ЁрчэюёЄ№ (Є.х. ъєфр ёьх∙рхЄё  яюычєэюъ) - mov ecx,3 ; чрэюёшь т хёї ЎшЇЁє 3 (256/3=85, уфх 85-т√ёюЄр яюычєэъют) - imul ecx,ebx ; эрїюфшь шёЄшээ√щ ярЁрьхЄЁ ЎтхЄр ё єў╕Єюь ьрё°Єрср яюычєэър---+ - pop eax ; тюёёЄрэртыштрхь хрї : - ;red_button: ; ╩Ёрёэ√щ ╥ЁхъсрЁ : + cmp ah, 7 ; Проверяем нажата кнопка с ID=7 + jne color_button ; Если не нажата, то идём дальше + call mouse_get ; Иначе включаем обработчик мыши, чтобы считать значение цвета с палитры + jmp still ; И уходим на ожидание другого события + color_button: ; РАСЧЁТ координат для ползунков RGBA + push eax ; запоминаем еах + call mouse_local ; получаем локальные координаты + mov ebx,137 ; нижняя граница ползунка по У + mov ecx,[mouse_y] ; занисим в есх значение курсора по У + sub ebx,ecx ; находим разность (т.е. куда смещается ползунок) + mov ecx,3 ; заносим в есх цифру 3 (256/3=85, где 85-высота ползунков) + imul ecx,ebx ; находим истинный параметр цвета с учётом масштаба ползунка---+ + pop eax ; восстанавливаем еах : + ;red_button: ; Красный Трекбар : cmp ah, 8 ; ID=8 : - jne green_button ; хёыш эхЄ, Єю яЁютхЁ хь чхы╕э√щ ЄЁхъсрЁ : - mov [cred],cl ; шэрўх яЁшётрштрхь чэрўхэшх, ъЁрёэюьє ЎтхЄє ёяхъЄЁр <------+ - call set_spectr ; єёЄрэртыштрхь ёяхъЄЁ - jmp still ; ╙їюфшь эр юцшфрэшх фЁєуюую ёюс√Єш  + jne green_button ; если нет, то проверяем зелёный трекбар : + mov [cred],cl ; иначе присваиваем значение, красному цвету спектра <------+ + call set_spectr ; устанавливаем спектр + jmp still ; Уходим на ожидание другого события green_button: cmp ah, 9 jne blue_button mov [cgreen],cl call set_spectr - jmp still ; ╙їюфшь эр юцшфрэшх фЁєуюую ёюс√Єш  + jmp still ; Уходим на ожидание другого события blue_button: cmp ah, 10 jne alpha_button mov [cblue],cl call set_spectr - jmp still ; ╙їюфшь эр юцшфрэшх фЁєуюую ёюс√Єш  + jmp still ; Уходим на ожидание другого события alpha_button: cmp ah, 11 jne still mov [calpha],cl call set_spectr - jmp still ; ╙їюфшь эр юцшфрэшх фЁєуюую ёюс√Єш  + jmp still ; Уходим на ожидание другого события bexit: - mcall -1 ; шэрўх ъюэхЎ яЁюуЁрьь√ + mcall -1 ; иначе конец программы ;end_button ;#___________________________________________________________________________________________________ ;****************************************************************************************************| -; ├╦└┬═█╔ ╠╬─╙╦▄ ╬╥╨╚╤╬┬╩╚ ╬╩═└ ╚ ▌╦┼╠┼═╥╬┬ ╧╨╚╦╬╞┼═╚▀ | +; ГЛАВНЫЙ МОДУЛЬ ОТРИСОВКИ ОКНА И ЭЛЕМЕНТОВ ПРИЛОЖЕНИЯ | ;----------------------------------------------------------------------------------------------------/ -draw_window: - mov eax,12 ; ЇєэъЎш  12: ючэрўрхЄ, ўЄю сєфхЄ ЁшёютрЄ№ё  юъэю - mov ebx,1 ; 1,эрўрыю Ёшёютрэш  - int 0x40 ; ╧ЁхЁ√трэшх +draw_main: + mov eax,12 ; функция 12: означает, что будет рисоваться окно + mov ebx,1 ; 1,начало рисования + int 0x40 ; Прерывание - mov eax,48 ; ╘єэъЎш  48 - ёЄшыш юЄюсЁрцхэш  юъюэ - mov ebx,3 ; ╧юфЇєэъЎш  3 - яюыєўшЄ№ ёЄрэфрЁЄэ√х ЎтхЄр юъюэ. - mov ecx,sc ; ╙ърчрЄхы№ эр сєЇхЁ ЁрчьхЁюь edx срщЄ, яюф ёЄЁєъЄєЁє - mov edx,sizeof.system_colors ; ╨рчьхЁ ЄрсышЎ√ ЎтхЄют (фюыцхэ с√Є№ 40 срщЄ) - int 0x40 ; ╧ЁхЁ√трэшх + mov eax,48 ; Функция 48 - стили отображения окон + mov ebx,3 ; Подфункция 3 - получить стандартные цвета окон. + mov ecx,sc ; Указатель на буфер размером edx байт, под структуру + mov edx,sizeof.system_colors ; Размер таблицы цветов (должен быть 40 байт) + int 0x40 ; Прерывание - mov eax,48 ; ╘єэъЎш  48 - ёЄшыш юЄюсЁрцхэш  юъюэ. - mov ebx,4 ; ╧юфЇєэъЎш  4 - тючтЁр∙рхЄ eax = т√ёюЄр ёъшэр. - int 0x40 ; ╧ЁхЁ√трэшх - mov ecx,eax ; ╟ряюьшэрхь т√ёюЄє ёъшэр + mov eax,48 ; Функция 48 - стили отображения окон. + mov ebx,4 ; Подфункция 4 - возвращает eax = высота скина. + int 0x40 ; Прерывание + mov ecx,eax ; Запоминаем высоту скина - xor eax,eax ; ╬ўш∙рхь eax (mov eax,0) (╘єэъЎш  0) - mov ebx,WIN_X shl 16+WIN_W ; [ъююЁфшэрЄр яю юёш x]*65536 + [ЁрчьхЁ яю юёш x] - add ecx,WIN_Y shl 16+WIN_H ; ┬√ёюЄр ёъшэр + [ъююЁфшэрЄр яю y]*65536 + [ЁрчьхЁ яю y] (168 фы  тхЁёшш 0.2) - mov edx,[sc.work] ; ┬шфшью ёЄшы№ юъэр яю фхЇюыЄє - or edx,0x34000000 ; ╚ыш юъэю ёю ёъшэюь ЇшъёшЁютрээ√ї ЁрчьхЁют - mov edi,title ; ╟руюыютюъ юъэр - int 0x40 ; ╧ЁхЁ√трэшх + xor eax,eax ; Очищаем eax (mov eax,0) (Функция 0) + mov ebx,WIN_X shl 16+WIN_W ; [координата по оси x]*65536 + [размер по оси x] + add ecx,WIN_Y shl 16+WIN_H ; Высота скина + [координата по y]*65536 + [размер по y] (168 для версии 0.2) + mov edx,[sc.work] ; Видимо стиль окна по дефолту + or edx,0x34000000 ; Или окно со скином фиксированных размеров + mov edi,title ; Заголовок окна + int 0x40 ; Прерывание - call draw_palitra ; ╨╚╤╙┼╠ ╧└╦╚╥╨╙ - call draw_result ; ╨╚╤╙┼╠ ╨┼╟╙╦▄╥└╥ - mov eax,8 ; ╘єэъЎш  8 - юяЁхфхышЄ№/єфрышЄ№ ъэюяъє - mov ebx,110 shl 16+147 ; ═рўры№э√х ъююЁфшэрЄ√ яю ї [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,9 shl 16+147 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - mov edx,0x60000007 ; ═рўры№эюх ID ъэюяюъ - 0xXYnnnnnn + call draw_palitra ; РИСУЕМ ПАЛИТРУ + call draw_result ; РИСУЕМ РЕЗУЛЬТАТ + + mov eax,8 ; Функция 8 - определить/удалить кнопку + mov ebx,110 shl 16+147 ; Начальные координаты по х [к-та x]*65536 + [размер] + mov ecx,9 shl 16+147 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov edx,0x60000007 ; Начальное ID кнопок - 0xXYnnnnnn int 0x40 - mov ebx,13 shl 16+12 ; ═рўры№э√х ъююЁфшэрЄ√ яю ї [ъ-Єр x]*65536 + [ЁрчьхЁ] + mov ebx,13 shl 16+12 ; Начальные координаты по х [к-та x]*65536 + [размер] mov edx,0x60000008 ; ID = 8 - mov ecx,51 shl 16+85 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - int 0x40 ; ╨шёєхь эхтшфшьє■ ъэюяъє яюф ёырщфхЁюь red - add ebx,23 shl 16 ; ─юсрты хь + mov ecx,51 shl 16+85 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Рисуем невидимую кнопку под слайдером red + add ebx,23 shl 16 ; Добавляем inc edx ; ID = 9 - int 0x40 ; ╨шёєхь эхтшфшьє■ ъэюяъє яюф ёырщфхЁюь green - add ebx,23 shl 16 ; ─юсрты хь + int 0x40 ; Рисуем невидимую кнопку под слайдером green + add ebx,23 shl 16 ; Добавляем inc edx ; ID = 10 - int 0x40 ; ╨шёєхь эхтшфшьє■ ъэюяъє яюф ёырщфхЁюь blue - add ebx,23 shl 16 ; ─юсрты хь + int 0x40 ; Рисуем невидимую кнопку под слайдером blue + add ebx,23 shl 16 ; Добавляем inc edx ; ID = 11 - int 0x40 ; ╨шёєхь эхтшфшьє■ ъэюяъє яюф ёырщфхЁюь alpha + int 0x40 ; Рисуем невидимую кнопку под слайдером alpha - mov eax,8 ; ╘єэъЎш  8 - юяЁхфхышЄ№/єфрышЄ№ ъэюяъє (╤╠┼═└ ╓┬┼╥└) - mov ebx,11 shl 16+20 ; ═рўры№э√х ъююЁфшэрЄ√ яю ї [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,12 shl 16+20 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] + mov eax,8 ; Функция 8 - определить/удалить кнопку (СМЕНА ЦВЕТА) + mov ebx,11 shl 16+20 ; Начальные координаты по х [к-та x]*65536 + [размер] + mov ecx,12 shl 16+20 ; Начальные координаты по y [к-та y]*65536 + [размер] mov edx,0x6000000D ; ID = 13 int 0x40 - mov eax,12 ; ЇєэъЎш  12: ючэрўрхЄ, ўЄю сєфхЄ ЁшёютрЄ№ё  юъэю - mov ebx,2 ; 2 - ъюэхЎ Ёшёютрэш  - int 0x40 ; ╧ЁхЁ√трэшх - - ;................................................................................................. - ; ╬ЄЁшёютър эшцэхщ ярэхыш - ;................................................................................................. - mov eax,8 ; ╘єэъЎш  8 - юяЁхфхышЄ№/єфрышЄ№ ъэюяъє - mov ebx,4 shl 16+64 ; ═рўры№э√х ъююЁфшэрЄ√ яю ї [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,169 shl 16+16 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - mov edx,12 ; ID = 12 - mov esi,[sc.work_button] ; ЎтхЄ - int 0x40 - - mov ebx,80 shl 16+102 ; ═рўры№э√х ъююЁфшэрЄ√ яю ї [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov edx,14 ; BACKGROUND button - int 0x40 + call draw_bottom_panel + call draw_left_panel - mov eax,4 ; 4 - т√тхёЄш ёЄЁюъє ЄхъёЄр т юъэю - mov ebx,25 shl 16+174 ; [ъююЁфшэрЄр яю юёш x]*65536 + [ъююЁфшэрЄр яю юёш y] - mov ecx,[sc.work_button_text] ; 0xX0RRGGBB (RR, GG, BB чрфр■Є ЎтхЄ ЄхъёЄр) - mov edx,bnext ; єърчрЄхы№ эр эрўрыю ёЄЁюъш - ;mov esi,1 ; т√тюфшЄ№ esi ёшьтюыют - int 0x40 - - ;mov ebx,247 shl 16+64 ; ═рўры№э√х ъююЁфшэрЄ√ яю ї [ъ-Єр x]*65536 + [ЁрчьхЁ] - ;mov edx,12 ; ID = 12 - ;int 0x40 - - mov eax,38 ; ╘єэъЎш  38 - эрЁшёютрЄ№ юЄЁхчюъ. - mov ebx,4 shl 16+257 ;[ъююЁфшэрЄр эрўрыр яю юёш x]*65536 + [ъююЁфшэрЄр ъюэЎр яю юёш x] - mov ecx,163 shl 16+163 ;[ъююЁфшэрЄр эрўрыр яю юёш y]*65536 + [ъююЁфшэрЄр ъюэЎр яю юёш y] - mov edx,0x00666666 ;0x00RRGGBB - ЎтхЄ - int 0x40 - - ret ; ┬ючтЁр∙рхь єяЁртыхэшх - + mov eax,12 ; функция 12: означает, что будет рисоваться окно + mov ebx,2 ; 2 - конец рисования + int 0x40 ; Прерывание + ret ;#___________________________________________________________________________________________________ ;****************************************************************************************************| -; ┴╦╬╩ ┬╤╧╬╠╬├└╥┼╦▄═█╒ ╧╨╬╓┼─╙╨ ╚ ╘╙═╩╓╚╔ ╧╨╚╦╬╞┼═╚▀ | +; БЛОК ВСПОМОГАТЕЛЬНЫХ ПРОЦЕДУР И ФУНКЦИЙ ПРИЛОЖЕНИЯ | ;----------------------------------------------------------------------------------------------------/ + + ;------------------------------------------------------------------------------------------------+ + draw_left_panel: ; Отрисовка боковой панели + ;................................................................................................. + mov eax,8 ; button_next_colorsheme + mov ebx,266 shl 16+16 ; [x] + [size] + mov ecx,9 shl 16+16 ; [y] + [size] + mov edx,0x6000000C ; ID = 12 + mov esi,[sc.work_button] ; RGB + int 0x40 ; call + mov eax,13 ; draw rect + mov ebx,266 shl 16+16 ; [x] + [size] + mov ecx,9 shl 16+16 ; [y] + [size] + mov edx,0x666666 ; RGB + push esi ; backup esi + mov esi,8 ; counter=8 + draw_lpanel: ; loop label + int 0x40 ; call draw black rect + add ecx,19 shl 16 ; move rect + dec esi ; decrement counter + cmp esi,0 ; if counter!=zero + jne draw_lpanel ; then goto label + mov esi,8 ; else counter=8 + mov ebx,267 shl 16+14 ; [x] + [size] + mov ecx,10 shl 16+14 ; [y] + [size] + mov edx,0xF3F3F3 ; RGB + draw_lpanel2: ; 2 loop label + int 0x40 ; call draw white rect + add ecx,19 shl 16 ; move rect + dec esi ; decrement counter + cmp esi,0 ; if counter!=0 + jne draw_lpanel2 ; then goto label2 + pop esi ; restore esi + ; draw_left_arrow for button_next_colorsheme + mov eax,4 ; Write string + mov ebx,272 shl 16+13 ; [x] + [y] + mov ecx,0x0 ; RGB + mov edx,larrow ; string pointer + mov esi,1 ; count symbol + int 0x40 ; call + mov eax,38 ; draw line + mov ebx,270 shl 16+272 ; [start x] + [end x] + mov ecx,16 shl 16+16 ; [start y] + [end y] + mov edx,0x0 ; RGB + int 0x40 ; call + ret ; return + ;................................................................................................. + + + ;------------------------------------------------------------------------------------------------+ + draw_bottom_panel: ; Отрисовка нижней панели + ;................................................................................................. + mov eax,8 ; draw button + mov ebx,92 shl 16+100 ; [x] + [size] + mov ecx,169 shl 16+16 ; [y] + [size] + mov edx,14 ; ID = 14 + mov esi,[sc.work_button] ; RGB + int 0x40 ; call + mov eax,4 ; Write string + mov ebx,113 shl 16+174 ; [x] + [y] + mov ecx,[sc.work_button_text] ; RGB + mov edx,bground ; string pointer + mov esi,10 ; count symbol + int 0x40 ; call + mov eax,38 ; draw line + mov ebx,4 shl 16+282 ; [start x] + [end x] + mov ecx,163 shl 16+163 ; [start y] + [end y] + mov edx,0x00666666 ; RGB + int 0x40 ; call + ret ; return + ;................................................................................................. + mouse_global: ;................................................................................................. - ; ╧юыєўрхь ъююЁфшэрЄ√ ь√°ш + ; Получаем координаты мыши ;................................................................................................. - mov eax,37 ; ╘єэъЎш  37 - ЁрсюЄр ё ь√°№■ - mov ebx,0 ; эрь эєцэ√ уыюсры№э√х ъююЁфшэрЄ√ - int 0x40 ; eax = x*65536 + y, (x,y)=ъююЁфшэрЄ√ ъєЁёюЁр ь√°ш + mov eax,37 ; Функция 37 - работа с мышью + mov ebx,0 ; нам нужны глобальные координаты + int 0x40 ; eax = x*65536 + y, (x,y)=координаты курсора мыши mov ecx,eax ; shr ecx,16 ; ecx = x+1 movzx edx,ax ; edx = y+1 @@ -284,16 +335,16 @@ mouse_global: dec edx ; edx = y mov [mouse_x],ecx ; mouse_x = x mov [mouse_y],edx ; mouse_y = y - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + ret ; Возвращаем управление ;end_mouse_global mouse_local: ;................................................................................................. - ; ╧юыєўрхь ъююЁфшэрЄ√ ь√°ш юЄэюёшЄхы№эю юъэр + ; Получаем координаты мыши относительно окна ;................................................................................................. - mov eax,37 ; ╘єэъЎш  37 - ЁрсюЄр ё ь√°№■ - mov ebx,1 ; эрь эєцэ√ уыюсры№э√х ъююЁфшэрЄ√ - int 0x40 ; eax = x*65536 + y, (x,y)=ъююЁфшэрЄ√ ъєЁёюЁр ь√°ш + mov eax,37 ; Функция 37 - работа с мышью + mov ebx,1 ; нам нужны глобальные координаты + int 0x40 ; eax = x*65536 + y, (x,y)=координаты курсора мыши mov ecx,eax ; shr ecx,16 ; ecx = x+1 movzx edx,ax ; edx = y+1 @@ -301,140 +352,218 @@ mouse_local: dec edx ; edx = y mov [mouse_x],ecx ; mouse_x = x mov [mouse_y],edx ; mouse_y = y - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + ret ; Возвращаем управление ;end_mouse_local +set_background: + ;................................................................................................. + ; Устанавливает фон рабочего стола + ;................................................................................................. + mov eax,15 ; Функция 15 - работа с фоновой графикой + mov ebx,4 ; Подфункция 4 - установить режим отрисовки фона. + mov ecx,2 ; Режим отрисовки - замостить (1) + int 0x40 ; Вызываем + + mov eax,15 ; Функция 15 - работа с фоновой графикой + mov ebx,1 ; Подфункция 1 - установить размер фонового изображения. + mov ecx,2 ; Ширина изображения + mov edx,2 ; Высота изображения + int 0x40 ; Вызываем + + mov eax,[color] + mov [cm+0],al + mov [cm+9],al + shr eax,8 + mov [cm+1],al + mov [cm+10],al + shr eax,8 + mov [cm+2],al + mov [cm+11],al + + mov eax,[color2] + mov [cm+3],al + mov [cm+6],al + shr eax,8 + mov [cm+4],al + mov [cm+7],al + shr eax,8 + mov [cm+5],al + mov [cm+8],al + + mov eax,15 ; Функция 15 - работа с фоновой графикой + mov ebx,5 ; Подфункция 5 - поместить блок пикселей на фон. + mov ecx,cm ; Указатель на данные в формате BBGGRRBBGGRR + mov edx,0 ; Cмещение в данных фонового изображения + mov esi,3*4 ; Размер данных в байтах = 3 * число пикселей + int 0x40 ; Вызываем + + mov eax,15 ; Функция 15 - работа с фоновой графикой + mov ebx,3 ; Подфункция 3 - перерисовать фон. + int 0x40 ; Вызываем + + ret +;end_set_background + desktop_get: ;................................................................................................. - ; ╬яЁхфхы хь °шЁшэє ¤ъЁрэр + ; Определяем ширину экрана ;................................................................................................. - mov eax,14 ; ╬яЁхфхы хь °шЁшэє ¤ъЁрэр (eax = [xsize]*65536 + [ysize]) - int 0x40 ; xsize = ЁрчьхЁ яю уюЁшчюэЄрыш - 1 + mov eax,14 ; Определяем ширину экрана (eax = [xsize]*65536 + [ysize]) + int 0x40 ; xsize = размер по горизонтали - 1 mov ebx,eax ; shr ebx,16 ; ebx = xsize-1 - ;movzx edx,ax ;; edx = ysize-1 (ыш°эшщ ъюф) + ;movzx edx,ax ;; edx = ysize-1 (лишний код) inc ebx ; ebx = xsize - ;inc edx ;; edx = ysize (ыш°эшщ ъюф) + ;inc edx ;; edx = ysize (лишний код) mov [desctop_w],ebx ret ;end_desktop_get mouse_get: - mov esi,2 ; ╩╬╤╥█╦▄: Їыру фы  шчсхцрэш  чрЎшъыштрэш  + mov esi,2 ; КОСТЫЛЬ: флаг для избежания зацикливания call mouse_global call desktop_get - re_mouse_loop: ; ╩╬╤╥█╦▄: ьхЄър фы  тючтЁрЄр хёыш яюярыш т ёхЄъє + re_mouse_loop: ; КОСТЫЛЬ: метка для возврата если попали в сетку mov ebx,[desctop_w] imul ebx,[mouse_y] ; ebx = y*xsize add ebx,[mouse_x] ; ebx = y*xsize+x ;................................................................................................. - ; ┴хЁхь ЎтхЄ ё ярышЄЁ√ т яхЁхьхээє■ + ; Берем цвет с палитры в переменную ;................................................................................................. - mov eax,35 ; ╘єэъЎш  тч Єш  ЎтхЄр - ;mov ebx,ecx ;; ebx = y*xsize+x (ыш°эшщ ъюф) - int 0x40 ; ╧юыєўрхь ЎтхЄ т eax - cmp eax,[sc.work] ; ╤Ёртэштрхь ё Їюэюь яЁшыюцхэш  - je mouse_err ; ┼ёыш ¤Єю юэ - Єю эшўхую эх фхырхь - cmp eax,0x222222 ; ╤Ёртэштрхь ё ЎтхЄюь ёхЄъш - je mouse_err ; ┼ёыш ¤Єю юэ - Єю эшўхую эх фхырхь - jmp mouse_set ; ╩╬╤╥█╦▄: яЁ√урхь ўЄюс√ эх сЁрЄ№ ЎтхЄ ёхЄъш - mouse_err: ; ╩╬╤╥█╦▄: хёыш яюярыш т ёхЄъє шыш Їюэ - inc [mouse_y] ; ╩╬╤╥█╦▄: ёьх∙рхь яю фшруюэрыш ёэрўрыр яю ї - inc [mouse_x] ; ╩╬╤╥█╦▄: ёьх∙рхь яю фшруюэрыш яюЄюь яю є - dec esi ; ╩╬╤╥█╦▄: ╙ьхэ№°рхь Їыру - cmp esi,0 ; ╩╬╤╥█╦▄: ╤Ёртэштрхь ё эєыхь - jz mouse_exit ; ╩╬╤╥█╦▄: ┼ёыш эюы№ Єю ёфхырыш тё╕ ўЄю ьюуыш - jmp re_mouse_loop ; ╩╬╤╥█╦▄: ┼ёыш эх эюы№ Єю яюяЁюсєхь тч Є№ ёюёхыэшщ яшъёхы№ + mov eax,35 ; Функция взятия цвета + ;mov ebx,ecx ;; ebx = y*xsize+x (лишний код) + int 0x40 ; Получаем цвет в eax + cmp eax,[sc.work] ; Сравниваем с фоном приложения + je mouse_err ; Если это он - то ничего не делаем + cmp eax,0x222222 ; Сравниваем с цветом сетки + je mouse_err ; Если это он - то ничего не делаем + jmp mouse_set ; КОСТЫЛЬ: прыгаем чтобы не брать цвет сетки + mouse_err: ; КОСТЫЛЬ: если попали в сетку или фон + inc [mouse_y] ; КОСТЫЛЬ: смещаем по диагонали сначала по х + inc [mouse_x] ; КОСТЫЛЬ: смещаем по диагонали потом по у + dec esi ; КОСТЫЛЬ: Уменьшаем флаг + cmp esi,0 ; КОСТЫЛЬ: Сравниваем с нулем + jz mouse_exit ; КОСТЫЛЬ: Если ноль то сделали всё что могли + jmp re_mouse_loop ; КОСТЫЛЬ: Если не ноль то попробуем взять соселний пиксель mouse_set: - mov [color],eax ; ╚эрўх чряюьшэрхь эют√щ ЎтхЄ - call draw_result ; ┬√тюфшь Ёхчєы№ЄрЄ + mov [color],eax ; Иначе запоминаем новый цвет + call draw_result ; Выводим результат mouse_exit: - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + ret ; Возвращаем управление ;end_mouse_get---------------------------------------------------------------------------------------- draw_palitra: - ;................................................................................................. - ; ╬ЄЁшёютър Їюэр яюф ъэюяъш - ;................................................................................................. - mov eax,13 ; ╘єэъЎш  13 - эрЁшёютрЄ№ яЁ ьюєуюы№эшъ - mov edx,0x222222 ; ЎтхЄ - mov ecx,9 shl 16+73 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - mov esi,2 ; ╤ўхЄўшъ ышэшщ яюфыюцхъ - re_draw: - mov ebx,110 shl 16+73 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov edi,2 ; ╤ўхЄўшъ ъюышўхёЄтр яюфыюцхъ - for_fon_loop: - int 0x40 ; ╧ЁхЁ√трэшх - add ebx,75 shl 16 ; ╤ьх∙рхь яюыюцхэшх ышэшш яю ї - dec edi ; ╙ьхэ№°рхь ёўхЄўшъ ъэюяюъ - cmp edi,0 ; ╤Ёртэштрхь ё эєыхь - jnz for_fon_loop ; ┼ёыш эх эюы№ Єю т эрўрыю Ўшъыр - dec esi ; ╙ьхэ№°рхь хую - cmp esi,0 ; ╤Ёртэштрхь ё эєыхь - mov ecx,84 shl 16+73 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - jnz re_draw ; ┼ёыш эх эюы№ Єю т эрўрыю Ўшъыр + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov ebx,110 shl 16+148 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,9 shl 16+148 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov edx,[sc.work] ; цвет + int 0x40 + + ;cmp [renmode],2 + ;je cyrcle_draw + ;cmp [renmode],1 + ;je picker_draw + cmp [renmode],0 + je sheme_draw + ret ;................................................................................................. - ; ╬ЄЁшёютър ъэюяюъ яю Ўшъыє + ; Отрисовка круговой диаграммы ;................................................................................................. - mov eax,13 ; ╘єэъЎш  13 - эрЁшёютрЄ№ яЁ ьюєуюы№эшъ - mov edx,0x0FFFFFFF ; ЎтхЄ - mov esi,4 ; ╤ўхЄўшъ ъюышўхёЄтр рсчрЎхт (#4,8) - mov ebx,99 shl 16+8 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] + ;cyrcle_draw: + ;mov eax,7 ; 7 - номер функции + ;mov ebx,circle ; указатель на изображение в формате BBGGRRBBGGRR... + ;mov ecx,148 shl 16 + 148 ; [размер по оси x]*65536 + [размер по оси y] + ;mov edx,110 shl 16 + 9 ; [координата по оси x]*65536 + [координата по оси y] + ;int 0x40 + ;ret + + ;picker_draw: + ;ret + + ;................................................................................................. + ; Отрисовка фона под кнопки + ;................................................................................................. + sheme_draw: + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,0x222222 ; цвет + mov ecx,9 shl 16+73 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov esi,2 ; Счетчик линий подложек + re_draw: + mov ebx,110 shl 16+73 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov edi,2 ; Счетчик количества подложек + for_fon_loop: + int 0x40 ; Прерывание + add ebx,75 shl 16 ; Смещаем положение линии по х + dec edi ; Уменьшаем счетчик кнопок + cmp edi,0 ; Сравниваем с нулем + jnz for_fon_loop ; Если не ноль то в начало цикла + dec esi ; Уменьшаем его + cmp esi,0 ; Сравниваем с нулем + mov ecx,84 shl 16+73 ; Начальные координаты по y [к-та y]*65536 + [размер] + jnz re_draw ; Если не ноль то в начало цикла + + ;................................................................................................. + ; Отрисовка кнопок по циклу + ;................................................................................................. + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,0x0FFFFFFF ; цвет + mov esi,4 ; Счетчик количества абзацев (#4,8) + mov ebx,99 shl 16+8 ; Начальные координаты по x [к-та x]*65536 + [размер] for_abz: - ;;push esi ; ╤юїЁрэ хь чэрўхэшх ёўхЄўшър ышэшщ т ёЄхъ + ;;push esi ; Сохраняем значение счетчика линий в стек cmp esi,2 jne x2_line mov ebx,99 shl 16+8 x2_line: - add ebx,3 shl 16 ; ╤ьх∙рхь яюыюцхэшх ышэшш яю x - mov edi,8 ; ╤ўхЄўшъ ъюышўхёЄтр ъэюяюъ т ёЄЁюъх + add ebx,3 shl 16 ; Смещаем положение линии по x + mov edi,8 ; Счетчик количества кнопок в строке for_stolbik: - push edi ; ╤юїЁрэ хь чэрўхэшх ёўхЄўшър ышэшщ т ёЄхъ - mov edi,8 ; ╤ўхЄўшъ ъюышўхёЄтр ъэюяюъ т ёЄЁюъх - mov ecx, 1 shl 16+8 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] + push edi ; Сохраняем значение счетчика линий в стек + mov edi,8 ; Счетчик количества кнопок в строке + mov ecx, 1 shl 16+8 ; Начальные координаты по y [к-та y]*65536 + [размер] cmp esi,2 - jg y2_line ; ┼ёыш сюы№°х 4 Єю шуэюЁшь + jg y2_line ; Если больше 4 то игнорим mov ecx,76 shl 16+8 y2_line: - add ebx,9 shl 16 ; ╤ьх∙рхь яюыюцхэшх ышэшш яю x + add ebx,9 shl 16 ; Смещаем положение линии по x for_loop: - add ecx,9 shl 16 ; ╤ьх∙рхь яюыюцхэшх ышэшш яю y - int 0x40 ; ╧ЁхЁ√трэшх + add ecx,9 shl 16 ; Смещаем положение линии по y + int 0x40 ; Прерывание call sub_red - dec edi ; ╙ьхэ№°рхь ёўхЄўшъ ъэюяюъ - cmp edi,0 ; ╤Ёртэштрхь ё эєыхь - jnz for_loop ; ┼ёыш эх эюы№ Єю т эрўрыю Ўшъыр + dec edi ; Уменьшаем счетчик кнопок + cmp edi,0 ; Сравниваем с нулем + jnz for_loop ; Если не ноль то в начало цикла call sub_green - pop edi ; ╚эрўх тюёёЄрэртыштрхь ёўхЄўшъ ышэшщ - dec edi ; ╙ьхэ№°рхь хую - cmp edi,0 ; ╤Ёртэштрхь ё эєыхь - jnz for_stolbik ; ┼ёыш эх эюы№ Єю т эрўрыю Ўшъыр + pop edi ; Иначе восстанавливаем счетчик линий + dec edi ; Уменьшаем его + cmp edi,0 ; Сравниваем с нулем + jnz for_stolbik ; Если не ноль то в начало цикла call sub_blue - ;;pop esi ; ╚эрўх тюёёЄрэртыштрхь ёўхЄўшъ ышэшщ - dec esi ; ╙ьхэ№°рхь хую - cmp esi,0 ; ╤Ёртэштрхь ё эєыхь - jnz for_abz ; ┼ёыш эх эюы№ Єю т эрўрыю Ўшъыр - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + ;;pop esi ; Иначе восстанавливаем счетчик линий + dec esi ; Уменьшаем его + cmp esi,0 ; Сравниваем с нулем + jnz for_abz ; Если не ноль то в начало цикла + ret ; Возвращаем управление ;end_draw_palitra------------------------------------------------------------------------------------- sub_red: ;................................................................................................. - ; ╨рёў╕Є ёьх∙хэшщ ъЁрёэюую ЎтхЄр т ухэхЁрЎшш ЎтхЄр ярышЄЁ√ + ; Расчёт смещений красного цвета в генерации цвета палитры ;................................................................................................. push eax mov eax,[pnext] ;sub_red_0 ; palitra cmp al,0 jne sub_red_1 - sub edx,0x20 + sub edx,0x40 jmp sub_red_e sub_red_1: ; random cmp al,1 jne sub_red_2 - sub edx,0x40 + sub edx,0x20 jmp sub_red_e sub_red_2: ; gree cmp al,2 @@ -458,232 +587,232 @@ sub_red: jmp sub_red_e sub_red_e: pop eax - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + ret ; Возвращаем управление ;end_sub_red------------------------------------------------------------------------------------------ sub_green: ;................................................................................................. - ; ╨рёў╕Є ёьх∙хэшщ ъЁрёэюую ЎтхЄр т ухэхЁрЎшш ЎтхЄр ярышЄЁ√ + ; Расчёт смещений красного цвета в генерации цвета палитры ;................................................................................................. push eax mov eax,[pnext] ;sub_green_0 cmp al,0 jne sub_green_1 - sub edx,0x2000 + sub edx,0x4000 jmp sub_green_e sub_green_1: cmp al,1 jne sub_green_e - sub edx,0x4000 + sub edx,0x2000 ;jmp sub_green_e sub_green_e: pop eax - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + ret ; Возвращаем управление ;end_sub_green---------------------------------------------------------------------------------------- sub_blue: ;................................................................................................. - ; ╨рёў╕Є ёьх∙хэшщ ъЁрёэюую ЎтхЄр т ухэхЁрЎшш ЎтхЄр ярышЄЁ√ + ; Расчёт смещений красного цвета в генерации цвета палитры ;................................................................................................. push eax mov eax,[pnext] ;sub_blue_0 cmp al,0 jne sub_blue_1 - sub edx,0x400000 + sub edx,0x600000 jmp sub_blue_e sub_blue_1: cmp al,1 jne sub_blue_e - sub edx,0x600000 + sub edx,0x400000 ;jmp sub_blue_e sub_blue_e: pop eax - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + ret ; Возвращаем управление ;end_sub_blue----------------------------------------------------------------------------------------- draw_result: ;................................................................................................. - ; ┴юы№°р  Ёрьър т√тюфр Ёхчєы№ЄрЄр + ; Большая рамка вывода результата ;................................................................................................. - mov eax,13 ; ╘єэъЎш  13 - эрЁшёютрЄ№ яЁ ьюєуюы№эшъ - mov edx,0x00666666 ; ЎтхЄ-юстюфъш - mov ebx,4 shl 16+98 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,9 shl 16+148 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,0x00666666 ; цвет-обводки + mov ebx,4 shl 16+98 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,9 shl 16+148 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 - mov edx,0x00F3F3F3 ; ЎтхЄ-Їюэр - mov ebx,5 shl 16+96 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,10 shl 16+146 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] + mov edx,0x00F3F3F3 ; цвет-фона + mov ebx,5 shl 16+96 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,10 shl 16+146 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 ;................................................................................................. - ; ╬ЄЁшёютър Ёхчєы№ЄрЄр ЎтхЄр т hex color2 + ; Отрисовка результата цвета в hex color2 ;................................................................................................. - mov eax,13 ; ╘єэъЎш  13 - эрЁшёютрЄ№ яЁ ьюєуюы№эшъ + mov eax,13 ; Функция 13 - нарисовать прямоугольник ; color 2 - draw fringle - mov edx,0x222222 ; ЎтхЄ-юстюфъш - mov ebx,16 shl 16+15 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,16 shl 16+15 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - int 0x40 ; ╧ЁхЁ√трэшх (юё ЁшёєхЄ яЁ ьюєуюы№эшъ) + mov edx,0x222222 ; цвет-обводки + mov ebx,16 shl 16+15 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,16 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) ; color 2 - draw color - mov edx,[color2] ; ЎтхЄ - mov ebx,17 shl 16+13 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,17 shl 16+13 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - int 0x40 ; ╧ЁхЁ√трэшх (юё ЁшёєхЄ яЁ ьюєуюы№эшъ) + mov edx,[color2] ; цвет + mov ebx,17 shl 16+13 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,17 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) ; color 1 - draw fringle - mov edx,0x222222 ; ЎтхЄ-юстюфъш - mov ebx,11 shl 16+15 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,12 shl 16+15 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - int 0x40 ; ╧ЁхЁ√трэшх (юё ЁшёєхЄ яЁ ьюєуюы№эшъ) + mov edx,0x222222 ; цвет-обводки + mov ebx,11 shl 16+15 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,12 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) ; value - draw fringle - mov ebx,34 shl 16+62 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,16 shl 16+15 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - int 0x40 ; ╧ЁхЁ√трэшх (юё ЁшёєхЄ яЁ ьюєуюы№эшъ) + mov ebx,34 shl 16+62 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,16 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) ; color 2 - draw color - mov edx,[color] ; ЎтхЄ - mov ebx,12 shl 16+13 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,13 shl 16+13 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - int 0x40 ; ╧ЁхЁ√трэшх (юё ЁшёєхЄ яЁ ьюєуюы№эшъ) + mov edx,[color] ; цвет + mov ebx,12 shl 16+13 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,13 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) ; value - draw background - mov edx,0xFFFFFF ; ЎтхЄ-Їюэр - mov ebx,35 shl 16+60 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,17 shl 16+13 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] - int 0x40 ; ╧ЁхЁ√трэшх (юё ЁшёєхЄ яЁ ьюєуюы№эшъ) + mov edx,0xFFFFFF ; цвет-фона + mov ebx,35 shl 16+60 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,17 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) - mov eax,47 ; ╘єэъЎш  47 - т√тюф ўшёыр т юъэю - mov ecx,[color] ; ўшёыю (яЁш bl=0) шыш єърчрЄхы№ (яЁш bl=1) + mov eax,47 ; Функция 47 - вывод числа в окно + mov ecx,[color] ; число (при bl=0) или указатель (при bl=1) mov esi,0x0 ; 0xX0RRGGBB - mov ebx,256+8 shl 16 ; ярЁрьхЄЁ√ яЁхюсЁрчютрэш  ўшёыр т ЄхъёЄ (HEX) - mov edx,45 shl 16+20 ; [ъююЁфшэрЄр яю юёш x]*65536 + [ъююЁфшэрЄр яю юёш y] - int 0x40 ; ╧ЁхЁ√трэшх - т√тюфшь Ёхчєы№ЄрЄ т юъэю (HEX) + mov ebx,256+8 shl 16 ; параметры преобразования числа в текст (HEX) + mov edx,45 shl 16+20 ; [координата по оси x]*65536 + [координата по оси y] + int 0x40 ; Прерывание - выводим результат в окно (HEX) - mov eax,4 ; ЇєэъЎш  4: эряшёрЄ№ ЄхъёЄ т юъэх - mov ebx,38*65536+20 ; [x эрўры№э√щ] *65536 + [y эрўры№э√щ] - mov ecx,0x0 ; ЎтхЄ ЄхъёЄр RRGGBB - mov edx,hex ; Ёшёєхь '#' - mov esi,1 ; фышэр ЄхъёЄр т срщЄрї + mov eax,4 ; функция 4: написать текст в окне + mov ebx,38*65536+20 ; [x начальный] *65536 + [y начальный] + mov ecx,0x0 ; цвет текста RRGGBB + mov edx,hex ; рисуем '#' + mov esi,1 ; длина текста в байтах int 0x40 ;................................................................................................. - ; ╬ЄЁшёютър r g b чэрўхэшщ + ; Отрисовка r g b значений ;................................................................................................. call get_spectr - movzx eax,[cred] ; ъЁрёэ√щ - mov ebx,9*65536+142 ; [x эрўры№э√щ] *65536 + [y эрўры№э√щ] - call draw_value ; т√тюфшь Ёхчєы№ЄрЄ + movzx eax,[cred] ; красный + mov ebx,9*65536+142 ; [x начальный] *65536 + [y начальный] + call draw_value ; выводим результат - movzx eax,[cgreen] ; чхыхэ√щ - mov ebx,32*65536+142 ; [x эрўры№э√щ] *65536 + [y эрўры№э√щ] - call draw_value ; т√тюфшь Ёхчєы№ЄрЄ + movzx eax,[cgreen] ; зеленый + mov ebx,32*65536+142 ; [x начальный] *65536 + [y начальный] + call draw_value ; выводим результат - movzx eax,[cblue] ; ёшэшщ - mov ebx,55*65536+142 ; [x эрўры№э√щ] *65536 + [y эрўры№э√щ] - call draw_value ; т√тюфшь Ёхчєы№ЄрЄ + movzx eax,[cblue] ; синий + mov ebx,55*65536+142 ; [x начальный] *65536 + [y начальный] + call draw_value ; выводим результат - movzx eax,[calpha] ; ры№Їр - mov ebx,78*65536+142 ; [x эрўры№э√щ] *65536 + [y эрўры№э√щ] - call draw_value ; т√тюфшь Ёхчєы№ЄрЄ + movzx eax,[calpha] ; альфа + mov ebx,78*65536+142 ; [x начальный] *65536 + [y начальный] + call draw_value ; выводим результат ;................................................................................................. - ; ┬√тюфшь сєът√ r g b a + ; Выводим буквы r g b a ;................................................................................................. - mov eax,4 ; 4 - т√тхёЄш ёЄЁюъє ЄхъёЄр т юъэю - mov ebx,16 shl 16+40 ; [ъююЁфшэрЄр яю юёш x]*65536 + [ъююЁфшэрЄр яю юёш y] - mov ecx,0x0 ; 0xX0RRGGBB (RR, GG, BB чрфр■Є ЎтхЄ ЄхъёЄр) - mov edx,cname ; єърчрЄхы№ эр эрўрыю ёЄЁюъш - mov esi,1 ; т√тюфшЄ№ esi ёшьтюыют - newline: ; Ўшъы - int 0x40 ; ╧ЁхЁ√трэшх - add ebx,23 shl 16 ; ─юсрты хь - add edx,1 ; ─юсрты хь - cmp [edx],byte 'x' ; ╤Ёртэхэшх ё срщЄюь ї - jne newline ; ┼ёыш эх эєы№ шыш эх Ёртэю + mov eax,4 ; 4 - вывести строку текста в окно + mov ebx,16 shl 16+40 ; [координата по оси x]*65536 + [координата по оси y] + mov ecx,0x0 ; 0xX0RRGGBB (RR, GG, BB задают цвет текста) + mov edx,cname ; указатель на начало строки + mov esi,1 ; выводить esi символов + newline: ; цикл + int 0x40 ; Прерывание + add ebx,23 shl 16 ; Добавляем + add edx,1 ; Добавляем + cmp [edx],byte 'x' ; Сравнение с байтом х + jne newline ; Если не нуль или не равно ;................................................................................................. - ; ╬ЄЁшёютър ёырщфхЁют + ; Отрисовка слайдеров ;................................................................................................. - mov eax,13 ; ╘єэъЎш  13 - эрЁшёютрЄ№ яЁ ьюєуюы№эшъ - mov edx,0x222222 ; ЎтхЄ-юстюфъш - mov ebx,16 shl 16+4 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,51 shl 16+86 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,0x222222 ; цвет-обводки + mov ebx,16 shl 16+4 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,51 shl 16+86 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 - add ebx,23 shl 16 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр y]*65536 + [ЁрчьхЁ] + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 - add ebx,23 shl 16 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр y]*65536 + [ЁрчьхЁ] + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 - add ebx,23 shl 16 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр y]*65536 + [ЁрчьхЁ] + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 - mov edx,0xFA0919 ; ЎтхЄ-юстюфъш - mov ebx,17 shl 16+2 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - mov ecx,52 shl 16+84 ; ═рўры№э√х ъююЁфшэрЄ√ яю y [ъ-Єр y]*65536 + [ЁрчьхЁ] + mov edx,0xFA0919 ; цвет-обводки + mov ebx,17 shl 16+2 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,52 shl 16+84 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 - mov edx,0x08CE19 ; ЎтхЄ-юстюфъш - add ebx,23 shl 16 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр y]*65536 + [ЁрчьхЁ] + mov edx,0x08CE19 ; цвет-обводки + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 - mov edx,0x0909FF ; ЎтхЄ-юстюфъш - add ebx,23 shl 16 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр y]*65536 + [ЁрчьхЁ] + mov edx,0x0909FF ; цвет-обводки + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 - mov edx,0xE4E4E4 ; ЎтхЄ-юстюфъш - add ebx,23 shl 16 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр y]*65536 + [ЁрчьхЁ] + mov edx,0xE4E4E4 ; цвет-обводки + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 ;................................................................................................. - ; ╬ЄЁшёютър яюычєэъют + ; Отрисовка ползунков ;................................................................................................. - mov edx,0x0 ; ЎтхЄ-яюычєэъют - mov ebx,17 shl 16+11 ; ═рўры№э√х ъююЁфшэрЄ√ яю x [ъ-Єр x]*65536 + [ЁрчьхЁ] - movzx eax,[cred] ; схЁхь чэрўхэшх ЎтхЄр + mov edx,0x0 ; цвет-ползунков + mov ebx,17 shl 16+11 ; Начальные координаты по x [к-та x]*65536 + [размер] + movzx eax,[cred] ; берем значение цвета call draw_slider add ebx,23 shl 16 - movzx eax,[cgreen] ; схЁхь чэрўхэшх ЎтхЄр + movzx eax,[cgreen] ; берем значение цвета call draw_slider add ebx,23 shl 16 - movzx eax,[cblue] ; схЁхь чэрўхэшх ЎтхЄр + movzx eax,[cblue] ; берем значение цвета call draw_slider add ebx,23 shl 16 - movzx eax,[calpha] ; схЁхь чэрўхэшх ЎтхЄр + movzx eax,[calpha] ; берем значение цвета call draw_slider - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + ret ; Возвращаем управление ;end_draw_result draw_slider: xor ecx,ecx - mov cl,0x3 ; сєфхь фхышЄ№ хую эр 3 Єръ ъръ яюычєэъш фышээющ 85 яшъёхыхщ - div cl ; фхышь - Ўхыюх т al юёЄрЄюъ т ah - mov cl,136 ; эшцэ   Єюўър яюычєэър + mov cl,0x3 ; будем делить его на 3 так как ползунки длинной 85 пикселей + div cl ; делим - целое в al остаток в ah + mov cl,136 ; нижняя точка ползунка sub cl,al ; cl=cl-al shl ecx,16 - add ecx,1 ; чрфрхь эрўры№эюх яюыюцхэшх - mov eax,13 ; ╘єэъЎш  13 - эрЁшёютрЄ№ яЁ ьюєуюы№эшъ + add ecx,1 ; задаем начальное положение + mov eax,13 ; Функция 13 - нарисовать прямоугольник int 0x40 - push ebx ; ёюїЁрэ хь фы  ёыхфє■∙хую яюычєэър x+w - sub ebx,8 ; Єръ ъръ °шЁшэр ышэшш 11 Єю юЄэшьрхь 8 ўЄюс√ ъєсшъ ёЄры °шЁшэющ 3 - add ebx,8 shl 16 ; ╩ююЁфшэрЄ√ яю x фы  ътрфЁрЄр эр яюычєэъх ёьх∙рхь эр 8 т яЁртю - inc ecx ; с√фыюъюфшь т√ёюЄє яюычєэър фю 3-ї (1+1=2) - inc ecx ; (2+1=3) эє тюЄ є эрё сєфхЄ ъєсшъ 3ї3 эр 8 т яЁртю юЄ ышэшш - int 0x40 ; Ёшёєхь - pop ebx ; тюёёЄрэртыштрхь эюЁьры№э√х ъююЁфшэрЄ√ - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + push ebx ; сохраняем для следующего ползунка x+w + sub ebx,8 ; так как ширина линии 11 то отнимаем 8 чтобы кубик стал шириной 3 + add ebx,8 shl 16 ; Координаты по x для квадрата на ползунке смещаем на 8 в право + inc ecx ; быдлокодим высоту ползунка до 3-х (1+1=2) + inc ecx ; (2+1=3) ну вот у нас будет кубик 3х3 на 8 в право от линии + int 0x40 ; рисуем + pop ebx ; восстанавливаем нормальные координаты + ret ; Возвращаем управление ;end_slider draw_value: ;................................................................................................. - ; ┬√тюф ўшёыр шч ёЄЁюъш т єърчрээющ юсырёЄш + ; Вывод числа из строки в указанной области ;................................................................................................. - push ebx ; ёюїЁрэ хь яЁшёырээ√х ъююЁфшэрЄ√ - mov ebx,10 ; єёЄрэртыштрхь юёэютрэшх ёшёЄхь√ ёўшёыхэш  - mov edi,buff ; єърчрЄхы№ эр ёЄЁюъє сєЇхЁр - call int2ascii ; ъюэтхЁЄшЁєхь ўшёыю ш ыюцшь ъръ ёЄЁюъє т сєЇхЁ + esi фышэр - mov eax,4 ; ЇєэъЎш  4: эряшёрЄ№ ЄхъёЄ т юъэх - pop ebx ; фюёЄрхь шч ёЄхър яЁшёырээ√х ъююЁфшэрЄ√ - cmp esi,2 ; ╓┼═╥╨╚╨╬┬└═╚┼ ╥┼╩╤╥└ + push ebx ; сохраняем присланные координаты + mov ebx,10 ; устанавливаем основание системы счисления + mov edi,buff ; указатель на строку буфера + call int2ascii ; конвертируем число и ложим как строку в буфер + esi длина + mov eax,4 ; функция 4: написать текст в окне + pop ebx ; достаем из стека присланные координаты + cmp esi,2 ; ЦЕНТРИРОВАНИЕ ТЕКСТА jne draw_value_1 add ebx,4 shl 16 jmp draw_value_e @@ -692,77 +821,63 @@ draw_value: jne draw_value_e add ebx,7 shl 16 draw_value_e: - mov ecx,0x0 ; ЎтхЄ ЄхъёЄр RRGGBB - mov edx,buff ; єърчрЄхы№ эр эрўрыю ЄхъёЄр + mov ecx,0x0 ; цвет текста RRGGBB + mov edx,buff ; указатель на начало текста int 0x40 - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + ret ; Возвращаем управление ;end_draw_value hex_digit: ;................................................................................................. - ; ╧ЁхюсЁрчютрэшх т ASCII (тэх чртшёшьюёЄш юЄ ёшёЄхь√ ёўшёыхэш ) + ; Преобразование в ASCII (вне зависимости от системы счисления) ;................................................................................................. - cmp dl,10 ; т dl юцшфрхЄё  ўшёыю юЄ 0 фю 15 - jb .less ; хёыш dl<10 Єю яхЁхїюфшь + cmp dl,10 ; в dl ожидается число от 0 до 15 + jb .less ; если dl<10 то переходим add dl,'A'-10 ; 10->A 11->B 12->C ... - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + ret ; Возвращаем управление .less: - or dl,'0' ; ┼ёыш ёшёЄхьр ёўшёыхэш  10-  ш ьхэхх - ret ; ┬ючтЁр∙рхь єяЁртыхэшх + or dl,'0' ; Если система счисления 10-я и менее + ret ; Возвращаем управление ;end_hex_digit int2ascii: ;................................................................................................. - ; ╧ЁхюсЁрчютрэшх ўшёыр т ёЄЁюъє + ; Преобразование числа в строку ;................................................................................................. - ; eax - 32-ї чэрўэюх ўшёыю - ; ebx - юёэютрэшх ёшёЄхь√ ёўшёыхэш  - ; edi - єърчрЄхы№ эр ёЄЁюъє сєЇхЁр - ; ┬ючтЁр∙рхЄ чряюыэхээ√щ сєЇхЁ ш esi - фышэр ёЄЁюъш + ; eax - 32-х значное число + ; ebx - основание системы счисления + ; edi - указатель на строку буфера + ; Возвращает заполненный буфер и esi - длина строки ;pushad - xor esi,esi ; чрэєы хь ёўхЄўшъ ёшьтюыют + xor esi,esi ; зануляем счетчик символов convert_loop: - xor edx,edx ; чрэєы хь ЁхушёЄЁ яюф юёЄрЄюъ - div ebx ; eax/ebx - юёЄрЄюъ т edx - call hex_digit ; яЁхюсЁрчєхь ёшьтюы - push edx ; ыюцшь т ёЄхъ - inc esi ; єтхышўштрхь ёўхЄўшъ - test eax,eax ; хёыш х∙х ьюцэю фхышЄ№ - jnz convert_loop ; Єю фхышхь х∙х - cld ; ╬┴▀╟└╥┼╦▄═╬ ёсЁрё√трхь Їыру эряЁртыхэш  DF (чряшё№ тяхЁ╕ф) - write_loop: ; шэрўх - pop eax ; фюёЄрхь шч ёЄхър т хрї - stosb ; чряшё√трхь т сєЇхЁ яю рфЁхёє ES:(E)DI - dec esi ; єьхэ№°рхь ёўхЄўшъ - test esi,esi ; хёыш хёЄ№ ўЄю фюёЄртрЄ№ шч ёЄхър - jnz write_loop ; Єю фюёЄр╕ь - mov byte [edi],0 ; шэрўх фюяшё√√трхь эєыхтющ срщЄ - ;popad ; тюёёЄрэртыштрхь чэрўхэш  ЁхушёЄЁют - ; ъюф эшцх эх шьххЄ эшўхую юс∙хую ъ ЇєэъЎшш, яЁюёЄю тючтЁр∙рхЄ х∙х фышээє яюыєўхээющ ёЄЁюъш - mov edi,buff ; єърчрЄхы№ эр эрўрыю ЄхъёЄр + xor edx,edx ; зануляем регистр под остаток + div ebx ; eax/ebx - остаток в edx + call hex_digit ; преобразуем символ + push edx ; ложим в стек + inc esi ; увеличиваем счетчик + test eax,eax ; если еще можно делить + jnz convert_loop ; то делием еще + cld ; ОБЯЗАТЕЛЬНО сбрасываем флаг направления DF (запись вперёд) + write_loop: ; иначе + pop eax ; достаем из стека в еах + stosb ; записываем в буфер по адресу ES:(E)DI + dec esi ; уменьшаем счетчик + test esi,esi ; если есть что доставать из стека + jnz write_loop ; то достаём + mov byte [edi],0 ; иначе дописыываем нулевой байт + ;popad ; восстанавливаем значения регистров + ; код ниже не имеет ничего общего к функции, просто возвращает еще длинну полученной строки + mov edi,buff ; указатель на начало текста call str_len mov esi,eax - ret ; ш тючтЁр∙рхь єяЁртыхэшх + ret ; и возвращаем управление ;end_int2ascii get_spectr: ;................................................................................................. - ; тючтЁр∙рхЄ r,g,b ёюёЄюты ■∙шх ЎтхЄр + ; возвращает r,g,b состовляющие цвета ;................................................................................................. - ;; get blue - ;mov ecx,[color] - ;movzx eax,cl - ;mov [cblue],al - ;; get red - ;mov eax,ecx - ;xor ax,ax ; р эрфю ыш???? - ;shr eax,16 - ;mov [cred],al - ;; get green - ;shl ecx,16 - ;shr ecx,24 - ;mov [cgreen],cl - mov ecx,[color] mov [cblue],cl shr ecx,8 @@ -771,12 +886,12 @@ get_spectr: mov [cred],cl shr ecx,8 mov [calpha],cl - ret ; ш тючтЁр∙рхь єяЁртыхэшх + ret ; и возвращаем управление ;end_get_spectr set_spectr: ;................................................................................................. - ; єёЄрэртыштрхЄ шч r,g,b ЎтхЄ + ; устанавливает из r,g,b цвет ;................................................................................................. movzx eax,[calpha] shl eax,8 @@ -786,13 +901,13 @@ set_spectr: shl eax,8 mov al,[cblue] mov [color],eax - call draw_result ; ┬√тюфшь Ёхчєы№ЄрЄ - ret ; ш тючтЁр∙рхь єяЁртыхэшх + call draw_result ; Выводим результат + ret ; и возвращаем управление ;end_get_spectr str_len: ;................................................................................................. - ; юяЁхфхы хЄ фышэє ёЄЁюъш (тїюф->EDI ZS offset ; т√їюф->EAX ZS length) + ; определяет длину строки (вход->EDI ZS offset ; выход->EAX ZS length) ;................................................................................................. push ecx push esi @@ -815,27 +930,44 @@ str_len: ;end_str_len ;#___________________________________________________________________________________________________ ;****************************************************************************************************| -; ┴╦╬╩ ╧┼╨┼╠┼══█╒ ╚ ╩╬═╤╥└═╥ | +; БЛОК ПЕРЕМЕННЫХ И КОНСТАНТ | ;----------------------------------------------------------------------------------------------------/ - color dd 00000000h ; їЁрэшЄ чэрўхэшх т√сЁрээюую ЎтхЄр - color2 dd 00FFFFFFh ; їЁрэшЄ чэрўхэшх тЄюЁюую т√сЁрээюую ЎтхЄр - mouse_x dd 0 ; їЁрэшЄ уыюсры№эє■ ї ъююЁфшэрЄє ь√°ш - mouse_y dd 0 ; їЁрэшЄ уыюсры№эє■ є ъююЁфшэрЄє ь√°ш - desctop_w dd 0 ; їЁрэшЄ °шЁшэє ¤ъЁрэр - sc system_colors ; їЁрэшЄ ёЄЁєъЄєЁє ёшёЄхьэ√ї ЎтхЄют ёъшэр - title db 'Palitra v0.4',0 ; їЁрэшЄ шь  яЁюуЁрьь√ - hex db '#',0 ; фы  т√тюфр Ёх°╕Єъш ъръ ЄхъёЄр - cname db 'RGBAx' ; їЁрэшЄ ЁрчЁ ф√ ЎтхЄют (red,green,blue) x-ьхЄър ъюэЎр - cred db 0 ; їЁрэшь ъЁрёэ√щ ёяхъЁЄ - cgreen db 0 ; їЁрэшь чхыхэ√щ ёяхъЄЁ - cblue db 0 ; їЁрэшь ёшэшщ ёяхъЄЁ - calpha db 0 ; їЁрэшь яЁючЁрўэюёЄ№ +struct map_colors + c1 db 0 + c2 db 0 + c3 db 0 + c4 db 0 + c5 db 0 + c6 db 0 + c7 db 0 + c8 db 0 + c9 db 0 + c10 db 0 + c11 db 0 + c12 db 0 +ends + + cm db 12 dup(0) + color dd 00000000h ; хранит значение выбранного цвета + color2 dd 00FFFFFFh ; хранит значение второго выбранного цвета + mouse_x dd 0 ; хранит глобальную х координату мыши + mouse_y dd 0 ; хранит глобальную у координату мыши + mouse_f dd 0 ; хранит данные о том какая кнопка мыши была нажата + desctop_w dd 0 ; хранит ширину экрана + sc system_colors ; хранит структуру системных цветов скина + title db 'Palitra v0.5',0 ; хранит имя программы + hex db '#',0 ; для вывода решётки как текста + cname db 'RGBAx' ; хранит разряды цветов (red,green,blue) x-метка конца + cred db 0 ; храним красный спекрт + cgreen db 0 ; храним зеленый спектр + cblue db 0 ; храним синий спектр + calpha db 0 ; храним прозрачность + larrow db 0x1A,0 buff db '000',0 - bnext db 'NEXT BACKGROUND',0; шь  ъэюяъш - pnext dd 0 ; ёўхЄўшъ яхЁхъы■ўхэш  ярышЄЁ√ - - + bground db 'BACKGROUND',0 ; имя кнопки - 14 + pnext dd 0 ; счетчик переключения палитры + renmode dd 0 ; режим отрисовки (1-цветовая схема,2-пипетка,3-круговая) I_END: