next highest level ir example
This commit is contained in:
parent
292aca1251
commit
65ef3c5426
|
|
@ -0,0 +1,264 @@
|
|||
str screen_namespace = "/dev/screen/0";
|
||||
str mouse_namespace = "/dev/mouse/0";
|
||||
byte BLACK = 0;
|
||||
byte WHITE = 255;
|
||||
byte DARK_GRAY = 73;
|
||||
byte GRAY = 146;
|
||||
byte LIGHT_GRAY = 182;
|
||||
byte CHARCOAL = 36;
|
||||
byte DARK_RED = 128;
|
||||
byte RED = 224;
|
||||
byte DARK_YELLOW = 144;
|
||||
byte YELLOW = 252;
|
||||
byte DARK_TEAL = 9;
|
||||
byte TEAL = 18;
|
||||
byte DARK_GREEN = 12;
|
||||
byte GREEN = 16;
|
||||
byte LIME = 28;
|
||||
byte LIGHT_CYAN = 159;
|
||||
byte NAVY = 2;
|
||||
byte BLUE = 3;
|
||||
byte DEEP_SKY_BLUE = 10;
|
||||
byte LIGHT_BLUE = 19;
|
||||
byte PURPLE = 131;
|
||||
byte LIGHT_PURPLE = 147;
|
||||
byte DARK_MAGENTA = 130;
|
||||
byte MAGENTA = 227;
|
||||
byte PLUM = 129;
|
||||
byte PINK = 226;
|
||||
byte SADDLE_BROWN = 72;
|
||||
byte PERU = 141;
|
||||
byte SIENNA = 136;
|
||||
byte ORANGE = 241;
|
||||
byte DARK_ORANGE = 208;
|
||||
byte GOLD = 244;
|
||||
byte SELECTED_COLOR = 255;
|
||||
|
||||
function main () {
|
||||
// Open screen
|
||||
int mode = 0;
|
||||
ptr screen = open(screen_namespace, mode);
|
||||
|
||||
nat width = &screen + 8;
|
||||
nat size = &screen + 12;
|
||||
nat screen_buffer = &screen + 16;
|
||||
|
||||
// open mouse
|
||||
ptr mouse = open(mouse_namespace, mode); // Mouse mouse = open("/dev/mouse/0", 0);
|
||||
|
||||
byte color;
|
||||
nat x_pos;
|
||||
nat y_pos;
|
||||
|
||||
color = BLACK;
|
||||
x_pos = 1;
|
||||
y_pos = 1;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
|
||||
color = WHITE;
|
||||
x_pos = 21;
|
||||
y_pos = 1;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
|
||||
color = CHARCOAL;
|
||||
x_pos = 1;
|
||||
y_pos = 21;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
|
||||
color = DARK_GRAY;
|
||||
x_pos = 21;
|
||||
y_pos = 21;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
|
||||
color = RED;
|
||||
x_pos = 1;
|
||||
y_pos = 41;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
|
||||
color = ORANGE;
|
||||
x_pos = 21;
|
||||
y_pos = 41;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
|
||||
color = YELLOW;
|
||||
x_pos = 1;
|
||||
y_pos = 61;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
|
||||
color = GREEN;
|
||||
x_pos = 21;
|
||||
y_pos = 61;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
|
||||
color = BLUE;
|
||||
x_pos = 1;
|
||||
y_pos = 81;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
|
||||
color = PURPLE;
|
||||
x_pos = 21;
|
||||
y_pos = 81;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
|
||||
// screen.draw
|
||||
write(screen, screen_buffer, size);
|
||||
|
||||
nat zero = 0;
|
||||
|
||||
loop draw_loop {
|
||||
// load mouse click data
|
||||
stat(mouse);
|
||||
|
||||
byte left_down = &mouse + 16; // load btn1 pressed
|
||||
|
||||
jump_eq_nat(draw_loop, left_down, zero); // if (!btn1.left) continue;
|
||||
|
||||
nat mouse_x = &mouse + 8; // load x
|
||||
nat mouse_y = &mouse + 12; // load y
|
||||
|
||||
nat box_size = 20;
|
||||
|
||||
// first row
|
||||
color = BLACK;
|
||||
x_pos = 1;
|
||||
y_pos = 1;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
set_color_if_clicked (mouse_x, mouse_y, x_pos, y_pos, color, box_size);
|
||||
|
||||
color = WHITE;
|
||||
x_pos = 21;
|
||||
y_pos = 1;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
set_color_if_clicked (mouse_x, mouse_y, x_pos, y_pos, color, box_size);
|
||||
|
||||
color = CHARCOAL;
|
||||
x_pos = 1;
|
||||
y_pos = 21;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
set_color_if_clicked (mouse_x, mouse_y, x_pos, y_pos, color, box_size);
|
||||
|
||||
color = DARK_GRAY;
|
||||
x_pos = 21;
|
||||
y_pos = 21;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
set_color_if_clicked (mouse_x, mouse_y, x_pos, y_pos, color, box_size);
|
||||
|
||||
color = RED;
|
||||
x_pos = 1;
|
||||
y_pos = 41;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
set_color_if_clicked (mouse_x, mouse_y, x_pos, y_pos, color, box_size);
|
||||
|
||||
color = ORANGE;
|
||||
x_pos = 21;
|
||||
y_pos = 41;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
set_color_if_clicked (mouse_x, mouse_y, x_pos, y_pos, color, box_size);
|
||||
|
||||
color = YELLOW;
|
||||
x_pos = 1;
|
||||
y_pos = 61;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
set_color_if_clicked (mouse_x, mouse_y, x_pos, y_pos, color, box_size);
|
||||
|
||||
color = GREEN;
|
||||
x_pos = 21;
|
||||
y_pos = 61;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
set_color_if_clicked (mouse_x, mouse_y, x_pos, y_pos, color, box_size);
|
||||
|
||||
color = BLUE;
|
||||
x_pos = 1;
|
||||
y_pos = 81;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
set_color_if_clicked (mouse_x, mouse_y, x_pos, y_pos, color, box_size);
|
||||
|
||||
color = PURPLE;
|
||||
x_pos = 21;
|
||||
y_pos = 81;
|
||||
draw_outlined_swatch (screen_buffer, color, x_pos, y_pos, width);
|
||||
set_color_if_clicked (mouse_x, mouse_y, x_pos, y_pos, color, box_size);
|
||||
|
||||
write(screen, screen_buffer, size);
|
||||
|
||||
byte selected_color = SELECTED_COLOR;
|
||||
nat brush_size = 5;
|
||||
|
||||
draw_box(screen_buffer, width, selected_color, mouse_x, mouse_y, brush_size, brush_size);
|
||||
|
||||
jump draw_loop;
|
||||
}
|
||||
|
||||
// Flush and exit
|
||||
exit 0;
|
||||
}
|
||||
|
||||
function set_color_if_clicked (int click_x, int click_y, int box_x, int box_y, byte check_color, int size) {
|
||||
|
||||
// Compute right
|
||||
int right_edge = box_x + size;
|
||||
|
||||
// Compute bottom = box_y + size
|
||||
int bottom_edge = box_y + size;
|
||||
|
||||
// Bounds check: x in [box_x, right] and y in [box_y, bottom]
|
||||
jump_lt_int(fail, click_x, box_x);
|
||||
jump_gt_int(fail, click_x, right_edge);
|
||||
jump_lt_int(fail, click_y, box_y);
|
||||
jump_gt_int(fail, click_y, bottom_edge);
|
||||
|
||||
SELECTED_COLOR = check_color;
|
||||
|
||||
else fail
|
||||
return;
|
||||
}
|
||||
|
||||
function draw_outlined_swatch(nat base, byte color, int x, int y, int width) {
|
||||
|
||||
// Constants
|
||||
const byte selected_color = SELECTED_COLOR;
|
||||
byte background_color = GRAY;
|
||||
|
||||
jump_eq_int set_selected color selected_color;
|
||||
jump end_set_selected;
|
||||
do set_selected
|
||||
background_color = DARK_GRAY;
|
||||
else end_set_selected
|
||||
|
||||
const nat outline_size = 20;
|
||||
const nat fill_size = 17;
|
||||
|
||||
draw_box(base, width, background_color, x, y, outline_size, outline_size);
|
||||
|
||||
const nat offset = 2;
|
||||
int x_off = x + offset;
|
||||
int y_off = y + offset;
|
||||
|
||||
draw_box(base, width, color, x_off, y_off, fill_size, fill_size);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
function draw_box (nat db_base, nat screen_width,
|
||||
byte box_color, nat x_start, nat y_start,
|
||||
nat db_width, nat height) {
|
||||
|
||||
// Compute start address: base + y*640 + x
|
||||
nat fat_ptr_size = 4;
|
||||
|
||||
nat offset = y_start * screen_width;
|
||||
offset = offset + x_start;
|
||||
offset = offset + db_base;
|
||||
offset = offset + fat_ptr_size; // need to add offset for fat pointer size
|
||||
|
||||
int i = 0;
|
||||
const int zero = 0;
|
||||
|
||||
loop draw_box_outer {
|
||||
memset_8 box_color db_width -> offset; // draw row
|
||||
add_int offset screen_width -> offset; // next row += 640
|
||||
sub_int height i -> height; // decrement row count
|
||||
jump_gt_int draw_box_outer height zero;
|
||||
}
|
||||
return;
|
||||
}
|
||||
Loading…
Reference in New Issue