<> <> <> <> DIRECTORY Imager, Pipal, PipalInt; PipalMos: CEDAR DEFINITIONS = BEGIN <> <> <> Layer: TYPE = ATOM; errorLayer: Layer; <> commentLayer: Layer; <> blueCommentLayer: Layer; <> <<>> RopeToLayer: PROC [rope: Pipal.ROPE] RETURNS [layer: Layer _ NIL]; LayerToRope: PROC [layer: Layer] RETURNS [rope: Pipal.ROPE]; RegisterLayerColor: PROC [layer: Layer, color: Imager.ConstantColor]; FetchLayerColor: PROC [layer: Layer] RETURNS [color: Imager.ConstantColor _ NIL]; IsDifLayer: PROC [layer: Layer] RETURNS [BOOL]; IsWellLayer: PROC [layer: Layer] RETURNS [BOOL]; IsSchematicLayer: PROC [layer: Layer] RETURNS [BOOL]; <> <> <<>> boxClass: Pipal.Class; Box: TYPE = REF BoxRec; BoxRec: TYPE = RECORD [size: PipalInt.Size, layer: Layer]; CreateBox: PROC [size: PipalInt.Size, layer: Layer] RETURNS [box: Box]; <> <> <> <<>> starClass: Pipal.Class; Star: TYPE = REF StarRec; StarRec: TYPE = RECORD [ overlayStar: BOOL, -- allows distinguishing between instance satellites and object satellites master: Pipal.Object, satellites: SEQUENCE size: NAT OF Pipal.Object -- satellites can only be Text or transformations of Text ]; CreateStar: PROC [master: Pipal.Object, satellites: Pipal.Objects, overlayStar: BOOL _ FALSE] RETURNS [star: Star]; <> <<>> GetSatelliteText: PROC [satellite: Pipal.Object] RETURNS [text: Text _ NIL]; <> <<>> GetStarTexts: PROC [star: Star] RETURNS [LIST OF Text]; <> <<>> GetNonItalicRopes: PROC [star: Star] RETURNS [LIST OF Pipal.ROPE]; <> <> <> <<>> routingClass: Pipal.Class; Routing: TYPE = REF RoutingRec; RoutingRec: TYPE = RECORD [nodes: SEQUENCE size: NAT OF Pipal.Object]; CreateRouting: PROC [nodes: Pipal.Objects] RETURNS [routing: Routing]; <> <> <<>> tilingClass: Pipal.Class; Tiling: TYPE = REF TilingRec; TilingRec: TYPE = RECORD [sizeX, sizeY: NAT, xyTile: XYTileProc, data: REF _ NIL]; XYTileProc: TYPE = PROC [x, y: NAT, data: REF _ NIL] RETURNS [Pipal.Object]; <> CreateTiling: PROC [sizeX, sizeY: NAT, xyTile: XYTileProc, data: REF _ NIL] RETURNS [tiling: Tiling]; <> <0>> <<>> EachTileProc: TYPE = PROC [x, y: NAT, tile: Pipal.Object, pos: PipalInt.Position] RETURNS [quit: BOOL _ FALSE]; <> <<>> EnumerateTiles: PROC [tiling: Tiling, each: EachTileProc] RETURNS [quit: BOOL _ FALSE]; <> <> <<>> markerClass: Pipal.Class; Marker: TYPE = REF MarkerRec; MarkerRec: TYPE = RECORD [size: PipalInt.Size, layer: Layer]; CreateMarker: PROC [size: PipalInt.Size, layer: Layer] RETURNS [marker: Marker]; <> <> schematicIconClass: Pipal.Class; SchematicIcon: TYPE = REF SchematicIconRec; SchematicIconRec: TYPE = RECORD [ child: Pipal.Object, expression: Pipal.ROPE, -- name of referee or expr to evaluate code: BOOL, -- indicate whether expr is code or the name of a cell type: SchematicIconType ]; SchematicIconType: TYPE = {cell, wire, unnamedWire}; CreateSchematicIcon: PROC [child: Pipal.Object, expression: Pipal.ROPE, code: BOOL, type: SchematicIconType] RETURNS [icon: SchematicIcon]; <> schematicSequenceClass: Pipal.Class; SchematicSequence: TYPE = REF SchematicSequenceRec; SchematicSequenceRec: TYPE = RECORD [ child: Pipal.Object, repetition: Pipal.ROPE -- expression to evaluate indicating the repetition factor ]; CreateSchematicSequence: PROC [child: Pipal.Object, repetition: Pipal.ROPE] RETURNS [seq: SchematicSequence]; <> textClass: Pipal.Class; Text: TYPE = REF TextRec; TextRec: TYPE = RECORD [contents: Pipal.ROPE, font: Imager.Font]; CreateText: PROC [contents: Pipal.ROPE, font: Imager.Font] RETURNS [text: Text]; GetTextFontName: PROC [text: Text] RETURNS [fontName: Pipal.ROPE]; IsItalic: PROC [fontName: Pipal.ROPE] RETURNS [BOOL]; <> pictureClass: Pipal.Class; Picture: TYPE = REF PictureRec; PictureRec: TYPE = RECORD [size: PipalInt.Size, imagerObject: Imager.Object]; CreatePicture: PROC [size: PipalInt.Size, imagerObject: Imager.Object] RETURNS [picture: Picture]; CreatePictureFromInterpress: PROC [size: PipalInt.Size, master: Pipal.ROPE] RETURNS [picture: Picture]; <> <> <> <> <<>> indirectProp: ATOM; <> <> <> <> <<>> atomicProp: ATOM; <> <> <> <> <<>> biAtomicProp: ATOM; <> <> <> <<>> transistorProp: ATOM; <> <> <> isAtomicMethod: Pipal.Method; IsAtomicProc: TYPE = PROC [object: Pipal.Object] RETURNS [BOOL]; IsAtomic: IsAtomicProc; <> < iff object has an Int enumerate method it is not atomic.>> EnumerateAtomic: PipalInt.EnumerateProc; <> <> <<>> clippedEnumerationClass: Pipal.Class; <> ClippedEnumeration: TYPE = REF ClippedEnumerationRec; ClippedEnumerationRec: TYPE = RECORD [ clipRect: PipalInt.Rectangle, child: Pipal.Object ]; CreateClippedEnumeration: PROC [clipRect: PipalInt.Rectangle, child: Pipal.Object] RETURNS [clippedEnumeration: ClippedEnumeration]; <> <<>> CreateClipEnum: PROC [clipRect: PipalInt.Rectangle, child: Pipal.Object] RETURNS [Pipal.Object]; < Pipal.void is returned.>> <> <> <<>> EachRectangleLayerProc: TYPE = PROC [rect: PipalInt.Rectangle, layer: Layer, isMarker: BOOL] RETURNS [quit: BOOL _ FALSE]; EnumerateRectangleLayers: PROC [object: Pipal.Object, each: EachRectangleLayerProc, transformation: PipalInt.Transformation _ [], includeMarkers, includeSchematicLayer: BOOL _ TRUE] RETURNS [quit: BOOL _ FALSE]; <> <<>> ContainsWell: PROC [object: Pipal.Object] RETURNS [BOOL]; TouchProc: TYPE = PROC [touch: TouchProc, trans1: PipalInt.Transformation, object1: Pipal.Object, trans2: PipalInt.Transformation, object2: Pipal.Object] RETURNS [BOOL _ FALSE]; <> <> <> <<>> Touch: TouchProc; <> LayoutTouch: TouchProc; <> SchematicTouch: TouchProc; <> <> <> <<>> TransistorType: TYPE ~ {nE, pE}; extractTransistorMethod: Pipal.Method; ExtractTransistorProc: TYPE = PROC [object: Pipal.Object] RETURNS [type: TransistorType, ch1, ch2, gate, bulk: Pipal.Object, width, length: INT]; <> <<>> ExtractTransistor: ExtractTransistorProc; END.