Subversion Repositories Kolibri OS

Rev

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