fcin.h revision da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968
/***********************************************************************
* *
* This software is part of the ast package *
* Copyright (c) 1982-2007 AT&T Knowledge Ventures *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Knowledge Ventures *
* *
* A copy of the License is available at *
* http://www.opensource.org/licenses/cpl1.0.txt *
* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
* *
* Information and Software Systems Research *
* AT&T Research *
* Florham Park NJ *
* *
* David Korn <dgk@research.att.com> *
* *
***********************************************************************/
#pragma prototyped
#ifndef fcgetc
/*
* David Korn
* AT&T Labs
*
* Fast character input with sfio text streams and strings
*
*/
#include <sfio.h>
typedef struct _fcin
{
Sfio_t *_fcfile; /* input file pointer */
unsigned char *fcbuff; /* pointer to input buffer */
unsigned char *fclast; /* pointer to end of input buffer */
unsigned char *fcptr; /* pointer to next input char */
unsigned char fcchar; /* saved character */
void (*fcfun)(Sfio_t*,const char*,int); /* advance function */
int fcleft; /* for multibyte boundary */
Sfoff_t fcoff; /* offset for last read */
} Fcin_t;
#define fcfile() (_Fcin._fcfile)
#define fcgetc(c) (((c=fcget()) || (c=fcfill())), c)
#define fcget() ((int)(*_Fcin.fcptr++))
#define fcpeek(n) ((int)_Fcin.fcptr[n])
#define fcseek(n) ((char*)(_Fcin.fcptr+=(n)))
#define fcfirst() ((char*)_Fcin.fcbuff)
#define fcsopen(s) (_Fcin._fcfile=(Sfio_t*)0,_Fcin.fcbuff=_Fcin.fcptr=(unsigned char*)(s))
#define fctell() (_Fcin.fcoff + (_Fcin.fcptr-_Fcin.fcbuff))
#define fcsave(x) (*(x) = _Fcin)
#define fcrestore(x) (_Fcin = *(x))
extern int fcfill(void);
extern int fcfopen(Sfio_t*);
extern int fcclose(void);
void fcnotify(void(*)(Sfio_t*,const char*,int));
extern int fcmbstate(const char*,int*,int*);
extern Fcin_t _Fcin; /* used by macros */
#endif /* fcgetc */