Changed som member names of DeleteResultSetRequest/Response.
[yaz-moved-to-github.git] / retrieval / d1_varset.c
1 /*
2  * Copyright (c) 1995-1997, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: d1_varset.c,v $
7  * Revision 1.7  1998-02-11 11:53:35  adam
8  * Changed code so that it compiles as C++.
9  *
10  * Revision 1.6  1997/09/17 12:10:39  adam
11  * YAZ version 1.4.
12  *
13  * Revision 1.5  1997/09/05 09:50:58  adam
14  * Removed global data1_tabpath - uses data1_get_tabpath() instead.
15  *
16  * Revision 1.4  1997/05/14 06:54:04  adam
17  * C++ support.
18  *
19  * Revision 1.3  1995/11/01 16:34:58  quinn
20  * Making data1 look for tables in data1_tabpath
21  *
22  * Revision 1.2  1995/11/01  13:54:50  quinn
23  * Minor adjustments
24  *
25  * Revision 1.1  1995/11/01  11:56:09  quinn
26  * Added Retrieval (data management) functions en masse.
27  *
28  *
29  */
30
31 #include <string.h>
32 #include <stdlib.h>
33
34 #include <readconf.h>
35 #include <oid.h>
36 #include <log.h>
37
38 #include <tpath.h>
39 #include <data1.h>
40
41 data1_vartype *data1_getvartypebyct (data1_handle dh, data1_varset *set,
42                                      char *zclass, char *type)
43 {
44     data1_varclass *c;
45     data1_vartype *t;
46
47     for (c = set->classes; c; c = c->next)
48         if (!data1_matchstr(c->name, zclass))
49         {
50             for (t = c->types; t; t = t->next)
51                 if (!data1_matchstr(t->name, type))
52                     return t;
53             logf(LOG_WARN, "Unknown variant type %s in class %s", type, zclass);
54             return 0;
55         }
56     logf(LOG_WARN, "Unknown variant class %s", zclass);
57     return 0;
58 }
59
60 data1_varset *data1_read_varset (data1_handle dh, const char *file)
61 {
62     NMEM mem = data1_nmem_get (dh);
63     data1_varset *res = (data1_varset *)nmem_malloc(mem, sizeof(*res));
64     data1_varclass **classp = &res->classes, *zclass = 0;
65     data1_vartype **typep = 0;
66     FILE *f;
67     int argc;
68     char *argv[50],line[512];
69
70     res->name = 0;
71     res->reference = VAL_NONE;
72     res->classes = 0;
73
74     if (!(f = yaz_path_fopen(data1_get_tabpath(dh), file, "r")))
75     {
76         logf(LOG_WARN|LOG_ERRNO, "%s", file);
77         return 0;
78     }
79     while ((argc = readconf_line(f, line, 512, argv, 50)))
80         if (!strcmp(argv[0], "class"))
81         {
82             data1_varclass *r;
83
84             if (argc != 3)
85             {
86                 logf(LOG_FATAL, "%s: malformed class directive", file);
87                 fclose(f);
88                 return 0;
89             }
90             *classp = r = zclass = (data1_varclass *)nmem_malloc(mem, sizeof(*r));
91             r->set = res;
92             r->zclass = atoi(argv[1]);
93             r->name = nmem_strdup(mem, argv[2]);
94             r->types = 0;
95             typep = &r->types;
96             r->next = 0;
97             classp = &r->next;
98         }
99         else if (!strcmp(argv[0], "type"))
100         {
101             data1_vartype *r;
102
103             if (!typep)
104             {
105                 logf(LOG_WARN, "%s: class directive must precede type", file);
106                 fclose(f);
107                 return 0;
108             }
109             if (argc != 4)
110             {
111                 logf(LOG_WARN, "%s: Malformed type directive", file);
112                 fclose(f);
113                 return 0;
114             }
115             *typep = r = (data1_vartype *)nmem_malloc(mem, sizeof(*r));
116             r->name = nmem_strdup(mem, argv[2]);
117             r->zclass = zclass;
118             r->type = atoi(argv[1]);
119             if (!(r->datatype = data1_maptype (dh, argv[3])))
120             {
121                 logf(LOG_WARN, "%s: Unknown datatype '%s'", file, argv[3]);
122                 fclose(f);
123                 return 0;
124             }
125             r->next = 0;
126             typep = &r->next;
127         }
128         else if (!strcmp(argv[0], "name"))
129         {
130             if (argc != 2)
131             {
132                 logf(LOG_WARN, "%s name: Expected 1 argument", file);
133                 fclose(f);
134                 return 0;
135             }
136             res->name = nmem_strdup(mem, argv[1]);
137         }
138         else if (!strcmp(argv[0], "reference"))
139         {
140             if (argc != 2)
141             {
142                 logf(LOG_WARN, "%s: reference: Expected 1 argument", file);
143                 fclose(f);
144                 return 0;
145             }
146             if ((res->reference = oid_getvalbyname(argv[1])) == VAL_NONE)
147             {
148                 logf(LOG_WARN, "Unknown reference '%s' in %s", argv[1], file);
149                 fclose(f);
150                 return 0;
151             }
152         }
153         else 
154             logf(LOG_WARN, "varset: Unknown directive '%s' in %s", argv[0],
155                 file);
156
157     fclose(f);
158     return res;
159 }