CDExtraCommands.mesa (part of Chipndale)
by Christian Jacobi July 11, 1983 3:42 pm
last edited Christian Jacobi February 14, 1984 4:05 pm
DIRECTORY
Atom,
CD,
CDSequencer,
TerminalIO,
CDOrient,
CDPanel,
CDCallSpecific,
CDInline,
CDOps,
CDProperties,
CDExtras,
CDViewer USING [DesignOf],
Rope,
ViewerClasses USING [Viewer];
CDExtraCommands: CEDAR PROGRAM
IMPORTS Atom, CDInline, CDOps, CDOrient, CDPanel, CDProperties, CDSequencer, TerminalIO, CDCallSpecific, CDExtras, CDViewer, Rope =
BEGIN
verbose: BOOLTRUE;
WriteInLambda: PROC [n: CD.Number] = {TerminalIO.WriteRope[CDExtras.ToLambda[n]]};
CoordinatesCommand: PROC [comm: CDSequencer.Command] =
BEGIN
TerminalIO.WriteRope["Coordinates"];
TerminalIO.WriteRope[" down: ("];
WriteInLambda[comm.sPos.x];
TerminalIO.WriteRope[","];
WriteInLambda[comm.sPos.y];
TerminalIO.WriteRope[") up: ("];
WriteInLambda[comm.pos.x];
TerminalIO.WriteRope[","];
WriteInLambda[comm.pos.y];
TerminalIO.WriteRope[") dist: ("];
WriteInLambda[comm.pos.x-comm.sPos.x];
TerminalIO.WriteRope[","];
WriteInLambda[comm.pos.y-comm.sPos.y];
TerminalIO.WriteRope[")\n"];
END;
WriteInfo: PROC[aptr: CD.ApplicationPtr] =
-- copied from CDOps
BEGIN
x: REF ~ CDProperties.GetPropFromApplication[aptr, $SignalName];
TerminalIO.WriteRope[" ("];
TerminalIO.WriteRope[CDOps.Info[aptr.ob]];
IF x#NIL THEN
WITH x SELECT FROM
r: Rope.ROPE => TerminalIO.WriteRope[Rope.Concat[" ", r]];
a: ATOM => TerminalIO.WriteRope[Rope.Concat[" ", Atom.GetPName[a]]];
ENDCASE => NULL;
TerminalIO.WriteRope[")"];
END;
PersonalizedApplicationRect: PROC [aptr: CD.ApplicationPtr] RETURNS [CD.DesignRect] =
--should be in CDApplications
INLINE BEGIN
RETURN [
CDOrient.MapRect[
itemInCell: aptr.ob.p.insideRect[aptr.ob],
cellSize: aptr.ob.size,
cellInstOrient: aptr.orientation,
cellInstPos: aptr.location
]
]
END;
StatisticCommand: PROC [comm: CDSequencer.Command] =
BEGIN
countTot: INT ← 0;
countSel: INT ← 0;
countInvis: INT ← 0;
isDesign: BOOL FALSE;
rect: CD.DesignRect;
aptr: CD.ApplicationPtr;
TerminalIO.WriteRope["Statistic"];
IF ISTYPE[comm.ref, ViewerClasses.Viewer] THEN
[isDesign, , rect] ← CDViewer.DesignOf[NARROW[comm.ref]];
IF ~isDesign THEN rect ← CDInline.universe;
FOR l: CD.ApplicationList ← CDOps.AppList[comm.design], l.rest WHILE l#NIL DO
countTot ← countTot+1;
IF l.first.selected THEN {
IF ~CDInline.Intersect[rect, PersonalizedApplicationRect[l.first]] THEN countInvis ← countInvis+1;
countSel ← countSel+1;
aptr ← l.first
}
ENDLOOP;
TerminalIO.WriteInt[countTot]; TerminalIO.WriteRope[" objects;"];
TerminalIO.WriteInt[countSel]; TerminalIO.WriteRope[" selected"];
IF countSel=1 THEN {
WriteInfo[aptr];
IF verbose THEN {
TerminalIO.WriteRope[" at: ("];
TerminalIO.WriteInt[aptr.location.x];
TerminalIO.WriteRope[","];
TerminalIO.WriteInt[aptr.location.y];
TerminalIO.WriteRope[") size: ("];
TerminalIO.WriteInt[aptr.ob.size.x];
TerminalIO.WriteRope[","];
TerminalIO.WriteInt[aptr.ob.size.y];
TerminalIO.WriteRope[") orientation-code:"];
TerminalIO.WriteInt[aptr.orientation];
}
};
IF countInvis#0 THEN {
TerminalIO.WriteRope["\n **** "]; TerminalIO.WriteInt[countInvis];
TerminalIO.WriteRope[" invisible selected objects"];
};
TerminalIO.WriteLn[];
END;
SelectIfLevel: CDCallSpecific.CallProc =
BEGIN
IF aptr.ob.level#NARROW[x, REF CD.Level]^ THEN {done←FALSE; RETURN};
IF aptr.selected THEN RETURN;
aptr.selected ← TRUE;
repaintMe ← TRUE
END;
AddSelectLevel: PROC [comm: CDSequencer.Command] =
BEGIN
n: INT;
reflev: REF CD.Level ← NEW[CD.Level�Panel.FetchDefaultLevel[comm.design]];
TerminalIO.WriteRope["Select all of current layer: ("];
n ← CDCallSpecific.CallForAll[design: comm.design, whatElse: SelectIfLevel, x: reflev];
TerminalIO.WriteInt[n];
TerminalIO.WriteRope[") objects\n"];
END;
DesignMenu: PROC [comm: CDSequencer.Command] =
BEGIN
ENABLE TerminalIO.UserAbort => GOTO userAbort;
Forward: PROC [a: ATOM] = {
CDSequencer.ExecuteCommand[comm: comm, as: a, queue: dontQueue];
};
SELECT TerminalIO.RequestSelection[
label: "Design options",
choice: LIST["IO", "viewer", "directory", "rename", "un-delete", "select all", "statistic", "flush del's"]
] FROM
1 => Forward[$IOMenu];
2 => Forward[$ViewerMenu];
3 => Forward[$DirectoryMenu];
4 => Forward[$RenameDesign];
5 => Forward[$Undel];
6 => Forward[$SelectAll];
7 => Forward[$Statistic];
8 => Forward[$FlushUndelList];
ENDCASE => TerminalIO.WriteRope["skipped\n"];
EXITS
userAbort => {TerminalIO.WriteRope["discarded\n"]}
END;
DirectoryMenu: PROC [comm: CDSequencer.Command] =
BEGIN
ENABLE TerminalIO.UserAbort => GOTO userAbort;
Forward: PROC [a: ATOM] = {
CDSequencer.ExecuteCommand[comm: comm, as: a, queue: dontQueue];
};
SELECT TerminalIO.RequestSelection[
label: "Directory options",
choice: LIST["list direcory", "clean up directory", "remove ob", "rename selected ob", "create cell", "list imports", "list importee", " IO"]
] FROM
1 => Forward[$DisplayCellNames];
2 => Forward[$DeleteUnUsedObjects];
3 => Forward[$RemoveCell];
4 => Forward[$RenameS];
5 => Forward[$CreateCellS];
6 => Forward[$DisplayImports];
7 => Forward[$DisplayImportedEntries];
8 => Forward[$IOMenu]
ENDCASE => TerminalIO.WriteRope["skipped\n"];
EXITS
userAbort => {TerminalIO.WriteRope["discarded\n"]}
END;
IOMenu: PROC [comm: CDSequencer.Command] =
BEGIN
ENABLE TerminalIO.UserAbort => GOTO userAbort;
Forward: PROC [a: ATOM] = {
CDSequencer.ExecuteCommand[comm: comm, as: a, queue: dontQueue];
};
SELECT TerminalIO.RequestSelection[
label: "Input / Output",
choice: LIST["output", "import", "include", "reload conditions", "chipmonk-output", " list imports", " directory"]
] FROM
1 => Forward[$OutputDesign];
2 => Forward[$ImportADesign];
3 => Forward[$IncludeADesign];
4 => Forward[$CheckConditions];
5 => Forward[$ChipmonkOutput];
6 => Forward[$DisplayImports];
7 => Forward[$DirectoryMenu];
ENDCASE => TerminalIO.WriteRope["skipped\n"];
EXITS
userAbort => {TerminalIO.WriteRope["discarded\n"]}
END;
CDSequencer.ImplementCommand[$AddSelectLevel, AddSelectLevel];
CDSequencer.ImplementCommand[$DesignMenu, DesignMenu];
CDSequencer.ImplementCommand[$IOMenu, IOMenu];
CDSequencer.ImplementCommand[$DirectoryMenu, DirectoryMenu];
CDSequencer.ImplementCommand[$Coordinates, CoordinatesCommand];
CDSequencer.ImplementCommand[$Statistic, StatisticCommand];
END.