#ifndef GAME_H#define GAME_H/* LinuxPPC: Big endian, alpha first. */#if defined(__linux__) && defined(__BIG_ENDIAN__)#undef BLUEFIRST#undef LITTLEEND#endif/* Linux i386: little endian, blue first ?? */#if defined(__linux__) && defined(__LITTLE_ENDIAN__)//FIXME test this#define BLUEFIRST#define LITTLEEND#endif/* BeOS for PowerPC: Big endian, blue first */#if defined(__BEOS__) && defined(__POWERPC__)#define BLUEFIRST#undef LITTLEEND#endif/* MacOS: Big endian, alpha first */#if defined(macintosh) && defined(__POWERPC__)#undef BLUEFIRST#undef LITTLEEND#endif/* Windows 95 and NT for i86: Little endian, blue first ?? */#if defined(_WIN32)//FIXME test this//FIXME check for i86 CPU#define BLUEFIRST#define LITTLEEND#endif#ifdef LITTLEEND	#ifdef BLUEFIRST	/*********************************************************************/	/* pixel packing for little endian CPU with blue first RGB encoding */	/*********************************************************************/	#define PackRGB(r,g,b) 	(((r)<<16)&0xFF0000L)| \													(((g)<<8)&0xFF00L)| \													((b)&0xFFL)	#define PackRGBA(r,g,b,a) (((a)<<24)&0xFF000000L) | \														(((r)<<16)&0xFF0000L)| \														(((g)<<8)&0xFF00L)| \														((b)&0xFFL)	typedef struct tagrgb32 {		unsigned char blue;		unsigned char green;		unsigned char red;		unsigned char alpha;	} PIX_RGB32;	#define InitRGBA(r,g,b,a) {b,g,r,a}	#else	/*********************************************************************/	/* pixel packing for little endian CPU with alpha first RGB encoding */	/*********************************************************************/	#define PackRGB(r,g,b) 	(((r)<<8)&0xFF00L)| \													(((g)<<16)&0xFF0000L)| \													(((b)<<24)&0xFF000000L)	#define PackRGBA(r,g,b,a) (((b)<<24)&0xFF000000L) | \														(((g)<<16)&0xFF0000L)| \														(((r)<<8)&0xFF00L)| \														((a)&0xFFL)	typedef struct tagrgb32 {		unsigned char alpha;		unsigned char red;		unsigned char green;		unsigned char blue;	} PIX_RGB32;	#define InitRGBA(r,g,b,a) {a,r,g,b}	#endif#else	#ifdef BLUEFIRST	/*********************************************************************/	/* pixel packing for big endian CPU with blue first RGB encoding     */	/*********************************************************************/	#define PackRGB(r,g,b) 	(((r)<<8)&0xFF00L)| \													(((g)<<16)&0xFF0000L)| \													(((b)<<24)&0xFF000000L)	#define PackRGBA(r,g,b,a) (((b)<<24)&0xFF000000L) | \														(((g)<<16)&0xFF0000L)| \														(((r)<<8)&0xFF00L)| \														((a)&0xFFL)	typedef struct tagrgb32 {		unsigned char blue;		unsigned char green;		unsigned char red;		unsigned char alpha;	} PIX_RGB32;	#define InitRGBA(r,g,b,a) {b,g,r,a}	#else	/*********************************************************************/	/* pixel packing for big endian CPU with alpha first RGB encoding    */	/*********************************************************************/	#define PackRGB(r,g,b) 	(((r)<<16)&0xFF0000L)| \													(((g)<<8)&0xFF00L)| \													((b)&0xFFL)	#define PackRGBA(r,g,b,a) (((a)<<24)&0xFF000000L) | \														(((r)<<16)&0xFF0000L)| \														(((g)<<8)&0xFF00L)| \														((b)&0xFFL)	typedef struct tagrgb32 {		unsigned char alpha;		unsigned char red;		unsigned char green;		unsigned char blue;	} PIX_RGB32;	#define InitRGBA(r,g,b,a) {a,r,g,b}	#endif#endif/*********************************************************************//*  BITMAP structure                                                 *//*********************************************************************/typedef struct tagmap {	PIX_RGB32 *buffer;	int dx,dy;	int left,top,width,height; /* clipping rectangle */} BITMAP;/*********************************************************************//*  Funciton Prototypes                                              *//*********************************************************************/#ifdef __cplusplusextern "C" {#endiflong MakeView(int dx,int dy);void FreeView(long vh);BITMAP *BeginRender(long vh);void EndRender(long vh);int ToAscii(int x);void SetTimeTick(float t);float GetSystemTime(void);void ClearSystemTime(void);/* User supplied event functions */int Setup(void);void Shutdown(void);void DoButtonUp(int mousex,int mousey,int key);void DoButtonDown(int mousex,int mousey,int key);void DoTimeTick(int mousex,int mousey);void DoRedraw(int mousex,int mousey);/* bitmap functions */BITMAP *AllocateBits(int dx,int dy);void FreeBits(BITMAP *p);void Blit(BITMAP *src,int srcx,int srcy,					BITMAP *dest,int destx,int desty,int dx,int dy);void SolidBlit(BITMAP *src,int srcx,int srcy,					BITMAP *dest,int destx,int desty,int dx,int dy);#ifdef __cplusplus}#endif#endif