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