diff --git a/programs/media/palitra/trunk/build.bat b/programs/media/palitra/trunk/build.bat new file mode 100644 index 0000000000..5c25890f93 --- /dev/null +++ b/programs/media/palitra/trunk/build.bat @@ -0,0 +1,4 @@ +@fasm.exe palitra.asm palitra +@kpack palitra + +pause \ No newline at end of file diff --git a/programs/media/palitra/trunk/palitra.asm b/programs/media/palitra/trunk/palitra.asm index fc373972ec..13f7f2d511 100644 --- a/programs/media/palitra/trunk/palitra.asm +++ b/programs/media/palitra/trunk/palitra.asm @@ -3,16 +3,20 @@ ; Program Palitra (c) Sergei Steshin (Akyltist) | ;----------------------------------------------------------------------------------------------------| ;; compiler: FASM 1.69.31 | -;; version: 0.2.0 | -;; last update: 15/09/2012 | +;; version: 0.3.0 | +;; last update: 08/11/2012 | ;; e-mail: dr.steshin@gmail.com | ;..................................................................................................... ;; History: | -;; 0.1.0 - ЏҐаў п ўҐабЁп Їа®Ја ¬¬л | -;; 0.2.0 - €бЇа ў«Ґ­® Ї®Ї ¤ ­ЁҐ ў бҐвЄг, ЎҐаҐвбп Ў«Ё¦ ©иЁ© Ї® ¤Ё Ј®­ «Ё ЇЁЄбҐ«м. | -;; - „®Ў ў«Ґ­л Ї®«§г­ЄЁ, ¤«п ॣ㫨஢ ­Ёп rgb б®бв ў«пойЁе жўҐв  Ё ўлў®¤ нвЁе б®бв ў«пойЁе. | -;; - “Ўа ­ ўлў®¤ жўҐв  ў ЎЁ­ а­®¬ ўЁ¤Ґ (Ї®Є  §  ­Ґ ­ ¤®Ў­®бвмо Ё ­Ґ  Євг «м­®бвмо). | -;; - ЊҐ«Є п Є®б¬ҐвЁЄ . | +;; 0.1.0 - Первая версия программы. | +;; 0.2.0 - Исправлено попадание в сетку, берется ближайший по диагонали пиксель. | +;; - Добавлены ползунки, для регулирования rgb составляющих цвета и вывод этих составляющих. | +;; - Убран вывод цвета в бинарном виде (пока за не надобностью и не актуальностью). | +;; - Мелкая косметика. | +;; 0.3.0 - Добавлено переключение видов цветовых схем (кнопка NEXT) | +;; - Улучшены ползунки, производится обработка нажатия рядом с ползунком. | +;; - Число сеток в цветовой схеме уменьшено с 6 до 4 (кратность 256, иначе дублирование цвета).| +;; - Мелкая косметика. | ;..................................................................................................... ;; All rights reserved. | ;; | @@ -40,7 +44,7 @@ ;#___________________________________________________________________________________________________ ;****************************************************************************************************| -; ‡ЂѓЋ‹Ћ‚ЋЉ €‘ЏЋ‹Ќџ…ЊЋѓЋ ”Ђ‰‹Ђ Џђ€‹Ћ†…Ќ€џ „‹џ ЉЋ‹€Ѓђ€ Ћ‘ | +; ЗАГОЛОВОК ИСПОЛНЯЕМОГО ФАЙЛА ПРИЛОЖЕНИЯ ДЛЯ КОЛИБРИ ОС | ;----------------------------------------------------------------------------------------------------/ use32 org 0x0 @@ -54,49 +58,73 @@ dd 0x0 dd 0x0 -include 'macros.inc' +include '../../../macros.inc' + START: ;#___________________________________________________________________________________________________ ;****************************************************************************************************| -; Ћ‘ЌЋ‚ЌЋ‰ –€Љ‹ ЏђЋѓђЂЊЊ› - ЋЃђЂЃЋ’ЉЂ ‘ЋЃ›’€‰ | +; ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ - ОБРАБОТКА СОБЫТИЙ | ;----------------------------------------------------------------------------------------------------/ red: - call draw_window ; ўл§лў Ґ¬ ЇҐаҐаЁб®ўЄг ®Є­  ЇаЁ«®¦Ґ­Ёп + call draw_window ; вызываем перерисовку окна приложения 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 ; ўл室Ё¬ + mcall 17 ; 17 - получить идентификатор нажатой кнопки + cmp ah, 1 ; если нажата кнопка с номером 1, + jz bexit ; выходим + ;обработка кнопки Next + cmp ah, 11 ; если нажата кнопка NEXT + jne next_bg ; выходим + inc [pnext] ; увеличиваем при нажатии номер палитры + mov eax,[pnext] + cmp al,6 + jne next_redraw + xor eax,eax + mov [pnext],eax + next_redraw: + call draw_palitra ; РИСУЕМ ПАЛИТРУ + ;call draw_result ; РИСУЕМ РЕЗУЛЬТАТ + jmp still + + next_bg: + cmp ah, 12 ; если нажата кнопка BACKGROUND + jne next_end ; выходим + mcall 15,4,1 + mcall 15,1,1,1 + mcall 15,5,color,0,3*1*1 + mcall 15,3 + jne next_redraw + next_end: cmp ah, 7 jne color_button call mouse_get jmp still color_button: push eax - call mouse_local ; Ї®«гзЁ« «®Є «м­лҐ Є®®а¤Ё­ вл + call mouse_local ; получил локальные координаты mov ebx,129 mov ecx,[mouse_y] sub ebx,ecx mov ecx,3 imul ecx,ebx - + ;push ecx @@ -120,454 +148,571 @@ button: call set_spectr jmp still bexit: - mcall -1 ; Ё­ зҐ Є®­Ґж Їа®Ја ¬¬л + mcall -1 ; иначе конец программы ;end_button ;#___________________________________________________________________________________________________ ;****************************************************************************************************| -; ѓ‹Ђ‚Ќ›‰ ЊЋ„“‹њ Ћ’ђ€‘Ћ‚Љ€ ЋЉЌЂ € ќ‹…Њ…Ќ’Ћ‚ Џђ€‹Ћ†…Ќ€џ | +; ГЛАВНЫЙ МОДУЛЬ ОТРИСОВКИ ОКНА И ЭЛЕМЕНТОВ ПРИЛОЖЕНИЯ | ;----------------------------------------------------------------------------------------------------/ draw_window: - mov eax,12 ; дг­ЄжЁп 12: ®§­ з Ґв, зв® Ўг¤Ґв аЁб®ў вмбп ®Є­® - mov ebx,1 ; 1,­ з «® аЁб®ў ­Ёп - int 0x40 ; ЏаҐалў ­ЁҐ + 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,200 shl 16+325 ; [Є®®а¤Ё­ в  Ї® ®бЁ x]*65536 + [а §¬Ґа Ї® ®бЁ x] - add ecx,200 shl 16+168 ; ‚лб®в  бЄЁ­  + [Є®®а¤Ё­ в  Ї® y]*65536 + [а §¬Ґа Ї® y] - mov edx,[sc.work] ; ‚Ё¤Ё¬® бвЁ«м ®Є­  Ї® ¤Ґд®«вг - or edx,0x34000000 ; €«Ё ®Є­® б® бЄЁ­®¬ дЁЄбЁа®ў ­­ле а §¬Ґа®ў - mov edi,title ; ‡ Ј®«®ў®Є ®Є­  - int 0x40 ; ЏаҐалў ­ЁҐ + xor eax,eax ; Очищаем eax (mov eax,0) (Функция 0) + mov ebx,200 shl 16+250 ; [координата по оси x]*65536 + [размер по оси x] + add ecx,200 shl 16+195 ; Высота скина + [координата по y]*65536 + [размер по y] (168 для версии 0.2) + mov edx,[sc.work] ; Видимо стиль окна по дефолту + or edx,0x34000000 ; Или окно со скином фиксированных размеров + mov edi,title ; Заголовок окна + int 0x40 ; Прерывание - call draw_palitra ; ђ€‘“…Њ ЏЂ‹€’ђ“ - call draw_result ; ђ€‘“…Њ ђ…‡“‹њ’Ђ’ + call draw_palitra ; РИСУЕМ ПАЛИТРУ + call draw_result ; РИСУЕМ РЕЗУЛЬТАТ - mov eax,8 ; ”г­ЄжЁп 8 - ®ЇаҐ¤Ґ«Ёвм/г¤ «Ёвм Є­®ЇЄг - mov ebx,89 shl 16+222 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® е [Є-в  x]*65536 + [а §¬Ґа] - mov ecx,9 shl 16+147 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] - mov edx,0x60000007 ; Ќ з «м­®Ґ ID Є­®Ї®Є - 0xXYnnnnnn + mov eax,8 ; Функция 8 - определить/удалить кнопку + mov ebx,89 shl 16+147 ; Начальные координаты по х [к-та x]*65536 + [размер] + mov ecx,9 shl 16+147 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov edx,0x60000007 ; Начальное ID кнопок - 0xXYnnnnnn int 0x40 - mov ebx,10 shl 16+8 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® е [Є-в  x]*65536 + [а §¬Ґа] - mov edx,0x60000008 ; ID = 8 - mov ecx,45 shl 16+85 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] - int 0x40 ; ђЁб㥬 ­ҐўЁ¤Ё¬го Є­®ЇЄг Ї®¤ б« ©¤Ґа®¬ red - add ebx,29 shl 16 ; „®Ў ў«пҐ¬ - inc edx ; ID = 9 - int 0x40 ; ђЁб㥬 ­ҐўЁ¤Ё¬го Є­®ЇЄг Ї®¤ б« ©¤Ґа®¬ green - add ebx,29 shl 16 ; „®Ў ў«пҐ¬ - inc edx ; ID = 10 - int 0x40 ; ђЁб㥬 ­ҐўЁ¤Ё¬го Є­®ЇЄг Ї®¤ б« ©¤Ґа®¬ blue + mov ebx,9 shl 16+12 ; Начальные координаты по х [к-та x]*65536 + [размер] + mov edx,0x60000008 ; ID = 8 + mov ecx,45 shl 16+85 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Рисуем невидимую кнопку под слайдером red + add ebx,26 shl 16 ; Добавляем + inc edx ; ID = 9 + int 0x40 ; Рисуем невидимую кнопку под слайдером green + add ebx,26 shl 16 ; Добавляем + inc edx ; ID = 10 + int 0x40 ; Рисуем невидимую кнопку под слайдером blue - mov eax,12 ; дг­ЄжЁп 12: ®§­ з Ґв, зв® Ўг¤Ґв аЁб®ў вмбп ®Є­® - mov ebx,2 ; 1,­ з «® аЁб®ў ­Ёп - int 0x40 ; ЏаҐалў ­ЁҐ + mov eax,12 ; функция 12: означает, что будет рисоваться окно + mov ebx,2 ; 2 - конец рисования + int 0x40 ; Прерывание - ret ; ‚®§ўа й Ґ¬ гЇа ў«Ґ­ЁҐ + ;................................................................................................. + ; Отрисовка нижней панели + ;................................................................................................. + mov eax,8 ; Функция 8 - определить/удалить кнопку + mov ebx,4 shl 16+64 ; Начальные координаты по х [к-та x]*65536 + [размер] + mov ecx,169 shl 16+16 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov edx,11 ; ID = 11 + mov esi,[sc.work_button] ; цвет + int 0x40 + + mov ebx,80 shl 16+102 ; Начальные координаты по х [к-та x]*65536 + [размер] + mov edx,12 ; ID = 11 + int 0x40 + + + 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+236 ;[координата начала по оси x]*65536 + [координата конца по оси x] + mov ecx,163 shl 16+163 ;[координата начала по оси y]*65536 + [координата конца по оси y] + mov edx,0x00666666 ;0x00RRGGBB - цвет + int 0x40 + + ret ; Возвращаем управление ;#___________________________________________________________________________________________________ ;****************************************************************************************************| -; Ѓ‹ЋЉ ‚‘ЏЋЊЋѓЂ’…‹њЌ›• ЏђЋ–…„“ђ € ”“ЌЉ–€‰ Џђ€‹Ћ†…Ќ€џ | +; БЛОК ВСПОМОГАТЕЛЬНЫХ ПРОЦЕДУР И ФУНКЦИЙ ПРИЛОЖЕНИЯ | ;----------------------------------------------------------------------------------------------------/ mouse_global: ;................................................................................................. - ; Џ®«гз Ґ¬ Є®®а¤Ё­ вл ¬лиЁ + ; Получаем координаты мыши ;................................................................................................. - 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 - dec ecx ; ecx = x - dec edx ; edx = y - mov [mouse_x],ecx ; mouse_x = x - mov [mouse_y],edx ; mouse_y = y - ret ; ‚®§ўа й Ґ¬ гЇа ў«Ґ­ЁҐ + 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 + dec ecx ; ecx = x + dec edx ; edx = y + mov [mouse_x],ecx ; mouse_x = x + mov [mouse_y],edx ; mouse_y = y + ret ; Возвращаем управление ;end_mouse_global mouse_local: ;................................................................................................. - ; Џ®«гз Ґ¬ Є®®а¤Ё­ вл ¬лиЁ ®в­®бЁвҐ«м­® ®Є­  + ; Получаем координаты мыши относительно окна ;................................................................................................. - 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 - dec ecx ; ecx = x - dec edx ; edx = y - mov [mouse_x],ecx ; mouse_x = x - mov [mouse_y],edx ; mouse_y = y - ret ; ‚®§ўа й Ґ¬ гЇа ў«Ґ­ЁҐ + 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 + dec ecx ; ecx = x + dec edx ; edx = y + mov [mouse_x],ecx ; mouse_x = x + mov [mouse_y],edx ; mouse_y = y + ret ; Возвращаем управление ;end_mouse_local desktop_get: ;................................................................................................. - ; ЋЇаҐ¤Ґ«пҐ¬ иЁаЁ­г нЄа ­  + ; Определяем ширину экрана ;................................................................................................. - 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 («Ёи­Ё© Є®¤) - inc ebx ; ebx = xsize - ;inc edx ;; edx = ysize («Ёи­Ё© Є®¤) + 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 (лишний код) + inc ebx ; ebx = xsize + ;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 + 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 ; ‘зҐвзЁЄ «Ё­Ё© Ї®¤«®¦ҐЄ + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,0x222222 ; цвет + mov ecx,9 shl 16+73 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov esi,2 ; Счетчик линий подложек re_draw: - mov ebx,89 shl 16+73 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - mov edi,3 ; ‘зҐвзЁЄ Є®«ЁзҐбвў  Ї®¤«®¦ҐЄ + mov ebx,89 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 ; …б«Ё ­Ґ ­®«м в® ў ­ з «® жЁЄ«  + 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,6 ; ‘зҐвзЁЄ Є®«ЁзҐбвў   Ў§ жҐў (#4,8) - mov ebx,78 shl 16+8 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,0x0FFFFFFF ; цвет + mov esi,4 ; Счетчик количества абзацев (#4,8) + mov ebx,78 shl 16+8 ; Начальные координаты по x [к-та x]*65536 + [размер] for_abz: - ;;push esi ; ‘®е࠭塞 §­ зҐ­ЁҐ бзҐвзЁЄ  «Ё­Ё© ў б⥪ - cmp esi,3 + ;;push esi ; Сохраняем значение счетчика линий в стек + cmp esi,2 jne x2_line mov ebx,78 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 + [а §¬Ґа] - cmp esi,3 - jg y2_line ; …б«Ё Ў®«миҐ 4 в® ЁЈ­®аЁ¬ - mov ecx,76 shl 16+8 - y2_line: - add ebx,9 shl 16 ; ‘¬Ґй Ґ¬ Ї®«®¦Ґ­ЁҐ «Ё­ЁЁ Ї® x - for_loop: - add ecx,9 shl 16 ; ‘¬Ґй Ґ¬ Ї®«®¦Ґ­ЁҐ «Ё­ЁЁ Ї® y - int 0x40 ; ЏаҐалў ­ЁҐ - sub edx,32 shl 16 - dec edi ; “¬Ґ­ми Ґ¬ бзҐвзЁЄ Є­®Ї®Є - cmp edi,0 ; ‘а ў­Ёў Ґ¬ б ­г«Ґ¬ - jnz for_loop ; …б«Ё ­Ґ ­®«м в® ў ­ з «® жЁЄ«  - sub edx,32 shl 8 - pop edi ; €­ зҐ ў®ббв ­ ў«Ёў Ґ¬ бзҐвзЁЄ «Ё­Ё© - dec edi ; “¬Ґ­ми Ґ¬ ҐЈ® - cmp edi,0 ; ‘а ў­Ёў Ґ¬ б ­г«Ґ¬ - jnz for_stolbik ; …б«Ё ­Ґ ­®«м в® ў ­ з «® жЁЄ«  - sub edx,48 ; (#64,32) - ;;pop esi ; €­ зҐ ў®ббв ­ ў«Ёў Ґ¬ бзҐвзЁЄ «Ё­Ё© - dec esi ; “¬Ґ­ми Ґ¬ ҐЈ® - cmp esi,0 ; ‘а ў­Ёў Ґ¬ б ­г«Ґ¬ - jnz for_abz ; …б«Ё ­Ґ ­®«м в® ў ­ з «® жЁЄ«  - ret ; ‚®§ўа й Ґ¬ гЇа ў«Ґ­ЁҐ + push edi ; Сохраняем значение счетчика линий в стек + mov edi,8 ; Счетчик количества кнопок в строке + mov ecx, 1 shl 16+8 ; Начальные координаты по y [к-та y]*65536 + [размер] + cmp esi,2 + jg y2_line ; Если больше 4 то игнорим + mov ecx,76 shl 16+8 + y2_line: + add ebx,9 shl 16 ; Смещаем положение линии по x + for_loop: + add ecx,9 shl 16 ; Смещаем положение линии по y + int 0x40 ; Прерывание + call sub_red + dec edi ; Уменьшаем счетчик кнопок + cmp edi,0 ; Сравниваем с нулем + jnz for_loop ; Если не ноль то в начало цикла + call sub_green + pop edi ; Иначе восстанавливаем счетчик линий + dec edi ; Уменьшаем его + cmp edi,0 ; Сравниваем с нулем + jnz for_stolbik ; Если не ноль то в начало цикла + call sub_blue + ;;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 + jmp sub_red_e + sub_red_1: ; random + cmp al,1 + jne sub_red_2 + sub edx,0x40 + jmp sub_red_e + sub_red_2: ; gree + cmp al,2 + jne sub_red_3 + sub edx,0x010101 + jmp sub_red_e + sub_red_3: ; red + cmp al,3 + jne sub_red_4 + sub edx,0x0101 + jmp sub_red_e + sub_red_4: ; green + cmp al,4 + jne sub_red_5 + sub edx,0x010001 + jmp sub_red_e + sub_red_5: ; blue + cmp al,5 + jne sub_red_e + sub edx,0x010100 + jmp sub_red_e + sub_red_e: + pop eax + ret ; Возвращаем управление +;end_sub_red------------------------------------------------------------------------------------------ + +sub_green: + ;................................................................................................. + ; Расчёт смещений красного цвета в генерации цвета палитры + ;................................................................................................. + push eax + mov eax,[pnext] + ;sub_green_0 + cmp al,0 + jne sub_green_1 + sub edx,0x2000 + jmp sub_green_e + sub_green_1: + cmp al,1 + jne sub_green_e + sub edx,0x4000 + ;jmp sub_green_e + sub_green_e: + pop eax + ret ; Возвращаем управление +;end_sub_green---------------------------------------------------------------------------------------- + + +sub_blue: + ;................................................................................................. + ; Расчёт смещений красного цвета в генерации цвета палитры + ;................................................................................................. + push eax + mov eax,[pnext] + ;sub_blue_0 + cmp al,0 + jne sub_blue_1 + sub edx,0x400000 + jmp sub_blue_e + sub_blue_1: + cmp al,1 + jne sub_blue_e + sub edx,0x600000 + ;jmp sub_blue_e + sub_blue_e: + pop eax + ret ; Возвращаем управление +;end_sub_blue----------------------------------------------------------------------------------------- + draw_result: ;................................................................................................. - ; ЋваЁб®ўЄ  १г«мв в  жўҐв  ў hex + ; Отрисовка результата цвета в hex ;................................................................................................. - mov eax,13 ; ”г­ЄжЁп 13 - ­ аЁб®ў вм Їаאַ㣮«м­ЁЄ - mov edx,0x222222 ; 梥в-®Ўў®¤ЄЁ - mov ebx,4 shl 16+15 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - mov ecx,9 shl 16+15 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] - int 0x40 ; ЏаҐалў ­ЁҐ (®б аЁбгҐв Їаאַ㣮«м­ЁЄ) - mov ebx,23 shl 16+62 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - int 0x40 ; ЏаҐалў ­ЁҐ (®б аЁбгҐв Їаאַ㣮«м­ЁЄ) + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,0x222222 ; цвет-обводки + mov ebx,4 shl 16+15 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,9 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) + mov ebx,23 shl 16+62 ; Начальные координаты по x [к-та x]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) - mov edx,[color] ; 梥в - mov ebx,5 shl 16+13 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - mov ecx,10 shl 16+13 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] - int 0x40 ; ЏаҐалў ­ЁҐ (®б аЁбгҐв Їаאַ㣮«м­ЁЄ) - mov edx,0xFFFFFF ; 梥в-д®­  - mov ebx,24 shl 16+60 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - int 0x40 ; ЏаҐалў ­ЁҐ (®б аЁбгҐв Їаאַ㣮«м­ЁЄ) + mov edx,[color] ; цвет + mov ebx,5 shl 16+13 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,10 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) + mov edx,0xFFFFFF ; цвет-фона + mov ebx,24 shl 16+60 ; Начальные координаты по x [к-та x]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) - mov eax,47 ; ”г­ЄжЁп 47 - ўлў®¤ зЁб«  ў ®Є­® - mov ecx,[color] ; зЁб«® (ЇаЁ bl=0) Ё«Ё гЄ § вҐ«м (ЇаЁ bl=1) - mov esi,0x0 ; 0xX0RRGGBB - mov ebx,256+8 shl 16 ; Ї а ¬Ґвал ЇаҐ®Ўа §®ў ­Ёп зЁб«  ў ⥪бв (HEX) - mov edx,34 shl 16+13 ; [Є®®а¤Ё­ в  Ї® ®бЁ x]*65536 + [Є®®а¤Ё­ в  Ї® ®бЁ y] - int 0x40 ; ЏаҐалў ­ЁҐ - ўлў®¤Ё¬ १г«мв в ў ®Є­® (HEX) + mov eax,47 ; Функция 47 - вывод числа в окно + mov ecx,[color] ; число (при bl=0) или указатель (при bl=1) + mov esi,0x0 ; 0xX0RRGGBB + mov ebx,256+8 shl 16 ; параметры преобразования числа в текст (HEX) + mov edx,34 shl 16+13 ; [координата по оси x]*65536 + [координата по оси y] + int 0x40 ; Прерывание - выводим результат в окно (HEX) - mov eax,4 ; дг­ЄжЁп 4: ­ ЇЁб вм ⥪бв ў ®Є­Ґ - mov ebx,27*65536+13 ; [x ­ з «м­л©] *65536 + [y ­ з «м­л©] - mov ecx,0x0 ; 梥в ⥪бв  RRGGBB - mov edx,hex ; аЁб㥬 '#' - mov esi,1 ; ¤«Ё­  ⥪бв  ў Ў ©в е - int 0x40 + mov eax,4 ; функция 4: написать текст в окне + mov ebx,27*65536+13 ; [x начальный] *65536 + [y начальный] + mov ecx,0x0 ; цвет текста RRGGBB + mov edx,hex ; рисуем '#' + mov esi,1 ; длина текста в байтах + int 0x40 ;................................................................................................. - ; ЋваЁб®ўЄ  Ї®«Ґ© ¤«п r g b §­ зҐ­Ё© + ; Отрисовка полей для r g b значений ;................................................................................................. call get_spectr - mov eax,13 ; ”г­ЄжЁп 13 - ­ аЁб®ў вм Їаאַ㣮«м­ЁЄ - mov edx,0x222222 ; 梥в-®Ўў®¤ЄЁ - mov ebx,4 shl 16+23 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - mov ecx,142 shl 16+15 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] + mov eax,13 ; Функция 13 - нарисовать прямоугольник Leency{ + mov edx,0x222222 ; цвет-обводки + mov ebx,4 shl 16+24 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,142 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 + mov ebx,33 shl 16+24 ; Начальные координаты по x [к-та x]*65536 + [размер] + int 0x40 + mov ebx,62 shl 16+24 ; Начальные координаты по x [к-та x]*65536 + [размер] + int 0x40 + mov edx,0xFFFFFF ; цвет-обводки + mov ebx,5 shl 16+22 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,143 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 + mov ebx,34 shl 16+22 ; Начальные координаты по x [к-та x]*65536 + [размер] + int 0x40 + mov ebx,63 shl 16+22 ; Начальные координаты по x [к-та x]*65536 + [размер] + int 0x40 + + ;................................................................................................. + ; Отрисовка r g b значений + ;................................................................................................. + movzx eax,[cred] ; красный + mov ebx,7*65536+146 ; [x начальный] *65536 + [y начальный] + call draw_value ; выводим результат + + movzx eax,[cgreen] ; зеленый + mov ebx,36*65536+146 ; [x начальный] *65536 + [y начальный] + call draw_value ; выводим результат + + movzx eax,[cblue] ; синий + mov ebx,65*65536+146 ; [x начальный] *65536 + [y начальный] + call draw_value ; выводим результат + + ;................................................................................................. + ; Обнуляем фон + ;................................................................................................. + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,[sc.work] ; цвет-обводки + mov ebx,8 shl 16+66 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,40 shl 16+87 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 - mov ebx,33 shl 16+23 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] + + ; mov eax,13 ; Функция 13 - нарисовать прямоугольник + ; mov edx,0x222222 ; цвет-обводки + ; mov ebx,4 shl 16+24 ; Начальные координаты по x [к-та x]*65536 + [размер] + ; mov ecx,30 shl 16+105 ; Начальные координаты по y [к-та y]*65536 + [размер] + ; int 0x40 + ; add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] + ; int 0x40 + ; add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] + ; int 0x40 + + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,[sc.work] ; цвет-обводки + mov ebx,5 shl 16+22 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,31 shl 16+103 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 - mov ebx,62 shl 16+23 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] + add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 - mov edx,0xFFFFFF ; 梥в-®Ўў®¤ЄЁ - mov ebx,5 shl 16+21 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - mov ecx,143 shl 16+13 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] - int 0x40 - mov ebx,34 shl 16+21 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - int 0x40 - mov ebx,63 shl 16+21 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] + add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 ;................................................................................................. - ; ЋваЁб®ўЄ  r g b §­ зҐ­Ё© + ; Выводим буквы r g b ;................................................................................................. - movzx eax,[cred] ; Єа б­л© - mov ebx,7*65536+146 ; [x ­ з «м­л©] *65536 + [y ­ з «м­л©] - call draw_value ; ўлў®¤Ё¬ १г«мв в - - movzx eax,[cgreen] ; §Ґ«Ґ­л© - mov ebx,36*65536+146 ; [x ­ з «м­л©] *65536 + [y ­ з «м­л©] - call draw_value ; ўлў®¤Ё¬ १г«мв в - - movzx eax,[cblue] ; бЁ­Ё© - mov ebx,65*65536+146 ; [x ­ з «м­л©] *65536 + [y ­ з «м­л©] - call draw_value ; ўлў®¤Ё¬ १г«мв в + mov eax,4 ; 4 - вывести строку текста в окно + mov ebx,12 shl 16+34 ; [координата по оси x]*65536 + [координата по оси y] + mov ecx,0x0 ; 0xX0RRGGBB (RR, GG, BB задают цвет текста) + mov edx,cname ; указатель на начало строки + mov esi,1 ; выводить esi символов + newline: ; цикл + int 0x40 ; Прерывание + add ebx,29 shl 16 ; Добавляем + add edx,1 ; Добавляем + cmp [edx],byte 'x' ; Сравнение с байтом х + jne newline ; Если не нуль или не равно ;................................................................................................. - ; ЋЎ­г«пҐ¬ д®­ + ; Отрисовка слайдеров ;................................................................................................. - mov eax,13 ; ”г­ЄжЁп 13 - ­ аЁб®ў вм Їаאַ㣮«м­ЁЄ - mov edx,[sc.work] ; 梥в-®Ўў®¤ЄЁ - mov ebx,8 shl 16+66 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - mov ecx,40 shl 16+87 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] + mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,0x222222 ; цвет-обводки + mov ebx,12 shl 16+4 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,45 shl 16+85 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 + add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] + int 0x40 + add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 - ;mov eax,13 ; ”г­ЄжЁп 13 - ­ аЁб®ў вм Їаאַ㣮«м­ЁЄ - ;mov edx,0x222222 ; 梥в-®Ўў®¤ЄЁ - ;mov ebx,4 shl 16+23 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - ;mov ecx,30 shl 16+105 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] - ;int 0x40 - ;add ebx,29 shl 16 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  y]*65536 + [а §¬Ґа] - ;int 0x40 - ;add ebx,29 shl 16 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  y]*65536 + [а §¬Ґа] - ;int 0x40 - - mov eax,13 ; ”г­ЄжЁп 13 - ­ аЁб®ў вм Їаאַ㣮«м­ЁЄ - mov edx,[sc.work] ; 梥в-®Ўў®¤ЄЁ - mov ebx,5 shl 16+21 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - mov ecx,31 shl 16+103 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] + mov edx,0xFA0919 ; цвет-обводки + mov ebx,13 shl 16+2 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,46 shl 16+83 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 - add ebx,29 shl 16 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  y]*65536 + [а §¬Ґа] + mov edx,0x08CE19 ; цвет-обводки + add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 - add ebx,29 shl 16 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  y]*65536 + [а §¬Ґа] + mov edx,0x0909FF ; цвет-обводки + add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 ;................................................................................................. - ; ‚лў®¤Ё¬ ЎгЄўл r g b + ; Отрисовка ползунков ;................................................................................................. - mov eax,4 ; 4 - ўлўҐбвЁ бва®Єг ⥪бв  ў ®Є­® - mov ebx,12 shl 16+34 ; [Є®®а¤Ё­ в  Ї® ®бЁ x]*65536 + [Є®®а¤Ё­ в  Ї® ®бЁ y] - mov ecx,0x0 ; 0xX0RRGGBB (RR, GG, BB § ¤ ов 梥в ⥪бв ) - mov edx,cname ; гЄ § вҐ«м ­  ­ з «® бва®ЄЁ - mov esi,2 ; ўлў®¤Ёвм esi бЁ¬ў®«®ў - newline: ; жЁЄ« - int 0x40 ; ЏаҐалў ­ЁҐ - add ebx,29 shl 16 ; „®Ў ў«пҐ¬ - add edx,2 ; „®Ў ў«пҐ¬ - cmp [edx],byte 'x' ; ‘а ў­Ґ­ЁҐ б Ў ©в®¬ е - jne newline ; …б«Ё ­Ґ ­г«м Ё«Ё ­Ґ а ў­® - - ;................................................................................................. - ; ЋваЁб®ўЄ  б« ©¤Ґа®ў - ;................................................................................................. - mov eax,13 ; ”г­ЄжЁп 13 - ­ аЁб®ў вм Їаאַ㣮«м­ЁЄ - mov edx,0x222222 ; 梥в-®Ўў®¤ЄЁ - mov ebx,12 shl 16+4 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - mov ecx,45 shl 16+85 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] - int 0x40 - add ebx,29 shl 16 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  y]*65536 + [а §¬Ґа] - int 0x40 - add ebx,29 shl 16 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  y]*65536 + [а §¬Ґа] - int 0x40 - - mov edx,0xFA0919 ; 梥в-®Ўў®¤ЄЁ - mov ebx,13 shl 16+2 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - mov ecx,46 shl 16+83 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® y [Є-в  y]*65536 + [а §¬Ґа] - int 0x40 - mov edx,0x08CE19 ; 梥в-®Ўў®¤ЄЁ - add ebx,29 shl 16 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  y]*65536 + [а §¬Ґа] - int 0x40 - mov edx,0x0909FF ; 梥в-®Ўў®¤ЄЁ - add ebx,29 shl 16 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  y]*65536 + [а §¬Ґа] - int 0x40 - - ;................................................................................................. - ; ЋваЁб®ўЄ  Ї®«§г­Є®ў - ;................................................................................................. - mov edx,0x0 ; 梥в-Ї®«§г­Є®ў - mov ebx,10 shl 16+8 ; Ќ з «м­лҐ Є®®а¤Ё­ вл Ї® x [Є-в  x]*65536 + [а §¬Ґа] - movzx eax,[cred] ; ЎҐаҐ¬ §­ зҐ­ЁҐ жўҐв  + mov edx,0x0 ; цвет-ползунков + mov ebx,10 shl 16+8 ; Начальные координаты по x [к-та x]*65536 + [размер] + movzx eax,[cred] ; берем значение цвета call draw_slider add ebx,29 shl 16 - movzx eax,[cgreen] ; ЎҐаҐ¬ §­ зҐ­ЁҐ жўҐв  + movzx eax,[cgreen] ; берем значение цвета call draw_slider add ebx,29 shl 16 - movzx eax,[cblue] ; ЎҐаҐ¬ §­ зҐ­ЁҐ жўҐв  + movzx eax,[cblue] ; берем значение цвета call draw_slider - ret ; ‚®§ўа й Ґ¬ гЇа ў«Ґ­ЁҐ + ret ; Возвращаем управление ;end_draw_result draw_slider: xor ecx,ecx - mov cl,0x3 ; Ўг¤Ґ¬ ¤Ґ«Ёвм ҐЈ® ­  3 в Є Є Є Ї®«§г­ЄЁ ¤«Ё­­®© 85 ЇЁЄбҐ«Ґ© - div cl ; ¤Ґ«Ё¬ - 楫®Ґ ў al ®бв в®Є ў ah - mov cl,128 ; ­Ё¦­пп в®зЄ  Ї®«§г­Є  - sub cl,al ; cl=cl-al + mov cl,0x3 ; будем делить его на 3 так как ползунки длинной 85 пикселей + div cl ; делим - целое в al остаток в ah + mov cl,128 ; нижняя точка ползунка + sub cl,al ; cl=cl-al shl ecx,16 - add ecx,4 ; § ¤ Ґ¬ ­ з «м­®Ґ Ї®«®¦Ґ­ЁҐ - mov eax,13 ; ”г­ЄжЁп 13 - ­ аЁб®ў вм Їаאַ㣮«м­ЁЄ + add ecx,4 ; задаем начальное положение + mov eax,13 ; Функция 13 - нарисовать прямоугольник int 0x40 - ret ; ‚®§ўа й Ґ¬ гЇа ў«Ґ­ЁҐ + ret ; Возвращаем управление ;end_slider draw_value: ;................................................................................................. - ; ‚лў®¤ зЁб«  Ё§ бва®ЄЁ ў гЄ § ­­®© ®Ў« бвЁ + ; Вывод числа из строки в указанной области ;................................................................................................. - push ebx ; б®е࠭塞 ЇаЁб« ­­лҐ Є®®а¤Ё­ вл - mov ebx,10 ; гбв ­ ў«Ёў Ґ¬ ®б­®ў ­ЁҐ бЁб⥬л бзЁб«Ґ­Ёп - mov edi,buff ; гЄ § вҐ«м ­  бва®Єг ЎгдҐа  - call int2ascii ; Є®­ўҐавЁа㥬 зЁб«® Ё «®¦Ё¬ Є Є бва®Єг ў ЎгдҐа + esi ¤«Ё­  - mov eax,4 ; дг­ЄжЁп 4: ­ ЇЁб вм ⥪бв ў ®Є­Ґ - pop ebx ; ¤®бв Ґ¬ Ё§ б⥪  ЇаЁб« ­­лҐ Є®®а¤Ё­ вл - mov ecx,0x0 ; 梥в ⥪бв  RRGGBB - mov edx,buff ; гЄ § вҐ«м ­  ­ з «® ⥪бв  - int 0x40 - ret ; ‚®§ўа й Ґ¬ гЇа ў«Ґ­ЁҐ + push ebx ; сохраняем присланные координаты + mov ebx,10 ; устанавливаем основание системы счисления + mov edi,buff ; указатель на строку буфера + call int2ascii ; конвертируем число и ложим как строку в буфер + esi длина + mov eax,4 ; функция 4: написать текст в окне + pop ebx ; достаем из стека присланные координаты + mov ecx,0x0 ; цвет текста RRGGBB + mov edx,buff ; указатель на начало текста + int 0x40 + ret ; Возвращаем управление ;end_draw_value hex_digit: ;................................................................................................. - ; ЏаҐ®Ўа §®ў ­ЁҐ ў ASCII (ў­Ґ § ўЁбЁ¬®бвЁ ®в бЁб⥬л бзЁб«Ґ­Ёп) + ; Преобразование в ASCII (вне зависимости от системы счисления) ;................................................................................................. - cmp dl,10 ; ў dl ®¦Ё¤ Ґвбп зЁб«® ®в 0 ¤® 15 - jb .less ; Ґб«Ё dl<10 в® ЇҐаҐе®¤Ё¬ - add dl,'A'-10 ; 10->A 11->B 12->C ... - ret ; ‚®§ўа й Ґ¬ гЇа ў«Ґ­ЁҐ + cmp dl,10 ; в dl ожидается число от 0 до 15 + jb .less ; если dl<10 то переходим + add dl,'A'-10 ; 10->A 11->B 12->C ... + 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] @@ -582,12 +727,12 @@ get_spectr: shl ecx,16 shr ecx,24 mov [cgreen],cl - ret ; Ё ў®§ўа й Ґ¬ гЇа ў«Ґ­ЁҐ + ret ; и возвращаем управление ;end_get_spectr set_spectr: ;................................................................................................. - ; гбв ­ ў«Ёў Ґв Ё§ r,g,b 梥в + ; устанавливает из r,g,b цвет ;................................................................................................. ; get blue movzx eax,[cred] @@ -596,13 +741,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 @@ -625,21 +770,23 @@ str_len: ;end_str_len ;#___________________________________________________________________________________________________ ;****************************************************************************************************| -; Ѓ‹ЋЉ Џ…ђ…Њ…ЌЌ›• € ЉЋЌ‘’ЂЌ’ | +; БЛОК ПЕРЕМЕННЫХ И КОНСТАНТ | ;----------------------------------------------------------------------------------------------------/ - color dd 00000000h ; еа ­Ёв §­ зҐ­ЁҐ ўлЎа ­­®Ј® жўҐв  - mouse_x dd 0 ; еа ­Ёв Ј«®Ў «м­го е Є®®а¤Ё­ вг ¬лиЁ - mouse_y dd 0 ; еа ­Ёв Ј«®Ў «м­го г Є®®а¤Ё­ вг ¬лиЁ - desctop_w dd 0 ; еа ­Ёв иЁаЁ­г нЄа ­  - sc system_colors ; еа ­Ёв бвагЄвгаг бЁб⥬­ле 梥⮢ бЄЁ­  - title db 'Palitra v0.2',0 ; еа ­Ёв Ё¬п Їа®Ја ¬¬л - hex db '#',0 ; ¤«п ўлў®¤  аҐисвЄЁ Є Є ⥪бв  - cname db 'R G B x' ; еа ­Ёв а §ап¤л 梥⮢ (red,green,blue) x-¬ҐвЄ  Є®­ж  - cred db 0 ; еа ­Ё¬ Єа б­л© бЇҐЄав - cgreen db 0 ; еа ­Ё¬ §Ґ«Ґ­л© бЇҐЄва - cblue db 0 ; еа ­Ё¬ бЁ­Ё© бЇҐЄва - buff db '000',0 + color dd 00000000h ; хранит значение выбранного цвета + mouse_x dd 0 ; хранит глобальную х координату мыши + mouse_y dd 0 ; хранит глобальную у координату мыши + desctop_w dd 0 ; хранит ширину экрана + sc system_colors ; хранит структуру системных цветов скина + title db 'Palitra v0.3',0 ; хранит имя программы + hex db '#',0 ; для вывода решётки как текста + cname db 'RGBx' ; хранит разряды цветов (red,green,blue) x-метка конца + cred db 0 ; храним красный спекрт + cgreen db 0 ; храним зеленый спектр + cblue db 0 ; храним синий спектр + buff db '000',0 + bnext db 'NEXT BACKGROUND',0; имя кнопки + pnext dd 0 ; счетчик переключения палитры I_END: