|
|
1.1 root 1: static char sccsid[] = "@(#)list.c 2.5";
2:
3: #include "cdb.h"
4:
5: extern char *vmpBtSb[];
6: #define cScreenMax 21
7:
8: /* L I S T F I L E S */
9:
10: local void ListFiles(sbFile)
11: char *sbFile;
12: {
13: short i, c;
14:
15: printf(" name address\n");
16: c = 0;
17: for (i=0; i<vifdMac-2; i++) { /* don't show vifdNil, vifdTemp */
18: if ((sbFile != sbNil)
19: AND (!FHdrCmp(sbFile, vrgFd[i].sbFile)))
20: continue;
21: printf("%2d: %-15s %s", i, vrgFd[i].sbFile,
22: SbFAdr(lengthen(vrgFd[i].adrStart), true));
23: printf("\n");
24: if (++c >= cScreenMax) {
25: if (YesNo("Quit? (<cr> for more, y<cr> to stop) "))
26: return;
27: c = 0;
28: }
29: } /* for */
30: } /* ListFiles */
31:
32:
33: /* L I S T P R O C S */
34:
35: local void ListProcs(sbProc)
36: char *sbProc;
37: {
38: short i, c;
39:
40: printf(" name address\n");
41: c = 0;
42: for (i=0; i<vipdMac; i++) {
43: if ((sbProc != sbNil)
44: AND (!FHdrCmp(sbProc, vrgPd[i].sbProc)))
45: continue;
46: printf("%2d: %-15s %s\n", i, vrgPd[i].sbProc,
47: SbFAdr(lengthen(vrgPd[i].adrStart), true));
48: if (++c >= cScreenMax) {
49: if (YesNo("Quit? (<cr> for more, y<cr> to stop) "))
50: return;
51: c = 0;
52: }
53: } /* for */
54: } /* ListProcs */
55:
56:
57: /* L I S T L A B E L S */
58:
59: local void ListLabels(sbLabel)
60: char *sbLabel;
61: {
62: int c;
63: long adrLong;
64: char *sb;
65:
66: c = 0;
67: SetNext(visymGlobal);
68: while (FNextSym(N_TEXT, 0, 0, sbNil, nil)) {
69: sb = SbInCore(vsymCur->sbSym);
70: if ((sbLabel != sbNil)
71: AND !FHdrCmp(sbLabel, sb)
72: AND !FHdrCmp(sbLabel, sb+1))
73: continue;
74: adrLong = vsymCur->value;
75: if (*sb == '_')
76: sb++;
77: #ifdef BSD41
78: printf("%-15s %s", sb, SbFAdr(adrLong, true));
79: #else
80: printf("%-12.8s %s", sb, SbFAdr(adrLong, true));
81: #endif
82: printf("\n");
83: if (++c >= cScreenMax) {
84: if (YesNo("Quit? (<cr> for more, y<cr> to stop) "))
85: return;
86: c = 0;
87: }
88: } /* while */
89: } /* ListLabels */
90:
91:
92: /* L I S T G L O B A L S */
93:
94: local void ListGlobals(sbGlobal)
95: char *sbGlobal;
96: {
97: int c;
98: long adrLong;
99: FLAGT fData;
100: char *sb, ch;
101: TYR rgTy[cTyMax];
102:
103: SetNext(visymGlobal);
104:
105: if (vpid == pidNil AND vfnCore == fnNil) {
106: fData = false;
107: ch = '@';
108: printf("No data available - here are the names\n");
109: }
110: else {
111: ch = '=';
112: fData = true;
113: }
114: c = 0;
115: while (FNextSym(N_DATA, N_BSS, 0, sbNil, nil)) {
116: sb = SbInCore(vsymCur->sbSym);
117: if ((sbGlobal != sbNil)
118: AND (!FHdrCmp(sbGlobal, sb))
119: AND (!FHdrCmp(sbGlobal, sb+1)))
120: continue;
121: adrLong = vsymCur->value;
122: if (*sb == '_')
123: sb++;
124: #ifdef BSD41
125: printf("%-15s %c ", sb, ch);
126: #else
127: printf("%-12.8s %c ", sb, ch);
128: #endif
129: if (!fData) {
130: printf("%s", SbFAdr(adrLong, true));
131: }
132: else {
133: TyFGlobal(rgTy, sb);
134: DispVal(adrLong, rgTy, modeNil, false, true, false);
135: } /* if */
136: printf("\n");
137: if (++c >= cScreenMax) {
138: if (YesNo("Quit? (<cr> for more, y<cr> to stop) "))
139: return;
140: c = 0;
141: }
142: } /* while */
143: } /* ListGlobals */
144:
145:
146: /* L I S T L O C A L S */
147:
148: local void ListLocals(sbProc, cnt)
149: char *sbProc;
150: int cnt;
151: {
152: short ipd;
153: long isym, adrLong;
154: char sbName[50];
155: TYR rgTy[cTyMax];
156:
157: if (sbProc != sbNil) {
158: ipd = IpdFName(sbProc);
159: }
160: else {
161: if (vipd < 0)
162: Panic("ListLocals: vipd = %d",vipd);
163: ipd = vipd;
164: } /* if */
165: if (ipd == -1)
166: UError("No such procedure `%s'", sbProc);
167:
168: SetNext(vrgPd[ipd].isym+1);
169: while (FNextLocal(true, true, sbNil)) {
170: strcpy(sbName, SbInCore(vsymCur->sbSym+vcbVarHdr));
171: isym = visym;
172: adrLong = AdrFLocal(ipd, cnt, sbName, rgTy);
173: DispVal(adrLong, rgTy, modeNil, true, true, true);
174: printf("\n");
175: SetSym(isym);
176: } /* while */
177: } /* ListLocals */
178:
179:
180: /* L I S T S O M E T H I N G */
181:
182: export void ListSomething()
183: {
184: short cnt;
185: char chCmd, *sbArg, sbName[20];
186: TKE tk;
187: FLAGT fDidit;
188:
189: vipd = IpdFAdr(AdrFIfdLn(vifd, viln));
190: tk = TkNext();
191: if (vcbTok == 1) {
192: fDidit = false;
193: sbArg = sbNil;
194: chCmd = vsbTok[0];
195: if (tkStr == TkPeek()) {
196: tk = TkNext();
197: sbArg = vsbTok;
198: } /* if */
199: fDidit = true;
200: switch (chCmd) {
201: default:
202: fDidit = false;
203: case 'a':
204: ListAssert();
205: break;
206: case 'd':
207: ListDir();
208: break;
209: case 'f':
210: ListFiles(sbArg);
211: break;
212: case 'g':
213: ListGlobals(sbArg);
214: break;
215: case 'l':
216: ListLabels(sbArg);
217: break;
218: case 'p':
219: ListProcs(sbArg);
220: break;
221: case 'r':
222: ListRegs(sbArg);
223: break;
224: case 's':
225: ListSpecial(sbArg);
226: break;
227: case 'z':
228: ListSa();
229: break;
230: } /* switch */
231: if (fDidit)
232: return;
233: } /* if */
234: if (tk == tkStr) {
235: strcpy(sbName, vsbTok);
236: cnt = -1;
237: if ((TkNext() == tkDot)
238: AND (TkNext() == tkNumber))
239: cnt = atoi(vsbTok);
240: ListLocals(sbName, cnt);
241: }
242: else {
243: ListLocals(sbNil, -1);
244: } /* if */
245: } /* ListSomething */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.