1 /* $NetBSD: fpr.c,v 1.7 2003/10/16 06:50:17 itojun Exp $ */
4 * Copyright (c) 1989, 1993
5 * The Regents of the University of California. All rights reserved.
7 * This code is derived from software contributed to Berkeley by
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. Neither the name of the University nor the names of its contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
22 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 #include <sys/cdefs.h>
37 __COPYRIGHT("@(#) Copyright (c) 1989, 1993\
38 The Regents of the University of California. All rights reserved.");
43 static char sccsid
[] = "@(#)fpr.c 8.1 (Berkeley) 6/6/93";
45 __RCSID("$NetBSD: fpr.c,v 1.7 2003/10/16 06:50:17 itojun Exp $");
85 void flush
__P((void));
86 void get_text
__P((void));
87 void init
__P((void));
88 int main
__P((int, char **));
89 void nospace
__P((void));
90 void savech
__P((int));
113 ungetc((int) EOL
, stdin
);
142 ungetc((int) EOL
, stdin
);
157 for (i
= 0; i
< length
; i
++)
168 fprintf(stderr
, "Illegal carriage control - 1 line.\n");
171 fprintf(stderr
, "Illegal carriage control - %d lines.\n", errorcount
);
186 sp
= malloc((unsigned) maxpos
);
193 line
= (COLUMN
*) calloc(maxcol
, (unsigned) sizeof(COLUMN
));
197 cend
= line
+ (maxcol
- 1);
199 cp
->width
= INITWIDTH
;
200 sp
= calloc(INITWIDTH
, (unsigned) sizeof(char));
222 if (ch
== EOL
|| ch
== EOF
)
226 pos
= (1 + i
/ TABSIZE
) * TABSIZE
;
228 n
= realloc(text
, (unsigned)(pos
+ 10));
251 if (ch
== FF
|| ch
== VTAB
) {
257 n
= realloc(text
, (unsigned)(i
+ 10));
292 newline
= (COLUMN
*) realloc(line
,
293 (unsigned) (col
+ 10) * sizeof(COLUMN
));
300 cend
= line
+ (maxcol
- 1);
302 cp
->width
= INITWIDTH
;
304 sp
= calloc(INITWIDTH
, (unsigned) sizeof(char));
312 newcount
= cp
->count
+ 1;
313 if (newcount
> cp
->width
) {
314 cp
->width
= newcount
;
315 sp
= realloc(cp
->str
, (unsigned) newcount
* sizeof(char));
320 cp
->count
= newcount
;
321 cp
->str
[newcount
- 1] = ch
;
337 while (i
> 0 && text
[i
- 1] == BLANK
)
340 for (i
= 0; i
< length
; i
++)
345 for (i
= 0; i
< length
; i
++)
349 while (anchor
<= highcol
) {
350 height
= line
[anchor
].count
;
356 putchar(*(line
[anchor
].str
));
357 line
[anchor
].count
= 0;
361 while (i
< highcol
&& line
[i
+ 1].count
> 1)
363 for (j
= anchor
; j
<= i
; j
++) {
364 height
= line
[j
].count
- 1;
365 putchar(line
[j
].str
[height
]);
366 line
[j
].count
= height
;
368 for (j
= anchor
; j
<= i
; j
++)
380 errx(1, "Storage limit exceeded.");