2 * Copyright (c) 1995-1998, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.10 1998-05-18 13:06:52 adam
8 * Changed the way attribute sets are handled by the retriaval module.
9 * Extended Explain conversion / schema.
10 * Modified server and client to work with ASN.1 compiled protocol handlers.
12 * Revision 1.9 1998/02/11 11:53:32 adam
13 * Changed code so that it compiles as C++.
15 * Revision 1.8 1996/01/02 11:46:41 quinn
16 * Changed 'operator' to 'roperator' to avoid C++ conflict.
18 * Revision 1.7 1995/12/14 16:28:07 quinn
21 * Revision 1.6 1995/12/14 11:09:09 quinn
22 * Fixed bug in tagging.
24 * Revision 1.5 1995/12/05 11:15:50 quinn
27 * Revision 1.4 1995/09/29 17:11:54 quinn
30 * Revision 1.3 1995/09/27 15:02:42 quinn
31 * Modified function heads & prototypes.
33 * Revision 1.2 1995/08/15 11:59:43 quinn
36 * Revision 1.1 1995/08/10 08:54:02 quinn
44 int z_LanguageCode(ODR o, char **p, int opt);
45 int z_CommonInfo(ODR o, Z_CommonInfo **p, int opt);
46 int z_HumanStringUnit(ODR o, Z_HumanStringUnit **p, int opt);
47 int z_HumanString(ODR o, Z_HumanString **p, int opt);
48 int z_IconObjectUnit(ODR o, Z_IconObjectUnit **p, int opt);
49 int z_IconObject(ODR o, Z_IconObject **p, int opt);
50 int z_ContactInfo(ODR o, Z_ContactInfo **p, int opt);
51 int z_NetworkAddressIA(ODR o, Z_NetworkAddressIA **p, int opt);
52 int z_NetworkAddressOPA(ODR o, Z_NetworkAddressOPA **p, int opt);
53 int z_NetworkAddressOther(ODR o, Z_NetworkAddressOther **p, int opt);
54 int z_NetworkAddress(ODR o, Z_NetworkAddress **p, int opt);
55 int z_AccessInfo(ODR o, Z_AccessInfo **p, int opt);
56 int z_QueryTypeDetails(ODR o, Z_QueryTypeDetails **p, int opt);
57 int z_PrivateCapOperator(ODR o, Z_PrivateCapOperator **p, int opt);
58 int z_PrivateCapabilities(ODR o, Z_PrivateCapabilities **p, int opt);
59 int z_RpnCapabilities(ODR o, Z_RpnCapabilities **p, int opt);
60 int z_Iso8777Capabilities(ODR o, Z_Iso8777Capabilities **p, int opt);
61 int z_ProxSupportPrivate(ODR o, Z_ProxSupportPrivate **p, int opt);
62 int z_ProxSupportUnit(ODR o, Z_ProxSupportUnit **p, int opt);
63 int z_ProximitySupport(ODR o, Z_ProximitySupport **p, int opt);
64 int z_SearchKey(ODR o, Z_SearchKey **p, int opt);
65 int z_AccessRestrictionsUnit(ODR o, Z_AccessRestrictionsUnit **p, int opt);
66 int z_AccessRestrictions(ODR o, Z_AccessRestrictions **p, int opt);
67 int z_CostsOtherCharge(ODR o, Z_CostsOtherCharge **p, int opt);
68 int z_Costs(ODR o, Z_Costs **p, int opt);
69 int z_Charge(ODR o, Z_Charge **p, int opt);
70 int z_DatabaseList(ODR o, Z_DatabaseList **p, int opt);
71 int z_AttributeCombinations(ODR o, Z_AttributeCombinations **p, int opt);
72 int z_AttributeCombination(ODR o, Z_AttributeCombination **p, int opt);
73 int z_AttributeValueList(ODR o, Z_AttributeValueList **p, int opt);
74 int z_AttributeOccurrence(ODR o, Z_AttributeOccurrence **p, int opt);
75 int z_AttributeValue(ODR o, Z_AttributeValue **p, int opt);
76 int z_TargetInfo(ODR o, Z_TargetInfo **p, int opt);
77 int z_DatabaseInfo(ODR o, Z_DatabaseInfo **p, int opt);
78 int z_TagTypeMapping(ODR o, Z_TagTypeMapping **p, int opt);
79 int z_SchemaInfo(ODR o, Z_SchemaInfo **p, int opt);
80 int z_ElementInfo(ODR o, Z_ElementInfo **p, int opt);
81 int z_PathUnit(ODR o, Z_PathUnit **p, int opt);
82 int z_Path(ODR o, Z_Path **p, int opt);
83 int z_ElementInfoList(ODR o, Z_Path **p, int opt);
84 int z_ElementDataType(ODR o, Z_ElementDataType **p, int opt);
85 int z_TagSetInfoElements(ODR o, Z_TagSetInfoElements **p, int opt);
86 int z_TagSetInfo(ODR o, Z_TagSetInfo **p, int opt);
87 int z_RecordSyntaxInfo(ODR o, Z_RecordSyntaxInfo **p, int opt);
88 int z_AttributeSetInfo(ODR o, Z_AttributeSetInfo **p, int opt);
89 int z_AttributeType(ODR o, Z_AttributeType **p, int opt);
90 int z_AttributeDescription(ODR o, Z_AttributeDescription **p, int opt);
91 int z_TermListElement(ODR o, Z_TermListElement **p, int opt);
92 int z_TermListInfo(ODR o, Z_TermListInfo **p, int opt);
93 int z_ExtendedServicesInfo(ODR o, Z_ExtendedServicesInfo **p, int opt);
94 int z_AttributeDetails(ODR o, Z_AttributeDetails **p, int opt);
95 int z_AttributeSetDetails(ODR o, Z_AttributeSetDetails **p, int opt);
96 int z_AttributeTypeDetails(ODR o, Z_AttributeTypeDetails **p, int opt);
97 int z_OmittedAttributeInterpretation(ODR o, Z_OmittedAttributeInterpretation **p, int opt);
98 int z_EScanInfo(ODR o, Z_EScanInfo **p, int opt);
99 int z_TermListDetails(ODR o, Z_TermListDetails **p, int opt);
100 int z_ElementSetDetails(ODR o, Z_ElementSetDetails **p, int opt);
101 int z_RetrievalRecordDetails(ODR o, Z_RetrievalRecordDetails **p, int opt);
102 int z_PerElementDetails(ODR o, Z_PerElementDetails **p, int opt);
103 int z_RecordTag(ODR o, Z_RecordTag **p, int opt);
104 int z_SortDetails(ODR o, Z_SortDetails **p, int opt);
105 int z_SortKeyDetails(ODR o, Z_SortKeyDetails **p, int opt);
106 int z_ProcessingInformation(ODR o, Z_ProcessingInformation **p, int opt);
107 int z_VariantSetInfo(ODR o, Z_VariantSetInfo **p, int opt);
108 int z_VariantClass(ODR o, Z_VariantClass **p, int opt);
109 int z_VariantType(ODR o, Z_VariantType **p, int opt);
110 int z_VariantValue(ODR o, Z_VariantValue **p, int opt);
111 int z_ValueSetEnumerated(ODR o, Z_ValueSetEnumerated **p, int opt);
112 int z_ValueSet(ODR o, Z_ValueSet **p, int opt);
113 int z_ValueRange(ODR o, Z_ValueRange **p, int opt);
114 int z_ValueDescription(ODR o, Z_ValueDescription **p, int opt);
115 int z_UnitInfo(ODR o, Z_UnitInfo **p, int opt);
116 int z_UnitType(ODR o, Z_UnitType **p, int opt);
117 int z_Units(ODR o, Z_Units **p, int opt);
118 int z_CategoryList(ODR o, Z_CategoryList **p, int opt);
119 int z_CategoryInfo(ODR o, Z_CategoryInfo **p, int opt);
120 int z_ExplainRecord(ODR o, Z_ExplainRecord **p, int opt);
122 int z_LanguageCode(ODR o, char **p, int opt)
124 return z_InternationalString(o, p, opt);
127 int z_CommonInfo(ODR o, Z_CommonInfo **p, int opt)
129 if (!odr_sequence_begin(o, p, sizeof(**p)))
130 return opt && odr_ok(o);
132 odr_implicit(o, odr_generalizedtime, &(*p)->dateAdded, ODR_CONTEXT, 0, 1) &&
133 odr_implicit(o, odr_generalizedtime, &(*p)->dateChanged, ODR_CONTEXT, 1, 1) &&
134 odr_implicit(o, odr_generalizedtime, &(*p)->expiry, ODR_CONTEXT, 2, 1) &&
135 odr_implicit(o, z_LanguageCode, &(*p)->humanStringLanguage, ODR_CONTEXT, 3, 1) &&
136 z_OtherInformation(o, &(*p)->otherInfo, 1) &&
140 int z_HumanStringUnit(ODR o, Z_HumanStringUnit **p, int opt)
142 if (!odr_sequence_begin(o, p, sizeof(**p)))
143 return opt && odr_ok(o);
145 odr_implicit(o, z_LanguageCode, &(*p)->language, ODR_CONTEXT, 0, 1) &&
146 odr_implicit(o, z_InternationalString, &(*p)->text, ODR_CONTEXT,
151 int z_HumanString(ODR o, Z_HumanString **p, int opt)
153 if (!odr_initmember(o, p, sizeof(**p)))
154 return opt && odr_ok(o);
155 if (odr_sequence_of(o, (Odr_fun)z_HumanStringUnit, &(*p)->strings,
159 return opt && odr_ok(o);
162 int z_IconObjectUnit(ODR o, Z_IconObjectUnit **p, int opt)
164 static Odr_arm arm[] =
166 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IconObjectUnit_ianaType,
167 z_InternationalString},
168 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IconObjectUnit_z3950type,
169 z_InternationalString},
170 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IconObjectUnit_otherType,
171 z_InternationalString},
175 if (!odr_sequence_begin(o, p, sizeof(**p)))
176 return opt && odr_ok(o);
178 odr_constructed_begin(o, &(*p)->bodyType, ODR_CONTEXT, 1) &&
179 odr_choice(o, arm, &(*p)->bodyType, &(*p)->which) &&
180 odr_constructed_end(o) &&
181 odr_implicit(o, odr_octetstring, &(*p)->content, ODR_CONTEXT, 2, 0) &&
185 int z_IconObject(ODR o, Z_IconObject **p, int opt)
187 if (!odr_initmember(o, p, sizeof(**p)))
188 return opt && odr_ok(o);
189 if (odr_sequence_of(o, (Odr_fun)z_IconObjectUnit, &(*p)->elements,
193 return opt && odr_ok(o);
196 int z_ContactInfo(ODR o, Z_ContactInfo **p, int opt)
198 if (!odr_sequence_begin(o, p, sizeof(**p)))
199 return opt && odr_ok(o);
201 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
202 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
203 odr_implicit(o, z_HumanString, &(*p)->address, ODR_CONTEXT, 2, 1) &&
204 odr_implicit(o, z_InternationalString, &(*p)->email, ODR_CONTEXT, 3, 1) &&
205 odr_implicit(o, z_InternationalString, &(*p)->phone, ODR_CONTEXT, 4, 1) &&
209 int z_NetworkAddressIA(ODR o, Z_NetworkAddressIA **p, int opt)
211 if (!odr_sequence_begin(o, p, sizeof(**p)))
214 odr_implicit(o, z_InternationalString, &(*p)->hostAddress, ODR_CONTEXT, 0, 0) &&
215 odr_implicit(o, odr_integer, &(*p)->port, ODR_CONTEXT, 1, 0) &&
219 int z_NetworkAddressOPA(ODR o, Z_NetworkAddressOPA **p, int opt)
221 if (!odr_sequence_begin(o, p, sizeof(**p)))
224 odr_implicit(o, z_InternationalString, &(*p)->pSel, ODR_CONTEXT, 0, 0) &&
225 odr_implicit(o, z_InternationalString, &(*p)->sSel, ODR_CONTEXT, 1, 1) &&
226 odr_implicit(o, z_InternationalString, &(*p)->tSel, ODR_CONTEXT, 2, 1) &&
227 odr_implicit(o, z_InternationalString, &(*p)->nSap, ODR_CONTEXT, 3, 0) &&
231 int z_NetworkAddressOther(ODR o, Z_NetworkAddressOther **p, int opt)
233 if (!odr_sequence_begin(o, p, sizeof(**p)))
236 odr_implicit(o, z_InternationalString, &(*p)->type, ODR_CONTEXT, 0, 0) &&
237 odr_implicit(o, z_InternationalString, &(*p)->address, ODR_CONTEXT, 1, 0) &&
241 int z_NetworkAddress(ODR o, Z_NetworkAddress **p, int opt)
243 static Odr_arm arm[] =
245 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_NetworkAddress_iA,
246 (Odr_fun)z_NetworkAddressIA},
247 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_NetworkAddress_oPA,
248 (Odr_fun)z_NetworkAddressOPA},
249 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_NetworkAddress_other,
250 (Odr_fun)z_NetworkAddressOther},
254 if (!odr_initmember(o, p, sizeof(**p)))
255 return opt && odr_ok(o);
256 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
259 return opt && odr_ok(o);
262 int z_AccessInfo(ODR o, Z_AccessInfo **p, int opt)
264 if (!odr_sequence_begin(o, p, sizeof(**p)))
265 return opt && odr_ok(o);
267 odr_implicit_settag(o, ODR_CONTEXT, 0) &&
268 (odr_sequence_of(o, (Odr_fun)z_QueryTypeDetails, &(*p)->queryTypesSupported,
269 &(*p)->num_queryTypesSupported) || odr_ok(o)) &&
270 odr_implicit_settag(o, ODR_CONTEXT, 1) &&
271 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->diagnosticsSets,
272 &(*p)->num_diagnosticsSets) || odr_ok(o)) &&
273 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
274 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->attributeSetIds,
275 &(*p)->num_attributeSetIds) || odr_ok(o)) &&
276 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
277 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->schemas, &(*p)->num_schemas) ||
279 odr_implicit_settag(o, ODR_CONTEXT, 4) &&
280 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->recordSyntaxes,
281 &(*p)->num_recordSyntaxes) || odr_ok(o)) &&
282 odr_implicit_settag(o, ODR_CONTEXT, 5) &&
283 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->resourceChallenges,
284 &(*p)->num_resourceChallenges) || odr_ok(o)) &&
285 odr_implicit(o, z_AccessRestrictions, &(*p)->restrictedAccess,
286 ODR_CONTEXT, 6, 1) &&
287 odr_implicit(o, z_Costs, &(*p)->costInfo, ODR_CONTEXT, 8, 1) &&
288 odr_implicit_settag(o, ODR_CONTEXT, 9) &&
289 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->variantSets,
290 &(*p)->num_variantSets) || odr_ok(o)) &&
291 odr_implicit_settag(o, ODR_CONTEXT, 10) &&
292 (odr_sequence_of(o, (Odr_fun)z_ElementSetName, &(*p)->elementSetNames,
293 &(*p)->num_elementSetNames) || odr_ok(o)) &&
294 odr_implicit_settag(o, ODR_CONTEXT, 11) &&
295 (odr_sequence_of(o, (Odr_fun)z_InternationalString, &(*p)->unitSystems,
296 &(*p)->num_unitSystems) || odr_ok(o)) &&
300 int z_QueryTypeDetails(ODR o, Z_QueryTypeDetails **p, int opt)
302 static Odr_arm arm[] =
304 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_QueryTypeDetails_private,
305 (Odr_fun)z_PrivateCapabilities},
306 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_QueryTypeDetails_rpn,
307 (Odr_fun)z_RpnCapabilities},
308 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_QueryTypeDetails_iso8777,
309 (Odr_fun)z_Iso8777Capabilities},
310 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_QueryTypeDetails_z39_58,
311 (Odr_fun)z_HumanString},
312 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_QueryTypeDetails_erpn,
313 (Odr_fun)z_RpnCapabilities},
314 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_QueryTypeDetails_rankedList,
315 (Odr_fun)z_HumanString},
319 if (!odr_initmember(o, p, sizeof(**p)))
320 return opt && odr_ok(o);
321 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
324 return opt && odr_ok(o);
327 int z_PrivateCapOperator(ODR o, Z_PrivateCapOperator **p, int opt)
329 if (!odr_sequence_begin(o, p, sizeof(**p)))
330 return opt && odr_ok(o);
332 odr_implicit(o, z_InternationalString, &(*p)->roperator, ODR_CONTEXT, 0, 0) &&
333 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
337 int z_PrivateCapabilities(ODR o, Z_PrivateCapabilities **p, int opt)
339 if (!odr_sequence_begin(o, p, sizeof(**p)))
340 return opt && odr_ok(o);
342 odr_implicit_settag(o, ODR_CONTEXT, 0) &&
343 (odr_sequence_of(o, (Odr_fun)z_PrivateCapOperator, &(*p)->operators,
344 &(*p)->num_operators) || odr_ok(o)) &&
345 odr_implicit_settag(o, ODR_CONTEXT, 1) &&
346 (odr_sequence_of(o, (Odr_fun)z_SearchKey, &(*p)->searchKeys,
347 &(*p)->num_searchKeys) || odr_ok(o)) &&
348 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
349 (odr_sequence_of(o, (Odr_fun)z_HumanString, &(*p)->description,
350 &(*p)->num_description) || odr_ok(o)) &&
354 int z_RpnCapabilities(ODR o, Z_RpnCapabilities **p, int opt)
356 if (!odr_sequence_begin(o, p, sizeof(**p)))
357 return opt && odr_ok(o);
359 odr_implicit_settag(o, ODR_CONTEXT, 0) &&
360 (odr_sequence_of(o, (Odr_fun)odr_integer, &(*p)->operators, &(*p)->num_operators) || odr_ok(o)) &&
361 odr_implicit(o, odr_bool, &(*p)->resultSetAsOperandSupported,
362 ODR_CONTEXT, 1, 0) &&
363 odr_implicit(o, odr_bool, &(*p)->restrictionOperandSupported,
364 ODR_CONTEXT, 2, 0) &&
365 odr_implicit(o, z_ProximitySupport, &(*p)->proximity, ODR_CONTEXT,
370 int z_Iso8777Capabilities(ODR o, Z_Iso8777Capabilities **p, int opt)
372 if (!odr_sequence_begin(o, p, sizeof(**p)))
373 return opt && odr_ok(o);
375 odr_implicit_settag(o, ODR_CONTEXT, 0) &&
376 odr_sequence_of(o, (Odr_fun)z_SearchKey, &(*p)->searchKeys,
377 &(*p)->num_searchKeys) &&
378 odr_implicit(o, z_HumanString, &(*p)->restrictions, ODR_CONTEXT,
383 int z_ProxSupportPrivate(ODR o, Z_ProxSupportPrivate **p, int opt)
385 if (!odr_sequence_begin(o, p, sizeof(**p)))
386 return opt && odr_ok(o);
388 odr_implicit(o, odr_integer, &(*p)->unit, ODR_CONTEXT, 0, 0) &&
389 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
393 int z_ProxSupportUnit(ODR o, Z_ProxSupportUnit **p, int opt)
395 static Odr_arm arm[] =
397 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ProxSupportUnit_known,
398 (Odr_fun)odr_integer},
399 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ProxSupportUnit_private,
400 (Odr_fun)z_ProxSupportPrivate},
404 if (!odr_initmember(o, p, sizeof(**p)))
405 return opt && odr_ok(o);
406 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
409 return opt && odr_ok(o);
412 int z_ProximitySupport(ODR o, Z_ProximitySupport **p, int opt)
414 if (!odr_sequence_begin(o, p, sizeof(**p)))
415 return opt && odr_ok(o);
417 odr_implicit(o, odr_bool, &(*p)->anySupport, ODR_CONTEXT, 0, 0) &&
418 odr_implicit_settag(o, ODR_CONTEXT, 1) &&
419 (odr_sequence_of(o, (Odr_fun)z_ProxSupportUnit, &(*p)->unitsSupported,
420 &(*p)->num_unitsSupported) || odr_ok(o)) &&
424 int z_SearchKey(ODR o, Z_SearchKey **p, int opt)
426 if (!odr_sequence_begin(o, p, sizeof(**p)))
427 return opt && odr_ok(o);
429 odr_implicit(o, z_InternationalString, &(*p)->searchKey, ODR_CONTEXT, 0, 0) &&
430 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
434 int z_AccessRestrictionsUnit(ODR o, Z_AccessRestrictionsUnit **p, int opt)
436 if (!odr_sequence_begin(o, p, sizeof(**p)))
437 return opt && odr_ok(o);
439 odr_explicit(o, odr_integer, &(*p)->accessType, ODR_CONTEXT, 0, 0) &&
440 odr_implicit(o, z_HumanString, &(*p)->accessText, ODR_CONTEXT, 1, 1) &&
441 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
442 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->accessChallenges,
443 &(*p)->num_accessChallenges) || odr_ok(o)) &&
447 int z_AccessRestrictions(ODR o, Z_AccessRestrictions **p, int opt)
449 if (!odr_initmember(o, p, sizeof(**p)))
450 return opt && odr_ok(o);
451 if (odr_sequence_of(o, (Odr_fun)z_AccessRestrictionsUnit, &(*p)->elements,
455 return opt && odr_ok(o);
458 int z_CostsOtherCharge(ODR o, Z_CostsOtherCharge **p, int opt)
460 if (!odr_sequence_begin(o, p, sizeof(**p)))
461 return opt && odr_ok(o);
463 odr_implicit(o, z_HumanString, &(*p)->forWhat, ODR_CONTEXT, 1, 0) &&
464 odr_implicit(o, z_Charge, &(*p)->charge, ODR_CONTEXT, 2, 1) &&
468 int z_Costs(ODR o, Z_Costs **p, int opt)
470 if (!odr_sequence_begin(o, p, sizeof(**p)))
471 return opt && odr_ok(o);
473 odr_implicit(o, z_Charge, &(*p)->connectCharge, ODR_CONTEXT, 0, 1) &&
474 odr_implicit(o, z_Charge, &(*p)->connectTime, ODR_CONTEXT, 1, 1) &&
475 odr_implicit(o, z_Charge, &(*p)->displayCharge, ODR_CONTEXT, 2, 1) &&
476 odr_implicit(o, z_Charge, &(*p)->searchCharge, ODR_CONTEXT, 3, 1) &&
477 odr_implicit(o, z_Charge, &(*p)->subscriptCharge, ODR_CONTEXT, 4, 1) &&
478 odr_implicit_settag(o, ODR_CONTEXT, 5) &&
479 (odr_sequence_of(o, (Odr_fun)z_CostsOtherCharge, &(*p)->otherCharges,
480 &(*p)->num_otherCharges) || odr_ok(o)) &&
484 int z_Charge(ODR o, Z_Charge **p, int opt)
486 if (!odr_sequence_begin(o, p, sizeof(**p)))
487 return opt && odr_ok(o);
489 odr_implicit(o, z_IntUnit, &(*p)->cost, ODR_CONTEXT, 1, 0) &&
490 odr_implicit(o, z_Unit, &(*p)->perWhat, ODR_CONTEXT, 2, 1) &&
491 odr_implicit(o, z_HumanString, &(*p)->text, ODR_CONTEXT, 3, 1) &&
495 int z_DatabaseList(ODR o, Z_DatabaseList **p, int opt)
497 if (!odr_initmember(o, p, sizeof(**p)))
498 return opt && odr_ok(o);
499 if (odr_sequence_of(o, z_DatabaseName, &(*p)->databases,
500 &(*p)->num_databases))
503 return opt && odr_ok(o);
506 int z_AttributeCombinations(ODR o, Z_AttributeCombinations **p, int opt)
508 if (!odr_sequence_begin(o, p, sizeof(**p)))
509 return opt && odr_ok(o);
511 odr_implicit(o, odr_oid, &(*p)->defaultAttributeSet,
512 ODR_CONTEXT, 0, 0) &&
513 odr_implicit_settag(o, ODR_CONTEXT, 1) &&
514 odr_sequence_of(o, (Odr_fun)z_AttributeCombination, &(*p)->legalCombinations,
515 &(*p)->num_legalCombinations) &&
519 int z_AttributeCombination(ODR o, Z_AttributeCombination **p, int opt)
521 if (!odr_initmember(o, p, sizeof(**p)))
522 return opt && odr_ok(o);
523 if (odr_sequence_of(o, (Odr_fun)z_AttributeOccurrence, &(*p)->occurrences,
524 &(*p)->num_occurrences))
527 return opt && odr_ok(o);
530 int z_AttributeValueList(ODR o, Z_AttributeValueList **p, int opt)
532 if (!odr_initmember(o, p, sizeof(**p)))
533 return opt && odr_ok(o);
534 if (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->attributes,
535 &(*p)->num_attributes))
538 return opt && odr_ok(o);
541 int z_AttributeOccurrence(ODR o, Z_AttributeOccurrence **p, int opt)
543 static Odr_arm arm[] =
545 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AttributeOcc_any_or_none, (Odr_fun)odr_null},
546 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AttributeOcc_specific,
547 (Odr_fun)z_AttributeValueList},
551 if (!odr_sequence_begin(o, p, sizeof(**p)))
552 return opt && odr_ok(o);
554 odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT, 0, 1) &&
555 odr_implicit(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT, 1, 0) &&
556 odr_implicit(o, odr_null, &(*p)->mustBeSupplied, ODR_CONTEXT, 2, 1) &&
557 odr_choice(o, arm, &(*p)->attributeValues, &(*p)->which) &&
561 int z_AttributeValue(ODR o, Z_AttributeValue **p, int opt)
563 if (!odr_sequence_begin(o, p, sizeof(**p)))
564 return opt && odr_ok(o);
566 odr_explicit(o, z_StringOrNumeric, &(*p)->value, ODR_CONTEXT, 0, 0) &&
567 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
568 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
569 (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->subAttributes,
570 &(*p)->num_subAttributes) || odr_ok(o)) &&
571 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
572 (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->superAttributes,
573 &(*p)->num_superAttributes) || odr_ok(o)) &&
574 odr_implicit(o, odr_null, &(*p)->partialSupport, ODR_CONTEXT, 4, 1) &&
580 int z_TargetInfo(ODR o, Z_TargetInfo **p, int opt)
582 if (!odr_sequence_begin(o, p, sizeof(**p)))
583 return opt && odr_ok(o);
585 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
586 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
588 odr_implicit(o, z_HumanString, &(*p)->recentNews, ODR_CONTEXT, 2, 1) &&
589 odr_implicit(o, z_IconObject, &(*p)->icon, ODR_CONTEXT, 3, 1) &&
590 odr_implicit(o, odr_bool, &(*p)->namedResultSets, ODR_CONTEXT, 4, 0) &&
591 odr_implicit(o, odr_bool, &(*p)->multipleDBsearch, ODR_CONTEXT, 5, 0) &&
592 odr_implicit(o, odr_integer, &(*p)->maxResultSets, ODR_CONTEXT, 6, 1) &&
593 odr_implicit(o, odr_integer, &(*p)->maxResultSize, ODR_CONTEXT, 7, 1) &&
594 odr_implicit(o, odr_integer, &(*p)->maxTerms, ODR_CONTEXT, 8, 1) &&
595 odr_implicit(o, z_IntUnit, &(*p)->timeoutInterval, ODR_CONTEXT, 9, 1) &&
596 odr_implicit(o, z_HumanString, &(*p)->welcomeMessage, ODR_CONTEXT,
598 odr_implicit(o, z_ContactInfo, &(*p)->contactInfo, ODR_CONTEXT,
600 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT,
602 odr_implicit_settag(o, ODR_CONTEXT, 13) &&
603 (odr_sequence_of(o, z_InternationalString, &(*p)->nicknames,
604 &(*p)->num_nicknames) || odr_ok(o)) &&
605 odr_implicit(o, z_HumanString, &(*p)->usageRest, ODR_CONTEXT, 14, 1) &&
606 odr_implicit(o, z_HumanString, &(*p)->paymentAddr, ODR_CONTEXT,
608 odr_implicit(o, z_HumanString, &(*p)->hours, ODR_CONTEXT, 16, 1) &&
609 odr_implicit_settag(o, ODR_CONTEXT, 17) &&
610 (odr_sequence_of(o, (Odr_fun)z_DatabaseList, &(*p)->dbCombinations,
611 &(*p)->num_dbCombinations) || odr_ok(o)) &&
612 odr_implicit_settag(o, ODR_CONTEXT, 18) &&
613 (odr_sequence_of(o, (Odr_fun)z_NetworkAddress, &(*p)->addresses,
614 &(*p)->num_addresses) || odr_ok(o)) &&
615 (odr_sequence_of(o, (Odr_fun)z_InternationalString, &(*p)->languages,
616 &(*p)->num_languages) || odr_ok(o)) &&
617 odr_implicit(o, z_AccessInfo, &(*p)->commonAccessInfo, ODR_CONTEXT,
622 int z_DatabaseInfo(ODR o, Z_DatabaseInfo **p, int opt)
624 static Odr_arm arm[] =
626 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_DatabaseInfo_actualNumber,
627 (Odr_fun)odr_integer},
628 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_DatabaseInfo_approxNumber,
629 (Odr_fun)odr_integer},
633 if (!odr_sequence_begin(o, p, sizeof(**p)))
634 return opt && odr_ok(o);
636 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
637 odr_implicit(o, z_DatabaseName, &(*p)->name, ODR_CONTEXT, 1, 0) &&
638 odr_implicit(o, odr_null, &(*p)->explainDatabase, ODR_CONTEXT, 2, 1) &&
639 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
640 (odr_sequence_of(o, z_DatabaseName, &(*p)->nicknames,
641 &(*p)->num_nicknames) || odr_ok(o)) &&
642 odr_implicit(o, z_IconObject, &(*p)->icon, ODR_CONTEXT, 4, 1) &&
643 odr_implicit(o, odr_bool, &(*p)->userFee, ODR_CONTEXT, 5, 0) &&
644 odr_implicit(o, odr_bool, &(*p)->available, ODR_CONTEXT, 6, 0) &&
645 odr_implicit(o, z_HumanString, &(*p)->titleString, ODR_CONTEXT, 7, 1) &&
646 odr_implicit_settag(o, ODR_CONTEXT, 8) &&
647 (odr_sequence_of(o, (Odr_fun)z_HumanString, &(*p)->keywords,
648 &(*p)->num_keywords) || odr_ok(o)) &&
649 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 9, 1) &&
650 odr_implicit(o, z_DatabaseList, &(*p)->associatedDbs, ODR_CONTEXT,
652 odr_implicit(o, z_DatabaseList, &(*p)->subDbs, ODR_CONTEXT, 11, 1) &&
653 odr_implicit(o, z_HumanString, &(*p)->disclaimers, ODR_CONTEXT,
655 odr_implicit(o, z_HumanString, &(*p)->news, ODR_CONTEXT, 13, 1) &&
656 ((odr_constructed_begin(o, &(*p)->u.actualNumber, ODR_CONTEXT, 14) &&
657 odr_choice(o, arm, &(*p)->u.actualNumber, &(*p)->which) &&
658 odr_constructed_end(o)) || odr_ok(o)) &&
659 odr_implicit(o, z_HumanString, &(*p)->defaultOrder, ODR_CONTEXT,
661 odr_implicit(o, odr_integer, &(*p)->avRecordSize, ODR_CONTEXT, 16, 1) &&
662 odr_implicit(o, odr_integer, &(*p)->maxRecordSize, ODR_CONTEXT,
664 odr_implicit(o, z_HumanString, &(*p)->hours, ODR_CONTEXT, 18, 1) &&
665 odr_implicit(o, z_HumanString, &(*p)->bestTime, ODR_CONTEXT, 19, 1) &&
666 odr_implicit(o, odr_generalizedtime, &(*p)->lastUpdate, ODR_CONTEXT,
668 odr_implicit(o, z_IntUnit, &(*p)->updateInterval, ODR_CONTEXT, 21, 1) &&
669 odr_implicit(o, z_HumanString, &(*p)->coverage, ODR_CONTEXT, 22, 1) &&
670 odr_implicit(o, odr_bool, &(*p)->proprietary, ODR_CONTEXT, 23, 1) &&
671 odr_implicit(o, z_HumanString, &(*p)->copyrightText, ODR_CONTEXT,
673 odr_implicit(o, z_HumanString, &(*p)->copyrightNotice, ODR_CONTEXT,
675 odr_implicit(o, z_ContactInfo, &(*p)->producerContactInfo, ODR_CONTEXT,
677 odr_implicit(o, z_ContactInfo, &(*p)->supplierContactInfo, ODR_CONTEXT,
679 odr_implicit(o, z_ContactInfo, &(*p)->submissionContactInfo,
680 ODR_CONTEXT, 28, 1) &&
681 odr_implicit(o, z_AccessInfo, &(*p)->accessInfo, ODR_CONTEXT, 29, 1) &&
685 int z_TagTypeMapping(ODR o, Z_TagTypeMapping **p, int opt)
687 if (!odr_sequence_begin(o, p, sizeof(**p)))
690 odr_implicit(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 0, 0) &&
691 odr_implicit(o, odr_oid, &(*p)->tagSet, ODR_CONTEXT, 1, 1) &&
692 odr_implicit(o, odr_null, &(*p)->defaultTagType, ODR_CONTEXT, 2, 1) &&
696 int z_SchemaInfo(ODR o, Z_SchemaInfo **p, int opt)
698 if (!odr_sequence_begin(o, p, sizeof(**p)))
699 return opt && odr_ok(o);
701 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
702 odr_implicit(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 1, 0) &&
703 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
705 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 3, 1) &&
706 odr_implicit_settag(o, ODR_CONTEXT, 4) &&
707 (odr_sequence_of(o, (Odr_fun)z_TagTypeMapping, &(*p)->tagTypeMapping,
708 &(*p)->num_tagTypeMapping) || odr_ok(o)) &&
709 odr_implicit_settag(o, ODR_CONTEXT, 5) &&
710 (odr_sequence_of(o, (Odr_fun)z_ElementInfo, &(*p)->recordStructure,
711 &(*p)->num_recordStructure) || odr_ok(o)) &&
715 int z_ElementInfo(ODR o, Z_ElementInfo **p, int opt)
717 if (!odr_sequence_begin(o, p, sizeof(**p)))
718 return opt && odr_ok(o);
720 odr_implicit(o, z_InternationalString, &(*p)->elementName, ODR_CONTEXT, 1, 0) &&
721 odr_implicit(o, z_Path, &(*p)->elementTagPath, ODR_CONTEXT, 2, 0) &&
722 odr_explicit(o, z_ElementDataType, &(*p)->dataType, ODR_CONTEXT, 3, 1) &&
723 odr_implicit(o, odr_bool, &(*p)->required, ODR_CONTEXT, 4, 0) &&
724 odr_implicit(o, odr_bool, &(*p)->repeatable, ODR_CONTEXT, 5, 0) &&
725 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 6, 1) &&
729 int z_PathUnit(ODR o, Z_PathUnit **p, int opt)
731 if (!odr_sequence_begin(o, p, sizeof(**p)))
734 odr_implicit(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 0) &&
735 odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT,
740 int z_Path(ODR o, Z_Path **p, int opt)
742 if (!odr_initmember(o, p, sizeof(**p)))
743 return opt && odr_ok(o);
744 odr_implicit_settag(o, ODR_CONTEXT, 201);
745 if (odr_sequence_of(o, (Odr_fun)z_OtherInformationUnit, &(*p)->list,
749 return opt && odr_ok(o);
752 int z_ElementInfoList(ODR o, Z_Path **p, int opt)
754 if (!odr_initmember(o, p, sizeof(**p)))
755 return opt && odr_ok(o);
756 odr_implicit_settag(o, ODR_CONTEXT, 201);
757 if (odr_sequence_of(o, (Odr_fun)z_OtherInformationUnit, &(*p)->list,
761 return opt && odr_ok(o);
764 int z_ElementDataType(ODR o, Z_ElementDataType **p, int opt)
766 static Odr_arm arm[] =
768 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ElementDataType_primitive,
769 (Odr_fun)odr_integer},
770 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementDataType_structured,
771 (Odr_fun)z_ElementInfoList},
775 if (!odr_initmember(o, p, sizeof(**p)))
776 return opt && odr_ok(o);
777 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
780 return opt && odr_ok(o);
783 int z_TagSetInfoElements(ODR o, Z_TagSetInfoElements **p, int opt)
785 if (!odr_sequence_begin(o, p, sizeof(**p)))
788 odr_implicit(o, z_InternationalString, &(*p)->elementname,
789 ODR_CONTEXT, 1, 0) &&
790 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
791 (odr_sequence_of(o, z_InternationalString, &(*p)->nicknames,
792 &(*p)->num_nicknames) || odr_ok(o)) &&
793 odr_explicit(o, z_StringOrNumeric, &(*p)->elementTag, ODR_CONTEXT,
795 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT,
797 odr_implicit(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 5, 1) &&
798 z_OtherInformation(o, &(*p)->otherTagInfo, 1) &&
802 int z_TagSetInfo(ODR o, Z_TagSetInfo **p, int opt)
804 if (!odr_sequence_begin(o, p, sizeof(**p)))
805 return opt && odr_ok(o);
807 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
808 odr_implicit(o, odr_oid, &(*p)->tagSet, ODR_CONTEXT, 1, 0) &&
809 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
811 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT,
813 odr_implicit_settag(o, ODR_CONTEXT, 4) &&
814 (odr_sequence_of(o, (Odr_fun)z_TagSetInfoElements, &(*p)->elements,
815 &(*p)->num_elements) || odr_ok(o)) &&
819 int z_RecordSyntaxInfo(ODR o, Z_RecordSyntaxInfo **p, int opt)
821 if (!odr_sequence_begin(o, p, sizeof(**p)))
822 return opt && odr_ok(o);
824 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
825 odr_implicit(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 1, 0) &&
826 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
828 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
829 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->transferSyntaxes,
830 &(*p)->num_transferSyntaxes) || odr_ok(o)) &&
831 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 4, 1) &&
832 odr_implicit(o, z_InternationalString, &(*p)->asn1Module, ODR_CONTEXT,
834 odr_implicit_settag(o, ODR_CONTEXT, 6) &&
835 (odr_sequence_of(o, (Odr_fun)z_ElementInfo, &(*p)->abstractStructure,
836 &(*p)->num_abstractStructure) || odr_ok(o)) &&
840 int z_AttributeSetInfo(ODR o, Z_AttributeSetInfo **p, int opt)
842 if (!odr_sequence_begin(o, p, sizeof(**p)))
843 return opt && odr_ok(o);
845 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
846 odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT, 1, 0) &&
847 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 2, 0) &&
848 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
849 (odr_sequence_of(o, (Odr_fun)z_AttributeType, &(*p)->attributes,
850 &(*p)->num_attributes) || odr_ok(o)) &&
851 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 4, 1) &&
855 int z_AttributeType(ODR o, Z_AttributeType **p, int opt)
857 if (!odr_sequence_begin(o, p, sizeof(**p)))
858 return opt && odr_ok(o);
860 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
861 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
862 odr_implicit(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT, 2, 0) &&
863 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
864 odr_sequence_of(o, (Odr_fun)z_AttributeDescription, &(*p)->attributeValues,
865 &(*p)->num_attributeValues) &&
869 int z_AttributeDescription(ODR o, Z_AttributeDescription **p, int opt)
871 if (!odr_sequence_begin(o, p, sizeof(**p)))
872 return opt && odr_ok(o);
874 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
875 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
876 odr_explicit(o, z_StringOrNumeric, &(*p)->attributeValue, ODR_CONTEXT, 2, 0) &&
877 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
878 (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->equivalentAttributes,
879 &(*p)->num_equivalentAttributes) || odr_ok(o)) &&
883 int z_TermListElement(ODR o, Z_TermListElement **p, int opt)
885 if (!odr_sequence_begin(o, p, sizeof(**p)))
886 return opt && odr_ok(o);
888 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 1, 0) &&
889 odr_implicit(o, z_HumanString, &(*p)->title, ODR_CONTEXT, 2, 1) &&
890 odr_implicit(o, odr_integer, &(*p)->searchCost, ODR_CONTEXT, 3, 1) &&
891 odr_implicit(o, odr_bool, &(*p)->scanable, ODR_CONTEXT, 4, 0) &&
892 odr_implicit_settag(o, ODR_CONTEXT, 5) &&
893 (odr_sequence_of(o, z_InternationalString, &(*p)->broader,
894 &(*p)->num_broader) || odr_ok(o)) &&
895 odr_implicit_settag(o, ODR_CONTEXT, 6) &&
896 (odr_sequence_of(o, z_InternationalString, &(*p)->narrower,
897 &(*p)->num_narrower) || odr_ok(o)) &&
901 int z_TermListInfo(ODR o, Z_TermListInfo **p, int opt)
903 if (!odr_sequence_begin(o, p, sizeof(**p)))
904 return opt && odr_ok(o);
906 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
907 odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT,
909 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
910 (odr_sequence_of(o, (Odr_fun)z_TermListElement, &(*p)->termLists,
911 &(*p)->num_termLists) || odr_ok(o)) &&
915 int z_ExtendedServicesInfo(ODR o, Z_ExtendedServicesInfo **p, int opt)
917 if (!odr_sequence_begin(o, p, sizeof(**p)))
918 return opt && odr_ok(o);
920 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
921 odr_implicit(o, odr_oid, &(*p)->type, ODR_CONTEXT, 1, 0) &&
922 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 2, 1) &&
923 odr_implicit(o, odr_bool, &(*p)->privateType, ODR_CONTEXT, 3, 0) &&
924 odr_implicit(o, odr_bool, &(*p)->restrictionsApply, ODR_CONTEXT, 5, 0) &&
925 odr_implicit(o, odr_bool, &(*p)->feeApply, ODR_CONTEXT, 6, 0) &&
926 odr_implicit(o, odr_bool, &(*p)->available, ODR_CONTEXT, 7, 0) &&
927 odr_implicit(o, odr_bool, &(*p)->retentionSupported, ODR_CONTEXT, 8, 0) &&
928 odr_implicit(o, odr_integer, &(*p)->waitAction, ODR_CONTEXT, 9, 0) &&
929 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 10, 1) &&
930 odr_implicit(o, z_External, &(*p)->specificExplain, ODR_CONTEXT, 11, 1) &&
931 odr_implicit(o, z_InternationalString, &(*p)->esASN, ODR_CONTEXT, 12, 1) &&
935 int z_AttributeDetails(ODR o, Z_AttributeDetails **p, int opt)
937 if (!odr_sequence_begin(o, p, sizeof(**p)))
938 return opt && odr_ok(o);
940 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
941 odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0) &&
942 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
943 (odr_sequence_of(o, (Odr_fun)z_AttributeSetDetails, &(*p)->attributesBySet,
944 &(*p)->num_attributesBySet) && odr_ok(o)) &&
945 odr_implicit(o, z_AttributeCombinations, &(*p)->attributeCombinations, ODR_CONTEXT, 3, 1) &&
949 int z_AttributeSetDetails(ODR o, Z_AttributeSetDetails **p, int opt)
951 if (!odr_sequence_begin(o, p, sizeof(**p)))
952 return opt && odr_ok(o);
954 odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT,
956 odr_implicit_settag(o, ODR_CONTEXT, 1) &&
957 odr_sequence_of(o, (Odr_fun)z_AttributeTypeDetails, &(*p)->attributesByType,
958 &(*p)->num_attributesByType) &&
962 int z_AttributeTypeDetails(ODR o, Z_AttributeTypeDetails **p, int opt)
964 if (!odr_sequence_begin(o, p, sizeof(**p)))
965 return opt && odr_ok(o);
967 odr_implicit(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT, 0, 0) &&
968 odr_implicit(o, z_OmittedAttributeInterpretation, &(*p)->defaultIfOmitted,
969 ODR_CONTEXT, 1, 1) &&
970 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
971 (odr_sequence_of(o, (Odr_fun)z_AttributeValue, &(*p)->attributeValues,
972 &(*p)->num_attributeValues) || odr_ok(o)) &&
976 int z_OmittedAttributeInterpretation(ODR o, Z_OmittedAttributeInterpretation **p, int opt)
978 if (!odr_sequence_begin(o, p, sizeof(**p)))
979 return opt && odr_ok(o);
981 odr_explicit(o, z_StringOrNumeric, &(*p)->defaultValue, ODR_CONTEXT, 0, 1) &&
982 odr_implicit(o, z_HumanString, &(*p)->defaultDescription, ODR_CONTEXT, 1, 1) &&
986 int z_EScanInfo(ODR o, Z_EScanInfo **p, int opt)
988 if (!odr_sequence_begin(o, p, sizeof(**p)))
989 return opt && odr_ok(o);
991 odr_implicit(o, odr_integer, &(*p)->maxStepSize, ODR_CONTEXT, 0, 1) &&
992 odr_implicit(o, z_HumanString, &(*p)->collatingSequence, ODR_CONTEXT, 1, 1) &&
993 odr_implicit(o, odr_bool, &(*p)->increasing, ODR_CONTEXT, 2, 1) &&
997 int z_TermListDetails(ODR o, Z_TermListDetails **p, int opt)
999 if (!odr_sequence_begin(o, p, sizeof(**p)))
1000 return opt && odr_ok(o);
1002 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1003 odr_implicit(o, z_InternationalString, &(*p)->termListName, ODR_CONTEXT, 1, 0) &&
1004 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 2, 1) &&
1005 odr_implicit(o, z_AttributeCombinations, &(*p)->attributes, ODR_CONTEXT, 3, 1) &&
1006 odr_implicit(o, z_EScanInfo, &(*p)->scanInfo, ODR_CONTEXT, 4, 1) &&
1007 odr_implicit(o, odr_integer, &(*p)->estNumberTerms, ODR_CONTEXT, 5, 1) &&
1008 odr_implicit_settag(o, ODR_CONTEXT, 6) &&
1009 (odr_sequence_of(o, (Odr_fun)z_Term, &(*p)->sampleTerms,
1010 &(*p)->num_sampleTerms) || odr_ok(o)) &&
1011 odr_sequence_end(o);
1014 int z_ElementSetDetails(ODR o, Z_ElementSetDetails **p, int opt)
1016 if (!odr_sequence_begin(o, p, sizeof(**p)))
1017 return opt && odr_ok(o);
1019 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1020 odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0) &&
1021 odr_implicit(o, z_ElementSetName, &(*p)->elementSetName, ODR_CONTEXT, 2, 0) &&
1022 odr_implicit(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 3, 0) &&
1023 odr_implicit(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 4, 0) &&
1024 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 5, 1) &&
1025 odr_implicit_settag(o, ODR_CONTEXT, 6) &&
1026 (odr_sequence_of(o, (Odr_fun)z_PerElementDetails, &(*p)->detailsPerElement, &(*p)->num_detailsPerElement) || odr_ok(o)) &&
1027 odr_sequence_end(o);
1030 int z_RetrievalRecordDetails(ODR o, Z_RetrievalRecordDetails **p, int opt)
1032 if (!odr_sequence_begin(o, p, sizeof(**p)))
1033 return opt && odr_ok(o);
1035 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1036 odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT, 1, 0) &&
1037 odr_implicit(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 2, 0) &&
1038 odr_implicit(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 3, 0) &&
1039 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 4, 1) &&
1040 odr_implicit_settag(o, ODR_CONTEXT, 5) &&
1041 (odr_sequence_of(o, (Odr_fun)z_PerElementDetails, &(*p)->detailsPerElement,
1042 &(*p)->num_detailsPerElement) || odr_ok(o)) &&
1043 odr_sequence_end(o);
1046 int z_PerElementDetails(ODR o, Z_PerElementDetails **p, int opt)
1048 if (!odr_sequence_begin(o, p, sizeof(**p)))
1049 return opt && odr_ok(o);
1051 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
1052 odr_implicit(o, z_RecordTag, &(*p)->recordTag, ODR_CONTEXT, 1, 1) &&
1053 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
1054 (odr_sequence_of(o, (Odr_fun)z_Path, &(*p)->schemaTags, &(*p)->num_schemaTags) ||
1056 odr_implicit(o, odr_integer, &(*p)->maxSize, ODR_CONTEXT, 3, 1) &&
1057 odr_implicit(o, odr_integer, &(*p)->minSize, ODR_CONTEXT, 4, 1) &&
1058 odr_implicit(o, odr_integer, &(*p)->avgSize, ODR_CONTEXT, 5, 1) &&
1059 odr_implicit(o, odr_integer, &(*p)->fixedSize, ODR_CONTEXT, 6, 1) &&
1060 odr_implicit(o, odr_bool, &(*p)->repeatable, ODR_CONTEXT, 8, 0) &&
1061 odr_implicit(o, odr_bool, &(*p)->required, ODR_CONTEXT, 9, 0) &&
1062 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 12, 1) &&
1063 odr_implicit(o, z_HumanString, &(*p)->contents, ODR_CONTEXT, 13, 1) &&
1064 odr_implicit(o, z_HumanString, &(*p)->billingInfo, ODR_CONTEXT, 14, 1) &&
1065 odr_implicit(o, z_HumanString, &(*p)->restrictions, ODR_CONTEXT, 15, 1) &&
1066 odr_implicit_settag(o, ODR_CONTEXT, 16) &&
1067 (odr_sequence_of(o, z_InternationalString, &(*p)->alternateNames,
1068 &(*p)->num_alternateNames) || odr_ok(o)) &&
1069 odr_implicit_settag(o, ODR_CONTEXT, 17) &&
1070 (odr_sequence_of(o, z_InternationalString, &(*p)->genericNames,
1071 &(*p)->num_genericNames) || odr_ok(o)) &&
1072 odr_implicit(o, z_AttributeCombinations, &(*p)->searchAccess,
1073 ODR_CONTEXT, 18, 1) &&
1074 odr_sequence_end(o);
1077 int z_RecordTag(ODR o, Z_RecordTag **p, int opt)
1079 if (!odr_sequence_begin(o, p, sizeof(**p)))
1080 return opt && odr_ok(o);
1082 odr_explicit(o, z_StringOrNumeric, &(*p)->qualifier, ODR_CONTEXT,
1084 odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT,
1086 odr_sequence_end(o);
1089 int z_SortDetails(ODR o, Z_SortDetails **p, int opt)
1091 if (!odr_sequence_begin(o, p, sizeof(**p)))
1092 return opt && odr_ok(o);
1094 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1095 odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT,
1097 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
1098 (odr_sequence_of(o, (Odr_fun)z_SortKeyDetails, &(*p)->sortKeys,
1099 &(*p)->num_sortKeys) || odr_ok(o)) &&
1100 odr_sequence_end(o);
1103 int z_SortKeyDetails (ODR o, Z_SortKeyDetails **p, int opt)
1105 static Odr_arm arm[] = {
1106 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortKeyDetails_character,
1107 (Odr_fun) odr_null},
1108 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortKeyDetails_numeric,
1109 (Odr_fun) odr_null},
1110 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortKeyDetails_structured,
1111 (Odr_fun) z_HumanString},
1112 {-1, -1, -1, -1, (Odr_fun) 0}
1114 if (!odr_sequence_begin (o, p, sizeof(**p)))
1115 return opt && odr_ok (o);
1117 odr_implicit (o, z_HumanString,
1118 &(*p)->description, ODR_CONTEXT, 0, 1) &&
1119 odr_implicit_settag (o, ODR_CONTEXT, 1) &&
1120 (odr_sequence_of(o, (Odr_fun) z_Specification, &(*p)->elementSpecifications,
1121 &(*p)->num_elementSpecifications) || odr_ok(o)) &&
1122 odr_implicit (o, z_AttributeCombinations,
1123 &(*p)->attributeSpecifications, ODR_CONTEXT, 2, 1) &&
1124 ((odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 3) &&
1125 odr_choice (o, arm, &(*p)->u, &(*p)->which) &&
1126 odr_constructed_end (o)) || odr_ok(o)) &&
1127 odr_implicit (o, odr_integer,
1128 &(*p)->caseSensitivity, ODR_CONTEXT, 4, 1) &&
1129 odr_sequence_end (o);
1132 int z_ProcessingInformation(ODR o, Z_ProcessingInformation **p, int opt)
1134 if (!odr_sequence_begin(o, p, sizeof(**p)))
1135 return opt && odr_ok(o);
1137 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1138 odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT,
1140 odr_implicit(o, odr_integer, &(*p)->processingContext, ODR_CONTEXT,
1142 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
1144 odr_implicit(o, odr_oid, &(*p)->oid, ODR_CONTEXT, 4, 0) &&
1145 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 5, 1) &&
1146 odr_implicit(o, z_External, &(*p)->instructions, ODR_CONTEXT, 6, 1) &&
1147 odr_sequence_end(o);
1150 int z_VariantSetInfo(ODR o, Z_VariantSetInfo **p, int opt)
1152 if (!odr_sequence_begin(o, p, sizeof(**p)))
1153 return opt && odr_ok(o);
1155 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1156 odr_implicit(o, odr_oid, &(*p)->variantSet, ODR_CONTEXT, 1, 0) &&
1157 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
1159 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
1160 (odr_sequence_of(o, (Odr_fun)z_VariantClass, &(*p)->variants,
1161 &(*p)->num_variants) || odr_ok(o)) &&
1162 odr_sequence_end(o);
1165 int z_VariantClass(ODR o, Z_VariantClass **p, int opt)
1167 if (!odr_sequence_begin(o, p, sizeof(**p)))
1168 return opt && odr_ok(o);
1170 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
1172 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
1173 odr_implicit(o, odr_integer, &(*p)->variantClass, ODR_CONTEXT, 2, 0) &&
1174 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
1175 odr_sequence_of(o, (Odr_fun)z_VariantType, &(*p)->variantTypes,
1176 &(*p)->num_variantTypes) &&
1177 odr_sequence_end(o);
1180 int z_VariantType(ODR o, Z_VariantType **p, int opt)
1182 if (!odr_sequence_begin(o, p, sizeof(**p)))
1183 return opt && odr_ok(o);
1185 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
1186 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
1187 odr_implicit(o, odr_integer, &(*p)->variantType, ODR_CONTEXT, 2, 0) &&
1188 odr_implicit(o, z_VariantValue, &(*p)->variantValue, ODR_CONTEXT, 3, 1) &&
1189 odr_sequence_end(o);
1192 int z_VariantValue(ODR o, Z_VariantValue **p, int opt)
1194 if (!odr_sequence_begin(o, p, sizeof(**p)))
1195 return opt && odr_ok(o);
1197 odr_explicit(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 0, 0) &&
1198 odr_explicit(o, z_ValueSet, &(*p)->values, ODR_CONTEXT, 1, 1) &&
1199 odr_sequence_end(o);
1202 int z_ValueSetEnumerated(ODR o, Z_ValueSetEnumerated **p, int opt)
1204 if (!odr_initmember(o, p, sizeof(**p)))
1205 return opt && odr_ok(o);
1206 if (odr_sequence_of(o, (Odr_fun)z_ValueDescription, &(*p)->elements,
1210 return opt && odr_ok(o);
1213 int z_ValueSet(ODR o, Z_ValueSet **p, int opt)
1215 static Odr_arm arm[] =
1217 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ValueSet_range, (Odr_fun)z_ValueRange},
1218 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ValueSet_enumerated,
1219 (Odr_fun)z_ValueSetEnumerated},
1223 if (!odr_initmember(o, p, sizeof(**p)))
1224 return opt && odr_ok(o);
1225 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
1228 return opt && odr_ok(o);
1231 int z_ValueRange(ODR o, Z_ValueRange **p, int opt)
1233 if (!odr_sequence_begin(o, p, sizeof(**p)))
1234 return opt && odr_ok(o);
1236 odr_explicit(o, z_ValueDescription, &(*p)->lower, ODR_CONTEXT, 0, 1) &&
1237 odr_explicit(o, z_ValueDescription, &(*p)->upper, ODR_CONTEXT, 1, 1) &&
1238 odr_sequence_end(o);
1241 int z_ValueDescription(ODR o, Z_ValueDescription **p, int opt)
1243 static Odr_arm arm[] =
1245 {ODR_NONE, -1, -1, Z_ValueDescription_integer, (Odr_fun)odr_integer},
1246 {ODR_NONE, -1, -1, Z_ValueDescription_string, (Odr_fun)z_InternationalString},
1247 {ODR_NONE, -1, -1, Z_ValueDescription_octets, (Odr_fun)odr_octetstring},
1248 {ODR_NONE, -1, -1, Z_ValueDescription_oid, (Odr_fun)odr_oid},
1249 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ValueDescription_unit, (Odr_fun)z_Unit},
1250 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ValueDescription_valueAndUnit, (Odr_fun)z_IntUnit},
1254 if (!odr_initmember(o, p, sizeof(**p)))
1255 return opt && odr_ok(o);
1256 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
1259 return opt && odr_ok(o);
1262 int z_UnitInfo(ODR o, Z_UnitInfo **p, int opt)
1264 if (!odr_sequence_begin(o, p, sizeof(**p)))
1265 return opt && odr_ok(o);
1267 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1268 odr_implicit(o, z_InternationalString, &(*p)->unitSystem, ODR_CONTEXT,
1270 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 2, 1) &&
1271 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
1272 (odr_sequence_of(o, (Odr_fun)z_UnitType, &(*p)->units, &(*p)->num_units) ||
1274 odr_sequence_end(o);
1277 int z_UnitType(ODR o, Z_UnitType **p, int opt)
1279 if (!odr_sequence_begin(o, p, sizeof(**p)))
1280 return opt && odr_ok(o);
1282 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
1284 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
1285 odr_explicit(o, z_StringOrNumeric, &(*p)->unitType, ODR_CONTEXT,
1287 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
1288 odr_sequence_of(o, (Odr_fun)z_Units, &(*p)->units, &(*p)->num_units) &&
1289 odr_sequence_end(o);
1292 int z_Units(ODR o, Z_Units **p, int opt)
1294 if (!odr_sequence_begin(o, p, sizeof(**p)))
1295 return opt && odr_ok(o);
1297 odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT, 0, 1) &&
1298 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 1, 1) &&
1299 odr_explicit(o, z_StringOrNumeric, &(*p)->unit, ODR_CONTEXT, 2, 0) &&
1300 odr_sequence_end(o);
1303 int z_CategoryList(ODR o, Z_CategoryList **p, int opt)
1305 if (!odr_sequence_begin(o, p, sizeof(**p)))
1306 return opt && odr_ok(o);
1308 odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
1309 odr_implicit_settag(o, ODR_CONTEXT, 1) &&
1310 odr_sequence_of(o, (Odr_fun)z_CategoryInfo, &(*p)->categories,
1311 &(*p)->num_categories) &&
1312 odr_sequence_end(o);
1315 int z_CategoryInfo(ODR o, Z_CategoryInfo **p, int opt)
1317 if (!odr_sequence_begin(o, p, sizeof(**p)))
1318 return opt && odr_ok(o);
1320 odr_implicit(o, z_InternationalString, &(*p)->category, ODR_CONTEXT,
1322 odr_implicit(o, z_InternationalString, &(*p)->originalCategory,
1323 ODR_CONTEXT, 2, 1) &&
1324 odr_implicit(o, z_HumanString, &(*p)->description, ODR_CONTEXT, 3, 1) &&
1325 odr_implicit(o, z_InternationalString, &(*p)->asn1Module, ODR_CONTEXT,
1327 odr_sequence_end(o);
1330 int z_ExplainRecord(ODR o, Z_ExplainRecord **p, int opt)
1332 static Odr_arm arm[] =
1334 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_Explain_targetInfo, (Odr_fun)z_TargetInfo},
1335 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Explain_databaseInfo, (Odr_fun)z_DatabaseInfo},
1336 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Explain_schemaInfo, (Odr_fun)z_SchemaInfo},
1337 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Explain_tagSetInfo, (Odr_fun)z_TagSetInfo},
1338 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Explain_recordSyntaxInfo,
1339 (Odr_fun)z_RecordSyntaxInfo},
1340 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Explain_attributeSetInfo,
1341 (Odr_fun)z_AttributeSetInfo},
1342 {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_Explain_termListInfo,
1343 (Odr_fun)z_TermListInfo},
1344 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Explain_extendedServicesInfo,
1345 (Odr_fun)z_ExtendedServicesInfo},
1346 {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Explain_attributeDetails,
1347 (Odr_fun)z_AttributeDetails},
1348 {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_Explain_termListDetails,
1349 (Odr_fun)z_TermListDetails},
1350 {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_Explain_elementSetDetails,
1351 (Odr_fun)z_ElementSetDetails},
1352 {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_Explain_retrievalRecordDetails,
1353 (Odr_fun)z_RetrievalRecordDetails},
1354 {ODR_IMPLICIT, ODR_CONTEXT, 12, Z_Explain_sortDetails,
1355 (Odr_fun)z_SortDetails},
1356 {ODR_IMPLICIT, ODR_CONTEXT, 13, Z_Explain_processing,
1357 (Odr_fun)z_ProcessingInformation},
1358 {ODR_IMPLICIT, ODR_CONTEXT, 14, Z_Explain_variants,
1359 (Odr_fun)z_VariantSetInfo},
1360 {ODR_IMPLICIT, ODR_CONTEXT, 15, Z_Explain_units, (Odr_fun)z_UnitInfo},
1361 {ODR_IMPLICIT, ODR_CONTEXT, 100, Z_Explain_categoryList,
1362 (Odr_fun)z_CategoryList},
1366 if (!odr_initmember(o, p, sizeof(**p)))
1367 return opt && odr_ok(o);
1368 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
1371 return opt && odr_ok(o);