<> <> 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], <> 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 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--; }.