Annotation of researchv10no/cmd/adb/comm/print.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *
        !             3:  *     UNIX debugger
        !             4:  *
        !             5:  */
        !             6: #include "defs.h"
        !             7: #include "regs.h"
        !             8: #include "sym.h"
        !             9: #include "bkpt.h"
        !            10: #include "map.h"
        !            11: #include "space.h"
        !            12: 
        !            13: extern int     infile;
        !            14: extern int     outfile;
        !            15: extern int     maxpos;
        !            16: extern int     radix;
        !            17: extern char    lastc;
        !            18: extern int     maxargs;
        !            19: 
        !            20: static int redirin(), redirout();
        !            21: static char *getfname();
        !            22: 
        !            23: /* general printing routines ($) */
        !            24: 
        !            25: char   *Ipath = INCDIR;
        !            26: 
        !            27: printtrace(modif)
        !            28: {
        !            29:        int     i;
        !            30:        register BKPT *bk;
        !            31:        register struct sym *sp;
        !            32:        int     stack;
        !            33:        char    *fname;
        !            34: 
        !            35:        if (cntflg==0)
        !            36:                cntval = -1;
        !            37:        switch (modif) {
        !            38: 
        !            39:        case '<':
        !            40:                if (cntval == 0) {
        !            41:                        while (readchar() != EOR)
        !            42:                                ;
        !            43:                        reread();
        !            44:                        break;
        !            45:                }
        !            46:                if (rdc() == '<')
        !            47:                        stack = 1;
        !            48:                else {
        !            49:                        stack = 0;
        !            50:                        reread();
        !            51:                }
        !            52:                fname = getfname();
        !            53:                redirin(stack, fname);
        !            54:                break;
        !            55: 
        !            56:        case '>':
        !            57:                fname = getfname();
        !            58:                redirout(fname);
        !            59:                break;
        !            60: 
        !            61:        case 'p':
        !            62:                kmproc();
        !            63:                break;
        !            64: 
        !            65:        case 'k':
        !            66:                kmsys();
        !            67:                break;
        !            68: 
        !            69:        case 'd':
        !            70:                if (adrflg) {
        !            71:                        if (adrval != 0
        !            72:                        &&  (adrval<2 || adrval>16))
        !            73:                                error("radix should be between 2 and 16, or 0");
        !            74:                        radix = adrval;
        !            75:                        if (radix)
        !            76:                                printf("radix=%d base ten",radix);
        !            77:                        else
        !            78:                                printf("radix=magic");
        !            79:                }
        !            80:                break;
        !            81: 
        !            82:        case 'q':
        !            83:        case 'Q':
        !            84:                done();
        !            85: 
        !            86:        case 'w':
        !            87:                maxpos=(adrflg?adrval:MAXPOS);
        !            88:                break;
        !            89: 
        !            90:        case 'S':
        !            91:                printsym();
        !            92:                break;
        !            93: 
        !            94:        case 's':
        !            95:                maxoff=(adrflg?adrval:MAXOFF);
        !            96:                break;
        !            97: 
        !            98:        case 'v':
        !            99:                for (i=0;i<NVARS;i++) {
        !           100:                        if (var[i])
        !           101:                                printf("%-8R >%c\n", var[i],
        !           102:                                        (i<=9 ? '0' : 'a'-10) + i);
        !           103:                }
        !           104:                break;
        !           105: 
        !           106:        case 'm':
        !           107:                printmap("? map", symmap);
        !           108:                printmap("/ map", cormap);
        !           109:                break;
        !           110: 
        !           111:        case 0:
        !           112:        case '?':
        !           113:                if (pid)
        !           114:                        printf("pcs id = %d\n",pid);
        !           115:                else
        !           116:                        prints("no process\n");
        !           117:                sigprint();
        !           118:                flushbuf();
        !           119: 
        !           120:        case 'r':
        !           121:        case 'R':
        !           122:                printregs(modif);
        !           123:                return;
        !           124: 
        !           125:        case 'c':
        !           126:        case 'C':
        !           127:                ctrace(modif);
        !           128:                break;
        !           129: 
        !           130:        case 'a':
        !           131:                if (adrflg)
        !           132:                        maxargs = adrval;
        !           133:                else
        !           134:                        printf("%R$a\n", maxargs);
        !           135:                return;
        !           136: 
        !           137:                /*print externals*/
        !           138:        case 'e':
        !           139:                for (sp = symtab; sp; sp = sp->y_next) {
        !           140:                        if (sp->y_type==S_DATA)
        !           141:                                printf("%s/%12t%R\n", sp->y_name,
        !           142:                                        ltow(lget(sp->y_value,CORF|DATASP)));
        !           143:                }
        !           144:                break;
        !           145: 
        !           146:                /*print breakpoints*/
        !           147:        case 'b':
        !           148:        case 'B':
        !           149:                for (bk=bkpthead; bk; bk=bk->nxtbkpt)
        !           150:                        if (bk->flag) {
        !           151:                                psymoff((WORD)bk->loc,INSTSP,"");
        !           152:                                if (bk->count != 1)
        !           153:                                        printf(",%d", bk->count);
        !           154:                                printf(":%c %s", bk->flag == BKPTTMP ? 'B' : 'b', bk->comm);
        !           155:                        }
        !           156:                break;
        !           157: 
        !           158:        default:
        !           159:                error("bad `$' command");
        !           160:        }
        !           161: 
        !           162: }
        !           163: 
        !           164: static
        !           165: char *
        !           166: getfname()
        !           167: {
        !           168:        static char fname[ARB];
        !           169:        register char *p;
        !           170: 
        !           171:        if (rdc() == EOR) {
        !           172:                reread();
        !           173:                return (NULL);
        !           174:        }
        !           175:        p = fname;
        !           176:        do {
        !           177:                *p++ = lastc;
        !           178:                if (p >= &fname[ARB-1])
        !           179:                        error("filename too long");
        !           180:        } while (rdc() != EOR);
        !           181:        *p = 0;
        !           182:        reread();
        !           183:        return (fname);
        !           184: }
        !           185: 
        !           186: static
        !           187: redirin(stack, file)
        !           188: int stack;
        !           189: char *file;
        !           190: {
        !           191:        char pfile[ARB];
        !           192: 
        !           193:        if (file == NULL) {
        !           194:                iclose(-1, 0);
        !           195:                return;
        !           196:        }
        !           197:        iclose(stack, 0);
        !           198:        if ((infile = open(file, 0)) < 0) {
        !           199:                strcpy(pfile, Ipath);
        !           200:                strcat(pfile, "/");
        !           201:                strcat(pfile, file);
        !           202:                if ((infile = open(pfile, 0)) < 0) {
        !           203:                        infile = STDIN;
        !           204:                        error("cannot open");
        !           205:                }
        !           206:        }
        !           207:        if (cntflg)
        !           208:                var[9] = cntval;
        !           209:        else
        !           210:                var[9] = 1;
        !           211: }
        !           212: 
        !           213: static
        !           214: redirout(file)
        !           215: char *file;
        !           216: {
        !           217: 
        !           218:        oclose();
        !           219:        if (file == NULL)
        !           220:                return;
        !           221:        if ((outfile = open(file, 1)) >= 0)
        !           222:                lseek(outfile, 0L, 2);
        !           223:        else if ((outfile = creat(file, 0666)) < 0) {
        !           224:                outfile = STDOUT;
        !           225:                error("cannot create");
        !           226:        }
        !           227: }
        !           228: 
        !           229: printmap(s,mp)
        !           230: char *s;
        !           231: register MAP *mp;
        !           232: {
        !           233:        char *maptype();
        !           234: 
        !           235:        if (mp == symmap)
        !           236:                printf("%s%12t`%s'\n", s, fsym < 0 ? "-" : symfil);
        !           237:        else if (mp == cormap)
        !           238:                printf("%s%12t`%s'\n", s, fcor < 0 ? "-" : corfil);
        !           239:        else
        !           240:                printf("%s\n", s);
        !           241:        for (; mp->flag & MPINUSE; mp++)
        !           242:                printf("%-8s %-16R %-16R %-16R\n",
        !           243:                    maptype(mp->sp), (WORD)mp->b, (WORD)mp->e, (WORD)mp->f);
        !           244: }
        !           245: 
        !           246: char *
        !           247: maptype(sp)
        !           248: int sp;
        !           249: {
        !           250: 
        !           251:        switch (sp & SPTYPE) {
        !           252:        case INSTSP:
        !           253:                return ("text");
        !           254:        case DATASP:
        !           255:                return ("data");
        !           256:        case UBLKSP:
        !           257:                return ("user");
        !           258:        default:
        !           259:                return ("nonsense");
        !           260:        }
        !           261: }

unix.superglobalmegacorp.com

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