|
|
1.1 ! root 1: char xxxvers[] = "\n@(#) FORTRAN 77 PASS 1, VERSION 2.10.2, 27 JUNE 1989\n"; ! 2: #define VER 0x5625 /* for pi; 8YMDD */ ! 3: ! 4: #include "defs" ! 5: #include <signal.h> ! 6: ! 7: #ifdef SDB ! 8: # include <a.out.h> ! 9: # ifndef N_SO ! 10: # include <stab.h> ! 11: # endif ! 12: ! 13: int types3[] = { /* for supplying type to N_GSYM stab line */ ! 14: 0, /* TYUNKNOWN */ ! 15: 0, /* TYADDR */ ! 16: 0100|3, /* TYSHORT */ ! 17: 0100|5, /* TYLONG */ ! 18: 0100|6, /* TYREAL */ ! 19: 0100|7, /* TYDREAL */ ! 20: 0100|16, /* TYCOMPLEX */ ! 21: 0100|16, /* TYDCOMPLEX */ ! 22: 0100|4, /* TYLOGICAL */ ! 23: 0100|16, /* TYCHAR */ ! 24: 0100|4, /* TYSUBR */ ! 25: 0 /* TYERROR */ ! 26: }; ! 27: ! 28: int complex_seen, dcomplex_seen; ! 29: #endif ! 30: ! 31: LOCAL clfiles(); ! 32: LOCAL FILEP opf(); ! 33: ! 34: int bugwarn; ! 35: ! 36: main(argc, argv) ! 37: int argc; ! 38: char **argv; ! 39: { ! 40: char *s; ! 41: int k, retcode, *ip; ! 42: #if SDB ! 43: char elab[10]; ! 44: int elnum; ! 45: #endif ! 46: void flovflo(); ! 47: ! 48: #define DONE(c) { retcode = c; goto finis; } ! 49: ! 50: signal(SIGFPE, flovflo); /* catch overflows */ ! 51: ! 52: #if HERE == PDP11 ! 53: ldfps(01200); /* trap on overflow */ ! 54: #endif ! 55: ! 56: ! 57: ! 58: --argc; ! 59: ++argv; ! 60: ! 61: while(argc>0 && argv[0][0]=='-') ! 62: { ! 63: for(s = argv[0]+1 ; *s ; ++s) switch(*s) ! 64: { ! 65: case 'w': ! 66: if(s[1]=='6' && s[2]=='6') ! 67: { ! 68: ftn66flag = YES; ! 69: s += 2; ! 70: } ! 71: else ! 72: nowarnflag = YES; ! 73: break; ! 74: ! 75: case 'U': ! 76: shiftcase = NO; ! 77: break; ! 78: ! 79: case 'u': ! 80: undeftype = YES; ! 81: break; ! 82: ! 83: case 'O': ! 84: optimflag = YES; ! 85: if( isdigit(s[1]) ) ! 86: { ! 87: k = *++s - '0'; ! 88: if(k > MAXREGVAR) ! 89: { ! 90: warn1("-O%d: too many register variables", k); ! 91: maxregvar = MAXREGVAR; ! 92: } ! 93: else ! 94: maxregvar = k; ! 95: } ! 96: break; ! 97: ! 98: case 'b': ! 99: bugwarn |= 1; ! 100: break; ! 101: ! 102: case 'B': ! 103: bugwarn |= 2; ! 104: break; ! 105: ! 106: case 'd': ! 107: debugflag = YES; ! 108: break; ! 109: ! 110: case 'p': ! 111: profileflag = YES; ! 112: break; ! 113: ! 114: case 'C': ! 115: checksubs = YES; ! 116: break; ! 117: ! 118: case '6': ! 119: no66flag = YES; ! 120: noextflag = YES; ! 121: break; ! 122: ! 123: case '1': ! 124: onetripflag = YES; ! 125: break; ! 126: ! 127: #ifdef SDB ! 128: case 'g': ! 129: sdbflag = YES; ! 130: break; ! 131: #endif ! 132: ! 133: case 'N': ! 134: switch(*++s) ! 135: { ! 136: case 'q': ! 137: ip = &maxequiv; ! 138: goto getnum; ! 139: case 'x': ! 140: ip = &maxext; ! 141: goto getnum; ! 142: case 's': ! 143: ip = &maxstno; ! 144: goto getnum; ! 145: case 'c': ! 146: ip = &maxctl; ! 147: goto getnum; ! 148: case 'n': ! 149: ip = &maxhash; ! 150: goto getnum; ! 151: ! 152: default: ! 153: fatali("invalid flag -N%c", *s); ! 154: } ! 155: getnum: ! 156: k = 0; ! 157: while( isdigit(*++s) ) ! 158: k = 10*k + (*s - '0'); ! 159: if(k <= 0) ! 160: fatal("Table size too small"); ! 161: *ip = k; ! 162: break; ! 163: ! 164: case 'I': ! 165: if(*++s == '2') { ! 166: tyint = TYSHORT; ! 167: #ifdef SDB ! 168: types3[TYLOGICAL] = 0100|3; ! 169: #endif ! 170: } ! 171: else if(*s == '4') ! 172: { ! 173: shortsubs = NO; ! 174: tyint = TYLONG; ! 175: #ifdef SDB ! 176: types3[TYLOGICAL] = 0100|4; ! 177: #endif ! 178: } ! 179: else if(*s == 's') ! 180: shortsubs = YES; ! 181: else ! 182: fatali("invalid flag -I%c\n", *s); ! 183: tylogical = tyint; ! 184: break; ! 185: ! 186: default: ! 187: fatali("invalid flag %c\n", *s); ! 188: } ! 189: --argc; ! 190: ++argv; ! 191: } ! 192: ! 193: if(argc != 4) ! 194: fatali("arg count %d", argc); ! 195: asmfile = opf(argv[1]); ! 196: initfile = opf(argv[2]); ! 197: textfile = opf(argv[3]); ! 198: ! 199: initkey(); ! 200: if(inilex( copys(argv[0]) )) ! 201: DONE(1); ! 202: fprintf(diagfile, "%s:\n", argv[0]); ! 203: ! 204: #ifdef SDB ! 205: #ifndef UCBPASS2 ! 206: for(s = argv[0] ; ; s += 8) ! 207: { ! 208: prstab(s,N_SO,0,0); ! 209: if( strlen(s) < 8 ) ! 210: break; ! 211: } ! 212: #else ! 213: prstab(argv[0],N_SO,0,0); ! 214: #endif ! 215: prstab("vaxf77",N_VER,VER,0); ! 216: #endif ! 217: ! 218: fileinit(); ! 219: procinit(); ! 220: if(k = yyparse()) ! 221: { ! 222: fprintf(diagfile, "Bad parse, return code %d\n", k); ! 223: DONE(1); ! 224: } ! 225: if(nerr > 0) ! 226: DONE(1); ! 227: if(parstate != OUTSIDE) ! 228: { ! 229: warn("missing END statement"); ! 230: endproc(); ! 231: } ! 232: doext(); ! 233: preven(ALIDOUBLE); ! 234: prtail(); ! 235: #if SDB ! 236: if (sdbflag) ! 237: commstruct(); /* make commons appear to pi as global structs */ ! 238: sprintf(elab, "L%d", elnum = newlabel()); ! 239: putlabel(elnum); ! 240: prstab(argv[0],N_ESO,lineno,elab); ! 241: #endif ! 242: #if FAMILY==PCC ! 243: puteof(); ! 244: #endif ! 245: ! 246: if(nerr > 0) ! 247: DONE(1); ! 248: DONE(0); ! 249: ! 250: ! 251: finis: ! 252: done(retcode); ! 253: return(retcode); ! 254: } ! 255: ! 256: ! 257: ! 258: done(k) ! 259: int k; ! 260: { ! 261: static int recurs = NO; ! 262: ! 263: if(recurs == NO) ! 264: { ! 265: recurs = YES; ! 266: clfiles(); ! 267: } ! 268: exit(k); ! 269: } ! 270: ! 271: ! 272: LOCAL FILEP opf(fn) ! 273: char *fn; ! 274: { ! 275: FILEP fp; ! 276: if( fp = fopen(fn, "w") ) ! 277: return(fp); ! 278: ! 279: fatalstr("cannot open intermediate file %s", fn); ! 280: /* NOTREACHED */ ! 281: } ! 282: ! 283: ! 284: ! 285: LOCAL clfiles() ! 286: { ! 287: clf(&textfile); ! 288: clf(&asmfile); ! 289: clf(&initfile); ! 290: } ! 291: ! 292: ! 293: clf(p) ! 294: FILEP *p; ! 295: { ! 296: if(p!=NULL && *p!=NULL && *p!=stdout) ! 297: { ! 298: if(ferror(*p)) ! 299: fatal("writing error"); ! 300: fclose(*p); ! 301: } ! 302: *p = NULL; ! 303: } ! 304: ! 305: ! 306: ! 307: ! 308: void ! 309: flovflo() ! 310: { ! 311: err("floating exception during constant evaluation"); ! 312: #if HERE == VAX ! 313: fatal("vax cannot recover from floating exception"); ! 314: /* vax returns a reserved operand that generates ! 315: an illegal operand fault on next instruction, ! 316: which if ignored causes an infinite loop. ! 317: */ ! 318: #endif ! 319: signal(SIGFPE, flovflo); ! 320: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.