| 6008 | } |
| 6009 | |
| 6010 | staticfn int |
| 6011 | handler_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; |
no test coverage detected