#ifndef __INC_POS_PROTO_PGFX2_H
#define __INC_POS_PROTO_PGFX2_H
/*******************************************************************
 Includes Release 24
 (C) Copyright 1995-1997 proDAD
     All Rights Reserved

 $AUT Holger Burkarth
 $DAT >>pGFX2.h<<   08 Mar 1997    08:57:11 - (C) ProDAD
*******************************************************************/
#ifndef __INC_POS_PEXEC_LIST_H
#include <pExec/List.h>
#endif
#ifndef __INC_POS_PDOS_DOSTYPES_H
#include <pDOS/DosTypes.h>
#endif



#ifdef __cplusplus
extern "C" {
#endif

/*------ Lib --------------------------------------------------------*/
VOID pOS_InitGfxLibrary(_R_A0 struct pOS_GfxLibrary*);
struct pOS_MonMountDevice* pOS_CreateMonMount(_R_D0 ULONG type);
VOID pOS_DeleteMonMount(_R_A0 struct pOS_MonMountDevice*);
__ARID__ APTR pOS_AllocGfxObject(_R_D0 ULONG type,_R_D1 ULONG);
VOID pOS_FreeGfxObject(_R_D0 ULONG type,_R_A0 __ARID__ APTR);
VOID pOS_WaitBlit(_R_A0 struct pOS_GfxLibrary*);


/*------ GfxMap --------------------------------------------------------*/
__ARID__ struct pOS_GfxMap* pOS_AllocGfxMapA(_R_A0 struct pOS_GfxLibrary*,_R_A1 const struct pOS_TagItem*);
VOID pOS_FreeGfxMap(_R_A0 __ARID__ struct pOS_GfxMap*);
__ARID__ struct pOS_GfxMapEx* pOS_AllocGfxMapExA(_R_A0 const struct pOS_GfxMap* friendGM,_R_A1 const struct pOS_TagItem*);
VOID pOS_FreeGfxMapExA(_R_A0 __ARID__ struct pOS_GfxMapEx*);
BOOL pOS_InitTCGfxMap(_R_A0 struct pOS_GfxMap*,_R_A1 struct pOS_ColorMap*);
VOID pOS_WriteStdGfxMap(_R_A0 const struct pOS_GfxMap* scrBM,_R_D0 SLONG scrX,_R_D1 SLONG scrY,
        _R_A1 struct pOS_GfxMap* destBM,_R_D2 SLONG destX,_R_D3 SLONG destY,_R_D4 ULONG width,_R_D5 ULONG height,
        _R_D6 ULONG mode,_R_A2 const struct pOS_Point* patOffset);
VOID pOS_WriteStdGfxMapRastPort(_R_A0 const struct pOS_GfxMap*,_R_D0 SLONG scrX,_R_D1 SLONG scrY,
        _R_A1 struct pOS_RastPort*,_R_D2 SLONG destX,_R_D3 SLONG destY,_R_D4 ULONG width,_R_D5 ULONG height,
        _R_D6 ULONG mode);


/*------ ColorMap --------------------------------------------------------*/
__ARID__ struct pOS_ColorMap* pOS_AllocColorMapA(_R_A0 struct pOS_GfxLibrary*,_R_A1 const struct pOS_TagItem*);
VOID pOS_FreeColorMap(_R_A0 __ARID__ struct pOS_ColorMap*);
VOID pOS_SetColor(_R_A0 struct pOS_ColorMap*,_R_D0 ULONG entry,_R_A2 const struct pOS_RColor*,_R_D1 ULONG count);
VOID pOS_GetColor(_R_A0 const struct pOS_ColorMap*,_R_D0 ULONG entry,_R_A2 struct pOS_RColor*,_R_D1 ULONG count);
ULONG pOS_ObtainColorPen(_R_A0 struct pOS_ColorMap*,_R_D0 ULONG entry,_R_A2 const struct pOS_RColor*,_R_D1 ULONG flags);
VOID pOS_ReleaseColorPen(_R_A0 struct pOS_ColorMap*,_R_D0 ULONG entry);
__ARID__
struct pOS_ColorMapEx* pOS_AllocColorMapExA(_R_A0 const struct pOS_ColorMap* friendCM,_R_A1 const struct pOS_TagItem*);
VOID pOS_FreeColorMapExA(_R_A0 __ARID__ struct pOS_ColorMapEx*);
VOID pOS_DisplayColorMap(_R_A0 struct pOS_ColorMap*,_R_D0 ULONG flags);




/*------ RastPort --------------------------------------------------------*/
VOID  pOS_ConstructRastPort(_R_A0 struct pOS_RastPort*);
ULONG pOS_SetRastPortA(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_TagItem*);
ULONG pOS_GetRastPortA(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_TagItem*);
VOID  pOS_SetPosition(_R_A0 struct pOS_RastPort*,_R_D0 SLONG x,_R_D1 SLONG y);
ULONG pOS_SetDrMd(_R_A0 struct pOS_RastPort*,_R_D0 ULONG mode);
VOID  pOS_DrawLine(_R_A0 struct pOS_RastPort*,_R_D0 SLONG x,_R_D1 SLONG y);
VOID  pOS_DrawRectFill(_R_A0 struct pOS_RastPort*,_R_D0 SLONG x1,_R_D1 SLONG y1,_R_D2 SLONG x2,_R_D3 SLONG y2);
ULONG pOS_SetAPen(_R_A0 struct pOS_RastPort*,_R_D0 ULONG pen);
ULONG pOS_SetAPenR(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_RColor*);
ULONG pOS_SetAPenR2(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_R2Color*);
ULONG pOS_SetBPen(_R_A0 struct pOS_RastPort*,_R_D0 ULONG pen);
ULONG pOS_SetBPenR(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_RColor*);
ULONG pOS_SetBPenR2(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_R2Color*);
ULONG pOS_SetOPen(_R_A0 struct pOS_RastPort*,_R_D0 ULONG pen);
ULONG pOS_SetOPenR(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_RColor*);
ULONG pOS_SetOPenR2(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_R2Color*);
BOOL  pOS_SetAreaFillPattern(_R_A0 struct pOS_RastPort*,_R_A1 const UWORD*,_R_D0 ULONG);
BOOL  pOS_SetLineFillPattern(_R_A0 struct pOS_RastPort*,_R_D0 ULONG,_R_D1 ULONG);
VOID  pOS_BltGfxMap(_R_A0 const struct pOS_GfxMap*,_R_D0 SLONG,_R_D1 SLONG,
                   _R_A1 struct pOS_GfxMap*,_R_D2 SLONG,_R_D3 SLONG,_R_D4 ULONG,_R_D5 ULONG,_R_D6 ULONG);
__ARID__ struct pOS_RastPort* pOS_AllocRastPortA(_R_A0 struct pOS_GfxLibrary*,_R_A1 const struct pOS_TagItem*);
VOID  pOS_FreeRastPort(_R_A0 __ARID__ struct pOS_RastPort*);
VOID  pOS_BltTemplate(_R_A0 const UBYTE*,_R_D0 ULONG,_R_D1 ULONG,
                     _R_A1 struct pOS_RastPort*,_R_D2 SLONG,_R_D3 SLONG,_R_D4 ULONG,_R_D5 ULONG);
VOID  pOS_ScrollRaster(_R_A0 struct pOS_RastPort*,_R_D0 SLONG,_R_D1 SLONG,_R_D2 SLONG,_R_D3 SLONG,
                       _R_D4 SLONG,_R_D5 SLONG,_R_D6 ULONG);
VOID  pOS_BltGfxMapRastPort(_R_A0 const struct pOS_GfxMap*,_R_D0 ULONG,_R_D1 ULONG,
                       _R_A1 struct pOS_RastPort*,_R_D2 SLONG,_R_D3 SLONG,_R_D4 ULONG,_R_D5 ULONG,_R_D6 ULONG);
VOID  pOS_BltGfxMapClip(_R_A0 const struct pOS_RastPort*,_R_D0 ULONG,_R_D1 ULONG,
                       _R_A1 struct pOS_RastPort*,_R_D2 SLONG,_R_D3 SLONG,_R_D4 ULONG,_R_D5 ULONG,_R_D6 ULONG);
VOID pOS_SetABPenDrMd(_R_A0 struct pOS_RastPort*,_R_D0 ULONG aPen,_R_D1 ULONG bPen,_R_D2 ULONG mode);
VOID pOS_PolyDraw(_R_A0 struct pOS_RastPort* rp,_R_A1 const struct pOS_WPoint*,_R_D0 ULONG cnt);
VOID pOS_PolyFill(_R_A0 struct pOS_RastPort* rp,_R_A1 const struct pOS_WPoint*,_R_D0 ULONG cnt,_R_D1 ULONG mode);
VOID pOS_SetPixelR(_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_GfxMap*,
                   _R_D0 SLONG x,_R_D1 SLONG y,_R_A2 const struct pOS_RColor*,_R_D2 ULONG);
VOID pOS_SetPixelR2(_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_GfxMap*,
                   _R_D0 SLONG x,_R_D1 SLONG y,_R_A2 const struct pOS_R2Color*,_R_D2 ULONG);
VOID pOS_SetPixel(_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_GfxMap*,
                  _R_D0 SLONG x,_R_D1 SLONG y,_R_D2 ULONG pix);
VOID pOS_GetPixelR(_R_A0 const struct pOS_RastPort*,
        _R_A1 const struct pOS_GfxMap*,_R_D0 SLONG x,_R_D1 SLONG y,_R_A2 struct pOS_RColor*,_R_D2 ULONG);
VOID pOS_GetPixelR2(_R_A0 const struct pOS_RastPort*,
        _R_A1 const struct pOS_GfxMap*,_R_D0 SLONG x,_R_D1 SLONG y,_R_A2 struct pOS_R2Color*,_R_D2 ULONG);
ULONG pOS_GetPixel(_R_A0 const struct pOS_RastPort*,_R_A1 const struct pOS_GfxMap*,_R_D0 SLONG x,_R_D1 SLONG y);
VOID  pOS_WritePixel(_R_A0 struct pOS_RastPort*,_R_D0 SLONG x,_R_D1 SLONG y);
VOID  pOS_EraseRect(_R_A0 struct pOS_RastPort*,_R_D0 SLONG x1,_R_D1 SLONG y1,_R_D2 SLONG x2,_R_D3 SLONG y2);
VOID pOS_BltMask(_R_A0 const struct pOS_BltData*,_R_A1 const struct pOS_GfxMap*,
                 _R_A2 struct pOS_RastPort*,_R_A3 struct pOS_GfxMap*,_R_A4 const struct pOS_GfxMap*,_R_D0 ULONG minterm);
VOID pOS_BltMaskRastPort(_R_A0 const struct pOS_BltData*,_R_A1 const struct pOS_GfxMap*,
                 _R_A2 struct pOS_RastPort*,_R_A3 const struct pOS_GfxMap*,_R_D0 ULONG minterm);
VOID pOS_DrawLineClip(_R_A0 struct pOS_RastPort*,_R_D0 SLONG x,_R_D1 SLONG y,_R_A1 const struct pOS_Rectangle*);
VOID pOS_DrawRectFillClip(_R_A0 struct pOS_RastPort*,_R_D0 SLONG x1,_R_D1 SLONG y1,
                  _R_D2 SLONG x2,_R_D3 SLONG y2,_R_A1 const struct pOS_Rectangle*);
VOID pOS_EraseRectClip(_R_A0 struct pOS_RastPort*,_R_D0 SLONG x1,_R_D1 SLONG y1,
                 _R_D2 SLONG x2,_R_D3 SLONG y2,_R_A1 const struct pOS_Rectangle*);
VOID pOS_PolyDrawClip(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_WPoint*,_R_D0 ULONG cnt,
                 _R_A2 const struct pOS_Rectangle* clipRect,_R_D1 SLONG offsetX,_R_D2 SLONG offsetY);


/*------ View --------------------------------------------------------*/
VOID pOS_ConstructView(_R_A0 struct pOS_View*);
VOID pOS_DestructView(_R_A0 struct pOS_View*);
VOID pOS_ConstructViewPort(_R_A0 struct pOS_ViewPort*);
VOID pOS_DestructViewPort(_R_A0 struct pOS_ViewPort*);
VOID pOS_DisplayView(_R_A0 struct pOS_View*,_R_A1 struct pOS_ViewPort*,_R_D0 ULONG flg);



/*------ Text --------------------------------------------------------*/
VOID pOS_AddFont(_R_A0 struct pOS_TextFont*);
VOID pOS_RemFont(_R_A0 struct pOS_TextFont*);
__ARID__ struct pOS_TextFont *pOS_OpenFont(_R_A0 const struct pOS_TextAttr*);
VOID pOS_CloseFont(_R_A0 __ARID__ struct pOS_TextFont*);
VOID pOS_DrawText(_R_A0 struct pOS_RastPort*,_R_A1 const CHAR*,_R_D0 ULONG cnt);
VOID pOS_SetFont(_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_TextFont*);
ULONG pOS_AskSoftFontStyle(_R_A0 struct pOS_RastPort*);
ULONG pOS_SetSoftFontStyle(_R_A0 struct pOS_RastPort*,_R_D0 ULONG,_R_D1 ULONG);
struct pOS_TextFont *pOS_FindBestSoftFont(_R_A0 const struct pOS_TextAttr*);
ULONG pOS_TextLength(_R_A0 const struct pOS_RastPort*,_R_A1 const CHAR*,_R_D0 ULONG);
VOID pOS_DrawTextWidth(_R_A0 struct pOS_RastPort*,_R_A1 const CHAR*,_R_D0 ULONG cnt,_R_D1 ULONG width);
VOID pOS_DrawTextRect(_R_A0 struct pOS_RastPort*,_R_A1 const CHAR*,_R_D0 ULONG cnt,_R_A2 const struct pOS_Rectangle*);
VOID pOS_CalcTextDim(_R_A0 const struct pOS_RastPort*,_R_A1 const CHAR*,_R_D0 ULONG cnt,_R_A2 struct pOS_TextDim*,_R_D1 ULONG mode);



/*------ MonDev -----------------------------------------------------*/
struct pOS_Process *pOS_InitMonIOReq(_R_A0 const struct pOS_MonDevice*,_R_A1 struct pOS_MonIOReq*);
VOID pOS_InitMonDevice(_R_A0 struct pOS_MonDevice*);
VOID pOS_AddMonDevice(_R_A0 struct pOS_MonDevice*);
VOID pOS_RemMonDevice(_R_A0 struct pOS_MonDevice*);
BOOL pOS_OpenMonDevice(_R_A0 struct pOS_MonDevPathInfo*);
VOID pOS_CloseMonDevice(_R_A0 struct pOS_MonDevPathInfo*);
BOOL pOS_GetNextMonDevice(_R_A0 struct pOS_MonDevPathInfo*);
struct pOS_MonDevice* pOS_GetMonDevice(_R_A0 const struct pOS_MonLock* cur,_R_A1 const dosname_t*);
struct pOS_MonDevice* pOS_GetMonDeviceName(_R_A0 const CHAR*,_R_D0 ULONG type);
struct pOS_MonMountDevice* pOS_GetMonMountName(_R_A0 const CHAR*);
struct pOS_MonDevice* pOS_CreateMonDevFromMount(_R_A0 const struct pOS_MonMountDevice*);


/*------ MonLock -----------------------------------------------------*/
__ARID__ struct pOS_MonLock* pOS_LockMonObject(_R_A0 const struct pOS_MonLock* currDir,
                             _R_A1 const dosname_t*,_R_D0 ULONG mode);
VOID pOS_UnlockMonObject(_R_A0 __ARID__ struct pOS_MonLock*);
__ARID__ struct pOS_MonLock* pOS_DupMonObjectLock(_R_A0 const struct pOS_MonLock*);
BOOL pOS_ExamineMonObject(_R_A0 const struct pOS_MonLock*,_R_A1 const struct pOS_MonFile*,_R_A2 struct pOS_MonInfoBlock*);
BOOL pOS_ExNextMonObject(_R_A0 const struct pOS_MonLock*,_R_A1 struct pOS_MonInfoBlock*);
VOID pOS_ConstructGfxLk(_R_A0 struct pOS_MonLock*,_R_A1 struct pOS_MonDevice*,_R_D0 ULONG);
VOID pOS_DestructGfxLk(_R_A0 struct pOS_MonLock*);


/*------ MonFile -----------------------------------------------------*/
__ARID__ struct pOS_MonFile* pOS_OpenMonFile(_R_A0 const struct pOS_MonLock* currDir,
                             _R_A1 const dosname_t*,_R_D0 ULONG mode);
VOID pOS_CloseMonFile(_R_A0 __ARID__ struct pOS_MonFile*);
VOID pOS_ConstructGfxFH(_R_A0 struct pOS_MonFile*,_R_A1 struct pOS_MonDevice*,_R_D0 ULONG);
VOID pOS_DestructGfxFH(_R_A0 struct pOS_MonFile*);
struct pOS_MonFile* pOS_DupMonFile(_R_A0 const struct pOS_MonFile*);
VOID pOS_SetGfxFHView(_R_A0 struct pOS_MonFile*,_R_A1 struct pOS_View*,_R_A2 struct pOS_ViewPort*);
BOOL pOS_DisplayMonFile(_R_A0 struct pOS_MonFile*,_R_D0 ULONG flg);


/*------ Util -----------------------------------------------------*/
VOID pOS_DrawBorderBox(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_DrawInfo*,
                       _R_D0 ULONG type,_R_A2 const struct pOS_Rectangle* rect);
VOID pOS_CalcBorderBox(_R_D0 ULONG type,_R_A0 struct pOS_Rectangle* rect);
VOID pOS_DrawBorderBoxClip(_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_DrawInfo*,
                       _R_D0 ULONG type,_R_A2 const struct pOS_Rectangle*,
                       _R_A3 const struct pOS_Rectangle* clipRect);




/*------ Mount -----------------------------------------------------*/
UWORD pOS_MountMonDevice(_R_A0 struct pOS_DosBase*,_R_A1 const CHAR* devName,
                         _R_A2 const dosname_t* fileName,_R_A3 const CHAR* args);





__ARID__ struct pOS_GfxMap* pOS_AllocGfxMap(_R_A0 struct pOS_GfxLibrary*,ULONG tag,...);
__ARID__ struct pOS_ColorMap* pOS_AllocColorMap(_R_A0 struct pOS_GfxLibrary*,ULONG tag,...);
ULONG pOS_SetRastPort(_R_A0 struct pOS_RastPort*,ULONG tag,...);
ULONG pOS_GetRastPort(_R_A0 struct pOS_RastPort*,ULONG tag,...);
__ARID__ struct pOS_RastPort* pOS_AllocRastPort(_R_A0 struct pOS_GfxLibrary*,ULONG tag,...);


#ifdef __cplusplus
}
#endif

#endif
