1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: char copyright[] =
   9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
  10:  All rights reserved.\n";
  11: #endif not lint
  12: 
  13: #ifndef lint
  14: static char sccsid[] = "@(#)soelim.c	5.1 (Berkeley) 5/31/85";
  15: #endif not lint
  16: 
  17: #include <stdio.h>
  18: /*
  19:  * soelim - a filter to process n/troff input eliminating .so's
  20:  *
  21:  * Author: Bill Joy UCB July 8, 1977
  22:  *
  23:  * This program eliminates .so's from a n/troff input stream.
  24:  * It can be used to prepare safe input for submission to the
  25:  * phototypesetter since the software supporting the operator
  26:  * doesn't let him do chdir.
  27:  *
  28:  * This is a kludge and the operator should be given the
  29:  * ability to do chdir.
  30:  *
  31:  * This program is more generally useful, it turns out, because
  32:  * the program tbl doesn't understand ".so" directives.
  33:  */
  34: #define STDIN_NAME  "-"
  35: 
  36: main(argc, argv)
  37:     int argc;
  38:     char *argv[];
  39: {
  40: 
  41:     argc--;
  42:     argv++;
  43:     if (argc == 0) {
  44:         (void)process(STDIN_NAME);
  45:         exit(0);
  46:     }
  47:     do {
  48:         (void)process(argv[0]);
  49:         argv++;
  50:         argc--;
  51:     } while (argc > 0);
  52:     exit(0);
  53: }
  54: 
  55: int process(file)
  56:     char *file;
  57: {
  58:     register char *cp;
  59:     register int c;
  60:     char fname[BUFSIZ];
  61:     FILE *soee;
  62:     int isfile;
  63: 
  64:     if (!strcmp(file, STDIN_NAME)) {
  65:         soee = stdin;
  66:     } else {
  67:         soee = fopen(file, "r");
  68:         if (soee == NULL) {
  69:             perror(file);
  70:             return(-1);
  71:         }
  72:     }
  73:     for (;;) {
  74:         c = getc(soee);
  75:         if (c == EOF)
  76:             break;
  77:         if (c != '.')
  78:             goto simple;
  79:         c = getc(soee);
  80:         if (c != 's') {
  81:             putchar('.');
  82:             goto simple;
  83:         }
  84:         c = getc(soee);
  85:         if (c != 'o') {
  86:             printf(".s");
  87:             goto simple;
  88:         }
  89:         do
  90:             c = getc(soee);
  91:         while (c == ' ' || c == '\t');
  92:         cp = fname;
  93:         isfile = 0;
  94:         for (;;) {
  95:             switch (c) {
  96: 
  97:             case ' ':
  98:             case '\t':
  99:             case '\n':
 100:             case EOF:
 101:                 goto donename;
 102: 
 103:             default:
 104:                 *cp++ = c;
 105:                 c = getc(soee);
 106:                 isfile++;
 107:                 continue;
 108:             }
 109:         }
 110: donename:
 111:         if (cp == fname) {
 112:             printf(".so");
 113:             goto simple;
 114:         }
 115:         *cp = 0;
 116:         if (process(fname) < 0)
 117:             if (isfile)
 118:                 printf(".so %s\n", fname);
 119:         continue;
 120: simple:
 121:         if (c == EOF)
 122:             break;
 123:         putchar(c);
 124:         if (c != '\n') {
 125:             c = getc(soee);
 126:             goto simple;
 127:         }
 128:     }
 129:     if (soee != stdin) {
 130:         fclose(soee);
 131:     }
 132:     return(0);
 133: }

Defined functions

main defined in line 36; never used
process defined in line 55; used 3 times

Defined variables

copyright defined in line 8; never used
sccsid defined in line 14; never used

Defined macros

STDIN_NAME defined in line 34; used 2 times
Last modified: 1987-02-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1697
Valid CSS Valid XHTML 1.0 Strict