From 62c3a5e8fa6e91369233d7e32ef09acdf93674ea Mon Sep 17 00:00:00 2001 From: Kaleb Keithley Date: Fri, 14 Nov 2003 16:49:23 +0000 Subject: Initial revision --- xsetmode.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ xsetmode.man | 16 +++++++ 2 files changed, 156 insertions(+) create mode 100644 xsetmode.c create mode 100644 xsetmode.man 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. + * + * 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 +#include +#include +#include +#include +#include + +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 (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"); +#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 -- cgit v1.2.3