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