1 /* $NetBSD: colcrt.c,v 1.7 2005/02/17 17:17:25 xtraeme Exp $ */
4 * Copyright (c) 1980, 1993
5 * The Regents of the University of California. All rights reserved.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the University nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 #include <sys/cdefs.h>
34 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\
35 The Regents of the University of California. All rights reserved.");
40 static char sccsid
[] = "@(#)colcrt.c 8.1 (Berkeley) 6/6/93";
42 __RCSID("$NetBSD: colcrt.c,v 1.7 2005/02/17 17:17:25 xtraeme Exp $");
52 * colcrt - replaces col for crts with new nroff esp. when using tbl.
53 * Bill Joy UCB July 14, 1977
55 * This filter uses a screen buffer, 267 half-lines by 132 columns.
56 * It interprets the up and down sequences generated by the new
57 * nroff when used with tbl and by \u \d and \r.
58 * General overstriking doesn't work correctly.
59 * Underlining is split onto multiple lines, etc.
61 * Option - suppresses all underlining.
62 * Option -2 forces printing of all half lines.
81 main(int argc
, char *argv
[])
88 while (argc
> 0 && argv
[0][0] == '-') {
97 printf("usage: %s [ - ] [ -2 ] [ file ... ]\n", progname
);
107 if (!(f
= fopen(argv
[0], "r"))) {
166 cp
= &page
[outline
][outcol
];
177 for (cp
--; cp
>= dp
&& *cp
== 0; cp
--)
180 if (plus(c
, *cp
) || plus(*cp
, c
))
182 else if (*cp
== ' ' || *cp
== 0)
196 return ((c
== '|' && d
== '-') || d
== '_');
215 for (i
= first
| 1; i
< l
; i
++) {
219 for (i
= first
; i
< l
; i
++) {
221 if (printall
== 0 && lastomit
== 0 && *cp
== 0) {
228 memmove(page
, page
[ol
], (267 - ol
) * 132);
229 memset(page
[267- ol
], 0, ol
* 132);
240 for (cp
= page
[l
], dp
= page
[m
]; *cp
; cp
++, dp
++) {
243 if (*dp
!= ' ' && *dp
!= '|' && *dp
!= 0)
253 for (cp
= page
[l
], dp
= page
[m
]; *cp
; cp
++, dp
++)