--- wacom-tools-0.8.1.6.orig/debian/wacom-tools.postinst +++ wacom-tools-0.8.1.6/debian/wacom-tools.postinst @@ -0,0 +1,37 @@ +#!/bin/sh + +set -e + +# Clean up the 'old style' udev rules if they are found. +# Being conffiles, they are not removed on upgrade, even if they don't exist +# in the new package anymore. If they are not removed, new udev gets upset. +OLD_BOGUS_RULES=/etc/udev/rules.d/10-wacom.rules +OLD_BOGUS_HOTPLUG=/etc/hotplug.d/input/wacom.hotplug + +if echo "08000ec2b722c3bd0259fee26efa9c2b /etc/udev/rules.d/10-wacom.rules" \ + | md5sum -c --status > /dev/null 2>&1; +then + rm -f $OLD_BOGUS_RULES +elif [ -e $OLD_BOGUS_RULES ]; then + echo "WARNING: $OLD_BOGUS_RULES is obsolete" + echo " but has been locally modified." + echo " You should move any changes you wish to keep to the file:" + echo " /etc/udev/xserver-xorg-input-wacom.rules, then remove it." +fi + +if echo "e8ae0d6cf8a777339ebad5b6196ca769 /etc/hotplug.d/input/wacom.hotplug" \ + | md5sum -c --status > /dev/null 2>&1; +then + rm -f $OLD_BOGUS_HOTPLUG + ( cd /etc && rmdir -p --ignore-fail-on-non-empty hotplug.d/input ) +elif [ -e $OLD_BOGUS_HOTPLUG ]; then + echo "WARNING: $OLD_BOGUS_HOTPLUG is obsolete" + echo " but has been locally modified. You should remove this file now." +fi + + +#DEBHELPER# + +exit 0 + + --- wacom-tools-0.8.1.6.orig/debian/compat +++ wacom-tools-0.8.1.6/debian/compat @@ -0,0 +1 @@ +6 --- wacom-tools-0.8.1.6.orig/debian/wacom-kernel-source.templates +++ wacom-tools-0.8.1.6/debian/wacom-kernel-source.templates @@ -0,0 +1,72 @@ +Template: wacom-kernel-source/module +Type: boolean +Default: true +_Description: Automatically compile the Wacom modules? + In order to make full use of a Wacom graphics tablet you need to compile and + install the provided modules to suit the running Linux kernel. + . + If you choose this option, the Wacom modules will be compiled into a + binary package using local kernel configuration settings. + . + This requires either a linux-headers-* package or the full kernel source + tree. Do not choose this option if neither of these is available. + You can return to this step again later with: + 'dpkg-reconfigure wacom-kernel-source'. + +Template: wacom-kernel-source/recompile +Type: boolean +Default: true +_Description: Create a binary wacom-kernel-modules package? + If you choose this option, the Wacom modules will be compiled into a + binary package using local kernel configuration settings. + . + This requires either a linux-headers-* package or the full kernel source + tree. Do not choose this option if neither of these is available. + You can return to this step again later with: + 'dpkg-reconfigure wacom-kernel-source'. + . + This may replace some modules that were originally built with + the running kernel. + +Template: wacom-kernel-source/kernel +Type: string +Default: /usr/src/linux/ +_Description: Linux header files location: + In order to compile the Wacom modules, please enter the location + of the Linux kernel headers for them to use. + . + Headers provided by a linux-headers-* package are located in + /usr/src/linux-headers-*. + +Template: wacom-kernel-source/wrong_kernel +Type: boolean +Default: false +_Description: Specify a different Linux headers directory? + No valid Linux headers were found in the directory you specified. + +Template: wacom-kernel-source/module_location +Type: note +_Description: Operations needed after modules compilation + The wacom-kernel-modules package will be built in /usr/src/modules, + but cannot be automatically installed. You will have to install it manually + with 'dpkg -i wacom-kernel-module-.deb'. + . + Once the module package is installed, the wacom-kernel-source package is no + longer required except to build new packages after later kernel updates. + If the wacom-kernel-source package is updated then this procedure will be + repeated using your original answers. + +Template: wacom-kernel-source/verbose +Type: boolean +Default: false +_Description: Follow the module compilation progress? + The process of building a binary package may produce quite a lot of output. + It may be useful if problems arise during the build. + +Template: wacom-kernel-source/erase +Type: boolean +Default: false +_Description: Delete the wacom-kernel-modules packages? + Some binary wacom-kernel-modules packages remain in /usr/src(/modules). + Once they have been installed, they're not useful anymore and may be removed + unless you want to keep them for backup or re-installation purposes. --- wacom-tools-0.8.1.6.orig/debian/wacom-kernel-source.postrm +++ wacom-tools-0.8.1.6/debian/wacom-kernel-source.postrm @@ -0,0 +1,62 @@ +#! /bin/sh +# postrm script for wacom-kernel-source +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' overwrit>r> +# for details, see /usr/share/doc/packaging-manual/ + +# Load the debconf libs +if [ -f /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule +fi + + +case "$1" in + purge|remove) + + rm -rf /usr/src/modules/wacom + + if [ -f /usr/share/debconf/confmodule ]; then + if [ -f /usr/src/wacom-kernel-modules-*.deb ] || + [ -f /usr/src/modules/wacom-kernel-modules-*.deb ] + then + db_input medium wacom-kernel-source/erase || true + db_go; + fi + + db_get wacom-kernel-source/erase + if [ $RET = "true" ]; then + rm -f /usr/src/wacom-kernel-modules-*.deb + rm -f /usr/src/modules/wacom-kernel-modules-*.deb + fi + fi + + ;; + + upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 0 + +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + + --- wacom-tools-0.8.1.6.orig/debian/wacom.po-templates +++ wacom-tools-0.8.1.6/debian/wacom.po-templates @@ -0,0 +1,18 @@ +Template: wacom-kernel-modules/moduleorder +Type: note +Description: Load the wacom module before the HID module + If the wacom driver is not loaded before the normal Linux Human + Interface Driver then the HID will have already claimed the device + as a generic mouse and the wacom driver will be ignored. + . + This package may also replace some modules out of the running + kernel. An automated unloading of the HID module, with insertion of + the wacom module beneath it, would be unsafe and therefore is not + attempted. + . + If you wish to install the wacom module without rebooting the + machine, you will need to shut down all processes that use the HID + module and its dependents and unload them manually before installing + the wacom module. The simplest thing to do is reboot the machine at + some convenient opportunity after the package install is complete and + let the new modules configuration determine the proper loading order. --- wacom-tools-0.8.1.6.orig/debian/wacom-kernel-source.postinst +++ wacom-tools-0.8.1.6/debian/wacom-kernel-source.postinst @@ -0,0 +1,88 @@ +#! /bin/sh +# postinst script for wacom-kernel-source +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see /usr/share/doc/packaging-manual/ +# +# quoting from the policy: +# Any necessary prompting should almost always be confined to the +# post-installation script, and should be protected with a conditional +# so that unnecessary prompting doesn't happen if a package's +# installation fails and the `postinst' is called with `abort-upgrade', +# `abort-remove' or `abort-deconfigure'. + +# Load the debconf libs +. /usr/share/debconf/confmodule + +kernel=`uname -s` + +case "$1" in + + configure|reconfigure) + + if [ "$1" = "configure" ] && \ + [ "$DEBCONF_RECONFIGURE" != "1" ] && \ + db_get wacom-kernel-source/module && \ + [ "$RET" = "true" ] \ + || [ "$1" = "reconfigure" ] || \ + [ "$DEBCONF_RECONFIGURE" = "1" ] && \ + db_get wacom-kernel-source/recompile && \ + [ "$RET" = "true" ]; + then + + db_get wacom-kernel-source/kernel + ksrc=$RET + if [ -d $ksrc/include ]; then + + kvers="`head -n 1 $ksrc/include/linux/version.h | cut -c 22- | rev | cut -c 2- | rev`" + [ $kvers = `uname -r` ] || echo "Warning: kernel headers don't match running $kernel version." + + echo -n "Building wacom modules for $kernel $kvers (this may take a few minutes)..." + + db_get wacom-kernel-source/verbose + VERBOSE=$RET + if $VERBOSE; then + echo + cd /usr/src/modules/wacom + debian/rules kdist KVERS=$kvers KSRC=$ksrc; + else + cd /usr/src/modules/wacom + debian/rules kdist KVERS=$kvers KSRC=$ksrc >/dev/null 2>/dev/null + echo "Done." + fi + + else + echo "Error: kernel headers not found in '$ksrc'" + fi + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + --- wacom-tools-0.8.1.6.orig/debian/xserver-1.6.patch +++ wacom-tools-0.8.1.6/debian/xserver-1.6.patch @@ -0,0 +1,114 @@ +diff -ru a/configure.in linuxwacom-0.8.2/configure.in +--- a/configure.in 2008-12-01 19:24:20.000000000 -0500 ++++ linuxwacom-0.8.2/configure.in 2008-12-07 13:55:40.000000000 -0500 +@@ -968,9 +968,6 @@ + dnl ======================================================= + dnl Set default defines in src/include/xdrv-config.h (moved from cmd-line) + AC_DEFINE(IN_MODULE,,[cmdline substitute]) +-AC_DEFINE(XFree86LOADER,,[cmdline substitute]) +-AC_DEFINE(XINPUT,,[cmdline substitute]) +-AC_DEFINE(XKB,,[cmdline substitute]) + + dnl Separate test output from file-generation output + echo +diff -ru a/src/xdrv/wcmCommon.c linuxwacom-0.8.2/src/xdrv/wcmCommon.c +--- a/src/xdrv/wcmCommon.c 2008-12-01 19:24:20.000000000 -0500 ++++ linuxwacom-0.8.2/src/xdrv/wcmCommon.c 2008-12-10 13:09:56.000000000 -0500 +@@ -548,12 +548,7 @@ + switch (button & AC_TYPE) + { + case AC_BUTTON: +-/* xf86PostButtonEvent(local->dev, is_absolute, button & AC_CODE, +-*/ /* Dynamically modify the button map as required -- +- * to be moved in the place where button mappings are changed +- */ +- local->dev->button->map [button_idx] = button & AC_CODE; +- xf86PostButtonEvent(local->dev, is_absolute, button_idx, ++ xf86PostButtonEvent(local->dev, is_absolute, button & AC_CODE, + mask != 0,0,naxes,rx,ry,rz,v3,v4,v5); + break; + +@@ -599,27 +594,21 @@ + break; + + case AC_DBLCLICK: +- /* Dynamically modify the button map as required -- +- * to be moved in the place where button mappings are changed. +- * Only left double is supported. +- */ +- local->dev->button->map [button_idx] = 1; +- + if (mask) + { + /* Left button down */ + xf86PostButtonEvent(local->dev, is_absolute, +- button_idx, 1,0,naxes, ++ 1, 1,0,naxes, + rx,ry,rz,v3,v4,v5); + + /* Left button up */ + xf86PostButtonEvent(local->dev, is_absolute, +- button_idx,0,0,naxes, ++ 1,0,0,naxes, + rx,ry,rz,v3,v4,v5); + } + + /* Left button down/up upon mask is 1/0 */ +- xf86PostButtonEvent(local->dev, is_absolute, button_idx, ++ xf86PostButtonEvent(local->dev, is_absolute, 1, + mask != 0,0,naxes,rx,ry,rz,v3,v4,v5); + break; + } +@@ -747,13 +736,10 @@ + switch (fakeButton & AC_TYPE) + { + case AC_BUTTON: +- /* send both button on/off in the same event for pad */ +- local->dev->button->map [0] = fakeButton & AC_CODE; +- + xf86PostButtonEvent(local->dev, is_absolute, 0, + 1,0,naxes,x,y,z,v3,v4,v5); + +- xf86PostButtonEvent(local->dev, is_absolute, 0, ++ xf86PostButtonEvent(local->dev, is_absolute, fakeButton & AC_CODE, + 0,0,naxes,x,y,z,v3,v4,v5); + break; + +diff -ru a/src/xdrv/wcmConfig.c linuxwacom-0.8.2/src/xdrv/wcmConfig.c +--- a/src/xdrv/wcmConfig.c 2008-12-01 19:24:20.000000000 -0500 ++++ linuxwacom-0.8.2/src/xdrv/wcmConfig.c 2008-12-07 02:28:29.000000000 -0500 +@@ -993,7 +993,7 @@ + MODULEVENDORSTRING, + MODINFOSTRING1, + MODINFOSTRING2, +- XF86_VERSION_CURRENT, ++ XORG_VERSION_CURRENT, + 1, 0, 0, + ABI_CLASS_XINPUT, + ABI_XINPUT_VERSION, +diff -ru a/src/xdrv/xf86Wacom.c linuxwacom-0.8.2/src/xdrv/xf86Wacom.c +--- a/src/xdrv/xf86Wacom.c 2008-12-01 19:24:20.000000000 -0500 ++++ linuxwacom-0.8.2/src/xdrv/xf86Wacom.c 2008-12-07 02:28:29.000000000 -0500 +@@ -584,7 +584,9 @@ + xf86GetMotionEvents, + local->history_size, + #else ++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 3 + GetMotionHistory, ++#endif + GetMotionHistorySize(), + #endif + ((priv->flags & ABSOLUTE_FLAG) ? +diff -ru a/src/xdrv/xf86Wacom.h linuxwacom-0.8.2/src/xdrv/xf86Wacom.h +--- a/src/xdrv/xf86Wacom.h 2008-12-01 19:24:20.000000000 -0500 ++++ linuxwacom-0.8.2/src/xdrv/xf86Wacom.h 2008-12-07 02:28:29.000000000 -0500 +@@ -23,7 +23,8 @@ + /****************************************************************************/ + + #include "../include/xdrv-config.h" +-#include ++#include ++#include + #include "../include/Xwacom.h" + + /***************************************************************************** --- wacom-tools-0.8.1.6.orig/debian/copyright +++ wacom-tools-0.8.1.6/debian/copyright @@ -0,0 +1,64 @@ +This package was created by Ron Lee on +Thu, 4 Nov 2004 16:06:55 -0800. + +The linuxwacom source is downloaded from http://linuxwacom.sf.net + +linuxwacom is: + Copyright (C) 1995-2004 Frederic Lepied + Copyright (C) 2002-2004 John E. Joganic + Copyright (C) 2002-2007 Ping Cheng + Copyright (C) 1999-2005 Vojtech Pavlik + and others. + + Linux kernel modules and the Debian packaging files are distributed + according to the following terms: + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + + libwacomcfg, its associated utilities, and wacomxi are distributed + according to the following terms: + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + + The XOrg driver is distributed according to the following terms: + + 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. + + +A copy of the GPL and LGPL can be found in /usr/share/common-licenses +on Debian systems. + --- wacom-tools-0.8.1.6.orig/debian/wacom.modules +++ wacom-tools-0.8.1.6/debian/wacom.modules @@ -0,0 +1,6 @@ +# The wacom driver must be installed before the hid module (which will +# otherwise claim the tablet first). Not sure if there is a way we +# can hijack it from within the module itself. + +add below hid wacom + --- wacom-tools-0.8.1.6.orig/debian/wacom-tools.1 +++ wacom-tools-0.8.1.6/debian/wacom-tools.1 @@ -0,0 +1,18 @@ +.TH wacom\-tools 1 "5 Nov 2004" "Debian GNU/Linux" "Debian" +.SH NAME +wacdump \- HID event monitor. +.br +xidump \- XInput event monitor. +.br +xsetwacom \- wacom input device configuration. +.br + +.SH DESCRIPTION +The upstream documentation for these tools is available in +/usr/share/doc/wacom-tools + +.SH COPYRIGHT +This manpage was written by Ron Lee for the Debian GNU/Linux +distribution. It may be freely distributed by anyone insane enough to find it +useful. + --- wacom-tools-0.8.1.6.orig/debian/control +++ wacom-tools-0.8.1.6/debian/control @@ -0,0 +1,37 @@ +Source: wacom-tools +Section: graphics +Priority: optional +Maintainer: Ubuntu X-SWAT +XSBC-Original-Maintainer: Ron Lee +Build-Depends: debhelper (>= 7.0.17ubuntu2), po-debconf, pkg-config, xserver-xorg-dev, libxi-dev, libxt-dev, libncurses5-dev, tcl-dev, tk-dev, quilt +Standards-Version: 3.8.0.1 + +Package: wacom-tools +Section: utils +Architecture: any +Depends: ${shlibs:Depends}, tcl, tk +Recommends: xserver-xorg-input-wacom +Breaks: udev (<< 136-1) +Description: utilities for Wacom tablet devices + This package provides utilities to test and configure Wacom graphics tablets. + You will need kernel and X.Org driver support for your tablet to use them. + +Package: xserver-xorg-input-wacom +Section: x11 +Architecture: any +Depends: ${xserver:Depends}, ${shlibs:Depends} +Suggests: wacom-tools +Provides: ${xinpdriver:Provides} +Replaces: wacom-tools (<< 1:0.7.9.3-2) +Conflicts: wacom-tools (<< 1:0.7.9.3-2) +Description: X.Org X server -- Wacom input driver + This package provides the X.Org driver and udev support for Wacom tablet + devices. + . + Note that it is not a part of the X.Org distribution since X11R6: this driver + is from the linuxwacom project. See http://linuxwacom.sf.net for details. + . + You will also require a kernel module which supports your tablet. Many types + are supported by the 'wacom' module supplied with current Linux kernels. If + yours is not one of them (yet) then see the wacom-kernel-source package for + the most up to date module available. --- wacom-tools-0.8.1.6.orig/debian/README.Debian +++ wacom-tools-0.8.1.6/debian/README.Debian @@ -0,0 +1,23 @@ +wacom tools for Debian +---------------------- + +This package is an attempt to organise the tools and binary modules required +to use the Wacom family of graphics tablets and related devices under Debian. + +NOTE: This package should be considered HIGHLY experimental. I am neither a +kernel guru nor a lawyer, think about that. Installing the module into your +kernel and/or poking at it once it is in may do TERRIBLE THINGS to your +system. It probably won't, but that is not my guarantee to make, so be +careful with important data. Like that still needs repeating. + +The wacom-tools package contains some simple utilities useful for testing +and configuring devices and the wacom-kernel-source package can create the +necessary kernel modules for your running kernel. The remaining patches, +to wacom_drv.o for X11, can hopefully be merged into the Debian and/or +mainline X11 source. + +Update: xfree86 4.3.0.dfsg.1-9 has integrated the upstream linuxwacom + patches up to 0.6.4. This should be sufficient for almost + everybody except intuos3 users who want support for the aux pads. + + -- Ron , Thu, 4 Nov 2004 16:06:55 -0800 --- wacom-tools-0.8.1.6.orig/debian/NEWS.Debian +++ wacom-tools-0.8.1.6/debian/NEWS.Debian @@ -0,0 +1,17 @@ +wacom-tools (0.6.6-6) unstable; urgency=low + + The end of the event* madness is near. The first wacom device + plugged in may now always be referred to as /dev/input/wacom. + Additional devices will in theory be enumerated, I don't have + them so I can't vouch for the quality of that particular theory + at this stage. + + Full hotplug support is still lacking in the X drivers, you would + be well advised to restart X at this stage if you need to plug or + unplug the tablet. On the upside, users of kernel 2.6.10 and + later should not need to reboot or monkey about with module + loading order anymore, we can safely repossess the device from + more generic drivers now. + + -- Ron Lee Sat, 12 Feb 2005 16:27:21 +1030 + --- wacom-tools-0.8.1.6.orig/debian/wacom-kernel-source.config +++ wacom-tools-0.8.1.6/debian/wacom-kernel-source.config @@ -0,0 +1,40 @@ +#!/bin/sh +set -e +. /usr/share/debconf/confmodule + +export keep_asking=true +export want_to_build=false + +if [ "$1" = "reconfigure" ]; then + db_input medium wacom-kernel-source/recompile || true + db_go + db_get wacom-kernel-source/recompile + keep_asking=$RET +fi + +while [ $keep_asking = true ] && \ + ( [ "$1" = "reconfigure" ] || \ + ( db_input medium wacom-kernel-source/module && \ + db_go && db_get wacom-kernel-source/module && \ + [ "$RET" = "true" ] ) ); +do + db_input medium wacom-kernel-source/kernel || true + db_go + db_get wacom-kernel-source/kernel + if [ ! -r $RET/include/linux/version.h ]; then + db_input medium wacom-kernel-source/wrong_kernel || true + db_go + db_get wacom-kernel-source/wrong_kernel + keep_asking=$RET + else + keep_asking=false + want_to_build=true + fi +done + +if [ $want_to_build = "true" ]; then + db_input low wacom-kernel-source/verbose || true + db_input high wacom-kernel-source/module_location || true + db_go +fi + --- wacom-tools-0.8.1.6.orig/debian/changelog +++ wacom-tools-0.8.1.6/debian/changelog @@ -0,0 +1,556 @@ +wacom-tools (1:0.8.1.6-1ubuntu6) jaunty; urgency=low + + * Add build system (quilt) + * Add 100_allow_eraser.patch (LP: #257495) + + Respect TPCButton preference for eraser devices when using pen + + -- Bryce Harrington Wed, 04 Feb 2009 11:51:05 +0100 + +wacom-tools (1:0.8.1.6-1ubuntu5) jaunty; urgency=low + + * wcmConfig.c: Don't crash on device unplug (LP: #320753) + + -- Timo Aaltonen Sun, 25 Jan 2009 17:56:52 +0200 + +wacom-tools (1:0.8.1.6-1ubuntu4) jaunty; urgency=low + + * Add Breaks to ensure the right version of udev gets used. + + -- Scott James Remnant Fri, 09 Jan 2009 12:03:35 +0000 + +wacom-tools (1:0.8.1.6-1ubuntu3) jaunty; urgency=low + + * Rebuild against new debhelper for udev path change. + + -- Scott James Remnant Tue, 06 Jan 2009 18:22:53 +0000 + +wacom-tools (1:0.8.1.6-1ubuntu2) jaunty; urgency=low + + * Rebuild against new xorg-server for armel. + + -- Loic Minier Fri, 19 Dec 2008 15:19:01 +0100 + +wacom-tools (1:0.8.1.6-1ubuntu1) jaunty; urgency=low + + * Merge from debian unstable, remaining changes: + - Bump the epoch because of old Ubuntu packaging. + - debian/control: + Change the Maintainer address. + Bump the epoch on Replaces/Conflicts. + Don't build wacom-kernel-source anymore (#71944). + - debian/wacom.postinst: + Remove old files. + - debian/xserver-xorg-input-wacom.init.d, debian/rules: + Initscript for serial devices. + - debian/rules: Disable the scaling quirk. + - Enable input-hotplug: install 10-wacom.fdi in + /usr/share/hal/fdi/policy/20thirdparty. + - Include wacomcpl so the stylus can be calibrated. (LP: #216347) + - debian/rules: --enable-libwacomxi + - debian/control: Add tcl-dev, tk-dev to Build-Depends, and tcl, + tk to wacom-tools Depends. + * Applied xserver-1.6.patch, so it builds against the new xserver. + + -- Timo Aaltonen Mon, 15 Dec 2008 12:12:34 +0200 + +wacom-tools (0.8.1.6-1) unstable; urgency=low + + * Updated udev rules, factored out many common tests and added support + for tabletpc devices with multiple interfaces. + * Updated sv.po, thanks again to Martin Bagge. Closes: #503354 + + -- Ron Lee Sat, 25 Oct 2008 22:18:53 +1030 + +wacom-tools (0.8.1.4-1) experimental; urgency=low + + * Experimental upload for testing with xorg 1.5 Closes: #493976 + * Update sv.po, thanks to Martin Bagge. Closes: #483769 + + -- Ron Lee Sat, 04 Oct 2008 16:37:42 +0930 + +wacom-tools (1:0.8.1.4-0ubuntu3) intrepid; urgency=low + + * debian/rules: Enable the fdi file again. (LP: #282203) + + -- Timo Aaltonen Tue, 21 Oct 2008 18:11:01 +0300 + +wacom-tools (1:0.8.1.4-0ubuntu2) intrepid; urgency=low + + * debian/rules: Don't use the fdi file, since with input-hotplug it's not + possible to fully utilize the device, and properly configuring it is + more awkward. Install it in /usr/share/doc/xserver-xorg-input-wacom + instead so people can use it if they want. + * Include wacomcpl so the stylus can be calibrated. (LP: #216347) + - debian/rules: --enable-libwacomxi + - debian/control: Add tcl-dev, tk-dev to Build-Depends, and tcl, tk to + wacom-tools Depends. + + -- Timo Aaltonen Fri, 10 Oct 2008 13:45:33 +0300 + +wacom-tools (1:0.8.1.4-0ubuntu1) intrepid; urgency=low + + [ Timo Aaltonen ] + * New upstream release. + * src/xdrv/wcmConfig.c: s/WCM_UNINIT_CALLED/WCM_XORG_XSERVER_1_4/ + (LP: #259035) + + [ Mario Limonciello ] + * Modify 10-wacom.fdi to include current representation + of N-Trig digitizer. (LP: #272289) + + -- Timo Aaltonen Thu, 25 Sep 2008 10:16:07 +0300 + +wacom-tools (1:0.8.1.3-0ubuntu2) intrepid; urgency=low + + * debian/rules: install the fdi file again.. + + -- Timo Aaltonen Fri, 22 Aug 2008 08:51:34 +0300 + +wacom-tools (1:0.8.1.3-0ubuntu1) intrepid; urgency=low + + * New upstream release. + * 10-wacom.fdi: + - Check for WALTOP devices (like Aiptek 10000U). + - Set Type = stylus. + + -- Timo Aaltonen Fri, 15 Aug 2008 12:03:58 +0300 + +wacom-tools (1:0.8.0.2-2ubuntu3) intrepid; urgency=low + + * Enable input-hotplug: install 10-wacom.fdi in + /usr/share/hal/fdi/policy/20thirdparty. + + -- Timo Aaltonen Fri, 01 Aug 2008 10:12:50 +0300 + +wacom-tools (1:0.8.0.2-2ubuntu2) intrepid; urgency=low + + * Rebuild against the new xserver-xorg-dev. + + -- Timo Aaltonen Mon, 07 Jul 2008 17:43:36 +0300 + +wacom-tools (1:0.8.0.2-2ubuntu1) intrepid; urgency=low + + * Merge with Debian unstable, remaining changes: + - Bump the epoch because of old Ubuntu packaging. + - debian/control: + Change the Maintainer address. + Bump the epoch on Replaces/Conflicts. + Don't build wacom-kernel-source anymore (#71944). + - debian/wacom.postinst: + Remove old files. + - debian/xserver-xorg-input-wacom.init.d, debian/rules: + Initscript for serial devices. + - debian/rules: Disable the scaling quirk. + + -- Timo Aaltonen Wed, 04 Jun 2008 19:24:32 +0300 + +wacom-tools (0.8.0.2-2) unstable; urgency=low + + * Fix a regression to the dlloader test (again). Closes: #481720 + + -- Ron Lee Mon, 19 May 2008 19:19:53 +0930 + +wacom-tools (0.8.0.2-1) unstable; urgency=low + + * Fixes a crash with XServer 1.4 Closes: #454568 + * Be explicit about using bash. Closes: #459166 + * Update nl.po, thanks to Vincent Zweije and debian-l10n-dutch. + Closes: #464448 + * Split lintian-overrides into two files because lintian barfs if the + entries for different packages are all kept together. *unf* + * Bump the debhelper minimum version to 6.0.7 for dh_lintian, and + bump compat to 6 if we are going to be forced to depend on it anyhow. + + -- Ron Lee Sat, 17 May 2008 06:35:40 +0930 + +wacom-tools (1:0.7.9.8-0ubuntu3) hardy; urgency=low + + * Another fix for the braindead configure{,.in}. Removed a test + figuring out if $WCM_MODDIR had evdev/kbd/mouse in it, and if not + change the dlloader configure option we used back to 'no'. How sane. + (LP: #208909) + + -- Timo Aaltonen Sun, 30 Mar 2008 08:16:01 +0300 + +wacom-tools (1:0.7.9.8-0ubuntu2) hardy; urgency=low + + * Fix the broken configure{,.in} by adding 'test' to the module path + check. (LP: #208909) + + -- Timo Aaltonen Sat, 29 Mar 2008 23:28:04 +0200 + +wacom-tools (1:0.7.9.8-0ubuntu1) hardy; urgency=low + + [ Tom Jaeger ] + * New upstream release (LP: 195953) + * debian/rules: disable the scaling quirk. + * linuxwacom/src/xdrv/Makefile.{am,in}: + - add DEFAULT_INCLUDES to fix the build because we use a builddir. + - fix the source patch of .depend target. + + -- Timo Aaltonen Sat, 29 Mar 2008 13:30:55 +0200 + +wacom-tools (1:0.7.9.3-2ubuntu2) hardy; urgency=low + + * Add an epoch to the Conflicts/Replaces (LP: #180214). + + -- Timo Aaltonen Fri, 04 Jan 2008 00:46:59 +0200 + +wacom-tools (1:0.7.9.3-2ubuntu1) hardy; urgency=low + + * Merge with Debian unstable (LP: #134879, #136977, #174382, #175050). + Remaining changes: + - Bump the epoch because of old Ubuntu packaging. + - debian/control: + Change the Maintainer address. + - debian/wacom.postinst: + Remove old files. + - debian/xserver-xorg-input-wacom.init.d, debian/rules: + Initscript for serial devices. + * Fix initscript to work with SysFS in 2.6.24. (LP: #177878) + * debian/control: don't build wacom-kernel-source anymore. (LP: #71944) + + -- Timo Aaltonen Sun, 30 Dec 2007 18:59:29 +0200 + +wacom-tools (0.7.9.3-2) unstable; urgency=low + + * Make xserver-xorg-input-wacom conflict/replace the earlier wacom-tools + packages because the wacom.4 manpage has switched packages. + * Generate a xserver-xorg-input-wacom.substvars file to manage the XOrg + version provides and dependencies. + + -- Ron Lee Sun, 02 Dec 2007 11:16:28 +1030 + +wacom-tools (0.7.9.3-1) unstable; urgency=low + + * New upstream release, includes support for XOrg 7.3/1.4 + Closes: #442424, #443032 + * Don't overrun padkey_codes[] when iterating through it. Closes: #447681 + * Move the wacom(4) man page to the xserver-xorg-input-wacom package. + Closes: #440164 + * Include the new text and translations courtesy of the Smith Review. + With a big thanks to everyone who contributed to that! + Closes: #443956, #444561, #444672, #444762, #445024, #445519, #445796 + Closes: #446135, #446402, #446440, #446576, #446717 + * Tidy the debian/copyright file. Closes: #451647 + * Add Provides: xserver-xorg-input-2 so the next X ABI transition will be + a bit less painful for people. + * Update the udev rules for new tablets. Lower-case the product ids since + udev appears to be case sensitive doing string compares for hex values. + Nice one guys. + * Add a build-dep for pkg-config, it appears to have infected XOrg now too. + + -- Ron Lee Sun, 02 Dec 2007 08:32:45 +1030 + +wacom-tools (0.7.7.11-1) unstable; urgency=low + + * New upstream release. + * Include upstream documentation like the man page says we do. + I guess nobody ever read it before ;-) Closes: #427689 + + -- Ron Lee Wed, 06 Jun 2007 18:50:46 +0930 + +wacom-tools (0.7.7.10-3) unstable; urgency=low + + * Reapply the patch to fix 64/32 bit cross builds, that seems to have + been lost or misapplied too. + + -- Ron Lee Mon, 04 Jun 2007 17:15:35 +0930 + +wacom-tools (0.7.7.10-2) unstable; urgency=low + + * Don't depend on the xorg module dir actually existing when + --with-xmoduledir is used (again). This is an upstream regression + to the patch submitted for 0.7.4.1-3. Closes: #427428 + + -- Ron Lee Mon, 04 Jun 2007 15:09:29 +0930 + +wacom-tools (0.7.7.10-1) unstable; urgency=low + + * New upstream version. Closes: #396883, #415244, #422532 + * Update vi.po, thanks to Clytie Siddall. Closes: #427020 + * Drop the external module package, upstream seems to be syncing fairly + regularly with the mainstream kernel team again, so this should not + be needed by most people, and causes confusion and trouble for the rest. + Closes: #418008, #417140, #404471, #317287 + * Lintian now bitches about reusing DH_COMPAT for the source package, so + I guess we now need to clutter the debian/ dir with files for each use + of the /rules. *sigh* This seems a bit _too_ pedantic to me. + + -- Ron Lee Sat, 02 Jun 2007 23:51:51 +0930 + +wacom-tools (0.7.4.1-6) unstable; urgency=low + + * Debconf translation updates only. Many thanks to Christian Perrier for + coordinating this 'final' update for etch. + - German. Closes: #398671 + - Galician. Closes: #407897 + - Portuguese. Closes: #408334 + - Italian. Closes: #409832 + - Japanese. Closes: #411503 + - Russian. Closes: #411748 + + -- Ron Lee Wed, 28 Feb 2007 23:49:53 +1030 + +wacom-tools (0.7.4.1-5) unstable; urgency=high + + * Urgency high because only one line of code has changed and it + fixes a FTBFS with xorg7.1 -- broken or not. + + * Backported change from upstream cvs to remove unneccessary #include + (for any version of xorg/xfree), that breaks builds with xorg7.1. + cf. #388776 + + * Updated fr.po, thanks to Jean-Luc Coulon and debian-l10n-french. + Closes: #367224 + * Updated cs.po, thanks to Miroslav Kure. + Closes: #384761 + * Added nl.po, thanks to Vincent Zweije and debian-l10n-dutch. + Closes: #388312 + * Added sv.po, thanks to Daniel Nylander. + Closes: #389022 + + -- Ron Lee Fri, 6 Oct 2006 18:26:26 +0930 + +wacom-tools (0.7.4.1-4) unstable; urgency=high + + * Make check_driver executable, even after it's been reconstituted + from a diff.gz. Closes: #384873 + + -- Ron Lee Tue, 29 Aug 2006 19:45:29 +0930 + +wacom-tools (0.7.4.1-3) unstable; urgency=low + + * Replace the quick fix from -2 with some better autodetection, + and an option to explicitly supply the xorg module dir, which + we can't check without build-depending on X runtime packages. + + -- Ron Lee Thu, 18 May 2006 15:33:23 +0930 + +wacom-tools (0.7.4.1-2) unstable; urgency=low + + * Quick and dirty hack to workaround the failing 'dlloader' detection. + + -- Ron Lee Tue, 16 May 2006 23:35:37 +0930 + +wacom-tools (0.7.4.1-1) unstable; urgency=low + + * New linuxwacom release. Better support for PenPartner, DTF-521 + and xorg7. Kernel 2.6 < 2.6.8 no longer supported. + * Remove patches incorporated upstream. + * Specify xorg-sdk and xlib locations explicitly still to avoid + linuxwacom trying to install to lib64 if a 64bit kernel is found. + It can be worked around for 64 bit builds, but totally breaks + building in a ia32 chroot on such a machine if we don't do this. + * Disable building the kernel module with the support libs + (or at least, try to). + * Switch to DH_COMPAT level 5. + * Fix the product id for DTF-720. + + -- Ron Lee Sun, 14 May 2006 15:30:26 +0930 + +wacom-tools (0.7.3.1-5) unstable; urgency=low + + * Move the check_driver RUN script to /lib/udev, and shave a few cycles + from each time it is called. Thanks to MD for checking it over. + + -- Ron Lee Sat, 13 May 2006 17:13:03 +0930 + +wacom-tools (0.7.3.1-4) unstable; urgency=low + + * Update the wacom-kernel-modules package for the change in kernel + package names. Reported as a followup to #317288, but this does + not solve the original issue of upgrading a kernel without a change + in the kernel version. + + -- Ron Lee Sat, 13 May 2006 16:36:42 +0930 + +wacom-tools (0.7.3.1-3) unstable; urgency=low + + * Remove the old udev rules in the postinst if they are unmodified. + Bark at the user to remove them if they have been changed locally. + Being conffiles, they are not removed on upgrade, even if they + are no longer provided by the package. But newer udev barfs on + them, so we have to do something to get them out of the picture. + + -- Ron Lee Fri, 12 May 2006 23:10:45 +0930 + +wacom-tools (0.7.3.1-2) unstable; urgency=low + + * May Day, May Day. + * Add missing build-dep for libxi-dev. Closes: #365538 + + -- Ron Lee Mon, 1 May 2006 13:31:03 +0930 + +wacom-tools (0.7.3.1-1) unstable; urgency=low + + * New upstream source. + * The previous device snatching code will not work with + kernel 2.6.13+, time to see what 2.6.16 has to offer + in its place. Closes: #350663 + * Build the wacom_drv module for xorg7, it is no longer + supplied as part of the xorg source package. + * Fix udev rules, again, it may still be a moving target, + but let's hope its getting a little tired of ducking + and weaving too. We now provide a convenience link to + /dev/input/wacom for users of a single tablet, and named + links for the convenience of users with multiple tablets + of different types. Users with multiple tablets of the + same type will need to bind them to the /dev/input/by-path + nodes that correspond to each tablet. + Closes: #324391, #358057 + * Re-implemented device rebinding from userspace, using a + udev RUN rule and a small script to check and rebind + if required. + + -- Ron Lee Fri, 14 Apr 2006 00:59:34 +0930 + +wacom-tools (0.6.6-9) unstable; urgency=low + + * Added cs.po, thanks to Miroslav Kure. Closes: #314986 + * Added jp.po, thanks to TANAKA Atushi. Closes: #322411 + * Fixed typo in debconf template (closes: #324086), and + added vi.po, thanks to Clytie Siddall. Closes: #324087 + * Only set KSRC to a simple default if it is not already + set. (cf. #315130 and #341823) + * Rip out obsolete FLAVOUR support in line with similar + changes to kernel-package. + * Remove unused dh_* boilerplate. + + -- Ron Lee Mon, 20 Jun 2005 16:10:52 +0930 + +wacom-tools (0.6.6-8) unstable; urgency=low + + * The promised new upstream is still in limbo, so in the + meantime, s/kdist_config/kdist_configure/ + Closes: #296168, #314739 + * Look for the docs in the correct source location when + installing them to the binary package. Closes: #300579 + * And don't pretend they are html. That is just far too + surprising for popular taste. + + -- Ron Lee Sun, 19 Jun 2005 00:37:25 +0930 + +wacom-tools (0.6.6-7) unstable; urgency=low + + * Restore build-dep on libx11-dev, despite reports to the + contrary libxt-dev alone is evidently not sufficient. + Closes: #294960 + + -- Ron Lee Sun, 13 Feb 2005 10:52:07 +1030 + +wacom-tools (0.6.6-6) unstable; urgency=low + + * Punt device snatching out to userspace via sysfs, it's the only + way to be sure at present. This is an(other) experimental + implementation before the core kernel api is decided and only + available for kernel 2.6.10 and later at this stage. + * Add a udev rule to create /dev/input/wacom* for each + wacom tablet device plugged in to the system. Its a conffile + so you can hard code your own device id's there if you want + constant names that don't depend on the number of wacom devices + you have and the order you plug them in. + * Add a hotplug script to poke the module device snatching code. + * Typo fix in 2.6.7/wacom.c Closes: #294642 thanks. + * Patch missing functions into 2.6.8/wacom.c, I have a report + that this works for people who really need it. Closes: #287941 + * Add debhelper build-dep to the module package. Closes: #290721 + * Add libx11 build-dep too until this is fixed properly upstream, + and a dep on build-essential Closes: #288238 thanks. + * Does not close #286111, nor can I reproduce it still. + + -- Ron Lee Sat, 12 Feb 2005 16:27:21 +1030 + +wacom-tools (0.6.6-5) unstable; urgency=low + + * First crack at the device snatching patch. + + -- Ron Lee Tue, 11 Jan 2005 18:00:40 +1030 + +wacom-tools (0.6.6-4) unstable; urgency=low + + * Removed evdev patch since what it attempts to do is + already handled in the kernel for cases where it might + reliably work. + + Removed usbhid patch since we can get in before it + without needing to manually maintain a list of 'quirks'. + + Removed mousedev and usbmouse patches, since the former + is now built into 2.6 kernels anyway and cannot easily + be replaced on the fly, and since this is simply the wrong + approach to fixing the problem of dynamic device naming + for generic devices IMO, it just hides it for some people + until they buy another device. + + This and tested support for kernel 2.6, Closes: #281230 + and more... + + * Explicitly point configure at the kernel source. Closes: #285206 + + * Update the other libtool goop as well to fix FTBFS + on mips and mipsel. Closes: #285213 + + * (ab)use a shared 'confdir' (and worse) to restore something like + the functionality needed by wacom.modutils for wacom.modprobe + until we can fix the kernel. Don't try this at home kids, it is + surely not best practice in any of the domains it kludges through. + Though its as legal as falling asleep sober at the wheel ... + + -- Ron Lee Fri, 10 Dec 2004 16:12:07 +1030 + +wacom-tools (0.6.6-3) unstable; urgency=low + + * Updated to build with 2.6.10-rc2. + + -- Ron Lee Fri, 3 Dec 2004 23:58:50 +1030 + +wacom-tools (0.6.6-2) unstable; urgency=low + + * Updated patch for kernel 2.4.28 + + -- Ron Lee Fri, 3 Dec 2004 03:24:16 +1030 + +wacom-tools (0.6.6-1) unstable; urgency=low + + * New upstream release incorporating submitted fixes, + thanks Ping! + * Add missing build depends, Closes: #281451 + thanks Andreas Jochens. + * Included fr.po debconf template translation, Closes: #282768 + thanks Jean-Luc Coulon (f5ibh) and the debian-l10n-french ml. + * Use DESTDIR instead of (ab)using prefix as it is supported here. + Closes: #283037 + + -- Ron Lee Thu, 2 Dec 2004 19:09:05 +1030 + +wacom-tools (0.6.5-2) unstable; urgency=low + + * This package builds arch any utils too, add suitable build depends. + Closes: #281126 Thanks lamont. + + -- Ron Lee Sun, 14 Nov 2004 20:54:13 +1030 + +wacom-tools (0.6.5-1) unstable; urgency=low + + * New linuxwacom beta release. + * Improves support for Intuos3 and more recent 2.6 branch kernels. + (but still only tested with 2.4.27, see below) + + -- Ron Lee Sun, 7 Nov 2004 01:32:34 +1030 + +wacom-tools (0.6.4-1) unstable; urgency=low + + * Initial trivial packaging. Note this has only been tested with 2.4.27. + * Provides the basics from the linuxwacom project -- test and config tools, + and kernel modules in a convenient form for users of kernel packages. + It does not provide an updated X11 module, hopefully any important parts + of that will be ultimately be included by the X maintainers once I look + at what they might accept. + * Updated config.{guess,sub}. + * Modify the version detection to handle a non-numeric suffix + from --append_to_version or flavour. + * Closes: #279555 + + -- Ron Lee Thu, 4 Nov 2003 16:06:55 -0800 + --- wacom-tools-0.8.1.6.orig/debian/wacom.postinst +++ wacom-tools-0.8.1.6/debian/wacom.postinst @@ -0,0 +1,23 @@ +# postinst script for cpad-kernel-module +# No hashbang here to prevent bitching about this template file. +# We add it later once the real name of this file is resolved. + +set -e + +# Show the notes about creating a new device file and +# module ordering if we haven't already done so. +. /usr/share/debconf/confmodule + +# FIXME will dh do the above for us if we don't interfere? +# we may not need a postinst for anything else now... + +rm -f /etc/udev/rules.d/10-wacom.rules +rm -f /etc/hotplug.d/input/wacom.hotplug +rmdir /etc/hotplug.d/input 2>/dev/null || true +rmdir /etc/hotplug.d 2>/dev/null || true + +#DEBHELPER# + +exit 0 + + --- wacom-tools-0.8.1.6.orig/debian/check_driver +++ wacom-tools-0.8.1.6/debian/check_driver @@ -0,0 +1,24 @@ +#!/bin/sh +# + +#logger check_driver called with: $1 - $2 - $3 - + +wanted=$1 +devpath=$2 +bustype=$3 + +device=$(readlink /sys/$devpath/device) +device=${device##*/} +driver=$(readlink /sys/$devpath/device/driver) +driver=${driver##*/} + +logger device $device is bound to the $driver driver + +if [ "$driver" != "$wanted" ]; then + logger must rebind + echo -n "$device" > /sys/$devpath/device/driver/unbind + echo -n "$device" > /sys/bus/$bustype/drivers/$wanted/bind +else + logger no need to rebind +fi + --- wacom-tools-0.8.1.6.orig/debian/xserver-xorg-input-wacom.init.d +++ wacom-tools-0.8.1.6/debian/xserver-xorg-input-wacom.init.d @@ -0,0 +1,32 @@ +#!/bin/bash + +. /lib/lsb/init-functions + +if [ ! -d /sys/bus/pnp/devices ]; then exit; fi + +cd /sys/bus/pnp/devices + +case $1 in + start|restart|reload|force-reload) + log_begin_msg "Doing Wacom setup..." + for x in *; do + PORT=unknown; + for y in `cat $x/id`; do + case "$y" in + WACf008*|WACf007|WACf006*|WACf005*|WACf004*) + if [ -d $x/tty ]; then + PORT=/dev/`ls $x/tty` + else + PORT=/dev/`echo $x/tty:* | awk -F: '{print $3}'` + fi + ln -sf $PORT /dev/input/wacom + ;; + esac + done + done + log_end_msg 0; + ;; + stop) + exit 0; + ;; +esac --- wacom-tools-0.8.1.6.orig/debian/wacom.config +++ wacom-tools-0.8.1.6/debian/wacom.config @@ -0,0 +1,10 @@ +# config script for wacom-kernel-modules +# No hashbang here to prevent bitching about this template file. +# We add it later once the real name of this file is resolved. + +set -e +. /usr/share/debconf/confmodule + +db_input high wacom-kernel-modules/moduleorder || true +db_go + --- wacom-tools-0.8.1.6.orig/debian/xserver-xorg-input-wacom.lintian-overrides +++ wacom-tools-0.8.1.6/debian/xserver-xorg-input-wacom.lintian-overrides @@ -0,0 +1 @@ +xserver-xorg-input-wacom: shared-lib-without-dependency-information --- wacom-tools-0.8.1.6.orig/debian/wacom-tools.docs +++ wacom-tools-0.8.1.6/debian/wacom-tools.docs @@ -0,0 +1,2 @@ +doc/linuxwacom.html +doc/howto.html --- wacom-tools-0.8.1.6.orig/debian/wacom.templates +++ wacom-tools-0.8.1.6/debian/wacom.templates @@ -0,0 +1,18 @@ +Template: wacom-kernel-modules/moduleorder +Type: note +Description: Load the wacom module before the HID module + If the wacom driver is not loaded before the normal Linux Human + Interface Driver then the HID will have already claimed the device + as a generic mouse and the wacom driver will be ignored. + . + This package may also replace some modules out of the running + kernel. An automated unloading of the HID module, with insertion of + the wacom module beneath it, would be unsafe and therefore is not + attempted. + . + If you wish to install the wacom module without rebooting the + machine, you will need to shut down all processes that use the HID + module and its dependents and unload them manually before installing + the wacom module. The simplest thing to do is reboot the machine at + some convenient opportunity after the package install is complete and + let the new modules configuration determine the proper loading order. --- wacom-tools-0.8.1.6.orig/debian/check_driver.1 +++ wacom-tools-0.8.1.6/debian/check_driver.1 @@ -0,0 +1,21 @@ +.TH wacom\-tools 1 "5 Nov 2004" "Debian GNU/Linux" "Debian" +.SH NAME +check_driver \- Linux 2.6(.16+) userspace device rebinding helper. + +.SH SYNOPSIS +.B check_driver driver devpath bustype + +.SH DESCRIPTION +This is a \fBRUN\fP script that may be invoked from a udev rule to ensure the +correct driver is bound to a particular device, in situations where a +basic driver may bind to it first but a more specialised one is available. + +.SH EXAMPLE +For the wacom device, a rule like this is used: + +KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", ACTION=="add", RUN+="/lib/udev/check_driver wacom $devpath $env{ID_BUS}" + +.SH COPYRIGHT +2006, Ron Lee . Created for the Debian GNU/Linux +distribution. It may be freely distributed elsewhere. + --- wacom-tools-0.8.1.6.orig/debian/wacom.control +++ wacom-tools-0.8.1.6/debian/wacom.control @@ -0,0 +1,20 @@ +Source: wacom-tools +Section: graphics +Priority: optional +Maintainer: Ron Lee +Build-Depends: debhelper (>= 5.0.0) +Standards-Version: 3.7.2.0 + +Package: wacom-kernel-modules-${kpkg:Kernel-Version} +Architecture: any +Depends: ${misc:Depends} +Provides: wacom-kernel-modules +Replaces: linux-image-${kpkg:Kernel-Version} +Description: wacom modules for Linux kernel-${kpkg:Kernel-Version} + This package contains loadable kernel modules for wacom graphics + tablets suitable for Linux-${kpkg:Kernel-Version} + . + It was created from the wacom-kernel-source Package to suit that + kernel. To create another package to suit a different kernel, + run `dpkg-reconfigure wacom-kernel-source` and follow the bouncing + ball. --- wacom-tools-0.8.1.6.orig/debian/xserver-xorg-input-wacom.postinst +++ wacom-tools-0.8.1.6/debian/xserver-xorg-input-wacom.postinst @@ -0,0 +1,11 @@ +#!/bin/sh +set -e + +# Create this dir if required for ourselves rather than +# depending strictly on udev. +mkdir -p /etc/udev/rules.d + +#DEBHELPER# + +exit 0 + --- wacom-tools-0.8.1.6.orig/debian/10-wacom.fdi +++ wacom-tools-0.8.1.6/debian/10-wacom.fdi @@ -0,0 +1,25 @@ + + + + + + + + wacom + stylus + + + wacom + stylus + + + + + + wacom + stylus + + + + + --- wacom-tools-0.8.1.6.orig/debian/xserver-xorg-input-wacom.udev +++ wacom-tools-0.8.1.6/debian/xserver-xorg-input-wacom.udev @@ -0,0 +1,95 @@ +# udev rules for wacom tablets. +# These rules were compiled for the Debian GNU/Linux distribution, +# but others may, and indeed are encouraged to, use them also. +# +# Should you do so, PLEASE CO-ORDINATE ANY CHANGES OR ADDITIONS +# of new devices with Ron so that we can try +# to present users with with a standard set of device nodes +# which they can rely on across the board. + +KERNEL!="event[0-9]*", GOTO="wacom_end" + +# Port specific link for users of multiple tablets of the same type. +# The ID_PATH variable is set by the "path_id" script in an earlier rule file. +ATTRS{idVendor}=="056a", ENV{ID_PATH}=="?*", SYMLINK="input/by-path/$env{ID_PATH}-wacom" + +# Multiple interface support for stylus and touch devices. +DRIVERS=="wacom", ATTRS{bInterfaceNumber}=="00", ENV{WACOM_TYPE}="stylus" +DRIVERS=="wacom", ATTRS{bInterfaceNumber}=="01", ENV{WACOM_TYPE}="touch" + +# Type-named links for multiple tablets. If you want to use multiple +# tablets of the _same_ type, you will probably need to use the links +# from /dev/input/by-path to identify which is plugged into what usb +# port. For different tablet types though, just pick your links from +# the list below. +# +# We override SYMLINK for tabletpc devices because the by-path link +# is not required with such devices, there will only ever be one. +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0000", SYMLINK+="input/tablet-penpartner" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0003", SYMLINK+="input/tablet-cintiq_partner" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0010", SYMLINK+="input/tablet-graphire" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0011", SYMLINK+="input/tablet-graphire2-4x5" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0012", SYMLINK+="input/tablet-graphire2-5x7" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0013", SYMLINK+="input/tablet-graphire3" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0014", SYMLINK+="input/tablet-graphire3-6x8" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0015", SYMLINK+="input/tablet-graphire4-4x5" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0016", SYMLINK+="input/tablet-graphire4-6x8" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0017", SYMLINK+="input/tablet-bamboofun-4x5" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0018", SYMLINK+="input/tablet-bamboofun-6x8" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0019", SYMLINK+="input/tablet-bamboo1-medium" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0020", SYMLINK+="input/tablet-intuos-4x5" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0021", SYMLINK+="input/tablet-intuos-6x8" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0022", SYMLINK+="input/tablet-intuos-9x12" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0023", SYMLINK+="input/tablet-intuos-12x12" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0024", SYMLINK+="input/tablet-intuos-12x18" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0030", SYMLINK+="input/tablet-pl400" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0031", SYMLINK+="input/tablet-pl500" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0032", SYMLINK+="input/tablet-pl600" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0033", SYMLINK+="input/tablet-pl600sx" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0034", SYMLINK+="input/tablet-pl550" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0035", SYMLINK+="input/tablet-pl800" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0037", SYMLINK+="input/tablet-pl700" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0038", SYMLINK+="input/tablet-pl510" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0039", SYMLINK+="input/tablet-dtu710" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="003f", SYMLINK+="input/tablet-cintiq21ux" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0041", SYMLINK+="input/tablet-intuos2-4x5" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0042", SYMLINK+="input/tablet-intuos2-6x8" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0043", SYMLINK+="input/tablet-intuos2-9x12" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0044", SYMLINK+="input/tablet-intuos2-12x12" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0045", SYMLINK+="input/tablet-intuos2-12x18" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0047", SYMLINK+="input/tablet-intuos2-6x8a" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0060", SYMLINK+="input/tablet-volito" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0061", SYMLINK+="input/tablet-penstation2" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0062", SYMLINK+="input/tablet-volito2-4x5" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0063", SYMLINK+="input/tablet-volito2-2x3" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0064", SYMLINK+="input/tablet-penpartner2" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0065", SYMLINK+="input/tablet-bamboo" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0069", SYMLINK+="input/tablet-bamboo1" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0081", SYMLINK+="input/tablet-graphire_bt-6x8" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0090", SYMLINK="input/tablet-tpc90" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="0093", SYMLINK="input/tablet-tpc93-$env{WACOM_TYPE}" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="009a", SYMLINK="input/tablet-tpc9a-$env{WACOM_TYPE}" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00b0", SYMLINK+="input/tablet-intuos3-4x5" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00b1", SYMLINK+="input/tablet-intuos3-6x8" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00b2", SYMLINK+="input/tablet-intuos3-9x12" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00b3", SYMLINK+="input/tablet-intuos3-12x12" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00b4", SYMLINK+="input/tablet-intuos3-12x19" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00b5", SYMLINK+="input/tablet-intuos3-6x11" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00c0", SYMLINK+="input/tablet-dtf521" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00c4", SYMLINK+="input/tablet-dtf720" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00c5", SYMLINK+="input/tablet-cintiq20wsx" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00c6", SYMLINK+="input/tablet-cintiq12wx" +ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00c7", SYMLINK+="input/tablet-dtu1931" + +# Convenience links for the common case of a single tablet. We could do just this: +#ATTRS{idVendor}=="056a", SYMLINK+="input/wacom-$env{WACOM_TYPE}" +# but for legacy reasons, we keep the input/wacom link as the generic stylus device. +ATTRS{idVendor}=="056a", ENV{WACOM_TYPE}!="touch", SYMLINK+="input/wacom" +ATTRS{idVendor}=="056a", ENV{WACOM_TYPE}=="touch", SYMLINK+="input/wacom-touch" + +# Check and repossess the device if a module other than the wacom one +# is already bound to it. +ATTRS{idVendor}=="056a", ACTION=="add", RUN+="check_driver wacom $devpath $env{ID_BUS}" + +LABEL="wacom_end" + --- wacom-tools-0.8.1.6.orig/debian/rules +++ wacom-tools-0.8.1.6/debian/rules @@ -0,0 +1,382 @@ +#!/usr/bin/make -f +# Derived from: +# Sample debian/rules that uses debhelper, +# GNU copyright 1997 by Joey Hess. +# Copyright Ron Lee 2003, 2004, 2007 + +SHELL = /bin/bash + +#export DH_VERBOSE=1 + +# Must be exported or the dh_* scripts will never see it. +export DH_OPTIONS + +# Do this here instead of in a compat file so we don't need two of them, +# one for the main source package and one for the module binary package. +# XXX lintian now bitches about this and insists we add a file. *sigh* +#export DH_COMPAT=5 + + +CFLAGS = -Wall -g + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) + INSTALL_PROGRAM += -s +endif + + +lw_tools = linuxwacom +objdir_lw = $(lw_tools)/builddir + +package_tools = wacom-tools +package_xorg = xserver-xorg-input-wacom + +PACKAGE = $(package_tools) +include debian/xsfbs/xsfbs.mk + +### KERNEL SETUP +### Setup things needed for making kernel module packages, + +# KDREV is the package-revision, as given to make-kpkg by the user. +# Just put a simply default value in here which we use when we test +# the packagebuilding without make-kpkg +ifeq ($(strip $(KDREV)),) +KDREV = "test1.0" +endif + +ifeq ($(strip $(KSRC)),) +$(warning Warning. KSRC unspecified, using /usr/src/linux for kernel source.) +# KSRC is the location of the kernel source. This is a default value, +# when make-kpkg et al. are used they should supply a real value. +KSRC = /usr/src/linux +endif + +## Now to determine the kernel version, normally supplied by make-kpkg +ifeq ($(strip $(KVERS)),) +# Now we need to get the kernel-version somehow (we are not running +# under make-kpkg?) +kversion := $(shell egrep '^VERSION +=' $(KSRC)/Makefile 2>/dev/null | \ + sed -e 's/[^0-9]*\([0-9]*\)/\1/') +kplevel := $(shell egrep '^PATCHLEVEL +=' $(KSRC)/Makefile 2>/dev/null | \ + sed -e 's/[^0-9]*\([0-9]*\)/\1/') +ksublevel := $(shell egrep '^SUBLEVEL +=' $(KSRC)/Makefile 2>/dev/null | \ + sed -e 's/[^0-9]*\([0-9]*\)/\1/') +EXTRA_VERSION := $(shell egrep '^EXTRAVERSION +=' $(KSRC)/Makefile 2>/dev/null | \ + sed -e 's/EXTRAVERSION[\t ]*=[\t ]*\(.*\)/\1/') +kextra := $(strip $(EXTRA_VERSION)) +HAVE_NEW_MODLIB := $(shell egrep '\(INSTALL_MOD_PATH\)' \ + $(KSRC)/Makefile 2>/dev/null ) + +ifneq ($(strip $(APPEND_TO_VERSION)),) +iatv := $(strip $(APPEND_TO_VERSION)) +EXTRAV_ARG := EXTRAVERSION=${EXTRA_VERSION}${iatv} +else +iatv := +EXTRAV_ARG := +endif + +KVERS = $(kversion).$(kplevel).$(ksublevel)$(kextra)$(iatv) + +endif + +non_epoch_version = $(shell echo $(KVERS) | perl -pe 's/^\d+://') +epoch = $(shell echo $(KVERS) | perl -ne 'm/^(\d+:)/ && print $$1') + +# We also need the package version +pversion = $(shell sed -ne '1s/.*(\(.*\)).*/\1/p' debian/changelog) + +# MODDIR is the place where the final .deb package should be made. This is the +# default value, when make-kpkg is used it will supply to real value +MODDIR = .. + +pmodules = wacom-kernel-modules-$(non_epoch_version) +psource = wacom-kernel-source + +# Prepares the package for distribution. Intended for the kernel +# maintainer. +kdist: kdist_clean kdist_configure kdist_image + +# The kdist_configure target is called by make-kpkg modules_config. It +# should configure the module so it is ready for compilation (mostly +# useful for calling configure) +kdist_configure: + ./configure --disable-libwacomxi \ + --disable-wacomdrv \ + --disable-libwacomcfg \ + --disable-wacdump \ + --disable-xidump \ + --disable-xsetwacom \ + --enable-wacom \ + --with-kernel=$(KSRC) + + +# the kdist_image target is called by make-kpkg modules_image. It is +# responsible for compiling the module and creating the package. It +# should also clean up after making the module. Please note we use a +# seperate binary-modules target to make testing the package building +# easier +kdist_image: + $(MAKE) $(MFLAGS) -f debian/rules binary-modules + $(MAKE) $(MFLAGS) -f debian/rules kdist_clean + +# the kdist_clean target is called by make-kpkg modules_clean. It is +# responsible for cleaning up any changes that have been made by the +# other kdist_commands (except for the .deb files created). +kdist_clean: clean-common + dh_testdir + dh_testroot + + -$(MAKE) clean; + rm -f debian/$(pmodules).* debian/control + + +debian/control: + sed -e 's/$${kpkg\:Kernel\-Version}/$(non_epoch_version)/' \ + debian/wacom.control > debian/control + + +# the binary-modules target prepares the $(pmodules) package. +# It is called by make-kpkg and *not* during a normal build +binary-modules: DH_OPTIONS=-p$(pmodules) +binary-modules: debian/control + # Is this needed for setting up a Depends? + #echo "kpkg:Package-Version=$(epoch)$(pversion)+$(non_epoch_version)" \ + # >> debian/$(package).substvars + #echo "kpkg:Kernel-Version=$(non_epoch_version)" > \ + # debian/$(pmodules).substvars + + # The substvars mechanism seems slightly broken, hack to get around it + # stolen from the qce-ga package. (Update: it's not really broken, + # dh_clean just removes it... but see below, we have to generate a + # control file still anyway, so we might as well generate it complete) + # + # We do this above instead so control exists when the clean targets + # are run. + #sed -e 's/$${kpkg\:Kernel\-Version}/$(non_epoch_version)/' \ + #debian/wacom.control > debian/control + + # Make sure we've had a chance to get a control file before doing this: + dh_testdir + dh_testroot + dh_clean -k + + # Set up per package control files with suitable names + for f in modules templates; do \ + cp -a debian/wacom.$$f debian/$(pmodules).$$f; \ + done + for f in postinst config; do \ + echo "#!/bin/sh" | cat - debian/wacom.$$f > debian/$(pmodules).$$f; \ + done + + # Build the modules + $(MAKE) + + # It's hard to be sure where the modules are with the upstream + # build system, so 'install' them in a temp dir for the moment. + + mkdir -p temp + find src/2.4.* -name "*.o" -exec cp {} temp \; + find src/2.6.* -name "*.ko" -exec cp {} temp \; + + # Install the modules + if [ -e temp/wacom.o ]; then \ + dh_install temp/wacom.o \ + lib/modules/$(non_epoch_version)/kernel/drivers/usb; \ + else \ + dh_install temp/wacom.ko \ + lib/modules/$(non_epoch_version)/kernel/drivers/usb/input; \ + fi + $(RM) -r temp + + # XXX We still need this for 2.4 + #dh_installmodules + + dh_installdebconf + dh_installchangelogs + dh_installdocs + dh_compress + dh_fixperms + + dh_installdeb + #dh_gencontrol -- -v$(epoch)$(pversion)+$(non_epoch_version)+$(KDREV) + dh_gencontrol -- -v$(epoch)$(pversion) + dh_md5sums + #dh_builddeb --destdir=$(KSRC)/.. + dh_builddeb --destdir=$(MODDIR) + +### end KERNEL SETUP + + +config-arch: config-arch-stamp +config-arch-stamp: + dh_testdir + mkdir -p $(objdir_lw) + cd $(objdir_lw) && \ + ../configure --prefix=/usr \ + --with-xmoduledir=/usr/lib/xorg/modules/input \ + --disable-quirk-tablet-rescale \ + --disable-wacom \ + --enable-libwacomxi + touch $@ + + +build-arch: config-arch build-arch-stamp +build-arch-stamp: + dh_testdir + cd $(objdir_lw) && $(MAKE) + touch $@ + +build-indep: build-indep-stamp +build-indep-stamp: + dh_testdir + po2debconf debian/wacom.po-templates > debian/wacom.templates + touch $@ + +build: patch build-stamp build-indep build-arch + +clean: clean-common + dh_testdir + dh_testroot + #-cd $(objdir_lw) && $(MAKE) clean + $(RM) -r $(objdir_lw) + + # Ensure po files are up to date for the source package. + debconf-updatepo + +clean-common: debian/control + dh_testdir + dh_testroot + rm -f *-stamp + dh_clean + + +install: build install-indep install-arch + +install-arch: install-wacom-tools install-wacom-drv + +install-wacom-tools: DH_OPTIONS=-p$(package_tools) +install-wacom-tools: + dh_testdir + dh_testroot + dh_clean -k + + cd $(objdir_lw) && $(MAKE) install DESTDIR=$(shell pwd)/debian/$(package_tools) + + # Remove these for the moment, they belong in + # a -dev package but nothing needs it yet. + $(RM) -r debian/$(package_tools)/usr/include + $(RM) -r debian/$(package_tools)/usr/lib/libwacomcfg.{a,la,so} + + # Remove this too, it belongs in $package_xorg + $(RM) -r debian/$(package_tools)/usr/share/man/man4 + + dh_installdirs usr/share/doc/$(package_tools) + dh_installman debian/wacom-tools.1 + dh_link usr/share/man/man1/wacom-tools.1 usr/share/man/man1/wacdump.1 \ + usr/share/man/man1/wacom-tools.1 usr/share/man/man1/xidump.1 \ + usr/share/man/man1/wacom-tools.1 usr/share/man/man1/xsetwacom.1 + + dh_lintian + +install-wacom-drv: XORG = /usr/share/xserver-xorg +install-wacom-drv: XSUB = debian/$(package_xorg).substvars +install-wacom-drv: DH_OPTIONS=-p$(package_xorg) +install-wacom-drv: + dh_testdir + dh_testroot + dh_clean -k + + dh_install debian/$(package_tools)/usr/lib/xorg/modules usr/lib/xorg + $(RM) -r debian/$(package_tools)/usr/lib/xorg + + chmod 755 debian/check_driver + dh_install debian/check_driver lib/udev + dh_installman debian/check_driver.1 linuxwacom/src/wacom.4x + mkdir -p debian/$(package_xorg)/usr/share/hal/fdi/policy/20thirdparty/ + dh_install debian/10-wacom.fdi usr/share/hal/fdi/policy/20thirdparty/ + + dh_installudev + dh_lintian + + echo "xserver:Depends=xserver-xorg-core (>= $(shell cat $(XORG)/serverminver))" > $(XSUB) + echo "xinpdriver:Provides=xserver-xorg-input-$(shell cat $(XORG)/inputabiver)" >> $(XSUB) + + +install-indep: install-source + +install-source: DH_OPTIONS=-p$(psource) +install-source: + dh_testdir + dh_testroot + dh_clean -k + + # Copy the driver source + dh_install -Xbuilddir $(lw_tools)/* usr/src/modules/wacom + # Remove some things not needed for the kernel module. + # Unfortunately, its still bound to the autoconf setup. + $(RM) debian/$(psource)/usr/src/modules/wacom/src/wacomxi/wacomcpl + + # Copy the needed debian/ pieces + dh_install debian/rules \ + debian/changelog \ + debian/copyright \ + debian/wacom.config \ + debian/wacom.control \ + debian/wacom.modules \ + debian/wacom.postinst \ + debian/wacom.templates \ + usr/src/modules/wacom/debian + + dh_installdebconf + + +# Build architecture-independent files here. +# Pass -i to all debhelper commands in this target to reduce clutter. +binary-indep: build-indep install-indep + dh_testdir -i + dh_testroot -i + dh_installdocs -i + dh_installchangelogs -i + dh_compress -i + dh_fixperms -i + dh_installdeb -i + dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i + +# Build architecture-dependent files here. +binary-arch: build-arch install-arch + dh_testdir -a + dh_testroot -a + dh_installdocs -a + dh_installexamples -a + dh_installmenu -a + dh_installinit -a -- start 10 2 3 4 5 . + dh_installcron -a + dh_installinfo -a + dh_installchangelogs -a + dh_strip -a + dh_link -a + dh_compress -a + dh_fixperms -a + dh_makeshlibs -a + dh_installdeb -a + dh_shlibdeps -a -L $(package_tools) -l debian/$(package_tools)/usr/lib + dh_gencontrol -a + dh_md5sums -a + dh_builddeb -a + +# No binary-indep if we're not building the kernel source package. +#binary: binary-indep binary-arch +binary: binary-arch + +.PHONY: build clean clean-common binary-indep binary-arch binary \ + install install-arch install-indep \ + install-wacom-tools install-wacom-drv \ + install-source binary-modules \ + kdist kdist_configure kdist_image kdist_clean + --- wacom-tools-0.8.1.6.orig/debian/wacom-tools.lintian-overrides +++ wacom-tools-0.8.1.6/debian/wacom-tools.lintian-overrides @@ -0,0 +1 @@ +wacom-tools: package-name-doesnt-match-sonames --- wacom-tools-0.8.1.6.orig/debian/po/cs.po +++ wacom-tools-0.8.1.6/debian/po/cs.po @@ -0,0 +1,311 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-10-02 20:17+0200\n" +"Last-Translator: Miroslav Kure \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "Automaticky zkompilovat moduly pro Wacom?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Abyste mohli používat všechny možnosti grafických tabletů Wacom, musíte " +"zkompilovat a nainstalovat přichystaný modul do svého linuxového jádra." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Vyberete-li tuto možnost, zkompilují se Wacom moduly do binárního balíku." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"To vyžaduje buď kompletní zdrojové texty jádra, nebo balík linux-headers-*. " +"Jestliže ani jedno z toho není k dispozici, tuto možnost nevybírejte. K " +"tomuto kroku se můžete vrátit později příkazem 'dpkg-reconfigure wacom-" +"kernel-source'." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "Vytvořit binární balík wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Toto může nahradit některé moduly, které byly původně sestaveny pro " +"momentálně běžící jádro." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Umístění hlavičkových souborů linuxového jádra:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Abyste mohli zkompilovat Wacom moduly, zadejte prosím umístění hlavičkových " +"souborů linuxového jádra." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Hlavičkové soubory linuxového jádra nainstalované prostřednictvím balíku " +"linux-headers-* jsou uloženy v adresáři /usr/src/linux-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "Zadat jiný adresář s hlavičkovými soubory?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "V zadaném adresáři nebyly nalezeny platné hlavičkové soubory Linuxu." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Další kroky po kompilaci modulu" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"Balík wacom-kernel-modules se sestaví v /usr/src/modules, ale nenainstaluje " +"se. Po kompilaci jej musíte nainstalovat ručně příkazem 'dpkg -i wacom-" +"kernel-module-.deb'." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Po instalaci balíku s modulem bude balík wacom-kernel-source potřeba pouze " +"při pozdějších aktualizacích jádra. Bude-li balík wacom-kernel-source " +"aktualizován na novější verzi, zopakuje se tento průvodce, ovšem přednastaví " +"hodnoty, které jste zadali právě teď." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "Sledovat postup kompilace?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"Proces sestavování binárního balíku může produkovat docela hodně výstupu. " +"Tento výstup může být užitečný v případě, že se během sestavování objeví " +"nějaké problémy." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "Smazat balíky wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"V /usr/src(/modules) zůstávají starší binární balíky wacom-kernel-modules.Po " +"instalaci už nejsou potřeba a můžete je klidně odstranit (pokud si je ovšem " +"nechcete ponechat pro strýčka příhodu nebo případné přeinstalování)." + +#~ msgid "Would you like the wacom modules to be compiled automatically?" +#~ msgstr "Přejete si zkompilovat moduly pro wacom automaticky?" + +#~ msgid "" +#~ "If you opt to do this, the wacom modules will be compiled into a Debian " +#~ "binary package using a local kernel configuration which you will be " +#~ "required to specify. You must have either a kernel-headers-* package " +#~ "installed to suit the kernel you wish to use it with, or have a suitably " +#~ "configured kernel source tree available. If you do not currently have " +#~ "either of these available you should choose not to do this at present. " +#~ "Once you have suitable headers installed you can return to this selection " +#~ "with:" +#~ msgstr "" +#~ "Budete-li souhlasit, pak budou zkompilovány moduly wacomu do binárního " +#~ "debianího balíčku s použitím současné konfigurace jádra, kterou bude " +#~ "třeba zadat. K sestavení modulů musíte mít buď nainstalován balíček " +#~ "kernel-headers-* odpovídající jádru, se kterým chcete moduly používat, " +#~ "nebo mít k dispozici adresář s vhodně nakonfigurovaným zdrojovým kódem " +#~ "jádra. Pokud ještě nejste na kompilaci připraveni, pak ji zatím " +#~ "neprovádějte. Až si nainstalujete potřebné hlavičkové soubory, vraťte se " +#~ "k tomuto kroku pomocí:" + +#~ msgid "dpkg-reconfigure wacom-kernel-source" +#~ msgstr "dpkg-reconfigure wacom-kernel-source" + +#~ msgid "" +#~ "Alternatively, you might prefer to build it manually. The source to do " +#~ "this can be found in /usr/src/modules/wacom. You may use a tool like " +#~ "make-kpkg(1) or `fakeroot debian/rules kdist [ KSRC=... KVERS=... ]` to " +#~ "create a Debian package as above, or you can simply `configure && make` " +#~ "and install it by hand." +#~ msgstr "" +#~ "Alternativně si můžete modul sestavit ručně. Potřebné zdrojové kódy " +#~ "naleznete v /usr/src/modules/wacom. Pro vytvoření balíčku můžete použít " +#~ "nástroj make-kpkg(1) nebo `fakeroot debian/rules kdist [ KSRC=... " +#~ "KVERS=... ]`, nebo stačí jednoduše spustit `configure && make` a " +#~ "nainstalovat vše ručně." + +#~ msgid "" +#~ "Note this package may replace some modules that were originally built " +#~ "with your running kernel. You should ensure the original modules can be " +#~ "replaced in the event of trouble before installing the resulting " +#~ "package. Also if you have already built a wacom-kernel-modules package " +#~ "in this way using the same kernel version then that package may be " +#~ "overwritten. You should rename or relocate it before continuing if you " +#~ "wish to preserve it." +#~ msgstr "" +#~ "Nutno poznamenat, že tento balíček může nahradit některé moduly dodávané " +#~ "s vaším jádrem. Podobně pokud již máte vytvořen balíček wacom-kernel-" +#~ "modules pro stejnou verzi jádra, může být přepsán. Pokud si ho přejete " +#~ "uchovat, tak jej před pokračováním přejmenujte nebo přesuňte." + +#~ msgid "" +#~ "The directory you have provided is not a valid Linux headers location." +#~ msgstr "" +#~ "Zadaný adresář není platným umístěním hlavičkových souborů linuxového " +#~ "jádra." + +#~ msgid "dpkg -i wacom-kernel-module-.deb" +#~ msgstr "dpkg -i wacom-kernel-module-.deb" + +#~ msgid "" +#~ "Unfortunately that cannot be done automatically at this stage because " +#~ "dpkg is not able to be called recursively." +#~ msgstr "" +#~ "Bohužel to nyní nelze provést, protože dpkg nelze spouštět rekurzivně." + +#~ msgid "" +#~ "Once the module package is installed, you probably won't need the wacom-" +#~ "kernel-source package anymore unless you plan to update your kernel again " +#~ "later. In that case you can safely purge it completely with 'dpkg -P " +#~ "wacom-kernel-source'. Otherwise, you will be able to rebuild the wacom-" +#~ "kernel-modules package in this manner at any time with `dpkg-reconfigure " +#~ "wacom-kernel-source`. You will be prompted once again for the location " +#~ "of the kernel headers to use." +#~ msgstr "" +#~ "Jakmile je balíček s moduly jednou nainstalován, pravděpodobně již více " +#~ "nebudete potřebovat balíček wacom-kernel-source (kromě případu, kdy " +#~ "plánujete aktualizovat své jádro). Balíček můžete bezpečně odstranit " +#~ "příkazem 'dpkg -P wacom-kernel-source'. V opačném případě jej můžete " +#~ "zkompilovat stejným způsobem jako kdykoliv jindy - `dpkg-reconfigure " +#~ "wacom-kernel-source` a opět budete dotázáni na umístění hlavičkových " +#~ "souborů jádra, které chcete použít." + +#~ msgid "" +#~ "If you update the wacom-kernel-source package at some later time (or " +#~ "remove it without purging, then reinstall) the answers you have given " +#~ "here will be used to repeat this process and create a new module package " +#~ "for you to install." +#~ msgstr "" +#~ "Jestliže budete později aktualizovat balíček wacom-kernel-source (nebo " +#~ "jej odstraníte bez vyčištění a pak přeinstalujete), zde získané odpovědi, " +#~ "budou použity pro zopakování tohoto procesu a vytvoření nového balíčku s " +#~ "moduly." + +#~ msgid "The wacom module must be loaded before the HID module." +#~ msgstr "Modul wacom musí být načten před modulem HID." + +#~ msgid "" +#~ "If the wacom driver is not loaded before the normal Linux HID driver then " +#~ "the HID will have already claimed the device as a generic mouse and the " +#~ "wacom driver will be ignored. This package may also replace some modules " +#~ "out of your running kernel. It is typically not safe for this installer " +#~ "to automatically unload the HID module and insert the wacom driver " +#~ "beneath it, nor to automatically remove any of the other affected " +#~ "modules. If you wish to install the wacom module without rebooting the " +#~ "machine you will need to shut down all processes that use the HID module " +#~ "and its dependents and unload them manually before installing the wacom " +#~ "module. The simplest thing to do is reboot the machine at some " +#~ "convenient opportunity after the package install is complete and let the " +#~ "new modules configuration determine the proper loading order." +#~ msgstr "" +#~ "Pokud není ovladač wacom načten před běžným linuxovým ovladačem HID, pak " +#~ "HID bude považovat zařízení za běžnou myš a wacom ovladač bude ignorován. " +#~ "Pro tento instalátor většinou není bezpečné automaticky odstranit modul " +#~ "HID a vložit před něj ovladač wacom. Jestliže si přejete nainstalovat " +#~ "modul wacom bez restartu systému, potřebujete ukončit všechny procesy, " +#~ "které používají modul HID a jeho závislosti a odstranit je ručně před " +#~ "zavedením modulu wacom. Nejjednodušší způsob jak to provést, je " +#~ "restartovat počítač při nějaké vhodné příležitosti po instalaci balíčku a " +#~ "nechat novou konfiguraci modulů, aby si sama zvolila správné pořadí " +#~ "načítání." --- wacom-tools-0.8.1.6.orig/debian/po/ja.po +++ wacom-tools-0.8.1.6/debian/po/ja.po @@ -0,0 +1,179 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools 0.6.6-8\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-02-19 22:01+0900\n" +"Last-Translator: TANAKA, Atushi \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "wacom モジュールを自動的にコンパイルすることにしますか?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"wacom グラフィックタブレットを最大限に活用するには、稼働中のLinux カーネルに" +"適合させるように、提供されているモジュールをコンパイルしてインストールする必" +"要があります。" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"このオプションを選択すると、ローカルなカーネルの設定を使ってwacom モジュール" +"をコンパイルしバイナリパッケージを作ります。" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"このとき linux-headers-* パッケージもしくはカーネルのソ-ス全てが必要です。こ" +"れらが無いときこのオプションは選ばないでください。'dpkg-reconfigure wacom-" +"kernel-source'でここに戻ることができます。" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "wacom-kernel-modules パッケージのバイナリを作りますか?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"このことで, いま実行しているカーネルで作られたモジュールを置き変えるかもしれ" +"ません。" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Linux カーネルのヘッダファイルの位置:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"wacom モジュールをコンパイルします。このため Linux カーネルのヘッダの場所を指" +"定する必要があります。" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"kernel-headers-* パッケージのヘッダは、/usr/src/kernel-headers-* にあります。" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "別の Linux カーネルヘッダのディレクトリを指定したいですか?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "" +"指定されたディレクトリには、正しい Linux カーネルヘッダが見つかりません。" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "モジュールをコンパイルした後どうしますか?" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"wacom-kernel-modules パッケージは /usr/src/modules 以下で構築されます。それが" +"できた後にインストールする必要がありますが、そのためには次のコマンドを使いま" +"す:" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"一旦モジュールパッケージをインストールすれば、後でカーネルをアップデートする" +"までは wacom-kernel-source パッケ-ジは不要です。もし wacom-kernel-source パッ" +"ケージがアップデートされると元の回答を使って同じ手続きを繰り返します。" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "コンパイルの進行状況を見たいですか?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"バイナリパッケージを作成する過程でたくさんの出力が出てきます。パッケージ作成" +"で問題があるときは、この出力は役に立ちます。" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "wacom-kernel-modules パッケージを消しますか?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"wacom-kernel-modules パッケージのバイナリが /usr/src(/modules) に残ってます。" +"一旦インストールすればこれらは不要で消して構いません。ただし、バックアップも" +"しくは再インストールのために残しておけます。" --- wacom-tools-0.8.1.6.orig/debian/po/de.po +++ wacom-tools-0.8.1.6/debian/po/de.po @@ -0,0 +1,187 @@ +# translation of po-debconf template to German +# This file is distributed under the same license as the wacom-tools package. +# Copyright (C): +# +# Matthias Julius , 2006, 2007. +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools 0.7.7.11-2\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-10-12 22:35-0400\n" +"Last-Translator: Matthias Julius \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "Wacom-Module automatisch kompilieren?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Um alle Funktionen eines Wacom-Grafiktabletts nutzen zu können, müssen Sie " +"die zur Verfügung gestellten Module kompilieren und installieren, damit sie " +"zum laufenden Linux-Kernel passen." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Falls Sie diese Möglichkeit wählen, werden die Wacom-Module unter Verwendung " +"der lokalen Kernel-Konfiguration in ein Binärpaket kompiliert." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"Dies erfordert ein linux-headers-*-Paket oder den vollständigen Kernel-" +"Quellbaum. Wählen Sie diese Möglichkeit nicht, falls keins von beiden " +"verfügbar ist. Sie können später zu diesem Schritt mit 'dpkg-reconfigure " +"wacom-kernel-source' zurückkehren." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "Ein binäres wacom-kernel-modules-Paket erzeugen?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Dies könnte Module, die ursprünglich mit dem laufenden Kernel kompiliert " +"wurden, ersetzen." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Verzeichnis mit den Linux-Header-Dateien:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Zur Kompilierung der Wacom-Module geben Sie bitte den Speicherort der Linux-" +"Kernel-Header ein, die verwendet werden sollen." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Header, die von einem linux-headers-*-Paket zur Verfügung gestellt werden, " +"befinden sich in /usr/src/linux-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "Ein anderes Verzeichnis für Linux-Header angeben?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "" +"Es wurden keine gültigen Linux-Header in dem angegebenen Verzeichnis " +"gefunden." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Notwendige Operationen nach der Kompilierung der Module" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"Das wacom-kernel-modules-Paket wird im Verzeichnis /usr/src/modules erzeugt, " +"kann aber nicht automatisch installiert werden. Sie müssen es manuell " +"mittels 'dpkg -i wacom-kernel-module-.deb' installieren." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Sobald das Modul-Paket installiert ist, wird das wacom-kernel-source-Paket " +"nicht länger benötigt, außer um neue Pakete nach späteren Kernel-" +"Aktualisierungen zu erzeugen. Falls das wacom-kernel-source-Paket " +"aktualisiert wird, wird diese Prozedur unter Verwendung Ihrer ursprünglichen " +"Antworten wiederholt." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "Den Fortschritt der Modul-Kompilierung verfolgen?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"Das Übersetzen eines Binär-Paketes kann recht umfangreiche Ausgaben " +"produzieren. Sie können nützlich sein, falls Probleme während der " +"Kompilierung auftreten." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "Das wacom-kernel-modules-Paket löschen?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"Einige binäre wacom-kernel-modules-Pakete verbleiben in /usr/src(/modules). " +"Sobald diese installiert wurden, sind sie nutzlos und können gelöscht " +"werden, außer Sie möchten sie zum Zwecke der Sicherung oder Neuinstallation " +"aufheben." --- wacom-tools-0.8.1.6.orig/debian/po/gl.po +++ wacom-tools-0.8.1.6/debian/po/gl.po @@ -0,0 +1,180 @@ +# Galician translation of wacom-tools's debconf templates +# This file is distributed under the same license as the wacom-tools package. +# Jacobo Tarrio , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-09-30 18:53+0100\n" +"Last-Translator: Jacobo Tarrio \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "¿Compilar os módulos de Wacom automaticamente?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Para poder empregar a fondo unha tableta gráfica Wacom ten que compilar e " +"instalar os módulos que se fornecen para adaptalos ao núcleo de Linux que se " +"está a empregar." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Se escolle esta opción, os módulos Wacom hanse compilar nun paquete binario " +"que emprega a configuración local do núcleo." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"Isto precisa dun paquete linux-headers-* ou da árbore de código fonte do " +"núcleo completa. Non escolla esta opción se ningún deles está dispoñible. " +"Pode voltar a este paso máis adiante con: \"dpkg-reconfigure wacom-kernel-" +"source\"." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "¿Crear un paquete binario wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Isto pode substituír algúns módulos que se compilaron orixinalmente co " +"núcleo actual." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Ubicación dos ficheiros de cabeceiras de Linux:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Para compilar os módulos de Wacom, introduza a ubicación das cabeceiras de " +"Linux para que as usen os módulos." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"As cabeceiras fornecidas polos paquetes linux-headers-* residen en /usr/src/" +"linux-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "¿Especificar un directorio de cabeceiras de Linux distinto?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "Non se atoparon cabeceiras válidas de Linux no directorio que indicou." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Operacións necesarias trala compilación dos módulos" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"Hase compilar o paquete wacom-kernel-modules en /usr/src/modules, pero non " +"se pode instalar automaticamente. Ha ter que instalalo manualmente coa orde " +"\"dpkg -i wacom-kernel-module-.deb\"." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Despois de instalar o paquete de módulos, xa non é necesario o paquete wacom-" +"kernel-source a menos que queira compilar novos paquetes despois de " +"actualizar o núcleo outra vez. Se se actualiza o paquete wacom-kernel-" +"source, hase repetir este procedemento coas súas respostas orixinais." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "¿Seguir o progreso da compilación do módulo?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"O proceso de compilación dun paquete binario pode producir bastante texto. " +"Pode ser útil se xorden problemas durante a compilación." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "¿Borrar os paquetes wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"Hai paquetes binarios wacom-kernel-modules en /usr/src(/modules). Despois de " +"instalalos non son necesarios e pode eliminalos, a menos que queira gardalos " +"coma copias de seguridade ou para reinstalalos." --- wacom-tools-0.8.1.6.orig/debian/po/ru.po +++ wacom-tools-0.8.1.6/debian/po/ru.po @@ -0,0 +1,186 @@ +# translation of ru.po to Russian +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Sergey Alyoshin , 2007. +# Yuri Kozlov , 2007. +msgid "" +msgstr "" +"Project-Id-Version: 0.7.7.11-2\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-10-10 21:05+0400\n" +"Last-Translator: Yuri Kozlov \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "Скомпилировать модули Wacom автоматически?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Чтобы задействовать все функции графического планшета Wacom нужно " +"скомпилировать и установить предоставляемые модули, соответствующие " +"работающему ядру Linux." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Если вы ответите утвердительно, модули Wacom будут скомпилированы в бинарный " +"пакет в соответствии с настройками установленного ядра." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"Для этого требуется пакет linux-headers-* или полное дерево исходных текстов " +"ядра. Если у вас ничего из этого нет, то вы должны ответить отрицательно. Вы " +"сможете повторить этот шаг позже запустив: 'dpkg-reconfigure wacom-kernel-" +"source'." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "Создать бинарный пакет wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Его установка может заменить некоторые модули из пакета работающего ядра." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Каталог с заголовочными файлами ядра Linux:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Для компиляции модулей Wacom требуется указать каталог с заголовочными " +"файлами ядра Linux, которые нужно использовать." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Заголовочные файлы Linux, предоставляемые пакетом linux-headers-*, находятся " +"в каталоге /usr/src/linux-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "Указать другой каталог с заголовочными файлами ядра Linux?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "" +"В указанном каталоге не найдены надлежащие заголовочные файлы ядра Linux." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Что делать после компиляции модуля" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"Пакет wacom-kernel-modules будет собран в каталоге /usr/src/modules, но " +"автоматически установлен не будет. Вам нужно установить его самостоятельно с " +"помощью команды 'dpkg -i wacom-kernel-module-<версия>.deb'." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"После установки пакета с модулями пакет wacom-kernel-source больше не нужен, " +"если вы не планируете позже обновлять ядро. Если пакет wacom-kernel-source " +"обновится, то этот процесс будет выполнен снова, используя ваши имеющиеся " +"ответы." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "Хотите наблюдать за процессом компиляции модулей?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"В процессе сборки бинарного пакета может выводиться много информации. " +"Просмотр этой информации может быть полезен, если возникнут проблемы при " +"сборке." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "Удалить пакеты wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"Некоторые бинарные пакеты wacom-kernel-modules остались в каталоге /usr/src(/" +"modules). После того как вы установили их вручную, они больше не нужны, хотя " +"их можно сохранить как резервную копию или для переустановки." --- wacom-tools-0.8.1.6.orig/debian/po/it.po +++ wacom-tools-0.8.1.6/debian/po/it.po @@ -0,0 +1,181 @@ +# Italian (it) translation of debconf templates for wacom-tools +# Copyright (C) 2007 Free Software Foundation, Inc. +# This file is distributed under the same license as the wacom-tools package. +# Luca Monducci , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools 0.7.7.11-2 italian debconf\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-09-30 20:39+0100\n" +"Last-Translator: Luca Monducci \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "Compilare automaticamente i moduli Wacom?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Per sfruttare al massimo la tavoletta grafica Wacom è necessario compilare e " +"installare i moduli in modo da adattarli al kernel Linux in uso." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Accettando, i moduli Wacom vengono compilati usando la configurazione del " +"kernel locale e inseriti all'interno di un pacchetto binario." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"È necessario che sia installato il pacchetto linux-headers-* oppure l'intero " +"albero dei sorgenti del kernel; se adesso nessuno dei due è disponibile si " +"deve abbandonare l'installazione. In seguito si può riprendere " +"l'installazione usando: \"dpkg-reconfigure wacom-kernel-source\"." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "Creare il pacchetto binario wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Questo pacchetto potrebbe sostituire alcuni dei moduli che sono stati " +"compilati insieme al kernel." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Posizione dei file con gli header di Linux:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Per compilare i moduli Wacom è necessario specificare dove si trovano gli " +"header del kernel Linux per poterli usare." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Gli header di Linux forniti da un pacchetto linux-headers-* si trovano in /" +"usr/src/linux-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "Specificare una directory diversa per gli header di Linux?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "La directory indicata non contiene degli header di Linux validi." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Operazioni necessarie dopo la compilazione dei moduli" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"Il pacchetto wacom-kernel-modules viene creato in /usr/src/modules ma non " +"può essere installato automaticamente. È necessario installarlo manualmente " +"con \"dpkg -i wacom-kernel-module-.deb\"." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Una volta installato il pacchetto con il modulo non c'è più bisogno del " +"pacchetto wacom-kernel-source a meno che in futuro non si debba aggiornare " +"nuovamente il kernel. Se il pacchetto wacom-kernel-source viene aggiornato, " +"questa procedura viene ripetuta usando le risposte date adesso." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "Seguire l'avanzamento della compilazione del modulo?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"Il processo di creazione del pacchetto binario può produrre molto output che " +"può essere utile nel caso si verifichino dei problemi." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "Eliminare i pacchetti wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"In /usr/src(/modules) sono rimasti alcuni pacchetti binari wacom-kernel-" +"modules. Una volta che questi pacchetti sono stati installati non sono più " +"necessari e possono essere eliminati a meno che non si voglia tenerli come " +"backup oppure per future reinstallazioni." --- wacom-tools-0.8.1.6.orig/debian/po/vi.po +++ wacom-tools-0.8.1.6/debian/po/vi.po @@ -0,0 +1,310 @@ +# Vietnamese translation for Wacom Tools. +# Copyright © 2007 Free Software Foundation, Inc. +# Clytie Siddall , 2005-2007. +# +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools 0.7.7.11-2\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-09-29 20:54+0930\n" +"Last-Translator: Clytie Siddall \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: LocFactoryEditor 1.7b1\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "Tự động biên dịch các mô-đun Wacom không?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Để sử dụng đầy đủ một phiến đồ họa Wacom, bạn cần phải biên dịch và cài đặt " +"những mô-đun đã cung cấp, để thích hợp với hạt nhân Linux đang chạy." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Bật tùy chọn này thì các mô-đun Wacom sẽ được biên dịch vào gói nhị phân, " +"dùng thiết lập cấu hình hạt nhân cục bộ." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"Tiến trình này cần thiết hoặc một gói kiểu « linux-headers-* » hoặc toàn cây " +"mã nguồn hạt nhân. Không có một của hai tài nguyên này thì đừng bật tùy chọn " +"này. Bạn cũng có thể trở về bước này về sau bằng lệnh cấu hình lại « 'dpkg-" +"reconfigure wacom-kernel-source »." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "Tạo một gói wacom-kernel-modules nhị phân không?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Tiến trình này có thể thay thế một số mô-đun đã được xây dựng gốc với hạt " +"nhân đang chạy." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Vị trí tập tin phần đầu Linux:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Để biên dịch các mô-đun Wacom, hãy gõ vị trí của các phần đầu hạt nhân Linux " +"cần dùng." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Các phần đầu được gói « linux-headers-* » cung cấp thì nằm trong « /usr/src/" +"linux-headers-* »." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "Ghi rõ thư mục phần đầu Linux khác không?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "Không tìm thấy phần đầu Linux hợp lệ trong thư mục bạn đã xác định." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Thao tác cần thiết sau khi biên dịch mô-đun" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"Gói « wacom-kernel-modules » sẽ được xây dựng trong thư mục « /usr/src/" +"modules », nhưng không thể được cài đặt tự động. Vậy bạn cần phải tự cài đặt " +"nó bằng lệnh « dpkg -i wacom-kernel-module-.deb »." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Một khi cài đặt gói mô-đun, gói « wacom-kernel-modules » không còn cần thiết " +"lại, trừ để xây dựng gói mới sau khi cập nhật hạt nhân vào lúc sau. Cũng cập " +"nhật gói « wacom-kernel-source » thì thủ tục này sẽ được lặp lại, dùng các " +"thông tin bạn đã cung cấp gốc." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "Theo dõi phương pháp biên dịch mô-đun không?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"Tiến trình xây dựng gói nhị phân có thể xuất nhiều dữ liệu. Có thể hữu ích " +"nếu bạn gặp khó khăn trong việc xây dựng." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "Xóa các gói « wacom-kernel-modules » không?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"Một số gói « wacom-kernel-modules » nhị phân còn lại trong thư mục « /usr/src" +"(/modules) ». Một khi cài đặt, chúng không còn có ích lại, thì bỏ được nếu " +"bạn không muốn giữ lại nhằm mục đích sao lưu hay cài đặt lại." + +#~ msgid "Would you like the wacom modules to be compiled automatically?" +#~ msgstr "Bạn có muốn trình này tự động biên dịch những mô-đun WACOM không?" + +#~ msgid "" +#~ "If you opt to do this, the wacom modules will be compiled into a Debian " +#~ "binary package using a local kernel configuration which you will be " +#~ "required to specify. You must have either a kernel-headers-* package " +#~ "installed to suit the kernel you wish to use it with, or have a suitably " +#~ "configured kernel source tree available. If you do not currently have " +#~ "either of these available you should choose not to do this at present. " +#~ "Once you have suitable headers installed you can return to this selection " +#~ "with:" +#~ msgstr "" +#~ "Chọn làm như thế thì những mô-đun WACOM sẽ được biên dịch vào một gói nhị " +#~ "phân Debian, dùng cấu hình hạt nhân cục bộ bạn sẽ được nhắc xác định. Bạn " +#~ "phải hoặc đã cài đặt một gói « kernel-headers-* » (phần đầu hạt nhân) " +#~ "thích hợp với hạt nhân sẽ dùng với mô-đun WACOM, hoặc đã cấu hình thích " +#~ "hợp một cây mã nguồn hạt nhân. Nếu hiện thời bạn chưa có một của cả hai " +#~ "điều này, lúc này bạn không nên chọn biên dịch mô-đun WACOM. Một khi bạn " +#~ "đá cài đặt phần đầu hạt nhân thích hợp, có thể trở về phần này, dùng lệnh " +#~ "cấu hình lại:" + +#~ msgid "dpkg-reconfigure wacom-kernel-source" +#~ msgstr "dpkg-reconfigure wacom-kernel-source" + +#~ msgid "" +#~ "Alternatively, you might prefer to build it manually. The source to do " +#~ "this can be found in /usr/src/modules/wacom. You may use a tool like " +#~ "make-kpkg(1) or `fakeroot debian/rules kdist [ KSRC=... KVERS=... ]` to " +#~ "create a Debian package as above, or you can simply `configure && make` " +#~ "and install it by hand." +#~ msgstr "" +#~ "Hoặc có lẽ bạn thích tự xây dựng nó. Có thể tìm mã nguồn cho nó trong « /" +#~ "usr/src/modules/wacom ». Có thể sử dụng công cụ như « make-kpkg(1) » hay " +#~ "« fakeroot debian/rules kdist [ KSRC=... KVERS=... ] » để tạo một gói " +#~ "Debian như nói trên, hoặc đơn giản sử dụng lệnh « configure && make " +#~ "» (cấu hình và làm) để tự cài đặt nó." + +#~ msgid "" +#~ "Note this package may replace some modules that were originally built " +#~ "with your running kernel. You should ensure the original modules can be " +#~ "replaced in the event of trouble before installing the resulting " +#~ "package. Also if you have already built a wacom-kernel-modules package " +#~ "in this way using the same kernel version then that package may be " +#~ "overwritten. You should rename or relocate it before continuing if you " +#~ "wish to preserve it." +#~ msgstr "" +#~ "Ghi chú rằng gói này có thể thay thế một số mô-đun đã được xây dựng ban " +#~ "đầu với hạt nhân đang chạy. Bạn nên đảm bảo những mô-đun gốc có thể được " +#~ "thay thế nếu gặp lỗi, trước khi cài đặt gói kết quả. Hơn nữa, nếu bạn đã " +#~ "xây dựng một gói « wacom-kernel-modules » bằng cách này lần trước, dùng " +#~ "cùng một phiên bản hạt nhân với điều đang chạy, gói đó có thể bị ghi đè. " +#~ "Bạn cũng nên thay đổi tên nó, hoặc di chuyển nó, trước khi tiếp tục nếu " +#~ "bạn muốn giữ lại nó." + +#~ msgid "" +#~ "The directory you have provided is not a valid Linux headers location." +#~ msgstr "" +#~ "Bạn đã cung cấp một thư mục không phải vị trí phần đầu Linux hợp lệ." + +#~ msgid "dpkg -i wacom-kernel-module-.deb" +#~ msgstr "dpkg -i wacom-kernel-module-.deb" + +#~ msgid "" +#~ "Unfortunately that cannot be done automatically at this stage because " +#~ "dpkg is not able to be called recursively." +#~ msgstr "" +#~ "Tiếc là không thể tự động làm như thế tại giai đoạn này, vì không thể gọi " +#~ "trình dpkg một cách đệ qui." + +#~ msgid "" +#~ "Once the module package is installed, you probably won't need the wacom-" +#~ "kernel-source package anymore unless you plan to update your kernel again " +#~ "later. In that case you can safely purge it completely with 'dpkg -P " +#~ "wacom-kernel-source'. Otherwise, you will be able to rebuild the wacom-" +#~ "kernel-modules package in this manner at any time with `dpkg-reconfigure " +#~ "wacom-kernel-source`. You will be prompted once again for the location " +#~ "of the kernel headers to use." +#~ msgstr "" +#~ "Một khi gói mô-đun đã được cài đặt, bạn rất có thể không còn cần thiết " +#~ "lại gói « wacom-kernel-source », nếu bạn không định cập nhật lại hạt nhân " +#~ "về sau. Có thể tẩy hoàn toàn bằng lệnh « dpkg -P wacom-kernel-source ». " +#~ "Có định thì có khả năng xây dựng lại gói « wacom-kernel-source » bằng " +#~ "cách này vào bất cứ lúc nào bằng lệnh cấu hình lại « dpkg-reconfigure " +#~ "wacom-kernel-source ». Nó sẽ nhắc bạn lần nữa nhập vị trí của phần đầu " +#~ "hạt nhân cần dùng." + +#~ msgid "" +#~ "If you update the wacom-kernel-source package at some later time (or " +#~ "remove it without purging, then reinstall) the answers you have given " +#~ "here will be used to repeat this process and create a new module package " +#~ "for you to install." +#~ msgstr "" +#~ "Nếu bạn cập nhật gói « wacom-kernel-source » lần sau (hoặc gỡ bỏ nó không " +#~ "có tẩy), những trả lời bạn đã nhập vào đây sẽ được dùng để chạy lại tiến " +#~ "trình này và tạo một gói mô-đun mới cho bạn cài đặt." + +#~ msgid "The wacom module must be loaded before the HID module." +#~ msgstr "Mô-đun wacom phải được nạp trước mô-đun HID." + +#~ msgid "" +#~ "If the wacom driver is not loaded before the normal Linux HID driver then " +#~ "the HID will have already claimed the device as a generic mouse and the " +#~ "wacom driver will be ignored. This package may also replace some modules " +#~ "out of your running kernel. It is typically not safe for this installer " +#~ "to automatically unload the HID module and insert the wacom driver " +#~ "beneath it, nor to automatically remove any of the other affected " +#~ "modules. If you wish to install the wacom module without rebooting the " +#~ "machine you will need to shut down all processes that use the HID module " +#~ "and its dependents and unload them manually before installing the wacom " +#~ "module. The simplest thing to do is reboot the machine at some " +#~ "convenient opportunity after the package install is complete and let the " +#~ "new modules configuration determine the proper loading order." +#~ msgstr "" +#~ "Nếu trình điều khiển wacom không được nạp trước trình điều khiển HID " +#~ "Linux thường, HID đã lấy thiết bị làm con chuột chung: trình điều khiển " +#~ "wacom bị bỏ qua. Gói này cũng có thể thay thế một số mô-đun trong hạt " +#~ "nhân đang chạy. Thường không phải an toàn khi trình cài đặt này tự động " +#~ "bỏ nạp mô-đun HID rồi chèn trình điều khiển wacom bên dưới nó, hoặc tự " +#~ "động gỡ bỏ mô-đun bị tác động khác nào. Muốn cài đặt mô-đun wacom mà " +#~ "không khởi động lại máy thì bạn cần phải tắt mọi tiến trình dùng mô-đun " +#~ "HID và điều phụ thuộc vào nó, rồi tự bỏ nạp chúng trước khi cài đặt mô-" +#~ "đun wacom. Phương pháp dễ nhất là khởi động lại máy tại điểm thời tiện " +#~ "sau khi cài đặt xong gói, cho phép cấu hình mô-đun mới quyết định thứ tự " +#~ "nạp đúng." + +#~ msgid "What is the location of your Linux headers?" +#~ msgstr "Các phần đầu Linux ở đâu?" --- wacom-tools-0.8.1.6.orig/debian/po/fr.po +++ wacom-tools-0.8.1.6/debian/po/fr.po @@ -0,0 +1,187 @@ +# Translation of wacom-tools debconf templates to French +# Copyright (C) 2001-2007 Jean-Luc Coulon (f5ibh) +# Copyright (C) 2007 Christian Perrier +# This file is distributed under the same license as the wacom-tools package. +# +# Christian Perrier , 2007. +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-10-14 09:09+0200\n" +"Last-Translator: Christian Perrier \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "Les modules wacom doivent-ils être compilés automatiquement ?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Pour pouvoir utiliser toutes les possibilités de la tablette graphique " +"Wacom, vous devez compiler et installer les modules correspondant à la " +"version du noyau Linux." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Si vous choisissez cette option, un paquet binaire des modules Wacom sera " +"construit en utilisant une configuration locale du noyau." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"Cette opération requiert qu'un paquet linux-headers-* ou une arborescence " +"des sources du noyau soit installés. Ne choisissez pas cette option si " +"aucune de ces deux conditions n'est remplie. Vous pouvez revenir à cette " +"étape plus tard avec la commande « dpkg-reconfigure wacom-kernel-source »." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "Faut-il créer un paquet binaire wacom-kernel-modules ?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Cette opération pourrait remplacer certains modules compilés originellement " +"avec le noyau actuellement utilisé." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Emplacement des en-têtes du noyau Linux :" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Afin de compiler les modules Wacom, veuillez préciser l'emplacement où se " +"trouvent les en-têtes du noyau Linux de façon à pouvoir les utiliser." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Les en-têtes du noyau Linux fournis par le paquet kernel-headers-* se " +"trouvent dans /usr/src/kernel-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "Indiquer un autre répertoire pour les en-têtes du noyau Linux ?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "" +"Le répertoire indiqué ne contient pas d'en-têtes valables du noyau Linux." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Opérations nécessaires après la compilation du module" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"Le paquet wacom-kernel-modules sera construit dans /usr/src/modules mais " +"devra être installé manuellement. Vous pourrez le faire vous-même avec la " +"commande « dpkg -i wacom-kernel-module-.deb »." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Une fois le paquet des modules installé, le paquet wacom-kernel-source ne " +"sera sans doute plus nécessaire sauf pour construire de nouveaux paquets si " +"le noyau est mis à jour plus tard. Si le paquet wacom-kernel-source est mis " +"à jour, cette procédure sera exécutée à nouveau en utilisant les choix " +"actuels." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "Faut-il afficher les messages de construction du paquet ?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"Le processus de construction d'un paquet binaire peut afficher de nombreux " +"messages. Les visualiser peut être utile si des problèmes se produisent lors " +"de la construction." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "Faut-il effacer les paquets wacom-kernel-modules ?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"Des paquets binaires wacom-kernel-modules subsistent dans /usr/src(/" +"modules). Une fois installés, il ne sont plus utiles et peuvent être " +"supprimés sauf si vous souhaitez les conserver à titre de sauvegarde ou dans " +"le but de les réinstaller." --- wacom-tools-0.8.1.6.orig/debian/po/fi.po +++ wacom-tools-0.8.1.6/debian/po/fi.po @@ -0,0 +1,179 @@ +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-10-08 12:50+0200\n" +"Last-Translator: Esko Arajärvi \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Finnish\n" +"X-Poedit-Country: FINLAND\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "Käännetäänkö Wacom-moduulit automaattisesti?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Saadaksesi kaiken irti Wacom-piirtopöydästä sinun tulee kääntää ja asentaa " +"tarjotut Linux-ytimen moduulit." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Jos valitset tämän vaihtoehdon, Wacom-moduulit käännetään konekieliseksi " +"paketiksi käyttäen paikallisen ytimen asetuksia." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"Kääntäminen vaatii joko paketin linux-headers-* tai ytimen täyden " +"lähdekoodipuun. Jos kumpikaan näistä ei ole saatavilla, älä valitse tätä " +"vaihtoehtoa. Voit palata takaisin tähän kyselyyn myöhemmin ajamalla komennon " +"'dpkg-reconfigure wacom-kernel-source'." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "Luodaanko konekielinen paketti wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Tämä saattaa korvata joitain moduuleja, jotka alunperin käännettiin käytössä " +"olevan kernelin kanssa." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Linuxin otsaketiedostojen sijainti:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Anna Linuxin ytimen otsaketiedostojen sijainti Wacom-moduulien kääntämistä " +"varten." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Paketin linux-headers-* tarjoamat otsakkeet sijaitsevat hakemistossa /usr/" +"src/linux-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "Annatko toisen Linux-otsaketiedostojen hakemiston?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "" +"Antamastasi hakemistosta ei löytynyt kelvollisia Linux-otsaketiedostoja." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Moduulien kääntämisen jälkeiset toimenpiteet" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"Paketti wacom-kernel-modules käännetään hakemistoon /usr/src/modules, mutta " +"sitä ei voida automaattisesti asentaa. Sinun pitää asentaa se käsin " +"komennolla 'dpkg -i wacom-kernel-module-.deb'." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Kun moduulipaketti on asennettu, pakettia wacom-kernel-source ei enää " +"tarvita, paitsi käännettäessä uusia paketteja ytimen päivityksen jälkeen. " +"Jos pakettia wacom-kernel-source päivitetään, nyt tehdyt toimenpiteet " +"toistetaan käyttäen alkuperäisiä vastauksiasi." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "Seurataanko moduulien kääntämisen edistymistä?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"Konekielisen paketin käännösprosessi saattaa tuottaa paljon tulostetta. " +"Siitä voi olla hyötyä, jos kääntämisen aikana ilmenee ongelmia." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "Poistetaanko wacom-kernel-modules-paketit?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"Hakemistossa /usr/src(/modules) on joitain konekielisiä wacom-kernel-modules-" +"paketteja. Kun ne on asennettu, niistä ei ole enää hyötyä ja ne voidaan " +"poistaa ellet halua säilyttää niitä varmuuskopiona tai uudelleenasennusta " +"varten." --- wacom-tools-0.8.1.6.orig/debian/po/templates.pot +++ wacom-tools-0.8.1.6/debian/po/templates.pot @@ -0,0 +1,155 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" --- wacom-tools-0.8.1.6.orig/debian/po/POTFILES.in +++ wacom-tools-0.8.1.6/debian/po/POTFILES.in @@ -0,0 +1,2 @@ +[type: gettext/rfc822deb] wacom-kernel-source.templates +[type: gettext/rfc822deb] wacom.po-templates --- wacom-tools-0.8.1.6.orig/debian/po/pt.po +++ wacom-tools-0.8.1.6/debian/po/pt.po @@ -0,0 +1,184 @@ +# translation of pt.po_[nZRXia].po to Portuguese +# Portuguese translation of wacom-tools debconf messages. +# Copyright (C) 2007 Carlos Lisboa +# This file is distributed under the same license as the wacom-tools package. +# +# Carlos Lisboa , 2007. +# Miguel Figueiredo , 2007. +msgid "" +msgstr "" +"Project-Id-Version: pt.po_[nZRXia]\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-10-12 20:29+0100\n" +"Last-Translator: Miguel Figueiredo \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "Compilar os módulos wacom automaticamente?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Para fazer uso completo de uma mesa digitalizadora Wacom necessita que você " +"compile e instale os módulos disponibilizados em concordância com o kernel " +"Linux a correr." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Se escolher esta opção, os módulos Wacom irão ser compilados para um pacote " +"binário usando as configurações do kernel local." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"Isto necessita de um pacote linux-headers-* ou a árvore completa da fonte do " +"kernel. Não escolha esta opção se nenhum dos dois estiver disponível. Pode " +"voltar a este passo novamente com: 'dpkg-reconfigure wacom-kernel-source'." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "Criar o pacote binário wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Isto poderá substituir alguns módulos que tenham sido construidos " +"originalmente com o kernel actual." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Local dos ficheiros header Linux:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Para poder compilar os módulos Wacom, por favor introduza o local dos " +"'headers' do kernel Linux que pretende usar." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Os 'Headers' Linux disponibilizados pelo pacote linux-headers-* estão " +"localizados em /usr/src/kernel-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "Deseja especificar um directório diferente para os 'headers' Linux?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "Não foram encontrados headers Linux válidos no local especificado." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Operações necessárias após a compilação dos módulos" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"O pacote wacom-kernel-modules será compilado em /usr/src/modules, mas não " +"poderá ser instalado automaticamente. Terá de o instalar manualmente com " +"'dpkg -i wacom-kernel-module-.deb'." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Uma vez o pacote do módulo instalado, o pacote wacom-kernel-source não é " +"mais necessário excepto para compilar novos pacotes após actualizações " +"posteriores ao kernel. Se o pacote wacom-kernel-source for actualizado então " +"este procedimento será repetido usando as suas respostas iniciais." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "Seguir o progresso da compilação do módulo?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"O processo de construir um pacote binário poderá produzir bastante saída de " +"texto. Pode ser útil se ocorrerem problemas durante a construção." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "Apagar os pacotes wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"Alguns pacotes binários wacom-kernel-modules permanecem em /usr/src(/" +"modules). Assim que os tiver instalado não necessitará mais deles e poderão " +"ser removidos, a não ser que queira guardá-los como salvaguarda ou para " +"poder reinstalá-los." --- wacom-tools-0.8.1.6.orig/debian/po/sv.po +++ wacom-tools-0.8.1.6/debian/po/sv.po @@ -0,0 +1,315 @@ +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# Developers do not need to manually edit POT or PO files. +# , fuzzy +# +# +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools 0.7.4.1-4\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2008-10-25 02:10+0100\n" +"Last-Translator: Martin Bagge \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "Ska wacom-modulerna byggas automatiskt?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Fr att kunna anvnda en wacom-ritplatta fullt ut behver du bygga och " +"installera passande moduler fr din nuvarande Linuxkrna." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Om du vljer att bygga modulerna automatiskt s kommer ett binrpaket byggas " +"utifrn din krnas instllningar." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"Fr att detta ska fungera mste antingen ett linux-headers-*-paket eller " +"hela kllkoden fr krnan finnas tillgngligt.Anvnd inte detta alternativ " +"om inga av dessa finns tillgngliga. Du kan terkomma till detta val senare " +"genom att kra kommandot 'dpkg-reconfigure wacom-kernel-source'." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "Vill du skapa det binra paketet wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Detta kan erstta ngra moduler som tidigare byggts fr den aktuella krnan." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Plats fr Linux huvudfiler:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Fr att kunna bygga Wacom-modulerna mste skvgen till Linux huvudfiler " +"anges s att dessa kan anvndas." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Nr huvudfilerna tillhandahlls av ett kernel-headers-*-paket, finns dessa " +"i /usr/src/kernel-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "Vill du ange en annan katalog med huvudfiler?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "Huvudfiler fr Linux fanns inte i katalogen du angav." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Vad som ska gras efter modulbyggnationen" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"Paketet wacom-kernel-modules kommer att byggas i /usr/src/modules. Du kommer " +"att behva installera det sjlv efter det har skapats genom att kra 'dpkg -" +"i wacom-kernel-module-.deb'." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Nr modulpaketet r installerat s behvs inte lngre paketet wacom-kernel-" +"source, frutom fr att bygga nya moduler efter en uppgradering av krnan. " +"Om paketet wacom-kernel-source uppgraderas kommer denna procedur att " +"uppreapas med dina ursprungssvar som standardvrden." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "Vill du se frloppet fr modulbyggnationen?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"Processen med att bygga ett binrpaket kan producera en hel del utdata, om " +"problem uppstr kan den vara vrdefull att se." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "Vill du ta bort wacom-kernel-modules-paketen?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"Det finns binra wacom-kernel-moduler-paket kvar i /usr/src(/modules). Nr " +"de har installerats behver du inte dessa paket lngre och kan tas bort om " +"du inte vill ha dem som backup eller fr att kunna installera om modulerna." + +#~ msgid "Would you like the wacom modules to be compiled automatically?" +#~ msgstr "Vill du att wacom-modulerna ska byggas automatiskt?" + +#~ msgid "" +#~ "If you opt to do this, the wacom modules will be compiled into a Debian " +#~ "binary package using a local kernel configuration which you will be " +#~ "required to specify. You must have either a kernel-headers-* package " +#~ "installed to suit the kernel you wish to use it with, or have a suitably " +#~ "configured kernel source tree available. If you do not currently have " +#~ "either of these available you should choose not to do this at present. " +#~ "Once you have suitable headers installed you can return to this selection " +#~ "with:" +#~ msgstr "" +#~ "Om du bestmmer dig fr att gra det, kommer wacom-modulerna att byggas " +#~ "till ett binrt Debianpaket med en lokal konfiguration fr krnan som du " +#~ "kommer att behva vlja. Du mste antingen ha ett \"kernel-headers-*\"-" +#~ "paket installerat som passar krnan som du vill anvnda dem med, eller " +#~ "att ha ett trd med krnans kllkod som r rtt konfigurerat " +#~ "tillgngligt. Om du just nu inte har ngon av dessa tillgngliga ska du " +#~ "vlja att inte gra det just nu. Nr du sedan har passande header-filer " +#~ "installerade kan du komma tillbaka till detta val genom att kra:" + +#~ msgid "dpkg-reconfigure wacom-kernel-source" +#~ msgstr "dpkg-reconfigure wacom-kernel-source" + +#~ msgid "" +#~ "Alternatively, you might prefer to build it manually. The source to do " +#~ "this can be found in /usr/src/modules/wacom. You may use a tool like " +#~ "make-kpkg(1) or `fakeroot debian/rules kdist [ KSRC=... KVERS=... ]` to " +#~ "create a Debian package as above, or you can simply `configure && make` " +#~ "and install it by hand." +#~ msgstr "" +#~ "Alternativt kanske du fredrar att bygga dessa moduler manuellt. " +#~ "Kllkoden som behvs finns under /usr/src/modules/wacom. Du kan t.ex. " +#~ "anvnda make-kpkg(1) eller \"fakeroot debian/rules kdist [ KSRC=... " +#~ "KVERS=... ]\" fr att skapa ett Debianpaket som ovan, eller helt enkelt " +#~ "anvnda \"configure && make\" och installera dem fr hand." + +#~ msgid "" +#~ "Note this package may replace some modules that were originally built " +#~ "with your running kernel. You should ensure the original modules can be " +#~ "replaced in the event of trouble before installing the resulting " +#~ "package. Also if you have already built a wacom-kernel-modules package " +#~ "in this way using the same kernel version then that package may be " +#~ "overwritten. You should rename or relocate it before continuing if you " +#~ "wish to preserve it." +#~ msgstr "" +#~ "Observera att detta paket kan skriva ver ngra moduler som frn brjan " +#~ "byggdes med din nuvarande krna. Du br skerstlla att originalmodulerna " +#~ "kan ersttas s att inget gr fel, innan du fortstter att installera det " +#~ "resulterande paketet. Ifall du redan har byggt ett wacom-kernel-modules-" +#~ "paket s hr med samma krnversion s kan det paketet komma att skrivas " +#~ "ver. Vill du behlla det mste du dpa om eller flytta det innan du " +#~ "fortstter." + +#~ msgid "" +#~ "The directory you have provided is not a valid Linux headers location." +#~ msgstr "" +#~ "Katalogen som du har angivit r inte en giltig plats fr header-filer." + +#~ msgid "dpkg -i wacom-kernel-module-.deb" +#~ msgstr "dpkg -i wacom-kernel-module-.deb" + +#~ msgid "" +#~ "Unfortunately that cannot be done automatically at this stage because " +#~ "dpkg is not able to be called recursively." +#~ msgstr "" +#~ "Tyvrr kan detta inte gras automatiskt i detta skede eftersom dpkg inte " +#~ "kan anropas rekursivt." + +#~ msgid "" +#~ "Once the module package is installed, you probably won't need the wacom-" +#~ "kernel-source package anymore unless you plan to update your kernel again " +#~ "later. In that case you can safely purge it completely with 'dpkg -P " +#~ "wacom-kernel-source'. Otherwise, you will be able to rebuild the wacom-" +#~ "kernel-modules package in this manner at any time with `dpkg-reconfigure " +#~ "wacom-kernel-source`. You will be prompted once again for the location " +#~ "of the kernel headers to use." +#~ msgstr "" +#~ "Nr modulpaketet r installerat kommer du antagligen inte behva paketet " +#~ "wacom-kernel-source lngre svida du inte planerar att uppdatera din " +#~ "krna igen senare. I det fallet kan du med skerhet rensa ut det med " +#~ "\"dpkg -P wacom-kernel-source\". Dock kan du bygga om paketet wacom-" +#~ "kernel-modules p det hr sttet nr som helst med \"dpkg-reconfigure " +#~ "wacom-kernel-source\" om du behller det. Du kommer att bli frgad nnu " +#~ "en gng fr platsen fr header-filerna som ska anvndas." + +#~ msgid "" +#~ "If you update the wacom-kernel-source package at some later time (or " +#~ "remove it without purging, then reinstall) the answers you have given " +#~ "here will be used to repeat this process and create a new module package " +#~ "for you to install." +#~ msgstr "" +#~ "Om du uppdaterar paketet wacom-kernel-source senare (eller tar bort det " +#~ "utan att rensa, sedan installerar om) kommer svaren som du har angivit " +#~ "hr att anvndas igen fr att upprepa den hr processen och skapa ett " +#~ "nytt modulpaket t dig fr installation." + +#~ msgid "The wacom module must be loaded before the HID module." +#~ msgstr "Wacom-modulen mste lses in fre HID-modulen." + +#~ msgid "" +#~ "If the wacom driver is not loaded before the normal Linux HID driver then " +#~ "the HID will have already claimed the device as a generic mouse and the " +#~ "wacom driver will be ignored. This package may also replace some modules " +#~ "out of your running kernel. It is typically not safe for this installer " +#~ "to automatically unload the HID module and insert the wacom driver " +#~ "beneath it, nor to automatically remove any of the other affected " +#~ "modules. If you wish to install the wacom module without rebooting the " +#~ "machine you will need to shut down all processes that use the HID module " +#~ "and its dependents and unload them manually before installing the wacom " +#~ "module. The simplest thing to do is reboot the machine at some " +#~ "convenient opportunity after the package install is complete and let the " +#~ "new modules configuration determine the proper loading order." +#~ msgstr "" +#~ "Om wacom-drivrutinen inte lses in fre den normala Linux HID-drivrutinen " +#~ "kommer HID redan att lagt beslag p enheten som en generisk mus och wacom-" +#~ "drivrutinen kommer att ignoreras. Det hr paketet kan ven erstta vissa " +#~ "moduler utanfr din krande krna. Det r vanligtvis inte skert att den " +#~ "hr installeraren tar bort den krande HID-modulen frn minnet och " +#~ "infogar wacom-drivrutinen under det, inte heller ta automatiskt bort " +#~ "ngra av de andra pverkade modulerna. Om du nskar att installera wacom-" +#~ "modulen utan att starta om maskinen behver du stnga ner alla processor " +#~ "som anvnder HID-modulen och dess beroenden och ta bort dem manuellt frn " +#~ "minnet innan wacom-modulen installeras. Det enklaste sttet att gra det " +#~ "p r att starta om maskinen p lmplig tidpunkt efter att installationen " +#~ "av paketet r klart och lta konfigurationen av de nya modulerna " +#~ "faststlla den korrekta inlsningsordningen." --- wacom-tools-0.8.1.6.orig/debian/po/nl.po +++ wacom-tools-0.8.1.6/debian/po/nl.po @@ -0,0 +1,189 @@ +# Dutch wacom-tools po-debconf translation, +# Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the wacom-tools package. +# Vincent Zweije , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools 0.7.9.3-2\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2008-01-20 21:31+0000\n" +"Last-Translator: Vincent Zweije \n" +"Language-Team: Debian-Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "" +"De Wacom modules automatisch vertalen?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Om volledig gebruik te kunnen maken van een Wacom tekentablet dient u de " +"meegeleverde modules te vertalen zodat ze bij uw draaiende Linux kernel " +"passen." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Als u deze optie accepteert, worden de Wacom modules vertaald tot een binair " +"pakket met gebruik van de huidige kernelinstellingen." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"Dit vereist ofwel een linux-headers-* pakket ofwel de volledige kernel " +"broncode. Weiger deze optie indien geen van deze twee aanwezig is. U kunt " +"later op dit punt terugkomen met 'dpkg-reconfigure wacom-kernel-source'." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "" +"Een binair wacom-kernel-modules pakket aanmaken?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Dit kan sommige modules vervangen die oorspronkelijk met de draaiende kernel " +"werden gebouwd." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "" +"Locatie van de Linux header-files:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Teneinde de Wacom modules te vertalen, gelieve de locatie van de Linux " +"kernel-headers op te geven die ze moeten gebruiken." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Headers die door een linux-headers-* pakket worden aangeleverd bevinden " +"zich in /usr/src/linux-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "" +"Een andere Linux-headers map opgeven?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "" +"In de door u opgegeven map werden geen geldige Linux-headers aangetroffen." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "" +"Vereiste acties na vertaling van de modules" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"Het wacom-kernel-modules pakket zal worden gebouwd in /usr/src/modules, " +"maar het kan niet automatisch worden genstalleerd. U dient het handmatig " +"te installeren met 'dpkg -i wacom-kernel-module-.deb'." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Zodra het modulepakket is genstalleerd is het wacom-kernel-source pakket " +"niet meer nodig, behalve om een nieuw pakket samen te stellen nadat de kernel " +"is opgewaardeerd. Indien het wacom-kernel-source pakket wordt opgewaardeerd, " +"dan wordt deze procedure herhaald met uw oorspronkelijke antwoorden." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "" +"De voortgang van het vertaalproces volgen?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"Het proces van het bouwen van een binair pakket kan veel uitvoer " +"genereren. Het kan nuttig zijn indien bij het bouwen problemen optreden." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "" +"De wacom-kernel-modules pakketten verwijderen?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"Sommige binaire wacom-kernel-modules pakketten blijven achter in " +"/usr/src(/modules). Zodra ze zijn genstalleerd zijn ze overbodig, en " +"kunnen ze worden verwijderd tenzij u ze wenst te behouden voor backup of " +"herinstallatie." --- wacom-tools-0.8.1.6.orig/debian/po/pt_BR.po +++ wacom-tools-0.8.1.6/debian/po/pt_BR.po @@ -0,0 +1,185 @@ +# wacom-tools Brazilian Portuguese translation +# Copyright (C) 2007 THE wacom-tools'S COPYRIGHT HOLDER +# This file is distributed under the same license as the wacom-tools package. +# Felipe Augusto van de Wiel (faw) , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: wacom-tools (20071006)\n" +"Report-Msgid-Bugs-To: ron@debian.org\n" +"POT-Creation-Date: 2007-10-17 18:52+0930\n" +"PO-Revision-Date: 2007-10-06 15:16-0300\n" +"Last-Translator: Felipe Augusto van de Wiel (faw) \n" +"Language-Team: l10n portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"pt_BR utf-8\n" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "Automatically compile the Wacom modules?" +msgstr "Compilar automaticamente os módulos Wacom?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 +msgid "" +"In order to make full use of a Wacom graphics tablet you need to compile and " +"install the provided modules to suit the running Linux kernel." +msgstr "" +"Para fazer uso completo de um \"tablet\" gráfico Wacom você precisa compilar " +"e instalar os módulos fornecidos para combinar com o kernel Linux em " +"execução." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"If you choose this option, the Wacom modules will be compiled into a binary " +"package using local kernel configuration settings." +msgstr "" +"Se você escolher esta opção, os módulos Wacom serão compilados em um pacote " +"binário usando as configurações do kernel local." + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:1001 ../wacom-kernel-source.templates:2001 +msgid "" +"This requires either a linux-headers-* package or the full kernel source " +"tree. Do not choose this option if neither of these is available. You can " +"return to this step again later with: 'dpkg-reconfigure wacom-kernel-" +"source'." +msgstr "" +"Isto requer ou um pacote linux-headers-* ou a árvore de código fonte " +"completa do kernel. Não escolha esta opção se nenhum destes estiver " +"disponível. Você pode retornar a este passo posteriormente com: 'dpkg-" +"reconfigure wacom-kernel-source'." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "Create a binary wacom-kernel-modules package?" +msgstr "Criar um pacote binário wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:2001 +msgid "" +"This may replace some modules that were originally built with the running " +"kernel." +msgstr "" +"Isto pode substituir alguns módulos que foram originalmente construídos com " +"o kernel em execução." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "Linux header files location:" +msgstr "Localização dos arquivos de cabeçalho Linux:" + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"In order to compile the Wacom modules, please enter the location of the " +"Linux kernel headers for them to use." +msgstr "" +"Para compilar os módulos Wacom, por favor, informe a localização dos " +"cabeçalhos do kernel Linux a serem usados." + +#. Type: string +#. Description +#: ../wacom-kernel-source.templates:3001 +msgid "" +"Headers provided by a linux-headers-* package are located in /usr/src/linux-" +"headers-*." +msgstr "" +"Cabeçalhos fornecidos por um pacote linux-headers-* estão localizados em /" +"usr/src/linux-headers-*." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "Specify a different Linux headers directory?" +msgstr "Especificar um diretório de cabeçalhos Linux diferente?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:4001 +msgid "No valid Linux headers were found in the directory you specified." +msgstr "" +"Não foram encontrados cabeçalhos Linux válidos no diretório que você " +"especificou." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "Operations needed after modules compilation" +msgstr "Operações necessárias após a compilação dos módulos" + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"The wacom-kernel-modules package will be built in /usr/src/modules, but " +"cannot be automatically installed. You will have to install it manually with " +"'dpkg -i wacom-kernel-module-.deb'." +msgstr "" +"O pacote wacom-kernel-modules será construído em /usr/src/modules, mas não " +"pode ser automaticamente instalado. Você terá que instalá-lo manualmente com " +"'dpkg -i wacom-kernel-module-.deb'." + +#. Type: note +#. Description +#: ../wacom-kernel-source.templates:5001 +msgid "" +"Once the module package is installed, the wacom-kernel-source package is no " +"longer required except to build new packages after later kernel updates. If " +"the wacom-kernel-source package is updated then this procedure will be " +"repeated using your original answers." +msgstr "" +"Uma vez que o pacote de módulo está instalado, o pacote wacom-kernel-source " +"não é mais necessário, exceto para construir novos pacotes depois de futuras " +"atualizações de kernel. Se o pacote wacom-kernel-source é atualizado, então " +"este procedimento será repetido usando suas respostas originais." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "Follow the module compilation progress?" +msgstr "Acompanhar o progresso da compilação do módulo?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:6001 +msgid "" +"The process of building a binary package may produce quite a lot of output. " +"It may be useful if problems arise during the build." +msgstr "" +"O progresso de construção de um pacote binário pode produzir bastante saída. " +"Pode ser útil se problemas aparecerem durante a construção." + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "Delete the wacom-kernel-modules packages?" +msgstr "Remover os pacotes wacom-kernel-modules?" + +#. Type: boolean +#. Description +#: ../wacom-kernel-source.templates:7001 +msgid "" +"Some binary wacom-kernel-modules packages remain in /usr/src(/modules). Once " +"they have been installed, they're not useful anymore and may be removed " +"unless you want to keep them for backup or re-installation purposes." +msgstr "" +"Alguns pacotes binários wacom-kernel-modules permanecem em /usr/src(/" +"modules). Uma vez que você tenha-os instalado, eles não são mais úteis e " +"podem ser removidos, a menos que você queira deixá-lo para fins de cópia de " +"segurança (\"backup\") ou reinstalação." --- wacom-tools-0.8.1.6.orig/debian/patches/series +++ wacom-tools-0.8.1.6/debian/patches/series @@ -0,0 +1 @@ +100_allow_eraser.patch --- wacom-tools-0.8.1.6.orig/debian/patches/100_allow_eraser.patch +++ wacom-tools-0.8.1.6/debian/patches/100_allow_eraser.patch @@ -0,0 +1,12 @@ +diff -Naurp wacom-tools-0.7.9.8/linuxwacom/src/xdrv/wcmCommon.c wacom-tools-0.7.9.8-eq1/linuxwacom/src/xdrv/wcmCommon.c +--- wacom-tools-0.7.9.8/linuxwacom/src/xdrv/wcmCommon.c 2008-02-29 18:58:44.000000000 -0500 ++++ wacom-tools-0.7.9.8-eq1/linuxwacom/src/xdrv/wcmCommon.c 2008-08-13 00:28:51.000000000 -0400 +@@ -265,7 +265,7 @@ static void xf86WcmSendButtons(LocalDevi + "buttons=%d for %s\n", buttons, local->name)); + + /* Tablet PC buttons. */ +- if ( common->wcmTPCButton && !IsCursor(priv) && !IsPad(priv) && !IsEraser(priv) ) ++ if ( common->wcmTPCButton && !IsCursor(priv) && !IsPad(priv) ) + { + if ( buttons & 1 ) + { --- wacom-tools-0.8.1.6.orig/debian/xsfbs/xsfbs.sh +++ wacom-tools-0.8.1.6/debian/xsfbs/xsfbs.sh @@ -0,0 +1,931 @@ +# $Id$ + +# This is the X Strike Force shell library for X Window System package +# maintainer scripts. It serves to define shell functions commonly used by +# such packages, and performs some error checking necessary for proper operation +# of those functions. By itself, it does not "do" much; the maintainer scripts +# invoke the functions defined here to accomplish package installation and +# removal tasks. + +# If you are reading this within a Debian package maintainer script (e.g., +# /var/lib/dpkg)info/PACKAGE.{config,preinst,postinst,prerm,postrm}), you can +# skip past this library by scanning forward in this file to the string +# "GOBSTOPPER". + +SOURCE_VERSION=@SOURCE_VERSION@ +OFFICIAL_BUILD=@OFFICIAL_BUILD@ + +# Use special abnormal exit codes so that problems with this library are more +# easily tracked down. +SHELL_LIB_INTERNAL_ERROR=86 +SHELL_LIB_THROWN_ERROR=74 +SHELL_LIB_USAGE_ERROR=99 + +# old -> new variable names +if [ -z "$DEBUG_XORG_PACKAGE" ] && [ -n "$DEBUG_XFREE86_PACKAGE" ]; then + DEBUG_XORG_PACKAGE="$DEBUG_XFREE86_PACKAGE" +fi +if [ -z "$DEBUG_XORG_DEBCONF" ] && [ -n "$DEBUG_XFREE86_DEBCONF" ]; then + DEBUG_XORG_DEBCONF="$DEBUG_XFREE86_DEBCONF" +fi + +# initial sanity checks +if [ -z "$THIS_PACKAGE" ]; then + cat >&2 < on the World Wide Web for +instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the +"doc-debian" package, or install the "reportbug" package and use the command of +the same name to file a report against version $SOURCE_VERSION of this package. +EOF + exit $SHELL_LIB_USAGE_ERROR +fi + +if [ -z "$THIS_SCRIPT" ]; then + cat >&2 < on the World Wide Web for +instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the +"doc-debian" package, or install the "reportbug" package and use the command of +the same name to file a report against version $SOURCE_VERSION of the +"$THIS_PACKAGE" package. +EOF + exit $SHELL_LIB_USAGE_ERROR +fi + +ARCHITECTURE="$(dpkg --print-installation-architecture)" + +if [ "$1" = "reconfigure" ] || [ -n "$DEBCONF_RECONFIGURE" ]; then + RECONFIGURE="true" +else + RECONFIGURE= +fi + +if ([ "$1" = "install" ] || [ "$1" = "configure" ]) && [ -z "$2" ]; then + FIRSTINST="yes" +fi + +if [ -z "$RECONFIGURE" ] && [ -z "$FIRSTINST" ]; then + UPGRADE="yes" +fi + +trap "message;\ + message \"Received signal. Aborting $THIS_PACKAGE package $THIS_SCRIPT script.\";\ + message;\ + exit 1" HUP INT QUIT TERM + +reject_nondigits () { + # syntax: reject_nondigits [ operand ... ] + # + # scan operands (typically shell variables whose values cannot be trusted) for + # characters other than decimal digits and barf if any are found + while [ -n "$1" ]; do + # does the operand contain anything but digits? + if ! expr "$1" : "[[:digit:]]\+$" > /dev/null 2>&1; then + # can't use die(), because it wraps message() which wraps this function + echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_nondigits() encountered" \ + "possibly malicious garbage \"$1\"" >&2 + exit $SHELL_LIB_THROWN_ERROR + fi + shift + done +} + +reject_whitespace () { + # syntax: reject_whitespace [ operand ] + # + # scan operand (typically a shell variable whose value cannot be trusted) for + # whitespace characters and barf if any are found + if [ -n "$1" ]; then + # does the operand contain any whitespace? + if expr "$1" : "[[:space:]]" > /dev/null 2>&1; then + # can't use die(), because I want to avoid forward references + echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_whitespace() encountered" \ + "possibly malicious garbage \"$1\"" >&2 + exit $SHELL_LIB_THROWN_ERROR + fi + fi +} + +reject_unlikely_path_chars () { + # syntax: reject_unlikely_path_chars [ operand ... ] + # + # scan operands (typically shell variables whose values cannot be trusted) for + # characters unlikely to be seen in a path and which the shell might + # interpret and barf if any are found + while [ -n "$1" ]; do + # does the operand contain any funny characters? + if expr "$1" : '.*[!$&()*;<>?|].*' > /dev/null 2>&1; then + # can't use die(), because I want to avoid forward references + echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_unlikely_path_chars()" \ + "encountered possibly malicious garbage \"$1\"" >&2 + exit $SHELL_LIB_THROWN_ERROR + fi + shift + done +} + +# Query the terminal to establish a default number of columns to use for +# displaying messages to the user. This is used only as a fallback in the +# event the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while +# the script is running, and this cannot, only being calculated once.) +DEFCOLUMNS=$(stty size 2> /dev/null | awk '{print $2}') || true +if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" > /dev/null 2>&1; then + DEFCOLUMNS=80 +fi + +message () { + # pretty-print messages of arbitrary length + reject_nondigits "$COLUMNS" + echo "$*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} >&2 +} + +observe () { + # syntax: observe message ... + # + # issue observational message suitable for logging someday when support for + # it exists in dpkg + if [ -n "$DEBUG_XORG_PACKAGE" ]; then + message "$THIS_PACKAGE $THIS_SCRIPT note: $*" + fi +} + +warn () { + # syntax: warn message ... + # + # issue warning message suitable for logging someday when support for + # it exists in dpkg; also send to standard error + message "$THIS_PACKAGE $THIS_SCRIPT warning: $*" +} + +die () { + # syntax: die message ... + # + # exit script with error message + message "$THIS_PACKAGE $THIS_SCRIPT error: $*" + exit $SHELL_LIB_THROWN_ERROR +} + +internal_error () { + # exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message + message "internal error: $*" + if [ -n "$OFFICIAL_BUILD" ]; then + message "Please report a bug in the $THIS_SCRIPT script of the" \ + "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \ + "Tracking System. Include all messages above that mention the" \ + "$THIS_PACKAGE package. Visit " \ + " on the World Wide Web for" \ + "instructions, read the file" \ + "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \ + "package, or install the reportbug package and use the command of" \ + "the same name to file a report." + fi + exit $SHELL_LIB_INTERNAL_ERROR +} + +usage_error () { + message "usage error: $*" + message "Please report a bug in the $THIS_SCRIPT script of the" \ + "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \ + "Tracking System. Include all messages above that mention the" \ + "$THIS_PACKAGE package. Visit " \ + " on the World Wide Web for" \ + "instructions, read the file" \ + "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \ + "package, or install the reportbug package and use the command of" \ + "the same name to file a report." + exit $SHELL_LIB_USAGE_ERROR +} + + +maplink () { + # returns what symlink should point to; i.e., what the "sane" answer is + # Keep this in sync with the debian/*.links files. + # This is only needed for symlinks to directories. + # + # XXX: Most of these look wrong in the X11R7 world and need to be fixed. + # If we've stopped using this function, fixing it might enable us to re-enable + # it again and catch more errors. + case "$1" in + /etc/X11/xkb/compiled) echo /var/lib/xkb ;; + /etc/X11/xkb/xkbcomp) echo /usr/X11R6/bin/xkbcomp ;; + /usr/X11R6/lib/X11/app-defaults) echo /etc/X11/app-defaults ;; + /usr/X11R6/lib/X11/fs) echo /etc/X11/fs ;; + /usr/X11R6/lib/X11/lbxproxy) echo /etc/X11/lbxproxy ;; + /usr/X11R6/lib/X11/proxymngr) echo /etc/X11/proxymngr ;; + /usr/X11R6/lib/X11/rstart) echo /etc/X11/rstart ;; + /usr/X11R6/lib/X11/twm) echo /etc/X11/twm ;; + /usr/X11R6/lib/X11/xdm) echo /etc/X11/xdm ;; + /usr/X11R6/lib/X11/xinit) echo /etc/X11/xinit ;; + /usr/X11R6/lib/X11/xkb) echo /etc/X11/xkb ;; + /usr/X11R6/lib/X11/xserver) echo /etc/X11/xserver ;; + /usr/X11R6/lib/X11/xsm) echo /etc/X11/xsm ;; + /usr/bin/X11) echo ../X11R6/bin ;; + /usr/bin/rstartd) echo ../X11R6/bin/rstartd ;; + /usr/include/X11) echo ../X11R6/include/X11 ;; + /usr/lib/X11) echo ../X11R6/lib/X11 ;; + *) internal_error "maplink() called with unknown path \"$1\"" ;; + esac +} + +analyze_path () { + # given a supplied set of pathnames, break each one up by directory and do an + # ls -dl on each component, cumulatively; i.e. + # analyze_path /usr/X11R6/bin -> ls -dl /usr /usr/X11R6 /usr/X11R6/bin + # Thanks to Randolph Chung for this clever hack. + + local f g + + while [ -n "$1" ]; do + reject_whitespace "$1" + g= + message "Analyzing $1:" + for f in $(echo "$1" | tr / \ ); do + if [ -e /$g$f ]; then + ls -dl /$g$f /$g$f.dpkg-* 2> /dev/null || true + g=$g$f/ + else + message "/$g$f: nonexistent; directory contents of /$g:" + ls -l /$g + break + fi + done + shift + done +} + +find_culprits () { + local f p dpkg_info_dir possible_culprits smoking_guns bad_packages package \ + msg + + reject_whitespace "$1" + message "Searching for overlapping packages..." + dpkg_info_dir=/var/lib/dpkg/info + if [ -d $dpkg_info_dir ]; then + if [ "$(echo $dpkg_info_dir/*.list)" != "$dpkg_info_dir/*.list" ]; then + possible_culprits=$(ls -1 $dpkg_info_dir/*.list | egrep -v \ + "(xbase-clients|x11-common|xfs|xlibs)") + if [ -n "$possible_culprits" ]; then + smoking_guns=$(grep -l "$1" $possible_culprits || true) + if [ -n "$smoking_guns" ]; then + bad_packages=$(printf "\\n") + for f in $smoking_guns; do + # too bad you can't nest parameter expansion voodoo + p=${f%*.list} # strip off the trailing ".list" + package=${p##*/} # strip off the directories + bad_packages=$(printf "%s\n%s" "$bad_packages" "$package") + done + msg=$(cat < /dev/null 2>&1; then + message "The readlink command was not found. Please install version" \ + "1.13.1 or later of the debianutils package." + readlink () { + # returns what symlink in $1 actually points to + perl -e '$l = shift; exit 1 unless -l $l; $r = readlink $l; exit 1 unless $r; print "$r\n"' "$1" + } +fi + +check_symlink () { + # syntax: check_symlink symlink + # + # See if specified symlink points where it is supposed to. Return 0 if it + # does, and 1 if it does not. + # + # Primarily used by check_symlinks_and_warn() and check_symlinks_and_bomb(). + + local symlink + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "check_symlink() called with wrong number of arguments;" \ + "expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + symlink="$1" + + if [ "$(maplink "$symlink")" = "$(readlink "$symlink")" ]; then + return 0 + else + return 1 + fi +} + +check_symlinks_and_warn () { + # syntax: check_symlinks_and_warn symlink ... + # + # For each argument, check for symlink sanity, and warn if it isn't sane. + # + # Call this function from a preinst script in the event $1 is "upgrade" or + # "install". + + local errmsg symlink + + # validate arguments + if [ $# -lt 1 ]; then + usage_error "check_symlinks_and_warn() called with wrong number of" \ + "arguments; expected at least 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + while [ -n "$1" ]; do + symlink="$1" + if [ -L "$symlink" ]; then + if ! check_symlink "$symlink"; then + observe "$symlink symbolic link points to wrong location" \ + "$(readlink "$symlink"); removing" + rm "$symlink" + fi + elif [ -e "$symlink" ]; then + errmsg="$symlink exists and is not a symbolic link; this package cannot" + errmsg="$errmsg be installed until this" + if [ -f "$symlink" ]; then + errmsg="$errmsg file" + elif [ -d "$symlink" ]; then + errmsg="$errmsg directory" + else + errmsg="$errmsg thing" + fi + errmsg="$errmsg is removed" + die "$errmsg" + fi + shift + done +} + +check_symlinks_and_bomb () { + # syntax: check_symlinks_and_bomb symlink ... + # + # For each argument, check for symlink sanity, and bomb if it isn't sane. + # + # Call this function from a postinst script. + + local problem symlink + + # validate arguments + if [ $# -lt 1 ]; then + usage_error "check_symlinks_and_bomb() called with wrong number of" + "arguments; expected at least 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + while [ -n "$1" ]; do + problem= + symlink="$1" + if [ -L "$symlink" ]; then + if ! check_symlink "$symlink"; then + problem=yes + warn "$symlink symbolic link points to wrong location" \ + "$(readlink "$symlink")" + fi + elif [ -e "$symlink" ]; then + problem=yes + warn "$symlink is not a symbolic link" + else + problem=yes + warn "$symlink symbolic link does not exist" + fi + if [ -n "$problem" ]; then + analyze_path "$symlink" "$(readlink "$symlink")" + find_culprits "$symlink" + die "bad symbolic links on system" + fi + shift + done +} + +font_update () { + # run $UPDATECMDS in $FONTDIRS + + local dir cmd shortcmd x_font_dir_prefix + + x_font_dir_prefix="/usr/share/fonts/X11" + + if [ -z "$UPDATECMDS" ]; then + usage_error "font_update() called but \$UPDATECMDS not set" + fi + if [ -z "$FONTDIRS" ]; then + usage_error "font_update() called but \$FONTDIRS not set" + fi + + reject_unlikely_path_chars "$UPDATECMDS" + reject_unlikely_path_chars "$FONTDIRS" + + for dir in $FONTDIRS; do + if [ -d "$x_font_dir_prefix/$dir" ]; then + for cmd in $UPDATECMDS; do + if which "$cmd" > /dev/null 2>&1; then + shortcmd=${cmd##*/} + observe "running $shortcmd in $dir font directory" + cmd_opts= + if [ "$shortcmd" = "update-fonts-alias" ]; then + cmd_opts=--x11r7-layout + fi + if [ "$shortcmd" = "update-fonts-dir" ]; then + cmd_opts=--x11r7-layout + fi + if [ "$shortcmd" = "update-fonts-scale" ]; then + cmd_opts=--x11r7-layout + fi + $cmd $cmd_opts $dir || warn "$cmd $cmd_opts $dir" \ + "failed; font directory data may not" \ + "be up to date" + else + warn "$cmd not found; not updating corresponding $dir font" \ + "directory data" + fi + done + else + warn "$dir is not a directory; not updating font directory data" + fi + done +} + +remove_conffile_prepare () { + # syntax: remove_conffile_prepare filename official_md5sum ... + # + # Check a conffile "filename" against a list of canonical MD5 checksums. + # If the file's current MD5 checksum matches one of the "official_md5sum" + # operands provided, then prepare the conffile for removal from the system. + # We defer actual deletion until the package is configured so that we can + # roll this operation back if package installation fails. + # + # Call this function from a preinst script in the event $1 is "upgrade" or + # "install" and verify $2 to ensure the package is being upgraded from a + # version (or installed over a version removed-but-not-purged) prior to the + # one in which the conffile was obsoleted. + + local conffile current_checksum + + # validate arguments + if [ $# -lt 2 ]; then + usage_error "remove_conffile_prepare() called with wrong number of" \ + "arguments; expected at least 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + conffile="$1" + shift + + # does the conffile even exist? + if [ -e "$conffile" ]; then + # calculate its checksum + current_checksum=$(md5sum < "$conffile" | sed 's/[[:space:]].*//') + # compare it to each supplied checksum + while [ -n "$1" ]; do + if [ "$current_checksum" = "$1" ]; then + # we found a match; move the confffile and stop looking + observe "preparing obsolete conffile $conffile for removal" + mv "$conffile" "$conffile.$THIS_PACKAGE-tmp" + break + fi + shift + done + fi +} + +remove_conffile_lookup () { + # syntax: remove_conffile_lookup package filename + # + # Lookup the md5sum of a conffile in dpkg's database, and prepare for removal + # if it matches the actual file's md5sum. + # + # Call this function when you would call remove_conffile_prepare but only + # want to check against dpkg's status database instead of known checksums. + + local package conffile old_md5sum + + # validate arguments + if [ $# -ne 2 ]; then + usage_error "remove_conffile_lookup() called with wrong number of" \ + "arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + package="$1" + conffile="$2" + + if ! [ -e "$conffile" ]; then + return + fi + old_md5sum="$(dpkg-query -W -f='${Conffiles}' "$package" | \ + awk '{ if (match($0, "^ '"$conffile"' ")) print $2}')" + if [ -n "$old_md5sum" ]; then + remove_conffile_prepare "$conffile" "$old_md5sum" + fi +} + +remove_conffile_commit () { + # syntax: remove_conffile_commit filename + # + # Complete the removal of a conffile "filename" that has become obsolete. + # + # Call this function from a postinst script after having used + # remove_conffile_prepare() in the preinst. + + local conffile + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "remove_conffile_commit() called with wrong number of" \ + "arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + conffile="$1" + + # if the temporary file created by remove_conffile_prepare() exists, remove it + if [ -e "$conffile.$THIS_PACKAGE-tmp" ]; then + observe "committing removal of obsolete conffile $conffile" + rm "$conffile.$THIS_PACKAGE-tmp" + fi +} + +remove_conffile_rollback () { + # syntax: remove_conffile_rollback filename + # + # Roll back the removal of a conffile "filename". + # + # Call this function from a postrm script in the event $1 is "abort-upgrade" + # or "abort-install" is after having used remove_conffile_prepare() in the + # preinst. + + local conffile + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "remove_conffile_rollback() called with wrong number of" \ + "arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + conffile="$1" + + # if the temporary file created by remove_conffile_prepare() exists, move it + # back + if [ -e "$conffile.$THIS_PACKAGE-tmp" ]; then + observe "rolling back removal of obsolete conffile $conffile" + mv "$conffile.$THIS_PACKAGE-tmp" "$conffile" + fi +} + +replace_conffile_with_symlink_prepare () { + # syntax: replace_conffile_with_symlink_prepare oldfilename newfilename \ + # official_md5sum ... + # + # Check a conffile "oldfilename" against a list of canonical MD5 checksums. + # If the file's current MD5 checksum matches one of the "official_md5sum" + # operands provided, then prepare the conffile for removal from the system. + # We defer actual deletion until the package is configured so that we can + # roll this operation back if package installation fails. Otherwise copy it + # to newfilename and let dpkg handle it through conffiles mechanism. + # + # Call this function from a preinst script in the event $1 is "upgrade" or + # "install" and verify $2 to ensure the package is being upgraded from a + # version (or installed over a version removed-but-not-purged) prior to the + # one in which the conffile was obsoleted. + + local conffile current_checksum + + # validate arguments + if [ $# -lt 3 ]; then + usage_error "replace_conffile_with_symlink_prepare() called with wrong" \ + " number of arguments; expected at least 3, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + oldconffile="$1" + shift + newconffile="$1" + shift + + remove_conffile_prepare "$_oldconffile" "$@" + # If $oldconffile still exists, then md5sums didn't match. + # Copy it to new one. + if [ -f "$oldconffile" ]; then + cp "$oldconffile" "$newconffile" + fi + +} + +replace_conffile_with_symlink_commit () { + # syntax: replace_conffile_with_symlink_commit oldfilename + # + # Complete the removal of a conffile "oldfilename" that has been + # replaced by a symlink. + # + # Call this function from a postinst script after having used + # replace_conffile_with_symlink_prepare() in the preinst. + + local conffile + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "replace_conffile_with_symlink_commit() called with wrong" \ + "number of arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + conffile="$1" + + remove_conffile_commit "$conffile" +} + +replace_conffile_with_symlink_rollback () { + # syntax: replace_conffile_with_symlink_rollback oldfilename newfilename + # + # Roll back the replacing of a conffile "oldfilename" with symlink to + # "newfilename". + # + # Call this function from a postrm script in the event $1 is "abort-upgrade" + # or "abort-install" and verify $2 to ensure the package failed to upgrade + # from a version (or install over a version removed-but-not-purged) prior + # to the one in which the conffile was obsoleted. + # You should have used replace_conffile_with_symlink_prepare() in the + # preinst. + + local conffile + + # validate arguments + if [ $# -ne 2 ]; then + usage_error "replace_conffile_with_symlink_rollback() called with wrong" \ + "number of arguments; expected 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + oldconffile="$1" + newconffile="$2" + + remove_conffile_rollback "$_oldconffile" + if [ -f "$newconffile" ]; then + rm "$newconffile" + fi +} + +run () { + # syntax: run command [ argument ... ] + # + # Run specified command with optional arguments and report its exit status. + # Useful for commands whose exit status may be nonzero, but still acceptable, + # or commands whose failure is not fatal to us. + # + # NOTE: Do *not* use this function with db_get or db_metaget commands; in + # those cases the return value of the debconf command *must* be checked + # before the string returned by debconf is used for anything. + + local retval + + # validate arguments + if [ $# -lt 1 ]; then + usage_error "run() called with wrong number of arguments; expected at" \ + "least 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + "$@" || retval=$? + + if [ ${retval:-0} -ne 0 ]; then + observe "command \"$*\" exited with status $retval" + fi +} + +register_x_lib_dir_with_ld_so () { + # syntax: register_x_lib_dir_with_ld_so + # + # Configure the dynamic loader ld.so to search /usr/X11R6/lib for shared + # libraries. + # + # Call this function from the postinst script of a package that places a + # shared library in /usr/X11R6/lib, before invoking ldconfig. + + local dir ldsoconf + + dir="/usr/X11R6/lib" + ldsoconf="/etc/ld.so.conf" + + # is the line not already present? + if ! fgrep -qsx "$dir" "$ldsoconf"; then + observe "adding $dir directory to $ldsoconf" + echo "$dir" >> "$ldsoconf" + fi +} + +deregister_x_lib_dir_with_ld_so () { + # syntax: deregister_x_lib_dir_with_ld_so + # + # Configure dynamic loader ld.so to not search /usr/X11R6/lib for shared + # libraries, if and only if no shared libaries remain there. + # + # Call this function from the postrm script of a package that places a shared + # library in /usr/X11R6/lib, in the event "$1" is "remove", and before + # invoking ldconfig. + + local dir ldsoconf fgrep_status cmp_status + + dir="/usr/X11R6/lib" + ldsoconf="/etc/ld.so.conf" + + # is the line present? + if fgrep -qsx "$dir" "$ldsoconf"; then + # are there any shared objects in the directory? + if [ "$(echo "$dir"/lib*.so.*.*)" = "$dir/lib*.so.*.*" ]; then + # glob expansion produced nothing, so no shared libraries are present + observe "removing $dir directory from $ldsoconf" + # rewrite the file (very carefully) + set +e + fgrep -svx "$dir" "$ldsoconf" > "$ldsoconf.dpkg-tmp" + fgrep_status=$? + set -e + case $fgrep_status in + 0|1) ;; # we don't actually care if any lines matched or not + *) die "error reading \"$ldsoconf\"; fgrep exited with status" \ + "$fgrep_status" ;; + esac + set +e + cmp -s "$ldsoconf.dpkg-tmp" "$ldsoconf" + cmp_status=$? + set -e + case $cmp_status in + 0) rm "$ldsoconf.dpkg-tmp" ;; # files are identical + 1) mv "$ldsoconf.dpkg-tmp" "$ldsoconf" ;; # files differ + *) die "error comparing \"$ldsoconf.dpkg-tmp\" to \"$ldsoconf\";" \ + "cmp exited with status $cmp_status" ;; + esac + fi + fi +} + +make_symlink_sane () { + # syntax: make_symlink_sane symlink target + # + # Ensure that the symbolic link symlink exists, and points to target. + # + # If symlink does not exist, create it and point it at target. + # + # If symlink exists but is not a symbolic link, back it up. + # + # If symlink exists, is a symbolic link, but points to the wrong location, fix + # it. + # + # If symlink exists, is a symbolic link, and already points to target, do + # nothing. + # + # This function wouldn't be needed if ln had an -I, --idempotent option. + + # Validate arguments. + if [ $# -ne 2 ]; then + usage_error "make_symlink_sane() called with wrong number of arguments;" \ + "expected 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + # We could just use the positional parameters as-is, but that makes things + # harder to follow. + local symlink target + + symlink="$1" + target="$2" + + if [ -L "$symlink" ] && [ "$(readlink "$symlink")" = "$target" ]; then + observe "link from $symlink to $target already exists" + else + observe "creating symbolic link from $symlink to $target" + mkdir -p "${target%/*}" "${symlink%/*}" + ln -s -b -S ".dpkg-old" "$target" "$symlink" + fi +} + +migrate_dir_to_symlink () { + # syntax: migrate_dir_to_symlink old_location new_location + # + # Per Debian Policy section 6.5.4, "A directory will never be replaced by a + # symbolic link to a directory or vice versa; instead, the existing state + # (symlink or not) will be left alone and dpkg will follow the symlink if + # there is one." + # + # We have to do it ourselves. + # + # This function moves the contents of old_location, a directory, into + # new_location, a directory, then makes old_location a symbolic link to + # new_location. + # + # old_location need not exist, but if it does, it must be a directory (or a + # symlink to a directory). If it is not, it is backed up. If new_location + # exists already and is not a directory, it is backed up. + # + # This function should be called from a package's preinst so that other + # packages unpacked after this one --- but before this package's postinst runs + # --- are unpacked into new_location even if their payloads contain + # old_location filespecs. + + # Validate arguments. + if [ $# -ne 2 ]; then + usage_error "migrate_dir_to_symlink() called with wrong number of" + "arguments; expected 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + # We could just use the positional parameters as-is, but that makes things + # harder to follow. + local new old + + old="$1" + new="$2" + + # Is old location a symlink? + if [ -L "$old" ]; then + # Does it already point to new location? + if [ "$(readlink "$old")" = "$new" ]; then + # Nothing to do; migration has already been done. + observe "migration of $old to $new already done" + return 0 + else + # Back it up. + warn "backing up symbolic link $old as $old.dpkg-old" + mv -b "$old" "$old.dpkg-old" + fi + fi + + # Does old location exist, but is not a directory? + if [ -e "$old" ] && ! [ -d "$old" ]; then + # Back it up. + warn "backing up non-directory $old as $old.dpkg-old" + mv -b "$old" "$old.dpkg-old" + fi + + observe "migrating $old to $new" + + # Is new location a symlink? + if [ -L "$new" ]; then + # Does it point the wrong way, i.e., back to where we're migrating from? + if [ "$(readlink "$new")" = "$old" ]; then + # Get rid of it. + observe "removing symbolic link $new which points to $old" + rm "$new" + else + # Back it up. + warn "backing up symbolic link $new as $new.dpkg-old" + mv -b "$new" "$new.dpkg-old" + fi + fi + + # Does new location exist, but is not a directory? + if [ -e "$new" ] && ! [ -d "$new" ]; then + warn "backing up non-directory $new as $new.dpkg-old" + mv -b "$new" "$new.dpkg-old" + fi + + # Create new directory if it does not yet exist. + if ! [ -e "$new" ]; then + observe "creating $new" + mkdir -p "$new" + fi + + # Copy files in old location to new location. Back up any filenames that + # already exist in the new location with the extension ".dpkg-old". + observe "copying files from $old to $new" + if ! (cd "$old" && cp -a -b -S ".dpkg-old" . "$new"); then + die "error(s) encountered while copying files from $old to $new" + fi + + # Remove files at old location. + observe "removing $old" + rm -r "$old" + + # Create symlink from old location to new location. + make_symlink_sane "$old" "$new" +} + +# vim:set ai et sw=2 ts=2 tw=80: + +# GOBSTOPPER: The X Strike Force shell library ends here. --- wacom-tools-0.8.1.6.orig/debian/xsfbs/xsfbs.mk +++ wacom-tools-0.8.1.6/debian/xsfbs/xsfbs.mk @@ -0,0 +1,293 @@ +#!/usr/bin/make -f + +# Debian X Strike Force Build System (XSFBS): Make portion + +# Copyright 1996 Stephen Early +# Copyright 1997 Mark Eichin +# Copyright 1998-2005, 2007 Branden Robinson +# Copyright 2005 David Nusinow +# +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . + +# Originally by Stephen Early +# Modified by Mark W. Eichin +# Modified by Adam Heath +# Modified by Branden Robinson +# Modified by Fabio Massimo Di Nitto +# Modified by David Nusinow +# Acknowledgements to Manoj Srivastava. + +# Pass $(DH_OPTIONS) into the environment for debhelper's benefit. +export DH_OPTIONS + +# force quilt to not use ~/.quiltrc and to use debian/patches +QUILT = QUILT_PATCHES=debian/patches quilt --quiltrc /dev/null + +# Set up parameters for the upstream build environment. + +# Determine (source) package name from Debian changelog. +SOURCE_NAME:=$(shell dpkg-parsechangelog -ldebian/changelog \ + | grep '^Source:' | awk '{print $$2}') + +# Determine package version from Debian changelog. +SOURCE_VERSION:=$(shell dpkg-parsechangelog -ldebian/changelog \ + | grep '^Version:' | awk '{print $$2}') + +# Determine upstream version number. +UPSTREAM_VERSION:=$(shell echo $(SOURCE_VERSION) | sed 's/-.*//') + +# Determine the source version without the epoch for make-orig-tar-gz +NO_EPOCH_VER:=$(shell echo $(UPSTREAM_VERSION) | sed 's/^.://') + +# Figure out who's building this package. +BUILDER:=$(shell echo $${DEBEMAIL:-$${EMAIL:-$$(echo $$LOGNAME@$$(cat /etc/mailname 2>/dev/null))}}) + +# Find out if this is an official build; an official build has nothing but +# digits, dots, and/or the codename of a release in the Debian part of the +# version number. Anything else indicates an unofficial build. +OFFICIAL_BUILD:=$(shell VERSION=$(SOURCE_VERSION); if ! expr "$$(echo $${VERSION\#\#*-} | sed 's/\(woody\|sarge\|etch\|lenny\)//g')" : ".*[^0-9.].*" >/dev/null 2>&1; then echo yes; fi) + +# Set up parameters for the Debian build environment. + +# Determine our architecture. +BUILD_ARCH:=$(shell dpkg-architecture -qDEB_BUILD_ARCH) +# Work around some old-time dpkg braindamage. +BUILD_ARCH:=$(subst i486,i386,$(BUILD_ARCH)) +# The DEB_HOST_ARCH variable may be set per the Debian cross-compilation policy. +ifdef DEB_HOST_ARCH + ARCH:=$(DEB_HOST_ARCH) +else + # dpkg-cross sets the ARCH environment variable; if set, use it. + ifdef ARCH + ARCH:=$(ARCH) + else + ARCH:=$(BUILD_ARCH) + endif +endif + +# $(STAMP_DIR) houses stamp files for complex targets. +STAMP_DIR:=stampdir + +# $(DEBTREEDIR) is where all install rules are told (via $(DESTDIR)) to place +# their files. +DEBTREEDIR:=$(CURDIR)/debian/tmp + +# All "important" targets have four lines: +# 1) A target name that is invoked by a package-building tool or the user. +# This consists of a dependency on a "$(STAMP_DIR)/"-prefixed counterpart. +# 2) A line delcaring 1) as a phony target (".PHONY:"). +# 3) A "$(STAMP_DIR)/"-prefixed target which does the actual work, and may +# depend on other targets. +# 4) A line declaring 3) as a member of the $(stampdir_targets) variable; the +# "$(STAMP_DIR)/" prefix is omitted. +# +# This indirection is needed so that the "stamp" files that signify when a rule +# is done can be located in a separate "stampdir". Recall that make has no way +# to know when a goal has been met for a phony target (like "build" or +# "install"). +# +# At the end of each "$(STAMP_DIR)/" target, be sure to run the command ">$@" +# so that the target will not be run again. Removing the file will make Make +# run the target over. + +# All phony targets should be declared as dependencies of .PHONY, even if they +# do not have "($STAMP_DIR)/"-prefixed counterparts. + +# Define a harmless default rule to keep things from going nuts by accident. +.PHONY: default +default: + +# Set up the $(STAMP_DIR) directory. +.PHONY: stampdir +stampdir_targets+=stampdir +stampdir: $(STAMP_DIR)/stampdir +$(STAMP_DIR)/stampdir: + mkdir $(STAMP_DIR) + >$@ + +# Set up the package build directory as quilt expects to find it. +.PHONY: prepare +stampdir_targets+=prepare +prepare: $(STAMP_DIR)/prepare +$(STAMP_DIR)/prepare: $(STAMP_DIR)/log $(STAMP_DIR)/genscripts + >$@ + +.PHONY: log +stampdir_targets+=log +log: $(STAMP_DIR)/log +$(STAMP_DIR)/log: $(STAMP_DIR)/stampdir + mkdir -p $(STAMP_DIR)/log + +# Apply all patches to the upstream source. +.PHONY: patch +stampdir_targets+=patch +patch: $(STAMP_DIR)/patch +$(STAMP_DIR)/patch: $(STAMP_DIR)/prepare + if ! [ `which quilt` ]; then \ + echo "Couldn't find quilt. Please install it or add it to the build-depends for this package."; \ + exit 1; \ + fi; \ + if $(QUILT) next >/dev/null 2>&1; then \ + echo -n "Applying patches..."; \ + if $(QUILT) push -a -v >$(STAMP_DIR)/log/patch 2>&1; then \ + cat $(STAMP_DIR)/log/patch; \ + echo "successful."; \ + else \ + cat $(STAMP_DIR)/log/patch; \ + echo "failed! (check $(STAMP_DIR)/log/patch for details)"; \ + exit 1; \ + fi; \ + else \ + echo "No patches to apply"; \ + fi; \ + >$@ + +# Revert all patches to the upstream source. +.PHONY: unpatch +unpatch: $(STAMP_DIR)/log + rm -f $(STAMP_DIR)/patch + @echo -n "Unapplying patches..."; \ + if $(QUILT) applied >/dev/null 2>/dev/null; then \ + if $(QUILT) pop -a -v >$(STAMP_DIR)/log/unpatch 2>&1; then \ + cat $(STAMP_DIR)/log/unpatch; \ + echo "successful."; \ + else \ + cat $(STAMP_DIR)/log/unpatch; \ + echo "failed! (check $(STAMP_DIR)/log/unpatch for details)"; \ + exit 1; \ + fi; \ + else \ + echo "nothing to do."; \ + fi + +# Clean the generated maintainer scripts. +.PHONY: cleanscripts +cleanscripts: + rm -f $(STAMP_DIR)/genscripts + rm -f debian/*.config \ + debian/*.postinst \ + debian/*.postrm \ + debian/*.preinst \ + debian/*.prerm + +# Clean the package build tree. +.PHONY: xsfclean +xsfclean: cleanscripts unpatch + dh_testdir + rm -rf .pc + rm -rf $(STAMP_DIR) $(SOURCE_DIR) + rm -rf imports + dh_clean debian/shlibs.local \ + debian/po/pothead + +# Generate the debconf templates POT file header. +debian/po/pothead: debian/po/pothead.in + sed -e 's/SOURCE_VERSION/$(SOURCE_VERSION)/' \ + -e 's/DATE/$(shell date "+%F %X%z"/)' <$< >$@ + +# Update POT and PO files. +.PHONY: updatepo +updatepo: debian/po/pothead + debian/scripts/debconf-updatepo --pot-header=pothead --verbose + +# Remove files from the upstream source tree that we don't need, or which have +# licensing problems. It must be run before creating the .orig.tar.gz. +# +# Note: This rule is for Debian package maintainers' convenience, and is not +# needed for conventional build scenarios. +.PHONY: prune-upstream-tree +prune-upstream-tree: + # Ensure we're in the correct directory. + dh_testdir + grep -rvh '^#' debian/prune/ | xargs --no-run-if-empty rm -rf + +# Verify that there are no offsets or fuzz in the patches we apply. +# +# Note: This rule is for Debian package maintainers' convenience, and is not +# needed for conventional build scenarios. +.PHONY: patch-audit +patch-audit: prepare unpatch + @echo -n "Auditing patches..."; \ + >$(STAMP_DIR)/log/patch; \ + FUZZY=; \ + while [ -n "$$($(QUILT) next)" ]; do \ + RESULT=$$($(QUILT) push -v | tee -a $(STAMP_DIR)/log/patch | grep ^Hunk | sed 's/^Hunk.*\(succeeded\|FAILED\).*/\1/');\ + case "$$RESULT" in \ + succeeded) \ + echo "fuzzy patch: $$($(QUILT) top)" \ + | tee -a $(STAMP_DIR)/log/$$($(QUILT) top); \ + FUZZY=yes; \ + ;; \ + FAILED) \ + echo "broken patch: $$($(QUILT) next)" \ + | tee -a $(STAMP_DIR)/log/$$($(QUILT) next); \ + exit 1; \ + ;; \ + esac; \ + done; \ + if [ -n "$$FUZZY" ]; then \ + echo "there were fuzzy patches; please fix."; \ + exit 1; \ + else \ + echo "done."; \ + fi + +# Generate the maintainer scripts. +.PHONY: genscripts +stampdir_targets+=genscripts +genscripts: $(STAMP_DIR)/genscripts +$(STAMP_DIR)/genscripts: $(STAMP_DIR)/stampdir + for FILE in debian/*.config.in \ + debian/*.postinst.in \ + debian/*.postrm.in \ + debian/*.preinst.in \ + debian/*.prerm.in; do \ + if [ -e "$$FILE" ]; then \ + MAINTSCRIPT=$$(echo $$FILE | sed 's/.in$$//'); \ + sed -n '1,/^#INCLUDE_SHELL_LIB#$$/p' <$$FILE \ + | sed -e '/^#INCLUDE_SHELL_LIB#$$/d' >$$MAINTSCRIPT.tmp; \ + cat debian/xsfbs/xsfbs.sh >>$$MAINTSCRIPT.tmp; \ + sed -n '/^#INCLUDE_SHELL_LIB#$$/,$$p' <$$FILE \ + | sed -e '/^#INCLUDE_SHELL_LIB#$$/d' >>$$MAINTSCRIPT.tmp; \ + sed -e 's/@SOURCE_VERSION@/$(SOURCE_VERSION)/' \ + -e 's/@OFFICIAL_BUILD@/$(OFFICIAL_BUILD)/' \ + -e 's/@DEFAULT_DCRESOLUTIONS@/$(DEFAULT_DCRESOLUTIONS)/' \ + <$$MAINTSCRIPT.tmp >$$MAINTSCRIPT; \ + rm $$MAINTSCRIPT.tmp; \ + fi; \ + done + # Validate syntax of generated shell scripts. + #sh debian/scripts/validate-posix-sh debian/*.config \ + # debian/*.postinst \ + # debian/*.postrm \ + # debian/*.preinst \ + # debian/*.prerm + >$@ + +# Generate the shlibs.local file. +debian/shlibs.local: + cat debian/*.shlibs >$@ + +SERVERMINVERS = $(shell cat /usr/share/xserver-xorg/serverminver 2>/dev/null) +VIDEOABI = $(shell cat /usr/share/xserver-xorg/videoabiver 2>/dev/null) +INPUTABI = $(shell cat /usr/share/xserver-xorg/inputabiver 2>/dev/null) +SERVER_DEPENDS = xserver-xorg-core (>= $(SERVERMINVERS)) +VIDDRIVER_PROVIDES = xserver-xorg-video-$(VIDEOABI) +INPDRIVER_PROVIDES = xserver-xorg-input-$(INPUTABI) +ifeq ($(PACKAGE),) +PACKAGE=$(shell awk '/^Package:/ { print $$2; exit }' < debian/control) +endif + +.PHONY: serverabi +serverabi: install +ifeq ($(SERVERMINVERS),) + @echo error: xserver-xorg-dev needs to be installed + @exit 1 +else + echo "xserver:Depends=$(SERVER_DEPENDS)" >> debian/$(PACKAGE).substvars + echo "xviddriver:Provides=$(VIDDRIVER_PROVIDES)" >> debian/$(PACKAGE).substvars + echo "xinpdriver:Provides=$(INPDRIVER_PROVIDES)" >> debian/$(PACKAGE).substvars +endif + +# vim:set noet ai sts=8 sw=8 tw=0: --- wacom-tools-0.8.1.6.orig/linuxwacom/configure +++ wacom-tools-0.8.1.6/linuxwacom/configure @@ -23533,7 +23533,7 @@ -ac_config_files="$ac_config_files Makefile mkxincludes src/Makefile src/util/Makefile src/xdrv/Makefile src/2.4/Makefile src/2.4.22/Makefile src/2.6.8/Makefile src/2.6.9/Makefile src/2.6.10/Makefile src/2.6.11/Makefile src/2.6.13/Makefile src/2.6.14/Makefile src/2.6.15/Makefile src/2.6.16/Makefile src/2.6.18/Makefile src/2.6.19/Makefile src/2.6.22/Makefile src/2.6.24/Makefile src/2.6.26/Makefile src/2.6.27/Makefile src/wacomxi/Makefile src/wacomxi/wacomcpl" +ac_config_files="$ac_config_files Makefile mkxincludes src/Makefile src/util/Makefile src/xdrv/Makefile src/2.4/Makefile src/2.4.22/Makefile src/2.4.28/Makefile src/2.6.8/Makefile src/2.6.9/Makefile src/2.6.10/Makefile src/2.6.11/Makefile src/2.6.13/Makefile src/2.6.14/Makefile src/2.6.15/Makefile src/2.6.16/Makefile src/2.6.18/Makefile src/2.6.19/Makefile src/2.6.22/Makefile src/2.6.24/Makefile src/2.6.26/Makefile src/2.6.27/Makefile src/wacomxi/Makefile src/wacomxi/wacomcpl" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -24185,6 +24185,7 @@ "src/xdrv/Makefile") CONFIG_FILES="$CONFIG_FILES src/xdrv/Makefile" ;; "src/2.4/Makefile") CONFIG_FILES="$CONFIG_FILES src/2.4/Makefile" ;; "src/2.4.22/Makefile") CONFIG_FILES="$CONFIG_FILES src/2.4.22/Makefile" ;; + "src/2.4.28/Makefile") CONFIG_FILES="$CONFIG_FILES src/2.4.28/Makefile" ;; "src/2.6.8/Makefile") CONFIG_FILES="$CONFIG_FILES src/2.6.8/Makefile" ;; "src/2.6.9/Makefile") CONFIG_FILES="$CONFIG_FILES src/2.6.9/Makefile" ;; "src/2.6.10/Makefile") CONFIG_FILES="$CONFIG_FILES src/2.6.10/Makefile" ;; --- wacom-tools-0.8.1.6.orig/linuxwacom/configure.in +++ wacom-tools-0.8.1.6/linuxwacom/configure.in @@ -968,9 +968,6 @@ dnl ======================================================= dnl Set default defines in src/include/xdrv-config.h (moved from cmd-line) AC_DEFINE(IN_MODULE,,[cmdline substitute]) -AC_DEFINE(XFree86LOADER,,[cmdline substitute]) -AC_DEFINE(XINPUT,,[cmdline substitute]) -AC_DEFINE(XKB,,[cmdline substitute]) dnl Separate test output from file-generation output echo @@ -1013,6 +1010,7 @@ src/xdrv/Makefile src/2.4/Makefile src/2.4.22/Makefile + src/2.4.28/Makefile src/2.6.8/Makefile src/2.6.9/Makefile src/2.6.10/Makefile --- wacom-tools-0.8.1.6.orig/linuxwacom/src/Makefile.in +++ wacom-tools-0.8.1.6/linuxwacom/src/Makefile.in @@ -228,7 +228,7 @@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ -SUBDIRS = . wacomxi util xdrv @WCM_KERNEL_VER@ +SUBDIRS = . wacomxi util xdrv #@WCM_KERNEL_VER@ wmanpagedir = @mandir@/man4 wmanpage_HEADERS = wacom.4x.gz EXTRA_DIST = wacom.4x --- wacom-tools-0.8.1.6.orig/linuxwacom/src/Makefile.am +++ wacom-tools-0.8.1.6/linuxwacom/src/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = . wacomxi util xdrv @WCM_KERNEL_VER@ +SUBDIRS = . wacomxi util xdrv #@WCM_KERNEL_VER@ wmanpagedir = @mandir@/man4 wmanpage_HEADERS = wacom.4x.gz --- wacom-tools-0.8.1.6.orig/linuxwacom/src/2.4.28/Makefile.in +++ wacom-tools-0.8.1.6/linuxwacom/src/2.4.28/Makefile.in @@ -0,0 +1,431 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/2.4.28 +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/include/xdrv-config.h \ + $(top_builddir)/src/include/kernel-config.h \ + $(top_builddir)/src/include/util-config.h +CONFIG_CLEAN_FILES = +SCRIPTS = $(noinst_SCRIPTS) +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +NMEDIT = @NMEDIT@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TCLSH = @TCLSH@ +VERSION = @VERSION@ +WACOMXI_INSTALL_FALSE = @WACOMXI_INSTALL_FALSE@ +WACOMXI_INSTALL_TRUE = @WACOMXI_INSTALL_TRUE@ +WCM_ARCH = @WCM_ARCH@ +WCM_CLEVEL = @WCM_CLEVEL@ +WCM_DEPFLAGS = @WCM_DEPFLAGS@ +WCM_DLLOADER_FALSE = @WCM_DLLOADER_FALSE@ +WCM_DLLOADER_TRUE = @WCM_DLLOADER_TRUE@ +WCM_ENV_NCURSES_FALSE = @WCM_ENV_NCURSES_FALSE@ +WCM_ENV_NCURSES_TRUE = @WCM_ENV_NCURSES_TRUE@ +WCM_ENV_XFREE86_FALSE = @WCM_ENV_XFREE86_FALSE@ +WCM_ENV_XFREE86_TRUE = @WCM_ENV_XFREE86_TRUE@ +WCM_ENV_XORGSDK_FALSE = @WCM_ENV_XORGSDK_FALSE@ +WCM_ENV_XORGSDK_TRUE = @WCM_ENV_XORGSDK_TRUE@ +WCM_KERNEL_DIR = @WCM_KERNEL_DIR@ +WCM_KERNEL_VER = @WCM_KERNEL_VER@ +WCM_KSTACK = @WCM_KSTACK@ +WCM_LIBS = @WCM_LIBS@ +WCM_LIBWACOMCFG_LIBS = @WCM_LIBWACOMCFG_LIBS@ +WCM_LIBWACOMCFG_VER = @WCM_LIBWACOMCFG_VER@ +WCM_MODDIR = @WCM_MODDIR@ +WCM_MODULES = @WCM_MODULES@ +WCM_MODVER = @WCM_MODVER@ +WCM_NO_MERGE_CONSTANTS = @WCM_NO_MERGE_CONSTANTS@ +WCM_NO_STACK_PROTECTOR = @WCM_NO_STACK_PROTECTOR@ +WCM_OPTION_EVDEV = @WCM_OPTION_EVDEV@ +WCM_OPTION_HID = @WCM_OPTION_HID@ +WCM_OPTION_INPUT = @WCM_OPTION_INPUT@ +WCM_OPTION_MOUSEDEV = @WCM_OPTION_MOUSEDEV@ +WCM_OPTION_USBMOUSE = @WCM_OPTION_USBMOUSE@ +WCM_OPTION_WACOM = @WCM_OPTION_WACOM@ +WCM_PREFIX = @WCM_PREFIX@ +WCM_PROGS = @WCM_PROGS@ +WCM_TCLLIBS = @WCM_TCLLIBS@ +WCM_TCLPKGS = @WCM_TCLPKGS@ +WCM_WACOMXI_LIBS = @WCM_WACOMXI_LIBS@ +WCM_XF86MODULES = @WCM_XF86MODULES@ +WCM_XFREE86_DIR = @WCM_XFREE86_DIR@ +WCM_XIDUMP_LIBS = @WCM_XIDUMP_LIBS@ +WCM_XORGSDK_DIR = @WCM_XORGSDK_DIR@ +WCM_XSERVER64 = @WCM_XSERVER64@ +WCM_XSETWACOM_LIBS = @WCM_XSETWACOM_LIBS@ +XMKMF = @XMKMF@ +XSERVER_CFLAGS = @XSERVER_CFLAGS@ +XSERVER_LIBS = @XSERVER_LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +Xlib_CFLAGS = @Xlib_CFLAGS@ +Xlib_LIBS = @Xlib_LIBS@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +noinst_SCRIPTS = @WCM_MODULES@ +EXTRA_SCRIPTS = wacom.o hid.o usbmouse.o evdev.o input.o mousedev.o +KERNEL_DIR = @WCM_KERNELDIR@ +DEBUG_FLAGS = -D__JEJ_DEBUG +MODS = @WCM_MODVER@ +ARCHITECTURE = @WCM_ARCH@ +USBDIR = $(KERNEL_DIR)/drivers/usb +KCFLAGS = -Wall $(DEBUG_FLAGS) -D__KERNEL__ \ + -DMODULE -DEXPORT_SYMTAB $(MODS) \ + -Wstrict-prototypes -Wno-trigraphs -O2 \ + -fno-strict-aliasing \ + -fno-common -fomit-frame-pointer -pipe \ + -mpreferred-stack-boundary=2 \ + -march=$(ARCHITECTURE) + +NO_MERGE_CONSTANTS = @WCM_NO_MERGE_CONSTANTS@ +LINUX_INPUT = @WCM_LINUX_INPUT@ -I$(KERNEL_DIR)/include +HID_OBJS = hid-core.o hiddev.o hid-input.o +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/2.4.28/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/2.4.28/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +wacom.o: wacom.c Makefile + $(CC) -I$(KERNEL_DIR)/include $(KCFLAGS) \ + -DKBUILD_BASENAME=wacom -c -o wacom.o wacom.c + +hid.o: $(HID_OBJS) Makefile + $(LD) -r -o $@ $(HID_OBJS) + +hid-core.o: hid-core.c Makefile + $(CC) -I$(KERNEL_DIR)/include -I$(USBDIR) $(KCFLAGS) \ + -DKBUILD_BASENAME=hid-core -c -o hid-core.o hid-core.c + +hiddev.o: $(USBDIR)/hiddev.c Makefile + $(CC) -I$(KERNEL_DIR)/include -I$(USBDIR) $(KCFLAGS) \ + -DKBUILD_BASENAME=hiddev -c -o hiddev.o hiddev.c + +hid-input.o: $(USBDIR)/hid-input.c Makefile + $(CC) -I$(KERNEL_DIR)/include -I$(USBDIR) $(KCFLAGS) \ + -DKBUILD_BASENAME=hid-input -c \ + -o hid-input.o hid-input.c + +usbmouse.o: usbmouse.c Makefile + $(CC) -I$(KERNEL_DIR)/include -I$(USBDIR) $(KCFLAGS) \ + -DKBUILD_BASENAME=usbmouse -c \ + -o usbmouse.o usbmouse.c + +evdev.o: evdev.c Makefile + $(CC) -I$(KERNEL_DIR)/include $(KCFLAGS) \ + -DKBUILD_BASENAME=evdev -c -o evdev.o evdev.c + +mousedev.o: mousedev.c Makefile + $(CC) -I$(KERNEL_DIR)/include $(KCFLAGS) \ + -DKBUILD_BASENAME=mousedev -c -o mousedev.o mousedev.c + +input.o: input.c Makefile + $(CC) -I$(KERNEL_DIR)/include $(KCFLAGS) \ + -DKBUILD_BASENAME=input -c -o input.o input.c + +clean: + rm -f *.o core *.core +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- wacom-tools-0.8.1.6.orig/linuxwacom/src/2.4.28/mousedev.c +++ wacom-tools-0.8.1.6/linuxwacom/src/2.4.28/mousedev.c @@ -0,0 +1,524 @@ +/* + * $Id: mousedev.c,v 1.1 2004-12-02 16:55:40 ron Exp $ + * + * Copyright (c) 1999-2000 Vojtech Pavlik + * + * Input driver to ImExPS/2 device driver module. + * + * Sponsored by SuSE + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Should you need to contact me, the author, you can do so either by + * e-mail - mail your message to , or by paper mail: + * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic + */ + +#include +#if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS) +# define MODVERSIONS +#endif + +#ifdef MODVERSIONS +#include +#endif + +#define MOUSEDEV_MINOR_BASE 32 +#define MOUSEDEV_MINORS 32 +#define MOUSEDEV_MIX 31 + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef CONFIG_INPUT_MOUSEDEV_SCREEN_X +#define CONFIG_INPUT_MOUSEDEV_SCREEN_X 1024 +#endif +#ifndef CONFIG_INPUT_MOUSEDEV_SCREEN_Y +#define CONFIG_INPUT_MOUSEDEV_SCREEN_Y 768 +#endif + +struct mousedev { + int exist; + int open; + int minor; + wait_queue_head_t wait; + struct mousedev_list *list; + struct input_handle handle; + devfs_handle_t devfs; +}; + +struct mousedev_list { + struct fasync_struct *fasync; + struct mousedev *mousedev; + struct mousedev_list *next; + int dx, dy, dz, oldx, oldy; + signed char ps2[6]; + unsigned long buttons; + unsigned char ready, buffer, bufsiz; + unsigned char mode, imexseq, impsseq; +}; + +#define MOUSEDEV_SEQ_LEN 6 + +static unsigned char mousedev_imps_seq[] = { 0xf3, 200, 0xf3, 100, 0xf3, 80 }; +static unsigned char mousedev_imex_seq[] = { 0xf3, 200, 0xf3, 200, 0xf3, 80 }; + +static struct input_handler mousedev_handler; + +static struct mousedev *mousedev_table[MOUSEDEV_MINORS]; +static struct mousedev mousedev_mix; + +static int xres = CONFIG_INPUT_MOUSEDEV_SCREEN_X; +static int yres = CONFIG_INPUT_MOUSEDEV_SCREEN_Y; + +static void mousedev_event(struct input_handle *handle, unsigned int type, unsigned int code, int value) +{ + struct mousedev *mousedevs[3] = { handle->private, &mousedev_mix, NULL }; + struct mousedev **mousedev = mousedevs; + struct mousedev_list *list; + int index, size; + + add_mouse_randomness((type << 4) ^ code ^ (code >> 4) ^ value); + + while (*mousedev) { + list = (*mousedev)->list; + while (list) { + switch (type) { + case EV_ABS: + if (test_bit(BTN_TRIGGER, handle->dev->keybit)) + break; + switch (code) { + case ABS_X: + size = handle->dev->absmax[ABS_X] - handle->dev->absmin[ABS_X]; + list->dx += (value * xres - list->oldx) / size; + list->oldx += list->dx * size; + break; + case ABS_Y: + size = handle->dev->absmax[ABS_Y] - handle->dev->absmin[ABS_Y]; + list->dy -= (value * yres - list->oldy) / size; + list->oldy -= list->dy * size; + break; + } + break; + + case EV_REL: + switch (code) { + case REL_X: list->dx += value; break; + case REL_Y: list->dy -= value; break; + case REL_WHEEL: if (list->mode) list->dz -= value; break; + } + break; + + case EV_KEY: + switch (code) { + case BTN_0: + case BTN_TOUCH: + case BTN_LEFT: index = 0; break; + case BTN_4: + case BTN_EXTRA: if (list->mode == 2) { index = 4; break; } + case BTN_STYLUS: + case BTN_1: + case BTN_RIGHT: index = 1; break; + case BTN_3: + case BTN_SIDE: if (list->mode == 2) { index = 3; break; } + case BTN_2: + case BTN_STYLUS2: + case BTN_MIDDLE: index = 2; break; + default: return; + } + switch (value) { + case 0: clear_bit(index, &list->buttons); break; + case 1: set_bit(index, &list->buttons); break; + case 2: return; + } + break; + } + + list->ready = 1; + + kill_fasync(&list->fasync, SIGIO, POLL_IN); + + list = list->next; + } + + wake_up_interruptible(&((*mousedev)->wait)); + mousedev++; + } +} + +static int mousedev_fasync(int fd, struct file *file, int on) +{ + int retval; + struct mousedev_list *list = file->private_data; + retval = fasync_helper(fd, file, on, &list->fasync); + return retval < 0 ? retval : 0; +} + +static int mousedev_release(struct inode * inode, struct file * file) +{ + struct mousedev_list *list = file->private_data; + struct mousedev_list **listptr; + + lock_kernel(); + listptr = &list->mousedev->list; + mousedev_fasync(-1, file, 0); + + while (*listptr && (*listptr != list)) + listptr = &((*listptr)->next); + *listptr = (*listptr)->next; + + if (!--list->mousedev->open) { + if (list->mousedev->minor == MOUSEDEV_MIX) { + struct input_handle *handle = mousedev_handler.handle; + while (handle) { + struct mousedev *mousedev = handle->private; + if (!mousedev->open) { + if (mousedev->exist) { + input_close_device(&mousedev->handle); + } else { + input_unregister_minor(mousedev->devfs); + mousedev_table[mousedev->minor] = NULL; + kfree(mousedev); + } + } + handle = handle->hnext; + } + } else { + if (!mousedev_mix.open) { + if (list->mousedev->exist) { + input_close_device(&list->mousedev->handle); + } else { + input_unregister_minor(list->mousedev->devfs); + mousedev_table[list->mousedev->minor] = NULL; + kfree(list->mousedev); + } + } + } + } + + kfree(list); + unlock_kernel(); + + return 0; +} + +static int mousedev_open(struct inode * inode, struct file * file) +{ + struct mousedev_list *list; + int i = MINOR(inode->i_rdev) - MOUSEDEV_MINOR_BASE; + + if (i >= MOUSEDEV_MINORS || !mousedev_table[i]) + return -ENODEV; + + if (!(list = kmalloc(sizeof(struct mousedev_list), GFP_KERNEL))) + return -ENOMEM; + memset(list, 0, sizeof(struct mousedev_list)); + + list->mousedev = mousedev_table[i]; + list->next = mousedev_table[i]->list; + mousedev_table[i]->list = list; + file->private_data = list; + + if (!list->mousedev->open++) { + if (list->mousedev->minor == MOUSEDEV_MIX) { + struct input_handle *handle = mousedev_handler.handle; + while (handle) { + struct mousedev *mousedev = handle->private; + if (!mousedev->open) + if (mousedev->exist) + input_open_device(handle); + handle = handle->hnext; + } + } else { + if (!mousedev_mix.open) + if (list->mousedev->exist) + input_open_device(&list->mousedev->handle); + } + } + + return 0; +} + +static void mousedev_packet(struct mousedev_list *list, unsigned char off) +{ + list->ps2[off] = 0x08 | ((list->dx < 0) << 4) | ((list->dy < 0) << 5) | (list->buttons & 0x07); + list->ps2[off + 1] = (list->dx > 127 ? 127 : (list->dx < -127 ? -127 : list->dx)); + list->ps2[off + 2] = (list->dy > 127 ? 127 : (list->dy < -127 ? -127 : list->dy)); + list->dx -= list->ps2[off + 1]; + list->dy -= list->ps2[off + 2]; + list->bufsiz = off + 3; + + if (list->mode == 2) { + list->ps2[off + 3] = (list->dz > 7 ? 7 : (list->dz < -7 ? -7 : list->dz)); + list->dz -= list->ps2[off + 3]; + list->ps2[off + 3] = (list->ps2[off + 3] & 0x0f) | ((list->buttons & 0x18) << 1); + list->bufsiz++; + } + + if (list->mode == 1) { + list->ps2[off + 3] = (list->dz > 127 ? 127 : (list->dz < -127 ? -127 : list->dz)); + list->dz -= list->ps2[off + 3]; + list->bufsiz++; + } + + if (!list->dx && !list->dy && (!list->mode || !list->dz)) list->ready = 0; + list->buffer = list->bufsiz; +} + + +static ssize_t mousedev_write(struct file * file, const char * buffer, size_t count, loff_t *ppos) +{ + struct mousedev_list *list = file->private_data; + unsigned char c; + int i; + + for (i = 0; i < count; i++) { + + if (get_user(c, buffer + i)) + return -EFAULT; + + if (c == mousedev_imex_seq[list->imexseq]) { + if (++list->imexseq == MOUSEDEV_SEQ_LEN) { + list->imexseq = 0; + list->mode = 2; + } + } else list->imexseq = 0; + + if (c == mousedev_imps_seq[list->impsseq]) { + if (++list->impsseq == MOUSEDEV_SEQ_LEN) { + list->impsseq = 0; + list->mode = 1; + } + } else list->impsseq = 0; + + list->ps2[0] = 0xfa; + list->bufsiz = 1; + list->ready = 1; + + switch (c) { + + case 0xeb: /* Poll */ + mousedev_packet(list, 1); + break; + + case 0xf2: /* Get ID */ + switch (list->mode) { + case 0: list->ps2[1] = 0; break; + case 1: list->ps2[1] = 3; break; + case 2: list->ps2[1] = 4; break; + } + list->bufsiz = 2; + break; + + case 0xe9: /* Get info */ + list->ps2[1] = 0x60; list->ps2[2] = 3; list->ps2[3] = 200; + list->bufsiz = 4; + break; + } + + list->buffer = list->bufsiz; + } + + kill_fasync(&list->fasync, SIGIO, POLL_IN); + + wake_up_interruptible(&list->mousedev->wait); + + return count; +} + +static ssize_t mousedev_read(struct file * file, char * buffer, size_t count, loff_t *ppos) +{ + DECLARE_WAITQUEUE(wait, current); + struct mousedev_list *list = file->private_data; + int retval = 0; + + if (!list->ready && !list->buffer) { + + add_wait_queue(&list->mousedev->wait, &wait); + current->state = TASK_INTERRUPTIBLE; + + while (!list->ready) { + + if (file->f_flags & O_NONBLOCK) { + retval = -EAGAIN; + break; + } + if (signal_pending(current)) { + retval = -ERESTARTSYS; + break; + } + + schedule(); + } + + current->state = TASK_RUNNING; + remove_wait_queue(&list->mousedev->wait, &wait); + } + + if (retval) + return retval; + + if (!list->buffer) + mousedev_packet(list, 0); + + if (count > list->buffer) + count = list->buffer; + + if (copy_to_user(buffer, list->ps2 + list->bufsiz - list->buffer, count)) + return -EFAULT; + + list->buffer -= count; + + return count; +} + +/* No kernel lock - fine */ +static unsigned int mousedev_poll(struct file *file, poll_table *wait) +{ + struct mousedev_list *list = file->private_data; + poll_wait(file, &list->mousedev->wait, wait); + if (list->ready || list->buffer) + return POLLIN | POLLRDNORM; + return 0; +} + +struct file_operations mousedev_fops = { + owner: THIS_MODULE, + read: mousedev_read, + write: mousedev_write, + poll: mousedev_poll, + open: mousedev_open, + release: mousedev_release, + fasync: mousedev_fasync, +}; + +static struct input_handle *mousedev_connect(struct input_handler *handler, struct input_dev *dev) +{ + struct mousedev *mousedev; + int minor = 0; + + /* Ignore all wacom tablets */ + if (dev->idvendor == 0x56a) + { + printk(KERN_INFO "mousedev.c: Ignoring wacom tablet\n"); + return NULL; + } + + if (!test_bit(EV_KEY, dev->evbit) || + (!test_bit(BTN_LEFT, dev->keybit) && + !test_bit(BTN_MIDDLE, dev->keybit) && + !test_bit(BTN_TOUCH, dev->keybit))) + return NULL; + + if ((!test_bit(EV_REL, dev->evbit) || !test_bit(REL_X, dev->relbit)) && + (!test_bit(EV_REL, dev->evbit) || !test_bit(REL_WHEEL, dev->relbit)) && + (!test_bit(EV_ABS, dev->evbit) || !test_bit(ABS_X, dev->absbit))) + return NULL; + + for (minor = 0; minor < MOUSEDEV_MINORS && mousedev_table[minor]; minor++); + if (minor == MOUSEDEV_MINORS) { + printk(KERN_ERR "mousedev: no more free mousedev devices\n"); + return NULL; + } + + if (!(mousedev = kmalloc(sizeof(struct mousedev), GFP_KERNEL))) + return NULL; + memset(mousedev, 0, sizeof(struct mousedev)); + init_waitqueue_head(&mousedev->wait); + + mousedev->exist = 1; + mousedev->minor = minor; + mousedev_table[minor] = mousedev; + + mousedev->handle.dev = dev; + mousedev->handle.handler = handler; + mousedev->handle.private = mousedev; + + mousedev->devfs = input_register_minor("mouse%d", minor, MOUSEDEV_MINOR_BASE); + + if (mousedev_mix.open) + input_open_device(&mousedev->handle); + +// printk(KERN_INFO "mouse%d: PS/2 mouse device for input%d\n", minor, dev->number); + + return &mousedev->handle; +} + +static void mousedev_disconnect(struct input_handle *handle) +{ + struct mousedev *mousedev = handle->private; + + mousedev->exist = 0; + + if (mousedev->open) { + input_close_device(handle); + } else { + if (mousedev_mix.open) + input_close_device(handle); + input_unregister_minor(mousedev->devfs); + mousedev_table[mousedev->minor] = NULL; + kfree(mousedev); + } +} + +static struct input_handler mousedev_handler = { + event: mousedev_event, + connect: mousedev_connect, + disconnect: mousedev_disconnect, + fops: &mousedev_fops, + minor: MOUSEDEV_MINOR_BASE, +}; + +static int __init mousedev_init(void) +{ + input_register_handler(&mousedev_handler); + + memset(&mousedev_mix, 0, sizeof(struct mousedev)); + init_waitqueue_head(&mousedev_mix.wait); + mousedev_table[MOUSEDEV_MIX] = &mousedev_mix; + mousedev_mix.exist = 1; + mousedev_mix.minor = MOUSEDEV_MIX; + mousedev_mix.devfs = input_register_minor("mice", MOUSEDEV_MIX, MOUSEDEV_MINOR_BASE); + + printk(KERN_INFO "mice: PS/2 mouse device common for all mice\n"); + + return 0; +} + +static void __exit mousedev_exit(void) +{ + input_unregister_minor(mousedev_mix.devfs); + input_unregister_handler(&mousedev_handler); +} + +module_init(mousedev_init); +module_exit(mousedev_exit); + +MODULE_AUTHOR("Vojtech Pavlik "); +MODULE_DESCRIPTION("Input driver to PS/2 or ImPS/2 device driver"); +MODULE_LICENSE("GPL"); + +MODULE_PARM(xres, "i"); +MODULE_PARM_DESC(xres, "Horizontal screen resolution"); +MODULE_PARM(yres, "i"); +MODULE_PARM_DESC(yres, "Vertical screen resolution"); --- wacom-tools-0.8.1.6.orig/linuxwacom/src/2.4.28/evdev.c +++ wacom-tools-0.8.1.6/linuxwacom/src/2.4.28/evdev.c @@ -0,0 +1,429 @@ +/* + * $Id: evdev.c,v 1.1 2004-12-02 16:55:40 ron Exp $ + * + * Copyright (c) 1999-2001 Vojtech Pavlik + * + * Event char devices, giving access to raw input device events. + * + * Sponsored by SuSE + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Should you need to contact me, the author, you can do so either by + * e-mail - mail your message to , or by paper mail: + * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic + */ + +#include +#if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS) +# define MODVERSIONS +#endif + +#ifdef MODVERSIONS +#include +#endif + +#define EVDEV_MINOR_BASE 64 +#define EVDEV_MINORS 32 +#define EVDEV_BUFFER_SIZE 64 + +#include +#include +#include +#include +#include +#include + +struct evdev { + int exist; + int open; + int minor; + struct input_handle handle; + wait_queue_head_t wait; + devfs_handle_t devfs; + struct evdev_list *list; +}; + +struct evdev_list { + struct input_event buffer[EVDEV_BUFFER_SIZE]; + int head; + int tail; + struct fasync_struct *fasync; + struct evdev *evdev; + struct evdev_list *next; +}; + +static struct evdev *evdev_table[EVDEV_MINORS] = { NULL, /* ... */ }; + +static void evdev_event(struct input_handle *handle, unsigned int type, unsigned int code, int value) +{ + struct evdev *evdev = handle->private; + struct evdev_list *list = evdev->list; + + while (list) { + + do_gettimeofday(&list->buffer[list->head].time); + list->buffer[list->head].type = type; + list->buffer[list->head].code = code; + list->buffer[list->head].value = value; + list->head = (list->head + 1) & (EVDEV_BUFFER_SIZE - 1); + + kill_fasync(&list->fasync, SIGIO, POLL_IN); + + list = list->next; + } + + wake_up_interruptible(&evdev->wait); +} + +static int evdev_fasync(int fd, struct file *file, int on) +{ + int retval; + struct evdev_list *list = file->private_data; + retval = fasync_helper(fd, file, on, &list->fasync); + return retval < 0 ? retval : 0; +} + +static int evdev_release(struct inode * inode, struct file * file) +{ + struct evdev_list *list = file->private_data; + struct evdev_list **listptr; + + lock_kernel(); + listptr = &list->evdev->list; + evdev_fasync(-1, file, 0); + + while (*listptr && (*listptr != list)) + listptr = &((*listptr)->next); + *listptr = (*listptr)->next; + + if (!--list->evdev->open) { + if (list->evdev->exist) { + input_close_device(&list->evdev->handle); + } else { + input_unregister_minor(list->evdev->devfs); + evdev_table[list->evdev->minor] = NULL; + kfree(list->evdev); + } + } + + kfree(list); + unlock_kernel(); + + return 0; +} + +static int evdev_open(struct inode * inode, struct file * file) +{ + struct evdev_list *list; + int i = MINOR(inode->i_rdev) - EVDEV_MINOR_BASE; + + if (i >= EVDEV_MINORS || !evdev_table[i]) + return -ENODEV; + + if (!(list = kmalloc(sizeof(struct evdev_list), GFP_KERNEL))) + return -ENOMEM; + memset(list, 0, sizeof(struct evdev_list)); + + list->evdev = evdev_table[i]; + list->next = evdev_table[i]->list; + evdev_table[i]->list = list; + + file->private_data = list; + + if (!list->evdev->open++) + if (list->evdev->exist) + input_open_device(&list->evdev->handle); + + return 0; +} + +static ssize_t evdev_write(struct file * file, const char * buffer, size_t count, loff_t *ppos) +{ + struct evdev_list *list = file->private_data; + struct input_event event; + int retval = 0; + + while (retval < count) { + + if (copy_from_user(&event, buffer + retval, sizeof(struct input_event))) + return -EFAULT; + input_event(list->evdev->handle.dev, event.type, event.code, event.value); + retval += sizeof(struct input_event); + } + + return retval; +} + +static ssize_t evdev_read(struct file * file, char * buffer, size_t count, loff_t *ppos) +{ + DECLARE_WAITQUEUE(wait, current); + struct evdev_list *list = file->private_data; + int retval = 0; + + if (list->head == list->tail) { + + add_wait_queue(&list->evdev->wait, &wait); + current->state = TASK_INTERRUPTIBLE; + + while (list->head == list->tail) { + + if (!list->evdev->exist) { + retval = -ENODEV; + break; + } + if (file->f_flags & O_NONBLOCK) { + retval = -EAGAIN; + break; + } + if (signal_pending(current)) { + retval = -ERESTARTSYS; + break; + } + + schedule(); + } + + current->state = TASK_RUNNING; + remove_wait_queue(&list->evdev->wait, &wait); + } + + if (retval) + return retval; + + while (list->head != list->tail && retval + sizeof(struct input_event) <= count) { + if (copy_to_user(buffer + retval, list->buffer + list->tail, + sizeof(struct input_event))) return -EFAULT; + list->tail = (list->tail + 1) & (EVDEV_BUFFER_SIZE - 1); + retval += sizeof(struct input_event); + } + + return retval; +} + +/* No kernel lock - fine */ +static unsigned int evdev_poll(struct file *file, poll_table *wait) +{ + struct evdev_list *list = file->private_data; + poll_wait(file, &list->evdev->wait, wait); + if (list->head != list->tail) + return POLLIN | POLLRDNORM; + return 0; +} + +static int evdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) +{ + struct evdev_list *list = file->private_data; + struct evdev *evdev = list->evdev; + struct input_dev *dev = evdev->handle.dev; + int retval; + + if (!evdev->exist) + return -ENODEV; + + switch (cmd) { + + case EVIOCGVERSION: + return put_user(EV_VERSION, (int *) arg); + + case EVIOCGID: + if ((retval = put_user(dev->idbus, ((short *) arg) + 0))) return retval; + if ((retval = put_user(dev->idvendor, ((short *) arg) + 1))) return retval; + if ((retval = put_user(dev->idproduct, ((short *) arg) + 2))) return retval; + if ((retval = put_user(dev->idversion, ((short *) arg) + 3))) return retval; + return 0; + + case EVIOCSFF: + if (dev->upload_effect) { + struct ff_effect effect; + int err; + + if (copy_from_user((void*)(&effect), (void*)arg, sizeof(effect))) { + return -EINVAL; + } + err = dev->upload_effect(dev, &effect); + if (put_user(effect.id, &(((struct ff_effect*)arg)->id))) { + return -EINVAL; + } + return err; + } + else return -ENOSYS; + + case EVIOCRMFF: + if (dev->erase_effect) { + return dev->erase_effect(dev, (int)arg); + } + else return -ENOSYS; + + case EVIOCGEFFECTS: + put_user(dev->ff_effects_max, (int*) arg); + return 0; + + default: + + if (_IOC_TYPE(cmd) != 'E' || _IOC_DIR(cmd) != _IOC_READ) + return -EINVAL; + + if ((_IOC_NR(cmd) & ~EV_MAX) == _IOC_NR(EVIOCGBIT(0,0))) { + + long *bits; + int len; + + switch (_IOC_NR(cmd) & EV_MAX) { + case 0: bits = dev->evbit; len = EV_MAX; break; + case EV_KEY: bits = dev->keybit; len = KEY_MAX; break; + case EV_REL: bits = dev->relbit; len = REL_MAX; break; + case EV_ABS: bits = dev->absbit; len = ABS_MAX; break; + case EV_LED: bits = dev->ledbit; len = LED_MAX; break; + case EV_SND: bits = dev->sndbit; len = SND_MAX; break; + case EV_FF: bits = dev->ffbit; len = FF_MAX; break; + default: return -EINVAL; + } + len = NBITS(len) * sizeof(long); + if (len > _IOC_SIZE(cmd)) { + printk(KERN_WARNING "evdev.c: Truncating bitfield length from %d to %d\n", + len, _IOC_SIZE(cmd)); + len = _IOC_SIZE(cmd); + } + return copy_to_user((char *) arg, bits, len) ? -EFAULT : len; + } + + if (_IOC_NR(cmd) == _IOC_NR(EVIOCGNAME(0))) { + int len; + if (!dev->name) return 0; + len = strlen(dev->name) + 1; + if (len > _IOC_SIZE(cmd)) len = _IOC_SIZE(cmd); + return copy_to_user((char *) arg, dev->name, len) ? -EFAULT : len; + } + + if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCGABS(0))) { + + int t = _IOC_NR(cmd) & ABS_MAX; + + if ((retval = put_user(dev->abs[t], ((int *) arg) + 0))) return retval; + if ((retval = put_user(dev->absmin[t], ((int *) arg) + 1))) return retval; + if ((retval = put_user(dev->absmax[t], ((int *) arg) + 2))) return retval; + if ((retval = put_user(dev->absfuzz[t], ((int *) arg) + 3))) return retval; + if ((retval = put_user(dev->absflat[t], ((int *) arg) + 4))) return retval; + + return 0; + } + } + return -EINVAL; +} + +static struct file_operations evdev_fops = { + owner: THIS_MODULE, + read: evdev_read, + write: evdev_write, + poll: evdev_poll, + open: evdev_open, + release: evdev_release, + ioctl: evdev_ioctl, + fasync: evdev_fasync, +}; + +static struct input_handle *evdev_connect(struct input_handler *handler, struct input_dev *dev) +{ + struct evdev *evdev; + int minor; + + for (minor = 0; minor < EVDEV_MINORS && evdev_table[minor]; minor++) + { + + if (!evdev_table[minor]->exist && evdev_table[minor]->open) /* reuse */ + { + evdev = evdev_table[minor]; + evdev->handle.dev = dev; + evdev->handle.handler = handler; + evdev->handle.private = evdev; /* should already be */ + evdev->exist = 1; + printk(KERN_INFO "evdev: reusing event%d for input%d\n", minor, dev->number); + input_open_device(&evdev->handle); + wake_up_interruptible(&evdev->wait); + return &evdev->handle; + } + } + if (minor == EVDEV_MINORS) { + printk(KERN_ERR "evdev: no more free evdev devices\n"); + return NULL; + } + + if (!(evdev = kmalloc(sizeof(struct evdev), GFP_KERNEL))) + return NULL; + memset(evdev, 0, sizeof(struct evdev)); + + init_waitqueue_head(&evdev->wait); + + evdev->minor = minor; + evdev_table[minor] = evdev; + + evdev->handle.dev = dev; + evdev->handle.handler = handler; + evdev->handle.private = evdev; + + evdev->exist = 1; + + evdev->devfs = input_register_minor("event%d", minor, EVDEV_MINOR_BASE); + +// printk(KERN_INFO "event%d: Event device for input%d\n", minor, dev->number); + + return &evdev->handle; +} + +static void evdev_disconnect(struct input_handle *handle) +{ + struct evdev *evdev = handle->private; + + evdev->exist = 0; + + if (evdev->open) { + input_close_device(handle); + wake_up_interruptible(&evdev->wait); + } else { + input_unregister_minor(evdev->devfs); + evdev_table[evdev->minor] = NULL; + kfree(evdev); + } +} + +static struct input_handler evdev_handler = { + event: evdev_event, + connect: evdev_connect, + disconnect: evdev_disconnect, + fops: &evdev_fops, + minor: EVDEV_MINOR_BASE, +}; + +static int __init evdev_init(void) +{ + input_register_handler(&evdev_handler); + return 0; +} + +static void __exit evdev_exit(void) +{ + input_unregister_handler(&evdev_handler); +} + +module_init(evdev_init); +module_exit(evdev_exit); + +MODULE_AUTHOR("Vojtech Pavlik "); +MODULE_DESCRIPTION("Event character device driver"); +MODULE_LICENSE("GPL"); + --- wacom-tools-0.8.1.6.orig/linuxwacom/src/2.4.28/hid-core.c +++ wacom-tools-0.8.1.6/linuxwacom/src/2.4.28/hid-core.c @@ -0,0 +1,1493 @@ +/* + * $Id: hid-core.c,v 1.1 2004-12-02 16:55:40 ron Exp $ + * + * Copyright (c) 1999 Andreas Gal + * Copyright (c) 2000-2001 Vojtech Pavlik + * + * USB HID support for Linux + * + * Sponsored by SuSE + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Should you need to contact me, the author, you can do so either by + * e-mail - mail your message to , or by paper mail: + * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic + */ + +#include +#if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS) +# define MODVERSIONS +#endif + +#ifdef MODVERSIONS +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#undef DEBUG +#undef DEBUG_DATA + +#include + +#include "hid.h" +#include + +/* + * Version Information + */ + +#define DRIVER_VERSION "v1.8.1" +#define DRIVER_AUTHOR "Andreas Gal, Vojtech Pavlik " +#define DRIVER_DESC "USB HID support drivers" + +static char *hid_types[] = {"Device", "Pointer", "Mouse", "Device", "Joystick", + "Gamepad", "Keyboard", "Keypad", "Multi-Axis Controller"}; + +/* + * Register a new report for a device. + */ + +static struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id) +{ + struct hid_report_enum *report_enum = device->report_enum + type; + struct hid_report *report; + + if (report_enum->report_id_hash[id]) + return report_enum->report_id_hash[id]; + + if (!(report = kmalloc(sizeof(struct hid_report), GFP_KERNEL))) + return NULL; + memset(report, 0, sizeof(struct hid_report)); + + if (id != 0) report_enum->numbered = 1; + + report->id = id; + report->type = type; + report->size = 0; + report->device = device; + report_enum->report_id_hash[id] = report; + + list_add_tail(&report->list, &report_enum->report_list); + + return report; +} + +/* + * Register a new field for this report. + */ + +static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages, unsigned values) +{ + struct hid_field *field; + + if (report->maxfield == HID_MAX_FIELDS) { + dbg("too many fields in report"); + return NULL; + } + + if (!(field = kmalloc(sizeof(struct hid_field) + usages * sizeof(struct hid_usage) + + values * sizeof(unsigned), GFP_KERNEL))) return NULL; + + memset(field, 0, sizeof(struct hid_field) + usages * sizeof(struct hid_usage) + + values * sizeof(unsigned)); + + report->field[report->maxfield] = field; + field->usage = (struct hid_usage *)(field + 1); + field->value = (unsigned *)(field->usage + usages); + field->report = report; + field->index = report->maxfield++; + + return field; +} + +/* + * Open a collection. The type/usage is pushed on the stack. + */ + +static int open_collection(struct hid_parser *parser, unsigned type) +{ + struct hid_collection *collection; + unsigned usage; + + usage = parser->local.usage[0]; + + if (parser->collection_stack_ptr == HID_COLLECTION_STACK_SIZE) { + dbg("collection stack overflow"); + return -1; + } + + if (parser->device->maxcollection == parser->device->collection_size) { + collection = kmalloc(sizeof(struct hid_collection) * + parser->device->collection_size * 2, + GFP_KERNEL); + if (collection == NULL) { + dbg("failed to reallocate collection array"); + return -1; + } + memcpy(collection, parser->device->collection, + sizeof(struct hid_collection) * + parser->device->collection_size); + memset(collection + parser->device->collection_size, 0, + sizeof(struct hid_collection) * + parser->device->collection_size); + kfree(parser->device->collection); + parser->device->collection = collection; + parser->device->collection_size *= 2; + } + + parser->collection_stack[parser->collection_stack_ptr++] = + parser->device->maxcollection; + + collection = parser->device->collection + + parser->device->maxcollection++; + + collection->type = type; + collection->usage = usage; + collection->level = parser->collection_stack_ptr - 1; + + if (type == HID_COLLECTION_APPLICATION) + parser->device->maxapplication++; + + return 0; +} + +/* + * Close a collection. + */ + +static int close_collection(struct hid_parser *parser) +{ + if (!parser->collection_stack_ptr) { + dbg("collection stack underflow"); + return -1; + } + parser->collection_stack_ptr--; + return 0; +} + +/* + * Climb up the stack, search for the specified collection type + * and return the usage. + */ + +static unsigned hid_lookup_collection(struct hid_parser *parser, unsigned type) +{ + int n; + for (n = parser->collection_stack_ptr - 1; n >= 0; n--) + if (parser->device->collection[parser->collection_stack[n]].type == type) + return parser->device->collection[parser->collection_stack[n]].usage; + + return 0; /* we know nothing about this usage type */ +} + +/* + * Add a usage to the temporary parser table. + */ + +static int hid_add_usage(struct hid_parser *parser, unsigned usage) +{ + if (parser->local.usage_index >= HID_MAX_USAGES) { + dbg("usage index exceeded"); + return -1; + } + parser->local.usage[parser->local.usage_index] = usage; + parser->local.collection_index[parser->local.usage_index] = + parser->collection_stack_ptr ? + parser->collection_stack[parser->collection_stack_ptr - 1] : 0; + parser->local.usage_index++; + + return 0; +} + +/* + * Register a new field for this report. + */ + +static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsigned flags) +{ + struct hid_report *report; + struct hid_field *field; + int usages; + unsigned offset; + int i; + + if (!(report = hid_register_report(parser->device, report_type, parser->global.report_id))) { + dbg("hid_register_report failed"); + return -1; + } + + if (parser->global.logical_maximum < parser->global.logical_minimum) { + dbg("logical range invalid %d %d", parser->global.logical_minimum, parser->global.logical_maximum); + return -1; + } + + usages = parser->local.usage_index; + + offset = report->size; + report->size += parser->global.report_size * parser->global.report_count; + + if (usages < parser->global.report_count) + usages = parser->global.report_count; + + if (usages == 0) + return 0; /* ignore padding fields */ + + if ((field = hid_register_field(report, usages, parser->global.report_count)) == NULL) + return 0; + + field->physical = hid_lookup_collection(parser, HID_COLLECTION_PHYSICAL); + field->logical = hid_lookup_collection(parser, HID_COLLECTION_LOGICAL); + field->application = hid_lookup_collection(parser, HID_COLLECTION_APPLICATION); + + for (i = 0; i < usages; i++) { + int j = i; + /* Duplicate the last usage we parsed if we have excess values */ + if (i >= parser->local.usage_index) + j = parser->local.usage_index - 1; + field->usage[i].hid = parser->local.usage[j]; + field->usage[i].collection_index = + parser->local.collection_index[j]; + } + + field->maxusage = usages; + field->flags = flags; + field->report_offset = offset; + field->report_type = report_type; + field->report_size = parser->global.report_size; + field->report_count = parser->global.report_count; + field->logical_minimum = parser->global.logical_minimum; + field->logical_maximum = parser->global.logical_maximum; + field->physical_minimum = parser->global.physical_minimum; + field->physical_maximum = parser->global.physical_maximum; + field->unit_exponent = parser->global.unit_exponent; + field->unit = parser->global.unit; + + return 0; +} + +/* + * Read data value from item. + */ + +static __inline__ __u32 item_udata(struct hid_item *item) +{ + switch (item->size) { + case 1: return item->data.u8; + case 2: return item->data.u16; + case 4: return item->data.u32; + } + return 0; +} + +static __inline__ __s32 item_sdata(struct hid_item *item) +{ + switch (item->size) { + case 1: return item->data.s8; + case 2: return item->data.s16; + case 4: return item->data.s32; + } + return 0; +} + +/* + * Process a global item. + */ + +static int hid_parser_global(struct hid_parser *parser, struct hid_item *item) +{ + switch (item->tag) { + + case HID_GLOBAL_ITEM_TAG_PUSH: + + if (parser->global_stack_ptr == HID_GLOBAL_STACK_SIZE) { + dbg("global enviroment stack overflow"); + return -1; + } + + memcpy(parser->global_stack + parser->global_stack_ptr++, + &parser->global, sizeof(struct hid_global)); + return 0; + + case HID_GLOBAL_ITEM_TAG_POP: + + if (!parser->global_stack_ptr) { + dbg("global enviroment stack underflow"); + return -1; + } + + memcpy(&parser->global, parser->global_stack + --parser->global_stack_ptr, + sizeof(struct hid_global)); + return 0; + + case HID_GLOBAL_ITEM_TAG_USAGE_PAGE: + parser->global.usage_page = item_udata(item); + return 0; + + case HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM: + parser->global.logical_minimum = item_sdata(item); + return 0; + + case HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM: + if (parser->global.logical_minimum < 0) + parser->global.logical_maximum = item_sdata(item); + else + parser->global.logical_maximum = item_udata(item); + return 0; + + case HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM: + parser->global.physical_minimum = item_sdata(item); + return 0; + + case HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM: + if (parser->global.physical_minimum < 0) + parser->global.physical_maximum = item_sdata(item); + else + parser->global.physical_maximum = item_udata(item); + return 0; + + case HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT: + parser->global.unit_exponent = item_udata(item); + return 0; + + case HID_GLOBAL_ITEM_TAG_UNIT: + parser->global.unit = item_udata(item); + return 0; + + case HID_GLOBAL_ITEM_TAG_REPORT_SIZE: + if ((parser->global.report_size = item_udata(item)) > 32) { + dbg("invalid report_size %d", parser->global.report_size); + return -1; + } + return 0; + + case HID_GLOBAL_ITEM_TAG_REPORT_COUNT: + if ((parser->global.report_count = item_udata(item)) > HID_MAX_USAGES) { + dbg("invalid report_count %d", parser->global.report_count); + return -1; + } + return 0; + + case HID_GLOBAL_ITEM_TAG_REPORT_ID: + if ((parser->global.report_id = item_udata(item)) == 0) { + dbg("report_id 0 is invalid"); + return -1; + } + return 0; + + default: + dbg("unknown global tag 0x%x", item->tag); + return -1; + } +} + +/* + * Process a local item. + */ + +static int hid_parser_local(struct hid_parser *parser, struct hid_item *item) +{ + __u32 data; + unsigned n; + + if (item->size == 0) { + dbg("item data expected for local item"); + return -1; + } + + data = item_udata(item); + + switch (item->tag) { + + case HID_LOCAL_ITEM_TAG_DELIMITER: + + if (data) { + /* + * We treat items before the first delimiter + * as global to all usage sets (branch 0). + * In the moment we process only these global + * items and the first delimiter set. + */ + if (parser->local.delimiter_depth != 0) { + dbg("nested delimiters"); + return -1; + } + parser->local.delimiter_depth++; + parser->local.delimiter_branch++; + } else { + if (parser->local.delimiter_depth < 1) { + dbg("bogus close delimiter"); + return -1; + } + parser->local.delimiter_depth--; + } + return 1; + + case HID_LOCAL_ITEM_TAG_USAGE: + + if (parser->local.delimiter_branch > 1) { + dbg("alternative usage ignored"); + return 0; + } + + if (item->size <= 2) + data = (parser->global.usage_page << 16) + data; + + return hid_add_usage(parser, data); + + case HID_LOCAL_ITEM_TAG_USAGE_MINIMUM: + + if (parser->local.delimiter_branch > 1) { + dbg("alternative usage ignored"); + return 0; + } + + if (item->size <= 2) + data = (parser->global.usage_page << 16) + data; + + parser->local.usage_minimum = data; + return 0; + + case HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM: + + if (parser->local.delimiter_branch > 1) { + dbg("alternative usage ignored"); + return 0; + } + + if (item->size <= 2) + data = (parser->global.usage_page << 16) + data; + + for (n = parser->local.usage_minimum; n <= data; n++) + if (hid_add_usage(parser, n)) { + dbg("hid_add_usage failed\n"); + return -1; + } + return 0; + + default: + + dbg("unknown local item tag 0x%x", item->tag); + return 0; + } + return 0; +} + +/* + * Process a main item. + */ + +static int hid_parser_main(struct hid_parser *parser, struct hid_item *item) +{ + __u32 data; + int ret; + + data = item_udata(item); + + switch (item->tag) { + case HID_MAIN_ITEM_TAG_BEGIN_COLLECTION: + ret = open_collection(parser, data & 0xff); + break; + case HID_MAIN_ITEM_TAG_END_COLLECTION: + ret = close_collection(parser); + break; + case HID_MAIN_ITEM_TAG_INPUT: + ret = hid_add_field(parser, HID_INPUT_REPORT, data); + break; + case HID_MAIN_ITEM_TAG_OUTPUT: + ret = hid_add_field(parser, HID_OUTPUT_REPORT, data); + break; + case HID_MAIN_ITEM_TAG_FEATURE: + ret = hid_add_field(parser, HID_FEATURE_REPORT, data); + break; + default: + dbg("unknown main item tag 0x%x", item->tag); + ret = 0; + } + + memset(&parser->local, 0, sizeof(parser->local)); /* Reset the local parser environment */ + + return ret; +} + +/* + * Process a reserved item. + */ + +static int hid_parser_reserved(struct hid_parser *parser, struct hid_item *item) +{ + dbg("reserved item type, tag 0x%x", item->tag); + return 0; +} + +/* + * Free a report and all registered fields. The field->usage and + * field->value table's are allocated behind the field, so we need + * only to free(field) itself. + */ + +static void hid_free_report(struct hid_report *report) +{ + unsigned n; + + for (n = 0; n < report->maxfield; n++) + kfree(report->field[n]); + if (report->data) + kfree(report->data); + kfree(report); +} + +/* + * Free a device structure, all reports, and all fields. + */ + +static void hid_free_device(struct hid_device *device) +{ + unsigned i,j; + + for (i = 0; i < HID_REPORT_TYPES; i++) { + struct hid_report_enum *report_enum = device->report_enum + i; + + for (j = 0; j < 256; j++) { + struct hid_report *report = report_enum->report_id_hash[j]; + if (report) hid_free_report(report); + } + } + + if (device->rdesc) kfree(device->rdesc); + if (device->collection) kfree(device->collection); +} + +/* + * Fetch a report description item from the data stream. We support long + * items, though they are not used yet. + */ + +static __u8 *fetch_item(__u8 *start, __u8 *end, struct hid_item *item) +{ + if ((end - start) > 0) { + + __u8 b = *start++; + item->type = (b >> 2) & 3; + item->tag = (b >> 4) & 15; + + if (item->tag == HID_ITEM_TAG_LONG) { + + item->format = HID_ITEM_FORMAT_LONG; + + if ((end - start) >= 2) { + + item->size = *start++; + item->tag = *start++; + + if ((end - start) >= item->size) { + item->data.longdata = start; + start += item->size; + return start; + } + } + } else { + + item->format = HID_ITEM_FORMAT_SHORT; + item->size = b & 3; + switch (item->size) { + + case 0: + return start; + + case 1: + if ((end - start) >= 1) { + item->data.u8 = *start++; + return start; + } + break; + + case 2: + if ((end - start) >= 2) { + item->data.u16 = le16_to_cpu(get_unaligned((__u16*)start)); + start = (__u8 *)((__u16 *)start + 1); + return start; + } + + case 3: + item->size++; + if ((end - start) >= 4) { + item->data.u32 = le32_to_cpu(get_unaligned((__u32*)start)); + start = (__u8 *)((__u32 *)start + 1); + return start; + } + } + } + } + return NULL; +} + +/* + * Parse a report description into a hid_device structure. Reports are + * enumerated, fields are attached to these reports. + */ + +static struct hid_device *hid_parse_report(__u8 *start, unsigned size) +{ + struct hid_device *device; + struct hid_parser *parser; + struct hid_item item; + __u8 *end; + unsigned i; + static int (*dispatch_type[])(struct hid_parser *parser, + struct hid_item *item) = { + hid_parser_main, + hid_parser_global, + hid_parser_local, + hid_parser_reserved + }; + + if (!(device = kmalloc(sizeof(struct hid_device), GFP_KERNEL))) + return NULL; + memset(device, 0, sizeof(struct hid_device)); + + if (!(device->collection = kmalloc(sizeof(struct hid_collection) * + HID_DEFAULT_NUM_COLLECTIONS, + GFP_KERNEL))) { + kfree(device); + return NULL; + } + memset(device->collection, 0, sizeof(struct hid_collection) * + HID_DEFAULT_NUM_COLLECTIONS); + device->collection_size = HID_DEFAULT_NUM_COLLECTIONS; + + for (i = 0; i < HID_REPORT_TYPES; i++) + INIT_LIST_HEAD(&device->report_enum[i].report_list); + + if (!(device->rdesc = (__u8 *)kmalloc(size, GFP_KERNEL))) { + kfree(device->collection); + kfree(device); + return NULL; + } + memcpy(device->rdesc, start, size); + device->rsize = size; + + if (!(parser = kmalloc(sizeof(struct hid_parser), GFP_KERNEL))) { + kfree(device->rdesc); + kfree(device->collection); + kfree(device); + return NULL; + } + memset(parser, 0, sizeof(struct hid_parser)); + parser->device = device; + + end = start + size; + while ((start = fetch_item(start, end, &item)) != 0) { + if (item.format != HID_ITEM_FORMAT_SHORT) { + dbg("unexpected long global item"); + hid_free_device(device); + kfree(parser); + return NULL; + } + if (dispatch_type[item.type](parser, &item)) { + dbg("item %u %u %u %u parsing failed\n", + item.format, (unsigned)item.size, (unsigned)item.type, (unsigned)item.tag); + hid_free_device(device); + kfree(parser); + return NULL; + } + + if (start == end) { + if (parser->collection_stack_ptr) { + dbg("unbalanced collection at end of report description"); + hid_free_device(device); + kfree(parser); + return NULL; + } + if (parser->local.delimiter_depth) { + dbg("unbalanced delimiter at end of report description"); + hid_free_device(device); + kfree(parser); + return NULL; + } + kfree(parser); + return device; + } + } + + dbg("item fetching failed at offset %d\n", (int)(end - start)); + hid_free_device(device); + kfree(parser); + return NULL; +} + +/* + * Convert a signed n-bit integer to signed 32-bit integer. Common + * cases are done through the compiler, the screwed things has to be + * done by hand. + */ + +static __inline__ __s32 snto32(__u32 value, unsigned n) +{ + switch (n) { + case 8: return ((__s8)value); + case 16: return ((__s16)value); + case 32: return ((__s32)value); + } + return value & (1 << (n - 1)) ? value | (-1 << n) : value; +} + +/* + * Convert a signed 32-bit integer to a signed n-bit integer. + */ + +static __inline__ __u32 s32ton(__s32 value, unsigned n) +{ + __s32 a = value >> (n - 1); + if (a && a != -1) return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1; + return value & ((1 << n) - 1); +} + +/* + * Extract/implement a data field from/to a report. + */ + +static __inline__ __u32 extract(__u8 *report, unsigned offset, unsigned n) +{ + report += (offset >> 5) << 2; offset &= 31; + return (le64_to_cpu(get_unaligned((__u64*)report)) >> offset) & ((1 << n) - 1); +} + +static __inline__ void implement(__u8 *report, unsigned offset, unsigned n, __u32 value) +{ + report += (offset >> 5) << 2; offset &= 31; + put_unaligned((get_unaligned((__u64*)report) + & cpu_to_le64(~((((__u64) 1 << n) - 1) << offset))) + | cpu_to_le64((__u64)value << offset), (__u64*)report); +} + +/* + * Search an array for a value. + */ + +static __inline__ int search(__s32 *array, __s32 value, unsigned n) +{ + while (n--) if (*array++ == value) return 0; + return -1; +} + +static void hid_process_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value) +{ + hid_dump_input(usage, value); + if (hid->claimed & HID_CLAIMED_INPUT) + hidinput_hid_event(hid, field, usage, value); + if (hid->claimed & HID_CLAIMED_HIDDEV) + hiddev_hid_event(hid, field, usage, value); +} + + +/* + * Analyse a received field, and fetch the data from it. The field + * content is stored for next report processing (we do differential + * reporting to the layer). + */ + +static void hid_input_field(struct hid_device *hid, struct hid_field *field, __u8 *data) +{ + unsigned n; + unsigned count = field->report_count; + unsigned offset = field->report_offset; + unsigned size = field->report_size; + __s32 min = field->logical_minimum; + __s32 max = field->logical_maximum; + __s32 value[count]; /* WARNING: gcc specific */ + + for (n = 0; n < count; n++) { + + value[n] = min < 0 ? snto32(extract(data, offset + n * size, size), size) : + extract(data, offset + n * size, size); + + if (!(field->flags & HID_MAIN_ITEM_VARIABLE) /* Ignore report if ErrorRollOver */ + && value[n] >= min && value[n] <= max + && field->usage[value[n] - min].hid == HID_UP_KEYBOARD + 1) + return; + } + + for (n = 0; n < count; n++) { + + if (HID_MAIN_ITEM_VARIABLE & field->flags) { + + if (field->flags & HID_MAIN_ITEM_RELATIVE) { + if (!value[n]) continue; + } else { + if (value[n] == field->value[n]) continue; + } + hid_process_event(hid, field, &field->usage[n], value[n]); + continue; + } + + if (field->value[n] >= min && field->value[n] <= max + && field->usage[field->value[n] - min].hid + && search(value, field->value[n], count)) + hid_process_event(hid, field, &field->usage[field->value[n] - min], 0); + + if (value[n] >= min && value[n] <= max + && field->usage[value[n] - min].hid + && search(field->value, value[n], count)) + hid_process_event(hid, field, &field->usage[value[n] - min], 1); + } + + memcpy(field->value, value, count * sizeof(__s32)); +} + +static int hid_input_report(int type, u8 *data, int len, struct hid_device *hid) +{ + struct hid_report_enum *report_enum = hid->report_enum + type; + struct hid_report *report; + int n, size; + + if (!len) { + dbg("empty report"); + return -1; + } + +#ifdef DEBUG_DATA + printk(KERN_DEBUG __FILE__ ": report (size %u) (%snumbered)\n", len, report_enum->numbered ? "" : "un"); +#endif + + n = 0; /* Normally report number is 0 */ + if (report_enum->numbered) { /* Device uses numbered reports, data[0] is report number */ + n = *data++; + len--; + } + + if (!(report = report_enum->report_id_hash[n])) { + dbg("undefined report_id %d received", n); +#ifdef DEBUG + printk(KERN_DEBUG __FILE__ ": report (size %u) = ", len); + for (n = 0; n < len; n++) + printk(" %02x", data[n]); + printk("\n"); +#endif + + return -1; + } + + if (hid->claimed & HID_CLAIMED_HIDDEV) + hiddev_report_event(hid, report); + + size = ((report->size - 1) >> 3) + 1; + + if (len < size) { + + if (size <= 8) { + dbg("report %d is too short, (%d < %d)", report->id, len, size); + return -1; + } + + /* + * Some low-speed devices have large reports and maxpacketsize 8. + * We buffer the data in that case and parse it when we got it all. + * Works only for unnumbered reports. Doesn't make sense for numbered + * reports anyway - then they don't need to be large. + */ + + if (!report->data) + if (!(report->data = kmalloc(size, GFP_ATOMIC))) { + dbg("couldn't allocate report buffer"); + return -1; + } + + if (report->idx + len > size) { + dbg("report data buffer overflow"); + report->idx = 0; + return -1; + } + + memcpy(report->data + report->idx, data, len); + report->idx += len; + + if (report->idx < size) + return 0; + + data = report->data; + } + + for (n = 0; n < report->maxfield; n++) + hid_input_field(hid, report->field[n], data); + + report->idx = 0; + return 0; +} + +/* + * Interrupt input handler. + */ + +static void hid_irq(struct urb *urb) +{ + if (urb->status) { + dbg("nonzero status in irq %d", urb->status); + return; + } + + hid_input_report(HID_INPUT_REPORT, urb->transfer_buffer, urb->actual_length, urb->context); +} + +/* + * hid_read_report() reads in report values without waiting for an irq urb. + */ + +void hid_read_report(struct hid_device *hid, struct hid_report *report) +{ + int len = ((report->size - 1) >> 3) + 1 + hid->report_enum[report->type].numbered; + u8 data[len]; + int read; + + if (hid->quirks & HID_QUIRK_NOGET) + return; + + if ((read = usb_get_report(hid->dev, hid->ifnum, report->type + 1, report->id, data, len)) != len) { + dbg("reading report type %d id %d failed len %d read %d", report->type + 1, report->id, len, read); + return; + } + + hid_input_report(report->type, data, len, hid); +} + +/* + * Output the field into the report. + */ + +static void hid_output_field(struct hid_field *field, __u8 *data) +{ + unsigned count = field->report_count; + unsigned offset = field->report_offset; + unsigned size = field->report_size; + unsigned n; + + for (n = 0; n < count; n++) { + if (field->logical_minimum < 0) /* signed values */ + implement(data, offset + n * size, size, s32ton(field->value[n], size)); + else /* unsigned values */ + implement(data, offset + n * size, size, field->value[n]); + } +} + +/* + * Create a report. + */ + +void hid_output_report(struct hid_report *report, __u8 *data) +{ + unsigned n; + for (n = 0; n < report->maxfield; n++) + hid_output_field(report->field[n], data); +} + +/* + * Set a field value. The report this field belongs to has to be + * created and transfered to the device, to set this value in the + * device. + */ + +int hid_set_field(struct hid_field *field, unsigned offset, __s32 value) +{ + unsigned size = field->report_size; + + hid_dump_input(field->usage + offset, value); + + if (offset >= field->report_count) { + dbg("offset exceeds report_count"); + return -1; + } + if (field->logical_minimum < 0) { + if (value != snto32(s32ton(value, size), size)) { + dbg("value %d is out of range", value); + return -1; + } + } + if ( (value > field->logical_maximum) + || (value < field->logical_minimum)) { + dbg("value %d is invalid", value); + return -1; + } + field->value[offset] = value; + return 0; +} + +int hid_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field) +{ + struct hid_report_enum *report_enum = hid->report_enum + HID_OUTPUT_REPORT; + struct list_head *list = report_enum->report_list.next; + int i, j; + + while (list != &report_enum->report_list) { + struct hid_report *report = (struct hid_report *) list; + list = list->next; + for (i = 0; i < report->maxfield; i++) { + *field = report->field[i]; + for (j = 0; j < (*field)->maxusage; j++) + if ((*field)->usage[j].type == type && (*field)->usage[j].code == code) + return j; + } + } + return -1; +} + +static int hid_submit_out(struct hid_device *hid) +{ + hid->urbout.transfer_buffer_length = le16_to_cpup(&hid->out[hid->outtail].dr.wLength); + hid->urbout.transfer_buffer = hid->out[hid->outtail].buffer; + hid->urbout.setup_packet = (void *) &(hid->out[hid->outtail].dr); + hid->urbout.dev = hid->dev; + + if (usb_submit_urb(&hid->urbout)) { + err("usb_submit_urb(out) failed"); + return -1; + } + + return 0; +} + +static void hid_ctrl(struct urb *urb) +{ + struct hid_device *hid = urb->context; + + if (urb->status) + warn("ctrl urb status %d received", urb->status); + + hid->outtail = (hid->outtail + 1) & (HID_CONTROL_FIFO_SIZE - 1); + + if (hid->outhead != hid->outtail) + hid_submit_out(hid); +} + +void hid_write_report(struct hid_device *hid, struct hid_report *report) +{ + if (hid->report_enum[report->type].numbered) { + hid->out[hid->outhead].buffer[0] = report->id; + hid_output_report(report, hid->out[hid->outhead].buffer + 1); + hid->out[hid->outhead].dr.wLength = cpu_to_le16(((report->size + 7) >> 3) + 1); + } else { + hid_output_report(report, hid->out[hid->outhead].buffer); + hid->out[hid->outhead].dr.wLength = cpu_to_le16((report->size + 7) >> 3); + } + + hid->out[hid->outhead].dr.wValue = cpu_to_le16(((report->type + 1) << 8) | report->id); + + hid->outhead = (hid->outhead + 1) & (HID_CONTROL_FIFO_SIZE - 1); + + if (hid->outhead == hid->outtail) + hid->outtail = (hid->outtail + 1) & (HID_CONTROL_FIFO_SIZE - 1); + + if (hid->urbout.status != -EINPROGRESS) + hid_submit_out(hid); +} + +int hid_open(struct hid_device *hid) +{ + if (hid->open++) + return 0; + + hid->urb.dev = hid->dev; + + if (usb_submit_urb(&hid->urb)) + return -EIO; + + return 0; +} + +void hid_close(struct hid_device *hid) +{ + if (!--hid->open) + usb_unlink_urb(&hid->urb); +} + +/* + * Initialize all readable reports + */ +void hid_init_reports(struct hid_device *hid) +{ + int i; + struct hid_report *report; + struct hid_report_enum *report_enum; + struct list_head *list; + + for (i = 0; i < HID_REPORT_TYPES; i++) { + if (i == HID_FEATURE_REPORT || i == HID_INPUT_REPORT) { + report_enum = hid->report_enum + i; + list = report_enum->report_list.next; + while (list != &report_enum->report_list) { + report = (struct hid_report *) list; + hid_read_report(hid, report); + usb_set_idle(hid->dev, hid->ifnum, 0, report->id); + list = list->next; + } + } + } +} + +#define USB_VENDOR_ID_WACOM 0x056a +#define USB_DEVICE_ID_WACOM_PENPARTNER 0x0000 +#define USB_DEVICE_ID_WACOM_GRAPHIRE 0x0010 +#define USB_DEVICE_ID_WACOM_INTUOS 0x0020 +#define USB_DEVICE_ID_WACOM_PL 0x0030 +#define USB_DEVICE_ID_WACOM_INTUOS2 0x0040 +#define USB_DEVICE_ID_WACOM_VOLITO 0x0060 +#define USB_DEVICE_ID_WACOM_PTU 0x0003 +#define USB_DEVICE_ID_WACOM_INTUOS3 0x00B0 + +#define USB_VENDOR_ID_KBGEAR 0x084e +#define USB_DEVICE_ID_KBGEAR_JAMSTUDIO 0x1001 + +#define USB_VENDOR_ID_AIPTEK 0x08ca +#define USB_DEVICE_ID_AIPTEK_01 0x0001 +#define USB_DEVICE_ID_AIPTEK_10 0x0010 +#define USB_DEVICE_ID_AIPTEK_20 0x0020 +#define USB_DEVICE_ID_AIPTEK_21 0x0021 +#define USB_DEVICE_ID_AIPTEK_22 0x0022 +#define USB_DEVICE_ID_AIPTEK_23 0x0023 +#define USB_DEVICE_ID_AIPTEK_24 0x0024 + +#define USB_VENDOR_ID_ATEN 0x0557 +#define USB_DEVICE_ID_ATEN_UC100KM 0x2004 +#define USB_DEVICE_ID_ATEN_CS124U 0x2202 +#define USB_DEVICE_ID_ATEN_2PORTKVM 0x2204 +#define USB_DEVICE_ID_ATEN_4PORTKVM 0x2205 + +#define USB_VENDOR_ID_TOPMAX 0x0663 +#define USB_DEVICE_ID_TOPMAX_COBRAPAD 0x0103 + +#define USB_VENDOR_ID_HAPP 0x078b +#define USB_DEVICE_ID_UGCI_DRIVING 0x0010 +#define USB_DEVICE_ID_UGCI_FLYING 0x0020 +#define USB_DEVICE_ID_UGCI_FIGHTING 0x0030 + +#define USB_VENDOR_ID_GRIFFIN 0x077d +#define USB_DEVICE_ID_POWERMATE 0x0410 /* Griffin PowerMate */ +#define USB_DEVICE_ID_SOUNDKNOB 0x04AA /* Griffin SoundKnob */ + +#define USB_VENDOR_ID_ONTRAK 0x0a07 +#define USB_DEVICE_ID_ONTRAK_ADU100 0x0064 + +#define USB_VENDOR_ID_TANGTOP 0x0d3d +#define USB_DEVICE_ID_TANGTOP_USBPS2 0x0001 + +#define USB_VENDOR_ID_OKI 0x070a +#define USB_VENDOR_ID_OKI_MULITI 0x0007 + +#define USB_VENDOR_ID_ESSENTIAL_REALITY 0x0d7f +#define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100 + +#define USB_VENDOR_ID_MGE 0x0463 +#define USB_DEVICE_ID_MGE_UPS 0xffff +#define USB_DEVICE_ID_MGE_UPS1 0x0001 + +#define USB_VENDOR_ID_NEC 0x073e +#define USB_DEVICE_ID_NEC_USB_GAME_PAD 0x0301 + +struct hid_blacklist { + __u16 idVendor; + __u16 idProduct; + unsigned quirks; +} hid_blacklist[] = { + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PENPARTNER, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 1, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 2, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 1, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 2, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 4, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 1, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 2, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 4, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 5, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 1, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 2, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 4, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 5, HID_QUIRK_IGNORE }, + /* Intuos2 6x8 reports as 0x47 instead of 0x42 */ + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 7, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 4, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PTU, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 1, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 2, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_20, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_21, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD, HID_QUIRK_BADPAD }, + { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING, HID_QUIRK_BADPAD|HID_QUIRK_MULTI_INPUT }, + { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING, HID_QUIRK_BADPAD|HID_QUIRK_MULTI_INPUT }, + { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING, HID_QUIRK_BADPAD|HID_QUIRK_MULTI_INPUT }, + { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 100, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 200, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 300, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 400, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 500, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_TANGTOP, USB_DEVICE_ID_TANGTOP_USBPS2, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_OKI, USB_VENDOR_ID_OKI_MULITI, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS1, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_NEC, USB_DEVICE_ID_NEC_USB_GAME_PAD, HID_QUIRK_BADPAD }, + { 0, 0 } +}; + +static struct hid_device *usb_hid_configure(struct usb_device *dev, int ifnum) +{ + struct usb_interface_descriptor *interface = dev->actconfig->interface[ifnum].altsetting + 0; + struct hid_descriptor *hdesc; + struct hid_device *hid; + unsigned quirks = 0, rsize = 0; + char *buf; + int n; + + for (n = 0; hid_blacklist[n].idVendor; n++) + if ((hid_blacklist[n].idVendor == dev->descriptor.idVendor) && + (hid_blacklist[n].idProduct == dev->descriptor.idProduct)) + quirks = hid_blacklist[n].quirks; + + if (quirks & HID_QUIRK_IGNORE) + return NULL; + + if (usb_get_extra_descriptor(interface, USB_DT_HID, &hdesc) && ((!interface->bNumEndpoints) || + usb_get_extra_descriptor(&interface->endpoint[0], USB_DT_HID, &hdesc))) { + dbg("class descriptor not present\n"); + return NULL; + } + + for (n = 0; n < hdesc->bNumDescriptors; n++) + if (hdesc->desc[n].bDescriptorType == USB_DT_REPORT) + rsize = le16_to_cpu(hdesc->desc[n].wDescriptorLength); + + if (!rsize || rsize > HID_MAX_DESCRIPTOR_SIZE) { + dbg("weird size of report descriptor (%u)", rsize); + return NULL; + } + + { + __u8 rdesc[rsize]; + + if ((n = usb_get_class_descriptor(dev, interface->bInterfaceNumber, USB_DT_REPORT, 0, rdesc, rsize)) < 0) { + dbg("reading report descriptor failed"); + return NULL; + } + +#ifdef DEBUG_DATA + printk(KERN_DEBUG __FILE__ ": report descriptor (size %u, read %d) = ", rsize, n); + for (n = 0; n < rsize; n++) + printk(" %02x", (unsigned) rdesc[n]); + printk("\n"); +#endif + + if (!(hid = hid_parse_report(rdesc, rsize))) { + dbg("parsing report descriptor failed"); + return NULL; + } + } + + hid->quirks = quirks; + + for (n = 0; n < interface->bNumEndpoints; n++) { + + struct usb_endpoint_descriptor *endpoint = &interface->endpoint[n]; + int pipe, maxp; + + if ((endpoint->bmAttributes & 3) != 3) /* Not an interrupt endpoint */ + continue; + + if (!(endpoint->bEndpointAddress & 0x80)) /* Not an input endpoint */ + continue; + + pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); + maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); + + FILL_INT_URB(&hid->urb, dev, pipe, hid->buffer, maxp > 32 ? 32 : maxp, hid_irq, hid, endpoint->bInterval); + + break; + } + + if (n == interface->bNumEndpoints) { + dbg("couldn't find an input interrupt endpoint"); + hid_free_device(hid); + return NULL; + } + + hid->version = hdesc->bcdHID; + hid->country = hdesc->bCountryCode; + hid->dev = dev; + hid->ifnum = interface->bInterfaceNumber; + + for (n = 0; n < HID_CONTROL_FIFO_SIZE; n++) { + hid->out[n].dr.bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE; + hid->out[n].dr.bRequest = USB_REQ_SET_REPORT; + hid->out[n].dr.wIndex = cpu_to_le16(hid->ifnum); + } + + hid->name[0] = 0; + + if (!(buf = kmalloc(63, GFP_KERNEL))) + return NULL; + + if (usb_string(dev, dev->descriptor.iManufacturer, buf, 63) > 0) { + strcat(hid->name, buf); + if (usb_string(dev, dev->descriptor.iProduct, buf, 63) > 0) + sprintf(hid->name, "%s %s", hid->name, buf); + } else + sprintf(hid->name, "%04x:%04x", dev->descriptor.idVendor, dev->descriptor.idProduct); + + kfree(buf); + + FILL_CONTROL_URB(&hid->urbout, dev, usb_sndctrlpipe(dev, 0), + (void*) &hid->out[0].dr, hid->out[0].buffer, 1, hid_ctrl, hid); + +/* + * Some devices don't like this and crash. I don't know of any devices + * needing this, so it is disabled for now. + */ + +#if 0 + if (interface->bInterfaceSubClass == 1) + usb_set_protocol(dev, hid->ifnum, 1); +#endif + + return hid; +} + +static void* hid_probe(struct usb_device *dev, unsigned int ifnum, + const struct usb_device_id *id) +{ + struct hid_device *hid; + int i; + char *c; + + dbg("HID probe called for ifnum %d", ifnum); + + if (!(hid = usb_hid_configure(dev, ifnum))) + return NULL; + + hid_init_reports(hid); + hid_dump_device(hid); + + if (!hidinput_connect(hid)) + hid->claimed |= HID_CLAIMED_INPUT; + if (!hiddev_connect(hid)) + hid->claimed |= HID_CLAIMED_HIDDEV; + printk(KERN_INFO); + + if (hid->claimed & HID_CLAIMED_INPUT) + printk("input"); + if (hid->claimed == (HID_CLAIMED_INPUT | HID_CLAIMED_HIDDEV)) + printk(","); + if (hid->claimed & HID_CLAIMED_HIDDEV) + printk("hiddev%d", hid->minor); + + c = "Device"; + for (i = 0; i < hid->maxcollection; i++) { + if (hid->collection[i].type == HID_COLLECTION_APPLICATION && + (hid->collection[i].usage & HID_USAGE_PAGE) == HID_UP_GENDESK && + (hid->collection[i].usage & 0xffff) < ARRAY_SIZE(hid_types)) { + c = hid_types[hid->collection[i].usage & 0xffff]; + break; + } + } + + printk(": USB HID v%x.%02x %s [%s] on usb%d:%d.%d\n", + hid->version >> 8, hid->version & 0xff, c, hid->name, + dev->bus->busnum, dev->devnum, ifnum); + + return hid; +} + +static void hid_disconnect(struct usb_device *dev, void *ptr) +{ + struct hid_device *hid = ptr; + + dbg("cleanup called"); + usb_unlink_urb(&hid->urb); + if (hid->claimed & HID_CLAIMED_INPUT) + hidinput_disconnect(hid); + if (hid->claimed & HID_CLAIMED_HIDDEV) + hiddev_disconnect(hid); + hid_free_device(hid); +} + +static struct usb_device_id hid_usb_ids [] = { + { match_flags: USB_DEVICE_ID_MATCH_INT_CLASS, + bInterfaceClass: USB_INTERFACE_CLASS_HID }, + { } /* Terminating entry */ +}; + +MODULE_DEVICE_TABLE (usb, hid_usb_ids); + +static struct usb_driver hid_driver = { + name: "hid", + probe: hid_probe, + disconnect: hid_disconnect, + id_table: hid_usb_ids, +}; + +static int __init hid_init(void) +{ + hiddev_init(); + usb_register(&hid_driver); + info(DRIVER_VERSION " " DRIVER_AUTHOR); + info(DRIVER_DESC); + + return 0; +} + +static void __exit hid_exit(void) +{ + usb_deregister(&hid_driver); + hiddev_exit(); +} + +module_init(hid_init); +module_exit(hid_exit); + +MODULE_AUTHOR( DRIVER_AUTHOR ); +MODULE_DESCRIPTION( DRIVER_DESC ); +MODULE_LICENSE("GPL"); --- wacom-tools-0.8.1.6.orig/linuxwacom/src/2.4.28/Makefile.am +++ wacom-tools-0.8.1.6/linuxwacom/src/2.4.28/Makefile.am @@ -0,0 +1,62 @@ +noinst_SCRIPTS = @WCM_MODULES@ + +EXTRA_SCRIPTS = wacom.o hid.o usbmouse.o evdev.o input.o mousedev.o + +KERNEL_DIR=@WCM_KERNELDIR@ +DEBUG_FLAGS = -D__JEJ_DEBUG +MODS = @WCM_MODVER@ +ARCHITECTURE=@WCM_ARCH@ +USBDIR=$(KERNEL_DIR)/drivers/usb +KCFLAGS = -Wall $(DEBUG_FLAGS) -D__KERNEL__ \ + -DMODULE -DEXPORT_SYMTAB $(MODS) \ + -Wstrict-prototypes -Wno-trigraphs -O2 \ + -fno-strict-aliasing \ + -fno-common -fomit-frame-pointer -pipe \ + -mpreferred-stack-boundary=2 \ + -march=$(ARCHITECTURE) + +NO_MERGE_CONSTANTS=@WCM_NO_MERGE_CONSTANTS@ +LINUX_INPUT=@WCM_LINUX_INPUT@ -I$(KERNEL_DIR)/include + +wacom.o: wacom.c Makefile + $(CC) -I$(KERNEL_DIR)/include $(KCFLAGS) \ + -DKBUILD_BASENAME=wacom -c -o wacom.o wacom.c + +HID_OBJS = hid-core.o hiddev.o hid-input.o + +hid.o: $(HID_OBJS) Makefile + $(LD) -r -o $@ $(HID_OBJS) + +hid-core.o: hid-core.c Makefile + $(CC) -I$(KERNEL_DIR)/include -I$(USBDIR) $(KCFLAGS) \ + -DKBUILD_BASENAME=hid-core -c -o hid-core.o hid-core.c + +hiddev.o: $(USBDIR)/hiddev.c Makefile + $(CC) -I$(KERNEL_DIR)/include -I$(USBDIR) $(KCFLAGS) \ + -DKBUILD_BASENAME=hiddev -c -o hiddev.o hiddev.c + +hid-input.o: $(USBDIR)/hid-input.c Makefile + $(CC) -I$(KERNEL_DIR)/include -I$(USBDIR) $(KCFLAGS) \ + -DKBUILD_BASENAME=hid-input -c \ + -o hid-input.o hid-input.c + +usbmouse.o: usbmouse.c Makefile + $(CC) -I$(KERNEL_DIR)/include -I$(USBDIR) $(KCFLAGS) \ + -DKBUILD_BASENAME=usbmouse -c \ + -o usbmouse.o usbmouse.c + +evdev.o: evdev.c Makefile + $(CC) -I$(KERNEL_DIR)/include $(KCFLAGS) \ + -DKBUILD_BASENAME=evdev -c -o evdev.o evdev.c + +mousedev.o: mousedev.c Makefile + $(CC) -I$(KERNEL_DIR)/include $(KCFLAGS) \ + -DKBUILD_BASENAME=mousedev -c -o mousedev.o mousedev.c + +input.o: input.c Makefile + $(CC) -I$(KERNEL_DIR)/include $(KCFLAGS) \ + -DKBUILD_BASENAME=input -c -o input.o input.c + +clean: + rm -f *.o core *.core + --- wacom-tools-0.8.1.6.orig/linuxwacom/src/2.4.28/wacom.c +++ wacom-tools-0.8.1.6/linuxwacom/src/2.4.28/wacom.c @@ -0,0 +1,1028 @@ +/* + * $Id: wacom.c,v 1.2 2004-12-03 14:10:15 ron Exp $ + * + * Copyright (c) 2000-2002 Vojtech Pavlik + * Copyright (c) 2000 Andreas Bach Aaen + * Copyright (c) 2000 Clifford Wolf + * Copyright (c) 2000 Sam Mosel + * Copyright (c) 2000 James E. Blair + * Copyright (c) 2000 Daniel Egger + * Copyright (c) 2001 Frederic Lepied + * Copyright (c) 2002 Christer Nilsson + * Copyright (c) 2002-2004 Ping Cheng + * Copyright (c) 2002 John Joganic + * + * USB Wacom Graphire and Intuos tablet support + * + * Sponsored by SuSE + * + * ChangeLog: + * v0.1 (vp) - Initial release + * v0.2 (aba) - Support for all buttons / combinations + * v0.3 (vp) - Support for Intuos added + * v0.4 (sm) - Support for more Intuos models, menustrip + * relative mode, proximity. + * v0.5 (vp) - Big cleanup, nifty features removed, + * they belong in userspace + * v1.8 (vp) - Submit URB only when operating, moved to CVS, + * use input_report_key instead of report_btn and + * other cleanups + * v1.11 (vp) - Add URB ->dev setting for new kernels + * v1.11 (jb) - Add support for the 4D Mouse & Lens + * v1.12 (de) - Add support for two more inking pen IDs + * v1.14 (vp) - Use new USB device id probing scheme. + * Fix Wacom Graphire mouse wheel + * v1.18 (vp) - Fix mouse wheel direction + * Make mouse relative + * v1.20 (fl) - Report tool id for Intuos devices + * - Multi tools support + * - Corrected Intuos protocol decoding (airbrush, 4D mouse, lens cursor...) + * - Add PL models support + * - Fix Wacom Graphire mouse wheel again + * v1.21 (vp) - Removed protocol descriptions + * - Added MISC_SERIAL for tool serial numbers + * (gb) - Identify version on module load. + * v1.21.1 (fl) - added Graphire2 support + * v1.21.2 (fl) - added Intuos2 support + * - added all the PL ids + * v1.21.3 (fl) - added another eraser id from Neil Okamoto + * - added smooth filter for Graphire from Peri Hankey + * - added PenPartner support from Olaf van Es + * - new tool ids from Ole Martin Bjoerndalen + * v1.29 (pc) - Add support for more tablets + * - Fix pressure reporting + * v1.30 (vp) - Merge 2.4 and 2.5 drivers + * - Since 2.5 now has input_sync(), remove MSC_SERIAL abuse + * - Cleanups here and there + * + * WARNING: THIS IS NOT PART OF THE OFFICIAL KERNEL TREE + * THIS IS FOR TESTING PURPOSES + * + * v1.21.3-j0 - fixed absolute x and y for intuos by John Joganic + * v1.21.3-j1 - applied Christer Nilsson's patches for 2.4.20 + * v1.30.1-j0 - applied Ping Cheng's patches for device ranges and caps + * v1.30.1-j1 - updated device ranges for Intuos2 12x12 (0x44) + * v1.30.1-j2 - updated device ranges for Intuos2 6x8 (0x42) + * v1.30-j0.3.1 - fixed pen identifers, 2D mouse handling + * v1.30-j0.3.3 - added volito, thanks to Pasi Savolainen; fixed wheel sign + * v1.30-j0.3.4 - added Ping Cheng's new tool IDs + * v1.30-j0.3.5 - thread for resetting tablet on bad report + * v1.30-j0.3.6 - fixed volito ranges, thanks to Pasi Savolainen + * v1.30-j0.3.7 - unknown reports are now info, rather than error + * v1.30-j0.3.8 - fixed I2 4x5 Y max value, thanks to John New + * fixed Intuos and Intuos2 sizes, values from Wacom + * v1.30-j0.5.0 - new release + * v1.30-j0.5.1 - fixed serial number code for Intuos and Intuos2 + * v1.30-j0.5.2 - applied Ping Cheng's eraser patch for PL + * v1.30-j0.5.3 - reapplied patch for Intuos2 6x8's reportings as (0x47) + * v1.30-j0.6.0 - new release + * v1.30-j0.6.1 - new release + * v1.30-j0.6.2 - new release + * v1.30-j0.6.3 - new release + * v1.30-j0.6.4 - new release + * v1.30-j0.6.5 - added Intuos3 + * v1.30-j0.6.6 - new release + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +#include +#if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS) +# define MODVERSIONS +#endif + +#ifdef MODVERSIONS +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Version Information + */ +#define DRIVER_VERSION "v1.30-j0.6.6" +#define DRIVER_AUTHOR "Vojtech Pavlik " +#ifndef __JEJ_DEBUG +#define DRIVER_DESC "USB Wacom Graphire and Wacom Intuos tablet driver (LINUXWACOM)" +#else +#define DRIVER_DESC "USB Wacom Graphire and Wacom Intuos tablet driver (LINUXWACOM-DEBUG)" +#endif + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); + +#define USB_VENDOR_ID_WACOM 0x056a + +static int kwacomd_pid = 0; /* PID of kwacomd */ +static DECLARE_COMPLETION(kwacomd_exited); +static DECLARE_WAIT_QUEUE_HEAD(kwacomd_wait); +static LIST_HEAD(wacom_event_list); /* List of tablets needing servicing */ +static spinlock_t wacom_event_lock = SPIN_LOCK_UNLOCKED; + +struct wacom_features { + char *name; + int pktlen; + int x_max; + int y_max; + int pressure_max; + int distance_max; + void (*irq)(struct urb *urb); + unsigned long evbit; + unsigned long absbit; + unsigned long relbit; + unsigned long btnbit; + unsigned long digibit; +}; + +struct wacom { + signed char data[10]; + struct input_dev dev; + struct usb_device *usbdev; + struct urb irq; + struct wacom_features *features; + int tool[2]; + int open; + __u32 serial[2]; + + struct list_head event_list; + struct semaphore kwacomd_sem; + unsigned int ifnum; +}; + +static void wacom_request_reset(struct wacom* wacom) +{ + unsigned long flags; + spin_lock_irqsave(&wacom_event_lock, flags); + if (list_empty(&wacom->event_list)) + { + list_add(&wacom->event_list, &wacom_event_list); + wake_up(&kwacomd_wait); + } + spin_unlock_irqrestore(&wacom_event_lock, flags); +} + +static void wacom_pl_irq(struct urb *urb) +{ + struct wacom *wacom = urb->context; + unsigned char *data = wacom->data; + struct input_dev *dev = &wacom->dev; + int prox, pressure; + + if (urb->status) return; + + if (data[0] != 2 && data[0] != 5) + { + printk(KERN_INFO "wacom_pl_irq: received unknown report #%d\n", data[0]); + wacom_request_reset(wacom); + return; + } + + /* proximity and pressure */ + prox = data[1] & 0x40; + + if (prox) { + pressure = (signed char) ((data[7] <<1 ) | ((data[4] >> 2) & 1)); + if ( wacom->features->pressure_max > 350 ) { + pressure = (pressure << 1) | ((data[4] >> 6) & 1); + } + pressure += (( wacom->features->pressure_max + 1 )/ 2); + + /* + * if going from out of proximity into proximity select between the eraser + * and the pen based on the state of the stylus2 button, choose eraser if + * pressed else choose pen. if not a proximity change from out to in, send + * an out of proximity for previous tool then a in for new tool. + */ + if (!wacom->tool[0]) { + /* Going into proximity select tool */ + wacom->tool[1] = (data[4] & 0x20)? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + } + else { + /* was entered with stylus2 pressed */ + if (wacom->tool[1] == BTN_TOOL_RUBBER && !(data[4] & 0x20) ) { + /* report out proximity for previous tool */ + input_report_key(dev, wacom->tool[1], 0); + input_event(dev, EV_MSC, MSC_SERIAL, 0); + wacom->tool[1] = BTN_TOOL_PEN; + return; + } + } + if (wacom->tool[1] != BTN_TOOL_RUBBER) { + /* Unknown tool selected default to pen tool */ + wacom->tool[1] = BTN_TOOL_PEN; + } + input_report_key(dev, wacom->tool[1], prox); /* report in proximity for tool */ + + input_report_abs(dev, ABS_X, data[3] | ((__u32)data[2] << 7) | ((__u32)(data[1] & 0x03) << 14)); + input_report_abs(dev, ABS_Y, data[6] | ((__u32)data[5] << 7) | ((__u32)(data[4] & 0x03) << 14)); + input_report_abs(dev, ABS_PRESSURE, pressure); + input_report_key(dev, BTN_TOUCH, data[4] & 0x08); + input_report_key(dev, BTN_STYLUS, data[4] & 0x10); + /* Only allow the stylus2 button to be reported for the pen tool. */ + input_report_key(dev, BTN_STYLUS2, (wacom->tool[1] == BTN_TOOL_PEN) && (data[4] & 0x20)); + } + else { + /* report proximity-out of a (valid) tool */ + if (wacom->tool[1] != BTN_TOOL_RUBBER) { + /* Unknown tool selected default to pen tool */ + wacom->tool[1] = BTN_TOOL_PEN; + } + input_report_key(dev, wacom->tool[1], prox); + } + + wacom->tool[0] = prox; /* Save proximity state */ + /* end of proximity code */ + + input_event(dev, EV_MSC, MSC_SERIAL, 0); +} + +static void wacom_ptu_irq(struct urb *urb) +{ + struct wacom *wacom = urb->context; + unsigned char *data = wacom->data; + struct input_dev *dev = &wacom->dev; + + if (urb->status) return; + + if (data[0] != 2 && data[0] != 5) + { + printk(KERN_INFO "wacom_ptu_irq: received unknown report #%d\n", data[0]); + wacom_request_reset(wacom); + return; + } + + if (data[1] & 0x04) + { + input_report_key(dev, BTN_TOOL_RUBBER, data[1] & 0x20); + input_report_key(dev, BTN_TOUCH, data[1] & 0x08); + } + else + { + input_report_key(dev, BTN_TOOL_PEN, data[1] & 0x20); + input_report_key(dev, BTN_TOUCH, data[1] & 0x01); + } + input_report_abs(dev, ABS_X, data[3] << 8 | data[2]); + input_report_abs(dev, ABS_Y, data[5] << 8 | data[4]); + input_report_abs(dev, ABS_PRESSURE, (data[6]|data[7] << 8)); + input_report_key(dev, BTN_STYLUS, data[1] & 0x02); + input_report_key(dev, BTN_STYLUS2, data[1] & 0x10); + + input_event(dev, EV_MSC, MSC_SERIAL, 0); +} + + +static void wacom_penpartner_irq(struct urb *urb) +{ + struct wacom *wacom = urb->context; + unsigned char *data = wacom->data; + struct input_dev *dev = &wacom->dev; + int leftmb = (((signed char)data[6] > -80) && !(data[5] &0x20)); + + if (urb->status) return; + + if (data[0] != 2 && data[0] != 5) + { + printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]); + wacom_request_reset(wacom); + return; + } + + input_report_key(dev, BTN_TOOL_PEN, 1); + input_report_abs(dev, ABS_X, data[2] << 8 | data[1]); + input_report_abs(dev, ABS_Y, data[4] << 8 | data[3]); + input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); + input_report_key(dev, BTN_TOUCH, leftmb); + input_report_key(dev, BTN_STYLUS, (data[5] & 0x40)); + + input_event(dev, EV_MSC, MSC_SERIAL, leftmb); +} + +static void wacom_graphire_irq(struct urb *urb) +{ + struct wacom *wacom = urb->context; + unsigned char *data = wacom->data; + struct input_dev *dev = &wacom->dev; + int x, y; + + if (urb->status) return; + + if (data[0] != 2 && data[0] != 5 ) + { + printk(KERN_INFO "wacom_graphire_irq: received unknown report #%d\n", data[0]); + wacom_request_reset(wacom); + return; + } + + x = data[2] | ((__u32)data[3] << 8); + y = data[4] | ((__u32)data[5] << 8); + + switch ((data[1] >> 5) & 3) { + + case 0: /* Pen */ + input_report_key(dev, BTN_TOOL_PEN, data[1] & 0x80); + break; + + case 1: /* Rubber */ + input_report_key(dev, BTN_TOOL_RUBBER, data[1] & 0x80); + break; + + case 2: /* Mouse with wheel */ + input_report_key(dev, BTN_MIDDLE, data[1] & 0x04); + input_report_rel(dev, REL_WHEEL, (signed char) data[6]); + /* fall through */ + + case 3: /* Mouse without wheel */ + input_report_key(dev, BTN_TOOL_MOUSE, data[7] > 24); + input_report_key(dev, BTN_LEFT, data[1] & 0x01); + input_report_key(dev, BTN_RIGHT, data[1] & 0x02); + input_report_abs(dev, ABS_DISTANCE, data[7]); + + input_report_abs(dev, ABS_X, x); + input_report_abs(dev, ABS_Y, y); + + input_event(dev, EV_MSC, MSC_SERIAL, data[1] & 0x01); + return; + } + + if (data[1] & 0x80) { + input_report_abs(dev, ABS_X, x); + input_report_abs(dev, ABS_Y, y); + } + + input_report_abs(dev, ABS_PRESSURE, data[6] | ((__u32)data[7] << 8)); + input_report_key(dev, BTN_TOUCH, data[1] & 0x01); + input_report_key(dev, BTN_STYLUS, data[1] & 0x02); + input_report_key(dev, BTN_STYLUS2, data[1] & 0x04); + + input_event(dev, EV_MSC, MSC_SERIAL, data[1] & 0x01); +} + +static int wacom_intuos_inout(struct urb *urb) +{ + struct wacom *wacom = urb->context; + unsigned char *data = wacom->data; + struct input_dev *dev = &wacom->dev; + int idx; + + /* tool number */ + idx = data[1] & 0x01; + + /* Enter report */ + if ((data[1] & 0xfc) == 0xc0) + { + /* serial number of the tool */ + wacom->serial[idx] = ((__u32)(data[3] & 0x0f) << 28) + + ((__u32)data[4] << 20) + ((__u32)data[5] << 12) + + ((__u32)data[6] << 4) + ((__u32)data[7] >> 4); + + #ifdef __JEJ_DEBUG + printk(KERN_INFO "wacom_intuos_irq: tool change 0x%03X\n", + (((__u32)data[2] << 4) | (data[3] >> 4))); + #endif + + switch ((((__u32)data[2] << 4) | (data[3] >> 4))) + { + case 0x812: /* Intuos2 ink pen XP-110-00A */ + case 0x801: /* Intuos3 Inking pen */ + case 0x012: /* Inking pen */ + wacom->tool[idx] = BTN_TOOL_PENCIL; break; + + case 0x822: /* Intuos Pen GP-300E-01H */ + case 0x852: /* Intuos2 Grip Pen XP-501E-00A */ + case 0x842: /* Designer Pen */ + case 0x823: /* Intuos3 Grip Pen */ + case 0x813: /* Intuos3 Classic Pen */ + case 0x885: /* Intuos3 Marker Pen */ + case 0x022: + wacom->tool[idx] = BTN_TOOL_PEN; break; + + case 0x832: /* Intuos2 stroke pen XP-120-00A */ + case 0x032: /* Stroke pen */ + wacom->tool[idx] = BTN_TOOL_BRUSH; break; + + case 0x007: /* 2D Mouse */ + case 0x09C: /* ?? Mouse - not a valid code according to Wacom */ + case 0x094: /* 4D Mouse */ + case 0x017: /* Intuos3 2D Mouse */ + wacom->tool[idx] = BTN_TOOL_MOUSE; break; + + case 0x096: /* Lens cursor */ + case 0x097: /* Intuos3 Lens cursor */ + wacom->tool[idx] = BTN_TOOL_LENS; break; + + case 0x82A: + case 0x85A: + case 0x91A: + case 0xD1A: + case 0x0FA: /* Eraser */ + case 0x82B: /* Intuos3 Grip Pen Eraser */ + case 0x81B: /* Intuos3 Classic Pen Eraser */ + case 0x91B: /* Intuos3 Airbrush Eraser */ + wacom->tool[idx] = BTN_TOOL_RUBBER; break; + + case 0x112: /* Airbrush */ + case 0x912: /* Intuos2 Airbrush */ + case 0xD12: /* Intuos Airbrush */ + case 0x913: /* Intuos3 Airbrush */ + wacom->tool[idx] = BTN_TOOL_AIRBRUSH; break; + + default: /* Unknown tool */ + wacom->tool[idx] = BTN_TOOL_PEN; break; + } + input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]); + return 1; + } + + /* Exit report */ + if ((data[1] & 0xfe) == 0x80) + { + input_report_key(dev, wacom->tool[idx], 0); + input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]); + return 1; + } + + return 0; +} + +static void wacom_intuos_general(struct urb *urb) +{ + struct wacom *wacom = urb->context; + unsigned char *data = wacom->data; + struct input_dev *dev = &wacom->dev; + unsigned int t; + + /* general pen packet */ + if ((data[1] & 0xb8) == 0xa0) + { + t = ((__u32)data[6] << 2) | ((data[7] >> 6) & 3); + input_report_abs(dev, ABS_PRESSURE, t); + input_report_abs(dev, ABS_TILT_X, + ((data[7] << 1) & 0x7e) | (data[8] >> 7)); + input_report_abs(dev, ABS_TILT_Y, data[8] & 0x7f); + input_report_key(dev, BTN_STYLUS, data[1] & 2); + input_report_key(dev, BTN_STYLUS2, data[1] & 4); + input_report_key(dev, BTN_TOUCH, t > 10); + } + + /* airbrush second packet */ + if ((data[1] & 0xbc) == 0xb4) + { + input_report_abs(dev, ABS_WHEEL, + ((__u32)data[6] << 2) | ((data[7] >> 6) & 3)); + input_report_abs(dev, ABS_TILT_X, + ((data[7] << 1) & 0x7e) | (data[8] >> 7)); + input_report_abs(dev, ABS_TILT_Y, data[8] & 0x7f); + } + return; +} + +static void wacom_intuos_irq(struct urb *urb) +{ + struct wacom *wacom = urb->context; + unsigned char *data = wacom->data; + struct input_dev *dev = &wacom->dev; + unsigned int t; + int idx; + + if (urb->status) return; + + /* check for valid report */ + if (data[0] != 2 && data[0] != 5 && data[0] != 6) + { + printk(KERN_INFO "wacom_intuos_irq: received unknown report #%d\n", data[0]); + wacom_request_reset(wacom); + return; + } + + /* tool index */ + idx = data[1] & 0x01; + + /* process in/out prox events */ + if (wacom_intuos_inout(urb)) return; + + input_report_abs(dev, ABS_X, ((__u32)data[2] << 8) | data[3]); + input_report_abs(dev, ABS_Y, ((__u32)data[4] << 8) | data[5]); + input_report_abs(dev, ABS_DISTANCE, data[9]); + + /* process general packets */ + wacom_intuos_general(urb); + + /* 4D mouse, 2D mouse, or Lens cursor packets */ + if ((data[1] & 0xbc) == 0xa8 || (data[1] & 0xbe) == 0xb0) + { + /* Rotation packet */ + if (data[1] & 0x02) + { + t = ((__u32)data[6] << 3) | ((data[7] >> 5) & 7); + input_report_abs(dev, ABS_RZ, (data[7] & 0x20) ? + ((t - 1) / 2) : -t / 2); + } + + /* 4D mouse packets */ + else if ((data[1] & 0x10) == 0) + { + input_report_key(dev, BTN_LEFT, data[8] & 0x01); + input_report_key(dev, BTN_MIDDLE, data[8] & 0x02); + input_report_key(dev, BTN_RIGHT, data[8] & 0x04); + input_report_key(dev, BTN_SIDE, data[8] & 0x20); + input_report_key(dev, BTN_EXTRA, data[8] & 0x10); + /* JEJ - throttle is positive when rolled backwards */ + t = ((__u32)data[6] << 2) | ((data[7] >> 6) & 3); + input_report_abs(dev, ABS_THROTTLE, (data[8] & 0x08) ? -t : t); + } + + /* 2D mouse packets */ + else if (wacom->tool[idx] == BTN_TOOL_MOUSE) + { + /* JEJ - validated with 2D Intuos2 mouse */ + input_report_key(dev, BTN_LEFT, data[8] & 0x04); + input_report_key(dev, BTN_MIDDLE, data[8] & 0x08); + input_report_key(dev, BTN_RIGHT, data[8] & 0x10); + /* JEJ - mouse wheel is positive when rolled backwards */ + input_report_rel(dev, REL_WHEEL, (__u32)((data[8] & 0x02) >> 1) + - (__u32)(data[8] & 0x01)); + } + + /* lens cursor packets */ + else + { + input_report_key(dev, BTN_LEFT, data[8] & 0x01); + input_report_key(dev, BTN_MIDDLE, data[8] & 0x02); + input_report_key(dev, BTN_RIGHT, data[8] & 0x04); + input_report_key(dev, BTN_SIDE, data[8] & 0x10); + input_report_key(dev, BTN_EXTRA, data[8] & 0x08); + } + } + + input_report_key(dev, wacom->tool[idx], 1); + input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]); +} + +static void wacom_intuos3_irq(struct urb *urb) +{ + struct wacom *wacom = urb->context; + unsigned char *data = wacom->data; + struct input_dev *dev = &wacom->dev; + unsigned int t; + int idx; + + if (urb->status) return; + + /* check for valid report */ + if (data[0] != 2 && data[0] != 5 && data[0] != 12) + { + printk(KERN_INFO "wacom_intuos3_irq: received unknown report #%d\n", data[0]); + wacom_request_reset(wacom); + return; + } + + /* tool index is always 0 here since there is no dual input tool */ + idx = data[1] & 0x01; + + /* pad packets. Works as a second tool and is alway in prox */ + if (data[0] == 12) + { + /* initiate the pad as a device */ + if (wacom->tool[1] != BTN_TOOL_FINGER) + { + wacom->tool[1] = BTN_TOOL_FINGER; + input_report_key(dev, wacom->tool[1], 1); + } + input_report_key(dev, BTN_0, (data[5] & 0x01)); + input_report_key(dev, BTN_1, (data[5] & 0x02)); + input_report_key(dev, BTN_2, (data[5] & 0x04)); + input_report_key(dev, BTN_3, (data[5] & 0x08)); + input_report_key(dev, BTN_4, (data[6] & 0x01)); + input_report_key(dev, BTN_5, (data[6] & 0x02)); + input_report_key(dev, BTN_6, (data[6] & 0x04)); + input_report_key(dev, BTN_7, (data[6] & 0x08)); + input_report_abs(dev, ABS_RX, ((data[1] & 0x1f) << 8) | data[2]); + input_report_abs(dev, ABS_RY, ((data[3] & 0x1f) << 8) | data[4]); + input_event(dev, EV_MSC, MSC_SERIAL, 0xffffffff); + return; + } + + /* process in/out prox events */ + if (wacom_intuos_inout(urb)) return; + + input_report_abs(dev, ABS_X, ((__u32)data[2] << 9) | ((__u32)data[3] << 1) | ((data[9] >> 1) & 1)); + input_report_abs(dev, ABS_Y, ((__u32)data[4] << 9) | ((__u32)data[5] << 1) | (data[9] & 1)); + input_report_abs(dev, ABS_DISTANCE, ((data[9] >> 2) & 0x3f)); + + /* process general packets */ + wacom_intuos_general(urb); + + if ((data[1] & 0xbc) == 0xa8 || (data[1] & 0xbe) == 0xb0) + { + /* Marker pen rotation packet. Reported as wheel due to valuator limitation */ + if (data[1] & 0x02) + { + t = ((__u32)data[6] << 3) | ((data[7] >> 5) & 7); + t = (data[7] & 0x20) ? ((t > 900) ? ((t-1) / 2 - 1350) : + ((t-1) / 2 + 450)) : (450 - t / 2) ; + input_report_abs(dev, ABS_WHEEL, t); + } + + /* 2D mouse packets */ + if (wacom->tool[idx] == BTN_TOOL_MOUSE) + { + input_report_key(dev, BTN_LEFT, data[8] & 0x04); + input_report_key(dev, BTN_MIDDLE, data[8] & 0x08); + input_report_key(dev, BTN_RIGHT, data[8] & 0x10); + input_report_key(dev, BTN_SIDE, data[8] & 0x40); + input_report_key(dev, BTN_EXTRA, data[8] & 0x20); + /* mouse wheel is positive when rolled backwards */ + input_report_rel(dev, REL_WHEEL, (__u32)((data[8] & 0x02) >> 1) + - (__u32)(data[8] & 0x01)); + } + } + + input_report_key(dev, wacom->tool[idx], 1); + input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]); +} + +#define WACOM_GRAPHIRE_BITS (BIT(EV_REL)) +#define WACOM_GRAPHIRE_REL (BIT(REL_WHEEL)) +#define WACOM_INTUOS_TOOLS (BIT(BTN_TOOL_BRUSH) | BIT(BTN_TOOL_PENCIL) | BIT(BTN_TOOL_AIRBRUSH) | BIT(BTN_TOOL_LENS)) +#define WACOM_INTUOS3_TOOLS (WACOM_INTUOS_TOOLS | BIT(BTN_TOOL_FINGER)) +#define WACOM_INTUOS_BUTTONS (BIT(BTN_SIDE) | BIT(BTN_EXTRA)) +#define WACOM_INTUOS3_BUTTONS (WACOM_INTUOS_BUTTONS | BIT(BTN_0) | BIT(BTN_1) | BIT(BTN_2) | BIT(BTN_3) | BIT(BTN_4) | BIT(BTN_5) | BIT(BTN_6) | BIT(BTN_7)) +#define WACOM_INTUOS_BITS (BIT(EV_REL)) +#define WACOM_INTUOS_REL (BIT(REL_WHEEL)) +#define WACOM_INTUOS_ABS (BIT(ABS_TILT_X) | BIT(ABS_TILT_Y) | BIT(ABS_RZ) | BIT(ABS_THROTTLE)) +#define WACOM_INTUOS3_ABS (WACOM_INTUOS_ABS | BIT(ABS_RX) | BIT(ABS_RY)) + +struct wacom_features wacom_features[] = { + + /* PenPartner */ + /* 0 */ { "Wacom Penpartner", 7, 5040, 3780, 255, 32, + wacom_penpartner_irq, 0, 0, 0, 0 }, + + /* Graphire */ + /* 1 */ { "Wacom Graphire", 8, 10206, 7422, 511, 32, + wacom_graphire_irq, WACOM_GRAPHIRE_BITS, 0, WACOM_GRAPHIRE_REL, 0 }, + /* 2 */ { "Wacom Graphire2 4x5", 8, 10206, 7422, 511, 32, + wacom_graphire_irq, WACOM_GRAPHIRE_BITS, 0, WACOM_GRAPHIRE_REL, 0 }, + /* 3 */ { "Wacom Graphire2 5x7", 8, 13918, 10206, 511, 32, + wacom_graphire_irq, WACOM_GRAPHIRE_BITS, 0, WACOM_GRAPHIRE_REL, 0 }, + + /* Intuos */ + /* 4 */ { "Wacom Intuos 4x5", 10, 12700, 10600, 1023, 15, + wacom_intuos_irq, WACOM_INTUOS_BITS, WACOM_INTUOS_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS_BUTTONS, WACOM_INTUOS_TOOLS }, + /* JEJ - confirmed X and Y range from test tablet */ + /* 5 */ { "Wacom Intuos 6x8", 10, 20320, 16240, 1023, 15, + wacom_intuos_irq, WACOM_INTUOS_BITS, WACOM_INTUOS_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS_BUTTONS, WACOM_INTUOS_TOOLS }, + /* 6 */ { "Wacom Intuos 9x12", 10, 30480, 24060, 1023, 15, + wacom_intuos_irq, WACOM_INTUOS_BITS, WACOM_INTUOS_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS_BUTTONS, WACOM_INTUOS_TOOLS }, + /* 7 */ { "Wacom Intuos 12x12", 10, 30480, 31680, 1023, 15, + wacom_intuos_irq, WACOM_INTUOS_BITS, WACOM_INTUOS_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS_BUTTONS, WACOM_INTUOS_TOOLS }, + /* 8 */ { "Wacom Intuos 12x18", 10, 45720, 31680, 1023, 15, + wacom_intuos_irq, WACOM_INTUOS_BITS, WACOM_INTUOS_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS_BUTTONS, WACOM_INTUOS_TOOLS }, + + /* PL - Cintiq */ + /* 9 */ { "Wacom PL400", 8, 5408, 4056, 255, 32, + wacom_pl_irq, 0, 0, 0, 0 }, + /* 10 */ { "Wacom PL500", 8, 6144, 4608, 255, 32, + wacom_pl_irq, 0, 0, 0, 0 }, + /* 11 */ { "Wacom PL600", 8, 6126, 4604, 255, 32, + wacom_pl_irq, 0, 0, 0, 0 }, + /* 12 */ { "Wacom PL600SX", 8, 6260, 5016, 255, 32, + wacom_pl_irq, 0, 0, 0, 0 }, + /* 13 */ { "Wacom PL550", 8, 6144, 4608, 511, 32, + wacom_pl_irq, 0, 0, 0, 0 }, + /* 14 */ { "Wacom PL800", 8, 7220, 5780, 511, 32, + wacom_pl_irq, 0, 0, 0, 0 }, + + /* Intuos2 */ + /* JEJ - confirmed X and Y range from J.N. tablet */ + /* 15 */ { "Wacom Intuos2 4x5", 10, 12700, 10600, 1023, 15, + wacom_intuos_irq, WACOM_INTUOS_BITS, WACOM_INTUOS_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS_BUTTONS, WACOM_INTUOS_TOOLS }, + /* JEJ - confirmed X and Y range from R.T. and J.S. tablets */ + /* 16 */ { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 15, + wacom_intuos_irq, WACOM_INTUOS_BITS, WACOM_INTUOS_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS_BUTTONS, WACOM_INTUOS_TOOLS }, + /* JEJ - values from serial 9x12 */ + /* 17 */ { "Wacom Intuos2 9x12", 10, 30480, 24060, 1023, 15, + wacom_intuos_irq, WACOM_INTUOS_BITS, WACOM_INTUOS_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS_BUTTONS, WACOM_INTUOS_TOOLS }, + /* JEJ - confirmed X and Y range from J.J. tablet */ + /* 18 */ { "Wacom Intuos2 12x12", 10, 30480, 31680, 1023, 15, + wacom_intuos_irq, WACOM_INTUOS_BITS, WACOM_INTUOS_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS_BUTTONS, WACOM_INTUOS_TOOLS }, + /* 19 */ { "Wacom Intuos2 12x18", 10, 45720, 31680, 1023, 15, + wacom_intuos_irq, WACOM_INTUOS_BITS, WACOM_INTUOS_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS_BUTTONS, WACOM_INTUOS_TOOLS }, + /* Volito - (Graphire2 4x5 no mouse wheel) */ + /* 20 */ { "Wacom Volito", 8, 5104, 3712, 511, 32, + wacom_graphire_irq, WACOM_GRAPHIRE_BITS, 0, 0, 0 }, + /* 21 */ { "Wacom Graphire3 4x5", 8, 10208, 7424, 511, 32, + wacom_graphire_irq, WACOM_GRAPHIRE_BITS, 0, WACOM_GRAPHIRE_REL, 0 }, + /* 22 */ { "Wacom Graphire3 6x8", 8, 16704, 12064, 511, 32, + wacom_graphire_irq, WACOM_GRAPHIRE_BITS, 0, WACOM_GRAPHIRE_REL, 0 }, + /* 23 */ { "Wacom Cintiq Partner", 8, 20480, 15360, 511, 32, + wacom_ptu_irq, 0, 0, 0, 0 }, + /* Intuos3 */ + /* 24 */ { "Wacom Intuos3 4x5", 10, 25400, 20320, 1023, 15, + wacom_intuos3_irq, WACOM_INTUOS_BITS, WACOM_INTUOS3_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS3_BUTTONS, WACOM_INTUOS3_TOOLS }, + /* 25 */ { "Wacom Intuos3 6x8", 10, 40640, 30480, 1023, 15, + wacom_intuos3_irq, WACOM_INTUOS_BITS, WACOM_INTUOS3_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS3_BUTTONS, WACOM_INTUOS3_TOOLS }, + /* 26 */ { "Wacom Intuos3 9x12", 10, 60960, 45720, 1023, 15, + wacom_intuos3_irq, WACOM_INTUOS_BITS, WACOM_INTUOS3_ABS, + WACOM_INTUOS_REL, WACOM_INTUOS3_BUTTONS, WACOM_INTUOS3_TOOLS }, + + { NULL , 0 } +}; + +struct usb_device_id wacom_ids[] = { + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x00), driver_info: 0 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x10), driver_info: 1 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x11), driver_info: 2 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x12), driver_info: 3 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x20), driver_info: 4 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x21), driver_info: 5 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x22), driver_info: 6 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x23), driver_info: 7 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x24), driver_info: 8 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x30), driver_info: 9 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x31), driver_info: 10 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x32), driver_info: 11 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x33), driver_info: 12 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x34), driver_info: 13 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x35), driver_info: 14 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41), driver_info: 15 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42), driver_info: 16 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x43), driver_info: 17 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x44), driver_info: 18 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x45), driver_info: 19 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x60), driver_info: 20 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x13), driver_info: 21 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x14), driver_info: 22 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03), driver_info: 23 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB0), driver_info: 24 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB1), driver_info: 25 }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB2), driver_info: 26 }, + + /* some Intuos2 6x8's erroneously report as 0x47; + * multiple confirmed examples exist. */ + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x47), driver_info: 16 }, + + { } +}; + +MODULE_DEVICE_TABLE(usb, wacom_ids); + +static int wacom_open(struct input_dev *dev) +{ + struct wacom *wacom = dev->private; + + if (wacom->open++) + return 0; + + wacom->irq.dev = wacom->usbdev; + if (usb_submit_urb(&wacom->irq)) + return -EIO; + + return 0; +} + +static void wacom_close(struct input_dev *dev) +{ + struct wacom *wacom = dev->private; + + if (!--wacom->open) + usb_unlink_urb(&wacom->irq); +} + +static void wacom_reset(struct wacom* wacom) +{ + unsigned char edata[2], limit=0; + #ifdef __JEJ_DEBUG + printk(KERN_INFO __FILE__ ": Setting tablet report for tablet data\n"); + #endif + + /* ask the tablet to report tablet data. repeats until it succeeds */ + do { + edata[0] = 2; + edata[1] = 2; + usb_set_report(wacom->usbdev, wacom->ifnum, 3, 2, edata, 2); + usb_get_report(wacom->usbdev, wacom->ifnum, 3, 2, edata, 2); + } while (edata[1] != 2 && limit++ < 5); +} + +static void *wacom_probe(struct usb_device *dev, unsigned int ifnum, const struct usb_device_id *id) +{ + struct usb_endpoint_descriptor *endpoint; + struct wacom *wacom; + + if (!(wacom = kmalloc(sizeof(struct wacom), GFP_KERNEL))) return NULL; + memset(wacom, 0, sizeof(struct wacom)); + + wacom->features = wacom_features + id->driver_info; + + wacom->dev.evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_MSC) | + wacom->features->evbit; + wacom->dev.absbit[0] |= BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE) | + BIT(ABS_DISTANCE) | BIT(ABS_WHEEL) | wacom->features->absbit; + wacom->dev.relbit[0] |= wacom->features->relbit; + wacom->dev.keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_RIGHT) | + BIT(BTN_MIDDLE) | wacom->features->btnbit; + wacom->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | + BIT(BTN_TOOL_RUBBER) | BIT(BTN_TOOL_MOUSE) | + BIT(BTN_TOUCH) | BIT(BTN_STYLUS) | BIT(BTN_STYLUS2) | + wacom->features->digibit; + wacom->dev.mscbit[0] |= BIT(MSC_SERIAL); + + #ifdef __JEJ_DEBUG + printk(KERN_INFO __FILE__ ": Reporting max %d, %d\n", + wacom->features->x_max, wacom->features->y_max); + #endif + + wacom->dev.absmax[ABS_X] = wacom->features->x_max; + wacom->dev.absmax[ABS_Y] = wacom->features->y_max; + wacom->dev.absmax[ABS_PRESSURE] = wacom->features->pressure_max; + wacom->dev.absmax[ABS_DISTANCE] = wacom->features->distance_max; + wacom->dev.absmax[ABS_TILT_X] = 127; + wacom->dev.absmax[ABS_TILT_Y] = 127; + wacom->dev.absmax[ABS_WHEEL] = 1023; + + wacom->dev.absmax[ABS_RX] = 4097; + wacom->dev.absmax[ABS_RY] = 4097; + wacom->dev.absmin[ABS_RZ] = -900; + wacom->dev.absmax[ABS_RZ] = 899; + wacom->dev.absmin[ABS_THROTTLE] = -1023; + wacom->dev.absmax[ABS_THROTTLE] = 1023; + + wacom->dev.absfuzz[ABS_X] = 4; + wacom->dev.absfuzz[ABS_Y] = 4; + + wacom->dev.private = wacom; + wacom->dev.open = wacom_open; + wacom->dev.close = wacom_close; + + wacom->dev.name = wacom->features->name; + wacom->dev.idbus = BUS_USB; + wacom->dev.idvendor = dev->descriptor.idVendor; + wacom->dev.idproduct = dev->descriptor.idProduct; + wacom->dev.idversion = dev->descriptor.bcdDevice; + wacom->usbdev = dev; + wacom->ifnum = ifnum; + + INIT_LIST_HEAD(&wacom->event_list); + init_MUTEX(&wacom->kwacomd_sem); + + endpoint = dev->config[0].interface[ifnum].altsetting[0].endpoint + 0; + + usb_set_idle(dev, dev->config[0].interface[ifnum].altsetting[0].bInterfaceNumber, 0, 0); + + FILL_INT_URB(&wacom->irq, dev, usb_rcvintpipe(dev, + endpoint->bEndpointAddress), wacom->data, wacom->features->pktlen, + wacom->features->irq, wacom, endpoint->bInterval); + + input_register_device(&wacom->dev); + + wacom_reset(wacom); + + printk(KERN_INFO __FILE__ ": input%d: %s on usb%d:%d.%d\n", + wacom->dev.number, wacom->features->name, dev->bus->busnum, + dev->devnum, ifnum); + + return wacom; +} + +static void wacom_disconnect(struct usb_device *dev, void *ptr) +{ + unsigned int flags; + struct wacom *wacom = ptr; + if (wacom) + { + spin_lock_irqsave(&wacom_event_lock, flags); + list_del(&wacom->event_list); + INIT_LIST_HEAD(&wacom->event_list); + spin_unlock_irqrestore(&wacom_event_lock, flags); + + /* Wait for kwacomd to leave this tablet alone. */ + down(&wacom->kwacomd_sem); + up(&wacom->kwacomd_sem); + + usb_unlink_urb(&wacom->irq); + input_unregister_device(&wacom->dev); + kfree(wacom); + } +} + +static void wacom_events(void) +{ + struct wacom* wacom; + unsigned int flags; + struct list_head *tmp; + + printk(KERN_INFO "wacom_events\n"); + + while (1) + { + spin_lock_irqsave(&wacom_event_lock, flags); + + if (list_empty(&wacom_event_list)) + break; + + /* Grab the next entry from the beginning of the list */ + tmp = wacom_event_list.next; + wacom = list_entry(tmp, struct wacom, event_list); + + list_del(tmp); /* dequeue tablet */ + INIT_LIST_HEAD(tmp); + + if (down_trylock(&wacom->kwacomd_sem) != 0) BUG(); /* never blocks */ + spin_unlock_irqrestore(&wacom_event_lock, flags); + + wacom_reset(wacom); + + up(&wacom->kwacomd_sem); /* mark tablet free */ + } + spin_unlock_irqrestore(&wacom_event_lock, flags); +} + +static int wacom_thread(void* pv) +{ + daemonize(); + reparent_to_init(); + + /* Setup a nice name */ + strcpy(current->comm, "kwacomd"); + + /* Send me a signal to get me die (for debugging) */ + while (!signal_pending(current)) + { + wacom_events(); + wait_event_interruptible(kwacomd_wait, !list_empty(&wacom_event_list)); + } + + complete_and_exit(&kwacomd_exited, 0); +} + + +static struct usb_driver wacom_driver = { + name: "wacom", + probe: wacom_probe, + disconnect: wacom_disconnect, + id_table: wacom_ids, +}; + +static int __init wacom_init(void) +{ + int pid; + + usb_register(&wacom_driver); + info(DRIVER_VERSION " " DRIVER_AUTHOR); + info(DRIVER_DESC); + + pid = kernel_thread(wacom_thread, NULL, + CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + + if (pid >= 0) + { + kwacomd_pid = pid; + return 0; + } + + /* Fall through if kernel_thread failed */ + usb_deregister(&wacom_driver); + err("failed to start wacom_thread"); + + return -1; +} + +static void __exit wacom_exit(void) +{ + int ret; + + /* Kill the thread */ + ret = kill_proc(kwacomd_pid, SIGTERM, 1); + wait_for_completion(&kwacomd_exited); + + usb_deregister(&wacom_driver); +} + +module_init(wacom_init); +module_exit(wacom_exit); --- wacom-tools-0.8.1.6.orig/linuxwacom/src/xdrv/wcmCommon.c +++ wacom-tools-0.8.1.6/linuxwacom/src/xdrv/wcmCommon.c @@ -548,12 +548,7 @@ switch (button & AC_TYPE) { case AC_BUTTON: -/* xf86PostButtonEvent(local->dev, is_absolute, button & AC_CODE, -*/ /* Dynamically modify the button map as required -- - * to be moved in the place where button mappings are changed - */ - local->dev->button->map [button_idx] = button & AC_CODE; - xf86PostButtonEvent(local->dev, is_absolute, button_idx, + xf86PostButtonEvent(local->dev, is_absolute, button & AC_CODE, mask != 0,0,naxes,rx,ry,rz,v3,v4,v5); break; @@ -599,27 +594,21 @@ break; case AC_DBLCLICK: - /* Dynamically modify the button map as required -- - * to be moved in the place where button mappings are changed. - * Only left double is supported. - */ - local->dev->button->map [button_idx] = 1; - if (mask) { /* Left button down */ xf86PostButtonEvent(local->dev, is_absolute, - button_idx, 1,0,naxes, + 1, 1,0,naxes, rx,ry,rz,v3,v4,v5); /* Left button up */ xf86PostButtonEvent(local->dev, is_absolute, - button_idx,0,0,naxes, + 1,0,0,naxes, rx,ry,rz,v3,v4,v5); } /* Left button down/up upon mask is 1/0 */ - xf86PostButtonEvent(local->dev, is_absolute, button_idx, + xf86PostButtonEvent(local->dev, is_absolute, 1, mask != 0,0,naxes,rx,ry,rz,v3,v4,v5); break; } @@ -747,13 +736,10 @@ switch (fakeButton & AC_TYPE) { case AC_BUTTON: - /* send both button on/off in the same event for pad */ - local->dev->button->map [0] = fakeButton & AC_CODE; - xf86PostButtonEvent(local->dev, is_absolute, 0, 1,0,naxes,x,y,z,v3,v4,v5); - xf86PostButtonEvent(local->dev, is_absolute, 0, + xf86PostButtonEvent(local->dev, is_absolute, fakeButton & AC_CODE, 0,0,naxes,x,y,z,v3,v4,v5); break; --- wacom-tools-0.8.1.6.orig/linuxwacom/src/xdrv/xf86Wacom.h +++ wacom-tools-0.8.1.6/linuxwacom/src/xdrv/xf86Wacom.h @@ -23,7 +23,8 @@ /****************************************************************************/ #include "../include/xdrv-config.h" -#include +#include +#include #include "../include/Xwacom.h" /***************************************************************************** --- wacom-tools-0.8.1.6.orig/linuxwacom/src/xdrv/xf86Wacom.c +++ wacom-tools-0.8.1.6/linuxwacom/src/xdrv/xf86Wacom.c @@ -577,7 +577,9 @@ xf86GetMotionEvents, local->history_size, #else +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 3 GetMotionHistory, +#endif GetMotionHistorySize(), #endif ((priv->flags & ABSOLUTE_FLAG) ? --- wacom-tools-0.8.1.6.orig/linuxwacom/src/xdrv/wcmConfig.c +++ wacom-tools-0.8.1.6/linuxwacom/src/xdrv/wcmConfig.c @@ -387,6 +387,7 @@ xfree(priv->pPressCurve); xfree(priv); + local->private = NULL; xf86DeleteInput(local, 0); } @@ -993,7 +994,7 @@ MODULEVENDORSTRING, MODINFOSTRING1, MODINFOSTRING2, - XF86_VERSION_CURRENT, + XORG_VERSION_CURRENT, 1, 0, 0, ABI_CLASS_XINPUT, ABI_XINPUT_VERSION, --- wacom-tools-0.8.1.6.orig/linuxwacom/src/util/wacusb.c +++ wacom-tools-0.8.1.6/linuxwacom/src/util/wacusb.c @@ -133,8 +133,10 @@ BTN_TL, BTN_TR, BTN_TL2, BTN_TR2, BTN_SELECT }; -int gPadKeys [WACOMBUTTON_MAX]; -int gNumPadKeys; +#define NUM_PADKEY_CODES (sizeof(padkey_codes) / sizeof(unsigned short)) + +static int gPadKeys [NUM_PADKEY_CODES]; +static int gNumPadKeys; /***************************************************************************** ** Static Prototypes @@ -634,7 +636,7 @@ BIT(WACOMFIELD_TOOLTYPE); /* Detect button codes */ - for (nCnt = 0; nCnt < WACOMBUTTON_MAX; nCnt++) + for (nCnt = 0; nCnt < NUM_PADKEY_CODES; nCnt++) if (ISBITSET (keybits, padkey_codes [nCnt])) gPadKeys [gNumPadKeys++] = padkey_codes [nCnt]; } --- wacom-tools-0.8.1.6.orig/linuxwacom/src/2.6.10/wacom.c +++ wacom-tools-0.8.1.6/linuxwacom/src/2.6.10/wacom.c @@ -10,6 +10,7 @@ * Copyright (c) 2001 Frederic Lepied * Copyright (c) 2004 Panagiotis Issaris * Copyright (c) 2002-2008 Ping Cheng + * Copyright (c) 2004-2005 Ron Lee * * ChangeLog: * v0.1 (vp) - Initial release @@ -51,6 +52,7 @@ * - Cleanups here and there * v1.30.1 (pi) - Added Graphire3 support * v1.40 (pc) - Add support for several new devices, fix eraser reporting, ... + * v1.41 (rl) - Add ability to repossess devices from other drivers. * * WARNING: THIS IS NOT PART OF THE OFFICIAL KERNEL TREE * THIS IS FOR TESTING PURPOSES @@ -119,6 +121,13 @@ MAX_TYPE }; +/* Why does hid.h export these publicly? */ +#undef info +#undef err +/* redefine them to be a little less noisy in the log */ +#define info(format,...) printk(KERN_INFO "wacom: " format "\n" , ## __VA_ARGS__) +#define err(format,...) printk(KERN_ERR "wacom: " format "\n" , ## __VA_ARGS__) + struct wacom_features { char *name; int pktlen; @@ -556,8 +565,8 @@ idx = data[1] & 0x01; /* Enter report */ - if ((data[1] & 0xfc) == 0xc0) - { + if ((data[1] & 0xfc) == 0xc0) + { /* serial number of the tool */ wacom->serial[idx] = ((data[3] & 0x0f) << 28) + (data[4] << 20) + ((__u32)data[5] << 12) + @@ -567,24 +576,24 @@ switch (wacom->id[idx]) { case 0x812: /* Inking pen */ case 0x801: /* Intuos3 Inking pen */ - case 0x012: + case 0x012: wacom->tool[idx] = BTN_TOOL_PENCIL; - break; + break; case 0x822: /* Pen */ case 0x842: case 0x852: case 0x823: /* Intuos3 Grip Pen */ case 0x813: /* Intuos3 Classic Pen */ case 0x885: /* Intuos3 Marker Pen */ - case 0x022: + case 0x022: wacom->tool[idx] = BTN_TOOL_PEN; break; case 0x832: /* Stroke pen */ - case 0x032: + case 0x032: wacom->tool[idx] = BTN_TOOL_BRUSH; break; case 0x007: /* Mouse 4D and 2D */ - case 0x09c: + case 0x09c: case 0x094: case 0x017: /* Intuos3 2D Mouse */ wacom->tool[idx] = BTN_TOOL_MOUSE; @@ -595,9 +604,9 @@ break; case 0x82a: /* Eraser */ case 0x85a: - case 0x91a: + case 0x91a: case 0xd1a: - case 0x0fa: + case 0x0fa: case 0x82b: /* Intuos3 Grip Pen Eraser */ case 0x81b: /* Intuos3 Classic Pen Eraser */ case 0x91b: /* Intuos3 Airbrush Eraser */ @@ -605,7 +614,7 @@ break; case 0xd12: /* Airbrush */ case 0x912: - case 0x112: + case 0x112: case 0x913: /* Intuos3 Airbrush */ wacom->tool[idx] = BTN_TOOL_AIRBRUSH; break; @@ -1118,7 +1127,7 @@ usb_get_report(intf, 3, 2, rep_data, 2); } while (rep_data[1] != 2 && limit++ < 5); - printk(KERN_INFO "input: %s on %s\n", wacom->features->name, path); + info("%s on %s", wacom->features->name, path); usb_set_intfdata(intf, wacom); @@ -1135,6 +1144,7 @@ input_unregister_device(&wacom->dev); usb_free_urb(wacom->irq); usb_buffer_free(interface_to_usbdev(intf), 10, wacom->data, wacom->data_dma); + info("disconnected %s", wacom->features->name); kfree(wacom); } } @@ -1151,7 +1161,10 @@ { int result = usb_register(&wacom_driver); if (result == 0) - info(DRIVER_VERSION ":" DRIVER_DESC); + info(DRIVER_VERSION ": " DRIVER_DESC); + else + err("usb_register failed, error number: %d", result); + return result; } @@ -1160,5 +1173,59 @@ usb_deregister(&wacom_driver); } +static void repossess_devices( struct usb_driver *driver, struct usb_device_id *id ) +{ + while( id->idVendor ) + { + // XXX Not enough, we need to find ALL devices, not just the + // first of any particular model. + struct usb_device *udev = usb_find_device(id->idVendor,id->idProduct); + + if (udev) + { + down_write( &udev->dev.bus->subsys.rwsem ); + usb_lock_device( udev ); + + struct usb_interface *interface = usb_ifnum_to_if(udev, 0); + + if( interface->dev.driver && + interface->dev.driver->owner != driver->driver.owner ) + { + if (interface && usb_interface_claimed(interface)) + { + info("releasing device '%s' from generic driver '%s'.", + interface->dev.kobj.k_name, + interface->dev.driver->name); + device_release_driver(&interface->dev); + } + + driver_probe_device(&driver->driver,&interface->dev); + } + else + info( "already attached" ); + + usb_unlock_device( udev ); + up_write( &udev->dev.bus->subsys.rwsem ); + + usb_put_dev(udev); + } + ++id; + } +} + +static int rebind_in; + +static int wacom_set_rebind(const char *val, struct kernel_param *kp) +{ + int retval; + + retval = param_set_int(val, kp); + info("user rebind request %d", rebind_in); + repossess_devices( &wacom_driver, wacom_ids ); + return retval; +} + +module_param_call(rebind, wacom_set_rebind, param_get_int, &rebind_in, 0664); module_init(wacom_init); module_exit(wacom_exit); +