1: #ifndef lint
2: static char sccsid[] = "@(#)pcs.c 4.2 8/11/83";
3: #endif
4: /*
5: *
6: * UNIX debugger
7: *
8: */
9:
10: #include "defs.h"
11:
12:
13: MSG NOBKPT;
14: MSG SZBKPT;
15: MSG EXBKPT;
16: MSG NOPCS;
17: MSG BADMOD;
18:
19: /* breakpoints */
20: BKPTR bkpthead;
21:
22: CHAR *lp;
23: CHAR lastc;
24:
25: INT signo;
26: L_INT dot;
27: INT pid;
28: L_INT cntval;
29: L_INT loopcnt;
30:
31: L_INT entrypt;
32: INT adrflg;
33:
34:
35:
36: /* sub process control */
37:
38: subpcs(modif)
39: {
40: REG INT check;
41: INT execsig,runmode;
42: REG BKPTR bkptr;
43: STRING comptr;
44: execsig=0; loopcnt=cntval;
45:
46: switch (modif) {
47:
48: /* delete breakpoint */
49: case 'd': case 'D':
50: IF (bkptr=scanbkpt(dot))
51: THEN bkptr->flag=0; return;
52: ELSE error(NOBKPT);
53: FI
54:
55: /* set breakpoint */
56: case 'b': case 'B':
57: IF (bkptr=scanbkpt(dot))
58: THEN bkptr->flag=0;
59: FI
60: FOR bkptr=bkpthead; bkptr; bkptr=bkptr->nxtbkpt
61: DO IF bkptr->flag == 0
62: THEN break;
63: FI
64: OD
65: IF bkptr==0
66: THEN IF (bkptr=sbrk(sizeof *bkptr)) == -1
67: THEN error(SZBKPT);
68: ELSE bkptr->nxtbkpt=bkpthead;
69: bkpthead=bkptr;
70: FI
71: FI
72: bkptr->loc = dot;
73: bkptr->initcnt = bkptr->count = cntval;
74: bkptr->flag = BKPTSET;
75: check=MAXCOM-1; comptr=bkptr->comm; rdc(); lp--;
76: REP *comptr++ = readchar();
77: PER check-- ANDF lastc!=EOR DONE
78: *comptr=0; lp--;
79: IF check
80: THEN return;
81: ELSE error(EXBKPT);
82: FI
83:
84: /* exit */
85: case 'k' :case 'K':
86: IF pid
87: THEN printf("%d: killed", pid); endpcs(); return;
88: FI
89: error(NOPCS);
90:
91: /* run program */
92: case 'r': case 'R':
93: endpcs();
94: setup(); runmode=CONTIN;
95: IF adrflg
96: THEN IF !scanbkpt(dot) THEN loopcnt++; FI
97: ELSE IF !scanbkpt(entrypt+2) THEN loopcnt++; FI
98: FI
99: break;
100:
101: /* single step */
102: case 's': case 'S':
103: IF pid
104: THEN
105: runmode=SINGLE; execsig=getsig(signo);
106: ELSE setup(); loopcnt--;
107: FI
108: break;
109:
110: /* continue with optional signal */
111: case 'c': case 'C': case 0:
112: IF pid==0 THEN error(NOPCS); FI
113: runmode=CONTIN; execsig=getsig(signo);
114: break;
115:
116: default: error(BADMOD);
117: }
118:
119: IF loopcnt>0 ANDF runpcs(runmode,execsig)
120: THEN printf("breakpoint%16t");
121: ELSE printf("stopped at%16t");
122: FI
123: delbp();
124: printpc();
125: }
Defined functions
Defined variables
sccsid
defined in line
2;
never used