aboutsummaryrefslogtreecommitdiff
path: root/tests/gcffmt.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-05-06 13:57:43 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2011-05-06 13:57:43 +0300
commit352b268186931579ae8dcc6a19aaaa89547555f5 (patch)
tree6b8797f63ee7ca085526ec97c392c5f52d856109 /tests/gcffmt.c
parent52c12573a505bf29a0301a1c9553e88c3270713e (diff)
downloadgrecs-352b268186931579ae8dcc6a19aaaa89547555f5.tar.gz
grecs-352b268186931579ae8dcc6a19aaaa89547555f5.tar.bz2
Implement tree sorting.
* src/sort.c: New file. * src/Make.am: Add sort.c. * tests/gcffmt.c: New option -sort. * src/grecs-lex.l (ID): Allow for single-character identifiers.
Diffstat (limited to 'tests/gcffmt.c')
-rw-r--r--tests/gcffmt.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/tests/gcffmt.c b/tests/gcffmt.c
index cacf7d2..29aa69a 100644
--- a/tests/gcffmt.c
+++ b/tests/gcffmt.c
@@ -24,11 +24,18 @@
static void
usage(const char *arg, FILE *fp, int code)
{
- fprintf(fp, "usage: %s [-h] [-locus] [-delim=char] [-reduce] file\n",
+ fprintf(fp,
+ "usage: %s [-h] [-locus] [-delim=char] [-reduce] [-sort] file\n",
arg);
exit(code);
}
+static int
+node_ident_cmp(struct grecs_node const *a, struct grecs_node const *b)
+{
+ return strcmp(a->ident, b->ident);
+}
+
int
main(int argc, char **argv)
{
@@ -37,6 +44,7 @@ main(int argc, char **argv)
struct grecs_node *tree, *node;
int flags = GRECS_NODE_FLAG_DEFAULT;
int reduce = 0;
+ int sort = 0;
while (--argc) {
char *arg = *++argv;
@@ -46,6 +54,8 @@ main(int argc, char **argv)
flags |= arg[7];
else if (strcmp(arg, "-reduce") == 0)
reduce = 1;
+ else if (strcmp(arg, "-sort") == 0)
+ sort = 1;
else if (strcmp(arg, "-h") == 0)
usage(progname, stdout, 0);
else if (arg[0] == '-')
@@ -64,6 +74,8 @@ main(int argc, char **argv)
exit(1);
if (reduce)
grecs_tree_reduce(tree, NULL);
+ if (sort)
+ grecs_tree_sort(tree, node_ident_cmp);
for (node = tree; node; node = node->next) {
grecs_format_node(node, flags, stdout);
fputc('\n', stdout);

Return to:

Send suggestions and report system problems to the System administrator.