72 lines
1.8 KiB
Plaintext
72 lines
1.8 KiB
Plaintext
const str screen_namespace = "/dev/screen/0";
|
|
const str mouse_namespace = "/dev/mouse/0";
|
|
const str terminal_namespace = "/dev/term/0";
|
|
const str new_line = "\n";
|
|
const byte WHITE = 255;
|
|
|
|
function main () {
|
|
// open screen
|
|
// use load immediate because it is a pointer to a string, not a value
|
|
|
|
nat tmp_ptr = &screen_namespace;
|
|
int mode = 0;
|
|
plex screen = open(tmp_ptr, mode);
|
|
|
|
nat screen_handle = screen.handle;
|
|
str tmp_str = screen_handle as str;
|
|
pln(tmp_str);
|
|
|
|
nat width = screen.width;
|
|
tmp_str = width as str;
|
|
pln(tmp_str);
|
|
|
|
nat buffer_size = screen.size;
|
|
tmp_str = buffer_size as str;
|
|
pln(tmp_str);
|
|
|
|
nat screen_buffer = screen.buffer.ptr;
|
|
tmp_str = screen_buffer as str;
|
|
pln(tmp_str);
|
|
|
|
// open mouse
|
|
tmp_ptr = &mouse_namespace;
|
|
plex mouse = open(tmp_ptr, mode);
|
|
|
|
write(screen, screen_buffer, buffer_size); // redraw
|
|
|
|
loop {
|
|
// load mouse click data
|
|
stat(mouse);
|
|
|
|
byte left_down = mouse.left;
|
|
|
|
if (left_down == 1) {
|
|
nat x = mouse.x;
|
|
nat y = mouse.y;
|
|
|
|
// Compute start address: y*width + x
|
|
nat pixel_pos = y * width; // = y * width
|
|
pixel_pos = x + pixel_pos; // += x
|
|
pixel_pos = screen_buffer + pixel_pos; // += pixel_offset
|
|
nat fat_ptr_size = 4; // need to add offset for fat pointer size
|
|
pixel_pos = pixel_pos + fat_ptr_size;
|
|
|
|
byte color = WHITE;
|
|
store_absolute_8(pixel_pos, color); // draw color at screen [x,y]
|
|
write(screen, screen_buffer, buffer_size); // redraw
|
|
}
|
|
}
|
|
exit(0);
|
|
}
|
|
|
|
function pln (str message) {
|
|
nat term_ns = &terminal_namespace; // get terminal device
|
|
int mode = 0;
|
|
plex term = open(term_ns, mode);
|
|
int msg_length = message.length;
|
|
write(term, message, msg_length);
|
|
str nl = &new_line;
|
|
int nl_length = nl.length;
|
|
write(term, nl, nl_length);
|
|
return
|
|
} |