Added GRS-1.
[yaz-moved-to-github.git] / include / prt-grs.h
1 /*
2  * Copyright (c) 1995, Index Data.
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and
5  * its documentation, in whole or in part, for any purpose, is hereby granted,
6  * provided that:
7  *
8  * 1. This copyright and permission notice appear in all copies of the
9  * software and its documentation. Notices of copyright or attribution
10  * which appear at the beginning of any file must remain unchanged.
11  *
12  * 2. The names of Index Data or the individual authors may not be used to
13  * endorse or promote products derived from this software without specific
14  * prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
18  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
19  * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
20  * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
21  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
22  * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24  * OF THIS SOFTWARE.
25  *
26  */
27
28 struct Z_GenericRecord;
29 typedef struct Z_GenericRecord Z_GenericRecord;
30
31 typedef struct Z_ElementData
32 {
33     enum
34     {
35         Z_ElementData_octets,
36         Z_ElementData_numeric,
37         Z_ElementData_date,
38         Z_ElementData_ext,
39         Z_ElementData_string,
40         Z_ElementData_trueOrFalse,
41         Z_ElementData_oid,
42         Z_ElementData_intUnit,
43         Z_ElementData_elementNotThere,
44         Z_ElementData_elementEmpty,
45         Z_ElementData_noDataRequested,
46         Z_ElementData_diagnostic,
47         Z_ElementData_subtree
48     } which;
49     union
50     {
51         Odr_oct *octets;                      
52         int *numeric;                         
53         char *date;             
54         Z_External *ext;                     
55         char *string;                         
56         bool_t *trueOrFalse;                  
57         Odr_oid *oid;                         
58         Z_IntUnit *intUnit;                  
59         Odr_null *elementNotThere;            
60         Odr_null *elementEmpty;               
61         Odr_null *noDataRequested;            
62         Z_External *diagnostic;              
63         Z_GenericRecord *subtree;            
64     } u;
65 } Z_ElementData;
66
67 typedef struct Z_Order
68 {
69     bool_t *ascending;                    
70     int *order;                           
71 } Z_Order;
72
73 typedef struct Z_Usage
74 {
75     int *type;                            
76 #define Z_Usage_redistributable     1
77 #define Z_Usage_restricted          2
78 #define Z_Usage_licensePointer      3
79     char *restriction;                      /* OPTIONAL */
80 } Z_Usage;
81
82 typedef struct Z_HitVector
83 {
84     Z_Term *satisfier;                      /* OPTIONAL */
85     Z_IntUnit *offsetIntoElement;           /* OPTIONAL */
86     Z_IntUnit *length;                      /* OPTIONAL */
87     int *hitRank;                           /* OPTIONAL */
88     Odr_oct *targetToken;                   /* OPTIONAL */
89 } Z_HitVector;
90
91 typedef struct Z_Triple
92 {
93     Odr_oid *variantSetId;                  /* OPTIONAL */
94     int *class;
95     int *type;
96     enum
97     {
98         Z_Triple_integer,
99         Z_Triple_internationalString,
100         Z_Triple_octetString,
101         Z_Triple_oid,
102         Z_Triple_boolean,
103         Z_Triple_null,
104         Z_Triple_unit,
105         Z_Triple_valueAndUnit
106     } which;
107     union
108     {
109         int *integer;
110         char *internationalString;
111         Odr_oct *octetString;
112         Odr_oid *oid;
113         bool_t *boolean;
114         Odr_null *null;
115         Z_Unit *unit;
116         Z_IntUnit *valueAndUnit;
117     } value;
118 } Z_Triple;
119
120 typedef struct Z_Variant
121 {
122     Odr_oid *globalVariantSetId;            /* OPTIONAL */
123     int num_triples;
124     Z_Triple **triples;
125 } Z_Variant;
126
127 typedef struct Z_TagUnit
128 {
129     int *tagType;                           /* OPTIONAL */
130     Z_StringOrNumeric *tagValue;         
131     int *tagOccurrence;                     /* OPTIONAL */
132 } Z_TagUnit;
133
134 typedef struct Z_TagPath
135 {
136     int num_tags;
137     Z_TagUnit **tags;
138 } Z_TagPath;
139
140 typedef struct Z_ElementMetaData
141 {
142     Z_Order *seriesOrder;                   /* OPTIONAL */
143     Z_Usage *usageRight;                    /* OPTIONAL */
144     int num_hits;
145     Z_HitVector **hits;                     /* OPTIONAL */
146     char *displayName;                      /* OPTIONAL */
147     int num_supportedVariants;
148     Z_Variant **supportedVariants;          /* OPTIONAL */
149     char *message;                          /* OPTIONAL */
150     Odr_oct *elementDescriptor;             /* OPTIONAL */
151     Z_TagPath *surrogateFor;                /* OPTIONAL */
152     Z_TagPath *surrogateElement;            /* OPTIONAL */
153     Z_External *other;                      /* OPTIONAL */
154 } Z_ElementMetaData;
155
156 typedef struct Z_TaggedElement
157 {
158     int *tagType;                           /* OPTIONAL */
159     Z_StringOrNumeric *tagValue;         
160     int *tagOccurrence;                     /* OPTIONAL */
161     Z_ElementData *content;              
162     Z_ElementMetaData *metaData;            /* OPTIONAL */
163     Z_Variant *appliedVariant;              /* OPTIONAL */
164 } Z_TaggedElement;
165
166 struct Z_GenericRecord
167 {
168     int num_elements;
169     Z_TaggedElement **elements;
170 };
171
172 int z_GenericRecord(ODR o, Z_GenericRecord **p, int opt);