0,0 → 1,4177 |
; ¬ ªà®á ¤«ï á¨á⥬®© ¡¨¡«¨®â¥ª¨ box_lib.obj |
; í«¥¬¥â TextEditor ¤«ï Kolibri OS |
; ä ©« ¯®á«¥¤¨© à § ¨§¬¥ï«áï 20.02.2016 IgorA |
; ª®¤ ¯à¨¬¥¥ GPL2 «¨æ¥§¨ï |
|
;input: |
; edi = pointer to tedit struct |
; reg = index |
;output: |
; reg = pointer to 'tex' struct |
macro ConvertIndexToPointer reg { |
imul reg,sizeof.symbol |
add reg,ted_tex |
} |
|
;--- out_reg = ted_key_words_data[ind_reg].Text[0] --- |
macro ColToIndexOffset ind_reg,out_reg { |
mov out_reg,ind_reg |
imul out_reg,sizeof.TexColViv |
add out_reg,ted_key_words_data |
} |
|
TED_PANEL_NULL equ 0 ;¥â ®âªàë⮩ ¯ ¥«¨ |
TED_PANEL_FIND equ 1 ;¯ ¥«ì ¯®¨áª |
TED_PANEL_SYNTAX equ 2 ;¯ ¥«ì ¢ë¡®à ä ©«®¢ ¯®¤á¢¥âª¨ |
TED_PANEL_WIDTH equ 150 ;è¨à¨ ¯ ¥«¨ |
|
TED_LINES_IN_NEW_FILE equ 30 ;ç¨á«® áâப ¢ ®¢®¬ ä ©«¥ |
MAX_COLOR_WORD_LEN equ 40 |
;------------------------------------------------------------------------------ |
struct TexSelect |
x0 dd ? |
y0 dd ? |
x1 dd ? |
y1 dd ? |
ends |
|
struct TexColViv |
Text rb MAX_COLOR_WORD_LEN ; á«®¢® ¤«ï ¯®¤á¢¥âª¨ |
f1 dd 0 ; á¯à ¢ª ¯® á«®¢ã |
flags db ? ; f1+4 ä« £¨ ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¢ë¤¥«¥¨¨ |
endc db ? ; f1+5 ᨬ¢®« ª®æ ¢ë¤¥«¥¨ï (¨á¯®«ì§ã¥âáï ¯à¨ flags&4) |
escc db ? ; f1+6 íªà ¨àãî騩 ᨬ¢®« (¨á¯®«ì§ã¥âáï ¯à¨ flags&4) |
color db ? ; f1+7 ®¬¥à 梥â |
ends |
|
struct symbol |
c db ? ; +0 ᨬ¢®« |
col db ? ; +1 梥â |
perv dd ? ; +2 |
next dd ? ; +6 㪠§ ⥫¨ |
tc dd ? ; +10 ¢à¥¬. ᮧ¤ ¨ï |
td dd ? ; +14 ¢à¥¬. 㤠«¥¨ï |
ends |
;------------------------------------------------------------------------------ |
|
ted_symbol_space db 32 ;ascii ª®¤ ¯à®¡¥« , ¨®£¤ ¡ë¢ ¥â 㦥 ¢ ª®¤¥ |
ted_symbol_tab db 26 ;ascii ª®¤ áâ५ª¨ ¢¯à ¢®, ¨á¯®«ì§ã¥âáï ¤«ï à¨á®¢ ¨ï â ¡ã«ï樨 ¢ ०¨¬¥ ¯®ª § ¥¢¨¤¨¬ëå ᨬ¢®«®¢ |
|
if lang eq ru |
|
txtRow db 'âப ',0 |
txtCol db ' ª',0 |
txtOtm db '⬥ë',0 |
txtBuf db 'ãä¥à:',0 |
|
else |
|
txtRow db 'Rows',0 |
txtCol db 'Cols',0 |
txtOtm db 'Undo',0 |
txtBuf db 'Buffer:',0 |
|
end if |
|
;EvChar - â ¡«¨æ ¤«ï 䨫ìâ஢ ¨ï ¤®¡ ¢«ï¥¬ëå ᨬ¢®«®¢, çâ®-¡ë ¥ ¯®¯ «¨ «¨è¨¥ § ª¨ |
align 16 |
EvChar db 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0 |
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 |
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 |
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 |
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 |
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 |
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 |
|
KM_SHIFT equ 0x00010000 |
KM_CTRL equ 0x00020000 |
KM_ALT equ 0x00040000 |
KM_NUMLOCK equ 0x00080000 |
|
; KEY CODES |
KEY_F1 equ 0x0000003B |
KEY_F2 equ 0x0000003C |
KEY_F3 equ 0x0000003D |
|
|
|
align 16 |
proc ted_init uses eax ecx edi, edit:dword |
mov edi,[edit] |
|
mov ecx,sizeof.symbol |
imul ecx,ted_max_chars |
invoke mem.alloc,ecx ;¢ë¤¥«ï¥¬ ¯ ¬ïâì |
mov ted_tex,eax |
mov ted_tex_1,eax |
add ted_tex_1,sizeof.symbol |
add eax,ecx |
mov ted_tex_end,eax |
|
stdcall ted_clear, edi,1 |
|
;------------------------------------------------- |
mov ecx,1024 ;1024 - ¤«ï ¬ áᨢ ted_arr_key_pos |
add ecx,ted_syntax_file_size |
invoke mem.alloc,ecx |
mov ted_arr_key_pos,eax |
add eax,1024 |
mov ted_syntax_file,eax |
|
stdcall ted_init_scroll_bars,edi,3 |
ret |
endp |
|
MIN_W_SCRL_ARE equ 3 ;¬¨¨¬ «ì ï ®â®¡à ¦ ¥¬ ï ®¡« áâì ¤«ï ¢¥àâ. áªà®««¨£ |
MIN_H_SCRL_ARE equ 3 ;¬¨¨¬ «ì ï ®â®¡à ¦ ¥¬ ï ®¡« áâì ¤«ï £®à¨§. áªà®««¨£ |
;input: |
; opt = 1 - ¬¥ïâì 梥â áªà®««¨£®¢, 2 - ¨§¬¥¨«¨áì à §¬¥àë ®ª , |
; 4 - ¨§¬¥¨«¨áì à §¬¥àë ¤®ªã¬¥â |
align 16 |
proc ted_init_scroll_bars, edit:dword, opt:dword |
pushad |
mov edi,[edit] |
mov esi,ted_scr_w |
mov ebx,ted_scr_h |
bt dword[opt],0 |
jae @f |
mov ecx,ted_color_wnd_work |
mov dword[esi+sb_offs_bckg_col],ecx |
mov dword[ebx+sb_offs_bckg_col],ecx |
mov ecx,ted_color_wnd_capt |
mov dword[esi+sb_offs_frnt_col],ecx |
mov dword[ebx+sb_offs_frnt_col],ecx |
mov ecx,ted_color_wnd_bord |
mov dword[esi+sb_offs_line_col],ecx |
mov dword[ebx+sb_offs_line_col],ecx |
@@: |
bt dword[opt],2 ; ¨§¬¥¨«¨áì à §¬¥àë ¤®ªã¬¥â ? |
jae .doc_resize |
call ted_get_num_lines |
cmp eax,TED_LINES_IN_NEW_FILE |
jge @f |
mov eax,TED_LINES_IN_NEW_FILE |
@@: |
mov dword[esi+sb_offs_max_area],eax |
.doc_resize: |
bt dword[opt],1 ; ¨§¬¥¨«¨áì à §¬¥àë ®ª ? |
jae .no_size |
mov edx,ted_wnd_l |
add edx,ted_rec_l |
mov word[ebx+sb_offs_start_x],dx ;¢ëáâ ¢«ï¥¬ «¥¢ë© ®âáâ㯠£®à¨§. áªà®««¨£ |
mov eax,ted_wnd_h ;calculate lines in page |
mov edx,ted_wnd_t |
add edx,eax |
mov word[ebx+sb_offs_start_y],dx ;¢ëáâ ¢«ï¥¬ ¢¥à娩 ®âáâ㯠£®à¨§. áªà®««¨£ |
sub eax,ted_rec_t |
xor edx,edx |
mov ecx,ted_rec_h |
div ecx |
cmp eax,MIN_W_SCRL_ARE |
jg @f |
mov eax,MIN_W_SCRL_ARE |
@@: |
mov dword[esi+sb_offs_cur_area],eax |
|
mov eax,ted_wnd_w ;calculate cols in page |
mov edx,ted_wnd_l ;«¥¢ë© ®âáâ㯠®ª |
add edx,eax ;¤®¡ ¢«ï¥¬ è¨à¨ã ®ª |
mov word[esi+sb_offs_start_x],dx ;¢ëáâ ¢«ï¥¬ «¥¢ë© ®âáâ㯠¢¥àâ. áªà®««¨£ |
mov edx,ted_wnd_t |
mov word[esi+sb_offs_start_y],dx ;¢ëáâ ¢«ï¥¬ ¢¥à娩 ®âáâ㯠¢¥àâ. áªà®««¨£ |
mov edx,ted_wnd_h |
mov word[esi+sb_offs_size_y],dx ;¢ëáâ ¢«ï¥¬ ¢ëá®âã ¢¥àâ. áªà®««¨£ |
sub eax,ted_rec_l |
mov word[ebx+sb_offs_size_x],ax ;¢ëáâ ¢«ï¥¬ è¨à¨ã £®à¨§. áªà®««¨£ |
xor edx,edx |
mov ecx,ted_rec_w |
div ecx |
cmp eax,MIN_H_SCRL_ARE |
jg @f |
mov eax,MIN_H_SCRL_ARE |
@@: |
dec eax |
mov dword[ebx+sb_offs_cur_area],eax ;ãáâ ¢«¨¢ ¥¬ ç¨á«® ᨬ¢®«®¢, ª®â®àë¥ ¢« §ïâ ¢ íªà ¤«ï £®à¨§. áªà®««¨£ |
.no_size: |
popad |
ret |
endp |
|
align 16 |
proc ted_delete uses edi, edit:dword |
mov edi,[edit] |
invoke mem.free,ted_tex |
invoke mem.free,ted_arr_key_pos ;ted_syntax_file |
ret |
endp |
|
|
;input: |
; eax = key kodes |
align 16 |
proc ted_key, edit:dword, table:dword, control:dword |
pushad |
mov edi,[edit] |
mov esi,ted_el_focus |
cmp dword[esi],edi |
jne .end_key_fun ;í«¥¬¥â ¥ ¢ 䮪ãᥠ¢ë室¨¬ ¨§ äãªæ¨¨ |
mov esi,dword[control] |
|
cmp ah,KEY_F1 ;[F1] |
jne @f |
stdcall ted_show_help_f1,edi |
jmp .end_key_fun |
@@: |
cmp ah,KEY_F3 ;[F3] |
jne @f |
stdcall ted_but_find_next,edi |
jmp .end_key_fun |
@@: |
|
test esi,KM_CTRL ;Ctrl+... |
jz .key_Ctrl |
; *** ¢ë§®¢ ¢¥è¨å äãªæ¨© ª®â®àë¥ âॡãîâ ®ª ®âªàëâ¨ï/á®åà ¥¨ï/¯®¨áª /... |
cmp ah,24 ;Ctrl+O |
jne @f |
cmp ted_fun_on_key_ctrl_o,0 |
je @f |
call ted_fun_on_key_ctrl_o |
@@: |
cmp ah,31 ;Ctrl+S |
jne @f |
cmp ted_fun_on_key_ctrl_s,0 |
je @f |
call ted_fun_on_key_ctrl_s |
@@: |
cmp ah,33 ;Ctrl+F |
jne @f |
cmp ted_panel_id,TED_PANEL_FIND |
je @f |
cmp ted_fun_on_key_ctrl_f,0 |
je @f |
call ted_fun_on_key_ctrl_f |
@@: |
cmp ah,49 ;Ctrl+N |
jne @f |
cmp ted_fun_on_key_ctrl_n,0 |
je @f |
call ted_fun_on_key_ctrl_n |
@@: |
; *** ¢ë§®¢ ¢ãâ२å äãªæ¨© |
cmp ah,30 ;Ctrl+A |
jne @f |
call ted_sel_all |
@@: |
cmp ah,44 ;Ctrl+Z |
jne @f |
stdcall ted_but_undo,edi |
@@: |
cmp ah,46 ;Ctrl+C |
jne @f |
stdcall ted_but_copy,edi |
@@: |
cmp ah,47 ;Ctrl+V |
jne @f |
stdcall ted_but_paste,edi |
@@: |
cmp ah,199 ;Ctrl+Home |
jne @f |
call ted_key_ctrl_home |
@@: |
cmp ah,207 ;Ctrl+End |
jne @f |
call ted_key_ctrl_end |
@@: |
jmp .end_key_fun |
.key_Ctrl: |
|
test esi,KM_SHIFT ;Shift+... |
jz .key_Shift |
cmp ah,72 ;Shift+Up |
jne @f |
call ted_sel_key_up |
@@: |
cmp ah,75 ;Shift+Left |
jne @f |
call ted_sel_key_left |
@@: |
cmp ah,77 ;Shift+Right |
jne @f |
call ted_sel_key_right |
@@: |
cmp ah,80 ;Shift+Down |
jne @f |
call ted_sel_key_down |
@@: |
;mov ted_drag_k,1 ; ç¨ ¥¬ ¢ë¤¥«¥¨¥ ®â ª« ¢¨ âãàë |
jmp .key_MoveCur |
.key_Shift: |
;------------------------------------------------- |
cmp ah,72 ;178 ;Up |
jne @f |
call ted_draw_cursor_sumb |
call ted_cur_move_up |
cmp dl,8 |
jne .no_red_0 |
call ted_scroll_set_redraw |
stdcall ted_draw,edi |
jmp @f |
.no_red_0: |
call ted_draw_main_cursor |
mov ted_drag_k,0 ;§ ª 稢 ¥¬ ¢ë¤¥«¥¨¥ ®â ª« ¢¨ âãàë |
@@: |
cmp ah,80 ;177 ;Down |
jne @f |
call ted_draw_cursor_sumb |
call ted_cur_move_down |
cmp dl,8 |
jne .no_red_1 |
call ted_scroll_set_redraw |
stdcall ted_draw,edi |
jmp @f |
.no_red_1: |
call ted_draw_main_cursor |
mov ted_drag_k,0 ;§ ª 稢 ¥¬ ¢ë¤¥«¥¨¥ ®â ª« ¢¨ âãàë |
@@: |
cmp ah,75 ;176 ;Left |
jne @f |
call ted_draw_cursor_sumb |
call ted_cur_move_left |
cmp dl,8 |
jne .no_red_2 |
call ted_scroll_set_redraw |
stdcall ted_draw,edi |
jmp @f |
.no_red_2: |
call ted_draw_main_cursor |
mov ted_drag_k,0 ;§ ª 稢 ¥¬ ¢ë¤¥«¥¨¥ ®â ª« ¢¨ âãàë |
@@: |
cmp ah,77 ;179 ;Right |
jne @f |
call ted_draw_cursor_sumb |
call ted_cur_move_right |
cmp dl,8 |
jne .no_red_3 |
call ted_scroll_set_redraw |
stdcall ted_draw,edi |
jmp @f |
.no_red_3: |
call ted_draw_main_cursor |
mov ted_drag_k,0 ;§ ª 稢 ¥¬ ¢ë¤¥«¥¨¥ ®â ª« ¢¨ âãàë |
@@: |
cmp ah,71 ;180 ;Home |
jne @f |
call ted_draw_cursor_sumb |
call ted_cur_move_x_first_char |
cmp dl,8 |
jne .no_red_4 |
call ted_scroll_set_redraw |
stdcall ted_draw,edi |
jmp @f |
.no_red_4: |
call ted_draw_main_cursor |
mov ted_drag_k,0 ;§ ª 稢 ¥¬ ¢ë¤¥«¥¨¥ ®â ª« ¢¨ âãàë |
@@: |
cmp ah,79 ;181 ;End |
jne @f |
call ted_draw_cursor_sumb |
call ted_cur_move_x_last_char |
cmp dl,8 |
jne .no_red_5 |
call ted_scroll_set_redraw |
stdcall ted_draw,edi |
jmp @f |
.no_red_5: |
call ted_draw_main_cursor |
mov ted_drag_k,0 ;§ ª 稢 ¥¬ ¢ë¤¥«¥¨¥ ®â ª« ¢¨ âãàë |
@@: |
cmp ah,73 ;184 ;PageUp |
jne @f |
call ted_cur_move_page_up |
cmp dl,0 |
je @f |
call ted_scroll_set_redraw |
stdcall ted_draw,edi |
@@: |
cmp ah,81 ;183 ;PageDown |
jne @f |
call ted_cur_move_page_down |
cmp dl,0 |
je @f |
call ted_scroll_set_redraw |
stdcall ted_draw,edi |
mov ted_drag_k,0 ;§ ª 稢 ¥¬ ¢ë¤¥«¥¨¥ ®â ª« ¢¨ âãàë |
@@: |
;------------------------------------------------- |
.key_MoveCur: |
|
;¨¦¥ ¯à®¯ã᪠îâáï á«ã¦¥¡ë¥ ª« ¢¨è¨, ª®â®àë¥ ¬®£ãâ ¤ ¢ âì ¬ãá®àë¥ á¨¬¢®«ë ¢ ®ª® |
cmp ah,42 ;[L Shift] ª®£¤ ¦ â ¡¥§ ¤àã£¨å ª®¯®ª |
je .end_key_fun |
cmp ah,54 ;[R Shift] ª®£¤ ¦ â ¡¥§ ¤àã£¨å ª®¯®ª |
je .end_key_fun |
cmp ah,58 ;[Caps Lock] |
je .end_key_fun |
cmp ah,69 ;[Pause Break] |
je .end_key_fun |
cmp ah,120 ;[Fn] |
je .end_key_fun |
cmp ah,0x80 ;if key up |
ja .end_key_fun |
|
cmp dword[table],0 |
je @f |
stdcall KeyConvertToASCII, dword[table] |
@@: |
|
;mov ted_drag_k,0 ;§ ª 稢 ¥¬ ¢ë¤¥«¥¨¥ ®â ª« ¢¨ âãàë |
|
lea edx,[EvChar] ;¡¥à¥¬ ¤à¥á â ¡«¨æë á ¤®¯ãá⨬묨 ᨬ¢®« ¬¨ |
add dl,ah |
jae @f |
add edx,0x100 ;¥á«¨ ¡ë«® ¯¥à¥¯®«¥¨¥ ¯à¨ ¤®¡ ¢«¥¨¨ ª®¤ ᨬ¢®« |
@@: |
cmp byte[edx],1 |
jne @f |
mov ted_key_new,ah |
call ted_set_undo |
mov edx,ted_opt_ed_change_time+ted_opt_ed_move_cursor |
stdcall ted_sel_text_del,edx |
cmp al,1 |
jne .del |
mov edx,ted_opt_ed_move_cursor |
.del: |
cmp ted_cur_ins,1 |
je .no_ins_mod |
stdcall ted_text_del,edi,ted_opt_ed_change_time |
mov edx,ted_opt_ed_move_cursor |
.no_ins_mod: |
mov ecx,edi |
add ecx,ted_offs_key_new |
stdcall ted_text_add,edi,ecx,1,edx ;¤®¡ ¢«ï¥¬ ᨬ¢®« ¢¢¥¤¥ë© á ª« ¢¨ âãàë |
cmp ted_key_new,13 |
jne .dr_m_win |
;¥á«¨ ¢áâ ¢¨«¨ ᨬ¢®« ®¢®© áâப¨ |
mov ecx,ted_scr_w |
inc dword[ecx+sb_offs_max_area] ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¢¥à⨪ «ì®£® áªà®««¨£ |
mov edx,ted_cur_y |
cmp edx,[ecx+sb_offs_cur_area] |
jl .no_change |
dec ted_cur_y ;ªãàá®à ®áâ ¢«ï¥¬ ¬¥á⥠|
inc dword[ecx+sb_offs_position] ;ᤢ¨£ ¥¬ ¯®«§ã®ª |
.no_change: |
stdcall ted_draw,edi |
jmp .dr_cur_l |
.dr_m_win: |
stdcall ted_draw_cur_line,edi |
.dr_cur_l: |
cmp ted_fun_draw_panel_buttons,0 |
je @f |
call ted_fun_draw_panel_buttons |
@@: |
|
cmp ah,8 ;[<-] |
jne @f |
call ted_set_undo |
stdcall ted_sel_text_del,ted_opt_ed_change_time |
cmp al,1 |
je .del_one_b |
stdcall ted_text_del,edi,ted_opt_ed_change_time+ted_opt_ed_move_cursor |
.del_one_b: |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 |
je .end_key_fun |
call ted_fun_draw_panel_buttons |
jmp .end_key_fun |
align 4 |
@@: |
|
cmp ah,182 ;Delete |
jne @f |
call ted_set_undo |
stdcall ted_sel_text_del,ted_opt_ed_change_time |
cmp al,1 |
je .del_one_d |
stdcall ted_text_del,edi,ted_opt_ed_change_time |
.del_one_d: |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 |
je .end_key_fun |
call ted_fun_draw_panel_buttons |
jmp .end_key_fun |
@@: |
|
cmp ah,185 ;Ins |
jne @f |
call ted_draw_cursor_sumb |
xor ted_cur_ins,1 |
call ted_draw_main_cursor |
@@: |
|
.end_key_fun: |
popad |
ret |
endp |
|
;output: |
; al = 1 - can save |
align 16 |
proc ted_can_save uses ecx edi, edit:dword |
mov edi,[edit] |
|
mov ecx,ted_tim_ch |
sub ecx,ted_tim_undo |
mov al,1 |
cmp ted_tim_ls,ecx |
jne @f |
dec al |
@@: |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
;output: |
; al = 1 - selected |
align 16 |
proc ted_is_select uses ebx |
xor al,al |
cmp ted_drag_m,1 |
je @f |
mov al,1 |
mov ebx,ted_sel_x0 |
cmp ebx,ted_sel_x1 |
jne @f |
mov ebx,ted_sel_y0 |
cmp ebx,ted_sel_y1 |
jne @f |
xor al,al |
@@: |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
proc ted_sel_normalize uses ecx esi |
push edi |
mov esi,edi |
add esi,ted_offs_sel |
add edi,ted_offs_seln |
mov ecx,sizeof.TexSelect |
rep movsb |
pop edi |
|
jmp @f |
.swp_f: |
mov ecx,ted_seln_x0 |
m2m ted_seln_x0,ted_seln_x1 |
mov ted_seln_x1,ecx |
|
mov ecx,ted_seln_y0 |
cmp ecx,ted_seln_y1 ;(sel_y0>sel_y1) |
jle .end_f |
m2m ted_seln_y0,ted_seln_y1 |
mov ted_seln_y1,ecx |
|
jmp .end_f |
align 4 |
@@: |
|
mov ecx,ted_seln_y0 |
cmp ecx,ted_seln_y1 ;(sel_y0>sel_y1) |
jg .swp_f |
|
cmp ecx,ted_seln_y1 ;(sel_y0==sel_y1) |
jne .end_f |
mov ecx,ted_seln_x0 |
cmp ecx,ted_seln_x1 ;(sel_x0>sel_x1) |
jg .swp_f |
|
.end_f: |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
;description: |
; ãªæ¨ï ¢ë§ë¢ ¥¬ ï ¯à¨ ç «¥ ¢ë¤¥«¥¨ï |
align 16 |
proc ted_sel_start uses eax ecx |
mov eax,ted_scr_h |
mov ecx,ted_cur_x |
add ecx,dword[eax+sb_offs_position] |
mov ted_sel_x0,ecx |
mov ted_sel_x1,ecx |
|
mov eax,ted_scr_w |
mov ecx,ted_cur_y |
add ecx,dword[eax+sb_offs_position] |
mov ted_sel_y0,ecx |
mov ted_sel_y1,ecx |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
;description: |
; ãªæ¨ï ¢ë§ë¢ ¥¬ ï ¯à¨ ¯¥à¥¬¥é¥¨¨ ¢ë¤¥«¥¨ï |
align 16 |
proc ted_sel_move |
push eax ecx |
mov ecx,ted_cur_x |
mov eax,ted_scr_h |
add ecx,dword[eax+sb_offs_position] |
mov ted_sel_x1,ecx |
|
mov eax,ted_scr_w |
mov ecx,ted_cur_y |
add ecx,dword[eax+sb_offs_position] |
mov ted_sel_y1,ecx |
pop ecx eax |
cmp ted_fun_draw_panel_buttons,0 ;redraw toolbar (need to button Copy) |
je @f |
call ted_fun_draw_panel_buttons |
@@: |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
;description: |
; ãªæ¨ï ¢ë§ë¢ ¥¬ ï ¯à¨ ¢ë¤¥«¥¨¨ ¢á¥£® ¤®ªã¬¥â |
align 16 |
proc ted_sel_all |
push eax |
xor eax,eax |
mov ted_sel_x0,eax |
mov ted_sel_y0,eax |
|
mov ted_sel_x1,eax ;??? |
call ted_get_num_lines |
mov ted_sel_y1,eax |
pop eax |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 ;redraw toolbar (need to button Copy) |
je @f |
call ted_fun_draw_panel_buttons |
@@: |
ret |
endp |
|
;input: |
; cl_al_mem = 1 - clear all memory |
align 16 |
proc ted_clear uses ecx edi, edit:dword, cl_al_mem:dword |
mov edi,[edit] |
|
mov ted_cur_x,0 |
mov ted_cur_y,0 |
mov ted_tim_ch,0 |
mov ted_tim_ls,0 |
mov ted_tim_co,0 |
mov ted_tim_undo,0 |
mov ted_help_id,-1 |
mov ecx,sizeof.symbol |
shl ecx,1 |
add ecx,ted_tex |
mov ted_ptr_free_symb,ecx |
|
mov ecx,ted_scr_w |
mov dword[ecx+sb_offs_position],0 |
mov dword[ecx+sb_offs_max_area],100 ;ç¨á«® áâப ¢¨¤¨¬ëå ¢ ®¢®¬ ¤®ªã¬¥â¥ |
mov dword[ecx+sb_offs_redraw],1 |
mov ecx,ted_scr_h |
mov dword[ecx+sb_offs_position],0 |
mov dword[ecx+sb_offs_max_area],100 ;ç¨á«® ᨬ¢®«®¢ ¢¨¤¨¬ëå ¢ ®¢®¬ ¤®ªã¬¥â¥ |
|
mov ted_sel_x0,0 |
mov ted_sel_y0,0 |
mov ted_sel_x1,0 |
mov ted_sel_y1,0 |
|
cmp dword[cl_al_mem],0 |
je .exit |
|
push edx |
mov ecx,sizeof.symbol |
imul ecx,ted_max_chars |
mov edx,ted_tex |
@@: |
mov byte [edx],0 |
inc edx |
loop @b |
mov edx,ted_tex |
mov dword [edx+6],1 |
pop edx |
|
.exit: |
ret |
endp |
|
|
align 16 |
proc ted_init_syntax_file, edit:dword |
pushad |
mov edi,[edit] |
|
mov ecx,0x100 |
mov edx,ted_arr_key_pos |
@@: |
mov dword[edx],-1 |
add edx,4 |
loop @b |
|
;init: ted_colors_text_count, ted_key_words_count, ... |
mov ted_colors_text_count,1 |
mov ted_key_words_count,0 |
mov ted_help_text_f1,0 |
mov ted_help_id,-1 ;¨¤¥â¨ä¨ª â®à á«®¢ ¤«ï á¯à ¢ª¨ |
|
mov eax,edi ;á®åà 塞 § 票¥ edi |
mov esi,ted_syntax_file |
add edi,ted_offs_count_colors |
mov ecx,9*4 |
rep movsb |
mov edi,eax ;¢®áâ ¢«¨¢ ¥¬ § 票¥ edi |
|
mov eax,ted_syntax_file |
add eax,32 |
mov ted_text_colors,eax |
|
mov eax,ted_colors_text_count ;init: count_colors_text (offset to key words) |
add eax,8 |
shl eax,2 |
add eax,ted_syntax_file |
mov ted_key_words_data,eax |
|
mov ecx,ted_key_words_count ;init: ted_arr_key_pos (first key positions) |
xor eax,eax |
@@: |
ColToIndexOffset eax,edx |
xor ebx,ebx |
mov bl,byte[edx] |
shl bx,2 |
mov esi,ted_arr_key_pos |
add esi,ebx |
cmp dword[esi],-1 |
jne .no_ch_key |
mov dword[esi],eax |
.no_ch_key: |
inc eax |
loop @b |
|
;init: ted_help_text_f1 |
mov ecx,ted_key_words_count ;ª®«¨ç¥á⢮ ª«î祢ëå á«®¢ |
imul ecx,sizeof.TexColViv ;à §¬¥à áâàãªâãàë á 1-¬ ª«. á«. |
add ecx,ted_key_words_data ; ç «® ä ©« á ª«. á«. |
mov ted_help_text_f1,ecx ;¬¥âª ¢ ¯ ¬ïâ¨, £¤¥ 稥âáï ⥪áâ á® á¯à ¢ª®© |
|
stdcall ted_init_scroll_bars,edi,1 ;¬¥ï¥¬ 梥â áªà®««¨£®¢ |
.no_colors: |
popad |
ret |
endp |
|
;input: |
; ebx = file size |
; edi = pointer to tedit struct |
;description: |
; ãªæ¨ï ¢ë§ë¢ ¥âáï ¯à¨ ®âªàë⨨ ä ©« |
align 16 |
proc ted_on_open_file |
push eax ;destination |
push ecx ;for cycle |
push edx ;source |
push esi |
|
stdcall ted_clear,edi,0 ;ç¨á⨬ ¥ ¢áî ¯ ¬ïâì, ¯®â®¬ã çâ® ¨¦¥ ¡ã¤¥¬ ¥¥ § ¯®«ïâì ®¢ë¬¨ ¤ 묨 |
|
;ª®£¤ ᨬ¢®« § ¢¥à襨ï áâப¨ ⮫쪮 10 (¡¥§ 13) |
mov edx,ted_tex |
mov ecx,ebx |
@@: |
cmp byte[edx],13 |
je .no_10 ;¥á«¨ ©¤¥ ᨬ¢®« 13, â® 10-¥ ¨£®à¨à㥬 |
inc edx |
loop @b |
mov edx,ted_tex |
mov ecx,ebx |
.s_10: |
cmp byte[edx],10 |
jne @f |
mov byte[edx],13 ;¬¥ï¥¬ 10-© ᨬ¢®« ª®æ áâப¨ |
@@: |
inc edx |
loop .s_10 |
.no_10: |
|
;¯¥à¥¢®¤¨¬ ®âªàëâë© ä ©« ¢ãâàì í«¥¬¥â t_edit |
mov eax,ebx |
mov ecx,ebx |
add eax,2 |
ConvertIndexToPointer eax |
mov edx,ted_tex |
add edx,ebx |
push ebx |
@@: |
mov ebx,[edx] |
mov byte [eax],bl |
mov dword [eax+2],ecx |
inc dword [eax+2] |
mov dword [eax+6],ecx |
add dword [eax+6],3 |
;mov byte[eax+1],0 ;col=0 |
mov dword [eax+10],-1 ;tc=-1 |
mov dword [eax+14],0 ;td=0 |
|
cmp ecx,0 |
je @f |
dec ecx |
dec edx |
sub eax,sizeof.symbol |
jmp @b |
@@: |
pop ebx |
add eax,2 |
mov dword [eax],0 ; first sumbol 'perv=0' |
|
mov edx,ted_tex ; áâனª¨ ç «ì®£® á«ã¦¥¡®£® ᨬ¢®« |
; begining sumbol 'perv=0' 'next=2' |
mov dword [edx+2],0 |
mov dword [edx+6],2 |
|
add edx,sizeof.symbol ; áâனª¨ ª®¥ç®£® á«ã¦¥¡®£® ᨬ¢®« |
mov dword [edx+6],0 ; last sumbol 'next=0' |
mov dword [edx+2],ebx ; last sumbol 'perv=last' |
inc dword [edx+2] |
mov dword [edx+10],0 ; áâ ¢¨¬ ¢à¥¬ï ᮧ¤ ¨ï à ¢®¥ 0, çâ® ¡ë ᨬ¢®« ¯à ¢¨«ì® ®¡à ¡ âë¢ «áï ¯à¨ ®âªàë⨨ ä ©«®¢ ¡®«ìè¨å 28 ¡ ©â |
|
mov edx,ebx |
inc edx ;2 = rezerv sumbols |
imul edx,sizeof.symbol |
add edx,ted_tex |
mov dword [edx+6],1 ; last sumbol 'next=1' |
|
@@: ;clear memory, need if before was open big file |
add edx,sizeof.symbol |
cmp edx,ted_tex_end |
jge @f |
mov dword[edx+10],0 |
mov dword[edx+14],0 |
jmp @b |
@@: |
|
call ted_get_num_lines |
cmp eax,TED_LINES_IN_NEW_FILE |
jge @f |
mov eax,TED_LINES_IN_NEW_FILE |
@@: |
mov esi,ted_scr_w |
mov dword[esi+sb_offs_max_area],eax |
pop esi edx ecx eax |
|
call ted_text_colored |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 |
je @f |
call ted_fun_draw_panel_buttons |
@@: |
ret |
endp |
|
;input: |
; edx = pointer to symbol struct |
; edi = pointer to tedit struct |
;output: |
; edx = pointer to 'perv' visible symbol struct |
align 16 |
ted_iterat_perv: |
cmp ted_tim_undo,0 |
je .else |
push ebx |
@@: |
mov edx,dword[edx+2] |
cmp edx,0 |
je @f |
imul edx,sizeof.symbol |
add edx,ted_tex |
call ted_symbol_not_vis |
cmp bl,1 |
je @b |
cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®« á ª®¤®¬ 10 |
je @b |
pop ebx |
ret |
@@: |
mov edx,ted_tex ; ç «® ä ©« |
pop ebx |
ret |
.else: |
mov edx,dword[edx+2] |
cmp edx,0 |
je @f |
imul edx,sizeof.symbol |
add edx,ted_tex |
cmp dword [edx+14],0 |
jne .else |
cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®« á ª®¤®¬ 10 |
je .else |
ret |
@@: |
mov edx,ted_tex ; ç «® ä ©« |
ret |
|
|
;input: |
; edx = pointer to symbol struct |
; edi = pointer to tedit struct |
;output: |
; edx = pointer to 'next' visible symbol struct |
align 16 |
ted_iterat_next: |
cmp ted_tim_undo,0 |
je .else |
push ebx |
@@: |
mov edx,dword[edx+6] |
cmp edx,1 |
jle @f |
imul edx,sizeof.symbol |
add edx,ted_tex |
|
call ted_symbol_not_vis |
cmp bl,1 |
je @b |
cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®« á ª®¤®¬ 10 |
je @b |
pop ebx |
ret |
@@: |
mov edx,ted_tex_1 ;ª®¥æ ä ©« |
pop ebx |
ret |
.else: |
mov edx,dword[edx+6] |
cmp edx,1 |
jle @f |
imul edx,sizeof.symbol |
add edx,ted_tex |
|
cmp dword [edx+14],0 |
jne .else |
cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®« á ª®¤®¬ 10 |
je .else |
ret |
@@: |
mov edx,ted_tex_1 ;ª®¥æ ä ©« |
ret |
|
;input: |
; bl = symbol end of select |
; bh = íªà ¨àãî騩 ᨬ¢®« (= 0 ¥á«¨ ¥â ¯à®¢¥àª¨ ¨å) |
; edx = pointer to symbol struct |
; edi = pointer to tedit struct |
;description: |
; ©â¨ á«¥¤ãîéãî ¯®§¨æ¨î 㪠§ ®£® ᨬ¢®« |
align 16 |
ted_iterat_next_pos_char: |
push ax |
mov al,1 ;¯à¥¤ë¤ã騩 ᨬ¢®«, á«ã¦¨â ¤«ï áà ¢¥¨ï á ᨬ¢®«®¬ bh |
@@: |
cmp bl,byte[edx] |
je .found |
.no_found: |
cmp edx,ted_tex_1 |
jle @f |
mov al,byte[edx] |
call ted_iterat_next |
jmp @b |
.found: |
cmp bh,al |
je .no_found |
@@: |
call ted_iterat_next |
pop ax |
ret |
|
;input: |
; edx = pointer to symbol struct |
; edi = pointer to tedit struct |
align 16 |
ted_iterat_perv_color_tag: |
@@: |
cmp byte[edx+1],0 |
jne @f |
call ted_iterat_perv |
cmp edx,ted_tex_1 |
jle @f |
jmp @b |
align 4 |
@@: |
ret |
|
;input: |
; edx = pointer to symbol struct |
; edi = pointer to tedit struct |
align 16 |
ted_iterat_next_color_tag: |
@@: |
call ted_iterat_next |
cmp byte[edx+1],0 |
jne @f |
cmp edx,ted_tex_1 |
jle @f |
jmp @b |
align 4 |
@@: |
ret |
|
;input: |
; edx = pointer to symbol struct |
; edi = pointer to tedit struct |
;output: |
; bl = 1 if sumbol not visible |
; (tex[i].td+ted_tim_undo<=ted_tim_ch && tex[i].td) || (tex[i].tc>ted_tim_ch-ted_tim_undo) |
align 16 |
ted_symbol_not_vis: |
push eax |
|
xor bl,bl |
|
cmp dword [edx+14],0 |
je @f |
mov eax,[edx+14] ;eax=tex[i].td |
add eax,ted_tim_undo |
cmp eax,ted_tim_ch |
jg @f |
mov bl,1 |
pop eax |
ret |
@@: |
|
mov eax,ted_tim_ch |
sub eax,ted_tim_undo |
cmp [edx+10],eax |
jle @f |
or bl,1 |
@@: |
|
pop eax |
ret |
|
;input: |
; text:dword - pointer to text string |
; add_opt:dword - options |
align 16 |
proc ted_text_add, edit:dword, text:dword, t_len:dword, add_opt:dword |
locals |
new_spc dd ? ;count new spaces |
new_lin dd ? ;count new lines |
endl |
;¨á¯®«ì§®¢ ¨¥ ॣ¨áâ஢ ¢ãâਠäãªæ¨¨: |
;eax - ¯®§¨æ¨ï ¤«ï ¢áâ ¢ª¨ ⥪áâ |
;ebx - ¤«ï ¢à¥¬¥ëå 㦤, ¤«¨ ¢áâ ¢«ï¥¬®£® ⥪áâ |
;ecx - ¤«ï ¢à¥¬¥ëå 㦤 |
;edx - 㪠§ ⥫ì áâàãªâãàã ᨬ¢®« |
pushad |
cmp dword[t_len],1 ;¯à®¢¥à塞 ¤«¨ã ¤®¡¢«ï¥¬®£® ⥪áâ |
jl .no_add ;ª®£¤ ¤«¨ <1 ¯àë£ ¥¬ ª®¥æ äãªæ¨¨, ¢® ¨§¡¥¦ ¨¥ £«îª®¢ |
|
mov edi,[edit] |
mov esi,dword[text] |
|
call ted_get_pos_by_cursor |
call ted_get_text_perv_pos |
call ted_get_text_arr_index ;eax=po_t |
|
mov dword[new_spc],0 |
cmp ted_gp_opt,2 |
je @f |
push eax ;c_sp=cur[cn].x+Scroller->XPos-StrLen(cur[cn].y+Scroller->YPos); |
mov eax,ted_scr_h |
mov eax,dword[eax+sb_offs_position] |
add eax,ted_cur_x ;eax - ®¬¥à ᨬ¢®« |
mov dword[new_spc],eax |
|
mov eax,ted_scr_w |
mov eax,dword[eax+sb_offs_position] |
add eax,ted_cur_y ;eax - ®¬¥à áâப¨ |
call ted_strlen ;ebx = line len |
sub dword[new_spc],ebx ;®â ¯®§¨æ¨¨ ªãàá®à ®â¨¬ ¥¬ ¤«¨ã áâப¨, 㧠¥¬ ª®««¨ç¥á⢮ ¤®¡ ¢«ï¥¬ëå ¯à®¡¥«®¢ |
pop eax |
@@: |
|
mov ebx,dword[t_len] |
|
mov dword[new_lin],0 |
cmp ted_gp_opt,0 |
jne @f |
push eax |
mov eax,ted_scr_w |
mov eax,dword[eax+sb_offs_position] |
add eax,ted_cur_y |
inc eax |
mov dword[new_lin],eax |
|
call ted_get_num_lines |
sub dword[new_lin],eax |
;㢥«¨ç¨¢ ¥¬ «¨¨¨ ¢ áªà®««¨£¥ ç¨á«® ¤®¡ ¢«¥ëå ¤®¯®«¨â¥«ìëå áâப |
mov ecx,ted_scr_w |
add dword[ecx+sb_offs_max_area],eax ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¢¥à⨪ «ì®£® áªà®««¨£ |
pop eax |
@@: |
|
mov edx,ted_ptr_free_symb |
.beg_cycle: ;for(i=...;i<ted_max_chars;i++) |
cmp dword [edx+10],0 ;if(!tex[i].tc && !tex[i].td) |
jne .u1f |
cmp dword [edx+14],0 |
jne .u1f |
test dword[add_opt],ted_opt_ed_change_time ;if(n_tim) ted_tim_ch++; |
jz .no_tim |
inc ted_tim_ch |
.no_tim: |
test dword[add_opt],ted_opt_ed_move_cursor |
jz .no_cur_mov |
cmp dword[new_lin],0 ;¥á«¨ ¥áâì ¤®¡ ¢®çë¥ áâப¨, â® ªãàá®à ¥é¥ ¥ ¤¢¨£ ¥¬ |
jg .no_cur_mov |
cmp dword[new_spc],0 ;¥á«¨ ¥â ¤®¡ ¢®çëå ¯à®¡¥«®¢, â® ªãàá®à ⮦¥ ¥ ¤¢¨£ ¥¬ |
jg .no_cur_mov |
inc ted_cur_x ;move cursor |
;call ted_go_to_pos |
cmp byte [esi],13 |
jne .no_cur_mov |
mov ted_cur_x,0 |
inc ted_cur_y |
;㢥«¨ç¨¢ ¥¬ «¨¨¨ ¢ áªà®««¨£¥ ç¨á«® ¤®¡ ¢«¥ëå ¢ ⥪á⥠áâப |
mov ecx,ted_scr_w |
inc dword[ecx+sb_offs_max_area] ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¢¥à⨪ «ì®£® áªà®««¨£ |
.no_cur_mov: |
|
; *** ¢áâ ¢ª ⥪ã饣® ᨬ¢®« ¨§ áâப¨ *** |
mov ecx,ted_opt_ed_change_time |
not ecx |
and dword[add_opt],ecx ;n_tim=false; |
|
mov cl,byte [esi] ;tex[i].c=ta[ns]; |
mov byte [edx],cl |
m2m dword [edx+10],ted_tim_ch ;tex[i].tc=ted_tim_ch; |
mov [edx+2],eax ;tex[i].perv=po_t; |
|
mov ecx,eax |
imul ecx,sizeof.symbol |
add ecx,ted_tex ; *** ecx = tex[po_t] *** |
add ecx,6 ; *** ecx = tex[po_t].next *** |
m2m dword [edx+6],dword [ecx] ;tex[i].next=tex[po_t].next; |
|
call ted_get_text_arr_index ;*** eax = i *** |
mov [ecx],eax ;tex[po_t].next=i; // áá뫪¨ ¯¥à¥ ¯à ¢«ï¥¬ |
mov ecx,[edx+6] ; *** ecx = tex[i].next *** |
imul ecx,sizeof.symbol |
add ecx,ted_tex ; *** ecx = tex[tex[i].next] *** |
mov [ecx+2],eax ;tex[tex[i].next].perv=i; |
|
; *** ¢áâ ¢ª ¤®¯®«¨â¥«ìëå áâப ¨ ¯à®¡¥«®¢ |
; ¥á«¨ ªãàá®à ¢® ¢à¥¬ï ¢áâ ¢ª¨ 室¨«áï § ⥪á⮬ *** |
cmp dword[new_lin],0 ;add lines or text |
jle .spc_add |
dec dword[new_lin] |
mov byte [edx],13 |
jmp .u1f |
.spc_add: |
cmp dword[new_spc],0 ;add spaces or text |
jle .tex_add |
dec dword[new_spc] |
mov byte [edx],' ' |
jmp .u1f |
.tex_add: |
inc esi ; ¯¥à¥å®¤ ª á«¥¤ãî饬㠢áâ ¢«ï¥¬®¬ã ᨬ¢®«ã |
dec ebx |
.u1f: |
add edx,sizeof.symbol |
cmp edx,ted_tex_end |
jge @f ;out of memory |
cmp ebx,0 |
jne .beg_cycle |
mov ted_ptr_free_symb,edx ;¬¥ï¥¬ 㪠§ ⥫ì ᢮¡®¤ë© ᨬ¢®«, ¤«ï ¡®«¥¥ ¡ëáâண® ¯®¨áª ¯ ¬ï⨠|
jmp .add_all |
@@: |
cmp ted_increase_size,0 |
je .add_all |
call ted_memory_increase |
cmp ebx,0 |
jne .beg_cycle |
.add_all: ;¢á¥ ᨬ¢®«ë ¤®¡ ¢«¥ë |
|
call ted_text_colored |
.no_add: |
popad |
ret |
endp |
|
;input: |
; edx = pointer to sumbol, when insert |
; edi = pointer to tedit struct |
;output: |
; edx = new pointer to sumbol, when insert |
align 16 |
proc ted_memory_increase |
cmp ted_increase_size,0 |
je @f |
push eax ebx ecx |
mov ecx,ted_increase_size |
add ecx,ted_max_chars |
mov ted_max_chars,ecx |
imul ecx,sizeof.symbol |
invoke mem.realloc, ted_tex,ecx |
mov ebx,ted_tex |
mov ted_tex,eax |
mov ted_tex_1,eax |
add ted_tex_1,sizeof.symbol |
sub edx,ebx |
add edx,eax |
mov ted_ptr_free_symb,edx |
add eax,ecx |
mov ted_tex_end,eax |
pop ecx ebx eax |
@@: |
ret |
endp |
|
;input: |
; ecx = position to free insert cell |
; edx = pointer to sumbol, when insert |
; esi = added symbol |
; edi = pointer to tedit struct |
;output: |
; ecx = position to inserted cell |
align 16 |
ted_char_add: |
.loop_b: |
cmp ecx,ted_tex_end |
jge .end_f |
cmp dword[ecx+10],0 |
jne @f |
cmp dword[ecx+14],0 |
je .loop_e |
@@: |
add ecx,sizeof.symbol |
jmp .loop_b |
align 4 |
.loop_e: |
|
push eax ebx |
mov eax,ted_tim_ch |
mov dword[ecx+10],eax |
mov ax,si |
mov byte[ecx],al |
|
call ted_get_text_arr_index ; *** eax=pos *** |
mov [ecx+2],eax ;tex[i].perv=pos; |
m2m dword[ecx+6],dword[edx+6] ;tex[i].next=tex[pos].next; |
|
push edx |
mov edx,ecx |
call ted_get_text_arr_index ; *** eax=i *** |
pop edx |
|
mov [edx+6],eax ;tex[pos].next=i; // áá뫪¨ ¯¥à¥ ¯à ¢«ï¥¬ |
mov ebx,[ecx+6] |
ConvertIndexToPointer ebx |
mov [ebx+2],eax ;tex[tex[i].next].perv=i; // ... |
pop ebx eax |
|
.end_f: |
call ted_text_colored |
ret |
|
;description: |
; äãªæ¨ï ¤«ï á¬¥ë ª®¤¨à®¢®ª |
;input: |
; table - â ¡«¨æ ¤«ï ¯¥à¥ª®¤¨à®¢ª¨ |
align 16 |
proc ted_but_convert_by_table uses eax edx edi esi, edit:dword, table:dword |
mov edi,[edit] |
mov esi,dword[table] |
mov edx,ted_tex |
.cycle: |
;¯¥à¥å®¤¨¬ á«¥¤ãî騩 ᨬ¢®« |
mov edx,dword[edx+6] |
cmp edx,1 |
jle .end_text |
imul edx,sizeof.symbol |
add edx,ted_tex |
|
movzx eax,byte[edx] |
add eax,esi |
mov al,byte[eax] |
cmp al,0 |
je @f |
mov byte[edx],al ;¬¥ï¥¬ ª®¤¨à®¢ªã ᨬ¢®« |
@@: |
jmp .cycle |
.end_text: |
;cmp esi,0 |
;je @f |
stdcall ted_draw,edi ;®¡®¢«ï¥¬ ®ª® |
;@@: |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
;output: |
; esi = count converted symbols |
;description: |
; ãªæ¨ï ¨á¯®«ì§ã¥âáï ¤«ï ᬥë ॣ¨áâà ¢ë¡à ëå ᨬ¢®«®¢ |
align 16 |
proc ted_convert_sel_text, conv_fun:dword |
locals |
conv_cou dd ? |
endl |
mov dword[conv_cou],0 |
pushad |
|
call ted_is_select |
cmp al,0 |
je .end_f |
call ted_set_undo |
call ted_sel_normalize |
|
mov esi,ted_seln_x0 |
mov ecx,ted_seln_y0 |
call ted_get_pos_by_coords |
mov eax,edx |
mov esi,ted_seln_x1 |
mov ecx,ted_seln_y1 |
call ted_get_pos_by_coords |
;call ted_get_text_perv_pos |
mov ebx,edx |
|
cmp eax,ebx |
je .end_f |
|
inc ted_tim_ch |
mov edx,eax ;i=p0; |
mov ecx,ted_ptr_free_symb |
@@: |
push eax |
mov al,byte[edx] |
call dword[conv_fun] ;¯à¥®¡à §®¢ ¨¥ ᨬ¢®« |
mov esi,eax |
cmp byte[edx],al |
pop eax |
je .no_change |
m2m dword [edx+14],ted_tim_ch |
call ted_char_add ;b_pos=ted_char_add(tex[i].c^32,i,false,b_pos); |
call ted_get_text_next_pos ;go to added symbol |
inc dword[conv_cou] |
.no_change: |
|
call ted_iterat_next |
cmp edx,ted_tex |
je @f |
cmp edx,ebx |
je @f |
|
jmp @b |
@@: |
cmp dword[conv_cou],0 |
jne @f |
dec ted_tim_ch |
@@: |
.end_f: |
popad |
mov esi,dword[conv_cou] |
ret |
endp |
|
;output: |
; bl = 0 - no delete |
; bl = 1 - delete |
align 16 |
proc ted_text_del uses ecx edx edi, edit:dword, del_opt:dword |
mov edi,[edit] |
mov ebx,dword[del_opt] |
|
xor cl,cl |
test ebx,ted_opt_ed_move_cursor |
jz @f |
call ted_cur_move_left |
cmp dl,0 |
je .no_del |
@@: |
call ted_get_pos_by_cursor |
cmp ted_gp_opt,1 |
je .no_del |
test ebx,ted_opt_ed_change_time |
jz @f |
inc ted_tim_ch |
@@: |
m2m dword[edx+14], ted_tim_ch |
mov cl,1 |
.no_del: |
mov bl,cl |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
;output: |
; al = 1 if delete |
;description: |
; ãªæ¨ï 㤠«ï¥â ¢ë¤¥«¥ë© ⥪áâ |
align 16 |
proc ted_sel_text_del uses ebx ecx edx esi, del_opt:dword |
call ted_is_select |
cmp al,0 |
je .end_f |
call ted_sel_normalize |
|
mov esi,ted_seln_x1 |
mov ecx,ted_seln_y1 |
call ted_get_pos_by_coords |
mov ebx,edx |
|
mov esi,ted_seln_x0 |
mov ecx,ted_seln_y0 |
call ted_get_pos_by_coords |
|
test dword[del_opt],ted_opt_ed_change_time |
jz @f |
inc ted_tim_ch |
@@: |
cmp edx,ted_tex |
je @f |
cmp edx,ebx ;if(i==te)break; |
je @f |
m2m dword[edx+14],ted_tim_ch |
mov esi,ted_opt_ed_change_time |
not esi |
and dword[del_opt],esi ;n_tim=false; |
call ted_iterat_next |
jmp @b |
align 4 |
@@: |
test dword[del_opt],ted_opt_ed_change_time |
jz @f |
dec ted_tim_ch |
xor al,al |
@@: |
test dword[del_opt],ted_opt_ed_change_time |
jnz @f |
mov ecx,ted_seln_x0 |
mov edx,ted_seln_y0 |
call ted_go_to_pos |
mov ted_sel_x0,0 |
mov ted_sel_y0,0 |
mov ted_sel_x1,0 |
mov ted_sel_y1,0 |
@@: |
.end_f: |
ret |
endp |
|
|
;input: |
; eax = pointer to begin select |
; ebx = pointer to end select |
; edi = pointer to tedit struct |
align 16 |
ted_revers: |
cmp eax,ebx |
jne @f |
ret |
@@: |
|
push ecx edx |
|
mov edx,ted_tex_1 |
cmp edx,ebx ;if(p1==1)p1=tex[1].perv; |
jne @f |
call ted_get_text_perv_pos |
mov ebx,edx |
@@: |
|
push esi |
mov edx,[eax+2] ; *** edx = tex[p0].perv *** |
ConvertIndexToPointer edx |
add edx,6 |
mov ecx,[edx] ;tmp = tex[tex[p0].perv].next; |
|
mov esi,[ebx+6] ; *** esi = tex[p1].next *** |
ConvertIndexToPointer esi |
add esi,2 |
m2m dword[edx],dword[esi] ;tex[tex[p0].perv].next = tex[tex[p1].next].perv; |
|
mov [esi],ecx ;tex[tex[p1].next].perv = tmp; |
pop esi |
|
mov ecx,[eax+2] ;tmp = tex[p0].perv; |
m2m dword[eax+2],dword[ebx+6] ;tex[p0].perv = tex[p1].next; |
mov [ebx+6],ecx ;tex[p1].next = tmp; |
|
mov edx,eax ;i=p0; |
@@: |
mov ecx,[edx+6] ;tmp = tex[i].next; |
m2m dword[edx+6],dword[edx+2] ;tex[i].next = tex[i].perv; |
mov [edx+2],ecx ;tex[i].perv = tmp; |
cmp edx,ebx ;if(i==p1)break; |
je @f |
; --- |
;cmp edx,ted_tex |
;je @f |
; --- |
mov edx,ecx ;i = tmp; |
ConvertIndexToPointer edx |
jmp @b |
@@: |
pop edx ecx |
call ted_text_colored |
ret |
|
|
;input: |
; edi = pointer to tedit struct |
;output: |
; dl = 0 not move |
; dl = 2 if move up |
; dl = 8 if scroll move up |
align 16 |
ted_cur_move_up: |
cmp ted_cur_y,0 |
je @f |
dec ted_cur_y |
mov dl,2 |
ret |
@@: |
push eax |
mov eax,ted_scr_w |
cmp dword[eax+sb_offs_position],0 |
je @f |
dec dword[eax+sb_offs_position] |
mov dl,8 |
jmp .ret_f |
@@: |
mov dl,0 |
.ret_f: |
pop eax |
ret |
|
;input: |
; edi = pointer to tedit struct |
;output: |
; dl = 0 not move |
; dl = 2 if move down |
; dl = 8 if scroll move down |
align 16 |
ted_cur_move_down: |
push eax ebx |
mov ebx,ted_scr_w |
mov dl,0 |
mov eax,dword[ebx+sb_offs_cur_area] |
dec eax |
cmp ted_cur_y,eax |
jge @f |
inc ted_cur_y |
mov dl,2 |
jmp .ret_f |
@@: |
mov eax,ted_cur_y |
add eax,dword[ebx+sb_offs_position] |
inc eax |
cmp dword[ebx+sb_offs_max_area],eax |
jle @f |
inc dword[ebx+sb_offs_position] |
mov dl,8 |
@@: |
.ret_f: |
pop ebx eax |
ret |
|
|
;input: |
; edi = pointer to tedit struct |
;output: |
; dl = 0 not move |
; dl = 1 if move up |
align 16 |
ted_cur_move_page_up: |
push eax ebx |
mov ebx,ted_scr_w |
mov eax,dword[ebx+sb_offs_cur_area] |
xor dl,dl |
cmp eax,dword[ebx+sb_offs_position] |
jg @f |
sub dword[ebx+sb_offs_position],eax |
mov dl,1 |
@@: |
cmp dword[ebx+sb_offs_position],0 |
je @f |
cmp dl,1 |
je @f |
mov dword[ebx+sb_offs_position],0 |
mov dl,1 |
@@: |
pop ebx eax |
ret |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
ted_cur_move_page_down: |
push eax ebx ecx |
mov ecx,ted_scr_w |
|
xor dl,dl |
mov eax,dword[ecx+sb_offs_max_area] |
sub eax,dword[ecx+sb_offs_cur_area] |
cmp dword[ecx+sb_offs_position],eax |
jge @f |
mov ebx,dword[ecx+sb_offs_cur_area] |
add dword[ecx+sb_offs_position],ebx |
mov dl,1 |
mov dword[ecx+sb_offs_redraw],1 |
cmp dword[ecx+sb_offs_position],eax |
jle @f |
mov dword[ecx+sb_offs_position],eax |
@@: |
pop ecx ebx eax |
ret |
|
;input: |
; edi = pointer to tedit struct |
;output: |
; dl = 0 not move |
; dl = 1 if move left |
; dl = 3 if move left and up |
; dl = 8 if scroll move up |
align 16 |
ted_cur_move_left: |
cmp ted_cur_x,0 |
je @f |
dec ted_cur_x |
mov dl,1 |
ret |
@@: |
push eax |
mov eax,ted_scr_h |
cmp dword[eax+sb_offs_position],0 |
je @f |
dec dword[eax+sb_offs_position] |
mov dl,8 |
jmp .ret_f |
@@: |
cmp ted_cur_y,0 |
jne @f |
mov eax,ted_scr_w |
mov dl,0 |
cmp dword[eax+sb_offs_position],0 |
je .ret_f |
dec dword[eax+sb_offs_position] |
call ted_scroll_set_redraw |
call ted_cur_move_x_last_char |
mov dl,8 |
jmp .ret_f |
@@: |
cmp ted_cur_y,0 |
je @f |
dec ted_cur_y |
call ted_cur_move_x_last_char |
cmp dl,8 |
je .ret_f |
mov dl,3 |
jmp .ret_f |
@@: |
mov dl,0 |
.ret_f: |
pop eax |
ret |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
ted_cur_move_right: |
push eax ebx |
mov eax,ted_scr_h |
xor dl,dl |
mov ebx,dword[eax+sb_offs_cur_area] |
cmp ted_cur_x,ebx |
jge @f |
inc ted_cur_x |
mov dl,1 |
jmp .ret_f |
@@: |
inc dword[eax+sb_offs_position] |
mov dl,8 |
.ret_f: |
pop ebx eax |
ret |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
ted_cur_move_x_last_char: |
;[hScr.position] |
;[hScr.cur_area] |
;dl-??? |
push eax ebx ecx |
mov eax,ted_cur_y |
mov ecx,ted_scr_w |
add eax,dword[ecx+sb_offs_position] |
call ted_strlen |
xor dl,dl |
|
mov ecx,ted_scr_h |
cmp ebx,dword[ecx+sb_offs_position] |
jge @f |
mov dl,8 |
mov dword[ecx+sb_offs_position],ebx |
@@: |
sub ebx,dword[ecx+sb_offs_position] |
|
cmp ebx,dword[ecx+sb_offs_cur_area] |
jle @f ; b---[---]---e |
add dword[ecx+sb_offs_position],ebx |
mov ebx,dword[ecx+sb_offs_cur_area] |
sub dword[ecx+sb_offs_position],ebx |
mov dl,8 |
@@: |
mov ted_cur_x,ebx |
pop ecx ebx eax |
ret |
|
;input: |
; edi = pointer to tedit struct |
;output: |
; dl = 0 not move |
; dl = 1 move cursor |
; dl = 8 move cursor and scroll |
align 16 |
ted_cur_move_x_first_char: |
xor dl,dl |
cmp ted_cur_x,0 |
je @f |
mov ted_cur_x,0 |
mov dl,1 |
@@: |
push eax |
mov eax,ted_scr_h |
cmp dword[eax+sb_offs_position],0 |
je @f |
mov dword[eax+sb_offs_position],0 |
mov dl,8 |
@@: |
pop eax |
ret |
|
;input: |
; edx = pointer to symbol struct |
; edi = pointer to tedit struct |
;output: |
; eax = array index |
align 16 |
ted_get_text_arr_index: |
push ecx edx |
mov eax,edx |
sub eax,ted_tex |
xor edx,edx |
mov ecx,sizeof.symbol |
div ecx |
pop edx ecx |
ret |
|
;input: |
; edx = pointer to symbol struct |
; edi = pointer to tedit struct |
;output: |
; edx = pointer to 'perv' struct |
align 16 |
ted_get_text_perv_pos: |
mov edx,dword[edx+2] |
imul edx,sizeof.symbol |
add edx,ted_tex |
ret |
|
;input: |
; edx = pointer to symbol struct |
;output: |
; edx = pointer to 'next' symbol struct |
align 16 |
ted_get_text_next_pos: |
mov edx,dword[edx+6] |
imul edx,sizeof.symbol |
add edx,ted_tex |
ret |
|
;input: |
; edi = pointer to tedit struct |
;output: |
; edx = symbol under cursor |
; ted_gp_opt = 1,2 |
; edx = tex[1].perv if error |
; ted_gp_opt = 0 |
align 16 |
ted_get_pos_by_cursor: |
push eax ecx esi |
mov esi,ted_cur_x |
mov eax,ted_scr_h |
add esi,dword[eax+sb_offs_position] |
mov ecx,ted_cur_y |
mov eax,ted_scr_w |
add ecx,dword[eax+sb_offs_position] |
call ted_get_pos_by_coords |
pop esi ecx eax |
ret |
|
;input: |
; esi = XPos |
; ecx = YPos |
; edi = pointer to tedit struct |
;output: |
; edx = symbol under cursor |
; ted_gp_opt = 1 if found text line |
; ted_gp_opt = 2 if found text line and column |
; edx = tex[1] if error |
; ted_gp_opt = 0 if text no found |
align 16 |
ted_get_pos_by_coords: |
push eax ;Row |
push ebx ;Col |
|
xor eax,eax |
xor ebx,ebx |
mov ted_gp_opt,0 |
mov edx,ted_tex |
@@: |
call ted_iterat_next |
cmp edx,ted_tex_1 |
jle @f |
cmp ebx,esi |
jne .u1_0 ;Col <> ted_cur_x |
mov ted_gp_opt,1 |
cmp eax,ecx |
jge @f ; Row >= ted_cur_y |
.u1_0: |
mov ted_gp_opt,0 |
inc ebx |
cmp byte [edx],13 |
jne @b |
cmp eax,ecx |
jge @f ; Row >= ted_cur_y |
inc eax |
xor ebx,ebx |
jmp @b |
@@: |
cmp eax,ecx |
jne @f ; Row = ted_cur_y |
inc ted_gp_opt |
@@: |
cmp ted_gp_opt,0 |
jne @f |
mov edx,ted_tex_1 |
;call ted_get_text_perv_pos |
@@: |
pop ebx eax |
ret |
|
|
;input: |
; eax = Row |
; edi = pointer to tedit struct |
;output: |
; ebx = str len |
align 16 |
ted_strlen: |
push edx ecx |
;ecx = Row, from cycle |
|
xor ebx,ebx |
xor ecx,ecx |
mov edx,ted_tex |
@@: |
call ted_iterat_next |
cmp edx,ted_tex_1 |
jle @f |
inc ebx |
cmp byte [edx],13 |
jne @b |
dec ebx ;lenght minus 1 sumbol to paragraph |
cmp eax,ecx |
je @f |
xor ebx,ebx |
inc ecx |
jmp @b |
@@: |
|
cmp eax,ecx |
je @f |
xor ebx,ebx |
@@: |
|
pop ecx edx |
ret |
|
|
;input: |
; edx = symbol position |
; edi = pointer to tedit struct |
;output: |
; eax = number of line |
; ebx = symbol position in line |
align 16 |
ted_get_text_coords: |
push edx |
xor eax,eax |
xor ebx,ebx |
@@: |
call ted_iterat_perv |
|
cmp eax,0 |
jne .no_col_mov |
inc ebx |
.no_col_mov: |
|
cmp edx,ted_tex_1 |
jle @f |
cmp byte [edx],13 |
jne @b |
inc eax |
jmp @b |
@@: |
dec ebx |
pop edx |
ret |
|
;input: |
; edi = pointer to tedit struct |
;output: |
; eax = num lines |
align 16 |
ted_get_num_lines: |
push edx |
mov eax,1 |
mov edx,ted_tex |
@@: |
call ted_iterat_next |
cmp edx,ted_tex_1 |
jle @f |
cmp byte [edx],13 |
jne @b |
inc eax |
jmp @b |
@@: |
;... |
;dec eax |
pop edx |
ret |
|
|
;input: |
; edi = pointer to tedit struct |
;description: |
; ®â¬¥ï¥â ®â¬¥¥ë¥ ¤¥©á⢨ï, ¯¥à¥¤ ¨§¬¥¥¨¥¬ ¤®ªã¬¥â |
align 16 |
proc ted_set_undo |
mov ted_drag_k,0 ;§ ª 稢 ¥¬ ¢ë¤¥«¥¨¥ ®â ª« ¢¨ âãàë |
cmp ted_tim_undo,1 |
jl .no_work |
|
push eax ebx edx |
mov edx,ted_tex |
call ted_get_text_next_pos ;long i=tex[0].next; |
mov eax,ted_tim_undo |
sub ted_tim_ch,eax ;ted_tim_ch-=ted_tim_undo; |
mov eax,ted_tim_ch |
cmp ted_tim_ls,eax ;if(ted_tim_ls>ted_tim_ch) |
jle @f |
mov ted_tim_ls,0 |
@@: |
cmp edx,ted_tex_1 |
jle @f |
|
;if(tex[i].tc>ted_tim_ch){ // ¥á«¨ ᮧ¤ ¨¥ ᨬ¢®« ¡ë«® ®â¬¥¥® |
cmp [edx+symbol.tc],eax |
jle .no_u1 |
mov dword [edx+symbol.tc],0 |
mov dword [edx+symbol.td],0 |
|
mov ebx,[edx+symbol.perv] |
imul ebx,sizeof.symbol |
add ebx,ted_tex ;ebx=tex[i].perv |
m2m dword [ebx+symbol.next],dword [edx+symbol.next] ;tex[tex[i].perv].next=tex[i].next; |
|
mov ebx,[edx+symbol.next] |
imul ebx,sizeof.symbol |
add ebx,ted_tex ;ebx=tex[i].next |
m2m dword [ebx+symbol.perv],dword [edx+symbol.perv] ;tex[tex[i].next].perv=tex[i].perv; |
|
cmp ted_ptr_free_symb,edx |
jle .no_cor_free |
mov ted_ptr_free_symb,edx ;¬¥ï¥¬ 㪠§ ⥫ì ᢮¡®¤ë© ᨬ¢®«, ¤«ï ¡®«¥¥ ¡ëáâண® ¯®¨áª ¯ ¬ï⨠|
.no_cor_free: |
mov edx,ebx ;®¯â¨¬¨§¨à㥬 ¯® ᪮à®á⨠(edx ¯®á«¥ ¢ë§®¢ ted_get_text_next_pos ¡ã¤¥â à ¢¥ ebx) |
jmp @b |
.no_u1: |
|
;else if(tex[i].td>ted_tim_ch) tex[i].td=0; // ¥á«¨ 㤠«¥¨¥ ᨬ¢®« ¡ë«® ®â¬¥¥® |
cmp [edx+symbol.td],eax |
jle .no_u2 |
mov dword [edx+symbol.td],0 |
.no_u2: |
|
call ted_get_text_next_pos |
jmp @b |
@@: |
mov ted_tim_undo,0 |
mov eax,ted_tim_co |
cmp ted_tim_ch,eax |
jge @f |
mov ted_tim_co,0 |
@@: |
pop edx ebx eax |
.no_work: |
ret |
endp |
|
;input: |
; ecx = Col |
; edx = Row |
; edi = pointer to tedit struct |
align 16 |
ted_go_to_pos: |
push eax |
mov eax,ted_scr_w |
mov ted_cur_x,ecx |
sub edx,dword[eax+sb_offs_position] |
|
cmp edx,dword[eax+sb_offs_cur_area] ;ted_cur_y > [.cur_area] |
jl @f |
push ebx |
mov ebx,edx |
sub ebx,dword[eax+sb_offs_cur_area] |
inc ebx |
add dword[eax+sb_offs_position],ebx |
sub edx,ebx |
pop ebx |
; ??? redrav |
@@: |
mov ted_cur_y,edx |
pop eax |
ret |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
ted_text_colored: |
push eax edx |
mov eax,ted_tim_ch |
sub eax,ted_tim_undo |
mov ted_tim_co,eax |
mov edx,ted_tex |
@@: |
call ted_iterat_next |
cmp edx,ted_tex_1 |
jle @f |
mov byte[edx+1],0 |
jmp @b |
@@: |
|
cmp ted_key_words_count,1 |
jl .no_colors |
mov edx,ted_tex |
@@: |
call ted_text_find_sel_color |
cmp edx,ted_tex_1 |
jle .no_colors |
jmp @b |
.no_colors: |
pop edx eax |
ret |
|
|
;input: |
; edx = pointer to start symbol |
; edi = pointer to tedit struct |
;output: |
; edx = pointer to next symbol |
;description: |
; ãªæ¨ï ¤«ï ¯®¨áª ¨ ¢ë¤¥«¥¨ï ¯®¤á¢¥ç¥ëå á«®¢ |
align 16 |
proc ted_text_find_sel_color uses eax ebx ecx esi |
locals |
begPos dd ? ; ç «ì ï ¯®§¨æ¨ï |
endPos dd ? ;ª®¥ç ï ¯®§¨æ¨ï |
find db ? ; ©¤¥® / ¥ ©¤¥® |
f_color db ? ;¨¤¥ªá 梥⠩¤¥®£® á«®¢ |
endl |
;eax = word_n ⥪ã騩 ®¬¥à (¯®§¨æ¨ï) ¯à®¢¥à塞®£® á«®¢ ¢ ᯨ᪥ |
;ebx = ¤«ï à §ëå 楫¥© |
;ecx = l_pos ¯®á«¥¤¨© ®¬¥à (¯®§¨æ¨ï) ¯®¤å®¤ï饣® á«®¢ ¢ ᯨ᪥ |
;esi = ¤«ï à §ëå 楫¥©, ®¬¥à ¯à®¢¥à塞®£® ᨬ¢®« ¢ á«®¢¥ |
mov dword[begPos],1 |
mov dword[endPos],1 |
mov byte[find],0 |
mov byte[f_color],1 |
@@: |
call ted_iterat_next |
cmp edx,ted_tex_1 |
jle @f |
|
xor eax,eax |
mov al,byte[edx] |
shl ax,2 ;eax*=4 |
add eax,ted_arr_key_pos |
mov eax,dword[eax] |
cmp eax,0 |
jl @b ;if( (word_n=ted_arr_key_pos[(unsigned char)tex[i].c])>-1 ){ |
|
mov ecx,eax |
;while(l_pos<ted_key_words_count && Col[l_pos].Text[0]==Col[word_n].Text[0]) |
.wh_1b: |
cmp ecx,ted_key_words_count |
jge .wh_1e |
ColToIndexOffset ecx,esi |
mov bl,byte[esi] |
ColToIndexOffset eax,esi |
cmp bl,byte[esi] |
jne .wh_1e |
inc ecx |
jmp .wh_1b |
.wh_1e: |
|
mov dword[begPos],edx ;bP=i; |
mov esi,1 |
align 4 |
.wh_2b: ;while(1){ |
call ted_iterat_next |
|
;while(l_pos>word_n && Col[l_pos-1].Text[pos]!=tex[i].c) |
.wh_3b: |
cmp ecx,eax |
jle .wh_3e |
dec ecx |
ColToIndexOffset ecx,ebx |
inc ecx |
;cmp byte[ebx+esi],byte[edx] |
mov bl,byte[ebx+esi] |
cmp bl,byte[edx] |
je .wh_3e |
dec ecx |
jmp .wh_3b |
.wh_3e: |
|
ColToIndexOffset eax,ebx |
cmp byte[ebx+esi],0 |
jne .if_0 ;if(Col[word_n].Text[pos]==0){ |
mov dword[endPos],edx ;eP=i; |
ColToIndexOffset eax,ebx |
mov bl,byte[ebx+MAX_COLOR_WORD_LEN+7] |
mov byte[f_color],bl ;f_color=Col[word_n].color; |
|
mov byte[find],1 |
ColToIndexOffset eax,ebx ;... ebx = Col[word_n] |
mov bl,byte[ebx+MAX_COLOR_WORD_LEN+4] |
cmp bl,0 ;if(Col[word_n].wwo) |
je .if_2n |
push edx |
mov edx,dword[begPos] |
call ted_iterat_perv |
|
btr bx,0 ;1-1 |
jae .if_3e ;if(Col[word_n].wwo&1) |
;u1= !(isalnum(cont_s)||cont_s=='_') |
call isalnum |
jae .if_3e |
mov byte[find],0 |
jmp .if_4e |
.if_3e: |
|
btr bx,3 ;4-1 |
jae .if_4e ;if(Col[word_n].wwo&8) |
;u1= !isalpha(cont_s); |
call isalpha |
jae .if_4e |
mov byte[find],0 |
.if_4e: |
|
mov edx,dword[endPos] |
;call ted_iterat_next |
|
btr bx,1 ;2-1 |
jae .if_5e ;if(Col[word_n].wwo&2) |
;u1= !(isalnum(cont_s)||cont_s=='_') |
call isalnum |
jae .if_5e |
mov byte[find],0 |
jmp .if_6e |
.if_5e: |
|
btr bx,4 ;5-1 |
jae .if_6e ;if(Col[word_n].wwo&16) |
;u1= !isalpha(cont_s); |
call isalpha |
jae .if_6e |
mov byte[find],0 |
.if_6e: |
|
btr bx,2 ;3-1 |
jae .if_7e ;if(Col[word_n].wwo&4) |
ColToIndexOffset eax,ebx |
mov bx,word[ebx+MAX_COLOR_WORD_LEN+5] |
call ted_iterat_next_pos_char |
cmp edx,ted_tex_1 |
jle .if_7e |
mov dword[endPos],edx |
.if_7e: |
|
pop edx |
.if_2n: |
;if(i!=1){ // ¥ ª®¥æ ¤®ªã¬¥â |
; cont_s=tex[eP].c; |
; if(Col[word_n].wwo&2) u2= !(isalnum(cont_s)||cont_s=='_'); // ¥ ¡ãª¢.-ç¨á«. ᨬ¢®« |
; if(u2 && Col[word_n].wwo&16) u2= !isalpha(cont_s); // ¥ ç¨á«. ᨬ¢®« |
; if(Col[word_n].wwo&4) eP=ted_iterat_next_pos_char(eP,Col[word_n].endc); |
|
cmp eax,ecx |
je .wh_2e ;if(word_n==l_pos) break; // do double - ¥á«¨ á«®¢® â®ç® ¯®á«¥¤¥¥ |
.if_0: |
|
cmp edx,ted_tex_1 |
jle .wh_2e ;if(i==1) break; |
|
;while(l_pos>word_n && Col[word_n].Text[pos]!=tex[i].c) |
.wh_4b: |
cmp ecx,eax |
jle .wh_4e |
ColToIndexOffset eax,ebx |
;cmp byte[ebx+esi],byte[edx] |
mov bl,byte[ebx+esi] |
cmp bl,byte[edx] |
je .wh_4e |
inc eax |
jmp .wh_4b |
.wh_4e: |
|
cmp eax,ecx |
je .wh_2e;if(word_n==l_pos) break; |
inc esi ;pos++; |
jmp .wh_2b |
.wh_2e: |
|
cmp byte[find],1 ;if(fnd)break; |
je @f |
mov edx,dword[begPos];i=bP; |
jmp @b |
@@: |
|
cmp byte[find],1 |
jne .if_1e ;if(fnd){ // ¢ë¤¥«¥¨¥ ©¤¥®£® ⥪áâ |
;if(!mode_sf1 || (mode_sf1 && strlen(Col[word_n].f1->c_str())>0)){ |
mov eax,dword[begPos] |
mov bl,byte[f_color] |
mov byte[eax+1],bl ;tex[bP].col=f_color; |
mov eax,dword[endPos] |
mov byte[eax+1],0xff ;tex[eP].col=255; |
;return ItPoPerv(eP); // ¢®§¢à é ¥¬ ¯®§¨æ¨î ª®æ ¢å®¦¤¥¨ï |
mov edx,dword[endPos] |
call ted_get_text_perv_pos |
jmp @f |
.if_1e: |
mov edx,ted_tex |
@@: |
|
ret |
endp |
|
;input: |
; edx = pointer to char (byte) |
;output: |
; cf=1 if symbol is... |
align 16 |
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 |
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 |
|
;output: |
; cf=1 ¥á«¨ ¢ [edx] ¡ãª¢ , æ¨äà ¨«¨ '_' |
align 16 |
isalnum: |
push eax ebx |
movzx eax,byte[edx] ;al=offset |
shr eax,3 |
lea ebx,[tab_all_num] |
add ebx,eax |
movzx ax,byte[edx] ;al=bit |
and ax,111b |
bt word[ebx],ax |
pop ebx eax |
ret |
|
;output: |
; cf=1 ¥á«¨ ¢ [edx] ¡ãª¢ ¨«¨ '_' |
align 16 |
isalpha: |
push eax ebx |
movzx eax,byte[edx] ;al=offset |
shr eax,3 |
lea ebx,[tab_alpha] |
add ebx,eax |
movzx ax,byte[edx] ;al=bit |
and ax,111b |
bt word[ebx],ax |
pop ebx eax |
ret |
|
align 16 |
proc ted_show_help_f1 uses eax edx edi, edit:dword |
mov edi,[edit] |
|
call ted_get_pos_by_cursor |
push edx |
call ted_iterat_next_color_tag |
mov eax,edx |
pop edx |
call ted_iterat_perv_color_tag |
|
cmp eax,ted_tex |
jle @f |
cmp edx,ted_tex_1 |
jle @f |
stdcall ted_find_help_id,eax |
@@: |
;call ted_draw_main_cursor |
call ted_draw_help_f1 |
ret |
endp |
|
;input: |
; edx = position begin 'symbol' struct |
; edi = pointer to tedit struct |
; end_pos = position end 'symbol' struct |
align 16 |
proc ted_find_help_id, end_pos:dword |
; ecx = word_n |
; ebx = l_pos |
mov ted_help_id,-1 |
|
push ebx ecx |
xor ebx,ebx |
mov bl,byte[edx] |
shl bx,2 ;ebx*=4 |
add ebx,ted_arr_key_pos |
mov ecx,dword[ebx] |
cmp ecx,0 |
jl .if_0e ;if( (word_n=ted_arr_key_pos[(unsigned char)tf[0]])>-1 ){ |
push esi eax |
mov ebx,ecx ;l_pos=word_n; |
ColToIndexOffset ecx,esi |
push cx |
mov cl,byte[esi] |
@@: |
cmp ebx,ted_key_words_count ;while(l_pos<ted_key_words_count) |
jge @f |
;ColToIndexOffset ecx,esi |
ColToIndexOffset ebx,eax |
cmp cl,byte[eax] ;&& Col[l_pos].Text[0]==Col[word_n].Text[0]) |
jne @f |
inc ebx ;l_pos++; |
jmp @b |
@@: |
pop cx |
call ted_iterat_next ;pos=1; |
mov esi,1 |
@@: |
push dx |
push word[edx] |
pop dx |
.wh_0b: |
cmp ebx,ecx ;while(l_pos>word_n |
jle .wh_0e |
dec ebx |
ColToIndexOffset ebx,eax |
inc ebx |
cmp byte[eax+esi],dl ;&& Col[l_pos-1].Text[pos]!=tf[i]) |
je .wh_0e |
dec ebx ;l_pos--; |
jmp .wh_0b |
.wh_0e: |
|
.wh_1b: |
cmp ebx,ecx ;while(l_pos>word_n |
jle .wh_1e |
ColToIndexOffset ecx,eax |
cmp byte[eax+esi],dl |
je .wh_1e |
inc ecx ;word_n++; |
jmp .wh_1b |
.wh_1e: |
pop dx |
|
cmp ecx,ebx ;if(word_n==l_pos) break; |
je @f |
call ted_iterat_next ;pos++; |
cmp edx,dword[end_pos] ;for(...;i<strlen;...) |
je @f ;jge |
inc esi |
jmp @b |
@@: |
pop eax esi |
|
mov ted_help_id,ecx |
;return word_n; |
|
.if_0e: |
pop ecx ebx |
ret |
endp |
|
;output: |
; eax = ª®¤ ®è¨¡ª¨ |
; ebx = ª®««¨ç¥á⢮ ¯à®ç¨â ëå ¡ ©â |
align 16 |
proc ted_open_file uses ecx edx edi, edit:dword, file:dword, f_name:dword ;äãªæ¨ï ®âªàëâ¨ï ä ©« |
mov edi,[edit] |
|
; *** ¯à®¢¥à塞 à §¬¥à ¯ ¬ï⨠¨ ¥á«¨ ¥ å¢ â ¥â ⮠㢥«¨ç¨¢ ¥¬ *** |
;¯à®¡ã¥¬ ¯®«ãç¨âì ¨ä®à¬ æ¨î ® ä ©«¥ |
mov ebx,[file] |
mov dword[ebx], SSF_GET_INFO |
mov dword[ebx+4], 0 |
mov dword[ebx+8], 0 |
mov dword[ebx+12], 0 |
m2m dword[ebx+16], ted_tex |
mov byte[ebx+20], 0 |
push dword[f_name] |
pop dword[ebx+21] |
mcall SF_FILE |
or eax,eax |
jz .end_0 |
mov edx,ted_max_chars |
cmp eax,2 ;äãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ®© ä ©«®¢®© á¨á⥬ë |
je @f |
jmp .ret_f |
align 4 |
.end_0: |
;¯à®¢¥à塞 å¢ â¨â «¨ ¯ ¬ï⨠¤«ï § £à㧪¨ ä ©« |
mov ecx,ted_max_chars |
sub ecx,2 ;ecx = ¬ ªá¨¬ «ì®¥ ç¨á«® ¡ ©â, ¤«ï ª®â®àëå ¡ë« ¢ë¤¥«¥ ¯ ¬ïâì |
mov edx,ted_tex |
mov edx,[edx+32] ;+32 = +0x20: qword: à §¬¥à ä ©« ¢ ¡ ©â å |
cmp edx,ecx |
jl @f |
;㢥«¨ç¨¢ ¥¬ ¯ ¬ïâì ¥á«¨ ¥ å¢ â¨«® |
mov ecx,edx ;¯ ¬ïâì ¥®¡å®¤¨¬ ï ¤«ï ®âªàëâ¨ï ä ©« |
add ecx,2 ;¯ ¬ïâì ¤«ï á«ã¦¥¡ëå ç «ì®£® ¨ ª®¥ç®£® ᨬ¢®«®¢ |
add ecx,ted_increase_size ;¯ ¬ïâì ¤«ï । ªâ¨à®¢ ¨ï ä ©« |
mov ted_max_chars,ecx |
imul ecx,sizeof.symbol |
invoke mem.realloc, ted_tex,ecx |
mov ted_tex,eax |
mov ted_tex_1,eax |
add ted_tex_1,sizeof.symbol |
add eax,ecx |
mov ted_tex_end,eax |
mov ecx,ted_tex_1 |
add ecx,sizeof.symbol |
mov ted_ptr_free_symb,ecx |
@@: |
|
; *** ¯à®¡ã¥¬ ®âªàëâì ä ©« *** |
mov ebx,[file] |
mov dword[ebx], SSF_READ_FILE |
mov dword[ebx+4], 0 |
mov dword[ebx+8], 0 |
m2m dword[ebx+12], edx ;ç¨á«® ¡ ©â, ª®â®àë¥ ¬®£ãâ ¡ëâì áç¨â ë á ä ©« (¥ ¡®«ìè¥ ç¥¬ ted_max_chars) |
m2m dword[ebx+16], ted_tex |
mov byte[ebx+20], 0 |
push dword[f_name] |
pop dword[ebx+21] |
mcall SF_FILE |
|
or eax,eax |
jz @f |
cmp eax,6 |
je @f |
jmp .ret_f |
@@: |
cmp ebx,-1 |
je .ret_f |
;if open file |
call ted_on_open_file |
.ret_f: |
ret |
endp |
|
align 16 |
proc ted_but_select_word, edit:dword |
pushad |
mov edi,[edit] |
|
call ted_get_pos_by_cursor |
push edx |
call ted_iterat_perv_color_tag |
cmp edx,ted_tex_1 |
jle @f |
call ted_get_text_coords |
mov ted_sel_x0,ebx |
mov ted_sel_y0,eax |
@@: |
pop edx |
call ted_iterat_next_color_tag |
cmp edx,ted_tex_1 |
jle @f |
call ted_get_text_coords |
mov ted_sel_x1,ebx |
mov ted_sel_y1,eax |
@@: |
|
cmp ted_fun_draw_panel_buttons,0 |
je @f |
call ted_fun_draw_panel_buttons |
@@: |
stdcall ted_draw,edi |
popad |
ret |
endp |
|
align 16 |
proc ted_but_cut uses edi, edit:dword |
mov edi,[edit] |
|
stdcall ted_but_copy,edi |
call ted_set_undo |
stdcall ted_sel_text_del,ted_opt_ed_change_time |
|
cmp al,1 |
jne @f |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 |
je @f |
call ted_fun_draw_panel_buttons |
@@: |
ret |
endp |
|
;output: |
; al = 1 if copy text |
align 16 |
proc ted_but_copy, edit:dword |
pushad |
mov edi,[edit] |
|
call ted_is_select |
or al,al |
jz .end_f ;if not selected text |
call ted_sel_normalize |
|
mov esi,ted_seln_x1 |
mov ecx,ted_seln_y1 |
call ted_get_pos_by_coords |
mov ebx,edx |
mov esi,ted_seln_x0 |
mov ecx,ted_seln_y0 |
call ted_get_pos_by_coords |
mov esi,ebx |
|
mov ecx,12 ;system buffer header size |
mov ebx,ted_buffer |
mov dword[ebx+4],0 ;text data |
mov dword[ebx+8],1 ;code 866 |
add ebx,ecx |
@@: |
cmp edx,ted_tex_1 ;end of file |
jle @f |
cmp edx,esi ;end of select |
je @f |
inc ecx |
cmp ecx,ted_buffer_size ;owerflow bufer |
je @f |
|
mov al,byte[edx] |
mov byte[ebx],al |
inc ebx |
cmp al,13 |
jne .no_13 |
mov byte[ebx],10 ;¤¥« ¥¬ ª®¥æ áâப¨ ¢ ¡ãä¥à¥ 13,10 ¤«ï ᮢ¬¥á⨬®áâ¨ á ¤à㣨¬¨ ¯à®£à ¬¬ ¬¨ |
inc ebx |
inc ecx |
.no_13: |
|
call ted_iterat_next |
jmp @b |
@@: |
mov byte[ebx],0 |
|
cmp ecx,12 |
je .end_f |
mov ebx,ted_buffer |
mov [ebx],ecx |
mcall SF_CLIPBOARD,SSF_WRITE_CB,ecx,ted_buffer |
call ted_draw_buffer |
cmp ted_fun_draw_panel_buttons,0 |
je .end_f |
call ted_fun_draw_panel_buttons |
.end_f: |
popad |
ret |
endp |
|
|
align 16 |
proc ted_but_paste, edit:dword |
pushad |
mov edi,[edit] |
|
mcall SF_CLIPBOARD,SSF_GET_SLOT_COUNT |
cmp eax,1 |
jl .no_buf_r |
|
mov esi,eax |
.cycle: ;®¡à âë© æ¨ª« ¯® ᫮⠬ |
dec esi ;®¬¥à ⥪ã饣®, ¯à®¢¥à塞®£® á«®â |
mcall SF_CLIPBOARD,SSF_READ_CB,esi |
cmp eax,1 |
je .no_buf_r |
cmp eax,-1 |
je .no_buf_r |
mov ecx,dword[eax] |
cmp ecx,1 ;size |
jl .no_buf_r |
cmp dword[eax+4],0 ;text |
je @f |
cmp esi,1 |
jge .cycle ;¥á«¨ ¢ ¡ãä¥à¥ ¥ ⥪áâ, ᫮⮢ ¢ ¡ãä¥à¥ ¥áª®«ìª®, ¯à®¡ã¥¬ ¯¥à¥©â¨ ª ¢¥à奬ã á«®âã |
jmp .no_buf_r |
@@: |
cmp dword[eax+8],1 ;866 |
je @f |
cmp esi,1 |
jge .cycle ;¥á«¨ ¢ ¡ãä¥à¥ ⥪áâ ¥ ¢ ª®¤¨à®¢ª¥ 866 ... ¯à®¡ã¥¬ ¯¥à¥©â¨ ª ¢¥à奬ã á«®âã |
jmp .no_buf_r |
@@: |
;ª®¯¨à®¢ ¨¥ ⥪áâ ¨§ á¨á⥬®£® ¡ãä¥à ¢® ¢ãâ२© |
cmp ecx,ted_buffer_size |
jle @f |
mov ecx,ted_buffer_size |
@@: |
mov edi,ted_buffer |
mov esi,eax |
add esi,4 ;12 |
mov dword[edi],ecx |
add edi,4 ;12 |
sub ecx,4 ;12 |
rep movsb |
mov edi,[edit] |
|
mov esi,eax |
add esi,12 |
jmp .buf_r |
.no_buf_r: |
|
;¥á«¨ ¥ 㤠«®áì ¯à®ç¨â âì ¤ ë¥ ¨§ á¨á⥬®£® ¡ãä¥à , ¯®¯ ¤ ¥¬ áî¤ |
mov esi,ted_buffer |
cmp dword[esi],1 ;¯à®¢¥à塞 ¥áâì «¨ ¤ ë¥ ¢® ¢ãâ॥¬ ¡ãä¥à¥ |
jl .no_paste ;¥á«¨ ¢®®¡é¥ ¨ç¥£® ¥ 㤠«®áì ¯à®ç¨â âì ¨¤¥¬ ¢ë室 |
add esi,12 ;system buffer header size |
.buf_r: |
|
mov edx,esi |
call tl_strlen |
cmp eax,1 |
jl .no_paste |
mov esi,eax |
call ted_set_undo |
mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor |
stdcall ted_sel_text_del,ebx |
cmp al,1 |
jne .del |
mov ebx,ted_opt_ed_move_cursor |
.del: |
stdcall ted_text_add,edi,edx,esi,ebx |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 |
je .no_paste |
call ted_fun_draw_panel_buttons |
.no_paste: |
popad |
ret |
endp |
|
align 16 |
proc ted_but_sumb_upper uses edi esi, edit:dword |
mov edi,[edit] |
|
stdcall ted_convert_sel_text,fb_char_toupper |
or esi,esi |
jz @f |
stdcall ted_draw,edi |
@@: |
ret |
endp |
|
align 16 |
proc ted_but_sumb_lover uses edi esi, edit:dword |
mov edi,[edit] |
|
stdcall ted_convert_sel_text,fb_char_todown |
or esi,esi |
jz @f |
stdcall ted_draw,edi |
@@: |
ret |
endp |
|
align 16 |
proc ted_but_reverse uses eax ebx edi, edit:dword |
mov edi,[edit] |
|
call ted_is_select |
or al,al |
jz @f |
call ted_sel_normalize |
push esi ecx edx |
mov esi,ted_seln_x0 |
mov ecx,ted_seln_y0 |
call ted_get_pos_by_coords |
mov eax,edx |
mov esi,ted_seln_x1 |
cmp esi,0 |
je .beg_str |
dec esi |
.beg_str: |
mov ecx,ted_seln_y1 |
call ted_get_pos_by_coords |
;call ted_get_text_perv_pos |
mov ebx,edx |
pop edx ecx esi |
;cmp eax,... |
;je @f |
call ted_revers |
@@: |
stdcall ted_draw,edi |
ret |
endp |
|
align 16 |
proc ted_but_undo uses eax edi, edit:dword |
mov edi,[edit] |
|
mov eax,ted_tim_undo |
cmp ted_tim_ch,eax |
jbe @f |
inc ted_tim_undo |
;call ted_text_colored |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 |
je @f |
call ted_fun_draw_panel_buttons |
@@: |
ret |
endp |
|
align 16 |
proc ted_but_redo uses edi, edit:dword |
mov edi,[edit] |
|
cmp ted_tim_undo,1 |
jb @f |
dec ted_tim_undo |
;call ted_text_colored |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 |
je @f |
call ted_fun_draw_panel_buttons |
@@: |
ret |
endp |
|
align 16 |
proc ted_but_find_next, edit:dword |
pushad |
mov edi,[edit] |
|
call ted_get_pos_by_cursor |
mov eax,ted_buffer_find |
mov bl,byte[eax] |
@@: |
call ted_get_find_rezult |
cmp bh,1 |
je @f ; find |
call ted_iterat_next |
cmp edx,ted_tex_1 |
jle @f |
jmp @b |
@@: |
cmp bh,0 |
je @f |
call ted_get_text_coords |
inc ebx ;move cursor right |
mov ted_sel_x1,ebx |
mov ted_sel_y1,eax |
mov edx,eax |
mov ecx,ebx |
call ted_go_to_pos |
mov edx,esi ;esi ¡ë«® ãáâ ®¢«¥® ¢ ted_get_find_rezult |
call ted_get_text_coords |
mov ted_sel_x0,ebx |
mov ted_sel_y0,eax |
stdcall ted_draw,edi |
jmp .end_find |
@@: |
;¯®¯ ¤ ¥¬ áî¤ ¥á«¨ ⥪áâ ¥ ©¤¥ |
cmp ted_fun_find_err,0 |
je .end_find |
call ted_fun_find_err ;¯®«ì§®¢ ⥫ì᪠ï äãªæ¨ï |
.end_find: |
popad |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
ted_key_ctrl_home: |
mov ted_cur_x,0 |
mov ted_cur_y,0 |
push eax |
mov eax,ted_scr_w |
mov dword[eax+sb_offs_position],0 |
mov eax,ted_scr_h |
mov dword[eax+sb_offs_position],0 |
pop eax |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 |
je @f |
call ted_fun_draw_panel_buttons |
@@: |
ret |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
ted_key_ctrl_end: |
push eax ebx |
call ted_get_num_lines |
mov ebx,ted_scr_w |
mov dword[ebx+sb_offs_position],eax ;áâ ¢¨¬ ¯®«§ã®ª ¯®á«¥¤îî áâப㠤®ªã¬¥â |
cmp eax,dword[ebx+sb_offs_cur_area] |
jle @f |
mov eax,dword[ebx+sb_offs_cur_area] ;¯®«ãç ¥¬ ç¨á«® áâப ¢« §ïé¨å ¢ ®ª® |
@@: |
sub dword[ebx+sb_offs_position],eax ;®â¨¬ ¥¬ ®â ¯®«§ãª ç¨á«® áâப ¢« §ïé¨å ¢ ®ª® (® ¥ ¡®«ìè¥ â¥å, çâ® ¥áâì ¢ ¤®ªã¬¥â¥) |
dec eax |
mov ted_cur_y,eax ;áâ ¢¨¬ ªãàá®à ¯®á«¥¤îî áâப㠤®ªã¬¥â |
pop ebx eax |
call ted_cur_move_x_last_char |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 |
je @f |
call ted_fun_draw_panel_buttons |
@@: |
ret |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
proc ted_sel_key_up |
cmp ted_drag_k,1 |
je @f |
call ted_sel_start |
mov ted_drag_k,1 |
@@: |
push dx |
call ted_cur_move_up |
cmp dl,8 |
jne @f |
call ted_scroll_set_redraw |
@@: |
pop dx |
call ted_sel_move |
stdcall ted_draw,edi |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
proc ted_sel_key_down |
cmp ted_drag_k,1 |
je @f |
call ted_sel_start |
mov ted_drag_k,1 |
@@: |
push dx |
call ted_cur_move_down |
cmp dl,8 |
jne @f |
call ted_scroll_set_redraw |
@@: |
pop dx |
call ted_sel_move |
stdcall ted_draw,edi |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
proc ted_sel_key_left |
cmp ted_drag_k,1 |
je @f |
call ted_sel_start |
@@: |
push dx |
call ted_cur_move_left |
call ted_sel_move |
cmp ted_drag_k,1 |
je @f |
mov ted_drag_k,1 |
mov dl,8 |
@@: |
cmp dl,8 |
jne @f |
call ted_scroll_set_redraw |
stdcall ted_draw,edi |
jmp .end_f |
@@: |
stdcall ted_draw_cur_line,edi |
.end_f: |
pop dx |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
proc ted_sel_key_right |
cmp ted_drag_k,1 |
je @f |
call ted_sel_start |
@@: |
push dx |
call ted_cur_move_right |
call ted_sel_move |
cmp ted_drag_k,1 |
je @f |
mov ted_drag_k,1 |
mov dl,8 |
@@: |
cmp dl,8 |
jne @f |
call ted_scroll_set_redraw |
stdcall ted_draw,edi |
jmp .end_f |
@@: |
stdcall ted_draw_cur_line,edi |
.end_f: |
pop dx |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
;description: |
; this function need to optimize output |
align 16 |
proc ted_draw_cursor_sumb |
pushad |
mov ebx,ted_wnd_l |
add ebx,ted_rec_l |
mov edx,ted_cur_x |
imul edx,ted_rec_w |
add ebx,edx |
shl ebx,16 |
add ebx,ted_rec_w |
|
mov ecx,ted_wnd_t ;calc rect -> y0,y1 |
add ecx,ted_rec_t |
mov edx,ted_cur_y |
imul edx,ted_rec_h |
add ecx,edx |
shl ecx,16 |
add ecx,ted_rec_h |
|
mov edx,ted_color_wnd_work |
call ted_sel_normalize |
|
mov esi,ted_scr_w |
mov eax,[esi+sb_offs_position] |
sub ted_seln_y0,eax |
sub ted_seln_y1,eax |
|
mov eax,ted_cur_y |
cmp eax,ted_seln_y0 |
jl .no_cur_sel |
cmp eax,ted_seln_y1 |
jg .no_cur_sel |
mov edx,ted_color_select ;¬¥ï¥¬ 梥â ä® æ¢¥â ¢ë¤¥«¥¨ï |
mov esi,ted_scr_h |
cmp eax,ted_seln_y0 |
jne @f |
mov eax,ted_cur_x |
add eax,[esi+sb_offs_position] |
cmp eax,ted_seln_x0 |
jge @f |
mov edx,ted_color_wnd_work |
@@: |
mov eax,ted_cur_y |
cmp eax,ted_seln_y1 |
jne .no_cur_sel |
mov eax,ted_cur_x |
add eax,[esi+sb_offs_position] |
cmp eax,ted_seln_x1 |
jl .no_cur_sel |
mov edx,ted_color_wnd_work |
.no_cur_sel: |
mcall SF_DRAW_RECT |
|
call ted_get_pos_by_cursor ;¡¥à¥¬ ¯®§¨æ¨î ᨬ¢®« |
cmp ted_gp_opt,2 |
jne @f |
mov esi,1 |
ror ecx,16 |
mov bx,cx |
add ebx,0x10001 |
call ted_get_symb_color |
call ted_convert_invis_symb |
mcall SF_DRAW_TEXT ;à¨á®¢ ¨¥ ᨬ¢®« |
@@: |
popad |
ret |
endp |
|
;input: |
; edx -> pointer to text |
; edi -> 㪠§ ⥫ì áâàãªâãàã tedit |
;output: |
; ecx = color |
; if ted_mode_color=0 then ecx=ted_color_wnd_text |
align 16 |
ted_get_symb_color: |
mov ecx,ted_color_wnd_text ;§ ¤ ¥¬ 梥â ⥪áâ ¯® 㬮«ç ¨î |
|
push eax edx |
cmp ted_mode_color,0 |
je .exit |
jmp .on_first |
@@: |
call ted_iterat_perv |
cmp edx,ted_tex_1 |
jle .exit |
.on_first: |
xor eax,eax |
mov al,byte[edx+1] |
or al,al ;¥á«¨ al=0 ⮠梥⠥ ¬¥ï¥âáï |
jz @b |
|
cmp eax,ted_colors_text_count |
jge .exit |
|
shl ax,2 ;㬮¦ ¥¬ ¨¤¥ªá 梥â 4 ¡ ©â |
mov ecx,ted_text_colors ;¯à¨¡ ¢«ï¥¬ ᬥ饨¥ 1-£® 梥â |
add ecx,eax |
mov ecx,dword[ecx] ;ãáâ ¢«¨¢ ¥¬ ⥪ã騩 梥â ⥪áâ ¯® ᬥ饨î |
.exit: |
or ecx,ted_font_size |
pop edx eax |
ret |
|
;input: |
; edx = pointer to text |
; edi = pointer to tedit struct |
;description: |
; ãªæ¨ï ¯à¥®¡à §ã¥â ¥¢¨¤¨¬ë¥ ᨬ¢®«ë ¢ ¯¥ç â ¥¬ë¥ íªà ¥ |
align 16 |
ted_convert_invis_symb: |
cmp ted_mode_invis,1 |
jne .else |
cmp byte[edx],9 |
jne @f |
lea edx,[ted_symbol_tab] |
jmp .end_f |
align 4 |
@@: |
cmp byte[edx],13 |
jne @f |
mov edx,edi |
add edx,ted_offs_symbol_new_line |
@@: |
jmp .end_f |
align 4 |
.else: |
cmp byte[edx],9 |
je @f |
cmp byte[edx],13 |
je @f |
jmp .end_f |
@@: |
lea edx,[ted_symbol_space] |
.end_f: |
ret |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
ted_scroll_set_redraw: |
push eax |
mov eax,ted_scr_w |
mov dword[eax+sb_offs_redraw],1 |
mov eax,ted_scr_h |
mov dword[eax+sb_offs_redraw],1 |
pop eax |
ret |
|
align 16 |
proc ted_draw, edit:dword |
locals |
line_num dd ? |
endl |
pushad |
mov edi,[edit] |
|
mov eax,SF_DRAW_TEXT |
mov ecx,ted_text_colors |
mov ecx,dword[ecx] |
|
mov ebx,ted_wnd_l |
add ebx,ted_rec_l |
shl ebx,16 |
add ebx,ted_wnd_t |
add ebx,ted_rec_t |
add ebx,0x10001 ;¤®¡ ¢«ï¥¬ ®âáâã¯ë ¤«ï ¢ëà ¢¨¢ ¨ï ¡ãª¢ë ¯® æ¥âàã |
|
call ted_sel_normalize ;need before draw select |
mov esi,ted_scr_w |
mov esi,[esi+sb_offs_position] |
mov [line_num],esi |
|
stdcall ted_clear_line_before_draw, edi,ebx,1,esi |
call ted_get_first_visible_pos |
cmp edx,0 |
je .no_draw_text |
mov esi,1 ;¤«¨ ¢ë¢®¤¨¬®£® ⥪áâ ¯® 1-¬ã ᨬ¢®«ã |
@@: |
call ted_iterat_next |
cmp edx,ted_tex_1 |
jle .no_draw_text |
|
; *** 梥⮢ ï à §¬¥âª |
cmp ted_mode_color,0 |
je .no_col_change |
cmp byte[edx+1],0 |
je .no_col_change |
call ted_get_symb_color |
.no_col_change: |
|
cmp byte[edx],13 |
jne .no_13 |
cmp ted_mode_invis,1 |
jne .no_invis |
push edx |
mov edx,edi |
add edx,ted_offs_symbol_new_line |
int 0x40 |
pop edx |
.no_invis: |
add ebx,ted_rec_h |
;optimized output \/ |
mov eax,ted_wnd_h |
add eax,ted_wnd_t |
cmp bx,ax |
jg .no_draw_text |
mov eax,SF_DRAW_TEXT |
;optimized output /\ |
and ebx,0xffff |
ror ebx,16 |
add ebx,ted_wnd_l |
add ebx,ted_rec_l |
inc ebx |
ror ebx,16 |
inc dword[line_num] ;increment line number |
stdcall ted_clear_line_before_draw,edi,ebx,1,dword[line_num] |
call ted_opt_draw_line_left |
jmp @b |
align 4 |
.no_13: |
|
int 0x40 |
ror ebx,16 |
add ebx,ted_rec_w |
mov esi,ted_wnd_l |
add esi,ted_wnd_w |
cmp bx,si |
jl .no_opt |
call ted_opt_draw_line_right |
.no_opt: |
mov si,1 |
ror ebx,16 |
jmp @b |
.no_draw_text: |
|
inc dword[line_num] |
stdcall ted_clear_line_before_draw,edi,ebx,0,dword[line_num] |
call ted_draw_line_numbers |
call ted_draw_main_cursor |
|
;--------------------------------------------- |
; set all_redraw flag for draw all ScrollBar |
; In some cases it is necessity to draw only the area |
; of moving of a "runner", for acceleration of output - |
; in this case the flag needs to be reset to 0 (zero). |
mov eax,ted_scr_h |
mov esi,ted_scr_w |
mov dword[eax+sb_offs_all_redraw],1 |
mov dword[esi+sb_offs_all_redraw],1 |
|
; à¨á®¢ ¨¥ ¯®«®á ¯à®ªàã⪨ |
stdcall scroll_bar_horizontal.draw,eax ;[scrollbar_hor_draw] |
stdcall scroll_bar_vertical.draw,esi ;[scrollbar_ver_draw] |
; reset all_redraw flag |
mov dword[eax+sb_offs_all_redraw],0 |
mov dword[esi+sb_offs_all_redraw],0 |
;--------------------------------------------- |
|
;left-bottom square |
mov ebx,ted_wnd_l |
shl ebx,16 |
add ebx,ted_rec_l |
mov ecx,ted_wnd_t |
add ecx,ted_wnd_h |
shl ecx,16 |
mov cx,word[eax+sb_offs_size_y] |
inc cx |
mcall SF_DRAW_RECT,,,ted_color_wnd_capt ;[sc.work] |
|
;right-bottom square |
mov ebx,ted_wnd_l |
add ebx,ted_wnd_w |
shl ebx,16 |
mov bx,word[esi+sb_offs_size_x] |
inc bx |
int 0x40 |
|
cmp ted_fun_draw_panel_find,0 |
je @f |
call ted_fun_draw_panel_find |
@@: |
cmp ted_fun_draw_panel_syntax,0 |
je @f |
call ted_fun_draw_panel_syntax |
@@: |
popad |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
proc ted_draw_main_cursor |
pushad |
|
mov eax,SF_DRAW_RECT ;draw cursor |
mov ecx,ted_wnd_t ;calc rect -> y0,y1 |
add ecx,ted_rec_t |
mov edx,ted_cur_y |
imul edx,ted_rec_h |
add ecx,edx |
|
cmp ted_cur_ins,1 ;¯à®¢¥àª ०¨¬ à ¡®âë ªãàá®à (®¡ëçë© ¨«¨ ¢áâ ¢ª ) |
jne @f |
mov edx,ted_rec_h |
inc edx ;1->1, 3->2, 5->3, ... |
shr edx,1 ;edx = ¢ëá®â áâப¨ ¤¥«¥ ï 2 (ª®£¤ ªãàá®à ¥ ¯®«ë©) |
add ecx,edx |
@@: |
shl ecx,16 |
add ecx,ted_rec_h |
cmp ted_cur_ins,1 |
jne @f |
shr cx,1 ;¤¥«¨¬ ¢ëá®âã ªãàá®à 2 |
@@: |
|
mov ebx,ted_wnd_l ;calc rect -> x0,x1 |
add ebx,ted_rec_l |
mov edx,ted_cur_x |
imul edx,ted_rec_w |
add ebx,edx |
shl ebx,16 |
add ebx,ted_rec_w |
|
mov edx,ted_color_cursor |
int 0x40 ;¢ë¢®¤ ªãàá®à |
|
call ted_get_pos_by_cursor |
cmp ted_gp_opt,2 |
jne @f |
mov esi,1 |
ror ecx,16 |
mov bx,cx |
add ebx,0x10001 |
cmp ted_cur_ins,1 |
jne .no_up_tetx |
mov ecx,ted_rec_h |
inc cx ; 1->1, 3->2, 5->3, ... |
shr cx,1 |
sub bx,cx |
.no_up_tetx: |
mov ecx,ted_color_cur_text |
or ecx,ted_font_size |
call ted_convert_invis_symb |
mcall SF_DRAW_TEXT |
@@: |
|
mov ebx,ted_wnd_l |
add ebx,ted_rec_l |
shl ebx,16 |
add ebx,ted_wnd_t |
add ebx,3 |
mov ecx,ted_color_wnd_bord |
or ecx,0x80000000 |
lea edx,[txtRow] |
mcall SF_DRAW_TEXT ;¢ë¢®¤ ¯®¤¯¨á¨ 'âப ' |
|
add ebx,0x500000 |
lea edx,[txtCol] |
int 0x40 ;¢ë¢®¤ ¯®¤¯¨á¨ ' ª' |
|
cmp ted_tim_undo,0 |
je @f |
add ebx,0x500000 |
lea edx,[txtOtm] |
int 0x40 |
sub ebx,0x500000 |
@@: |
|
call ted_draw_buffer |
call ted_draw_help_f1 |
|
mov eax,47 ;draw cursor coords |
mov esi,ted_color_wnd_bord |
or esi,0x40000000 |
|
mov edx,ebx |
ror edx,16 |
sub edx,35 |
ror edx,16 |
;add edx,3 |
mov ebx,0x40000 ;Row=... |
mov ecx,ted_scr_w |
mov ecx,[ecx+sb_offs_position] |
add ecx,ted_cur_y |
inc ecx |
|
push edi |
mov edi,ted_color_wnd_work |
int 0x40 ;¢ë¢®¤ ç¨á« ⥪ã饩 áâப¨ |
pop edi |
|
;mov ebx,0x40000 ;Col=... |
mov ecx,ted_scr_h |
mov ecx,[ecx+sb_offs_position] |
add ecx,ted_cur_x |
inc ecx |
add edx,0x500000 |
push edi |
mov edi,ted_color_wnd_work |
int 0x40 ;¢ë¢®¤ ç¨á« § ª®¢ |
pop edi |
|
cmp ted_tim_undo,0 |
je @f |
mov ecx,ted_tim_undo |
add edx,0x500000 |
mov edi,ted_color_wnd_work ;¯®à⨬ ॣ¨áâà edi, ® ¢ ª®æ¥ äãªæ¨¨ í⮠㦥 ¥ ¢ ¦® |
int 0x40 ;¢ë¢®¤ ç¨á« ®â¬¥¥ëå ¤¥©á⢨© |
@@: |
|
popad |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
proc ted_draw_buffer |
pushad |
|
mov eax,ted_buffer |
cmp dword[eax],1 ;ᬮâਬ à §¬¥à ¡ãä¥à |
jl @f |
mov ebx,ted_rec_l |
add bx,300 |
cmp ebx,ted_wnd_w ;áà ¢¨¢ ¥¬ ª®®à¤¨ âã ¤«ï ¢ë¢®¤ ⥪áâ |
jge @f ;¯®¤¯¨áì ¥ ¢« §¨â ¢ ®ª® |
|
add ebx,ted_wnd_l |
shl ebx,16 |
add ebx,ted_wnd_t |
add ebx,3 |
mov ecx,ted_color_wnd_bord |
or ecx,0x40000000 |
|
mov edx,ted_buffer |
add edx,12 |
mov esi,edx |
mov edi,ted_color_wnd_work ;edi - destroy not pointer to tedit |
call tl_strlen |
;cmp eax,0 ;¡ãä¥à ¯ãáâ |
;je @f |
cmp eax,20 |
jle .crop_buf |
mov eax,20 ;®¡à¥§ª ¯®¤¯¨á¨ ¤® 20 ᨬ¢®«®¢ |
.crop_buf: |
mov esi,eax |
mcall SF_DRAW_TEXT ;¢ë¢®¤ ᮤ¥à¦¨¬®£® ¡ãä¥à |
|
sub ebx,50 shl 16 |
lea edx,[txtBuf] |
mov esi,edx |
call tl_strlen |
mov esi,eax |
xor ecx,0x40000000 ;ã¡¨à ¥¬ 梥â ä® |
mcall SF_DRAW_TEXT ;¢ë¢®¤ ¯®¤¯¨á¨ ¤«ï ¡ãä¥à |
@@: |
popad |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
proc ted_draw_help_f1 |
pushad |
cmp ted_rec_t,13 ;¬¨¨¬ «ì ï ¢ëá®â ¤«ï à¨á®¢ ¨ï á¯à ¢ª¨ |
jle @f |
;clear place before draw help |
mov ebx,ted_wnd_l |
add ebx,ted_rec_l |
shl ebx,16 |
add ebx,ted_wnd_w |
sub ebx,ted_rec_l |
mov ecx,ted_wnd_t |
add ecx,13 |
shl ecx,16 |
add ecx,9 ;9 - ¢ëá®â 0-£® èà¨äâ , áâ ¢¨âì ted_rec_h ¯®ª ¥é¥ à ® |
mcall SF_DRAW_RECT,,,ted_color_wnd_capt |
|
cmp ted_help_id,-1 |
je @f |
mov eax,ted_help_id |
ColToIndexOffset eax,edx |
|
;SetCoordinates |
mov ebx,ted_wnd_l |
add ebx,ted_rec_l |
shl ebx,16 |
add ebx,ted_wnd_t |
add ebx,13 ;=3+10 |
|
;SetTextColor |
xor eax,eax |
mov al,byte[edx+MAX_COLOR_WORD_LEN+7] |
shl ax,2 |
mov ecx,ted_text_colors |
add ecx,eax |
mov ecx,[ecx] |
or ecx,0xc0000000 ;SetTextStyles |
mov esi,edi |
mcall SF_DRAW_TEXT,,,,,ted_color_wnd_work |
mov edi,esi |
|
mov esi,edx |
call tl_strlen |
|
;*** draw help string *** |
mov ecx,ted_color_wnd_bord |
or ecx,0x80000000 |
mov edx,[edx+MAX_COLOR_WORD_LEN] |
or edx,edx |
jz @f |
add edx,ted_help_text_f1 |
inc eax |
imul eax,6 ;è¨à¨ ᨬ¢®« ¢ á¨áâ. èà¨ä⥠|
shl eax,16 |
add ebx,eax |
mcall SF_DRAW_TEXT |
@@: |
popad |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
proc ted_draw_line_numbers |
pushad |
;top panel with caption |
mov ebx,ted_wnd_l |
;add ebx,ted_rec_l |
shl ebx,16 |
add ebx,ted_wnd_w |
;sub ebx,ted_rec_l |
mov edx,ted_color_wnd_work |
mov ecx,ted_wnd_t |
shl ecx,16 |
add ecx,ted_rec_t |
mov edx,ted_color_wnd_capt |
mcall SF_DRAW_RECT |
|
;line numbers |
mov ebx,0x40000 ;format |
mov ecx,ted_scr_w |
mov ecx,[ecx+sb_offs_position] |
inc ecx |
mov edx,3 |
add edx,ted_wnd_l |
rol edx,16 |
add edx,ted_wnd_t |
add edx,ted_rec_t |
@@: |
|
push ebx ecx edx |
;left panel with numbers |
mov ebx,ted_wnd_l |
shl ebx,16 |
add ebx,ted_rec_l |
mov ecx,ted_rec_h |
rol ecx,16 |
mov cx,dx |
rol ecx,16 |
mov edx,ted_color_wnd_capt |
mcall SF_DRAW_RECT ;à¨á㥬 ¯àאַ㣮«ì¨ª ¯®¤ ®¬¥à®¬ áâப¨ |
pop edx ecx ebx |
|
mov esi,ted_color_wnd_bord |
mcall SF_DRAW_NUMBER ;à¨á㥬 ®¬¥à áâப¨ |
inc ecx |
add edx,ted_rec_h |
sub edx,ted_wnd_t |
mov esi,edx |
and esi,0xffff |
cmp esi,ted_wnd_h |
jge @f |
add edx,ted_wnd_t |
jmp @b |
align 4 |
@@: |
popad |
ret |
endp |
|
;output: |
; ah = symbol |
align 16 |
proc KeyConvertToASCII uses ebx, table:dword |
mov ebx,[table] ;convert scan to ascii |
ror ax,8 |
xor ah,ah |
add bx,ax ;? ebx,eax |
mov ah,byte[ebx] |
ret |
endp |
|
align 16 |
proc ted_draw_cur_line, edit:dword |
pushad |
mov edi,[edit] |
|
mov ebx,ted_wnd_l |
add ebx,ted_rec_l |
shl ebx,16 |
mov eax,ted_cur_y |
imul eax,ted_rec_h |
mov bx,ax |
add ebx,ted_wnd_t |
add ebx,ted_rec_t ;ebx - ª®®à¤¨ âë ¤«ï ¯àאַ㣮«ì¨ª ®ç¨á⪨ «¨¨¨ |
add ebx,0x10001 ;¤®¡ ¢«ï¥¬ ®âáâã¯ë ¤«ï ¢ëà ¢¨¢ ¨ï ¡ãª¢ë ¯® æ¥âàã |
|
call ted_sel_normalize ;need before draw select |
mov ecx,ted_cur_y |
mov eax,ted_scr_w |
add ecx,[eax+sb_offs_position] |
stdcall ted_clear_line_before_draw,edi,ebx,1,ecx |
|
mov eax,ted_scr_h |
mov esi,[eax+sb_offs_position] |
call ted_get_pos_by_coords |
|
cmp ted_gp_opt,2 |
jne .no_draw_text |
call ted_get_symb_color |
mov esi,1 ;draw 1 symbol |
@@: |
;call ted_iterat_next |
cmp edx,ted_tex_1 |
jle .no_draw_text |
|
; *** 梥⮢ ï à §¬¥âª |
cmp ted_mode_color,0 |
je .no_col_change |
cmp byte[edx+1],0 |
je .no_col_change |
call ted_get_symb_color |
.no_col_change: |
|
mov eax,SF_DRAW_TEXT |
cmp byte [edx],13 |
jne .no_13 |
cmp ted_mode_invis,1 |
jne .no_draw_text |
push edx |
mov edx,edi |
add edx,ted_offs_symbol_new_line |
int 0x40 |
pop edx |
jmp .no_draw_text |
align 4 |
.no_13: |
|
int 0x40 |
ror ebx,16 |
add ebx,ted_rec_w |
mov eax,ted_wnd_w |
add eax,ted_wnd_l ;ax = ®âáâ㯠¯® ®á¨ x |
cmp bx,ax |
jge .no_draw_text ;Opt |
ror ebx,16 |
call ted_iterat_next |
jmp @b |
align 4 |
.no_draw_text: |
|
call ted_draw_main_cursor |
popad |
ret |
endp |
|
;input: |
; eax - text need find |
; bl - first symbol to find |
; edx - first symbol pointer |
; edi - pointer to tedit struct |
;output: |
; bh - rezult |
; edx - last text position (if find sucess) |
; esi - first symbol pointer |
;description: |
; ãªæ¨ï ¯à®¢¥àï¥â ᮢ¯ ¤ ¥â «¨ ⥪áâ ¢ ¡ãä¥à¥ eax |
; á ⥪á⮬ । ªâ®à ¯® 㪠§ ⥫î edx. |
; â ¤ àâë¥ äãªæ¨¨ ( ¯à. strcmp) âãâ ¥ ¯®¤®©¤ãâ, ¯®â®¬ã çâ® |
; ¢ ¯ ¬ï⨠। ªâ®à ⥪áâ ᮤ¥à¦¨âáï ¥ ¢ ¢¨¤¥ ascii áâப. |
align 16 |
ted_get_find_rezult: |
push eax |
mov bh,1 |
mov esi,edx ;copy edx |
@@: |
cmp byte[edx],bl |
jne .no_text |
|
inc eax ;*** get next symbol (in find text) *** |
mov bl,byte[eax] |
or bl,bl |
jz @f ;end of find text |
|
call ted_iterat_next ;*** get next symbol (in editor text) *** |
cmp edx,ted_tex_1 |
jle @f ;end of editor text |
|
jmp @b |
align 4 |
.no_text: |
xor bh,bh |
mov edx,esi ;restore edx |
@@: |
pop eax |
mov bl,byte[eax] ;restore bl |
ret |
|
;input: |
; clear_o - ¥á«¨ =1 ®ç¨áâ¨âì ®¤ã áâபã, =0 ®ç¨áâ¨âì ¢á¥ áâப¨ ®ª ¤® ¨§ã |
align 16 |
proc ted_clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:dword |
pushad |
mov edi,[edit] |
mov ebx,[coords] ;ebx = x*2^16+y coords to left up point clear line |
mov esi,[numb_lin] ;esi - number text line |
|
sub ebx,0x10001 ;®â¨¬ ¥¬ ®âáâã¯ë ¤«ï ¢ëà ¢¨¢ ¨ï ¡ãª¢ë ¯® æ¥âàã |
cmp dword[clear_o],0 |
jne @f |
add ebx,ted_rec_h |
ror ebx,16 |
xor bx,bx |
add ebx,ted_wnd_l |
add ebx,ted_rec_l ;bx = ted_wnd_l+ted_rec_l |
ror ebx,16 |
@@: |
|
mov eax,ted_wnd_h |
add eax,ted_wnd_t |
cmp ax,bx |
jl .no_clear |
sub ax,bx |
|
mov cx,bx |
shl ecx,16 |
|
xor bx,bx |
add ebx,ted_wnd_w |
sub ebx,ted_rec_l |
xor cx,cx |
add ecx,ted_rec_h |
mov edx,ted_color_wnd_work |
|
cmp dword[clear_o],0 |
je .pusto |
cmp ax,cx |
jge @f |
.pusto: |
mov cx,ax |
jmp .no_select ;¥á«¨ ®ç¨á⪠®ª ¤® ¨§ã, â® ¢á¥£¤ ä®®¢ë¬ 梥⮬ |
@@: |
|
call ted_is_select |
cmp al,0 |
je .no_select |
cmp ted_seln_y0,esi |
jg .no_select |
cmp ted_seln_y1,esi |
jl .no_select |
mov edx,ted_color_select ;draw selected line |
.no_select: |
|
mcall SF_DRAW_RECT ;§ ªà ᪠¯®«®© áâப¨ 梥⮬ ä® ¨«¨ 梥⮬ ¢ë¤¥«¥¨ï |
|
call ted_is_select |
or al,al |
jz .no_clear |
|
mov al,SF_DRAW_RECT |
xor cx,cx |
add ecx,ted_rec_h |
cmp ted_seln_y0,esi |
jne @f |
push bx esi |
mov edx,ted_seln_x0 ; ¢¥àåïï ¯®«®á (§ â¨à ¥â á«¥¢ ) |
mov esi,ted_scr_h |
cmp edx,[esi+sb_offs_position] |
jle .in_wnd |
sub edx,[esi+sb_offs_position] |
imul edx,ted_rec_w |
mov bx,dx |
jmp .no_wnd |
.in_wnd: |
mov bx,0 |
.no_wnd: |
mov edx,ted_color_wnd_work |
int 0x40 |
pop esi bx |
@@: |
cmp ted_seln_y1,esi |
jne @f |
;push esi |
;¥á«¨ ¢ë¤¥«¥ ¢¥áì ä ©« âãâ ¬®¦® ᤥ« âì ¢ë室, ® ⮣¤ 㦮 ¢ëè¥ ã¡à âì jmp .no_select |
mov edx,ted_seln_x1 ; ¨¦ïï ¯®«®á (§ â¨à ¥â á¯à ¢ ) |
mov esi,ted_scr_h |
cmp edx,[esi+sb_offs_position] |
jle .in_wnd2 |
sub edx,[esi+sb_offs_position] |
imul edx,ted_rec_w |
sub bx,dx |
shl edx,16 |
add ebx,edx |
.in_wnd2: |
mov edx,ted_color_wnd_work |
int 0x40 |
;pop esi |
@@: |
|
.no_clear: |
popad |
ret |
endp |
|
;input: |
; edi = pointer to tedit struct |
;output: |
; ecx = ®¢ë© 梥â ᨬ¢®« |
; edx = pointer to symbol |
; edx = 0 if text not in screen |
align 16 |
ted_get_first_visible_pos: |
push eax ecx |
mov eax,ted_scr_w |
mov edx,ted_tex |
xor ecx,ecx |
@@: |
cmp ecx,[eax+sb_offs_position] |
je @f |
call ted_iterat_next |
cmp edx,ted_tex_1 |
jle @f |
cmp byte[edx],13 |
jne @b |
inc ecx |
jmp @b |
align 4 |
@@: |
|
cmp ecx,[eax+sb_offs_position] |
je @f |
xor edx,edx |
@@: |
cmp ecx,[eax+sb_offs_max_area] |
jle @f |
mov [eax+sb_offs_max_area],ecx |
@@: |
pop ecx eax |
call ted_opt_draw_line_left |
ret |
|
;input: |
; edx = pointer to symbol |
; edi = pointer to tedit struct |
;output: |
; ecx = 梥â ᨬ¢®« |
; edx = 㪠§ â¥«ì ¯¥à¢ë© «¥¢ë© ᨬ¢®« |
;description: |
; äãªæ¨ï 㦠¤«ï ®¯â¨¬¨§ 樨 ¢ë¢®¤ ⥪áâ |
align 16 |
proc ted_opt_draw_line_left uses ebx |
mov ebx,ted_scr_h |
mov ebx,[ebx+sb_offs_position] |
or ebx,ebx |
jz .ret_f |
push eax |
mov eax,edx |
|
cmp edx,ted_tex |
jne @f |
call ted_iterat_next |
jmp .beg_cycle |
@@: |
|
or ebx,ebx |
jz @f |
|
cmp byte[edx],13 |
jne @f |
call ted_iterat_next |
.beg_cycle: |
@@: |
cmp edx,ted_tex_1 |
jle @f |
cmp byte[edx],13 |
je @f |
or ebx,ebx |
jz @f |
;-------------------------------------- |
xor eax,eax ;eax ¡ã¤¥â ¬¥ïâìáï |
mov al,byte[edx+1] |
or al,al |
jz .no_color |
cmp eax,ted_colors_text_count |
jge .no_color |
xor ecx,ecx |
mov cl,byte[edx+1] |
shl cx,2 |
add ecx,ted_text_colors |
mov ecx,[ecx] |
.no_color: |
;-------------------------------------- |
mov eax,edx |
call ted_iterat_next |
dec ebx |
jmp @b |
align 4 |
@@: |
mov edx,eax |
pop eax |
.ret_f: |
call ted_get_symb_color |
ret |
endp |
|
;input: |
; edx = pointer to symbol |
; edi = pointer to tedit struct |
;output: |
; ecx = symbol color |
; edx = pointer to 13 symbol |
;description: |
; äãªæ¨ï 㦠¤«ï ®¯â¨¬¨§ 樨 ¢ë¢®¤ ⥪áâ |
align 16 |
proc ted_opt_draw_line_right |
push eax |
mov eax,edx |
@@: |
cmp edx,ted_tex_1 |
jle @f |
cmp byte[edx],13 |
je @f |
mov eax,edx |
call ted_iterat_next |
jmp @b |
@@: |
mov edx,eax ;perv sumbol |
call ted_get_symb_color |
|
pop eax |
ret |
endp |
|
align 16 |
proc ted_mouse, edit:dword |
pushad |
mov edi,[edit] |
|
;®¡à ¡ âë¢ ¥¬ áªà®««¨£¨ |
mov edx,ted_scr_h |
mov ecx,ted_scr_w |
|
cmp word[edx+sb_offs_delta2],0 |
jne .horizontal |
|
mov eax,[ecx+sb_offs_max_area] |
cmp eax,[ecx+sb_offs_cur_area] |
jbe .horizontal |
; mouse event for Vertical ScrollBar |
stdcall scroll_bar_vertical.mouse,ecx ;[scrollbar_ver_mouse] |
cmp dword[ecx+sb_offs_redraw],0 |
je @f |
mov dword[ecx+sb_offs_redraw],0 |
stdcall ted_draw,edi |
jmp .no_in_wnd |
@@: |
cmp word[ecx+sb_offs_delta2],0 |
jne .no_in_wnd |
.horizontal: |
mov eax,[edx+sb_offs_max_area] |
cmp eax,[edx+sb_offs_cur_area] |
jbe .other |
; mouse event for Horizontal ScrollBar |
stdcall scroll_bar_horizontal.mouse,edx ;[scrollbar_hor_mouse] |
cmp dword[edx+sb_offs_redraw],0 |
je .other |
mov dword[edx+sb_offs_redraw],0 |
stdcall ted_draw,edi |
jmp .no_in_wnd |
.other: |
cmp word[ecx+sb_offs_delta2],0 |
jne .no_in_wnd |
cmp word[edx+sb_offs_delta2],0 |
jne .no_in_wnd |
|
;®¡à ¡ âë¢ ¥¬ ®ª® । ªâ®à |
mcall SF_MOUSE_GET,SSF_BUTTON |
cmp al,1 |
jne @f |
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION |
mov ebx,ted_wnd_t |
add ebx,ted_rec_t |
cmp ax,bx |
jl @f ;y_mouse<y_wnd |
|
sub ebx,ted_rec_t |
add ebx,ted_wnd_h |
cmp bx,ax |
jl @f ;y_mouse>y_wnd |
|
mov ebx,ted_wnd_l |
add ebx,ted_rec_l |
mov ecx,eax |
shr ecx,16 |
cmp cx,bx |
jl @f ;x_mouse<x_wnd |
|
sub ebx,ted_rec_l |
add ebx,ted_wnd_w |
cmp bx,cx |
jl @f ;x_mouse>x_wnd |
|
call ted_draw_cursor_sumb |
call ted_wnd_main_click |
jmp .no_in_wnd |
@@: |
mov edx,ted_el_focus |
cmp [edx],edi |
jne @f |
call ted_wnd_main_mouse_scroll ;ᬮâਬ ¯à®ªàãâªã ª®«¥á ¬ëè¨ |
@@: |
cmp ted_drag_m,0 |
je .no_in_wnd |
mov ted_drag_m,0 |
stdcall ted_draw,edi |
cmp ted_fun_draw_panel_buttons,0 |
je .no_in_wnd |
call ted_fun_draw_panel_buttons |
.no_in_wnd: |
popad |
ret |
endp |
|
;input: |
; eax -> (x,y) |
; edi -> 㪠§ ⥫ì áâàãªâãàã tedit |
;description: |
; äãªæ¨ï ¢ë§ë¢¥âáï ¯à¨ ¦ ⨨ ª®¯ª®© ¬ëè¨ ¨ ¯®¯ ¤¥¨¨ ªãàá®à®¬ ¢ ®ª® । ªâ®à |
align 16 |
ted_wnd_main_click: |
push ebx ecx edx |
mov ebx,ted_el_focus |
mov [ebx],edi ;áâ ¢¨¬ 䮪ãá |
|
push eax |
shr eax,16 |
sub eax,ted_wnd_l |
sub eax,ted_rec_l |
|
xor edx,edx |
mov ecx,ted_rec_w |
div cx |
;inc eax |
mov ebx,ted_scr_h |
cmp eax,[ebx+sb_offs_cur_area] |
jle @f |
mov eax,[ebx+sb_offs_cur_area] |
@@: |
;dec eax |
mov ted_cur_x,eax |
pop eax |
|
push eax |
and eax,0xffff |
sub eax,ted_wnd_t |
sub eax,ted_rec_t |
|
xor edx,edx |
mov ecx,ted_rec_h |
div cx |
inc eax |
mov ebx,ted_scr_w |
cmp eax,[ebx+sb_offs_cur_area] |
jle @f |
mov eax,[ebx+sb_offs_cur_area] |
@@: |
dec eax |
mov ted_cur_y,eax |
pop eax |
|
cmp ted_drag_m,0 |
je @f |
call ted_sel_move |
jmp .sel_move |
@@: |
mov ted_drag_m,1 |
call ted_sel_start |
.sel_move: |
pop edx ecx ebx |
ret |
|
;input: |
; edi = pointer to tedit struct |
align 16 |
ted_wnd_main_mouse_scroll: |
push eax ebx ecx |
mcall SF_MOUSE_GET,SSF_SCROLL_DATA |
or ax,ax |
jz .no_scroll |
mov ecx,ted_scr_w |
mov ebx,[ecx+sb_offs_position] ;copy old scroll position |
and eax,0xffff |
btr ax,15 |
jae @f |
or eax,0xffff8000 |
@@: |
add [ecx+sb_offs_position],eax |
|
mov eax,[ecx+sb_offs_position] |
cmp eax,[ecx+sb_offs_max_area] |
jb @f |
mov [ecx+sb_offs_position],ebx ;if scroll position out of range |
jmp .no_scroll |
@@: |
stdcall ted_draw,edi |
.no_scroll: |
pop ecx ebx eax |
ret |
|
align 16 |
proc ted_save_file, edit:dword, file:dword, f_name:dword |
pushad |
mov edi,[edit] |
|
stdcall ted_can_save,edi |
;or al,al |
;jz .no_save |
|
mov ecx,ted_max_chars |
invoke mem.alloc,ecx |
push eax ;§ ¯®¬¨ ¥¬ 㪠§ â¥«ì ¢ë¤¥«¥ãî ¯ ¬ïâì |
|
mov edx,ted_tex |
xor ecx,ecx |
@@: |
call ted_iterat_next |
cmp edx,ted_tex_1 |
jle @f ;edx = ted_tex or edx = ted_tex+sizeof.symbol |
mov bl,[edx] |
mov byte[eax],bl |
inc eax |
inc ecx |
jmp @b |
align 4 |
@@: |
|
or ecx,ecx |
jz @f |
mov ebx,[file] |
pop eax ;§ ¯¨áë¢ ¥¬ 㪠§ â¥«ì ¢ë¤¥«¥ãî ¯ ¬ïâì |
mov [ebx+16],eax |
push eax ;®¡à â® § ¯®¬¨ ¥¬ 㪠§ â¥«ì ¢ë¤¥«¥ãî ¯ ¬ïâì |
mov dword[ebx], SSF_CREATE_FILE |
mov dword[ebx+4], 0 |
mov dword[ebx+8], 0 |
mov [ebx+12], ecx |
mov byte[ebx+20], 0 |
push dword[f_name] |
pop dword[ebx+21] |
mcall SF_FILE |
|
mov ted_err_save,al |
|
or eax,eax |
jz .no_msg |
;cmp eax,6 |
;je @f |
cmp ax,10 |
jl .zifra_0_9 |
mov al,'?' |
sub ax,48 |
.zifra_0_9: |
add ax,48 |
cmp ted_fun_save_err,0 |
je @f |
call ted_fun_save_err |
jmp @f |
.no_msg: |
m2m ted_tim_ls,ted_tim_ch |
@@: |
|
pop ecx ;§ ¯¨áë¢ ¥¬ 㪠§ â¥«ì ¢ë¤¥«¥ãî ¯ ¬ïâì |
invoke mem.free,ecx |
.no_save: |
popad |
ret |
endp |