/*	KonTyps2.h	*/
/*	Copyright (C) 2002, 2003, 2004 by J. David Sexton. All rights reserved.	*/

/*	This header file contains type definitions for Konton2.	*/

#ifndef KonTypes_H
#define KonTypes_H

#include 

#if (UCHAR_MAX == 0xFF)
typedef	unsigned char	Kon1ByteInt;
#else
#error "Kon1ByteInt must be unsigned and 1 byte (8 bits) long."
#endif

#if (USHRT_MAX == 0xFFFFFFFF)
typedef	unsigned short	Kon4ByteInt;
#elif (ULONG_MAX == 0xFFFFFFFF)
typedef	unsigned long	Kon4ByteInt;
#elif (UINT_MAX == 0xFFFFFFFF)
typedef	unsigned int	Kon4ByteInt;
#elif (ULONG_MAX > 0xFFFFFFFF)
typedef	unsigned long	Kon4ByteInt;	/*	4 bytes is more efficient.	*/
#define KON4BYTEINT_MORE_THAN_4BYTES
#else
#error "Kon4ByteInt must be unsigned and at least 4 bytes (32 bits) long."
#endif

/*
	Note that the #ifndef directive allows KONCRYPTSTRENGTH to be a
	predefined macro.
*/

#ifndef KONCRYPTSTRENGTH
#define KONCRYPTSTRENGTH 4
#endif
#if (KONCRYPTSTRENGTH != 1 && KONCRYPTSTRENGTH != 2 && KONCRYPTSTRENGTH != 3 && \
	KONCRYPTSTRENGTH != 4 && KONCRYPTSTRENGTH != 5 && KONCRYPTSTRENGTH != 6 && \
	KONCRYPTSTRENGTH != 7 && KONCRYPTSTRENGTH != 8)
#error "The value of KONCRYPTSTRENGTH must be 1, 2, 3, 4, 5, 6, 7, or 8."
#endif

enum	{kKonCryptKeyLength = KONCRYPTSTRENGTH * 32,
		kKonStateLength = kKonCryptKeyLength / 4};

typedef	struct	{Kon1ByteInt	cryptKey [kKonCryptKeyLength];
				Kon4ByteInt		stateData [kKonStateLength];
				Kon4ByteInt		lastPRN;
				Kon1ByteInt		lastRot;}

								KonEnvStruct;

#endif

    Source: geocities.com/da5id65536