Subversion Repositories Kolibri OS

Rev

Rev 2088 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. use32
  2.     org 0x0
  3.     db  'MENUET01'
  4.     dd  0x01,start,i_end,e_end,e_end,0,0
  5.  
  6.  
  7. BUTTON_SIDE             equ     16              ; button are squares
  8. BUTTON_SPACE            equ     19              ; space between cols and rows
  9.  
  10.  
  11. start:
  12.         call    get_skin_height
  13.  
  14. still:
  15.         mov     eax, 10
  16.         int     0x40
  17.  
  18.         dec     eax
  19.         jnz     @f
  20.         call    redraw
  21.     @@: dec     eax
  22.         jnz     @f
  23.         call    key
  24.     @@: dec     eax
  25.         jnz     @f
  26.         call    button
  27.     @@: jmp     still
  28.  
  29.  
  30. get_skin_height:
  31.  
  32.         mov     eax, 48
  33.         mov     ebx, 4
  34.         int     0x40
  35.  
  36.         mov     [skin_height], eax
  37.         ret
  38.  
  39.  
  40. redraw:
  41.         mov     eax, 12
  42.         mov     ebx, 1
  43.         int     0x40
  44.  
  45.         mov     eax, 0
  46.         mov     ebx, 300*0x10000+317
  47.         mov     ecx, 300*0x10000+184
  48.         add     ecx, [skin_height]
  49.         mov     edx, 0x33F0F0F0                 ; skinned, resizeable
  50.         mov     esi, 0x80808080                 ; title color
  51.         mov     edi, window_title
  52.         int     0x40
  53.  
  54.         call    draw_table
  55.         call    draw_codes
  56.         call    draw_page_switcher
  57.  
  58.         mov     eax, 12
  59.         mov     ebx, 2
  60.         int     0x40
  61.         ret
  62.  
  63.  
  64. key:
  65.         mov     eax, 2
  66.         int     0x40
  67.         ret
  68.  
  69. button:
  70.         mov     eax, 17
  71.         int     0x40
  72.         cmp     eax, 1
  73.         jnz     @f
  74.         ret
  75.     @@: shr     eax, 8
  76.         cmp     eax, 1
  77.         jz      quit
  78.         cmp     ax, 0xFFAA
  79.         jnz     .change_focus
  80.         xor     bx, bx
  81.         mov     bl, [symbol_start]
  82.         add     bx, 2
  83.         mov     cx, bx
  84.         add     cx, 128
  85.     @@: mov     eax, 8
  86.         mov     edx, 0x80000000
  87.         add     dx, bx
  88.         int     0x40
  89.         cmp     bx, cx
  90.         jz      @f
  91.         inc     bx
  92.         jmp     @b
  93.  
  94.     @@: add     [symbol_start], 128             ; change page
  95.         add     [symbol_focused], 128
  96.         call    draw_table
  97.         call    draw_codes
  98.         mov     [redraw_flag], 1                ; for page_switcher this means visual blink (color changing)
  99.         call    draw_page_switcher
  100.         mov     eax, 5
  101.         mov     ebx, 10
  102.         int     0x40
  103.         mov     [redraw_flag], 0
  104.         call    draw_page_switcher
  105.         ret
  106.  
  107.   .change_focus:
  108.         mov     bl, [symbol_focused]
  109.         mov     [symbol_unfocused], bl
  110.         shl     eax, 8
  111.         sub     ah, 2
  112.         mov     [symbol_focused], ah
  113.         mov     [redraw_flag], 1                ; for table this means redraw only focused and unfocused buttons
  114.         call    draw_table
  115.         call    draw_codes
  116.         mov     [redraw_flag], 0
  117.         ret
  118.  
  119.  
  120. draw_table:
  121.  
  122.         mov     al, [symbol_start]
  123.         mov     [symbol_current], al
  124.  
  125.   .next_button:
  126.         push    [button_x]
  127.         pop     [button_cur_x]
  128.         push    [button_y]
  129.         pop     [button_cur_y]
  130.  
  131.         mov     al, [symbol_current]
  132.         mov     [button_cur_id], al
  133.  
  134.         mov     [is_active], 0
  135.  
  136.         mov     al, [symbol_focused]
  137.         cmp     [symbol_current], al
  138.         jnz     @f
  139.         mov     byte[is_active], 1
  140.     @@: cmp     [redraw_flag], 1
  141.         jnz     .draw                           ; if redraw_flag is zero, we should redraw the whole table
  142.         mov     al, [symbol_focused]
  143.         cmp     [symbol_current], al
  144.         jz      .draw
  145.         mov     al, [symbol_unfocused]
  146.         cmp     [symbol_current], al
  147.         jz      .draw
  148.         jmp     .skip                           ; skip button if it isn't (un)focused
  149.  
  150.   .draw:
  151.         call    draw_button
  152.   .skip:
  153.         mov     al, [symbol_start]
  154.         add     al, 127                         ; end of current page
  155.         cmp     [symbol_current], al            ; the last on page?
  156.         jb      @f
  157.         mov     [button_x], 2
  158.         mov     [button_y], 2
  159.         ret
  160.     @@: inc     [symbol_current]
  161.         add     [button_x], BUTTON_SPACE
  162.         cmp     [button_x], 306                 ; the last in row?
  163.         jae     @f
  164.         jmp     .next_button
  165.     @@: add     [button_y], BUTTON_SPACE        ; next row
  166.         mov     [button_x], 2
  167.         jmp     .next_button
  168.  
  169.  
  170.         ret
  171.  
  172.  
  173. draw_button:
  174.         mov     eax, 8
  175.         mov     ebx, [button_cur_x]
  176.         shl     ebx, 16
  177.         add     ebx, BUTTON_SIDE
  178.         mov     ecx, [button_cur_y]
  179.         shl     ecx, 16
  180.         add     ecx, BUTTON_SIDE
  181.         mov     edx, 0x80000000
  182.         add     dl, [button_cur_id]
  183.         add     edx, 2
  184.         mov     eax, 8
  185.         int     0x40
  186.  
  187.         or      edx, 0x20000000
  188.         add     edx, 0x80000000
  189.         mov     esi, 0x00F0F0F0                 ; button color
  190.         int     0x40
  191.  
  192.         cmp     byte[is_active], 1
  193.         jz      @f
  194.   .symbol:
  195.         mov     eax, 4
  196.         mov     ebx, [button_cur_x]
  197.         add     ebx, 6
  198.         shl     ebx, 16
  199.         add     ebx, [button_cur_y]
  200.         add     ebx, 5
  201.         xor     ecx, ecx
  202.         mov     edx, symbol_current
  203.         mov     esi, 1
  204.         int     0x40   
  205.         ret
  206.     @@:                                         ; draw a blue square (selection), 8 lines
  207.         mov     eax, 38
  208.         mov     ebx, [button_cur_x]
  209.         shl     ebx, 16
  210.         add     ebx, [button_cur_x]
  211.         add     ebx, BUTTON_SIDE-1
  212.         mov     ecx, [button_cur_y]
  213.         shl     ecx, 16
  214.         add     ecx, [button_cur_y]
  215.         mov     edx, 0x000080FF                 ; square color
  216.         int     0x40
  217.  
  218.         mov     ebx, [button_cur_x]
  219.         shl     ebx, 16
  220.         add     ebx, [button_cur_x]
  221.         mov     ecx, [button_cur_y]
  222.         shl     ecx, 16
  223.         add     ecx, [button_cur_y]
  224.         add     ecx, BUTTON_SIDE-1
  225.         int     0x40
  226.  
  227.         mov     ebx, [button_cur_x]
  228.         inc     ebx
  229.         shl     ebx, 16
  230.         add     ebx, [button_cur_x]
  231.         inc     ebx
  232.         add     ebx, BUTTON_SIDE-1
  233.         mov     ecx, [button_cur_y]
  234.         inc     ecx
  235.         shl     ecx, 16
  236.         add     ecx, [button_cur_y]
  237.         inc     ecx
  238.         int     0x40
  239.  
  240.         mov     ebx, [button_cur_x]
  241.         inc     ebx
  242.         shl     ebx, 16
  243.         add     ebx, [button_cur_x]
  244.         inc     ebx
  245.         mov     ecx, [button_cur_y]
  246.         inc     ecx
  247.         shl     ecx, 16
  248.         add     ecx, [button_cur_y]
  249.         inc     ecx
  250.         add     ecx, BUTTON_SIDE-2
  251.         int     0x40
  252.  
  253.         mov     ebx, [button_cur_x]
  254.         add     ebx, BUTTON_SIDE-1
  255.         shl     ebx, 16
  256.         add     ebx, [button_cur_x]
  257.         add     ebx, BUTTON_SIDE-1
  258.         mov     ecx, [button_cur_y]
  259.         inc     ecx
  260.         shl     ecx, 16
  261.         add     ecx, [button_cur_y]
  262.         add     ecx, BUTTON_SIDE-1
  263.         int     0x40
  264.  
  265.         mov     ebx, [button_cur_x]
  266.         inc     ebx
  267.         shl     ebx, 16
  268.         add     ebx, [button_cur_x]
  269.         add     ebx, BUTTON_SIDE-2
  270.         mov     ecx, [button_cur_y]
  271.         add     ecx, BUTTON_SIDE-1
  272.         shl     ecx, 16
  273.         add     ecx, [button_cur_y]
  274.         add     ecx, BUTTON_SIDE-1
  275.         int     0x40
  276.  
  277.         mov     ebx, [button_cur_x]
  278.         add     ebx, BUTTON_SIDE
  279.         shl     ebx, 16
  280.         add     ebx, [button_cur_x]
  281.         add     ebx, BUTTON_SIDE
  282.         mov     ecx, [button_cur_y]
  283.         shl     ecx, 16
  284.         add     ecx, [button_cur_y]
  285.         add     ecx, BUTTON_SIDE-1
  286.         int     0x40
  287.  
  288.         mov     ebx, [button_cur_x]
  289.         shl     ebx, 16
  290.         add     ebx, [button_cur_x]
  291.         add     ebx, BUTTON_SIDE
  292.         mov     ecx, [button_cur_y]
  293.         add     ecx, BUTTON_SIDE
  294.         shl     ecx, 16
  295.         add     ecx, [button_cur_y]
  296.         add     ecx, BUTTON_SIDE
  297.         int     0x40
  298.  
  299.         jmp     .symbol
  300.  
  301.  
  302. draw_page_switcher:
  303.  
  304.         mov     eax, 8
  305.         mov     edx, 0x8000FFAA
  306.         int     0x40
  307.  
  308.         mov     esi, 0x00F0F0F0
  309.         cmp     [redraw_flag], 1
  310.         jnz     @f
  311.         mov     esi, 0x00808080
  312.     @@: mov     eax, 8
  313.         mov     ebx, 2*0x10000+60
  314.         mov     ecx, 157*0x10000+19
  315.         mov     edx, 0x2000FFAA
  316.         int     0x40
  317.  
  318.         cmp     [symbol_start], 0
  319.         jnz     @f
  320.         mov     eax, 4
  321.         mov     ebx, 11*0x10000+164
  322.         mov     ecx, 0x80000000
  323.         mov     edx, string_000_127
  324.         int     0x40
  325.         ret
  326.  
  327.     @@: mov     eax, 4
  328.         mov     ebx, 11*0x10000+164
  329.         mov     ecx, 0x80000000
  330.         mov     edx, string_128_255
  331.         int     0x40
  332.         ret
  333.  
  334.  
  335. draw_codes:
  336.  
  337.         mov     eax, 13
  338.         mov     ebx, 80*0x10000+220
  339.         mov     ecx, 164*0x10000+9
  340.         mov     edx, 0x00F0F0F0
  341.         int     0x40
  342.  
  343.         mov     eax, 4
  344.         mov     ebx, 80*0x10000+164
  345.         mov     ecx, 0x80000000
  346.         mov     edx, string_ASCII_CODE
  347.         int     0x40
  348.  
  349.         mov     ebx, 180*0x10000+164
  350.         mov     ecx, 0x80000000
  351.         mov     edx, string_ASCII_HEX_CODE
  352.         int     0x40
  353.  
  354.         mov     eax, 47
  355.         mov     ebx, 0x00030000                 ; 3 digits, dec
  356.         xor     ecx, ecx
  357.         add     cl, [symbol_focused]
  358.         mov     edx, 152*0x10000+164
  359.         xor     esi, esi
  360.         int     0x40
  361.  
  362.         mov     ebx, 0x00020100                 ; 2 digits, hex
  363.         mov     edx, 276*0x10000+164
  364.         int     0x40
  365.  
  366.         ret
  367.  
  368.  
  369. quit:
  370.         mov     eax, -1
  371.         int     0x40
  372.  
  373. window_title            db 'ASCIIVju v0.3 R3',0
  374.  
  375. string_000_127          db '000-127',0
  376. string_128_255          db '128-255',0
  377. string_ASCII_CODE       db 'ASCII Code:    ',0
  378. string_ASCII_HEX_CODE   db 'ASCII Hex-Code:   ',0
  379.  
  380. skin_height             dd 0
  381.  
  382. button_x                dd 2
  383. button_y                dd 2
  384.  
  385. symbol_current          db 0
  386. symbol_start            db 0
  387. button_cur_x            dd 0
  388. button_cur_y            dd 0
  389. button_cur_id           db 0
  390.  
  391. db 0,0,0                                        ; unused
  392.  
  393. is_active               dd 0                    ; is current symbol selected?
  394.  
  395. symbol_unfocused        db 0
  396. symbol_focused          db 0
  397. redraw_flag             dd 0
  398.  
  399. db 0,0,0,0                                      ; unused
  400. i_end:
  401.  
  402. rb 0x500                                        ;stack
  403. e_end:
  404.