Subversion Repositories Kolibri OS

Rev

Rev 292 | 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.         sub     edx,eax
  300.         cmp     edx,8
  301.         jbe     .add_8
  302.         mov     ebx,edx
  303. ;       add     ebx,8
  304.         jmp     .chk_d
  305.  
  306. .sub_8: cmp     ecx,0
  307.         je      .sub_min
  308.         cmp     ebx,8
  309.         jbe     .sub_min
  310.         sub     ebx,8   ;ebx=ed_offset
  311.         jmp     .chk_d
  312. .sub_min:
  313.         xor     ebx,ebx
  314.         jmp     .chk_d
  315.  
  316. .add_8: mov     ebx,edx
  317. ;       ;-----------  ®â« ¤ª 
  318. ;       pushad
  319. ;       mov     [data_of_code],0
  320. ;       mov eax,ebx;ed_offset
  321. ;       mov edi,data_of_code
  322. ;       call .str
  323. ;       ;à¨á®¢ ­¨¥ ä®­ 
  324. ;       mov eax,13
  325. ;       mov ebx,178*65536+36
  326. ;       mov ecx,28*65536+10
  327. ;       xor edx,edx
  328. ;       int 0x40
  329. ;       ;¢ë¢®¤ §­ ç¥­¨ï ­  íªà ­
  330. ;       mov eax,4
  331. ;       mov ebx,180*65536+30
  332. ;       mov ecx,0x10DDBBCC
  333. ;       mov edx,data_of_code
  334. ;       mov esi,4
  335. ;       int 0x40
  336. ;       popad
  337. ;       ;----------- ®â« ¤ª 
  338.  
  339. .chk_d: mov     ed_offset,ebx
  340.  
  341.         call    .draw_bg
  342.         mov     dword [esp+28],-1
  343.         popad
  344.         ret
  345.  
  346. @@:
  347.         mov     dword [esp+28],0
  348.         popad
  349.         ret
  350.  
  351.  
  352. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  353. ;       mov     ebx,eax
  354. ;       mov     eax,ed_pos
  355. ;       xor     edx,edx
  356. ;       idiv    ebx
  357. ;       xor     edx,edx
  358. ;       imul    eax,ebx
  359. ;       mov     ed_offset,eax
  360. ;       pop     ebx
  361. ;       cmp     ax,bx
  362. ;       je      @f
  363. ;;;;;;;; ¤ ­­ë¥ ¤«ï § ªà è¨¢ ­¨ï ¢á¥© ¯®«®áë ¯àאַ㣮«ì­¨ª 
  364. ;       mov     ebx,ed_left
  365. ;       inc     ebx
  366. ;       shl     ebx,16
  367. ;       mov     bx,ed_width
  368. ;       dec     ebx
  369. ;       mov     edx,ed_color
  370. ;       call    .draw_bg_eax
  371. ;       mov     dword [esp+28],0
  372. ;@@:    popad
  373. ;       ret
  374. ;==========================================================
  375. ;=== ®¡à ¡®âª  ª« ¢¨ âãàë =================================
  376. ;==========================================================
  377. .key:
  378. pusha
  379.         test    word ed_flags,ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  380.         je     .no_figure ;@f
  381.  
  382.         xor     ecx,ecx
  383.         push    eax    
  384.         inc     ecx
  385.         mov     eax,66
  386.         mov     ebx,3
  387.         int     0x40
  388.         test    al,0x03
  389.         je      @f
  390.         or      word ed_flags,ed_shift
  391.  
  392. @@:     pop     eax
  393. ;----------------------------------------------------------
  394. ;--- ¯à®¢¥à塞, çâ® ­ ¦ â® --------------------------------
  395. ;----------------------------------------------------------
  396.         cmp     ah,8
  397.         jz      .backspace
  398.         cmp     ah,0xb6
  399.         jz      .delete
  400.         cmp     ah,176
  401.         jz      .left
  402.         cmp     ah,179
  403.         jz      .right
  404.         cmp     ah,180
  405.         jz      .home
  406.         cmp     ah,181
  407.         jz      .end
  408.         cmp     ah,185  ;insert
  409.         jz      .insert
  410. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  411. ;‡ £«ã誠 ­  ®¡à ¡®âªã ª« ¢¨è ¢¢¥àå ¨ ¢­¨§
  412. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;   
  413.         cmp     ah,177
  414.         jz      .no_figure
  415.         cmp     ah,178
  416.         jz      .no_figure
  417.         cmp     ah,27   ;ESC - ª« ¢¨è  ))
  418.         jz      .no_figure
  419. ;--- ­ ¦ â  ¤àã£ ï ª« ¢¨è  ---
  420.         test    word ed_flags,ed_figure_only  ; ⮫쪮 æ¨äàë ?
  421.         jz      @f
  422.         cmp     ah,'0'
  423.         jb      .no_figure
  424.         cmp     ah,'9'
  425.         ja      .no_figure
  426.  
  427.  
  428. ;¯à®¢¥àª  ­  shift
  429.         test    word ed_flags,ed_shift_on
  430.         je      @f
  431.         ;‚室­ë¥ ¤ ­­ë¥ edx=ed_size;ecx=ed_pos
  432.         push    eax
  433.         mov     edx,ed_size
  434.         mov     ecx,ed_pos
  435.         call    .del_char
  436. ;;;;
  437.         mov     eax,ed_shift_pos
  438.         mov     ebx,ed_size
  439.         sub     ebx,eax
  440.         mov     ed_size,ebx
  441.         pop     eax
  442.  
  443.         ; ¯à®¢¥à塞, ­ å®¤¨âáï «¨ ªãàá®à ¢ ª®­æ¥
  444. @@:     mov     ecx,ed_size
  445.         mov     edx, ed_max
  446.         cmp     ecx,edx
  447.         jae     .no_figure
  448.         mov     ebx, ed_pos
  449.         cmp     ebx,edx
  450.         jl      @f ; ¥á«¨ ¬¥­ìè¥ ¨«¨ à ¢­®
  451. .no_figure:
  452.         popa
  453.         ret
  454. .insert: test   word ed_flags,ed_insert ;not    word ed_insert
  455.          je     .insert_1
  456.          and    word ed_flags,ed_insert_cl
  457.         jmp     .no_figure
  458. .insert_1:
  459.         or      word ed_flags,ed_insert
  460.         jmp     .no_figure
  461. .ins_v:
  462.         pop     eax edi
  463.         dec     dword ed_size    ;processing is insert
  464.         push    edi eax
  465.         sub     esi,ecx
  466.         add     esi,ebx
  467.         mov     edi,esi
  468.         jmp     .In_k
  469. @@:     ; ᤢ¨£ ¥¬ ᨬ¢®«ë ¯®á«¥ ªãàá®à  ¢¯à ¢®
  470.         mov     ecx,ed_size
  471.         push    edi eax
  472.         mov     ebp,edi
  473.         mov     esi,ed_text     ; “ª § â¥«ì ­  ¡ãä¥à
  474.                                 ;ã¤¥¬ à ¡®â âì á® áâப®©
  475.         add     esi,ecx         ;add ed_size ¤®¡ ¢¨¬ max size
  476.         mov     edi,esi
  477.  
  478.         cmp     ecx,ebx         ;…᫨ ã ­ á ¯®§¨æ¨ï ªãàá®à  = ⥪ã饬ã à §¬¥àã ­ ¯¥ç â ­­ëå ᨬ¢®«®¢ â.¥. ªãàá®à á⮨⠢ ª®­æ¥
  479.         je      .In_k
  480.  
  481.         test    word [ebp+36],ed_insert ;IF insert is enable  â.ª. edi ¨§¬¥­¥­  ¤à¥á㥬 ç¥à¥§ ebp
  482.         jne     .ins_v
  483.  
  484.         sub     ecx,ebx         ; ©¤¥¬ ª®«-¢® ᨬ¢®«®¢ ¤«ï ¯¥à¥¤¢¨¦¥­¨ï.
  485.         inc     edi             ;‘¬¥á⨬ ­ è¨ ᨬ¢®«ë ¢ ¯à ¢®
  486.         std
  487.         inc     ecx
  488.    @@: 
  489.         ;--------
  490.         lodsb
  491.         stosb
  492.         ;--------
  493.         loop    @b
  494. .In_k:  cld
  495.         pop eax
  496.         mov al,ah
  497.         stosb
  498.         pop edi
  499. ; ¢áâ ¢«ï¥¬ ª®¤ ª« ¢¨è¨ â㤠, £¤¥ ªãàá®à
  500.         ; 㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ à §¬¥à  ¨ ¯®§¨æ¨¨
  501.         inc      dword ed_size
  502.         inc      dword ed_pos
  503.         call    .draw_all2
  504.         jmp     .shift;.draw_cursor_text
  505. .delete:       
  506.         mov     edx,ed_size
  507.         mov     ecx,ed_pos
  508.         cmp     edx,ecx
  509.         jg      .bac_del
  510.         test    word ed_flags,ed_shift_on
  511.         jne     .del_bac
  512.         popa
  513.         ret
  514. .bac_del:      
  515.         call    .del_char
  516.         jmp     .draw_all
  517.        
  518. ;--- ­ ¦ â  ª« ¢¨è  backspace ---
  519. .backspace:
  520.         ; ¯à®¢¥à塞, ªãàá®à ã «¥¢®£® ªà ï ?
  521.         mov     edx,ed_size
  522.         mov     ecx,ed_pos
  523.         test    ecx,ecx
  524.         jnz     .del_bac
  525.         test    word ed_flags,ed_shift_on
  526.         jne     .bac_del
  527.        
  528.         ;jmp    @b
  529.  
  530.         popa
  531.         ret
  532. .del_bac:
  533.         cmp     edx,ecx ;if ed_pos=ed_size
  534.         je      @f
  535.         dec     ecx
  536.         call    .del_char
  537. @@:     test    word ed_flags,ed_shift_on
  538.         jne     .bac_del
  539.         dec      dword ed_pos
  540.  
  541. .draw_all:
  542.         push    .shift;.draw_cursor_text;eax
  543.  
  544.         test    word ed_flags,ed_shift_on
  545.         je      @f
  546.         mov     eax,ed_shift_pos
  547.         mov     ebx,ed_size
  548.         sub     ebx,eax
  549.         mov     ed_size,ebx
  550.         jmp     .draw_all2
  551.  
  552. @@:     dec      dword ed_size
  553.  
  554. .draw_all2:
  555.         and    word ed_flags,ed_shift_cl
  556.         call    .clear_cursor
  557.         call    .check_offset
  558. ;;;;;;;;;;;;;;;
  559.         cmp     eax,0
  560.         je      @f
  561.         call    .draw_bg
  562.         ret
  563. ;;;;;;;;;;;;;;;
  564. @@:     call    .get_n
  565.         push    eax
  566.         mov     ebx,ed_offset
  567.         add     eax,ebx ;eax = w_off= ed_offset+width
  568.         mov     ebx,ed_size
  569.        
  570.         cmp     eax,ebx
  571.         jb      @f
  572.         mov     eax,ed_pos
  573.         sub     ebx,eax
  574.         mov     ecx,ed_offset
  575.         sub     eax,ecx
  576.         jmp     .nxt
  577. @@:     mov     ebx,ed_pos
  578.         push    ebx
  579.         sub     eax,ebx
  580.         mov     ebx,eax ;It is don't optimal
  581.        
  582.         pop     eax     ;ed_pos
  583.         mov     ecx,ed_offset
  584.         sub     eax,ecx
  585.  
  586. .nxt:
  587.         mov     ebp,eax  ;¯à®¢¥àª  ­  ¢ë室 § ªà è¨¢ ¥¬®© ®¡« á⨠§  ¯à¥¤¥«ë ¤«¨­ë
  588.         add     ebp,ebx
  589.         pop     edx
  590.         cmp     ebp,edx
  591.         je      @f
  592.         inc     ebx
  593.  
  594. @@:     mov     edx,ebx
  595.         lea     ebx,[eax*2+eax]
  596.         shl     ebx,1
  597.         add     ebx,ed_left
  598.         inc     ebx
  599.         shl     ebx,16
  600.         lea     ecx,[edx*2+edx]
  601.         shl     ecx,1  
  602.         mov     bx,cx
  603.         mov     edx,ed_color
  604.         call    .draw_bg_eax
  605.         ret
  606. ;       jmp     .shift
  607. ;--- ­ ¦ â  ª« ¢¨è  left ---
  608. .left:  call    .sh_enable
  609.         mov     ebx,ed_pos
  610.         test    ebx,ebx
  611.         jz      .nd_k
  612.         call    .clear_cursor
  613.         dec      dword ed_pos
  614.         jmp     .nd_k
  615. ;--- ­ ¦ â  ª« ¢¨è  right ---
  616. .right: call    .sh_enable
  617.         mov     ebx,ed_pos
  618.         cmp     ebx,ed_size
  619.         je      .nd_k
  620.         call    .clear_cursor
  621.         inc     dword  ed_pos
  622.         jmp     .nd_k
  623. .home:  call    .sh_enable
  624.         mov     ebx,ed_pos
  625.         test    ebx,ebx
  626.         jz      .nd_k
  627.         call    .clear_cursor
  628.         xor     eax,eax
  629.         mov     ed_pos,eax
  630.         jmp     .nd_k
  631.  
  632. .end:   call    .sh_enable
  633.         mov     ebx,ed_pos
  634.         cmp     ebx,dword ed_size
  635.         je      .nd_k
  636.         call    .clear_cursor
  637.         mov     eax,ed_size
  638.         mov     ed_pos,eax
  639. .nd_k:  call    .check_offset
  640.         ;test   eax,eax
  641.         ;jz     .draw_bg_cursor_text
  642.         call    .draw_cursor
  643.  
  644. .shift: ;;;;;;;SHIFT
  645.                
  646.         call    .draw_bg        ;­¥ ®¯â¨¬ «ì­®
  647.         test      word ed_flags,ed_shift
  648.         je      .f_exit
  649. ;;;;;;SHIFT end
  650.         mov     eax,dword       ed_pos
  651.         mov     ebx,dword       ed_shift_pos
  652.         cmp     eax,ebx
  653.         jae     .sh_n
  654.         push    eax  ;¬¥­ì襥 ¢ eax
  655.         push    ebx  ;¡®«ì襥
  656.         jmp     .sh_n1
  657.                      ;¥á«¨ ¨­ ç¥
  658. .sh_n:  push    ebx  
  659.         push    eax
  660. .sh_n1:
  661. ;        jmp    .draw_all2
  662. ;;;;;;;;;;;;;;;;;;;;;;;;;
  663.         ;call   .clear_cursor
  664.         call    .check_offset
  665.         call    .get_n
  666.         mov     edx,eax ;size of ed_box
  667. ;       push    eax
  668.         mov     ecx,ed_offset
  669.         add     eax,ecx ;eax = w_off= ed_offset+width
  670.         mov     ebp,eax ;save
  671.         pop     ebx     ;¡®«ì襥
  672.         pop     eax     ;¬¥­ì襥
  673.  
  674.        
  675.         cmp     eax,ecx         ;áà ¢­¥­¨¥ á ¬¥­ì襣® á offset.
  676.         jae     .f_f            ;¥á«¨ ¡®«ìè¥
  677.         xor     eax,eax
  678.         cmp     ebp,ebx         ;cà ¢­¨¬ à §¬¥à w_off á ¡®«ì訬
  679.         jb      @f
  680.         sub     ebx,ecx
  681.         jmp     .nxt_f
  682. @@:     mov     ebx,ebp
  683.         sub     ebx,ecx
  684.         jmp     .nxt_f
  685.  
  686. .f_f:  
  687.         sub     eax,ecx
  688.         cmp     ebp,ebx         ;cà ¢­¨¬ à §¬¥à w_off á ¡®«ì訬
  689.         jle     @f
  690.         sub     ebx,ecx
  691.         sub     ebx,eax
  692.         jmp     .nxt_f
  693. @@:
  694.         mov     ebx,ebp
  695.         sub     ebx,ecx
  696.         sub     ebx,eax
  697. .nxt_f:
  698.         mov     edx,ebx
  699.         lea     ebx,[eax*2+eax]
  700.         shl     ebx,1
  701.         add     ebx,ed_left
  702.         inc     ebx
  703.         shl     ebx,16
  704.         lea     ecx,[edx*2+edx]
  705.         shl     ecx,1  
  706.         mov     bx,cx
  707.         mov     edx,shift_color
  708.         call    .draw_bg_eax
  709.         and    word ed_flags,1111111111111011b
  710.         jmp     .draw_cursor_text
  711. ;;;;;;;;;;;;;;;;;;;;;
  712.  
  713. .f_exit:        and    word ed_flags,ed_shift_cl
  714.         jmp     .draw_cursor_text
  715.  
  716. ;¯à®¢¥àª  á®áâ®ï­¨ï shift ¡ë« «¨ ®­ ­ ¦ â à ­ìè¥?
  717. .sh_enable:
  718.         test    word ed_flags,ed_shift
  719.         je      @f
  720.         test    word ed_flags,ed_shift_on
  721.         jne     .sh_ext_en
  722.         push    dword ed_pos
  723.         pop     dword ed_shift_pos
  724.         or      word ed_flags,ed_shift_on
  725.         ret
  726.  
  727. @@:     and     word ed_flags,ed_shift_cl
  728. .sh_ext_en:     ret
  729.  
  730.         ;- 㤠«¥­¨¥ ᨬ¢®« 
  731.         ;‚室­ë¥ ¤ ­­ë¥ edx=ed_size;ecx=ed_pos
  732. .del_char:
  733.         mov     esi,ed_text
  734.  
  735.  
  736.         test    word ed_flags,ed_shift_on
  737.         je      @f
  738.         mov     eax,dword ed_shift_pos
  739.         mov     ebx,esi
  740.         cmp     eax,ecx
  741.         jae     .dh_n
  742.  
  743.         mov     ed_pos,eax      ;çâ® ¡ë ­¥ ¡ë«® ã¡¥£ ­¨ï ªãàá®à 
  744.         mov     ebp,ecx
  745.         sub     ebp,eax
  746.         add     ebx,eax  ;eax ¬¥­ìè¥
  747.         sub     edx,ecx
  748.         add     esi,ecx
  749.  
  750.  
  751.         mov     ed_shift_pos,ebp
  752.         jmp     .del_ch_sh
  753.                      ;¥á«¨ ¨­ ç¥
  754. .dh_n:  
  755.         mov     ebp,eax
  756.         sub     ebp,ecx
  757.         add     ebx,ecx
  758.         sub     edx,eax
  759.         add     esi,eax
  760.         mov     ed_shift_pos,ebp
  761.         jmp     .del_ch_sh
  762.  
  763. @@:     add     esi,ecx ;㪠§ â¥«ì + ᬥ饭¨¥ ª ॠ«ì­®¬ã ¡ãää¥àã
  764.         mov     ebx,esi
  765.         inc     esi
  766.         cld
  767.  
  768.         sub     edx,ecx
  769. .del_ch_sh:
  770.  
  771.         push    edi
  772.         mov     edi,ebx
  773. @@:
  774.         lodsb
  775.         stosb
  776.         dec edx
  777.         jns @b
  778.        
  779.         pop edi
  780.         ret
  781. ;==========================================================
  782. ;=== ®¡à ¡®âª  ¬ëè¨ =======================================
  783. ;==========================================================
  784. .mouse:
  785. pusha
  786. ;----------------------------------------------------------
  787. ;--- ¯®«ãç ¥¬ á®áâ®ï­¨¥ ª­®¯®ª ¬ëè¨ -----------------------
  788. ;----------------------------------------------------------
  789.         mov     eax,37
  790.         mov     ebx,2
  791.         int     0x40
  792. ;----------------------------------------------------------
  793. ;--- ¯à®¢¥à塞 á®áâ®ï­¨¥ ----------------------------------
  794. ;----------------------------------------------------------
  795.         test    eax,1
  796.         jnz     .mouse_left_button
  797. @@:     popa
  798.         ret
  799.  
  800. .mouse_left_button:
  801. ;----------------------------------------------------------
  802. ;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ -----------------------------
  803. ;----------------------------------------------------------
  804.         mov     eax,37
  805.         xor     ebx,ebx
  806.         inc     ebx
  807.         int     0x40
  808. ;----------------------------------------------------------
  809. ;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box -------------
  810. ;----------------------------------------------------------
  811.         mov     ebx,ed_top
  812.         cmp     ax,bx
  813.         jl      ._blur;.mouse_end_no_focus
  814.  
  815.         add     bx,ed_height
  816.         cmp     ax,bx
  817.         jg      ._blur;.mouse_end_no_focus
  818.  
  819.         shr     eax,16
  820.  
  821.         mov     bx,ed_left
  822.         cmp     ax,bx
  823.         jl      ._blur;.mouse_end_no_focus
  824.  
  825.         add     bx,ed_width
  826.         cmp     ax,bx
  827.         jg      ._blur;.mouse_end_no_focus
  828. ;--- ¨§¬¥­ï¥¬ ¯®§¨æ¨î ªãàá®à  ---
  829.         push    eax
  830.         call    .clear_cursor
  831.         pop     eax
  832.         xor     dx,dx
  833.         sub     ax,ed_left
  834.         add     ax,2
  835.         mov     bx,6
  836.         div     bx
  837.         add     ax,ed_offset
  838.         cmp     ax,ed_size
  839.         jna      @f
  840.         mov     ax,ed_size
  841. @@:
  842.         mov     ed_pos,ax
  843.         call    .check_offset
  844.         call    .draw_cursor
  845. ;----------------------------------------------------------
  846. ;--- ¯à®æ¥¤ãà  ãáâ ­®¢ª¨ 䮪ãá  ---------------------------
  847. ;----------------------------------------------------------
  848.         bts     word ed_flags,1
  849.         jc      .mouse_pressed
  850.         call    .draw_cursor
  851.         call    .draw_border
  852. .mouse_pressed:
  853. popa
  854. ret
  855. ;.mouse_end_no_focus:
  856. ;        call    .blur
  857. ;popa
  858. ;ret
  859. ;.blur:
  860. ;pusha
  861. ._blur:
  862.         btr     word ed_flags,1 ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  863.         jnc     @f
  864.         call    .clear_cursor
  865.         call    .draw_border
  866. @@:
  867. popa
  868. ret
  869.  
  870. ;----------------------------------------------------------
  871. ;--- ¯à®æ¥¤ãà  à §¬ë¢ ­¨ï 䮪ãá  --------------------------
  872. ;----------------------------------------------------------
  873. ;.blur:
  874. ;pusha
  875. ;._blur:
  876.         ;btr     ed_flags,1
  877.         ;jnc     @f
  878.         ;call    .draw_border
  879.         ;call    .clear_cursor
  880. ;@@:
  881. ;popa
  882. ;ret
  883. }
  884. ed_figure_only=1000000000000000b
  885. ed_focus=10b
  886. ed_shift_on=1000b
  887. ed_shift=100b
  888. ed_shift_cl=1111111111110011b
  889. macro draw_edit_boxes start,end
  890. {
  891.         mov     edi,start
  892.         mov     ecx,((end-start)/ed_struc_size)
  893. @@:
  894.         call    edit_box.draw
  895.         add     edi,ed_struc_size
  896.         loop    @b
  897. }
  898.  
  899. macro mouse_edit_boxes start,end
  900. {
  901.         mov     edi,start
  902.         mov     ecx,((end-start)/ed_struc_size)
  903. @@:
  904.         call    edit_box.mouse
  905.         add     edi,ed_struc_size
  906.         loop    @b
  907. }
  908.  
  909. macro key_edit_boxes start,end
  910. {
  911.         mov     edi,start
  912.         mov     ecx,((end-start)/ed_struc_size)
  913. @@:
  914.         call    edit_box.key
  915.         add     edi,ed_struc_size
  916.         loop    @b
  917. }
  918. ed_struc_size=62
  919. struc  edit_box width,left,top,color,focus_border_color,\
  920.        blur_border_color,text_color,max,text,flags,size
  921. {
  922. .width dd width
  923. .left dd left
  924. .top dd top
  925. .color dd color
  926. .focus_border_color dd focus_border_color
  927. .blur_border_color dd blur_border_color
  928. .text_color dd text_color
  929. .max dd max
  930. .text dd text
  931. .flags dw flags+0
  932. .size dd size+0
  933. .pos dd 0
  934. .offset dd 0
  935. .cl_curs_x dd 0
  936. .cl_curs_y dd 0
  937. .shift     dd 0
  938. }
  939.  
  940. macro edit_boxes_set_sys_color start,end,color_table
  941. {
  942.         mov     edi,start
  943.         mov     ecx,((end-start)/ed_struc_size)
  944.         mov     esi,color_table
  945. @@:
  946.         mov     eax,[esi+36]
  947.         mov     ebx,[esi+20]
  948.         mov     ed_focus_border_color,eax
  949.         shr     bh,1
  950.         shr     bl,1
  951.         shr     ah,1
  952.         shr     al,1
  953.         add     ah,bh
  954.         add     al,bl
  955.         ror     eax,16
  956.         ror     ebx,16
  957.         shr     bl,1
  958.         shr     al,1
  959.         add     al,bl
  960.         ror     eax,16
  961.         mov     ed_blur_border_color,eax
  962.         add     edi,ed_struc_size
  963.         loop    @b
  964. }