Subversion Repositories Kolibri OS

Rev

Rev 282 | Blame | Last modification | View Log | Download | RSS feed

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