Subversion Repositories Kolibri OS

Rev

Rev 446 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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