Annotation of cci/usr/src/bin/adb/output.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *
                      3:  *     UNIX debugger
                      4:  *
                      5:  */
                      6: 
                      7: #include "defs.h"
                      8: 
                      9: INT            mkfault;
                     10: INT            infile;
                     11: INT            outfile = 1;
                     12: L_INT          maxpos;
                     13: L_INT          maxoff;
                     14: INT            radix = 16;
                     15: 
                     16: CHAR           printbuf[MAXLIN];
                     17: CHAR           *printptr = printbuf;
                     18: CHAR           *digitptr;
                     19: 
                     20: printc(c)
                     21:        CHAR            c;
                     22: {
                     23:        CHAR            d;
                     24:        REG     STRING  q;
                     25:        REG             posn, tabs, p;
                     26: 
                     27:        IF mkfault
                     28:        THEN    return;
                     29:        ELIF (*printptr=c)==EOR
                     30:        THEN tabs=0; posn=0; q=printbuf;
                     31:             FOR p=0; p<printptr-printbuf; p++
                     32:             DO d=printbuf[p];
                     33:                IF (p&7)==0 ANDF posn
                     34:                THEN tabs++; posn=0;
                     35:                FI
                     36:                IF d==SP
                     37:                THEN posn++;
                     38:                ELSE WHILE tabs>0 DO *q++=TB; tabs--; OD
                     39:                     WHILE posn>0 DO *q++=SP; posn--; OD
                     40:                     *q++=d;
                     41:                FI
                     42:             OD
                     43:             *q++=EOR;
                     44: #ifdef EDDT
                     45:                printptr=printbuf; do putchar(*printptr++); while (printptr<q);
                     46: #else
                     47:             write(outfile,printbuf,q-printbuf);
                     48: #endif
                     49:             printptr=printbuf;
                     50:        ELIF c==TB
                     51:        THEN *printptr++=SP;
                     52:             WHILE (printptr-printbuf)&7 DO *printptr++=SP; OD
                     53:        ELIF c
                     54:        THEN printptr++;
                     55:        FI
                     56: }
                     57: 
                     58: charpos()
                     59: {      return(printptr-printbuf);
                     60: }
                     61: 
                     62: flushbuf()
                     63: {      IF printptr!=printbuf
                     64:        THEN printc(EOR);
                     65:        FI
                     66: }
                     67: 
                     68: /* VARARGS1 */
                     69: printf(fmat,a1)
                     70:        STRING          fmat;
                     71:        STRING          a1;
                     72: {
                     73:        STRING  fptr;
                     74:        REG     STRING  s;
                     75:        REG     L_INT   *dptr;
                     76:        L_REAL          *rptr;
                     77:        REG             width, prec;
                     78:        CHAR            c, adj;
                     79:        INT             x, n;
                     80:        REG     L_INT   lx;
                     81:        CHAR            digits[64];
                     82: 
                     83:        fptr = fmat; dptr = (L_INT *)&a1;
                     84: 
                     85:        WHILE c = *fptr++
                     86:        DO  IF c!='%'
                     87:            THEN printc(c);
                     88:            ELSE IF *fptr=='-' THEN adj='l'; fptr++; ELSE adj='r'; FI
                     89:                 width=convert(&fptr);
                     90:                 IF *fptr=='.' THEN fptr++; prec=convert(&fptr); ELSE prec = -1; FI
                     91:                 digitptr=digits;
                     92:                 rptr=(L_REAL *)dptr; x = lx = *dptr++;
                     93:                 s=0;
                     94:                 switch (c = *fptr++) {
                     95: 
                     96:                    case 'd':
                     97:                        printnum(x, -10); break;
                     98:                    case 'u':
                     99:                        printnum((unsigned short)x, 10); break;
                    100:                    case 'o':
                    101:                        printnum((unsigned short)x, 8); break;
                    102:                    case 'q':
                    103:                        printnum(x, -8); break;
                    104:                    case 'x':
                    105:                        printnum((unsigned short)x, 16); break;
                    106:                    case 'z':
                    107:                        printnum((unsigned short)x, -16); break;
                    108:                    case 'R':
                    109:                        printnum(lx, radix); break;
                    110:                    case 'Y':
                    111:                        printdate(lx); break;
                    112:                    case 'D':
                    113:                        printnum(lx, -10); break;
                    114:                    case 'U':
                    115:                        printnum(lx, 10); break;
                    116:                    case 'O':
                    117:                        printnum(lx, 8); break;
                    118:                    case 'Q':
                    119:                        printnum(lx, -8); break;
                    120:                    case 'X':
                    121:                        printnum(lx, 16); break;
                    122:                    case 'Z':
                    123:                        printnum(lx, -16); break;
                    124:                    case 'c':
                    125:                        printc(x); break;
                    126:                    case 's':
                    127:                        s=(STRING)lx; break;
                    128: #ifndef EDDT
                    129:                    case 'f':
                    130:                    case 'F':
                    131:                        dptr++;
                    132:                        sprintf(s=digits, "%*.*f", width, prec, *rptr); prec= -1; break;
                    133: #endif
                    134:                    case 'm':
                    135:                        break;
                    136:                    case 'M':
                    137:                        width=x; break;
                    138:                    case 'T':
                    139:                    case 't':
                    140:                        IF c=='T'
                    141:                        THEN width=x;
                    142:                        ELSE dptr--;
                    143:                        FI
                    144:                        IF width
                    145:                        THEN width -= charpos()%width;
                    146:                        FI
                    147:                        break;
                    148:                    default:
                    149:                        printc(c); dptr--;
                    150:                }
                    151: 
                    152:                IF s==0
                    153:                THEN *digitptr=0; s=digits;
                    154:                FI
                    155:                n=strlen(s);
                    156:                n=(prec<n ANDF prec>=0 ? prec : n);
                    157:                width -= n;
                    158:                IF adj=='r'
                    159:                THEN WHILE width-- > 0
                    160:                     DO printc(SP); OD
                    161:                FI
                    162:                WHILE n-- DO printc(*s++); OD
                    163:                WHILE width-- > 0 DO printc(SP); OD
                    164:                digitptr=digits;
                    165:            FI
                    166:        OD
                    167: }
                    168: 
                    169: printdate(tvec)
                    170:        L_INT           tvec;
                    171: {
                    172:        REG             i;
                    173:        REG STRING      timeptr;
                    174:        STRING          ctime();
                    175: 
                    176: #ifndef EDDT
                    177:        timeptr = ctime(&tvec);
                    178: #else
                    179:        timeptr="????????????????????????";
                    180: #endif
                    181:        FOR i=20; i<24; i++ DO *digitptr++ = *(timeptr+i); OD
                    182:        FOR i=3; i<19; i++ DO *digitptr++ = *(timeptr+i); OD
                    183: } /*printdate*/
                    184: 
                    185: convert(cp)
                    186: REG STRING     *cp;
                    187: {
                    188:        REG CHAR        c;
                    189:        INT             n;
                    190:        n=0;
                    191:        WHILE ((c = *(*cp)++)>='0') ANDF (c<='9') DO n=n*10+c-'0'; OD
                    192:        (*cp)--;
                    193:        return(n);
                    194: }
                    195: 
                    196: printnum(n, base)
                    197:        REG POS         n;
                    198: {
                    199:        REG CHAR        *dptr;
                    200:        CHAR            digs[15];
                    201:        dptr=digs;
                    202:        IF base<0 THEN base = -base;
                    203:                IF (L_INT)n<0 THEN n = -n; *digitptr++ = '-'; FI
                    204:        FI
                    205:        WHILE n
                    206:        DO  *dptr++ = n%base;
                    207:            n /= base;
                    208:        OD
                    209:        IF dptr==digs THEN *dptr++=0; FI
                    210:        WHILE dptr!=digs
                    211:        DO  n = *--dptr;
                    212:            *digitptr++ = (n+(n<=9 ? '0' : 'a'-10));
                    213:        OD
                    214: }
                    215: 
                    216: iclose()
                    217: {
                    218:        IF infile
                    219:        THEN    close(infile); infile=0;
                    220:        FI
                    221: }
                    222: 
                    223: oclose()
                    224: {
                    225:        IF outfile!=1
                    226:        THEN    flushbuf(); close(outfile); outfile=1;
                    227:        FI
                    228: }
                    229: 
                    230: endline()
                    231: {
                    232: 
                    233:        if (maxpos <= charpos())
                    234:                printf("\n");
                    235: }

unix.superglobalmegacorp.com

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