12863Speter /* 2*22236Sdist * Copyright (c) 1980 Regents of the University of California. 3*22236Sdist * All rights reserved. The Berkeley software License Agreement 4*22236Sdist * specifies the terms and conditions for redistribution. 5*22236Sdist */ 6*22236Sdist 7*22236Sdist #ifndef lint 8*22236Sdist static char sccsid[] = "@(#)rec.c 5.1 (Berkeley) 06/05/85"; 9*22236Sdist #endif not lint 10*22236Sdist 11*22236Sdist /* 122863Speter * pxp - Pascal execution profiler 132863Speter * 142863Speter * Bill Joy UCB 152863Speter * Version 1.2 January 1979 162863Speter */ 172863Speter 182863Speter #include "0.h" 192863Speter 202863Speter tyrec(r, p0) 212863Speter int *r, p0; 222863Speter { 232863Speter 242863Speter if (r != NIL) 252863Speter setinfo(r[1]); 262863Speter if (p0 == NIL) { 272863Speter ppgoin(DECL); 282863Speter ppnl(); 292863Speter indent(); 302863Speter ppkw("record"); 312863Speter ppspac(); 322863Speter } else { 332863Speter ppspac(); 342863Speter ppbra("("); 352863Speter } 362863Speter ppgoin(DECL); 372863Speter if (r) { 382863Speter field(r[2], r[3]); 392863Speter variant(r[3]); 402863Speter } 412863Speter if (r != NIL) 422863Speter setinfo(r[1]); 432863Speter putcml(); 442863Speter ppgoout(DECL); 452863Speter if (p0 == NIL) { 462863Speter ppnl(); 472863Speter indent(); 482863Speter ppkw("end"); 492863Speter ppgoout(DECL); 502863Speter } else { 512863Speter ppitem(); 522863Speter ppket(")"); 532863Speter } 542863Speter } 552863Speter 562863Speter field(r, v) 572863Speter int *r, *v; 582863Speter { 592863Speter register int *fp, *tp, *ip; 602863Speter 612863Speter fp = r; 622863Speter if (fp != NIL) 632863Speter for (;;) { 642863Speter tp = fp[1]; 652863Speter if (tp != NIL) { 662863Speter setline(tp[1]); 672863Speter ip = tp[2]; 682863Speter ppitem(); 692863Speter if (ip != NIL) 702863Speter for (;;) { 712863Speter ppid(ip[1]); 722863Speter ip = ip[2]; 732863Speter if (ip == NIL) 742863Speter break; 752863Speter ppsep(", "); 762863Speter } 772863Speter else 782863Speter ppid("{field id list}"); 792863Speter ppsep(":"); 802863Speter gtype(tp[3]); 812863Speter setinfo(tp[1]); 822863Speter putcm(); 832863Speter } 842863Speter fp = fp[2]; 852863Speter if (fp == NIL) 862863Speter break; 872863Speter ppsep(";"); 882863Speter } 892863Speter if (v != NIL && r != NIL) 902863Speter ppsep(";"); 912863Speter } 922863Speter 932863Speter variant(r) 942863Speter register int *r; 952863Speter { 962863Speter register int *v, *vc; 972863Speter 982863Speter if (r == NIL) 992863Speter return; 1002863Speter setline(r[1]); 1012863Speter ppitem(); 1022863Speter ppkw("case"); 1032863Speter v = r[2]; 1042863Speter if (v != NIL) { 1052863Speter ppspac(); 1062863Speter ppid(v); 1072863Speter ppsep(":"); 1082863Speter } 1092863Speter gtype(r[3]); 1102863Speter ppspac(); 1112863Speter ppkw("of"); 1122863Speter for (vc = r[4]; vc != NIL;) { 1132863Speter v = vc[1]; 1142863Speter if (v == NIL) 1152863Speter continue; 1162863Speter ppgoin(DECL); 1172863Speter setline(v[1]); 1182863Speter ppnl(); 1192863Speter indent(); 1202863Speter ppbra(NIL); 1212863Speter v = v[2]; 1222863Speter if (v != NIL) { 1232863Speter for (;;) { 1242863Speter gconst(v[1]); 1252863Speter v = v[2]; 1262863Speter if (v == NIL) 1272863Speter break; 1282863Speter ppsep(", "); 1292863Speter } 1302863Speter } else 1312863Speter ppid("{case label list}"); 1322863Speter ppket(":"); 1332863Speter v = vc[1]; 1342863Speter tyrec(v[3], 1); 1352863Speter setinfo(v[1]); 1362863Speter putcml(); 1372863Speter ppgoout(DECL); 1382863Speter vc = vc[2]; 1392863Speter if (vc == NIL) 1402863Speter break; 1412863Speter ppsep(";"); 1422863Speter } 1432863Speter setinfo(r[1]); 1442863Speter putcm(); 1452863Speter } 146