kolibrios/programs/system/clip/trunk/test2.asm
barsuk 7bc0071f59 uploaded @clip - global clipboard
git-svn-id: svn://kolibrios.org@895 a494cfbc-eb01-0410-851d-a64ba20cac60
2008-11-03 01:18:10 +00:00

272 lines
5.2 KiB
NASM
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; <--- 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 --->