apply patches

This commit is contained in:
openKylinBot 2022-05-14 03:32:59 +08:00
commit e196654596
15 changed files with 7025 additions and 7165 deletions

832
ChangeLog
View File

@ -1,398 +1,476 @@
1.0.0pre12:
deprecate -p to do nothing, except print a message.
scan /proc/[0-9]*/stat for imwheel process to kill on -k
(* Security Fix *)
http://www.caughq.org/advisories/CAU-2004-0002.txt
fixed make distcheck
1.0.0pre11:
avoid bad events that cause an infinite loop!
1.0.0pre10:
fix @Exclude (argh)
this allows xv->grab to function normally again, with the right config.
when configuring, error when we can't link to X11
apparently too many idiots can't read warnings.
at this point all bugs are fixed and all acceptable additions to functionality
are finished...
if there are no reports within a few weeks, 1.0.0 will be released with
full documentation updates, and imwheel itself will be put to rest,
except for bug fixes.
(until I decided to do a total rewrite in a simpler, yet more powerful, manner.)
1.0.0pre9:
default action is now @Repeat,
so wheel-active applications get the right stuff
imwheel is meant for OLD apps...so in keeping with that
now that most modern apps can handle the wheel for real
it's time to remove the builtin keys...
however the old method of default keys is still available
via the -K option
-K now uses doWA routine, just like user configured actions do
1.0.0pre8:
added Button# syntax for input filter in imwheelrc
like Up can now be called Button4, Down can be Button5, etc...
(Left=6, Right=7, Thumb1=8, Thumb2=9, like always...)
squashed a segfault
fixed UNGRAB window name, class, and resource name resolution (used to get "(null)"s)
gpm is no longer built by default
gpm's docs are no longer built by default
1.0.0pre7:
search parent windows for a name, this should remove the need for -f.
1.0.0pre6:
fix -b
With some help from Malte S. Stretz <mss AT msquadrat.de>
example: -b 4589
will use button 4 and 5 as Up and Down like normal
will use button 8 and 9 as Left and Right, remapped
button 6 and 7 are ignored.
all imwheel entries that are Thumb1 and Thumb2 events will ne discarded
fix window name lookup, now uses XAtoms
Thanks Mark Baker <homer1 AT adelphia.net>
first tries _NET_WM_NAME(UTF8_STRING) if these Atoms are present
- whether UTF8 works in the imwheelrc...I do not know.
if that's NULL then it tries WM_NAME(STRING) if these Atoms are present
if that's still NULL then then it tries the old method...
avoid a possible segfault...dunno if it happens in the real world
1.0.0pre5:
added --auto-repeat inspired by a debian patch from
Thanks Darren Salt <linux AT youmustbejoking.demon.co.uk>
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=173964&msg=1
the code is untested, so all you stick users out there better test the stuff
and help debug it too!
if you set a repeat number to 0 for an action in the rc file,
then it will do autorepeat for as long as that button is held, I hope.
hid some warnings/infos/perrors behind -d debugging mode.
moved the system imwheelrc to /etc/X11/imwheel/imwheelrc
1.0.0.pre4:
"\(root\)" works for non-wheel-fifos, as long as @Exclude isn't used.
instead use :
"\(root\)"
,Up,Button4
,Down,Button5
etc... in your imwheelrc.
added mid-sequence keyups, put a - befreo the keysym for a keyup like this:
".*"
,Up,Shift_L|R|-R|-Shift_L|O|-O|F|-F|L|-L|Return
this will type "Rofl" and press return, in all apps, on wheel up.
make sure not to press something twice in a row without releasing it.
"\(root\)" works for non-wheel-fifos, as long as @Exclude isn't used.
instead use :
"\(root\)"
,Up,Button4
,Down,Button5
etc... in your imwheelrc.
added mid-sequence keyups, put a - befreo the keysym for a keyup like this:
".*"
,Up,Shift_L|R|-R|-Shift_L|O|-O|F|-F|L|-L|Return
this will type "Rofl" and press return, in all apps, on wheel up.
make sure not to press something twice in a row without releasing it.
1.0.0.pre3:
added the --root-window (-r) option, for WM wheeling in the root of the
XServer. use pattern "\(root\)" in the imwheelrc file.
added the --root-window (-r) option, for WM wheeling in the root of the
XServer. use pattern "\(root\)" in the imwheelrc file.
1.0.0pre2:
added --config (-c) option, open config window at start
added Button sending via XTest, use Button# as keysym in imwheelrc.
one less error on failing to open an empty filename
Thumb1 and Thumb2 (two thumb buttons) (Thumb == Thumb1)
README is no longer going to be updated, use the manpage after installation.
added --config (-c) option, open config window at start
added Button sending via XTest, use Button# as keysym in imwheelrc.
one less error on failing to open an empty filename
Thumb1 and Thumb2 (two thumb buttons) (Thumb == Thumb1)
README is no longer going to be updated, use the manpage after installation.
1.0.0pre1:
updated for gcc3.0
fixed configure dialog for XServer depth >16bits.
(please report if the configure dialog still fails for you now)
removed ye olde Makefile.unix
updated for gcc3.0
fixed configure dialog for XServer depth >16bits.
(please report if the configure dialog still fails for you now)
removed ye olde Makefile.unix
-------------------------------------------------------------------------------
0.9.9:
Documentation needs updating with the features from this release...argh!
Made some more comments in the stderr output...plus hints.
Fixed a segfault on freeing a few strings that were not allocated.
Added -g option for focus event tracking, so we at least try to regrab
whenever the focused (ungrabbed) window is left.
this was code from Patrick Reinelt <preinelt@kullen.rwth-aachen.de>
-g toggles it on an off, but it is on by default, as it may help some
people out there.
pre6
This may be the last update to the 0.9.9, pending any bugs.
CVS dirs removed in make dist process...
Upgraded GPM to version 1.19.3 and generated the patch as usual.
Added Artec UM530P driver (-t um530p) to gpm.
This is the imps2 init code without the second half.
Thanks to: Vicente Aguilar <vaguilar@linuxfreak.com>
Fixed some references to O_SYNC for FreeBSD users, who don't have it!
Reduced the fontspec in cfg.c to be more forgiving, may avert a SegFault!
Added an RPM Source spec file...it might work, I dunno!
imwheelrc now installs into /etc for "make install"
Added -Igetopt for when included getopt is used.
Added a transpose (-x) option to swap the X/Y axis.
Useful for S-48 OEM gpm driver, also use -b 54 option...
This is for fifo use only, which is working fine in XFree86 4.0.1
Added more sanity checks in configure.in
getopt.h missing causes the included one to be used
XFree86 only checked for Linux systems
Added Linux Touch Panel Drivers for the Fujitsu Lifebook B112/B142
GPM driver to imwheel's gpm (-t b112)
Thanks to Harald Hoyer <Harald.Hoyer@Parzelle.De> <HarryH@Royal.Net>
who had the patches for gpm on his site http://parzelle.de/
Added Logitech OEM S-48 & Firstmouse+ to gpm (-t zilog)
This works for a Logitech OEM S-48 that I received as a donation
Thanks to A. Norman <norman@physics.wm.edu> posting his sourcecode!
His site is at:
http://www.physics.wm.edu/~norman/Mouse_Diag/index.html
Added a script to convert the Right-handedly oriented imwheelrc file to
Left handed (converts _L to _R in the imwheelrc)
It's simple so patterns matching the _L string will be changed to _R
watch out for that I suppose...but I haven't seen anything like
that in other places of the rc file.
The script is called lefty.sh, execute it before "make install" if you
are a left handed person or you prefer the right side control keys.
pre5
Replaced strsep usage for intel solaris people.
Fixed the fact that a missing "(null)" section would cause a segfault.
Fixed an UNGRAB(Exclude) handling code error.
Optimized the UNGRAB/GRAB search, now we don't go looking for a reason not
to UNGRAB all the time!
Added --buttons or -b option, whichs allows you to set the button mapping.
Default mapping looks like this: "45678"
You can limit it to just 4 and 5 by doing: imwheel -b 45
This also allows some people to fix the mapping for weirdo mice ;)
Here's a reference table for what the numbers mean:
Documentation needs updating with the features from this release...argh!
Made some more comments in the stderr output...plus hints.
Fixed a segfault on freeing a few strings that were not allocated.
Added -g option for focus event tracking, so we at least try to regrab
whenever the focused (ungrabbed) window is left.
this was code from Patrick Reinelt <preinelt@kullen.rwth-aachen.de>
-g toggles it on an off, but it is on by default, as it may help some
people out there.
pre6
This may be the last update to the 0.9.9, pending any bugs.
CVS dirs removed in make dist process...
Upgraded GPM to version 1.19.3 and generated the patch as usual.
Added Artec UM530P driver (-t um530p) to gpm.
This is the imps2 init code without the second half.
Thanks to: Vicente Aguilar <vaguilar@linuxfreak.com>
Fixed some references to O_SYNC for FreeBSD users, who don't have it!
Reduced the fontspec in cfg.c to be more forgiving, may avert a SegFault!
Added an RPM Source spec file...it might work, I dunno!
imwheelrc now installs into /etc for "make install"
Added -Igetopt for when included getopt is used.
Added a transpose (-x) option to swap the X/Y axis.
Useful for S-48 OEM gpm driver, also use -b 54 option...
This is for fifo use only, which is working fine in XFree86 4.0.1
Added more sanity checks in configure.in
getopt.h missing causes the included one to be used
XFree86 only checked for Linux systems
Added Linux Touch Panel Drivers for the Fujitsu Lifebook B112/B142
GPM driver to imwheel's gpm (-t b112)
Thanks to Harald Hoyer <Harald.Hoyer@Parzelle.De> <HarryH@Royal.Net>
who had the patches for gpm on his site http://parzelle.de/
Added Logitech OEM S-48 & Firstmouse+ to gpm (-t zilog)
This works for a Logitech OEM S-48 that I received as a donation
Thanks to A. Norman <norman@physics.wm.edu> posting his sourcecode!
His site is at:
http://www.physics.wm.edu/~norman/Mouse_Diag/index.html
Added a script to convert the Right-handedly oriented imwheelrc file to
Left handed (converts _L to _R in the imwheelrc)
It's simple so patterns matching the _L string will be changed to _R
watch out for that I suppose...but I haven't seen anything like
that in other places of the rc file.
The script is called lefty.sh, execute it before "make install" if you
are a left handed person or you prefer the right side control keys.
index default button action in imwheel
1 4 Wheel/Stick Up
2 5 Wheel/Stick Down
3 6 Wheel/Stick Left
4 7 Wheel/Stick Right
5 8 Thumb Button
pre5
Replaced strsep usage for intel solaris people.
Fixed the fact that a missing "(null)" section would cause a segfault.
Fixed an UNGRAB(Exclude) handling code error.
Optimized the UNGRAB/GRAB search, now we don't go looking for a reason not
to UNGRAB all the time!
Added --buttons or -b option, whichs allows you to set the button mapping.
Default mapping looks like this: "45678"
You can limit it to just 4 and 5 by doing: imwheel -b 45
This also allows some people to fix the mapping for weirdo mice ;)
Here's a reference table for what the numbers mean:
So that "imwheel -b 86754" does the following:
Button 8 is Wheel/Stick Up to imwheel
Button 6 is Wheel/Stick Down to imwheel
Button 7 is Wheel/Stick Left to imwheel
Button 5 is Wheel/Stick Right to imwheel
Button 4 is Thumb Button to imwheel
Use xev while NOT running imwheel (run "imwheel -kq" first) to find out
what buttons are what on your mouse!
Fixed the non-functional Configure Dialog (XGrabButton wasn't working right)
pre4
Fixed == tests to = in configure.in, per many complaints. (worked for me ;)
Updated gpm to version 1.19.2, people kept asking...
pre3
Fixed security bug, where a user may symlink to a file they cannot open as
themselves, then get the first line of that file using the debug mode.
This could allow the root password of the shadow to be exposed for any
user who has access to a set-uid-root imwheel.
Apparently Mandrake (and others perhaps) use a suid-root perl script to
execute the imwheel program, perhaps meaning to be more safe. In
reality I do not install imwheel as root, nor do I actively support it,
nor take any responsibility for those who do install it as a suid-root
or suid any other user, and who then have a security breach. I'm also
happy that my friend, Rob C. Ludwick, pointed the hole out to me, as
no-one on the mailing list he saw this being discussed on bothered to
write me! Also, about the distros suid perl script jazz...this is the
second time you've caused me pain, and I'm bitter, and I have no remorse
for you if you shall perish one million deaths through your foolishness
of suid-root wrappers.
One other note, imwheel already DOES check that any process it is looking
to kill is actually an imwheel process. If this needs improvement
then somebody send in a patch. I currently consider the possibility
impossible. (Yes, I like English!)
pre2
Added @Priority to allow for people who want visible control over what is
more important than whatever else. See imwheelrc for more. (tested)
Fixed the @Exclude bug, where if @Exclude was used with a ".*" regex then
all windows were excluded, even those defined in the imwheelrc.
The new priority command can help users tell imwheel how much they'd
really like to exclude and what doesn't need to be, otherwise position
in the imwheelrc is all that makes the difference now. (tested)
Fixed the configuration errors, where variables were unquoted and spaces
may have freaked m4 and the shell out!
pre1
fixed getenv("HOME") type security hole. (tested)
inclusion of imwheelrc, but no "make install" installation yet.
--------------------------------------------------------------------------------
index default button action in imwheel
1 4 Wheel/Stick Up
2 5 Wheel/Stick Down
3 6 Wheel/Stick Left
4 7 Wheel/Stick Right
5 8 Thumb Button
So that "imwheel -b 86754" does the following:
Button 8 is Wheel/Stick Up to imwheel
Button 6 is Wheel/Stick Down to imwheel
Button 7 is Wheel/Stick Left to imwheel
Button 5 is Wheel/Stick Right to imwheel
Button 4 is Thumb Button to imwheel
Use xev while NOT running imwheel (run "imwheel -kq" first) to find out
what buttons are what on your mouse!
Fixed the non-functional Configure Dialog (XGrabButton wasn't working right)
pre4
Fixed == tests to = in configure.in, per many complaints. (worked for me ;)
Updated gpm to version 1.19.2, people kept asking...
pre3
Fixed security bug, where a user may symlink to a file they cannot open as
themselves, then get the first line of that file using the debug mode.
This could allow the root password of the shadow to be exposed for any
user who has access to a set-uid-root imwheel.
Apparently Mandrake (and others perhaps) use a suid-root perl script to
execute the imwheel program, perhaps meaning to be more safe. In
reality I do not install imwheel as root, nor do I actively support it,
nor take any responsibility for those who do install it as a suid-root
or suid any other user, and who then have a security breach. I'm also
happy that my friend, Rob C. Ludwick, pointed the hole out to me, as
no-one on the mailing list he saw this being discussed on bothered to
write me! Also, about the distros suid perl script jazz...this is the
second time you've caused me pain, and I'm bitter, and I have no remorse
for you if you shall perish one million deaths through your foolishness
of suid-root wrappers.
One other note, imwheel already DOES check that any process it is looking
to kill is actually an imwheel process. If this needs improvement
then somebody send in a patch. I currently consider the possibility
impossible. (Yes, I like English!)
pre2
Added @Priority to allow for people who want visible control over what is
more important than whatever else. See imwheelrc for more. (tested)
Fixed the @Exclude bug, where if @Exclude was used with a ".*" regex then
all windows were excluded, even those defined in the imwheelrc.
The new priority command can help users tell imwheel how much they'd
really like to exclude and what doesn't need to be, otherwise position
in the imwheelrc is all that makes the difference now. (tested)
Fixed the configuration errors, where variables were unquoted and spaces
may have freaked m4 and the shell out!
pre1
fixed getenv("HOME") type security hole. (tested)
inclusion of imwheelrc, but no "make install" installation yet.
-------------------------------------------------------------------------------
0.9.8
finished configure "make dist" handling of unselected stuff.
seems to work well for all beta testers (at least 5 people wrote back)
pre4
fixed @Exclude (tested myself of course, waiting for feedback)
fixed PIDFILE crap from making the configure.in wrongly...
hey - I'm still learning autoconfig and friends... ;)
pre3
configure (full autoconf, automake, autoheader dealie)
updated gpm to version 1.19.0
added -v and --version option, for just the version header of the help
there will be NO MORE none gpm releases until gpm includes my patch in the
main distribution! configure doesn't play nice doing dual distros...
pre2
updated gpm to version 1.18.1
pre1
tfxmms - in gpm - the Serial Trackman FX marble button 4 as stick motion
toggle and complete mouse driver.
sensitivity option in imwheel - uses a summation of motion after
thresholding, to determine when to go!
@Repeat command (like @Exclude) in imwheelrc files - resends the button to X
this may not work for non-gpm wheelfifo users, who should rather use
@Exclude for now.
minor code cleanups - no bugfixes there! just making code better looking.
--------------------------------------------------------------------------------
0.9.7
Added --force option to force usage of event data instead of looking for
the focused window using XGetInputFocus. This may work better for some
window managers than others. In fvwm2 I do not use the force option,
whereas in window maker it may be mandatory. I know it's silly but when
you use the force option you are using the ICCCM method of grabbing the
current client window, whereas the deffault operation uses the original
XGetInputFocus method. All you need to know is that if the debug output
keeps showing the the window title as null, then toggle this option and
it may work correctly. Please report back to me on window managers and
whether the force option was required or not to work correctly with
imwheel. This method was sparked by Brian Craft <bcboy@cisco.com>.
Fixed a bug where if the winid was not being copied into a correctly sized
space, therefore causing segfaults when reading an rc like this...
".*\.[pP][dD][fF]"
Alt_L,Up,Up
finished configure "make dist" handling of unselected stuff.
seems to work well for all beta testers (at least 5 people wrote back)
pre4
fixed @Exclude (tested myself of course, waiting for feedback)
fixed PIDFILE crap from making the configure.in wrongly...
hey - I'm still learning autoconfig and friends... ;)
pre3
configure (full autoconf, automake, autoheader dealie)
updated gpm to version 1.19.0
added -v and --version option, for just the version header of the help
there will be NO MORE none gpm releases until gpm includes my patch in the
main distribution! configure doesn't play nice doing dual distros...
pre2
updated gpm to version 1.18.1
pre1
tfxmms - in gpm - the Serial Trackman FX marble button 4 as stick motion
toggle and complete mouse driver.
sensitivity option in imwheel - uses a summation of motion after
thresholding, to determine when to go!
@Repeat command (like @Exclude) in imwheelrc files - resends the button to X
this may not work for non-gpm wheelfifo users, who should rather use
@Exclude for now.
minor code cleanups - no bugfixes there! just making code better looking.
-------------------------------------------------------------------------------
0.9.7
Added --force option to force usage of event data instead of looking for
the focused window using XGetInputFocus. This may work better for some
window managers than others. In fvwm2 I do not use the force option,
whereas in window maker it may be mandatory. I know it's silly but when
you use the force option you are using the ICCCM method of grabbing the
current client window, whereas the deffault operation uses the original
XGetInputFocus method. All you need to know is that if the debug output
keeps showing the the window title as null, then toggle this option and
it may work correctly. Please report back to me on window managers and
whether the force option was required or not to work correctly with
imwheel. This method was sparked by Brian Craft <bcboy@cisco.com>.
Fixed a bug where if the winid was not being copied into a correctly sized
space, therefore causing segfaults when reading an rc like this...
".*\.[pP][dD][fF]"
Alt_L,Up,Up
Note that the window match string is longer than the keydef line. This
is when this bug would rear it's ugly head. It was a dead-in-the-head
bug that I'm sorry I ever caused to anyone who suffered while making a
customized rc file. I'm just amazed that I never ran into it in my time!
This bug was noted by Karoly Segesdi <vrm@scene-hu.com> if not
by others as well! (But he got me closest to finding the problem by
giving me an imwheelrc file that consistently caused a segfault)
Fixed a bug where imwheel whould exit when the fifo it was reading for the
wheel-fifo method was closed and reopened and then written from the other
side (from gpm or jam restarting).
Upgraded to gpm-1.18.0
Added marblefx support to gpm from Ric Klaren <klaren@cs.utwente.nl>,
untested as I don't have a marblefx. It looked good though!
Added Primax CyberNavigator [1] mouse to gpm from Alexios Chouchoulas
<alexios@vennea.demon.co.uk>. This is also untested for the same reason.
Added left handers Method#1 xmodmap config sent in from
Marc-Aurèle DARCHE <ma.darche@stellarx.com> to README and manpage.
And of course other misc. bugfixes, etc...that I've forgotten over time!
Note that the window match string is longer than the keydef line. This
is when this bug would rear it's ugly head. It was a dead-in-the-head
bug that I'm sorry I ever caused to anyone who suffered while making a
customized rc file. I'm just amazed that I never ran into it in my time!
This bug was noted by Karoly Segesdi <vrm@scene-hu.com> if not
by others as well! (But he got me closest to finding the problem by
giving me an imwheelrc file that consistently caused a segfault)
Fixed a bug where imwheel whould exit when the fifo it was reading for the
wheel-fifo method was closed and reopened and then written from the other
side (from gpm or jam restarting).
Upgraded to gpm-1.18.0
Added marblefx support to gpm from Ric Klaren <klaren@cs.utwente.nl>,
untested as I don't have a marblefx. It looked good though!
Added Primax CyberNavigator [1] mouse to gpm from Alexios Chouchoulas
<alexios@vennea.demon.co.uk>. This is also untested for the same reason.
Added left handers Method#1 xmodmap config sent in from
Marc-Aurèle DARCHE <ma.darche@stellarx.com> to README and manpage.
And of course other misc. bugfixes, etc...that I've forgotten over time!
--------------------------------------------------------------------------------
0.9.6
Initial support & drivers (gpm & imwheel) for IBM ScrollPoint Mouse
It is the mm+ps2 mouse type in gpm
the IBM ScrollPoint PS/2 mouse uses the MouseManPlus Protocol in XFree86
Support for up and down only for now...I must do a bit before other
directions are considered! (for stick type mice thingers.)
Pressing continuously will only result in one action. Release and press
again to scroll another notch. (the regular scroll events come in too
fast to be useful yet...)
THANKS!!!!! TO Felix Klock for the ScrollPoint Mouse he MAILED ME!!!
This driver is due to the initiative and sacrifice of a few bucks to get
support for a mouse this guy loves...and from what I've read on newgroups
many others also love! Well you owe the possibility of this driver to
Bryan for mailing me a mouse to be able to actually hack on the real
thing. Now continued support is guaranteed as well!
mail your appreciation to Felix S Klock at pnkfelix@mit.edu
He paid $23 or so for the mouse plus shipping to me (with normal 32cent
stamps no less...due to the effects of the 1cent price increase in stamps
I'm sure he was kinda glad to be rid of some of his 32cent stash to make
room for the 33cent ones!) Please consider sending him a dollar for his
effort since you are reaping the rewards... (and hey send me a dollar! :)
Added mdump, a program to dump the mouse port, and anything else you want
with a bitwise breakdown and a 3 byte per line dump. Other interpretation
is added for assumptions of what may be happening with mouse motions.
I used this program to create the mm+ps2 driver for gpm. It is not
installed by 'make install' so copy it yourself if you're interested.
the first arg on the command-line is taken to be the path of the mouse
device, which defaults to /dev/mouse. The second arg is how many bytes
to dump per grab. This defaults to 3 but 4 is another common value to try.
The third arg is not parsed but if present the first byte will be bit
dumped like the rest of the bytes in a packet.
You can also use this program to see the MHz speed for your mouse!
e.g.: mdump /dev/psaux 4 1 (for imps2 mouse device type)
mdump /dev/psaux 3 1 (for ps2/mouseman+ mouse device types)
Added to mouse-mode setup programs for the intellimouse and mouseman plus.
running these programs sends the right control codes to the mouse to
activate the intellimouse or mouseman plus protocol. The intellimouse and
mouseman plus both default to ps2 mode. the intellimouse and mouse man
plus both support the imps2 protocol. some mouse man plus type mice may
not be intellimouse capable, but the IBM scrollpoint was capable of this
mode, restricting it to up and down wheel emulation on it's stick. To
reset mouse run setps2. setimps2 is for the intellimouse protocol.
setmmplus is for the mouseman plus protocol. us getmdt to see the mouse's
reponse to the mouse device type probe. The codes I've seen are as
follows (<nn> is in hex format):
<00> mouseman plus (3 byte packets)
<03> intellimouse (4 byte packets)
<00> plain ps2 (3 byte packets)
when mouse is this, <AA> is received also after an <FA>
Any <FA> type codes are ignored mouse responses, usually confirmation of
the mouse receiving the controls the program sends it.
All these debugging programs default to the /dev/mouse device node unless a
path is passed in as the first argument.
None of the debugging programs have been tested with serial mice.
Fixed a missed regrab of the mouse after the configurator is closed.
Pid file is only used if user is using the /dev/gpmwheel FIFO. (Method #2)
Killing pids according to pidfile now checks to make sure the process is
truely an imwheel process, and only kills it if it is an imwheel process.
It also will only kill if using the /dev/gpmwheel FIFO.
Imwheel funtions correctly on multiple displays by using the -display
option or setting the DISPLAY environment variable (use export/setenv!)
Thanks to Arnd Bergmann <arnd@uni.de> we now have gpm support for the
Knopex Wineasy 4D mouse. And due to his patches and them prompting me to
update lotsa code we have support for intellimouse serial, as well as
support for sideways actions. This is only available through the FIFO.
You must use Method#2 (a variant of which that is) that uses the wheel
FIFO as set up by gpm. XWindows cannot handle the 7 buttons correctly,
it can only handle 5, which means only up and down will work with
Method #1!
Added FreeBSD support, see the FREEBSD file for more. It requires no
changes to compile and install.
Added threshhold option for stick users of method #2 (it requires gpm)
Use the -t or --threshhold option to set a threshhold from 0-7.
The default is 2, it works well.
Added no-middle-button option (-n) to gpm. Use this if you have trouble
with unintentional middle button clicks while wheeling/sticking, and you
would rather use Emulate3Buttons chording in X (XFree86 at least...)
Added conditional compile for gpm-imwheel directory.
Added a full manpage.
--------------------------------------------------------------------------------
Initial support & drivers (gpm & imwheel) for IBM ScrollPoint Mouse
It is the mm+ps2 mouse type in gpm
the IBM ScrollPoint PS/2 mouse uses the MouseManPlus Protocol in XFree86
Support for up and down only for now...I must do a bit before other
directions are considered! (for stick type mice thingers.)
Pressing continuously will only result in one action. Release and press
again to scroll another notch. (the regular scroll events come in too
fast to be useful yet...)
THANKS!!!!! TO Felix Klock for the ScrollPoint Mouse he MAILED ME!!!
This driver is due to the initiative and sacrifice of a few bucks to get
support for a mouse this guy loves...and from what I've read on newgroups
many others also love! Well you owe the possibility of this driver to
Bryan for mailing me a mouse to be able to actually hack on the real
thing. Now continued support is guaranteed as well!
mail your appreciation to Felix S Klock at pnkfelix@mit.edu
He paid $23 or so for the mouse plus shipping to me (with normal 32cent
stamps no less...due to the effects of the 1cent price increase in stamps
I'm sure he was kinda glad to be rid of some of his 32cent stash to make
room for the 33cent ones!) Please consider sending him a dollar for his
effort since you are reaping the rewards... (and hey send me a dollar! :)
Added mdump, a program to dump the mouse port, and anything else you want
with a bitwise breakdown and a 3 byte per line dump. Other interpretation
is added for assumptions of what may be happening with mouse motions.
I used this program to create the mm+ps2 driver for gpm. It is not
installed by 'make install' so copy it yourself if you're interested.
the first arg on the command-line is taken to be the path of the mouse
device, which defaults to /dev/mouse. The second arg is how many bytes
to dump per grab. This defaults to 3 but 4 is another common value to try.
The third arg is not parsed but if present the first byte will be bit
dumped like the rest of the bytes in a packet.
You can also use this program to see the MHz speed for your mouse!
e.g.: mdump /dev/psaux 4 1 (for imps2 mouse device type)
mdump /dev/psaux 3 1 (for ps2/mouseman+ mouse device types)
Added to mouse-mode setup programs for the intellimouse and mouseman plus.
running these programs sends the right control codes to the mouse to
activate the intellimouse or mouseman plus protocol. The intellimouse and
mouseman plus both default to ps2 mode. the intellimouse and mouse man
plus both support the imps2 protocol. some mouse man plus type mice may
not be intellimouse capable, but the IBM scrollpoint was capable of this
mode, restricting it to up and down wheel emulation on it's stick. To
reset mouse run setps2. setimps2 is for the intellimouse protocol.
setmmplus is for the mouseman plus protocol. us getmdt to see the mouse's
reponse to the mouse device type probe. The codes I've seen are as
follows (<nn> is in hex format):
<00> mouseman plus (3 byte packets)
<03> intellimouse (4 byte packets)
<00> plain ps2 (3 byte packets)
when mouse is this, <AA> is received also after an <FA>
Any <FA> type codes are ignored mouse responses, usually confirmation of
the mouse receiving the controls the program sends it.
All these debugging programs default to the /dev/mouse device node unless a
path is passed in as the first argument.
None of the debugging programs have been tested with serial mice.
Fixed a missed regrab of the mouse after the configurator is closed.
Pid file is only used if user is using the /dev/gpmwheel FIFO. (Method #2)
Killing pids according to pidfile now checks to make sure the process is
truely an imwheel process, and only kills it if it is an imwheel process.
It also will only kill if using the /dev/gpmwheel FIFO.
Imwheel funtions correctly on multiple displays by using the -display
option or setting the DISPLAY environment variable (use export/setenv!)
Thanks to Arnd Bergmann <arnd@uni.de> we now have gpm support for the
Knopex Wineasy 4D mouse. And due to his patches and them prompting me to
update lotsa code we have support for intellimouse serial, as well as
support for sideways actions. This is only available through the FIFO.
You must use Method#2 (a variant of which that is) that uses the wheel
FIFO as set up by gpm. XWindows cannot handle the 7 buttons correctly,
it can only handle 5, which means only up and down will work with
Method #1!
Added FreeBSD support, see the FREEBSD file for more. It requires no
changes to compile and install.
Added threshhold option for stick users of method #2 (it requires gpm)
Use the -t or --threshhold option to set a threshhold from 0-7.
The default is 2, it works well.
Added no-middle-button option (-n) to gpm. Use this if you have trouble
with unintentional middle button clicks while wheeling/sticking, and you
would rather use Emulate3Buttons chording in X (XFree86 at least...)
Added conditional compile for gpm-imwheel directory.
Added a full manpage.
0.9.5
Finished off configure dialog to spec, it's just a helper, not an editor!
Updated gpm to version 1.16.0, now sticking with stable versions.
- hopefully I'll get a patch and send it to the gpm team for some
integration, thus releasing me from this task...
- the gpm library is still untested in the console...should work though!
see note in version 0.8 below.
Added suid option to "make install" for users other than root to be able
to run with a pid file. The default action is yes if nothing is entered
at the prompt. I felt that 'yes' had to be the default action to avoid a
bunch of newbie email. This doesn't allow users to install imwheel as
root, and it's not a security risk. this is for sys-admins, or at least
root users to be able to get all their users using the pid file for the
daemon and also for them to be able to kill off old daemons started by
other users before.
Added -p option for no pidfile stuff, be careful though, this allows any
user to start imwheel regardless of a previous imwheel process!
Added -D for debug output anytime (no recompiling for those bug reports!)
- use the -d option to avoid backgrounding the process!
Fixed silly free(NULL) crap...(heh, betchyall loved that one!)
added rxvt stuff to imwheelrc file.
added EMACS file (an email from an avid wheeler! oh, and it's about emacs!)
--------------------------------------------------------------------------------
Finished off configure dialog to spec, it's just a helper, not an editor!
Updated gpm to version 1.16.0, now sticking with stable versions.
- hopefully I'll get a patch and send it to the gpm team for some
integration, thus releasing me from this task...
- the gpm library is still untested in the console...should work though!
see note in version 0.8 below.
Added suid option to "make install" for users other than root to be able
to run with a pid file. The default action is yes if nothing is entered
at the prompt. I felt that 'yes' had to be the default action to avoid a
bunch of newbie email. This doesn't allow users to install imwheel as
root, and it's not a security risk. this is for sys-admins, or at least
root users to be able to get all their users using the pid file for the
daemon and also for them to be able to kill off old daemons started by
other users before.
Added -p option for no pidfile stuff, be careful though, this allows any
user to start imwheel regardless of a previous imwheel process!
Added -D for debug output anytime (no recompiling for those bug reports!)
- use the -d option to avoid backgrounding the process!
Fixed silly free(NULL) crap...(heh, betchyall loved that one!)
added rxvt stuff to imwheelrc file.
added EMACS file (an email from an avid wheeler! oh, and it's about emacs!)
0.9:
Configuration helper almost done. (still need to sample wheel actions!)
- use up,down,up in the root window to activate!
- all functions in window are fully functional.
- restart does restart imwheel and thus reread the rc files
- grab windows by clicking the snapshot and then on the desired window
- more to come!
More options and abilities:
- daemon mode
-d to NOT detach and daemonize!
- kill any existing imwheel
-k to kill any existing imwheel as a restart
- quit after rc files
-q, used best with -k to kill any imwheel process and quit
More configuration options:
- added 2 separately configurable delays
fixes netscape dropping keys! (it must queue only one key...)
first delay is the delay between repetitions (keyup->keydown)
second delay is the delay between pressing and releasing
(keydown->keyup)
see the new imwheelrc for the netscape values that work for me!
--------------------------------------------------------------------------------
Configuration helper almost done. (still need to sample wheel actions!)
- use up,down,up in the root window to activate!
- all functions in window are fully functional.
- restart does restart imwheel and thus reread the rc files
- grab windows by clicking the snapshot and then on the desired window
- more to come!
More options and abilities:
- daemon mode
-d to NOT detach and daemonize!
- kill any existing imwheel
-k to kill any existing imwheel as a restart
- quit after rc files
-q, used best with -k to kill any imwheel process and quit
More configuration options:
- added 2 separately configurable delays
fixes netscape dropping keys! (it must queue only one key...)
first delay is the delay between repetitions (keyup->keydown)
second delay is the delay between pressing and releasing
(keydown->keyup)
see the new imwheelrc for the netscape values that work for me!
0.8:
Modified gpm 1.15 beta2 for wheel support. I dunno about the gpm user
library and wheel stuff, but it may work with GPM_B_UP and GPM_B_DOWN.
use the -W (and -w for non-IM mice) for use with "imwheel --wheel-fifo"
IMWheel interfaces with /dev/gpmwheel, use the "--wheel-fifo" option, or
"-W /dev/gpmwheel", the -- option has /dev/gpmwheel as the default.
Don't forget to reconfigure your mouse pointer in XConfig...
--------------------------------------------------------------------------------
Modified gpm 1.15 beta2 for wheel support. I dunno about the gpm user
library and wheel stuff, but it may work with GPM_B_UP and GPM_B_DOWN.
use the -W (and -w for non-IM mice) for use with "imwheel --wheel-fifo"
IMWheel interfaces with /dev/gpmwheel, use the "--wheel-fifo" option, or
"-W /dev/gpmwheel", the -- option has /dev/gpmwheel as the default.
Don't forget to reconfigure your mouse pointer in XConfig...
0.7:
No segfaults! Thank God! New functionality!
New Command structure started, and Exclude command added.
- Exclude ungrabs mouse for selected windows.
More commands may now be added as needed!
XV's window grabber was dying because it needed to grab all buttons...
- use the line "@Exclude" in an "xv grab" window section. See imwheelrc
--------------------------------------------------------------------------------
No segfaults! Thank God! New functionality!
New Command structure started, and Exclude command added.
- Exclude ungrabs mouse for selected windows.
More commands may now be added as needed!
XV's window grabber was dying because it needed to grab all buttons...
- use the line "@Exclude" in an "xv grab" window section. See imwheelrc
0.6:
Argh...another bugfix for segfaults...now you don't need an rc file.
--------------------------------------------------------------------------------
Argh...another bugfix for segfaults...now you don't need an rc file.
0.5:
Argh...a bugfix for segfaults...this time it doesn't care about windows that
don't have either title, resource, or class names set (leaving them NULL)
Thanks for all the positive response and encouragement.
Multi-rep scrolling actions can cause less then you expected to happen.
- Be patient, it works most of the time. There is no way I can find to fix
this, so help may be needed! You will find XSync in use, but I believe
that has a minimal effectiveness...makes it work better than before though
Moving out of windows and losing focus may cause weird things to happen!
- Press and release all modifier keys (alt,ctrl,shift,etc.) to reset input.
--------------------------------------------------------------------------------
Argh...a bugfix for segfaults...this time it doesn't care about windows that
don't have either title, resource, or class names set (leaving them NULL)
Thanks for all the positive response and encouragement.
Multi-rep scrolling actions can cause less then you expected to happen.
- Be patient, it works most of the time. There is no way I can find to fix
this, so help may be needed! You will find XSync in use, but I believe
that has a minimal effectiveness...makes it work better than before though
Moving out of windows and losing focus may cause weird things to happen!
- Press and release all modifier keys (alt,ctrl,shift,etc.) to reset input.
0.4:
finally! Config file support is added, completing the keyboard config setup.
/etc/imwheelrc and/or $HOME/.imwheelrc files are used for configuration.
built-ins are still available for unconfigured windows.
anybody want to make a client to make configuration a breeze? Contact me!
all clients that have keyboard input can be used with configuration!
no new options.
more code moving, now two files, whopee you say! but it made development
easier!
got reports that KDE compatabilty has been achieved by v0.3
--------------------------------------------------------------------------------
finally! Config file support is added, completing the keyboard config setup.
/etc/imwheelrc and/or $HOME/.imwheelrc files are used for configuration.
built-ins are still available for unconfigured windows.
anybody want to make a client to make configuration a breeze? Contact me!
all clients that have keyboard input can be used with configuration!
no new options.
more code moving, now two files, whopee you say! but it made development
easier!
got reports that KDE compatabilty has been achieved by v0.3
0.3:
added options engine.
added -f or --flip-buttons option to flip behavior, useful for 4 button mice
changed engine, now using XTest extension instead of XSendEvent crap.
- still grabbing buttons which may be part of the incompatibility with KDE.
added other mice that should work as well, according to XFree86 docs.
added a grab reset sequence, but it seems to be a nop...
- run imwheel again if it dies and leaves your server going funky...
cleaned out junk from old engine, new code is cleaner...I think so anyways!
XTest extension now required (not checked in code...I may do that)
More clients work than ever!
Reps for sideways motion (alt-wheel actions) now work in netscape...
- only when there are sideways scrollbars
- May work everywhere, i dunno!
- It works in all tested clients that use cursor left/right keys for actions
--------------------------------------------------------------------------------
added options engine.
added -f or --flip-buttons option to flip behavior, useful for 4 button mice
changed engine, now using XTest extension instead of XSendEvent crap.
- still grabbing buttons which may be part of the incompatibility with KDE.
added other mice that should work as well, according to XFree86 docs.
added a grab reset sequence, but it seems to be a nop...
- run imwheel again if it dies and leaves your server going funky...
cleaned out junk from old engine, new code is cleaner...I think so anyways!
XTest extension now required (not checked in code...I may do that)
More clients work than ever!
Reps for sideways motion (alt-wheel actions) now work in netscape...
- only when there are sideways scrollbars
- May work everywhere, i dunno!
- It works in all tested clients that use cursor left/right keys for actions
0.2:
cleaned up exit on bad display opening.
changed library directory to X11R6 instead of X11
received confirmation of compatability with Logitech MouseMan+ from:
"Markus Martensson" <mortis@acc.umu.se>
modifier combinations of Shift,Control, and Alt(Meta) changes behavior.
repetition of keystrokes
still no setup files...
still no change in clients...
--------------------------------------------------------------------------------
cleaned up exit on bad display opening.
changed library directory to X11R6 instead of X11
received confirmation of compatability with Logitech MouseMan+ from:
"Markus Martensson" <mortis@acc.umu.se>
modifier combinations of Shift,Control, and Alt(Meta) changes behavior.
repetition of keystrokes
still no setup files...
still no change in clients...
0.1:
first release
streamlined version, unused code is compiled out.
no setup, hardcoded page up and page down!
no exclusion for specific windows either.
first release
streamlined version, unused code is compiled out.
no setup, hardcoded page up and page down!
no exclusion for specific windows either.

View File

@ -1,4 +1,4 @@
SUBDIRS=jax @getopt@ @mdetect@ @gpm_imwheel@
SUBDIRS=jax getopt @mdetect@ @gpm_imwheel@
bin_PROGRAMS=imwheel
@ -22,19 +22,6 @@ dist-hook:
find $(distdir) -name CVS -exec rm -rvf '{}' ';' ; \
done
ETCDIR=/etc/X11/imwheel
install-exec-hook:
if SUID
progname=$(DESTDIR)$(bindir)/`echo imwheel|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'` ; \
chown @suid@ $$progname ; \
chmod u+s $$progname
endif
$(mkinstalldirs) $(ETCDIR)
-[ -f /etc/imwheelrc ] && mv /etc/imwheelrc $(ETCDIR)/imwheelrc || true
-[ -f /etc/X11/imwheelrc ] && mv /etc/X11/imwheelrc $(ETCDIR)/imwheelrc || true
-[ -f $(ETCDIR)/imwheelrc ] && install -m 644 imwheelrc $(ETCDIR)/imwheelrc.new || install -m 644 imwheelrc $(ETCDIR)/imwheelrc
extras: $(EXTRA_PROGRAMS)
if NO_GPM_DOC

File diff suppressed because it is too large Load Diff

1289
aclocal.m4 vendored

File diff suppressed because it is too large Load Diff

View File

@ -24,15 +24,9 @@
/* Define to 1 if you have the `X11' library (-lX11). */
#undef HAVE_LIBX11
/* Define to 1 if you have the `Xext' library (-lXext). */
#undef HAVE_LIBXEXT
/* Define to 1 if you have the `Xmu' library (-lXmu). */
#undef HAVE_LIBXMU
/* Define to 1 if you have the `Xt' library (-lXt). */
#undef HAVE_LIBXT
/* Define to 1 if you have the `Xtst' library (-lXtst). */
#undef HAVE_LIBXTST
@ -93,6 +87,9 @@
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION

9434
configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -321,8 +321,6 @@ LIBS=
AC_CHECK_LIB(X11, XCreateWindow,, [
AC_MSG_ERROR([IMWheel depends on the X11 libraries!])
], $LIBS_saved $X_LIBS)
AC_CHECK_LIB(Xext, XextAddDisplay,,,$LIBS_saved $X_LIBS)
AC_CHECK_LIB(Xt, XtFree,,,$LIBS_saved $X_LIBS)
AC_CHECK_LIB(Xmu, XmuInternAtom,,,$LIBS_saved $X_LIBS)
AC_CHECK_LIB(Xtst, XTestFakeDeviceKeyEvent,, [
AC_MSG_ERROR([IMWheel depends on the XTest extention!])

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9 from Makefile.am.
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# Copyright (C) 1994-2013 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.
@ -14,17 +14,57 @@
@SET_MAKE@
SOURCES = $(libgetopt_a_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
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
@ -37,7 +77,8 @@ NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = getopt
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@ -45,29 +86,76 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
AR = ar
ARFLAGS = cru
AM_V_AR = $(am__v_AR_@AM_V@)
am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
am__v_AR_0 = @echo " AR " $@;
am__v_AR_1 =
libgetopt_a_AR = $(AR) $(ARFLAGS)
libgetopt_a_LIBADD =
am_libgetopt_a_OBJECTS = getopt.$(OBJEXT) getopt1.$(OBJEXT)
libgetopt_a_OBJECTS = $(am_libgetopt_a_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libgetopt_a_SOURCES)
DIST_SOURCES = $(libgetopt_a_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
@ -88,7 +176,9 @@ EXEEXT = @EXEEXT@
GETOPT_INCS = @GETOPT_INCS@
GETOPT_LIBS = @GETOPT_LIBS@
GPM_DIR = @GPM_DIR@
GREP = @GREP@
HAVE_GPM_SRC = @HAVE_GPM_SRC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -98,32 +188,31 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
NO_GPM_DOC_FALSE = @NO_GPM_DOC_FALSE@
NO_GPM_DOC_TRUE = @NO_GPM_DOC_TRUE@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
SUID_FALSE = @SUID_FALSE@
SUID_TRUE = @SUID_TRUE@
VERSION = @VERSION@
XMKMF = @XMKMF@
X_CFLAGS = @X_CFLAGS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@ -131,7 +220,11 @@ am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
extras = @extras@
extras_dist = @extras_dist@
@ -140,11 +233,13 @@ getopt_dist = @getopt_dist@
gpm_dist = @gpm_dist@
gpm_imwheel = @gpm_imwheel@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mdetect = @mdetect@
@ -153,14 +248,20 @@ mdump = @mdump@
mdump_dist = @mdump_dist@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
suid = @suid@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CFLAGS = -O6 -s -Wall
noinst_LIBRARIES = libgetopt.a
libgetopt_a_SOURCES = getopt.c getopt1.c getopt.h
@ -173,14 +274,14 @@ $(srcdir)/Makefile.in: $(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; \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu getopt/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu getopt/Makefile
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu getopt/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu getopt/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@ -198,13 +299,15 @@ $(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
libgetopt.a: $(libgetopt_a_OBJECTS) $(libgetopt_a_DEPENDENCIES)
-rm -f libgetopt.a
$(libgetopt_a_AR) libgetopt.a $(libgetopt_a_OBJECTS) $(libgetopt_a_LIBADD)
$(RANLIB) libgetopt.a
libgetopt.a: $(libgetopt_a_OBJECTS) $(libgetopt_a_DEPENDENCIES) $(EXTRA_libgetopt_a_DEPENDENCIES)
$(AM_V_at)-rm -f libgetopt.a
$(AM_V_AR)$(libgetopt_a_AR) libgetopt.a $(libgetopt_a_OBJECTS) $(libgetopt_a_LIBADD)
$(AM_V_at)$(RANLIB) libgetopt.a
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@ -216,92 +319,98 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
uninstall-info-am:
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
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; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
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; \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@ -319,16 +428,22 @@ install-am: all-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
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -349,18 +464,38 @@ dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -380,18 +515,23 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
uninstall-am:
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES ctags distclean distclean-compile \
distclean-generic distclean-tags 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 \
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \
distclean-compile distclean-generic distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-info-am
mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
uninstall-am
# 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.

447
imwheel.1
View File

@ -1,17 +1,15 @@
.TH IMWheel 1 "September 8 2002" "Version 1.0.0"
.TH IMWheel 1 "January 28 2008" "Version 3.0.0"
.UC 1
.SH "NAME"
imwheel \- a mouse wheel and stick interpreter for X Windows
imwheel \- a mouse wheel and button interpreter for X Windows
.SH "SYNOPSIS"
\fBimwheel\fP [ \fIoptions\fP ]
.br
.SH "DESCRIPTION"
\fIIMWheel\fP is a universal mouse wheel and mouse stick translator for the X
Windows System. Using either a special version of gpm and it's /dev/gpmwheel
FIFO, or the support for a ZAxis on the mouse built into some servers, such as
XFree86. Utilizing the input from gpm or X Windows, imwheel translates mouse
wheel and mouse stick actions into keyboard events using the XTest extension to
X. Use \fIxdpyinfo\fP for information on the supported extensions in your X
\fIIMWheel\fP is a universal mouse wheel and button translator for the X
Windows System. Utilizing the input from X Windows, imwheel translates mouse
wheel and mouse button actions into keyboard events using the XTest extension to
X. Use \fIxdpyinfo\fP for information on the supported extensions in your X
server.
.LP
.SH "COMMAND LINE OPTIONS"
@ -20,47 +18,53 @@ Available command line options are as follows:
\fB-4, --flip-buttons\fP
Flips the mouse buttons so that 4 is 5 and 5 is 4, reversing
the Up and Down actions. This would make 4 buttons somewhat useful!
This is the similar to using "-b 54678", see the \fB-b\fP option.
This is the similar to using '-b "5 4 6 7 8"'; see the \fB-b\fP option.
See also xmodmap(1).
.TP
\fB-b, --buttons\fP \fIbutton-spec\fP
Remap buttons in \fIbutton-spec\fP to interpreted wheel/thumb input.
Also limits the button grab to the specified buttons when using the ZAxis method.
(see "X WINDOWS ZAXIS METHOD" below)
the \fIbutton-spec\fP may specify any of up to five buttons.
the \fIbutton-spec\fP is decoded in the following order for wheel input:
Remap buttons in \fIbutton-spec\fP to interpreted wheel/button input.
Also limits the button grab to the specified buttons.
The \fIbutton-spec\fP must be surrounded by quotes.
Each button number must be separated by a space.
The \fIbutton-spec\fP is decoded in the following order for wheel input:
.RS
.RS
.nf
Index Interpreted As Button Number
Index Interpreted As Button Number Name in imwheelrc
.br
1 Wheel Up 4
1 Wheel Up 4 Up
.br
2 Wheel Down 5
2 Wheel Down 5 Down
.br
3 Wheel Left 6
3 Wheel Left 6 Left
.br
4 Wheel Right 7
4 Wheel Right 7 Right
.br
5 Thumb Button 1 8
5 Thumb Button 1 8 Thumb1
.br
6 Thumb Button 2 9
6 Thumb Button 2 9 Thumb2
.br
7 Extra Button 1 10 ExtBt7
.br
8 Extra Button 2 11 ExtBt8
.br
etc.
.fi
.RE
A \fIbutton-spec\fP of "45" will limit the grabbed buttons for only wheel up and down.
.br
A \fIbutton-spec\fP of "67" may be useful to use actual buttons 6 and 7 as wheel up
and down, and limit the grab to only those two buttons.
A \fIbutton-spec\fP of "4 5" will limit the grabbed buttons to only wheel up and down.
.br
A \fIbutton-spec\fP of "0" turns off any defined mapping, thus allowing for skips in
the \fIbutton-spec\fP for something that doesn't exist on your mouse.
.br
A \fIbutton-spec\fP of "45006" may be for normal wheel up/down and a thumb button 1, but
A \fIbutton-spec\fP of "4 5 0 0 8" may be for normal wheel up/down and a thumb button 1, but
no horizontal wheel axis.
.br
The default \fIbutton-spec\fP is "456789".
The default \fIbutton-spec\fP is "4 5 6 7 8 9", but you may want or need to customize this
yourself. If you want to ignore the mouse wheel on regular mice, make sure to start the
\fIbutton-spec\fP with "0 0 0 0 ...", thereby skipping over the vertical and horizontal
axes of the wheel (whether or not the horizontal axis exists or is used).
.br
See also xmodmap(1).
.RE
@ -76,159 +80,49 @@ suggest using the \fB-d\fP option to prevent imwheel from detaching from the
controlling terminal.
.TP
\fB-d, --detach\fP
Actually this does the opposite of it's name, it prevents detachment from the
controlling terminal. (no daemon...) Control-C stops, etc...
Actually this does the opposite of its name, it prevents detachment from the
controlling terminal (no daemon). Control-C stops, etc...
.TP
\fB-f, --focus\fP
Forces the X event subwindow to be used instead of the original hack that would
replace the subwindow in the X event with a probed focus query (XGetInputFocus).
This should fix some compatability problems with some window managers, such as
window maker, and perhaps enlightenment. If nothing seems to be working right,
window maker, and perhaps enlightenment. If nothing seems to be working right,
try toggling this on or off...
.TP
\fB-g, --focus-events\fP
Disable the use of focus events for button grabs. If your \fB@Excluded\fP windows
Disable the use of focus events for button grabs. If your \fB@Excluded\fP windows
are not regrabbing the mouse buttons when exited, try toggling this on or off...
.TP
\fB-h, --help\fP
Short help on options plus version/author info.
.TP
\fB-k, --kill\fP
Attempts to kill old imwheel (useful only for \fB--wheel-fifo\fP method.)
Pidfile must be created for this to work (no \fB-p\fP or \fB--pid\fP option on
the previous imwheel invocation). Process IDs are
tested using /proc/${pid}/status Name: field ?= imwheel.
Attempts to kill old imwheel.
Process IDs are tested using /proc/${pid}/status Name: field ?= imwheel.
If /proc is not mounted then this fails everytime!
Otherwise, this ensures that the wrong process is not killed.
.TP
\fB-p, --pid\fP
Don't write a pid file for gpmwheel FIFO method. This is the only
method that uses the pid file. XGrab doesn't need it, so it just
issues a warning about starting multiple imwheels on the same
display. Some people really prefer this, especially when they are
not using a SUID root imwheel executable.
.TP
\fB-q, --quit\fP
Quit imwheel before entering event loop. Usful in killing an
imwheel running in gpmwheel FIFO mode after exiting XWindows,
if you're using pid files that is.
Quit imwheel before entering event loop.
.br
Example: `imwheel -k -q' = kill and quit (option order doesn't matter)
.TP
\fB-s, --sensitivity\fP \fIsum-min\fP
(Stick mice, Wheel FIFO method only)
.br
like \fB-t\fP only this sets a minimum total amount of movment of the
stick or marble, before any action is taken. This works good
with the Marble type devices.
This should be a multiple of the threshhold as given by the \fB-t\fP option.
The default is 0, meaning that there is no sensitivity testing,
all input spawns an event.
See the \fB-t\fP option also.
(see "STICK SENSITIVITY SETTINGS" below)
.TP
\fB-t, --threshhold\fP \fIminimum-pressure\fP
Used with gpm only and then only with recognized stick mice.
stick mice send a pressure value ranging from 0(no pressure) to
7(hard push). This sets the minimum required pressure for
input to be registered. Setting it to zero will cause realtime sticking,
which is usually too much action for X to keep up. (max rate i saw was
100 events a second!). Once input is registered, it is summed up per axis,
and then it must equal or exceed the sensitivity setting to pass as an input.
See the \fB-s\fP option also, for sensitivity.
.br
The default is 2, to avoid slight presses on the 90-degree direction of the
intended while still getting to the intended direction. Setting this to 7 is
insane, because it requires the user to push as hard as possible everytime they
want something to happen! However it may not be so insane for people using
trackballs for input, as they may spin much faster per sample...
.br
(see "STICK SENSITIVITY SETTINGS" below)
.TP
\fB-W, --wheel-fifo\fP \fIfifo\fP
Use the gpm/jamd wheel fifo instead of XGrabMouse. See \fBGPM/JAMD WHEEL FIFO METHOD\fP
section. This method allows only one X display to be used. This is required
for the gpm method to work. This method only works with the imwheel version
of gpm and with jamd. To find out if you are running the imwheel version of gpm
use the following command and look for "(imwheel)" in the title:
.RS
.RS
.nf
gpm -v
.fi
.RE
\fIfifo\fP names the named pipe (FIFO) created by gpm. It defaults to
"/dev/gpmwheel" (for \fB--wheel-fifo\fP only). The FIFO must exist before
running imwheel in this mode. using jamd requires you to name the correct fifo
because it doesn't use /dev/gpmwheel, but rather one of the /dev/jam_imwheel:0.0
named fifos created by jamd's imwheel module.
.br
\fB@Exclude\fP commands in the rc file are unused in this mode.
.RE
.TP
\fB-X, --display\fP \fIdisplay\fP
Use XServer at a specified \fIdisplay\fP in standard X form.
Using this option is usful for multiple displays in the X Window ZAxis Method.
.TP
\fB-x, --transpose\fP
This swaps the X and Y axis of movement for stick input from a wheel-fifo.
Using this option is usful for multiple displays.
.LP
.SH "X WINDOWS ZAXIS METHOD"
This method is the only method that works with multiple X displays, using
multiple imwheels. Use multiple imwheels by either setting the DISPLAY
.SH "X WINDOWS"
Use multiple imwheels by either setting the DISPLAY
environment variable before running each imwheel, or use the \fB-X\fP or
\fB--display\fP options to specify a different display for each imwheel.
Running multiple imwheels on the same display is not recommended, but is
allowed, and may cause strange things to happen while using the stick or wheel.
allowed, and may cause strange things to happen while using the wheel or buttons.
.LP
Edit the XF86Config and add/edit the following lines in the
"Pointer"(XFree86 3.3) or
"InputDevice"(XFree86 4.x)
section:
.LP
1 axis (vertical wheel):
.RS
.nf
(XFree86 3.3)
.RS
Buttons 5
ZAxisMapping 4 5
.RE
(XFree86 4.x)
.RS
Option "Buttons" "5"
Option "ZAxisMapping" "4 5"
.RE
.fi
.RE
.LP
2 axis (1 stick or 2 perpendicular wheels):
.RS
.nf
(XFree86 3.3)
.RS
Buttons 7
ZAxisMapping 4 5 6 7
.RE
(XFree86 4.x)
.RS
Option "Buttons" "7"
Option "ZAxisMapping" "4 5 6 7"
.RE
.fi
.RE
.LP
The Buttons option may be greater than stated above if you have thumb
buttons, or other extras that qualify as buttons.
.LP
Make sure your Protocol is set to either "IMPS/2" for a PS/2 mouse
or for serial mice set it to "IntelliMouse" or "Auto".
This is for IntelliMouse compatible mice, other protocols may be required for other mice.
Then while running X Windows run imwheel \fIwithout\fP the \fB--wheel-fifo\fP
or \fB-W\fP options.
Edit your xorg.conf, and ensure that in the "InputDevice" section, your mouse
Protocol is set to "ExplorerPS/2" for a modern PS/2 or USB mouse, or
if not then "IMPS/2". For serial mice set it to "IntelliMouse" or "Auto".
This is for IntelliMouse compatible mice; other protocols may be required for other mice.
.LP
.B NOTE
.br
@ -239,105 +133,19 @@ mouse and/or mouse button grabs and that don't specify specific buttons to
grab. These clients fail when they try to grab the mouse because the buttons 4
and 5 are already grabbed by imwheel. XV is an example of a client that
requires these types of grabs to succeed. KDE clients use the ZAxis for their
own purposes. The supplied imwheelrc included and exclusion for XV already.
own purposes. The supplied imwheelrc includes an exclusion for XV already.
See the IMWheelRC section for more information.
.LP
Also pid files are not used for this method. Thus the \fB-p\fP and \fB--pid\fP
options have no effect, and are ignored.
.LP
.SH "GPM/JAMD WHEEL FIFO METHOD"
This method is REQUIRED for any X Windows server without wheel
mouse support built in. This method will currently support mice as supported
through gpm or jamd.
.LP
In the Pointer section of your XF86Config (or the equivalent configuration file
for your X server) change your mouse Protocol to be "MouseSystems"
(or the equivelant...), also change the Device file that the mouse is read from
to "/dev/gpmdata", then restart X Windows if it is running.
jamd will replicate to /dev/jam_ps2:0.0 or some other devices as well,
make sure to use the right X Mouse protocol in this case,
like the jamd_ps2 device is X mouse protocol PS/2,
and the jamd_imps2 device is X mouse protocol IMPS/2.
.LP
Before starting X Windows (re)start gpm with the \fB-W\fP option. Make sure
you are using a supported wheel or stick mouse as stated in the gpm man page.
.LP
After starting X Windows run imwheel as follows adding options as desired:
.LP
for gpm you can use the following option to imwheel
.LP
\fB--wheel-fifo\fP
.LP
jamd requires you specify the fifo name as one of the /dev/jamd_imwheel:0.0
named fifos. Run
.LP
\fBls -al /dev/jam_imwheel*\fP
.LP
to see what is available.
In this example I would use
.LP
\fB-W /dev/jam_imwheel:0.0\fP
.LP
as the option to imwheel.
.LP
I usually add the \fB-k\fP option to kill off any old imwheel processes left
over, as imwheel doesn't exit with the server, but rather it will only die if a
wheel or stick action occurs when an X server is not connected, such as when X
is dead or the DISPLAY environment variable is setup wrong, or the \fB-X\fP or
\fB--display\fP variables connected imwheel to a now defunct X server.
.LP
gpm or jamd, and/or imwheel can be restarted at any time, imwheel can sense when
gpm of jamd is not there, and gpm nor jamd doesn't give a hoot about imwheel
being up or not.
.LP
.B NOTE
.br
The @Exclude command has no bearing in this method, it is ignored. No Focus
change events are received in this method. Thus KDE and other clients that
support X based wheel events through the ZAxis are not going to work except
through normal imwheel keypress translation of wheel and stick actions.
.br
XV will function fine, as will any client that grabs the mouse and/or mouse
buttons. This mode doesn't use any grabs to function.
.LP
.SH "STICK SENSITIVITY SETTINGS"
The \fB-s\fP and \fB-t\fP options specify a sensitivity and threshhold.
each movement of a stick, or trackball, must equal or exceed the threshhold to
be added to the respective axis sum. In other words if you puch the stick up
hard enough to exceed the threshhold then the Y axis sum would be increased by
however much you pressed up.
.LP
Next the summed X and Y axis movement is each compared to the sensitivity setting.
If the sensitivity setting is equalled or exceeded, then one imwheel event is spawned,
thus after pressing up for a bit, the Y sum exceeds the sensitivity and a wheel up
event is interpreted by imwheel into an action such as a PageUp key.
.LP
The sensitivity therefore must be greater than the threshhold for it to have any
bearing on the input. Pseudo code such as the following may explain:
.RS
.nf
if(input >= threshhold)
.RS
sum = sum + input
.RE
if(sum >= sensitivity) {
.RS
do an imwheel action
sum = 0
.RE
}
.fi
.RE
.SH "IMWHEELRC"
IMWheel uses, optionally, two configuration files. One called /etc/X11/imwheel/imwheelrc,
which is used for everybody. The other is $HOME/.imwheelrc, used only for one
user. One is supplied and should have been installed automatically in /etc/X11/imwheel/
if not also in the installing users $HOME as well. All whitespace is ignored
in the files except for within the window names' double quotes.
IMWheel uses, optionally, two configuration files. One, /etc/X11/imwheel/imwheelrc,
is usable by everybody. The other is $HOME/.imwheelrc, used only by one
user. One is supplied and should have been installed automatically in /etc/X11/imwheel.
All whitespace is ignored in the files except for within the window names' double quotes.
.LP
The configuration file consists of window names and event translations and/or
imwheel commands that begin with an `@' (at) symbol. Each window name starts a
section that is it's configuration. The window names a priortized as first
section that is its configuration. The window names are priortized as first
come first served, so more generic matches should always occur later in the
configuration file.
.LP
@ -353,18 +161,18 @@ Window Resource Name
(null) which matches "\\(null\\)" in the imwheelrc
.fi
.LP
Most of these are probe-able using fvwm2's FvwmIdent module or the configurator
Most of these are probeable using fvwm2's FvwmIdent module or the configurator
(see the \fBCONFIGURATION HELPER\fP section). Other window managers may have their
own method of identifying windows' attributes.
.br
Each window name is matched as a regex string. Thus any window is matched using
the regex pattern ".*" as a window name. This pattern should be the last
section in your configuration file, or it will override the other window
configurations in the file for matched wheel/stick actions.
configurations in the file for matched wheel/button actions.
.br
There is one special header noted as "(null)" which matches windows that have a
null string in the three attributes. This makes it possible to assign actions
to even Quake3, which has no info for it's window. Just make sure that you
to even Quake3, which has no info for its window. Just make sure that you
realize that the keys used should not be keys that may conflict with other
key actions in the game or application you are aiming to make work!
The included imwheelrc file has a "(null)" section included to demonstrate, and
@ -374,15 +182,16 @@ Each window/class/resource name \fImust\fP be enclosed in double quotes (") on a
itself.
.LP
Inside each window section is any number of translation definitions or commands.
Each translation definition or command must be on a line by itself. The window section doesn't have to be terminated, as it is terminated by either starting
Each translation definition or command must be on a line by itself.
The window section doesn't have to be terminated, as it is terminated by either starting
another window section or the end of the configuration file.
.LP
.SH "IMWHEELRC TRANSLATION DEFINITIONS"
Mouse wheel/stick translations each take up a line after a window section has
been started. Each argument is seperated by commas(,) whitespace is ignored.
KeySyms are used to specify the keyboard input and outputs. pipes (|) are used
Mouse wheel/button translations each take up a line after a window section has
been started. Each argument is seperated by commas(,); whitespace is ignored.
KeySyms are used to specify the keyboard input and outputs. Pipes (|) are used
to join multiple keys into one input/output.
The format is as follows:
The format is as follows...
.LP
.B REQUIRED
.br
@ -402,7 +211,7 @@ in use during the wheel action. If the field is blank then \fIany\fP modifier
will match, so put these last in their window section.
.TP
\fIMouse Action Input\fP
This is the input from the mouse wheel or stick. It is one of the following and
This is the input from the mouse wheel or button. It is one of the following and
\fIonly\fP one:
.nf
@ -448,36 +257,10 @@ Default is 0.
Commands start with the `@' character. Commands are as follows:
.TP
\fB@Exclude\fP
Exclude this window from imwheel grabing mouse events. imwheel will ungrab
Exclude this window from imwheel grabing mouse events. IMWheel will ungrab
the mouse when these windows are entered and not regrab the mouse until focus
is changed to a non-excluded window. This allows the ZAxis button events to
pass through normally and mouse grabs to succeed.
.br
XV and KDE clients need this for the X Windows Method.
.br
This command has no effect in the GPM Method. The mouse isn't grabbed, nor are
ZAxis button events created by the server.
.TP
\fB@Repeat\fP
Repeat the mouse button to the window. This cause a mouse button to be generated
in the current window. It does not use XSendEvent so the mouse button presses
are indistiguishable from the real thing. This mode is not compatible with the
XGrabButtons method of imwheel, otherwise listed as the ZAxis Method in this manpage.
.br
Motions are mapped as follows:
.RS
.RS
.nf
Up is button 4
Down is button 5
Left is button 6
Right is button 7
Thumb1 is button 8
Thumb2 is button 9
.fi
.RE
.RE
.TP
\fB@Priority\fP=\fIpriority\fP
Using this is allowed in each window/class/resource section.
@ -486,30 +269,30 @@ Equal priorities on sections make the imwheelrc file parsed from top to bottom
to find the first match.
Thus \fB@Priority\fP can be used to make the file search for matches out of order,
then you dont have to keep the entries in order if you so please.
the supplied imwheelrc file contains extensive comments and examples of the
The supplied imwheelrc file contains extensive comments and examples of the
\fB@Priority\fP function.
.br
The default \fIpriority\fP for any new section is 0.
The last \fB@Priority\fP command in a section overrides all previous priorities
for that section. Thus each section has only one \fIpriority\fP setting in the end.
Priorities are kept as an int, thus range from INT_MAX to INT_MIN.
(see /usr/include/limits.h for these values on your system)
(See /usr/include/limits.h for these values on your system.)
.LP
.SH "CONFIGURATION HELPER"
IMWheel contains a semi-hidden configuration helper which can be brought up
by rolling/sticking up and down a few times in the root window of the X server.
by rolling up and down a few times in the root window of the X server.
Inside this window you can find out possible window names to use in your
imwheelrc file. Press on the mini-screen capture to grab another window,
including the root window (whole screen).
.LP
Mouse wheel and stick actions can be grabbed along with
active modifier keys on the keyboard. The mouse wheel/stick action is displayed
Mouse wheel and button actions can be grabbed along with
active modifier keys on the keyboard. The mouse wheel/button action is displayed
and the X KeySyms are displayed beneath it. All this information can be
directly entered into an imwheelrc as desired.
.LP
IMWheel can be restarted to read in a changed imwheelrc file or the
configurator can be canceled causing imwheel to resume oprations without
reading the configuration file. To restart imwheel execs itself as called by
reading the configuration file. To restart, imwheel execs itself as called by
the user in the first place but adding the \fB-R\fP option to indicate to
itself that this is a restarted imwheel. The \fB-R\fP is not for use by the
user, as it bypasses some configuration of imwheel.
@ -529,41 +312,6 @@ other! And not one after the other, they are both pressed at the same time
essentially.
.RE
.LP
For FIFO users, it is possible to send a real mouse button event, using
the special \fBButton#\fP syntax. An imwheelrc keysym of Button1 would
send a real Mouse button 1 (left mouse button) event. Mouse4 is what you'd want
for a MouseWheelUp type event. Mouse5 is what you want to MouseWheelDown event.
Many applications will understand the meaning of mouse button 4 and 5, but most don't
go beyond that. So \fIMouse6 and greater have no "standardized" meaning\fP. The Button# syntax
can be combined with regular keysyms, to send keys and mouse buttons at the same time.
.LP
Example:
.RS
.nf
Shift_L|Button4
- meaning left shift and wheel up.
Button5
- meaning wheel down.
.fi
.RE
.LP
Other button to imwheel meaniful references:
.RS
.nf
KeySym IMWheel Input Real Mouse
------ ------------- ----------
Button1 (none) Left Mouse Button
Button2 (none) Middle Mouse Button
Button3 (none) Right Mouse Button
Button4 Up Mouse Wheel Up
Button5 Down Mouse Wheel Down
Button6 Left Mouse Wheel Left
Button7 Right Mouse Wheel Right
Button8 Thumb1 Side Mouse Button 1 (left/up)
Button9 Thumb2 Side Mouse Button 2 (right/down)
.ni
.RE
.LP
Common Modifier Keysym names used in X:
.nf
Shift_L Shift_R
@ -579,7 +327,8 @@ Super_L Super_R
Hyper_L Hyper_R
.fi
.LP
And here's some that you may use, and they are \fIsomewhere\fP on your keyboard:Here's where they were on my keyboard, again, this is not universal.
And here's some that you may use, and they are \fIsomewhere\fP on your keyboard.
Here's where they were on my keyboard, again, this is not universal.
Use the \fIxev\fP program to test your own keys on your keyboard!
.LP
.nf
@ -605,19 +354,18 @@ The path to this file may differ for you.
Remember, there's always the configurator.
And \fBxev\fP will also help here too!
.LP
.SH "WHEEL OR STICK AS MIDDLE BUTTON IN X"
.SH "WHEEL AS MIDDLE BUTTON IN X"
Configure the XF86Config without "Emulate3Buttons" and increase "Buttons" if it is 2
in the Ponter or InputDevice section. The wheel or stick will act as a real
in the Ponter or InputDevice section. The wheel will act as a real
middle button and the outer two buttons will act as separate buttons (1 and 3),
even when pressed together.
.LP
Of course if your wheel keeps clicking middle button while you're trying to use the
wheel you may want to activate the Emulate3Buttons option to disable the wheel button!
And donn't forget to reduce the Buttons argument to 2!
And don't forget to reduce the Buttons argument to 2!
.LP
.SH "LEFTY BUTTON MAPPING IN X WINDOWS"
For those of you lefties out there using method #1, the non-gpm method this
command may help you get the buttons set up correctly in XWindows for both
For those lefties out there, this command may help you get the buttons set up correctly in XWindows for both
left handed and imwheel use.
.LP
.RS
@ -632,79 +380,54 @@ NOTE: most of these are NOT going to work, because of all the limits in X.
.fi
.RE
.LP
add more numbers to the end of this line if you have more buttons!
Add more numbers to the end of this line if you have more buttons!
.LP
.SH "BUGS"
Of course...but most of the time it's just that you haven't read everything I've written here and in the files of the distribution itself. Even then, you may be giving up too easily. Keep trying, it's not that hard. I am always working on reducing strange behavior. This is still a beta, as indicated by the leading 0 in the version number.
Of course...but most of the time it's just that you haven't read everything I've written here and in the files of the distribution itself. Even then, you may be giving up too easily. Keep trying, it's not that hard. I am always working to reduce strange behavior. This is still a beta, as indicated by the leading 0 in the version number.
.LP
.B Real Bugs
.LP
imwheel doesn't get along with itself on the same X display or using the same
gpmwheel FIFO. - This will always be your fault :-/
imwheel doesn't get along with itself on the same X display. This will always be your fault :-/
.LP
Stick mice are still a pain in the butt to use. - This is the manufacturer's fault.
Or X Windows fault, for not having a method to easily use such devices in all applications.
Or X Windows' fault, for not having a method to easily use such devices in all applications.
.LP
Keyboard focus isn't changed automatically to input keys into Window mouse is
over. This only occurs with Click-to-Focus type focus managment in window managers.
I use sloppy focus in fvwm2, which always works for me. - Whose fault \fIis\fP this?
(Switch focus modes and/or window managers, or try the \fB-f\fP option on imwheel)
.LP
Configuration file is not validated for correctness nicely...although it does
Configuration file is not validated for correctness nicely... although it does
get preparsed before the main program starts, thus stopping you before you run
with an invalid configuration file. I just have never made a bad configuration
file, so I guess I'll have to try and do that to see what happens. Just don't
make any mistakes and you'll be fine. - This is my fault?! ;)
make any mistakes and you'll be fine.
.LP
.SH "HOMEPAGE"
.nf
http://jonatkins.org/imwheel
http://imwheel.sourceforge.net
.fi
.LP
.SH "AUTHOR"
Jonathan Atkins <jcatki@jonatkins.org>
Jonathan Atkins <jcatki@jcatki.no-ip.org>
.LP
.SH "FILES"
.nf
$HOME/.imwheelrc
The users configuration file.
The user's configuration file.
/etc/X11/imwheel/imwheelrc
The global location for the configuration
file, it is always loaded. Overided by
the users configuration file.
/dev/gpmwheel
The default wheel FIFO from gpm, if used.
/dev/jam_imwheel:0.0 (or other numbers...)
A wheel FIFO from jamd, if used, must be specified.
jamd allows more than on FIFO, and thus allows more than
one instance of imwheel to be running on the same computer
when running imwheel on multiple displays
using the Wheel FIFO method.
/tmp/imwheel.pid
The public area for imwheel's pid file.
/var/run/imwheel.pid
The private area for imwheel's pid file.
file. Overidden by the user's configuration file.
.fi
.LP
.SH "SEE ALSO"
.nf
\fBjamd(1)\fP
Jon Atkins Mouse - a replacement/augmentation for/to gpm.
\fBxwheel(1x)\fP
The new replacement for imwheel. Uses jamd instead of gpm or ZAxis.
(may not be available yet)
\fBxdpyinfo(1x)\fP
X Display information, including extensions.
\fBgpm(8)\fP
General Purpose Mouse, imwheel edition required.
\fBFvwmIdent(1x)\fP
FVWM2's Identify module, for probing windows.
\fBregex(7)\fP

View File

@ -59,22 +59,18 @@ const struct option options[]=
//{"restart", 0, 0, 'R'}, //not used by users!
{"root-window", 0, 0, 'r'},
{"quit", 0, 0, 'q'},
{"sensitivity", 1, 0, 's'},
{"threshhold", 1, 0, 't'},
{"version", 0, 0, 'v'},
{"wheel-fifo", 2, 0, 'W'},
{"transpose", 0, 0, 'x'},
{0, 0, 0, 0}
};
const char *optionusage[][2]=
{ /*{argument name, usage}*/
{"delay-rate", "auto repeat until button release (default=250)"}, //a
{"grab-buttons", "Specify up to 6 remappings 0=none (default=456789)"}, //b
{"grab-buttons", "Specify button remappings (default=\"4 5 6 7 8 9\", 0=skip)"},//b
{NULL, "Open configuration helper window imediately"}, //c
{NULL, "Spit out all debugging info (it's a lot!)"}, //D
{NULL, "IMWHeel process doesn't detach from terminal"}, //d
{"display-name", "Sets X display to use (one per FIFO if FIFO used)"}, //X
{NULL, "Swaps buttons 4 and 5 events (same as -b 54"}, //4
{"display-name", "Sets X display to use"}, //X
{NULL, "Swaps buttons 4 and 5 events (same as -b \"5 4\")"}, //4
{NULL, "Use event subwindow instead of XGetInputFocus"}, //f
{NULL, "Disable the use of Focus Events for button grabs"}, //g
{NULL, "For this help! Now you know"}, //h
@ -84,11 +80,7 @@ const char *optionusage[][2]=
//{NULL, "RESERVED: used when imwheel reloads itself"}, //R
{NULL, "Allow wheeling in the root window (no cfg dialog)"}, //r
{NULL, "Don't start imwheel process, after args"}, //q
{"sum-min", "Stick devices require this much total movment (w/fifo)"}, //s
{"stick-min", "Stick devices require this much pressure (w/fifo)"}, //t
{NULL, "Show version info and exit"}, //v
{"fifo-path", "Use a GPM fifo instead of XGrabButton"}, //W
{NULL, "swap X and Y stick axis (w/fifo)"}, //x
{NULL, NULL}
};
int buttonFlip=False, useFifo=False, detach=True, quit=False,
@ -108,6 +100,7 @@ int main(int argc, char **argv)
getOptions(argc,argv,opts,options);
setupstatebits();
setupbuttonnames();
if(!displayName)
displayName=XDisplayName(NULL);
Printf("display=%s\n",displayName);
@ -137,7 +130,7 @@ void grabButtons(Display *d, Window w)
return;
Printf("Grab buttons!\n");
grabbed=True;
for(i=0;i<NUM_BUTTONS;i++)
for(i=0;i<buttons_cnt;i++)
{
if(buttons[i])
{
@ -168,7 +161,7 @@ void ungrabButtons(Display *d, Window w)
Printf("Ungrab buttons!\n");
XSync(d,False);
grabbed=False;
for(i=0;i<NUM_BUTTONS;i++)
for(i=0;i<buttons_cnt;i++)
{
if(buttons[i])
{
@ -331,7 +324,7 @@ signed char getInput(Display *d, XEvent *e, XModifierKeymap **xmk, signed char k
{
//e->xbutton.button^=buttonFlip;
button= buttonIndex(e->xbutton.button);
if(button<NUM_BUTTONS)
if(button<buttons_cnt)
e->xbutton.button= button= button+4;
XQueryKeymap(d,km);
if(debug)
@ -635,9 +628,9 @@ void eventLoop(Display *d, char **argv)
int k;
j=button-4;
if(j>=NUM_BUTTONS)
if(j>=buttons_cnt)
{
Printf("No we aren't because j(%d) is >= NUM_BUTTONS(%d)!\n",j,NUM_BUTTONS);
Printf("No we aren't because j(%d) is >= NUM_BUTTONS(%d)!\n",j,buttons_cnt);
break;
}
k=statebits[makeModMask(xmk,km)&STATE_MASK];
@ -647,6 +640,11 @@ void eventLoop(Display *d, char **argv)
break;
}
// simply cut off all new buttons and map the odd ones to "Thumb1" and
// the even ones to "Thumb2"
if (j>NUM_STDCOMMANDS) // we have NUM_STDCOMMANDS standard actions
j = 5 - (j % 2); // all odds become a 4, all evens a 5
out[0]=(char*)keys[j][k];
wa.reps=reps[k];
doWA(d,(XButtonEvent*)&e.xbutton,xmk,km,&wa);

View File

@ -17,7 +17,6 @@
#".*"
#@Priority=-1000 #the default priority is zero, higher numbers take precedence
#@Exclude
#@Repeat
# want it to type something?
# this would type "Rofl" and press Return in any window
@ -26,25 +25,6 @@
# This one rule can send button events, as if you used ZAxisMapping "4 5"
# Make sure your XF86Config allows for the max buttons needed...
# otherwise the events will NOT even be generated...
#".*"
#, Up, Button4
#, Down, Button5
#, Left, Button6
#, Right, Button7
#, Thumb1, Button6
#, Thumb2, Button7
# alternatively with Button numbers
#".*"
#, Button4, Button4
#, Button5, Button5
#, Button6, Button6
#, Button7, Button7
#, Button6, Button6
#, Button7, Button7
#Thanks to Mathias Weyland <mathias@weyland-wtal.de>
"^mutt.*"
None, Up, Up
@ -108,8 +88,6 @@ Shift_L, Up, Control_L|Y
Shift_L, Down, Control_L|E
#None, Up, Page_Up
#None, Down, Page_Down
#, Up, Button4
#, Down, Button5
, Left, Shift_L|Left
, Right, Shift_L|Right
, Thumb1, Shift_L|Left
@ -128,8 +106,6 @@ Alt_L, Down, Down
#Alt_L, Down, Shift_L|Page_Down
#"^GnomeTerminal"
#@Exclude
#@Repeat
#None, Up, Shift_L|Page_Up
#None, Down, Shift_L|Page_Down
@ -150,11 +126,8 @@ Alt_L, Right, Control_L|E
"^VMware"
@Exclude
#@Repeat
"^Mozilla-bin$"
#, Up, Button4
#, Down, Button5
#, Left, Alt_L|Left
#, Right, Alt_L|Right
#
@ -187,14 +160,11 @@ Shift_L, Thumb2, Down, 7,
, Thumb2, R
"^SDL_App"
#, Up, Button4
#, Down, Button5
, Thumb1, Home #many apps don't understand Button > 5
, Thumb2, End #many apps don't understand Button > 5
# Thanks to shewp <shewplx@pblx.net>
"^Opera"
#@Repeat # let qt do it
None, Down, Down, 4, 100, 100
None, Up, Up, 4, 100, 100
None, Thumb1, Right
@ -203,8 +173,6 @@ None, Thumb2, Left
"^Netscape.*"
, Thumb1, Alt_L|KP_Left
, Thumb2, Alt_L|KP_Right
#, Up, Button4
#, Down, Button5
"^Netscape"
#
@ -250,25 +218,11 @@ None, Up, Control_L|Meta_L|Shift_L|parenleft
, Down, j
, Up, k
".* - Pan$"
, Left, Control_L|Button1
, Thumb1, Control_L|Button1
#, Up, Button4
#, Down, Button5
# Thanks to etienne grossmann <etienne@isr.ist.utl.pt>
"^gv[ :]"
None, Up, Shift_L|space
None, Down, space
#"^Event Tester"
#@Repeat
#@Exclude
#, Left, Button6
#, Right, Button7
#, Thumb1, Button8
#, Thumb2, Button9
"^xv grab"
@Priority=1
@Exclude
@ -278,46 +232,19 @@ None, Down, Tab
None, Up, Delete
"^Untitled"
# if using wheel fifo, you may switch these.
#, Up, Button4
#, Down, Button5
#with these
, Up, Page_Up
, Down, Page_Down
# (end of switch)
, Thumb1, Home
, Thumb2, End
"^No Title"
# if using wheel fifo, you may switch these.
#, Up, Button4
#, Down, Button5
#with these
, Up, Page_Up
, Down, Page_Down
# (end of switch)
, Left, Home
, Right, End
, Thumb1, Home
, Thumb2, End
#"\(null\)"
# if using wheel fifo, you may want the 2nd group
#, Up, Button4
#, Down, Button5
#, Left, Button6
#, Right, Button7
#, Thumb1, Button8
#, Thumb2, Button9
# 2nd group (old keys...)
#, Up, Page_Up
#, Down, Page_Down
#, Left, Home
#, Right, End
#, Thumb1, Home
#, Thumb2, End
# (end of switch)
# send event to the window manager when in the root window...
"\(root\)"
, Up, Control_L|N
@ -334,7 +261,6 @@ None, Up, Delete
#".*"
#@Priority=-1000
#@Exclude
#@Repeat
#
# These are the defaults, but note that the defaults for the right side of the
@ -346,8 +272,6 @@ None, Up, Delete
#
#".*"
#@Priority=-1001
#, Up, Button4
#, Down, Button5
#None, Left, Left
#None, Right, Right
#None, Up, Page_Up

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9 from Makefile.am.
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# Copyright (C) 1994-2013 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.
@ -14,17 +14,57 @@
@SET_MAKE@
SOURCES = $(libjax_a_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
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
@ -37,7 +77,8 @@ NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = jax
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@ -45,29 +86,76 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
AR = ar
ARFLAGS = cru
AM_V_AR = $(am__v_AR_@AM_V@)
am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
am__v_AR_0 = @echo " AR " $@;
am__v_AR_1 =
libjax_a_AR = $(AR) $(ARFLAGS)
libjax_a_LIBADD =
am_libjax_a_OBJECTS = jax.$(OBJEXT)
libjax_a_OBJECTS = $(am_libjax_a_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libjax_a_SOURCES)
DIST_SOURCES = $(libjax_a_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
@ -88,7 +176,9 @@ EXEEXT = @EXEEXT@
GETOPT_INCS = @GETOPT_INCS@
GETOPT_LIBS = @GETOPT_LIBS@
GPM_DIR = @GPM_DIR@
GREP = @GREP@
HAVE_GPM_SRC = @HAVE_GPM_SRC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -98,32 +188,31 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
NO_GPM_DOC_FALSE = @NO_GPM_DOC_FALSE@
NO_GPM_DOC_TRUE = @NO_GPM_DOC_TRUE@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
SUID_FALSE = @SUID_FALSE@
SUID_TRUE = @SUID_TRUE@
VERSION = @VERSION@
XMKMF = @XMKMF@
X_CFLAGS = @X_CFLAGS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@ -131,7 +220,11 @@ am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
extras = @extras@
extras_dist = @extras_dist@
@ -140,11 +233,13 @@ getopt_dist = @getopt_dist@
gpm_dist = @gpm_dist@
gpm_imwheel = @gpm_imwheel@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mdetect = @mdetect@
@ -153,14 +248,20 @@ mdump = @mdump@
mdump_dist = @mdump_dist@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
suid = @suid@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CFLAGS = @CFLAGS@ @X_CFLAGS@
noinst_LIBRARIES = libjax.a
libjax_a_SOURCES = jax.c jax.h
@ -172,14 +273,14 @@ $(srcdir)/Makefile.in: $(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; \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu jax/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu jax/Makefile
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu jax/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu jax/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@ -197,13 +298,15 @@ $(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
libjax.a: $(libjax_a_OBJECTS) $(libjax_a_DEPENDENCIES)
-rm -f libjax.a
$(libjax_a_AR) libjax.a $(libjax_a_OBJECTS) $(libjax_a_LIBADD)
$(RANLIB) libjax.a
libjax.a: $(libjax_a_OBJECTS) $(libjax_a_DEPENDENCIES) $(EXTRA_libjax_a_DEPENDENCIES)
$(AM_V_at)-rm -f libjax.a
$(AM_V_AR)$(libjax_a_AR) libjax.a $(libjax_a_OBJECTS) $(libjax_a_LIBADD)
$(AM_V_at)$(RANLIB) libjax.a
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@ -214,92 +317,98 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jax.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
uninstall-info-am:
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
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; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
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; \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@ -317,16 +426,22 @@ install-am: all-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
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -347,18 +462,38 @@ dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -378,18 +513,23 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
uninstall-am:
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES ctags distclean distclean-compile \
distclean-generic distclean-tags 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 \
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \
distclean-compile distclean-generic distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-info-am
mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
uninstall-am
# 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.

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9 from Makefile.am.
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# Copyright (C) 1994-2013 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.
@ -14,17 +14,57 @@
@SET_MAKE@
SOURCES = mdetect.c
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
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
@ -37,9 +77,9 @@ NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXTRA_PROGRAMS = mdetect$(EXEEXT)
noinst_PROGRAMS = @mdetect@
subdir = mdetect
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@ -47,26 +87,69 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
mdetect_SOURCES = mdetect.c
mdetect_OBJECTS = mdetect.$(OBJEXT)
mdetect_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = mdetect.c
DIST_SOURCES = mdetect.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
@ -87,7 +170,9 @@ EXEEXT = @EXEEXT@
GETOPT_INCS = @GETOPT_INCS@
GETOPT_LIBS = @GETOPT_LIBS@
GPM_DIR = @GPM_DIR@
GREP = @GREP@
HAVE_GPM_SRC = @HAVE_GPM_SRC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -97,32 +182,31 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
NO_GPM_DOC_FALSE = @NO_GPM_DOC_FALSE@
NO_GPM_DOC_TRUE = @NO_GPM_DOC_TRUE@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
SUID_FALSE = @SUID_FALSE@
SUID_TRUE = @SUID_TRUE@
VERSION = @VERSION@
XMKMF = @XMKMF@
X_CFLAGS = @X_CFLAGS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@ -130,7 +214,11 @@ am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
extras = @extras@
extras_dist = @extras_dist@
@ -139,11 +227,13 @@ getopt_dist = @getopt_dist@
gpm_dist = @gpm_dist@
gpm_imwheel = @gpm_imwheel@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mdetect = @mdetect@
@ -152,14 +242,21 @@ mdump = @mdump@
mdump_dist = @mdump_dist@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
suid = @suid@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
noinst_PROGRAMS = @mdetect@
AM_CFLAGS = -I@top_srcdir@
all: all-am
@ -169,14 +266,14 @@ $(srcdir)/Makefile.in: $(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; \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mdetect/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu mdetect/Makefile
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mdetect/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu mdetect/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@ -194,12 +291,14 @@ $(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstPROGRAMS:
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
mdetect$(EXEEXT): $(mdetect_OBJECTS) $(mdetect_DEPENDENCIES)
mdetect$(EXEEXT): $(mdetect_OBJECTS) $(mdetect_DEPENDENCIES) $(EXTRA_mdetect_DEPENDENCIES)
@rm -f mdetect$(EXEEXT)
$(LINK) $(mdetect_LDFLAGS) $(mdetect_OBJECTS) $(mdetect_LDADD) $(LIBS)
$(AM_V_CCLD)$(LINK) $(mdetect_OBJECTS) $(mdetect_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@ -210,92 +309,98 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdetect.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
uninstall-info-am:
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
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; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
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; \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@ -316,16 +421,22 @@ install-am: all-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
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -346,18 +457,38 @@ dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -377,22 +508,27 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
uninstall-am:
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-noinstPROGRAMS ctags dist-hook distclean \
distclean-compile distclean-generic distclean-tags 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-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-info-am
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-noinstPROGRAMS cscopelist-am ctags ctags-am dist-hook \
distclean distclean-compile distclean-generic distclean-tags \
distdir dvi dvi-am html html-am info info-am install \
install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am
dist-hook:
cp -Rfp mice $(distdir)/mice
# 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:

137
util.c
View File

@ -9,6 +9,7 @@
#include <stdarg.h>
#include <string.h>
#include <signal.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <regex.h>
@ -51,15 +52,9 @@
typedef void (*sighandler_t)(int);
int buttons[NUM_BUTTONS+1]={4,5,6,7,8,9,0};
const char *button_names[]={
"Up",
"Down",
"Left",
"Right",
"Thumb1",
"Thumb2"
};
int *buttons = NULL;
int buttons_cnt = 0;
char *(*button_names)[] = NULL;
int statebits[STATE_MASK+1];
char *wname=NULL;
XClassHint xch={NULL,NULL};
@ -92,7 +87,7 @@ const int reps[1<<NUM_STATES]=
20, // ControlMask|Mod1Mask
50 //ShiftMask|ControlMask|Mod1Mask
};
const char *keys[NUM_BUTTONS][1<<NUM_STATES]=
const char *keys[NUM_STDCOMMANDS][1<<NUM_STATES]=
{
{
"Page_Up", //None
@ -184,6 +179,43 @@ void setupstatebits()
/*----------------------------------------------------------------------------*/
void setupbuttonnames()
{
char buf[10 + 5 + 1]; // strlen(2^31=2147483648) + strlen("ExtBt") + NULL
int i;
// allocate enough memory (buttons_cnt should be known by now)
Printf("Allocating %d names\n", buttons_cnt);
button_names = malloc(buttons_cnt * sizeof(char *) + 1000);
// we have the 6 legacy buttons, but only as many as the user has declared
switch ((buttons_cnt<=6)?buttons_cnt:6)
{
case 6:
(*button_names)[5] = "Thumb2";
case 5:
(*button_names)[4] = "Thumb1";
case 4:
(*button_names)[3] = "Right";
case 3:
(*button_names)[2] = "Left";
case 2:
(*button_names)[1] = "Down";
case 1:
(*button_names)[0] = "Up";
break;
}
// add the remaining extended buttons
for (i=6; i<buttons_cnt; i++)
{
snprintf(buf, 16, "ExtBt%d", i +1);
(*button_names)[i] = malloc(strlen(buf)+1);
strcpy((*button_names)[i], buf);
}
}
/*----------------------------------------------------------------------------*/
RETSIGTYPE exitParent(int num)
{
exit(0);
@ -196,11 +228,11 @@ int isUsedButton(int b)
int i;
Printf("isUsedButton(%d)=",b);
for(i=0;i<NUM_BUTTONS;i++)
for(i=0;i<buttons_cnt;i++)
if(buttons[i]==b)
break;
Printf("%s\n",i<NUM_BUTTONS?"yes":"no");
return i<NUM_BUTTONS;
Printf("%s\n",i<buttons_cnt?"yes":"no");
return i<buttons_cnt;
}
/*----------------------------------------------------------------------------*/
@ -209,10 +241,10 @@ int buttonIndex(int b)
{
int i;
for(i=0;i<NUM_BUTTONS;i++)
for(i=0;i<buttons_cnt;i++)
if(buttons[i]==b)
return(i);
return(NUM_BUTTONS);
return(buttons_cnt);
}
/*----------------------------------------------------------------------------*/
@ -220,6 +252,8 @@ int buttonIndex(int b)
void getOptions(int argc, char **argv, char *opts, const struct option *options)
{
int ch,i,j,killold=False,invalidOpts=False;
char *ButtonOpt = NULL;
while((ch=getopt_long_only(argc,argv,opts,options,&i))>=0)
{
@ -296,6 +330,16 @@ void getOptions(int argc, char **argv, char *opts, const struct option *options)
exit(0);
break;
case 'b':
for (j = 0; j < strlen(optarg); j++)
if (optarg[j] == ' ')
buttons_cnt++;
buttons_cnt++;
buttons = malloc(sizeof(int) * buttons_cnt);
ButtonOpt = strtok(optarg, " ");
for(j = 0; ButtonOpt != NULL; ButtonOpt = strtok(NULL, " "), j++)
buttons[j] = atoi(ButtonOpt);
/*
memset(buttons,0,NUM_BUTTONS*sizeof(int));
for(j=0;optarg[j] && j<NUM_BUTTONS;j++)
{
@ -306,6 +350,7 @@ void getOptions(int argc, char **argv, char *opts, const struct option *options)
}
buttons[j]=optarg[j]-'0';
}
*/
break;
case 'h':
case '?':
@ -317,6 +362,12 @@ void getOptions(int argc, char **argv, char *opts, const struct option *options)
}
Printf("\n");
}
if(buttons_cnt == 0) {
buttons_cnt = 6;
buttons = malloc(sizeof(int) * buttons_cnt);
for(j = 0; j < buttons_cnt; j++)
buttons[j] = j+4;
}
if(invalidOpts)
exit(1);
if(!restart)
@ -525,7 +576,7 @@ void printUsage(char *pname, const struct option options[], const char *usage[][
int i,maxa=0,maxb=0,len;
char str[80];
printf("imwheel %s by -=<Long Island Man>=- <jcatki@jonatkins.org>\n",VERSION);
printf("imwheel %s by -=<Long Island Man>=- <jcatki@jcatki.no-ip.org>\n",VERSION);
if(!options || !usage)
return;
printf("%s",pname);
@ -564,12 +615,13 @@ void printUsage(char *pname, const struct option options[], const char *usage[][
for(i=0;options[i].name;i++)
{
*str=0;
if(options[i].name)
sprintf(str,"--%s",options[i].name);
if(options[i].val && options[i].name)
sprintf(str,"%s|",str);
sprintf(str,"%s%s%s ",
options[i].name?"--":"",
options[i].name?options[i].name:"",
options[i].name&&options[i].val?"|-":
options[i].val?"-":"");
if(options[i].val)
sprintf(str,"%s-%c",str,options[i].val);
str[strlen(str)-1]=options[i].val;
printf("%-*.*s",maxa,maxa,str);
if(usage[i][0])
printf(" %-*.*s",maxb,maxb,usage[i][0]);
@ -847,7 +899,8 @@ struct WinAction *getRC()
exitString("expected 3 args, got 1, in config.\n%s\n",line);
Printf("Keysym mask: \"%s\"\n",line);
newwa[num_wa-1].in=getPipeArray(line);
memmove(line,p+1,strlen(p+1)+1);
for(p++; isspace(*p); p++);
memmove(line,p,strlen(p)+1);
//Get Button
p=strchr(line,',');
if(p)
@ -859,16 +912,16 @@ struct WinAction *getRC()
{
sscanf(line+6,"%d",&i);
Printf("(Button%d)",i);
if(i>NUM_BUTTONS)
i=NUM_BUTTONS;
if(i>buttons_cnt)
i=buttons_cnt;
else
newwa[num_wa-1].button=i;
}
else
{
for(i=0; i<NUM_BUTTONS; i++)
for(i=0; i<buttons_cnt; i++)
{
if(!strcasecmp(line,button_names[i]))
if(!strcasecmp(line,(*button_names)[i]))
{
if(buttons[i])
newwa[num_wa-1].button=i+4;//buttons[i];
@ -878,12 +931,12 @@ struct WinAction *getRC()
}
}
}
if(i==NUM_BUTTONS) // nothing found
if(i==buttons_cnt) // nothing found
{
if(!strncasecmp(line,button_names[4],strlen(button_names[4])-1))
newwa[num_wa-1].button=buttons[4];
else
exitString("Unrecognized wheel action in config.\n%s\n",line);
fprintf(stderr, "Unrecognized wheel action in config. Ignoring action.\n%s\n", line);
newwa[num_wa-1].button = 0;
}
Printf("\t=%d\n",newwa[num_wa-1].button);
if(!newwa[num_wa-1].button)
@ -895,7 +948,8 @@ struct WinAction *getRC()
newwa[num_wa].id=NULL;
continue;
}
memmove(line,p+1,strlen(p+1)+1);
for(p++; isspace(*p); p++);
memmove(line,p,strlen(p)+1);
//Get Keysym Out
p=strchr(line,',');
if(p)
@ -908,7 +962,10 @@ struct WinAction *getRC()
else
exitString("Unrecognized or missing Keysym Outs (arg 3) in config.\n%s\n",line);
if(p)
memmove(line,p+1,strlen(p+1)+1);
{
for(p++; isspace(*p); p++);
memmove(line,p,strlen(p)+1);
}
else
continue;
//Get Reps
@ -921,7 +978,10 @@ struct WinAction *getRC()
newwa[num_wa-1].reps=strtol(line,NULL,10);
}
if(p)
memmove(line,p+1,strlen(p+1)+1);
{
for(p++; isspace(*p); p++);
memmove(line,p,strlen(p)+1);
}
else
continue;
//Get Delay
@ -934,7 +994,10 @@ struct WinAction *getRC()
newwa[num_wa-1].delay=strtol(line,NULL,10);
}
if(p)
memmove(line,p+1,strlen(p+1)+1);
{
for(p++; isspace(*p); p++);
memmove(line,p,strlen(p)+1);
}
else
continue;
//Get Delay Up
@ -1079,7 +1142,7 @@ void writeRC(struct WinAction *wa)
perror("imwheel,writeRC");
return;
}
fprintf(f,"# IMWheel Configuration file (%s)\n# (C)Jon Atkins <jcatki@jonatkins.org>\n#\n# Generated by imwheel\n# Any extra comments will be lost on reconfiguration\n# However order will be maintained\n# Order! ORDER, I SAY!!\n",fname);
fprintf(f,"# IMWheel Configuration file (%s)\n# (C)Jon Atkins <jcatki@jcatki.no-ip.org>\n#\n# Generated by imwheel\n# Any extra comments will be lost on reconfiguration\n# However order will be maintained\n# Order! ORDER, I SAY!!\n",fname);
for(cur=NULL,p=wa;p->id;p=&p[1])
{
if(!cur || strcmp(cur->id,p->id))
@ -1091,7 +1154,7 @@ void writeRC(struct WinAction *wa)
{
for(i=0; p->in[i]; i++)
fprintf(f,"%s%s",(i?"|":""),p->in[i]);
fprintf(f,",\t%s,\t",button_names[p->button-4]);
fprintf(f,",\t%s,\t",(*button_names)[p->button-4]);
for(i=0; p->out[i]; i++)
fprintf(f,"%s%s",(i?"|":""),p->out[i]);
if(p->delayup>0||p->delay>0||p->reps>1||p->reps==0)

10
util.h
View File

@ -10,7 +10,7 @@
#define PIDFILE PIDDIR"/imwheel.pid"
#define NUM_BUTTONS 6
#define NUM_STDCOMMANDS 6
#define STATE_MASK (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)
#define NUM_STATES 3
#define MAX_MASKTRANS 8
@ -42,17 +42,18 @@ struct WinAction
int delayup;//microsecond delay while key down
};
extern int buttons[NUM_BUTTONS+1];
extern int *buttons;
extern int buttons_cnt;
extern int statebits[STATE_MASK+1];
extern int debug;
extern struct WinAction *wa;
extern int num_wa;
extern struct Trans masktrans[MAX_MASKTRANS];
extern const int reps[1<<NUM_STATES];
extern const char *keys[NUM_BUTTONS][1<<NUM_STATES];
extern const char *keys[NUM_STDCOMMANDS][1<<NUM_STATES];
extern char *wname;
extern XClassHint xch;
extern const char *button_names[];
extern char *(*button_names)[];
extern Atom ATOM_NET_WM_NAME, ATOM_UTF8_STRING, ATOM_WM_NAME, ATOM_STRING;
void getOptions(int,char**,char*,const struct option*);
@ -66,6 +67,7 @@ void printKeymap(Display *d, char[32]);
int getbit(char*, int);
void setbit(char*, int, Bool);
void setupstatebits(void);
void setupbuttonnames(void);
int isMod(XModifierKeymap*, int);
unsigned int makeModMask(XModifierKeymap*, char[32]);
unsigned int makeKeysymModMask(Display*,XModifierKeymap*, char**);