xref: /netbsd-src/lib/libc/stdlib/l64a.c (revision dc306354b0b29af51801a7632f1e95265a68cd81)
1 /*
2  * Written by J.T. Conklin <jtc@netbsd.org>.
3  * Public domain.
4  */
5 
6 #include <sys/cdefs.h>
7 #if defined(LIBC_SCCS) && !defined(lint)
8 __RCSID("$NetBSD: l64a.c,v 1.8 1998/11/15 17:13:51 christos Exp $");
9 #endif
10 
11 #include "namespace.h"
12 #include <stdlib.h>
13 
14 #ifdef __weak_alias
15 __weak_alias(l64a,_l64a);
16 #endif
17 
18 char *
19 l64a (value)
20 	long value;
21 {
22 	static char buf[8];
23 	char *s = buf;
24 	int digit;
25 	int i;
26 	unsigned long v = value;
27 
28 	if (!value)
29 		goto out;
30 
31 	for (i = 0; v != 0 && i < 6; i++) {
32 		digit = (int)(v & 0x3f);
33 
34 		if (digit < 2)
35 			*s = digit + '.';
36 		else if (digit < 12)
37 			*s = digit + '0' - 2;
38 		else if (digit < 38)
39 			*s = digit + 'A' - 12;
40 		else
41 			*s = digit + 'a' - 38;
42 		v >>= 6;
43 		s++;
44 	}
45 
46 out:
47 	*s = '\0';
48 
49 	return buf;
50 }
51