Subversion Repositories Kolibri OS

Rev

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

  1. macro use_check_box
  2. {
  3. ch_text_margin=3
  4. ch_size=10
  5. ch_left equ [edi]
  6. ch_top equ [edi+2]
  7. ch_color equ [edi+4]
  8. ch_border_color equ [edi+8]
  9. ch_text_color equ [edi+12]
  10. ch_text_ptr equ [edi+16]
  11. ch_flags equ [edi+20]
  12. check_box:
  13. .draw:
  14. pusha
  15.         mov     eax,38
  16.         mov     bx,ch_left
  17.         push    bx
  18.         shl     ebx,16
  19.         pop     bx
  20.         mov     cx,ch_top
  21.         push    cx
  22.         shl     ecx,16
  23.         pop     cx
  24.         push    cx
  25.         add     cx,ch_size
  26.         mov     edx,ch_border_color
  27.         int     0x40
  28.         push    bx
  29.         add     bx,ch_size
  30.         ror     ebx,16
  31.         add     bx,ch_size
  32.         int     0x40
  33.         pop     bx
  34.         pop     cx
  35.         int     0x40
  36.         add     cx,ch_size
  37.         push    cx
  38.         shl     ecx,16
  39.         pop     cx
  40.         int     0x40
  41.  
  42.         mov     eax,13
  43.         mov     bx,ch_left
  44.         inc     bx
  45.         shl     ebx,16
  46.         mov     bx,ch_size
  47.         dec     bx
  48.         push    bx
  49.         mov     cx,ch_top
  50.         inc     cx
  51.         shl     ecx,16
  52.         pop     cx
  53.         mov     edx,ch_color
  54.         int     0x40
  55.  
  56.         bt      dword ch_flags,1
  57.         jnc     @f
  58.         call    .draw_ch
  59. @@:
  60.  
  61.         call    .get_text_n
  62.         mov     bx,ch_left
  63.         add     bx,(ch_size+ch_text_margin)
  64.         shl     ebx,16
  65.         mov     bx,ch_top
  66.         add     bx,(ch_size-9+2)
  67.         mov     ecx,ch_text_color
  68.         mov     eax,4
  69.         int     0x40
  70. popa
  71. ret
  72.  
  73. .get_text_n:
  74.         push    eax
  75.         xor     esi,esi
  76.         mov     edx,ch_text_ptr
  77. @@:
  78.         mov     ah,[edx+esi]
  79.         inc     esi
  80.         test    ah,ah
  81.         jnz     @b
  82.         dec     esi
  83.         pop     eax
  84. ret
  85.  
  86. .clear_ch:
  87.         mov     edx,ch_color
  88.         jmp     @f
  89. .draw_ch:
  90.         mov     edx,ch_border_color
  91. @@:
  92.         mov     bx,ch_left
  93.         add     bx,(ch_size/3)
  94.         shl     ebx,16
  95.         mov     bx,(ch_size/2)
  96.         push    bx
  97.         mov     cx,ch_top
  98.         add     cx,(ch_size/3)
  99.         shl     ecx,16
  100.         pop     cx
  101.         mov     eax,13
  102.         int     0x40
  103. ret
  104.  
  105. .mouse:
  106. pusha
  107.         mov     eax,37
  108.         mov     ebx,2
  109.         int     0x40
  110.         bt      eax,0
  111.         jc      @f
  112.         btr     dword ch_flags,2
  113.         popa
  114.         ret
  115. @@:
  116.         bts     dword ch_flags,2
  117.         jc      .mouse_end
  118.         call    .get_text_n
  119.         imul    esi,6
  120.         add     si,ch_text_margin
  121.         mov     eax,37
  122.         xor     ebx,ebx
  123.         inc     ebx
  124.         int     0x40
  125.         mov     bx,ch_top
  126.         cmp     ax,bx
  127.         jl      .mouse_end
  128.         add     bx,ch_size
  129.         cmp     ax,bx
  130.         jg      .mouse_end
  131.         shr     eax,16
  132.         mov     bx,ch_left
  133.         cmp     ax,bx
  134.         jl      .mouse_end
  135.         add     bx,ch_size
  136.         add     bx,si
  137.         cmp     ax,bx
  138.         jg      .mouse_end
  139.  
  140.         bts     dword ch_flags,1
  141.         jc      @f
  142.         call    .draw_ch
  143.         jmp     .mouse_end
  144. @@:
  145.         btr     dword ch_flags,1
  146.         call    .clear_ch
  147. .mouse_end:
  148. popa
  149. ret
  150. }
  151.  
  152. struc check_box left,top,color,border_color,text_color,text,flags
  153. {
  154. .left: dw left  ;+0
  155. .top: dw top    ;+2
  156. .color: dd color ;+4
  157. .border_color: dd border_color ;+8
  158. .text_color: dd text_color     ;+12
  159. .text: dd text       ;+16
  160. .flags: dd flags+0   ;+20
  161. }
  162.  
  163. ch_struc_size=24
  164. macro draw_check_boxes start,end
  165. {
  166.         mov     edi,start
  167.         mov     ecx,((end-start)/ch_struc_size)
  168. @@:
  169.         call    check_box.draw
  170.         add     edi,ch_struc_size
  171.         loop    @b
  172. }
  173.  
  174. macro mouse_check_boxes start,end
  175. {
  176.         mov     edi,start
  177.         mov     ecx,((end-start)/ch_struc_size)
  178. @@:
  179.         call    check_box.mouse
  180.         add     edi,ch_struc_size
  181.         loop    @b
  182. }
  183.  
  184. macro check_boxes_set_sys_color start,end,color_table
  185. {
  186.         mov     edi,start
  187.         mov     ecx,((end-start)/ch_struc_size)
  188.         mov     esi,color_table
  189. @@:
  190.         push    dword [esi+32]
  191.         pop     dword ch_text_color
  192.         push    dword [esi+36]
  193.         pop     dword ch_border_color
  194.         add     edi,ch_struc_size
  195.         loop    @b
  196. }