Improved installation. Moved header files to include/yaz.
[yaz-moved-to-github.git] / odr / odr_use.c
1 /*
2  * Copyright (c) 1995-1999, Index Data
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: odr_use.c,v $
7  * Revision 1.10  1999-11-30 13:47:12  adam
8  * Improved installation. Moved header files to include/yaz.
9  *
10  * Revision 1.9  1999/04/20 09:56:48  adam
11  * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
12  * Modified all encoders/decoders to reflect this change.
13  *
14  * Revision 1.8  1998/02/11 11:53:34  adam
15  * Changed code so that it compiles as C++.
16  *
17  * Revision 1.7  1995/09/29 17:12:27  quinn
18  * Smallish
19  *
20  * Revision 1.6  1995/09/27  15:03:00  quinn
21  * Modified function heads & prototypes.
22  *
23  * Revision 1.5  1995/08/10  08:54:47  quinn
24  * Added Explain.
25  *
26  * Revision 1.4  1995/06/16  13:16:12  quinn
27  * Fixed Defaultdiagformat.
28  *
29  * Revision 1.3  1995/05/16  08:51:00  quinn
30  * License, documentation, and memory fixes
31  *
32  * Revision 1.2  1995/02/09  15:51:50  quinn
33  * Works better now.
34  *
35  * Revision 1.1  1995/02/03  17:04:39  quinn
36  * Initial revision
37  *
38  */
39
40 #include <yaz/odr.h>
41
42 int odr_external(ODR o, Odr_external **p, int opt, const char *name)
43 {
44     Odr_external *pp;
45     static Odr_arm arm[] =
46     {
47         {ODR_EXPLICIT, ODR_CONTEXT, 0, ODR_EXTERNAL_single, 
48          (Odr_fun)odr_any, "single"},
49         {ODR_IMPLICIT, ODR_CONTEXT, 1, ODR_EXTERNAL_octet,
50          (Odr_fun)odr_octetstring, "octet"},
51         {ODR_IMPLICIT, ODR_CONTEXT, 2, ODR_EXTERNAL_arbitrary,
52          (Odr_fun)odr_bitstring, "arbitrary"},
53         {-1, -1, -1, -1, 0, 0}
54     };
55
56     odr_implicit_settag(o, ODR_UNIVERSAL, ODR_EXTERNAL);
57     if (!odr_sequence_begin(o, p, sizeof(Odr_external), name))
58         return opt;
59     pp = *p;
60     return
61         odr_oid(o, &pp->direct_reference, 1, "direct") &&
62         odr_integer(o, &pp->indirect_reference, 1, "indirect") &&
63         odr_graphicstring(o, &pp->descriptor, 1, "descriptor") &&
64         odr_choice(o, arm, &pp->u, &pp->which, 0) &&
65         odr_sequence_end(o);
66 }
67
68 int odr_visiblestring(ODR o, char **p, int opt, const char *name)
69 {
70     return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL,
71                             ODR_VISIBLESTRING, opt, name);
72 }    
73
74 /*
75  * a char may not be sufficient to hold a general string, but we'll deal
76  * with that once we start looking more closely at UniCode & co.
77  */
78 int odr_generalstring(ODR o, char **p, int opt, const char *name)
79 {
80     return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL,
81                             ODR_GENERALSTRING,opt, name);
82 }    
83
84 int odr_graphicstring(ODR o, char **p, int opt, const char *name)
85 {
86     return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL,
87                         ODR_GRAPHICSTRING, opt, name);
88 }    
89
90 int odr_generalizedtime(ODR o, char **p, int opt, const char *name)
91 {
92     return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL,
93                             ODR_GENERALIZEDTIME, opt, name);
94 }