forked from KolibriOS/kolibrios
272 lines
5.2 KiB
NASM
272 lines
5.2 KiB
NASM
|
; <--- description --->
|
|||
|
; compiler: FASM
|
|||
|
; name: Clipboard test with GUI.
|
|||
|
; version: 0.1
|
|||
|
; author: barsuk
|
|||
|
; comments: uses edit_box by Maxxxx32,<Lrz> (old static version)
|
|||
|
|
|||
|
|
|||
|
; <--- include all MeOS stuff --->
|
|||
|
include "lang.inc"
|
|||
|
include "..\..\..\MACROS.INC"
|
|||
|
|
|||
|
; <--- start of MenuetOS application --->
|
|||
|
MEOS_APP_START
|
|||
|
|
|||
|
SEND_DELAY = 10
|
|||
|
RECV_DELAY = 100
|
|||
|
ATTEMPT = 5
|
|||
|
|
|||
|
|
|||
|
define DEBUG TRUE
|
|||
|
include "bdebug.inc"
|
|||
|
|
|||
|
include "editbox.inc"
|
|||
|
|
|||
|
include "clip.inc"
|
|||
|
|
|||
|
use_edit_box
|
|||
|
|
|||
|
; <--- start of code --->
|
|||
|
CODE
|
|||
|
|
|||
|
call clipboard_init
|
|||
|
|
|||
|
call draw_window ; at first create and draw the window
|
|||
|
|
|||
|
wait_event: ; main cycle
|
|||
|
|
|||
|
mov edi, input_box
|
|||
|
call edit_box.mouse
|
|||
|
|
|||
|
mov eax, 10
|
|||
|
int 0x40
|
|||
|
|
|||
|
cmp eax, 1 ; if event == 1
|
|||
|
je redraw ; jump to redraw handler
|
|||
|
cmp eax, 2 ; else if event == 2
|
|||
|
je key ; jump to key handler
|
|||
|
cmp eax, 3 ; else if event == 3
|
|||
|
je button ; jump to button handler
|
|||
|
|
|||
|
jmp wait_event ; else return to the start of main cycle
|
|||
|
|
|||
|
|
|||
|
redraw: ; redraw event handler
|
|||
|
call draw_window
|
|||
|
jmp wait_event
|
|||
|
|
|||
|
|
|||
|
key: ; key event handler
|
|||
|
mov eax, 2 ; get key code
|
|||
|
int 0x40
|
|||
|
|
|||
|
cmp ah, '0'
|
|||
|
jb no_digit
|
|||
|
cmp ah, '9'
|
|||
|
ja no_digit
|
|||
|
sub ah, '0'
|
|||
|
mov byte [format_id], ah
|
|||
|
call draw_window
|
|||
|
jmp wait_event
|
|||
|
no_digit:
|
|||
|
|
|||
|
mov edi, input_box
|
|||
|
call edit_box.key
|
|||
|
|
|||
|
jmp wait_event
|
|||
|
|
|||
|
|
|||
|
button: ; button event handler
|
|||
|
mov eax, 17 ; get button identifier
|
|||
|
int 0x40
|
|||
|
|
|||
|
cmp ah, 1
|
|||
|
jz exit
|
|||
|
|
|||
|
cmp ah, 5
|
|||
|
jz copy
|
|||
|
cmp ah, 6
|
|||
|
jz paste
|
|||
|
jmp wait_event
|
|||
|
copy:
|
|||
|
mov esi, input_text
|
|||
|
mov edi, buffer.data
|
|||
|
mov ecx, [buffer.size]
|
|||
|
rep movsb ; copy text to buffer
|
|||
|
|
|||
|
mov edi, input_box
|
|||
|
mov edx, [edi + 38] ; ed_size
|
|||
|
xchg edx, [buffer.size]
|
|||
|
movzx eax, byte [format_id]
|
|||
|
mov esi, buffer
|
|||
|
call clipboard_write
|
|||
|
xchg edx, [buffer.size]
|
|||
|
jmp wait_event
|
|||
|
|
|||
|
paste:
|
|||
|
mov esi, buffer
|
|||
|
movzx eax, byte [format_id]
|
|||
|
mov edx, 7
|
|||
|
call clipboard_read
|
|||
|
|
|||
|
or eax, eax
|
|||
|
jz wait_event
|
|||
|
|
|||
|
cmp eax, -1
|
|||
|
jz wait_event
|
|||
|
|
|||
|
or edx, edx
|
|||
|
jz wait_event ; <20><><EFBFBD> <20><><EFBFBD> <20>訡<EFBFBD><E8A8A1>
|
|||
|
|
|||
|
mov eax, input_box
|
|||
|
;print "input box"
|
|||
|
;dph1 [eax]
|
|||
|
;dph1 [eax+4]
|
|||
|
;dph1 [eax+8]
|
|||
|
;dph1 [eax+12]
|
|||
|
;dph1 [eax+16]
|
|||
|
;dph1 [eax+20]
|
|||
|
;dph1 [eax+24]
|
|||
|
|
|||
|
;;;;jmp wait_event
|
|||
|
|
|||
|
mov word [input_box + 36], ed_focus ; flags
|
|||
|
|
|||
|
mov ecx, [input_box + 38] ; size
|
|||
|
print "paste read ecx=size"
|
|||
|
jecxz .noloop
|
|||
|
mov edi, input_box
|
|||
|
mov ah, 8 ; backspace
|
|||
|
.loop:
|
|||
|
call edit_box.key
|
|||
|
dec ecx
|
|||
|
jnz .loop
|
|||
|
.noloop:
|
|||
|
mov esi, buffer.data
|
|||
|
mov ecx, edx
|
|||
|
pregs
|
|||
|
.loop2:
|
|||
|
mov ah, [esi]
|
|||
|
cmp ah, 0
|
|||
|
jz .done
|
|||
|
call edit_box.key ; <20> <20><> ᥡ<> <20>㪨 <20><>१<EFBFBD><E0A5A7> <20><> ⠪<><E2A0AA>
|
|||
|
; <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>砥<EFBFBD><E7A0A5><EFBFBD>?
|
|||
|
inc esi
|
|||
|
dec ecx
|
|||
|
jnz .loop2
|
|||
|
|
|||
|
.done:
|
|||
|
print "rest of data ecx"
|
|||
|
pregs
|
|||
|
call draw_window
|
|||
|
jmp wait_event
|
|||
|
|
|||
|
exit:
|
|||
|
or eax, -1 ; exit application
|
|||
|
int 0x40
|
|||
|
|
|||
|
|
|||
|
draw_window:
|
|||
|
mov eax, 12 ; start drawing
|
|||
|
mov ebx, 1
|
|||
|
int 0x40
|
|||
|
|
|||
|
mov eax, 0 ; create and draw the window
|
|||
|
mov ebx, 100*65536+400 ; (window_cx)*65536+(window_sx)
|
|||
|
mov ecx, 100*65536+250 ; (window_cy)*65536+(window_sy)
|
|||
|
mov edx, 0x33ffffff ; work area color & window type 3
|
|||
|
mov edi, head
|
|||
|
int 0x40
|
|||
|
|
|||
|
mov eax, 4
|
|||
|
mov ebx, 10 shl 16 + 10
|
|||
|
mov ecx, 0x80000000
|
|||
|
mov edx, text1
|
|||
|
int 0x40
|
|||
|
mov eax, 4
|
|||
|
mov ebx, 10 shl 16 + 20
|
|||
|
mov edx, text2
|
|||
|
int 0x40
|
|||
|
mov eax, 47
|
|||
|
mov ebx, 0x00020000
|
|||
|
movzx ecx, byte [format_id]
|
|||
|
mov edx, 200 shl 16 + 20
|
|||
|
mov esi, 0
|
|||
|
int 0x40
|
|||
|
|
|||
|
mov eax, 8
|
|||
|
mov ebx, 10 shl 16 + 60
|
|||
|
mov ecx, 40 shl 16 + 15
|
|||
|
mov edx, 5
|
|||
|
mov esi, 0xd72189
|
|||
|
int 0x40
|
|||
|
mov eax, 4
|
|||
|
mov ebx, 12 shl 16 + 42
|
|||
|
mov ecx, 0x80000000
|
|||
|
mov edx, button1
|
|||
|
int 0x40
|
|||
|
|
|||
|
mov eax, 8
|
|||
|
mov ebx, 80 shl 16 + 60
|
|||
|
mov ecx, 40 shl 16 + 15
|
|||
|
mov edx, 6
|
|||
|
mov esi, 0xd72189
|
|||
|
int 0x40
|
|||
|
mov eax, 4
|
|||
|
mov ebx, 82 shl 16 + 42
|
|||
|
mov ecx, 0x80000000
|
|||
|
mov edx, button2
|
|||
|
int 0x40
|
|||
|
|
|||
|
mov edi, input_box
|
|||
|
call edit_box.draw
|
|||
|
|
|||
|
; mov eax, 4
|
|||
|
; mov ebx, 10 shl 16 + 90
|
|||
|
; mov ecx, 0
|
|||
|
; mov edx, input_text
|
|||
|
; mov esi, [input_box + 38]
|
|||
|
; int 0x40
|
|||
|
; mov eax, esi
|
|||
|
;print "eax = edit etxt len"
|
|||
|
;pregs
|
|||
|
|
|||
|
|
|||
|
|
|||
|
mov eax, 12 ; finish drawing
|
|||
|
mov ebx, 2
|
|||
|
int 0x40
|
|||
|
|
|||
|
ret
|
|||
|
|
|||
|
|
|||
|
|
|||
|
; <--- initialised data --->
|
|||
|
DATA
|
|||
|
|
|||
|
format_id db 1
|
|||
|
|
|||
|
; buffer db 256 dup(0)
|
|||
|
|
|||
|
CLIP_BUFFER buffer, 256
|
|||
|
|
|||
|
input_text db 256 dup(0)
|
|||
|
input_box edit_box 100,10,70,0xffffff,0,0x00aaaaaa,0,255,input_text
|
|||
|
|
|||
|
; input_box edit_box 100,10,70,0xffffff,0,0xaaaaaa,0,\
|
|||
|
; 0xaaaaaa,0,255,input_text,ed_always_focus
|
|||
|
|
|||
|
head db "<22>ਬ<EFBFBD><E0A8AC> ࠡ<><E0A0A1><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",0
|
|||
|
text1 db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 0-9 <20><><EFBFBD> ᬥ<><E1ACA5> id <20><>ଠ<EFBFBD><E0ACA0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",0
|
|||
|
text2 db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭ id <20><>ଠ<EFBFBD><E0ACA0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ",0
|
|||
|
|
|||
|
button1 db "<22><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD>",0
|
|||
|
button2 db "<22><>⠢<EFBFBD><E2A0A2><EFBFBD>",0
|
|||
|
|
|||
|
; <--- uninitialised data --->
|
|||
|
UDATA
|
|||
|
|
|||
|
|
|||
|
MEOS_APP_END
|
|||
|
; <--- end of MenuetOS application --->
|