/
umud/DOC/
umud/DOC/examples/
umud/DOC/internals/
umud/DOC/wizard/
umud/MISC/
umud/MISC/dbchk/
umud/RWHO/rwhod/
/*
	Stretchy Buffer library.

	A stretchy buffer is a useful way of hiding the problems that
	come with wanting to read unknown amounts of stuff into a
	buffer.

	mjr. 1991
*/

#ifndef	_INCL_STRETCHYBUFFER_H

typedef	struct	{
	char		*bp;
	char		*buf;
	int		bc;		/* remaining bytes */
	unsigned 	bsiz;		/* current buffer size */
	int		rct;
	int		avg;
} Sbuf;

extern	char	_sbufgrow();
extern	Sbuf	*sbuf_new();
extern	void	sbuf_free();
extern	void	sbuf_reset();
extern	void	sbuf_initstatic();
extern	void	sbuf_freestatic();

/* get a stretchy buffer from a FILE * (emulating fgets but without sizes) */
extern	char	*sbuf_fgets();

/* copy a string into a stretchy buffer (returning string part) */
extern	char	*sbuf_strcpy();

/* fast string catenation into a stretchy buffer */
extern	char	*sbuf_strcat();

/* pseudo-functions */
#define	sbuf_put(c,S)	(--(S)->bc > 0 ? *(S)->bp++ = c : _sbufgrow(c,S))
#define	sbuf_unput(S)	(++(S)->bc, (S)->bp--)
#define	sbuf_len(S)	((int)(((S)->bp - 1) - (S)->buf))
#define	sbuf_buf(S)	((S)->buf)

#define	_INCL_STRETCHYBUFFER_H
#endif