Annotation of 43BSDReno/sys/kdb/kdb_format.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1986 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  *
                      6:  *     @(#)kdb_format.c        7.5 (Berkeley) 5/3/90
                      7:  */
                      8: 
                      9: #include "../kdb/defs.h"
                     10: 
                     11: char   *kdbBADMOD;
                     12: char   *kdbADWRAP;
                     13: 
                     14: char   *kdblp;
                     15: char   kdblastc,kdbpeekc;
                     16: long   kdbexpv;
                     17: 
                     18: kdbscanform(icount,ifp,itype,ptype)
                     19:        long icount;
                     20:        char *ifp;
                     21: {
                     22:        register char *fp;
                     23:        char modifier;
                     24:        register fcount, init=1;
                     25:        long savdot;
                     26:        int exact;
                     27: 
                     28:        while (icount) {
                     29:                fp=ifp;
                     30:                savdot=kdbdot; init=0;
                     31:                if (!init && (exact=(kdbfindsym(kdbdot,ptype)==0)) && kdbmaxoff)
                     32:                        kdbprintf("\n%s:%16t",kdbcursym->n_un.n_name);
                     33:                /*now loop over format*/
                     34:                while (*fp && kdberrflg==0) {
                     35:                        if (isdigit(modifier = *fp)) {
                     36:                                fcount = 0;
                     37:                                while (isdigit(modifier = *fp++)) {
                     38:                                   fcount *= 10;
                     39:                                   fcount += modifier-'0';
                     40:                                }
                     41:                                fp--;
                     42:                        } else
                     43:                                fcount = 1;
                     44:                        if (*fp==0)
                     45:                                break;
                     46: #ifdef ENTRYMASK
                     47:                        /* check for entry mask */
                     48:                        if (exact && kdbdot==savdot && 
                     49:                           (kdbcursym->n_type&N_TYPE)==N_TEXT &&
                     50:                           kdbcursym->n_un.n_name[0]=='_' && *fp=='i') {
                     51:                                (void) kdbexform(1,"x",itype,ptype);
                     52:                                fp++;
                     53:                                kdbprintc(EOR);
                     54:                        } else
                     55: #endif
                     56:                                fp = kdbexform(fcount,fp,itype,ptype);
                     57:                }
                     58:                kdbdotinc=kdbdot-savdot;
                     59:                kdbdot=savdot;
                     60: 
                     61:                if (kdberrflg) {
                     62:                        if (icount<0) {
                     63:                                 kdberrflg=0;
                     64:                                 break;
                     65:                        }
                     66:                        kdberror(kdberrflg);
                     67:                }
                     68:                if (--icount)
                     69:                        kdbdot=kdbinkdot(kdbdotinc);
                     70:                if (kdbmkfault)
                     71:                        kdberror((char *)0);
                     72:        }
                     73: }
                     74: 
                     75: /*
                     76:  * Execute single format item `fcount' times
                     77:  * sets `dotinc' and moves `dot'
                     78:  * returns address of next format item
                     79:  */
                     80: char *
                     81: kdbexform(fcount,ifp,itype,ptype)
                     82:        int fcount;
                     83:        char *ifp;
                     84: {
                     85:        register POS w;
                     86:        register long savdot, wx;
                     87:        register char *fp;
                     88:        char c, modifier, longpr;
                     89: 
                     90:        while (fcount>0) {
                     91:                fp = ifp; c = *fp;
                     92:                longpr = (isupper(c) || c=='f' || c=='4' || c=='p');
                     93:                if (itype != NSP && *fp != 'a') {
                     94:                        wx = kdbget(kdbdot, itype);
                     95:                        w = shorten(wx);
                     96:                } else {
                     97:                        wx = w = kdbdot;
                     98:                        if (itype == NSP &&
                     99:                            (c == 'b' || c == 'B' ||
                    100:                             c == 'c' || c == 'C' || c == '1'))
                    101:                                w = btol(wx);
                    102:                }
                    103:                if (kdberrflg)
                    104:                        return (fp);
                    105:                if (kdbmkfault)
                    106:                        kdberror((char *)0);
                    107:                kdbvar[0] = wx;
                    108:                modifier = *fp++;
                    109:                kdbdotinc = (longpr ? sizeof (long):sizeof (short));
                    110: 
                    111:                if (kdbcharpos()==0 && modifier!='a')
                    112:                        kdbprintf("%16m");
                    113:                switch (modifier) {
                    114: 
                    115:                case SP: case TB:
                    116:                        break;
                    117: 
                    118:                case 't': case 'T':
                    119:                        kdbprintf("%T",fcount); return (fp);
                    120: 
                    121:                case 'r': case 'R':
                    122:                        kdbprintf("%M",fcount); return (fp);
                    123: 
                    124:                case 'a':
                    125:                        kdbpsymoff(kdbdot,ptype,":%16t"); kdbdotinc=0; break;
                    126: 
                    127:                case 'p':
                    128:                        kdbpsymoff(kdbvar[0],ptype,"%16t"); break;
                    129: 
                    130:                case 'u':
                    131:                        kdbprintf("%-8u",w); break;
                    132: 
                    133:                case 'U':
                    134:                        kdbprintf("%-16U",wx); break;
                    135: 
                    136:                case 'c': case 'C':
                    137:                        if (modifier == 'C')
                    138:                                kdbprintesc((int)byte(w));
                    139:                        else
                    140:                                kdbprintc((char)byte(w));
                    141:                        kdbdotinc=1; break;
                    142: 
                    143:                case 'b': case 'B':
                    144:                        kdbprintf("%-8o", byte(w)); kdbdotinc=1; break;
                    145: 
                    146:                case '1':
                    147:                        kdbprintf("%-8R", byte(w)); kdbdotinc=1; break;
                    148: 
                    149:                case 'w': case '2':
                    150:                        kdbprintf("%-8R", w); break;
                    151: 
                    152:                case 'W': case '4':
                    153:                        kdbprintf("%-16R", wx); break;
                    154: 
                    155:                case 's': case 'S':
                    156:                        savdot=kdbdot; kdbdotinc=1;
                    157:                        while ((c=byte(kdbget(kdbdot,itype))) && kdberrflg==0) {
                    158:                                kdbdot=kdbinkdot(1);
                    159:                                if (modifier == 'S')
                    160:                                        kdbprintesc((int)c);
                    161:                                else
                    162:                                        kdbprintc(c);
                    163:                                kdbendline();
                    164:                        }
                    165:                        kdbdotinc=kdbdot-savdot+1; kdbdot=savdot; break;
                    166: 
                    167:                case 'x':
                    168:                        kdbprintf("%-8x",w); break;
                    169: 
                    170:                case 'X':
                    171:                        kdbprintf("%-16X", wx); break;
                    172: 
                    173:                case 'z':
                    174:                        kdbprintf("%-8z",w); break;
                    175: 
                    176:                case 'Z':
                    177:                        kdbprintf("%-16Z", wx); break;
                    178: 
                    179:                case 'Y':
                    180:                        kdbprintf("%-24Y", wx); break;
                    181: 
                    182:                case 'q':
                    183:                        kdbprintf("%-8q", w); break;
                    184: 
                    185:                case 'Q':
                    186:                        kdbprintf("%-16Q", wx); break;
                    187: 
                    188:                case 'o':
                    189:                        kdbprintf("%-8o", w); break;
                    190: 
                    191:                case 'O':
                    192:                        kdbprintf("%-16O", wx); break;
                    193: 
                    194:                case 'i': case 'I':
                    195:                        kdbprintins(itype,wx); kdbprintc(EOR); break;
                    196: 
                    197:                case 'd':
                    198:                        kdbprintf("%-8d", w); break;
                    199: 
                    200:                case 'D':
                    201:                        kdbprintf("%-16D", wx); break;
                    202: 
                    203:                case 'n': case 'N':
                    204:                        kdbprintc('\n'); kdbdotinc=0; break;
                    205: 
                    206:                case '"':
                    207:                        kdbdotinc=0;
                    208:                        while (*fp != '"' && *fp)
                    209:                                kdbprintc(*fp++);
                    210:                        if (*fp)
                    211:                                fp++;
                    212:                        break;
                    213: 
                    214:                case '^':
                    215:                        kdbdot=kdbinkdot(-kdbdotinc*fcount); return (fp);
                    216: 
                    217:                case '+':
                    218:                        kdbdot=kdbinkdot(fcount); return (fp);
                    219: 
                    220:                case '-':
                    221:                        kdbdot=kdbinkdot(-fcount); return (fp);
                    222: 
                    223:                default:
                    224:                        kdberror(kdbBADMOD);
                    225:                }
                    226:                if (itype!=NSP)
                    227:                        kdbdot=kdbinkdot(kdbdotinc);
                    228:                fcount--; kdbendline();
                    229:        }
                    230:        return (fp);
                    231: }
                    232: 
                    233: static
                    234: kdbprintesc(c)
                    235:        register int c;
                    236: {
                    237: 
                    238:        c &= STRIP;
                    239:        if (c==0177 || c<SP)
                    240:                kdbprintf("^%c", c ^ 0100);
                    241:        else
                    242:                kdbprintc(c);
                    243: }
                    244: 
                    245: long
                    246: kdbinkdot(incr)
                    247: {
                    248:        register long newdot;
                    249: 
                    250:        newdot=kdbdot+incr;
                    251:        if (addrwrap(kdbdot, newdot))
                    252:                kdberror(kdbADWRAP);
                    253:        return (newdot);
                    254: }

unix.superglobalmegacorp.com

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