From: nhmall Date: Fri, 21 Feb 2020 01:12:51 +0000 (-0500) Subject: window port interface change - add mbehavior flags to start_menu() X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d81c096ce6aa4e9746f0a20cc794b113d4bed241;p=nethack window port interface change - add mbehavior flags to start_menu() 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. --- diff --git a/doc/window.doc b/doc/window.doc index 8789783cb..a2ddc4a90 100644 --- a/doc/window.doc +++ b/doc/window.doc @@ -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) diff --git a/include/macwin.h b/include/macwin.h index 3e33c847f..b1ea4a2f1 100644 --- a/include/macwin.h +++ b/include/macwin.h @@ -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 *)); diff --git a/include/trampoli.h b/include/trampoli.h index 865da44c1..f6c8cec5a 100644 --- a/include/trampoli.h +++ b/include/trampoli.h @@ -263,7 +263,7 @@ #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) diff --git a/include/winX.h b/include/winX.h index 5681f61a5..56aafedd1 100644 --- a/include/winX.h +++ b/include/winX.h @@ -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 *)); diff --git a/include/wincurs.h b/include/wincurs.h index bc670975e..6ba6f2925 100644 --- a/include/wincurs.h +++ b/include/wincurs.h @@ -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); diff --git a/include/wingem.h b/include/wingem.h index 376b732d9..8d1edf2be 100644 --- a/include/wingem.h +++ b/include/wingem.h @@ -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 *)); diff --git a/include/winprocs.h b/include/winprocs.h index 8c266e4ff..d252630dd 100644 --- a/include/winprocs.h +++ b/include/winprocs.h @@ -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 *)); diff --git a/include/wintty.h b/include/wintty.h index 3cf4cb77c..1bc2e7e64 100644 --- a/include/wintty.h +++ b/include/wintty.h @@ -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 *)); diff --git a/include/wintype.h b/include/wintype.h index 217b314a5..d85485aeb 100644 --- a/include/wintype.h +++ b/include/wintype.h @@ -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 */ diff --git a/src/allmain.c b/src/allmain.c index 97ce7c11d..073054cbc 100644 --- a/src/allmain.c +++ b/src/allmain.c @@ -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 diff --git a/src/apply.c b/src/apply.c index 09414ecaf..c4c13d71f 100644 --- a/src/apply.c +++ b/src/apply.c @@ -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, diff --git a/src/artifact.c b/src/artifact.c index 75998ec88..7771a6102 100644 --- a/src/artifact.c +++ b/src/artifact.c @@ -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) diff --git a/src/botl.c b/src/botl.c index 5aedb928d..d52b18453 100644 --- a/src/botl.c +++ b/src/botl.c @@ -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); diff --git a/src/cmd.c b/src/cmd.c index 91a93a452..e4de504e9 100644 --- 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", diff --git a/src/do_name.c b/src/do_name.c index 791a74fde..7e01e5878 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -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, diff --git a/src/dungeon.c b/src/dungeon.c index 59473d6c3..94712d465 100644 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -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'; } diff --git a/src/insight.c b/src/insight.c index 60c8cb25f..a688c97ee 100644 --- a/src/insight.c +++ b/src/insight.c @@ -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 */ diff --git a/src/invent.c b/src/invent.c index 3c0347ad9..9f3b5137d 100644 --- a/src/invent.c +++ b/src/invent.c @@ -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); diff --git a/src/nhlua.c b/src/nhlua.c index 68c09dfd3..54fd25ab5 100644 --- a/src/nhlua.c +++ b/src/nhlua.c @@ -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) { diff --git a/src/o_init.c b/src/o_init.c index 3c15a0e71..b6b27ca91 100644 --- a/src/o_init.c +++ b/src/o_init.c @@ -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 diff --git a/src/options.c b/src/options.c index 13ece0927..3ede3def4 100644 --- a/src/options.c +++ b/src/options.c @@ -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; diff --git a/src/pager.c b/src/pager.c index 2607bb9e0..f4b904443 100644 --- a/src/pager.c +++ b/src/pager.c @@ -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) diff --git a/src/pickup.c b/src/pickup.c index e86ec2d77..f3a674de3 100644 --- a/src/pickup.c +++ b/src/pickup.c @@ -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) diff --git a/src/restore.c b/src/restore.c index 3c9d85bcc..deabf002f 100644 --- a/src/restore.c +++ b/src/restore.c @@ -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 */ diff --git a/src/spell.c b/src/spell.c index d100789cc..5424f468c 100644 --- a/src/spell.c +++ b/src/spell.c @@ -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 */ /* diff --git a/src/teleport.c b/src/teleport.c index ecb597dfb..7f330ccd9 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -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; diff --git a/src/weapon.c b/src/weapon.c index d55f8e4e9..4eb0dd6da 100644 --- a/src/weapon.c +++ b/src/weapon.c @@ -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 */ diff --git a/src/windows.c b/src/windows.c index 1b26ccc67..069f6d3df 100644 --- a/src/windows.c +++ b/src/windows.c @@ -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; } diff --git a/sys/amiga/winami.c b/sys/amiga/winami.c index b6f21672a..5045d1592 100644 --- a/sys/amiga/winami.c +++ b/sys/amiga/winami.c @@ -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, diff --git a/sys/amiga/winami.p b/sys/amiga/winami.p index d1aebf126..be07f8865 100644 --- a/sys/amiga/winami.p +++ b/sys/amiga/winami.p @@ -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 )); diff --git a/sys/amiga/winmenu.c b/sys/amiga/winmenu.c index a4b0954df..085294008 100644 --- a/sys/amiga/winmenu.c +++ b/sys/amiga/winmenu.c @@ -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; diff --git a/sys/amiga/winproto.h b/sys/amiga/winproto.h index bcb68132f..dffa90f67 100644 --- a/sys/amiga/winproto.h +++ b/sys/amiga/winproto.h @@ -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 *)); diff --git a/sys/mac/macwin.c b/sys/mac/macwin.c index 3a48d3279..291d81f70 100644 --- a/sys/mac/macwin.c +++ b/sys/mac/macwin.c @@ -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); diff --git a/sys/wince/mhcmd.c b/sys/wince/mhcmd.c index c82bf7624..2c68979b6 100644 --- a/sys/wince/mhcmd.c +++ b/sys/wince/mhcmd.c @@ -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, diff --git a/sys/wince/mswproc.c b/sys/wince/mswproc.c index 5351a450d..6955c080a 100644 --- a/sys/wince/mswproc.c +++ b/sys/wince/mswproc.c @@ -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) { diff --git a/sys/wince/winMS.h b/sys/wince/winMS.h index c0c1d03c4..3ee5622df 100644 --- a/sys/wince/winMS.h +++ b/sys/wince/winMS.h @@ -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); diff --git a/win/Qt/qt_bind.cpp b/win/Qt/qt_bind.cpp index 81ffacc82..cb875f115 100644 --- a/win/Qt/qt_bind.cpp +++ b/win/Qt/qt_bind.cpp @@ -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(); diff --git a/win/Qt/qt_bind.h b/win/Qt/qt_bind.h index 7d9c32c1d..e7dacf1c3 100644 --- a/win/Qt/qt_bind.h +++ b/win/Qt/qt_bind.h @@ -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); diff --git a/win/Qt3/qt3_win.cpp b/win/Qt3/qt3_win.cpp index fdde1daf2..f48c0d211 100644 --- a/win/Qt3/qt3_win.cpp +++ b/win/Qt3/qt3_win.cpp @@ -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(); diff --git a/win/Qt3/qt3_win.h b/win/Qt3/qt3_win.h index e9b6dbef0..522f57d69 100644 --- a/win/Qt3/qt3_win.h +++ b/win/Qt3/qt3_win.h @@ -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); diff --git a/win/X11/winX.c b/win/X11/winX.c index f6e537541..7f8acc582 100644 --- a/win/X11/winX.c +++ b/win/X11/winX.c @@ -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)) { diff --git a/win/X11/winmenu.c b/win/X11/winmenu.c index 9d0e8a4a7..9d09867ad 100644 --- a/win/X11/winmenu.c +++ b/win/X11/winmenu.c @@ -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) diff --git a/win/chain/wc_chainin.c b/win/chain/wc_chainin.c index 92347114a..03c2e8142 100644 --- a/win/chain/wc_chainin.c +++ b/win/chain/wc_chainin.c @@ -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 diff --git a/win/chain/wc_chainout.c b/win/chain/wc_chainout.c index 8ada327f7..08c2992fa 100644 --- a/win/chain/wc_chainout.c +++ b/win/chain/wc_chainout.c @@ -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 diff --git a/win/chain/wc_trace.c b/win/chain/wc_trace.c index acde19d2f..8af083a40 100644 --- a/win/chain/wc_trace.c +++ b/win/chain/wc_trace.c @@ -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; } diff --git a/win/curses/cursinit.c b/win/curses/cursinit.c index 2c8840ba2..d6a103f88 100644 --- a/win/curses/cursinit.c +++ b/win/curses/cursinit.c @@ -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]); diff --git a/win/curses/cursmain.c b/win/curses/cursmain.c index 827546870..24f0b3f4c 100644 --- a/win/curses/cursmain.c +++ b/win/curses/cursmain.c @@ -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; diff --git a/win/gem/wingem.c b/win/gem/wingem.c index 7eecde401..f12012c05 100644 --- a/win/gem/wingem.c +++ b/win/gem/wingem.c @@ -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; diff --git a/win/gem/wingem1.c b/win/gem/wingem1.c index ecf979a1d..b7ebe67ca 100644 --- a/win/gem/wingem1.c +++ b/win/gem/wingem1.c @@ -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? */ diff --git a/win/gnome/gnbind.c b/win/gnome/gnbind.c index 2c2182301..872576bf0 100644 --- a/win/gnome/gnbind.c +++ b/win/gnome/gnbind.c @@ -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 diff --git a/win/gnome/gnbind.h b/win/gnome/gnbind.h index a4e6b9139..b0f56e035 100644 --- a/win/gnome/gnbind.h +++ b/win/gnome/gnbind.h @@ -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); diff --git a/win/share/safeproc.c b/win/share/safeproc.c index d506600c2..c4e6e7016 100644 --- a/win/share/safeproc.c +++ b/win/share/safeproc.c @@ -226,8 +226,9 @@ boolean complain; } void -safe_start_menu(window) +safe_start_menu(window, mbehavior) winid window; +unsigned long mbehavior; { return; } diff --git a/win/tty/wintty.c b/win/tty/wintty.c index 11e2a5b24..77555db52 100644 --- a/win/tty/wintty.c +++ b/win/tty/wintty.c @@ -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; } diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index 65225f7b2..b50612f2c 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -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) { diff --git a/win/win32/winMS.h b/win/win32/winMS.h index 287093676..0e5b82097 100644 --- a/win/win32/winMS.h +++ b/win/win32/winMS.h @@ -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);