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