<> <> <> <> <<-- 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 SCPrivate.Exit _ ALL[NIL], chanPins: ARRAY SCPrivate.TBSide OF ChannelPinList _ ALL[NIL]]; ChannelPinList: TYPE = LIST OF ChannelPin; ChannelPin: TYPE = REF ChannelPinRec; ChannelPinRec: TYPE = RECORD [ min, max, depth: SC.Number, netPin: SCPrivate.PinNet, side: SC.Side, alwaysUse: BOOLEAN]; ExitPin: TYPE = REF ExitPinRec; ExitPinRec: TYPE = RECORD [ exit: SCPrivate.Exit]; <> InitGetChanPins: PROCEDURE [handle: SC.Handle]; <> TermGetChanPins: PROCEDURE [handle: SC.Handle]; <> EnterPin: PROCEDURE[min, max, depth: SC.Number, netPin: SCPrivate.PinNet, side: SCPrivate.TBSide, alwaysUse: BOOLEAN]; <> EnterExit: PROCEDURE[exit: SCPrivate.Exit, side: SCPrivate.LRSide]; <<>> <> EnterNetDat: PROCEDURE [handle: SC.Handle, chan: SCPrivate.ZMaxChanSr, pinProc: PinProc, exitProc: ExitProc, netProc: NetProc]; PinProc: TYPE = PROC [min, max, depth: SC.Number, netPin: SCPrivate.PinNet, side: SC.Side]; ExitProc: TYPE = PROC [exit: SCPrivate.Exit, side: SCPrivate.LRSide]; NetProc: TYPE = PROC [net: SCPrivate.Net]; END.