|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 1682 (0x692) Types: TextFile Notes: UNIX file Names: »ungetc.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code └─⟦f4b8d8c84⟧ UNIX Filesystem └─ ⟦this⟧ »libc/stdio/ungetc.c«
/* * 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)); }