Subversion Repositories Kolibri OS

Rev

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

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