Annotation of researchv10no/cmd/f2c/init.c, revision 1.1

1.1     ! root        1: /****************************************************************
        !             2: Copyright 1990, 1992, 1993 by AT&T Bell Laboratories and Bellcore.
        !             3: 
        !             4: Permission to use, copy, modify, and distribute this software
        !             5: and its documentation for any purpose and without fee is hereby
        !             6: granted, provided that the above copyright notice appear in all
        !             7: copies and that both that the copyright notice and this
        !             8: permission notice and warranty disclaimer appear in supporting
        !             9: documentation, and that the names of AT&T Bell Laboratories or
        !            10: Bellcore or any of their entities not be used in advertising or
        !            11: publicity pertaining to distribution of the software without
        !            12: specific, written prior permission.
        !            13: 
        !            14: AT&T and Bellcore disclaim all warranties with regard to this
        !            15: software, including all implied warranties of merchantability
        !            16: and fitness.  In no event shall AT&T or Bellcore be liable for
        !            17: any special, indirect or consequential damages or any damages
        !            18: whatsoever resulting from loss of use, data or profits, whether
        !            19: in an action of contract, negligence or other tortious action,
        !            20: arising out of or in connection with the use or performance of
        !            21: this software.
        !            22: ****************************************************************/
        !            23: 
        !            24: #include "defs.h"
        !            25: #include "output.h"
        !            26: #include "iob.h"
        !            27: 
        !            28: /* State required for the C output */
        !            29: char *fl_fmt_string;           /* Float format string */
        !            30: char *db_fmt_string;           /* Double format string */
        !            31: char *cm_fmt_string;           /* Complex format string */
        !            32: char *dcm_fmt_string;          /* Double complex format string */
        !            33: 
        !            34: chainp new_vars = CHNULL;      /* List of newly created locals in this
        !            35:                                   function.  These may have identifiers
        !            36:                                   which have underscores and more than VL
        !            37:                                   characters */
        !            38: chainp used_builtins = CHNULL; /* List of builtins used by this function.
        !            39:                                   These are all Addrps with UNAM_EXTERN
        !            40:                                   */
        !            41: chainp assigned_fmts = CHNULL; /* assigned formats */
        !            42: chainp allargs;                        /* union of args in all entry points */
        !            43: chainp earlylabs;              /* labels seen before enddcl() */
        !            44: char main_alias[52];           /* PROGRAM name, if any is given */
        !            45: int tab_size = 4;
        !            46: 
        !            47: 
        !            48: FILEP infile;
        !            49: FILEP diagfile;
        !            50: 
        !            51: FILEP c_file;
        !            52: FILEP pass1_file;
        !            53: FILEP initfile;
        !            54: FILEP blkdfile;
        !            55: 
        !            56: 
        !            57: char token[MAXTOKENLEN];
        !            58: int toklen;
        !            59: long lineno;                   /* Current line in the input file, NOT the
        !            60:                                   Fortran statement label number */
        !            61: char *infname;
        !            62: int needkwd;
        !            63: struct Labelblock *thislabel   = NULL;
        !            64: int nerr;
        !            65: int nwarn;
        !            66: 
        !            67: flag saveall;
        !            68: flag substars;
        !            69: int parstate   = OUTSIDE;
        !            70: flag headerdone        = NO;
        !            71: int blklevel;
        !            72: int doin_setbound;
        !            73: int impltype[26];
        !            74: ftnint implleng[26];
        !            75: int implstg[26];
        !            76: 
        !            77: int tyint      = TYLONG ;
        !            78: int tylogical  = TYLONG;
        !            79: int tylog      = TYLOGICAL;
        !            80: int typesize[NTYPES] = {
        !            81:        1, SZADDR, 1, SZSHORT, SZLONG,
        !            82: #ifdef TYQUAD
        !            83:                2*SZLONG,
        !            84: #endif
        !            85:                SZLONG, 2*SZLONG,
        !            86:                2*SZLONG, 4*SZLONG, 1, SZSHORT, SZLONG, 1, 1, 0,
        !            87:                4*SZLONG + SZADDR,      /* sizeof(cilist) */
        !            88:                4*SZLONG + 2*SZADDR,    /* sizeof(icilist) */
        !            89:                4*SZLONG + 5*SZADDR,    /* sizeof(olist) */
        !            90:                2*SZLONG + SZADDR,      /* sizeof(cllist) */
        !            91:                2*SZLONG,               /* sizeof(alist) */
        !            92:                11*SZLONG + 15*SZADDR   /* sizeof(inlist) */
        !            93:                };
        !            94: 
        !            95: int typealign[NTYPES] = {
        !            96:        1, ALIADDR, 1, ALISHORT, ALILONG,
        !            97: #ifdef TYQUAD
        !            98:        ALIDOUBLE,
        !            99: #endif
        !           100:        ALILONG, ALIDOUBLE,
        !           101:        ALILONG, ALIDOUBLE, 1, ALISHORT, ALILONG, 1, 1, 1,
        !           102:        ALILONG, ALILONG, ALILONG, ALILONG, ALILONG, ALILONG};
        !           103: 
        !           104: int type_choice[4] = { TYDREAL, TYSHORT, TYLONG,  TYSHORT };
        !           105: 
        !           106: char *typename[] = {
        !           107:        "<<unknown>>",
        !           108:        "address",
        !           109:        "integer1",
        !           110:        "shortint",
        !           111:        "integer",
        !           112: #ifdef TYQUAD
        !           113:        "longint",
        !           114: #endif
        !           115:        "real",
        !           116:        "doublereal",
        !           117:        "complex",
        !           118:        "doublecomplex",
        !           119:        "logical1",
        !           120:        "shortlogical",
        !           121:        "logical",
        !           122:        "char"  /* character */
        !           123:        };
        !           124: 
        !           125: int type_pref[NTYPES] = { 0, 0, 3, 5, 7,
        !           126: #ifdef TYQUAD
        !           127:                         10,
        !           128: #endif
        !           129:                                8, 11, 9, 12, 1, 4, 6, 2 };
        !           130: 
        !           131: char *protorettypes[] = {
        !           132:        "?", "??", "integer1", "shortint", "integer",
        !           133: #ifdef TYQUAD
        !           134:        "longint",
        !           135: #endif
        !           136:        "real", "doublereal",
        !           137:        "C_f", "Z_f", "logical1", "shortlogical", "logical", "H_f", "int"
        !           138:        };
        !           139: 
        !           140: char *casttypes[TYSUBR+1] = {
        !           141:        "U_fp", "??bug??", "I1_fp",
        !           142:        "J_fp", "I_fp",
        !           143: #ifdef TYQUAD
        !           144:        "Q_fp",
        !           145: #endif
        !           146:        "R_fp", "D_fp", "C_fp", "Z_fp",
        !           147:        "L1_fp", "L2_fp", "L_fp", "H_fp", "S_fp"
        !           148:        };
        !           149: char *usedcasts[TYSUBR+1];
        !           150: 
        !           151: char *dfltarg[] = {
        !           152:        0, 0, "(integer1 *)0",
        !           153:        "(shortint *)0", "(integer *)0",
        !           154: #ifdef TYQUAD
        !           155:        "(longint *)0",
        !           156: #endif
        !           157:        "(real *)0",
        !           158:        "(doublereal *)0", "(complex *)0", "(doublecomplex *)0",
        !           159:        "(logical1 *)0","(shortlogical *)0)", "(logical *)0", "(char *)0"
        !           160:        };
        !           161: 
        !           162: static char *dflt0proc[] = {
        !           163:        0, 0, "(integer1 (*)())0",
        !           164:        "(shortint (*)())0", "(integer (*)())0",
        !           165: #ifdef TYQUAD
        !           166:        "(longint (*)())0",
        !           167: #endif
        !           168:        "(real (*)())0",
        !           169:        "(doublereal (*)())0", "(complex (*)())0", "(doublecomplex (*)())0",
        !           170:        "(logical1 (*)())0", "(shortlogical (*)())0",
        !           171:        "(logical (*)())0", "(char (*)())0", "(int (*)())0"
        !           172:        };
        !           173: 
        !           174: char *dflt1proc[] = { "(U_fp)0", "(??bug??)0", "(I1_fp)0",
        !           175:        "(J_fp)0", "(I_fp)0",
        !           176: #ifdef TYQUAD
        !           177:        "(Q_fp)0",
        !           178: #endif
        !           179:        "(R_fp)0", "(D_fp)0", "(C_fp)0", "(Z_fp)0",
        !           180:        "(L1_fp)0","(L2_fp)0",
        !           181:        "(L_fp)0", "(H_fp)0", "(S_fp)0"
        !           182:        };
        !           183: 
        !           184: char **dfltproc = dflt0proc;
        !           185: 
        !           186: static char Bug[] = "bug";
        !           187: 
        !           188: char *ftn_types[] = { "external", "??", "integer*1",
        !           189:        "integer*2", "integer",
        !           190: #ifdef TYQUAD
        !           191:        "integer*8",
        !           192: #endif
        !           193:        "real",
        !           194:        "double precision", "complex", "double complex",
        !           195:        "logical*1", "logical*2",
        !           196:        "logical", "character", "subroutine",
        !           197:        Bug,Bug,Bug,Bug,Bug,Bug,Bug,Bug,Bug, "ftnlen"
        !           198:        };
        !           199: 
        !           200: int init_ac[TYSUBR+1] = { 0,0,0,0,0,0,0,
        !           201: #ifdef TYQUAD
        !           202:                          0,
        !           203: #endif
        !           204:                          1, 1, 0, 0, 0, 2};
        !           205: 
        !           206: int proctype   = TYUNKNOWN;
        !           207: char *procname;
        !           208: int rtvlabel[NTYPES0];
        !           209: Addrp retslot;                 /* Holds automatic variable which was
        !           210:                                   allocated the function return value
        !           211:                                   */
        !           212: Addrp xretslot[NTYPES0];       /* for multiple entry points */
        !           213: int cxslot     = -1;
        !           214: int chslot     = -1;
        !           215: int chlgslot   = -1;
        !           216: int procclass  = CLUNKNOWN;
        !           217: int nentry;
        !           218: int nallargs;
        !           219: int nallchargs;
        !           220: flag multitype;
        !           221: ftnint procleng;
        !           222: long lastiolabno;
        !           223: int lastlabno;
        !           224: int lastvarno;
        !           225: int lastargslot;
        !           226: int autonum[TYVOID];
        !           227: char *av_pfix[TYVOID] = {"??TYUNKNOWN??", "a","i1","s","i",
        !           228: #ifdef TYQUAD
        !           229:                         "i8",
        !           230: #endif
        !           231:                        "r","d","q","z","L1","L2","L","ch",
        !           232:                         "??TYSUBR??", "??TYERROR??","ci", "ici",
        !           233:                         "o", "cl", "al", "ioin" };
        !           234: 
        !           235: extern int maxctl;
        !           236: struct Ctlframe *ctls;
        !           237: struct Ctlframe *ctlstack;
        !           238: struct Ctlframe *lastctl;
        !           239: 
        !           240: Namep regnamep[MAXREGVAR];
        !           241: int highregvar;
        !           242: int nregvar;
        !           243: 
        !           244: extern int maxext;
        !           245: Extsym *extsymtab;
        !           246: Extsym *nextext;
        !           247: Extsym *lastext;
        !           248: 
        !           249: extern int maxequiv;
        !           250: struct Equivblock *eqvclass;
        !           251: 
        !           252: extern int maxhash;
        !           253: struct Hashentry *hashtab;
        !           254: struct Hashentry *lasthash;
        !           255: 
        !           256: extern int maxstno;            /* Maximum number of statement labels */
        !           257: struct Labelblock *labeltab;
        !           258: struct Labelblock *labtabend;
        !           259: struct Labelblock *highlabtab;
        !           260: 
        !           261: int maxdim     = MAXDIM;
        !           262: struct Rplblock *rpllist       = NULL;
        !           263: struct Chain *curdtp   = NULL;
        !           264: flag toomanyinit;
        !           265: ftnint curdtelt;
        !           266: chainp templist[TYVOID];
        !           267: chainp holdtemps;
        !           268: int dorange    = 0;
        !           269: struct Entrypoint *entries     = NULL;
        !           270: 
        !           271: chainp chains  = NULL;
        !           272: 
        !           273: flag inioctl;
        !           274: int iostmt;
        !           275: int nioctl;
        !           276: int nequiv     = 0;
        !           277: int eqvstart   = 0;
        !           278: int nintnames  = 0;
        !           279: extern int maxlablist;
        !           280: struct Labelblock **labarray;
        !           281: 
        !           282: struct Literal *litpool;
        !           283: int nliterals;
        !           284: 
        !           285: char dflttype[26];
        !           286: char hextoi_tab[Table_size], Letters[Table_size];
        !           287: char *ei_first, *ei_next, *ei_last;
        !           288: char *wh_first, *wh_next, *wh_last;
        !           289: 
        !           290: #define ALLOCN(n,x)    (struct x *) ckalloc((n)*sizeof(struct x))
        !           291: 
        !           292: fileinit()
        !           293: {
        !           294:        register char *s;
        !           295:        register int i, j;
        !           296:        extern void fmt_init(), mem_init(), np_init();
        !           297: 
        !           298:        lastiolabno = 100000;
        !           299:        lastlabno = 0;
        !           300:        lastvarno = 0;
        !           301:        nliterals = 0;
        !           302:        nerr = 0;
        !           303: 
        !           304:        infile = stdin;
        !           305: 
        !           306:        memset(dflttype, tyreal, 26);
        !           307:        memset(dflttype + 'i' - 'a', tyint, 6);
        !           308:        memset(hextoi_tab, 16, sizeof(hextoi_tab));
        !           309:        for(i = 0, s = "0123456789abcdef"; *s; i++, s++)
        !           310:                hextoi(*s) = i;
        !           311:        for(i = 10, s = "ABCDEF"; *s; i++, s++)
        !           312:                hextoi(*s) = i;
        !           313:        for(j = 0, s = "abcdefghijklmnopqrstuvwxyz"; i = *s++; j++)
        !           314:                Letters[i] = Letters[i+'A'-'a'] = j;
        !           315: 
        !           316:        ctls = ALLOCN(maxctl+1, Ctlframe);
        !           317:        extsymtab = ALLOCN(maxext, Extsym);
        !           318:        eqvclass = ALLOCN(maxequiv, Equivblock);
        !           319:        hashtab = ALLOCN(maxhash, Hashentry);
        !           320:        labeltab = ALLOCN(maxstno, Labelblock);
        !           321:        litpool = ALLOCN(maxliterals, Literal);
        !           322:        labarray = (struct Labelblock **)ckalloc(maxlablist*
        !           323:                                        sizeof(struct Labelblock *));
        !           324:        fmt_init();
        !           325:        mem_init();
        !           326:        np_init();
        !           327: 
        !           328:        ctlstack = ctls++;
        !           329:        lastctl = ctls + maxctl;
        !           330:        nextext = extsymtab;
        !           331:        lastext = extsymtab + maxext;
        !           332:        lasthash = hashtab + maxhash;
        !           333:        labtabend = labeltab + maxstno;
        !           334:        highlabtab = labeltab;
        !           335:        main_alias[0] = '\0';
        !           336:        if (forcedouble)
        !           337:                dfltproc[TYREAL] = dfltproc[TYDREAL];
        !           338: 
        !           339: /* Initialize the routines for providing C output */
        !           340: 
        !           341:        out_init ();
        !           342: }
        !           343: 
        !           344: hashclear()    /* clear hash table */
        !           345: {
        !           346:        register struct Hashentry *hp;
        !           347:        register Namep p;
        !           348:        register struct Dimblock *q;
        !           349:        register int i;
        !           350: 
        !           351:        for(hp = hashtab ; hp < lasthash ; ++hp)
        !           352:                if(p = hp->varp)
        !           353:                {
        !           354:                        frexpr(p->vleng);
        !           355:                        if(q = p->vdim)
        !           356:                        {
        !           357:                                for(i = 0 ; i < q->ndim ; ++i)
        !           358:                                {
        !           359:                                        frexpr(q->dims[i].dimsize);
        !           360:                                        frexpr(q->dims[i].dimexpr);
        !           361:                                }
        !           362:                                frexpr(q->nelt);
        !           363:                                frexpr(q->baseoffset);
        !           364:                                frexpr(q->basexpr);
        !           365:                                free( (charptr) q);
        !           366:                        }
        !           367:                        if(p->vclass == CLNAMELIST)
        !           368:                                frchain( &(p->varxptr.namelist) );
        !           369:                        free( (charptr) p);
        !           370:                        hp->varp = NULL;
        !           371:                }
        !           372:        }
        !           373: 
        !           374: procinit()
        !           375: {
        !           376:        register struct Labelblock *lp;
        !           377:        struct Chain *cp;
        !           378:        int i;
        !           379:        struct memblock;
        !           380:        extern struct memblock *curmemblock, *firstmemblock;
        !           381:        extern char *mem_first, *mem_next, *mem_last, *mem0_last;
        !           382:        extern void frexchain();
        !           383: 
        !           384:        curmemblock = firstmemblock;
        !           385:        mem_next = mem_first;
        !           386:        mem_last = mem0_last;
        !           387:        ei_next = ei_first = ei_last = 0;
        !           388:        wh_next = wh_first = wh_last = 0;
        !           389:        iob_list = 0;
        !           390:        for(i = 0; i < 9; i++)
        !           391:                io_structs[i] = 0;
        !           392: 
        !           393:        parstate = OUTSIDE;
        !           394:        headerdone = NO;
        !           395:        blklevel = 1;
        !           396:        saveall = NO;
        !           397:        substars = NO;
        !           398:        nwarn = 0;
        !           399:        thislabel = NULL;
        !           400:        needkwd = 0;
        !           401: 
        !           402:        proctype = TYUNKNOWN;
        !           403:        procname = "MAIN_";
        !           404:        procclass = CLUNKNOWN;
        !           405:        nentry = 0;
        !           406:        nallargs = nallchargs = 0;
        !           407:        multitype = NO;
        !           408:        retslot = NULL;
        !           409:        for(i = 0; i < NTYPES0; i++) {
        !           410:                frexpr((expptr)xretslot[i]);
        !           411:                xretslot[i] = 0;
        !           412:                }
        !           413:        cxslot = -1;
        !           414:        chslot = -1;
        !           415:        chlgslot = -1;
        !           416:        procleng = 0;
        !           417:        blklevel = 1;
        !           418:        lastargslot = 0;
        !           419: 
        !           420:        for(lp = labeltab ; lp < labtabend ; ++lp)
        !           421:                lp->stateno = 0;
        !           422: 
        !           423:        hashclear();
        !           424: 
        !           425: /* Clear the list of newly generated identifiers from the previous
        !           426:    function */
        !           427: 
        !           428:        frexchain(&new_vars);
        !           429:        frexchain(&used_builtins);
        !           430:        frchain(&assigned_fmts);
        !           431:        frchain(&allargs);
        !           432:        frchain(&earlylabs);
        !           433: 
        !           434:        nintnames = 0;
        !           435:        highlabtab = labeltab;
        !           436: 
        !           437:        ctlstack = ctls - 1;
        !           438:        for(i = TYADDR; i < TYVOID; i++) {
        !           439:                for(cp = templist[i]; cp ; cp = cp->nextp)
        !           440:                        free( (charptr) (cp->datap) );
        !           441:                frchain(templist + i);
        !           442:                autonum[i] = 0;
        !           443:                }
        !           444:        holdtemps = NULL;
        !           445:        dorange = 0;
        !           446:        nregvar = 0;
        !           447:        highregvar = 0;
        !           448:        entries = NULL;
        !           449:        rpllist = NULL;
        !           450:        inioctl = NO;
        !           451:        eqvstart += nequiv;
        !           452:        nequiv = 0;
        !           453:        dcomplex_seen = 0;
        !           454: 
        !           455:        for(i = 0 ; i<NTYPES0 ; ++i)
        !           456:                rtvlabel[i] = 0;
        !           457: 
        !           458:        if(undeftype)
        !           459:                setimpl(TYUNKNOWN, (ftnint) 0, 'a', 'z');
        !           460:        else
        !           461:        {
        !           462:                setimpl(tyreal, (ftnint) 0, 'a', 'z');
        !           463:                setimpl(tyint,  (ftnint) 0, 'i', 'n');
        !           464:        }
        !           465:        setimpl(-STGBSS, (ftnint) 0, 'a', 'z'); /* set class */
        !           466:        setlog();
        !           467: }
        !           468: 
        !           469: 
        !           470: 
        !           471: 
        !           472: setimpl(type, length, c1, c2)
        !           473: int type;
        !           474: ftnint length;
        !           475: int c1, c2;
        !           476: {
        !           477:        int i;
        !           478:        char buff[100];
        !           479: 
        !           480:        if(c1==0 || c2==0)
        !           481:                return;
        !           482: 
        !           483:        if(c1 > c2) {
        !           484:                sprintf(buff, "characters out of order in implicit:%c-%c", c1, c2);
        !           485:                err(buff);
        !           486:                }
        !           487:        else {
        !           488:                c1 = letter(c1);
        !           489:                c2 = letter(c2);
        !           490:                if(type < 0)
        !           491:                        for(i = c1 ; i<=c2 ; ++i)
        !           492:                                implstg[i] = - type;
        !           493:                else {
        !           494:                        type = lengtype(type, length);
        !           495:                        if(type == TYCHAR) {
        !           496:                                if (length < 0) {
        !           497:                                        err("length (*) in implicit");
        !           498:                                        length = 1;
        !           499:                                        }
        !           500:                                }
        !           501:                        else if (type != TYLONG)
        !           502:                                length = 0;
        !           503:                        for(i = c1 ; i<=c2 ; ++i) {
        !           504:                                impltype[i] = type;
        !           505:                                implleng[i] = length;
        !           506:                                }
        !           507:                        }
        !           508:                }
        !           509:        }

unix.superglobalmegacorp.com

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