- if (c == 'X')
- printx((long)*adx, trace);
- else if (c == 'd' || c == 'u' || c == 'o' || c == 'x')
- printn((long)*adx, c=='o'? 8: (c=='x'? 16:10), trace);
- else if (c == 's') {
+ switch (c) {
+
+ case 'l':
+ goto again;
+ case 'x': case 'X':
+ b = 16;
+ goto number;
+ case 'd': case 'D':
+ case 'u': /* what a joke */
+ b = 10;
+ goto number;
+ case 'o': case 'O':
+ b = 8;
+number:
+ printn(*adx, b, touser);
+ break;
+ case 'c':
+ b = *adx;
+ for (i = 24; i >= 0; i -= 8)
+ if (c = (b >> i) & 0x7f)
+ putchar(c, touser);
+ break;
+ case 'b':
+ b = *adx++;
+ s = (char *)*adx;
+ printn(b, *s++, touser);
+ any = 0;
+ if (b) {
+ putchar('<', touser);
+ while (i = *s++) {
+ if (b & (1 << (i-1))) {
+ if (any)
+ putchar(',', touser);
+ any = 1;
+ for (; (c = *s) > 32; s++)
+ putchar(c, touser);
+ } else
+ for (; *s > 32; s++)
+ ;
+ }
+ putchar('>', touser);
+ }
+ break;
+
+ case 's':