/*
** Buffered streams
** See Copyright Notice in lua.h
*/


#ifndef GRIM_LZIO_H
#define GRIM_LZIO_H

#include "common/scummsys.h"

namespace Common {
	class File;
}

namespace Grim {

// For Lua only
#define zopen   luaZ_mopen

#define EOZ     (-1)                    // end of stream

typedef struct zio ZIO;

ZIO *zopen(ZIO *z, const char *b, int32 size, const char *name);
int32 zread(ZIO *z, void *b, int32 n);  // read next n bytes
int32 zgeteoz(ZIO *);

#define zgetc(z)        (--(z)->n >= 0 ? ((int32)*(z)->p++): zgeteoz(z))
#define zungetc(z)      (++(z)->n, --(z)->p)
#define zname(z)        ((z)->name)


// --------- Private Part ------------------

#define ZBSIZE  256                     // buffer size

struct zio {
	int32 n;                        // bytes still unread
	const byte *p;                  // current position in buffer
	const char *name;
	byte buffer[ZBSIZE];            // buffer
};

} // end of namespace Grim

#endif
