#ifndef RTGMASTER_PROTOS_H
#define RTGMASTER_PROTOS_H

#ifdef __cplusplus
extern "C" {
#endif

#include <exec/types.h>

struct RtgScreen * OpenRtgScreen(struct ScreenReq *sreq, struct TagItem *taglist);
void   CloseRtgScreen(struct RtgScreen *MyScreen);
void   SwitchScreens(struct RtgScreen *MyScreen, ULONG Buffer);
void   LoadRGBRtg(struct RtgScreen *MyScreen, void *Table);
void   *LockRtgScreen(struct RtgScreen *MyScreen);
void   UnlockRtgScreen(struct RtgScreen *MyScreen);
void   *GetBufAdr(struct RtgScreen *MyScreen, ULONG Buffer);
void   GetRtgScreenData(struct RtgScreen *MyScreen, struct TagItem *taglist);
void   GetRtgScreenDataTags(struct RtgScreen *MyScreen, unsigned long tag1Type, ... );
ULONG  RtgScreenAtFront(struct RtgScreen *MyScreen);
struct ScreenReq * RtgScreenModeReq(struct TagItem *taglist);
struct ScreenReq * RtgScreenModeReqTags(unsigned long tag1Type, ... );
void   FreeRtgScreenModeReq(struct ScreenReq *myreq);
void   WriteRtgPixel(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG XPos, ULONG YPos, UWORD Color);
void   WriteRtgPixelRGB(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG XPos, ULONG YPos, ULONG Pixel);
void   FillRtgRect(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG Color, ULONG Left, ULONG Top, ULONG Width, ULONG Height);
void   FillRtgRectRGB(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG Color, ULONG Left, ULONG Top, ULONG Width, ULONG Height);
void   WriteRtgPixelArray(struct RtgScreen *MyScreen, APTR BufferAdr, APTR Array, ULONG Left, ULONG Top, ULONG Width, ULONG Height);
void   WriteRtgPixelRGBArray(struct RtgScreen *MyScreen, APTR BufferAdr, APTR Array, ULONG Left, ULONG Top, ULONG Width, ULONG Height);
void   CopyRtgPixelArray(struct RtgScreen *MyScreen, APTR BufferAdr, APTR Array, ULONG Left, ULONG Top, ULONG Width, ULONG Height,ULONG SrcX,ULONG SrcY);
void   DrawRtgLine(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG Color, ULONG X1, ULONG Y1, ULONG X2, ULONG Y2);
void   DrawRtgLineRGB(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG Color, ULONG X1, ULONG Y1, ULONG X2, ULONG Y2);
void   WaitRtgSwitch(struct RtgScreen *MyScreen);
void   WaitRtgBlit(struct RtgScreen *MyScreen);
void   RtgWaitTOF(struct RtgScreen *MyScreen);
void   RtgBlit(struct RtgScreen *MyScreen, int SrcBuf, int DstBuf, ULONG SrcX, ULONG SrcY, ULONG DstX, ULONG DstY, ULONG Width, ULONG Height,UBYTE minterm);
void   RtgBltClear(struct RtgScreen *MyScreen, int BufNum,ULONG xpos, ULONG ypos, ULONG width, ULONG height);
int    CallRtgC2P(struct RtgScreen *MyScreen, APTR BufAdr,APTR Array, ULONG signal, ULONG xpos, ULONG ypos, ULONG width, ULONG height, ULONG mode);
void RtgText(struct RtgScreen *MyScreen,void *map, char *mytext,WORD length,SHORT xpos,SHORT ypos);
void RtgSetFont(struct RtgScreen *MyScreen,void *myfont);
void RtgClearPointer(struct RtgScreen *MyScreen);
void RtgSetPointer(struct RtgScreen *MyScreen,UWORD *pointer,WORD Height,WORD Width,WORD XOffset,WORD YOffset);
void RtgSetTextMode(struct RtgScreen *MyScreen,UBYTE fgcolor,UBYTE bgcolor,UBYTE drmode);
void *RtgOpenFont(struct RtgScreen *MyScreen,struct TextAttr *ta);
void RtgCloseFont(struct RtgScreen *MyScreen,void *myfont);
void RtgSetTextModeRGB(struct RtgScreen *MyScreen,ULONG fgcolor,ULONG bgcolor,UBYTE drmode);
void *RtgInitRDCMP(struct RtgScreen *MyScreen);
void RtgWaitRDCMP(struct RtgScreen *MyScreen);
void *RtgGetMsg(struct RtgScreen *MyScreen);
void RtgReplyMsg(struct RtgScreen *MyScreen,void *msg);
int RtgCheckVSync(struct RtgScreen *MyScreen);
struct ScreenReqList *RtgAllocSRList(struct TagItem *tags);
struct ScreenReqList *RtgAllocSRListTags(unsigned long tag1Type, ... );
void FreeRtgSRList(struct ScreenReqList *req);
struct ScreenReq *RtgBestSR(struct TagItem *tags);
struct ScreenReq *RtgBestSRTags(unsigned long tag1Type, ... );
void CopyRtgBlit(struct RtgScreen *RtgScreen, APTR BufferAdr, APTR Array, ULONG Masked, ULONG Left, ULONG Top, ULONG Width, ULONG Height, ULONG WidthSrc, ULONG HeightSrc, ULONG SrcX, ULONG SrcY);
void RtgInitBob(struct RtgScreen *RtgScreen, APTR RtgBob, APTR BackAdr, APTR BufferAdr, ULONG xpos, ULONG ypos, ULONG display);

struct RtgScreen *PPCOpenRtgScreen(struct ScreenReq *sreq, struct TagItem *taglist);
struct RtgScreen *PPCOpenRtgScreenTags(struct ScreenReq *sreq, unsigned long tag1Type, ...);
void   PPCCloseRtgScreen(struct RtgScreen *MyScreen);
void   PPCSwitchScreens(struct RtgScreen *MyScreen, ULONG Buffer);
void   PPCLoadRGBRtg(struct RtgScreen *MyScreen, void *Table);
void   *PPCLockRtgScreen(struct RtgScreen *MyScreen);
void   PPCUnlockRtgScreen(struct RtgScreen *MyScreen);
void   *PPCGetBufAdr(struct RtgScreen *MyScreen, ULONG Buffer);
void   PPCGetRtgScreenData(struct RtgScreen *MyScreen, struct TagItem *taglist);
void   PPCGetRtgScreenDataTags(struct RtgScreen *MyScreen, unsigned long tag1Type, ... );
ULONG  PPCRtgScreenAtFront(struct RtgScreen *MyScreen);
struct ScreenReq * PPCRtgScreenModeReq(struct TagItem *taglist);
struct ScreenReq * PPCRtgScreenModeReqTags(unsigned long tag1Type, ... );
void   PPCFreeRtgScreenModeReq(struct ScreenReq *myreq);
void   PPCWriteRtgPixel(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG XPos, ULONG YPos, UWORD Color);
void   PPCWriteRtgPixelRGB(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG XPos, ULONG YPos, ULONG Pixel);
void   PPCFillRtgRect(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG Color, ULONG Left, ULONG Top, ULONG Width, ULONG Height);
void   PPCFillRtgRectRGB(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG Color, ULONG Left, ULONG Top, ULONG Width, ULONG Height);
void   PPCWriteRtgPixelArray(struct RtgScreen *MyScreen, APTR BufferAdr, APTR Array, ULONG Left, ULONG Top, ULONG Width, ULONG Height);
void   PPCWriteRtgPixelRGBArray(struct RtgScreen *MyScreen, APTR BufferAdr, APTR Array, ULONG Left, ULONG Top, ULONG Width, ULONG Height);
void   PPCCopyRtgPixelArray(struct RtgScreen *MyScreen, APTR BufferAdr, APTR Array, ULONG Left, ULONG Top, ULONG Width, ULONG Height,ULONG SrcX,ULONG SrcY);
void   PPCDrawRtgLine(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG Color, ULONG X1, ULONG Y1, ULONG X2, ULONG Y2);
void   PPCDrawRtgLineRGB(struct RtgScreen *MyScreen, APTR BufferAdr, ULONG Color, ULONG X1, ULONG Y1, ULONG X2, ULONG Y2);
void   PPCWaitRtgSwitch(struct RtgScreen *MyScreen);
void   PPCWaitRtgBlit(struct RtgScreen *MyScreen);
void   PPCRtgWaitTOF(struct RtgScreen *MyScreen);
void   PPCRtgBlit(struct RtgScreen *MyScreen, int SrcBuf, int DstBuf, ULONG SrcX, ULONG SrcY, ULONG DstX, ULONG DstY, ULONG Width, ULONG Height,UBYTE minterm);
void   PPCRtgBltClear(struct RtgScreen *MyScreen, int BufNum,ULONG xpos, ULONG ypos, ULONG width, ULONG height);
int    PPCCallRtgC2P(struct RtgScreen *MyScreen, APTR BufAdr,APTR Array, ULONG signal, ULONG xpos, ULONG ypos, ULONG width, ULONG height, ULONG mode);
void PPCRtgText(struct RtgScreen *MyScreen,void *map, char *mytext,WORD length,SHORT xpos,SHORT ypos);
void PPCRtgSetFont(struct RtgScreen *MyScreen,void *myfont);
void PPCRtgClearPointer(struct RtgScreen *MyScreen);
void PPCRtgSetPointer(struct RtgScreen *MyScreen,UWORD *pointer,WORD Height,WORD Width,WORD XOffset,WORD YOffset);
void PPCRtgSetTextMode(struct RtgScreen *MyScreen,UBYTE fgcolor,UBYTE bgcolor,UBYTE drmode);
void *PPCRtgOpenFont(struct RtgScreen *MyScreen,struct TextAttr *ta);
void PPCRtgCloseFont(struct RtgScreen *MyScreen,void *myfont);
void PPCRtgSetTextModeRGB(struct RtgScreen *MyScreen,ULONG fgcolor,ULONG bgcolor,UBYTE drmode);
void *PPCRtgInitRDCMP(struct RtgScreen *MyScreen);
void PPCRtgWaitRDCMP(struct RtgScreen *MyScreen);
void *PPCRtgGetMsg(struct RtgScreen *MyScreen);
void PPCRtgReplyMsg(struct RtgScreen *MyScreen,void *msg);
int PPCRtgCheckVSync(struct RtgScreen *MyScreen);
struct ScreenReqList *PPCRtgAllocSRList(struct TagItem *tags);
struct ScreenReqList *PPCRtgAllocSRListTags(unsigned long tag1Type, ... );
void PPCFreeRtgSRList(struct ScreenReqList *req);
struct ScreenReq *PPCRtgBestSR(struct TagItem *tags);
struct ScreenReq *PPCRtgBestSRTags(unsigned long tag1Type, ... );
void PPCCopyRtgBlit(struct RtgScreen *RtgScreen, APTR BufferAdr, APTR Array, ULONG Masked, ULONG Left, ULONG Top, ULONG Width, ULONG Height, ULONG WidthSrc, ULONG HeightSrc, ULONG SrcX, ULONG SrcY);
void PPCRtgInitBob(struct RtgScreen *RtgScreen, APTR RtgBob, APTR BackAdr, APTR BufferAdr, ULONG xpos, ULONG ypos, ULONG display);

#ifdef __cplusplus
};
#endif

#endif
