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

Function optfn_perminv_mode

src/options.c:3045–3135  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3043}
3044
3045staticfn int
3046optfn_perminv_mode(
3047 int optidx, int req, boolean negated,
3048 char *opts, char *op)
3049{
3050 boolean old_perm_invent = iflags.perm_invent;
3051 uchar old_perminv_mode = iflags.perminv_mode;
3052 int retval = optn_ok;
3053
3054 if (req == do_init) {
3055#if 0
3056 /* old, TEMPORARY method of controlling 'perm_invent';
3057 note: the bits used now have been changed, hence 'n << 1' */
3058 char *envtmp = nh_getenv("TTYINV") : 0;
3059 int invmode = envtmp ? (atoi(envtmp) << 1) : 0;
3060
3061 iflags.perminv_mode = (uchar) invmode;
3062 iflags.perm_invent = iflags.perminv_mode != 0;
3063#endif
3064 return optn_ok;
3065 } else if (req == do_set) {
3066 op = string_for_opt(opts, negated);
3067 if (op != empty_optstr && negated) { /* reject "!perminv_mode=foo" */
3068 bad_negation(allopt[optidx].name, TRUE);
3069 retval = optn_silenterr;
3070 } else if (op != empty_optstr) { /* "perminv_mode=foo" */
3071 const char *pi0, *pi1;
3072 int i;
3073 unsigned ln = (unsigned) strlen(op); /* guaranteed > 0 */
3074
3075 for (i = 0; i < SIZE(perminv_modes); ++i) {
3076 if (!(pi0 = perminv_modes[i][0]))
3077 continue;
3078 pi1 = perminv_modes[i][1];
3079 if (!strncmpi(op, pi0, ln) || !strncmpi(op, pi1, ln)
3080 || op[0] == i + '0') { /* also accept '0'..'8' */
3081#if 1 /*#ifdef TTY_PERM_INVENT*/
3082 if (strstri(pi0, "+grid") && !WINDOWPORT(tty)) {
3083 i &= ~InvSparse;
3084 config_error_add(
3085 "%s: unavailable perm_invent mode '%s', using '%s'",
3086 allopt[optidx].name, pi0,
3087 perminv_modes[i][0]);
3088 }
3089#endif
3090 iflags.perminv_mode = (uchar) i;
3091 iflags.perm_invent = TRUE;
3092 break;
3093 }
3094 }
3095 if (i == SIZE(perminv_modes)) {
3096 config_error_add("Unknown %s parameter '%s'",
3097 allopt[optidx].name, op);
3098 iflags.perminv_mode = InvOptNone;
3099 iflags.perm_invent = FALSE;
3100 retval = optn_silenterr;
3101 }
3102 } else if (negated) { /* "!perminv_mode" */

Callers 1

handler_perminv_modeFunction · 0.85

Calls 8

string_for_optFunction · 0.85
bad_negationFunction · 0.85
strstriFunction · 0.85
config_error_addFunction · 0.85
handler_perminv_modeFunction · 0.85
strsubstFunction · 0.85
nh_getenvFunction · 0.70
strncmpiFunction · 0.70

Tested by

no test coverage detected