|
|
1.1 ! root 1: #include "/usr/lib/a68defs" ! 2: ! 3: int mkfault; ! 4: int stdout 1; ! 5: char printbuf[255]; char *printptr printbuf, *digitptr; ! 6: ! 7: long itol(x,y) ! 8: { ! 9: return((((long)x)<<16)|y); ! 10: } ! 11: ! 12: ! 13: printc(c) ! 14: char c; ! 15: { ! 16: ! 17: IF (*printptr++ = c)==NL ORF c==0 ! 18: THEN IF mkfault==0 THEN write(stdout,printbuf,printptr-printbuf); FI ! 19: printptr=printbuf; ! 20: FI ! 21: } ! 22: ! 23: charpos() ! 24: { return(printptr-printbuf); ! 25: } ! 26: ! 27: flushout() ! 28: { IF printptr!=printbuf ! 29: THEN printc(0); ! 30: FI ! 31: } ! 32: ! 33: printf(fmat,a1) ! 34: char *fmat, **a1; ! 35: { ! 36: char *fptr, *s; int *vptr; long *dptr; double *rptr; ! 37: double real, rnd; ! 38: int x, decpt, n; long lx; ! 39: int width, prec; char c, adj; char flush; ! 40: char digits[64]; ! 41: ! 42: fptr=fmat; vptr = &a1; ! 43: ! 44: WHILE c = *fptr++ ! 45: DO IF c!='%' ! 46: THEN printc(c); ! 47: ELSE IF *fptr=='-' THEN adj='l'; fptr++; ELSE adj='r'; FI ! 48: width=convert(&fptr); ! 49: IF *fptr=='.' THEN fptr++; prec=convert(&fptr); ELSE prec = -1; FI ! 50: digitptr=digits; ! 51: dptr=rptr=vptr; lx = *dptr; x = *vptr++; ! 52: s=0; flush=0; ! 53: switch (c = *fptr++) { ! 54: ! 55: case 'n': ! 56: flush++; break; ! 57: case 'd': ! 58: case 'u': ! 59: printnum(x,c,10); break; ! 60: case 'o': ! 61: printoct(0,x,0); break; ! 62: case 'q': ! 63: lx=x; printoct(lx,-1); break; ! 64: case 'x': ! 65: printdbl(0,x,c,16); break; ! 66: case 'Y': ! 67: printdate(lx); vptr++; break; ! 68: case 'D': ! 69: case 'U': ! 70: printdbl(lx,c,10); vptr++; break; ! 71: case 'O': ! 72: printoct(lx,0); vptr++; break; ! 73: case 'Q': ! 74: printoct(lx,-1); vptr++; break; ! 75: case 'X': ! 76: printdbl(lx,'x',16); vptr++; break; ! 77: case 'c': ! 78: printc(x); break; ! 79: case 's': ! 80: s=x; break; ! 81: case 'f': ! 82: case 'F': ! 83: vptr =+ 3; ! 84: rnd=1.0; ! 85: for(n=prec;n>=0;n--) ! 86: rnd =* 10; ! 87: real = *rptr + (5 / rnd); ! 88: s=ecvt(real, 8, &decpt, &n); ! 89: IF n THEN *digitptr++='-'; FI ! 90: *digitptr++ = (decpt<=0 ? '0' : *s++); ! 91: WHILE *s ANDF --decpt>0 DO *digitptr++ = *s++; OD ! 92: *digitptr++ = '.'; ! 93: WHILE *s ANDF prec-- DO *digitptr++ = (++decpt<0?'0':*s++); OD ! 94: *digitptr++=0; ! 95: s=0; prec = -1; break; ! 96: case 'm': ! 97: vptr--; break; ! 98: case 'M': ! 99: width=x; break; ! 100: case 'T': ! 101: case 't': ! 102: IF c=='T' ! 103: THEN width=x; ! 104: ELSE vptr--; ! 105: FI ! 106: IF width ! 107: THEN width =- charpos()%width; ! 108: FI ! 109: break; ! 110: default: ! 111: printc(c); vptr--; ! 112: } ! 113: ! 114: IF s==0 ! 115: THEN *digitptr=0; s=digits; ! 116: FI ! 117: n=length(s); ! 118: n=(prec<n ANDF prec>=0 ? prec : n); ! 119: width =- n; ! 120: IF adj=='r' ! 121: THEN WHILE width-- > 0 ! 122: DO printc(SP); OD ! 123: FI ! 124: WHILE n-- DO printc(*s++); OD ! 125: WHILE width-- > 0 DO printc(SP); OD ! 126: digitptr=digits; ! 127: IF flush THEN flushout(); FI ! 128: FI ! 129: OD ! 130: } ! 131: ! 132: printdate(tvec) ! 133: long tvec; ! 134: { ! 135: STRING timeptr; REG INT i; ! 136: timeptr = ctime(&tvec); ! 137: FOR i=20; i<24; i++ DO *digitptr++ = *(timeptr+i); OD ! 138: FOR i=3; i<19; i++ DO *digitptr++ = *(timeptr+i); OD ! 139: } /*printdate*/ ! 140: ! 141: prints(s) ! 142: char *s; ! 143: { printf("%s",s); ! 144: } ! 145: ! 146: convert(cp) ! 147: char **cp; ! 148: { char c; int n; ! 149: n=0; ! 150: WHILE ((c = *(*cp)++)>='0') ANDF (c<='9') DO n=n*10+c-'0'; OD ! 151: (*cp)--; ! 152: return(n); ! 153: } ! 154: ! 155: printnum(n,fmat,base) ! 156: { char k; int digs[15]; int *dptr; ! 157: long N; ! 158: dptr=digs; ! 159: IF n<0 ANDF fmat=='d' THEN n = -n; *digitptr++ = '-'; FI ! 160: N= (unsigned)n; ! 161: WHILE N ! 162: DO *dptr++ = N%base; ! 163: N /= base; ! 164: OD ! 165: IF dptr==digs THEN *dptr++=0; FI ! 166: WHILE dptr!=digs ! 167: DO k = *--dptr; ! 168: *digitptr++ = (k+(k<=9 ? '0' : 'a'-10)); ! 169: OD ! 170: } ! 171: ! 172: printoct(o,s) long o; int s; ! 173: { ! 174: int i; ! 175: long po; ! 176: char digs[12]; ! 177: po = o; ! 178: IF s ! 179: THEN IF po<0 ! 180: THEN po = -po; *digitptr++='-'; ! 181: ELSE IF s>0 THEN *digitptr++='+'; FI ! 182: FI ! 183: FI ! 184: FOR i=0;i<=11;i++ ! 185: DO digs[i] = po&7; po =>> 3; OD ! 186: digs[10] =& 03; digs[11]=0; ! 187: FOR i=11;i>=0;i-- ! 188: DO IF digs[i] THEN EXITFOR; FI OD ! 189: FOR i++;i>=0;i-- ! 190: DO *digitptr++=digs[i]+'0'; OD ! 191: } ! 192: ! 193: printdbl(lx,ly,fmat,base) ! 194: unsigned lx, ly; char fmat; int base; ! 195: { int digs[20]; int *dptr; char k; ! 196: double f ,g; long q; ! 197: dptr=digs; ! 198: IF fmat!='D' ! 199: THEN f=(lx); f =* itol(1,0); f =+ (ly); ! 200: IF fmat=='x' THEN *digitptr++='#'; FI ! 201: ELSE f=itol(lx,ly); ! 202: IF f<0 THEN *digitptr++='-'; f = -f; FI ! 203: FI ! 204: WHILE f ! 205: DO q=f/base; g=q; ! 206: *dptr++ = f-g*base; ! 207: f=q; ! 208: OD ! 209: IF dptr==digs THEN *dptr++=0; FI ! 210: WHILE dptr!=digs ! 211: DO k = *--dptr; ! 212: *digitptr++ = (k+(k<=9 ? '0' : 'a'-10)); ! 213: OD ! 214: } ! 215: ! 216: length(s) ! 217: char *s; ! 218: { ! 219: REG CHAR *t; ! 220: ! 221: t=s; ! 222: WHILE *t++ DONE ! 223: return(t-s-1); ! 224: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.