|
|
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"E) { ! 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.