Added all of the MH sources, including RCS files, in
[mmh] / docs / historical / mh-6.8.5 / sbr / sprintb.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 }