DIRECTORY MenuDefs USING [MenuItemHandle, MenuHandle, MenuProc, ForAllMenus, ForAllMenuItems], GriffinMenusInterface, PointDefs USING [ObjToScr,ObjPt, ScrPt, X, Y], ScreenDefs USING [ClipPointToScreen], ObjectDefs USING [StartObject,PlotOneObject,TokenType,Object, ObjectType, AddToken], Rope USING [ROPE, Equal]; GriffinMenusInterfaceImpl: PROGRAM IMPORTS MenuDefs, Rope, ObjectDefs, ScreenDefs, PointDefs EXPORTS GriffinMenusInterface = { MenuItemFromRope: PUBLIC PROC [rope: Rope.ROPE] RETURNS [foundItem: MenuDefs.MenuItemHandle] = { found: BOOLEAN _ FALSE; searchItems: MenuDefs.MenuProc = { IF ~found THEN { found _ Rope.Equal[rope, item.string, FALSE]; IF found THEN foundItem _ item; }; }; searchMenus: PROCEDURE [menu: MenuDefs.MenuHandle] = { IF ~found THEN MenuDefs.ForAllMenuItems[menu, searchItems]; }; MenuDefs.ForAllMenus[searchMenus]; }; PlaceScreenCP: PUBLIC PROCEDURE[pt: PointDefs.ScrPt] = { ObjectDefs.AddToken[ScreenDefs.ClipPointToScreen[pt], CP]; }; PlaceObjectCP: PUBLIC PROCEDURE[pt: PointDefs.ObjPt] = { scrPt: PointDefs.ScrPt _ PointDefs.ObjToScr[pt]; obj: REF ObjectDefs.Object[token] _ NARROW[ObjectDefs.StartObject[token]]; obj.tl _ [scrPt[PointDefs.X]-4,scrPt[PointDefs.Y]-4]; obj.br _ [scrPt[PointDefs.X]+4,scrPt[PointDefs.Y]+4]; obj.validEncoding _ TRUE; obj.tokenType _ CP; obj.p0 _ pt; obj.isSelected _ NIL; ObjectDefs.PlotOneObject[obj,write]; }; }. tGriffinMenusInterfaceImpl.mesa Lets a program click Griffin Menus Maureen Stone April 16, 1984 4:12:11 pm PST ĘŹ˜Jšœ™Jšœ"™"Jšœ+™+šĎk ˜ Jšœ œF˜TJšœ˜Jšœ œ˜.Jšœ œ˜%Jšœ œD˜TJšœœœ ˜J˜—JšĎbœ˜"Jšœ2˜9Jšœ˜!šĎnœ œ œœ)˜`Jšœœ˜šœ"˜"šœœ˜Jšœ&œ˜-Jšœœ˜J˜—J˜—šœ  œ ˜6Jšœœ-˜;J˜—J˜"J˜—šŸ œœ˜9Jšœ6œ˜:Jšœ˜—šŸ œœ˜9Jšœ0˜0Jšœœœ ˜JJšœœœ˜5Jšœœœ˜5Jšœœ˜Jšœ˜Jšœ ˜ Jšœœ˜Jšœ$˜$Jšœ˜—J˜J˜—…—p