source: set.h @ d7db346

Last change on this file since d7db346 was 4aa0f6b, checked in by Wilmer van der Gaast <wilmer@…>, at 2010-06-07T14:31:07Z

Merging killerbee stuff, bringing all the bleeding-edge stuff together.

  • Property mode set to 100644
File size: 4.4 KB
Line 
1  /********************************************************************\
2  * BitlBee -- An IRC to other IM-networks gateway                     *
3  *                                                                    *
4  * Copyright 2002-2006 Wilmer van der Gaast and others                *
5  \********************************************************************/
6
7/* Some stuff to register, handle and save user preferences             */
8
9/*
10  This program is free software; you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation; either version 2 of the License, or
13  (at your option) any later version.
14
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License with
21  the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL;
22  if not, write to the Free Software Foundation, Inc., 59 Temple Place,
23  Suite 330, Boston, MA  02111-1307  USA
24*/
25
26#ifndef __SET_H__
27#define __SET_H__
28
29struct set;
30
31/* This used to be specific to irc_t structures, but it's more generic now
32   (so it can also be used for account_t structs). It's pretty simple, but
33   so far pretty useful.
34   
35   In short, it just keeps a linked list of settings/variables and it also
36   remembers a default value for every setting. And to prevent the user
37   from setting invalid values, you can write an evaluator function for
38   every setting, which can check a new value and block it by returning
39   NULL, or replace it by returning a new value. See struct set.eval.
40   One thing that is really missing here is additional data for the
41   evaluator. This could be useful to add minimum and maximum values for
42   integers, for example. */
43
44typedef char *(*set_eval) ( struct set *set, char *value );
45
46extern char *SET_INVALID;
47
48#define SET_NULL_OK        0x0100
49
50typedef struct set
51{
52        void *data;     /* Here you can save a pointer to the
53                           object this settings belongs to. */
54       
55        char *key;
56        char *old_key;  /* Previously known as; for smooth upgrades. */
57        char *value;
58        char *def;      /* Default value. If the set_setstr() function
59                           notices a new value is exactly the same as
60                           the default, value gets set to NULL. So when
61                           you read a setting, don't forget about this!
62                           In fact, you should only read values using
63                           set_getstr/int(). */
64       
65        int flags;      /* See account.h, for example. set.c doesn't use
66                           this (yet?). */
67       
68        /* Eval: Returns SET_INVALID if the value is incorrect or exactly
69           the passed value variable. When returning a corrected value,
70           set_setstr() should be able to free() the returned string! */
71        set_eval eval;
72        void *eval_data;
73        struct set *next;
74} set_t;
75
76/* Should be pretty clear. */
77set_t *set_add( set_t **head, const char *key, const char *def, set_eval eval, void *data );
78
79/* Returns the raw set_t. Might be useful sometimes. */
80set_t *set_find( set_t **head, const char *key );
81
82/* Returns a pointer to the string value of this setting. Don't modify the
83   returned string, and don't free() it! */
84G_MODULE_EXPORT char *set_getstr( set_t **head, const char *key );
85
86/* Get an integer. In previous versions set_getint() was also used to read
87   boolean values, but this SHOULD be done with set_getbool() now! */
88G_MODULE_EXPORT int set_getint( set_t **head, const char *key );
89G_MODULE_EXPORT int set_getbool( set_t **head, const char *key );
90
91/* set_setstr() strdup()s the given value, so after using this function
92   you can free() it, if you want. */
93int set_setstr( set_t **head, const char *key, char *value );
94int set_setint( set_t **head, const char *key, int value );
95void set_del( set_t **head, const char *key );
96int set_reset( set_t **head, const char *key );
97
98/* Two very useful generic evaluators. */
99char *set_eval_int( set_t *set, char *value );
100char *set_eval_bool( set_t *set, char *value );
101
102/* Another more complicated one. */
103char *set_eval_list( set_t *set, char *value );
104
105/* Some not very generic evaluators that really shouldn't be here... */
106char *set_eval_to_char( set_t *set, char *value );
107char *set_eval_ops( set_t *set, char *value );
108
109#endif /* __SET_H__ */
Note: See TracBrowser for help on using the repository browser.