Rev 9472 | 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 |
||
9470 | leency | 68 | org 0 |
69 | db 'MENUET01' |
||
70 | dd 1,START,I_END,I_MEM,stacktop,params,sys_path |
||
3004 | leency | 71 | |
4187 | eAndrew | 72 | include '../../../macros.inc' |
4962 | eAndrew | 73 | include '../../../proc32.inc' |
7421 | leency | 74 | include '../../../KOSfuncs.inc' |
75 | include '../../../dll.inc' |
||
3004 | leency | 76 | |
9541 | leency | 77 | include 'draw_sliders.inc' |
78 | include 'draw_utils.inc' |
||
79 | include 'draw_palitra.inc' |
||
80 | |||
81 | |||
82 | |||
9472 | leency | 83 | WIN_W = 394 ; ширина окна |
84 | WIN_H = 251 ; высота окна |
||
85 | WIN_X = 250 ; координата х окна |
||
86 | WIN_Y = 190 ; координата у окна |
||
9541 | leency | 87 | |
88 | Left_Border=4 |
||
89 | SliderPanel_W = 110 |
||
9472 | leency | 90 | DRAWY = 9 |
9541 | leency | 91 | |
92 | CELLW = 11; 11 ; not used yet, but has to be :) |
||
93 | |||
9472 | leency | 94 | ICONX = WIN_W - 35 |
95 | SLIDEW = 25 |
||
3099 | Akyltist | 96 | |
9541 | leency | 97 | palitra_x = Left_Border+SliderPanel_W+12 |
98 | palitra_w = CELLW*(8)+8+1 |
||
99 | palitra_xw = palitra_x shl 16 + palitra_w |
||
100 | palitra_yw = DRAWY shl 16 + palitra_w |
||
101 | |||
3004 | leency | 102 | START: |
7421 | leency | 103 | mcall SF_SYS_MISC,SSF_HEAP_INIT ; инициализация кучи |
9472 | leency | 104 | mcall SF_SYS_MISC, SSF_MEM_OPEN, i18_name |
105 | mov [icons18], eax |
||
106 | mcall SF_SYS_MISC, SSF_MEM_OPEN, i18bg_name |
||
107 | mov [icons18bg], eax |
||
108 | |||
7421 | leency | 109 | stdcall dll.Load, @IMPORT |
110 | or eax,eax |
||
111 | jnz bexit |
||
9472 | leency | 112 | mcall SF_SET_EVENTS_MASK,EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE ; устанавливаем маску событий |
9470 | leency | 113 | include 'params_init.inc' ; обработка параметров командной строки |
3099 | Akyltist | 114 | |
3004 | leency | 115 | ;#___________________________________________________________________________________________________ |
116 | ;****************************************************************************************************| |
||
3091 | leency | 117 | ; ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ - ОБРАБОТКА СОБЫТИЙ | |
3004 | leency | 118 | ;----------------------------------------------------------------------------------------------------/ |
119 | red: |
||
9470 | leency | 120 | call draw_main ; вызываем перерисовку окна приложения |
3004 | leency | 121 | still: |
9470 | leency | 122 | mcall SF_WAIT_EVENT ; функция 10 - ждать события |
9472 | leency | 123 | cmp eax,EV_REDRAW ; перерисовать окно ? |
9470 | leency | 124 | je red ; если да - на метку red |
9472 | leency | 125 | cmp eax,EV_KEY ; нажата клавиша ? |
9470 | leency | 126 | je key ; если да - на key |
9472 | leency | 127 | cmp eax,EV_BUTTON ; нажата кнопка ? |
9470 | leency | 128 | je button ; если да - на button |
9472 | leency | 129 | cmp eax,EV_MOUSE ; событие от мыши вне окна |
9470 | leency | 130 | je mouse ; если да - на button |
131 | jmp still ; если другое событие - в начало цикла |
||
3004 | leency | 132 | ;end_still |
133 | |||
9470 | leency | 134 | key: ; нажата клавиша на клавиатуре |
135 | mcall SF_GET_KEY ; функция 2 - считать код символа (в ah) (тут в принципе не нужна) |
||
136 | jmp still ; вернуться к началу цикла |
||
3004 | leency | 137 | ;end_key |
138 | |||
3453 | Akyltist | 139 | mouse: |
3904 | leency | 140 | cmp [renmode],2 |
141 | jne left |
||
3453 | Akyltist | 142 | call cyrcle_draw |
3904 | leency | 143 | jmp center |
144 | left: |
||
7421 | leency | 145 | mcall SF_MOUSE_GET,SSF_BUTTON |
3904 | leency | 146 | cmp al,1b |
147 | jne right |
||
148 | mov [mouse_f],1 |
||
149 | jmp still |
||
150 | right: |
||
151 | cmp al,10b |
||
152 | jne still |
||
153 | mov [mouse_f],2 |
||
154 | jmp still |
||
155 | center: |
||
7421 | leency | 156 | mcall SF_MOUSE_GET,SSF_BUTTON |
3453 | Akyltist | 157 | cmp al,100b |
158 | jne still |
||
3904 | leency | 159 | mov [mouse_f],3 |
3453 | Akyltist | 160 | mov [color],edx |
161 | call draw_result |
||
9470 | leency | 162 | jmp still ; вернуться к началу цикла |
3453 | Akyltist | 163 | ;end_mouse |
164 | |||
3004 | leency | 165 | button: |
9470 | leency | 166 | mcall SF_GET_BUTTON ; 17 - получить идентификатор нажатой кнопки |
167 | cmp ah, 1 ; если нажата кнопка с номером 1, |
||
168 | jz bexit ; выходим |
||
3091 | leency | 169 | ;обработка кнопки Next |
9470 | leency | 170 | cmp ah, 12 ; если нажата кнопка NEXT |
171 | jne next_bg ; выходим |
||
172 | inc [pnext] ; увеличиваем при нажатии номер палитры |
||
173 | mov [renmode],0 ; включаем цветовые схемы |
||
174 | mov eax,[pnext] ; заносим значение в еах |
||
175 | cmp al,6 ; сравниваем с заявленным количеством палитр |
||
176 | jne next_redraw ; если не больше максимума то на вызов отрисовки |
||
177 | xor eax,eax ; иначе зануляем палитру на default |
||
178 | mov [pnext],eax ; и запоминаем что сбросили палитру на default |
||
3026 | leency | 179 | next_redraw: |
9470 | leency | 180 | call draw_palitra ; РИСУЕМ ПАЛИТРУ |
181 | jmp still ; Уходим на ожидание другого события |
||
3091 | leency | 182 | next_bg: |
9470 | leency | 183 | cmp ah, 14 ; Кнопка BACKGROUND |
184 | jne next_bg2 ; если не нажата то выходим |
||
185 | call set_background ; иначе устанавливаем фон |
||
186 | jmp still ; и на ожидание события |
||
4962 | eAndrew | 187 | next_bg2: |
9470 | leency | 188 | cmp ah, 16 ; Кнопка BACKGROUND |
189 | jne circle_bg ; если не нажата то выходим |
||
190 | call set_background2 ; иначе устанавливаем фон |
||
191 | jmp still ; и на ожидание события |
||
3091 | leency | 192 | circle_bg: |
9470 | leency | 193 | cmp ah, 15 ; Кнопка Круговая палитра |
194 | jne next_end ; если не нажата то выходим |
||
195 | mov [renmode],2 ; включаем отрисовку круговой палитры |
||
196 | call draw_palitra ; РИСУЕМ ПАЛИТРУ |
||
197 | jmp still ; и на ожидание события |
||
3026 | leency | 198 | next_end: |
9470 | leency | 199 | cmp ah,13 ; COLOR SWAP |
3088 | leency | 200 | jne color_swap_end |
201 | push [color2] |
||
202 | push [color] |
||
203 | pop [color2] |
||
204 | pop [color] |
||
205 | call draw_result |
||
9470 | leency | 206 | jmp still ; И уходим на ожидание другого события |
3088 | leency | 207 | color_swap_end: |
9470 | leency | 208 | cmp ah, 7 ; Проверяем нажата кнопка с ID=7 |
209 | jne color_button ; Если не нажата, то идём дальше |
||
210 | call mouse_get ; Иначе включаем обработчик мыши, чтобы считать значение цвета с палитры |
||
211 | jmp still ; И уходим на ожидание другого события |
||
212 | color_button: ; РАСЧЁТ координат для ползунков RGBA |
||
213 | push eax ; запоминаем еах |
||
214 | call mouse_local ; получаем локальные координаты |
||
215 | mov ebx, 188;137 ; нижняя граница ползунка по У |
||
216 | mov ecx,[mouse_y] ; занисим в есх значение курсора по У |
||
217 | sub ebx,ecx ; находим разность (т.е. куда смещается ползунок) |
||
218 | mov ecx, 2;3 ; заносим в есх цифру 3 (256/3=85, где 85-высота ползунков) |
||
219 | imul ecx,ebx ; находим истинный параметр цвета с учётом масштаба ползунка---+ |
||
220 | pop eax ; восстанавливаем еах : |
||
3091 | leency | 221 | ;red_button: ; Красный Трекбар : |
9470 | leency | 222 | cmp ah, 8 ; ID=8 : |
223 | jne green_button ; если нет, то проверяем зелёный трекбар : |
||
224 | mov [cred],cl ; иначе присваиваем значение, красному цвету спектра <------+ |
||
225 | call set_spectr ; устанавливаем спектр |
||
226 | jmp still ; Уходим на ожидание другого события |
||
3004 | leency | 227 | green_button: |
228 | cmp ah, 9 |
||
229 | jne blue_button |
||
230 | mov [cgreen],cl |
||
231 | call set_spectr |
||
9470 | leency | 232 | jmp still ; Уходим на ожидание другого события |
3004 | leency | 233 | blue_button: |
234 | cmp ah, 10 |
||
3088 | leency | 235 | jne alpha_button |
3004 | leency | 236 | mov [cblue],cl |
237 | call set_spectr |
||
9470 | leency | 238 | jmp still ; Уходим на ожидание другого события |
3088 | leency | 239 | alpha_button: |
240 | cmp ah, 11 |
||
241 | jne still |
||
242 | mov [calpha],cl |
||
243 | call set_spectr |
||
9470 | leency | 244 | jmp still ; Уходим на ожидание другого события |
3004 | leency | 245 | bexit: |
7421 | leency | 246 | mcall SF_TERMINATE_PROCESS ; иначе конец программы |
3004 | leency | 247 | ;end_button |
248 | |||
249 | ;#___________________________________________________________________________________________________ |
||
250 | ;****************************************************************************************************| |
||
3091 | leency | 251 | ; ГЛАВНЫЙ МОДУЛЬ ОТРИСОВКИ ОКНА И ЭЛЕМЕНТОВ ПРИЛОЖЕНИЯ | |
3004 | leency | 252 | ;----------------------------------------------------------------------------------------------------/ |
3091 | leency | 253 | draw_main: |
7421 | leency | 254 | ; функция 12: означает, что будет рисоваться окно |
9470 | leency | 255 | mcall SF_REDRAW,SSF_BEGIN_DRAW |
3004 | leency | 256 | |
7421 | leency | 257 | ; Функция 48 - стили отображения окон |
258 | mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors |
||
3004 | leency | 259 | |
7421 | leency | 260 | ; Функция 48 - стили отображения окон |
261 | mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT |
||
9470 | leency | 262 | mov ecx,eax ; Запоминаем высоту скина |
3004 | leency | 263 | |
3099 | Akyltist | 264 | mov edi,[runmode] |
265 | cmp edi,2 |
||
266 | jne no_hiddenmode |
||
267 | mov edi,hidden |
||
268 | jmp set_title |
||
269 | no_hiddenmode: |
||
270 | cmp edi,3 |
||
271 | jne no_dialogmode |
||
272 | mov edi,hidden |
||
273 | jmp set_title |
||
274 | no_dialogmode: |
||
9470 | leency | 275 | mov edi,title ; Заголовок окна |
3099 | Akyltist | 276 | set_title: |
277 | |||
9470 | leency | 278 | xor eax,eax ; Очищаем eax (mov eax,0) (Функция 0) |
279 | mov ebx,WIN_X shl 16+WIN_W ; [координата по оси x]*65536 + [размер по оси x] |
||
280 | add ecx,WIN_Y shl 16+WIN_H ; Высота скина + [координата по y]*65536 + [размер по y] (168 для версии 0.2) |
||
281 | mov edx,[sc.work] ; Видимо стиль окна по дефолту |
||
282 | or edx,0x34000000 ; Или окно со скином фиксированных размеров |
||
3004 | leency | 283 | |
9470 | leency | 284 | int 0x40 ; Прерывание |
3004 | leency | 285 | |
3091 | leency | 286 | |
9470 | leency | 287 | call draw_palitra ; РИСУЕМ ПАЛИТРУ |
288 | call draw_result ; РИСУЕМ РЕЗУЛЬТАТ |
||
4187 | eAndrew | 289 | |
9541 | leency | 290 | mcall SF_DEFINE_BUTTON, |
3004 | leency | 291 | |
9472 | leency | 292 | add edx,1++BT_NOFRAME |
293 | mcall , <10,22>, <62,128> ; Рисуем невидимую кнопку под слайдером red |
||
294 | add ebx,25*65536 ; Добавляем |
||
9470 | leency | 295 | inc edx ; ID = 9 |
296 | int 0x40 ; Рисуем невидимую кнопку под слайдером green |
||
9472 | leency | 297 | add ebx,25*65536 ; Добавляем |
9470 | leency | 298 | inc edx ; ID = 10 |
299 | int 0x40 ; Рисуем невидимую кнопку под слайдером blue |
||
9472 | leency | 300 | add ebx,25*65536 ; Добавляем |
9470 | leency | 301 | inc edx ; ID = 11 |
302 | int 0x40 ; Рисуем невидимую кнопку под слайдером alpha |
||
3004 | leency | 303 | |
7421 | leency | 304 | ; Функция 8 - определить/удалить кнопку (СМЕНА ЦВЕТА) |
9472 | leency | 305 | mcall , <13,19>, <20,18>, 0x0D+BT_HIDE |
3088 | leency | 306 | |
3091 | leency | 307 | call draw_bottom_panel |
308 | call draw_left_panel |
||
3004 | leency | 309 | |
7421 | leency | 310 | ; функция 12: означает, что будет рисоваться окно |
9470 | leency | 311 | mcall SF_REDRAW,SSF_END_DRAW |
3091 | leency | 312 | ret |
3088 | leency | 313 | |
9472 | leency | 314 | |
9541 | leency | 315 | |
3091 | leency | 316 | ;#___________________________________________________________________________________________________ |
317 | ;****************************************************************************************************| |
||
318 | ; БЛОК ВСПОМОГАТЕЛЬНЫХ ПРОЦЕДУР И ФУНКЦИЙ ПРИЛОЖЕНИЯ | |
||
319 | ;----------------------------------------------------------------------------------------------------/ |
||
3004 | leency | 320 | |
3026 | leency | 321 | |
3091 | leency | 322 | ;------------------------------------------------------------------------------------------------+ |
9470 | leency | 323 | draw_left_panel: ; Отрисовка боковой панели SL97: На самом деле правой. |
3091 | leency | 324 | ;................................................................................................. |
7421 | leency | 325 | ; button_next_colorsheme |
9472 | leency | 326 | mcall SF_DEFINE_BUTTON, |
3453 | Akyltist | 327 | |
9541 | leency | 328 | ; palitra button ; ID = 14 |
329 | mcall , ,(DRAWY+150) shl 16 + 21, 14+BT_HIDE |
||
330 | |||
331 | ; pipet button ; ID = 15 |
||
332 | mcall , , (DRAWY+150) shl 16 + 21, 15+BT_HIDE |
||
333 | |||
9472 | leency | 334 | mov ebx,[icons18bg] |
335 | add ebx,18*18*4*53 |
||
336 | mcall SF_PUT_IMAGE_EXT, ebx, <18,18>, |
||
3453 | Akyltist | 337 | |
9472 | leency | 338 | add ebx,18*18*4*(39-53) |
9541 | leency | 339 | mov edx,(ICONX+2)*65536+WIN_H-90 |
9472 | leency | 340 | mcall |
9541 | leency | 341 | |
9472 | leency | 342 | mov ebx,[icons18] |
9541 | leency | 343 | add ebx,18*18*4*(53-1) |
9472 | leency | 344 | sub edx,40 |
345 | mcall |
||
9541 | leency | 346 | |
347 | stdcall DrawDeepRectangle, ICONX, DRAWY, 22, 22, [sc.work_light], [sc.work_dark] |
||
348 | |||
349 | stdcall DrawDeepRectangle, ICONX, DRAWY+110, 22, 22, [sc.work_light], [sc.work_dark] |
||
350 | |||
351 | stdcall DrawDeepRectangle, ICONX, DRAWY+150, 22, 22, [sc.work_light], [sc.work_dark] |
||
352 | |||
353 | ;stdcall DrawRectangle3D, ICONX, DRAWY, 22, 22, [sc.work_light], [sc.work_dark] ;Leency: draw rectangle around the button, buggy now |
||
354 | |||
3453 | Akyltist | 355 | ;mov eax,13 ; draw rect |
356 | ;mov ebx,266 shl 16+16 ; [x] + [size] |
||
357 | ;mov ecx,9 shl 16+16 ; [y] + [size] |
||
358 | ;mov edx,0x666666 ; RGB |
||
359 | ;push esi ; backup esi |
||
360 | ;mov esi,8 ; counter=8 |
||
361 | ;draw_lpanel: ; loop label |
||
362 | ; int 0x40 ; call draw black rect |
||
363 | ; add ecx,19 shl 16 ; move rect |
||
364 | ; dec esi ; decrement counter |
||
365 | ; cmp esi,0 ; if counter!=zero |
||
366 | ; jne draw_lpanel ; then goto label |
||
367 | ; mov esi,8 ; else counter=8 |
||
368 | ; mov ebx,267 shl 16+14 ; [x] + [size] |
||
369 | ; mov ecx,10 shl 16+14 ; [y] + [size] |
||
370 | ; mov edx,0xF3F3F3 ; RGB |
||
371 | ;draw_lpanel2: ; 2 loop label |
||
372 | ; int 0x40 ; call draw white rect |
||
373 | ; add ecx,19 shl 16 ; move rect |
||
374 | ; dec esi ; decrement counter |
||
375 | ; cmp esi,0 ; if counter!=0 |
||
376 | ; jne draw_lpanel2 ; then goto label2 |
||
377 | ;pop esi ; restore esi |
||
3091 | leency | 378 | ; draw_left_arrow for button_next_colorsheme |
3453 | Akyltist | 379 | ;mov eax,4 ; Write string |
380 | ;mov ebx,272 shl 16+13 ; [x] + [y] |
||
381 | ;mov ecx,0x0 ; RGB |
||
382 | ;mov edx,larrow ; string pointer |
||
383 | ;mov esi,1 ; count symbol |
||
384 | ;int 0x40 ; call |
||
385 | ;mov eax,38 ; draw line |
||
4187 | eAndrew | 386 | ;mov ebx,270 shl 16+272 ; [start x] + [end x] |
387 | ;mov ecx,16 shl 16+16 ; [start y] + [end y] |
||
3453 | Akyltist | 388 | ;mov edx,0x0 ; RGB |
389 | ;int 0x40 ; call |
||
9470 | leency | 390 | ret ; return |
3091 | leency | 391 | ;................................................................................................. |
3026 | leency | 392 | |
393 | |||
3091 | leency | 394 | ;------------------------------------------------------------------------------------------------+ |
9470 | leency | 395 | draw_bottom_panel: ; Отрисовка нижней панели |
3091 | leency | 396 | ;................................................................................................. |
9541 | leency | 397 | mcall SF_DEFINE_BUTTON, ((60+70) shl 16)+90, ((WIN_H-26) shl 16)+16, 14, [sc.work_button] |
4962 | eAndrew | 398 | |
399 | add ebx, 100 shl 16 |
||
400 | add edx, 2 |
||
401 | int 0x40 |
||
402 | |||
7421 | leency | 403 | ; Write string |
9470 | leency | 404 | mov ecx,[sc.work_text] ; RGB |
405 | or ecx, 1 shl 31 |
||
9541 | leency | 406 | mcall SF_DRAW_TEXT, (60) shl 16+(WIN_H-21), ,bground |
4962 | eAndrew | 407 | |
408 | mov ecx, [sc.work_button_text] |
||
9470 | leency | 409 | or ecx, 1 shl 31 |
4962 | eAndrew | 410 | |
9470 | leency | 411 | add ebx, 90 shl 16 |
4962 | eAndrew | 412 | mov edx, bground1 |
413 | int 0x40 |
||
414 | |||
9470 | leency | 415 | add ebx, 108 shl 16 |
4962 | eAndrew | 416 | mov edx, bground2 |
417 | int 0x40 |
||
418 | |||
9541 | leency | 419 | mcall SF_DRAW_LINE, 4 shl 16+(WIN_W-14), (WIN_H-32) shl 16+(WIN_H-32), 0x00666666 |
9470 | leency | 420 | ret ; return |
3091 | leency | 421 | ;................................................................................................. |
3026 | leency | 422 | |
3004 | leency | 423 | mouse_global: |
424 | ;................................................................................................. |
||
3091 | leency | 425 | ; Получаем координаты мыши |
3004 | leency | 426 | ;................................................................................................. |
7421 | leency | 427 | mcall SF_MOUSE_GET,SSF_SCREEN_POSITION |
428 | ; eax = x*65536 + y, (x,y)=координаты курсора мыши |
||
9470 | leency | 429 | mov ecx,eax ; |
430 | shr ecx,16 ; ecx = x+1 |
||
431 | movzx edx,ax ; edx = y+1 |
||
432 | dec ecx ; ecx = x |
||
433 | dec edx ; edx = y |
||
434 | mov [mouse_x],ecx ; mouse_x = x |
||
435 | mov [mouse_y],edx ; mouse_y = y |
||
436 | ret ; Возвращаем управление |
||
3004 | leency | 437 | ;end_mouse_global |
438 | |||
439 | mouse_local: |
||
440 | ;................................................................................................. |
||
3091 | leency | 441 | ; Получаем координаты мыши относительно окна |
3004 | leency | 442 | ;................................................................................................. |
7421 | leency | 443 | mcall SF_MOUSE_GET,SSF_WINDOW_POSITION |
9470 | leency | 444 | ; eax = x*65536 + y, (x,y)=координаты курсора мыши |
445 | mov ecx,eax ; |
||
446 | shr ecx,16 ; ecx = x+1 |
||
447 | movzx edx,ax ; edx = y+1 |
||
448 | dec ecx ; ecx = x |
||
449 | dec edx ; edx = y |
||
450 | mov [mouse_x],ecx ; mouse_x = x |
||
451 | mov [mouse_y],edx ; mouse_y = y |
||
452 | ret ; Возвращаем управление |
||
3004 | leency | 453 | ;end_mouse_local |
454 | |||
3091 | leency | 455 | set_background: |
456 | ;................................................................................................. |
||
457 | ; Устанавливает фон рабочего стола |
||
458 | ;................................................................................................. |
||
7421 | leency | 459 | ; Функция 15 - работа с фоновой графикой |
460 | ; Подфункция 4 - установить режим отрисовки фона. |
||
461 | ; Режим отрисовки - замостить (1), растянуть (2) |
||
462 | mcall SF_BACKGROUND_SET,SSF_MODE_BG,2 |
||
3091 | leency | 463 | |
7421 | leency | 464 | ; Функция 15 - работа с фоновой графикой |
465 | ; Подфункция 1 - установить размер фонового изображения. |
||
466 | mcall SF_BACKGROUND_SET,SSF_SIZE_BG,2,2 |
||
3091 | leency | 467 | |
468 | mov eax,[color] |
||
469 | mov [cm+0],al |
||
470 | mov [cm+9],al |
||
471 | shr eax,8 |
||
472 | mov [cm+1],al |
||
473 | mov [cm+10],al |
||
474 | shr eax,8 |
||
475 | mov [cm+2],al |
||
476 | mov [cm+11],al |
||
477 | |||
478 | mov eax,[color2] |
||
479 | mov [cm+3],al |
||
480 | mov [cm+6],al |
||
481 | shr eax,8 |
||
482 | mov [cm+4],al |
||
483 | mov [cm+7],al |
||
484 | shr eax,8 |
||
485 | mov [cm+5],al |
||
486 | mov [cm+8],al |
||
487 | |||
7421 | leency | 488 | ; Функция 15 - работа с фоновой графикой |
489 | ; Подфункция 5 - поместить блок пикселей на фон. |
||
490 | ; - Указатель на данные в формате BBGGRRBBGGRR |
||
491 | ; - Cмещение в данных фонового изображения |
||
492 | ; - Размер данных в байтах = 3 * число пикселей |
||
493 | mcall SF_BACKGROUND_SET,SSF_IMAGE_BG,cm,0,3*4 |
||
3091 | leency | 494 | |
7421 | leency | 495 | ; Функция 15 - работа с фоновой графикой |
496 | ; Подфункция 3 - перерисовать фон. |
||
497 | mcall SF_BACKGROUND_SET,SSF_REDRAW_BG |
||
3091 | leency | 498 | |
7423 | leency | 499 | stdcall save_eskin_ini, 'H ' |
7421 | leency | 500 | |
3091 | leency | 501 | ret |
502 | ;end_set_background |
||
503 | |||
3004 | leency | 504 | desktop_get: |
505 | ;................................................................................................. |
||
3091 | leency | 506 | ; Определяем ширину экрана |
3004 | leency | 507 | ;................................................................................................. |
7421 | leency | 508 | ; Определяем ширину экрана (eax = [xsize]*65536 + [ysize]) |
509 | mcall SF_GET_SCREEN_SIZE ; xsize = размер по горизонтали - 1 |
||
9470 | leency | 510 | mov ebx,eax ; |
511 | shr ebx,16 ; ebx = xsize-1 |
||
512 | movzx edx,ax ; edx = ysize-1 (лишний код) |
||
513 | inc ebx ; ebx = xsize |
||
514 | inc edx ; edx = ysize (лишний код) |
||
3004 | leency | 515 | mov [desctop_w],ebx |
3453 | Akyltist | 516 | mov [desctop_h],edx |
3004 | leency | 517 | ret |
518 | ;end_desktop_get |
||
519 | |||
520 | mouse_get: |
||
9470 | leency | 521 | mov esi,2 ; КОСТЫЛЬ: флаг для избежания зацикливания |
3004 | leency | 522 | call mouse_global |
523 | call desktop_get |
||
9470 | leency | 524 | re_mouse_loop: ; КОСТЫЛЬ: метка для возврата если попали в сетку |
3004 | leency | 525 | mov ebx,[desctop_w] |
9470 | leency | 526 | imul ebx,[mouse_y] ; ebx = y*xsize |
527 | add ebx,[mouse_x] ; ebx = y*xsize+x |
||
3004 | leency | 528 | |
529 | ;................................................................................................. |
||
3091 | leency | 530 | ; Берем цвет с палитры в переменную |
3004 | leency | 531 | ;................................................................................................. |
7421 | leency | 532 | ;mov ebx,ecx ;; ebx = y*xsize+x (лишний код) |
533 | mcall SF_GET_PIXEL ; Получаем цвет в eax |
||
9470 | leency | 534 | cmp eax,[sc.work] ; Сравниваем с фоном приложения |
535 | je mouse_err ; Если это он - то ничего не делаем |
||
536 | cmp eax,0x222222 ; Сравниваем с цветом сетки |
||
537 | je mouse_err ; Если это он - то ничего не делаем |
||
538 | jmp mouse_set ; КОСТЫЛЬ: прыгаем чтобы не брать цвет сетки |
||
539 | mouse_err: ; КОСТЫЛЬ: если попали в сетку или фон |
||
540 | inc [mouse_y] ; КОСТЫЛЬ: смещаем по диагонали сначала по х |
||
541 | inc [mouse_x] ; КОСТЫЛЬ: смещаем по диагонали потом по у |
||
542 | dec esi ; КОСТЫЛЬ: Уменьшаем флаг |
||
543 | cmp esi,0 ; КОСТЫЛЬ: Сравниваем с нулем |
||
544 | jz mouse_exit ; КОСТЫЛЬ: Если ноль то сделали всё что могли |
||
545 | jmp re_mouse_loop ; КОСТЫЛЬ: Если не ноль то попробуем взять соселний пиксель |
||
546 | mouse_set: ; Иначе запоминаем новый цвет |
||
3904 | leency | 547 | cmp [mouse_f],1 |
548 | jne was_right |
||
549 | mov [color],eax |
||
550 | call draw_result |
||
551 | jmp mouse_exit |
||
552 | was_right: |
||
553 | cmp [mouse_f],2 |
||
554 | jne mouse_exit |
||
555 | mov [color2],eax |
||
9470 | leency | 556 | call draw_result ; Выводим результат |
3004 | leency | 557 | mouse_exit: |
9470 | leency | 558 | ret ; Возвращаем управление |
3004 | leency | 559 | ;end_mouse_get---------------------------------------------------------------------------------------- |
560 | |||
3091 | leency | 561 | |
562 | |||
563 | |||
3453 | Akyltist | 564 | |
565 | |||
3004 | leency | 566 | draw_value: |
567 | ;................................................................................................. |
||
3091 | leency | 568 | ; Вывод числа из строки в указанной области |
3004 | leency | 569 | ;................................................................................................. |
9470 | leency | 570 | push ebx ; сохраняем присланные координаты |
571 | mov ebx,10 ; устанавливаем основание системы счисления |
||
572 | mov edi,buff ; указатель на строку буфера |
||
573 | call int2ascii ; конвертируем число и ложим как строку в буфер + esi длина |
||
7421 | leency | 574 | mov eax,SF_DRAW_TEXT ; функция 4: написать текст в окне |
9470 | leency | 575 | pop ebx ; достаем из стека присланные координаты |
576 | cmp esi,2 ; ЦЕНТРИРОВАНИЕ ТЕКСТА |
||
3088 | leency | 577 | jne draw_value_1 |
578 | add ebx,4 shl 16 |
||
579 | jmp draw_value_e |
||
580 | draw_value_1: |
||
581 | cmp esi,1 |
||
582 | jne draw_value_e |
||
583 | add ebx,7 shl 16 |
||
584 | draw_value_e: |
||
9472 | leency | 585 | mov ecx,0x0;0x10000000 ; цвет текста RRGGBB |
586 | add ecx,[sc.work_text] |
||
9470 | leency | 587 | mov edx,buff ; указатель на начало текста |
3088 | leency | 588 | int 0x40 |
9470 | leency | 589 | ret ; Возвращаем управление |
3004 | leency | 590 | ;end_draw_value |
591 | |||
3099 | Akyltist | 592 | _read_params: |
593 | |||
7421 | leency | 594 | mov eax,dword[params+2] |
595 | mov dword[params_c+0],eax |
||
3099 | Akyltist | 596 | |
7421 | leency | 597 | mov eax,dword[params+6] |
598 | mov dword[params_c+4],eax |
||
3099 | Akyltist | 599 | |
4962 | eAndrew | 600 | mov esi,params_c |
601 | mov ecx,16 |
||
602 | call ascii2int |
||
603 | mov [color],eax |
||
604 | |||
7421 | leency | 605 | mov eax,dword[params+11] |
606 | mov dword[params_c+0],eax |
||
4962 | eAndrew | 607 | |
7421 | leency | 608 | mov eax,dword[params+15] |
609 | mov dword[params_c+4],eax |
||
4962 | eAndrew | 610 | |
611 | mov esi,params_c |
||
612 | mov ecx,16 |
||
613 | call ascii2int |
||
614 | mov [color2],eax |
||
615 | |||
3099 | Akyltist | 616 | ret |
617 | |||
3004 | leency | 618 | hex_digit: |
619 | ;................................................................................................. |
||
3091 | leency | 620 | ; Преобразование в ASCII (вне зависимости от системы счисления) |
3004 | leency | 621 | ;................................................................................................. |
9470 | leency | 622 | cmp dl,10 ; в dl ожидается число от 0 до 15 |
623 | jb .less ; если dl<10 то переходим |
||
624 | add dl,'A'-10 ; 10->A 11->B 12->C ... |
||
625 | ret ; Возвращаем управление |
||
3004 | leency | 626 | .less: |
9470 | leency | 627 | or dl,'0' ; Если система счисления 10-я и менее |
628 | ret ; Возвращаем управление |
||
3004 | leency | 629 | ;end_hex_digit |
630 | |||
631 | int2ascii: |
||
632 | ;................................................................................................. |
||
3091 | leency | 633 | ; Преобразование числа в строку |
3004 | leency | 634 | ;................................................................................................. |
3091 | leency | 635 | ; eax - 32-х значное число |
636 | ; ebx - основание системы счисления |
||
637 | ; edi - указатель на строку буфера |
||
638 | ; Возвращает заполненный буфер и esi - длина строки |
||
7421 | leency | 639 | push edi |
9470 | leency | 640 | xor esi,esi ; зануляем счетчик символов |
3004 | leency | 641 | convert_loop: |
9470 | leency | 642 | xor edx,edx ; зануляем регистр под остаток |
643 | div ebx ; eax/ebx - остаток в edx |
||
644 | call hex_digit ; преобразуем символ |
||
645 | push edx ; ложим в стек |
||
646 | inc esi ; увеличиваем счетчик |
||
647 | test eax,eax ; если еще можно делить |
||
648 | jnz convert_loop ; то делием еще |
||
649 | cld ; ОБЯЗАТЕЛЬНО сбрасываем флаг направления DF (запись вперёд) |
||
650 | write_loop: ; иначе |
||
651 | pop eax ; достаем из стека в еах |
||
652 | stosb ; записываем в буфер по адресу ES:(E)DI |
||
653 | dec esi ; уменьшаем счетчик |
||
654 | test esi,esi ; если есть что доставать из стека |
||
655 | jnz write_loop ; то достаём |
||
656 | mov byte [edi],0 ; иначе дописыываем нулевой байт |
||
7421 | leency | 657 | pop edi |
3091 | leency | 658 | ; код ниже не имеет ничего общего к функции, просто возвращает еще длинну полученной строки |
3004 | leency | 659 | call str_len |
660 | mov esi,eax |
||
9470 | leency | 661 | ret ; и возвращаем управление |
3004 | leency | 662 | ;end_int2ascii |
663 | |||
3099 | Akyltist | 664 | char2byte: |
665 | sub al,'0' |
||
666 | cmp al,10 |
||
9470 | leency | 667 | jb done |
3099 | Akyltist | 668 | add al,'0' |
669 | and al,0x5f |
||
670 | sub al,'A'-10 |
||
671 | and al,0x0f |
||
672 | done: |
||
673 | ret |
||
674 | ;end_char2byte |
||
675 | |||
676 | ascii2int: |
||
677 | ;................................................................................................. |
||
678 | ; Преобразование строки в число |
||
679 | ;................................................................................................. |
||
680 | ; esi - указатель на нультерминированную строку |
||
681 | ; ecx - основание системы счисления |
||
682 | ; Возвращает eax - число |
||
683 | push esi |
||
684 | xor eax,eax |
||
685 | xor ebx,ebx |
||
686 | cmp byte [esi],'-' |
||
687 | jnz .next |
||
688 | inc esi |
||
689 | .next: |
||
690 | lodsb |
||
691 | or al,al |
||
692 | jz .done |
||
693 | call char2byte |
||
694 | imul ebx,ecx |
||
695 | add ebx,eax |
||
696 | jmp .next |
||
697 | .done: |
||
698 | xchg ebx,eax |
||
699 | pop esi |
||
700 | cmp byte [esi],'-' |
||
701 | jz .negate |
||
702 | ret |
||
703 | .negate: |
||
704 | neg eax |
||
705 | ret |
||
706 | ;end_ascii2int |
||
707 | |||
3004 | leency | 708 | get_spectr: |
709 | ;................................................................................................. |
||
3091 | leency | 710 | ; возвращает r,g,b состовляющие цвета |
3004 | leency | 711 | ;................................................................................................. |
712 | mov ecx,[color] |
||
3088 | leency | 713 | mov [cblue],cl |
714 | shr ecx,8 |
||
715 | mov [cgreen],cl |
||
716 | shr ecx,8 |
||
717 | mov [cred],cl |
||
718 | shr ecx,8 |
||
719 | mov [calpha],cl |
||
9470 | leency | 720 | ret ; и возвращаем управление |
3004 | leency | 721 | ;end_get_spectr |
722 | |||
723 | set_spectr: |
||
724 | ;................................................................................................. |
||
3091 | leency | 725 | ; устанавливает из r,g,b цвет |
3004 | leency | 726 | ;................................................................................................. |
3088 | leency | 727 | movzx eax,[calpha] |
3004 | leency | 728 | shl eax,8 |
3088 | leency | 729 | mov al,[cred] |
730 | shl eax,8 |
||
3004 | leency | 731 | mov al,[cgreen] |
732 | shl eax,8 |
||
733 | mov al,[cblue] |
||
734 | mov [color],eax |
||
9470 | leency | 735 | call draw_result ; Выводим результат |
736 | ret ; и возвращаем управление |
||
3004 | leency | 737 | ;end_get_spectr |
738 | |||
739 | str_len: |
||
740 | ;................................................................................................. |
||
3091 | leency | 741 | ; определяет длину строки (вход->EDI ZS offset ; выход->EAX ZS length) |
3004 | leency | 742 | ;................................................................................................. |
9470 | leency | 743 | push ecx esi edi |
3004 | leency | 744 | |
9470 | leency | 745 | cld |
746 | xor al, al |
||
747 | mov ecx, 0FFFFFFFFh |
||
748 | mov esi, edi |
||
749 | repne scasb |
||
750 | sub edi, esi |
||
751 | mov eax, edi |
||
752 | dec eax |
||
3004 | leency | 753 | |
9470 | leency | 754 | pop edi esi ecx |
3004 | leency | 755 | |
9470 | leency | 756 | ret |
3004 | leency | 757 | ;end_str_len |
3099 | Akyltist | 758 | |
759 | |||
4962 | eAndrew | 760 | ;------------------------------- |
3099 | Akyltist | 761 | |
4962 | eAndrew | 762 | proc random uses ebx ecx edx, max_value |
763 | mov ebx, 0 |
||
764 | mov eax, ebx |
||
9470 | leency | 765 | or eax, eax |
4962 | eAndrew | 766 | jnz @f |
767 | rdtsc |
||
768 | xor eax, edx |
||
769 | mov ebx, eax |
||
770 | |||
771 | @@: |
||
772 | xor edx, edx |
||
773 | mov ecx, 127773 |
||
774 | div ecx |
||
775 | mov ecx, eax |
||
776 | mov eax, 16807 |
||
777 | mul edx |
||
778 | mov edx, ecx |
||
779 | mov ecx, eax |
||
780 | mov eax, 2836 |
||
781 | mul edx |
||
782 | sub ecx, eax |
||
783 | xor edx, edx |
||
784 | mov eax, ecx |
||
785 | mov ebx, ecx |
||
786 | mov ecx, 100000 |
||
787 | div ecx |
||
788 | mov eax, edx |
||
789 | |||
790 | xor edx, edx |
||
791 | mov ebx, [max_value] |
||
792 | div ebx |
||
793 | mov eax, edx |
||
794 | |||
795 | ret |
||
796 | endp |
||
797 | |||
798 | set_background2: |
||
7421 | leency | 799 | mcall SF_SYS_MISC, SSF_HEAP_INIT |
800 | mcall SF_SYS_MISC, SSF_MEM_ALLOC, 256 * 256 * 3 |
||
9472 | leency | 801 | mov [bgimg_buf], eax |
4962 | eAndrew | 802 | |
803 | mov edx, eax |
||
804 | mov ecx, 256 * 256 |
||
805 | @@: |
||
806 | stdcall random, 15 + 1 |
||
807 | sub al, 15 / 2 |
||
808 | |||
809 | mov bh, byte [color + 0] |
||
810 | add bh, al |
||
811 | mov [edx + 0], bh |
||
812 | mov bh, byte [color + 1] |
||
813 | add bh, al |
||
814 | mov [edx + 1], bh |
||
815 | mov bh, byte [color + 2] |
||
816 | add bh, al |
||
817 | mov [edx + 2], bh |
||
818 | add edx, 3 |
||
819 | loop @b |
||
820 | |||
7421 | leency | 821 | mcall SF_BACKGROUND_SET, SSF_SIZE_BG, 256, 256 |
822 | mcall SF_BACKGROUND_SET, SSF_MODE_BG, 1 |
||
9472 | leency | 823 | mcall SF_BACKGROUND_SET, SSF_IMAGE_BG, [bgimg_buf], 0, 256 * 256 * 3 |
7421 | leency | 824 | mcall SF_BACKGROUND_SET, SSF_REDRAW_BG |
4962 | eAndrew | 825 | |
9472 | leency | 826 | mcall SF_SYS_MISC, SSF_MEM_FREE, [bgimg_buf] |
7423 | leency | 827 | stdcall save_eskin_ini, 'B ' |
4962 | eAndrew | 828 | ret |
829 | |||
7423 | leency | 830 | align 4 |
831 | proc save_eskin_ini, opt_HB:dword |
||
9470 | leency | 832 | ;save to file eskin.ini |
833 | xor al,al |
||
834 | mov ecx,1024 |
||
835 | mov edi,sys_path+2 |
||
836 | repne scasb |
||
837 | sub edi,sys_path+3 |
||
838 | invoke ini_set_str, inifileeskin, amain, aprogram, sys_path+2, edi |
||
839 | ;add param 'H ' |
||
840 | mov eax,[opt_HB] |
||
841 | mov word[params],ax |
||
842 | mov eax,[color] |
||
843 | or eax,0xf ;для избежания вечного цикла если eax=0 |
||
844 | mov edi,params+2 |
||
845 | @@: |
||
846 | rol eax,8 |
||
847 | or al,al |
||
848 | jnz @f |
||
849 | mov word[edi],'00' ;нули перед числом |
||
850 | add edi,2 |
||
851 | jmp @b |
||
852 | @@: |
||
853 | and al,0xf0 |
||
854 | jnz @f |
||
855 | mov byte[edi],'0' |
||
856 | inc edi |
||
857 | @@: |
||
858 | mov eax,[color] |
||
859 | mov ebx,16 |
||
860 | call int2ascii |
||
861 | mov byte[params+10],' ' |
||
862 | ;add color2 |
||
863 | mov eax,[color2] |
||
864 | or eax,0xf ;для избежания вечного цикла если eax=0 |
||
865 | mov edi,params+11 |
||
866 | @@: |
||
867 | rol eax,8 |
||
868 | or al,al |
||
869 | jnz @f |
||
870 | mov word[edi],'00' ;нули перед числом |
||
871 | add edi,2 |
||
872 | jmp @b |
||
873 | @@: |
||
874 | and al,0xf0 |
||
875 | jnz @f |
||
876 | mov byte[edi],'0' |
||
877 | inc edi |
||
878 | @@: |
||
879 | mov eax,[color2] |
||
880 | mov ebx,16 |
||
881 | call int2ascii |
||
7423 | leency | 882 | |
9470 | leency | 883 | invoke ini_set_str, inifileeskin, amain, aparam, params, 19 |
884 | ret |
||
7423 | leency | 885 | endp |
886 | |||
3004 | leency | 887 | ;#___________________________________________________________________________________________________ |
888 | ;****************************************************************************************************| |
||
3091 | leency | 889 | ; БЛОК ПЕРЕМЕННЫХ И КОНСТАНТ | |
3004 | leency | 890 | ;----------------------------------------------------------------------------------------------------/ |
3453 | Akyltist | 891 | circle: |
9472 | leency | 892 | title db 'Palitra v0.77',0 ; хранит имя программы |
9470 | leency | 893 | hidden db 'Hidden',0 |
9472 | leency | 894 | ; hex db '#',0 ; для вывода решётки как текста |
9470 | leency | 895 | cname db 'RGBAx' ; хранит разряды цветов (red,green,blue) x-метка конца |
896 | larrow db 0x1A,0 |
||
897 | buff db '000',0 |
||
898 | bground db 'BACKGROUND',0 ; имя кнопки - 14 |
||
9472 | leency | 899 | bground1 db 'Gradient',0 ; имя кнопки - 15 |
900 | bground2 db 'Noisy',0 ; имя кнопки - 16 |
||
9470 | leency | 901 | runmode dd 1 ; режим запуска (1-normal, 2-hidden, 3-colordialog) |
902 | color2 dd 00FFFFFFh ; хранит значение второго выбранного цвета |
||
4962 | eAndrew | 903 | |
7870 | leency | 904 | inifileeskin db '/sys/settings/system.ini',0 |
905 | amain db 'style',0 |
||
906 | aprogram db 'bg_program',0 |
||
907 | aparam db 'bg_param',0 |
||
9541 | leency | 908 | |
9472 | leency | 909 | i18_name db 'ICONS18',0 |
910 | i18bg_name db 'ICONS18W',0 |
||
4962 | eAndrew | 911 | |
9472 | leency | 912 | |
7421 | leency | 913 | align 16 |
914 | @IMPORT: |
||
4962 | eAndrew | 915 | |
7421 | leency | 916 | library \ |
917 | libini , 'libini.obj' |
||
918 | |||
919 | import libini, \ |
||
9470 | leency | 920 | ini_set_str, 'ini_set_str' |
7421 | leency | 921 | |
4187 | eAndrew | 922 | I_END: |
9470 | leency | 923 | cm rb 12 |
924 | color rd 1 ; хранит значение выбранного цвета |
||
925 | mouse_x rd 1 ; хранит глобальную х координату мыши |
||
926 | mouse_y rd 1 ; хранит глобальную у координату мыши |
||
927 | mouse_f rd 1 ; хранит данные о том какая кнопка мыши была нажата |
||
928 | desctop_w rd 1 ; хранит ширину экрана |
||
929 | desctop_h rd 1 ; хранит высоту экрана |
||
930 | sc system_colors ; хранит структуру системных цветов скина |
||
9472 | leency | 931 | cred rb 1 ; храним красный спектр |
9470 | leency | 932 | cgreen rb 1 ; храним зеленый спектр |
933 | cblue rb 1 ; храним синий спектр |
||
934 | calpha rb 1 ; храним прозрачность |
||
935 | pnext rd 1 ; счетчик переключения палитры |
||
936 | renmode rd 1 ; режим отрисовки (1-цветовая схема,2-пипетка,3-круговая) |
||
937 | params rb 20 ; приём параметров |
||
938 | params_c rb 9 ; приёмник для цвета |
||
9472 | leency | 939 | bgimg_buf rd 1 ; buffer for a generated image |
940 | icons18 dd ? ; pointer to a shared memory of icons18.png |
||
941 | icons18bg dd ? ; pointer to a shared memory of icons18.png with filled bg |
||
3453 | Akyltist | 942 | |
9470 | leency | 943 | rd 1024 |
7421 | leency | 944 | stacktop: |
9470 | leency | 945 | sys_path rb 1024 |
4962 | eAndrew | 946 | I_MEM:10>18,18>20,18>13,19>62,128>10,22>------+ |