<> <> <> <> <<-- InitGetChanWidth - initialize for determining the width of a channel>> <<-- TermGetChanWidth - terminate determining the width of a channel>> <<-- EnterPin - enter a net on a channel into data structure>> <<-- EnterExit - enter a net on a channel into data structure>> <<-- EnterMinDat - minmium route channels need special processing to>> <> <<-- SortPinDat - sort the pin data>> <<>> DIRECTORY CD, SC, SCPrivate; SCRoutePinsUtil: CEDAR DEFINITIONS = BEGIN NetDat: TYPE = REF NetDatRec; NetDatRec: TYPE = RECORD [ bounds1: SC.Number _ LAST[INT], bounds2: SC.Number _ -LAST[INT], pinCount: INT _ 0, exits: ARRAY SCPrivate.LRSide OF ExitPin _ ALL[NIL], chanPins: ARRAY SCPrivate.TBSide OF ChannelPinList _ ALL[NIL]]; ChannelPinList: TYPE = LIST OF ChannelPin; ChannelPin: TYPE = REF ChannelPinRec; ChannelPinRec: TYPE = RECORD [ rect: SC.Rect, position: CD.Position, netPin: SCPrivate.PinNet, cell: CD.Object, side: SC.Side, alwaysUse: BOOLEAN]; ExitPin: TYPE = REF ExitPinRec; ExitPinRec: TYPE = RECORD [ cell: CD.Object, exit: SCPrivate.Exit]; <> InitGetChanPins: PROCEDURE [handle: SC.Handle]; <> TermGetChanPins: PROCEDURE [handle: SC.Handle]; <> EnterPin: PROCEDURE[rect: SC.Rect, position: CD.Position, netPin: SCPrivate.PinNet, side: SCPrivate.TBSide, cell: CD.Object, alwaysUse: BOOLEAN]; <> EnterExit: PROCEDURE[exit: SCPrivate.Exit, side: SCPrivate.LRSide, cell: CD.Object]; <<>> <> EnterNetDat: PROCEDURE [handle: SC.Handle, chan: SCPrivate.ZMaxChanSr, pinProc: PinProc, exitProc: ExitProc, netProc: NetProc]; PinProc: TYPE = PROC [rect: SC.Rect, position: CD.Position, netPin: SCPrivate.PinNet, cell: CD.Object]; ExitProc: TYPE = PROC [exit: SCPrivate.Exit, cell: CD.Object, trunkWidth: SC.Number, side: SCPrivate.LRSide]; NetProc: TYPE = PROC [net: SCPrivate.Net]; END.