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