Subversion Repositories Kolibri OS

Rev

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