<<--File: IPPinNets.mesa>> <> <> <<>> DIRECTORY IPParams, IPConstants, Imager USING [Context], IP; IPPinNets: CEDAR DEFINITIONS IMPORTS IPParams = BEGIN <<-- Intro: IP.PinNetRep is the structure shared between nets and instances.>> Component: TYPE = REF IP.ComponentRep; PinNets: TYPE = LIST OF PinNet; PinNet: TYPE = REF PinNetRep; PinNetRep: TYPE = IP.PinNetRep; PhysicalPins: TYPE = LIST OF PhysicalPin; PhysicalPin: TYPE = REF PhysicalPinRep; PhysicalPinRep: TYPE = IP.PhysicalPinRep; Net: TYPE = REF IP.NetRep; EachPhysicalPinAction: TYPE = PROC[phyPin: PhysicalPin] RETURNS [quit: BOOL _ FALSE]; PaintPinNets: PROC[pNetsOwner: Component, context: Imager.Context, xOffset, yOffset: REAL _ 0.0, scaleFactor: REAL _ 1.0, showNames: BOOL _ TRUE, size: NAT _ IPParams.PhyPinRectSize, activeStipple: CARDINAL _ IPConstants.Black, nonActiveStipple: CARDINAL _ IPConstants.White]; <<--Orientation Operations on PinNets>> OrientPinNets: PROC [pNetsOwner: Component, operation: IP.Orientation]; MirrorPinNets: PROC[pNetsOwner: Component, mirrorOrient: IP.OrientationTypes]; <<--mirrorOrient = ver <=> MirrorX>> <<--mirrorOrient = hor <=> MirrorY>> Rotate90PinNets: PROC [pNetsOwner: Component, numberOfRot: INT _ 1]; <<--Book Keeping Operations on PinNets>> NilPinNetsNet: PROC[pinNets: PinNets] = INLINE { <<-- Used for Cleaning up circular garbage. See IPCoTabImpl.DestroySelf>> WHILE pinNets # NIL DO pinNets.first.net _ NIL; pinNets _ pinNets.rest; ENDLOOP; };--NilPinNetsNet RemPinNetsFromNets: PROC [pinNets: PinNets]; AddPinNetsToNets: PROC [pinNets: PinNets]; SetPinNetsOwner: PROC[pinNets: PinNets, owner: REF IP.ComponentRep] = INLINE { WHILE pinNets # NIL DO pinNets.first.owner _ owner; pinNets _ pinNets.rest ENDLOOP; };--SetPinNetOwner EnumPhysicalPins: PROC[pinNets: PinNets, action: EachPhysicalPinAction]; END.