148112Sbostic /*-
2*62193Sbostic * Copyright (c) 1980, 1993
3*62193Sbostic * The Regents of the University of California. All rights reserved.
448112Sbostic *
548112Sbostic * %sccs.include.redist.c%
622236Sdist */
722236Sdist
822236Sdist #ifndef lint
9*62193Sbostic static char sccsid[] = "@(#)rec.c 8.1 (Berkeley) 06/06/93";
1048112Sbostic #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
tyrec(r,p0)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
field(r,v)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
variant(r)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