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)
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__SECTION_FILE_H
14 #define FC__SECTION_FILE_H
16 /* This header contains internals of section_file that its users should
17 * not care about. This header should be included by soruce files implementing
22 #endif /* __cplusplus */
27 /* Section structure. */
29 struct section_file
*secfile
; /* Parent structure. */
30 enum entry_special_type special
;
31 char *name
; /* Name of the section. */
32 struct entry_list
*entries
; /* The list of the children. */
35 /* The section file struct itself. */
37 char *name
; /* Can be NULL. */
39 /* num_includes should be size_t, but as there's no truly portable
40 * printf format for size_t and we need to construct string containing
41 * num_includes with fc_snprintf(), we set for unsigned int. */
42 unsigned int num_includes
;
43 unsigned int num_long_comments
;
44 struct section_list
*sections
;
45 bool allow_duplicates
;
46 bool allow_digital_boolean
;
48 struct section_hash
*sections
;
49 struct entry_hash
*entries
;
53 void secfile_log(const struct section_file
*secfile
,
54 const struct section
*psection
,
55 const char *file
, const char *function
, int line
,
56 const char *format
, ...)
57 fc__attribute((__format__(__printf__
, 6, 7)));
59 #define SECFILE_LOG(secfile, psection, format, ...) \
60 secfile_log(secfile, psection, __FILE__, __FUNCTION__, __FC_LINE__, \
61 format, ## __VA_ARGS__)
62 #define SECFILE_RETURN_IF_FAIL(secfile, psection, condition) \
64 SECFILE_LOG(secfile, psection, "Assertion '%s' failed.", #condition); \
67 #define SECFILE_RETURN_VAL_IF_FAIL(secfile, psection, condition, value) \
69 SECFILE_LOG(secfile, psection, "Assertion '%s' failed.", #condition); \
73 #define SPECHASH_TAG section
74 #define SPECHASH_CSTR_KEY_TYPE
75 #define SPECHASH_IDATA_TYPE struct section *
78 #define SPECHASH_TAG entry
79 #define SPECHASH_ASTR_KEY_TYPE
80 #define SPECHASH_IDATA_TYPE struct entry *
83 bool entry_from_token(struct section
*psection
, const char *name
,
88 #endif /* __cplusplus */
90 #endif /* FC__SECTION_FILE_H */