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