1BSD/portlib/cgetc.c

Compare this file to the similar file:
Show the results in this format:

# include	"iodec.h"

/**
 **	get a single character
 **/

int	__backup	0;

cgetc(xfn)
int	xfn;
{
	register struct fileps	*fp;
	register int		i;
	extern int		f_log;
	extern int		cin;
	register int		fn;

	fn = xfn;
	if (fn < 0 || fn >= MAXFILES)
		__error("cgetc: illegal file number %d", fn);
	fp = &__filehdr[fn];
	if (fp->wrflag == 2)
		__error("cgetc: file %d not open to read", fn);
	if (fp->wrflag == 0)
		__makbuf(fn, 0);
	if (fp->eoferr)
		return ('\0');
	if (fp->nchars == 0)
	{
		i = read(fn, fp->bptr = fp->buff, fp->bsize);
		if (i < 0)
			__error("cgetc: read error on %d", fn);
		if (i == 0)
		{
			fp->eoferr = 2;
			return ('\0');
		}
		fp->nchars = i;
	}
	fp->nchars--;
	if (f_log > 0 && fn == cin)
		if (__backup)
			__backup--;
		else
			cputc(*fp->bptr, f_log);
	return(*fp->bptr++);
}