typedef enum {
Config_String,
- Config_Integer
+ Config_Integer,
+ Config_Bool
} ConfigValueType;
typedef union {
char *string;
int integer;
+ gboolean bool;
} ConfigValue;
typedef struct {
ConfigValue value;
} ConfigEntry;
+typedef struct {
+ char *name;
+ char *descriptive_name; /* user friendly name */
+ char *long_description; /* text description of option */
+ ConfigValueType type;
+ /* if it is a string type optionally provide a list of valid strings */
+ gboolean hasList;
+ GSList *values;
+} ConfigDefEntry;
+
void config_startup();
void config_shutdown();
+/* Set a config variable's value. The variable must have already been defined
+ with a call to config_def_set */
gboolean config_set(char *name, ConfigValueType type, ConfigValue value);
+/* Get a config variable's value. Returns FALSE if the value has not been
+ set. */
+gboolean config_get(char *name, ConfigValueType type, ConfigValue *value);
+
+/* Create a new config definition to add to the config system */
+ConfigDefEntry *config_def_new(char *name, ConfigValueType type,
+ char *descriptive_name, char *long_description);
+
+/* Add a value to a String type config definition */
+gboolean config_def_add_value(ConfigDefEntry *entry, char *value);
+
+/* Sets up the definition in the config system, Don't free or touch the entry
+ after setting it with this. It is invalidated even if the function returns
+ FALSE. */
+gboolean config_def_set(ConfigDefEntry *entry);
+
void config_parse();
#endif