Subversion Repositories Kolibri OS

Rev

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

  1. ; <Lrz> 12.12.2006 ॠ«¨§®¢ « ¯®¤¤¥à¦ªã ª­®¯ª¨ insert ¨ ᥣ®¤ï ª®¬¯®­¥­â ¯®ç⨠ࠡ®â ¥â!!!!
  2. ; <Lrz> 07.12.2006 ¯à®¤®«¦ ¥âáï à ¡®â  ­ ¤ ¯¥à¥à ¡®âª®© ª®¬¯®­¥­â ,¨§¬¥­¥­¨ï¬ ¯®¤¢¥à£«¨áì ¬­®£¨¥ ä㭪樨, ¯¥à¥à ¡®â ­ ¢ë¢®¤ ⥪áâ ,   â ª  ¦¥  «£®à¨â¬ ¢­¥á¥­¨ï ᨬ¢®«®¢.
  3. ; <Lrz> 03.09.2006 ¯® ¢®§¬®¦­®á⨠®âª § «áï ®â 16 ¡¨â­®©  à¨ä¬¥â¨ª¨, ¤®¡ ¢¨« ­®¢ë¥ ¡ £¨
  4. ; <Lrz> 09.08.2006 ¯à®¨§¢¥¤¥­  ®¯â¨¬¨§ æ¨ï à ¡®âë ª®­¯®ª DEL ¨ Backspace, 㬥­ì襭 à §¬¥à ¢ë¯®«­ï¥¬®£® ª®¤ .
  5. ; <Lrz> 21.07.2006 ¤®¡ ¢«¥­  äã­ªæ¨ï ª­®¯ª¨ Del, ⥯¥àì ¬®¦­® 㤠«ïâì ᨬ¢®«ë ¯à¨ ¯®¬®é¨ ¤ ­­®© ª« ¢¨è¨
  6. ; €¢â®à: …¢â¨å®¢ Œ ªá¨¬ (Maxxxx32) email: maxxxxm@mail.ru
  7. ; „ â  ¯®á«¥¤­¨å ¨§¬¥­¥­¨©: 13.06.06 10:40
  8. ;   ¯¨è¨â¥ ¢ ¨á室­®¬ ª®¤¥ ᢮¥© ¯à®£à ¬¬ë use_edit_box,
  9. ; íâ® ¢áâ ¢¨â ­¥®¡å®¤¨¬ë¥ ¯à®æ¥¤ãàë ¢ ª®¤ ¢ è¥© ¯à®£à ¬¬ë.
  10. ;  à®æ¥¤ãàë:
  11. ;   edit_box.draw - ¯®«­ ï ¯¥à¥à¨á®¢ª ;
  12. ;   edit_box.key - ®¡à ¡®âª  ª« ¢¨ âãàë;
  13. ;   edit_box.mouse - ®¡à ¡®âª  ¬ëè¨;
  14. ;   edit_box.focus - ãáâ ­®¢ª  䮪ãá ;
  15. ;   edit_box.blur - ¥£® à §¬ë¢ ­¨¥;
  16. ;   edit_box.get_n - ¯®«ãç¨âì ª®«¨ç¥á⢮ ¯à®à¨á®¢ë¢ ¥¬ëå ᨬ¢®«®¢.
  17. ;  à¨ ¢ë§®¢¥ «î¡ëå ¨§ íâ¨å ¯à®æ¥¤ãà ¢ ॣ¨áâॠedi á«¥¤ã¥â
  18. ; ®áâ ¢¨âì 㪠§ â¥«ì ­  áâàãªâãàã.
  19. ;  à¨¬¥à áâàãªâãàë:
  20. ; some_edit edit_box 100,10,30,0x00ffffff,0,0x00aaaaaa,0,255,some_edit_text
  21. ; ¤«¨­ , ¢ëá®â , ¢¥àå, 梥â ä®­ , 梥â à ¬ª¨, ¥á«¨ ¢ë¡à ­,
  22. ; 梥â à ¬ª¨, ¥á«¨ ­¥ ¢ë¡à ­, ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ ᨬ¢®«®¢,
  23. ; 㪠§ â¥«ì ­  ¡ãä¥à, £¤¥ ¡ã¤ãâ åà ­¨âáï ᨬ¢®«ë. ãä¥à ¤®«¦¥­
  24. ; ®ª ­ç¨¢ âìáï ­ã«¥¬, ­ ¯à¨¬¥à ¥á«¨ ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ 255:
  25. ;  some_edit_text:
  26. ;       rb      256 ;255+1
  27.  
  28. ;  à¨¬¥à ¢ë§®¢  ¯à®æ¥¤ãàë:
  29. ;       mov     edi,some_edit
  30. ;       call    edit_box.draw
  31.  
  32. ;  à¨ ¢ë§®¢¥ ¯à®æ¥¤ãàë edit_box.key ª®¤ ª« ¢¨è¨ ¤®«¦¥­
  33. ; ­ å®¤¨âáï ¢ ah, â® ¥áâì ¯¥à¥¤ ¢ë§®¢®¬ í⮩ ¯à®æ¥¤ãàë ­ ¤® ¢ë§¢ âì
  34. ; 2-ãî á¨á¥¬­ãî äã­ªæ¨î, ­ ¯à¨¬¥à:
  35. ;       mov     eax,2
  36. ;       int     0x40
  37. ;       mov     edi,some_edit1
  38. ;       call    edit_box.key
  39. ;       mov     edi,some_edit2
  40. ;       call    edit_box.key
  41. ;  ¥à¥¤ ¢ë§®¢®¬ ®¡à ¡®â稪  ¬ëè¨ á«¥¤ã¥â ¯à®¢¥à¨âì, ï¥âáï «¨ ®ª­®
  42. ;  ªâ¨¢­ë¬.
  43. ;  …᫨ 饫箪 ¬ëè¨ ¡ë« ¯à®©§¢¥¤¥­ §  ¯à¥¤¥« ¬¨ edit box
  44. ; 䮪ãá â¥àï¥âáï.
  45. macro use_edit_box
  46. {
  47. edit_box:
  48. ed_width        equ [edi]               ;è¨à¨­  ª®¬¯®­¥­â 
  49. ed_left         equ [edi+4]             ;¯®«®¦¥­¨¥ ¯® ®á¨ å
  50. ed_top          equ [edi+8]             ;¯®«®¦¥­¨¥ ¯® ®á¨ ã
  51. ed_color        equ [edi+12]            ;梥â ä®­  ª®¬¯®­¥­â 
  52. ed_focus_border_color   equ [edi+16]    ;梥â à ¬ª¨ ª®¬¯®­¥­â 
  53. ed_blur_border_color    equ [edi+20]    ;梥⠭¥  ªâ¨¢­®£® ª®¬¯®­¥­â 
  54. ed_text_color   equ [edi+24]            ;梥â ⥪áâ 
  55. ed_flags        equ [edi+28]            ;ä« £¨
  56. ed_max  equ [edi+32]                    ;ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ¬®¦­® ¬ ªá¨¬ «ì­® ¢¢¥áâ¨
  57. ed_size equ [edi+36]                    ;ª®«-¢® ᨬ¢®«®¢
  58. ed_pos  equ [edi+40]                    ;¯®§¨æ¨ï ªãàá®à 
  59. ed_offset       equ [edi+44]            ;ᬥ饭¨¥
  60. ed_text equ [edi+48]                    ;㪠§ â¥«ì ­  ¡ãä¥à
  61. cl_curs_x       equ [edi+52]            ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® å
  62. cl_curs_y       equ [edi+56]            ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® ã
  63. ed_insert       equ [edi+60]            ;word
  64. ed_height=14 ; ¢ëá®â 
  65. ;==========================================================
  66. ;=== ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ =================================
  67. ;==========================================================
  68. .draw:
  69. pusha
  70. ;--- à¨á㥬 à ¬ªã ---
  71.         call    .draw_border            ; ”ã­ªæ¨ï áâ ¡¨«ì­ 
  72. .draw_bg_cursor_text:
  73. ;--- ¨§¬¥­ï¥¬ ᬥ饭¨¥, ¥á«¨ ­ ¤® ---
  74.         call    .check_offset           ;¢ëç¨á«¥­¨¥ ¯®§¨æ¨¨ ªãàá®à  áâ ¡¨«ì­ 
  75. ;--- à¨á㥬 ¢­ãâ७­îî ®¡« áâì ---
  76.         call    .draw_bg                ;­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª à ¡®ç¥© ®¡« áâ¨
  77. .draw_cursor_text:
  78. ;--- à¨á㥬 ªãàá®à ---
  79.         ;--- ¬®¦¥â ¥£® ­¥ ­ ¤® à¨á®¢ âì ----
  80.         test    dword ed_flags,1
  81.         je      @f
  82.         call    .draw_cursor
  83. @@:
  84.         call    .draw_text
  85. popa
  86. ret
  87.  
  88. ;----------------------------------------------------------
  89. ;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ⥪áâ  --------------------------
  90. ;----------------------------------------------------------
  91. .draw_text:
  92. ;--- ¢ëç¨á«ï¥¬, ᪮«ìª® ¯®¬¥é ¥âáï ᨬ¢®«®¢ ---
  93. ;--- çâ®¡ë ¬ãá®à ­¥ à¨á®¢ âì ---
  94.         call    .get_n
  95.         mov     esi,ed_size
  96.         mov     ebx,ed_offset
  97.         sub     esi,ebx
  98.         cmp     eax,esi
  99.         jae     @F
  100.         mov     esi,eax         ;çâ®¡ë ­¥ ¢ë室¨âì §  ¯à¥¤¥«ë íªà ­ 
  101. ;--- à¨á㥬 ⥪áâ ---
  102. @@:     mov     eax,4
  103.         mov     ebx,ed_left
  104.         add     ebx,2
  105.         shl     ebx,16
  106.         mov     bx,ed_top
  107.         add     ebx,4
  108.         mov     ecx,ed_text_color
  109.         mov     edx,ed_offset
  110.         add     edx,ed_text
  111.         int     0x40
  112. ret
  113. ;----------------------------------------------------------
  114. ;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ä®­  ----------------------------
  115. ;¢å®¤­ë¥ ¤ ­­ë¥
  116. ;eax
  117. ;----------------------------------------------------------
  118. .draw_bg_eax:
  119. pusha
  120.         mov     ecx,ed_top
  121.         add     ecx,1
  122.         shl     ecx,16
  123.         mov     cx,13
  124. ;       sub     ecx,1
  125.  
  126.         mov     edx,ed_color
  127.         mov     eax,13
  128.         int     0x40
  129. popa
  130. ret
  131.  
  132.         jmp     @f
  133. .draw_bg:
  134. pusha
  135.         mov     ebx,ed_left
  136.         add     ebx,1
  137.         shl     ebx,16
  138.         mov     bx,ed_width
  139.         sub     ebx,1
  140.  
  141. @@:
  142.         mov     ecx,ed_top
  143.         add     ecx,1
  144.         shl     ecx,16
  145.         mov     cx,ed_height
  146.         sub     ecx,1
  147.  
  148.         mov     edx,ed_color
  149.         mov     eax,13
  150.         int     0x40
  151. popa
  152. ret
  153.  
  154. ;----------------------------------------------------------
  155. ;--- ¯à®æ¥¤ãà  ¯®«ã祭¨ï ª®«¨ç¥á⢠ ᨬ¢®«®¢ ¢ ⥪ã饩 é¨à¨­¥ ª®¬¯®­¥­â  --------------
  156. ;----------------------------------------------------------
  157. .get_n:
  158.         xor     edx,edx   ;१ã«ìâ â à á¯®«®£ ¥âáï ¢ ¯ à¥ edx:eax ¢ eax - ®áâ â®ª
  159.         mov     eax,ed_width    ;¯®«ã祬 è¨à¨­ã ª®¬¯®­¥­â 
  160.         sub     eax,4           ;¢ëç⨬ 4
  161.         mov     ebx,6           ;§ £à㧬¨ ¤¥«¨â¥«ì
  162.         div     ebx             ;à §¬¤¥«¨¬ ­  6
  163. ret
  164.  
  165. ;----------------------------------------------------------
  166. ;--- ¯à®æ¥¤ãà  à¨á®¢ ­¨ï ªãàá®à  --------------------------
  167. ;----------------------------------------------------------
  168. .clear_cursor:
  169.         mov     edx,ed_color
  170.         mov     ebx,cl_curs_x
  171.         mov     ecx,cl_curs_y
  172.         jmp     .draw_curs
  173. .draw_cursor:
  174.         mov     edx,ed_text_color
  175. @@:
  176.         mov     ebx,ed_pos
  177.         mov     ecx,ed_offset
  178.         sub     ebx,ecx
  179.  
  180.         lea     ebx,[ebx*2+ebx]
  181.         shl     ebx,1
  182.         ;imul   ebx,6
  183.         add     bx,ed_left
  184.         inc     ebx
  185.         mov     ebp,ebx
  186.         ;push   bx
  187.         shl     ebx,16
  188.         mov     bx,bp
  189.         ;pop    bx
  190.         mov     ecx,ed_top
  191.         add     ecx,2
  192.         mov     ebp,ecx
  193.        
  194.         shl     ecx,16
  195.         mov     cx,bp
  196.         add     cx,ed_height-4
  197.        
  198.         mov     cl_curs_x,ebx
  199.         mov     cl_curs_y,ecx
  200. .draw_curs:              
  201.         mov     eax,38
  202.         int     0x40
  203. ret
  204.  
  205. ;----------------------------------------------------------
  206. ;--- ¯à®æ¥¤ãà  à¨á®¢ ­¨ï à ¬ª¨ ----------------------------
  207. ;----------------------------------------------------------
  208. .draw_border:
  209. ;--- 梥â à ¬ª¨ ---
  210.         test    dword ed_flags,1
  211.         mov     edx,ed_focus_border_color
  212.         jne     @f
  213.         mov     edx,ed_blur_border_color
  214. @@:
  215. ;--- ᢥàåã ---
  216.         mov     eax,38
  217.         mov     ebx,ed_left
  218.         mov     ecx,ebx
  219.         shl     ebx,16
  220.         mov     bx,cx
  221.         add     bx,ed_width
  222.         mov     ecx, ed_top
  223.         mov     esi,ecx
  224.         shl     ecx,16
  225.         mov     cx,si
  226.         int     0x40
  227.  
  228. ;--- á­¨§ã ---
  229.         mov     esi,ecx
  230.         add     ecx,ed_height
  231.         mov     ebp,ecx
  232.         shl     ecx,16
  233.         mov     cx,bp
  234.         int     0x40
  235.  
  236. ;--- á«¥¢  ---
  237.         mov     cx,si
  238.         mov     ebp,ebx
  239.         sub     bx,ed_width
  240.         int     0x40
  241.  
  242. ;--- á¯à ¢  ---
  243.         mov     ebx,ebp
  244.         shl     ebx,16
  245.         mov     bx,bp
  246.         int     0x40
  247. ret
  248. ;----------------------------------------------------------
  249. ;--- ¯à®¢¥àª , § è¥« «¨ ªãàá®à §  £à ­¨æë ¨, ¥á«¨ ­ ¤®, ---
  250. ;--- ¨§¬¥­ï¥¬ ᬥ饭¨¥ ------------------------------------
  251. ;--- eax = 1, ¥á«¨ ­¥ ¨§¬¥­¨«®áì ¨«¨ eax = 0, ¥á«¨
  252. ; ¨§¬¥­¨«®áì
  253. ;----------------------------------------------------------
  254. .check_offset:
  255.         pushad
  256.         push    dword ed_offset          ;á®åà ­¨¬ ᬥ饭¨¥
  257.         call    .get_n                  ;¯®«ã稬 ª®«-¢® ᨬ¢®«®¢ ¢ ¯ à¥ ॣ¨áâ஢ edx:eax
  258.         mov     ebx,eax
  259.         mov     eax,ed_pos
  260.         xor     edx,edx
  261.         idiv    ebx
  262.         xor     edx,edx
  263.         imul    eax,ebx
  264.         mov     ed_offset,eax
  265.         pop     ebx
  266.         cmp     ax,bx
  267.         je      @f
  268. ;;;;;;;; ¤ ­­ë¥ ¤«ï § ªà è¨¢ ­¨ï ¢á¥© ¯®«®áë ¯àאַ㣮«ì­¨ª 
  269.         mov     ebx,ed_left
  270.         inc     ebx
  271.         shl     ebx,16
  272.         mov     bx,ed_width
  273.         dec     ebx
  274.         call    .draw_bg_eax
  275.         mov     dword [esp+28],0
  276. @@:     popad
  277.         ret
  278. ;==========================================================
  279. ;=== ®¡à ¡®âª  ª« ¢¨ âãàë =================================
  280. ;==========================================================
  281. .key:
  282. pusha
  283.         test    dword ed_flags,1 ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  284.         je     .no_figure ;@f
  285. ;----------------------------------------------------------
  286. ;--- ¯à®¢¥à塞, çâ® ­ ¦ â® --------------------------------
  287. ;----------------------------------------------------------
  288.         cmp     ah,8
  289.         jz      .backspace
  290.         cmp     ah,0xb6
  291.         jz      .delete
  292.         cmp     ah,176
  293.         jz      .left
  294.         cmp     ah,179
  295.         jz      .right
  296.         cmp     ah,180
  297.         jz      .home
  298.         cmp     ah,181
  299.         jz      .end
  300.         cmp     ah,185  ;insert
  301.         jz      .insert
  302. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  303. ;‡ £«ã誠 ­  ®¡à ¡®âªã ª« ¢¨è ¢¢¥àå ¨ ¢­¨§
  304. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;   
  305.         cmp     ah,177
  306.         jz      .no_figure
  307.         cmp     ah,178
  308.         jz      .no_figure
  309.         cmp     ah,27   ;ESC - ª« ¢¨è  ))
  310.         jz      .no_figure
  311. ;--- ­ ¦ â  ¤àã£ ï ª« ¢¨è  ---
  312.         test    word ed_flags,ed_figure_only  ; ⮫쪮 æ¨äàë ?
  313.         jz      @f
  314.         cmp     ah,'0'
  315.         jb      .no_figure
  316.         cmp     ah,'9'
  317.         ja      .no_figure
  318. @@:        ; ¯à®¢¥à塞, ­ å®¤¨âáï «¨ ªãàá®à ¢ ª®­æ¥
  319.         mov     edx, ed_max
  320.         mov     ebx, ed_pos
  321.         cmp     ebx,edx
  322.         jl      @f ; ¥á«¨ ¬¥­ìè¥ ¨«¨ à ¢­®
  323. .no_figure:
  324.         popa
  325.         ret
  326. .insert: not    word ed_insert
  327.         jmp     .no_figure
  328. .ins_v:
  329.         pop     eax edi
  330.         dec     dword ed_size    ;processing is insert
  331.         push    edi eax
  332.         sub     esi,ecx
  333.         add     esi,ebx
  334.         mov     edi,esi
  335.         jmp     .In_k
  336. @@:     ; ᤢ¨£ ¥¬ ᨬ¢®«ë ¯®á«¥ ªãàá®à  ¢¯à ¢®
  337.         mov     ecx,ed_size
  338.         push    edi eax
  339.         mov     esi,ed_text     ; “ª § â¥«ì ­  ¡ãä¥à
  340.        
  341.         movzx   eax,word ed_insert
  342.                                 ;ã¤¥¬ à ¡®â âì á® áâப®©
  343.         add     esi,ecx         ;add ed_size ¤®¡ ¢¨¬ max size
  344.         mov     edi,esi
  345.  
  346.         cmp     ecx,ebx         ;…᫨ ã ­ á ¯®§¨æ¨ï ªãàá®à  = ⥪ã饬ã à §¬¥àã ­ ¯¥ç â ­­ëå ᨬ¢®«®¢ â.¥. ªãàá®à á⮨⠢ ª®­æ¥
  347.         je      .In_k
  348.         cmp     ax,-1 ;IF insert is enable
  349.         je      .ins_v
  350.  
  351.         sub     ecx,ebx         ; ©¤¥¬ ª®«-¢® ᨬ¢®«®¢ ¤«ï ¯¥à¥¤¢¨¦¥­¨ï.
  352.         inc     edi             ;‘¬¥á⨬ ­ è¨ ᨬ¢®«ë ¢ ¯à ¢®
  353.         std
  354.         inc     ecx
  355.    @@: 
  356.         ;--------
  357.         lodsb
  358.         stosb
  359.         ;--------
  360.         loop    @b
  361. .In_k:  cld
  362.         pop eax
  363.         mov al,ah
  364.         stosb
  365.         pop edi
  366. ; ¢áâ ¢«ï¥¬ ª®¤ ª« ¢¨è¨ â㤠, £¤¥ ªãàá®à
  367.         ; 㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ à §¬¥à  ¨ ¯®§¨æ¨¨
  368.         inc      dword ed_size
  369.         call    .draw_all2
  370.         inc      dword ed_pos
  371.         jmp    .draw_cursor_text
  372. .delete:       
  373.         mov     edx,ed_size
  374.         mov     ecx,ed_pos
  375.  
  376.         cmp     edx,ecx
  377.         jg      @f
  378.         popa
  379.         ret
  380.        
  381. @@:     call    .del_char
  382.         jmp     .draw_all
  383.        
  384. ;--- ­ ¦ â  ª« ¢¨è  backspace ---
  385. .backspace:
  386.         ; ¯à®¢¥à塞, ªãàá®à ã «¥¢®£® ªà ï ?
  387.         mov     edx,ed_size
  388.         mov     ecx,ed_pos
  389.         test    ecx,ecx
  390.         jnz     @f
  391.         popa
  392.         ret
  393.  
  394. @@:     cmp     edx,ecx ;if ed_pos=ed_size
  395.         je      @f
  396.         dec     ecx
  397.         call    .del_char
  398. @@:
  399.         dec      dword ed_pos
  400.  
  401. .draw_all:
  402. ;       mov     eax,.draw_cursor_text
  403.         push    .draw_cursor_text;eax
  404.         dec      dword ed_size
  405. .draw_all2:
  406.         call    .clear_cursor
  407.         call    .check_offset
  408.         call    .get_n
  409.         push    eax
  410.         mov     ebx,ed_offset
  411.         add     eax,ebx ;eax = w_off= ed_offset+width
  412.         mov     ebx,ed_size
  413.        
  414.         cmp     eax,ebx
  415.         jb      @f
  416.         mov     eax,ed_pos
  417.         sub     ebx,eax
  418.         mov     ecx,ed_offset
  419.         sub     eax,ecx
  420.         jmp     .nxt
  421. @@:     mov     ebx,ed_pos
  422.         push    ebx
  423.         sub     eax,ebx
  424.         mov     ebx,eax ;don't optimal
  425.        
  426.         pop     eax     ;ed_pos
  427.         mov     ecx,ed_offset
  428.         sub     eax,ecx
  429.  
  430. .nxt:
  431.         mov     ebp,eax  ;¯à®¢¥àª  ­  ¢ë室 § ªà è¨¢ ¥¬®© ®¡« á⨠§  ¯à¥¤¥«ë ¤«¨­ë
  432.         add     ebp,ebx
  433.         pop     edx
  434.         cmp     ebp,edx
  435.         je      @f
  436.         inc     ebx
  437.  
  438. @@:     mov     edx,ebx
  439.         lea     ebx,[eax*2+eax]
  440.         shl     ebx,1
  441.         add     ebx,ed_left
  442.         inc     ebx
  443.         shl     ebx,16
  444.         lea     ecx,[edx*2+edx]
  445.         shl     ecx,1  
  446.         mov     bx,cx
  447.         call    .draw_bg_eax
  448.         ret
  449. ;--- ­ ¦ â  ª« ¢¨è  left ---
  450. .left:
  451.         mov     ebx,ed_pos
  452.         test    ebx,ebx
  453.         jz      .nd_k
  454.         call    .clear_cursor
  455.         dec      dword ed_pos
  456.         jmp     .nd_k
  457. ;--- ­ ¦ â  ª« ¢¨è  right ---
  458. .right:
  459.         mov     ebx,ed_pos
  460.         cmp     ebx,ed_size
  461.         je      .nd_k
  462.         call    .clear_cursor
  463.         inc     dword  ed_pos
  464.         jmp     .nd_k
  465. .home:
  466.         mov     ebx,ed_pos
  467.         test    ebx,ebx
  468.         jz      .nd_k
  469.         call    .clear_cursor
  470.         xor     eax,eax
  471.         mov     ed_pos,eax
  472.         jmp     .nd_k
  473.  
  474. .end:
  475.         mov     ebx,ed_pos
  476.         cmp     ebx,dword ed_size
  477.         je      @f
  478.         call    .clear_cursor
  479.         mov     eax,ed_size
  480.         mov     ed_pos,eax
  481. .nd_k:  call    .check_offset
  482.         test    eax,eax
  483.         jz      .draw_bg_cursor_text
  484.         call    .draw_cursor
  485. @@:
  486. popa
  487. ret
  488.         ;- 㤠«¥­¨¥ ᨬ¢®« 
  489. .del_char:
  490.         mov     esi,ed_text
  491.         add     esi,ecx
  492.  
  493.         mov     ebx,esi
  494.         inc     esi
  495.         cld
  496.  
  497.         sub     edx,ecx
  498.         mov     ecx,edx
  499.         push    edi
  500.         mov     edi,ebx
  501. @@:
  502.         lodsb
  503.         stosb
  504.         dec ecx
  505.         jns @b
  506.        
  507.         pop edi
  508.         ret
  509. ;==========================================================
  510. ;=== ®¡à ¡®âª  ¬ëè¨ =======================================
  511. ;==========================================================
  512. .mouse:
  513. pusha
  514. ;----------------------------------------------------------
  515. ;--- ¯®«ãç ¥¬ á®áâ®ï­¨¥ ª­®¯®ª ¬ëè¨ -----------------------
  516. ;----------------------------------------------------------
  517.         mov     eax,37
  518.         mov     ebx,2
  519.         int     0x40
  520. ;----------------------------------------------------------
  521. ;--- ¯à®¢¥à塞 á®áâ®ï­¨¥ ----------------------------------
  522. ;----------------------------------------------------------
  523.         test    eax,1
  524.         jnz     .mouse_left_button
  525. ;       or      eax,1
  526. ;       jc      @f
  527. ;       btr     dword ed_flags,2
  528. @@:     popa
  529.         ret
  530.  
  531. .mouse_left_button:
  532. ;----------------------------------------------------------
  533. ;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ -----------------------------
  534. ;----------------------------------------------------------
  535.         mov     eax,37
  536.         xor     ebx,ebx
  537.         inc     ebx
  538.         int     0x40
  539. ;----------------------------------------------------------
  540. ;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box -------------
  541. ;----------------------------------------------------------
  542.         mov     ebx,ed_top
  543.         cmp     ax,bx
  544.         jl      ._blur;.mouse_end_no_focus
  545.  
  546.         add     bx,ed_height
  547.         cmp     ax,bx
  548.         jg      ._blur;.mouse_end_no_focus
  549.  
  550.         shr     eax,16
  551.  
  552.         mov     bx,ed_left
  553.         cmp     ax,bx
  554.         jl      ._blur;.mouse_end_no_focus
  555.  
  556.         add     bx,ed_width
  557.         cmp     ax,bx
  558.         jg      ._blur;.mouse_end_no_focus
  559. ;--- ¨§¬¥­ï¥¬ ¯®§¨æ¨î ªãàá®à  ---
  560.         push    eax
  561.         call    .clear_cursor
  562.         pop     eax
  563.         xor     dx,dx
  564.         sub     ax,ed_left
  565.         add     ax,2
  566.         mov     bx,6
  567.         div     bx
  568.         add     ax,ed_offset
  569.         cmp     ax,ed_size
  570.         jna      @f
  571.         mov     ax,ed_size
  572. @@:
  573.         mov     ed_pos,ax
  574.         call    .check_offset
  575. ;       test    eax,eax
  576. ;       jz      .draw_bg_cursor_text
  577.         call    .draw_cursor
  578.  
  579.         call    .focus
  580.  
  581. .mouse_pressed:
  582. popa
  583. ret
  584. ;.mouse_end_no_focus:
  585. ;        call    .blur
  586. ;popa
  587. ;ret
  588. ;----------------------------------------------------------
  589. ;--- ¯à®æ¥¤ãà  ãáâ ­®¢ª¨ 䮪ãá  ---------------------------
  590. ;----------------------------------------------------------
  591. .blur:
  592. pusha
  593. ._blur:
  594.         btr     dword ed_flags,0
  595.         jnc     @f
  596.         call    .clear_cursor
  597.         jmp     .blur_end
  598. .focus:
  599. pusha
  600.         bts     dword ed_flags,0
  601.         jc      @f
  602.         call    .draw_cursor
  603. .blur_end:
  604.         call    .draw_border
  605. @@:
  606. popa
  607. ret
  608.  
  609. ;----------------------------------------------------------
  610. ;--- ¯à®æ¥¤ãà  à §¬ë¢ ­¨ï 䮪ãá  --------------------------
  611. ;----------------------------------------------------------
  612. ;.blur:
  613. ;pusha
  614. ;._blur:
  615.         ;btr     ed_flags,1
  616.         ;jnc     @f
  617.         ;call    .draw_border
  618.         ;call    .clear_cursor
  619. ;@@:
  620. ;popa
  621. ;ret
  622. }
  623. ed_figure_only=1000000000000000b
  624. ed_focus=10b
  625. macro draw_edit_boxes start,end
  626. {
  627.         mov     edi,start
  628.         mov     ecx,((end-start)/ed_struc_size)
  629. @@:
  630.         call    edit_box.draw
  631.         add     edi,ed_struc_size
  632.         loop    @b
  633. }
  634.  
  635. macro mouse_edit_boxes start,end
  636. {
  637.         mov     edi,start
  638.         mov     ecx,((end-start)/ed_struc_size)
  639. @@:
  640.         call    edit_box.mouse
  641.         add     edi,ed_struc_size
  642.         loop    @b
  643. }
  644.  
  645. macro key_edit_boxes start,end
  646. {
  647.         mov     edi,start
  648.         mov     ecx,((end-start)/ed_struc_size)
  649. @@:
  650.         call    edit_box.key
  651.         add     edi,ed_struc_size
  652.         loop    @b
  653. }
  654. ed_struc_size=62
  655. struc  edit_box width,left,top,color,focus_border_color,\
  656.        blur_border_color,text_color,max,text,flags,size
  657. {
  658. .width dd width
  659. .left dd left
  660. .top dd top
  661. .color dd color
  662. .focus_border_color dd focus_border_color
  663. .blur_border_color dd blur_border_color
  664. .text_color dd text_color
  665. .flags dd flags+0
  666. .max dd max
  667. .size dd size+0
  668. .pos dd 0
  669. .offset dd 0
  670. .text dd text
  671. .cl_curs_x dd 0
  672. .cl_curs_y dd 0
  673. .insert    dw 0
  674. }
  675.  
  676. macro edit_boxes_set_sys_color start,end,color_table
  677. {
  678.         mov     edi,start
  679.         mov     ecx,((end-start)/ed_struc_size)
  680.         mov     esi,color_table
  681. @@:
  682.         mov     eax,[esi+36]
  683.         mov     ebx,[esi+20]
  684.         mov     ed_focus_border_color,eax
  685.         shr     bh,1
  686.         shr     bl,1
  687.         shr     ah,1
  688.         shr     al,1
  689.         add     ah,bh
  690.         add     al,bl
  691.         ror     eax,16
  692.         ror     ebx,16
  693.         shr     bl,1
  694.         shr     al,1
  695.         add     al,bl
  696.         ror     eax,16
  697.         mov     ed_blur_border_color,eax
  698.         add     edi,ed_struc_size
  699.         loop    @b
  700. }