Route Table
For each physical CP, and for each direction, and for each route through the CP, there is an entry in this table to define the maximum speed through the CP. The .state entry corresponds to the _switch turnouts in the System Table. Turnouts can be normal, reverse, or ignore (the turnout state does not affect the route).
const S_CP_SWITCH cp_main[ E_CP_SIZE * E_MAIN_SIZE * E_DIR_SIZE * CP_SWITCH_SIZE ] =
{ // WEST_RAPIDAN CP_WEST_RAPIDAN Heads
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M1 EAST NORMAL 0 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = LIMITED_CLR }, // M1 EAST REVERSE
{ .state = { SW_REVERSE, SW_REVERSE, SW_REVERSE }, .aspect = MED_CLEAR_B }, // M1 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M1 WEST NORMAL 1 0
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M1 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M1 WEST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M2 EAST NORMAL 2 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M2 EAST REVERSE
{ .state = { SW_NORMAL, SW_NORMAL, SW_REVERSE }, .aspect = MED_CLEAR_B }, // M2 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M2 WEST NORMAL 3 0
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = LIMITED_CLR }, // M2 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_REVERSE }, .aspect = STOP }, // M2 WEST BRANCH
// EAST_RAPIDAN CP_EAST_RAPIDAN
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M1 EAST NORMAL 4 0
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M1 EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M1 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M1 WEST NORMAL 5 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = LIMITED_CLR }, // M1 WEST REVERSE
{ .state = { SW_REVERSE, SW_REVERSE, SW_REVERSE }, .aspect = MED_CLEAR_B }, // M1 WEST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M2 EAST NORMAL 6 0
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = LIMITED_CLR }, // M2 EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M2 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M2 WEST NORMAL 7 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M2 WEST REVERSE
{ .state = { SW_NORMAL, SW_NORMAL, SW_REVERSE }, .aspect = MED_CLEAR_B }, // M2 WEST BRANCH
// ALTVISTA CP_ALTAVISTA
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M1 EAST NORMAL 8 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = LIMITED_CLR }, // M1 EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M1 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M1 WEST NORMAL 9 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M1 WEST REVERSE
{ .state = { SW_NORMAL, SW_NORMAL, SW_REVERSE }, .aspect = SLOW_CLEAR }, // M1 WEST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M2 EAST NORMAL 10 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M2 EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M2 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M2 WEST NORMAL 11 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = LIMITED_CLR }, // M2 WEST REVERSE
{ .state = { SW_REVERSE, SW_REVERSE, SW_REVERSE }, .aspect = MED_CLEAR }, // M2 WEST BRANCH
// NORTH_LINDEN CP_NORTH_LINDEN
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M1 EAST NORMAL 12 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = MED_CLEAR }, // M1 EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M1 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M1 WEST NORMAL 13 1
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M1 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M1 WEST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M2 EAST NORMAL 14 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = STOP }, // M2 EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_REVERSE }, .aspect = SLOW_CLEAR }, // M2 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M2 WEST NORMAL 15 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = MED_CLEAR }, // M2 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_REVERSE }, .aspect = STOP }, // M2 WEST BRANCH
// AFTON CP_AFTON
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M1 EAST NORMAL 16 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M1 EAST REVERSE
{ .state = { SW_NORMAL, SW_NORMAL, SW_REVERSE }, .aspect = SLOW_CLEAR }, // M1 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M1 WEST NORMAL 17 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = LIMITED_CLR }, // M1 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_REVERSE }, .aspect = STOP }, // M1 WEST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M2 EAST NORMAL 18 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = LIMITED_CLR }, // M2 EAST REVERSE
{ .state = { SW_REVERSE, SW_REVERSE, SW_REVERSE }, .aspect = SLOW_CLEAR }, // M2 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M2 WEST NORMAL 19 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M2 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M2 WEST BRANCH
// SHELDON_JCT CP_SHELDON_JCT
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M1 EAST NORMAL 20 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = MED_CLEAR }, // M1 EAST REVERSE
{ .state = { SW_NORMAL, SW_NORMAL, SW_REVERSE }, .aspect = STOP }, // M1 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M1 WEST NORMAL 21 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M1 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_REVERSE }, .aspect = RESTRICTING }, // M1 WEST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M2 EAST NORMAL 22 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = STOP }, // M2 EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_REVERSE }, .aspect = MED_CLEAR_B }, // M2 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M2 WEST NORMAL 23 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = MED_CLEAR }, // M2 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M2 WEST BRANCH
// EAST_LINDEN CP_EAST_LINDEN
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M1 EAST NORMAL 24 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = MED_CLEAR }, // M1 EAST REVERSE
{ .state = { SW_NORMAL, SW_NORMAL, SW_REVERSE }, .aspect = SLOW_CLEAR }, // M1 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M1 WEST NORMAL 25 0
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = MED_CLEAR }, // M1 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M1 WEST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M2 EAST NORMAL 26 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = MED_CLEAR }, // M2 EAST REVERSE
{ .state = { SW_REVERSE, SW_REVERSE, SW_REVERSE }, .aspect = SLOW_CLEAR }, // M2 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M2 WEST NORMAL 27 0
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = MED_CLEAR }, // M2 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M2 WEST BRANCH
// WEST_LINDEN CP_WEST_LINDEN
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M1 EAST NORMAL 28 0
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // M1 EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M1 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_IGNORE }, .aspect = CLEAR }, // M1 WEST NORMAL 29 2
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = MED_CLEAR }, // M1 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M1 WEST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M2 EAST NORMAL 30 0
{ .state = { SW_REVERSE, SW_REVERSE, SW_IGNORE }, .aspect = MED_CLEAR }, // M2 EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // M2 EAST BRANCH
{ .state = { SW_NORMAL, SW_NORMAL, SW_NORMAL }, .aspect = CLEAR }, // M2 WEST NORMAL 31 2
{ .state = { SW_REVERSE, SW_NORMAL, SW_IGNORE }, .aspect = STOP }, // M2 WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_REVERSE }, .aspect = MED_CLEAR_B }, // M2 WEST BRANCH
// SHORTLINE_HILL SHORTLINE_HILL 32
{ .state = { SW_REVERSE, SW_REVERSE, SW_REVERSE }, .aspect = MED_CLEAR }, // EAST NORMAL
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // EAST BRANCH
{ .state = { SW_REVERSE, SW_REVERSE, SW_REVERSE }, .aspect = MED_CLEAR }, // WEST NORMAL 33
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // WEST BRANCH
// LINDEN_BRANCH LINDEN_BRANCH 34
{ .state = { SW_REVERSE, SW_REVERSE, SW_REVERSE }, .aspect = MED_CLEAR }, // EAST NORMAL
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // EAST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // EAST BRANCH
{ .state = { SW_REVERSE, SW_REVERSE, SW_REVERSE }, .aspect = MED_CLEAR }, // WEST NORMAL 35
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // WEST REVERSE
{ .state = { SW_IGNORE, SW_IGNORE, SW_IGNORE }, .aspect = STOP }, // WEST BRANCH
// MAIN_3
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = MED_CLEAR }, // EAST NORMAL
{ .state = { SW_REVERSE, SW_NORMAL, SW_NORMAL }, .aspect = STOP }, // EAST REVERSE
{ .state = { SW_REVERSE, SW_IGNORE, SW_REVERSE }, .aspect = MED_CLEAR_B }, // EAST BRANCH
{ .state = { SW_REVERSE, SW_REVERSE, SW_NORMAL }, .aspect = MED_CLEAR }, // WEST NORMAL 35
{ .state = { SW_NORMAL, SW_REVERSE, SW_IGNORE }, .aspect = STOP }, // WEST REVERSE
{ .state = { SW_IGNORE, SW_REVERSE, SW_IGNORE }, .aspect = MED_CLEAR_B }, // WEST BRANCH
};