|
|
1.1 ! root 1: /* ! 2: * Standard I/O Library Internals ! 3: * initialize file for I/O ! 4: * decide if buffered ! 5: * allocate buffer if required ! 6: * stuff appropriate get/put functions ! 7: * reset char count ! 8: */ ! 9: ! 10: #include <stdio.h> ! 11: ! 12: ! 13: void ! 14: finit(fp) ! 15: register FILE *fp; ! 16: { ! 17: register int tty; ! 18: extern int _fgetc(); ! 19: extern int _fputc(); ! 20: extern int _fgetb(); ! 21: extern int _fputb(); ! 22: extern int _fputt(); ! 23: ! 24: if (fp->_bp == NULL ! 25: && (fp->_ff&_FSTBUF || (tty=isatty(fileno(fp))) && fp!=stdout ! 26: || (fp->_bp = malloc(BUFSIZ)) == NULL)) { ! 27: fp->_gt = &_fgetc; ! 28: fp->_pt = &_fputc; ! 29: } else if ((fp->_ff&_FSTBUF)==0 && tty && fp==stdout) { ! 30: fp->_gt = &_fgetb; ! 31: fp->_pt = &_fputt; ! 32: fp->_dp = fp->_cp = fp->_bp; ! 33: fp->_cc = 0; ! 34: } else { ! 35: fp->_gt = &_fgetb; ! 36: fp->_pt = &_fputb; ! 37: fp->_dp = fp->_cp = fp->_bp + boffset(fileno(fp)); ! 38: fp->_cc = 0; ! 39: } ! 40: } ! 41: ! 42: static ! 43: int ! 44: boffset(fd) ! 45: int fd; ! 46: { ! 47: extern long lseek(); ! 48: register long off; ! 49: ! 50: if ((off=lseek(fd, 0L, SEEK_CUR))==-1L) ! 51: return (0); ! 52: else ! 53: return ((unsigned)off%BUFSIZ); ! 54: } ! 55: ! 56: int ! 57: _fginit(fp) ! 58: register FILE *fp; ! 59: { ! 60: finit(fp); ! 61: return ((*fp->_gt)(fp)); ! 62: } ! 63: ! 64: int ! 65: _fpinit(c, fp) ! 66: register char c; ! 67: register FILE *fp; ! 68: { ! 69: finit(fp); ! 70: return ((*fp->_pt)(c, fp)); ! 71: } ! 72: ! 73: ! 74: /* ! 75: * Close all files (called from exit) ! 76: */ ! 77: ! 78: void ! 79: _finish() ! 80: { ! 81: register FILE **fpp; ! 82: ! 83: for (fpp = &_fp[_NFILE-1]; fpp>=&_fp[0]; --fpp) ! 84: if (*fpp!=NULL) ! 85: fclose(*fpp); ! 86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.