Implemented date and time structure. Changed the Update Extended
[yaz-moved-to-github.git] / asn / prt-dat.c
1 /*
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
6  *
7  * Contribution by Ronald van Der Meer (RVDM):
8  *  Databasix Information Systems B.V., Utrecht, The Netherlands.
9  *
10  * $Log: prt-dat.c,v $
11  * Revision 1.1  1998-02-10 15:31:46  adam
12  * Implemented date and time structure. Changed the Update Extended
13  * Service.
14  *
15  */
16
17 #include <proto.h>
18
19 int z_MonthAndDay(ODR o, Z_MonthAndDay **p, int opt)
20 {
21     if (!odr_sequence_begin(o, p, sizeof(**p)))
22         return opt && odr_ok(o);
23     return
24         odr_implicit(o, odr_integer, &(*p)->month, ODR_CONTEXT, 2, 0) &&
25         odr_implicit(o, odr_integer, &(*p)->day, ODR_CONTEXT, 3, 1) &&
26         odr_sequence_end(o);
27 }
28
29 int z_Quarter(ODR o, Z_Quarter **p, int opt)
30 {
31     static Odr_arm arm[] =
32     {
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},
37         {-1, -1, -1, -1, 0}
38     };
39
40     if (!odr_initmember(o, p, sizeof(**p)))
41         return opt && odr_ok(o);
42     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
43         return 1;
44     *p = 0;
45     return opt && odr_ok(o);
46 }
47
48 int z_Season(ODR o, Z_Season **p, int opt)
49 {
50     static Odr_arm arm[] =
51     {
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},
56         {-1, -1, -1, -1, 0}
57     };
58
59     if (!odr_initmember(o, p, sizeof(**p)))
60         return opt && odr_ok(o);
61     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
62         return 1;
63     *p = 0;
64     return opt && odr_ok(o);
65 }
66
67 int z_PartOfYear(ODR o, Z_PartOfYear **p, int opt)
68 {
69     static Odr_arm arm[] =
70     {
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},
76         {-1, -1, -1, -1, 0}
77     };
78
79     if (!odr_initmember(o, p, sizeof(**p)))
80         return opt && odr_ok(o);
81     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
82         return 1;
83     *p = 0;
84     return opt && odr_ok(o);
85 }
86
87 int z_Era(ODR o, Z_Era **p, int opt)
88 {
89     static Odr_arm arm[] =
90     {
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},
94         {-1, -1, -1, -1, 0}
95     };
96
97     if (!odr_initmember(o, p, sizeof(**p)))
98         return opt && odr_ok(o);
99     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
100         return 1;
101     *p = 0;
102     return opt && odr_ok(o);
103 }
104
105 int z_DateFlags(ODR o, Z_DateFlags **p, int opt)
106 {
107     if (!odr_sequence_begin(o, p, sizeof(**p)))
108         return opt && odr_ok(o);
109     return
110         odr_implicit(o, odr_null, &(*p)->circa, ODR_CONTEXT, 1, 1) &&
111         odr_implicit(o, z_Era, &(*p)->era, ODR_CONTEXT, 2, 1) &&
112         odr_sequence_end(o);
113 }
114
115 int z_Date(ODR o, Z_Date **p, int opt)
116 {
117     if (!odr_sequence_begin(o, p, sizeof(**p)))
118         return opt && odr_ok(o);
119     return
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) &&
123         odr_sequence_end(o);
124 }
125
126 int z_Zone(ODR o, Z_Zone **p, int opt)
127 {
128     static Odr_arm arm[] =
129     {
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},
133         {-1, -1, -1, -1, 0}
134     };
135
136     if (!odr_initmember(o, p, sizeof(**p)))
137         return opt && odr_ok(o);
138     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
139         return 1;
140     *p = 0;
141     return opt && odr_ok(o);
142 }
143
144 int z_Time(ODR o, Z_Time **p, int opt)
145 {
146     if (!odr_sequence_begin(o, p, sizeof(**p)))
147         return opt && odr_ok(o);
148     return
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) &&
154         odr_sequence_end(o);
155 }
156
157 int z_DateTime(ODR o, Z_DateTime **p, int opt)
158 {
159     if (!odr_sequence_begin(o, p, sizeof(**p)))
160         return opt && odr_ok(o);
161     return
162         odr_implicit(o, z_Date, &(*p)->z3950Date, ODR_CONTEXT, 1, 1) &&
163         odr_implicit(o, z_Time, &(*p)->z3950Time, ODR_CONTEXT, 2, 1) &&
164         odr_sequence_end(o);
165 }
166