summaryrefslogtreecommitdiff
path: root/hw/xfree86/os-support/sco/sco_mouse.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xfree86/os-support/sco/sco_mouse.c')
-rw-r--r--hw/xfree86/os-support/sco/sco_mouse.c175
1 files changed, 175 insertions, 0 deletions
diff --git a/hw/xfree86/os-support/sco/sco_mouse.c b/hw/xfree86/os-support/sco/sco_mouse.c
new file mode 100644
index 000000000..564852ae3
--- /dev/null
+++ b/hw/xfree86/os-support/sco/sco_mouse.c
@@ -0,0 +1,175 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/sco/sco_mouse.c,v 3.8 1996/12/23 06:50:50 dawes Exp $ */
+
+
+
+
+
+/* $Xorg: sco_mouse.c,v 1.3 2000/08/17 19:51:29 cpqbld Exp $ */
+
+/******************************************************************************/
+
+#define NEED_EVENTS
+#include "X.h"
+#include "Xproto.h"
+#include "inputstr.h"
+#include "scrnintstr.h"
+#include "compiler.h"
+
+#include "xf86.h"
+#include "xf86Procs.h"
+#include "xf86_OSlib.h"
+
+/******************************************************************************/
+#ifdef USE_OSMOUSE
+/******************************************************************************/
+
+#include <sys/event.h>
+#include <mouse.h>
+#include "xf86_Config.h"
+
+static dmask_t real_mask = (dmask_t) (D_REL | D_BUTTON);
+static int config_buttons = 0;
+
+extern int miPointerGetMotionEvents(DeviceIntPtr pPtr, xTimecoord *coords,
+ unsigned long start, unsigned long stop,
+ ScreenPtr pScreen);
+
+/******************************************************************************/
+/*
+ * Handle any XF86Config options for "OsMouse", How you treat errors
+ * is up to you, they may or may not be Fatal
+ */
+
+void
+xf86OsMouseOption(lt, lp)
+ int lt; /* type returned by gettoken */
+ pointer lp; /* The lexical return symbol */
+{
+ if (lt != NUMBER) {
+ ErrorF("%s: Invalid Argument to OsMouse, %s\n",
+ "xf86OsMouseOption", "Number of buttons expected");
+ return;
+ }
+ config_buttons = ((LexPtr)lp)->num;
+}
+
+/******************************************************************************/
+/*
+ * xf86OsMouseProc --
+ * Handle the initialization, etc. of a mouse
+ */
+
+int
+xf86OsMouseProc(pPointer, what)
+ DeviceIntPtr pPointer;
+ int what;
+{
+ unchar *map;
+ int i, err, buttons;
+ struct devinfo *dip;
+ dmask_t dmask;
+
+ switch (what) {
+ case DEVICE_INIT:
+
+ pPointer->public.on = FALSE;
+
+ if (ev_init() < 0)
+ ErrorF("ev_init: Failed to initialize event driver\n");
+
+ dmask = real_mask;
+ xf86Info.mouseDev->mseFd = ev_open(&dmask);
+ switch (xf86Info.mouseDev->mseFd) {
+ case -1: FatalError("ev_open: Error in Configuration files\n");
+ case -2: FatalError("ev_open: No mouse devices to attach\n");
+ case -3: FatalError("ev_open: Unable to open a found device\n");
+ case -4: FatalError("ev_open: unable to open an event queue\n");
+ default:
+ if (xf86Info.mouseDev->mseFd < 0)
+ FatalError("ev_open: Failed to open device, reason unkown\n");
+ break;
+ }
+ if (dmask != real_mask)
+ FatalError("Could not attach the mouse device (0x%x)\n", dmask);
+
+ dip = (struct devinfo *) NULL;
+ if ((dip = ev_getdev(D_REL, dip)) == (struct devinfo *) NULL)
+ FatalError("Could not find info on mouse device\n");
+
+ buttons = config_buttons > 0 ? config_buttons : ((int) dip->buttons);
+ buttons = buttons > 0 ? buttons : 3; /* just in case */
+
+ ErrorF("%s OsMouse has %d buttons\n",
+ buttons == config_buttons ? XCONFIG_GIVEN : XCONFIG_PROBED,
+ buttons);
+
+ map = (unchar *) xalloc(buttons + 1);
+ if (map == (unchar *) NULL)
+ FatalError("Failed to allocate OsMouse map structure\n");
+
+ for (i = 1; i <= buttons; i++)
+ map[i] = i;
+
+ InitPointerDeviceStruct((DevicePtr)pPointer,
+ map,
+ buttons,
+ miPointerGetMotionEvents,
+ (PtrCtrlProcPtr)xf86MseCtrl,
+ 0);
+ xfree(map);
+ ev_suspend(); /* suspend device until its turned on */
+ break;
+
+ case DEVICE_ON:
+ ev_resume();
+ AddEnabledDevice(xf86Info.mouseDev->mseFd);
+ xf86Info.mouseDev->lastButtons = 0;
+ xf86Info.mouseDev->emulateState = 0;
+ pPointer->public.on = TRUE;
+ break;
+
+ case DEVICE_CLOSE:
+ case DEVICE_OFF:
+ pPointer->public.on = FALSE;
+ RemoveEnabledDevice(xf86Info.mouseDev->mseFd);
+ if (what == DEVICE_CLOSE) {
+ ev_close();
+ xf86Info.mouseDev->mseFd = -1;
+ } else
+ ev_suspend();
+ break;
+ }
+
+ return Success;
+}
+
+/******************************************************************************/
+/*
+ * xf86OsMouseEvents --
+ * Get some events from our queue. Process all outstanding events now.
+ */
+
+void
+xf86OsMouseEvents()
+{
+ EVENT *evp;
+ static long time = -1;
+
+ while ((evp = ev_read()) != (EVENT *) NULL ) {
+#if DEBUG
+ if (time == -1)
+ time = EV_TIME(*evp);
+ ErrorF("sco_event time(%ld) tag(%d) butts(%d) x(%ld) y(%ld)\n",
+ EV_TIME(*evp) - time, EV_TAG(*evp), EV_BUTTONS(*evp),
+ EV_DX(*evp), EV_DY(*evp));
+#endif
+ xf86PostMseEvent(xf86Info.pMouse,EV_BUTTONS(*evp), EV_DX(*evp), -(EV_DY(*evp)));
+ ev_pop();
+ }
+
+ xf86Info.inputPending = TRUE;
+}
+
+/******************************************************************************/
+#endif /* USE_OSMOUSE */
+/******************************************************************************/