Update cql2xcql, cql2pqf to use options (same style)
[yaz-moved-to-github.git] / util / cql2pqf.c
1 /* $Id: cql2pqf.c,v 1.3 2004-03-11 09:34:42 adam Exp $
2    Copyright (C) 2002-2004
3    Index Data Aps
4
5 This file is part of the YAZ toolkit.
6
7 See the file LICENSE.
8 */
9
10 #include <stdlib.h>
11 #include <stdio.h>
12
13 #include <yaz/cql.h>
14
15 static void usage()
16 {
17     fprintf (stderr, "usage\n cql2pqf [-n <n>] <properties> [<query>]\n");
18     exit (1);
19 }
20
21 int main(int argc, char **argv)
22 {
23     cql_transform_t ct;
24     int r;
25     int i, iterations = 1;
26     CQL_parser cp = cql_parser_create();
27     char *query = 0;
28     char *fname = 0;
29
30     int ret;
31     char *arg;
32
33     while ((ret = options("n:", argv, argc, &arg)) != -2)
34     {
35         switch (ret)
36         {
37         case 0:
38             if (!fname)
39                 fname = arg;
40             else
41                 query = arg;
42             break;
43         case 'n':
44             iterations = atoi(arg);
45             break;
46         default:
47             usage();
48         }
49     }
50     if (!fname)
51         usage();
52     ct = cql_transform_open_fname(fname);
53     if (!ct)
54     {
55         fprintf (stderr, "failed to read properties %s\n", fname);
56         exit (1);
57     }
58
59     if (query)
60     {
61         for (i = 0; i<iterations; i++)
62             r = cql_parser_string(cp, query);
63     }
64     else
65         r = cql_parser_stdio(cp, stdin);
66
67     if (r)
68         fprintf (stderr, "Syntax error\n");
69     else
70     {
71         r = cql_transform_FILE(ct, cql_parser_result(cp), stdout);
72         printf("\n");
73         if (r)
74         {
75             const char *addinfo;
76             cql_transform_error(ct, &addinfo);
77             printf ("Transform error %d %s\n", r, addinfo ? addinfo : "");
78         }
79         else
80         {
81             FILE *null = fopen("/dev/null", "w");
82             for (i = 1; i<iterations; i++)
83                 cql_transform_FILE(ct, cql_parser_result(cp), null);
84             fclose(null);
85         }
86     }
87     cql_transform_close(ct);
88     cql_parser_destroy(cp);
89     return 0;
90 }