Subversion Repositories Kolibri OS

Rev

Rev 8262 | Rev 8533 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ; ¬ ªà®á ¤«ï á¨á⥬­®© ¡¨¡«¨®â¥ª¨ box_lib.obj
  2. ; í«¥¬¥­â TextEditor ¤«ï Kolibri OS
  3. ; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 10.06.2020 IgorA
  4. ; ­  ª®¤ ¯à¨¬¥­¥­  GPL2 «¨æ¥­§¨ï
  5.  
  6. ;input:
  7. ; edi = pointer to tedit struct
  8. ; reg = index
  9. ;output:
  10. ; reg = pointer to 'tex' struct
  11. macro ConvertIndexToPointer reg {
  12.         imul reg,sizeof.symbol
  13.         add reg,ted_tex
  14. }
  15.  
  16. ;--- out_reg = ted_key_words_data[ind_reg].Text[0] ---
  17. macro ColToIndexOffset ind_reg,out_reg {
  18.         mov out_reg,ind_reg
  19.         imul out_reg,sizeof.TexColViv
  20.         add out_reg,ted_key_words_data
  21. }
  22.  
  23. TED_LINES_IN_NEW_FILE equ 30 ;ç¨á«® áâப ¢ ­®¢®¬ ä ©«¥
  24. MAX_COLOR_WORD_LEN equ 40
  25. ;------------------------------------------------------------------------------
  26. struct TexSelect
  27.         x0 dd ?
  28.         y0 dd ?
  29.         x1 dd ?
  30.         y1 dd ?
  31. ends
  32.  
  33. struct TexColViv
  34.         Text  rb MAX_COLOR_WORD_LEN ; á«®¢® ¤«ï ¯®¤á¢¥âª¨
  35.         f1    dd 0 ; á¯à ¢ª  ¯® á«®¢ã
  36.         flags db ? ; f1+4 ä« £¨ ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¢ë¤¥«¥­¨¨
  37.         endc  db ? ; f1+5 ᨬ¢®« ª®­æ  ¢ë¤¥«¥­¨ï (¨á¯®«ì§ã¥âáï ¯à¨ flags&4)
  38.         escc  db ? ; f1+6 íªà ­¨àãî騩 ᨬ¢®« (¨á¯®«ì§ã¥âáï ¯à¨ flags&4)
  39.         color db ? ; f1+7 ­®¬¥à 梥â 
  40. ends
  41.  
  42. struct symbol
  43.         c db ?    ;  +0 ᨬ¢®«
  44.         col db ?  ;  +1 梥â
  45.         perv dd ? ;  +2
  46.         next dd ? ;  +6 㪠§ â¥«¨
  47.         tc dd ?   ; +10 ¢à¥¬. ᮧ¤ ­¨ï
  48.         td dd ?   ; +14 ¢à¥¬. 㤠«¥­¨ï
  49. ends
  50. ;------------------------------------------------------------------------------
  51.  
  52. ted_symbol_space db 32 ;ascii ª®¤ ¯à®¡¥« , ¨­®£¤  ¡ë¢ ¥â ­ã¦¥­ ¢ ª®¤¥
  53. ted_symbol_tab db 26 ;ascii ª®¤ áâ५ª¨ ¢¯à ¢®, ¨á¯®«ì§ã¥âáï ¤«ï à¨á®¢ ­¨ï â ¡ã«ï樨 ¢ ०¨¬¥ ¯®ª §  ­¥¢¨¤¨¬ëå ᨬ¢®«®¢
  54.  
  55. if lang eq ru
  56.  
  57. txtRow db '‘âப ',0
  58. txtCol db '‡­ ª',0
  59. txtOtm db 'Žâ¬¥­ë',0
  60. txtBuf db 'ãä¥à:',0
  61.  
  62. else
  63.  
  64. txtRow db 'Rows',0
  65. txtCol db 'Cols',0
  66. txtOtm db 'Undo',0
  67. txtBuf db 'Buffer:',0
  68.  
  69. end if
  70.  
  71. ;EvChar - â ¡«¨æ  ¤«ï 䨫ìâ஢ ­¨ï ¤®¡ ¢«ï¥¬ëå ᨬ¢®«®¢, çâ®-¡ë ­¥ ¯®¯ «¨ «¨è­¨¥ §­ ª¨
  72. align 16
  73. EvChar db 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0
  74.     db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  75.     db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  76.     db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  77.     db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  78.     db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  79.     db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  80.     db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
  81.     db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  82.     db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  83.     db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  84.     db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  85.     db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  86.     db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  87.     db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  88.     db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  89.  
  90. KM_SHIFT equ 0x00010000
  91. KM_CTRL equ 0x00020000
  92. KM_ALT equ 0x00040000
  93. KM_NUMLOCK equ 0x00080000
  94.  
  95. ; KEY CODES
  96. KEY_F1 equ 0x0000003B
  97. KEY_F2 equ 0x0000003C
  98. KEY_F3 equ 0x0000003D
  99.  
  100.  
  101.  
  102. align 16
  103. proc ted_init uses eax ecx edi, edit:dword
  104.         mov edi,[edit]
  105.  
  106.         mov ecx,sizeof.symbol
  107.         imul ecx,ted_max_chars
  108.         invoke mem.alloc,ecx ;¢ë¤¥«ï¥¬ ¯ ¬ïâì
  109.         mov ted_tex,eax
  110.         mov ted_tex_1,eax
  111.         add ted_tex_1,sizeof.symbol
  112.         add eax,ecx
  113.         mov ted_tex_end,eax
  114.  
  115.         stdcall ted_clear, edi,1
  116.  
  117. ;-------------------------------------------------
  118.         mov ecx,1024 ;1024 - ¤«ï ¬ áᨢ  ted_arr_key_pos
  119.         add ecx,ted_syntax_file_size
  120.         invoke mem.alloc,ecx
  121.         mov ted_arr_key_pos,eax
  122.         add eax,1024
  123.         mov ted_syntax_file,eax
  124.  
  125.         stdcall ted_init_scroll_bars,edi,3
  126.         ret
  127. endp
  128.  
  129. MIN_W_SCRL_ARE equ 3 ;¬¨­¨¬ «ì­ ï ®â®¡à ¦ ¥¬ ï ®¡« áâì ¤«ï ¢¥àâ. áªà®««¨­£ 
  130. MIN_H_SCRL_ARE equ 3 ;¬¨­¨¬ «ì­ ï ®â®¡à ¦ ¥¬ ï ®¡« áâì ¤«ï £®à¨§. áªà®««¨­£ 
  131. ;input:
  132. ; opt = 1 - ¬¥­ïâì 梥â áªà®««¨­£®¢, 2 - ¨§¬¥­¨«¨áì à §¬¥àë ®ª­ ,
  133. ;  4 - ¨§¬¥­¨«¨áì à §¬¥àë ¤®ªã¬¥­â 
  134. align 16
  135. proc ted_init_scroll_bars, edit:dword, opt:dword
  136.         pushad
  137.         mov edi,[edit]
  138.         mov esi,ted_scr_w
  139.         mov ebx,ted_scr_h
  140.         bt dword[opt],0
  141.         jae @f
  142.                 mov ecx,ted_color_wnd_work
  143.                 mov dword[esi+sb_offs_bckg_col],ecx
  144.                 mov dword[ebx+sb_offs_bckg_col],ecx
  145.                 mov ecx,ted_color_wnd_capt
  146.                 mov dword[esi+sb_offs_frnt_col],ecx
  147.                 mov dword[ebx+sb_offs_frnt_col],ecx
  148.                 mov ecx,ted_color_wnd_bord
  149.                 mov dword[esi+sb_offs_line_col],ecx
  150.                 mov dword[ebx+sb_offs_line_col],ecx
  151.         @@:
  152.         bt dword[opt],2 ; ¨§¬¥­¨«¨áì à §¬¥àë ¤®ªã¬¥­â  ?
  153.         jae .doc_resize
  154.                 call ted_get_num_lines
  155.                 cmp eax,TED_LINES_IN_NEW_FILE
  156.                 jge @f
  157.                         mov eax,TED_LINES_IN_NEW_FILE
  158.                 @@:
  159.                 mov dword[esi+sb_offs_max_area],eax
  160.         .doc_resize:
  161.         bt dword[opt],1 ; ¨§¬¥­¨«¨áì à §¬¥àë ®ª­  ?
  162.         jae .no_size
  163.                         mov edx,ted_wnd_l
  164.                         add edx,ted_rec_l
  165.                         mov word[ebx+sb_offs_start_x],dx ;¢ëáâ ¢«ï¥¬ «¥¢ë© ®âáâ㯠£®à¨§. áªà®««¨­£ 
  166.                         mov eax,ted_wnd_h ;calculate lines in page
  167.                         mov edx,ted_wnd_t
  168.                         add edx,eax
  169.                         mov word[ebx+sb_offs_start_y],dx ;¢ëáâ ¢«ï¥¬ ¢¥àå­¨© ®âáâ㯠£®à¨§. áªà®««¨­£ 
  170.                 sub eax,ted_rec_t
  171.                 xor edx,edx
  172.                 mov ecx,ted_rec_h
  173.                 div ecx
  174.                 cmp eax,MIN_W_SCRL_ARE
  175.                 jg @f
  176.                         mov eax,MIN_W_SCRL_ARE
  177.                 @@:
  178.                 mov dword[esi+sb_offs_cur_area],eax
  179.  
  180.                 mov eax,ted_wnd_w ;calculate cols in page
  181.                         mov edx,ted_wnd_l ;«¥¢ë© ®âáâ㯠®ª­ 
  182.                         add edx,eax ;¤®¡ ¢«ï¥¬ è¨à¨­ã ®ª­ 
  183.                         mov word[esi+sb_offs_start_x],dx ;¢ëáâ ¢«ï¥¬ «¥¢ë© ®âáâ㯠¢¥àâ. áªà®««¨­£ 
  184.                         mov edx,ted_wnd_t
  185.                         mov word[esi+sb_offs_start_y],dx ;¢ëáâ ¢«ï¥¬ ¢¥àå­¨© ®âáâ㯠¢¥àâ. áªà®««¨­£ 
  186.                         mov edx,ted_wnd_h
  187.                         mov word[esi+sb_offs_size_y],dx ;¢ëáâ ¢«ï¥¬ ¢ëá®âã ¢¥àâ. áªà®««¨­£ 
  188.                 sub eax,ted_rec_l
  189.                         mov word[ebx+sb_offs_size_x],ax ;¢ëáâ ¢«ï¥¬ è¨à¨­ã £®à¨§. áªà®««¨­£ 
  190.                 xor edx,edx
  191.                 mov ecx,ted_rec_w
  192.                 div ecx
  193.                 cmp eax,MIN_H_SCRL_ARE
  194.                 jg @f
  195.                         mov eax,MIN_H_SCRL_ARE
  196.                 @@:
  197.                 dec eax
  198.                 mov dword[ebx+sb_offs_cur_area],eax ;ãáâ ­ ¢«¨¢ ¥¬ ç¨á«® ᨬ¢®«®¢, ª®â®àë¥ ¢« §ïâ ¢ íªà ­ ¤«ï £®à¨§. áªà®««¨­£ 
  199.         .no_size:
  200.         popad
  201.         ret
  202. endp
  203.  
  204. align 16
  205. proc ted_delete uses edi, edit:dword
  206.         mov edi,[edit]
  207.         invoke mem.free,ted_tex
  208.         invoke mem.free,ted_arr_key_pos ;ted_syntax_file
  209.         ret
  210. endp
  211.  
  212.  
  213. ;input:
  214. ; eax = key kodes
  215. align 16
  216. proc ted_key, edit:dword, table:dword, control:dword
  217.         pushad
  218.         mov edi,[edit]
  219.         mov esi,ted_el_focus
  220.         cmp dword[esi],edi
  221.         jne .end_key_fun ;í«¥¬¥­â ­¥ ¢ 䮪ãᥠ¢ë室¨¬ ¨§ ä㭪樨
  222.         mov esi,dword[control]
  223.  
  224.         cmp ah,KEY_F1 ;[F1]
  225.         jne @f
  226.                 stdcall ted_show_help_f1,edi
  227.                 jmp .end_key_fun
  228.         @@:
  229.         cmp ah,KEY_F3 ;[F3]
  230.         jne @f
  231.                 stdcall ted_but_find,edi,0
  232.                 jmp .end_key_fun
  233.         @@:
  234.  
  235.         test esi,KM_CTRL ;Ctrl+...
  236.         jz .key_Ctrl
  237.                 ; *** ¢ë§®¢ ¢­¥è­¨å ä㭪権 ª®â®àë¥ âॡãîâ ®ª­  ®âªàëâ¨ï/á®åà ­¥­¨ï/¯®¨áª /...
  238.                 cmp ted_fun_on_key_ctrl_all,0
  239.                 je .end0
  240.                 xor al,al
  241.                 cmp ah,24 ;Ctrl+O
  242.                 jne @f
  243.                         mov al,'O'
  244.                 @@:
  245.                 cmp ah,31 ;Ctrl+S
  246.                 jne @f
  247.                         mov al,'S'
  248.                 @@:
  249.                 cmp ah,33 ;Ctrl+F
  250.                 jne @f
  251.                         mov al,'F'
  252.                 @@:
  253.                 cmp ah,34 ;Ctrl+G
  254.                 jne @f
  255.                         mov al,'G'
  256.                 @@:
  257.                 cmp ah,35 ;Ctrl+H
  258.                 jne @f
  259.                         mov al,'H'
  260.                 @@:
  261.                 cmp ah,49 ;Ctrl+N
  262.                 jne @f
  263.                         mov al,'N'
  264.                 @@:
  265.                 or al,al
  266.                 jz .end0
  267.                         and eax,0xff
  268.                         test esi,KM_SHIFT
  269.                         jz @f
  270.                                 or eax,0x100
  271.                         @@:
  272.                         stdcall ted_fun_on_key_ctrl_all, eax
  273.                         jmp .end_key_fun
  274.                 .end0:
  275.  
  276.                 ; *** ¢ë§®¢ ¢­ãâ७­¨å ä㭪権
  277.                 cmp ah,30 ;Ctrl+A
  278.                 jne @f
  279.                         call ted_sel_all
  280.                 @@:
  281.                 cmp ah,44 ;Ctrl+Z
  282.                 jne @f
  283.                         stdcall ted_but_undo,edi
  284.                 @@:
  285.                 cmp ah,45 ;Ctrl+X
  286.                 jne @f
  287.                         stdcall ted_but_cut,edi
  288.                 @@:
  289.                 cmp ah,46 ;Ctrl+C
  290.                 jne @f
  291.                         stdcall ted_but_copy,edi
  292.                 @@:
  293.                 cmp ah,47 ;Ctrl+V
  294.                 jne @f
  295.                         stdcall ted_but_paste,edi
  296.                 @@:
  297.                 cmp ah,199 ;Ctrl+Home
  298.                 jne @f
  299.                         call ted_key_ctrl_home
  300.                 @@:
  301.                 cmp ah,207 ;Ctrl+End
  302.                 jne @f
  303.                         call ted_key_ctrl_end
  304.                 @@:
  305.                 jmp .end_key_fun
  306.         .key_Ctrl:
  307.  
  308.         test esi,KM_SHIFT ;Shift+...
  309.         jz .key_Shift
  310.                 cmp ah,72 ;Shift+Up
  311.                 jne @f
  312.                         call ted_sel_key_up
  313.                 @@:
  314.                 cmp ah,75 ;Shift+Left
  315.                 jne @f
  316.                         call ted_sel_key_left
  317.                 @@:
  318.                 cmp ah,77 ;Shift+Right
  319.                 jne @f
  320.                         call ted_sel_key_right
  321.                 @@:
  322.                 cmp ah,80 ;Shift+Down
  323.                 jne @f
  324.                         call ted_sel_key_down
  325.                 @@:
  326.                 ;mov ted_drag_k,1 ;­ ç¨­ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
  327.                 jmp .key_MoveCur
  328.         .key_Shift:
  329. ;-------------------------------------------------
  330.         cmp ah,72 ;178 ;Up
  331.         jne @f
  332.                 call ted_draw_cursor_sumb
  333.                 call ted_cur_move_up
  334.                 cmp dl,8
  335.                 jne .no_red_0
  336.                         call ted_scroll_set_redraw
  337.                         stdcall ted_draw,edi
  338.                         jmp @f
  339.                 .no_red_0:
  340.                 call ted_sel_end
  341.         @@:
  342.         cmp ah,80 ;177 ;Down
  343.         jne @f
  344.                 call ted_draw_cursor_sumb
  345.                 call ted_cur_move_down
  346.                 cmp dl,8
  347.                 jne .no_red_1
  348.                         call ted_scroll_set_redraw
  349.                         stdcall ted_draw,edi
  350.                         jmp @f
  351.                 .no_red_1:
  352.                 call ted_sel_end
  353.         @@:
  354.         cmp ah,75 ;176 ;Left
  355.         jne @f
  356.                 call ted_draw_cursor_sumb
  357.                 call ted_cur_move_left
  358.                 cmp dl,8
  359.                 jne .no_red_2
  360.                         call ted_scroll_set_redraw
  361.                         stdcall ted_draw,edi
  362.                         jmp @f
  363.                 .no_red_2:
  364.                 call ted_sel_end
  365.         @@:
  366.         cmp ah,77 ;179 ;Right
  367.         jne @f
  368.                 call ted_draw_cursor_sumb
  369.                 call ted_cur_move_right
  370.                 cmp dl,8
  371.                 jne .no_red_3
  372.                         call ted_scroll_set_redraw
  373.                         stdcall ted_draw,edi
  374.                         jmp @f
  375.                 .no_red_3:
  376.                 call ted_sel_end
  377.         @@:
  378.         cmp ah,71 ;180 ;Home
  379.         jne @f
  380.                 call ted_draw_cursor_sumb
  381.                 call ted_cur_move_x_first_char
  382.                 cmp dl,8
  383.                 jne .no_red_4
  384.                         call ted_scroll_set_redraw
  385.                         stdcall ted_draw,edi
  386.                         jmp @f
  387.                 .no_red_4:
  388.                 call ted_sel_end
  389.         @@:
  390.         cmp ah,79 ;181 ;End
  391.         jne @f
  392.                 call ted_draw_cursor_sumb
  393.                 call ted_cur_move_x_last_char
  394.                 cmp dl,8
  395.                 jne .no_red_5
  396.                         call ted_scroll_set_redraw
  397.                         stdcall ted_draw,edi
  398.                         jmp @f
  399.                 .no_red_5:
  400.                 call ted_sel_end
  401.         @@:
  402.         cmp ah,73 ;184 ;PageUp
  403.         jne @f
  404.                 call ted_cur_move_page_up
  405.                 cmp dl,0
  406.                 je @f
  407.                 call ted_scroll_set_redraw
  408.                 stdcall ted_draw,edi
  409.                 mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
  410.         @@:
  411.         cmp ah,81 ;183 ;PageDown
  412.         jne @f
  413.                 call ted_cur_move_page_down
  414.                 cmp dl,0
  415.                 je @f
  416.                 call ted_scroll_set_redraw
  417.                 stdcall ted_draw,edi
  418.                 mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
  419.         @@:
  420. ;-------------------------------------------------
  421.         .key_MoveCur:
  422.  
  423.         ;­¨¦¥ ¯à®¯ã᪠îâáï á«ã¦¥¡­ë¥ ª« ¢¨è¨, ª®â®àë¥ ¬®£ãâ ¤ ¢ âì ¬ãá®à­ë¥ ᨬ¢®«ë ¢ ®ª­®
  424.         cmp ah,42 ;[L Shift] ª®£¤  ­ ¦ â ¡¥§ ¤àã£¨å ª­®¯®ª
  425.         je .end_key_fun
  426.         cmp ah,54 ;[R Shift] ª®£¤  ­ ¦ â ¡¥§ ¤àã£¨å ª­®¯®ª
  427.         je .end_key_fun
  428.         cmp ah,58 ;[Caps Lock]
  429.         je .end_key_fun
  430.         cmp ah,69 ;[Pause Break]
  431.         je .end_key_fun
  432.         cmp ah,120 ;[Fn]
  433.         je .end_key_fun
  434.         cmp ah,0x80 ;if key up
  435.         ja .end_key_fun
  436.  
  437.         cmp dword[table],0
  438.         je @f
  439.                 stdcall KeyConvertToASCII, [table]
  440.         @@:
  441.  
  442.         ;mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
  443.  
  444.         lea edx,[EvChar] ;¡¥à¥¬  ¤à¥á â ¡«¨æë á ¤®¯ãá⨬묨 ᨬ¢®« ¬¨
  445.         add dl,ah
  446.         jae @f
  447.                 add edx,0x100 ;¥á«¨ ¡ë«® ¯¥à¥¯®«­¥­¨¥ ¯à¨ ¤®¡ ¢«¥­¨¨ ª®¤  ᨬ¢®« 
  448.         @@:
  449.         cmp byte[edx],1
  450.         jne @f
  451.                 mov ted_key_new,ah
  452.                 call ted_set_undo
  453.                 mov edx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
  454.                 stdcall ted_sel_text_del,edx
  455.                 cmp al,1
  456.                 jne .del
  457.                         mov edx,ted_opt_ed_move_cursor
  458.                 .del:
  459.                 cmp ted_cur_ins,1
  460.                 je .no_ins_mod
  461.                         stdcall ted_text_del,edi,ted_opt_ed_change_time
  462.                         mov edx,ted_opt_ed_move_cursor
  463.                 .no_ins_mod:
  464.                 mov ecx,edi
  465.                 add ecx,ted_offs_key_new
  466.                 stdcall ted_text_add,edi,ecx,1,edx ;¤®¡ ¢«ï¥¬ ᨬ¢®« ¢¢¥¤¥­­ë© á ª« ¢¨ âãàë
  467.                 cmp ted_key_new,13
  468.                 jne .dr_m_win
  469.                         ;¥á«¨ ¢áâ ¢¨«¨ ᨬ¢®« ­®¢®© áâப¨
  470.                         mov ecx,ted_scr_w
  471.                         inc dword[ecx+sb_offs_max_area] ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¢¥à⨪ «ì­®£® áªà®««¨­£ 
  472.                         mov edx,ted_cur_y
  473.                         cmp edx,[ecx+sb_offs_cur_area]
  474.                         jl .no_change
  475.                                 dec ted_cur_y ;ªãàá®à ®áâ ¢«ï¥¬ ­  ¬¥áâ¥
  476.                                 inc dword[ecx+sb_offs_position] ;ᤢ¨£ ¥¬ ¯®«§ã­®ª
  477.                         .no_change:
  478.                         stdcall ted_draw,edi
  479.                         jmp .dr_cur_l
  480.                 .dr_m_win:
  481.                         stdcall ted_draw_cur_line,edi
  482.                 .dr_cur_l:
  483.                 cmp ted_fun_draw_panel_buttons,0
  484.                 je @f
  485.                         call ted_fun_draw_panel_buttons
  486.         @@:
  487.  
  488.         cmp ah,8 ;[<-]
  489.         jne @f
  490.                 call ted_set_undo
  491.                 stdcall ted_sel_text_del,ted_opt_ed_change_time
  492.                 cmp al,1
  493.                 je .del_one_b
  494.                         stdcall ted_text_del,edi,ted_opt_ed_change_time+ted_opt_ed_move_cursor
  495.                 .del_one_b:
  496.                 stdcall ted_draw,edi
  497.                 cmp ted_fun_draw_panel_buttons,0
  498.                 je .end_key_fun
  499.                         call ted_fun_draw_panel_buttons
  500.                 jmp .end_key_fun
  501. align 4
  502.         @@:
  503.  
  504.         cmp ah,182 ;Delete
  505.         jne @f
  506.                 call ted_set_undo
  507.                 stdcall ted_sel_text_del,ted_opt_ed_change_time
  508.                 cmp al,1
  509.                 je .del_one_d
  510.                         stdcall ted_text_del,edi,ted_opt_ed_change_time
  511.                 .del_one_d:
  512.                 stdcall ted_draw,edi
  513.                 cmp ted_fun_draw_panel_buttons,0
  514.                 je .end_key_fun
  515.                         call ted_fun_draw_panel_buttons
  516.                 jmp .end_key_fun
  517.         @@:
  518.  
  519.         cmp ah,185 ;Ins
  520.         jne @f
  521.                 call ted_draw_cursor_sumb
  522.                 xor ted_cur_ins,1
  523.                 call ted_draw_main_cursor
  524.         @@:
  525.  
  526.         .end_key_fun:
  527.         popad
  528.         ret
  529. endp
  530.  
  531. ;output:
  532. ; al = 1 - can save
  533. align 16
  534. proc ted_can_save uses ecx edi, edit:dword
  535.         mov edi,[edit]
  536.  
  537.         mov ecx,ted_tim_ch
  538.         sub ecx,ted_tim_undo
  539.         mov al,1
  540.         cmp ted_tim_ls,ecx
  541.         jne @f
  542.                 dec al
  543.         @@:
  544.         ret
  545. endp
  546.  
  547. ;input:
  548. ; edi = pointer to tedit struct
  549. ;output:
  550. ; al = 1 - selected
  551. align 16
  552. proc ted_is_select uses ebx
  553.         xor al,al
  554.         cmp ted_drag_m,1
  555.         je @f
  556.                 inc al
  557.                 mov ebx,ted_sel_x0
  558.                 cmp ebx,ted_sel_x1
  559.                 jne @f
  560.                 mov ebx,ted_sel_y0
  561.                 cmp ebx,ted_sel_y1
  562.                 jne @f
  563.                 xor al,al
  564.         @@:
  565.         ret
  566. endp
  567.  
  568. ;input:
  569. ; edi = pointer to tedit struct
  570. align 16
  571. proc ted_sel_normalize uses ecx esi
  572.         push edi
  573.                 mov esi,edi
  574.                 add esi,ted_offs_sel
  575.                 add edi,ted_offs_seln
  576.                 mov ecx,sizeof.TexSelect/4
  577.                 rep movsd
  578.         pop edi
  579.  
  580.         jmp @f
  581.                 .swp_f:
  582.                 mov ecx,ted_seln_x0
  583.                 m2m ted_seln_x0,ted_seln_x1
  584.                 mov ted_seln_x1,ecx
  585.  
  586.                 mov ecx,ted_seln_y0
  587.                 cmp ecx,ted_seln_y1 ;(sel_y0>sel_y1)
  588.                 jle .end_f
  589.                 m2m ted_seln_y0,ted_seln_y1
  590.                 mov ted_seln_y1,ecx
  591.  
  592.                 jmp .end_f
  593. align 4
  594.         @@:
  595.  
  596.         mov ecx,ted_seln_y0
  597.         cmp ecx,ted_seln_y1 ;(sel_y0>sel_y1)
  598.         jg .swp_f
  599.  
  600.         cmp ecx,ted_seln_y1 ;(sel_y0==sel_y1)
  601.         jne .end_f
  602.                 mov ecx,ted_seln_x0
  603.                 cmp ecx,ted_seln_x1 ;(sel_x0>sel_x1)
  604.                 jg .swp_f
  605.  
  606.         .end_f:
  607.         ret
  608. endp
  609.  
  610. ;input:
  611. ; edi = pointer to tedit struct
  612. ;description:
  613. ; ”ã­ªæ¨ï ¢ë§ë¢ ¥¬ ï ¯à¨ ­ ç «¥ ¢ë¤¥«¥­¨ï
  614. align 16
  615. proc ted_sel_start uses eax ecx
  616.         mov eax,ted_scr_h
  617.         mov ecx,ted_cur_x
  618.         add ecx,[eax+sb_offs_position]
  619.         mov ted_sel_x0,ecx
  620.         mov ted_sel_x1,ecx
  621.  
  622.         mov eax,ted_scr_w
  623.         mov ecx,ted_cur_y
  624.         add ecx,[eax+sb_offs_position]
  625.         mov ted_sel_y0,ecx
  626.         mov ted_sel_y1,ecx
  627.         ret
  628. endp
  629.  
  630. ;input:
  631. ; edi = pointer to tedit struct
  632. ;description:
  633. ; ”ã­ªæ¨ï ¢ë§ë¢ ¥¬ ï ¯à¨ á­ï⨨ ¢ë¤¥«¥­¨ï
  634. align 16
  635. proc ted_sel_end uses eax
  636.         mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
  637.         call ted_is_select
  638.         or al,al
  639.         jz @f
  640.                 xor eax,eax
  641.                 mov ted_sel_x0,eax
  642.                 mov ted_sel_x1,eax
  643.                 mov ted_sel_y0,eax
  644.                 mov ted_sel_y1,eax
  645.                 stdcall ted_draw,edi
  646.                 jmp .end_f
  647.         @@:
  648.         call ted_draw_main_cursor
  649.         .end_f:
  650.         ret
  651. endp
  652.  
  653. ;input:
  654. ; edi = pointer to tedit struct
  655. ;description:
  656. ; ”ã­ªæ¨ï ¢ë§ë¢ ¥¬ ï ¯à¨ ¯¥à¥¬¥é¥­¨¨ ¢ë¤¥«¥­¨ï
  657. align 16
  658. proc ted_sel_move
  659.         push eax ecx
  660.                 mov ecx,ted_cur_x
  661.                 mov eax,ted_scr_h
  662.                 add ecx,[eax+sb_offs_position]
  663.                 mov ted_sel_x1,ecx
  664.  
  665.                 mov eax,ted_scr_w
  666.                 mov ecx,ted_cur_y
  667.                 add ecx,[eax+sb_offs_position]
  668.                 mov ted_sel_y1,ecx
  669.         pop ecx eax
  670.         cmp ted_fun_draw_panel_buttons,0 ;redraw toolbar (need to button Copy)
  671.         je @f
  672.                 call ted_fun_draw_panel_buttons
  673.         @@:
  674.         ret
  675. endp
  676.  
  677. ;input:
  678. ; edi = pointer to tedit struct
  679. ;description:
  680. ; ”ã­ªæ¨ï ¢ë§ë¢ ¥¬ ï ¯à¨ ¢ë¤¥«¥­¨¨ ¢á¥£® ¤®ªã¬¥­â 
  681. align 16
  682. proc ted_sel_all
  683.         push eax
  684.                 xor eax,eax
  685.                 mov ted_sel_x0,eax
  686.                 mov ted_sel_y0,eax
  687.  
  688.                 mov ted_sel_x1,eax ;???
  689.                 call ted_get_num_lines
  690.                 mov ted_sel_y1,eax
  691.         pop eax
  692.         stdcall ted_draw,edi
  693.         cmp ted_fun_draw_panel_buttons,0 ;redraw toolbar (need to button Copy)
  694.         je @f
  695.                 call ted_fun_draw_panel_buttons
  696.         @@:
  697.         ret
  698. endp
  699.  
  700. ;input:
  701. ; cl_al_mem = 1 - clear all memory
  702. align 16
  703. proc ted_clear uses ecx edi, edit:dword, cl_al_mem:dword
  704.         mov edi,[edit]
  705.  
  706.         mov ted_cur_x,0
  707.         mov ted_cur_y,0
  708.         mov ted_tim_ch,0
  709.         mov ted_tim_ls,0
  710.         mov ted_tim_co,0
  711.         mov ted_tim_undo,0
  712.         mov ted_help_id,-1
  713.         mov ecx,sizeof.symbol
  714.         shl ecx,1
  715.         add ecx,ted_tex
  716.         mov ted_ptr_free_symb,ecx
  717.  
  718.         mov ecx,ted_scr_w
  719.         mov dword[ecx+sb_offs_position],0
  720.         mov dword[ecx+sb_offs_max_area],100 ;ç¨á«® áâப ¢¨¤¨¬ëå ¢ ­®¢®¬ ¤®ªã¬¥­â¥
  721.         mov dword[ecx+sb_offs_redraw],1
  722.         mov ecx,ted_scr_h
  723.         mov dword[ecx+sb_offs_position],0
  724.         mov dword[ecx+sb_offs_max_area],100 ;ç¨á«® ᨬ¢®«®¢ ¢¨¤¨¬ëå ¢ ­®¢®¬ ¤®ªã¬¥­â¥
  725.  
  726.         mov ted_sel_x0,0
  727.         mov ted_sel_y0,0
  728.         mov ted_sel_x1,0
  729.         mov ted_sel_y1,0
  730.  
  731.         cmp dword[cl_al_mem],0
  732.         je .exit
  733.  
  734.         push edx
  735.         mov ecx,sizeof.symbol
  736.         imul ecx,ted_max_chars
  737.         mov edx,ted_tex
  738.         @@:
  739.                 mov byte [edx],0
  740.                 inc edx
  741.         loop @b
  742.         mov edx,ted_tex
  743.         mov dword [edx+symbol.next],1
  744.         pop edx
  745.  
  746.         .exit:
  747.         ret
  748. endp
  749.  
  750.  
  751. align 16
  752. proc ted_init_syntax_file, edit:dword
  753.         pushad
  754.         mov edi,[edit]
  755.  
  756.         mov ecx,0x100
  757.         mov edx,ted_arr_key_pos
  758.         @@:
  759.                 mov dword[edx],-1
  760.                 add edx,4
  761.         loop @b
  762.  
  763.         ;init: ted_colors_text_count, ted_key_words_count, ...
  764.         mov ted_colors_text_count,1
  765.         mov ted_key_words_count,0
  766.         mov ted_help_text_f1,0
  767.         mov ted_help_id,-1 ;¨¤¥­â¨ä¨ª â®à á«®¢  ¤«ï á¯à ¢ª¨
  768.  
  769.         mov eax,edi ;á®å࠭塞 §­ ç¥­¨¥ edi
  770.         mov esi,ted_syntax_file
  771.         add edi,ted_offs_count_colors
  772.         mov ecx,9
  773.         rep movsd
  774.         mov edi,eax ;¢®áâ ­ ¢«¨¢ ¥¬ §­ ç¥­¨¥ edi
  775.  
  776.         mov eax,ted_syntax_file
  777.         add eax,32
  778.         mov ted_text_colors,eax
  779.  
  780.         mov eax,ted_colors_text_count ;init: count_colors_text (offset to key words)
  781.         lea eax,[4*eax+32]
  782.         add eax,ted_syntax_file
  783.         mov ted_key_words_data,eax
  784.  
  785.         mov ecx,ted_key_words_count ;init: ted_arr_key_pos (first key positions)
  786.         xor eax,eax
  787.         @@:
  788.                 ColToIndexOffset eax,edx
  789.                 movzx ebx,byte[edx]
  790.                 mov esi,ted_arr_key_pos
  791.                 lea esi,[esi+4*ebx]
  792.                 cmp dword[esi],-1
  793.                 jne .no_ch_key
  794.                         mov [esi],eax
  795.                 .no_ch_key:
  796.                 inc eax
  797.         loop @b
  798.  
  799.         ;init: ted_help_text_f1
  800.         mov ecx,ted_key_words_count ;ª®«¨ç¥á⢮ ª«î祢ëå á«®¢
  801.         imul ecx,sizeof.TexColViv   ;à §¬¥à áâàãªâãàë á 1-¬ ª«. á«.
  802.         add ecx,ted_key_words_data  ;­ ç «® ä ©«  á ª«. á«.
  803.         mov ted_help_text_f1,ecx    ;¬¥âª  ¢ ¯ ¬ïâ¨, £¤¥ ­ ç¨­¥âáï ⥪áâ á® á¯à ¢ª®©
  804.  
  805.         stdcall ted_init_scroll_bars,edi,1 ;¬¥­ï¥¬ æ¢¥â  áªà®««¨­£®¢
  806.         .no_colors:
  807.         popad
  808.         ret
  809. endp
  810.  
  811. ;input:
  812. ; ebx = file size
  813. ; edi = pointer to tedit struct
  814. ;description:
  815. ; ”ã­ªæ¨ï ¢ë§ë¢ ¥âáï ¯à¨ ®âªàë⨨ ä ©« 
  816. align 16
  817. proc ted_on_open_file
  818.         push eax ;destination
  819.         push ecx ;for cycle
  820.         push edx ;source
  821.         push esi
  822.  
  823.         or ebx,ebx
  824.         jnz @f
  825.                 ;¥á«¨ ä ©« ¯ãá⮩
  826.                 stdcall ted_clear,edi,1 ;ç¨á⨬ ¢áî ¯ ¬ïâì
  827.                 jmp .end_opn
  828.         @@:
  829.         stdcall ted_clear,edi,0 ;ç¨á⨬ ­¥ ¢áî ¯ ¬ïâì, ¯®â®¬ã çâ® ­¨¦¥ ¡ã¤¥¬ ¥¥ § ¯®«­ïâì ­®¢ë¬¨ ¤ ­ë¬¨
  830.  
  831.         ;ª®£¤  ᨬ¢®« § ¢¥à襭¨ï áâப¨ ⮫쪮 10 (¡¥§ 13)
  832.         mov edx,ted_tex
  833.         mov ecx,ebx
  834.         @@:
  835.                 cmp byte[edx],13
  836.                 je .no_10 ;¥á«¨ ­ ©¤¥­ ᨬ¢®« 13, â® 10-¥ ¨£­®à¨à㥬
  837.                 inc edx
  838.                 loop @b
  839.         mov edx,ted_tex
  840.         mov ecx,ebx
  841.         .s_10:
  842.                 cmp byte[edx],10
  843.                 jne @f
  844.                         mov byte[edx],13 ;¬¥­ï¥¬ 10-© ᨬ¢®« ª®­æ  áâப¨
  845.                 @@:
  846.                 inc edx
  847.                 loop .s_10
  848.         .no_10:
  849.  
  850.         ;¯¥à¥¢®¤¨¬ ®âªàëâë© ä ©« ¢­ãâàì í«¥¬¥­â  t_edit
  851.         mov ecx,ebx
  852.         lea eax,[ebx+2]
  853.         ConvertIndexToPointer eax
  854.         mov edx,ted_tex
  855.         add edx,ebx
  856.         push ebx
  857.         @@:
  858.                 mov ebx,[edx]
  859.                 mov byte[eax],bl
  860.                 mov dword[eax+symbol.perv],ecx
  861.                 inc dword[eax+symbol.perv]
  862.                 mov dword[eax+symbol.next],ecx
  863.                 add dword[eax+symbol.next],3
  864.                 ;mov byte[eax+1],0 ;col=0
  865.                 mov dword[eax+symbol.tc],-1
  866.                 mov dword[eax+symbol.td],0
  867.  
  868.                 or ecx,ecx
  869.                 jz @f
  870.                 dec ecx
  871.                 dec edx
  872.                 sub eax,sizeof.symbol
  873.                 jmp @b
  874.         @@:
  875.         pop ebx
  876.         mov dword[eax+symbol.perv],0 ; first sumbol 'perv=0'
  877.  
  878.         mov edx,ted_tex ; ­ áâனª¨ ­ ç «ì­®£® á«ã¦¥¡­®£® ᨬ¢®« 
  879.         ; begining sumbol 'perv=0' 'next=2'
  880.         mov dword[edx+symbol.perv],0
  881.         mov dword[edx+symbol.next],2
  882.  
  883.         add edx,sizeof.symbol ; ­ áâனª¨ ª®­¥ç­®£® á«ã¦¥¡­®£® ᨬ¢®« 
  884.         mov dword[edx+symbol.next],0 ; last sumbol 'next=0'
  885.         mov dword[edx+symbol.perv],ebx ; last sumbol 'perv=last'
  886.         inc dword[edx+symbol.perv]
  887.         mov dword[edx+symbol.tc],0 ; áâ ¢¨¬ ¢à¥¬ï ᮧ¤ ­¨ï à ¢­®¥ 0, çâ® ¡ë ᨬ¢®« ¯à ¢¨«ì­® ®¡à ¡ â뢠«áï ¯à¨ ®âªàë⨨ ä ©«®¢ ¡®«ìè¨å 28 ¡ ©â
  888.  
  889.         mov edx,ebx
  890.         inc edx ;2 = rezerv sumbols
  891.         imul edx,sizeof.symbol
  892.         add edx,ted_tex
  893.         mov dword[edx+symbol.next],1 ; last sumbol 'next=1'
  894.  
  895.         @@: ;clear memory, need if before was open big file
  896.                 add edx,sizeof.symbol
  897.                 cmp edx,ted_tex_end
  898.                 jge .end_opn
  899.                         mov dword[edx+symbol.tc],0
  900.                         mov dword[edx+symbol.td],0
  901.                 jmp @b
  902.         .end_opn:
  903.  
  904.         call ted_get_num_lines
  905.         cmp eax,TED_LINES_IN_NEW_FILE
  906.         jge @f
  907.                 mov eax,TED_LINES_IN_NEW_FILE
  908.         @@:
  909.         mov esi,ted_scr_w
  910.         mov dword[esi+sb_offs_max_area],eax
  911.         pop esi edx ecx eax
  912.  
  913.         call ted_text_colored
  914.         stdcall ted_draw,edi
  915.         cmp ted_fun_draw_panel_buttons,0
  916.         je @f
  917.                 call ted_fun_draw_panel_buttons
  918.         @@:
  919.         ret
  920. endp
  921.  
  922. ;input:
  923. ; edx = pointer to symbol struct
  924. ; edi = pointer to tedit struct
  925. ;output:
  926. ; edx = pointer to 'perv' visible symbol struct
  927. align 16
  928. ted_iterat_perv:
  929.         cmp ted_tim_undo,0
  930.         je .else
  931.         push ebx
  932.         @@:
  933.                 mov edx,[edx+symbol.perv]
  934.                 or edx,edx
  935.                 jz @f
  936.                 imul edx,sizeof.symbol
  937.                 add edx,ted_tex
  938.                 call ted_symbol_not_vis
  939.                 cmp bl,1
  940.                 je @b
  941.                 cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®«  á ª®¤®¬ 10
  942.                 je @b
  943.         pop ebx
  944.         ret
  945.         @@:
  946.         mov edx,ted_tex ;­ ç «® ä ©« 
  947.         pop ebx
  948.         ret
  949.         .else:
  950.                 mov edx,[edx+symbol.perv]
  951.                 or edx,edx
  952.                 jz @f
  953.                 imul edx,sizeof.symbol
  954.                 add edx,ted_tex
  955.                 cmp dword[edx+symbol.td],0
  956.                 jne .else
  957.                 cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®«  á ª®¤®¬ 10
  958.                 je .else
  959.         ret
  960.         @@:
  961.         mov edx,ted_tex ;­ ç «® ä ©« 
  962.         ret
  963.  
  964.  
  965. ;input:
  966. ; edx = pointer to symbol struct
  967. ; edi = pointer to tedit struct
  968. ;output:
  969. ; edx = pointer to 'next' visible symbol struct
  970. align 16
  971. ted_iterat_next:
  972.         cmp ted_tim_undo,0
  973.         je .else
  974.         push ebx
  975.         @@:
  976.                 mov edx,[edx+symbol.next]
  977.                 cmp edx,1
  978.                 jle @f
  979.                 imul edx,sizeof.symbol
  980.                 add edx,ted_tex
  981.  
  982.                 call ted_symbol_not_vis
  983.                 cmp bl,1
  984.                 je @b
  985.                 cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®«  á ª®¤®¬ 10
  986.                 je @b
  987.         pop ebx
  988.         ret
  989.         @@:
  990.         mov edx,ted_tex_1 ;ª®­¥æ ä ©« 
  991.         pop ebx
  992.         ret
  993.         .else:
  994.                 mov edx,[edx+symbol.next]
  995.                 cmp edx,1
  996.                 jle @f
  997.                 imul edx,sizeof.symbol
  998.                 add edx,ted_tex
  999.  
  1000.                 cmp dword[edx+symbol.td],0
  1001.                 jne .else
  1002.                 cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®«  á ª®¤®¬ 10
  1003.                 je .else
  1004.         ret
  1005.         @@:
  1006.         mov edx,ted_tex_1 ;ª®­¥æ ä ©« 
  1007.         ret
  1008.  
  1009. ;input:
  1010. ; bl = symbol end of select
  1011. ; bh = íªà ­¨àãî騩 ᨬ¢®« (= 0 ¥á«¨ ­¥â ¯à®¢¥àª¨ ­  ­¨å)
  1012. ; edx = pointer to symbol struct
  1013. ; edi = pointer to tedit struct
  1014. ;description:
  1015. ; ­ ©â¨ á«¥¤ãîéãî ¯®§¨æ¨î 㪠§ ­­®£® ᨬ¢®« 
  1016. align 16
  1017. ted_iterat_next_pos_char:
  1018.         push ax
  1019.         mov al,1 ;¯à¥¤ë¤ã騩 ᨬ¢®«, á«ã¦¨â ¤«ï áà ¢­¥­¨ï á ᨬ¢®«®¬ bh
  1020.         @@:
  1021.                 cmp bl,byte[edx]
  1022.                 je .found
  1023.                 .no_found:
  1024.                 cmp edx,ted_tex_1
  1025.                 jle @f
  1026.                         mov al,byte[edx]
  1027.                         call ted_iterat_next
  1028.                         jmp @b
  1029.         .found:
  1030.                 cmp bh,al
  1031.                 je .no_found
  1032.         @@:
  1033.         call ted_iterat_next
  1034.         pop ax
  1035.         ret
  1036.  
  1037. ;input:
  1038. ; edx = pointer to symbol struct
  1039. ; edi = pointer to tedit struct
  1040. align 16
  1041. ted_iterat_perv_color_tag:
  1042.         @@:
  1043.                 cmp byte[edx+1],0
  1044.                 jne @f
  1045.                 call ted_iterat_perv
  1046.                 cmp edx,ted_tex_1
  1047.                 jle @f
  1048.                 jmp @b
  1049. align 4
  1050.         @@:
  1051.         ret
  1052.  
  1053. ;input:
  1054. ; edx = pointer to symbol struct
  1055. ; edi = pointer to tedit struct
  1056. align 16
  1057. ted_iterat_next_color_tag:
  1058.         @@:
  1059.                 call ted_iterat_next
  1060.                 cmp byte[edx+1],0
  1061.                 jne @f
  1062.                 cmp edx,ted_tex_1
  1063.                 jle @f
  1064.                 jmp @b
  1065. align 4
  1066.         @@:
  1067.         ret
  1068.  
  1069. ;input:
  1070. ; edx = pointer to symbol struct
  1071. ; edi = pointer to tedit struct
  1072. ;output:
  1073. ; bl = 1 if sumbol not visible
  1074. ; (tex[i].td+ted_tim_undo<=ted_tim_ch && tex[i].td) || (tex[i].tc>ted_tim_ch-ted_tim_undo)
  1075. align 16
  1076. ted_symbol_not_vis:
  1077.         push eax
  1078.  
  1079.         xor bl,bl
  1080.         cmp dword[edx+symbol.td],0
  1081.         je @f
  1082.         mov eax,[edx+symbol.td] ;eax=tex[i].td
  1083.         add eax,ted_tim_undo
  1084.         cmp eax,ted_tim_ch
  1085.         jg @f
  1086.                 mov bl,1
  1087.                 pop eax
  1088.                 ret
  1089.         @@:
  1090.  
  1091.         mov eax,ted_tim_ch
  1092.         sub eax,ted_tim_undo
  1093.         cmp [edx+symbol.tc],eax
  1094.         jle @f
  1095.                 or bl,1
  1096.         @@:
  1097.  
  1098.         pop eax
  1099.         ret
  1100.  
  1101. ;input:
  1102. ; text - pointer to text string
  1103. ; add_opt - options
  1104. align 16
  1105. proc ted_text_add, edit:dword, text:dword, t_len:dword, add_opt:dword
  1106.         locals
  1107.                 new_spc dd ? ;count new spaces
  1108.                 new_lin dd ? ;count new lines
  1109.         endl
  1110. ;¨á¯®«ì§®¢ ­¨¥ ॣ¨áâ஢ ¢­ãâਠä㭪樨:
  1111. ;eax - ¯®§¨æ¨ï ¤«ï ¢áâ ¢ª¨ ⥪áâ 
  1112. ;ebx - ¤«ï ¢à¥¬¥­­ëå ­ã¦¤, ¤«¨­­  ¢áâ ¢«ï¥¬®£® ⥪áâ 
  1113. ;ecx - ¤«ï ¢à¥¬¥­­ëå ­ã¦¤
  1114. ;edx - 㪠§ â¥«ì ­  áâàãªâãàã ᨬ¢®« 
  1115.         pushad
  1116.         cmp dword[t_len],1 ;¯à®¢¥à塞 ¤«¨­­ã ¤®¡¢«ï¥¬®£® ⥪áâ 
  1117.         jl .no_add ;ª®£¤  ¤«¨­­  <1 ¯à룠¥¬ ­  ª®­¥æ ä㭪樨, ¢® ¨§¡¥¦ ­¨¥ £«îª®¢
  1118.  
  1119.         mov edi,[edit]
  1120.         mov esi,[text]
  1121.  
  1122.         call ted_get_pos_by_cursor
  1123.         call ted_get_text_perv_pos
  1124.         call ted_get_text_arr_index ;eax=po_t
  1125.  
  1126.         mov dword[new_spc],0
  1127.         cmp ted_gp_opt,2
  1128.         je @f
  1129.                 push eax ;c_sp=cur[cn].x+Scroller->XPos-StrLen(cur[cn].y+Scroller->YPos);
  1130.                         mov eax,ted_scr_h
  1131.                         mov eax,[eax+sb_offs_position]
  1132.                         add eax,ted_cur_x ;eax - ­®¬¥à ᨬ¢®« 
  1133.                         mov [new_spc],eax
  1134.  
  1135.                         mov eax,ted_scr_w
  1136.                         mov eax,[eax+sb_offs_position]
  1137.                         add eax,ted_cur_y ;eax - ­®¬¥à áâப¨
  1138.                         call ted_strlen ;ebx = line len
  1139.                         sub [new_spc],ebx ;®â ¯®§¨æ¨¨ ªãàá®à  ®â­¨¬ ¥¬ ¤«¨­­ã áâப¨, 㧭 ¥¬ ª®««¨ç¥á⢮ ¤®¡ ¢«ï¥¬ëå ¯à®¡¥«®¢
  1140.                 pop eax
  1141.         @@:
  1142.  
  1143.         mov ebx,[t_len]
  1144.  
  1145.         mov dword[new_lin],0
  1146.         cmp ted_gp_opt,0
  1147.         jne @f
  1148.                 push eax
  1149.                         mov eax,ted_scr_w
  1150.                         mov eax,[eax+sb_offs_position]
  1151.                         add eax,ted_cur_y
  1152.                         inc eax
  1153.                         mov [new_lin],eax
  1154.  
  1155.                         call ted_get_num_lines
  1156.                         sub [new_lin],eax
  1157.                         ;㢥«¨ç¨¢ ¥¬ «¨­¨¨ ¢ áªà®««¨­£¥ ­  ç¨á«® ¤®¡ ¢«¥­­ëå ¤®¯®«­¨â¥«ì­ëå áâப
  1158.                         mov ecx,ted_scr_w
  1159.                         add [ecx+sb_offs_max_area],eax ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¢¥à⨪ «ì­®£® áªà®««¨­£ 
  1160.                 pop eax
  1161.         @@:
  1162.  
  1163.         mov edx,ted_ptr_free_symb
  1164.         .beg_cycle: ;for(i=...;i<ted_max_chars;i++)
  1165.                 cmp dword[edx+symbol.tc],0 ;if(!tex[i].tc && !tex[i].td)
  1166.                 jne .u1f
  1167.                 cmp dword[edx+symbol.td],0
  1168.                 jne .u1f
  1169.                         test dword[add_opt],ted_opt_ed_change_time ;if(n_tim) ted_tim_ch++;
  1170.                         jz .no_tim
  1171.                                 inc ted_tim_ch
  1172.                         .no_tim:
  1173.                         test dword[add_opt],ted_opt_ed_move_cursor
  1174.                         jz .no_cur_mov
  1175.                         cmp dword[new_lin],0 ;¥á«¨ ¥áâì ¤®¡ ¢®ç­ë¥ áâப¨, â® ªãàá®à ¥é¥ ­¥ ¤¢¨£ ¥¬
  1176.                         jg .no_cur_mov
  1177.                         cmp dword[new_spc],0 ;¥á«¨ ­¥â ¤®¡ ¢®ç­ëå ¯à®¡¥«®¢, â® ªãàá®à ⮦¥ ­¥ ¤¢¨£ ¥¬
  1178.                         jg .no_cur_mov
  1179.                                 inc ted_cur_x ;move cursor
  1180.                                 ;call ted_go_to_pos
  1181.                                 cmp byte[esi],13
  1182.                                 jne .no_cur_mov
  1183.                                         mov ted_cur_x,0
  1184.                                         inc ted_cur_y
  1185.                                         ;㢥«¨ç¨¢ ¥¬ «¨­¨¨ ¢ áªà®««¨­£¥ ­  ç¨á«® ¤®¡ ¢«¥­­ëå ¢ ⥪á⥠áâப
  1186.                                         mov ecx,ted_scr_w
  1187.                                         inc dword[ecx+sb_offs_max_area] ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¢¥à⨪ «ì­®£® áªà®««¨­£ 
  1188.                         .no_cur_mov:
  1189.  
  1190.                         ; *** ¢áâ ¢ª  ⥪ã饣® ᨬ¢®«  ¨§ áâப¨ ***
  1191.                         mov ecx,ted_opt_ed_change_time
  1192.                         not ecx
  1193.                         and [add_opt],ecx ;n_tim=false;
  1194.  
  1195.                         mov cl,byte[esi] ;tex[i].c=ta[ns];
  1196.                         mov byte[edx],cl
  1197.                         m2m dword[edx+symbol.tc],ted_tim_ch ;tex[i].tc=ted_tim_ch;
  1198.                         mov [edx+symbol.perv],eax ;tex[i].perv=po_t;
  1199.  
  1200.                         mov ecx,eax
  1201.                         imul ecx,sizeof.symbol
  1202.                         add ecx,ted_tex ; *** ecx = tex[po_t] ***
  1203.                         add ecx,symbol.next ; *** ecx = tex[po_t].next ***
  1204.                         m2m dword[edx+symbol.next],dword[ecx] ;tex[i].next=tex[po_t].next;
  1205.  
  1206.                         call ted_get_text_arr_index ;*** eax = i ***
  1207.                         mov [ecx],eax ;tex[po_t].next=i; // áá뫪¨ ¯¥à¥­ ¯à ¢«ï¥¬
  1208.                         mov ecx,[edx+symbol.next] ; *** ecx = tex[i].next ***
  1209.                         imul ecx,sizeof.symbol
  1210.                         add ecx,ted_tex ; *** ecx = tex[tex[i].next] ***
  1211.                         mov [ecx+symbol.perv],eax ;tex[tex[i].next].perv=i;
  1212.  
  1213.                         ; *** ¢áâ ¢ª  ¤®¯®«­¨â¥«ì­ëå áâப ¨ ¯à®¡¥«®¢
  1214.                         ; ¥á«¨ ªãàá®à ¢® ¢à¥¬ï ¢áâ ¢ª¨ ­ å®¤¨«áï §  ⥪á⮬ ***
  1215.                         cmp dword[new_lin],0 ;add lines or text
  1216.                         jle .spc_add
  1217.                                 dec dword[new_lin]
  1218.                                 mov byte [edx],13
  1219.                                 jmp .u1f
  1220.                         .spc_add:
  1221.                         cmp dword[new_spc],0 ;add spaces or text
  1222.                         jle .tex_add
  1223.                                 dec dword[new_spc]
  1224.                                 mov byte [edx],' '
  1225.                                 jmp .u1f
  1226.                         .tex_add:
  1227.                         inc esi ; ¯¥à¥å®¤ ª á«¥¤ãî饬㠢áâ ¢«ï¥¬®¬ã ᨬ¢®«ã
  1228.                         dec ebx
  1229.                 .u1f:
  1230.                 add edx,sizeof.symbol
  1231.                 cmp edx,ted_tex_end
  1232.                 jge @f ;out of memory
  1233.                 or ebx,ebx
  1234.                 jnz .beg_cycle
  1235.                 mov ted_ptr_free_symb,edx ;¬¥­ï¥¬ 㪠§ â¥«ì ­  ᢮¡®¤­ë© ᨬ¢®«, ¤«ï ¡®«¥¥ ¡ëáâண® ¯®¨áª  ¯ ¬ïâ¨
  1236.                 jmp .add_all
  1237.         @@:
  1238.         cmp ted_increase_size,0
  1239.         je .add_all
  1240.                 call ted_memory_increase
  1241.                 or ebx,ebx
  1242.                 jnz .beg_cycle
  1243.         .add_all: ;¢á¥ ᨬ¢®«ë ¤®¡ ¢«¥­ë
  1244.  
  1245.         call ted_text_colored
  1246.         .no_add:
  1247.         popad
  1248.         ret
  1249. endp
  1250.  
  1251. ;input:
  1252. ;  edx = pointer to sumbol, when insert
  1253. ;  edi = pointer to tedit struct
  1254. ;output:
  1255. ;  edx = new pointer to sumbol, when insert
  1256. align 16
  1257. proc ted_memory_increase
  1258.         cmp ted_increase_size,0
  1259.         je @f
  1260.                 push eax ebx ecx
  1261.                 mov ecx,ted_increase_size
  1262.                 add ecx,ted_max_chars
  1263.                 mov ted_max_chars,ecx
  1264.                 imul ecx,sizeof.symbol
  1265.                 invoke mem.realloc, ted_tex,ecx
  1266.                 mov ebx,ted_tex
  1267.                 mov ted_tex,eax
  1268.                 mov ted_tex_1,eax
  1269.                 add ted_tex_1,sizeof.symbol
  1270.                         sub edx,ebx
  1271.                         add edx,eax
  1272.                         mov ted_ptr_free_symb,edx
  1273.                 add eax,ecx
  1274.                 mov ted_tex_end,eax
  1275.                 pop ecx ebx eax
  1276.         @@:
  1277.         ret
  1278. endp
  1279.  
  1280. ;input:
  1281. ;  ecx = position to free insert cell
  1282. ;  edx = pointer to sumbol, when insert
  1283. ;  esi = added symbol
  1284. ;  edi = pointer to tedit struct
  1285. ;output:
  1286. ;  ecx = position to inserted cell
  1287. align 16
  1288. ted_char_add:
  1289.         .loop_b:
  1290.                 cmp ecx,ted_tex_end
  1291.                 jge .end_f
  1292.                 cmp dword[ecx+symbol.tc],0
  1293.                 jne @f
  1294.                         cmp dword[ecx+symbol.td],0
  1295.                         je .loop_e
  1296.                 @@:
  1297.                 add ecx,sizeof.symbol
  1298.                 jmp .loop_b
  1299. align 4
  1300.         .loop_e:
  1301.  
  1302.         push eax ebx
  1303.         mov eax,ted_tim_ch
  1304.         mov [ecx+symbol.tc],eax
  1305.         mov ax,si
  1306.         mov byte[ecx],al
  1307.  
  1308.         call ted_get_text_arr_index ; *** eax=pos ***
  1309.         mov [ecx+symbol.perv],eax ;tex[i].perv=pos;
  1310.         m2m dword[ecx+symbol.next],dword[edx+symbol.next] ;tex[i].next=tex[pos].next;
  1311.  
  1312.         push edx
  1313.                 mov edx,ecx
  1314.                 call ted_get_text_arr_index ; *** eax=i ***
  1315.         pop edx
  1316.  
  1317.         mov [edx+symbol.next],eax ;tex[pos].next=i; // áá뫪¨ ¯¥à¥­ ¯à ¢«ï¥¬
  1318.         mov ebx,[ecx+symbol.next]
  1319.         ConvertIndexToPointer ebx
  1320.         mov [ebx+symbol.perv],eax ;tex[tex[i].next].perv=i; // ...
  1321.         pop ebx eax
  1322.  
  1323.         .end_f:
  1324.         call ted_text_colored
  1325.         ret
  1326.  
  1327. ;description:
  1328. ; äã­ªæ¨ï ¤«ï ᬥ­ë ª®¤¨à®¢®ª
  1329. ;input:
  1330. ; table - â ¡«¨æ  ¤«ï ¯¥à¥ª®¤¨à®¢ª¨
  1331. align 16
  1332. proc ted_but_convert_by_table uses eax edx edi esi, edit:dword, table:dword
  1333.         mov edi,[edit]
  1334.         mov esi,[table]
  1335.         mov edx,ted_tex
  1336.         .cycle:
  1337.                 ;¯¥à¥å®¤¨¬ ­  á«¥¤ãî騩 ᨬ¢®«
  1338.                 mov edx,[edx+symbol.next]
  1339.                 cmp edx,1
  1340.                 jle .end_text
  1341.                 imul edx,sizeof.symbol
  1342.                 add edx,ted_tex
  1343.  
  1344.                 movzx eax,byte[edx]
  1345.                 add eax,esi
  1346.                 mov al,byte[eax]
  1347.                 cmp al,0
  1348.                 je @f
  1349.                         mov byte[edx],al ;¬¥­ï¥¬ ª®¤¨à®¢ªã ᨬ¢®« 
  1350.                 @@:
  1351.                 jmp .cycle
  1352.         .end_text:
  1353.         ;cmp esi,0
  1354.         ;je @f
  1355.                 stdcall ted_draw,edi ;®¡­®¢«ï¥¬ ®ª­®
  1356.         ;@@:
  1357.         ret
  1358. endp
  1359.  
  1360. ;input:
  1361. ; edi = pointer to tedit struct
  1362. ;output:
  1363. ; esi = count converted symbols
  1364. ;description:
  1365. ; ”ã­ªæ¨ï ¨á¯®«ì§ã¥âáï ¤«ï ᬥ­ë ॣ¨áâà  ¢ë¡à ­­ëå ᨬ¢®«®¢
  1366. align 16
  1367. proc ted_convert_sel_text, conv_fun:dword
  1368.         locals
  1369.                 conv_cou dd ?
  1370.         endl
  1371.         mov dword[conv_cou],0
  1372.         pushad
  1373.  
  1374.         call ted_is_select
  1375.         or al,al
  1376.         jz .end_f
  1377.                 call ted_set_undo
  1378.                 call ted_sel_normalize
  1379.  
  1380.                 mov esi,ted_seln_x0
  1381.                 mov ecx,ted_seln_y0
  1382.                 call ted_get_pos_by_coords
  1383.                 mov eax,edx
  1384.                 mov esi,ted_seln_x1
  1385.                 mov ecx,ted_seln_y1
  1386.                 call ted_get_pos_by_coords
  1387.                 ;call ted_get_text_perv_pos
  1388.                 mov ebx,edx
  1389.  
  1390.                 cmp eax,ebx
  1391.                 je .end_f
  1392.  
  1393.                 inc ted_tim_ch
  1394.                 mov edx,eax ;i=p0;
  1395.                 mov ecx,ted_ptr_free_symb
  1396.                 @@:
  1397.                 push eax
  1398.                 mov al,byte[edx]
  1399.                 call dword[conv_fun] ;¯à¥®¡à §®¢ ­¨¥ ᨬ¢®« 
  1400.                 mov esi,eax
  1401.                 cmp byte[edx],al
  1402.                 pop eax
  1403.                 je .no_change
  1404.                         m2m dword[edx+symbol.td],ted_tim_ch
  1405.                         call ted_char_add ;b_pos=ted_char_add(tex[i].c^32,i,false,b_pos);
  1406.                         call ted_get_text_next_pos ;go to added symbol
  1407.                         inc dword[conv_cou]
  1408.                 .no_change:
  1409.  
  1410.                 call ted_iterat_next
  1411.                 cmp edx,ted_tex
  1412.                 je @f
  1413.                 cmp edx,ebx
  1414.                 jne @b
  1415.                 @@:
  1416.                 cmp dword[conv_cou],0
  1417.                 jne @f
  1418.                         dec ted_tim_ch
  1419.                 @@:
  1420.         .end_f:
  1421.         popad
  1422.         mov esi,[conv_cou]
  1423.         ret
  1424. endp
  1425.  
  1426. ;output:
  1427. ; bl = 0 - no delete
  1428. ; bl = 1 - delete
  1429. align 16
  1430. proc ted_text_del uses ecx edx edi, edit:dword, del_opt:dword
  1431.         mov edi,[edit]
  1432.         mov ebx,[del_opt]
  1433.  
  1434.         xor cl,cl
  1435.         test ebx,ted_opt_ed_move_cursor
  1436.         jz @f
  1437.                 call ted_cur_move_left
  1438.                 cmp dl,0
  1439.                 je .no_del
  1440.         @@:
  1441.         call ted_get_pos_by_cursor
  1442.         cmp ted_gp_opt,1
  1443.         je .no_del
  1444.                 test ebx,ted_opt_ed_change_time
  1445.                 jz @f
  1446.                         inc ted_tim_ch
  1447.                 @@:
  1448.                 m2m dword[edx+symbol.td], ted_tim_ch
  1449.                 mov cl,1
  1450.         .no_del:
  1451.         mov bl,cl
  1452.         ret
  1453. endp
  1454.  
  1455. ;input:
  1456. ; edi = pointer to tedit struct
  1457. ;output:
  1458. ; al = 1 if delete
  1459. ;description:
  1460. ; ”ã­ªæ¨ï 㤠«ï¥â ¢ë¤¥«¥­­ë© ⥪áâ
  1461. align 16
  1462. proc ted_sel_text_del uses ebx ecx edx esi, del_opt:dword
  1463.         call ted_is_select
  1464.         or al,al
  1465.         jz .end_f
  1466.                 call ted_sel_normalize
  1467.  
  1468.                 mov esi,ted_seln_x1
  1469.                 mov ecx,ted_seln_y1
  1470.                 call ted_get_pos_by_coords
  1471.                 mov ebx,edx
  1472.  
  1473.                 mov esi,ted_seln_x0
  1474.                 mov ecx,ted_seln_y0
  1475.                 call ted_get_pos_by_coords
  1476.  
  1477.                 test dword[del_opt],ted_opt_ed_change_time
  1478.                 jz @f
  1479.                         inc ted_tim_ch
  1480.                 @@:
  1481.                 cmp edx,ted_tex
  1482.                 je @f
  1483.                 cmp edx,ebx ;if(i==te)break;
  1484.                 je @f
  1485.                         m2m dword[edx+symbol.td],ted_tim_ch
  1486.                         mov esi,ted_opt_ed_change_time
  1487.                         not esi
  1488.                         and dword[del_opt],esi ;n_tim=false;
  1489.                         call ted_iterat_next
  1490.                         jmp @b
  1491. align 4
  1492.                 @@:
  1493.                 test dword[del_opt],ted_opt_ed_change_time
  1494.                 jz @f
  1495.                         dec ted_tim_ch
  1496.                         xor al,al
  1497.                 @@:
  1498.                 test dword[del_opt],ted_opt_ed_change_time
  1499.                 jnz @f
  1500.                         mov ecx,ted_seln_x0
  1501.                         mov edx,ted_seln_y0
  1502.                         call ted_go_to_pos
  1503.                         mov ted_sel_x0,0
  1504.                         mov ted_sel_y0,0
  1505.                         mov ted_sel_x1,0
  1506.                         mov ted_sel_y1,0
  1507.                 @@:
  1508.         .end_f:
  1509.         ret
  1510. endp
  1511.  
  1512.  
  1513. ;input:
  1514. ; eax = pointer to begin select
  1515. ; ebx = pointer to end select
  1516. ; edi = pointer to tedit struct
  1517. align 16
  1518. ted_revers:
  1519.         cmp eax,ebx
  1520.         jne @f
  1521.                 ret
  1522.         @@:
  1523.  
  1524.         push ecx edx
  1525.  
  1526.         mov edx,ted_tex_1
  1527.         cmp edx,ebx ;if(p1==1)p1=tex[1].perv;
  1528.         jne @f
  1529.                 call ted_get_text_perv_pos
  1530.                 mov ebx,edx
  1531.         @@:
  1532.  
  1533.         push esi
  1534.                 mov edx,[eax+symbol.perv] ; *** edx = tex[p0].perv ***
  1535.                 ConvertIndexToPointer edx
  1536.                 add edx,symbol.next
  1537.                 mov ecx,[edx] ;ecx = tex[tex[p0].perv].next
  1538.  
  1539.                 mov esi,[ebx+symbol.next] ; *** esi = tex[p1].next ***
  1540.                 ConvertIndexToPointer esi
  1541.                 add esi,symbol.perv
  1542.                 m2m dword[edx],dword[esi] ;tex[tex[p0].perv].next = tex[tex[p1].next].perv
  1543.  
  1544.                 mov [esi],ecx ;tex[tex[p1].next].perv = ecx
  1545.         pop esi
  1546.  
  1547.         mov ecx,[eax+symbol.perv] ;ecx = tex[p0].perv
  1548.         m2m dword[eax+symbol.perv],dword[ebx+symbol.next] ;tex[p0].perv = tex[p1].next
  1549.         mov [ebx+symbol.next],ecx ;tex[p1].next = ecx
  1550.  
  1551.         mov edx,eax ;i=p0;
  1552.         @@:
  1553.                 mov ecx,[edx+symbol.next] ;ecx = tex[i].next
  1554.                 m2m dword[edx+symbol.next],dword[edx+symbol.perv] ;tex[i].next = tex[i].perv
  1555.                 mov [edx+symbol.perv],ecx ;tex[i].perv = ecx
  1556.                 cmp edx,ebx ;if(i==p1)break;
  1557.                 je @f
  1558. ; ---
  1559. ;cmp edx,ted_tex
  1560. ;je @f
  1561. ; ---
  1562.                 mov edx,ecx ;i = ecx
  1563.                 ConvertIndexToPointer edx
  1564.                 jmp @b
  1565.         @@:
  1566.         pop edx ecx
  1567.         call ted_text_colored
  1568.         ret
  1569.  
  1570.  
  1571. ;input:
  1572. ; edi = pointer to tedit struct
  1573. ;output:
  1574. ; dl = 0 not move
  1575. ; dl = 2 if move up
  1576. ; dl = 8 if scroll move up
  1577. align 16
  1578. ted_cur_move_up:
  1579.   cmp ted_cur_y,0
  1580.   je @f
  1581.     dec ted_cur_y
  1582.     mov dl,2
  1583.     ret
  1584.   @@:
  1585.   push eax
  1586.   mov eax,ted_scr_w
  1587.   cmp dword[eax+sb_offs_position],0
  1588.   je @f
  1589.     dec dword[eax+sb_offs_position]
  1590.     mov dl,8
  1591.     jmp .ret_f
  1592.   @@:
  1593.   mov dl,0
  1594.   .ret_f:
  1595.   pop eax
  1596.   ret
  1597.  
  1598. ;input:
  1599. ; edi = pointer to tedit struct
  1600. ;output:
  1601. ; dl = 0 not move
  1602. ; dl = 2 if move down
  1603. ; dl = 8 if scroll move down
  1604. align 16
  1605. ted_cur_move_down:
  1606.   push eax ebx
  1607.   mov ebx,ted_scr_w
  1608.   xor dl,dl
  1609.   mov eax,[ebx+sb_offs_cur_area]
  1610.   dec eax
  1611.   cmp ted_cur_y,eax
  1612.   jge @f
  1613.     inc ted_cur_y
  1614.     mov dl,2
  1615.     jmp .ret_f
  1616.   @@:
  1617.   mov eax,ted_cur_y
  1618.   add eax,[ebx+sb_offs_position]
  1619.   inc eax
  1620.   cmp [ebx+sb_offs_max_area],eax
  1621.   jle @f
  1622.     inc dword[ebx+sb_offs_position]
  1623.     mov dl,8
  1624.   @@:
  1625.   .ret_f:
  1626.   pop ebx eax
  1627.   ret
  1628.  
  1629.  
  1630. ;input:
  1631. ; edi = pointer to tedit struct
  1632. ;output:
  1633. ; dl = 0 not move
  1634. ; dl = 1 if move up
  1635. align 16
  1636. ted_cur_move_page_up:
  1637.         push eax ebx
  1638.         mov ebx,ted_scr_w
  1639.         mov eax,[ebx+sb_offs_cur_area]
  1640.         xor dl,dl
  1641.         cmp eax,[ebx+sb_offs_position]
  1642.         jg @f
  1643.                 sub [ebx+sb_offs_position],eax
  1644.                 mov dl,1
  1645.         @@:
  1646.         cmp dword[ebx+sb_offs_position],0
  1647.         je @f
  1648.         cmp dl,1
  1649.         je @f
  1650.                 mov dword[ebx+sb_offs_position],0
  1651.                 mov dl,1
  1652.         @@:
  1653.         pop ebx eax
  1654.         ret
  1655.  
  1656. ;input:
  1657. ; edi = pointer to tedit struct
  1658. align 16
  1659. ted_cur_move_page_down:
  1660.         push eax ebx ecx
  1661.         mov ecx,ted_scr_w
  1662.  
  1663.         xor dl,dl
  1664.         mov eax,[ecx+sb_offs_max_area]
  1665.         sub eax,[ecx+sb_offs_cur_area]
  1666.         cmp [ecx+sb_offs_position],eax
  1667.         jge @f
  1668.                 mov ebx,[ecx+sb_offs_cur_area]
  1669.                 add [ecx+sb_offs_position],ebx
  1670.                 mov dl,1
  1671.                 mov dword[ecx+sb_offs_redraw],1
  1672.                 cmp [ecx+sb_offs_position],eax
  1673.                 jle @f
  1674.                         mov [ecx+sb_offs_position],eax
  1675.         @@:
  1676.         pop ecx ebx eax
  1677.         ret
  1678.  
  1679. ;input:
  1680. ; edi = pointer to tedit struct
  1681. ;output:
  1682. ; dl = 0 not move
  1683. ; dl = 1 if move left
  1684. ; dl = 3 if move left and up
  1685. ; dl = 8 if scroll move up
  1686. align 16
  1687. ted_cur_move_left:
  1688.         cmp ted_cur_x,0
  1689.         je @f
  1690.                 dec ted_cur_x
  1691.                 mov dl,1
  1692.                 ret
  1693.         @@:
  1694.         push eax
  1695.         mov eax,ted_scr_h
  1696.         cmp dword[eax+sb_offs_position],0
  1697.         je @f
  1698.                 dec dword[eax+sb_offs_position]
  1699.                 mov dl,8
  1700.                 jmp .ret_f
  1701.         @@:
  1702.         cmp ted_cur_y,0
  1703.         jne @f
  1704.                 mov eax,ted_scr_w
  1705.                 mov dl,0
  1706.                 cmp dword[eax+sb_offs_position],0
  1707.                 je .ret_f
  1708.                         dec dword[eax+sb_offs_position]
  1709.                         call ted_scroll_set_redraw
  1710.                         call ted_cur_move_x_last_char
  1711.                         mov dl,8
  1712.                         jmp .ret_f
  1713.         @@:
  1714.         cmp ted_cur_y,0
  1715.         je @f
  1716.                 dec ted_cur_y
  1717.                 call ted_cur_move_x_last_char
  1718.                 cmp dl,8
  1719.                 je .ret_f
  1720.                 mov dl,3
  1721.                 jmp .ret_f
  1722.         @@:
  1723.         mov dl,0
  1724.         .ret_f:
  1725.         pop eax
  1726.         ret
  1727.  
  1728. ;input:
  1729. ; edi = pointer to tedit struct
  1730. align 16
  1731. ted_cur_move_right:
  1732.         push eax ebx
  1733.         mov eax,ted_scr_h
  1734.         xor dl,dl
  1735.         mov ebx,[eax+sb_offs_cur_area]
  1736.         cmp ted_cur_x,ebx
  1737.         jge @f
  1738.                 inc ted_cur_x
  1739.                 mov dl,1
  1740.                 jmp .ret_f
  1741.         @@:
  1742.                 inc dword[eax+sb_offs_position]
  1743.                 mov dl,8
  1744.         .ret_f:
  1745.         pop ebx eax
  1746.         ret
  1747.  
  1748. ;input:
  1749. ; edi = pointer to tedit struct
  1750. align 16
  1751. ted_cur_move_x_last_char:
  1752. ;[hScr.position]
  1753. ;[hScr.cur_area]
  1754. ;dl-???
  1755.   push eax ebx ecx
  1756.   mov eax,ted_cur_y
  1757.   mov ecx,ted_scr_w
  1758.   add eax,[ecx+sb_offs_position]
  1759.   call ted_strlen
  1760.   xor dl,dl
  1761.  
  1762.   mov ecx,ted_scr_h
  1763.   cmp ebx,[ecx+sb_offs_position]
  1764.   jge @f
  1765.     mov dl,8
  1766.     mov [ecx+sb_offs_position],ebx
  1767.   @@:
  1768.   sub ebx,[ecx+sb_offs_position]
  1769.  
  1770.   cmp ebx,[ecx+sb_offs_cur_area]
  1771.   jle @f ; b---[---]---e
  1772.     add [ecx+sb_offs_position],ebx
  1773.     mov ebx,[ecx+sb_offs_cur_area]
  1774.     sub [ecx+sb_offs_position],ebx
  1775.     mov dl,8
  1776.   @@:
  1777.   mov ted_cur_x,ebx
  1778.   pop ecx ebx eax
  1779.   ret
  1780.  
  1781. ;input:
  1782. ; edi = pointer to tedit struct
  1783. ;output:
  1784. ; dl = 0 not move
  1785. ; dl = 1 move cursor
  1786. ; dl = 8 move cursor and scroll
  1787. align 16
  1788. ted_cur_move_x_first_char:
  1789.         xor dl,dl
  1790.         cmp ted_cur_x,0
  1791.         je @f
  1792.                 mov ted_cur_x,0
  1793.                 mov dl,1
  1794.         @@:
  1795.         push eax
  1796.         mov eax,ted_scr_h
  1797.         cmp dword[eax+sb_offs_position],0
  1798.         je @f
  1799.                 mov dword[eax+sb_offs_position],0
  1800.                 mov dl,8
  1801.         @@:
  1802.         pop eax
  1803.         ret
  1804.  
  1805. ;input:
  1806. ; edx = pointer to symbol struct
  1807. ; edi = pointer to tedit struct
  1808. ;output:
  1809. ; eax = array index
  1810. align 16
  1811. ted_get_text_arr_index:
  1812.         push ecx edx
  1813.                 mov eax,edx
  1814.                 sub eax,ted_tex
  1815.                 xor edx,edx
  1816.                 mov ecx,sizeof.symbol
  1817.                 div ecx
  1818.         pop edx ecx
  1819.         ret
  1820.  
  1821. ;input:
  1822. ; edx = pointer to symbol struct
  1823. ; edi = pointer to tedit struct
  1824. ;output:
  1825. ; edx = pointer to 'perv' struct
  1826. align 16
  1827. ted_get_text_perv_pos:
  1828.         mov edx,[edx+symbol.perv]
  1829.         imul edx,sizeof.symbol
  1830.         add edx,ted_tex
  1831.         ret
  1832.  
  1833. ;input:
  1834. ; edx = pointer to symbol struct
  1835. ;output:
  1836. ; edx = pointer to 'next' symbol struct
  1837. align 16
  1838. ted_get_text_next_pos:
  1839.         mov edx,[edx+symbol.next]
  1840.         imul edx,sizeof.symbol
  1841.         add edx,ted_tex
  1842.         ret
  1843.  
  1844. ;input:
  1845. ; edi = pointer to tedit struct
  1846. ;output:
  1847. ; edx = symbol under cursor
  1848. ; ted_gp_opt = 1,2
  1849. ; edx = tex[1].perv if error
  1850. ; ted_gp_opt = 0
  1851. align 16
  1852. ted_get_pos_by_cursor:
  1853.         push eax ecx esi
  1854.                 mov esi,ted_cur_x
  1855.                 mov eax,ted_scr_h
  1856.                 add esi,[eax+sb_offs_position]
  1857.                 mov ecx,ted_cur_y
  1858.                 mov eax,ted_scr_w
  1859.                 add ecx,[eax+sb_offs_position]
  1860.                 call ted_get_pos_by_coords
  1861.         pop esi ecx eax
  1862.         ret
  1863.  
  1864. ;input:
  1865. ; esi = XPos
  1866. ; ecx = YPos
  1867. ; edi = pointer to tedit struct
  1868. ;output:
  1869. ; edx = symbol under cursor
  1870. ; ted_gp_opt = 1 if found text line
  1871. ; ted_gp_opt = 2 if found text line and column
  1872. ; edx = tex[1] if error
  1873. ; ted_gp_opt = 0 if text no found
  1874. align 16
  1875. proc ted_get_pos_by_coords uses eax ebx
  1876.         xor eax,eax ;Row
  1877.         xor ebx,ebx ;Col
  1878.   mov ted_gp_opt,0
  1879.   mov edx,ted_tex
  1880.   @@:
  1881.     call ted_iterat_next
  1882.     cmp edx,ted_tex_1
  1883.     jle @f
  1884.     cmp ebx,esi
  1885.     jne .u1_0 ;Col <> ted_cur_x
  1886.       mov ted_gp_opt,1
  1887.       cmp eax,ecx
  1888.       jge @f ; Row >= ted_cur_y
  1889.     .u1_0:
  1890.     mov ted_gp_opt,0
  1891.     inc ebx
  1892.     cmp byte [edx],13
  1893.     jne @b
  1894.     cmp eax,ecx
  1895.     jge @f ; Row >= ted_cur_y
  1896.     inc eax
  1897.     xor ebx,ebx
  1898.     jmp @b
  1899.   @@:
  1900.   cmp eax,ecx
  1901.   jne @f ; Row = ted_cur_y
  1902.     inc ted_gp_opt
  1903.   @@:
  1904.   cmp ted_gp_opt,0
  1905.   jne @f
  1906.     mov edx,ted_tex_1
  1907.     ;call ted_get_text_perv_pos
  1908.   @@:
  1909.   ret
  1910. endp
  1911.  
  1912. ;input:
  1913. ; eax = Row
  1914. ; edi = pointer to tedit struct
  1915. ;output:
  1916. ; ebx = str len
  1917. align 16
  1918. ted_strlen:
  1919.   push edx ecx
  1920.   ;ecx = Row, from cycle
  1921.  
  1922.   xor ebx,ebx
  1923.   xor ecx,ecx
  1924.   mov edx,ted_tex
  1925.   @@:
  1926.     call ted_iterat_next
  1927.     cmp edx,ted_tex_1
  1928.     jle @f
  1929.     inc ebx
  1930.     cmp byte [edx],13
  1931.     jne @b
  1932.     dec ebx ;lenght minus 1 sumbol to paragraph
  1933.     cmp eax,ecx
  1934.     je @f
  1935.     xor ebx,ebx
  1936.     inc ecx
  1937.     jmp @b
  1938.   @@:
  1939.  
  1940.   cmp eax,ecx
  1941.   je @f
  1942.     xor ebx,ebx
  1943.   @@:
  1944.  
  1945.   pop ecx edx
  1946.   ret
  1947.  
  1948.  
  1949. ;input:
  1950. ; edx = symbol position
  1951. ; edi = pointer to tedit struct
  1952. ;output:
  1953. ; eax = number of line
  1954. ; ebx = symbol position in line
  1955. align 16
  1956. ted_get_text_coords:
  1957.         push edx
  1958.         xor eax,eax
  1959.         xor ebx,ebx
  1960.         @@:
  1961.                 call ted_iterat_perv
  1962.  
  1963.                 or eax,eax
  1964.                 jnz .no_col_mov
  1965.                         inc ebx
  1966.                 .no_col_mov:
  1967.  
  1968.                 cmp edx,ted_tex_1
  1969.                 jle @f
  1970.                 cmp byte [edx],13
  1971.                 jne @b
  1972.                 inc eax
  1973.                 jmp @b
  1974.         @@:
  1975.         dec ebx
  1976.         pop edx
  1977.         ret
  1978.  
  1979. ;input:
  1980. ; edi = pointer to tedit struct
  1981. ;output:
  1982. ; eax = num lines
  1983. align 16
  1984. ted_get_num_lines:
  1985.         push edx
  1986.         mov eax,1
  1987.         mov edx,ted_tex
  1988.         @@:
  1989.                 call ted_iterat_next
  1990.                 cmp edx,ted_tex_1
  1991.                 jle @f
  1992.                 cmp byte[edx],13
  1993.                 jne @b
  1994.                 inc eax
  1995.                 jmp @b
  1996.         @@:
  1997. ;...
  1998. ;dec eax
  1999.         pop edx
  2000.         ret
  2001.  
  2002.  
  2003. ;input:
  2004. ; edi = pointer to tedit struct
  2005. ;description:
  2006. ; ®â¬¥­ï¥â ®â¬¥­¥­­ë¥ ¤¥©á⢨ï, ¯¥à¥¤ ¨§¬¥­¥­¨¥¬ ¤®ªã¬¥­â 
  2007. align 16
  2008. proc ted_set_undo
  2009.         mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
  2010.         cmp ted_tim_undo,1
  2011.         jl .no_work
  2012.  
  2013.         push eax ebx edx
  2014.         mov edx,ted_tex
  2015.         call ted_get_text_next_pos ;long i=tex[0].next;
  2016.         mov eax,ted_tim_undo
  2017.         sub ted_tim_ch,eax ;ted_tim_ch-=ted_tim_undo;
  2018.         mov eax,ted_tim_ch
  2019.         cmp ted_tim_ls,eax ;if(ted_tim_ls>ted_tim_ch)
  2020.         jle @f
  2021.                 mov ted_tim_ls,0
  2022.         @@:
  2023.                 cmp edx,ted_tex_1
  2024.                 jle @f
  2025.  
  2026.                 ;if(tex[i].tc>ted_tim_ch){ // ¥á«¨ ᮧ¤ ­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
  2027.                 cmp [edx+symbol.tc],eax
  2028.                 jle .no_u1
  2029.                         mov dword[edx+symbol.tc],0
  2030.                         mov dword[edx+symbol.td],0
  2031.  
  2032.                         mov ebx,[edx+symbol.perv]
  2033.                         imul ebx,sizeof.symbol
  2034.                         add ebx,ted_tex ;ebx=tex[i].perv
  2035.                         m2m dword [ebx+symbol.next],dword [edx+symbol.next] ;tex[tex[i].perv].next=tex[i].next;
  2036.  
  2037.                         mov ebx,[edx+symbol.next]
  2038.                         imul ebx,sizeof.symbol
  2039.                         add ebx,ted_tex ;ebx=tex[i].next
  2040.                         m2m dword [ebx+symbol.perv],dword [edx+symbol.perv] ;tex[tex[i].next].perv=tex[i].perv;
  2041.  
  2042.                         cmp ted_ptr_free_symb,edx
  2043.                         jle .no_cor_free
  2044.                                 mov ted_ptr_free_symb,edx ;¬¥­ï¥¬ 㪠§ â¥«ì ­  ᢮¡®¤­ë© ᨬ¢®«, ¤«ï ¡®«¥¥ ¡ëáâண® ¯®¨áª  ¯ ¬ïâ¨
  2045.                         .no_cor_free:
  2046.                         mov edx,ebx ;®¯â¨¬¨§¨à㥬 ¯® ᪮à®á⨠(edx ¯®á«¥ ¢ë§®¢  ted_get_text_next_pos ¡ã¤¥â à ¢¥­ ebx)
  2047.                         jmp @b
  2048.                 .no_u1:
  2049.  
  2050.                 ;else if(tex[i].td>ted_tim_ch) tex[i].td=0; // ¥á«¨ 㤠«¥­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
  2051.                 cmp [edx+symbol.td],eax
  2052.                 jle .no_u2
  2053.                         mov dword[edx+symbol.td],0
  2054.                 .no_u2:
  2055.  
  2056.                 call ted_get_text_next_pos
  2057.                 jmp @b
  2058.         @@:
  2059.         mov ted_tim_undo,0
  2060.         mov eax,ted_tim_co
  2061.         cmp ted_tim_ch,eax
  2062.         jge @f
  2063.                 mov ted_tim_co,0
  2064.         @@:
  2065.         pop edx ebx eax
  2066.         .no_work:
  2067.         ret
  2068. endp
  2069.  
  2070. ;description:
  2071. ; ¯¥à¥å®¤ ­  㪠§ ­­ãî ¯®§¨æ¨î
  2072. ;input:
  2073. ; row = ­®¬¥à áâப¨
  2074. ; col = ᨬ¢®«
  2075. align 16
  2076. proc ted_go_to_position uses ecx edx edi, edit:dword, row:dword, col:dword
  2077.         mov edi,[edit]
  2078.         ; ¯®¤£®â®¢ª  áâப¨
  2079.         mov edx,[row]
  2080.         call ted_get_num_lines
  2081.         cmp edx,eax
  2082.         jle @f
  2083.                 mov edx,eax ;®£à ­¨ç¥­¨¥ ¯® áâப¥ max
  2084.         @@:
  2085.         dec edx
  2086.         cmp edx,0
  2087.         jge @f
  2088.                 xor edx,edx ;®£à ­¨ç¥­¨¥ ¯® áâப¥ min
  2089.         @@:
  2090.         ; ¯®¤£®â®¢ª  ᨬ¢®« 
  2091.         mov ecx,[col]
  2092.         dec ecx
  2093.         cmp ecx,0
  2094.         jge @f
  2095.                 xor ecx,ecx
  2096.         @@:
  2097.         call ted_go_to_pos
  2098.         stdcall ted_draw,edi
  2099.         ret
  2100. endp
  2101.  
  2102. ;input:
  2103. ; ecx = Col
  2104. ; edx = Row
  2105. ; edi = pointer to tedit struct
  2106. ;output:
  2107. ; ecx = cursor x
  2108. ; edx = cursor y
  2109. align 16
  2110. ted_go_to_pos:
  2111.         push eax ebx
  2112.         mov eax,ted_scr_h
  2113.         sub ecx,[eax+sb_offs_position]
  2114.         cmp ecx,0 ;ted_cur_x < 0
  2115.         jge @f
  2116.                 add [eax+sb_offs_position],ecx ;¯à®ªàã⪠ áªà®««¨­£  ¢«¥¢®
  2117.                 xor ecx,ecx
  2118.         @@:
  2119.         mov ebx,5 ;5 - ¦¥« ¥¬ë© ®âáâ㯠᫥¢ 
  2120.         cmp ecx,ebx
  2121.         jge .end0
  2122.                 sub ebx,ecx ;ebx - ­  ᪮«ìª® ᨬ¢®«®¢ ­ã¦­® ᤢ¨­ãâì ªãàá®à
  2123.                 cmp [eax+sb_offs_position],ebx
  2124.                 jge @f
  2125.                         add ecx,[eax+sb_offs_position]
  2126.                         mov dword[eax+sb_offs_position],0
  2127.                         jmp .end0
  2128.                 @@:
  2129.                         sub [eax+sb_offs_position],ebx
  2130.                         add ecx,ebx
  2131.         .end0:
  2132.         cmp ecx,[eax+sb_offs_cur_area] ;ted_cur_x > [.cur_area]
  2133.         jl .end1
  2134.                 mov ebx,ecx
  2135.                 sub ebx,[eax+sb_offs_cur_area]
  2136.                 inc ebx
  2137.                 add [eax+sb_offs_position],ebx ;¯à®ªàã⪠ áªà®««¨­£  ¢¯à ¢®
  2138.                 sub ecx,ebx
  2139.         .end1:
  2140.         mov ted_cur_x,ecx
  2141.  
  2142.         mov eax,ted_scr_w
  2143.         sub edx,[eax+sb_offs_position]
  2144.         cmp edx,0 ;ted_cur_y < 0
  2145.         jge @f
  2146.                 add [eax+sb_offs_position],edx ;¯à®ªàã⪠ áªà®««¨­£  ¢¢¥àå
  2147.                 xor edx,edx
  2148.                 jmp .end2
  2149.         @@:
  2150.         cmp edx,[eax+sb_offs_cur_area] ;ted_cur_y > [.cur_area]
  2151.         jl .end2
  2152.                 mov ebx,edx
  2153.                 sub ebx,[eax+sb_offs_cur_area]
  2154.                 inc ebx
  2155.                 add [eax+sb_offs_position],ebx ;¯à®ªàã⪠ áªà®««¨­£  ¢­¨§
  2156.                 sub edx,ebx
  2157.         .end2:
  2158.         mov ted_cur_y,edx
  2159.         pop ebx eax
  2160.         ret
  2161.  
  2162. ;input:
  2163. ; edi = pointer to tedit struct
  2164. align 16
  2165. ted_text_colored:
  2166.         push eax edx
  2167.         mov eax,ted_tim_ch
  2168.         sub eax,ted_tim_undo
  2169.         mov ted_tim_co,eax
  2170.         mov edx,ted_tex
  2171.         @@:
  2172.                 call ted_iterat_next
  2173.                 cmp edx,ted_tex_1
  2174.                 jle @f
  2175.                 mov byte[edx+1],0
  2176.                 jmp @b
  2177.         @@:
  2178.  
  2179.         cmp ted_key_words_count,1
  2180.         jl .no_colors
  2181.         mov edx,ted_tex
  2182.         @@:
  2183.                 call ted_text_find_sel_color
  2184.                 cmp edx,ted_tex_1
  2185.                 jle .no_colors
  2186.                 jmp @b
  2187.         .no_colors:
  2188.         pop edx eax
  2189.         ret
  2190.  
  2191.  
  2192. ;input:
  2193. ; edx = pointer to start symbol
  2194. ; edi = pointer to tedit struct
  2195. ;output:
  2196. ; edx = pointer to next symbol
  2197. ;description:
  2198. ; ”ã­ªæ¨ï ¤«ï ¯®¨áª  ¨ ¢ë¤¥«¥­¨ï ¯®¤á¢¥ç¥­ëå á«®¢
  2199. align 16
  2200. proc ted_text_find_sel_color uses eax ebx ecx esi
  2201. locals
  2202.         begPos dd ? ;­ ç «ì­ ï ¯®§¨æ¨ï
  2203.         endPos dd ? ;ª®­¥ç­ ï ¯®§¨æ¨ï
  2204.         find db ? ;­ ©¤¥­® / ­¥ ­ ©¤¥­®
  2205.         f_color db ? ;¨­¤¥ªá æ¢¥â  ­ ©¤¥­®£® á«®¢ 
  2206. endl
  2207. ;eax = word_n ⥪ã騩 ­®¬¥à (¯®§¨æ¨ï) ¯à®¢¥à塞®£® á«®¢  ¢ ᯨ᪥
  2208. ;ebx = ¤«ï à §­ëå 楫¥©
  2209. ;ecx = l_pos ¯®á«¥¤­¨© ­®¬¥à (¯®§¨æ¨ï) ¯®¤å®¤ï饣® á«®¢  ¢ ᯨ᪥
  2210. ;esi = ¤«ï à §­ëå 楫¥©, ­®¬¥à ¯à®¢¥à塞®£® ᨬ¢®«  ¢ á«®¢¥
  2211.         mov dword[begPos],1
  2212.         mov dword[endPos],1
  2213.         mov byte[find],0
  2214.         mov byte[f_color],1
  2215.         .cycle0:
  2216.                 call ted_iterat_next
  2217.                 cmp edx,ted_tex_1
  2218.                 jle .cycle0end
  2219.  
  2220.                 xor eax,eax
  2221.                 mov al,byte[edx]
  2222.                 shl ax,2 ;eax*=4
  2223.                 add eax,ted_arr_key_pos
  2224.                 mov eax,[eax]
  2225.                 cmp eax,0
  2226.                 jl .cycle0 ;if( (word_n=ted_arr_key_pos[(unsigned char)tex[i].c])>-1 ){
  2227.  
  2228.                 mov ecx,eax
  2229.                 ;while(l_pos<ted_key_words_count && Col[l_pos].Text[0]==Col[word_n].Text[0])
  2230.                 .wh_1b:
  2231.                         cmp ecx,ted_key_words_count
  2232.                         jge .wh_1e
  2233.                         ColToIndexOffset ecx,esi
  2234.                         mov bl,byte[esi]
  2235.                         ColToIndexOffset eax,esi
  2236.                         cmp bl,byte[esi]
  2237.                         jne .wh_1e
  2238.                                 inc ecx
  2239.                         jmp .wh_1b
  2240.                 .wh_1e:
  2241.  
  2242.                 mov [begPos],edx ;bP=i;
  2243.                 mov esi,1
  2244. align 4
  2245.                 .wh_2b: ;while(1){
  2246.                 call ted_iterat_next
  2247.  
  2248.                 ;while(l_pos>word_n && Col[l_pos-1].Text[pos]!=tex[i].c)
  2249.                 @@:
  2250.                         cmp ecx,eax
  2251.                         jle @f
  2252.                         dec ecx
  2253.                         ColToIndexOffset ecx,ebx
  2254.                         inc ecx
  2255.                         ;cmp byte[ebx+esi],byte[edx]
  2256.                         mov bl,byte[ebx+esi]
  2257.                         cmp bl,byte[edx]
  2258.                         je @f
  2259.                                 dec ecx
  2260.                         jmp @b
  2261.                 @@:
  2262.  
  2263.                 ColToIndexOffset eax,ebx
  2264.                 cmp byte[ebx+esi],0
  2265.                 jne .if_0 ;if(Col[word_n].Text[pos]==0){
  2266.                 mov [endPos],edx ;eP=i;
  2267.                 ColToIndexOffset eax,ebx
  2268.                 mov bl,[ebx+MAX_COLOR_WORD_LEN+7]
  2269.                 mov [f_color],bl ;f_color=Col[word_n].color;
  2270.  
  2271.                 mov byte[find],1
  2272.                 ColToIndexOffset eax,ebx ;... ebx = Col[word_n]
  2273.                 mov bl,[ebx+MAX_COLOR_WORD_LEN+4]
  2274.                 cmp bl,0 ;if(Col[word_n].wwo)
  2275.                 je .if_2n
  2276.                         push edx
  2277.                         mov edx,[begPos]
  2278.                         call ted_iterat_perv
  2279.  
  2280.                         btr bx,0 ;1-1
  2281.                         jae @f ;if(Col[word_n].wwo&1)
  2282.                                 ;u1= !(isalnum(cont_s)||cont_s=='_')
  2283.                                 call isalnum
  2284.                                 jae @f
  2285.                                         mov byte[find],0
  2286.                                         jmp .if_4e
  2287.                         @@:
  2288.  
  2289.                         btr bx,3 ;4-1
  2290.                         jae .if_4e ;if(Col[word_n].wwo&8)
  2291.                                 ;u1= !isalpha(cont_s);
  2292.                                 call isalpha
  2293.                                 jae .if_4e
  2294.                                         mov byte[find],0
  2295.                         .if_4e:
  2296.  
  2297.                         mov edx,[endPos]
  2298.                         ;call ted_iterat_next
  2299.  
  2300.                         btr bx,1 ;2-1
  2301.                         jae @f ;if(Col[word_n].wwo&2)
  2302.                                 ;u1= !(isalnum(cont_s)||cont_s=='_')
  2303.                                 call isalnum
  2304.                                 jae @f
  2305.                                         mov byte[find],0
  2306.                                         jmp .if_6e
  2307.                         @@:
  2308.  
  2309.                         btr bx,4 ;5-1
  2310.                         jae .if_6e ;if(Col[word_n].wwo&16)
  2311.                                 ;u1= !isalpha(cont_s);
  2312.                                 call isalpha
  2313.                                 jae .if_6e
  2314.                                         mov byte[find],0
  2315.                         .if_6e:
  2316.  
  2317.                         btr bx,2 ;3-1
  2318.                         jae .if_7e ;if(Col[word_n].wwo&4)
  2319.                                 ColToIndexOffset eax,ebx
  2320.                                 mov bx,word[ebx+MAX_COLOR_WORD_LEN+5]
  2321.                                 call ted_iterat_next_pos_char
  2322.                                 cmp edx,ted_tex_1
  2323.                                 jg @f
  2324.                                         ;¥á«¨ ¤®è«¨ ¤® ª®­æ  ä ©«  ¨ ­¥ ­ è«¨ ᨬ¢®« ª®­æ  à §¬¥âª¨
  2325.                                         call ted_iterat_perv
  2326.                                 @@:
  2327.                                         mov dword[endPos],edx
  2328.                         .if_7e:
  2329.  
  2330.                         pop edx
  2331.                 .if_2n:
  2332. ;if(i!=1){ // ­¥ ª®­¥æ ¤®ªã¬¥­â 
  2333. ;  cont_s=tex[eP].c;
  2334. ;  if(Col[word_n].wwo&2) u2= !(isalnum(cont_s)||cont_s=='_');  // ­¥ ¡ãª¢.-ç¨á«. ᨬ¢®«
  2335. ;  if(u2 && Col[word_n].wwo&16) u2= !isalpha(cont_s); // ­¥ ç¨á«. ᨬ¢®«
  2336. ;  if(Col[word_n].wwo&4) eP=ted_iterat_next_pos_char(eP,Col[word_n].endc);
  2337.  
  2338.                         cmp eax,ecx
  2339.                         je .wh_2e ;if(word_n==l_pos) break; // do double - ¥á«¨ á«®¢® â®ç­® ¯®á«¥¤­¥¥
  2340.                 .if_0:
  2341.  
  2342.                 cmp edx,ted_tex_1
  2343.                 jle .wh_2e ;if(i==1) break;
  2344.  
  2345.                 ;while(l_pos>word_n && Col[word_n].Text[pos]!=tex[i].c)
  2346.                 .wh_4b:
  2347.                 cmp ecx,eax
  2348.                 jle .wh_4e
  2349.                         ColToIndexOffset eax,ebx
  2350.                         ;cmp byte[ebx+esi],byte[edx]
  2351.                         mov bl,byte[ebx+esi]
  2352.                         cmp bl,byte[edx]
  2353.                         je .wh_4e
  2354.                                 inc eax
  2355.                         jmp .wh_4b
  2356.                 .wh_4e:
  2357.  
  2358.                 cmp eax,ecx
  2359.                 je .wh_2e;if(word_n==l_pos) break;
  2360.                         inc esi ;pos++;
  2361.                         jmp .wh_2b
  2362.                 .wh_2e:
  2363.  
  2364.                 cmp byte[find],1 ;if(fnd)break;
  2365.                 je .cycle0end
  2366.                         mov edx,[begPos];i=bP;
  2367.                 jmp .cycle0
  2368.         .cycle0end:
  2369.  
  2370.         cmp byte[find],1
  2371.         jne .if_1e ;if(fnd){ // ¢ë¤¥«¥­¨¥ ­ ©¤¥­®£® ⥪áâ 
  2372.                 ;if(!mode_sf1 || (mode_sf1 && strlen(Col[word_n].f1->c_str())>0)){
  2373.                 mov eax,[begPos]
  2374.                 mov bl,[f_color]
  2375.                 mov [eax+1],bl ;tex[bP].col=f_color;
  2376.                 mov eax,[endPos]
  2377.                 mov byte[eax+1],0xff ;tex[eP].col=255;
  2378.                 ;return ItPoPerv(eP); // ¢®§¢à é ¥¬ ¯®§¨æ¨î ª®­æ  ¢å®¦¤¥­¨ï
  2379.                 mov edx,[endPos]
  2380.                 call ted_get_text_perv_pos
  2381.                 jmp @f
  2382.         .if_1e:
  2383.                 mov edx,ted_tex
  2384.         @@:
  2385.  
  2386.         ret
  2387. endp
  2388.  
  2389. ;input:
  2390. ; edx = pointer to char (byte)
  2391. ;output:
  2392. ; cf=1 if symbol is...
  2393. align 16
  2394. tab_all_num db 0,0,0,0,0,0,0xff,11b,11111110b,0xff,0xff,10000111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0;,0,0,0,0,0,0,0,0 - tab_alpha_0,0,0,0,0,0,0,0
  2395. tab_alpha db 0,0,0,0,0,0,0,0,11111110b,0xff,0xff,10000111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  2396.  
  2397. ;output:
  2398. ; cf=1 ¥á«¨ ¢ [edx] ¡ãª¢ , æ¨äà  ¨«¨ '_'
  2399. align 16
  2400. isalnum:
  2401.         push eax ebx
  2402.         movzx eax,byte[edx] ;al=offset
  2403.         shr eax,3
  2404.         lea ebx,[tab_all_num]
  2405.         add ebx,eax
  2406.         movzx ax,byte[edx] ;al=bit
  2407.         and ax,111b
  2408.         bt word[ebx],ax
  2409.         pop ebx eax
  2410.         ret
  2411.  
  2412. ;output:
  2413. ; cf=1 ¥á«¨ ¢ [edx] ¡ãª¢  ¨«¨ '_'
  2414. align 16
  2415. isalpha:
  2416.         push eax ebx
  2417.         movzx eax,byte[edx] ;al=offset
  2418.         shr eax,3
  2419.         lea ebx,[tab_alpha]
  2420.         add ebx,eax
  2421.         movzx ax,byte[edx] ;al=bit
  2422.         and ax,111b
  2423.         bt word[ebx],ax
  2424.         pop ebx eax
  2425.         ret
  2426.  
  2427. align 16
  2428. proc ted_show_help_f1 uses eax edx edi, edit:dword
  2429.         mov edi,[edit]
  2430.  
  2431.         call ted_get_pos_by_cursor
  2432.         push edx
  2433.                 call ted_iterat_next_color_tag
  2434.                 mov eax,edx
  2435.         pop edx
  2436.         call ted_iterat_perv_color_tag
  2437.  
  2438.         cmp eax,ted_tex
  2439.         jle @f
  2440.         cmp edx,ted_tex_1
  2441.         jle @f
  2442.                 stdcall ted_find_help_id,eax
  2443.         @@:
  2444.         ;call ted_draw_main_cursor
  2445.         call ted_draw_help_f1
  2446.         ret
  2447. endp
  2448.  
  2449. ;input:
  2450. ; edx = position begin 'symbol' struct
  2451. ; edi = pointer to tedit struct
  2452. ; end_pos = position end 'symbol' struct
  2453. align 16
  2454. proc ted_find_help_id uses ebx ecx, end_pos:dword
  2455. ; ecx = word_n
  2456. ; ebx = l_pos
  2457.   mov ted_help_id,-1
  2458.  
  2459.     xor ebx,ebx
  2460.     mov bl,[edx]
  2461.     shl bx,2 ;ebx*=4
  2462.     add ebx,ted_arr_key_pos
  2463.     mov ecx,[ebx]
  2464.     cmp ecx,0
  2465.     jl .if_0e ;if( (word_n=ted_arr_key_pos[(unsigned char)tf[0]])>-1 ){
  2466.       push esi eax
  2467.       mov ebx,ecx ;l_pos=word_n;
  2468.       ColToIndexOffset ecx,esi
  2469.       push cx
  2470.       mov cl,[esi]
  2471.       @@:
  2472.         cmp ebx,ted_key_words_count ;while(l_pos<ted_key_words_count)
  2473.         jge @f
  2474.         ;ColToIndexOffset ecx,esi
  2475.         ColToIndexOffset ebx,eax
  2476.         cmp cl,[eax] ;&& Col[l_pos].Text[0]==Col[word_n].Text[0])
  2477.         jne @f
  2478.           inc ebx ;l_pos++;
  2479.           jmp @b
  2480.       @@:
  2481.       pop cx
  2482.       call ted_iterat_next ;pos=1;
  2483.       mov esi,1
  2484.       @@:
  2485.         push dx
  2486.         push word[edx]
  2487.         pop dx
  2488.           .wh_0b:
  2489.             cmp ebx,ecx ;while(l_pos>word_n
  2490.             jle .wh_0e
  2491.             dec ebx
  2492.             ColToIndexOffset ebx,eax
  2493.             inc ebx
  2494.             cmp byte[eax+esi],dl ;&& Col[l_pos-1].Text[pos]!=tf[i])
  2495.             je .wh_0e
  2496.               dec ebx ;l_pos--;
  2497.             jmp .wh_0b
  2498.           .wh_0e:
  2499.  
  2500.           .wh_1b:
  2501.             cmp ebx,ecx ;while(l_pos>word_n
  2502.             jle .wh_1e
  2503.             ColToIndexOffset ecx,eax
  2504.             cmp byte[eax+esi],dl
  2505.             je .wh_1e
  2506.               inc ecx ;word_n++;
  2507.             jmp .wh_1b
  2508.           .wh_1e:
  2509.         pop dx
  2510.  
  2511.         cmp ecx,ebx ;if(word_n==l_pos) break;
  2512.         je @f
  2513.         call ted_iterat_next ;pos++;
  2514.         cmp edx,[end_pos] ;for(...;i<strlen;...)
  2515.         je @f ;jge
  2516.         inc esi
  2517.         jmp @b
  2518.       @@:
  2519.       pop eax esi
  2520.  
  2521.       mov ted_help_id,ecx
  2522.       ;return word_n;
  2523.  
  2524.     .if_0e:
  2525.   ret
  2526. endp
  2527.  
  2528. ;output:
  2529. ; eax = ª®¤ ®è¨¡ª¨
  2530. ; ebx = ª®««¨ç¥á⢮ ¯à®ç¨â ­­ëå ¡ ©â
  2531. align 16
  2532. proc ted_open_file uses ecx edx edi, edit:dword, file:dword, f_name:dword ;äã­ªæ¨ï ®âªàëâ¨ï ä ©« 
  2533.         mov edi,[edit]
  2534.  
  2535.         ; *** ¯à®¢¥à塞 à §¬¥à ¯ ¬ï⨠¨ ¥á«¨ ­¥ 墠⠥â ⮠㢥«¨ç¨¢ ¥¬ ***
  2536.         ;¯à®¡ã¥¬ ¯®«ãç¨âì ¨­ä®à¬ æ¨î ® ä ©«¥
  2537.         mov ebx,[file]
  2538.         mov dword[ebx], SSF_GET_INFO
  2539.         mov dword[ebx+4], 0
  2540.         mov dword[ebx+8], 0
  2541.         mov dword[ebx+12], 0
  2542.         m2m dword[ebx+16], ted_tex
  2543.         mov  byte[ebx+20], 0
  2544.         push dword[f_name]
  2545.         pop dword[ebx+21]
  2546.         mcall SF_FILE
  2547.         or eax,eax
  2548.         jz .end_0
  2549.                 mov edx,ted_max_chars
  2550.                 cmp eax,2 ;äã­ªæ¨ï ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ­­®© ä ©«®¢®© á¨á⥬ë
  2551.                 je @f
  2552.                 jmp .ret_f
  2553. align 4
  2554.         .end_0:
  2555.         ;¯à®¢¥à塞 墠â¨â «¨ ¯ ¬ï⨠¤«ï § £à㧪¨ ä ©« 
  2556.         mov ecx,ted_max_chars
  2557.         sub ecx,2 ;ecx = ¬ ªá¨¬ «ì­®¥ ç¨á«® ¡ ©â, ¤«ï ª®â®àëå ¡ë«  ¢ë¤¥«¥­  ¯ ¬ïâì
  2558.         mov edx,ted_tex
  2559.         mov edx,[edx+32] ;+32 = +0x20: qword: à §¬¥à ä ©«  ¢ ¡ ©â å
  2560.         cmp edx,ecx
  2561.         jl @f
  2562.                 ;㢥«¨ç¨¢ ¥¬ ¯ ¬ïâì ¥á«¨ ­¥ 墠⨫®
  2563.                 mov ecx,edx ;¯ ¬ïâì ­¥®¡å®¤¨¬ ï ¤«ï ®âªàëâ¨ï ä ©« 
  2564.                 add ecx,2  ;¯ ¬ïâì ¤«ï á«ã¦¥¡­ëå ­ ç «ì­®£® ¨ ª®­¥ç­®£® ᨬ¢®«®¢
  2565.                 add ecx,ted_increase_size ;¯ ¬ïâì ¤«ï । ªâ¨à®¢ ­¨ï ä ©« 
  2566.                 mov ted_max_chars,ecx
  2567.                 imul ecx,sizeof.symbol
  2568.                 invoke mem.realloc, ted_tex,ecx
  2569.                 mov ted_tex,eax
  2570.                 mov ted_tex_1,eax
  2571.                 add ted_tex_1,sizeof.symbol
  2572.                 add eax,ecx
  2573.                 mov ted_tex_end,eax
  2574.                 mov ecx,ted_tex_1
  2575.                 add ecx,sizeof.symbol
  2576.                 mov ted_ptr_free_symb,ecx
  2577.         @@:
  2578.  
  2579.         ; *** ¯à®¡ã¥¬ ®âªàëâì ä ©« ***
  2580.         mov ebx,[file]
  2581.         mov dword[ebx], SSF_READ_FILE
  2582.         mov dword[ebx+4], 0
  2583.         mov dword[ebx+8], 0
  2584.         m2m dword[ebx+12], edx ;ç¨á«® ¡ ©â, ª®â®àë¥ ¬®£ãâ ¡ëâì áç¨â ­ë á ä ©«  (­¥ ¡®«ìè¥ ç¥¬ ted_max_chars)
  2585.         m2m dword[ebx+16], ted_tex
  2586.         mov  byte[ebx+20], 0
  2587.         push dword[f_name]
  2588.         pop dword[ebx+21]
  2589.         mcall SF_FILE
  2590.  
  2591.         or eax,eax
  2592.         jz @f
  2593.         cmp eax,6
  2594.         jne .ret_f
  2595.         @@:
  2596.         cmp ebx,-1
  2597.         je .ret_f
  2598.                 ;if open file
  2599.                 call ted_on_open_file
  2600.         .ret_f:
  2601.         ret
  2602. endp
  2603.  
  2604. align 16
  2605. proc ted_but_select_word, edit:dword
  2606.         pushad
  2607.         mov edi,[edit]
  2608.  
  2609.         call ted_get_pos_by_cursor
  2610.         push edx
  2611.                 call ted_iterat_perv_color_tag
  2612.                 cmp edx,ted_tex_1
  2613.                 jle @f
  2614.                         call ted_get_text_coords
  2615.                         mov ted_sel_x0,ebx
  2616.                         mov ted_sel_y0,eax
  2617.                 @@:
  2618.         pop edx
  2619.         call ted_iterat_next_color_tag
  2620.         cmp edx,ted_tex_1
  2621.         jle @f
  2622.                 call ted_get_text_coords
  2623.                 mov ted_sel_x1,ebx
  2624.                 mov ted_sel_y1,eax
  2625.         @@:
  2626.  
  2627.         cmp ted_fun_draw_panel_buttons,0
  2628.         je @f
  2629.                 call ted_fun_draw_panel_buttons
  2630.         @@:
  2631.         stdcall ted_draw,edi
  2632.         popad
  2633.         ret
  2634. endp
  2635.  
  2636. ;output:
  2637. ; al = 1 if delete
  2638. align 16
  2639. proc ted_but_cut uses edi, edit:dword
  2640.         mov edi,[edit]
  2641.  
  2642.         stdcall ted_but_copy,edi
  2643.         call ted_set_undo
  2644.         stdcall ted_sel_text_del,ted_opt_ed_change_time
  2645.  
  2646.         cmp al,1
  2647.         jne @f
  2648.                 stdcall ted_draw,edi
  2649.                 cmp ted_fun_draw_panel_buttons,0
  2650.                 je @f
  2651.                         call ted_fun_draw_panel_buttons
  2652.         @@:
  2653.         ret
  2654. endp
  2655.  
  2656. align 16
  2657. proc ted_but_copy, edit:dword
  2658.         pushad
  2659.         mov edi,[edit]
  2660.  
  2661.         call ted_is_select
  2662.         or al,al
  2663.         jz .end_f ;if not selected text
  2664.         call ted_sel_normalize
  2665.  
  2666.         mov esi,ted_seln_x1
  2667.         mov ecx,ted_seln_y1
  2668.         call ted_get_pos_by_coords
  2669.         mov ebx,edx
  2670.         mov esi,ted_seln_x0
  2671.         mov ecx,ted_seln_y0
  2672.         call ted_get_pos_by_coords
  2673.         mov esi,ebx
  2674.  
  2675.         mov ecx,12 ;system buffer header size
  2676.         mov ebx,ted_buffer
  2677.         mov dword[ebx+4],0 ;text data
  2678.         mov dword[ebx+8],1 ;code 866
  2679.         add ebx,ecx
  2680.         @@:
  2681.                 cmp edx,ted_tex_1 ;end of file
  2682.                 jle @f
  2683.                 cmp edx,esi ;end of select
  2684.                 je @f
  2685.                 inc ecx
  2686.                 cmp ecx,ted_buffer_size ;owerflow bufer
  2687.                 je @f
  2688.  
  2689.                 mov al,byte[edx]
  2690.                 mov byte[ebx],al
  2691.                 inc ebx
  2692.                 cmp al,13
  2693.                 jne .no_13
  2694.                         mov byte[ebx],10 ;¤¥« ¥¬ ª®­¥æ áâப¨ ¢ ¡ãä¥à¥ 13,10 ¤«ï ᮢ¬¥á⨬®áâ¨ á ¤à㣨¬¨ ¯à®£à ¬¬ ¬¨
  2695.                         inc ebx
  2696.                         inc ecx
  2697.                 .no_13:
  2698.                
  2699.                 call ted_iterat_next
  2700.                 jmp @b
  2701.         @@:
  2702.         mov byte[ebx],0
  2703.  
  2704.         cmp ecx,12
  2705.         je .end_f
  2706.                 mov ebx,ted_buffer
  2707.                 mov [ebx],ecx
  2708.                 mcall SF_CLIPBOARD,SSF_WRITE_CB,ecx,ted_buffer
  2709.                 call ted_draw_buffer
  2710.                 cmp ted_fun_draw_panel_buttons,0
  2711.                 je .end_f
  2712.                         call ted_fun_draw_panel_buttons
  2713.         .end_f:
  2714.         popad
  2715.         ret
  2716. endp
  2717.  
  2718.  
  2719. align 16
  2720. proc ted_but_paste, edit:dword
  2721.         pushad
  2722.         mov edi,[edit]
  2723.  
  2724.         mcall SF_CLIPBOARD,SSF_GET_SLOT_COUNT
  2725.         cmp eax,1
  2726.         jl .no_buf_r
  2727.  
  2728.         mov esi,eax
  2729.         .cycle: ;®¡à â­ë© 横« ¯® ᫮⠬
  2730.         dec esi ;­®¬¥à ⥪ã饣®, ¯à®¢¥à塞®£® á«®â 
  2731.         mcall SF_CLIPBOARD,SSF_READ_CB,esi
  2732.         cmp eax,1
  2733.         je .no_buf_r
  2734.         cmp eax,-1
  2735.         je .no_buf_r
  2736.                 mov ecx,[eax]
  2737.                 cmp ecx,1 ;size
  2738.                 jl .no_buf_r
  2739.                 cmp dword[eax+4],0 ;text
  2740.                 je @f
  2741.                         cmp esi,1
  2742.                         jge .cycle ;¥á«¨ ¢ ¡ãä¥à¥ ­¥ ⥪áâ,   ᫮⮢ ¢ ¡ãä¥à¥ ­¥áª®«ìª®, ¯à®¡ã¥¬ ¯¥à¥©â¨ ª ¢¥àå­¥¬ã á«®âã
  2743.                         jmp .no_buf_r
  2744.                 @@:
  2745.                 cmp dword[eax+8],1 ;866
  2746.                 je @f
  2747.                         cmp esi,1
  2748.                         jge .cycle ;¥á«¨ ¢ ¡ãä¥à¥ ⥪áâ ­¥ ¢ ª®¤¨à®¢ª¥ 866 ... ¯à®¡ã¥¬ ¯¥à¥©â¨ ª ¢¥àå­¥¬ã á«®âã
  2749.                         jmp .no_buf_r
  2750.                 @@:
  2751.                 ;ª®¯¨à®¢ ­¨¥ ⥪áâ  ¨§ á¨á⥬­®£® ¡ãä¥à  ¢® ¢­ãâ७­¨©
  2752.                 cmp ecx,ted_buffer_size
  2753.                 jle @f
  2754.                         mov ecx,ted_buffer_size
  2755.                 @@:
  2756.                 mov edi,ted_buffer
  2757.                 mov esi,eax
  2758.                 add     esi,4 ;12
  2759.                 mov dword[edi],ecx
  2760.                 add edi,4 ;12
  2761.                 sub ecx,4 ;12
  2762.                 rep movsb
  2763.                 mov edi,[edit]
  2764.  
  2765.                 mov esi,eax
  2766.                 add     esi,12
  2767.                 jmp .buf_r
  2768.         .no_buf_r:
  2769.                
  2770.         ;¥á«¨ ­¥ 㤠«®áì ¯à®ç¨â âì ¤ ­­ë¥ ¨§ á¨á⥬­®£® ¡ãä¥à , ¯®¯ ¤ ¥¬ á
  2771.         mov esi,ted_buffer
  2772.         cmp dword[esi],1 ;¯à®¢¥à塞 ¥áâì «¨ ¤ ­­ë¥ ¢® ¢­ãâ७­¥¬ ¡ãä¥à¥
  2773.         jl .no_paste ;¥á«¨ ¢®®¡é¥ ­¨ç¥£® ­¥ 㤠«®áì ¯à®ç¨â âì ¨¤¥¬ ­  ¢ë室
  2774.         add esi,12 ;system buffer header size
  2775.         .buf_r:
  2776.        
  2777.         mov edx,esi
  2778.         call tl_strlen
  2779.         cmp eax,1
  2780.         jl .no_paste
  2781.                 mov esi,eax
  2782.                 call ted_set_undo
  2783.                 mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
  2784.                 stdcall ted_sel_text_del,ebx
  2785.                 cmp al,1
  2786.                 jne .del
  2787.                         mov ebx,ted_opt_ed_move_cursor
  2788.                 .del:
  2789.                 stdcall ted_text_add,edi,edx,esi,ebx
  2790.                 stdcall ted_draw,edi
  2791.                 cmp ted_fun_draw_panel_buttons,0
  2792.                 je .no_paste
  2793.                         call ted_fun_draw_panel_buttons
  2794.         .no_paste:
  2795.         popad
  2796.         ret
  2797. endp
  2798.  
  2799. align 16
  2800. proc ted_but_sumb_upper uses edi esi, edit:dword
  2801.         mov edi,[edit]
  2802.  
  2803.         stdcall ted_convert_sel_text,fb_char_toupper
  2804.         or esi,esi
  2805.         jz @f
  2806.                 stdcall ted_draw,edi
  2807.         @@:
  2808.         ret
  2809. endp
  2810.  
  2811. align 16
  2812. proc ted_but_sumb_lover uses edi esi, edit:dword
  2813.         mov edi,[edit]
  2814.  
  2815.         stdcall ted_convert_sel_text,fb_char_todown
  2816.         or esi,esi
  2817.         jz @f
  2818.                 stdcall ted_draw,edi
  2819.         @@:
  2820.         ret
  2821. endp
  2822.  
  2823. align 16
  2824. proc ted_but_reverse uses eax ebx edi, edit:dword
  2825.         mov edi,[edit]
  2826.  
  2827.         call ted_is_select
  2828.         or al,al
  2829.         jz @f
  2830.                 call ted_sel_normalize
  2831.                 push esi ecx edx
  2832.                         mov esi,ted_seln_x0
  2833.                         mov ecx,ted_seln_y0
  2834.                         call ted_get_pos_by_coords
  2835.                         mov eax,edx
  2836.                         mov esi,ted_seln_x1
  2837.                         cmp esi,0
  2838.                         je .beg_str
  2839.                                 dec esi
  2840.                         .beg_str:
  2841.                         mov ecx,ted_seln_y1
  2842.                         call ted_get_pos_by_coords
  2843.                         ;call ted_get_text_perv_pos
  2844.                         mov ebx,edx
  2845.                 pop edx ecx esi
  2846.                 ;cmp eax,...
  2847.                 ;je @f
  2848.                 call ted_revers
  2849.         @@:
  2850.         stdcall ted_draw,edi
  2851.         ret
  2852. endp
  2853.  
  2854. align 16
  2855. proc ted_but_undo uses eax edi, edit:dword
  2856.         mov edi,[edit]
  2857.  
  2858.         mov eax,ted_tim_undo
  2859.         cmp ted_tim_ch,eax
  2860.         jbe @f
  2861.                 inc ted_tim_undo
  2862.                 ;call ted_text_colored
  2863.                 stdcall ted_draw,edi
  2864.                 cmp ted_fun_draw_panel_buttons,0
  2865.                 je @f
  2866.                         call ted_fun_draw_panel_buttons
  2867.         @@:
  2868.         ret
  2869. endp
  2870.  
  2871. align 16
  2872. proc ted_but_redo uses edi, edit:dword
  2873.         mov edi,[edit]
  2874.  
  2875.         cmp ted_tim_undo,1
  2876.         jb @f
  2877.                 dec ted_tim_undo
  2878.                 ;call ted_text_colored
  2879.                 stdcall ted_draw,edi
  2880.                 cmp ted_fun_draw_panel_buttons,0
  2881.                 je @f
  2882.                         call ted_fun_draw_panel_buttons
  2883.         @@:
  2884.         ret
  2885. endp
  2886.  
  2887. ;description:
  2888. ; äã­ªæ¨ï ­ å®¤¨â ⥪áâ ­  ª®â®àë© ãª §ë¢ ¥â ted_buffer_find
  2889. ;input:
  2890. ; f_opt = ¯ à ¬¥âàë ¯®¨áª :
  2891. ;   (0 - ¨áª âì ­¨¦¥ ªãàá®à , 1 - ¨áª âì ¢ëè¥ ªãàá®à , 2 - ¨áª âì ®â ­ ç «  ä ©« )
  2892. ;   ¥á«¨ ãáâ ­®¢«¥­ 31-© ¡¨â, â® ­¥ ®¡­®¢«ï¥âáï ®ª­®
  2893. ;   ¥á«¨ ãáâ ­®¢«¥­ 30-© ¡¨â, â® ¯®¨áª ¨¤¥â ¡¥§ ãç¥â  ॣ¨áâà  á¨¬¢®«®¢
  2894. ;output:
  2895. ; eax = ¡ë« «¨ ­ ©¤¥­ ¨áª®¬ë© ⥪áâ (0 - ­¥â, 1 - ¤ )
  2896. align 16
  2897. proc ted_but_find uses ebx ecx edx edi esi, edit:dword, f_opt:dword
  2898.         mov eax,[f_opt]
  2899.         push eax
  2900.         push [edit]
  2901.         cmp al,2
  2902.         jne @f
  2903.                 call _but_find_first
  2904.                 jmp .end0
  2905.         @@:
  2906.         cmp al,0
  2907.         jne @f
  2908.                 call _but_find_next
  2909.                 jmp .end0
  2910.         @@:
  2911.         cmp al,1
  2912.         jne @f
  2913.                 call _but_find_perv
  2914.                 jmp .end0
  2915.         @@:
  2916.         add esp,8
  2917.         .end0:
  2918.  
  2919.         bt dword[f_opt],31
  2920.         jc .end1
  2921.         or eax,eax
  2922.         jz @f
  2923.                 ;⥪áâ ­ ©¤¥­, ®¡­®¢«ï¥¬ ®ª­®
  2924.                 stdcall ted_draw,edi
  2925.                 jmp .end1
  2926.         @@:
  2927.                 ;⥪áâ ­¥ ­ ©¤¥­, ¯à®¡ã¥¬ ¢ë§¢ âì á®®¡é¥­¨¥
  2928.                 cmp ted_fun_find_err,0
  2929.                 je .end1
  2930.                         call ted_fun_find_err ;¯®«ì§®¢ â¥«ì᪠ï äã­ªæ¨ï
  2931.         .end1:
  2932.         ret
  2933. endp
  2934.  
  2935. ;description:
  2936. ; äã­ªæ¨ï ­ å®¤¨â ⥪á⠮⠭ ç «  ä ©« , ¨«¨ ®â ª®­æ  ⥪ã饣® ¢ë¤¥«¥­¨ï
  2937. ;input:
  2938. ; f_opt = ®¯æ¨¨ ¤«ï ¯®¨áª 
  2939. ;output:
  2940. ; eax = ¡ë« «¨ ­ ©¤¥­ ¨áª®¬ë© ⥪áâ (0 - ­¥â, 1 - ¤ )
  2941. ; ebx, ecx, edx, edi, edi - ¯®àâïâáï
  2942. align 16
  2943. proc _but_find_first, edit:dword, f_opt:dword
  2944.         mov edi,[edit]
  2945.  
  2946.         call ted_is_select
  2947.         or al,al
  2948.         jz @f
  2949.                 call ted_sel_normalize
  2950.                 mov edx,ted_sel_y1
  2951.                 mov ecx,ted_sel_x1
  2952.                 call ted_go_to_pos ;¯¥à¥å®¤ ­  ª®­¥æ ¢ë¤¥«¥­¨ï
  2953.                 call ted_get_pos_by_cursor
  2954.                 jmp .end0
  2955.         @@:
  2956.                 mov edx,ted_tex
  2957.                 call ted_iterat_next
  2958.         .end0:
  2959.         mov ebx,ted_buffer_find
  2960.         @@:
  2961.                 mov eax,[f_opt]
  2962.                 call ted_get_find_rezult
  2963.                 cmp ah,1
  2964.                 je @f ; find
  2965.                         call ted_iterat_next
  2966.                         cmp edx,ted_tex_1
  2967.                         jle @f
  2968.                         jmp @b
  2969.         @@:
  2970.         call _but_find_select
  2971.         ret
  2972. endp
  2973.  
  2974. ;description:
  2975. ; äã­ªæ¨ï ­ å®¤¨â ⥪áâ ¢ëè¥ ªãàá®à 
  2976. ;input:
  2977. ; f_opt = ®¯æ¨¨ ¤«ï ¯®¨áª 
  2978. ;output:
  2979. ; eax = ¡ë« «¨ ­ ©¤¥­ ¨áª®¬ë© ⥪áâ (0 - ­¥â, 1 - ¤ )
  2980. ; ebx, ecx, edx, edi, edi - ¯®àâïâáï
  2981. align 16
  2982. proc _but_find_perv, edit:dword, f_opt:dword
  2983.         mov edi,[edit]
  2984.  
  2985.         call ted_is_select
  2986.         or al,al
  2987.         jz @f
  2988.                 call ted_sel_normalize
  2989.                 mov edx,ted_sel_y0
  2990.                 mov ecx,ted_sel_x0
  2991.                 call ted_go_to_pos ;¯¥à¥å®¤ ­  ­ ç «® ¢ë¤¥«¥­¨ï
  2992.                 call ted_get_pos_by_cursor
  2993.                 call ted_iterat_perv ;¯¥à¥å®¤ ­  1-© ᨬ¢®« ¯¥à¥¤ ¢ë¤¥«¥­¨¥¬
  2994.                 jmp .end0
  2995.         @@:
  2996.         call ted_get_pos_by_cursor
  2997.         .end0:
  2998.         mov ebx,ted_buffer_find
  2999.         @@:
  3000.                 mov eax,[f_opt]
  3001.                 call ted_get_find_rezult
  3002.                 cmp ah,1
  3003.                 je @f ; find
  3004.                         call ted_iterat_perv
  3005.                         cmp edx,ted_tex_1
  3006.                         jle @f
  3007.                         jmp @b
  3008.         @@:
  3009.         call _but_find_select
  3010.         ret
  3011. endp
  3012.  
  3013. ;description:
  3014. ; äã­ªæ¨ï ­ å®¤¨â ⥪áâ ­¨¦¥ ªãàá®à 
  3015. ;input:
  3016. ; f_opt = ®¯æ¨¨ ¤«ï ¯®¨áª 
  3017. ;output:
  3018. ; eax = ¡ë« «¨ ­ ©¤¥­ ¨áª®¬ë© ⥪áâ (0 - ­¥â, 1 - ¤ )
  3019. ; ebx, ecx, edx, edi, esi - ¯®àâïâáï
  3020. align 16
  3021. proc _but_find_next, edit:dword, f_opt:dword
  3022.         mov edi,[edit]
  3023.  
  3024.         call ted_get_pos_by_cursor
  3025.         mov ebx,ted_buffer_find
  3026.         @@:
  3027.                 mov eax,[f_opt]
  3028.                 call ted_get_find_rezult
  3029.                 cmp ah,1
  3030.                 je @f ; find
  3031.                         call ted_iterat_next
  3032.                         cmp edx,ted_tex_1
  3033.                         jle @f
  3034.                         jmp @b
  3035.         @@:
  3036.         call _but_find_select
  3037.         ret
  3038. endp
  3039.  
  3040. ;description:
  3041. ; ¢á¯®¬®£ â¥«ì­ ï äã­ªæ¨ï, ¢ë¤¥«ï¥â ­ ©¤¥­­ë© ⥪áâ
  3042. ;input:
  3043. ; ah = ¡ë« «¨ ­ ©¤¥­ ¨áª®¬ë© ⥪áâ (0 - ­¥â, 1 - ¤ )
  3044. ; esi = first symbol pointer
  3045. align 16
  3046. _but_find_select:
  3047.         or ah,ah
  3048.         jz @f
  3049.                 call ted_get_text_coords
  3050.                 inc ebx ;move cursor right
  3051.                 mov ted_sel_x1,ebx
  3052.                 mov ted_sel_y1,eax
  3053.                 mov edx,eax
  3054.                 mov ecx,ebx
  3055.                 call ted_go_to_pos
  3056.                 mov edx,esi
  3057.                 call ted_get_text_coords
  3058.                 mov ted_sel_x0,ebx
  3059.                 mov ted_sel_y0,eax
  3060.                 xor eax,eax
  3061.                 inc eax
  3062.                 jmp .end0
  3063.         @@:
  3064.                 xor eax,eax ;⥪áâ ­¥ ­ ©¤¥­
  3065.         .end0:
  3066.         ret
  3067.  
  3068. ;input:
  3069. ; rpl_text = ⥪áâ ¤«ï § ¬¥­ë
  3070. ; r_opt = ¯ à ¬¥âàë ¯®¨áª :
  3071. ;   (0 - ¨áª âì ­¨¦¥ ªãàá®à , 1 - ¨áª âì ¢ëè¥ ªãàá®à , 2 - ¨áª âì ®â ­ ç «  ä ©« )
  3072. ; n_tim = 䨪á¨à®¢ âì § ¬¥­ã ¢ ¨§¬¥­¥­¨ïå (0 - ­¥â, 1 - ¤ )
  3073. ;output:
  3074. ; eax = 0 - ­¥ 㤠筮, 1 - 㤠筮
  3075. align 16
  3076. proc ted_but_replace uses edx edi esi, edit:dword, rpl_text:dword, r_opt:dword, n_tim:dword
  3077.         mov edi,[edit]
  3078.         mov eax,[r_opt]
  3079.         bts eax,31
  3080.         stdcall ted_but_find, edi,eax
  3081.         or eax,eax
  3082.         jz .end0
  3083.  
  3084.         xor edx,edx
  3085.         cmp dword[n_tim],0
  3086.         je @f
  3087.                 call ted_set_undo
  3088.                 mov edx,ted_opt_ed_change_time
  3089.         @@:
  3090.         stdcall ted_sel_text_del, edx
  3091.         or eax,0xff
  3092.         jz .end0
  3093.                 mov esi,[rpl_text]
  3094.                 stdcall tl_strlen
  3095.                 or eax,eax
  3096.                 jz .end0
  3097.                 stdcall ted_text_add, edi,esi,eax,ted_opt_ed_move_cursor
  3098.                 xor eax,eax
  3099.                 inc eax
  3100.         .end0:
  3101.         ret
  3102. endp
  3103.  
  3104. ;description:
  3105. ; ”ã­ªæ¨ï ¯à®¢¥àï¥â ᮢ¯ ¤ ¥â «¨ ⥪áâ ¢ ¡ãä¥à¥ ebx
  3106. ; á ⥪á⮬ । ªâ®à  ¯® 㪠§ â¥«î edx.
  3107. ; ‘â ­¤ àâ­ë¥ ä㭪樨 (­ ¯à. strcmp) âãâ ­¥ ¯®¤®©¤ãâ, ¯®â®¬ã çâ®
  3108. ; ¢ ¯ ¬ï⨠। ªâ®à  ⥪áâ ᮤ¥à¦¨âáï ­¥ ¢ ¢¨¤¥ ascii áâப.
  3109. ;input:
  3110. ; eax - options to find
  3111. ; ebx - text need find
  3112. ; edx - first symbol pointer
  3113. ; edi - pointer to tedit struct
  3114. ;output:
  3115. ; ah - rezult
  3116. ; edx - last text position (if find sucess)
  3117. ; esi - first symbol pointer
  3118. align 16
  3119. proc ted_get_find_rezult uses ebx
  3120.         mov al,byte[ebx]
  3121.         bt eax,30
  3122.         jnc @f
  3123.                 call fb_char_toupper
  3124.         @@:
  3125.         mov ah,1
  3126.         mov esi,edx ;copy edx
  3127.         .cycle0:
  3128.                 mov cl,al
  3129.                 mov al,byte[edx]
  3130.                 bt eax,30
  3131.                 jnc @f
  3132.                         call fb_char_toupper
  3133.                 @@:
  3134.                 cmp al,cl
  3135.                 jne .no_text
  3136.  
  3137.                 inc ebx ;*** get next symbol (in find text) ***
  3138.                 mov al,byte[ebx]
  3139.                 or al,al
  3140.                 jz .end_f ;end of find text
  3141.                 bt eax,30
  3142.                 jnc @f
  3143.                         call fb_char_toupper
  3144.                 @@:
  3145.  
  3146.                 call ted_iterat_next ;*** get next symbol (in editor text) ***
  3147.                 cmp edx,ted_tex_1
  3148.                 jg .cycle0
  3149. align 4
  3150.                 .no_text:
  3151.         xor ah,ah
  3152.         mov edx,esi ;restore edx
  3153.         .end_f:
  3154.         ret
  3155. endp
  3156.  
  3157. ;input:
  3158. ; edi = pointer to tedit struct
  3159. align 16
  3160. ted_key_ctrl_home:
  3161.         mov ted_cur_x,0
  3162.         mov ted_cur_y,0
  3163.         push eax
  3164.                 mov eax,ted_scr_w
  3165.                 mov dword[eax+sb_offs_position],0
  3166.                 mov eax,ted_scr_h
  3167.                 mov dword[eax+sb_offs_position],0
  3168.         pop eax
  3169.         stdcall ted_draw,edi
  3170.         cmp ted_fun_draw_panel_buttons,0
  3171.         je @f
  3172.                 call ted_fun_draw_panel_buttons
  3173.         @@:
  3174.         ret
  3175.  
  3176. ;input:
  3177. ; edi = pointer to tedit struct
  3178. align 16
  3179. ted_key_ctrl_end:
  3180.         push eax ebx
  3181.                 call ted_get_num_lines
  3182.                 mov ebx,ted_scr_w
  3183.                 mov [ebx+sb_offs_position],eax ;áâ ¢¨¬ ¯®«§ã­®ª ­  ¯®á«¥¤­îî áâப㠤®ªã¬¥­â 
  3184.                 cmp eax,[ebx+sb_offs_cur_area]
  3185.                 jle @f
  3186.                         mov eax,[ebx+sb_offs_cur_area] ;¯®«ãç ¥¬ ç¨á«® áâப ¢« §ïé¨å ¢ ®ª­®
  3187.                 @@:
  3188.                 sub [ebx+sb_offs_position],eax ;®â­¨¬ ¥¬ ®â ¯®«§ã­ª  ç¨á«® áâப ¢« §ïé¨å ¢ ®ª­® (­® ­¥ ¡®«ìè¥ â¥å, çâ® ¥áâì ¢ ¤®ªã¬¥­â¥)
  3189.                 dec eax
  3190.                 mov ted_cur_y,eax ;áâ ¢¨¬ ªãàá®à ­  ¯®á«¥¤­îî áâப㠤®ªã¬¥­â 
  3191.         pop ebx eax
  3192.         call ted_cur_move_x_last_char
  3193.         stdcall ted_draw,edi
  3194.         cmp ted_fun_draw_panel_buttons,0
  3195.         je @f
  3196.                 call ted_fun_draw_panel_buttons
  3197.         @@:
  3198.         ret
  3199.  
  3200. ;input:
  3201. ; edi = pointer to tedit struct
  3202. align 16
  3203. proc ted_sel_key_up
  3204.   cmp ted_drag_k,1
  3205.   je @f
  3206.     call ted_sel_start
  3207.     mov ted_drag_k,1
  3208.   @@:
  3209.   push dx
  3210.     call ted_cur_move_up
  3211.     cmp dl,8
  3212.     jne @f
  3213.       call ted_scroll_set_redraw
  3214.     @@:
  3215.   pop dx
  3216.   call ted_sel_move
  3217.   stdcall ted_draw,edi
  3218.   ret
  3219. endp
  3220.  
  3221. ;input:
  3222. ; edi = pointer to tedit struct
  3223. align 16
  3224. proc ted_sel_key_down
  3225.   cmp ted_drag_k,1
  3226.   je @f
  3227.     call ted_sel_start
  3228.     mov ted_drag_k,1
  3229.   @@:
  3230.   push dx
  3231.     call ted_cur_move_down
  3232.     cmp dl,8
  3233.     jne @f
  3234.       call ted_scroll_set_redraw
  3235.     @@:
  3236.   pop dx
  3237.   call ted_sel_move
  3238.   stdcall ted_draw,edi
  3239.   ret
  3240. endp
  3241.  
  3242. ;input:
  3243. ; edi = pointer to tedit struct
  3244. align 16
  3245. proc ted_sel_key_left
  3246.         cmp ted_drag_k,1
  3247.         je @f
  3248.                 call ted_sel_start
  3249.         @@:
  3250.         push dx
  3251.                 call ted_cur_move_left
  3252.                 call ted_sel_move
  3253.                 cmp ted_drag_k,1
  3254.                 je @f
  3255.                         mov ted_drag_k,1
  3256.                         mov dl,8
  3257.                 @@:
  3258.                 cmp dl,8
  3259.                 jne @f
  3260.                         call ted_scroll_set_redraw
  3261.                         stdcall ted_draw,edi
  3262.                         jmp .end_f
  3263.                 @@:
  3264.                 stdcall ted_draw_cur_line,edi
  3265.                 .end_f:
  3266.         pop dx
  3267.         ret
  3268. endp
  3269.  
  3270. ;input:
  3271. ; edi = pointer to tedit struct
  3272. align 16
  3273. proc ted_sel_key_right
  3274.         cmp ted_drag_k,1
  3275.         je @f
  3276.                 call ted_sel_start
  3277.         @@:
  3278.         push dx
  3279.                 call ted_cur_move_right
  3280.                 call ted_sel_move
  3281.                 cmp ted_drag_k,1
  3282.                 je @f
  3283.                         mov ted_drag_k,1
  3284.                         mov dl,8
  3285.                 @@:
  3286.                 cmp dl,8
  3287.                 jne @f
  3288.                         call ted_scroll_set_redraw
  3289.                         stdcall ted_draw,edi
  3290.                         jmp .end_f
  3291.                 @@:
  3292.                 stdcall ted_draw_cur_line,edi
  3293.                 .end_f:
  3294.         pop dx
  3295.         ret
  3296. endp
  3297.  
  3298. ;input:
  3299. ; edi = pointer to tedit struct
  3300. ;description:
  3301. ; this function need to optimize output
  3302. align 16
  3303. proc ted_draw_cursor_sumb
  3304. pushad
  3305.         mov ebx,ted_wnd_l
  3306.         add ebx,ted_rec_l
  3307.         mov edx,ted_cur_x
  3308.         imul edx,ted_rec_w
  3309.         add ebx,edx
  3310.         shl ebx,16
  3311.         add ebx,ted_rec_w
  3312.  
  3313.         mov ecx,ted_wnd_t ;calc rect -> y0,y1
  3314.         add ecx,ted_rec_t
  3315.         mov edx,ted_cur_y
  3316.         imul edx,ted_rec_h
  3317.         add ecx,edx
  3318.         shl ecx,16
  3319.         add ecx,ted_rec_h
  3320.  
  3321.         mov edx,ted_color_wnd_work
  3322.         call ted_sel_normalize
  3323.  
  3324.         mov esi,ted_scr_w
  3325.         mov eax,[esi+sb_offs_position]
  3326.         sub ted_seln_y0,eax
  3327.         sub ted_seln_y1,eax
  3328.  
  3329.         mov eax,ted_cur_y
  3330.         cmp eax,ted_seln_y0
  3331.         jl .no_cur_sel
  3332.         cmp eax,ted_seln_y1
  3333.         jg .no_cur_sel
  3334.                 mov edx,ted_color_select ;¬¥­ï¥¬ 梥â ä®­  ­  梥⠢뤥«¥­¨ï
  3335.                 mov esi,ted_scr_h
  3336.                 cmp eax,ted_seln_y0
  3337.                 jne @f
  3338.                         mov eax,ted_cur_x
  3339.                         add eax,[esi+sb_offs_position]
  3340.                         cmp eax,ted_seln_x0
  3341.                         jge @f
  3342.                         mov edx,ted_color_wnd_work
  3343.                 @@:
  3344.                 mov eax,ted_cur_y
  3345.                 cmp eax,ted_seln_y1
  3346.                 jne .no_cur_sel
  3347.                         mov eax,ted_cur_x
  3348.                         add eax,[esi+sb_offs_position]
  3349.                         cmp eax,ted_seln_x1
  3350.                         jl .no_cur_sel
  3351.                         mov edx,ted_color_wnd_work
  3352.         .no_cur_sel:
  3353.         mcall SF_DRAW_RECT
  3354.  
  3355.         call ted_get_pos_by_cursor ;¡¥à¥¬ ¯®§¨æ¨î ᨬ¢®« 
  3356.         cmp ted_gp_opt,2
  3357.         jne @f
  3358.                 mov esi,1
  3359.                 ror ecx,16
  3360.                 mov bx,cx
  3361.                 add ebx,0x10001
  3362.                 call ted_get_symb_color
  3363.                 call ted_convert_invis_symb
  3364.                 mcall SF_DRAW_TEXT ;à¨á®¢ ­¨¥ ᨬ¢®« 
  3365.         @@:
  3366. popad
  3367.         ret
  3368. endp
  3369.  
  3370. ;input:
  3371. ; edx -> pointer to text
  3372. ; edi -> 㪠§ â¥«ì ­  áâàãªâãàã tedit
  3373. ;output:
  3374. ; ecx = color
  3375. ; if ted_mode_color=0 then ecx=ted_color_wnd_text
  3376. align 16
  3377. ted_get_symb_color:
  3378.         mov ecx,ted_color_wnd_text ;§ ¤ ¥¬ 梥â ⥪áâ  ¯® 㬮«ç ­¨î
  3379.  
  3380.         push eax edx
  3381.         cmp ted_mode_color,0
  3382.         je .exit
  3383.                 jmp .on_first
  3384.                 @@:
  3385.                         call ted_iterat_perv
  3386.                         cmp edx,ted_tex_1
  3387.                         jle .exit
  3388.                 .on_first:
  3389.                         xor eax,eax
  3390.                         mov al,byte[edx+1]
  3391.                         or al,al ;¥á«¨ al=0 ⮠梥⠭¥ ¬¥­ï¥âáï
  3392.                         jz @b
  3393.  
  3394.                 cmp eax,ted_colors_text_count
  3395.                 jge .exit
  3396.  
  3397.                 shl ax,2 ;㬭®¦ ¥¬ ¨­¤¥ªá æ¢¥â  ­  4 ¡ ©â 
  3398.                 mov ecx,ted_text_colors ;¯à¨¡ ¢«ï¥¬ ᬥ饭¨¥ 1-£® 梥â 
  3399.                 add ecx,eax
  3400.                 mov ecx,[ecx] ;ãáâ ­ ¢«¨¢ ¥¬ ⥪ã騩 梥â ⥪áâ  ¯® ᬥ饭¨î
  3401.         .exit:
  3402.         or ecx,ted_font_size
  3403.         pop edx eax
  3404.         ret
  3405.  
  3406. ;input:
  3407. ; edx = pointer to text
  3408. ; edi = pointer to tedit struct
  3409. ;description:
  3410. ; ”ã­ªæ¨ï ¯à¥®¡à §ã¥â ­¥¢¨¤¨¬ë¥ ᨬ¢®«ë ¢ ¯¥ç â ¥¬ë¥ ­  íªà ­¥
  3411. align 16
  3412. ted_convert_invis_symb:
  3413.         cmp ted_mode_invis,1
  3414.         jne .else
  3415.                 cmp byte[edx],9
  3416.                 jne @f
  3417.                         lea edx,[ted_symbol_tab]
  3418.                         jmp .end_f
  3419. align 4
  3420.                 @@:
  3421.                 cmp byte[edx],13
  3422.                 jne @f
  3423.                         mov edx,edi
  3424.                         add edx,ted_offs_symbol_new_line
  3425.                 @@:
  3426.                 jmp .end_f
  3427. align 4
  3428.         .else:
  3429.                 cmp byte[edx],9
  3430.                 je @f
  3431.                 cmp byte[edx],13
  3432.                 jne .end_f
  3433.                 @@:
  3434.                         lea edx,[ted_symbol_space]
  3435.         .end_f:
  3436.         ret
  3437.  
  3438. ;input:
  3439. ; edi = pointer to tedit struct
  3440. align 16
  3441. ted_scroll_set_redraw:
  3442.         push eax
  3443.         mov eax,ted_scr_w
  3444.         mov dword[eax+sb_offs_redraw],1
  3445.         mov eax,ted_scr_h
  3446.         mov dword[eax+sb_offs_redraw],1
  3447.         pop eax
  3448.         ret
  3449.  
  3450. align 16
  3451. proc ted_draw, edit:dword
  3452.         locals
  3453.                 line_num dd ?
  3454.         endl
  3455.         pushad
  3456.         mov edi,[edit]
  3457.  
  3458.         mov eax,SF_DRAW_TEXT
  3459.         mov ecx,ted_text_colors
  3460.         mov ecx,[ecx]
  3461.  
  3462.         mov ebx,ted_wnd_l
  3463.         add ebx,ted_rec_l
  3464.         shl ebx,16
  3465.         add ebx,ted_wnd_t
  3466.         add ebx,ted_rec_t
  3467.         add ebx,0x10001 ;¤®¡ ¢«ï¥¬ ®âáâã¯ë ¤«ï ¢ëà ¢­¨¢ ­¨ï ¡ãª¢ë ¯® 業âàã
  3468.  
  3469.         call ted_sel_normalize ;need before draw select
  3470.         mov esi,ted_scr_w
  3471.         mov esi,[esi+sb_offs_position]
  3472.         mov [line_num],esi
  3473.  
  3474.         stdcall ted_clear_line_before_draw, edi,ebx,1,esi
  3475.         call ted_get_first_visible_pos
  3476.         or edx,edx
  3477.         jz .no_draw_text
  3478.         mov esi,1 ;¤«¨­­  ¢ë¢®¤¨¬®£® ⥪áâ  ¯® 1-¬ã ᨬ¢®«ã
  3479.         @@:
  3480.                 call ted_iterat_next
  3481.                 cmp edx,ted_tex_1
  3482.                 jle .no_draw_text
  3483.  
  3484.                 ; *** 梥⮢ ï à §¬¥âª 
  3485.                 cmp ted_mode_color,0
  3486.                 je .no_col_change
  3487.                 cmp byte[edx+1],0
  3488.                 je .no_col_change
  3489.                         call ted_get_symb_color
  3490.                 .no_col_change:
  3491.  
  3492.                 cmp byte[edx],13
  3493.                 jne .no_13
  3494.                         cmp ted_mode_invis,1
  3495.                         jne .no_invis
  3496.                                 push edx
  3497.                                 mov edx,edi
  3498.                                 add edx,ted_offs_symbol_new_line
  3499.                                 int 0x40
  3500.                                 pop edx
  3501.                         .no_invis:
  3502.                         add ebx,ted_rec_h
  3503.                         ;optimized output \/
  3504.                         mov eax,ted_wnd_h
  3505.                         add eax,ted_wnd_t
  3506.                         cmp bx,ax
  3507.                         jg .no_draw_text
  3508.                         mov eax,SF_DRAW_TEXT
  3509.                         ;optimized output /\        
  3510.                         and ebx,0xffff
  3511.                         ror ebx,16
  3512.                         add ebx,ted_wnd_l
  3513.                         add ebx,ted_rec_l
  3514.                         inc ebx
  3515.                         ror ebx,16
  3516.                         inc dword[line_num] ;increment line number
  3517.                         stdcall ted_clear_line_before_draw,edi,ebx,1,dword[line_num]
  3518.                         call ted_opt_draw_line_left
  3519.                         jmp @b
  3520. align 4
  3521.                 .no_13:
  3522.  
  3523.                 int 0x40
  3524.                 ror ebx,16
  3525.                 add ebx,ted_rec_w
  3526.                 mov esi,ted_wnd_l
  3527.                 add esi,ted_wnd_w
  3528.                 cmp bx,si
  3529.                 jl .no_opt
  3530.                         call ted_opt_draw_line_right
  3531.                 .no_opt:
  3532.                 mov si,1
  3533.                 ror ebx,16
  3534.                 jmp @b
  3535.         .no_draw_text:
  3536.  
  3537.         inc dword[line_num]
  3538.         stdcall ted_clear_line_before_draw,edi,ebx,0,dword[line_num]
  3539.         call ted_draw_line_numbers
  3540.         call ted_draw_main_cursor
  3541.  
  3542. ;---------------------------------------------
  3543. ; set all_redraw flag for draw all ScrollBar
  3544. ; In some cases it is necessity to draw only the area
  3545. ; of moving of a "runner", for acceleration of output -
  3546. ; in this case the flag needs to be reset to 0 (zero).
  3547.         mov eax,ted_scr_h
  3548.         mov esi,ted_scr_w
  3549.         mov dword[eax+sb_offs_all_redraw],1
  3550.         mov dword[esi+sb_offs_all_redraw],1
  3551.  
  3552. ; à¨á®¢ ­¨¥ ¯®«®á ¯à®ªàã⪨
  3553.         stdcall scroll_bar_horizontal.draw,eax ;[scrollbar_hor_draw]
  3554.         stdcall scroll_bar_vertical.draw,esi ;[scrollbar_ver_draw]
  3555. ; reset all_redraw flag
  3556.         mov dword[eax+sb_offs_all_redraw],0
  3557.         mov dword[esi+sb_offs_all_redraw],0
  3558. ;---------------------------------------------
  3559.  
  3560.         ;left-bottom square
  3561.         mov ebx,ted_wnd_l
  3562.         shl ebx,16
  3563.         add ebx,ted_rec_l
  3564.         mov ecx,ted_wnd_t
  3565.         add ecx,ted_wnd_h
  3566.         shl ecx,16
  3567.         mov cx,word[eax+sb_offs_size_y]
  3568.         inc cx
  3569.         mcall SF_DRAW_RECT,,,ted_color_wnd_capt ;[sc.work]
  3570.  
  3571.         ;right-bottom square
  3572.         mov ebx,ted_wnd_l
  3573.         add ebx,ted_wnd_w
  3574.         shl ebx,16
  3575.         mov bx,word[esi+sb_offs_size_x]
  3576.         inc bx
  3577.         int 0x40
  3578.  
  3579.         cmp ted_fun_draw_panels,0
  3580.         je @f
  3581.                 stdcall ted_fun_draw_panels, edi
  3582.         @@:
  3583.         popad
  3584.         ret
  3585. endp
  3586.  
  3587. ;input:
  3588. ; edi = pointer to tedit struct
  3589. align 16
  3590. proc ted_draw_main_cursor
  3591. pushad
  3592.         mov eax,SF_DRAW_RECT ;draw cursor
  3593.         mov ecx,ted_wnd_t ;calc rect -> y0,y1
  3594.         add ecx,ted_rec_t
  3595.         mov edx,ted_cur_y
  3596.         imul edx,ted_rec_h
  3597.         add ecx,edx
  3598.  
  3599.         shl ecx,16
  3600.         add ecx,ted_rec_h
  3601.  
  3602.         mov ebx,ted_wnd_l ;calc rect -> x0,x1
  3603.         add ebx,ted_rec_l
  3604.         mov edx,ted_cur_x
  3605.         imul edx,ted_rec_w
  3606.         add ebx,edx
  3607.         shl ebx,16
  3608.         add ebx,ted_rec_w
  3609.         cmp ted_cur_ins,1 ;¯à®¢¥àª  ०¨¬  à ¡®âë ªãàá®à  (®¡ëç­ë© ¨«¨ ¢áâ ¢ª )
  3610.         jne @f
  3611.                 shr bx,2 ;㬥­ìè ¥¬ è¨à¨­ã ªãàá®à 
  3612.         @@:
  3613.  
  3614.         mov edx,ted_color_cursor
  3615.         int 0x40 ;¢ë¢®¤ ªãàá®à 
  3616.  
  3617.         call ted_get_pos_by_cursor
  3618.         cmp ted_gp_opt,2
  3619.         jne @f
  3620.                 mov esi,1
  3621.                 ror ecx,16
  3622.                 mov bx,cx
  3623.                 add ebx,0x10001
  3624.                 mov ecx,ted_color_cur_text
  3625.                 or ecx,ted_font_size
  3626.                 call ted_convert_invis_symb
  3627.                 mcall SF_DRAW_TEXT
  3628.         @@:
  3629.  
  3630.         mov ebx,ted_wnd_l
  3631.         add ebx,ted_rec_l
  3632.         shl ebx,16
  3633.         add ebx,ted_wnd_t
  3634.         add ebx,3
  3635.         mov ecx,ted_color_wnd_bord
  3636.         or  ecx,0x80000000
  3637.         lea edx,[txtRow]
  3638.         mcall SF_DRAW_TEXT ;¢ë¢®¤ ¯®¤¯¨á¨ '‘âப '
  3639.  
  3640.         add ebx,0x500000
  3641.         lea edx,[txtCol]
  3642.         int 0x40 ;¢ë¢®¤ ¯®¤¯¨á¨ '‡­ ª'
  3643.  
  3644.         cmp ted_tim_undo,0
  3645.         je @f
  3646.                 add ebx,0x500000
  3647.                 lea edx,[txtOtm]
  3648.                 int 0x40
  3649.                 sub ebx,0x500000
  3650.         @@:
  3651.  
  3652.         call ted_draw_buffer
  3653.         call ted_draw_help_f1
  3654.  
  3655.         mov eax,47 ;draw cursor coords
  3656.         mov esi,ted_color_wnd_bord
  3657.         or  esi,0x40000000
  3658.  
  3659.         mov edx,ebx
  3660.         ror edx,16
  3661.         sub edx,35
  3662.         ror edx,16
  3663.         ;add edx,3
  3664.         mov ebx,0x40000 ;Row=...
  3665.         mov ecx,ted_scr_w
  3666.         mov ecx,[ecx+sb_offs_position]
  3667.         add ecx,ted_cur_y
  3668.         inc ecx
  3669.  
  3670. push edi
  3671.         mov edi,ted_color_wnd_work
  3672.         int 0x40 ;¢ë¢®¤ ç¨á«  ⥪ã饩 áâப¨
  3673. pop edi
  3674.  
  3675.         ;mov ebx,0x40000 ;Col=...
  3676.         mov ecx,ted_scr_h
  3677.         mov ecx,[ecx+sb_offs_position]
  3678.         add ecx,ted_cur_x
  3679.         inc ecx
  3680.         add edx,0x500000
  3681. push edi
  3682.         mov edi,ted_color_wnd_work
  3683.         int 0x40 ;¢ë¢®¤ ç¨á«  §­ ª®¢
  3684. pop edi
  3685.  
  3686.         cmp ted_tim_undo,0
  3687.         je @f
  3688.                 mov ecx,ted_tim_undo
  3689.                 add edx,0x500000
  3690.                 mov edi,ted_color_wnd_work ;¯®à⨬ ॣ¨áâà edi, ­® ¢ ª®­æ¥ ä㭪樨 í⮠㦥 ­¥ ¢ ¦­®
  3691.                 int 0x40 ;¢ë¢®¤ ç¨á«  ®â¬¥­¥­­ëå ¤¥©á⢨©
  3692.         @@:
  3693.  
  3694. popad
  3695.         ret
  3696. endp
  3697.  
  3698. ;input:
  3699. ; edi = pointer to tedit struct
  3700. align 16
  3701. proc ted_draw_buffer
  3702.         pushad
  3703.  
  3704.         mov eax,ted_buffer
  3705.         cmp dword[eax],1 ;ᬮâਬ à §¬¥à ¡ãä¥à 
  3706.         jl @f
  3707.                 mov ebx,ted_rec_l
  3708.                 add bx,300
  3709.                 cmp ebx,ted_wnd_w ;áà ¢­¨¢ ¥¬ ª®®à¤¨­ âã ¤«ï ¢ë¢®¤ ⥪áâ 
  3710.                 jge @f ;¯®¤¯¨áì ­¥ ¢« §¨â ¢ ®ª­®
  3711.  
  3712.                 add ebx,ted_wnd_l
  3713.                 shl ebx,16
  3714.                 add ebx,ted_wnd_t
  3715.                 add ebx,3
  3716.                 mov ecx,ted_color_wnd_bord
  3717.                 or ecx,0x40000000
  3718.  
  3719.                 mov edx,ted_buffer
  3720.                 add edx,12
  3721.                 mov esi,edx
  3722.                 mov edi,ted_color_wnd_work ;edi - destroy not pointer to tedit
  3723.                 call tl_strlen
  3724.                 ;cmp eax,0 ;¡ãä¥à ¯ãáâ
  3725.                 ;je @f
  3726.                 cmp eax,20
  3727.                 jle .crop_buf
  3728.                         mov eax,20 ;®¡à¥§ª  ¯®¤¯¨á¨ ¤® 20 ᨬ¢®«®¢
  3729.                 .crop_buf:
  3730.                 mov esi,eax
  3731.                 mcall SF_DRAW_TEXT ;¢ë¢®¤ ᮤ¥à¦¨¬®£® ¡ãä¥à 
  3732.  
  3733.                 sub ebx,50 shl 16
  3734.                 lea edx,[txtBuf]
  3735.                 mov esi,edx
  3736.                 call tl_strlen
  3737.                 mov esi,eax
  3738.                 xor ecx,0x40000000 ;㡨ࠥ¬ 梥â ä®­ 
  3739.                 mcall SF_DRAW_TEXT ;¢ë¢®¤ ¯®¤¯¨á¨ ¤«ï ¡ãä¥à 
  3740.         @@:
  3741.         popad
  3742.         ret
  3743. endp
  3744.  
  3745. ;input:
  3746. ; edi = pointer to tedit struct
  3747. align 16
  3748. proc ted_draw_help_f1
  3749.         pushad
  3750.         cmp ted_rec_t,13 ;¬¨­¨¬ «ì­ ï ¢ëá®â  ¤«ï à¨á®¢ ­¨ï á¯à ¢ª¨
  3751.         jle @f
  3752.                 ;clear place before draw help
  3753.                 mov ebx,ted_wnd_l
  3754.                 add ebx,ted_rec_l
  3755.                 shl ebx,16
  3756.                 add ebx,ted_wnd_w
  3757.                 sub ebx,ted_rec_l
  3758.                 mov ecx,ted_wnd_t
  3759.                 add ecx,13
  3760.                 shl ecx,16
  3761.                 add ecx,9 ;9 - ¢ëá®â  0-£® èà¨äâ , áâ ¢¨âì ted_rec_h ¯®ª  ¥é¥ à ­®
  3762.                 mcall SF_DRAW_RECT,,,ted_color_wnd_capt
  3763.  
  3764.         cmp ted_help_id,-1
  3765.         je @f
  3766.                 mov eax,ted_help_id
  3767.                 ColToIndexOffset eax,edx
  3768.  
  3769.                 ;SetCoordinates
  3770.                 mov ebx,ted_wnd_l
  3771.                 add ebx,ted_rec_l
  3772.                 shl ebx,16
  3773.                 add ebx,ted_wnd_t
  3774.                 add ebx,13 ;=3+10
  3775.  
  3776.                 ;SetTextColor
  3777.                 xor eax,eax
  3778.                 mov al,byte[edx+MAX_COLOR_WORD_LEN+7]
  3779.                 shl ax,2
  3780.                 mov ecx,ted_text_colors
  3781.                 add ecx,eax
  3782.                 mov ecx,[ecx]
  3783.                 or      ecx,0xc0000000 ;SetTextStyles
  3784.                 mov esi,edi
  3785.                 mcall SF_DRAW_TEXT,,,,,ted_color_wnd_work
  3786.                 mov edi,esi
  3787.  
  3788.                 mov esi,edx
  3789.                 call tl_strlen
  3790.  
  3791.                 ;*** draw help string ***
  3792.                 mov ecx,ted_color_wnd_bord
  3793.                 or ecx,0x80000000
  3794.                 mov edx,[edx+MAX_COLOR_WORD_LEN]
  3795.                 or edx,edx
  3796.                 jz @f
  3797.                         add edx,ted_help_text_f1
  3798.                         inc eax
  3799.                         imul eax,6 ;è¨à¨­  ᨬ¢®«  ¢ á¨áâ. èà¨äâ¥
  3800.                         shl eax,16                     
  3801.                         add ebx,eax
  3802.                         mcall SF_DRAW_TEXT
  3803.         @@:
  3804.         popad
  3805.         ret
  3806. endp
  3807.  
  3808. ;input:
  3809. ; edi = pointer to tedit struct
  3810. align 16
  3811. proc ted_draw_line_numbers
  3812. pushad
  3813.         ;top panel with caption
  3814.         mov ebx,ted_wnd_l
  3815.         ;add ebx,ted_rec_l
  3816.         shl ebx,16
  3817.         add ebx,ted_wnd_w
  3818.         ;sub ebx,ted_rec_l
  3819.         mov edx,ted_color_wnd_work
  3820.         mov ecx,ted_wnd_t
  3821.         shl ecx,16
  3822.         add ecx,ted_rec_t
  3823.         mov edx,ted_color_wnd_capt
  3824.         mcall SF_DRAW_RECT
  3825.  
  3826.         ;line numbers
  3827.         mov ebx,0x40000 ;format
  3828.         mov ecx,ted_scr_w
  3829.         mov ecx,[ecx+sb_offs_position]
  3830.         inc ecx
  3831.         mov edx,3
  3832.         add edx,ted_wnd_l
  3833.         rol edx,16
  3834.         add edx,ted_wnd_t
  3835.         add edx,ted_rec_t
  3836.         @@:
  3837.  
  3838. push ebx ecx edx
  3839.         ;left panel with numbers
  3840.         mov ebx,ted_wnd_l
  3841.         shl ebx,16
  3842.         add ebx,ted_rec_l
  3843.         mov ecx,ted_rec_h
  3844.         rol ecx,16
  3845.         mov cx,dx
  3846.         rol ecx,16
  3847.         mov edx,ted_color_wnd_capt
  3848.         mcall SF_DRAW_RECT ;à¨á㥬 ¯àאַ㣮«ì­¨ª ¯®¤ ­®¬¥à®¬ áâப¨
  3849. pop edx ecx ebx
  3850.  
  3851.                 mov esi,ted_color_wnd_bord
  3852.                 mcall SF_DRAW_NUMBER ;à¨á㥬 ­®¬¥à áâப¨
  3853.                 inc ecx
  3854.                 add edx,ted_rec_h
  3855.                 sub edx,ted_wnd_t
  3856.                 mov esi,edx
  3857.                 and esi,0xffff
  3858.                 cmp esi,ted_wnd_h
  3859.                 jge @f
  3860.                 add edx,ted_wnd_t
  3861.                 jmp @b
  3862. align 4
  3863.         @@:
  3864. popad
  3865.         ret
  3866. endp
  3867.  
  3868. ;output:
  3869. ; ah = symbol
  3870. align 16
  3871. proc KeyConvertToASCII uses ebx, table:dword
  3872.         mov ebx,[table] ;convert scan to ascii
  3873.         shr ax,8
  3874.         add bx,ax ;? ebx,eax
  3875.         mov ah,byte[ebx]
  3876.         ret
  3877. endp
  3878.  
  3879. align 16
  3880. proc ted_draw_cur_line, edit:dword
  3881. pushad
  3882.         mov edi,[edit]
  3883.  
  3884.         mov ebx,ted_wnd_l
  3885.         add ebx,ted_rec_l
  3886.         shl ebx,16
  3887.         mov eax,ted_cur_y
  3888.         imul eax,ted_rec_h
  3889.         mov bx,ax
  3890.         add ebx,ted_wnd_t
  3891.         add ebx,ted_rec_t ;ebx - ª®®à¤¨­ âë ¤«ï ¯àאַ㣮«ì­¨ª  ®ç¨á⪨ «¨­¨¨
  3892.         add ebx,0x10001   ;¤®¡ ¢«ï¥¬ ®âáâã¯ë ¤«ï ¢ëà ¢­¨¢ ­¨ï ¡ãª¢ë ¯® 業âàã
  3893.  
  3894.         call ted_sel_normalize ;need before draw select
  3895.         mov ecx,ted_cur_y
  3896.         mov eax,ted_scr_w
  3897.         add ecx,[eax+sb_offs_position]
  3898.         stdcall ted_clear_line_before_draw,edi,ebx,1,ecx
  3899.  
  3900.         mov eax,ted_scr_h
  3901.         mov esi,[eax+sb_offs_position]
  3902.         call ted_get_pos_by_coords
  3903.  
  3904.         cmp ted_gp_opt,2
  3905.         jne .no_draw_text
  3906.         call ted_get_symb_color
  3907.         mov esi,1 ;draw 1 symbol
  3908.         @@:
  3909.                 ;call ted_iterat_next
  3910.                 cmp edx,ted_tex_1
  3911.                 jle .no_draw_text
  3912.  
  3913.                 ; *** 梥⮢ ï à §¬¥âª 
  3914.                 cmp ted_mode_color,0
  3915.                 je .no_col_change
  3916.                 cmp byte[edx+1],0
  3917.                 je .no_col_change
  3918.                         call ted_get_symb_color
  3919.                 .no_col_change:
  3920.  
  3921.                 mov eax,SF_DRAW_TEXT
  3922.                 cmp byte [edx],13
  3923.                 jne .no_13
  3924.                         cmp ted_mode_invis,1
  3925.                         jne .no_draw_text
  3926.                         push edx
  3927.                         mov edx,edi
  3928.                         add edx,ted_offs_symbol_new_line
  3929.                         int 0x40
  3930.                         pop edx
  3931.                         jmp .no_draw_text
  3932. align 4
  3933.                 .no_13:
  3934.  
  3935.                 int 0x40
  3936.                 ror ebx,16
  3937.                 add ebx,ted_rec_w
  3938.                 mov eax,ted_wnd_w
  3939.                 add eax,ted_wnd_l ;ax = ®âáâ㯠¯® ®á¨ x
  3940.                 cmp bx,ax
  3941.                 jge .no_draw_text ;Opt
  3942.                 ror ebx,16
  3943.                 call ted_iterat_next
  3944.                 jmp @b
  3945. align 4
  3946.         .no_draw_text:
  3947.  
  3948.         call ted_draw_main_cursor
  3949. popad
  3950.         ret
  3951. endp
  3952.  
  3953. ;input:
  3954. ;  clear_o - ¥á«¨ =1 ®ç¨áâ¨âì ®¤­ã áâபã, =0 ®ç¨áâ¨âì ¢á¥ áâப¨ ®ª­  ¤® ­¨§ã
  3955. align 16
  3956. proc ted_clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:dword
  3957.         pushad
  3958.         mov edi,[edit]
  3959.         mov ebx,[coords] ;ebx = x*2^16+y coords to left up point clear line
  3960.         mov esi,[numb_lin] ;esi - number text line
  3961.  
  3962.         sub ebx,0x10001 ;®â­¨¬ ¥¬ ®âáâã¯ë ¤«ï ¢ëà ¢­¨¢ ­¨ï ¡ãª¢ë ¯® 業âàã
  3963.         cmp dword[clear_o],0
  3964.         jne @f
  3965.                 add ebx,ted_rec_h
  3966.                 ror ebx,16
  3967.                 xor bx,bx
  3968.                 add ebx,ted_wnd_l
  3969.                 add ebx,ted_rec_l ;bx = ted_wnd_l+ted_rec_l
  3970.                 ror ebx,16
  3971.         @@:
  3972.  
  3973.         mov eax,ted_wnd_h
  3974.         add eax,ted_wnd_t
  3975.         cmp ax,bx
  3976.         jl .no_clear
  3977.         sub ax,bx
  3978.  
  3979.         mov cx,bx
  3980.         shl ecx,16
  3981.  
  3982.         xor bx,bx
  3983.         add ebx,ted_wnd_w
  3984.         sub ebx,ted_rec_l
  3985.         xor cx,cx
  3986.         add ecx,ted_rec_h
  3987.         mov edx,ted_color_wnd_work
  3988.  
  3989.         cmp dword[clear_o],0
  3990.         je .pusto
  3991.         cmp ax,cx
  3992.         jge @f
  3993.         .pusto:
  3994.                 mov cx,ax
  3995.                 jmp .no_select ;¥á«¨ ®ç¨á⪠ ®ª­  ¤® ­¨§ã, â® ¢á¥£¤  ä®­®¢ë¬ 梥⮬
  3996.         @@:
  3997.  
  3998.         call ted_is_select
  3999.         or al,al
  4000.         jz .no_select
  4001.         cmp ted_seln_y0,esi
  4002.         jg .no_select
  4003.         cmp ted_seln_y1,esi
  4004.         jl .no_select
  4005.                 mov edx,ted_color_select ;draw selected line
  4006.         .no_select:
  4007.  
  4008.         mcall SF_DRAW_RECT ;§ ªà áª  ¯®«­®© áâப¨ 梥⮬ ä®­  ¨«¨ 梥⮬ ¢ë¤¥«¥­¨ï
  4009.  
  4010.         call ted_is_select
  4011.         or al,al
  4012.         jz .no_clear
  4013.  
  4014.         mov al,SF_DRAW_RECT
  4015.         xor cx,cx
  4016.         add ecx,ted_rec_h
  4017.         cmp ted_seln_y0,esi
  4018.         jne @f
  4019.                 push bx esi
  4020.                 mov edx,ted_seln_x0 ; ¢¥àå­ïï ¯®«®á  (§ â¨à ¥â á«¥¢ )
  4021.                 mov esi,ted_scr_h
  4022.                 cmp edx,[esi+sb_offs_position]
  4023.                 jle .in_wnd
  4024.                         sub edx,[esi+sb_offs_position]
  4025.                         imul edx,ted_rec_w
  4026.                         mov bx,dx
  4027.                         jmp .no_wnd
  4028.                 .in_wnd:
  4029.                 xor bx,bx
  4030.                 .no_wnd:
  4031.                 mov edx,ted_color_wnd_work
  4032.                 int 0x40
  4033.                 pop esi bx
  4034.         @@:
  4035.         cmp ted_seln_y1,esi
  4036.         jne @f
  4037.                 ;push esi
  4038.                 ;¥á«¨ ¢ë¤¥«¥­ ¢¥áì ä ©« âãâ ¬®¦­® ᤥ« âì ¢ë室, ­® ⮣¤  ­ã¦­® ¢ëè¥ ã¡à âì jmp .no_select
  4039.                 mov edx,ted_seln_x1 ; ­¨¦­ïï ¯®«®á  (§ â¨à ¥â á¯à ¢ )
  4040.                 mov esi,ted_scr_h
  4041.                 cmp edx,[esi+sb_offs_position]
  4042.                 jle .in_wnd2
  4043.                         sub edx,[esi+sb_offs_position]
  4044.                         imul edx,ted_rec_w
  4045.                         sub bx,dx
  4046.                         shl edx,16
  4047.                         add ebx,edx
  4048.                 .in_wnd2:
  4049.                 mov edx,ted_color_wnd_work
  4050.                 int 0x40
  4051.                 ;pop esi
  4052.         @@:
  4053.  
  4054.         .no_clear:
  4055.         popad
  4056.         ret
  4057. endp
  4058.  
  4059. ;input:
  4060. ; edi = pointer to tedit struct
  4061. ;output:
  4062. ; ecx = ­®¢ë© 梥â ᨬ¢®« 
  4063. ; edx = pointer to symbol
  4064. ; edx = 0 if text not in screen
  4065. align 16
  4066. ted_get_first_visible_pos:
  4067.         push eax ecx
  4068.         mov eax,ted_scr_w
  4069.         mov edx,ted_tex
  4070.         xor ecx,ecx
  4071.         @@:
  4072.                 cmp ecx,[eax+sb_offs_position]
  4073.                 je @f
  4074.                 call ted_iterat_next
  4075.                 cmp edx,ted_tex_1
  4076.                 jle @f
  4077.                 cmp byte[edx],13
  4078.                 jne @b
  4079.                 inc ecx
  4080.                 jmp @b
  4081. align 4
  4082.         @@:
  4083.  
  4084.         cmp ecx,[eax+sb_offs_position]
  4085.         je @f
  4086.                 xor edx,edx
  4087.         @@:
  4088.         cmp ecx,[eax+sb_offs_max_area]
  4089.         jle @f
  4090.                 mov [eax+sb_offs_max_area],ecx
  4091.         @@:
  4092.         pop ecx eax
  4093.         call ted_opt_draw_line_left
  4094.         ret
  4095.  
  4096. ;input:
  4097. ; edx = pointer to symbol
  4098. ; edi = pointer to tedit struct
  4099. ;output:
  4100. ; ecx = 梥â ᨬ¢®« 
  4101. ; edx = 㪠§ â¥«ì ­  ¯¥à¢ë© «¥¢ë© ᨬ¢®«
  4102. ;description:
  4103. ; äã­ªæ¨ï ­ã¦­  ¤«ï ®¯â¨¬¨§ æ¨¨ ¢ë¢®¤  ⥪áâ 
  4104. align 16
  4105. proc ted_opt_draw_line_left uses ebx
  4106.         mov ebx,ted_scr_h
  4107.         mov ebx,[ebx+sb_offs_position]
  4108.         or ebx,ebx
  4109.         jz .ret_f
  4110.         push eax
  4111.         mov eax,edx
  4112.  
  4113.         cmp edx,ted_tex
  4114.         jne @f
  4115.                 call ted_iterat_next
  4116.                 jmp .beg_cycle
  4117.         @@:
  4118.  
  4119.         or ebx,ebx
  4120.         jz @f
  4121.  
  4122.         cmp byte[edx],13
  4123.         jne @f
  4124.                 call ted_iterat_next
  4125.                 .beg_cycle:
  4126.         @@:
  4127.                 cmp edx,ted_tex_1
  4128.                 jle @f
  4129.                 cmp byte[edx],13
  4130.                 je @f
  4131.                 or ebx,ebx
  4132.                 jz @f
  4133. ;--------------------------------------
  4134. xor eax,eax ;eax ¡ã¤¥â ¬¥­ïâìáï
  4135. mov al,byte[edx+1]
  4136. or al,al
  4137. jz .no_color
  4138. cmp eax,ted_colors_text_count
  4139. jge .no_color
  4140.         xor ecx,ecx
  4141.         mov cl,byte[edx+1]
  4142.         shl cx,2
  4143.         add ecx,ted_text_colors
  4144.         mov ecx,[ecx]
  4145. .no_color:
  4146. ;--------------------------------------
  4147.                 mov eax,edx
  4148.                 call ted_iterat_next
  4149.                 dec ebx
  4150.                 jmp @b
  4151. align 4
  4152.         @@:
  4153.                 mov edx,eax
  4154.         pop eax
  4155.         .ret_f:
  4156.         call ted_get_symb_color
  4157.         ret
  4158. endp
  4159.  
  4160. ;input:
  4161. ; edx = pointer to symbol
  4162. ; edi = pointer to tedit struct
  4163. ;output:
  4164. ; ecx = symbol color
  4165. ; edx = pointer to 13 symbol
  4166. ;description:
  4167. ; äã­ªæ¨ï ­ã¦­  ¤«ï ®¯â¨¬¨§ æ¨¨ ¢ë¢®¤  ⥪áâ 
  4168. align 16
  4169. proc ted_opt_draw_line_right uses eax
  4170.         mov eax,edx
  4171.         @@:
  4172.                 cmp edx,ted_tex_1
  4173.                 jle @f
  4174.                 cmp byte[edx],13
  4175.                 je @f
  4176.                 mov eax,edx
  4177.                 call ted_iterat_next
  4178.                 jmp @b
  4179.         @@:
  4180.         mov edx,eax ;perv sumbol
  4181.         call ted_get_symb_color
  4182.         ret
  4183. endp
  4184.  
  4185. align 16
  4186. proc ted_mouse, edit:dword
  4187.         pushad
  4188.         mov edi,[edit]
  4189.  
  4190.         ;®¡à ¡ â뢠¥¬ áªà®««¨­£¨
  4191.         mov edx,ted_scr_h
  4192.         mov ecx,ted_scr_w
  4193.  
  4194.         cmp word[edx+sb_offs_delta2],0
  4195.         jne .horizontal
  4196.  
  4197.         mov eax,[ecx+sb_offs_max_area]
  4198.         cmp eax,[ecx+sb_offs_cur_area]
  4199.         jbe .horizontal
  4200.         ; mouse event for Vertical ScrollBar
  4201.         stdcall scroll_bar_vertical.mouse,ecx ;[scrollbar_ver_mouse]
  4202.         cmp dword[ecx+sb_offs_redraw],0
  4203.         je @f
  4204.                 mov dword[ecx+sb_offs_redraw],0
  4205.                 stdcall ted_draw,edi
  4206.                 jmp .no_in_wnd
  4207.         @@:
  4208.         cmp word[ecx+sb_offs_delta2],0
  4209.         jne .no_in_wnd
  4210.         .horizontal:
  4211.         mov eax,[edx+sb_offs_max_area]
  4212.         cmp eax,[edx+sb_offs_cur_area]
  4213.         jbe .other
  4214.         ; mouse event for Horizontal ScrollBar
  4215.         stdcall scroll_bar_horizontal.mouse,edx ;[scrollbar_hor_mouse]
  4216.         cmp dword[edx+sb_offs_redraw],0
  4217.         je .other
  4218.                 mov dword[edx+sb_offs_redraw],0
  4219.                 stdcall ted_draw,edi
  4220.                 jmp .no_in_wnd
  4221.         .other:
  4222.         cmp word[ecx+sb_offs_delta2],0
  4223.         jne .no_in_wnd
  4224.         cmp word[edx+sb_offs_delta2],0
  4225.         jne .no_in_wnd
  4226.  
  4227.         ;®¡à ¡ â뢠¥¬ ®ª­® । ªâ®à 
  4228.         mcall SF_MOUSE_GET,SSF_BUTTON
  4229.         cmp al,1
  4230.         jne @f
  4231.                 mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
  4232.                 mov ebx,ted_wnd_t
  4233.                 add ebx,ted_rec_t
  4234.                 cmp ax,bx
  4235.                 jl @f ;y_mouse<y_wnd
  4236.  
  4237.                 sub ebx,ted_rec_t
  4238.                 add ebx,ted_wnd_h
  4239.                 cmp bx,ax
  4240.                 jl @f ;y_mouse>y_wnd
  4241.  
  4242.                 mov ebx,ted_wnd_l
  4243.                 add ebx,ted_rec_l
  4244.                 mov ecx,eax
  4245.                 shr ecx,16
  4246.                 cmp cx,bx
  4247.                 jl @f ;x_mouse<x_wnd
  4248.  
  4249.                 sub ebx,ted_rec_l
  4250.                 add ebx,ted_wnd_w
  4251.                 cmp bx,cx
  4252.                 jl @f ;x_mouse>x_wnd
  4253.  
  4254.                 call ted_draw_cursor_sumb
  4255.                 call ted_wnd_main_click
  4256.                 jmp .no_in_wnd
  4257.         @@:
  4258.         mov edx,ted_el_focus
  4259.         cmp [edx],edi
  4260.         jne @f
  4261.                 call ted_wnd_main_mouse_scroll ;ᬮâਬ ­  ¯à®ªàãâªã ª®«¥á  ¬ëè¨
  4262.         @@:
  4263.         cmp ted_drag_m,0
  4264.         je .no_in_wnd
  4265.                 mov ted_drag_m,0
  4266.                 stdcall ted_draw,edi
  4267.                 cmp ted_fun_draw_panel_buttons,0
  4268.                 je .no_in_wnd
  4269.                         call ted_fun_draw_panel_buttons
  4270.         .no_in_wnd:
  4271.         popad
  4272.         ret
  4273. endp
  4274.  
  4275. ;input:
  4276. ; eax -> (x,y)
  4277. ; edi -> 㪠§ â¥«ì ­  áâàãªâãàã tedit
  4278. ;description:
  4279. ; äã­ªæ¨ï ¢ë§ë¢¥âáï ¯à¨ ­ ¦ â¨¨ ª­®¯ª®© ¬ëè¨ ¨ ¯®¯ ¤¥­¨¨ ªãàá®à®¬ ¢ ®ª­® । ªâ®à 
  4280. align 16
  4281. ted_wnd_main_click:
  4282.         push ebx ecx edx
  4283.         mov ebx,ted_el_focus
  4284.         mov [ebx],edi ;áâ ¢¨¬ 䮪ãá
  4285.  
  4286.         push eax
  4287.                 shr eax,16
  4288.                 sub eax,ted_wnd_l
  4289.                 sub eax,ted_rec_l
  4290.  
  4291.                 xor edx,edx
  4292.                 mov ecx,ted_rec_w
  4293.                 div cx
  4294.                 ;inc eax
  4295.                 mov ebx,ted_scr_h
  4296.                 cmp eax,[ebx+sb_offs_cur_area]
  4297.                 jle @f
  4298.                         mov eax,[ebx+sb_offs_cur_area]
  4299.                 @@:
  4300.                 ;dec eax
  4301.                 mov ted_cur_x,eax
  4302.         pop eax
  4303.  
  4304.         push eax
  4305.                 and eax,0xffff
  4306.                 sub eax,ted_wnd_t
  4307.                 sub eax,ted_rec_t
  4308.  
  4309.                 xor edx,edx
  4310.                 mov ecx,ted_rec_h
  4311.                 div cx
  4312.                 inc eax
  4313.                 mov ebx,ted_scr_w
  4314.                 cmp eax,[ebx+sb_offs_cur_area]
  4315.                 jle @f
  4316.                         mov eax,[ebx+sb_offs_cur_area]
  4317.                 @@:
  4318.                 dec eax
  4319.                 mov ted_cur_y,eax
  4320.         pop eax
  4321.  
  4322.         cmp ted_drag_m,0
  4323.         je @f
  4324.                 call ted_sel_move
  4325.                 jmp .sel_move
  4326.         @@:
  4327.                 mov ted_drag_m,1
  4328.                 call ted_sel_start
  4329.         .sel_move:
  4330.         pop edx ecx ebx
  4331.         ret
  4332.  
  4333. ;input:
  4334. ; edi = pointer to tedit struct
  4335. align 16
  4336. ted_wnd_main_mouse_scroll:
  4337.         push eax ebx ecx
  4338.         mcall SF_MOUSE_GET,SSF_SCROLL_DATA
  4339.         or ax,ax
  4340.         jz .no_scroll
  4341.                 mov ecx,ted_scr_w
  4342.                 movsx eax,ax
  4343.                 lea eax,[eax+eax*2] ;㬭®¦ ¥¬ ­  3 (ç¨á«® áâப ¯à®ªàã⪨ §  ®¤­® ¤¢¨¦¥­¨¥ ª®«¥á  ¬ëè¨)
  4344.                 add eax,[ecx+sb_offs_position]
  4345.                 mov ebx,[ecx+sb_offs_max_area]
  4346.                 shl ebx,1
  4347.                 sub ebx,[ecx+sb_offs_cur_area] ;®â­¨¬ ¥¬ ¯®«®¢¨­ã ¢ëá®âë ®ª­ 
  4348.                 shr ebx,1
  4349.                 cmp eax,ebx
  4350.                 jae .no_scroll
  4351.                 mov ebx,ted_cur_y ;¯®§¨æ¨ï ªãàá®à 
  4352.                 sub ebx,eax       ;- ­®¢ ï ¯®§¨æ¨ï áªà®««¨­£ 
  4353.                 add ebx,[ecx+sb_offs_position] ;+ áâ à ï ¯®§¨æ¨ï áªà®««¨­£ 
  4354.                 bt ebx,31
  4355.                 jnc @f
  4356.                         xor ebx,ebx ;¥á«¨ ªãàá®à áâ « ¢ëè¥ ®ª­ , â® áâ ¢¨¬ ­  ¢¥àå­îî áâபã
  4357.                 @@:
  4358.                 inc ebx
  4359.                 cmp ebx,[ecx+sb_offs_cur_area]
  4360.                 jle @f
  4361.                         mov ebx,[ecx+sb_offs_cur_area] ;¥á«¨ ªãàá®à áâ « ­¨¦¥ ®ª­ , â® áâ ¢¨¬ ­  ­¨¦­îî áâபã
  4362.                 @@:
  4363.                 dec ebx
  4364.                 mov ted_cur_y,ebx
  4365.                 mov [ecx+sb_offs_position],eax
  4366.                 stdcall ted_draw,edi
  4367.         .no_scroll:
  4368.         pop ecx ebx eax
  4369.         ret
  4370.  
  4371. align 16
  4372. proc ted_save_file, edit:dword, file:dword, f_name:dword
  4373. pushad
  4374.         mov edi,[edit]
  4375.  
  4376.         stdcall ted_can_save,edi
  4377.         ;or al,al
  4378.         ;jz .no_save
  4379.  
  4380.         mov ecx,ted_max_chars
  4381.         invoke mem.alloc,ecx
  4382.         push eax ;§ ¯®¬¨­ ¥¬ 㪠§ â¥«ì ­  ¢ë¤¥«¥­­ãî ¯ ¬ïâì
  4383.  
  4384.         mov edx,ted_tex
  4385.         xor ecx,ecx
  4386.         @@:
  4387.                 call ted_iterat_next
  4388.                 cmp edx,ted_tex_1
  4389.                 jle @f ;edx = ted_tex or edx = ted_tex+sizeof.symbol
  4390.                 mov bl,[edx]
  4391.                 mov byte[eax],bl
  4392.                 inc eax
  4393.                 inc ecx
  4394.                 jmp @b
  4395. align 4
  4396.         @@:
  4397.  
  4398.         or ecx,ecx
  4399.         jz @f
  4400.                 mov ebx,[file]
  4401.                 pop eax ;§ ¯¨á뢠¥¬ 㪠§ â¥«ì ­  ¢ë¤¥«¥­­ãî ¯ ¬ïâì
  4402.                 mov [ebx+16],eax
  4403.                 push eax ;®¡à â­® § ¯®¬¨­ ¥¬ 㪠§ â¥«ì ­  ¢ë¤¥«¥­­ãî ¯ ¬ïâì
  4404.                 mov dword[ebx], SSF_CREATE_FILE
  4405.                 mov dword[ebx+4], 0
  4406.                 mov dword[ebx+8], 0
  4407.                 mov [ebx+12], ecx
  4408.                 mov  byte[ebx+20], 0
  4409.                 push dword[f_name]
  4410.                 pop dword[ebx+21]
  4411.                 mcall SF_FILE
  4412.  
  4413.                 mov ted_err_save,al
  4414.  
  4415.                 or eax,eax
  4416.                 jz .no_msg
  4417.                 cmp ax,10
  4418.                 jl .zifra_0_9
  4419.                         mov al,'?'
  4420.                         sub ax,48
  4421.                 .zifra_0_9:
  4422.                 add ax,48
  4423.                 cmp ted_fun_save_err,0
  4424.                 je @f
  4425.                 call ted_fun_save_err
  4426.                 jmp @f
  4427.                 .no_msg:
  4428.                 m2m ted_tim_ls,ted_tim_ch
  4429.         @@:
  4430.  
  4431.         pop ecx ;§ ¯¨á뢠¥¬ 㪠§ â¥«ì ­  ¢ë¤¥«¥­­ãî ¯ ¬ïâì
  4432.         invoke mem.free,ecx
  4433.         .no_save:
  4434. popad
  4435.         ret
  4436. endp
  4437.