Minor change to make C++ happy.
[yaz-moved-to-github.git] / asn / prt-esp.c
1 /*
2  * Copyright (c) 1995, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: prt-esp.c,v $
7  * Revision 1.3  1998-02-11 11:53:32  adam
8  * Changed code so that it compiles as C++.
9  *
10  * Revision 1.2  1998/02/10 15:31:46  adam
11  * Implemented date and time structure. Changed the Update Extended
12  * Service.
13  *
14  * Revision 1.1  1995/10/12 10:34:37  quinn
15  * Added Espec-1.
16  *
17  *
18  */
19
20 #include <proto.h>
21
22 int z_OccurValues(ODR o, Z_OccurValues **p, int opt)
23 {
24     if (!odr_sequence_begin(o, p, sizeof(**p)))
25         return opt && odr_ok(o);
26     return
27         odr_implicit(o, odr_integer, &(*p)->start, ODR_CONTEXT, 1, 0) &&
28         odr_implicit(o, odr_integer, &(*p)->howMany, ODR_CONTEXT, 2, 1) &&
29         odr_sequence_end(o);
30 }
31
32 int z_Occurrences(ODR o, Z_Occurrences **p, int opt)
33 {
34     static Odr_arm arm[] =
35     {
36         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Occurrences_all, (Odr_fun)odr_null},
37         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Occurrences_last, (Odr_fun)odr_null},
38         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Occurrences_values, (Odr_fun)z_OccurValues},
39         {-1, -1, -1, -1, 0}
40     };
41
42     if (o->direction == ODR_DECODE)
43         *p = (Z_Occurrences *)odr_malloc(o, sizeof(**p));
44     else if (!*p)
45         return opt;
46     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
47         return 1;
48     *p = 0;
49     return opt && odr_ok(o);
50 }
51
52 int z_SpecificTag(ODR o, Z_SpecificTag **p, int opt)
53 {
54     if (!odr_sequence_begin(o, p, sizeof(**p)))
55         return opt && odr_ok(o);
56     return
57         odr_implicit(o, odr_oid, &(*p)->schemaId, ODR_CONTEXT, 0, 1) &&
58         odr_implicit(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 1) &&
59         odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT,
60             2, 0) &&
61         odr_explicit(o, z_Occurrences, &(*p)->occurrences, ODR_CONTEXT, 3, 1) &&
62         odr_sequence_end(o);
63 }
64
65 int z_ETagUnit(ODR o, Z_ETagUnit **p, int opt)
66 {
67     static Odr_arm arm[] =
68     {
69         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ETagUnit_specificTag, (Odr_fun)z_SpecificTag},
70         {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_ETagUnit_wildThing, (Odr_fun)z_Occurrences},
71         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ETagUnit_wildPath, (Odr_fun)odr_null},
72         {-1, -1, -1 -1, 0}
73     };
74
75     if (o->direction == ODR_DECODE)
76         *p = (Z_ETagUnit *)odr_malloc(o, sizeof(**p));
77     else if (!*p)
78         return opt;
79     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
80         return 1;
81     *p = 0;
82     return opt && odr_ok(o);
83 }
84
85 int z_ETagPath(ODR o, Z_ETagPath **p, int opt)
86 {
87     if (o->direction == ODR_DECODE)
88         *p = (Z_ETagPath *)odr_malloc(o, sizeof(**p));
89     else if (!*p)
90         return opt;
91     if (odr_sequence_of(o, (Odr_fun)z_ETagUnit, &(*p)->tags, &(*p)->num_tags))
92         return 1;
93     *p = 0;
94     return opt && odr_ok(o);
95 }
96
97 int z_SimpleElement(ODR o, Z_SimpleElement **p, int opt)
98 {
99     if (!odr_sequence_begin(o, p, sizeof(**p)))
100         return opt && odr_ok(o);
101     return
102         odr_implicit(o, z_ETagPath, &(*p)->path, ODR_CONTEXT, 1, 0) &&
103         odr_implicit(o, z_Variant, &(*p)->variantRequest, ODR_CONTEXT,
104             2, 1) &&
105         odr_sequence_end(o);
106 }
107
108 int z_CompoPrimitives(ODR o, Z_CompoPrimitives **p, int opt)
109 {
110     if (o->direction == ODR_DECODE)
111         *p = (Z_CompoPrimitives *)odr_malloc(o, sizeof(**p));
112     else if (!*p)
113         return opt;
114     if (odr_sequence_of(o, z_InternationalString, &(*p)->primitives,
115         &(*p)->num_primitives))
116         return 1;
117     *p = 0;
118     return opt && odr_ok(o);
119 }
120
121 int z_CompoSpecs(ODR o, Z_CompoSpecs **p, int opt)
122 {
123     if (o->direction == ODR_DECODE)
124         *p = (Z_CompoSpecs *)odr_malloc(o, sizeof(**p));
125     else if (!*p)
126         return opt;
127     if (odr_sequence_of(o, (Odr_fun)z_SimpleElement, &(*p)->specs, &(*p)->num_specs))
128         return 1;
129     *p = 0;
130     return opt && odr_ok(o);
131 }
132
133 int z_CompositeElement(ODR o, Z_CompositeElement **p, int opt)
134 {
135     static Odr_arm arm[] =
136     {
137         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_CompoElement_primitives,
138             (Odr_fun)z_CompoPrimitives},
139         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_CompoElement_specs,
140             (Odr_fun)z_CompoSpecs},
141         {-1, -1, -1, -1, 0}
142     };
143
144     if (!odr_sequence_begin(o, p, sizeof(**p)))
145         return opt && odr_ok(o);
146     return
147         odr_constructed_begin(o, &(*p)->elementList, ODR_CONTEXT, 1) &&
148         odr_choice(o, arm, &(*p)->elementList, &(*p)->which) &&
149         odr_constructed_end(o) &&
150         odr_implicit(o, z_ETagPath, &(*p)->deliveryTag, ODR_CONTEXT, 2, 0) &&
151         odr_implicit(o, z_Variant, &(*p)->variantRequest, ODR_CONTEXT, 3, 1) &&
152         odr_sequence_end(o);
153 }
154
155 int z_ElementRequest(ODR o, Z_ElementRequest **p, int opt)
156 {
157     static Odr_arm arm[] =
158     {
159         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ERequest_simpleElement,
160             (Odr_fun)z_SimpleElement},
161         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ERequest_compositeElement,
162             (Odr_fun)z_CompositeElement},
163         {-1, -1, -1 -1, 0}
164     };
165
166     if (o->direction == ODR_DECODE)
167         *p = (Z_ElementRequest *)odr_malloc(o, sizeof(**p));
168     else if (!*p)
169         return opt;
170     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
171         return 1;
172     *p = 0;
173     return opt && odr_ok(o);
174 }
175
176 int z_Espec1(ODR o, Z_Espec1 **p, int opt)
177 {
178     if (!odr_sequence_begin(o, p, sizeof(**p)))
179         return opt && odr_ok(o);
180     return
181         odr_implicit_settag(o, ODR_CONTEXT, 1) &&
182         (odr_sequence_of(o, z_InternationalString, &(*p)->elementSetNames,
183             &(*p)->num_elementSetNames) || odr_ok(o)) &&
184         odr_implicit(o, odr_oid, &(*p)->defaultVariantSetId, ODR_CONTEXT,
185             2, 1) &&
186         odr_implicit(o, z_Variant, &(*p)->defaultVariantRequest, ODR_CONTEXT,
187             3, 1) &&
188         odr_implicit(o, odr_integer, &(*p)->defaultTagType, ODR_CONTEXT,
189             4, 1) &&
190         odr_implicit_settag(o, ODR_CONTEXT, 5) &&
191         (odr_sequence_of(o, (Odr_fun)z_ElementRequest, &(*p)->elements,
192             &(*p)->num_elements) || odr_ok(o)) &&
193         odr_sequence_end(o);
194 }