ambiguous option matching

Note: actual option setting code in parseoptions already does this correctly
- avoid testing the same options values vs multiple boolopts entries
- apply similar change for complex option testing
- remove some dead code
This commit is contained in:
cohrs
2002-03-03 20:29:36 +00:00
parent 2671ec5ccb
commit c8e3ea61f6

View File

@@ -22,6 +22,9 @@ NEARDATA struct instance_flags iflags; /* provide linkage */
* options help (option_help()), the long options help (dat/opthelp),
* and the current options setting display function (doset()),
* and also the Guidebooks.
*
* The order matters. If an option is a an initial substring of another
* option (e.g. time and timed_delay) the shorter one must come first.
*/
static struct Bool_Opt
@@ -164,8 +167,8 @@ static struct Bool_Opt
{"sound", &flags.soundok, TRUE, SET_IN_GAME},
{"sparkle", &flags.sparkle, TRUE, SET_IN_GAME},
{"standout", &flags.standout, FALSE, SET_IN_GAME},
{"time", &flags.time, FALSE, SET_IN_GAME},
{"tiled_map", &iflags.wc_tiled_map, FALSE, DISP_IN_GAME}, /*WC*/
{"time", &flags.time, FALSE, SET_IN_GAME},
#ifdef TIMED_DELAY
{"timed_delay", &flags.nap, TRUE, SET_IN_GAME},
#else
@@ -386,9 +389,6 @@ static boolean initial, from_file;
STATIC_DCL void FDECL(doset_add_menu, (winid,const char *,int));
STATIC_DCL void FDECL(nmcpy, (char *, const char *, int));
STATIC_DCL void FDECL(escapes, (const char *, char *));
#if 0
STATIC_DCL int FDECL(boolopt_only_initial, (int));
#endif
STATIC_DCL void FDECL(rejectoption, (const char *));
STATIC_DCL void FDECL(badoption, (const char *));
STATIC_DCL char *FDECL(string_for_opt, (char *,BOOLEAN_P));
@@ -401,9 +401,6 @@ STATIC_DCL int FDECL(feature_alert_opts, (char *, const char *));
STATIC_DCL const char *FDECL(get_compopt_value, (const char *, char *));
STATIC_DCL boolean FDECL(special_handling, (const char *, BOOLEAN_P, BOOLEAN_P));
STATIC_DCL void FDECL(warning_opts, (char *,const char *));
#if 0
STATIC_DCL int FDECL(warnlevel_opts, (char *, const char *));
#endif
STATIC_DCL void FDECL(duplicate_opt_detection, (const char *, int));
STATIC_OVL void FDECL(wc_set_font_name, (int, char *));
@@ -642,25 +639,6 @@ char *tp;
*tp = '\0';
}
#if 0
/* some boolean options can only be set on start-up */
STATIC_OVL int
boolopt_only_initial(i)
int i;
{
return (boolopt[i].addr == &flags.female
|| boolopt[i].addr == &flags.legacy
#if defined(MICRO) && !defined(AMIGA)
|| boolopt[i].addr == &iflags.rawio
|| boolopt[i].addr == &iflags.BIOS
#endif
#if defined(MSDOS) && defined(USE_TILES)
|| boolopt[i].addr == &iflags.preload_tiles
#endif
);
}
#endif
STATIC_OVL void
rejectoption(optname)
const char *optname;
@@ -835,48 +813,6 @@ register uchar *graph_chars;
warnsyms[i] = graph_chars[i];
}
#if 0
/* warnlevel is unnecessary with the new warning introduced in 3.3.1 */
STATIC_OVL int
warnlevel_opts(op, optn)
char *op;
const char *optn;
{
char buf[BUFSZ];
int twarnlevel;
boolean rejectlevel = FALSE;
if (op) {
twarnlevel = atoi(op);
if (twarnlevel >= WARNCOUNT || twarnlevel < 1)
rejectlevel = TRUE;
else {
flags.warnlevel = twarnlevel;
see_monsters();
}
}
if (rejectlevel) {
if (!initial)
pline("warnlevel must be 1 to %d.", WARNCOUNT - 1);
else {
Sprintf(buf,
"\n%s=%s Invalid warnlevel ignored (must be 1 to %d)",
optn, op, WARNCOUNT - 1);
badoption(buf);
}
return 0;
}
if (!initial) {
if (flags.warnlevel < WARNCOUNT -1)
Sprintf(buf, "s %d to %d", flags.warnlevel, WARNCOUNT - 1);
else
Sprintf(buf, " %d", flags.warnlevel);
pline("Warning level%s will be displayed.", buf);
}
return 1;
}
#endif
STATIC_OVL int
feature_alert_opts(op, optn)
char *op;
@@ -963,6 +899,7 @@ int bool_or_comp; /* 0 == boolean option, 1 == compound */
wait_synch();
}
*optptr += 1;
break; /* don't match multiple options */
}
}
} else if ((bool_or_comp == 1) && iflags.opt_compdup && initial && from_file) {
@@ -976,6 +913,7 @@ int bool_or_comp; /* 0 == boolean option, 1 == compound */
wait_synch();
}
*optptr += 1;
break; /* don't match multiple options */
}
}
}
@@ -1201,9 +1139,9 @@ boolean tinitial, tfrom_file;
if (match_optname(opts, "palette", 3, TRUE)
# ifdef MAC
|| match_optname(opts, "hicolor", 3, TRUE)
|| match_optname(opts, "hicolor", 3, TRUE)
# endif
) {
) {
int color_number, color_incr;
# ifdef MAC
@@ -1399,15 +1337,6 @@ goodfruit:
else warning_opts(opts, fullname);
return;
}
#if 0 /* do not enable post 3.3.0 */
fullname = "warnlevel";
if (match_optname(opts, fullname, 5, TRUE)) {
op = string_for_opt(opts, negated);
if (negated) bad_negation(fullname, FALSE);
else if (op) (void) warnlevel_opts(op,fullname);
return;
}
#endif
/* boulder:symbol */
fullname = "boulder";
if (match_optname(opts, fullname, 7, TRUE)) {
@@ -2006,11 +1935,7 @@ goodfruit:
return;
}
/* options that must come from config file */
#if 0
if (!initial && boolopt_only_initial(i)) {
#else
if (!initial && (boolopt[i].optflags == SET_IN_FILE)) {
#endif
rejectoption(boolopt[i].name);
return;
}
@@ -2711,10 +2636,6 @@ char *buf;
ttycolors[CLR_BRIGHT_MAGENTA],
ttycolors[CLR_BRIGHT_CYAN]);
#endif /* VIDEOSHADES */
#if 0
else if (!strcmp(optname, "warnlevel"))
Sprintf(buf, "%d", flags.warnlevel);
#endif
else if (!strcmp(optname, "windowtype"))
Sprintf(buf, "%s", windowprocs.name);
#ifdef PREFIXES_IN_USE