2 * Copyright (c) 1995, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.2 1998-02-10 15:31:46 adam
8 * Implemented date and time structure. Changed the Update Extended
11 * Revision 1.1 1995/10/12 10:34:37 quinn
19 int z_OccurValues(ODR o, Z_OccurValues **p, int opt)
21 if (!odr_sequence_begin(o, p, sizeof(**p)))
22 return opt && odr_ok(o);
24 odr_implicit(o, odr_integer, &(*p)->start, ODR_CONTEXT, 1, 0) &&
25 odr_implicit(o, odr_integer, &(*p)->howMany, ODR_CONTEXT, 2, 1) &&
29 int z_Occurrences(ODR o, Z_Occurrences **p, int opt)
31 static Odr_arm arm[] =
33 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Occurrences_all, odr_null},
34 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Occurrences_last, odr_null},
35 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Occurrences_values, z_OccurValues},
39 if (o->direction == ODR_DECODE)
40 *p = odr_malloc(o, sizeof(**p));
43 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
46 return opt && odr_ok(o);
49 int z_SpecificTag(ODR o, Z_SpecificTag **p, int opt)
51 if (!odr_sequence_begin(o, p, sizeof(**p)))
52 return opt && odr_ok(o);
54 odr_implicit(o, odr_oid, &(*p)->schemaId, ODR_CONTEXT, 0, 1) &&
55 odr_implicit(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 1) &&
56 odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT,
58 odr_explicit(o, z_Occurrences, &(*p)->occurrences, ODR_CONTEXT, 3, 1) &&
62 int z_ETagUnit(ODR o, Z_ETagUnit **p, int opt)
64 static Odr_arm arm[] =
66 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ETagUnit_specificTag, z_SpecificTag},
67 {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_ETagUnit_wildThing, z_Occurrences},
68 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ETagUnit_wildPath, odr_null},
72 if (o->direction == ODR_DECODE)
73 *p = odr_malloc(o, sizeof(**p));
76 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
79 return opt && odr_ok(o);
82 int z_ETagPath(ODR o, Z_ETagPath **p, int opt)
84 if (o->direction == ODR_DECODE)
85 *p = odr_malloc(o, sizeof(**p));
88 if (odr_sequence_of(o, z_ETagUnit, &(*p)->tags, &(*p)->num_tags))
91 return opt && odr_ok(o);
94 int z_SimpleElement(ODR o, Z_SimpleElement **p, int opt)
96 if (!odr_sequence_begin(o, p, sizeof(**p)))
97 return opt && odr_ok(o);
99 odr_implicit(o, z_ETagPath, &(*p)->path, ODR_CONTEXT, 1, 0) &&
100 odr_implicit(o, z_Variant, &(*p)->variantRequest, ODR_CONTEXT,
105 int z_CompoPrimitives(ODR o, Z_CompoPrimitives **p, int opt)
107 if (o->direction == ODR_DECODE)
108 *p = odr_malloc(o, sizeof(**p));
111 if (odr_sequence_of(o, z_InternationalString, &(*p)->primitives,
112 &(*p)->num_primitives))
115 return opt && odr_ok(o);
118 int z_CompoSpecs(ODR o, Z_CompoSpecs **p, int opt)
120 if (o->direction == ODR_DECODE)
121 *p = odr_malloc(o, sizeof(**p));
124 if (odr_sequence_of(o, z_SimpleElement, &(*p)->specs, &(*p)->num_specs))
127 return opt && odr_ok(o);
130 int z_CompositeElement(ODR o, Z_CompositeElement **p, int opt)
132 static Odr_arm arm[] =
134 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_CompoElement_primitives,
136 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_CompoElement_specs,
141 if (!odr_sequence_begin(o, p, sizeof(**p)))
142 return opt && odr_ok(o);
144 odr_constructed_begin(o, &(*p)->elementList, ODR_CONTEXT, 1) &&
145 odr_choice(o, arm, &(*p)->elementList, &(*p)->which) &&
146 odr_constructed_end(o) &&
147 odr_implicit(o, z_ETagPath, &(*p)->deliveryTag, ODR_CONTEXT, 2, 0) &&
148 odr_implicit(o, z_Variant, &(*p)->variantRequest, ODR_CONTEXT, 3, 1) &&
152 int z_ElementRequest(ODR o, Z_ElementRequest **p, int opt)
154 static Odr_arm arm[] =
156 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ERequest_simpleElement,
158 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ERequest_compositeElement,
163 if (o->direction == ODR_DECODE)
164 *p = odr_malloc(o, sizeof(**p));
167 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
170 return opt && odr_ok(o);
173 int z_Espec1(ODR o, Z_Espec1 **p, int opt)
175 if (!odr_sequence_begin(o, p, sizeof(**p)))
176 return opt && odr_ok(o);
178 odr_implicit_settag(o, ODR_CONTEXT, 1) &&
179 (odr_sequence_of(o, z_InternationalString, &(*p)->elementSetNames,
180 &(*p)->num_elementSetNames) || odr_ok(o)) &&
181 odr_implicit(o, odr_oid, &(*p)->defaultVariantSetId, ODR_CONTEXT,
183 odr_implicit(o, z_Variant, &(*p)->defaultVariantRequest, ODR_CONTEXT,
185 odr_implicit(o, odr_integer, &(*p)->defaultTagType, ODR_CONTEXT,
187 odr_implicit_settag(o, ODR_CONTEXT, 5) &&
188 (odr_sequence_of(o, z_ElementRequest, &(*p)->elements,
189 &(*p)->num_elements) || odr_ok(o)) &&