DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦f89c4712e⟧ TextFile

    Length: 1682 (0x692)
    Types: TextFile
    Notes: UNIX file
    Names: »ungetc.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »libc/stdio/ungetc.c« 

TextFile

/*
 * Standard I/O Library
 * Unget char for next getc
 */

#include <stdio.h>

int
ungetc(c, fp)
int	c;
register FILE	*fp;
{
	extern	int	_fginit();
	extern	int	_fgetb();
	extern	int	_fgetc();
	extern	int	_fgeteof();
	int	_fungoti();
	int	_fungotb();
	int	_fungotc();
	int	_fungote();
	int	_funungc();

	if (fp->_gt==&_fginit)
		fp->_gt = &_fungoti;
	else if (fp->_gt==&_fgetb)
		fp->_gt = &_fungotb;
	else if (fp->_gt==&_fgetc)
		fp->_gt = &_fungotc;
	else if (fp->_gt==&_fgeteof)
		fp->_gt = &_fungote;
	else
		return (EOF);
	fp->_pt = &_funungc;
	fp->_cc = 0;
	fp->_ff |= _FUNGOT;
	fp->_uc = c;
	return (c);
}


/*
 * uninitialized fp unget
 */

static
int
_fungoti(fp)
register FILE	*fp;
{
	extern	int	_fginit();
	extern	int	_fpinit();

	fp->_gt = &_fginit;
	fp->_pt = &_fpinit;
	fp->_cc = 0;
	fp->_ff &= ~_FUNGOT;
	return (fp->_uc);
}


/*
 * buffered unget
 */

static
int
_fungotb(fp)
register FILE	*fp;
{
	extern	int	_fgetb();
	extern	int	_fputb();

	fp->_gt = &_fgetb;
	fp->_pt = &_fputb;
	if ((fp->_cc = fp->_cp - fp->_dp) > 0)
		fp->_cc = _ep(fp) - fp->_cp;
	fp->_ff &= ~_FUNGOT;
	return (fp->_uc);
}


/*
 * unbuffered unget
 */

static
int
_fungotc(fp)
register FILE	*fp;
{
	extern	int	_fgetc();
	extern	int	_fputc();

	fp->_gt = &_fgetc;
	fp->_pt = &_fputc;
	fp->_cc = 0;
	fp->_ff &= ~_FUNGOT;
	return (fp->_uc);
}


/*
 * string unget (for sscanf)
 */

static
int
_fungote(fp)
register FILE	*fp;
{
	extern int	_fgeteof();

	fp->_gt = &_fgeteof;
	fp->_cc = -strlen(fp->_cp);
	return (fp->_uc);
}


/*
 * un unget; occurs if put done before get after unget
 */

static
int
_funungc(c, fp)
register char	c;
register FILE	*fp;
{
	(*fp->_gt)(fp);
	return (putc(c, fp));
}