Added SILC Thread Queue API
[crypto.git] / apps / irssi / src / perl / common / Settings.xs
1 #include "module.h"
2 #include "misc.h"
3 #include "recode.h"
4
5 static GHashTable *perl_settings;
6
7 static void perl_settings_add(const char *key)
8 {
9         PERL_SCRIPT_REC *script;
10         GSList *list;
11
12         script = perl_script_find_package(perl_get_package());
13         g_return_if_fail(script != NULL);
14
15         list = g_hash_table_lookup(perl_settings, script);
16         list = g_slist_append(list, g_strdup(key));
17         g_hash_table_insert(perl_settings, script, list);
18 }
19
20 static void perl_settings_remove(const char *key)
21 {
22         PERL_SCRIPT_REC *script;
23         GSList *list, *pos;
24
25         script = perl_script_find_package(perl_get_package());
26         g_return_if_fail(script != NULL);
27
28         list = g_hash_table_lookup(perl_settings, script);
29         pos = gslist_find_icase_string(list, key);
30         if (pos != NULL) {
31                 list = g_slist_remove(list, pos->data);
32                 g_hash_table_insert(perl_settings, script, list);
33         }
34 }
35
36 static void perl_settings_free(PERL_SCRIPT_REC *script, GSList *list)
37 {
38         g_slist_foreach(list, (GFunc) g_free, NULL);
39         g_slist_free(list);
40 }
41
42 static void sig_script_destroyed(PERL_SCRIPT_REC *script)
43 {
44         GSList *list;
45
46         list = g_hash_table_lookup(perl_settings, script);
47         if (list != NULL) {
48                 g_slist_foreach(list, (GFunc) settings_remove, NULL);
49                 perl_settings_free(script, list);
50                 g_hash_table_remove(perl_settings, script);
51         }
52 }
53
54 void perl_settings_init(void)
55 {
56         perl_settings = g_hash_table_new((GHashFunc) g_direct_hash,
57                                          (GCompareFunc) g_direct_equal);
58         signal_add("script destroyed", (SIGNAL_FUNC) sig_script_destroyed);
59 }
60
61 void perl_settings_deinit(void)
62 {
63         signal_remove("script destroyed", (SIGNAL_FUNC) sig_script_destroyed);
64
65         g_hash_table_foreach(perl_settings, (GHFunc) perl_settings_free, NULL);
66         g_hash_table_destroy(perl_settings);
67 }
68
69 MODULE = Irssi::Settings  PACKAGE = Irssi
70 PROTOTYPES: ENABLE
71
72 SV *
73 settings_get_str(key)
74         char *key
75 PREINIT:
76         const char *str;
77 CODE:
78         str = settings_get_str(key);
79         RETVAL = new_pv(str);
80         if (is_utf8())
81                 SvUTF8_on(RETVAL);
82 OUTPUT:
83         RETVAL
84
85 int
86 settings_get_int(key)
87         char *key
88
89 int
90 settings_get_bool(key)
91         char *key
92
93 int
94 settings_get_time(key)
95        char *key
96
97 int
98 settings_get_level(key)
99        char *key
100
101 int
102 settings_get_size(key)
103        char *key
104
105 void
106 settings_set_str(key, value)
107         char *key
108         char *value
109
110 void
111 settings_set_int(key, value)
112         char *key
113         int value
114
115 void
116 settings_set_bool(key, value)
117         char *key
118         int value
119
120 int
121 settings_set_time(key, value)
122         char *key
123         char *value
124
125 int
126 settings_set_level(key, value)
127         char *key
128         char *value
129
130 int
131 settings_set_size(key, value)
132         char *key
133         char *value
134
135 void
136 settings_add_str(section, key, def)
137         char *section
138         char *key
139         char *def
140 CODE:
141         perl_settings_add(key);
142         settings_add_str_module(MODULE_NAME"/scripts", section, key, def);
143
144 void
145 settings_add_int(section, key, def)
146         char *section
147         char *key
148         int def
149 CODE:
150         perl_settings_add(key);
151         settings_add_int_module(MODULE_NAME"/scripts", section, key, def);
152
153 void
154 settings_add_bool(section, key, def)
155         char *section
156         char *key
157         int def
158 CODE:
159         perl_settings_add(key);
160         settings_add_bool_module(MODULE_NAME"/scripts", section, key, def);
161
162 void
163 settings_add_time(section, key, def)
164         char *section
165         char *key
166         char *def
167 CODE:
168         perl_settings_add(key);
169         settings_add_time_module(MODULE_NAME"/scripts", section, key, def);
170
171 void
172 settings_add_level(section, key, def)
173         char *section
174         char *key
175         char *def
176 CODE:
177         perl_settings_add(key);
178         settings_add_level_module(MODULE_NAME"/scripts", section, key, def);
179
180 void
181 settings_add_size(section, key, def)
182         char *section
183         char *key
184         char *def
185 CODE:
186         perl_settings_add(key);
187         settings_add_size_module(MODULE_NAME"/scripts", section, key, def);
188
189 void
190 settings_remove(key)
191         char *key
192 CODE:
193         perl_settings_remove(key);
194         settings_remove(key);