<> <> <> <> <> DIRECTORY Buttons, Containers, IO, Rope, ViewerClasses; ICTest: CEDAR DEFINITIONS = BEGIN Viewer: TYPE = ViewerClasses.Viewer; Handle: TYPE = REF ICTestRec; Stop: TYPE = {dont, abortDie, abortWafer, interrupt}; DiePosition: TYPE = RECORD [x,y: CARDINAL]; AbortDieSignal: ERROR; AbortWaferSignal: ERROR; InterruptSignal: ERROR; ICTestRec: TYPE = RECORD [ outer: Containers.Container _ NIL, -- handle for the IC Test viewer tHeight: CARDINAL _ 0, -- height to put next Test button cHeight: CARDINAL _ 0, -- height to put next Control button inStream: IO.STREAM _ NIL, -- file containing run and wafer number lists viewerout: IO.STREAM _ NIL, -- typescript to log messages in currentDie: DiePosition, -- die to return to upon "Continue" button currentTestProc: TestProc, -- test procedure to run upon "Start Test" or "Continue" enableStepper: BOOL _ FALSE, -- internal, enables sending commands to ElectroGlas enableTester: BOOL _ FALSE, -- enables sending commands to Tester waferFile: Viewer _ NIL, -- handle for waferFile text viewer run: Viewer _ NIL, -- handle for run text viewer wafer: Viewer _ NIL, -- handle for wafer text viewer die: Viewer _ NIL, -- handle for die text viewer clock: Viewer _ NIL, -- handle for clock text viewer clientData: REF ANY _ NIL, -- handle for client's data stop: Stop _ dont, -- internal, state of control buttons backupToken: IO.STREAM, -- internal, file stream parsing testInProgress: BOOL _ FALSE, -- internal, button monitor testButtonList: LIST OF Buttons.Button -- internal, list of registered test buttons ]; TestProc: TYPE = PROC[h: Handle]; ControlProc: TYPE = PROC[h: Handle, control: BOOL]; MakeICTestTool: PROC [name: Rope.ROPE, maxButtons: CARDINAL] RETURNS [h: Handle]; <> PutUpTestButton: PROC [buttonName: Rope.ROPE, proc: TestProc, h: Handle]; <> PutUpControlButton: PROC [buttonName: Rope.ROPE, proc: ControlProc, h: Handle, initialState: BOOL _ FALSE]; <> CheckStop: PROC [h: Handle]; <> END.