|
Lines 63-72
Link Here
|
| 63 |
int rval; |
63 |
int rval; |
| 64 |
const char *filename; |
64 |
const char *filename; |
| 65 |
|
65 |
|
| 66 |
void cook_args __P((char *argv[])); |
66 |
void cat_args __P((char *argv[], void (*cat)(int))); |
| 67 |
void cook_buf __P((FILE *)); |
67 |
void cook_buf __P((int)); |
| 68 |
int main __P((int argc, char *argv[])); |
68 |
int main __P((int argc, char *argv[])); |
| 69 |
void raw_args __P((char *argv[])); |
|
|
| 70 |
void raw_cat __P((int)); |
69 |
void raw_cat __P((int)); |
| 71 |
|
70 |
|
| 72 |
int |
71 |
int |
|
Lines 109-154
Link Here
|
| 109 |
argv += optind; |
108 |
argv += optind; |
| 110 |
|
109 |
|
| 111 |
if (bflag || eflag || nflag || sflag || tflag || vflag) |
110 |
if (bflag || eflag || nflag || sflag || tflag || vflag) |
| 112 |
cook_args(argv); |
111 |
cat_args(argv, cook_buf); |
| 113 |
else |
112 |
else |
| 114 |
raw_args(argv); |
113 |
cat_args(argv, raw_cat); |
| 115 |
if (fclose(stdout)) |
114 |
if (fclose(stdout)) |
| 116 |
err(1, "stdout"); |
115 |
err(1, "stdout"); |
| 117 |
exit(rval); |
116 |
exit(rval); |
| 118 |
} |
117 |
} |
| 119 |
|
118 |
|
| 120 |
void |
119 |
void |
| 121 |
cook_args(argv) |
120 |
cook_buf(fd) |
| 122 |
char **argv; |
121 |
register int fd; |
| 123 |
{ |
122 |
{ |
| 124 |
register FILE *fp; |
123 |
register FILE *fp; |
| 125 |
|
|
|
| 126 |
fp = stdin; |
| 127 |
filename = "stdin"; |
| 128 |
do { |
| 129 |
if (*argv) { |
| 130 |
if (!strcmp(*argv, "-")) |
| 131 |
fp = stdin; |
| 132 |
else if ((fp = fopen(*argv, "r")) == NULL) { |
| 133 |
warn("%s", *argv); |
| 134 |
rval = 1; |
| 135 |
++argv; |
| 136 |
continue; |
| 137 |
} |
| 138 |
filename = *argv++; |
| 139 |
} |
| 140 |
cook_buf(fp); |
| 141 |
if (fp != stdin) |
| 142 |
(void)fclose(fp); |
| 143 |
} while (*argv); |
| 144 |
} |
| 145 |
|
| 146 |
void |
| 147 |
cook_buf(fp) |
| 148 |
register FILE *fp; |
| 149 |
{ |
| 150 |
register int ch, gobble, line, prev; |
124 |
register int ch, gobble, line, prev; |
| 151 |
|
125 |
|
|
|
126 |
if ((fp = fdopen(fd, "r")) == NULL) { |
| 127 |
warn("%s", filename); |
| 128 |
rval = 1; |
| 129 |
return; |
| 130 |
} |
| 152 |
line = gobble = 0; |
131 |
line = gobble = 0; |
| 153 |
for (prev = '\n'; (ch = getc(fp)) != EOF; prev = ch) { |
132 |
for (prev = '\n'; (ch = getc(fp)) != EOF; prev = ch) { |
| 154 |
if (prev == '\n') { |
133 |
if (prev == '\n') { |
|
Lines 205-215
Link Here
|
| 205 |
} |
184 |
} |
| 206 |
if (ferror(stdout)) |
185 |
if (ferror(stdout)) |
| 207 |
err(1, "stdout"); |
186 |
err(1, "stdout"); |
|
|
187 |
if (fd != fileno(stdin)) |
| 188 |
(void)fclose(fp); |
| 208 |
} |
189 |
} |
| 209 |
|
190 |
|
| 210 |
void |
191 |
void |
| 211 |
raw_args(argv) |
192 |
cat_args(argv, cat) |
| 212 |
char **argv; |
193 |
char **argv; |
|
|
194 |
void (*cat)(int); |
| 213 |
{ |
195 |
{ |
| 214 |
register int fd; |
196 |
register int fd; |
| 215 |
|
197 |
|
|
Lines 227-233
Link Here
|
| 227 |
} |
209 |
} |
| 228 |
filename = *argv++; |
210 |
filename = *argv++; |
| 229 |
} |
211 |
} |
| 230 |
raw_cat(fd); |
212 |
cat(fd); |
| 231 |
if (fd != fileno(stdin)) |
213 |
if (fd != fileno(stdin)) |
| 232 |
(void)close(fd); |
214 |
(void)close(fd); |
| 233 |
} while (*argv); |
215 |
} while (*argv); |