Rev 7466 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7466 | leency | 1 | DEBUG = 0 |
5394 | eAndrew | 2 | |
7466 | leency | 3 | LIST_WIDTH = 256 |
4 | WIN_WIDTH = (LIST_WIDTH + 16 + 12) |
||
5 | LIST_SIZE = 12 |
||
6 | LINE_SIZE = 40 |
||
7 | LIST_HEIGHT = (LIST_SIZE * LINE_SIZE / 2) |
||
8 | WIN_HEIGHT = (LIST_HEIGHT + 80) |
||
5394 | eAndrew | 9 | |
10 | use32 |
||
11 | org 0 |
||
10017 | Doczom | 12 | db 'MENUET01' |
13 | dd 1, main, dataend, memory, memory |
||
14 | M01header.params: |
||
15 | dd params, 0 |
||
5394 | eAndrew | 16 | |
17 | include "../../proc32.inc" |
||
18 | include "../../macros.inc" |
||
19 | include "../../dll.inc" |
||
20 | include "../../string.inc" |
||
21 | include "../../develop/libraries/box_lib/trunk/box_lib.mac" |
||
22 | |||
23 | include "lang.inc" |
||
24 | |||
25 | if DEBUG eq 1 |
||
26 | include "../../debug.inc" |
||
27 | end if |
||
28 | |||
29 | ;=============================== |
||
30 | |||
31 | if lang eq ru |
||
32 | title db "Открыть с помощью", 0 |
||
33 | browse_txt db "Обзор...", 0 |
||
34 | notify_txt db "'Incorrect ", '"', "/sys/settings/assoc.ini", '"', " file' -tE", 0 |
||
35 | checkbox_txt db "Использовать всегда", 0 |
||
36 | else if lang eq et |
||
37 | title db "Open with", 0 |
||
38 | browse_txt db "Browse...", 0 |
||
39 | notify_txt db "'Incorrect ", '"', "/sys/settings/assoc.ini", '"', " file' -tE", 0 |
||
40 | checkbox_txt db "Always use selected program", 0 |
||
41 | else if lang eq it |
||
42 | title db "Open with", 0 |
||
43 | browse_txt db "Browse...", 0 |
||
44 | notify_txt db "'Incorrect ", '"', "/sys/settings/assoc.ini", '"', " file' -tE", 0 |
||
45 | checkbox_txt db "Always use selected program", 0 |
||
46 | else |
||
47 | title db "Open with", 0 |
||
48 | browse_txt db "Browse...", 0 |
||
49 | notify_txt db "'Incorrect ", '"', "/sys/settings/assoc.ini", '"', " file' -tE", 0 |
||
50 | checkbox_txt db "Always use selected program", 0 |
||
51 | end if |
||
52 | |||
53 | sys_dir db "/sys", 0 |
||
54 | slash db "/", 0 |
||
55 | open_dialog_path db "/sys/file managers/opendial", 0 |
||
56 | app_link db "$", 0 |
||
5426 | yogev_ezra | 57 | icons db "/sys/icons32.png", 0 |
5394 | eAndrew | 58 | communication_area_name db "FFFFFF_open_dialog", 0 |
59 | assoc_ini db "/sys/settings/assoc.ini", 0 |
||
60 | .sec db "Assoc", 0 |
||
61 | .exec db "exec", 0 |
||
5908 | eAndrew | 62 | .next db "next", 0 |
5394 | eAndrew | 63 | .icon db "icon", 0 |
64 | |||
65 | sb_apps scrollbar \ |
||
66 | 13, WIN_WIDTH - 25, LIST_HEIGHT, 10 + 12, \ ;; w, x, h, y |
||
10017 | Doczom | 67 | 0, 0, LIST_SIZE / 2, 0, \ ;; b.h, max, area, pos |
5394 | eAndrew | 68 | 0, 0, 0, 2 |
69 | |||
70 | cb_always check_box2 \ |
||
5488 | leency | 71 | 5 shl 16 + 16, (LIST_HEIGHT + 33) shl 16 + 16, 6, 0, 0, 0, checkbox_txt, ch_flag_middle |
5394 | eAndrew | 72 | |
73 | opendialog: |
||
74 | .type dd 0 |
||
75 | .procinfo dd buffer3 |
||
76 | .com_area_name dd communication_area_name |
||
77 | .com_area dd 0 |
||
78 | .opendir_path dd buffer4 |
||
79 | .dir_default_path dd sys_dir |
||
80 | .start_path dd open_dialog_path |
||
81 | .draw_window dd draw_window |
||
82 | .status dd 0 |
||
83 | .openfile_pach dd buffer |
||
84 | .filename_area dd buffer5 |
||
85 | .filter_area dd .filter |
||
86 | .x: |
||
87 | .x_size dw 420 |
||
88 | .x_start dw 200 |
||
89 | .y: |
||
90 | .y_size dw 320 |
||
91 | .y_start dw 120 |
||
92 | |||
93 | .filter dd 0 |
||
94 | |||
95 | ps_addres: |
||
10017 | Doczom | 96 | dd 0 ;; type |
97 | dw 7 ;; y |
||
98 | dw 4 ;; x |
||
99 | dw 6 ;; font.w |
||
5394 | eAndrew | 100 | dw LIST_WIDTH ;; w |
10017 | Doczom | 101 | dd 0 ;; mono |
102 | dd 0 ;; without bg |
||
103 | .color dd 0 ;; text color |
||
104 | dd 0 ;; bg color |
||
105 | .txt dd 0 ;; text |
||
5394 | eAndrew | 106 | dd buffer2 |
107 | dd 0 |
||
108 | |||
109 | is_execute: |
||
110 | dd 7, 0, 0, 0, 0 |
||
111 | db 0 |
||
112 | dd buffer |
||
113 | |||
114 | is_openas: |
||
115 | dd 7, 0, 0, 0, 0 |
||
116 | db 0 |
||
117 | dd buffer |
||
118 | |||
119 | is_open: |
||
120 | dd 7, 0, 0, 0, 0 |
||
121 | db 0 |
||
122 | dd buffer |
||
123 | |||
124 | is_undefined: |
||
125 | dd 7, 0, notify_txt, 0, 0 |
||
126 | db "/sys/@notify", 0 |
||
127 | |||
128 | is_openimg_info: |
||
129 | dd 5, 0, 0, 0, img.buf |
||
130 | db 0 |
||
131 | dd icons |
||
132 | |||
133 | is_openimg: |
||
134 | dd 0, 0, 0, 0, 0 |
||
135 | db 0 |
||
136 | dd icons |
||
137 | |||
5903 | eAndrew | 138 | is_file_exists: |
139 | dd 0, 0, 0, 0, buffer6 |
||
140 | db 0 |
||
141 | dd buffer |
||
142 | |||
5394 | eAndrew | 143 | last_x dd -1 |
144 | last_y dd -1 |
||
145 | |||
146 | if DEBUG eq 1 |
||
5913 | eAndrew | 147 | std_param db "~/sys/example.asm", 0 |
5394 | eAndrew | 148 | end if |
149 | |||
150 | imports: |
||
151 | library libini, "libini.obj" |
||
152 | import libini, libini.get_str, "ini_get_str", \ |
||
10017 | Doczom | 153 | libini.set_str, "ini_set_str", \ |
154 | libini.get_num, "ini_get_int", \ |
||
155 | libini.for_each_section, "ini_enum_sections" |
||
5394 | eAndrew | 156 | |
157 | imports_add: |
||
158 | library libimg, "libimg.obj", \ |
||
10017 | Doczom | 159 | boxlib, "box_lib.obj", \ |
160 | prclib, "proc_lib.obj" |
||
5394 | eAndrew | 161 | import libimg, libimg.init, "lib_init", \ |
10017 | Doczom | 162 | libimg.toRGB, "img_to_rgb2", \ |
163 | libimg.decode, "img_decode", \ |
||
164 | libimg.destroy, "img_destroy" |
||
5394 | eAndrew | 165 | import boxlib, scrollbar.draw, "scrollbar_v_draw", \ |
10017 | Doczom | 166 | scrollbar.mouse, "scrollbar_v_mouse", \ |
167 | pathshow.init, "PathShow_prepare", \ |
||
168 | pathshow.draw, "PathShow_draw", \ |
||
169 | checkbox.init, "init_checkbox2", \ |
||
170 | checkbox.draw, "check_box_draw2", \ |
||
171 | checkbox.mouse, "check_box_mouse2" |
||
5394 | eAndrew | 172 | import prclib, opendialog.lib_init, "lib_init", \ |
10017 | Doczom | 173 | opendialog.init, "OpenDialog_init", \ |
174 | opendialog.start, "OpenDialog_start" |
||
5394 | eAndrew | 175 | |
176 | ;=============================== |
||
177 | |||
178 | main: |
||
179 | mcall 68, 11 |
||
180 | stdcall dll.Load, imports |
||
181 | |||
182 | if DEBUG eq 1 |
||
10017 | Doczom | 183 | stdcall string.copy, std_param, [M01header.params] |
5394 | eAndrew | 184 | end if |
185 | |||
186 | ;; trim params |
||
10017 | Doczom | 187 | stdcall string.copy, [M01header.params], paramorig |
7217 | leency | 188 | stdcall string.trim_last, paramorig |
189 | stdcall string.trim_first, paramorig |
||
10017 | Doczom | 190 | mov [param_s], eax |
7217 | leency | 191 | |
10017 | Doczom | 192 | stdcall string.to_lower_case, [M01header.params] |
193 | stdcall string.trim_last, [M01header.params] |
||
194 | stdcall string.trim_first, [M01header.params] |
||
7217 | leency | 195 | mov [param_lwr], eax |
5394 | eAndrew | 196 | |
197 | ;; if empty - exit |
||
198 | cmpe [eax], byte 0, exit |
||
199 | |||
200 | ;; if folder |
||
201 | stdcall string.length, [param_s] |
||
202 | add eax, [param_s] |
||
203 | cmpe [eax - 1], byte '/', open |
||
204 | |||
205 | ;; if dialog |
||
206 | mov eax, [param_s] |
||
207 | mov [is_openas + 8], eax |
||
208 | cmpne [eax], byte '~', @f |
||
209 | inc [param_s] |
||
210 | mov eax, [param_s] |
||
211 | mov [is_openas + 8], eax |
||
212 | jmp start_dialog |
||
213 | @@: |
||
214 | |||
215 | ;; if without '.' - execute |
||
216 | stdcall string.last_index_of, [param_s], '.', 1 |
||
217 | cmpe eax, -1, execute |
||
218 | ;; if '.' is part of path - execute |
||
219 | mov esi, eax |
||
220 | stdcall string.last_index_of, [param_s], '/', 1 |
||
221 | cmpg eax, esi, execute |
||
222 | |||
223 | ;; if ext == "kex" - execute |
||
7217 | leency | 224 | add esi, [param_lwr] |
5394 | eAndrew | 225 | mov [param_e], esi |
226 | cmpe [esi], dword "kex", execute |
||
227 | |||
228 | open_as: |
||
5908 | eAndrew | 229 | invoke libini.get_str, assoc_ini, assoc_ini.sec, esi, buffer8, 2048, undefined |
230 | cmpe byte [buffer8], 0, start_dialog_pre |
||
231 | .run: |
||
232 | mov edi, 0 |
||
233 | cmpne byte [buffer8], "$", .pre_open |
||
234 | mov edi, 1 |
||
235 | invoke libini.get_str, assoc_ini, buffer8 + 1, assoc_ini.exec, buffer, 2048, undefined |
||
236 | cmpe byte [buffer], 0, ini_error |
||
237 | jmp @f |
||
238 | .pre_open: |
||
239 | stdcall string.copy, buffer8, buffer |
||
5394 | eAndrew | 240 | @@: |
241 | mcall 70, is_openas |
||
5908 | eAndrew | 242 | cmpge eax, 0, exit |
243 | cmpe edi, 0, start_dialog |
||
244 | invoke libini.get_str, assoc_ini, buffer8 + 1, assoc_ini.next, buffer8, 2048, undefined |
||
245 | cmpne byte [buffer], 0, .run |
||
246 | jmp start_dialog |
||
5394 | eAndrew | 247 | |
248 | execute: |
||
249 | mov eax, [param_s] |
||
250 | mov [is_execute + 21], eax |
||
251 | mcall 70, is_execute |
||
252 | jmp exit |
||
253 | |||
254 | open: |
||
255 | invoke libini.get_str, assoc_ini, assoc_ini.sec, slash, buffer, 2048, undefined |
||
5903 | eAndrew | 256 | cmpne [buffer], byte "$", @f |
257 | invoke libini.get_str, assoc_ini, buffer + 1, assoc_ini.exec, buffer, 2048, undefined |
||
5394 | eAndrew | 258 | cmpe [buffer], byte 0, ini_error |
5903 | eAndrew | 259 | @@: |
5394 | eAndrew | 260 | mov eax, [param_s] |
261 | mov [is_open + 8], eax |
||
262 | mcall 70, is_open |
||
263 | jmp exit |
||
264 | |||
265 | ini_error: |
||
266 | mcall 70, is_undefined |
||
267 | jmp exit |
||
268 | |||
269 | ;---------------------- |
||
270 | |||
271 | start_dialog_pre: |
||
10017 | Doczom | 272 | or [cb_always.flags], ch_flag_en |
5394 | eAndrew | 273 | |
274 | start_dialog: |
||
275 | stdcall dll.Load, imports_add |
||
276 | invoke opendialog.lib_init |
||
277 | |||
278 | mcall 40, 100111b |
||
279 | |||
280 | ;; get title |
||
281 | stdcall string.copy, title, win.title |
||
282 | |||
283 | ;; get positions |
||
284 | mcall 14 |
||
285 | movzx ebx, ax |
||
286 | shr ebx, 1 |
||
287 | shr eax, 16 + 1 |
||
288 | sub eax, WIN_WIDTH / 2 - 1 |
||
289 | sub ebx, WIN_HEIGHT / 2 - 1 |
||
290 | mov [win.x], eax |
||
291 | mov [win.y], ebx |
||
292 | |||
293 | ;; get colors |
||
5721 | leency | 294 | mcall 48, 3, skin, sizeof.system_colors |
5394 | eAndrew | 295 | |
296 | ;; get opendialog |
||
297 | invoke opendialog.init, opendialog |
||
298 | |||
299 | ;; get pathshow |
||
300 | mov eax, [param_s] |
||
5721 | leency | 301 | mov ebx, [skin.work_text] |
5394 | eAndrew | 302 | mov [ps_addres.txt], eax |
303 | mov [ps_addres], ebx |
||
10017 | Doczom | 304 | m2m [ps_addres.color], [skin.work_text] |
5394 | eAndrew | 305 | invoke pathshow.init, ps_addres |
306 | |||
307 | ;; get checkbox |
||
5721 | leency | 308 | mov eax, 0xFFFfff |
309 | mov ebx, [skin.work_graph] |
||
310 | mov ecx, [skin.work_text] |
||
5394 | eAndrew | 311 | mov [cb_always.color], eax |
312 | mov [cb_always.border_color], ebx |
||
313 | mov [cb_always.text_color], ecx |
||
314 | invoke checkbox.init, cb_always |
||
315 | |||
316 | ;; get list |
||
317 | invoke libini.for_each_section, assoc_ini, section_cb |
||
5907 | eAndrew | 318 | stdcall sort_list |
5394 | eAndrew | 319 | mov eax, [sb_apps.max_area] |
320 | and eax, 1b |
||
321 | shr [sb_apps.max_area], 1 |
||
322 | add [sb_apps.max_area], eax |
||
323 | |||
5721 | leency | 324 | mov eax, 0xFFFfff |
325 | mov ebx, 0xCCCccc ;[skin.3d] |
||
5394 | eAndrew | 326 | mov [sb_apps.bg_color], eax |
327 | mov [sb_apps.front_color], ebx |
||
328 | mov [sb_apps.line_color], ebx |
||
329 | |||
330 | ;; get icons |
||
331 | mcall 70, is_openimg_info |
||
332 | mov edx, dword [img.buf + 32] |
||
333 | shl edx, 4 |
||
334 | stdcall mem.Alloc, edx |
||
335 | mov [img.rgb], eax |
||
336 | |||
337 | mov [is_openimg + 12], edx |
||
338 | m2m dword[is_openimg + 16], dword[img.rgb] |
||
339 | mcall 70, is_openimg |
||
340 | |||
341 | invoke libimg.decode, dword[img.rgb], ebx, 0 |
||
342 | mov [img], eax |
||
343 | |||
344 | ;; alpha |
||
345 | mov edi, [eax + 8] |
||
346 | shl edi, 7 |
||
347 | sub edi, 4 |
||
348 | mov eax, [eax + 24] |
||
349 | .setalpha: |
||
350 | mov ebx, [eax + edi] |
||
351 | shr ebx, 24 |
||
352 | cmpne ebx, 0, @f |
||
5721 | leency | 353 | mov ecx, 0xFFFfff |
5394 | eAndrew | 354 | mov [eax + edi], ecx |
355 | @@: |
||
356 | cmpe edi, 0, @f |
||
357 | sub edi, 4 |
||
358 | jmp .setalpha |
||
359 | @@: |
||
360 | |||
361 | invoke libimg.toRGB, [img], [img.rgb] |
||
362 | invoke libimg.destroy, [img] |
||
363 | |||
364 | ;---------------------- |
||
365 | |||
366 | update: |
||
367 | mcall 10 |
||
368 | cmpe eax, EV_REDRAW, event_redraw |
||
369 | cmpe eax, EV_KEY, event_key |
||
370 | cmpe eax, EV_BUTTON, event_button |
||
371 | cmpe eax, EV_MOUSE, event_mouse |
||
372 | jmp update |
||
373 | |||
374 | ;---------------------- |
||
375 | |||
376 | event_redraw: |
||
377 | call draw_window |
||
378 | jmp update |
||
379 | |||
380 | ;---------------------- |
||
381 | |||
382 | event_key: |
||
383 | mcall 2 |
||
384 | cmpe ah, 27, exit |
||
385 | |||
5905 | eAndrew | 386 | cmpe ah, 13, list_item_activate |
5906 | eAndrew | 387 | cmpe ah, 9, event_button.opendialog |
388 | cmpe ah, 32, .toggle_cb |
||
5905 | eAndrew | 389 | cmpe ah, 179, .go_right |
390 | cmpe ah, 176, .go_left |
||
391 | cmpe ah, 178, .go_up |
||
392 | cmpe ah, 177, .go_down |
||
5906 | eAndrew | 393 | |
394 | cmpl ah, "a", @f |
||
395 | cmpg ah, "z", @f |
||
396 | jmp .letter |
||
397 | @@: |
||
398 | |||
399 | cmpl ah, "а", @f |
||
400 | cmpg ah, "я", @f |
||
401 | jmp .letter |
||
402 | @@: |
||
403 | |||
404 | cmpl ah, "A", @f |
||
405 | cmpg ah, "Z", @f |
||
406 | jmp .letter_big |
||
407 | @@: |
||
408 | |||
409 | cmpl ah, "А", @f |
||
410 | cmpg ah, "Я", @f |
||
411 | jmp .letter_big |
||
412 | @@: |
||
413 | |||
414 | cmpl ah, "0", @f |
||
415 | cmpg ah, "9", @f |
||
416 | jmp .letter |
||
417 | @@: |
||
418 | |||
5394 | eAndrew | 419 | jmp update |
420 | |||
5906 | eAndrew | 421 | .letter_big: |
422 | movzx ebx, ah |
||
423 | stdcall downcase_char, ebx |
||
424 | mov ah, al |
||
425 | |||
426 | .letter: |
||
427 | push eax |
||
428 | |||
429 | stdcall get_index |
||
430 | inc eax |
||
431 | |||
432 | mov ecx, eax |
||
433 | |||
434 | imul ebx, eax, 32 |
||
435 | add ebx, list |
||
436 | |||
437 | pop eax |
||
438 | |||
5913 | eAndrew | 439 | mov edi, 0 |
440 | mov esi, [list.size] |
||
441 | .search: |
||
442 | shl esi, 5 |
||
443 | add esi, list |
||
444 | @@: |
||
445 | cmpe ebx, esi, @f |
||
5906 | eAndrew | 446 | |
447 | movzx edx, byte [ebx] |
||
448 | stdcall downcase_char, edx |
||
449 | cmpne ah, al, .next |
||
450 | stdcall set_index, ecx |
||
451 | stdcall draw_list |
||
452 | jmp update |
||
453 | |||
454 | .next: |
||
455 | inc ecx |
||
456 | add ebx, 32 |
||
457 | jmp @b |
||
458 | @@: |
||
5913 | eAndrew | 459 | cmpe edi, 1, update |
460 | mov ebx, list |
||
461 | mov ecx, 0 |
||
462 | mov edi, 1 |
||
463 | push eax |
||
464 | stdcall get_index |
||
465 | mov esi, eax |
||
466 | pop eax |
||
467 | jmp .search |
||
5906 | eAndrew | 468 | |
469 | .toggle_cb: |
||
470 | mov eax, [cb_always.flags] |
||
471 | mov ebx, eax |
||
472 | and ebx, ch_flag_en |
||
473 | cmpe ebx, 0, @f |
||
474 | sub eax, ch_flag_en |
||
475 | jmp .toggle_cb.redraw |
||
476 | @@: |
||
477 | add eax, ch_flag_en |
||
478 | .toggle_cb.redraw: |
||
479 | mov [cb_always.flags], eax |
||
480 | invoke checkbox.draw, cb_always |
||
481 | jmp update |
||
482 | |||
5905 | eAndrew | 483 | .go_right: |
484 | mov esi, 1 |
||
485 | jmp .go_anyway |
||
486 | |||
487 | .go_left: |
||
488 | mov esi, -1 |
||
489 | jmp .go_anyway |
||
490 | |||
491 | .go_up: |
||
492 | mov esi, -2 |
||
493 | jmp .go_anyway |
||
494 | |||
495 | .go_down: |
||
496 | mov esi, 2 |
||
497 | |||
498 | .go_anyway: |
||
499 | ;; HIDE OLD SELECTION |
||
500 | stdcall draw_item, [last_x], [last_y], 0 |
||
501 | |||
502 | ;; [X, Y] -> INDEX |
||
5906 | eAndrew | 503 | stdcall get_index |
5905 | eAndrew | 504 | |
505 | ;; CHANGE INDEX |
||
5913 | eAndrew | 506 | .check_p2: |
507 | cmpne esi, 2, .check_m2 |
||
508 | mov ebx, [list.size] |
||
509 | dec ebx |
||
510 | sub ebx, eax |
||
511 | cmpg ebx, 1, .add |
||
512 | jmp .check |
||
513 | |||
514 | .check_m2: |
||
515 | cmpne esi, -2, .add |
||
516 | cmpg eax, 1, .add |
||
517 | jmp .check |
||
518 | |||
519 | .add: |
||
5905 | eAndrew | 520 | add eax, esi |
521 | |||
5913 | eAndrew | 522 | .check: |
5905 | eAndrew | 523 | cmpl eax, [list.size], @f |
524 | mov eax, [list.size] |
||
525 | dec eax |
||
526 | @@: |
||
527 | |||
528 | cmpge eax, 0, @f |
||
529 | mov eax, 0 |
||
530 | @@: |
||
531 | |||
532 | ;; INDEX -> [X, Y] |
||
5906 | eAndrew | 533 | stdcall set_index, eax |
534 | cmpe eax, 1, @f |
||
5905 | eAndrew | 535 | |
5906 | eAndrew | 536 | ;; PARTLY REDRAW |
5905 | eAndrew | 537 | stdcall draw_item, [last_x], [last_y], 1 |
538 | jmp update |
||
539 | |||
5906 | eAndrew | 540 | ;; FULL REDRAW |
5905 | eAndrew | 541 | @@: |
542 | stdcall draw_list |
||
543 | jmp update |
||
544 | |||
5394 | eAndrew | 545 | ;---------------------- |
546 | |||
547 | event_button: |
||
548 | mcall 17 |
||
549 | cmpe ah, 1, exit |
||
550 | cmpe ah, 2, .opendialog |
||
5905 | eAndrew | 551 | jmp list_item_activate |
5394 | eAndrew | 552 | |
5905 | eAndrew | 553 | .opendialog: |
554 | invoke opendialog.start, opendialog |
||
555 | cmpne [opendialog.status], 1, update |
||
5394 | eAndrew | 556 | mcall 70, is_openas |
5905 | eAndrew | 557 | |
558 | mov edi, 0 |
||
559 | jmp save_assoc |
||
560 | |||
561 | ;---------------------- |
||
562 | |||
563 | list_item_activate: |
||
5906 | eAndrew | 564 | stdcall get_index |
5905 | eAndrew | 565 | shl eax, 5 |
566 | add eax, list |
||
567 | cmpe byte [eax], 0, update |
||
568 | mov [param_a], eax |
||
569 | invoke libini.get_str, assoc_ini, eax, assoc_ini.exec, buffer, 256, undefined |
||
570 | cmpe byte [buffer], 0, ini_error |
||
571 | mcall 70, is_openas |
||
572 | |||
5394 | eAndrew | 573 | mov edi, 1 |
5905 | eAndrew | 574 | jmp save_assoc |
5394 | eAndrew | 575 | |
5905 | eAndrew | 576 | ;---------------------- |
577 | |||
578 | save_assoc: |
||
5394 | eAndrew | 579 | mov eax, [cb_always.flags] |
580 | and eax, ch_flag_en |
||
581 | cmpe eax, 0, exit |
||
582 | |||
583 | cmpe edi, 0, @f |
||
584 | stdcall string.copy, app_link, buffer |
||
585 | stdcall string.concatenate, [param_a], buffer |
||
586 | @@: |
||
587 | |||
7466 | leency | 588 | stdcall string.length, buffer |
10017 | Doczom | 589 | mov edi, eax |
590 | |||
7466 | leency | 591 | invoke libini.set_str, assoc_ini, assoc_ini.sec, [param_e], buffer, edi |
5394 | eAndrew | 592 | jmp exit |
593 | |||
594 | ;---------------------- |
||
595 | |||
596 | event_mouse: |
||
597 | invoke checkbox.mouse, cb_always |
||
598 | mov edi, [sb_apps.position] |
||
599 | invoke scrollbar.mouse, sb_apps |
||
600 | sub edi, [sb_apps.position] |
||
10017 | Doczom | 601 | jz @f |
5394 | eAndrew | 602 | call draw_list |
603 | @@: |
||
604 | |||
605 | mcall 37, 1 |
||
606 | movzx edi, ax |
||
607 | shr eax, 16 |
||
608 | mov esi, eax |
||
609 | sub esi, 4 |
||
610 | sub edi, 10 + 12 |
||
611 | cmpl esi, 0, .out |
||
612 | cmpge esi, LIST_WIDTH, .out |
||
613 | cmpl edi, 0, .out |
||
614 | cmpge edi, LIST_HEIGHT, .out |
||
615 | |||
616 | mcall 37, 7 |
||
617 | and eax, 0xFFFF |
||
618 | cmpe eax, 65535, .scroll_up |
||
619 | cmpe eax, 0, @f |
||
620 | |||
621 | .scroll_down: |
||
622 | mov eax, [sb_apps.position] |
||
623 | add eax, LIST_SIZE / 2 |
||
624 | shl eax, 1 |
||
625 | cmpge eax, [list.size], @f |
||
626 | inc [sb_apps.position] |
||
627 | stdcall draw_list |
||
628 | jmp update |
||
629 | |||
630 | .scroll_up: |
||
631 | cmpe [sb_apps.position], 0, @f |
||
632 | dec [sb_apps.position] |
||
633 | stdcall draw_list |
||
634 | jmp update |
||
635 | |||
636 | @@: |
||
637 | |||
638 | mov eax, esi |
||
639 | mov ebx, LIST_WIDTH / 2 |
||
640 | mov edx, 0 |
||
641 | div ebx |
||
642 | mov esi, eax |
||
643 | |||
644 | mov eax, edi |
||
645 | mov ebx, LINE_SIZE |
||
646 | mov edx, 0 |
||
647 | div ebx |
||
648 | mov edi, eax |
||
649 | |||
650 | cmpne esi, [last_x], .redraw |
||
651 | cmpne edi, [last_y], .redraw |
||
652 | jmp @f |
||
653 | |||
654 | .redraw: |
||
655 | stdcall draw_item, [last_x], [last_y], 0 |
||
656 | mov [last_x], esi |
||
657 | mov [last_y], edi |
||
658 | stdcall draw_item, esi, edi, 1 |
||
659 | jmp @f |
||
660 | |||
661 | .out: |
||
662 | cmpe [last_x], -1, @f |
||
663 | stdcall draw_item, [last_x], [last_y], 0 |
||
664 | mov [last_x], -1 |
||
665 | mov [last_y], -1 |
||
666 | @@: |
||
667 | |||
668 | jmp update |
||
669 | |||
670 | ;---------------------- |
||
671 | |||
672 | exit: |
||
673 | mcall -1 |
||
674 | |||
675 | ;---------------------- |
||
676 | |||
677 | proc draw_window |
||
678 | mcall 12, 1 |
||
679 | |||
5721 | leency | 680 | mov edx, [skin.work] |
10017 | Doczom | 681 | or edx, 0x34 shl 24 |
5394 | eAndrew | 682 | mcall 0, <[win.x], WIN_WIDTH>, <[win.y], WIN_HEIGHT>, , , win.title |
683 | stdcall draw_list |
||
684 | invoke pathshow.draw, ps_addres |
||
685 | invoke checkbox.draw, cb_always |
||
686 | |||
6159 | leency | 687 | mcall 8, <208, 63>, |
5394 | eAndrew | 688 | ; |
5721 | leency | 689 | mov ecx, [skin.work_button_text] |
5394 | eAndrew | 690 | add ecx, 0x80 shl 24 |
6159 | leency | 691 | mcall 4, <214, LIST_HEIGHT + 36>, , browse_txt |
5394 | eAndrew | 692 | |
693 | ;; buttons |
||
694 | mov eax, 8 |
||
695 | mov ebx, 4 shl 16 + LIST_WIDTH / 2 |
||
696 | mov ecx, (10 + 12) shl 16 + LINE_SIZE - 1 |
||
697 | mov edx, 0x60 shl 24 + 10 |
||
698 | mov edi, LIST_SIZE |
||
699 | mov esi, 0 |
||
700 | @@: |
||
701 | cmpe edi, 0, @f |
||
702 | mcall |
||
703 | |||
704 | cmpe esi, 0, .doA |
||
705 | .doB: |
||
706 | sub ebx, LIST_WIDTH shl 16 |
||
707 | add ecx, LINE_SIZE shl 16 |
||
708 | .doA: |
||
709 | add ebx, (LIST_WIDTH / 2) shl 16 |
||
710 | sub ecx, LINE_SIZE shl 16 |
||
711 | |||
712 | not esi |
||
713 | add ecx, LINE_SIZE shl 16 |
||
714 | inc edx |
||
715 | dec edi |
||
716 | jmp @b |
||
717 | @@: |
||
718 | |||
719 | mcall 12, 2 |
||
720 | ret |
||
721 | endp |
||
722 | |||
723 | ;---------------------- |
||
724 | |||
725 | proc draw_list |
||
5721 | leency | 726 | mcall 13, <3, LIST_WIDTH + 2 + 12>, <9 + 12, 1>, [skin.work_graph] |
10017 | Doczom | 727 | mcall , , |
5394 | eAndrew | 728 | mcall , <3, 1>, <9 + 12, LIST_HEIGHT + 1> |
729 | mcall , <3 + LIST_WIDTH + 12 + 1, 1> |
||
5721 | leency | 730 | mcall , <4, LIST_WIDTH>, <10 + 12, LIST_HEIGHT>, 0xFFFfff |
5394 | eAndrew | 731 | |
732 | mov esi, 1 |
||
733 | mov edi, LIST_SIZE / 2 - 1 |
||
734 | .draw_loop: |
||
735 | mov edx, 0 |
||
736 | cmpne [last_x], esi, @f |
||
737 | cmpne [last_y], edi, @f |
||
738 | mov edx, 1 |
||
739 | @@: |
||
740 | stdcall draw_item, esi, edi, edx |
||
741 | dec esi |
||
742 | cmpne esi, -1, @f |
||
743 | mov esi, 1 |
||
744 | dec edi |
||
745 | @@: |
||
746 | cmpne edi, -1, .draw_loop |
||
747 | |||
5906 | eAndrew | 748 | invoke scrollbar.draw, sb_apps |
749 | |||
5394 | eAndrew | 750 | ret |
751 | endp |
||
752 | |||
753 | ;---------------------- |
||
754 | |||
755 | proc draw_item uses edx edi esi, _x, _y, _sel |
||
756 | ;; get index |
||
5906 | eAndrew | 757 | stdcall get_index_cur, [_x], [_y] |
758 | mov edi, eax |
||
5394 | eAndrew | 759 | |
760 | cmpge edi, [list.size], .break |
||
761 | |||
762 | ;; background |
||
763 | mov ebx, [_x] |
||
764 | shl ebx, 7 + 16 |
||
765 | add ebx, 4 shl 16 + LIST_WIDTH / 2 |
||
766 | |||
767 | imul ecx, [_y], LINE_SIZE |
||
768 | shl ecx, 16 |
||
769 | add ecx, (10 + 12) shl 16 + LINE_SIZE |
||
770 | |||
5721 | leency | 771 | mov edx, 0xFFFfff |
5394 | eAndrew | 772 | cmpe [_sel], 0, @f |
5721 | leency | 773 | mov edx, 0x94AECE |
5394 | eAndrew | 774 | @@: |
775 | mcall 13 |
||
776 | |||
777 | ;; shadows |
||
778 | push ecx |
||
779 | cmpe [_sel], 1, .after_shadows |
||
5721 | leency | 780 | mov edx, 0xCCCccc ;[skin.3d] |
5394 | eAndrew | 781 | |
782 | cmpne [_x], 0, @f |
||
783 | imul ecx, [_y], LINE_SIZE |
||
784 | shl ecx, 16 |
||
785 | add ecx, (10 + 12) shl 16 + LINE_SIZE |
||
786 | mcall , <4, 1> |
||
787 | @@: |
||
788 | |||
789 | cmpne [_y], 0, @f |
||
790 | imul ebx, [_x], LIST_WIDTH / 2 |
||
791 | shl ebx, 16 |
||
792 | add ebx, 4 shl 16 + LIST_WIDTH / 2 |
||
793 | mcall , , <10 + 12, 1> |
||
794 | @@: |
||
795 | |||
796 | .after_shadows: |
||
797 | pop ecx |
||
798 | |||
799 | ;; icon |
||
800 | and ebx, 0xFFFF shl 16 |
||
801 | shr ecx, 16 |
||
802 | add ecx, ebx |
||
803 | mov edx, ecx |
||
804 | add edx, 6 shl 16 + (LINE_SIZE - 32) / 2 |
||
805 | |||
806 | mov ebx, edi |
||
807 | shl ebx, 2 |
||
808 | mov ebx, [ebx + list.icon] |
||
809 | imul ebx, 32 * 32 * 3 |
||
810 | add ebx, [img.rgb] |
||
811 | cmpe [_sel], 0, .draw_icon |
||
812 | .selected: |
||
813 | mov eax, img.sel |
||
814 | mov ecx, 32 * 32 |
||
815 | push edx |
||
816 | @@: |
||
817 | mov edx, [ebx] |
||
818 | and edx, 0xFFFFFF |
||
5721 | leency | 819 | cmpne edx, 0xFFFFFF, .not |
820 | mov edx, 0x94AECE |
||
5394 | eAndrew | 821 | .not: |
822 | mov [eax], edx |
||
823 | add eax, 3 |
||
824 | add ebx, 3 |
||
825 | dec ecx |
||
826 | jnz @b |
||
827 | pop edx |
||
828 | mov ebx, img.sel |
||
829 | |||
830 | .draw_icon: |
||
831 | mcall 7, , <32, 32> |
||
832 | |||
833 | ;; text |
||
834 | mov ebx, edx |
||
835 | add ebx, (32 + 6) shl 16 + 32 / 2 - 9 / 2 |
||
836 | |||
5721 | leency | 837 | mov ecx, 0x000000 ; inactive item text |
5394 | eAndrew | 838 | cmpe [_sel], 0, @f |
5721 | leency | 839 | mov ecx, 0x000000 ; active item text |
5394 | eAndrew | 840 | @@: |
841 | add ecx, 0x80 shl 24 |
||
842 | |||
843 | mov edx, edi |
||
844 | shl edx, 5 |
||
845 | add edx, list |
||
846 | |||
847 | mcall 4 |
||
848 | |||
849 | .break: |
||
850 | ret |
||
851 | endp |
||
852 | |||
853 | ;---------------------- |
||
854 | |||
5906 | eAndrew | 855 | proc downcase_char uses ebx, _ch |
856 | mov ebx, [_ch] |
||
857 | |||
858 | cmpl bl, "A", @f |
||
859 | cmpg bl, "Z", @f |
||
860 | sub bl, "A" - "a" |
||
861 | jmp .ret |
||
862 | @@: |
||
863 | |||
864 | cmpl bl, "А", @f |
||
865 | cmpg bl, "Я", @f |
||
866 | sub bl, "А" - "а" |
||
867 | @@: |
||
868 | |||
869 | .ret: |
||
870 | mov al, bl |
||
871 | ret |
||
872 | endp |
||
873 | |||
874 | ;---------------------- |
||
875 | |||
876 | proc get_index_cur uses ebx, _x, _y |
||
877 | mov eax, [_y] |
||
878 | shl eax, 1 |
||
879 | add eax, [_x] |
||
880 | mov ebx, [sb_apps.position] |
||
881 | shl ebx, 1 |
||
882 | add eax, ebx |
||
883 | |||
884 | ret |
||
885 | endp |
||
886 | |||
887 | ;---------------------- |
||
888 | |||
889 | proc get_index |
||
890 | stdcall get_index_cur, [last_x], [last_y] |
||
891 | ret |
||
892 | endp |
||
893 | |||
894 | ;---------------------- |
||
895 | |||
896 | proc set_index uses ebx,_index |
||
897 | mov eax, [_index] |
||
898 | mov ebx, [sb_apps.position] |
||
899 | shl ebx, 1 |
||
900 | sub eax, ebx |
||
901 | |||
902 | mov ebx, eax |
||
903 | and ebx, 1b |
||
904 | mov [last_x], ebx |
||
905 | shr eax, 1 |
||
906 | mov [last_y], eax |
||
907 | |||
908 | mov eax, 0 |
||
909 | |||
910 | cmpl [last_y], 0xFFFF, @f |
||
5913 | eAndrew | 911 | mov ebx, 0xFFFFFFFF shr 1 |
912 | sub ebx, [last_y] |
||
913 | inc ebx |
||
5906 | eAndrew | 914 | mov [last_y], 0 |
5913 | eAndrew | 915 | ;dec [sb_apps.position] |
916 | sub [sb_apps.position], ebx |
||
5906 | eAndrew | 917 | mov eax, 1 |
918 | jmp .exit |
||
919 | @@: |
||
920 | |||
921 | cmpl [last_y], LIST_SIZE / 2, @f |
||
922 | mov ebx, [last_y] |
||
923 | sub ebx, LIST_SIZE / 2 - 1 |
||
924 | mov [last_y], LIST_SIZE / 2 - 1 |
||
925 | add [sb_apps.position], ebx |
||
926 | mov eax, 1 |
||
927 | jmp .exit |
||
928 | @@: |
||
929 | |||
930 | .exit: |
||
931 | cmpge [sb_apps.position], 0, @f |
||
932 | mov [sb_apps.position], 0 |
||
933 | @@: |
||
934 | |||
935 | ret |
||
936 | endp |
||
937 | |||
938 | ;---------------------- |
||
939 | |||
5394 | eAndrew | 940 | proc section_cb, _file, _sec |
5903 | eAndrew | 941 | ;; CHECK IF EXISTS |
942 | invoke libini.get_str, assoc_ini, [_sec], assoc_ini.exec, buffer, 2048, undefined |
||
943 | mcall 70, is_file_exists |
||
944 | cmpe ebx, -1, .exit |
||
945 | |||
5394 | eAndrew | 946 | mov ebx, [list.size] |
947 | shl ebx, 5 |
||
948 | add ebx, list |
||
5913 | eAndrew | 949 | stdcall string.cmp, [_sec], assoc_ini.sec |
950 | cmpe eax, 0, @f |
||
5394 | eAndrew | 951 | stdcall string.copy, [_sec], ebx |
952 | invoke libini.get_num, [_file], [_sec], assoc_ini.icon, 0 |
||
953 | mov ecx, [list.size] |
||
954 | shl ecx, 2 |
||
955 | mov [ecx + list.icon], eax |
||
956 | inc [list.size] |
||
957 | inc [sb_apps.max_area] |
||
958 | @@: |
||
959 | mov eax, 1 |
||
5903 | eAndrew | 960 | .exit: |
5394 | eAndrew | 961 | ret |
962 | endp |
||
963 | |||
964 | ;---------------------- |
||
965 | |||
5907 | eAndrew | 966 | proc sort_list |
5913 | eAndrew | 967 | mov eax, list |
968 | mov ebx, list.lowercased |
||
969 | @@: |
||
970 | stdcall string.copy, eax, ebx |
||
971 | stdcall string.to_lower_case, ebx |
||
972 | add eax, 32 |
||
973 | add ebx, 32 |
||
974 | cmpne byte [eax], 0, @b |
||
975 | |||
5907 | eAndrew | 976 | mov edi, 0 |
5913 | eAndrew | 977 | mov ebx, list.lowercased ;; i = 0 |
5907 | eAndrew | 978 | imul ecx, [list.size], 32 ;; i < n - 1 |
979 | sub ecx, 32 |
||
5913 | eAndrew | 980 | add ecx, list.lowercased |
5907 | eAndrew | 981 | |
982 | .loop1: |
||
5913 | eAndrew | 983 | mov edx, list.lowercased ;; j = 0 |
10017 | Doczom | 984 | mov esi, [list.size] ;; j < n - i - 1 |
5907 | eAndrew | 985 | sub esi, edi |
986 | dec esi |
||
987 | imul esi, 32 |
||
5913 | eAndrew | 988 | add esi, list.lowercased |
5907 | eAndrew | 989 | .loop2: |
990 | mov eax, edx |
||
991 | add eax, 32 |
||
992 | stdcall string.cmp, edx, eax, 32 |
||
993 | cmpne eax, 1, .next2 |
||
5913 | eAndrew | 994 | ;; swap names lw |
5907 | eAndrew | 995 | mov eax, edx |
996 | add eax, 32 |
||
997 | stdcall string.copy, edx, buffer7 |
||
998 | stdcall string.copy, eax, edx |
||
999 | stdcall string.copy, buffer7, eax |
||
5913 | eAndrew | 1000 | ;; swap names |
1001 | mov eax, edx |
||
1002 | sub eax, 256 * 32 - 32 |
||
1003 | sub edx, 256 * 32 |
||
1004 | stdcall string.copy, edx, buffer7 |
||
1005 | stdcall string.copy, eax, edx |
||
1006 | stdcall string.copy, buffer7, eax |
||
1007 | add edx, 256 * 32 |
||
5907 | eAndrew | 1008 | ;; swap icons |
1009 | mov eax, edx |
||
5913 | eAndrew | 1010 | sub eax, list.lowercased |
5907 | eAndrew | 1011 | shr eax, 3 |
1012 | add eax, list.icon |
||
1013 | push ebx ecx |
||
1014 | mov ebx, [eax] |
||
1015 | mov ecx, [eax + 4] |
||
1016 | mov [eax], ecx |
||
1017 | mov [eax + 4], ebx |
||
1018 | pop ecx ebx |
||
1019 | .next2: |
||
1020 | add edx, 32 |
||
1021 | cmpne edx, esi, .loop2 |
||
1022 | .next1: |
||
1023 | inc edi |
||
1024 | add ebx, 32 |
||
1025 | cmpne ebx, ecx, .loop1 |
||
1026 | |||
1027 | ret |
||
1028 | endp |
||
1029 | |||
1030 | ;---------------------- |
||
1031 | |||
5394 | eAndrew | 1032 | dataend: |
1033 | |||
1034 | ;=============================== |
||
1035 | |||
5721 | leency | 1036 | skin system_colors |
5394 | eAndrew | 1037 | list rb 32 * 256 |
5913 | eAndrew | 1038 | .lowercased rd 32 * 256 |
5394 | eAndrew | 1039 | .icon rd 256 |
1040 | .size rd 1 |
||
1041 | img rd 1 |
||
1042 | .rgb rd 1 |
||
1043 | .size rd 1 |
||
1044 | .buf rb 40 |
||
1045 | .sel rb 32 * 32 * 3 |
||
1046 | win: |
||
1047 | .x rd 1 |
||
1048 | .y rd 1 |
||
1049 | win.title rb 256 |
||
7217 | leency | 1050 | param_lwr rd 1 |
5394 | eAndrew | 1051 | param_e rd 1 |
1052 | param_a rd 1 |
||
7217 | leency | 1053 | param_s rd 1 |
5394 | eAndrew | 1054 | undefined rb 1 |
5907 | eAndrew | 1055 | buffer rb 2048 |
1056 | buffer2 rb 2048 ;OD |
||
1057 | buffer3 rb 2048 ;OD |
||
1058 | buffer4 rb 2048 ;OD |
||
1059 | buffer5 rb 2048 ;OD |
||
1060 | buffer6 rb 2048 ;check existance |
||
10017 | Doczom | 1061 | buffer7 rb 32 ;for sorting |
5908 | eAndrew | 1062 | buffer8 rd 2048 |
7217 | leency | 1063 | paramorig rb 2048 |
5394 | eAndrew | 1064 | _stack rb 2048 |
10017 | Doczom | 1065 | params rb 256 |
5903 | eAndrew | 1066 | memory:>>32,>10>4,>10>4,>3>9>3,>9>3,>214,>208,>[win.y],>[win.x],> |