summaryrefslogtreecommitdiff
path: root/src/settings.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings.h')
-rw-r--r--src/settings.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/settings.h b/src/settings.h
new file mode 100644
index 0000000..6334faa
--- /dev/null
+++ b/src/settings.h
@@ -0,0 +1,36 @@
+#ifndef _SETTINGS_H
+#define _SETTINGS_H
+
+#include <stdio.h>
+
+/* Individual setting description */
+typedef struct setting_desc_t {
+ const char *name; /* long-form/human name for setting */
+ const char *key; /* short-form/key for setting, used as left side of =value in settings string */
+ const char *regex; /* value must conform to this regex */
+ const char *preferred; /* if there's a default, this is it */
+ const char **values; /* if a set of values is provided, listed here */
+ const char **annotations; /* if a set of values is provided, annotations for those values may be listed here */
+} setting_desc_t;
+
+/* For conveniently representing setting description generators */
+typedef struct setting_desc_generator_t {
+ const char *key; /* key this generator applies to */
+ const char **value_ptr; /* where to put the value */
+ setting_desc_t *(*func)(void *setup_context);
+} setting_desc_generator_t;
+
+typedef struct settings_t settings_t;
+
+settings_t * settings_new(const char *settings);
+void settings_free(settings_t *settings);
+const char * settings_get_value(settings_t *settings, const char *key);
+const char * settings_get_key(settings_t *settings, unsigned pos);
+int settings_add_value(settings_t *settings, const char *key, const char *value);
+char * settings_as_arg(const settings_t *settings);
+int settings_apply_desc_generators(settings_t *settings, const setting_desc_generator_t generators[], unsigned n_generators, void *setup_context, setting_desc_t **next_setting);
+
+setting_desc_t * setting_desc_new(const char *name, const char *key, const char *regex, const char *preferred, const char *values[], const char *annotations[]);
+void setting_desc_free(setting_desc_t *desc);
+
+#endif
© All Rights Reserved