|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.