Subversion Repositories Kolibri OS

Rev

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

  1. ;ª®¬¯®­¥­â OptionBox (Žá­®¢ ­ ­  Checkbox)
  2. ;Ž£à®¬­ ï ¡« £®¤ à­®áâì Maxxxx32, Diamond, Heavyiron, ¨ ¤à㣨¬ ¯à®£à ¬¬¨áâ ¬, ¨ ¨å ¯à®£à ¬¬ ¬, ¡¥§
  3. ;ª®â®àëå ï ­¥ ᬮ£ ¡ë ­ ¯¨á âì íâ®â ª®¬¯®­¥­â.
  4. ;16.02.2007
  5. ;<Lrz>  - ’¥¯«®¢ €«¥ªá¥©  www.lrz.land.ru
  6.  
  7. macro use_option_box
  8. {
  9. op_text_margin=4     ;à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
  10. op_size=10           ;à §¬¥à ª¢ ¤à â  祪 ¡®ªá 
  11. op_left equ [edi]    ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® å
  12. op_top equ [edi+2]   ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® ã
  13. op_border_color equ [edi+4] ;梥â à ¬ª¨ optionbox
  14. op_text_color equ [edi+8]  ;梥â ⥪áâ 
  15. op_text_ptr equ [edi+12]    ;㪠§ â¥«ì ­  ­ ç «® ⥪á⮢®© áâப¨
  16. op_text_length equ [edi+16] ;¤«¨­  ­ ¤¯¨á¨ (2^64 â ª®© ¤«¨­ë ¬®¦¥â ¡ëâì ⥪áâ)
  17. op_optibox_gr   equ [edi+18]
  18. option_box:
  19. .draw:
  20. pusha   ;á®åà ­¨¬ ¢á¥ ॣ¨áâàë
  21.         mov     eax,38          ;à¨á®¢ ­¨¥ «¨­¨¨
  22.         movzx   ebx,word op_left        ;¯®«®¦¥­¨¥ ¯® å
  23.         mov     ecx,ebx         ;á®åà ­¨¬ ¢ ॣ¨áâॠcx §­ ç¥­¨¥ bx  1 ¬¨ªà®®¯¥à æ¨ï
  24.         ;push   bx  ;3 - ¬¨ªà®®¯¥à æ¨¨  ¨á¯®«ì§ãï á⥪ ¬®¦­® ¢ë¨£à âì ¢ à §¬¥à¥, ¨á¯®«ì§ãï ॣ¨áâàë - ¢ ᪮à®áâ¨
  25.         shl     ebx,16          ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  26.         ;pop    bx  ;2 - ¬¨ªà®®¯¥à æ¨¨  ­  ¤ ­­ë© ¬®¬¥­â áä®à¬¨à®¢ ­  [ª®®à¤¨­ â  ­ ç «  ¯® ®á¨ x]*65536 + [ª®®à¤¨­ â  ­ ç «  ¯® ®á¨ x]
  27.         mov     bx,cx           ;¢®ááâ ­®¢¨¬ §­ ç¥­¨¥ bx
  28.         movzx   ecx,word op_top ;§ £à㧨¬ ¢ cx §­ ç¥­¨¥ y
  29.         mov     esi,ecx         ;á®åà ­¨¬ §­ ç¥­¨¥ ॣ¨áâà  cx ¢ ॣ¨áâà 㪠§ â¥«ì si                          
  30.         ;push   cx
  31.         shl     ecx,16          ; ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)      mov     cx,si           ;¢®ááâ ­®¢¨¬ §­ ç¥­¨¥ ॣ¨áâà  cx
  32.         mov     cx,si           ;¢®ááâ ­®¢¨¬ §­ ç¥­¨¥ ॣ¨áâà  cx
  33.         ;pop    cx      ;[ª®®à¤¨­ â  ­ ç «  ¯® ®á¨ y]*65536 + [ª®®à¤¨­ â  ­ ç «  ¯® ®á¨ y]
  34.         ;push   cx      
  35.         add     ecx,op_size ;[ª®®à¤¨­ â  ­ ç «  ¯® ®á¨ y]*65536 + [ª®®à¤¨­ â  ª®­æ  ¯® ®á¨ y]
  36.         mov     edx,dword op_border_color ;–¢¥â «¨­¨¨
  37.         int     0x40   ;à¨á®¢ ­¨¥ ¢¥à⨪ «ì­®© «¥¢®© «¨­¨¨ ª¢ ¤à â  (¯àאַ㣮«ì­¨ª )
  38. ;
  39.         mov     ebp,ebx ;á®åà ­¨¬ ॣ¨áâà bx ¢ ॣ¨áâॠ㪠§ â¥«ï ¡ §ë
  40.         ;push   bx   ;¢â®«ª­ãâì ¢ bx [ª®®à¤¨­ â  ­ ç «  ¯® ®á¨ å]*65536 + [ª®®à¤¨­ â  ­ ç «  ¯® ®á¨ x]
  41.         add     ebx,op_size      ;[ª®®à¤¨­ â  ­ ç «  + ¤«¨­  áâ®à®­ë ¯® ®á¨ å]
  42.         ror     ebx,16          ;[ª®®à¤¨­ â  ­ ç «  + ¤¨­  áâ®à®­ë ¯® ®á¨ å]*65536
  43.         add     ebx,op_size      ;[ª®®à¤¨­ â  ­ ç « +¤«¨­  áâ®à®­ë ¯® ®á¨ å]*65536 + [ª®®à¤¨­ â  ­ ç « +¤«¨­  áâ®à®­ë ¯® ®á¨ x]
  44.         int     0x40
  45.        
  46.         mov     bx,bp           ;¢®ááâ ­®¢¨¬ §­ ç¥­¨¥ ॣ¨áâà  bx
  47.         ;pop    bx
  48.         mov     cx,si           ;á®åà ­¨¬ §­ ç¥­¨¥ ॣ¨áâà  cx ¢ ॣ¨áâà 㪠§ â¥«ì
  49.         ;pop    cx
  50.         int     0x40
  51.         add     ecx,op_size     ;¤®¡ ¢¨¬ à §¬¥à áâ®à®­ë
  52.         mov     esi,ecx         ;á®åà ­¨¬ §­ ç¥­¨¥ ॣ¨áâà  cx ¢ ॣ¨áâà 㪠§ â¥«ì si
  53.         ;push   cx
  54.         shl     ecx,16
  55.         mov     cx,si
  56.         ;pop    cx
  57.         int     0x40            ;­ à¨á®¢ «¨ ¯àאַ㣮«ì­¨ª
  58.  
  59.         mov     eax,13          ;§ ªà è¨¢ ¥¬ ¥£®. ”ã­ªæ¨ï 13 - ­ à¨á®¢ âì ¯®«®áã
  60.         movzx   ebx,word op_left        ;§ £à㧨âì ¢ bx, ¯®«®¦¥­¨¥ ¯® å
  61.         add     ebx,1           ;ᤢ¨­¥¬ ­  1 â.¥. ¯à¨¡ ¢¨¬ 1 ¨­ ç¥ § âà¥âáï à ¬ª 
  62.         shl     ebx,16          ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  63.         mov     bx,op_size      ;¯à¨¡ ¢¨¬ ¤«¨­ã áâ®à®­ë ¯àאַ㣮«ì­¨ª 
  64.         sub     ebx,1           ;¢ëç⥬ 1 â.ª. ¨­ ç¥ § âà¥âáï à ¬ª 
  65.         mov     bp,bx           ;á®åà ­¨¬ ॣ¨áâà bx ¢ ॣ¨áâॠ㪠§ â¥«ï ¡ §ë
  66.         ;push   bx
  67.         movzx   ecx,word op_top ;§ £à㧨¬ ª®®à¤¨­ âë ¯® y
  68.         add     ecx,1           ;ᤢ¨­¥¬ ­  1 â.¥. ¯à¨¡ ¢¨¬ 1 ¨­ ç¥ § âà¥âáï à ¬ª 
  69.         shl     ecx,16          ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  70.         mov     cx,bp           ;¢®ááâ ­®¢¨¬ §­ ç¥­¨¥ ॣ¨áâà  cx
  71.         ;pop    cx
  72.         mov     edx,dword [sc.work]     ;§ £à㧨¬ 梥⠯®«®áë
  73.         int     0x40            ;§ ªà á¨«¨
  74.  
  75.         mov     eax,dword op_optibox_gr
  76.         mov     dword eax,[eax]
  77.         cmp     eax,edi
  78.         jne     @f
  79.         call    .draw_op  ;­ à¨á®¢ âì ¢ª«î祭­ë© 祪 ¡®ªá
  80. ;----------------------------
  81. ;à áç¥â ªã¤  ¡ã¤¥â ¯à®¨§¢¥¤¥­ ¢ë¢®¤ ⥪áâ 
  82. ;----------------------------
  83. @@:     movzx   ebx,word op_left        ;§ £à㧨âì §­ ç¥­¨¥ å ¤«ï 祪 ¡®ªá 
  84.         add     ebx,(op_size+op_text_margin) ;¤®¡ ¢¨âì à §¬¥à áâ®à®­ë ¨ à ááâ®ï­¨¥ ­  ª®â®à®¬ ­ ç­¥âáï ¢ë¢®¤ ⥪áâ 
  85.         shl     ebx,16          ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  86.         mov     bx,op_top       ;§ £à㧨¬ §­ ç¥­¨¥ ¯® y
  87.         add     ebx,(op_size-9+2)       ;¤®¡ ¢¨¬ §­ ç¥­¨¥ ¤«¨­ë áâ®à®­ë -9+2
  88.         mov     ecx,op_text_color       ;§ £à㧨¬ 梥⠭ ¤¯¨á¨
  89.        
  90.         mov     edx,op_text_ptr         ;㪠¦¥¬  ¤à¥á ®â ªã¤  ­ã¦­® ¢ë¢®¤¨âì áâபã
  91.         movzx   esi,word op_text_length ;‡ £à㧨¬ ¤«¨­ã ­ ¤¯¨á¨ ¢ esi
  92.         ;¢­¥á¥¬ ¢ eax §­ ç¥­¨¥ ¢ë¢®¤  ­ ¤¯¨á¨ ­  ª ­¢ã
  93.         mov     eax,4
  94.         int     0x40            ;‚뢮¤
  95. popa                            ;¢®ááâ ­®¢¨âì §­ ç¥­¨ï ॣ¨áâ஢ ¨§ á⥪ 
  96. ret                             ;¢ë©¤¥¬ ¨§ ¯à®æ¥¤ãàë
  97.  
  98. .clear_op:                      ;®ç¨á⪠ 祪 ¡®ªá 
  99.         mov     edx,dword [sc.work]     ;梥⠢­ãâਠ祪 ¡®ªá 
  100.         jmp     @f              ;¡¥§ãá«®¢­ë© ¯à릮ª ­  ­¨¦­îî ¬¥âªã @@
  101.  
  102. .draw_op:            ;­ à¨á®¢ âì ¢ª«î祭­ë© 祪 ¡®ªá
  103.         mov     edx,op_border_color     ;§ £à㧨âì 梥â
  104. @@:
  105.         movzx   ebx,word op_left        ;§ £à㧨âì ª®®à¤¨­ âã ¯® å
  106.         add     ebx,(op_size/3) ;¤®¡ ¢¨âì (áâ®à®­  ¯àאַ㣮«ì­¨ª /3)
  107.         shl     ebx,16          ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  108.         mov     bx,(op_size/2)  ;§ £à㧨âì (áâ®à®­  ¯àאַ㣮«ì­¨ª /2)
  109.         mov     bp,bx           ;á®åà ­¨¬ ॣ¨áâà bx ¢ ॣ¨áâॠ㪠§ â¥«ï ¡ §ë
  110.         ;push   bx
  111.         movzx   ecx,word op_top ;§ £à㧨âì ª®®à¤¨­ âã ¯® ã
  112.         mov     eax,13          ;¢ eax - §­ ç¥­¨ï ä㭪樨 ¤«ï ¢ë¢®¤  ¯®«®áë â.¥. ¯® áã⨠¯àאַ㣮«ì­¨ª , ª®â®àë© ®â®¡à ¦ ¥â ¢ª«î祭­ë© ª®¬¯®­¥­â 祪 ¡®ªá
  113.         add     ecx,(op_size/3) ;¤®¡ ¢¨âì (áâ®à®­  ¯àאַ㣮«ì­¨ª /3)
  114.         shl     ecx,16          ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  115.         mov     cx,bp           ;§ £à㧨¬ §­ ç¥­¨ï ॣ¨áâà  ãª § â¥«ï ¡ §ë ¢ cx
  116.         ;pop    cx
  117.         int     0x40            ;¢ë¢®¤
  118. ret                             ;¢ë©â¨ ¨§ ¯à®æ¥¤ãàë
  119.  
  120. .mouse:                 ;®¡à ¡®âª  ¬ëè¨
  121. pusha
  122.         mov     eax,37          ;¡ã¤¥¬ çâ® â® ¤¥« âì ¥á«¨ ã ­ á çâ® - ­¨âì ­ ¦ â®
  123.         mov     ebx,2           ;¢­¥á⨠¢ ॣ¨áâà §­ ç¥­¨¥ 2
  124.         int     0x40            ;¯à®¢¥àª  ­¥ ­ ¦ « «¨ ¯®«ì§®¢ â¥«ì ª­®¯ªã ¬ë誨
  125.         test    eax,eax    ;¯à®¢¥àª  ¥á«¨ ã ­ á ¢ eax=0, â® ãáâ ­®¢¨¬ ä« £ ¨ ¢ë©¤¥¬
  126.         jnz     @f         ;¯¥à¥©â¨ ­  ­¨¦­îî ¬¥âªã @@
  127.         popa                    ;¥á«¨ ­¨ç¥£® ­¥ ¯à®¨§®è«®, â® ¢®ááâ ­®¢¨¬ §­ ç¥­¨ï ॣ¨áâ஢ ¨§ á⥪ 
  128.         ret                     ;¢ë室
  129. @@:
  130.         movzx   esi,word op_text_length ;§ £à㧨âì ª®«-¢® ᨬ¢®«®¢ ¢ ⥪á⮢®© áâப¥
  131.         ;“¬­®¦¥­¨¥ ­  6 ëáâ஥ 㬭®¦¥­¨¥ ¬®¦­® ¢®á¯®«ì§®¢ âìáï «î¡ë¬ ¬§ ¬¥â®¤®¢, ­® ­  áâ àëå à®æ¥áá®à å (386,486,P1)¡ëáâ॥ ¡ã¤¥â á ¨­áâàãªæ¨¥© Lea
  132.         ;lea    esi,[eax*2+eax]
  133.         ;shl    eax,1
  134.         imul    esi,6               ; ¨«¨ ¬®¦­® ¨ â ª 㬭®¦¨âì ­  6
  135.         xor     ebx,ebx
  136.         add     esi,op_text_margin   ;¤®¡ ¢¨âì 3 - à ááâ®ï­¨¥ ®â 祪 ¡®ªá  ¤® ­ ¤¯¨á¨
  137.        
  138.         mov     eax,37          ;¯®«ã稬 ª®®à¤¨­ âë ¬ë誨
  139.         inc     ebx             ;¤®¡ ¢¨âì 1
  140.         int     0x40                ;¯®«ãç¨âì ª®®à¤¨­ âë ªãàá®à  ®â­®á¨â¥«ì­® ®ª­ 
  141.  
  142.         movzx   ebx,word op_top           ;§ £à㧨âì ¢ bx §­ ç¥­¨¥ ª®®à¤¨­ âë ã
  143.         cmp     ax,bx               ;áà ¢­¨âì á á ª®®à¤¨­ â®© ªãàá®à 
  144.         jl      .mouse_end          ;SF <> OF ¥á«¨ ¬¥­ìè¥
  145.         add     ebx,op_size          ;¤®¡ ¢¨âì à §¬¥à
  146.         cmp     ax,bx               ;áà ¢­¨âì
  147.         jg      .mouse_end          ;ZF = 0 ¨ SF = OF ¥á«¨ ¡®«ìè¥
  148.        
  149.         shr     eax,16              ;à §¤¥«¨¬ ­  65536 ¨«¨ ¯à®á⮠ᤢ¨­¥¬ ¡¨âë ­  16 §­ ç¥­¨©
  150.         movzx   ebx,word op_left          ;¯à®¨§¢¥¤¥¬  ­ «®£¨ç­®¥ áà ¢­¥­¨¥
  151.         cmp     ax,bx                ;áà ¢­¨âì ॣ¨áâàë
  152.         jl      .mouse_end           ;¥á«¨ ¬¥­ìè¥
  153.         add     ebx,op_size          ;¤®¡ ¢¨âì ¤«¨­ã áâ®à®­ë ¯àאַ㣮«ì­¨ª 
  154.         add     ebx,esi              ;“ç¥áâì ¢ §­ ç¥­¨¨ ¯® å ¥é¥ ¨ ¤«¨­ã ­ ¤¯¨á¨ ª 祪¡®ªáã
  155.         cmp     ax,bx                ;áâà ¢­¨âì ॣ¨áâàë
  156.         jg      .mouse_end           ;¥á«¨ ¡®«ìè¥
  157.         mov     eax,dword op_optibox_gr
  158.         mov     [eax],edi
  159.  
  160. .mouse_end:
  161. popa                              ;¢®ááâ ­®¢¨âì ॣ¨áâàë ¨§ á⥪ 
  162. ret                               ;¢ë©â¨
  163. }
  164.  
  165. struc option_box left,top,border_color,text_color,text,text_length,point_gr,flags
  166. {       ;áâàãªâãà  ¯ à ¬¥â஢ ¤«ï 祪 ¡®ªá 
  167. .left: dw left  ;+0     ;¯®«®¦¥­¨¥ ¯® å
  168. .top: dw top    ;+2     ;¯®«®¦¥­¨¥ ¯® ã
  169. .border_color: dd border_color ;+8      梥â à ¬ª¨
  170. .text_color: dd text_color     ;+12     梥â ⥪áâ  ­ ¤¯¨á¨
  171. .text: dd text       ;+16                ¤à¥á ¢ ª®¤¥ ¯à®£à ¬¬ë £¤¥ à á¯®«®¦¥­ ⥪áâà
  172. .text_length: dw text_length ; +20      ¤«¨­  ⥪áâ 
  173. .option_group: dd point_gr      ;㪠§ â¥«ì ­  à §¬¥é¥­¨¥ edi - ¨¤¥­â¨ä¨ª â®à  optibox
  174. }
  175. op_struc_size=22                        ;®¡é ï áâàãªâãà  24 ¡ ©â
  176. op_flag_en=10b
  177. macro draw_option_boxes start,end       ;à¨á®¢ âì 祪 ¡®ªáë
  178. {
  179.         mov     edi,start                       ;“ª § â¥«ì ­  ­ ç «® ¤ ­­ëå 祪 ¡®ªá®¢ â.¥. ­  ­ ç «® ¤ ­­ëå ¯¥à¢®£® 祪¡®ªá 
  180.         mov     ecx,((end-start)/op_struc_size) ;Š®«¨ç¥á⢮ 祪 ¡®ªá®¢
  181. @@:
  182.         call    option_box.draw                  ;Žâ®¡à §¨âì 祪 ¡®ªá
  183.         add     edi,op_struc_size               ;“ª § â¥«ì ­  ¯®á«¥¤ãî騥 祪 ¡®ªáë  â.¥. +28
  184.         loop    @b      ;¯à룭ãâì ¥á«¨ ¢ ecx/cx §­ ç¥­¨¥ ­¥ 0 ­  ¢¥àå­îî @@
  185. }
  186. macro mouse_option_boxes start,end      ;ãáâ ­®¢ª  祪 ¡®ªá®¢, ¢ § ¢¨á¨¬®á⨠®â ᮡëâ¨ï
  187. {
  188.         mov     edi,start               ; “ª § â¥«ì ­  ­ ç «® ¤ ­­ëå 祪 ¡®ªá®¢ â.¥. ­  ­ ç «® ¤ ­­ëå ¯¥à¢®£® 祪¡®ªá 
  189.         mov     ecx,((end-start)/op_struc_size) ;Š®«¨ç¥á⢮ 祪 ¡®ªá®¢
  190. @@:
  191.         call    option_box.mouse                ;¯à®¢¥àª  ¬ë誨 ¨ ®¡à ¡®âª  ᮡë⨩
  192.         add     edi,op_struc_size       ;“ª § â¥«ì ­  ¯®á«¥¤ãî騥 祪 ¡®ªáë
  193.         loop    @b      ;¯à룭ãâì ¥á«¨ ¢ ecx/cx §­ ç¥­¨¥ ­¥ 0 ­  ¢¥àå­îî @@
  194.  
  195.         mov     edi,start               ; “ª § â¥«ì ­  ­ ç «® ¤ ­­ëå 祪 ¡®ªá®¢ â.¥. ­  ­ ç «® ¤ ­­ëå ¯¥à¢®£® 祪¡®ªá 
  196.         mov     ecx,((end-start)/op_struc_size) ;Š®«¨ç¥á⢮ 祪 ¡®ªá®¢
  197.  
  198. .home:
  199.         mov     eax,[edi+18]    ;op_optibox_gr
  200.         mov     dword eax,[eax]
  201.  
  202.         pusha
  203.  
  204.         cmp     eax,edi
  205.         jne     @f
  206.        
  207.         call    option_box.draw_op
  208.         jmp     .nxtm
  209. @@:     call    option_box.clear_op
  210.  
  211. .nxtm:  popa
  212.         add     edi,op_struc_size               ;“ª § â¥«ì ­  ¯®á«¥¤ãî騥 祪 ¡®ªáë  â.¥. +28
  213.         loop    .home
  214.  
  215. }