#ifndef INTUITION_INTUITION_H
#define INTUITION_INTUITION_H TRUE

struct RastPort
{
    APTR Layer;
    APTR BitMap;
    APTR AreaPtrn;	     /* ptr to areafill pattern */
    APTR TmpRas;
    APTR AreaInfo;
    APTR GelsInfo;
    UBYTE   Mask;	      /* write mask for this raster */
    BYTE    FgPen;	      /* foreground pen for this raster */
    BYTE    BgPen;	      /* background pen  */
    BYTE    AOlPen;	      /* areafill outline pen */
    BYTE    DrawMode;	      /* drawing mode for fill, lines, and text */
    BYTE    AreaPtSz;	      /* 2^n words for areafill pattern */
    BYTE    linpatcnt;	      /* current line drawing pattern preshift */
    BYTE    dummy;
    UWORD  Flags;	     /* miscellaneous control bits */
    UWORD  LinePtrn;	     /* 16 bits for textured lines */
    WORD   cp_x, cp_y;	     /* current pen position */
    UBYTE   minterms[8];
    WORD   PenWidth;
    WORD   PenHeight;
    APTR Font;   /* current font address */
    UBYTE   AlgoStyle;	      /* the algorithmically generated style */
    UBYTE   TxFlags;	      /* text specific flags */
    UWORD   TxHeight;	      /* text height */
    UWORD   TxWidth;	      /* text nominal width */
    UWORD   TxBaseline;       /* text baseline */
    WORD    TxSpacing;	      /* text spacing (per character) */
    APTR    *RP_User;
    ULONG   longreserved[2];
#ifndef GFX_RASTPORT_1_2
    UWORD   wordreserved[7];  /* used to be a node */
    UBYTE   reserved[8];      /* for future use */
#endif
};



/* --- IDCMP Classes ------------------------------------------------------ */
/* Please refer to the Autodoc for OpenWindow() and to the Rom Kernel
 * Manual for full details on the IDCMP classes.
 */
#define IDCMP_CLOSEWINDOW 0x00000200

#define WBENCHSCREEN	0x0001	/* identifies the Workbench screen	*/



struct Window
{
	 APTR NextWindow;

    WORD LeftEdge, TopEdge;  /* screen dimensions of window */
    WORD Width, Height;   /* screen dimensions of window */

    WORD MouseY, MouseX;  /* relative to upper-left of window */

    WORD MinWidth, MinHeight;  /* minimum sizes */
    UWORD MaxWidth, MaxHeight;  /* maximum sizes */

    ULONG Flags;   /* see below for defines */

	 APTR MenuStrip;

    UBYTE *Title;   /* the title text for this window */

	 APTR FirstRequester;

	 APTR DMRequest;

    WORD ReqCount;   /* count of reqs blocking Window */

	 APTR WScreen;
	 APTR RPort;

    BYTE BorderLeft, BorderTop, BorderRight, BorderBottom;
	 APTR BorderPRort;

	 APTR FirstGadget;

    /* these are for opening/closing the windows */
	 APTR Prarent, Descendant;

    /* sprite data information for your own Pointer
     * set these AFTER you Open the Window by calling SetPointer()
     */
    UWORD *Pointer; /* sprite data */
    BYTE PtrHeight; /* sprite height (not including sprite padding) */
    BYTE PtrWidth; /* sprite width (must be less than or equal to 16) */
    BYTE XOffset, YOffset; /* sprite offsets */

    /* the IDCMP Flags and User's and Intuition's Message Ports */
    ULONG IDCMPFlags; /* User-selected flags */

    struct MsgPort *UserPort;
	 APTR WindowPort;
	 APTR MessageKey;

    UBYTE DetailPen, BlockPen; /* for bar/border/gadget rendering */

	 APTR CeckMark;

    UBYTE *ScreenTitle; /* if non-null, Screen title when Window is active */

    WORD GZZMouseX;
    WORD GZZMouseY;
    /* these variables contain the width and height of the inner-Window of
     * WFLG_GIMMEZEROZERO Windows
     */
    WORD GZZWidth;
    WORD GZZHeight;

    UBYTE *ExtData;

    BYTE *UserData; /* general-purpose pointer to User data extension */

    /** 11/18/85: this pointer keeps a duplicate of what
     * Window.RPort->Layer is _supposed_ to be pointing at
     */
	 APTR WLayer;

    /* NEW 1.2: need to keep track of the font that
     * OpenWindow opened, in case user SetFont's into RastPort
     */
	 APTR IFont;

    /* (V36) another flag word (the Flags field is used up).
     * At present, all flag values are system private.
     * Until further notice, you may not change nor use this field.
     */
    ULONG MoreFlags;

    /**** Data beyond this point are Intuition Private.  DO NOT USE ****/
};


/* --- Flags requested at OpenWindow() time by the application --------- */
#define WFLG_SIZEGADGET     0x00000001 /* include sizing system-gadget? */
#define WFLG_DRAGBAR     0x00000002 /* include dragging system-gadget? */
#define WFLG_DEPTHGADGET    0x00000004 /* include depth arrangement gadget? */
#define WFLG_CLOSEGADGET    0x00000008 /* include close-box system-gadget? */

#define WFLG_GIMMEZEROZERO  0x00000400 /* a GimmeZeroZero window */

#define WFLG_ACTIVATE     0x00001000 /* when Window opens, it's Active */



struct NewWindow
{
    WORD LeftEdge, TopEdge;  /* screen dimensions of window */
    WORD Width, Height;   /* screen dimensions of window */

    UBYTE DetailPen, BlockPen;  /* for bar/border/gadget rendering */

    ULONG IDCMPFlags;   /* User-selected IDCMP flags */

    ULONG Flags;   /* see Window struct for defines */

	 APTR FirstGadget; 

	 APTR CheckMark;

    UBYTE *Title;     /* the title text for this window */

	 APTR Screen;

	 APTR BitMap;

    WORD MinWidth, MinHeight;     /* minimums */
    UWORD MaxWidth, MaxHeight;      /* maximums */

    UWORD Type;

};

#endif

