/*
- * Copyright (c) 1995, Index Data
+ * Copyright (c) 1995-2000, Index Data
* See the file LICENSE for details.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: ber_tag.c,v $
- * Revision 1.15 1997-09-01 08:51:06 adam
+ * Revision 1.22 2000-02-29 13:44:55 adam
+ * Check for config.h (currently not generated).
+ *
+ * Revision 1.21 2000/01/31 13:15:21 adam
+ * Removed uses of assert(3). Cleanup of ODR. CCL parser update so
+ * that some characters are not surrounded by spaces in resulting term.
+ * ILL-code updates.
+ *
+ * Revision 1.20 1999/11/30 13:47:11 adam
+ * Improved installation. Moved header files to include/yaz.
+ *
+ * Revision 1.19 1999/01/08 11:23:25 adam
+ * Added const modifier to some of the BER/ODR encoding routines.
+ *
+ * Revision 1.18 1998/02/11 11:53:34 adam
+ * Changed code so that it compiles as C++.
+ *
+ * Revision 1.17 1997/09/30 09:33:10 adam
+ * Minor changes - removed indentation of ifdef.
+ *
+ * Revision 1.16 1997/09/17 12:10:33 adam
+ * YAZ version 1.4.
+ *
+ * Revision 1.15 1997/09/01 08:51:06 adam
* New windows NT/95 port using MSV5.0. Had to avoid a few static
* variables used in function ber_tag. These are now part of the
* ODR structure.
* First kick.
*
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdio.h>
-#include <odr.h>
+#include <yaz/odr.h>
/* ber_tag
* On encoding:
* else leave pointer unchanged. Return 0.
*
* Should perhaps be odr_tag?
-*/
+ */
int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt)
{
-#if 0
- static int lclass = -1, ltag, br, lcons; /* save t&c rather than
- decoding twice */
-#endif
Odr_ber_tag *odr_ber_tag = &o->odr_ber_tag;
int rd;
- char **pp = p;
+ char **pp = (char **)p;
if (o->direction == ODR_DECODE)
*pp = 0;
if (o->stackp < 0)
{
odr_seek(o, ODR_S_SET, 0);
- o->ecb.top = 0;
+ o->top = 0;
o->bp = o->buf;
odr_ber_tag->lclass = -1;
}
o->error = OPROTO;
return 0;
}
- #ifdef ODR_DEBUG
- fprintf(stderr, "\n[class=%d,tag=%d,cons=%d,stackp=%d]", odr_ber_tag->lclass, odr_ber_tag->ltag,
- odr_ber_tag->lcons, o->stackp);
- #endif
+#ifdef ODR_DEBUG
+ fprintf(stderr,
+ "\n[class=%d,tag=%d,cons=%d,stackp=%d]",
+ odr_ber_tag->lclass, odr_ber_tag->ltag,
+ odr_ber_tag->lcons, o->stackp);
+#endif
}
if (zclass == odr_ber_tag->lclass && tag == odr_ber_tag->ltag)
{
o->bp += odr_ber_tag->br;
- o->left -= odr_ber_tag->br;
*constructed = odr_ber_tag->lcons;
odr_ber_tag->lclass = -1;
return 1;
/* ber_dectag
* Decode BER identifier octets. Return number of bytes read or -1 for error.
*/
-int ber_dectag(unsigned char *buf, int *zclass, int *tag, int *constructed)
+int ber_dectag(const unsigned char *buf, int *zclass, int *tag, int *constructed)
{
- unsigned char *b = buf;
+ const unsigned char *b = buf;
*zclass = *b >> 6;
*constructed = (*b >> 5) & 0X01;