File:  [Power 6/32 Unix Tahoe 4.2BSD] / cci / usr / src / bin / cdb / list.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Sun Jul 28 12:24:19 2019 UTC (7 years ago) by root
Branches: bsd, MAIN
CVS tags: v12b, v121, HEAD
Power 6/32 Unix version 1.2b

static char sccsid[] = "@(#)list.c	2.5";

#include "cdb.h"

extern char *vmpBtSb[];
#define cScreenMax 21

/* L I S T   F I L E S */

local void ListFiles(sbFile)
char	*sbFile;
{
	short	i, c;

	printf("   name        address\n");
	c = 0;
	for (i=0; i<vifdMac-2; i++) { /* don't show vifdNil, vifdTemp */
		if ((sbFile != sbNil)
		    AND (!FHdrCmp(sbFile, vrgFd[i].sbFile)))
			continue;
		printf("%2d: %-15s  %s", i, vrgFd[i].sbFile,
		SbFAdr(lengthen(vrgFd[i].adrStart), true));
		printf("\n");
		if (++c >= cScreenMax) {
			if (YesNo("Quit? (<cr> for more, y<cr> to stop)  "))
				return;
			c = 0;
		}
	} /* for */
} /* ListFiles */


/* L I S T   P R O C S */

local void ListProcs(sbProc)
char	*sbProc;
{
	short	i, c;

	printf("   name        address\n");
	c = 0;
	for (i=0; i<vipdMac; i++) {
		if ((sbProc != sbNil)
		    AND (!FHdrCmp(sbProc, vrgPd[i].sbProc)))
			continue;
		printf("%2d: %-15s  %s\n", i, vrgPd[i].sbProc,
		SbFAdr(lengthen(vrgPd[i].adrStart), true));
		if (++c >= cScreenMax) {
			if (YesNo("Quit? (<cr> for more, y<cr> to stop)  "))
				return;
			c = 0;
		}
	} /* for */
} /* ListProcs */


/* L I S T   L A B E L S */

local void ListLabels(sbLabel)
char	*sbLabel;
{
	int		c;
	long	adrLong;
	char	*sb;

	c = 0;
	SetNext(visymGlobal);
	while (FNextSym(N_TEXT, 0, 0, sbNil, nil)) {
		sb = SbInCore(vsymCur->sbSym);
		if ((sbLabel != sbNil)
		    AND !FHdrCmp(sbLabel, sb)
		    AND !FHdrCmp(sbLabel, sb+1))
			continue;
		adrLong = vsymCur->value;
		if (*sb == '_')
			sb++;
#ifdef BSD41
		printf("%-15s %s", sb, SbFAdr(adrLong, true));
#else
		printf("%-12.8s %s", sb, SbFAdr(adrLong, true));
#endif
		printf("\n");
		if (++c >= cScreenMax) {
			if (YesNo("Quit? (<cr> for more, y<cr> to stop)  "))
				return;
			c = 0;
		}
	} /* while */
} /* ListLabels */


/* L I S T   G L O B A L S */

local void ListGlobals(sbGlobal)
char	*sbGlobal;
{
	int		c;
	long	adrLong;
	FLAGT	fData;
	char	*sb, ch;
	TYR		rgTy[cTyMax];

	SetNext(visymGlobal);

	if (vpid == pidNil AND vfnCore == fnNil) {
		fData = false;
		ch = '@';
		printf("No data available - here are the names\n");
	} 
	else {
		ch = '=';
		fData = true;
	}
	c = 0;
	while (FNextSym(N_DATA, N_BSS, 0, sbNil, nil)) {
		sb = SbInCore(vsymCur->sbSym);
		if ((sbGlobal != sbNil)
		    AND (!FHdrCmp(sbGlobal, sb))
		    AND (!FHdrCmp(sbGlobal, sb+1)))
			continue;
		adrLong = vsymCur->value;
		if (*sb == '_')
			sb++;
#ifdef BSD41
		printf("%-15s %c ", sb, ch);
#else
		printf("%-12.8s %c ", sb, ch);
#endif
		if (!fData) {
			printf("%s", SbFAdr(adrLong, true));
		} 
		else {
			TyFGlobal(rgTy, sb);
			DispVal(adrLong, rgTy, modeNil, false, true, false);
		} /* if */
		printf("\n");
		if (++c >= cScreenMax) {
			if (YesNo("Quit? (<cr> for more, y<cr> to stop)  "))
				return;
			c = 0;
		}
	} /* while */
} /* ListGlobals */


/* L I S T   L O C A L S */

local void ListLocals(sbProc, cnt)
char	*sbProc;
int	cnt;
{
	short	ipd;
	long	isym, adrLong;
	char	sbName[50];
	TYR		rgTy[cTyMax];

	if (sbProc != sbNil) {
		ipd = IpdFName(sbProc);
	} 
	else {
		if (vipd < 0)
			Panic("ListLocals: vipd = %d",vipd);
		ipd = vipd;
	} /* if */
	if (ipd == -1)
		UError("No such procedure `%s'", sbProc);

	SetNext(vrgPd[ipd].isym+1);
	while (FNextLocal(true, true, sbNil)) {
		strcpy(sbName, SbInCore(vsymCur->sbSym+vcbVarHdr));
		isym = visym;
		adrLong = AdrFLocal(ipd, cnt, sbName, rgTy);
		DispVal(adrLong, rgTy, modeNil, true, true, true);
		printf("\n");
		SetSym(isym);
	} /* while */
} /* ListLocals */


/* L I S T   S O M E T H I N G */

export void ListSomething()
{
	short	cnt;
	char	chCmd, *sbArg, sbName[20];
	TKE		tk;
	FLAGT	fDidit;

	vipd = IpdFAdr(AdrFIfdLn(vifd, viln));
	tk = TkNext();
	if (vcbTok == 1) {
		fDidit = false;
		sbArg = sbNil;
		chCmd = vsbTok[0];
		if (tkStr == TkPeek()) {
			tk = TkNext();
			sbArg = vsbTok;
		} /* if */
		fDidit = true;
		switch (chCmd) {
		default:	
			fDidit = false;
		case 'a':   
			ListAssert(); 
			break;
		case 'd':   
			ListDir(); 
			break;
		case 'f':   
			ListFiles(sbArg); 
			break;
		case 'g':   
			ListGlobals(sbArg); 
			break;
		case 'l':   
			ListLabels(sbArg); 
			break;
		case 'p':   
			ListProcs(sbArg); 
			break;
		case 'r':   
			ListRegs(sbArg); 
			break;
		case 's':   
			ListSpecial(sbArg); 
			break;
		case 'z':   
			ListSa(); 
			break;
		} /* switch */
		if (fDidit)
			return;
	} /* if */
	if (tk == tkStr) {
		strcpy(sbName, vsbTok);
		cnt = -1;
		if ((TkNext() == tkDot)
		    AND (TkNext() == tkNumber))
			cnt = atoi(vsbTok);
		ListLocals(sbName, cnt);
	} 
	else {
		ListLocals(sbNil, -1);
	} /* if */
} /* ListSomething */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.