blob: e2484959e9f564322ab9792f8854282177014af7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
/*
* $Header: /root/strongswan/doc/utils/rfc_pg.c,v 1.1 2004/03/15 20:35:24 as Exp $
*
* from 2-nroff.template file.
*
* Remove N lines following any line that contains a form feed (^L).
* (Why can't this be done with awk or sed?)
*
* OPTION:
* -n# Number of lines to delete following each ^L (0 default).
* $Log: rfc_pg.c,v $
* Revision 1.1 2004/03/15 20:35:24 as
* added files from freeswan-2.04-x509-1.5.3
*
* Revision 1.1 2002/07/23 18:42:43 mcr
* required utility from IETF to help with formatting of drafts.
*
*/
#include <stdio.h>
#define FORM_FEED '\f'
#define OPTION "n:N:" /* for getopt() */
extern char *optarg;
extern int optind;
main(argc, argv)
int argc;
char *argv[];
{
int c, /* next input char */
nlines = 0; /* lines to delete after ^L */
void print_and_delete(); /* print line starting with ^L,
then delete N lines */
/*********************** Process option (-nlines) ***********************/
while ((c = getopt(argc, argv, OPTION)) != EOF)
switch(c)
{
case 'n' :
case 'N' : nlines = atoi(optarg);
break;
}
/************************* READ AND PROCESS CHARS **********************/
while ((c = getchar()) != EOF)
if (c == FORM_FEED)
print_and_delete(nlines); /* remove N lines after this one */
else
putchar(c); /* we write the form feed */
exit(0);
}
/*
* Print rest of line, then delete next N lines.
*/
void print_and_delete(n)
int n; /* nbr of lines to delete */
{
int c, /* next input char */
cntr = 0; /* count of deleted lines */
while ((c = getchar()) != '\n') /* finish current line */
putchar(c);
putchar('\n'); /* write the last CR */
putchar(FORM_FEED);
for ( ; cntr < n; cntr++)
while ((c = getchar()) != '\n')
if (c == EOF)
exit(0); /* exit on EOF */
putchar(c); /* write that last CR */
}
|