xref: /original-bsd/usr.bin/colrm/colrm.c (revision e59fb703)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  */
7 
8 #ifndef lint
9 char copyright[] =
10 "@(#) Copyright (c) 1980 Regents of the University of California.\n\
11  All rights reserved.\n";
12 #endif /* not lint */
13 
14 #ifndef lint
15 static char sccsid[] = "@(#)colrm.c	5.4 (Berkeley) 06/01/90";
16 #endif /* not lint */
17 
18 #include <stdio.h>
19 /*
20 COLRM removes unwanted columns from a file
21 	Jeff Schriebman  UC Berkeley 11-74
22 */
23 
24 
25 main(argc,argv)
26 char **argv;
27 {
28 	register c, ct, first, last;
29 
30 	first = 0;
31 	last = 0;
32 	if (argc > 1)
33 		first = getn(*++argv);
34 	if (argc > 2)
35 		last = getn(*++argv);
36 
37 start:
38 	ct = 0;
39 loop1:
40 	c = getc(stdin);
41 	if (feof(stdin))
42 		goto fin;
43 	if (c == '\t')
44 		ct = (ct + 8) & ~7;
45 	else if (c == '\b')
46 		ct = ct ? ct - 1 : 0;
47 	else
48 		ct++;
49 	if (c == '\n') {
50 		putc(c, stdout);
51 		goto start;
52 	}
53 	if (!first || ct < first) {
54 		putc(c, stdout);
55 		goto loop1;
56 	}
57 
58 /* Loop getting rid of characters */
59 	while (!last || ct < last) {
60 		c = getc(stdin);
61 		if (feof(stdin))
62 			goto fin;
63 		if (c == '\n') {
64 			putc(c, stdout);
65 			goto start;
66 		}
67 		if (c == '\t')
68 			ct = (ct + 8) & ~7;
69 		else if (c == '\b')
70 			ct = ct ? ct - 1 : 0;
71 		else
72 			ct++;
73 	}
74 
75 /* Output last of the line */
76 	for (;;) {
77 		c = getc(stdin);
78 		if (feof(stdin))
79 			break;
80 		putc(c, stdout);
81 		if (c == '\n')
82 			goto start;
83 	}
84 fin:
85 	fflush(stdout);
86 	exit(0);
87 }
88 
89 getn(ap)
90 char *ap;
91 {
92 	register int n,c;
93 	register char *p;
94 
95 	p = ap;
96 	n = 0;
97 	while ((c = *p++) >= '0' && c <= '9')
98 		n = n*10 + c - '0';
99 	return(n);
100 }
101