Annotation of 43BSDTahoe/ucb/pascal/utilities/pix.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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