#include "intern.h"

#ifdef __MINT__

#include <sys/cookie.h>

int getcookie(char *cookie, long *p_value)
{
	long	v;
	int	i;
	union
	{
		long	as_long;
		char	as_char[4];
	} cast;

	/* genialer Cast, oder? :-)) */
	cast.as_char[0] = cookie[0];
	cast.as_char[1] = cookie[1];
	cast.as_char[2] = cookie[2];
	cast.as_char[3] = cookie[3];

	i = Getcookie(cast.as_long, &v);
	if (p_value)
		*p_value = v;

	return (i == C_FOUND);
}

#else

static long	*my_cookiejar = NULL;

static long get_cookie_adr(void)
{
	my_cookiejar = *((long **) 0x5A0L);
	return 0L;
}


int getcookie(char *cookie, long *p_value)
{
	long	*cookiejar, c;
	int	i;
	union
	{
		long	as_long;
		char	as_char[3];
	}		cast;
	
	if (my_cookiejar == NULL)
		Supexec(get_cookie_adr);

	cookiejar = my_cookiejar;
		
	if (!cookiejar || !cookiejar[0])
		return FALSE;

	/* Ein einfacherer Cast fiel mir nicht ein :-)) */
	for (i = 0; i<4; i++)
		cast.as_char[i] = cookie[i];
	c = cast.as_long;

	do
	{
		if (cookiejar[0] == c)
		{
			if (p_value)
				*p_value = cookiejar[1];
			return TRUE;
		}
		else
			cookiejar = &(cookiejar[2]);
	}
	while (cookiejar[0] || !cookie);

	if (p_value)
		*p_value = 0;
	return FALSE;
}

#endif
