2 * This file is part of the YAZ toolkit:
3 * Copyright (c) 1998, Index Data.
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
7 * Contribution by Ronald van Der Meer (RVDM):
8 * Databasix Information Systems B.V., Utrecht, The Netherlands.
11 * Revision 1.2 1998-02-11 11:53:32 adam
12 * Changed code so that it compiles as C++.
14 * Revision 1.1 1998/02/10 15:31:46 adam
15 * Implemented date and time structure. Changed the Update Extended
22 int z_MonthAndDay(ODR o, Z_MonthAndDay **p, int opt)
24 if (!odr_sequence_begin(o, p, sizeof(**p)))
25 return opt && odr_ok(o);
27 odr_implicit(o, odr_integer, &(*p)->month, ODR_CONTEXT, 2, 0) &&
28 odr_implicit(o, odr_integer, &(*p)->day, ODR_CONTEXT, 3, 1) &&
32 int z_Quarter(ODR o, Z_Quarter **p, int opt)
34 static Odr_arm arm[] =
36 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Quarter_first, (Odr_fun)odr_null},
37 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Quarter_second, (Odr_fun)odr_null},
38 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Quarter_third, (Odr_fun)odr_null},
39 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Quarter_fourth, (Odr_fun)odr_null},
43 if (!odr_initmember(o, p, sizeof(**p)))
44 return opt && odr_ok(o);
45 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
48 return opt && odr_ok(o);
51 int z_Season(ODR o, Z_Season **p, int opt)
53 static Odr_arm arm[] =
55 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Season_winter, (Odr_fun)odr_null},
56 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Season_spring, (Odr_fun)odr_null},
57 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Season_summer, (Odr_fun)odr_null},
58 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Season_autumn, (Odr_fun)odr_null},
62 if (!odr_initmember(o, p, sizeof(**p)))
63 return opt && odr_ok(o);
64 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
67 return opt && odr_ok(o);
70 int z_PartOfYear(ODR o, Z_PartOfYear **p, int opt)
72 static Odr_arm arm[] =
74 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PartOfYear_monthAndDay,
75 (Odr_fun) z_MonthAndDay},
76 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PartOfYear_julianDay,
77 (Odr_fun) odr_integer},
78 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_PartOfYear_weekNumber,
79 (Odr_fun) odr_integer},
80 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_PartOfYear_quarter,
82 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_PartOfYear_season,
87 if (!odr_initmember(o, p, sizeof(**p)))
88 return opt && odr_ok(o);
89 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
92 return opt && odr_ok(o);
95 int z_Era(ODR o, Z_Era **p, int opt)
97 static Odr_arm arm[] =
99 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Era_decade, (Odr_fun)odr_null},
100 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Era_century, (Odr_fun)odr_null},
101 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Era_millennium, (Odr_fun)odr_null},
105 if (!odr_initmember(o, p, sizeof(**p)))
106 return opt && odr_ok(o);
107 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
110 return opt && odr_ok(o);
113 int z_DateFlags(ODR o, Z_DateFlags **p, int opt)
115 if (!odr_sequence_begin(o, p, sizeof(**p)))
116 return opt && odr_ok(o);
118 odr_implicit(o, odr_null, &(*p)->circa, ODR_CONTEXT, 1, 1) &&
119 odr_implicit(o, z_Era, &(*p)->era, ODR_CONTEXT, 2, 1) &&
123 int z_Date(ODR o, Z_Date **p, int opt)
125 if (!odr_sequence_begin(o, p, sizeof(**p)))
126 return opt && odr_ok(o);
128 odr_implicit(o, odr_integer, &(*p)->year, ODR_CONTEXT, 1, 0) &&
129 odr_implicit(o, z_PartOfYear, &(*p)->partOfYear, ODR_CONTEXT, 1, 1) &&
130 odr_implicit(o, z_DateFlags, &(*p)->flags, ODR_CONTEXT, 2, 1) &&
134 int z_Zone(ODR o, Z_Zone **p, int opt)
136 static Odr_arm arm[] =
138 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Zone_local, (Odr_fun)odr_null},
139 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Zone_utc, (Odr_fun)odr_null},
140 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Zone_utcOffset, (Odr_fun)odr_integer},
144 if (!odr_initmember(o, p, sizeof(**p)))
145 return opt && odr_ok(o);
146 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
149 return opt && odr_ok(o);
152 int z_Time(ODR o, Z_Time **p, int opt)
154 if (!odr_sequence_begin(o, p, sizeof(**p)))
155 return opt && odr_ok(o);
157 odr_implicit(o, odr_integer, &(*p)->hour, ODR_CONTEXT, 1, 0) &&
158 odr_implicit(o, odr_integer, &(*p)->minute, ODR_CONTEXT, 2, 1) &&
159 odr_implicit(o, odr_integer, &(*p)->second, ODR_CONTEXT, 3, 1) &&
160 odr_implicit(o, z_IntUnit, &(*p)->partOfSecond, ODR_CONTEXT, 4, 1) &&
161 odr_implicit(o, z_Zone, &(*p)->zone, ODR_CONTEXT, 5, 1) &&
165 int z_DateTime(ODR o, Z_DateTime **p, int opt)
167 if (!odr_sequence_begin(o, p, sizeof(**p)))
168 return opt && odr_ok(o);
170 odr_implicit(o, z_Date, &(*p)->z3950Date, ODR_CONTEXT, 1, 1) &&
171 odr_implicit(o, z_Time, &(*p)->z3950Time, ODR_CONTEXT, 2, 1) &&