From 470457e22a1b5537013603d5e367c51e47bb61bf Mon Sep 17 00:00:00 2001 From: James Date: Mon, 5 May 2014 17:50:20 +0100 Subject: fish --- map.c | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 map.c (limited to 'map.c') diff --git a/map.c b/map.c new file mode 100644 index 0000000..d3bd341 --- /dev/null +++ b/map.c @@ -0,0 +1,167 @@ +#include "project.h" + +#ifdef MAP_NULL + +void +map_output (int *computer, int *x, int *y) +{ +} + +#elif defined(MAP_HOME) + +void +map_output (int *computer, int *x, int *y) +{ + + switch (*computer) + { + case 1: + *computer = 5; + break; + case 2: + *computer = 4; + break; + case 3: + *computer = 0; + if (x) + *x = *x / 2; + break; + case 4: + *computer = 0; + if (x) + *x = (*x / 2) + 1024; + break; + case 5: + case 6: + case 7: + (*computer) -= 4; + break; + } +} + +#endif + +int +map_grace_left (int computer) +{ + int console = layout_computer_to_console (computer); + int cl = layout_console_to_computer (console - 1); + + if ((cl < 1) || (cl > N_COMPUTER)) + return 1; + + map_output (&computer, NULL, NULL); + map_output (&cl, NULL, NULL); + + return cl != computer; +} + +int +map_grace_right (int computer) +{ + int console = layout_computer_to_console (computer); + int cl = layout_console_to_computer (console + 1); + if ((cl < 1) || (cl > N_COMPUTER)) + return 1; + + map_output (&computer, NULL, NULL); + map_output (&cl, NULL, NULL); + + return cl != computer; +} + +int +map_switch_left (int *cc) +{ + int computer; + int console; + int ok; + + for (computer = *cc - 1; computer > 0; computer--) + { + +/* First see if this computer is being displayed - if so easy*/ + + if (layout_computer_to_console (computer) > 0) + { + *cc = computer; + layout_status (*cc); + return 1; + } + +/* We're switching left so try console from the left to the right */ + ok = 0; + + for (console = 1; console <= N_CONSOLE; ++console) + { + if (layout_possible (console, computer)) + { + layout_map (console, computer); + if (!ok) + *cc = computer; + computer++; + ok++; + } + } + if (ok) + { + layout_status (*cc); + return 1; + } + } + + + return 0; +} + +int +map_switch_right (int *cc) +{ + int computer; + int console; + int ok; + + + for (computer = *cc + 1; computer <= N_COMPUTER; computer++) + { + +/* First see if this computer is being displayed - if so easy*/ + + if (layout_computer_to_console (computer) > 0) + { + *cc = computer; + layout_status (*cc); + return 1; + } + +/* We're switching right so try console from the left to the right */ + ok = 0; + + for (console = N_CONSOLE; console > 0; --console) + { + if (layout_possible (console, computer)) + { + layout_map (console, computer); + if (!ok) + *cc = computer; + + computer--; + ok++; + } + } + if (ok) + { + layout_status (*cc); + return 1; + } + } + + + return 0; +} + +int +map_init (void) +{ + return layout_init (); +} -- cgit v1.2.3