<<>> <> <> <> <<>> <> <<>> DIRECTORY SC, SCNewRoutePinsUtil, RTBasic, SCPrivate; SCNewWidth: CEDAR DEFINITIONS = BEGIN PinClass: TYPE = {ispin, isexit}; InstDat: TYPE = REF InstDatRec; InstDatRec: TYPE = ARRAY RTBasic.Side OF LIST OF SCNewRoutePinsUtil.PinInChan; <> GetChanWidth: PROCEDURE[handle: SC.Handle, rowChan: SCPrivate.RowChan, form: SCPrivate.FomType, doWidth: BOOLEAN] RETURNS [chanWidth, wireLength: INT]; <> GetSideWidth: PROCEDURE[handle: SC.Handle, lRSide: SCPrivate.LRSide, fom: SCPrivate.FomType] RETURNS [chanWidth, wireLength: INT]; <> AllChanWidths: PROCEDURE[handle: SC.Handle, fom: SCPrivate.FomType]; SetAuxiDS: PROCEDURE[handle: SC.Handle, rowChan: SCPrivate.RowChan, form: SCPrivate.FomType, doWidth: BOOLEAN] RETURNS[chanWidth, chanWL: SC.Number _ 0] ; << this procedure will set up needed data structure to computer channel density.>> << rowChan specifies the channel to be worked on, doWidth says whether you really want>> <> <<>> TermGetChanWidth: PROCEDURE[handle: SC.Handle, rowChan: SCPrivate.RowChan]; --Destory possible cyclic reference. <<>> ComputeDW: PROCEDURE[ rowChan: SCPrivate.RowChan] RETURNS[density, wireLength: SC.Number _ 0]; --Compute channel width and density EnterRowData: PROCEDURE[rowChan: SCPrivate.RowChan, handle: SC.Handle, row: SCPrivate.MaxRowSr, interestingSide: SC.Side]; EnterSideData: PROCEDURE[rowChan: SCPrivate.RowChan, handle: SC.Handle, side, interestingSide, chanSide: SC.Side]; EnterExitData: PROCEDURE[handle: SC.Handle, rowChan: SCPrivate.RowChan, lrSide: SCPrivate.LRSide]; SwapPinsInChanOnTwoInsts: PUBLIC PROCEDURE[handle: SC.Handle, instance1, instance2: SCPrivate.Instance, deltaX1, deltaX2: SC.Number, side: RTBasic.Side, chanNum: NAT, whichFom: SCPrivate.FomType]; << this procedure swaps pins on the two objects in the channel, and maintain supporting datastructure for that channel, including local density and end type of the pins.>> << instance1 and instance2 are the two instances to be swaped. deltaX1 and deltaX2 are >> <> <<>> END.