#ifndef ___BUFIO_H___
#define ___BUFIO_H___ 1
#include <X11/Xfuncproto.h>
#ifdef TEST
#define xalloc(s) malloc(s)
#define xfree(s) free(s)
#endif
#define BUFFILESIZE 8192
#define BUFFILEEOF -1
typedef unsigned char BufChar;
typedef struct _buffile *BufFilePtr;
typedef struct _buffile {
BufChar *bufp;
int left;
int eof;
BufChar buffer[BUFFILESIZE];
int (*input)( BufFilePtr );
int (*output)( int , BufFilePtr );
int (*skip)( BufFilePtr , int );
int (*close)( BufFilePtr , int );
char *private;
} BufFileRec;
extern BufFilePtr BufFileCreate (
char*,
int (*)(BufFilePtr),
int (*)(int, BufFilePtr),
int (*)(BufFilePtr, int),
int (*)(BufFilePtr, int));
extern BufFilePtr BufFileOpenRead ( int );
extern BufFilePtr BufFileOpenWrite ( int );
extern BufFilePtr BufFilePushCompressed ( BufFilePtr );
#ifdef X_GZIP_FONT_COMPRESSION
extern BufFilePtr BufFilePushZIP ( BufFilePtr );
#endif
extern int BufFileClose ( BufFilePtr, int );
extern int BufFileFlush ( BufFilePtr, int );
extern int BufFileRead ( BufFilePtr, char*, int );
extern int BufFileWrite ( BufFilePtr, char*, int );
extern void BufFileFree ( BufFilePtr );
#define BufFileGet(f) ((f)->left-- ? *(f)->bufp++ : ((f)->eof = (*(f)->input) (f)))
#define BufFilePut(c,f) (--(f)->left ? *(f)->bufp++ = ((unsigned char)(c)) : (*(f)->output) ((unsigned char)(c),f))
#define BufFileSkip(f,c) ((f)->eof = (*(f)->skip) (f, c))
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#endif