t_edit: add function ted_but_replace, fix code

git-svn-id: svn://kolibrios.org@7577 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA
2019-01-23 22:08:19 +00:00
parent 16292e542a
commit cb0f3625e7
14 changed files with 271 additions and 273 deletions

View File

@@ -234,7 +234,7 @@ proc ted_key, edit:dword, table:dword, control:dword
@@:
cmp ah,KEY_F3 ;[F3]
jne @f
stdcall ted_but_find_next,edi
stdcall ted_but_find,edi,0
jmp .end_key_fun
@@:
@@ -1851,12 +1851,9 @@ ted_get_pos_by_cursor:
; 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
proc ted_get_pos_by_coords uses eax ebx
xor eax,eax ;Row
xor ebx,ebx ;Col
mov ted_gp_opt,0
mov edx,ted_tex
@@:
@@ -1888,9 +1885,8 @@ ted_get_pos_by_coords:
mov edx,ted_tex_1
;call ted_get_text_perv_pos
@@:
pop ebx eax
ret
endp
;input:
; eax = Row
@@ -2062,7 +2058,7 @@ ted_go_to_pos:
push eax ebx
mov eax,ted_scr_h
sub ecx,[eax+sb_offs_position]
cmp ecx,0 ;ted_cur_y < 0
cmp ecx,0 ;ted_cur_x < 0
jge @f
add [eax+sb_offs_position],ecx ;<3B><EFBFBD><E0AEAA><20><><EFBFBD><E0AEAB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
xor ecx,ecx
@@ -2839,33 +2835,51 @@ endp
; <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><E5AEA4><><E2A5AA> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><EBA2A0> ted_buffer_find
;input:
; f_opt = <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD> <20><><EFBFBD>᪠:
; (0 - <20><EFBFBD><E1AAA0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 - <20><EFBFBD><E1AAA0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2 - <20><EFBFBD><E1AAA0> <20><> <20><><EFBFBD><><E4A0A9>)
; (0 - <20><EFBFBD><E1AAA0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 - <20><EFBFBD><E1AAA0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2 - <20><EFBFBD><E1AAA0> <20><> <20><><EFBFBD><><E4A0A9>)
; <20><20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD> 31-<2D> <20><><EFBFBD>, <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
;output:
; eax = <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1AAAE><EFBFBD><><E2A5AA> (0 - <20><><EFBFBD>, 1 - <20><>)
align 16
proc ted_but_find, edit:dword, f_opt:dword
proc ted_but_find uses ebx ecx edx edi esi, edit:dword, f_opt:dword
push [edit]
cmp dword[f_opt],2
cmp word[f_opt],2
jne @f
call ted_but_find_first
jmp .end_f
call _but_find_first
jmp .end0
@@:
cmp dword[f_opt],0
cmp word[f_opt],0
jne @f
call ted_but_find_next
jmp .end_f
call _but_find_next
jmp .end0
@@:
cmp dword[f_opt],1
jne .end_f
call ted_but_find_perv
.end_f:
cmp word[f_opt],1
jne .end0
call _but_find_perv
.end0:
bt dword[f_opt],31
jc .end1
or eax,eax
jz @f
;⥪<><E2A5AA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD>
stdcall ted_draw,edi
jmp .end1
@@:
;⥪<><E2A5AA> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>஡㥬 <20><EFBFBD><EBA7A2><EFBFBD><><EFBFBD><E9A5AD>
cmp ted_fun_find_err,0
je .end1
call ted_fun_find_err ;<3B><><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD> <20><EFBFBD><E3ADAA><EFBFBD>
.end1:
ret
endp
;description:
; <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><E5AEA4><><E2A5AA> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><EBA2A0> ted_buffer_find
; <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><><E4A0A9>, <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD>
; <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><E5AEA4><><E2A5AA> <20><> <20><><EFBFBD><><E4A0A9>, <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><><EFBFBD> <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;output:
; eax = <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1AAAE><EFBFBD><><E2A5AA> (0 - <20><><EFBFBD>, 1 - <20><>)
; ebx, ecx, edx, edi, edi - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
align 16
proc ted_but_find_first, edit:dword
pushad
proc _but_find_first, edit:dword
mov edi,[edit]
call ted_is_select
@@ -2892,17 +2906,17 @@ proc ted_but_find_first, edit:dword
jle @f
jmp @b
@@:
call but_find
popad
call _but_find_select
ret
endp
;description:
; <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><E5AEA4><><E2A5AA> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><EBA2A0> ted_buffer_find
; <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><E5AEA4><><E2A5AA> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;output:
; eax = <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1AAAE><EFBFBD><><E2A5AA> (0 - <20><><EFBFBD>, 1 - <20><>)
; ebx, ecx, edx, edi, edi - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
align 16
proc ted_but_find_perv, edit:dword
pushad
proc _but_find_perv, edit:dword
mov edi,[edit]
call ted_is_select
or al,al
@@ -2928,17 +2942,17 @@ proc ted_but_find_perv, edit:dword
jle @f
jmp @b
@@:
call but_find
popad
call _but_find_select
ret
endp
;description:
; <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><E5AEA4><><E2A5AA> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><EBA2A0> ted_buffer_find
; <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><E5AEA4><><E2A5AA> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;output:
; eax = <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1AAAE><EFBFBD><><E2A5AA> (0 - <20><><EFBFBD>, 1 - <20><>)
; ebx, edx, edi, esi - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
align 16
proc ted_but_find_next, edit:dword
pushad
proc _but_find_next, edit:dword
mov edi,[edit]
call ted_get_pos_by_cursor
@@ -2953,16 +2967,17 @@ proc ted_but_find_next, edit:dword
jle @f
jmp @b
@@:
call but_find
popad
call _but_find_select
ret
endp
;description:
; <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD>⥫쭠<E2A5AB> <20><EFBFBD><E3ADAA><EFBFBD>, <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A5AA>
;input:
; bh = <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1AAAE><EFBFBD><><E2A5AA> (0 - <20><><EFBFBD>, 1 - <20><>)
; esi = first symbol pointer
align 16
but_find:
_but_find_select:
or bh,bh
jz @f
call ted_get_text_coords
@@ -2976,47 +2991,90 @@ but_find:
call ted_get_text_coords
mov ted_sel_x0,ebx
mov ted_sel_y0,eax
stdcall ted_draw,edi
jmp .end_find
xor eax,eax
inc eax
jmp .end0
@@:
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20><EFBFBD><EFBFBD> <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:
xor eax,eax ;<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
.end0:
ret
;input:
; rpl_text = ⥪<><E2A5AA> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; r_opt = <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD> <20><><EFBFBD>᪠:
; (0 - <20><EFBFBD><E1AAA0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 - <20><EFBFBD><E1AAA0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2 - <20><EFBFBD><E1AAA0> <20><> <20><><EFBFBD><><E4A0A9>)
; (0 - <20><EFBFBD><E1AAA0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 - <20><EFBFBD><E1AAA0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2 - <20><EFBFBD><E1AAA0> <20><> <20><><EFBFBD><><E4A0A9>)
; n_tim = 䨪<><E4A8AA><EFBFBD><E0AEA2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (0 - <20><><EFBFBD>, 1 - <20><>)
;output:
; eax = 0 - <20><> 㤠筮, 1 - 㤠筮
align 16
proc ted_but_replace uses edx edi esi, edit:dword, rpl_text:dword, r_opt:dword, n_tim:dword
mov edi,[edit]
stdcall ted_but_find, edi,[r_opt]
mov eax,[r_opt]
bts eax,31
stdcall ted_but_find, edi,eax
or eax,eax
jz .end0
xor edx,edx
cmp dword[n_tim],0
je @f
call ted_set_undo
mov edx,ted_opt_ed_change_time
@@:
stdcall ted_sel_text_del, edx
or eax,0xff
jz @f
jz .end0
mov esi,[rpl_text]
stdcall tl_strlen
or eax,eax
jz @f
jz .end0
stdcall ted_text_add, edi,esi,eax,ted_opt_ed_move_cursor
xor eax,eax
inc eax
@@:
.end0:
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 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
jg @b
align 4
.no_text:
xor bh,bh
mov edx,esi ;restore edx
@@:
pop eax
mov bl,byte[eax] ;restore bl
ret
;input:
; edi = pointer to tedit struct
align 16
@@ -3834,48 +3892,6 @@ 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 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 - <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 16