148095Sbostic /*-
2*62145Sbostic  * Copyright (c) 1980, 1993
3*62145Sbostic  *	The Regents of the University of California.  All rights reserved.
448095Sbostic  *
548095Sbostic  * %sccs.include.redist.c%
622521Sdist  */
75519Slinton 
822521Sdist #ifndef lint
9*62145Sbostic static char sccsid[] = "@(#)wheredump.c	8.1 (Berkeley) 06/06/93";
1048095Sbostic #endif /* not lint */
115519Slinton 
125519Slinton /*
135519Slinton  * Print a list of currently active blocks starting with most recent.
145519Slinton  */
155519Slinton 
165519Slinton #include "defs.h"
175519Slinton #include "runtime.h"
185519Slinton #include "frame.rep"
195519Slinton #include "sym.h"
205519Slinton #include "machine.h"
215519Slinton #include "object.h"
225519Slinton #include "mappings.h"
235519Slinton 
where()245519Slinton where()
255519Slinton {
265763Slinton     FRAME *frp;
275763Slinton     ADDRESS prevpc;
285763Slinton     LINENO line;
295763Slinton     SYM *f;
305519Slinton 
315763Slinton     if (pc == 0) {
325763Slinton 	error("program is not active");
335763Slinton     }
345763Slinton     prevpc = pc;
355763Slinton     for (frp = curframe(); frp != NIL; frp = nextframe(frp)) {
365763Slinton 	f = whatblock(entry(frp));
375519Slinton 	line = srcline(prevpc);
385763Slinton 	printf("%s", name(f));
395763Slinton 	printparams(f, frp);
405763Slinton 	printf(", ");
415763Slinton 	printwhere(line, srcfilename(prevpc));
425763Slinton 	printf("\n");
435763Slinton 	prevpc = frp->save_pc;
445763Slinton     }
455763Slinton     line = srcline(prevpc);
465763Slinton     printf("%s, ", name(program));
475763Slinton     printwhere(line, srcfilename(prevpc));
485763Slinton     printf("\n");
495519Slinton }
505519Slinton 
515519Slinton /*
525519Slinton  * Dump the world to the given file.
535519Slinton  * Like "where", but variables are dumped also.
545519Slinton  */
555519Slinton 
dump()565519Slinton dump()
575519Slinton {
585763Slinton     FRAME *frp;
595763Slinton     ADDRESS prevpc;
605763Slinton     LINENO line;
615763Slinton     SYM *f;
625519Slinton 
635763Slinton     if (pc == 0) {
645763Slinton 	error("program is not active");
655763Slinton     }
665763Slinton     prevpc = pc;
675763Slinton     for (frp = curframe(); frp != NIL; frp = nextframe(frp)) {
685763Slinton 	f = whatblock(entry(frp));
695519Slinton 	line = srcline(prevpc);
705763Slinton 	printf("%s", name(f));
715763Slinton 	printparams(f, frp);
725763Slinton 	printf(", ");
735763Slinton 	printwhere(line, srcfilename(prevpc));
745763Slinton 	printf("\n");
755763Slinton 	dumpvars(f, frp);
765763Slinton 	putchar('\n');
775763Slinton 	prevpc = frp->save_pc;
785763Slinton     }
795763Slinton     line = srcline(prevpc);
805763Slinton     printf("%s, ", name(program));
815763Slinton     printwhere(line, srcfilename(prevpc));
825763Slinton     printf("\n");
835763Slinton     dumpvars(program, NIL);
845519Slinton }
85