summaryrefslogtreecommitdiff
path: root/src/void.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/void.c')
-rw-r--r--src/void.c288
1 files changed, 288 insertions, 0 deletions
diff --git a/src/void.c b/src/void.c
new file mode 100644
index 0000000..15cc38b
--- /dev/null
+++ b/src/void.c
@@ -0,0 +1,288 @@
+/*
+ * Copyright 1999 by Frederic Lepied, France. <Lepied@XFree86.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, 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 Frederic Lepied not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Frederic Lepied makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * FREDERIC LEPIED DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL FREDERIC LEPIED 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.
+ *
+ */
+
+/* $XFree86: xc/programs/Xserver/hw/xfree86/input/void/void.c,v 1.2 2000/08/11 19:10:48 dawes Exp $ */
+
+/* Input device which doesn't output any event. This device can be used
+ * as a core pointer or as a core keyboard.
+ */
+#ifndef XFree86LOADER
+#include <unistd.h>
+#include <errno.h>
+#endif
+
+#include <misc.h>
+#include <xf86.h>
+#define NEED_XF86_TYPES
+#if !defined(DGUX)
+#include <xf86_ansic.h>
+#include <xisb.h>
+#endif
+#include <xf86_OSproc.h>
+#include <xf86Xinput.h>
+#include <exevents.h> /* Needed for InitValuator/Proximity stuff */
+#include <keysym.h>
+#include <mipointer.h>
+
+#ifdef XFree86LOADER
+#include <xf86Module.h>
+#endif
+
+#define MAXBUTTONS 3
+
+/******************************************************************************
+ * Function/Macro keys variables
+ *****************************************************************************/
+static KeySym void_map[] =
+{
+ NoSymbol, /* 0x00 */
+ NoSymbol, /* 0x01 */
+ NoSymbol, /* 0x02 */
+ NoSymbol, /* 0x03 */
+ NoSymbol, /* 0x04 */
+ NoSymbol, /* 0x05 */
+ NoSymbol, /* 0x06 */
+ NoSymbol /* 0x07 */
+};
+
+/* minKeyCode = 8 because this is the min legal key code */
+static KeySymsRec void_keysyms = {
+ /* map minKeyCode maxKC width */
+ void_map, 8, 8, 1
+};
+
+static const char *DEFAULTS[] = {
+ NULL
+};
+
+/*
+ * xf86VoidControlProc --
+ *
+ * called to change the state of a device.
+ */
+static int
+xf86VoidControlProc(DeviceIntPtr device, int what)
+{
+ InputInfoPtr pInfo;
+ unsigned char map[MAXBUTTONS + 1];
+ int i;
+
+ pInfo = device->public.devicePrivate;
+
+ switch (what)
+ {
+ case DEVICE_INIT:
+ device->public.on = FALSE;
+
+ for (i = 0; i < MAXBUTTONS; i++) {
+ map[i + 1] = i + 1;
+ }
+
+ if (InitButtonClassDeviceStruct(device,
+ MAXBUTTONS,
+ map) == FALSE) {
+ ErrorF("unable to allocate Button class device\n");
+ return !Success;
+ }
+
+ if (InitFocusClassDeviceStruct(device) == FALSE) {
+ ErrorF("unable to init Focus class device\n");
+ return !Success;
+ }
+
+ if (InitKeyClassDeviceStruct(device, &void_keysyms, NULL) == FALSE) {
+ ErrorF("unable to init key class device\n");
+ return !Success;
+ }
+
+ if (InitValuatorClassDeviceStruct(device,
+ 2,
+ xf86GetMotionEvents,
+ 0,
+ Absolute) == FALSE) {
+ InitValuatorAxisStruct(device,
+ 0,
+ 0, /* min val */1, /* max val */
+ 1, /* resolution */
+ 0, /* min_res */
+ 1); /* max_res */
+ InitValuatorAxisStruct(device,
+ 1,
+ 0, /* min val */1, /* max val */
+ 1, /* resolution */
+ 0, /* min_res */
+ 1); /* max_res */
+ ErrorF("unable to allocate Valuator class device\n");
+ return !Success;
+ }
+ else {
+ /* allocate the motion history buffer if needed */
+ xf86MotionHistoryAllocate(pInfo);
+ }
+ break;
+
+ case DEVICE_ON:
+ device->public.on = TRUE;
+ break;
+
+ case DEVICE_OFF:
+ case DEVICE_CLOSE:
+ device->public.on = FALSE;
+ break;
+ }
+ return Success;
+}
+
+/*
+ * xf86VoidUninit --
+ *
+ * called when the driver is unloaded.
+ */
+static void
+xf86VoidUninit(InputDriverPtr drv,
+ InputInfoPtr pInfo,
+ int flags)
+{
+ xf86VoidControlProc(pInfo->dev, DEVICE_OFF);
+}
+
+/*
+ * xf86VoidInit --
+ *
+ * called when the module subsection is found in XF86Config
+ */
+static InputInfoPtr
+xf86VoidInit(InputDriverPtr drv,
+ IDevPtr dev,
+ int flags)
+{
+ InputInfoPtr pInfo;
+
+ if (!(pInfo = xf86AllocateInput(drv, 0)))
+ return NULL;
+
+ /* Initialise the InputInfoRec. */
+ pInfo->name = dev->identifier;
+ pInfo->type_name = "Void";
+ pInfo->flags = XI86_KEYBOARD_CAPABLE | XI86_POINTER_CAPABLE | XI86_SEND_DRAG_EVENTS;
+ pInfo->device_control = xf86VoidControlProc;
+ pInfo->read_input = NULL;
+ pInfo->motion_history_proc = xf86GetMotionEvents;
+ pInfo->history_size = 0;
+ pInfo->control_proc = NULL;
+ pInfo->close_proc = NULL;
+ pInfo->switch_mode = NULL;
+ pInfo->conversion_proc = NULL;
+ pInfo->reverse_conversion_proc = NULL;
+ pInfo->fd = -1;
+ pInfo->dev = NULL;
+ pInfo->private_flags = 0;
+ pInfo->always_core_feedback = 0;
+ pInfo->conf_idev = dev;
+
+ /* Collect the options, and process the common options. */
+ xf86CollectInputOptions(pInfo, DEFAULTS, NULL);
+ xf86ProcessCommonOptions(pInfo, pInfo->options);
+
+ /* Mark the device configured */
+ pInfo->flags |= XI86_CONFIGURED;
+
+ /* Return the configured device */
+ return (pInfo);
+}
+
+#ifdef XFree86LOADER
+static
+#endif
+InputDriverRec VOID = {
+ 1, /* driver version */
+ "void", /* driver name */
+ NULL, /* identify */
+ xf86VoidInit, /* pre-init */
+ xf86VoidUninit, /* un-init */
+ NULL, /* module */
+ 0 /* ref count */
+};
+
+/*
+ ***************************************************************************
+ *
+ * Dynamic loading functions
+ *
+ ***************************************************************************
+ */
+#ifdef XFree86LOADER
+/*
+ * xf86VoidUnplug --
+ *
+ * called when the module subsection is found in XF86Config
+ */
+static void
+xf86VoidUnplug(pointer p)
+{
+}
+
+/*
+ * xf86VoidPlug --
+ *
+ * called when the module subsection is found in XF86Config
+ */
+static pointer
+xf86VoidPlug(pointer module,
+ pointer options,
+ int *errmaj,
+ int *errmin)
+{
+ xf86AddInputDriver(&VOID, module, 0);
+
+ return module;
+}
+
+static XF86ModuleVersionInfo xf86VoidVersionRec =
+{
+ "void",
+ MODULEVENDORSTRING,
+ MODINFOSTRING1,
+ MODINFOSTRING2,
+ XF86_VERSION_CURRENT,
+ 1, 0, 0,
+ ABI_CLASS_XINPUT,
+ ABI_XINPUT_VERSION,
+ MOD_CLASS_XINPUT,
+ {0, 0, 0, 0} /* signature, to be patched into the file by */
+ /* a tool */
+};
+
+XF86ModuleData voidModuleData = {&xf86VoidVersionRec,
+ xf86VoidPlug,
+ xf86VoidUnplug};
+
+#endif /* XFree86LOADER */
+
+/*
+ * Local variables:
+ * change-log-default-name: "~/xinput.log"
+ * c-file-style: "bsd"
+ * End:
+ */
+/* end of void.c */