Annotation of 42BSD/usr.bin/f77/src/f77pass1/defs.h, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.