|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: */ ! 6: ! 7: #ifndef lint ! 8: static char *sccsid = "@(#)init.c 5.4 (Berkeley) 5/10/89"; ! 9: #endif ! 10: ! 11: /* ! 12: * init.c ! 13: * ! 14: * Initializations for f77 compiler, pass 1. ! 15: * ! 16: * University of Utah CS Dept modification history: ! 17: * ! 18: * $Header: init.c,v 5.2 85/08/10 04:30:57 donn Exp $ ! 19: * $Log: init.c,v $ ! 20: * Revision 5.2 85/08/10 04:30:57 donn ! 21: * Jerry Berkman's changes to ifdef 66 code and handle -r8/double flag. ! 22: * ! 23: * Revision 5.1 85/08/10 03:47:33 donn ! 24: * 4.3 alpha ! 25: * ! 26: * Revision 2.1 84/07/19 12:03:26 donn ! 27: * Changed comment headers for UofU. ! 28: * ! 29: * Revision 1.3 84/02/28 21:07:53 donn ! 30: * Added Berkeley changes for call argument temporaries fix. ! 31: * ! 32: * Fixed incorrect check of 'cdatafile' when 'cchkfile' is opened. -- Donn ! 33: */ ! 34: ! 35: #include "defs.h" ! 36: #include "io.h" ! 37: #include <sys/file.h> ! 38: #include "pathnames.h" ! 39: ! 40: ! 41: FILEP infile = { stdin }; ! 42: FILEP diagfile = { stderr }; ! 43: ! 44: FILEP textfile; ! 45: FILEP asmfile; ! 46: FILEP initfile; ! 47: long int headoffset; ! 48: ! 49: char token[1321]; ! 50: int toklen; ! 51: int lineno; ! 52: char *infname; ! 53: int needkwd; ! 54: struct Labelblock *thislabel = NULL; ! 55: flag nowarnflag = NO; ! 56: flag ftn66flag = NO; ! 57: #ifdef ONLY66 ! 58: flag no66flag = NO; ! 59: flag noextflag = NO; ! 60: #endif ! 61: flag dblflag = NO; ! 62: flag profileflag = NO; ! 63: flag optimflag = NO; ! 64: flag shiftcase = YES; ! 65: flag undeftype = NO; ! 66: flag shortsubs = YES; ! 67: flag onetripflag = NO; ! 68: flag checksubs = NO; ! 69: flag debugflag [MAXDEBUGFLAG] = { NO }; ! 70: flag equivdcl = NO; ! 71: int nerr; ! 72: int nwarn; ! 73: int ndata; ! 74: ! 75: flag saveall; ! 76: flag substars; ! 77: int parstate = OUTSIDE; ! 78: flag headerdone = NO; ! 79: int blklevel; ! 80: int impltype[26]; ! 81: int implleng[26]; ! 82: int implstg[26]; ! 83: ! 84: int tyint = TYLONG ; ! 85: int tylogical = TYLONG; ! 86: ftnint typesize[NTYPES] ! 87: = { 1, SZADDR, SZSHORT, SZLONG, SZLONG, 2*SZLONG, ! 88: 2*SZLONG, 4*SZLONG, SZLONG, 1, 1, 1}; ! 89: int typealign[NTYPES] ! 90: = { 1, ALIADDR, ALISHORT, ALILONG, ALILONG, ALIDOUBLE, ! 91: ALILONG, ALIDOUBLE, ALILONG, 1, 1, 1}; ! 92: int procno; ! 93: int lwmno; ! 94: int proctype = TYUNKNOWN; ! 95: char *procname; ! 96: int rtvlabel[NTYPES]; ! 97: int fudgelabel; ! 98: Addrp typeaddr; ! 99: Addrp retslot; ! 100: int cxslot = -1; ! 101: int chslot = -1; ! 102: int chlgslot = -1; ! 103: int procclass = CLUNKNOWN; ! 104: int nentry; ! 105: flag multitype; ! 106: ftnint procleng; ! 107: int lastlabno = 10; ! 108: int lastvarno; ! 109: int lastargslot; ! 110: int argloc; ! 111: ftnint autoleng; ! 112: ftnint bssleng = 0; ! 113: int retlabel; ! 114: int ret0label; ! 115: ftnint lowbss = 0; ! 116: ftnint highbss = 0; ! 117: int bsslabel; ! 118: flag anyinits = NO; ! 119: flag anylocals = NO; ! 120: ! 121: int maxctl = MAXCTL; ! 122: struct Ctlframe *ctls; ! 123: struct Ctlframe *ctlstack; ! 124: struct Ctlframe *lastctl; ! 125: ! 126: Namep regnamep[MAXREGVAR]; ! 127: int highregvar; ! 128: int nregvar; ! 129: ! 130: int maxext = MAXEXT; ! 131: struct Extsym *extsymtab; ! 132: struct Extsym *nextext; ! 133: struct Extsym *lastext; ! 134: ! 135: int maxequiv = MAXEQUIV; ! 136: struct Equivblock *eqvclass; ! 137: ! 138: int maxhash = MAXHASH; ! 139: struct Hashentry *hashtab; ! 140: struct Hashentry *lasthash; ! 141: ! 142: int maxstno = MAXSTNO; ! 143: struct Labelblock *labeltab; ! 144: struct Labelblock *labtabend; ! 145: struct Labelblock *highlabtab; ! 146: ! 147: int maxdim = MAXDIM; ! 148: struct Rplblock *rpllist = NULL; ! 149: struct Chain *curdtp = NULL; ! 150: flag toomanyinit; ! 151: ftnint curdtelt; ! 152: chainp templist = NULL; ! 153: chainp argtemplist = CHNULL; ! 154: chainp activearglist = CHNULL; ! 155: chainp holdtemps = NULL; ! 156: int dorange = 0; ! 157: struct Entrypoint *entries = NULL; ! 158: ! 159: chainp chains = NULL; ! 160: ! 161: flag inioctl; ! 162: Addrp ioblkp; ! 163: int iostmt; ! 164: int nioctl; ! 165: int nequiv = 0; ! 166: int eqvstart = 0; ! 167: int nintnames = 0; ! 168: ! 169: #ifdef SDB ! 170: int dbglabel = 0; ! 171: flag sdbflag = NO; ! 172: #endif ! 173: ! 174: struct Literal litpool[MAXLITERALS]; ! 175: int nliterals; ! 176: ! 177: int cdatafile; ! 178: int cchkfile; ! 179: int vdatafile; ! 180: int vchkfile; ! 181: ! 182: char cdatafname[44] = ""; ! 183: char cchkfname[44] = ""; ! 184: char vdatafname[44] = ""; ! 185: char vchkfname[44] = ""; ! 186: ! 187: long cdatahwm = 0; ! 188: long vdatahwm = 0; ! 189: ! 190: ioblock *iodata = NULL; ! 191: ! 192: ! 193: ! 194: fileinit() ! 195: { ! 196: int pid; ! 197: ! 198: pid = getpid(); ! 199: sprintf(cdatafname, "%s/fortcd.%d", _PATH_TMP, pid); ! 200: sprintf(cchkfname, "%s/fortcc.%d", _PATH_TMP, pid); ! 201: sprintf(vdatafname, "%s/fortvd.%d", _PATH_TMP, pid); ! 202: sprintf(vchkfname, "%s/fortvc.%d", _PATH_TMP, pid); ! 203: ! 204: cdatafile = open(cdatafname, O_CREAT | O_RDWR, 0600); ! 205: if (cdatafile < 0) ! 206: fatalstr("cannot open tmp file %s", cdatafname); ! 207: ! 208: cchkfile = open(cchkfname, O_CREAT | O_RDWR, 0600); ! 209: if (cchkfile < 0) ! 210: fatalstr("cannot open tmp file %s", cchkfname); ! 211: ! 212: pruse(initfile, USEINIT); ! 213: ! 214: procno = 0; ! 215: lwmno = 0; ! 216: lastlabno = 10; ! 217: lastvarno = 0; ! 218: nliterals = 0; ! 219: nerr = 0; ! 220: ndata = 0; ! 221: ! 222: ctls = ALLOCN(maxctl, Ctlframe); ! 223: extsymtab = ALLOCN(maxext, Extsym); ! 224: eqvclass = ALLOCN(maxequiv, Equivblock); ! 225: hashtab = ALLOCN(maxhash, Hashentry); ! 226: labeltab = ALLOCN(maxstno, Labelblock); ! 227: ! 228: ctlstack = ctls - 1; ! 229: lastctl = ctls + maxctl; ! 230: nextext = extsymtab; ! 231: lastext = extsymtab + maxext; ! 232: lasthash = hashtab + maxhash; ! 233: labtabend = labeltab + maxstno; ! 234: highlabtab = labeltab; ! 235: } ! 236: ! 237: ! 238: ! 239: ! 240: ! 241: procinit() ! 242: { ! 243: register Namep p; ! 244: register struct Dimblock *q; ! 245: register struct Hashentry *hp; ! 246: register struct Labelblock *lp; ! 247: struct Chain *cp; ! 248: int i; ! 249: ! 250: vdatafile = open(vdatafname, O_CREAT | O_RDWR, 0600); ! 251: if (vdatafile < 0) ! 252: fatalstr("cannot open tmp file %s", vdatafname); ! 253: ! 254: vchkfile = open(vchkfname, O_CREAT | O_RDWR, 0600); ! 255: if (vchkfile < 0) ! 256: fatalstr("cannot open tmp file %s", vchkfname); ! 257: ! 258: pruse(asmfile, USECONST); ! 259: #if FAMILY == PCC ! 260: p2pass(USETEXT); ! 261: #endif ! 262: parstate = OUTSIDE; ! 263: headerdone = NO; ! 264: blklevel = 1; ! 265: saveall = NO; ! 266: substars = NO; ! 267: nwarn = 0; ! 268: thislabel = NULL; ! 269: needkwd = 0; ! 270: ! 271: ++procno; ! 272: proctype = TYUNKNOWN; ! 273: procname = "MAIN "; ! 274: procclass = CLUNKNOWN; ! 275: nentry = 0; ! 276: multitype = NO; ! 277: typeaddr = NULL; ! 278: retslot = NULL; ! 279: cxslot = -1; ! 280: chslot = -1; ! 281: chlgslot = -1; ! 282: procleng = 0; ! 283: blklevel = 1; ! 284: lastargslot = 0; ! 285: #if TARGET==PDP11 ! 286: autoleng = 6; ! 287: #else ! 288: autoleng = 0; ! 289: #endif ! 290: ! 291: for(lp = labeltab ; lp < labtabend ; ++lp) ! 292: lp->stateno = 0; ! 293: ! 294: for(hp = hashtab ; hp < lasthash ; ++hp) ! 295: if(p = hp->varp) ! 296: { ! 297: frexpr(p->vleng); ! 298: if(q = p->vdim) ! 299: { ! 300: for(i = 0 ; i < q->ndim ; ++i) ! 301: { ! 302: frexpr(q->dims[i].dimsize); ! 303: frexpr(q->dims[i].dimexpr); ! 304: } ! 305: frexpr(q->nelt); ! 306: frexpr(q->baseoffset); ! 307: frexpr(q->basexpr); ! 308: free( (charptr) q); ! 309: } ! 310: if(p->vclass == CLNAMELIST) ! 311: frchain( &(p->varxptr.namelist) ); ! 312: free( (charptr) p); ! 313: hp->varp = NULL; ! 314: } ! 315: nintnames = 0; ! 316: highlabtab = labeltab; ! 317: ! 318: ctlstack = ctls - 1; ! 319: for(cp = templist ; cp ; cp = cp->nextp) ! 320: free( (charptr) (cp->datap) ); ! 321: frchain(&templist); ! 322: for (cp = argtemplist; cp; cp = cp->nextp) ! 323: free((char *) (cp->datap)); ! 324: frchain(&argtemplist); ! 325: holdtemps = NULL; ! 326: dorange = 0; ! 327: nregvar = 0; ! 328: highregvar = 0; ! 329: entries = NULL; ! 330: rpllist = NULL; ! 331: inioctl = NO; ! 332: ioblkp = NULL; ! 333: eqvstart += nequiv; ! 334: nequiv = 0; ! 335: ! 336: for(i = 0 ; i<NTYPES ; ++i) ! 337: rtvlabel[i] = 0; ! 338: fudgelabel = 0; ! 339: ! 340: if(undeftype) ! 341: setimpl(TYUNKNOWN, (ftnint) 0, 'a', 'z'); ! 342: else ! 343: { ! 344: setimpl(dblflag ? TYDREAL : TYREAL, (ftnint) 0, 'a', 'z'); ! 345: setimpl(tyint, (ftnint) 0, 'i', 'n'); ! 346: } ! 347: setimpl(-STGBSS, (ftnint) 0, 'a', 'z'); /* set class */ ! 348: setlog(); ! 349: setopt(); ! 350: ! 351: bsslabel = ++lastvarno; ! 352: anylocals = NO; ! 353: anyinits = NO; ! 354: } ! 355: ! 356: ! 357: ! 358: ! 359: setimpl(type, length, c1, c2) ! 360: int type; ! 361: ftnint length; ! 362: int c1, c2; ! 363: { ! 364: int i; ! 365: char buff[100]; ! 366: ! 367: if(c1==0 || c2==0) ! 368: return; ! 369: ! 370: if(c1 > c2) ! 371: { ! 372: sprintf(buff, "characters out of order in implicit:%c-%c", c1, c2); ! 373: err(buff); ! 374: } ! 375: else ! 376: if(type < 0) ! 377: for(i = c1 ; i<=c2 ; ++i) ! 378: implstg[i-'a'] = - type; ! 379: else ! 380: { ! 381: type = lengtype(type, (int) length); ! 382: if(type != TYCHAR) ! 383: length = 0; ! 384: for(i = c1 ; i<=c2 ; ++i) ! 385: { ! 386: impltype[i-'a'] = type; ! 387: implleng[i-'a'] = length; ! 388: } ! 389: } ! 390: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.