annotate sbr/sprintb.c @ 7:c20e4181370f

utf-8 input assumption in case of base64/utf-8
author kono
date Sun, 04 Dec 2005 02:30:39 +0900
parents bce86c4163a3
children 441a2190cfae
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 /* sprintb.c - sprintf a %b string */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #ifndef lint
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3 static char ident[] = "@(#)$Id$";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4 #endif /* lint */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 #include "../h/mh.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 #include <stdio.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 char *sprintb (buffer, v, bits)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 register char *buffer,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 *bits;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 register unsigned v;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 register int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 j;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 register char c,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 *bp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 (void) sprintf (buffer, bits && *bits == 010 ? "0%o" : "0x%x", v);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 bp = buffer + strlen (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 if (bits && *++bits) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 j = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 *bp++ = '<';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26 while (i = *bits++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 if (v & (1 << (i - 1))) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 if (j++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 *bp++ = ',';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 for (; (c = *bits) > 32; bits++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 *bp++ = c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 for (; *bits > 32; bits++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 *bp++ = '>';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37 *bp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 return buffer;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 }