xref: /csrg-svn/sys/deprecated/kdb/kdb_pcs.c (revision 30110)
1 /*	kdb_pcs.c	7.1	86/11/20	*/
2 
3 #include "../kdb/defs.h"
4 
5 char	*NOBKPT;
6 char	*SZBKPT;
7 char	*EXBKPT;
8 char	*BADMOD;
9 
10 /* breakpoints */
11 BKPTR	bkpthead;
12 
13 char	*lp;
14 char	lastc;
15 
16 long	loopcnt;
17 
18 /* sub process control */
19 
20 subpcs(modif)
21 {
22 	register check, runmode;
23 	register BKPTR bkptr;
24 	register char *comptr;
25 
26 	loopcnt=cntval;
27 	switch (modif) {
28 
29 		/* delete breakpoint */
30 	case 'd': case 'D':
31 		if (bkptr=scanbkpt(dot)) {
32 			bkptr->flag=0;
33 			return;
34 		}
35 		error(NOBKPT);
36 
37 		/* set breakpoint */
38 	case 'b': case 'B':
39 		if (bkptr=scanbkpt(dot))
40 			bkptr->flag=0;
41 		for (bkptr=bkpthead; bkptr; bkptr=bkptr->nxtbkpt)
42 			if (bkptr->flag == 0)
43 				break;
44 		if (bkptr==0) {
45 			bkptr=(BKPTR)kdbmalloc(sizeof *bkptr);
46 			if (bkptr == (BKPTR)-1)
47 				error(SZBKPT);
48 			bkptr->nxtbkpt=bkpthead;
49 			bkpthead=bkptr;
50 		}
51 		bkptr->loc = dot;
52 		bkptr->initcnt = bkptr->count = cntval;
53 		bkptr->flag = BKPTSET;
54 		check=MAXCOM-1; comptr=bkptr->comm; rdc(); lp--;
55 		do
56 			*comptr++ = readchar();
57 		while (check-- && lastc!=EOR);
58 		*comptr=0; lp--;
59 		if (check)
60 			return;
61 		error(EXBKPT);
62 
63 		/* single step */
64 	case 's': case 'S':
65 		runmode=SINGLE;
66 		break;
67 
68 		/* continue */
69 	case 'c': case 'C':
70 		runmode=CONTIN;
71 		break;
72 
73 	default:
74 		error(BADMOD);
75 	}
76 	if (loopcnt>0)
77 		runpcs(runmode, 0);
78 }
79