undar-lang/test/window.ul

79 lines
1.2 KiB
Fortran

/**
* Constants
*/
const str nl = "\n";
const nat WHITE = 255;
/**
* Devices
*/
plex Terminal {
nat handle;
init() {
handle = open("/dev/term/0", 0);
}
}
plex Screen {
nat handle;
nat width;
nat height;
nat buffer_size;
byte[] screen_buffer;
init() {
this.handle = open("/dev/screen/0", 0);
}
draw() {
write(this.handle, this.screen_buffer, this.buffer_size);
}
}
plex Mouse {
nat handle;
nat x;
nat y;
bool left;
bool right;
bool middle;
bool btn4;
nat size;
init() {
this.handle = open("/dev/mouse/0", 0);
}
}
/**
* Main function
*/
function main() {
Screen screen();
pln(screen.handle.str);
pln(screen.width.str);
pln(screen.size.str);
pln(screen.screen_buffer.ptr.str);
Mouse mouse();
screen.draw();
loop {
if (mouse.btn1) {
screen.screen_buffer[mouse.y * width + mouse.x +
screen.screen_buffer.ptr + 4] = WHITE;
screen.draw();
}
}
}
/**
* Print with a newline
*/
function pln(str message) {
Terminal term();
write(term, message, message.length);
write(term, nl, nl.length);
}