Fixed problem with proto.h.
[yaz-moved-to-github.git] / asn / prt-arc.c
1 /*
2  * Copyright (c) 1995-1999, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: prt-arc.c,v $
7  * Revision 1.3  1999-04-20 09:56:47  adam
8  * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
9  * Modified all encoders/decoders to reflect this change.
10  *
11  * Revision 1.2  1998/02/11 11:53:32  adam
12  * Changed code so that it compiles as C++.
13  *
14  * Revision 1.1  1996/06/10 08:55:20  quinn
15  * Added Summary, OPAC
16  *
17  *
18  */
19
20 #include <proto.h>
21
22 /* ----------------------- Summary Record --------------- */
23
24 int z_FormatSpec(ODR o, Z_FormatSpec **p, int opt, const char *name)
25 {
26     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
27         return opt && odr_ok(o);
28     return
29         odr_implicit(o, z_InternationalString, &(*p)->type,
30                      ODR_CONTEXT, 1, 0) &&
31         odr_implicit(o, odr_integer, &(*p)->size, ODR_CONTEXT, 2, 1) &&
32         odr_implicit(o, odr_integer, &(*p)->bestPosn, ODR_CONTEXT, 3, 1) &&
33         odr_sequence_end(o);
34 }
35
36 int z_BriefBib(ODR o, Z_BriefBib **p, int opt, const char *name)
37 {
38     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
39         return opt && odr_ok(o);
40     return
41         odr_implicit(o, z_InternationalString, &(*p)->title,
42                      ODR_CONTEXT, 1, 0) &&
43         odr_implicit(o, z_InternationalString, &(*p)->author,
44                      ODR_CONTEXT, 2, 1) &&
45         odr_implicit(o, z_InternationalString, &(*p)->callNumber,
46                      ODR_CONTEXT, 3, 1) &&
47         odr_implicit(o, z_InternationalString, &(*p)->recordType,
48                      ODR_CONTEXT, 4, 1) &&
49         odr_implicit(o, z_InternationalString, &(*p)->bibliographicLevel,
50                      ODR_CONTEXT, 5, 1) &&
51         odr_implicit_settag(o, ODR_CONTEXT, 6) &&
52         (odr_sequence_of(o, (Odr_fun)z_FormatSpec, &(*p)->format,
53                          &(*p)->num_format, 0) ||
54          odr_ok(o)) &&
55         odr_implicit(o, z_InternationalString, &(*p)->publicationPlace,
56                      ODR_CONTEXT, 7, 1) &&
57         odr_implicit(o, z_InternationalString, &(*p)->publicationDate,
58                      ODR_CONTEXT, 8, 1) &&
59         odr_implicit(o, z_InternationalString, &(*p)->targetSystemKey,
60                      ODR_CONTEXT, 9, 1) &&
61         odr_implicit(o, z_InternationalString, &(*p)->satisfyingElement,
62                      ODR_CONTEXT, 10, 1) &&
63         odr_implicit(o, odr_integer, &(*p)->rank,
64                      ODR_CONTEXT, 11, 1) &&
65         odr_implicit(o, z_InternationalString, &(*p)->documentId,
66                      ODR_CONTEXT, 12, 1) &&
67         odr_implicit(o, z_InternationalString, &(*p)->abstract,
68                      ODR_CONTEXT, 13, 1) &&
69         z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
70         odr_sequence_end(o);
71 }
72
73 /* ----------------------- Summary Record --------------- */
74
75 int z_CircRecord(ODR o, Z_CircRecord **p, int opt, const char *name)
76 {
77     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
78         return opt && odr_ok(o);
79     return
80         odr_implicit(o, odr_bool, &(*p)->availableNow, ODR_CONTEXT, 1, 0) &&
81         odr_implicit(o, z_InternationalString, &(*p)->availabilityDate,
82                      ODR_CONTEXT, 2, 1) &&
83         odr_implicit(o, z_InternationalString, &(*p)->availableThru,
84                      ODR_CONTEXT, 3, 1) &&
85         odr_implicit(o, z_InternationalString, &(*p)->restrictions,
86                      ODR_CONTEXT, 4, 1) &&
87         odr_implicit(o, z_InternationalString, &(*p)->itemId,
88                      ODR_CONTEXT, 5, 1) &&
89         odr_implicit(o, odr_bool, &(*p)->renewable, ODR_CONTEXT, 6, 0) &&
90         odr_implicit(o, odr_bool, &(*p)->onHold, ODR_CONTEXT, 7, 0) &&
91         odr_implicit(o, z_InternationalString, &(*p)->enumAndChron,
92                      ODR_CONTEXT, 8, 1) &&
93         odr_implicit(o, z_InternationalString, &(*p)->midspine,
94                      ODR_CONTEXT, 9, 1) &&
95         odr_implicit(o, z_InternationalString, &(*p)->temporaryLocation,
96                      ODR_CONTEXT, 10, 1) &&
97         odr_sequence_end(o);
98 }
99
100 int z_Volume(ODR o, Z_Volume **p, int opt, const char *name)
101 {
102     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
103         return opt && odr_ok(o);
104     return
105         odr_implicit(o, z_InternationalString, &(*p)->enumeration,
106                      ODR_CONTEXT, 1, 1) &&
107         odr_implicit(o, z_InternationalString, &(*p)->chronology,
108                      ODR_CONTEXT, 2, 1) &&
109         odr_implicit(o, z_InternationalString, &(*p)->enumAndChron,
110                      ODR_CONTEXT, 3, 1) &&
111         odr_sequence_end(o);
112 }
113
114 int z_HoldingsAndCircData(ODR o, Z_HoldingsAndCircData **p, int opt,
115                           const char *name)
116 {
117     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
118         return opt && odr_ok(o);
119     return
120         odr_implicit(o, z_InternationalString, &(*p)->typeOfRecord,
121                      ODR_CONTEXT, 1, 1) &&
122         odr_implicit(o, z_InternationalString, &(*p)->encodingLevel,
123                      ODR_CONTEXT, 2, 1) &&
124         odr_implicit(o, z_InternationalString, &(*p)->format,
125                      ODR_CONTEXT, 3, 1) &&
126         odr_implicit(o, z_InternationalString, &(*p)->receiptAcqStatus,
127                      ODR_CONTEXT, 4, 1) &&
128         odr_implicit(o, z_InternationalString, &(*p)->generalRetention,
129                      ODR_CONTEXT, 5, 1) &&
130         odr_implicit(o, z_InternationalString, &(*p)->completeness,
131                      ODR_CONTEXT, 6, 1) &&
132         odr_implicit(o, z_InternationalString, &(*p)->dateOfReport,
133                      ODR_CONTEXT, 7, 1) &&
134         odr_implicit(o, z_InternationalString, &(*p)->nucCode,
135                      ODR_CONTEXT, 8, 1) &&
136         odr_implicit(o, z_InternationalString, &(*p)->localLocation,
137                      ODR_CONTEXT, 9, 1) &&
138         odr_implicit(o, z_InternationalString, &(*p)->shelvingLocation,
139                      ODR_CONTEXT, 10, 1) &&
140         odr_implicit(o, z_InternationalString, &(*p)->callNumber,
141                      ODR_CONTEXT, 11, 1) &&
142         odr_implicit(o, z_InternationalString, &(*p)->shelvingData,
143                      ODR_CONTEXT, 12, 1) &&
144         odr_implicit(o, z_InternationalString, &(*p)->copyNumber,
145                      ODR_CONTEXT, 13, 1) &&
146         odr_implicit(o, z_InternationalString, &(*p)->publicNote,
147                      ODR_CONTEXT, 14, 1) &&
148         odr_implicit(o, z_InternationalString, &(*p)->reproductionNote,
149                      ODR_CONTEXT, 15, 1) &&
150         odr_implicit(o, z_InternationalString, &(*p)->termsUseRepro,
151                      ODR_CONTEXT, 16, 1) &&
152         odr_implicit(o, z_InternationalString, &(*p)->enumAndChron,
153                      ODR_CONTEXT, 17, 1) &&
154         odr_implicit_settag(o, ODR_CONTEXT, 18) &&
155         (odr_sequence_of(o, (Odr_fun)z_Volume, &(*p)->volumes,
156                          &(*p)->num_volumes, 0) ||
157          odr_ok(o)) &&
158         odr_implicit_settag(o, ODR_CONTEXT, 19) &&
159         (odr_sequence_of(o, (Odr_fun)z_CircRecord, &(*p)->circulationData,
160                          &(*p)->num_circulationData, 0) || odr_ok(o)) &&
161         odr_sequence_end(o);
162 }
163
164 int z_HoldingsRecord(ODR o, Z_HoldingsRecord **p, int opt, const char *name)
165 {
166     static Odr_arm arm[] =
167     {
168         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_HoldingsRecord_marcHoldingsRecord,
169          (Odr_fun)z_External, 0},
170         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_HoldingsRecord_holdingsAndCirc,
171          (Odr_fun)z_HoldingsAndCircData, 0},
172         {-1, -1, -1, -1, 0, 0}
173     };
174     
175     if (!odr_initmember(o, p, sizeof(**p)))
176         return opt && odr_ok(o);
177     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
178         return 1;
179     *p = 0;
180     return opt && odr_ok(o);
181 }
182
183 int z_OPACRecord(ODR o, Z_OPACRecord **p, int opt, const char *name)
184 {
185     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
186         return opt && odr_ok(o);
187     return
188         odr_implicit(o, z_External, &(*p)->bibliographicRecord,
189                      ODR_CONTEXT, 1, 1) &&
190         odr_implicit_settag(o, ODR_CONTEXT, 2) &&
191         (odr_sequence_of(o, (Odr_fun)z_HoldingsRecord, &(*p)->holdingsData,
192                          &(*p)->num_holdingsData, 0) || odr_ok(o)) &&
193         odr_sequence_end(o);
194 }