Subversion Repositories Kolibri OS

Rev

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

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