From 470457e22a1b5537013603d5e367c51e47bb61bf Mon Sep 17 00:00:00 2001 From: James Date: Mon, 5 May 2014 17:50:20 +0100 Subject: fish --- status.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 status.c (limited to 'status.c') diff --git a/status.c b/status.c new file mode 100644 index 0000000..e627338 --- /dev/null +++ b/status.c @@ -0,0 +1,141 @@ +#include "project.h" + + +static int computer_old_locked[N_COMPUTER + 1]; +static int computer_old_active[N_COMPUTER + 1]; +static int computer_old_console[N_COMPUTER + 1]; + + +static int console_old_locked[N_CONSOLE + 1]; +static int console_old_active[N_CONSOLE + 1]; +static int console_old_computer[N_CONSOLE + 1]; + + +void +status_draw_computer (int computer, int locked, int console, int active, + int force) +{ + + int x = (computer - 1) * 45; + int y = 5; + x += 2; + + if (force || (computer_old_locked[computer] != locked)) + { + if (locked != -1) + computer_old_locked[computer] = locked; + else + locked = computer_old_locked[computer]; + lcd_box (x, y, x + 44, y + 44, locked ? 255 : 0, locked ? 0 : 255, + locked ? 127 : 0); + } + + if (force || (computer_old_console[computer] != console)) + { + if (console != -1) + computer_old_console[computer] = console; + else + console = computer_old_console[computer]; + lcd_ss (console ? console : 10, x + 17, y + 11, 11, 22); + } + + if (force || (computer_old_active[computer] != active)) + { + if (active != -1) + computer_old_active[computer] = active; + else + active = computer_old_active[computer]; + lcd_box (x + 5, y + 5, x + 9, y + 9, active ? 255 : 0, active ? 255 : 0, + active ? 255 : 0); + } + +} + +void +status_draw_console (int console, int locked, int computer, int active, + int force) +{ + int x = (console - 1) * 106; + int y = 100; + + + if (force || (console_old_locked[console] != locked)) + { + if (locked != -1) + console_old_locked[console] = locked; + else + locked = console_old_locked[console]; + lcd_box (x, y, x + 105, y + 105, locked ? 255 : 0, locked ? 0 : 255, + locked ? 127 : 0); + } + + if (force || (console_old_computer[console] != computer)) + { + if (computer != -1) + console_old_computer[console] = computer; + else + computer = console_old_computer[console]; + lcd_ss (computer ? computer : 10, x + 35, y + 20, 30, 60); + } + + if (force || (console_old_active[console] != active)) + { + if (active != -1) + console_old_active[console] = active; + else + active = console_old_active[console]; + lcd_box (x + 5, y + 5, x + 9, y + 9, active ? 255 : 0, active ? 255 : 0, + active ? 255 : 0); + } + +} + + +void +status_init (void) +{ + int i; + + lcd_open (); + lcd_on (); + + memset (computer_old_locked, 0xff, sizeof (computer_old_locked)); + memset (computer_old_active, 0xff, sizeof (computer_old_active)); + memset (computer_old_console, 0xff, sizeof (computer_old_console)); + + for (i = 1; i <= N_COMPUTER; ++i) + { + status_draw_computer (i, 0, 0, 0, 0); + } + + memset (console_old_locked, 0xff, sizeof (console_old_locked)); + memset (console_old_active, 0xff, sizeof (console_old_active)); + memset (console_old_computer, 0xff, sizeof (console_old_computer)); + + for (i = 1; i <= N_CONSOLE; ++i) + { + status_draw_console (i, 0, 0, 0, 0); + } + +} + +void +status_reset (void) +{ + int i; + + lcd_close (); + lcd_open (); + lcd_on (); + + for (i = 1; i <= N_COMPUTER; ++i) + { + status_draw_computer (i, -1, -1, -1, 0); + } + + for (i = 1; i <= N_CONSOLE; ++i) + { + status_draw_console (i, -1, -1, -1, 0); + } + +} -- cgit v1.2.3