develop/tinypad: Post-SVN tidy
- Move source code from `trunk` into program root directory. - Update build files and ASM include paths.
This commit is contained in:
185
programs/develop/tinypad/tp-clipboard.asm
Normal file
185
programs/develop/tinypad/tp-clipboard.asm
Normal file
@@ -0,0 +1,185 @@
|
||||
|
||||
put_to_clipboard:
|
||||
mov edi,[clipboard_buf]
|
||||
test edi,edi
|
||||
jz .end
|
||||
add edi,12
|
||||
mov esi,[copy_buf]
|
||||
mov edx,[copy_count]
|
||||
mov ax,0x0a0d ; End of String
|
||||
cld
|
||||
@@: ; convert format from Tinypad<61>to clipboard
|
||||
mov ecx,[esi]
|
||||
add esi,sizeof.EDITOR_LINE_DATA
|
||||
rep movsb
|
||||
stosw
|
||||
dec edx
|
||||
jnz @b
|
||||
|
||||
sub edi,2 ; delete last EoS
|
||||
xor eax,eax
|
||||
stosb
|
||||
; build the clipboard slot header
|
||||
mov esi,[clipboard_buf]
|
||||
sub edi,esi
|
||||
dec edi
|
||||
mov [esi],edi ; clipboard area size
|
||||
xor eax,eax
|
||||
mov [esi+4],eax ; type 'text'
|
||||
inc eax
|
||||
mov [esi+8],eax ; cp866 text encoding
|
||||
; put slot to the kernel clipboard
|
||||
mov edx,[clipboard_buf]
|
||||
mov ecx,[edx]
|
||||
mcall 54,2
|
||||
stdcall mem.Free,[clipboard_buf]
|
||||
stdcall mem.Free,[copy_buf]
|
||||
xor eax,eax
|
||||
mov [copy_buf],eax
|
||||
mov [copy_size],eax
|
||||
mov [copy_count],eax
|
||||
mov [clipboard_buf],eax
|
||||
.end:
|
||||
ret
|
||||
;---------------------------------------------------------------
|
||||
get_from_clipboard:
|
||||
mov [copy_size],0
|
||||
pushad
|
||||
mcall 54,0
|
||||
test eax,eax
|
||||
jz .exit ; no slots of clipboard
|
||||
inc eax
|
||||
jz .exit ; main list area not found
|
||||
sub eax,2
|
||||
mov ecx,eax
|
||||
mcall 54,1
|
||||
inc eax
|
||||
jz .exit ; main list area not found
|
||||
sub eax,2
|
||||
jz .exit ; error
|
||||
inc eax
|
||||
mov [clipboard_buf],eax
|
||||
; check contents of container
|
||||
mov ebx,[eax+4]
|
||||
test ebx,ebx
|
||||
jnz .freeMemory ; not text
|
||||
mov ebx,[eax+8]
|
||||
dec ebx
|
||||
jnz .freeMemory ; not cp866
|
||||
mov edi,[clipboard_buf]
|
||||
mov al, 10
|
||||
mov ecx,[edi]
|
||||
add edi,12
|
||||
sub ecx,12
|
||||
jbe .freeMemory
|
||||
cmp byte[edi],0
|
||||
jz .freeMemory
|
||||
@@:
|
||||
dec ecx
|
||||
cmp byte[edi+ecx],0
|
||||
jz @b
|
||||
inc ecx
|
||||
push ecx
|
||||
cld
|
||||
@@: ; count strings
|
||||
repnz scasb
|
||||
inc ebx
|
||||
test ecx,ecx
|
||||
jnz @b
|
||||
dec edi
|
||||
cmp byte[edi],10
|
||||
jnz @f
|
||||
inc ebx
|
||||
@@:
|
||||
mov [copy_count],ebx
|
||||
lea eax,[ebx*4+ebx+2]
|
||||
add eax,[esp]
|
||||
stdcall mem.Alloc,eax
|
||||
mov [copy_buf],eax
|
||||
mov esi,eax
|
||||
mov edi,[clipboard_buf]
|
||||
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:
|
||||
popad
|
||||
ret
|
||||
;---------------------------------------------------------------
|
||||
check_clipboard_for_popup:
|
||||
pushad
|
||||
mov [popup_valid_text],0
|
||||
mcall 54,0
|
||||
test eax,eax
|
||||
jz .exit ; no slots of clipboard
|
||||
inc eax
|
||||
jz .exit ; main list area not found
|
||||
sub eax,2
|
||||
mov ecx,eax
|
||||
mcall 54,1
|
||||
inc eax
|
||||
jz .exit ; main list area not found
|
||||
sub eax,2
|
||||
jz .exit ; error
|
||||
inc eax
|
||||
mov [clipboard_buf],eax
|
||||
; check contents of container
|
||||
mov ebx,[eax+4]
|
||||
test ebx,ebx
|
||||
jnz .freeMemory ; not text
|
||||
mov ebx,[eax+8]
|
||||
dec ebx
|
||||
jnz .freeMemory ; not cp866
|
||||
mov [popup_valid_text],1
|
||||
.freeMemory:
|
||||
stdcall mem.Free,[clipboard_buf]
|
||||
mov [clipboard_buf],0
|
||||
.exit:
|
||||
popad
|
||||
ret
|
Reference in New Issue
Block a user