diff options
Diffstat (limited to 'usr/src/lib/libshell/common/include/fcin.h')
-rw-r--r-- | usr/src/lib/libshell/common/include/fcin.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/usr/src/lib/libshell/common/include/fcin.h b/usr/src/lib/libshell/common/include/fcin.h new file mode 100644 index 0000000000..c147a8fdef --- /dev/null +++ b/usr/src/lib/libshell/common/include/fcin.h @@ -0,0 +1,62 @@ +/*********************************************************************** +* * +* 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 */ |