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

Defined functions

subpcs defined in line 35; used 1 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 634
Valid CSS Valid XHTML 1.0 Strict