Subversion Repositories Kolibri OS

Rev

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

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