From e5ff0c61766553cbc022b012177d36f2ad547b75 Mon Sep 17 00:00:00 2001 From: eAndrew Date: Thu, 7 Nov 2013 13:41:14 +0000 Subject: [PATCH] Palitra v0.7.6 - Loading/saving colors from/to file. git-svn-id: svn://kolibrios.org@4187 a494cfbc-eb01-0410-851d-a64ba20cac60 --- data/common/settings/Wallpaper.dat | 1 + data/eng/settings/autorun.dat | 32 +- data/et/settings/autorun.dat | 32 +- data/it/settings/autorun.dat | 32 +- data/rus/settings/autorun.dat | 32 +- data/sp/settings/autorun.dat | 32 +- programs/media/palitra/trunk/palitra.asm | 1107 ++++++++++++---------- programs/media/palitra/trunk/readme.txt | 10 +- 8 files changed, 671 insertions(+), 607 deletions(-) create mode 100644 data/common/settings/Wallpaper.dat diff --git a/data/common/settings/Wallpaper.dat b/data/common/settings/Wallpaper.dat new file mode 100644 index 0000000000..0728bb99a2 --- /dev/null +++ b/data/common/settings/Wallpaper.dat @@ -0,0 +1 @@ +▀╬}B< \ No newline at end of file diff --git a/data/eng/settings/autorun.dat b/data/eng/settings/autorun.dat index 6ae7aa528a..7ea2ec0b50 100644 --- a/data/eng/settings/autorun.dat +++ b/data/eng/settings/autorun.dat @@ -1,21 +1,21 @@ # Syntaxis is: # Use "parameter value" for parameters with spaces. Use "" if no parameter is required. -# Delay time means how much the system should wait, before running the next line. It is measured in 1/100 seconds. +# Delay time means how much the system should wait, before running the next line. It is measured in 1/100 seconds. # If delay is negative, wait for termination of the spawned process. Otherwise, simply wait # -#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen -#/SYS/COMMOUSE "" 1 # COM mice detector -#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board -#/SYS/refrscrn "" 1 # Refresh screen -/SYS/NETWORK/NETCFG A 1 # -/SYS/NETWORK/ZEROCONF "" 1 # Network configuration -/SYS/MEDIA/PALITRA "H 007DCEDF 003C427F" 1 #SET BG -/SYS/@PANEL "" 1 # Start panel -/SYS/@DOCKY "" 1 # Start docky -/SYS/SETUP BOOT 1 # Load device settings -/SYS/@ICON "" 1 # Multithread icon -#/SYS/@RB "" 1 # Desktop right-click menu -/SYS/@SS ASSM 1 # Screensaver -/SYS/TMPDISK A1 -1 # Add virtual RAM disk /tmp1/1 -/SYS/SEARCHAP "" -1 # Search and mount additional system directory +#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen +#/SYS/COMMOUSE "" 1 # COM mice detector +#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board +#/SYS/refrscrn "" 1 # Refresh screen +/SYS/NETWORK/NETCFG A 1 # +/SYS/NETWORK/ZEROCONF "" 1 # Network configuration +/SYS/MEDIA/PALITRA "H" 1 # SET BG +/SYS/@PANEL "" 1 # Start panel +/SYS/@DOCKY "" 1 # Start docky +/SYS/SETUP BOOT 1 # Load device settings +/SYS/@ICON "" 1 # Multithread icon +#/SYS/@RB "" 1 # Desktop right-click menu +/SYS/@SS ASSM 1 # Screensaver +/SYS/TMPDISK A1 -1 # Add virtual RAM disk /tmp1/1 +/SYS/SEARCHAP "" -1 # Search and mount additional system directory ### Hello, ASM World! ### diff --git a/data/et/settings/autorun.dat b/data/et/settings/autorun.dat index 6ae7aa528a..7ea2ec0b50 100644 --- a/data/et/settings/autorun.dat +++ b/data/et/settings/autorun.dat @@ -1,21 +1,21 @@ # Syntaxis is: # Use "parameter value" for parameters with spaces. Use "" if no parameter is required. -# Delay time means how much the system should wait, before running the next line. It is measured in 1/100 seconds. +# Delay time means how much the system should wait, before running the next line. It is measured in 1/100 seconds. # If delay is negative, wait for termination of the spawned process. Otherwise, simply wait # -#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen -#/SYS/COMMOUSE "" 1 # COM mice detector -#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board -#/SYS/refrscrn "" 1 # Refresh screen -/SYS/NETWORK/NETCFG A 1 # -/SYS/NETWORK/ZEROCONF "" 1 # Network configuration -/SYS/MEDIA/PALITRA "H 007DCEDF 003C427F" 1 #SET BG -/SYS/@PANEL "" 1 # Start panel -/SYS/@DOCKY "" 1 # Start docky -/SYS/SETUP BOOT 1 # Load device settings -/SYS/@ICON "" 1 # Multithread icon -#/SYS/@RB "" 1 # Desktop right-click menu -/SYS/@SS ASSM 1 # Screensaver -/SYS/TMPDISK A1 -1 # Add virtual RAM disk /tmp1/1 -/SYS/SEARCHAP "" -1 # Search and mount additional system directory +#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen +#/SYS/COMMOUSE "" 1 # COM mice detector +#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board +#/SYS/refrscrn "" 1 # Refresh screen +/SYS/NETWORK/NETCFG A 1 # +/SYS/NETWORK/ZEROCONF "" 1 # Network configuration +/SYS/MEDIA/PALITRA "H" 1 # SET BG +/SYS/@PANEL "" 1 # Start panel +/SYS/@DOCKY "" 1 # Start docky +/SYS/SETUP BOOT 1 # Load device settings +/SYS/@ICON "" 1 # Multithread icon +#/SYS/@RB "" 1 # Desktop right-click menu +/SYS/@SS ASSM 1 # Screensaver +/SYS/TMPDISK A1 -1 # Add virtual RAM disk /tmp1/1 +/SYS/SEARCHAP "" -1 # Search and mount additional system directory ### Hello, ASM World! ### diff --git a/data/it/settings/autorun.dat b/data/it/settings/autorun.dat index 6ae7aa528a..7ea2ec0b50 100644 --- a/data/it/settings/autorun.dat +++ b/data/it/settings/autorun.dat @@ -1,21 +1,21 @@ # Syntaxis is: # Use "parameter value" for parameters with spaces. Use "" if no parameter is required. -# Delay time means how much the system should wait, before running the next line. It is measured in 1/100 seconds. +# Delay time means how much the system should wait, before running the next line. It is measured in 1/100 seconds. # If delay is negative, wait for termination of the spawned process. Otherwise, simply wait # -#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen -#/SYS/COMMOUSE "" 1 # COM mice detector -#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board -#/SYS/refrscrn "" 1 # Refresh screen -/SYS/NETWORK/NETCFG A 1 # -/SYS/NETWORK/ZEROCONF "" 1 # Network configuration -/SYS/MEDIA/PALITRA "H 007DCEDF 003C427F" 1 #SET BG -/SYS/@PANEL "" 1 # Start panel -/SYS/@DOCKY "" 1 # Start docky -/SYS/SETUP BOOT 1 # Load device settings -/SYS/@ICON "" 1 # Multithread icon -#/SYS/@RB "" 1 # Desktop right-click menu -/SYS/@SS ASSM 1 # Screensaver -/SYS/TMPDISK A1 -1 # Add virtual RAM disk /tmp1/1 -/SYS/SEARCHAP "" -1 # Search and mount additional system directory +#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen +#/SYS/COMMOUSE "" 1 # COM mice detector +#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board +#/SYS/refrscrn "" 1 # Refresh screen +/SYS/NETWORK/NETCFG A 1 # +/SYS/NETWORK/ZEROCONF "" 1 # Network configuration +/SYS/MEDIA/PALITRA "H" 1 # SET BG +/SYS/@PANEL "" 1 # Start panel +/SYS/@DOCKY "" 1 # Start docky +/SYS/SETUP BOOT 1 # Load device settings +/SYS/@ICON "" 1 # Multithread icon +#/SYS/@RB "" 1 # Desktop right-click menu +/SYS/@SS ASSM 1 # Screensaver +/SYS/TMPDISK A1 -1 # Add virtual RAM disk /tmp1/1 +/SYS/SEARCHAP "" -1 # Search and mount additional system directory ### Hello, ASM World! ### diff --git a/data/rus/settings/autorun.dat b/data/rus/settings/autorun.dat index 6ae7aa528a..7ea2ec0b50 100644 --- a/data/rus/settings/autorun.dat +++ b/data/rus/settings/autorun.dat @@ -1,21 +1,21 @@ # Syntaxis is: # Use "parameter value" for parameters with spaces. Use "" if no parameter is required. -# Delay time means how much the system should wait, before running the next line. It is measured in 1/100 seconds. +# Delay time means how much the system should wait, before running the next line. It is measured in 1/100 seconds. # If delay is negative, wait for termination of the spawned process. Otherwise, simply wait # -#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen -#/SYS/COMMOUSE "" 1 # COM mice detector -#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board -#/SYS/refrscrn "" 1 # Refresh screen -/SYS/NETWORK/NETCFG A 1 # -/SYS/NETWORK/ZEROCONF "" 1 # Network configuration -/SYS/MEDIA/PALITRA "H 007DCEDF 003C427F" 1 #SET BG -/SYS/@PANEL "" 1 # Start panel -/SYS/@DOCKY "" 1 # Start docky -/SYS/SETUP BOOT 1 # Load device settings -/SYS/@ICON "" 1 # Multithread icon -#/SYS/@RB "" 1 # Desktop right-click menu -/SYS/@SS ASSM 1 # Screensaver -/SYS/TMPDISK A1 -1 # Add virtual RAM disk /tmp1/1 -/SYS/SEARCHAP "" -1 # Search and mount additional system directory +#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen +#/SYS/COMMOUSE "" 1 # COM mice detector +#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board +#/SYS/refrscrn "" 1 # Refresh screen +/SYS/NETWORK/NETCFG A 1 # +/SYS/NETWORK/ZEROCONF "" 1 # Network configuration +/SYS/MEDIA/PALITRA "H" 1 # SET BG +/SYS/@PANEL "" 1 # Start panel +/SYS/@DOCKY "" 1 # Start docky +/SYS/SETUP BOOT 1 # Load device settings +/SYS/@ICON "" 1 # Multithread icon +#/SYS/@RB "" 1 # Desktop right-click menu +/SYS/@SS ASSM 1 # Screensaver +/SYS/TMPDISK A1 -1 # Add virtual RAM disk /tmp1/1 +/SYS/SEARCHAP "" -1 # Search and mount additional system directory ### Hello, ASM World! ### diff --git a/data/sp/settings/autorun.dat b/data/sp/settings/autorun.dat index 6ae7aa528a..7ea2ec0b50 100644 --- a/data/sp/settings/autorun.dat +++ b/data/sp/settings/autorun.dat @@ -1,21 +1,21 @@ # Syntaxis is: # Use "parameter value" for parameters with spaces. Use "" if no parameter is required. -# Delay time means how much the system should wait, before running the next line. It is measured in 1/100 seconds. +# Delay time means how much the system should wait, before running the next line. It is measured in 1/100 seconds. # If delay is negative, wait for termination of the spawned process. Otherwise, simply wait # -#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen -#/SYS/COMMOUSE "" 1 # COM mice detector -#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board -#/SYS/refrscrn "" 1 # Refresh screen -/SYS/NETWORK/NETCFG A 1 # -/SYS/NETWORK/ZEROCONF "" 1 # Network configuration -/SYS/MEDIA/PALITRA "H 007DCEDF 003C427F" 1 #SET BG -/SYS/@PANEL "" 1 # Start panel -/SYS/@DOCKY "" 1 # Start docky -/SYS/SETUP BOOT 1 # Load device settings -/SYS/@ICON "" 1 # Multithread icon -#/SYS/@RB "" 1 # Desktop right-click menu -/SYS/@SS ASSM 1 # Screensaver -/SYS/TMPDISK A1 -1 # Add virtual RAM disk /tmp1/1 -/SYS/SEARCHAP "" -1 # Search and mount additional system directory +#/SYS/CROPFLAT "XS800 YS480" 1 # set limits of screen +#/SYS/COMMOUSE "" 1 # COM mice detector +#/SYS/DEVELOP/BOARD "" 1 # Load DEBUG board +#/SYS/refrscrn "" 1 # Refresh screen +/SYS/NETWORK/NETCFG A 1 # +/SYS/NETWORK/ZEROCONF "" 1 # Network configuration +/SYS/MEDIA/PALITRA "H" 1 # SET BG +/SYS/@PANEL "" 1 # Start panel +/SYS/@DOCKY "" 1 # Start docky +/SYS/SETUP BOOT 1 # Load device settings +/SYS/@ICON "" 1 # Multithread icon +#/SYS/@RB "" 1 # Desktop right-click menu +/SYS/@SS ASSM 1 # Screensaver +/SYS/TMPDISK A1 -1 # Add virtual RAM disk /tmp1/1 +/SYS/SEARCHAP "" -1 # Search and mount additional system directory ### Hello, ASM World! ### diff --git a/programs/media/palitra/trunk/palitra.asm b/programs/media/palitra/trunk/palitra.asm index dec37c7547..888bf2d813 100644 --- a/programs/media/palitra/trunk/palitra.asm +++ b/programs/media/palitra/trunk/palitra.asm @@ -6,7 +6,7 @@ ;..................................................................................................... ;; compiler: FASM 1.69.31 | ;; version: 0.3.0 | -;; last update: 08/11/2012 | +;; last update: 07/11/2013 | ;; e-mail: dr.steshin@gmail.com | ;..................................................................................................... ;; History: | @@ -34,6 +34,8 @@ ;; 0.7.0 - Добавлена пипетка - выбор на среднюю кнопку мыши | ;; 0.7.5 - Нажатие правой клавишей мыши на ячейку с цветом устанавливает не основой, а дополн. цвет | ;; - Уменьшено мерцание при работе пипетки | +;; 0.7.6 - Переработан режим H (hidden): теперь цвета загружаются из wallpaper.dat (eAndrew) | +;; - При установки фона кнопкой, цвет фона сохраняется в wallpaper.dat (eAndrew) | ;..................................................................................................... ;; All rights reserved. | ;; | @@ -69,48 +71,48 @@ dd 0x01 dd START dd I_END - dd I_END+4096 - dd I_END+4096 + dd I_RDATA+4096 + dd I_RDATA+4096 dd params dd 0x0 - include '..\..\..\macros.inc' + include '../../../macros.inc' - WIN_W equ 295 ; ширина окна - WIN_H equ 195 ; высота окна - WIN_X equ 250 ; координата х окна - WIN_Y equ 190 ; координата у окна + WIN_W equ 295 ; ширина окна + WIN_H equ 195 ; высота окна + WIN_X equ 250 ; координата х окна + WIN_Y equ 190 ; координата у окна panel: file "panel.raw" START: - mcall 68,11 ; инициализация кучи - mcall 40,0x27 ; устанавливаем маску событий - include 'params_init.inc' ; обработка параметров командной строки + mcall 68,11 ; инициализация кучи + mcall 40,0x27 ; устанавливаем маску событий + include 'params_init.inc' ; обработка параметров командной строки ;#___________________________________________________________________________________________________ ;****************************************************************************************************| ; ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ - ОБРАБОТКА СОБЫТИЙ | ;----------------------------------------------------------------------------------------------------/ red: - call draw_main ; вызываем перерисовку окна приложения + 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 - cmp eax,6 ; событие от мыши вне окна - je mouse ; если да - на button - jmp still ; если другое событие - в начало цикла + mcall 10 ; функция 10 - ждать события + cmp eax,1 ; перерисовать окно ? + je red ; если да - на метку red + cmp eax,2 ; нажата клавиша ? + je key ; если да - на key + cmp eax,3 ; нажата кнопка ? + je button ; если да - на button + cmp eax,6 ; событие от мыши вне окна + je mouse ; если да - на button + jmp still ; если другое событие - в начало цикла ;end_still -key: ; нажата клавиша на клавиатуре - mcall 2 ; функция 2 - считать код символа (в ah) (тут в принципе не нужна) - jmp still ; вернуться к началу цикла +key: ; нажата клавиша на клавиатуре + mcall 2 ; функция 2 - считать код символа (в ah) (тут в принципе не нужна) + jmp still ; вернуться к началу цикла ;end_key mouse: @@ -140,82 +142,82 @@ mouse: ;end_mouse button: - mcall 17 ; 17 - получить идентификатор нажатой кнопки - cmp ah, 1 ; если нажата кнопка с номером 1, - jz bexit ; выходим + 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 + 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 ; Уходим на ожидание другого события + call draw_palitra ; РИСУЕМ ПАЛИТРУ + jmp still ; Уходим на ожидание другого события next_bg: - cmp ah, 14 ; Кнопка BACKGROUND - jne circle_bg ; если не нажата то выходим - call set_background ; иначе устанавливаем фон - jmp still ; и на ожидание события + 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 ; и на ожидание события + cmp ah, 15 ; Кнопка Круговая палитра + jne next_end ; если не нажата то выходим + mov [renmode],2 ; включаем отрисовку круговой палитры + call draw_palitra ; РИСУЕМ ПАЛИТРУ + jmp still ; и на ожидание события next_end: - cmp ah,13 ; COLOR SWAP + cmp ah,13 ; COLOR SWAP jne color_swap_end push [color2] push [color] pop [color2] pop [color] call draw_result - jmp still ; И уходим на ожидание другого события + 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 ; восстанавливаем еах : + 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 ; Уходим на ожидание другого события + cmp ah, 8 ; ID=8 : + 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 ;#___________________________________________________________________________________________________ @@ -223,20 +225,20 @@ button: ; ГЛАВНЫЙ МОДУЛЬ ОТРИСОВКИ ОКНА И ЭЛЕМЕНТОВ ПРИЛОЖЕНИЯ | ;----------------------------------------------------------------------------------------------------/ draw_main: - 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 ; Запоминаем высоту скина mov edi,[runmode] cmp edi,2 @@ -249,53 +251,53 @@ draw_main: mov edi,hidden jmp set_title no_dialogmode: - mov edi,title ; Заголовок окна + mov edi,title ; Заголовок окна set_title: - 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 ; Или окно со скином фиксированных размеров - - 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 ; Или окно со скином фиксированных размеров + + int 0x40 ; Прерывание - call draw_palitra ; РИСУЕМ ПАЛИТРУ - call draw_result ; РИСУЕМ РЕЗУЛЬТАТ + 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 + 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 edx,0x60000008 ; ID = 8 - 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 ; Добавляем - inc edx ; ID = 10 - int 0x40 ; Рисуем невидимую кнопку под слайдером blue - add ebx,23 shl 16 ; Добавляем - inc edx ; ID = 11 - int 0x40 ; Рисуем невидимую кнопку под слайдером alpha + 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 ; Добавляем + inc edx ; ID = 9 + int 0x40 ; Рисуем невидимую кнопку под слайдером green + add ebx,23 shl 16 ; Добавляем + inc edx ; ID = 10 + int 0x40 ; Рисуем невидимую кнопку под слайдером blue + add ebx,23 shl 16 ; Добавляем + inc edx ; ID = 11 + 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 edx,0x6000000D ; ID = 13 + 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 call draw_bottom_panel call draw_left_panel - mov eax,12 ; функция 12: означает, что будет рисоваться окно - mov ebx,2 ; 2 - конец рисования - int 0x40 ; Прерывание + mov eax,12 ; функция 12: означает, что будет рисоваться окно + mov ebx,2 ; 2 - конец рисования + int 0x40 ; Прерывание ret ;#___________________________________________________________________________________________________ @@ -305,23 +307,23 @@ draw_main: ;------------------------------------------------------------------------------------------------+ - draw_left_panel: ; Отрисовка боковой панели + 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,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 ; circle diagram - add ecx,19 shl 16 ; move rect - mov edx,0x6000000F ; ID = 15 - int 0x40 ; call + add ecx,19 shl 16 ; move rect + mov edx,0x6000000F ; ID = 15 + int 0x40 ; call - mov eax,7 ; 7 - номер функции - mov ebx,panel ; указатель на изображение в формате BBGGRRBBGGRR... - mov ecx, 16 shl 16 + 149 ; [размер по оси x]*65536 + [размер по оси y] - mov edx,266 shl 16 + 9 ; [координата по оси x]*65536 + [координата по оси y] + mov eax,7 ; 7 - номер функции + mov ebx,panel ; указатель на изображение в формате BBGGRRBBGGRR... + mov ecx, 16 shl 16 + 149 ; [размер по оси x]*65536 + [размер по оси y] + mov edx,266 shl 16 + 9 ; [координата по оси x]*65536 + [координата по оси y] int 0x40 ;mov eax,13 ; draw rect @@ -355,85 +357,85 @@ draw_main: ;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 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 + ret ; return ;................................................................................................. ;------------------------------------------------------------------------------------------------+ - draw_bottom_panel: ; Отрисовка нижней панели + 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 + 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 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 set_background: ;................................................................................................. ; Устанавливает фон рабочего стола ;................................................................................................. - mov eax,15 ; Функция 15 - работа с фоновой графикой - mov ebx,4 ; Подфункция 4 - установить режим отрисовки фона. - mov ecx,2 ; Режим отрисовки - замостить (1) - int 0x40 ; Вызываем + 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,15 ; Функция 15 - работа с фоновой графикой + mov ebx,1 ; Подфункция 1 - установить размер фонового изображения. + mov ecx,2 ; Ширина изображения + mov edx,2 ; Высота изображения + int 0x40 ; Вызываем mov eax,[color] mov [cm+0],al @@ -455,16 +457,39 @@ set_background: 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,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 ; Вызываем + mov eax,15 ; Функция 15 - работа с фоновой графикой + mov ebx,3 ; Подфункция 3 - перерисовать фон. + int 0x40 ; Вызываем + + mov eax, [color] + mov [fi.file+0], al + shr eax, 8 + mov [fi.file+1], al + shr eax, 8 + mov [fi.file+2], al + + mov eax, [color2] + mov [fi.file+3], al + shr eax, 8 + mov [fi.file+4], al + shr eax, 8 + mov [fi.file+5], al + + mov [fi.p00], dword 2 + mov [fi.p04], dword 0 + mov [fi.p08], dword 0 + mov [fi.p12], dword 6 + mov [fi.p16], dword fi.file + mov [fi.p20], dword 0 + mov [fi.p21], dword dat_file + mcall 70, fi ret ;end_set_background @@ -473,46 +498,46 @@ 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 mov [desctop_h],edx 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 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: ; Иначе запоминаем новый цвет + 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: ; Иначе запоминаем новый цвет cmp [mouse_f],1 jne was_right mov [color],eax @@ -522,24 +547,24 @@ mouse_get: cmp [mouse_f],2 jne mouse_exit mov [color2],eax - call draw_result ; Выводим результат + call draw_result ; Выводим результат mouse_exit: - ret ; Возвращаем управление + ret ; Возвращаем управление ;end_mouse_get---------------------------------------------------------------------------------------- draw_palitra: - 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] ; цвет + 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 + je cyrcle_draw ;cmp [renmode],1 ;je picker_draw cmp [renmode],0 - je sheme_draw + je sheme_draw ret ;................................................................................................. @@ -571,39 +596,39 @@ draw_palitra: ;mov ebx,109*65536+150 ;mov ecx, 10*65536+150 ;mcall - call mouse_local ; получаем координаты мыши относительно окна - mov ecx, [mouse_x] ; заносим в регистр - mov edx, [mouse_y] ; заносим в регистр + call mouse_local ; получаем координаты мыши относительно окна + mov ecx, [mouse_x] ; заносим в регистр + mov edx, [mouse_y] ; заносим в регистр cmp ecx, WIN_W-10 - jg cyrcle_draw_2 + jg cyrcle_draw_2 cmp edx, WIN_H jle end_cyrcle_draw cyrcle_draw_2: - mcall 5,10 + mcall 5,10 call desktop_get call mouse_global mov ebx,112*65536+11 - mov esi,0 ; counter=8 + mov esi,0 ; counter=8 circle_loop: mov ecx, 10*65536+11 mov edi,0 circle_loop2: - mov eax,13 - call circle_pixel_read - mcall - add ecx,11 shl 16 - inc edi - cmp edi,13 - jne circle_loop2 + mov eax,13 + call circle_pixel_read + mcall + add ecx,11 shl 16 + inc edi + cmp edi,13 + jne circle_loop2 add ebx,11 shl 16 inc esi cmp esi,13 jne circle_loop - - + + mov eax,13 mov edx,0x0 mov ebx,177*65536+13 @@ -641,12 +666,12 @@ draw_palitra: inc ecx add ecx, esi cmp ecx, 6 - jl _cpr_exit + jl _cpr_exit sub ecx, 6 inc edx add edx, edi cmp edx, 6 - jl _cpr_exit + jl _cpr_exit sub edx, 6 mov ebx, edx @@ -674,66 +699,66 @@ draw_palitra: ; Отрисовка фона под кнопки ;................................................................................................. sheme_draw: - 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,110 shl 16+73 ; Начальные координаты по x [к-та x]*65536 + [размер] - mov edi,2 ; Счетчик количества подложек + 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 ; Если не ноль то в начало цикла + 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 + [размер] + 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 ; Сохраняем значение счетчика линий в стек 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 + [размер] - 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 ; Если не ноль то в начало цикла + 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 ; Если не ноль то в начало цикла + pop edi ; Иначе восстанавливаем счетчик линий + dec edi ; Уменьшаем его + cmp edi,0 ; Сравниваем с нулем + jnz for_stolbik ; Если не ноль то в начало цикла call sub_blue ;;pop esi ; Иначе восстанавливаем счетчик линий - dec esi ; Уменьшаем его - cmp esi,0 ; Сравниваем с нулем - jnz for_abz ; Если не ноль то в начало цикла - ret ; Возвращаем управление + dec esi ; Уменьшаем его + cmp esi,0 ; Сравниваем с нулем + jnz for_abz ; Если не ноль то в начало цикла + ret ; Возвращаем управление ;end_draw_palitra------------------------------------------------------------------------------------- @@ -748,34 +773,34 @@ sub_red: jne sub_red_1 sub edx,0x40 jmp sub_red_e - sub_red_1: ; random + sub_red_1: ; random cmp al,1 jne sub_red_2 sub edx,0x20 jmp sub_red_e - sub_red_2: ; gree + sub_red_2: ; gree cmp al,2 jne sub_red_3 sub edx,0x010101 jmp sub_red_e - sub_red_3: ; red + sub_red_3: ; red cmp al,3 jne sub_red_4 sub edx,0x0101 jmp sub_red_e - sub_red_4: ; green + sub_red_4: ; green cmp al,4 jne sub_red_5 sub edx,0x010001 jmp sub_red_e - sub_red_5: ; blue + sub_red_5: ; blue cmp al,5 jne sub_red_e sub edx,0x010100 jmp sub_red_e sub_red_e: pop eax - ret ; Возвращаем управление + ret ; Возвращаем управление ;end_sub_red------------------------------------------------------------------------------------------ sub_green: @@ -796,7 +821,7 @@ sub_green: ;jmp sub_green_e sub_green_e: pop eax - ret ; Возвращаем управление + ret ; Возвращаем управление ;end_sub_green---------------------------------------------------------------------------------------- @@ -818,175 +843,175 @@ sub_blue: ;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 ;................................................................................................. - 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 esi,0x0 ; 0xX0RRGGBB - mov ebx,256+8 shl 16 ; параметры преобразования числа в текст (HEX) - mov edx,45 shl 16+20 ; [координата по оси 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,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 ; длина текста в байтах - int 0x40 + 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 значений ;................................................................................................. 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 ;................................................................................................. - 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_s: ; цикл + int 0x40 ; Прерывание + add ebx,23 shl 16 ; Добавляем + add edx,1 ; Добавляем + cmp [edx],byte 'x' ; Сравнение с байтом х + jne newline_s ; Если не нуль или не равно ;................................................................................................. ; Отрисовка слайдеров ;................................................................................................. - 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 ; нижняя точка ползунка - sub cl,al ; cl=cl-al + 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 @@ -994,13 +1019,13 @@ 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 @@ -1009,71 +1034,95 @@ 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 _read_params: + mov [fi.p00], dword 0 + mov [fi.p04], dword 0 + mov [fi.p08], dword 0 + mov [fi.p12], dword 6 + mov [fi.p16], dword fi.file + mov [fi.p20], dword 0 + mov [fi.p21], dword dat_file + mcall 70, fi - mov al,[params+2] - mov [params_c+0],al + xor eax, eax + mov al, [fi.file+2] + shl eax, 8 + mov al, [fi.file+1] + shl eax, 8 + mov al, [fi.file+0] + mov [color], eax - mov al,[params+3] - mov [params_c+1],al + xor eax, eax + mov al, [fi.file+5] + shl eax, 8 + mov al, [fi.file+4] + shl eax, 8 + mov al, [fi.file+3] + mov [color2], eax - mov al,[params+4] - mov [params_c+2],al - - mov al,[params+5] - mov [params_c+3],al - - mov al,[params+6] - mov [params_c+4],al - - mov al,[params+7] - mov [params_c+5],al - - mov al,[params+8] - mov [params_c+6],al - - mov al,[params+9] - mov [params_c+7],al - - mov esi,params_c - mov ecx,16 - call ascii2int - mov [color],eax - - mov al,[params+11] - mov [params_c+0],al - - mov al,[params+12] - mov [params_c+1],al - - mov al,[params+13] - mov [params_c+2],al - - mov al,[params+14] - mov [params_c+3],al - - mov al,[params+15] - mov [params_c+4],al - - mov al,[params+16] - mov [params_c+5],al - - mov al,[params+17] - mov [params_c+6],al - - mov al,[params+18] - mov [params_c+7],al - - mov esi,params_c - mov ecx,16 - call ascii2int - mov [color2],eax + ; mov al,[params+2] + ; mov [params_c+0],al + ; + ; mov al,[params+3] + ; mov [params_c+1],al + ; + ; mov al,[params+4] + ; mov [params_c+2],al + ; + ; mov al,[params+5] + ; mov [params_c+3],al + ; + ; mov al,[params+6] + ; mov [params_c+4],al + ; + ; mov al,[params+7] + ; mov [params_c+5],al + ; + ; mov al,[params+8] + ; mov [params_c+6],al + ; + ; mov al,[params+9] + ; mov [params_c+7],al + ; + ; mov esi,params_c + ; mov ecx,16 + ; call ascii2int + ; mov [color],eax + ; + ; mov al,[params+11] + ; mov [params_c+0],al + ; + ; mov al,[params+12] + ; mov [params_c+1],al + ; + ; mov al,[params+13] + ; mov [params_c+2],al + ; + ; mov al,[params+14] + ; mov [params_c+3],al + ; + ; mov al,[params+15] + ; mov [params_c+4],al + ; + ; mov al,[params+16] + ; mov [params_c+5],al + ; + ; mov al,[params+17] + ; mov [params_c+6],al + ; + ; mov al,[params+18] + ; mov [params_c+7],al + ; + ; mov esi,params_c + ; mov ecx,16 + ; call ascii2int + ; mov [color2],eax ret @@ -1081,13 +1130,13 @@ hex_digit: ;................................................................................................. ; Преобразование в 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: @@ -1099,35 +1148,35 @@ int2ascii: ; 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 ; иначе дописыываем нулевой байт + 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 ; указатель на начало текста + mov edi,buff ; указатель на начало текста call str_len mov esi,eax - ret ; и возвращаем управление + ret ; и возвращаем управление ;end_int2ascii char2byte: sub al,'0' cmp al,10 - jb done + jb done add al,'0' and al,0x5f sub al,'A'-10 @@ -1180,7 +1229,7 @@ get_spectr: mov [cred],cl shr ecx,8 mov [calpha],cl - ret ; и возвращаем управление + ret ; и возвращаем управление ;end_get_spectr set_spectr: @@ -1195,8 +1244,8 @@ set_spectr: shl eax,8 mov al,[cblue] mov [color],eax - call draw_result ; Выводим результат - ret ; и возвращаем управление + call draw_result ; Выводим результат + ret ; и возвращаем управление ;end_get_spectr str_len: @@ -1230,34 +1279,52 @@ str_len: ; БЛОК ПЕРЕМЕННЫХ И КОНСТАНТ | ;----------------------------------------------------------------------------------------------------/ circle: - 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 ; хранит ширину экрана - desctop_h dd 0 ; хранит высоту экрана - sc system_colors ; хранит структуру системных цветов скина - title db 'Palitra v0.75',0 ; хранит имя программы - hidden db 'Hidden',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 - bground db 'BACKGROUND',0 ; имя кнопки - 14 - pnext dd 0 ; счетчик переключения палитры - renmode dd 0 ; режим отрисовки (1-цветовая схема,2-пипетка,3-круговая) - runmode dd 1 ; режим запуска (1-normal, 2-hidden, 3-colordialog) - params db 20 dup(0) ; приём параметров - params_c db 9 dup(0) ; приёмник для цвета - - + dat_file db '/sys/settings/wallpaper.dat', 0 + 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 ; хранит ширину экрана + desctop_h dd 0 ; хранит высоту экрана + sc system_colors ; хранит структуру системных цветов скина + title db 'Palitra v0.75',0 ; хранит имя программы + hidden db 'Hidden',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 + bground db 'BACKGROUND',0 ; имя кнопки - 14 + pnext dd 0 ; счетчик переключения палитры + renmode dd 0 ; режим отрисовки (1-цветовая схема,2-пипетка,3-круговая) + runmode dd 1 ; режим запуска (1-normal, 2-hidden, 3-colordialog) + params db 20 dup(0) ; приём параметров + ; params_c db 9 dup(0) ; приёмник для цвета I_END: +fi: + .p00: + rd 1 + .p04: + rd 1 + .p08: + rd 1 + .p12: + rd 1 + .p16: + rd 1 + .p20: + rb 1 + .p21: + rd 1 + .file: + rb 32 + +I_RDATA: \ No newline at end of file diff --git a/programs/media/palitra/trunk/readme.txt b/programs/media/palitra/trunk/readme.txt index de7a406080..c692dd9828 100644 --- a/programs/media/palitra/trunk/readme.txt +++ b/programs/media/palitra/trunk/readme.txt @@ -21,11 +21,7 @@ $ $ запуск с параметром H ------------------------------------------------------------------------------+ -Программа запускается в hidden mode без отрисовки окна приложения и в качестве -передаваемых параметров требует передачу двух цветов в виде HEX строки. После -чего, полученные цвета будут использованы для заливки фона рабочего стола гра- -диентом из указанных цветов. Например возможны варианты запуска: - - /rd/1/media/palitra H 00FF00FF 00FF0000 - /rd/1/media/palitra H 00F724A3 00736698 +Программа запускается в hidden mode без отрисовки окна приложения и загружает +два цвета из /settings/wallpaper.dat. После чего, полученные цвета будут +использованы для заливки фона рабочего стола градиентом из указанных цветов. ..............................................................................+ \ No newline at end of file