Subversion Repositories Kolibri OS

Rev

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

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