summaryrefslogtreecommitdiff
path: root/src/zio.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/zio.h')
-rw-r--r--src/zio.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/zio.h b/src/zio.h
new file mode 100644
index 00000000..f0f36404
--- /dev/null
+++ b/src/zio.h
@@ -0,0 +1,48 @@
+/*
+* zio.h
+* a generic input stream interface
+* $Id: zio.h,v 1.5 1997/06/20 19:25:54 roberto Exp $
+*/
+
+#ifndef zio_h
+#define zio_h
+
+#include <stdio.h>
+
+
+
+/* For Lua only */
+#define zFopen luaZ_Fopen
+#define zsopen luaZ_sopen
+#define zmopen luaZ_mopen
+#define zread luaZ_read
+
+#define EOZ (-1) /* end of stream */
+
+typedef struct zio ZIO;
+
+ZIO* zFopen(ZIO* z, FILE* f); /* open FILEs */
+ZIO* zsopen(ZIO* z, char* s); /* string */
+ZIO* zmopen(ZIO* z, char* b, int size); /* memory */
+
+int zread(ZIO* z, void* b, int n); /* read next n bytes */
+
+#define zgetc(z) (--(z)->n>=0 ? ((int)*(z)->p++): (z)->filbuf(z))
+#define zungetc(z) (++(z)->n,--(z)->p)
+
+
+
+/* --------- Private Part ------------------ */
+
+#define ZBSIZE 256 /* buffer size */
+
+struct zio {
+ int n; /* bytes still unread */
+ unsigned char* p; /* current position in buffer */
+ int (*filbuf)(ZIO* z);
+ void* u; /* additional data */
+ unsigned char buffer[ZBSIZE]; /* buffer */
+};
+
+
+#endif