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();

Defined struct's

Addrblock defined in line 395; used 9 times
Chain defined in line 207; used 12 times
Constblock defined in line 375; used 7 times
Eqvchain defined in line 511; used 13 times
Errorblock defined in line 428; used 8 times
Exprblock defined in line 355; used 7 times
Headblock defined in line 215; used 6 times
Intrpacked defined in line 304; used 4 times
Literal defined in line 542; used 6 times
Nameblock defined in line 311; used 9 times
Primblock defined in line 285; used 26 times
Tempblock defined in line 414; used 7 times

Defined union's

Constant defined in line 368; used 14 times
Expression defined in line 435; used 1 times
  • in line 72
Taggedblock defined in line 523; used 1 times
  • in line 73

Defined typedef's

Addrp defined in line 75; used 209 times
expptr defined in line 72; used 484 times

Defined macros

MAXCTL defined in line 64; used 1 times
MAXEQUIV defined in line 68; used 1 times
MAXEXT defined in line 67; used 1 times
MAXHASH defined in line 65; used 1 times
MAXINCLUDES defined in line 62; used 1 times
MAXLABLIST defined in line 69; used 1 times
MAXSTNO defined in line 66; used 1 times
dobodylabel defined in line 236; used 8 times
doneglabel defined in line 238; used 4 times
doposlabel defined in line 237; used 4 times
elselabel defined in line 235; used 11 times
endlabel defined in line 234; used 22 times

Usage of this include

Last modified: 1986-01-11
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2486
Valid CSS Valid XHTML 1.0 Strict