Remove advertising header from man pages.
[dragonfly.git] / usr.bin / soelim / soelim.c
blobb4c1095c718d2c062ff9e77dd8bf71d91d812fe9
1 /*
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
7 * are met:
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 * 4. Neither the name of the University nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
29 * @(#) Copyright (c) 1980, 1993 The Regents of the University of California. All rights reserved.
30 * @(#)soelim.c 8.1 (Berkeley) 6/6/93
31 * $FreeBSD: src/usr.bin/soelim/soelim.c,v 1.3.2.2 2001/07/30 10:16:46 dd Exp $
32 * $DragonFly: src/usr.bin/soelim/soelim.c,v 1.5 2004/09/30 10:08:46 joerg Exp $
35 #include <err.h>
36 #include <stdio.h>
37 #include <stdlib.h>
38 #include <string.h>
40 * soelim - a filter to process n/troff input eliminating .so's
42 * Author: Bill Joy UCB July 8, 1977
44 * This program eliminates .so's from a n/troff input stream.
45 * It can be used to prepare safe input for submission to the
46 * phototypesetter since the software supporting the operator
47 * doesn't let him do chdir.
49 * This is a kludge and the operator should be given the
50 * ability to do chdir.
52 * This program is more generally useful, it turns out, because
53 * the program tbl doesn't understand ".so" directives.
56 #define STDIN_NAME "-"
58 static int process(const char *);
60 int
61 main(int argc, const char **argv)
63 int errs = 0;
65 if (argc == 1) {
66 argv[0] = STDIN_NAME;
67 } else {
68 argv++;
69 argc--;
72 while (--argc >= 0) {
73 errs += process(argv[0]);
74 argv++;
76 exit(errs != 0);
79 static int
80 process(const char *file)
82 char *cp;
83 int c;
84 char fname[BUFSIZ];
85 FILE *soee;
86 int isfile;
88 if (!strcmp(file, STDIN_NAME)) {
89 soee = stdin;
90 } else {
91 soee = fopen(file, "r");
92 if (soee == NULL) {
93 warn("%s", file);
94 return(-1);
97 for (;;) {
98 c = getc(soee);
99 if (c == EOF)
100 break;
101 if (c != '.')
102 goto simple;
103 c = getc(soee);
104 if (c != 's') {
105 putchar('.');
106 goto simple;
108 c = getc(soee);
109 if (c != 'o') {
110 printf(".s");
111 goto simple;
114 c = getc(soee);
115 while (c == ' ' || c == '\t');
116 cp = fname;
117 isfile = 0;
118 for (;;) {
119 switch (c) {
121 case ' ':
122 case '\t':
123 case '\n':
124 case EOF:
125 goto donename;
127 default:
128 *cp++ = c;
129 c = getc(soee);
130 isfile++;
131 continue;
134 donename:
135 if (cp == fname) {
136 printf(".so");
137 goto simple;
139 *cp = 0;
140 if (process(fname) < 0)
141 if (isfile)
142 printf(".so %s\n", fname);
143 continue;
144 simple:
145 if (c == EOF)
146 break;
147 putchar(c);
148 if (c != '\n') {
149 c = getc(soee);
150 goto simple;
153 if (soee != stdin) {
154 fclose(soee);
156 return(0);