Annotation of 42BSD/bin/adb/output.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)output.c   4.3 8/11/83";
        !             3: #endif
        !             4: /*
        !             5:  *
        !             6:  *     UNIX debugger
        !             7:  *
        !             8:  */
        !             9: 
        !            10: #include "defs.h"
        !            11: #include <stdio.h>
        !            12: 
        !            13: 
        !            14: INT            mkfault;
        !            15: INT            infile;
        !            16: INT            outfile = 1;
        !            17: L_INT          maxpos;
        !            18: L_INT          maxoff;
        !            19: INT            radix = 16;
        !            20: 
        !            21: CHAR           printbuf[MAXLIN];
        !            22: CHAR           *printptr = printbuf;
        !            23: CHAR           *digitptr;
        !            24: MSG            TOODEEP;
        !            25: 
        !            26: 
        !            27: eqstr(s1, s2)
        !            28:        REG STRING      s1, s2;
        !            29: {
        !            30:        REG STRING       es1;
        !            31:        WHILE *s1++ == *s2
        !            32:        DO IF *s2++ == 0
        !            33:           THEN return(1);
        !            34:           FI
        !            35:        OD
        !            36:        return(0);
        !            37: }
        !            38: 
        !            39: length(s)
        !            40:        REG STRING              s;
        !            41: {
        !            42:        INT             n = 0;
        !            43:        WHILE *s++ DO n++; OD
        !            44:        return(n);
        !            45: }
        !            46: 
        !            47: printc(c)
        !            48:        CHAR            c;
        !            49: {
        !            50:        CHAR            d;
        !            51:        STRING          q;
        !            52:        INT             posn, tabs, p;
        !            53: 
        !            54:        IF mkfault
        !            55:        THEN    return;
        !            56:        ELIF (*printptr=c)==EOR
        !            57:        THEN tabs=0; posn=0; q=printbuf;
        !            58:             FOR p=0; p<printptr-printbuf; p++
        !            59:             DO d=printbuf[p];
        !            60:                IF (p&7)==0 ANDF posn
        !            61:                THEN tabs++; posn=0;
        !            62:                FI
        !            63:                IF d==SP
        !            64:                THEN posn++;
        !            65:                ELSE WHILE tabs>0 DO *q++=TB; tabs--; OD
        !            66:                     WHILE posn>0 DO *q++=SP; posn--; OD
        !            67:                     *q++=d;
        !            68:                FI
        !            69:             OD
        !            70:             *q++=EOR;
        !            71: #ifdef EDDT
        !            72:                printptr=printbuf; do putchar(*printptr++); while (printptr<q);
        !            73: #else
        !            74:             write(outfile,printbuf,q-printbuf);
        !            75: #endif
        !            76:             printptr=printbuf;
        !            77:        ELIF c==TB
        !            78:        THEN *printptr++=SP;
        !            79:             WHILE (printptr-printbuf)&7 DO *printptr++=SP; OD
        !            80:        ELIF c
        !            81:        THEN printptr++;
        !            82:        FI
        !            83:        IF printptr >= &printbuf[MAXLIN-9] THEN
        !            84:                write(outfile, printbuf, printptr - printbuf);
        !            85:                printptr = printbuf;
        !            86:        FI
        !            87: }
        !            88: 
        !            89: charpos()
        !            90: {      return(printptr-printbuf);
        !            91: }
        !            92: 
        !            93: flushbuf()
        !            94: {      IF printptr!=printbuf
        !            95:        THEN printc(EOR);
        !            96:        FI
        !            97: }
        !            98: 
        !            99: printf(fmat,a1)
        !           100:        STRING          fmat;
        !           101:        STRING          *a1;
        !           102: {
        !           103:        STRING          fptr, s;
        !           104:        INT             *vptr;
        !           105:        L_INT           *dptr;
        !           106:        L_REAL          *rptr;
        !           107:        INT             width, prec;
        !           108:        CHAR            c, adj;
        !           109:        INT             x, decpt, n;
        !           110:        L_INT           lx;
        !           111:        CHAR            digits[64];
        !           112: 
        !           113:        fptr = fmat; dptr = vptr = &a1;
        !           114: 
        !           115:        WHILE c = *fptr++
        !           116:        DO  IF c!='%'
        !           117:            THEN printc(c);
        !           118:            ELSE IF *fptr=='-' THEN adj='l'; fptr++; ELSE adj='r'; FI
        !           119:                 width=convert(&fptr);
        !           120:                 IF *fptr=='.' THEN fptr++; prec=convert(&fptr); ELSE prec = -1; FI
        !           121:                 digitptr=digits;
        !           122: #ifndef vax
        !           123:                 dptr=rptr=vptr; lx = *dptr; x = *vptr++;
        !           124: #else
        !           125:                 rptr=dptr; x = shorten(lx = *dptr++);
        !           126: #endif
        !           127:                 s=0;
        !           128:                 switch (c = *fptr++) {
        !           129: 
        !           130:                    case 'd':
        !           131:                    case 'u':
        !           132:                        printnum(x,c,10); break;
        !           133:                    case 'o':
        !           134: #ifndef vax
        !           135:                        printoct(0,x,0); break;
        !           136: #else
        !           137:                        printoct(itol(0,x),0); break;
        !           138: #endif
        !           139:                    case 'q':
        !           140:                        lx=x; printoct(lx,-1); break;
        !           141:                    case 'x':
        !           142: #ifndef vax
        !           143:                        printdbl(0,x,c,16); break;
        !           144: #else
        !           145:                        printdbl(itol(0,x),c,16); break;
        !           146: #endif
        !           147:                        case 'r':
        !           148:                        printdbl(lx=x,c,radix); break;
        !           149:                        case 'R':
        !           150:                        printdbl(lx,c,radix); vptr++; break;
        !           151:                    case 'Y':
        !           152:                        printdate(lx); vptr++; break;
        !           153:                    case 'D':
        !           154:                    case 'U':
        !           155:                        printdbl(lx,c,10); vptr++; break;
        !           156:                    case 'O':
        !           157:                        printoct(lx,0); vptr++; break;
        !           158:                    case 'Q':
        !           159:                        printoct(lx,-1); vptr++; break;
        !           160:                    case 'X':
        !           161:                        printdbl(lx,'x',16); vptr++; break;
        !           162:                    case 'c':
        !           163:                        printc(x); break;
        !           164:                    case 's':
        !           165: #ifndef vax
        !           166:                        s=x; break;
        !           167: #else
        !           168:                        s=lx; break;
        !           169: #endif
        !           170: #ifndef EDDT
        !           171:                    case 'f':
        !           172:                    case 'F':
        !           173: #ifdef vax
        !           174:                        dptr++;
        !           175:                        sprintf(s=digits,"%+.16e",*rptr,*(rptr+4)); prec= -1; break;
        !           176: #else
        !           177:                        vptr += 7;
        !           178:                        s=ecvt(*rptr, prec, &decpt, &n);
        !           179:                        *digitptr++=(n?'-':'+');
        !           180:                        *digitptr++ = (decpt<=0 ? '0' : *s++);
        !           181:                        IF decpt>0 THEN decpt--; FI
        !           182:                        *digitptr++ = '.';
        !           183:                        WHILE *s ANDF prec-- DO *digitptr++ = *s++; OD
        !           184:                        WHILE *--digitptr=='0' DONE
        !           185:                        digitptr += (digitptr-digits>=3 ? 1 : 2);
        !           186:                        IF decpt
        !           187:                        THEN *digitptr++ = 'e'; printnum(decpt,'d',10);
        !           188:                        FI
        !           189:                        s=0; prec = -1; break;
        !           190: #endif
        !           191: #endif
        !           192:                    case 'm':
        !           193:                        vptr--; break;
        !           194:                    case 'M':
        !           195:                        width=x; break;
        !           196:                    case 'T':
        !           197:                    case 't':
        !           198:                        IF c=='T'
        !           199:                        THEN width=x;
        !           200: #ifndef vax
        !           201:                        ELSE vptr--;
        !           202: #else
        !           203:                        ELSE dptr--;
        !           204: #endif
        !           205:                        FI
        !           206:                        IF width
        !           207:                        THEN width -= charpos()%width;
        !           208:                        FI
        !           209:                        break;
        !           210:                    default:
        !           211: #ifndef vax
        !           212:                        printc(c); vptr--;
        !           213: #else
        !           214:                        printc(c); dptr--;
        !           215: #endif
        !           216:                }
        !           217: 
        !           218:                IF s==0
        !           219:                THEN *digitptr=0; s=digits;
        !           220:                FI
        !           221:                n=length(s);
        !           222:                n=(prec<n ANDF prec>=0 ? prec : n);
        !           223:                width -= n;
        !           224:                IF adj=='r'
        !           225:                THEN WHILE width-- > 0
        !           226:                     DO printc(SP); OD
        !           227:                FI
        !           228:                WHILE n-- DO printc(*s++); OD
        !           229:                WHILE width-- > 0 DO printc(SP); OD
        !           230:                digitptr=digits;
        !           231:            FI
        !           232:        OD
        !           233: }
        !           234: 
        !           235: printdate(tvec)
        !           236:        L_INT           tvec;
        !           237: {
        !           238:        REG INT         i;
        !           239:        REG STRING      timeptr;
        !           240: #ifndef EDDT
        !           241:        timeptr = ctime(&tvec);
        !           242: #else
        !           243:        timeptr="????????????????????????";
        !           244: #endif
        !           245:        FOR i=20; i<24; i++ DO *digitptr++ = *(timeptr+i); OD
        !           246:        FOR i=3; i<19; i++ DO *digitptr++ = *(timeptr+i); OD
        !           247: } /*printdate*/
        !           248: 
        !           249: prints(s)
        !           250: char *s;
        !           251: {      printf("%s",s);
        !           252: }
        !           253: 
        !           254: newline()
        !           255: {
        !           256:        printc(EOR);
        !           257: }
        !           258: 
        !           259: convert(cp)
        !           260: REG STRING     *cp;
        !           261: {
        !           262:        REG CHAR        c;
        !           263:        INT             n;
        !           264:        n=0;
        !           265:        WHILE ((c = *(*cp)++)>='0') ANDF (c<='9') DO n=n*10+c-'0'; OD
        !           266:        (*cp)--;
        !           267:        return(n);
        !           268: }
        !           269: 
        !           270: printnum(n,fmat,base)
        !           271:        REG INT         n;
        !           272: {
        !           273:        REG CHAR        k;
        !           274:        REG INT         *dptr;
        !           275:        INT             digs[15];
        !           276:        dptr=digs;
        !           277:        IF n<0 ANDF fmat=='d' THEN n = -n; *digitptr++ = '-'; FI
        !           278:        n &= 0xffff;
        !           279:        WHILE n
        !           280:        DO  *dptr++ = ((POS)(n&0xffff))%base;
        !           281:            n=((POS)(n&0xffff))/base;
        !           282:        OD
        !           283:        IF dptr==digs THEN *dptr++=0; FI
        !           284:        WHILE dptr!=digs
        !           285:        DO  k = *--dptr;
        !           286:            *digitptr++ = (k+(k<=9 ? '0' : 'a'-10));
        !           287:        OD
        !           288: }
        !           289: 
        !           290: printoct(o,s)
        !           291:        L_INT           o;
        !           292:        INT             s;
        !           293: {
        !           294:        INT             i;
        !           295:        L_INT           po = o;
        !           296:        CHAR            digs[12];
        !           297: 
        !           298:        IF s
        !           299:        THEN IF po<0
        !           300:             THEN po = -po; *digitptr++='-';
        !           301:             ELSE IF s>0 THEN *digitptr++='+'; FI
        !           302:             FI
        !           303:        FI
        !           304:        FOR i=0;i<=11;i++
        !           305:        DO digs[i] = po&7; po >>= 3; OD
        !           306:        digs[10] &= 03; digs[11]=0;
        !           307:        FOR i=11;i>=0;i--
        !           308:        DO IF digs[i] THEN break; FI OD
        !           309:        FOR i++;i>=0;i--
        !           310:        DO *digitptr++=digs[i]+'0'; OD
        !           311: }
        !           312: 
        !           313: #ifndef vax
        !           314: printdbl(lx,ly,fmat,base)
        !           315: INT lx, ly; char fmat; int base;
        !           316: #else
        !           317: printdbl(lxy,fmat,base)
        !           318: L_INT lxy; char fmat; int base;
        !           319: #endif
        !           320: {      int digs[20]; int *dptr; char k;
        !           321: #ifndef MULD2
        !           322:        register char *cp1;
        !           323:        cp1=digs; if ((lxy&0xFFFF0000L)==0xFFFF0000L) {*cp1++='-'; lxy= -lxy;}
        !           324:        sprintf(cp1,base==16 ? "%X" : "%D",lxy);
        !           325:        cp1=digs; while (*digitptr++= *cp1++); --digitptr;
        !           326: #else
        !           327:        L_REAL f ,g; long q;
        !           328: #ifdef vax
        !           329:        INT lx,ly;
        !           330:        ly=lxy; lx=(lxy>>16)&0xFFFF;
        !           331: #endif
        !           332:        dptr=digs;
        !           333:        IF fmat=='D' ORF fmat=='r'
        !           334:        THEN    f=itol(lx,ly);
        !           335:                IF f<0 THEN *digitptr++='-'; f = -f; FI
        !           336:        ELSE
        !           337:                IF lx==-1
        !           338:                THEN *digitptr++='-'; f=leng(-ly);
        !           339:                ELSE f=leng(lx); f *= itol(1,0); f += leng(ly);
        !           340:                FI
        !           341:                IF fmat=='x' THEN *digitptr++='#'; FI
        !           342:        FI
        !           343:        WHILE f
        !           344:        DO  q=f/base; g=q;
        !           345:            *dptr++ = f-g*base;
        !           346:            f=q;
        !           347:        OD
        !           348:        IF dptr==digs ORF dptr[-1]>9 THEN *dptr++=0; FI
        !           349:        WHILE dptr!=digs
        !           350:        DO  k = *--dptr;
        !           351:            *digitptr++ = (k+(k<=9 ? '0' : 'a'-10));
        !           352:        OD
        !           353: #endif
        !           354: }
        !           355: 
        !           356: #define        MAXIFD  5
        !           357: struct {
        !           358:        int     fd;
        !           359:        int     r9;
        !           360: } istack[MAXIFD];
        !           361: int    ifiledepth;
        !           362: 
        !           363: iclose(stack, err)
        !           364: {
        !           365:        IF err
        !           366:        THEN    IF infile
        !           367:                THEN    close(infile); infile=0;
        !           368:                FI
        !           369:                WHILE --ifiledepth >= 0
        !           370:                DO      IF istack[ifiledepth].fd
        !           371:                        THEN    close(istack[ifiledepth].fd);
        !           372:                        FI
        !           373:                OD
        !           374:                ifiledepth = 0;
        !           375:        ELIF stack == 0
        !           376:        THEN    IF infile
        !           377:                THEN    close(infile); infile=0;
        !           378:                FI
        !           379:        ELIF stack > 0
        !           380:        THEN    IF ifiledepth >= MAXIFD
        !           381:                THEN    error(TOODEEP);
        !           382:                FI
        !           383:                istack[ifiledepth].fd = infile;
        !           384:                istack[ifiledepth].r9 = var[9];
        !           385:                ifiledepth++;
        !           386:                infile = 0;
        !           387:        ELSE    IF infile
        !           388:                THEN    close(infile); infile=0;
        !           389:                FI
        !           390:                IF ifiledepth > 0
        !           391:                THEN    infile = istack[--ifiledepth].fd;
        !           392:                        var[9] = istack[ifiledepth].r9;
        !           393:                FI
        !           394:        FI
        !           395: }
        !           396: 
        !           397: oclose()
        !           398: {
        !           399:        IF outfile!=1
        !           400:        THEN    flushbuf(); close(outfile); outfile=1;
        !           401:        FI
        !           402: }
        !           403: 
        !           404: endline()
        !           405: {
        !           406: 
        !           407:        if (maxpos <= charpos())
        !           408:                printf("\n");
        !           409: }

unix.superglobalmegacorp.com

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