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