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.4 1999-11-30 13:47:11 adam
12 * Improved installation. Moved header files to include/yaz.
14 * Revision 1.3 1999/04/20 09:56:47 adam
15 * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
16 * Modified all encoders/decoders to reflect this change.
18 * Revision 1.2 1998/02/11 11:53:32 adam
19 * Changed code so that it compiles as C++.
21 * Revision 1.1 1998/02/10 15:31:46 adam
22 * Implemented date and time structure. Changed the Update Extended
27 #include <yaz/proto.h>
29 int z_MonthAndDay(ODR o, Z_MonthAndDay **p, int opt, const char *name)
31 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
32 return opt && odr_ok(o);
34 odr_implicit(o, odr_integer, &(*p)->month, ODR_CONTEXT, 2, 0) &&
35 odr_implicit(o, odr_integer, &(*p)->day, ODR_CONTEXT, 3, 1) &&
39 int z_Quarter(ODR o, Z_Quarter **p, int opt, const char *name)
41 static Odr_arm arm[] =
43 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Quarter_first,
44 (Odr_fun)odr_null, 0},
45 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Quarter_second,
46 (Odr_fun)odr_null, 0},
47 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Quarter_third,
48 (Odr_fun)odr_null, 0},
49 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Quarter_fourth,
50 (Odr_fun)odr_null, 0},
51 {-1, -1, -1, -1, 0, 0}
54 if (!odr_initmember(o, p, sizeof(**p)))
55 return opt && odr_ok(o);
56 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
59 return opt && odr_ok(o);
62 int z_Season(ODR o, Z_Season **p, int opt, const char *name)
64 static Odr_arm arm[] =
66 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Season_winter,
67 (Odr_fun)odr_null, 0},
68 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Season_spring,
69 (Odr_fun)odr_null, 0},
70 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Season_summer,
71 (Odr_fun)odr_null, 0},
72 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Season_autumn,
73 (Odr_fun)odr_null, 0},
74 {-1, -1, -1, -1, 0, 0}
77 if (!odr_initmember(o, p, sizeof(**p)))
78 return opt && odr_ok(o);
79 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
82 return opt && odr_ok(o);
85 int z_PartOfYear(ODR o, Z_PartOfYear **p, int opt, const char *name)
87 static Odr_arm arm[] =
89 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PartOfYear_monthAndDay,
90 (Odr_fun) z_MonthAndDay, 0},
91 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PartOfYear_julianDay,
92 (Odr_fun) odr_integer, 0},
93 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_PartOfYear_weekNumber,
94 (Odr_fun) odr_integer, 0},
95 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_PartOfYear_quarter,
96 (Odr_fun) z_Quarter, 0},
97 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_PartOfYear_season,
98 (Odr_fun) z_Season, 0},
99 {-1, -1, -1, -1, 0, 0}
102 if (!odr_initmember(o, p, sizeof(**p)))
103 return opt && odr_ok(o);
104 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
107 return opt && odr_ok(o);
110 int z_Era(ODR o, Z_Era **p, int opt, const char *name)
112 static Odr_arm arm[] =
114 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Era_decade, (Odr_fun)odr_null, 0},
115 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Era_century, (Odr_fun)odr_null, 0},
116 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Era_millennium, (Odr_fun)odr_null, 0},
117 {-1, -1, -1, -1, 0, 0}
120 if (!odr_initmember(o, p, sizeof(**p)))
121 return opt && odr_ok(o);
122 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
125 return opt && odr_ok(o);
128 int z_DateFlags(ODR o, Z_DateFlags **p, int opt, const char *name)
130 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
131 return opt && odr_ok(o);
133 odr_implicit(o, odr_null, &(*p)->circa, ODR_CONTEXT, 1, 1) &&
134 odr_implicit(o, z_Era, &(*p)->era, ODR_CONTEXT, 2, 1) &&
138 int z_Date(ODR o, Z_Date **p, int opt, const char *name)
140 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
141 return opt && odr_ok(o);
143 odr_implicit(o, odr_integer, &(*p)->year, ODR_CONTEXT, 1, 0) &&
144 odr_implicit(o, z_PartOfYear, &(*p)->partOfYear, ODR_CONTEXT, 1, 1) &&
145 odr_implicit(o, z_DateFlags, &(*p)->flags, ODR_CONTEXT, 2, 1) &&
149 int z_Zone(ODR o, Z_Zone **p, int opt, const char *name)
151 static Odr_arm arm[] =
153 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Zone_local, (Odr_fun)odr_null, 0},
154 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Zone_utc, (Odr_fun)odr_null, 0},
155 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Zone_utcOffset,
156 (Odr_fun)odr_integer, 0},
157 {-1, -1, -1, -1, 0, 0}
160 if (!odr_initmember(o, p, sizeof(**p)))
161 return opt && odr_ok(o);
162 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
165 return opt && odr_ok(o);
168 int z_Time(ODR o, Z_Time **p, int opt, const char *name)
170 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
171 return opt && odr_ok(o);
173 odr_implicit(o, odr_integer, &(*p)->hour, ODR_CONTEXT, 1, 0) &&
174 odr_implicit(o, odr_integer, &(*p)->minute, ODR_CONTEXT, 2, 1) &&
175 odr_implicit(o, odr_integer, &(*p)->second, ODR_CONTEXT, 3, 1) &&
176 odr_implicit(o, z_IntUnit, &(*p)->partOfSecond, ODR_CONTEXT, 4, 1) &&
177 odr_implicit(o, z_Zone, &(*p)->zone, ODR_CONTEXT, 5, 1) &&
181 int z_DateTime(ODR o, Z_DateTime **p, int opt, const char *name)
183 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
184 return opt && odr_ok(o);
186 odr_implicit(o, z_Date, &(*p)->z3950Date, ODR_CONTEXT, 1, 1) &&
187 odr_implicit(o, z_Time, &(*p)->z3950Time, ODR_CONTEXT, 2, 1) &&