Freeciv-3.4
Loading...
Searching...
No Matches
registry_ini.h
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12***********************************************************************/
13#ifndef FC__REGISTRY_INI_H
14#define FC__REGISTRY_INI_H
15
16#ifdef __cplusplus
17extern "C" {
18#endif /* __cplusplus */
19
20/* utility */
21#include "ioz.h"
22#include "support.h" /* bool type and fc__attribute */
23
24/* Opaque types. */
25struct section_file;
26struct section;
27struct entry;
28
29/* Typedefs. */
30typedef const void *secfile_data_t;
31
32typedef bool (*secfile_enum_is_valid_fn_t) (int enumerator);
33typedef const char * (*secfile_enum_name_fn_t) (int enumerator);
34typedef int (*secfile_enum_by_name_fn_t) (const char *enum_name,
35 int (*strcmp_fn)(const char *,
36 const char *));
38typedef int (*secfile_enum_next_fn_t) (int enumerator);
39typedef const char * (*secfile_enum_name_data_fn_t) (secfile_data_t data,
40 int enumerator);
41
42/* Create a 'struct section_list' and related functions: */
43#define SPECLIST_TAG section
44#include "speclist.h"
45#define section_list_iterate(seclist, psection) \
46 TYPED_LIST_ITERATE(struct section, seclist, psection)
47#define section_list_iterate_end LIST_ITERATE_END
48#define section_list_iterate_rev(seclist, psection) \
49 TYPED_LIST_ITERATE_REV(struct section, seclist, psection)
50#define section_list_iterate_rev_end LIST_ITERATE_REV_END
51
52/* Create a 'struct entry_list' and related functions: */
53#define SPECLIST_TAG entry
54#include "speclist.h"
55#define entry_list_iterate(entlist, pentry) \
56 TYPED_LIST_ITERATE(struct entry, entlist, pentry)
57#define entry_list_iterate_end LIST_ITERATE_END
58
59/* Main functions. */
60struct section_file *secfile_load_section(const char *filename,
61 const char *section,
62 bool allow_duplicates);
64 bool allow_duplicates);
65
66bool secfile_save(const struct section_file *secfile, const char *filename,
68 bool do_formatting);
69void secfile_check_unused(const struct section_file *secfile);
70const char *secfile_name(const struct section_file *secfile);
71
73
74/* Insertion functions. */
76 bool value, const char *comment,
77 bool allow_replace,
78 const char *path, ...)
80#define secfile_insert_bool(secfile, value, path, ...) \
81 secfile_insert_bool_full(secfile, value, nullptr, FALSE, \
82 path, ## __VA_ARGS__)
83#define secfile_insert_bool_comment(secfile, value, comment, path, ...) \
84 secfile_insert_bool_full(secfile, value, comment, FALSE, \
85 path, ## __VA_ARGS__)
86#define secfile_replace_bool(secfile, value, path, ...) \
87 secfile_insert_bool_full(secfile, value, nullptr, TRUE, \
88 path, ## __VA_ARGS__)
89#define secfile_replace_bool_comment(secfile, value, comment, path, ...) \
90 secfile_insert_bool_full(secfile, value, comment, TRUE, \
91 path, ## __VA_ARGS__)
93 const bool *values, size_t dim,
94 const char *comment, bool allow_replace,
95 const char *path, ...)
97#define secfile_insert_bool_vec(secfile, values, dim, path, ...) \
98 secfile_insert_bool_vec_full(secfile, values, dim, nullptr, FALSE, \
99 path, ## __VA_ARGS__)
100#define secfile_insert_bool_vec_comment(secfile, values, dim, \
101 comment, path, ...) \
102 secfile_insert_bool_vec_full(secfile, values, dim, comment, FALSE, \
103 path, ## __VA_ARGS__)
104#define secfile_replace_bool_vec(secfile, values, dim, path, ...) \
105 secfile_insert_bool_vec_full(secfile, values, dim, nullptr, TRUE, \
106 path, ## __VA_ARGS__)
107#define secfile_replace_bool_vec_comment(secfile, values, dim, \
108 comment, path, ...) \
109 secfile_insert_bool_vec_full(secfile, values, comment, TRUE, \
110 path, ## __VA_ARGS__)
111
113 int value, const char *comment,
114 bool allow_replace,
115 const char *path, ...)
117#define secfile_insert_int(secfile, value, path, ...) \
118 secfile_insert_int_full(secfile, value, nullptr, FALSE, \
119 path, ## __VA_ARGS__)
120#define secfile_insert_int_comment(secfile, value, comment, path, ...) \
121 secfile_insert_int_full(secfile, value, comment, FALSE, \
122 path, ## __VA_ARGS__)
123#define secfile_replace_int(secfile, value, path, ...) \
124 secfile_insert_int_full(secfile, value, nullptr, TRUE, \
125 path, ## __VA_ARGS__)
126#define secfile_replace_int_comment(secfile, value, comment, path, ...) \
127 secfile_insert_int_full(secfile, value, comment, TRUE, \
128 path, ## __VA_ARGS__)
130 const int *values, size_t dim,
131 const char *comment, bool allow_replace,
132 const char *path, ...)
134#define secfile_insert_int_vec(secfile, values, dim, path, ...) \
135 secfile_insert_int_vec_full(secfile, values, dim, nullptr, FALSE, \
136 path, ## __VA_ARGS__)
137#define secfile_insert_int_vec_comment(secfile, values, dim, \
138 comment, path, ...) \
139 secfile_insert_int_vec_full(secfile, values, dim, comment, FALSE, \
140 path, ## __VA_ARGS__)
141#define secfile_replace_int_vec(secfile, values, dim, path, ...) \
142 secfile_insert_int_vec_full(secfile, values, dim, nullptr, TRUE, \
143 path, ## __VA_ARGS__)
144#define secfile_replace_int_vec_comment(secfile, values, dim, \
145 comment, path, ...) \
146 secfile_insert_int_vec_full(secfile, values, dim, comment, TRUE, \
147 path, ## __VA_ARGS__)
148
150 float value, const char *comment,
151 bool allow_replace,
152 const char *path, ...)
154#define secfile_insert_float(secfile, value, path, ...) \
155 secfile_insert_float_full(secfile, value, nullptr, FALSE, \
156 path, ## __VA_ARGS__)
157#define secfile_replace_float(secfile, value, path, ...) \
158 secfile_insert_float_full(secfile, value, nullptr, TRUE, \
159 path, ## __VA_ARGS__)
160
162 const char *filename);
163
165 const char *comment);
166
168 const char *str,
169 const char *comment,
170 bool allow_replace, bool no_escape,
171 enum entry_special_type stype,
172 const char *path, ...)
174#define secfile_insert_str(secfile, string, path, ...) \
175 secfile_insert_str_full(secfile, string, nullptr, FALSE, FALSE, FALSE, \
176 path, ## __VA_ARGS__)
177#define secfile_insert_str_noescape(secfile, string, path, ...) \
178 secfile_insert_str_full(secfile, string, nullptr, FALSE, TRUE, FALSE, \
179 path, ## __VA_ARGS__)
180#define secfile_insert_str_comment(secfile, string, comment, path, ...) \
181 secfile_insert_str_full(secfile, string, comment, FALSE, TRUE, FALSE, \
182 path, ## __VA_ARGS__)
183#define secfile_insert_str_noescape_comment(secfile, string, \
184 comment, path, ...) \
185 secfile_insert_str_full(secfile, string, comment, FALSE, TRUE, FALSE, \
186 path, ## __VA_ARGS__)
187#define secfile_replace_str(secfile, string, path, ...) \
188 secfile_insert_str_full(secfile, string, nullptr, TRUE, FALSE, FALSE, \
189 path, ## __VA_ARGS__)
190#define secfile_replace_str_noescape(secfile, string, path, ...) \
191 secfile_insert_str_full(secfile, string, nullptr, TRUE, TRUE, FALSE, \
192 path, ## __VA_ARGS__)
193#define secfile_replace_str_comment(secfile, string, comment, path, ...) \
194 secfile_insert_str_full(secfile, string, comment, TRUE, TRUE, FALSE, \
195 path, ## __VA_ARGS__)
196#define secfile_replace_str_noescape_comment(secfile, string, \
197 comment, path, ...) \
198 secfile_insert_str_full(secfile, string, comment, TRUE, TRUE, FALSE, \
199 path, ## __VA_ARGS__)
200
202 const char *const *strings, size_t dim,
203 const char *comment, bool allow_replace,
204 bool no_escape, bool gt_marking,
205 const char *path, ...)
207#define secfile_insert_str_vec(secfile, strings, dim, path, ...) \
208 secfile_insert_str_vec_full(secfile, strings, dim, \
209 nullptr, FALSE, FALSE, FALSE, \
210 path, ## __VA_ARGS__)
211#define secfile_insert_str_vec_gt_marking(secfile, strings, dim, path, ...) \
212 secfile_insert_str_vec_full(secfile, strings, dim, \
213 nullptr, FALSE, FALSE, TRUE, \
214 path, ## __VA_ARGS__)
215#define secfile_insert_str_vec_noescape(secfile, strings, dim, path, ...) \
216 secfile_insert_str_vec_full(secfile, strings, dim, \
217 nullptr, FALSE, TRUE, FALSE, \
218 path, ## __VA_ARGS__)
219#define secfile_insert_str_vec_comment(secfile, strings, dim, \
220 comment, path, ...) \
221 secfile_insert_str_vec_full(secfile, strings, dim, \
222 comment, FALSE, TRUE, FALSE, \
223 path, ## __VA_ARGS__)
224#define secfile_insert_str_vec_noescape_comment(secfile, strings, dim, \
225 comment, path, ...) \
226 secfile_insert_str_vec_full(secfile, strings, dim, \
227 comment, FALSE, TRUE, FALSE \
228 path, ## __VA_ARGS__)
229#define secfile_replace_str_vec(secfile, strings, dim, path, ...) \
230 secfile_insert_str_vec_full(secfile, strings, dim, \
231 nullptr, TRUE, FALSE, FALSE, \
232 path, ## __VA_ARGS__)
233#define secfile_replace_str_vec_noescape(secfile, strings, dim, path, ...) \
234 secfile_insert_str_vec_full(secfile, strings, dim, \
235 nullptr, TRUE, TRUE, FALSE, \
236 path, ## __VA_ARGS__)
237#define secfile_replace_str_vec_comment(secfile, strings, dim, \
238 comment, path, ...) \
239 secfile_insert_str_vec_full(secfile, strings, dim, \
240 comment, TRUE, TRUE, FALSE, \
241 path, ## __VA_ARGS__)
242#define secfile_replace_str_vec_noescape_comment(secfile, strings, dim, \
243 comment, path, ...) \
244 secfile_insert_str_vec_full(secfile, strings, dim, \
245 comment, TRUE, TRUE, FALSE, \
246 path, ## __VA_ARGS__)
247
249 int enumerator,
251 const char *comment,
252 bool allow_replace,
253 const char *path, ...)
256 int bitwise_val,
261 const char *comment,
262 bool allow_replace,
263 const char *path, ...)
265#define secfile_insert_enum_full(secfile, enumerator, specenum_type, \
266 comment, allow_replace, path, ...) \
267(specenum_type##_is_bitwise() \
268 ? secfile_insert_bitwise_enum_full(secfile, enumerator, \
269 (secfile_enum_name_fn_t) \
270 specenum_type##_name, \
271 (secfile_enum_iter_fn_t) \
272 specenum_type##_begin, \
273 (secfile_enum_iter_fn_t) \
274 specenum_type##_end, \
275 (secfile_enum_next_fn_t) \
276 specenum_type##_next, \
277 comment, allow_replace, \
278 path, ## __VA_ARGS__) \
279 : secfile_insert_plain_enum_full(secfile, enumerator, \
280 (secfile_enum_name_fn_t) \
281 specenum_type##_name, \
282 comment, allow_replace, \
283 path, ## __VA_ARGS__))
284#define secfile_insert_enum(secfile, enumerator, specenum_type, path, ...) \
285 secfile_insert_enum_full(secfile, enumerator, specenum_type, nullptr, FALSE, \
286 path, ## __VA_ARGS__)
287#define secfile_insert_enum_comment(secfile, enumerator, specenum_type, \
288 comment, path, ...) \
289 secfile_insert_enum_full(secfile, enumerator, specenum_type, comment, \
290 FALSE, path, ## __VA_ARGS__)
291#define secfile_replace_enum(secfile, enumerator, specenum_type, path, ...) \
292 secfile_insert_enum_full(secfile, enumerator, specenum_type, nullptr, TRUE, \
293 path, ## __VA_ARGS__)
294#define secfile_replace_enum_comment(secfile, enumerator, specenum_type, \
295 comment, path, ...) \
296 secfile_insert_enum_full(secfile, enumerator, specenum_type, comment, \
297 TRUE, path, ## __VA_ARGS__)
299 const int *enumurators, size_t dim,
301 const char *comment,
302 bool allow_replace,
303 const char *path, ...)
306 const int *bitwise_vals,
307 size_t dim,
312 const char *comment,
313 bool allow_replace,
314 const char *path, ...)
316#define secfile_insert_enum_vec_full(secfile, enumerators, dim, \
317 specenum_type, comment, allow_replace, \
318 path, ...) \
319(specenum_type##_is_bitwise() \
320 ? secfile_insert_bitwise_enum_vec_full(secfile, (const int *) enumerators, \
321 dim, \
322 (secfile_enum_name_fn_t) \
323 specenum_type##_name, \
324 (secfile_enum_iter_fn_t) \
325 specenum_type##_begin, \
326 (secfile_enum_iter_fn_t) \
327 specenum_type##_end, \
328 (secfile_enum_next_fn_t) \
329 specenum_type##_next, \
330 comment, allow_replace, \
331 path, ## __VA_ARGS__) \
332 : secfile_insert_plain_enum_vec_full(secfile, (const int *) enumerators, \
333 dim, \
334 (secfile_enum_name_fn_t) \
335 specenum_type##_name, \
336 comment, allow_replace, \
337 path, ## __VA_ARGS__))
338#define secfile_insert_enum_vec(secfile, enumerators, dim, specenum_type, \
339 path, ...) \
340 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
341 nullptr, FALSE, path, ## __VA_ARGS__)
342#define secfile_insert_enum_vec_comment(secfile, enumerators, dim, \
343 specenum_type, comment, path, ...) \
344 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
345 comment, FALSE, path, ## __VA_ARGS__)
346#define secfile_replace_enum_vec(secfile, enumerators, dim, specenum_type, \
347 path, ...) \
348 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
349 nullptr, TRUE, path, ## __VA_ARGS__)
350#define secfile_replace_enum_vec_comment(secfile, enumerators, dim, \
351 specenum_type, comment, path, ...) \
352 secfile_insert_enum_vec_full(secfile, enumerators, dim, specenum_type, \
353 comment, TRUE, path, ## __VA_ARGS__)
354
356 int value, bool bitwise,
358 secfile_data_t data,
359 const char *comment,
360 bool allow_replace,
361 const char *path, ...)
363#define secfile_insert_enum_data(secfile, value, bitwise, name_fn, data, \
364 path, ...) \
365 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
366 nullptr, FALSE, path, ## __VA_ARGS__)
367#define secfile_insert_enum_data_comment(secfile, value, bitwise, name_fn, \
368 data, path, ...) \
369 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
370 comment, FALSE, path, ## __VA_ARGS__)
371#define secfile_replace_enum_data(secfile, value, bitwise, name_fn, data, \
372 path, ...) \
373 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
374 nullptr, TRUE, path, ## __VA_ARGS__)
375#define secfile_replace_enum_data_comment(secfile, value, bitwise, name_fn, \
376 data, path, ...) \
377 secfile_insert_enum_data_full(secfile, value, bitwise, name_fn, data, \
378 comment, TRUE, path, ## __VA_ARGS__)
380 const int *values, size_t dim,
381 bool bitwise,
383 secfile_data_t data,
384 const char *comment,
385 bool allow_replace,
386 const char *path, ...)
388#define secfile_insert_enum_vec_data(secfile, values, dim, bitwise, \
389 name_fn, data, path, ...) \
390 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
391 data, nullptr, FALSE, path, ## __VA_ARGS__)
392#define secfile_insert_enum_vec_data_comment(secfile, values, dim, bitwise, \
393 name_fn, data, path, ...) \
394 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
395 data, comment, FALSE, path, \
396 ## __VA_ARGS__)
397#define secfile_replace_enum_vec_data(secfile, values, dim, bitwise, \
398 name_fn, data, path, ...) \
399 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
400 data, nullptr, TRUE, path, ## __VA_ARGS__)
401#define secfile_replace_enum_vec_data_comment(secfile, values, dim, \
402 bitwise, name_fn, data, path, \
403 ...) \
404 secfile_insert_enum_vec_data_full(secfile, values, dim, bitwise, name_fn, \
405 data, comment, TRUE, path, \
406 ## __VA_ARGS__)
407
409 const char *filename,
410 const char *path, ...)
412
414 const char *str,
415 const char *path, ...)
417
418/* Deletion function. */
420 const char *path, ...)
422
423/* Lookup functions. */
425 const char *path);
427 const char *path, ...)
429
430/* Macros to silence "unused entry" warnings about entries that
431 * we intentionally ignore. */
432#define secfile_entry_ignore(_sfile_, _fmt_, ...) \
433 (void) secfile_entry_lookup(_sfile_, _fmt_, ## __VA_ARGS__)
434#define secfile_entry_ignore_by_path(_sfile_, _path_) \
435 (void) secfile_entry_by_path(_sfile_, _path_)
436
437bool secfile_lookup_bool(const struct section_file *secfile, bool *bval,
438 const char *path, ...)
442 bool def, const char *path, ...)
446 size_t *dim, const char *path, ...)
449
451 const char *path, ...)
455 const char *path, ...)
459 int defval, int minval, int maxval,
460 const char *path, ...)
464 size_t *dim, const char *path, ...)
467
469 const char *path, ...)
473 float def, const char *path, ...);
474
476 const char *path, ...)
480 const char *def,
481 const char *path, ...)
485 size_t *dim, const char *path, ...)
487
489 int *penumerator,
492 const char *path, ...)
496 int *penumerator,
499 const char *path, ...)
502#define secfile_lookup_enum(secfile, enumerator, specenum_type, path, ...) \
503(specenum_type##_is_bitwise() \
504 ? secfile_lookup_bitwise_enum_full(secfile, FC_ENUM_PTR(enumerator), \
505 (secfile_enum_is_valid_fn_t) \
506 specenum_type##_is_valid, \
507 (secfile_enum_by_name_fn_t) \
508 specenum_type##_by_name, \
509 path, ## __VA_ARGS__) \
510 : secfile_lookup_plain_enum_full(secfile, FC_ENUM_PTR(enumerator), \
511 (secfile_enum_is_valid_fn_t) \
512 specenum_type##_is_valid, \
513 (secfile_enum_by_name_fn_t) \
514 specenum_type##_by_name, \
515 path, ## __VA_ARGS__))
517 *secfile, int defval,
522 const char *path, ...)
526 *secfile, int defval,
531 const char *path, ...)
534#define secfile_lookup_enum_default(secfile, defval, specenum_type, \
535 path, ...) \
536(specenum_type##_is_bitwise() \
537 ? secfile_lookup_bitwise_enum_default_full(secfile, defval, \
538 (secfile_enum_is_valid_fn_t) \
539 specenum_type##_is_valid, \
540 (secfile_enum_by_name_fn_t) \
541 specenum_type##_by_name, \
542 path, ## __VA_ARGS__) \
543 : secfile_lookup_plain_enum_default_full(secfile, defval, \
544 (secfile_enum_is_valid_fn_t) \
545 specenum_type##_is_valid, \
546 (secfile_enum_by_name_fn_t) \
547 specenum_type##_by_name, \
548 path, ## __VA_ARGS__))
550 size_t *dim,
555 const char *path, ...)
559 size_t *dim,
564 const char *path, ...)
567#define secfile_lookup_enum_vec(secfile, dim, specenum_type, \
568 path, ...) \
569(specenum_type##_is_bitwise() \
570 ? (enum specenum_type *) \
571 secfile_lookup_bitwise_enum_vec_full(secfile, dim, \
572 (secfile_enum_is_valid_fn_t) \
573 specenum_type##_is_valid, \
574 (secfile_enum_by_name_fn_t) \
575 specenum_type##_by_name, \
576 path, ## __VA_ARGS__) \
577 : (enum specenum_type *) \
578 secfile_lookup_plain_enum_vec_full(secfile, dim, \
579 (secfile_enum_is_valid_fn_t) \
580 specenum_type##_is_valid, \
581 (secfile_enum_by_name_fn_t) \
582 specenum_type##_by_name, \
583 path, ## __VA_ARGS__))
584
585bool secfile_lookup_enum_data(const struct section_file *secfile,
586 int *pvalue, bool bitwise,
588 secfile_data_t data, const char *path, ...)
592 int defval, bool bitwise,
594 secfile_data_t data,
595 const char *path, ...)
599 size_t *dim, bool bitwise,
601 secfile_data_t data, const char *path, ...)
604
605/* Sections functions. */
607 const char *section_name);
609 const char *path, ...)
615 const char *prefix);
617 const char *prefix);
619 const char *section_name);
620
621
622/* Independent section functions. */
625
627
628/* Entry functions. */
631 const char *entry_name);
633 const char *path, ...)
636 const char *entry_name,
637 int value);
639 const char *entry_name,
640 bool value);
642 const char *entry_name,
643 float value);
645 const char *entry_name,
646 const char *value, bool escaped);
647
648/* Independent entry functions. */
658
659void entry_destroy(struct entry *pentry);
660
661struct section *entry_section(const struct entry *pentry);
662enum entry_type entry_type_get(const struct entry *pentry);
663int entry_path(const struct entry *pentry, char *buf, size_t buf_len);
664
665const char *entry_name(const struct entry *pentry);
666bool entry_set_name(struct entry *pentry, const char *entry_name);
667
668const char *entry_comment(const struct entry *pentry);
669void entry_set_comment(struct entry *pentry, const char *comment);
670
671bool entry_int_get(const struct entry *pentry, int *value);
672bool entry_int_set(struct entry *pentry, int value);
673
674bool entry_bool_get(const struct entry *pentry, bool *value);
675bool entry_bool_set(struct entry *pentry, bool value);
676
677bool entry_float_get(const struct entry *pentry, float *value);
678bool entry_float_set(struct entry *pentry, float value);
679
680bool entry_str_get(const struct entry *pentry, const char **value);
681bool entry_str_set(struct entry *pentry, const char *value);
682bool entry_str_escaped(const struct entry *pentry);
683bool entry_str_set_escaped(struct entry *pentry, bool escaped);
684bool entry_str_set_gt_marking(struct entry *pentry, bool gt_marking);
685
686#ifdef __cplusplus
687}
688#endif /* __cplusplus */
689
690#endif /* FC__REGISTRY_INI_H */
#define str
Definition astring.c:76
char * incite_cost
Definition comments.c:77
const char * enum_name
Definition events.c:77
fz_method
Definition ioz.h:37
const char * section_name(const struct section *psection)
bool bool bool * secfile_lookup_bool_vec(const struct section_file *secfile, size_t *dim, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
bool bool bool bool int int int * secfile_lookup_int_vec(const struct section_file *secfile, size_t *dim, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
bool int secfile_lookup_enum_default_data(const struct section_file *secfile, int defval, bool bitwise, secfile_enum_name_data_fn_t name_fn, secfile_data_t data, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
const char const char * secfile_lookup_str_default(const struct section_file *secfile, const char *def, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
void entry_set_comment(struct entry *pentry, const char *comment)
bool entry_bool_get(const struct entry *pentry, bool *value)
void section_destroy(struct section *psection)
bool int int * secfile_lookup_enum_vec_data(const struct section_file *secfile, size_t *dim, bool bitwise, secfile_enum_name_data_fn_t name_fn, secfile_data_t data, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
void secfile_check_unused(const struct section_file *secfile)
int entry_path(const struct entry *pentry, char *buf, size_t buf_len)
struct section * secfile_insert_long_comment(struct section_file *secfile, const char *comment)
size_t size_t secfile_insert_bitwise_enum_vec_full(struct section_file *secfile, const int *bitwise_vals, size_t dim, secfile_enum_name_fn_t name_fn, secfile_enum_iter_fn_t begin_fn, secfile_enum_iter_fn_t end_fn, secfile_enum_next_fn_t next_fn, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
int(* secfile_enum_iter_fn_t)(void)
const char const char const char bool bool secfile_lookup_bitwise_enum_full(const struct section_file *secfile, int *penumerator, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
int * secfile_lookup_plain_enum_vec_full(const struct section_file *secfile, size_t *dim, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
struct entry struct entry * secfile_insert_comment(struct section_file *secfile, const char *str, const char *path,...) fc__attribute((__format__(__printf__
const char *(* secfile_enum_name_data_fn_t)(secfile_data_t data, int enumerator)
entry_type
@ ENTRY_FILEREFERENCE
@ ENTRY_LONG_COMMENT
@ ENTRY_INT
@ ENTRY_FLOAT
@ ENTRY_STR
@ ENTRY_ILLEGAL
@ ENTRY_BOOL
struct entry * secfile_insert_bool_full(struct section_file *secfile, bool value, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
bool entry_str_escaped(const struct entry *pentry)
bool bool bool bool int int int bool float secfile_lookup_float_default(const struct section_file *secfile, float def, const char *path,...)
size_t secfile_insert_int_vec_full(struct section_file *secfile, const int *values, size_t dim, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
struct section * entry_section(const struct entry *pentry)
struct entry * secfile_entry_lookup(const struct section_file *secfile, const char *path,...) fc__attribute((__format__(__printf__
struct section_list * secfile_sections_by_name_prefix(const struct section_file *secfile, const char *prefix)
const struct entry_list * section_entries(const struct section *psection)
struct entry struct entry bool secfile_entry_delete(struct section_file *secfile, const char *path,...) fc__attribute((__format__(__printf__
struct section_file * secfile_load_section(const char *filename, const char *section, bool allow_duplicates)
bool entry_bool_set(struct entry *pentry, bool value)
struct section_file * secfile_from_stream(fz_FILE *stream, bool allow_duplicates)
struct entry * secfile_insert_filereference(struct section_file *secfile, const char *filename, const char *path,...) fc__attribute((__format__(__printf__
struct entry * secfile_insert_plain_enum_full(struct section_file *secfile, int enumerator, secfile_enum_name_fn_t name_fn, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
int int * secfile_lookup_bitwise_enum_vec_full(const struct section_file *secfile, size_t *dim, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
bool entry_float_get(const struct entry *pentry, float *value)
bool entry_str_set_escaped(struct entry *pentry, bool escaped)
struct entry struct entry bool struct entry * secfile_entry_by_path(const struct section_file *secfile, const char *path)
size_t secfile_insert_bool_vec_full(struct section_file *secfile, const bool *values, size_t dim, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
const char * entry_name(const struct entry *pentry)
const char const char const char ** secfile_lookup_str_vec(const struct section_file *secfile, size_t *dim, const char *path,...) fc__attribute((__format__(__printf__
struct entry * section_entry_float_new(struct section *psection, const char *entry_name, float value)
bool entry_str_get(const struct entry *pentry, const char **value)
bool entry_str_set_gt_marking(struct entry *pentry, bool gt_marking)
bool(* secfile_enum_is_valid_fn_t)(int enumerator)
bool secfile_save(const struct section_file *secfile, const char *filename, int compression_level, enum fz_method compression_method, bool do_formatting)
void entry_destroy(struct entry *pentry)
int int secfile_lookup_bitwise_enum_default_full(const struct section_file *secfile, int defval, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
bool int int struct section * secfile_section_by_name(const struct section_file *secfile, const char *section_name)
void section_clear_all(struct section *psection)
bool entry_float_set(struct entry *pentry, float value)
struct entry * secfile_insert_enum_data_full(struct section_file *secfile, int value, bool bitwise, secfile_enum_name_data_fn_t name_fn, secfile_data_t data, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
bool secfile_lookup_enum_data(const struct section_file *secfile, int *pvalue, bool bitwise, secfile_enum_name_data_fn_t name_fn, secfile_data_t data, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
struct section * secfile_insert_include(struct section_file *secfile, const char *filename)
bool entry_int_set(struct entry *pentry, int value)
entry_special_type
@ EST_COMMENT
@ EST_NORMAL
@ EST_INCLUDE
const char *(* secfile_enum_name_fn_t)(int enumerator)
const char * secfile_lookup_str(const struct section_file *secfile, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
struct section * secfile_section_lookup(const struct section_file *secfile, const char *path,...) fc__attribute((__format__(__printf__
bool bool secfile_lookup_bool_default(const struct section_file *secfile, bool def, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
bool secfile_lookup_bool(const struct section_file *secfile, bool *bval, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
struct entry * section_entry_str_new(struct section *psection, const char *entry_name, const char *value, bool escaped)
int secfile_lookup_plain_enum_default_full(const struct section_file *secfile, int defval, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
struct entry * secfile_insert_str_full(struct section_file *secfile, const char *str, const char *comment, bool allow_replace, bool no_escape, enum entry_special_type stype, const char *path,...) fc__attribute((__format__(__printf__
bool entry_int_get(const struct entry *pentry, int *value)
struct entry * secfile_insert_int_full(struct section_file *secfile, int value, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
bool entry_set_name(struct entry *pentry, const char *entry_name)
struct entry struct entry * section_entry_int_new(struct section *psection, const char *entry_name, int value)
const char * secfile_name(const struct section_file *secfile)
size_t secfile_insert_enum_vec_data_full(struct section_file *secfile, const int *values, size_t dim, bool bitwise, secfile_enum_name_data_fn_t name_fn, secfile_data_t data, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
const char * entry_comment(const struct entry *pentry)
const char const char const char bool secfile_lookup_plain_enum_full(const struct section_file *secfile, int *penumerator, secfile_enum_is_valid_fn_t is_valid_fn, secfile_enum_by_name_fn_t by_name_fn, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
bool bool bool bool int int secfile_lookup_int_def_min_max(const struct section_file *secfile, int defval, int minval, int maxval, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
struct entry * secfile_insert_float_full(struct section_file *secfile, float value, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
struct entry * section_entry_by_name(const struct section *psection, const char *entry_name)
bool bool bool bool int secfile_lookup_int_default(const struct section_file *secfile, int def, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
bool secfile_section_prefix_present(const struct section_file *secfile, const char *prefix)
struct entry struct entry * secfile_insert_bitwise_enum_full(struct section_file *secfile, int bitwise_val, secfile_enum_name_fn_t name_fn, secfile_enum_iter_fn_t begin_fn, secfile_enum_iter_fn_t end_fn, secfile_enum_next_fn_t next_fn, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
struct entry * section_entry_lookup(const struct section *psection, const char *path,...) fc__attribute((__format__(__printf__
struct section * secfile_section_new(struct section_file *secfile, const char *section_name)
bool entry_str_set(struct entry *pentry, const char *value)
bool bool bool bool int int int bool secfile_lookup_float(const struct section_file *secfile, float *fval, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
int(* secfile_enum_by_name_fn_t)(const char *enum_name, int(*strcmp_fn)(const char *, const char *))
struct entry * section_entry_bool_new(struct section *psection, const char *entry_name, bool value)
size_t secfile_insert_str_vec_full(struct section_file *secfile, const char *const *strings, size_t dim, const char *comment, bool allow_replace, bool no_escape, bool gt_marking, const char *path,...) fc__attribute((__format__(__printf__
size_t secfile_insert_plain_enum_vec_full(struct section_file *secfile, const int *enumurators, size_t dim, secfile_enum_name_fn_t name_fn, const char *comment, bool allow_replace, const char *path,...) fc__attribute((__format__(__printf__
bool bool bool bool secfile_lookup_int(const struct section_file *secfile, int *ival, const char *path,...) fc__warn_unused_result fc__attribute((__format__(__printf__
bool section_set_name(struct section *psection, const char *section_name)
int(* secfile_enum_next_fn_t)(int enumerator)
struct section const struct section_list * secfile_sections(const struct section_file *secfile)
const void * secfile_data_t
enum entry_type entry_type_get(const struct entry *pentry)
bool gt_marking
struct section * psection
bool escaped
bool value
char * comment
bool allow_duplicates
struct section_file * secfile
#define fc__attribute(x)
Definition support.h:99
#define fc__warn_unused_result
Definition support.h:109
#define bool
Definition support.h:71