* Copyright (c) 1983 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
"@(#) Copyright (c) 1983 Regents of the University of California.\n\
static char sccsid
[] = "@(#)lpf.c 5.4 (Berkeley) 6/1/90";
* filter which reads the output of nroff and converts lines
* with ^H's to overwritten lines. Thus this works like 'ul'
* but is much better: it can handle more than 2 overwrites
* and it is written with some style.
* modified by kls to use register references instead of arrays
* to try to gain a little speed.
char buf
[MAXREP
][MAXWIDTH
];
int maxcol
[MAXREP
] = {-1};
int width
= 132; /* default line length */
int length
= 66; /* page length */
int indent
; /* indentation length */
int literal
; /* print control characters */
char *name
; /* user's login name */
char *host
; /* user's machine name */
char *acctfile
; /* accounting information file */
register FILE *p
= stdin
, *o
= stdout
;
int done
, linedone
, maxrep
;
if (*(cp
= *++argv
) == '-') {
if ((i
= atoi(&cp
[2])) > 0 && i
<= MAXWIDTH
)
case 'c': /* Print control chars */
for (cp
= buf
[0], limit
= buf
[MAXREP
]; cp
< limit
; *cp
++ = ' ');
col
= ((col
- indent
) | 07) + indent
+ 1;
* lpd needs to use a different filter to
* print data so stop what we are doing and
* wait for lpd to restart us.
if ((ch
= getchar()) == '\1') {
if (col
>= width
|| !literal
&& ch
< ' ') {
for (i
= 0; i
< MAXREP
; i
++) {
for (i
= 0; i
<= maxrep
; i
++) {
for (cp
= buf
[i
], limit
= cp
+maxcol
[i
]; cp
<= limit
;) {
if (++lineno
>= length
) {
if (lineno
) { /* be sure to end on a page boundary */
if (name
&& acctfile
&& access(acctfile
, 02) >= 0 &&
freopen(acctfile
, "a", stdout
) != NULL
) {
printf("%7.2f\t%s:%s\n", (float)npages
, host
, name
);