Changed header.
[egate.git] / ccl / cclsh.c
1 /* CCL shell.
2  * Europagate 1995
3  *
4  * $Log: cclsh.c,v $
5  * Revision 1.9  1995/02/23 08:32:00  adam
6  * Changed header.
7  *
8  * Revision 1.7  1995/02/15  17:42:16  adam
9  * Minor changes of the api of this module. FILE* argument added
10  * to ccl_pr_tree.
11  *
12  * Revision 1.6  1995/02/14  19:55:13  adam
13  * Header files ccl.h/cclp.h are gone! They have been merged an
14  * moved to ../include/ccl.h.
15  * Node kind(s) in ccl_rpn_node have changed names.
16  *
17  * Revision 1.5  1995/02/14  16:20:57  adam
18  * Qualifiers are read from a file now.
19  *
20  * Revision 1.4  1995/02/14  14:12:42  adam
21  * Ranges for ordered qualfiers implemented (e.g. pd=1980-1990).
22  *
23  * Revision 1.3  1995/02/14  10:25:57  adam
24  * The constructions 'qualifier rel term ...' implemented.
25  *
26  * Revision 1.2  1995/02/13  15:15:07  adam
27  * Added handling of qualifiers. Not finished yet.
28  *
29  * Revision 1.1  1995/02/13  12:35:21  adam
30  * First version of CCL. Qualifiers aren't handled yet.
31  *
32  */
33
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <assert.h>
37
38 #include <ccl.h>
39
40 static int debug = 0;
41 static char *prog;
42
43 int main (int argc, char **argv)
44 {
45     CCL_bibset bibset;
46     FILE *bib_inf;
47     char *bib_fname;
48
49     prog = *argv;
50     bibset = ccl_qual_mk ();    
51     while (--argc > 0)
52     {
53         if (**++argv == '-')
54         {
55             switch (argv[0][1])
56             {
57             case 'd':
58                 debug = 1;
59                 break;
60             case 'b':
61                 if (argv[0][2])
62                     bib_fname = argv[0]+2;
63                 else if (argc > 0)
64                 {
65                     --argc;
66                     bib_fname = *++argv;
67                 }
68                 else
69                 {
70                     fprintf (stderr, "%s: missing bib filename\n", prog);
71                     exit (1);
72                 }
73                 bib_inf = fopen (bib_fname, "r");
74                 if (!bib_inf)
75                 {
76                     fprintf (stderr, "%s: cannot open %s\n", prog,
77                              bib_fname);
78                     exit (1);
79                 }
80                 ccl_qual_file (bibset, bib_inf);
81                 fclose (bib_inf);
82                 break;
83             default:
84                 fprintf (stderr, "%s: unknown option '%s'\n",
85                     prog, *argv);
86                 exit (1);
87             }
88         }
89         else
90         {
91             fprintf (stderr, "%s: no filenames, please\n", prog);
92             exit (1);
93         }
94     }
95     while (1)
96     {
97         char buf[80];
98         int error, pos;
99         struct ccl_rpn_node *rpn;
100
101         printf ("CCLSH>"); fflush (stdout);
102         if (!fgets (buf, 79, stdin))
103             break;
104         rpn = ccl_find_str (bibset, buf, &error, &pos);
105         if (error)
106         {
107             printf ("%*s^ - ", 6+pos, " ");
108             printf ("%s\n", ccl_err_msg (error));
109         }
110         else
111         {
112             assert (rpn);
113             ccl_pr_tree (rpn, stdout);
114             putchar ('\n');
115         }
116     }
117     putchar ('\n');
118     return 0;
119 }