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 == 0) continue; 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 }