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

 $AUT Holger Burkarth
 $DAT >>MonForm.h<<   12 Sep 1996    10:46:44 - (C) ProDAD
*******************************************************************/
#ifndef __INC_POS_PEXEC_TYPES_H
#include <pExec/Types.h>
#endif


/*----------------------------------
-----------------------------------*/
struct pOS_MonForm
{
  UWORD                  mf_Command;  /* (enum pOS_MonFormCommands) */
  struct pOS_MonDevice  *mf_Dev;
  struct pOS_GfxLibrary *mf_Lib;
  APTR                   mf_Reply;
  ULONG                  mf_Length;

  UBYTE mf_Reserved1[12];

  union {
    UBYTE mf_Reserved2[64];

    struct { /* MFRMCM_DrawLine */
      struct pOS_RastPort   *mfdl_RastPort;
      struct pOS_GfxMap     *mfdl_GfxMap;
      SLONG                  mfdl_X1,mfdl_Y1,mfdl_X2,mfdl_Y2;
    } mf_DrawLine;

    struct { /* MFRMCM_AllocGfx */
      APTR                 mfag_Data;
      struct pOS_GfxMap   *mfag_ResGfxMap;
    } mf_AllocGfx;

    struct { /* MFRMCM_FreeGfx */
      struct pOS_GfxMap   *mffg_GfxMap;
    } mf_FreeGfx;

    struct {  /*** MFRMCM_OpenFH ***/
      const struct pOS_MonLock       *mfop_CurrLock;
      const CHAR                     *mfop_Name;
            UWORD                     mfop_Mode;
            UBYTE mrop_d[2];
            struct pOS_MonFile       *mfop_ResFH;
    } mf_OpenFH;

    struct {  /*** MFRMCM_CloseFH ***/
            struct pOS_MonFile    *mfcl_FH;
    } mf_CloseFH;


    struct { /* MFRMCM_AllocCM */
      APTR                 mfac_Data;
      struct pOS_ColorMap *mfac_ResColorMap;
    } mf_AllocCM;

    struct { /* MFRMCM_FreeCM */
      struct pOS_ColorMap *mffc_ColorMap;
    } mf_FreeCM;

    struct { /* MFRMCM_AllocRP */
      APTR                 mfar_Data;
      struct pOS_RastPort *mfar_ResRastPort;
    } mf_AllocRP;

    struct { /* MFRMCM_FreeRP */
      struct pOS_RastPort *mffr_RastPort;
    } mf_FreeRP;

    struct { /* MFRMCM_SetRP */
      APTR         mfsr_Data;
      ULONG        mfsr_Cnt;
    } mf_SetRP;

    struct { /* MFRMCM_DrawRectFill */
      struct pOS_RastPort   *mfdr_RastPort;
      struct pOS_GfxMap     *mfdr_GfxMap;
      SLONG                  mfdr_X1,mfdr_Y1,mfdr_X2,mfdr_Y2;
    } mf_DrawRectFill;

    struct { /* MFRMCM_SetAPen, MFRMCM_SetBPen, MFRMCM_SetOPen */
      struct pOS_RastPort   *mfsp_RastPort;
      ULONG                  mfsp_Pen;
    } mf_SetPen;

    struct { /* MFRMCM_SetDrMd */
      struct pOS_RastPort   *mfsd_RastPort;
      ULONG                  mfsd_Mode;
    } mf_SetDrMd;

    struct { /* MFRMCM_SetFont */
      struct pOS_RastPort   *mfsf_RastPort;
      APTR                   mfsf_Data;
    } mf_SetFont;

    struct { /* MFRMCM_BltTemplate */
      struct pOS_RastPort   *mfbt_RastPort;
      const UBYTE           *mfbt_Scr;
      ULONG                  mfbt_OfX, mfbt_Modulo;
      struct pOS_GfxMap     *mfbt_GfxMap;
      SLONG                  mfbt_DestX, mfbt_DestY, mfbt_Width, mfbt_Height;
      ULONG                  mfbt_ScrLength;
    } mf_BltTemplate;


  } mf_U;

};



enum pOS_MonFormCommands
{
  MFRMCM_DrawLine = 0x81, /** pre 0x80 are handlers own commands **/
  MFRMCM_AllocGfx,
  MFRMCM_FreeGfx,
  MFRMCM_OpenFH,
  MFRMCM_CloseFH,
  MFRMCM_AllocCM,
  MFRMCM_FreeCM,
  MFRMCM_AllocRP,
  MFRMCM_FreeRP,
  MFRMCM_SetRP,
  MFRMCM_DrawRectFill,
  MFRMCM_SetAPen,
  MFRMCM_SetBPen,
  MFRMCM_SetOPen,
  MFRMCM_SetDrMd,
  MFRMCM_SetFont,
  MFRMCM_BltTemplate,


  MFRMCM_Reply = 0x8000
};


#endif
