Fixed problem with proto.h.
[yaz-moved-to-github.git] / asn / prt-dat.c
1 /*
2  * This file is part of the YAZ toolkit:
3  * Copyright (c) 1998-1999, Index Data.
4  * See the file LICENSE for details.
5  * Sebastian Hammer, Adam Dickmeiss
6  *
7  * Contribution by Ronald van Der Meer (RVDM):
8  *  Databasix Information Systems B.V., Utrecht, The Netherlands.
9  *
10  * $Log: prt-dat.c,v $
11  * Revision 1.3  1999-04-20 09:56:47  adam
12  * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
13  * Modified all encoders/decoders to reflect this change.
14  *
15  * Revision 1.2  1998/02/11 11:53:32  adam
16  * Changed code so that it compiles as C++.
17  *
18  * Revision 1.1  1998/02/10 15:31:46  adam
19  * Implemented date and time structure. Changed the Update Extended
20  * Service.
21  *
22  */
23
24 #include <proto.h>
25
26 int z_MonthAndDay(ODR o, Z_MonthAndDay **p, int opt, const char *name)
27 {
28     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
29         return opt && odr_ok(o);
30     return
31         odr_implicit(o, odr_integer, &(*p)->month, ODR_CONTEXT, 2, 0) &&
32         odr_implicit(o, odr_integer, &(*p)->day, ODR_CONTEXT, 3, 1) &&
33         odr_sequence_end(o);
34 }
35
36 int z_Quarter(ODR o, Z_Quarter **p, int opt, const char *name)
37 {
38     static Odr_arm arm[] =
39     {
40         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Quarter_first,
41          (Odr_fun)odr_null, 0},
42         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Quarter_second,
43          (Odr_fun)odr_null, 0},
44         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Quarter_third,
45          (Odr_fun)odr_null, 0},
46         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Quarter_fourth,
47          (Odr_fun)odr_null, 0},
48         {-1, -1, -1, -1, 0, 0}
49     };
50     
51     if (!odr_initmember(o, p, sizeof(**p)))
52         return opt && odr_ok(o);
53     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
54         return 1;
55     *p = 0;
56     return opt && odr_ok(o);
57 }
58
59 int z_Season(ODR o, Z_Season **p, int opt, const char *name)
60 {
61     static Odr_arm arm[] =
62     {
63         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Season_winter,
64          (Odr_fun)odr_null, 0},
65         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Season_spring,
66          (Odr_fun)odr_null, 0},
67         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Season_summer,
68          (Odr_fun)odr_null, 0},
69         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Season_autumn,
70          (Odr_fun)odr_null, 0},
71         {-1, -1, -1, -1, 0, 0}
72     };
73
74     if (!odr_initmember(o, p, sizeof(**p)))
75         return opt && odr_ok(o);
76     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
77         return 1;
78     *p = 0;
79     return opt && odr_ok(o);
80 }
81
82 int z_PartOfYear(ODR o, Z_PartOfYear **p, int opt, const char *name)
83 {
84     static Odr_arm arm[] =
85     {
86         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PartOfYear_monthAndDay,
87          (Odr_fun) z_MonthAndDay, 0},
88         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PartOfYear_julianDay,
89          (Odr_fun) odr_integer, 0},
90         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_PartOfYear_weekNumber,
91          (Odr_fun) odr_integer, 0},
92         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_PartOfYear_quarter,
93          (Odr_fun) z_Quarter, 0},
94         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_PartOfYear_season,
95          (Odr_fun) z_Season, 0},
96         {-1, -1, -1, -1, 0, 0}
97     };
98     
99     if (!odr_initmember(o, p, sizeof(**p)))
100         return opt && odr_ok(o);
101     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
102         return 1;
103     *p = 0;
104     return opt && odr_ok(o);
105 }
106
107 int z_Era(ODR o, Z_Era **p, int opt, const char *name)
108 {
109     static Odr_arm arm[] =
110     {
111         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Era_decade, (Odr_fun)odr_null, 0},
112         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Era_century, (Odr_fun)odr_null, 0},
113         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Era_millennium, (Odr_fun)odr_null, 0},
114         {-1, -1, -1, -1, 0, 0}
115     };
116     
117     if (!odr_initmember(o, p, sizeof(**p)))
118         return opt && odr_ok(o);
119     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
120         return 1;
121     *p = 0;
122     return opt && odr_ok(o);
123 }
124
125 int z_DateFlags(ODR o, Z_DateFlags **p, int opt, const char *name)
126 {
127     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
128         return opt && odr_ok(o);
129     return
130         odr_implicit(o, odr_null, &(*p)->circa, ODR_CONTEXT, 1, 1) &&
131         odr_implicit(o, z_Era, &(*p)->era, ODR_CONTEXT, 2, 1) &&
132         odr_sequence_end(o);
133 }
134
135 int z_Date(ODR o, Z_Date **p, int opt, const char *name)
136 {
137     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
138         return opt && odr_ok(o);
139     return
140         odr_implicit(o, odr_integer, &(*p)->year, ODR_CONTEXT, 1, 0) &&
141         odr_implicit(o, z_PartOfYear, &(*p)->partOfYear, ODR_CONTEXT, 1, 1) &&
142         odr_implicit(o, z_DateFlags, &(*p)->flags, ODR_CONTEXT, 2, 1) &&
143         odr_sequence_end(o);
144 }
145
146 int z_Zone(ODR o, Z_Zone **p, int opt, const char *name)
147 {
148     static Odr_arm arm[] =
149     {
150         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Zone_local, (Odr_fun)odr_null, 0},
151         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Zone_utc, (Odr_fun)odr_null, 0},
152         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Zone_utcOffset,
153          (Odr_fun)odr_integer, 0},
154         {-1, -1, -1, -1, 0, 0}
155     };
156     
157     if (!odr_initmember(o, p, sizeof(**p)))
158         return opt && odr_ok(o);
159     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
160         return 1;
161     *p = 0;
162     return opt && odr_ok(o);
163 }
164
165 int z_Time(ODR o, Z_Time **p, int opt, const char *name)
166 {
167     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
168         return opt && odr_ok(o);
169     return
170         odr_implicit(o, odr_integer, &(*p)->hour, ODR_CONTEXT, 1, 0) &&
171         odr_implicit(o, odr_integer, &(*p)->minute, ODR_CONTEXT, 2, 1) &&
172         odr_implicit(o, odr_integer, &(*p)->second, ODR_CONTEXT, 3, 1) &&
173         odr_implicit(o, z_IntUnit, &(*p)->partOfSecond, ODR_CONTEXT, 4, 1) &&
174         odr_implicit(o, z_Zone, &(*p)->zone, ODR_CONTEXT, 5, 1) &&
175         odr_sequence_end(o);
176 }
177
178 int z_DateTime(ODR o, Z_DateTime **p, int opt, const char *name)
179 {
180     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
181         return opt && odr_ok(o);
182     return
183         odr_implicit(o, z_Date, &(*p)->z3950Date, ODR_CONTEXT, 1, 1) &&
184         odr_implicit(o, z_Time, &(*p)->z3950Time, ODR_CONTEXT, 2, 1) &&
185         odr_sequence_end(o);
186 }
187