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