1*86d7f5d3SJohn Marino /*- 2*86d7f5d3SJohn Marino * Written by J.T. Conklin <jtc@netbsd.org>. 3*86d7f5d3SJohn Marino * Public domain. 4*86d7f5d3SJohn Marino * 5*86d7f5d3SJohn Marino * $NetBSD: a64l.c,v 1.8 2000/01/22 22:19:19 mycroft Exp $ 6*86d7f5d3SJohn Marino * $FreeBSD: src/lib/libc/stdlib/a64l.c,v 1.2 2006/05/19 19:06:38 jkim Exp $ 7*86d7f5d3SJohn Marino */ 8*86d7f5d3SJohn Marino 9*86d7f5d3SJohn Marino #include <stdlib.h> 10*86d7f5d3SJohn Marino #include <inttypes.h> 11*86d7f5d3SJohn Marino 12*86d7f5d3SJohn Marino long a64l(const char * s)13*86d7f5d3SJohn Marinoa64l(const char *s) 14*86d7f5d3SJohn Marino { 15*86d7f5d3SJohn Marino long shift; 16*86d7f5d3SJohn Marino int digit, i, value; 17*86d7f5d3SJohn Marino 18*86d7f5d3SJohn Marino value = 0; 19*86d7f5d3SJohn Marino shift = 0; 20*86d7f5d3SJohn Marino for (i = 0; *s != '\0' && i < 6; i++, s++) { 21*86d7f5d3SJohn Marino if (*s <= '/') 22*86d7f5d3SJohn Marino digit = *s - '/' + 1; 23*86d7f5d3SJohn Marino else if (*s <= '0' + 9) 24*86d7f5d3SJohn Marino digit = *s - '0' + 2; 25*86d7f5d3SJohn Marino else if (*s <= 'A' + 25) 26*86d7f5d3SJohn Marino digit = *s - 'A' + 12; 27*86d7f5d3SJohn Marino else 28*86d7f5d3SJohn Marino digit = *s - 'a' + 38; 29*86d7f5d3SJohn Marino 30*86d7f5d3SJohn Marino value |= digit << shift; 31*86d7f5d3SJohn Marino shift += 6; 32*86d7f5d3SJohn Marino } 33*86d7f5d3SJohn Marino return (value); 34*86d7f5d3SJohn Marino } 35