date and time created 81/01/07 16:55:08 by mckusick
[unix-history] / usr / src / usr.bin / pascal / pc / pc.c
index 808f878..8ae8381 100644 (file)
@@ -1,4 +1,4 @@
-static char sccsid[] = "@(#)pc.c 3.2 %G%";
+static char sccsid[] = "@(#)pc.c 3.7 %G%";
 #include <stdio.h>
 #include <signal.h>
 #include <wait.h>
 #include <stdio.h>
 #include <signal.h>
 #include <wait.h>
@@ -6,16 +6,16 @@ static        char sccsid[] = "@(#)pc.c 3.2 %G%";
 /*
  * Pc - front end for Pascal compiler.
  */
 /*
  * Pc - front end for Pascal compiler.
  */
-char   *pc0 = "/usr/new/pc0";
-char   *pc1 = "/usr/new/pc1";
-char   *pc2 = "/usr/new/pc2";
-char   *c2 = "/usr/new/c2";
-char   *pc3 = "/usr/new/pc3";
-char   *ld = "/usr/new/ld";
-char   *as = "/usr/new/as";
+char   *pc0 = "/usr/lib/pc0";
+char   *pc1 = "/lib/f1";
+char   *pc2 = "/usr/lib/pc2";
+char   *c2 = "/lib/c2";
+char   *pc3 = "/usr/lib/pc3";
+char   *ld = "/bin/ld";
+char   *as = "/bin/as";
 char   *lpc = "-lpc";
 char   *lpc = "-lpc";
-char   *crt0 = "/usr/new/crt0.o";
-char   *mcrt0 = "/usr/new/mcrt0.o";
+char   *crt0 = "/lib/crt0.o";
+char   *mcrt0 = "/lib/mcrt0.o";
 
 char   *mktemp();
 char   *tname[2];
 
 char   *mktemp();
 char   *tname[2];
@@ -23,7 +23,7 @@ char  *tfile[2];
 
 char   *setsuf(), *savestr();
 
 
 char   *setsuf(), *savestr();
 
-int    Sflag, Oflag, cflag, gflag, pflag;
+int    Jflag, Sflag, Oflag, cflag, gflag, pflag;
 int    debug;
 
 #define        NARGS   512
 int    debug;
 
 #define        NARGS   512
@@ -37,8 +37,9 @@ int   pc3argx = 1;
 #define        pc3args pc0args
 #define        ldargs  pc0args
 /* char        *pc3args[NARGS] =       { "pc3", 0 }; */
 #define        pc3args pc0args
 #define        ldargs  pc0args
 /* char        *pc3args[NARGS] =       { "pc3", 0 }; */
-/* char        *ldargs[NARGS] =        { "ld", "-X", "/usr/new/crt0.o", 0, }; */
-char   *asargs[5] =            { "as", 0, };
+/* char        *ldargs[NARGS] =        { "ld", "-X", "/lib/crt0.o", 0, }; */
+int    asargx;
+char   *asargs[6] =            { "as", 0, };
 
 /*
  * 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
@@ -111,23 +112,26 @@ main(argc, argv)
                case 'S':
                        Sflag = 1;
                        continue;
                case 'S':
                        Sflag = 1;
                        continue;
+               case 'J':
+                       Jflag = 1;
+                       continue;
                case 'T':
                        switch (argp[2]) {
 
                        case '0':
                case 'T':
                        switch (argp[2]) {
 
                        case '0':
-                               pc0 = "/vb/grad/peter/pc/npc0/src/a.pc";
+                               pc0 = "/usr/src/cmd/pc0/a.out";
                                continue;
                        case '1':
                                continue;
                        case '1':
-                               pc1 = "/usr/src/new/pcc/pc1";
+                               pc1 = "/usr/src/cmd/pcc/pc1";
                                continue;
                        case '2':
                                continue;
                        case '2':
-                               pc2 = "/usr/new/pc2";
+                               pc2 = "/usr/src/cmd/pc2/a.out";
                                continue;
                        case '3':
                                continue;
                        case '3':
-                               pc3 = "/usr/new/pc3";
+                               pc3 = "/usr/src/cmd/pc3/a.out";
                                continue;
                        case 'l':
                                continue;
                        case 'l':
-                               lpc = "-lnpc";
+                               lpc = "/usr/src/lib/libpc/pclib";
                                continue;
                        }
                        continue;
                                continue;
                        }
                        continue;
@@ -168,6 +172,20 @@ main(argc, argv)
                argp = argv[i];
                if (argp[0] == '-')
                        continue;
                argp = argv[i];
                if (argp[0] == '-')
                        continue;
+               if (suffix(argp) == 's') {
+                       asargx = 1;
+                       if (Jflag)
+                               asargs[asargx++] = "-J";
+                       asargs[asargx++] = argp;
+                       asargs[asargx++] = "-o";
+                       tfile[1] = setsuf(argp, 'o');
+                       asargs[asargx++] = tfile[1];
+                       asargs[asargx] = 0;
+                       if (dosys(as, asargs, 0, 0))
+                               continue;
+                       tfile[1] = 0;
+                       continue;
+               }
                if (suffix(argp) != 'p')
                        continue;
                tfile[0] = tname[0];
                if (suffix(argp) != 'p')
                        continue;
                tfile[0] = tname[0];
@@ -207,10 +225,14 @@ main(argc, argv)
                        tfile[0] = 0;
                        continue;
                }
                        tfile[0] = 0;
                        continue;
                }
-               asargs[1] = tfile[0];
-               asargs[2] = "-o";
+               asargx = 1;
+               if (Jflag)
+                       asargs[asargx++] = "-J";
+               asargs[asargx++] = tfile[0];
+               asargs[asargx++] = "-o";
                tfile[1] = setsuf(argp, 'o');
                tfile[1] = setsuf(argp, 'o');
-               asargs[3] = tfile[1];
+               asargs[asargx++] = tfile[1];
+               asargs[asargx] = 0;
                if (dosys(as, asargs, 0, 0))
                        continue;
                tfile[1] = 0;
                if (dosys(as, asargs, 0, 0))
                        continue;
                tfile[1] = 0;
@@ -228,12 +250,11 @@ main(argc, argv)
                        continue;
                switch (getsuf(argp)) {
 
                        continue;
                switch (getsuf(argp)) {
 
-               case 'd':
-                       continue;
                case 'o':
                        pc3args[pc3argx++] = argp;
                        nxo++;
                        continue;
                case 'o':
                        pc3args[pc3argx++] = argp;
                        nxo++;
                        continue;
+               case 's':
                case 'p':
                        onepso = pc3args[pc3argx++] =
                            savestr(setsuf(argp, 'o'));
                case 'p':
                        onepso = pc3args[pc3argx++] =
                            savestr(setsuf(argp, 'o'));
@@ -244,7 +265,7 @@ main(argc, argv)
        pc3args[pc3argx] = 0;
        if (dosys(pc3, pc3args, 0, 0))
                done();
        pc3args[pc3argx] = 0;
        if (dosys(pc3, pc3args, 0, 0))
                done();
-/* char        *ldargs[NARGS] =        { "ld", "-X", "/usr/new/crt0.o", 0, }; */
+/* char        *ldargs[NARGS] =        { "ld", "-X", "/lib/crt0.o", 0, }; */
        ldargs[0] = "ld";
        ldargs[1] = "-X";
        ldargs[2] = crt0;
        ldargs[0] = "ld";
        ldargs[1] = "-X";
        ldargs[2] = crt0;
@@ -254,6 +275,7 @@ main(argc, argv)
                        switch (getsuf(argp)) {
 
                        case 'p':
                        switch (getsuf(argp)) {
 
                        case 'p':
+                       case 's':
                                ldargs[ldargx] = savestr(setsuf(argp, 'o'));
                                break;
                        default:
                                ldargs[ldargx] = savestr(setsuf(argp, 'o'));
                                break;
                        default:
@@ -294,6 +316,7 @@ duplicate:
                case 'w':
                case 'p':
                case 'S':
                case 'w':
                case 'p':
                case 'S':
+               case 'J':
                case 'T':
                case 'O':
                case 'C':
                case 'T':
                case 'O':
                case 'C':
@@ -309,6 +332,7 @@ duplicate:
        ldargs[ldargx++] = lpc;
        if (gflag)
                ldargs[ldargx++] = "-lg";
        ldargs[ldargx++] = lpc;
        if (gflag)
                ldargs[ldargx++] = "-lg";
+       ldargs[ldargx++] = "-lm";
        ldargs[ldargx++] = "-lc";
        ldargs[ldargx] = 0;
        if (dosys(ld, ldargs, 0, 0)==0 && np == 1 && nxo == 0)
        ldargs[ldargx++] = "-lc";
        ldargs[ldargx] = 0;
        if (dosys(ld, ldargs, 0, 0)==0 && np == 1 && nxo == 0)