e5a1015583bfc03cf801b5a1a3375495894479a6
[colloquium.git] / src / loadsave.h
1 /*
2  * loadsave.h
3  *
4  * Colloquium - A tiny presentation program
5  *
6  * Copyright (c) 2011 Thomas White <taw@bitwiz.org.uk>
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22
23 #ifndef LOADSAVE_H
24 #define LOADSAVE_H
25
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29
30 /* Forward declaration */
31 struct presentation;
32
33 struct ds_node
34 {
35         char *key;
36         char *value;
37         struct ds_node **children;
38         int n_children;
39         int max_children;
40 };
41
42 /* Would be opaque if I could be bothered to write the constructor */
43 struct serializer
44 {
45         FILE *fh;
46
47         char *stack[32];
48         int stack_depth;
49         char *prefix;
50         int empty_set;
51         int blank_written;
52 };
53
54 extern void serialize_start(struct serializer *s, const char *id);
55 extern void serialize_s(struct serializer *s, const char *key, const char *val);
56 extern void serialize_f(struct serializer *s, const char *key, double val);
57 extern void serialize_b(struct serializer *s, const char *key, int val);
58 extern void serialize_end(struct serializer *s);
59
60 extern int get_field_f(struct ds_node *root, const char *key, double *val);
61 extern int get_field_i(struct ds_node *root, const char *key, int *val);
62 extern int get_field_s(struct ds_node *root, const char *key, char **val);
63
64 extern int load_presentation(struct presentation *p, const char *filename);
65 extern int save_presentation(struct presentation *p, const char *filename);
66
67 #endif  /* LOADSAVE_H */