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

 $AUT Holger Burkarth
 $DAT >>GfxMLib.h<<   04 Mar 1997    09:57:00 - (C) ProDAD
*******************************************************************/
#ifndef __INC_POS_PGFX_GFXMAP_H
#include <pGFX/GfxMap.h>
#endif
#ifndef __INC_POS_PGFX_COLOR_H
#include <pGFX/Color.h>
#endif
#ifndef __INC_POS_PEXEC_LIBRARY_H
#include <pExec/Library.h>
#endif

struct pOS_Rectangle;

/*----------------------------------
-----------------------------------*/
struct pOS_GfxLibrary
{
  struct pOS_Library    gl_Lib;
  struct pOS_MonDevice *gl_Dev;
};



/*----------------------------------
 Rückwärtsgerichtete Struktur.
-----------------------------------*/
struct pOS_StdGfxMFunction
{
  VOID (*WaitBlit_func)(_R_LB struct pOS_GfxLibrary*);
  UBYTE _d71[8];
  VOID (*WriteStdGfxMapRastPort_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_GfxMap*,_R_D0 SLONG,_R_D1 SLONG,
                      _R_A1 struct pOS_RastPort*,_R_D2 SLONG,_R_D3 SLONG,_R_D4 ULONG,_R_D5 ULONG,_R_D6 ULONG); /* *** darf NULL sein */
  UBYTE _d70[8];

/** 70 **/
  VOID (*WriteStdGfxMap_func)(_R_LB struct pOS_GfxLibrary*,_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,_R_A2 const struct pOS_Point*);  /* *** darf NULL sein */
  UBYTE _d69[8];
  BOOL (*InitTCGfxMap_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_GfxMap*,_R_A1 struct pOS_ColorMap*); /* *** darf NULL sein */
  UBYTE _d68[8];
  VOID (*SetColor_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_ColorMap*,_R_D0 ULONG,_R_A2 const struct pOS_RColor*,_R_D1 ULONG);
  UBYTE _d67[8];
  VOID (*GetColor_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_ColorMap*,_R_D0 ULONG,_R_A2 struct pOS_RColor*,_R_D1 ULONG);
  UBYTE _d66[8];
  VOID  (*WritePixel_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_GfxMap*,_R_D0 SLONG,_R_D1 SLONG);
  UBYTE _d65[8];
  VOID  (*ClipWritePixel_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 SLONG,_R_A1 SLONG);           /* *** darf NULL sein */
  UBYTE _d64[8];
  BOOL  (*SetRastPortItem_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 ULONG tag,_R_D1 ULONG data); /* *** darf NULL sein */
  UBYTE _d63[8];
  BOOL  (*GetRastPortItem_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 ULONG tag,_R_A1 ULONG* data); /* *** darf NULL sein */
  UBYTE _d62[8];
  ULONG  (*GetPixel_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_RastPort*,_R_A1 const struct pOS_GfxMap*,_R_D0 ULONG,_R_D1 ULONG);
  UBYTE _d61[8];
  VOID  (*GetPixelR2_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_RastPort*,_R_A1 const struct pOS_GfxMap*,_R_D0 ULONG,_R_D1 ULONG,_R_A2 struct pOS_R2Color*,_R_D2 ULONG);
  UBYTE _d60[8];

/** 60 **/
  VOID  (*GetPixelR_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_RastPort*,_R_A1 const struct pOS_GfxMap*,_R_D0 ULONG,_R_D1 ULONG,_R_A2 struct pOS_RColor*,_R_D2 ULONG);
  UBYTE _d59[8];
  VOID  (*SetPixel_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_GfxMap*,_R_D0 ULONG,_R_D1 ULONG,_R_D2 ULONG);
  UBYTE _d58[8];
  VOID  (*SetPixelR2_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_GfxMap*,_R_D0 ULONG,_R_D1 ULONG,_R_A1 const struct pOS_R2Color*,_R_D2 ULONG);
  UBYTE _d57[8];
  VOID  (*SetPixelR_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_GfxMap*,_R_D0 ULONG,_R_D1 ULONG,_R_A1 const struct pOS_RColor*,_R_D2 ULONG);
  UBYTE _d56[8];
  VOID (*BltMask_func)(_R_LB struct pOS_GfxLibrary*,_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);
  UBYTE _d55[8];
  VOID (*ClipBltMask_func)(_R_LB struct pOS_GfxLibrary*,_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);           /* *** darf NULL sein */
  UBYTE _d54[8];
  VOID (*FillMask_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_GfxMap*,_R_D0 ULONG,_R_D1 ULONG,_R_D2 ULONG,_R_D3 ULONG,_R_D4 ULONG); /* *** darf NULL sein */
  UBYTE _d53[8];
  VOID (*PolyFill_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_WPoint*,_R_D0 ULONG,_R_D1 ULONG); /* *** darf NULL sein */
  UBYTE _d52[8];
  VOID (*PolyDraw_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_WPoint*,_R_D0 ULONG,
                        _R_A2 const pOS_Rectangle*,_R_D1 SLONG offsetX,_R_D2 SLONG offsetY); /* *** darf NULL sein */
  UBYTE _d51[8];
  VOID (*SetABPenDrMd_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 ULONG,_R_D1 ULONG,_R_D2 ULONG); /* *** darf NULL sein */
  UBYTE _d50[8];

/** 50 **/
  VOID (*MonAbt_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_MonDevice*,_R_A1 struct pOS_MonIOReq*);  /* *** darf NULL sein */
  UBYTE _d49[8];
  VOID (*MonStd_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_MonDevice*,_R_A1 struct pOS_MonIOReq*);  /* *** darf NULL sein */
  UBYTE _d48[8];
  ULONG (*SetRastPort_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_TagItem*); /* *** darf NULL sein */
  UBYTE _d47[8];
  ULONG (*GetRastPort_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_TagItem*); /* *** darf NULL sein */
  UBYTE _d46[8];
  BOOL  (*Form_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_MonForm*); /* *** darf NULL sein */
  UBYTE _d45[8];
  BOOL  (*SetAreaFillPattern_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const UWORD*,_R_D0 ULONG log2N);
  UBYTE _d44[8];
  BOOL  (*SetLineFillPattern_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 ULONG,_R_D1 ULONG shift);
  UBYTE _d43[8];
  ULONG (*SetOPenR2_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_R2Color*);
  UBYTE _d42[8];
  ULONG (*SetOPenR1_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_RColor*);
  UBYTE _d41[8];
  ULONG (*SetOPen_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 ULONG);
  UBYTE _d40[8];

/** 40 **/
  VOID  (*ClearAreaB_func)(_R_LB struct pOS_GfxLibrary*,struct pOS_RastPort*,_R_A0 struct pOS_GfxMap*,_R_D0 SLONG,_R_D1 SLONG,_R_D2 SLONG,_R_D3 SLONG);
  UBYTE _d39[8];
  VOID (*BltGfxMapClip_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_RastPort*,_R_D0 ULONG,_R_D1 ULONG, /* *** darf NULL sein */
                       _R_A1 struct pOS_RastPort*,_R_D2 SLONG,_R_D3 SLONG,_R_D4 ULONG,_R_D5 ULONG,_R_D6 ULONG);
  UBYTE _d38[8];
  VOID (*BltGfxMapRastPort_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_GfxMap*,_R_D0 ULONG,_R_D1 ULONG,  /* *** darf NULL sein */
                             _R_A1 struct pOS_RastPort*,_R_D2 SLONG,_R_D3 SLONG,_R_D4 ULONG,_R_D5 ULONG,_R_D6 ULONG);
  UBYTE _d37[8];
  VOID  (*FreeGMem_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 APTR,_R_D0 size_t);
  UBYTE _d36[8];
  APTR  (*AllocGMem_func)(_R_LB struct pOS_GfxLibrary*,_R_D0 size_t,_R_D1 ULONG);
  UBYTE _d35[8];
  VOID  (*DeleteSoftFont_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_TextFont*); /* *** darf NULL sein */
  UBYTE _d34[8];
  ULONG (*AskSoftFontStyle_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*); /* *** darf NULL sein */
  UBYTE _d33[8];
  ULONG (*SetSoftFontStyle_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 ULONG,_R_D1 ULONG); /* *** darf NULL sein */
  UBYTE _d32[8];
  ULONG (*SetBPenR2_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_R2Color*);
  UBYTE _d31[8];
  ULONG (*SetBPenR1_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_RColor*);
  UBYTE _d30[8];

/** 30 **/
  ULONG (*SetBPen_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 ULONG);
  UBYTE _d29[8];
  VOID  (*ClearArea_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_GfxMap*,_R_D0 SLONG,_R_D1 SLONG,_R_D2 SLONG,_R_D3 SLONG);
  UBYTE _d26[8];
  VOID  (*ClipScrollArea_func)(_R_LB struct pOS_GfxLibrary*,_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);  /* *** darf NULL sein */
  UBYTE _d24[8];
  VOID (*BltTemplate_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const UBYTE*,_R_D0 ULONG ofX,_R_D1 ULONG mod,
                           _R_A1 struct pOS_RastPort*,_R_A2 struct pOS_GfxMap*,_R_D2 SLONG,_R_D3 SLONG,_R_D4 ULONG,_R_D5 ULONG);
  UBYTE _d23[8];

  VOID (*ClipBltTemplate_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const UBYTE*,_R_D0 ULONG ofX,_R_D1 ULONG mod,_R_A1 struct pOS_RastPort*,
                           _R_D2 SLONG,_R_D3 SLONG,_R_D4 ULONG,_R_D5 ULONG);  /* *** darf NULL sein */
  UBYTE _d22[8];

  VOID  (*DrawText_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const CHAR*,_R_D0 ULONG cnt,
                         _R_D1 ULONG width,_R_A2 const struct pOS_Rectangle*);  /* *** darf NULL sein */
  UBYTE _d21[8];
  VOID  (*SetFont_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_TextFont*);  /* *** darf NULL sein */
  UBYTE _d20[8];

/** 20 **/
  VOID  (*BltGfxMap_func)(_R_LB struct pOS_GfxLibrary*,_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 SLONG,_R_D6 ULONG);
  UBYTE _d19[8];
  ULONG (*SetAPen_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 ULONG);
  UBYTE _d18[8];
  ULONG (*SetDrMd_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 ULONG);
  UBYTE _d17[8];
  BOOL  (*CloneRastPort_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_RastPort*,_R_A1 struct pOS_RastPort*);
  UBYTE _d16[8];
  VOID  (*DeleteRastPort_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 __ARID__ struct pOS_RastPort*);
  UBYTE _d15[8];
  __ARID__ struct pOS_RastPort* (*CreateRastPort_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_TagItem*);
  UBYTE _d14[8];
  ULONG (*SetAPenR2_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_R2Color*);
  UBYTE _d13[8];
  ULONG (*SetAPenR1_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 const struct pOS_RColor*);
  UBYTE _d12[8];
  VOID  (*DrawRectFill_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_GfxMap*,_R_D0 SLONG,
                             _R_D1 SLONG,_R_D2 SLONG,_R_D3 SLONG);
  UBYTE _d11[8];
  VOID  (*ClipDrawRectFill_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 SLONG,_R_D1 SLONG,
                             _R_D2 SLONG,_R_D3 SLONG,_R_A1 const pOS_Rectangle*);  /* *** darf NULL sein */
  UBYTE _d10[8];

/** 10 **/
  VOID  (*DrawLine_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_A1 struct pOS_GfxMap*,
                             _R_D0 SLONG,_R_D1 SLONG,_R_D2 SLONG,_R_D3 SLONG,_R_A1 const pOS_Rectangle* orginal);  /* orginal==0 ist erlaubt => nicht geclippt */
  UBYTE _d9[8];
  VOID  (*ClipDrawLine_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 struct pOS_RastPort*,_R_D0 SLONG,_R_D1 SLONG,_R_A1 const pOS_Rectangle*);  /* *** darf NULL sein */
  UBYTE _d8[8];
  VOID  (*FreeColorMap_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 __ARID__ struct pOS_ColorMap*);
  UBYTE _d7[8];
  __ARID__ struct pOS_ColorMap* (*AllocColorMap_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_TagItem*); /* enum pOS_GfxTags */
  UBYTE _d6[8];
  VOID  (*FreeGfxMap_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 __ARID__ struct pOS_GfxMap*);
  UBYTE _d5[8];
  __ARID__ struct pOS_GfxMap* (*AllocGfxMap_func)(_R_LB struct pOS_GfxLibrary*,_R_A0 const struct pOS_TagItem*); /* enum pOS_GfxTags */
  UBYTE _d4[8];

  struct pOS_LibraryFunction Reserved1[8];

  struct pOS_SegmentLst* (*Expunge_func)(_R_LB struct pOS_GfxLibrary*);
  UBYTE _d3[8];
  VOID  (*Close_func)(_R_LB struct pOS_GfxLibrary*);
  UBYTE _d2[8];
  BOOL  (*Open_func)(_R_LB struct pOS_GfxLibrary*);
  UBYTE _d1[8];
}; /* => GfxMBase */



struct pOS_StdGfxMFunction* _pOS_GetGfxLibraryFunction(struct pOS_GfxLibrary*);

#define _pOS_GetGfxLibraryFunction(lib) \
 ( (struct pOS_StdGfxMFunction*)((ULONG)(lib) - sizeof(struct pOS_StdGfxMFunction)) )


#endif
