Subversion Repositories Kolibri OS

Rev

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

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