2010-04-29 20:27:40 +02:00
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD> box_lib.obj
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> TextEditor <20> <> <EFBFBD> Kolibri OS
2010-05-03 17:12:50 +02:00
; 䠩<> <20> <> <EFBFBD> <E1ABA5> <EFBFBD> <EFBFBD> ࠧ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 03.05.2010 IgorA
2010-04-29 20:27:40 +02:00
; <20> <> <20> <> <EFBFBD> <20> ਬ<EFBFBD> <E0A8AC> <EFBFBD> <EFBFBD> <EFBFBD> GPL2 <20> <> 業<EFBFBD> <E6A5AD> <EFBFBD>
;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
}
macro use_text_edit
{
TED_PANEL_NULL equ 0 ;<3B> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⮩ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TED_PANEL_FIND equ 1 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ᪠
TED_PANEL_SYNTAX equ 2 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 롮<EFBFBD> <EBA1AE> 䠩<> <E4A0A9> <EFBFBD> <20> <> <EFBFBD> ᢥ⪨
TED_PANEL_WIDTH equ 150 ;<3B> <> ਭ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
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 ; <> <E1ABAE> <20> <> <EFBFBD> <20> <> <EFBFBD> ᢥ⪨
f1 dd 0 ; <20> <> ࠢ<EFBFBD> <E0A0A2> <20> <> <> <E1ABAE>
wwo db ? ; whole words only
endc db ? ; ᨬ<> <E1A8AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> (wwo&4)
color db ? ; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 梥<> <E6A2A5>
ends
struct symbol
c db ? ; +0 ᨬ<> <E1A8AC> <EFBFBD>
col db ? ; +1 梥<>
perv dd ? ; +2
next dd ? ; +6 㪠<> <E3AAA0> ⥫<EFBFBD>
tc dd ? ; +10 <20> ६. ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <EFBFBD>
td dd ? ; +14 <20> ६. 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD>
ends
;------------------------------------------------------------------------------
2010-05-03 17:12:50 +02:00
ted_symbol_tab db 26
2010-04-29 20:27:40 +02:00
if lang eq ru
txtFindCapt db '<27> <> <EFBFBD> <EFBFBD> <EFBFBD> ',0
txtFindNext db '<27> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ',0
txtFormatCapt db '<27> <> ଠ <EFBFBD> ',0
txtFormatApply db '<27> ਬ<EFBFBD> <E0A8AC> <EFBFBD> <EFBFBD> <EFBFBD> ',0
txtRow db '<27> <> ப<EFBFBD> ',0
txtCol db '<27> <> <EFBFBD> <EFBFBD> ',0
txtOtm db '<27> ⬥<EFBFBD> <E2ACA5> ',0
txtBuf db '<27> <> <EFBFBD> <EFBFBD> <EFBFBD> :',0
else
txtFindCapt db 'Search',0
txtFindNext db 'Find next',0
txtFormatCapt db 'Format',0
txtFormatApply db 'Apply',0
txtRow db 'Rows',0
txtCol db 'Cols',0
txtOtm db 'Undo',0
txtBuf db 'Buffer:',0
end if
;------
align 4
2010-05-03 17:12:50 +02:00
EvChar db 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0
2010-04-29 20:27:40 +02:00
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
EvUpper 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 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 0,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
db 80,81,82,83,84,85,86,87,88,89,90,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 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143
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 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
EvLover 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 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111
db 112,113,114,115,116,117,118,119,120,121,122,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 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175
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 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 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
conv_table dd 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 4
proc ted_init, edit:dword
2010-05-03 17:12:50 +02:00
push eax ecx edi
mov edi,dword[edit]
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
mov ecx,sizeof.symbol
imul ecx,ted_max_chars
call mem_Alloc ;<3B> 뤥<EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ted_tex,eax
mov ted_tex_1,eax
add ted_tex_1,sizeof.symbol
add eax,ecx
mov ted_tex_end,eax
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
stdcall ted_clear, edi,1
2010-04-29 20:27:40 +02:00
;-------------------------------------------------
2010-05-03 17:12:50 +02:00
mov ecx,1024 ;1024 - <20> <> <EFBFBD> <20> <> <EFBFBD> ᨢ<EFBFBD> ted_arr_key_pos
add ecx,ted_syntax_file_size
call mem_Alloc
mov ted_arr_key_pos,eax
add eax,1024
mov ted_syntax_file,eax
stdcall ted_init_scroll_bars,edi,3
pop edi ecx eax
ret
endp
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
MIN_W_SCRL_ARE equ 3 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 쭠<EFBFBD> <20> ⮡ࠦ<E2AEA1> <E0A0A6> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
MIN_H_SCRL_ARE equ 3 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 쭠<EFBFBD> <20> ⮡ࠦ<E2AEA1> <E0A0A6> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> ਧ. <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
;input:
; opt = 1 - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 梥<> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , 2 - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 譨<EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <EFBFBD>
align 4
proc ted_init_scroll_bars, edit:dword, opt:dword
pushad
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],1
jae .no_size
mov edx,ted_wnd_l
add edx,ted_rec_l
mov word[ebx+sb_offs_start_x],dx ;<3B> <> <EFBFBD> ⠢<EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ਧ. <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
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 ;<3B> <> <EFBFBD> ⠢<EFBFBD> 塞 <20> <> <EFBFBD> 孨<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ਧ. <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
add edx,eax ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> ਭ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
mov word[esi+sb_offs_start_x],dx ;<3B> <> <EFBFBD> ⠢<EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
mov edx,ted_wnd_t
mov word[esi+sb_offs_start_y],dx ;<3B> <> <EFBFBD> ⠢<EFBFBD> 塞 <20> <> <EFBFBD> 孨<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
mov edx,ted_wnd_h
mov word[esi+sb_offs_size_y],dx ;<3B> <> <EFBFBD> ⠢<EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
sub eax,ted_rec_l
mov word[ebx+sb_offs_size_x],ax ;<3B> <> <EFBFBD> ⠢<EFBFBD> 塞 <20> <> ਭ<EFBFBD> <20> <> ਧ. <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
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 ;<3B> <> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> ࠭ <20> <> <EFBFBD> <20> <> ਧ. <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
.no_size:
popad
ret
2010-04-29 20:27:40 +02:00
endp
align 4
proc ted_delete, edit:dword
push ecx edi
mov edi,dword[edit]
mov ecx,ted_tex
call mem_Free
mov ecx,ted_arr_key_pos ;ted_syntax_file
call mem_Free
pop edi ecx
ret
endp
;input:
; eax = key kodes
align 4
proc ted_key, edit:dword, table:dword, control:dword
pushad
mov edi,dword[edit]
2010-05-03 17:12:50 +02:00
mov esi,ted_el_focus
cmp dword[esi],edi
jne .end_key_fun ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> 䮪<> <E4AEAA> <EFBFBD> <20> <> 室<EFBFBD> <E5AEA4> <20> <> <20> 㭪樨
2010-04-29 20:27:40 +02:00
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
@@:
2010-05-03 17:12:50 +02:00
cmp ah,31 ;Ctrl+S
jne @f
cmp ted_fun_on_key_ctrl_s,0
je @f
call ted_fun_on_key_ctrl_s
@@:
2010-04-29 20:27:40 +02:00
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,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,49 ;Ctrl+N
jne @f
cmp ted_fun_on_key_ctrl_n,0
je @f
call ted_fun_on_key_ctrl_n
@@:
cmp ah,199 ;Ctrl+Home
jne @f
call ted_key_ctrl_home
@@:
jmp .end_key_fun
.key_Ctrl:
2010-05-03 17:12:50 +02:00
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 ;<3B> <> 稭<EFBFBD> <E7A8AD> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
jmp .key_MoveCur
.key_Shift:
2010-04-29 20:27:40 +02:00
;-------------------------------------------------
2010-05-03 17:12:50 +02:00
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
@@:
2010-04-29 20:27:40 +02:00
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
@@:
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
@@:
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
@@:
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
@@:
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
@@:
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
@@:
;-------------------------------------------------
2010-05-03 17:12:50 +02:00
; cmp esi,0
; jne .end_key_fun
2010-04-29 20:27:40 +02:00
.key_MoveCur:
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
lea edx,[EvChar] ;<3B> <> ६ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⠡<> <E2A0A1> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⨬묨 ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
add dl,ah
jae @f
add edx,0x100 ;<3B> <20> 뫮 <20> <> ९<EFBFBD> <E0A5AF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
@@:
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 ᨬ<> <E1A8AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp ted_key_new,13
jne .dr_m_win
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
@@:
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 4
proc ted_can_save, edit:dword
push ecx edi
mov edi,dword[edit]
mov ecx,ted_tim_ch
sub ecx,ted_tim_undo
mov al,1
cmp ted_tim_ls,ecx
jne @f
dec al
@@:
pop edi ecx
ret
endp
;input:
; edi = pointer to tedit struct
;output:
; al = 1 - selected
align 4
proc ted_is_select
push 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
@@:
pop ebx
ret
endp
;input:
; edi = pointer to tedit struct
align 4
proc ted_sel_normalize
push 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
@@:
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:
pop esi ecx
ret
endp
;input:
; edi = pointer to tedit struct
;description:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> 뢠<EFBFBD> <EBA2A0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> 砫<EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
proc ted_sel_start
push 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
pop ecx eax
ret
endp
;input:
; edi = pointer to tedit struct
;description:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> 뢠<EFBFBD> <EBA2A0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> ६<EFBFBD> 饭<EFBFBD> <E9A5AD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
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:
; cl_al_mem = 1 - clear all memory
align 4
proc ted_clear, edit:dword, cl_al_mem:dword
push ecx edi
mov edi,dword[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,ted_scr_w
mov dword[ecx+sb_offs_position],0
2010-05-03 17:12:50 +02:00
mov dword[ecx+sb_offs_max_area],100 ;<3B> <> <20> <> ப <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 㬥<EFBFBD> <E3ACA5> <EFBFBD>
2010-04-29 20:27:40 +02:00
mov dword[ecx+sb_offs_redraw],1
mov ecx,ted_scr_h
mov dword[ecx+sb_offs_position],0
2010-05-03 17:12:50 +02:00
mov dword[ecx+sb_offs_max_area],100 ;<3B> <> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 㬥<EFBFBD> <E3ACA5> <EFBFBD>
2010-04-29 20:27:40 +02:00
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:
pop edi ecx
ret
endp
align 4
proc ted_init_syntax_file, edit:dword, file:dword, f_name:dword
pushad
mov edi,dword[edit]
mov eax,70
mov ebx,dword[file]
mov dword[ebx], 0
mov dword[ebx+4], 0
mov dword[ebx+8], 0
mov ecx,ted_syntax_file_size
mov dword[ebx+12], ecx
m2m dword[ebx+16], ted_syntax_file
mov byte[ebx+20], 0
m2m dword[ebx+21], dword[f_name]
int 0x40
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 䨪<EFBFBD> <E4A8AA> <EFBFBD> <EFBFBD> <> <E1ABAE> <20> <> <EFBFBD> <20> <> ࠢ<EFBFBD> <E0A0A2>
cmp eax,6
je @f
cmp eax,0
je @f
cmp ax,10
jl .zifra_0_9
mov al,'?'
sub ax,48
.zifra_0_9:
add ax,48
cmp ted_fun_init_synt_err,0
je .no_colors
call ted_fun_init_synt_err
jmp .no_colors
@@:
mov eax,edi ;<3B> <> <EFBFBD> ࠭塞 <20> <> <EFBFBD> 祭<EFBFBD> <E7A5AD> edi
mov esi,ted_syntax_file
add edi,ted_offs_count_colors
mov ecx,9*4
rep movsb
mov edi,eax ;<3B> <> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 祭<EFBFBD> <E7A5AD> 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
add ecx,ted_key_words_data
mov ted_help_text_f1,ecx
2010-05-03 17:12:50 +02:00
stdcall ted_init_scroll_bars,edi,1 ;<3B> <> <EFBFBD> 塞 梥<> <E6A2A5> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-04-29 20:27:40 +02:00
.no_colors:
popad
ret
endp
;input:
; ebx = file size
; edi = pointer to tedit struct
;description:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> 뢠<EFBFBD> <EBA2A0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⨨ 䠩<> <E4A0A9>
align 4
proc ted_on_open_file
push eax ;destination
push ecx ;for cycle
push edx ;source
push esi
stdcall ted_clear,edi,0 ;<3B> <> <EFBFBD> ⨬ <20> <> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> ⮬<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> 㤥<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 묨 <20> <> <EFBFBD> 묨
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 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,100
jge @f
mov eax,100
@@:
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 4
ted_iterat_perv:
cmp ted_tim_undo,0
je .else
push ebx
@@:
call ted_get_text_perv_pos
cmp edx,ted_tex
je @f
call ted_symbol_not_vis
cmp bl,1
je @b
cmp byte[edx],10 ;<3B> ய<EFBFBD> <E0AEAF> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 10
je @b
@@:
pop ebx
ret
.else:
call ted_get_text_perv_pos
cmp edx,ted_tex
je .endif
cmp dword [edx+14],0
jne .else
cmp byte[edx],10 ;<3B> ய<EFBFBD> <E0AEAF> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 10
je .else
.endif:
ret
;input:
; edx = pointer to symbol struct
; edi = pointer to tedit struct
;output:
; edx = pointer to 'next' visible symbol struct
align 4
ted_iterat_next:
cmp ted_tim_undo,0
je .else
push ebx
@@:
call ted_get_text_next_pos
cmp edx,ted_tex_1
jle @f
call ted_symbol_not_vis
cmp bl,1
je @b
cmp byte[edx],10 ;<3B> ய<EFBFBD> <E0AEAF> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 10
je @b
@@:
pop ebx
ret
.else:
call ted_get_text_next_pos
cmp edx,ted_tex_1
jle .endif
cmp dword [edx+14],0
jne .else
cmp byte[edx],10 ;<3B> ய<EFBFBD> <E0AEAF> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 10
je .else
.endif:
ret
;input:
; bl = symbol end of select
; edx = pointer to symbol struct
; edi = pointer to tedit struct
;description:
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <> <E1ABA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
align 4
ted_iterat_next_pos_char:
@@:
cmp bl,byte[edx]
je @f
cmp edx,ted_tex_1
jle @f
call ted_iterat_next
jmp @b
@@:
call ted_iterat_next
ret
;input:
; edx = pointer to symbol struct
; edi = pointer to tedit struct
align 4
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
@@:
ret
;input:
; edx = pointer to symbol struct
; edi = pointer to tedit struct
align 4
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
@@:
;call ted_iterat_next
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 4
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 4
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
;<3B> ᯮ<EFBFBD> 짮<EFBFBD> <ECA7AE> <EFBFBD> <EFBFBD> <EFBFBD> ॣ<> <E0A5A3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㭪樨:
;eax - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> ⠢<EFBFBD> <E2A0A2> ⥪<> <E2A5AA> <EFBFBD>
;ebx - <20> <> <EFBFBD> <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㦤, <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ⠢<EFBFBD> 塞<EFBFBD> <EFA5AC> <EFBFBD> ⥪<> <E2A5AA> <EFBFBD>
;ecx - <20> <> <EFBFBD> <20> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㦤
;edx - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
pushad
mov edi,dword[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 - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
mov dword[new_spc],eax
mov eax,ted_scr_w
mov eax,dword[eax+sb_offs_position]
add eax,ted_cur_y ;eax - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
call ted_strlen ;ebx = line len
sub dword[new_spc],ebx ;<3B> <> <20> <> <EFBFBD> <EFBFBD> 樨 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ⭨<EFBFBD> <E2ADA8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD> , 㧭<> <E3A7AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞<EFBFBD> <EFA5AC> <20> <EFBFBD> <E0AEA1> <EFBFBD> <EFBFBD>
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
pop eax
@@:
mov edx,sizeof.symbol
shl edx,1
add edx,ted_tex
@@: ;for(i=2;i<texMax;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 ;<3B> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
jg .no_cur_mov
cmp dword[new_spc],0 ;<3B> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <E0AEA1> <EFBFBD> <EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⮦<> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
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
.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 ***
cmp eax,ted_max_chars
jge @f
mov [ecx],eax ;tex[po_t].next=i; // <20> <> 뫪<EFBFBD> <20> <> ७<EFBFBD> <E0A5AD> ࠢ<EFBFBD> 塞
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 @b
@@:
call ted_text_colored
popad
ret
endp
;input:
; ecx = position to free insert cell
; edx = pointer to sumbol, when insert
; esi = pointer to added symbol
; edi = pointer to tedit struct
;output:
; ecx = position to inserted cell
align 4
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
.loop_e:
push eax ebx
mov eax,ted_tim_ch
mov dword[ecx+10],eax
mov al,byte[esi]
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; // <20> <> 뫪<EFBFBD> <20> <> ७<EFBFBD> <E0A5AD> ࠢ<EFBFBD> 塞
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
;input:
; conv_table = pointert to convert table
; edi = pointer to tedit struct
;output:
; esi = count converted symbols
;description:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ᬥ<> <E1ACA5> ॣ<> <E0A5A3> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ࠭<EFBFBD> <E0A0AD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
proc ted_convert_sel_text
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,2
ConvertIndexToPointer ecx
@@:
mov esi,[edx]
and esi,0xff
add esi,[conv_table] ;EvUpper
cmp byte [esi],0
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 4
proc ted_text_del, edit:dword, del_opt:dword
push cx edx edi
mov edi,dword[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
pop edi edx cx
ret
endp
;input:
; edi = pointer to tedit struct
;output:
; al = 1 if delete
;description:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<> <E2A5AA>
align 4
proc ted_sel_text_del, del_opt:dword
push ebx ecx edx esi
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
@@:
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:
pop esi edx ecx ebx
ret
endp
;input:
; eax = pointer to begin select
; ebx = pointer to end select
; edi = pointer to tedit struct
align 4
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 4
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 4
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 4
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 4
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 4
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 4
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 4
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 4
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 4
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 4
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 4
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 4
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 4
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 4
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 4
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 4
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:
; <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD> <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⢨<EFBFBD> , <20> <> । <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 㬥<EFBFBD> <E3ACA5> <EFBFBD>
align 4
proc ted_set_undo
mov ted_drag_k,0 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
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
je @f
;if(tex[i].tc>ted_tim_ch){ // <20> ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <20> 뫮 <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD>
cmp [edx+10],eax
jle .no_u1
mov dword [edx+10],0
mov dword [edx+14],0
mov ebx,[edx+2]
imul ebx,sizeof.symbol
add ebx,ted_tex;.next
m2m dword [ebx+6],dword [edx+6] ;tex[tex[i].perv].next=tex[i].next;
mov ebx,[edx+6]
imul ebx,sizeof.symbol
add ebx,ted_tex;.perv
m2m dword [ebx+2],dword [edx+2] ;tex[tex[i].next].perv=tex[i].perv;
.no_u1:
;else if(tex[i].td>ted_tim_ch) tex[i].td=0; // <20> 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <20> 뫮 <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD>
cmp [edx+14],eax
jle .no_u2
mov dword [edx+14],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 4
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 4
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:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> ᪠ <20> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ᢥ祭<E1A2A5> <E7A5AD> <>
align 4
proc ted_text_find_sel_color
locals
begPos dd ? ;<3B> <> 砫쭠<E7A0AB> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
endPos dd ? ;<3B> <> <EFBFBD> <EFBFBD> 筠<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
find db ? ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> / <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
f_color db ? ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 梥<> <E6A2A5> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <> <E1ABAE>
endl
push eax ebx ecx esi
;eax = word_n ⥪<> 騩 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ) <20> <EFBFBD> <E0AEA2> 塞<EFBFBD> <EFA5AC> <EFBFBD> <> <E1ABAE> <20> ᯨ᪥
;ebx = <20> <> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> 楫<> <E6A5AB>
;ecx = l_pos <20> <> <EFBFBD> <E1ABA5> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ) <20> <> <EFBFBD> 室<EFBFBD> 饣<EFBFBD> <> <E1ABAE> <20> ᯨ᪥
;esi = <20> <> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> 楫<> <E6A5AB> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <E0AEA2> 塞<EFBFBD> <EFA5AC> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <20> <> <E1ABAE>
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
.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+6]
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
.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
.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 bl,byte[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){ // <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 㬥<EFBFBD> <E3ACA5> <EFBFBD>
; cont_s=tex[eP].c;
; if(Col[word_n].wwo&2) u2= !(isalnum(cont_s)||cont_s=='_'); // <20> <> <20> 㪢.-<2D> <> <EFBFBD> <EFBFBD> . ᨬ<> <E1A8AC> <EFBFBD>
; if(u2 && Col[word_n].wwo&16) u2= !isalpha(cont_s); // <20> <> <20> <> <EFBFBD> <EFBFBD> . ᨬ<> <E1A8AC> <EFBFBD>
; 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 - <20> <> <E1ABAE> <20> <> 筮 <20> <> <EFBFBD> <E1ABA5> <EFBFBD> <EFBFBD>
.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){ // <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<> <E2A5AA> <EFBFBD>
; 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); // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 頥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> 宦<EFBFBD> <E5AEA6> <EFBFBD> <EFBFBD> <EFBFBD>
mov edx,dword[endPos]
call ted_get_text_perv_pos
jmp @f
.if_1e:
mov edx,ted_tex
@@:
pop esi ecx ebx eax
ret
endp
;input:
; edx = pointer to char (byte)
;output:
; cf=1 if symbol is...
align 4
tab_all_num db 0,0,0,0,0,0,11111111b,11b,11111110b,0xff,0xff,111b,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,111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
align 4
isalnum:
push eax ebx
mov al,byte[edx] ;al=offset
shr al,3
and eax,11111b
lea ebx,[tab_all_num]
add ebx,eax
mov ah,byte[ebx]
mov al,byte[edx] ;al=bit
and ax,111b
mov bx,word[ebx]
btr bx,ax
pop ebx eax
ret
align 4
isalpha:
push eax ebx
mov al,byte[edx] ;al=offset
shr al,3
and eax,11111b
lea ebx,[tab_alpha]
add ebx,eax
mov ah,byte[ebx]
mov al,byte[edx] ;al=bit
and ax,111b
mov bx,word[ebx]
btr bx,ax
pop ebx eax
ret
align 4
proc ted_show_help_f1, edit:dword
push eax edx edi
mov edi,dword[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
pop edi edx eax
ret
endp
;input:
; edx = position begin 'symbol' struct
; edi = pointer to tedit struct
; end_pos = position end 'symbol' struct
align 4
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 = <20> <> <EFBFBD> <20> 訡<EFBFBD> <E8A8A1>
; ebx = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢮ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
align 4
proc ted_open_file, edit:dword, file:dword, f_name:dword ;<3B> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 䠩<> <E4A0A9>
push edi
mov edi,dword[edit]
mov eax,70
mov ebx,dword[file]
mov dword[ebx], 0
mov dword[ebx+4], 0
mov dword[ebx+8], 0
m2m dword[ebx+12], ted_max_chars ;<3B> <> <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⠭<EFBFBD> <20> 䠩<> <E4A0A9>
m2m dword[ebx+16], ted_tex
mov byte[ebx+20], 0
push dword[f_name]
pop dword[ebx+21]
int 0x40
cmp eax,0
je @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:
pop edi
ret
endp
align 4
proc ted_but_select_word, edit:dword
pushad
mov edi,dword[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 4
proc ted_but_cut, edit:dword
push edi
mov edi,dword[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
@@:
pop edi
ret
endp
;output:
; al = 1 if copy text
align 4
proc ted_but_copy, edit:dword
pushad
mov edi,dword[edit]
call ted_is_select
cmp al,0
je .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
xor ecx,ecx
mov ebx,ted_buffer
;mov edx,ted_tex
@@:
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
call ted_iterat_next
jmp @b
@@:
add ecx,ted_buffer
mov byte[ebx],0
cmp ecx,0
je .end_f
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 4
proc ted_but_paste, edit:dword
push eax ebx esi edi
mov edi,dword[edit]
mov esi,ted_buffer
call tl_strlen
cmp eax,1
jl @f
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,ted_buffer,esi,ebx
stdcall ted_draw,edi
cmp ted_fun_draw_panel_buttons,0
je @f
call ted_fun_draw_panel_buttons
@@:
pop edi esi ebx eax
ret
endp
align 4
proc ted_but_sumb_upper, edit:dword
push edi esi
mov edi,dword[edit]
mov [conv_table],EvUpper
call ted_convert_sel_text
cmp esi,0
je @f
stdcall ted_draw,edi
@@:
pop esi edi
ret
endp
align 4
proc ted_but_sumb_lover, edit:dword
push edi esi
mov edi,dword[edit]
mov [conv_table],EvLover
call ted_convert_sel_text
cmp esi,0
je @f
stdcall ted_draw,edi
@@:
pop esi edi
ret
endp
align 4
proc ted_but_reverse, edit:dword
push eax ebx edi
mov edi,dword[edit]
call ted_is_select
cmp al,0
je @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
pop edi ebx eax
ret
endp
align 4
proc ted_but_undo, edit:dword
push eax edi
mov edi,dword[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
@@:
pop edi eax
ret
endp
align 4
proc ted_but_redo, edit:dword
push edi
mov edi,dword[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
@@:
pop edi
ret
endp
align 4
proc ted_but_find_next, edit:dword
pushad
mov edi,dword[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 <20> 뫮 <20> <> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 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
@@:
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> ⥪<> <E2A5AA> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp ted_fun_find_err,0
je .end_find
call ted_fun_find_err ;<3B> <> <EFBFBD> 짮<EFBFBD> <ECA7AE> ⥫<EFBFBD> ᪠<EFBFBD> <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD>
.end_find:
popad
ret
endp
;input:
; edi = pointer to tedit struct
align 4
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 4
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 4
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 4
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 4
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 4
proc ted_draw_cursor_sumb
pushad
mov eax,13 ;rect
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
push ecx
call ted_sel_normalize
mov esi,ted_scr_w
mov ecx,dword[esi+sb_offs_position]
sub ted_seln_y0,ecx
sub ted_seln_y1,ecx
mov ecx,ted_cur_y
cmp ecx,ted_seln_y0
jl .no_cur_sel
cmp ecx,ted_seln_y1
jg .no_cur_sel
mov edx,ted_color_select ;<3B> <> <EFBFBD> 塞 梥<> 䮭<> <20> <> 梥<> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD>
mov esi,ted_scr_h
cmp ecx,ted_seln_y0
jne @f
mov ecx,ted_cur_x
add ecx,dword[esi+sb_offs_position]
cmp ecx,ted_seln_x0
jge @f
mov edx,ted_color_wnd_work
@@:
mov ecx,ted_cur_y
cmp ecx,ted_seln_y1
jne .no_cur_sel
mov ecx,ted_cur_x
add ecx,dword[esi+sb_offs_position]
cmp ecx,ted_seln_x1
jl .no_cur_sel
mov edx,ted_color_wnd_work
.no_cur_sel:
pop ecx
int 0x40 ;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> אַ㣮<EFACAE> 쭨<EFBFBD> <ECADA8>
call ted_get_pos_by_cursor ;<3B> <> ६ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
cmp ted_gp_opt,2
jne @f
mov eax,4
mov esi,1
ror ecx,16
mov bx,cx
add ebx,0x10001
call ted_get_symb_color
call ted_convert_invis_symb
int 0x40 ;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
@@:
popad
ret
endp
;input:
; edx -> pointer to text
; edi -> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> tedit
;output:
; ecx = color
; if ted_mode_color=0 then ecx=ted_color_wnd_text
align 4
ted_get_symb_color:
mov ecx,ted_color_wnd_text ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 梥<> ⥪<> <E2A5AA> <EFBFBD> <20> <> 㬮<> 砭<EFBFBD> <E7A0AD>
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]
cmp al,0 ;<3B> al=0 <20> <> 梥<> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
je @b
cmp eax,ted_colors_text_count
jge .exit
shl ax,2 ;㬭<> <E3ACAD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 梥<> <E6A2A5> <20> <> 4 <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
mov ecx,ted_text_colors ;<3B> ਡ<EFBFBD> <E0A8A1> <EFBFBD> 塞 ᬥ饭<E1ACA5> <E9A5AD> 1-<2D> <> 梥<> <E6A2A5>
add ecx,eax
mov ecx,dword[ecx] ;<3B> <> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<> 騩 梥<> ⥪<> <E2A5AA> <EFBFBD> <20> <> ᬥ饭<E1ACA5> <E9A5AD>
.exit:
pop edx eax
ret
;input:
; edx = pointer to text
; edi = pointer to tedit struct
;description:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> ८<EFBFBD> ࠧ<EFBFBD> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> ⠥<EFBFBD> <E2A0A5> <EFBFBD> <20> <> <20> <> ࠭<EFBFBD>
align 4
ted_convert_invis_symb:
2010-05-03 17:12:50 +02:00
cmp ted_mode_invis,1
jne .end_f
cmp byte[edx],9
jne @f
lea edx,[ted_symbol_tab]
@@:
cmp byte[edx],13
jne @f
mov edx,edi
add edx,ted_offs_symbol_new_line
@@:
.end_f:
ret
2010-04-29 20:27:40 +02:00
;input:
; edi = pointer to tedit struct
align 4
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 4
proc ted_draw, edit:dword
2010-05-03 17:12:50 +02:00
locals
line_num dd ?
endl
pushad
mov edi,dword[edit]
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
mov eax,4 ;draw text
mov ecx,ted_text_colors
mov ecx,dword[ecx]
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㪢<EFBFBD> <20> <> 業<> <E6A5AD> <EFBFBD>
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
call ted_sel_normalize ;need before draw select
mov esi,ted_scr_w
mov esi,dword[esi+sb_offs_position]
mov dword[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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 뢮<EFBFBD> <EBA2AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<> <E2A5AA> <EFBFBD> <20> <> 1-<2D> <> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
@@:
call ted_iterat_next
cmp edx,ted_tex_1
jle .no_draw_text
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
; *** 梥⮢<E6A2A5> <E2AEA2> ࠧ<> <E0A0A7> ⪠
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:
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
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,4
;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
.no_13:
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
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:
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
stdcall ted_clear_line_before_draw,edi,ebx,0,dword[line_num]
call ted_draw_line_numbers
call ted_draw_main_cursor
2010-04-29 20:27:40 +02:00
;---------------------------------------------
; 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
; <20> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> ப<EFBFBD> <E0AEAA> ⪨
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
mov edx,ted_color_wnd_capt ;[sc.work]
mov eax,13
int 0x40
;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 4
proc ted_draw_main_cursor
pushad
mov eax,13 ;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 ;<3B> <EFBFBD> ઠ ० <> <E0A5A6> <EFBFBD> ࠡ<> <E0A0A1> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> ⠢<EFBFBD> <E2A0A2> )
jne @f
mov edx,ted_rec_h
inc edx ;1->1, 3->2, 5->3, ...
shr edx,1 ;edx = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 2 (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
add ecx,edx
@@:
shl ecx,16
add ecx,ted_rec_h
cmp ted_cur_ins,1
jne @f
shr cx,1 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 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 ;<3B> 뢮<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
call ted_get_pos_by_cursor
cmp ted_gp_opt,2
jne @f
mov eax,4 ;draw text
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
call ted_convert_invis_symb
int 0x40
@@:
mov eax,4
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]
int 0x40 ;<3B> 뢮<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '<27> <> ப<EFBFBD> '
add ebx,0x500000
lea edx,[txtCol]
int 0x40 ;<3B> 뢮<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> '<27> <> <EFBFBD> <EFBFBD> '
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,dword[ecx+sb_offs_position]
add ecx,ted_cur_y
inc ecx
push edi
mov edi,ted_color_wnd_work
int 0x40 ;<3B> 뢮<EFBFBD> <20> <> ⥪<> 饩 <20> <> ப<EFBFBD>
pop edi
;mov ebx,0x40000 ;Col=...
mov ecx,ted_scr_h
mov ecx,dword[ecx+sb_offs_position]
add ecx,ted_cur_x
inc ecx
add edx,0x500000
push edi
mov edi,ted_color_wnd_work
int 0x40 ;<3B> 뢮<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
pop edi
cmp ted_tim_undo,0
je @f
mov ecx,ted_tim_undo
add edx,0x500000
2010-05-03 17:12:50 +02:00
mov edi,ted_color_wnd_work ;<3B> <> <EFBFBD> ⨬ ॣ<> <E0A5A3> <EFBFBD> <EFBFBD> edi, <20> <> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㭪樨 <20> <> <EFBFBD> 㦥 <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
int 0x40 ;<3B> 뢮<EFBFBD> <20> <> <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⢨<EFBFBD>
2010-04-29 20:27:40 +02:00
@@:
popad
ret
endp
;input:
; edi = pointer to tedit struct
proc ted_draw_buffer
pushad
mov eax,ted_buffer
cmp byte[eax],0 ;ᬮ<> ਬ 1-<2D> ᨬ<> <E1A8AC> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
je @f
2010-05-03 17:12:50 +02:00
mov ebx,ted_rec_l
2010-04-29 20:27:40 +02:00
add bx,300
2010-05-03 17:12:50 +02:00
cmp ebx,ted_wnd_w ;<3B> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> 뢮<EFBFBD> ⥪<> <E2A5AA> <EFBFBD>
jge @f ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD>
add ebx,ted_wnd_l
2010-04-29 20:27:40 +02:00
shl ebx,16
add ebx,ted_wnd_t
add ebx,3
mov ecx,ted_color_wnd_bord
or ecx,0x40000000
mov edx,ted_buffer
mov esi,edx
mov edi,ted_color_wnd_work ;edi - destroy not pointer to tedit
call tl_strlen
;cmp eax,0 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
;je @f
cmp eax,20
jle .crop_buf
mov eax,20 ;<3B> <> १<EFBFBD> <E0A5A7> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 20 ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <EFBFBD>
.crop_buf:
mov esi,eax
mov eax,4
int 0x40 ;<3B> 뢮<EFBFBD> ᮤ<> ন<EFBFBD> <E0A6A8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
sub ebx,50 shl 16
lea edx,[txtBuf]
mov esi,edx
call tl_strlen
mov esi,eax
mov eax,4
xor ecx,0x40000000 ;㡨ࠥ<E3A1A8> 梥<> 䮭<>
int 0x40 ;<3B> 뢮<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
@@:
popad
ret
endp
;input:
; edi = pointer to tedit struct
align 4
proc ted_draw_help_f1
2010-05-03 17:12:50 +02:00
pushad
cmp ted_rec_t,13 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 쭠<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> ࠢ<EFBFBD> <E0A0A2>
jle @f
mov eax,13 ;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,ted_rec_h
mov edx,ted_color_wnd_capt
int 0x40
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
cmp ted_help_id,-1
je @f
mov eax,ted_help_id
ColToIndexOffset eax,edx
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
;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+6]
shl ax,2
mov ecx,ted_text_colors
add ecx,eax
mov ecx,dword[ecx]
or ecx,0xc0000000 ;SetTextStyles
mov esi,edi
mov edi,ted_color_wnd_work
mov eax,4
int 0x40
mov edi,esi
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
;*** draw help string ***
mov ecx,ted_color_wnd_bord
or ecx,0x80000000
mov edx,dword[edx+MAX_COLOR_WORD_LEN]
cmp edx,0
je @f
add edx,ted_help_text_f1
add ebx,0x500000
int 0x40
@@:
popad
ret
2010-04-29 20:27:40 +02:00
endp
;input:
; edi = pointer to tedit struct
align 4
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 eax,13
mov edx,ted_color_wnd_capt
int 0x40
;line numbers
mov ebx,0x40000 ;format
mov ecx,ted_scr_w
mov ecx,dword[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 eax,13
mov edx,ted_color_wnd_capt
int 0x40 ;<3B> <> <EFBFBD> 㥬 <20> <> אַ㣮<EFACAE> 쭨<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
pop edx ecx ebx
mov eax,47
mov esi,ted_color_wnd_bord
int 0x40 ;<3B> <> <EFBFBD> 㥬 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
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
@@:
popad
ret
endp
;output:
; ah = symbol
align 4
proc KeyConvertToASCII, table:dword
push ebx
mov ebx,dword[table] ;convert scan to ascii
ror ax,8
xor ah,ah
add bx,ax
mov ah,byte[ebx]
pop ebx
ret
endp
align 4
proc ted_draw_cur_line, edit:dword
pushad
mov edi,dword[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 - <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> אַ㣮<EFACAE> 쭨<EFBFBD> <ECADA8> <20> <> <EFBFBD> <EFBFBD> ⪨ <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
add ebx,0x10001 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㪢<EFBFBD> <20> <> 業<> <E6A5AD> <EFBFBD>
call ted_sel_normalize ;need before draw select
mov ecx,ted_cur_y
mov eax,ted_scr_w
add ecx,dword[eax+sb_offs_position]
stdcall ted_clear_line_before_draw,edi,ebx,1,ecx
mov eax,ted_scr_h
mov esi,dword[eax+sb_offs_position]
call ted_get_pos_by_coords
cmp ted_gp_opt,2
jne .no_draw_text
; mov eax,4 ;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
; *** 梥⮢<E6A2A5> <E2AEA2> ࠧ<> <E0A0A7> ⪠
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,4 ;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
.no_13:
int 0x40
ror ebx,16
add ebx,ted_rec_w
mov eax,ted_wnd_w
add eax,ted_wnd_l ;ax = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> x
cmp bx,ax
jge .no_draw_text ;Opt
ror ebx,16
call ted_iterat_next
jmp @b
.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:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<> <E1AEA2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ⥪<> <E2A5AA> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> eax
; <20> ⥪<> ⮬ ।<> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 㪠<> <E3AAA0> ⥫<EFBFBD> edx.
; <20> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㭪樨 (<28> <> <EFBFBD> <EFBFBD> . strcmp) <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> ⮬<EFBFBD> <20> <> <EFBFBD>
; <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ।<> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<> <E2A5AA> ᮤ<> ন<EFBFBD> <E0A6A8> <EFBFBD> <20> <> <20> <20> <> <EFBFBD> <EFBFBD> ascii <20> <> ப.
align 4
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]
cmp bl,0
je @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
.no_text:
xor bh,bh
mov edx,esi ;restore edx
@@:
pop eax
mov bl,byte[eax] ;restore bl
ret
;input:
; clear_o - <20> =1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD> , =0 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD>
align 4
proc ted_clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:dword
pushad
mov edi,dword[edit]
mov ebx,dword[coords] ;ebx = x*2^16+y coords to left up point clear line
mov esi,dword[numb_lin] ;esi - number text line
sub ebx,0x10001 ;<3B> ⭨<EFBFBD> <E2ADA8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㪢<EFBFBD> <20> <> 業<> <E6A5AD> <EFBFBD>
cmp dword[clear_o],0
jne @f
add ebx,ted_rec_h
inc esi
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
@@:
call ted_is_select
cmp al,0
je @f
cmp ted_seln_y0,esi
jg @f
cmp ted_seln_y1,esi
jl @f
mov edx,ted_color_select ;draw selected line
@@:
mov eax,13 ;rect
int 0x40
call ted_is_select
cmp al,0
je .no_clear
mov al,13 ;rect
xor cx,cx
add ecx,ted_rec_h
cmp ted_seln_y0,esi
jne @f
push bx esi
mov edx,ted_seln_x0 ; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> ࠥ<EFBFBD> <> <E1ABA5> )
mov esi,ted_scr_h
cmp edx,dword[esi+sb_offs_position]
jle .in_wnd
sub edx,dword[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
mov edx,ted_seln_x1 ; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> ࠥ<EFBFBD> <20> <> ࠢ<EFBFBD> )
mov esi,ted_scr_h
cmp edx,dword[esi+sb_offs_position]
jle .in_wnd2
sub edx,dword[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 = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 梥<> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
; edx = pointer to symbol
; edx = 0 if text not in screen
align 4
ted_get_first_visible_pos:
push eax ecx
mov eax,ted_scr_w
mov edx,ted_tex
xor ecx,ecx
@@:
cmp ecx,dword[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
@@:
cmp ecx,dword[eax+sb_offs_position]
je @f
xor edx,edx
@@:
cmp ecx,dword[eax+sb_offs_max_area]
jle @f
mov dword[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 = 梥<> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
; edx = 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD>
;description:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> 㦭<EFBFBD> <20> <> <EFBFBD> <20> <> ⨬<EFBFBD> <E2A8AC> <EFBFBD> 樨 <20> 뢮<EFBFBD> <EBA2AE> ⥪<> <E2A5AA> <EFBFBD>
align 4
proc ted_opt_draw_line_left
push ebx
mov ebx,ted_scr_h
mov ebx,dword[ebx+sb_offs_position]
cmp ebx,0
je .ret_f
push eax
mov eax,edx
cmp edx,ted_tex
jne @f
call ted_iterat_next
jmp .beg_cycle
@@:
cmp ebx,0
je @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
cmp ebx,0
je @f
;--------------------------------------
xor eax,eax ;eax <20> 㤥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov al,byte[edx+1]
cmp al,0
je .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,dword[ecx]
.no_color:
;--------------------------------------
mov eax,edx
call ted_iterat_next
dec ebx
jmp @b
@@:
mov edx,eax
pop eax
.ret_f:
call ted_get_symb_color
pop ebx
ret
endp
;input:
; edx = pointer to symbol
; edi = pointer to tedit struct
;output:
; ecx = symbol color
; edx = pointer to 13 symbol
;description:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> 㦭<EFBFBD> <20> <> <EFBFBD> <20> <> ⨬<EFBFBD> <E2A8AC> <EFBFBD> 樨 <20> 뢮<EFBFBD> <EBA2AE> ⥪<> <E2A5AA> <EFBFBD>
align 4
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 4
proc ted_mouse, edit:dword
pushad
mov edi,dword[edit]
;<3B> <> ࠡ<EFBFBD> <E0A0A1> 뢠<EFBFBD> <EBA2A0> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
mov edx,ted_scr_h
mov ecx,ted_scr_w
cmp word[edx+sb_offs_delta2],0
jne .horizontal
mov eax,dword[ecx+sb_offs_max_area]
cmp eax,dword[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,dword[edx+sb_offs_max_area]
cmp eax,dword[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
;<3B> <> ࠡ<EFBFBD> <E0A0A1> 뢠<EFBFBD> <EBA2A0> <20> <> <EFBFBD> <EFBFBD> ।<> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mcall 37,2 ;get mouse buttons
cmp al,1
jne @f
mcall 37,1 ;get mouse coords
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
@@:
2010-05-03 17:12:50 +02:00
mov edx,ted_el_focus
cmp dword[edx],edi
jne @f
call ted_wnd_main_mouse_scroll ;ᬮ<> ਬ <20> <> <20> ப<EFBFBD> <E0AEAA> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
@@:
2010-04-29 20:27:40 +02:00
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 -> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> tedit
;description:
; <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> <20> <> <EFBFBD> 뢥<EFBFBD> <EBA2A5> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⨨ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> ।<> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
align 4
ted_wnd_main_click:
2010-05-03 17:12:50 +02:00
push ebx ecx edx
mov ebx,ted_el_focus
mov dword[ebx],edi ;<3B> ⠢<EFBFBD> <E2A0A2> 䮪<> <E4AEAA>
2010-04-29 20:27:40 +02:00
push eax
shr eax,16
and eax,0xffff
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,dword[ebx+sb_offs_cur_area]
jle @f
mov eax,dword[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,dword[ebx+sb_offs_cur_area]
jle @f
mov eax,dword[ebx+sb_offs_cur_area]
@@:
dec eax
mov ted_cur_y,eax
pop eax
2010-05-03 17:12:50 +02:00
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
2010-04-29 20:27:40 +02:00
;input:
; edi = pointer to tedit struct
align 4
ted_wnd_main_mouse_scroll:
push eax ebx ecx
2010-05-03 17:12:50 +02:00
mcall 37,7 ;<3B> ப<EFBFBD> <E0AEAA> ⪠ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2010-04-29 20:27:40 +02:00
cmp ax,0
je .no_scroll
mov ecx,ted_scr_w
mov ebx,dword[ecx+sb_offs_position] ;copy old scroll position
and eax,0xffff
btr ax,15
jae @f
or eax,0xffff8000
2010-05-03 17:12:50 +02:00
@@:
add dword[ecx+sb_offs_position],eax
2010-04-29 20:27:40 +02:00
2010-05-03 17:12:50 +02:00
mov eax,[ecx+sb_offs_position]
cmp eax,[ecx+sb_offs_max_area]
jb @f
mov dword[ecx+sb_offs_position],ebx ;if scroll position out of range
jmp .no_scroll
@@:
stdcall ted_draw,edi
2010-04-29 20:27:40 +02:00
.no_scroll:
pop ecx ebx eax
ret
align 4
proc ted_but_save_file, edit:dword, file:dword, f_name:dword
pushad
mov edi,dword[edit]
stdcall ted_can_save,edi
cmp al,0
je .no_save
mov ecx,ted_max_chars
call mem_Alloc
push eax ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
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
@@:
cmp ecx,0
je @f
mov ebx,dword[file]
pop eax ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 뢠<EFBFBD> <EBA2A0> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov dword[ebx+16],eax
push eax ;<3B> <> <EFBFBD> <EFBFBD> ⭮ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov eax,70
mov dword[ebx], 2
mov dword[ebx+4], 0
mov dword[ebx+8], 0
mov dword[ebx+12], ecx
mov byte[ebx+20], 0
push dword[f_name]
pop dword[ebx+21]
int 0x40
mov ted_err_save,al
cmp eax,0
je .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 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 뢠<EFBFBD> <EBA2A0> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
call mem_Free
.no_save:
popad
ret
endp
}