|
|
1.1 root 1: /*
2: * Copyright (c) 1980 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that: (1) source distributions retain this entire copyright
7: * notice and comment, and (2) distributions including binaries display
8: * the following acknowledgement: ``This product includes software
9: * developed by the University of California, Berkeley and its contributors''
10: * in the documentation or other materials provided with the distribution
11: * and in all advertising materials mentioning features or use of this
12: * software. Neither the name of the University nor the names of its
13: * contributors may be used to endorse or promote products derived
14: * from this software without specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: char copyright[] =
22: "@(#) Copyright (c) 1980 The Regents of the University of California.\n\
23: All rights reserved.\n";
24: #endif /* not lint */
25:
26: #ifndef lint
27: static char sccsid[] = "@(#)soelim.c 5.3 (Berkeley) 6/1/90";
28: #endif /* not lint */
29:
30: #include <stdio.h>
31: /*
32: * soelim - a filter to process n/troff input eliminating .so's
33: *
34: * Author: Bill Joy UCB July 8, 1977
35: *
36: * This program eliminates .so's from a n/troff input stream.
37: * It can be used to prepare safe input for submission to the
38: * phototypesetter since the software supporting the operator
39: * doesn't let him do chdir.
40: *
41: * This is a kludge and the operator should be given the
42: * ability to do chdir.
43: *
44: * This program is more generally useful, it turns out, because
45: * the program tbl doesn't understand ".so" directives.
46: */
47: #define STDIN_NAME "-"
48:
49: main(argc, argv)
50: int argc;
51: char *argv[];
52: {
53:
54: argc--;
55: argv++;
56: if (argc == 0) {
57: (void)process(STDIN_NAME);
58: exit(0);
59: }
60: do {
61: (void)process(argv[0]);
62: argv++;
63: argc--;
64: } while (argc > 0);
65: exit(0);
66: }
67:
68: int process(file)
69: char *file;
70: {
71: register char *cp;
72: register int c;
73: char fname[BUFSIZ];
74: FILE *soee;
75: int isfile;
76:
77: if (!strcmp(file, STDIN_NAME)) {
78: soee = stdin;
79: } else {
80: soee = fopen(file, "r");
81: if (soee == NULL) {
82: perror(file);
83: return(-1);
84: }
85: }
86: for (;;) {
87: c = getc(soee);
88: if (c == EOF)
89: break;
90: if (c != '.')
91: goto simple;
92: c = getc(soee);
93: if (c != 's') {
94: putchar('.');
95: goto simple;
96: }
97: c = getc(soee);
98: if (c != 'o') {
99: printf(".s");
100: goto simple;
101: }
102: do
103: c = getc(soee);
104: while (c == ' ' || c == '\t');
105: cp = fname;
106: isfile = 0;
107: for (;;) {
108: switch (c) {
109:
110: case ' ':
111: case '\t':
112: case '\n':
113: case EOF:
114: goto donename;
115:
116: default:
117: *cp++ = c;
118: c = getc(soee);
119: isfile++;
120: continue;
121: }
122: }
123: donename:
124: if (cp == fname) {
125: printf(".so");
126: goto simple;
127: }
128: *cp = 0;
129: if (process(fname) < 0)
130: if (isfile)
131: printf(".so %s\n", fname);
132: continue;
133: simple:
134: if (c == EOF)
135: break;
136: putchar(c);
137: if (c != '\n') {
138: c = getc(soee);
139: goto simple;
140: }
141: }
142: if (soee != stdin) {
143: fclose(soee);
144: }
145: return(0);
146: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.