diff options
author | James <git@panaceas.org> | 2014-05-05 17:50:20 +0100 |
---|---|---|
committer | James <git@panaceas.org> | 2014-05-05 17:50:20 +0100 |
commit | 470457e22a1b5537013603d5e367c51e47bb61bf (patch) | |
tree | 6b72d32bfd9eaec31c8c520d18782ccaebc01759 /map.c | |
download | kmd_usb-470457e22a1b5537013603d5e367c51e47bb61bf.tar.gz kmd_usb-470457e22a1b5537013603d5e367c51e47bb61bf.tar.bz2 kmd_usb-470457e22a1b5537013603d5e367c51e47bb61bf.zip |
fish
Diffstat (limited to 'map.c')
-rw-r--r-- | map.c | 167 |
1 files changed, 167 insertions, 0 deletions
@@ -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 (); +} |