Minor fix.
[yaz-moved-to-github.git] / asn / prt-add.c
1 /*
2  * Copyright (c) 1995-1998, Index Data
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: prt-add.c,v $
7  * Revision 1.4  1998-02-11 11:53:32  adam
8  * Changed code so that it compiles as C++.
9  *
10  * Revision 1.3  1998/01/05 09:04:57  adam
11  * Fixed bugs in encoders/decoders - Not operator (!) missing.
12  *
13  * Revision 1.2  1997/04/30 08:52:02  quinn
14  * Null
15  *
16  * Revision 1.1  1996/10/10  11:52:18  quinn
17  * Added SearchResult additionalInfo
18  *
19  *
20  */
21
22 #include <proto.h>
23
24 int z_ResultsByDBList (ODR o, Z_ResultsByDBList **p, int opt)
25 {
26     if (!odr_initmember (o, p, sizeof(**p)))
27         return opt && odr_ok(o);
28     if (odr_sequence_of (o, z_DatabaseName, &(*p)->elements,
29         &(*p)->num))
30         return 1;
31     *p = 0;
32     return opt && odr_ok(o);
33 }
34
35 int z_ResultsByDB_elem (ODR o, Z_ResultsByDB_elem **p, int opt)
36 {
37     static Odr_arm arm[] = {
38         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ResultsByDB_all, (Odr_fun)odr_null},
39         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ResultsByDB_list, (Odr_fun)z_ResultsByDBList},
40         {-1, -1, -1, -1, 0}
41     };
42     if (!odr_sequence_begin (o, p, sizeof(**p)))
43         return opt && odr_ok (o);
44     return
45         odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 1) &&
46         odr_choice (o, arm, &(*p)->u, &(*p)->which) &&
47         odr_constructed_end (o) &&
48         odr_implicit (o, odr_integer,
49             &(*p)->count, ODR_CONTEXT, 2, 1) &&
50         odr_implicit (o, z_InternationalString,
51             &(*p)->resultSetName, ODR_CONTEXT, 3, 1) &&
52         odr_sequence_end (o);
53 }
54
55 int z_ResultsByDB (ODR o, Z_ResultsByDB **p, int opt)
56 {
57     if (!odr_initmember (o, p, sizeof(**p)))
58         return opt && odr_ok(o);
59     if (odr_sequence_of (o, (Odr_fun)z_ResultsByDB_elem, &(*p)->elements,
60         &(*p)->num))
61         return 1;
62     *p = 0;
63     return opt && odr_ok(o);
64 }
65
66 int z_QueryExpressionTerm (ODR o, Z_QueryExpressionTerm **p, int opt)
67 {
68     if (!odr_sequence_begin (o, p, sizeof(**p)))
69         return opt && odr_ok (o);
70     return
71         odr_explicit (o, z_Term,
72             &(*p)->queryTerm, ODR_CONTEXT, 1, 0) &&
73         odr_implicit (o, z_InternationalString,
74             &(*p)->termComment, ODR_CONTEXT, 2, 1) &&
75         odr_sequence_end (o);
76 }
77
78 int z_QueryExpression (ODR o, Z_QueryExpression **p, int opt)
79 {
80     static Odr_arm arm[] = {
81         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_QueryExpression_term,
82          (Odr_fun)z_QueryExpressionTerm},
83         {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_QueryExpression_query, (Odr_fun)z_Query},
84         {-1, -1, -1, -1, 0}
85     };
86     if (!odr_initmember(o, p, sizeof(**p)))
87         return opt && odr_ok(o);
88     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
89         return 1;
90     *p = 0;
91     return opt && odr_ok(o);
92 }
93
94 int z_SearchInfoReport_elem (ODR o, Z_SearchInfoReport_elem **p, int opt)
95 {
96     if (!odr_sequence_begin (o, p, sizeof(**p)))
97         return opt && odr_ok (o);
98     return
99         odr_implicit (o, z_InternationalString,
100             &(*p)->subqueryId, ODR_CONTEXT, 1, 1) &&
101         odr_implicit (o, odr_bool,
102             &(*p)->fullQuery, ODR_CONTEXT, 2, 0) &&
103         odr_explicit (o, z_QueryExpression,
104             &(*p)->subqueryExpression, ODR_CONTEXT, 3, 1) &&
105         odr_explicit (o, z_QueryExpression,
106             &(*p)->subqueryInterpretation, ODR_CONTEXT, 4, 1) &&
107         odr_explicit (o, z_QueryExpression,
108             &(*p)->subqueryRecommendation, ODR_CONTEXT, 5, 1) &&
109         odr_implicit (o, odr_integer,
110             &(*p)->subqueryCount, ODR_CONTEXT, 6, 1) &&
111         odr_implicit (o, z_IntUnit,
112             &(*p)->subqueryWeight, ODR_CONTEXT, 7, 1) &&
113         odr_implicit (o, z_ResultsByDB,
114             &(*p)->resultsByDB, ODR_CONTEXT, 8, 1) &&
115         odr_sequence_end (o);
116 }
117
118 int z_SearchInfoReport (ODR o, Z_SearchInfoReport **p, int opt)
119 {
120     if (!odr_initmember (o, p, sizeof(**p)))
121         return opt && odr_ok(o);
122     if (odr_sequence_of (o, (Odr_fun)z_SearchInfoReport_elem, &(*p)->elements,
123         &(*p)->num))
124         return 1;
125     *p = 0;
126     return opt && odr_ok(o);
127 }