Annotation of 3BSD/cmd/sdb/main.c, revision 1.1.1.1

1.1       root        1: #
                      2: /*
                      3:  *
                      4:  *     UNIX debugger
                      5:  *
                      6:  */
                      7: 
                      8: #include       "head.h"
                      9: #include       <signal.h>
                     10: #include       <stdio.h>
                     11: #include       <sys/stat.h>
                     12: 
                     13: INT            mkfault;
                     14: INT            executing;
                     15: CHAR           *lp;
                     16: L_INT          maxoff;
                     17: L_INT          maxpos;
                     18: ADDR           sigint;
                     19: ADDR           sigqit;
                     20: INT            wtflag;
                     21: L_INT          maxfile;
                     22: L_INT          maxstor;
                     23: L_INT          txtsiz;
                     24: L_INT          datsiz;
                     25: L_INT          datbas;
                     26: L_INT          stksiz;
                     27: STRING         errflg;
                     28: INT            magic;
                     29: L_INT          entrypt;
                     30: 
                     31: CHAR           lastc;
                     32: 
                     33: STRING         symfil;
                     34: STRING         corfil;
                     35: INT            argcount;
                     36: int    fpe();
                     37: 
                     38: 
                     39: 
                     40: #ifndef STD
                     41: char *mktemp(), *tfn;
                     42: int tfd;
                     43: #endif
                     44: 
                     45: main(argc, argv)
                     46: REG STRING     *argv;
                     47: REG INT                argc;
                     48: {
                     49:        register char *p;
                     50:        struct stat stbuf;
                     51: 
                     52:        maxfile=1L<<24; maxstor=1L<<31;
                     53: 
                     54:        setbuf(stdout, NULL);
                     55:        setbuf(stderr, NULL);
                     56: 
                     57:        WHILE argc>1
                     58:        DO      IF eqstr("-w",argv[1])
                     59:                THEN    wtflag=2; argc--; argv++;
                     60:                ELSE    break;
                     61:                FI
                     62:        OD
                     63: 
                     64:        IF argc>1 THEN symfil = argv[1]; FI
                     65:        IF argc>2 THEN corfil = argv[2]; FI
                     66:        fp = filework;
                     67:        if (argc > 3) {
                     68:                for (p = argv[3]; *p; *fp++ = *p++) ;
                     69:                *fp++ = '/';
                     70:        }
                     71:        argcount=argc;
                     72: 
                     73:        if (stat(symfil, &stbuf) == -1) {
                     74:                printf("`%s' does not exist\n", symfil);
                     75:                exit(4);
                     76:        }
                     77:        symtime = stbuf.st_mtime;
                     78:        if (stat(corfil, &stbuf) != -1) {
                     79:                if (symtime > stbuf.st_mtime)
                     80:                        printf("Warning: `%s' newer than `%s'\n",
                     81:                                symfil, corfil);
                     82:        }
                     83: 
                     84:        setsym(); setcor();
                     85:        initfp();
                     86: 
                     87:        /* set up variables for user */
                     88:        maxoff=MAXOFF; maxpos=MAXPOS;
                     89:        gtty(2, &sdbttym);
                     90:        IF (sigint= (ADDR) signal(SIGINT,01))!=01
                     91:        THEN    sigint= (ADDR) fault; signal(SIGINT,fault);
                     92:        FI
                     93:        sigqit= (ADDR) signal(SIGQUIT,1);
                     94:        signal(SIGILL, fpe);
                     95: #ifdef VAX135
                     96:        tfn = "/usr/hpk/sdblog/XXXXXX";
                     97: #endif
                     98: #ifdef UCBVAX
                     99:        tfn = "/usr/staff/hpk/sdblog/XXXXXX";
                    100: #endif
                    101: #ifndef STD
                    102:        tfn = mktemp(tfn);
                    103:        tfd = open(tfn);
                    104:        if (tfd < 0)
                    105:                tfd = creat(tfn, 0666);
                    106:        lseek(tfd, 0l, 2);
                    107: #endif
                    108: 
                    109:        setjmp(env);
                    110:        if (debug) printf("Sdb restarted\n");
                    111:        gtty(2, &userttym);
                    112:        if (sdbttym.sg_flags != userttym.sg_flags)
                    113:                stty(2, &sdbttym);
                    114:        IF executing THEN delbp(); FI
                    115:        executing=FALSE;
                    116: 
                    117:        for (;;) {
                    118:                mkfault = 0;
                    119:                printf("*");
                    120:                if (decode(readline(stdin)) == 1) {
                    121:                        printf("Error; try again\n");
                    122:                        continue;
                    123:                }
                    124: 
                    125:        if (debug) {
                    126:                printf("cmd %c:\n", cmd);
                    127:                printf("%s:%s\n", proc, var);
                    128:                printf("args-%s;re-%s;integ-%d\n", args, re, integ);
                    129:                printf("scallf-%d;reflg-%d\n\n", scallf, reflag);
                    130:        }
                    131: 
                    132: #ifndef STD
                    133:                write(tfd, &cmd, 1);
                    134: #endif
                    135: 
                    136:                docommand();
                    137:        }
                    138: }
                    139: 
                    140: 
                    141: fault(a)
                    142: {
                    143:        signal(a,fault);
                    144:        mkfault++;
                    145:        printf("\n");
                    146:        longjmp(env, 0);
                    147: }
                    148: 
                    149: fpe() {
                    150:        signal(SIGILL, fpe);
                    151:        error("Illegal floating constant");
                    152:        longjmp(env, 0);
                    153: }

unix.superglobalmegacorp.com

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