Subversion Repositories Kolibri OS

Rev

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