February 2020 options.c overhaul
combine boolean and compound options into a single allopt[] array for
processing in options.c.
move the definitions of the options into new include/optlist.h file which
uses a set of macros to define them appropriately.
during compile of options.c each option described in include/optlist.h:
1. automatically results in a function prototype for an optfn called
optfn_xxxx (xxxx is the option name).
2. automatically results in an opt_xxxx enum value for referencing
its index throughout options.c (xxxx is the option name).
3. is used to initialize an element of the allopt[] array at index
opt_xxxx (xxxx is the option name) based on the settings in the
NHOPTB, NHOPTC, NHOPTP macros. Those macros only live during the
compilation of include/optlist.h.
each optfn_xxxx() function can be called with a req id of: do_init, do_set,
get_val or do_handler.
req do_init is called from options_init, and if initialization or memory
allocation or other initialization for that particular option is needed,
it can be done in response to the init req.
req do_set is called from parseoptions() for each option it encounters
and the optfn_xxxx() function is expected to react and set the option
based on the string values that parseoptions() passes to it.
req get_val expects each optfn_xxxx() function to write the current
option value into the buffer it is passed.
req do_handler is called during doset() operations in response to player
selections most likely from the 'O' option-setting menu, but only if the
option is identified as having do_handler support in the allopts[]
'has_handler' boolean flag. Not every optfn_xxxx() does.
function special_handling() is eliminated. It's code has been redistributed
to individual handler functions for the option or purpose that they serve.
moved reglyph_darkroom() function from options.c to display.c
This commit is contained in:
@@ -497,19 +497,19 @@ enum bodypart_types {
|
||||
#define TELEDS_TELEPORT 2
|
||||
|
||||
/*
|
||||
* Option flags
|
||||
* Each higher number includes the characteristics of the numbers
|
||||
* below it.
|
||||
* option setting restrictions
|
||||
*/
|
||||
/* XXX This should be replaced with a bitmap. */
|
||||
#define SET_IN_SYS 0 /* system config file option only */
|
||||
#define SET_IN_FILE 1 /* config file option only */
|
||||
#define SET_VIA_PROG 2 /* may be set via extern program, not seen in game */
|
||||
#define DISP_IN_GAME 3 /* may be set via extern program, displayed in game \
|
||||
*/
|
||||
#define SET_IN_GAME 4 /* may be set via extern program or set in the game */
|
||||
#define SET_IN_WIZGAME 5 /* may be set set in the game if wizmode */
|
||||
#define SET__IS_VALUE_VALID(s) ((s < SET_IN_SYS) || (s > SET_IN_WIZGAME))
|
||||
|
||||
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 set in the game if wizmode */
|
||||
set_wizonly = 5, /* may be set via extern program or set in the game */
|
||||
set_hidden = 6 /* placeholder for prefixed entries, never show it */
|
||||
};
|
||||
#define SET__IS_VALUE_VALID(s) ((s < set_in_sysconf) || (s > set_wizonly))
|
||||
|
||||
#define FEATURE_NOTICE_VER(major, minor, patch) \
|
||||
(((unsigned long) major << 24) | ((unsigned long) minor << 16) \
|
||||
|
||||
Reference in New Issue
Block a user