Update headers programs : delete MENUET00 header on 2 programs.
[kolibrios.git] / programs / system / taskbar / trunk / TASKBAR.ASM
blobf09cd94406c1edf1dbc39714226ef1e4fd9bcf49
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
2 ;                                                   ;\r
3 ;   TASK PANEL for KolibriOS  - Compile with fasm   ;\r
4 ;                                                   ;\r
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
6 ;------------------------------------------------------------------------------\r
7 ; version:      2.25\r
8 ; last update:  14/07/2013\r
9 ; changed by:   Marat Zakiyanov aka Mario79, aka Mario\r
10 ; changes:      Reinstall screen work area after change screen resolution\r
11 ;------------------------------------------------------------------------------\r
12 ; version:      2.24\r
13 ; last update:  16/06/2013\r
14 ; changed by:   hidnplayr\r
15 ; changes:      Changed keymap hotkeys to only use left alt\r
16 ;               (Right alt has special function on some keyboards)\r
17 ;------------------------------------------------------------------------------\r
18 ; version:      2.23\r
19 ; last update:  26/04/2012\r
20 ; changed by:   Marat Zakiyanov aka Mario79, aka Mario\r
21 ; changes:      Using new  f18.23 - minimize all windows\r
22 ;------------------------------------------------------------------------------\r
23 ; version:      2.22\r
24 ; last update:  20/04/2012\r
25 ; changed by:   Marat Zakiyanov aka Mario79, aka Mario\r
26 ; changes:      Activation mechanism when trying to run an existing appl.\r
27 ;               Forced redrawing the background after the clean desktop (Win+D)\r
28 ;------------------------------------------------------------------------------\r
29 ; version:      2.2\r
30 ; last update:  19/04/2012\r
31 ; changed by:   Marat Zakiyanov aka Mario79, aka Mario\r
32 ; changes:      Support PrintScreen for SCRSHOOT.\r
33 ;               Path to run applications from the INI file.\r
34 ;               Algorithm anti-duplication of applications for run with hotkey.\r
35 ;               Added color selection for the Alt+Tab.\r
36 ;               Alt+Ctrl+ArrowLeft - Page list next\r
37 ;               Alt+Ctrl+ArrowRight - Page list previous\r
38 ;------------------------------------------------------------------------------\r
39 ; version:      2.1\r
40 ; last update:  18/04/2012\r
41 ; changed by:   Marat Zakiyanov aka Mario79, aka Mario\r
42 ; changes:      Added color selection for the text.\r
43 ;               Show "change page list" only if the applications\r
44 ;               does not fit in the panel.\r
45 ;               Display file names up to 11 char previously displ. only 8 char.\r
46 ;------------------------------------------------------------------------------\r
47 ; version:      2.0\r
48 ; last update:  17/04/2012\r
49 ; changed by:   Marat Zakiyanov aka Mario79, aka Mario\r
50 ; changes:      New logic of switching windows (turnoff/restore)\r
51 ;               New logic of button "clear desktop".\r
52 ;               Win+D (restore/clear desktop), Win+R (start RUN application).\r
53 ;               Using the library LibINI to set the parameters.\r
54 ;               New style of panel. Start application Menu with boot options.\r
55 ;               two versions of the location of the panel -\r
56 ;               the bottom of the desktop and on top of the desktop.\r
57 ;------------------------------------------------------------------------------\r
58 ; last update:  31/03/2012\r
59 ; changed by:   Marat Zakiyanov aka Mario79, aka Mario\r
60 ; changes:      The program uses only 20 Kb memory is now.\r
61 ;               Code optimizing and refactoring.\r
62 ;------------------------------------------------------------------------------\r
63 format binary as ""\r
65         use32\r
66         org 0x0\r
67         db 'MENUET01'   ; 8 byte id\r
68         dd 0x01         ; header version\r
69         dd START        ; program start\r
70         dd IM_END       ; program image size\r
71         dd I_END        ; reguired amount of memory - 10 Kb\r
72         dd stack_top    ; esp\r
73         dd 0x0          ; boot parameters\r
74         dd path         ; application pach\r
75 ;------------------------------------------------------------------------------\r
76 include 'lang.inc'\r
77 include '../../../macros.inc'\r
78 include '../../../proc32.inc'\r
79 ;include '../../../debug.inc'\r
80 include 'MOI.INC'       ;à áª« ¤ª¨ ª« ¢¨ âãàë\r
81 include '../../../develop/libraries/box_lib/load_lib.mac'\r
82         @use_library    ;use load lib macros\r
83 ;------------------------------------------------------------------------------\r
84 caps_lock_check fix 1\r
85 ;------------------------------------------------------------------------------\r
86 time_bgr_color = 0x66cc\r
87 ;PANEL_HEIGHT = 18\r
88 ML_SIZE = 10\r
89 MR_SIZE = 10\r
90 if lang eq et\r
91 MENU_SIZE = 60\r
92 else\r
93 MENU_SIZE = 50\r
94 end if\r
95 CLD_SIZE = 20\r
96 TAB_SIZE = 75   ;60\r
97 TRAY_SIZE = 140\r
99 CLOCK_SIZE = 40\r
100 CPU_USAGE_SIZE = 10\r
101 CHLANG_SIZE = 20\r
102 PAGE_LIST_SIZE = 36\r
103 ;------------------------------------------------------------------------------\r
104 align 4\r
105 handle_key:\r
106         mcall   18,7\r
107         mov     [active_process],eax\r
109         mcall   2\r
111 ;       dps     "panel key: "\r
112 ;       dph     eax\r
113 ;       newline\r
115         cmp     al, 2\r
116         jnz     begin_1.ret\r
118         mov     ebx, exec_fileinfo\r
119         shr     eax, 8\r
120         cmp     al, 0\r
121         je      prod\r
123         mov     [key_r],al\r
124         sub     [key_r],3\r
125         cmp     [key_r],9\r
126         jc      alter\r
128 if caps_lock_check\r
129         cmp     al,58   ;CAPS LOCK DOWN\r
130         jne     @f\r
132         pusha\r
133         mcall   26,2,9\r
134         mov     ebx,eax\r
135         mov     eax,2\r
136         mov     [draw_flag_certainly],1\r
137         call    draw_flag       ; language\r
138         popa\r
139         ret\r
140 @@:\r
141 end if\r
143         cmp     al, 15  ; Alt+Tab DOWN\r
144         jz      alt_tab_pressed\r
146         cmp     al, 88  ; Ctrl+Alt+F12\r
147         jz      start_end_application\r
149         cmp     al, 91  ; RWin DOWN\r
150         jz      set_win_key_flag\r
152         cmp     al, 92  ; LWin DOWN\r
153         jz      set_win_key_flag\r
155         cmp     al, 1   ; LCtrl+Esc DOWN\r
156         jz      set_win_key_flag\r
158         cmp     al, 219 ; RWin UP\r
159         jz      cut_win_key_flag        ;start_menu_application\r
161         cmp     al, 220 ; LWin UP\r
162         jz      cut_win_key_flag        ;start_menu_application\r
164         cmp     al, 129 ; LCtrl+Esc UP\r
165         jz      cut_win_key_flag        ;start_menu_application\r
167         cmp     al, 62  ; Alt+F4\r
168         jz      kill_active_application\r
170         cmp     al, 205\r
171         jz      page_list_next\r
173         cmp     al, 203\r
174         jz      page_list_prev\r
176         cmp     al, 69  ; Alt+Shift+NumLock\r
177         jz      start_mousemul_application\r
179         cmp     al, 19  ; Win+R\r
180         jz      start_run_application\r
182         cmp     al, 32  ; Win+D\r
183         jz      minimize_all_windows\r
185         cmp     al, 55  ; PrintScreen DOWN\r
186         jz      start_PrintScreen_application\r
187 ;--------------------------------------\r
188 align 4\r
189 prod:\r
190         cmp     [current_alt_tab_app], -1\r
191         jz      @f\r
193         test    ah, 0x30        ; Alt+Tab UP\r
194         jz      alt_tab_released\r
195 ;--------------------------------------\r
196 align 4\r
197 @@:\r
198 ; this is hotkey LCtrl+LShift ;or LShift+RShift\r
199         jmp     karu\r
200 ;------------------------------------------------------------------------------\r
201 align 4\r
202 set_win_key_flag:\r
203         mov     [win_key_flag],1\r
204         ret\r
205 ;------------------------------------------------------------------------------\r
206 align 4\r
207 cut_win_key_flag:\r
208         xor     eax,eax\r
209         mov     [win_key_flag],al\r
210         xchg    [start_menu_flag],al\r
211         test    al,al\r
212         jz      start_menu_application\r
213         ret\r
214 ;------------------------------------------------------------------------------\r
215 align 4\r
216 change_key_lang:\r
217         mov     dword [ebx+8], chlang\r
218         mcall   70\r
219 ;--------------------------------------\r
220 align 4\r
221 begin_1:\r
222         mov     ecx,[active_process]\r
223         mcall   18, 3\r
224         mcall   5, 25\r
225 ;--------------------------------------\r
226 align 4\r
227 .ret:\r
228         ret\r
229 ;------------------------------------------------------------------------------\r
230 align 4\r
231 start_end_application:\r
232         mov     esi,end_name\r
233         call    algorithm_anti_duplication\r
234         test    eax,eax\r
235         jz      @f\r
237         mcall   18,3,edi\r
238         ret\r
239 ;--------------------------------------\r
240 align 4\r
241 @@:\r
242         mov     ebx, exec_fileinfo\r
243         mov     dword [ebx + 21],end_name\r
244         mcall   70\r
245         ret\r
246 ;------------------------------------------------------------------------------\r
247 align 4\r
248 start_mousemul_application:\r
249         mov     esi,mousemul_name\r
250         call    algorithm_anti_duplication\r
251         test    eax,eax\r
252         jz      @f\r
253         ret\r
254 ;--------------------------------------\r
255 align 4\r
256 @@:\r
257         mov     ebx, exec_fileinfo\r
258         mov     dword [ebx + 21],mousemul_name\r
259         mcall   70\r
260         ret\r
261 ;------------------------------------------------------------------------------\r
262 align 4\r
263 kill_active_application:\r
264         mcall   72,1,3,1\r
265         jmp     begin_1.ret\r
266 ;------------------------------------------------------------------------------\r
268 align 4\r
269 start_menu_application:\r
270         call    menu_handler\r
271         jmp     begin_1.ret\r
272 ;------------------------------------------------------------------------------\r
273 align 4\r
274 start_run_application:\r
275         cmp     [win_key_flag],1\r
276         je      @f\r
277         ret\r
278 ;--------------------------------------\r
279 align 4\r
280 @@:\r
281         mov     [start_menu_flag],1\r
283         mov     esi,run_name\r
284         call    algorithm_anti_duplication\r
285         test    eax,eax\r
286         jz      @f\r
288         mcall   18,3,edi\r
289         ret\r
290 ;--------------------------------------\r
291 align 4\r
292 @@:\r
293         mov     ebx, exec_fileinfo\r
294         mov     dword [ebx + 21], run_name\r
295         mcall   70\r
296         jmp     begin_1.ret\r
297 ;------------------------------------------------------------------------------\r
298 align 4\r
299 start_PrintScreen_application:\r
300         mov     esi,printscreen_name\r
301         call    algorithm_anti_duplication\r
302         test    eax,eax\r
303         jz      @f\r
304         mcall   18,3,edi\r
305         ret\r
306 ;--------------------------------------\r
307 align 4\r
308 @@:\r
309         mov     ebx, exec_fileinfo\r
310         mov     dword [ebx + 21],printscreen_name\r
311         mov     [ebx+8],dword bootparam_printscreen\r
312         mcall   70\r
313         jmp     begin_1.ret\r
314 ;------------------------------------------------------------------------------\r
315 align 4\r
316 minimize_all_windows:\r
317         cmp     [win_key_flag],1\r
318         je      @f\r
319         ret\r
320 ;--------------------------------------\r
321 align 4\r
322 @@:\r
323         mov     [start_menu_flag],1\r
324         call    clean_desktop\r
325         ret\r
326 ;------------------------------------------------------------------------------\r
327 align 4\r
328 algorithm_anti_duplication:\r
329         cld\r
330 ;--------------------------------------\r
331 align 4\r
332 @@:\r
333         lodsb\r
334         test    al,al\r
335         jnz     @r\r
336 ;--------------------------------------\r
337 align 4\r
338 @@:\r
339         std\r
340         lodsb\r
341         cmp     al,'/'\r
342         jnz     @r\r
343         add     esi,2\r
344         mov     edx,esi\r
346         mov     edi,1\r
347 ;--------------------------------------\r
348 align 4\r
349 @@:\r
350         inc     edi\r
351         mov     ecx,edi\r
352         mcall   9,procinfo_window_tabs\r
354         cmp     edi,eax\r
355         jg      .apply_changes\r
357         mov     esi,edx\r
358         mov     ecx,11\r
359         add     ebx,9\r
360         cld\r
361 ;--------------------------------------\r
362 align 4\r
363 .loop:\r
364         lodsb\r
365         inc     ebx\r
366         cmp     al,[ebx]\r
367         jne     @r\r
369         loop    .loop\r
371         mov     eax,1\r
372         ret\r
373 ;--------------------------------------\r
374 align 4\r
375 .apply_changes:\r
376         xor     eax,eax\r
377         ret\r
378 ;------------------------------------------------------------------------------\r
379 align 4\r
380 page_list_next:\r
381         cmp     [page_list],50\r
382         je      @f\r
384         xor     eax,eax\r
385         cmp     [page_list_enable],eax\r
386         je      @f\r
388         inc     [page_list]\r
389         mov     [redraw_window_flag],1\r
390 ;--------------------------------------\r
391 align 4\r
392 @@:\r
393         jmp     begin_1.ret\r
394 ;------------------------------------------------------------------------------\r
395 align 4\r
396 page_list_prev:\r
397         xor     eax,eax\r
398         cmp     [page_list],eax\r
399         je      @f\r
401         cmp     [page_list_enable],eax\r
402         je      @f\r
404         dec     [page_list]\r
405         mov     [redraw_window_flag],1\r
406 ;--------------------------------------\r
407 align 4\r
408 @@:\r
409         jmp     begin_1.ret\r
410 ;------------------------------------------------------------------------------\r
411 align 4\r
412 alt_tab_pressed:\r
413 ; handle Alt+Tab and Alt+Shift+Tab\r
414         mov     ebp, eax\r
415         cmp     [current_alt_tab_app], -1\r
416         jnz     has_alt_tab_app\r
417 ; § ¯®«­ï¥¬ â ¡«¨æ㠯ਫ®¦¥­¨©, ¯®¤«¥¦ é¨å ¯¥à¥ª«î祭¨î\r
418         xor     edx, edx\r
419         mov     ebx, procinfo_window_tabs\r
420         mov     ecx, 1\r
421 ;--------------------------------------\r
422 align 4\r
423 .fill:\r
424         inc     ecx\r
425         mcall   9\r
426         call    need_window_tab\r
427         jz      @f\r
429         cmp     edx, 256\r
430         jz      @f\r
432         mov     [alt_tab_list+edx*8], ecx\r
433         movzx   esi, word [ebx+4]\r
434         mov     [alt_tab_list+edx*8+4], esi\r
435         inc     edx\r
436 ;--------------------------------------\r
437 align 4\r
438 @@:\r
439         cmp     ecx,eax\r
440         jb      .fill\r
442         mov     [alt_tab_list_size], edx\r
443         test    edx, edx\r
444         jz      begin_1.ret\r
446         mcall   66,4,0,0        ; «®¢¨¬ ¬®¬¥­â ®â¯ã᪠­¨ï ¢á¥å ã¯à ¢«ïîé¨å ª« ¢¨è\r
447         test    eax, eax\r
448         jnz     begin_1.ret\r
450         xor     edx, edx\r
451         mov     eax, [alt_tab_list+4]\r
452         xor     ecx, ecx\r
453         inc     ecx\r
454 ;--------------------------------------\r
455 align 4\r
456 .findmax:\r
457         cmp     [alt_tab_list+ecx*8+4], eax\r
458         jb      @f\r
460         mov     edx, ecx\r
461         mov     eax, [alt_tab_list+ecx*8+4]\r
462 ;--------------------------------------\r
463 align 4\r
464 @@:\r
465         inc     ecx\r
466         cmp     ecx, [alt_tab_list_size]\r
467         jb      .findmax\r
469         mov     [current_alt_tab_app], edx\r
470 ;--------------------------------------\r
471 align 4\r
472 has_alt_tab_app:\r
473         mov     eax, [current_alt_tab_app]\r
474         mov     edx, [alt_tab_list+eax*8+4]     ; slot\r
475         xor     ecx, ecx\r
476         or      eax, -1\r
477         test    ebp, 300h\r
478         jz      .notshift\r
480         or      esi, -1\r
481 ;--------------------------------------\r
482 align 4\r
483 .loop1:\r
484         cmp     [alt_tab_list+ecx*8+4], edx\r
485         jbe     @f\r
487         cmp     [alt_tab_list+ecx*8+4], esi\r
488         jae     @f\r
490         mov     eax, ecx\r
491         mov     esi, [alt_tab_list+ecx*8+4]\r
492 ;--------------------------------------\r
493 align 4\r
494 @@:\r
495         inc     ecx\r
496         cmp     ecx, [alt_tab_list_size]\r
497         jb      .loop1\r
499         cmp     eax, -1\r
500         jnz     .found\r
502         xor     edx, edx\r
503         xor     ecx, ecx\r
504         jmp     .loop1\r
505 ;--------------------------------------\r
506 align 4\r
507 .notshift:\r
508         xor     esi, esi\r
509 ;--------------------------------------\r
510 align 4\r
511 .loop2:\r
512         cmp     [alt_tab_list+ecx*8+4], edx\r
513         jae     @f\r
515         cmp     [alt_tab_list+ecx*8+4], esi\r
516         jbe     @f\r
518         mov     eax, ecx\r
519         mov     esi, [alt_tab_list+ecx*8+4]\r
520 ;--------------------------------------\r
521 align 4\r
522 @@:\r
523         inc     ecx\r
524         cmp     ecx, [alt_tab_list_size]\r
525         jb      .loop2\r
527         cmp     eax, -1\r
528         jnz     .found\r
530         or      edx, -1\r
531         xor     ecx, ecx\r
532         jmp     .loop2\r
533 ;--------------------------------------\r
534 align 4\r
535 .found:\r
536         mov     [current_alt_tab_app], eax\r
537         push    eax\r
538         xor     edx, edx\r
539         div     [max_applications]\r
540         mov     [page_list], eax\r
541         mov     edi, app_list\r
542         push    edi\r
543         mov     ecx, 20\r
544         or      eax, -1\r
545         rep     stosd\r
546         pop     edi\r
547         pop     ecx\r
548         sub     ecx, edx\r
549 ;--------------------------------------\r
550 align 4\r
551 @@:\r
552         cmp     ecx, [alt_tab_list_size]\r
553         jae     redraw_window_tabs\r
555         mov     eax, [alt_tab_list+ecx*8]\r
556         stosd\r
557         inc     ecx\r
558         jmp     @b\r
559 ;--------------------------------------\r
560 align 4\r
561 alt_tab_released:\r
562         mcall   66,5,0,0        ; ã¦¥ ¯®©¬ «¨, å¢ â¨â :)\r
564         or      eax, -1\r
565         xchg    eax, [current_alt_tab_app]\r
566         mov     ecx, [alt_tab_list+eax*8]\r
567         mcall   18,3\r
569         jmp     redraw_window_tabs\r
570 ;------------------------------------------------------------------------------\r
571 align 4\r
572 active_process  dd 0\r
574 exit:\r
575         mcall -1\r
576 ;------------------------------------------------------------------------------\r
577 START:\r
578         mcall   68,11\r
579         mcall   66,1,1\r
581         mcall   9,process_info_buffer,-1\r
582         mov     ecx, [ebx + process_information.PID]    ; PID\r
583         mcall   18,21\r
584         mov     [my_active_slot],eax    ; WINDOW SLOT\r
587 load_libraries l_libs_start,end_l_libs\r
589         test    eax,eax\r
590         jnz     exit\r
592         call    Get_ini\r
594         mcall   66,4,0,2        ; LShift+RShift\r
595         mcall   66,,,33h        ; LCtrl+LShift\r
596         mcall   66,,88,110h     ; Alt+Ctrl+F12\r
597         mcall   66,,91,0h       ; RWin DOWN\r
598         mcall   66,,92          ; LWin DOWN\r
599         mcall   66,,219         ; RWin UP\r
600         mcall   66,,220         ; LWin UP\r
601         mcall   66,,19,0h       ; Win+R DOWN\r
602         mcall   66,,32,0h       ; Win+D DOWN\r
603         mcall   66,,55,10h      ; Ctrl+PrintScreen DOWN\r
604         mcall   66,,1,30h       ; LCtrl+Esc DOWN\r
605         mcall   66,,129         ; LCtrl+Esc UP\r
606         mcall   66,,62,300h     ; Alt+F4\r
607         mcall   66,,2           ; Alt+1\r
608         mcall   66,,3           ; Alt+2\r
609         mcall   66,,4           ; Alt+3\r
610         mcall   66,,5           ; Alt+4\r
611         mcall   66,,6           ; Alt+5\r
612         mcall   66,,7           ; Alt+6\r
613         mcall   66,,8           ; Alt+7\r
614         mcall   66,,9           ; Alt+8\r
615         mcall   66,,10          ; Alt+9\r
616         mcall   66,,15          ; Alt+Tab DOWN\r
617         mcall   66,,15,301h     ; Alt+Shift+Tab DOWN\r
618         mcall   66,,69          ; Alt+Shift+NumLock\r
620 if caps_lock_check\r
621         xor     edx,edx\r
622         mcall   66,4,58\r
623 end if\r
624         mcall   14\r
625         mov     [screen_size],eax\r
627         call    set_work_ares_pf_screen\r
629         mcall   9,process_info_buffer,-1\r
630         mov     ecx,[process_info_buffer.PID]\r
631         mcall   18,21\r
632         mov     [this_slot],eax\r
633         mov     [max_slot],255\r
634 ;--------------------------------------\r
635 align 4\r
636 start_after_minimize:\r
637         call    draw_window\r
638         call    draw_running_applications\r
640         mcall   23,30\r
641         call    load_ini\r
642 ;------------------------------------------------------------------------------\r
643 align 4\r
644 still:\r
645         call    draw_time\r
646         call    draw_cpu_usage\r
647         call    draw_running_applications\r
649         mcall   18,7    ; check if active window changed\r
650         cmp     eax, [last_active_window]\r
651         jz      @f\r
652 ; need_window_tab:\r
653 ; in: ebx->process info\r
654 ; out: ZF set <=> do not draw\r
655         mov     ebx,[last_active_window]\r
656         mov     [prev_active_window], ebx\r
657         mov     [last_active_window], eax\r
659         mov     ecx, eax\r
660         mcall   9,process_info_buffer\r
662         call    need_window_tab\r
663         jnz     .need_repaint\r
665         mcall   9,process_info_buffer,[prev_active_window]\r
666         call    need_window_tab\r
667         jz      @f\r
668 ;--------------------------------------\r
669 align 4\r
670 .need_repaint:\r
671         mov     dword [active_window_changed], 1\r
672 ;--------------------------------------\r
673 align 4\r
674 @@:\r
675         mcall   23,20\r
677         push    eax\r
678         mcall   18,7\r
679         cmp     [my_active_slot],eax\r
680         je      @f\r
682         mov     [current_active_slot],eax\r
683 ;--------------------------------------\r
684 align 4\r
685 @@:\r
686         pop     eax\r
688         cmp     eax,1           ; redraw ?\r
689         jz      red\r
691         push    eax\r
692         mov     eax,[redraw_window_flag]\r
693         test    eax,eax\r
694         jz      @f\r
696         call    draw_window\r
697 ;--------------------------------------\r
698 align 4\r
699 @@:\r
700         pop     eax\r
702         cmp     eax,2\r
703         jnz     @f\r
704         call    handle_key\r
705         jmp     .key\r
706 ;--------------------------------------\r
707 align 4\r
708 @@:\r
709         cmp     eax,3           ; button ?\r
710         jz      button\r
711 ;--------------------------------------\r
712 align 4\r
713 .key:\r
714         cmp     dword [active_window_changed], 0\r
715         jnz     red_active\r
717         call    draw_flag       ; language\r
718         jmp     still\r
719 ;------------------------------------------------------------------------------\r
720 align 4\r
721 set_work_ares_pf_screen:\r
722 ;eax = [xsize]*65536 + [ysize]\r
723         mov     ecx,eax\r
724         shr     ecx,16\r
725         and     eax,0xFFFF\r
726         cmp     [place_attachment],1\r
727         je      @f\r
729         ror     eax,16\r
730         add     eax,[height]\r
731         rol     eax,16\r
732         mov     edx,eax\r
733         jmp     .selected\r
734 ;--------------------------------------\r
735 align 4\r
736 @@:\r
737         sub     eax,[height]\r
738         mov     edx, eax\r
739 ;--------------------------------------\r
740 align 4\r
741 .selected:\r
742         mcall   48,6\r
743         ret\r
744 ;------------------------------------------------------------------------------\r
745 align 4\r
746 red_active:\r
747 red:\r
748         mov     dword [active_window_changed], 0\r
750         mcall   14\r
751         movzx   ecx,ax\r
752         mov     edx,eax\r
753         shr     edx,16\r
754         cmp     [screen_size.height],ax\r
755         jne     @f\r
757         rol     eax,16\r
758         cmp     [screen_size.width],ax\r
759         je      .lp1\r
761         rol     eax,16\r
762 ;--------------------------------------\r
763 align 4\r
764 @@:\r
765         mov     [screen_size],eax\r
767         push    ecx edx\r
768         call    set_work_ares_pf_screen\r
769         pop     edx ecx\r
771         sub     ecx,[height]\r
772         mcall   67,0,,,[height]\r
773 ;--------------------------------------\r
774 align 4\r
775 .lp1:\r
776         call    draw_window\r
777         jmp     still\r
778 ;------------------------------------------------------------------------------\r
779 align 4\r
780 button:\r
781         mcall   17\r
782         test    eax,0xfffffe00  ; is it close button? (signal from @taskbar)\r
783         jz      still           ; if so - wait for another event, because @taskbar shouldn't be closed\r
785         cmp     al, 0\r
786         jnz     right_mouse\r
788         cmp     ah,50\r
789         jb      no_activate\r
790         cmp     ah,70\r
791         jg      no_activate\r
793         movzx   ecx,byte ah\r
794         sub     ecx,52\r
795         shl     ecx,2\r
797         mov     ecx,[app_list+ecx]\r
799         mcall   9,process_info_buffer\r
801         test    [ebx + process_information.wnd_state], byte 10b ; window is minimized to panel\r
802         jnz     @f\r
804         cmp     ecx,[current_active_slot]\r
805         je      .turn_off\r
806 ;--------------------------------------\r
807 align 4\r
808 @@:\r
809         mcall   18,3,\r
810         jmp     .task_switching\r
811 ;--------------------------------------\r
812 align 4\r
813 .turn_off:\r
814         mov     edx,ecx\r
815         mcall   18,22,0\r
816 ;--------------------------------------\r
817 align 4\r
818 .task_switching:\r
819         mcall   68,1\r
820         jmp     still\r
821 ;------------------------------------------------------------------------------\r
822 align 4\r
823 right_mouse:\r
824         cmp     ah,50\r
825         jb      still\r
827         cmp     ah,70\r
828         jg      still\r
830         movzx   ecx,byte ah\r
831         sub     ecx,52\r
833         cmp     ecx, [app_tab_count]\r
834         jge     still\r
836         shl     ecx,2\r
837         mcall   37,0\r
838         mov     ebx, eax\r
839         shr     eax, 16\r
840         mov     [x_coord], ax\r
841         and     ebx, 0xFFFF\r
842         mov     [y_coord], bx\r
844         mov     ecx,[app_list+ecx]      ; ecx->selected app.slot\r
845         mov     [n_slot], ecx\r
846         mcall   9,procinfo_for_detect\r
848         mcall   51,1,context_menu_start,ctx_menu_stack\r
850         mov     [ctx_menu_PID], eax\r
851         jmp     still\r
852 ;------------------------------------------------------------------------------\r
853 align 4\r
854 no_activate:\r
855         cmp     ah,101    ; minimize to left\r
856         je      left_button\r
858         cmp     ah,102    ; minimize to right\r
859         je      right_button\r
861         cmp     ah, 103\r
862         je      clean_desktop_1             ; minimize all windows\r
864         cmp     ah,byte 1         ; start/terminate menu\r
865         jnz     noselect\r
867         call    menu_handler\r
869         jmp     still\r
870 ;--------------------------------------\r
871 align 4\r
872 clean_desktop_1:\r
873         call    clean_desktop\r
874         jmp     still\r
875 ;--------------------------------------\r
876 align 4\r
877 noselect:\r
878         mov     ebx, exec_fileinfo\r
879         cmp     ah,byte 2              ; start calendar\r
880         jnz     noid15  ;noclock\r
882         mov     esi,calendar_name\r
883         call    algorithm_anti_duplication\r
884         test    eax,eax\r
885         jz      @f\r
887         mcall   18,2,edi\r
888         jmp     still\r
889 ;--------------------------------------\r
890 align 4\r
891 @@:\r
892         mov     ebx, exec_fileinfo\r
893         mov     dword [ebx+21], calendar_name\r
894         mcall   70\r
895         jmp     still\r
896 ;--------------------------------------\r
897 align 4\r
898 noid15:\r
899         cmp     ah,16\r
900         jne     noid16\r
902         call    karu\r
903         call    draw_flag       ; language\r
904         jmp     still\r
905 ;--------------------------------------\r
906 align 4\r
907 noid16:\r
908         cmp     ah,18\r
909         jne     noid18\r
911         mov     esi,sysmeter_name\r
912         call    algorithm_anti_duplication\r
913         test    eax,eax\r
914         jz      @f\r
916         mcall   18,2,edi\r
917         jmp     still\r
918 ;--------------------------------------\r
919 align 4\r
920 @@:\r
921         mov     ebx, exec_fileinfo\r
922         mov     dword [ebx+21], sysmeter_name\r
923         mcall   70\r
924         jmp     still\r
925 ;--------------------------------------\r
926 align 4\r
927 noid18:\r
928         cmp     ah,21\r
929         jnz     noid21\r
931         cmp     [page_list],50\r
932         jnc     still\r
933         inc     [page_list]\r
934         jmp     red\r
935 ;--------------------------------------\r
936 align 4\r
937 noid21:\r
938         cmp     ah,22\r
939         jnz     still\r
941         cmp     [page_list],0\r
942         je      still\r
944         dec     [page_list]\r
945         jmp     red\r
946 ;------------------------------------------------------------------------------\r
947 align 4\r
948 restore_desktop:\r
949         mcall   9,process_info_buffer,-1\r
950         mov     [max_slot], eax\r
951         mov     ecx, 2\r
952         mov     edx, 2\r
953 ;--------------------------------------\r
954 align 4\r
955 @@:\r
956         mcall   18, 22\r
957         inc     edx\r
958         cmp     edx, [max_slot]\r
959         jbe     @b\r
960         ret\r
961 ;------------------------------------------------------------------------------\r
962 align 4\r
963 clean_desktop:\r
964         mcall   18,23\r
965         test    eax,eax\r
966         jnz     @f\r
967         call    restore_desktop\r
968 ;--------------------------------------\r
969 align 4\r
970 @@:\r
971         ret\r
972 ;------------------------------------------------------------------------------\r
973 align 4\r
974 conversion_HEX_to_ASCII:\r
975         ror     eax,12\r
976         mov     ecx,4\r
977 ;--------------------------------------\r
978 align 4\r
979 .loop:\r
980         mov     bl,al\r
981         rol     eax,4\r
982         and     bl,0xf\r
983         cmp     bl,0xA  ; check for ABCDEF\r
984         jae     @f\r
986         add     bl,0x30 ; 0-9\r
987         jmp     .store\r
988 ;--------------------------------------\r
989 align 4\r
990 @@:\r
991         add     bl,0x57 ; A-F\r
992 ;--------------------------------------\r
993 align 4\r
994 .store:\r
995 ;       dps     "param_store: "\r
996         mov     [edi],bl\r
997         inc     edi\r
998         dec     ecx\r
999         jnz     .loop\r
1000         ret\r
1001 ;------------------------------------------------------------------------------\r
1002 align 4\r
1003 menu_handler:\r
1004         mov     edi,bootparam\r
1006         mov     eax,[menu_button_x.start]\r
1007         call    conversion_HEX_to_ASCII\r
1009         mov     eax,[menu_button_x.size]\r
1010         call    conversion_HEX_to_ASCII\r
1012         mov     eax,[menu_button_y.start]\r
1013         call    conversion_HEX_to_ASCII\r
1015         mov     eax,[menu_button_y.size]\r
1016         call    conversion_HEX_to_ASCII\r
1018         mov     eax,[height]\r
1019         call    conversion_HEX_to_ASCII\r
1021         mov     eax,[place_attachment]\r
1022         call    conversion_HEX_to_ASCII\r
1024         xor     eax,eax ; terminator for boot parameters string\r
1025         stosd\r
1027         mov     ebx, exec_fileinfo\r
1028         mov     [ebx+21],dword menu_name\r
1029         mov     [ebx+8],dword bootparam\r
1030         mcall   70\r
1031         mov     [ebx+8],dword 0\r
1032         ret\r
1033 ;------------------------------------------------------------------------------\r
1034 align 4\r
1035 draw_small_right:\r
1036         pusha\r
1037         mcall   12,1\r
1039         xor     eax,eax\r
1040         mov     edx,[wcolor]\r
1041         mov     esi,edx\r
1042         mov     edi,edx\r
1043         or      edx, 0x01000000\r
1044         mcall\r
1046         xor     ecx,ecx\r
1047         mov     cx,[height]\r
1048         mcall   8,<0,10>,,1,[wcolor]\r
1050         mov     ebx,2*65536     ;+6\r
1051         mov     bx,[height]\r
1052         shr     bx,1\r
1053         sub     bx,3\r
1054         mov     edx,[wcolor]\r
1055         mov     eax,COLOR_CHANGE_MAGNITUDE_2\r
1056         call    add_color_change_magnitude\r
1057         mov     ecx,edx\r
1058         mcall   4,,,hidetext,1\r
1060         mcall   12,2\r
1061         popa\r
1062         ret\r
1063 ;------------------------------------------------------------------------------\r
1064 align 4\r
1065 draw_small_left:\r
1066         pusha\r
1067         mcall   12,1\r
1069         xor     eax,eax\r
1070         mov     edx,[wcolor]\r
1071         mov     esi,edx\r
1072         mov     edi,edx\r
1073         or      edx, 0x01000000\r
1074         mcall\r
1076         xor     ecx,ecx\r
1077         mov     cx,[height]\r
1078         mcall   8,<0,9>,,1,[wcolor]\r
1080         mov     ebx,3*65536     ;+6\r
1081         mov     bx,[height]\r
1082         shr     bx,1\r
1083         sub     bx,3\r
1084         mov     edx,[wcolor]\r
1085         mov     eax,COLOR_CHANGE_MAGNITUDE_2\r
1086         call    add_color_change_magnitude\r
1087         mov     ecx,edx\r
1088         mcall   4,,,hidetext+1,1\r
1090         mcall   12,2\r
1091         popa\r
1092         ret\r
1093 ;------------------------------------------------------------------------------\r
1094 align 4\r
1095 right_button:\r
1096         mov     [small_draw],dword draw_small_right\r
1098         mcall   14\r
1100         shr     eax, 16\r
1101         mov     ebx, eax\r
1102         mov     ecx, -1\r
1103         mov     edx, 9\r
1104         sub     ebx, edx\r
1105         mov     esi, -1\r
1106         mcall   67\r
1108         call    draw_small_right\r
1109         jmp     small_wait\r
1110 ;------------------------------------------------------------------------------\r
1111 align 4\r
1112 left_button:\r
1113         mov     [small_draw],dword draw_small_left\r
1115         xor     ebx,ebx\r
1116         mcall   67,,-1,9,-1\r
1118         call    draw_small_left\r
1119 ;--------------------------------------\r
1120 align 4\r
1121 small_wait:\r
1122         mcall   10\r
1123         cmp     eax,1\r
1124         jne     no_win\r
1126         call    [small_draw]\r
1127         jmp     small_wait\r
1128 ;--------------------------------------\r
1129 align 4\r
1130 no_win:\r
1131         cmp     eax,2\r
1132         jne     no_key\r
1134         call    handle_key\r
1135         jmp     small_wait\r
1136 ;--------------------------------------\r
1137 align 4\r
1138 no_key:\r
1139         mcall   17\r
1140         cmp     ah,1\r
1141         jne     no_full\r
1143         mcall   14      ; get screen max x & max y\r
1145         mov     edx, eax\r
1146         shr     edx, 16\r
1147         xor     ebx, ebx\r
1148         mcall   67,,-1,,-1 ; x0 y0 xs ys\r
1150         jmp     still\r
1151 ;--------------------------------------\r
1152 align 4\r
1153 no_full:\r
1154         call    menu_handler\r
1155         jmp     small_wait\r
1156 ;------------------------------------------------------------------------------\r
1157 include 'libini.inc'\r
1158 ;------------------------------------------------------------------------------\r
1159 include '../../../dll.inc'\r
1160 ;------------------------------------------------------------------------------\r
1161 include 'drawappl.inc'\r
1162 ;------------------------------------------------------------------------------\r
1163 include 'drawbutt.inc'\r
1164 ;------------------------------------------------------------------------------\r
1165 include 'drawwind.inc'\r
1166 ;------------------------------------------------------------------------------\r
1167 include 'drawtray.inc'\r
1168 ;------------------------------------------------------------------------------\r
1169 include 'ctx_menu.asm'\r
1170 ;------------------------------------------------------------------------------\r
1171 include 'i_data.inc'\r
1172 ;------------------------------------------------------------------------------\r
1173 IM_END:\r
1174 ;------------------------------------------------------------------------------\r
1175 include 'u_data.inc'\r
1176 ;------------------------------------------------------------------------------\r
1177 I_END:\r
1178 ;------------------------------------------------------------------------------\r