#ifndef	GFXFUNC_H
#define	GFXFUNC_H

#define	PAD_RIGHT	0x01
#define	PAD_LEFT	0x02
#define	PAD_UP		0x04
#define	PAD_DOWN	0x08
#define	PAD_BUTTON1	0x10
#define	PAD_BUTTON2	0x20
#define	PAD_BUTTON3	0x10
#define	PAD_BUTTON4	0x20

#define	BLIT_IMAGE		0
#define	BLIT_COLORFILL	1

#define	MEMF_ZERO		1
#define	MEMF_ABORT		2

typedef	unsigned short UWORD;
typedef unsigned char UBYTE;
typedef	signed char	SBYTE;
typedef unsigned long ULONG;

typedef	void	* GXIMAGE;

typedef struct{
	long	Width,Height;
}GXSCREENMODEINFO;

typedef struct{
	long	X,Y,Width,Height;
}GXOBLONG;

typedef	struct{
	UBYTE	Red,Green,Blue,Pad;
}GXPALETTE;

typedef struct{
	char	*Name;
}GXVOLUME;

typedef struct{
	void	*Next;
	char	*Name;
	long	Length;
	long	File;
}GXFILEINFO;

typedef struct{
	long	Type;
	long	Color;
	void	*FromImage;
	void	*ToImage;
	GXOBLONG	From;
	long	XTo,YTo;
}GXBLITLIST;

typedef	struct{
	long	X,Y,LeftButton,MiddleButton,RightButton;
}GXMOUSEINFO;

typedef	struct{
	int			Width,Height,BytesAcross;
	void		*Data;
	int			NPalette;
	GXPALETTE	*Palette;
}GXPICTURE;

#define	MODE_LORES	0
#define	MODE_HIRES	1

GXSCREENMODEINFO	*GXMakeScreenModeInfo(long *number);
void				GXKillScreenModeInfo(GXSCREENMODEINFO *info);
long				GXSetScreenMode(long mode);
GXVOLUME			*GXMakeVolumeInfo(long *size);
void				GXKillVolumeInfo(GXVOLUME *vol);
int		GXMakeDirectoryInfo(char *name, GXFILEINFO **info);
void				GXKillDirectoryInfo(GXFILEINFO *info);
void				GXInitiateHardware(void);
void				*GXLoadFileToMemory(char *name, size_t *size);
void				*GXGetMem(size_t amount, long flags);
void				GXFreeMem(void *data);
GXIMAGE				*GXMakeImage(int width, int height);
void				GXKillImage(GXIMAGE *image);
void				GXSetPaletteRange(GXPALETTE *Pal, int FirstColor, int NumberColors);
GXIMAGE				*GXPictureToImage(GXPICTURE *pic, long transparency, long TransparentColor);
int					GXGetPaletteRange(GXPALETTE *Pal, int FirstColor, int NumberColors);
GXIMAGE				*GXStartDrawing(int n);
void				GXDrawBlitList(GXBLITLIST *b, int nblit);
long				GXReadJoystick(int n);
void				GXQuitCode(char *Message, ...);
void				GXSystemUpdate(void);
void				GXReadMouse(GXMOUSEINFO	*info);
int					GXMapColor(GXPALETTE *pal);
long				GXImageHeight(GXIMAGE *image);
long				GXImageWidth(GXIMAGE *image);
void				GXReserveColors(int start, int number, int reserve);
int					GXSaveMemoryToFile(void *data, size_t LengthData, char *FileName);
GXBLITLIST			*GXNextBlit(void);
void				GXDoBlit(void);
int					GXPrintf(const char *message, ...);
long				GXKeyDown(long key);
long				GXNextKey(void);
int					GXCheckQuit(void);
GXPICTURE			*GXGetPicture(GXIMAGE *image, GXOBLONG *area);
char				*GXGetLastErrorMessage(void);
long				GXTimer(void);
long				GXTicksPerSecond(void);

#endif