1*22521Sdist /*
2*22521Sdist  * Copyright (c) 1980 Regents of the University of California.
3*22521Sdist  * All rights reserved.  The Berkeley software License Agreement
4*22521Sdist  * specifies the terms and conditions for redistribution.
5*22521Sdist  */
65519Slinton 
7*22521Sdist #ifndef lint
8*22521Sdist static char sccsid[] = "@(#)wheredump.c	5.1 (Berkeley) 06/06/85";
9*22521Sdist #endif not lint
105519Slinton 
115519Slinton /*
125519Slinton  * Print a list of currently active blocks starting with most recent.
135519Slinton  */
145519Slinton 
155519Slinton #include "defs.h"
165519Slinton #include "runtime.h"
175519Slinton #include "frame.rep"
185519Slinton #include "sym.h"
195519Slinton #include "machine.h"
205519Slinton #include "object.h"
215519Slinton #include "mappings.h"
225519Slinton 
235519Slinton where()
245519Slinton {
255763Slinton     FRAME *frp;
265763Slinton     ADDRESS prevpc;
275763Slinton     LINENO line;
285763Slinton     SYM *f;
295519Slinton 
305763Slinton     if (pc == 0) {
315763Slinton 	error("program is not active");
325763Slinton     }
335763Slinton     prevpc = pc;
345763Slinton     for (frp = curframe(); frp != NIL; frp = nextframe(frp)) {
355763Slinton 	f = whatblock(entry(frp));
365519Slinton 	line = srcline(prevpc);
375763Slinton 	printf("%s", name(f));
385763Slinton 	printparams(f, frp);
395763Slinton 	printf(", ");
405763Slinton 	printwhere(line, srcfilename(prevpc));
415763Slinton 	printf("\n");
425763Slinton 	prevpc = frp->save_pc;
435763Slinton     }
445763Slinton     line = srcline(prevpc);
455763Slinton     printf("%s, ", name(program));
465763Slinton     printwhere(line, srcfilename(prevpc));
475763Slinton     printf("\n");
485519Slinton }
495519Slinton 
505519Slinton /*
515519Slinton  * Dump the world to the given file.
525519Slinton  * Like "where", but variables are dumped also.
535519Slinton  */
545519Slinton 
555519Slinton dump()
565519Slinton {
575763Slinton     FRAME *frp;
585763Slinton     ADDRESS prevpc;
595763Slinton     LINENO line;
605763Slinton     SYM *f;
615519Slinton 
625763Slinton     if (pc == 0) {
635763Slinton 	error("program is not active");
645763Slinton     }
655763Slinton     prevpc = pc;
665763Slinton     for (frp = curframe(); frp != NIL; frp = nextframe(frp)) {
675763Slinton 	f = whatblock(entry(frp));
685519Slinton 	line = srcline(prevpc);
695763Slinton 	printf("%s", name(f));
705763Slinton 	printparams(f, frp);
715763Slinton 	printf(", ");
725763Slinton 	printwhere(line, srcfilename(prevpc));
735763Slinton 	printf("\n");
745763Slinton 	dumpvars(f, frp);
755763Slinton 	putchar('\n');
765763Slinton 	prevpc = frp->save_pc;
775763Slinton     }
785763Slinton     line = srcline(prevpc);
795763Slinton     printf("%s, ", name(program));
805763Slinton     printwhere(line, srcfilename(prevpc));
815763Slinton     printf("\n");
825763Slinton     dumpvars(program, NIL);
835519Slinton }
84