/*
*****************************************************************************
**                                                                          *
**                         COPYRIGHT (c) 1988 BY                            *
**             DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.                *
**	MASSACHUSSETTS INSTITUTE OF TECHNOLOGY, CAMBRIDGE, MASS.	    *
**                         ALL RIGHTS RESERVED                              *
**                                                                          *
**  THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED  *
**  ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE  *
**  INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER  *
**  COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY  *
**  OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY  *
**  TRANSFERRED.                                                            *
**                                                                          *
**  THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE  *
**  AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT  *
**  CORPORATION OR MIT.                                                     *
**                                                                          *
**  DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS  *
**  SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.                 *
**                                                                          *
*****************************************************************************
**++
**  FACILITY:
**
**      < to be supplied >
**
**  ABSTRACT:
**
**      < to be supplied >
**
**  ENVIRONMENT:
**
**      < to be supplied >
**
**  MODIFICATION HISTORY:
**
**      < to be supplied >
**
**--
**/

#ifndef _Event_h_
#define _Event_h_

#include <X++/Intrinsic.h>

/****************************************************************
 *
 * Event Management
 *
 ****************************************************************/

typedef void (*XtEventHandler)(Widget, caddr_t, XEvent*);

typedef void (*XtAsyncHandler)(Opaque);

typedef unsigned long EventMask;
#define XtAllEvents ((EventMask) -1L)

extern void XtAddEventHandler(Widget, EventMask, Boolean, XtEventHandler, caddr_t);

extern void XtRemoveEventHandler(Widget, EventMask, Boolean, XtEventHandler, caddr_t);

extern void XtAddRawEventHandler(Widget, EventMask, Boolean, XtEventHandler, caddr_t);

extern void XtRemoveRawEventHandler(Widget, EventMask, Boolean, XtEventHandler, caddr_t);

extern EventMask XtBuildEventMask(Widget);

extern void XtAddGrab(Widget, Boolean, Boolean);

extern void XtRemoveGrab(Widget);

extern void XtDispatchEvent(XEvent *);

extern void XtProcessEvent();
    /* XtInputMask mask; */

typedef unsigned long	XtInputMask;

extern void XtAppProcessEvent(XtAppContext, XtInputMask);

extern void XtMainLoop();

extern void XtAppMainLoop(XtAppContext);

extern void XtAddExposureToRegion(XEvent*, Region);

extern void XtSetAsyncEventHandler(); /* handler, closure */
    /* XtAsyncHandler handler; */
    /* Opaque	closure; */

extern void XtMakeToolkitAsync();

/****************************************************************
 *
 * Event Gathering Routines
 *
 ****************************************************************/

#define XtInputNoneMask		0L
#define XtInputReadMask		(1L<<0)
#define XtInputWriteMask	(1L<<1)
#define XtInputExceptMask	(1L<<2)

typedef void (*XtTimerCallbackProc) (caddr_t /*Opaque*/, XtIntervalId*);

extern XtIntervalId XtAddTimeOut(
    unsigned long,
    XtTimerCallbackProc,
    Opaque);

extern XtIntervalId XtAppAddTimeOut(
    XtAppContext,
    unsigned long,
    XtTimerCallbackProc,
    Opaque);

extern void XtRemoveTimeOut(XtIntervalId);

typedef void (* XtInputCallbackProc)(Opaque, int*, XtInputId*);

extern XtInputId XtAddInput(); /* source, condition, proc, closure */
    /* int source;		*/
    /* Opaque condition;        */
    /* XtInputCallbackProc proc;*/
    /* Opaque closure;          */

extern XtInputId XtAppAddInput(
    XtAppContext,
    int,
    Opaque,
    XtInputCallbackProc,
    Opaque);

extern void XtRemoveInput(XtInputId);

extern void XtNextEvent(); /* event */
    /* XtEvent *event;		*/

extern void XtAppNextEvent(XtAppContext, XEvent*);

extern Boolean XtPeekEvent(); /* event */
    /* XtEvent *event;		*/

extern Boolean XtAppPeekEvent(XtAppContext, XEvent*);

#define XtIMXEvent		1
#define XtIMTimer		2
#define XtIMAlternateInput	4
#define XtIMAll (XtIMXEvent | XtIMTimer | XtIMAlternateInput)

extern XtInputMask XtPending ();

extern XtInputMask XtAppPending(XtAppContext);

#endif
/* don't add anything after the endif */
