Commit | Line | Data |
---|---|---|
ad787160 C |
1 | /* sprintb.c - sprintf a %b string */ |
2 | #ifndef lint | |
3 | static char ident[] = "@(#)$Id: sprintb.c,v 1.3 1992/12/15 00:20:22 jromine Exp $"; | |
4 | #endif /* lint */ | |
5 | ||
6 | #include "../h/mh.h" | |
7 | #include <stdio.h> | |
8 | ||
9 | ||
10 | char *sprintb (buffer, v, bits) | |
11 | register char *buffer, | |
12 | *bits; | |
13 | register unsigned v; | |
14 | { | |
15 | register int i, | |
16 | j; | |
17 | register char c, | |
18 | *bp; | |
19 | ||
20 | (void) sprintf (buffer, bits && *bits == 010 ? "0%o" : "0x%x", v); | |
21 | bp = buffer + strlen (buffer); | |
22 | ||
23 | if (bits && *++bits) { | |
24 | j = 0; | |
25 | *bp++ = '<'; | |
26 | while (i = *bits++) | |
27 | if (v & (1 << (i - 1))) { | |
28 | if (j++) | |
29 | *bp++ = ','; | |
30 | for (; (c = *bits) > 32; bits++) | |
31 | *bp++ = c; | |
32 | } | |
33 | else | |
34 | for (; *bits > 32; bits++) | |
35 | continue; | |
36 | *bp++ = '>'; | |
37 | *bp = 0; | |
38 | } | |
39 | ||
40 | return buffer; | |
41 | } |