Added copy of CCL.
[yaz-moved-to-github.git] / ccl / cclptree.c
1 /* CCL print rpn tree - infix notation
2  * Europagate, 1995
3  *
4  * $Log: cclptree.c,v $
5  * Revision 1.1  1995-04-10 10:28:20  quinn
6  * Added copy of CCL.
7  *
8  * Revision 1.5  1995/02/23  08:31:59  adam
9  * Changed header.
10  *
11  * Revision 1.3  1995/02/15  17:42:16  adam
12  * Minor changes of the api of this module. FILE* argument added
13  * to ccl_pr_tree.
14  *
15  * Revision 1.2  1995/02/14  19:55:11  adam
16  * Header files ccl.h/cclp.h are gone! They have been merged an
17  * moved to ../include/ccl.h.
18  * Node kind(s) in ccl_rpn_node have changed names.
19  *
20  * Revision 1.1  1995/02/14  10:25:56  adam
21  * The constructions 'qualifier rel term ...' implemented.
22  *
23  */
24
25 #include <stdio.h>
26 #include <assert.h>
27 #include <string.h>
28
29 #include <ccl.h>
30
31 void ccl_pr_tree (struct ccl_rpn_node *rpn, FILE *fd_out)
32 {
33
34     switch (rpn->kind)
35     {
36     case CCL_RPN_TERM:
37         fprintf (fd_out, "\"%s\"", rpn->u.t.term);
38         if (rpn->u.t.attr_list)
39         {
40             struct ccl_rpn_attr *attr;
41             for (attr = rpn->u.t.attr_list; attr; attr = attr->next)
42                 fprintf (fd_out, " %d=%d", attr->type, attr->value);
43         }
44         break;
45     case CCL_RPN_AND:
46         fprintf (fd_out, "(");
47         ccl_pr_tree (rpn->u.p[0], fd_out);
48         fprintf (fd_out, ") and (");
49         ccl_pr_tree (rpn->u.p[1], fd_out);
50         fprintf (fd_out, ")");
51         break;
52     case CCL_RPN_OR:
53         fprintf (fd_out, "(");
54         ccl_pr_tree (rpn->u.p[0], fd_out);
55         fprintf (fd_out, ") or (");
56         ccl_pr_tree (rpn->u.p[1], fd_out);
57         fprintf (fd_out, ")");
58         break;
59     case CCL_RPN_NOT:
60         fprintf (fd_out, "(");
61         ccl_pr_tree (rpn->u.p[0], fd_out);
62         fprintf (fd_out, ") not (");
63         ccl_pr_tree (rpn->u.p[1], fd_out);
64         fprintf (fd_out, ")");
65         break;
66     case CCL_RPN_SET:
67         fprintf (fd_out, "set=%s", rpn->u.setname);
68         break;
69     case CCL_RPN_PROX:
70         fprintf (fd_out, "(");
71         ccl_pr_tree (rpn->u.p[0], fd_out);
72         fprintf (fd_out, ") prox (");
73         ccl_pr_tree (rpn->u.p[1], fd_out);
74         fprintf (fd_out, ")");
75         break;
76     default:
77         assert (0);
78     }
79 }