DIRECTORY CD, CDMenuSpecials, PopUpMenus, Rope, SymTab; CDMenuSpecialsImpl: CEDAR MONITOR IMPORTS PopUpMenus, SymTab EXPORTS CDMenuSpecials = BEGIN SelectOneOf: PUBLIC PROC[ref: SymTab.Ref, label: Rope.ROPE] RETURNS [Rope.ROPE_NIL] = { cnt: INT _ 0; menu, firstMenu: PopUpMenus.Menu; x: REF; EachEntry: SymTab.EachPairAction = { --key: Rope.ROPE quit _ FALSE; IF cnt>10 THEN { newMenu: PopUpMenus.Menu _ PopUpMenus.Create[header: label]; [] _ PopUpMenus.Entry[menu: menu, entry: "more ?", entryData: newMenu, doc: "more entries for this menu"]; menu _ newMenu; cnt _ 0 }; cnt _ cnt+1; [] _ PopUpMenus.Entry[menu: menu, entry: key, entryData: key] }; menu _ firstMenu _ PopUpMenus.Create[header: label]; [] _ ref.Pairs[EachEntry]; IF menu#firstMenu THEN [] _ PopUpMenus.Entry[menu: menu, entry: "again ?", entryData: firstMenu, doc: "show beginning entries again"]; x _ PopUpMenus.Call[firstMenu]; WHILE x#NIL AND ISTYPE[x, PopUpMenus.Menu] DO x _ PopUpMenus.Call[NARROW[x]]; ENDLOOP; RETURN [ NARROW[x] ]; }; END. πCDMenuSpecialsImpl.mesa (part of ChipNDale) Copyright c 1985, 1986 by Xerox Corporation. All rights reserved. Created by Christian Jacobi, June 5, 1985 8:02:35 pm PDT Last edited by: Christian Jacobi, August 24, 1986 8:21:47 pm PDT Κ°˜codešœ+™+Kšœ Οmœ7™BKšœ8™8K™@—K˜šΟk œ˜ Kšžœ˜Kšœ˜Kšœ ˜ Kšœ˜Kšœ˜—K˜šΠblœžœž˜!Kšžœ˜Kšžœ˜—Kšž˜K˜šΟn œžœžœžœžœžœžœ˜WKšœžœ+žœ˜7K˜šΠbn œΟc˜5Kšœžœ˜ šžœžœ˜Kšœ<˜