f42f81f4e9dc4bb2f660f8cac00569e5b15253b5
[yaz-moved-to-github.git] / asn / prt-dia.c
1 /*
2  * Copyright (c) 1995, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: prt-dia.c,v $
7  * Revision 1.2  1995-09-27 15:02:41  quinn
8  * Modified function heads & prototypes.
9  *
10  * Revision 1.1  1995/08/29  11:19:31  quinn
11  * Added Diagnostic Format
12  *
13  *
14  */
15
16 #include <proto.h>
17
18 int z_TooMany(ODR o, Z_TooMany **p, int opt)
19 {
20     if (!odr_sequence_begin(o, p, sizeof(**p)))
21         return opt && odr_ok(o);
22     return
23         odr_implicit(o, odr_integer, &(*p)->tooManyWhat, ODR_CONTEXT, 1, 0) &&
24         odr_implicit(o, odr_integer, &(*p)->max, ODR_CONTEXT, 2, 1) &&
25         odr_sequence_end(o);
26 }
27
28 int z_BadSpec(ODR o, Z_BadSpec **p, int opt)
29 {
30     if (!odr_sequence_begin(o, p, sizeof(**p)))
31         return opt && odr_ok(o);
32     return
33         odr_implicit(o, z_Specification, &(*p)->spec, ODR_CONTEXT, 1, 0) &&
34         odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 2, 1) &&
35         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
36         (odr_sequence_of(o, z_Specification, &(*p)->goodOnes,
37             &(*p)->num_goodOnes) || odr_ok(o)) &&
38         odr_sequence_end(o);
39 }
40
41 int z_DbUnavailWhy(ODR o, Z_DbUnavailWhy **p, int opt)
42 {
43     if (!odr_sequence_begin(o, p, sizeof(**p)))
44         return opt && odr_ok(o);
45     return
46         odr_implicit(o, odr_integer, &(*p)->reasonCode, ODR_CONTEXT, 1, 1) &&
47         odr_implicit(o, z_InternationalString, &(*p)->message, ODR_CONTEXT,
48             2, 1) &&
49         odr_sequence_end(o);
50 }
51
52 int z_DbUnavail(ODR o, Z_DbUnavail **p, int opt)
53 {
54     if (!odr_sequence_begin(o, p, sizeof(**p)))
55         return opt && odr_ok(o);
56     return
57         odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 1, 0) &&
58         odr_implicit(o, z_DbUnavailWhy, &(*p)->why, ODR_CONTEXT, 2, 0) &&
59         odr_sequence_end(o);
60 }
61
62 int z_Attribute(ODR o, Z_Attribute **p, int opt)
63 {
64     if (!odr_sequence_begin(o, p, sizeof(**p)))
65         return opt && odr_ok(o);
66     return
67         odr_implicit(o, odr_oid, &(*p)->id, ODR_CONTEXT, 1, 0) &&
68         odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 2, 1) &&
69         odr_implicit(o, odr_integer, &(*p)->value, ODR_CONTEXT, 3, 1) &&
70         odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 4, 1) &&
71         odr_sequence_end(o);
72 }
73
74 int z_AttCombo(ODR o, Z_AttCombo **p, int opt)
75 {
76     if (!odr_sequence_begin(o, p, sizeof(**p)))
77         return opt && odr_ok(o);
78     return
79         odr_implicit(o, z_AttributeList, &(*p)->unsupportedCombination,
80             ODR_CONTEXT, 1, 0) &&
81         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
82         (odr_sequence_of(o, z_AttributeList, &(*p)->alternatives,
83             &(*p)->num_alternatives) || odr_ok(o)) &&
84         odr_sequence_end(o);
85 }
86
87 int z_DiagTerm(ODR o, Z_DiagTerm **p, int opt)
88 {
89     if (!odr_sequence_begin(o, p, sizeof(**p)))
90         return opt && odr_ok(o);
91     return
92         odr_implicit(o, odr_integer, &(*p)->problem, ODR_CONTEXT, 1, 1) &&
93         odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 2, 0) &&
94         odr_sequence_end(o);
95 }
96
97 int z_Proximity(ODR o, Z_Proximity **p, int opt)
98 {
99     static Odr_arm arm[] =
100     {
101         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Proximity_resultSets, odr_null},
102         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Proximity_badSet,
103             z_InternationalString},
104         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Proximity_relation, odr_integer},
105         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Proximity_unit, odr_integer},
106         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Proximity_distance, odr_integer},
107         {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_Proximity_attributes, z_AttributeList},
108         {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Proximity_ordered, odr_null},
109         {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Proximity_exclusion, odr_null},
110         {-1, -1, -1, -1, 0}
111     };
112
113     if (o->direction == ODR_DECODE)
114         *p = odr_malloc(o, sizeof(**p));
115     else if (!*p)
116         return opt;
117     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
118         return 1;
119     *p = 0;
120     return opt && odr_ok(o);
121 }
122
123 int z_AttrListList(ODR o, Z_AttrListList **p, int opt)
124 {
125     if (o->direction == ODR_DECODE)
126         *p = odr_malloc(o, sizeof(**p));
127     else if (!*p)
128         return opt;
129     if (odr_sequence_of(o, z_AttributeList, &(*p)->lists, &(*p)->num_lists))
130         return 1;
131     *p = 0;
132     return opt && odr_ok(o);
133 }
134
135 int z_Scan(ODR o, Z_Scan **p, int opt)
136 {
137     static Odr_arm arm[] =
138     {
139         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ScanD_nonZeroStepSize, odr_null},
140         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ScanD_specifiedStepSize, odr_null},
141         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ScanD_termList1, odr_null},
142         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_ScanD_termList2, z_AttrListList},
143         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_ScanD_posInResponse, odr_integer},
144         {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_ScanD_resources, odr_null},
145         {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_ScanD_endOfList, odr_null},
146         {-1, -1, -1, -1, 0}
147     };
148
149     if (o->direction == ODR_DECODE)
150         *p = odr_malloc(o, sizeof(**p));
151     else if (!*p)
152         return opt;
153     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
154         return 1;
155     *p = 0;
156     return opt && odr_ok(o);
157 }
158
159 int z_StringList(ODR o, Z_StringList **p, int opt)
160 {
161     if (o->direction == ODR_DECODE)
162         *p = odr_malloc(o, sizeof(**p));
163     else if (!*p)
164         return opt;
165     if (odr_sequence_of(o, z_InternationalString, &(*p)->strings,
166         &(*p)->num_strings))
167         return 1;
168     *p = 0;
169     return opt && odr_ok(o);
170 }
171
172 int z_Sort(ODR o, Z_Sort **p, int opt)
173 {
174     static Odr_arm arm[] =
175     {
176         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortD_sequence, odr_null},
177         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortD_noRsName, odr_null},
178         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortD_tooMany, odr_integer},
179         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortD_incompatible, odr_null},
180         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_SortD_generic, odr_null},
181         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_SortD_dbSpecific, odr_null},
182 #if 0
183         {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_SortD_sortElement, z_SortElement},
184 #endif
185         {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_SortD_key, odr_integer},
186         {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_SortD_action, odr_null},
187         {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_SortD_illegal, odr_integer},
188         {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_SortD_inputTooLarge, z_StringList},
189         {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_SortD_aggregateTooLarge, odr_null},
190         {-1, -1, -1, -1, 0}
191     };
192
193     if (o->direction == ODR_DECODE)
194         *p = odr_malloc(o, sizeof(**p));
195     else if (!*p)
196         return opt;
197     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
198         return 1;
199     *p = 0;
200     return opt && odr_ok(o);
201 }
202
203 int z_Segmentation(ODR o, Z_Segmentation **p, int opt)
204 {
205     static Odr_arm arm[] =
206     {
207         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SegmentationD_segments, odr_null},
208         {-1, -1, -1, -1, 0}
209     };
210
211     if (o->direction == ODR_DECODE)
212         *p = odr_malloc(o, sizeof(**p));
213     else if (!*p)
214         return opt;
215     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
216         return 1;
217     *p = 0;
218     return opt && odr_ok(o);
219 }
220
221 int z_ExtServices(ODR o, Z_ExtServices **p, int opt)
222 {
223     static Odr_arm arm[] =
224     {
225         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ExtServicesD_req, odr_integer},
226         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ExtServicesD_permission, odr_integer},
227         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ExtServicesD_immediate, odr_integer},
228         {-1, -1, -1, -1, 0}
229     };
230
231     if (o->direction == ODR_DECODE)
232         *p = odr_malloc(o, sizeof(**p));
233     else if (!*p)
234         return opt;
235     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
236         return 1;
237     *p = 0;
238     return opt && odr_ok(o);
239 }
240
241 int z_OidList(ODR o, Z_OidList **p, int opt)
242 {
243     if (o->direction == ODR_DECODE)
244         *p = odr_malloc(o, sizeof(**p));
245     else if (!*p)
246         return opt;
247     if (odr_sequence_of(o, odr_oid, &(*p)->oids, &(*p)->num_oids))
248         return 1;
249     *p = 0;
250     return opt && odr_ok(o);
251 }
252
253 int z_AccessCtrl(ODR o, Z_AccessCtrl **p, int opt)
254 {
255     static Odr_arm arm[] =
256     {
257         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_AccessCtrlD_noUser, odr_null},
258         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_AccessCtrlD_refused, odr_null},
259         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AccessCtrlD_simple, odr_null},
260         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AccessCtrlD_oid, z_OidList},
261         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_AccessCtrlD_alternative, z_OidList},
262         {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_AccessCtrlD_pwdInv, odr_null},
263         {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_AccessCtrlD_pwdExp, odr_null},
264         {-1, -1, -1, -1, 0}
265     };
266
267     if (o->direction == ODR_DECODE)
268         *p = odr_malloc(o, sizeof(**p));
269     else if (!*p)
270         return opt;
271     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
272         return 1;
273     *p = 0;
274     return opt && odr_ok(o);
275 }
276
277 int z_RecordSyntax(ODR o, Z_RecordSyntax **p, int opt)
278 {
279     if (!odr_sequence_begin(o, p, sizeof(**p)))
280         return opt && odr_ok(o);
281     return
282         odr_implicit(o, odr_oid, &(*p)->unsupportedSyntax, ODR_CONTEXT, 1, 0) &&
283         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
284         (odr_sequence_of(o, odr_oid, &(*p)->suggestedAlternatives,
285             &(*p)->num_suggestedAlternatives) || odr_ok(o)) &&
286         odr_sequence_end(o);
287 }
288
289 int z_DiagFormat(ODR o, Z_DiagFormat **p, int opt)
290 {
291     static Odr_arm arm[] =
292     {
293         {ODR_IMPLICIT, ODR_CONTEXT, 1000, Z_DiagFormat_tooMany, z_TooMany},
294         {ODR_IMPLICIT, ODR_CONTEXT, 1001, Z_DiagFormat_badSpec, z_BadSpec},
295         {ODR_IMPLICIT, ODR_CONTEXT, 1002, Z_DiagFormat_dbUnavail, z_DbUnavail},
296         {ODR_IMPLICIT, ODR_CONTEXT, 1003, Z_DiagFormat_unSupOp, odr_integer},
297         {ODR_IMPLICIT, ODR_CONTEXT, 1004, Z_DiagFormat_attribute, z_Attribute},
298         {ODR_IMPLICIT, ODR_CONTEXT, 1005, Z_DiagFormat_attCombo, z_AttCombo},
299         {ODR_IMPLICIT, ODR_CONTEXT, 1006, Z_DiagFormat_term, z_DiagTerm},
300         {ODR_EXPLICIT, ODR_CONTEXT, 1007, Z_DiagFormat_proximity, z_Proximity},
301         {ODR_EXPLICIT, ODR_CONTEXT, 1008, Z_DiagFormat_scan, z_Scan},
302         {ODR_EXPLICIT, ODR_CONTEXT, 1009, Z_DiagFormat_sort, z_Sort},
303         {ODR_EXPLICIT, ODR_CONTEXT, 1010, Z_DiagFormat_segmentation,
304             z_Segmentation},
305         {ODR_EXPLICIT, ODR_CONTEXT, 1011, Z_DiagFormat_extServices,
306             z_ExtServices},
307         {ODR_EXPLICIT, ODR_CONTEXT, 1012, Z_DiagFormat_accessCtrl,
308             z_AccessCtrl},
309         {ODR_IMPLICIT, ODR_CONTEXT, 1013, Z_DiagFormat_recordSyntax,
310             z_RecordSyntax},
311         {-1, -1, -1, -1, 0}
312     };
313
314     if (o->direction == ODR_DECODE)
315         *p = odr_malloc(o, sizeof(**p));
316     else if (!*p)
317         return opt;
318     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
319         return 1;
320     *p = 0;
321     return opt && odr_ok(o);
322 }
323
324 int z_Diagnostic(ODR o, Z_Diagnostic **p, int opt)
325 {
326     static Odr_arm arm[] =
327     {
328         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Diagnostic_defaultDiagRec,
329             z_DefaultDiagFormat},
330         {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Diagnostic_explicitDiagnostic,
331             z_DiagFormat},
332         {-1, -1, -1, -1, 0}
333     };
334
335     if (o->direction == ODR_DECODE)
336         *p = odr_malloc(o, sizeof(**p));
337     else if (!*p)
338         return opt;
339     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
340         return 1;
341     *p = 0;
342     return opt && odr_ok(o);
343 }
344
345 int z_DiagnosticUnit(ODR o, Z_DiagnosticUnit **p, int opt)
346 {
347     if (!odr_sequence_begin(o, p, sizeof(**p)))
348         return opt && odr_ok(o);
349     return
350         odr_explicit(o, z_Diagnostic, &(*p)->diagnostic, ODR_CONTEXT, 1, 1) &&
351         odr_implicit(o, z_InternationalString, &(*p)->message, ODR_CONTEXT,
352             2, 1) &&
353         odr_sequence_end(o);
354 }
355
356 int MDF z_DiagnosticFormat(ODR o, Z_DiagnosticFormat **p, int opt)
357 {
358     if (o->direction == ODR_DECODE)
359         *p = odr_malloc(o, sizeof(**p));
360     else if (!*p)
361         return opt;
362     if (odr_sequence_of(o, z_DiagnosticUnit, &(*p)->diagnostics,
363         &(*p)->num_diagnostics))
364         return 1;
365     *p = 0;
366     return opt && odr_ok(o);
367 }