BSD 4 release
[unix-history] / usr / src / cmd / f77 / driver.c
index bfcc268..bb8b760 100644 (file)
@@ -1,8 +1,8 @@
-char *xxxvers[] = "\n FORTRAN 77 DRIVER, VERSION 1.11,   28 JULY 1978\n";
+char *xxxvers[] = "\n@(#) FORTRAN 77 DRIVER, VERSION 2.03.5,   7 NOVEMBER 1980\n";
 #include <stdio.h>
 #include <ctype.h>
 #include "defines"
 #include <stdio.h>
 #include <ctype.h>
 #include "defines"
-#include "locdefs"
+#include "machdefs"
 #include "drivedefs"
 #include "ftypes"
 #include <signal.h>
 #include "drivedefs"
 #include "ftypes"
 #include <signal.h>
@@ -11,6 +11,8 @@ static FILEP diagfile = {stderr} ;
 static int pid;
 static int sigivalue   = 0;
 static int sigqvalue   = 0;
 static int pid;
 static int sigivalue   = 0;
 static int sigqvalue   = 0;
+static int sighvalue   = 0;
+static int sigtvalue   = 0;
 
 static char *pass1name = PASS1NAME ;
 static char *pass2name = PASS2NAME ;
 
 static char *pass1name = PASS1NAME ;
 static char *pass2name = PASS2NAME ;
@@ -21,30 +23,36 @@ static char *proffoot       = PROFFOOT;
 static char *macroname = "m4";
 static char *shellname = "/bin/sh";
 static char *aoutname  = "a.out" ;
 static char *macroname = "m4";
 static char *shellname = "/bin/sh";
 static char *aoutname  = "a.out" ;
+static char *temppref  = TEMPPREF;
 
 static char *infname;
 
 static char *infname;
-static char textfname[15];
-static char asmfname[15];
-static char asmpass2[15];
-static char initfname[15];
-static char sortfname[15];
-static char prepfname[15];
-static char objfdefault[15];
-static char optzfname[15];
-static char setfname[15];
-
-static char fflags[30] = "-";
-static char cflags[20] = "-c";
-static char eflags[30] = "";
+static char textfname[40];
+static char asmfname[40];
+static char asmpass2[40];
+static char initfname[40];
+static char sortfname[40];
+static char prepfname[40];
+static char objfdefault[40];
+static char optzfname[40];
+static char setfname[40];
+
+static char fflags[50] = "-";
+static char cflags[50] = "-c";
+#if TARGET == GCOS
+       static char eflags[30]  = "system=gcos ";
+#else
+       static char eflags[30]  = "system=unix ";
+#endif
 static char rflags[30] = "";
 static char lflag[3]   = "-x";
 static char *fflagp    = fflags+1;
 static char *cflagp    = cflags+2;
 static char rflags[30] = "";
 static char lflag[3]   = "-x";
 static char *fflagp    = fflags+1;
 static char *cflagp    = cflags+2;
-static char *eflagp    = eflags;
+static char *eflagp    = eflags+12;
 static char *rflagp    = rflags;
 static char **loadargs;
 static char **loadp;
 
 static char *rflagp    = rflags;
 static char **loadargs;
 static char **loadp;
 
+static flag erred      = NO;
 static flag loadflag   = YES;
 static flag saveasmflag        = NO;
 static flag profileflag        = NO;
 static flag loadflag   = YES;
 static flag saveasmflag        = NO;
 static flag profileflag        = NO;
@@ -54,6 +62,8 @@ static flag verbose   = NO;
 static flag nofloating = NO;
 static flag fortonly   = NO;
 static flag macroflag  = NO;
 static flag nofloating = NO;
 static flag fortonly   = NO;
 static flag macroflag  = NO;
+static flag sdbflag    = NO;
+
 
 \f
 main(argc, argv)
 
 \f
 main(argc, argv)
@@ -61,15 +71,17 @@ int argc;
 char **argv;
 {
 int i, c, status;
 char **argv;
 {
 int i, c, status;
-char *setdoto(), *lastchar(), *lastfield();
+char *setdoto(), *lastchar(), *lastfield(), *copys();
 ptr ckalloc();
 register char *s;
 char fortfile[20], *t;
 char buff[100];
 int intrupt();
 
 ptr ckalloc();
 register char *s;
 char fortfile[20], *t;
 char buff[100];
 int intrupt();
 
-sigivalue = (int) signal(SIGINT, 1) & 01;
-sigqvalue = (int) signal(SIGQUIT,1) & 01;
+sigivalue = (int) signal(SIGINT, SIG_IGN) & 01;
+sigqvalue = (int) signal(SIGQUIT,SIG_IGN) & 01;
+sighvalue = (int) signal(SIGHUP, SIG_IGN) & 01;
+sigtvalue = (int) signal(SIGTERM,SIG_IGN) & 01;
 enbint(intrupt);
 
 pid = getpid();
 enbint(intrupt);
 
 pid = getpid();
@@ -108,11 +120,24 @@ while(argc>0 && argv[0][0]=='-' && argv[0][1]!='\0')
                                        footname = s+1; goto endfor;
                                case 'm':
                                        macroname = s+1; goto endfor;
                                        footname = s+1; goto endfor;
                                case 'm':
                                        macroname = s+1; goto endfor;
+                               case 't':
+                                       temppref = s+1; goto endfor;
                                default:
                                default:
-                                       fatal1("bad option -T%c", *s);
+                                       fatali("bad option -T%c", *s);
                                }
                        break;
 
                                }
                        break;
 
+               case '6':
+                       if(s[1]=='6')
+                               {
+                               *fflagp++ = *s++;
+                               goto copyfflag;
+                               }
+                       else    {
+                               fprintf(diagfile, "invalid flag 6%c\n", s[1]);
+                               done(1);
+                               }
+
                case 'w':
                        if(s[1]=='6' && s[2]=='6')
                                {
                case 'w':
                        if(s[1]=='6' && s[2]=='6')
                                {
@@ -123,7 +148,6 @@ while(argc>0 && argv[0][0]=='-' && argv[0][1]!='\0')
                copyfflag:
                case 'u':
                case 'U':
                copyfflag:
                case 'u':
                case 'U':
-               case 'M':
                case '1':
                case 'C':
                        *fflagp++ = *s;
                case '1':
                case 'C':
                        *fflagp++ = *s;
@@ -140,6 +164,19 @@ while(argc>0 && argv[0][0]=='-' && argv[0][1]!='\0')
                                *fflagp++ = *++s;
                        break;
 
                                *fflagp++ = *++s;
                        break;
 
+               case 'N':
+                       *fflagp++ = 'N';
+                       if( oneof(*++s, "qxscn") )
+                               *fflagp++ = *s++;
+                       else    {
+                               fprintf(diagfile, "invalid flag -N%c\n", *s);
+                               done(1);
+                               }
+                       while( isdigit(*s) )
+                               *fflagp++ = *s++;
+                       *fflagp++ = 'X';
+                       goto endfor;
+
                case 'm':
                        if(s[1] == '4')
                                ++s;
                case 'm':
                        if(s[1] == '4')
                                ++s;
@@ -147,6 +184,7 @@ while(argc>0 && argv[0][0]=='-' && argv[0][1]!='\0')
                        break;
 
                case 'S':
                        break;
 
                case 'S':
+                       strcat(cflags, " -S");
                        saveasmflag = YES;
 
                case 'c':
                        saveasmflag = YES;
 
                case 'c':
@@ -161,9 +199,18 @@ while(argc>0 && argv[0][0]=='-' && argv[0][1]!='\0')
                        debugflag = YES;
                        goto copyfflag;
 
                        debugflag = YES;
                        goto copyfflag;
 
+               case 'M':
+                       *loadp++ = "-M";
+                       break;
+
+               case 'g':
+                       strcat(cflags," -g");
+                       sdbflag = YES;
+                       goto copyfflag;
+
                case 'p':
                        profileflag = YES;
                case 'p':
                        profileflag = YES;
-                       *cflagp++ = 'p';
+                       strcat(cflags," -p");
                        goto copyfflag;
 
                case 'o':
                        goto copyfflag;
 
                case 'o':
@@ -222,6 +269,8 @@ endfor:
        ++argv;
        }
 
        ++argv;
        }
 
+*fflagp = '\0';
+
 loadargs[0] = ldname;
 #if TARGET == PDP11
        if(nofloating)
 loadargs[0] = ldname;
 #if TARGET == PDP11
        if(nofloating)
@@ -236,7 +285,10 @@ for(i = 0 ; i<argc ; ++i)
                case 'r':       /* Ratfor file */
                case 'e':       /* EFL file */
                        if( unreadable(argv[i]) )
                case 'r':       /* Ratfor file */
                case 'e':       /* EFL file */
                        if( unreadable(argv[i]) )
+                               {
+                               erred = YES;
                                break;
                                break;
+                               }
                        s = fortfile;
                        t = lastfield(argv[i]);
                        while( *s++ = *t++)
                        s = fortfile;
                        t = lastfield(argv[i]);
                        while( *s++ = *t++)
@@ -245,9 +297,11 @@ for(i = 0 ; i<argc ; ++i)
 
                        if(macroflag)
                                {
 
                        if(macroflag)
                                {
-                               if(sys(sprintf(buff, "%s %s >%s", macroname, infname, prepfname) ))
+                               sprintf(buff, "%s %s >%s", macroname, infname, prepfname);
+                               if( sys(buff) )
                                        {
                                        rmf(prepfname);
                                        {
                                        rmf(prepfname);
+                                       erred = YES;
                                        break;
                                        }
                                infname = prepfname;
                                        break;
                                        }
                                infname = prepfname;
@@ -262,7 +316,7 @@ for(i = 0 ; i<argc ; ++i)
                                rmf(infname);
                        if(status)
                                {
                                rmf(infname);
                        if(status)
                                {
-                               loadflag = NO;
+                               erred = YES;
                                rmf(fortfile);
                                break;
                                }
                                rmf(fortfile);
                                break;
                                }
@@ -273,7 +327,7 @@ for(i = 0 ; i<argc ; ++i)
                                *lastchar(infname) = 'f';
        
                                if( dofort(argv[i]) )
                                *lastchar(infname) = 'f';
        
                                if( dofort(argv[i]) )
-                                       loadflag = NO;
+                                       erred = YES;
                                else    {
                                        if( nodup(t = setdoto(argv[i])) )
                                                *loadp++ = t;
                                else    {
                                        if( nodup(t = setdoto(argv[i])) )
                                                *loadp++ = t;
@@ -285,9 +339,9 @@ for(i = 0 ; i<argc ; ++i)
                case 'f':       /* Fortran file */
                case 'F':
                        if( unreadable(argv[i]) )
                case 'f':       /* Fortran file */
                case 'F':
                        if( unreadable(argv[i]) )
-                               break;
-                       if( dofort(argv[i]) )
-                               loadflag = NO;
+                               erred = YES;
+                       else if( dofort(argv[i]) )
+                               erred = YES;
                        else if( nodup(t=setdoto(argv[i])) )
                                *loadp++ = t;
                        break;
                        else if( nodup(t=setdoto(argv[i])) )
                                *loadp++ = t;
                        break;
@@ -295,13 +349,16 @@ for(i = 0 ; i<argc ; ++i)
                case 'c':       /* C file */
                case 's':       /* Assembler file */
                        if( unreadable(argv[i]) )
                case 'c':       /* C file */
                case 's':       /* Assembler file */
                        if( unreadable(argv[i]) )
+                               {
+                               erred = YES;
                                break;
                                break;
+                               }
 #if HERE==PDP11 || HERE==VAX
                        fprintf(diagfile, "%s:\n", argv[i]);
 #endif
 #if HERE==PDP11 || HERE==VAX
                        fprintf(diagfile, "%s:\n", argv[i]);
 #endif
-                       sprintf(buff, "cc -c %s", argv[i] );
+                       sprintf(buff, "cc %s %s", cflags, argv[i] );
                        if( sys(buff) )
                        if( sys(buff) )
-                               loadflag = NO;
+                               erred = YES;
                        else
                                if( nodup(t = setdoto(argv[i])) )
                                        *loadp++ = t;
                        else
                                if( nodup(t = setdoto(argv[i])) )
                                        *loadp++ = t;
@@ -320,9 +377,9 @@ for(i = 0 ; i<argc ; ++i)
                        break;
                }
 
                        break;
                }
 
-if(loadflag)
+if(loadflag && !erred)
        doload(loadargs, loadp);
        doload(loadargs, loadp);
-done(0);
+done(erred);
 }
 \f
 dofort(s)
 }
 \f
 dofort(s)
@@ -384,11 +441,11 @@ if(verbose)
        return( sys(buff) );
 #endif
 
        return( sys(buff) );
 #endif
 
-#if FAMILY == SCJ
+#if FAMILY == PCC
 #      if TARGET==INTERDATA
        sprintf(buff, "%s -A%s <%s >%s", pass2name, setfname, textfname, asmpass2);
 #      else
 #      if TARGET==INTERDATA
        sprintf(buff, "%s -A%s <%s >%s", pass2name, setfname, textfname, asmpass2);
 #      else
-       sprintf(buff, "%s <%s >%s", pass2name, textfname, asmpass2);
+       sprintf(buff, "%s %s >%s", pass2name, textfname, asmpass2);
 #      endif
        return( sys(buff) );
 #endif
 #      endif
        return( sys(buff) );
 #endif
@@ -403,6 +460,7 @@ char *s;
 register char *lastc;
 char *obj;
 char buff[200];
 register char *lastc;
 char *obj;
 char buff[200];
+char *lastchar(), *setdoto();
 
 if(*s == '\0')
        s = objfdefault;
 
 if(*s == '\0')
        s = objfdefault;
@@ -410,27 +468,30 @@ lastc = lastchar(s);
 obj = setdoto(s);
 
 #if TARGET==PDP11 || TARGET==VAX
 obj = setdoto(s);
 
 #if TARGET==PDP11 || TARGET==VAX
-#ifdef PASS2OPT
-if(optimflag)
-       {
-       if( sys(sprintf(buff, "%s %s %s", PASS2OPT, asmpass2, optzfname)) )
-               rmf(optzfname);
-       else
-               sys(sprintf(buff,"mv %s %s", optzfname, asmpass2));
-       }
-#endif
+#      ifdef PASS2OPT
+       if(optimflag)
+               {
+               sprintf(buff, "%s %s %s", PASS2OPT, asmpass2, optzfname);
+               if( sys(buff) )
+                       rmf(optzfname);
+               else
+                       {
+                       sprintf(buff,"mv %s %s", optzfname, asmpass2);
+                       sys(buff);
+                       }
+               }
+#      endif
 #endif
 
 if(saveasmflag)
        {
        *lastc = 's';
 #if TARGET == INTERDATA
 #endif
 
 if(saveasmflag)
        {
        *lastc = 's';
 #if TARGET == INTERDATA
-       sys( sprintf(buff, "cat %s %s %s >%s",
-               asmfname, setfname, asmpass2, obj) );
+       sprintf(buff, "cat %s %s %s >%s",asmfname, setfname, asmpass2, obj);
 #else
 #else
-       sys( sprintf(buff, "cat %s %s >%s",
-                       asmfname, asmpass2, obj) );
+       sprintf(buff, "cat %s %s >%s", asmfname, asmpass2, obj);
 #endif
 #endif
+       sys(buff);
        *lastc = 'o';
        }
 else
        *lastc = 'o';
        }
 else
@@ -443,7 +504,8 @@ else
 
 #if TARGET == VAX
        /* vax assembler currently accepts only one input file */
 
 #if TARGET == VAX
        /* vax assembler currently accepts only one input file */
-       sys(sprintf(buff, "cat %s >>%s", asmpass2, asmfname));
+       sprintf(buff, "cat %s >>%s", asmpass2, asmfname);
+       sys(buff);
        sprintf(buff, "%s -o %s %s", asmname, obj, asmfname);
 #endif
 
        sprintf(buff, "%s -o %s %s", asmname, obj, asmfname);
 #endif
 
@@ -475,6 +537,8 @@ register char *v0[], *v[];
 char **p;
 int waitpid;
 
 char **p;
 int waitpid;
 
+if(sdbflag)
+       *v++ = "-lg";
 for(p = liblist ; *p ; *v++ = *p++)
        ;
 
 for(p = liblist ; *p ; *v++ = *p++)
        ;
 
@@ -496,7 +560,7 @@ if(debugflag)
                {
                enbint(SIG_DFL);
                execv(ldname, v0);
                {
                enbint(SIG_DFL);
                execv(ldname, v0);
-               fatal1("couldn't load %s", ldname);
+               fatalstr("couldn't load %s", ldname);
                }
        await(waitpid);
 #endif
                }
        await(waitpid);
 #endif
@@ -504,9 +568,10 @@ if(debugflag)
 #if HERE==INTERDATA
        if(optimflag)
                {
 #if HERE==INTERDATA
        if(optimflag)
                {
-               char buff[100];
-               if( sys(sprintf(buff, "nopt %s -o junk.%d", aoutname, pid))
-                || sys(sprintf(buff, "mv junk.%d %s", pid, aoutname)) )
+               char buff1[100], buff2[100];
+               sprintf(buff1, "nopt %s -o junk.%d", aoutname, pid);
+               sprintf(buff2, "mv junk.%d %s", pid, aoutname);
+               if( sys(buff1) || sys(buff2) )
                        err("bad optimization");
                }
 #endif
                        err("bad optimization");
                }
 #endif
@@ -588,7 +653,7 @@ if((waitpid = fork()) == 0)
        texec(path+4, argv);  /*  /bin/command */
        texec(path  , argv);  /* /usr/bin/command */
 
        texec(path+4, argv);  /*  /bin/command */
        texec(path  , argv);  /* /usr/bin/command */
 
-       fatal1("Cannot load %s",path+9);
+       fatalstr("Cannot load %s",path+9);
        }
 
 return( await(waitpid) );
        }
 
 return( await(waitpid) );
@@ -598,7 +663,7 @@ return( await(waitpid) );
 
 
 
 
 
 
-#include <errno.h>
+#include "errno.h"
 
 /* modified version from the Shell */
 texec(f, av)
 
 /* modified version from the Shell */
 texec(f, av)
@@ -616,7 +681,7 @@ if (errno==ENOEXEC)
        fatal("No shell!");
        }
 if (errno==ENOMEM)
        fatal("No shell!");
        }
 if (errno==ENOMEM)
-       fatal1("%s: too large", f);
+       fatalstr("%s: too large", f);
 }
 
 
 }
 
 
@@ -649,6 +714,10 @@ if(sigivalue == 0)
        signal(SIGINT,k);
 if(sigqvalue == 0)
        signal(SIGQUIT,k);
        signal(SIGINT,k);
 if(sigqvalue == 0)
        signal(SIGQUIT,k);
+if(sighvalue == 0)
+       signal(SIGHUP,k);
+if(sigtvalue == 0)
+       signal(SIGTERM,k);
 }
 
 
 }
 
 
@@ -696,7 +765,6 @@ if(fp = fopen(s, "r"))
 else
        {
        fprintf(diagfile, "Error: Cannot read file %s\n", s);
 else
        {
        fprintf(diagfile, "Error: Cannot read file %s\n", s);
-       loadflag = NO;
        return(YES);
        }
 }
        return(YES);
        }
 }
@@ -739,13 +807,27 @@ rmf(asmpass2);
 content(filename)
 char *filename;
 {
 content(filename)
 char *filename;
 {
-#include <sys/types.h>
-#include <sys/stat.h>
-struct stat buf;
-if(stat(filename,&buf) < 0) 
+#ifdef VERSION6
+       struct stat
+               {
+               char cjunk[9];
+               char size0;
+               int size1;
+               int ijunk[12];
+               } buf;
+#else
+#      include <sys/types.h>
+#      include <sys/stat.h>
+       struct stat buf;
+#endif
+
+if(stat(filename,&buf) < 0)
        return(-1);
        return(-1);
-else
+#ifdef VERSION6
+       return(buf.size0 || buf.size1);
+#else
        return( buf.st_size > 0 );
        return( buf.st_size > 0 );
+#endif
 }
 
 
 }
 
 
@@ -781,7 +863,7 @@ if(!debugflag && fn!=NULL && *fn!='\0')
 LOCAL fname(name, suff)
 char *name, *suff;
 {
 LOCAL fname(name, suff)
 char *name, *suff;
 {
-sprintf(name, "fort%d.%s", pid, suff);
+sprintf(name, "%s%d.%s", temppref, pid, suff);
 }
 
 
 }
 
 
@@ -830,7 +912,7 @@ return( lastfield(s) );
 badfile(s)
 char *s;
 {
 badfile(s)
 char *s;
 {
-fatal1("cannot open intermediate file %s", s);
+fatalstr("cannot open intermediate file %s", s);
 }
 
 
 }
 
 
@@ -851,7 +933,7 @@ fatal("out of memory");
 
 
 
 
 
 
-copyn(n, s)
+char *copyn(n, s)
 register int n;
 register char *s;
 {
 register int n;
 register char *s;
 {
@@ -865,7 +947,7 @@ return(p);
 
 
 
 
 
 
-copys(s)
+char *copys(s)
 char *s;
 {
 return( copyn( strlen(s)+1 , s) );
 char *s;
 {
 return( copyn( strlen(s)+1 , s) );
@@ -875,6 +957,18 @@ return( copyn( strlen(s)+1 , s) );
 
 
 
 
 
 
+oneof(c,s)
+register c;
+register char *s;
+{
+while( *s )
+       if(*s++ == c)
+               return(YES);
+return(NO);
+}
+
+
+
 nodup(s)
 char *s;
 {
 nodup(s)
 char *s;
 {
@@ -902,22 +996,33 @@ exit(1);
 
 
 
 
 
 
-static fatal1(t,d)
-char *t, *d;
+static fatali(t,d)
+char *t;
+int d;
 {
 char buff[100];
 {
 char buff[100];
-fatal( sprintf(buff, t, d) );
+sprintf(buff, t, d);
+fatal(buff);
 }
 
 
 
 
 }
 
 
 
 
+static fatalstr(t, s)
+char *t, *s;
+{
+char buff[100];
+sprintf(buff, t, s);
+fatal(buff);
+}
 err(s)
 char *s;
 {
 fprintf(diagfile, "Error in file %s: %s\n", infname, s);
 }
 \f
 err(s)
 char *s;
 {
 fprintf(diagfile, "Error in file %s: %s\n", infname, s);
 }
 \f
+/* Code to generate initializations for DATA statements */
+
 LOCAL int nch  = 0;
 LOCAL FILEP asmfile;
 LOCAL FILEP sortfile;
 LOCAL int nch  = 0;
 LOCAL FILEP asmfile;
 LOCAL FILEP sortfile;
@@ -939,7 +1044,7 @@ int status;
 flag erred;
 ftnint offset, vlen, type;
 register ftnint ooffset, ovlen;
 flag erred;
 ftnint offset, vlen, type;
 register ftnint ooffset, ovlen;
-ftnint vchar;
+ftnint nblank, vchar;
 int size, align;
 int vargroup;
 ftnint totlen, doeven();
 int size, align;
 int vargroup;
 ftnint totlen, doeven();
@@ -951,8 +1056,9 @@ ovlen = 0;
 totlen = 0;
 nch = 0;
 
 totlen = 0;
 nch = 0;
 
-if(status = sys( sprintf(buff, "sort %s >%s", initfname, sortfname) ) )
-       fatal1("call sort status = %d", status);
+sprintf(buff, "sort %s >%s", initfname, sortfname);
+if(status = sys(buff))
+       fatali("call sort status = %d", status);
 if( (sortfile = fopen(sortfname, "r")) == NULL)
        badfile(sortfname);
 if( (asmfile = fopen(asmfname, "a")) == NULL)
 if( (sortfile = fopen(sortfname, "r")) == NULL)
        badfile(sortfname);
 if( (asmfile = fopen(asmfname, "a")) == NULL)
@@ -970,7 +1076,8 @@ while( rdname(&vargroup, varname) && rdlong(&offset) && rdlong(&vlen) && rdlong(
                totlen += ovlen;
                ovlen = vlen;
                if(vargroup == 0)
                totlen += ovlen;
                ovlen = vlen;
                if(vargroup == 0)
-                       align = (type==TYCHAR ? SZLONG : typealign[type]);
+                       align = (type==TYCHAR || type==TYBLANK ?
+                                       SZLONG : typealign[type]);
                else    align = ALIDOUBLE;
                totlen = doeven(totlen, align);
                if(vargroup == 2)
                else    align = ALIDOUBLE;
                totlen = doeven(totlen, align);
                if(vargroup == 2)
@@ -982,6 +1089,7 @@ while( rdname(&vargroup, varname) && rdlong(&offset) && rdlong(&vlen) && rdlong(
                {
                erred = YES;
                err("overlapping initializations");
                {
                erred = YES;
                err("overlapping initializations");
+               ooffset = offset;
                }
        if(offset > ooffset)
                {
                }
        if(offset > ooffset)
                {
@@ -990,9 +1098,21 @@ while( rdname(&vargroup, varname) && rdlong(&offset) && rdlong(&vlen) && rdlong(
                }
        if(type == TYCHAR)
                {
                }
        if(type == TYCHAR)
                {
-               if( ! rdlong(&vchar) )
+               if( rdlong(&vchar) )
+                       prch( (int) vchar );
+               else
+                       fatal("bad intermediate file format");
+               }
+       else if(type == TYBLANK)
+               {
+               if( rdlong(&nblank) )
+                       {
+                       size = nblank;
+                       while( --nblank >= 0)
+                               prch( ' ' );
+                       }
+               else
                        fatal("bad intermediate file format");
                        fatal("bad intermediate file format");
-               prch( (int) vchar );
                }
        else
                {
                }
        else
                {