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