Directive s=pw sets structure to phrase if term includes blank(s).
[yaz-moved-to-github.git] / odr / ber_bool.c
1 /*
2  * Copyright (c) 1995-2000, Index Data
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: ber_bool.c,v $
7  * Revision 1.11  2000-02-29 13:44:55  adam
8  * Check for config.h (currently not generated).
9  *
10  * Revision 1.10  2000/01/31 13:15:21  adam
11  * Removed uses of assert(3). Cleanup of ODR. CCL parser update so
12  * that some characters are not surrounded by spaces in resulting term.
13  * ILL-code updates.
14  *
15  * Revision 1.9  1999/11/30 13:47:11  adam
16  * Improved installation. Moved header files to include/yaz.
17  *
18  * Revision 1.8  1995/09/29 17:12:16  quinn
19  * Smallish
20  *
21  * Revision 1.7  1995/09/27  15:02:55  quinn
22  * Modified function heads & prototypes.
23  *
24  * Revision 1.6  1995/05/16  08:50:43  quinn
25  * License, documentation, and memory fixes
26  *
27  * Revision 1.5  1995/04/18  08:15:14  quinn
28  * Added dynamic memory allocation on encoding (whew). Code is now somewhat
29  * neater. We'll make the same change for decoding one day.
30  *
31  * Revision 1.4  1995/03/21  10:17:27  quinn
32  * Fixed little bug in decoder.
33  *
34  * Revision 1.3  1995/03/08  12:12:06  quinn
35  * Added better error checking.
36  *
37  * Revision 1.2  1995/02/09  15:51:45  quinn
38  * Works better now.
39  *
40  * Revision 1.1  1995/02/02  16:21:51  quinn
41  * First kick.
42  *
43  */
44
45 #if HAVE_CONFIG_H
46 #include <config.h>
47 #endif
48
49 #include <stdio.h>
50 #include <yaz/odr.h>
51
52 int ber_boolean(ODR o, int *val)
53 {
54     int res, len;
55
56     switch (o->direction)
57     {
58         case ODR_ENCODE:
59             if (ber_enclen(o, 1, 1, 1) != 1)
60                 return 0;
61             if (odr_putc(o, *val) < 0)
62                 return 0;
63 #ifdef ODR_DEBUG
64             fprintf(stderr, "[val=%d]\n", *val);
65 #endif
66             return 1;
67         case ODR_DECODE:
68             if ((res = ber_declen(o->bp, &len)) < 0)
69             {
70                 o->error = OPROTO;
71                 return 0;
72             }
73             if (len != 1)
74             {
75                 o->error = OPROTO;
76                 return 0;
77             }
78             o->bp+= res;
79             *val = *o->bp;
80             o->bp++;
81 #ifdef ODR_DEBUG
82             fprintf(stderr, "[val=%d]\n", *val);
83 #endif
84             return 1;
85         case ODR_PRINT:
86             return 1;
87         default: o->error = OOTHER; return 0;
88     }
89 }