/** * 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); }