summaryrefslogtreecommitdiff
path: root/src/lib/libast/uwin/a64l.c
blob: 20416c6acce183b2d7e3953b0c47bc5e47e8246d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/***********************************************************************
*                                                                      *
*               This software is part of the ast package               *
*          Copyright (c) 1985-2011 AT&T Intellectual Property          *
*                      and is licensed under the                       *
*                 Eclipse Public License, Version 1.0                  *
*                    by AT&T Intellectual Property                     *
*                                                                      *
*                A copy of the License is available at                 *
*          http://www.eclipse.org/org/documents/epl-v10.html           *
*         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
*                                                                      *
*              Information and Software Systems Research               *
*                            AT&T Research                             *
*                           Florham Park NJ                            *
*                                                                      *
*                 Glenn Fowler <gsf@research.att.com>                  *
*                  David Korn <dgk@research.att.com>                   *
*                   Phong Vo <kpv@research.att.com>                    *
*                                                                      *
***********************************************************************/
#include "FEATURE/uwin"

#if !_UWIN || _lib_a64l

void _STUB_a64l(){}

#else

#define a64l	______a64l
#define l64a	______l64a

#include	<stdlib.h>
#include	<string.h>

#undef	a64l
#undef	l64a

#if defined(__EXPORT__)
#define extern		__EXPORT__
#endif

static char letter[65] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

extern long a64l(const char *str)
{
	register unsigned long ul = 0;
	register int n = 6;
	register int c;
	register char *cp;
	for(n=0; n <6; n++)
	{
		if((c= *str++)==0)
			break;
		if(!(cp=strchr(letter,c)))
			break;
		ul |= (cp-letter)<< (6*n);
	}
	return((long)ul);
}

extern char *l64a(long l)
{
	static char buff[7];
	unsigned ul = ((unsigned long)l & 0xffffffff);
	register char *cp = buff;
	while(ul>0)
	{
		*cp++ = letter[ul&077];
		ul >>= 6;
	}
	*cp = 0;
	return(buff);
}

#endif