Rev 4187 | Rev 7421 | 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 | ;----------------------------------------------------------------------------------------------------| |
||
3091 | leency | 5 | ;; Charset:DOS-866 Font:Courier New Size:9pt | |
3088 | leency | 6 | ;..................................................................................................... |
3004 | leency | 7 | ;; compiler: FASM 1.69.31 | |
3026 | leency | 8 | ;; version: 0.3.0 | |
4962 | eAndrew | 9 | ;; last update: 08/11/2012 | |
3004 | leency | 10 | ;; e-mail: dr.steshin@gmail.com | |
11 | ;..................................................................................................... |
||
12 | ;; History: | |
||
3091 | leency | 13 | ;; 0.1.0 - Первая версия программы. | |
14 | ;; 0.2.0 - Исправлено попадание в сетку, берется ближайший по диагонали пиксель. | |
||
15 | ;; - Добавлены ползунки, для регулирования rgb составляющих цвета и вывод этих составляющих. | |
||
16 | ;; - Убран вывод цвета в бинарном виде (пока за не надобностью и не актуальностью). | |
||
17 | ;; - Мелкая косметика. | |
||
18 | ;; 0.3.0 - Добавлено переключение видов цветовых схем (кнопка NEXT) | |
||
19 | ;; - Улучшены ползунки, производится обработка нажатия рядом с ползунком. | |
||
20 | ;; - Число сеток в цветовой схеме уменьшено с 6 до 4 (кратность 256, иначе дублирование цвета).| |
||
21 | ;; - Мелкая косметика. | |
||
22 | ;; 0.4.0 - Добавлено переключение между двумя цветами | |
||
23 | ;; - Добавлен ползунок регулирования прозрачности (без визуализации). | |
||
24 | ;; - Добавлено выравнивание значений rgba по центру, в зависимости от длинны. | |
||
25 | ;; - Косметические правки. | |
||
26 | ;; - Небольшая оптимизация. | |
||
27 | ;; 0.5.0 - Добавлена кнопка смены фона рабочего стола (от Leency). | |
||
28 | ;; - Добавлено изменение фона рабочего стола градиентной заливкой. | |
||
29 | ;; - Косметические правки. | |
||
30 | ;; - Небольшая деоптимизация. | |
||
3099 | Akyltist | 31 | ;; 0.6.0 - Добавлена возможность запуска с параметрами | |
32 | ;; - Добавлен режим H (hidden) производит замену фона рабочего стола градиентной заливкой. | |
||
33 | ;; - Большая деоптимизация. | |
||
3453 | Akyltist | 34 | ;; 0.7.0 - Добавлена пипетка - выбор на среднюю кнопку мыши | |
3904 | leency | 35 | ;; 0.7.5 - Нажатие правой клавишей мыши на ячейку с цветом устанавливает не основой, а дополн. цвет | |
36 | ;; - Уменьшено мерцание при работе пипетки | |
||
4962 | eAndrew | 37 | ;; 0.7.6 - Добавлен режим B, который производит замену фона рабочего стола шумной заливкой (e-andrew)| |
3004 | leency | 38 | ;..................................................................................................... |
39 | ;; All rights reserved. | |
||
40 | ;; | |
||
41 | ;; Redistribution and use in source and binary forms, with or without modification, are permitted | |
||
42 | ;; provided that the following conditions are met: | |
||
43 | ;; * Redistributions of source code must retain the above copyright notice, this list of | |
||
44 | ;; conditions and the following disclaimer. | |
||
45 | ;; * Redistributions in binary form must reproduce the above copyright notice, this list of | |
||
46 | ;; conditions and the following disclaimer in the documentation and/or other materials | |
||
47 | ;; provided with the distribution. | |
||
48 | ;; * Neither the name of the |
||
49 | ;; endorse or promote products derived from this software without specific prior written | |
||
50 | ;; permission. | |
||
51 | ;; | |
||
52 | ;; THIS SOFTWARE IS PROVIDED BY Sergei Steshin ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, | |
||
53 | ;; INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | |
||
54 | ;; PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL |
||
55 | ;; INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |
||
56 | ;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
||
57 | ;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
||
58 | ;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
||
59 | ;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
||
60 | ;....................................................................................................| |
||
61 | |||
62 | |||
63 | ;#___________________________________________________________________________________________________ |
||
64 | ;****************************************************************************************************| |
||
3091 | leency | 65 | ; ЗАГОЛОВОК ИСПОЛНЯЕМОГО ФАЙЛА ПРИЛОЖЕНИЯ ДЛЯ КОЛИБРИ ОС | |
3004 | leency | 66 | ;----------------------------------------------------------------------------------------------------/ |
67 | use32 |
||
68 | org 0x0 |
||
69 | db 'MENUET01' |
||
70 | dd 0x01 |
||
71 | dd START |
||
72 | dd I_END |
||
4962 | eAndrew | 73 | dd I_MEM |
74 | dd I_MEM |
||
3099 | Akyltist | 75 | dd params |
3004 | leency | 76 | dd 0x0 |
77 | |||
4187 | eAndrew | 78 | include '../../../macros.inc' |
4962 | eAndrew | 79 | include '../../../proc32.inc' |
3004 | leency | 80 | |
4187 | eAndrew | 81 | WIN_W equ 295 ; ширина окна |
82 | WIN_H equ 195 ; высота окна |
||
83 | WIN_X equ 250 ; координата х окна |
||
84 | WIN_Y equ 190 ; координата у окна |
||
3099 | Akyltist | 85 | |
3453 | Akyltist | 86 | panel: |
87 | file "panel.raw" |
||
88 | |||
3004 | leency | 89 | START: |
4187 | eAndrew | 90 | mcall 68,11 ; инициализация кучи |
91 | mcall 40,0x27 ; устанавливаем маску событий |
||
92 | include 'params_init.inc' ; обработка параметров командной строки |
||
3099 | Akyltist | 93 | |
3004 | leency | 94 | ;#___________________________________________________________________________________________________ |
95 | ;****************************************************************************************************| |
||
3091 | leency | 96 | ; ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ - ОБРАБОТКА СОБЫТИЙ | |
3004 | leency | 97 | ;----------------------------------------------------------------------------------------------------/ |
98 | red: |
||
4187 | eAndrew | 99 | call draw_main ; вызываем перерисовку окна приложения |
3004 | leency | 100 | still: |
4187 | eAndrew | 101 | mcall 10 ; функция 10 - ждать события |
102 | cmp eax,1 ; перерисовать окно ? |
||
103 | je red ; если да - на метку red |
||
104 | cmp eax,2 ; нажата клавиша ? |
||
105 | je key ; если да - на key |
||
106 | cmp eax,3 ; нажата кнопка ? |
||
107 | je button ; если да - на button |
||
108 | cmp eax,6 ; событие от мыши вне окна |
||
109 | je mouse ; если да - на button |
||
110 | jmp still ; если другое событие - в начало цикла |
||
3004 | leency | 111 | ;end_still |
112 | |||
4187 | eAndrew | 113 | key: ; нажата клавиша на клавиатуре |
114 | mcall 2 ; функция 2 - считать код символа (в ah) (тут в принципе не нужна) |
||
115 | jmp still ; вернуться к началу цикла |
||
3004 | leency | 116 | ;end_key |
117 | |||
3453 | Akyltist | 118 | mouse: |
3904 | leency | 119 | cmp [renmode],2 |
120 | jne left |
||
3453 | Akyltist | 121 | call cyrcle_draw |
3904 | leency | 122 | jmp center |
123 | left: |
||
3453 | Akyltist | 124 | mcall 37,2 |
3904 | leency | 125 | cmp al,1b |
126 | jne right |
||
127 | mov [mouse_f],1 |
||
128 | jmp still |
||
129 | right: |
||
130 | cmp al,10b |
||
131 | jne still |
||
132 | mov [mouse_f],2 |
||
133 | jmp still |
||
134 | center: |
||
135 | mcall 37,2 |
||
3453 | Akyltist | 136 | cmp al,100b |
137 | jne still |
||
3904 | leency | 138 | mov [mouse_f],3 |
3453 | Akyltist | 139 | mov [color],edx |
140 | call draw_result |
||
3904 | leency | 141 | jmp still ; вернуться к началу цикла |
3453 | Akyltist | 142 | ;end_mouse |
143 | |||
3004 | leency | 144 | button: |
4187 | eAndrew | 145 | mcall 17 ; 17 - получить идентификатор нажатой кнопки |
146 | cmp ah, 1 ; если нажата кнопка с номером 1, |
||
147 | jz bexit ; выходим |
||
3091 | leency | 148 | ;обработка кнопки Next |
4187 | eAndrew | 149 | cmp ah, 12 ; если нажата кнопка NEXT |
150 | jne next_bg ; выходим |
||
151 | inc [pnext] ; увеличиваем при нажатии номер палитры |
||
152 | mov [renmode],0 ; включаем цветовые схемы |
||
153 | mov eax,[pnext] ; заносим значение в еах |
||
154 | cmp al,6 ; сравниваем с заявленным количеством палитр |
||
155 | jne next_redraw ; если не больше максимума то на вызов отрисовки |
||
156 | xor eax,eax ; иначе зануляем палитру на default |
||
157 | mov [pnext],eax ; и запоминаем что сбросили палитру на default |
||
3026 | leency | 158 | next_redraw: |
4187 | eAndrew | 159 | call draw_palitra ; РИСУЕМ ПАЛИТРУ |
160 | jmp still ; Уходим на ожидание другого события |
||
3091 | leency | 161 | next_bg: |
4187 | eAndrew | 162 | cmp ah, 14 ; Кнопка BACKGROUND |
4962 | eAndrew | 163 | jne next_bg2 ; если не нажата то выходим |
4187 | eAndrew | 164 | call set_background ; иначе устанавливаем фон |
165 | jmp still ; и на ожидание события |
||
4962 | eAndrew | 166 | next_bg2: |
167 | cmp ah, 16 ; Кнопка BACKGROUND |
||
168 | jne circle_bg ; если не нажата то выходим |
||
169 | call set_background2 ; иначе устанавливаем фон |
||
170 | jmp still ; и на ожидание события |
||
3091 | leency | 171 | circle_bg: |
4187 | eAndrew | 172 | cmp ah, 15 ; Кнопка Круговая палитра |
173 | jne next_end ; если не нажата то выходим |
||
174 | mov [renmode],2 ; включаем отрисовку круговой палитры |
||
175 | call draw_palitra ; РИСУЕМ ПАЛИТРУ |
||
176 | jmp still ; и на ожидание события |
||
3026 | leency | 177 | next_end: |
4187 | eAndrew | 178 | cmp ah,13 ; COLOR SWAP |
3088 | leency | 179 | jne color_swap_end |
180 | push [color2] |
||
181 | push [color] |
||
182 | pop [color2] |
||
183 | pop [color] |
||
184 | call draw_result |
||
4187 | eAndrew | 185 | jmp still ; И уходим на ожидание другого события |
3088 | leency | 186 | color_swap_end: |
4187 | eAndrew | 187 | cmp ah, 7 ; Проверяем нажата кнопка с ID=7 |
188 | jne color_button ; Если не нажата, то идём дальше |
||
189 | call mouse_get ; Иначе включаем обработчик мыши, чтобы считать значение цвета с палитры |
||
190 | jmp still ; И уходим на ожидание другого события |
||
191 | color_button: ; РАСЧЁТ координат для ползунков RGBA |
||
192 | push eax ; запоминаем еах |
||
193 | call mouse_local ; получаем локальные координаты |
||
194 | mov ebx,137 ; нижняя граница ползунка по У |
||
195 | mov ecx,[mouse_y] ; занисим в есх значение курсора по У |
||
196 | sub ebx,ecx ; находим разность (т.е. куда смещается ползунок) |
||
197 | mov ecx,3 ; заносим в есх цифру 3 (256/3=85, где 85-высота ползунков) |
||
198 | imul ecx,ebx ; находим истинный параметр цвета с учётом масштаба ползунка---+ |
||
199 | pop eax ; восстанавливаем еах : |
||
3091 | leency | 200 | ;red_button: ; Красный Трекбар : |
4187 | eAndrew | 201 | cmp ah, 8 ; ID=8 : |
202 | jne green_button ; если нет, то проверяем зелёный трекбар : |
||
203 | mov [cred],cl ; иначе присваиваем значение, красному цвету спектра <------+ |
||
204 | call set_spectr ; устанавливаем спектр |
||
205 | jmp still ; Уходим на ожидание другого события |
||
3004 | leency | 206 | green_button: |
207 | cmp ah, 9 |
||
208 | jne blue_button |
||
209 | mov [cgreen],cl |
||
210 | call set_spectr |
||
4187 | eAndrew | 211 | jmp still ; Уходим на ожидание другого события |
3004 | leency | 212 | blue_button: |
213 | cmp ah, 10 |
||
3088 | leency | 214 | jne alpha_button |
3004 | leency | 215 | mov [cblue],cl |
216 | call set_spectr |
||
4187 | eAndrew | 217 | jmp still ; Уходим на ожидание другого события |
3088 | leency | 218 | alpha_button: |
219 | cmp ah, 11 |
||
220 | jne still |
||
221 | mov [calpha],cl |
||
222 | call set_spectr |
||
4187 | eAndrew | 223 | jmp still ; Уходим на ожидание другого события |
3004 | leency | 224 | bexit: |
4187 | eAndrew | 225 | mcall -1 ; иначе конец программы |
3004 | leency | 226 | ;end_button |
227 | |||
228 | ;#___________________________________________________________________________________________________ |
||
229 | ;****************************************************************************************************| |
||
3091 | leency | 230 | ; ГЛАВНЫЙ МОДУЛЬ ОТРИСОВКИ ОКНА И ЭЛЕМЕНТОВ ПРИЛОЖЕНИЯ | |
3004 | leency | 231 | ;----------------------------------------------------------------------------------------------------/ |
3091 | leency | 232 | draw_main: |
4187 | eAndrew | 233 | mov eax,12 ; функция 12: означает, что будет рисоваться окно |
234 | mov ebx,1 ; 1,начало рисования |
||
235 | int 0x40 ; Прерывание |
||
3004 | leency | 236 | |
4187 | eAndrew | 237 | mov eax,48 ; Функция 48 - стили отображения окон |
238 | mov ebx,3 ; Подфункция 3 - получить стандартные цвета окон. |
||
239 | mov ecx,sc ; Указатель на буфер размером edx байт, под структуру |
||
240 | mov edx,sizeof.system_colors ; Размер таблицы цветов (должен быть 40 байт) |
||
241 | int 0x40 ; Прерывание |
||
3004 | leency | 242 | |
4187 | eAndrew | 243 | mov eax,48 ; Функция 48 - стили отображения окон. |
244 | mov ebx,4 ; Подфункция 4 - возвращает eax = высота скина. |
||
245 | int 0x40 ; Прерывание |
||
246 | mov ecx,eax ; Запоминаем высоту скина |
||
3004 | leency | 247 | |
3099 | Akyltist | 248 | mov edi,[runmode] |
249 | cmp edi,2 |
||
250 | jne no_hiddenmode |
||
251 | mov edi,hidden |
||
252 | jmp set_title |
||
253 | no_hiddenmode: |
||
254 | cmp edi,3 |
||
255 | jne no_dialogmode |
||
256 | mov edi,hidden |
||
257 | jmp set_title |
||
258 | no_dialogmode: |
||
4187 | eAndrew | 259 | mov edi,title ; Заголовок окна |
3099 | Akyltist | 260 | set_title: |
261 | |||
4187 | eAndrew | 262 | xor eax,eax ; Очищаем eax (mov eax,0) (Функция 0) |
263 | mov ebx,WIN_X shl 16+WIN_W ; [координата по оси x]*65536 + [размер по оси x] |
||
264 | add ecx,WIN_Y shl 16+WIN_H ; Высота скина + [координата по y]*65536 + [размер по y] (168 для версии 0.2) |
||
265 | mov edx,[sc.work] ; Видимо стиль окна по дефолту |
||
266 | or edx,0x34000000 ; Или окно со скином фиксированных размеров |
||
3004 | leency | 267 | |
4187 | eAndrew | 268 | int 0x40 ; Прерывание |
3004 | leency | 269 | |
3091 | leency | 270 | |
4187 | eAndrew | 271 | call draw_palitra ; РИСУЕМ ПАЛИТРУ |
272 | call draw_result ; РИСУЕМ РЕЗУЛЬТАТ |
||
273 | |||
274 | mov eax,8 ; Функция 8 - определить/удалить кнопку |
||
275 | mov ebx,110 shl 16+147 ; Начальные координаты по х [к-та x]*65536 + [размер] |
||
276 | mov ecx,9 shl 16+147 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
277 | mov edx,0x60000007 ; Начальное ID кнопок - 0xXYnnnnnn |
||
3004 | leency | 278 | int 0x40 |
279 | |||
4187 | eAndrew | 280 | mov ebx,13 shl 16+12 ; Начальные координаты по х [к-та x]*65536 + [размер] |
281 | mov edx,0x60000008 ; ID = 8 |
||
282 | mov ecx,51 shl 16+85 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
283 | int 0x40 ; Рисуем невидимую кнопку под слайдером red |
||
284 | add ebx,23 shl 16 ; Добавляем |
||
285 | inc edx ; ID = 9 |
||
286 | int 0x40 ; Рисуем невидимую кнопку под слайдером green |
||
287 | add ebx,23 shl 16 ; Добавляем |
||
288 | inc edx ; ID = 10 |
||
289 | int 0x40 ; Рисуем невидимую кнопку под слайдером blue |
||
290 | add ebx,23 shl 16 ; Добавляем |
||
291 | inc edx ; ID = 11 |
||
292 | int 0x40 ; Рисуем невидимую кнопку под слайдером alpha |
||
3004 | leency | 293 | |
4187 | eAndrew | 294 | mov eax,8 ; Функция 8 - определить/удалить кнопку (СМЕНА ЦВЕТА) |
295 | mov ebx,11 shl 16+20 ; Начальные координаты по х [к-та x]*65536 + [размер] |
||
296 | mov ecx,12 shl 16+20 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
297 | mov edx,0x6000000D ; ID = 13 |
||
3088 | leency | 298 | int 0x40 |
299 | |||
3091 | leency | 300 | call draw_bottom_panel |
301 | call draw_left_panel |
||
3004 | leency | 302 | |
4187 | eAndrew | 303 | mov eax,12 ; функция 12: означает, что будет рисоваться окно |
304 | mov ebx,2 ; 2 - конец рисования |
||
305 | int 0x40 ; Прерывание |
||
3091 | leency | 306 | ret |
3088 | leency | 307 | |
3091 | leency | 308 | ;#___________________________________________________________________________________________________ |
309 | ;****************************************************************************************************| |
||
310 | ; БЛОК ВСПОМОГАТЕЛЬНЫХ ПРОЦЕДУР И ФУНКЦИЙ ПРИЛОЖЕНИЯ | |
||
311 | ;----------------------------------------------------------------------------------------------------/ |
||
3004 | leency | 312 | |
3026 | leency | 313 | |
3091 | leency | 314 | ;------------------------------------------------------------------------------------------------+ |
4187 | eAndrew | 315 | draw_left_panel: ; Отрисовка боковой панели |
3091 | leency | 316 | ;................................................................................................. |
4187 | eAndrew | 317 | mov eax,8 ; button_next_colorsheme |
318 | mov ebx,266 shl 16+16 ; [x] + [size] |
||
319 | mov ecx,9 shl 16+16 ; [y] + [size] |
||
320 | mov edx,0x6000000C ; ID = 12 |
||
321 | mov esi,[sc.work_button] ; RGB |
||
322 | int 0x40 ; call |
||
3453 | Akyltist | 323 | ; circle diagram |
4187 | eAndrew | 324 | add ecx,19 shl 16 ; move rect |
325 | mov edx,0x6000000F ; ID = 15 |
||
326 | int 0x40 ; call |
||
3453 | Akyltist | 327 | |
4187 | eAndrew | 328 | mov eax,7 ; 7 - номер функции |
329 | mov ebx,panel ; указатель на изображение в формате BBGGRRBBGGRR... |
||
330 | mov ecx, 16 shl 16 + 149 ; [размер по оси x]*65536 + [размер по оси y] |
||
331 | mov edx,266 shl 16 + 9 ; [координата по оси x]*65536 + [координата по оси y] |
||
3453 | Akyltist | 332 | int 0x40 |
333 | |||
334 | ;mov eax,13 ; draw rect |
||
335 | ;mov ebx,266 shl 16+16 ; [x] + [size] |
||
336 | ;mov ecx,9 shl 16+16 ; [y] + [size] |
||
337 | ;mov edx,0x666666 ; RGB |
||
338 | ;push esi ; backup esi |
||
339 | ;mov esi,8 ; counter=8 |
||
340 | ;draw_lpanel: ; loop label |
||
341 | ; int 0x40 ; call draw black rect |
||
342 | ; add ecx,19 shl 16 ; move rect |
||
343 | ; dec esi ; decrement counter |
||
344 | ; cmp esi,0 ; if counter!=zero |
||
345 | ; jne draw_lpanel ; then goto label |
||
346 | ; mov esi,8 ; else counter=8 |
||
347 | ; mov ebx,267 shl 16+14 ; [x] + [size] |
||
348 | ; mov ecx,10 shl 16+14 ; [y] + [size] |
||
349 | ; mov edx,0xF3F3F3 ; RGB |
||
350 | ;draw_lpanel2: ; 2 loop label |
||
351 | ; int 0x40 ; call draw white rect |
||
352 | ; add ecx,19 shl 16 ; move rect |
||
353 | ; dec esi ; decrement counter |
||
354 | ; cmp esi,0 ; if counter!=0 |
||
355 | ; jne draw_lpanel2 ; then goto label2 |
||
356 | ;pop esi ; restore esi |
||
3091 | leency | 357 | ; draw_left_arrow for button_next_colorsheme |
3453 | Akyltist | 358 | ;mov eax,4 ; Write string |
359 | ;mov ebx,272 shl 16+13 ; [x] + [y] |
||
360 | ;mov ecx,0x0 ; RGB |
||
361 | ;mov edx,larrow ; string pointer |
||
362 | ;mov esi,1 ; count symbol |
||
363 | ;int 0x40 ; call |
||
364 | ;mov eax,38 ; draw line |
||
4187 | eAndrew | 365 | ;mov ebx,270 shl 16+272 ; [start x] + [end x] |
366 | ;mov ecx,16 shl 16+16 ; [start y] + [end y] |
||
3453 | Akyltist | 367 | ;mov edx,0x0 ; RGB |
368 | ;int 0x40 ; call |
||
4187 | eAndrew | 369 | ret ; return |
3091 | leency | 370 | ;................................................................................................. |
3026 | leency | 371 | |
372 | |||
3091 | leency | 373 | ;------------------------------------------------------------------------------------------------+ |
4187 | eAndrew | 374 | draw_bottom_panel: ; Отрисовка нижней панели |
3091 | leency | 375 | ;................................................................................................. |
4187 | eAndrew | 376 | mov eax,8 ; draw button |
4962 | eAndrew | 377 | mov ebx,(92) shl 16+90 ; [x] + [size] |
4187 | eAndrew | 378 | mov ecx,169 shl 16+16 ; [y] + [size] |
379 | mov edx,14 ; ID = 14 |
||
380 | mov esi,[sc.work_button] ; RGB |
||
381 | int 0x40 ; call |
||
4962 | eAndrew | 382 | |
383 | add ebx, 100 shl 16 |
||
384 | add edx, 2 |
||
385 | int 0x40 |
||
386 | |||
4187 | eAndrew | 387 | mov eax,4 ; Write string |
4962 | eAndrew | 388 | mov ebx,(113 - 104) shl 16+174 ; [x] + [y] |
389 | mov ecx,[sc.work_text] ; RGB |
||
390 | or ecx, 1 shl 31 |
||
4187 | eAndrew | 391 | mov edx,bground ; string pointer |
392 | int 0x40 ; call |
||
4962 | eAndrew | 393 | |
394 | mov ecx, [sc.work_button_text] |
||
395 | or ecx, 1 shl 31 |
||
396 | |||
397 | add ebx, 106 shl 16 |
||
398 | mov edx, bground1 |
||
399 | int 0x40 |
||
400 | |||
401 | add ebx, 107 shl 16 |
||
402 | mov edx, bground2 |
||
403 | int 0x40 |
||
404 | |||
4187 | eAndrew | 405 | mov eax,38 ; draw line |
406 | mov ebx,4 shl 16+282 ; [start x] + [end x] |
||
407 | mov ecx,163 shl 16+163 ; [start y] + [end y] |
||
408 | mov edx,0x00666666 ; RGB |
||
409 | int 0x40 ; call |
||
410 | ret ; return |
||
3091 | leency | 411 | ;................................................................................................. |
3026 | leency | 412 | |
3004 | leency | 413 | mouse_global: |
414 | ;................................................................................................. |
||
3091 | leency | 415 | ; Получаем координаты мыши |
3004 | leency | 416 | ;................................................................................................. |
4187 | eAndrew | 417 | mov eax,37 ; Функция 37 - работа с мышью |
418 | mov ebx,0 ; нам нужны глобальные координаты |
||
419 | int 0x40 ; eax = x*65536 + y, (x,y)=координаты курсора мыши |
||
420 | mov ecx,eax ; |
||
421 | shr ecx,16 ; ecx = x+1 |
||
422 | movzx edx,ax ; edx = y+1 |
||
423 | dec ecx ; ecx = x |
||
424 | dec edx ; edx = y |
||
425 | mov [mouse_x],ecx ; mouse_x = x |
||
426 | mov [mouse_y],edx ; mouse_y = y |
||
427 | ret ; Возвращаем управление |
||
3004 | leency | 428 | ;end_mouse_global |
429 | |||
430 | mouse_local: |
||
431 | ;................................................................................................. |
||
3091 | leency | 432 | ; Получаем координаты мыши относительно окна |
3004 | leency | 433 | ;................................................................................................. |
4187 | eAndrew | 434 | mov eax,37 ; Функция 37 - работа с мышью |
435 | mov ebx,1 ; нам нужны глобальные координаты |
||
436 | int 0x40 ; eax = x*65536 + y, (x,y)=координаты курсора мыши |
||
437 | mov ecx,eax ; |
||
438 | shr ecx,16 ; ecx = x+1 |
||
439 | movzx edx,ax ; edx = y+1 |
||
440 | dec ecx ; ecx = x |
||
441 | dec edx ; edx = y |
||
442 | mov [mouse_x],ecx ; mouse_x = x |
||
443 | mov [mouse_y],edx ; mouse_y = y |
||
444 | ret ; Возвращаем управление |
||
3004 | leency | 445 | ;end_mouse_local |
446 | |||
3091 | leency | 447 | set_background: |
448 | ;................................................................................................. |
||
449 | ; Устанавливает фон рабочего стола |
||
450 | ;................................................................................................. |
||
4187 | eAndrew | 451 | mov eax,15 ; Функция 15 - работа с фоновой графикой |
452 | mov ebx,4 ; Подфункция 4 - установить режим отрисовки фона. |
||
453 | mov ecx,2 ; Режим отрисовки - замостить (1) |
||
454 | int 0x40 ; Вызываем |
||
3091 | leency | 455 | |
4187 | eAndrew | 456 | mov eax,15 ; Функция 15 - работа с фоновой графикой |
457 | mov ebx,1 ; Подфункция 1 - установить размер фонового изображения. |
||
458 | mov ecx,2 ; Ширина изображения |
||
459 | mov edx,2 ; Высота изображения |
||
460 | int 0x40 ; Вызываем |
||
3091 | leency | 461 | |
462 | mov eax,[color] |
||
463 | mov [cm+0],al |
||
464 | mov [cm+9],al |
||
465 | shr eax,8 |
||
466 | mov [cm+1],al |
||
467 | mov [cm+10],al |
||
468 | shr eax,8 |
||
469 | mov [cm+2],al |
||
470 | mov [cm+11],al |
||
471 | |||
472 | mov eax,[color2] |
||
473 | mov [cm+3],al |
||
474 | mov [cm+6],al |
||
475 | shr eax,8 |
||
476 | mov [cm+4],al |
||
477 | mov [cm+7],al |
||
478 | shr eax,8 |
||
479 | mov [cm+5],al |
||
480 | mov [cm+8],al |
||
481 | |||
4187 | eAndrew | 482 | mov eax,15 ; Функция 15 - работа с фоновой графикой |
483 | mov ebx,5 ; Подфункция 5 - поместить блок пикселей на фон. |
||
484 | mov ecx,cm ; Указатель на данные в формате BBGGRRBBGGRR |
||
485 | mov edx,0 ; Cмещение в данных фонового изображения |
||
486 | mov esi,3*4 ; Размер данных в байтах = 3 * число пикселей |
||
487 | int 0x40 ; Вызываем |
||
3091 | leency | 488 | |
4187 | eAndrew | 489 | mov eax,15 ; Функция 15 - работа с фоновой графикой |
490 | mov ebx,3 ; Подфункция 3 - перерисовать фон. |
||
491 | int 0x40 ; Вызываем |
||
3091 | leency | 492 | |
493 | ret |
||
494 | ;end_set_background |
||
495 | |||
3004 | leency | 496 | desktop_get: |
497 | ;................................................................................................. |
||
3091 | leency | 498 | ; Определяем ширину экрана |
3004 | leency | 499 | ;................................................................................................. |
4187 | eAndrew | 500 | mov eax,14 ; Определяем ширину экрана (eax = [xsize]*65536 + [ysize]) |
501 | int 0x40 ; xsize = размер по горизонтали - 1 |
||
502 | mov ebx,eax ; |
||
503 | shr ebx,16 ; ebx = xsize-1 |
||
504 | movzx edx,ax ; edx = ysize-1 (лишний код) |
||
505 | inc ebx ; ebx = xsize |
||
506 | inc edx ; edx = ysize (лишний код) |
||
3004 | leency | 507 | mov [desctop_w],ebx |
3453 | Akyltist | 508 | mov [desctop_h],edx |
3004 | leency | 509 | ret |
510 | ;end_desktop_get |
||
511 | |||
512 | mouse_get: |
||
4187 | eAndrew | 513 | mov esi,2 ; КОСТЫЛЬ: флаг для избежания зацикливания |
3004 | leency | 514 | call mouse_global |
515 | call desktop_get |
||
4187 | eAndrew | 516 | re_mouse_loop: ; КОСТЫЛЬ: метка для возврата если попали в сетку |
3004 | leency | 517 | mov ebx,[desctop_w] |
4187 | eAndrew | 518 | imul ebx,[mouse_y] ; ebx = y*xsize |
519 | add ebx,[mouse_x] ; ebx = y*xsize+x |
||
3004 | leency | 520 | |
521 | ;................................................................................................. |
||
3091 | leency | 522 | ; Берем цвет с палитры в переменную |
3004 | leency | 523 | ;................................................................................................. |
4187 | eAndrew | 524 | mov eax,35 ; Функция взятия цвета |
3091 | leency | 525 | ;mov ebx,ecx ;; ebx = y*xsize+x (лишний код) |
4187 | eAndrew | 526 | int 0x40 ; Получаем цвет в eax |
527 | cmp eax,[sc.work] ; Сравниваем с фоном приложения |
||
528 | je mouse_err ; Если это он - то ничего не делаем |
||
529 | cmp eax,0x222222 ; Сравниваем с цветом сетки |
||
530 | je mouse_err ; Если это он - то ничего не делаем |
||
531 | jmp mouse_set ; КОСТЫЛЬ: прыгаем чтобы не брать цвет сетки |
||
532 | mouse_err: ; КОСТЫЛЬ: если попали в сетку или фон |
||
533 | inc [mouse_y] ; КОСТЫЛЬ: смещаем по диагонали сначала по х |
||
534 | inc [mouse_x] ; КОСТЫЛЬ: смещаем по диагонали потом по у |
||
535 | dec esi ; КОСТЫЛЬ: Уменьшаем флаг |
||
536 | cmp esi,0 ; КОСТЫЛЬ: Сравниваем с нулем |
||
537 | jz mouse_exit ; КОСТЫЛЬ: Если ноль то сделали всё что могли |
||
538 | jmp re_mouse_loop ; КОСТЫЛЬ: Если не ноль то попробуем взять соселний пиксель |
||
539 | mouse_set: ; Иначе запоминаем новый цвет |
||
3904 | leency | 540 | cmp [mouse_f],1 |
541 | jne was_right |
||
542 | mov [color],eax |
||
543 | call draw_result |
||
544 | jmp mouse_exit |
||
545 | was_right: |
||
546 | cmp [mouse_f],2 |
||
547 | jne mouse_exit |
||
548 | mov [color2],eax |
||
4187 | eAndrew | 549 | call draw_result ; Выводим результат |
3004 | leency | 550 | mouse_exit: |
4187 | eAndrew | 551 | ret ; Возвращаем управление |
3004 | leency | 552 | ;end_mouse_get---------------------------------------------------------------------------------------- |
553 | |||
554 | draw_palitra: |
||
4187 | eAndrew | 555 | mov eax,13 ; Функция 13 - нарисовать прямоугольник |
556 | mov ebx,110 shl 16+148 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
557 | mov ecx,9 shl 16+148 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
558 | mov edx,[sc.work] ; цвет |
||
3091 | leency | 559 | int 0x40 |
560 | |||
3453 | Akyltist | 561 | cmp [renmode],2 |
4187 | eAndrew | 562 | je cyrcle_draw |
3091 | leency | 563 | ;cmp [renmode],1 |
564 | ;je picker_draw |
||
565 | cmp [renmode],0 |
||
4187 | eAndrew | 566 | je sheme_draw |
3091 | leency | 567 | ret |
568 | |||
3004 | leency | 569 | ;................................................................................................. |
3091 | leency | 570 | ; Отрисовка круговой диаграммы |
3004 | leency | 571 | ;................................................................................................. |
3453 | Akyltist | 572 | cyrcle_draw: |
573 | ;mov eax,13 |
||
574 | ;mov edx,0x666666 |
||
575 | ;mov ebx,108*65536+152 |
||
576 | ;mov ecx,125*65536+33 |
||
577 | ;mcall |
||
578 | ;mov edx,0xF3F3F3 |
||
579 | ;mov ebx,109*65536+150 |
||
580 | ;mov ecx,126*65536+31 |
||
581 | ;mcall |
||
3091 | leency | 582 | |
3453 | Akyltist | 583 | ;mov eax,4 ; 4 - вывести строку текста в окно |
584 | ;mov ebx,115 shl 16+131 ; [координата по оси x]*65536 + [координата по оси y] |
||
585 | ;mov ecx,0x666666 ; 0xX0RRGGBB (RR, GG, BB задают цвет текста) |
||
586 | ;mov edx,hint ; указатель на начало строки |
||
587 | ;mov esi,24 ; выводить esi символов |
||
588 | ;mcall |
||
589 | ;mov ebx,125 shl 16+144 ; [координата по оси x]*65536 + [координата по оси y] |
||
590 | ;mov edx,hint2 ; указатель на начало строки |
||
591 | ;mov esi,21 ; выводить esi символов |
||
592 | ;mcall |
||
593 | |||
594 | ;mov edx,[color] |
||
595 | ;mov ebx,109*65536+150 |
||
596 | ;mov ecx, 10*65536+150 |
||
597 | ;mcall |
||
4187 | eAndrew | 598 | call mouse_local ; получаем координаты мыши относительно окна |
599 | mov ecx, [mouse_x] ; заносим в регистр |
||
600 | mov edx, [mouse_y] ; заносим в регистр |
||
3453 | Akyltist | 601 | cmp ecx, WIN_W-10 |
4187 | eAndrew | 602 | jg cyrcle_draw_2 |
3453 | Akyltist | 603 | cmp edx, WIN_H |
604 | jle end_cyrcle_draw |
||
605 | |||
606 | cyrcle_draw_2: |
||
4187 | eAndrew | 607 | mcall 5,10 |
3453 | Akyltist | 608 | call desktop_get |
609 | call mouse_global |
||
610 | |||
611 | mov ebx,112*65536+11 |
||
4187 | eAndrew | 612 | mov esi,0 ; counter=8 |
3453 | Akyltist | 613 | circle_loop: |
614 | mov ecx, 10*65536+11 |
||
615 | mov edi,0 |
||
616 | circle_loop2: |
||
4187 | eAndrew | 617 | mov eax,13 |
618 | call circle_pixel_read |
||
619 | mcall |
||
620 | add ecx,11 shl 16 |
||
621 | inc edi |
||
622 | cmp edi,13 |
||
623 | jne circle_loop2 |
||
3453 | Akyltist | 624 | |
625 | add ebx,11 shl 16 |
||
626 | inc esi |
||
627 | cmp esi,13 |
||
628 | jne circle_loop |
||
4187 | eAndrew | 629 | |
630 | |||
3453 | Akyltist | 631 | mov eax,13 |
632 | mov edx,0x0 |
||
633 | mov ebx,177*65536+13 |
||
634 | mov ecx, 76*65536+13 |
||
635 | mcall |
||
636 | mov ecx, [mouse_x] |
||
637 | mov edx, [mouse_y] |
||
638 | inc ecx |
||
639 | inc edx |
||
640 | mov ebx, edx |
||
641 | imul ebx, [desctop_w] |
||
642 | add ebx, ecx |
||
643 | mov eax, 35 |
||
644 | mcall |
||
645 | mov edx,eax |
||
646 | mov eax,13 |
||
647 | mov ebx,178*65536+11 |
||
648 | mov ecx, 77*65536+11 |
||
649 | mcall |
||
3904 | leency | 650 | ret |
3453 | Akyltist | 651 | end_cyrcle_draw: |
3904 | leency | 652 | mov eax,13 |
653 | mov edx,0x666666 |
||
654 | mov ebx,111*65536+145 |
||
655 | mov ecx, 9*65536+145 |
||
656 | mcall |
||
3453 | Akyltist | 657 | ret |
658 | |||
659 | circle_pixel_read: |
||
660 | push ecx |
||
661 | push ebx |
||
662 | push eax |
||
663 | mov ecx, [mouse_x] |
||
664 | mov edx, [mouse_y] |
||
665 | inc ecx |
||
666 | add ecx, esi |
||
667 | cmp ecx, 6 |
||
4187 | eAndrew | 668 | jl _cpr_exit |
3453 | Akyltist | 669 | sub ecx, 6 |
670 | inc edx |
||
671 | add edx, edi |
||
672 | cmp edx, 6 |
||
4187 | eAndrew | 673 | jl _cpr_exit |
3453 | Akyltist | 674 | sub edx, 6 |
675 | |||
676 | mov ebx, edx |
||
677 | imul ebx, [desctop_w] |
||
678 | add ebx, ecx |
||
679 | mov eax, 35 |
||
680 | mcall |
||
681 | mov edx,eax |
||
682 | pop eax |
||
683 | pop ebx |
||
684 | pop ecx |
||
685 | ret |
||
686 | |||
687 | _cpr_exit: |
||
688 | mov edx,0x00000000 |
||
689 | pop eax |
||
690 | pop ebx |
||
691 | pop ecx |
||
692 | ret |
||
693 | |||
3091 | leency | 694 | ;picker_draw: |
695 | ;ret |
||
696 | |||
697 | ;................................................................................................. |
||
698 | ; Отрисовка фона под кнопки |
||
699 | ;................................................................................................. |
||
700 | sheme_draw: |
||
4187 | eAndrew | 701 | mov eax,13 ; Функция 13 - нарисовать прямоугольник |
702 | mov edx,0x222222 ; цвет |
||
703 | mov ecx,9 shl 16+73 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
704 | mov esi,2 ; Счетчик линий подложек |
||
3004 | leency | 705 | re_draw: |
4187 | eAndrew | 706 | mov ebx,110 shl 16+73 ; Начальные координаты по x [к-та x]*65536 + [размер] |
707 | mov edi,2 ; Счетчик количества подложек |
||
3004 | leency | 708 | for_fon_loop: |
4187 | eAndrew | 709 | int 0x40 ; Прерывание |
710 | add ebx,75 shl 16 ; Смещаем положение линии по х |
||
711 | dec edi ; Уменьшаем счетчик кнопок |
||
712 | cmp edi,0 ; Сравниваем с нулем |
||
713 | jnz for_fon_loop ; Если не ноль то в начало цикла |
||
714 | dec esi ; Уменьшаем его |
||
715 | cmp esi,0 ; Сравниваем с нулем |
||
716 | mov ecx,84 shl 16+73 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
717 | jnz re_draw ; Если не ноль то в начало цикла |
||
3004 | leency | 718 | |
719 | ;................................................................................................. |
||
3091 | leency | 720 | ; Отрисовка кнопок по циклу |
3004 | leency | 721 | ;................................................................................................. |
4187 | eAndrew | 722 | mov eax,13 ; Функция 13 - нарисовать прямоугольник |
723 | mov edx,0x0FFFFFFF ; цвет |
||
724 | mov esi,4 ; Счетчик количества абзацев (#4,8) |
||
725 | mov ebx,99 shl 16+8 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
3004 | leency | 726 | for_abz: |
3091 | leency | 727 | ;;push esi ; Сохраняем значение счетчика линий в стек |
3026 | leency | 728 | cmp esi,2 |
3004 | leency | 729 | jne x2_line |
3088 | leency | 730 | mov ebx,99 shl 16+8 |
3004 | leency | 731 | x2_line: |
4187 | eAndrew | 732 | add ebx,3 shl 16 ; Смещаем положение линии по x |
733 | mov edi,8 ; Счетчик количества кнопок в строке |
||
3004 | leency | 734 | for_stolbik: |
4187 | eAndrew | 735 | push edi ; Сохраняем значение счетчика линий в стек |
736 | mov edi,8 ; Счетчик количества кнопок в строке |
||
737 | mov ecx, 1 shl 16+8 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
738 | cmp esi,2 |
||
739 | jg y2_line ; Если больше 4 то игнорим |
||
740 | mov ecx,76 shl 16+8 |
||
741 | y2_line: |
||
742 | add ebx,9 shl 16 ; Смещаем положение линии по x |
||
743 | for_loop: |
||
744 | add ecx,9 shl 16 ; Смещаем положение линии по y |
||
745 | int 0x40 ; Прерывание |
||
746 | call sub_red |
||
747 | dec edi ; Уменьшаем счетчик кнопок |
||
748 | cmp edi,0 ; Сравниваем с нулем |
||
749 | jnz for_loop ; Если не ноль то в начало цикла |
||
3026 | leency | 750 | call sub_green |
4187 | eAndrew | 751 | pop edi ; Иначе восстанавливаем счетчик линий |
752 | dec edi ; Уменьшаем его |
||
753 | cmp edi,0 ; Сравниваем с нулем |
||
754 | jnz for_stolbik ; Если не ноль то в начало цикла |
||
3026 | leency | 755 | call sub_blue |
3091 | leency | 756 | ;;pop esi ; Иначе восстанавливаем счетчик линий |
4187 | eAndrew | 757 | dec esi ; Уменьшаем его |
758 | cmp esi,0 ; Сравниваем с нулем |
||
759 | jnz for_abz ; Если не ноль то в начало цикла |
||
760 | ret ; Возвращаем управление |
||
3004 | leency | 761 | ;end_draw_palitra------------------------------------------------------------------------------------- |
762 | |||
3026 | leency | 763 | |
764 | sub_red: |
||
765 | ;................................................................................................. |
||
3091 | leency | 766 | ; Расчёт смещений красного цвета в генерации цвета палитры |
3026 | leency | 767 | ;................................................................................................. |
768 | push eax |
||
769 | mov eax,[pnext] |
||
770 | ;sub_red_0 ; palitra |
||
771 | cmp al,0 |
||
772 | jne sub_red_1 |
||
3091 | leency | 773 | sub edx,0x40 |
3026 | leency | 774 | jmp sub_red_e |
4187 | eAndrew | 775 | sub_red_1: ; random |
3026 | leency | 776 | cmp al,1 |
777 | jne sub_red_2 |
||
3091 | leency | 778 | sub edx,0x20 |
3026 | leency | 779 | jmp sub_red_e |
4187 | eAndrew | 780 | sub_red_2: ; gree |
3026 | leency | 781 | cmp al,2 |
782 | jne sub_red_3 |
||
783 | sub edx,0x010101 |
||
784 | jmp sub_red_e |
||
4187 | eAndrew | 785 | sub_red_3: ; red |
3026 | leency | 786 | cmp al,3 |
787 | jne sub_red_4 |
||
788 | sub edx,0x0101 |
||
789 | jmp sub_red_e |
||
4187 | eAndrew | 790 | sub_red_4: ; green |
3026 | leency | 791 | cmp al,4 |
792 | jne sub_red_5 |
||
793 | sub edx,0x010001 |
||
794 | jmp sub_red_e |
||
4187 | eAndrew | 795 | sub_red_5: ; blue |
3026 | leency | 796 | cmp al,5 |
797 | jne sub_red_e |
||
798 | sub edx,0x010100 |
||
799 | jmp sub_red_e |
||
800 | sub_red_e: |
||
801 | pop eax |
||
4187 | eAndrew | 802 | ret ; Возвращаем управление |
3026 | leency | 803 | ;end_sub_red------------------------------------------------------------------------------------------ |
804 | |||
805 | sub_green: |
||
806 | ;................................................................................................. |
||
3091 | leency | 807 | ; Расчёт смещений красного цвета в генерации цвета палитры |
3026 | leency | 808 | ;................................................................................................. |
809 | push eax |
||
810 | mov eax,[pnext] |
||
811 | ;sub_green_0 |
||
812 | cmp al,0 |
||
813 | jne sub_green_1 |
||
3091 | leency | 814 | sub edx,0x4000 |
3026 | leency | 815 | jmp sub_green_e |
816 | sub_green_1: |
||
817 | cmp al,1 |
||
818 | jne sub_green_e |
||
3091 | leency | 819 | sub edx,0x2000 |
3026 | leency | 820 | ;jmp sub_green_e |
821 | sub_green_e: |
||
822 | pop eax |
||
4187 | eAndrew | 823 | ret ; Возвращаем управление |
3026 | leency | 824 | ;end_sub_green---------------------------------------------------------------------------------------- |
825 | |||
826 | |||
827 | sub_blue: |
||
828 | ;................................................................................................. |
||
3091 | leency | 829 | ; Расчёт смещений красного цвета в генерации цвета палитры |
3026 | leency | 830 | ;................................................................................................. |
831 | push eax |
||
832 | mov eax,[pnext] |
||
833 | ;sub_blue_0 |
||
834 | cmp al,0 |
||
835 | jne sub_blue_1 |
||
3091 | leency | 836 | sub edx,0x600000 |
3026 | leency | 837 | jmp sub_blue_e |
838 | sub_blue_1: |
||
839 | cmp al,1 |
||
840 | jne sub_blue_e |
||
3091 | leency | 841 | sub edx,0x400000 |
3026 | leency | 842 | ;jmp sub_blue_e |
843 | sub_blue_e: |
||
844 | pop eax |
||
4187 | eAndrew | 845 | ret ; Возвращаем управление |
3026 | leency | 846 | ;end_sub_blue----------------------------------------------------------------------------------------- |
847 | |||
3004 | leency | 848 | draw_result: |
849 | ;................................................................................................. |
||
3091 | leency | 850 | ; Большая рамка вывода результата |
3004 | leency | 851 | ;................................................................................................. |
4187 | eAndrew | 852 | mov eax,13 ; Функция 13 - нарисовать прямоугольник |
853 | mov edx,0x00666666 ; цвет-обводки |
||
854 | mov ebx,4 shl 16+98 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
855 | mov ecx,9 shl 16+148 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
3088 | leency | 856 | int 0x40 |
4187 | eAndrew | 857 | mov edx,0x00F3F3F3 ; цвет-фона |
858 | mov ebx,5 shl 16+96 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
859 | mov ecx,10 shl 16+146 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
3088 | leency | 860 | int 0x40 |
861 | |||
862 | ;................................................................................................. |
||
3091 | leency | 863 | ; Отрисовка результата цвета в hex color2 |
3088 | leency | 864 | ;................................................................................................. |
4187 | eAndrew | 865 | mov eax,13 ; Функция 13 - нарисовать прямоугольник |
3088 | leency | 866 | ; color 2 - draw fringle |
4187 | eAndrew | 867 | mov edx,0x222222 ; цвет-обводки |
868 | mov ebx,16 shl 16+15 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
869 | mov ecx,16 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
870 | int 0x40 ; Прерывание (ос рисует прямоугольник) |
||
3088 | leency | 871 | ; color 2 - draw color |
4187 | eAndrew | 872 | mov edx,[color2] ; цвет |
873 | mov ebx,17 shl 16+13 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
874 | mov ecx,17 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
875 | int 0x40 ; Прерывание (ос рисует прямоугольник) |
||
3088 | leency | 876 | ; color 1 - draw fringle |
4187 | eAndrew | 877 | mov edx,0x222222 ; цвет-обводки |
878 | mov ebx,11 shl 16+15 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
879 | mov ecx,12 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
880 | int 0x40 ; Прерывание (ос рисует прямоугольник) |
||
3088 | leency | 881 | ; value - draw fringle |
4187 | eAndrew | 882 | mov ebx,34 shl 16+62 ; Начальные координаты по x [к-та x]*65536 + [размер] |
883 | mov ecx,16 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
884 | int 0x40 ; Прерывание (ос рисует прямоугольник) |
||
3004 | leency | 885 | |
3088 | leency | 886 | ; color 2 - draw color |
4187 | eAndrew | 887 | mov edx,[color] ; цвет |
888 | mov ebx,12 shl 16+13 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
889 | mov ecx,13 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
890 | int 0x40 ; Прерывание (ос рисует прямоугольник) |
||
3088 | leency | 891 | ; value - draw background |
4187 | eAndrew | 892 | mov edx,0xFFFFFF ; цвет-фона |
893 | mov ebx,35 shl 16+60 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
894 | mov ecx,17 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
895 | int 0x40 ; Прерывание (ос рисует прямоугольник) |
||
3004 | leency | 896 | |
4187 | eAndrew | 897 | mov eax,47 ; Функция 47 - вывод числа в окно |
898 | mov ecx,[color] ; число (при bl=0) или указатель (при bl=1) |
||
899 | mov esi,0x0 ; 0xX0RRGGBB |
||
900 | mov ebx,256+8 shl 16 ; параметры преобразования числа в текст (HEX) |
||
901 | mov edx,45 shl 16+20 ; [координата по оси x]*65536 + [координата по оси y] |
||
902 | int 0x40 ; Прерывание - выводим результат в окно (HEX) |
||
3004 | leency | 903 | |
4187 | eAndrew | 904 | mov eax,4 ; функция 4: написать текст в окне |
905 | mov ebx,38*65536+20 ; [x начальный] *65536 + [y начальный] |
||
906 | mov ecx,0x0 ; цвет текста RRGGBB |
||
907 | mov edx,hex ; рисуем '#' |
||
908 | mov esi,1 ; длина текста в байтах |
||
909 | int 0x40 |
||
3004 | leency | 910 | |
911 | ;................................................................................................. |
||
3091 | leency | 912 | ; Отрисовка r g b значений |
3004 | leency | 913 | ;................................................................................................. |
914 | call get_spectr |
||
915 | |||
4187 | eAndrew | 916 | movzx eax,[cred] ; красный |
917 | mov ebx,9*65536+142 ; [x начальный] *65536 + [y начальный] |
||
918 | call draw_value ; выводим результат |
||
3004 | leency | 919 | |
4187 | eAndrew | 920 | movzx eax,[cgreen] ; зеленый |
921 | mov ebx,32*65536+142 ; [x начальный] *65536 + [y начальный] |
||
922 | call draw_value ; выводим результат |
||
3004 | leency | 923 | |
4187 | eAndrew | 924 | movzx eax,[cblue] ; синий |
925 | mov ebx,55*65536+142 ; [x начальный] *65536 + [y начальный] |
||
926 | call draw_value ; выводим результат |
||
3004 | leency | 927 | |
4187 | eAndrew | 928 | movzx eax,[calpha] ; альфа |
929 | mov ebx,78*65536+142 ; [x начальный] *65536 + [y начальный] |
||
930 | call draw_value ; выводим результат |
||
3004 | leency | 931 | |
932 | ;................................................................................................. |
||
3091 | leency | 933 | ; Выводим буквы r g b a |
3004 | leency | 934 | ;................................................................................................. |
4187 | eAndrew | 935 | mov eax,4 ; 4 - вывести строку текста в окно |
936 | mov ebx,16 shl 16+40 ; [координата по оси x]*65536 + [координата по оси y] |
||
937 | mov ecx,0x0 ; 0xX0RRGGBB (RR, GG, BB задают цвет текста) |
||
938 | mov edx,cname ; указатель на начало строки |
||
939 | mov esi,1 ; выводить esi символов |
||
4962 | eAndrew | 940 | newline: ; цикл |
4187 | eAndrew | 941 | int 0x40 ; Прерывание |
942 | add ebx,23 shl 16 ; Добавляем |
||
943 | add edx,1 ; Добавляем |
||
944 | cmp [edx],byte 'x' ; Сравнение с байтом х |
||
4962 | eAndrew | 945 | jne newline ; Если не нуль или не равно |
3004 | leency | 946 | |
947 | ;................................................................................................. |
||
3091 | leency | 948 | ; Отрисовка слайдеров |
3004 | leency | 949 | ;................................................................................................. |
4187 | eAndrew | 950 | mov eax,13 ; Функция 13 - нарисовать прямоугольник |
951 | mov edx,0x222222 ; цвет-обводки |
||
952 | mov ebx,16 shl 16+4 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
953 | mov ecx,51 shl 16+86 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
3004 | leency | 954 | int 0x40 |
4187 | eAndrew | 955 | add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] |
3004 | leency | 956 | int 0x40 |
4187 | eAndrew | 957 | add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] |
3004 | leency | 958 | int 0x40 |
4187 | eAndrew | 959 | add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] |
3088 | leency | 960 | int 0x40 |
3004 | leency | 961 | |
4187 | eAndrew | 962 | mov edx,0xFA0919 ; цвет-обводки |
963 | mov ebx,17 shl 16+2 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
964 | mov ecx,52 shl 16+84 ; Начальные координаты по y [к-та y]*65536 + [размер] |
||
3004 | leency | 965 | int 0x40 |
4187 | eAndrew | 966 | mov edx,0x08CE19 ; цвет-обводки |
967 | add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] |
||
3004 | leency | 968 | int 0x40 |
4187 | eAndrew | 969 | mov edx,0x0909FF ; цвет-обводки |
970 | add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] |
||
3004 | leency | 971 | int 0x40 |
4187 | eAndrew | 972 | mov edx,0xE4E4E4 ; цвет-обводки |
973 | add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] |
||
3088 | leency | 974 | int 0x40 |
3004 | leency | 975 | |
976 | ;................................................................................................. |
||
3091 | leency | 977 | ; Отрисовка ползунков |
3004 | leency | 978 | ;................................................................................................. |
4187 | eAndrew | 979 | mov edx,0x0 ; цвет-ползунков |
980 | mov ebx,17 shl 16+11 ; Начальные координаты по x [к-та x]*65536 + [размер] |
||
981 | movzx eax,[cred] ; берем значение цвета |
||
3004 | leency | 982 | call draw_slider |
3088 | leency | 983 | add ebx,23 shl 16 |
4187 | eAndrew | 984 | movzx eax,[cgreen] ; берем значение цвета |
3004 | leency | 985 | call draw_slider |
3088 | leency | 986 | add ebx,23 shl 16 |
4187 | eAndrew | 987 | movzx eax,[cblue] ; берем значение цвета |
3004 | leency | 988 | call draw_slider |
3088 | leency | 989 | add ebx,23 shl 16 |
4187 | eAndrew | 990 | movzx eax,[calpha] ; берем значение цвета |
3088 | leency | 991 | call draw_slider |
3004 | leency | 992 | |
4187 | eAndrew | 993 | ret ; Возвращаем управление |
3004 | leency | 994 | ;end_draw_result |
995 | |||
996 | draw_slider: |
||
997 | xor ecx,ecx |
||
4187 | eAndrew | 998 | mov cl,0x3 ; будем делить его на 3 так как ползунки длинной 85 пикселей |
999 | div cl ; делим - целое в al остаток в ah |
||
1000 | mov cl,136 ; нижняя точка ползунка |
||
1001 | sub cl,al ; cl=cl-al |
||
3004 | leency | 1002 | shl ecx,16 |
4187 | eAndrew | 1003 | add ecx,1 ; задаем начальное положение |
1004 | mov eax,13 ; Функция 13 - нарисовать прямоугольник |
||
3004 | leency | 1005 | int 0x40 |
4187 | eAndrew | 1006 | push ebx ; сохраняем для следующего ползунка x+w |
1007 | sub ebx,8 ; так как ширина линии 11 то отнимаем 8 чтобы кубик стал шириной 3 |
||
1008 | add ebx,8 shl 16 ; Координаты по x для квадрата на ползунке смещаем на 8 в право |
||
1009 | inc ecx ; быдлокодим высоту ползунка до 3-х (1+1=2) |
||
1010 | inc ecx ; (2+1=3) ну вот у нас будет кубик 3х3 на 8 в право от линии |
||
1011 | int 0x40 ; рисуем |
||
1012 | pop ebx ; восстанавливаем нормальные координаты |
||
1013 | ret ; Возвращаем управление |
||
3004 | leency | 1014 | |
1015 | ;end_slider |
||
1016 | |||
1017 | draw_value: |
||
1018 | ;................................................................................................. |
||
3091 | leency | 1019 | ; Вывод числа из строки в указанной области |
3004 | leency | 1020 | ;................................................................................................. |
4187 | eAndrew | 1021 | push ebx ; сохраняем присланные координаты |
1022 | mov ebx,10 ; устанавливаем основание системы счисления |
||
1023 | mov edi,buff ; указатель на строку буфера |
||
1024 | call int2ascii ; конвертируем число и ложим как строку в буфер + esi длина |
||
1025 | mov eax,4 ; функция 4: написать текст в окне |
||
1026 | pop ebx ; достаем из стека присланные координаты |
||
1027 | cmp esi,2 ; ЦЕНТРИРОВАНИЕ ТЕКСТА |
||
3088 | leency | 1028 | jne draw_value_1 |
1029 | add ebx,4 shl 16 |
||
1030 | jmp draw_value_e |
||
1031 | draw_value_1: |
||
1032 | cmp esi,1 |
||
1033 | jne draw_value_e |
||
1034 | add ebx,7 shl 16 |
||
1035 | draw_value_e: |
||
4187 | eAndrew | 1036 | mov ecx,0x0 ; цвет текста RRGGBB |
1037 | mov edx,buff ; указатель на начало текста |
||
3088 | leency | 1038 | int 0x40 |
4187 | eAndrew | 1039 | ret ; Возвращаем управление |
3004 | leency | 1040 | ;end_draw_value |
1041 | |||
3099 | Akyltist | 1042 | _read_params: |
1043 | |||
4962 | eAndrew | 1044 | mov al,[params+2] |
1045 | mov [params_c+0],al |
||
3099 | Akyltist | 1046 | |
4962 | eAndrew | 1047 | mov al,[params+3] |
1048 | mov [params_c+1],al |
||
3099 | Akyltist | 1049 | |
4962 | eAndrew | 1050 | mov al,[params+4] |
1051 | mov [params_c+2],al |
||
3099 | Akyltist | 1052 | |
4962 | eAndrew | 1053 | mov al,[params+5] |
1054 | mov [params_c+3],al |
||
1055 | |||
1056 | mov al,[params+6] |
||
1057 | mov [params_c+4],al |
||
1058 | |||
1059 | mov al,[params+7] |
||
1060 | mov [params_c+5],al |
||
1061 | |||
1062 | mov al,[params+8] |
||
1063 | mov [params_c+6],al |
||
1064 | |||
1065 | mov al,[params+9] |
||
1066 | mov [params_c+7],al |
||
1067 | |||
1068 | mov esi,params_c |
||
1069 | mov ecx,16 |
||
1070 | call ascii2int |
||
1071 | mov [color],eax |
||
1072 | |||
1073 | mov al,[params+11] |
||
1074 | mov [params_c+0],al |
||
1075 | |||
1076 | mov al,[params+12] |
||
1077 | mov [params_c+1],al |
||
1078 | |||
1079 | mov al,[params+13] |
||
1080 | mov [params_c+2],al |
||
1081 | |||
1082 | mov al,[params+14] |
||
1083 | mov [params_c+3],al |
||
1084 | |||
1085 | mov al,[params+15] |
||
1086 | mov [params_c+4],al |
||
1087 | |||
1088 | mov al,[params+16] |
||
1089 | mov [params_c+5],al |
||
1090 | |||
1091 | mov al,[params+17] |
||
1092 | mov [params_c+6],al |
||
1093 | |||
1094 | mov al,[params+18] |
||
1095 | mov [params_c+7],al |
||
1096 | |||
1097 | mov esi,params_c |
||
1098 | mov ecx,16 |
||
1099 | call ascii2int |
||
1100 | mov [color2],eax |
||
1101 | |||
3099 | Akyltist | 1102 | ret |
1103 | |||
3004 | leency | 1104 | hex_digit: |
1105 | ;................................................................................................. |
||
3091 | leency | 1106 | ; Преобразование в ASCII (вне зависимости от системы счисления) |
3004 | leency | 1107 | ;................................................................................................. |
4187 | eAndrew | 1108 | cmp dl,10 ; в dl ожидается число от 0 до 15 |
1109 | jb .less ; если dl<10 то переходим |
||
1110 | add dl,'A'-10 ; 10->A 11->B 12->C ... |
||
1111 | ret ; Возвращаем управление |
||
3004 | leency | 1112 | .less: |
4187 | eAndrew | 1113 | or dl,'0' ; Если система счисления 10-я и менее |
1114 | ret ; Возвращаем управление |
||
3004 | leency | 1115 | ;end_hex_digit |
1116 | |||
1117 | int2ascii: |
||
1118 | ;................................................................................................. |
||
3091 | leency | 1119 | ; Преобразование числа в строку |
3004 | leency | 1120 | ;................................................................................................. |
3091 | leency | 1121 | ; eax - 32-х значное число |
1122 | ; ebx - основание системы счисления |
||
1123 | ; edi - указатель на строку буфера |
||
1124 | ; Возвращает заполненный буфер и esi - длина строки |
||
3004 | leency | 1125 | ;pushad |
4187 | eAndrew | 1126 | xor esi,esi ; зануляем счетчик символов |
3004 | leency | 1127 | convert_loop: |
4187 | eAndrew | 1128 | xor edx,edx ; зануляем регистр под остаток |
1129 | div ebx ; eax/ebx - остаток в edx |
||
1130 | call hex_digit ; преобразуем символ |
||
1131 | push edx ; ложим в стек |
||
1132 | inc esi ; увеличиваем счетчик |
||
1133 | test eax,eax ; если еще можно делить |
||
1134 | jnz convert_loop ; то делием еще |
||
1135 | cld ; ОБЯЗАТЕЛЬНО сбрасываем флаг направления DF (запись вперёд) |
||
1136 | write_loop: ; иначе |
||
1137 | pop eax ; достаем из стека в еах |
||
1138 | stosb ; записываем в буфер по адресу ES:(E)DI |
||
1139 | dec esi ; уменьшаем счетчик |
||
1140 | test esi,esi ; если есть что доставать из стека |
||
1141 | jnz write_loop ; то достаём |
||
1142 | mov byte [edi],0 ; иначе дописыываем нулевой байт |
||
3091 | leency | 1143 | ;popad ; восстанавливаем значения регистров |
1144 | ; код ниже не имеет ничего общего к функции, просто возвращает еще длинну полученной строки |
||
4187 | eAndrew | 1145 | mov edi,buff ; указатель на начало текста |
3004 | leency | 1146 | call str_len |
1147 | mov esi,eax |
||
4187 | eAndrew | 1148 | ret ; и возвращаем управление |
3004 | leency | 1149 | ;end_int2ascii |
1150 | |||
3099 | Akyltist | 1151 | char2byte: |
1152 | sub al,'0' |
||
1153 | cmp al,10 |
||
4187 | eAndrew | 1154 | jb done |
3099 | Akyltist | 1155 | add al,'0' |
1156 | and al,0x5f |
||
1157 | sub al,'A'-10 |
||
1158 | and al,0x0f |
||
1159 | done: |
||
1160 | ret |
||
1161 | ;end_char2byte |
||
1162 | |||
1163 | ascii2int: |
||
1164 | ;................................................................................................. |
||
1165 | ; Преобразование строки в число |
||
1166 | ;................................................................................................. |
||
1167 | ; esi - указатель на нультерминированную строку |
||
1168 | ; ecx - основание системы счисления |
||
1169 | ; Возвращает eax - число |
||
1170 | push esi |
||
1171 | xor eax,eax |
||
1172 | xor ebx,ebx |
||
1173 | cmp byte [esi],'-' |
||
1174 | jnz .next |
||
1175 | inc esi |
||
1176 | .next: |
||
1177 | lodsb |
||
1178 | or al,al |
||
1179 | jz .done |
||
1180 | call char2byte |
||
1181 | imul ebx,ecx |
||
1182 | add ebx,eax |
||
1183 | jmp .next |
||
1184 | .done: |
||
1185 | xchg ebx,eax |
||
1186 | pop esi |
||
1187 | cmp byte [esi],'-' |
||
1188 | jz .negate |
||
1189 | ret |
||
1190 | .negate: |
||
1191 | neg eax |
||
1192 | ret |
||
1193 | ;end_ascii2int |
||
1194 | |||
3004 | leency | 1195 | get_spectr: |
1196 | ;................................................................................................. |
||
3091 | leency | 1197 | ; возвращает r,g,b состовляющие цвета |
3004 | leency | 1198 | ;................................................................................................. |
1199 | mov ecx,[color] |
||
3088 | leency | 1200 | mov [cblue],cl |
1201 | shr ecx,8 |
||
1202 | mov [cgreen],cl |
||
1203 | shr ecx,8 |
||
1204 | mov [cred],cl |
||
1205 | shr ecx,8 |
||
1206 | mov [calpha],cl |
||
4187 | eAndrew | 1207 | ret ; и возвращаем управление |
3004 | leency | 1208 | ;end_get_spectr |
1209 | |||
1210 | set_spectr: |
||
1211 | ;................................................................................................. |
||
3091 | leency | 1212 | ; устанавливает из r,g,b цвет |
3004 | leency | 1213 | ;................................................................................................. |
3088 | leency | 1214 | movzx eax,[calpha] |
3004 | leency | 1215 | shl eax,8 |
3088 | leency | 1216 | mov al,[cred] |
1217 | shl eax,8 |
||
3004 | leency | 1218 | mov al,[cgreen] |
1219 | shl eax,8 |
||
1220 | mov al,[cblue] |
||
1221 | mov [color],eax |
||
4187 | eAndrew | 1222 | call draw_result ; Выводим результат |
1223 | ret ; и возвращаем управление |
||
3004 | leency | 1224 | ;end_get_spectr |
1225 | |||
1226 | str_len: |
||
1227 | ;................................................................................................. |
||
3091 | leency | 1228 | ; определяет длину строки (вход->EDI ZS offset ; выход->EAX ZS length) |
3004 | leency | 1229 | ;................................................................................................. |
1230 | push ecx |
||
1231 | push esi |
||
1232 | push edi |
||
1233 | |||
1234 | cld |
||
1235 | xor al, al |
||
1236 | mov ecx, 0FFFFFFFFh |
||
1237 | mov esi, edi |
||
1238 | repne scasb |
||
1239 | sub edi, esi |
||
1240 | mov eax, edi |
||
1241 | dec eax |
||
1242 | |||
1243 | pop edi |
||
1244 | pop esi |
||
1245 | pop ecx |
||
1246 | |||
1247 | ret |
||
1248 | ;end_str_len |
||
3099 | Akyltist | 1249 | |
1250 | |||
4962 | eAndrew | 1251 | ;------------------------------- |
3099 | Akyltist | 1252 | |
4962 | eAndrew | 1253 | proc random uses ebx ecx edx, max_value |
1254 | mov ebx, 0 |
||
1255 | mov eax, ebx |
||
1256 | or eax, eax |
||
1257 | jnz @f |
||
1258 | rdtsc |
||
1259 | xor eax, edx |
||
1260 | mov ebx, eax |
||
1261 | |||
1262 | @@: |
||
1263 | xor edx, edx |
||
1264 | mov ecx, 127773 |
||
1265 | div ecx |
||
1266 | mov ecx, eax |
||
1267 | mov eax, 16807 |
||
1268 | mul edx |
||
1269 | mov edx, ecx |
||
1270 | mov ecx, eax |
||
1271 | mov eax, 2836 |
||
1272 | mul edx |
||
1273 | sub ecx, eax |
||
1274 | xor edx, edx |
||
1275 | mov eax, ecx |
||
1276 | mov ebx, ecx |
||
1277 | mov ecx, 100000 |
||
1278 | div ecx |
||
1279 | mov eax, edx |
||
1280 | |||
1281 | xor edx, edx |
||
1282 | mov ebx, [max_value] |
||
1283 | div ebx |
||
1284 | mov eax, edx |
||
1285 | |||
1286 | ret |
||
1287 | endp |
||
1288 | |||
1289 | set_background2: |
||
1290 | mcall 68, 11 |
||
1291 | mcall 68, 12, 256 * 256 * 3 |
||
1292 | mov [image], eax |
||
1293 | |||
1294 | mov edx, eax |
||
1295 | mov ecx, 256 * 256 |
||
1296 | @@: |
||
1297 | stdcall random, 15 + 1 |
||
1298 | sub al, 15 / 2 |
||
1299 | |||
1300 | mov bh, byte [color + 0] |
||
1301 | add bh, al |
||
1302 | mov [edx + 0], bh |
||
1303 | mov bh, byte [color + 1] |
||
1304 | add bh, al |
||
1305 | mov [edx + 1], bh |
||
1306 | mov bh, byte [color + 2] |
||
1307 | add bh, al |
||
1308 | mov [edx + 2], bh |
||
1309 | add edx, 3 |
||
1310 | loop @b |
||
1311 | |||
1312 | mcall 15, 1, 256, 256 |
||
1313 | mcall 15, 4, 1 |
||
1314 | mcall 15, 5, [image], 0, 256 * 256 * 3 |
||
1315 | mcall 15, 3 |
||
1316 | |||
1317 | mcall 68, 13, [image] |
||
1318 | ret |
||
1319 | |||
3004 | leency | 1320 | ;#___________________________________________________________________________________________________ |
1321 | ;****************************************************************************************************| |
||
3091 | leency | 1322 | ; БЛОК ПЕРЕМЕННЫХ И КОНСТАНТ | |
3004 | leency | 1323 | ;----------------------------------------------------------------------------------------------------/ |
3453 | Akyltist | 1324 | circle: |
4962 | eAndrew | 1325 | title db 'Palitra v0.76',0 ; хранит имя программы |
4187 | eAndrew | 1326 | hidden db 'Hidden',0 |
1327 | hex db '#',0 ; для вывода решётки как текста |
||
1328 | cname db 'RGBAx' ; хранит разряды цветов (red,green,blue) x-метка конца |
||
1329 | larrow db 0x1A,0 |
||
1330 | buff db '000',0 |
||
1331 | bground db 'BACKGROUND',0 ; имя кнопки - 14 |
||
4962 | eAndrew | 1332 | bground1 db 'Gradient',0 ; имя кнопки - 14 |
1333 | bground2 db 'Noisy',0 ; имя кнопки - 14 |
||
4187 | eAndrew | 1334 | runmode dd 1 ; режим запуска (1-normal, 2-hidden, 3-colordialog) |
4962 | eAndrew | 1335 | color2 dd 00FFFFFFh ; хранит значение второго выбранного цвета |
1336 | |||
1337 | |||
1338 | |||
4187 | eAndrew | 1339 | I_END: |
4962 | eAndrew | 1340 | cm rb 12 |
1341 | color rd 1 ; хранит значение выбранного цвета |
||
1342 | mouse_x rd 1 ; хранит глобальную х координату мыши |
||
1343 | mouse_y rd 1 ; хранит глобальную у координату мыши |
||
1344 | mouse_f rd 1 ; хранит данные о том какая кнопка мыши была нажата |
||
1345 | desctop_w rd 1 ; хранит ширину экрана |
||
1346 | desctop_h rd 1 ; хранит высоту экрана |
||
1347 | sc system_colors ; хранит структуру системных цветов скина |
||
1348 | cred rb 1 ; храним красный спекрт |
||
1349 | cgreen rb 1 ; храним зеленый спектр |
||
1350 | cblue rb 1 ; храним синий спектр |
||
1351 | calpha rb 1 ; храним прозрачность |
||
1352 | pnext rd 1 ; счетчик переключения палитры |
||
1353 | renmode rd 1 ; режим отрисовки (1-цветовая схема,2-пипетка,3-круговая) |
||
1354 | params rb 20 ; приём параметров |
||
1355 | params_c rb 9 ; приёмник для цвета |
||
3453 | Akyltist | 1356 | |
4962 | eAndrew | 1357 | image rd 1 |
3453 | Akyltist | 1358 | |
3004 | leency | 1359 | |
4962 | eAndrew | 1360 | rd 1024 |
1361 | I_MEM:10>------+ |