]>
git.ipfire.org Git - thirdparty/util-linux.git/blob - text-utils/colcrt.c
2 * Copyright (c) 1980, 1993
3 * The Regents of the University of California. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@misiek.eu.org>
36 * added Native Language Support
37 * 1999-09-19 Bruno Haible <haible@clisp.cons.org>
38 * modified to work correctly in multi-byte locales
43 #include <unistd.h> /* for close() */
49 int plus(wchar_t c
, wchar_t d
);
50 void move(int l
, int m
);
54 * colcrt - replaces col for crts with new nroff esp. when using tbl.
55 * Bill Joy UCB July 14, 1977
57 * This filter uses a screen buffer, 267 half-lines by 132 columns.
58 * It interprets the up and down sequences generated by the new
59 * nroff when used with tbl and by \u \d and \r.
60 * General overstriking doesn't work correctly.
61 * Underlining is split onto multiple lines, etc.
63 * Option - suppresses all underlining.
64 * Option -2 forces printing of all half lines.
67 wchar_t page
[267][132];
79 main(int argc
, char **argv
) {
82 setlocale(LC_ALL
, "");
83 bindtextdomain(PACKAGE
, LOCALEDIR
);
88 while (argc
> 0 && argv
[0][0] == '-') {
97 printf(_("usage: %s [ - ] [ -2 ] [ file ... ]\n"), progname
);
107 if (!(f
= fopen(argv
[0], "r"))) {
120 if (ferror(stdout
) || fclose(stdout
))
179 if (outcol
+ w
> 132) {
183 cp
= &page
[outline
][outcol
];
195 dp
= cp
- (outcol
-w
);
196 for (cp
--; cp
>= dp
&& *cp
== 0; cp
--)
199 if (plus(c
, *cp
) || plus(*cp
, c
))
201 else if (*cp
== ' ' || *cp
== 0) {
203 if (cp
[i
] != ' ' && cp
[i
] != 0)
214 int plus(wchar_t c
, wchar_t d
)
217 return (c
== '|' && (d
== '-' || d
== '_'));
225 register wchar_t *cp
;
235 for (i
= first
| 1; i
< l
; i
++) {
239 for (i
= first
; i
< l
; i
++) {
241 if (printall
== 0 && lastomit
== 0 && *cp
== 0) {
247 if ((w
= wcwidth(*cp
)) > 0) {
255 bcopy(page
[ol
], page
, (267 - ol
) * 132 * sizeof(wchar_t));
256 bzero(page
[267- ol
], ol
* 132 * sizeof(wchar_t));
262 void move(int l
, int m
)
264 register wchar_t *cp
, *dp
;
266 for (cp
= page
[l
], dp
= page
[m
]; *cp
; cp
++, dp
++) {
269 if (*dp
!= ' ' && *dp
!= '|' && *dp
!= 0)
279 for (cp
= page
[l
], dp
= page
[m
]; *cp
; cp
++, dp
++)