Changed code so that it compiles as C++.
[yaz-moved-to-github.git] / asn / prt-exp.c
1 /*
2  * Copyright (c) 1995, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: prt-exp.c,v $
7  * Revision 1.9  1998-02-11 11:53:32  adam
8  * Changed code so that it compiles as C++.
9  *
10  * Revision 1.8  1996/01/02 11:46:41  quinn
11  * Changed 'operator' to 'roperator' to avoid C++ conflict.
12  *
13  * Revision 1.7  1995/12/14  16:28:07  quinn
14  * More explain stuff.
15  *
16  * Revision 1.6  1995/12/14  11:09:09  quinn
17  * Fixed bug in tagging.
18  *
19  * Revision 1.5  1995/12/05  11:15:50  quinn
20  * Work.
21  *
22  * Revision 1.4  1995/09/29  17:11:54  quinn
23  * Smallish
24  *
25  * Revision 1.3  1995/09/27  15:02:42  quinn
26  * Modified function heads & prototypes.
27  *
28  * Revision 1.2  1995/08/15  11:59:43  quinn
29  * Updated External
30  *
31  * Revision 1.1  1995/08/10  08:54:02  quinn
32  * Added Explain
33  *
34  *
35  */
36
37 #include <proto.h>
38
39 int z_LanguageCode(ODR o, char **p, int opt);
40 int z_CommonInfo(ODR o, Z_CommonInfo **p, int opt);
41 int z_HumanStringUnit(ODR o, Z_HumanStringUnit **p, int opt);
42 int z_HumanString(ODR o, Z_HumanString **p, int opt);
43 int z_IconObjectUnit(ODR o, Z_IconObjectUnit **p, int opt);
44 int z_IconObject(ODR o, Z_IconObject **p, int opt);
45 int z_ContactInfo(ODR o, Z_ContactInfo **p, int opt);
46 int z_NetworkAddressIA(ODR o, Z_NetworkAddressIA **p, int opt);
47 int z_NetworkAddressOPA(ODR o, Z_NetworkAddressOPA **p, int opt);
48 int z_NetworkAddressOther(ODR o, Z_NetworkAddressOther **p, int opt);
49 int z_NetworkAddress(ODR o, Z_NetworkAddress **p, int opt);
50 int z_AccessInfo(ODR o, Z_AccessInfo **p, int opt);
51 int z_QueryTypeDetails(ODR o, Z_QueryTypeDetails **p, int opt);
52 int z_PrivateCapOperator(ODR o, Z_PrivateCapOperator **p, int opt);
53 int z_PrivateCapabilities(ODR o, Z_PrivateCapabilities **p, int opt);
54 int z_RpnCapabilities(ODR o, Z_RpnCapabilities **p, int opt);
55 int z_Iso8777Capabilities(ODR o, Z_Iso8777Capabilities **p, int opt);
56 int z_ProxSupportPrivate(ODR o, Z_ProxSupportPrivate **p, int opt);
57 int z_ProxSupportUnit(ODR o, Z_ProxSupportUnit **p, int opt);
58 int z_ProximitySupport(ODR o, Z_ProximitySupport **p, int opt);
59 int z_SearchKey(ODR o, Z_SearchKey **p, int opt);
60 int z_AccessRestrictionsUnit(ODR o, Z_AccessRestrictionsUnit **p, int opt);
61 int z_AccessRestrictions(ODR o, Z_AccessRestrictions **p, int opt);
62 int z_CostsOtherCharge(ODR o, Z_CostsOtherCharge **p, int opt);
63 int z_Costs(ODR o, Z_Costs **p, int opt);
64 int z_Charge(ODR o, Z_Charge **p, int opt);
65 int z_DatabaseList(ODR o, Z_DatabaseList **p, int opt);
66 int z_AttributeCombinations(ODR o, Z_AttributeCombinations **p, int opt);
67 int z_AttributeCombination(ODR o, Z_AttributeCombination **p, int opt);
68 int z_AttributeValueList(ODR o, Z_AttributeValueList **p, int opt);
69 int z_AttributeOccurrence(ODR o, Z_AttributeOccurrence **p, int opt);
70 int z_AttributeValue(ODR o, Z_AttributeValue **p, int opt);
71 int z_TargetInfo(ODR o, Z_TargetInfo **p, int opt);
72 int z_DatabaseInfo(ODR o, Z_DatabaseInfo **p, int opt);
73 int z_TagTypeMapping(ODR o, Z_TagTypeMapping **p, int opt);
74 int z_SchemaInfo(ODR o, Z_SchemaInfo **p, int opt);
75 int z_ElementInfo(ODR o, Z_ElementInfo **p, int opt);
76 int z_PathUnit(ODR o, Z_PathUnit **p, int opt);
77 int z_Path(ODR o, Z_Path **p, int opt);
78 int z_ElementInfoList(ODR o, Z_Path **p, int opt);
79 int z_ElementDataType(ODR o, Z_ElementDataType **p, int opt);
80 int z_TagSetInfoElements(ODR o, Z_TagSetInfoElements **p, int opt);
81 int z_TagSetInfo(ODR o, Z_TagSetInfo **p, int opt);
82 int z_RecordSyntaxInfo(ODR o, Z_RecordSyntaxInfo **p, int opt);
83 int z_AttributeSetInfo(ODR o, Z_AttributeSetInfo **p, int opt);
84 int z_AttributeType(ODR o, Z_AttributeType **p, int opt);
85 int z_AttributeDescription(ODR o, Z_AttributeDescription **p, int opt);
86 int z_TermListElement(ODR o, Z_TermListElement **p, int opt);
87 int z_TermListInfo(ODR o, Z_TermListInfo **p, int opt);
88 int z_ExtendedServicesInfo(ODR o, Z_ExtendedServicesInfo **p, int opt);
89 int z_AttributeDetails(ODR o, Z_AttributeDetails **p, int opt);
90 int z_AttributeSetDetails(ODR o, Z_AttributeSetDetails **p, int opt);
91 int z_AttributeTypeDetails(ODR o, Z_AttributeTypeDetails **p, int opt);
92 int z_OmittedAttributeInterpretation(ODR o, Z_OmittedAttributeInterpretation **p, int opt);
93 int z_EScanInfo(ODR o, Z_EScanInfo **p, int opt);
94 int z_TermListDetails(ODR o, Z_TermListDetails **p, int opt);
95 int z_ElementSetDetails(ODR o, Z_ElementSetDetails **p, int opt);
96 int z_RetrievalRecordDetails(ODR o, Z_RetrievalRecordDetails **p, int opt);
97 int z_PerElementDetails(ODR o, Z_PerElementDetails **p, int opt);
98 int z_RecordTag(ODR o, Z_RecordTag **p, int opt);
99 int z_SortDetails(ODR o, Z_SortDetails **p, int opt);
100 int z_SortKeyDetailsSortType(ODR o, Z_SortKeyDetailsSortType **p, int opt);
101 int z_SortKeyDetails(ODR o, Z_SortKeyDetails **p, int opt);
102 int z_ProcessingInformation(ODR o, Z_ProcessingInformation **p, int opt);
103 int z_VariantSetInfo(ODR o, Z_VariantSetInfo **p, int opt);
104 int z_VariantClass(ODR o, Z_VariantClass **p, int opt);
105 int z_VariantType(ODR o, Z_VariantType **p, int opt);
106 int z_VariantValue(ODR o, Z_VariantValue **p, int opt);
107 int z_ValueSetEnumerated(ODR o, Z_ValueSetEnumerated **p, int opt);
108 int z_ValueSet(ODR o, Z_ValueSet **p, int opt);
109 int z_ValueRange(ODR o, Z_ValueRange **p, int opt);
110 int z_ValueDescription(ODR o, Z_ValueDescription **p, int opt);
111 int z_UnitInfo(ODR o, Z_UnitInfo **p, int opt);
112 int z_UnitType(ODR o, Z_UnitType **p, int opt);
113 int z_Units(ODR o, Z_Units **p, int opt);
114 int z_CategoryList(ODR o, Z_CategoryList **p, int opt);
115 int z_CategoryInfo(ODR o, Z_CategoryInfo **p, int opt);
116 int z_ExplainRecord(ODR o, Z_ExplainRecord **p, int opt);
117
118 int z_LanguageCode(ODR o, char **p, int opt)
119 {
120     return z_InternationalString(o, p, opt);
121 }
122
123 int z_CommonInfo(ODR o, Z_CommonInfo **p, int opt)
124 {
125     if (!odr_sequence_begin(o, p, sizeof(**p)))
126         return opt && odr_ok(o);
127     return
128         odr_implicit(o, odr_generalizedtime, &(*p)->dateAdded, ODR_CONTEXT, 0, 1) &&
129         odr_implicit(o, odr_generalizedtime, &(*p)->dateChanged, ODR_CONTEXT, 1, 1) &&
130         odr_implicit(o, odr_generalizedtime, &(*p)->expiry, ODR_CONTEXT, 2, 1) &&
131         odr_implicit(o, z_LanguageCode, &(*p)->humanStringLanguage, ODR_CONTEXT, 3, 1) &&
132         z_OtherInformation(o, &(*p)->otherInfo, 1) &&
133         odr_sequence_end(o);
134 }
135
136 int z_HumanStringUnit(ODR o, Z_HumanStringUnit **p, int opt)
137 {
138     if (!odr_sequence_begin(o, p, sizeof(**p)))
139         return opt && odr_ok(o);
140     return
141         odr_implicit(o, z_LanguageCode, &(*p)->language, ODR_CONTEXT, 0, 1) &&
142         odr_implicit(o, z_InternationalString, &(*p)->text, ODR_CONTEXT,
143             1, 0) &&
144         odr_sequence_end(o);
145 }
146
147 int z_HumanString(ODR o, Z_HumanString **p, int opt)
148 {
149     if (!odr_initmember(o, p, sizeof(**p)))
150         return opt && odr_ok(o);
151     if (odr_sequence_of(o, (Odr_fun)z_HumanStringUnit, &(*p)->strings,
152         &(*p)->num_strings))
153         return 1;
154     *p = 0;
155     return opt && odr_ok(o);
156 }
157
158 int z_IconObjectUnit(ODR o, Z_IconObjectUnit **p, int opt)
159 {
160     static Odr_arm arm[] = 
161     {
162         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IconObject_ianaType,
163             z_InternationalString},
164         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IconObject_z3950type,
165             z_InternationalString},
166         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IconObject_otherType,
167             z_InternationalString},
168         {-1, -1, -1, -1, 0}
169     };
170
171     if (!odr_sequence_begin(o, p, sizeof(**p)))
172         return opt && odr_ok(o);
173     return
174         odr_constructed_begin(o, &(*p)->bodyType, ODR_CONTEXT, 1) &&
175         odr_choice(o, arm, &(*p)->bodyType, &(*p)->which) &&
176         odr_constructed_end(o) &&
177         odr_implicit(o, odr_octetstring, &(*p)->content, ODR_CONTEXT, 2, 0) &&
178         odr_sequence_end(o);
179 }
180
181 int z_IconObject(ODR o, Z_IconObject **p, int opt)
182 {
183     if (!odr_initmember(o, p, sizeof(**p)))
184         return opt && odr_ok(o);
185     if (odr_sequence_of(o, (Odr_fun)z_IconObjectUnit, &(*p)->iconUnits,
186         &(*p)->num_iconUnits))
187         return 1;
188     *p = 0;
189     return opt && odr_ok(o);
190 }
191
192 int z_ContactInfo(ODR o, Z_ContactInfo **p, int opt)
193 {
194     if (!odr_sequence_begin(o, p, sizeof(**p)))
195         return opt && odr_ok(o);
196     return
197         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
198         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
199         odr_implicit(o, z_HumanString, &(*p)->address, ODR_CONTEXT, 2, 1) &&
200         odr_implicit(o, z_InternationalString, &(*p)->email, ODR_CONTEXT, 3, 1) &&
201         odr_implicit(o, z_InternationalString, &(*p)->phone, ODR_CONTEXT, 4, 1) &&
202         odr_sequence_end(o);
203 }
204
205 int z_NetworkAddressIA(ODR o, Z_NetworkAddressIA **p, int opt)
206 {
207     if (!odr_sequence_begin(o, p, sizeof(**p)))
208         return opt;
209     return
210         odr_implicit(o, z_InternationalString, &(*p)->hostAddress, ODR_CONTEXT, 0, 0) &&
211         odr_implicit(o, odr_integer, &(*p)->port, ODR_CONTEXT, 1, 0) &&
212         odr_sequence_end(o);
213 }
214
215 int z_NetworkAddressOPA(ODR o, Z_NetworkAddressOPA **p, int opt)
216 {
217     if (!odr_sequence_begin(o, p, sizeof(**p)))
218         return opt;
219     return
220         odr_implicit(o, z_InternationalString, &(*p)->pSel, ODR_CONTEXT, 0, 0) &&
221         odr_implicit(o, z_InternationalString, &(*p)->sSel, ODR_CONTEXT, 1, 1) &&
222         odr_implicit(o, z_InternationalString, &(*p)->tSel, ODR_CONTEXT, 2, 1) &&
223         odr_implicit(o, z_InternationalString, &(*p)->nSap, ODR_CONTEXT, 3, 0) &&
224         odr_sequence_end(o);
225 }
226
227 int z_NetworkAddressOther(ODR o, Z_NetworkAddressOther **p, int opt)
228 {
229     if (!odr_sequence_begin(o, p, sizeof(**p)))
230         return opt;
231     return
232         odr_implicit(o, z_InternationalString, &(*p)->type, ODR_CONTEXT, 0, 0) &&
233         odr_implicit(o, z_InternationalString, &(*p)->address, ODR_CONTEXT, 1, 0) &&
234         odr_sequence_end(o);
235 }
236
237 int z_NetworkAddress(ODR o, Z_NetworkAddress **p, int opt)
238 {
239     static Odr_arm arm[] =
240     {
241         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_NetworkAddress_iA,
242             (Odr_fun)z_NetworkAddressIA},
243         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_NetworkAddress_oPA,
244             (Odr_fun)z_NetworkAddressOPA},
245         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_NetworkAddress_other,
246             (Odr_fun)z_NetworkAddressOther},
247         {-1, -1, -1, -1, 0}
248     };
249
250     if (!odr_initmember(o, p, sizeof(**p)))
251         return opt && odr_ok(o);
252     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
253         return 1;
254     *p = 0;
255     return opt && odr_ok(o);
256 }
257
258 int z_AccessInfo(ODR o, Z_AccessInfo **p, int opt)
259 {
260     if (!odr_sequence_begin(o, p, sizeof(**p)))
261         return opt && odr_ok(o);
262     return
263         odr_implicit_settag(o, ODR_CONTEXT, 0) &&
264         (odr_sequence_of(o, (Odr_fun)z_QueryTypeDetails, &(*p)->queryTypesSupported,
265             &(*p)->num_queryTypesSupported) || odr_ok(o)) &&
266         odr_implicit_settag(o, ODR_CONTEXT, 1) &&
267         (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->diagnosticsSets,
268             &(*p)->num_diagnosticsSets) || odr_ok(o)) &&
269         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
270         (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->attributeSetIds,
271             &(*p)->num_attributeSetIds) || odr_ok(o)) &&
272         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
273         (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->schemas, &(*p)->num_schemas) ||
274             odr_ok(o)) &&
275         odr_implicit_settag(o, ODR_CONTEXT, 4) &&
276         (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->recordSyntaxes,
277             &(*p)->num_recordSyntaxes) || odr_ok(o)) &&
278         odr_implicit_settag(o, ODR_CONTEXT, 5) &&
279         (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->resourceChallenges,
280             &(*p)->num_resourceChallenges) || odr_ok(o)) &&
281         odr_implicit(o, z_AccessRestrictions, &(*p)->restrictedAccess,
282             ODR_CONTEXT, 6, 1) &&
283         odr_implicit(o, z_Costs, &(*p)->costInfo, ODR_CONTEXT, 8, 1) &&
284         odr_implicit_settag(o, ODR_CONTEXT, 9) &&
285         (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->variantSets,
286             &(*p)->num_variantSets) || odr_ok(o)) &&
287         odr_implicit_settag(o, ODR_CONTEXT, 10) &&
288         (odr_sequence_of(o, (Odr_fun)z_ElementSetName, &(*p)->elementSetNames,
289             &(*p)->num_elementSetNames) || odr_ok(o)) &&
290         odr_implicit_settag(o, ODR_CONTEXT, 11) &&
291         (odr_sequence_of(o, (Odr_fun)z_InternationalString, &(*p)->unitSystems,
292             &(*p)->num_unitSystems) || odr_ok(o)) &&
293         odr_sequence_end(o);
294 }
295
296 int z_QueryTypeDetails(ODR o, Z_QueryTypeDetails **p, int opt)
297 {
298     static Odr_arm arm[] =
299     {
300         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_QueryTypeDetails_private,
301             (Odr_fun)z_PrivateCapabilities},
302         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_QueryTypeDetails_rpn,
303             (Odr_fun)z_RpnCapabilities},
304         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_QueryTypeDetails_iso8777,
305             (Odr_fun)z_Iso8777Capabilities},
306         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_QueryTypeDetails_z3958,
307             (Odr_fun)z_HumanString},
308         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_QueryTypeDetails_erpn,
309             (Odr_fun)z_RpnCapabilities},
310         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_QueryTypeDetails_rankedList,
311             (Odr_fun)z_HumanString},
312         {-1, -1, -1, -1, 0}
313     };
314
315     if (!odr_initmember(o, p, sizeof(**p)))
316         return opt && odr_ok(o);
317     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
318         return 1;
319     *p = 0;
320     return opt && odr_ok(o);
321 }
322
323 int z_PrivateCapOperator(ODR o, Z_PrivateCapOperator **p, int opt)
324 {
325     if (!odr_sequence_begin(o, p, sizeof(**p)))
326         return opt && odr_ok(o);
327     return
328         odr_implicit(o, z_InternationalString, &(*p)->roperator, ODR_CONTEXT, 0, 0) &&
329         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
330         odr_sequence_end(o);
331 }
332
333 int z_PrivateCapabilities(ODR o, Z_PrivateCapabilities **p, int opt)
334 {
335     if (!odr_sequence_begin(o, p, sizeof(**p)))
336         return opt && odr_ok(o);
337     return
338         odr_implicit_settag(o, ODR_CONTEXT, 0) &&
339         (odr_sequence_of(o, (Odr_fun)z_PrivateCapOperator, &(*p)->operators,
340             &(*p)->num_operators) || odr_ok(o)) &&
341         odr_implicit_settag(o, ODR_CONTEXT, 1) &&
342         (odr_sequence_of(o, (Odr_fun)z_SearchKey, &(*p)->searchKeys,
343             &(*p)->num_searchKeys) || odr_ok(o)) &&
344         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
345         (odr_sequence_of(o, (Odr_fun)z_HumanString, &(*p)->description,
346             &(*p)->num_description) || odr_ok(o)) &&
347         odr_sequence_end(o);
348 }
349
350 int z_RpnCapabilities(ODR o, Z_RpnCapabilities **p, int opt)
351 {
352     if (!odr_sequence_begin(o, p, sizeof(**p)))
353         return opt && odr_ok(o);
354     return
355         odr_implicit_settag(o, ODR_CONTEXT, 0) &&
356         (odr_sequence_of(o, (Odr_fun)odr_integer, &(*p)->operators, &(*p)->num_operators) || odr_ok(o)) &&
357         odr_implicit(o, odr_bool, &(*p)->resultSetAsOperandSupported,
358             ODR_CONTEXT, 1, 0) &&
359         odr_implicit(o, odr_bool, &(*p)->restrictionOperandSupported,
360             ODR_CONTEXT, 2, 0) &&
361         odr_implicit(o, z_ProximitySupport, &(*p)->proximity, ODR_CONTEXT,
362             3, 1) &&
363         odr_sequence_end(o);
364 }
365
366 int z_Iso8777Capabilities(ODR o, Z_Iso8777Capabilities **p, int opt)
367 {
368     if (!odr_sequence_begin(o, p, sizeof(**p)))
369         return opt && odr_ok(o);
370     return
371         odr_implicit_settag(o, ODR_CONTEXT, 0) &&
372         odr_sequence_of(o, (Odr_fun)z_SearchKey, &(*p)->searchKeys,
373             &(*p)->num_searchKeys) &&
374         odr_implicit(o, z_HumanString, &(*p)->restrictions, ODR_CONTEXT,
375             1, 1) &&
376         odr_sequence_end(o);
377 }
378
379 int z_ProxSupportPrivate(ODR o, Z_ProxSupportPrivate **p, int opt)
380 {
381     if (!odr_sequence_begin(o, p, sizeof(**p)))
382         return opt && odr_ok(o);
383     return
384         odr_implicit(o, odr_integer, &(*p)->unit, ODR_CONTEXT, 0, 0) &&
385         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
386         odr_sequence_end(o);
387 }
388
389 int z_ProxSupportUnit(ODR o, Z_ProxSupportUnit **p, int opt)
390 {
391     static Odr_arm arm[] =
392     {
393         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ProxSupportUnit_known,
394             (Odr_fun)odr_integer},
395         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ProxSupportUnit_private,
396             (Odr_fun)z_ProxSupportPrivate},
397         {-1, -1, -1, -1, 0}
398     };
399
400     if (!odr_initmember(o, p, sizeof(**p)))
401         return opt && odr_ok(o);
402     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
403         return 1;
404     *p = 0;
405     return opt && odr_ok(o);
406 }
407
408 int z_ProximitySupport(ODR o, Z_ProximitySupport **p, int opt)
409 {
410     if (!odr_sequence_begin(o, p, sizeof(**p)))
411         return opt && odr_ok(o);
412     return
413         odr_implicit(o, odr_bool, &(*p)->anySupport, ODR_CONTEXT, 0, 0) &&
414         odr_implicit_settag(o, ODR_CONTEXT, 1) &&
415         (odr_sequence_of(o, (Odr_fun)z_ProxSupportUnit, &(*p)->unitsSupported,
416             &(*p)->num_unitsSupported) || odr_ok(o)) &&
417         odr_sequence_end(o);
418 }
419
420 int z_SearchKey(ODR o, Z_SearchKey **p, int opt)
421 {
422     if (!odr_sequence_begin(o, p, sizeof(**p)))
423         return opt && odr_ok(o);
424     return
425         odr_implicit(o, z_InternationalString, &(*p)->searchKey, ODR_CONTEXT, 0, 0) &&
426         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
427         odr_sequence_end(o);
428 }
429
430 int z_AccessRestrictionsUnit(ODR o, Z_AccessRestrictionsUnit **p, int opt)
431 {
432     if (!odr_sequence_begin(o, p, sizeof(**p)))
433         return opt && odr_ok(o);
434     return
435         odr_explicit(o, odr_integer, &(*p)->accessType, ODR_CONTEXT, 0, 0) &&
436         odr_implicit(o, z_HumanString, &(*p)->accessText, ODR_CONTEXT, 1, 1) &&
437         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
438         (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->accessChallenges,
439             &(*p)->num_accessChallenges) || odr_ok(o)) &&
440         odr_sequence_end(o);
441 }
442
443 int z_AccessRestrictions(ODR o, Z_AccessRestrictions **p, int opt)
444 {
445     if (!odr_initmember(o, p, sizeof(**p)))
446         return opt && odr_ok(o);
447     if (odr_sequence_of(o, (Odr_fun)z_AccessRestrictionsUnit, &(*p)->restrictions,
448         &(*p)->num_restrictions))
449         return 1;
450     *p = 0;
451     return opt && odr_ok(o);
452 }
453
454 int z_CostsOtherCharge(ODR o, Z_CostsOtherCharge **p, int opt)
455 {
456     if (!odr_sequence_begin(o, p, sizeof(**p)))
457         return opt && odr_ok(o);
458     return
459         odr_implicit(o, z_HumanString, &(*p)->forWhat, ODR_CONTEXT, 1, 0) &&
460         odr_implicit(o, z_Charge, &(*p)->charge, ODR_CONTEXT, 2, 1) &&
461         odr_sequence_end(o);
462 }
463         
464 int z_Costs(ODR o, Z_Costs **p, int opt)
465 {
466     if (!odr_sequence_begin(o, p, sizeof(**p)))
467         return opt && odr_ok(o);
468     return
469         odr_implicit(o, z_Charge, &(*p)->connectCharge, ODR_CONTEXT, 0, 1) &&
470         odr_implicit(o, z_Charge, &(*p)->connectTime, ODR_CONTEXT, 1, 1) &&
471         odr_implicit(o, z_Charge, &(*p)->displayCharge, ODR_CONTEXT, 2, 1) &&
472         odr_implicit(o, z_Charge, &(*p)->searchCharge, ODR_CONTEXT, 3, 1) &&
473         odr_implicit(o, z_Charge, &(*p)->subscriptCharge, ODR_CONTEXT, 4, 1) &&
474         odr_implicit_settag(o, ODR_CONTEXT, 5) &&
475         (odr_sequence_of(o, (Odr_fun)z_CostsOtherCharge, &(*p)->otherCharges,
476             &(*p)->num_otherCharges) || odr_ok(o)) &&
477         odr_sequence_end(o);
478 }
479
480 int z_Charge(ODR o, Z_Charge **p, int opt)
481 {
482     if (!odr_sequence_begin(o, p, sizeof(**p)))
483         return opt && odr_ok(o);
484     return
485         odr_implicit(o, z_IntUnit, &(*p)->cost, ODR_CONTEXT, 1, 0) &&
486         odr_implicit(o, z_Unit, &(*p)->perWhat, ODR_CONTEXT, 2, 1) &&
487         odr_implicit(o, z_HumanString, &(*p)->text, ODR_CONTEXT, 3, 1) &&
488         odr_sequence_end(o);
489 }
490
491 int z_DatabaseList(ODR o, Z_DatabaseList **p, int opt)
492 {
493     if (!odr_initmember(o, p, sizeof(**p)))
494         return opt && odr_ok(o);
495     if (odr_sequence_of(o, z_DatabaseName, &(*p)->databases,
496         &(*p)->num_databases))
497         return 1;
498     *p = 0;
499     return opt && odr_ok(o);
500 }
501
502 int z_AttributeCombinations(ODR o, Z_AttributeCombinations **p, int opt)
503 {
504     if (!odr_sequence_begin(o, p, sizeof(**p)))
505         return opt && odr_ok(o);
506     return
507         odr_implicit(o, odr_oid, &(*p)->defaultAttributeSet,
508             ODR_CONTEXT, 0, 0) &&
509         odr_implicit_settag(o, ODR_CONTEXT, 1) &&
510         odr_sequence_of(o, (Odr_fun)z_AttributeCombination, &(*p)->legalCombinations,
511             &(*p)->num_legalCombinations) &&
512         odr_sequence_end(o);
513 }
514
515 int z_AttributeCombination(ODR o, Z_AttributeCombination **p, int opt)
516 {
517     if (!odr_initmember(o, p, sizeof(**p)))
518         return opt && odr_ok(o);
519     if (odr_sequence_of(o, (Odr_fun)z_AttributeOccurrence, &(*p)->occurrences,
520         &(*p)->num_occurrences))
521         return 1;
522     *p = 0;
523     return opt && odr_ok(o);
524 }
525
526 int z_AttributeValueList(ODR o, Z_AttributeValueList **p, int opt)
527 {
528     if (!odr_initmember(o, p, sizeof(**p)))
529         return opt && odr_ok(o);
530     if (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->attributes,
531         &(*p)->num_attributes))
532         return 1;
533     *p = 0;
534     return opt && odr_ok(o);
535 }
536
537 int z_AttributeOccurrence(ODR o, Z_AttributeOccurrence **p, int opt)
538 {
539     static Odr_arm arm[] =
540     {
541         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AttributeOcc_anyOrNone, (Odr_fun)odr_null},
542         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AttributeOcc_specific,
543             (Odr_fun)z_AttributeValueList},
544         {-1, -1, -1, -1, 0}
545     };
546
547     if (!odr_sequence_begin(o, p, sizeof(**p)))
548         return opt && odr_ok(o);
549     return
550         odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT, 0, 1) &&
551         odr_implicit(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT, 1, 0) &&
552         odr_implicit(o, odr_null, &(*p)->mustBeSupplied, ODR_CONTEXT, 2, 1) &&
553         odr_choice(o, arm, &(*p)->attributeValues, &(*p)->which) &&
554         odr_sequence_end(o);
555 }
556
557 int z_AttributeValue(ODR o, Z_AttributeValue **p, int opt)
558 {
559     if (!odr_sequence_begin(o, p, sizeof(**p)))
560         return opt && odr_ok(o);
561     return
562         odr_explicit(o, z_StringOrNumeric, &(*p)->value, ODR_CONTEXT, 0, 0) &&
563         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
564         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
565         (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->subAttributes,
566             &(*p)->num_subAttributes) || odr_ok(o)) &&
567         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
568         (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->superAttributes,
569             &(*p)->num_superAttributes) || odr_ok(o)) &&
570         odr_implicit(o, odr_null, &(*p)->partialSupport, ODR_CONTEXT, 4, 1) &&
571         odr_sequence_end(o);
572 }
573
574
575
576 int z_TargetInfo(ODR o, Z_TargetInfo **p, int opt)
577 {
578     if (!odr_sequence_begin(o, p, sizeof(**p)))
579         return opt && odr_ok(o);
580     return
581         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
582         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
583             1, 0) &&
584         odr_implicit(o, z_HumanString, &(*p)->recentNews, ODR_CONTEXT, 2, 1) &&
585         odr_implicit(o, z_IconObject, &(*p)->icon, ODR_CONTEXT, 3, 1) &&
586         odr_implicit(o, odr_bool, &(*p)->namedResultSets, ODR_CONTEXT, 4, 0) &&
587         odr_implicit(o, odr_bool, &(*p)->multipleDBsearch, ODR_CONTEXT, 5, 0) &&
588         odr_implicit(o, odr_integer, &(*p)->maxResultSets, ODR_CONTEXT, 6, 1) &&
589         odr_implicit(o, odr_integer, &(*p)->maxResultSize, ODR_CONTEXT, 7, 1) &&
590         odr_implicit(o, odr_integer, &(*p)->maxTerms, ODR_CONTEXT, 8, 1) &&
591         odr_implicit(o, z_IntUnit, &(*p)->timeoutInterval, ODR_CONTEXT, 9, 1) &&
592         odr_implicit(o, z_HumanString, &(*p)->welcomeMessage, ODR_CONTEXT,
593             10, 1) &&
594         odr_implicit(o, z_ContactInfo, &(*p)->contactInfo, ODR_CONTEXT,
595             11, 1) &&
596         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT,
597             12, 1) &&
598         odr_implicit_settag(o, ODR_CONTEXT, 13) &&
599         (odr_sequence_of(o, z_InternationalString, &(*p)->nicknames,
600             &(*p)->num_nicknames) || odr_ok(o)) &&
601         odr_implicit(o, z_HumanString, &(*p)->usageRest, ODR_CONTEXT, 14, 1) &&
602         odr_implicit(o, z_HumanString, &(*p)->paymentAddr, ODR_CONTEXT,
603             15, 1) &&
604         odr_implicit(o, z_HumanString, &(*p)->hours, ODR_CONTEXT, 16, 1) &&
605         odr_implicit_settag(o, ODR_CONTEXT, 17) &&
606         (odr_sequence_of(o, (Odr_fun)z_DatabaseList, &(*p)->dbCombinations,
607             &(*p)->num_dbCombinations) || odr_ok(o)) &&
608         odr_implicit_settag(o, ODR_CONTEXT, 18) &&
609         (odr_sequence_of(o, (Odr_fun)z_NetworkAddress, &(*p)->addresses,
610             &(*p)->num_addresses) || odr_ok(o)) &&
611         odr_implicit(o, z_AccessInfo, &(*p)->commonAccessInfo, ODR_CONTEXT,
612             19, 1) &&
613         odr_sequence_end(o);
614 }
615
616 int z_DatabaseInfo(ODR o, Z_DatabaseInfo **p, int opt)
617 {
618     static Odr_arm arm[] =
619     {
620         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_Exp_RecordCount_actualNumber,
621             (Odr_fun)odr_integer},
622         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Exp_RecordCount_approxNumber,
623             (Odr_fun)odr_integer},
624         {-1, -1, -1, -1, 0}
625     };
626
627     if (!odr_sequence_begin(o, p, sizeof(**p)))
628         return opt && odr_ok(o);
629     return
630         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
631         odr_implicit(o, z_DatabaseName, &(*p)->name, ODR_CONTEXT, 1, 0) &&
632         odr_implicit(o, odr_null, &(*p)->explainDatabase, ODR_CONTEXT, 2, 1) &&
633         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
634         (odr_sequence_of(o, z_DatabaseName, &(*p)->nicknames,
635             &(*p)->num_nicknames) || odr_ok(o)) &&
636         odr_implicit(o, z_IconObject, &(*p)->icon, ODR_CONTEXT, 4, 1) &&
637         odr_implicit(o, odr_bool, &(*p)->userFee, ODR_CONTEXT, 5, 0) &&
638         odr_implicit(o, odr_bool, &(*p)->available, ODR_CONTEXT, 6, 0) &&
639         odr_implicit(o, z_HumanString, &(*p)->titleString, ODR_CONTEXT, 7, 1) &&
640         odr_implicit_settag(o, ODR_CONTEXT, 8) &&
641         (odr_sequence_of(o, (Odr_fun)z_HumanString, &(*p)->keywords,
642             &(*p)->num_keywords) || odr_ok(o)) &&
643         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 9, 1) &&
644         odr_implicit(o, z_DatabaseList, &(*p)->associatedDbs, ODR_CONTEXT,
645             10, 1) &&
646         odr_implicit(o, z_DatabaseList, &(*p)->subDbs, ODR_CONTEXT, 11, 1) &&
647         odr_implicit(o, z_HumanString, &(*p)->disclaimers, ODR_CONTEXT,
648             12, 1) &&
649         odr_implicit(o, z_HumanString, &(*p)->news, ODR_CONTEXT, 13, 1) &&
650         ((odr_constructed_begin(o, &(*p)->recordCount, ODR_CONTEXT, 14) &&
651             odr_choice(o, arm, &(*p)->recordCount, &(*p)->recordCount_which) &&
652             odr_constructed_end(o)) || odr_ok(o)) &&
653         odr_implicit(o, z_HumanString, &(*p)->defaultOrder, ODR_CONTEXT,
654             15, 1) &&
655         odr_implicit(o, odr_integer, &(*p)->avRecordSize, ODR_CONTEXT, 16, 1) &&
656         odr_implicit(o, odr_integer, &(*p)->maxRecordSize, ODR_CONTEXT,
657             17, 1) &&
658         odr_implicit(o, z_HumanString, &(*p)->hours, ODR_CONTEXT, 18, 1) &&
659         odr_implicit(o, z_HumanString, &(*p)->bestTime, ODR_CONTEXT, 19, 1) &&
660         odr_implicit(o, odr_generalizedtime, &(*p)->lastUpdate, ODR_CONTEXT,
661             20, 1) &&
662         odr_implicit(o, z_IntUnit, &(*p)->updateInterval, ODR_CONTEXT, 21, 1) &&
663         odr_implicit(o, z_HumanString, &(*p)->coverage, ODR_CONTEXT, 22, 1) &&
664         odr_implicit(o, odr_bool, &(*p)->proprietary, ODR_CONTEXT, 23, 1) &&
665         odr_implicit(o, z_HumanString, &(*p)->copyrightText, ODR_CONTEXT,
666             24, 1) &&
667         odr_implicit(o, z_HumanString, &(*p)->copyrightNotice, ODR_CONTEXT,
668             25, 1) &&
669         odr_implicit(o, z_ContactInfo, &(*p)->producerContactInfo, ODR_CONTEXT,
670             26, 1) &&
671         odr_implicit(o, z_ContactInfo, &(*p)->supplierContactInfo, ODR_CONTEXT,
672             27, 1) &&
673         odr_implicit(o, z_ContactInfo, &(*p)->submissionContactInfo,
674             ODR_CONTEXT, 28, 1) &&
675         odr_implicit(o, z_AccessInfo, &(*p)->accessInfo, ODR_CONTEXT, 29, 1) &&
676         odr_sequence_end(o);
677 }
678
679 int z_TagTypeMapping(ODR o, Z_TagTypeMapping **p, int opt)
680 {
681     if (!odr_sequence_begin(o, p, sizeof(**p)))
682         return opt;
683     return
684         odr_implicit(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 0, 0) &&
685         odr_implicit(o, odr_oid, &(*p)->tagSet, ODR_CONTEXT, 1, 1) &&
686         odr_implicit(o, odr_null, &(*p)->defaultTagType, ODR_CONTEXT, 2, 1) &&
687         odr_sequence_end(o);
688 }
689
690 int z_SchemaInfo(ODR o, Z_SchemaInfo **p, int opt)
691 {
692     if (!odr_sequence_begin(o, p, sizeof(**p)))
693         return opt && odr_ok(o);
694     return
695         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
696         odr_implicit(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 1, 0) &&
697         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
698             2, 0) &&
699         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 3, 1) &&
700         odr_implicit_settag(o, ODR_CONTEXT, 4) &&
701         (odr_sequence_of(o, (Odr_fun)z_TagTypeMapping, &(*p)->tagTypeMapping,
702             &(*p)->num_tagTypeMapping) || odr_ok(o)) &&
703         odr_implicit_settag(o, ODR_CONTEXT, 5) &&
704         (odr_sequence_of(o, (Odr_fun)z_ElementInfo, &(*p)->recordStructure,
705             &(*p)->num_recordStructure) || odr_ok(o)) &&
706         odr_sequence_end(o);
707 }
708
709 int z_ElementInfo(ODR o, Z_ElementInfo **p, int opt)
710 {
711     if (!odr_sequence_begin(o, p, sizeof(**p)))
712         return opt && odr_ok(o);
713     return
714         odr_implicit(o, z_InternationalString, &(*p)->elementName, ODR_CONTEXT, 1, 0) &&
715         odr_implicit(o, z_Path, &(*p)->elementTagPath, ODR_CONTEXT, 2, 0) &&
716         odr_explicit(o, z_ElementDataType, &(*p)->dataType, ODR_CONTEXT, 3, 1) &&
717         odr_implicit(o, odr_bool, &(*p)->required, ODR_CONTEXT, 4, 0) &&
718         odr_implicit(o, odr_bool, &(*p)->repeatable, ODR_CONTEXT, 5, 0) &&
719         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 6, 1) &&
720         odr_sequence_end(o);
721 }
722
723 int z_PathUnit(ODR o, Z_PathUnit **p, int opt)
724 {
725     if (!odr_sequence_begin(o, p, sizeof(**p)))
726         return opt;
727     return
728         odr_implicit(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 0) &&
729         odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT,
730             2, 0) &&
731         odr_sequence_end(o);
732 }
733
734 int z_Path(ODR o, Z_Path **p, int opt)
735 {
736     if (!odr_initmember(o, p, sizeof(**p)))
737         return opt && odr_ok(o);
738     odr_implicit_settag(o, ODR_CONTEXT, 201);
739     if (odr_sequence_of(o, (Odr_fun)z_OtherInformationUnit, &(*p)->list,
740         &(*p)->num))
741         return 1;
742     *p = 0;
743     return opt && odr_ok(o);
744 }
745
746 int z_ElementInfoList(ODR o, Z_Path **p, int opt)
747 {
748     if (!odr_initmember(o, p, sizeof(**p)))
749         return opt && odr_ok(o);
750     odr_implicit_settag(o, ODR_CONTEXT, 201);
751     if (odr_sequence_of(o, (Odr_fun)z_OtherInformationUnit, &(*p)->list,
752         &(*p)->num))
753         return 1;
754     *p = 0;
755     return opt && odr_ok(o);
756 }
757
758 int z_ElementDataType(ODR o, Z_ElementDataType **p, int opt)
759 {
760     static Odr_arm arm[] =
761     {
762         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ElementDataType_primitive,
763             (Odr_fun)odr_integer},
764         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementDataType_structured,
765             (Odr_fun)z_ElementInfoList},
766         {-1, -1, -1, -1, 0}
767     };
768
769     if (!odr_initmember(o, p, sizeof(**p)))
770         return opt && odr_ok(o);
771     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
772         return 1;
773     *p = 0;
774     return opt && odr_ok(o);
775 }
776
777 int z_TagSetInfoElements(ODR o, Z_TagSetInfoElements **p, int opt)
778 {
779     if (!odr_sequence_begin(o, p, sizeof(**p)))
780         return opt;
781     return
782         odr_implicit(o, z_InternationalString, &(*p)->elementName,
783             ODR_CONTEXT, 1, 0) &&
784         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
785         (odr_sequence_of(o, z_InternationalString, &(*p)->nicknames,
786             &(*p)->num_nicknames) || odr_ok(o)) &&
787         odr_explicit(o, z_StringOrNumeric, &(*p)->elementTag, ODR_CONTEXT,
788             3, 0) &&
789         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT,
790             4, 1) &&
791         odr_implicit(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 5, 1) &&
792         z_OtherInformation(o, &(*p)->otherTagInfo, 1) &&
793         odr_sequence_end(o);
794 }
795
796 int z_TagSetInfo(ODR o, Z_TagSetInfo **p, int opt)
797 {
798     if (!odr_sequence_begin(o, p, sizeof(**p)))
799         return opt && odr_ok(o);
800     return
801         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
802         odr_implicit(o, odr_oid, &(*p)->tagSet, ODR_CONTEXT, 1, 0) &&
803         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
804             2, 0) &&
805         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT,
806             3, 1) &&
807         odr_implicit_settag(o, ODR_CONTEXT, 4) &&
808         (odr_sequence_of(o, (Odr_fun)z_TagSetInfoElements, &(*p)->elements,
809             &(*p)->num_elements) || odr_ok(o)) &&
810         odr_sequence_end(o);
811 }
812
813 int z_RecordSyntaxInfo(ODR o, Z_RecordSyntaxInfo **p, int opt)
814 {
815     if (!odr_sequence_begin(o, p, sizeof(**p)))
816         return opt && odr_ok(o);
817     return
818         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
819         odr_implicit(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 1, 0) &&
820         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
821             2, 0) &&
822         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
823         (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->transferSyntaxes,
824             &(*p)->num_transferSyntaxes) || odr_ok(o)) &&
825         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 4, 1) &&
826         odr_implicit(o, z_InternationalString, &(*p)->asn1Module, ODR_CONTEXT,
827             5, 1) &&
828         odr_implicit_settag(o, ODR_CONTEXT, 6) &&
829         (odr_sequence_of(o, (Odr_fun)z_ElementInfo, &(*p)->abstractStructure,
830             &(*p)->num_abstractStructure) || odr_ok(o)) &&
831         odr_sequence_end(o);
832 }
833
834 int z_AttributeSetInfo(ODR o, Z_AttributeSetInfo **p, int opt)
835 {
836     if (!odr_sequence_begin(o, p, sizeof(**p)))
837         return opt && odr_ok(o);
838     return
839         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
840         odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT, 1, 0) &&
841         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 2, 0) &&
842         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
843         (odr_sequence_of(o, (Odr_fun)z_AttributeType, &(*p)->attributes,
844             &(*p)->num_attributes) || odr_ok(o)) &&
845         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 4, 1) &&
846         odr_sequence_end(o);
847 }
848
849 int z_AttributeType(ODR o, Z_AttributeType **p, int opt)
850 {
851     if (!odr_sequence_begin(o, p, sizeof(**p)))
852         return opt && odr_ok(o);
853     return
854         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
855         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
856         odr_implicit(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT, 2, 0) &&
857         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
858         odr_sequence_of(o, (Odr_fun)z_AttributeDescription, &(*p)->attributeValues,
859             &(*p)->num_attributeValues) &&
860         odr_sequence_end(o);
861 }
862
863 int z_AttributeDescription(ODR o, Z_AttributeDescription **p, int opt)
864 {
865     if (!odr_sequence_begin(o, p, sizeof(**p)))
866         return opt && odr_ok(o);
867     return
868         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
869         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
870         odr_explicit(o, z_StringOrNumeric, &(*p)->attributeValue, ODR_CONTEXT, 2, 0) &&
871         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
872         (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->equivalentAttributes,
873             &(*p)->num_equivalentAttributes) || odr_ok(o)) &&
874         odr_sequence_end(o);
875 }
876
877 int z_TermListElement(ODR o, Z_TermListElement **p, int opt)
878 {
879     if (!odr_sequence_begin(o, p, sizeof(**p)))
880         return opt && odr_ok(o);
881     return
882         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 1, 0) &&
883         odr_implicit(o, z_HumanString, &(*p)->title, ODR_CONTEXT, 2, 1) &&
884         odr_implicit(o, odr_integer, &(*p)->searchCost, ODR_CONTEXT, 3, 1) &&
885         odr_implicit(o, odr_bool, &(*p)->scanable, ODR_CONTEXT, 4, 0) &&
886         odr_implicit_settag(o, ODR_CONTEXT, 5) &&
887         (odr_sequence_of(o, z_InternationalString, &(*p)->broader,
888             &(*p)->num_broader) || odr_ok(o)) &&
889         odr_implicit_settag(o, ODR_CONTEXT, 6) &&
890         (odr_sequence_of(o, z_InternationalString, &(*p)->narrower,
891             &(*p)->num_narrower) || odr_ok(o)) &&
892         odr_sequence_end(o);
893 }
894
895 int z_TermListInfo(ODR o, Z_TermListInfo **p, int opt)
896 {
897     if (!odr_sequence_begin(o, p, sizeof(**p)))
898         return opt && odr_ok(o);
899     return
900         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
901         odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT,
902             1, 0) &&
903         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
904         (odr_sequence_of(o, (Odr_fun)z_TermListElement, &(*p)->termLists,
905             &(*p)->num_termLists) || odr_ok(o)) &&
906         odr_sequence_end(o);
907 }
908
909 int z_ExtendedServicesInfo(ODR o, Z_ExtendedServicesInfo **p, int opt)
910 {
911     if (!odr_sequence_begin(o, p, sizeof(**p)))
912         return opt && odr_ok(o);
913     return
914         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
915         odr_implicit(o, odr_oid, &(*p)->type, ODR_CONTEXT, 1, 0) &&
916         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 2, 1) &&
917         odr_implicit(o, odr_bool, &(*p)->privateType, ODR_CONTEXT, 3, 0) &&
918         odr_implicit(o, odr_bool, &(*p)->restrictionsApply, ODR_CONTEXT, 5, 0) &&
919         odr_implicit(o, odr_bool, &(*p)->feeApply, ODR_CONTEXT, 6, 0) &&
920         odr_implicit(o, odr_bool, &(*p)->available, ODR_CONTEXT, 7, 0) &&
921         odr_implicit(o, odr_bool, &(*p)->retentionSupported, ODR_CONTEXT, 8, 0) &&
922         odr_implicit(o, odr_integer, &(*p)->waitAction, ODR_CONTEXT, 9, 0) &&
923         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 10, 1) &&
924         odr_implicit(o, z_External, &(*p)->specificExplain, ODR_CONTEXT, 11, 1) &&
925         odr_implicit(o, z_InternationalString, &(*p)->esASN, ODR_CONTEXT, 12, 1) &&
926         odr_sequence_end(o);
927 }
928
929 int z_AttributeDetails(ODR o, Z_AttributeDetails **p, int opt)
930 {
931     if (!odr_sequence_begin(o, p, sizeof(**p)))
932         return opt && odr_ok(o);
933     return
934         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
935         odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0) &&
936         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
937         (odr_sequence_of(o, (Odr_fun)z_AttributeSetDetails, &(*p)->attributesBySet,
938             &(*p)->num_attributesBySet) && odr_ok(o)) &&
939         odr_implicit(o, z_AttributeCombinations, &(*p)->attributeCombinations, ODR_CONTEXT, 3, 1) &&
940         odr_sequence_end(o);
941 }
942
943 int z_AttributeSetDetails(ODR o, Z_AttributeSetDetails **p, int opt)
944 {
945     if (!odr_sequence_begin(o, p, sizeof(**p)))
946         return opt && odr_ok(o);
947     return
948         odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT,
949             0, 0) &&
950         odr_implicit_settag(o, ODR_CONTEXT, 1) &&
951         odr_sequence_of(o, (Odr_fun)z_AttributeTypeDetails, &(*p)->attributesByType,
952             &(*p)->num_attributesByType) &&
953         odr_sequence_end(o);
954 }
955
956 int z_AttributeTypeDetails(ODR o, Z_AttributeTypeDetails **p, int opt)
957 {
958     if (!odr_sequence_begin(o, p, sizeof(**p)))
959         return opt && odr_ok(o);
960     return
961         odr_implicit(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT, 0, 0) &&
962         odr_implicit(o, z_OmittedAttributeInterpretation, &(*p)->optionalType, ODR_CONTEXT, 1, 1) &&
963         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
964         (odr_sequence_of(o, (Odr_fun)z_AttributeValue, &(*p)->attributeValues,
965             &(*p)->num_attributeValues) || odr_ok(o)) &&
966         odr_sequence_end(o);
967 }
968
969 int z_OmittedAttributeInterpretation(ODR o, Z_OmittedAttributeInterpretation **p, int opt)
970 {
971     if (!odr_sequence_begin(o, p, sizeof(**p)))
972         return opt && odr_ok(o);
973     return
974         odr_explicit(o, z_StringOrNumeric, &(*p)->defaultValue, ODR_CONTEXT, 0, 1) &&
975         odr_implicit(o, z_HumanString, &(*p)->defaultDescription, ODR_CONTEXT, 1, 1) &&
976         odr_sequence_end(o);
977 }
978
979 int z_EScanInfo(ODR o, Z_EScanInfo **p, int opt)
980 {
981     if (!odr_sequence_begin(o, p, sizeof(**p)))
982         return opt && odr_ok(o);
983     return
984         odr_implicit(o, odr_integer, &(*p)->maxStepSize, ODR_CONTEXT, 0, 1) &&
985         odr_implicit(o, z_HumanString, &(*p)->collatingSequence, ODR_CONTEXT, 1, 1) &&
986         odr_implicit(o, odr_bool, &(*p)->increasing, ODR_CONTEXT, 2, 1) &&
987         odr_sequence_end(o);
988 }
989
990 int z_TermListDetails(ODR o, Z_TermListDetails **p, int opt)
991 {
992     if (!odr_sequence_begin(o, p, sizeof(**p)))
993         return opt && odr_ok(o);
994     return
995         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
996         odr_implicit(o, z_InternationalString, &(*p)->termListName, ODR_CONTEXT, 1, 0) &&
997         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 2, 1) &&
998         odr_implicit(o, z_AttributeCombinations, &(*p)->attributes, ODR_CONTEXT, 3, 1) &&
999         odr_implicit(o, z_EScanInfo, &(*p)->scanInfo, ODR_CONTEXT, 4, 1) &&
1000         odr_implicit(o, odr_integer, &(*p)->estNumberTerms, ODR_CONTEXT, 5, 1) &&
1001         odr_implicit_settag(o, ODR_CONTEXT, 6) &&
1002         (odr_sequence_of(o, (Odr_fun)z_Term, &(*p)->sampleTerms,
1003             &(*p)->num_sampleTerms) || odr_ok(o)) &&
1004         odr_sequence_end(o);
1005 }
1006
1007 int z_ElementSetDetails(ODR o, Z_ElementSetDetails **p, int opt)
1008 {
1009     if (!odr_sequence_begin(o, p, sizeof(**p)))
1010         return opt && odr_ok(o);
1011     return
1012         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1013         odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0) &&
1014         odr_implicit(o, z_ElementSetName, &(*p)->elementSetName, ODR_CONTEXT, 2, 0) &&
1015         odr_implicit(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 3, 0) &&
1016         odr_implicit(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 4, 0) &&
1017         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 5, 1) &&
1018         odr_implicit_settag(o, ODR_CONTEXT, 6) &&
1019         (odr_sequence_of(o, (Odr_fun)z_PerElementDetails, &(*p)->detailsPerElement, &(*p)->num_detailsPerElement) || odr_ok(o)) &&
1020         odr_sequence_end(o);
1021 }
1022
1023 int z_RetrievalRecordDetails(ODR o, Z_RetrievalRecordDetails **p, int opt)
1024 {
1025     if (!odr_sequence_begin(o, p, sizeof(**p)))
1026         return opt && odr_ok(o);
1027     return
1028         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1029         odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0) &&
1030         odr_implicit(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 2, 0) &&
1031         odr_implicit(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 3, 0) &&
1032         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 4, 1) &&
1033         odr_implicit_settag(o, ODR_CONTEXT, 5) &&
1034         (odr_sequence_of(o, (Odr_fun)z_PerElementDetails, &(*p)->detailsPerElement,
1035             &(*p)->num_detailsPerElement) || odr_ok(o)) &&
1036         odr_sequence_end(o);
1037 }
1038
1039 int z_PerElementDetails(ODR o, Z_PerElementDetails **p, int opt)
1040 {
1041     if (!odr_sequence_begin(o, p, sizeof(**p)))
1042         return opt && odr_ok(o);
1043     return
1044         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
1045         odr_implicit(o, z_RecordTag, &(*p)->recordTag, ODR_CONTEXT, 1, 1) &&
1046         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
1047         (odr_sequence_of(o, (Odr_fun)z_Path, &(*p)->schemaTags, &(*p)->num_schemaTags) ||
1048         odr_ok(o)) &&
1049         odr_implicit(o, odr_integer, &(*p)->maxSize, ODR_CONTEXT, 3, 1) &&
1050         odr_implicit(o, odr_integer, &(*p)->minSize, ODR_CONTEXT, 4, 1) &&
1051         odr_implicit(o, odr_integer, &(*p)->avgSize, ODR_CONTEXT, 5, 1) &&
1052         odr_implicit(o, odr_integer, &(*p)->fixedSize, ODR_CONTEXT, 6, 1) &&
1053         odr_implicit(o, odr_bool, &(*p)->repeatable, ODR_CONTEXT, 8, 0) &&
1054         odr_implicit(o, odr_bool, &(*p)->required, ODR_CONTEXT, 9, 0) &&
1055         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 12, 1) &&
1056         odr_implicit(o, z_HumanString, &(*p)->contents, ODR_CONTEXT, 13, 1) &&
1057         odr_implicit(o, z_HumanString, &(*p)->billingInfo, ODR_CONTEXT, 14, 1) &&
1058         odr_implicit(o, z_HumanString, &(*p)->restrictions, ODR_CONTEXT, 15, 1) &&
1059         odr_implicit_settag(o, ODR_CONTEXT, 16) &&
1060         (odr_sequence_of(o, z_InternationalString, &(*p)->alternateNames,
1061             &(*p)->num_alternateNames) || odr_ok(o)) &&
1062         odr_implicit_settag(o, ODR_CONTEXT, 17) &&
1063         (odr_sequence_of(o, z_InternationalString, &(*p)->genericNames,
1064             &(*p)->num_genericNames) || odr_ok(o)) &&
1065         odr_implicit(o, z_AttributeCombinations, &(*p)->searchAccess,
1066             ODR_CONTEXT, 18, 1) &&
1067         odr_sequence_end(o);
1068 }
1069
1070 int z_RecordTag(ODR o, Z_RecordTag **p, int opt)
1071 {
1072     if (!odr_sequence_begin(o, p, sizeof(**p)))
1073         return opt && odr_ok(o);
1074     return
1075         odr_explicit(o, z_StringOrNumeric, &(*p)->qualifier, ODR_CONTEXT,
1076             0, 1) &&
1077         odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT,
1078             1, 0) &&
1079         odr_sequence_end(o);
1080 }
1081
1082 int z_SortDetails(ODR o, Z_SortDetails **p, int opt)
1083 {
1084     if (!odr_sequence_begin(o, p, sizeof(**p)))
1085         return opt && odr_ok(o);
1086     return
1087         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1088         odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT,
1089             1, 0) &&
1090         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
1091         (odr_sequence_of(o, (Odr_fun)z_SortKeyDetails, &(*p)->sortKeys,
1092             &(*p)->num_sortKeys) || odr_ok(o)) &&
1093         odr_sequence_end(o);
1094 }
1095
1096 int z_SortKeyDetailsSortType(ODR o, Z_SortKeyDetailsSortType **p, int opt)
1097 {
1098     static Odr_arm arm[] =
1099     {
1100         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortKeyDetailsSortType_character,
1101             (Odr_fun)odr_null},
1102         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortKeyDetailsSortType_numeric,
1103             (Odr_fun)odr_null},
1104         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortKeyDetailsSortType_structured,
1105             (Odr_fun)z_HumanString},
1106         {-1, -1, -1, -1, 0}
1107     };
1108
1109     if (!odr_initmember(o, p, sizeof(**p)))
1110         return opt && odr_ok(o);
1111     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
1112         return 1;
1113     *p = 0;
1114     return opt && odr_ok(o);
1115 }
1116         
1117 int z_SortKeyDetails(ODR o, Z_SortKeyDetails **p, int opt)
1118 {
1119     if (!odr_sequence_begin(o, p, sizeof(**p)))
1120         return opt && odr_ok(o);
1121     return
1122         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 0, 1) &&
1123         odr_implicit_settag(o, ODR_CONTEXT, 1) &&
1124         (odr_sequence_of(o, (Odr_fun)z_Specification, &(*p)->elementSpecifications,
1125             &(*p)->num_elementSpecifications) || odr_ok(o)) &&
1126         odr_implicit(o, z_AttributeCombinations, &(*p)->attributeSpecifications,
1127             ODR_CONTEXT, 2, 1) &&
1128         odr_explicit(o, z_SortKeyDetailsSortType, &(*p)->sortType, ODR_CONTEXT,
1129             3, 1) &&
1130         odr_implicit(o, odr_integer, &(*p)->caseSensitivity, ODR_CONTEXT,
1131             4, 1) &&
1132         odr_sequence_end(o);
1133 }
1134
1135 int z_ProcessingInformation(ODR o, Z_ProcessingInformation **p, int opt)
1136 {
1137     if (!odr_sequence_begin(o, p, sizeof(**p)))
1138         return opt && odr_ok(o);
1139     return
1140         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1141         odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT,
1142             1, 0) &&
1143         odr_implicit(o, odr_integer, &(*p)->processingContext, ODR_CONTEXT,
1144             2, 0) &&
1145         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
1146             3, 0) &&
1147         odr_implicit(o, odr_oid, &(*p)->oid, ODR_CONTEXT, 4, 0) &&
1148         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 5, 1) &&
1149         odr_implicit(o, z_External, &(*p)->instructions, ODR_CONTEXT, 6, 1) &&
1150         odr_sequence_end(o);
1151 }
1152
1153 int z_VariantSetInfo(ODR o, Z_VariantSetInfo **p, int opt)
1154 {
1155     if (!odr_sequence_begin(o, p, sizeof(**p)))
1156         return opt && odr_ok(o);
1157     return
1158         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1159         odr_implicit(o, odr_oid, &(*p)->variantSet, ODR_CONTEXT, 1, 0) &&
1160         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
1161             2, 0) &&
1162         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
1163         (odr_sequence_of(o, (Odr_fun)z_VariantClass, &(*p)->variants,
1164             &(*p)->num_variants) || odr_ok(o)) &&
1165         odr_sequence_end(o);
1166 }
1167
1168 int z_VariantClass(ODR o, Z_VariantClass **p, int opt)
1169 {
1170     if (!odr_sequence_begin(o, p, sizeof(**p)))
1171         return opt && odr_ok(o);
1172     return
1173         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
1174             0, 1) &&
1175         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
1176         odr_implicit(o, odr_integer, &(*p)->variantClass, ODR_CONTEXT, 2, 0) &&
1177         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
1178         odr_sequence_of(o, (Odr_fun)z_VariantType, &(*p)->variantTypes,
1179             &(*p)->num_variantTypes) &&
1180         odr_sequence_end(o);
1181 }
1182
1183 int z_VariantType(ODR o, Z_VariantType **p, int opt)
1184 {
1185     if (!odr_sequence_begin(o, p, sizeof(**p)))
1186         return opt && odr_ok(o);
1187     return
1188         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
1189         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
1190         odr_implicit(o, odr_integer, &(*p)->variantType, ODR_CONTEXT, 2, 0) &&
1191         odr_implicit(o, z_VariantValue, &(*p)->variantValue, ODR_CONTEXT, 3, 1) &&
1192         odr_sequence_end(o);
1193 }
1194
1195 int z_VariantValue(ODR o, Z_VariantValue **p, int opt)
1196 {
1197     if (!odr_sequence_begin(o, p, sizeof(**p)))
1198         return opt && odr_ok(o);
1199     return
1200         odr_explicit(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 0, 0) &&
1201         odr_explicit(o, z_ValueSet, &(*p)->values, ODR_CONTEXT, 1, 1) &&
1202         odr_sequence_end(o);
1203 }
1204
1205 int z_ValueSetEnumerated(ODR o, Z_ValueSetEnumerated **p, int opt)
1206 {
1207     if (!odr_initmember(o, p, sizeof(**p)))
1208         return opt && odr_ok(o);
1209     if (odr_sequence_of(o, (Odr_fun)z_ValueDescription, &(*p)->enumerated,
1210         &(*p)->num_enumerated))
1211         return 1;
1212     *p = 0;
1213     return opt && odr_ok(o);
1214 }
1215     
1216 int z_ValueSet(ODR o, Z_ValueSet **p, int opt)
1217 {
1218     static Odr_arm arm[] =
1219     {
1220         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ValueSet_range, (Odr_fun)z_ValueRange},
1221         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ValueSet_enumerated,
1222             (Odr_fun)z_ValueSetEnumerated},
1223         {-1, -1, -1, -1, 0}
1224     };
1225
1226     if (!odr_initmember(o, p, sizeof(**p)))
1227         return opt && odr_ok(o);
1228     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
1229         return 1;
1230     *p = 0;
1231     return opt && odr_ok(o);
1232 }
1233
1234 int z_ValueRange(ODR o, Z_ValueRange **p, int opt)
1235 {
1236     if (!odr_sequence_begin(o, p, sizeof(**p)))
1237         return opt && odr_ok(o);
1238     return
1239         odr_explicit(o, z_ValueDescription, &(*p)->lower, ODR_CONTEXT, 0, 1) &&
1240         odr_explicit(o, z_ValueDescription, &(*p)->upper, ODR_CONTEXT, 1, 1) &&
1241         odr_sequence_end(o);
1242 }
1243
1244 int z_ValueDescription(ODR o, Z_ValueDescription **p, int opt)
1245 {
1246     static Odr_arm arm[] =
1247     {
1248         {ODR_NONE, -1, -1, Z_ValueDescription_integer, (Odr_fun)odr_integer},
1249         {ODR_NONE, -1, -1, Z_ValueDescription_string, (Odr_fun)z_InternationalString},
1250         {ODR_NONE, -1, -1, Z_ValueDescription_octets, (Odr_fun)odr_octetstring},
1251         {ODR_NONE, -1, -1, Z_ValueDescription_oid, (Odr_fun)odr_oid},
1252         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ValueDescription_unit, (Odr_fun)z_Unit},
1253         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ValueDescription_valueAndUnit, (Odr_fun)z_IntUnit},
1254         {-1, -1, -1, -1, 0}
1255     };
1256
1257     if (!odr_initmember(o, p, sizeof(**p)))
1258         return opt && odr_ok(o);
1259     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
1260         return 1;
1261     *p = 0;
1262     return opt && odr_ok(o);
1263 }
1264
1265 int z_UnitInfo(ODR o, Z_UnitInfo **p, int opt)
1266 {
1267     if (!odr_sequence_begin(o, p, sizeof(**p)))
1268         return opt && odr_ok(o);
1269     return
1270         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1271         odr_implicit(o, z_InternationalString, &(*p)->unitSystem, ODR_CONTEXT,
1272             1, 0) &&
1273         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 2, 1) &&
1274         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
1275         (odr_sequence_of(o,  (Odr_fun)z_UnitType, &(*p)->units, &(*p)->num_units) ||
1276         odr_ok(o)) &&
1277         odr_sequence_end(o);
1278 }
1279
1280 int z_UnitType(ODR o, Z_UnitType **p, int opt)
1281 {
1282     if (!odr_sequence_begin(o, p, sizeof(**p)))
1283         return opt && odr_ok(o);
1284     return
1285         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
1286             0, 1) &&
1287         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
1288         odr_explicit(o, z_StringOrNumeric, &(*p)->unitType, ODR_CONTEXT,
1289             2, 0) &&
1290         odr_implicit_settag(o, ODR_CONTEXT, 3) &&
1291         odr_sequence_of(o, (Odr_fun)z_Units, &(*p)->units, &(*p)->num_units) &&
1292         odr_sequence_end(o);
1293 }
1294
1295 int z_Units(ODR o, Z_Units **p, int opt)
1296 {
1297     if (!odr_sequence_begin(o, p, sizeof(**p)))
1298         return opt && odr_ok(o);
1299     return
1300         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
1301         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
1302         odr_explicit(o, z_StringOrNumeric, &(*p)->unit, ODR_CONTEXT, 2, 0) &&
1303         odr_sequence_end(o);
1304 }
1305
1306 int z_CategoryList(ODR o, Z_CategoryList **p, int opt)
1307 {
1308     if (!odr_sequence_begin(o, p, sizeof(**p)))
1309         return opt && odr_ok(o);
1310     return
1311         odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1312         odr_implicit_settag(o, ODR_CONTEXT, 1) &&
1313         odr_sequence_of(o, (Odr_fun)z_CategoryInfo, &(*p)->categories,
1314             &(*p)->num_categories) &&
1315         odr_sequence_end(o);
1316 }
1317
1318 int z_CategoryInfo(ODR o, Z_CategoryInfo **p, int opt)
1319 {
1320     if (!odr_sequence_begin(o, p, sizeof(**p)))
1321         return opt && odr_ok(o);
1322     return
1323         odr_implicit(o, z_InternationalString, &(*p)->category, ODR_CONTEXT,
1324             1, 0) &&
1325         odr_implicit(o, z_InternationalString, &(*p)->originalCategory,
1326             ODR_CONTEXT, 2, 1) &&
1327         odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 3, 1) &&
1328         odr_implicit(o, z_InternationalString, &(*p)->asn1Module, ODR_CONTEXT,
1329             4, 1) &&
1330         odr_sequence_end(o);
1331 }
1332
1333 int z_ExplainRecord(ODR o, Z_ExplainRecord **p, int opt)
1334 {
1335     static Odr_arm arm[] =
1336     {
1337         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_Explain_targetInfo, (Odr_fun)z_TargetInfo},
1338         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Explain_databaseInfo, (Odr_fun)z_DatabaseInfo},
1339         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Explain_schemaInfo, (Odr_fun)z_SchemaInfo},
1340         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Explain_tagSetInfo, (Odr_fun)z_TagSetInfo},
1341         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Explain_recordSyntaxInfo,
1342             (Odr_fun)z_RecordSyntaxInfo},
1343         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Explain_attributeSetInfo,
1344             (Odr_fun)z_AttributeSetInfo},
1345         {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_Explain_termListInfo,
1346             (Odr_fun)z_TermListInfo},
1347         {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Explain_extendedServicesInfo,
1348             (Odr_fun)z_ExtendedServicesInfo},
1349         {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Explain_attributeDetails,
1350             (Odr_fun)z_AttributeDetails},
1351         {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_Explain_termListDetails,
1352             (Odr_fun)z_TermListDetails},
1353         {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_Explain_elementSetDetails,
1354             (Odr_fun)z_ElementSetDetails},
1355         {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_Explain_retrievalRecordDetails,
1356             (Odr_fun)z_RetrievalRecordDetails},
1357         {ODR_IMPLICIT, ODR_CONTEXT, 12, Z_Explain_sortDetails,
1358             (Odr_fun)z_SortDetails},
1359         {ODR_IMPLICIT, ODR_CONTEXT, 13, Z_Explain_processing,
1360             (Odr_fun)z_ProcessingInformation},
1361         {ODR_IMPLICIT, ODR_CONTEXT, 14, Z_Explain_variants,
1362             (Odr_fun)z_VariantSetInfo},
1363         {ODR_IMPLICIT, ODR_CONTEXT, 15, Z_Explain_units, (Odr_fun)z_UnitInfo},
1364         {ODR_IMPLICIT, ODR_CONTEXT, 100, Z_Explain_categoryList,
1365             (Odr_fun)z_CategoryList},
1366         {-1, -1, -1, -1, 0}
1367     };
1368
1369     if (!odr_initmember(o, p, sizeof(**p)))
1370         return opt && odr_ok(o);
1371     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
1372         return 1;
1373     *p = 0;
1374     return opt && odr_ok(o);
1375 }