summaryrefslogtreecommitdiff
path: root/src/til_settings.h
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2021-10-01 16:35:08 -0700
committerVito Caputo <vcaputo@pengaru.com>2021-10-01 16:35:08 -0700
commitb686b405c6a22b26e9b8082c92ed91513608bea3 (patch)
tree0000f671501863a8ee9b536ba869221d0f6710f9 /src/til_settings.h
parentd1da5500261e96efe0ede06fbebb32f0e191f3c1 (diff)
*: librototiller->libtil
Largely mechanical rename of librototiller -> libtil, but introducing a til_ prefix to all librototiller (now libtil) functions and types where a rototiller prefix was absent. This is just a step towards a more libized librototiller, and til is just a nicer to type/read prefix than rototiller_.
Diffstat (limited to 'src/til_settings.h')
-rw-r--r--src/til_settings.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/til_settings.h b/src/til_settings.h
new file mode 100644
index 0000000..935aa5b
--- /dev/null
+++ b/src/til_settings.h
@@ -0,0 +1,43 @@
+#ifndef _TIL_SETTINGS_H
+#define _TIL_SETTINGS_H
+
+#include <stdio.h>
+
+/* Individual setting description */
+typedef struct til_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 */
+ char * (*random)(void);/* if set, returns a valid random value for this setting */
+} til_setting_desc_t;
+
+/* For conveniently representing setting description generators */
+typedef struct til_setting_desc_generator_t {
+ const char *key; /* key this generator applies to */
+ const char **value_ptr; /* where to put the value */
+ int (*func)(void *setup_context, til_setting_desc_t **res_desc);
+} til_setting_desc_generator_t;
+
+typedef struct til_settings_t til_settings_t;
+
+til_settings_t * til_settings_new(const char *settings);
+til_settings_t * til_settings_free(til_settings_t *settings);
+const char * til_settings_get_value(const til_settings_t *settings, const char *key);
+const char * til_settings_get_key(const til_settings_t *settings, unsigned pos);
+int til_settings_add_value(til_settings_t *settings, const char *key, const char *value);
+char * til_settings_as_arg(const til_settings_t *settings);
+int til_settings_apply_desc_generators(const til_settings_t *settings, const til_setting_desc_generator_t generators[], unsigned n_generators, void *setup_context, til_setting_desc_t **next_setting);
+
+int til_setting_desc_clone(const til_setting_desc_t *desc, til_setting_desc_t **res_desc);
+til_setting_desc_t * til_setting_desc_free(til_setting_desc_t *desc);
+int til_setting_desc_check(const til_setting_desc_t *desc, const char *value);
+
+#ifndef TIL_SETTINGS_STR
+#define _TIL_SETTINGS_STR(s) #s
+#define TIL_SETTINGS_STR(s) _TIL_SETTINGS_STR(s)
+#endif
+
+#endif
© All Rights Reserved