+
+
+/* print breakpoints */
+prbkpt() {
+ register BKPTR bkptr;
+ register int cnt;
+ char *cmdp;
+
+ cnt = 0;
+
+ for (bkptr = bkpthead; bkptr; bkptr=bkptr->nxtbkpt)
+ if (bkptr->flag) {
+ cnt++;
+ printbkpt("", adrtoprocp(bkptr->loc), bkptr->loc);
+ cmdp = bkptr->comm;
+ if (*cmdp != '\n') {
+ printf(" <");
+ while (*cmdp != '\n')
+ printf("%c", *cmdp++);
+ printf(">\n");
+ }
+ else
+ printf("\n");
+ }
+ if (cnt == 0)
+ printf("No breakpoints set\n");
+}
+
+/* interactively delete breakpoints */
+
+idbkpt() {
+ register BKPTR bkptr;
+ register int yesflg, cnt;
+ register char c;
+
+ cnt = 0;
+
+ for (bkptr = bkpthead; bkptr; bkptr=bkptr->nxtbkpt)
+ if (bkptr->flag) {
+ printbkpt(" ? ", adrtoprocp(bkptr->loc), bkptr->loc);
+ yesflg = 0;
+ cnt++;
+ do {
+ c = getchar();
+ if (c == 'y' || c == 'd') yesflg++;
+ } while (c != '\n');
+ if (yesflg)
+ bkptr->flag = 0;
+ }
+ if (cnt == 0)
+ printf("No breakpoints set\n");
+}
+
+/* delete all breakpoints */
+
+dabkpt() {
+ register BKPTR bkptr;
+
+ for (bkptr = bkpthead; bkptr; bkptr=bkptr->nxtbkpt)
+ bkptr->flag = 0;
+}
+
+/*
+ * Print name of breakpoint for a, b, d commands:
+ */
+printbkpt(s, procp, dot)
+char *s; struct proct *procp; ADDR dot; {
+ adrtolineno(dot);
+ if (dot != lnfaddr)
+ printf("0x%x (", dot);
+ prlnoff(procp, dot);
+ if (dot != lnfaddr)
+ printf(")");
+ printf("%s", s);
+}
+
+/* print call frame */
+prframe() {
+ prfrx(0);
+}
+
+/* set top to print just the top procedure */
+prfrx(top) {
+ int narg;
+ long offset;
+ register char class;
+ register int endflg;
+ char *p;
+ struct proct *procp;
+ struct nlist stentry;
+
+ if ((procp = initframe()) == badproc) return;
+ do {
+ if (get(frame+12, DSP) == 0) return;
+ p = procp->pname;
+ if (eqstr("__dbsubc", p)) return;
+ if (p[0] == '_') {
+ endflg = 1;
+#ifndef FLEXNAMES
+ printf("%.15s(", p+1);
+#else
+ printf("%s(", p+1);
+#endif
+ }
+ else {
+#ifndef FLEXNAMES
+ printf("%.16s(", p);
+#else
+ printf("%s(", p);
+#endif
+ endflg = 0;
+ }
+ if (endflg == 0) {
+ offset = procp->st_offset;
+ blseek(&sbuf, offset, 0);
+ do {
+ if (bread(&sbuf, &stentry, sizeof stentry) <
+ sizeof stentry) {
+ endflg++;
+ break;
+ }
+ class = stentry.n_type & STABMASK;
+ } while (class == N_FUN);
+ while (class != N_PSYM) {
+ if (bread(&sbuf, &stentry, sizeof stentry) <
+ sizeof stentry) {
+ endflg++;
+ break;
+ }
+ class = stentry.n_type & STABMASK;
+ if (class == N_FUN) {
+ endflg++;
+ break;
+ }
+ }
+ }
+
+ narg = get(argp, DSP);
+ if (narg & ~0xff) narg = 0;
+ argp += WORDSIZE;
+ while (narg) {
+ if (endflg) {
+ printf("%d", get(argp, DSP));
+ argp += 4;
+ } else {
+ int length;
+#ifndef FLEXNAMES
+ printf("%.16s=", stentry.n_name);
+#else
+ printf("%s=", stentry.n_un.n_name);
+#endif
+ dispx(argp, "", N_GSYM, stentry.n_desc,
+ 0, 0, DSP);
+ length = typetosize(stentry.n_desc, 0);
+ if (length > WORDSIZE)
+ argp += length;
+ else
+ argp += WORDSIZE;
+ }
+ do {
+ if (endflg) break;
+ if (bread(&sbuf, &stentry, sizeof stentry) <
+ sizeof stentry) {
+ endflg++;
+ break;
+ }
+ class = stentry.n_type & STABMASK;
+ if (class == N_FUN) {
+ endflg++;
+ break;
+ }
+ } while (class != N_PSYM);
+ l1: if (--narg != 0) printf(",");
+ }
+ printf(")");
+ if (debug) printf(" @ 0x%x ", callpc);
+ if (procp->sfptr != badfile)
+ printf(" [%s:%d]", adrtofilep(callpc-1)->sfilename,
+ adrtolineno(callpc-1));
+ printf("\n");
+ } while (((procp = nextframe()) != badproc) && !top);
+}
+
+INT signo;
+STRING signals[];
+extern nsig;
+sigprint()
+{
+
+ if (signo < nsig)
+ printf("%s", signals[signo]);
+ else
+ printf("signal %d???", signals[signo]);
+}