Subversion Repositories Kolibri OS

Rev

Rev 8932 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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