15519Slinton /* Copyright (c) 1982 Regents of the University of California */
25519Slinton 
3*5763Slinton static char sccsid[] = "@(#)wheredump.c 1.2 02/11/82";
45519Slinton 
55519Slinton /*
65519Slinton  * Print a list of currently active blocks starting with most recent.
75519Slinton  */
85519Slinton 
95519Slinton #include "defs.h"
105519Slinton #include "runtime.h"
115519Slinton #include "frame.rep"
125519Slinton #include "sym.h"
135519Slinton #include "machine.h"
145519Slinton #include "object.h"
155519Slinton #include "mappings.h"
165519Slinton 
175519Slinton where()
185519Slinton {
19*5763Slinton     FRAME *frp;
20*5763Slinton     ADDRESS prevpc;
21*5763Slinton     LINENO line;
22*5763Slinton     SYM *f;
235519Slinton 
24*5763Slinton     if (pc == 0) {
25*5763Slinton 	error("program is not active");
26*5763Slinton     }
27*5763Slinton     prevpc = pc;
28*5763Slinton     for (frp = curframe(); frp != NIL; frp = nextframe(frp)) {
29*5763Slinton 	f = whatblock(entry(frp));
305519Slinton 	line = srcline(prevpc);
31*5763Slinton 	printf("%s", name(f));
32*5763Slinton 	printparams(f, frp);
33*5763Slinton 	printf(", ");
34*5763Slinton 	printwhere(line, srcfilename(prevpc));
35*5763Slinton 	printf("\n");
36*5763Slinton 	prevpc = frp->save_pc;
37*5763Slinton     }
38*5763Slinton     line = srcline(prevpc);
39*5763Slinton     printf("%s, ", name(program));
40*5763Slinton     printwhere(line, srcfilename(prevpc));
41*5763Slinton     printf("\n");
425519Slinton }
435519Slinton 
445519Slinton /*
455519Slinton  * Dump the world to the given file.
465519Slinton  * Like "where", but variables are dumped also.
475519Slinton  */
485519Slinton 
495519Slinton dump()
505519Slinton {
51*5763Slinton     FRAME *frp;
52*5763Slinton     ADDRESS prevpc;
53*5763Slinton     LINENO line;
54*5763Slinton     SYM *f;
555519Slinton 
56*5763Slinton     if (pc == 0) {
57*5763Slinton 	error("program is not active");
58*5763Slinton     }
59*5763Slinton     prevpc = pc;
60*5763Slinton     for (frp = curframe(); frp != NIL; frp = nextframe(frp)) {
61*5763Slinton 	f = whatblock(entry(frp));
625519Slinton 	line = srcline(prevpc);
63*5763Slinton 	printf("%s", name(f));
64*5763Slinton 	printparams(f, frp);
65*5763Slinton 	printf(", ");
66*5763Slinton 	printwhere(line, srcfilename(prevpc));
67*5763Slinton 	printf("\n");
68*5763Slinton 	dumpvars(f, frp);
69*5763Slinton 	putchar('\n');
70*5763Slinton 	prevpc = frp->save_pc;
71*5763Slinton     }
72*5763Slinton     line = srcline(prevpc);
73*5763Slinton     printf("%s, ", name(program));
74*5763Slinton     printwhere(line, srcfilename(prevpc));
75*5763Slinton     printf("\n");
76*5763Slinton     dumpvars(program, NIL);
775519Slinton }
78