Works better now.
[yaz-moved-to-github.git] / odr / ber_bool.c
1 /*
2  * Copyright (C) 1994, Index Data I/S 
3  * All rights reserved.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: ber_bool.c,v $
7  * Revision 1.2  1995-02-09 15:51:45  quinn
8  * Works better now.
9  *
10  * Revision 1.1  1995/02/02  16:21:51  quinn
11  * First kick.
12  *
13  */
14
15 #include <stdio.h>
16 #include <odr.h>
17
18
19 int ber_boolean(ODR o, int *val)
20 {
21     unsigned char *b = o->bp;
22     int res, len;
23
24     switch (o->direction)
25     {
26         case ODR_ENCODE:
27             if (ber_enclen(o->bp, 1, 1, 1) != 1)
28                 return 0;
29             o->bp++;
30             o->left--;
31             *(o->bp++) = (unsigned char) *val;
32 #ifdef ODR_DEBUG
33             fprintf(stderr, "[val=%d]\n", *val);
34 #endif
35             o->left--;
36             return 1;
37         case ODR_DECODE:
38             if ((res = ber_declen(b, &len)) < 0)
39                 return 0;
40             if (len != 1)
41                 return 0;
42             o->bp+= res;
43             o->left -= res;
44             *val = *b;
45             o->bp++;
46             o->left--;
47 #ifdef ODR_DEBUG
48             fprintf(stderr, "[val=%d]\n", *val);
49 #endif
50             return 1;
51         case ODR_PRINT:
52             return 1;
53         default: return 0;
54     }
55 }