Subversion Repositories Kolibri OS

Rev

Rev 1476 | Blame | Last modification | View Log | Download | RSS feed

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