add Berkeley specific copyright
[unix-history] / usr / src / usr.bin / fold / fold.c
CommitLineData
22e155fc
DF
1/*
2 * Copyright (c) 1980 Regents of the University of California.
5e8b0e60
KB
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22e155fc
DF
16 */
17
18#ifndef lint
19char copyright[] =
20"@(#) Copyright (c) 1980 Regents of the University of California.\n\
21 All rights reserved.\n";
5e8b0e60 22#endif /* not lint */
22e155fc
DF
23
24#ifndef lint
5e8b0e60
KB
25static char sccsid[] = "@(#)fold.c 5.2 (Berkeley) %G%";
26#endif /* not lint */
22e155fc 27
3f1c192a
BJ
28#include <stdio.h>
29/*
30 * fold - fold long lines for finite output devices
31 *
32 * Bill Joy UCB June 28, 1977
33 */
34
35int fold = 80;
36
37main(argc, argv)
38 int argc;
39 char *argv[];
40{
41 register c;
42 FILE *f;
3f1c192a
BJ
43
44 argc--, argv++;
3f1c192a
BJ
45 if (argc > 0 && argv[0][0] == '-') {
46 fold = 0;
47 argv[0]++;
48 while (*argv[0] >= '0' && *argv[0] <= '9')
474113c9 49 fold *= 10, fold += *argv[0]++ - '0';
3f1c192a
BJ
50 if (*argv[0]) {
51 printf("Bad number for fold\n");
52 exit(1);
53 }
54 argc--, argv++;
55 }
56 do {
57 if (argc > 0) {
58 if (freopen(argv[0], "r", stdin) == NULL) {
59 perror(argv[0]);
60 exit(1);
61 }
62 argc--, argv++;
63 }
64 for (;;) {
65 c = getc(stdin);
66 if (c == -1)
67 break;
68 putch(c);
69 }
70 } while (argc > 0);
71 exit(0);
72}
73
74int col;
75
76putch(c)
77 register c;
78{
79 register ncol;
80
81 switch (c) {
82 case '\n':
83 ncol = 0;
84 break;
85 case '\t':
86 ncol = (col + 8) &~ 7;
87 break;
88 case '\b':
89 ncol = col ? col - 1 : 0;
90 break;
91 case '\r':
92 ncol = 0;
93 break;
94 default:
95 ncol = col + 1;
96 }
97 if (ncol > fold)
98 putchar('\n'), col = 0;
99 putchar(c);
100 switch (c) {
101 case '\n':
102 col = 0;
103 break;
104 case '\t':
474113c9
SL
105 col += 8;
106 col &= ~7;
3f1c192a
BJ
107 break;
108 case '\b':
109 if (col)
110 col--;
111 break;
112 case '\r':
113 col = 0;
114 break;
115 default:
116 col++;
117 break;
118 }
119}