MCPcopy Create free account
hub / github.com/NetHack/NetHack / handler_perminv_mode

Function handler_perminv_mode

src/options.c:6010–6083  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6008}
6009
6010staticfn int
6011handler_perminv_mode(void)
6012{
6013 winid tmpwin;
6014 anything any;
6015 char let, buf[BUFSZ], sepbuf[10];
6016 const char *pi0, *pi1;
6017 menu_item *pi_pick = (menu_item *) 0;
6018 boolean old_perm_invent = iflags.perm_invent;
6019 int i, n, old_pi = (int) iflags.perminv_mode, new_pi = old_pi,
6020 widest = !WINDOWPORT(tty) ? 8 : 11; /* "in-use__" or "full+grid__" */
6021
6022 tmpwin = create_nhwindow(NHW_MENU);
6023 start_menu(tmpwin, MENU_BEHAVE_STANDARD);
6024 any = cg.zeroany;
6025 for (i = 0; i < SIZE(perminv_modes); ++i) {
6026 if (!(pi0 = perminv_modes[i][0]))
6027 continue;
6028#ifdef TTY_PERM_INVENT
6029 if (strstri(pi0, "+grid") != 0 && !WINDOWPORT(tty))
6030 continue;
6031#endif
6032 pi1 = perminv_modes[i][1];
6033 if (!iflags.menu_tab_sep) {
6034 int numspaces = widest - (int) strlen(pi0);
6035
6036 Sprintf(sepbuf, "%*s", max(numspaces, 1), " ");
6037 } else {
6038 Strcpy(sepbuf, "\t");
6039 }
6040 Sprintf(buf, "%s%s%s", pi0, sepbuf, perminv_modes[i][2]);
6041 let = ((i & (int) InvSparse) != 0) ? highc(pi1[0]) : pi0[0];
6042 any.a_int = i + 1;
6043 add_menu(tmpwin, &nul_glyphinfo, &any, let, '0' + i,
6044 ATR_NONE, NO_COLOR,
6045 buf, (i == old_pi) ? MENU_ITEMFLAGS_SELECTED
6046 : MENU_ITEMFLAGS_NONE);
6047 }
6048 end_menu(tmpwin, "Choose permanent inventory mode:");
6049 n = select_menu(tmpwin, PICK_ONE, &pi_pick);
6050 destroy_nhwindow(tmpwin);
6051 if (n > 0) {
6052 new_pi = pi_pick[0].item.a_int - 1;
6053 if (n > 1 && new_pi == old_pi)
6054 new_pi = pi_pick[1].item.a_int - 1;
6055 free((genericptr_t) pi_pick);
6056 iflags.perminv_mode = new_pi;
6057 }
6058 if (n >= 0) { /* not ESC */
6059 buf[0] = '\0';
6060 (void) optfn_perminv_mode(opt_perm_invent, get_val, FALSE, buf, NULL);
6061 pline("'perminv_mode' %s '%s' (%s).",
6062 (new_pi != old_pi) ? "changed to" : "is still",
6063 perminv_modes[new_pi][0], buf);
6064 if (new_pi != InvOptNone && !old_perm_invent)
6065 iflags.perm_invent = can_set_perm_invent();
6066 else if (new_pi == InvOptNone && old_perm_invent)
6067 iflags.perm_invent = FALSE;

Callers 1

optfn_perminv_modeFunction · 0.85

Calls 8

strstriFunction · 0.85
highcFunction · 0.85
add_menuFunction · 0.85
select_menuFunction · 0.85
optfn_perminv_modeFunction · 0.85
can_set_perm_inventFunction · 0.85
perm_invent_toggledFunction · 0.85
plineFunction · 0.70

Tested by

no test coverage detected