|
|
1.1 root 1: #include <pagsiz.h>
2: #define BUFSIZ BSIZE
3: /*
4: * pxheader - program to sit in front of interpreter code to make shell mods
5: * unnecessary to make Pascal obj's look like real programs.
6: *
7: * This program lives in /usr/lib/px_header
8: * Bill Joy UCB February 6, 1978
9: */
10:
11: char USRUCBPX[] = "/usr/ucb/px";
12:
13: extern errno;
14:
15: #define ETXTBSY 26
16:
17:
18: struct header
19: {
20: int magic;
21: unsigned txt_size;
22: unsigned data_size;
23: unsigned bss_size;
24: unsigned syms_size;
25: unsigned entry_point;
26: unsigned tr_size;
27: unsigned dr_size;
28: };
29:
30: #define HEADER_BYTES 1024
31: #define ADDR_LC HEADER_BYTES - sizeof (struct header) - sizeof (int)
32:
33: main(argc, argv)
34: register int argc;
35: register char *argv[];
36: {
37: register int i, j;
38: register unsigned short *ip;
39: char *largv[512];
40: int pv[2];
41:
42: if (argc > 510) {
43: error("Too many arguments.\n");
44: exit(1);
45: }
46: largv[0] = argv[0];
47: largv[1] = "-";
48: for (i = 1; i < argc; i++)
49: largv[i + 1] = argv[i];
50: largv[argc + 1] = 0;
51: pipe(pv);
52: i = fork();
53: if (i == -1)
54: error("Try again.\n");
55: if (i == 0) {
56: close(pv[0]);
57: write(pv[1], ADDR_LC, sizeof ( int ));
58: ip = (unsigned short *) (ADDR_LC);
59: i = *(int *)ip; ip += 2;
60: while (i != 0) {
61: j = (i > 0 && i < BUFSIZ) ? i : BUFSIZ;
62: write(pv[1], ip, j);
63: ip += BUFSIZ / sizeof ( unsigned short );
64: i -= j;
65: }
66: exit(1);
67: }
68: close(pv[1]);
69: if (pv[0] != 3) {
70: close(3);
71: dup(pv[0]);
72: close(pv[0]);
73: }
74: for (;;) {
75: execv(USRUCBPX, largv);
76: if (errno != ETXTBSY)
77: break;
78: sleep(2);
79: }
80: error("Px not found.\n");
81: }
82:
83: error(cp)
84: register char *cp;
85: {
86: register int i;
87: register char *dp;
88:
89: dp = cp;
90: i = 0;
91: while (*dp++)
92: i++;
93: write(2, cp, i);
94: exit(1);
95: }
96:
97: exit(i)
98: {
99: _exit(i);
100: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.