BSD 4 release
[unix-history] / usr / src / cmd / f77 / init.c
index 0d7db8d..83352ba 100644 (file)
@@ -14,9 +14,11 @@ int toklen;
 int lineno;
 char *infname;
 int needkwd;
 int lineno;
 char *infname;
 int needkwd;
-struct labelblock *thislabel   = NULL;
+struct Labelblock *thislabel   = NULL;
 flag nowarnflag        = NO;
 flag ftn66flag = NO;
 flag nowarnflag        = NO;
 flag ftn66flag = NO;
+flag no66flag  = NO;
+flag noextflag = NO;
 flag profileflag       = NO;
 flag optimflag = NO;
 flag shiftcase = YES;
 flag profileflag       = NO;
 flag optimflag = NO;
 flag shiftcase = YES;
@@ -51,8 +53,8 @@ int proctype  = TYUNKNOWN;
 char *procname;
 int rtvlabel[NTYPES];
 int fudgelabel;
 char *procname;
 int rtvlabel[NTYPES];
 int fudgelabel;
-struct addrblock *typeaddr;
-struct addrblock *retslot;
+Addrp typeaddr;
+Addrp retslot;
 int cxslot     = -1;
 int chslot     = -1;
 int chlgslot   = -1;
 int cxslot     = -1;
 int chslot     = -1;
 int chlgslot   = -1;
@@ -68,45 +70,59 @@ ftnint autoleng;
 ftnint bssleng = 0;
 int retlabel;
 int ret0label;
 ftnint bssleng = 0;
 int retlabel;
 int ret0label;
-struct ctlframe ctls[MAXCTL];
-struct ctlframe *ctlstack      = ctls-1;
-struct ctlframe *lastctl       = ctls+MAXCTL ;
 
 
-struct nameblock *regnamep[MAXREGVAR];
+int maxctl     = MAXCTL;
+struct Ctlframe *ctls;
+struct Ctlframe *ctlstack;
+struct Ctlframe *lastctl;
+
+Namep regnamep[MAXREGVAR];
 int highregvar;
 int nregvar;
 
 int highregvar;
 int nregvar;
 
-struct extsym extsymtab[MAXEXT];
-struct extsym *nextext = extsymtab;
-struct extsym *lastext = extsymtab+MAXEXT;
+int maxext     = MAXEXT;
+struct Extsym *extsymtab;
+struct Extsym *nextext;
+struct Extsym *lastext;
+
+int maxequiv   = MAXEQUIV;
+struct Equivblock *eqvclass;
 
 
-struct equivblock eqvclass[MAXEQUIV];
-struct hashentry hashtab[MAXHASH];
-struct hashentry *lasthash     = hashtab+MAXHASH;
+int maxhash    = MAXHASH;
+struct Hashentry *hashtab;
+struct Hashentry *lasthash;
 
 
-struct labelblock labeltab[MAXSTNO];
-struct labelblock *labtabend   = labeltab+MAXSTNO;
-struct labelblock *highlabtab =        labeltab;
-struct rplblock *rpllist       = NULL;
-chainp curdtp  = NULL;
+int maxstno    = MAXSTNO;
+struct Labelblock *labeltab;
+struct Labelblock *labtabend;
+struct Labelblock *highlabtab;
+
+int maxdim     = MAXDIM;
+struct Rplblock *rpllist       = NULL;
+struct Chain *curdtp   = NULL;
 flag toomanyinit;
 ftnint curdtelt;
 chainp templist        = NULL;
 chainp holdtemps       = NULL;
 int dorange    = 0;
 flag toomanyinit;
 ftnint curdtelt;
 chainp templist        = NULL;
 chainp holdtemps       = NULL;
 int dorange    = 0;
-struct entrypoint *entries     = NULL;
+struct Entrypoint *entries     = NULL;
 
 chainp chains  = NULL;
 
 flag inioctl;
 
 chainp chains  = NULL;
 
 flag inioctl;
-struct addrblock *ioblkp;
+Addrp ioblkp;
 int iostmt;
 int nioctl;
 int nequiv     = 0;
 int iostmt;
 int nioctl;
 int nequiv     = 0;
+int eqvstart   = 0;
 int nintnames  = 0;
 int nintnames  = 0;
-int nextnames  = 0;
 
 
-struct literal litpool[MAXLITERALS];
+#ifdef SDB
+int dbglabel   = 0;
+flag sdbflag   = NO;
+#endif
+
+struct Literal litpool[MAXLITERALS];
 int nliterals;
 
 
 int nliterals;
 
 
@@ -116,10 +132,23 @@ fileinit()
 procno = 0;
 lastlabno = 10;
 lastvarno = 0;
 procno = 0;
 lastlabno = 10;
 lastvarno = 0;
-nextext = extsymtab;
 nliterals = 0;
 nerr = 0;
 ndata = 0;
 nliterals = 0;
 nerr = 0;
 ndata = 0;
+
+ctls = ALLOCN(maxctl, Ctlframe);
+extsymtab = ALLOCN(maxext, Extsym);
+eqvclass = ALLOCN(maxequiv, Equivblock);
+hashtab = ALLOCN(maxhash, Hashentry);
+labeltab = ALLOCN(maxstno, Labelblock);
+
+ctlstack = ctls - 1;
+lastctl = ctls + maxctl;
+nextext = extsymtab;
+lastext = extsymtab + maxext;
+lasthash = hashtab + maxhash;
+labtabend = labeltab + maxstno;
+highlabtab = labeltab;
 }
 
 
 }
 
 
@@ -128,15 +157,15 @@ ndata = 0;
 
 procinit()
 {
 
 procinit()
 {
-register struct nameblock *p;
-register struct dimblock *q;
-register struct hashentry *hp;
-register struct labelblock *lp;
-chainp cp;
+register Namep p;
+register struct Dimblock *q;
+register struct Hashentry *hp;
+register struct Labelblock *lp;
+struct Chain *cp;
 int i;
 
 pruse(asmfile, USECONST);
 int i;
 
 pruse(asmfile, USECONST);
-#if FAMILY == SCJ
+#if FAMILY == PCC
        p2pass(USETEXT);
 #endif
 parstate = OUTSIDE;
        p2pass(USETEXT);
 #endif
 parstate = OUTSIDE;
@@ -185,9 +214,11 @@ for(hp = hashtab ; hp < lasthash ; ++hp)
                        frexpr(q->nelt);
                        frexpr(q->baseoffset);
                        frexpr(q->basexpr);
                        frexpr(q->nelt);
                        frexpr(q->baseoffset);
                        frexpr(q->basexpr);
-                       free(q);
+                       free( (charptr) q);
                        }
                        }
-               free(p);
+               if(p->vclass == CLNAMELIST)
+                       frchain( &(p->varxptr.namelist) );
+               free( (charptr) p);
                hp->varp = NULL;
                }
 nintnames = 0;
                hp->varp = NULL;
                }
 nintnames = 0;
@@ -195,7 +226,7 @@ highlabtab = labeltab;
 
 ctlstack = ctls - 1;
 for(cp = templist ; cp ; cp = cp->nextp)
 
 ctlstack = ctls - 1;
 for(cp = templist ; cp ; cp = cp->nextp)
-       free(cp->datap);
+       free( (charptr) (cp->datap) );
 frchain(&templist);
 holdtemps = NULL;
 dorange = 0;
 frchain(&templist);
 holdtemps = NULL;
 dorange = 0;
@@ -205,6 +236,7 @@ entries = NULL;
 rpllist = NULL;
 inioctl = NO;
 ioblkp = NULL;
 rpllist = NULL;
 inioctl = NO;
 ioblkp = NULL;
+eqvstart += nequiv;
 nequiv = 0;
 
 for(i = 0 ; i<NTYPES ; ++i)
 nequiv = 0;
 
 for(i = 0 ; i<NTYPES ; ++i)
@@ -237,7 +269,10 @@ if(c1==0 || c2==0)
        return;
 
 if(c1 > c2)
        return;
 
 if(c1 > c2)
-       err( sprintf(buff, "characters out of order in implicit:%c-%c", c1, c2) );
+       {
+       sprintf(buff, "characters out of order in implicit:%c-%c", c1, c2);
+       err(buff);
+       }
 else
        if(type < 0)
                for(i = c1 ; i<=c2 ; ++i)
 else
        if(type < 0)
                for(i = c1 ; i<=c2 ; ++i)