Annotation of 43BSD/usr.bin/struct/1.fort.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)1.fort.c   4.1     (Berkeley)      2/11/83";
        !             3: #endif not lint
        !             4: 
        !             5: #include <stdio.h>
        !             6: #include "1.incl.h"
        !             7: #include  "1.defs.h"
        !             8: #include "def.h"
        !             9: 
        !            10: 
        !            11: act(k,c,bufptr)
        !            12: int k,bufptr;
        !            13: char c;
        !            14:        {
        !            15:        long ftemp;
        !            16:        struct lablist *makelab();
        !            17:        switch(k)
        !            18:                /*handle labels */
        !            19:                {case 1:
        !            20:                        if (c != ' ')
        !            21:                                {
        !            22:                        ftemp = c - '0';
        !            23:                                newlab->labelt = 10L * newlab->labelt + ftemp;
        !            24: 
        !            25:                                if (newlab->labelt > 99999L)
        !            26:                                        {
        !            27:                                error("in syntax:\n","","");
        !            28:                                        fprintf(stderr,"line %d: label beginning %D too long\n%s\n",
        !            29:                                                begline,newlab->labelt,buffer);
        !            30:                                        fprintf(stderr,"treating line as straight line code\n");
        !            31:                                        return(ABORT);
        !            32:                                        }
        !            33:                                }
        !            34:                        break;
        !            35: 
        !            36:                case 3:  nlabs++;
        !            37:                        newlab = newlab->nxtlab = makelab(0L);
        !            38:                        break;
        !            39: 
        !            40:                /* handle labsw- switches and labels */
        !            41:                /* handle if statements */
        !            42:                case 30:  counter++;  break;
        !            43: 
        !            44:                case 31:
        !            45:                        counter--;
        !            46:                        if (counter)  return(_if1);
        !            47:                        else
        !            48:                                {
        !            49:                                pred = remtilda(stralloc(&buffer[p1],bufptr - p1));
        !            50:                                p3 = bufptr + 1;        /* p3 pts. to 1st symbol after ) */
        !            51:                                flag = 1;
        !            52:                                return(_if2);  }
        !            53: 
        !            54:                case 45:                        /* set p1 to pt.to 1st symbol of pred */
        !            55:                        p1 = bufptr + 1;
        !            56:                        act(30,c,bufptr);  break;
        !            57: 
        !            58:                /* handle do loops */
        !            59:                case 61:  p1 = bufptr;  break;   /* p1 pts. to 1st symbol of increment  string */
        !            60: 
        !            61:                case 62:  counter ++;  break;
        !            62: 
        !            63:                case 63:  counter --; break;
        !            64: 
        !            65:                case 64: 
        !            66:                        if (counter != 0) break;
        !            67:                        act(162,c,bufptr);
        !            68:                        return(ABORT);
        !            69: 
        !            70:                case 70:  if (counter)  return(_rwp);
        !            71:                        r1 = bufptr;
        !            72:                        return(_rwlab);
        !            73: 
        !            74:                case 72:        exp = remtilda( stralloc(&buffer[r1+1],bufptr - r1 - 1));  break;
        !            75: 
        !            76:                case 73:  endlab = newlab;  
        !            77:                        break;
        !            78: 
        !            79:                case 74:  errlab = newlab;  
        !            80:                        break;
        !            81: 
        !            82:                case 75:  reflab = newlab;
        !            83:                        act(3,c,bufptr);
        !            84:                        break;
        !            85: 
        !            86:                case 76:  r1 = bufptr;  break;
        !            87: 
        !            88:                case 77:
        !            89:                        if (!counter)
        !            90:                        {
        !            91:                                act(111,c,bufptr);
        !            92:                                return(ABORT);
        !            93:                                }
        !            94:                        counter--;
        !            95:                        break;
        !            96:                /* generate nodes of all types */
        !            97:                case 111:               /* st. line code */
        !            98:                        stcode = remtilda(stralloc(&buffer[p3],endbuf - p3));
        !            99:                        recognize(STLNVX,flag);
        !           100:                        return(ABORT);
        !           101: 
        !           102:                case 122:                       /* uncond. goto */
        !           103:                        recognize(ungo,flag);
        !           104:                        break;
        !           105: 
        !           106:                case 123:                       /* assigned goto */
        !           107:                        act(72,c,bufptr);
        !           108:                        faterr("in parsing:\n","assigned goto must have list of labels","");
        !           109: 
        !           110:                case 124:                       /* ass. goto, labels */
        !           111:                        recognize(ASGOVX, flag);
        !           112:                        break;
        !           113: 
        !           114:                case 125:                       /* computed goto*/
        !           115:                        exp = remtilda( stralloc(&buffer[r1+1],bufptr - r1 - 1));
        !           116:                        recognize(COMPVX, flag);
        !           117:                        return(ABORT);
        !           118: 
        !           119:                case 133:                       /* if() =  is a simple statement, so reset flag to 0 */
        !           120:                        flag = 0;
        !           121:                        act(111,c,bufptr);
        !           122:                        return(ABORT);
        !           123: 
        !           124:                case 141:                       /* arith. if */
        !           125:                        recognize(arithif, 0);
        !           126:                        break;
        !           127: 
        !           128:                case 150:                       /* label assignment */
        !           129:                        exp = remtilda( stralloc(&buffer[r1+1],bufptr - r1 - 1));
        !           130:                        recognize(ASVX, flag);
        !           131:                        break;
        !           132: 
        !           133:                case 162:                       /*  do node */
        !           134:                        inc = remtilda(stralloc(&buffer[p1],endbuf - p1));
        !           135:                        recognize(DOVX, 0);
        !           136:                        break;
        !           137: 
        !           138:                case 180:                       /* continue statement */
        !           139:                        recognize(contst, 0);
        !           140:                        break;
        !           141: 
        !           142:                case 200:               /* function or subroutine statement */
        !           143:                        progtype = sub;
        !           144:                        nameline = begline;
        !           145:                        recognize(STLNVX,0);
        !           146:                        break;
        !           147: 
        !           148: 
        !           149:                case 210:               /* block data statement */
        !           150:                        progtype = blockdata;
        !           151:                        act(111,c,bufptr);
        !           152:                        return(ABORT);
        !           153: 
        !           154:                case 300:                       /* return statement */
        !           155:                        recognize(RETVX,flag);
        !           156:                        break;
        !           157: 
        !           158: 
        !           159:                case 350:                       /* stop statement */
        !           160:                        recognize(STOPVX, flag);
        !           161:                        break;
        !           162: 
        !           163: 
        !           164:                case 400:                       /* end statement */
        !           165:                        if (progtype == sub)
        !           166:                                act(300, c, bufptr);
        !           167:                        else
        !           168:                                act(350, c, bufptr);
        !           169:                        return(endrt);
        !           170: 
        !           171:                case 500:
        !           172:                        prerw = remtilda(stralloc(&buffer[p3],r1 - p3 + 1));
        !           173:                        postrw = remtilda(stralloc(&buffer[r2],endbuf - r2));
        !           174:                        if (reflab || endlab || errlab)  recognize(IOVX,flag);
        !           175:                        else recognize(STLNVX,flag);
        !           176:                        return(ABORT);
        !           177: 
        !           178:                case 510:  r2 = bufptr;
        !           179:                        act(3,c,bufptr);
        !           180:                        act(500,c,bufptr);
        !           181:                        return(ABORT);
        !           182: 
        !           183:                case 520:               r2 = bufptr;
        !           184:                        reflab = newlab;
        !           185:                        act(3,c,bufptr);
        !           186:                        act(500,c,bufptr);
        !           187:                        return(ABORT);
        !           188: 
        !           189: 
        !           190:                case 600:
        !           191:                        recognize(FMTVX,0);  return(ABORT);
        !           192: 
        !           193:                case 700:
        !           194:                        stcode = remtilda(stralloc(&buffer[p3],endbuf - p3));
        !           195:                        recognize(entry,0);  return(ABORT);
        !           196:                /* error */
        !           197:                case 999:
        !           198:                        printf("error: symbol '%c' should not occur as %d'th symbol of: \n%s\n",
        !           199:                                c,bufptr, buffer);
        !           200:                        return(ABORT);
        !           201:                }
        !           202:        return(nulls);
        !           203:        }
        !           204: 
        !           205: 
        !           206: 
        !           207: struct lablist *makelab(x)
        !           208: long x;
        !           209:        {
        !           210:        struct lablist *p;
        !           211:        p = challoc (sizeof(*p));
        !           212:        p->labelt = x;
        !           213:        p->nxtlab = 0;
        !           214:        return(p);
        !           215:        }
        !           216: 
        !           217: 
        !           218: long label(i)
        !           219: int i;
        !           220:        {
        !           221:        struct lablist *j;
        !           222:        for (j = linelabs; i > 0; i--)
        !           223:                {
        !           224:                if (j == 0) return(0L);
        !           225:                j = j->nxtlab;
        !           226:                }
        !           227:        if (j)
        !           228:                return(j->labelt);
        !           229:        else
        !           230:                return(0L);
        !           231:        }
        !           232: 
        !           233: 
        !           234: freelabs()
        !           235:        {
        !           236:        struct lablist *j,*k;
        !           237:        j = linelabs;
        !           238:        while(j != 0)
        !           239:                {
        !           240:                k = j->nxtlab;
        !           241:                chfree(j,sizeof(*j));
        !           242:                j = k;
        !           243:                }
        !           244:        }
        !           245: 
        !           246: 
        !           247: stralloc(ad,n)                 /* allocate space, copy n chars from address ad, add '0' */
        !           248: int n; char *ad;
        !           249:        {
        !           250:        char *cp;
        !           251:        cp = galloc(n+1);
        !           252:        copycs(ad,cp,n);
        !           253:        return(cp);
        !           254:        }
        !           255: 
        !           256: 
        !           257: remtilda(s)                    /* change ~ to blank */
        !           258: char *s;
        !           259:        {
        !           260:        int i;
        !           261:        for (i = 0; s[i] != '\0'; i++)
        !           262:                if (s[i] == '~') s[i] = ' ';
        !           263:        return(s);
        !           264:        }

unix.superglobalmegacorp.com

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