DIRECTORY CD, CDBottomUp, CDCells, CDCommandOps, CDInstances, CDOps, CDProperties, CDSequencer, CDSimplifyStructure, IO, Rope, TerminalIO; CDSimplifyStructureImpl: CEDAR PROGRAM IMPORTS CDBottomUp, CDCells, CDCommandOps, CDInstances, CDOps, CDProperties, IO, Rope, TerminalIO EXPORTS CDSimplifyStructure = BEGIN Simplify: PUBLIC PROC [design: CD.Design, root: CD.Object, log: IO.STREAM_NIL] = { IF log=NIL THEN log _ TerminalIO.CreateStream[]; [] _ CDBottomUp.StartRecurse[simplifyClass, design, root, log]; }; CellSingleInst: PROC [ob: CD.Object] RETURNS [instOrNil: CD.Instance_NIL] = INLINE { WITH ob.specific SELECT FROM cp: CD.CellSpecific => { IF cp.sequence=NIL OR cp.sequence.length=0 THEN { IF cp.contents#NIL AND cp.contents.rest=NIL THEN RETURN [cp.contents.first] } ELSE IF cp.sequence.length=1 THEN { IF cp.contents=NIL THEN RETURN [cp.sequence[0]] } }; ENDCASE => NULL; }; DoSimplify: CDBottomUp.DoProc = { IF CDCells.IsCell[ob] THEN { cnt: INT _ 0; EachInst: CDCells.InstEnumerator = { subInst: CD.Instance _ CellSingleInst[inst.ob]; IF subInst#NIL THEN { stream: IO.STREAM _ NARROW[handle.data]; composed: CD.Instance _ CDInstances.Composed[subInst, inst.trans]; composed.properties _ CDProperties.DAppendProps[winner: inst.properties, looser: composed.properties]; IF (cnt_cnt+1)=1 THEN IO.PutRope[stream, Rope.Cat["in ", CDOps.ObjectRope[ob], "\n"]]; IO.PutRope[stream, Rope.Cat[" instance of ", CDOps.ObjectRope[inst.ob], " replaced by ", CDOps.ObjectRope[composed.ob], "\n"]]; inst^ _ composed^; } }; [] _ CDCells.EnumerateInstances[ob, EachInst]; }; }; HierarchicalSimplificationComm: PROC [comm: CDSequencer.Command] = { inst: CD.Instance _ CDOps.TheInstance[comm.design, "hierarchical simplification\n"]; IF inst#NIL THEN { Simplify[comm.design, inst.ob]; TerminalIO.PutRope["--finished\n"] } }; simplifyClass: CDBottomUp.Class _ CDBottomUp.Register[DoSimplify, NIL, $CDSimplify, $CDSimplify]; CDCommandOps.RegisterWithMenu[menu: $ProgramMenu, entry: "Hierarchical Simplification", proc: HierarchicalSimplificationComm, key: $CDSimplify]; END. „CDSimplifyStructureImpl.mesa (a ChipNDale module) Copyright c 1986 by Xerox Corporation. All rights reserved. Created by Christian October 28, 1986 10:47:15 am PST Last edited by: Christian Jacobi, October 30, 1986 1:50:17 pm PST --use the CDBottomUp mechanism because we want to deal every object just once but --some silly user didn't include the objects in the directory. Κψ˜codešœ3™3Kšœ Οmœ1™˜@—Kšžœ~˜€Kšœ˜K˜—K˜—Kšœ.˜.K˜—K˜—K˜šŸœžœ ˜DKšœžœL˜Tšžœžœžœ˜Kšœ˜K˜"K˜—K˜—K˜šœBžœ˜aKšœR™RKšœ@™@—Kšœ˜Kšžœ˜K˜—…—" ž