#ifndef _SH_VIEW_H
#define	_SH_VIEW_H

typedef
	struct DView
	{
		ULONG Width, Height;
		ULONG Depth;
		ULONG ModeID;
		ULONG Flags;
		struct BitMap *BitMap[2];
		struct Screen *Screen;
		struct ViewPort *VP;
    struct ScreenBuffer *ScreenBuffer[2];
    struct RastPort *RP[2];
    struct MsgPort *SafePort[2];
    struct MsgPort *DisplayPort[2];
    ULONG Display;
    ULONG Render;
    struct RastPort *DisplayRP;
    struct RastPort *RenderRP;
		struct Window *Window;
		struct RastPort *WindowRP;
		UBYTE *Chunky;
    VOID __asm (*C2P)(REGISTER __a0 struct DView *DView);
	} DVIEW;

#define DVF_INTERLEAVED 0x00000001
#define DVF_DBUFF			  0x00000002
#define DVF_CHUNKY      0x00000004
#define DVF_CENTER			0x00000008

typedef
	struct BackView
	{
		struct Screen *Screen;
		struct Window *Window;
	} BACK_VIEW;


DVIEW *OpenView(ULONG Width, ULONG Height, ULONG Depth, ULONG ModeID,
								ULONG *Palette, ULONG Flags);
VOID CloseView(DVIEW *DView);
VOID ClearChunky(DVIEW *DView);
VOID SwitchView(DVIEW *DView);
VOID SafeRender(DVIEW *DView);
BOOL OpenBackView(VOID);
VOID CloseBackView(VOID);

VOID FadeInPalette(DVIEW *DView, ULONG *Palette,
									 ULONG r, ULONG g, ULONG b, LONG Time);
VOID __asm FadeInSupport1(REGISTER __a0 LONG *dPalette,
													REGISTER __a1 ULONG *Palette,
													REGISTER __d0 ULONG r,
													REGISTER __d1 ULONG g,
													REGISTER __d2 ULONG b,
													REGISTER __d3 LONG Time);
VOID __asm FadeInSupport2(REGISTER __a0 LONG *dPalette,
													REGISTER __a1 ULONG *tmpPalette,
													REGISTER __d0 ULONG r,
													REGISTER __d1 ULONG g,
													REGISTER __d2 ULONG b,
													REGISTER __d3 LONG tmpTime);

VOID FadeOutPalette(DVIEW *DView, ULONG *Palette,
									 ULONG r, ULONG g, ULONG b, LONG Time);
VOID __asm FadeOutSupport1(REGISTER __a0 LONG *dPalette,
													 REGISTER __a1 ULONG *Palette,
													 REGISTER __d0 ULONG r,
													 REGISTER __d1 ULONG g,
													 REGISTER __d2 ULONG b,
													 REGISTER __d3 LONG Time);
VOID __asm FadeOutSupport2(REGISTER __a0 LONG *dPalette,
													 REGISTER __a1 ULONG *tmpPalette,
													 REGISTER __a2 ULONG *Palette,
													 REGISTER __d3 LONG tmpTime);

VOID __asm DissolveSupport1(REGISTER __a0 LONG *dPalette,
														REGISTER __a1 ULONG *Palette1,
														REGISTER __a2 ULONG *Palette2,
														REGISTER __d3 LONG Time);
VOID __asm DissolveSupport2(REGISTER __a0 LONG *dPalette,
														REGISTER __a1 ULONG *tmpPalette,
														REGISTER __a2 ULONG *Palette1,
														REGISTER __d3 LONG tmpTime);

VOID __asm C2P_FI(REGISTER __a0 DVIEW *DView);
VOID __asm ClearChunky320x200(REGISTER __a0 DVIEW *DView);

#endif
