Subversion Repositories Kolibri OS

Rev

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

  1. ;Libray from Editbox
  2. ; SEE YOU File FAQ.txt and HISTORY. Good Like!
  3. ;;;;;;;;;;;;;;;;;;
  4.  
  5. format MS COFF
  6.  
  7. public EXPORTS
  8.  
  9. section '.flat' code readable align 16
  10. include 'macros.inc'
  11. include 'editbox.mac'    ;¬ ªà®á ª®â®àë© ¤®«¦¥­ ®¡«¥£ç¨âì ¦¨§­ì :) ᯥ樠«ì­® ¤«ï editbox
  12.  
  13. edit_box:
  14. ed_width        equ [edi]               ;è¨à¨­  ª®¬¯®­¥­â 
  15. ed_left         equ [edi+4]             ;¯®«®¦¥­¨¥ ¯® ®á¨ å
  16. ed_top          equ [edi+8]             ;¯®«®¦¥­¨¥ ¯® ®á¨ ã
  17. ed_color        equ [edi+12]            ;梥â ä®­  ª®¬¯®­¥­â 
  18. shift_color     equ [edi+16]            ;=0x6a9480 ¤«ï ¯à¨¬¥à  ¢®§ì¥¬ ¦¥«¥­ë© 梥⠡®ªá 
  19. ed_focus_border_color   equ [edi+20]    ;梥â à ¬ª¨ ª®¬¯®­¥­â 
  20. ed_blur_border_color    equ [edi+24]    ;梥⠭¥  ªâ¨¢­®£® ª®¬¯®­¥­â 
  21. ed_text_color   equ [edi+28]            ;梥â ⥪áâ 
  22. ed_max          equ [edi+32]                    ;ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ¬®¦­® ¬ ªá¨¬ «ì­® ¢¢¥áâ¨
  23. ed_text         equ [edi+36]                    ;㪠§ â¥«ì ­  ¡ãä¥à
  24. ed_flags        equ [edi+40]            ;ä« £¨
  25. ed_size equ [edi+44]                    ;ª®«-¢® ᨬ¢®«®¢
  26. ed_pos  equ [edi+48]                    ;¯®§¨æ¨ï ªãàá®à 
  27. ed_offset       equ [edi+52]            ;ᬥ饭¨¥
  28. cl_curs_x       equ [edi+56]            ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® å
  29. cl_curs_y       equ [edi+60]            ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® ã
  30. ed_shift_pos    equ [edi+64]            ;¯®«®¦¥­¨¥ ªãàá®à 
  31. ed_shift_pos_old equ [edi+68]           ;áâ à®¥ ¯®«®¦¥­¨¥ ªãàá®à 
  32. .draw:
  33.         pushad
  34. ;--- à¨á㥬 à ¬ªã ---
  35.         mov     edi,dword [esp+36]
  36.         call    .draw_border            ; ”ã­ªæ¨ï áâ ¡¨«ì­ 
  37. .draw_bg_cursor_text:
  38. ;--- ¨§¬¥­ï¥¬ ᬥ饭¨¥, ¥á«¨ ­ ¤® ---
  39.         call    .check_offset           ;¢ëç¨á«¥­¨¥ ¯®§¨æ¨¨ ªãàá®à  áâ ¡¨«ì­ 
  40. ;--- à¨á㥬 ¢­ãâ७­îî ®¡« áâì ---
  41.         call    .draw_bg                ;­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª à ¡®ç¥© ®¡« áâ¨
  42. ;---- à¨á㥬 ¢ë¤¥«¥­¨¥, ¯® shift ¥á«¨ ¥áâì
  43.         call    .draw_shift
  44. .draw_cursor_text:
  45. ;--- à¨á㥬 ªãàá®à ---
  46.         ;--- ¬®¦¥â ¥£® ­¥ ­ ¤® à¨á®¢ âì ----
  47.         test    word ed_flags,ed_focus
  48.         je     @f
  49.         call    .draw_cursor
  50. @@:
  51.         call    .draw_text
  52. ;        ret
  53. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  54. ;Ž¡é¨© ¢ë室 ¨§ editbox ¤«ï ¢á¥å ä㭪権 ¨ ¯®áâ ®¡à ¡®â稪®¢
  55. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  56. .editbox_exit:
  57.         popad
  58.         ret 4
  59.  
  60. ;==========================================================
  61. ;=== ®¡à ¡®âª  ª« ¢¨ âãàë =================================
  62. ;==========================================================
  63. edit_box_key:
  64. pushad
  65.         mov     edi,dword [esp+36]
  66.         test    word ed_flags,ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  67.         je      edit_box.editbox_exit
  68.         test    word ed_flags,ed_mouse_on
  69.         jne     edit_box.editbox_exit
  70.  
  71. ;à®¢¥àª  ­ ¦ â shift ?
  72.         call    edit_box_key.check_shift
  73. ;----------------------------------------------------------
  74. ;--- ¯à®¢¥à塞, çâ® ­ ¦ â® --------------------------------
  75. ;----------------------------------------------------------
  76. use_key_process  backspase,delete,left,right,home,end,insert
  77. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  78. ;‡ £«ã誠 ­  ®¡à ¡®âªã ª« ¢¨è ¢¢¥àå ¨ ¢­¨§ â.¥. ¯à¨ ®¡­ à㦥­¨¨ íâ¨å ª®¤®¢ ¯à®¨á室¨â ¢ë室 ¨§ ®¡à ¡®â稪 
  79. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  80. use_key_no_process   up,down,esc
  81. ;--- ­ ¦ â  ¤àã£ ï ª« ¢¨è  ---
  82. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  83. ;à®¢¥àª  ãáâ ­®¢«¥­ «¨ ä« £ ¯à¨ ª®â®à®¬ ­ã¦­® ¢ë¢®¤¨âì ⮫쪮 æ¨äàë ¢ ­ã¦­®¬ ¡®ªá¥ ¥á«¨ â ª®©­¥®¡å®¤¨¬®á⨠­¥â ­ã¦­® § ª®¬¥­â¨à®¢ âì ¬ ªà®á
  84. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  85. use_key_figures_only
  86. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  87. ;¯à®¢¥àª  ­  shift ¡ë« «¨ ­ ¦ â
  88. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  89. are_key_shift_press
  90. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  91. ; ¯à®¢¥à塞, ­ å®¤¨âáï «¨ ªãàá®à ¢ ª®­æ¥ + ¤ «ì­¥©è ï ®¡à ¡®âª 
  92. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  93. are_key_cur_end
  94. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  95. ;Ž¡à ¡®âª  ª« ¢¨è insert,delete.backspase,home,end,left,right
  96. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  97. use_work_key
  98.  
  99. ;==========================================================
  100. ;=== ®¡à ¡®âª  ¬ëè¨ =======================================
  101. ;==========================================================
  102. ;save for stdcall ebx,esi,edi,ebp
  103. edit_box_mouse:
  104. pushad
  105.         mov     edi,dword [esp+36]
  106. ;debug
  107. ;----------------------------------------------------------
  108. ;--- ¯®«ãç ¥¬ á®áâ®ï­¨¥ ª­®¯®ª ¬ëè¨ -----------------------
  109. ;----------------------------------------------------------
  110.         mcall   37,2
  111. ;----------------------------------------------------------
  112. ;--- ¯à®¢¥à塞 á®áâ®ï­¨¥ ----------------------------------
  113. ;----------------------------------------------------------
  114.         test    eax,1
  115.         jnz     edit_box_mouse.mouse_left_button
  116.         and     word ed_flags,ed_mouse_on_off
  117.         xor     ebx,ebx
  118.         mov     dword [mouse_flag],ebx
  119.         jmp     edit_box.editbox_exit
  120. .mouse_left_button:
  121. ;----------------------------------------------------------
  122. ;--- ¡«®ª¨à®¢ª  ®â 䮪ãá¨à®¢ª¨ ¢ ¤àã£¨å ¡®ªá å ¯à¨ ¯®¯ ¤ ­¨¨ ­  ­¨å ªãàá®à 
  123. ;----------------------------------------------------------
  124.         mov     eax,dword [mouse_flag]
  125.         test    eax,eax
  126.         jz      @f
  127.         cmp     eax,edi
  128.         je      @f
  129.         jmp     edit_box_mouse._blur
  130. ;----------------------------------------------------------
  131. ;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® 0 â.¥ ¢á¥© ®¡« á⨠íªà ­ 
  132. ;----------------------------------------------------------
  133. @@:     mcall   37,1
  134. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  135. ;”ã­ªæ¨ï ®¡à ¡®âª¨  ¬ë誨 ¯®«ã祭¨¥ ª®®à¤¨­ â ¨ ¯à®¢¥àª  ¨å + ¢ë¤¥«¥­¨ï
  136. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  137. use_work_mouse
  138. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  139. ;Ž¡é¨¥ ä㭪樨 ®¡à ¡®âª¨
  140. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  141. use_general_func
  142. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  143. ;”㭪樨 ¤«ï à ¡®âë á key
  144. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  145. use_key_func
  146. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  147. ;”㭪樨 ¤«ï à ¡®âë á mouse
  148. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  149. use_mouse_func
  150. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  151. ;Bit mask from editbox
  152. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  153. ed_figure_only= 1000000000000000b   ;®¤­¨ ᨬ¢®«ë
  154. ed_always_focus= 100000000000000b
  155. ed_focus=                     10b   ;䮪ãá ¯à¨«®¦¥­¨ï
  156. ed_shift_on=                1000b   ;¥á«¨ ­¥ ãáâ ­®¢«¥­ -§­ ç¨â ¢¯¥à¢ë¥ ­ ¦ â shift,¥á«¨ ¡ë« ãáâ ­®¢«¥­, §­ ç¨â ¬ë 㦥 çâ® - â® ¤¥« «¨ 㤥ন¢ ï shift
  157. ed_shift_on_off=1111111111110111b
  158. ed_shift=                    100b   ;¢ª«îç ¥âáï ¯à¨ ­ ¦ â¨¨ ­  shift â.¥. ¥á«¨ ­ ¦¨¬ î
  159. ed_shift_off=   1111111111111011b
  160. ed_shift_bac=              10000b   ;¡¨â ¤«ï ®ç¨á⪨ ¢ë¤¥«¥­®£® shift â.¥. ¯à¨ ãáâ ­®¢ª¥ £®¢®à¨â çâ® ¥áâì ¢ë¤¥«¥­¨¥
  161. ed_shift_bac_cl=1111111111101111b   ;®ç¨á⪠ ¯à¨ 㤠«¥­¨¨ ¢ë¤¥«¥­¨ï
  162. ed_shift_cl=    1111111111100011b
  163. ed_shift_mcl=   1111111111111011b
  164. ed_left_fl=               100000b
  165. ed_right_fl=    1111111111011111b
  166. ed_offset_fl=            1000000b
  167. ed_offset_cl=   1111111110111111b
  168. ed_insert=              10000000b
  169. ed_insert_cl=   1111111101111111b
  170. ed_mouse_on =          100000000b
  171. ed_mous_adn_b=         100011000b
  172. ed_mouse_on_off=1111111011111111b
  173. ed_height=14 ; ¢ëá®â 
  174.  
  175. ;----------------------------------------------------
  176. ;CheckBox
  177. ;----------------------------------------------------
  178. check_box_draw:
  179. ;ch_struc_size=24
  180. ch_left equ [edi]    ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® å
  181. ch_top equ [edi+2]   ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® ã
  182. ch_text_margin equ [edi+4]      ;=4 à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
  183. ch_size equ [edi+8]             ;12 à §¬¥à ª¢ ¤à â  祪 ¡®ªá 
  184. ch_color equ [edi+12]
  185. ch_border_color equ [edi+16] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦­® § ¤ âì á ¬®áâ®ï⥫쭮
  186. ch_text_color equ   [edi+20];[edi+4]  ;梥â ⥪áâ 
  187. ch_text_ptr equ [edi+24]    ;㪠§ â¥«ì ­  ­ ç «® ⥪á⮢®© áâப¨
  188. ch_text_length equ [edi+28]
  189. ch_flags equ [edi+32]       ;ä« £¨
  190.  
  191.        pusha   ;á®åà ­¨¬ ¢á¥ ॣ¨áâàë
  192.        mov     edi,dword [esp+36]
  193.        mov eax,13
  194.        movzx ebx,word ch_left
  195.        shl ebx,16
  196.        add ebx,ch_size
  197.        mov ecx,ch_top
  198.        shl ecx,16
  199.        add ecx,dword ch_size
  200.        mov edx,dword ch_border_color
  201.        mcall ;à¨á㥬 à ¬ªã
  202.  
  203.        mov edx,dword ch_color
  204.        add ebx,1 shl 16 - 2
  205.        add ecx,1 shl 16 - 2
  206.        mcall ;§ ªà è¨¢ ¥¬ ¢­ãâ७­®á⨠祪¡®ªá 
  207.  
  208.        test dword ch_flags,2  ;¤®áâ âì §­ ç¥­¨¥ ¡¨â  ¨§ ¯¥à¥¬¥­­®© ¨ ¯®¬¥áâ¨âì ¢  ä« £ CF
  209.        jz   @f                ;¢ ¥á«¨ CF=1, â® ¢ë¯®«­¨¬ á«¥¤ãîéãî ¯à®æ¥¤ãàã ¨­ ç¥ ¯¥à¥©â¨ ­  ­¨¦­îî @@
  210.        call check_box_draw_ch  ;­ à¨á®¢ âì ¢ª«î祭­ë© 祪 ¡®ªá
  211. @@:
  212. ;----------------------------
  213. ;à áç¥â ªã¤  ¡ã¤¥â ¯à®¨§¢¥¤¥­ ¢ë¢®¤ ⥪áâ 
  214. ;----------------------------
  215.         movzx ebx,word ch_left        ;§ £à㧨âì §­ ç¥­¨¥ å ¤«ï 祪 ¡®ªá 
  216.         add   ebx,dword ch_size
  217.         add   ebx,dword ch_text_margin;¤®¡ ¢¨âì à §¬¥à áâ®à®­ë ¨ à ááâ®ï­¨¥ ­  ª®â®à®¬ ­ ç­¥âáï ¢ë¢®¤ ⥪áâ 
  218.         shl   ebx,16                ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  219.         mov   bx,word ch_top        ;§ £à㧨¬ §­ ç¥­¨¥ ¯® y
  220.         add   ebx,ch_size
  221.         mov   ecx,dword ch_text_color        ;§ £à㧨¬ 梥⠭ ¤¯¨á¨ + flags
  222.         sub   ebx,7        ;¤®¡ ¢¨¬ §­ ç¥­¨¥ ¤«¨­ë áâ®à®­ë -9+2
  223.        
  224.         mov   edx,dword ch_text_ptr                ;㪠¦¥¬  ¤à¥á ®â ªã¤  ­ã¦­® ¢ë¢®¤¨âì áâபã
  225.         mov   esi,dword ch_text_length
  226.         ;¢­¥á¥¬ ¢ eax §­ ç¥­¨¥ ¢ë¢®¤  ­ ¤¯¨á¨ ­  ª ­¢ã
  227.         mov   eax,4
  228.         mcall                  ;‚뢮¤
  229. popa                              ;¢®ááâ ­®¢¨âì §­ ç¥­¨ï ॣ¨áâ஢ ¨§ á⥪ 
  230. ret 4                             ;¢ë©¤¥¬ ¨§ ¯à®æ¥¤ãàë
  231.  
  232. check_box_clear_ch:                        ;®ç¨á⪠ 祪 ¡®ªá 
  233.         mov   edx,dword ch_color   ;梥⠢­ãâਠ祪 ¡®ªá 
  234.         jmp   @f             ;¡¥§ãá«®¢­ë© ¯à릮ª ­  ­¨¦­îî ¬¥âªã @@
  235.  
  236. check_box_draw_ch:            ;­ à¨á®¢ âì ¢ª«î祭­ë© 祪 ¡®ªá
  237.         mov   edx,dword ch_border_color        ;§ £à㧨âì 梥â
  238. @@:
  239.         movzx ebx,word ch_left  ;§ £à㧨âì ª®®à¤¨­ âã ¯® å
  240.         mov   eax,dword ch_size
  241.         push  ax
  242.         shr   eax,2
  243.         add   ebx,eax          ;¤®¡ ¢¨âì (áâ®à®­  ¯àאַ㣮«ì­¨ª /3)
  244.         shl   ebx,16            ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  245.         pop   bx
  246.         shr   bx,1              ;§ £à㧨âì (áâ®à®­  ¯àאַ㣮«ì­¨ª /2)
  247.         mov   bp,bx             ;á®åà ­¨¬ ॣ¨áâà bx ¢ ॣ¨áâॠ㪠§ â¥«ï ¡ §ë
  248.  
  249.         movzx ecx,word ch_top ;§ £à㧨âì ª®®à¤¨­ âã ¯® ã
  250.         mov   eax,dword ch_size
  251.         shr   eax,2
  252.         add   ecx,eax         ;¤®¡ ¢¨âì (áâ®à®­  ¯àאַ㣮«ì­¨ª /4)
  253.         shl   ecx,16          ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  254.         mov   cx,bp           ;§ £à㧨¬ §­ ç¥­¨ï ॣ¨áâà  ãª § â¥«ï ¡ §ë ¢ cx
  255.         mov   eax,13          ;¢ eax - §­ ç¥­¨ï ä㭪樨 ¤«ï ¢ë¢®¤  ¯®«®áë â.¥. ¯® áã⨠¯àאַ㣮«ì­¨ª , ª®â®àë© ®â®¡à ¦ ¥â ¢ª«î祭­ë© ª®¬¯®­¥­â 祪 ¡®ªá
  256.         mcall            ;¢ë¢®¤
  257. ret                                ;¢ë©â¨ ¨§ ¯à®æ¥¤ãàë
  258. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  259. ;Ž¡à ¡®â稪 mouse
  260. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  261. check_box_mouse:      ;®¡à ¡®âª  ¬ëè¨
  262. pusha
  263.         mov     edi,dword [esp+36]
  264.         mov     eax,37           ;¡ã¤¥¬ çâ® â® ¤¥« âì ¥á«¨ ã ­ á çâ® - ­¨âì ­ ¦ â®
  265.         mov     ebx,2            ;¢­¥á⨠¢ ॣ¨áâà §­ ç¥­¨¥ 2
  266.         mcall             ;¯à®¢¥àª  ­¥ ­ ¦ « «¨ ¯®«ì§®¢ â¥«ì ª­®¯ªã ¬ë誨
  267.         test    eax,eax   ;¯à®¢¥àª  ¥á«¨ ã ­ á ¢ eax=0, â® ãáâ ­®¢¨¬ ä« £ ¨ ¢ë©¤¥¬
  268.         jnz     @f         ;¯¥à¥©â¨ ­  ­¨¦­îî ¬¥âªã @@
  269.         btr     dword ch_flags,2  ;¨§¢«¥ç¥­¨¥ §­ ç¥­¨ï § ¤ ­­®£® ¡¨â  ¢ ä« £ cf ¨ ¨§¬¥­¥­¨¥ ¥£® §­ ç¥­¨ï ­  ­ã«¥¢®¥.
  270.         jmp     check_box_mouse_end
  271.        
  272. @@:
  273.         bts  dword ch_flags,2   ;¯à®¢¥àª  ä« £  â.¥. ¯¥à¥­®á ¢ cf §­ ç¥­¨¥ ¡¨â  ¨ ãáâ ­®¢ª  ¡¨â  ¢ á®áâ®ï­¨¥ ¢ª«î祭®
  274.         jc   check_box_mouse_end         ;¥á«¨ CF=1 â® ¯¥à¥©â¨  ¢ ª®­¥æ â.¥. íâ® ¢ë室
  275.         mov  esi,dword ch_text_length ;§ £à㧨âì ª®«-¢® ᨬ¢®«®¢ ¢ ⥪á⮢®© áâப¥
  276.         ;“¬­®¦¥­¨¥ ­  6 ëáâ஥ 㬭®¦¥­¨¥ ¬®¦­® ¢®á¯®«ì§®¢ âìáï «î¡ë¬ ¬§ ¬¥â®¤®¢, ­® ­  áâ àëå à®æ¥áá®à å (386,486,P1)¡ëáâ॥ ¡ã¤¥â á ¨­áâàãªæ¨¥© Lea
  277.         ;lea esi,[eax*2+eax]
  278.         ;shl eax,1
  279.         imul esi,6             ; ¨«¨ ¬®¦­® ¨ â ª 㬭®¦¨âì ­  6
  280.         add  esi,dword ch_text_margin ;¤®¡ ¢¨âì 3 - à ááâ®ï­¨¥ ®â 祪 ¡®ªá  ¤® ­ ¤¯¨á¨
  281.  
  282.         mov  eax,37             ;¯®«ã稬 ª®®à¤¨­ âë ¬ë誨
  283.         mov  ebx,1              ;¤®¡ ¢¨âì 1
  284.         mcall               ;¯®«ãç¨âì ª®®à¤¨­ âë ªãàá®à  ®â­®á¨â¥«ì­® ®ª­ 
  285.        
  286.         movzx ebx,word ch_top  ;§ £à㧨âì ¢ bx §­ ç¥­¨¥ ª®®à¤¨­ âë ã
  287.         cmp   ax,bx              ;áà ¢­¨âì á á ª®®à¤¨­ â®© ªãàá®à 
  288.         jl   check_box_mouse_end          ;SF <> OF ¥á«¨ ¬¥­ìè¥
  289.         add   ebx,dword ch_size        ;¤®¡ ¢¨âì à §¬¥à
  290.         cmp   ax,bx              ;áà ¢­¨âì
  291.         jg   check_box_mouse_end          ;ZF = 0 ¨ SF = OF ¥á«¨ ¡®«ìè¥
  292.              
  293.         shr   eax,16              ;à §¤¥«¨¬ ­  65536 ¨«¨ ¯à®á⮠ᤢ¨­¥¬ ¡¨âë ­  16 §­ ç¥­¨©
  294.         movzx ebx,word ch_left  ;¯à®¨§¢¥¤¥¬  ­ «®£¨ç­®¥ áà ¢­¥­¨¥
  295.         cmp   ax,bx            ;áà ¢­¨âì ॣ¨áâàë
  296.         jl   check_box_mouse_end        ;¥á«¨ ¬¥­ìè¥
  297.         add   ebx,dword ch_size      ;¤®¡ ¢¨âì ¤«¨­ã áâ®à®­ë ¯àאַ㣮«ì­¨ª 
  298.         add   ebx,esi          ;“ç¥áâì ¢ §­ ç¥­¨¨ ¯® å ¥é¥ ¨ ¤«¨­ã ­ ¤¯¨á¨ ª 祪¡®ªáã
  299.         cmp   ax,bx            ;áâà ¢­¨âì ॣ¨áâàë
  300.         jg   check_box_mouse_end        ;¥á«¨ ¡®«ìè¥
  301.  
  302.         bts  dword ch_flags,1  ;¨§¢«¥ç¥­¨¥ §­ ç¥­¨ï § ¤ ­­®£® ¡¨â  ¢ ä« £ cf ¨ ¨§¬¥­¥­¨¥ ¥£® §­ ç¥­¨ï ­  1.
  303.         jc   @f                ;CF=1 â® ¯¥à¥©â¨ ­  ­¨¦­îî @@
  304.        
  305.         call check_box_draw_ch        ;®â®¡à §¨âì ¢ª«î祭­ë© 祪 ¡®ªá
  306. ;        mov   dword [esp+24],1 ;¤ «ì­¥©è ï ¯à®¢¥àª  祪 ¡®ªá®¢ ¡¥á¬ëá«¥­ , ¯® í⮬㠢 á⥪, £¤¥ à á¯®« £ ¥âáï ecx ¯®¬¥áâ¨â¬ 0
  307.         jmp  check_box_mouse_end       ;¢ë©â¨
  308. @@:
  309.         btr   word ch_flags,1  ;¨§¢«¥ç¥­¨¥ §­ ç¥­¨ï § ¤ ­­®£® ¡¨â  ¢ ä« £ cf ¨ ¨§¬¥­¥­¨¥ ¥£® §­ ç¥­¨ï ­  ­ã«¥¢®¥.
  310.         call check_box_clear_ch         ;¢ëª«îç¨âì 祪 ¡®ªá â.¥. ­  ¬¥á⥠§ ªà è¥­­®£® ¯àאַ㣮«ì­¨ª  ®â®¡à §¨âì 梥â ä®­ .
  311. check_box_mouse_end:
  312. popa                                ;¢®ááâ ­®¢¨âì ॣ¨áâàë ¨§ á⥪ 
  313. ret  4                              ;¢ë©â¨
  314.  
  315. ;--------------------------------------------------
  316. ;radiobutton Group
  317. ;--------------------------------------------------
  318. option_box_draw_box:
  319. option_group equ [edi]
  320. op_left equ [edi+4]    ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® å
  321. op_top equ [edi+6]     ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® ã
  322. op_text_margin equ [edi+8]      ;=4 à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
  323. op_size equ [edi+12]             ;12 à §¬¥à ª¢ ¤à â  祪 ¡®ªá 
  324. op_color equ [edi+16]
  325. op_border_color equ [edi+20] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦­® § ¤ âì á ¬®áâ®ï⥫쭮
  326. op_text_color equ   [edi+24];[edi+4]  ;梥â ⥪áâ 
  327. op_text_ptr equ [edi+28]    ;㪠§ â¥«ì ­  ­ ç «® ⥪á⮢®© áâப¨
  328. op_text_length equ [edi+32]
  329. op_flags equ [edi+36]       ;ä« £¨
  330.  
  331.         pusha   ;á®åà ­¨¬ ¢á¥ ॣ¨áâàë
  332.  
  333.         movzx ebx,word op_left
  334.         shl ebx,16
  335.         add ebx,dword op_size
  336.         movzx ecx,word op_top
  337.         shl ecx,16
  338.         add ecx,dword op_size
  339.         mov edx,dword op_border_color
  340.         mov eax,13
  341.         mcall ;à¨á㥬 à ¬ªã
  342.  
  343.         mov edx,dword op_color
  344.         add ebx,1 shl 16 - 2
  345.         add ecx,1 shl 16 - 2
  346.         mcall ;§ ªà è¨¢ ¥¬ ¢­ãâ७­®á⨠祪¡®ªá 
  347.  
  348. ;        mov     eax,dword option_group
  349. ;        mov     dword eax,[eax]
  350. ;        cmp     eax,edi
  351. ;        jne     @f
  352. ;        call    option_box_draw_op  ;­ à¨á®¢ âì ¢ª«î祭­ë© 祪 ¡®ªá
  353.  
  354.  
  355. ;----------------------------
  356. ;à áç¥â ªã¤  ¡ã¤¥â ¯à®¨§¢¥¤¥­ ¢ë¢®¤ ⥪áâ 
  357. ;----------------------------
  358. @@:     movzx ebx,word op_left        ;§ £à㧨âì §­ ç¥­¨¥ å ¤«ï 祪 ¡®ªá 
  359.         add   ebx,dword op_size
  360.         add   ebx,dword op_text_margin;¤®¡ ¢¨âì à §¬¥à áâ®à®­ë ¨ à ááâ®ï­¨¥ ­  ª®â®à®¬ ­ ç­¥âáï ¢ë¢®¤ ⥪áâ 
  361.         shl   ebx,16                ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  362.         mov   bx,word op_top        ;§ £à㧨¬ §­ ç¥­¨¥ ¯® y
  363.         add   ebx,op_size
  364.         mov   ecx,dword op_text_color        ;§ £à㧨¬ 梥⠭ ¤¯¨á¨ + flags
  365.         sub   ebx,7        ;¤®¡ ¢¨¬ §­ ç¥­¨¥ ¤«¨­ë áâ®à®­ë -9+2
  366.        
  367.         mov   edx,dword op_text_ptr                ;㪠¦¥¬  ¤à¥á ®â ªã¤  ­ã¦­® ¢ë¢®¤¨âì áâபã
  368.         mov   esi,dword op_text_length
  369.         ;¢­¥á¥¬ ¢ eax §­ ç¥­¨¥ ¢ë¢®¤  ­ ¤¯¨á¨ ­  ª ­¢ã
  370.         mov   eax,4
  371.         mcall                  ;‚뢮¤
  372. popa                           ;¢®ááâ ­®¢¨âì §­ ç¥­¨ï ॣ¨áâ஢ ¨§ á⥪ 
  373. ret                            ;¢ë©¤¥¬ ¨§ ¯à®æ¥¤ãàë
  374.  
  375. option_box_clear_op:                      ;®ç¨á⪠ 祪 ¡®ªá 
  376.         mov     edx,dword op_color    ;梥⠢­ãâਠ祪 ¡®ªá 
  377.         jmp     @f              ;¡¥§ãá«®¢­ë© ¯à릮ª ­  ­¨¦­îî ¬¥âªã @@
  378.  
  379.  
  380. option_box_draw_op:            ;­ à¨á®¢ âì ¢ª«î祭­ë© 祪 ¡®ªá
  381.         mov   edx,dword op_border_color        ;§ £à㧨âì 梥â
  382. @@:
  383.         movzx ebx,word op_left  ;§ £à㧨âì ª®®à¤¨­ âã ¯® å
  384.         mov   eax,dword op_size
  385.         push  ax
  386.         shr   eax,2
  387.         add   ebx,eax          ;¤®¡ ¢¨âì (áâ®à®­  ¯àאַ㣮«ì­¨ª /3)
  388.         shl   ebx,16            ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  389.         pop   bx
  390.         shr   bx,1              ;§ £à㧨âì (áâ®à®­  ¯àאַ㣮«ì­¨ª /2)
  391.         mov   bp,bx             ;á®åà ­¨¬ ॣ¨áâà bx ¢ ॣ¨áâॠ㪠§ â¥«ï ¡ §ë
  392.  
  393.         movzx ecx,word op_top ;§ £à㧨âì ª®®à¤¨­ âã ¯® ã
  394.         mov   eax,dword op_size
  395.         shr   eax,2
  396.         add   ecx,eax         ;¤®¡ ¢¨âì (áâ®à®­  ¯àאַ㣮«ì­¨ª /4)
  397.         shl   ecx,16          ;ᤢ¨­¥¬ ­  16 à §à冷¢ ¢ «¥¢® (㬭®¦¨¬ ­  65536)
  398.         mov   cx,bp           ;§ £à㧨¬ §­ ç¥­¨ï ॣ¨áâà  ãª § â¥«ï ¡ §ë ¢ cx
  399.         mov   eax,13          ;¢ eax - §­ ç¥­¨ï ä㭪樨 ¤«ï ¢ë¢®¤  ¯®«®áë â.¥. ¯® áã⨠¯àאַ㣮«ì­¨ª , ª®â®àë© ®â®¡à ¦ ¥â ¢ª«î祭­ë© ª®¬¯®­¥­â 祪 ¡®ªá
  400.         mcall            ;¢ë¢®¤
  401. ret                                ;¢ë©â¨ ¨§ ¯à®æ¥¤ãàë
  402. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  403. ;Ž¡à ¡®â稪 mouse
  404. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  405. option_box_mouse_op:                 ;®¡à ¡®âª  ¬ëè¨
  406. pusha
  407.         mov     eax,37          ;¡ã¤¥¬ çâ® â® ¤¥« âì ¥á«¨ ã ­ á çâ® - ­¨âì ­ ¦ â®
  408.         mov     ebx,2           ;¢­¥á⨠¢ ॣ¨áâà §­ ç¥­¨¥ 2
  409.         mcall           ;¯à®¢¥àª  ­¥ ­ ¦ « «¨ ¯®«ì§®¢ â¥«ì ª­®¯ªã ¬ë誨
  410.         test    eax,eax    ;¯à®¢¥àª  ¥á«¨ ã ­ á ¢ eax=0, â® ãáâ ­®¢¨¬ ä« £ ¨ ¢ë©¤¥¬
  411.         jnz     @f         ;¯¥à¥©â¨ ­  ­¨¦­îî ¬¥âªã @@
  412.  
  413.         jmp     option_box_mouse_end
  414.                            ;¥á«¨ ­¨ç¥£® ­¥ ¯à®¨§®è«®, â® ¢®ááâ ­®¢¨¬ §­ ç¥­¨ï ॣ¨áâ஢ ¨§ á⥪ 
  415.                            ;¢ë室
  416. @@:
  417.         mov     esi,dword op_text_length ;§ £à㧨âì ª®«-¢® ᨬ¢®«®¢ ¢ ⥪á⮢®© áâப¥
  418.         ;“¬­®¦¥­¨¥ ­  6 ëáâ஥ 㬭®¦¥­¨¥ ¬®¦­® ¢®á¯®«ì§®¢ âìáï «î¡ë¬ ¬§ ¬¥â®¤®¢, ­® ­  áâ àëå à®æ¥áá®à å (386,486,P1)¡ëáâ॥ ¡ã¤¥â á ¨­áâàãªæ¨¥© Lea
  419.         ;lea    esi,[eax*2+eax]
  420.         ;shl    eax,1
  421.         imul    esi,6               ; ¨«¨ ¬®¦­® ¨ â ª 㬭®¦¨âì ­  6
  422.         xor     ebx,ebx
  423.         add     esi,dword op_text_margin   ;¤®¡ ¢¨âì 3 - à ááâ®ï­¨¥ ®â 祪 ¡®ªá  ¤® ­ ¤¯¨á¨
  424.        
  425.         mov     eax,37          ;¯®«ã稬 ª®®à¤¨­ âë ¬ë誨
  426.         inc     ebx             ;¤®¡ ¢¨âì 1
  427.         mcall                ;¯®«ãç¨âì ª®®à¤¨­ âë ªãàá®à  ®â­®á¨â¥«ì­® ®ª­ 
  428.  
  429.         movzx   ebx,word op_top           ;§ £à㧨âì ¢ bx §­ ç¥­¨¥ ª®®à¤¨­ âë ã
  430.         cmp     ax,bx               ;áà ¢­¨âì á á ª®®à¤¨­ â®© ªãàá®à 
  431.         jl      option_box_mouse_end          ;SF <> OF ¥á«¨ ¬¥­ìè¥
  432.         add     ebx,dword op_size          ;¤®¡ ¢¨âì à §¬¥à
  433.         cmp     ax,bx               ;áà ¢­¨âì
  434.         jg      option_box_mouse_end          ;ZF = 0 ¨ SF = OF ¥á«¨ ¡®«ìè¥
  435.        
  436.         shr     eax,16              ;à §¤¥«¨¬ ­  65536 ¨«¨ ¯à®á⮠ᤢ¨­¥¬ ¡¨âë ­  16 §­ ç¥­¨©
  437.         movzx   ebx,word op_left          ;¯à®¨§¢¥¤¥¬  ­ «®£¨ç­®¥ áà ¢­¥­¨¥
  438.         cmp     ax,bx                ;áà ¢­¨âì ॣ¨áâàë
  439.         jl      option_box_mouse_end           ;¥á«¨ ¬¥­ìè¥
  440.         add     ebx,dword op_size          ;¤®¡ ¢¨âì ¤«¨­ã áâ®à®­ë ¯àאַ㣮«ì­¨ª 
  441.         add     ebx,esi              ;“ç¥áâì ¢ §­ ç¥­¨¨ ¯® å ¥é¥ ¨ ¤«¨­ã ­ ¤¯¨á¨ ª 祪¡®ªáã
  442.         cmp     ax,bx                ;áâà ¢­¨âì ॣ¨áâàë
  443.         jg      option_box_mouse_end           ;¥á«¨ ¡®«ìè¥
  444.         mov     eax,dword option_group
  445.         mov     [eax],edi
  446.  
  447. option_box_mouse_end:
  448. popa                              ;¢®ááâ ­®¢¨âì ॣ¨áâàë ¨§ á⥪ 
  449. ret                               ;¢ë©â¨
  450.  
  451. option_box_draw:
  452.         pusha
  453.  
  454.         mov     eax,dword [esp+36]
  455. @@:     mov     edi,dword [eax]
  456.         test    edi,edi
  457.         je      option_check
  458.         call    option_box_draw_box
  459.         add     eax,4
  460.         jmp    @b
  461.  
  462. option_check:
  463.         mov     eax,dword [esp+36]
  464. @@:     mov     edi,dword [eax]
  465.         test    edi,edi
  466.         je      @f
  467.        
  468.         mov     ebx,dword [edi]
  469.         mov     ebx,dword [ebx]
  470.         cmp     edi,ebx
  471.         jne     .clear_op
  472.        
  473.         pusha
  474.         call    option_box_draw_op
  475.         popa
  476.         add     eax,4
  477.         jmp     @b
  478.  
  479. .clear_op:
  480.         pusha
  481.         call    option_box_clear_op
  482.         popa
  483.         add     eax,4
  484.         jmp     @b
  485.  
  486.  
  487. @@:     popa
  488.         ret 4
  489.         ; exit ¢®®¡é¥ :)
  490.  
  491.  
  492. option_box_mouse:
  493.         pusha
  494.  
  495.         mov     eax,dword [esp+36]
  496. @@:     mov     edi,dword [eax]
  497.         test    edi,edi
  498.         je      option_check
  499.         call    option_box_mouse_op
  500.         add     eax,4
  501.         jmp    @b
  502.  
  503.  
  504. align 16
  505. EXPORTS:
  506.  
  507.         dd      sz_edit_box,            edit_box
  508.         dd      sz_edit_box_key,        edit_box_key
  509.         dd      sz_edit_box_mouse,      edit_box_mouse
  510.         dd      szVersion_ed,           0x00000001
  511.         dd      sz_check_box_draw,      check_box_draw
  512.         dd      sz_check_box_mouse,     check_box_mouse
  513.         dd      szVersion_ch,           0x00000001
  514.         dd      sz_option_box_draw,     option_box_draw
  515.         dd      sz_option_box_mouse,    option_box_mouse
  516.         dd      szVersion_op,           0x00000001
  517.         dd      0,0
  518.  
  519. sz_edit_box            db 'edit_box',0
  520. sz_edit_box_key        db 'edit_box_key',0
  521. sz_edit_box_mouse      db 'edit_box_mouse',0
  522. szVersion_ed           db 'version_ed',0
  523. sz_check_box_draw      db 'check_box_draw',0
  524. sz_check_box_mouse     db 'check_box_mouse',0
  525. szVersion_ch           db 'version_ch',0
  526. sz_option_box_draw     db 'option_box_draw',0
  527. sz_option_box_mouse    db 'option_box_mouse',0
  528. szVersion_op           db 'version_op',0
  529.  
  530. ;;;;;;;;;;;
  531. ;;Data
  532. ;;;;;;;;;;;
  533. align 16
  534. mouse_flag dd 0x0
  535.