|
|
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.