source: trunk/gsdl/packages/yaz/asn/prt-dat.c@ 1343

Last change on this file since 1343 was 1343, checked in by johnmcp, 24 years ago

Added the YAZ toolkit source to the packages directory (for z39.50 stuff)

  • Property svn:keywords set to Author Date Id Revision
File size: 5.6 KB
Line 
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$
11 * Revision 1.1 2000/08/03 03:09:48 johnmcp
12 * Added the YAZ toolkit source to the packages directory (for z39.50 stuff)
13 *
14 * Revision 1.4 1999/11/30 13:47:11 adam
15 * Improved installation. Moved header files to include/yaz.
16 *
17 * Revision 1.3 1999/04/20 09:56:47 adam
18 * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
19 * Modified all encoders/decoders to reflect this change.
20 *
21 * Revision 1.2 1998/02/11 11:53:32 adam
22 * Changed code so that it compiles as C++.
23 *
24 * Revision 1.1 1998/02/10 15:31:46 adam
25 * Implemented date and time structure. Changed the Update Extended
26 * Service.
27 *
28 */
29
30#include <yaz/proto.h>
31
32int z_MonthAndDay(ODR o, Z_MonthAndDay **p, int opt, const char *name)
33{
34 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
35 return opt && odr_ok(o);
36 return
37 odr_implicit(o, odr_integer, &(*p)->month, ODR_CONTEXT, 2, 0) &&
38 odr_implicit(o, odr_integer, &(*p)->day, ODR_CONTEXT, 3, 1) &&
39 odr_sequence_end(o);
40}
41
42int z_Quarter(ODR o, Z_Quarter **p, int opt, const char *name)
43{
44 static Odr_arm arm[] =
45 {
46 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Quarter_first,
47 (Odr_fun)odr_null, 0},
48 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Quarter_second,
49 (Odr_fun)odr_null, 0},
50 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Quarter_third,
51 (Odr_fun)odr_null, 0},
52 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Quarter_fourth,
53 (Odr_fun)odr_null, 0},
54 {-1, -1, -1, -1, 0, 0}
55 };
56
57 if (!odr_initmember(o, p, sizeof(**p)))
58 return opt && odr_ok(o);
59 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
60 return 1;
61 *p = 0;
62 return opt && odr_ok(o);
63}
64
65int z_Season(ODR o, Z_Season **p, int opt, const char *name)
66{
67 static Odr_arm arm[] =
68 {
69 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Season_winter,
70 (Odr_fun)odr_null, 0},
71 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Season_spring,
72 (Odr_fun)odr_null, 0},
73 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Season_summer,
74 (Odr_fun)odr_null, 0},
75 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Season_autumn,
76 (Odr_fun)odr_null, 0},
77 {-1, -1, -1, -1, 0, 0}
78 };
79
80 if (!odr_initmember(o, p, sizeof(**p)))
81 return opt && odr_ok(o);
82 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
83 return 1;
84 *p = 0;
85 return opt && odr_ok(o);
86}
87
88int z_PartOfYear(ODR o, Z_PartOfYear **p, int opt, const char *name)
89{
90 static Odr_arm arm[] =
91 {
92 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PartOfYear_monthAndDay,
93 (Odr_fun) z_MonthAndDay, 0},
94 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PartOfYear_julianDay,
95 (Odr_fun) odr_integer, 0},
96 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_PartOfYear_weekNumber,
97 (Odr_fun) odr_integer, 0},
98 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_PartOfYear_quarter,
99 (Odr_fun) z_Quarter, 0},
100 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_PartOfYear_season,
101 (Odr_fun) z_Season, 0},
102 {-1, -1, -1, -1, 0, 0}
103 };
104
105 if (!odr_initmember(o, p, sizeof(**p)))
106 return opt && odr_ok(o);
107 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
108 return 1;
109 *p = 0;
110 return opt && odr_ok(o);
111}
112
113int z_Era(ODR o, Z_Era **p, int opt, const char *name)
114{
115 static Odr_arm arm[] =
116 {
117 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Era_decade, (Odr_fun)odr_null, 0},
118 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Era_century, (Odr_fun)odr_null, 0},
119 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Era_millennium, (Odr_fun)odr_null, 0},
120 {-1, -1, -1, -1, 0, 0}
121 };
122
123 if (!odr_initmember(o, p, sizeof(**p)))
124 return opt && odr_ok(o);
125 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
126 return 1;
127 *p = 0;
128 return opt && odr_ok(o);
129}
130
131int z_DateFlags(ODR o, Z_DateFlags **p, int opt, const char *name)
132{
133 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
134 return opt && odr_ok(o);
135 return
136 odr_implicit(o, odr_null, &(*p)->circa, ODR_CONTEXT, 1, 1) &&
137 odr_implicit(o, z_Era, &(*p)->era, ODR_CONTEXT, 2, 1) &&
138 odr_sequence_end(o);
139}
140
141int z_Date(ODR o, Z_Date **p, int opt, const char *name)
142{
143 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
144 return opt && odr_ok(o);
145 return
146 odr_implicit(o, odr_integer, &(*p)->year, ODR_CONTEXT, 1, 0) &&
147 odr_implicit(o, z_PartOfYear, &(*p)->partOfYear, ODR_CONTEXT, 1, 1) &&
148 odr_implicit(o, z_DateFlags, &(*p)->flags, ODR_CONTEXT, 2, 1) &&
149 odr_sequence_end(o);
150}
151
152int z_Zone(ODR o, Z_Zone **p, int opt, const char *name)
153{
154 static Odr_arm arm[] =
155 {
156 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Zone_local, (Odr_fun)odr_null, 0},
157 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Zone_utc, (Odr_fun)odr_null, 0},
158 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Zone_utcOffset,
159 (Odr_fun)odr_integer, 0},
160 {-1, -1, -1, -1, 0, 0}
161 };
162
163 if (!odr_initmember(o, p, sizeof(**p)))
164 return opt && odr_ok(o);
165 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
166 return 1;
167 *p = 0;
168 return opt && odr_ok(o);
169}
170
171int z_Time(ODR o, Z_Time **p, int opt, const char *name)
172{
173 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
174 return opt && odr_ok(o);
175 return
176 odr_implicit(o, odr_integer, &(*p)->hour, ODR_CONTEXT, 1, 0) &&
177 odr_implicit(o, odr_integer, &(*p)->minute, ODR_CONTEXT, 2, 1) &&
178 odr_implicit(o, odr_integer, &(*p)->second, ODR_CONTEXT, 3, 1) &&
179 odr_implicit(o, z_IntUnit, &(*p)->partOfSecond, ODR_CONTEXT, 4, 1) &&
180 odr_implicit(o, z_Zone, &(*p)->zone, ODR_CONTEXT, 5, 1) &&
181 odr_sequence_end(o);
182}
183
184int z_DateTime(ODR o, Z_DateTime **p, int opt, const char *name)
185{
186 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
187 return opt && odr_ok(o);
188 return
189 odr_implicit(o, z_Date, &(*p)->z3950Date, ODR_CONTEXT, 1, 1) &&
190 odr_implicit(o, z_Time, &(*p)->z3950Time, ODR_CONTEXT, 2, 1) &&
191 odr_sequence_end(o);
192}
193
Note: See TracBrowser for help on using the repository browser.