|
|
1.1 ! root 1: char xstr[]; ! 2: #line 1 "printf.c" ! 3: ! 4: static char *printf_id = (&xstr[8210]); ! 5: ! 6: static char *sccsid = (&xstr[8235]); ! 7: ! 8: #line 1 "/DIST/usr/include/varargs.h" ! 9: ! 10: ! 11: typedef char *va_list; ! 12: ! 13: ! 14: ! 15: ! 16: #line 6 "printf.c" ! 17: ! 18: ! 19: ! 20: ! 21: ! 22: ! 23: ! 24: ! 25: ! 26: ! 27: ! 28: ! 29: ! 30: ! 31: static int width, sign, fill; ! 32: ! 33: char *_p_dconv(); ! 34: ! 35: printf(va_alist) ! 36: int va_alist; ! 37: { ! 38: va_list ap; ! 39: register char *fmt; ! 40: char fcode; ! 41: int prec; ! 42: int length,mask1,nbits,n; ! 43: long int mask2, num; ! 44: register char *bptr; ! 45: char *ptr; ! 46: char buf[134]; ! 47: ! 48: ap = (char *) &va_alist; ! 49: fmt = ((char * *)(ap += sizeof(char *)))[-1]; ! 50: for (;;) { ! 51: ! 52: while ((fcode = *fmt++)!='%') { ! 53: ! 54: if (fcode=='\0') ! 55: return; ! 56: putchar(fcode); ! 57: } ! 58: ! 59: length = 0; ! 60: ! 61: sign = 0; ! 62: if (*fmt == '-') { ! 63: sign++; ! 64: fmt++; ! 65: } ! 66: ! 67: ! 68: fill = 1; ! 69: if (*fmt == '0') { ! 70: fill--; ! 71: fmt++; ! 72: } ! 73: ! 74: ! 75: if (*fmt == '*') { ! 76: width = (( int *)(ap += sizeof( int)))[-1]; ! 77: if (width < 0) { ! 78: width = -width; ! 79: sign = !sign; ! 80: } ! 81: fmt++; ! 82: } ! 83: else { ! 84: width = 0; ! 85: while (*fmt>='0' && *fmt<='9') ! 86: width = width * 10 + (*fmt++ - '0'); ! 87: } ! 88: ! 89: ! 90: if (*fmt=='.') { ! 91: if (*++fmt == '*') { ! 92: prec = (( int *)(ap += sizeof( int)))[-1]; ! 93: fmt++; ! 94: } ! 95: else { ! 96: prec = 0; ! 97: while (*fmt>='0' && *fmt<='9') ! 98: prec = prec * 10 + (*fmt++ - '0'); ! 99: } ! 100: } ! 101: else ! 102: prec = -1; ! 103: ! 104: ! 105: ! 106: ! 107: ! 108: ! 109: ! 110: ! 111: ! 112: ! 113: ! 114: switch (*fmt) { ! 115: case 'L': ! 116: case 'l': ! 117: length = 2; ! 118: ! 119: case 'h': ! 120: case 'H': ! 121: length--; ! 122: fmt++; ! 123: break; ! 124: } ! 125: ! 126: ! 127: ! 128: ! 129: ! 130: ! 131: switch (fcode = *fmt++) { ! 132: ! 133: case 'c': ! 134: buf[0] = (( int *)(ap += sizeof( int)))[-1]; ! 135: ptr = bptr = &buf[0]; ! 136: if (buf[0] != '\0') ! 137: ptr++; ! 138: break; ! 139: case 's': ! 140: bptr = ((char * *)(ap += sizeof(char *)))[-1]; ! 141: if (bptr==0) ! 142: bptr = (&xstr[8259]); ! 143: if (prec < 0) ! 144: prec = 32767 ; ! 145: for (n=0; *bptr++ && n < prec; n++) ; ! 146: ptr = --bptr; ! 147: bptr -= n; ! 148: break; ! 149: case 'O': ! 150: length = 1; ! 151: fcode = 'o'; ! 152: ! 153: case 'o': ! 154: case 'X': ! 155: case 'x': ! 156: if (length > 0) ! 157: num = ((long *)(ap += sizeof(long)))[-1]; ! 158: else ! 159: num = (unsigned) ((int *)(ap += sizeof(int)))[-1]; ! 160: if (fcode=='o') { ! 161: mask1 = 0x7; ! 162: mask2 = 0x1fffffffL; ! 163: nbits = 3; ! 164: } ! 165: else { ! 166: mask1 = 0xf; ! 167: mask2 = 0x0fffffffL; ! 168: nbits = 4; ! 169: } ! 170: n = (num!=0); ! 171: bptr = buf + 11 + 3; ! 172: ! 173: do ! 174: if (((int) num & mask1) < 10) ! 175: *--bptr = ((int) num & mask1) + 060; ! 176: else ! 177: *--bptr = ((int) num & mask1) + 0127; ! 178: while (num = (num >> nbits) & mask2); ! 179: ! 180: if (fcode=='o') { ! 181: if (n) ! 182: *--bptr = '0'; ! 183: } ! 184: else ! 185: if (!sign && fill <= 0) { ! 186: putchar('0'); ! 187: putchar(fcode); ! 188: width -= 2; ! 189: } ! 190: else { ! 191: *--bptr = fcode; ! 192: *--bptr = '0'; ! 193: } ! 194: ptr = buf + 11 + 3; ! 195: break; ! 196: case 'D': ! 197: case 'U': ! 198: case 'I': ! 199: length = 1; ! 200: fcode = fcode + 'a' - 'A'; ! 201: ! 202: case 'd': ! 203: case 'i': ! 204: case 'u': ! 205: if (length > 0) ! 206: num = ((long *)(ap += sizeof(long)))[-1]; ! 207: else { ! 208: n = ((int *)(ap += sizeof(int)))[-1]; ! 209: if (fcode=='u') ! 210: num = (unsigned) n; ! 211: else ! 212: num = (long) n; ! 213: } ! 214: if (n = (fcode != 'u' && num < 0)) ! 215: num = -num; ! 216: ! 217: bptr = _p_dconv(num, buf); ! 218: if (n) ! 219: *--bptr = '-'; ! 220: if (fill == 0) ! 221: fill = -1; ! 222: ptr = buf + 10 + 1; ! 223: break; ! 224: default: ! 225: ! 226: ! 227: ! 228: ptr = bptr = &fcode; ! 229: ptr++; ! 230: break; ! 231: } ! 232: if (fcode != '\0') ! 233: _p_emit(bptr,ptr); ! 234: } ! 235: ; ! 236: } ! 237: ! 238: ! 239: ! 240: ! 241: ! 242: ! 243: ! 244: ! 245: ! 246: ! 247: ! 248: char * ! 249: _p_dconv(value, buffer) ! 250: long value; ! 251: char *buffer; ! 252: { ! 253: register char *bp; ! 254: register int svalue; ! 255: int n; ! 256: long lval; ! 257: ! 258: bp = buffer; ! 259: ! 260: ! 261: if (value == 0) { ! 262: bp += 10 ; ! 263: *bp = '0'; ! 264: return(bp); ! 265: } ! 266: ! 267: ! 268: n = 0; ! 269: while (value < 0) { ! 270: value -= 1000000000 ; ! 271: n++; ! 272: } ! 273: while ((lval = value - 1000000000 ) >= 0) { ! 274: value = lval; ! 275: n++; ! 276: } ! 277: ! 278: ! 279: bp[1] = n + '0'; ! 280: ! 281: ! 282: ! 283: ! 284: ! 285: ! 286: bp += 10 + 1; ! 287: while (value > 32767 ) { ! 288: *--bp = (int)(value % 10) + '0'; ! 289: value /= 10; ! 290: } ! 291: ! 292: ! 293: svalue = value; ! 294: while (svalue > 0) { ! 295: *--bp = (svalue % 10) + '0'; ! 296: svalue /= 10; ! 297: } ! 298: ! 299: ! 300: if (buffer[1] != '0') { ! 301: while (bp > buffer + 2) ! 302: *--bp = '0'; ! 303: --bp; ! 304: } ! 305: return(bp); ! 306: } ! 307: ! 308: ! 309: ! 310: ! 311: ! 312: ! 313: ! 314: ! 315: ! 316: ! 317: ! 318: ! 319: ! 320: _p_emit(s, send) ! 321: register char *s; ! 322: char *send; ! 323: { ! 324: char cfill; ! 325: register int alen; ! 326: int npad; ! 327: ! 328: alen = send - s; ! 329: if (alen > width) ! 330: width = alen; ! 331: cfill = fill>0? ' ': '0'; ! 332: ! 333: ! 334: if (*s == '-' && fill < 0) { ! 335: putchar(*s++); ! 336: alen--; ! 337: width--; ! 338: } ! 339: npad = width - alen; ! 340: ! 341: ! 342: if (!sign) ! 343: while (--npad >= 0) ! 344: putchar(cfill); ! 345: ! 346: ! 347: while (--alen >= 0) ! 348: putchar(*s++); ! 349: ! 350: ! 351: if (sign) ! 352: while (--npad >= 0) ! 353: putchar(cfill); ! 354: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.