1struct sw { 2 const void *x; 3 int r; 4}; 5struct sq { 6 struct sw *q_w; 7 int t; 8 int z; 9}; 10 11int 12f (int ch, char *fp, char *ap) 13{ 14 register int n; 15 register char *cp; 16 register struct sw *p; 17 register int f; 18 int prec; 19 double _double; 20 int expt; 21 int ndig; 22 char expstr[7]; 23 unsigned long long _uquad; 24 struct sq q; 25 struct sw w[8]; 26 static char zeroes[16]; 27 28 for (;;) { 29 switch (ch) { 30 case 'd': 31 _double = (double) (ap += 8, *((double *) (ap - 8))); 32 break; 33 case 'o': 34 goto nosign; 35 case 'u': 36 _uquad = (f & 0x020 ? (ap += 8, *((long long *) (ap - 8))) : f & 0x010 ? (ap += 4, *((long *) (ap - 4))) : f & 0x040 ? (long)(short)(ap += 4, *((int *) (ap - 4))) : (long)(ap += 4, *((int *) (ap - 4)))); 37 goto nosign; 38 case 'x': 39 _uquad = (f & 0x020 ? (ap += 8, *((long long *) (ap - 8))) : f & 0x010 ? (ap += 4, *((long *) (ap - 4))) : f & 0x040 ? (long)(unsigned short)(ap += 4, *((int *) (ap - 4))) : (long)(ap += 4, *((int *) (ap - 4)))); 40 nosign: 41 if (_uquad != 0 || prec != 0); 42 break; 43 default:; 44 } 45 if ((f & 0x100) == 0) { 46 } else { 47 if (ch >= 'f') { 48 if (_double == 0) { 49 if (expt < ndig || (f & 0x001) != 0) { 50 { if ((n = (ndig - 1)) > 0) { while (n > 16) {{ p->x = (zeroes); p->r = 16; q.z += 16; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} n -= 16; }{ p->x = (zeroes); p->r = n; q.z += n; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }}}} 51 } 52 } else if (expt <= 0) { 53 { p->x = ("0"); p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} 54 { p->x = 0; p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} 55 { if ((n = (-expt)) > 0) { while (n > 16) {{ p->x = (zeroes); p->r = 16; q.z += 16; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} n -= 16; }{ p->x = (zeroes); p->r = n; q.z += n; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} }} 56 { p->x = cp; p->r = ndig; q.z += ndig; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} 57 } else { 58 { p->x = cp; p->r = expt; q.z += expt; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} 59 cp += expt; 60 { p->x = ("."); p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} 61 { p->x = cp; p->r = (ndig-expt); q.z += (ndig-expt); p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} 62 } 63 } 64 } 65 } 66 67 error:; 68} 69