|
|
1.1 ! root 1: # ! 2: /* ! 3: * ! 4: * UNIX debugger ! 5: * ! 6: */ ! 7: ! 8: #include "defs.h" ! 9: static char sccsid[] = "%Z%%M% %I% %G%"; ! 10: #include <stdio.h> ! 11: ! 12: ! 13: INT mkfault; ! 14: INT infile; ! 15: INT outfile = 1; ! 16: L_INT maxpos; ! 17: L_INT maxoff; ! 18: INT radix = 16; ! 19: ! 20: CHAR printbuf[MAXLIN]; ! 21: CHAR *printptr = printbuf; ! 22: CHAR *digitptr; ! 23: ! 24: ! 25: eqstr(s1, s2) ! 26: REG STRING s1, s2; ! 27: { ! 28: REG STRING es1; ! 29: WHILE *s1++ == *s2 ! 30: DO IF *s2++ == 0 ! 31: THEN return(1); ! 32: FI ! 33: OD ! 34: return(0); ! 35: } ! 36: ! 37: length(s) ! 38: REG STRING s; ! 39: { ! 40: INT n = 0; ! 41: WHILE *s++ DO n++; OD ! 42: return(n); ! 43: } ! 44: ! 45: printc(c) ! 46: CHAR c; ! 47: { ! 48: CHAR d; ! 49: STRING q; ! 50: INT posn, tabs, p; ! 51: ! 52: IF mkfault ! 53: THEN return; ! 54: ELIF (*printptr=c)==EOR ! 55: THEN tabs=0; posn=0; q=printbuf; ! 56: FOR p=0; p<printptr-printbuf; p++ ! 57: DO d=printbuf[p]; ! 58: IF (p&7)==0 ANDF posn ! 59: THEN tabs++; posn=0; ! 60: FI ! 61: IF d==SP ! 62: THEN posn++; ! 63: ELSE WHILE tabs>0 DO *q++=TB; tabs--; OD ! 64: WHILE posn>0 DO *q++=SP; posn--; OD ! 65: *q++=d; ! 66: FI ! 67: OD ! 68: *q++=EOR; ! 69: #ifdef EDDT ! 70: printptr=printbuf; do putchar(*printptr++); while (printptr<q); ! 71: #else ! 72: write(outfile,printbuf,q-printbuf); ! 73: #endif ! 74: printptr=printbuf; ! 75: ELIF c==TB ! 76: THEN *printptr++=SP; ! 77: WHILE (printptr-printbuf)&7 DO *printptr++=SP; OD ! 78: ELIF c ! 79: THEN printptr++; ! 80: FI ! 81: } ! 82: ! 83: charpos() ! 84: { return(printptr-printbuf); ! 85: } ! 86: ! 87: flushbuf() ! 88: { IF printptr!=printbuf ! 89: THEN printc(EOR); ! 90: FI ! 91: } ! 92: ! 93: printf(fmat,a1) ! 94: STRING fmat; ! 95: STRING *a1; ! 96: { ! 97: STRING fptr, s; ! 98: INT *vptr; ! 99: L_INT *dptr; ! 100: L_REAL *rptr; ! 101: INT width, prec; ! 102: CHAR c, adj; ! 103: INT x, decpt, n; ! 104: L_INT lx; ! 105: CHAR digits[64]; ! 106: ! 107: fptr = fmat; dptr = vptr = &a1; ! 108: ! 109: WHILE c = *fptr++ ! 110: DO IF c!='%' ! 111: THEN printc(c); ! 112: ELSE IF *fptr=='-' THEN adj='l'; fptr++; ELSE adj='r'; FI ! 113: width=convert(&fptr); ! 114: IF *fptr=='.' THEN fptr++; prec=convert(&fptr); ELSE prec = -1; FI ! 115: digitptr=digits; ! 116: #ifndef vax ! 117: dptr=rptr=vptr; lx = *dptr; x = *vptr++; ! 118: #else ! 119: rptr=dptr; x = shorten(lx = *dptr++); ! 120: #endif ! 121: s=0; ! 122: switch (c = *fptr++) { ! 123: ! 124: case 'd': ! 125: case 'u': ! 126: printnum(x,c,10); break; ! 127: case 'o': ! 128: #ifndef vax ! 129: printoct(0,x,0); break; ! 130: #else ! 131: printoct(itol(0,x),0); break; ! 132: #endif ! 133: case 'q': ! 134: lx=x; printoct(lx,-1); break; ! 135: case 'x': ! 136: #ifndef vax ! 137: printdbl(0,x,c,16); break; ! 138: #else ! 139: printdbl(itol(0,x),c,16); break; ! 140: #endif ! 141: case 'r': ! 142: printdbl(lx=x,c,radix); break; ! 143: case 'R': ! 144: printdbl(lx,c,radix); vptr++; break; ! 145: case 'Y': ! 146: printdate(lx); vptr++; break; ! 147: case 'D': ! 148: case 'U': ! 149: printdbl(lx,c,10); vptr++; break; ! 150: case 'O': ! 151: printoct(lx,0); vptr++; break; ! 152: case 'Q': ! 153: printoct(lx,-1); vptr++; break; ! 154: case 'X': ! 155: printdbl(lx,'x',16); vptr++; break; ! 156: case 'c': ! 157: printc(x); break; ! 158: case 's': ! 159: #ifndef vax ! 160: s=x; break; ! 161: #else ! 162: s=lx; break; ! 163: #endif ! 164: #ifndef EDDT ! 165: case 'f': ! 166: case 'F': ! 167: #ifdef vax ! 168: dptr++; ! 169: sprintf(s=digits,"%+.16e",*rptr,*(rptr+4)); prec= -1; break; ! 170: #else ! 171: vptr += 7; ! 172: s=ecvt(*rptr, prec, &decpt, &n); ! 173: *digitptr++=(n?'-':'+'); ! 174: *digitptr++ = (decpt<=0 ? '0' : *s++); ! 175: IF decpt>0 THEN decpt--; FI ! 176: *digitptr++ = '.'; ! 177: WHILE *s ANDF prec-- DO *digitptr++ = *s++; OD ! 178: WHILE *--digitptr=='0' DONE ! 179: digitptr += (digitptr-digits>=3 ? 1 : 2); ! 180: IF decpt ! 181: THEN *digitptr++ = 'e'; printnum(decpt,'d',10); ! 182: FI ! 183: s=0; prec = -1; break; ! 184: #endif ! 185: #endif ! 186: case 'm': ! 187: vptr--; break; ! 188: case 'M': ! 189: width=x; break; ! 190: case 'T': ! 191: case 't': ! 192: IF c=='T' ! 193: THEN width=x; ! 194: #ifndef vax ! 195: ELSE vptr--; ! 196: #else ! 197: ELSE dptr--; ! 198: #endif ! 199: FI ! 200: IF width ! 201: THEN width -= charpos()%width; ! 202: FI ! 203: break; ! 204: default: ! 205: #ifndef vax ! 206: printc(c); vptr--; ! 207: #else ! 208: printc(c); dptr--; ! 209: #endif ! 210: } ! 211: ! 212: IF s==0 ! 213: THEN *digitptr=0; s=digits; ! 214: FI ! 215: n=length(s); ! 216: n=(prec<n ANDF prec>=0 ? prec : n); ! 217: width -= n; ! 218: IF adj=='r' ! 219: THEN WHILE width-- > 0 ! 220: DO printc(SP); OD ! 221: FI ! 222: WHILE n-- DO printc(*s++); OD ! 223: WHILE width-- > 0 DO printc(SP); OD ! 224: digitptr=digits; ! 225: FI ! 226: OD ! 227: } ! 228: ! 229: printdate(tvec) ! 230: L_INT tvec; ! 231: { ! 232: REG INT i; ! 233: REG STRING timeptr; ! 234: #ifndef EDDT ! 235: timeptr = ctime(&tvec); ! 236: #else ! 237: timeptr="????????????????????????"; ! 238: #endif ! 239: FOR i=20; i<24; i++ DO *digitptr++ = *(timeptr+i); OD ! 240: FOR i=3; i<19; i++ DO *digitptr++ = *(timeptr+i); OD ! 241: } /*printdate*/ ! 242: ! 243: prints(s) ! 244: char *s; ! 245: { printf("%s",s); ! 246: } ! 247: ! 248: newline() ! 249: { ! 250: printc(EOR); ! 251: } ! 252: ! 253: convert(cp) ! 254: REG STRING *cp; ! 255: { ! 256: REG CHAR c; ! 257: INT n; ! 258: n=0; ! 259: WHILE ((c = *(*cp)++)>='0') ANDF (c<='9') DO n=n*10+c-'0'; OD ! 260: (*cp)--; ! 261: return(n); ! 262: } ! 263: ! 264: printnum(n,fmat,base) ! 265: REG INT n; ! 266: { ! 267: REG CHAR k; ! 268: REG INT *dptr; ! 269: INT digs[15]; ! 270: dptr=digs; ! 271: IF n<0 ANDF fmat=='d' THEN n = -n; *digitptr++ = '-'; FI ! 272: n &= 0xffff; ! 273: WHILE n ! 274: DO *dptr++ = ((POS)(n&0xffff))%base; ! 275: n=((POS)(n&0xffff))/base; ! 276: OD ! 277: IF dptr==digs THEN *dptr++=0; FI ! 278: WHILE dptr!=digs ! 279: DO k = *--dptr; ! 280: *digitptr++ = (k+(k<=9 ? '0' : 'a'-10)); ! 281: OD ! 282: } ! 283: ! 284: printoct(o,s) ! 285: L_INT o; ! 286: INT s; ! 287: { ! 288: INT i; ! 289: L_INT po = o; ! 290: CHAR digs[12]; ! 291: ! 292: IF s ! 293: THEN IF po<0 ! 294: THEN po = -po; *digitptr++='-'; ! 295: ELSE IF s>0 THEN *digitptr++='+'; FI ! 296: FI ! 297: FI ! 298: FOR i=0;i<=11;i++ ! 299: DO digs[i] = po&7; po >>= 3; OD ! 300: digs[10] &= 03; digs[11]=0; ! 301: FOR i=11;i>=0;i-- ! 302: DO IF digs[i] THEN break; FI OD ! 303: FOR i++;i>=0;i-- ! 304: DO *digitptr++=digs[i]+'0'; OD ! 305: } ! 306: ! 307: #ifndef vax ! 308: printdbl(lx,ly,fmat,base) ! 309: INT lx, ly; char fmat; int base; ! 310: #else ! 311: printdbl(lxy,fmat,base) ! 312: L_INT lxy; char fmat; int base; ! 313: #endif ! 314: { int digs[20]; int *dptr; char k; ! 315: #ifndef MULD2 ! 316: register char *cp1; ! 317: cp1=digs; if ((lxy&0xFFFF0000L)==0xFFFF0000L) {*cp1++='-'; lxy= -lxy;} ! 318: sprintf(cp1,base==16 ? "%X" : "%D",lxy); ! 319: cp1=digs; while (*digitptr++= *cp1++); --digitptr; ! 320: #else ! 321: L_REAL f ,g; long q; ! 322: #ifdef vax ! 323: INT lx,ly; ! 324: ly=lxy; lx=(lxy>>16)&0xFFFF; ! 325: #endif ! 326: dptr=digs; ! 327: IF fmat=='D' ORF fmat=='r' ! 328: THEN f=itol(lx,ly); ! 329: IF f<0 THEN *digitptr++='-'; f = -f; FI ! 330: ELSE ! 331: IF lx==-1 ! 332: THEN *digitptr++='-'; f=leng(-ly); ! 333: ELSE f=leng(lx); f *= itol(1,0); f += leng(ly); ! 334: FI ! 335: IF fmat=='x' THEN *digitptr++='#'; FI ! 336: FI ! 337: WHILE f ! 338: DO q=f/base; g=q; ! 339: *dptr++ = f-g*base; ! 340: f=q; ! 341: OD ! 342: IF dptr==digs ORF dptr[-1]>9 THEN *dptr++=0; FI ! 343: WHILE dptr!=digs ! 344: DO k = *--dptr; ! 345: *digitptr++ = (k+(k<=9 ? '0' : 'a'-10)); ! 346: OD ! 347: #endif ! 348: } ! 349: ! 350: iclose() ! 351: { ! 352: IF infile ! 353: THEN close(infile); infile=0; ! 354: FI ! 355: } ! 356: ! 357: oclose() ! 358: { ! 359: IF outfile!=1 ! 360: THEN flushbuf(); close(outfile); outfile=1; ! 361: FI ! 362: } ! 363: ! 364: endline() ! 365: { ! 366: ! 367: if (maxpos <= charpos()) ! 368: printf("\n"); ! 369: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.