<> <> <> <> <> <<>> <> <<>> DIRECTORY CD, Rope; Onion: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; <> LayersParameters: TYPE = REF LayersParametersRec; LayersParametersRec: TYPE = RECORD [ radialLayer: CD.Layer, ringLayer: CD.Layer, ringWidth: RingWidthProc, wireExtendProc: WireExtendProc -- NIL means no extension wanted! ]; <> defaultLayersParameters: READONLY LayersParameters; -- = REF [ <> <> <> <> <<];>> channelDefaultParameters: READONLY LayersParameters; -- = REF [ <> <> <> <> <<];>> <> WireExtendProc: TYPE = PROC [width, length: INT] RETURNS [wire: CD.Object]; WireExtendMetToMet: WireExtendProc; WireExtendPolToMetForPads: WireExtendProc; <> RingWidthProc: TYPE = PROC [netName: ROPE] RETURNS [ringWidth: CD.Number]; RingWidthIs4 <> IncludePin: PUBLIC PROC [cell: CD.Object, name: ROPE, layer: CD.Layer, size, position: CD.Position, orientation: CD.Orientation _ 0] RETURNS [newInst: CD.Instance]; <> Center: PROC [inner, outer: CD.Object] RETURNS [innerPos: CD.Position]; <> MakeInner: PROC [obj: CD.Object] RETURNS [inner: CD.Object]; <<-- doneOnce means done once, and finishedAll means done many times, including the finil extension to the outer. >> Status: TYPE = {doneOnce, impossible, finishedAll}; <<-- innerPos is the location of the origin of inner in the coord system of outer. THIS ONE IS THE IMPORTANT ONE. Status is at the end either impossible or finishedAll.>> LRSRoute: PROC [inner, outer: CD.Object, innerPos: CD.Position, params: LayersParameters _ defaultLayersParameters] RETURNS [cell: CD.Object, status: Status]; END.