31 |
|
int argc; |
32 |
|
char *argv[]; |
33 |
|
{ |
34 |
< |
register int i; |
34 |
> |
int unbuff = 0; |
35 |
> |
int i; |
36 |
|
char *curtab; |
37 |
|
int curbytes; |
38 |
< |
int running, puteol; |
38 |
> |
int puteol; |
39 |
|
|
40 |
|
curtab = "\t"; |
41 |
|
curbytes = 0; |
46 |
|
case 't': |
47 |
|
curtab = argv[i]+2; |
48 |
|
break; |
49 |
+ |
case 'u': |
50 |
+ |
unbuff = !unbuff; |
51 |
+ |
break; |
52 |
|
case 'i': |
53 |
|
switch (argv[i][2]) { |
54 |
|
case 'f': |
122 |
|
exit(1); |
123 |
|
} |
124 |
|
} |
125 |
< |
puteol = 0; /* check for tab character */ |
125 |
> |
puteol = 0; /* check for ASCII output */ |
126 |
|
for (i = nfiles; i--; ) |
127 |
< |
if (isprint(tabc[i][0]) || tabc[i][0] == '\t') { |
127 |
> |
if (!bytsiz[i] || isprint(tabc[i][0]) || tabc[i][0] == '\t') { |
128 |
|
puteol++; |
129 |
|
break; |
130 |
|
} |
131 |
< |
do { |
128 |
< |
running = 0; |
131 |
> |
for ( ; ; ) { /* main loop */ |
132 |
|
for (i = 0; i < nfiles; i++) { |
133 |
|
if (bytsiz[i]) { /* binary file */ |
134 |
< |
if (fread(buf, bytsiz[i], 1, input[i]) == 1) { |
135 |
< |
if (i) |
133 |
< |
fputs(tabc[i], stdout); |
134 |
< |
fwrite(buf, bytsiz[i], 1, stdout); |
135 |
< |
running++; |
136 |
< |
} |
137 |
< |
} else if (fgets(buf, MAXLINE, input[i]) != NULL) { |
134 |
> |
if (fread(buf, bytsiz[i], 1, input[i]) < 1) |
135 |
> |
break; |
136 |
|
if (i) |
137 |
|
fputs(tabc[i], stdout); |
138 |
+ |
fwrite(buf, bytsiz[i], 1, stdout); |
139 |
+ |
} else { |
140 |
+ |
if (fgets(buf, MAXLINE, input[i]) == NULL) |
141 |
+ |
break; |
142 |
+ |
if (i) |
143 |
+ |
fputs(tabc[i], stdout); |
144 |
|
buf[strlen(buf)-1] = '\0'; |
145 |
|
fputs(buf, stdout); |
142 |
– |
puteol++; |
143 |
– |
running++; |
146 |
|
} |
147 |
|
} |
148 |
< |
if (running && puteol) |
148 |
> |
if (i < nfiles) |
149 |
> |
break; |
150 |
> |
if (puteol) |
151 |
|
putchar('\n'); |
152 |
< |
} while (running); |
153 |
< |
|
154 |
< |
exit(0); |
152 |
> |
if (unbuff) |
153 |
> |
fflush(stdout); |
154 |
> |
} |
155 |
> |
return(0); |
156 |
|
} |