|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.