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.
This commit is contained in:
nhmall
2020-02-20 20:12:51 -05:00
parent 8e6e4922f8
commit d81c096ce6
55 changed files with 170 additions and 134 deletions

View 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();

View 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);

View 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();

View 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);

View 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)) {

View 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)

View 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

View 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

View 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;
}

View 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]);

View 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;

View 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;

View 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? */

View 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

View 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);

View File

@@ -226,8 +226,9 @@ boolean complain;
}
void
safe_start_menu(window)
safe_start_menu(window, mbehavior)
winid window;
unsigned long mbehavior;
{
return;
}

View 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;
}

View 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) {

View 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);