DIRECTORY Basics, AbSets, IO, LichenDataStructure, SetBasics, ViewerClasses; LichenFromExtPrivate: CEDAR DEFINITIONS IMPORTS SetBasics = {OPEN Sets:AbSets, LichenDataStructure; REFTEXT: TYPE = REF TEXT; Viewer: TYPE = ViewerClasses.Viewer; Path: TYPE ~ RECORD [ cells: LORA _ NIL, wireName: SteppyName _ noName]; PathV: PROC [p: Path] RETURNS [Sets.Value] ~ INLINE {RETURN [[NEW [Path _ p]]]}; VPath: PROC [v: Sets.Value] RETURNS [Path] ~ INLINE {RETURN [NARROW[v.VA, REF Path]^]}; PTail: PROC [p: Path] RETURNS [Path] ~ INLINE {RETURN [[p.cells.rest, p.wireName]]}; 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, rg: Renaming, fetTypes: Fn--FetType _ cached FetType--, unkosherArrays: Set, clipINN: BiRel--clipped CellInstance's name (as ROPE) X containing CellType's name (as ROPE)--, clipINT: BiRel--clipped CellInstance's name (as ROPE) X containing CellType--, toMerge: Fn--array prefix _ Set of Path--, arraySpecs: Fn--array cell type _ REF ArraySpec.array--, mostRecentPathToMerge: Path _ [], impossibleMerges: ImpossibleMergeList _ NIL, buffer: REFTEXT, pacifier, pie, label, pause: Viewer, stop: BOOL _ FALSE, stack: SourceList _ NIL, index: INT _ 0, curCellTypeName, prefix: ROPE _ NIL, curArray: BOOL _ FALSE, curCellFileLength: REAL _ 0, change: CONDITION]; undefinedINT: INT = FIRST[INT]; Renaming: TYPE ~ Fn--cell type name _ Fn(old wire name (ROPE) _ new (SteppyName))--; 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: ROPE, 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]; MergeWork: PUBLIC PROC [cr: CellReading, path1, path2: Path] RETURNS [success: BOOL]; MergeFinal: PROC [dr: DesignReading, ct: CellType, path1, path2: Path]; ArrayMerge: PROC [cr: CellReading, arrayInstance: CellInstance, instanceName: ROPE, path1, path2: Path, may: BOOL] RETURNS [merged: BOOL]; DoMerges: PROC [s: Source, cr: CellReading]; ComparePaths: PROC [path1, path2: Path] RETURNS [c: SetBasics.TotalComparison]; CheckArrayUsage: PROC [d: Design, act: CellType]; ParsePath: PROC [s: Source, dr: DesignReading, from: CellType, asRope: ROPE, map: BOOL] RETURNS [Path]; FmtPath: PROC [path: Path] RETURNS [r: ROPE]; MapName: PROC [dr: DesignReading, ct: CellType, wn: ROPE] RETURNS [SteppyName]; MapFirst: PROC [dr: DesignReading, ct: CellType, sn: SteppyName] RETURNS [SteppyName]; PathGet: PROC [dr: DesignReading, from: CellType, path: Path, mayAdd: BOOL] RETURNS [w: Wire]; TokenBreak: IO.BreakProc; R: PROC [r: ROPE] RETURNS [ROPE] ~ INLINE {RETURN [r]}--stupid goddam anachronism--; }. ‚LichenFromExtPrivate.Mesa Last tweaked by Mike Spreitzer on April 12, 1989 3:11:49 pm PDT Consumes newline at end of line. ΚW– "cedar" style˜code™K™?—K˜KšΟk œœ0˜LK˜šΟnœœ ˜'Kšœ ˜—K˜Kšœœžœ˜)K˜Kšœœœœ˜Kšœœ˜$K˜šœœœ˜Kšœœœ˜K˜—K˜šžœœ œ ˜*Kšœœœœ˜%—K˜šžœœœ˜*Kš œœœœœœ ˜,—K˜šžœœ œ˜$Kšœœœ˜/—K˜Kšœœ ˜K˜Kšœ œœœ˜"Kšœœœ œœœœœ˜BK˜Kšœœœ ˜šœ œœ˜Kšœ œ˜šœœ.˜8K™ —Kšœœœ˜—K˜Kšœœœ˜+šœœ œœ˜+K˜ Kšœœ˜ K˜ Kšœ Οc ΠcmŸœ˜)K˜KšœŸ( Ÿ'œ˜_KšœŸ( Ÿœ˜NKšœ Ÿ Ÿœ˜*KšœŸ Ÿœ˜8Kšœœ˜!Kšœ(œ˜,Kšœœ˜Kšœ$˜$Kšœœœ˜Kšœœ˜Kšœœ˜Kšœœœ˜$Kšœ œœ˜Kšœœ˜Kšœ œ˜—K˜Kšœœœœ˜K˜Kš œ œŸ Ÿ Ÿœ˜TK˜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š ž œœœ'œ œ˜UKšž œœ7˜GKš ž œœ>œœœ œ˜ŠKšžœœ˜,Kšž œœœ ˜OKšžœœ˜1Kš ž œœ8œœœ˜gKšžœœœœ˜-Kšžœœ'œœ˜OKšžœœ3œ˜VKšžœœ9œœ ˜^K˜Kšž œœ ˜K˜KšžœœœœœœœŸœ˜TK˜K˜—…— ω