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