Change Windows startup

remove the safeproc pseudo-windowport routines from
almost a decade ago.

A very early pass is made through the config file,
seeking out just the interface-related OPTIONS=windowport
and OPTIONS=soundlib and ignoring all other options in the
config file during that early pass, so the windowport
can be activated without the NetHack core initialization
in place that some of the other rcfile OPTIONS require.

Bundles the existing rcfile processing code into rcfile().

New functions to control which rcfile options will be
disregarded in the early config file pass, and which will be
processed:

    set_all_options_disregarded();
    set_all_options_heeded();
    disregard_this_option(opt_xx);
    heed_this_option(opt_xx);

Windows calls rcfile_interface_options(), which is
a bundling of a series of function calls to achieve
the desired result.

    void
    rcfile_interface_options(void)
    {
        allopt_array_init();
        set_all_options_disregarded();
        heed_this_option(opt_windowtype);
        heed_this_option(opt_soundlib);
        rcfile();
        set_all_options_heeded();
        disregard_this_option(opt_windowtype);
        disregard_this_option(opt_soundlib);
    }
This commit is contained in:
nhmall
2026-04-05 11:36:19 -04:00
parent 92340a6827
commit acb85b18cf
23 changed files with 450 additions and 959 deletions

View File

@@ -4,10 +4,6 @@
#ifndef OPTLIST_H
#define OPTLIST_H
#ifdef OPTIONS_C
static int optfn_boolean(int, int, boolean, char *, char *);
#endif
/*
* NOTE: If you add (or delete) an option, please review:
* doc/options.txt
@@ -16,6 +12,37 @@ static int optfn_boolean(int, int, boolean, char *, char *);
* updates that should accompany your change.
*/
#define BACKWARD_COMPAT
extern int optfn_boolean(int, int, boolean, char *, char *);
enum optchoice { opt_in, opt_out };
/*
* option setting restrictions
*/
enum optset_restrictions {
set_in_sysconf = 0, /* system config file option only */
set_in_config = 1, /* config file option only */
set_viaprog = 2, /* may be set via extern program, not seen in game */
set_gameview = 3, /* may be set via extern program, displayed in game */
set_in_game = 4, /* may be set via extern program or set in the game */
set_wizonly = 5, /* may be set in the game if wizmode */
set_wiznofuz = 6, /* wizard-mode only, but not by fuzzer */
set_hidden = 7 /* placeholder for prefixed entries, never show it */
};
/* these aren't the same as set_xxx */
enum option_phases {
phase_not_set = 0,
builtin_opt = 1, /* compiled-in default value of an option */
syscf_opt, /* sysconf setting of an option, overrides builtin */
rc_file_opt, /* player's run-time config file setting, overrides syscf */
environ_opt, /* player's environment NETHACKOPTIONS, overrides rc_file */
cmdline_opt, /* program invocation command-line, overrides environ */
play_opt, /* 'O' command, interactively set so overrides all */
num_opt_phases
};
enum OptType { BoolOpt, CompOpt, OthrOpt };
enum Y_N { No, Yes };
enum Off_On { Off, On };
@@ -45,7 +72,7 @@ struct allopt_t {
const char *alias;
const char *descr;
const char *prefixgw;
boolean initval, has_handler, dupdetected;
boolean initval, has_handler, dupdetected, disregarded;
};
#endif /* OPTLIST_H */
@@ -74,16 +101,16 @@ static int optfn_##a(int, int, boolean, char *, char *);
#elif defined(NHOPT_PARSE)
#define NHOPTB(a, sec, b, c, s, i, n, v, d, al, bp, termp, desc) \
{ #a, OptS_##sec, 0, b, opt_##a, s, BoolOpt, n, v, d, No, termp, c, \
bp, &optfn_boolean, al, desc, (const char *) 0, i, 0, 0 },
bp, &optfn_boolean, al, desc, (const char *) 0, i, 0, 0 , 0 },
#define NHOPTC(a, sec, b, c, s, n, v, d, h, al, z) \
{ #a, OptS_##sec, 0, b, opt_##a, s, CompOpt, n, v, d, No, 0, c, \
(boolean *) 0, &optfn_##a, al, z, (const char *) 0, Off, h, 0 },
(boolean *) 0, &optfn_##a, al, z, (const char *) 0, Off, h, 0, 0 },
#define NHOPTP(a, sec, b, c, s, n, v, d, h, al, z) \
{ #a, OptS_##sec, 0, b, pfx_##a, s, CompOpt, n, v, d, Yes, 0, c, \
(boolean *) 0, &pfxfn_##a, al, z, #a, Off, h, 0 },
(boolean *) 0, &pfxfn_##a, al, z, #a, Off, h, 0, 0 },
#define NHOPTO(m, sec, a, b, c, s, n, v, d, al, z) \
{ m, OptS_##sec, 0, b, opt_##a, s, OthrOpt, n, v, d, No, 0, c, \
(boolean *) 0, &optfn_##a, al, z, (const char *) 0, On, On, 0 },
(boolean *) 0, &optfn_##a, al, z, (const char *) 0, On, On, 0, 0 },
/* this is not reliable because TILES_IN_GLYPHMAP might be defined
* in a multi-interface binary but not apply to the current interface */