<> <> <> <> <<-- InstWidth - find width of component at current orientation>> <<-- InstHeight - find height of component at current orientation>> <<-- BpHeight - find height of bp when considering side it is on>> <<-- BpWidth - find width of bp when considering side it is on>> <<-- MinMaxBPOffset - find min and max offsets of bonding pads on side>> <<-- BpOffsets - find offsets of bonding pads on side>> <<-- BpPos - find position of inst on side>> <<-- PosOf- find the position (side, x, and y) of a component on a pin>> <<-- RotateRect- Rotate a rectangle of a cell>> <<-- LgOffsets- determine offsets of components in row>> <<-- AllOffsets - determine all component offsets>> <<-- AsgnChanPos - assign current positions to horizontal and vertical channels>> <<-- RowsForInsts - find rows that these comps are on>> <<-- CheckInsts - check row and position of comps>> <<-- CheckInst - check row and position of a inst>> <<-- EnumeratePinsOnInst - enumerate the net pins on an instance>> <<-- CDOrien - get the CD orientation on an instance>> DIRECTORY CD, CoreClasses, SC, SCPrivate, Rope, RTBasic; SCInstUtil: CEDAR DEFINITIONS = BEGIN defltLgOrien: SCPrivate.Orientation; defltBpOrien: ARRAY SC.Side OF SCPrivate.Orientation; <> InstWidth: PROCEDURE[inst: SCPrivate.Instance] RETURNS[width: SC.Number]; <> InstHeight: PROCEDURE[inst: SCPrivate.Instance] RETURNS[height: SC.Number]; <> BpHeight: PROCEDURE[inst: SCPrivate.Instance] RETURNS[height: SC.Number]; <> BpWidth: PROCEDURE[inst: SCPrivate.Instance] RETURNS[width: SC.Number]; <> MinMaxBPOffset: PROCEDURE[handle: SC.Handle, side: SC.Side] RETURNS [minOffset, maxOffset: SC.Number]; <> BpOffsets: PROCEDURE[handle: SC.Handle, side: SC.Side, pos1, pos2: SCPrivate.ZMaxPosSr _ 0]; <> CheckBpOffsets: PROCEDURE[handle: SC.Handle, side: SC.Side]; <> <> BpPos: PROCEDURE[handle: SC.Handle, inst: SCPrivate.Instance] RETURNS[result: SC.Number]; <> <> InstPosOf: PROCEDURE[handle: SC.Handle, inst: SCPrivate.Instance, pin: SCPrivate.ObjectPin] RETURNS[pos: RTBasic.PQPos]; <> PinDescription: TYPE = RECORD [ xPos, yPos: SC.Number, sideOn: SC.Side]; PosOf: PROCEDURE[inst: SCPrivate.Instance, pin: SCPrivate.ObjectPin] RETURNS [pinDes: PinDescription]; <<>> <> RotateRect: PROCEDURE[inst: SCPrivate.Instance, defRect: SC.Rect] RETURNS [newRect: SC.Rect]; <> LgOffsets: PROCEDURE[handle: SC.Handle, row: SCPrivate.ZMaxRowSr, pos1, pos2: SCPrivate.ZMaxPosSr _ 0]; <> AllOffsets: PROCEDURE[handle: SC.Handle]; <> AsgnChanPos: PROCEDURE[handle: SC.Handle]; <> ChansForInsts: PROCEDURE[handle: SC.Handle, insts: SCPrivate.InstanceList] RETURNS [touchesChan: SCPrivate.ChanSet]; <> CheckInst: PROCEDURE[handle: SC.Handle, inst: SCPrivate.Instance]; <> CheckInsts: PROCEDURE[handle: SC.Handle]; EnumerateInstances: PROC [handle: SC.Handle, startInst, stopInst: SCPrivate.MaxInstanceSr, eachInstance: EachInstanceProc] RETURNS [quit: BOOL]; EnumerateAllInstances: PROC [handle: SC.Handle, eachInstance: EachInstanceProc] RETURNS [quit: BOOL]; EachInstanceProc: TYPE = PROC [instance: SCPrivate.Instance] RETURNS [quit: BOOL _ FALSE]; EnumeratePinsOnInst: PROC [instance: SCPrivate.Instance, eachPin: EachPinProc] RETURNS [quit: BOOL]; EachPinProc: TYPE = PROC [instance: SCPrivate.Instance, pin: NAT, netPin: SCPrivate.PinNet] RETURNS [quit: BOOL _ FALSE]; DefineInstance: PROCEDURE [handle: SC.Handle, instanceName: Rope.ROPE, object: SCPrivate.Object, coreInstance: CoreClasses.CellInstance, equivName: Rope.ROPE _ NIL] RETURNS [instance: SCPrivate.Instance _ NIL]; NumInstsOnList: PROCEDURE [instsances: SCPrivate.InstanceList] RETURNS [count: SCPrivate.ZMaxInstanceSr]; CDOrien: PROCEDURE[instance: SCPrivate.Instance] RETURNS [orien: CD.Orientation]; END.