Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ;Їрщы ёючфрэ 13.02.2009 <Lrz> ═р ъюф яЁшьхэхэр GPL2 ышЎхэчш 
  2. ;╠ръЁюё фы  ёшёЄхьэющ сшсышюЄхъш box_lib.obj
  3. ;Optionbox
  4.  
  5. macro use_optionbox_driver      ;ьръЁюё√ ъюЄюЁ√х єяЁрты ■Є ЁрсюЄющ сюъёр )
  6. {
  7. option_box_draw:
  8.         pusha
  9.  
  10.         mov     eax,dword [esp+36]
  11. @@:     mov     edi,dword [eax]
  12.         test    edi,edi
  13.         je      option_check
  14.         call    option_box_draw_box
  15.         add     eax,4
  16.         jmp    @b
  17.  
  18. option_check:
  19.         mov     eax,dword [esp+36]
  20. @@:     mov     edi,dword [eax]
  21.         test    edi,edi
  22.         je      @f
  23.        
  24.         mov     ebx,dword [edi]
  25.         mov     ebx,dword [ebx]
  26.         cmp     edi,ebx
  27.         jne     .clear_op
  28.        
  29.         pusha
  30.         call    option_box_draw_op
  31.         popa
  32.         add     eax,4
  33.         jmp     @b
  34.  
  35. .clear_op:
  36.         pusha
  37.         call    option_box_clear_op
  38.         popa
  39.         add     eax,4
  40.         jmp     @b
  41.  
  42.  
  43. @@:     popa
  44.         ret 4
  45.         ; exit тююс∙х :)
  46.  
  47.  
  48. option_box_mouse:
  49.         pusha
  50.  
  51.         mov     eax,dword [esp+36]
  52. @@:     mov     edi,dword [eax]
  53.         test    edi,edi
  54.         je      option_check
  55.         call    option_box_mouse_op
  56.         add     eax,4
  57.         jmp    @b
  58.  
  59. }
  60. macro use_optionbox_draw
  61. {
  62. option_box_draw_box:
  63. option_group equ [edi]
  64. op_left equ [edi+4]    ;ъююЁфшэрЄр эрўрыр Ёшёютрэш  яю ї
  65. op_top equ [edi+6]     ;ъююЁфшэрЄр эрўрыр Ёшёютрэш  яю є
  66. op_text_margin equ [edi+8]      ;=4 ЁрёёЄю эшх юЄ яЁ ьюєуюы№эшър ўхъ сюъёр фю эрфяшёш
  67. op_size equ [edi+12]             ;12 ЁрчьхЁ ътрфЁрЄр ўхъ сюъёр
  68. op_color equ [edi+16]
  69. op_border_color equ [edi+20] ; or [edi+4] ;ЎтхЄ Ёрьъш checkbox хх ьюцэю чрфрЄ№ ёрьюёЄю Єхы№эю
  70. op_text_color equ   [edi+24];[edi+4]  ;ЎтхЄ ЄхъёЄр
  71. op_text_ptr equ [edi+28]    ;єърчрЄхы№ эр эрўрыю ЄхъёЄютющ ёЄЁюъш
  72. op_text_length equ [edi+32]
  73. op_flags equ [edi+36]       ;Їыруш
  74.  
  75.         pusha   ;ёюїЁрэшь тёх ЁхушёЄЁ√
  76.  
  77.         movzx ebx,word op_left
  78.         shl ebx,16
  79.         add ebx,dword op_size
  80.         movzx ecx,word op_top
  81.         shl ecx,16
  82.         add ecx,dword op_size
  83.         mov edx,dword op_border_color
  84.         mov eax,13
  85.         mcall ;Ёшёєхь Ёрьъє
  86.  
  87.         mov edx,dword op_color
  88.         add ebx,1 shl 16 - 2
  89.         add ecx,1 shl 16 - 2
  90.         mcall ;чръЁр°штрхь тэєЄЁхээюёЄш ўхъсюъёр
  91.  
  92. ;        mov     eax,dword option_group
  93. ;        mov     dword eax,[eax]
  94. ;        cmp     eax,edi
  95. ;        jne     @f
  96. ;        call    option_box_draw_op  ;эрЁшёютрЄ№ тъы■ўхээ√щ ўхъ сюъё
  97.  
  98.  
  99. ;----------------------------
  100. ;ЁрёўхЄ ъєфр сєфхЄ яЁюшчтхфхэ т√тюф ЄхъёЄр
  101. ;----------------------------
  102. @@:     movzx ebx,word op_left        ;чруЁєчшЄ№ чэрўхэшх ї фы  ўхъ сюъёр
  103.         add   ebx,dword op_size
  104.         add   ebx,dword op_text_margin;фюсртшЄ№ ЁрчьхЁ ёЄюЁюэ√ ш ЁрёёЄю эшх эр ъюЄюЁюь эрўэхЄё  т√тюф ЄхъёЄр
  105.         shl   ebx,16                ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536)
  106.         mov   bx,word op_top        ;чруЁєчшь чэрўхэшх яю y
  107.         add   ebx,op_size
  108.         mov   ecx,dword op_text_color        ;чруЁєчшь ЎтхЄ эрфяшёш + flags
  109.         sub   ebx,7        ;фюсртшь чэрўхэшх фышэ√ ёЄюЁюэ√ -9+2
  110.        
  111.         mov   edx,dword op_text_ptr                ;єърцхь рфЁхё юЄ ъєфр эєцэю т√тюфшЄ№ ёЄЁюъє
  112.         mov   esi,dword op_text_length
  113.         ;тэхёхь т eax чэрўхэшх т√тюфр эрфяшёш эр ърэтє
  114.         mov   eax,4
  115.         mcall                  ;┬√тюф
  116. popa                           ;тюёёЄрэютшЄ№ чэрўхэш  ЁхушёЄЁют шч ёЄхър
  117. ret                            ;т√щфхь шч яЁюЎхфєЁ√
  118.  
  119. option_box_clear_op:                      ;юўшёЄър ўхъ сюъёр
  120.         mov     edx,dword op_color    ;ЎтхЄ тэєЄЁш ўхъ сюъёр
  121.         jmp     @f              ;схчєёыютэ√щ яЁ√цюъ эр эшцэ■■ ьхЄъє @@
  122.  
  123.  
  124. option_box_draw_op:            ;эрЁшёютрЄ№ тъы■ўхээ√щ ўхъ сюъё
  125.         mov   edx,dword op_border_color        ;чруЁєчшЄ№ ЎтхЄ
  126. @@:
  127.         movzx ebx,word op_left  ;чруЁєчшЄ№ ъююЁфшэрЄє яю ї
  128.         mov   eax,dword op_size
  129.         push  ax
  130.         shr   eax,2
  131.         add   ebx,eax          ;фюсртшЄ№ (ёЄюЁюэр яЁ ьюєуюы№эшър/3)
  132.         shl   ebx,16            ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536)
  133.         pop   bx
  134.         shr   bx,1              ;чруЁєчшЄ№ (ёЄюЁюэр яЁ ьюєуюы№эшър/2)
  135.         mov   bp,bx             ;ёюїЁрэшь ЁхушёЄЁ bx т ЁхушёЄЁх єърчрЄхы  срч√
  136.  
  137.         movzx ecx,word op_top ;чруЁєчшЄ№ ъююЁфшэрЄє яю є
  138.         mov   eax,dword op_size
  139.         shr   eax,2
  140.         add   ecx,eax         ;фюсртшЄ№ (ёЄюЁюэр яЁ ьюєуюы№эшър/4)
  141.         shl   ecx,16          ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536)
  142.         mov   cx,bp           ;чруЁєчшь чэрўхэш  ЁхушёЄЁр єърчрЄхы  срч√ т cx
  143.         mov   eax,13          ;т eax - чэрўхэш  ЇєэъЎшш фы  т√тюфр яюыюё√ Є.х. яю ёєЄш яЁ ьюєуюы№эшър, ъюЄюЁ√щ юЄюсЁрцрхЄ тъы■ўхээ√щ ъюьяюэхэЄ ўхъ сюъё
  144.         mcall            ;т√тюф
  145. ret                                ;т√щЄш шч яЁюЎхфєЁ√
  146.  
  147. }
  148.  
  149.  
  150. macro use_optionbox_mouse
  151. {
  152. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  153. ;╬сЁрсюЄўшъ mouse
  154. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  155. option_box_mouse_op:                 ;юсЁрсюЄър ь√°ш
  156. pusha
  157.         mov     eax,37          ;сєфхь ўЄю Єю фхырЄ№ хёыш є эрё ўЄю - эшЄ№ эрцрЄю
  158.         mov     ebx,2           ;тэхёЄш т ЁхушёЄЁ чэрўхэшх 2
  159.         mcall           ;яЁютхЁър эх эрцры ыш яюы№чютрЄхы№ ъэюяъє ь√°ъш
  160.         test    eax,eax    ;яЁютхЁър хёыш є эрё т eax=0, Єю єёЄрэютшь Їыру ш т√щфхь
  161.         jnz     @f         ;яхЁхщЄш эр эшцэ■■ ьхЄъє @@
  162.  
  163.         jmp     option_box_mouse_end
  164.                            ;хёыш эшўхую эх яЁюшчю°ыю, Єю тюёёЄрэютшь чэрўхэш  ЁхушёЄЁют шч ёЄхър
  165.                            ;т√їюф
  166. @@:
  167.         mov     esi,dword op_text_length ;чруЁєчшЄ№ ъюы-тю ёшьтюыют т ЄхъёЄютющ ёЄЁюъх
  168.         ;╙ьэюцхэшх эр 6 ┴√ёЄЁюх єьэюцхэшх ьюцэю тюёяюы№чютрЄ№ё  ы■с√ь ьч ьхЄюфют, эю эр ёЄрЁ√ї ╧ЁюЎхёёюЁрї (386,486,P1)с√ёЄЁхх сєфхЄ ё шэёЄЁєъЎшхщ Lea
  169.         ;lea    esi,[eax*2+eax]
  170.         ;shl    eax,1
  171.         imul    esi,6               ; шыш ьюцэю ш Єръ єьэюцшЄ№ эр 6
  172.         xor     ebx,ebx
  173.         add     esi,dword op_text_margin   ;фюсртшЄ№ 3 - ЁрёёЄю эшх юЄ ўхъ сюъёр фю эрфяшёш
  174.        
  175.         mov     eax,37          ;яюыєўшь ъююЁфшэрЄ√ ь√°ъш
  176.         inc     ebx             ;фюсртшЄ№ 1
  177.         mcall                ;яюыєўшЄ№ ъююЁфшэрЄ√ ъєЁёюЁр юЄэюёшЄхы№эю юъэр
  178.  
  179.         movzx   ebx,word op_top           ;чруЁєчшЄ№ т bx чэрўхэшх ъююЁфшэрЄ√ є
  180.         cmp     ax,bx               ;ёЁртэшЄ№ ё ё ъююЁфшэрЄющ ъєЁёюЁр
  181.         jl      option_box_mouse_end          ;SF <> OF хёыш ьхэ№°х
  182.         add     ebx,dword op_size          ;фюсртшЄ№ ЁрчьхЁ
  183.         cmp     ax,bx               ;ёЁртэшЄ№
  184.         jg      option_box_mouse_end          ;ZF = 0 ш SF = OF хёыш сюы№°х
  185.        
  186.         shr     eax,16              ;Ёрчфхышь эр 65536 шыш яЁюёЄю ёфтшэхь сшЄ√ эр 16 чэрўхэшщ
  187.         movzx   ebx,word op_left          ;яЁюшчтхфхь рэрыюушўэюх ёЁртэхэшх
  188.         cmp     ax,bx                ;ёЁртэшЄ№ ЁхушёЄЁ√
  189.         jl      option_box_mouse_end           ;хёыш ьхэ№°х
  190.         add     ebx,dword op_size          ;фюсртшЄ№ фышэє ёЄюЁюэ√ яЁ ьюєуюы№эшър
  191.         add     ebx,esi              ;╙ўхёЄ№ т чэрўхэшш яю ї х∙х ш фышэє эрфяшёш ъ ўхъсюъёє
  192.         cmp     ax,bx                ;ёЄЁртэшЄ№ ЁхушёЄЁ√
  193.         jg      option_box_mouse_end           ;хёыш сюы№°х
  194.         mov     eax,dword option_group
  195.         mov     [eax],edi
  196.  
  197. option_box_mouse_end:
  198. popa                              ;тюёёЄрэютшЄ№ ЁхушёЄЁ√ шч ёЄхър
  199. ret                               ;т√щЄш
  200.  
  201. }