43 lines
1.2 KiB
Forth
43 lines
1.2 KiB
Forth
# Demo of mouse support.
|
|
#
|
|
# To build a disk image:
|
|
# ./translate ex10.mu # emits code.img
|
|
# To run:
|
|
# qemu-system-i386 code.img
|
|
# Or:
|
|
# bochs -f bochsrc # bochsrc loads code.img
|
|
#
|
|
# Expected output:
|
|
# Values between -256 and +255 as you move the mouse over the window.
|
|
# You might need to click on the window once.
|
|
|
|
fn main screen: (addr screen), keyboard: (addr keyboard), data-disk: (addr disk) {
|
|
# repeatedly print out mouse driver results if non-zero
|
|
$main:event-loop: {
|
|
var dx/eax: int <- copy 0
|
|
var dy/ecx: int <- copy 0
|
|
dx, dy <- read-mouse-event
|
|
{
|
|
compare dx, 0
|
|
break-if-!=
|
|
compare dy, 0
|
|
break-if-!=
|
|
loop $main:event-loop
|
|
}
|
|
{
|
|
var dummy1/eax: int <- copy 0
|
|
var dummy2/ecx: int <- copy 0
|
|
dummy1, dummy2 <- draw-text-wrapping-right-then-down-over-full-screen screen, " ", 0/x, 0x10/y, 0x31/fg, 0/bg
|
|
}
|
|
{
|
|
var dummy/ecx: int <- copy 0
|
|
dx, dummy <- draw-int32-decimal-wrapping-right-then-down-over-full-screen screen, dx, 0/x, 0x10/y, 0x31/fg, 0/bg
|
|
}
|
|
{
|
|
var dummy/eax: int <- copy 0
|
|
dummy, dy <- draw-int32-decimal-wrapping-right-then-down-over-full-screen screen, dy, 5/x, 0x10/y, 0x31/fg, 0/bg
|
|
}
|
|
loop
|
|
}
|
|
}
|