DIRECTORY GriffinDefs: FROM "GriffinDefs", PointDefs: FROM "PointDefs", RefreshDefs: FROM "RefreshDefs", MenuDefs: FROM "MenuDefs", GriffinMenusInterface, Rope USING[ROPE, Equal]; GriffinMain: CEDAR PROGRAM IMPORTS GriffinDefs, MenuDefs, RefreshDefs, Rope EXPORTS GriffinDefs, GriffinMenusInterface = BEGIN OPEN GriffinDefs, PointDefs,RefreshDefs; X: CARDINAL = PointDefs.X; Y: CARDINAL = PointDefs.Y; ROPE: TYPE=Rope.ROPE; topMenu: PUBLIC MenuDefs.MenuHandle_NIL; messageMenu: MenuDefs.MenuHandle_NIL; messageItem: MenuDefs.MenuItemHandle_NIL; ToggleShowMenu: PUBLIC MenuDefs.MenuProc = BEGIN OPEN MenuDefs, GriffinDefs; UpdateMenu: PROCEDURE[menu: MenuHandle, show: BOOLEAN] = BEGIN IF show THEN BEGIN ShowMenu[menu]; END ELSE BEGIN HideMenu[menu]; END; END; UpdateItem: PROCEDURE[item: MenuItemHandle] = BEGIN IF IsSelected[item] THEN Deselect[item] ELSE Select[item]; END; UpdateBoth: PROCEDURE[menu: MenuHandle, item: MenuItemHandle] = BEGIN UpdateItem[item]; UpdateMenu[menu, IsSelected[item]]; END; string: ROPE = MenuString[item]; SELECT TRUE FROM Rope.Equal[string, "Edit"] => BEGIN IF IsSelected[item] THEN BEGIN item: MenuItemHandle; item _ FindItemByString[editMenu,"Spline Type"]; IF IsSelected[item] THEN BugItem[item]; END; UpdateItem[item]; UpdateMenu[editMenu, IsSelected[item]]; UpdateMenu[shapeMenu, IsSelected[item]]; END; Rope.Equal[string, "Objects"] => UpdateBoth[objectMenu, item]; Rope.Equal[string, "Style"] => BEGIN IF IsSelected[item] THEN BEGIN item: MenuItemHandle; item _ FindItemByString[GriffinDefs.styleMenu,"Text Style"]; IF IsSelected[item] THEN BugItem[item]; item _ FindItemByString[GriffinDefs.styleMenu,"Color Style"]; IF IsSelected[item] THEN BugItem[item]; item _ FindItemByString[GriffinDefs.styleMenu,"Shape Style"]; IF IsSelected[item] THEN BugItem[item]; END; UpdateBoth[styleMenu, item]; END; Rope.Equal[string, "Files"] => UpdateBoth[filesMenu, item]; Rope.Equal[string, "Transform"] => UpdateBoth[xformMenu, item]; Rope.Equal[string, "Overlap"] => UpdateBoth[overlapMenu, item]; Rope.Equal[string, "View"] => UpdateBoth[viewMenu, item]; ENDCASE=> ERROR; RestoreScreen[]; END; FindItemByString: PROCEDURE[menu: MenuDefs.MenuHandle,string: ROPE] RETURNS [mitem: MenuDefs.MenuItemHandle]= BEGIN OPEN MenuDefs; IsItem: MenuProc = BEGIN IF Rope.Equal[MenuString[item],string] THEN mitem _ item; END; ForAllMenuItems[menu,IsItem]; END; UserMessage: PUBLIC SIGNAL [string: ROPE] = CODE; HideMessage: MenuDefs.MenuProc = { MenuDefs.HideMenu[messageMenu]; RestoreScreen[]; }; ShowUserMessage: PUBLIC PROCEDURE[string: ROPE] = BEGIN MenuDefs.SetMenuString[messageItem, string]; MenuDefs.ShowMenu[messageMenu]; MenuDefs.HighlightMenuItem[messageItem]; RestoreScreen[]; END; StartMainMenus: PUBLIC PROCEDURE = BEGIN topMenu _ MenuDefs.CreateMenu[horizontal, [100,30], NIL]; []_MenuDefs.AddMenuItem[topMenu,"Edit",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"Objects",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"Style",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"Files",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"Transform",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"Overlap",ToggleShowMenu]; []_MenuDefs.AddMenuItem[topMenu,"View",ToggleShowMenu]; messageMenu _ MenuDefs.CreateMenu[vertical, [150, 400], NIL]; messageItem _ MenuDefs.AddMenuItem[messageMenu, "Aborted.", HideMessage]; topMenu.visible _ TRUE; END; END. ¼Compiler GriffinMain/n m.stone November 14, 1980 1:44 PM Tiberi December 12, 1979 12:00 PM Last Edited by: Stone, November 14, 1983 3:11 pm Procedure so can catch all init errors Êö˜J˜Jšœ™Jšœ"™"Jšœ"™"Jšœ0™0J˜šÏk ˜ Jšœ œ˜ Jšœ œ ˜Jšœ œ˜ Jšœ œ ˜J˜Jšœœœ ˜—J˜šœ ˜Jšœ*˜1Jšœ&˜-—šœœ$˜.J˜—Jšœœ˜Jšœœ˜Jšœœœ˜J˜Jšœ œœ˜(Jšœ!œ˜%Jšœ%œ˜)J˜Jšœœ˜*šœœ˜!šÏn œ œœ˜8Jš˜šœœ˜J˜Jš˜—šœœ˜ J˜Jšœ˜—Jšœ˜—šž œ œ˜-Jš˜Jšœœœ˜:Jšœ˜—šž œ œ*˜?Jš˜J˜J˜#Jšœ˜—J˜Jšœœ˜ Jšœœ˜˜Jš˜šœœ˜J˜J˜0Jšœœ˜'Jšœ˜—J˜J˜'J˜(Jšœ˜—˜ J˜—˜Jš˜šœœ˜J˜J˜