<> <> <> <> DIRECTORY CD, RefTab, Rope, RTBasic; Connections: CEDAR DEFINITIONS = BEGIN <> <> <> ROPE: TYPE = Rope.ROPE; Side: TYPE ~ RTBasic.Side; Object: TYPE = CD.Object; Layer: TYPE = CD.Layer; <> Table: TYPE = RefTab.Ref; -- A RefTab with operations Key: TYPE = REF; Net: TYPE = REF NetRec; NetRec: TYPE = RECORD [ name: ROPE _ NIL, -- required to be unique among the nets width: INT _ 0, -- 0 default means minimum size segments: Segments _ NIL, -- pins for this net netDat: REF ANY _ NIL -- for client use ]; Segments: TYPE = LIST OF Segment; Segment: TYPE = REF SegmentRec; SegmentRec: TYPE = RECORD [ name: Rope.ROPE _ NIL, -- optional name of connection object: Object _ NIL, -- the owning object range: Range _ [0, 0], -- in interest coordinate system side: Side, -- side toward which routing should connect layer: Layer _ CD.undefLayer, segmentDat: REF ANY _ NIL -- for client use ]; Range: TYPE = RECORD [ min, max: INT -- range of segment along side ]; <> CreateForRopes: PROC [mod: NAT _ 17] RETURNS [Table]; <> Fetch: PROC [table: Table, key: Key] RETURNS [found: BOOL, net: Net]; <> <> <> Store: PROC [table: Table, key: Key, net: Net] RETURNS [BOOL]; <> <> InsertPins: PROC [table: Table, object: CD.Object, pinFilter: PinFilterProc _ NIL, makeHashKey: HashKeyProc _ NIL]; <> PinFilterProc: TYPE = PROC [inst: CD.Instance, obj: CD.Object] RETURNS [keepIt: BOOL _ TRUE]; HashKeyProc: TYPE = PROC [instance: CD.Instance] RETURNS [key: Rope.ROPE]; <> EnumerateNets: PROC [table: Table, action: EachNetAction] RETURNS [quit: BOOL]; <> <> <> <> EachNetAction: TYPE = PROC [key: Key, net: Net] RETURNS [quit: BOOL _ FALSE]; EnumerateSegments: PROC [net: Net, action: EachSegmentAction] RETURNS [quit: BOOL]; <> <> <> <> EachSegmentAction: TYPE = PROC [net: Net, segment: Segment] RETURNS [quit: BOOL _ FALSE]; END.