//-----------------------------------------------------------------------------
//
// ImageLib Sources
// Copyright (C) 2000-2002 by Denton Woods
// Last modified: 06/23/2002 <--Y2K Compliant! =]
//
// Filename: IL/il.h
//
// Description: The main include file for DevIL
//
//-----------------------------------------------------------------------------


#ifndef __il_h_
#ifndef __IL_H__

#define __il_h_
#define __IL_H__

#ifdef __cplusplus
extern "C" {
#endif

//#define IL_NO_BMP
//#define IL_NO_CUT
//#define IL_NO_CHEAD
//#define IL_NO_DCX
//#define IL_NO_DDS
//#define IL_NO_DOOM
//#define IL_NO_GIF
//#define IL_NO_ICO
//#define IL_NO_JPG
//#define IL_NO_LIF
//#define IL_NO_MDL
//#define IL_NO_MNG
//#define IL_NO_PCD
//#define IL_NO_PCX
//#define IL_NO_PIC
//#define IL_NO_PIX
//#define IL_NO_PNG
//#define IL_NO_PNM
//#define IL_NO_PSD
//#define IL_NO_PSP
//#define IL_NO_PXR
//#define IL_NO_RAW
//#define IL_NO_SGI
//#define IL_NO_TGA
//#define IL_NO_TIF
//#define IL_NO_WAL
//#define IL_NO_XPM

// Compiling Options
#define IL_INLINE_ASM
//#define IL_DEBUG
//#define IL_STATIC_LIB
//#define IL_NO_LCMS
#ifdef _WIN32
	#ifndef IL_USE_JPEGLIB_UNMODIFIED
		#define IL_USE_JPEGLIB_UNMODIFIED
	#endif
#endif

#ifdef _WIN32_WCE
	#define IL_NO_GIF
	#define IL_NO_JPG
	#define IL_NO_MNG
	#define IL_NO_PNG
	#define IL_NO_TIF
	#define IL_NO_LCMS
#endif//_WIN32_WCE

#ifdef DJGPP
	#define IL_NO_GIF
	#define IL_NO_JPG
	#define IL_NO_MNG
	#define IL_NO_PNG
	#define IL_NO_TIF
	#define IL_NO_LCMS
#endif//DJGPP

/*#ifdef __APPLE__
	#define IL_NO_GIF
	#define IL_NO_JPG
	#define IL_NO_MNG
	#define IL_NO_PNG
	#define IL_NO_TIF
	#define IL_NO_LCMS
#endif//__APPLE__*/

/*
#ifdef _WIN32
	#if defined(_MSC_VER) || defined(__BORLANDC__)
		#ifndef IL_STATIC_LIB
			#ifndef _IL_BUILD_LIBRARY
				#pragma comment(lib, "Devil_DLL.lib")
			#endif
		#else
			#ifndef _IL_BUILD_LIBRARY
				#ifdef  IL_DEBUG
					#pragma comment(lib, "Devil_DBG.lib")
				#else
					#pragma comment(lib, "Devil.lib")
				#endif//IL_DEBUG
			#endif
		#endif
	#endif
#endif
*/
#include <stdio.h>

typedef unsigned int	ILenum;
typedef unsigned char	ILboolean;
typedef unsigned int	ILbitfield;
typedef char			ILbyte;
typedef short			ILshort;
typedef int				ILint;
typedef int				ILsizei;
typedef unsigned char	ILubyte;
typedef unsigned short	ILushort;
typedef unsigned int	ILuint;
typedef float			ILfloat;
typedef float			ILclampf;
typedef double			ILdouble;
typedef double			ILclampd;
typedef void			ILvoid;

#ifdef _UNICODE
	#ifndef _WIN32_WCE
		#include <wchar.h>
	#endif
	typedef wchar_t* ILstring;
#else
	typedef char* ILstring;
#endif//_UNICODE


#define IL_FALSE							0
#define IL_TRUE								1


// Matches OpenGL's right now.
#define IL_COLOUR_INDEX							0x1900
#define IL_COLOR_INDEX							0x1900
#define IL_RGB								0x1907
#define IL_RGBA								0x1908
#define IL_BGR								0x80E0
#define IL_BGRA								0x80E1
#define IL_LUMINANCE							0x1909
#define IL_LUMINANCE_ALPHA						0x190A


#define IL_BYTE								0x1400
#define IL_UNSIGNED_BYTE						0x1401
#define IL_SHORT							0x1402
#define IL_UNSIGNED_SHORT						0x1403
#define IL_INT								0x1404
#define IL_UNSIGNED_INT							0x1405
#define IL_FLOAT							0x1406
#define IL_DOUBLE							0x140A


#define IL_VENDOR							0x1F00
#define IL_LOAD_EXT							0x1F01
#define IL_SAVE_EXT							0x1F02


//
// IL-specific #define's
//

#define IL_VERSION_1_6_7					1
#define IL_VERSION							167


// Attribute Bits
#define IL_ORIGIN_BIT						0x00000001
#define IL_FILE_BIT						0x00000002
#define IL_PAL_BIT						0x00000004
#define IL_FORMAT_BIT						0x00000008
#define IL_TYPE_BIT						0x00000010
#define IL_COMPRESS_BIT						0x00000020
#define IL_LOADFAIL_BIT						0x00000040
#define IL_FORMAT_SPECIFIC_BIT					0x00000080
#define IL_ALL_ATTRIB_BITS					0x000FFFFF


// Palette types
#define IL_PAL_NONE						0x0400
#define IL_PAL_RGB24						0x0401
#define IL_PAL_RGB32						0x0402
#define IL_PAL_RGBA32						0x0403
#define IL_PAL_BGR24						0x0404
#define IL_PAL_BGR32						0x0405
#define IL_PAL_BGRA32						0x0406


// Image types
#define IL_TYPE_UNKNOWN						0x0000
#define IL_BMP								0x0420
#define IL_CUT								0x0421
#define IL_DOOM								0x0422
#define IL_DOOM_FLAT						0x0423
#define IL_ICO								0x0424
#define IL_JPG								0x0425
#define IL_JFIF								0x0425
#define IL_LBM								0x0426
#define IL_PCD								0x0427
#define IL_PCX								0x0428
#define IL_PIC								0x0429
#define IL_PNG								0x042A
#define IL_PNM								0x042B
#define IL_SGI								0x042C
#define IL_TGA								0x042D
#define IL_TIF								0x042E
#define IL_CHEAD							0x042F
#define IL_RAW								0x0430
#define IL_MDL								0x0431
#define IL_WAL								0x0432
#define IL_LIF								0x0434
#define IL_MNG								0x0435
#define IL_JNG								0x0435
#define IL_GIF								0x0436
#define IL_DDS								0x0437
#define IL_DCX								0x0438
#define IL_PSD								0x0439
#define IL_EXIF								0x043A
#define IL_PSP								0x043B
#define IL_PIX								0x043C
#define IL_PXR								0x043D
#define IL_XPM								0x043E

#define IL_JASC_PAL							0x0475


// Error Types
#define IL_NO_ERROR							0x0000
#define IL_INVALID_ENUM						0x0501
#define IL_OUT_OF_MEMORY					0x0502
#define IL_FORMAT_NOT_SUPPORTED				0x0503
#define IL_INTERNAL_ERROR					0x0504
#define IL_INVALID_VALUE					0x0505
#define IL_ILLEGAL_OPERATION				0x0506
#define IL_ILLEGAL_FILE_VALUE				0x0507
#define IL_INVALID_FILE_HEADER				0x0508
#define IL_INVALID_PARAM					0x0509
#define IL_COULD_NOT_OPEN_FILE				0x050A
#define IL_INVALID_EXTENSION				0x050B
#define IL_FILE_ALREADY_EXISTS				0x050C
#define IL_OUT_FORMAT_SAME					0x050D
#define IL_STACK_OVERFLOW					0x050E
#define IL_STACK_UNDERFLOW					0x050F
#define IL_INVALID_CONVERSION				0x0510
#define IL_BAD_DIMENSIONS					0x0511
#define IL_FILE_READ_ERROR					0x0512  // 05/12/2002: Addition by Sam.
#define IL_FILE_WRITE_ERROR					0x0512

#define IL_LIB_GIF_ERROR					0x05E1
#define IL_LIB_JPEG_ERROR					0x05E2
#define IL_LIB_PNG_ERROR					0x05E3
#define IL_LIB_TIFF_ERROR					0x05E4
#define IL_LIB_MNG_ERROR					0x05E5
#define IL_UNKNOWN_ERROR					0x05FF


// Origin Definitions
#define IL_ORIGIN_SET						0x0600
#define IL_ORIGIN_LOWER_LEFT				0x0601
#define IL_ORIGIN_UPPER_LEFT				0x0602
#define IL_ORIGIN_MODE						0x0603


// Format and Type Mode Definitions
#define IL_FORMAT_SET						0x0610
#define IL_FORMAT_MODE						0x0611
#define IL_TYPE_SET							0x0612
#define IL_TYPE_MODE						0x0613


// File definitions
#define IL_FILE_OVERWRITE					0x0620
#define IL_FILE_MODE						0x0621


// Palette definitions
#define IL_CONV_PAL							0x0630


// Load fail definitions
#define IL_DEFAULT_ON_FAIL					0x0632


// Key colour definitions
#define IL_USE_KEY_COLOUR					0x0635
#define IL_USE_KEY_COLOR					0x0635


// Interlace definitions
#define IL_SAVE_INTERLACED					0x0639
#define IL_INTERLACE_MODE					0x063A


// Quantization definitions
#define IL_QUANTIZATION_MODE				0x0640
#define IL_WU_QUANT							0x0641
#define IL_NEU_QUANT						0x0642
#define IL_NEU_QUANT_SAMPLE					0x0643
#define IL_MAX_QUANT_INDEXS					0x0644	//XIX : ILint : Maximum number of colors to reduce to, default of 256. and has a range of 2-256


// Hints
#define IL_FASTEST							0x0660
#define IL_LESS_MEM							0x0661
#define IL_DONT_CARE						0x0662
#define IL_MEM_SPEED_HINT					0x0665
#define IL_USE_COMPRESSION					0x0666
#define IL_NO_COMPRESSION					0x0667
#define IL_COMPRESSION_HINT					0x0668


// Subimage types
#define IL_SUB_NEXT							0x0680
#define IL_SUB_MIPMAP						0x0681
#define IL_SUB_LAYER						0x0682


// Compression definitions
#define IL_COMPRESS_MODE					0x0700
#define IL_COMPRESS_NONE					0x0701
#define IL_COMPRESS_RLE						0x0702
#define IL_COMPRESS_LZO						0x0703
#define IL_COMPRESS_ZLIB					0x0704


// File format-specific values
#define IL_TGA_CREATE_STAMP					0x0710
#define IL_JPG_QUALITY						0x0711
#define IL_PNG_INTERLACE					0x0712
#define IL_TGA_RLE							0x0713
#define IL_BMP_RLE							0x0714
#define IL_SGI_RLE							0x0715
#define IL_TGA_ID_STRING					0x0717
#define IL_TGA_AUTHNAME_STRING				0x0718
#define IL_TGA_AUTHCOMMENT_STRING			0x0719
#define IL_PNG_AUTHNAME_STRING				0x071A
#define IL_PNG_TITLE_STRING					0x071B
#define IL_PNG_DESCRIPTION_STRING			0x071C
#define IL_TIF_DESCRIPTION_STRING			0x071D
#define IL_TIF_HOSTCOMPUTER_STRING			0x071E
#define IL_TIF_DOCUMENTNAME_STRING			0x071F
#define IL_TIF_AUTHNAME_STRING				0x0720
#define IL_JPG_SAVE_FORMAT					0x0721
#define IL_CHEAD_HEADER_STRING				0x0722
#define IL_PCD_PICNUM						0x0723

#define IL_PNG_ALPHA_INDEX					0x0724	//XIX : ILint : the color in the pallete at this index value (0-255) is considered transparent, -1 for no trasparent color

// DXTC definitions
#define IL_DXTC_FORMAT						0x0705
#define IL_DXT1								0x0706
#define IL_DXT2								0x0707
#define IL_DXT3								0x0708
#define IL_DXT4								0x0709
#define IL_DXT5								0x070A
#define IL_DXT_NO_COMP						0x070B
#define IL_KEEP_DXTC_DATA					0x070C
#define IL_DXTC_DATA_FORMAT					0x070D


// Cube map definitions
#define IL_CUBEMAP_POSITIVEX				0x00000400
#define IL_CUBEMAP_NEGATIVEX				0x00000800
#define IL_CUBEMAP_POSITIVEY				0x00001000
#define IL_CUBEMAP_NEGATIVEY				0x00002000
#define IL_CUBEMAP_POSITIVEZ				0x00004000
#define IL_CUBEMAP_NEGATIVEZ				0x00008000


// Values
#define IL_VERSION_NUM						0x0DE2
#define IL_IMAGE_WIDTH						0x0DE4
#define IL_IMAGE_HEIGHT						0x0DE5
#define IL_IMAGE_DEPTH						0x0DE6
#define IL_IMAGE_SIZE_OF_DATA				0x0DE7
#define IL_IMAGE_BPP						0x0DE8
#define IL_IMAGE_BYTES_PER_PIXEL			0x0DE8
#define IL_IMAGE_BITS_PER_PIXEL				0x0DE9
#define IL_IMAGE_FORMAT						0x0DEA
#define IL_IMAGE_TYPE						0x0DEB
#define IL_PALETTE_TYPE						0x0DEC
#define IL_PALETTE_SIZE						0x0DED
#define IL_PALETTE_BPP						0x0DEE
#define IL_PALETTE_NUM_COLS					0x0DEF
#define IL_PALETTE_BASE_TYPE				0x0DF0
#define IL_NUM_IMAGES						0x0DF1
#define IL_NUM_MIPMAPS						0x0DF2
#define IL_NUM_LAYERS						0x0DF3
#define IL_ACTIVE_IMAGE						0x0DF4
#define IL_ACTIVE_MIPMAP					0x0DF5
#define IL_ACTIVE_LAYER						0x0DF6
#define IL_CUR_IMAGE						0x0DF7
#define IL_IMAGE_DURATION					0x0DF8
#define IL_IMAGE_PLANESIZE					0x0DF9
#define IL_IMAGE_BPC						0x0DFA
#define IL_IMAGE_OFFX						0x0DFB
#define IL_IMAGE_OFFY						0x0DFC
#define IL_IMAGE_CUBEFLAGS					0x0DFD
#define IL_IMAGE_ORIGIN						0x0DFE


//
// Section shamelessly modified from the glut header.
//

// This is from Win32's <windef.h>
#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) || defined(__LCC__)
	#define ILAPIENTRY __stdcall 
	#define IL_PACKSTRUCT
//#elif defined(linux) || defined(MACOSX) || defined(__CYGWIN__) //fix bug 840364
#elif defined( __GNUC__ )
  // this should work for any of the above commented platforms 
  // plus any platform using GCC
	#define ILAPIENTRY
	#define IL_PACKSTRUCT __attribute__ ((packed))
#else
	#define ILAPIENTRY
	#define IL_PACKSTRUCT
#endif

// This is from Win32's <wingdi.h> and <winnt.h>
#if defined(__LCC__)
	#define ILAPI __stdcall
#elif defined(_WIN32) //changed 20031221 to fix bug 840421
	#ifdef IL_STATIC_LIB
		#define ILAPI
	#else
		#ifdef _IL_BUILD_LIBRARY
			#define ILAPI __declspec(dllexport)
		#else
			#define ILAPI __declspec(dllimport)
		#endif
	#endif
#elif __APPLE__
	#define ILAPI extern
#else
	#define ILAPI
#endif


#define IL_SEEK_SET	0
#define IL_SEEK_CUR	1
#define IL_SEEK_END	2
#define IL_EOF		-1


// Callback functions for file reading
typedef void* ILHANDLE;
typedef ILvoid		(ILAPIENTRY *fCloseRProc)(ILHANDLE);
typedef ILboolean	(ILAPIENTRY *fEofProc)   (ILHANDLE);
typedef ILint		(ILAPIENTRY *fGetcProc)  (ILHANDLE);
typedef ILHANDLE	(ILAPIENTRY *fOpenRProc) (const ILstring);
typedef ILint		(ILAPIENTRY *fReadProc)  (void*, ILuint, ILuint, ILHANDLE);
typedef ILint		(ILAPIENTRY *fSeekRProc) (ILHANDLE, ILint, ILint);
typedef ILint		(ILAPIENTRY *fTellRProc) (ILHANDLE);

// Callback functions for file writing
typedef ILvoid		(ILAPIENTRY *fCloseWProc)(ILHANDLE);
typedef ILHANDLE	(ILAPIENTRY *fOpenWProc) (const ILstring);
typedef ILint		(ILAPIENTRY *fPutcProc)  (ILubyte, ILHANDLE);
typedef ILint		(ILAPIENTRY *fSeekWProc) (ILHANDLE, ILint, ILint);
typedef ILint		(ILAPIENTRY *fTellWProc) (ILHANDLE);
typedef ILint		(ILAPIENTRY *fWriteProc) (const void*, ILuint, ILuint, ILHANDLE);

// Callback functions for allocation and deallocation
typedef ILvoid*		(ILAPIENTRY *mAlloc)(ILuint);
typedef ILvoid		(ILAPIENTRY *mFree) (ILvoid*);

// Registered format procedures
typedef ILenum		(ILAPIENTRY *IL_LOADPROC)(const ILstring);
typedef ILenum		(ILAPIENTRY *IL_SAVEPROC)(const ILstring);


// ImageLib Functions
ILAPI ILboolean		ILAPIENTRY ilActiveImage(ILuint Number);
ILAPI ILboolean		ILAPIENTRY ilActiveLayer(ILuint Number);
ILAPI ILboolean		ILAPIENTRY ilActiveMipmap(ILuint Number);
ILAPI ILboolean		ILAPIENTRY ilApplyPal(const ILstring FileName);
ILAPI ILboolean		ILAPIENTRY ilApplyProfile(const ILstring InProfile, const ILstring OutProfile);
ILAPI ILvoid		ILAPIENTRY ilBindImage(ILuint Image);
ILAPI ILboolean		ILAPIENTRY ilBlit(ILuint Source, ILint DestX, ILint DestY, ILint DestZ, ILuint SrcX, ILuint SrcY, ILuint SrcZ, ILuint Width, ILuint Height, ILuint Depth);
ILAPI ILvoid		ILAPIENTRY ilClearColour(ILclampf Red, ILclampf Green, ILclampf Blue, ILclampf Alpha);
ILAPI ILboolean		ILAPIENTRY ilClearImage(ILvoid);
ILAPI ILuint		ILAPIENTRY ilCloneCurImage(ILvoid);
ILAPI ILboolean		ILAPIENTRY ilCompressFunc(ILenum Mode);
ILAPI ILboolean		ILAPIENTRY ilConvertImage(ILenum DestFormat, ILenum DestType);
ILAPI ILboolean		ILAPIENTRY ilConvertPal(ILenum DestFormat);
ILAPI ILboolean		ILAPIENTRY ilCopyImage(ILuint Src);
ILAPI ILuint		ILAPIENTRY ilCopyPixels(ILuint XOff, ILuint YOff, ILuint ZOff, ILuint Width, ILuint Height, ILuint Depth, ILenum Format, ILenum Type, ILvoid *Data);
ILAPI ILuint		ILAPIENTRY ilCreateSubImage(ILenum Type, ILuint Num);
ILAPI ILboolean		ILAPIENTRY ilDefaultImage(ILvoid);
ILAPI ILvoid		ILAPIENTRY ilDeleteImages(ILsizei Num, const ILuint *Images);
ILAPI ILboolean		ILAPIENTRY ilDisable(ILenum Mode);
ILAPI ILboolean		ILAPIENTRY ilEnable(ILenum Mode);
ILAPI ILboolean		ILAPIENTRY ilFormatFunc(ILenum Mode);
ILAPI ILvoid		ILAPIENTRY ilGenImages(ILsizei Num, ILuint *Images);
ILAPI ILubyte*		ILAPIENTRY ilGetAlpha(ILenum Type);
ILAPI ILvoid            ILAPIENTRY ilModAlpha( ILint AlphaValue );
ILAPI ILvoid            ILAPIENTRY ilSetAlpha( ILuint AlphaValue );
ILAPI ILboolean		ILAPIENTRY ilGetBoolean(ILenum Mode);
ILAPI ILvoid		ILAPIENTRY ilGetBooleanv(ILenum Mode, ILboolean *Param);
ILAPI ILubyte*		ILAPIENTRY ilGetData(ILvoid);
ILAPI ILuint		ILAPIENTRY ilGetDXTCData(ILvoid *Buffer, ILuint BufferSize, ILenum DXTCFormat);
ILAPI ILenum		ILAPIENTRY ilGetError(ILvoid);
ILAPI ILint             ILAPIENTRY ilGetInteger(ILenum Mode);
ILAPI ILvoid		ILAPIENTRY ilGetIntegerv(ILenum Mode, ILint *Param);
ILAPI ILuint		ILAPIENTRY ilGetLumpPos(ILvoid);
ILAPI ILubyte*		ILAPIENTRY ilGetPalette(ILvoid);
ILAPI const ILstring    ILAPIENTRY ilGetString(ILenum StringName);
ILAPI ILvoid		ILAPIENTRY ilHint(ILenum Target, ILenum Mode);
ILAPI ILvoid		ILAPIENTRY ilInit(ILvoid);
ILAPI ILboolean		ILAPIENTRY ilIsDisabled(ILenum Mode);
ILAPI ILboolean		ILAPIENTRY ilIsEnabled(ILenum Mode);
ILAPI ILboolean		ILAPIENTRY ilIsImage(ILuint Image);
ILAPI ILboolean		ILAPIENTRY ilIsValid(ILenum Type, const ILstring FileName);
ILAPI ILboolean		ILAPIENTRY ilIsValidF(ILenum Type, ILHANDLE File);
ILAPI ILboolean		ILAPIENTRY ilIsValidL(ILenum Type, ILvoid *Lump, ILuint Size);
ILAPI ILvoid		ILAPIENTRY ilKeyColour(ILclampf Red, ILclampf Green, ILclampf Blue, ILclampf Alpha);
ILAPI ILboolean		ILAPIENTRY ilLoad(ILenum Type, const ILstring FileName);
ILAPI ILboolean		ILAPIENTRY ilLoadF(ILenum Type, ILHANDLE File);
ILAPI ILboolean		ILAPIENTRY ilLoadImage(const ILstring FileName);
ILAPI ILboolean		ILAPIENTRY ilLoadL(ILenum Type, ILvoid *Lump, ILuint Size);
ILAPI ILboolean		ILAPIENTRY ilLoadPal(const ILstring FileName);
ILAPI ILboolean		ILAPIENTRY ilOriginFunc(ILenum Mode);
ILAPI ILboolean		ILAPIENTRY ilOverlayImage(ILuint Source, ILint XCoord, ILint YCoord, ILint ZCoord);
ILAPI ILvoid		ILAPIENTRY ilPopAttrib(ILvoid);
ILAPI ILvoid		ILAPIENTRY ilPushAttrib(ILuint Bits);
ILAPI ILvoid		ILAPIENTRY ilRegisterFormat(ILenum Format);
ILAPI ILboolean		ILAPIENTRY ilRegisterLoad(const ILstring Ext, IL_LOADPROC Load);
ILAPI ILboolean		ILAPIENTRY ilRegisterMipNum(ILuint Num);
ILAPI ILboolean		ILAPIENTRY ilRegisterNumImages(ILuint Num);
ILAPI ILvoid		ILAPIENTRY ilRegisterOrigin(ILenum Origin);
ILAPI ILvoid		ILAPIENTRY ilRegisterPal(ILvoid *Pal, ILuint Size, ILenum Type);
ILAPI ILboolean		ILAPIENTRY ilRegisterSave(const ILstring Ext, IL_SAVEPROC Save);
ILAPI ILvoid		ILAPIENTRY ilRegisterType(ILenum Type);
ILAPI ILboolean		ILAPIENTRY ilRemoveLoad(const ILstring Ext);
ILAPI ILboolean		ILAPIENTRY ilRemoveSave(const ILstring Ext);
ILAPI ILvoid		ILAPIENTRY ilResetMemory(ILvoid);
ILAPI ILvoid		ILAPIENTRY ilResetRead(ILvoid);
ILAPI ILvoid		ILAPIENTRY ilResetWrite(ILvoid);
ILAPI ILboolean		ILAPIENTRY ilSave(ILenum Type, const ILstring FileName);
ILAPI ILuint		ILAPIENTRY ilSaveF(ILenum Type, ILHANDLE File);
ILAPI ILboolean		ILAPIENTRY ilSaveImage(const ILstring FileName);
ILAPI ILuint		ILAPIENTRY ilSaveL(ILenum Type, ILvoid *Lump, ILuint Size);
ILAPI ILboolean		ILAPIENTRY ilSavePal(const ILstring FileName);
ILAPI ILboolean		ILAPIENTRY ilSetData(ILvoid *Data);
ILAPI ILboolean		ILAPIENTRY ilSetDuration(ILuint Duration);
ILAPI ILvoid		ILAPIENTRY ilSetInteger(ILenum Mode, ILint Param);
ILAPI ILvoid		ILAPIENTRY ilSetMemory(mAlloc, mFree);
ILAPI ILvoid		ILAPIENTRY ilSetPixels(ILint XOff, ILint YOff, ILint ZOff, ILuint Width, ILuint Height, ILuint Depth, ILenum Format, ILenum Type, ILvoid *Data);
ILAPI ILvoid		ILAPIENTRY ilSetRead(fOpenRProc, fCloseRProc, fEofProc, fGetcProc, fReadProc, fSeekRProc, fTellRProc);
ILAPI ILvoid		ILAPIENTRY ilSetString(ILenum Mode, const char *String);
ILAPI ILvoid		ILAPIENTRY ilSetWrite(fOpenWProc, fCloseWProc, fPutcProc, fSeekWProc, fTellWProc, fWriteProc);
ILAPI ILvoid		ILAPIENTRY ilShutDown(ILvoid);
ILAPI ILboolean		ILAPIENTRY ilTexImage(ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp, ILenum Format, ILenum Type, ILvoid *Data);
ILAPI ILboolean		ILAPIENTRY ilTypeFunc(ILenum Mode);

ILAPI ILboolean		ILAPIENTRY ilLoadData(const ILstring FileName, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp);
ILAPI ILboolean		ILAPIENTRY ilLoadDataF(ILHANDLE File, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp);
ILAPI ILboolean		ILAPIENTRY ilLoadDataL(ILvoid *Lump, ILuint Size, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp);
ILAPI ILboolean		ILAPIENTRY ilSaveData(const ILstring FileName);

ILAPI ILboolean		ILAPIENTRY ilLoadFromJpegStruct(ILvoid* JpegDecompressorPtr);
ILAPI ILboolean		ILAPIENTRY ilSaveFromJpegStruct(ILvoid* JpegCompressorPtr);

// For all those weirdos that spell "colour" without the 'u'.
#define ilClearColor	ilClearColour
#define ilKeyColor		ilKeyColour


#ifdef __cplusplus
}
#endif

#endif // __IL_H__
#endif // __il_h__

#ifdef ALTIVEC
    #define imemclear(x,y) vec_memclear(x,y);
#else
    #define imemclear(x,y) memset(x,0,y);
#endif
    
#ifdef ALTIVEC
    void vec_memclear( ILvoid *, ILuint );
#endif
