5 #ifndef XUNI_GUARD_RESOURCE_H
6 #define XUNI_GUARD_RESOURCE_H
8 #include <stdio.h> /* for BUFSIZ */
16 RESOURCE_BUFFER_SIZE
= BUFSIZ
19 enum resource_data_type_t
{
26 struct resource_text_t
{
30 struct resource_tag_t
{
32 struct resource_list_t
*list
;
35 struct resource_ref_t
{
37 struct resource_data_t
*ref
;
40 struct resource_data_t
{
41 struct resource_data_t
*base
;
42 enum resource_data_type_t type
;
45 struct resource_text_t
*text
;
46 struct resource_tag_t
*tag
;
47 struct resource_ref_t
*ref
;
51 struct resource_list_t
{
52 struct resource_data_t
**data
;
57 struct resource_data_t
*data
;
60 typedef void (*search_resource_func_t
)(void *vdata
,
61 struct resource_data_t
*data
);
63 /* Public functions. */
65 void init_resource(struct resource_t
*resource
);
66 void write_resource(struct resource_data_t
*resource
, const char *filename
);
67 void update_resource(struct resource_t
*resource
, const char *filename
);
68 int parse_resource(struct resource_data_t
*resource
, const char *filename
);
69 int parse_resource_filename(struct resource_data_t
*resource
,
70 const char *filename
);
71 struct resource_list_t
*first_resource_tag(struct resource_list_t
*list
,
73 char *first_resource_text(struct resource_list_t
*list
);
74 char **first_resource_text_address(struct resource_list_t
*list
);
75 char *find_resource_text(struct resource_list_t
*list
, const char *data
);
76 const char *lookup_resource_string(struct resource_t
*resource
,
77 const char *def
, ...);
78 double lookup_resource_number(struct resource_t
*resource
, double def
, ...);
79 struct resource_list_t
*lookup_resource_tag(struct resource_t
*resource
,
80 struct resource_list_t
*def
, ...);
81 void search_resource_tag(struct resource_data_t
*list
, const char *data
,
82 int recursive
, search_resource_func_t search_resource_func
, void *vdata
);
83 void free_resource(struct resource_t
*resource
);
85 /* Resource functions. */
87 struct resource_list_t
*new_resource_list(void);
88 struct resource_data_t
*new_resource_data(
89 enum resource_data_type_t type
, struct resource_data_t
*base
);
90 struct resource_data_t
*create_element(struct resource_data_t
*base
,
92 struct resource_list_t
*append_resource_list(
93 struct resource_list_t
*list
, struct resource_data_t
*data
);
95 void make_paths_relative_to_xuni(struct resource_data_t
*data
, char **path
);
97 const char *lookup_resource_va(struct resource_t
*resource
,
100 void free_resource_data(struct resource_data_t
*data
);
101 void free_resource_list(struct resource_list_t
*list
);
107 #include "../config.h"
110 #define RESOURCE_LIBRARY_EXPAT
111 #include "libexpat.h"
112 #include "xmlwrite.h"
113 #elif defined(HAVE_LIBMXML)
114 #define RESOURCE_LIBRARY_MXML
117 #error "No resource parsing library specified"