projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add the -t flag to use temporary files elsewhere.
[unix-history]
/
usr
/
src
/
usr.bin
/
pascal
/
pc
/
pc.c
diff --git
a/usr/src/usr.bin/pascal/pc/pc.c
b/usr/src/usr.bin/pascal/pc/pc.c
index
eb37ca3
..
f39a7e2
100644
(file)
--- a/
usr/src/usr.bin/pascal/pc/pc.c
+++ b/
usr/src/usr.bin/pascal/pc/pc.c
@@
-1,8
+1,9
@@
-static char sccsid[] = "@(#)pc.c 3.
14
%G%";
+static char sccsid[] = "@(#)pc.c 3.
22
%G%";
#include <stdio.h>
#include <signal.h>
#include <wait.h>
#include <stdio.h>
#include <signal.h>
#include <wait.h>
+#include <sys/param.h>
/*
* Pc - front end for Pascal compiler.
/*
* Pc - front end for Pascal compiler.
@@
-20,12
+21,14
@@
char *mcrt0 = "/lib/mcrt0.o";
char *gcrt0 = "/usr/lib/gcrt0.o";
char *mktemp();
char *gcrt0 = "/usr/lib/gcrt0.o";
char *mktemp();
+char *tmpdir = "/tmp";
+char tmp0[MAXPATHLEN], tmp1[MAXPATHLEN];
char *tname[2];
char *tfile[2];
char *setsuf(), *savestr();
char *tname[2];
char *tfile[2];
char *setsuf(), *savestr();
-int Jflag, Sflag, Oflag, Tlflag, cflag, gflag, pflag;
+int Jflag, Sflag, Oflag, Tlflag, cflag, gflag, pflag
, wflag, tflag
;
int debug;
#define NARGS 512
int debug;
#define NARGS 512
@@
-40,8
+43,46
@@
int pc3argx = 1;
#define ldargs pc0args
/* char *pc3args[NARGS] = { "pc3", 0 }; */
/* char *ldargs[NARGS] = { "ld", "-X", "/lib/crt0.o", 0, }; */
#define ldargs pc0args
/* char *pc3args[NARGS] = { "pc3", 0 }; */
/* char *ldargs[NARGS] = { "ld", "-X", "/lib/crt0.o", 0, }; */
+
+ /* as -J -t tmpdir -o objfile srcfile \0 */
int asargx;
int asargx;
-char *asargs[6] = { "as", 0, };
+char *asargs[8] = { "as", 0, };
+
+char *mesg[] = {
+ 0,
+ "Hangup",
+ "Interrupt",
+ "Quit",
+ "Illegal instruction",
+ "Trace/BPT trap",
+ "IOT trap",
+ "EMT trap",
+ "Floating exception",
+ "Killed",
+ "Bus error",
+ "Segmentation fault",
+ "Bad system call",
+ "Broken pipe",
+ "Alarm clock",
+ "Terminated",
+ "Signal 16",
+ "Stopped (signal)",
+ "Stopped",
+ "Continued",
+ "Child exited",
+ "Stopped (tty input)",
+ "Stopped (tty output)",
+ "Tty input interrupt",
+ "Cputime limit exceeded",
+ "Filesize limit exceeded",
+ "Signal 26",
+ "Signal 27",
+ "Signal 28",
+ "Signal 29",
+ "Signal 30",
+ "Signal 31",
+ "Signal 32"
+};
/*
* If the number of .p arguments (np) is 1, and the number of .o arguments
/*
* If the number of .p arguments (np) is 1, and the number of .o arguments
@@
-108,6
+149,15
@@
main(argc, argv)
exit(1);
}
continue;
exit(1);
}
continue;
+ case 't':
+ i++;
+ if (i == argc) {
+ fprintf(stderr, "pc: -T but no directory\n");
+ exit(1);
+ }
+ tmpdir = argv[i];
+ tflag = 1;
+ continue;
case 'O':
Oflag = 1;
continue;
case 'O':
Oflag = 1;
continue;
@@
-121,32
+171,32
@@
main(argc, argv)
switch (argp[2]) {
case '0':
switch (argp[2]) {
case '0':
- pc0 = "/usr/src/
cmd
/pc0/a.out";
+ pc0 = "/usr/src/
ucb/pascal
/pc0/a.out";
if (argp[3] != '\0') {
pc0 = &argp[3];
}
continue;
case '1':
if (argp[3] != '\0') {
pc0 = &argp[3];
}
continue;
case '1':
- pc1 = "/usr/src/
cmd/pcc/pc1
";
+ pc1 = "/usr/src/
lib/pcc/fort
";
if (argp[3] != '\0') {
pc1 = &argp[3];
}
continue;
case '2':
if (argp[3] != '\0') {
pc1 = &argp[3];
}
continue;
case '2':
- pc2 = "/usr/src/
cmd/pascal
/pc2";
+ pc2 = "/usr/src/
ucb/pascal/utilities
/pc2";
if (argp[3] != '\0') {
pc2 = &argp[3];
}
continue;
case '3':
if (argp[3] != '\0') {
pc2 = &argp[3];
}
continue;
case '3':
- pc3 = "/usr/src/
cmd/pascal
/pc3";
+ pc3 = "/usr/src/
ucb/pascal/utilities
/pc3";
if (argp[3] != '\0') {
pc3 = &argp[3];
}
continue;
case 'l':
Tlflag = 1;
if (argp[3] != '\0') {
pc3 = &argp[3];
}
continue;
case 'l':
Tlflag = 1;
- lpc = "/usr/src/lib/libpc/libpc";
+ lpc = "/usr/src/
usr.
lib/libpc/libpc";
if (argp[3] != '\0') {
lpc = &argp[3];
}
if (argp[3] != '\0') {
lpc = &argp[3];
}
@@
-161,17
+211,18
@@
main(argc, argv)
continue;
/* fall into ... */
case 'b':
continue;
/* fall into ... */
case 'b':
- case 'g':
case 's':
case 's':
- case 'w':
case 'z':
case 'C':
pc0args[pc0argx++] = argp;
case 'z':
case 'C':
pc0args[pc0argx++] = argp;
- if (argp[1] == 'g')
- gflag = 1;
continue;
continue;
- case 't':
- fprintf(stderr, "pc: -t is default; -C for checking\n");
+ case 'w':
+ wflag = 1;
+ pc0args[pc0argx++] = argp;
+ continue;
+ case 'g':
+ gflag = 1;
+ pc0args[pc0argx++] = argp;
continue;
case 'p':
if (argp[2] == 'g')
continue;
case 'p':
if (argp[2] == 'g')
@@
-188,8
+239,10
@@
main(argc, argv)
fprintf(stderr, "pc: warning: -g overrides -O\n");
Oflag = 0;
}
fprintf(stderr, "pc: warning: -g overrides -O\n");
Oflag = 0;
}
- tname[0] = mktemp("/tmp/p0XXXXXX");
- tname[1] = mktemp("/tmp/p1XXXXXX");
+ sprintf(tmp0, "%s/%s", tmpdir, "p0XXXXXX");
+ tname[0] = mktemp(tmp0);
+ sprintf(tmp1, "%s/%s", tmpdir, "p1XXXXXX");
+ tname[1] = mktemp(tmp1);
savargx = pc0argx;
for (i = 0; i < argc; i++) {
argp = argv[i];
savargx = pc0argx;
for (i = 0; i < argc; i++) {
argp = argv[i];
@@
-199,6
+252,12
@@
main(argc, argv)
asargx = 1;
if (Jflag)
asargs[asargx++] = "-J";
asargx = 1;
if (Jflag)
asargs[asargx++] = "-J";
+# ifdef vax
+ if (tflag) {
+ asargs[asargx++] = "-t";
+ asargs[asargx++] = tmpdir;
+ }
+# endif vax
asargs[asargx++] = argp;
asargs[asargx++] = "-o";
tfile[1] = setsuf(argp, 'o');
asargs[asargx++] = argp;
asargs[asargx++] = "-o";
tfile[1] = setsuf(argp, 'o');
@@
-246,6
+305,12
@@
main(argc, argv)
asargx = 1;
if (Jflag)
asargs[asargx++] = "-J";
asargx = 1;
if (Jflag)
asargs[asargx++] = "-J";
+# ifdef vax
+ if (tflag) {
+ asargs[asargx++] = "-t";
+ asargs[asargx++] = tmpdir;
+ }
+# endif vax
asargs[asargx++] = tfile[0];
asargs[asargx++] = "-o";
tfile[1] = setsuf(argp, 'o');
asargs[asargx++] = tfile[0];
asargs[asargx++] = "-o";
tfile[1] = setsuf(argp, 'o');
@@
-260,6
+325,9
@@
main(argc, argv)
done();
/* char *pc3args[NARGS] = { "pc3", 0 }; */
pc3args[0] = "pc3";
done();
/* char *pc3args[NARGS] = { "pc3", 0 }; */
pc3args[0] = "pc3";
+ if (wflag)
+ pc3args[pc3argx++] = "-w";
+ pc3args[pc3argx++] = "/usr/lib/pcexterns.o";
for (i = 0; i < argc; i++) {
argp = argv[i];
if (!strcmp(argp, "-o"))
for (i = 0; i < argc; i++) {
argp = argv[i];
if (!strcmp(argp, "-o"))
@@
-281,8
+349,9
@@
main(argc, argv)
}
}
pc3args[pc3argx] = 0;
}
}
pc3args[pc3argx] = 0;
- if (dosys(pc3, pc3args, 0, 0))
+ if (dosys(pc3, pc3args, 0, 0)
> 1
)
done();
done();
+ errs = 0;
/* char *ldargs[NARGS] = { "ld", "-X", "/lib/crt0.o", 0, }; */
ldargs[0] = "ld";
ldargs[1] = "-X";
/* char *ldargs[NARGS] = { "ld", "-X", "/lib/crt0.o", 0, }; */
ldargs[0] = "ld";
ldargs[1] = "-X";
@@
-329,6
+398,9
@@
duplicate:
if (argp[2])
ldargs[ldargx++] = argp;
continue;
if (argp[2])
ldargs[ldargx++] = argp;
continue;
+ case 't':
+ i++;
+ continue;
case 'c':
case 'g':
case 'w':
case 'c':
case 'g':
case 'w':
@@
-409,8
+481,12
@@
dosys(cmd, argv, in, out)
while (wait(&status) != pid)
;
if (WIFSIGNALED(status)) {
while (wait(&status) != pid)
;
if (WIFSIGNALED(status)) {
- if (status.w_termsig != SIGINT)
- fprintf(stderr, "Fatal error in %s\n", cmd);
+ if (status.w_termsig != SIGINT) {
+ fprintf(stderr, "%s: %s", cmd, mesg[status.w_termsig]);
+ if (status.w_coredump)
+ fprintf(stderr, " (core dumped)");
+ fprintf(stderr, "\n");
+ }
errs = 100;
done();
/*NOTREACHED*/
errs = 100;
done();
/*NOTREACHED*/