Annotation of researchv10no/cmd/sdb/pcs.c, revision 1.1.1.1

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); return;
                     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); return;
                     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); return;
                     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:                return;
                     87: 
                     88:            /* run program */
                     89:            case 'r': case 'R':
                     90:                endpcs();
                     91:                setup(); runmode=CONTIN;
                     92:                break;
                     93: 
                     94:            /* single step */
                     95:            case 's': case 'S':
                     96:                IF pid
                     97:                THEN
                     98:                        runmode=SINGLE; execsig=getsig(signo);
                     99:                ELSE setup(); loopcnt--;
                    100:                FI
                    101:                break;
                    102: 
                    103:            /* continue with optional signal */
                    104:            case 'c': case 'C': case 0:
                    105:                IF pid==0 THEN error(NOPCS); return; FI
                    106:                runmode=CONTIN; execsig=getsig(signo);
                    107:                break;
                    108: 
                    109:            default: error(BADMOD); return;
                    110:        }
                    111: 
                    112:        runpcs(runmode,execsig);
                    113:        delbp();
                    114: }
                    115: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.