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