SpinifexCommands.mesa
Copyright © 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
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;
-- Set priority to background for Spinifex
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�LSE] -- ~ {
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
Delete SpinifexAtoms.spinifex ATOM from client Subcells
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];
};
-- Module Initialization of SpinifexCommands
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.