forked from KolibriOS/kolibrios
7bc0071f59
git-svn-id: svn://kolibrios.org@895 a494cfbc-eb01-0410-851d-a64ba20cac60
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 ---> |