189 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
/* $XFree86: xc/programs/Xserver/XTrap/xtrapddmi.c,v 1.1 2001/11/02 23:29:29 dawes Exp $ */
 | 
						||
/*****************************************************************************
 | 
						||
Copyright 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corp., Maynard, MA
 | 
						||
 | 
						||
Permission to use, copy, modify, and distribute this software and its 
 | 
						||
documentation for any purpose and without fee is hereby granted, 
 | 
						||
provided that the above copyright notice appear in all copies and that
 | 
						||
both that copyright notice and this permission notice appear in 
 | 
						||
supporting documentation, and that the name of Digital not be
 | 
						||
used in advertising or publicity pertaining to distribution of the
 | 
						||
software without specific, written prior permission.  
 | 
						||
 | 
						||
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
 | 
						||
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
 | 
						||
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
 | 
						||
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 | 
						||
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
 | 
						||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 | 
						||
SOFTWARE.
 | 
						||
 | 
						||
*****************************************************************************/
 | 
						||
/*
 | 
						||
 *  ABSTRACT:
 | 
						||
 *
 | 
						||
 *      This module is the platform-specific but conditionally independent
 | 
						||
 *      code for the XTrap extension (usually I/O or platform setup).
 | 
						||
 *      This is shared code and is subject to change only by team approval.
 | 
						||
 *
 | 
						||
 *  CONTRIBUTORS:
 | 
						||
 *
 | 
						||
 *      Dick Annicchiarico
 | 
						||
 *      Robert Chesler
 | 
						||
 *      Gene Durso
 | 
						||
 *      Marc Evans
 | 
						||
 *      Alan Jamison
 | 
						||
 *      Mark Henry
 | 
						||
 *      Ken Miller
 | 
						||
 *
 | 
						||
 */
 | 
						||
 | 
						||
#ifdef HAVE_DIX_CONFIG_H
 | 
						||
#include <dix-config.h>
 | 
						||
#endif
 | 
						||
 | 
						||
#ifndef EXTMODULE
 | 
						||
#include <errno.h>
 | 
						||
#include <X11/Xos.h>
 | 
						||
#ifdef PC
 | 
						||
# include "fcntl.h"
 | 
						||
# include "io.h"
 | 
						||
# define O_NDELAY 0L
 | 
						||
#endif
 | 
						||
#else
 | 
						||
#include "xf86_ansic.h"
 | 
						||
#endif
 | 
						||
 | 
						||
#define NEED_REPLIES
 | 
						||
#define NEED_EVENTS
 | 
						||
#include <X11/X.h>        /* From library include environment */
 | 
						||
#include "input.h"    /* From server include env. (must be before Xlib.h!) */
 | 
						||
#ifdef PC
 | 
						||
# include "scrintst.h"          /* Screen struct */
 | 
						||
# include "extnsist.h"
 | 
						||
#else
 | 
						||
# include "extnsionst.h"        /* Server ExtensionEntry definitions */
 | 
						||
# include "scrnintstr.h"        /* Screen struct */
 | 
						||
#endif
 | 
						||
 | 
						||
#include <X11/extensions/xtrapdi.h>
 | 
						||
#include <X11/extensions/xtrapddmi.h>
 | 
						||
#include <X11/extensions/xtrapproto.h>
 | 
						||
 | 
						||
extern int XETrapErrorBase;
 | 
						||
extern xXTrapGetAvailReply XETrap_avail;
 | 
						||
extern DevicePtr XETrapKbdDev;
 | 
						||
extern DevicePtr XETrapPtrDev;
 | 
						||
 | 
						||
/*
 | 
						||
 *  DESCRIPTION:
 | 
						||
 *
 | 
						||
 *      This function performs the platform specific setup for server
 | 
						||
 *      extension implementations.
 | 
						||
 */
 | 
						||
void XETrapPlatformSetup()
 | 
						||
{
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
#if !defined _XINPUT
 | 
						||
/*
 | 
						||
 *  DESCRIPTION:
 | 
						||
 *
 | 
						||
 *  This routine processes the simulation of some input event.
 | 
						||
 *
 | 
						||
 */
 | 
						||
int XETrapSimulateXEvent(register xXTrapInputReq *request,
 | 
						||
    register ClientPtr client)
 | 
						||
{
 | 
						||
    ScreenPtr pScr = NULL;
 | 
						||
    int status = Success;
 | 
						||
    xEvent xev;
 | 
						||
    register int x = request->input.x;
 | 
						||
    register int y = request->input.y;
 | 
						||
    DevicePtr keydev = LookupKeyboardDevice();
 | 
						||
    DevicePtr ptrdev = LookupPointerDevice();
 | 
						||
 | 
						||
    if (request->input.screen < screenInfo.numScreens)
 | 
						||
    {
 | 
						||
        pScr = screenInfo.screens[request->input.screen];
 | 
						||
    }
 | 
						||
    else
 | 
						||
    {   /* Trying to play bogus events to this WS! */
 | 
						||
#ifdef VERBOSE
 | 
						||
        ErrorF("%s:  Trying to send events to screen %d!\n", XTrapExtName,
 | 
						||
            request->input.screen);
 | 
						||
#endif
 | 
						||
        status = XETrapErrorBase + BadScreen;
 | 
						||
    }
 | 
						||
    /* Fill in the event structure with the information
 | 
						||
     * Note:  root, event, child, eventX, eventY, state, and sameScreen
 | 
						||
     *        are all updated by FixUpEventFromWindow() when the events
 | 
						||
     *        are delivered via DeliverDeviceEvents() or whatever.  XTrap
 | 
						||
     *        needs to only concern itself with type, detail, time, rootX, 
 | 
						||
     *        and rootY.
 | 
						||
     */
 | 
						||
    if (status == Success)
 | 
						||
    {
 | 
						||
        xev.u.u.type   = request->input.type;
 | 
						||
        xev.u.u.detail = request->input.detail;
 | 
						||
        xev.u.keyButtonPointer.time   = GetTimeInMillis();
 | 
						||
        xev.u.keyButtonPointer.rootX = x;
 | 
						||
        xev.u.keyButtonPointer.rootY = y;
 | 
						||
 | 
						||
        if (request->input.type == MotionNotify)
 | 
						||
        {   /* Set new cursor position on screen */
 | 
						||
            XETrap_avail.data.cur_x = x;
 | 
						||
            XETrap_avail.data.cur_y = y;
 | 
						||
          NewCurrentScreen (pScr, x, y); /* fix from amnonc@mercury.co.il */
 | 
						||
            if (!(*pScr->SetCursorPosition)(pScr, x, y, xFalse))
 | 
						||
            {
 | 
						||
                status = BadImplementation;
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
    if (status == Success)
 | 
						||
    {
 | 
						||
        switch(request->input.type)
 | 
						||
        {   /* Now process the event appropriately */
 | 
						||
            case KeyPress:
 | 
						||
            case KeyRelease:
 | 
						||
                (*XETrapKbdDev->realInputProc)(&xev,(DeviceIntPtr)keydev, 1L);
 | 
						||
                break;
 | 
						||
            case MotionNotify:
 | 
						||
            case ButtonPress:
 | 
						||
            case ButtonRelease:
 | 
						||
                (*XETrapPtrDev->realInputProc)(&xev,(DeviceIntPtr)ptrdev, 1L);
 | 
						||
                break;
 | 
						||
            default:
 | 
						||
                status = BadValue;
 | 
						||
                break;
 | 
						||
        }
 | 
						||
    }
 | 
						||
    return(status);
 | 
						||
}
 | 
						||
#endif /* _XINPUT */
 | 
						||
 | 
						||
#if defined vms && !defined LINKED_IN
 | 
						||
/* Used by swapping code not visible from VMS (from main.c) */
 | 
						||
#ifndef BLADE
 | 
						||
void
 | 
						||
NotImplemented()
 | 
						||
{
 | 
						||
    FatalError("Not implemented");
 | 
						||
}
 | 
						||
#endif
 | 
						||
 | 
						||
int
 | 
						||
#ifdef __STDC__
 | 
						||
ProcBadRequest( ClientPtr client)
 | 
						||
#else
 | 
						||
ProcBadRequest(client)
 | 
						||
    ClientPtr client;
 | 
						||
#endif
 | 
						||
{
 | 
						||
    return (BadRequest);
 | 
						||
}
 | 
						||
 | 
						||
#endif /* vms && ! LINKED_IN */
 |