<> <> DIRECTORY IO, Rope; SimRead: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; FromStream: PROC [from: IO.STREAM, client: Client, format: Format]; Client: TYPE = REF ClientRep; ClientRep: TYPE = RECORD [ GotTransistor: PROC [pd: ParseData, cd: ClientData], GotNode: PROC [pd: ParseData, cd: ClientData], GotInput: PROC [name: ROPE, cd: ClientData] _ NIL, GotOther: PROC [char: CHAR, from: IO.STREAM, cd: ClientData] RETURNS [continue: BOOL] _ NIL, Init: PROC [pd: ParseData, c: Client] _ NIL, warningLog: IO.STREAM _ NIL, data: ClientData _ NIL]; ClientData: TYPE = REF ANY; ParseData: TYPE = REF ParseDataRep; ParseDataRep: TYPE = RECORD [ <> name: ROPE _ NIL, areas, perimiters: ARRAY Layer OF REAL _ ALL[0], <> transistorType: TransistorType _ nE, gate, source, drain: ROPE _ NIL, length, width, area: REAL _ 0, shape: CHARACTER _ '?, <> x, y: REAL _ 0, capacitanceEstimate: REAL _ 0.0, capEstimateClass: CapEstimateClass _ ignore, other: REF ANY _ NIL --for use by Format ]; ceiling: INT = LAST[INT]; <> TransistorType: TYPE = {nE, nD, pE, pD}; Layer: TYPE = {Metal, Metal2, Poly, NDiff, PDiff}; CapEstimateClass: TYPE = {incremental, absolute, ignore}; GetFormat: PROC [name: ROPE] RETURNS [format: Format --NIL if not found--]; <> Format: TYPE = REF FormatRep; FormatRep: TYPE = RECORD [ whatToDo: ARRAY CHAR OF Handler, Init: PROC [pd: ParseData, f: Format] _ NIL, data: FormatData _ NIL]; Handler: TYPE = LIST OF FieldProc; FieldProc: TYPE = PROC [first: CHAR, from: IO.STREAM, f: Format, pd: ParseData, c: Client] RETURNS [continue: BOOL _ TRUE]; FormatData: TYPE = REF ANY; SetFormat: PROC [name: ROPE, format: Format]; NodeName, NodeX, NodeY, MetalArea, PolyArea, DiffArea, MetalPerim, PolyPerim, DiffPerim, EatTrash, ReadCap, Gate, SourceDrain, Length, Width, Shape, TransistorX, TransistorY, TransistorArea, FollowIndirection, EatComment, UseClientsOther: FieldProc; END.