]> granicus.if.org Git - nethack/commitdiff
window port interface change - add mbehavior flags to start_menu()
authornhmall <nhmall@nethack.org>
Fri, 21 Feb 2020 01:12:51 +0000 (20:12 -0500)
committernhmall <nhmall@nethack.org>
Fri, 21 Feb 2020 01:12:51 +0000 (20:12 -0500)
Provide a way to communicate additional behaviors and/or appearances
desired from NetHack window port menus.

This is foundation work for changes to follow at a future date.

55 files changed:
doc/window.doc
include/macwin.h
include/trampoli.h
include/winX.h
include/wincurs.h
include/wingem.h
include/winprocs.h
include/wintty.h
include/wintype.h
src/allmain.c
src/apply.c
src/artifact.c
src/botl.c
src/cmd.c
src/do_name.c
src/dungeon.c
src/insight.c
src/invent.c
src/nhlua.c
src/o_init.c
src/options.c
src/pager.c
src/pickup.c
src/restore.c
src/spell.c
src/teleport.c
src/weapon.c
src/windows.c
sys/amiga/winami.c
sys/amiga/winami.p
sys/amiga/winmenu.c
sys/amiga/winproto.h
sys/mac/macwin.c
sys/wince/mhcmd.c
sys/wince/mswproc.c
sys/wince/winMS.h
win/Qt/qt_bind.cpp
win/Qt/qt_bind.h
win/Qt3/qt3_win.cpp
win/Qt3/qt3_win.h
win/X11/winX.c
win/X11/winmenu.c
win/chain/wc_chainin.c
win/chain/wc_chainout.c
win/chain/wc_trace.c
win/curses/cursinit.c
win/curses/cursmain.c
win/gem/wingem.c
win/gem/wingem1.c
win/gnome/gnbind.c
win/gnome/gnbind.h
win/share/safeproc.c
win/tty/wintty.c
win/win32/mswproc.c
win/win32/winMS.h

index 8789783cb6751ade05f6d5db5feb7fd1d33b03a9..a2ddc4a9074c82b4f8378f1cd3e5de8f98a98ef8 100644 (file)
@@ -303,11 +303,13 @@ display_nhwindow(window, boolean blocking)
 destroy_nhwindow(window)
                -- Destroy will dismiss the window if the window has not
                   already been dismissed.
-start_menu(window)
+start_menu(window, unsigned long mbehavior)
                -- Start using window as a menu.  You must call start_menu()
                   before add_menu().  After calling start_menu() you may not
                   putstr() to the window.  Only windows of type NHW_MENU may
                   be used for menus.
+               -- mbehavior allows flags to be passed to alter the appearance
+                   and/or behavior of the menu.
 add_menu(windid window, int glyph, const anything identifier,
                                char accelerator, char groupacc,
                                int attr, char *str, unsigned itemflags)
index 3e33c847f35e489d7aaf09897050b217ef363f79..b1ea4a2f14ee9c43db79528334905f7f1dab27e9 100644 (file)
@@ -225,7 +225,7 @@ E void FDECL(mac_display_nhwindow, (winid, BOOLEAN_P));
 E void FDECL(mac_destroy_nhwindow, (winid));
 E void FDECL(mac_curs, (winid, int, int));
 E void FDECL(mac_putstr, (winid, int, const char *));
-E void FDECL(mac_start_menu, (winid));
+E void FDECL(mac_start_menu, (winid, unsigned long mbehavior));
 E void FDECL(mac_add_menu, (winid, int, const anything *, CHAR_P, CHAR_P, int,
                             const char *, unsigned int));
 E void FDECL(mac_end_menu, (winid, const char *));
index 865da44c1c519c25352a7fbdbcf226729517386f..f6c8cec5afa236b2a47bc4d42c24bbfc7c00cde4 100644 (file)
 #define tty_curs(x, y, z) tty_curs_(x, y, z)
 #define tty_putstr(x, y, z) tty_putstr_(x, y, z)
 #define tty_display_file(x, y) tty_display_file_(x, y)
-#define tty_start_menu(x) tty_start_menu_(x)
+#define tty_start_menu(x, b) tty_start_menu_(x, b)
 #define tty_add_menu(a, b, c, d, e, f, g, h) \
     tty_add_menu_(a, b, c, d, e, f, g, h)
 #define tty_end_menu(a, b) tty_end_menu_(a, b)
index 5681f61a53198feb5fd1c725959f649fd6be5eec..56aafedd1365f8dffc01b073bc5805b4618255e6 100644 (file)
@@ -417,7 +417,7 @@ E void FDECL(X11_destroy_nhwindow, (winid));
 E void FDECL(X11_curs, (winid, int, int));
 E void FDECL(X11_putstr, (winid, int, const char *));
 E void FDECL(X11_display_file, (const char *, BOOLEAN_P));
-E void FDECL(X11_start_menu, (winid));
+E void FDECL(X11_start_menu, (winid, unsigned long));
 E void FDECL(X11_add_menu, (winid, int, const ANY_P *, CHAR_P, CHAR_P, int,
                             const char *, unsigned int));
 E void FDECL(X11_end_menu, (winid, const char *));
index bc670975e124beeb55cb7d1c92554bb8743d4c2b..6ba6f292589a02d9be617ebec823148b9955e1ee 100644 (file)
@@ -79,7 +79,7 @@ extern void curses_destroy_nhwindow(winid wid);
 extern void curses_curs(winid wid, int x, int y);
 extern void curses_putstr(winid wid, int attr, const char *text);
 extern void curses_display_file(const char *filename, BOOLEAN_P must_exist);
-extern void curses_start_menu(winid wid);
+extern void curses_start_menu(winid wid, unsigned long);
 extern void curses_add_menu(winid wid, int glyph, const ANY_P * identifier,
                             CHAR_P accelerator, CHAR_P group_accel, int attr,
                             const char *str, unsigned int itemflags);
index 376b732d9f7815ed8293bc9357d3e601b3c493fc..8d1edf2bea1ffda6d0e0b78ddb89213aae076528 100644 (file)
@@ -69,7 +69,7 @@ E void FDECL(Gem_destroy_nhwindow, (winid));
 E void FDECL(Gem_curs, (winid, int, int));
 E void FDECL(Gem_putstr, (winid, int, const char *));
 E void FDECL(Gem_display_file, (const char *, BOOLEAN_P));
-E void FDECL(Gem_start_menu, (winid));
+E void FDECL(Gem_start_menu, (winid, unsigned long));
 E void FDECL(Gem_add_menu, (winid, int, const ANY_P *, CHAR_P, CHAR_P, int,
                             const char *, unsigned int));
 E void FDECL(Gem_end_menu, (winid, const char *));
index 8c266e4ffe8af2896df0d3e1b3ec8ccef71f4c59..d252630dda2a0e2f59376f355d619c0b40ad5162 100644 (file)
@@ -30,7 +30,7 @@ struct window_procs {
     void FDECL((*win_putstr), (winid, int, const char *));
     void FDECL((*win_putmixed), (winid, int, const char *));
     void FDECL((*win_display_file), (const char *, BOOLEAN_P));
-    void FDECL((*win_start_menu), (winid));
+    void FDECL((*win_start_menu), (winid, unsigned long));
     void FDECL((*win_add_menu), (winid, int, const ANY_P *, CHAR_P, CHAR_P,
                                  int, const char *, unsigned int));
     void FDECL((*win_end_menu), (winid, const char *));
@@ -329,7 +329,7 @@ struct chain_procs {
     void FDECL((*win_putstr), (CARGS, winid, int, const char *));
     void FDECL((*win_putmixed), (CARGS, winid, int, const char *));
     void FDECL((*win_display_file), (CARGS, const char *, BOOLEAN_P));
-    void FDECL((*win_start_menu), (CARGS, winid));
+    void FDECL((*win_start_menu), (CARGS, winid, unsigned long));
     void FDECL((*win_add_menu), (CARGS, winid, int, const ANY_P *, CHAR_P,
                                  CHAR_P, int, const char *, unsigned int));
     void FDECL((*win_end_menu), (CARGS, winid, const char *));
@@ -403,7 +403,7 @@ extern void FDECL(safe_curs, (winid, int, int));
 extern void FDECL(safe_putstr, (winid, int, const char *));
 extern void FDECL(safe_putmixed, (winid, int, const char *));
 extern void FDECL(safe_display_file, (const char *, BOOLEAN_P));
-extern void FDECL(safe_start_menu, (winid));
+extern void FDECL(safe_start_menu, (winid, unsigned long));
 extern void FDECL(safe_add_menu, (winid, int, const ANY_P *, CHAR_P, CHAR_P,
                                   int, const char *, unsigned int));
 extern void FDECL(safe_end_menu, (winid, const char *));
index 3cf4cb77c878167b870ca225df76992849e6c890..1bc2e7e64ec63a6af9b9e9f5c0112f4b34e92a01 100644 (file)
@@ -32,6 +32,7 @@ struct WinDesc {
     long rows, cols;     /* dimensions */
     long curx, cury;     /* current cursor position */
     long maxrow, maxcol; /* the maximum size used -- for MENU wins */
+    unsigned long mbehavior; /* menu behavior flags (MENU) */
     /* maxcol is also used by WIN_MESSAGE for */
     /* tracking the ^P command */
     short *datlen;         /* allocation size for *data */
@@ -190,7 +191,7 @@ E void FDECL(tty_destroy_nhwindow, (winid));
 E void FDECL(tty_curs, (winid, int, int));
 E void FDECL(tty_putstr, (winid, int, const char *));
 E void FDECL(tty_display_file, (const char *, BOOLEAN_P));
-E void FDECL(tty_start_menu, (winid));
+E void FDECL(tty_start_menu, (winid, unsigned long));
 E void FDECL(tty_add_menu, (winid, int, const ANY_P *, CHAR_P, CHAR_P, int,
                             const char *, unsigned int));
 E void FDECL(tty_end_menu, (winid, const char *));
index 217b314a553fc4a52c8c80384ef4e8e980f6aa59..d85485aeb5c1df54604204e770bb9a9dbb6730e6 100644 (file)
@@ -111,6 +111,16 @@ typedef struct mi {
 #define MENU_ITEMFLAGS_SELECTED   0x0000001U
 #define MENU_ITEMFLAGS_SKIPINVERT 0x0000002U
 
+/* 3.7+ enhanced menu flags that not all window ports are likely to
+ * support initially.
+ *
+ * As behavior and appearance modification flags are added, the various
+ * individual window ports will likely have to be updated to respond
+ * to the flags in an appropriate way.
+ */
+
+#define MENU_BEHAVE_STANDARD      0x0000000U
+
 /* clang-format on */
 
 #endif /* WINTYPE_H */
index 97ce7c11d3883a3082a84d98c1b93b45541cf186..073054cbc8d0db97b6a83adfc4f9835a1ea94382 100644 (file)
@@ -573,7 +573,7 @@ display_gamewindows()
     WIN_INVEN = create_nhwindow(NHW_MENU);
     /* in case of early quit where WIN_INVEN could be destroyed before
        ever having been used, use it here to pacify the Qt interface */
-    start_menu(WIN_INVEN), end_menu(WIN_INVEN, (char *) 0);
+    start_menu(WIN_INVEN, 0U), end_menu(WIN_INVEN, (char *) 0);
 
 #ifdef MAC
     /* This _is_ the right place for this - maybe we will
index 09414ecaf16f94650d6ddaab1bad491af861b583..c4c13d71f07b4e9ed5c081b3df4639add6aad0f7 100644 (file)
@@ -3259,7 +3259,7 @@ struct obj *obj;
 
         any = cg.zeroany; /* set all bits to zero */
         any.a_int = 1; /* use index+1 (cant use 0) as identifier */
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any.a_int++;
         Sprintf(buf, "an object on the %s", surface(cc.x, cc.y));
         add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf,
index 75998ec8846bb441d5945dc8c7d5e810a463585c..7771a6102d9985107520587a37c29443acf61a06 100644 (file)
@@ -1527,7 +1527,7 @@ struct obj *obj;
             anything any;
 
             any = cg.zeroany; /* set all bits to zero */
-            start_menu(tmpwin);
+            start_menu(tmpwin, MENU_BEHAVE_STANDARD);
             /* use index+1 (cant use 0) as identifier */
             for (i = num_ok_dungeons = 0; i < g.n_dgns; i++) {
                 if (!g.dungeons[i].dunlev_ureached)
index 5aedb928d446d8a58941af9bf1276953d9236e5c..d52b184535eeff2c6aa72451905dec1d35656135 100644 (file)
@@ -1050,7 +1050,7 @@ cond_menu(VOID_ARGS)
               (sortorder) ? cond_cmp : menualpha_cmp);
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
         any = cg.zeroany;
         any.a_int = 1;
@@ -2321,7 +2321,7 @@ int arrmin, arrmax;
     int adj = (arrmin > 0) ? 1 : arrmax;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
     for (i = arrmin; i < arrmax; i++) {
         any = cg.zeroany;
@@ -2666,7 +2666,7 @@ query_conditions()
     menu_item *picks = (menu_item *) 0;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
     for (i = 0; i < SIZE(conditions); i++) {
         any = cg.zeroany;
@@ -3230,7 +3230,7 @@ status_hilite_menu_choose_field()
     menu_item *picks = (menu_item *) 0;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
     for (i = 0; i < MAXBLSTATS; i++) {
 #ifndef SCORE_ON_BOTL
@@ -3273,7 +3273,7 @@ int fld;
     at = initblstats[fld].anytype;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
     if (fld != BL_CONDITION) {
         any = cg.zeroany;
@@ -3360,7 +3360,7 @@ boolean ltok, gtok;
     menu_item *picks = (menu_item *) 0;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
     if (ltok) {
         if (str)
@@ -3903,7 +3903,7 @@ int fld;
     }
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
     if (count) {
         hlstr = status_hilite_str;
@@ -4037,7 +4037,7 @@ shlmenu_redo:
     redo = FALSE;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
     status_hilite_linestr_gather();
     countall = status_hilite_linestr_countfield(BL_FLUSH);
index 91a93a452f13e46443b120d263926836994badb9..e4de504e9e821d3d31540187faa9e2202ff460b7 100644 (file)
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -357,7 +357,7 @@ doextlist(VOID_ARGS)
     while (redisplay) {
         redisplay = FALSE;
         any = cg.zeroany;
-        start_menu(menuwin);
+        start_menu(menuwin, MENU_BEHAVE_STANDARD);
         add_menu(menuwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
                  "Extended Commands List",
                  MENU_ITEMFLAGS_NONE);
@@ -576,7 +576,7 @@ extcmd_via_menu()
 
         /* otherwise... */
         win = create_nhwindow(NHW_MENU);
-        start_menu(win);
+        start_menu(win, MENU_BEHAVE_STANDARD);
         Sprintf(fmtstr, "%%-%ds", biggest + 15);
         prompt[0] = '\0';
         wastoolong = FALSE; /* True => had to wrap due to line width
@@ -1476,7 +1476,7 @@ wiz_intrinsic(VOID_ARGS)
 
         any = cg.zeroany;
         win = create_nhwindow(NHW_MENU);
-        start_menu(win);
+        start_menu(win, MENU_BEHAVE_STANDARD);
         for (i = 0; (propname = propertynames[i].prop_name) != 0; ++i) {
             p = propertynames[i].prop_num;
             if (p == HALLUC_RES) {
@@ -1620,7 +1620,7 @@ doterrain(VOID_ARGS)
      *  a legend for the levl[][].typ codes dump
      */
     men = create_nhwindow(NHW_MENU);
-    start_menu(men);
+    start_menu(men, MENU_BEHAVE_STANDARD);
     any = cg.zeroany;
     any.a_int = 1;
     add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
@@ -3716,7 +3716,7 @@ int x, y;
     struct monst *mtmp;
 
     win = create_nhwindow(NHW_MENU);
-    start_menu(win);
+    start_menu(win, MENU_BEHAVE_STANDARD);
 
     if (IS_DOOR(typ)) {
         boolean key_or_pick, card;
@@ -3817,7 +3817,7 @@ boolean doit;
     menu_item *picks = (menu_item *) 0;
 
     win = create_nhwindow(NHW_MENU);
-    start_menu(win);
+    start_menu(win, MENU_BEHAVE_STANDARD);
 
     if (IS_FOUNTAIN(typ) || IS_SINK(typ)) {
         Sprintf(buf, "Drink from the %s",
index 791a74fde652815eff60f0a2d332b07674b85446..7e01e58786152567bfcd25c97b08f73ad5fe2049 100644 (file)
@@ -581,7 +581,7 @@ int gloc;
     }
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
     any = cg.zeroany;
 
     /* gather_locs returns array[0] == you. skip it. */
@@ -1348,7 +1348,7 @@ docallcmd()
     boolean abc = flags.lootabc;
 
     win = create_nhwindow(NHW_MENU);
-    start_menu(win);
+    start_menu(win, MENU_BEHAVE_STANDARD);
     any = cg.zeroany;
     any.a_char = 'm'; /* group accelerator 'C' */
     add_menu(win, NO_GLYPH, &any, abc ? 0 : any.a_char, 'C', ATR_NONE,
index 59473d6c3c395856539968122b0dce5fdbe6a62c..94712d4651223b0e420cd3e288685cfa5ed68d36 100644 (file)
@@ -2128,7 +2128,7 @@ xchar *rdgn;
     winid win = create_nhwindow(NHW_MENU);
 
     if (bymenu) {
-        start_menu(win);
+        start_menu(win, MENU_BEHAVE_STANDARD);
         lchoices.idx = 0;
         lchoices.menuletter = 'a';
     }
index 60c8cb25f9f4e1966e3d69f41228f8e498ee92cb..a688c97ee3ba65929d0b368b7eb364a079e972d6 100644 (file)
@@ -235,7 +235,7 @@ int final; /* ENL_GAMEINPROGRESS:0, ENL_GAMEOVERALIVE, ENL_GAMEOVERDEAD */
     g.en_win = create_nhwindow(NHW_MENU);
     g.en_via_menu = !final;
     if (g.en_via_menu)
-        start_menu(g.en_win);
+        start_menu(g.en_win, MENU_BEHAVE_STANDARD);
 
     Strcpy(tmpbuf, g.plname);
     *tmpbuf = highc(*tmpbuf); /* same adjustment as bottom line */
@@ -2016,7 +2016,7 @@ set_vanq_order()
     int i, n, choice;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
     any = cg.zeroany; /* zero out all bits */
     for (i = 0; i < SIZE(vanqorders); i++) {
         if (i == VANQ_ALPHA_MIX || i == VANQ_MCLS_HTOL) /* skip these */
index 3c0347ad9be9fbe61be7992436b7b875404856a1..9f3b5137d67a7ebe51454b1919e81151056a1bc3 100644 (file)
@@ -2642,7 +2642,7 @@ long *out_cnt;
     sortedinvent = sortloot(&g.invent, sortflags, FALSE,
                             (boolean FDECL((*), (OBJ_P))) 0);
 
-    start_menu(win);
+    start_menu(win, MENU_BEHAVE_STANDARD);
     any = cg.zeroany;
     if (wizard && iflags.override_ID) {
         int unid_cnt;
@@ -2810,7 +2810,7 @@ char avoidlet;
 
     if (g.invent) {
         win = create_nhwindow(NHW_MENU);
-        start_menu(win);
+        start_menu(win, MENU_BEHAVE_STANDARD);
         while (!invdone) {
             any = cg.zeroany; /* set all bits to zero */
             classcount = 0;
@@ -4272,7 +4272,7 @@ const char *hdr, *txt;
 
     any = cg.zeroany;
     win = create_nhwindow(NHW_MENU);
-    start_menu(win);
+    start_menu(win, MENU_BEHAVE_STANDARD);
     add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, hdr,
              MENU_ITEMFLAGS_NONE);
     add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_ITEMFLAGS_NONE);
index 68c09dfd36369f10f14bb110b85a3215afec1cb8..54fd25ab5dc74cb5a4813bf23bb61e6cc21a1c5a 100644 (file)
@@ -480,7 +480,7 @@ lua_State *L;
     luaL_checktype(L, argc, LUA_TTABLE);
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
     lua_pushnil(L); /* first key */
     while (lua_next(L, argc) != 0) {
index 3c15a0e7198c5db8e6b0ae8dbc9b7f9fa1c59588..b6b27ca91205bfbf1ec614a58486bab14521ec21 100644 (file)
@@ -520,7 +520,7 @@ doclassdisco()
                    || flags.menu_style == MENU_COMBINATION);
     if (!traditional) {
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
     }
     any = cg.zeroany;
     menulet = 'a';
@@ -680,7 +680,7 @@ rename_disco()
 
     any = cg.zeroany;
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
     /*
      * Skip the "unique objects" section (each will appear within its
index 13ece09273386faa651f000deb78e37aeb6beb6f..3ede3def435a2e4b6cb07c56decea08130c4ebf1 100644 (file)
@@ -1443,7 +1443,7 @@ const char *prompt;
     menu_item *picks = (menu_item *) 0;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
     any = cg.zeroany;
     for (i = 0; i < SIZE(colornames); i++) {
         if (!colornames[i].name)
@@ -1489,7 +1489,7 @@ const char *prompt;
     if (prompt && strstri(prompt, "menu headings"))
         default_attr = iflags.menu_headings;
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
     any = cg.zeroany;
     for (i = 0; i < SIZE(attrnames); i++) {
         if (!attrnames[i].name)
@@ -1588,7 +1588,7 @@ query_msgtype()
     menu_item *picks = (menu_item *) 0;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
     any = cg.zeroany;
     for (i = 0; i < SIZE(msgtype_names); i++)
         if (msgtype_names[i].descr) {
@@ -4536,7 +4536,7 @@ doset() /* changing options via menu by Per Liboriussen */
     unsigned longest_name_len;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
 #ifdef notyet /* SYSCF */
     /* XXX I think this is still fragile.  Fixing initial/from_file and/or
@@ -4754,7 +4754,7 @@ int numtotal;
 
     opt_idx = 0;
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
     any = cg.zeroany;
     for (i = 0; i < SIZE(action_titles); i++) {
         char tmpbuf[BUFSZ];
@@ -4800,7 +4800,7 @@ boolean setinitial, setfromfile;
         menu_item *style_pick = (menu_item *) 0;
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         for (i = 0; i < SIZE(menutype); i++) {
             style_name = menutype[i];
@@ -4820,7 +4820,7 @@ boolean setinitial, setfromfile;
         menu_item *paranoia_picks = (menu_item *) 0;
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         for (i = 0; paranoia[i].flagmask != 0; ++i) {
             if (paranoia[i].flagmask == PARANOID_BONES && !wizard)
@@ -4852,7 +4852,7 @@ boolean setinitial, setfromfile;
         menu_item *burden_pick = (menu_item *) 0;
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         for (i = 0; i < SIZE(burdentype); i++) {
             burden_name = burdentype[i];
@@ -4883,7 +4883,7 @@ boolean setinitial, setfromfile;
         menu_item *disclosure_pick = (menu_item *) 0;
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         for (i = 0; i < NUM_DISCLOSURE_OPTIONS; i++) {
             Sprintf(buf, "%-12s[%c%c]", disclosure_names[i],
@@ -4911,7 +4911,7 @@ boolean setinitial, setfromfile;
                 Sprintf(buf, "Disclosure options for %s:",
                         disclosure_names[i]);
                 tmpwin = create_nhwindow(NHW_MENU);
-                start_menu(tmpwin);
+                start_menu(tmpwin, MENU_BEHAVE_STANDARD);
                 any = cg.zeroany;
                 /* 'y','n',and '+' work as alternate selectors; '-' doesn't */
                 any.a_char = DISCLOSE_NO_WITHOUT_PROMPT;
@@ -4960,7 +4960,7 @@ boolean setinitial, setfromfile;
         menu_item *mode_pick = (menu_item *) 0;
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         for (i = 0; i < SIZE(runmodes); i++) {
             mode_name = runmodes[i];
@@ -4980,7 +4980,7 @@ boolean setinitial, setfromfile;
         char gp = iflags.getpos_coords;
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         any.a_char = GPCOORDS_COMPASS;
         add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_COMPASS, 0, ATR_NONE,
@@ -5044,7 +5044,7 @@ boolean setinitial, setfromfile;
         char gf = iflags.getloc_filter;
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         any.a_char = (GFILTER_NONE + 1);
         add_menu(tmpwin, NO_GLYPH, &any, 'n',
@@ -5079,7 +5079,7 @@ boolean setinitial, setfromfile;
             menu_item *window_pick = (menu_item *) 0;
 
             tmpwin = create_nhwindow(NHW_MENU);
-            start_menu(tmpwin);
+            start_menu(tmpwin, MENU_BEHAVE_STANDARD);
             any = cg.zeroany;
             if (!WINDOWPORT("curses")) {
                 any.a_char = 's';
@@ -5110,7 +5110,7 @@ boolean setinitial, setfromfile;
         menu_item *sortl_pick = (menu_item *) 0;
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         for (i = 0; i < SIZE(sortltype); i++) {
             sortl_name = sortltype[i];
@@ -5137,7 +5137,7 @@ boolean setinitial, setfromfile;
         boolean msg = (*(optname + 6) == 'm');
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         any.a_int = ALIGN_TOP;
         add_menu(tmpwin, NO_GLYPH, &any, 't', 0, ATR_NONE, "top",
@@ -5172,7 +5172,7 @@ boolean setinitial, setfromfile;
         menu_item *mode_pick = (menu_item *) 0;
 
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         for (i = 0; i < SIZE(npchoices); i++) {
             any.a_int = i + 1;
@@ -5249,7 +5249,7 @@ boolean setinitial, setfromfile;
             struct plinemsg_type *tmp = g.plinemsg_types;
 
             tmpwin = create_nhwindow(NHW_MENU);
-            start_menu(tmpwin);
+            start_menu(tmpwin, MENU_BEHAVE_STANDARD);
             any = cg.zeroany;
             mt_idx = 0;
             while (tmp) {
@@ -5329,7 +5329,7 @@ boolean setinitial, setfromfile;
             char clrbuf[QBUFSZ];
 
             tmpwin = create_nhwindow(NHW_MENU);
-            start_menu(tmpwin);
+            start_menu(tmpwin, MENU_BEHAVE_STANDARD);
             any = cg.zeroany;
             mc_idx = 0;
             while (tmp) {
@@ -5403,7 +5403,7 @@ boolean setinitial, setfromfile;
             menu_item *pick_list = (menu_item *) 0;
 
             tmpwin = create_nhwindow(NHW_MENU);
-            start_menu(tmpwin);
+            start_menu(tmpwin, MENU_BEHAVE_STANDARD);
             if (numapes) {
                 ape = g.apelist;
                 any = cg.zeroany;
@@ -5489,7 +5489,7 @@ boolean setinitial, setfromfile;
 
             Sprintf(fmtstr, "%%-%ds %%s", biggest + 2);
             tmpwin = create_nhwindow(NHW_MENU);
-            start_menu(tmpwin);
+            start_menu(tmpwin, MENU_BEHAVE_STANDARD);
             any = cg.zeroany;
             any.a_int = 1; /* -1 + 2 [see 'if (sl->name) {' below]*/
             if (!symset_name)
@@ -6526,7 +6526,7 @@ char *class_select;
     next_accelerator = 'a';
     any = cg.zeroany;
     win = create_nhwindow(NHW_MENU);
-    start_menu(win);
+    start_menu(win, MENU_BEHAVE_STANDARD);
     while (*class_list) {
         const char *text;
         boolean selected;
index 2607bb9e0ec190157d4595b14e0e8e52970b09b3..f4b904443701265078462c6d21c6b2470e164993 100644 (file)
@@ -1232,7 +1232,7 @@ coord *click_cc;
 
             any = cg.zeroany;
             win = create_nhwindow(NHW_MENU);
-            start_menu(win);
+            start_menu(win, MENU_BEHAVE_STANDARD);
             any.a_char = '/';
             /* 'y' and 'n' to keep backwards compatibility with previous
                versions: "Specify unknown object by cursor?" */
@@ -2111,7 +2111,7 @@ dohelp()
     int sel;
 
     any = cg.zeroany; /* zero all bits */
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
 
     for (i = 0; help_menu_items[i].text; i++) {
         if (!wizard && help_menu_items[i].f == dispfile_debughelp)
index e86ec2d77b4652ed1b3661525e1291c1fa9c0f7b..f3a674de3f7453a5e118d9023b1cb54d055d364c 100644 (file)
@@ -935,7 +935,7 @@ boolean FDECL((*allow), (OBJ_P)); /* allow function */
                            (qflags & BY_NEXTHERE) ? TRUE : FALSE, allow);
 
     win = create_nhwindow(NHW_MENU);
-    start_menu(win);
+    start_menu(win, MENU_BEHAVE_STANDARD);
     any = cg.zeroany;
     /*
      * Run through the list and add the objects to the menu.  If
@@ -1126,7 +1126,7 @@ int how;               /* type of query */
     }
 
     win = create_nhwindow(NHW_MENU);
-    start_menu(win);
+    start_menu(win, MENU_BEHAVE_STANDARD);
     pack = flags.inv_order;
 
     if (qflags & CHOOSE_ALL) {
@@ -1888,7 +1888,7 @@ doloot()
 
             any.a_void = 0;
             win = create_nhwindow(NHW_MENU);
-            start_menu(win);
+            start_menu(win, MENU_BEHAVE_STANDARD);
 
             for (cobj = g.level.objects[cc.x][cc.y]; cobj;
                  cobj = cobj->nexthere)
@@ -2964,7 +2964,7 @@ boolean outokay, inokay, alreadyused, more_containers;
 
     any = cg.zeroany;
     win = create_nhwindow(NHW_MENU);
-    start_menu(win);
+    start_menu(win, MENU_BEHAVE_STANDARD);
 
     any.a_int = 1; /* ':' */
     Sprintf(buf, "Look inside %s", thesimpleoname(obj));
@@ -3061,7 +3061,7 @@ dotip()
 
                 any = cg.zeroany;
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
 
                 for (cobj = g.level.objects[cc.x][cc.y], i = 0; cobj;
                      cobj = cobj->nexthere)
index 3c9d85bccbee7a09bec4f0057c905e25d40fafee..deabf002f5bac959566fdc9f65eead958ed8bcff 100644 (file)
@@ -1429,7 +1429,7 @@ winid bannerwin; /* if not WIN_ERR, clear window and show copyright in menu */
     saved = get_saved_games(); /* array of character names */
     if (saved && *saved) {
         tmpwin = create_nhwindow(NHW_MENU);
-        start_menu(tmpwin);
+        start_menu(tmpwin, MENU_BEHAVE_STANDARD);
         any = cg.zeroany; /* no selection */
         if (bannerwin != WIN_ERR) {
             /* for tty; erase copyright notice and redo it in the menu */
index d100789cc6e556a709359293c5aa6cc0f8bac805..5424f468c03afc003aa5473897d8b367bf8c0f88 100644 (file)
@@ -1559,7 +1559,7 @@ spellsortmenu()
     int i, n, choice;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
     any = cg.zeroany; /* zero out all bits */
 
     for (i = 0; i < SIZE(spl_sortchoices); i++) {
@@ -1642,7 +1642,7 @@ int *spell_no;
     anything any;
 
     tmpwin = create_nhwindow(NHW_MENU);
-    start_menu(tmpwin);
+    start_menu(tmpwin, MENU_BEHAVE_STANDARD);
     any = cg.zeroany; /* zero out all bits */
 
     /*
index ecb597dfb9746b0d0ea6cbd67c4945ead6365c3f..7f330ccd92679242c50aa09a7c1f3e91494bc5d6 100644 (file)
@@ -608,7 +608,7 @@ dotelecmd()
         int i, tmode;
 
         win = create_nhwindow(NHW_MENU);
-        start_menu(win);
+        start_menu(win, MENU_BEHAVE_STANDARD);
         any = cg.zeroany;
         for (i = 0; i < SIZE(tports); ++i) {
             any.a_int = (int) tports[i].menulet;
index d55f8e4e9f380a037cf8bf63e218eb349440d5f0..4eb0dd6da79240ee3d810ba055199362e874d758 100644 (file)
@@ -1194,7 +1194,7 @@ enhance_weapon_skill()
         }
 
         win = create_nhwindow(NHW_MENU);
-        start_menu(win);
+        start_menu(win, MENU_BEHAVE_STANDARD);
 
         /* start with a legend if any entries will be annotated
            with "*" or "#" below */
index 1b26ccc67829cbb0fb50577caf475816382c1893..069f6d3df74929cd070fd47abd435ae16fd7d3e7 100644 (file)
@@ -66,7 +66,7 @@ static winid FDECL(dump_create_nhwindow, (int));
 static void FDECL(dump_clear_nhwindow, (winid));
 static void FDECL(dump_display_nhwindow, (winid, BOOLEAN_P));
 static void FDECL(dump_destroy_nhwindow, (winid));
-static void FDECL(dump_start_menu, (winid));
+static void FDECL(dump_start_menu, (winid, unsigned long));
 static void FDECL(dump_add_menu, (winid, int, const ANY_P *, CHAR_P,
                                       CHAR_P, int, const char *, unsigned int));
 static void FDECL(dump_end_menu, (winid, const char *));
@@ -536,6 +536,7 @@ static int NDECL(hup_int_ndecl);
 static void NDECL(hup_void_ndecl);
 static void FDECL(hup_void_fdecl_int, (int));
 static void FDECL(hup_void_fdecl_winid, (winid));
+static void FDECL(hup_void_fdecl_winid_ulong, (winid, unsigned long));
 static void FDECL(hup_void_fdecl_constchar_p, (const char *));
 
 static struct window_procs hup_procs = {
@@ -550,7 +551,7 @@ static struct window_procs hup_procs = {
     hup_create_nhwindow, hup_void_fdecl_winid,         /* clear_nhwindow */
     hup_display_nhwindow, hup_void_fdecl_winid,        /* destroy_nhwindow */
     hup_curs, hup_putstr, hup_putstr,                  /* putmixed */
-    hup_display_file, hup_void_fdecl_winid,            /* start_menu */
+    hup_display_file, hup_void_fdecl_winid_ulong,      /* start_menu */
     hup_add_menu, hup_end_menu, hup_select_menu, genl_message_menu,
     hup_void_ndecl,                                    /* update_inventory */
     hup_void_ndecl,                                    /* mark_synch */
@@ -857,6 +858,15 @@ winid window UNUSED;
     return;
 }
 
+/*ARGUSED*/
+static void
+hup_void_fdecl_winid_ulong(window, mbehavior)
+winid window UNUSED;
+unsigned long mbehavior UNUSED;
+{
+    return;
+}
+
 /*ARGUSED*/
 static void
 hup_void_fdecl_constchar_p(string)
@@ -1314,8 +1324,9 @@ winid win UNUSED;
 
 /*ARGUSED*/
 static void
-dump_start_menu(win)
+dump_start_menu(win, mbehavior)
 winid win UNUSED;
+unsigned long mbehavior;
 {
     return;
 }
index b6f21672af08d833abdd16a25fa54019498902bd..5045d1592c0b6f9ab84ec8d44f0df0a43f0fc96f 100644 (file)
@@ -767,7 +767,7 @@ amii_get_ext_cmd(void)
 #ifdef EXTMENU
     if (iflags.extmenu) {
         win = amii_create_nhwindow(NHW_MENU);
-        amii_start_menu(win);
+        amii_start_menu(win, MENU_BEHAVE_STANDARD);
         pline("#");
         amii_putstr(WIN_MESSAGE, -1, " ");
 
@@ -830,7 +830,7 @@ amii_get_ext_cmd(void)
             }
 
             win = amii_create_nhwindow(NHW_MENU);
-            amii_start_menu(win);
+            amii_start_menu(win, MENU_BEHAVE_STANDARD);
 
             for (i = 0; extcmdlist[i].ef_txt != NULL; ++i) {
                 id.a_char = extcmdlist[i].ef_txt[0];
@@ -1389,7 +1389,7 @@ amii_player_selection()
         } else {
             /* Prompt for a role */
             win = create_nhwindow(NHW_MENU);
-            start_menu(win);
+            start_menu(win, MENU_BEHAVE_STANDARD);
             any.a_void = 0; /* zero out all bits */
             for (i = 0; roles[i].name.m; i++) {
                 if (ok_role(i, flags.initrace, flags.initgend,
@@ -1480,7 +1480,7 @@ amii_player_selection()
             /* Permit the user to pick, if there is more than one */
             if (n > 1) {
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any.a_void = 0; /* zero out all bits */
                 for (i = 0; races[i].noun; i++)
                     if (ok_race(flags.initrole, i, flags.initgend,
@@ -1553,7 +1553,7 @@ amii_player_selection()
             /* Permit the user to pick, if there is more than one */
             if (n > 1) {
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any.a_void = 0; /* zero out all bits */
                 for (i = 0; i < ROLE_GENDERS; i++)
                     if (ok_gend(flags.initrole, flags.initrace, i,
@@ -1624,7 +1624,7 @@ amii_player_selection()
             /* Permit the user to pick, if there is more than one */
             if (n > 1) {
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any.a_void = 0; /* zero out all bits */
                 for (i = 0; i < ROLE_ALIGNS; i++)
                     if (ok_align(flags.initrole, flags.initrace,
index d1aebf1266acc1cc210174fa7349e94604d12d21..be07f8865bb8dd8f270f95eb1fa3641a363772ae 100644 (file)
@@ -4,7 +4,7 @@
 /* winami.c */
 void FDECL(amii_raw_print, (const char *));
 void FDECL(amii_raw_print_bold, (const char *));
-void FDECL(amii_start_menu, (winid ));
+void FDECL(amii_start_menu, (winid , unsigned long ));
 void FDECL(amii_add_menu, (winid  , char  , int  , const char *, unsigned int));
 void FDECL(amii_end_menu, (winid  , char  , const char * , const char *));
 char FDECL(amii_select_menu, (winid ));
index a4b0954dfc6087dfe98d0b56957e0d291df3548c..085294008089a900e387440e337c813d2b4851ea 100644 (file)
@@ -9,8 +9,10 @@
 
 /* Start building the text for a menu */
 void
-amii_start_menu(window)
+amii_start_menu(window, mbehavior)
 register winid window;
+unsigned long mbehavior UNUSED;
+
 {
     register int i;
     register struct amii_WinDesc *cw;
index bcb68132ff291ec1d5feea7551f02e0f006dfee9..dffa90f674f37694c67ed42b14533261aca601f4 100644 (file)
@@ -39,7 +39,7 @@ void amii_get_nh_event(void);
 void amii_getret(void);
 
 /* winmenu.c */
-void amii_start_menu(winid window);
+void amii_start_menu(winid window, unsigned long);
 void FDECL(amii_add_menu, (winid, int, const anything *, CHAR_P, CHAR_P, int,
                            const char *, unsigned int));
 void FDECL(amii_end_menu, (winid, const char *));
index 3a48d3279db0baecb772212167c84180b411acaa..291d81f70388aba84e0746d18bebb1464316932e 100644 (file)
@@ -1929,7 +1929,7 @@ mac_nh_poskey(int *a, int *b, int *c)
 }
 
 void
-mac_start_menu(winid win)
+mac_start_menu(winid win, unsigned long mbehavior)
 {
     HideWindow(theWindows[win].its_window);
     mac_clear_nhwindow(win);
index c82bf7624939be087cc36eee14dd3491a67df762..2c68979b636866361f59c0b2fb50807b294b7301 100644 (file)
@@ -1108,7 +1108,7 @@ ActivateCell(HWND hWnd, int cell)
             pSet = nhcmdset_default;
 
         wid = mswin_create_nhwindow(NHW_MENU);
-        mswin_start_menu(wid);
+        mswin_start_menu(wid, MENU_BEHAVE_STANDARD);
         for (i = 0; i < nhcmdset_count(pSet); i++) {
             any.a_void = nhcmdset_get(pSet, i);
             mswin_add_menu(wid, NO_GLYPH, &any, 'a' + i, 0, ATR_NONE,
index 5351a450dea4d3691340be3ae8a4d8ddfa86fb41..6955c080aac5afa5865bebd6605729ef2c806a61 100644 (file)
@@ -366,7 +366,7 @@ prompt_for_player_selection(void)
             /* tty_putstr(BASE_WINDOW, 0, "Choosing Character's Role"); */
             /* Prompt for a role */
             win = create_nhwindow(NHW_MENU);
-            start_menu(win);
+            start_menu(win, MENU_BEHAVE_STANDARD);
             any.a_void = 0; /* zero out all bits */
             for (i = 0; roles[i].name.m; i++) {
                 if (ok_role(i, flags.initrace, flags.initgend,
@@ -458,7 +458,7 @@ prompt_for_player_selection(void)
                 /* tty_clear_nhwindow(BASE_WINDOW); */
                 /* tty_putstr(BASE_WINDOW, 0, "Choosing Race"); */
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any.a_void = 0; /* zero out all bits */
                 for (i = 0; races[i].noun; i++)
                     if (ok_race(flags.initrole, i, flags.initgend,
@@ -532,7 +532,7 @@ prompt_for_player_selection(void)
                 /* tty_clear_nhwindow(BASE_WINDOW); */
                 /* tty_putstr(BASE_WINDOW, 0, "Choosing Gender"); */
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any.a_void = 0; /* zero out all bits */
                 for (i = 0; i < ROLE_GENDERS; i++)
                     if (ok_gend(flags.initrole, flags.initrace, i,
@@ -605,7 +605,7 @@ prompt_for_player_selection(void)
                 /* tty_clear_nhwindow(BASE_WINDOW); */
                 /* tty_putstr(BASE_WINDOW, 0, "Choosing Alignment"); */
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any.a_void = 0; /* zero out all bits */
                 for (i = 0; i < ROLE_ALIGNS; i++)
                     if (ok_align(flags.initrole, flags.initrace,
@@ -1005,9 +1005,9 @@ mswin_display_file(const char *filename, BOOLEAN_P must_exist)
    be used for menus.
 */
 void
-mswin_start_menu(winid wid)
+mswin_start_menu(winid wid, unsigned long mbehavior)
 {
-    logDebug("mswin_start_menu(%d)\n", wid);
+    logDebug("mswin_start_menu(%d, %lu)\n", wid, mbehavior);
     if ((wid >= 0) && (wid < MAXWINDOWS)) {
         if (GetNHApp()->windowlist[wid].win == NULL
             && GetNHApp()->windowlist[wid].type == NHW_MENU) {
index c0c1d03c4e9f18766992a234d70b57473c5ceee3..3ee5622df9094baf25c290d625284ef56a5362b2 100644 (file)
@@ -128,7 +128,7 @@ void mswin_curs(winid wid, int x, int y);
 void mswin_putstr(winid wid, int attr, const char *text);
 void mswin_putstr_ex(winid wid, int attr, const char *text, boolean append);
 void mswin_display_file(const char *filename, BOOLEAN_P must_exist);
-void mswin_start_menu(winid wid);
+void mswin_start_menu(winid wid, unsigned long);
 void mswin_add_menu(winid wid, int glyph, const ANY_P *identifier,
                     CHAR_P accelerator, CHAR_P group_accel, int attr,
                     const char *str, unsigned int itemflags);
index 81ffacc82638ea6edef6914320846a418135ed41..cb875f1156aca4530b49df9cd9475405512b6b7e 100644 (file)
@@ -368,7 +368,7 @@ void NetHackQtBind::qt_display_file(const char *filename, BOOLEAN_P must_exist)
     }
 }
 
-void NetHackQtBind::qt_start_menu(winid wid)
+void NetHackQtBind::qt_start_menu(winid wid, unsigned long mbehavior)
 {
     NetHackQtWindow* window=id_to_window[(int)wid];
     window->StartMenu();
index 7d9c32c1d2c8baa3faf43e01a90e7d519a51348f..e7dacf1c37ed1ddb5710edd33482500d33924ba5 100644 (file)
@@ -51,7 +51,7 @@ public:
        static void qt_putstr(winid wid, int attr, const std::string& text);
        static void qt_putstr(winid wid, int attr, const QString& text);
        static void qt_display_file(const char *filename, BOOLEAN_P must_exist);
-       static void qt_start_menu(winid wid);
+       static void qt_start_menu(winid wid, unsigned long mbehavior);
        static void qt_add_menu(winid wid, int glyph,
                const ANY_P * identifier, CHAR_P ch, CHAR_P gch, int attr,
                const char *str, unsigned int itemflags);
index fdde1daf2dc588f401821a0acfb7eb533ba41ee5..f48c0d2110fabd15a71d1cd0c39a27d9ca586646 100644 (file)
@@ -4811,7 +4811,7 @@ void NetHackQtBind::qt_display_file(const char *filename, BOOLEAN_P must_exist)
     }
 }
 
-void NetHackQtBind::qt_start_menu(winid wid)
+void NetHackQtBind::qt_start_menu(winid wid, unsigned long mbehavior)
 {
     NetHackQtWindow* window=id_to_window[wid];
     window->StartMenu();
index e9b6dbef0f21a01a36bae066862da8ac42471ef1..522f57d6990a26eef8b4fca51e182bfdf8c34950 100644 (file)
@@ -851,7 +851,7 @@ class NetHackQtBind : NetHackQtBindBase
     static void qt_curs(winid wid, int x, int y);
     static void qt_putstr(winid wid, int attr, const char *text);
     static void qt_display_file(const char *filename, BOOLEAN_P must_exist);
-    static void qt_start_menu(winid wid);
+    static void qt_start_menu(winid wid, unsigned long mbehavior);
     static void qt_add_menu(winid wid, int glyph, const ANY_P *identifier,
                             CHAR_P ch, CHAR_P gch, int attr, const char *str,
                             unsigned itemflags);
index f6e5375415498a7d820fac499ad866fa2c219592..7f8acc5824fe000bac997074da3615026e9e681b 100644 (file)
@@ -1957,7 +1957,7 @@ boolean complain;
 
     newwin = X11_create_nhwindow(NHW_MENU);
     wp = &window_list[newwin];
-    X11_start_menu(newwin);
+    X11_start_menu(newwin, MENU_BEHAVE_STANDARD);
 
     any = cg.zeroany;
     while (dlb_fgets(line, LLEN, fp)) {
index 9d0e8a4a720c2a3ea8391f836531214fe275449f..9d09867ad1874e55e34ba4dae5bad6c24c3ecc42 100644 (file)
@@ -612,8 +612,9 @@ struct xwindow *wp;
 /* Global functions ======================================================= */
 
 void
-X11_start_menu(window)
+X11_start_menu(window, mbehavior)
 winid window;
+unsigned long mbehavior UNUSED;
 {
     struct xwindow *wp;
     check_winid(window);
@@ -763,7 +764,7 @@ menu_item **menu_list;
         winid newwin = X11_create_nhwindow(NHW_MENU);
         struct xwindow *nwp = &window_list[newwin];
 
-        X11_start_menu(newwin);
+        X11_start_menu(newwin, MENU_BEHAVE_STANDARD);
         move_menu(&menu_info->new_menu, &nwp->menu_information->new_menu);
         for (curr = nwp->menu_information->new_menu.base; curr;
              curr = curr->next)
index 92347114aa65a905ef3ffbcb611076561b4f1284..03c2e81420fe8dce678358be4b4af59561083583 100644 (file)
@@ -175,10 +175,11 @@ boolean complain;
 }
 
 void
-chainin_start_menu(window)
+chainin_start_menu(window, mbehavior)
 winid window;
+unsigned long mbehavior;
 {
-    (*cibase->nprocs->win_start_menu)(cibase->ndata, window);
+    (*cibase->nprocs->win_start_menu)(cibase->ndata, window, mbehavior);
 }
 
 void
index 8ada327f715cd8b27aed130bf68d0438c39f4220..08c2992fa1c0b3bf997aede57e7ba7e08e395867 100644 (file)
@@ -213,13 +213,14 @@ boolean complain;
 }
 
 void
-chainout_start_menu(vp, window)
+chainout_start_menu(vp, window, mbehavior)
 void *vp;
 winid window;
+unsigned long mbehavior;
 {
     struct chainout_data *tdp = vp;
 
-    (*tdp->nprocs->win_start_menu)(window);
+    (*tdp->nprocs->win_start_menu)(window, mbehavior);
 }
 
 void
index acde19d2fad3de13b9624e06d60d745a6557be3e..8af083a4022c16e1e841c2fa597980ebdc745185 100644 (file)
@@ -356,16 +356,18 @@ boolean complain;
 }
 
 void
-trace_start_menu(vp, window)
+trace_start_menu(vp, window, mbehavior)
 void *vp;
 winid window;
+unsigned long mbehavior;
 {
     struct trace_data *tdp = vp;
 
-    fprintf(wc_tracelogf, "%sstart_menu(%d)\n", INDENT, window);
+    fprintf(wc_tracelogf, "%sstart_menu(%d, %lu)\n", INDENT,
+            window, mbehavior);
 
     PRE;
-    (*tdp->nprocs->win_start_menu)(tdp->ndata, window);
+    (*tdp->nprocs->win_start_menu)(tdp->ndata, window, mbehavior);
     POST;
 }
 
index 2c8840ba23f78f0866b5b362e45f2a700d192ec8..d6a103f889f3c790bcbc287175a9d974853c7967 100644 (file)
@@ -732,7 +732,7 @@ curses_character_dialog(const char **choices, const char *prompt)
     winid wid = curses_get_wid(NHW_MENU);
 
     identifier.a_void = 0;
-    curses_start_menu(wid);
+    curses_start_menu(wid, MENU_BEHAVE_STANDARD);
 
     for (count = 0; choices[count]; count++) {
         curletter = tolower(choices[count][0]);
index 8275468708d1bf2f865246fac3cb008b5cf712c6..24f0b3f4cb6a37e7bb0cce65a1946f2f0e2215d3 100644 (file)
@@ -328,7 +328,7 @@ curses_create_nhwindow(int type)
     winid wid = curses_get_wid(type);
 
     if (curses_is_menu(wid) || curses_is_text(wid)) {
-        curses_start_menu(wid);
+        curses_start_menu(wid, MENU_BEHAVE_STANDARD);
         curses_add_wid(wid);
     }
 
@@ -480,7 +480,7 @@ curses_display_file(const char *filename, BOOLEAN_P must_exist)
    be used for menus.
 */
 void
-curses_start_menu(winid wid)
+curses_start_menu(winid wid, unsigned long mbehavior)
 {
     if (inv_update)
         return;
index 7eecde4011720d21886be5004e0d3a8e2beb7e43..f12012c05f5f97a381bb36918c8cd408f1d51a86 100644 (file)
@@ -241,7 +241,7 @@ Gem_player_selection()
         } else {
             /* Prompt for a role */
             win = create_nhwindow(NHW_MENU);
-            start_menu(win);
+            start_menu(win, MENU_BEHAVE_STANDARD);
             any.a_void = 0; /* zero out all bits */
             for (i = 0; roles[i].name.m; i++) {
                 if (ok_role(i, flags.initrace, flags.initgend,
@@ -313,7 +313,7 @@ Gem_player_selection()
             /* Permit the user to pick, if there is more than one */
             if (n > 1) {
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any.a_void = 0; /* zero out all bits */
                 for (i = 0; races[i].noun; i++)
                     if (ok_race(flags.initrole, i, flags.initgend,
@@ -382,7 +382,7 @@ Gem_player_selection()
             /* Permit the user to pick, if there is more than one */
             if (n > 1) {
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any.a_void = 0; /* zero out all bits */
                 for (i = 0; i < ROLE_GENDERS; i++)
                     if (ok_gend(flags.initrole, flags.initrace, i,
@@ -451,7 +451,7 @@ Gem_player_selection()
             /* Permit the user to pick, if there is more than one */
             if (n > 1) {
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any.a_void = 0; /* zero out all bits */
                 for (i = 0; i < ROLE_ALIGNS; i++)
                     if (ok_align(flags.initrole, flags.initrace,
@@ -1002,7 +1002,7 @@ Gem_get_ext_cmd()
     const char *ptr;
 
     wind = Gem_create_nhwindow(NHW_MENU);
-    Gem_start_menu(wind);
+    Gem_start_menu(wind, MENU_BEHAVE_STANDARD);
     for (i = 0; (ptr = extcmdlist[i].ef_txt); i++) {
         any.a_int = i;
         accelerator = *ptr;
index ecf979a1d19592ee65fad9b31098d5fe17d0c129..b7ebe67cafe1dcb023db694d1f3ed1231c65346b 100644 (file)
@@ -1424,8 +1424,9 @@ mar_more()
 
 /************************* Gem_start_menu *******************************/
 void
-Gem_start_menu(win)
+Gem_start_menu(win, mbehavior)
 winid win;
+unsigned long mbehavior UNUSED;
 {
     win = win;
     if (invent_list) {
@@ -2551,7 +2552,7 @@ winid window;
         use_rip = FALSE;
         break;
     case NHW_MENU:
-        Gem_start_menu(window); /* delete invent_list */
+        Gem_start_menu(window, MENU_BEHAVE_STANDARD); /* delete invent_list */
         test_free(Menu_title);
         break;
     case 0: /* No window available, probably an error message? */
index 2c2182301068ab864b43d91ab0f516aa4b396465..872576bf06420095bf3009bcefae61bfc37c363a 100644 (file)
@@ -663,7 +663,7 @@ gnome_display_file(const char *filename, BOOLEAN_P must_exist)
    be used for menus.
 */
 void
-gnome_start_menu(winid wid)
+gnome_start_menu(winid wid, unsigned long mbehavior)
 {
     if (wid != -1) {
         if (gnome_windowlist[wid].win == NULL
index a4e6b91395557f32e6c7be1de8c3b136c371c118..b0f56e0358019f14d7e3f37940825ec8da3d1565 100644 (file)
@@ -53,7 +53,7 @@ void gnome_destroy_nhwindow(winid wid);
 void gnome_curs(winid wid, int x, int y);
 void gnome_putstr(winid wid, int attr, const char *text);
 void gnome_display_file(const char *filename, BOOLEAN_P must_exist);
-void gnome_start_menu(winid wid);
+void gnome_start_menu(winid wid, unsigned long mbehavior);
 void gnome_add_menu(winid wid, int glyph, const ANY_P *identifier,
                     CHAR_P accelerator, CHAR_P group_accel, int attr,
                     const char *str, BOOLEAN_P presel);
index d506600c2120e55f0ff004a63a27f66ed064eea8..c4e6e7016e15910dc3d4e6c860a816fa8193c2d3 100644 (file)
@@ -226,8 +226,9 @@ boolean complain;
 }
 
 void
-safe_start_menu(window)
+safe_start_menu(window, mbehavior)
 winid window;
+unsigned long mbehavior;
 {
     return;
 }
index 11e2a5b241bd6e2394527052edbee18d53a74cee..77555db522eb6fc0c3d6a3e2ebe32e2383bc510d 100644 (file)
@@ -569,7 +569,7 @@ tty_player_selection()
                     tty_clear_nhwindow(BASE_WINDOW);
                     role_selection_prolog(RS_ROLE, BASE_WINDOW);
                     win = create_nhwindow(NHW_MENU);
-                    start_menu(win);
+                    start_menu(win, MENU_BEHAVE_STANDARD);
                     /* populate the menu with role choices */
                     setup_rolemenu(win, TRUE, RACE, GEND, ALGN);
                     /* add miscellaneous menu entries */
@@ -666,7 +666,7 @@ tty_player_selection()
                         tty_clear_nhwindow(BASE_WINDOW);
                         role_selection_prolog(RS_RACE, BASE_WINDOW);
                         win = create_nhwindow(NHW_MENU);
-                        start_menu(win);
+                        start_menu(win, MENU_BEHAVE_STANDARD);
                         any = cg.zeroany; /* zero out all bits */
                         /* populate the menu with role choices */
                         setup_racemenu(win, TRUE, ROLE, GEND, ALGN);
@@ -758,7 +758,7 @@ tty_player_selection()
                         tty_clear_nhwindow(BASE_WINDOW);
                         role_selection_prolog(RS_GENDER, BASE_WINDOW);
                         win = create_nhwindow(NHW_MENU);
-                        start_menu(win);
+                        start_menu(win, MENU_BEHAVE_STANDARD);
                         any = cg.zeroany; /* zero out all bits */
                         /* populate the menu with gender choices */
                         setup_gendmenu(win, TRUE, ROLE, RACE, ALGN);
@@ -848,7 +848,7 @@ tty_player_selection()
                         tty_clear_nhwindow(BASE_WINDOW);
                         role_selection_prolog(RS_ALGNMNT, BASE_WINDOW);
                         win = create_nhwindow(NHW_MENU);
-                        start_menu(win);
+                        start_menu(win, MENU_BEHAVE_STANDARD);
                         any = cg.zeroany; /* zero out all bits */
                         setup_algnmenu(win, TRUE, ROLE, RACE, GEND);
                         role_menu_extra(ROLE_RANDOM, win, TRUE);
@@ -927,7 +927,7 @@ tty_player_selection()
         tty_clear_nhwindow(BASE_WINDOW);
         role_selection_prolog(ROLE_NONE, BASE_WINDOW);
         win = create_nhwindow(NHW_MENU);
-        start_menu(win);
+        start_menu(win, MENU_BEHAVE_STANDARD);
         any = cg.zeroany; /* zero out all bits */
         any.a_int = 0;
         if (!roles[ROLE].name.f
@@ -1030,7 +1030,7 @@ reset_role_filtering()
     menu_item *selected = 0;
 
     win = create_nhwindow(NHW_MENU);
-    start_menu(win);
+    start_menu(win, MENU_BEHAVE_STANDARD);
     any = cg.zeroany;
 
     /* no extra blank line preceding this entry; end_menu supplies one */
@@ -1456,6 +1456,7 @@ int type;
     newwin->mlist = (tty_menu_item *) 0;
     newwin->plist = (tty_menu_item **) 0;
     newwin->npages = newwin->plist_size = newwin->nitems = newwin->how = 0;
+    newwin->mbehavior = 0U;
     switch (type) {
     case NHW_BASE:
         /* base window, used for absolute movement on the screen */
@@ -2907,9 +2908,11 @@ boolean complain;
 }
 
 void
-tty_start_menu(window)
+tty_start_menu(window, mbehavior)
 winid window;
+unsigned long mbehavior;
 {
+    wins[window]->mbehavior = mbehavior;
     tty_clear_nhwindow(window);
     return;
 }
index 65225f7b29bcd9b2ce157d78f21c733830da1387..b50612f2ceaeb2ffbdeb551966a6f2a67842b26b 100644 (file)
@@ -405,7 +405,7 @@ prompt_for_player_selection(void)
             /* tty_putstr(BASE_WINDOW, 0, "Choosing Character's Role"); */
             /* Prompt for a role */
             win = create_nhwindow(NHW_MENU);
-            start_menu(win);
+            start_menu(win, MENU_BEHAVE_STANDARD);
             any = cg.zeroany; /* zero out all bits */
             for (i = 0; roles[i].name.m; i++) {
                 if (ok_role(i, flags.initrace, flags.initgend,
@@ -497,7 +497,7 @@ prompt_for_player_selection(void)
                 /* tty_clear_nhwindow(BASE_WINDOW); */
                 /* tty_putstr(BASE_WINDOW, 0, "Choosing Race"); */
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any = cg.zeroany; /* zero out all bits */
                 for (i = 0; races[i].noun; i++)
                     if (ok_race(flags.initrole, i, flags.initgend,
@@ -571,7 +571,7 @@ prompt_for_player_selection(void)
                 /* tty_clear_nhwindow(BASE_WINDOW); */
                 /* tty_putstr(BASE_WINDOW, 0, "Choosing Gender"); */
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any = cg.zeroany; /* zero out all bits */
                 for (i = 0; i < ROLE_GENDERS; i++)
                     if (ok_gend(flags.initrole, flags.initrace, i,
@@ -644,7 +644,7 @@ prompt_for_player_selection(void)
                 /* tty_clear_nhwindow(BASE_WINDOW); */
                 /* tty_putstr(BASE_WINDOW, 0, "Choosing Alignment"); */
                 win = create_nhwindow(NHW_MENU);
-                start_menu(win);
+                start_menu(win, MENU_BEHAVE_STANDARD);
                 any = cg.zeroany; /* zero out all bits */
                 for (i = 0; i < ROLE_ALIGNS; i++)
                     if (ok_align(flags.initrole, flags.initrace,
@@ -1074,9 +1074,9 @@ mswin_display_file(const char *filename, BOOLEAN_P must_exist)
    be used for menus.
 */
 void
-mswin_start_menu(winid wid)
+mswin_start_menu(winid wid, unsigned long mbehavior)
 {
-    logDebug("mswin_start_menu(%d)\n", wid);
+    logDebug("mswin_start_menu(%d, %lu)\n", wid, mbehavior);
     if ((wid >= 0) && (wid < MAXWINDOWS)) {
         if (GetNHApp()->windowlist[wid].win == NULL
             && GetNHApp()->windowlist[wid].type == NHW_MENU) {
index 2870936762feb35dd3acf18c1fa1af3f4922b991..0e5b82097ceafcaabb83e3142572caf3ef02e432 100644 (file)
@@ -152,7 +152,7 @@ void mswin_curs(winid wid, int x, int y);
 void mswin_putstr(winid wid, int attr, const char *text);
 void mswin_putstr_ex(winid wid, int attr, const char *text, int);
 void mswin_display_file(const char *filename, BOOLEAN_P must_exist);
-void mswin_start_menu(winid wid);
+void mswin_start_menu(winid wid, unsigned long mbehavior);
 void mswin_add_menu(winid wid, int glyph, const ANY_P *identifier,
                     CHAR_P accelerator, CHAR_P group_accel, int attr,
                     const char *str, unsigned int itemflags);