changed INDEX operator to handle multiple subscript arrays correctly
[unix-history] / usr / src / usr.bin / fold / fold.c
CommitLineData
474113c9 1static char *sccsid = "@(#)fold.c 4.2 (Berkeley) %G%";
3f1c192a
BJ
2#include <stdio.h>
3/*
4 * fold - fold long lines for finite output devices
5 *
6 * Bill Joy UCB June 28, 1977
7 */
8
9int fold = 80;
10
11main(argc, argv)
12 int argc;
13 char *argv[];
14{
15 register c;
16 FILE *f;
17 char obuf[BUFSIZ];
18
19 argc--, argv++;
20 setbuf(stdout, obuf);
21 if (argc > 0 && argv[0][0] == '-') {
22 fold = 0;
23 argv[0]++;
24 while (*argv[0] >= '0' && *argv[0] <= '9')
474113c9 25 fold *= 10, fold += *argv[0]++ - '0';
3f1c192a
BJ
26 if (*argv[0]) {
27 printf("Bad number for fold\n");
28 exit(1);
29 }
30 argc--, argv++;
31 }
32 do {
33 if (argc > 0) {
34 if (freopen(argv[0], "r", stdin) == NULL) {
35 perror(argv[0]);
36 exit(1);
37 }
38 argc--, argv++;
39 }
40 for (;;) {
41 c = getc(stdin);
42 if (c == -1)
43 break;
44 putch(c);
45 }
46 } while (argc > 0);
47 exit(0);
48}
49
50int col;
51
52putch(c)
53 register c;
54{
55 register ncol;
56
57 switch (c) {
58 case '\n':
59 ncol = 0;
60 break;
61 case '\t':
62 ncol = (col + 8) &~ 7;
63 break;
64 case '\b':
65 ncol = col ? col - 1 : 0;
66 break;
67 case '\r':
68 ncol = 0;
69 break;
70 default:
71 ncol = col + 1;
72 }
73 if (ncol > fold)
74 putchar('\n'), col = 0;
75 putchar(c);
76 switch (c) {
77 case '\n':
78 col = 0;
79 break;
80 case '\t':
474113c9
SL
81 col += 8;
82 col &= ~7;
3f1c192a
BJ
83 break;
84 case '\b':
85 if (col)
86 col--;
87 break;
88 case '\r':
89 col = 0;
90 break;
91 default:
92 col++;
93 break;
94 }
95}