Annotation of 43BSD/usr.bin/refer/refer1.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char *sccsid = "@(#)refer1.c    4.3 (Berkeley) 4/23/86";
                      3: #endif
                      4: 
                      5: #include <signal.h>
                      6: #include "refer..c"
                      7: 
                      8: main(argc,argv)                /* process command-line arguments */
                      9: char *argv[];
                     10: {
                     11:        char line[BUFSIZ], *s;
                     12:        int nodeflt = 0;
                     13: 
                     14:        signals();
                     15:        while (argv[1][0] == '-') {
                     16:                switch(argv[1][1]) {
                     17:                case 'e':
                     18:                        endpush++; 
                     19:                        break;
                     20:                case 's':
                     21:                        sort++;
                     22:                        endpush = 1;
                     23:                        if (argv[1][2])
                     24:                                keystr = argv[1]+2;
                     25:                        break;
                     26:                case 'l': 
                     27:                        labels++;
                     28:                        s = argv[1]+2;
                     29:                        nmlen = atoi(s);
                     30:                        while (*s)
                     31:                                if (*s++ == ',')
                     32:                                        break;
                     33:                        dtlen = atoi(s);
                     34:                        break;
                     35:                case 'k':
                     36:                        keywant = (argv[1][2] ? argv[1][2] : 'L');
                     37:                        labels++;
                     38:                        break;
                     39:                case 'n':
                     40:                        nodeflt = 1;
                     41:                        break;
                     42:                case 'p':
                     43:                        argc--; 
                     44:                        argv++;
                     45:                        *search++ = argv[1];
                     46:                        if (search-rdata > NSERCH)
                     47:                                err("too many -p options (%d)", NSERCH);
                     48:                        break;
                     49:                case 'a':
                     50:                        authrev = atoi(argv[1]+2);
                     51:                        if (authrev<=0)
                     52:                                authrev = 1000;
                     53:                        break;
                     54:                case 'b':
                     55:                        bare = (argv[1][2] == '1') ? 1 : 2;
                     56:                        break;
                     57:                case 'c':
                     58:                        smallcaps = argv[1]+2;
                     59:                        break;
                     60:                case 'f':
                     61:                        refnum = atoi(argv[1]+2) - 1;
                     62:                        break;
                     63:                case 'B':
                     64:                        biblio++;
                     65:                        bare = 2;
                     66:                        if (argv[1][2])
                     67:                                convert = argv[1]+2;
                     68:                        break;
                     69:                case 'S':
                     70:                        science++;
                     71:                        labels = 1;
                     72:                        break;
                     73:                case 'P':
                     74:                        postpunct++;
                     75:                        break;
                     76:                }
                     77:                argc--; 
                     78:                argv++;
                     79:        }
                     80:        if (getenv("REFER") != NULL)
                     81:                *search++ = getenv("REFER");
                     82:        else if (nodeflt == 0)
                     83:                *search++ = "/usr/dict/papers/Ind";
                     84:        if (!labels) {
                     85:                sprintf(ofile, "/tmp/rj%db", getpid());
                     86:                ftemp = fopen(ofile, "w");
                     87:                if (ftemp == NULL) {
                     88:                        fprintf(stderr, "Can't open scratch file\n");
                     89:                        exit(1);
                     90:                }
                     91:        }
                     92:        if (endpush) {
                     93:                sprintf(tfile, "/tmp/rj%da", getpid());
                     94:                fo = fopen(tfile, "w");
                     95:                if (fo == NULL) {
                     96:                        fo = ftemp;
                     97:                        fprintf(stderr, "Can't open scratch file");
                     98:                }
                     99:                sep = 002; /* separate records without confusing sort..*/
                    100:        } else 
                    101:                fo = ftemp;
                    102:        do {
                    103:                if (argc > 1) {
                    104:                        fclose(in);
                    105:                        Iline = 0;
                    106:                        in = fopen(Ifile = argv[1], "r");
                    107:                        argc--; 
                    108:                        argv++;
                    109:                        if (in == NULL) {
                    110:                                err("Can't read %s", Ifile);
                    111:                                continue;
                    112:                        }
                    113:                }
                    114:                while (input(line)) {
                    115:                        Iline++;
                    116:                        if (biblio && *line == '\n')
                    117:                                doref(line);
                    118:                        else if (biblio && Iline == 1 && *line == '%')
                    119:                                doref(line);
                    120:                        else if (!prefix(".[", line))
                    121:                                output(line);
                    122:                        else
                    123:                                doref(line);
                    124:                }
                    125:        } while (argc > 1);
                    126: 
                    127:        if (endpush && fo != NULL)
                    128:                dumpold();
                    129:        output("");
                    130:        if (!labels)
                    131:                recopy(ofile);
                    132:        clfgrep();
                    133:        cleanup();
                    134:        exit(0);
                    135: }
                    136: 
                    137: extern int intr();
                    138: 
                    139: signals()
                    140: {
                    141:        if (signal(SIGINT, SIG_IGN) != SIG_IGN)
                    142:                signal(SIGINT, intr);
                    143:        signal(SIGHUP, intr);
                    144:        signal(SIGPIPE, intr);
                    145:        signal(SIGTERM, intr);
                    146: }
                    147: 
                    148: intr()
                    149: {
                    150:        signal(SIGINT, SIG_IGN);
                    151:        cleanup();
                    152:        exit(1);
                    153: }
                    154: 
                    155: cleanup()
                    156: {
                    157:        if (tfile[0])
                    158:                unlink(tfile);
                    159:        if (gfile[0])
                    160:                unlink(gfile);
                    161:        if (ofile[0])
                    162:                unlink(ofile);
                    163:        if (hidenam[0])
                    164:                unlink(hidenam);
                    165: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.