# 2.11BSD#431 - /usr/src/ucb/soelim.c

##### Functions

    main              X
    process           X

##### Variables

    copyright         X

##### Macros

    STDIN_NAME        X

       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

- in line 44-48(2), 116

#### 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

- in line 44, 64

Last modified: 1987-02-17 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 515 |