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