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