1
[= AutoGen5 Template =][=
3
# $Id: props.tpl,v 1.19 2004/01/18 12:28:15 rmanfredi Exp $
6
(define license (sprintf
8
* Copyright (c) 2001-2003, Richard Eckart
10
* THIS FILE IS AUTOGENERATED! DO NOT EDIT!
11
* This file is generated from %s using autogen.
12
* Autogen is available at http://autogen.sourceforge.net/.
14
*----------------------------------------------------------------------
15
* This file is part of gtk-gnutella.
17
* gtk-gnutella is free software; you can redistribute it and/or modify
18
* it under the terms of the GNU General Public License as published by
19
* the Free Software Foundation; either version 2 of the License, or
20
* (at your option) any later version.
22
* gtk-gnutella is distributed in the hope that it will be useful,
23
* but WITHOUT ANY WARRANTY; without even the implied warranty of
24
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25
* GNU General Public License for more details.
27
* You should have received a copy of the GNU General Public License
28
* along with gtk-gnutella; if not, write to the Free Software
30
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31
*----------------------------------------------------------------------
33
(define prop-max (sprintf "%s_MAX" (string-upcase (get "property_set"))))
34
(define prop-min (sprintf "%s_MIN" (string-upcase (get "property_set"))))
35
(define prop-num (sprintf "%s_NUM" (string-upcase (get "property_set"))))
36
(define prop-end (sprintf "%s_END" (string-upcase (get "property_set"))))
37
(define set-name-down (string-downcase (get "property_set")))
38
(define prop-set (. set-name-down))
39
(define prop-array (sprintf "%s->props" (. prop-set)))
40
(define prop-offset (get "offset"))
41
(define (type_ok? type)
43
((= type "boolean") #t)
44
((= type "guint32") #t)
45
((= type "guint64") #t)
47
((= type "string") #t)
48
((= type "storage") #t)
49
((= type "multichoice") #t)
52
IF (exist? "func_prefix")=][=
53
(define func-prefix (get "func_prefix"))=][=
55
(define func-prefix (. prop-set))=][=
57
IF (not (exist? "property_set"))=][=
58
(error "property set has no name")=][=
60
IF (not (exist? "offset"))=][=
61
(error "no offset for property numbering given")=][=
64
[= (sprintf "%s.h" (. set-name-down)) =]
65
[= (sprintf "%s_priv.h" (. set-name-down)) =]
66
[= (sprintf "%s.c" (. set-name-down)) =]
69
(out-switch (sprintf "%s.h" (. set-name-down)))
73
#ifndef _[=(. set-name-down)=]_h_
74
#define _[=(. set-name-down)=]_h_
78
#define [=(. prop-min)=] ([=offset=])
79
#define [=(. prop-max)=] ([=offset=]+[=(. prop-end)=]-1)
80
#define [=(. prop-num)=] ([=(. prop-end)=]-[=offset=])
84
PROP_[=(string-upcase (get "name"))=][=
85
IF (= (for-index) 0)=]=[=(. prop-offset)=][=ENDIF=],[=
88
} [= (. set-name-down) =]_t;
93
prop_set_stub_t *[=(. func-prefix)=]_get_stub(void);
98
prop_def_t *[=(. func-prefix)=]_get_def(property_t);
99
property_t [=(. func-prefix)=]_get_by_name(const gchar *);
100
gchar *[=(. func-prefix)=]_name(property_t);
103
* Property-change listeners
105
void [=(. func-prefix)=]_add_prop_changed_listener(
106
property_t, prop_changed_listener_t, gboolean);
107
void [=(. func-prefix)=]_remove_prop_changed_listener(
108
property_t, prop_changed_listener_t);
113
* The *_val macros are shortcuts for single scalar properties.
115
void [=(. func-prefix)=]_set_boolean(
116
property_t, const gboolean *, gsize, gsize);
117
gboolean *[=(. func-prefix)=]_get_boolean(
118
property_t, gboolean *, gsize, gsize);
120
#define [=(. func-prefix)=]_set_boolean_val(p, v) do { \
121
gboolean value = v; \
122
[=(. func-prefix)=]_set_boolean(p, &value, 0, 1); \
125
#define [=(. func-prefix)=]_get_boolean_val(p, v) do { \
126
[=(. func-prefix)=]_get_boolean(p, v, 0, 1); \
130
void [=(. func-prefix)=]_set_string(property_t, const gchar *);
131
gchar *[=(. func-prefix)=]_get_string(property_t, gchar *, gsize);
133
void [=(. func-prefix)=]_set_guint32(
134
property_t, const guint32 *, gsize, gsize);
135
guint32 *[=(. func-prefix)=]_get_guint32(
136
property_t, guint32 *, gsize, gsize);
138
#define [=(. func-prefix)=]_set_guint32_val(p, v) do { \
140
[=(. func-prefix)=]_set_guint32(p, &value, 0, 1); \
143
#define [=(. func-prefix)=]_get_guint32_val(p, v) do { \
144
[=(. func-prefix)=]_get_guint32(p, v, 0, 1); \
147
void [=(. func-prefix)=]_set_guint64(
148
property_t, const guint64 *, gsize, gsize);
149
guint64 *[=(. func-prefix)=]_get_guint64(
150
property_t, guint64 *, gsize, gsize);
152
#define [=(. func-prefix)=]_set_guint64_val(p, v) do { \
154
[=(. func-prefix)=]_set_guint64(p, &value, 0, 1); \
157
#define [=(. func-prefix)=]_get_guint64_val(p, v) do { \
158
[=(. func-prefix)=]_get_guint64(p, v, 0, 1); \
161
void [=(. func-prefix)=]_set_storage(property_t, const guint8 *, gsize);
162
guint8 *[=(. func-prefix)=]_get_storage(property_t, guint8 *, gsize);
164
gchar *[=(. func-prefix)=]_to_string(property_t prop);
166
#endif /* _[=(. set-name-down)=]_h_ */
169
(out-switch (sprintf "%s_priv.h" (. set-name-down)))
173
#ifndef _[=(. set-name-down)=]_priv_h_
174
#define _[=(. set-name-down)=]_priv_h_
179
IF (exist? "data.value") =][=
180
(define item (get "data.value")) =][=
182
(define item (string-downcase (get "name"))) =][=
185
= boolean=]extern gboolean [=(. item)=][=
186
= guint32=]extern guint32 [=(. item)=][=
187
= guint64=]extern guint64 [=(. item)=][=
188
= ip =]extern guint32 [=(. item)=][=
189
= multichoice=]extern guint32 [=(. item)=][=
190
= string =]extern gchar *[=(. item)=][=
191
= storage=]extern guint8 [=(. item)=][=
193
IF (exist? "vector_size") =][[=vector_size=]][=ENDIF=];
196
prop_set_t *[=(. func-prefix)=]_init(void);
197
void [=(. func-prefix)=]_shutdown(void);
199
#endif /* _[=(. set-name-down)=]_priv_h_ */
202
(out-switch (sprintf "%s.c" (. set-name-down)))
208
#include "[=(sprintf "%s.h" (. set-name-down))=]"
211
* Includes specified by "uses"-statement in .ag file
213
[= FOR uses =]#include "[=uses=]"
215
#include "override.h" /* Must be the last header included */
219
(if (exist? "data.value")
220
(define item (get "data.value"))
221
(define item (string-downcase (get "name"))))=][=
222
IF (= (get "type") "storage")=]
223
guint8 [=(. item)=][[=vector_size=]];[=
226
((= (get "type") "boolean")
227
(define vtype "gboolean ")
228
(define vdef (get "data.default")))
229
((= (get "type") "guint32")
230
(define vtype "guint32 ")
231
(define vdef (get "data.default")))
232
((= (get "type") "guint64")
233
(define vtype "guint64 ")
234
(define vdef (get "data.default")))
235
((= (get "type") "ip")
236
(define vtype "guint32 ")
237
(define vdef (get "data.default")))
238
((= (get "type") "multichoice")
239
(define vtype "guint32 ")
240
(define vdef (get "data.default")))
241
((= (get "type") "string")
242
(define vtype "gchar *")
243
(if (= (get "data.default") "NULL")
244
(define vdef (sprintf "NULL"))
245
(define vdef (sprintf "\"%s\"" (get "data.default"))))))
247
IF (exist? "vector_size")=]
248
[= (. vtype)=][=(. item)=][[=vector_size=]] = [=(. vdef)=];
249
[= (. vtype)=][=(. item)=]_def[[=vector_size=]] = [=(. vdef)=];[=
251
[= (. vtype)=][=(. item)=] = [=(. vdef)=];
252
[= (. vtype)=][=(. item)=]_def = [=(. vdef)=];[=
254
IF (= (get "type") "multichoice")=]
255
prop_def_choice_t [=(. item)=]_choices[] = { [=
257
{"[=name=]", [=value=]},[=
265
static prop_set_t *[=(. prop-set)=] = NULL;
267
prop_set_t *[=(. func-prefix)=]_init(void) {
270
[=(. prop-set)=] = g_new(prop_set_t, 1);
271
[=(. prop-set)=]->name = "[=property_set=]";
272
[=(. prop-set)=]->desc = "";
273
[=(. prop-set)=]->size = [=(. prop-num)=];
274
[=(. prop-set)=]->offset = [=offset=];
275
[=(. prop-set)=]->mtime = 0;
276
[=(. prop-set)=]->props = g_new(prop_def_t, [=(. prop-num)=]);
277
[=(. prop-set)=]->get_stub = [=(. func-prefix)=]_get_stub;
278
[=(. prop-set)=]->dirty = FALSE;
279
[=(. prop-set)=]->byName = NULL;[=
282
(define current-prop (sprintf "%s[%u]"
283
(. prop-array) (for-index)))
285
(if (not (and (exist? "type") (type_ok? (get "type"))))
286
(error "type missing or invalid"))
288
(if (not (exist? "name"))
289
(error "no name given"))
291
(if (not (exist? "desc"))
292
(error "no description given"))
294
(if (exist? "data.value")
295
(define prop-var-name (get "data.value"))
296
(define prop-var-name (string-downcase (get "name"))))
298
(if (and (not (exist? "data.default")) (not (= (get "type") "storage")))
299
(error "no default value given"))
301
(if (and (not (exist? "vector_size")) (= (get "type") "storage"))
302
(error "must give vector_size for a storage-type property"))
307
* PROP_[=(string-upcase (get "name"))=]:
311
[= IF (exist? "cfgvar") =][=
312
(. current-prop) =].name = "[= cfgvar =]";[=
314
(. current-prop) =].name = "[= name =]";[=
316
[=(. current-prop)=].desc = _("[=desc=]");
317
[=(. current-prop)=].ev_changed = event_new("[= name =]_changed");[=
318
IF (exist? "save") =]
319
[= (. current-prop) =].save = [=save=];[=
321
[= (. current-prop) =].save = TRUE;[=
323
IF (exist? "vector_size") =]
324
[= (. current-prop) =].vector_size = [=vector_size=];[=
325
(define prop-var (sprintf "%s" (. prop-var-name)))=][=
327
[= (. current-prop) =].vector_size = 1;[=
328
(define prop-var (sprintf "&%s" (. prop-var-name)))=][=
330
(define prop-def-var (sprintf "%s_def" (. prop-var)))
333
/* Type specific data: */[=
337
IF (not (exist? "data.default")) =][=
338
(error "no default given")=][=
340
[=(. current-prop)=].type = PROP_TYPE_BOOLEAN;
341
[=(. current-prop)=].data.boolean.def = [=(. prop-def-var)=];
342
[=(. current-prop)=].data.boolean.value = [=(. prop-var)=];[=
345
[=(. current-prop)=].type = PROP_TYPE_STORAGE;
346
[=(. current-prop)=].data.storage.value = [=(. prop-var)=];
347
memset([=(. prop-var)=], 0, [=(. current-prop)=].vector_size);[=
350
[=(. current-prop)=].type = PROP_TYPE_GUINT32;
351
[=(. current-prop)=].data.guint32.def = [=(. prop-def-var)=];
352
[=(. current-prop)=].data.guint32.value = [=(. prop-var)=];
353
[=(. current-prop)=].data.guint32.choices = NULL;[=
354
IF (exist? "data.max")=]
355
[=(. current-prop)=].data.guint32.max = [=data.max=];[=
357
[=(. current-prop)=].data.guint32.max = 0xFFFFFFFF;[=
359
IF (exist? "data.min")=]
360
[=(. current-prop)=].data.guint32.min = [=data.min=];[=
362
[=(. current-prop)=].data.guint32.min = 0x00000000;[=
366
[=(. current-prop)=].type = PROP_TYPE_GUINT64;
367
[=(. current-prop)=].data.guint64.def = [=(. prop-def-var)=];
368
[=(. current-prop)=].data.guint64.value = [=(. prop-var)=];
369
[=(. current-prop)=].data.guint64.choices = NULL;[=
370
IF (exist? "data.max")=]
371
[=(. current-prop)=].data.guint64.max = [=data.max=];[=
373
[=(. current-prop)=].data.guint64.max = (guint64) -1;[=
375
IF (exist? "data.min")=]
376
[=(. current-prop)=].data.guint64.min = [=data.min=];[=
378
[=(. current-prop)=].data.guint64.min = 0x0000000000000000;[=
382
[=(. current-prop)=].type = PROP_TYPE_IP;
383
[=(. current-prop)=].data.guint32.def = [=(. prop-def-var)=];
384
[=(. current-prop)=].data.guint32.value = [=(. prop-var)=];
385
[=(. current-prop)=].data.guint32.choices = NULL;
386
[=(. current-prop)=].data.guint32.max = 0xFFFFFFFF;
387
[=(. current-prop)=].data.guint32.min = 0x00000000;[=
390
[=(. current-prop)=].type = PROP_TYPE_MULTICHOICE;
391
[=(. current-prop)=].data.guint32.def = [=(. prop-def-var)=];
392
[=(. current-prop)=].data.guint32.value = [=(. prop-var)=];
393
[=(. current-prop)=].data.guint32.max = 0xFFFFFFFF;
394
[=(. current-prop)=].data.guint32.min = 0x00000000;
395
[=(. current-prop)=].data.guint32.choices = [=
396
(sprintf "%s_choices" (. prop-var-name ))=];[=
399
[=(. current-prop)=].type = PROP_TYPE_STRING;
400
[=(. current-prop)=].data.string.def = [=(. prop-def-var)=];
401
[=(. current-prop)=].data.string.value = [=(. prop-var)=];
402
if ([=(. current-prop)=].data.string.def) {
403
*[=(. current-prop)=].data.string.value =
404
g_strdup(eval_subst(*[=(. current-prop)=].data.string.def));
409
[=(. prop-set)=]->byName = g_hash_table_new(g_str_hash, g_str_equal);
410
for (n = 0; n < [=(. prop-num)=]; n ++) {
411
g_hash_table_insert([=(. prop-set)=]->byName,
412
[=(. prop-array)=][n].name, GINT_TO_POINTER(n+[=offset=]));
415
return [=(. prop-set)=];
419
* [=(. func-prefix)=]_shutdown:
421
* Free memory allocated by the property set.
423
void [=(. func-prefix)=]_shutdown(void) {
426
if ([=(. prop-set)=]->byName) {
427
g_hash_table_destroy([=(. prop-set)=]->byName);
428
[=(. prop-set)=]->byName = NULL;
431
for (n = 0; n < [=(. prop-num)=]; n ++) {
432
if ([=(. prop-set)=]->props[n].type == PROP_TYPE_STRING) {
433
gchar **p = [=(. prop-array)=][n].data.string.value;
434
struct event *e = [=(. prop-array)=][n].ev_changed;
442
G_FREE_NULL([=(. prop-array)=]);
443
G_FREE_NULL([=(. prop-set)=]);
446
prop_def_t *[=(. func-prefix)=]_get_def(property_t p)
448
return prop_get_def([=(. prop-set)=], p);
452
* [=(. func-prefix)=]_add_prop_changed_listener:
454
* Add a change listener to a given property. If init is TRUE then
455
* the listener is immediately called.
457
void [=(. func-prefix)=]_add_prop_changed_listener(
458
property_t prop, prop_changed_listener_t l, gboolean init)
460
prop_add_prop_changed_listener([=(. prop-set)=], prop, l, init);
464
* [=(. func-prefix)=]_add_prop_changed_listener_full:
466
* Add a change listener to a given property. If init is TRUE then
467
* the listener is immediately called.
469
void [=(. func-prefix)=]_add_prop_changed_listener_full(
470
property_t prop, prop_changed_listener_t l, gboolean init,
471
enum frequency_type freq, guint32 interval)
473
prop_add_prop_changed_listener_full([=(. prop-set)=], prop, l, init,
477
void [=(. func-prefix)=]_remove_prop_changed_listener(
478
property_t prop, prop_changed_listener_t l)
480
prop_remove_prop_changed_listener([=(. prop-set)=], prop, l);
483
void [=(. func-prefix)=]_set_boolean(
484
property_t prop, const gboolean *src, gsize offset, gsize length)
486
prop_set_boolean([=(. prop-set)=], prop, src, offset, length);
489
gboolean *[=(. func-prefix)=]_get_boolean(
490
property_t prop, gboolean *t, gsize offset, gsize length)
492
return prop_get_boolean([=(. prop-set)=], prop, t, offset, length);
495
void [=(. func-prefix)=]_set_guint32(
496
property_t prop, const guint32 *src, gsize offset, gsize length)
498
prop_set_guint32([=(. prop-set)=], prop, src, offset, length);
501
guint32 *[=(. func-prefix)=]_get_guint32(
502
property_t prop, guint32 *t, gsize offset, gsize length)
504
return prop_get_guint32([=(. prop-set)=], prop, t, offset, length);
507
void [=(. func-prefix)=]_set_guint64(
508
property_t prop, const guint64 *src, gsize offset, gsize length)
510
prop_set_guint64([=(. prop-set)=], prop, src, offset, length);
513
guint64 *[=(. func-prefix)=]_get_guint64(
514
property_t prop, guint64 *t, gsize offset, gsize length)
516
return prop_get_guint64([=(. prop-set)=], prop, t, offset, length);
519
void [=(. func-prefix)=]_set_string(property_t prop, const gchar *val)
521
prop_set_string([=(. prop-set)=], prop, val);
524
gchar *[=(. func-prefix)=]_get_string(property_t prop, gchar *t, gsize size)
526
return prop_get_string([=(. prop-set)=], prop, t, size);
529
void [=(. func-prefix)=]_set_storage(property_t p, const guint8 *v, gsize l)
531
prop_set_storage([=(. prop-set)=], p, v, l);
534
guint8 *[=(. func-prefix)=]_get_storage(property_t p, guint8 *t, gsize l)
536
return prop_get_storage([=(. prop-set)=], p, t, l);
539
gchar *[=(. func-prefix)=]_to_string(property_t prop)
541
return prop_to_string([=(. prop-set)=], prop);
544
gchar *[=(. func-prefix)=]_name(property_t p)
546
return prop_name([=(. prop-set)=], p);
549
property_t [=(. func-prefix)=]_get_by_name(const gchar *name)
551
return GPOINTER_TO_UINT(
552
g_hash_table_lookup([=(. prop-set)=]->byName, name));
557
* [=(. func-prefix)=]_get_stub:
559
* Returns a new stub struct for this property set. Just g_free it
560
* when it is no longer needed. All fields are read only!
562
prop_set_stub_t *[=(. func-prefix)=]_get_stub(void)
564
prop_set_stub_t *stub;
566
stub = g_new0(prop_set_stub_t, 1);
567
stub->size = [=(. prop-num)=];
568
stub->offset = [=(. prop-min)=];
569
stub->get_def = [=(. func-prefix)=]_get_def;
570
stub->get_by_name = [=(. func-prefix)=]_get_by_name;
571
stub->to_string = [=(. func-prefix)=]_to_string;
573
stub->prop_changed_listener.add =
574
[=(. func-prefix)=]_add_prop_changed_listener;
575
stub->prop_changed_listener.add_full =
576
[=(. func-prefix)=]_add_prop_changed_listener_full;
577
stub->prop_changed_listener.remove =
578
[=(. func-prefix)=]_remove_prop_changed_listener;
580
stub->boolean.get = [=(. func-prefix)=]_get_boolean;
581
stub->boolean.set = [=(. func-prefix)=]_set_boolean;
583
stub->guint32.get = [=(. func-prefix)=]_get_guint32;
584
stub->guint32.set = [=(. func-prefix)=]_set_guint32;
586
stub->guint64.get = [=(. func-prefix)=]_get_guint64;
587
stub->guint64.set = [=(. func-prefix)=]_set_guint64;
589
stub->string.get = [=(. func-prefix)=]_get_string;
590
stub->string.set = [=(. func-prefix)=]_set_string;
592
stub->storage.get = [=(. func-prefix)=]_get_storage;
593
stub->storage.set = [=(. func-prefix)=]_set_storage;