Subversion Repositories Kolibri OS

Rev

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

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