Added const modifier to some of the BER/ODR encoding routines.
[yaz-moved-to-github.git] / include / odr.h
index 7e86126..2e15659 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995-1997, Index Data.
+ * Copyright (c) 1995-1999, Index Data.
  *
  * Permission to use, copy, modify, distribute, and sell this software and
  * its documentation, in whole or in part, for any purpose, is hereby granted,
  * OF THIS SOFTWARE.
  *
  * $Log: odr.h,v $
- * Revision 1.22  1997-07-21 12:44:30  adam
+ * Revision 1.27  1999-01-08 11:23:17  adam
+ * Added const modifier to some of the BER/ODR encoding routines.
+ *
+ * Revision 1.26  1998/03/20 17:29:20  adam
+ * Include of odr_use.h in odr.h. Added prototype for odr_enum.
+ *
+ * Revision 1.25  1998/02/11 11:53:33  adam
+ * Changed code so that it compiles as C++.
+ *
+ * Revision 1.24  1997/11/24 11:33:56  adam
+ * Using function odr_nullval() instead of global ODR_NULLVAL when
+ * appropriate.
+ *
+ * Revision 1.23  1997/09/01 08:49:49  adam
+ * New windows NT/95 port using MSV5.0. To export DLL functions the
+ * YAZ_EXPORT modifier was added. Defined in yconfig.h.
+ *
+ * Revision 1.22  1997/07/21 12:44:30  adam
  * Moved definitions of nmem_block and nmem_control.
  *
  * Revision 1.21  1997/05/14 06:53:41  adam
@@ -223,11 +240,11 @@ typedef int Odr_oid;   /* terminate by -1 */
 
 typedef struct odr_constack
 {
-    unsigned char *base;         /* starting point of data */
+    const unsigned char *base;   /* starting point of data */
     int base_offset;
     int len;                     /* length of data, if known, else -1
                                         (decoding only) */
-    unsigned char *lenb;         /* where to encode length */
+    const unsigned char *lenb;   /* where to encode length */
     int len_offset;
     int lenlen;                  /* length of length-field */
 } odr_constack;
@@ -245,15 +262,21 @@ typedef struct odr_ecblock
     int size;             /* current buffer size */
 } odr_ecblock;
 
+typedef struct {      /* used to be statics in ber_tag... */
+    int lclass;
+    int ltag;
+    int br;
+    int lcons;
+} Odr_ber_tag;
 
 typedef struct odr
 {
     int direction;       /* the direction of this stream */
 
     int error;           /* current error state (0==OK) */
-    unsigned char *buf;  /* for encoding or decoding */
+    const unsigned char *buf;  /* for encoding or decoding */
     int buflen;          /* size of buffer for encoding, len for decoding */
-    unsigned char *bp;   /* position in buffer */
+    const unsigned char *bp;   /* position in buffer */
     int left;            /* bytes remaining in buffer */
 
     odr_ecblock ecb;     /* memory control block */
@@ -274,9 +297,11 @@ typedef struct odr
 #define ODR_MAX_STACK 50
     int stackp;          /* top of stack (-1 == initial state) */
     odr_constack stack[ODR_MAX_STACK];
+
+    Odr_ber_tag odr_ber_tag;
 } *ODR;
 
-typedef int (*Odr_fun)();
+typedef int (*Odr_fun)(ODR, char **, int);
 
 typedef struct odr_arm
 {
@@ -305,16 +330,17 @@ typedef struct odr_arm
 
 extern char *odr_errlist[];
 
-int odr_geterror(ODR o);
-void odr_perror(ODR o, char *message);
-void odr_setprint(ODR o, FILE *file);
-ODR odr_createmem(int direction);
-void odr_reset(ODR o);
-void odr_destroy(ODR o);
-void odr_setbuf(ODR o, char *buf, int len, int can_grow);
-char *odr_getbuf(ODR o, int *len, int *size);
-void *odr_malloc(ODR o, int size);
-NMEM odr_extract_mem(ODR o);
+YAZ_EXPORT int odr_geterror(ODR o);
+YAZ_EXPORT void odr_perror(ODR o, char *message);
+YAZ_EXPORT void odr_setprint(ODR o, FILE *file);
+YAZ_EXPORT ODR odr_createmem(int direction);
+YAZ_EXPORT void odr_reset(ODR o);
+YAZ_EXPORT void odr_destroy(ODR o);
+YAZ_EXPORT void odr_setbuf(ODR o, char *buf, int len, int can_grow);
+YAZ_EXPORT char *odr_getbuf(ODR o, int *len, int *size);
+YAZ_EXPORT void *odr_malloc(ODR o, int size);
+YAZ_EXPORT NMEM odr_extract_mem(ODR o);
+YAZ_EXPORT Odr_null *odr_nullval(void);
 #define odr_release_mem(m) nmem_destroy(m)
 #define ODR_MEM NMEM
 
@@ -389,6 +415,7 @@ NMEM odr_extract_mem(ODR o);
 }
 #endif
 
+#include <odr_use.h>
 #include <prt.h>
 #include <xmalloc.h>