--windowtype:foo on command line
There's no need to process windowtype a second time after options parsing. The sequence set windowtype, process options, set windowtype again was intended to deal with the options setting it to some other value, but there's a flag available to disable that from happening.
This commit is contained in:
+3
-3
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 mdlib.c $NHDT-Date: 1655402414 2022/06/16 18:00:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.31 $ */
|
/* NetHack 3.7 mdlib.c $NHDT-Date: 1701499945 2023/12/02 06:52:25 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.51 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */
|
/*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */
|
||||||
/* Copyright (c) M. Stephenson, 1990, 1991. */
|
/* Copyright (c) M. Stephenson, 1990, 1991. */
|
||||||
@@ -100,7 +100,7 @@ static struct version_info version;
|
|||||||
static const char opt_indent[] = " ";
|
static const char opt_indent[] = " ";
|
||||||
|
|
||||||
struct win_information {
|
struct win_information {
|
||||||
const char *id, /* DEFAULT_WINDOW_SYS string */
|
const char *id, /* windowtype value */
|
||||||
*name; /* description, often same as id */
|
*name; /* description, often same as id */
|
||||||
boolean valid;
|
boolean valid;
|
||||||
};
|
};
|
||||||
@@ -108,7 +108,7 @@ struct win_information {
|
|||||||
static struct win_information window_opts[] = {
|
static struct win_information window_opts[] = {
|
||||||
#ifdef TTY_GRAPHICS
|
#ifdef TTY_GRAPHICS
|
||||||
{ "tty",
|
{ "tty",
|
||||||
/* testing 'TILES_IN_GLYPHMAP' here would bring confusion because it could
|
/* testing TILES_IN_GLYPHMAP here would bring confusion because it could
|
||||||
apply to another interface such as X11, so check MSDOS explicitly
|
apply to another interface such as X11, so check MSDOS explicitly
|
||||||
instead; even checking TTY_TILES_ESCCODES would probably be
|
instead; even checking TTY_TILES_ESCCODES would probably be
|
||||||
confusing to most users (and it will already be listed separately
|
confusing to most users (and it will already be listed separately
|
||||||
|
|||||||
+18
-21
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 options.c $NHDT-Date: 1700012888 2023/11/15 01:48:08 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.675 $ */
|
/* NetHack 3.7 options.c $NHDT-Date: 1701499956 2023/12/02 06:52:36 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.685 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Michael Allison, 2008. */
|
/*-Copyright (c) Michael Allison, 2008. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -4637,8 +4637,10 @@ optfn_windowcolors(int optidx, int req, boolean negated UNUSED,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
optfn_windowtype(int optidx, int req, boolean negated UNUSED,
|
optfn_windowtype(
|
||||||
char *opts, char *op)
|
int optidx, int req,
|
||||||
|
boolean negated UNUSED,
|
||||||
|
char *opts, char *op)
|
||||||
{
|
{
|
||||||
if (req == do_init) {
|
if (req == do_init) {
|
||||||
return optn_ok;
|
return optn_ok;
|
||||||
@@ -6662,21 +6664,25 @@ initoptions_init(void)
|
|||||||
determine_ambiguities();
|
determine_ambiguities();
|
||||||
|
|
||||||
/* if windowtype has been specified on the command line, set it up
|
/* if windowtype has been specified on the command line, set it up
|
||||||
early so windowtype-specific options use it as their base; we will
|
early so windowtype-specific options use it as their base */
|
||||||
set it again in initoptions_finish() so that NETHACKOPTIONS and
|
|
||||||
.nethrackrc can't override it (command line takes precedence) */
|
|
||||||
if (gc.cmdline_windowsys) {
|
if (gc.cmdline_windowsys) {
|
||||||
nmcpy(gc.chosen_windowtype, gc.cmdline_windowsys, WINTYPELEN);
|
nmcpy(gc.chosen_windowtype, gc.cmdline_windowsys, WINTYPELEN);
|
||||||
config_error_init(FALSE, "command line", FALSE);
|
config_error_init(FALSE, "command line", FALSE);
|
||||||
choose_windows(gc.cmdline_windowsys);
|
choose_windows(gc.cmdline_windowsys);
|
||||||
config_error_done();
|
config_error_done();
|
||||||
/* do not free gc.cmdline_windowsys yet unless it was rejected;
|
/*
|
||||||
keeping it in that situation would complain about it twice */
|
* FIXME? This continues even if setting windowtype to player's
|
||||||
if (!windowprocs.name
|
* specified value fails. It doesn't lock the windowtype in
|
||||||
|| strcmpi(windowprocs.name, gc.cmdline_windowsys) != 0) {
|
* that situation though, so the game will use whatever is in
|
||||||
free((genericptr_t) gc.cmdline_windowsys),
|
* RC/NETHACKOPTIONS or resort to DEFAULT_WINDOW_SYS.
|
||||||
|
*/
|
||||||
|
if (windowprocs.name
|
||||||
|
&& !strcmpi(windowprocs.name, gc.cmdline_windowsys))
|
||||||
|
/* ignore any windowtype:foo in RC file or NETHACKOPTIONS */
|
||||||
|
iflags.windowtype_locked = TRUE;
|
||||||
|
/* should't need cmdline_windowsys beyond here */
|
||||||
|
free((genericptr_t) gc.cmdline_windowsys),
|
||||||
gc.cmdline_windowsys = NULL;
|
gc.cmdline_windowsys = NULL;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENHANCED_SYMBOLS
|
#ifdef ENHANCED_SYMBOLS
|
||||||
@@ -6891,15 +6897,6 @@ initoptions_finish(void)
|
|||||||
config_error_done();
|
config_error_done();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* after .nethackrc and NETHACKOPTIONS so that cmdline takes precedence */
|
|
||||||
if (gc.cmdline_windowsys) {
|
|
||||||
go.opt_phase = cmdline_opt;
|
|
||||||
config_error_init(FALSE, "command line", FALSE);
|
|
||||||
choose_windows(gc.cmdline_windowsys);
|
|
||||||
config_error_done();
|
|
||||||
free((genericptr_t) gc.cmdline_windowsys), gc.cmdline_windowsys = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gc.cmdline_rcfile)
|
if (gc.cmdline_rcfile)
|
||||||
free((genericptr_t) gc.cmdline_rcfile), gc.cmdline_rcfile = 0;
|
free((genericptr_t) gc.cmdline_rcfile), gc.cmdline_rcfile = 0;
|
||||||
/*[end of nethackrc handling]*/
|
/*[end of nethackrc handling]*/
|
||||||
|
|||||||
Reference in New Issue
Block a user