1*5519Slinton /* Copyright (c) 1982 Regents of the University of California */
2*5519Slinton 
3*5519Slinton static char sccsid[] = "@(#)wheredump.c 1.1 01/18/82";
4*5519Slinton 
5*5519Slinton /*
6*5519Slinton  * Print a list of currently active blocks starting with most recent.
7*5519Slinton  */
8*5519Slinton 
9*5519Slinton #include "defs.h"
10*5519Slinton #include "runtime.h"
11*5519Slinton #include "frame.rep"
12*5519Slinton #include "sym.h"
13*5519Slinton #include "machine.h"
14*5519Slinton #include "object.h"
15*5519Slinton #include "mappings.h"
16*5519Slinton 
17*5519Slinton where()
18*5519Slinton {
19*5519Slinton 	FRAME *frp;
20*5519Slinton 	ADDRESS prevpc;
21*5519Slinton 	LINENO line;
22*5519Slinton 	SYM *f;
23*5519Slinton 
24*5519Slinton 	if (pc == 0) {
25*5519Slinton 		error("program is not active");
26*5519Slinton 	}
27*5519Slinton 	prevpc = pc;
28*5519Slinton 	for (frp = curframe(); frp != NIL; frp = nextframe(frp)) {
29*5519Slinton 		f = whatblock(entry(frp));
30*5519Slinton 		line = srcline(prevpc);
31*5519Slinton 		printf("%s", name(f));
32*5519Slinton 		printparams(f, frp);
33*5519Slinton 		printf(", line %d\n", line);
34*5519Slinton 		prevpc = frp->save_pc;
35*5519Slinton 	}
36*5519Slinton 	line = srcline(prevpc);
37*5519Slinton 	printf("%s, line %d\n", name(program), line);
38*5519Slinton }
39*5519Slinton 
40*5519Slinton /*
41*5519Slinton  * Dump the world to the given file.
42*5519Slinton  * Like "where", but variables are dumped also.
43*5519Slinton  */
44*5519Slinton 
45*5519Slinton dump()
46*5519Slinton {
47*5519Slinton 	FRAME *frp;
48*5519Slinton 	ADDRESS prevpc;
49*5519Slinton 	LINENO line;
50*5519Slinton 	SYM *f;
51*5519Slinton 
52*5519Slinton 	if (pc == 0) {
53*5519Slinton 		error("program is not active");
54*5519Slinton 	}
55*5519Slinton 	prevpc = pc;
56*5519Slinton 	for (frp = curframe(); frp != NIL; frp = nextframe(frp)) {
57*5519Slinton 		f = whatblock(entry(frp));
58*5519Slinton 		line = srcline(prevpc);
59*5519Slinton 		prevpc = frp->save_pc;
60*5519Slinton 		printf("%s", name(f));
61*5519Slinton 		printparams(f, frp);
62*5519Slinton 		printf(", line %d\n", line);
63*5519Slinton 		dumpvars(f, frp);
64*5519Slinton 		putchar('\n');
65*5519Slinton 	}
66*5519Slinton 	line = srcline(prevpc);
67*5519Slinton 	printf("%s, line %d\n", name(program), line);
68*5519Slinton 	dumpvars(program, NIL);
69*5519Slinton }
70