| 3043 | } |
| 3044 | |
| 3045 | staticfn int |
| 3046 | optfn_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" */ |
no test coverage detected