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

⟦e0a5e9281⟧ TextFile

    Length: 1326 (0x52e)
    Types: TextFile
    Notes: UNIX file
    Names: »finit.c«

Derivation

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

TextFile

/*
 * Standard I/O Library Internals
 * initialize file for I/O
 *	decide if buffered
 *	allocate buffer if required
 *	stuff appropriate get/put functions
 *	reset char count
 */

#include <stdio.h>


void
finit(fp)
register FILE	*fp;
{
	register int	tty;
	extern	int	_fgetc();
	extern	int	_fputc();
	extern	int	_fgetb();
	extern	int	_fputb();
	extern	int	_fputt();

	if (fp->_bp == NULL
	 && (fp->_ff&_FSTBUF || (tty=isatty(fileno(fp))) && fp!=stdout
	    || (fp->_bp = malloc(BUFSIZ)) == NULL)) {
		fp->_gt = &_fgetc;
		fp->_pt = &_fputc;
	} else if ((fp->_ff&_FSTBUF)==0 && tty && fp==stdout) {
		fp->_gt = &_fgetb;
		fp->_pt = &_fputt;
		fp->_dp = fp->_cp = fp->_bp;
		fp->_cc = 0;
	} else {
		fp->_gt = &_fgetb;
		fp->_pt = &_fputb;
		fp->_dp = fp->_cp = fp->_bp + boffset(fileno(fp));
		fp->_cc = 0;
	}
}

static
int
boffset(fd)
int	fd;
{
	extern	long	lseek();
	register long	off;

	if ((off=lseek(fd, 0L, 1))==-1L)
		return (0);
	else
		return ((int)off%BUFSIZ);
}

int
_fginit(fp)
register FILE	*fp;
{
	finit(fp);
	return ((*fp->_gt)(fp));
}

int
_fpinit(c, fp)
register char	c;
register FILE	*fp;
{
	finit(fp);
	return ((*fp->_pt)(c, fp));
}


/*
 * Close all files (called from exit)
 */

void
_finish()
{
	register FILE	**fpp;

	for (fpp = &_fp[_NFILE-1]; fpp>=&_fp[0]; --fpp)
		if (*fpp!=NULL)
			fclose(*fpp);
}