Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;Basic macros for use editbox                             ;
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  4.  
  5. macro init_editbox
  6. {
  7. pushad
  8.         mcall
  9.  
  10. popad
  11. }
  12.  
  13.  
  14. macro use_editbox_draw
  15. {
  16. edit_box:
  17. .draw:
  18.         pushad
  19. ;--- à¨á㥬 à ¬ªã ---
  20.         mov     edi,dword [esp+36]
  21.         call    .draw_border            ; ”ã­ªæ¨ï áâ ¡¨«ì­ 
  22. .draw_bg_cursor_text:
  23. ;--- ¨§¬¥­ï¥¬ ᬥ饭¨¥, ¥á«¨ ­ ¤® ---
  24.         call    .check_offset           ;¢ëç¨á«¥­¨¥ ¯®§¨æ¨¨ ªãàá®à  áâ ¡¨«ì­ 
  25. ;--- à¨á㥬 ¢­ãâ७­îî ®¡« áâì ---
  26.         call    .draw_bg                ;­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª à ¡®ç¥© ®¡« áâ¨
  27. ;---- à¨á㥬 ¢ë¤¥«¥­¨¥, ¯® shift ¥á«¨ ¥áâì
  28.         call    .draw_shift
  29. .draw_cursor_text:
  30. ;--- à¨á㥬 ªãàá®à ---
  31.         ;--- ¬®¦¥â ¥£® ­¥ ­ ¤® à¨á®¢ âì ----
  32.         test    word ed_flags,ed_focus
  33.         jz      @f
  34.         call    .draw_cursor
  35. @@:
  36.         call    .draw_text
  37. ;        ret
  38. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  39. ;Ž¡é¨© ¢ë室 ¨§ editbox ¤«ï ¢á¥å ä㭪権 ¨ ¯®áâ ®¡à ¡®â稪®¢;;
  40. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  41. .editbox_exit:
  42.         popad
  43.         ret 4
  44. }
  45.  
  46.  
  47. macro use_editbox_key
  48. {
  49. ;==========================================================
  50. ;=== ®¡à ¡®âª  ª« ¢¨ âãàë =================================
  51. ;==========================================================
  52. edit_box_key:
  53. pushad
  54.         mov     edi,dword [esp+36]
  55.         test    word ed_flags,ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  56.         je      edit_box.editbox_exit
  57.         test    word ed_flags,ed_mouse_on
  58.         jne     edit_box.editbox_exit
  59.  
  60. ;à®¢¥àª  ­ ¦ â shift ?
  61.         call    edit_box_key.check_shift
  62. ;----------------------------------------------------------
  63. ;--- ¯à®¢¥à塞, çâ® ­ ¦ â® --------------------------------
  64. ;----------------------------------------------------------
  65. use_key_process  backspace,delete,left,right,home,end,insert
  66. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  67. ;‡ £«ã誠 ­  ®¡à ¡®âªã ª« ¢¨è ¢¢¥àå ¨ ¢­¨§ â.¥. ¯à¨ ®¡­ à㦥­¨¨ íâ¨å ª®¤®¢ ¯à®¨á室¨â ¢ë室 ¨§ ®¡à ¡®â稪 
  68. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  69. use_key_no_process   up,down,esc,enter,tab,numl,capsl,scrolll
  70. ;--- ­ ¦ â  ¤àã£ ï ª« ¢¨è  ---
  71. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  72. ;à®¢¥àª  ãáâ ­®¢«¥­ «¨ ä« £ ¯à¨ ª®â®à®¬ ­ã¦­® ¢ë¢®¤¨âì ⮫쪮 æ¨äàë ¢ ­ã¦­®¬ ¡®ªá¥, ¥á«¨ â ª®© ­¥®¡å®¤¨¬®á⨠­¥â, ­ã¦­® § ª®¬¥­â¨à®¢ âì ¬ ªà®á
  73. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  74. use_key_figures_only
  75. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  76. ;¯à®¢¥àª  ­  shift, ¡ë« «¨ ­ ¦ â
  77. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  78. are_key_shift_press
  79. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  80. ; ¯à®¢¥à塞, ­ å®¤¨âáï «¨ ªãàá®à ¢ ª®­æ¥ + ¤ «ì­¥©è ï ®¡à ¡®âª 
  81. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  82. are_key_cur_end
  83. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  84. ;Ž¡à ¡®âª  ª« ¢¨è insert,delete.backspace,home,end,left,right
  85. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  86. use_work_key
  87. }
  88.  
  89. macro use_editbox_mouse
  90. {
  91. ;==========================================================
  92. ;=== ®¡à ¡®âª  ¬ëè¨ =======================================
  93. ;==========================================================
  94. ;save for stdcall ebx,esi,edi,ebp
  95. edit_box_mouse:
  96. pushad
  97.         mov     edi,dword [esp+36]
  98. ;debug
  99. ;----------------------------------------------------------
  100. ;--- ¯®«ãç ¥¬ á®áâ®ï­¨¥ ª­®¯®ª ¬ëè¨ -----------------------
  101. ;----------------------------------------------------------
  102.         mcall   37,2
  103. ;----------------------------------------------------------
  104. ;--- ¯à®¢¥à塞 á®áâ®ï­¨¥ ----------------------------------
  105. ;----------------------------------------------------------
  106.         test    eax,1
  107.         jnz     edit_box_mouse.mouse_left_button
  108.         and     word ed_flags,ed_mouse_on_off
  109.         mov     ebx,dword ed_mouse_variable
  110.         push    0
  111.         pop     dword [ebx]
  112. ;        mov     dword [ebx],ebx
  113.         jmp     edit_box.editbox_exit
  114. .mouse_left_button:
  115. ;----------------------------------------------------------
  116. ;--- ¡«®ª¨à®¢ª  ®â 䮪ãá¨à®¢ª¨ ¢ ¤àã£¨å ¡®ªá å ¯à¨ ¯®¯ ¤ ­¨¨ ­  ­¨å ªãàá®à 
  117. ;----------------------------------------------------------
  118.         mov     eax,dword ed_mouse_variable
  119.         push    dword [eax]
  120.         pop     eax
  121.         test    eax,eax
  122.         jz      @f
  123.         cmp     eax,edi
  124.         je      @f
  125.         jmp     edit_box_mouse._blur
  126. ;----------------------------------------------------------
  127. ;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® 0 â.¥ ¢á¥© ®¡« á⨠íªà ­ 
  128. ;----------------------------------------------------------
  129. @@:     mcall   37,1
  130. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  131. ;”ã­ªæ¨ï ®¡à ¡®âª¨  ¬ë誨 ¯®«ã祭¨¥ ª®®à¤¨­ â ¨ ¯à®¢¥àª  ¨å + ¢ë¤¥«¥­¨ï
  132. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  133. use_work_mouse
  134. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  135. ;Ž¡é¨¥ ä㭪樨 ®¡à ¡®âª¨
  136. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  137. use_general_func
  138. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  139. ;”㭪樨 ¤«ï à ¡®âë á key
  140. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  141. use_key_func
  142. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  143. ;”㭪樨 ¤«ï à ¡®âë á mouse
  144. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  145. use_mouse_func
  146. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  147. ;Bit mask from editbox
  148. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  149. }
  150.  
  151.  
  152. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  153. ;­¨¦¥ à á¯®«®¦¥­ë ä㭪樨 ª®â®à묨 ॠ«¨§ã¥âáï ¢¥áì  «£®à¨â¬
  154. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  155. ;Œ ªà®á ¤«ï ¢ë¢®¤  ®á­®¢­ëå ä㭪権 ª®â®àë¥ ¨á¯®«ì§ãîâáï ¡®ªá®¬
  156. macro use_general_func
  157. {
  158. ;debug_func
  159. ;----------------------------------------------------------
  160. ;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ¢ë¤¥«¥­­®© ç á⨠-----------------
  161. ;----------------------------------------------------------
  162. edit_box.draw_shift:
  163.         test    word ed_flags,ed_shift_bac ;ãáâ ­®¢ª  ä« £ , ¢ë¤¥«¥­­®© ®¡« áâ¨
  164.         jz      @f
  165.         mov     ebp,shift_color
  166.         mov     ebx,dword       ed_shift_pos
  167.         call    edit_box_key.sh_cl_
  168. @@:     ret
  169. ;----------------------------------------------------------
  170. ;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ⥪áâ  --------------------------
  171. ;----------------------------------------------------------
  172. edit_box.draw_text:
  173. ;--- ¢ëç¨á«ï¥¬, ᪮«ìª® ¯®¬¥é ¥âáï ᨬ¢®«®¢ ---
  174. ;--- çâ®¡ë ¬ãá®à ­¥ à¨á®¢ âì ---
  175.         call    edit_box.get_n
  176.         mov     esi,ed_size
  177.         mov     ebx,ed_offset
  178.         sub     esi,ebx
  179.         cmp     eax,esi
  180.         jae     @F
  181.         mov     esi,eax         ;çâ®¡ë ­¥ ¢ë室¨âì §  ¯à¥¤¥«ë íªà ­ 
  182. ;--- à¨á㥬 ⥪áâ ---
  183. @@:     mov     eax,4
  184.         mov     ebx,ed_left
  185.         mov     edx,ed_offset
  186.         add     ebx,2
  187.         shl     ebx,16
  188.         add     ebx,ed_top
  189.         mov     ecx,ed_text_color
  190.         add     ebx,4
  191.         add     edx,ed_text
  192.         mcall
  193. ret
  194. ;----------------------------------------------------------
  195. ;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ä®­  ----------------------------
  196. ;¢å®¤­ë¥ ¤ ­­ë¥
  197. ;eax
  198. ;edx - color
  199. ;----------------------------------------------------------
  200.  
  201. edit_box.draw_bg:
  202.         mov     ebx,ed_left
  203.         add     ebx,1
  204.         mov     edx,ed_color
  205.         shl     ebx,16
  206.         add     ebx,ed_width
  207.         sub     ebx,1
  208. ;¢å®¤ ⮫쪮 梥â edx
  209. edit_box.draw_bg_eax:
  210.         mov     ecx,ed_top
  211.         mov     eax,13
  212.         add     ecx,1
  213.         shl     ecx,16
  214.         add     ecx,ed_height
  215.         dec     ecx
  216.         mcall
  217. ret
  218. ;----------------------------------------------------------
  219. ;--- ¯à®æ¥¤ãà  ¯®«ã祭¨ï ª®«¨ç¥á⢠ ᨬ¢®«®¢ ¢ ⥪ã饩 è¨à¨­¥ ª®¬¯®­¥­â 
  220. ;----------------------------------------------------------
  221. edit_box.get_n:
  222.         mov     eax,ed_width    ;¯®«ã祬 è¨à¨­ã ª®¬¯®­¥­â 
  223.         xor     edx,edx   ;१ã«ìâ â à á¯®« £ ¥âáï ¢ ¯ à¥ edx:eax ¢ eax - ®áâ â®ª
  224.         sub     eax,4           ;¢ëç⥬ 4
  225.         mov     ebx,6           ;§ £à㧨¬ ¤¥«¨â¥«ì
  226.         div     ebx             ;à §¤¥«¨¬ ­  6
  227. ret
  228. ;----------------------------------------------------------
  229. ;--- ¯à®æ¥¤ãà  à¨á®¢ ­¨ï ªãàá®à  --------------------------
  230. ;----------------------------------------------------------
  231. ;¢å®¤­ë¥ ebp- 梥â
  232. edit_box.clear_cursor:
  233.         mov     edx,ebp
  234.         mov     ebx,cl_curs_x
  235.         mov     ecx,cl_curs_y
  236.         jmp     edit_box.draw_curs
  237. edit_box.draw_cursor:
  238.         mov     edx,ed_text_color
  239.         mov     ebx,ed_pos
  240.         mov     ecx,ed_offset
  241.         sub     ebx,ecx
  242.  
  243.         lea     ebx,[ebx*2+ebx]
  244.         shl     ebx,1
  245.         ;imul   ebx,6
  246.         add     ebx,ed_left
  247.         mov     ecx,ed_top
  248.         inc     ebx
  249.         add     ecx,2
  250.         mov     ebp,ebx
  251.         shl     ebx,16
  252.         mov     bx,bp
  253.         mov     ebp,ecx
  254.  
  255.         shl     ecx,16
  256.         mov     cx,bp
  257.         add     ecx,ed_height-4
  258.  
  259.         mov     cl_curs_x,ebx
  260.         mov     cl_curs_y,ecx
  261. edit_box.draw_curs:
  262.         mcall   38
  263. ret
  264. ;----------------------------------------------------------
  265. ;--- ¯à®æ¥¤ãà  à¨á®¢ ­¨ï à ¬ª¨ ----------------------------
  266. ;----------------------------------------------------------
  267. edit_box.draw_border:
  268. ;--- 梥â à ¬ª¨ ---
  269.         test    word ed_flags,ed_focus
  270.         mov     edx,ed_focus_border_color
  271.         jne     @f
  272.         mov     edx,ed_blur_border_color
  273. @@:
  274. ;--- ᢥàåã ---
  275.         mov     eax,38
  276.         mov     ebx,ed_left
  277.         mov     ecx,ebx
  278.         shl     ebx,16
  279.         mov     bx,cx
  280.         add     ebx,ed_width
  281.         mov     ecx,ed_top
  282.         mov     esi,ecx
  283.         shl     ecx,16
  284.         mov     cx,si
  285.         mcall
  286. ;--- á­¨§ã ---
  287.         mov     esi,ecx
  288.         add     ecx,ed_height
  289.         mov     ebp,ecx
  290.         shl     ecx,16
  291.         mov     cx,bp
  292.         mcall
  293. ;--- á«¥¢  ---
  294.         mov     cx,si
  295.         mov     ebp,ebx
  296.         sub     ebx,ed_width
  297.         mcall
  298. ;--- á¯à ¢  ---
  299.         mov     ebx,ebp
  300.         shl     ebx,16
  301.         mov     bx,bp
  302.         mcall
  303. ret
  304. ;----------------------------------------------------------
  305. ;--- ¯à®¢¥àª , § è¥« «¨ ªãàá®à §  £à ­¨æë ¨, ¥á«¨ ­ ¤®, ---
  306. ;--- ¨§¬¥­ï¥¬ ᬥ饭¨¥ ------------------------------------
  307. ;--- ¥á«¨ ᬥ饭¨¥ ¡ë«®, ãáâ ­®¢ª  ä« £  ed_offset_cl, ¨­ ç¥,
  308. ; ¥á«¨ ­¨ç¥£® ­¥ ¨§¬¥­¨«®áì, â® ¢ëáâ ¢«¥­¨¥ ed_offset_fl
  309. ; ¢ ®¡é¥© ¡¨â®¢®© ¬ âà¨æ¥ á®áâ®ï­¨ï ª®¬¯®­¥­â®¢ word ed_flags
  310. ;----------------------------------------------------------
  311. edit_box.check_offset:
  312. pushad
  313.         mov     ecx,ed_pos
  314.         mov     ebx,ed_offset
  315.         cmp     ebx,ecx
  316.         ja      edit_box.sub_8
  317.  
  318.         push    ebx
  319.         call    edit_box.get_n  ;¯®«ã稬 ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ã¬¥é îâáï ¢ è¨à¨­¥ ª®¬¯®­¥­â , ¢ ¯ à¥ ॣ¨áâ஢ edx:eax
  320.         pop     ebx
  321.         mov     edx,ebx
  322.         add     edx,eax         ;ed_offset+width editbox
  323.         inc     edx             ;­¥®¡å®¤¨¬® ¤«ï ­®à¬ «ì­®£® ¯®«®¦¥­¨ï ªãàá®à  ¢ ªà ©­¥© «¥¢®© ¯®§¨æ¨¨
  324.         cmp     edx,ecx
  325.         ja      @f
  326.  
  327.         mov     edx,ed_size
  328.         cmp     edx,ecx
  329.         je      edit_box.add_end
  330.  
  331.         sub     edx,ecx
  332.         cmp     edx,8
  333.         jbe     edit_box.add_8
  334.         add     ebx,8
  335.         jmp     edit_box.chk_d
  336.  
  337. edit_box.sub_8:
  338.         test    ecx,ecx
  339.         jz      edit_box.sub_min
  340.         cmp     ebx,8
  341.         jbe     edit_box.sub_min
  342.         sub     ebx,8   ;ebx=ed_offset
  343.         jmp     edit_box.chk_d
  344. edit_box.sub_min:
  345.         xor     ebx,ebx
  346.         jmp     edit_box.chk_d
  347.  
  348. edit_box.add_end:sub    edx,eax
  349.         mov     ebx,edx
  350.         jmp     edit_box.chk_d
  351. edit_box.add_8: add     ebx,edx
  352. edit_box.chk_d: mov     ed_offset,ebx
  353.         call    edit_box.draw_bg
  354.         and     word ed_flags,ed_offset_cl
  355. edit_ex
  356. @@:
  357.         or      word ed_flags,ed_offset_fl
  358.  
  359. edit_ex
  360.  
  361. align 4
  362. proc edit_box_set_text, edit:dword, text:dword
  363. pushad
  364.         mov edi,dword[edit]
  365.         mov ecx,ed_max
  366.         inc ecx ;ãç¨â뢠¥¬ ¡ã¤ã饥 ®¡à¥§ ­¨¥ áâப¨ ¤«ï ascii 0
  367.         mov edi,dword[text]
  368.         xor al,al
  369.         cld
  370.         repne scasb ;¯®¨áª ¢ áâப¥ edi ᨬ¢®«  al
  371.         mov ecx,edi ;ecx = text + ¬¨­. §­ ç¥­¨¥ ¨§: 1) ed_max ¨«¨ 2) ¤«¨­ë áâப¨ text
  372.  
  373.         mov edi,dword[edit]
  374.         mov esi,dword[text]
  375.         sub ecx,esi ;ecx = ¤«¨­  áâப¨ text (­® ­¥ ¡®«ìè¥ ç¥¬ ed_max)
  376.         dec ecx
  377.         mov ed_size,ecx ;áâ ¢¨¬ ­®¢ë© à §¬¥à áâப¨
  378.         mov ed_pos,ecx ;áâ ¢¨¬ ªãàá®à ¢ ª®­¥æ ­®¢®© áâப¨
  379.         mov edi,ed_text
  380.         repne movsb ;ª®¯¨à®¢ ­¨¥ ⥪á⮢®© áâப¨ text ¢ edit_box
  381.         mov byte[edi],0 ;áâ ¢¨¬ ascii 0 ¢ ª®­æ¥ áâப¨
  382. popad
  383. ret
  384. endp
  385. }
  386.  
  387. macro use_key_func
  388. {
  389. ;Ž¡à ¡®âª  Shift ¤«ï á­ïâ¨ï ¢ë¤¥«¥­¨ï ­¥¨§¢¥áâ­®© ®¡« áâ¨
  390. edit_box_key.shift: ;;;;;;;SHIFT
  391.         test    word ed_flags,ed_shift
  392.         je      edit_box_key.f_exit
  393.  
  394. @@:     mov     ebp,shift_color
  395.         or      word ed_flags,ed_shift_bac ;ãáâ ­®¢ª  ä« £ , ¢ë¤¥«¥­­®© ®¡« áâ¨
  396.         mov     ebx,dword       ed_shift_pos
  397.         call    edit_box_key.sh_cl_
  398.         jmp     edit_box.draw_cursor_text
  399. ;;;;;;;;;;;;;;;;;;;;;
  400. edit_box_key.f_exit:
  401.         call    edit_box.check_offset
  402.         and     word ed_flags,ed_shift_cl
  403.         call    edit_box_key.enable_null
  404.         jmp     edit_box.draw_cursor_text
  405. edit_box_key.sh_cl_:
  406. ;;;;;;SHIFT end
  407. ;®¡à ¡®âª  ®ç¨á⪨, ¯à¨ «¥¢®¬ - ¯à ¢®¬ ¤¢¨¦¥­¨¨ ¢ë¤¥«¥­¨ï
  408. ;¤«ï ®¡à ¡®âª¨ á­ïâ¨ï ¢ë¤¥«¥­¨ï
  409. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  410.         mov     eax,dword       ed_pos
  411.         cmp     eax,ebx
  412.  
  413.         jae     edit_box_key.sh_n
  414.         push    eax  ;¬¥­ì襥 ¢ eax
  415.         push    ebx  ;¡®«ì襥
  416.         jmp     edit_box_key.sh_n1
  417.                      ;¥á«¨ ¨­ ç¥
  418. edit_box_key.sh_n:
  419.         push    ebx
  420.         push    eax
  421. edit_box_key.sh_n1:
  422.         call    edit_box.check_offset
  423.         call    edit_box.get_n
  424.         mov     edx,eax ;size of ed_box
  425.         mov     ecx,ed_offset
  426.         add     eax,ecx ;eax = w_off= ed_offset+width
  427.         mov     edx,eax ;save
  428.         pop     ebx     ;¡®«ì襥
  429.         pop     eax     ;¬¥­ì襥
  430.  
  431.         cmp     eax,ecx         ;áà ¢­¥­¨¥ ¬¥­ì襣® á offset.
  432.         jae     edit_box_key.f_f            ;¥á«¨ ¡®«ìè¥
  433.         xor     eax,eax
  434.         cmp     edx,ebx         ;cà ¢­¨¬ à §¬¥à w_off á ¡®«ì訬
  435.         jb      @f
  436.         sub     ebx,ecx
  437.         jmp     edit_box_key.nxt_f
  438. @@:     mov     ebx,edx
  439.         sub     ebx,ecx
  440.         jmp     edit_box_key.nxt_f
  441. edit_box_key.f_f:
  442.         sub     eax,ecx
  443.         cmp     edx,ebx         ;cà ¢­¨¬ à §¬¥à w_off á ¡®«ì訬
  444.         jle     @f
  445.         sub     ebx,ecx
  446.         sub     ebx,eax
  447.         jmp     edit_box_key.nxt_f
  448. @@:
  449.         mov     ebx,edx
  450.         sub     ebx,ecx
  451.         sub     ebx,eax
  452. edit_box_key.nxt_f:
  453.         mov     edx,ebx
  454.         lea     ebx,[eax*2+eax]
  455.         shl     ebx,1
  456.         add     ebx,ed_left
  457.         inc     ebx
  458.         shl     ebx,16
  459.         lea     ecx,[edx*2+edx]
  460.         shl     ecx,1
  461.         mov     bx,cx
  462.         inc     ebx
  463.         mov     edx,ebp;shift_color
  464.  
  465.         call    edit_box.draw_bg_eax
  466. @@:     call    edit_box_key.enable_null
  467.         ret
  468. ;;;;;;;;;;;;;;;;;;;;;
  469. ;“áâ ­®¢ª - á­ï⨥ ¢ë¤¥«¥­¨ï ¢ ®¤¨­ ᨬ¢®«
  470. ;;;;;;;;;;;;;;;;;;;;;
  471. edit_box_key.drw_sim:
  472.         mov     eax,dword       ed_pos
  473.         call    edit_box_key.draw_rectangle   ;­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª á § ¤ ­­ë¬ 梥⮬
  474.         jmp     @b
  475. ;;;;;;;;;;;;;;;;;;;;;
  476. ;”ã­ªæ¨ï ãáâ ­®¢ª¨ ¢ë¤¥«¥­¨ï ¯à¨ ¤¢¨¦¥­¨¨ ¢«¥¢® ¨ ¢¯à ¢® ¨ ­ ¦ â¨¨ shift
  477. ;‹®£¨ª :
  478. ;;;;;;;;;;
  479. edit_box_key.draw_wigwag:
  480. ;äã­ªæ¨ï ãáâ ­®¢ª¨ ¯¥à¥¬¥­­ëå
  481.         mov     ebp,shift_color
  482.         call    edit_box.clear_cursor
  483.  
  484.         or      word ed_flags,ed_shift_bac ;ãáâ ­®¢ª  ä« £  ¢ë¤¥«¥­­®© ®¡« áâ¨
  485.         mov     ebp,shift_color
  486.         mov     eax,dword       ed_pos
  487.         test    word ed_flags,ed_left_fl
  488.         jz      edit_box_key.low
  489.         jmp     @f
  490. ;;;;;;;;;;
  491. ;”ã­ªæ¨ï 㤠«¥­¨ï ¢ë¤¥«¥­¨ï ¯à¨ ¤¢¨¦¥­¨¨ ¢«¥¢® ¨ ¢¯à ¢® ¨ ­ ¦ â¨¨ shift
  492. ;‹®£¨ª :
  493. ;;;;;;;;;;
  494. edit_box_key.draw_wigwag_cl:
  495. ;äã­ªæ¨ï ãáâ ­®¢ª¨ ¯¥à¥¬¥­­ëå
  496.         mov     ebp,ed_color
  497.         call    edit_box.clear_cursor
  498.  
  499.         mov     ebp,ed_color
  500.         mov     eax,dword       ed_pos
  501.         test    word ed_flags,ed_left_fl
  502.         jz      edit_box_key.low
  503. @@:     call    edit_box_key.draw_rectangle  ;­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª § ªà è¨¢ ¥¬®© ®¡« áâ¨
  504.         ret
  505. edit_box_key.low:   dec     eax
  506.         jmp     @b
  507. ;¢å®¤­®© ¯ à ¬¥âà ebx - ed_pos
  508. edit_box_key.sh_first_sh:
  509.         test    word ed_flags,ed_shift
  510.         je      @f
  511.         mov     dword ed_shift_pos_old,ebx
  512.         test    word ed_flags,ed_shift_on
  513.         jne     @f
  514.         mov     dword ed_shift_pos,ebx
  515.         or      word ed_flags,ed_shift_on
  516. @@:     ret
  517. ;Ž¡à ¡®âª  ªà ©­¨å ¯®«®¦¥­¨© ¢ editbox ¯à¨ ­ ¦ â®¬ shift
  518. ;¯à®¨§¢®¤¨â á­ï⨥ ¢ë¤¥«¥­¨ï, ¥á«¨ ­¥â shift
  519. ;¨­ ç¥ ¢®®¡é¥ ¢ë室¨â
  520. edit_box_key.sh_st_of:
  521.         test    word ed_flags,ed_shift
  522.         jne     @f
  523.         test    word ed_flags,ed_shift_bac
  524.         je      @f
  525.         mov     ebp,ed_color
  526.         mov     ebx,dword       ed_shift_pos
  527.         call    edit_box_key.sh_cl_  ;®ç¨á⪠ ¢ë¤¥«¥­®£® äà £¬¥­â 
  528.         and     word ed_flags,ed_shift_cl ; ®ç¨á⪠ ®â ⮣®, çâ® ã¡à «¨ ¢ë¤¥«¥­¨¥
  529.         jmp     edit_box.draw_cursor_text
  530. @@:
  531.         and     word ed_flags,ed_shift_off
  532.         popad
  533.         ret     4
  534. ;¯à®¢¥àª  á®áâ®ï­¨ï shift, ¡ë« «¨ ®­ ­ ¦ â à ­ìè¥?
  535. edit_box_key.sh_enable:
  536.         test    word ed_flags,ed_shift
  537.         jne     edit_box_key.sh_ext_en ;­ à¨á®¢ âì § ªà è¥­­ë© ¯àאַ㣮«ì­¨ª
  538.  
  539.         test    word ed_flags,ed_shift_bac
  540.         je      @f
  541.         call    edit_box.check_offset
  542.  
  543.         mov     ebp,ed_color
  544.         mov     ebx,dword       ed_shift_pos
  545.         call    edit_box_key.sh_cl_  ;®ç¨á⪠ ¢ë¤¥«¥­­®£® äà £¬¥­â 
  546.         call    edit_box_key.draw_wigwag_cl
  547.         and     word ed_flags,ed_shift_cl ; 1¢ à ­¥ ­ã¦­®
  548.         ret
  549.  
  550. @@:     mov     ebp,ed_color
  551.         call    edit_box.clear_cursor
  552.         call    edit_box.check_offset
  553.         ret
  554. edit_box_key.sh_ext_en:
  555.         call    edit_box.check_offset
  556.         test    word ed_flags,ed_offset_fl
  557.         je      @f
  558. ;¨á®¢ ­¨¥ § ªà è¥­­ëå ¯àאַ㣮«ì­¨ª®¢ ¨ ¨å ®ç¨á⪠
  559.         mov     eax,dword       ed_shift_pos
  560.         mov     ebx,dword       ed_pos
  561.         mov     ecx,dword       ed_shift_pos_old
  562. ;¯à®¢¥àª  ¨ à¨á®¢ ­¨¥ § ªà è¥­­ëå ®¡« á⥩
  563.         cmp     eax,ecx
  564.         je      edit_box_key.1_shem
  565.         jb      edit_box_key.smaller
  566.         cmp     ecx,ebx
  567.         ja      edit_box_key.1_shem
  568.         call    edit_box_key.draw_wigwag_cl ;clear
  569.         jmp     edit_box_key.sh_e_end
  570. edit_box_key.smaller:
  571.         cmp     ecx,ebx
  572.         jb      edit_box_key.1_shem
  573.         call    edit_box_key.draw_wigwag_cl ;clear
  574.         jmp     edit_box_key.sh_e_end
  575. ;alike  =
  576. edit_box_key.1_shem:        call   edit_box_key.draw_wigwag
  577. edit_box_key.sh_e_end:      and     word ed_flags,ed_shift_off
  578.         ret
  579. @@:     mov     ebp,shift_color
  580.         mov     ebx,dword       ed_shift_pos
  581.         call    edit_box_key.sh_cl_
  582.         jmp     edit_box_key.sh_e_end
  583. ;äã­ªæ¨ï ¤«ï ®¡à ¡®âª¨ shift ¯à¨ ­ ¦ â¨¨ home and end
  584. edit_box_key.sh_home_end:
  585.         mov     ebp,ed_color
  586.         call    edit_box.clear_cursor
  587.         test    word ed_flags,ed_shift_bac
  588.         je      @f
  589.         mov     ebp,ed_color
  590.         mov     ebx,dword       ed_shift_pos_old
  591.         call    edit_box_key.sh_cl_
  592.  
  593. @@:     test    word ed_flags,ed_shift
  594.         je      edit_box_key.sh_exit_ ;¢ë©â¨
  595.         mov     ebp,shift_color
  596.         mov     ebx,dword       ed_shift_pos
  597.         call    edit_box_key.sh_cl_
  598.         or      word ed_flags,ed_shift_bac ;ãáâ ­®¢ª  ä« £ , ¢ë¤¥«¥­­®© ®¡« áâ¨
  599.         jmp     edit_box_key.sh_e_end
  600. edit_box_key.sh_exit_:
  601.         call    edit_box.draw_bg
  602.         call    edit_box.check_offset
  603.         ret
  604. ;äã­ªæ¨ï ¢­¥á¥­¨ï 0 ¯®  ¤à¥áã ed_size+1
  605. edit_box_key.enable_null:
  606.         pusha
  607.         mov     eax,ed_size
  608.         mov     ebx,ed_text
  609.         test    eax,eax
  610.         add     eax,ebx
  611.         jne     @f
  612.         inc     eax
  613. @@:     xor     ebx,ebx
  614.         mov     [eax],bl
  615. edit_ex
  616. ;- 㤠«¥­¨¥ ᨬ¢®« 
  617. ;‚室­ë¥ ¤ ­­ë¥ edx=ed_size;ecx=ed_pos
  618. edit_box_key.del_char:
  619.         mov     esi,ed_text
  620.         test    word ed_flags,ed_shift_on
  621.         je      @f
  622.         mov     eax,dword ed_shift_pos
  623.         mov     ebx,esi
  624.         cmp     eax,ecx
  625.         jae     edit_box_key.dh_n
  626.  
  627.         mov     ed_pos,eax      ;çâ®¡ë ­¥ ¡ë«® ã¡¥£ ­¨ï ªãàá®à 
  628.         mov     ebp,ecx
  629.         sub     ebp,eax
  630.         add     ebx,eax  ;eax ¬¥­ìè¥
  631.         sub     edx,ecx
  632.         add     esi,ecx
  633.  
  634.         mov     dword ed_shift_pos,ebp
  635.         jmp     edit_box_key.del_ch_sh
  636.                      ;¥á«¨ ¨­ ç¥
  637. edit_box_key.dh_n:
  638.         mov     ebp,eax
  639.         sub     ebp,ecx
  640.         add     ebx,ecx
  641.         sub     edx,eax
  642.         add     esi,eax
  643.         mov     dword ed_shift_pos,ebp
  644.         jmp     edit_box_key.del_ch_sh
  645.  
  646. @@:     add     esi,ecx ;㪠§ â¥«ì + ᬥ饭¨¥ ª ॠ«ì­®¬ã ¡ãä¥àã
  647.         mov     ebx,esi
  648.         inc     esi
  649.         cld
  650.  
  651.         sub     edx,ecx
  652. edit_box_key.del_ch_sh:
  653.  
  654.         push    edi
  655.         mov     edi,ebx
  656. @@:
  657.         lodsb
  658.         stosb
  659.         dec edx
  660.         jns @b
  661.  
  662.         pop edi
  663.         ret
  664. ;¢ëç¨á«¨âì § ªà è¨¢ ¥¬ãî ®¡« áâì
  665. ;ᮣ« è¥­¨¥ ¢ ebp - ¯¥à¥¤ ¥âáï ed_size
  666. edit_box_key.clear_bg:
  667.         call    edit_box.get_n  ;¯®«ãç¨âì à §¬¥à ¢ ᨬ¢®« å è¨à¨­ë ª®¬¯®­¥­â 
  668.         push    eax
  669.         mov     ebx,ed_offset
  670.         add     eax,ebx ;eax = w_off= ed_offset+width
  671.         mov     ebx,ebp ;ed_size
  672.  
  673.         cmp     eax,ebx
  674.         jb      @f
  675.         mov     eax,ed_pos
  676.         sub     ebx,eax
  677.         mov     ecx,ed_offset
  678.         sub     eax,ecx
  679.         jmp     edit_box_key.nxt
  680. @@:     mov     ebx,ed_pos
  681.         push    ebx
  682.         sub     eax,ebx
  683.         mov     ebx,eax ;It is not optimal
  684.  
  685.         pop     eax     ;ed_pos
  686.         mov     ecx,ed_offset
  687.         sub     eax,ecx
  688. edit_box_key.nxt:
  689.         mov     ebp,eax  ;¯à®¢¥àª  ­  ¢ë室 § ªà è¨¢ ¥¬®© ®¡« á⨠§  ¯à¥¤¥«ë ¤«¨­ë
  690.         add     ebp,ebx
  691.         pop     edx
  692.         cmp     ebp,edx
  693.         je      @f
  694.         inc     ebx
  695.  
  696. @@:     mov     edx,ebx
  697.         lea     ebx,[eax*2+eax]
  698.         shl     ebx,1
  699.         add     ebx,ed_left
  700.         inc     ebx
  701.         shl     ebx,16
  702.         lea     ecx,[edx*2+edx]
  703.         shl     ecx,1
  704.         mov     bx,cx
  705.         mov     edx,ed_color
  706.         call    edit_box.draw_bg_eax
  707.         ret
  708. ;;;;;;;;;;;;;;;;;;;
  709. ;;; Ž¡à ¡®âª  ¯à¨¬¨â¨¢®¢
  710. ;;;;;;;;;;;;;;;;;;;;
  711. ; à¨á®¢ âì ¯àאַ㣮«ì­¨ª, 梥⠯¥à¥¤ ¥âáï ¢ ebp
  712. ;¢å®¤­ë¥ ¯ à ¬¥âàë:
  713. ;eax=dword ed_pos
  714. ;ebp=-梥â ed_color or shift_color
  715. edit_box_key.draw_rectangle:
  716.         mov     ecx,dword ed_offset
  717.         sub     eax,ecx
  718.         lea     ebx,[eax*2+eax]
  719.         shl     ebx,1
  720.         inc     ebx
  721.         add     ebx,ed_left
  722.         shl     ebx,16
  723.         add     ebx,6
  724.         mov     edx,ebp
  725.         call    edit_box.draw_bg_eax
  726.         ret
  727. ;;;;;;;;;;;;;;;;;;
  728. ;;à®¢¥àª  ­ ¦ â «¨ shift
  729. ;;;;;;;;;;;;;;;;;;
  730. edit_box_key.check_shift:
  731. pusha   ;á®åà ­¨¬ ¢á¥ ॣ¨áâàë
  732.         mcall   66,3
  733.         test    al,0x03
  734.         je      @f
  735.         or      word ed_flags,ed_shift   ;ãáâ ­®¢¨¬ ä« £
  736. @@:edit_ex
  737. }
  738. ;¬ ªà®á ª« ¢¨è ­  ª®â®àë¥ ¯à®¨á室¨â ॠªæ¨ï
  739. macro use_key_process backspace,delete,left,right,home,end,insert
  740. {
  741. if backspace eq
  742. else
  743.         cmp     ah,8
  744.         jz      edit_box_key.backspace
  745. end if
  746. if delete eq
  747. else
  748.         cmp     ah,0xb6
  749.         jz      edit_box_key.delete
  750. end if
  751. if left eq
  752. else
  753.         cmp     ah,176
  754.         jz      edit_box_key.left
  755. end if
  756. if right eq
  757. else
  758.         cmp     ah,179
  759.         jz      edit_box_key.right
  760. end if
  761. if home eq
  762. else
  763.         cmp     ah,180
  764.         jz      edit_box_key.home
  765. end if
  766. if home eq
  767. else
  768.         cmp     ah,181
  769.         jz      edit_box_key.end
  770. end if
  771. if insert eq
  772. else
  773.         cmp     ah,185  ;insert
  774.         jz      edit_box_key.insert
  775. end if
  776. }
  777.  
  778. macro use_key_no_process  up,down,esc,enter,tab,numl,capsl,scrolll
  779. {
  780. if up eq
  781. else
  782.         cmp     ah,177
  783.         jz      edit_box.editbox_exit
  784. end if
  785. if down eq
  786. else
  787.         cmp     ah,178
  788.         jz      edit_box.editbox_exit
  789. end if
  790. if esc eq
  791. else
  792.         cmp     ah,27   ;ESC - ª« ¢¨è  ))
  793.         jz      edit_box.editbox_exit
  794. end if
  795. if enter eq
  796. else
  797.         cmp     ah,13   ;ENTER - ª« ¢¨è  ))
  798.         jz      edit_box.editbox_exit
  799. end if
  800. if tab eq
  801. else
  802.         cmp     ah,9   ;TAB - ª« ¢¨è  ))
  803.         jz      edit_box.editbox_exit
  804. end if
  805.  
  806. if numl eq
  807. else
  808.         cmp     ah,4   ;Num Lock - ª« ¢¨è  ))
  809.         jz      edit_box.editbox_exit
  810. end if
  811.  
  812. if capsl eq
  813. else
  814.         cmp     ah,2   ;Caps Lock - ª« ¢¨è  ))
  815.         jz      edit_box.editbox_exit
  816. end if
  817.  
  818. if scrolll eq
  819. else
  820.         cmp     ah,1   ;Scroll Lock - ª« ¢¨è  ))
  821.         jz      edit_box.editbox_exit
  822. end if
  823.  
  824. }
  825.  
  826. macro use_key_figures_only
  827. {
  828.         test    word ed_flags,ed_figure_only  ; ⮫쪮 æ¨äàë?
  829.         jz      @f
  830.         cmp     ah,'0'
  831.         jb      edit_box.editbox_exit
  832.         cmp     ah,'9'
  833.         ja      edit_box.editbox_exit
  834. @@:
  835. }
  836. macro are_key_shift_press
  837. {
  838.         test    word ed_flags,ed_shift_on
  839.         je      @f
  840.         ;‚室­ë¥ ¤ ­­ë¥ edx=ed_size;ecx=ed_pos
  841.         push    eax
  842.         mov     edx,ed_size
  843.         mov     ecx, ed_pos
  844.         pusha
  845. ;;;;;;;;;;;;;;;;;;;;;
  846. ;clear input arrea
  847.         mov     ebp,ed_color
  848.         mov     ebx,dword       ed_shift_pos
  849.         call    edit_box_key.sh_cl_
  850.         mov     ebp,ed_size
  851.         call    edit_box_key.clear_bg
  852. ;;;;;;;;;;;;;;;;;;;;;
  853.         popa
  854.         call    edit_box_key.del_char
  855. ;;;;
  856.         mov     eax,dword ed_shift_pos
  857.         mov     ebx,ed_size
  858.         sub     ebx,eax
  859.         mov     ed_size,ebx
  860.         pop     eax
  861. @@:
  862. }
  863. macro are_key_cur_end
  864. {
  865.         mov     ecx,ed_size
  866.         mov     edx, ed_max
  867.         test    word ed_flags,ed_insert
  868.         jne     @f
  869.         cmp     ecx,edx
  870.         jae     edit_box.editbox_exit
  871. @@:     mov     ebx, ed_pos
  872.         cmp     ebx,edx
  873.         jl      @f ; ¥á«¨ ¬¥­ìè¥ ¨«¨ à ¢­®
  874.         jmp     edit_box.editbox_exit
  875.  
  876. @@:     ; ᤢ¨£ ¥¬ ᨬ¢®«ë ¯®á«¥ ªãàá®à  ¢¯à ¢®
  877.         mov     ecx,ed_size
  878.         push    edi eax
  879.         mov     ebp,edi
  880.         mov     esi,ed_text     ; “ª § â¥«ì ­  ¡ãä¥à
  881.                                 ;ã¤¥¬ à ¡®â âì á® áâப®©
  882.         add     esi,ecx         ;add ed_size ¤®¡ ¢¨¬ max size
  883.         mov     edi,esi
  884.  
  885.         cmp     ecx,ebx         ;…᫨ ã ­ á ¯®§¨æ¨ï ªãàá®à  = ⥪ã饬ã à §¬¥àã ­ ¯¥ç â ­­ëå ᨬ¢®«®¢ â.¥. ªãàá®à á⮨⠢ ª®­æ¥
  886.         je      edit_box_key.In_k
  887.  
  888.         test    dword bp_flags,ed_insert ;IF insert is enabled  â.ª. edi ¨§¬¥­¥­,  ¤à¥á㥬 ç¥à¥§ ebp
  889.         jne     edit_box_key.ins_v
  890. ;clear
  891. pusha
  892.         mov     edi,ebp
  893.         mov     ebp,ed_size
  894.         call    edit_box_key.clear_bg
  895. popa
  896.         sub     ecx,ebx         ; ©¤¥¬ ª®«-¢® ᨬ¢®«®¢ ¤«ï ¯¥à¥¤¢¨¦¥­¨ï.
  897.         inc     edi             ;‘¬¥á⨬ ­ è¨ ᨬ¢®«ë ¢¯à ¢®
  898.         std
  899.         inc     ecx
  900.    @@:
  901.         ;--------
  902.         lodsb
  903.         stosb
  904.         ;--------
  905.         loop    @b
  906. edit_box_key.In_k:
  907.         cld
  908.         pop eax
  909.         mov al,ah
  910.         stosb
  911.         pop edi
  912. ; ¢áâ ¢«ï¥¬ ª®¤ ª« ¢¨è¨ â㤠, £¤¥ ªãàá®à
  913.         ; 㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ à §¬¥à  ¨ ¯®§¨æ¨¨
  914.         inc      dword ed_size
  915.         inc      dword ed_pos
  916.         call    edit_box_key.draw_all2
  917.         jmp     edit_box_key.shift
  918. }
  919. macro use_work_key
  920. {
  921. edit_box_key.insert: test   word ed_flags,ed_insert ;not    word ed_insert
  922.          je     @f
  923.          and    word ed_flags,ed_insert_cl
  924.  
  925.         jmp     edit_box.editbox_exit
  926. @@:
  927.         or      word ed_flags,ed_insert
  928.         jmp     edit_box.editbox_exit
  929. edit_box_key.ins_v:
  930. ;        dec     dword [ebp+48];ed_size    ;processing is insert
  931.         dec     dword bp_size
  932.         sub     esi,ecx
  933.         add     esi,ebx
  934.         mov     edi,esi
  935. ;clear
  936. pusha
  937.         mov     edi,ebp
  938.         mov     ebp,ed_pos
  939.         call    edit_box_key.clear_bg
  940. popa
  941.         jmp     edit_box_key.In_k
  942. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  943. edit_box_key.delete:
  944.         mov     edx,ed_size
  945.         mov     ecx,ed_pos
  946.         cmp     edx,ecx
  947.         jg      edit_box_key.bac_del
  948.         test    word ed_flags,ed_shift_on
  949.         jne     edit_box_key.del_bac
  950.         popad
  951.         ret     4
  952. edit_box_key.bac_del:
  953.         call    edit_box_key.del_char
  954.         jmp     edit_box_key.draw_all
  955. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  956. ;--- ­ ¦ â  ª« ¢¨è  backspace ---
  957. edit_box_key.backspace:
  958.         test    word ed_flags,ed_shift_on
  959.         jne     edit_box_key.delete
  960.         ; ¯à®¢¥à塞, ªãàá®à ã «¥¢®£® ªà ï?
  961.         mov     ecx,ed_pos
  962.         test    ecx,ecx
  963.         jnz     edit_box_key.del_bac
  964.         popad
  965.         ret     4
  966.  
  967. edit_box_key.del_bac:
  968.         mov     edx,ed_size
  969.         cmp     edx,ecx ;if ed_pos=ed_size
  970.         je      @f
  971.         dec     ecx
  972.         call    edit_box_key.del_char
  973. @@:     test    word ed_flags,ed_shift_on
  974.         jne     edit_box_key.bac_del
  975.         dec      dword ed_pos
  976. edit_box_key.draw_all:
  977.         push    edit_box_key.shift;.draw_cursor_text;eax
  978.  
  979.         test    word ed_flags,ed_shift_on
  980.         je      @f
  981.         mov     eax,dword ed_shift_pos
  982.         mov     ebx,ed_size
  983.         sub     ebx,eax
  984.         mov     ed_size,ebx
  985.  
  986.         mov     ebp,ed_color
  987.         call    edit_box.clear_cursor
  988.         call    edit_box.check_offset
  989.         call    edit_box.draw_bg
  990.         ret
  991. @@:     dec      dword ed_size
  992.  
  993. edit_box_key.draw_all2:
  994.         and    word ed_flags,ed_shift_cl
  995.         mov     ebp,ed_color
  996.         call    edit_box.clear_cursor
  997.         call    edit_box.check_offset
  998.         mov     ebp,ed_size
  999.         call    edit_box_key.clear_bg
  1000.         ret
  1001. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1002. ;--- ­ ¦ â  ª« ¢¨è  left ---
  1003. edit_box_key.left:
  1004.         mov     ebx,ed_pos
  1005.         test    ebx,ebx
  1006.         jz      edit_box_key.sh_st_of
  1007.         or      word ed_flags,ed_left_fl
  1008.         call    edit_box_key.sh_first_sh
  1009.         dec      dword ed_pos
  1010.         call    edit_box_key.sh_enable
  1011.         jmp     edit_box.draw_cursor_text
  1012. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1013. ;--- ­ ¦ â  ª« ¢¨è  right ---
  1014. edit_box_key.right:
  1015.         mov     ebx,ed_pos
  1016.         cmp     ebx,ed_size
  1017.         je      edit_box_key.sh_st_of
  1018.         and     word ed_flags,ed_right_fl
  1019.         call    edit_box_key.sh_first_sh
  1020.         inc     dword  ed_pos
  1021.         call    edit_box_key.sh_enable
  1022.         jmp     edit_box.draw_cursor_text
  1023. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1024. edit_box_key.home:
  1025.         mov     ebx,ed_pos
  1026.         test    ebx,ebx
  1027.         jz      edit_box_key.sh_st_of
  1028.         call    edit_box_key.sh_first_sh
  1029.         xor     eax,eax
  1030.         mov     ed_pos,eax
  1031.         call    edit_box_key.sh_home_end
  1032.         jmp     edit_box.draw_cursor_text
  1033. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1034. edit_box_key.end:
  1035.         mov     ebx,ed_pos
  1036.         cmp     ebx,dword ed_size
  1037.         je      edit_box_key.sh_st_of
  1038.         call    edit_box_key.sh_first_sh
  1039.         mov     eax,ed_size
  1040.         mov     ed_pos,eax
  1041.         call    edit_box_key.sh_home_end
  1042.         jmp     edit_box.draw_cursor_text
  1043. }
  1044.  
  1045. macro use_mouse_func
  1046. {
  1047. ;----------------------------------------------------------
  1048. ;--- Ž¡à ¡®âª  .mouse_wigwag
  1049. ;----------------------------------------------------------
  1050. edit_box_mouse.mouse_wigwag:
  1051.         shr     eax,16
  1052.         or      word ed_flags,ed_shift_bac+ed_shift_on+ed_shift
  1053. ;;;;;;;;;;;;;;;;;;
  1054. ;;¯à®æ¥¤ãà  ®¡à ¡®âª¨ ¯®«®¦¥­¨ï ¢ë¤¥«¥­­®£® ⥪áâ , ª®£¤  ¯à®¨á室¨â ¢ë室 §  ¯à¥¤¥«ë editbox
  1055. ;;;;;;;;;;;;;;;;;;
  1056.         test    ax,0x8000
  1057.         jnz     edit_box_mouse.mleft
  1058.  
  1059.         mov     ebx,ed_left
  1060.         cmp     eax,ebx
  1061.         jb      edit_box_mouse.mleft
  1062.  
  1063.         add     ebx,ed_width
  1064.         cmp     eax,ebx
  1065.         ja      edit_box_mouse.mright
  1066.  
  1067.         sub     ebx,ed_width
  1068.  
  1069.         xor     edx,edx
  1070.         sub     eax,ebx ; ¢ëç⥬ ¨§ ª®®à¤¨­ â ¬ë誨 ¯® ®á¨ å ª®®à¤¨­ âë ¤® editbox ¯® ®á¨ å
  1071.         mov     ebx,6
  1072.         div     ebx
  1073. ;;;;;;;;;;;;;;;;;;
  1074. ;;¯à®æ¥¤ãà  ®¡à ¡®âª¨ ¯®«®¦¥­¨ï ¢ë¤¥«¥­­®£® ⥪áâ , ¢ ¯à¥¤¥« å ®¡« á⨠editbox
  1075. ;;;;;;;;;;;;;;;;;;
  1076. ;®«ã稫¨ ª®®à¤¨­ âë ¢ eax ¬ë誨, â.¥. ªã¤  ®­  ¯¥à¥¬¥á⨫ áì
  1077. ;¨á®¢ ­¨¥ § ªà è¥­­ëå ¯àאַ㣮«ì­¨ª®¢ ¨ ¨å ®ç¨á⪠
  1078.         add     eax,ed_offset   ;¤®¡ ¢¨¬ ᬥ饭¨¥
  1079.         cmp     eax,dword ed_size       ;¥á«¨ ¢ë諨 §  ¯à¥¤¥«ë, â® ­¨ç¥£® ­¥ ¤¥« âì
  1080.         ja      edit_box_mouse.mwigvag
  1081. edit_box_mouse.mdraw:
  1082.         mov     dword   ed_pos,eax ;á®åà ­¨¬ ­®¢®¥ §­ ç¥­¨¥
  1083. ;¨á®¢ ­¨¥ § ªà è¥­­ëå ¯àאַ㣮«ì­¨ª®¢ ¨ ¨å ®ç¨á⪠
  1084.         mov     ecx,dword       ed_shift_pos
  1085.         mov     ebx,dword       ed_shift_pos_old
  1086.         mov     dword   ed_shift_pos_old,eax    ;¢­¥á¥¬ ­®¢®¥ §­ ç¥­¨¥ áâ à®© ¯®§¨æ¨¨ ªãàá®à 
  1087. ;¯à®¢¥àª  ¨ à¨á®¢ ­¨¥ § ªà è¥­­ëå ®¡« á⥩
  1088.         cmp     ecx,ebx         ;¢ëïá­ï¥¬ ªã¤  ¡ë«® ¤¢¨¦¥­¨¥ ­  ®¤¨­ è £ ­ § ¤
  1089.         je      edit_box_mouse.m1_shem        ;¤¢¨¦¥­¨ï ­¥ ¡ë«® à ­¥¥
  1090.         jb      edit_box_mouse.msmaller       ;¤¢¨¦¥­¨¥ ¡ë«® ->
  1091.         cmp     ebx,eax         ;¤¢¨¦¥­¨¥ ¡ë«® ¤® í⮣® <- ¨ âãâ ¬ë ¯à®¢¥à塞 ᥩç á ªã¤  ¤¢¨¦¥­¨¥ ¯à®¨á室¨â
  1092.         ja      edit_box_mouse.m1_shem        ;¥á«¨ ¡ë«® ¤¢¨¦¥­¨¥ <- â® ­ã¦­® § ªà á¨âì ®¡« áâì
  1093.         je      edit_box_mouse.mwigvag        ;¥á«¨ ¨§¬¥­¥­¨ï ­¥ ¡ë«®, â® ­¨ç¥£® ­¥ ¤¥« âì
  1094.         mov     ebp,ed_color    ;âã⠭㦭® ®ç¨áâ¨âì ®¡« áâì c ed_pos ed_shift_pos_old
  1095. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  1096.         call    edit_box_key.sh_cl_
  1097.         jmp     edit_box_mouse.mwigvag
  1098. edit_box_mouse.msmaller:
  1099.         cmp     ebx,eax
  1100.         jb      edit_box_mouse.m1_shem
  1101.         mov     ebp,ed_color
  1102. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  1103.         call    edit_box_key.sh_cl_
  1104.         jmp     edit_box_mouse.mwigvag
  1105. ;alike  =
  1106. edit_box_mouse.m1_shem:
  1107.         mov     ebp,shift_color
  1108. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  1109.         mov     ebx,ecx
  1110.         call    edit_box_key.sh_cl_
  1111.         jmp     edit_box_mouse.mwigvag
  1112. edit_box_mouse.mwigvag:
  1113.         and     word ed_flags,ed_shift_mcl
  1114.         jmp     edit_box.draw_cursor_text
  1115. ;       popa
  1116. ;       ret
  1117. edit_box_mouse.mleft:
  1118.         mov     eax,ed_pos
  1119.         cmp     eax,0
  1120.         jbe      edit_box_mouse.mwigvag
  1121.         dec     eax
  1122.         call    edit_box.check_offset
  1123.         push    eax
  1124.         mov     ebx,ed_shift_pos
  1125.         mov     ebp,shift_color
  1126.         call    edit_box_key.sh_cl_
  1127.         pop     eax
  1128.         jmp     edit_box_mouse.mdraw
  1129. edit_box_mouse.mright:
  1130.         mov     eax,ed_pos
  1131.         mov     ebx,ed_size
  1132.         cmp     eax,ebx
  1133.         jae     edit_box_mouse.mwigvag
  1134.         inc     eax
  1135.         call    edit_box.check_offset
  1136.         mov     ebx,ed_shift_pos
  1137.         mov     ebp,shift_color
  1138.         push    eax
  1139.         call    edit_box_key.sh_cl_
  1140.         pop     eax
  1141.         jmp     edit_box_mouse.mdraw
  1142. }
  1143.  
  1144. macro use_work_mouse
  1145. ;----------------------------------------------------------
  1146. ;--- € ­¥ 㤥ন¢ ¥¬ «¨ ¬ë ª« ¢¨èã ¬ë誨, ¯¥à¥¬¥é ï ªãàá®à, ¢® ¢á¥ à §­ë¥ áâ®à®­ë?
  1147. ;----------------------------------------------------------
  1148. {
  1149.         test    word ed_flags,ed_mouse_on
  1150.         jne     edit_box_mouse.mouse_wigwag
  1151. ;----------------------------------------------------------
  1152. ;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box -------------
  1153. ;----------------------------------------------------------
  1154.         mov     ebx,ed_top
  1155.         cmp     ax,bx
  1156.         jl      edit_box_mouse._blur;.mouse_end_no_focus
  1157.  
  1158.         add     ebx,ed_height
  1159.         cmp     ax,bx
  1160.         jg      edit_box_mouse._blur;.mouse_end_no_focus
  1161.  
  1162.         shr     eax,16
  1163.  
  1164.         mov     ebx,ed_left
  1165.         cmp     ax,bx
  1166.         jl      edit_box_mouse._blur;.mouse_end_no_focus
  1167.  
  1168.         add     ebx,ed_width
  1169.  
  1170.         cmp     ax,bx
  1171.         jg      edit_box_mouse._blur;.mouse_end_no_focus
  1172.  
  1173. ;--- ¨§¬¥­ï¥¬ ¯®§¨æ¨î ªãàá®à  ---
  1174.         push    eax
  1175.         mov     ebp,ed_color
  1176.         call    edit_box.clear_cursor
  1177.         pop     eax
  1178. edit_box_mouse._mvpos:
  1179.         xor     edx,edx
  1180.         sub     eax,ed_left
  1181.  
  1182.         mov     ebx,6
  1183.         div     bx
  1184.         add     eax,ed_offset
  1185.         cmp     eax,ed_size
  1186.         jna     edit_box_mouse._mshift
  1187.         mov     eax,ed_size
  1188.  
  1189. edit_box_mouse._mshift:
  1190. ;;;;;;;
  1191. ;;‘¥ªæ¨ï ®¡à ¡®âª¨ shift ¨ ¢ë¤¥«¥­¨ï ¯® shift
  1192. ;;;;;;;
  1193.         test    word ed_flags,ed_shift_bac
  1194.         je      @f
  1195.         mov     ebp,dword       ed_color
  1196.         mov     ebx,dword ed_shift_pos
  1197.         push    eax
  1198.         call    edit_box_key.sh_cl_
  1199.         and     word ed_flags,ed_shift_bac_cl
  1200.         pop     eax
  1201. @@:
  1202.         test    word ed_flags,ed_mouse_on
  1203.         jne     @f
  1204.  
  1205.         mov     dword ed_shift_pos,eax
  1206.         or      word  ed_flags,ed_mouse_on
  1207.         mov     dword ed_pos,eax
  1208.  
  1209. ;        mov     dword [mouse_flag],edi          ;ãáâ ­®¢¨¬ ¨¤¥­â¨ä¨ª â®à
  1210.  
  1211.         mov     ebx,dword ed_mouse_variable
  1212.         push    edi
  1213.         pop     dword [ebx]
  1214.  
  1215.  
  1216.  
  1217.  
  1218.         bts     word ed_flags,1                 ;ãáâ ­®¢ª  䮪ãá 
  1219.         jmp     edit_box_mouse.m_sh
  1220. @@:
  1221.         cmp     eax,dword ed_shift_pos  ;¥á«¨ ¯®§¨æ¨¨ ­¥ ¨§¬¥­¨«¨áì
  1222.         je      edit_box.editbox_exit
  1223.         mov     ed_pos,eax
  1224.         mov     ebp,dword shift_color
  1225.         mov     ebx,dword ed_shift_pos
  1226.         call    edit_box_key.sh_cl_
  1227.         or      word ed_flags,ed_mous_adn_b     ;ãáâ ­®¢¨¬ ¡¨â, çâ® ¬ë ¢ë¤¥«¨«¨ +shift_on +
  1228. edit_box_mouse.m_sh:
  1229.         call    edit_box.draw_text
  1230.         call    edit_box.draw_cursor
  1231. ;----------------------------------------------------------
  1232. ;--- ¯à®æ¥¤ãà  ãáâ ­®¢ª¨ 䮪ãá  ---------------------------
  1233. ;----------------------------------------------------------
  1234.         jmp     edit_box_mouse.drc
  1235. edit_box_mouse._blur:
  1236.         test    word ed_flags,ed_always_focus
  1237.         jne     edit_box.editbox_exit
  1238.         btr     word ed_flags,1 ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  1239.         jnc     edit_box.editbox_exit
  1240.  
  1241.         mov     ebp,ed_color
  1242.         call    edit_box.clear_cursor
  1243. edit_box_mouse.drc:   call    edit_box.draw_border
  1244.         jmp     edit_box.editbox_exit
  1245. }
  1246.  
  1247.  
  1248. ; Œ ªà®á ¢ë室 
  1249. macro edit_ex
  1250. {
  1251. popad
  1252. ret
  1253. }
  1254. macro debug
  1255. {
  1256.         ;-----------  ®â« ¤ª 
  1257.         pushad
  1258. ;        mov     dword [ed_buffer.2],0
  1259. ;        mov     eax,edi
  1260.         mov eax,dword [ed_buffer.2]
  1261.         mov edi,ed_buffer.3
  1262.         call .str
  1263.         ;à¨á®¢ ­¨¥ ä®­ 
  1264.         mov eax,13
  1265.         mov ebx,178*65536+70
  1266.         mov ecx,28*65536+10
  1267.         xor edx,edx
  1268.         int 0x40
  1269.         ;¢ë¢®¤ §­ ç¥­¨ï ­  íªà ­
  1270.         mov eax,4
  1271.         mov ebx,180*65536+30
  1272.         mov ecx,0x10DDBBCC
  1273.         mov edx,ed_buffer.3
  1274.         mov esi,8
  1275.         int 0x40
  1276.         popad
  1277.         ;----------- ®â« ¤ª 
  1278. }
  1279. macro   debug_func
  1280. {
  1281. .str:
  1282.         mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï, ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx, ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
  1283.          ;¯¥à¥¢®¤ ç¨á«  ¢ ASCII áâபã, ¢å®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­¨ï, edi  ¤à¥á ªã¤  ¡ã¤¥¬ § ¯¨á뢠âì áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
  1284.         cmp eax,ecx  ;áà ¢­¨âì, ¥á«¨ ¢ eax ¬¥­ìè¥, 祬 ¢ ecx, â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
  1285.         jb @f
  1286.         xor edx,edx  ;®ç¨áâ¨âì edx
  1287.         div ecx      ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
  1288.         push edx     ;¯®«®¦¨âì ¢ á⥪
  1289.         ;dec edi             ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
  1290.         call .str ;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â , ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
  1291.         pop eax
  1292.         @@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al, 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­¨ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
  1293.         ;sbb al,$69  ;- ç¥áâ­®, ¤ ­­ ï ¨­áâàãªæ¨ï ¬¥­ï § áâ ¢«ï¥â § ¤ã¬ âìáï â.¥. ï ­¥ §­ î ª ª íâ® à ¡®â ¥â
  1294.         ;das        ;¯®á«¥ ¤ ­­®© ª®¬ ­¤ë ª ª ¡ë ¯à®¨á室¨â 㬥­ì襭¨¥ al ­  66h  (¢ ª­¨£¥ ­ ¯¨á ­® ¤à㣮¥)
  1295.         or al,0x30  ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥, 祬 ¤¢¥ ¢ëè¥
  1296.         stosb       ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祩ªã ¯ ¬ï⨠es:edi
  1297.  
  1298.         ret         ;¢¥à­ãâìáï ®ç¥­ì ¨­â¥à¥á­ë© 室, â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âáï ª®«-¢® ¢ë§®¢®¢, â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
  1299. }
  1300.  
  1301. ed_struc_size=76
  1302.