Subversion Repositories Kolibri OS

Rev

Rev 6705 | Rev 6965 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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