You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.1 KiB
89 lines
2.1 KiB
/*===========================================================================
|
|
bistream.h
|
|
see parsifal.h for copyright info
|
|
===========================================================================*/
|
|
#ifndef BISTREAM__H
|
|
#define BISTREAM__H
|
|
|
|
#include <stddef.h>
|
|
#include <limits.h>
|
|
#ifdef ICONV_SUPPORT
|
|
#include "iconv.h"
|
|
#endif
|
|
|
|
#ifndef BYTE
|
|
#define BYTE unsigned char
|
|
#endif
|
|
|
|
#ifndef COUNTBUFSIZE
|
|
#define COUNTBUFSIZE(cBytes, blocksize) \
|
|
((!(cBytes)) ? (blocksize) : (!( (cBytes) % (blocksize) ) ? (int)(cBytes) : (int)( (((cBytes) / (blocksize)) + 1) * (blocksize) )) )
|
|
#endif
|
|
|
|
#define BIS_DEFAULT_MAXBUFSIZE INT_MAX
|
|
#define BIS_DEFAULT_BLOCKSIZE 512
|
|
#define BIS_CHAR_MAX 16
|
|
|
|
enum BIS_ERRORS { BIS_ERR_MEMALLOC = -40,
|
|
BIS_ERR_MAXBUF,
|
|
BIS_ERR_INVALIDARG,
|
|
BIS_ERR_ENCODING,
|
|
BIS_ERR_INPUT,
|
|
BIS_EOF = 1 };
|
|
|
|
typedef int (*LPFNINPUTSRC)(BYTE *buf, int cBytes, int *cBytesActual, void *inputData);
|
|
|
|
typedef struct tagBUFFEREDISTREAM
|
|
{
|
|
BYTE *buf;
|
|
BYTE *inbuf;
|
|
int bufsize;
|
|
int maxbufsize;
|
|
int blocksize;
|
|
int bytesavail;
|
|
int pos;
|
|
int eof;
|
|
int err;
|
|
int encerr;
|
|
int inbufrest;
|
|
void *userdata;
|
|
void *inputData;
|
|
LPFNINPUTSRC inputsrc;
|
|
size_t (*encode) (struct tagBUFFEREDISTREAM *reader, const BYTE **inbuf, size_t *inbytesleft, BYTE **outbuf, size_t *outbytesleft);
|
|
#ifdef ICONV_SUPPORT
|
|
iconv_t cd;
|
|
#endif
|
|
} BUFFEREDISTREAM, *LPBUFFEREDISTREAM;
|
|
|
|
typedef size_t (*LPFNENCODE) (LPBUFFEREDISTREAM r, const BYTE **inbuf, size_t *inbytesleft, BYTE **outbuf, size_t *outbytesleft);
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
int BufferedIStream_EncodeBuffer(LPBUFFEREDISTREAM r);
|
|
|
|
int BufferedIStream_Peek(LPBUFFEREDISTREAM r,
|
|
const BYTE *tok,
|
|
int len,
|
|
int offset);
|
|
|
|
int BufferedIStream_ResetBuf(LPBUFFEREDISTREAM r,
|
|
int numBytes);
|
|
|
|
LPBUFFEREDISTREAM BufferedIStream_Init(LPBUFFEREDISTREAM r,
|
|
int blocksize);
|
|
|
|
int BufferedIStream_AppendBytes(LPBUFFEREDISTREAM r,
|
|
const BYTE *bytes,
|
|
int len);
|
|
|
|
void BufferedIStream_Free(LPBUFFEREDISTREAM r);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
#endif /* BISTREAM__H */
|
|
|
|
|
|
|