Annotation of 43BSDReno/sys/kdb/kdb_command.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_command.c       7.4 (Berkeley) 5/3/90
                      7:  */
                      8: 
                      9: #include "../kdb/defs.h"
                     10: 
                     11: char   *kdbBADEQ;
                     12: char   *kdbNOMATCH;
                     13: char   *kdbBADVAR;
                     14: char   *kdbBADCOM;
                     15: 
                     16: int    kdbexecuting;
                     17: char   *kdblp;
                     18: 
                     19: char   kdblastc;
                     20: char   kdbeqformat[512] = "z";
                     21: char   kdbstformat[512] = "X\"= \"^i";
                     22: 
                     23: long   kdbditto;
                     24: int    kdblastcom = '=';
                     25: long   kdblocval;
                     26: long   kdblocmsk;
                     27: long   kdbexpv;
                     28: 
                     29: /* command decoding */
                     30: 
                     31: kdbcommand(buf, defcom)
                     32:        char *buf, defcom;
                     33: {
                     34:        register itype, ptype, modifier, regptr;
                     35:        int longpr, eqcom;
                     36:        char wformat[1], savc;
                     37:        register long w, savdot;
                     38:        char *savlp=kdblp;
                     39: 
                     40:        if (buf) {
                     41:                if (*buf==EOR)
                     42:                        return (0);
                     43:                kdblp=buf;
                     44:        }
                     45: 
                     46:        do {
                     47:                if (kdbadrflg=kdbexpr(0)) {
                     48:                        kdbdot=kdbexpv;
                     49:                        kdbditto=kdbdot;
                     50:                }
                     51:                kdbadrval=kdbdot;
                     52:                kdbcntflg = (kdbrdc() == ',' && kdbexpr(0));
                     53:                if (kdbcntflg)
                     54:                        kdbcntval=kdbexpv;
                     55:                else
                     56:                        kdbcntval=1, kdblp--;
                     57:                if (kdbeol(kdbrdc())) {
                     58:                        if (!kdbadrflg)
                     59:                                kdbdot=kdbinkdot(kdbdotinc);
                     60:                        kdblp--; kdblastcom=defcom;
                     61:                } else
                     62:                        kdblastcom=kdblastc;
                     63:                switch (kdblastcom&STRIP) {
                     64: 
                     65:                case '/':
                     66:                        itype=DSP; ptype=DSYM;
                     67:                        goto trystar;
                     68: 
                     69:                case '=':
                     70:                        itype=NSP; ptype=0;
                     71:                        goto trypr;
                     72: 
                     73:                case '?':
                     74:                        itype=ISP; ptype=ISYM;
                     75:                        goto trystar;
                     76: 
                     77:                trystar:
                     78:                        if (kdbrdc()=='*')
                     79:                                kdblastcom |= QUOTE;
                     80:                        else
                     81:                                kdblp--;
                     82:                        if (kdblastcom&QUOTE) {
                     83:                                itype |= STAR;
                     84:                                ptype = (DSYM+ISYM)-ptype;
                     85:                        }
                     86: 
                     87:                trypr:
                     88:                        longpr=0; eqcom=kdblastcom=='=';
                     89:                        switch (kdbrdc()) {
                     90: 
                     91:                        case 'L':
                     92:                                longpr=1;
                     93:                        case 'l':
                     94:                                /*search for exp*/
                     95:                                if (eqcom)
                     96:                                        kdberror(kdbBADEQ);
                     97:                                kdbdotinc=(longpr?4:2); savdot=kdbdot;
                     98:                                (void) kdbexpr(1); kdblocval=kdbexpv;
                     99:                                if (kdbexpr(0))
                    100:                                        kdblocmsk=kdbexpv;
                    101:                                else
                    102:                                        kdblocmsk = -1L;
                    103:                                if (!longpr) {
                    104:                                        kdblocmsk &= 0xFFFF;
                    105:                                        kdblocval &= 0xFFFF;
                    106:                                }
                    107:                                for (;;) {
                    108:                                        w=kdbget(kdbdot,itype);
                    109:                                        if (kdberrflg || kdbmkfault ||
                    110:                                            (w&kdblocmsk)==kdblocval)
                    111:                                                break;
                    112:                                         kdbdot=kdbinkdot(kdbdotinc);
                    113:                                }
                    114:                                if (kdberrflg) {
                    115:                                        kdbdot=savdot;
                    116:                                        kdberrflg=kdbNOMATCH;
                    117:                                }
                    118:                                kdbpsymoff(kdbdot,ptype,"");
                    119:                                break;
                    120: 
                    121:                        case 'W':
                    122:                                longpr=1;
                    123:                        case 'w':
                    124:                                if (eqcom)
                    125:                                        kdberror(kdbBADEQ);
                    126:                                wformat[0]=kdblastc; (void) kdbexpr(1);
                    127:                                do {
                    128:                                        savdot=kdbdot;
                    129:                                        kdbpsymoff(kdbdot,ptype,":%16t");
                    130:                                        (void) kdbexform(1,wformat,itype,ptype);
                    131:                                        kdberrflg=0; kdbdot=savdot;
                    132:                                        if (longpr)
                    133:                                                kdbput(kdbdot,itype,kdbexpv);
                    134:                                        else
                    135:                                                kdbput(kdbdot,itype,
                    136:                                                    itol(kdbexpv,kdbget(kdbdot,itype)));
                    137:                                        savdot=kdbdot;
                    138:                                        kdbprintf("=%8t");
                    139:                                        (void) kdbexform(1,wformat,itype,ptype);
                    140:                                        kdbprintc(EOR);
                    141:                                } while (kdbexpr(0) && kdberrflg==0);
                    142:                                kdbdot=savdot;
                    143:                                kdbchkerr();
                    144:                                break;
                    145: 
                    146:                        default:
                    147:                                kdblp--;
                    148:                                kdbgetformat(eqcom ? kdbeqformat : kdbstformat);
                    149:                                if (!eqcom)
                    150:                                        kdbpsymoff(kdbdot,ptype,":%16t");
                    151:                                kdbscanform(kdbcntval,
                    152:                                    (eqcom?kdbeqformat:kdbstformat),itype,ptype);
                    153:                        }
                    154:                        break;
                    155: 
                    156:                case '>':
                    157:                        kdblastcom=0; savc=kdbrdc();
                    158:                        if ((regptr=kdbgetreg(savc)) != -1)
                    159:                                *(int *)regptr = kdbdot;
                    160:                        else if ((modifier=kdbvarchk(savc)) != -1)
                    161:                                kdbvar[modifier]=kdbdot;
                    162:                        else
                    163:                                kdberror(kdbBADVAR);
                    164:                        break;
                    165: 
                    166:                case '$':
                    167:                        kdblastcom=0;
                    168:                        kdbprinttrace(kdbnextchar());
                    169:                        break;
                    170: 
                    171:                case ':':
                    172:                        if (kdbexecuting)
                    173:                                break;
                    174:                        kdbexecuting=1; kdbsubpcs(kdbnextchar()); kdbexecuting=0;
                    175:                        kdblastcom=0;
                    176:                        break;
                    177: 
                    178:                case '\0':
                    179:                        break;
                    180: 
                    181:                default:
                    182:                        kdberror(kdbBADCOM);
                    183:                }
                    184:                kdbflushbuf();
                    185:        } while (kdbrdc()==';');
                    186:        if (buf)
                    187:                kdblp=savlp;
                    188:        else
                    189:                kdblp--;
                    190:        return (kdbadrflg && kdbdot!=0);
                    191: }

unix.superglobalmegacorp.com

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