DIRECTORY CD, CDCells, CDDefaultProcs, CDDirectory, CDProperties, Core, CoreProperties, Sinix, SinixBridge; SinixBridgeImpl: CEDAR PROGRAM IMPORTS CD, CDCells, CDDefaultProcs, CDDirectory, CDProperties, CoreProperties, Sinix EXPORTS SinixBridge SHARES CDDirectory = BEGIN OPEN SinixBridge; sinixBridgeClass: PUBLIC REF CD.ObjectClass _ CD.RegisterObjectClass[$WireToObjectBridge]; dp: REF CDDirectory.DirectoryProcs; BridgeSpecific: TYPE = REF BridgeSpecificRec; -- hanging on the specificRef BridgeSpecificRec: TYPE = RECORD [fatherSize: CD.Position, wire: Core.Wire, expandedAsPins: CD.Object _ NIL]; InstancesToCell: PROC [fatherSize: CD.Position, instances: LIST OF CD.Instance] RETURNS [cell: CD.Object] = { cellPtr: CD.CellPtr; cell _ CDCells.CreateEmptyCell[]; cellPtr _ NARROW [cell.specificRef]; cellPtr.contents _ instances; cell.size _ fatherSize; }; WireToObjectBridge: PUBLIC PROC [fatherSize: CD.Position, wire: Core.Wire] RETURNS [object: CD.Object] = { IF Sinix.GetWireGeometryPropFromWire[wire]=NIL THEN ERROR; object _ NEW [CD.ObjectRep _ [class: sinixBridgeClass, specificRef: NEW [BridgeSpecificRec _ [fatherSize: fatherSize, wire: wire]]]]; object.size _ fatherSize; }; ExpandAsGeometry: PUBLIC CDDirectory.AnotherProc -- [me: CD.Object, from: CD.Design, to: CD.Design] RETURNS [CD.Object] -- = { bridgeData: BridgeSpecific _ NARROW [me.specificRef]; RETURN [InstancesToCell[bridgeData.fatherSize, Sinix.GetWireGeometryPropFromWire[bridgeData.wire]]]; }; ExpandAsPins: PUBLIC CDDirectory.AnotherProc -- [me: CD.Object, from: CD.Design, to: CD.Design] RETURNS [CD.Object] -- = { bridgeData: BridgeSpecific _ NARROW [me.specificRef]; IF bridgeData.expandedAsPins=NIL THEN bridgeData.expandedAsPins _ InstancesToCell[bridgeData.fatherSize, NARROW [CoreProperties.GetWireProp[bridgeData.wire, Sinix.pinsProp]]]; RETURN [bridgeData.expandedAsPins]; }; SinixBridgeTouchProc: Sinix.TouchProc = { instance1 _ NEW [CD.InstanceRep _ [ ob: ExpandAsPins[instance1.ob, NIL, NIL], location: instance1.location, orientation: instance1.orientation ]]; RETURN [Sinix.Touch[instance1, instance2]]; }; dp _ CDDirectory.InstallDirectoryProcs[sinixBridgeClass]; dp.expand _ ExpandAsGeometry; sinixBridgeClass.showMeSelected _ CDDefaultProcs.ShowMeSelectedWithExpand; sinixBridgeClass.interestRect _ CDDefaultProcs.InterestRectWithExpand; CDProperties.PutProp[sinixBridgeClass, Sinix.touchProcProp, NEW [Sinix.TouchProc _ SinixBridgeTouchProc]]; END. „SinixBridgeImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reversed. Created by Bertrand Serlet August 30, 1985 12:16:42 pm PDT Bertrand Serlet October 27, 1985 3:26:51 pm PST This last field is a cache IF CoreProperties.GetWireProp[wire, Sinix.pinsProp]=NIL THEN ERROR; -- Not all public wires have pins (for example in the case when the extraction is done flat). Κt– "cedar" style˜codešœ™Kšœ Οmœ1™˜…Jšœ˜Jšœ˜—J˜–I -- [me: CD.ObPtr, from: CD.Design, to: CD.Design] RETURNS [CD.ObPtr] -- šΟbœžœΠckJœ˜Jšœžœ˜5Jšžœ^˜dJ˜—J–I -- [me: CD.ObPtr, from: CD.Design, to: CD.Design] RETURNS [CD.ObPtr] -- ˜š‘ œžœ’Jœ˜{Jšœžœ˜5šžœžœ˜!JšžœDžœ@˜Ž—Jšžœ˜#J˜—J˜š‘œ˜)šœ žœžœ˜#Jšœžœžœ˜*Jšœ@˜@Jšœ˜—Jšžœ%˜+J˜—J˜Jšœ9˜9Jšœ˜JšœJ˜JJšœF˜FK™Kšœ<žœ+˜jK™šžœ˜K˜———…— €œ