Annotation of 3BSD/cmd/sdb/main.c, revision 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.