1*c2c925deSespie /* $OpenBSD: l64a.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */ 2df930be7Sderaadt /* 3df930be7Sderaadt * Written by J.T. Conklin <jtc@netbsd.org>. 4df930be7Sderaadt * Public domain. 5df930be7Sderaadt */ 6df930be7Sderaadt 7a8eb249eSmillert #include <errno.h> 8df930be7Sderaadt #include <stdlib.h> 9df930be7Sderaadt 10df930be7Sderaadt char * l64a(long value)11d8bc04e4Spatl64a(long value) 12df930be7Sderaadt { 13df930be7Sderaadt static char buf[8]; 14df930be7Sderaadt char *s = buf; 15df930be7Sderaadt int digit; 16df930be7Sderaadt int i; 17df930be7Sderaadt 18a8eb249eSmillert if (value < 0) { 19a8eb249eSmillert errno = EINVAL; 20a8eb249eSmillert return(NULL); 21a8eb249eSmillert } 22df930be7Sderaadt 23df930be7Sderaadt for (i = 0; value != 0 && i < 6; i++) { 24df930be7Sderaadt digit = value & 0x3f; 25df930be7Sderaadt 26df930be7Sderaadt if (digit < 2) 27df930be7Sderaadt *s = digit + '.'; 28df930be7Sderaadt else if (digit < 12) 29df930be7Sderaadt *s = digit + '0' - 2; 30df930be7Sderaadt else if (digit < 38) 31df930be7Sderaadt *s = digit + 'A' - 12; 32df930be7Sderaadt else 33df930be7Sderaadt *s = digit + 'a' - 38; 34df930be7Sderaadt 35df930be7Sderaadt value >>= 6; 36df930be7Sderaadt s++; 37df930be7Sderaadt } 38df930be7Sderaadt 39df930be7Sderaadt *s = '\0'; 40df930be7Sderaadt 41a8eb249eSmillert return(buf); 42df930be7Sderaadt } 43