/*
**  $Filename: VisualArts.h $
**  $Includes, V2.2 $
**  $Date: 95/03/15$
**
**
**  (C) 1994 Danny Y. Wong  			
**  All Rights Reserved
**
**  DO NOT MODIFY
*/

#include <exec/types.h>
#include <exec/memory.h>
#include <exec/lists.h>
#include <exec/nodes.h>
#include <exec/ports.h>
#include <exec/devices.h>
#include <exec/io.h>
#include <exec/libraries.h>

#include <devices/console.h>
#include <devices/serial.h>
#include <devices/clipboard.h>

#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <intuition/gadgetclass.h>
#include <intuition/imageclass.h>
#include <intuition/classes.h>
#include <intuition/icclass.h>
#include <intuition/sghooks.h>

#include <graphics/displayinfo.h>
#include <graphics/gfxbase.h>
#include <graphics/gfxmacros.h>
#include <graphics/text.h>

#include <libraries/gadtools.h>
#include <libraries/dos.h>
#include <libraries/asl.h>
#include <libraries/dosextens.h>

#include <workbench/workbench.h>
#include <workbench/startup.h>

#include <clib/wb_protos.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/utility_protos.h>
#include <clib/alib_protos.h>
#include <clib/dos_protos.h>
#include <clib/asl_protos.h>

#include "string.h" 
#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"

#include "PopUpMenuClass.h" 

/* screemode flags */

#define ASLSM_INITIALAUTOSCROLL         1
#define ASLSM_INITIALINFOOPENED         2
#define ASLSM_DOWIDTH                   4
#define ASLSM_DOHEIGHT                  8
#define ASLSM_DODEPTH                   16
#define ASLSM_DOOVERSCANTYPE            32
#define ASLSM_DOAUTOSCROLL              64
#define ASLSM_SLEEPWINDOW               128

/* font requester flags */

#define ASLFO_SLEEPWINDOW               1
#define ASLFO_DOFRONTPEN                2
#define ASLFO_DOBACKPEN                 4
#define ASLFO_DOSTYLE                   8
#define ASLFO_DODRAWMODE                16
#define ASLFO_FOXEDWIDTHONLY            32

/* file requester flags */

#define ASLFR_DOSAVEMODE                1
#define ASLFR_DOMULTISELECT             2
#define ASLFR_DOPATTERNS                4
#define ASLFR_DRAWERSONLY               8
#define ASLFR_REJECTICONS               16
#define ASLFR_FILTERDRAWERS             32
#define ASLFR_SLEEPWINDOW               64


/* to adjust the GUI if the window title is other than topaz 8
*/
#define kWindowOffSetY  (Scr->Font->ta_YSize - 8)

/* context sensitive */

#define VA_Static       0x0001
#define VA_ExpandX      0x0002
#define VA_MoveX        0x0004
#define VA_ExpandY      0x0008
#define VA_MoveY        0x0010

/* defines for scroller window with super bitmap */

#define MAX_LEVEL          (0xFFFFL)
#define LAYERXOFFSET(win)  (win->RPort->Layer->Scroll_X)  
#define LAYERYOFFSET(win)  (win->RPort->Layer->Scroll_Y)  

/* clip board */
struct cbbuf {

        ULONG size;     /* size of memory allocation            */
        ULONG count;    /* number of characters after stripping */
        UBYTE *mem;     /* pointer to memory containing data    */
};

/* define for Image */

#ifndef IM
#define IM(o)	((struct Image *) o)
#endif

/* define for determining the max value */

#ifndef MAX
#define MAX(x,y) ((x) > (y) ? (x) : (y))
#endif

/* for new menus in V38  */

#ifndef WA_NewLookMenus
  #define WA_NewLookMenus         (WA_Dummy + 0x30)
#endif

#ifndef  GTMN_NewLookMenus
#define GTMN_NewLookMenus    GT_TagBase+67 /* ti_Data is boolean */
#endif

#ifndef WFLG_NEWLOOKMENUS
#define WFLG_NEWLOOKMENUS   0x00200000	/* window has NewLook menus	*/
#endif

/* macros for easy access to Gadget data */

#define GetString(gad)	        (((struct StringInfo *)gad->SpecialInfo)->Buffer)
#define GetUndoString(gad)	(((struct StringInfo *)gad->SpecialInfo)->UndoBuffer)
#define GetNumber(gad)	        (((struct StringInfo *)gad->SpecialInfo)->LongInt)

/* List node name.  Each node have the following */
  
struct NameNode
{
  struct Node nn_Node;  /* linked list node to previous or next node  */
  UBYTE nn_Data[255];   /* name of the node, this is the same as      */
                        /* nn_Node.ln_Name                            */
};

/* Visual Arts message object.  Every GADGETUP event, the object is
   sent to the attached function.  For Menus, the va_Gadget field is
   always NULL.
*/

struct VAobject {
  struct Window *va_Window;           /* window the object originated     */
  struct Gadget *va_Gadget;           /* the gadget that sent this object */
  struct IntuiMessage *va_IntuiMsg;   /* the IntuiMessage                 */
  ULONG va_Flags;                     /* user flags                       */
  APTR va_UserData;                   /* user data, function pointer etc..*/
};

/* Every AREXX command have the following */

struct rexxCommandList
{
  char *name;       /* name of the AREXX command, note its case sensitive */
  APTR userdata;    /* user data, in this case it's a function pointer    */ 
};

/* Structure for Multi-Processing windows.  This structure is a linked
   List for every window opened as Multi-Processing
*/

struct WindowNode
{
	struct Node nn_Node;            /* linked list to prev or next window */
	UBYTE nn_Data[80];              /* window name */
	struct Window *nn_Window;       /* window pointer */
	struct AppWindow *nn_AppWindow; /* AppWindow pointer if window is a AppWindow */
	struct MsgPort *nn_AppWindPort; /* AppWindow Port */
	short ID;                       /* WindowNode ID  */
	APTR UserData;                  /* window Handler for this window */
};
