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 _ cached FetType--, unkosherArrays: Set, toMerge: Fn--array prefix _ Set of Path--, arraySpecs: Fn--array cell type _ REF ArraySpec.array--, 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--; }. ‚LichenFromExtPrivate.Mesa Last tweaked by Mike Spreitzer on April 29, 1988 11:39:23 am PDT Consumes newline at end of line. ΚΥ– "cedar" style˜code™K™@—K˜KšΟk œœ0˜LK˜KšΟnœœ ˜'K˜Kšœœžœ˜)K˜Kšœœœœ˜Kšœœ˜$K˜Kš œœœœœΟcœ˜9K˜Kšœœ ˜K˜Kšœ œœœ˜"Kšœœœ œœœœœ˜BK˜Kšœœœ ˜šœ œœ˜Kšœ œ˜šœœ.˜8K™ —Kšœœœ˜—K˜Kšœœœ˜+šœœ œœ˜+K˜ Kšœœ˜ Kšœ Ÿ ΠcmŸœ˜)K˜Kšœ Ÿ Ÿœ˜*KšœŸ Ÿœ˜8Kšœœ˜"Kšœ(œ˜,Kšœœ˜Kšœ$˜$Kšœœœ˜Kšœœ˜Kšœœœ˜$Kšœ œœ˜Kšœœ˜Kšœ œ˜—K˜Kšœœœœ˜K˜Kšœœœœ˜4šœœœ˜ Kšœ1˜1—K˜Kšœ œœ˜'šœœœ˜K˜K˜ Kšœœ˜ Kšœ œœ˜Kšœœ˜"KšœŸœ ˜KšœŸ œ ˜!KšœŸ œ ˜ Kšœœœ˜Kšœ œ˜KšœŸ*œ˜9Kšœ˜!Kšœ˜—K˜Kšœœœœ ˜&K˜Kšœœœ œ˜4K˜šœ œœ˜šœ œ ˜K˜ šœ ˜ K˜K˜ Kšœ˜—Kšœ˜ ——K˜šœ œœ˜Kšœ˜Kšœœ˜ —K˜Kšœœœœ˜4K˜Kšœ œœ˜%Kšœœœ˜.K˜Kšœ œœ ˜šœ œœ˜Kšœ œ˜Kšœœ˜Kšœœ˜—K˜Kšžœœ œœ5œœœ˜mK˜Kšž œœœœ˜]Kšž œœ˜%Kšžœœ˜,Kšžœœ˜,Kšž œœœ ˜OKšžœœ˜1K˜Kšž œœ ˜K˜KšžœœœœœœœŸœ˜TK˜K˜—…— s