summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaleb Keithley <kaleb@freedesktop.org>2003-11-14 16:49:23 +0000
committerKaleb Keithley <kaleb@freedesktop.org>2003-11-14 16:49:23 +0000
commit62c3a5e8fa6e91369233d7e32ef09acdf93674ea (patch)
tree3528b71c44b3ee95fea91a85176ee1942c4fcd08
Initial revisionXORG-STABLE
-rw-r--r--xsetmode.c140
-rw-r--r--xsetmode.man16
2 files changed, 156 insertions, 0 deletions
diff --git a/xsetmode.c b/xsetmode.c
new file mode 100644
index 0000000..f4eb85b
--- /dev/null
+++ b/xsetmode.c
@@ -0,0 +1,140 @@
+/* $XFree86: xc/programs/xsetmode/xsetmode.c,v 3.5 2001/04/01 14:00:23 tsi Exp $ */
+
+/*
+ * Copyright 1995 by Frederic Lepied, France. <fred@sugix.frmug.fr.net>
+ *
+ * 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.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <X11/Xproto.h>
+#include <X11/extensions/XInput.h>
+
+int event_type;
+
+static int StrCaseCmp(char *s1, char *s2)
+{
+ char c1, c2;
+
+ if (*s1 == 0) {
+ if (*s2 == 0)
+ return(0);
+ else
+ return(1);
+ }
+ c1 = (isupper(*s1) ? tolower(*s1) : *s1);
+ c2 = (isupper(*s2) ? tolower(*s2) : *s2);
+ while (c1 == c2)
+ {
+ if (c1 == '\0')
+ return(0);
+ s1++; s2++;
+ c1 = (isupper(*s1) ? tolower(*s1) : *s1);
+ c2 = (isupper(*s2) ? tolower(*s2) : *s2);
+ }
+ return(c1 - c2);
+}
+
+int
+main(int argc, char * argv[])
+{
+ int loop, num_extensions, num_devices;
+ char **extensions;
+ XDeviceInfo *devices;
+ Display *dpy;
+ Window root_win;
+ unsigned long screen;
+ int list = 0;
+
+ if (argc != 3) {
+ fprintf(stderr, "usage : %s <device name> (ABSOLUTE|RELATIVE)\n", argv[0]);
+ exit(1);
+ }
+
+ if (strcmp(argv[1], "-l") == 0) {
+ list = 1;
+ }
+
+ dpy = XOpenDisplay(NULL);
+
+ if (!dpy) {
+ printf("unable to connect to X Server try to set the DISPLAY variable\n");
+ exit(1);
+ }
+
+#ifdef DEBUG
+ printf("connected to %s\n", XDisplayString(dpy));
+#endif
+
+ screen = DefaultScreen(dpy);
+ root_win = RootWindow(dpy, screen);
+
+ extensions = XListExtensions(dpy, &num_extensions);
+ for (loop = 0; loop < num_extensions &&
+ (strcmp(extensions[loop], "XInputExtension") != 0); loop++);
+ XFreeExtensionList(extensions);
+ if (loop != num_extensions)
+ {
+ devices = XListInputDevices(dpy, &num_devices);
+ for(loop=0; loop<num_devices; loop++)
+ {
+ if (devices[loop].name &&
+ (StrCaseCmp(devices[loop].name, argv[1]) == 0))
+ if (devices[loop].use == IsXExtensionDevice)
+ {
+ XDevice *device;
+
+#ifdef DEBUG
+ fprintf(stderr, "opening device %s\n",
+ devices[loop].name ? devices[loop].name : "<noname>");
+#endif
+ device = XOpenDevice(dpy, devices[loop].id);
+ if (device)
+ {
+ XSetDeviceMode(dpy, device, (strcmp("ABSOLUTE", argv[2]) == 0) ? Absolute
+ : Relative);
+ exit(0);
+ }
+ else
+ {
+ fprintf(stderr, "error opening device\n");
+ exit(1);
+ }
+ }
+ }
+ XFreeDeviceList(devices);
+ }
+ else
+ {
+ fprintf(stderr, "No XInput extension available\n");
+ exit(1);
+ }
+
+ if (list) {
+ exit(0);
+ }
+ else {
+ fprintf(stderr, "Extended device %s not found\n", argv[1]);
+ exit(1);
+ }
+}
diff --git a/xsetmode.man b/xsetmode.man
new file mode 100644
index 0000000..22e52c7
--- /dev/null
+++ b/xsetmode.man
@@ -0,0 +1,16 @@
+.\" $XFree86: xc/programs/xsetmode/xsetmode.man,v 3.2 2001/01/27 18:21:23 dawes Exp $
+.\"
+.TH xsetmode 1 __vendorversion__
+.SH NAME
+xsetmode \- set the mode for an X Input device
+.SH SYNOPSIS
+.B xsetmode
+.I device-name
+.B ABSOLUTE
+|
+.B RELATIVE
+.SH DESCRIPTION
+Xsetmode sets the mode of an XInput device to either absolute or relative.
+This isn't appropriate for all device types.
+.SH AUTHOR
+Frederic Lepied