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