0
|
1 /* sprintb.c - sprintf a %b string */
|
|
2 #ifndef lint
|
|
3 static char ident[] = "@(#)$Id$";
|
|
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 }
|