|
|
1.1 ! root 1: #include <stdio.h> ! 2: ! 3: #ifdef unix ! 4: # include <ctype.h> ! 5: #endif ! 6: ! 7: #include "ftypes" ! 8: #include "defines" ! 9: #include "machdefs" ! 10: ! 11: #define VL 6 ! 12: ! 13: #define MAXDIM 20 ! 14: #define MAXINCLUDES 10 ! 15: #define MAXLITERALS 20 ! 16: #define MAXCTL 20 ! 17: #define MAXHASH 401 ! 18: #define MAXSTNO 201 ! 19: #define MAXEXT 200 ! 20: #define MAXEQUIV 150 ! 21: #define MAXLABLIST 125 ! 22: ! 23: typedef union Expression *expptr; ! 24: typedef union Taggedblock *tagptr; ! 25: typedef union Chainedblock *chainp; ! 26: ! 27: extern FILEP infile; ! 28: extern FILEP diagfile; ! 29: extern FILEP textfile; ! 30: extern FILEP asmfile; ! 31: extern FILEP initfile; ! 32: extern long int headoffset; ! 33: ! 34: extern char token [ ]; ! 35: extern int toklen; ! 36: extern int yylval; ! 37: extern int lineno; ! 38: extern char *infname; ! 39: extern int needkwd; ! 40: extern struct Labelblock *thislabel; ! 41: ! 42: extern int maxctl; ! 43: extern int maxequiv; ! 44: extern int maxstno; ! 45: extern int maxhash; ! 46: extern int maxext; ! 47: ! 48: extern flag profileflag; ! 49: extern flag optimflag; ! 50: extern flag nowarnflag; ! 51: extern flag ftn66flag; ! 52: extern flag no66flag; ! 53: extern flag noextflag; ! 54: extern flag shiftcase; ! 55: extern flag undeftype; ! 56: extern flag shortsubs; ! 57: extern flag onetripflag; ! 58: extern flag checksubs; ! 59: extern flag debugflag; ! 60: extern int nerr; ! 61: extern int nwarn; ! 62: extern int ndata; ! 63: ! 64: extern int parstate; ! 65: extern flag headerdone; ! 66: extern int blklevel; ! 67: extern flag saveall; ! 68: extern flag substars; ! 69: extern int impltype[ ]; ! 70: extern int implleng[ ]; ! 71: extern int implstg[ ]; ! 72: ! 73: extern int tyint; ! 74: extern int tylogical; ! 75: extern ftnint typesize[]; ! 76: extern int typealign[]; ! 77: extern int procno; ! 78: extern int proctype; ! 79: extern char * procname; ! 80: extern int rtvlabel[ ]; ! 81: extern int fudgelabel; /* to confuse the pdp11 optimizer */ ! 82: extern struct Addrblock *typeaddr; ! 83: extern struct Addrblock *retslot; ! 84: extern int cxslot; ! 85: extern int chslot; ! 86: extern int chlgslot; ! 87: extern int procclass; ! 88: extern ftnint procleng; ! 89: extern int nentry; ! 90: extern flag multitype; ! 91: extern int blklevel; ! 92: extern int lastlabno; ! 93: extern int lastvarno; ! 94: extern int lastargslot; ! 95: extern int argloc; ! 96: extern ftnint autoleng; ! 97: extern ftnint bssleng; ! 98: extern int retlabel; ! 99: extern int ret0label; ! 100: extern int dorange; ! 101: extern int regnum[ ]; ! 102: extern struct Nameblock *regnamep[ ]; ! 103: extern int maxregvar; ! 104: extern int highregvar; ! 105: extern int nregvar; ! 106: ! 107: extern chainp templist; ! 108: extern int maxdim; ! 109: extern chainp holdtemps; ! 110: extern struct Entrypoint *entries; ! 111: extern struct Rplblock *rpllist; ! 112: extern struct Chain *curdtp; ! 113: extern ftnint curdtelt; ! 114: extern flag toomanyinit; ! 115: ! 116: extern flag inioctl; ! 117: extern int iostmt; ! 118: extern struct Addrblock *ioblkp; ! 119: extern int nioctl; ! 120: extern int nequiv; ! 121: extern int eqvstart; /* offset to eqv number to guarantee uniqueness */ ! 122: extern int nintnames; ! 123: extern int nextnames; ! 124: ! 125: #ifdef SDB ! 126: extern int dbglabel; ! 127: extern flag sdbflag; ! 128: #endif ! 129: ! 130: struct Chain ! 131: { ! 132: chainp nextp; ! 133: tagptr datap; ! 134: }; ! 135: ! 136: extern chainp chains; ! 137: ! 138: struct Headblock ! 139: { ! 140: unsigned tag:4; ! 141: unsigned vtype:4; ! 142: unsigned vclass:4; ! 143: unsigned vstg:4; ! 144: expptr vleng; ! 145: } ; ! 146: ! 147: struct Ctlframe ! 148: { ! 149: unsigned ctltype:8; ! 150: unsigned dostepsign:8; ! 151: int ctlabels[4]; ! 152: int dolabel; ! 153: struct Nameblock *donamep; ! 154: expptr domax; ! 155: expptr dostep; ! 156: }; ! 157: #define endlabel ctlabels[0] ! 158: #define elselabel ctlabels[1] ! 159: #define dobodylabel ctlabels[1] ! 160: #define doposlabel ctlabels[2] ! 161: #define doneglabel ctlabels[3] ! 162: extern struct Ctlframe *ctls; ! 163: extern struct Ctlframe *ctlstack; ! 164: extern struct Ctlframe *lastctl; ! 165: ! 166: struct Extsym ! 167: { ! 168: char extname[XL]; ! 169: unsigned extstg:4; ! 170: unsigned extsave:1; ! 171: unsigned extinit:1; ! 172: ptr extp; ! 173: ftnint extleng; ! 174: ftnint maxleng; ! 175: }; ! 176: ! 177: extern struct Extsym *extsymtab; ! 178: extern struct Extsym *nextext; ! 179: extern struct Extsym *lastext; ! 180: ! 181: struct Labelblock ! 182: { ! 183: int labelno; ! 184: unsigned blklevel:8; ! 185: unsigned labused:1; ! 186: unsigned labinacc:1; ! 187: unsigned labdefined:1; ! 188: unsigned labtype:2; ! 189: ftnint stateno; ! 190: }; ! 191: ! 192: extern struct Labelblock *labeltab; ! 193: extern struct Labelblock *labtabend; ! 194: extern struct Labelblock *highlabtab; ! 195: ! 196: struct Entrypoint ! 197: { ! 198: chainp nextp; ! 199: struct Extsym *entryname; ! 200: chainp arglist; ! 201: int entrylabel; ! 202: int typelabel; ! 203: ptr enamep; ! 204: }; ! 205: ! 206: struct Primblock ! 207: { ! 208: unsigned tag:4; ! 209: unsigned vtype:4; ! 210: struct Nameblock *namep; ! 211: struct Listblock *argsp; ! 212: expptr fcharp; ! 213: expptr lcharp; ! 214: }; ! 215: ! 216: ! 217: struct Hashentry ! 218: { ! 219: int hashval; ! 220: struct Nameblock *varp; ! 221: }; ! 222: extern struct Hashentry *hashtab; ! 223: extern struct Hashentry *lasthash; ! 224: ! 225: struct Intrpacked /* bits for intrinsic function description */ ! 226: { ! 227: unsigned f1:3; ! 228: unsigned f2:4; ! 229: unsigned f3:7; ! 230: }; ! 231: ! 232: struct Nameblock ! 233: { ! 234: unsigned tag:4; ! 235: unsigned vtype:4; ! 236: unsigned vclass:4; ! 237: unsigned vstg:4; ! 238: expptr vleng; ! 239: char varname[VL]; ! 240: unsigned vdovar:1; ! 241: unsigned vdcldone:1; ! 242: unsigned vadjdim:1; ! 243: unsigned vsave:1; ! 244: unsigned vprocclass:3; ! 245: unsigned vregno:4; ! 246: union { ! 247: int varno; ! 248: chainp vstfdesc; /* points to (formals, expr) pair */ ! 249: struct Intrpacked intrdesc; /* bits for intrinsic function */ ! 250: } vardesc; ! 251: struct Dimblock *vdim; ! 252: ftnint voffset; ! 253: }; ! 254: ! 255: ! 256: struct Paramblock ! 257: { ! 258: unsigned tag:4; ! 259: unsigned vtype:4; ! 260: unsigned vclass:4; ! 261: expptr vleng; ! 262: char varname[VL]; ! 263: ptr paramval; ! 264: } ; ! 265: ! 266: ! 267: struct Exprblock ! 268: { ! 269: unsigned tag:4; ! 270: unsigned vtype:4; ! 271: unsigned vclass:4; ! 272: expptr vleng; ! 273: unsigned opcode:6; ! 274: expptr leftp; ! 275: expptr rightp; ! 276: }; ! 277: ! 278: ! 279: union Constant ! 280: { ! 281: char *ccp; ! 282: ftnint ci; ! 283: double cd[2]; ! 284: }; ! 285: ! 286: struct Constblock ! 287: { ! 288: unsigned tag:4; ! 289: unsigned vtype:4; ! 290: expptr vleng; ! 291: union Constant const; ! 292: }; ! 293: ! 294: ! 295: struct Listblock ! 296: { ! 297: unsigned tag:4; ! 298: unsigned vtype:4; ! 299: chainp listp; ! 300: }; ! 301: ! 302: ! 303: ! 304: struct Addrblock ! 305: { ! 306: unsigned tag:4; ! 307: unsigned vtype:4; ! 308: unsigned vclass:4; ! 309: unsigned vstg:4; ! 310: expptr vleng; ! 311: int memno; ! 312: expptr memoffset; ! 313: unsigned istemp:1; ! 314: unsigned ntempelt:10; ! 315: }; ! 316: ! 317: ! 318: ! 319: struct Errorblock ! 320: { ! 321: unsigned tag:4; ! 322: unsigned vtype:4; ! 323: }; ! 324: ! 325: ! 326: union Expression ! 327: { ! 328: struct Headblock headblock; ! 329: struct Exprblock exprblock; ! 330: struct Addrblock addrblock; ! 331: struct Constblock constblock; ! 332: struct Errorblock errorblock; ! 333: struct Listblock listblock; ! 334: struct Primblock primblock; ! 335: } ; ! 336: ! 337: ! 338: ! 339: struct Dimblock ! 340: { ! 341: int ndim; ! 342: expptr nelt; ! 343: expptr baseoffset; ! 344: expptr basexpr; ! 345: struct ! 346: { ! 347: expptr dimsize; ! 348: expptr dimexpr; ! 349: } dims[1]; ! 350: }; ! 351: ! 352: ! 353: struct Impldoblock ! 354: { ! 355: unsigned tag:4; ! 356: unsigned isactive:1; ! 357: unsigned isbusy:1; ! 358: struct Nameblock *varnp; ! 359: struct Constblock *varvp; ! 360: expptr implb; ! 361: expptr impub; ! 362: expptr impstep; ! 363: ftnint impdiff; ! 364: ftnint implim; ! 365: struct Chain *datalist; ! 366: }; ! 367: ! 368: ! 369: struct Rplblock /* name replacement block */ ! 370: { ! 371: chainp nextp; ! 372: struct Nameblock *rplnp; ! 373: ptr rplvp; ! 374: struct Exprblock *rplxp; ! 375: int rpltag; ! 376: }; ! 377: ! 378: ! 379: ! 380: struct Equivblock ! 381: { ! 382: ptr equivs; ! 383: unsigned eqvinit:1; ! 384: long int eqvtop; ! 385: long int eqvbottom; ! 386: } ; ! 387: #define eqvleng eqvtop ! 388: ! 389: extern struct Equivblock *eqvclass; ! 390: ! 391: ! 392: struct Eqvchain ! 393: { ! 394: chainp nextp; ! 395: ptr eqvitem; ! 396: long int eqvoffset; ! 397: } ; ! 398: ! 399: union Chainedblock ! 400: { ! 401: struct Chain; ! 402: struct Entrypoint; ! 403: struct Rplblock; ! 404: struct Eqvchain; ! 405: }; ! 406: ! 407: ! 408: ! 409: union Taggedblock ! 410: { ! 411: struct Headblock headblock; ! 412: struct Nameblock nameblock; ! 413: struct Paramblock paramblock; ! 414: struct Exprblock exprblock; ! 415: struct Constblock constblock; ! 416: struct Listblock listblock; ! 417: struct Addrblock addrblock; ! 418: struct Errorblock errorblock; ! 419: struct Primblock primblock; ! 420: struct Impldoblock impldoblock; ! 421: } ; ! 422: ! 423: ! 424: ! 425: ! 426: struct Literal ! 427: { ! 428: short littype; ! 429: short litnum; ! 430: union { ! 431: ftnint litival; ! 432: double litdval; ! 433: struct { ! 434: char litclen; /* small integer */ ! 435: char litcstr[XL]; ! 436: } litcval; ! 437: } litval; ! 438: }; ! 439: ! 440: extern struct Literal litpool[ ]; ! 441: extern int nliterals; ! 442: ! 443: ! 444: ! 445: ! 446: ! 447: /* popular functions with non integer return values */ ! 448: ! 449: ! 450: int *ckalloc(); ! 451: char *varstr(), *nounder(), *varunder(); ! 452: char *copyn(), *copys(); ! 453: chainp hookup(), mkchain(); ! 454: ftnint convci(); ! 455: char *convic(); ! 456: char *setdoto(); ! 457: double convcd(); ! 458: struct Nameblock *mkname(); ! 459: struct Labelblock *mklabel(); ! 460: struct Extsym *mkext(), *newentry(); ! 461: struct Exprblock *addrof(), *call1(), *call2(), *call3(), *call4(); ! 462: struct Addrblock *builtin(), *mktemp(), *mktmpn(); ! 463: struct Addrblock *autovar(), *mklhs(), *mkaddr(), *putconst(), *memversion(); ! 464: struct Constblock *mkintcon(); ! 465: expptr mkexpr(), mkconv(), mkfunct(), fixexpr(), fixtype(); ! 466: tagptr cpexpr(), mkprim(); ! 467: struct Errorblock *errnode(); ! 468: ftnint lmin(), lmax(), iarrlen();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.