Subversion Repositories Kolibri OS

Rev

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