forked from KolibriOS/kolibrios
various fixes in tinypad
git-svn-id: svn://kolibrios.org@5579 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
8ac94ee0c0
commit
f080d95989
@ -1,288 +1,184 @@
|
|||||||
;-----------------------------------------------------------------------------
|
|
||||||
put_to_clipboard:
|
put_to_clipboard:
|
||||||
; we have allocated memory?
|
|
||||||
mov edi,[clipboard_buf]
|
mov edi,[clipboard_buf]
|
||||||
test edi,edi
|
test edi,edi
|
||||||
jz .end
|
jz .end
|
||||||
; convert from Tinypad format to the kernel clipboard format
|
add edi,12
|
||||||
add edi,3*4
|
|
||||||
mov esi,[copy_buf]
|
mov esi,[copy_buf]
|
||||||
mov ecx,[copy_count]
|
mov edx,[copy_count]
|
||||||
|
mov ax,0x0a0d ; End of String
|
||||||
cld
|
cld
|
||||||
;--------------------------------------
|
@@: ; convert format from Tinypad to clipboard
|
||||||
@@:
|
mov ecx,[esi]
|
||||||
push ecx
|
add esi,sizeof.EDITOR_LINE_DATA
|
||||||
lodsd
|
rep movsb
|
||||||
mov ecx,eax
|
|
||||||
lodsw
|
|
||||||
rep movsb
|
|
||||||
mov ax,0x0a0d ; EOS (end of string)
|
|
||||||
stosw
|
stosw
|
||||||
; mov ax,0x0d
|
dec edx
|
||||||
; stosb
|
|
||||||
pop ecx
|
|
||||||
dec ecx
|
|
||||||
jnz @b
|
jnz @b
|
||||||
|
|
||||||
sub edi,2 ; delete last EOS (0x0a0d)
|
sub edi,2 ; delete last EoS
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
stosb
|
stosb
|
||||||
; building the clipboard slot header
|
; build the clipboard slot header
|
||||||
mov esi,[clipboard_buf]
|
mov esi,[clipboard_buf]
|
||||||
sub edi,esi
|
sub edi,esi
|
||||||
mov [esi],edi ; clipboard area size
|
mov [esi],edi ; clipboard area size
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov [esi+4],eax ; ; type 'text'
|
mov [esi+4],eax ; type 'text'
|
||||||
inc eax
|
inc eax
|
||||||
mov [esi+8],eax ; cp866 text encoding
|
mov [esi+8],eax ; cp866 text encoding
|
||||||
; put slot to the kernel clipboard
|
; put slot to the kernel clipboard
|
||||||
mov edx,[clipboard_buf]
|
mov edx,[clipboard_buf]
|
||||||
mov ecx,[edx]
|
mov ecx,[edx]
|
||||||
mcall 54,2
|
mcall 54,2
|
||||||
; remove unnecessary memory area
|
stdcall mem.Free,[clipboard_buf]
|
||||||
xor eax,eax
|
stdcall mem.Free,[copy_buf]
|
||||||
stdcall mem.ReAlloc,[clipboard_buf],eax
|
|
||||||
mov [clipboard_buf],eax
|
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
|
mov [copy_buf],eax
|
||||||
mov [copy_size],eax
|
mov [copy_size],eax
|
||||||
mov [copy_count],eax
|
mov [copy_count],eax
|
||||||
stdcall mem.ReAlloc,[copy_buf],eax
|
mov [clipboard_buf],eax
|
||||||
mov [copy_buf],eax
|
|
||||||
;--------------------------------------
|
|
||||||
.end:
|
.end:
|
||||||
ret
|
ret
|
||||||
;-----------------------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
get_from_clipboard:
|
get_from_clipboard:
|
||||||
|
mov [copy_size],0
|
||||||
pushad
|
pushad
|
||||||
mcall 54,0
|
mcall 54,0
|
||||||
; no slots of clipboard ?
|
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jz .exit
|
jz .exit ; no slots of clipboard
|
||||||
; main list area not found ?
|
|
||||||
inc eax
|
inc eax
|
||||||
test eax,eax
|
jz .exit ; main list area not found
|
||||||
jz .exit
|
|
||||||
|
|
||||||
sub eax,2
|
sub eax,2
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
mcall 54,1
|
mcall 54,1
|
||||||
; main list area not found ?
|
|
||||||
inc eax
|
inc eax
|
||||||
test eax,eax
|
jz .exit ; main list area not found
|
||||||
jz .exit
|
|
||||||
; error ?
|
|
||||||
sub eax,2
|
sub eax,2
|
||||||
test eax,eax
|
jz .exit ; error
|
||||||
jz .exit
|
|
||||||
|
|
||||||
inc eax
|
inc eax
|
||||||
mov [clipboard_buf],eax
|
mov [clipboard_buf],eax
|
||||||
; check contents of container
|
; check contents of container
|
||||||
mov ebx,[eax+4]
|
mov ebx,[eax+4]
|
||||||
; check for text
|
|
||||||
test ebx,ebx
|
test ebx,ebx
|
||||||
jnz .no_valid_text
|
jnz .freeMemory ; not text
|
||||||
|
|
||||||
mov ebx,[eax+8]
|
mov ebx,[eax+8]
|
||||||
; check for cp866
|
dec ebx
|
||||||
cmp bl,1
|
jnz .freeMemory ; not cp866
|
||||||
jz .yes_valid_text
|
mov edi,[clipboard_buf]
|
||||||
|
mov al, 10
|
||||||
.no_valid_text:
|
mov ecx,[edi]
|
||||||
xor eax,eax
|
add edi,12
|
||||||
mov [copy_size],eax
|
sub ecx,12
|
||||||
jmp .remove_area
|
jbe .freeMemory
|
||||||
;--------------------------------------
|
cmp byte[edi],0
|
||||||
.yes_valid_text:
|
jz .freeMemory
|
||||||
call know_number_line_breaks
|
@@:
|
||||||
mov [copy_count],ebx
|
dec ecx
|
||||||
; correction of erroneous buffer size
|
cmp byte[edi+ecx],0
|
||||||
mov eax,[clipboard_buf]
|
jz @b
|
||||||
sub esi,eax
|
inc ecx
|
||||||
mov [eax],esi
|
push ecx
|
||||||
; multiple by 6
|
cld
|
||||||
shl ebx,1
|
@@: ; count strings
|
||||||
lea ebx,[ebx*3]
|
repnz scasb
|
||||||
; calculating a desired size
|
inc ebx
|
||||||
mov eax,[clipboard_buf]
|
test ecx,ecx
|
||||||
mov eax,[eax]
|
jnz @b
|
||||||
sub eax,4*3
|
dec edi
|
||||||
add eax,ebx
|
cmp byte[edi],10
|
||||||
mov [copy_size],eax
|
jnz @f
|
||||||
|
inc ebx
|
||||||
stdcall mem.ReAlloc,[copy_buf],eax
|
@@:
|
||||||
mov [copy_buf],eax
|
mov [copy_count],ebx
|
||||||
|
lea eax,[ebx*4+ebx+2]
|
||||||
call convert_clipboard_buf_to_copy_buf
|
add eax,[esp]
|
||||||
; remove unnecessary memory area
|
stdcall mem.Alloc,eax
|
||||||
.remove_area:
|
mov [copy_buf],eax
|
||||||
xor eax,eax
|
mov esi,eax
|
||||||
stdcall mem.ReAlloc,[clipboard_buf],eax
|
mov edi,[clipboard_buf]
|
||||||
mov [clipboard_buf],eax
|
add edi,12
|
||||||
;--------------------------------------
|
pop ecx
|
||||||
|
mov ebx,ecx
|
||||||
|
mov al, 10
|
||||||
|
.stringSize: ; convert format from clipboard to Tinypad
|
||||||
|
repnz scasb
|
||||||
|
sub ebx,ecx
|
||||||
|
mov edx,edi
|
||||||
|
sub edi,ebx
|
||||||
|
dec ebx
|
||||||
|
test ecx,ecx
|
||||||
|
jnz .stringEnd
|
||||||
|
.lastString:
|
||||||
|
cmp byte[edi+ebx],10
|
||||||
|
jz .stringEnd
|
||||||
|
cmp byte[edi+ebx],0
|
||||||
|
jnz @f
|
||||||
|
dec ebx
|
||||||
|
jmp .lastString
|
||||||
|
.stringEnd:
|
||||||
|
dec ebx
|
||||||
|
cmp byte[edi+ebx],13
|
||||||
|
jz .copyString
|
||||||
|
@@:
|
||||||
|
inc ebx
|
||||||
|
.copyString:
|
||||||
|
mov [esi],ebx
|
||||||
|
add esi,sizeof.EDITOR_LINE_DATA
|
||||||
|
xchg ebx,ecx
|
||||||
|
xchg esi,edi
|
||||||
|
rep movsb
|
||||||
|
mov ecx,ebx
|
||||||
|
jcxz .done
|
||||||
|
mov esi,edi
|
||||||
|
mov edi,edx
|
||||||
|
jmp .stringSize
|
||||||
|
.done:
|
||||||
|
cmp esi,edx
|
||||||
|
jz @f
|
||||||
|
inc ecx
|
||||||
|
mov [edi],ecx
|
||||||
|
add edi,sizeof.EDITOR_LINE_DATA
|
||||||
|
mov byte[edi],' '
|
||||||
|
inc edi
|
||||||
|
@@:
|
||||||
|
sub edi,[copy_buf]
|
||||||
|
mov [copy_size],edi
|
||||||
|
.freeMemory:
|
||||||
|
stdcall mem.Free,[clipboard_buf]
|
||||||
|
mov [clipboard_buf],0
|
||||||
.exit:
|
.exit:
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
;-----------------------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
check_clipboard_for_popup:
|
check_clipboard_for_popup:
|
||||||
pushad
|
pushad
|
||||||
mov [popup_valid_text],0
|
mov [popup_valid_text],0
|
||||||
mcall 54,0
|
mcall 54,0
|
||||||
; no slots of clipboard ?
|
|
||||||
test eax,eax
|
test eax,eax
|
||||||
jz .exit
|
jz .exit ; no slots of clipboard
|
||||||
; main list area not found ?
|
|
||||||
inc eax
|
inc eax
|
||||||
test eax,eax
|
jz .exit ; main list area not found
|
||||||
jz .exit
|
|
||||||
|
|
||||||
sub eax,2
|
sub eax,2
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
mcall 54,1
|
mcall 54,1
|
||||||
; main list area not found ?
|
|
||||||
inc eax
|
inc eax
|
||||||
test eax,eax
|
jz .exit ; main list area not found
|
||||||
jz .exit
|
|
||||||
; error ?
|
|
||||||
sub eax,2
|
sub eax,2
|
||||||
test eax,eax
|
jz .exit ; error
|
||||||
jz .exit
|
|
||||||
|
|
||||||
inc eax
|
inc eax
|
||||||
mov [clipboard_buf],eax
|
mov [clipboard_buf],eax
|
||||||
; check contents of container
|
; check contents of container
|
||||||
mov ebx,[eax+4]
|
mov ebx,[eax+4]
|
||||||
; check for text
|
|
||||||
test ebx,ebx
|
test ebx,ebx
|
||||||
jnz .remove_area
|
jnz .freeMemory ; not text
|
||||||
|
|
||||||
mov ebx,[eax+8]
|
mov ebx,[eax+8]
|
||||||
; check for cp866
|
dec ebx
|
||||||
cmp bl,1
|
jnz .freeMemory ; not cp866
|
||||||
jnz .remove_area
|
|
||||||
|
|
||||||
.yes_valid_text:
|
|
||||||
mov [popup_valid_text],1
|
mov [popup_valid_text],1
|
||||||
; remove unnecessary memory area
|
.freeMemory:
|
||||||
.remove_area:
|
stdcall mem.Free,[clipboard_buf]
|
||||||
xor eax,eax
|
mov [clipboard_buf],0
|
||||||
stdcall mem.ReAlloc,[clipboard_buf],eax
|
|
||||||
mov [clipboard_buf],eax
|
|
||||||
;--------------------------------------
|
|
||||||
.exit:
|
.exit:
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
convert_clipboard_buf_to_copy_buf:
|
|
||||||
mov edi,[copy_buf]
|
|
||||||
mov ebx,edi
|
|
||||||
add edi,6
|
|
||||||
mov eax,[clipboard_buf]
|
|
||||||
mov esi,eax
|
|
||||||
add esi,4*3
|
|
||||||
mov ecx,[eax]
|
|
||||||
sub ecx,4*3-1
|
|
||||||
xor edx,edx
|
|
||||||
cld
|
|
||||||
;--------------------------------------
|
|
||||||
.loop:
|
|
||||||
lodsb
|
|
||||||
|
|
||||||
test al,al
|
|
||||||
jz .end_of_data
|
|
||||||
|
|
||||||
cmp al,0x0d
|
|
||||||
je .check_0x0a
|
|
||||||
|
|
||||||
cmp al,0x0a
|
|
||||||
je .inc_counter
|
|
||||||
|
|
||||||
dec ecx
|
|
||||||
jz .end_of_data
|
|
||||||
|
|
||||||
stosb
|
|
||||||
jmp .loop
|
|
||||||
;--------------------------------------
|
|
||||||
.check_0x0a:
|
|
||||||
dec ecx
|
|
||||||
jz .end_of_data
|
|
||||||
|
|
||||||
cmp [esi],byte 0x0a
|
|
||||||
jne @f
|
|
||||||
|
|
||||||
lodsb
|
|
||||||
;--------------------------------------
|
|
||||||
.inc_counter:
|
|
||||||
dec ecx
|
|
||||||
jz .end_of_data
|
|
||||||
;--------------------------------------
|
|
||||||
@@:
|
|
||||||
mov eax,edi
|
|
||||||
sub eax,ebx
|
|
||||||
sub eax,6
|
|
||||||
mov [ebx],eax ; size of current string
|
|
||||||
mov ebx,edi
|
|
||||||
add edi,6
|
|
||||||
inc edx
|
|
||||||
jmp .loop
|
|
||||||
;--------------------------------------
|
|
||||||
.end_of_data:
|
|
||||||
mov eax,edi
|
|
||||||
sub eax,ebx
|
|
||||||
sub eax,6
|
|
||||||
mov [ebx],eax ; size of current string
|
|
||||||
sub edi,[copy_buf]
|
|
||||||
mov [copy_size],edi
|
|
||||||
ret
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
know_number_line_breaks:
|
|
||||||
; to know the number of line breaks
|
|
||||||
mov eax,[clipboard_buf]
|
|
||||||
mov esi,eax
|
|
||||||
add esi,4*3
|
|
||||||
mov ecx,[eax]
|
|
||||||
sub ecx,4*3
|
|
||||||
xor ebx,ebx
|
|
||||||
cld
|
|
||||||
;--------------------------------------
|
|
||||||
@@:
|
|
||||||
lodsb
|
|
||||||
|
|
||||||
test al,al
|
|
||||||
jz .end_of_data
|
|
||||||
|
|
||||||
cmp al,0x0d
|
|
||||||
je .check_0x0a
|
|
||||||
|
|
||||||
cmp al,0x0a
|
|
||||||
je .inc_counter
|
|
||||||
|
|
||||||
dec ecx
|
|
||||||
jnz @b
|
|
||||||
|
|
||||||
jmp .end_of_data
|
|
||||||
;--------------------------------------
|
|
||||||
.check_0x0a:
|
|
||||||
inc ebx
|
|
||||||
dec ecx
|
|
||||||
jz .end_of_data
|
|
||||||
|
|
||||||
cmp [esi],byte 0x0a
|
|
||||||
jne @b
|
|
||||||
|
|
||||||
lodsb
|
|
||||||
dec ecx
|
|
||||||
jnz @b
|
|
||||||
|
|
||||||
jmp .end_of_data
|
|
||||||
;--------------------------------------
|
|
||||||
.inc_counter:
|
|
||||||
inc ebx
|
|
||||||
dec ecx
|
|
||||||
jnz @b
|
|
||||||
;--------------------------------------
|
|
||||||
.end_of_data:
|
|
||||||
add ebx,2
|
|
||||||
inc esi
|
|
||||||
ret
|
|
||||||
;-----------------------------------------------------------------------------
|
|
@ -589,91 +589,61 @@ proc key.ctrl_v
|
|||||||
call get_from_clipboard
|
call get_from_clipboard
|
||||||
@@:
|
@@:
|
||||||
cmp [copy_size],0
|
cmp [copy_size],0
|
||||||
je .exit
|
je .exit_1
|
||||||
|
|
||||||
call delete_selection
|
call delete_selection
|
||||||
|
|
||||||
mov eax,[copy_size]
|
mov eax,[copy_size]
|
||||||
|
sub eax,sizeof.EDITOR_LINE_DATA
|
||||||
call editor_realloc_lines
|
call editor_realloc_lines
|
||||||
|
|
||||||
mov ebx,[cur_editor.Lines.Size]
|
|
||||||
add ebx,[copy_size]
|
|
||||||
mov [cur_editor.Lines.Size],ebx
|
|
||||||
stdcall mem.ReAlloc,[cur_editor.Lines],ebx
|
|
||||||
mov [cur_editor.Lines],eax
|
|
||||||
|
|
||||||
mov ecx,[cur_editor.Caret.Y]
|
mov ecx,[cur_editor.Caret.Y]
|
||||||
call get_line_offset
|
call get_line_offset
|
||||||
pushd [esi+EDITOR_LINE_DATA.Size] esi
|
|
||||||
mov ecx,[cur_editor.Caret.X]
|
mov ecx,[cur_editor.Caret.X]
|
||||||
call line_add_spaces
|
call line_add_spaces
|
||||||
add [esp],eax
|
pushd [esi+EDITOR_LINE_DATA.Size]
|
||||||
add esi,eax
|
push esi
|
||||||
mov ecx,[copy_size]
|
lea eax,[esi+ecx+sizeof.EDITOR_LINE_DATA]
|
||||||
mov edi,[copy_count]
|
|
||||||
test edi,edi
|
|
||||||
dec edi
|
|
||||||
jnz @f
|
|
||||||
sub ecx,sizeof.EDITOR_LINE_DATA
|
|
||||||
@@:
|
|
||||||
mov edi,[cur_editor.Lines]
|
mov edi,[cur_editor.Lines]
|
||||||
add edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4]
|
add edi,[cur_editor.Lines.Size]
|
||||||
dec edi
|
dec edi
|
||||||
mov eax,esi
|
mov ecx,[copy_size]
|
||||||
|
sub ecx,sizeof.EDITOR_LINE_DATA
|
||||||
mov esi,edi
|
mov esi,edi
|
||||||
sub esi,ecx
|
sub esi,ecx
|
||||||
lea ecx,[eax+sizeof.EDITOR_LINE_DATA]
|
neg eax
|
||||||
add ecx,[cur_editor.Caret.X]
|
lea ecx,[esi+eax+1]
|
||||||
neg ecx
|
|
||||||
lea ecx,[esi+ecx+1]
|
|
||||||
mov [size_of_moving_area],ecx
|
|
||||||
std
|
std
|
||||||
rep movsb
|
rep movsb
|
||||||
|
cld
|
||||||
|
pop edi
|
||||||
|
mov esi,[copy_buf]
|
||||||
|
mov eax,[esi+EDITOR_LINE_DATA.Size]
|
||||||
|
add esi,sizeof.EDITOR_LINE_DATA
|
||||||
mov ecx,[copy_count]
|
mov ecx,[copy_count]
|
||||||
dec ecx
|
dec ecx
|
||||||
jz .single_line
|
jz .single_line
|
||||||
|
|
||||||
cld
|
add eax,[cur_editor.Caret.X]
|
||||||
pop edi
|
mov [edi+EDITOR_LINE_DATA.Size],eax
|
||||||
add edi,sizeof.EDITOR_LINE_DATA
|
mov [edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
|
||||||
mov esi,[copy_buf]
|
sub eax,[cur_editor.Caret.X]
|
||||||
mov eax,[esi+EDITOR_LINE_DATA.Size]
|
|
||||||
add esi,sizeof.EDITOR_LINE_DATA
|
|
||||||
|
|
||||||
mov ebx,[cur_editor.Caret.X]
|
|
||||||
add eax,ebx
|
|
||||||
mov [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],eax
|
|
||||||
mov [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
|
|
||||||
sub eax,ebx
|
|
||||||
call .check_columns
|
call .check_columns
|
||||||
add edi,ebx
|
add edi,[cur_editor.Caret.X]
|
||||||
@@: push ecx
|
@@:
|
||||||
|
push ecx
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
|
add edi,sizeof.EDITOR_LINE_DATA
|
||||||
rep movsb
|
rep movsb
|
||||||
mov eax,[esi+EDITOR_LINE_DATA.Size]
|
mov eax,[esi+EDITOR_LINE_DATA.Size]
|
||||||
add esi,sizeof.EDITOR_LINE_DATA
|
add esi,sizeof.EDITOR_LINE_DATA
|
||||||
mov [edi+EDITOR_LINE_DATA.Size],eax
|
mov [edi+EDITOR_LINE_DATA.Size],eax
|
||||||
mov [edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
|
mov [edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
|
||||||
add edi,sizeof.EDITOR_LINE_DATA
|
|
||||||
pop ecx
|
pop ecx
|
||||||
loop @b
|
loop @b
|
||||||
|
|
||||||
pop ecx
|
pop ecx
|
||||||
sub ecx,ebx
|
sub ecx,[cur_editor.Caret.X]
|
||||||
ja @f
|
add [edi+EDITOR_LINE_DATA.Size],ecx
|
||||||
|
|
||||||
pusha
|
|
||||||
mov esi,edi
|
|
||||||
sub edi,sizeof.EDITOR_LINE_DATA
|
|
||||||
mov ecx,[size_of_moving_area]
|
|
||||||
cld
|
|
||||||
rep movsb
|
|
||||||
popa
|
|
||||||
jmp .save_cur_editor_values
|
|
||||||
@@:
|
|
||||||
add [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],ecx
|
|
||||||
call .check_columns
|
call .check_columns
|
||||||
|
add edi,sizeof.EDITOR_LINE_DATA
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
rep movsb
|
rep movsb
|
||||||
.save_cur_editor_values:
|
.save_cur_editor_values:
|
||||||
@ -684,53 +654,40 @@ proc key.ctrl_v
|
|||||||
add [cur_editor.Caret.Y],eax
|
add [cur_editor.Caret.Y],eax
|
||||||
add [cur_editor.SelStart.Y],eax
|
add [cur_editor.SelStart.Y],eax
|
||||||
add [cur_editor.Lines.Count],eax
|
add [cur_editor.Lines.Count],eax
|
||||||
|
|
||||||
mov [cur_editor.Modified],1
|
mov [cur_editor.Modified],1
|
||||||
jmp .exit
|
jmp .exit
|
||||||
|
|
||||||
.single_line:
|
.single_line:
|
||||||
cld
|
add [edi+EDITOR_LINE_DATA.Size],eax
|
||||||
pop edi
|
mov [edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
|
||||||
add edi,sizeof.EDITOR_LINE_DATA
|
|
||||||
mov esi,[copy_buf]
|
|
||||||
mov eax,[esi+EDITOR_LINE_DATA.Size]
|
|
||||||
add esi,sizeof.EDITOR_LINE_DATA
|
|
||||||
add [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],eax
|
|
||||||
and [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED
|
|
||||||
or [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED
|
|
||||||
call .check_columns
|
call .check_columns
|
||||||
|
add edi,sizeof.EDITOR_LINE_DATA
|
||||||
add edi,[cur_editor.Caret.X]
|
add edi,[cur_editor.Caret.X]
|
||||||
add esp,4
|
pop ecx
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
rep movsb
|
rep movsb
|
||||||
|
|
||||||
add [cur_editor.Caret.X],eax
|
add [cur_editor.Caret.X],eax
|
||||||
add [cur_editor.SelStart.X],eax
|
add [cur_editor.SelStart.X],eax
|
||||||
|
|
||||||
mov [cur_editor.Modified],1
|
mov [cur_editor.Modified],1
|
||||||
|
.exit:
|
||||||
.exit:
|
|
||||||
cmp [replace_mode],0
|
cmp [replace_mode],0
|
||||||
jne .exit_1
|
jne .exit_1
|
||||||
|
stdcall mem.Free,[copy_buf]
|
||||||
cmp [copy_size],0
|
|
||||||
je .exit_1
|
|
||||||
; remove unnecessary memory area
|
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
|
mov [copy_buf],eax
|
||||||
mov [copy_size],eax
|
mov [copy_size],eax
|
||||||
mov [copy_count],eax
|
mov [copy_count],eax
|
||||||
stdcall mem.ReAlloc,[copy_buf],eax
|
|
||||||
mov [copy_buf],eax
|
|
||||||
.exit_1:
|
.exit_1:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.check_columns:
|
.check_columns:
|
||||||
push eax
|
push eax
|
||||||
mov eax,[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size]
|
mov eax,[edi+EDITOR_LINE_DATA.Size]
|
||||||
cmp eax,[cur_editor.Columns.Count]
|
cmp eax,[cur_editor.Columns.Count]
|
||||||
jbe @f
|
jbe @f
|
||||||
mov [cur_editor.Columns.Count],eax
|
mov [cur_editor.Columns.Count],eax
|
||||||
@@: pop eax
|
@@:
|
||||||
|
pop eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
@ -812,101 +769,91 @@ endp
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
proc key.up ;///// GO TO PREVIOUS LINE ///////////////////////////////////////
|
proc key.up ;///// GO TO PREVIOUS LINE ///////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
call clear_selection
|
call key.shift_up
|
||||||
|
jmp clear_selection
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
key.shift_up: ;///// GO TO PREVIOUS LINE, WITH SELECTION ////////////////
|
key.shift_up: ;///// GO TO PREVIOUS LINE, WITH SELECTION ////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
mov eax,[cur_editor.Caret.Y]
|
mov ecx,[cur_editor.Caret.Y]
|
||||||
dec eax
|
|
||||||
jns @f
|
|
||||||
xor eax,eax
|
|
||||||
@@: mov ecx,[cur_editor.TopLeft.Y]
|
|
||||||
cmp eax,ecx
|
|
||||||
jae @f
|
|
||||||
dec ecx
|
dec ecx
|
||||||
jns @f
|
js .exit
|
||||||
xor ecx,ecx
|
mov [cur_editor.Caret.Y],ecx
|
||||||
@@: test [chr],KM_SHIFT
|
call get_line_offset
|
||||||
jnz @f
|
mov eax,[esi]
|
||||||
mov [cur_editor.SelStart.Y],eax
|
cmp eax,[cur_editor.Caret.X]
|
||||||
@@: mov [cur_editor.Caret.Y],eax
|
jnc .exit
|
||||||
mov [cur_editor.TopLeft.Y],ecx
|
mov [cur_editor.Caret.X],eax
|
||||||
|
.exit:
|
||||||
.exit:
|
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
proc key.down ;///// GO TO NEXT LINE /////////////////////////////////////////
|
proc key.down ;///// GO TO NEXT LINE /////////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
call clear_selection
|
call key.shift_down
|
||||||
|
jmp clear_selection
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
key.shift_down: ;///// GO TO NEXT LINE, WITH SELECTION //////////////////
|
key.shift_down: ;///// GO TO NEXT LINE, WITH SELECTION //////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
mov ecx,[cur_editor.Caret.Y]
|
||||||
mov eax,[cur_editor.Caret.Y]
|
|
||||||
inc eax
|
|
||||||
cmp eax,[cur_editor.Lines.Count]
|
|
||||||
jb @f
|
|
||||||
dec eax
|
|
||||||
@@: mov ecx,[cur_editor.TopLeft.Y]
|
|
||||||
mov edx,eax
|
|
||||||
sub edx,ecx
|
|
||||||
cmp edx,[lines.scr]
|
|
||||||
jb @f
|
|
||||||
inc ecx
|
inc ecx
|
||||||
@@: test [chr],KM_SHIFT
|
cmp [cur_editor.Lines.Count],ecx
|
||||||
jnz @f
|
jz .exit
|
||||||
mov [cur_editor.SelStart.Y],eax
|
mov [cur_editor.Caret.Y],ecx
|
||||||
@@: mov [cur_editor.Caret.Y],eax
|
call get_line_offset
|
||||||
mov [cur_editor.TopLeft.Y],ecx
|
mov eax,[esi]
|
||||||
|
cmp eax,[cur_editor.Caret.X]
|
||||||
.exit:
|
jnc .exit
|
||||||
|
mov [cur_editor.Caret.X],eax
|
||||||
|
.exit:
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
proc key.left ;///// GO TO PREVIOUS CHAR /////////////////////////////////////
|
proc key.left ;///// GO TO PREVIOUS CHAR /////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
call clear_selection
|
call key.shift_left
|
||||||
|
jmp clear_selection
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
key.shift_left: ;///// GO TO PREVIOUS CHAR, WITH SELECTION //////////////
|
key.shift_left: ;///// GO TO PREVIOUS CHAR, WITH SELECTION //////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
mov eax,[cur_editor.Caret.X]
|
mov eax,[cur_editor.Caret.X]
|
||||||
dec eax
|
dec eax
|
||||||
jns @f
|
jns @f
|
||||||
inc eax
|
mov ecx,[cur_editor.Caret.Y]
|
||||||
@@: test [chr],KM_SHIFT
|
dec ecx
|
||||||
jnz @f
|
js .exit
|
||||||
mov [cur_editor.SelStart.X],eax
|
mov [cur_editor.Caret.Y],ecx
|
||||||
@@: mov [cur_editor.Caret.X],eax
|
call get_line_offset
|
||||||
|
mov eax,[esi]
|
||||||
.exit:
|
@@:
|
||||||
|
mov [cur_editor.Caret.X],eax
|
||||||
|
.exit:
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
proc key.right ;///// GO TO NEXT CHAR ////////////////////////////////////////
|
proc key.right ;///// GO TO NEXT CHAR ////////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
call clear_selection
|
call key.shift_right
|
||||||
|
jmp clear_selection
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
key.shift_right: ;///// GO TO NEXT CHAR, WITH SELECTION /////////////////
|
key.shift_right: ;///// GO TO NEXT CHAR, WITH SELECTION /////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
mov ecx,[cur_editor.Caret.Y]
|
||||||
|
call get_line_offset
|
||||||
mov eax,[cur_editor.Caret.X]
|
mov eax,[cur_editor.Caret.X]
|
||||||
inc eax
|
inc eax
|
||||||
cmp eax,[cur_editor.Columns.Count]
|
cmp [esi],eax
|
||||||
jbe @f
|
jnc @f
|
||||||
dec eax
|
inc ecx
|
||||||
@@: test [chr],KM_SHIFT
|
cmp [cur_editor.Lines.Count],ecx
|
||||||
jnz @f
|
jz .exit
|
||||||
mov [cur_editor.SelStart.X],eax
|
xor eax,eax
|
||||||
@@: mov [cur_editor.Caret.X],eax
|
mov [cur_editor.Caret.Y],ecx
|
||||||
|
@@:
|
||||||
.exit:
|
mov [cur_editor.Caret.X],eax
|
||||||
|
.exit:
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
@ -1631,33 +1578,28 @@ endp
|
|||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
proc key.f3 ;///// FIND NEXT MATCH ///////////////////////////////////////////
|
proc key.f3 ;///// FIND NEXT MATCH ///////////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
call search
|
jmp search
|
||||||
jc @f
|
|
||||||
@@: ret
|
|
||||||
endp
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
proc key.f9 ;///// COMPILE AND RUN ///////////////////////////////////////////
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
mov bl,1
|
|
||||||
call start_fasm
|
|
||||||
ret
|
|
||||||
endp
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
proc key.f10 ;///// COMPILE AND RUN UNDER DEBUG //////////////////////////////
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
mov bl,2
|
|
||||||
call start_fasm
|
|
||||||
ret
|
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
proc key.ctrl_f9 ;///// COMPILE //////////////////////////////////////////////
|
proc key.ctrl_f9 ;///// COMPILE //////////////////////////////////////////////
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
mov bl,0
|
mov bl,0
|
||||||
call start_fasm
|
jmp start_fasm
|
||||||
ret
|
endp
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
proc key.f9 ;///// COMPILE AND RUN ///////////////////////////////////////////
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
mov bl,1
|
||||||
|
jmp start_fasm
|
||||||
|
endp
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
proc key.f10 ;///// COMPILE AND RUN UNDER DEBUG //////////////////////////////
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
mov bl,2
|
||||||
|
jmp start_fasm
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
@ -197,10 +197,11 @@ mouse:
|
|||||||
mov ecx,6
|
mov ecx,6
|
||||||
idiv ecx
|
idiv ecx
|
||||||
@@: add eax,[cur_editor.TopLeft.X]
|
@@: add eax,[cur_editor.TopLeft.X]
|
||||||
|
mov ecx, ebx
|
||||||
cmp eax,[cur_editor.Columns.Count]
|
call get_line_offset
|
||||||
|
cmp eax,[esi]
|
||||||
jl @f
|
jl @f
|
||||||
mov eax,[cur_editor.Columns.Count]
|
mov eax,[esi]
|
||||||
@@: cmp ebx,[cur_editor.Lines.Count]
|
@@: cmp ebx,[cur_editor.Lines.Count]
|
||||||
jl @f
|
jl @f
|
||||||
mov ebx,[cur_editor.Lines.Count]
|
mov ebx,[cur_editor.Lines.Count]
|
||||||
|
Loading…
Reference in New Issue
Block a user