DIRECTORY TerminalIO USING [WriteRope], CD USING [Design, ObPtr, ApplicationPtr], CDDirectory USING [Name], CDSequencer USING [Command, ImplementCommand], CDEvents USING [EventProc, RegisterEventProc], CDOps USING [SelectedApplication], CDProperties USING [GetPropFromObject, PutPropOnObject], Process USING [SetPriority, priorityBackground], Rope USING [Cat], SpinifexAtoms USING [ spinifex, errorClient, analyzeSelected, analyzeAndThymeSelected, thymePrint, analyzeAndRoseSelected, rosePrint, highlightPointedNode], SpinifexCircuit USING [ Circuit], SpinifexAccess USING [AnalyzeCell], SpinifexHighlightNode USING [HighlightNode] ; SpinifexCommands: CEDAR PROGRAM IMPORTS TerminalIO, CDDirectory, CDSequencer, CDEvents, CDOps, CDProperties, Process, Rope, SpinifexAtoms, SpinifexAccess, SpinifexHighlightNode ~ BEGIN Analyze: PROCEDURE [comm: CDSequencer.Command] ~ { selectedAppl: CD.ApplicationPtr; multiple: BOOLEAN; TRUSTED { Process.SetPriority[Process.priorityBackground] }; [selectedAppl, multiple] _ CDOps.SelectedApplication[comm.design]; IF (~multiple) AND selectedAppl # NIL THEN SELECT selectedAppl.ob.p.objectType FROM $Cell => { format: REF ANY; SELECT comm.a FROM SpinifexAtoms.analyzeAndThymeSelected => { TerminalIO.WriteRope[ Rope.Cat[ "Comencing analysis and Thyme format extraction of hierarchy rooted at \"", CDDirectory.Name[selectedAppl.ob], "\"\n"]]; format _ SpinifexAtoms.thymePrint }; SpinifexAtoms.analyzeAndRoseSelected => { TerminalIO.WriteRope[ Rope.Cat[ "Comencing analysis and Rosemary format extraction of hierarchy rooted at \"", CDDirectory.Name[selectedAppl.ob], "\"\n"]]; format _ SpinifexAtoms.rosePrint }; ENDCASE => { TerminalIO.WriteRope[ Rope.Cat[ "Comencing analysis of hierarchy rooted at \"", CDDirectory.Name[selectedAppl.ob], "\"\n"]]; format _ NIL }; IF SpinifexAccess.AnalyzeCell[design ~ comm.design, hierarchyRoot ~ selectedAppl, formatKey ~ format] THEN TerminalIO.WriteRope["Analysis of hierarchy complete\n"] }; ENDCASE => TerminalIO.WriteRope[ "You can't analyze that it's not a cell!\n"] ELSE TerminalIO.WriteRope[ "Select a single cell to analyze\n"]; }; ClearSpinifexProperty: CDEvents.EventProc -- PROC [event: REF, design: CD.Design, x: REF] RETURNS [dont: BOOL_FALSE] -- ~ { IF event # $AfterCellReplacement THEN ERROR ELSE { cellObject: CD.ObPtr ~ NARROW[x, CD.ObPtr]; cir: REF SpinifexCircuit.Circuit ~ NARROW[ CDProperties.GetPropFromObject[from~ cellObject, prop~ SpinifexAtoms.spinifex]]; IF cir # NIL THEN CDProperties.PutPropOnObject[onto~ cellObject, prop~ SpinifexAtoms.spinifex, val~ NIL]; FOR errorRectClients: LIST OF CD.ObPtr _ NARROW[ CDProperties.GetPropFromObject[from~ cellObject, prop~ SpinifexAtoms.errorClient]], errorRectClients.rest WHILE errorRectClients # NIL DO CDProperties.PutPropOnObject[onto~ errorRectClients.first, prop~ SpinifexAtoms.spinifex, val~ NIL] ENDLOOP; } }; HighLightNode: PROCEDURE [comm: CDSequencer.Command] ~ { TerminalIO.WriteRope["Highlight Node (pointed)\n"]; TRUSTED { Process.SetPriority[Process.priorityBackground] }; SpinifexHighlightNode.HighlightNode[ comm.design, comm.pos, comm.l]; }; CDSequencer.ImplementCommand[SpinifexAtoms.analyzeSelected, Analyze,, doQueue]; CDSequencer.ImplementCommand[SpinifexAtoms.analyzeAndThymeSelected, Analyze,, doQueue]; CDSequencer.ImplementCommand[SpinifexAtoms.analyzeAndRoseSelected, Analyze,, doQueue]; CDSequencer.ImplementCommand[SpinifexAtoms.highlightPointedNode, HighLightNode,, doQueue]; CDEvents.RegisterEventProc[ proc~ClearSpinifexProperty, event~$AfterCellReplacement]; TerminalIO.WriteRope["Spinifex layout analysis package loaded\n"] END. NSpinifexCommands.mesa Copyright c 1984 by Xerox Corporation. All rights reserved. Written by Shand, September 12, 1983 11:40 pm Last Edited by: Shand, August 13, 1984 2:01:04 am PDT -- Set priority to background for Spinifex Delete SpinifexAtoms.spinifex ATOM from client Subcells -- Module Initialization of SpinifexCommands Κ˜code™Kšœ Οmœ1™