Annotation of 41BSD/cmd/pascal/pix.c, revision 1.1.1.1

1.1       root        1: #
                      2: /*
                      3:  * pix - pi then px
                      4:  *
                      5:  * Bill Joy UCB August 26, 1977
                      6:  */
                      7: 
                      8: #define        ERRS    1
                      9: 
                     10: char   *name;
                     11: 
                     12: int    onintr();
                     13: 
                     14: #define        ETXTBSY 26
                     15: 
                     16: main(argc, argv)
                     17:        int argc;
                     18:        char *argv[];
                     19: {
                     20:        register char **av;
                     21:        register int ac;
                     22:        int i, io, pid, status;
                     23:        extern errno;
                     24: 
                     25:        do
                     26:                io = open("/dev/null", 0);
                     27:        while (io >= 0 && io < 3);
                     28:        for (io = 3; io < 15; io++)
                     29:                close(io);
                     30:        if ((signal(2, 1) & 01) == 0)
                     31:                signal(2, onintr);
                     32:        for (ac = 1; ac < argc; ac++)
                     33:                if (dotted(argv[ac], 'p')) {
                     34:                        ac++;
                     35:                        break;
                     36:                }
                     37:        name = "-o/tmp/pixaXXXXX" + 2;
                     38:        mktemp(name);
                     39:        for (;;) {
                     40:                io = creat(name, 0400);
                     41:                if (io > 0)
                     42:                        break;
                     43:                if (name[8] == 'z') {
                     44:                        perror(name);
                     45:                        exit(1);
                     46:                }
                     47:                name[8]++;
                     48:        }
                     49:        pid = fork();
                     50:        if (pid == -1) {
                     51:                write(2, "No more processes\n", 18);
                     52:                onintr();
                     53:        }
                     54:        if (pid == 0) {
                     55:                if (io != 3) {
                     56:                        write(2, "Impossible error in pix\n", 24);
                     57:                        onintr();
                     58:                }
                     59:                argv[ac] = 0;
                     60:                argv[0] = name - 2;
                     61: #ifdef CORY
                     62:                /* Temporary to allow accounting to distinguish pix's and pi's */
                     63:                do
                     64:                        execv("/usr/bin/pix-pi", argv);
                     65:                while (errno == ETXTBSY);
                     66: #endif
                     67:                do
                     68:                        execv("/usr/ucb/pi", argv);
                     69:                while (errno == ETXTBSY);
                     70:                do
                     71:                        execv("/usr/bin/pi", argv);
                     72:                while (errno == ETXTBSY);
                     73:                write(2, "Can't find pi\n", 14);
                     74:                onintr();
                     75:        }
                     76:        close(io);
                     77:        do
                     78:                i = wait(&status);
                     79:        while (i != pid && i != -1);
                     80:        if (i == -1 || (status & 0377))
                     81:                onintr();
                     82:        if (status != 0) {
                     83:                if ((status >> 8) == ERRS)
                     84:                        write(2, "Execution suppressed due to compilation errors\n", 47);
                     85:                onintr();
                     86:        }
                     87:        ac--;
                     88:        argv[ac] = name - 2;
                     89:        argv[argc] = 0;
                     90: #ifdef CORY
                     91:        /* Temporary to allow accounting to distinguish pix's and px's */
                     92:        do
                     93:                execv("/usr/bin/pix-px", &argv[ac]);
                     94:        while (errno == ETXTBSY);
                     95: #endif
                     96:        do
                     97:                execv("/usr/ucb/px", &argv[ac]);
                     98:        while (errno == ETXTBSY);
                     99:        do
                    100:                execv("/usr/bin/px", &argv[ac]);
                    101:        while (errno == ETXTBSY);
                    102:        write(2, "Can't find px\n", 14);
                    103:        onintr();
                    104: }
                    105: 
                    106: dotted(cp, ch)
                    107:        char *cp, ch;
                    108: {
                    109:        register int i;
                    110: 
                    111:        i = strlen(cp);
                    112:        return (i > 1 && cp[i - 2] == '.' && cp[i - 1] == ch);
                    113: }
                    114: 
                    115: onintr()
                    116: {
                    117: 
                    118:        signal(2, 1);
                    119:        unlink(name);
                    120:        exit(1);
                    121: }

unix.superglobalmegacorp.com

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