DIRECTORY Rope, SC, SCPrivate; SCRowUtil: CEDAR DEFINITIONS = BEGIN sideName: ARRAY SC.SideOrNone OF Rope.ROPE; FindMaxRow: PROCEDURE [handle: SC.Handle] RETURNS [maxRowWidth: SC.Number, numMaxRows: SCPrivate.ZMaxRowSr]; FindRouteType: PROCEDURE[chan: SCPrivate.MaxChanSr] RETURNS[routeType: SCPrivate.RouteType] = INLINE {RETURN[IF chan MOD 2 # 0 THEN routeType _ minRoute ELSE routeType _ maxRoute]}; AuditRowLengths: PROCEDURE[handle: SC.Handle]; ComputeRowHeight: PROCEDURE[handle: SC.Handle, row: SCPrivate.MaxRowSr]; ComputeSideHeight: PROCEDURE[handle: SC.Handle, side: SC.Side]; RowsForInsts: PROCEDURE[insts: SCPrivate.InstanceList] RETURNS [onSide: SCPrivate.SideSet, onRow: SCPrivate.RowSet]; EnumerateRows: PROC [handle: SC.Handle, eachRow: EachRowProc] RETURNS [quit: BOOL]; EachRowProc: TYPE = PROC [row: SCPrivate.MaxRowSr, lgRow: SCPrivate.LgRow] RETURNS [quit: BOOL _ FALSE]; EnumerateSides: PROC [handle: SC.Handle, eachSide: EachSideProc] RETURNS [quit: BOOL]; EachSideProc: TYPE = PROC [side: SC.Side, bpRow: SCPrivate.BpRow] RETURNS [quit: BOOL _ FALSE]; EnumerateAllInstsOnRow: PROC [handle: SC.Handle, row: SCPrivate.MaxRowSr, eachInstance: EachInstProc] RETURNS [quit: BOOL]; EnumerateInstsOnRow: PROC [handle: SC.Handle, row: SCPrivate.MaxRowSr, startPos, endPos: SCPrivate.ZMaxPosSr, eachInstance: EachInstProc] RETURNS [quit: BOOL]; EnumerateInstsOnRowDecreasing: PROC [handle: SC.Handle, row: SCPrivate.MaxRowSr, startPos, endPos: SCPrivate.ZMaxPosSr, eachInstance: EachInstProc] RETURNS [quit: BOOL]; EachInstProc: TYPE = PROC [pos: NAT, instance: SCPrivate.Instance] RETURNS [quit: BOOL _ FALSE]; EnumerateAllInstsOnSide: PROC [handle: SC.Handle, side: SC.Side, eachInstance: EachInstProc] RETURNS [quit: BOOL]; EnumerateInstsOnSide: PROC [handle: SC.Handle, side: SC.Side, startPos, endPos: SCPrivate.ZMaxPosSr, eachInstance: EachInstProc] RETURNS [quit: BOOL]; EnumerateInstsOnSideDecreasing: PROC [handle: SC.Handle, side: SC.Side, startPos, endPos: SCPrivate.ZMaxPosSr, eachInstance: EachInstProc] RETURNS [quit: BOOL]; END. \file ///StdCell/SCRowUtil.mesa row utility routines find the max row length determine if this chan gets a min or a max route audit the row lengths compute height of row height is max of component heights on row compute height of side height is max of component heights on side get widths of side or row find rows that these comps are on Κα˜Jšœ™J˜Jšœ™šΟk ˜ J˜Jšœ˜Jšœ ˜ J˜—šœ œ œ˜J˜Jš˜Jš œ œœ œœ˜+J˜Jšœ™Jš Οn œ œ œ œœ*˜mJ˜Jšœ1™1šž œ œœ"˜]š œœœœœ˜:Jšœ˜—J˜—Jšœ™Jšžœ œ œ ˜.J˜Jšœ@™@Jšžœ œ œœ ˜HJ˜JšœB™BJšžœ œ œœ˜?J˜Jšœ™Jšœ"™"šž œ œ˜6Jšœ6˜=J˜—codeš ž œœ œœœ˜TJ˜Kšž œœœœ"œœœ˜hK˜—š žœœ œ!œœ˜WJ˜Kšž œœœœœœœ˜_—K˜Kš žœœ œœ&œœ˜|K˜Kš žœœ œœMœœ˜ K˜š žœœ œœMœœ˜ͺJ˜Kšž œœœœ œœœ˜`—K˜Kš žœœ œœ#œœ˜sK˜Kš žœœ œœJœœ˜—K˜š žœœ œœJœœ˜‘J˜—K˜Jšœ˜J˜——…—. k