add the -t flag to use temporary files elsewhere.
[unix-history] / usr / src / usr.bin / pascal / pc / pc.c
index 42bc5dd..f39a7e2 100644 (file)
@@ -1,8 +1,9 @@
-static char sccsid[] = "@(#)pc.c 3.17 %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, wflag;
+int    Jflag, Sflag, Oflag, Tlflag, cflag, gflag, pflag, wflag, tflag;
 int    debug;
 
 #define        NARGS   512
 int    debug;
 
 #define        NARGS   512
@@ -40,8 +43,10 @@ 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,
 
 char *mesg[] = {
        0,
@@ -144,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;
@@ -157,7 +171,7 @@ main(argc, argv)
                        switch (argp[2]) {
 
                        case '0':
                        switch (argp[2]) {
 
                        case '0':
-                               pc0 = "/usr/src/ucb/pc0/a.out";
+                               pc0 = "/usr/src/ucb/pascal/pc0/a.out";
                                if (argp[3] != '\0') {
                                        pc0 = &argp[3];
                                }
                                if (argp[3] != '\0') {
                                        pc0 = &argp[3];
                                }
@@ -169,13 +183,13 @@ main(argc, argv)
                                }
                                continue;
                        case '2':
                                }
                                continue;
                        case '2':
-                               pc2 = "/usr/src/ucb/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/ucb/pascal/pc3";
+                               pc3 = "/usr/src/ucb/pascal/utilities/pc3";
                                if (argp[3] != '\0') {
                                        pc3 = &argp[3];
                                }
                                if (argp[3] != '\0') {
                                        pc3 = &argp[3];
                                }
@@ -210,9 +224,6 @@ main(argc, argv)
                        gflag = 1;
                        pc0args[pc0argx++] = argp;
                        continue;
                        gflag = 1;
                        pc0args[pc0argx++] = argp;
                        continue;
-               case 't':
-                       fprintf(stderr, "pc: -t is default; -C for checking\n");
-                       continue;
                case 'p':
                        if (argp[2] == 'g')
                                crt0 = gcrt0;
                case 'p':
                        if (argp[2] == 'g')
                                crt0 = gcrt0;
@@ -228,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];
@@ -239,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');
@@ -286,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');
@@ -326,6 +351,7 @@ main(argc, argv)
        pc3args[pc3argx] = 0;
        if (dosys(pc3, pc3args, 0, 0) > 1)
                done();
        pc3args[pc3argx] = 0;
        if (dosys(pc3, pc3args, 0, 0) > 1)
                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";
@@ -372,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':