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:
+8
-87
@@ -22,6 +22,9 @@ NEARDATA struct instance_flags iflags; /* provide linkage */
|
|||||||
* options help (option_help()), the long options help (dat/opthelp),
|
* options help (option_help()), the long options help (dat/opthelp),
|
||||||
* and the current options setting display function (doset()),
|
* and the current options setting display function (doset()),
|
||||||
* and also the Guidebooks.
|
* 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
|
static struct Bool_Opt
|
||||||
@@ -164,8 +167,8 @@ static struct Bool_Opt
|
|||||||
{"sound", &flags.soundok, TRUE, SET_IN_GAME},
|
{"sound", &flags.soundok, TRUE, SET_IN_GAME},
|
||||||
{"sparkle", &flags.sparkle, TRUE, SET_IN_GAME},
|
{"sparkle", &flags.sparkle, TRUE, SET_IN_GAME},
|
||||||
{"standout", &flags.standout, FALSE, 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*/
|
{"tiled_map", &iflags.wc_tiled_map, FALSE, DISP_IN_GAME}, /*WC*/
|
||||||
|
{"time", &flags.time, FALSE, SET_IN_GAME},
|
||||||
#ifdef TIMED_DELAY
|
#ifdef TIMED_DELAY
|
||||||
{"timed_delay", &flags.nap, TRUE, SET_IN_GAME},
|
{"timed_delay", &flags.nap, TRUE, SET_IN_GAME},
|
||||||
#else
|
#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(doset_add_menu, (winid,const char *,int));
|
||||||
STATIC_DCL void FDECL(nmcpy, (char *, const char *, int));
|
STATIC_DCL void FDECL(nmcpy, (char *, const char *, int));
|
||||||
STATIC_DCL void FDECL(escapes, (const char *, char *));
|
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(rejectoption, (const char *));
|
||||||
STATIC_DCL void FDECL(badoption, (const char *));
|
STATIC_DCL void FDECL(badoption, (const char *));
|
||||||
STATIC_DCL char *FDECL(string_for_opt, (char *,BOOLEAN_P));
|
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 const char *FDECL(get_compopt_value, (const char *, char *));
|
||||||
STATIC_DCL boolean FDECL(special_handling, (const char *, BOOLEAN_P, BOOLEAN_P));
|
STATIC_DCL boolean FDECL(special_handling, (const char *, BOOLEAN_P, BOOLEAN_P));
|
||||||
STATIC_DCL void FDECL(warning_opts, (char *,const char *));
|
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_DCL void FDECL(duplicate_opt_detection, (const char *, int));
|
||||||
|
|
||||||
STATIC_OVL void FDECL(wc_set_font_name, (int, char *));
|
STATIC_OVL void FDECL(wc_set_font_name, (int, char *));
|
||||||
@@ -642,25 +639,6 @@ char *tp;
|
|||||||
*tp = '\0';
|
*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
|
STATIC_OVL void
|
||||||
rejectoption(optname)
|
rejectoption(optname)
|
||||||
const char *optname;
|
const char *optname;
|
||||||
@@ -835,48 +813,6 @@ register uchar *graph_chars;
|
|||||||
warnsyms[i] = graph_chars[i];
|
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
|
STATIC_OVL int
|
||||||
feature_alert_opts(op, optn)
|
feature_alert_opts(op, optn)
|
||||||
char *op;
|
char *op;
|
||||||
@@ -963,6 +899,7 @@ int bool_or_comp; /* 0 == boolean option, 1 == compound */
|
|||||||
wait_synch();
|
wait_synch();
|
||||||
}
|
}
|
||||||
*optptr += 1;
|
*optptr += 1;
|
||||||
|
break; /* don't match multiple options */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if ((bool_or_comp == 1) && iflags.opt_compdup && initial && from_file) {
|
} 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();
|
wait_synch();
|
||||||
}
|
}
|
||||||
*optptr += 1;
|
*optptr += 1;
|
||||||
|
break; /* don't match multiple options */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1201,9 +1139,9 @@ boolean tinitial, tfrom_file;
|
|||||||
|
|
||||||
if (match_optname(opts, "palette", 3, TRUE)
|
if (match_optname(opts, "palette", 3, TRUE)
|
||||||
# ifdef MAC
|
# ifdef MAC
|
||||||
|| match_optname(opts, "hicolor", 3, TRUE)
|
|| match_optname(opts, "hicolor", 3, TRUE)
|
||||||
# endif
|
# endif
|
||||||
) {
|
) {
|
||||||
int color_number, color_incr;
|
int color_number, color_incr;
|
||||||
|
|
||||||
# ifdef MAC
|
# ifdef MAC
|
||||||
@@ -1399,15 +1337,6 @@ goodfruit:
|
|||||||
else warning_opts(opts, fullname);
|
else warning_opts(opts, fullname);
|
||||||
return;
|
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 */
|
/* boulder:symbol */
|
||||||
fullname = "boulder";
|
fullname = "boulder";
|
||||||
if (match_optname(opts, fullname, 7, TRUE)) {
|
if (match_optname(opts, fullname, 7, TRUE)) {
|
||||||
@@ -2006,11 +1935,7 @@ goodfruit:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* options that must come from config file */
|
/* options that must come from config file */
|
||||||
#if 0
|
|
||||||
if (!initial && boolopt_only_initial(i)) {
|
|
||||||
#else
|
|
||||||
if (!initial && (boolopt[i].optflags == SET_IN_FILE)) {
|
if (!initial && (boolopt[i].optflags == SET_IN_FILE)) {
|
||||||
#endif
|
|
||||||
rejectoption(boolopt[i].name);
|
rejectoption(boolopt[i].name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2711,10 +2636,6 @@ char *buf;
|
|||||||
ttycolors[CLR_BRIGHT_MAGENTA],
|
ttycolors[CLR_BRIGHT_MAGENTA],
|
||||||
ttycolors[CLR_BRIGHT_CYAN]);
|
ttycolors[CLR_BRIGHT_CYAN]);
|
||||||
#endif /* VIDEOSHADES */
|
#endif /* VIDEOSHADES */
|
||||||
#if 0
|
|
||||||
else if (!strcmp(optname, "warnlevel"))
|
|
||||||
Sprintf(buf, "%d", flags.warnlevel);
|
|
||||||
#endif
|
|
||||||
else if (!strcmp(optname, "windowtype"))
|
else if (!strcmp(optname, "windowtype"))
|
||||||
Sprintf(buf, "%s", windowprocs.name);
|
Sprintf(buf, "%s", windowprocs.name);
|
||||||
#ifdef PREFIXES_IN_USE
|
#ifdef PREFIXES_IN_USE
|
||||||
|
|||||||
Reference in New Issue
Block a user