summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/util/options.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/util/options.h')
-rw-r--r--src/lib/util/options.h216
1 files changed, 216 insertions, 0 deletions
diff --git a/src/lib/util/options.h b/src/lib/util/options.h
new file mode 100644
index 00000000000..35abc73f226
--- /dev/null
+++ b/src/lib/util/options.h
@@ -0,0 +1,216 @@
+/***************************************************************************
+
+ options.h
+
+ Core options code code
+
+ Copyright (c) 1996-2007, Nicola Salmoria and the MAME Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+***************************************************************************/
+
+#ifndef __OPTIONS_H__
+#define __OPTIONS_H__
+
+#include "osdcore.h"
+#include "corefile.h"
+
+
+
+/***************************************************************************
+ CONSTANTS
+***************************************************************************/
+
+/* unadorned option names */
+#define MAX_UNADORNED_OPTIONS 16
+#define OPTION_UNADORNED(x) (((x) < MAX_UNADORNED_OPTIONS) ? option_unadorned[x] : "")
+
+/* option flags */
+#define OPTION_BOOLEAN 0x0001 /* option is a boolean value */
+#define OPTION_DEPRECATED 0x0002 /* option is deprecated */
+#define OPTION_COMMAND 0x0004 /* option is a command */
+#define OPTION_HEADER 0x0008 /* text-only header */
+#define OPTION_INTERNAL 0x0010 /* option is internal-only */
+#define OPTION_REPEATS 0x0020 /* unadorned option repeats */
+
+/* option priorities */
+#define OPTION_PRIORITY_DEFAULT 0 /* defaults are at 0 priority */
+#define OPTION_PRIORITY_LOW 50 /* low priority */
+#define OPTION_PRIORITY_NORMAL 100 /* normal priority */
+#define OPTION_PRIORITY_HIGH 150 /* high priority */
+#define OPTION_PRIORITY_MAXIMUM 255 /* maximum priority */
+
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+
+/* opaque type representing a collection of options */
+typedef struct _core_options core_options;
+
+/* opaque type use for enumeration of options */
+typedef struct _options_enumerator options_enumerator;
+
+/* describes a single option with its description and default value */
+typedef struct _options_entry options_entry;
+struct _options_entry
+{
+ const char * name; /* name on the command line */
+ const char * defvalue; /* default value of this argument */
+ UINT32 flags; /* flags to describe the option */
+ const char * description; /* description for -showusage */
+};
+
+/* output messages are one of the following types */
+enum _options_message
+{
+ OPTMSG_INFO,
+ OPTMSG_WARNING,
+ OPTMSG_ERROR,
+ OPTMSG_COUNT
+};
+typedef enum _options_message options_message;
+
+/* option ranges are one of the following types */
+enum _options_range_type
+{
+ OPTION_RANGE_NONE,
+ OPTION_RANGE_INT,
+ OPTION_RANGE_FLOAT
+};
+typedef enum _options_range_type options_range_type;
+
+
+
+/***************************************************************************
+ GLOBAL VARIABLES
+***************************************************************************/
+
+extern const char *option_unadorned[MAX_UNADORNED_OPTIONS];
+
+
+
+/***************************************************************************
+ FUNCTION PROTOTYPES
+***************************************************************************/
+
+
+/* ----- options collection management ----- */
+
+/* create a new collection of options */
+core_options *options_create(void (*fail)(const char *message));
+
+/* free a collection of options */
+void options_free(core_options *opts);
+
+/* set a callback for a particular class of message */
+void options_set_output_callback(core_options *opts, options_message msgtype, void (*callback)(const char *s));
+
+/* revert options at or below a certain priority back to their defaults */
+void options_revert(core_options *opts, int priority);
+
+/* copy one collection of options into another */
+int options_copy(core_options *dest_opts, core_options *src_opts);
+
+/* compare two collections of options */
+int options_equal(core_options *opts1, core_options *opts2);
+
+
+
+/* ----- option definitions ----- */
+
+/* add a set of entries to an options collection */
+int options_add_entries(core_options *opts, const options_entry *entrylist);
+
+/* set the default value for a particular option entry */
+int options_set_option_default_value(core_options *opts, const char *name, const char *defvalue);
+
+/* set a callback for a particular option entry */
+int options_set_option_callback(core_options *opts, const char *name, void (*callback)(core_options *opts, const char *arg));
+
+
+
+/* ----- option data extraction ----- */
+
+/* parse option data from a command line */
+int options_parse_command_line(core_options *opts, int argc, char **argv, int priority);
+
+/* parse option data from an INI file */
+int options_parse_ini_file(core_options *opts, core_file *inifile, int priority);
+
+
+
+/* ----- options output ----- */
+
+/* output option data to an INI file */
+void options_output_ini_file(core_options *opts, core_file *inifile);
+
+/* output differing option data to an INI file */
+void options_output_diff_ini_file(core_options *opts, core_options *baseopts, core_file *inifile);
+
+/* output option data to a standard file handle */
+void options_output_ini_stdfile(core_options *opts, FILE *inifile);
+
+/* output help using the specified output function */
+void options_output_help(core_options *opts, void (*output)(const char *s));
+
+
+
+/* ----- options reading ----- */
+
+/* read an option as a string */
+const char *options_get_string(core_options *opts, const char *name);
+
+/* read an option as a boolean */
+int options_get_bool(core_options *opts, const char *name);
+
+/* read an option as an integer */
+int options_get_int(core_options *opts, const char *name);
+
+/* read an option as a floating point value */
+float options_get_float(core_options *opts, const char *name);
+
+/* read an option as a string */
+UINT32 options_get_seqid(core_options *opts, const char *name);
+
+
+
+/* ----- options setting ----- */
+
+/* set an option as a string */
+void options_set_string(core_options *opts, const char *name, const char *value, int priority);
+
+/* set an option as a boolean */
+void options_set_bool(core_options *opts, const char *name, int value, int priority);
+
+/* set an option as an integer */
+void options_set_int(core_options *opts, const char *name, int value, int priority);
+
+/* set an option as a floating point value */
+void options_set_float(core_options *opts, const char *name, float value, int priority);
+
+
+
+/* ----- option definition queries ----- */
+
+/* begin enumerating option definitions */
+options_enumerator *options_enumerator_begin(core_options *opts);
+
+/* get the next option in sequence */
+const char *options_enumerator_next(options_enumerator *enumerator);
+
+/* free memory allocated for enumeration */
+void options_enumerator_free(options_enumerator *enumerator);
+
+/* get the type of range for a given option */
+options_range_type options_get_range_type(core_options *opts, const char *name);
+
+/* return an integer range for a given option */
+void options_get_range_int(core_options *opts, const char *name, int *minval, int *maxval);
+
+/* return a floating point range for a given option */
+void options_get_range_float(core_options *opts, const char *name, float *minval, float *maxval);
+
+
+#endif /* __OPTIONS_H__ */