date and time created 85/01/22 13:04:29 by ralph
[unix-history] / usr / src / usr.bin / fold / fold.c
CommitLineData
32a94702 1static char *sccsid = "@(#)fold.c 4.3 (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;
3f1c192a
BJ
17
18 argc--, argv++;
3f1c192a
BJ
19 if (argc > 0 && argv[0][0] == '-') {
20 fold = 0;
21 argv[0]++;
22 while (*argv[0] >= '0' && *argv[0] <= '9')
474113c9 23 fold *= 10, fold += *argv[0]++ - '0';
3f1c192a
BJ
24 if (*argv[0]) {
25 printf("Bad number for fold\n");
26 exit(1);
27 }
28 argc--, argv++;
29 }
30 do {
31 if (argc > 0) {
32 if (freopen(argv[0], "r", stdin) == NULL) {
33 perror(argv[0]);
34 exit(1);
35 }
36 argc--, argv++;
37 }
38 for (;;) {
39 c = getc(stdin);
40 if (c == -1)
41 break;
42 putch(c);
43 }
44 } while (argc > 0);
45 exit(0);
46}
47
48int col;
49
50putch(c)
51 register c;
52{
53 register ncol;
54
55 switch (c) {
56 case '\n':
57 ncol = 0;
58 break;
59 case '\t':
60 ncol = (col + 8) &~ 7;
61 break;
62 case '\b':
63 ncol = col ? col - 1 : 0;
64 break;
65 case '\r':
66 ncol = 0;
67 break;
68 default:
69 ncol = col + 1;
70 }
71 if (ncol > fold)
72 putchar('\n'), col = 0;
73 putchar(c);
74 switch (c) {
75 case '\n':
76 col = 0;
77 break;
78 case '\t':
474113c9
SL
79 col += 8;
80 col &= ~7;
3f1c192a
BJ
81 break;
82 case '\b':
83 if (col)
84 col--;
85 break;
86 case '\r':
87 col = 0;
88 break;
89 default:
90 col++;
91 break;
92 }
93}