xref: /onnv-gate/usr/src/lib/libshell/common/include/fcin.h (revision 12068:08a39a083754)
14887Schin /***********************************************************************
24887Schin *                                                                      *
34887Schin *               This software is part of the ast package               *
4*12068SRoger.Faulkner@Oracle.COM *          Copyright (c) 1982-2010 AT&T Intellectual Property          *
54887Schin *                      and is licensed under the                       *
64887Schin *                  Common Public License, Version 1.0                  *
78462SApril.Chin@Sun.COM *                    by AT&T Intellectual Property                     *
84887Schin *                                                                      *
94887Schin *                A copy of the License is available at                 *
104887Schin *            http://www.opensource.org/licenses/cpl1.0.txt             *
114887Schin *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
124887Schin *                                                                      *
134887Schin *              Information and Software Systems Research               *
144887Schin *                            AT&T Research                             *
154887Schin *                           Florham Park NJ                            *
164887Schin *                                                                      *
174887Schin *                  David Korn <dgk@research.att.com>                   *
184887Schin *                                                                      *
194887Schin ***********************************************************************/
204887Schin #pragma prototyped
214887Schin #ifndef fcgetc
224887Schin /*
234887Schin  * David Korn
244887Schin  * AT&T Labs
254887Schin  *
264887Schin  * Fast character input with sfio text streams and strings
274887Schin  *
284887Schin  */
294887Schin 
304887Schin #include	<sfio.h>
314887Schin 
324887Schin typedef struct _fcin
334887Schin {
344887Schin 	Sfio_t		*_fcfile;	/* input file pointer */
354887Schin 	unsigned char	*fcbuff;	/* pointer to input buffer */
364887Schin 	unsigned char	*fclast;	/* pointer to end of input buffer */
374887Schin 	unsigned char	*fcptr;		/* pointer to next input char */
384887Schin 	unsigned char	fcchar;		/* saved character */
398462SApril.Chin@Sun.COM 	void (*fcfun)(Sfio_t*,const char*,int,void*);	/* advance function */
408462SApril.Chin@Sun.COM 	void		*context;	/* context pointer */
414887Schin 	int		fcleft;		/* for multibyte boundary */
424887Schin 	Sfoff_t		fcoff;		/* offset for last read */
434887Schin } Fcin_t;
444887Schin 
454887Schin #define fcfile()	(_Fcin._fcfile)
464887Schin #define fcgetc(c)	(((c=fcget()) || (c=fcfill())), c)
474887Schin #define	fcget()		((int)(*_Fcin.fcptr++))
484887Schin #define	fcpeek(n)	((int)_Fcin.fcptr[n])
494887Schin #define	fcseek(n)	((char*)(_Fcin.fcptr+=(n)))
504887Schin #define fcfirst()	((char*)_Fcin.fcbuff)
514887Schin #define fcsopen(s)	(_Fcin._fcfile=(Sfio_t*)0,_Fcin.fcbuff=_Fcin.fcptr=(unsigned char*)(s))
524887Schin #define fctell()	(_Fcin.fcoff + (_Fcin.fcptr-_Fcin.fcbuff))
534887Schin #define fcsave(x)	(*(x) = _Fcin)
544887Schin #define fcrestore(x)	(_Fcin = *(x))
554887Schin extern int		fcfill(void);
564887Schin extern int		fcfopen(Sfio_t*);
574887Schin extern int		fcclose(void);
588462SApril.Chin@Sun.COM void			fcnotify(void(*)(Sfio_t*,const char*,int,void*),void*);
594887Schin extern int		fcmbstate(const char*,int*,int*);
604887Schin 
614887Schin extern Fcin_t		_Fcin;		/* used by macros */
624887Schin 
634887Schin #endif /* fcgetc */
64