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