#include "project.h" static int computer_to_console[N_COMPUTER + 1]; static int console_to_computer[N_CONSOLE + 1]; static int console_locked[N_CONSOLE + 1]; static MM *mm; int layout_computer_to_console (int computer) { if ((computer < 1) || (computer > N_COMPUTER)) return 0; return computer_to_console[computer]; } int layout_console_to_computer (int console) { if ((console < 1) || (console > N_CONSOLE)) return 0; return console_to_computer[console]; } #ifdef LAYOUT_NULL int layout_possible (int console, int computer) { if ((console < 1) || (console > N_CONSOLE)) return 0; if ((computer < 1) || (computer > N_COMPUTER)) return 0; if (console_locked[console]) return 0; return 1; } #elif defined(LAYOUT_HOME) int layout_possible (int console, int computer) { if ((console < 1) || (console > N_CONSOLE)) return 0; if ((computer < 1) || (computer > N_COMPUTER)) return 0; if (console_locked[console]) return 0; switch (computer) { case 1: case 2: case 3: if (console != 1) return 0; return 1; } switch (console) { case 1: if (computer > 3) return 0; return 1; } return 1; } #endif void layout_map (int console, int computer) { int oc; printf ("layout_map %d %d\n", console, computer); if ((console < 1) || (console > N_CONSOLE)) return; if ((computer < 1) || (computer > N_COMPUTER)) return; oc = console_to_computer[console]; if ((oc > 0) && (oc <= N_COMPUTER)) { computer_to_console[oc] = 0; } computer_to_console[computer] = console; console_to_computer[console] = computer; #ifdef LAYOUT_HOME switch (console) { case 1: VS_set (mm, 4 - computer); break; case 2: MM_set (mm, computer - 3, -1); break; case 3: MM_set (mm, -1, computer - 3); break; } #endif } void layout_status (int active_computer) { int i; for (i = 1; i <= N_COMPUTER; ++i) { int console = layout_computer_to_console (i); status_draw_computer (i, console_locked[console], console, active_computer == i, 0); } for (i = 1; i <= N_CONSOLE; ++i) { int computer = layout_console_to_computer (i); status_draw_console (i, console_locked[i], computer, active_computer == computer, 0); } } void layout_toggle_lock (int computer) { int console = layout_computer_to_console (computer); if ((console < 1) || (console > N_CONSOLE)) return; console_locked[console] = !console_locked[console]; layout_status (computer); } int layout_init (void) { #ifdef LAYOUT_HOME mm = MM_open (); layout_map (1, 3); layout_map (2, 4); layout_map (3, 5); #elif defined(LAYOUT_BROMIUM) layout_map (1, 1); #endif layout_status (3); return 3; }