Annotation of 43BSDTahoe/usr.bin/struct/4.out.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)4.out.c    4.1     (Berkeley)      2/11/83";
                      3: #endif not lint
                      4: 
                      5: #include <stdio.h>
                      6: #include "def.h"
                      7: #include "4.def.h"
                      8: #include "3.def.h"
                      9: 
                     10: outrat(v,tab,tabfirst)
                     11: VERT v;
                     12: int tab;               /* number of tabs to indent */
                     13: LOGICAL tabfirst;      /* FALSE if doing IF of ELSE IF */
                     14:        {
                     15:        LOGICAL ndcomma;
                     16:        VERT w;
                     17:        int type,i;
                     18:        type = NTYPE(v);
                     19:        if (hascom[type])
                     20:                prcom(v);
                     21:        if (!LABEL(v) && type == FMTVX)
                     22:                {
                     23:                OUTSTR("#following unreferenced format statement commented out\n");
                     24:                OUTSTR("#");
                     25:                }
                     26:        if (LABEL(v) && type != ITERVX)
                     27:                {
                     28:                ASSERT(tabfirst, outrat);
                     29:                prlab(LABEL(v),tab);
                     30:                }
                     31:        else if (tabfirst && type != DUMVX && type != ITERVX)
                     32:                TABOVER(tab);
                     33: 
                     34:        switch(type)
                     35:                {
                     36:                case DUMVX:
                     37:                        newlevel(v,0,tab,YESTAB);
                     38:                        break;
                     39:                case GOVX:
                     40:                        OUTSTR("go to ");
                     41:                        OUTNUM(LABEL(ARC(v,0)));
                     42:                        OUTSTR("\n");
                     43:                        break;
                     44:                case STOPVX:
                     45:                        if (progtype != blockdata)
                     46:                                OUTSTR("stop\n");
                     47:                        break;
                     48:                case RETVX:
                     49:                        OUTSTR("return\n");
                     50:                        break;
                     51:                case BRKVX:
                     52:                        if (!levbrk)
                     53:                                {
                     54:                                ASSERT(LEVEL(v) == 1,outrat);
                     55:                                OUTSTR("break\n");
                     56:                                }
                     57:                        else
                     58:                                {
                     59:                                OUTSTR("break ");
                     60:                                OUTNUM(LEVEL(v));
                     61:                                OUTSTR("\n");
                     62:                                }
                     63:                        break;
                     64:                case NXTVX:
                     65:                        if (!levnxt)
                     66:                                {
                     67:                                ASSERT(LEVEL(v) == 1,outrat);
                     68:                                OUTSTR("next\n");
                     69:                                }
                     70:                        else
                     71:                                {
                     72:                                OUTSTR("next ");
                     73:                                OUTNUM(LEVEL(v));
                     74:                                OUTSTR("\n");
                     75:                                }
                     76:                        break;
                     77:                case ASGOVX:
                     78:                case COMPVX:
                     79:                        OUTSTR("goto ");
                     80:                        if (type == ASGOVX)
                     81:                                {
                     82:                                OUTSTR(EXP(v));
                     83:                                OUTSTR(",");
                     84:                                }
                     85:                        OUTSTR("(");
                     86:                        for (i = ARCNUM(v)-1; i >=0; --i)               /* arcs were stored backward */
                     87:                                {
                     88:                                OUTNUM(LABEL(ARC(v,i)));
                     89:                                if (i > 0) OUTSTR(",");
                     90:                                }
                     91:                        OUTSTR(")");
                     92:                        if (type == COMPVX)
                     93:                                {
                     94:                                OUTSTR(",");
                     95:                                OUTSTR(EXP(v));
                     96:                                }
                     97:                        OUTSTR("\n");
                     98:                        break;
                     99:                case ASVX:
                    100:                        OUTSTR("assign ");
                    101:                        OUTNUM(LABEL(LABREF(v)));
                    102:                        OUTSTR(" to ");
                    103:                        OUTSTR(EXP(v));
                    104:                        OUTSTR("\n");
                    105:                        break;
                    106:                case IFVX:
                    107:                        OUTSTR("IF");
                    108:                        prpred(v,TRUE);
                    109:                        if (IFTHEN(v))
                    110:                                newlevel(v,THEN,tab+1,YESTAB);
                    111:                        else
                    112:                                {
                    113:                                newlevel(v,THEN,tab+1,YESTAB);
                    114:                                TABOVER(tab);
                    115:                                OUTSTR("ELSE ");
                    116:                                w = LCHILD(v,ELSE);
                    117:                                ASSERT(DEFINED(w),outrat);
                    118:                                if (NTYPE(w) == IFVX && !LABEL(w) && !DEFINED(RSIB(w)) &&
                    119:                                        !HASBRACE(v,ELSE) )
                    120:                                        newlevel(v,ELSE,tab,NOTAB);
                    121:                                else
                    122:                                        newlevel(v,ELSE,tab+1,YESTAB);
                    123:                                }
                    124:                        break;
                    125:                case ITERVX:
                    126:                        newlevel(v,0,tab,YESTAB);
                    127:                        ASSERT(DEFINED(NXT(v)),outrat);
                    128:                        if (LABEL(NXT(v)))
                    129:                                {
                    130:                                prlab(LABEL(NXT(v)),tab);
                    131:                                OUTSTR("continue\n");
                    132:                                }
                    133:                        break;
                    134:                case DOVX:
                    135:                        OUTSTR("DO ");
                    136:                        OUTSTR(INC(v));
                    137:                        newlevel(v,0,tab+1,YESTAB);
                    138:                        break;
                    139:                case LOOPVX:
                    140:                case UNTVX:
                    141:                        OUTSTR("REPEAT");
                    142:                        newlevel(v,0,tab+1,YESTAB);
                    143:                        if (type == UNTVX)
                    144:                                {
                    145:                                TABOVER(tab+1);
                    146:                                OUTSTR("UNTIL");
                    147:                                ASSERT(DEFINED(ARC(v,0)),outrat);
                    148:                                prpred(LPRED(ARC(v,0)),TRUE);
                    149:                                OUTSTR("\n");
                    150:                                }
                    151:                        break;
                    152:                case WHIVX:
                    153:                        OUTSTR("WHILE");
                    154:                        ASSERT(DEFINED(ARC(v,0)),outrat);
                    155:                        ASSERT(DEFINED(LPRED(ARC(v,0))),outrat);
                    156:                        prpred(LPRED(ARC(v,0)),TRUE);
                    157:                        newlevel(v,0,tab+1,YESTAB);
                    158:                        break;
                    159:                case STLNVX:
                    160:                case FMTVX:
                    161:                        prstln(v,tab);
                    162:                        break;
                    163:                case SWCHVX:
                    164:                                OUTSTR("SWITCH");
                    165:                                if (DEFINED(EXP(v)))
                    166:                                        {
                    167:                                        OUTSTR("(");
                    168:                                        OUTSTR(EXP(v));
                    169:                                        OUTSTR(")");
                    170:                                        }
                    171:                                newlevel(v,0,tab+1,YESTAB);
                    172:                                break;
                    173:                case ICASVX:
                    174:                case ACASVX:
                    175:                        OUTSTR("CASE ");
                    176:                        if (type == ACASVX)
                    177:                                prpred(v,FALSE);
                    178:                        else
                    179:                                OUTSTR(EXP(v));
                    180:                        OUTSTR(":\n");
                    181:                        newlevel(v,0,tab+1,YESTAB);
                    182:                        if (type == ACASVX &&DEFINED(LCHILD(v,ELSE)))
                    183:                                {
                    184:                                TABOVER(tab);
                    185:                                OUTSTR("DEFAULT:\n");
                    186:                                newlevel(v,1,tab+1,YESTAB);
                    187:                                }
                    188:                        break;
                    189:                case IOVX:
                    190:                        OUTSTR(PRERW(v));
                    191:                        ndcomma = FALSE;
                    192:                        if (DEFINED(FMTREF(v)))
                    193:                                {
                    194:                                OUTNUM(LABEL(FMTREF(v)));
                    195:                                ndcomma = TRUE;
                    196:                                }
                    197:                        if (DEFINED(ARC(v,ENDEQ)))
                    198:                                {
                    199:                                if (ndcomma) 
                    200:                                        OUTSTR(",");
                    201:                                OUTSTR("end = ");
                    202:                                OUTNUM(LABEL(ARC(v,ENDEQ)));
                    203:                                ndcomma = TRUE;
                    204:                                }
                    205:                        if (DEFINED(ARC(v,ERREQ)))
                    206:                                {
                    207:                                if (ndcomma)
                    208:                                        OUTSTR(",");
                    209:                                OUTSTR("err = ");
                    210:                                OUTNUM(LABEL(ARC(v,ERREQ)));
                    211:                                ndcomma = TRUE;
                    212:                                }
                    213:                        OUTSTR(POSTRW(v));
                    214:                        OUTSTR("\n");
                    215:                        break;
                    216:                }
                    217:        }
                    218: 
                    219: 
                    220: newlevel(v,ch,tab,tabfirst)
                    221: VERT v;
                    222: int ch;                /* number of lchild of v being processed */
                    223: int tab;               /* number of tabs to indent */
                    224: LOGICAL tabfirst;      /* same as for outrat */
                    225:        {
                    226:        LOGICAL addbrace;
                    227:        VERT w;
                    228:        if (NTYPE(v) == ACASVX || NTYPE(v) == ICASVX)
                    229:                addbrace = FALSE;
                    230:        else
                    231:                addbrace = HASBRACE(v,ch);
                    232:        ASSERT(tabfirst || !addbrace,newlevel);
                    233:        if (addbrace)
                    234:                OUTSTR(" {");
                    235:        if(tabfirst && NTYPE(v)!=ITERVX && NTYPE(v)!=DUMVX) OUTSTR("\n");
                    236:        for (w = LCHILD(v,ch); DEFINED(w); w = RSIB(w))
                    237:                outrat(w,tab,tabfirst);
                    238:        if (addbrace)
                    239:                {
                    240:                TABOVER(tab);
                    241:                OUTSTR("}\n");
                    242:                }
                    243:        }
                    244: 
                    245: 
                    246: 
                    247: 
                    248: 
                    249: prpred(v,addpar)
                    250: VERT v;
                    251: LOGICAL addpar;
                    252:        {
                    253:        if (addpar)
                    254:                OUTSTR("(");
                    255:        if (NEG(v)) OUTSTR("!(");
                    256:        OUTSTR(PRED(v));
                    257:        if (NEG(v)) OUTSTR(")");
                    258:        if (addpar)
                    259:                OUTSTR(")");
                    260:        }
                    261: 
                    262: prlab(n,tab)
                    263: int n,tab;
                    264:        {
                    265:        TABOVER(tab);
                    266:        OUTSTR("~");
                    267:        OUTNUM(n);
                    268:        OUTSTR(" ");
                    269:        }
                    270: 
                    271: prstln(v,tab)
                    272: VERT v;
                    273: int tab;
                    274:        {
                    275:        ASSERT(NTYPE(v) == STLNVX || NTYPE(v) == FMTVX,prstln);
                    276:        if (!ONDISK(v))
                    277:                {
                    278:                OUTSTR(BEGCODE(v));
                    279:                OUTSTR("\n");
                    280:                }
                    281:        else
                    282:                {
                    283:                empseek(BEGCODE(v));
                    284:                prcode(ONDISK(v),tab);
                    285:                }
                    286:        }
                    287: 
                    288: prcom(v)
                    289: VERT v;
                    290:        {
                    291:        if (DEFINED(BEGCOM(v)))
                    292:                {
                    293:                empseek(BEGCOM(v));
                    294:                comprint();
                    295:                }
                    296:        }

unix.superglobalmegacorp.com

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