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