/** Setting manipulation functions **/ #define _ARISA_SETTINGS_H #define OFFSETOF(s,v) ((ptrdiff_t)&(((s *)0)->v)) typedef enum { ST_INT, ST_UINT, ST_FLOAT, ST_DOUBLE, ST_STR, ST_NSTR, ST_BOOL, ST_ENUM, ST_OFF } settype_t; typedef struct setting_t { char *name; settype_t type; ptrdiff_t offset; int flags; char *min; char *max; const char *(*enum_to_str)(int); int (*str_to_enum)(const char*); } setting_t; int apply_setting(setting_t *settings, void *data, value_t *var); int read_settings(setting_t *settings, void *data, pqueue_t *out);