LichenFromExtPrivate.Mesa
Last tweaked by Mike Spreitzer on October 14, 1987 3:13:11 pm PDT
DIRECTORY Asserting, Basics, Collections, IO, LichenDataStructure, RefTab, ViewerClasses;
LichenFromExtPrivate: CEDAR DEFINITIONS
= {OPEN Colls:Collections, LichenDataStructure;
REFTEXT: TYPE = REF TEXT;
Viewer: TYPE = ViewerClasses.Viewer;
Terms: TYPE ~ Asserting.Terms;
Path: TYPE = LIST OF REF ANY--UNION [ROPE, REF Range2]--;
paths: READONLY Colls.Space;
SourceList: TYPE = LIST OF Source;
Source: TYPE = RECORD [stream: IO.STREAMNIL, name: ROPENIL];
Reader: TYPE = REF ReaderRep;
ReaderRep: TYPE = RECORD [
keyword: ROPE,
read: PROC [s: Source, reader: Reader, cr: CellReading],
Consumes newline at end of line.
data: REF ANY];
DesignReading: TYPE = REF DesignReadingRep;
DesignReadingRep: TYPE = MONITORED RECORD [
design: Design,
wDir: ROPE,
cellTypesByName: VarFunction,
fetTypes: RefTab.Ref,
unkosherArrays: Set,
toMerge: Function--array prefix b Set of Path--,
mostRecentPathToMerge: Path ← NIL,
impossibleMerges: ImpossibleMergeList ← NIL,
buffer: REFTEXT,
pacifier, pie, label, pause: Viewer,
stop: BOOLFALSE,
stack: SourceList ← NIL,
curCellTypeName, prefix: ROPENIL,
curArray: BOOLFALSE,
curCellFileLength: REAL ← 0,
change: CONDITION];
undefinedINT: INT = FIRST[INT];
ImpossibleMergeList: TYPE = LIST OF ImpossibleMerge;
ImpossibleMerge: TYPE = RECORD [
arrayInstance: CellInstance, path1, path2: Path];
CellReading: TYPE = REF CellReadingRep;
CellReadingRep: TYPE = RECORD [
dr: DesignReading,
ct: CellType,
name: ROPE,
firstMerge: BOOLTRUE,
resistClasses: INT ← undefinedINT,
rScale: REAL--ohms-- ← 1.0E-3,
cScale: REAL--farads-- ← 1.0E-18,
lUnits: REAL--meters-- ← 1.0E-8,
scalingDefined: BOOLFALSE,
fetCount: INT ← 0,
newArrays: Set--of array cell types instantiated in ct--,
waitingMerges: PathPairList ← NIL
];
PathPairList: TYPE = LIST OF PathPair;
Use: TYPE = RECORD [childName: ROPE, as: ArraySpec];
ArraySpec: TYPE = RECORD [
variant: SELECT kind: * FROM
scalar => [],
array => [
range: Range2,
sep: Int2
]
ENDCASE];
FetTerminal: TYPE = RECORD [
name: SteppyName,
length: INT,
attrs: Assertions];
IntBox: TYPE = RECORD [xmin, ymin, xmax, ymax: INT];
TransformAsTerms: TYPE = Terms;
PathPair: TYPE = REF PathPairPrivate;
PathPairPrivate: TYPE = RECORD [p1, p2: Path];
FetType: TYPE = REF FetTypeRep;
FetTypeRep: TYPE = RECORD [
className: ROPE,
area, perim, twiceLength: INT,
ct: CellType ← NIL];
Register: PROC [keyword: ROPE, read: PROC [s: Source, reader: Reader, cr: CellReading], data: REF ANYNIL];
ReadCellType: PROC [design: Design, cellFileName: ROPE, dr: DesignReading] RETURNS [ct: CellType];
TryArrayFile: PROC [cr: CellReading];
LocalCreateCellType: PROC [design: Design, dr: DesignReading, cellTypeName: ROPE, internals: BOOL, otherPublic, otherPrivate: Assertions ← NIL] RETURNS [ct: CellType];
FinishWaitingMerges: PROC [cr: CellReading];
DoMerges: PROC [s: Source, cr: CellReading];
ComparePaths: PROC [path1, path2: Path] RETURNS [c: Basics.Comparison];
TokenBreak: IO.BreakProc;
GetLineTerms: PROC [from: IO.STREAM] RETURNS [terms: Terms];
R: PROC [r: ROPE] RETURNS [r2: ROPE] = INLINE {r2 ← r}--stupid goddam anachronism--;
}.