<> <> <> DIRECTORY Cabbage, CabbagePrivate, Connections, CD, Rope; CabbageImpl: CEDAR PROGRAM IMPORTS CabbagePrivate EXPORTS Cabbage = BEGIN Error: PUBLIC ERROR[errorType: Cabbage.ErrorType _ callingError, explanation: Rope.ROPE _ NIL] = CODE; Signal: PUBLIC SIGNAL[errorType: Cabbage.ErrorType _ callingError, explanation: Rope.ROPE _ NIL] = CODE; defaultPadRingParams: PUBLIC Cabbage.PadRingParams _ NEW[Cabbage.PadRingParamsRec _ ["metal", "metal2"]]; <> Center: PUBLIC PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: Cabbage.Object, parms: Cabbage.PadRingParams] RETURNS [innerPos: CD.Position] = { handle: CabbagePrivate.Handle _ CabbagePrivate.CreateHandle[inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left, NIL, parms, NIL, normal]; lowerY: INT _ handle.bottom.orgin.y + handle.bottom.size.y; upperY: INT _ handle.top.orgin.y - handle.inner.size.y; lowerX: INT _ handle.left.orgin.x + handle.left.size.x; upperX: INT _ handle.right.orgin.x - handle.inner.size.x; innerPos _ [(lowerX + upperX)/2, (lowerY + upperY)/2]}; <> MakeInner: PUBLIC PROC [oldInner: Cabbage.Object, connections: Connections.Table, parms: Cabbage.PadRingParams] RETURNS [inner: Cabbage.Object] = { }; <<>> <> MakeOuter: PUBLIC PROC [oldOuter: Cabbage.Object, side: Cabbage.Side, connections: Connections.Table, parms: Cabbage.PadRingParams] RETURNS [outer: Cabbage.Object] = { }; <<>> <> PadRoute: PUBLIC PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: Cabbage.Object, innerPos: CD.Position, connections: Connections.Table, parms: Cabbage.PadRingParams _ defaultPadRingParams, name: Rope.ROPE] RETURNS [chip: Cabbage.Object] = { handle: CabbagePrivate.Handle _ CabbagePrivate.CreateHandle[inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left, connections, parms, name, normal]; CabbagePrivate.CheckInnerPos[handle, innerPos]; CabbagePrivate.GlobalRoute[handle]; CabbagePrivate.DetailedRoute[handle]; chip _ CabbagePrivate.MakeChip[handle]; }; <> PadLimitedRoute: PUBLIC PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: Cabbage.Object, innerPos: CD.Position, connections: Connections.Table, parms: Cabbage.PadRingParams _ defaultPadRingParams, name: Rope.ROPE] RETURNS [chip: Cabbage.Object] = { handle: CabbagePrivate.Handle _ CabbagePrivate.CreateHandle[inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left, connections, parms, name, padLimited]; CabbagePrivate.CheckInnerPos[handle, innerPos]; CabbagePrivate.GlobalRoute[handle]; CabbagePrivate.DetailedRoute[handle]; chip _ CabbagePrivate.MakeChip[handle]; }; END.