--routeControlx.mesa

DIRECTORY  RouteDefs;

RouteControl:PROGRAM IMPORTS RouteDefs=BEGIN
OPEN RouteDefs;


Error:SIGNAL=CODE;


GetNewProblem:CtlProc=BEGIN
chipmonk←FALSE; plot←FALSE; print←TRUE;
example←2;
RETURN[-1];
END;


DealWithPowerAndGround:CtlProc={RETURN[-1]};
CreateRunsInsideTheChannels:CtlProc={RETURN[-1]};
InstallEdgeContacts:CtlProc={RETURN[-1]};
ImplementContacts:CtlProc={RETURN[-1]};
OneLambdaSave:CtlProc={RETURN[-1]};

--One day this will be much different. It should include backup

controlTable:ARRAY [0..19) OF CtlProc=
[GetNewProblem,
CreateCells,  --**
CreateRectangles, --**
RectLess, --***
MakeLevelers, --***
CreateTopology, --***
DealWithPowerAndGround,
ChannelLevelRouting, --***
MakeHugs,
RouteIntersections,--**
CreateRunsInsideTheChannels,
TheMainShowIsRouteRunsInChannels, --**
InstallCrossChannelConnections, --***
InstallEdgeContacts,
InstallInternalContacts,--***Crosses
ImplementContacts,
OneLambdaSave,
DoSilicon,--***
CheckLayout--***
];

Main:PROCEDURE=BEGIN
i:INTEGER←0;
InitStorage[];
DO
  what:INTEGER←-2;
  what←controlTable[i][!Interrupt=>EXIT];
  SELECT what FROM
    -2=>RETURN;
    -1=>NULL;
     1=>IF i=14
       THEN {Return[];
            ShowString["REDO MARGINS"];
            IF FALSE THEN ShowString[" suppresed"] ELSE {i←4; LOOP}}
       ELSE Error;
    ENDCASE=>Error;
  IF (i←i+1)>=LENGTH[controlTable] THEN EXIT;
  ENDLOOP;
ReturnStorage[];
END;

Main[];
END.