<> <> <> <> DIRECTORY CD, CDAtomicObjects, CDBasics, Core, CoreClasses, CoreFlat; CoreGeometry: CEDAR DEFINITIONS = BEGIN <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> CellType : TYPE = Core.CellType; Properties : TYPE = Core.Properties; ROPE: TYPE = Core.ROPE; Wire: TYPE = Core.Wire; CellInstance: TYPE = CoreClasses.CellInstance; FlatWire: TYPE = CoreFlat.FlatWire; FlatWireRec: TYPE = CoreFlat.FlatWireRec; FlatCellType: TYPE = CoreFlat.FlatCellType; FlatCellTypeRec: TYPE = CoreFlat.FlatCellTypeRec; Bindings: TYPE = CoreFlat.Bindings; InstancePath: TYPE = CoreFlat.InstancePath; Rect: TYPE = CD.Rect; Instance: TYPE = CD.Instance; Instances: TYPE = LIST OF Instance; universe: Rect = CDBasics.universe; <> Decoration: TYPE = REF DecorationRec; <> <> <<>> <> DecorationRec: TYPE = PRIVATE RECORD [ name: ROPE, -- Documentation purpose only irProp: ATOM, -- Hangs on the Cell Type, to specify the InterestRect of the corresponding object pinsProp: ATOM, -- Hangs on each public wire to specify the pins of the public. Pins should be understood as the more general meaning of "interface geometry", and are not only pins but also rectangles. Access to this property should be made via the procedural interface. geometryProp: ATOM, -- Hangs on every internal wires of record cellTypes to specify the geometry of the internal (but only at this level in the record). transfProp: ATOM -- hangs on every CoreClasses.CellInstance of record cellTypes to specify the corresponding Instance. ]; CreateDecoration: PROC [name: ROPE] RETURNS [decoration: Decoration]; <> <> <> <<>> EachInstanceProc: TYPE = PROC [instance: Instance] RETURNS [quit: BOOL _ FALSE]; <> <> HasIR: PROC [decoration: Decoration, cellType: CellType] RETURNS [BOOL]; <> GetIR: PROC [decoration: Decoration, cellType: CellType] RETURNS [ir: Rect]; <> <<>> PutIR: PROC [decoration: Decoration, cellType: CellType, ir: Rect]; <> EnumeratePins: PROC [decoration: Decoration, public: Wire, eachInstance: EachInstanceProc] RETURNS [quit: BOOL]; <> <> <> <<>> HasPins: PROC [decoration: Decoration, public: Wire] RETURNS [BOOL]; <> GetPins: PROC [decoration: Decoration, public: Wire] RETURNS [pins: Instances]; <> <> <> <<>> PutPin: PROC [decoration: Decoration, public: Wire, pin: Instance]; <> <<>> PutPins: PROC [decoration: Decoration, public: Wire, pins: Instances]; <> <> EachFlatWireProc: TYPE = PROC [wire: Wire, flatWire: FlatWireRec, geometry: Instances]; <> <> EachFlatCellProc: TYPE = PROC [bindings: Bindings, cell: CellType, flatCell: FlatCellTypeRec, transf: Instance]; < CoreFlat.FlatWire]. When cell=root, bindings=NIL>> <> LeafProc: TYPE = PROC [cellType: CellType] RETURNS [BOOL]; <> EnumerateFlatGeometry: PROC [decoration: Decoration, root: CellType, leafProc: LeafProc, eachFlatWire: EachFlatWireProc _ NIL, eachFlatCell: EachFlatCellProc _ NIL, clipRect: Rect _ universe]; <> <> <> <> <> <> <<>> GetGeometry: PROC [decoration: Decoration, internal: Wire] RETURNS [geometry: Instances]; <> <<>> PutGeometry: PROC [decoration: Decoration, internal: Wire, geometry: Instances]; <> <> GetTransf: PROC [decoration: Decoration, cellInstance: CellInstance] RETURNS [transf: Instance]; <> <<>> PutTransf: PROC [decoration: Decoration, cellInstance: CellInstance, transf: Instance]; <> <> <> <> <> Side: TYPE = {bottom, right, top, left}; Sides: TYPE = PACKED ARRAY Side OF BOOL _ noSide; noSide: Sides = ALL [FALSE]; GetSides: PROC [ir: Rect, pin: Instance] RETURNS [sides: Sides _ noSide]; EachPinProc: TYPE = PROC [min, max: INT, side: Side, layer: CD.Layer] RETURNS [quit: BOOL _ FALSE]; EnumerateSides: PROC [decoration: Decoration, cellType: CellType, wire: Wire, eachPin: EachPinProc] RETURNS [quit: BOOL]; <> EachWirePinProc: TYPE = PROC [wire: Wire, min, max: INT, side: Side, layer: CD.Layer] RETURNS [quit: BOOL _ FALSE]; EnumerateWireSides: PROC [decoration: Decoration, cellType: CellType, eachWirePin: EachWirePinProc] RETURNS [quit: BOOL]; <> <> EnumerateNonOverlappingSides: PROC [decoration: Decoration, cellType: CellType, eachWirePin: EachWirePinProc] RETURNS [quit: BOOL]; <> EachSortedPinProc: TYPE = PROC [wire: Wire, min, max: INT, layer: CD.Layer] RETURNS [quit: BOOL _ FALSE]; EnumerateSortedSides: PROC [decoration: Decoration, cellType: CellType, side: Side, eachSortedPin: EachSortedPinProc] RETURNS [quit: BOOL]; <> <> <> CreateShell: PROC [decoration: Decoration, cellType: CellType, withCuteFonts: BOOL _ FALSE] RETURNS [shell: CD.Object]; <> <> <> <> CheckInterface: PROC [decoration: Decoration, cellType: CellType] RETURNS [ok: BOOL]; <> <<>> CheckInternal: PROC [decoration: Decoration, recordCell: CellType] RETURNS [ok: BOOL]; <> <> LazyPinsEnumerateProc: TYPE = PROC [decoration: Decoration, public: Wire, eachInstance: EachInstanceProc] RETURNS [quit: BOOL]; PutLazyPins: PROC [decoration: Decoration, public: Wire, lazyPinsEnumerate: LazyPinsEnumerateProc]; <> <<>> PutIndirectLazyPins: PROC [decoration: Decoration, public: Wire, indirect: Wire]; <> <> <<>> PutIndirectsLazyPins: PROC [decoration: Decoration, public: Wire, indirects: LIST OF Wire]; <> <> <<>> AddIndirectLazyPins: PROC [decoration: Decoration, public: Wire, indirect: Wire]; <> <> <<>> PutTransfWireIRLazyPins: PROC [decoration: Decoration, public: Wire, indirect: Wire, transf: Instance, ir: Rect]; <> <> <<>> PutRecordLazyPins: PROC [decoration: Decoration, public: Wire, recordCell: CellType]; <> <> <> <> <<>> AtEdge: PROC [ir: Rect, instance: Instance] RETURNS [BOOL]; <> <<>> TransfedNotAtEdge: PROC [transf: Instance, ir: Rect, instance: Instance] RETURNS [BOOL]; <> <> <<>> Intersect: PROC [clipRect: Rect, instance: Instance] RETURNS [BOOL]; <> Transform: PROC [transf, instance: Instance] RETURNS [Instance]; <> TransformList: PROC [transf: Instance, instances: Instances] RETURNS [Instances]; <> <> FlattenAtomic: PROC [obj: CD.Object] RETURNS [rList: CDAtomicObjects.DrawList _ NIL]; <> <> < NIL>> < InterestRect of itself>> <<>> <> <<>> TouchProc: TYPE = PROC [instance1, instance2: Instance] RETURNS [BOOL _ FALSE]; <> <<>> Touch: TouchProc; <<>> TouchRect: PROC [instance: Instance, rect: Rect, layer: CD.Layer] RETURNS [BOOL _ FALSE]; <> TouchList: PROC [instances: Instances, instance: Instance] RETURNS [BOOL _ FALSE]; <> TouchListList: PROC [instances1, instances2: Instances] RETURNS [BOOL _ FALSE]; <> <<>> END.