
/*
 *  DMOUSE.H
 */


#include <exec/types.h>
#include <devices/inputevent.h>
#include <devices/input.h>
#include <exec/lists.h>
#include <exec/memory.h>
#include <graphics/gfx.h>
#include <graphics/layers.h>
#include <graphics/gfxbase.h>
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <intuition/screens.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>

#define DMS struct _DMS
#define REQ struct _REQ

#define PORTNAME    "DMouse"

#define REQ_SCREENON	-1
#define REQ_SCREENOFF	-2
#define REQ_MOUSEON	-3
#define REQ_MOUSEOFF	-4
#define REQ_DOCMD	-5
#define REQ_RAWMOUSE	-6
#define REQ_RAWKEY	-7
#define REQ_DEBUG	-8
#define REQ_DEBUGOFF	-9

#define SBF_C	SIGBREAKF_CTRL_C
#define SBF_D	SIGBREAKF_CTRL_D
#define SBF_E	SIGBREAKF_CTRL_E
#define SBF_F	SIGBREAKF_CTRL_F

typedef unsigned char	ubyte;
typedef unsigned short	uword;
typedef unsigned long	ulong;

typedef struct Library	LIB;
typedef struct Node	NODE;
typedef struct List	LIST;
typedef struct MsgPort	PORT;
typedef struct Window	WIN;
typedef struct Screen	SCR;
typedef struct NewScreen NS;
typedef struct NewWindow NW;
typedef struct Task	TASK;
typedef struct Process	PROC;
typedef struct Message	MSG;
typedef struct InputEvent IE;
typedef struct Layer	LAYER;
typedef struct copinit	COPINIT;

typedef struct IntuitionBase IBASE;
typedef struct GfxBase GFXBASE;

typedef struct IOStdReq     IOR;
typedef struct Interrupt    INT;
typedef struct timeval	    TS;
typedef void		    (*FPTR)();


DMS {
    PORT    Port;
    short   Version;
    short   Acc;
    short   AThresh;
    long    STo;
    long    MTo;
    uword   Code;
    uword   Qual;
    uword   RQual;	    /*	Right button qualifier	*/
    uword   LQual;	    /*	Left button qualifier	*/
    char    Cmd[256];
    char    LMBEnable;
    char    AAEnable;
    char    IPri;
    char    FSEnable;	    /*	Foreign Screen Enable	*/
    char    Workbench;	    /*	Use WindowToFront/Back	*/
    char    Debug;	    /*	Debug Mode		*/
    char    FBEnable;	    /*	front/back enable on windows that */
			    /*	don't have front/back gadgets     */
    TASK    *HandTask;
    TASK    *ShakeTask;
    short   ShakeSig;
    short   StartupError;
    uword   *NoSprData;
    long    Segment;

    uword   Clicks;	/*  # clicks required		*/
    uword   CLeft;	/*  # clicks left to do 	*/
    TS	    CTime;	/*  time of last click		*/
    WIN     *CWin;	/*  All clicks in same window	*/
    char    Reset;	/*  Option modified, reset tos	*/

    char    *MRemote;	/*  Remote mouse blanker (obsolete) */
    char    *SRemote;	/*  Remote screen blanker(obsolete) */
    long    DLock[2];	/*  synchronizing lock	 (obsolete) */
};

REQ {
    MSG     Msg;
    TS	    ie_TimeStamp;
    ubyte   ie_Class;
    uword   ie_Code;
    uword   ie_Qualifier;
    uword   rq_X;
    uword   rq_Y;
};


extern void *AllocMem();
extern void *GetMsg();
extern void *FindTask();
extern void *CreateStdIO();
extern void *CreatePort();
extern void *OpenScreen();
extern void *WhichLayer();

