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