/* 
 *  @OPENGROUP_COPYRIGHT@
 *  COPYRIGHT NOTICE
 *  Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc.
 *  Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group
 *  ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for
 *  the full copyright text.
 *  
 *  This software is subject to an open license. It may only be
 *  used on, with or for operating systems which are themselves open
 *  source systems. You must contact The Open Group for a license
 *  allowing distribution and sublicensing of this software on, with,
 *  or for operating systems which are not Open Source programs.
 *  
 *  See http://www.opengroup.org/openmotif/license for full
 *  details of the license agreement. Any use, reproduction, or
 *  distribution of the program constitutes recipient's acceptance of
 *  this agreement.
 *  
 *  EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
 *  PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
 *  WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
 *  OR FITNESS FOR A PARTICULAR PURPOSE
 *  
 *  EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
 *  NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
 *  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 *  DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED
 *  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 *  ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
 *  EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
 *  POSSIBILITY OF SUCH DAMAGES.
*/ 
/* 
 * HISTORY
*/ 
/*   $XConsortium: xis_protos.h /main/7 1995/07/14 11:43:40 drk $ */
/***********************************************************************
  	@(#)xis_protos.h	1.4.1.1	Date:1/22/91
  	Author: SJS
	History:
            08/08/90 SJS prototypes moved to here.
	Calls:

	Summary:
************************************************************************/

/*  This file need to be included by xislib.h because of type definitions */

/******************************************************************************
                EVENT FUNCTIONS
******************************************************************************/

extern Time xisGetEventTime /* Gets time stamp from event record. Returns 0
                               if none */

    PARAMS(( XEvent         *event               /*  Ptr to X-event struct */
          ));

extern Time xisGetServerTime /* Get approx current server time. Delay
                                specified amount*/

    PARAMS(( Time            inter_button_time   /* Min delay time since     */
                                                 /* last button press.       */
          ));

extern void xisMovePointer /* Move pointer to new x,y location with
                              linear motion    */

    PARAMS(( int             new_x,              /* Destination root x coord */
             int             new_y               /* Distination root y coord */
          ));

extern void xisPrintEvent /* Print relavent trace details of the specified
                             event */

    PARAMS(( XEvent         *event               /* Ptr to X-event struct    */
          ));

extern int xisSynchronize   /* Process events until system reaches next quiet
                               state.  Returns True if processed at least one
                               event */
    PARAMS(( void ));

extern void xisProcessEvents /* Process events until done_func = true or
                                time-out */

    PARAMS(( int           (*done_func)(),       /* Func that returns True   */
                                                 /* when done procesing evnts*/

             int             max_wait_time       /* Max time-out time in     */
                                                 /* milliseconds.            */
          ));

extern void xisProcessObjects /* Regenerate objects hierarchy */
    PARAMS(( void ));

extern void xisSendEvent /* Sends 1 synthesized event to the specified window */

    PARAMS(( Window          window,             /* Event window             */
             Window          subwindow,          /* Child windw toward action*/
             int             type,               /* XEvent type              */
             Time            time,               /* X-Server time stamp      */
             int             wx,                 /* X-coord of pntr in window*/
             int             wy,                 /* Y-coord of pntr in window*/
             int             rx,                 /* X-coord of pntr in root  */
             int             ry,                 /* Y-coord of pntr in root  */
             unsigned int    state,              /* XServer modifier keys    */
             unsigned int    detail              /* Key,Button changed state */
          )); 


/******************************************************************************
                INFO FUNCTIONS
******************************************************************************/

extern XisObjectRecord *xisAllocObject /* Allocates one object record and
                                          returns a pointer to it*/

    PARAMS(( XisObjectRecord *parent_obj,        /* Parent of new object     */
             Widget          widget,             /* Widget id of new object  */
             int             object_code,        /* Object code (user defined*/
             int             instance            /* Instance code(userdefined*/
          ));


extern void xisBeginSession /* Opens and initializes dialog with input synth
                               tools */

    PARAMS(( Display        *display_in,         /* Display connected to      */
             XtAppContext    app_context_in,     /* Xt Application Context    */
             int             num_objects_types,  /* Num unique objects        */
             void          (*generate_objects_func)(),/*Func updates objects  */
             char         *(*get_obj_type_name_func)(),/*Returns obj type name*/
             char         *(*get_class_name_func)(),/*Returns widg class name */
             Widget        (window_to_widget_func)(),/*Returns widg from windo*/
             void          (*trace_msg_func)(),    /* Trace message function  */
             void          (*warning_msg_func)(),  /* Warning message function*/
             void          (*error_msg_func)()     /* Error message function  */
          ));


extern void xisFreeObject /* Frees the specified object record storage */

    PARAMS(( XisObjectRecord *object             /* Object to free           */
          ));


extern XisInformRecord *xisGetInformInfo /* Gets pointer to xisInform info
                                            struct */
    PARAMS(( void ));


extern XisObjectRecord *xisGetObjectFromWidget /* Gets top level object
                                                  pointer from widget id   */

    PARAMS(( Widget          widget              /* Widget to map to object  */
          ));


extern XisStateRecord *xisGetStateInfo /* Gets pointer to xisState info
                                          struct */
    PARAMS(( void ));


extern void xisUseSessionInfo /* Checks if xisInitDisplayInfo called
                                 previously */

    PARAMS(( char           *routine_name        /* Routine name called from */
          ));



/******************************************************************************
                OTHER FUNCTIONS
******************************************************************************/

extern long xisConcat /* Concatenates two object types together */

    PARAMS(( long             cum_object_type,   /* Cumulative obj type      */
             long             new_object_type    /* New obj to concat on cum */
          ));

extern void xisCreateSimple /* Creates a simple window which may be used as  */
                            /* a "dummy" focus                               */

    PARAMS(( void ));

extern XisObjectRecord *xisFindObject /* Looks up the object with matching
                                         widget,obj,instance */

    PARAMS(( Widget          widget,             /* Object widget id         */
             int             object_type,        /* Object object_code       */
             int             instance            /* Object instance code     */
          ));


extern XisObjectRecord *xisFindObjectAtLocation /* Looks up the topmost object
                                                   at location x,y */

    PARAMS(( int             x,                  /* X-coord rel to root      */
             int             y                   /* Y-coord rel to root      */
          ));


extern XisObjectRecord *xisFindObjectFromWidget /* Looks up object with
                                                   matching widget */

    PARAMS(( Widget          widget              /* Widget to match          */
          ));


extern XisObjectRecord *xisFindObjectFromWindow /* Looks up object with
                                                   matching window id */

    PARAMS(( Window          window              /* Window id to match       */
          ));


extern XisObjectRecord *xisFindParentObjectFromWindow /* Looks up parent obj
                                                         with matching window*/

    PARAMS(( Window          window              /* Window id to match       */
          ));


extern int xisGetEdgeCode /* Returns TopEdge, BottomEdge, LeftEdge, or
                             RightEdge */

    PARAMS(( XisObjectRecord *object,            /* object in question       */
             int              old_x,             /* X coord moved ptr from   */
             int              old_y,             /* Y coord moved ptr from   */
             int              new_x,             /* X coord moved ptr to     */
             int              new_y              /* Y coord moved ptr to     */
          ));


extern XisObjectRecord *xisGetFocusObject /* Returns object/widget that has the
                                             keyboard input focus */
    PARAMS(( void ));

extern Widget xisGetFocusWidget /* Returns widget that has the MOTIF
                                             keyboard input focus */
    PARAMS(( void ));

extern char *xisGetKeyName /* Returns a ptr to a string describing an xis key */

    PARAMS(( int              key                /* xis key code             */
          ));


extern char *xisGetObjectName /* Returns pointer to string name of object */

    PARAMS(( XisObjectRecord *object             /* Object whose name you want*/
          ));


extern void xisGetPointerInfo /* Returns pointer location information */

    PARAMS(( Window          *ptr_window,        /* Innermost window ptr is in*/
             int             *root_x,            /* X-coord rel to root window*/
             int             *root_y,            /* Y-coord rel to root window*/
             int             *window_x,          /* X-coord rel to ptr window */
             int             *window_y,          /* Y-coord rel to ptr window */
             unsigned int    *button_mask        /* Currently pressed buttons */
          ));


extern void xisGetPointerLocation /* Returns current pointer location in root
                                     window */

    PARAMS(( int             *root_x,            /* X-coord rel to root window*/
             int             *root_y             /* Y-coord rel to root window*/
          ));


extern Widget xisGetShellWidget /* Returns the topmost shell of the
                                   specified widget */

    PARAMS(( Widget           widget             /* Widget in question       */
          ));


extern char *xisGetWindowName /* Returns the name of the specified window */

    PARAMS(( Window          window              /* Window to get name of    */
          ));


extern int xisIsAncestorObject /* Returns True if 1st object is ancestor of
                                  2nd */

    PARAMS(( XisObjectRecord *object1,           /* 1st object struct ptr    */
             XisObjectRecord *object2            /* 2nd object struct ptr    */
          ));


extern int xisIsAncestorWindow /* Returns True if 1st window is ancestor of
                                  2nd */

    PARAMS(( Window           window1,           /* 1st window               */
             Window           window2            /* 2nd window               */
          ));


extern int xisIsMapped /* Returns True if window is mapped */

    PARAMS(( Window           window             /* Window in question       */
          ));


extern int xisIsViewable /* Returns True if window is viewable */

    PARAMS(( Window           window             /* Window in question       */
          ));


extern int xisIsWidgetMapped /* Returns True if widget is mapped */

    PARAMS(( Widget           widget             /* Widget in question       */
          ));


extern void xisInitRandom /* Initializes the pseudo random num generator
                             with seed */

    PARAMS(( int              seed               /* Seed, any integer value  */
          ));


extern int xisArbitrary /* Returns arbitrary num between inclusive values
                           range */

    PARAMS(( int              lo,                /* Low inclusive number    */
             int              hi                 /* High inclusive number   */
          ));


extern void xisSetMultiClickTime /* Sets xis global min inter-click time
                                    interval */
  
    PARAMS(( Time             time               /* Time in milliseconds    */
          ));


extern int xisTerminateRequested /* Returns true if Ctrl-C pressed */
    PARAMS(( void ));


extern void xisUngrabMouseButton /* Ungrabs the mouse button */
    PARAMS(( void ));


extern int xisWindowExists /* Returns True if window exists */

    PARAMS(( Window           window             /* Window in question */
          ));
    


/******************************************************************************
                PRIMITIVE BEHAVIOR FUNCTIONS
******************************************************************************/

extern void xisCommonButtonPress /* Central button press synthesis routine */

    PARAMS(( unsigned int     modifier_keys,     /* ShiftMask,ControlMask,etc*/
             int              button_num,        /* Mouse button num 1 - 5   */
             int              clicks             /* Num button multi clicks  */
          ));


extern void xisCMovePointer /* Common Move pointer code for both routines
                               above */

    PARAMS(( XisObjectRecord *current_obj,       /* Current object           */
             int             curr_x,             /* Curr pointer root x coord*/
             int             curr_y,             /* Curr pointer root y coord */
             int             target_x,           /* Destination root x coord */
             int             target_y            /* Destination root y coord */
          ));


extern void xisClickMouseButton /* Press-hold-release mouse button */

    PARAMS(( unsigned int     modifier_keys,     /* ShiftMask,ControlMask,etc*/
             int              button_num         /* Mouse button num 1 - 5   */
          ));


extern void xisClickKey /* Press-hold-release mouse button */

    PARAMS(( unsigned int     modifier_keys,     /* ShiftMask,ControlMask,etc*/
             int              key                /* Xis key code             */
          ));


extern void xisCreateWidget /* Process InformExpectedActions on widget
                               creation */

    PARAMS(( Widget           widget             /* Widget id of new widget */
          ));


extern void xisDestroyWidget /* Process InformExpectedActions on widget
                                destruction */

    PARAMS(( Widget           widget             /* Widget id of new widget */
          ));


extern int xisIsActionRegion /* Returns true is specified region is where
                                event occur*/

    PARAMS(( int              object_type        /* Object type code        */
          ));


extern int xisIsActiveMouseButton /* Returns true is specified button_num is
                                     active */

    PARAMS(( unsigned int     modifier_keys,     /* ShiftMask,ControlMask,etc*/
    	     int              button_num         /* Button number 1- 5      */
          ));

extern int xisIsActiveKey        /* Returns true is specified key is active */

    PARAMS(( unsigned int     modifier_keys,     /* ShiftMask,ControlMask,etc*/
    	     int              key_code         /* Key is Space,Return...  */
          ));

extern int xisIsKeyboardFocusRegion /* Returns True if region is in keyboard
                                       focus */

    PARAMS(( int              object_type        /* Object type code        */
          ));


extern int xisIsPointerOverRegion /* Returns True if pointer over region */

    PARAMS(( int              object_type        /* Object type code        */
          ));


extern int xisIsPointerOverWidget /* Returns True if pointer is over curr
                                     widget */

    PARAMS(( int              bool               /* False = negative logic   */
          ));


extern int xisIsSelectedRegion /* Returns True if specified region is selected*/

    PARAMS(( int              object_type_in     /* Object type code         */
          ));


extern int xisIsWidgetInKeyboardFocus /* Returns True if widget is in keyboard
                                         focus */

    PARAMS(( int              bool               /* False = negative logic    */
          ));


extern int xisIsWidgetSelected /* Returns True if curr widget is selected */

    PARAMS(( int              bool               /* False = negative logic    */
          ));

extern int xisIsMouseButtonDown /* Returns True if given button | mod keys are
                                   down */

    PARAMS(( unsigned int     modifier_keys,     /* ShiftMask,ControlMask,etc*/
    	     int              button_num         /* Btn1,2,3.. */
          ));


extern void xisMultiClickMouseButton /* Synthesizes a multiclick mouse button
                                        event  */

    PARAMS(( unsigned int     modifier_keys,     /* ShiftMask,ControlMask,etc*/
             int              button_num,        /* Mouse button num 1-5     */
             int              num_clicks         /* Num clicks               */
          ));


extern void xisMovePointerRel /* Move pointer to new x,y location with linear
                                 motion */

    PARAMS(( int             new_x,              /* Destination root x coord */
             int             new_y               /* Distination root y coord */
          ));


extern void xisMovePointerTo /* Move pointer over specified widget, object,
                                instance */

    PARAMS(( Widget           widget,            /* Specified widget         */
             int              object_code,       /* Specified object         */
             int              instance,          /* Specified instance       */
             int              direction          /* MoveUp, MoveDown, etc    */
          ));


extern void xisPressMouseButton /* Synthesize a mouse button press event */

    PARAMS(( unsigned int     modifier_keys,     /* ShiftMask,ControlMask,etc*/
             int              button_num         /* Mouse button num 1 - 5   */
          ));


extern void xisProcessObjects   /* Regenerate the graphical objects data
                                   structure */
    PARAMS(( void ));


extern void xisReleaseMouseButton /* Synthesize a mouse button release event */

    PARAMS(( unsigned int     modifier_keys,     /* ShiftMask,ControlMask,etc*/
             int              button_num         /* Mouse button num 1 - 5   */
          ));


extern void xisRestorePointer /* Puts pointer back to location saved by
                                 xisSavePointer*/
    PARAMS(( void ));


extern void xisSavePointer /* Saves pointer location for restoring
                              w/xisRestorePointer*/
    PARAMS(( void ));


extern void xisSetKeyboardFocus /* Sets keyboard focus to specified widget */

    PARAMS(( Widget           widget,            /* Widget to set focus to   */
             int              object_type,       /* Object type              */
             int              instance           /* Instance of object       */
          ));


extern void xisSetKeyboardFocusObject /* Saves global keyboard focus setting */

    PARAMS(( Widget           widget,            /* Widget to set focus to   */
             int              object_type,       /* Object type              */
             int              instance           /* Instance of object       */
          ));


extern void xisSetFocusMode /* Sets keyboard focus mode to natural or
                               controlled */

    PARAMS(( int              mode               /* KEYBOARD_FOCUS_NATURAL,..*/
          ));

extern int xisGetDragDistance /* Get drag distance and widnow id */

    PARAMS(( Widget	      *pwin, 		 /* Returned widget id */
	     int	      *pdel_x, 		 /* Returned delta x */
	     int	      *pdel_y		 /* Returned delta y */
	  ));


/* End of xis_protos.h   Add new definitions ABOVE THIS LINE */
