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