Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;                                                   ;
  3. ;    MENUBAR for KolibriOS  - Compile with fasm     ;
  4. ;                                                   ;
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6. ;------------------------------------------------------------------------------
  7. ; last update:  31/03/2012
  8. ; changed by:   Marat Zakiyanov aka Mario79, aka Mario
  9. ; changes:      The program uses only 20 Kb memory is now.
  10. ;               Code optimizing and refactoring.
  11. ;------------------------------------------------------------------------------
  12.         use32
  13.         org 0x0
  14.         db 'MENUET01'   ; 8 byte id
  15.         dd 0x01         ; header version
  16.         dd START        ; program start
  17.         dd IM_END       ;I_END      ; program image size
  18.         dd I_END        ;0xA000     ; reguired amount of memory - 10 Kb
  19.         dd stack_top    ;0xA000     ; esp
  20.         dd 0x0          ; boot parameters
  21.         dd 0x0          ; path
  22. ;------------------------------------------------------------------------------
  23. include 'lang.inc'
  24. include '..\..\..\macros.inc'
  25. include 'MOI.INC'       ;à áª« ¤ª¨ ª« ¢¨ âãàë
  26.  
  27. caps_lock_check fix 0
  28.  
  29. time_bgr_color = 0x66cc
  30.  
  31. width           dd  305
  32. buttons         dd    1  ;  0 no frames  ; 1 frames
  33. soften_up       dd    1  ;  0 no         ; 1 yes
  34. soften_down     dd    0  ;  0 no         ; 1 yes
  35. minimize_left   dd    1
  36. minimize_right  dd    1
  37. icons_position  dd    95
  38. menu_enable     dd    1
  39. setup_enable    dd    0
  40. graph_text      dd    1
  41. soften_middle   dd    1  ;  0 no         ; 1 yes
  42. icons           dd    1  ;  0 defaults   ; 1 activate
  43.  
  44. PANEL_HEIGHT = 18
  45. ;------------------------------------------------------------------------------
  46. align 4
  47. handle_key:
  48.         mcall   18, 7
  49.         mov     [active_process],eax
  50.  
  51.         mcall   2
  52.         cmp     al, 2
  53.         jnz     begin_1.ret
  54.  
  55.         mov     ebx, exec_fileinfo
  56.         shr     eax, 8
  57.         cmp     al, 0
  58.         je      prod
  59.  
  60.         mov     [key_r],al
  61.         sub     [key_r],2
  62.         cmp     al, 2
  63.         jz      alter
  64.  
  65.         cmp     al, 3
  66.         jz      alter
  67.  
  68.         cmp     al, 4
  69.         jz      alter
  70.  
  71.         cmp     al, 5
  72.         jz      alter
  73.  
  74.         cmp     al, 6
  75.         jz      alter
  76.  
  77.         cmp     al, 7
  78.         jz      alter
  79.  
  80.         cmp     al, 8
  81.         jz      alter
  82. ;--------------------------------------
  83. align 4
  84. prod:
  85. if caps_lock_check
  86.         cmp     al,58
  87.         jne     @f
  88.  
  89.         pusha
  90.         mcall   26,2,9
  91.         mov     ebx,eax
  92.         mov     eax,2
  93.         call    draw_window ;;;???
  94.         popa
  95.         ret
  96. @@:
  97. end if
  98.         cmp     al, 15
  99.         jz      alt_tab_pressed
  100.  
  101.         cmp     al, 88
  102.         jz      start_end_application
  103.  
  104.         cmp     al, 91
  105.         jz      start_menu_application
  106.  
  107.         cmp     al, 92
  108.         jz      start_menu_application
  109.  
  110.         cmp     al, 62
  111.         jz      kill_active_application
  112.  
  113. ;       cmp     al, 71
  114. ;       jz      page_list_next
  115.  
  116. ;       cmp     al, 72
  117. ;       jz      page_list_prev
  118.  
  119.         cmp     al, 69
  120.         jz      start_mousemul_application
  121.  
  122.         cmp     [current_alt_tab_app], -1
  123.         jz      @f
  124.  
  125.         test    ah, 0x30
  126.         jz      alt_tab_released
  127. ;--------------------------------------
  128. align 4
  129. @@:
  130. ; this is hotkey Ctrl+Shift ;or LShift+RShift
  131.         jmp     karu
  132. ;       mov     ebx, setup_exec
  133. ;       test    ah, 001100b
  134. ;       jz      change_sys_lang
  135. ;------------------------------------------------------------------------------
  136. align 4
  137. change_key_lang:
  138.         mov     dword [ebx+8], chlang
  139.         mcall   70
  140. ;--------------------------------------
  141. align 4
  142. begin_1:
  143.         mov     ecx,[active_process]
  144.         mcall   18, 3
  145.         mcall   5, 25
  146. ;--------------------------------------
  147. align 4
  148. .ret:
  149.         ret
  150. ;------------------------------------------------------------------------------
  151. ;align 4
  152. ;change_sys_lang:
  153. ;       mov        dword [ebx+8], syslang
  154. ;        mcall   70
  155. ;        jmp     begin_1
  156. ;------------------------------------------------------------------------------
  157. align 4
  158. start_end_application:
  159.         mov     dword [ebx+21],end_name
  160.         mcall   70
  161.         ret
  162. ;------------------------------------------------------------------------------
  163. align 4
  164. start_mousemul_application:
  165.         mov     dword [ebx+21],mousemul_name
  166.         mcall   70
  167.         ret
  168. ;------------------------------------------------------------------------------
  169. align 4
  170. kill_active_application:
  171.         mcall   72,1,3,1
  172.         jmp     begin_1.ret
  173. ;------------------------------------------------------------------------------
  174. align 4
  175. start_menu_application:
  176.         mov     [draw_window_1], 1
  177.         mov     dword [ebx+21], menu_name
  178.         mcall   70
  179.         jmp     begin_1.ret
  180. ;------------------------------------------------------------------------------
  181. ;align 4
  182. ;page_list_next:
  183. ;       cmp     [page_list],15
  184. ;       je      @f
  185. ;
  186. ;       inc     [page_list]
  187. ;       mov     [draw_window_1],1
  188. ;@@:
  189. ;       jmp  begin_1.ret
  190. ;------------------------------------------------------------------------------
  191. ;align 4
  192. ;page_list_prev:
  193. ;       cmp     [page_list],0
  194. ;       je      @f
  195. ;
  196. ;       dec     [page_list]
  197. ;       mov     [draw_window_1],1
  198. ;@@:
  199. ;       jmp  begin_1.ret
  200. ;------------------------------------------------------------------------------
  201. align 4
  202. alt_tab_pressed:
  203. ; handle Alt+Tab and Alt+Shift+Tab
  204.         mov     ebp, eax
  205.         cmp     [current_alt_tab_app], -1
  206.         jnz     has_alt_tab_app
  207. ; § ¯®«­ï¥¬ â ¡«¨æ㠯ਫ®¦¥­¨©, ¯®¤«¥¦ é¨å ¯¥à¥ª«î祭¨î
  208.         xor     edx, edx
  209.         mov     ebx, procinfo_window_tabs       ;0x8000 ; WTF???!!!
  210.         mov     ecx, 1
  211. .fill:
  212.         inc     ecx
  213.         mcall   9
  214.         call    need_window_tab
  215.         jz      @f
  216.  
  217.         cmp     edx, 256
  218.         jz      @f
  219.  
  220.         mov     [alt_tab_list+edx*8], ecx
  221.         movzx   esi, word [ebx+4]
  222.         mov     [alt_tab_list+edx*8+4], esi
  223.         inc     edx
  224. ;--------------------------------------
  225. align 4
  226. @@:
  227.         cmp     ecx,eax
  228.         jb      .fill
  229.  
  230.         mov     [alt_tab_list_size], edx
  231.         test    edx, edx
  232.         jz      begin_1.ret
  233.  
  234.         mcall   66,4,0,0        ; «®¢¨¬ ¬®¬¥­â ®â¯ã᪠­¨ï ¢á¥å ã¯à ¢«ïîé¨å ª« ¢¨è
  235.         test    eax, eax
  236.         jnz     begin_1.ret
  237.  
  238.         xor     edx, edx
  239.         mov     eax, [alt_tab_list+4]
  240.         xor     ecx, ecx
  241.         inc     ecx
  242. ;--------------------------------------
  243. align 4
  244. .findmax:
  245.         cmp     [alt_tab_list+ecx*8+4], eax
  246.         jb      @f
  247.  
  248.         mov     edx, ecx
  249.         mov     eax, [alt_tab_list+ecx*8+4]
  250. ;--------------------------------------
  251. align 4
  252. @@:
  253.         inc     ecx
  254.         cmp     ecx, [alt_tab_list_size]
  255.         jb      .findmax
  256.  
  257.         mov     [current_alt_tab_app], edx
  258. ;--------------------------------------
  259. align 4
  260. has_alt_tab_app:
  261.         mov     eax, [current_alt_tab_app]
  262.         mov     edx, [alt_tab_list+eax*8+4]     ; slot
  263.         xor     ecx, ecx
  264.         or      eax, -1
  265.         test    ebp, 300h
  266.         jz      .notshift
  267.  
  268.         or      esi, -1
  269. ;--------------------------------------
  270. align 4
  271. .loop1:
  272.         cmp     [alt_tab_list+ecx*8+4], edx
  273.         jbe     @f
  274.  
  275.         cmp     [alt_tab_list+ecx*8+4], esi
  276.         jae     @f
  277.  
  278.         mov     eax, ecx
  279.         mov     esi, [alt_tab_list+ecx*8+4]
  280. ;--------------------------------------
  281. align 4
  282. @@:
  283.         inc     ecx
  284.         cmp     ecx, [alt_tab_list_size]
  285.         jb      .loop1
  286.  
  287.         cmp     eax, -1
  288.         jnz     .found
  289.  
  290.         xor     edx, edx
  291.         xor     ecx, ecx
  292.         jmp     .loop1
  293. ;--------------------------------------
  294. align 4
  295. .notshift:
  296.         xor     esi, esi
  297. ;--------------------------------------
  298. align 4
  299. .loop2:
  300.         cmp     [alt_tab_list+ecx*8+4], edx
  301.         jae     @f
  302.  
  303.         cmp     [alt_tab_list+ecx*8+4], esi
  304.         jbe     @f
  305.  
  306.         mov     eax, ecx
  307.         mov     esi, [alt_tab_list+ecx*8+4]
  308. ;--------------------------------------
  309. align 4
  310. @@:
  311.         inc     ecx
  312.         cmp     ecx, [alt_tab_list_size]
  313.         jb      .loop2
  314.  
  315.         cmp     eax, -1
  316.         jnz     .found
  317.  
  318.         or      edx, -1
  319.         xor     ecx, ecx
  320.         jmp     .loop2
  321. ;--------------------------------------
  322. align 4
  323. .found:
  324.         mov     [current_alt_tab_app], eax
  325.         push    eax
  326.         xor     edx, edx
  327.         div     [max_applications]
  328.         mov     [page_list], eax
  329.         mov     [draw_window_1], 1
  330.         mov     edi, app_list
  331.         push    edi
  332.         mov     ecx, 20
  333.         or      eax, -1
  334.         rep     stosd
  335.         pop     edi
  336.         pop     ecx
  337.         sub     ecx, edx
  338. ;--------------------------------------
  339. align 4
  340. @@:
  341.         cmp     ecx, [alt_tab_list_size]
  342.         jae     redraw_window_tabs
  343.  
  344.         mov     eax, [alt_tab_list+ecx*8]
  345.         stosd
  346.         inc     ecx
  347.         jmp     @b
  348. ;--------------------------------------
  349. align 4
  350. alt_tab_released:
  351.         mcall   66,5,0,0        ; 㦥 ¯®©¬ «¨, 墠â¨â :)
  352.         or      eax, -1
  353.         xchg    eax, [current_alt_tab_app]
  354.         mov     ecx, [alt_tab_list+eax*8]
  355.         mcall   18,3
  356.         jmp     redraw_window_tabs
  357. ;------------------------------------------------------------------------------
  358. align 4
  359. active_process  dd 0
  360.  
  361. ;  .exit: mcall -1
  362.  
  363.  
  364. START:
  365.         mcall   66,4,0,2        ; LShift+RShift
  366.         mcall   66,,,11h        ; Ctrl+Shift
  367.         mcall   66,,88,110h     ; Alt+Ctrl+F12
  368.         mcall   66,,91,0h       ; LWin
  369.         mcall   66,,92          ; RWin
  370. ;       mcall   66,,91,100h     ; Alt+LWin
  371. ;       mcall   66,,92          ; Alt+RWin
  372.         mcall   66,,62,100h     ; Alt+F4
  373. ;       mcall   66,,71          ; Alt+Home
  374. ;       mcall   66,,72          ; Alt+Up
  375.         mcall   66,,15          ; Alt+Tab
  376.         mcall   66,,2           ; Alt+1
  377.         mcall   66,,3           ; Alt+2
  378.         mcall   66,,4           ; Alt+3
  379.         mcall   66,,5           ; Alt+4
  380.         mcall   66,,6           ; Alt+5
  381.         mcall   66,,7           ; Alt+6
  382.         mcall   66,,8           ; Alt+7
  383.         mcall   66,,,101h       ; Alt+Shift+Tab
  384.         mcall   66,,69          ; Alt+Shift+NumLock
  385.  
  386. if caps_lock_check
  387.         xor     edx,edx
  388.         mcall   66,4,58
  389. end if
  390.         mcall   18,8,1
  391.         test    eax,eax
  392.         jne     @f
  393.         mcall   18,8,2
  394. ;--------------------------------------
  395. align 4
  396. @@:
  397.         mcall   70,dat_fileinfo
  398.  
  399.         mov     edi,width
  400.         mov     esi,I_END
  401.         xor     eax,eax
  402. ;--------------------------------------
  403. align 4
  404. new_number:
  405.         cmp     [esi],byte ';'
  406.         je      number_ready
  407.  
  408.         imul    eax,10
  409.         movzx   ebx,byte [esi]
  410.         sub     ebx,'0'
  411.         add     eax,ebx
  412.         inc     esi
  413.         jmp     new_number
  414. ;--------------------------------------
  415. align 4
  416. number_ready:
  417.         stosd
  418.         xor     eax,eax
  419.         inc     esi
  420.         cmp     [esi],byte 'x'
  421.         jne     new_number
  422.  
  423.         mcall   14
  424.         mov     [screen_size],eax
  425.  
  426.         mov     ecx,eax
  427. ;eax = [xsize]*65536 + [ysize], £¤¥
  428.         shr     ecx,16
  429.         and     eax,0xFFFF
  430.         lea     edx,[eax-PANEL_HEIGHT-1]
  431.  
  432.         mcall   48,6
  433.  
  434.         mcall   9,process_info_buffer,-1
  435.         mov     ecx,[process_info_buffer+30]
  436.         mcall   18,21
  437.         mov     [this_slot],eax
  438.         mov     [max_slot],255
  439.  
  440.         call    set_variables
  441. ;--------------------------------------
  442. align 4
  443. start_after_minimize:
  444.         call    draw_window
  445.         call    draw_info
  446.         call    draw_running_applications
  447.  
  448.         mcall   23,30
  449.         call    load_ini
  450.         call    fir_lng
  451. ;------------------------------------------------------------------------------
  452. align 4
  453. still:
  454.         call    draw_info
  455.         call    draw_running_applications
  456.  
  457.         mcall   18,7    ; check if active window changed
  458.         cmp     eax, [last_active_window]
  459.         jz      @f
  460. ; need_window_tab:
  461. ; in: ebx->process info
  462. ; out: ZF set <=> do not draw
  463.         mov     ebx,[last_active_window]
  464.         mov     [prev_active_window], ebx
  465.         mov     [last_active_window], eax
  466.  
  467.         mov     ecx, eax
  468.         mcall   9,process_info_buffer
  469.  
  470.         call    need_window_tab
  471.         jnz     .need_repaint
  472.  
  473.         mcall   9,process_info_buffer,[prev_active_window]
  474.         call    need_window_tab
  475.         jz      @f
  476. ;--------------------------------------
  477. align 4
  478. .need_repaint:
  479.         mov     dword [active_window_changed], 1
  480. ;--------------------------------------
  481. align 4
  482. @@:
  483.         mcall   23,20
  484.         cmp     eax,1           ; redraw ?
  485.         jz      red
  486.  
  487.         cmp     eax,3           ; button ?
  488.         jz      button
  489.  
  490.         call    handle_key
  491.         cmp     dword [active_window_changed], 0
  492.         jnz     red_active
  493.  
  494.         jmp     still
  495. ;------------------------------------------------------------------------------
  496. align 4
  497. red_active:
  498. red:
  499.         mov     dword [active_window_changed], 0
  500.  
  501.         mcall   14
  502.         movzx   ecx,ax
  503.         mov     edx,eax
  504.         shr     edx,16
  505.         cmp     [screen_size.height],ax
  506.         jne     @f
  507.  
  508.         rol     eax,16
  509.         cmp     [screen_size.width],ax
  510.         je      .lp1
  511.         rol     eax,16
  512. @@:
  513.         mov     [screen_size],eax
  514.         sub     ecx,PANEL_HEIGHT
  515.         mcall   67,0,,,PANEL_HEIGHT
  516. ;--------------------------------------
  517. align 4
  518. .lp1:
  519.         call    draw_window
  520.         call    draw_info
  521.         jmp     still
  522. ;------------------------------------------------------------------------------
  523. align 4
  524. button:
  525.         mcall   17
  526.         test    eax,0xfffffe00  ; is it close button? (signal from @panel)
  527.         jz      still           ; if so - wait for another event, because @panel shouldn't be closed
  528.  
  529.         cmp     al, 0
  530.         jnz     right_mouse
  531.  
  532.         cmp     ah,50
  533.         jb      no_activate
  534.         cmp     ah,70
  535.         jg      no_activate
  536.  
  537.         movzx   ecx,byte ah
  538.         sub     ecx,52
  539.         shl     ecx,2
  540.  
  541.         mov     ecx,[app_list+ecx]
  542.         mcall   18,3,
  543.  
  544. ;       mcall   55,eax,,,activatemusic
  545.         jmp     still
  546. ;------------------------------------------------------------------------------
  547. align 4
  548. right_mouse:
  549.         cmp     ah,50
  550.         jb      still
  551.  
  552.         cmp     ah,70
  553.         jg      still
  554.  
  555.         movzx   ecx,byte ah
  556.         sub     ecx,52
  557.  
  558.         cmp     ecx, [app_tab_count]
  559.         jge     still
  560.  
  561.         shl     ecx,2
  562.         mcall   37,0
  563.         mov     ebx, eax
  564.         shr     eax, 16
  565.         mov     [x_coord], ax
  566.         and     ebx, 0xFFFF
  567.         mov     [y_coord], bx
  568.  
  569.         mov     ecx,[app_list+ecx]      ; ecx->selected app.slot
  570.         mov     [n_slot], ecx
  571.         mcall   9,procinfo_for_detect
  572.  
  573.         mcall   51,1,context_menu_start,ctx_menu_stack
  574.  
  575.         mov     [ctx_menu_PID], eax
  576.         jmp     still
  577. ;------------------------------------------------------------------------------
  578. align 4
  579. no_activate:
  580.         cmp     ah,101    ; minimize to left
  581.         je      left_button
  582.  
  583.         cmp     ah,102    ; minimize to right
  584.         je      right_button
  585.  
  586.         cmp     ah, 103
  587.         je      clean_desktop               ; minimize all windows
  588.  
  589.         cmp     ah, 104
  590.         je      restore_desktop     ; restore minimized windows
  591.  
  592.         cmp     ah, 105
  593.         je      swap_minimized_desktop     ; minimize normal windows, and restore minimized windows
  594.  
  595.         cmp     ah,byte 1         ; start/terminate menu
  596.         jnz     noselect
  597.  
  598.         call    menu_handler
  599.  
  600.         jmp     still
  601. ;--------------------------------------
  602. align 4
  603. noselect:
  604.         mov     ebx, exec_fileinfo
  605.         cmp     ah,byte 2              ; start calendar
  606.         jnz     noid15  ;noclock
  607.  
  608.         mov     dword [ebx+21], calendar_name
  609.         mcall   70
  610.         jmp     still
  611. ;--------------------------------------
  612. align 4
  613. noid15:
  614.         cmp     ah,16
  615.         jne     noid16
  616.  
  617.         mov     ebx, setup_exec
  618.         mov     dword [ebx+8], chlang
  619.         mcall   70
  620.         jmp     still
  621. ;--------------------------------------
  622. align 4
  623. noid16:
  624. ;       cmp     ah,17
  625. ;       jne     noid17
  626. ;
  627. ;       mov     ebx, setup_exec
  628. ;       mov     dword [ebx+8], syslang
  629. ;       mcall   70
  630. ;       jmp     still
  631. ;--------------------------------------
  632. ;align 4       
  633. ;  noid17:
  634.         cmp     ah,18
  635.         jne     noid18
  636.  
  637.         mov     dword [ebx+21], sysmeter_name
  638.         mcall   70
  639.         jmp     still
  640. ;--------------------------------------
  641. align 4
  642. noid18:
  643.         cmp     ah,19
  644.         jne     noid19
  645.  
  646.         mcall   18,8,2
  647.         mcall   15,3
  648.         jmp     red
  649. ;--------------------------------------
  650. align 4
  651. noid19:
  652.         cmp     ah,20              ; start system setup
  653.         jnz     noid20
  654.  
  655.         mov     ebx, setup_exec
  656.         and     dword [ebx+8], 0
  657.         mcall   70
  658.         jmp     still
  659. ;--------------------------------------
  660. align 4
  661. noid20:
  662.         cmp     ah,21
  663.         jnz     noid21
  664.  
  665.         cmp     [page_list], 99
  666.         jnc     still
  667.         inc     [page_list]
  668.         jmp     red
  669. ;--------------------------------------
  670. align 4
  671. noid21:
  672.         cmp     ah,22
  673.         jnz     still
  674.  
  675.         cmp     [page_list],0
  676.         je      still
  677.  
  678.         dec     [page_list]
  679.         jmp     red
  680. ;------------------------------------------------------------------------------
  681. align 4
  682. restore_desktop:
  683.         mcall   9,process_info_buffer,-1
  684.         mov     [max_slot], eax
  685.         mov     ecx, 2
  686.         mov     edx, 2
  687. ;--------------------------------------
  688. align 4
  689. @@:
  690.         mcall   18, 22
  691.         inc     edx
  692.         cmp     edx, [max_slot]
  693.         jbe     @b
  694.         jmp     still
  695. ;------------------------------------------------------------------------------
  696. align 4
  697. swap_minimized_desktop:
  698.         xor     esi, esi
  699.         inc     esi
  700.         jmp     min_swap_desktop
  701. ;------------------------------------------------------------------------------
  702. align 4
  703. clean_desktop:
  704.         xor     esi,esi
  705. ;--------------------------------------
  706. align 4
  707. min_swap_desktop:                  ; input esi 0 - min, <>0 swap
  708.         mov     ecx, 2             ;  ç «ì­ë© ­®¬¥à á«®â  ¯à®æ¥áá 
  709.         mov     ebx, process_info_buffer
  710. ;--------------------------------------
  711. align 4
  712. .loop1:
  713.         cmp     ecx, [this_slot]
  714.         je      .loop1xx
  715.  
  716.         mcall   9
  717.         mov     [max_slot], eax
  718.         mov     dx, word [process_info_buffer+50]
  719.         cmp     dx, 9               ; à®¢¥àª  ᢮¡®¤¥­ «¨ ¤ ­­ë© á«®â
  720.         jz      .loop1xx
  721.  
  722.         mov     edx, dword [ebx+10]
  723.         cmp     dl, '@'
  724.         je      .loop1xx
  725.  
  726.         cmp     dword [ebx+10], 'ICON'
  727.         jnz     @f
  728.  
  729.         cmp     [ebx+42], dword 51
  730.         jnz     @f
  731.  
  732.         cmp     [ebx+46], dword 51
  733.         jz      .loop1xx
  734. ;--------------------------------------
  735. align 4
  736. @@:
  737.         cmp     [ebx+10], dword '    '
  738.         jz      .loop1xx
  739.  
  740.         pushad
  741.         mov       edx, ecx
  742.         xor       ecx, ecx
  743.         or     esi, esi
  744.         jz     @f
  745.  
  746.         movzx  eax, byte [process_info_buffer+70]
  747.         and       eax, 2              ; mask minimize
  748.         jz     @f
  749.  
  750.         mov       ecx, 2              ; restore
  751. ;--------------------------------------
  752. align 4
  753. @@:
  754.         mcall   18, 22
  755.         popad
  756. ;--------------------------------------
  757. align 4
  758. .loop1xx:
  759.         inc     ecx
  760.         cmp     ecx, [max_slot]
  761.         jbe     .loop1
  762.         jmp     still
  763. ;------------------------------------------------------------------------------
  764. align 4
  765. draw_running_applications:
  766.         pusha
  767.  
  768.         cmp     [icons],1
  769.         jne     dr_ret
  770.  
  771.         call    calculate_applications
  772.  
  773.         cmp     edi,[running_applications]
  774.         jne     noret
  775.         popa
  776.         ret
  777. ;--------------------------------------
  778. align 4
  779. noret:
  780.         call    draw_window
  781.         mov     [running_applications],edi
  782.         call    redraw_window_tabs
  783. ;--------------------------------------
  784. align 4
  785. dr_ret:
  786.         popa
  787.         ret
  788. ;------------------------------------------------------------------------------
  789. align 4
  790. need_window_tab:
  791. ; in: ebx->process info
  792. ; out: ZF set <=> do not draw
  793.         cmp     byte [ebx+10], '@'
  794.         jz      .nodraw
  795. ; do not draw undefined (zero-sized) windows
  796.         cmp     dword [ebx+42], 0
  797.         jnz     @f
  798.         cmp     dword [ebx+46], 0
  799.         jz      .nodraw
  800. ;--------------------------------------
  801. align 4
  802. @@:
  803. ; do not draw OpenDialog windows
  804.         push    edi
  805.         mov     edi, dword [ebx+10]
  806.         or      edi, 0x20202020
  807.         cmp     edi, 'open'
  808.         jne     @f
  809.  
  810.         mov     edi, dword [ebx+14]
  811.         or      edi, 0x20202020
  812.         cmp     dword [ebx+14], 'dial'
  813.         jne     @f
  814.  
  815.         pop     edi
  816.         jmp     .nodraw
  817. ;--------------------------------------
  818. align 4
  819. @@:
  820.         pop     edi
  821.         cmp     dword [ebx+10], 'ICON'
  822.         jnz     @f
  823.  
  824.         cmp     [ebx+42], dword 51
  825.         jnz     @f
  826.  
  827.         cmp     [ebx+46], dword 51
  828.         jz      .nodraw
  829. ;--------------------------------------
  830. align 4
  831. @@:
  832.         cmp     [ebx+10], dword '    '
  833. ;--------------------------------------
  834. align 4
  835. .nodraw:
  836.         ret
  837. ;------------------------------------------------------------------------------
  838. align 4
  839. redraw_window_tabs:
  840.         xor     edi, edi
  841.         mov     [contrast], 0
  842.  
  843.         push    ebp
  844.         mcall   18,7
  845.         mov     ebp,eax
  846. ;--------------------------------------
  847. align 4
  848. .loop:
  849.         mov     ecx,[app_list+edi*4]
  850.         cmp     ecx,-1
  851.         jz      .done
  852.  
  853.         push    ecx
  854.         mcall   9,procinfo_window_tabs  ;0x8000 ; WTF???!!!
  855.  
  856.         imul    ebx, edi, 6*10*10000h
  857.         add     ebx, 12*10*10000h + 7*10000h + 54
  858.  
  859.         mcall   13,,<3,14>,0x383838
  860.  
  861.         sub     ebx, 10000h + 53
  862.         mcall   ,,<4,12>
  863.  
  864.         sub     ebx, 10000h
  865.         mcall   ,,<5,10>
  866.  
  867.         add     ebx, 56*10000h
  868.         mcall   ,,<4,12>
  869.  
  870.         add     ebx, 10000h
  871.         mcall   ,,<5,10>
  872.  
  873.         mov     edx, [wcolor]   ; barsuk
  874.         pop     ecx
  875.         cmp     ebp, ecx        ; ecx=active slot number
  876.         jnz     @f
  877.  
  878.         mov     edx, [system_colours.work_button]
  879. ;--------------------------------------
  880. align 4
  881. @@:
  882.         mov     esi, [current_alt_tab_app]
  883.         cmp     esi, -1
  884.         jz      @f
  885.  
  886.         cmp     ecx, [alt_tab_list+esi*8]
  887.         jnz     @f
  888.  
  889.         mov     edx, 0xFF8000
  890. ;--------------------------------------
  891. align 4
  892. @@:
  893.         sub     ebx, 55*10000h - 53
  894.         mcall   ,,<4,12>
  895.        
  896.         sub     ebx, 10000h + 53
  897.         mcall   ,,<5,10>
  898.  
  899.         add     ebx, 55*10000h
  900.         mcall
  901.  
  902.         sub     ebx, 51*10000h - 6
  903.         mov     edx, procinfo_window_tabs+10    ;0x8000+10              ; WTF???!!!
  904.         mcall   4,,[system_colours.work_button_text],,11
  905. ;--------------------------------------
  906. align 4
  907. .nodraw:
  908.         inc     edi
  909.         cmp     edi, [max_applications]
  910.         jb      .loop
  911. ;--------------------------------------
  912. align 4
  913. .done:
  914.         pop     ebp
  915.         ret
  916. ;------------------------------------------------------------------------------
  917. align 4
  918. calculate_applications:
  919.         mov     eax,[max_applications]
  920.         mul     [page_list]
  921.         test    eax,eax
  922.         je      @f
  923.  
  924.         inc     eax
  925. ;--------------------------------------
  926. align 4
  927. @@:
  928.         mov     [draw_start_position],eax
  929.  
  930.         mov     edi,app_list
  931.         mov     ecx,20
  932.         mov     eax,-1
  933.         cld
  934.         rep     stosd
  935.  
  936.         mov     edi,0
  937.         mov     ecx,2
  938. ;--------------------------------------
  939. align 4
  940. cnewpr:
  941.         mcall   9,procinfo_window_tabs  ;0x8000 ; WTF???!!!
  942.  
  943.         call    need_window_tab
  944.         jz      cnorpl
  945.  
  946.         sub     [draw_start_position], 1
  947.         jg      cnorpl
  948.  
  949.         mov     [app_list+edi*4],ecx
  950.         inc     edi
  951. ;--------------------------------------
  952. align 4
  953. cnorpl:
  954.         inc     ecx
  955.         cmp     eax,ecx
  956.         jge     cnewpr
  957.  
  958.         mov     [app_tab_count], edi
  959.         ret
  960. ;------------------------------------------------------------------------------
  961. align 4
  962. draw_application_buttons:
  963.         pusha
  964.  
  965.         cmp     [icons],1
  966.         jne     da_ret
  967.  
  968.         mcall   14
  969.         shr     eax,16
  970.  
  971.         sub     eax, 281
  972.         jnc     ._01
  973.         xor     eax, eax
  974. ;--------------------------------------
  975. align 4
  976. ._01:
  977.         mov     bl, 60
  978.         div     bl
  979.         xor     ah, ah                 ; eax - ª®«¨ç¥á⢮ 㬥é îè¨åáï ¯¨ªâ®¢
  980.         mov     [max_applications], eax
  981.         mov     edi,1
  982. ;--------------------------------------
  983. align 4
  984. nb:
  985.         mov     ebx,edi
  986.         shl     ebx,16
  987.         imul    ebx,6*10             ;13
  988.         add     ebx,75*65536+10*6-1 ; << Alver 25.08.2007 >> 15*65536+10*6-1  ;13
  989.         mov     edx,edi
  990.         add     edx,51
  991.         cmp     [buttons],1
  992.         je      bufr
  993.  
  994.         or      edx,0x60000000
  995. ;--------------------------------------
  996. align 4
  997. bufr:
  998.         mov     esi,[wcolor]
  999.         sub     ebx,11 shl 16
  1000.         mcall   8,,<1,17>
  1001.  
  1002.         inc     edi
  1003.         cmp     edi,[max_applications]
  1004.         jbe     nb
  1005. ;--------------------------------------
  1006. align 4
  1007. da_ret:
  1008.         popa
  1009.         ret
  1010. ;------------------------------------------------------------------------------
  1011. align 4
  1012. menu_handler:
  1013.         mov     ebx, exec_fileinfo
  1014.         mov     [ebx+21],dword menu_name
  1015.         mcall   70
  1016.         ret
  1017. ;------------------------------------------------------------------------------
  1018. align 4
  1019. draw_small_right:
  1020.         pusha
  1021.         mcall   12,1
  1022.  
  1023.         xor     eax,eax
  1024.         mov     edx,[wcolor]
  1025.         mov     esi,edx
  1026.         mov     edi,edx
  1027.         or      edx, 0x01000000
  1028.         mcall
  1029.  
  1030.         xor     ecx,ecx
  1031.         mov     cx,[b_size_y]
  1032.         mcall   8,<0,9>,,1,[wcolor]
  1033.  
  1034.         mov     ebx,2*65536+16
  1035.         cmp     [graph_text],1
  1036.         jne     nos3
  1037.  
  1038.         mov     ebx,2*65536+7
  1039. ;--------------------------------------
  1040. align 4
  1041. nos3:
  1042.         mov     ecx,[wcolor]
  1043.         add     ecx,0x303030
  1044.         mcall   4,,,hidetext,1
  1045.  
  1046.         mcall   12,2
  1047.         popa
  1048.         ret
  1049. ;------------------------------------------------------------------------------
  1050. align 4
  1051. draw_small_left:
  1052.         pusha
  1053.         mcall   12,1
  1054.  
  1055.         xor     eax,eax
  1056.         mov     edx,[wcolor]
  1057.         mov     esi,edx
  1058.         mov     edi,edx
  1059.         or      edx, 0x01000000
  1060.         mcall
  1061.  
  1062.         cmp     [graph_text],1
  1063.         je      nos4
  1064.  
  1065.         mcall   8,<0,9>,<0,12>,2,[wcolor]
  1066.  
  1067.         mov     ecx,[wcolor]
  1068.         add     ecx,0x303030
  1069.         mcall   4,<2,4>,,hidetext+2,1
  1070. ;--------------------------------------
  1071. align 4
  1072. nos4:
  1073.         mov     ecx,13*65536+25
  1074.         cmp     [graph_text],1
  1075.         jne     nos6
  1076.  
  1077.         xor     ecx,ecx
  1078.         mov     cx,word [b_size_y]
  1079. ;--------------------------------------
  1080. align 4
  1081. nos6:
  1082.         mcall   8,<0,9>,,1,[wcolor]
  1083.  
  1084.         mov     ebx,3*65536+22
  1085.         cmp     [graph_text],1
  1086.         jne     nos7
  1087.  
  1088.         mov     ebx,3*65536+7
  1089. ;--------------------------------------
  1090. align 4
  1091. nos7:
  1092.         mov     ecx,[wcolor]
  1093.         add     ecx,0x303030
  1094.         mcall   4,,,hidetext+1,1
  1095.  
  1096.         mcall   12,2
  1097.         popa
  1098.         ret
  1099. ;------------------------------------------------------------------------------
  1100. align 4
  1101. right_button:
  1102.         mov     [small_draw],dword draw_small_right
  1103.  
  1104.         mcall   14
  1105.  
  1106.         shr     eax, 16
  1107.         mov     ebx, eax
  1108.         mov     ecx, -1
  1109.         mov     edx, 9
  1110.         sub     ebx, edx
  1111.         mov     esi, -1
  1112.         mcall   67
  1113.  
  1114.         call    draw_small_right
  1115.         jmp     small_wait
  1116. ;------------------------------------------------------------------------------
  1117. align 4
  1118. left_button:
  1119.         mov     [small_draw],dword draw_small_left
  1120.  
  1121.         xor     ebx,ebx
  1122.         mcall   67,,-1,9,-1
  1123.  
  1124.         call    draw_small_left
  1125. ;--------------------------------------
  1126. align 4
  1127. small_wait:
  1128.         mcall   10
  1129.         cmp     eax,1
  1130.         jne     no_win
  1131.  
  1132.         call    [small_draw]
  1133.         jmp     small_wait
  1134. ;--------------------------------------
  1135. align 4
  1136. no_win:
  1137.         cmp     eax,2
  1138.         jne     no_key
  1139.  
  1140.         call    handle_key
  1141.         jmp     small_wait
  1142. ;--------------------------------------
  1143. align 4
  1144. no_key:
  1145.         mcall   17
  1146.         cmp     ah,1
  1147.         jne     no_full
  1148.  
  1149.         mcall   14      ; get screen max x & max y
  1150.  
  1151.         mov     edx, eax
  1152.         shr     edx, 16
  1153.         xor     ebx, ebx
  1154.         mcall   67,,-1,,-1 ; x0 y0 xs ys
  1155.  
  1156.         jmp     still
  1157. ;--------------------------------------
  1158. align 4
  1159. no_full:
  1160.         call    menu_handler
  1161.         jmp     small_wait
  1162. ;------------------------------------------------------------------------------
  1163. align 4
  1164. set_variables:
  1165.         pusha
  1166.         mov     [b_size_y],dword 38
  1167.         cmp     [graph_text],1
  1168.         jne     noy2
  1169.  
  1170.         mov     [b_size_y],dword 18
  1171. ;--------------------------------------
  1172. align 4
  1173. noy2:
  1174.         mov     [button_frames],0x0
  1175.         cmp     [buttons],0
  1176.         jne     no_frames
  1177.  
  1178.         mov     [button_frames],0x40000000
  1179. ;--------------------------------------
  1180. align 4
  1181. no_frames:
  1182.         mcall   48,1,1  ; 3d button look
  1183.  
  1184.         mov     eax,0x40404040   ; dividers for processes
  1185.         mov     edi,pros
  1186.         mov     ecx,10
  1187.         cld
  1188.         rep     stosd
  1189.  
  1190.         popa
  1191.         ret
  1192. ;------------------------------------------------------------------------------
  1193. align 4
  1194. ; eax = number (1 or 2)
  1195. ; ebx = language id
  1196. draw_flag:
  1197.         pusha
  1198. ; eax = 2 BIG
  1199. ; eax = 1 small
  1200.         mov     edx,ebx
  1201.  
  1202.         mov     ebx,[maxx]
  1203.         and     eax,1
  1204.         imul    eax,17  ;17
  1205.         sub     ebx,eax
  1206.         sub     ebx,76 ;79 ;28
  1207.  
  1208.         pushad
  1209. ;       dec     ebx
  1210.         sub     ebx,2
  1211.         shl     ebx, 16
  1212.         add     ebx, 15 ;25
  1213.         xor     edx,edx
  1214.         mcall   13,,<4,13>
  1215.  
  1216.         add     ebx,1 shl 16
  1217.         sub     ebx,2
  1218.         mov     ecx, 5 shl 16+11
  1219.         cmp     [type_lang],1
  1220.         je      label_1
  1221.  
  1222.         mov     edx,0xff ;[wcolor]
  1223.         jmp     label_2
  1224. ;--------------------------------------
  1225. align 4
  1226. label_1:
  1227.         mov     edx,0x7700
  1228. ;--------------------------------------
  1229. align 4
  1230. label_2:
  1231.         mcall
  1232.         popad
  1233.  
  1234.         shl     ebx,16
  1235.         add     ebx,7   ;24
  1236.  
  1237.         mov     ecx,[bte] ; color
  1238.  
  1239. if caps_lock_check
  1240. ; make flag_text 'enfigerufretua' or 'ENFIGERUFRETUA' depending on CapsLock state.
  1241.         call    flag_text_setup
  1242. end if
  1243.         dec     edx
  1244.         shl     edx,1
  1245.         add     edx,flag_text
  1246.         mcall   4,,,,2
  1247.  
  1248.         mov     ebx,[maxx]
  1249.         sub     ebx,48
  1250.         shl     ebx,16
  1251.         mov     bx,34
  1252.         xor     edx,edx
  1253.         mcall   13,,<3,14>
  1254.  
  1255.         add     ebx,1 shl 16
  1256.         sub     ebx,2
  1257.         mov     ecx,4 shl 16+12
  1258.         mov     edx,time_bgr_color
  1259.     mcall
  1260.  
  1261.     popa
  1262.     ret
  1263. ;------------------------------------------------------------------------------
  1264. align 4
  1265. if caps_lock_check
  1266. flag_text_setup:
  1267.         pusha
  1268.         mcall   66,3
  1269.         mov     edi, flag_text
  1270.         mov     esi, flag_text_caps_off
  1271.         test    eax, 0x40
  1272.         jz      @f
  1273.        
  1274.         add     esi, 14
  1275. ;--------------------------------------
  1276. align 4
  1277. @@:
  1278.         mov     ecx, 14
  1279.         rep     movsb
  1280.        
  1281.         popa
  1282.         ret
  1283.  
  1284. flag_text_caps_off db 'enfigerufretua'
  1285. db 'ENFIGERUFRETUA'
  1286. end if
  1287. ;------------------------------------------------------------------------------
  1288. ; ***************************************************
  1289. ; ********* WINDOW DEFINITIONS AND DRAW *************
  1290. ; ***************************************************
  1291. align 4
  1292. draw_window:
  1293.         pusha
  1294.         mov     [running_applications],-1
  1295.         mov     [checks],-1
  1296.         mcall   12,1
  1297.  
  1298.         mcall   48,3,system_colours,10*4
  1299.  
  1300.         mov     eax, [system_colours+4*6]
  1301.         sub     eax, 0x101010
  1302.         mov     [wcolor], eax
  1303.  
  1304.         mcall   14      ; get screen max x & max y
  1305.  
  1306.         cmp     [width],0
  1307.         je      no_def_width
  1308.  
  1309.         and     eax,0xffff
  1310.         mov     ebx,[width]
  1311.         shl     ebx,16
  1312.         add     eax,ebx
  1313. ;--------------------------------------
  1314. align 4
  1315. no_def_width:
  1316.         mov     ebx,eax
  1317.         mov     [screenxy],ebx
  1318.         shr     ebx,16
  1319.         sub     ax,38
  1320.         shl     eax,16
  1321.         mov     ecx,eax
  1322.         add     ecx,0*65536+38
  1323.         cmp     [graph_text],1
  1324.         jne     no_text_1
  1325.         mov     cx,PANEL_HEIGHT
  1326.         add     ecx,20*65536
  1327. ;--------------------------------------
  1328. align 4
  1329. no_text_1:
  1330.         xor     eax,eax                     ; DEFINE AND DRAW WINDOW
  1331.         mov     edx, [wcolor]
  1332.         or      edx, 0x01000000 ; do not draw the window
  1333.         mov     esi, [wcolor]
  1334.         or      esi, 0x01000000 ; unmovable window
  1335.         mov     edi, [wcolor]
  1336.         mov     [panel_x_pos], ebx
  1337.         mov     [panel_y_pos], ecx       ; ®ª  çâ® â ª.
  1338.         mcall
  1339.  
  1340.         movzx   ebx,word [screenxy+2]
  1341.         mov     ecx,0*65536+0
  1342.         mov     edx,[wcolor]
  1343.         add     edx,0x161616
  1344. ;--------------------------------------
  1345. align 4
  1346. newline_:                       ; debug.inc has macros with the same name
  1347.         sub     edx,0x040404
  1348.         mov     eax,38
  1349.         cmp     [soften_up],1
  1350.         jne     no_su
  1351.  
  1352.         and     edx,0x00FFFFFF
  1353.         mcall
  1354. ;--------------------------------------
  1355. align 4
  1356. no_su:
  1357.         pusha
  1358.         cmp     [soften_down],1
  1359.         jne     no_sd
  1360.  
  1361.         sub     edx,0x141414
  1362.         mov     edi,[b_size_y]
  1363.         shl     edi,16
  1364.         add     edi,[b_size_y]
  1365.         add     ecx,edi
  1366.         sub     ecx,3*65536+3
  1367.         and     edx,0x00FFFFFF
  1368.         mcall
  1369. ;--------------------------------------
  1370. align 4
  1371. no_sd:
  1372.         popa
  1373.  
  1374.         add     ecx,1*65536+1
  1375.         cmp     cx,5
  1376.         jb      newline_
  1377.  
  1378.         cmp     [soften_middle],1
  1379.         jne     no_sm
  1380.  
  1381.         movzx   ebx,word [screenxy+2]
  1382.         mov     ecx,5*65536+5
  1383.         mov     esi,stripe
  1384.         mov     edx,[wcolor]
  1385. ;--------------------------------------
  1386. align 4
  1387. newline3:
  1388.         add     edx,[esi]
  1389.         add     esi,4
  1390.  
  1391.         and     edx,0x00FFFFFF
  1392.         mcall   38
  1393.         add     ecx,1*65536+1
  1394.         cmp     cx,15
  1395.         jb      newline3
  1396. ;--------------------------------------
  1397. align 4
  1398. no_sm:
  1399.         cmp     [minimize_left],1
  1400.         jne     no_mleft
  1401.  
  1402.         mov     ecx,1 *65536
  1403.         add     ecx,[b_size_y]
  1404.         dec     ecx
  1405.         mov     edx,101
  1406.         add     edx,[button_frames]
  1407.         mcall   8,<0,9>,,,[wcolor]      ; ABS LEFT
  1408.  
  1409.         mov     ebx,2*65536+17
  1410.         cmp     [graph_text],1
  1411.         jne     no_y1
  1412.  
  1413.         mov     bx,7
  1414. ;--------------------------------------
  1415. align 4
  1416. no_y1:
  1417.         mov     ecx,[wcolor]
  1418.         add     ecx,0x303030
  1419.         mcall   4,,,hidetext,1  ; HIDE TEXT
  1420. ;--------------------------------------
  1421. align 4
  1422. no_mleft:
  1423.         movzx   eax,word [screenxy+2]
  1424.         mov     [maxx],eax
  1425.         cmp     [minimize_right],1
  1426.         jne     no_mright
  1427.         mov     eax,[maxx]
  1428.         sub     eax,77
  1429.         shl     eax,16
  1430.         mov     ebx,eax
  1431.         add     ebx,67
  1432.  
  1433.         mov     ecx,1 *65536
  1434.         add     ecx,[b_size_y]
  1435.         dec     ecx
  1436.         add     ebx,68*65536
  1437.         mov     bx,9
  1438.         mov     edx,102
  1439.         add     edx,[button_frames]
  1440.         mcall   8,,,,[wcolor]   ; ABS RIGHT
  1441.  
  1442.         mov     edx,hidetext+1
  1443.         mov     eax,4
  1444.         mov     ebx,[maxx]
  1445.         sub     ebx,6
  1446.         shl     ebx,16
  1447.         mov     bx,17
  1448.         cmp     [graph_text],1
  1449.         jne     no_y2
  1450.  
  1451.         mov     bx,7
  1452. ;--------------------------------------
  1453. align 4
  1454. no_y2:
  1455.         mov     ecx,[wcolor]
  1456.         add     ecx,0x303030
  1457.         mov     esi,1
  1458.         mcall
  1459. ;--------------------------------------
  1460. align 4
  1461. no_mright:
  1462.         call    draw_menuet_icon
  1463. ;       call    draw_program_icons
  1464.         mov     [ptime],0
  1465.         call    draw_info
  1466.         call    draw_application_buttons
  1467.  
  1468.         mcall   12,2
  1469.         popa
  1470.         ret
  1471. ;------------------------------------------------------------------------------
  1472. align 4
  1473. dr_button_clean:
  1474.         mcall   8,,<3,13>
  1475.         ret
  1476. ;------------------------------------------------------------------------------
  1477. align 4
  1478. draw_menuet_icon:
  1479.         pusha
  1480. ; Inserted code for drawing buttons 103, 104, 105 (Clean, Restore, Exchange windows)
  1481.         mov     esi, dword [system_colours+24]    ; drawing buttons
  1482.         and     esi, 0x00ffffff
  1483.         mov     edx, 103
  1484.         mov     ebx, 67*65536+13
  1485.         call    dr_button_clean
  1486.        
  1487.         inc     edx
  1488.         mov     ebx, 86*65536+13
  1489.         call    dr_button_clean
  1490.        
  1491.         inc     edx
  1492.         mov     ebx, 105*65536+13
  1493.         call    dr_button_clean
  1494.        
  1495.         mov     ecx, dword [system_colours+28]
  1496.         and     ecx, 0x00ffffff
  1497.         mcall   4,<71,6>,,page_clean_but,1
  1498.  
  1499.         inc     edx
  1500.         mcall   ,<90,6>
  1501.  
  1502.         inc     edx
  1503.         mcall   ,<109,6>
  1504.  
  1505.         cmp     [menu_enable],1
  1506.         jne     no_menu
  1507.  
  1508.         mov     ebx, 10*65536 + 47
  1509.         cmp     [minimize_left], 0
  1510.         jne     @f
  1511.  
  1512.         sub     ebx, 10*65536
  1513. ;--------------------------------------
  1514. align 4
  1515. @@:
  1516.         mov     ecx, 1*65536
  1517.         add     ecx, [b_size_y]
  1518.         dec     ecx
  1519.         mov     edx, 0x20d1ff01
  1520.         add     edx, [button_frames]
  1521.         mcall   8,,,,[wcolor]   ; M BUTTON
  1522.  
  1523. ;       cmp     [graph_text], 1
  1524. ;       jne     no_mtext
  1525.  
  1526.         push    ebx
  1527.         mcall   13,<12,44>,<1,17>,0x383838
  1528.  
  1529.         mcall   ,<56,1>,<2,15>
  1530.  
  1531.         mcall   ,<57,1>,<4,11>
  1532.  
  1533.         mcall   ,<58,1>,<6,7>
  1534.  
  1535.         mcall   ,<13,43>,<2,15>,0x7700
  1536.  
  1537.         mcall   ,<56,1>,<4,11>
  1538.  
  1539.         mcall   ,<57,1>,<6,7>
  1540.         pop     ebx
  1541.  
  1542.         mov     bx,  7
  1543.         add     ebx, 8*65536
  1544.  
  1545.         mcall   4,,0x10ffffff,m_text,4
  1546.  
  1547.         popa
  1548.         ret
  1549. ;--------------------------------------
  1550. ;align 4
  1551. ;no_mtext:
  1552. ;       mov     eax,[wcolor]
  1553. ;       mov     [m_icon+4],eax
  1554. ;; load & display menuet.bmp
  1555. ;       mcall   70,m_bmp_fileinfo
  1556.  
  1557. ;       mov     eax,40
  1558. ;       mov     ebx,0
  1559. ;       mov     edi,image+53
  1560. ;--------------------------------------
  1561. ;align 4
  1562. ;new_m_pix:
  1563. ;       cmp     byte [edi], 10
  1564. ;       jb      nopix
  1565.  
  1566. ;       cmp     byte [edi+1], 10
  1567. ;       jb      nopix
  1568.  
  1569. ;       cmp     byte [edi+2], 10
  1570. ;       jb      nopix
  1571.  
  1572. ;       pusha
  1573. ;       cmp     [minimize_left],0
  1574. ;       jne     no_m_s2
  1575.  
  1576. ;       sub     ebx,10
  1577. ;--------------------------------------
  1578. ;align 4
  1579. ;no_m_s2:
  1580. ;       mov     edx,[edi+1]
  1581. ;       mov     ecx,eax
  1582. ;       add     ebx,12
  1583. ;       mcall   1       ; point - WTF???!!!
  1584.  
  1585. ;       popa
  1586. ;--------------------------------------
  1587. ;align 4
  1588. ;nopix:
  1589. ;       add     edi,3
  1590. ;       add     ebx,1
  1591. ;       cmp     ebx,40
  1592. ;       jnz     new_m_pix
  1593.  
  1594. ;       mov     ebx,0
  1595. ;       dec     eax
  1596. ;       jnz     new_m_pix
  1597. ;--------------------------------------
  1598. align 4
  1599. no_menu:
  1600.         popa
  1601.         ret
  1602. ;------------------------------------------------------------------------------
  1603. ;align 4
  1604. ;draw_program_icons:
  1605. ;       pusha
  1606.  
  1607. ;       cmp     [icons],0
  1608. ;       jne     dp_ret
  1609.  
  1610. ;       mov     edi,1
  1611. ;       push    edi
  1612. ;--------------------------------------
  1613. ;align 4
  1614. ;new_icon_file:
  1615. ;       pusha
  1616. ;       mov     edx,[esp+32]
  1617. ;       add     edx,10
  1618.  
  1619. ;       push    edx
  1620. ;       mov     ecx,1*65536
  1621. ;       add     ecx,[b_size_y]
  1622. ;       dec     ecx
  1623. ;       mov     eax,edi
  1624. ;       dec     eax
  1625. ;       imul    eax,40
  1626. ;       mov     ebx,eax
  1627. ;       add     ebx,[icons_position]
  1628. ;       shl     ebx,16
  1629. ;       mov     bx,39
  1630. ;       pop     edx
  1631.  
  1632. ;       add     edx,[button_frames]
  1633. ;       or      edx, 0x20000000
  1634. ;       mcall   8,,,,[wcolor]
  1635. ;       popa
  1636.  
  1637. ;       mov     ecx,[esp]
  1638. ;       add     ecx,48
  1639. ;       mov     [iconf+6],cl
  1640.  
  1641. ;       mcall   70,iconf_fileinfo
  1642.  
  1643. ;       mov     eax,0
  1644. ;       mov     ebx,32
  1645. ;       mov     edi,image+51+32*33*3
  1646. ;--------------------------------------
  1647. ;align 4
  1648. ;np2:                       ; new pixel of file
  1649. ;       mov     edx,[edi]
  1650. ;       and     edx,0xffffff
  1651.  
  1652. ;       cmp     eax,3           ; Y draw limits
  1653. ;       jb      nopix2
  1654.  
  1655. ;       cmp     eax,36
  1656. ;       jg      nopix2
  1657.  
  1658. ;       cmp     ebx,38          ; X draw limits
  1659. ;       jg      nopix2
  1660.  
  1661. ;       cmp     ebx,2
  1662. ;       jb      nopix2
  1663.  
  1664. ;       cmp     edx,0
  1665. ;       jz      nopix2
  1666.  
  1667. ;       cmp     [graph_text],1
  1668. ;       jne     no_icon_text
  1669.  
  1670. ;       pusha
  1671. ;       mov     ebx,[esp+32]
  1672. ;       dec     ebx
  1673. ;       imul    ebx,40
  1674. ;       add     ebx,8
  1675. ;       add     ebx,[icons_position]
  1676. ;       shl     ebx,16
  1677. ;       mov     bx,7
  1678.  
  1679. ;       mov     edx,[esp+32]
  1680. ;       dec     edx
  1681. ;       imul    edx,4
  1682. ;       add     edx,mi_text
  1683. ;       mcall   4,,0xffffff,,4
  1684. ;       popa
  1685. ;       jmp  nopix2
  1686. ;--------------------------------------
  1687. ;align 4
  1688. ;no_icon_text:
  1689. ;       mov     esi,[esp]
  1690. ;       pusha
  1691.        
  1692. ;       push    edx
  1693. ;       mov     ecx,eax
  1694. ;       add     ecx,2
  1695. ;       mov     eax,esi
  1696. ;       dec     eax
  1697. ;       imul    eax,40
  1698. ;       add     ebx,eax
  1699. ;       add     ebx,3
  1700. ;       add     ebx,[icons_position]
  1701. ;       pop     edx
  1702.  
  1703. ;       mcall   1       ; WTF???!!!
  1704. ;       popa
  1705. ;--------------------------------------
  1706. ;align 4
  1707. ;nopix2:
  1708. ;       sub     edi,3
  1709. ;       dec     ebx
  1710. ;       jnz     np2
  1711.  
  1712. ;       mov     ebx,32
  1713. ;       add     eax,1
  1714. ;       cmp     eax,32
  1715. ;       jnz     np2
  1716.  
  1717. ;       add     dword [esp],1
  1718. ;       mov     edi,[esp]
  1719. ;       cmp     dword [esp],4
  1720. ;       jbe     new_icon_file
  1721.  
  1722. ;       add     esp,4
  1723.  
  1724. ;       mov     ebx,40
  1725. ;       imul    ebx,3
  1726. ;       add     ebx,[icons_position]
  1727. ;       add     ebx,10
  1728. ;       shl     ebx,16
  1729. ;       mov     bx,23
  1730. ;       mcall   4,,[wcolor],gpl,3
  1731. ;--------------------------------------
  1732. ;align 4
  1733. ;dp_ret:
  1734. ;       popa
  1735. ;       ret
  1736. ;------------------------------------------------------------------------------
  1737. align 4
  1738. draw_info:    ; draw cpu usage, time, date
  1739.     pusha
  1740.         cmp     [setup_enable],1
  1741.         jne     no_setup
  1742.  
  1743.         cmp     [minimize_right],0
  1744.         jne     no_m_r
  1745.         add     [maxx],10
  1746. ;--------------------------------------
  1747. align 4
  1748. no_m_r:
  1749.         mov     eax,3
  1750.         mcall
  1751.         cmp     eax,[ptime]
  1752.         jz      _ret
  1753.  
  1754.         mov     [ptime],eax
  1755.  
  1756.         call    draw_cpu_usage
  1757.  
  1758.         mov     eax,[maxx]   ; blink sec
  1759.         sub     eax,33
  1760.         shl     eax,16
  1761.         mov     ebx,eax
  1762.         add     ebx,9
  1763.         mcall   3
  1764.  
  1765.         cmp     [graph_text],1
  1766.         jne     no_y4
  1767.  
  1768.         sub     bx,2
  1769. ;--------------------------------------
  1770. align 4
  1771. no_y4:
  1772.         mov     ecx,eax
  1773.         shr     ecx,16
  1774.         and     ecx,1
  1775.         mov     edx,[bte]
  1776.         sub     edx,time_bgr_color;[wcolor]
  1777.         imul    ecx,edx
  1778.         add     ecx,time_bgr_color;[wcolor]
  1779.  
  1780.         mcall   4,,,sec,1
  1781.  
  1782.         mcall   26,2,9
  1783.  
  1784.         mov     edx,eax
  1785.         mcall   3
  1786.  
  1787.         and     eax,0xffff
  1788.         add     edx,eax
  1789.         cmp     edx,[checks]
  1790.         je      _ret
  1791.  
  1792.         mov     [checks],edx
  1793.  
  1794.         mov     ebx,[maxx]
  1795.         sub     ebx,48 ;;94 ;;74
  1796.         shl     ebx,16
  1797.         add     ebx,33 ;;84 ;;64
  1798.  
  1799.         mov     ecx,3 *65536
  1800.         add     ecx,[b_size_y]
  1801.         sub     cx,5
  1802.         mcall   8,,,0x40000002,[wcolor] ; time/date button
  1803.  
  1804.         and     edx,0xffff
  1805.         add     edx,[button_frames]
  1806.         mcall
  1807.  
  1808.         mov     ebx,[maxx]
  1809.         sub     ebx,77 ;80
  1810.         shl     ebx,16
  1811.         add     ebx,14
  1812.  
  1813.         mcall   ,,<4,12>,0x60000010,[wcolor]    ;button 16
  1814.  
  1815.         sub     ebx,17 shl 16
  1816.         inc     edx                 ;button 17
  1817.  
  1818.         add     ebx,33 shl 16
  1819.         mov     bx,8
  1820.         inc     edx                 ;button 18
  1821.         mcall
  1822.  
  1823.         sub     ebx,30 shl 16
  1824.         mov     bx,10
  1825.         inc     edx                 ;button 19
  1826.         mcall
  1827.  
  1828.         sub     ebx,14 shl 16
  1829.         inc     edx                 ;button 20
  1830.         mcall
  1831.  
  1832.         sub     ebx,12 shl 16
  1833.         mov     bx,8
  1834.         mov     ecx,6 shl 16+10
  1835.         inc     edx         ;button 21
  1836.         mcall
  1837.  
  1838.         sub     ebx,24 shl 16
  1839.         inc     edx         ;button 22
  1840.         mcall
  1841.  
  1842.         mcall   26,2,9
  1843.  
  1844.         mov     ebx,eax
  1845.  
  1846.         mov     eax,2
  1847.         mov     [type_lang],al
  1848.         call    draw_flag
  1849.  
  1850.         mcall   18,8,1
  1851.  
  1852.         mov     [sound_flag],al
  1853.  
  1854.         mov     ebx,[maxx]
  1855.         sub     ebx,92 ;109 ;112 ;28
  1856.         shl     ebx,16
  1857.         mov     bx,12
  1858.         xor     edx,edx
  1859.         mcall   13,,<4,13>
  1860.  
  1861.         add     ebx,1 shl 16
  1862.         sub     bx,2
  1863.         mcall   ,,<5,11>,0xcc
  1864.  
  1865.         add     ebx,1 shl 16
  1866.         mov     bx,5
  1867.         mcall   ,,<8,5>,0xdddd00
  1868.  
  1869.         add     ebx,5 shl 16
  1870.         mov     bx,1
  1871.         mcall   ,,<7,7>
  1872.  
  1873.         add     ebx,1 shl 16
  1874.         mcall   ,,<6,9>
  1875.  
  1876.         add     ebx,1 shl 16
  1877.         mcall   ,,<5,11>
  1878.  
  1879.         cmp     [sound_flag],0
  1880.         je      dalshe
  1881.  
  1882.         sub     ebx,8 shl 16
  1883.         ror     ebx,16
  1884.         mov     cx,bx
  1885.         rol     ebx,16
  1886.         mov     bx,cx
  1887.         add     bx,8
  1888.         mcall   38,,<5,15>,0xff0000
  1889.  
  1890.         add     ebx,1 shl 16
  1891.         inc     bx
  1892.         mcall
  1893.  
  1894.         rol     ecx,16
  1895.         mcall
  1896.  
  1897.         sub     ebx,1 shl 16
  1898.         dec     bx
  1899.         mcall
  1900. ;--------------------------------------
  1901. align 4
  1902. dalshe:
  1903.         mov     ebx,[maxx]
  1904.         sub     ebx,106;123
  1905.         shl     ebx,16
  1906.         mov     bx,12
  1907.         xor     edx,edx
  1908.         mcall   13,,<4,13>
  1909.  
  1910.         add     ebx,1 shl 16
  1911.         sub     bx,2
  1912.         mcall   ,,<5,11>,0xffcc00
  1913.  
  1914.         mov     ebx,[maxx]
  1915.         sub     ebx,104;121
  1916.         shl     ebx,16
  1917.         mov     bx,7
  1918.  
  1919.         mcall   4,,0x10000000,file_sys,1
  1920.  
  1921.         add     ebx,1 shl 16
  1922.         mcall
  1923.  
  1924.         mov     ebx,[maxx]
  1925.         sub     ebx,117;134
  1926.         shl     ebx,16
  1927.         mov     bx,9
  1928.         xor     edx,edx
  1929.         mcall   13,,<6,11>
  1930.  
  1931.         sub     ebx,24 shl 16 ; 18 shl 16
  1932.         mcall
  1933.  
  1934.         add     ebx,25 shl 16 ; 19 shl 16
  1935.         sub     bx,2
  1936.         mcall   ,,<7,9>,0xffffff
  1937.  
  1938.         sub     ebx,24 shl 16
  1939.         mcall
  1940.  
  1941.         mov     ebx,[maxx]
  1942.         sub     ebx, 139
  1943.         shl     ebx,16
  1944.         mov     bx,8
  1945.         mcall   4,,,page_a1,5
  1946.  
  1947.         add     ebx,1 shl 16
  1948.         mcall
  1949.  
  1950.         mov     edx,[maxx]
  1951.         sub     edx,130
  1952.         shl     edx,16
  1953.         mov     dx,7
  1954.         mcall   47,0x20000,[page_list],,0xffffff
  1955.  
  1956.         mcall   3       ; get time
  1957.  
  1958.         movzx   ebx,al
  1959.         shr     eax,8
  1960.         movzx   ecx,al
  1961.         shr     eax,8
  1962.         movzx   edx,al
  1963. ; ebx ecx edx h m s
  1964.         push    ebx
  1965.         push    ecx
  1966.  
  1967.         mov     eax,[maxx]
  1968.         sub     eax,32
  1969.         shl     eax,16
  1970.         mov     ebx,eax
  1971.         add     ebx,9
  1972.  
  1973.         mov     ecx,[bte]
  1974.  
  1975.         cmp     [graph_text],1
  1976.         jne     no_y3
  1977.  
  1978.         sub     bx,2
  1979. ;--------------------------------------
  1980. align 4
  1981. no_y3:
  1982.         mov     edx,[esp]              ; __:_X
  1983.         and     edx,15
  1984.         add     ebx,10*65536
  1985.         add     edx,text
  1986.         mcall   4,,0xffffff,,1
  1987.  
  1988.         pop     edx                     ; __:X_
  1989.         shr     edx,4
  1990.         and     edx,15
  1991.         sub     ebx,6*65536
  1992.         add     edx,text
  1993.         mcall  
  1994.  
  1995.         mov     edx,[esp]              ; _X:__
  1996.         and     edx,15
  1997.         sub     ebx,11*65536
  1998.         add     edx,text
  1999.         mcall
  2000.  
  2001.         pop     edx                     ; X_:__
  2002.         shr     edx,4
  2003.         and     edx,15
  2004.         sub     ebx,6*65536
  2005.         add     edx,text
  2006.         mcall
  2007.  
  2008.         call    draw_cpu_usage
  2009. ;--------------------------------------
  2010. align 4
  2011. _ret:
  2012.         cmp     [minimize_right],0
  2013.         jne     no_m_r2
  2014.  
  2015.         sub     [maxx],10
  2016. ;--------------------------------------
  2017. align 4
  2018. no_m_r2:
  2019. no_setup:
  2020.         popa
  2021.         ret
  2022. ;------------------------------------------------------------------------------
  2023. align 4
  2024. draw_cpu_usage:
  2025.         pushad
  2026.         mov     [ysi],30
  2027.         cmp     [graph_text],1
  2028.         jne     @f
  2029.  
  2030.         mov     [ysi],12
  2031. ;--------------------------------------
  2032. align 4
  2033. @@:
  2034.         mcall   18,5    ; TSC / SEC
  2035.  
  2036.         shr     eax,20
  2037.         push    eax
  2038.         mcall   18,4    ; IDLE / SEC
  2039.  
  2040.         shr     eax,20
  2041.         xor     edx,edx
  2042.         imul    eax,[ysi]
  2043.         cdq
  2044.         pop     ebx
  2045.         inc     ebx
  2046.         div     ebx
  2047.         cmp     eax,[ysi]
  2048.         jng     no_bug
  2049.  
  2050.         mov     eax,[ysi]
  2051. ;--------------------------------------
  2052. align 4
  2053. no_bug:
  2054.         push    eax
  2055.  
  2056.         mov     ebx,[maxx]
  2057.         sub     ebx,60
  2058.         shl     ebx,16
  2059.         add     ebx,8
  2060.         mov     ecx,5 shl 16
  2061.         add     ecx,[ysi]
  2062.         mcall   13,,,0xdd2222
  2063.  
  2064.         pop     eax
  2065.         mov     ecx,5 shl 16
  2066.         add     ecx,eax
  2067.         mov     eax,13
  2068.         mcall   13,,,0x44aa44
  2069.  
  2070.         popad
  2071.         ret
  2072. ;------------------------------------------------------------------------------
  2073. align 4
  2074. include 'ctx_menu.asm'
  2075. ;------------------------------------------------------------------------------
  2076. align 4
  2077. ; DATA
  2078. stripe:
  2079.         dd -0x010101
  2080.         dd -0x010101
  2081.         dd -0x020202
  2082.         dd -0x010101
  2083.         dd -0x000000
  2084.  
  2085.         dd 0x000000
  2086.         dd 0x010101
  2087.         dd 0x020202
  2088.         dd 0x010101
  2089.         dd 0x010101
  2090.  
  2091. m_icon:
  2092.         dd 0x0
  2093.         dd 0x808080
  2094.         dd 0x000000
  2095.         dd 0x000000
  2096.         dd 0xffffff
  2097.  
  2098.  
  2099. lsz m_text,\
  2100.   ru, "Œ…ž",\
  2101.   en, "MENU",\
  2102.   et, "MEN--"
  2103.  
  2104. mi_text         db 'WAVETETRBGRDGPL '
  2105.  
  2106. flag_text       db 'EnFiGeRuFrEtUa'
  2107.  
  2108. type_lang       db 0
  2109.  
  2110. sound_flag      db 0
  2111. button_frames   dd 0x0
  2112.  
  2113. checks          dd -1
  2114. hidetext        db 0x11,0x10,0x1e
  2115.  
  2116. turn_text       db  '><'
  2117. gpl             db  'GPL'
  2118.  
  2119. chlang  db 'LANG',0
  2120. ;syslang db 'SLAN',0
  2121.  
  2122. contrast        db 0
  2123.  
  2124. running_applications    dd 0x100
  2125. max_applications        dd 11
  2126.  
  2127. current_alt_tab_app     dd -1
  2128.  
  2129. page_list               dd 0
  2130. draw_start_position     dd 0
  2131. draw_window_1   db 0
  2132.  
  2133. b_size_y:       dd 0x0
  2134. ysi             dd 0
  2135. small_draw      dd 0x0
  2136.  
  2137. ptime           dd 0x0
  2138. maxx            dd 0x0
  2139. text            db '0123456789'
  2140.  
  2141. page_a1         db '<   >'
  2142. page_clean_but  db 25,24,18
  2143.  
  2144. bte     dd 0xccddee
  2145.  
  2146. wcolor  dd 0x506070
  2147.  
  2148. sec     db ': '
  2149. pros    db '                                                  '
  2150.         db '                                                  '
  2151.  
  2152. screenxy    dd  0x0
  2153. stcount     dd  0x0
  2154.  
  2155. setup_exec:
  2156.                 dd 7
  2157.                 dd 0
  2158. .cmdline        dd 0
  2159.                 dd 0
  2160.                 dd 0
  2161.                 db '/sys/'
  2162. file_sys        db 'SETUP',0
  2163.  
  2164. exec_fileinfo:
  2165.         dd 7
  2166.         dd 0
  2167.         dd 0
  2168.         dd 0
  2169.         dd 0
  2170.         db 0
  2171. .name   dd 0
  2172.  
  2173. end_name        db '/sys/END',0
  2174. menu_name       db '/sys/@MENU',0
  2175. calendar_name   db '/sys/CALENDAR',0
  2176. sysmeter_name   db '/sys/GMON',0
  2177. mousemul_name   db '/sys/MOUSEMUL',0
  2178.  
  2179. dat_fileinfo:
  2180.         dd 0
  2181.         dd 0
  2182.         dd 0
  2183.         dd 1024
  2184.         dd I_END
  2185.         db '/sys/PANEL.DAT',0
  2186.  
  2187. ;m_bmp_fileinfo:
  2188. ;       dd 0
  2189. ;       dd 0
  2190. ;       dd 0
  2191. ;       dd 8192
  2192. ;       dd image
  2193. ;       db '/sys/MENUET.BMP',0
  2194.  
  2195. ;iconf_fileinfo:
  2196. ;       dd 0
  2197. ;       dd 0
  2198. ;       dd 0
  2199. ;       dd 8192
  2200. ;       dd image
  2201. ;       db '/sys/'
  2202. ;iconf  db 'MBAR_IX.BMP',0
  2203.  
  2204. this_slot       dd 0          ; Slot of this process
  2205. max_slot        dd 255
  2206. ;------------------------------------------------------------------------------
  2207. IM_END:
  2208. ;------------------------------------------------------------------------------
  2209. align 4
  2210. last_active_window      rd 1
  2211. prev_active_window      rd 1
  2212. active_window_changed   rd 1
  2213. app_tab_count           rd 1
  2214.  
  2215. alt_tab_list_size       rd 1
  2216.  
  2217. panel_x_pos     rd      1
  2218. panel_y_pos     rd      1
  2219.  
  2220. screen_size:
  2221. .height rw 1
  2222. .width  rw 1
  2223. ;------------------------------------------------------------------------------
  2224. align 4
  2225. system_colours  system_colors ; rd 10
  2226. ;------------------------------------------------------------------------------
  2227. align 4
  2228. app_list        rd 50
  2229. ;------------------------------------------------------------------------------
  2230. align 4
  2231. alt_tab_list    rd 256*2
  2232. ;------------------------------------------------------------------------------
  2233. align 4
  2234. process_info_buffer:
  2235.         rb 1024
  2236. ;------------------------------------------------------------------------------
  2237. align 4
  2238. procinfo_for_detect:
  2239.         rb 1024
  2240. ;------------------------------------------------------------------------------
  2241. align 4
  2242. procinfo_window_tabs:
  2243.         rb 1024
  2244. ;-----------------------------------------------------------------------------
  2245. align 4
  2246. tictable:
  2247.         rd 256
  2248. ;------------------------------------------------------------------------------
  2249. align 4
  2250.         rb 256
  2251. detect_stack:
  2252. ;------------------------------------------------------------------------------
  2253. align 4
  2254.         rb 256
  2255. ctx_menu_stack:
  2256. ;------------------------------------------------------------------------------
  2257. align 4
  2258.         rb 0x1000
  2259. stack_top:
  2260. ;------------------------------------------------------------------------------
  2261. ;align 4
  2262. ;image:
  2263. ;------------------------------------------------------------------------------
  2264. I_END: