Annotation of 43BSDReno/sys/kdb/Old/kdb_format.c, revision 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.4 (Berkeley) 12/15/86
        !             7:  */
        !             8: 
        !             9: #include "../kdb/defs.h"
        !            10: 
        !            11: char   *BADMOD;
        !            12: char   *ADWRAP;
        !            13: 
        !            14: char   *lp;
        !            15: char   lastc,peekc;
        !            16: long   expv;
        !            17: 
        !            18: scanform(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=dot; init=0;
        !            31:                if (!init && (exact=(findsym(dot,ptype)==0)) && maxoff)
        !            32:                        printf("\n%s:%16t",cursym->n_un.n_name);
        !            33:                /*now loop over format*/
        !            34:                while (*fp && errflg==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 && dot==savdot && 
        !            49:                           (cursym->n_type&N_TYPE)==N_TEXT &&
        !            50:                           cursym->n_un.n_name[0]=='_' && *fp=='i') {
        !            51:                                (void) exform(1,"x",itype,ptype);
        !            52:                                fp++;
        !            53:                                printc(EOR);
        !            54:                        } else
        !            55: #endif
        !            56:                                fp = exform(fcount,fp,itype,ptype);
        !            57:                }
        !            58:                dotinc=dot-savdot;
        !            59:                dot=savdot;
        !            60: 
        !            61:                if (errflg) {
        !            62:                        if (icount<0) {
        !            63:                                 errflg=0;
        !            64:                                 break;
        !            65:                        }
        !            66:                        error(errflg);
        !            67:                }
        !            68:                if (--icount)
        !            69:                        dot=inkdot(dotinc);
        !            70:                if (mkfault)
        !            71:                        error((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: exform(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 = get(dot, itype);
        !            95:                        w = shorten(wx);
        !            96:                } else {
        !            97:                        wx = w = dot;
        !            98:                        if (itype == NSP &&
        !            99:                            (c == 'b' || c == 'B' ||
        !           100:                             c == 'c' || c == 'C' || c == '1'))
        !           101:                                w = btol(wx);
        !           102:                }
        !           103:                if (errflg)
        !           104:                        return (fp);
        !           105:                if (mkfault)
        !           106:                        error((char *)0);
        !           107:                var[0] = wx;
        !           108:                modifier = *fp++;
        !           109:                dotinc = (longpr ? sizeof (long):sizeof (short));
        !           110: 
        !           111:                if (charpos()==0 && modifier!='a')
        !           112:                        printf("%16m");
        !           113:                switch (modifier) {
        !           114: 
        !           115:                case SP: case TB:
        !           116:                        break;
        !           117: 
        !           118:                case 't': case 'T':
        !           119:                        printf("%T",fcount); return (fp);
        !           120: 
        !           121:                case 'r': case 'R':
        !           122:                        printf("%M",fcount); return (fp);
        !           123: 
        !           124:                case 'a':
        !           125:                        psymoff(dot,ptype,":%16t"); dotinc=0; break;
        !           126: 
        !           127:                case 'p':
        !           128:                        psymoff(var[0],ptype,"%16t"); break;
        !           129: 
        !           130:                case 'u':
        !           131:                        printf("%-8u",w); break;
        !           132: 
        !           133:                case 'U':
        !           134:                        printf("%-16U",wx); break;
        !           135: 
        !           136:                case 'c': case 'C':
        !           137:                        if (modifier == 'C')
        !           138:                                printesc((int)byte(w));
        !           139:                        else
        !           140:                                printc((char)byte(w));
        !           141:                        dotinc=1; break;
        !           142: 
        !           143:                case 'b': case 'B':
        !           144:                        printf("%-8o", byte(w)); dotinc=1; break;
        !           145: 
        !           146:                case '1':
        !           147:                        printf("%-8R", byte(w)); dotinc=1; break;
        !           148: 
        !           149:                case 'w': case '2':
        !           150:                        printf("%-8R", w); break;
        !           151: 
        !           152:                case 'W': case '4':
        !           153:                        printf("%-16R", wx); break;
        !           154: 
        !           155:                case 's': case 'S':
        !           156:                        savdot=dot; dotinc=1;
        !           157:                        while ((c=byte(get(dot,itype))) && errflg==0) {
        !           158:                                dot=inkdot(1);
        !           159:                                if (modifier == 'S')
        !           160:                                        printesc((int)c);
        !           161:                                else
        !           162:                                        printc(c);
        !           163:                                endline();
        !           164:                        }
        !           165:                        dotinc=dot-savdot+1; dot=savdot; break;
        !           166: 
        !           167:                case 'x':
        !           168:                        printf("%-8x",w); break;
        !           169: 
        !           170:                case 'X':
        !           171:                        printf("%-16X", wx); break;
        !           172: 
        !           173:                case 'z':
        !           174:                        printf("%-8z",w); break;
        !           175: 
        !           176:                case 'Z':
        !           177:                        printf("%-16Z", wx); break;
        !           178: 
        !           179:                case 'Y':
        !           180:                        printf("%-24Y", wx); break;
        !           181: 
        !           182:                case 'q':
        !           183:                        printf("%-8q", w); break;
        !           184: 
        !           185:                case 'Q':
        !           186:                        printf("%-16Q", wx); break;
        !           187: 
        !           188:                case 'o':
        !           189:                        printf("%-8o", w); break;
        !           190: 
        !           191:                case 'O':
        !           192:                        printf("%-16O", wx); break;
        !           193: 
        !           194:                case 'i': case 'I':
        !           195:                        printins(itype,wx); printc(EOR); break;
        !           196: 
        !           197:                case 'd':
        !           198:                        printf("%-8d", w); break;
        !           199: 
        !           200:                case 'D':
        !           201:                        printf("%-16D", wx); break;
        !           202: 
        !           203:                case 'n': case 'N':
        !           204:                        printc('\n'); dotinc=0; break;
        !           205: 
        !           206:                case '"':
        !           207:                        dotinc=0;
        !           208:                        while (*fp != '"' && *fp)
        !           209:                                printc(*fp++);
        !           210:                        if (*fp)
        !           211:                                fp++;
        !           212:                        break;
        !           213: 
        !           214:                case '^':
        !           215:                        dot=inkdot(-dotinc*fcount); return (fp);
        !           216: 
        !           217:                case '+':
        !           218:                        dot=inkdot(fcount); return (fp);
        !           219: 
        !           220:                case '-':
        !           221:                        dot=inkdot(-fcount); return (fp);
        !           222: 
        !           223:                default:
        !           224:                        error(BADMOD);
        !           225:                }
        !           226:                if (itype!=NSP)
        !           227:                        dot=inkdot(dotinc);
        !           228:                fcount--; endline();
        !           229:        }
        !           230:        return (fp);
        !           231: }
        !           232: 
        !           233: static
        !           234: printesc(c)
        !           235:        register int c;
        !           236: {
        !           237: 
        !           238:        c &= STRIP;
        !           239:        if (c==0177 || c<SP)
        !           240:                printf("^%c", c ^ 0100);
        !           241:        else
        !           242:                printc(c);
        !           243: }
        !           244: 
        !           245: long
        !           246: inkdot(incr)
        !           247: {
        !           248:        register long newdot;
        !           249: 
        !           250:        newdot=dot+incr;
        !           251:        if (addrwrap(dot, newdot))
        !           252:                error(ADWRAP);
        !           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.