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