Subversion Repositories Kolibri OS

Rev

Rev 343 | 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=10000b
  75. ed_insert_cl=1111111111101111b
  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. pushad
  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. popad
  348.         ret
  349.  
  350. @@:
  351.         mov     dword [esp+28],0
  352. popad
  353.         ret
  354. ;==========================================================
  355. ;=== ®¡à ¡®âª  ª« ¢¨ âãàë =================================
  356. ;==========================================================
  357. .key:
  358. pusha
  359.         test    word ed_flags,ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  360.         je     .no_figure ;@f
  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.         push    eax
  414.         mov     edx,ed_size
  415.         mov     ecx,ed_pos
  416.         call    .del_char
  417. ;clear
  418.         mov     ebp,ed_color
  419.         call    .sh_cl_
  420. ;;;;
  421.         mov     eax,ed_shift_pos
  422.         mov     ebx,ed_size
  423.         sub     ebx,eax
  424.         mov     ed_size,ebx
  425.         pop     eax
  426.  
  427.         ; ¯à®¢¥à塞, ­ å®¤¨âáï «¨ ªãàá®à ¢ ª®­æ¥
  428. @@:     mov     ecx,ed_size
  429.         mov     edx, ed_max
  430.         test    word ed_flags,ed_insert
  431.         jne     @f
  432.         cmp     ecx,edx
  433.         jae     .no_figure
  434. @@:     mov     ebx, ed_pos
  435.         cmp     ebx,edx
  436.         jl      @f ; ¥á«¨ ¬¥­ìè¥ ¨«¨ à ¢­®
  437. .no_figure:
  438.         popa
  439.         ret
  440. .insert: test   word ed_flags,ed_insert ;not    word ed_insert
  441.          je     .insert_1
  442.          and    word ed_flags,ed_insert_cl
  443.         jmp     .no_figure
  444. .insert_1:
  445.         or      word ed_flags,ed_insert
  446.         jmp     .no_figure
  447. .ins_v:
  448.         dec     dword [ebp+38];ed_size    ;processing is insert
  449.         sub     esi,ecx
  450.         add     esi,ebx
  451.         mov     edi,esi
  452. ;clear
  453. pusha
  454.         mov     edi,ebp
  455.         mov     ebp,ed_pos
  456.         call    .clear_bg
  457. popa
  458.         jmp     .In_k
  459. @@:     ; ᤢ¨£ ¥¬ ᨬ¢®«ë ¯®á«¥ ªãàá®à  ¢¯à ¢®
  460.         mov     ecx,ed_size
  461.         push    edi eax
  462.         mov     ebp,edi
  463.         mov     esi,ed_text     ; “ª § â¥«ì ­  ¡ãä¥à
  464.                                 ;ã¤¥¬ à ¡®â âì á® áâப®©
  465.         add     esi,ecx         ;add ed_size ¤®¡ ¢¨¬ max size
  466.         mov     edi,esi
  467.  
  468.         cmp     ecx,ebx         ;…᫨ ã ­ á ¯®§¨æ¨ï ªãàá®à  = ⥪ã饬ã à §¬¥àã ­ ¯¥ç â ­­ëå ᨬ¢®«®¢ â.¥. ªãàá®à á⮨⠢ ª®­æ¥
  469.         je      .In_k
  470.  
  471.         test    word [ebp+36],ed_insert ;IF insert is enable  â.ª. edi ¨§¬¥­¥­  ¤à¥á㥬 ç¥à¥§ ebp
  472.         jne     .ins_v
  473. ;clear
  474. pusha
  475.         mov     edi,ebp
  476.         mov     ebp,ed_size
  477.         call    .clear_bg
  478. popa
  479.  
  480.  
  481.         sub     ecx,ebx         ; ©¤¥¬ ª®«-¢® ᨬ¢®«®¢ ¤«ï ¯¥à¥¤¢¨¦¥­¨ï.
  482.         inc     edi             ;‘¬¥á⨬ ­ è¨ ᨬ¢®«ë ¢ ¯à ¢®
  483.         std
  484.         inc     ecx
  485.    @@: 
  486.         ;--------
  487.         lodsb
  488.         stosb
  489.         ;--------
  490.         loop    @b
  491. .In_k:  cld
  492.         pop eax
  493.         mov al,ah
  494.         stosb
  495.         pop edi
  496. ; ¢áâ ¢«ï¥¬ ª®¤ ª« ¢¨è¨ â㤠, £¤¥ ªãàá®à
  497.         ; 㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ à §¬¥à  ¨ ¯®§¨æ¨¨
  498.         inc      dword ed_size
  499.         inc      dword ed_pos
  500.         call    .draw_all2
  501.         jmp     .shift;.draw_cursor_text
  502. .delete:       
  503.         mov     edx,ed_size
  504.         mov     ecx,ed_pos
  505.         cmp     edx,ecx
  506.         jg      .bac_del
  507.         test    word ed_flags,ed_shift_on
  508.         jne     .del_bac
  509.         popa
  510.         ret
  511. .bac_del:      
  512.         call    .del_char
  513.         jmp     .draw_all
  514.        
  515. ;--- ­ ¦ â  ª« ¢¨è  backspace ---
  516. .backspace:
  517.         ; ¯à®¢¥à塞, ªãàá®à ã «¥¢®£® ªà ï ?
  518.         mov     edx,ed_size
  519.         mov     ecx,ed_pos
  520.         test    ecx,ecx
  521.         jnz     .del_bac
  522.         test    word ed_flags,ed_shift_on
  523.         jne     .bac_del
  524.         popa
  525.         ret
  526. .del_bac:
  527.         cmp     edx,ecx ;if ed_pos=ed_size
  528.         je      @f
  529.         dec     ecx
  530.         call    .del_char
  531. @@:     test    word ed_flags,ed_shift_on
  532.         jne     .bac_del
  533.         dec      dword ed_pos
  534.  
  535. .draw_all:
  536.         push    .shift;.draw_cursor_text;eax
  537.  
  538.         test    word ed_flags,ed_shift_on
  539.         je      @f
  540.         mov     eax,ed_shift_pos
  541.         mov     ebx,ed_size
  542.         sub     ebx,eax
  543.         mov     ed_size,ebx
  544.  
  545.         call    .clear_cursor
  546.         call    .check_offset
  547.         call    .draw_bg
  548.  
  549.         ret
  550.  
  551. @@:     dec      dword ed_size
  552.  
  553. .draw_all2:
  554.         and    word ed_flags,ed_shift_cl
  555.         call    .clear_cursor
  556.         call    .check_offset
  557.         mov     ebp,ed_size
  558.         call    .clear_bg
  559.         ret
  560.         ;jmp    .shift
  561. ;--- ­ ¦ â  ª« ¢¨è  left ---
  562. .left:  call    .sh_enable
  563.         mov     ebx,ed_pos
  564.         test    ebx,ebx
  565.         jz      .nd_k
  566.         call    .clear_cursor
  567.         dec      dword ed_pos
  568.         jmp     .nd_k
  569. ;--- ­ ¦ â  ª« ¢¨è  right ---
  570. .right: call    .sh_enable
  571.         mov     ebx,ed_pos
  572.         cmp     ebx,ed_size
  573.         je      .nd_k
  574.         call    .clear_cursor
  575.         inc     dword  ed_pos
  576.         jmp     .nd_k
  577. .home:  call    .sh_enable
  578.         mov     ebx,ed_pos
  579.         test    ebx,ebx
  580.         jz      .nd_k
  581.         call    .clear_cursor
  582.         xor     eax,eax
  583.         mov     ed_pos,eax
  584.         jmp     .nd_k
  585.  
  586. .end:   call    .sh_enable
  587.         mov     ebx,ed_pos
  588.         cmp     ebx,dword ed_size
  589.         je      .nd_k
  590.         call    .clear_cursor
  591.         mov     eax,ed_size
  592.         mov     ed_pos,eax
  593. .nd_k:  call    .check_offset
  594.         ;test   eax,eax
  595.         ;jz     .draw_bg_cursor_text
  596.         call    .draw_cursor
  597.  
  598. .shift: ;;;;;;;SHIFT
  599.         test      word ed_flags,ed_shift
  600.         je      .f_exit
  601.  
  602.         mov     ebp,shift_color
  603.         call    .sh_cl_
  604.         jmp     .draw_cursor_text
  605. ;;;;;;;;;;;;;;;;;;;;;
  606.  
  607. .f_exit: and    word ed_flags,ed_shift_cl
  608.         call    .enable_null
  609.         jmp     .draw_cursor_text
  610.  
  611. .sh_cl_:
  612. ;;;;;;SHIFT end
  613. ;¤«ï ®¡à ¡®âª¨ á­ïâ¨ï ¢ë¤¥«¥­¨ï
  614.         or      word ed_flags,ed_shift_bac
  615.         mov     eax,dword       ed_pos
  616.         mov     ebx,dword       ed_shift_pos
  617.         cmp     eax,ebx
  618.         jae     .sh_n
  619.         push    eax  ;¬¥­ì襥 ¢ eax
  620.         push    ebx  ;¡®«ì襥
  621.         jmp     .sh_n1
  622.                      ;¥á«¨ ¨­ ç¥
  623. .sh_n:  push    ebx  
  624.         push    eax
  625. .sh_n1:
  626.         call    .check_offset
  627.         call    .get_n
  628.         mov     edx,eax ;size of ed_box
  629. ;       push    eax
  630.         mov     ecx,ed_offset
  631.         add     eax,ecx ;eax = w_off= ed_offset+width
  632.         mov     edx,eax ;save
  633.         pop     ebx     ;¡®«ì襥
  634.         pop     eax     ;¬¥­ì襥
  635.  
  636.        
  637.         cmp     eax,ecx         ;áà ¢­¥­¨¥ á ¬¥­ì襣® á offset.
  638.         jae     .f_f            ;¥á«¨ ¡®«ìè¥
  639.         xor     eax,eax
  640.         cmp     edx,ebx         ;cà ¢­¨¬ à §¬¥à w_off á ¡®«ì訬
  641.         jb      @f
  642.         sub     ebx,ecx
  643.         jmp     .nxt_f
  644. @@:     mov     ebx,edx
  645.         sub     ebx,ecx
  646.         jmp     .nxt_f
  647.  
  648. .f_f:  
  649.         sub     eax,ecx
  650.         cmp     edx,ebx         ;cà ¢­¨¬ à §¬¥à w_off á ¡®«ì訬
  651.         jle     @f
  652.         sub     ebx,ecx
  653.         sub     ebx,eax
  654.         jmp     .nxt_f
  655. @@:
  656.         mov     ebx,edx
  657.         sub     ebx,ecx
  658.         sub     ebx,eax
  659. .nxt_f:
  660.         mov     edx,ebx
  661.         lea     ebx,[eax*2+eax]
  662.         shl     ebx,1
  663.         add     ebx,ed_left
  664.         inc     ebx
  665.         shl     ebx,16
  666.         lea     ecx,[edx*2+edx]
  667.         shl     ecx,1  
  668.         mov     bx,cx
  669.  
  670.         mov     edx,ebp;shift_color
  671.  
  672.         call    .draw_bg_eax
  673.         and    word ed_flags,1111111111111011b
  674.         call    .enable_null
  675.         ret
  676.  
  677.  
  678. ;¯à®¢¥àª  á®áâ®ï­¨ï shift ¡ë« «¨ ®­ ­ ¦ â à ­ìè¥?
  679. .sh_enable:
  680.         test    word ed_flags,ed_shift
  681.         je      @f
  682.         test    word ed_flags,ed_shift_on
  683.         jne     .sh_ext_en
  684.         push    dword ed_pos
  685.         pop     dword ed_shift_pos
  686.         or      word ed_flags,ed_shift_on
  687.         ret
  688.  
  689. @@:     test    word ed_flags,ed_shift_bac
  690.         je      @f
  691.         mov     ebp,ed_color
  692.         call    .sh_cl_  ;®ç¨á⪠ ¢ë¤¥«¥­®£® äà £¬¥­â 
  693. @@:     and     word ed_flags,ed_shift_cl
  694. ;       ret
  695. .sh_ext_en:    
  696.                 ret
  697. ;äã­ªæ¨ï ¢­¥á¥­¨ï 0 ¯®  ¤à¥áã ed_size+1
  698. .enable_null:
  699.         pusha
  700.         mov     eax,ed_size
  701.         mov     ebx,ed_text
  702.         add     eax,ebx
  703.         inc     eax
  704.         xor     ebx,ebx
  705.         mov     [eax],bl
  706.         popa
  707.         ret
  708.  
  709.         ;- 㤠«¥­¨¥ ᨬ¢®« 
  710.         ;‚室­ë¥ ¤ ­­ë¥ edx=ed_size;ecx=ed_pos
  711. .del_char:
  712.         mov     esi,ed_text
  713.         test    word ed_flags,ed_shift_on
  714.         je      @f
  715.         mov     eax,dword ed_shift_pos
  716.         mov     ebx,esi
  717.         cmp     eax,ecx
  718.         jae     .dh_n
  719.  
  720.         mov     ed_pos,eax      ;çâ® ¡ë ­¥ ¡ë«® ã¡¥£ ­¨ï ªãàá®à 
  721.         mov     ebp,ecx
  722.         sub     ebp,eax
  723.         add     ebx,eax  ;eax ¬¥­ìè¥
  724.         sub     edx,ecx
  725.         add     esi,ecx
  726.  
  727.  
  728.         mov     ed_shift_pos,ebp
  729.         jmp     .del_ch_sh
  730.                      ;¥á«¨ ¨­ ç¥
  731. .dh_n:  
  732.         mov     ebp,eax
  733.         sub     ebp,ecx
  734.         add     ebx,ecx
  735.         sub     edx,eax
  736.         add     esi,eax
  737.         mov     ed_shift_pos,ebp
  738.         jmp     .del_ch_sh
  739.  
  740. @@:     add     esi,ecx ;㪠§ â¥«ì + ᬥ饭¨¥ ª ॠ«ì­®¬ã ¡ãää¥àã
  741.         mov     ebx,esi
  742.         inc     esi
  743.         cld
  744.  
  745.         sub     edx,ecx
  746. .del_ch_sh:
  747.  
  748.         push    edi
  749.         mov     edi,ebx
  750. @@:
  751.         lodsb
  752.         stosb
  753.         dec edx
  754.         jns @b
  755.        
  756.         pop edi
  757.         ret
  758.  
  759. ;¢ëç¨á«¨âì § ªà è¨¢ ¥¬ãî ®¡« áâì
  760. ;ᮣ« è¥­¨¥ ¢ ebp - ¯¥à¥¤ ¥âáï ed_size
  761. .clear_bg:
  762.         call    .get_n  ;¯®«ãç¨âì à §¬¥à ¢ ᨬ¢®« å è¨à¨­ë ª®¬¯®­¥­â 
  763.         push    eax
  764.         mov     ebx,ed_offset
  765.         add     eax,ebx ;eax = w_off= ed_offset+width
  766.         mov     ebx,ebp ;ed_size
  767.        
  768.         cmp     eax,ebx
  769.         jb      @f
  770.         mov     eax,ed_pos
  771.         sub     ebx,eax
  772.         mov     ecx,ed_offset
  773.         sub     eax,ecx
  774.         jmp     .nxt
  775. @@:     mov     ebx,ed_pos
  776.         push    ebx
  777.         sub     eax,ebx
  778.         mov     ebx,eax ;It is don't optimal
  779.        
  780.         pop     eax     ;ed_pos
  781.         mov     ecx,ed_offset
  782.         sub     eax,ecx
  783.  
  784. .nxt:
  785.         mov     ebp,eax  ;¯à®¢¥àª  ­  ¢ë室 § ªà è¨¢ ¥¬®© ®¡« á⨠§  ¯à¥¤¥«ë ¤«¨­ë
  786.         add     ebp,ebx
  787.         pop     edx
  788.         cmp     ebp,edx
  789.         je      @f
  790.         inc     ebx
  791.  
  792. @@:     mov     edx,ebx
  793.         lea     ebx,[eax*2+eax]
  794.         shl     ebx,1
  795.         add     ebx,ed_left
  796.         inc     ebx
  797.         shl     ebx,16
  798.         lea     ecx,[edx*2+edx]
  799.         shl     ecx,1  
  800.         mov     bx,cx
  801.         mov     edx,ed_color
  802.         call    .draw_bg_eax
  803.         ret
  804.  
  805.  
  806. ;==========================================================
  807. ;=== ®¡à ¡®âª  ¬ëè¨ =======================================
  808. ;==========================================================
  809. .mouse:
  810. pusha
  811. ;----------------------------------------------------------
  812. ;--- ¯®«ãç ¥¬ á®áâ®ï­¨¥ ª­®¯®ª ¬ëè¨ -----------------------
  813. ;----------------------------------------------------------
  814.         mov     eax,37
  815.         mov     ebx,2
  816.         int     0x40
  817. ;----------------------------------------------------------
  818. ;--- ¯à®¢¥à塞 á®áâ®ï­¨¥ ----------------------------------
  819. ;----------------------------------------------------------
  820.         test    eax,1
  821.         jnz     .mouse_left_button
  822.         popa
  823.         ret
  824.  
  825. .mouse_left_button:
  826. ;----------------------------------------------------------
  827. ;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ -----------------------------
  828. ;----------------------------------------------------------
  829.         mov     eax,37
  830.         xor     ebx,ebx
  831.         inc     ebx
  832.         int     0x40
  833. ;----------------------------------------------------------
  834. ;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box -------------
  835. ;----------------------------------------------------------
  836.         mov     ebx,ed_top
  837.         cmp     ax,bx
  838.         jl      ._blur;.mouse_end_no_focus
  839.  
  840.         add     bx,ed_height
  841.         cmp     ax,bx
  842.         jg      ._blur;.mouse_end_no_focus
  843.  
  844.         shr     eax,16
  845.  
  846.         mov     bx,ed_left
  847.         cmp     ax,bx
  848.         jl      ._blur;.mouse_end_no_focus
  849.  
  850.         add     bx,ed_width
  851.         cmp     ax,bx
  852.         jg      ._blur;.mouse_end_no_focus
  853. ;--- ¨§¬¥­ï¥¬ ¯®§¨æ¨î ªãàá®à  ---
  854.         push    eax
  855.         call    .clear_cursor
  856.         pop     eax
  857.         xor     dx,dx
  858.         sub     ax,ed_left
  859.         add     ax,2
  860.         mov     bx,6
  861.         div     bx
  862.         add     ax,ed_offset
  863.         cmp     ax,ed_size
  864.         jna      @f
  865.         mov     ax,ed_size
  866. @@:
  867.         mov     ed_pos,ax
  868.         call    .check_offset
  869.         call    .draw_cursor
  870. ;----------------------------------------------------------
  871. ;--- ¯à®æ¥¤ãà  ãáâ ­®¢ª¨ 䮪ãá  ---------------------------
  872. ;----------------------------------------------------------
  873.         bts     word ed_flags,1
  874.         jc      @f
  875.         call    .draw_cursor
  876.         jmp     .drc
  877.  
  878.  
  879. ._blur:
  880.         test    word ed_flags,ed_always_focus
  881.         jne     @f
  882.         btr     word ed_flags,1 ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  883.         jnc     @f
  884.         call    .clear_cursor
  885. .drc:   call    .draw_border
  886. @@:
  887. popa
  888. ret
  889.  
  890. ;----------------------------------------------------------
  891. ;--- ¯à®æ¥¤ãà  à §¬ë¢ ­¨ï 䮪ãá  --------------------------
  892. ;----------------------------------------------------------
  893. ;.blur:
  894. ;pusha
  895. ;._blur:
  896.         ;btr     ed_flags,1
  897.         ;jnc     @f
  898.         ;call    .draw_border
  899.         ;call    .clear_cursor
  900. ;@@:
  901. ;popa
  902. ;ret
  903. }
  904. ed_figure_only=1000000000000000b
  905. ed_always_focus=100000000000000b
  906. ed_focus=10b
  907. ed_shift_on=1000b
  908. ed_shift=100b
  909. ed_shift_bac=10000b
  910. ed_shift_cl=1111111111100011b
  911. macro draw_edit_boxes start,end
  912. {
  913.         mov     edi,start
  914.         mov     ecx,((end-start)/ed_struc_size)
  915. @@:
  916.         call    edit_box.draw
  917.         add     edi,ed_struc_size
  918.         loop    @b
  919. }
  920.  
  921. macro mouse_edit_boxes start,end
  922. {
  923.         mov     edi,start
  924.         mov     ecx,((end-start)/ed_struc_size)
  925. @@:
  926.         call    edit_box.mouse
  927.         add     edi,ed_struc_size
  928.         loop    @b
  929. }
  930.  
  931. macro key_edit_boxes start,end
  932. {
  933.         mov     edi,start
  934.         mov     ecx,((end-start)/ed_struc_size)
  935. @@:
  936.         call    edit_box.key
  937.         add     edi,ed_struc_size
  938.         loop    @b
  939. }
  940. ed_struc_size=62
  941. struc  edit_box width,left,top,color,focus_border_color,\
  942.        blur_border_color,text_color,max,text,flags,size
  943. {
  944. .width dd width
  945. .left dd left
  946. .top dd top
  947. .color dd color
  948. .focus_border_color dd focus_border_color
  949. .blur_border_color dd blur_border_color
  950. .text_color dd text_color
  951. .max dd max
  952. .text dd text
  953. .flags dw flags+0
  954. .size dd size+0
  955. .pos dd 0
  956. .offset dd 0
  957. .cl_curs_x dd 0
  958. .cl_curs_y dd 0
  959. .shift     dd 0
  960. }
  961.  
  962. macro edit_boxes_set_sys_color start,end,color_table
  963. {
  964.         mov     edi,start
  965.         mov     ecx,((end-start)/ed_struc_size)
  966.         mov     esi,color_table
  967. @@:
  968.         mov     eax,[esi+36]
  969.         mov     ebx,[esi+20]
  970.         mov     ed_focus_border_color,eax
  971.         shr     bh,1
  972.         shr     bl,1
  973.         shr     ah,1
  974.         shr     al,1
  975.         add     ah,bh
  976.         add     al,bl
  977.         ror     eax,16
  978.         ror     ebx,16
  979.         shr     bl,1
  980.         shr     al,1
  981.         add     al,bl
  982.         ror     eax,16
  983.         mov     ed_blur_border_color,eax
  984.         add     edi,ed_struc_size
  985.         loop    @b
  986. }
  987.  
  988. macro draw_edit_box ed_ptr
  989. {
  990.         mov     edi,ed_ptr
  991.         call    edit_box.draw
  992. }
  993.  
  994. macro mouse_edit_box ed_ptr
  995. {
  996.         mov     edi,ed_ptr
  997.         call    edit_box.mouse
  998. }
  999.  
  1000. macro key_edit_box ed_ptr
  1001. {
  1002.         mov     edi,ed_ptr
  1003.         call    edit_box.key
  1004. }