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. PCabbageImpl.mesa Copyright c 1986 by Xerox Corporation. All rights reversed. Created by Bryan Preas, February 6, 1987 5:11:13 pm PST Returns the innerPos needed for centering the inner in the pad frame. This is usually what is desired. However the position of the inner cell can be positioned other than in the center. Extends the wires of oldInner to make an proper inner. The extension takes into account the routing layer. Extends the wires of oldPadSides to make an proper PadSides. The extension takes into account the routing layer. Route the chip Route a pad limited chip ΚH˜– "Cedar" stylešœ™Jšœ Οmœ1™