<> <> <> 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]; }; }.