Subversion Repositories Kolibri OS

Rev

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

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