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
7 * Contribution by Ronald van Der Meer (RVDM):
8 * Databasix Information Systems B.V., Utrecht, The Netherlands.
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.
15 * Revision 1.2 1998/02/11 11:53:32 adam
16 * Changed code so that it compiles as C++.
18 * Revision 1.1 1998/02/10 15:31:46 adam
19 * Implemented date and time structure. Changed the Update Extended
26 int z_MonthAndDay(ODR o, Z_MonthAndDay **p, int opt, const char *name)
28 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
29 return opt && odr_ok(o);
31 odr_implicit(o, odr_integer, &(*p)->month, ODR_CONTEXT, 2, 0) &&
32 odr_implicit(o, odr_integer, &(*p)->day, ODR_CONTEXT, 3, 1) &&
36 int z_Quarter(ODR o, Z_Quarter **p, int opt, const char *name)
38 static Odr_arm arm[] =
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}
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))
56 return opt && odr_ok(o);
59 int z_Season(ODR o, Z_Season **p, int opt, const char *name)
61 static Odr_arm arm[] =
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}
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))
79 return opt && odr_ok(o);
82 int z_PartOfYear(ODR o, Z_PartOfYear **p, int opt, const char *name)
84 static Odr_arm arm[] =
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}
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))
104 return opt && odr_ok(o);
107 int z_Era(ODR o, Z_Era **p, int opt, const char *name)
109 static Odr_arm arm[] =
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}
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))
122 return opt && odr_ok(o);
125 int z_DateFlags(ODR o, Z_DateFlags **p, int opt, const char *name)
127 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
128 return opt && odr_ok(o);
130 odr_implicit(o, odr_null, &(*p)->circa, ODR_CONTEXT, 1, 1) &&
131 odr_implicit(o, z_Era, &(*p)->era, ODR_CONTEXT, 2, 1) &&
135 int z_Date(ODR o, Z_Date **p, int opt, const char *name)
137 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
138 return opt && odr_ok(o);
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) &&
146 int z_Zone(ODR o, Z_Zone **p, int opt, const char *name)
148 static Odr_arm arm[] =
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}
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))
162 return opt && odr_ok(o);
165 int z_Time(ODR o, Z_Time **p, int opt, const char *name)
167 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
168 return opt && odr_ok(o);
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) &&
178 int z_DateTime(ODR o, Z_DateTime **p, int opt, const char *name)
180 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
181 return opt && odr_ok(o);
183 odr_implicit(o, z_Date, &(*p)->z3950Date, ODR_CONTEXT, 1, 1) &&
184 odr_implicit(o, z_Time, &(*p)->z3950Time, ODR_CONTEXT, 2, 1) &&