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.1 1998-02-10 15:31:46 adam
12 * Implemented date and time structure. Changed the Update Extended
19 int z_MonthAndDay(ODR o, Z_MonthAndDay **p, int opt)
21 if (!odr_sequence_begin(o, p, sizeof(**p)))
22 return opt && odr_ok(o);
24 odr_implicit(o, odr_integer, &(*p)->month, ODR_CONTEXT, 2, 0) &&
25 odr_implicit(o, odr_integer, &(*p)->day, ODR_CONTEXT, 3, 1) &&
29 int z_Quarter(ODR o, Z_Quarter **p, int opt)
31 static Odr_arm arm[] =
33 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Quarter_first, odr_null},
34 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Quarter_second, odr_null},
35 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Quarter_third, odr_null},
36 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Quarter_fourth, odr_null},
40 if (!odr_initmember(o, p, sizeof(**p)))
41 return opt && odr_ok(o);
42 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
45 return opt && odr_ok(o);
48 int z_Season(ODR o, Z_Season **p, int opt)
50 static Odr_arm arm[] =
52 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Season_winter, odr_null},
53 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Season_spring, odr_null},
54 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Season_summer, odr_null},
55 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Season_autumn, odr_null},
59 if (!odr_initmember(o, p, sizeof(**p)))
60 return opt && odr_ok(o);
61 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
64 return opt && odr_ok(o);
67 int z_PartOfYear(ODR o, Z_PartOfYear **p, int opt)
69 static Odr_arm arm[] =
71 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PartOfYear_monthAndDay, z_MonthAndDay},
72 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PartOfYear_julianDay, odr_integer},
73 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_PartOfYear_weekNumber, odr_integer},
74 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_PartOfYear_quarter, z_Quarter},
75 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_PartOfYear_season, z_Season},
79 if (!odr_initmember(o, p, sizeof(**p)))
80 return opt && odr_ok(o);
81 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
84 return opt && odr_ok(o);
87 int z_Era(ODR o, Z_Era **p, int opt)
89 static Odr_arm arm[] =
91 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Era_decade, odr_null},
92 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Era_century, odr_null},
93 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Era_millennium, odr_null},
97 if (!odr_initmember(o, p, sizeof(**p)))
98 return opt && odr_ok(o);
99 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
102 return opt && odr_ok(o);
105 int z_DateFlags(ODR o, Z_DateFlags **p, int opt)
107 if (!odr_sequence_begin(o, p, sizeof(**p)))
108 return opt && odr_ok(o);
110 odr_implicit(o, odr_null, &(*p)->circa, ODR_CONTEXT, 1, 1) &&
111 odr_implicit(o, z_Era, &(*p)->era, ODR_CONTEXT, 2, 1) &&
115 int z_Date(ODR o, Z_Date **p, int opt)
117 if (!odr_sequence_begin(o, p, sizeof(**p)))
118 return opt && odr_ok(o);
120 odr_implicit(o, odr_integer, &(*p)->year, ODR_CONTEXT, 1, 0) &&
121 odr_implicit(o, z_PartOfYear, &(*p)->partOfYear, ODR_CONTEXT, 1, 1) &&
122 odr_implicit(o, z_DateFlags, &(*p)->flags, ODR_CONTEXT, 2, 1) &&
126 int z_Zone(ODR o, Z_Zone **p, int opt)
128 static Odr_arm arm[] =
130 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Zone_local, odr_null},
131 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Zone_utc, odr_null},
132 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Zone_utcOffset, odr_integer},
136 if (!odr_initmember(o, p, sizeof(**p)))
137 return opt && odr_ok(o);
138 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
141 return opt && odr_ok(o);
144 int z_Time(ODR o, Z_Time **p, int opt)
146 if (!odr_sequence_begin(o, p, sizeof(**p)))
147 return opt && odr_ok(o);
149 odr_implicit(o, odr_integer, &(*p)->hour, ODR_CONTEXT, 1, 0) &&
150 odr_implicit(o, odr_integer, &(*p)->minute, ODR_CONTEXT, 2, 1) &&
151 odr_implicit(o, odr_integer, &(*p)->second, ODR_CONTEXT, 3, 1) &&
152 odr_implicit(o, z_IntUnit, &(*p)->partOfSecond, ODR_CONTEXT, 4, 1) &&
153 odr_implicit(o, z_Zone, &(*p)->zone, ODR_CONTEXT, 5, 1) &&
157 int z_DateTime(ODR o, Z_DateTime **p, int opt)
159 if (!odr_sequence_begin(o, p, sizeof(**p)))
160 return opt && odr_ok(o);
162 odr_implicit(o, z_Date, &(*p)->z3950Date, ODR_CONTEXT, 1, 1) &&
163 odr_implicit(o, z_Time, &(*p)->z3950Time, ODR_CONTEXT, 2, 1) &&