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.STREAM ← NIL, name: ROPE ← NIL];
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: BOOL ← FALSE,
stack: SourceList ← NIL,
curCellTypeName, prefix: ROPE ← NIL,
curArray: BOOL ← FALSE,
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: BOOL ← TRUE,
resistClasses: INT ← undefinedINT,
rScale: REAL--ohms-- ← 1.0E-3,
cScale: REAL--farads-- ← 1.0E-18,
lUnits: REAL--meters-- ← 1.0E-8,
scalingDefined: BOOL ← FALSE,
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 ANY ← NIL];
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--;
}.