#ifndef  CLIB_GRAPHICS_PROTOS_H
#define  CLIB_GRAPHICS_PROTOS_H

/*
**	$VER: graphics_protos.h 39.31 (29.4.93)
**	Includes Release 40.15
**
**	C prototypes. For use with 32 bit integers only.
**
**	(C) Copyright 1990-1993 Commodore-Amiga, Inc.
**	    All Rights Reserved
*/

#ifndef  GRAPHICS_GFX_H
#include <graphics/gfx.h>
#endif
#ifndef  GRAPHICS_DISPLAYINFO_H
#include <graphics/displayinfo.h>
#endif
#ifndef  GRAPHICS_GELS_H
#include <graphics/gels.h>
#endif
#ifndef  GRAPHICS_RASTPORT_H
#include <graphics/rastport.h>
#endif
#ifndef  GRAPHICS_VIEW_H
#include <graphics/view.h>
#endif
#ifndef  GRAPHICS_COPPER_H
#include <graphics/copper.h>
#endif
#ifndef  GRAPHICS_CLIP_H
#include <graphics/clip.h>
#endif
#ifndef  GRAPHICS_REGIONS_H
#include <graphics/regions.h>
#endif
#ifndef  GRAPHICS_SPRITE_H
#include <graphics/sprite.h>
#endif
#ifndef  GRAPHICS_TEXT_H
#include <graphics/text.h>
#endif
#ifndef  HARDWARE_BLIT_H
#include <hardware/blit.h>
#endif
/*------ BitMap primitives ------*/
LONG GspBltBitMap( struct BitMap *srcBitMap, long xSrc, long ySrc,
	struct BitMap *destBitMap, long xDest, long yDest, long xSize,
	long ySize, unsigned long minterm, unsigned long mask,
	PLANEPTR tempA );
void GspBltTemplate( PLANEPTR source, long xSrc, long srcMod,
	struct RastPort *destRP, long xDest, long yDest, long xSize,
	long ySize );
/*------ Text routines ------*/
void GspClearEOL( struct RastPort *rp );
void GspClearScreen( struct RastPort *rp );
WORD GspTextLength( struct RastPort *rp, STRPTR string, unsigned long count );
LONG GspText( struct RastPort *rp, STRPTR string, unsigned long count );
LONG GspSetFont( struct RastPort *rp, struct TextFont *textFont );
struct TextFont *GspOpenFont( struct TextAttr *textAttr );
void GspCloseFont( struct TextFont *textFont );
ULONG GspAskSoftStyle( struct RastPort *rp );
ULONG GspSetSoftStyle( struct RastPort *rp, unsigned long style,
	unsigned long enable );
/*------	Gels routines ------*/
void GspAddBob( struct Bob *bob, struct RastPort *rp );
void GspAddVSprite( struct VSprite *vSprite, struct RastPort *rp );
void GspDoCollision( struct RastPort *rp );
void GspDrawGList( struct RastPort *rp, struct ViewPort *vp );
void GspInitGels( struct VSprite *head, struct VSprite *tail,
	struct GelsInfo *gelsInfo );
void GspInitMasks( struct VSprite *vSprite );
void GspRemIBob( struct Bob *bob, struct RastPort *rp, struct ViewPort *vp );
void GspRemVSprite( struct VSprite *vSprite );
void GspSetCollision( unsigned long num,
	void (*routine)(struct VSprite *vSprite, APTR),
	struct GelsInfo *gelsInfo );
void GspSortGList( struct RastPort *rp );
void GspAddAnimOb( struct AnimOb *anOb, struct AnimOb **anKey,
	struct RastPort *rp );
void GspAnimate( struct AnimOb **anKey, struct RastPort *rp );
BOOL GspGetGBuffers( struct AnimOb *anOb, struct RastPort *rp, long flag );
void GspInitGMasks( struct AnimOb *anOb );
/*------	General graphics routines ------*/
void GspDrawEllipse( struct RastPort *rp, long xCenter, long yCenter, long a,
	long b );
LONG GspAreaEllipse( struct RastPort *rp, long xCenter, long yCenter, long a,
	long b );
void GspLoadRGB4( struct ViewPort *vp, UWORD *colors, long count );
void GspInitRastPort( struct RastPort *rp );
void GspInitVPort( struct ViewPort *vp );
ULONG GspMrgCop( struct View *view );
ULONG GspMakeVPort( struct View *view, struct ViewPort *vp );
void GspLoadView( struct View *view );
void GspWaitBlit( void );
void GspSetRast( struct RastPort *rp, unsigned long pen );
void GspMove( struct RastPort *rp, long x, long y );
void GspDraw( struct RastPort *rp, long x, long y );
LONG GspAreaMove( struct RastPort *rp, long x, long y );
LONG GspAreaDraw( struct RastPort *rp, long x, long y );
LONG GspAreaEnd( struct RastPort *rp );
void GspWaitTOF( void );
void GspQBlit( struct bltnode *blit );
void GspInitArea( struct AreaInfo *areaInfo, APTR vectorBuffer,
	long maxVectors );
void GspSetRGB4( struct ViewPort *vp, long index, unsigned long red,
	unsigned long green, unsigned long blue );
void GspQBSBlit( struct bltnode *blit );
void GspBltClear( PLANEPTR memBlock, unsigned long byteCount,
	unsigned long flags );
void GspRectFill( struct RastPort *rp, long xMin, long yMin, long xMax,
	long yMax );
void GspBltPattern( struct RastPort *rp, PLANEPTR mask, long xMin, long yMin,
	long xMax, long yMax, unsigned long maskBPR );
ULONG GspReadPixel( struct RastPort *rp, long x, long y );
LONG GspWritePixel( struct RastPort *rp, long x, long y );
BOOL GspFlood( struct RastPort *rp, unsigned long mode, long x, long y );
void GspPolyDraw( struct RastPort *rp, long count, WORD *polyTable );
void GspSetAPen( struct RastPort *rp, unsigned long pen );
void GspSetBPen( struct RastPort *rp, unsigned long pen );
void GspSetDrMd( struct RastPort *rp, unsigned long drawMode );
void GspInitView( struct View *view );
void GspCBump( struct UCopList *copList );
void GspCMove( struct UCopList *copList, APTR destination, long data );
void GspCWait( struct UCopList *copList, long v, long h );
LONG GspVBeamPos( void );
void GspInitBitMap( struct BitMap *bitMap, long depth, long width, long height );
void GspScrollRaster( struct RastPort *rp, long dx, long dy, long xMin, long yMin,
	long xMax, long yMax );
void GspWaitBOVP( struct ViewPort *vp );
WORD GspGetSprite( struct SimpleSprite *sprite, long num );
void GspFreeSprite( long num );
void GspChangeSprite( struct ViewPort *vp, struct SimpleSprite *sprite,
	PLANEPTR newData );
void GspMoveSprite( struct ViewPort *vp, struct SimpleSprite *sprite, long x,
	long y );
void GspLockLayerRom( struct Layer *layer );
void GspUnlockLayerRom( struct Layer *layer );
void GspSyncSBitMap( struct Layer *layer );
void GspCopySBitMap( struct Layer *layer );
void GspOwnBlitter( void );
void GspDisownBlitter( void );
struct TmpRas *GspInitTmpRas( struct TmpRas *tmpRas, PLANEPTR buffer,
	long size );
void GspAskFont( struct RastPort *rp, struct TextAttr *textAttr );
void GspAddFont( struct TextFont *textFont );
void GspRemFont( struct TextFont *textFont );
PLANEPTR GspAllocRaster( unsigned long width, unsigned long height );
void GspFreeRaster( PLANEPTR p, unsigned long width, unsigned long height );
void GspAndRectRegion( struct Region *region, struct Rectangle *rectangle );
BOOL GspOrRectRegion( struct Region *region, struct Rectangle *rectangle );
struct Region *GspNewRegion( void );
BOOL GspClearRectRegion( struct Region *region, struct Rectangle *rectangle );
void GspClearRegion( struct Region *region );
void GspDisposeRegion( struct Region *region );
void GspFreeVPortCopLists( struct ViewPort *vp );
void GspFreeCopList( struct CopList *copList );
void GspClipBlit( struct RastPort *srcRP, long xSrc, long ySrc,
	struct RastPort *destRP, long xDest, long yDest, long xSize,
	long ySize, unsigned long minterm );
BOOL GspXorRectRegion( struct Region *region, struct Rectangle *rectangle );
void GspFreeCprList( struct cprlist *cprList );
struct ColorMap *GspGetColorMap( long entries );
void GspFreeColorMap( struct ColorMap *colorMap );
ULONG GspGetRGB4( struct ColorMap *colorMap, long entry );
void GspScrollVPort( struct ViewPort *vp );
struct CopList *GspUCopperListInit( struct UCopList *uCopList, long n );
void GspFreeGBuffers( struct AnimOb *anOb, struct RastPort *rp, long flag );
void GspBltBitMapRastPort( struct BitMap *srcBitMap, long xSrc, long ySrc,
	struct RastPort *destRP, long xDest, long yDest, long xSize,
	long ySize, unsigned long minterm );
BOOL GspOrRegionRegion( struct Region *srcRegion, struct Region *destRegion );
BOOL GspXorRegionRegion( struct Region *srcRegion, struct Region *destRegion );
BOOL GspAndRegionRegion( struct Region *srcRegion, struct Region *destRegion );
void GspSetRGB4CM( struct ColorMap *colorMap, long index, unsigned long red,
	unsigned long green, unsigned long blue );
void GspBltMaskBitMapRastPort( struct BitMap *srcBitMap, long xSrc, long ySrc,
	struct RastPort *destRP, long xDest, long yDest, long xSize,
	long ySize, unsigned long minterm, PLANEPTR bltMask );
BOOL GspAttemptLockLayerRom( struct Layer *layer );
/*--- functions in V36 or higher (Release 2.0) ---*/
APTR GspGfxNew( unsigned long gfxNodeType );
void GspGfxFree( APTR gfxNodePtr );
void GspGfxAssociate( APTR associateNode, APTR gfxNodePtr );
void GspBitMapScale( struct BitScaleArgs *bitScaleArgs );
UWORD GspScalerDiv( unsigned long factor, unsigned long numerator,
	unsigned long denominator );
WORD GspTextExtent( struct RastPort *rp, STRPTR string, long count,
	struct TextExtent *textExtent );
ULONG GspTextFit( struct RastPort *rp, STRPTR string, unsigned long strLen,
	struct TextExtent *textExtent, struct TextExtent *constrainingExtent,
	long strDirection, unsigned long constrainingBitWidth,
	unsigned long constrainingBitHeight );
APTR GspGfxLookUp( APTR associateNode );
BOOL GspVideoControl( struct ColorMap *colorMap, struct TagItem *tagarray );
BOOL GspVideoControlTags( struct ColorMap *colorMap, unsigned long tag1Type,
	... );
struct MonitorSpec *GspOpenMonitor( STRPTR monitorName,
	unsigned long displayID );
BOOL GspCloseMonitor( struct MonitorSpec *monitorSpec );
DisplayInfoHandle GspFindDisplayInfo( unsigned long displayID );
ULONG GspNextDisplayInfo( unsigned long displayID );
ULONG GspGetDisplayInfoData( DisplayInfoHandle handle, UBYTE *buf,
	unsigned long size, unsigned long tagID, unsigned long displayID );
void GspFontExtent( struct TextFont *font, struct TextExtent *fontExtent );
LONG GspReadPixelLine8( struct RastPort *rp, unsigned long xstart,
	unsigned long ystart, unsigned long width, UBYTE *array,
	struct RastPort *tempRP );
LONG GspWritePixelLine8( struct RastPort *rp, unsigned long xstart,
	unsigned long ystart, unsigned long width, UBYTE *array,
	struct RastPort *tempRP );
LONG GspReadPixelArray8( struct RastPort *rp, unsigned long xstart,
	unsigned long ystart, unsigned long xstop, unsigned long ystop,
	UBYTE *array, struct RastPort *temprp );
LONG GspWritePixelArray8( struct RastPort *rp, unsigned long xstart,
	unsigned long ystart, unsigned long xstop, unsigned long ystop,
	UBYTE *array, struct RastPort *temprp );
LONG GspGetVPModeID( struct ViewPort *vp );
LONG GspModeNotAvailable( unsigned long modeID );
WORD GspWeighTAMatch( struct TextAttr *reqTextAttr,
	struct TextAttr *targetTextAttr, struct TagItem *targetTags );
WORD GspWeighTAMatchTags( struct TextAttr *reqTextAttr,
	struct TextAttr *targetTextAttr, unsigned long tag1Type, ... );
void GspEraseRect( struct RastPort *rp, long xMin, long yMin, long xMax,
	long yMax );
ULONG GspExtendFont( struct TextFont *font, struct TagItem *fontTags );
ULONG GspExtendFontTags( struct TextFont *font, unsigned long tag1Type, ... );
void GspStripFont( struct TextFont *font );
/*--- functions in V39 or higher (Release 3) ---*/
UWORD GspCalcIVG( struct View *v, struct ViewPort *vp );
LONG GspAttachPalExtra( struct ColorMap *cm, struct ViewPort *vp );
LONG GspObtainBestPenA( struct ColorMap *cm, unsigned long r, unsigned long g,
	unsigned long b, struct TagItem *tags );
LONG GspObtainBestPen( struct ColorMap *cm, unsigned long r, unsigned long g,
	unsigned long b, unsigned long tag1Type, ... );
void GspSetRGB32( struct ViewPort *vp, unsigned long n, unsigned long r,
	unsigned long g, unsigned long b );
ULONG GspGetAPen( struct RastPort *rp );
ULONG GspGetBPen( struct RastPort *rp );
ULONG GspGetDrMd( struct RastPort *rp );
ULONG GspGetOutlinePen( struct RastPort *rp );
void GspLoadRGB32( struct ViewPort *vp, ULONG *table );
ULONG GspSetChipRev( unsigned long want );
void GspSetABPenDrMd( struct RastPort *rp, unsigned long apen, unsigned long bpen,
	unsigned long drawmode );
void GspGetRGB32( struct ColorMap *cm, unsigned long firstcolor,
	unsigned long ncolors, ULONG *table );
struct BitMap *GspAllocBitMap( unsigned long sizex, unsigned long sizey,
	unsigned long depth, unsigned long flags,
	struct BitMap *friend_bitmap );
void GspFreeBitMap( struct BitMap *bm );
LONG GspGetExtSpriteA( struct ExtSprite *ss, struct TagItem *tags );
LONG GspGetExtSprite( struct ExtSprite *ss, unsigned long tag1Type, ... );
ULONG GspCoerceMode( struct ViewPort *vp, unsigned long monitorid,
	unsigned long flags );
void GspChangeVPBitMap( struct ViewPort *vp, struct BitMap *bm,
	struct DBufInfo *db );
void GspReleasePen( struct ColorMap *cm, unsigned long n );
ULONG GspObtainPen( struct ColorMap *cm, unsigned long n, unsigned long r,
	unsigned long g, unsigned long b, long f );
ULONG GspGetBitMapAttr( struct BitMap *bm, unsigned long attrnum );
struct GspDBufInfo *AllocDBufInfo( struct ViewPort *vp );
void GspFreeDBufInfo( struct DBufInfo *dbi );
ULONG GspSetOutlinePen( struct RastPort *rp, unsigned long pen );
ULONG GspSetWriteMask( struct RastPort *rp, unsigned long msk );
void GspSetMaxPen( struct RastPort *rp, unsigned long maxpen );
void GspSetRGB32CM( struct ColorMap *cm, unsigned long n, unsigned long r,
	unsigned long g, unsigned long b );
void GspScrollRasterBF( struct RastPort *rp, long dx, long dy, long xMin,
	long yMin, long xMax, long yMax );
LONG GspFindColor( struct ColorMap *cm, unsigned long r, unsigned long g,
	unsigned long b, long maxcolor );
struct ExtSprite *GspAllocSpriteDataA( struct BitMap *bm, struct TagItem *tags );
struct ExtSprite *GspAllocSpriteData( struct BitMap *bm, unsigned long tag1Type,
	... );
LONG GspChangeExtSpriteA( struct ViewPort *vp, struct ExtSprite *oldsprite,
	struct ExtSprite *newsprite, struct TagItem *tags );
LONG GspChangeExtSprite( struct ViewPort *vp, struct ExtSprite *oldsprite,
	struct ExtSprite *newsprite, unsigned long tag1Type, ... );
void GspFreeSpriteData( struct ExtSprite *sp );
void GspSetRPAttrsA( struct RastPort *rp, struct TagItem *tags );
void GspSetRPAttrs( struct RastPort *rp, unsigned long tag1Type, ... );
void GspGetRPAttrsA( struct RastPort *rp, struct TagItem *tags );
void GspGetRPAttrs( struct RastPort *rp, unsigned long tag1Type, ... );
ULONG GspBestModeIDA( struct TagItem *tags );
ULONG GspBestModeID( unsigned long tag1Type, ... );
/*--- functions in V40 or higher (Release 3.1) ---*/
void GspWriteChunkyPixels( struct RastPort *rp, unsigned long xstart,
	unsigned long ystart, unsigned long xstop, unsigned long ystop,
	UBYTE *array, long bytesperrow );
#endif	 /* CLIB_GRAPHICS_PROTOS_H */
