- /* THIS CODE IS VAX DEPENDENT IN HANDLING %l? AND %c */
- 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(va_arg(ap, unsigned), b, flags, ttyp, zf, fld_size);
- break;
- case 'c':
- b = va_arg(ap, unsigned);
-#if BYTE_ORDER == LITTLE_ENDIAN
- for (i = 24; i >= 0; i -= 8)
- if (c = (b >> i) & 0x7f)
- putchar(c, flags, ttyp);
-#endif
-#if BYTE_ORDER == BIG_ENDIAN
- if ((c = (b & 0x7f)))
- putchar(c, flags, ttyp);
-#endif
- break;
- case 'b':
- b = va_arg(ap, unsigned);
- s = va_arg(ap, char *);
- printn((u_long)b, *s++, flags, ttyp, 0, 0);
- any = 0;
- if (b) {
- while ((i = *s++)) {
- if (*s <= 32) {
- register int j;
-
- if (any++)
- putchar(',', flags, ttyp);
- j = *s++ ;
- for (; (c = *s) > 32 ; s++)
- putchar(c, flags, ttyp);
- printn( (u_long)( (b >> (j-1)) &
- ( (2 << (i-j)) -1)),
- 8, flags, ttyp, 0, 0);
- } else if (b & (1 << (i-1))) {
- putchar(any? ',' : '<', flags, ttyp);
- any = 1;
- for (; (c = *s) > 32; s++)
- putchar(c, flags, ttyp);
- } else
- for (; *s > 32; s++)
- ;
- }
- putchar('>', flags, ttyp);
- }
- break;
-
- case 's':
- s = va_arg(ap, char *);
-#ifdef DEBUG
- if (fld_size) {
- while (fld_size-- > 0)
- putchar((c = *s++)? c : '_', flags, ttyp);
- } else {
- while ((c = *s++))
- putchar(c, flags, ttyp);
- }
-#else
- while (c = *s++)
- putchar(c, flags, ttyp);
-#endif
- break;
-
- case '%':
- putchar('%', flags, ttyp);
- goto loop;
- case 'C':
- b = va_arg(ap, unsigned);
-#if BYTE_ORDER == LITTLE_ENDIAN
- for (i = 24; i >= 0; i -= 8)
- if (c = (b >> i) & 0x7f)
- putchar(c, flags, ttyp);
-#endif
-#if BYTE_ORDER == BIG_ENDIAN
- if ((c = (b & 0x7f)))
- putchar(c, flags, ttyp);
-#endif
-
- case 'r':
- case 'R':
- b = va_arg(ap, unsigned);
- s = va_arg(ap, char *);
- if (c == 'R') {
- puts("0x", flags, ttyp);
- printn((u_long)b, 16, flags, ttyp, 0, 0);
- }
- any = 0;
- if (c == 'r' || b) {
- register struct reg_desc *rd;
- register struct reg_values *rv;
- unsigned field;
-
- putchar('<', flags, ttyp);
- for (rd = (struct reg_desc *)s; rd->rd_mask; rd++) {
- field = b & rd->rd_mask;
- field = (rd->rd_shift > 0)
- ? field << rd->rd_shift
- : field >> -rd->rd_shift;
- if (any &&
- (rd->rd_format || rd->rd_values
- || (rd->rd_name && field)
- )
- )
- putchar(',', flags, ttyp);
- if (rd->rd_name) {
- if (rd->rd_format || rd->rd_values
- || field) {
- puts(rd->rd_name, flags, ttyp);
- any = 1;
- }
- if (rd->rd_format || rd->rd_values) {
- putchar('=', flags, ttyp);
- any = 1;
- }
- }
- if (rd->rd_format) {
- _printf(flags, ttyp, rd->rd_format,
- field);
- any = 1;
- if (rd->rd_values)
- putchar(':', flags, ttyp);
- }
- if (rd->rd_values) {
- any = 1;
- for (rv = rd->rd_values;
- rv->rv_name;
- rv++) {
- if (field == rv->rv_value) {
- puts(rv->rv_name, flags,
- ttyp);
- break;
- }
- }
- if (rv->rv_name == NULL)
- puts("???", flags, ttyp);
- }
- }
- putchar('>', flags, ttyp);
- }
- break;
-
- case 'n':
- case 'N':
- {
- register struct reg_values *rv;
-
- b = va_arg(ap, unsigned);
- s = va_arg(ap,char *);
- for (rv = (struct reg_values *)s; rv->rv_name; rv++) {
- if (b == rv->rv_value) {
- puts(rv->rv_name, flags, ttyp);
- break;
- }
- }
- if (rv->rv_name == NULL)
- puts("???", flags, ttyp);
- if (c == 'N' || rv->rv_name == NULL) {
- putchar(':', flags, ttyp);
- printn((u_long)b, 10, flags, ttyp, 0, 0);
- }
- }
- break;