summaryrefslogtreecommitdiffstats
path: root/map.c
diff options
context:
space:
mode:
authorJames <git@panaceas.org>2014-05-05 17:50:20 +0100
committerJames <git@panaceas.org>2014-05-05 17:50:20 +0100
commit470457e22a1b5537013603d5e367c51e47bb61bf (patch)
tree6b72d32bfd9eaec31c8c520d18782ccaebc01759 /map.c
downloadkmd_usb-470457e22a1b5537013603d5e367c51e47bb61bf.tar.gz
kmd_usb-470457e22a1b5537013603d5e367c51e47bb61bf.tar.bz2
kmd_usb-470457e22a1b5537013603d5e367c51e47bb61bf.zip
fish
Diffstat (limited to 'map.c')
-rw-r--r--map.c167
1 files changed, 167 insertions, 0 deletions
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 ();
+}