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