<> <> DIRECTORY Basics, AbSets, IO, LichenDataStructure, SetBasics, ViewerClasses; LichenFromExtPrivate: CEDAR DEFINITIONS = {OPEN Sets:AbSets, LichenDataStructure; REFTEXT: TYPE = REF TEXT; Viewer: TYPE = ViewerClasses.Viewer; Path: TYPE = LIST OF REF ANY--UNION [ROPE, REF Range2]--; paths: READONLY Sets.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], <> data: REF ANY]; DesignReading: TYPE = REF DesignReadingRep; DesignReadingRep: TYPE = MONITORED RECORD [ d: Design, wDir: ROPE, fetTypes: Fn--FetType unkosherArrays: Set, toMerge: Fn--array prefix arraySpecs: Fn--array cell type 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]; IntBox: TYPE = RECORD [xmin, ymin, xmax, ymax: INT]; 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 [d: Design, cellFileName: ROPE, dr: DesignReading] RETURNS [ct: CellType]; TryArrayFile: PROC [cr: CellReading]; FinishWaitingMerges: PROC [cr: CellReading]; DoMerges: PROC [s: Source, cr: CellReading]; ComparePaths: PROC [path1, path2: Path] RETURNS [c: SetBasics.TotalComparison]; CheckArrayUsage: PROC [d: Design, act: CellType]; TokenBreak: IO.BreakProc; R: PROC [r: ROPE] RETURNS [ROPE] ~ INLINE {RETURN [r]}--stupid goddam anachronism--; }.