|
|
1.1 ! root 1: /* ! 2: * Standard I/O Library ! 3: * Unget char for next getc ! 4: */ ! 5: ! 6: #include <stdio.h> ! 7: ! 8: int ! 9: ungetc(c, fp) ! 10: int c; ! 11: register FILE *fp; ! 12: { ! 13: extern int _fginit(); ! 14: extern int _fgetb(); ! 15: extern int _fgetc(); ! 16: extern int _fgeteof(); ! 17: int _fungoti(); ! 18: int _fungotb(); ! 19: int _fungotc(); ! 20: int _fungote(); ! 21: int _funungc(); ! 22: ! 23: if (c == EOF) /* ANSI 4.9.7.11 (22) */ ! 24: return(EOF); /* Leave input stream unchanged */ ! 25: if (fp->_gt==&_fginit) ! 26: fp->_gt = &_fungoti; ! 27: else if (fp->_gt==&_fgetb) ! 28: fp->_gt = &_fungotb; ! 29: else if (fp->_gt==&_fgetc) ! 30: fp->_gt = &_fungotc; ! 31: else if (fp->_gt==&_fgeteof) ! 32: fp->_gt = &_fungote; ! 33: else ! 34: return (EOF); ! 35: fp->_pt = &_funungc; ! 36: fp->_cc = 0; ! 37: fp->_ff |= _FUNGOT; ! 38: fp->_ff &= ~_FEOF; /* ANSI 4.9.7.11 (24) */ ! 39: fp->_uc = c; ! 40: return (c); ! 41: } ! 42: ! 43: ! 44: /* ! 45: * uninitialized fp unget ! 46: */ ! 47: ! 48: static ! 49: int ! 50: _fungoti(fp) ! 51: register FILE *fp; ! 52: { ! 53: extern int _fginit(); ! 54: extern int _fpinit(); ! 55: ! 56: fp->_gt = &_fginit; ! 57: fp->_pt = &_fpinit; ! 58: fp->_cc = 0; ! 59: fp->_ff &= ~_FUNGOT; ! 60: return (fp->_uc); ! 61: } ! 62: ! 63: ! 64: /* ! 65: * buffered unget ! 66: */ ! 67: ! 68: static ! 69: int ! 70: _fungotb(fp) ! 71: register FILE *fp; ! 72: { ! 73: extern int _fgetb(); ! 74: extern int _fputb(); ! 75: ! 76: fp->_gt = &_fgetb; ! 77: fp->_pt = &_fputb; ! 78: if ((fp->_cc = fp->_cp - fp->_dp) > 0) ! 79: fp->_cc = _ep(fp) - fp->_cp; ! 80: fp->_ff &= ~_FUNGOT; ! 81: return (fp->_uc); ! 82: } ! 83: ! 84: ! 85: /* ! 86: * unbuffered unget ! 87: */ ! 88: ! 89: static ! 90: int ! 91: _fungotc(fp) ! 92: register FILE *fp; ! 93: { ! 94: extern int _fgetc(); ! 95: extern int _fputc(); ! 96: ! 97: fp->_gt = &_fgetc; ! 98: fp->_pt = &_fputc; ! 99: fp->_cc = 0; ! 100: fp->_ff &= ~_FUNGOT; ! 101: return (fp->_uc); ! 102: } ! 103: ! 104: ! 105: /* ! 106: * string unget (for sscanf) ! 107: */ ! 108: ! 109: static ! 110: int ! 111: _fungote(fp) ! 112: register FILE *fp; ! 113: { ! 114: extern int _fgeteof(); ! 115: ! 116: fp->_gt = &_fgeteof; ! 117: fp->_cc = -strlen(fp->_cp); ! 118: return (fp->_uc); ! 119: } ! 120: ! 121: ! 122: /* ! 123: * un unget; occurs if put done before get after unget ! 124: */ ! 125: ! 126: static ! 127: int ! 128: _funungc(c, fp) ! 129: register char c; ! 130: register FILE *fp; ! 131: { ! 132: (*fp->_gt)(fp); ! 133: return (putc(c, fp)); ! 134: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.