(FILECREATED " 9-JUN-83 14:59:10" {INDIGO}<LOOPS>TRUCKIN>INMENU.;2 3374
previous date: " 8-JUN-83 18:11:05" {INDIGO}<KBVLSI>TRUCKIN>INMENU.;1)
(PRETTYCOMPRINT INMENUCOMS)
(RPAQQ INMENUCOMS ((* Copyright (c)
1983 by Xerox Corporation.)
(* INMENU package. Functions to support interactive menus for program interaction.
Similar to the standard pop-up menus except that arguments are compatible with
INTTY and does not lock out other processes.)
(* Written by Mark Stefik.)
(FNS INMENU InMenuWhenSelectedFn)))
(* Copyright (c) 1983 by Xerox Corporation.)
(* INMENU package. Functions to support interactive menus for program interaction. Similar to
the standard pop-up menus except that arguments are compatible with INTTY and does not lock out
other processes.)
(* Written by Mark Stefik.)
(DEFINEQ
(INMENU
[LAMBDA (promptStr goodList helpStr noShiftFlg) (* mjs: "18-FEB-83 10:05")
(* INMENU returns an atom selected by a user from a menu. If the user selects ?, the helpStr is printed.
The arguments to INMENU are intended to be compatible with INTTY. The last argument, noShiftFlg, is not used.)
(COND
((NULL goodList) (* Default to INTTY if no goodList)
(INTTY promptStr goodList helpStr noShiftFlg))
(T (PROG [menu window items item xPos yPos (dismissTime 300)
(NotSet (CONSTANT (QUOTE **NotSetYet**)))
(bellFlash (CONSTANT (CHARACTER 7)))
(pointers (CONSTANT " Use menu --->>"))
(questionMark (CONSTANT (QUOTE ?]
(SETQ items (COND
(helpStr (NCONC1 (COPY goodList)
questionMark))
(T goodList)))
(SETQ menu (create MENU
ITEMS ← items
WHENSELECTEDFN ←(FUNCTION InMenuWhenSelectedFn)
TITLE ← promptStr
MENUOUTLINESIZE ← 2))
[SETQ xPos (PLUS (DSPXOFFSET NIL PROMPTWINDOW)
(fetch WIDTH of (DSPCLIPPINGREGION NIL PROMPTWINDOW]
(SETQ yPos (IDIFFERENCE [IPLUS (DSPYOFFSET NIL PROMPTWINDOW)
(fetch HEIGHT of (WINDOWPROP PROMPTWINDOW (QUOTE REGION]
(fetch IMAGEHEIGHT of menu)))
(ADDMENU menu NIL (create POSITION
XCOORD ← xPos
YCOORD ← yPos))
(SETQ window (WFROMMENU menu))
(WINDOWPROP window (QUOTE MenuValue)
NotSet)
(PROMPT (CONCAT bellFlash promptStr pointers))
WaitLoop
(while [EQ NotSet (SETQ item (WINDOWPROP window (QUOTE MenuValue]
do (* Wait for selection to be made.)
(DISMISS dismissTime)
(TOTOPW window))
(COND
((EQ item questionMark)
(PROMPT helpStr)
(WINDOWPROP window (QUOTE MenuValue)
NotSet)
(GO WaitLoop)))
(DELETEMENU menu T)
(PROMPT)
(RETURN item])
(InMenuWhenSelectedFn
[LAMBDA (item menu key) (* mjs: "16-FEB-83 11:31")
(* This WHENSELECTEDFN saves the item selected in a
window property where INMENU will find it.)
(PROG (window)
(SETQ window (WFROMMENU menu))
(WINDOWPROP window (QUOTE MenuValue)
item)
(RETURN item])
)
(DECLARE: DONTCOPY
(FILEMAP (NIL (876 3352 (INMENU 886 . 2907) (InMenuWhenSelectedFn 2909 . 3350)))))
STOP