Minor change to make C++ happy.
[yaz-moved-to-github.git] / asn / prt-exd.c
1 /*
2  * Copyright (c) 1995-1998, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: prt-exd.c,v $
7  * Revision 1.8  1998-02-11 11:53:32  adam
8  * Changed code so that it compiles as C++.
9  *
10  * Revision 1.7  1998/02/10 15:31:46  adam
11  * Implemented date and time structure. Changed the Update Extended
12  * Service.
13  *
14  * Revision 1.6  1998/01/05 09:04:57  adam
15  * Fixed bugs in encoders/decoders - Not operator (!) missing.
16  *
17  * Revision 1.5  1997/04/30 08:52:02  quinn
18  * Null
19  *
20  * Revision 1.4  1996/10/10  12:35:12  quinn
21  * Added Update extended service.
22  *
23  * Revision 1.3  1995/09/29  17:11:54  quinn
24  * Smallish
25  *
26  * Revision 1.2  1995/09/27  15:02:41  quinn
27  * Modified function heads & prototypes.
28  *
29  * Revision 1.1  1995/08/21  09:16:32  quinn
30  * Added Extended services + Item Order
31  *
32  *
33  */
34
35 #include <proto.h>
36
37 int z_TaskPackage(ODR o, Z_TaskPackage **p, int opt)
38 {
39     if (!odr_sequence_begin(o, p, sizeof(**p)))
40         return opt && odr_ok(o);
41     return
42         odr_implicit(o, odr_oid, &(*p)->packageType, ODR_CONTEXT, 1, 0) &&
43         odr_implicit(o, z_InternationalString, &(*p)->packageName, ODR_CONTEXT,
44             2, 1) &&
45         odr_implicit(o, z_InternationalString, &(*p)->userId, ODR_CONTEXT,
46             3, 1) &&
47         odr_implicit(o, z_IntUnit, &(*p)->retentionTime, ODR_CONTEXT, 4, 1) &&
48         odr_implicit(o, z_Permissions, &(*p)->permissions, ODR_CONTEXT, 5, 1) &&
49         odr_implicit(o, z_InternationalString, &(*p)->description, ODR_CONTEXT,
50             6, 1) &&
51         odr_implicit(o, odr_octetstring, &(*p)->targetReference, ODR_CONTEXT,
52             7, 0) &&
53         odr_implicit(o, odr_generalizedtime, &(*p)->creationDateTime,
54             ODR_CONTEXT,
55             8, 1) &&
56         odr_implicit(o, odr_integer, &(*p)->taskStatus, ODR_CONTEXT, 9, 0) &&
57         odr_implicit_settag(o, ODR_CONTEXT, 10) &&
58         (odr_sequence_of(o, (Odr_fun)z_DiagRec, &(*p)->packageDiagnostics,
59             &(*p)->num_packageDiagnostics) || odr_ok(o)) &&
60         odr_implicit(o, z_External, &(*p)->taskSpecificParameters, ODR_CONTEXT,
61             11, 0) &&
62         odr_sequence_end(o);
63 }
64
65 /* ----------------------- ITEM ORDER --------------------- */
66
67 int z_IOTargetPart(ODR o, Z_IOTargetPart **p, int opt)
68 {
69     if (!odr_sequence_begin(o, p, sizeof(**p)))
70         return opt && odr_ok(o);
71     return
72         odr_implicit(o, z_External, &(*p)->itemRequest, ODR_CONTEXT, 1, 1) &&
73         odr_implicit(o, z_External, &(*p)->statusOrErrorReport, ODR_CONTEXT,
74             2, 0) &&
75         odr_implicit(o, odr_integer, &(*p)->auxiliaryStatus, ODR_CONTEXT,
76             3, 1) &&
77         odr_sequence_end(o);
78 }
79
80 int z_IOResultSetItem(ODR o, Z_IOResultSetItem **p, int opt)
81 {
82     if (!odr_sequence_begin(o, p, sizeof(**p)))
83         return opt && odr_ok(o);
84     return
85         odr_implicit(o, z_InternationalString, &(*p)->resultSetId, ODR_CONTEXT,
86             1, 0) &&
87         odr_implicit(o, odr_integer, &(*p)->item, ODR_CONTEXT, 2, 1) &&
88         odr_sequence_end(o);
89 }
90
91 int z_IOOriginPartNotToKeep(ODR o, Z_IOOriginPartNotToKeep **p, int opt)
92 {
93     if (!odr_sequence_begin(o, p, sizeof(**p)))
94         return opt && odr_ok(o);
95     return
96         odr_implicit(o, z_IOResultSetItem, &(*p)->resultSetItem, ODR_CONTEXT,
97             1, 0) &&
98         odr_implicit(o, z_External, &(*p)->itemRequest, ODR_CONTEXT, 2, 1) &&
99         odr_sequence_end(o);
100 }
101
102 int z_IOContact(ODR o, Z_IOContact **p, int opt)
103 {
104     if (!odr_sequence_begin(o, p, sizeof(**p)))
105         return opt && odr_ok(o);
106     return
107         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
108             1, 1) &&
109         odr_implicit(o, z_InternationalString, &(*p)->phone, ODR_CONTEXT,
110             2, 1) &&
111         odr_implicit(o, z_InternationalString, &(*p)->email, ODR_CONTEXT,
112             3, 1) &&
113         odr_sequence_end(o);
114 }
115
116 int z_IOCreditCardInfo(ODR o, Z_IOCreditCardInfo **p, int opt)
117 {
118     if (!odr_sequence_begin(o, p, sizeof(**p)))
119         return opt && odr_ok(o);
120     return
121         odr_implicit(o, z_InternationalString, &(*p)->nameOnCard, ODR_CONTEXT,
122             1, 0) &&
123         odr_implicit(o, z_InternationalString, &(*p)->expirationDate,
124             ODR_CONTEXT, 2, 0) &&
125         odr_implicit(o, z_InternationalString, &(*p)->cardNumber, ODR_CONTEXT,
126             3, 0) &&
127         odr_sequence_end(o);
128 }
129
130 int z_IOBilling(ODR o, Z_IOBilling **p, int opt)
131 {
132     static Odr_arm arm[] =
133     {
134         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_IOBilling_billInvoice, (Odr_fun)odr_null},
135         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IOBilling_prepay, (Odr_fun)odr_null},
136         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IOBilling_depositAccount, (Odr_fun)odr_null},
137         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IOBilling_creditCard,
138             (Odr_fun)z_IOCreditCardInfo},
139         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_IOBilling_cardInfoPreviouslySupplied,
140             (Odr_fun)odr_null},
141         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_IOBilling_privateKnown, (Odr_fun)odr_null},
142         {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_IOBilling_privateNotKnown,
143             (Odr_fun)z_External},
144         {-1, -1, -1, -1, 0}
145     };
146
147     if (!odr_sequence_begin(o, p, sizeof(**p)))
148         return opt && odr_ok(o);
149     return
150         odr_constructed_begin(o, &(*p)->paymentMethod,
151             ODR_CONTEXT, 1) &&
152         odr_choice(o, arm, &(*p)->paymentMethod, &(*p)->which) &&
153         odr_constructed_end(o) &&
154         odr_implicit(o, z_InternationalString, &(*p)->customerReference,
155             ODR_CONTEXT, 2, 1) &&
156         odr_implicit(o, z_InternationalString, &(*p)->customerPONumber,
157             ODR_CONTEXT, 3, 1) &&
158         odr_sequence_end(o);
159 }
160
161 int z_IOOriginPartToKeep(ODR o, Z_IOOriginPartToKeep **p, int opt)
162 {
163     if (!odr_sequence_begin(o, p, sizeof(**p)))
164         return opt && odr_ok(o);
165     return
166         odr_implicit(o, z_External, &(*p)->supplDescription, ODR_CONTEXT,
167             1, 1) &&
168         odr_implicit(o, z_IOContact, &(*p)->contact, ODR_CONTEXT, 2, 1) &&
169         odr_implicit(o, z_IOBilling, &(*p)->addlBilling, ODR_CONTEXT,
170             3, 1) &&
171         odr_sequence_end(o);
172 }
173
174 int z_IORequest(ODR o, Z_IORequest **p, int opt)
175 {
176     if (!odr_sequence_begin(o, p, sizeof(**p)))
177         return opt && odr_ok(o);
178     return 
179         odr_implicit(o, z_IOOriginPartToKeep, &(*p)->toKeep, ODR_CONTEXT,
180             1, 1) &&
181         odr_implicit(o, z_IOOriginPartNotToKeep, &(*p)->notToKeep, ODR_CONTEXT,
182             2, 0) &&
183         odr_sequence_end(o);
184 }
185
186 int z_IOTaskPackage(ODR o, Z_IOTaskPackage **p, int opt)
187 {
188     if (!odr_sequence_begin(o, p, sizeof(**p)))
189         return opt && odr_ok(o);
190     return
191         odr_implicit(o, z_IOOriginPartToKeep, &(*p)->originPart, ODR_CONTEXT,
192             1, 1) &&
193         odr_implicit(o, z_IOTargetPart, &(*p)->targetPart, ODR_CONTEXT, 2, 0) &&
194         odr_sequence_end(o);
195 }
196
197 int z_ItemOrder(ODR o, Z_ItemOrder **p, int opt)
198 {
199     static Odr_arm arm[] =
200     {
201         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ItemOrder_esRequest, (Odr_fun)z_IORequest},
202         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ItemOrder_taskPackage,
203             (Odr_fun)z_IOTaskPackage},
204         {-1, -1, -1, -1, 0}
205     };
206
207     if (o->direction == ODR_DECODE)
208         *p = (Z_ItemOrder *)odr_malloc(o, sizeof(**p));
209     else if (!*p)
210         return opt;
211     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
212         return 1;
213     *p = 0;
214     return opt && odr_ok(o);
215 }
216
217 /* ----------------------- ITEM UPDATE -------------------- */
218
219 int z_IUSuppliedRecordsId (ODR o, Z_IUSuppliedRecordsId **p, int opt)
220 {
221     static Odr_arm arm[] = {
222         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUSuppliedRecordsId_timeStamp,
223          odr_generalizedtime},
224         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUSuppliedRecordsId_versionNumber,
225          z_InternationalString},
226         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IUSuppliedRecordsId_previousVersion,
227          (Odr_fun)odr_external},
228         {-1, -1, -1, -1, 0}
229     };
230     if (!odr_initmember(o, p, sizeof(**p)))
231         return opt && odr_ok(o);
232     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
233         return 1;
234     *p = 0;
235     return opt && odr_ok(o);
236 }
237
238 int z_IUCorrelationInfo (ODR o, Z_IUCorrelationInfo **p, int opt)
239 {
240     if (!odr_sequence_begin (o, p, sizeof(**p)))
241         return opt && odr_ok (o);
242     return
243         odr_implicit (o, z_InternationalString,
244             &(*p)->note, ODR_CONTEXT, 1, 1) &&
245         odr_implicit (o, odr_integer,
246             &(*p)->id, ODR_CONTEXT, 2, 1) &&
247         odr_sequence_end (o);
248 }
249
250 int z_IUSuppliedRecords_elem (ODR o, Z_IUSuppliedRecords_elem **p, int opt)
251 {
252     static Odr_arm arm[] = {
253         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUSuppliedRecords_number,
254          (Odr_fun)odr_integer},
255         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUSuppliedRecords_string,
256          (Odr_fun)z_InternationalString},
257         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IUSuppliedRecords_opaque,
258          (Odr_fun)odr_octetstring},
259         {-1, -1, -1, -1, 0}
260     };
261     if (!odr_sequence_begin (o, p, sizeof(**p)))
262         return opt && odr_ok (o);
263     return
264         ((odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 1) &&
265         odr_choice (o, arm, &(*p)->u, &(*p)->which) &&
266         odr_constructed_end (o)) || odr_ok(o)) &&
267         odr_explicit (o, z_IUSuppliedRecordsId,
268             &(*p)->supplementalId, ODR_CONTEXT, 2, 1) &&
269         odr_implicit (o, z_IUCorrelationInfo,
270             &(*p)->correlationInfo, ODR_CONTEXT, 3, 1) &&
271         odr_implicit (o, odr_external,
272             &(*p)->record, ODR_CONTEXT, 4, 0) &&
273         odr_sequence_end (o);
274 }
275
276 int z_IUSuppliedRecords (ODR o, Z_IUSuppliedRecords **p, int opt)
277 {
278     if (!odr_initmember (o, p, sizeof(**p)))
279         return opt && odr_ok(o);
280     if (odr_sequence_of (o, (Odr_fun)z_IUSuppliedRecords_elem, &(*p)->elements,
281         &(*p)->num))
282         return 1;
283     *p = 0;
284     return opt && odr_ok(o);
285 }
286
287 int z_IUTaskPackageRecordStructure (ODR o, Z_IUTaskPackageRecordStructure **p,
288     int opt)
289 {
290     static Odr_arm arm[] = {
291         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUTaskPackageRecordStructure_record,
292          (Odr_fun)odr_external},
293         {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_IUTaskPackageRecordStructure_surrogateDiagnostics,
294          (Odr_fun)z_DiagRecs},
295         {-1, -1, -1, -1, 0}
296     };
297     if (!odr_sequence_begin (o, p, sizeof(**p)))
298         return opt && odr_ok (o);
299     return
300         ((odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 1) &&
301         odr_choice (o, arm, &(*p)->u, &(*p)->which) &&
302         odr_constructed_end (o)) || odr_ok(o)) &&
303         odr_implicit (o, z_IUCorrelationInfo,
304             &(*p)->correlationInfo, ODR_CONTEXT, 2, 1) &&
305         odr_implicit (o, odr_integer,
306             &(*p)->recordStatus, ODR_CONTEXT, 3, 0) &&
307         odr_implicit (o, z_DiagRecs, 
308             &(*p)->supplementalDiagnostics, ODR_CONTEXT, 4, 1) &&
309         odr_sequence_end (o);
310 }
311
312 int z_IUOriginPartToKeep (ODR o, Z_IUOriginPartToKeep **p, int opt)
313 {
314     if (!odr_sequence_begin (o, p, sizeof(**p)))
315         return opt && odr_ok (o);
316     return
317         odr_implicit (o, odr_integer,
318             &(*p)->action, ODR_CONTEXT, 1, 0) &&
319         odr_implicit (o, z_InternationalString,
320             &(*p)->databaseName, ODR_CONTEXT, 2, 0) &&
321         odr_implicit (o, odr_oid,
322             &(*p)->schema, ODR_CONTEXT, 3, 1) &&
323         odr_implicit (o, z_InternationalString,
324             &(*p)->elementSetName, ODR_CONTEXT, 4, 1) &&
325         odr_implicit (o, odr_external,
326             &(*p)->actionQualifier, ODR_CONTEXT, 5, 1) &&
327         odr_sequence_end (o);
328 }
329
330 int z_IUTargetPart (ODR o, Z_IUTargetPart **p, int opt)
331 {
332     if (!odr_sequence_begin (o, p, sizeof(**p)))
333         return opt && odr_ok (o);
334     return
335         odr_implicit (o, odr_integer,
336             &(*p)->updateStatus, ODR_CONTEXT, 1, 0) &&
337         odr_implicit_settag (o, ODR_CONTEXT, 2) &&
338         (odr_sequence_of(o, (Odr_fun)z_DiagRec, &(*p)->globalDiagnostics,
339           &(*p)->num_globalDiagnostics) || odr_ok(o)) &&
340         odr_implicit_settag (o, ODR_CONTEXT, 3) &&
341         odr_sequence_of(o, (Odr_fun)z_IUTaskPackageRecordStructure, &(*p)->taskPackageRecords,
342           &(*p)->num_taskPackageRecords) &&
343         odr_sequence_end (o);
344 }
345
346 int z_IUUpdateEsRequest (ODR o, Z_IUUpdateEsRequest **p, int opt)
347 {
348     if (!odr_sequence_begin (o, p, sizeof(**p)))
349         return opt && odr_ok (o);
350     return
351         odr_explicit (o, z_IUOriginPartToKeep,
352             &(*p)->toKeep, ODR_CONTEXT, 1, 0) &&
353         odr_explicit (o, z_IUSuppliedRecords,
354             &(*p)->notToKeep, ODR_CONTEXT, 2, 0) &&
355         odr_sequence_end (o);
356 }
357
358 int z_IUUpdateTaskPackage (ODR o, Z_IUUpdateTaskPackage **p, int opt)
359 {
360     if (!odr_sequence_begin (o, p, sizeof(**p)))
361         return opt && odr_ok (o);
362     return
363         odr_explicit (o, z_IUOriginPartToKeep,
364             &(*p)->originPart, ODR_CONTEXT, 1, 0) &&
365         odr_explicit (o, z_IUTargetPart,
366             &(*p)->targetPart, ODR_CONTEXT, 2, 0) &&
367         odr_sequence_end (o);
368 }
369
370 int z_IUUpdate (ODR o, Z_IUUpdate **p, int opt)
371 {
372     static Odr_arm arm[] = {
373         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUUpdate_esRequest,
374          (Odr_fun)z_IUUpdateEsRequest},
375         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUUpdate_taskPackage,
376          (Odr_fun)z_IUUpdateTaskPackage},
377         {-1, -1, -1, -1, 0}
378     };
379     if (!odr_initmember(o, p, sizeof(**p)))
380         return opt && odr_ok(o);
381     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
382         return 1;
383     *p = 0;
384     return opt && odr_ok(o);
385 }