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: static char sccsid[] = "@(#)getNAME.c	5.2 (Berkeley) 10/21/85";
   9: #endif not lint
  10: 
  11: /*
  12:  * Get name sections from manual pages.
  13:  *	-t	for building toc
  14:  *	-i	for building intro entries
  15:  *	other	apropos database
  16:  */
  17: #include <strings.h>
  18: #include <stdio.h>
  19: 
  20: int tocrc;
  21: int intro;
  22: 
  23: main(argc, argv)
  24:     int argc;
  25:     char *argv[];
  26: {
  27: 
  28:     argc--, argv++;
  29:     if (!strcmp(argv[0], "-t"))
  30:         argc--, argv++, tocrc++;
  31:     if (!strcmp(argv[0], "-i"))
  32:         argc--, argv++, intro++;
  33:     while (argc > 0)
  34:         getfrom(*argv++), argc--;
  35:     exit(0);
  36: }
  37: 
  38: getfrom(name)
  39:     char *name;
  40: {
  41:     char headbuf[BUFSIZ];
  42:     char linbuf[BUFSIZ];
  43:     register char *cp;
  44:     int i = 0;
  45: 
  46:     if (freopen(name, "r", stdin) == 0) {
  47:         perror(name);
  48:         return;
  49:     }
  50:     for (;;) {
  51:         if (fgets(headbuf, sizeof headbuf, stdin) == NULL)
  52:             return;
  53:         if (headbuf[0] != '.')
  54:             continue;
  55:         if (headbuf[1] == 'T' && headbuf[2] == 'H')
  56:             break;
  57:         if (headbuf[1] == 't' && headbuf[2] == 'h')
  58:             break;
  59:     }
  60:     for (;;) {
  61:         if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
  62:             return;
  63:         if (linbuf[0] != '.')
  64:             continue;
  65:         if (linbuf[1] == 'S' && linbuf[2] == 'H')
  66:             break;
  67:         if (linbuf[1] == 's' && linbuf[2] == 'h')
  68:             break;
  69:     }
  70:     trimln(headbuf);
  71:     if (tocrc)
  72:         doname(name);
  73:     if (!intro)
  74:         printf("%s\t", headbuf);
  75:     for (;;) {
  76:         if (fgets(linbuf, sizeof linbuf, stdin) == NULL)
  77:             break;
  78:         if (linbuf[0] == '.') {
  79:             if (linbuf[1] == 'S' && linbuf[2] == 'H')
  80:                 break;
  81:             if (linbuf[1] == 's' && linbuf[2] == 'h')
  82:                 break;
  83:         }
  84:         trimln(linbuf);
  85:         if (intro) {
  86:             split(linbuf, name);
  87:             continue;
  88:         }
  89:         if (i != 0)
  90:             printf(" ");
  91:         i++;
  92:         printf("%s", linbuf);
  93:     }
  94:     printf("\n");
  95: }
  96: 
  97: trimln(cp)
  98:     register char *cp;
  99: {
 100: 
 101:     while (*cp)
 102:         cp++;
 103:     if (*--cp == '\n')
 104:         *cp = 0;
 105: }
 106: 
 107: doname(name)
 108:     char *name;
 109: {
 110:     register char *dp = name, *ep;
 111: 
 112: again:
 113:     while (*dp && *dp != '.')
 114:         putchar(*dp++);
 115:     if (*dp)
 116:         for (ep = dp+1; *ep; ep++)
 117:             if (*ep == '.') {
 118:                 putchar(*dp++);
 119:                 goto again;
 120:             }
 121:     putchar('(');
 122:     if (*dp)
 123:         dp++;
 124:     while (*dp)
 125:         putchar (*dp++);
 126:     putchar(')');
 127:     putchar(' ');
 128: }
 129: 
 130: split(line, name)
 131:     char *line, *name;
 132: {
 133:     register char *cp, *dp;
 134:     char *sp, *sep;
 135: 
 136:     cp = index(line, '-');
 137:     if (cp == 0)
 138:         return;
 139:     sp = cp + 1;
 140:     for (--cp; *cp == ' ' || *cp == '\t' || *cp == '\\'; cp--)
 141:         ;
 142:     *++cp = '\0';
 143:     while (*sp && (*sp == ' ' || *sp == '\t'))
 144:         sp++;
 145:     for (sep = "", dp = line; dp && *dp; dp = cp, sep = "\n") {
 146:         cp = index(dp, ',');
 147:         if (cp) {
 148:             register char *tp;
 149: 
 150:             for (tp = cp - 1; *tp == ' ' || *tp == '\t'; tp--)
 151:                 ;
 152:             *++tp = '\0';
 153:             for (++cp; *cp == ' ' || *cp == '\t'; cp++)
 154:                 ;
 155:         }
 156:         printf("%s%s\t", sep, dp);
 157:         dorefname(name);
 158:         printf("\t%s", sp);
 159:     }
 160: }
 161: 
 162: dorefname(name)
 163:     char *name;
 164: {
 165:     register char *dp = name, *ep;
 166: 
 167: again:
 168:     while (*dp && *dp != '.')
 169:         putchar(*dp++);
 170:     if (*dp)
 171:         for (ep = dp+1; *ep; ep++)
 172:             if (*ep == '.') {
 173:                 putchar(*dp++);
 174:                 goto again;
 175:             }
 176:     putchar('.');
 177:     if (*dp)
 178:         dp++;
 179:     while (*dp)
 180:         putchar (*dp++);
 181: }

Defined functions

doname defined in line 107; used 1 times
  • in line 72
dorefname defined in line 162; used 1 times
getfrom defined in line 38; used 1 times
  • in line 34
main defined in line 23; never used
split defined in line 130; used 1 times
  • in line 86
trimln defined in line 97; used 2 times

Defined variables

intro defined in line 21; used 3 times
sccsid defined in line 8; never used
tocrc defined in line 20; used 2 times
Last modified: 1987-02-22
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2728
Valid CSS Valid XHTML 1.0 Strict