|
|
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.