|
|
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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.