|
|
1.1 ! root 1: static char *sccsid = "@(#)soelim.c 4.1 (Berkeley) 10/1/80"; ! 2: #include <stdio.h> ! 3: /* ! 4: * soelim - a filter to process n/troff input eliminating .so's ! 5: * ! 6: * Author: Bill Joy UCB July 8, 1977 ! 7: * ! 8: * This program eliminates .so's from a n/troff input stream. ! 9: * It can be used to prepare safe input for submission to the ! 10: * phototypesetter since the software supporting the operator ! 11: * doesn't let him do chdir. ! 12: * ! 13: * This is a kludge and the operator should be given the ! 14: * ability to do chdir. ! 15: * ! 16: * This program is more generally useful, it turns out, because ! 17: * the program tbl doesn't understand ".so" directives. ! 18: */ ! 19: ! 20: main(argc, argv) ! 21: int argc; ! 22: char *argv[]; ! 23: { ! 24: ! 25: argc--; ! 26: argv++; ! 27: if (argc == 0) { ! 28: fprintf(stderr, "Usage: %s file [ file ... ]\n", argv[-1]); ! 29: exit(1); ! 30: } ! 31: do { ! 32: process(argv[0]); ! 33: argv++; ! 34: argc--; ! 35: } while (argc > 0); ! 36: exit(0); ! 37: } ! 38: ! 39: process(file) ! 40: char *file; ! 41: { ! 42: register char *cp; ! 43: register int c; ! 44: char fname[BUFSIZ]; ! 45: FILE *soee; ! 46: ! 47: soee = fopen(file, "r"); ! 48: if (soee == NULL) { ! 49: perror(file); ! 50: return; ! 51: } ! 52: for (;;) { ! 53: c = getc(soee); ! 54: if (c < 0) ! 55: break; ! 56: if (c != '.') ! 57: goto simple; ! 58: c = getc(soee); ! 59: if (c != 's') { ! 60: putchar('.'); ! 61: goto simple; ! 62: } ! 63: c = getc(soee); ! 64: if (c != 'o') { ! 65: printf(".s"); ! 66: goto simple; ! 67: } ! 68: do ! 69: c = getc(soee); ! 70: while (c == ' ' || c == '\t'); ! 71: cp = fname; ! 72: for (;;) { ! 73: switch (c) { ! 74: ! 75: case ' ': ! 76: case '\t': ! 77: case '\n': ! 78: case EOF: ! 79: goto donename; ! 80: ! 81: default: ! 82: *cp++ = c; ! 83: c = getc(soee); ! 84: continue; ! 85: } ! 86: } ! 87: donename: ! 88: if (cp == fname) { ! 89: printf(".so"); ! 90: goto simple; ! 91: } ! 92: *cp++ = 0; ! 93: process(fname); ! 94: continue; ! 95: simple: ! 96: if (c == EOF) ! 97: break; ! 98: putchar(c); ! 99: } ! 100: fclose(soee); ! 101: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.