Annotation of 43BSD/usr.bin/refer/refer1.c, revision 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.