
#include <intuition/intuition.h>
#include <clib/macros.h>
#include <libraries/asyncio.h>


#define PROGNAME				"Ripley"
#define	__VERSION__				" 0.40"

//#define	TASKPRIO				0

#define GUIGFX_VERSION			11
#define	P96_VERSION				2
#define	ASYNCIO_VERSION			39
#define CGFX_VERSION			40

#define	DEFAULT_WINTITLE		PROGNAME __VERSION__

#define	DEFAULT_MINWIDTH		100
#define	DEFAULT_MINHEIGHT		100
#define	DEFAULT_MAXWIDTH		-1
#define	DEFAULT_MAXHEIGHT		-1

#define	MINSCREENWIDTH			320
#define	MINSCREENHEIGHT			200
#define	MINSCREENDEPTH			2

#define	HISTOGRAMTYPE			HSTYPE_12BIT_TURBO

#ifdef __PPC__
	#define inbufferlenght			2048
#else
	#define inbufferlenght			2048
#endif

#define RNG(a,b,c) (MIN(MAX((a),(b)),(c)))

/*********************************************************************
----------------------------------------------------------------------

	structures

----------------------------------------------------------------------
*********************************************************************/

struct mvwindow
{
	struct mvscreen *screen;
	struct Window *window;
	
	BOOL pipwindow;

	struct MsgPort *appmsgport;
	struct AppWindow *appwindow;
	ULONG appSignal;
	ULONG idcmpSignal;

	UWORD winleft, wintop;
	UWORD winwidth, winheight;
	UWORD innerwidth, innerheight;
	UWORD innerleft, innertop;

	WORD otherwinpos[4];			/* alternate window position x,y,w,h */

	ULONG idcmp;

	APTR drawhandle;
	
	APTR bufferpic;
	
	int sourcewidth, sourceheight;	// sourcebuffer
	int sourcewidth16;
	
	BOOL gray;
	
	ULONG *rgbbuffer;
	
	APTR psm;
	
	APTR directdrawhandle;
	
	APTR timeHandle;
	
	int bright;
	
	char *title;
	
	int framerate;

	LONG whitepen, blackpen;

	int	frame;
	
	APTR p96address;

#ifdef __PPC__
	void *timerObject;
	long	ticks;
#endif

	int visibleWidth;
	int visibleHeight;
	
	BOOL halted;
};


#ifndef __PPC__
extern struct AsyncFile	*AsyncInfile;
#endif



extern void DeleteMVWindow (struct mvwindow *win);

extern struct Library *GuiGFXBase;

extern struct Library *CyberGfxBase;

extern BOOL mplay(struct mvwindow *window, unsigned char **buffer);



extern struct mvwindow *CreateMVWindow (struct mvscreen *scr, BOOL tryPip, int width, int height, BOOL gray, char *name, int framerate);

extern void UpdateWindowParameters(struct mvwindow *win);


extern BOOL InitGlobal(void);
extern void CloseGlobal(void);

extern void ppctimer (unsigned int *time);

extern void saveframe(unsigned char **src, struct mvwindow *win);
extern void savebyte(int c,int outfile);
