summaryrefslogtreecommitdiffabout
path: root/tests/gcfpeek.c
Side-by-side diff
Diffstat (limited to 'tests/gcfpeek.c') (more/less context) (ignore whitespace changes)
-rw-r--r--tests/gcfpeek.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/gcfpeek.c b/tests/gcfpeek.c
new file mode 100644
index 0000000..360000d
--- a/dev/null
+++ b/tests/gcfpeek.c
@@ -0,0 +1,76 @@
+/* grecs - Gray's Extensible Configuration System
+ Copyright (C) 2007-2011 Sergey Poznyakoff
+
+ Grecs 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.
+
+ Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <string.h>
+#include <errno.h>
+#include "grecs.h"
+
+static void
+usage(const char *arg, FILE *fp, int code)
+{
+ fprintf(fp, "usage: %s [-h] [-locus] [-delim=char] file path\n", arg);
+ exit(code);
+}
+
+int
+main(int argc, char **argv)
+{
+ char *progname = argv[0];
+ char *path = NULL;
+ char *file = NULL;
+ struct grecs_node *tree, *node;
+ int flags = 0;
+ int rc = 2;
+
+ while (--argc) {
+ char *arg = *++argv;
+ if (strcmp(arg, "-locus") == 0)
+ flags |= GRECS_NODE_FLAG_LOCUS;
+ else if (strncmp(arg, "-delim=", 7) == 0)
+ flags |= arg[7];
+ else if (strcmp(arg, "-h") == 0)
+ usage(progname, stdout, 0);
+ else if (arg[0] == '-')
+ usage(progname, stderr, 1);
+ else if (file) {
+ if (path)
+ usage(progname, stderr, 1);
+ else
+ path = arg;
+ } else
+ file = arg;
+ }
+
+ if (!file || !path || argc)
+ usage(progname, stderr, 1);
+
+ tree = grecs_parse(file);
+ if (!tree)
+ exit(1);
+
+ for (node = tree; node; node = node->next) {
+ node = grecs_find_node(node, path);
+ if (!node)
+ break;
+ rc = 0;
+ grecs_format_node(node, flags, stdout);
+ fputc('\n', stdout);
+ }
+ exit(rc);
+}

Return to:

Send suggestions and report system problems to the System administrator.