diff options
Diffstat (limited to 'set.h')
| -rw-r--r-- | set.h | 36 | 
1 files changed, 33 insertions, 3 deletions
| @@ -23,15 +23,30 @@    Suite 330, Boston, MA  02111-1307  USA  */ +/* This used to be specific to irc_t structures, but it's more generic now +   (so it can also be used for account_t structs). It's pretty simple, but +   so far pretty useful. +    +   In short, it just keeps a linked list of settings/variables and it also +   remembers a default value for every setting. And to prevent the user +   from setting invalid values, you can write an evaluator function for +   every setting, which can check a new value and block it by returning +   NULL, or replace it by returning a new value. See struct set.eval. */ +  typedef struct set  { -	void *data; +	void *data;     /* Here you can save a pointer to the +	                   object this settings belongs to. */  	char *key;  	char *value; -	char *def;	/* Default */ +	char *def;      /* Default value. If the set_setstr() function +	                   notices a new value is exactly the same as +	                   the default, value gets set to NULL. So when +	                   you read a setting, don't forget about this! */ -	int flags; +	int flags;      /* See account.h, for example. set.c doesn't use +	                   this (yet?). */  	/* Eval: Returns NULL if the value is incorrect or exactly the  	   passed value variable. When returning a corrected value, @@ -40,18 +55,33 @@ typedef struct set  	struct set *next;  } set_t; +/* Should be pretty clear. */  set_t *set_add( set_t **head, char *key, char *def, void *eval, void *data ); + +/* Returns the raw set_t. Might be useful sometimes. */  set_t *set_find( set_t **head, char *key ); + +/* Returns a pointer to the string value of this setting. Don't modify the +   returned string, and don't free() it! */  G_MODULE_EXPORT char *set_getstr( set_t **head, char *key ); + +/* Get an integer. Right now this also converts true/false/on/off/etc to +   numbers, but this is for historical reasons, please use set_getbool() +   for booleans instead. */  G_MODULE_EXPORT int set_getint( set_t **head, char *key );  G_MODULE_EXPORT int set_getbool( set_t **head, char *key ); + +/* set_setstr() strdup()s the given value, so after using this function +   you can free() it, if you want. */  int set_setstr( set_t **head, char *key, char *value );  int set_setint( set_t **head, char *key, int value );  void set_del( set_t **head, char *key ); +/* Two very useful generic evaluators. */  char *set_eval_int( set_t *set, char *value );  char *set_eval_bool( set_t *set, char *value ); +/* Some not very generic evaluators that really shouldn't be here... */  char *set_eval_to_char( set_t *set, char *value );  char *set_eval_ops( set_t *set, char *value );  char *set_eval_charset( set_t *set, char *value ); | 
