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: }
Defined functions
main
defined in line
34;
never used
Defined variables
name
defined in line
28; used 9 times
Defined macros
ERRS
defined in line
26; used 1 times