Subversion Repositories Kolibri OS

Rev

Rev 2619 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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