put in cache initialization in at beginning of process startup
[unix-history] / usr / src / usr.bin / pascal / pdx / breakpoint / status.c
CommitLineData
6c027037
ML
1/* Copyright (c) 1982 Regents of the University of California */
2
3static char sccsid[] = "@(#)status.c 1.1 %G%";
4
5/*
6 * Print out what's currently being traced by looking at
7 * the currently active breakpoints.
8 *
9 * The list is in LIFO order, we print it FIFO by going recursive.
10 */
11
12#include "defs.h"
13#include "breakpoint.h"
14#include "tree.h"
15#include "sym.h"
16#include "source.h"
17#include "object.h"
18#include "mappings.h"
19#include "bp.rep"
20
21#define printnum(id) if (!isredirected()) printf("(%d) ", id)
22
23status()
24{
25 if (bphead == NIL) {
26 if (!isredirected()) {
27 printf("no trace's or stop's active\n");
28 }
29 } else {
30 bpstatus(bphead);
31 }
32}
33
34LOCAL bpstatus(bp)
35BPINFO *bp;
36{
37 register BPINFO *p;
38 LINENO n;
39 SYM *s;
40 NODE *t;
41 char *trname, *stname;
42
43 p = bp;
44 if (p->bpnext != NIL) {
45 bpstatus(p->bpnext);
46 }
47 t = p->bpnode;
48 if (p->bpline >= 0) {
49 n = linelookup(p->bpaddr);
50 trname = "trace";
51 stname = "stop";
52 } else {
53 n = p->bpaddr;
54 trname = "tracei";
55 stname = "stopi";
56 }
57 switch(p->bptype) {
58 case INST:
59 printnum(p->bpid);
60 printf("%s %d", trname, n);
61 break;
62
63 case ALL_ON:
64 printnum(p->bpid);
65 printf("%s", trname);
66 s = p->bpblock;
67 if (s != program) {
68 printf(" in ");
69 printname(s);
70 }
71 break;
72
73 case STOP_ON:
74 printnum(p->bpid);
75 printf("%s", stname);
76 if (t != NIL) {
77 printf(" ");
78 prtree(t);
79 }
80 s = p->bpblock;
81 if (s != program) {
82 printf(" in ");
83 printname(s);
84 }
85 break;
86
87 case BLOCK_ON:
88 case TERM_ON:
89 s = p->bpblock;
90 printnum(p->bpid);
91 printf("%s ", trname);
92 prtree(t);
93 if (s != program) {
94 printf(" in ");
95 printname(s);
96 }
97 break;
98
99 case AT_BP:
100 printnum(p->bpid);
101 printf("%s ", trname);
102 prtree(t);
103 printf(" at %d", p->bpline);
104 break;
105
106 case STOP_BP:
107 printnum(p->bpid);
108 printf("%s", stname);
109 if (t != NIL) {
110 printf(" ");
111 prtree(t);
112 } else if ((s = p->bpblock) != NIL) {
113 printf(" in ");
114 printname(s);
115 } else if (p->bpline > 0) {
116 printf(" at %d", p->bpline);
117 } else {
118 printf(" at %d", p->bpaddr);
119 }
120 break;
121
122 /*
123 * Temporary breakpoints;
124 * return rather than break to avoid printing newline.
125 */
126 case ALL_OFF:
127 case CALL:
128 case RETURN:
129 case CALLPROC:
130 case STOP_OFF:
131 case BLOCK_OFF:
132 case TERM_OFF:
133 case END_BP:
134 return;
135
136 default:
137 panic("bptype %d in bplist", p->bptype);
138 }
139 if (p->bpcond != NIL) {
140 printf(" if ");
141 prtree(p->bpcond);
142 }
143 printf("\n");
144}
145
146/*
147 * Print the name of a symbol unambigously.
148 */
149
150LOCAL printname(s)
151SYM *s;
152{
153 if (isambiguous(s)) {
154 printwhich(s);
155 } else {
156 printf("%s", name(s));
157 }
158}