Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ;    SHAPED WINDOW - BASIC EXAMPLE
  3. ;
  4. ;    Compile with FASM for Menuet
  5. ;
  6.  
  7. use32
  8.  
  9.                 org     0x0
  10.  
  11.                 db      'MENUET00'              ; 8 byte id
  12.                 dd      38                      ; required os
  13.                 dd      START                   ; program start
  14.                 dd      I_END                   ; program image size
  15.                 dd      0x1000                  ; required amount of memory
  16.                 dd      0x1000                  ; esp
  17.                 dd      0x00000000              ; reserved=no extended header
  18.  
  19. include 'lang.inc'
  20. include 'macros.inc'
  21.  
  22.  
  23.  
  24. START:                          ; start of execution
  25.  
  26.     call shape_window           ; function for shaping
  27.  
  28.     call draw_window            ; at first, draw the window
  29.  
  30. still:
  31.  
  32.     mov  eax,10                 ; wait here for event
  33.     int  0x40
  34.  
  35.     cmp  eax,1                  ; redraw request ?
  36.     je   red
  37.     cmp  eax,2                  ; key in buffer ?
  38.     je   key
  39.     cmp  eax,3                  ; button in buffer ?
  40.     je   button
  41.  
  42.     jmp  still
  43.  
  44.   red:                          ; redraw
  45.     call draw_window
  46.     jmp  still
  47.  
  48.   key:                          ; key
  49.     mov  eax,2                  ; just read it and ignore
  50.     int  0x40
  51.     jmp  still
  52.  
  53.   button:                       ; button
  54.     mov  eax,17                 ; get id
  55.     int  0x40
  56.  
  57.     cmp  ah,1                   ; button id=1 ?
  58.     jne  noclose
  59.     mov  eax,-1                 ; close this program
  60.     int  0x40
  61.   noclose:
  62.  
  63.     jmp  still
  64.  
  65.  
  66. shape_window:
  67.  
  68.     pusha
  69.  
  70.     mov  eax,50       ; give the shape reference area
  71.     mov  ebx,0
  72.     mov  ecx,shape_reference
  73.     int  0x40
  74.  
  75.     mov  eax,50       ; give the shape scale  32 x 32  ->  128 x 128
  76.     mov  ebx,1        ; you dont have to give this, scale is 1:1 by default
  77.     mov  ecx,2
  78.     int  0x40
  79.  
  80.     popa
  81.  
  82.     ret
  83.  
  84.  
  85. shape_reference:    ;  32 x 32    ( window_size_X + 1 ) * ( window_size_Y + 1 )
  86.  
  87.     db   0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0
  88.     db   0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0
  89.     db   0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0
  90.     db   0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0
  91.     db   0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0
  92.     db   0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0
  93.     db   0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0
  94.     db   0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0
  95.     db   0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0
  96.     db   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
  97.     db   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0
  98.     db   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0
  99.     db   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0
  100.     db   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0
  101.     db   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0
  102.     db   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0
  103.     db   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0
  104.     db   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0
  105.     db   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0
  106.     db   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0
  107.     db   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0
  108.     db   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
  109.     db   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
  110.     db   0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0
  111.     db   0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0
  112.     db   0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0
  113.     db   0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0
  114.     db   0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0
  115.     db   0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0
  116.     db   0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0
  117.     db   0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0
  118.     db   0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0
  119.  
  120.  
  121. ;   *********************************************
  122. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  123. ;   *********************************************
  124.  
  125.  
  126. draw_window:
  127.  
  128.     mov  eax,12                    ; function 12:tell os about windowdraw
  129.     mov  ebx,1                     ; 1, start of draw
  130.     int  0x40
  131.  
  132.                                    ; DRAW WINDOW
  133.     mov  eax,0                     ; function 0 : define and draw window
  134.     mov  ebx,100*65536             ; [x start] *65536 + [x size]
  135.     mov  ecx,100*65536             ; [y start] *65536 + [y size]
  136.     mov  bx,word [x_size]
  137.     mov  cx,word [y_size]
  138.     mov  edx,0x00cccc00            ; color of work area RRGGBB,8->color glide
  139.     mov  esi,0x00cccc00            ; color of grab bar  RRGGBB,8->color glide
  140.     mov  edi,0x00cccc00            ; color of frames    RRGGBB
  141.     int  0x40
  142.  
  143.  
  144.                                    ; CLOSE BUTTON
  145.     mov  eax,8                     ; function 8 : define and draw button
  146.     mov  ebx,78*65536+12           ; [x start] *65536 + [x size]
  147.     mov  ecx,20*65536+12           ; [y start] *65536 + [y size]
  148.     mov  edx,1                     ; button id
  149.     mov  esi,0x5599cc              ; button color RRGGBB
  150.     int  0x40
  151.  
  152.  
  153.     mov  eax,12                    ; function 12:tell os about windowdraw
  154.     mov  ebx,2                     ; 2, end of draw
  155.     int  0x40
  156.  
  157.     ret
  158.  
  159.  
  160. ; DATA AREA
  161.  
  162.  
  163. x_size  dd  127
  164. y_size  dd  127
  165.  
  166.  
  167. I_END:
  168.