DIRECTORY CD, CDCells, CDDirectory, CDMenus, CDOps, CDRects, CDSequencer, CDViewer, CDViewHighlight, CMos, CMosB, Core, CoreClasses, CoreOps, CoreProperties, PW, PWPins, Rope, Sinix, SinixCMos, TerminalIO, ViewerClasses; SinixTest: CEDAR PROGRAM IMPORTS CDCells, CDDirectory, CDMenus, CDOps, CDRects, CDViewer, CDViewHighlight, CMos, CMosB, CoreClasses, CoreOps, CoreProperties, PW, PWPins, Sinix, SinixCMos, TerminalIO = BEGIN ROPE: TYPE = Rope.ROPE; CellType: TYPE = Core.CellType; lastResult: REF; lastInstance: CD.Instance; lastMode: Sinix.Mode; Extract: PROC [comm: CDSequencer.Command] = { first: CD.Instance; multiple: BOOL; obj: PW.Object; [first, multiple] _ CDOps.SelectedInstance[comm.design]; IF multiple THEN {PW.WriteF["Multiple instances selected. No action.\n"]; RETURN}; obj _ first.ob; lastInstance _ first; lastMode _ SELECT comm.design.technology FROM CMos.cmos => SinixCMos.extractAMode, CMosB.cmosB => SinixCMos.extractBMode, ENDCASE => ERROR; [lastResult] _ Sinix.Extract[obj, lastMode, first.properties]; CoreOps.Print[lastResult, TerminalIO.TOS[]]; }; Check: PROC [comm: CDSequencer.Command] = { first: CD.Instance; multiple: BOOL; obj: PW.Object; [first, multiple] _ CDOps.SelectedInstance[comm.design]; IF multiple THEN {PW.WriteF["Multiple instances selected. No action.\n"]; RETURN}; obj _ first.ob; lastInstance _ first; lastMode _ SELECT comm.design.technology FROM CMosB.cmosB => SinixCMos.checkBMode, ENDCASE => ERROR; [lastResult] _ Sinix.Extract[obj, lastMode, first.properties]; CoreOps.Print[lastResult, TerminalIO.TOS[]]; }; HighLightOb: PROC [ob: CD.Object] RETURNS [hob: CD.Object] = { SELECT ob.class.objectType FROM $Rect => hob _ CDRects.CreateRect[ob.size, CD.shadeLayer]; $Cell => { cellPtr, hcellPtr: CD.CellPtr; hob _ CDCells.CreateEmptyCell[]; cellPtr _ NARROW [ob.specificRef]; hcellPtr _ NARROW [hob.specificRef]; hcellPtr.contents _ HighLightListInst[cellPtr.contents]; hob.size _ ob.size; }; ENDCASE => { hob _ CDDirectory.Expand[ob, NIL, NIL].new; IF hob=NIL THEN RETURN[CDRects.CreateRect[ob.size, CD.undefLayer]]; hob _ HighLightOb[hob]; }; }; HighLightInst: PROC [inst: CD.Instance] RETURNS [hinst: CD.Instance] = { hinst _ NEW [CD.InstanceRep _ [ ob: IF inst.ob.class.objectType=$PinOb0 THEN CDRects.CreateRect[inst.ob.size, CD.shadeLayer] ELSE HighLightOb[inst.ob], location: inst.location, orientation: inst.orientation]]; }; HighLightListInst: PROC [instances: LIST OF CD.Instance] RETURNS [hlist: LIST OF CD.Instance _ NIL] = { WHILE instances#NIL DO hlist _ CONS[HighLightInst[instances.first], hlist]; instances _ instances.rest; ENDLOOP; }; HighLightWire: PROC [design: CD.Design, wire: Core.Wire, instance: CD.Instance, pins: BOOL] = { viewers: LIST OF ViewerClasses.Viewer _ CDViewer.ViewersOf[design]; hinsts: LIST OF CD.Instance _ NIL; instances: LIST OF CD.Instance _ (IF pins THEN Sinix.GetPinsProp ELSE Sinix.GetWireGeometryProp)[lastMode, wire]; hob: CD.Object _ CDCells.CreateEmptyCell[]; hcellPtr: CD.CellPtr _ NARROW [hob.specificRef]; hcellPtr.contents _ HighLightListInst[instances]; IF instances=NIL THEN PW.WriteF["*** No geometry to highlight for this wire\n"]; hob.size _ instance.ob.size; hinsts _ CONS [PWPins.NewInstance[hob, instance.location, instance.orientation], hinsts]; WHILE viewers#NIL DO CDViewHighlight.ShowInstance[viewers.first, hinsts, TRUE]; viewers _ viewers.rest; ENDLOOP; }; FindSelectedWire: PROC [rootCellType: Core.CellType] RETURNS [selectedWire: Core.Wire _ NIL] = { ContainsSelectedListInst: PROC [list: LIST OF CD.Instance] RETURNS [yes: BOOL _ FALSE] = { FOR instances: LIST OF CD.Instance _ list, instances.rest WHILE instances#NIL DO IF instances.first.selected THEN RETURN [TRUE]; ENDLOOP; FOR instances: LIST OF CD.Instance _ list, instances.rest WHILE instances#NIL DO IF ContainsSelectedOb[instances.first.ob] THEN RETURN [TRUE]; ENDLOOP; }; ContainsSelectedOb: PROC [ob: CD.Object] RETURNS [yes: BOOL _ FALSE] = { IF ob=NIL THEN RETURN; SELECT ob.class.objectType FROM $Rect => {}; $Cell => { cellPtr: CD.CellPtr _ NARROW [ob.specificRef]; yes _ ContainsSelectedListInst[cellPtr.contents]; }; ENDCASE => { ob _ CDDirectory.Expand[ob, NIL, NIL].new; yes _ ContainsSelectedOb[ob]; }; }; data: CoreClasses.RecordCellType _ NARROW [rootCellType.data]; FOR i: NAT IN [0 .. data.internal.size) DO wire: Core.Wire _ data.internal[i]; IF ContainsSelectedListInst[NARROW [CoreProperties.GetProp[wire.properties, lastMode.wireGeometryProp]]] THEN RETURN [wire]; ENDLOOP; FOR i: NAT IN [0 .. data.size) DO IF data[i].type.class=CoreClasses.recordCellClass THEN { selectedWire _ FindSelectedWire[data[i].type]; IF selectedWire#NIL THEN RETURN; }; ENDLOOP; }; HighLightSelected: PROC [command: CDSequencer.Command] = { HighLightSelectedBoth[command, NARROW [NARROW [lastResult, CellType].data, CoreClasses.RecordCellType].internal, FALSE]; }; HighLightSelectedPins: PROC [command: CDSequencer.Command] = { HighLightSelectedBoth[command, NARROW [lastResult, CellType].public, TRUE]; }; HighLightSelectedBoth: PROC [command: CDSequencer.Command, root: Core.Wire, pins: BOOL] = { name: ROPE _ PW.RequestRope["Full Name of Wire : "]; selectedWire: Core.Wire _ CoreOps.FindWire[root, name]; IF selectedWire=NIL THEN {PW.WriteF["*** No such wire!\n"]; RETURN}; HighLightWire[command.design, selectedWire, lastInstance, pins]; }; CDMenus.ImplementEntryCommand[$OtherProgramMenu, "HighLightSelected", HighLightSelected, $HighLightSelected]; CDMenus.ImplementEntryCommand[$OtherProgramMenu, "HighLightSelectedPins", HighLightSelectedPins, $HighLightSelectedPins]; CDMenus.ImplementEntryCommand[$OtherProgramMenu, "Sinix Extract", Extract, $Extract]; CDMenus.ImplementEntryCommand[$OtherProgramMenu, "Sinix Check", Check, $Check]; END. μSinixTest.mesa Copyright c 1984 by Xerox Corporation. All rights reversed. Created by Bertrand Serlet August 30, 1985 11:41:04 am PDT Bertrand Serlet June 1, 1986 2:38:01 pm PDT Pradeep Sindhu December 2, 1985 6:42:39 pm PST Κε˜– "Cedar" stylešœ™Jšœ Οmœ1™˜>Jšœ%žœ˜,Jšœ˜—J˜šŸœžœ ˜+Jšœžœžœ˜#Jšœžœ˜Jšœ8˜8Jšžœ žœ;žœ˜SJšœ%˜%šœ žœžœ˜.Jšœ%˜%Jšžœžœ˜—Jšœ>˜>Jšœ%žœ˜,Jšœ˜—J™š Οn œžœžœ žœžœ ˜>šžœž˜Jšœ,žœ ˜;šœ ˜ Jšœžœ ˜Jšœ ˜ Jšœ žœ˜"Jšœ žœ˜$Jšœ8˜8Jšœ˜J˜—šžœ˜ Jšœžœžœ˜+Jš žœžœžœžœžœ˜CJšœ˜J˜——J˜—J˜š   œžœžœ žœ žœ˜Hšœžœžœ˜Jš œžœ"žœ"žœ žœ˜yJšœ9˜9—J˜—J˜š œžœ žœžœžœ žœ žœžœžœ žœ˜gšžœ žœžœ˜JšœžœE˜QJšžœ˜—J˜—J˜š   œžœ žœ$žœžœ˜_Jšœ žœžœ3˜CJš œžœžœžœ žœ˜"Jš œ žœžœžœ žœžœžœ,˜qJšœžœ$˜+Jšœ žœ žœ˜0Jšœ1˜1Jšžœ žœžœžœ8˜PJšœ˜Jšœ žœL˜Yšžœ žœžœ˜Jšœ4žœ˜:Jšœ˜Jšžœ˜—J˜—J˜š œžœžœžœ˜`š œžœžœžœžœ žœžœžœ˜Zš žœ žœžœžœ!žœ žœž˜PJšžœžœžœžœ˜/Jšžœ˜—š žœ žœžœžœ!žœ žœž˜PJšžœ(žœžœžœ˜=Jšžœ˜—J˜—J˜š  œžœžœ žœžœžœ˜HJšžœžœžœžœ˜šžœž˜Jšœ ˜ šœ ˜ Jšœ žœ žœ˜.Jšœ1˜1J˜—šžœ˜ Jšœžœžœ˜*Jšœ˜J˜——J˜—Jšœ#žœ˜>šžœžœžœž˜*Jšœ#˜#JšžœžœFžœžœ˜|Jšžœ˜—šžœžœžœž˜!šžœ0žœ˜8Jšœ.˜.Jšžœžœžœžœ˜ J˜—Jšžœ˜—˜J˜——š œžœ#˜:JšœžœžœDžœ˜xJšœ˜—š œžœ#˜>Jšœžœ žœ˜KJšœ˜—š œžœ7žœ˜[Jšœžœžœ%˜4Jšœ7˜7Jšžœžœžœ$žœ˜DJšœ@˜@Jšœ˜—J™Jšœn˜nJšœz˜zJ˜JšœV˜VJšœP˜PJ˜Jšžœ˜—J™—…—’c