Subversion Repositories Kolibri OS

Rev

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

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