Subversion Repositories Kolibri OS

Rev

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