Subversion Repositories Kolibri OS

Rev

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