Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;Basic macros for use editbox                             ;
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  4.  
  5.  
  6. macro use_editbox_draw
  7. {
  8. edit_box:
  9. .draw:
  10.         pushad
  11. .draw_1:        
  12. ;--- à¨á㥬 à ¬ªã ---
  13.         mov     edi,dword [esp+36]
  14.         call    .draw_border            ; ”ã­ªæ¨ï áâ ¡¨«ì­ 
  15. .draw_bg_cursor_text:
  16. ;--- ¨§¬¥­ï¥¬ ᬥ饭¨¥, ¥á«¨ ­ ¤® ---
  17.         call    .check_offset           ;¢ëç¨á«¥­¨¥ ¯®§¨æ¨¨ ªãàá®à  áâ ¡¨«ì­ 
  18. ;--- à¨á㥬 ¢­ãâ७­îî ®¡« áâì ---
  19.         call    .draw_bg                ;­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª à ¡®ç¥© ®¡« áâ¨
  20. ;---- à¨á㥬 ¢ë¤¥«¥­¨¥, ¯® shift ¥á«¨ ¥áâì
  21.         call    .draw_shift
  22. .draw_cursor_text:
  23. ;--- à¨á㥬 ªãàá®à ---
  24.         ;--- ¬®¦¥â ¥£® ­¥ ­ ¤® à¨á®¢ âì ----
  25.         test    word ed_flags,ed_focus
  26.         jz      @f
  27.         call    .draw_cursor
  28. @@:
  29.         call    .draw_text
  30. ;        ret
  31. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  32. ;Ž¡é¨© ¢ë室 ¨§ editbox ¤«ï ¢á¥å ä㭪権 ¨ ¯®áâ ®¡à ¡®â稪®¢;;
  33. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  34. .editbox_exit:
  35.         popad
  36.         ret 4
  37. }
  38.  
  39.  
  40. macro use_editbox_key
  41. {
  42. ;==========================================================
  43. ;=== ®¡à ¡®âª  ª« ¢¨ âãàë =================================
  44. ;==========================================================
  45. edit_box_key:
  46. pushad
  47.         mov     edi,dword [esp+36]
  48.         test    word ed_flags,ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  49.         jz      edit_box.editbox_exit
  50.         test    word ed_flags,ed_mouse_on or ed_disabled
  51.         jnz     edit_box.editbox_exit
  52.  
  53. ;--------------------------------------
  54. ; this code for Win-keys, works with
  55. ; kernel SVN r.3356 or later
  56.         push    eax
  57.         push    ebx
  58.         mcall   66,3
  59.         test    ax,0x200        ; LWin
  60.         jnz     .win_key_pressed
  61.         test    ax,0x400        ; RWin
  62.         jz      @f
  63. .win_key_pressed:
  64.         pop     ebx
  65.         pop     eax
  66.         jmp     edit_box.editbox_exit
  67. @@:
  68.         pop     ebx
  69.         pop     eax
  70. ;--------------------------------------
  71. ;à®¢¥àª  ­ ¦ â shift ?
  72.         call    edit_box_key.check_shift_ctrl_alt
  73. ;----------------------------------------------------------
  74. ;--- ¯à®¢¥à塞, çâ® ­ ¦ â® --------------------------------
  75. ;----------------------------------------------------------
  76.         cmp     ah,8
  77.         jz      edit_box_key.backspace
  78.         cmp     ah,0xb6
  79.         jz      edit_box_key.delete
  80.         cmp     ah,176
  81.         jz      edit_box_key.left
  82.         cmp     ah,179
  83.         jz      edit_box_key.right
  84.         cmp     ah,180
  85.         jz      edit_box_key.home
  86.         cmp     ah,181
  87.         jz      edit_box_key.end
  88.         cmp     ah,185  ;insert
  89.         jz      edit_box_key.insert
  90. ; ª®¬¡¨­ æ¨¨ Ctrl + ª« ¢¨è 
  91.         test    word ed_flags,ed_ctrl_on
  92.         jz      @f
  93. ; ¯à®¢¥àª  ᪠­ª®¤ 
  94.         ror     eax,8
  95.         cmp     ah,46 ; Ctrl + C
  96.         je      edit_box_key.ctrl_c
  97.         cmp     ah,47 ; Ctrl + V
  98.         je      edit_box_key.ctrl_v
  99.         rol     eax,8
  100. @@:
  101. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  102. ;‡ £«ã誠 ­  ®¡à ¡®âªã ª« ¢¨è ¢¢¥àå ¨ ¢­¨§ â.¥. ¯à¨ ®¡­ à㦥­¨¨ íâ¨å ª®¤®¢ ¯à®¨á室¨â ¢ë室 ¨§ ®¡à ¡®â稪 
  103. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  104. use_key_no_process   up,down,esc,enter,tab,numl,capsl,scrolll
  105. ;--- ­ ¦ â  ¤àã£ ï ª« ¢¨è  ---
  106. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  107. ;à®¢¥àª  ãáâ ­®¢«¥­ «¨ ä« £ ¯à¨ ª®â®à®¬ ­ã¦­® ¢ë¢®¤¨âì ⮫쪮 æ¨äàë ¢ ­ã¦­®¬ ¡®ªá¥, ¥á«¨ â ª®© ­¥®¡å®¤¨¬®á⨠­¥â, ­ã¦­® § ª®¬¥­â¨à®¢ âì ¬ ªà®á
  108. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  109. use_key_figures_only
  110. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  111. ;¯à®¢¥àª  ­  shift, ¡ë« «¨ ­ ¦ â
  112. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  113. are_key_shift_press
  114. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  115. ; ¯à®¢¥à塞, ­ å®¤¨âáï «¨ ªãàá®à ¢ ª®­æ¥ + ¤ «ì­¥©è ï ®¡à ¡®âª 
  116. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  117. are_key_cur_end
  118. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  119. ;Ž¡à ¡®âª  ª« ¢¨è insert,delete.backspace,home,end,left,right
  120. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  121. use_work_key
  122. }
  123.  
  124. macro use_editbox_mouse
  125. {
  126. ;==========================================================
  127. ;=== ®¡à ¡®âª  ¬ëè¨ =======================================
  128. ;==========================================================
  129. ;save for stdcall ebx,esi,edi,ebp
  130. edit_box_mouse:
  131. pushad
  132.         mov     edi,dword [esp+36]
  133.         test    word ed_flags,ed_disabled
  134.         jnz     edit_box.editbox_exit
  135. ;debug
  136. ;----------------------------------------------------------
  137. ;--- ¯®«ãç ¥¬ á®áâ®ï­¨¥ ª­®¯®ª ¬ëè¨ -----------------------
  138. ;----------------------------------------------------------
  139.         mcall   37,2
  140. ;----------------------------------------------------------
  141. ;--- ¯à®¢¥à塞 á®áâ®ï­¨¥ ----------------------------------
  142. ;----------------------------------------------------------
  143.         test    eax,1
  144.         jnz     edit_box_mouse.mouse_left_button
  145.         and     word ed_flags,ed_mouse_on_off
  146.         mov     ebx,dword ed_mouse_variable
  147.         push    0
  148.         pop     dword [ebx]
  149. ;        mov     dword [ebx],ebx
  150.         jmp     edit_box.editbox_exit
  151. .mouse_left_button:
  152. ;----------------------------------------------------------
  153. ;--- ¡«®ª¨à®¢ª  ®â 䮪ãá¨à®¢ª¨ ¢ ¤àã£¨å ¡®ªá å ¯à¨ ¯®¯ ¤ ­¨¨ ­  ­¨å ªãàá®à 
  154. ;----------------------------------------------------------
  155.         mov     eax,dword ed_mouse_variable
  156.         push    dword [eax]
  157.         pop     eax
  158.         test    eax,eax
  159.         jz      @f
  160.         cmp     eax,edi
  161.         je      @f
  162.         jmp     edit_box_mouse._blur
  163. ;----------------------------------------------------------
  164. ;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® 0 â.¥ ¢á¥© ®¡« á⨠íªà ­ 
  165. ;----------------------------------------------------------
  166. @@:     mcall   37,1
  167. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  168. ;”ã­ªæ¨ï ®¡à ¡®âª¨  ¬ë誨 ¯®«ã祭¨¥ ª®®à¤¨­ â ¨ ¯à®¢¥àª  ¨å + ¢ë¤¥«¥­¨ï
  169. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  170. use_work_mouse
  171. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  172. ;Ž¡é¨¥ ä㭪樨 ®¡à ¡®âª¨
  173. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  174. use_general_func
  175. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  176. ;”㭪樨 ¤«ï à ¡®âë á key
  177. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  178. use_key_func
  179. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  180. ;”㭪樨 ¤«ï à ¡®âë á mouse
  181. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  182. use_mouse_func
  183. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  184. ;Bit mask from editbox
  185. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  186. }
  187.  
  188.  
  189. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  190. ;­¨¦¥ à á¯®«®¦¥­ë ä㭪樨 ª®â®à묨 ॠ«¨§ã¥âáï ¢¥áì  «£®à¨â¬
  191. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  192. ;Œ ªà®á ¤«ï ¢ë¢®¤  ®á­®¢­ëå ä㭪権 ª®â®àë¥ ¨á¯®«ì§ãîâáï ¡®ªá®¬
  193. macro use_general_func
  194. {
  195. ;debug_func
  196. ;----------------------------------------------------------
  197. ;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ¢ë¤¥«¥­­®© ç á⨠-----------------
  198. ;----------------------------------------------------------
  199. edit_box.draw_shift:
  200.         test    word ed_flags,ed_shift_bac ;ãáâ ­®¢ª  ä« £ , ¢ë¤¥«¥­­®© ®¡« áâ¨
  201.         jz      @f
  202.         mov     ebp,shift_color
  203.         mov     ebx,dword       ed_shift_pos
  204.         call    edit_box_key.sh_cl_
  205. @@:     ret
  206. ;----------------------------------------------------------
  207. ;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ⥪áâ  --------------------------
  208. ;----------------------------------------------------------
  209. edit_box.draw_text:
  210. ;--- ¢ëç¨á«ï¥¬, ᪮«ìª® ¯®¬¥é ¥âáï ᨬ¢®«®¢ ---
  211. ;--- çâ®¡ë ¬ãá®à ­¥ à¨á®¢ âì ---
  212.         call    edit_box.get_n
  213.         mov     esi,ed_size
  214.         mov     ebx,ed_offset
  215.         sub     esi,ebx
  216.         cmp     eax,esi
  217.         jae     @F
  218.         mov     esi,eax         ;çâ®¡ë ­¥ ¢ë室¨âì §  ¯à¥¤¥«ë íªà ­ 
  219. ;--- à¨á㥬 ⥪áâ ---
  220. @@:     mov     eax,4
  221.         mov     ebx,ed_left
  222.         mov     edx,ed_offset
  223.         add     ebx,2
  224.         shl     ebx,16
  225.         add     ebx,ed_top
  226.         mov     ecx,ed_text_color
  227.         add     ebx,4
  228.         add     edx,ed_text
  229.                 test    word ed_flags,ed_pass
  230.                 jz      @f
  231.                 call    edit_box.draw_password
  232.                 jmp     .end_f
  233. @@:
  234.         mcall
  235. .end_f:
  236. ret
  237.  
  238. txt_pass db '*',0
  239.  
  240. proc edit_box.draw_password
  241. locals
  242.         s_len dw ? ;¤«¨­  ¢ë¢®¤¨¬®£® ⥪áâ 
  243. endl
  244.         cmp esi,1
  245.         jl .end_f ;¥á«¨ áâப  ¯ãáâ ï
  246.         mov [s_len],si
  247.         xor esi,esi
  248.         inc esi
  249.         lea edx,[txt_pass]
  250. @@:
  251.         mcall
  252.         add ebx,6 shl 16 ;¤®¡ ¢«ï¥¬ áâ ­¤ àâ­ãî è¨à¨­ã ᨬ¢®« 
  253.         dec word[s_len]
  254.         cmp word[s_len],0
  255.         jg @b
  256. .end_f:
  257. ret
  258. endp
  259. ;----------------------------------------------------------
  260. ;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ä®­  ----------------------------
  261. ;¢å®¤­ë¥ ¤ ­­ë¥
  262. ;eax
  263. ;edx - color
  264. ;----------------------------------------------------------
  265.  
  266. edit_box.draw_bg:
  267.         mov     ebx,ed_left
  268.         add     ebx,1
  269.         mov     edx,ed_color
  270.         test    word ed_flags, ed_disabled
  271.         jz      @f
  272.         mov     edx, 0x00cacaca         ; TODO: add new value disabled_color to editbox struct
  273.   @@:
  274.         shl     ebx,16
  275.         add     ebx,ed_width
  276.         sub     ebx,1
  277. ;¢å®¤ ⮫쪮 梥â edx
  278. edit_box.draw_bg_eax:
  279.         mov     ecx,ed_top
  280.         mov     eax,13
  281.         add     ecx,1
  282.         shl     ecx,16
  283.         add     ecx,ed_height
  284.         dec     ecx
  285.         mcall
  286. ret
  287. ;----------------------------------------------------------
  288. ;--- ¯à®æ¥¤ãà  ¯®«ã祭¨ï ª®«¨ç¥á⢠ ᨬ¢®«®¢ ¢ ⥪ã饩 è¨à¨­¥ ª®¬¯®­¥­â 
  289. ;----------------------------------------------------------
  290. edit_box.get_n:
  291.         mov     eax,ed_width    ;¯®«ã祬 è¨à¨­ã ª®¬¯®­¥­â 
  292.         xor     edx,edx   ;१ã«ìâ â à á¯®« £ ¥âáï ¢ ¯ à¥ edx:eax ¢ eax - ®áâ â®ª
  293.         sub     eax,4           ;¢ëç⥬ 4
  294.         mov     ebx,6           ;§ £à㧨¬ ¤¥«¨â¥«ì
  295.         div     ebx             ;à §¤¥«¨¬ ­  6
  296. ret
  297. ;----------------------------------------------------------
  298. ;--- ¯à®æ¥¤ãà  à¨á®¢ ­¨ï ªãàá®à  --------------------------
  299. ;----------------------------------------------------------
  300. ;¢å®¤­ë¥ ebp- 梥â
  301. edit_box.clear_cursor:
  302.         mov     edx,ebp
  303.         mov     ebx,cl_curs_x
  304.         mov     ecx,cl_curs_y
  305.         jmp     edit_box.draw_curs
  306. edit_box.draw_cursor:
  307.         mov     edx,ed_text_color
  308.         mov     ebx,ed_pos
  309.         mov     ecx,ed_offset
  310.         sub     ebx,ecx
  311.  
  312.         lea     ebx,[ebx*2+ebx]
  313.         shl     ebx,1
  314.         ;imul   ebx,6
  315.         add     ebx,ed_left
  316.         mov     ecx,ed_top
  317.         inc     ebx
  318.         add     ecx,2
  319.         mov     ebp,ebx
  320.         shl     ebx,16
  321.         mov     bx,bp
  322.         mov     ebp,ecx
  323.  
  324.         shl     ecx,16
  325.         mov     cx,bp
  326.         add     ecx,ed_height-4
  327.  
  328.         mov     cl_curs_x,ebx
  329.         mov     cl_curs_y,ecx
  330. edit_box.draw_curs:
  331.         mcall   38
  332. ret
  333. ;----------------------------------------------------------
  334. ;--- ¯à®æ¥¤ãà  à¨á®¢ ­¨ï à ¬ª¨ ----------------------------
  335. ;----------------------------------------------------------
  336. edit_box.draw_border:
  337. ;--- 梥â à ¬ª¨ ---
  338.         test    word ed_flags,ed_focus
  339.         mov     edx,ed_focus_border_color
  340.         jne     @f
  341.         mov     edx,ed_blur_border_color
  342. @@:
  343. ;--- ᢥàåã ---
  344.         mov     eax,38
  345.         mov     ebx,ed_left
  346.         mov     ecx,ebx
  347.         shl     ebx,16
  348.         mov     bx,cx
  349.         add     ebx,ed_width
  350.         mov     ecx,ed_top
  351.         mov     esi,ecx
  352.         shl     ecx,16
  353.         mov     cx,si
  354.         mcall
  355. ;--- á­¨§ã ---
  356.         mov     esi,ecx
  357.         add     ecx,ed_height
  358.         mov     ebp,ecx
  359.         shl     ecx,16
  360.         mov     cx,bp
  361.         mcall
  362. ;--- á«¥¢  ---
  363.         mov     cx,si
  364.         mov     ebp,ebx
  365.         sub     ebx,ed_width
  366.         mcall
  367. ;--- á¯à ¢  ---
  368.         mov     ebx,ebp
  369.         shl     ebx,16
  370.         mov     bx,bp
  371.         mcall
  372. ret
  373. ;----------------------------------------------------------
  374. ;--- ¯à®¢¥àª , § è¥« «¨ ªãàá®à §  £à ­¨æë ¨, ¥á«¨ ­ ¤®, ---
  375. ;--- ¨§¬¥­ï¥¬ ᬥ饭¨¥ ------------------------------------
  376. ;--- ¥á«¨ ᬥ饭¨¥ ¡ë«®, ãáâ ­®¢ª  ä« £  ed_offset_cl, ¨­ ç¥,
  377. ; ¥á«¨ ­¨ç¥£® ­¥ ¨§¬¥­¨«®áì, â® ¢ëáâ ¢«¥­¨¥ ed_offset_fl
  378. ; ¢ ®¡é¥© ¡¨â®¢®© ¬ âà¨æ¥ á®áâ®ï­¨ï ª®¬¯®­¥­â®¢ word ed_flags
  379. ;----------------------------------------------------------
  380. edit_box.check_offset:
  381. pushad
  382.         mov     ecx,ed_pos
  383.         mov     ebx,ed_offset
  384.         cmp     ebx,ecx
  385.         ja      edit_box.sub_8
  386.  
  387.         push    ebx
  388.         call    edit_box.get_n  ;¯®«ã稬 ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ã¬¥é îâáï ¢ è¨à¨­¥ ª®¬¯®­¥­â , ¢ ¯ à¥ ॣ¨áâ஢ edx:eax
  389.         pop     ebx
  390.         mov     edx,ebx
  391.         add     edx,eax         ;ed_offset+width editbox
  392.         inc     edx             ;­¥®¡å®¤¨¬® ¤«ï ­®à¬ «ì­®£® ¯®«®¦¥­¨ï ªãàá®à  ¢ ªà ©­¥© «¥¢®© ¯®§¨æ¨¨
  393.         cmp     edx,ecx
  394.         ja      @f
  395.  
  396.         mov     edx,ed_size
  397.         cmp     edx,ecx
  398.         je      edit_box.add_end
  399.  
  400.         sub     edx,ecx
  401.         cmp     edx,8
  402.         jbe     edit_box.add_8
  403.         add     ebx,8
  404.         jmp     edit_box.chk_d
  405.  
  406. edit_box.sub_8:
  407.         test    ecx,ecx
  408.         jz      edit_box.sub_min
  409.         cmp     ebx,8
  410.         jbe     edit_box.sub_min
  411.         sub     ebx,8   ;ebx=ed_offset
  412.         jmp     edit_box.chk_d
  413. edit_box.sub_min:
  414.         xor     ebx,ebx
  415.         jmp     edit_box.chk_d
  416.  
  417. edit_box.add_end:sub    edx,eax
  418.         mov     ebx,edx
  419.         jmp     edit_box.chk_d
  420. edit_box.add_8: add     ebx,edx
  421. edit_box.chk_d: mov     ed_offset,ebx
  422.         call    edit_box.draw_bg
  423.         and     word ed_flags,ed_offset_cl
  424. edit_ex
  425. @@:
  426.         or      word ed_flags,ed_offset_fl
  427.  
  428. edit_ex
  429.  
  430. align 4
  431. proc edit_box_set_text, edit:dword, text:dword
  432. pushad
  433.         mov edi,dword[edit]
  434.         mov ecx,ed_max
  435.         inc ecx ;ãç¨â뢠¥¬ ¡ã¤ã饥 ®¡à¥§ ­¨¥ áâப¨ ¤«ï ascii 0
  436.         mov edi,dword[text]
  437.         xor al,al
  438.         cld
  439.         repne scasb ;¯®¨áª ¢ áâப¥ edi ᨬ¢®«  al
  440.         mov ecx,edi ;ecx = text + ¬¨­. §­ ç¥­¨¥ ¨§: 1) ed_max ¨«¨ 2) ¤«¨­ë áâப¨ text
  441.  
  442.         mov edi,dword[edit]
  443.         mov esi,dword[text]
  444.         sub ecx,esi ;ecx = ¤«¨­  áâப¨ text (­® ­¥ ¡®«ìè¥ ç¥¬ ed_max)
  445.         dec ecx
  446.         mov ed_size,ecx ;áâ ¢¨¬ ­®¢ë© à §¬¥à áâப¨
  447.         mov ed_pos,ecx ;áâ ¢¨¬ ªãàá®à ¢ ª®­¥æ ­®¢®© áâப¨
  448.         and word ed_flags,ed_shift_cl ;á­¨¬ ¥¬ ¢ë¤¥«¥­¨¥ ¥á«¨ ®­® ¡ë«®
  449.         mov edi,ed_text
  450.         repne movsb ;ª®¯¨à®¢ ­¨¥ ⥪á⮢®© áâப¨ text ¢ edit_box
  451.         mov byte[edi],0 ;áâ ¢¨¬ ascii 0 ¢ ª®­æ¥ áâப¨
  452. popad
  453. ret
  454. endp
  455. }
  456.  
  457. macro use_key_func
  458. {
  459. ;Ž¡à ¡®âª  Shift ¤«ï á­ïâ¨ï ¢ë¤¥«¥­¨ï ­¥¨§¢¥áâ­®© ®¡« áâ¨
  460. edit_box_key.shift: ;;;;;;;SHIFT
  461.         test    word ed_flags,ed_shift
  462.         je      edit_box_key.f_exit
  463.  
  464. @@:     mov     ebp,shift_color
  465.         or      word ed_flags,ed_shift_bac ;ãáâ ­®¢ª  ä« £ , ¢ë¤¥«¥­­®© ®¡« áâ¨
  466.         mov     ebx,dword       ed_shift_pos
  467.         call    edit_box_key.sh_cl_
  468.         jmp     edit_box.draw_cursor_text
  469. ;;;;;;;;;;;;;;;;;;;;;
  470. edit_box_key.f_exit:
  471.         call    edit_box.check_offset
  472.         and     word ed_flags,ed_shift_cl
  473.         call    edit_box_key.enable_null
  474.         jmp     edit_box.draw_cursor_text
  475. edit_box_key.sh_cl_:
  476. ;;;;;;SHIFT end
  477. ;®¡à ¡®âª  ®ç¨á⪨, ¯à¨ «¥¢®¬ - ¯à ¢®¬ ¤¢¨¦¥­¨¨ ¢ë¤¥«¥­¨ï
  478. ;¤«ï ®¡à ¡®âª¨ á­ïâ¨ï ¢ë¤¥«¥­¨ï
  479. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  480.         mov     eax,dword       ed_pos
  481.         cmp     eax,ebx
  482.  
  483.         jae     edit_box_key.sh_n
  484.         push    eax  ;¬¥­ì襥 ¢ eax
  485.         push    ebx  ;¡®«ì襥
  486.         jmp     edit_box_key.sh_n1
  487.                      ;¥á«¨ ¨­ ç¥
  488. edit_box_key.sh_n:
  489.         push    ebx
  490.         push    eax
  491. edit_box_key.sh_n1:
  492.         call    edit_box.check_offset
  493.         call    edit_box.get_n
  494.         mov     edx,eax ;size of ed_box
  495.         mov     ecx,ed_offset
  496.         add     eax,ecx ;eax = w_off= ed_offset+width
  497.         mov     edx,eax ;save
  498.         pop     ebx     ;¡®«ì襥
  499.         pop     eax     ;¬¥­ì襥
  500.  
  501.         cmp     eax,ecx         ;áà ¢­¥­¨¥ ¬¥­ì襣® á offset.
  502.         jae     edit_box_key.f_f            ;¥á«¨ ¡®«ìè¥
  503.         xor     eax,eax
  504.         cmp     edx,ebx         ;cà ¢­¨¬ à §¬¥à w_off á ¡®«ì訬
  505.         jb      @f
  506.         sub     ebx,ecx
  507.         jmp     edit_box_key.nxt_f
  508. @@:     mov     ebx,edx
  509.         sub     ebx,ecx
  510.         jmp     edit_box_key.nxt_f
  511. edit_box_key.f_f:
  512.         sub     eax,ecx
  513.         cmp     edx,ebx         ;cà ¢­¨¬ à §¬¥à w_off á ¡®«ì訬
  514.         jle     @f
  515.         sub     ebx,ecx
  516.         sub     ebx,eax
  517.         jmp     edit_box_key.nxt_f
  518. @@:
  519.         mov     ebx,edx
  520.         sub     ebx,ecx
  521.         sub     ebx,eax
  522. edit_box_key.nxt_f:
  523.         mov     edx,ebx
  524.         lea     ebx,[eax*2+eax]
  525.         shl     ebx,1
  526.         add     ebx,ed_left
  527.         inc     ebx
  528.         shl     ebx,16
  529.         lea     ecx,[edx*2+edx]
  530.         shl     ecx,1
  531.         mov     bx,cx
  532.         inc     ebx
  533.         mov     edx,ebp;shift_color
  534.  
  535.         call    edit_box.draw_bg_eax
  536. @@:     call    edit_box_key.enable_null
  537.         ret
  538. ;;;;;;;;;;;;;;;;;;;;;
  539. ;“áâ ­®¢ª - á­ï⨥ ¢ë¤¥«¥­¨ï ¢ ®¤¨­ ᨬ¢®«
  540. ;;;;;;;;;;;;;;;;;;;;;
  541. edit_box_key.drw_sim:
  542.         mov     eax,dword       ed_pos
  543.         call    edit_box_key.draw_rectangle   ;­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª á § ¤ ­­ë¬ 梥⮬
  544.         jmp     @b
  545. ;;;;;;;;;;;;;;;;;;;;;
  546. ;”ã­ªæ¨ï ãáâ ­®¢ª¨ ¢ë¤¥«¥­¨ï ¯à¨ ¤¢¨¦¥­¨¨ ¢«¥¢® ¨ ¢¯à ¢® ¨ ­ ¦ â¨¨ shift
  547. ;‹®£¨ª :
  548. ;;;;;;;;;;
  549. edit_box_key.draw_wigwag:
  550. ;äã­ªæ¨ï ãáâ ­®¢ª¨ ¯¥à¥¬¥­­ëå
  551.         mov     ebp,shift_color
  552.         call    edit_box.clear_cursor
  553.  
  554.         or      word ed_flags,ed_shift_bac ;ãáâ ­®¢ª  ä« £  ¢ë¤¥«¥­­®© ®¡« áâ¨
  555.         mov     ebp,shift_color
  556.         mov     eax,dword       ed_pos
  557.         test    word ed_flags,ed_left_fl
  558.         jz      edit_box_key.low
  559.         jmp     @f
  560. ;;;;;;;;;;
  561. ;”ã­ªæ¨ï 㤠«¥­¨ï ¢ë¤¥«¥­¨ï ¯à¨ ¤¢¨¦¥­¨¨ ¢«¥¢® ¨ ¢¯à ¢® ¨ ­ ¦ â¨¨ shift
  562. ;‹®£¨ª :
  563. ;;;;;;;;;;
  564. edit_box_key.draw_wigwag_cl:
  565. ;äã­ªæ¨ï ãáâ ­®¢ª¨ ¯¥à¥¬¥­­ëå
  566.         mov     ebp,ed_color
  567.         call    edit_box.clear_cursor
  568.  
  569.         mov     ebp,ed_color
  570.         mov     eax,dword       ed_pos
  571.         test    word ed_flags,ed_left_fl
  572.         jz      edit_box_key.low
  573. @@:     call    edit_box_key.draw_rectangle  ;­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª § ªà è¨¢ ¥¬®© ®¡« áâ¨
  574.         ret
  575. edit_box_key.low:   dec     eax
  576.         jmp     @b
  577. ;¢å®¤­®© ¯ à ¬¥âà ebx - ed_pos
  578. edit_box_key.sh_first_sh:
  579.         test    word ed_flags,ed_shift
  580.         je      @f
  581.         mov     dword ed_shift_pos_old,ebx
  582.         test    word ed_flags,ed_shift_on
  583.         jne     @f
  584.         mov     dword ed_shift_pos,ebx
  585.         or      word ed_flags,ed_shift_on
  586. @@:     ret
  587. ;Ž¡à ¡®âª  ªà ©­¨å ¯®«®¦¥­¨© ¢ editbox ¯à¨ ­ ¦ â®¬ shift
  588. ;¯à®¨§¢®¤¨â á­ï⨥ ¢ë¤¥«¥­¨ï, ¥á«¨ ­¥â shift
  589. ;¨­ ç¥ ¢®®¡é¥ ¢ë室¨â
  590. edit_box_key.sh_st_of:
  591.         test    word ed_flags,ed_shift
  592.         jne     @f
  593.         test    word ed_flags,ed_shift_bac
  594.         je      @f
  595.         mov     ebp,ed_color
  596.         mov     ebx,dword       ed_shift_pos
  597.         call    edit_box_key.sh_cl_  ;®ç¨á⪠ ¢ë¤¥«¥­®£® äà £¬¥­â 
  598.         and     word ed_flags,ed_shift_cl ; ®ç¨á⪠ ®â ⮣®, çâ® ã¡à «¨ ¢ë¤¥«¥­¨¥
  599.         jmp     edit_box.draw_cursor_text
  600. @@:
  601.         and     word ed_flags,ed_shift_off
  602.         popad
  603.         ret     4
  604. ;¯à®¢¥àª  á®áâ®ï­¨ï shift, ¡ë« «¨ ®­ ­ ¦ â à ­ìè¥?
  605. edit_box_key.sh_enable:
  606.         test    word ed_flags,ed_shift
  607.         jne     edit_box_key.sh_ext_en ;­ à¨á®¢ âì § ªà è¥­­ë© ¯àאַ㣮«ì­¨ª
  608.  
  609.         test    word ed_flags,ed_shift_bac
  610.         je      @f
  611.         call    edit_box.check_offset
  612.  
  613.         mov     ebp,ed_color
  614.         mov     ebx,dword       ed_shift_pos
  615.         call    edit_box_key.sh_cl_  ;®ç¨á⪠ ¢ë¤¥«¥­­®£® äà £¬¥­â 
  616.         call    edit_box_key.draw_wigwag_cl
  617.         and     word ed_flags,ed_shift_cl ; 1¢ à ­¥ ­ã¦­®
  618.         ret
  619.  
  620. @@:     mov     ebp,ed_color
  621.         call    edit_box.clear_cursor
  622.         call    edit_box.check_offset
  623.         ret
  624. edit_box_key.sh_ext_en:
  625.         call    edit_box.check_offset
  626.         test    word ed_flags,ed_offset_fl
  627.         je      @f
  628. ;¨á®¢ ­¨¥ § ªà è¥­­ëå ¯àאַ㣮«ì­¨ª®¢ ¨ ¨å ®ç¨á⪠
  629.         mov     eax,dword       ed_shift_pos
  630.         mov     ebx,dword       ed_pos
  631.         mov     ecx,dword       ed_shift_pos_old
  632. ;¯à®¢¥àª  ¨ à¨á®¢ ­¨¥ § ªà è¥­­ëå ®¡« á⥩
  633.         cmp     eax,ecx
  634.         je      edit_box_key.1_shem
  635.         jb      edit_box_key.smaller
  636.         cmp     ecx,ebx
  637.         ja      edit_box_key.1_shem
  638.         call    edit_box_key.draw_wigwag_cl ;clear
  639.         jmp     edit_box_key.sh_e_end
  640. edit_box_key.smaller:
  641.         cmp     ecx,ebx
  642.         jb      edit_box_key.1_shem
  643.         call    edit_box_key.draw_wigwag_cl ;clear
  644.         jmp     edit_box_key.sh_e_end
  645. ;alike  =
  646. edit_box_key.1_shem:        call   edit_box_key.draw_wigwag
  647. edit_box_key.sh_e_end:      and     word ed_flags,ed_shift_off
  648.         ret
  649. @@:     mov     ebp,shift_color
  650.         mov     ebx,dword       ed_shift_pos
  651.         call    edit_box_key.sh_cl_
  652.         jmp     edit_box_key.sh_e_end
  653. ;äã­ªæ¨ï ¤«ï ®¡à ¡®âª¨ shift ¯à¨ ­ ¦ â¨¨ home and end
  654. edit_box_key.sh_home_end:
  655.         mov     ebp,ed_color
  656.         call    edit_box.clear_cursor
  657.         test    word ed_flags,ed_shift_bac
  658.         je      @f
  659.         mov     ebp,ed_color
  660.         mov     ebx,dword       ed_shift_pos_old
  661.         call    edit_box_key.sh_cl_
  662.  
  663. @@:     test    word ed_flags,ed_shift
  664.         je      edit_box_key.sh_exit_ ;¢ë©â¨
  665.         mov     ebp,shift_color
  666.         mov     ebx,dword       ed_shift_pos
  667.         call    edit_box_key.sh_cl_
  668.         or      word ed_flags,ed_shift_bac ;ãáâ ­®¢ª  ä« £ , ¢ë¤¥«¥­­®© ®¡« áâ¨
  669.         jmp     edit_box_key.sh_e_end
  670. edit_box_key.sh_exit_:
  671.         call    edit_box.draw_bg
  672.         call    edit_box.check_offset
  673.         ret
  674. ;äã­ªæ¨ï ¢­¥á¥­¨ï 0 ¯®  ¤à¥áã ed_size+1
  675. edit_box_key.enable_null:
  676.         pusha
  677.         mov     eax,ed_size
  678.         mov     ebx,ed_text
  679.         test    eax,eax
  680.         add     eax,ebx
  681.         jne     @f
  682.         inc     eax
  683. @@:     xor     ebx,ebx
  684.         mov     [eax],bl
  685. edit_ex
  686. ;- 㤠«¥­¨¥ ᨬ¢®« 
  687. ;‚室­ë¥ ¤ ­­ë¥ edx=ed_size;ecx=ed_pos
  688. edit_box_key.del_char:
  689.         mov     esi,ed_text
  690.         test    word ed_flags,ed_shift_on
  691.         je      @f
  692.         mov     eax,dword ed_shift_pos
  693.         mov     ebx,esi
  694.         cmp     eax,ecx
  695.         jae     edit_box_key.dh_n
  696.  
  697.         mov     ed_pos,eax      ;çâ®¡ë ­¥ ¡ë«® ã¡¥£ ­¨ï ªãàá®à 
  698.         mov     ebp,ecx
  699.         sub     ebp,eax
  700.         add     ebx,eax  ;eax ¬¥­ìè¥
  701.         sub     edx,ecx
  702.         add     esi,ecx
  703.  
  704.         mov     dword ed_shift_pos,ebp
  705.         jmp     edit_box_key.del_ch_sh
  706.                      ;¥á«¨ ¨­ ç¥
  707. edit_box_key.dh_n:
  708.         mov     ebp,eax
  709.         sub     ebp,ecx
  710.         add     ebx,ecx
  711.         sub     edx,eax
  712.         add     esi,eax
  713.         mov     dword ed_shift_pos,ebp
  714.         jmp     edit_box_key.del_ch_sh
  715.  
  716. @@:     add     esi,ecx ;㪠§ â¥«ì + ᬥ饭¨¥ ª ॠ«ì­®¬ã ¡ãä¥àã
  717.         mov     ebx,esi
  718.         inc     esi
  719.         cld
  720.  
  721.         sub     edx,ecx
  722. edit_box_key.del_ch_sh:
  723.  
  724.         push    edi
  725.         mov     edi,ebx
  726. @@:
  727.         lodsb
  728.         stosb
  729.         dec edx
  730.         jns @b
  731.  
  732.         pop edi
  733.         ret
  734. ;¢ëç¨á«¨âì § ªà è¨¢ ¥¬ãî ®¡« áâì
  735. ;ᮣ« è¥­¨¥ ¢ ebp - ¯¥à¥¤ ¥âáï ed_size
  736. edit_box_key.clear_bg:
  737.         call    edit_box.get_n  ;¯®«ãç¨âì à §¬¥à ¢ ᨬ¢®« å è¨à¨­ë ª®¬¯®­¥­â 
  738.         push    eax
  739.         mov     ebx,ed_offset
  740.         add     eax,ebx ;eax = w_off= ed_offset+width
  741.         mov     ebx,ebp ;ed_size
  742.  
  743.         cmp     eax,ebx
  744.         jb      @f
  745.         mov     eax,ed_pos
  746.         sub     ebx,eax
  747.         mov     ecx,ed_offset
  748.         sub     eax,ecx
  749.         jmp     edit_box_key.nxt
  750. @@:     mov     ebx,ed_pos
  751.         push    ebx
  752.         sub     eax,ebx
  753.         mov     ebx,eax ;It is not optimal
  754.  
  755.         pop     eax     ;ed_pos
  756.         mov     ecx,ed_offset
  757.         sub     eax,ecx
  758. edit_box_key.nxt:
  759.         mov     ebp,eax  ;¯à®¢¥àª  ­  ¢ë室 § ªà è¨¢ ¥¬®© ®¡« á⨠§  ¯à¥¤¥«ë ¤«¨­ë
  760.         add     ebp,ebx
  761.         pop     edx
  762.         cmp     ebp,edx
  763.         je      @f
  764.         inc     ebx
  765.  
  766. @@:     mov     edx,ebx
  767.         lea     ebx,[eax*2+eax]
  768.         shl     ebx,1
  769.         add     ebx,ed_left
  770.         inc     ebx
  771.         shl     ebx,16
  772.         lea     ecx,[edx*2+edx]
  773.         shl     ecx,1
  774.         mov     bx,cx
  775.         mov     edx,ed_color
  776.         call    edit_box.draw_bg_eax
  777.         ret
  778. ;;;;;;;;;;;;;;;;;;;
  779. ;;; Ž¡à ¡®âª  ¯à¨¬¨â¨¢®¢
  780. ;;;;;;;;;;;;;;;;;;;;
  781. ; à¨á®¢ âì ¯àאַ㣮«ì­¨ª, 梥⠯¥à¥¤ ¥âáï ¢ ebp
  782. ;¢å®¤­ë¥ ¯ à ¬¥âàë:
  783. ;eax=dword ed_pos
  784. ;ebp=-梥â ed_color or shift_color
  785. edit_box_key.draw_rectangle:
  786.         mov     ecx,dword ed_offset
  787.         sub     eax,ecx
  788.         lea     ebx,[eax*2+eax]
  789.         shl     ebx,1
  790.         inc     ebx
  791.         add     ebx,ed_left
  792.         shl     ebx,16
  793.         add     ebx,6
  794.         mov     edx,ebp
  795.         call    edit_box.draw_bg_eax
  796.         ret
  797. ;;;;;;;;;;;;;;;;;;
  798. ;;à®¢¥àª  ­ ¦ â «¨ shift
  799. ;;;;;;;;;;;;;;;;;;
  800. edit_box_key.check_shift_ctrl_alt:
  801. pusha   ;á®åà ­¨¬ ¢á¥ ॣ¨áâàë
  802.         mcall   66,3
  803.         test    al,11b
  804.         je      @f
  805.         or      word ed_flags,ed_shift   ;ãáâ ­®¢¨¬ ä« £ Shift
  806. @@:
  807.         and     word ed_flags,ed_ctrl_off ; ®ç¨á⨬ ä« £ Ctrl
  808.         test    al,1100b
  809.         je      @f
  810.         or      word ed_flags,ed_ctrl_on   ;ãáâ ­®¢¨¬ ä« £ Ctrl
  811. @@:
  812.         and     word ed_flags,ed_alt_off ; ®ç¨á⨬ ä« £ Alt
  813.         test    al,110000b
  814.         je      @f
  815.         or      word ed_flags,ed_alt_on   ;ãáâ ­®¢¨¬ ä« £ Alt
  816. @@:edit_ex
  817. }
  818.  
  819. macro use_key_no_process  up,down,esc,enter,tab,numl,capsl,scrolll
  820. {
  821. if up eq
  822. else
  823.         cmp     ah,177
  824.         jz      edit_box.editbox_exit
  825. end if
  826. if down eq
  827. else
  828.         cmp     ah,178
  829.         jz      edit_box.editbox_exit
  830. end if
  831. if esc eq
  832. else
  833.         cmp     ah,27   ;ESC - ª« ¢¨è  ))
  834.         jz      edit_box.editbox_exit
  835. end if
  836. if enter eq
  837. else
  838.         cmp     ah,13   ;ENTER - ª« ¢¨è  ))
  839.         jz      edit_box.editbox_exit
  840. end if
  841. if tab eq
  842. else
  843.         cmp     ah,9   ;TAB - ª« ¢¨è  ))
  844.         jz      edit_box.editbox_exit
  845. end if
  846.  
  847. if numl eq
  848. else
  849.         cmp     ah,4   ;Num Lock - ª« ¢¨è  ))
  850.         jz      edit_box.editbox_exit
  851. end if
  852.  
  853. if capsl eq
  854. else
  855.         cmp     ah,2   ;Caps Lock - ª« ¢¨è  ))
  856.         jz      edit_box.editbox_exit
  857. end if
  858.  
  859. if scrolll eq
  860. else
  861.         cmp     ah,1   ;Scroll Lock - ª« ¢¨è  ))
  862.         jz      edit_box.editbox_exit
  863. end if
  864.  
  865. }
  866.  
  867. macro use_key_figures_only
  868. {
  869.         test    word ed_flags,ed_figure_only  ; ⮫쪮 æ¨äàë?
  870.         jz      @f
  871.         cmp     ah,'0'
  872.         jb      edit_box.editbox_exit
  873.         cmp     ah,'9'
  874.         ja      edit_box.editbox_exit
  875. @@:
  876. }
  877. macro are_key_shift_press
  878. {
  879.         test    word ed_flags,ed_shift_on
  880.         je      @f
  881.         ;‚室­ë¥ ¤ ­­ë¥ edx=ed_size;ecx=ed_pos
  882.         push    eax
  883.         mov     edx,ed_size
  884.         mov     ecx, ed_pos
  885.         pusha
  886. ;;;;;;;;;;;;;;;;;;;;;
  887. ;clear input arrea
  888.         mov     ebp,ed_color
  889.         mov     ebx,dword       ed_shift_pos
  890.         call    edit_box_key.sh_cl_
  891.         mov     ebp,ed_size
  892.         call    edit_box_key.clear_bg
  893. ;;;;;;;;;;;;;;;;;;;;;
  894.         popa
  895.         call    edit_box_key.del_char
  896. ;;;;
  897.         mov     ebx,ed_size
  898.         sub     ebx,dword ed_shift_pos
  899.         mov     ed_size,ebx
  900.         pop     eax
  901. @@:
  902. }
  903. macro are_key_cur_end
  904. {
  905.         mov     ecx,ed_size
  906.         mov     edx, ed_max
  907.         test    word ed_flags,ed_insert
  908.         jne     @f
  909.         cmp     ecx,edx
  910.         jae     edit_box.editbox_exit
  911. @@:     mov     ebx, ed_pos
  912.         cmp     ebx,edx
  913.         jl      @f ; ¥á«¨ ¬¥­ìè¥ ¨«¨ à ¢­®
  914.         jmp     edit_box.editbox_exit
  915.  
  916. @@:     ; ᤢ¨£ ¥¬ ᨬ¢®«ë ¯®á«¥ ªãàá®à  ¢¯à ¢®
  917.         mov     ecx,ed_size
  918.         push    edi eax
  919.         mov     ebp,edi
  920.         mov     esi,ed_text     ; “ª § â¥«ì ­  ¡ãä¥à
  921.                                 ;ã¤¥¬ à ¡®â âì á® áâப®©
  922.         add     esi,ecx         ;add ed_size ¤®¡ ¢¨¬ max size
  923.         mov     edi,esi
  924.  
  925.         cmp     ecx,ebx         ;…᫨ ã ­ á ¯®§¨æ¨ï ªãàá®à  = ⥪ã饬ã à §¬¥àã ­ ¯¥ç â ­­ëå ᨬ¢®«®¢ â.¥. ªãàá®à á⮨⠢ ª®­æ¥
  926.         je      edit_box_key.In_k
  927.  
  928.         test    dword bp_flags,ed_insert ;IF insert is enabled  â.ª. edi ¨§¬¥­¥­,  ¤à¥á㥬 ç¥à¥§ ebp
  929.         jne     edit_box_key.ins_v
  930. ;clear
  931. pusha
  932.         mov     edi,ebp
  933.         mov     ebp,ed_size
  934.         call    edit_box_key.clear_bg
  935. popa
  936.         sub     ecx,ebx         ; ©¤¥¬ ª®«-¢® ᨬ¢®«®¢ ¤«ï ¯¥à¥¤¢¨¦¥­¨ï.
  937.         inc     edi             ;‘¬¥á⨬ ­ è¨ ᨬ¢®«ë ¢¯à ¢®
  938.         std
  939.         inc     ecx
  940.    @@:
  941.         ;--------
  942.         lodsb
  943.         stosb
  944.         ;--------
  945.         loop    @b
  946. edit_box_key.In_k:
  947.         cld
  948.         pop eax
  949.         mov al,ah
  950.         stosb
  951.         pop edi
  952. ; ¢áâ ¢«ï¥¬ ª®¤ ª« ¢¨è¨ â㤠, £¤¥ ªãàá®à
  953.         ; 㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ à §¬¥à  ¨ ¯®§¨æ¨¨
  954.         inc      dword ed_size
  955.         inc      dword ed_pos
  956.         call    edit_box_key.draw_all2
  957.         jmp     edit_box_key.shift
  958. }
  959. macro use_work_key
  960. {
  961. edit_box_key.insert: test   word ed_flags,ed_insert ;not    word ed_insert
  962.          je     @f
  963.          and    word ed_flags,ed_insert_cl
  964.  
  965.         jmp     edit_box.editbox_exit
  966. @@:
  967.         or      word ed_flags,ed_insert
  968.         jmp     edit_box.editbox_exit
  969. edit_box_key.ins_v:
  970. ;        dec     dword [ebp+48];ed_size    ;processing is insert
  971.         dec     dword bp_size
  972.         sub     esi,ecx
  973.         add     esi,ebx
  974.         mov     edi,esi
  975. ;clear
  976. pusha
  977.         mov     edi,ebp
  978.         mov     ebp,ed_pos
  979.         call    edit_box_key.clear_bg
  980. popa
  981.         jmp     edit_box_key.In_k
  982. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  983. edit_box_key.delete:
  984.         mov     edx,ed_size
  985.         mov     ecx,ed_pos
  986.         cmp     edx,ecx
  987.         jg      edit_box_key.bac_del
  988.         test    word ed_flags,ed_shift_on
  989.         jne     edit_box_key.del_bac
  990.         popad
  991.         ret     4
  992. edit_box_key.bac_del:
  993.         call    edit_box_key.del_char
  994.         jmp     edit_box_key.draw_all
  995. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  996. ;--- ­ ¦ â  ª« ¢¨è  backspace ---
  997. edit_box_key.backspace:
  998.         test    word ed_flags,ed_shift_on
  999.         jne     edit_box_key.delete
  1000.         ; ¯à®¢¥à塞, ªãàá®à ã «¥¢®£® ªà ï?
  1001.         mov     ecx,ed_pos
  1002.         test    ecx,ecx
  1003.         jnz     edit_box_key.del_bac
  1004.         popad
  1005.         ret     4
  1006.  
  1007. edit_box_key.del_bac:
  1008.         mov     edx,ed_size
  1009.         cmp     edx,ecx ;if ed_pos=ed_size
  1010.         je      @f
  1011.         dec     ecx
  1012.         call    edit_box_key.del_char
  1013. @@:     test    word ed_flags,ed_shift_on
  1014.         jne     edit_box_key.bac_del
  1015.         dec      dword ed_pos
  1016. edit_box_key.draw_all:
  1017.         push    edit_box_key.shift;.draw_cursor_text;eax
  1018.  
  1019.         test    word ed_flags,ed_shift_on
  1020.         je      @f
  1021.         mov     eax,dword ed_shift_pos
  1022.         mov     ebx,ed_size
  1023.         sub     ebx,eax
  1024.         mov     ed_size,ebx
  1025.  
  1026.         mov     ebp,ed_color
  1027.         call    edit_box.clear_cursor
  1028.         call    edit_box.check_offset
  1029.         call    edit_box.draw_bg
  1030.         ret
  1031. @@:     dec      dword ed_size
  1032.  
  1033. edit_box_key.draw_all2:
  1034.         and    word ed_flags,ed_shift_cl
  1035.         mov     ebp,ed_color
  1036.         call    edit_box.clear_cursor
  1037.         call    edit_box.check_offset
  1038.         mov     ebp,ed_size
  1039.         call    edit_box_key.clear_bg
  1040.         ret
  1041. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1042. ;--- ­ ¦ â  ª« ¢¨è  left ---
  1043. edit_box_key.left:
  1044.         mov     ebx,ed_pos
  1045.         test    ebx,ebx
  1046.         jz      edit_box_key.sh_st_of
  1047.         or      word ed_flags,ed_left_fl
  1048.         call    edit_box_key.sh_first_sh
  1049.         dec      dword ed_pos
  1050.         call    edit_box_key.sh_enable
  1051.         jmp     edit_box.draw_cursor_text
  1052. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1053. ;--- ­ ¦ â  ª« ¢¨è  right ---
  1054. edit_box_key.right:
  1055.         mov     ebx,ed_pos
  1056.         cmp     ebx,ed_size
  1057.         je      edit_box_key.sh_st_of
  1058.         and     word ed_flags,ed_right_fl
  1059.         call    edit_box_key.sh_first_sh
  1060.         inc     dword  ed_pos
  1061.         call    edit_box_key.sh_enable
  1062.         jmp     edit_box.draw_cursor_text
  1063. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1064. edit_box_key.home:
  1065.         mov     ebx,ed_pos
  1066.         test    ebx,ebx
  1067.         jz      edit_box_key.sh_st_of
  1068.         call    edit_box_key.sh_first_sh
  1069.         xor     eax,eax
  1070.         mov     ed_pos,eax
  1071.         call    edit_box_key.sh_home_end
  1072.         jmp     edit_box.draw_cursor_text
  1073. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1074. edit_box_key.end:
  1075.         mov     ebx,ed_pos
  1076.         cmp     ebx,dword ed_size
  1077.         je      edit_box_key.sh_st_of
  1078.         call    edit_box_key.sh_first_sh
  1079.         mov     eax,ed_size
  1080.         mov     ed_pos,eax
  1081.         call    edit_box_key.sh_home_end
  1082.         jmp     edit_box.draw_cursor_text
  1083. ;-----------------------------------------------------------------------------
  1084. edit_box_key.ctrl_c:
  1085. ; add memory area
  1086.         mov     ecx,ed_size
  1087.         add     ecx,3*4
  1088.         mcall   68,12
  1089. ; building the clipboard slot header
  1090.         xor     ecx,ecx
  1091.         mov     [eax+4],ecx ; type 'text'
  1092.         inc     ecx
  1093.         mov     [eax+8],ecx ; cp866 text encoding
  1094.         mov     ecx,ed_size
  1095.         add     ecx,3*4
  1096.         mov     [eax],ecx
  1097.         sub     ecx,3*4
  1098. ; copy data
  1099.         mov     esi,ed_text
  1100.         push    edi
  1101.         mov     edi,eax
  1102.         add     edi,3*4
  1103.         cld
  1104.         rep     movsb
  1105.         pop     edi
  1106. ; put slot to the kernel clipboard
  1107.         mov     edx,eax
  1108.         mov     ecx,[edx]
  1109.         push    eax
  1110.         mcall   54,2
  1111.         pop     ecx
  1112. ; remove unnecessary memory area
  1113.         mcall   68,13
  1114. ;--------------------------------------
  1115. .exit:
  1116.         jmp     edit_box.editbox_exit
  1117. ;-----------------------------------------------------------------------------
  1118. edit_box_key.ctrl_v:
  1119.         mcall   54,0
  1120. ; no slots of clipboard ?
  1121.         test    eax,eax
  1122.         jz      .exit
  1123. ; main list area not found ?    
  1124.         inc     eax
  1125.         test    eax,eax
  1126.         jz      .exit
  1127.  
  1128.         sub     eax,2
  1129.         mov     ecx,eax
  1130.         mcall   54,1
  1131. ; main list area not found ?
  1132.         inc     eax
  1133.         test    eax,eax
  1134.         jz      .exit
  1135. ; error ?
  1136.         sub     eax,2
  1137.         test    eax,eax
  1138.         jz      .exit
  1139.  
  1140.         inc     eax
  1141. ; check contents of container
  1142.         mov     ebx,[eax+4]
  1143. ; check for text
  1144.         test    ebx,ebx
  1145.         jnz     .no_valid_text
  1146.        
  1147.         mov     ebx,[eax+8]
  1148. ; check for cp866
  1149.         cmp     bl,1
  1150.         jnz     .no_valid_text
  1151.        
  1152.         mov     ecx,[eax]
  1153.         sub     ecx,3*4
  1154.         cmp     ecx,ed_max
  1155.         jb      @f
  1156.        
  1157.         mov     ecx,ed_max
  1158. @@:
  1159.         mov     esi,eax
  1160.         add     esi,3*4
  1161.         mov     ed_size,ecx
  1162.         mov     ed_pos,ecx
  1163.         push    eax edi
  1164.         mov     edi,ed_text
  1165.         cld
  1166. @@:
  1167.         lodsb
  1168.         cmp     al,0x0d ; EOS (end of string)
  1169.         je      .replace        
  1170.  
  1171.         cmp     al,0x0a ; EOS (end of string)
  1172.         jne     .continue
  1173. .replace:
  1174.         mov     al,0x20 ; space
  1175. .continue:      
  1176.         stosb
  1177.         dec     ecx
  1178.         jnz     @b
  1179. ;       rep     movsb
  1180.         pop     edi eax
  1181. ;--------------------------------------
  1182. .no_valid_text:
  1183. ; remove unnecessary memory area
  1184.         mov     ecx,eax
  1185.         mcall   68,13
  1186. ;--------------------------------------
  1187. .exit:
  1188.         jmp     edit_box.draw_1
  1189. }
  1190.  
  1191. macro use_mouse_func
  1192. {
  1193. ;----------------------------------------------------------
  1194. ;--- Ž¡à ¡®âª  .mouse_wigwag
  1195. ;----------------------------------------------------------
  1196. edit_box_mouse.mouse_wigwag:
  1197.         shr     eax,16
  1198.         or      word ed_flags,ed_shift_bac+ed_shift_on+ed_shift
  1199. ;;;;;;;;;;;;;;;;;;
  1200. ;;¯à®æ¥¤ãà  ®¡à ¡®âª¨ ¯®«®¦¥­¨ï ¢ë¤¥«¥­­®£® ⥪áâ , ª®£¤  ¯à®¨á室¨â ¢ë室 §  ¯à¥¤¥«ë editbox
  1201. ;;;;;;;;;;;;;;;;;;
  1202.         test    ax,0x8000
  1203.         jnz     edit_box_mouse.mleft
  1204.  
  1205.         mov     ebx,ed_left
  1206.         cmp     eax,ebx
  1207.         jb      edit_box_mouse.mleft
  1208.  
  1209.         add     ebx,ed_width
  1210.         cmp     eax,ebx
  1211.         ja      edit_box_mouse.mright
  1212.  
  1213.         sub     ebx,ed_width
  1214.  
  1215.         xor     edx,edx
  1216.         sub     eax,ebx ; ¢ëç⥬ ¨§ ª®®à¤¨­ â ¬ë誨 ¯® ®á¨ å ª®®à¤¨­ âë ¤® editbox ¯® ®á¨ å
  1217.         mov     ebx,6
  1218.         div     ebx
  1219. ;;;;;;;;;;;;;;;;;;
  1220. ;;¯à®æ¥¤ãà  ®¡à ¡®âª¨ ¯®«®¦¥­¨ï ¢ë¤¥«¥­­®£® ⥪áâ , ¢ ¯à¥¤¥« å ®¡« á⨠editbox
  1221. ;;;;;;;;;;;;;;;;;;
  1222. ;®«ã稫¨ ª®®à¤¨­ âë ¢ eax ¬ë誨, â.¥. ªã¤  ®­  ¯¥à¥¬¥á⨫ áì
  1223. ;¨á®¢ ­¨¥ § ªà è¥­­ëå ¯àאַ㣮«ì­¨ª®¢ ¨ ¨å ®ç¨á⪠
  1224.         add     eax,ed_offset   ;¤®¡ ¢¨¬ ᬥ饭¨¥
  1225.         cmp     eax,dword ed_size       ;¥á«¨ ¢ë諨 §  ¯à¥¤¥«ë, â® ­¨ç¥£® ­¥ ¤¥« âì
  1226.         ja      edit_box_mouse.mwigvag
  1227. edit_box_mouse.mdraw:
  1228.         mov     dword   ed_pos,eax ;á®åà ­¨¬ ­®¢®¥ §­ ç¥­¨¥
  1229. ;¨á®¢ ­¨¥ § ªà è¥­­ëå ¯àאַ㣮«ì­¨ª®¢ ¨ ¨å ®ç¨á⪠
  1230.         mov     ecx,dword       ed_shift_pos
  1231.         mov     ebx,dword       ed_shift_pos_old
  1232.         mov     dword   ed_shift_pos_old,eax    ;¢­¥á¥¬ ­®¢®¥ §­ ç¥­¨¥ áâ à®© ¯®§¨æ¨¨ ªãàá®à 
  1233. ;¯à®¢¥àª  ¨ à¨á®¢ ­¨¥ § ªà è¥­­ëå ®¡« á⥩
  1234.         cmp     ecx,ebx         ;¢ëïá­ï¥¬ ªã¤  ¡ë«® ¤¢¨¦¥­¨¥ ­  ®¤¨­ è £ ­ § ¤
  1235.         je      edit_box_mouse.m1_shem        ;¤¢¨¦¥­¨ï ­¥ ¡ë«® à ­¥¥
  1236.         jb      edit_box_mouse.msmaller       ;¤¢¨¦¥­¨¥ ¡ë«® ->
  1237.         cmp     ebx,eax         ;¤¢¨¦¥­¨¥ ¡ë«® ¤® í⮣® <- ¨ âãâ ¬ë ¯à®¢¥à塞 ᥩç á ªã¤  ¤¢¨¦¥­¨¥ ¯à®¨á室¨â
  1238.         ja      edit_box_mouse.m1_shem        ;¥á«¨ ¡ë«® ¤¢¨¦¥­¨¥ <- â® ­ã¦­® § ªà á¨âì ®¡« áâì
  1239.         je      edit_box_mouse.mwigvag        ;¥á«¨ ¨§¬¥­¥­¨ï ­¥ ¡ë«®, â® ­¨ç¥£® ­¥ ¤¥« âì
  1240.         mov     ebp,ed_color    ;âã⠭㦭® ®ç¨áâ¨âì ®¡« áâì c ed_pos ed_shift_pos_old
  1241. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  1242.         call    edit_box_key.sh_cl_
  1243.         jmp     edit_box_mouse.mwigvag
  1244. edit_box_mouse.msmaller:
  1245.         cmp     ebx,eax
  1246.         jb      edit_box_mouse.m1_shem
  1247.         mov     ebp,ed_color
  1248. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  1249.         call    edit_box_key.sh_cl_
  1250.         jmp     edit_box_mouse.mwigvag
  1251. ;alike  =
  1252. edit_box_mouse.m1_shem:
  1253.         mov     ebp,shift_color
  1254. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  1255.         mov     ebx,ecx
  1256.         call    edit_box_key.sh_cl_
  1257.         jmp     edit_box_mouse.mwigvag
  1258. edit_box_mouse.mwigvag:
  1259.         and     word ed_flags,ed_shift_mcl
  1260.         jmp     edit_box.draw_cursor_text
  1261. ;       popa
  1262. ;       ret
  1263. edit_box_mouse.mleft:
  1264.         mov     eax,ed_pos
  1265.         cmp     eax,0
  1266.         jbe      edit_box_mouse.mwigvag
  1267.         dec     eax
  1268.         call    edit_box.check_offset
  1269.         push    eax
  1270.         mov     ebx,ed_shift_pos
  1271.         mov     ebp,shift_color
  1272.         call    edit_box_key.sh_cl_
  1273.         pop     eax
  1274.         jmp     edit_box_mouse.mdraw
  1275. edit_box_mouse.mright:
  1276.         mov     eax,ed_pos
  1277.         mov     ebx,ed_size
  1278.         cmp     eax,ebx
  1279.         jae     edit_box_mouse.mwigvag
  1280.         inc     eax
  1281.         call    edit_box.check_offset
  1282.         mov     ebx,ed_shift_pos
  1283.         mov     ebp,shift_color
  1284.         push    eax
  1285.         call    edit_box_key.sh_cl_
  1286.         pop     eax
  1287.         jmp     edit_box_mouse.mdraw
  1288. }
  1289.  
  1290. macro use_work_mouse
  1291. ;----------------------------------------------------------
  1292. ;--- € ­¥ 㤥ন¢ ¥¬ «¨ ¬ë ª« ¢¨èã ¬ë誨, ¯¥à¥¬¥é ï ªãàá®à, ¢® ¢á¥ à §­ë¥ áâ®à®­ë?
  1293. ;----------------------------------------------------------
  1294. {
  1295.         test    word ed_flags,ed_mouse_on
  1296.         jne     edit_box_mouse.mouse_wigwag
  1297. ;----------------------------------------------------------
  1298. ;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box -------------
  1299. ;----------------------------------------------------------
  1300.         mov     ebx,ed_top
  1301.         cmp     ax,bx
  1302.         jl      edit_box_mouse._blur;.mouse_end_no_focus
  1303.  
  1304.         add     ebx,ed_height
  1305.         cmp     ax,bx
  1306.         jg      edit_box_mouse._blur;.mouse_end_no_focus
  1307.  
  1308.         shr     eax,16
  1309.  
  1310.         mov     ebx,ed_left
  1311.         cmp     ax,bx
  1312.         jl      edit_box_mouse._blur;.mouse_end_no_focus
  1313.  
  1314.         add     ebx,ed_width
  1315.  
  1316.         cmp     ax,bx
  1317.         jg      edit_box_mouse._blur;.mouse_end_no_focus
  1318.  
  1319. ;--- ¨§¬¥­ï¥¬ ¯®§¨æ¨î ªãàá®à  ---
  1320.         push    eax
  1321.         mov     ebp,ed_color
  1322.         call    edit_box.clear_cursor
  1323.         pop     eax
  1324. edit_box_mouse._mvpos:
  1325.         xor     edx,edx
  1326.         sub     eax,ed_left
  1327.  
  1328.         mov     ebx,6
  1329.         div     bx
  1330.         add     eax,ed_offset
  1331.         cmp     eax,ed_size
  1332.         jna     edit_box_mouse._mshift
  1333.         mov     eax,ed_size
  1334.  
  1335. edit_box_mouse._mshift:
  1336. ;;;;;;;
  1337. ;;‘¥ªæ¨ï ®¡à ¡®âª¨ shift ¨ ¢ë¤¥«¥­¨ï ¯® shift
  1338. ;;;;;;;
  1339.         test    word ed_flags,ed_shift_bac
  1340.         je      @f
  1341.         mov     ebp,dword       ed_color
  1342.         mov     ebx,dword ed_shift_pos
  1343.         push    eax
  1344.         call    edit_box_key.sh_cl_
  1345.         and     word ed_flags,ed_shift_bac_cl
  1346.         pop     eax
  1347. @@:
  1348.         test    word ed_flags,ed_mouse_on
  1349.         jne     @f
  1350.  
  1351.         mov     dword ed_shift_pos,eax
  1352.         or      word  ed_flags,ed_mouse_on
  1353.         mov     dword ed_pos,eax
  1354.  
  1355. ;        mov     dword [mouse_flag],edi          ;ãáâ ­®¢¨¬ ¨¤¥­â¨ä¨ª â®à
  1356.  
  1357.         mov     ebx,dword ed_mouse_variable
  1358.         push    edi
  1359.         pop     dword [ebx]
  1360.  
  1361.  
  1362.  
  1363.  
  1364.         bts     word ed_flags,1                 ;ãáâ ­®¢ª  䮪ãá 
  1365.         jmp     edit_box_mouse.m_sh
  1366. @@:
  1367.         cmp     eax,dword ed_shift_pos  ;¥á«¨ ¯®§¨æ¨¨ ­¥ ¨§¬¥­¨«¨áì
  1368.         je      edit_box.editbox_exit
  1369.         mov     ed_pos,eax
  1370.         mov     ebp,dword shift_color
  1371.         mov     ebx,dword ed_shift_pos
  1372.         call    edit_box_key.sh_cl_
  1373.         or      word ed_flags,ed_mous_adn_b     ;ãáâ ­®¢¨¬ ¡¨â, çâ® ¬ë ¢ë¤¥«¨«¨ +shift_on +
  1374. edit_box_mouse.m_sh:
  1375.         call    edit_box.draw_text
  1376.         call    edit_box.draw_cursor
  1377. ;----------------------------------------------------------
  1378. ;--- ¯à®æ¥¤ãà  ãáâ ­®¢ª¨ 䮪ãá  ---------------------------
  1379. ;----------------------------------------------------------
  1380.         jmp     edit_box_mouse.drc
  1381. edit_box_mouse._blur:
  1382.         test    word ed_flags,ed_always_focus
  1383.         jne     edit_box.editbox_exit
  1384.         btr     word ed_flags,1 ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  1385.         jnc     edit_box.editbox_exit
  1386.  
  1387.         mov     ebp,ed_color
  1388.         call    edit_box.clear_cursor
  1389. edit_box_mouse.drc:   call    edit_box.draw_border
  1390.         jmp     edit_box.editbox_exit
  1391. }
  1392.  
  1393.  
  1394. ; Œ ªà®á ¢ë室 
  1395. macro edit_ex
  1396. {
  1397. popad
  1398. ret
  1399. }
  1400. macro debug
  1401. {
  1402.         ;-----------  ®â« ¤ª 
  1403.         pushad
  1404. ;        mov     dword [ed_buffer.2],0
  1405. ;        mov     eax,edi
  1406.         mov eax,dword [ed_buffer.2]
  1407.         mov edi,ed_buffer.3
  1408.         call .str
  1409.         ;à¨á®¢ ­¨¥ ä®­ 
  1410.         mov eax,13
  1411.         mov ebx,178*65536+70
  1412.         mov ecx,28*65536+10
  1413.         xor edx,edx
  1414.         int 0x40
  1415.         ;¢ë¢®¤ §­ ç¥­¨ï ­  íªà ­
  1416.         mov eax,4
  1417.         mov ebx,180*65536+30
  1418.         mov ecx,0x10DDBBCC
  1419.         mov edx,ed_buffer.3
  1420.         mov esi,8
  1421.         int 0x40
  1422.         popad
  1423.         ;----------- ®â« ¤ª 
  1424. }
  1425. macro   debug_func
  1426. {
  1427. .str:
  1428.         mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï, ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx, ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
  1429.          ;¯¥à¥¢®¤ ç¨á«  ¢ ASCII áâபã, ¢å®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­¨ï, edi  ¤à¥á ªã¤  ¡ã¤¥¬ § ¯¨á뢠âì áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
  1430.         cmp eax,ecx  ;áà ¢­¨âì, ¥á«¨ ¢ eax ¬¥­ìè¥, 祬 ¢ ecx, â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
  1431.         jb @f
  1432.         xor edx,edx  ;®ç¨áâ¨âì edx
  1433.         div ecx      ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
  1434.         push edx     ;¯®«®¦¨âì ¢ á⥪
  1435.         ;dec edi             ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
  1436.         call .str ;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â , ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
  1437.         pop eax
  1438.         @@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al, 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­¨ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
  1439.         ;sbb al,$69  ;- ç¥áâ­®, ¤ ­­ ï ¨­áâàãªæ¨ï ¬¥­ï § áâ ¢«ï¥â § ¤ã¬ âìáï â.¥. ï ­¥ §­ î ª ª íâ® à ¡®â ¥â
  1440.         ;das        ;¯®á«¥ ¤ ­­®© ª®¬ ­¤ë ª ª ¡ë ¯à®¨á室¨â 㬥­ì襭¨¥ al ­  66h  (¢ ª­¨£¥ ­ ¯¨á ­® ¤à㣮¥)
  1441.         or al,0x30  ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥, 祬 ¤¢¥ ¢ëè¥
  1442.         stosb       ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祩ªã ¯ ¬ï⨠es:edi
  1443.  
  1444.         ret         ;¢¥à­ãâìáï ®ç¥­ì ¨­â¥à¥á­ë© 室, â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âáï ª®«-¢® ¢ë§®¢®¢, â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
  1445. }
  1446.  
  1447. ed_struc_size=76
  1448.