Annotation of researchv10no/cmd/pret/pret8.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include "pret.h"
                      3: 
                      4: struct {
                      5:        char name[MAXNAME];
                      6:        int status;
                      7:        int initval;
                      8:        int index;      /* set if used as array */
                      9:        int width;      /* in bits: for supertrace */
                     10: } vartbl[MANY];
                     11: 
                     12: struct {
                     13:        int m;          /* index of basename in vartbl */
                     14:        int n;          /* reference to the index      */
                     15: } ivartbl[MANY];
                     16: int realnrvars=0;
                     17: 
                     18: struct {
                     19:        int m;          /* index of basename in globvartbl */
                     20:        int n;          /* reference to the index      */
                     21: } igvartbl[MANY];
                     22: int realgvars=0;
                     23: 
                     24: struct {
                     25:        char name[MAXNAME];
                     26:        int status;
                     27:        int initval;
                     28:        int index;
                     29:        int width;
                     30: } globvartbl[MANY];
                     31: 
                     32: int nrvars = 0;
                     33: int nrglobvars = 0;
                     34: int varwidths = 0;
                     35: 
                     36: extern char procname[MAXNAME];
                     37: extern char refname[MAXNAME];
                     38: extern int anyerror, pid, rid;
                     39: 
                     40: reallocal(m, n)
                     41: {      int i;
                     42:        for (i = 0; i < realnrvars; i++)
                     43:                if (ivartbl[i].m == m && ivartbl[i].n == n)
                     44:                        return i;
                     45:        if ((i = realnrvars++) >= MANY)
                     46:                whoops("reallocal overflow");
                     47:        ivartbl[i].n = n;
                     48:        ivartbl[i].m = m;
                     49:        return i;
                     50: }
                     51: 
                     52: realglobal(m, n)
                     53: {      int i;
                     54:        for (i = 0; i < realgvars; i++)
                     55:                if (igvartbl[i].m == m && igvartbl[i].n == n)
                     56:                        return i;
                     57:        if ((i = realgvars++) >= MANY)
                     58:                whoops("realglobal overflow");
                     59:        igvartbl[i].n = n;
                     60:        igvartbl[i].m = m;
                     61:        return i;
                     62: }
                     63: 
                     64: twiddle(suff)
                     65:        char *suff;
                     66: {      int i; extern int extras;
                     67: 
                     68:        for (i = 0; i < nrvars; i++)
                     69:                if (strcmp(vartbl[i].name, suff) == 0)
                     70:                {       vartbl[i].initval++;
                     71:                        return;
                     72:                }
                     73:        whoops("cannot happen, twiddle");
                     74: }
                     75: 
                     76: isarrayvar(suff)
                     77:        char *suff;
                     78: {      int i;
                     79: 
                     80:        for (i = 0; i < nrvars; i++)
                     81:                if (strcmp(vartbl[i].name, suff) == 0
                     82:                && vartbl[i].index != NONE)
                     83:                        return 1;
                     84:        for (i = 0; i < nrglobvars; i++)
                     85:                if (strcmp(globvartbl[i].name, suff) == 0
                     86:                && globvartbl[i].index != NONE)
                     87:                        return 1;
                     88:        return 0;
                     89: }
                     90: 
                     91: looklocal(suff, how, index)
                     92:        char *suff;
                     93: {      int i;
                     94: 
                     95:        for (i = 0; i < nrvars; i++)
                     96:                if (strcmp(vartbl[i].name, suff) == 0)
                     97:                {       vartbl[i].status |= how;
                     98:                        break;
                     99:                }
                    100: 
                    101:        if (i != nrvars && how == DCL)
                    102:                yyerror("local variable redeclared, %s", suff);
                    103: 
                    104:        if (i != nrvars && how == RFR && index != vartbl[i].index
                    105:        && (index == NONE || vartbl[i].index == NONE))
                    106:                yyerror("local variable array indexing error, %s", suff);
                    107:        return i;
                    108: }
                    109: 
                    110: lookglobal(suff, how, index)
                    111:        char *suff;
                    112: {      int i;
                    113: 
                    114:        for (i = 0; i < nrglobvars; i++)
                    115:                if (strcmp(globvartbl[i].name, suff) == 0)
                    116:                {       globvartbl[i].status |= how;
                    117:                        break;
                    118:                }
                    119: 
                    120:        if (pid == NONE && rid == NONE && i != nrglobvars && how == DCL)
                    121:                yyerror("global variable redeclared, %s", suff);
                    122: 
                    123:        if (i != nrglobvars && how == RFR && index != globvartbl[i].index
                    124:        && (index == NONE || globvartbl[i].index == NONE))
                    125:                yyerror("global variable array indexing error, %s", suff);
                    126:        return i;
                    127: }
                    128: 
                    129: putlocal(what, ival, how, index, width)
                    130:        char *what;
                    131: {      int i;
                    132: 
                    133:        if ((i = nrvars++) >= MANY)
                    134:                whoops("too many variables");
                    135: 
                    136:        strcpy(vartbl[i].name, what);
                    137:        vartbl[i].initval = ival;
                    138:        vartbl[i].status = how;
                    139:        vartbl[i].index = index;
                    140:        vartbl[i].width = width;
                    141:        if (index != NONE && ival != NONE)
                    142:        {       fprintf(stderr,"error: no automatic initialization");
                    143:                fprintf(stderr, " of array `%s'\n",what);
                    144:                anyerror++;
                    145:        }
                    146:        if (width != 0) varwidths=1;
                    147:        return (MANY + i);
                    148: }
                    149: 
                    150: putglobal(what, ival, how, index, width)
                    151:        char *what;
                    152: {      int i;
                    153: 
                    154:        if ((i = nrglobvars++) >= MANY)
                    155:                whoops("too many variables");
                    156:        strcpy(globvartbl[i].name, what);
                    157:        globvartbl[i].initval = ival;
                    158:        globvartbl[i].status = how;
                    159:        globvartbl[i].index = index;
                    160:        globvartbl[i].width = width;
                    161:        if (index != NONE && ival != NONE)
                    162:        {       fprintf(stderr,"error: no automatic initialization");
                    163:                fprintf(stderr, " of array `%s'\n",what);
                    164:                anyerror++;
                    165:        }
                    166:        if (width != 0) varwidths=1;
                    167: 
                    168:        return i;
                    169: }
                    170: /*
                    171:  * arrays are merely patched in for now
                    172:  */
                    173: addvarname(what, how, ival, index, width)
                    174:        char *what;
                    175: {
                    176:        int i, islocal = (rid != NONE || pid != NONE);
                    177: 
                    178:        if (rid != NONE && (i = Fparname(what, rid, ISV, NONE, how, index)) != -1)
                    179:                return (2*MANY + i);
                    180:        /* formal parameter may not be an array reference */
                    181: 
                    182:        if (islocal && (i = looklocal(what, how, index)) < nrvars)
                    183:                return (MANY + reallocal(i, index));
                    184:        if ((i = lookglobal(what, how, index)) < nrglobvars)
                    185:                return realglobal(i, index);
                    186: 
                    187:        if (how == RFR)
                    188:                yyerror("undeclared variable, %s", what);
                    189:        if (islocal)
                    190:                return putlocal(what, ival, how, index, width);
                    191: 
                    192:        return putglobal(what, ival, how, index, width);
                    193: }
                    194: 
                    195: checklocvars()
                    196: {      int i;
                    197: 
                    198:        for (i = 0; i < nrvars; i++)
                    199:                if (vartbl[i].status == DCL)
                    200:                {       printf("%s: ", (pid != NONE)?procname:refname);
                    201:                        printf("pvar %s is never used\n", vartbl[i].name);
                    202:                }
                    203: }
                    204: 
                    205: checkglobvars()
                    206: {      int i;
                    207: 
                    208:        for (i = 0; i < nrglobvars; i++)
                    209:                if (globvartbl[i].status == DCL)
                    210:                {       printf("global: ");
                    211:                        printf("pvar %s is never used\n", globvartbl[i].name);
                    212:                }
                    213: }
                    214: 
                    215: numglobvars(fd)
                    216:        FILE *fd;
                    217: {      int i;
                    218: 
                    219:        fprintf(fd, "%d g-variables: ", nrglobvars);
                    220:        for (i = 0; i < nrglobvars; i++)
                    221:                fprintf(fd, "%d/%d,", globvartbl[i].initval, globvartbl[i].index);
                    222:        putc('\n', fd);
                    223:        if (varwidths)
                    224:        {       fprintf(fd, "%d g-widths: ", nrglobvars);
                    225:                for (i = 0; i < nrglobvars; i++)
                    226:                        fprintf(fd, "%d,", globvartbl[i].width);
                    227:                putc('\n', fd);
                    228:        }
                    229:        fprintf(fd, "%d g-uses: ", realgvars);
                    230:        for (i = 0; i < realgvars; i++)
                    231:                fprintf(fd, "%d/%d,", igvartbl[i].m, igvartbl[i].n);            
                    232:        putc('\n', fd);
                    233: }
                    234: 
                    235: numlocvars(fd)
                    236:        FILE *fd;
                    237: {      int i;
                    238: 
                    239:        fprintf(fd, "%d l-variables: ", nrvars);
                    240:        for (i = 0; i < nrvars; i++)
                    241:                fprintf(fd, "%d/%d,", vartbl[i].initval, vartbl[i].index);
                    242:        putc('\n', fd);
                    243:        if (varwidths)
                    244:        {       fprintf(fd, "%d l-widths: ", nrvars);
                    245:                for (i = 0; i < nrvars; i++)
                    246:                        fprintf(fd, "%d,", vartbl[i].width);
                    247:                putc('\n', fd);
                    248:        }
                    249: 
                    250:        fprintf(fd, "%d l-uses: ", realnrvars);
                    251:        for (i = 0; i < realnrvars; i++)
                    252:                fprintf(fd, "%d/%d,", ivartbl[i].m, ivartbl[i].n);              
                    253:        putc('\n', fd);
                    254: }

unix.superglobalmegacorp.com

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