-- mig and color figureops
--m.stone December 12, 1980 12:58 PM
--Tiberi November 19, 1979 5:48 PM
DIRECTORY
GriffinDefs: FROM "GriffinDefs",
GriffinStartDefs: FROM "GriffinStartDefs",
MenuDefs: FROM "MenuDefs",
PointDefs: FROM "PointDefs",
ObjectDefs: FROM "ObjectDefs",
ImageDefs: FROM "ImageDefs",
GriffinFileDefs: FROM "GriffinFileDefs",
AltoDisplay: FROM "AltoDisplay",
DirectoryDefs: FROM "DirectoryDefs"
USING [EnumerateDirectory],
RefreshDefs: FROM "RefreshDefs",
StringDefs: FROM "StringDefs",
ControllerDefs: FROM "ControllerDefs",
ScreenDefs: FROM "ScreenDefs";
FigureOps: PROGRAM
IMPORTS GriffinDefs, MenuDefs, ScreenDefs, ObjectDefs,
GriffinFileDefs, DirectoryDefs,RefreshDefs, StringDefs, ControllerDefs
EXPORTS GriffinDefs, GriffinStartDefs =
BEGIN
gridX: INTEGER ← 8; gridY: INTEGER ← 8;
gridOn: BOOLEAN ← FALSE;
colorOn: BOOLEAN ← TRUE;
X: CARDINAL = PointDefs.X;
Y: CARDINAL = PointDefs.Y;
Refresh: MenuDefs.MenuProc =
BEGIN
ScreenDefs.ClearScreen[];
ObjectDefs.ReplotAllObjects[];
END;
Mono: MenuDefs.MenuProc =
BEGIN
IF ~colorOn THEN BEGIN
MenuDefs.Deselect[item];
ControllerDefs.InitColorMap[TRUE]; --color on
END
ELSE BEGIN
MenuDefs.Select[item];
ControllerDefs.InitColorMap[FALSE]; --grey levels only
END;
colorOn ← ~colorOn;
END;
Press: MenuDefs.MenuProc =
BEGIN OPEN ObjectDefs,AltoDisplay;
name: STRING;
newfile: BOOLEAN;
[name,newfile] ← GetName[];
IF name.length=0 THEN RETURN;
ExpungeObjects[];
IF StringDefs.EquivalentString[item.string, "MigPress"]
THEN ObjectDefs.MigPressAllObjects[name]
ELSE ObjectDefs.PressAllObjects[name];
END;
saveFileName: STRING;
Save: MenuDefs.MenuProc =
BEGIN OPEN ObjectDefs;
newfile: BOOLEAN;
[saveFileName,newfile] ← GetName[];
IF saveFileName.length=0 THEN RETURN;
IF newfile THEN BEGIN
ExpungeObjects[];
[] ← GriffinFileDefs.OpenPortfolio [saveFileName, TRUE];
[] ← GriffinFileDefs.AddFigure [1];
GriffinFileDefs.ClosePortfolio;
END
ELSE {MenuDefs.ShowMenu[filewriteMenu]; RefreshDefs.RestoreScreen[]};
END;
YesFile: MenuDefs.MenuProc =
BEGIN
ObjectDefs.ExpungeObjects[];
[] ← GriffinFileDefs.OpenPortfolio [saveFileName, TRUE];
[] ← GriffinFileDefs.ReplaceFigure [1];
GriffinFileDefs.ClosePortfolio;
MenuDefs.HideMenu[filewriteMenu];
RefreshDefs.RestoreScreen[];
END;
NoFile: MenuDefs.MenuProc =
BEGIN
MenuDefs.HideMenu[filewriteMenu];
RefreshDefs.RestoreScreen[];
END;
Restore: MenuDefs.MenuProc =
BEGIN OPEN ObjectDefs;
name: STRING;
newfile: BOOLEAN;
[name,newfile] ← GetName[];
IF name.length=0 THEN RETURN;
ExpungeObjects[];
IF GriffinFileDefs.OpenPortfolio [name, FALSE] THEN
BEGIN
GriffinFileDefs.ReadFigure [1];
GriffinFileDefs.ClosePortfolio;
ObjectDefs.ReplotAllObjects[];
END;
END;
TypeIntoFileName: MenuDefs.MenuProc =
BEGIN
MenuDefs.SelectOnly[item];
GriffinDefs.TypeIntoMenuItem[item];
END;
GetName: PROCEDURE RETURNS[string: STRING, newname: BOOLEAN]=
BEGIN OPEN MenuDefs;
nameItem: MenuItemHandle ← NIL;
FindLastSelected: MenuProc =
BEGIN
IF IsSelected[item] THEN nameItem ← item;
END;
ForAllMenuItems[filesMenu, FindLastSelected];
IF nameItem = fileName THEN BEGIN
nameItem ← AddPortfolioName[MenuString[fileName]];
RETURN[MenuString[nameItem], TRUE];
END
ELSE RETURN[MenuString[nameItem], FALSE];
END;
AddPortfolioName: PROCEDURE[string: STRING]
RETURNS [item: MenuDefs.MenuItemHandle] =
BEGIN OPEN MenuDefs, GriffinDefs;
i: CARDINAL;
IF string.length = 0
THEN UserMessage["First select or type a file name."];
FOR i IN [0..string.length) DO
IF string[i] = ' THEN UserMessage["Invalid file name."];
ENDLOOP;
item ← AddMenuItem[filesMenu, string, SelectOnly];
SetMenuString[fileName, ""];
SelectOnly[item];
RefreshDefs.RestoreScreen[];
END;
GridMenuProc: MenuDefs.MenuProc =
BEGIN
gridOn ← ~gridOn;
IF ~gridOn THEN BEGIN
MenuDefs.Deselect[item];
ObjectDefs.GridOff[];
END
ELSE BEGIN
MenuDefs.Select[item];
ObjectDefs.GridOn[];
END;
END;
Grid: PUBLIC PROCEDURE[pt: PointDefs.ScrPt] RETURNS[PointDefs.ScrPt]=
BEGIN
dx,dy: INTEGER;
IF NOT gridOn THEN RETURN[pt];
--will be unconvincing if grid < 2;
dx ← pt[X] MOD gridX;
pt[X] ← pt[X]-dx;
IF dx > gridX/2 THEN pt[X] ← pt[X] +gridX;
dy ← pt[Y] MOD gridY;
pt[Y] ← pt[Y]-dy;
IF dy > gridY/2 THEN pt[Y] ← pt[Y] +gridY;
RETURN[pt];
END;
Merge: MenuDefs.MenuProc =
BEGIN OPEN ObjectDefs;
view: View ← viewMenu.view;
Mark: ObjectProc = BEGIN
IF obj.view=view THEN RETURN;
obj.view ← view;
RefreshDefs.MarkBox[obj.tl,obj.br,obj];
END;
ForAllObjects[Mark];
RefreshDefs.RestoreScreen[];
END;
Switch: MenuDefs.MenuProc =
BEGIN OPEN ObjectDefs;
newView: View ← IF viewMenu.view=main THEN alternate ELSE main;
Mark: ObjectProc = BEGIN
WITH foo: obj SELECT FROM
menu => obj.view ← newView;
token => IF foo.tokenType#selected AND foo.tokenType#open THEN obj.view ← newView;
ENDCASE;
END;
ForAllObjects[Mark];
SetCurrentView[newView];
ScreenDefs.ClearScreen[];
ObjectDefs.ReplotAllObjects[];
END;
EachFile: PROCEDURE [fp: POINTER, s: STRING]
RETURNS [BOOLEAN] =
BEGIN
s.length ← GriffinFileDefs.IsTail[s, ".Griffin."];
IF s.length # 0
THEN []←AddPortfolioName[s];
RETURN[FALSE];
END;
promptMenu: MenuDefs.MenuHandle←NIL;
displayMenu,filesMenu,viewMenu, filewriteMenu: PUBLIC MenuDefs.MenuHandle←NIL;
fileName: MenuDefs.MenuItemHandle;
promptMenu ← MenuDefs.CreateMenu[horizontal, [60,70], "Type File Name >"];
viewMenu ← MenuDefs.CreateMenu[horizontal, [100,50], NIL];
[]←MenuDefs.AddMenuItem[viewMenu,"Refresh",Refresh];
[]←MenuDefs.AddMenuItem[viewMenu,"Grid",GridMenuProc];
[]←MenuDefs.AddMenuItem[viewMenu,"Merge",Merge];
[]←MenuDefs.AddMenuItem[viewMenu,"Switch",Switch];
[]←MenuDefs.AddMenuItem[viewMenu,"Mono",Mono];
filesMenu ← MenuDefs.CreateMenu[vertical, [100,75], NIL];
[]←MenuDefs.AddMenuItem[filesMenu,"Save", Save];
[]←MenuDefs.AddMenuItem[filesMenu,"Restore", Restore];
[]←MenuDefs.AddMenuItem[filesMenu,"Press", Press];
[]←MenuDefs.AddMenuItem[filesMenu,"MigPress", Press];
fileName ← MenuDefs.AddMenuItem[filesMenu, "", TypeIntoFileName];
filewriteMenu ← MenuDefs.CreateMenu[horizontal, [100,75], "Overwrite Exisiting File? [Confirm]"];
[]←MenuDefs.AddMenuItem[filewriteMenu,"Yes",YesFile];
[]←MenuDefs.AddMenuItem[filewriteMenu,"No",NoFile];
DirectoryDefs.EnumerateDirectory [EachFile];
MenuDefs.SelectOnly[fileName];
END.