update gpm website
Signed-off-by: Nico Schottelius <nico@brief.schottelius.org>
This commit is contained in:
parent
faaa2d2448
commit
57066ac67e
5811 changed files with 11 additions and 752922 deletions
|
@ -1,68 +1,28 @@
|
||||||
general purpose mouse
|
[[!meta title="gpm - general purpose mouse"]]
|
||||||
|
|
||||||
|
|
||||||
gpm is the mouse support for Linux on the console
|
## How to get gpm?
|
||||||
|
|
||||||
## how to get gpm
|
You can browse the [static archives](archives) or use git:
|
||||||
|
|
||||||
### git
|
|
||||||
Currently the best way to get gpm is via git:
|
|
||||||
|
|
||||||
git-clone git://git.schottelius.org/gpm
|
git-clone git://git.schottelius.org/gpm
|
||||||
|
|
||||||
* Alternate clone URLs:
|
The archives are also mirrored at
|
||||||
* http://git.schottelius.org/gpm (plain http instead of git://)
|
[ar.linux.it](http://www.ar.linux.it/pub/gpm/).
|
||||||
* Gitweb:
|
|
||||||
* [http://git.schottelius.org/](http://git.schottelius.org/?p=gpm)
|
|
||||||
|
|
||||||
### archives and source browser
|
|
||||||
|
|
||||||
* gpm2 (development branch): ***gpm-1.99.7***:
|
|
||||||
* [changes](browse_source/gpm-1.99.7/doc/changes/1.99.7)
|
|
||||||
* [browse source](browse_source/gpm-1.99.7)
|
|
||||||
* [tar.bz2](archives/gpm-1.99.7.tar.bz2)
|
|
||||||
* [tar.bz2.sha512sum](archives/gpm-1.99.7.tar.bz2.sha512sum)
|
|
||||||
* [tar.gz](archives/gpm-1.99.7.tar.gz)
|
|
||||||
* [tar.gz.sha512sum](archives/gpm-1.99.7.tar.gz.sha512sum)
|
|
||||||
* [tar.lzma](archives/gpm-1.99.7.tar.lzma)
|
|
||||||
* [gpm-1.99.7.tar.lzma.sha512sum](archives/gpm-1.99.7.tar.lzma.sha512sum)
|
|
||||||
* gpm1 (stable branch): ***gpm-1.20.6***:
|
|
||||||
* [changes](browse_source/gpm-1.20.6/doc/changes/1.20.6)
|
|
||||||
* [browse source](browse_source/gpm-1.20.6)
|
|
||||||
* [tar.bz2](archives/gpm-1.20.6.tar.bz2)
|
|
||||||
* [tar.bz2.sha512sum](archives/gpm-1.20.6.tar.bz2.sha512sum)
|
|
||||||
* [tar.gz](archives/gpm-1.20.6.tar.gz)
|
|
||||||
* [tar.gz.sha512sum](archives/gpm-1.20.6.tar.gz.sha512sum)
|
|
||||||
* [tar.lzma](archives/gpm-1.20.6.tar.lzma)
|
|
||||||
* [tar.lzma.sha512sum](archives/gpm-1.20.6.tar.lzma.sha512sum)
|
|
||||||
* [Older archives](archives)
|
|
||||||
* You can [browse the source](browse_source) of the old releases, too.
|
|
||||||
|
|
||||||
There is the mirror
|
|
||||||
<a href="http://www.ar.linux.it/pub/gpm/">http://www.ar.linux.it/pub/gpm/</a>
|
|
||||||
available.
|
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
### IRC
|
|
||||||
There is the irc channel [#gpm](irc.freenode.org/#gpm) on irc.freenode.org.
|
There is the irc channel [#gpm](irc.freenode.org/#gpm) on irc.freenode.org.
|
||||||
|
|
||||||
### mailing lists
|
|
||||||
#### development and discussion list
|
|
||||||
The mailing list devoted to gpm is "gpm@lists.linux.it".
|
The mailing list devoted to gpm is "gpm@lists.linux.it".
|
||||||
In order to subscribe to the mailing list, visit
|
In order to subscribe to the mailing list, visit
|
||||||
<a href="http://lists.linux.it/listinfo/gpm">http://lists.linux.it/listinfo/gpm</a>
|
[lists.linux.it](http://lists.linux.it/listinfo/gpm)
|
||||||
or send a message with "subscribe" in its body to gpm-request@lists.linux.it.
|
or send a message with "subscribe" in its body to gpm-request@lists.linux.it.
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
echo subscribe | mail gpm-request@lists.linux.it
|
echo subscribe | mail gpm-request@lists.linux.it
|
||||||
|
|
||||||
The mailing list archive can be found at
|
Or you can browse the
|
||||||
<A
|
[mailing list archive](http://lists.linux.it/pipermail/gpm/).
|
||||||
HREF="http://lists.linux.it/pipermail/gpm/">http://lists.linux.it/pipermail/gpm/</A>
|
|
||||||
|
|
||||||
#### Commits mailinglist
|
[[!tag gpm unix]]
|
||||||
|
|
||||||
All published commits from the projects I am involved in are send
|
|
||||||
to this mailinglist, including those commits to gpm.
|
|
||||||
|
|
||||||
* [Archive](http://l.schottelius.org/pipermail/commits/)
|
|
||||||
* [Mailinglist](http://l.schottelius.org/mailman/listinfo/commits/)
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
.git
|
|
|
@ -1,16 +0,0 @@
|
||||||
acconfig.h
|
|
||||||
aclocal.m4
|
|
||||||
*.o
|
|
||||||
*.a
|
|
||||||
configure
|
|
||||||
Makefile
|
|
||||||
Makefile.include
|
|
||||||
autom4te.cache
|
|
||||||
contrib/Makefile
|
|
||||||
config.log
|
|
||||||
config.status
|
|
||||||
doc/doc.gpm
|
|
||||||
src/headers/config.h
|
|
||||||
src/prog/gpm-root.c
|
|
||||||
src/subdirs-exist
|
|
||||||
src/headers/config.h.in
|
|
|
@ -1,43 +0,0 @@
|
||||||
Hello World.
|
|
||||||
|
|
||||||
This files lists all current known bugs of gpm. If you have some spare time,
|
|
||||||
please help to fix them. Thanks from the current maintainer (Nico).
|
|
||||||
|
|
||||||
Additional bug information can be found in the TODO file. Everything not done
|
|
||||||
is more or less a bug...
|
|
||||||
|
|
||||||
/*============================================================================*/
|
|
||||||
From: maintainer (Nico)
|
|
||||||
|
|
||||||
liblow.c:Gpm_Connect/Open (option.consolename is == NULL)
|
|
||||||
|
|
||||||
|
|
||||||
/*============================================================================*/
|
|
||||||
From: maintainer (Nico)
|
|
||||||
|
|
||||||
src/headers/config.h:
|
|
||||||
SBINDIR and SYSCONFDIR are corrupted: ${prefix} should disappear!
|
|
||||||
|
|
||||||
/*============================================================================*/
|
|
||||||
From: maintainer (Nico)
|
|
||||||
|
|
||||||
Following probles crash/do not work correctly: (most due to problems with devfs)
|
|
||||||
- mev
|
|
||||||
- gpm-root
|
|
||||||
- disable-paste
|
|
||||||
- mouse-test
|
|
||||||
|
|
||||||
/*============================================================================*/
|
|
||||||
|
|
||||||
From: D Richard Felker III <dalias@aerifal.cx>
|
|
||||||
|
|
||||||
One is the way the baud rate setting is done. It worked fine in old
|
|
||||||
versions of gpm, but the special case for mman in the baud rate
|
|
||||||
setting code now actually *breaks* support for my Logitech MoiseMan
|
|
||||||
(the version with 4 buttons). Could you provide an way to initialize
|
|
||||||
it to 9600 baud just like all the other mice, without using the
|
|
||||||
special mman code that doesn't work for this mouse?
|
|
||||||
|
|
||||||
[...]
|
|
||||||
|
|
||||||
/*============================================================================*/
|
|
|
@ -1,339 +0,0 @@
|
||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
Version 2, June 1991
|
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
License is intended to guarantee your freedom to share and change free
|
|
||||||
software--to make sure the software is free for all its users. This
|
|
||||||
General Public License applies to most of the Free Software
|
|
||||||
Foundation's software and to any other program whose authors commit to
|
|
||||||
using it. (Some other Free Software Foundation software is covered by
|
|
||||||
the GNU Library General Public License instead.) You can apply it to
|
|
||||||
your programs, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
this service if you wish), that you receive source code or can get it
|
|
||||||
if you want it, that you can change the software or use pieces of it
|
|
||||||
in new free programs; and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
anyone to deny you these rights or to ask you to surrender the rights.
|
|
||||||
These restrictions translate to certain responsibilities for you if you
|
|
||||||
distribute copies of the software, or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must give the recipients all the rights that
|
|
||||||
you have. You must make sure that they, too, receive or can get the
|
|
||||||
source code. And you must show them these terms so they know their
|
|
||||||
rights.
|
|
||||||
|
|
||||||
We protect your rights with two steps: (1) copyright the software, and
|
|
||||||
(2) offer you this license which gives you legal permission to copy,
|
|
||||||
distribute and/or modify the software.
|
|
||||||
|
|
||||||
Also, for each author's protection and ours, we want to make certain
|
|
||||||
that everyone understands that there is no warranty for this free
|
|
||||||
software. If the software is modified by someone else and passed on, we
|
|
||||||
want its recipients to know that what they have is not the original, so
|
|
||||||
that any problems introduced by others will not reflect on the original
|
|
||||||
authors' reputations.
|
|
||||||
|
|
||||||
Finally, any free program is threatened constantly by software
|
|
||||||
patents. We wish to avoid the danger that redistributors of a free
|
|
||||||
program will individually obtain patent licenses, in effect making the
|
|
||||||
program proprietary. To prevent this, we have made it clear that any
|
|
||||||
patent must be licensed for everyone's free use or not licensed at all.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License applies to any program or other work which contains
|
|
||||||
a notice placed by the copyright holder saying it may be distributed
|
|
||||||
under the terms of this General Public License. The "Program", below,
|
|
||||||
refers to any such program or work, and a "work based on the Program"
|
|
||||||
means either the Program or any derivative work under copyright law:
|
|
||||||
that is to say, a work containing the Program or a portion of it,
|
|
||||||
either verbatim or with modifications and/or translated into another
|
|
||||||
language. (Hereinafter, translation is included without limitation in
|
|
||||||
the term "modification".) Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running the Program is not restricted, and the output from the Program
|
|
||||||
is covered only if its contents constitute a work based on the
|
|
||||||
Program (independent of having been made by running the Program).
|
|
||||||
Whether that is true depends on what the Program does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Program's
|
|
||||||
source code as you receive it, in any medium, provided that you
|
|
||||||
conspicuously and appropriately publish on each copy an appropriate
|
|
||||||
copyright notice and disclaimer of warranty; keep intact all the
|
|
||||||
notices that refer to this License and to the absence of any warranty;
|
|
||||||
and give any other recipients of the Program a copy of this License
|
|
||||||
along with the Program.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy, and
|
|
||||||
you may at your option offer warranty protection in exchange for a fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Program or any portion
|
|
||||||
of it, thus forming a work based on the Program, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) You must cause the modified files to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
b) You must cause any work that you distribute or publish, that in
|
|
||||||
whole or in part contains or is derived from the Program or any
|
|
||||||
part thereof, to be licensed as a whole at no charge to all third
|
|
||||||
parties under the terms of this License.
|
|
||||||
|
|
||||||
c) If the modified program normally reads commands interactively
|
|
||||||
when run, you must cause it, when started running for such
|
|
||||||
interactive use in the most ordinary way, to print or display an
|
|
||||||
announcement including an appropriate copyright notice and a
|
|
||||||
notice that there is no warranty (or else, saying that you provide
|
|
||||||
a warranty) and that users may redistribute the program under
|
|
||||||
these conditions, and telling the user how to view a copy of this
|
|
||||||
License. (Exception: if the Program itself is interactive but
|
|
||||||
does not normally print such an announcement, your work based on
|
|
||||||
the Program is not required to print an announcement.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Program,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Program, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Program.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Program
|
|
||||||
with the Program (or with a work based on the Program) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may copy and distribute the Program (or a work based on it,
|
|
||||||
under Section 2) in object code or executable form under the terms of
|
|
||||||
Sections 1 and 2 above provided that you also do one of the following:
|
|
||||||
|
|
||||||
a) Accompany it with the complete corresponding machine-readable
|
|
||||||
source code, which must be distributed under the terms of Sections
|
|
||||||
1 and 2 above on a medium customarily used for software interchange; or,
|
|
||||||
|
|
||||||
b) Accompany it with a written offer, valid for at least three
|
|
||||||
years, to give any third party, for a charge no more than your
|
|
||||||
cost of physically performing source distribution, a complete
|
|
||||||
machine-readable copy of the corresponding source code, to be
|
|
||||||
distributed under the terms of Sections 1 and 2 above on a medium
|
|
||||||
customarily used for software interchange; or,
|
|
||||||
|
|
||||||
c) Accompany it with the information you received as to the offer
|
|
||||||
to distribute corresponding source code. (This alternative is
|
|
||||||
allowed only for noncommercial distribution and only if you
|
|
||||||
received the program in object code or executable form with such
|
|
||||||
an offer, in accord with Subsection b above.)
|
|
||||||
|
|
||||||
The source code for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For an executable work, complete source
|
|
||||||
code means all the source code for all modules it contains, plus any
|
|
||||||
associated interface definition files, plus the scripts used to
|
|
||||||
control compilation and installation of the executable. However, as a
|
|
||||||
special exception, the source code distributed need not include
|
|
||||||
anything that is normally distributed (in either source or binary
|
|
||||||
form) with the major components (compiler, kernel, and so on) of the
|
|
||||||
operating system on which the executable runs, unless that component
|
|
||||||
itself accompanies the executable.
|
|
||||||
|
|
||||||
If distribution of executable or object code is made by offering
|
|
||||||
access to copy from a designated place, then offering equivalent
|
|
||||||
access to copy the source code from the same place counts as
|
|
||||||
distribution of the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
4. You may not copy, modify, sublicense, or distribute the Program
|
|
||||||
except as expressly provided under this License. Any attempt
|
|
||||||
otherwise to copy, modify, sublicense or distribute the Program is
|
|
||||||
void, and will automatically terminate your rights under this License.
|
|
||||||
However, parties who have received copies, or rights, from you under
|
|
||||||
this License will not have their licenses terminated so long as such
|
|
||||||
parties remain in full compliance.
|
|
||||||
|
|
||||||
5. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Program or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Program (or any work based on the
|
|
||||||
Program), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Program or works based on it.
|
|
||||||
|
|
||||||
6. Each time you redistribute the Program (or any work based on the
|
|
||||||
Program), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute or modify the Program subject to
|
|
||||||
these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties to
|
|
||||||
this License.
|
|
||||||
|
|
||||||
7. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Program at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Program by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Program.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under
|
|
||||||
any particular circumstance, the balance of the section is intended to
|
|
||||||
apply and the section as a whole is intended to apply in other
|
|
||||||
circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system, which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
8. If the distribution and/or use of the Program is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Program under this License
|
|
||||||
may add an explicit geographical distribution limitation excluding
|
|
||||||
those countries, so that distribution is permitted only in or among
|
|
||||||
countries not thus excluded. In such case, this License incorporates
|
|
||||||
the limitation as if written in the body of this License.
|
|
||||||
|
|
||||||
9. The Free Software Foundation may publish revised and/or new versions
|
|
||||||
of the General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Program
|
|
||||||
specifies a version number of this License which applies to it and "any
|
|
||||||
later version", you have the option of following the terms and conditions
|
|
||||||
either of that version or of any later version published by the Free
|
|
||||||
Software Foundation. If the Program does not specify a version number of
|
|
||||||
this License, you may choose any version ever published by the Free Software
|
|
||||||
Foundation.
|
|
||||||
|
|
||||||
10. If you wish to incorporate parts of the Program into other free
|
|
||||||
programs whose distribution conditions are different, write to the author
|
|
||||||
to ask for permission. For software which is copyrighted by the Free
|
|
||||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
|
||||||
make exceptions for this. Our decision will be guided by the two goals
|
|
||||||
of preserving the free status of all derivatives of our free software and
|
|
||||||
of promoting the sharing and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
|
||||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
|
||||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
|
||||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
|
||||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
|
||||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
|
||||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
|
||||||
REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
|
||||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
|
||||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
|
||||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
|
||||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
|
||||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
|
||||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) 19yy <name of author>
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program is interactive, make it output a short notice like this
|
|
||||||
when it starts in an interactive mode:
|
|
||||||
|
|
||||||
Gnomovision version 69, Copyright (C) 19yy name of author
|
|
||||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, the commands you use may
|
|
||||||
be called something other than `show w' and `show c'; they could even be
|
|
||||||
mouse-clicks or menu items--whatever suits your program.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
|
||||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1989
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
This General Public License does not permit incorporating your program into
|
|
||||||
proprietary programs. If your program is a subroutine library, you may
|
|
||||||
consider it more useful to permit linking proprietary applications with the
|
|
||||||
library. If this is what you want to do, use the GNU Library General
|
|
||||||
Public License instead of this License.
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,35 +0,0 @@
|
||||||
* From 1.20.1 to 1.20.2:
|
|
||||||
o This is a "gpm is still alive and broken"-release!
|
|
||||||
o Have a look at included file doc/README.1.20.2 for more information.
|
|
||||||
|
|
||||||
* From 1.20.0 to 1.20.1: (bugfixes/code clean)
|
|
||||||
o synaptics ps2 touchpad support
|
|
||||||
o code cleanup in various main files
|
|
||||||
o prototype of mouse support for n-mice. expect final in 1.20.3.
|
|
||||||
|
|
||||||
* From 1.19.6 to 1.20.0: (bugfix/new features/code clean release)
|
|
||||||
o removed compile problems
|
|
||||||
o objdir/ support without problems
|
|
||||||
o cleaned up internal message functions
|
|
||||||
o cleanup up most of tab/spaces mixture. Now we use 3 spaces for indention
|
|
||||||
o added more security bug fixing patches
|
|
||||||
o clean {g,m,}awk support
|
|
||||||
o clean ps2 initialization (allows using ps2 mouse after you used synps!)
|
|
||||||
o gpm clients can't cause gpm do die.
|
|
||||||
|
|
||||||
* From 1.19.5 to 1.19.6: (just a bugfix release)
|
|
||||||
o bugfixes in Makefiles (now a 'make all install' should not make any errors)
|
|
||||||
o bugfix in libgpm, mouse-test, gpm
|
|
||||||
o doc/gpm.doc is up-to-date and the manfiles, too. info is still missing.
|
|
||||||
|
|
||||||
* From 1.19.4 to 1.19.5: (minor fixes and one bugfix)
|
|
||||||
o libc5 and linux 2.0 support in again
|
|
||||||
o cleaned up the directory tree
|
|
||||||
o many small changes to the Makefiles
|
|
||||||
o devfs seperated into new file
|
|
||||||
o Synaptics 4 Button Touchpad support
|
|
||||||
o new daemon name
|
|
||||||
|
|
||||||
* From 1.19.3 to 1.19.4:
|
|
||||||
o libc5 and linux 2.0 support removed unfortuanally!
|
|
||||||
o primary devfs support (broken)
|
|
|
@ -1,147 +0,0 @@
|
||||||
|
|
||||||
This is the list of all the files included in the current
|
|
||||||
distribution tar ball. Actually, Makefile used this very list to
|
|
||||||
know what to include in the tar. Now we include everything
|
|
||||||
is still there after a 'make distclean'
|
|
||||||
|
|
||||||
SOURCE FILES
|
|
||||||
------------
|
|
||||||
|
|
||||||
src/
|
|
||||||
gpm.c main engine of the daemon
|
|
||||||
gpn.c support functions
|
|
||||||
report.c message management (replaces debuglog.c) [inside gpm]
|
|
||||||
report-lib.c message management [inside the lib]
|
|
||||||
special.c special functions
|
|
||||||
mice.c support for (almost) all the pointer types
|
|
||||||
twiddler.c the twiddler keyboard needs special code
|
|
||||||
synaptics.c and the synaptics table too
|
|
||||||
|
|
||||||
liblow.c low-level gpm library
|
|
||||||
libhigh.c high-level gpm library
|
|
||||||
libxtra.c optional and little-used library functions
|
|
||||||
libcurses.c curses-like functions
|
|
||||||
|
|
||||||
mev.c sample mouse-event application
|
|
||||||
hltest.c sample use of the high-level gpm library
|
|
||||||
mouse-test.c old tool to help detecting the pointer protocol
|
|
||||||
disable-paste.c very short application to forget the current selection
|
|
||||||
gpm-root.y a sample default handler
|
|
||||||
gpm-root.c derived from the above using bison
|
|
||||||
|
|
||||||
headers/
|
|
||||||
gpm.h installed gpm header
|
|
||||||
gpmCfg.h default configuration
|
|
||||||
gpmInt.h internal declaration
|
|
||||||
gpm-proto.h proposal for a new protocol, currently unused
|
|
||||||
message.h messages
|
|
||||||
synaptics.h synaptics tablet implementation
|
|
||||||
twiddler.h twiddler keyboaard implementation
|
|
||||||
|
|
||||||
config.h.in [build by autoheader] template for config.h
|
|
||||||
[build by ./configure]
|
|
||||||
|
|
||||||
PATCHES
|
|
||||||
-------
|
|
||||||
|
|
||||||
patches/
|
|
||||||
done/ applied/refused/too old patches
|
|
||||||
todo/ patches still need to be applied or refused
|
|
||||||
|
|
||||||
|
|
||||||
DEFAULT/SAMPLE CONFIGURATION FILES
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
conf/
|
|
||||||
gpm-root.conf sample usesable by gpm-root
|
|
||||||
gpm-twiddler.conf default configuration for the twiddler keyboard
|
|
||||||
gpm-syn.conf default configuration for the synaptics touchpad
|
|
||||||
|
|
||||||
|
|
||||||
FILES USED IN THE BUILD PROCESS
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
configure.in source for configure
|
|
||||||
configure script to autoconfigure the package
|
|
||||||
aclocal.m4 support declaration for configure.in
|
|
||||||
acconfig.h
|
|
||||||
Makefile.in the source for Makefile, used by configure
|
|
||||||
Makefile.include.in the source for Makefile.include, used by other Makefiles
|
|
||||||
install-sh fallback install script if no install command is found
|
|
||||||
|
|
||||||
|
|
||||||
DOCUMENTATION (currently not up-to-date)
|
|
||||||
---------------
|
|
||||||
|
|
||||||
README introductory information, and credits (incomplete list)
|
|
||||||
COPYING GNU GPL
|
|
||||||
Changelog the log of changes - a lot of changes :)
|
|
||||||
Changes Put together all important changes from one to another release
|
|
||||||
MANIFEST this file
|
|
||||||
|
|
||||||
doc/
|
|
||||||
Announce original announce for version 1.0
|
|
||||||
Makefile.in template for doc/Makefile
|
|
||||||
|
|
||||||
infofilter preprocessor to create a .texi source file from my own docs
|
|
||||||
manpager tool to extract manual pages from the main document file
|
|
||||||
mktxt tool to extract a ``decent'' text file from the info one
|
|
||||||
|
|
||||||
# FAQ / READMEs
|
|
||||||
FAQ Frequently asked/answered questions
|
|
||||||
README.gunze how to use the gunze touchscreen
|
|
||||||
README.microtouch how to use the microtouch touch screen
|
|
||||||
README.synaptics how to use the synaptics tablet
|
|
||||||
README.twiddler how to use the twiddler keyboard
|
|
||||||
|
|
||||||
doc.gpm.in template of gpm.doc (substitutes version)
|
|
||||||
doc.gpm the source for the ``real'' documentation
|
|
||||||
gpmdoc.ps generated from doc.gpm using doc/infofilter, texinfo and TeX
|
|
||||||
gpm.info generated from doc.gpm using doc/infofilter and makeinfo
|
|
||||||
gpmdoc.txt generated from gpm.info using doc/mktxt
|
|
||||||
|
|
||||||
# MANPAGES
|
|
||||||
gpm.8 man page, generated from doc.gpm using doc/manpager
|
|
||||||
mev.1 man page, generated from doc.gpm using doc/manpager
|
|
||||||
gpm-root.1 man page, generated from doc.gpm using doc/manpager
|
|
||||||
gpm-types.7 man page, generated from doc.gpm using doc/manpager
|
|
||||||
mouse-test.1 man page, generated from doc.gpm using doc/manpager
|
|
||||||
|
|
||||||
support/ contains information about mouse support
|
|
||||||
this includes mails and other information from the vendors.
|
|
||||||
|
|
||||||
|
|
||||||
SUPPORT MATERIAL (currently not installed)
|
|
||||||
---------------
|
|
||||||
|
|
||||||
contrib/
|
|
||||||
Makefile.in when you read everything to here you should know what it is
|
|
||||||
|
|
||||||
emacs/
|
|
||||||
t-mouse.el emacs client (needs mev installed)
|
|
||||||
t-mouse.elc compiled form of the emacs client
|
|
||||||
exec.el allow emacs to execute lisp commands from the command line
|
|
||||||
|
|
||||||
init/
|
|
||||||
gpm.init sample init script (Redhat?)
|
|
||||||
|
|
||||||
scripts/
|
|
||||||
create_vcs script to create /dev/vcs* devices (redundant)
|
|
||||||
gunze-setup same, for the gunze touchscreen
|
|
||||||
microtouch-setup a program to calibrate the microtouch touchscreen
|
|
||||||
mkinstalldirs creates the installation directories (currently unused)
|
|
||||||
test_gpm test gpm. use it, to copy the gpmdir, ./configure,make
|
|
||||||
|
|
||||||
other/ other contributions
|
|
||||||
|
|
||||||
|
|
||||||
SAMPLE GPM CLIENT [ currently not available/I don't know why :( ]
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
sample/
|
|
||||||
README explanation of how it works
|
|
||||||
Makefile.in sample template for Makefile
|
|
||||||
configure.in sample template for configure
|
|
||||||
gpm-xterm.c support file, replacement for libgpm
|
|
||||||
gpm-xterm.h header, replacement for gpm.h
|
|
||||||
rmev.c sample client application
|
|
|
@ -1,123 +0,0 @@
|
||||||
# -*-makefile-*- (gpm/main)
|
|
||||||
#
|
|
||||||
# Copyright 1994,1997 rubini@linux.it
|
|
||||||
# Copyright 1997 dickey@clark.net
|
|
||||||
# Copyright (C) 1998 Ian Zimmerman <itz@rahul.net>
|
|
||||||
# Copyright (C) 2001 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
#
|
|
||||||
|
|
||||||
SHELL = /bin/sh
|
|
||||||
srcdir = @srcdir@
|
|
||||||
top_srcdir = @top_srcdir@
|
|
||||||
top_builddir = .
|
|
||||||
|
|
||||||
include Makefile.include
|
|
||||||
|
|
||||||
# allow CFLAGS to be overriden from make command line
|
|
||||||
# ideally one would never have to write this rule again, but the GNU
|
|
||||||
# makefile standards are at cross-purposes: CFLAGS is reserved for
|
|
||||||
# user-overridable flags, but it's also all the implicit rule looks at.
|
|
||||||
# missing ?
|
|
||||||
|
|
||||||
SUBDIRS = src doc contrib
|
|
||||||
|
|
||||||
### simple, but effective rules
|
|
||||||
|
|
||||||
all: do-all
|
|
||||||
|
|
||||||
dep:
|
|
||||||
touch src/$(DEPFILE) # to prevent unecessary warnings
|
|
||||||
make -C src dep
|
|
||||||
|
|
||||||
check: all
|
|
||||||
|
|
||||||
uninstall: do-uninstall
|
|
||||||
|
|
||||||
clean: do-clean
|
|
||||||
rm -fr autom4te.cache
|
|
||||||
|
|
||||||
Makefile: $(srcdir)/Makefile.in config.status
|
|
||||||
./config.status
|
|
||||||
|
|
||||||
config.status: $(srcdir)/configure
|
|
||||||
if [ -f config.status ]; then $(SHELL) config.status --recheck; \
|
|
||||||
else ./configure; fi
|
|
||||||
|
|
||||||
### INSTALL
|
|
||||||
|
|
||||||
install: check installdirs do-install
|
|
||||||
|
|
||||||
install-strip:
|
|
||||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) $(STRIP)' install
|
|
||||||
|
|
||||||
installdirs:
|
|
||||||
$(MKDIR) $(libdir) $(bindir) $(sbindir) $(includedir) $(sysconfdir); \
|
|
||||||
if test "x@ELISP@" != "x" ; then \
|
|
||||||
$(MKDIR) $(lispdir) ; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
### GENERIC
|
|
||||||
|
|
||||||
# do-all goes to all subdirectories and does all
|
|
||||||
do-%: dep
|
|
||||||
@target=`echo $@ | $(SED) -e 's/^do-//'`; \
|
|
||||||
for i in $(SUBDIRS) ; do \
|
|
||||||
if test -f ./$$i/Makefile ; then \
|
|
||||||
$(MAKE) -C ./$$i $${target} || exit 1 ;\
|
|
||||||
else \
|
|
||||||
true; \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
# Configure & unconfigure
|
|
||||||
|
|
||||||
# Maintainer portion, use at your own risk
|
|
||||||
|
|
||||||
barf:
|
|
||||||
@echo 'This command is intended for maintainers to use; it'
|
|
||||||
@echo 'deletes files that may need special tools to rebuild.'
|
|
||||||
@echo 'If you want to continue, please press return.'
|
|
||||||
@read -p "Hit Ctrl+C to abort." anything
|
|
||||||
|
|
||||||
|
|
||||||
# who / what does need tags
|
|
||||||
TAGS: $(SRCS) $(HDRS) src/prog/gpm-root.y do-TAGS
|
|
||||||
cd $(srcdir) && $(ETAGS) -o TAGS $(SRCS) $(HDRS) src/prog/gpm-root.y
|
|
||||||
|
|
||||||
# Do the the next release
|
|
||||||
|
|
||||||
# 1. Cleanup the tree, remove all generated files and so on
|
|
||||||
distclean: barf clean do-clean do-distclean
|
|
||||||
rm -f config.log config.status config.cache Makefile Makefile.include
|
|
||||||
rm -f aclocal.m4 configure config.h.in
|
|
||||||
rm -rf gpm-$(release) gpm-$(release).tar.bz2 gpm-$(release).tar.gz
|
|
||||||
rm -f src/$(DEPFILE)
|
|
||||||
|
|
||||||
# STOPPPED HERE
|
|
||||||
gpm-$(release): distclean do-distclean
|
|
||||||
mkdir -p gpm-$(release)
|
|
||||||
for file in $(srcdir)/*; do \
|
|
||||||
if [ "`basename $$file`" != "$@" ]; then \
|
|
||||||
cp $$file gpm-$(release) -r; \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
|
|
||||||
# 2. configure headers, produce new configure script
|
|
||||||
distconf: configure.in aclocal.m4
|
|
||||||
autoheader && autoconf
|
|
||||||
|
|
||||||
# make this clean...
|
|
||||||
gpm-$(release).tar: gpm-$(release)
|
|
||||||
$(TAR) cf - gpm-$(release) > $@
|
|
||||||
|
|
||||||
gpm-$(release).tar.gz: gpm-$(release).tar
|
|
||||||
gzip -9 -c gpm-$(release).tar > $@
|
|
||||||
|
|
||||||
gpm-$(release).tar.bz2: gpm-$(release).tar
|
|
||||||
bzip2 -k gpm-$(release).tar
|
|
||||||
|
|
||||||
# 3. Put package together into .tar.gz and .tar.bz2
|
|
||||||
dist: distclean distconf gpm-$(release).tar.bz2 gpm-$(release).tar.gz
|
|
||||||
rm gpm-$(release).tar
|
|
||||||
rm -r gpm-$(release)
|
|
|
@ -1,67 +0,0 @@
|
||||||
# -*-makefile-*- (gpm/include)
|
|
||||||
#
|
|
||||||
# Copyright (C) 2001 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Set ROOT, if you want to install to a virtual root.
|
|
||||||
# You can do that also via commandline: make ROOT=/mnt/newroot install
|
|
||||||
#ROOT =
|
|
||||||
|
|
||||||
SHELL = /bin/sh
|
|
||||||
|
|
||||||
prefix = @prefix@
|
|
||||||
exec_prefix = @exec_prefix@
|
|
||||||
|
|
||||||
# directories
|
|
||||||
libdir = $(ROOT)@libdir@
|
|
||||||
datadir = $(ROOT)@datadir@
|
|
||||||
bindir = $(ROOT)@bindir@
|
|
||||||
sbindir = $(ROOT)@sbindir@
|
|
||||||
includedir = $(ROOT)@includedir@
|
|
||||||
sysconfdir = $(ROOT)@sysconfdir@
|
|
||||||
mandir = $(ROOT)@mandir@
|
|
||||||
man1dir = $(mandir)/man1
|
|
||||||
man7dir = $(mandir)/man7
|
|
||||||
man8dir = $(mandir)/man8
|
|
||||||
infodir = $(ROOT)@infodir@
|
|
||||||
|
|
||||||
# it would be nice to figure this out automatically, but the Emacs
|
|
||||||
# load path often has many elements, most of them reserved for
|
|
||||||
# specialised packages like w3 and auctex.
|
|
||||||
lispdir = @lispdir@
|
|
||||||
|
|
||||||
# programs
|
|
||||||
CC = @CC@
|
|
||||||
RANLIB = @RANLIB@
|
|
||||||
YACC = @YACC@
|
|
||||||
INSTALL = @INSTALL@
|
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
|
||||||
LN_S = @LN_S@
|
|
||||||
EMACS = @EMACS@
|
|
||||||
ELISP = @ELISP@
|
|
||||||
SHLIB = @SHLIB@
|
|
||||||
SED = @SED@
|
|
||||||
DIFF = @DIFF@
|
|
||||||
TEX = @TEX@
|
|
||||||
TEXINDEX = @TEXINDEX@
|
|
||||||
DVIPS = @DVIPS@
|
|
||||||
MAKEINFO = @MAKEINFO@ --no-split
|
|
||||||
TEXI2HTML = texi2html -monolithic
|
|
||||||
STRIP = -s
|
|
||||||
|
|
||||||
AR = ar
|
|
||||||
ETAGS = etags
|
|
||||||
TAR = tar
|
|
||||||
AWK = awk
|
|
||||||
CP = cp -a
|
|
||||||
MKDIR = mkdir -p # linux specific, but who cares ?
|
|
||||||
# gpm is linux specific, too.
|
|
||||||
RM = rm
|
|
||||||
|
|
||||||
|
|
||||||
DEPFILE = .depend
|
|
||||||
|
|
||||||
# general
|
|
||||||
release = @release@
|
|
|
@ -1,341 +0,0 @@
|
||||||
/*
|
|
||||||
* README -- gpm 1.xx
|
|
||||||
*
|
|
||||||
* Copyright 1995-2000 rubini@linux.it (Alessandro Rubini)
|
|
||||||
* Copyright 2001-2004 nico-gpm@schottelius.org (Nico Schottelius)
|
|
||||||
*
|
|
||||||
*******/
|
|
||||||
|
|
||||||
The gpm (general purpose mouse) daemon tries to be a useful mouse
|
|
||||||
server for applications running on the Linux console. Its roots are
|
|
||||||
in the "selection" package, by Andrew Haylett, and the original code
|
|
||||||
comes from selection itself. This package is intended as a replacement
|
|
||||||
for "selection", to provide additional facilities. From 0.18 onward
|
|
||||||
gpm supports xterm as well, so you can run mouse-sensitive
|
|
||||||
applications under X, and you can easily write curses applications
|
|
||||||
which support the mouse on both the Linux console and xterm. The xterm
|
|
||||||
code is portable to any U*x flavour (look at sample/README).
|
|
||||||
|
|
||||||
The first clients have been "The Midnight Commander", by Miguel de
|
|
||||||
Icaza and an emacs library included in this release. Recent dialog
|
|
||||||
distributions and the Jed editor use gpm as well, and the same do
|
|
||||||
several custom applications.
|
|
||||||
|
|
||||||
There are still some new features to add (f.i. clean devfs support).
|
|
||||||
Some of gpm's code needs a cleanup.
|
|
||||||
|
|
||||||
If you want to make a patch to gpm, please read doc/HACK_GPM.
|
|
||||||
|
|
||||||
For additionally documentation and other READMEs have a look into doc/.
|
|
||||||
|
|
||||||
=========== MAINTENANCE
|
|
||||||
|
|
||||||
As of 1.19.4, gpm is officially maintained again. Most of the README is written
|
|
||||||
by Alessandro Rubine, only minor changes are made by me.
|
|
||||||
|
|
||||||
=========== MAILING LIST
|
|
||||||
|
|
||||||
The mailing list devoted to gpm is "gpm@lists.linux.it"
|
|
||||||
The list is managed by Mailman and is currently open,
|
|
||||||
so non-subscribers are allowed to post.
|
|
||||||
|
|
||||||
In order to subscribe to the mailing list, visit
|
|
||||||
http://www.linux.it/mailman/listinfo/gpm or send a message
|
|
||||||
with "subscribe" in its body to gpm-request@lists.linux.it . For example:
|
|
||||||
|
|
||||||
echo subscribe | mail gpm-request@lists.linux.it
|
|
||||||
|
|
||||||
=========== DOWNLOAD / HOMEPAGE
|
|
||||||
|
|
||||||
The latest releases can always be found in one of the following places:
|
|
||||||
|
|
||||||
ftp://arcana.linux.it/pub/gpm
|
|
||||||
ftp://ftp.linux.it/pub/People/rubini/gpm/
|
|
||||||
http:// or ftp://ftp.schottelius.org/pub/linux/gpm
|
|
||||||
|
|
||||||
The current homepage for gpm is available at
|
|
||||||
|
|
||||||
http://linux.schottelius.org/gpm/
|
|
||||||
|
|
||||||
GPM is now using monotone as its version control system.
|
|
||||||
It's hosting site is linux.schottelius.org, the collection is
|
|
||||||
org.schottelius.gpm.
|
|
||||||
|
|
||||||
Here's a small manual howto get gpm via monotone:
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
|
|
||||||
# create a database
|
|
||||||
scice% monotone --db=gpm.db db init
|
|
||||||
|
|
||||||
# get the server key
|
|
||||||
scice% wget -q http://linux.schottelius.org/gpm/server-key.pub
|
|
||||||
|
|
||||||
# read the server key
|
|
||||||
scice% monotone --db=gpm.db read < server-key.pub
|
|
||||||
monotone: read 1 packet
|
|
||||||
|
|
||||||
# do an anonymous pull
|
|
||||||
scice% monotone --key="" --db=gpm.db pull linux.schottelius.org org.schottelius.gpm
|
|
||||||
monotone: warning: doing anonymous pull
|
|
||||||
monotone: rebuilding merkle trees for collection org.schottelius.gpm
|
|
||||||
monotone: connecting to linux.schottelius.org
|
|
||||||
monotone: [bytes in: 722110] [bytes out: 7405]
|
|
||||||
monotone: exchanged goodbyes and flushed output on fd 7 (peer linux.schottelius.org), disconnecting
|
|
||||||
|
|
||||||
# extract source from the database to a directory
|
|
||||||
scice% monotone --db=gpm.db --branch=org.schottelius.gpm checkout your-destination-directory
|
|
||||||
monotone: fetching heads of branch 'org.schottelius.gpm'
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
|
|
||||||
GPM's cvs tree (and cvs in general) is DEPRECATED.
|
|
||||||
|
|
||||||
Still, there is an 'old' cvs tree available:
|
|
||||||
|
|
||||||
$ cvs -d :pserver:cvs@ar.linux.it:/data/cvs login
|
|
||||||
(Logging in to cvs@ar.linux.it)
|
|
||||||
CVS password: (type "cvs" here)
|
|
||||||
$ cvs -d :pserver:cvs@ar.linux.it:/data/cvs checkout gpm
|
|
||||||
|
|
||||||
|
|
||||||
=========== COMPILING AND INSTALLING
|
|
||||||
|
|
||||||
The package uses autoconf as of 2.12. Use "./configure && make" to
|
|
||||||
compile the gpm suite. To install "make install". This installs
|
|
||||||
everything under the "prefix" directory, which by default is
|
|
||||||
/usr/local.
|
|
||||||
|
|
||||||
Use "./configure --prefix=/usr" if you want to install under /usr
|
|
||||||
instead of /usr/local.
|
|
||||||
|
|
||||||
Exectuable files are installed in $(prefix)/bin (except the gpm daemon
|
|
||||||
in $(prefix)/sbin), libraries in $(prefix)/lib, man pages in
|
|
||||||
$(prefix)/man, the lisp library in the proper location for emacs-list
|
|
||||||
files (detected during the "configure" step); info files are installed
|
|
||||||
under $(prefix)/info.
|
|
||||||
|
|
||||||
If you would like to 'clean'up very tidy, use distclean. Don't forget to use
|
|
||||||
make distclean config! Otherwise there will be no configure script!
|
|
||||||
|
|
||||||
If any errors occur, please report them to me. Something like this
|
|
||||||
could be an easy (though brutal) way to do it:
|
|
||||||
make clean;(uname -a; make) | mail -s "gpm compile err." nico-gpm@schottelius.org
|
|
||||||
|
|
||||||
What remains to do after installation is a little configuration
|
|
||||||
|
|
||||||
=========== CONFIGURING
|
|
||||||
|
|
||||||
Configuration is optional...
|
|
||||||
|
|
||||||
* You would like to tell emacs to use t-mouse.el when appropriate. Add
|
|
||||||
the following lines to your own .emacs (in your home
|
|
||||||
directory), or in the /usr/lib/emacs/site-lisp/default
|
|
||||||
|
|
||||||
(if (and (string-match ".*-linux" system-configuration)
|
|
||||||
(not window-system)
|
|
||||||
(or (string-match "linux" (getenv "TERM"))
|
|
||||||
(string-match "con.*" (getenv "TERM"))))
|
|
||||||
(load-library "t-mouse"))
|
|
||||||
|
|
||||||
* If you want to use gpm-root, copy gpm-root.conf to your /usr/etc
|
|
||||||
directory, test it out and then edit it to suit your feels.
|
|
||||||
|
|
||||||
* You'd like to name the gpm info file inside /usr/info/dir. Just insert
|
|
||||||
the line
|
|
||||||
* gpm: (gpm.info). A mouse server for the Linux console
|
|
||||||
at the proper place. Note that this is usually automatically
|
|
||||||
performed if you install a package prepared for your own
|
|
||||||
distribution.
|
|
||||||
|
|
||||||
* To invoke gpm (and gpm-root) at system boot, add something like this
|
|
||||||
to your /etc/rc.d/rc.local
|
|
||||||
|
|
||||||
/usr/sbin/gpm -t msc -m /dev/tts/0 &
|
|
||||||
/usr/bin/gpm-root &
|
|
||||||
|
|
||||||
If you are running the new setup of SysVinit, you should better
|
|
||||||
add a "gpm" script in /etc/rc.d/rc.init and install it in your
|
|
||||||
runlevels in the usual way (this is usually included in your
|
|
||||||
distribution as well)
|
|
||||||
|
|
||||||
You may want to put the mouse server at a higher priority: in
|
|
||||||
this case invoke instead "/usr/bin/nice -n -20 /usr/sbin/gpm -t
|
|
||||||
msc"
|
|
||||||
|
|
||||||
The program goes to the background by itself, unless
|
|
||||||
it is run with debuging enabled (see the -D option in the
|
|
||||||
documentation).
|
|
||||||
|
|
||||||
========== DOCS
|
|
||||||
|
|
||||||
The directory "./doc" holds the documentation. The release embeds a
|
|
||||||
postscript file, slightly reduced to save paper (doc/gpm2.ps), an info
|
|
||||||
one (doc/gpm.info) and a text-only version (doc/gpmdoc.txt -- but
|
|
||||||
without table of contents, for now). Man pages are automatically
|
|
||||||
extracted from the info file, and are installed with "make install"
|
|
||||||
|
|
||||||
=========== BUG REPORTS
|
|
||||||
|
|
||||||
Before sending bug reports, please look at the file "FAQ",
|
|
||||||
which outlines some known problems, and how to deal with them.
|
|
||||||
|
|
||||||
If your bug isn't fixed by reading there, please report it to me,
|
|
||||||
without getting angry with me if things don't work at first trial
|
|
||||||
(but they usually work).
|
|
||||||
|
|
||||||
Bug reports are best sent to the gpm mailing list (see above) or to me
|
|
||||||
via email, if you use personal mail please include the string "gpm"
|
|
||||||
somewhere in the subject line. This will help my filters in sorting
|
|
||||||
things out.
|
|
||||||
|
|
||||||
* When compilation fails I need your kernel version ("uname -a"), the
|
|
||||||
compiler version ("gcc -v") and the library version ("ls -l /lib" or,
|
|
||||||
better "ldd /usr/sbin/gpm"). And the compiler messages, obviously.
|
|
||||||
|
|
||||||
* When a program hangs or segfaults, please reinvoke the program under strace:
|
|
||||||
strace -tf -o /tmp/trace.gpm gpm -t msc
|
|
||||||
^^^^^^^^^^ put your true cmdline here.
|
|
||||||
Then send me /tmp/trace.gpm* (they may be one or two files, according
|
|
||||||
to the strace version), and a description of how you reproduce the problem.
|
|
||||||
|
|
||||||
The last resort is a core dump, but I'll ask it personally if I have real
|
|
||||||
difficulties in tracing out your problem.
|
|
||||||
|
|
||||||
=========== CREDITS
|
|
||||||
|
|
||||||
The following people contributed to gpm, in chronological order. This
|
|
||||||
list used to reside in a different file, but it's better for it to stand
|
|
||||||
out in the README
|
|
||||||
|
|
||||||
Andrew Haylett (ajh@gec-mrc.co.uk)
|
|
||||||
donated "selection" to the linux community, so I could get
|
|
||||||
the idea and the code. A few others contributed to selection,
|
|
||||||
but I lost track of their contributions and names.
|
|
||||||
|
|
||||||
Steven S. Dick (ssd@nevets.oau.org)
|
|
||||||
fixed a pair of bugs in early gpm versions.
|
|
||||||
|
|
||||||
Miguel de Icaza (miguel@roxanne.nuclecu.unam.mx)
|
|
||||||
helped fixing some bugs and provided a good client to test
|
|
||||||
my server. He helped a lot in testing the various pre-releases.
|
|
||||||
|
|
||||||
Olav Woelfelschneider (wosch@rbg.informatik.th-darmstadt.de)
|
|
||||||
fixed 0.10 with MouseSystems compatible mice.
|
|
||||||
|
|
||||||
Janne Kukonlehto (jtklehto@stekt.oulu.fi)
|
|
||||||
provided xterm mouse decoding to be stolen by me.
|
|
||||||
|
|
||||||
Rick Lyons (rick@razorback.brisnet.org.au)
|
|
||||||
fixed a bug in gpm-0.9.
|
|
||||||
|
|
||||||
Reuben Sumner (rasumner@undergrad.math.uwaterloo.ca)
|
|
||||||
helped fixing behaviour with "-t bm".
|
|
||||||
|
|
||||||
Larry Bartholdi (lbartho@scsun.unige.ch)
|
|
||||||
pinpointed an error in t-mouse-suspend
|
|
||||||
and provided good suggestions for 0.97.
|
|
||||||
|
|
||||||
Mark Lord (mlord@bnr.ca)
|
|
||||||
ported to Dexxa/Logitech mice and gave feedback several times.
|
|
||||||
|
|
||||||
Stefan Giessler (stg@gandalf.han.de)
|
|
||||||
fixed some problems with gpm-root and
|
|
||||||
suggested to put gpm in the background (0.97).
|
|
||||||
|
|
||||||
Roman Shapiro
|
|
||||||
helped with the Logitech MouseMan.
|
|
||||||
|
|
||||||
Andries Brouwer (aeb@cwi.nl)
|
|
||||||
Provided a Latin-1 LUT for chars, and enhanced
|
|
||||||
lut-loading code (0.98).
|
|
||||||
|
|
||||||
Adrian Johnson (ajohnson@apanix.apana.org.au)
|
|
||||||
Gave good feedback and ideas for the 0.98's
|
|
||||||
|
|
||||||
Stephen Lee (sl14@crux1.cit.cornell.edu)
|
|
||||||
Helped a lot with the damned MouseMan protocol (0.98 and 1.0)
|
|
||||||
|
|
||||||
John van Leeuwen (johnvl@einstein.et.tudelft.nl)
|
|
||||||
Outlined and fixed a pair of bugs in gpm-root 0.98
|
|
||||||
|
|
||||||
Alvar Bray (alvar@meiko.co.uk)
|
|
||||||
Pointed out an error with awk (0.99)
|
|
||||||
|
|
||||||
David A. van Leeuwen (david@tm.tno.nl)
|
|
||||||
Helped with chord-middle protocols (1.0)
|
|
||||||
|
|
||||||
Pavel Kankovsky (KAN@frode.dcit.cz)
|
|
||||||
Open /dev/ttyxx instead of /dev/console in the lib (1.01)
|
|
||||||
|
|
||||||
Mark Shadley (shadcat@catcher.com)
|
|
||||||
Helped in turning to ELF (1.01 and 1.02) and in fixing
|
|
||||||
horrible bugs of mine. Without his help 1.03 wouldn't be there.
|
|
||||||
|
|
||||||
Lou Sortman (lou@lounix4.conc.tdsnet.com)
|
|
||||||
Added support for glidepoint mice within "-t mman". (1.05)
|
|
||||||
|
|
||||||
Marc Meis (100334.1426@compuserve.com)
|
|
||||||
Provided support for absolute pointing devices, and in
|
|
||||||
particular for the ncr3125 pen. (1.05)
|
|
||||||
|
|
||||||
Michael Plass (Michael_Plass.PARC@xerox.com)
|
|
||||||
Fixed a damned bug in middle button decoding (M_ms) (1.07)
|
|
||||||
|
|
||||||
Markus Gutschke (gutschk@uni-muenster.de)
|
|
||||||
Provided a better re-encoding for "-R" (1.10)
|
|
||||||
|
|
||||||
Karsten Ballueder (Karsten@piobelix.physik.uni-karlsruhe.de)
|
|
||||||
Suggested the reboot compile-time option (1.10)
|
|
||||||
|
|
||||||
John Davis (davis@space.mit.edu)
|
|
||||||
Found and fixed a buglet in liblow.c for some jed users (1.10)
|
|
||||||
|
|
||||||
Julian Thompson (jrt@miel.demon.co.uk)
|
|
||||||
Fixed a buglet in gpm-root (1.10)
|
|
||||||
|
|
||||||
Dave Flater (dave@universe.digex.net)
|
|
||||||
Removed a typo in the disabled decoder for ms-3b (1.11)
|
|
||||||
|
|
||||||
Thomas E. Dickey (dickey@clark.net)
|
|
||||||
Ported to autoconf (1.11)
|
|
||||||
|
|
||||||
Pavel Machek (pavel@ucw.cz)
|
|
||||||
New mode "logim" (1.11) and NetMouse (1.14)
|
|
||||||
|
|
||||||
Matthias Grimrath (y0001032@rzserv8.rz.tu-bs.de)
|
|
||||||
Be c++ compliant in gpm.h (1.11)
|
|
||||||
|
|
||||||
Stephen Tell (tell@cs.unc.edu)
|
|
||||||
Patch for the ps2 decoder to support misbehaving devices (1.11)
|
|
||||||
|
|
||||||
Francois Chastrette (no-email)
|
|
||||||
Great help to support plugnpray mice (1.13)
|
|
||||||
|
|
||||||
Steve Bennett (s.bennett@lancaster.ac.uk)
|
|
||||||
Support for the intellimouse serial devices. (1.13)
|
|
||||||
|
|
||||||
Jan Daciuk (jandac@pg.gda.pl)
|
|
||||||
t-mouse: yet another regexp possibility
|
|
||||||
|
|
||||||
Ian Zimmerman is now actively cooperating in maintaining gpm, so
|
|
||||||
he'll no longer appear in the acknowledgements ;-)
|
|
||||||
|
|
||||||
David Given (dg@tao.co.uk)
|
|
||||||
Offered support for joystick mouse emulation (1.14)
|
|
||||||
|
|
||||||
Tim Goodwin (tgoodwin@cygnus.co.uk)
|
|
||||||
Colin Plumb (colin@nyx10.nyx.net)
|
|
||||||
Ben Pfaff (pfaffben@pilot.msu.edu)
|
|
||||||
Ian and Iris (brooke@jump.net)
|
|
||||||
All of them sent in support for ps2 intellimouse (1.14)
|
|
||||||
|
|
||||||
Edmund Grimley Evans (edmund@vocalis.com)
|
|
||||||
Added "-t ms+lr"
|
|
||||||
|
|
||||||
Stefan Runker (runkeledv@t-online.de)
|
|
||||||
Contributed a new Wacom decoder
|
|
||||||
|
|
||||||
Alessandro Rubini (rubini@linux.it)
|
|
||||||
He's done a lot of work on gpm and maintained it.
|
|
||||||
He's still helping me a lot to understand all parts of gpm.
|
|
|
@ -1,32 +0,0 @@
|
||||||
I am thinking about restructing gpm, for the following reasons:
|
|
||||||
|
|
||||||
- the code is old
|
|
||||||
- the code is huge
|
|
||||||
- the code is next to unmaintainable
|
|
||||||
- the code is linux specific
|
|
||||||
|
|
||||||
What I think one could reach:
|
|
||||||
|
|
||||||
- create gpm, that runs on any Unix?
|
|
||||||
- create gpm that is easy to extend
|
|
||||||
- create gpm that is easy to maintain
|
|
||||||
|
|
||||||
What ways are possible?
|
|
||||||
|
|
||||||
- rewrite everything from scratch
|
|
||||||
* takes a long time and much motivitation
|
|
||||||
- migrate old code to clean codebase
|
|
||||||
* takes some time to analyse old code
|
|
||||||
* seems to me some way one could go
|
|
||||||
|
|
||||||
How to do it?
|
|
||||||
|
|
||||||
- new functions / code references 'gpm2' instead of gpm
|
|
||||||
- perhaps some people want to sponsor me for creating a clean
|
|
||||||
mouse driver for the console?
|
|
||||||
=> thus I got more time to focus on gpm2
|
|
||||||
- motivate other foss developers to take part into it
|
|
||||||
|
|
||||||
Let's see what happens!
|
|
||||||
|
|
||||||
-- Nico Schottelius, 2007-05-11 2245 CEST in a train in Zurich
|
|
|
@ -1,117 +0,0 @@
|
||||||
================================================================================
|
|
||||||
= /------\ /-----\ |----\ /-----\ =
|
|
||||||
= || | | | | | | =
|
|
||||||
= || | | | | | | thanks for every help. ;) =
|
|
||||||
= || \-----/ |____/ \-----/ =
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
Last edited:
|
|
||||||
Nico Schottelius <nico-gpm@schottelius.org>, 24 Dec 2002
|
|
||||||
|
|
||||||
Intro:
|
|
||||||
|
|
||||||
Welcome to the todo list. You are invited to help me. Select something
|
|
||||||
you wanna fix/introduce and I will tell you how you can add it.
|
|
||||||
items marked with a 'D' are done.
|
|
||||||
|
|
||||||
Tasks:
|
|
||||||
|
|
||||||
2002-12-24 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
* -D must be checked before calling anything else.
|
|
||||||
Currently, -m mousedev -D -t ps2 calls add_mouse first without debug
|
|
||||||
|
|
||||||
2002-11-21 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
* remove -M, allow multiply -m,-t; -> allow n mice and cleaner code
|
|
||||||
--> means use of add_mouse(), init_mice()
|
|
||||||
* remove old opt_*
|
|
||||||
D * cleanup gpn.c/cmdline to its real purpose
|
|
||||||
* make protocol / port autodection: gpm -u [later...]
|
|
||||||
=> ONLY FOR DEVFS!
|
|
||||||
|
|
||||||
2002-11-09 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
D * cleanup gpm further: main.c
|
|
||||||
* do init,protocol,disable functions forced
|
|
||||||
D * introducte global option structure
|
|
||||||
|
|
||||||
2002-03-10 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
* make buffer accessable from X and vice versa
|
|
||||||
|
|
||||||
2002-03-02 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
D * remove large messages: (just cd $srcdir...)
|
|
||||||
/home/user/nico/computer/sources/linux/gpm/gpm-1.20.1/src/mice.c ->
|
|
||||||
src/mice.c or mice.c
|
|
||||||
|
|
||||||
It's a problem with gcc's command line:
|
|
||||||
gcc -o file filename.c -> filename.c
|
|
||||||
gcc -o file /path/to/filename.c -> /path/to/filename.c
|
|
||||||
|
|
||||||
2002-02-20 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
* add contrib/other/TPdetect.cc [Allan Sandfeld Jensen
|
|
||||||
<snowwolf@one2one-networks.com>] to the gpm source.
|
|
||||||
|
|
||||||
2002-02-08 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
* fix problems with the following clients:
|
|
||||||
- gpm-root complains about /dev/vcs0 in devfs
|
|
||||||
- disable-past: segmenatation fault
|
|
||||||
- mev: segmenatation fault
|
|
||||||
- hltest: stdin: not a system console [ devfs problem ? ]
|
|
||||||
- mouse-test does not work (does not do anything after key pressed)
|
|
||||||
D * add better ps2 initialization: after mouse is screwed up with synps2
|
|
||||||
data, the init of ps2 should be able to get the mouse work again...
|
|
||||||
[ btw, currenty I_empty is used :( ]
|
|
||||||
D * update documentation and MANIFEST
|
|
||||||
|
|
||||||
2002-02-04 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
* use gpm_report in all gpm sources. Check for run_status.
|
|
||||||
[ report_lib does not need run_status! ]
|
|
||||||
* export synaptic.c messages to message.h
|
|
||||||
* cleanup debugging support in synaptics.c
|
|
||||||
* remove all strings in c files and place them into message.h
|
|
||||||
|
|
||||||
2002-01-07 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
* cleanup gpm-root (it will not run currently with devfs)
|
|
||||||
D * add pseudo root support
|
|
||||||
D * add protocol reset (after synps2 i.e.)
|
|
||||||
* add serial console support into gpm_report
|
|
||||||
* add howtos:
|
|
||||||
- add a protocol (?)
|
|
||||||
- add a messsage (message.h)
|
|
||||||
* remove hardwired names in sample clients.
|
|
||||||
D * cleanup Gpm_Open (problem with devfs still exists)
|
|
||||||
* remove dirty gotos
|
|
||||||
|
|
||||||
2001-09-29 Frédéric L. W. Meunier <0@pervalidus.net>
|
|
||||||
* Add GNU screen support to libgpm.
|
|
||||||
|
|
||||||
2001-09-23 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
D * put dependings from sources to src/.depend
|
|
||||||
D * set version _everywhere_ via configure (doc.gpm and others)
|
|
||||||
D * really remove oops() output, add clearer text to the user(also use stderr)
|
|
||||||
D * remove more hardwired things in gpm ! [partly solved. gpm-root is missing]
|
|
||||||
D * oops rewrite or use another function for rep_err()
|
|
||||||
--> calls oops() of we need to exit. Give oops() a va_* type, Filename,line
|
|
||||||
--> normally report(STATUS, text, ... ) -->
|
|
||||||
--> STATUS = (char * filename(__FILE__), int line(__LINE__), int status)
|
|
||||||
--> status: WARN, CRIT(or ABRT)
|
|
||||||
|
|
||||||
D * 27th of July 2k+1:
|
|
||||||
- report(char *filename, int line, int status, char *text, ... )
|
|
||||||
Destinations:
|
|
||||||
* stderr -> startup
|
|
||||||
* current console (/dev/tty, /dev/vc/0) -> debug, daemon
|
|
||||||
* console (/dev/console) -> running, daemon
|
|
||||||
* syslogd -> running, daemon
|
|
||||||
Status:
|
|
||||||
* LOG_INFO
|
|
||||||
* LOG_WARN
|
|
||||||
* LOG_ERR
|
|
||||||
* LOG_DEBUG
|
|
||||||
|
|
||||||
|
|
||||||
D * 7th of July 2k+1: [partly done. many patches left]
|
|
||||||
- analysing patches
|
|
||||||
- applying patches
|
|
||||||
- detail stuff:
|
|
||||||
- message function:
|
|
||||||
destination depend on current state
|
|
||||||
change debuglevel by using SIGUSR1/SIGUSR2
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# Nico Schottelius <nico-gpm /-at--/ schottelius.org>
|
|
||||||
# 2006-08-27
|
|
||||||
#
|
|
||||||
|
|
||||||
set -e
|
|
||||||
echo "Running autotools ..."
|
|
||||||
aclocal -I m4
|
|
||||||
autoheader
|
|
||||||
autoconf
|
|
||||||
echo "Done! Now just run ./configure"
|
|
|
@ -1,85 +0,0 @@
|
||||||
# sample configuration file for gpm-root
|
|
||||||
# edit it to please your taste....
|
|
||||||
|
|
||||||
button 1 {
|
|
||||||
name "ttys"
|
|
||||||
|
|
||||||
"" f.nop
|
|
||||||
"login on a new tty" f.mktty
|
|
||||||
"" f.nop
|
|
||||||
"tty 1" f.jptty "1"
|
|
||||||
"tty 2" f.jptty "2"
|
|
||||||
"tty 3" f.jptty "3"
|
|
||||||
"tty 4" f.jptty "4"
|
|
||||||
"" f.nop
|
|
||||||
"tty 5" f.jptty "5"
|
|
||||||
"tty 6" f.jptty "6"
|
|
||||||
"tty 7" f.jptty "7"
|
|
||||||
"tty 8" f.jptty "8"
|
|
||||||
"" f.nop
|
|
||||||
"more of them..." {
|
|
||||||
|
|
||||||
"tty 9" f.jptty "9"
|
|
||||||
"tty 10" f.jptty "10"
|
|
||||||
"tty 11" f.jptty "11"
|
|
||||||
"tty 12" f.jptty "12"
|
|
||||||
"" f.nop
|
|
||||||
"tty 13" f.jptty "13"
|
|
||||||
"tty 14" f.jptty "14"
|
|
||||||
"tty 15" f.jptty "15"
|
|
||||||
"tty 16" f.jptty "16"
|
|
||||||
"" f.nop
|
|
||||||
"more of them..." {
|
|
||||||
"tty 17" f.jptty "17"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
button 2 {
|
|
||||||
name "system status"
|
|
||||||
foreground red
|
|
||||||
background black
|
|
||||||
border yellow
|
|
||||||
head bright yellow
|
|
||||||
|
|
||||||
"" f.nop
|
|
||||||
"%b %d %Y" f.time
|
|
||||||
"%H:%M" f.time
|
|
||||||
"" f.nop
|
|
||||||
"load: " f.load
|
|
||||||
"free:" f.free
|
|
||||||
"" f.nop
|
|
||||||
"report disk usage to ~/du" f.bgcmd "du ~ | sort -rn > ~/du"
|
|
||||||
"print mail headers to tty" f.bgcmd
|
|
||||||
"grep '^From ' /var/spool/mail/$USER | tail"
|
|
||||||
}
|
|
||||||
|
|
||||||
button 3 {
|
|
||||||
name "far ttys"
|
|
||||||
|
|
||||||
foreground black
|
|
||||||
background red
|
|
||||||
border bright yellow
|
|
||||||
head bright yellow
|
|
||||||
|
|
||||||
"tty 9" f.jptty "9"
|
|
||||||
"tty 10" f.jptty "10"
|
|
||||||
"tty 11" f.jptty "11"
|
|
||||||
"tty 12" f.jptty "12"
|
|
||||||
"" f.nop
|
|
||||||
|
|
||||||
"tty 13" f.jptty "13"
|
|
||||||
"tty 14" f.jptty "14"
|
|
||||||
"tty 15" f.jptty "15"
|
|
||||||
"tty 16" f.jptty "16"
|
|
||||||
"" f.nop
|
|
||||||
|
|
||||||
# I use this to halt and reboot the system, but it isn't wise to put it
|
|
||||||
# in widely accessible boxes.
|
|
||||||
#
|
|
||||||
# "----" f.nop
|
|
||||||
# "" f.nop
|
|
||||||
# "halt" f.bgcmd "/sbin/shutdown -h now"
|
|
||||||
# "reboot" f.bgcmd "/sbin/shutdown -r now"
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
/* enabling configuration parameters */
|
|
||||||
[edge_motion_enabled] TRUE
|
|
||||||
[edge_motion_speed_enabled] TRUE
|
|
||||||
[corner_taps_enabled] TRUE
|
|
||||||
[tap_gesture_enabled] TRUE
|
|
||||||
[pressure_speed_enabled] TRUE
|
|
||||||
[tossing_enabled] TRUE
|
|
||||||
[does_toss_use_static_speed] TRUE
|
|
||||||
/* pressure induced speed related configuration parameters */
|
|
||||||
[low_pressure] 60
|
|
||||||
[speed_up_pressure] 60
|
|
||||||
[pressure_factor] 0.10
|
|
||||||
[standard_speed_factor] 0.10
|
|
||||||
/* toss/catch related parameters */
|
|
||||||
[min_toss_time] 100
|
|
||||||
[max_toss_time] 300
|
|
||||||
[prevent_toss_time] 300
|
|
||||||
[min_toss_dist] 2
|
|
||||||
[static_toss_speed] 70
|
|
||||||
[toss_speed_factor] 0.5
|
|
||||||
/* edge motion related configuration parameters */
|
|
||||||
[edge_speed] 20
|
|
||||||
/* corner tap actions */
|
|
||||||
[upper_left_action] 0 (none)
|
|
||||||
[upper_right_action] 2 (middle)
|
|
||||||
[lower_left_action] 0 (none)
|
|
||||||
[lower_right_action] 3 (right)
|
|
||||||
/* wmode parameters */
|
|
||||||
[wmode_enabled] TRUE
|
|
||||||
[drag_lock_enabled] FALSE
|
|
||||||
[finger_threshold] 30
|
|
||||||
[tap_lower_limit] 5
|
|
||||||
[tap_upper_limit] 200
|
|
||||||
[tap_range] 100
|
|
||||||
[tap_interval] 200
|
|
||||||
[pads_tap_interval] 8
|
|
||||||
[multiple_tap_delay] 30
|
|
||||||
[palm_detect_enabled] TRUE
|
|
||||||
[palm_detect_level] 12
|
|
||||||
[multi_finger_tap_enable] TRUE
|
|
||||||
[multi_finger_stop_enabled] TRUE
|
|
||||||
[multi_finger_stop_delay] 8
|
|
||||||
/* Additional options */
|
|
||||||
[touch_pad_enabled] TRUE
|
|
||||||
[stick_enabled] TRUE
|
|
||||||
[scrolling_enabled] TRUE
|
|
||||||
[scrolling_edge] 2
|
|
||||||
[auto_scrolling_enabled] TRUE
|
|
||||||
|
|
|
@ -1,258 +0,0 @@
|
||||||
#
|
|
||||||
# This is the configuration file for the twiddler keyboard as used under
|
|
||||||
# the gpm mouse server
|
|
||||||
#
|
|
||||||
# Empty lines and comments are ignored, other lines must follow either
|
|
||||||
# of the following conventions:
|
|
||||||
# chord = value (e.g. "L000 = a")
|
|
||||||
# mod chord = value (e.g. "Shift L000 = a")
|
|
||||||
#
|
|
||||||
# The "mod" is one of "Shift" "Numeric" "Function" "Control" "Ctrl" "Alt",
|
|
||||||
# or any abbreviation of those (case independent)
|
|
||||||
# The special case "Ctrl+Shift" (or "Shift+Ctrl") is supported, but note
|
|
||||||
# that it can't be abbreviated like C+S or anything like that.
|
|
||||||
#
|
|
||||||
# The "chord" value is one of the usual specifications, uppercase only
|
|
||||||
#
|
|
||||||
# Value can be a single byte (also as escape sequence), a string with
|
|
||||||
# double quotes (with escape sequences) or a special name (one of those
|
|
||||||
# appearing as "string" in dumpkeys, and Up Down Left Right).
|
|
||||||
# In addition, the strings "Console" and "Exec" are supported. See the
|
|
||||||
# sample case below.
|
|
||||||
#
|
|
||||||
# Escape sequences are \n \r \e \t \a \b, octal ("\243") or hex ("\xff")
|
|
||||||
# numbers. Any other char is returned unchanged, like \" or \\.
|
|
||||||
|
|
||||||
######## Lowercase
|
|
||||||
R000 = a
|
|
||||||
0R00 = b
|
|
||||||
00R0 = c
|
|
||||||
000R = d
|
|
||||||
M000 = e
|
|
||||||
0M00 = f
|
|
||||||
00M0 = g
|
|
||||||
000M = h
|
|
||||||
LR00 = i
|
|
||||||
L0R0 = j
|
|
||||||
L00R = k
|
|
||||||
LM00 = l
|
|
||||||
L0M0 = m
|
|
||||||
L00M = n
|
|
||||||
LL00 = o
|
|
||||||
L0L0 = p
|
|
||||||
L00L = q
|
|
||||||
MR00 = r
|
|
||||||
M0R0 = s
|
|
||||||
M00R = t
|
|
||||||
MM00 = u
|
|
||||||
M0M0 = v
|
|
||||||
M00M = w
|
|
||||||
ML00 = x
|
|
||||||
M0L0 = y
|
|
||||||
M00L = z
|
|
||||||
|
|
||||||
############## Uppercase
|
|
||||||
Shift R000 = A
|
|
||||||
Shift 0R00 = B
|
|
||||||
Shift 00R0 = C
|
|
||||||
Shift 000R = D
|
|
||||||
Shift M000 = E
|
|
||||||
Shift 0M00 = F
|
|
||||||
Shift 00M0 = G
|
|
||||||
Shift 000M = H
|
|
||||||
Shift LR00 = I
|
|
||||||
Shift L0R0 = J
|
|
||||||
Shift L00R = K
|
|
||||||
Shift LM00 = L
|
|
||||||
Shift L0M0 = M
|
|
||||||
Shift L00M = N
|
|
||||||
Shift LL00 = O
|
|
||||||
Shift L0L0 = P
|
|
||||||
Shift L00L = Q
|
|
||||||
Shift MR00 = R
|
|
||||||
Shift M0R0 = S
|
|
||||||
Shift M00R = T
|
|
||||||
Shift MM00 = U
|
|
||||||
Shift M0M0 = V
|
|
||||||
Shift M00M = W
|
|
||||||
Shift ML00 = X
|
|
||||||
Shift M0L0 = Y
|
|
||||||
Shift M00L = Z
|
|
||||||
|
|
||||||
######## Control
|
|
||||||
Ctrl R000 = \x01
|
|
||||||
Ctrl 0R00 = \x02
|
|
||||||
Ctrl 00R0 = \x03
|
|
||||||
Ctrl 000R = \x04
|
|
||||||
Ctrl M000 = \x05
|
|
||||||
Ctrl 0M00 = \x06
|
|
||||||
Ctrl 00M0 = \x07
|
|
||||||
Ctrl 000M = \x08
|
|
||||||
Ctrl LR00 = \x09
|
|
||||||
Ctrl L0R0 = \x0a
|
|
||||||
Ctrl L00R = \x0b
|
|
||||||
Ctrl LM00 = \x0c
|
|
||||||
Ctrl L0M0 = \x0d
|
|
||||||
Ctrl L00M = \x0e
|
|
||||||
Ctrl LL00 = \x0f
|
|
||||||
Ctrl L0L0 = \x10
|
|
||||||
Ctrl L00L = \x11
|
|
||||||
Ctrl MR00 = \x12
|
|
||||||
Ctrl M0R0 = \x13
|
|
||||||
Ctrl M00R = \x14
|
|
||||||
Ctrl MM00 = \x15
|
|
||||||
Ctrl M0M0 = \x16
|
|
||||||
Ctrl M00M = \x17
|
|
||||||
Ctrl ML00 = \x18
|
|
||||||
Ctrl M0L0 = \x19
|
|
||||||
Ctrl M00L = \x1a
|
|
||||||
|
|
||||||
######## Meta (Alt)
|
|
||||||
Meta R000 = "\ea"
|
|
||||||
Meta 0R00 = "\eb"
|
|
||||||
Meta 00R0 = "\ec"
|
|
||||||
Meta 000R = "\ed"
|
|
||||||
Meta M000 = "\ee"
|
|
||||||
Meta 0M00 = "\ef"
|
|
||||||
Meta 00M0 = "\eg"
|
|
||||||
Meta 000M = "\eh"
|
|
||||||
Meta LR00 = "\ei"
|
|
||||||
Meta L0R0 = "\ej"
|
|
||||||
Meta L00R = "\ek"
|
|
||||||
Meta LM00 = "\el"
|
|
||||||
Meta L0M0 = "\em"
|
|
||||||
Meta L00M = "\en"
|
|
||||||
Meta LL00 = "\eo"
|
|
||||||
Meta L0L0 = "\ep"
|
|
||||||
Meta L00L = "\eq"
|
|
||||||
Meta MR00 = "\er"
|
|
||||||
Meta M0R0 = "\es"
|
|
||||||
Meta M00R = "\et"
|
|
||||||
Meta MM00 = "\eu"
|
|
||||||
Meta M0M0 = "\ev"
|
|
||||||
Meta M00M = "\ew"
|
|
||||||
Meta ML00 = "\ex"
|
|
||||||
Meta M0L0 = "\ey"
|
|
||||||
Meta M00L = "\ez"
|
|
||||||
|
|
||||||
##### 1b is escape, etc...
|
|
||||||
|
|
||||||
RRR0 = \x1b
|
|
||||||
|
|
||||||
############### Numbers and symbols (ascii 0x20 to 0x40)
|
|
||||||
L000 = " "
|
|
||||||
R0L0 = !
|
|
||||||
R0M0 = "
|
|
||||||
0M0L = #
|
|
||||||
0LR0 = $
|
|
||||||
00RM = %
|
|
||||||
0L0L = &
|
|
||||||
RM00 = '
|
|
||||||
0LL0 = (
|
|
||||||
0RL0 = )
|
|
||||||
00LM = *
|
|
||||||
00ML = +
|
|
||||||
R0R0 = ,
|
|
||||||
R00L = -
|
|
||||||
RR00 = .
|
|
||||||
MMM0 = /
|
|
||||||
Num 0L00 = 0
|
|
||||||
Num R000 = 1
|
|
||||||
Num 0R00 = 2
|
|
||||||
Num 00R0 = 3
|
|
||||||
Num 000R = 4
|
|
||||||
Num M000 = 5
|
|
||||||
Num 0M00 = 6
|
|
||||||
Num 00M0 = 7
|
|
||||||
Num 000M = 8
|
|
||||||
Num L000 = 9
|
|
||||||
00RL = :
|
|
||||||
R00R = ;
|
|
||||||
Num M00L = <
|
|
||||||
00MR = =
|
|
||||||
Num R0R0 = >
|
|
||||||
RL00 = ?
|
|
||||||
00LR = @
|
|
||||||
|
|
||||||
############## Other symbols (ascii 0x5b to 0x60 and 0x7b to 0x7f)
|
|
||||||
|
|
||||||
Num RM00 = [
|
|
||||||
LLL0 = \
|
|
||||||
Num R00M = ]
|
|
||||||
Num LM00 = ^
|
|
||||||
0R0L = _
|
|
||||||
Num R0L0 = `
|
|
||||||
|
|
||||||
Num R00L = {
|
|
||||||
Num LLR0 = |
|
|
||||||
Num LL0R = }
|
|
||||||
Num LLM0 = ~
|
|
||||||
0L00 = \x7f
|
|
||||||
00L0 = \x08
|
|
||||||
|
|
||||||
############## In addition to ascii, here are the special keys
|
|
||||||
|
|
||||||
# return, tab
|
|
||||||
000L = \x0a
|
|
||||||
MM0M = \x09
|
|
||||||
|
|
||||||
# arrows
|
|
||||||
0MR0 = Up
|
|
||||||
0ML0 = Down
|
|
||||||
0MM0 = Left
|
|
||||||
0M0M = Right
|
|
||||||
|
|
||||||
# pageup/down
|
|
||||||
00RR = Prior
|
|
||||||
00LL = Next
|
|
||||||
|
|
||||||
############## Functions
|
|
||||||
Fun R000 = F1
|
|
||||||
Fun 0R00 = F2
|
|
||||||
Fun 00R0 = F3
|
|
||||||
Fun 000R = F4
|
|
||||||
Fun M000 = F5
|
|
||||||
Fun 0M00 = F6
|
|
||||||
Fun 00M0 = F7
|
|
||||||
Fun 000M = F8
|
|
||||||
Fun L000 = F9
|
|
||||||
Fun 0L00 = F10
|
|
||||||
Fun 00L0 = F11
|
|
||||||
Fun 000L = F12
|
|
||||||
|
|
||||||
|
|
||||||
############## Console switching
|
|
||||||
Ctrl+Shift R000 = Console 1
|
|
||||||
Ctrl+Shift 0R00 = Console 2
|
|
||||||
Ctrl+Shift 00R0 = Console 3
|
|
||||||
Ctrl+Shift 000R = Console 4
|
|
||||||
Ctrl+Shift M000 = Console 5
|
|
||||||
Ctrl+Shift 0M00 = Console 6
|
|
||||||
Ctrl+Shift 00M0 = Console 7
|
|
||||||
Ctrl+Shift 000M = Console 8
|
|
||||||
Ctrl+Shift L000 = Console 9
|
|
||||||
Ctrl+Shift 0L00 = Console 10
|
|
||||||
Ctrl+Shift 00L0 = Console 11
|
|
||||||
Ctrl+Shift 000L = Console 12
|
|
||||||
|
|
||||||
############## Executing commands (be careful: this is root)
|
|
||||||
# This is just an example: t for "time" and s for "space"
|
|
||||||
# The empty line is used to align text on console border
|
|
||||||
|
|
||||||
F M00R = Exec echo > /dev/tty0; date > /dev/tty0
|
|
||||||
F M0R0 = Exec echo > /dev/tty0; df > /dev/tty0
|
|
||||||
|
|
||||||
# you can put shutdown, reboot or anything here.
|
|
||||||
|
|
||||||
############## Macros
|
|
||||||
|
|
||||||
0RR0 = "the"
|
|
||||||
0RM0 = "of"
|
|
||||||
0R0R = "to"
|
|
||||||
0M0R = "ed"
|
|
||||||
R00M = "and"
|
|
||||||
0R0M = "in"
|
|
||||||
0L0M = "ion"
|
|
||||||
00MM = "ing"
|
|
||||||
|
|
||||||
############## Add accented letters here below....
|
|
|
@ -1,191 +0,0 @@
|
||||||
#
|
|
||||||
# gpm - configure.ac
|
|
||||||
# based on configure.in, written jan/1997 byT.E.Dickey <dickey@clark.net>
|
|
||||||
# Nico Schottelius
|
|
||||||
#
|
|
||||||
# heavily cleaned up
|
|
||||||
|
|
||||||
############################# prework #################################
|
|
||||||
AC_INIT(gpm, 1.20.2 (git), gpm@lists.linux.it)
|
|
||||||
AC_PREREQ(2.59)
|
|
||||||
AC_CONFIG_SRCDIR([src/gpm.c])
|
|
||||||
AC_CONFIG_HEADER([src/headers/config.h])
|
|
||||||
|
|
||||||
############################# release version #################################
|
|
||||||
release_date="Sometime 2005"
|
|
||||||
AC_DEFINE_UNQUOTED(GPM_RELEASE,PACKAGE_VERSION,[release version string])
|
|
||||||
AC_DEFINE_UNQUOTED(GPM_RELEASE_DATE,"$release_date",[release date string])
|
|
||||||
|
|
||||||
# These are chosen so that we can switch to the libtool scheme transparently.
|
|
||||||
abi=20
|
|
||||||
abi_age=19
|
|
||||||
abi_rev=0
|
|
||||||
|
|
||||||
abi_lev=`expr $abi - $abi_age`
|
|
||||||
abi_full=$abi_lev.$abi_age.$abi_rev
|
|
||||||
|
|
||||||
dnl Make srcdir an absolute path.
|
|
||||||
if test x$srcdir = x ; then
|
|
||||||
srcdir = `pwd`
|
|
||||||
else
|
|
||||||
srcdir=`cd $srcdir && pwd`
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check for programs
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_PROG_RANLIB
|
|
||||||
AC_PROG_INSTALL
|
|
||||||
AC_PROG_YACC
|
|
||||||
AC_PROG_LN_S
|
|
||||||
AC_PATH_PROG(DVIPS,dvips,no)
|
|
||||||
AC_PATH_PROG(TEXI2HTML,texi2html,no)
|
|
||||||
AC_PATH_PROG(TEX,tex,no)
|
|
||||||
AC_PATH_PROG(TEXINDEX,texindex,no)
|
|
||||||
AC_PATH_PROG(MAKEINFO,makeinfo,no)
|
|
||||||
AC_PATH_PROG(DIFF,diff,no)
|
|
||||||
AC_PATH_PROG(SED,sed,no)
|
|
||||||
AC_PATH_PROG(emacs,emacs,no)
|
|
||||||
|
|
||||||
# emacs
|
|
||||||
if test ${ac_cv_path_emacs} = no ; then
|
|
||||||
EMACS=:
|
|
||||||
ELISP=
|
|
||||||
else
|
|
||||||
EMACS=${ac_cv_path_emacs}
|
|
||||||
ELISP="emacs/t-mouse.el emacs/t-mouse.elc"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $EMACS != : ; then
|
|
||||||
ITZ_PATH_SITE_LISP
|
|
||||||
lispdir=${itz_cv_path_site_lisp}
|
|
||||||
else
|
|
||||||
lispdir='${datadir}/emacs/site-lisp'
|
|
||||||
fi
|
|
||||||
|
|
||||||
# headers
|
|
||||||
AC_CHECK_HEADERS(linux/input.h linux/joystick.h linux/major.h linux/tty.h)
|
|
||||||
AC_CHECK_HEADERS(curses.h ncurses.h ncurses/curses.h sys/sysmacros.h syslog.h)
|
|
||||||
AC_CHECK_HEADERS([math.h], , [AC_MSG_ERROR([a mandatory header is missing])])
|
|
||||||
|
|
||||||
# curses
|
|
||||||
AC_ARG_WITH(curses,
|
|
||||||
[ --without-curses disable curses support even if curses found])
|
|
||||||
|
|
||||||
CURSES_OBJS=
|
|
||||||
|
|
||||||
case $with_curses in
|
|
||||||
No|no|N|n) : ;;
|
|
||||||
*) if test ${ac_cv_header_ncurses_h} = yes ||
|
|
||||||
test ${ac_cv_header_ncurses_curses_h} = yes ||
|
|
||||||
test ${ac_cv_header_curses_h} = yes ; then
|
|
||||||
CURSES_OBJS=lib/libcurses.o ; fi ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
EVDEV_SRCS=
|
|
||||||
if test ${ac_cv_header_linux_input_h} = yes ; then
|
|
||||||
EVDEV_SRCS=evdev.c ;
|
|
||||||
AC_CHECK_TYPE(struct input_absinfo,AC_DEFINE_UNQUOTED(HAVE_INPUT_ABSINFO, 1, [define if struct input_absinfo defined in linux/input.h]),,[#include <linux/input.h>])
|
|
||||||
fi
|
|
||||||
|
|
||||||
ITZ_CHECK_TYPE(__u32,linux/types.h)
|
|
||||||
if test ${itz_cv_type___u32} = yes || test ${ac_cv_type___u32} = yes ; then
|
|
||||||
AC_DEFINE(HAVE___U32, 1, [system has __u32 types])
|
|
||||||
fi
|
|
||||||
|
|
||||||
ITZ_SYS_ELF
|
|
||||||
if test ${itz_cv_sys_elf} = yes && test x${ac_cv_prog_gcc} = xyes ; then
|
|
||||||
SHLIB=lib/libgpm.so
|
|
||||||
else
|
|
||||||
SHLIB=
|
|
||||||
fi
|
|
||||||
|
|
||||||
############################# functions #######################################
|
|
||||||
AC_CHECK_FUNCS(vsyslog syslog)
|
|
||||||
AC_FUNC_ALLOCA
|
|
||||||
|
|
||||||
case $with_curses in
|
|
||||||
No|no|N|n) SHARED_LIBS=-lc ;;
|
|
||||||
*)
|
|
||||||
SAVELIBS=$LIBS
|
|
||||||
LIBS=
|
|
||||||
for i in tinfo ncurses termcap termlib; do
|
|
||||||
if test x$LIBS = x; then
|
|
||||||
AC_CHECK_LIB($i, tputs)
|
|
||||||
else :; fi
|
|
||||||
done
|
|
||||||
TERMLIBS=$LIBS
|
|
||||||
LIBS=
|
|
||||||
for i in ncurses curses; do
|
|
||||||
if test x$LIBS = x; then
|
|
||||||
AC_CHECK_LIB($i, wgetch,,,$TERMLIBS)
|
|
||||||
else :; fi
|
|
||||||
done
|
|
||||||
SHARED_LIBS="$LIBS $TERMLIBS -lc"
|
|
||||||
LIBS=$SAVELIBS ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
dnl ceil() may be an inline, so check with no libm first
|
|
||||||
dnl need to use variables/return or gcc will optimize ceil() to a noop
|
|
||||||
AC_CACHE_CHECK([whether libm is needed for ceil], [gpm_cv_ceil_libm],
|
|
||||||
[ceil_found=no
|
|
||||||
for i in "" "-lm"; do
|
|
||||||
SAVELIBS=$LIBS
|
|
||||||
LIBS=$i
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
|
||||||
[#ifdef HAVE_MATH_H
|
|
||||||
#include <math.h>
|
|
||||||
#endif], [float i=10.0; return ceil(i);])], [ceil_found=yes])
|
|
||||||
LIBS=$SAVELIBS
|
|
||||||
if test x$ceil_found = xyes; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if test x$ceil_found = xno; then
|
|
||||||
gpm_cv_ceil_libm=missing
|
|
||||||
elif test x$i = x-lm; then
|
|
||||||
gpm_cv_ceil_libm=yes
|
|
||||||
else
|
|
||||||
gpm_cv_ceil_libm=no
|
|
||||||
fi])
|
|
||||||
case $gpm_cv_ceil_libm in
|
|
||||||
no)
|
|
||||||
LIBM=
|
|
||||||
;;
|
|
||||||
yes)
|
|
||||||
LIBM=-lm
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([a mandatory function is missing])
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
GPMXTERM=
|
|
||||||
AC_SUBST(GPMXTERM)
|
|
||||||
AC_SUBST(release)
|
|
||||||
AC_SUBST(release_date)
|
|
||||||
AC_SUBST(abi_lev)
|
|
||||||
AC_SUBST(abi_full)
|
|
||||||
AC_SUBST(EMACS)
|
|
||||||
AC_SUBST(ELISP)
|
|
||||||
AC_SUBST(SHLIB)
|
|
||||||
AC_SUBST(PICFLAGS)
|
|
||||||
AC_SUBST(SOLDFLAGS)
|
|
||||||
AC_SUBST(CURSES_OBJS)
|
|
||||||
AC_SUBST(EVDEV_SRCS)
|
|
||||||
AC_SUBST(SHARED_LIBS)
|
|
||||||
AC_SUBST(LIBM)
|
|
||||||
AC_SUBST(lispdir)
|
|
||||||
|
|
||||||
CPPFLAGS='-I$(srcdir) $(DEFS) -include headers/config.h -Wall -DSYSCONFDIR="\"$(sysconfdir)\"" -DSBINDIR="\"$(sbindir)\""'
|
|
||||||
LDFLAGS='-L$(srcdir)'
|
|
||||||
|
|
||||||
AC_OUTPUT(Makefile.include
|
|
||||||
Makefile
|
|
||||||
contrib/Makefile
|
|
||||||
doc/Makefile
|
|
||||||
doc/doc.gpm
|
|
||||||
src/Makefile)
|
|
||||||
|
|
||||||
# old stuff
|
|
||||||
#AC_INIT(src/gpm.c)
|
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
# -*-makefile-*- (gpm/contrib)
|
|
||||||
#
|
|
||||||
# Copyright (C) 2001 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
srcdir = @srcdir@
|
|
||||||
top_builddir = ..
|
|
||||||
|
|
||||||
include $(top_builddir)/Makefile.include
|
|
||||||
|
|
||||||
all: $(addprefix $(srcdir)/,$(ELISP))
|
|
||||||
|
|
||||||
install: all
|
|
||||||
if [ -n "$(ELISP)" ]; then for i in `echo $(ELISP)`; do \
|
|
||||||
$(INSTALL_DATA) $(srcdir)/$$i $(lispdir)/`basename $$i` ;\
|
|
||||||
done; fi
|
|
||||||
|
|
||||||
%.elc: %.el
|
|
||||||
$(EMACS) -batch -l $(srcdir)/emacs/exec.el -exec '(byte-compile-file "$<")'
|
|
||||||
|
|
||||||
uninstall:
|
|
||||||
if [ -n "$(ELISP)" ]; then for i in `echo $(ELISP)`; do \
|
|
||||||
rm -f $(lispdir)/`basename $$i` ;\
|
|
||||||
done; fi
|
|
||||||
|
|
||||||
dist:
|
|
||||||
$(CP) -r $(srcdir) $(top_builddir)/gpm-$(release)/
|
|
||||||
|
|
||||||
clean distclean:
|
|
||||||
$(RM) -f $(srcdir)/emacs/*.elc Makefile
|
|
|
@ -1,7 +0,0 @@
|
||||||
(setq command-switch-alist '(
|
|
||||||
("-exec" . cmdline-exec)))
|
|
||||||
|
|
||||||
(defun cmdline-exec (name)
|
|
||||||
(eval (car (read-from-string (car command-line-args-left))))
|
|
||||||
)
|
|
||||||
|
|
|
@ -1,342 +0,0 @@
|
||||||
;;; t-mouse.el --- mouse support within the text terminal
|
|
||||||
|
|
||||||
;;; Copyright (C) 1994,1995 Alessandro Rubini <rubini@linux.it>
|
|
||||||
;;; parts are by Ian T Zimmermann <itz@rahul.net>, 1995,1998
|
|
||||||
|
|
||||||
;; Maintainer: gpm mailing list: gpm@prosa.it
|
|
||||||
;; Keywords: mouse gpm linux
|
|
||||||
|
|
||||||
;;; This program is distributed in the hope that it will be useful,
|
|
||||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
;;; GNU General Public License for more details.
|
|
||||||
|
|
||||||
;;; You should have received a copy of the GNU General Public License
|
|
||||||
;;; along with GNU Emacs; see the file COPYING. If not, write to
|
|
||||||
;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
|
|
||||||
;;; Commentary:
|
|
||||||
|
|
||||||
;; This package provides access to mouse event as reported by the
|
|
||||||
;; gpm-Linux package. It uses the program "mev" to get mouse events.
|
|
||||||
;; It tries to reproduce the functionality offered by emacs under X.
|
|
||||||
;; The "gpm" server runs under Linux, so this package is rather
|
|
||||||
;; Linux-dependent.
|
|
||||||
|
|
||||||
;; Developed for GNU Emacs 19.34, likely won't work with many others
|
|
||||||
;; too much internals dependent cruft here.
|
|
||||||
|
|
||||||
|
|
||||||
(require 'advice)
|
|
||||||
|
|
||||||
(defvar t-mouse-process nil
|
|
||||||
"Embeds the process which passes mouse events to emacs.
|
|
||||||
It is used by the program t-mouse.")
|
|
||||||
|
|
||||||
(defvar t-mouse-filter-accumulator ""
|
|
||||||
"Accumulates input from the mouse reporting process.")
|
|
||||||
|
|
||||||
(defvar t-mouse-debug-buffer nil
|
|
||||||
"Events normally posted to command queue are printed here in debug mode.
|
|
||||||
See `t-mouse-start-debug'.")
|
|
||||||
|
|
||||||
(defvar t-mouse-current-xy '(0 . 0)
|
|
||||||
"Stores the last mouse position t-mouse has been told about.")
|
|
||||||
|
|
||||||
(defvar t-mouse-drag-start nil
|
|
||||||
"Whenever a drag starts in a special part of a window
|
|
||||||
(not the text), the `translated' starting coordinates including the
|
|
||||||
window and part involved are saved here. This is necessary lest they
|
|
||||||
get re-translated when the button goes up, at which time window
|
|
||||||
configuration may have changed.")
|
|
||||||
|
|
||||||
(defvar t-mouse-prev-set-selection-function 'x-set-selection)
|
|
||||||
(defvar t-mouse-prev-get-selection-function 'x-get-selection)
|
|
||||||
|
|
||||||
(defvar t-mouse-swap-alt-keys nil
|
|
||||||
"When set, Emacs will handle mouse events with the right Alt
|
|
||||||
(a.k.a. Alt-Ger) modifier, not with the regular left Alt modifier.
|
|
||||||
Useful for people who play strange games with their keyboard tables.")
|
|
||||||
|
|
||||||
(defvar t-mouse-fix-21 nil
|
|
||||||
"Enable brain-dead chords for 2 button mice.")
|
|
||||||
|
|
||||||
|
|
||||||
;;; Code:
|
|
||||||
|
|
||||||
;; get the number of the current virtual console
|
|
||||||
|
|
||||||
(defun t-mouse-tty ()
|
|
||||||
"Returns number of virtual terminal Emacs is running on, as a string.
|
|
||||||
For example, \"2\" for /dev/tty2."
|
|
||||||
(let ((buffer (generate-new-buffer "*t-mouse*")))
|
|
||||||
(call-process "ps" nil buffer nil "h" (format "%s" (emacs-pid)))
|
|
||||||
(prog1 (save-excursion
|
|
||||||
(set-buffer buffer)
|
|
||||||
(goto-char (point-min))
|
|
||||||
(if (or
|
|
||||||
;; Many versions of "ps", all different....
|
|
||||||
(re-search-forward " +tty\\(.?[0-9a-f]\\)" nil t)
|
|
||||||
(re-search-forward "p \\([0-9a-f]\\)" nil t)
|
|
||||||
(re-search-forward "v0\\([0-9a-f]\\)" nil t)
|
|
||||||
(re-search-forward "[0-9]+ +\\([0-9]+\\)" nil t)
|
|
||||||
(re-search-forward "[\\t ]*[0-9]+[\\t ]+\\([0-9]+\\)" nil t))
|
|
||||||
(buffer-substring (match-beginning 1) (match-end 1))))
|
|
||||||
(kill-buffer buffer))))
|
|
||||||
|
|
||||||
|
|
||||||
;; due to a horrible kludge in Emacs' keymap handler
|
|
||||||
;; (read_key_sequence) mouse clicks on funny parts of windows generate
|
|
||||||
;; TWO events, the first being a dummy of the sort '(mode-line).
|
|
||||||
;; That's why Per Abrahamsen's code in xt-mouse.el doesn't work for
|
|
||||||
;; the modeline, for instance.
|
|
||||||
|
|
||||||
;; now get this: the Emacs C code that generates these fake events
|
|
||||||
;; depends on certain things done by the very lowest level input
|
|
||||||
;; handlers; namely the symbols for the events (for instance
|
|
||||||
;; 'C-S-double-mouse-2) must have an 'event-kind property, set to
|
|
||||||
;; 'mouse-click. Since events from unread-command-events do not pass
|
|
||||||
;; through the low level handlers, they don't get this property unless
|
|
||||||
;; I set it myself. I imagine this has caused innumerable attempts by
|
|
||||||
;; hackers to do things similar to t-mouse to lose.
|
|
||||||
|
|
||||||
;; The next page of code is devoted to fixing this ugly problem.
|
|
||||||
|
|
||||||
;; WOW! a fully general powerset generator
|
|
||||||
;; (C) Ian Zimmerman Mon Mar 23 12:00:16 PST 1998 :-)
|
|
||||||
(defun t-mouse-powerset (l)
|
|
||||||
(if (null l) '(nil)
|
|
||||||
(let ((l1 (t-mouse-powerset (cdr l)))
|
|
||||||
(first (nth 0 l)))
|
|
||||||
(append
|
|
||||||
(mapcar (function (lambda (l) (cons first l))) l1) l1))))
|
|
||||||
|
|
||||||
;; and a slightly less general cartesian product
|
|
||||||
(defun t-mouse-cartesian (l1 l2)
|
|
||||||
(if (null l1) l2
|
|
||||||
(append (mapcar (function (lambda (x) (append (nth 0 l1) x))) l2)
|
|
||||||
(t-mouse-cartesian (cdr l1) l2))))
|
|
||||||
|
|
||||||
(let* ((modifier-sets (t-mouse-powerset '(control meta shift)))
|
|
||||||
(typed-sets (t-mouse-cartesian '((down) (drag))
|
|
||||||
'((mouse-1) (mouse-2) (mouse-3))))
|
|
||||||
(multipled-sets (t-mouse-cartesian '((double) (triple)) typed-sets))
|
|
||||||
(all-sets (t-mouse-cartesian modifier-sets multipled-sets)))
|
|
||||||
(while all-sets
|
|
||||||
(let ((event-sym (event-convert-list (nth 0 all-sets))))
|
|
||||||
(if (not (get event-sym 'event-kind))
|
|
||||||
(put event-sym 'event-kind 'mouse-click)))
|
|
||||||
(setq all-sets (cdr all-sets))))
|
|
||||||
|
|
||||||
|
|
||||||
;;; This fun is partly Copyright (C) 1994 Per Abrahamsen <abraham@iesd.auc.dk>
|
|
||||||
;; This is basically a feeble attempt to mimic what the c function
|
|
||||||
;; buffer_posn_from_coords in dispnew.c does. I wish that function
|
|
||||||
;; were exported to Lisp.
|
|
||||||
|
|
||||||
(defun t-mouse-lispy-buffer-posn-from-coords (w col line)
|
|
||||||
"Return buffer position of character at COL and LINE within window W.
|
|
||||||
COL and LINE are glyph coordinates, relative to W topleft corner."
|
|
||||||
(save-window-excursion
|
|
||||||
(select-window w)
|
|
||||||
(save-excursion
|
|
||||||
(move-to-window-line line)
|
|
||||||
(move-to-column (+ col (current-column)
|
|
||||||
(if (not (window-minibuffer-p w)) 0
|
|
||||||
(- (minibuffer-prompt-width)))
|
|
||||||
(max 0 (1- (window-hscroll)))))
|
|
||||||
(point))))
|
|
||||||
|
|
||||||
;; compute one element of the form (WINDOW BUFFERPOS (COL . ROW) TIMESTAMP)
|
|
||||||
|
|
||||||
(defun t-mouse-make-event-element (x-dot-y-avec-time)
|
|
||||||
(let* ((x-dot-y (nth 0 x-dot-y-avec-time))
|
|
||||||
(x (car x-dot-y))
|
|
||||||
(y (cdr x-dot-y))
|
|
||||||
(timestamp (nth 1 x-dot-y-avec-time))
|
|
||||||
(w (window-at x y))
|
|
||||||
(left-top-right-bottom (window-edges w))
|
|
||||||
(left (nth 0 left-top-right-bottom))
|
|
||||||
(top (nth 1 left-top-right-bottom))
|
|
||||||
(right (nth 2 left-top-right-bottom))
|
|
||||||
(bottom (nth 3 left-top-right-bottom))
|
|
||||||
(coords-or-part (coordinates-in-window-p x-dot-y w)))
|
|
||||||
(cond
|
|
||||||
((consp coords-or-part)
|
|
||||||
(let ((wx (car coords-or-part)) (wy (cdr coords-or-part)))
|
|
||||||
(if (< wx (- right left 1))
|
|
||||||
(list w
|
|
||||||
(t-mouse-lispy-buffer-posn-from-coords w wx wy)
|
|
||||||
coords-or-part timestamp)
|
|
||||||
(list w 'vertical-scroll-bar
|
|
||||||
(cons (1+ wy) (- bottom top)) timestamp))))
|
|
||||||
((eq coords-or-part 'mode-line)
|
|
||||||
(list w 'mode-line (cons (- x left) 0) timestamp))
|
|
||||||
((eq coords-or-part 'vertical-line)
|
|
||||||
(list w 'vertical-line (cons 0 (- y top)) timestamp)))))
|
|
||||||
|
|
||||||
;;; This fun is partly Copyright (C) 1994 Per Abrahamsen <abraham@iesd.auc.dk>
|
|
||||||
|
|
||||||
(defun t-mouse-make-event ()
|
|
||||||
"Makes a Lisp style event from the contents of mouse input accumulator.
|
|
||||||
Also trims the accumulator by all the data used to build the event."
|
|
||||||
(let (ob (ob-pos (condition-case nil
|
|
||||||
(read-from-string t-mouse-filter-accumulator)
|
|
||||||
(error nil))))
|
|
||||||
(if (not ob-pos) nil
|
|
||||||
(setq ob (car ob-pos))
|
|
||||||
(setq t-mouse-filter-accumulator
|
|
||||||
(substring t-mouse-filter-accumulator (cdr ob-pos)))
|
|
||||||
|
|
||||||
;;now the real work
|
|
||||||
|
|
||||||
(let ((event-type (nth 0 ob))
|
|
||||||
(current-xy-avec-time (nth 1 ob))
|
|
||||||
(type-switch (length ob)))
|
|
||||||
|
|
||||||
(if t-mouse-fix-21
|
|
||||||
(let
|
|
||||||
;;Acquire the event's symbol's name.
|
|
||||||
((event-name-string (symbol-name event-type))
|
|
||||||
end-of-root-event-name
|
|
||||||
new-event-name-string)
|
|
||||||
|
|
||||||
(if (string-match "-\\(21\\|\\12\\)$" event-name-string)
|
|
||||||
|
|
||||||
;;Transform the name to what it should have been.
|
|
||||||
(progn
|
|
||||||
(setq end-of-root-event-name (match-beginning 0))
|
|
||||||
(setq new-event-name-string
|
|
||||||
(concat (substring
|
|
||||||
event-name-string 0
|
|
||||||
end-of-root-event-name) "-3"))
|
|
||||||
|
|
||||||
;;Change the event to the symbol that corresponds to the
|
|
||||||
;;name we made. The proper symbol already exists.
|
|
||||||
(setq event-type
|
|
||||||
(intern new-event-name-string))))))
|
|
||||||
|
|
||||||
;;store current position for mouse-position
|
|
||||||
|
|
||||||
(setq t-mouse-current-xy (nth 0 current-xy-avec-time))
|
|
||||||
|
|
||||||
;;events have many types but fortunately they differ in length
|
|
||||||
|
|
||||||
(cond
|
|
||||||
;;sink all events on the stupid text mode menubar.
|
|
||||||
((and menu-bar-mode (eq 0 (cdr t-mouse-current-xy))) nil)
|
|
||||||
((= type-switch 4) ;must be drag
|
|
||||||
(let ((count (nth 2 ob))
|
|
||||||
(start-element
|
|
||||||
(or t-mouse-drag-start
|
|
||||||
(t-mouse-make-event-element (nth 3 ob))))
|
|
||||||
(end-element
|
|
||||||
(t-mouse-make-event-element current-xy-avec-time)))
|
|
||||||
(setq t-mouse-drag-start nil)
|
|
||||||
(list event-type start-element end-element count)))
|
|
||||||
((= type-switch 3) ;down or up
|
|
||||||
(let ((count (nth 2 ob))
|
|
||||||
(element
|
|
||||||
(t-mouse-make-event-element current-xy-avec-time)))
|
|
||||||
(if (and (not t-mouse-drag-start)
|
|
||||||
(symbolp (nth 1 element)))
|
|
||||||
;; OUCH! GOTCHA! emacs uses setc[ad]r on these!
|
|
||||||
(setq t-mouse-drag-start (copy-sequence element))
|
|
||||||
(setq t-mouse-drag-start nil))
|
|
||||||
(list event-type element count)))
|
|
||||||
((= type-switch 2) ;movement
|
|
||||||
(list (if (eq 'vertical-scroll-bar
|
|
||||||
(nth 1 t-mouse-drag-start)) 'scroll-bar-movement
|
|
||||||
'mouse-movement)
|
|
||||||
(t-mouse-make-event-element current-xy-avec-time))))))))
|
|
||||||
|
|
||||||
|
|
||||||
(defun t-mouse-process-filter (proc string)
|
|
||||||
(setq t-mouse-filter-accumulator
|
|
||||||
(concat t-mouse-filter-accumulator string))
|
|
||||||
(let ((event (t-mouse-make-event)))
|
|
||||||
(while event
|
|
||||||
(if (or track-mouse
|
|
||||||
(not (eq 'mouse-movement (event-basic-type event))))
|
|
||||||
(setq unread-command-events
|
|
||||||
(nconc unread-command-events (list event))))
|
|
||||||
(if t-mouse-debug-buffer
|
|
||||||
(print unread-command-events t-mouse-debug-buffer))
|
|
||||||
(setq event (t-mouse-make-event)))))
|
|
||||||
|
|
||||||
|
|
||||||
;; this overrides a C function which stupidly assumes (no X => no mouse)
|
|
||||||
(defadvice mouse-position (around t-mouse-mouse-position activate)
|
|
||||||
"Return the t-mouse-position unless running with a window system.
|
|
||||||
The (secret) scrollbar interface is not implemented yet."
|
|
||||||
(if (not window-system)
|
|
||||||
(setq ad-return-value
|
|
||||||
(cons (selected-frame) t-mouse-current-xy))
|
|
||||||
ad-do-it))
|
|
||||||
|
|
||||||
(setq mouse-sel-set-selection-function
|
|
||||||
(function (lambda (type value)
|
|
||||||
(if (not window-system)
|
|
||||||
(if (eq 'PRIMARY type) (kill-new value))
|
|
||||||
(funcall t-mouse-prev-set-selection-function
|
|
||||||
type value)))))
|
|
||||||
|
|
||||||
(setq mouse-sel-get-selection-function
|
|
||||||
(function (lambda (type)
|
|
||||||
(if (not window-system)
|
|
||||||
(if (eq 'PRIMARY type)
|
|
||||||
(current-kill 0) "")
|
|
||||||
(funcall t-mouse-prev-get-selection-function type)))))
|
|
||||||
|
|
||||||
;; It should be possible to just send SIGTSTP to the inferior with
|
|
||||||
;; stop-process. That doesn't work; mev receives the signal fine but
|
|
||||||
;; is not really stopped: instead it returns from
|
|
||||||
;; kill(getpid(), SIGTSTP) immediately. I don't understand what's up
|
|
||||||
;; itz Tue Mar 24 14:27:38 PST 1998.
|
|
||||||
|
|
||||||
(add-hook 'suspend-hook
|
|
||||||
(function (lambda ()
|
|
||||||
(and t-mouse-process
|
|
||||||
;(stop-process t-mouse-process)
|
|
||||||
(process-send-string
|
|
||||||
t-mouse-process "push -enone -dall -Mnone\n")))))
|
|
||||||
|
|
||||||
(add-hook 'suspend-resume-hook
|
|
||||||
(function (lambda ()
|
|
||||||
(and t-mouse-process
|
|
||||||
;(continue-process t-mouse-process)
|
|
||||||
(process-send-string t-mouse-process "pop\n")))))
|
|
||||||
|
|
||||||
|
|
||||||
;;; User commands
|
|
||||||
|
|
||||||
(defun t-mouse-stop ()
|
|
||||||
"Stop getting mouse events from an asynchronous process."
|
|
||||||
(interactive)
|
|
||||||
(delete-process t-mouse-process)
|
|
||||||
(setq t-mouse-process nil))
|
|
||||||
|
|
||||||
(defun t-mouse-run ()
|
|
||||||
"Starts getting a stream of mouse events from an asynchronous process.
|
|
||||||
Only works if Emacs is running on a virtual terminal without a window system.
|
|
||||||
Returns the newly created asynchronous process."
|
|
||||||
(interactive)
|
|
||||||
(let ((tty (t-mouse-tty))
|
|
||||||
(process-connection-type t))
|
|
||||||
(if (or window-system (not (stringp tty)))
|
|
||||||
(error "Run t-mouse on a virtual terminal without a window system"))
|
|
||||||
(setq t-mouse-process
|
|
||||||
(start-process "t-mouse" nil
|
|
||||||
"mev" "-i" "-E" "-C" tty
|
|
||||||
(if t-mouse-swap-alt-keys
|
|
||||||
"-M-leftAlt" "-M-rightAlt")
|
|
||||||
"-e-move" "-dall" "-d-hard"
|
|
||||||
"-f")))
|
|
||||||
(setq t-mouse-filter-accumulator "")
|
|
||||||
(set-process-filter t-mouse-process 't-mouse-process-filter)
|
|
||||||
(process-kill-without-query t-mouse-process)
|
|
||||||
t-mouse-process)
|
|
||||||
|
|
||||||
(provide 't-mouse)
|
|
||||||
|
|
||||||
;;; t-mouse.el ends here
|
|
|
@ -1,69 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# $Id: gpm.init,v 1.2 2002/05/28 19:13:51 nico Exp $
|
|
||||||
#
|
|
||||||
# chkconfig: 2345 85 15
|
|
||||||
# description: \
|
|
||||||
# gpm provides mouse support to text-based Linux applications as \
|
|
||||||
# well as console cut-and-paste operations using the mouse.
|
|
||||||
#
|
|
||||||
# processname: gpm
|
|
||||||
# pidfile: /var/run/gpm.pid
|
|
||||||
# config: /etc/sysconfig/mouse
|
|
||||||
|
|
||||||
# source function library
|
|
||||||
. /etc/init.d/functions
|
|
||||||
|
|
||||||
OWL_STARTUP_ENABLE=1
|
|
||||||
|
|
||||||
MOUSECFG=/etc/sysconfig/mouse
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
start)
|
|
||||||
if [ -f "$MOUSECFG" ]; then
|
|
||||||
. "$MOUSECFG"
|
|
||||||
else
|
|
||||||
MOUSETYPE="none"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$MOUSETYPE" = "none" ]; then
|
|
||||||
echo "Not starting gpm (no mouse is configured)"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$MOUSETYPE" = "Microsoft" ]; then
|
|
||||||
MOUSETYPE=ms
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$MOUSETYPE" ]; then
|
|
||||||
GPM_ARG="-t $MOUSETYPE"
|
|
||||||
else
|
|
||||||
GPM_ARG=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "0$OWL_STARTUP_VERSION" -ge 3 ]; then
|
|
||||||
daemon --pidfile /var/run/gpm.pid --expect-user root \
|
|
||||||
-- gpm "$GPM_ARG"
|
|
||||||
else
|
|
||||||
daemon gpm "$GPM_ARG"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
stop)
|
|
||||||
if [ "0$OWL_STARTUP_VERSION" -ge 3 ]; then
|
|
||||||
killproc --pidfile /var/run/gpm.pid --expect-user root gpm
|
|
||||||
else
|
|
||||||
killproc gpm
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
restart|reload)
|
|
||||||
$0 stop
|
|
||||||
$0 start
|
|
||||||
;;
|
|
||||||
status)
|
|
||||||
status --pidfile /var/run/gpm.pid --expect-user root gpm
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Usage: gpm {start|stop|restart|status}"
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
|
|
||||||
exit $?
|
|
|
@ -1,4 +0,0 @@
|
||||||
Have a look into MANIFEST for more informations.
|
|
||||||
|
|
||||||
README - this file
|
|
||||||
TPdetect.cc - sample TP detection
|
|
|
@ -1,283 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
|
|
||||||
unsigned char* inbuffer;
|
|
||||||
unsigned char* outbuffer;
|
|
||||||
|
|
||||||
// wait for up to 0.1seconds for an acknowledgement
|
|
||||||
int getack(int fd) {
|
|
||||||
fd_set set;
|
|
||||||
timeval timeout;
|
|
||||||
FD_ZERO(&set);
|
|
||||||
FD_SET(fd,&set);
|
|
||||||
timeout.tv_sec=0;
|
|
||||||
timeout.tv_usec=100000;
|
|
||||||
if (select(FD_SETSIZE,&set,NULL,NULL,&timeout)) {
|
|
||||||
int b=read(fd,inbuffer,1);
|
|
||||||
if(b==1) {
|
|
||||||
if(inbuffer[0]==0xfa) {
|
|
||||||
//printf("<< Acknowledged\r\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (inbuffer[0]=0xfe)
|
|
||||||
printf("<- PS/2: Error\r\n");
|
|
||||||
else
|
|
||||||
printf("<- Not an acknowledgement:%02x\r\n",inbuffer[0]);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Try to receive n bytes
|
|
||||||
int receive(int fd,int n) {
|
|
||||||
int a=0,b;
|
|
||||||
while(a<n) {
|
|
||||||
b= read(fd,inbuffer+a,n-a);
|
|
||||||
if(b==-1) {
|
|
||||||
printf("Read Error!\r\n");
|
|
||||||
return 0;
|
|
||||||
} if (b==0)
|
|
||||||
return a;
|
|
||||||
else {
|
|
||||||
if(inbuffer[a]==0xfa)
|
|
||||||
printf("<- Acknowledged\r\n");
|
|
||||||
else
|
|
||||||
a=a+b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send cmd to the fd filehandle
|
|
||||||
void command(int fd, unsigned char cmd) {
|
|
||||||
outbuffer[0]=cmd;
|
|
||||||
write(fd,outbuffer,1);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Detect trackpoint device!
|
|
||||||
int detectTP(int fd) {
|
|
||||||
fd_set set;
|
|
||||||
timeval timeout;
|
|
||||||
FD_ZERO(&set);
|
|
||||||
FD_SET(fd,&set);
|
|
||||||
timeout.tv_sec=0;
|
|
||||||
timeout.tv_usec=100000;
|
|
||||||
|
|
||||||
printf("-> TP: Send extended ID\r\n");
|
|
||||||
command(fd,0xe1);
|
|
||||||
if (! getack(fd))
|
|
||||||
{
|
|
||||||
if(inbuffer[0]==0xfe) { // give it a second try
|
|
||||||
command(fd,0xe1);
|
|
||||||
if(getack(fd)) goto ack;
|
|
||||||
}
|
|
||||||
printf("No trackpoint controller detected\r\n");
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
ack:
|
|
||||||
int a=0;
|
|
||||||
while(select(FD_SETSIZE,&set,NULL,NULL,&timeout)) {
|
|
||||||
read(fd,inbuffer+a,1);
|
|
||||||
a++;
|
|
||||||
}
|
|
||||||
char * version;
|
|
||||||
if(inbuffer[0]==0x01) {
|
|
||||||
switch(inbuffer[1]) {
|
|
||||||
case 0x01:
|
|
||||||
version = "8E/98";
|
|
||||||
break;
|
|
||||||
case 0x02:
|
|
||||||
version = "A4";
|
|
||||||
break;
|
|
||||||
case 0x03:
|
|
||||||
version = "AB";
|
|
||||||
break;
|
|
||||||
case 0x04:
|
|
||||||
version = "03";
|
|
||||||
break;
|
|
||||||
case 0x05:
|
|
||||||
version = "B2/B4";
|
|
||||||
break;
|
|
||||||
case 0x06:
|
|
||||||
version = "B1/B3/B5/B8/2B";
|
|
||||||
break;
|
|
||||||
case 0x07:
|
|
||||||
version = "?";
|
|
||||||
break;
|
|
||||||
case 0x08:
|
|
||||||
version = "?";
|
|
||||||
break;
|
|
||||||
case 0x09:
|
|
||||||
version = "?";
|
|
||||||
break;
|
|
||||||
case 0x0A:
|
|
||||||
version = "35";
|
|
||||||
break;
|
|
||||||
case 0x0B:
|
|
||||||
version = "3A/3B";
|
|
||||||
break;
|
|
||||||
case 0x0C:
|
|
||||||
version = "3C";
|
|
||||||
break;
|
|
||||||
case 0x0D:
|
|
||||||
version = "3D";
|
|
||||||
break;
|
|
||||||
case 0x0E:
|
|
||||||
version = "3E";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
printf("Unrecognized ID: %02x\n",inbuffer[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
printf("IBM Trackpoint controller detected. Version %s \r\n",version);
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
printf("No IBM trackpoint controller detected\r\n");
|
|
||||||
printf("Extended ID: %02x %02x\r\n",inbuffer[0],inbuffer[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Reset PS/2 device
|
|
||||||
int reset(int fd) {
|
|
||||||
command(fd,0xff);
|
|
||||||
printf("-> PS/2: Reset\r\n");
|
|
||||||
getack(fd);
|
|
||||||
receive(fd,2);
|
|
||||||
if(inbuffer[0]==0xaa && inbuffer[1]==0x00) {
|
|
||||||
printf("<- PS/2: Succesfull initialization\r\n");
|
|
||||||
return 1;
|
|
||||||
} else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get PS/2 ID
|
|
||||||
int getdeviceid(int fd) {
|
|
||||||
command(fd,0xf2);
|
|
||||||
getack(fd);
|
|
||||||
printf("-> PS/2: Get device ID\r\n");
|
|
||||||
if(receive(fd,1)==1) {
|
|
||||||
printf("<- PS/2: Device ID: %02x\n",inbuffer[0]);
|
|
||||||
return inbuffer[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void enabledatareport(int fd) {
|
|
||||||
command(fd, 0xf4);
|
|
||||||
printf("-> PS/2: (re)Enable data-reporting\r\n");
|
|
||||||
getack(fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
void disabledatareport(int fd) {
|
|
||||||
command(fd, 0xf5);
|
|
||||||
printf("-> PS/2: Disable data-reporting\r\n");
|
|
||||||
getack(fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
void setsamplerate(int fd, int rate) {
|
|
||||||
command(fd,0xf3);
|
|
||||||
printf("-> PS/2: Set sample rate: %u\r\n",rate);
|
|
||||||
getack(fd);
|
|
||||||
command(fd,rate);
|
|
||||||
getack(fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
void setresolution(int fd, int res) {
|
|
||||||
command(fd,0xe8);
|
|
||||||
printf("-> PS/2: Set resolution: %u\r\n",res);
|
|
||||||
getack(fd);
|
|
||||||
command(fd,res);
|
|
||||||
getack(fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
void getstatus(int fd) {
|
|
||||||
command(fd,0xe9);
|
|
||||||
printf("-> Send status\r\n");
|
|
||||||
receive(fd,3);
|
|
||||||
printf("<- Status is: 0x%02x,0x%02x,0x%02x\n",inbuffer[0],inbuffer[1],inbuffer[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void getlogiid(int fd) {
|
|
||||||
receive(fd,3);
|
|
||||||
unsigned char a = inbuffer[0];
|
|
||||||
unsigned char id = ((a >> 4) & 0x07) | ((a<<3) & 0x78);
|
|
||||||
printf("Logi-id: %d\r\n", id);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Put trackpoint device into transparent mode
|
|
||||||
void enabletransparent(int fd) {
|
|
||||||
command(fd,0xe2);
|
|
||||||
getack(fd);
|
|
||||||
command(fd,0x4e);
|
|
||||||
getack(fd);
|
|
||||||
printf("-> TP: Set soft-transparent\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get trackpoint device out of transparent mode
|
|
||||||
// Notice the command gives not-ack because its in transparent mode,
|
|
||||||
// just ignore these. After the command finishes to acknowledges are sent.
|
|
||||||
void disabletransparent(int fd) {
|
|
||||||
command(fd,0xe2);
|
|
||||||
//getack(fd);
|
|
||||||
command(fd,0xb9);
|
|
||||||
getack(fd);
|
|
||||||
printf("-> TP: Cancel soft-transparent\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Detect external device on trackpoint controller
|
|
||||||
bool detectExternal(int fd) {
|
|
||||||
command(fd,0xe2);
|
|
||||||
getack(fd);
|
|
||||||
command(fd,0x21);
|
|
||||||
getack(fd);
|
|
||||||
receive(fd,1);
|
|
||||||
if(inbuffer[0] && 8) {
|
|
||||||
printf("<- TP: External device present\r\n");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf("<- TP: No external device\r\n");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// IMPS/2 magic-initialization and detection
|
|
||||||
bool detectIMPS(int fd) {
|
|
||||||
setsamplerate(fd,200);
|
|
||||||
setsamplerate(fd,100);
|
|
||||||
setsamplerate(fd,80);
|
|
||||||
if(getdeviceid(fd)==3) {
|
|
||||||
printf("IMPS/2 mouse detected\r\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
inbuffer = new unsigned char[200];
|
|
||||||
outbuffer = new unsigned char[200];
|
|
||||||
int fd = open("/dev/psaux", O_RDWR);
|
|
||||||
reset(fd);
|
|
||||||
// If kernel<2.4.9 remember to disable datareport,
|
|
||||||
// in later kernels reset is enough
|
|
||||||
disabledatareport(fd);
|
|
||||||
sleep(1); // make sure we dont get any more confusing datareports.
|
|
||||||
if(detectTP(fd)) {
|
|
||||||
if(detectExternal(fd)) {
|
|
||||||
enabletransparent(fd);
|
|
||||||
if(! detectIMPS(fd)) disabletransparent(fd);
|
|
||||||
setsamplerate(fd,200);
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
detectIMPS(fd);
|
|
||||||
|
|
||||||
enabledatareport(fd);
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
}
|
|
|
@ -1,653 +0,0 @@
|
||||||
// show effects of lost bytes on ps/2 mouse protocol
|
|
||||||
// Later: largely extended for mouse autodetect etc. (c) gunther mayer 13.05.2001
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
|
|
||||||
/* S48a reagiert auf Versapad: protokoll auf 4byte intellimouse
|
|
||||||
dto. auf logicord
|
|
||||||
|
|
||||||
12.06.2001: MS PNP id
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define GEN3U 1
|
|
||||||
#define IM 2
|
|
||||||
#define GEN3D 3
|
|
||||||
|
|
||||||
int reset=1;
|
|
||||||
int mspnp=0;
|
|
||||||
int logi=1;
|
|
||||||
int logicord=0; // dies irritiert manchmal genius 3U direkt nach hotplug
|
|
||||||
int logi_extended=1;
|
|
||||||
int logi_extra=0; /* NO! */
|
|
||||||
int logi_extended_s48zilog=1;
|
|
||||||
int genius=0;
|
|
||||||
int testid=0;
|
|
||||||
int a4tech=0;
|
|
||||||
int intellimouse_explorer=0;
|
|
||||||
int intellimouse=0;
|
|
||||||
int alpsglidepoint=0;
|
|
||||||
int versapad=0;
|
|
||||||
int kensington=0;
|
|
||||||
int synaptics=0;
|
|
||||||
int cirque=0;
|
|
||||||
|
|
||||||
int streamnostream=1;
|
|
||||||
|
|
||||||
int consumefa(FILE *f)
|
|
||||||
{ int c=0xfa;
|
|
||||||
|
|
||||||
while(c==0xfa) {
|
|
||||||
c=fgetc(f);
|
|
||||||
if(c==0xfa) printf(" 0xfa");
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sendbuf(int fd,FILE *f,char *buf,int num)
|
|
||||||
{
|
|
||||||
int i,c,rep;
|
|
||||||
|
|
||||||
for(i=0;i<num;i++) {
|
|
||||||
write(fd,&buf[i],1);
|
|
||||||
c=fgetc(f);
|
|
||||||
if(c!=0xfa) printf("sent: %02x expected FA, got: %02x\n",buf[i],c);
|
|
||||||
if((c==0xfe) &&!! (rep!=1)) {
|
|
||||||
printf("repeating...\n");
|
|
||||||
rep=1;
|
|
||||||
i--;
|
|
||||||
}
|
|
||||||
else rep=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void gete9(int fd,FILE *f)
|
|
||||||
{ char buf[1]; int a,b,c,d;
|
|
||||||
buf[0]=0xe9;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
if(a==0xfe) { printf("FE\n"); write(fd,&buf,1); a=consumefa(f);}
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
d=fgetc(f);
|
|
||||||
printf(" e9 is %02x %02x %02x %02x\n",a,b,c,d);
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
int ratetest(int fd,FILE *f)
|
|
||||||
{ int i,r,a,b,c,rates[]={10,20,40,60,80,100,200};
|
|
||||||
char buf[3];
|
|
||||||
|
|
||||||
for(i=0;i<7;i++) {
|
|
||||||
r=rates[i];
|
|
||||||
printf("setrate %d ",r);
|
|
||||||
buf[0]=0xf3;
|
|
||||||
buf[1]=r;
|
|
||||||
buf[2]=0xe9;
|
|
||||||
write(fd,&buf,3);
|
|
||||||
a=consumefa(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
if(c==r) printf(" OK\n");
|
|
||||||
else printf(" nono (%2x %2x %2x)\n",a,b,c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
int i=0,x,a,y, xo,yo,xs,ys,r,m,l,t;
|
|
||||||
int xmin=0,xmax=0,ymin=0,ymax=0,z;
|
|
||||||
signed int dx,dy;
|
|
||||||
int xtot=0,ytot=0,dz,e,ee,d,b,fd,c;
|
|
||||||
char buf[255];
|
|
||||||
char logi_id[255]={ 0xe8, 0x00, 0xe6, 0xe6, 0xe6,0xe9};
|
|
||||||
char logi_cordless_status[]={ 0xe8, 0x03, 0xe7, 0xe7, 0xe7,0xe9};
|
|
||||||
char logi_extended_id[]={ 0xe6, 0xe8,0, 0xe8,3, 0xe8,2, 0xe8,1 };
|
|
||||||
char logi_extended_s48zilog_id[]={ 0xe6, 0xe8,0, 0xe8,3, 0xe8,2, 0xe8,1 ,0xf3,200};
|
|
||||||
char logi_extended_idb[]={ 0xe6, 0xe8,3, 0xe8,1, 0xe8,2, 0xe8,3};
|
|
||||||
char genius_id[]={ 0xe8, 0x03, 0xe6, 0xe6, 0xe6, 0xe9};
|
|
||||||
char test_id[]= {0xe6, 0xe6, 0xe6, 0xe9};
|
|
||||||
char a4tech_id[]={ 0xf3,200, 0xf3,100, 0xf3,80, 0xf3,60, 0xf3,40, 0xf3,20};
|
|
||||||
char mspnp_id[]={ 0xf3, 20, 0xf3,40, 0xf3,60};
|
|
||||||
char intellimouse_id[]={0xf3,200, 0xf3,100, 0xf3,80};
|
|
||||||
char intellimouse_explorer_id[]={ 0xf3,200, 0xf3,200, 0xf3,80};
|
|
||||||
// following are untested
|
|
||||||
char alps_glidepoint_id[]={ 0xf3,100, 0xe8,0, 0xe7, 0xe7, 0xe7, 0xe9};
|
|
||||||
char versapad_id[]={ 0xe8,2, 0xf3,100, 0xe6, 0xe6, 0xe6, 0xe6, 0xe9};
|
|
||||||
char kensington_id[]={0xf3,10,0xf2};
|
|
||||||
char kensington_enable[]={0xe8,0, 0xf3,20, 0xf3,60, 0xf3,40, 0xf3,20, 0xf3,20,
|
|
||||||
0xf3,60, 0xf3,40, 0xf3,20, 0xf3,20, 0xe9};
|
|
||||||
char synaptics_id[]={ 0xe6, 0xe8,0, 0xe8,0, 0xe8,0,0xe8,0, 0xe9 };
|
|
||||||
char cirque_id[]={ /*0xe9*/ 0xf5, 0xf5, 0xe7, 0xe6, 0xe7, 0xe9}; //monitorintro
|
|
||||||
// from kitcat-0.1.8 source: cirque smartcat uses 18 bytes for hires mode !
|
|
||||||
// kitcat has 2 reset command in prologue !?
|
|
||||||
//undoc:
|
|
||||||
char cirque_hires_1[]={ 0xf4, 0xf4, 0xf2 /*read ID*/, 0xf3,0x28, 0xf4, 0xf5,
|
|
||||||
0xf2, 0xf4, 0xf3,0x0a, 0xf3, 0xc8, 0xe7, 0xe8,0x02, 0xf4,
|
|
||||||
0xf3,0x3c, 0xf5, 0xf4, 0xf4 };
|
|
||||||
//according to documentation. commented out in kitcat
|
|
||||||
char cirq_hires_2[]= {0xf2, 0xe7, 0xe8,0x02, 0xf5, 0xf2, 0xf4, 0xf4};
|
|
||||||
// in kitcat
|
|
||||||
char cirq_hires[]={0xe8,0, 0xf3, 0xc8, 0xe8,0x03, 0xf2, 0xf4, 0xf5, /*0xff, 0xf4 */};
|
|
||||||
|
|
||||||
int typ=0;
|
|
||||||
f=fopen("/dev/misc/psaux","r");
|
|
||||||
if(f==NULL) strerror(errno);
|
|
||||||
|
|
||||||
fd = open("/dev/misc/psaux", O_RDWR);
|
|
||||||
|
|
||||||
|
|
||||||
// fputc(0xf3,f);
|
|
||||||
// fputc(400,f);
|
|
||||||
|
|
||||||
// fputc(3,f);
|
|
||||||
|
|
||||||
if(reset) {
|
|
||||||
buf[0]=0xff;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
//a=fgetc(f);
|
|
||||||
printf("reset\n");
|
|
||||||
printf("sleep 1\n");
|
|
||||||
sleep(1);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mspnp) {
|
|
||||||
printf("Test MS PNP ID (this hangs currently on other types due to lack of timeout:\n");
|
|
||||||
write(fd,mspnp_id,6);
|
|
||||||
a=consumefa(f);
|
|
||||||
printf("PnP id a is %x\n",a);
|
|
||||||
for(i=0;i<7;i++) {
|
|
||||||
a=fgetc(f);
|
|
||||||
printf("PnP id %x\n",a);
|
|
||||||
}
|
|
||||||
// My "Intellimouse 1.3A PS/2 Compatible" (OEM product ID on bottom)
|
|
||||||
// responds with these 7 bytes (which are too given in "moudep.c" in Win2000DDK):
|
|
||||||
// 0x32 0x1f 0x23 0x0b 0x0b 0x0b 0x03
|
|
||||||
// The DDK recognizes MSH0002, MSH0005, MSH0010 as Wheel-IDs
|
|
||||||
// The DDK says: New Mice respond with:MSHxxxx, old style: pnpxxxx
|
|
||||||
// Sic: these bytes are sent without a POLL_DATA or GET_MOUSE_ID command !!!
|
|
||||||
|
|
||||||
//my other mice respond here too: (I manually found out the number of bytes)
|
|
||||||
// Serial+MousePort Mouse 2.0= 19 99 31 b1 19 99 0B 8B 21 A1 0B 8B 30 B0
|
|
||||||
// WinDDK speaks about older mice which send make and break codes (7+7)
|
|
||||||
// MousePort Mouse 2.1A(oem)= no response
|
|
||||||
// trekker two button mouse 2.0A= 19 31 19 0B 21 0B 30
|
|
||||||
// BasicMouse serial+PS/2 = 19 99 31 b1 19 99 0b 8b 21 a1 0b 8b 30 b0
|
|
||||||
// IntelliMouse Trackball 1.0= 32 1F 23 0B 0B 0B 06
|
|
||||||
// IntelliMouseExplorer usb/ps2= 32 1F 23 0B 0B 02 21
|
|
||||||
|
|
||||||
/* http://www.microsoft.com/norge/support/windows2000/articles/216570.asp
|
|
||||||
MSH0001 – Standard toknapps Microsoft Mouse
|
|
||||||
MSH0002 – Microsoft Wheel Mouse
|
|
||||||
MSH0005 – Microsoft Track Ball Mouse
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
if(streamnostream) {
|
|
||||||
buf[0]=0xf0;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
printf("Non-stream mode is %x\n",a);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
buf[0]=0xf4;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
printf("enable is %x\n",a);
|
|
||||||
|
|
||||||
|
|
||||||
buf[0]=0xf2;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
b=consumefa(f);
|
|
||||||
printf("ID(f2) is %x\n",b);
|
|
||||||
|
|
||||||
ratetest(fd,f);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
buf[0]=0xf3;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
buf[0]=200;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
|
|
||||||
|
|
||||||
buf[0]=0xe8;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
buf[0]=3;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
buf[0]=0xe6;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
printf("e6 is %02x\n",fgetc(f));
|
|
||||||
|
|
||||||
|
|
||||||
buf[0]=0xe9;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
b=consumefa(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
d=fgetc(f);
|
|
||||||
printf(" e9 is %02x %02x %02x\n",b,c,d);
|
|
||||||
|
|
||||||
if(logi) {
|
|
||||||
// others repond to this too!
|
|
||||||
/* e.g.doc7-pxz-p440-ds-110.pdf-USAR-pixiePoint--Pointing.stcik.pdf
|
|
||||||
byte0:standard 1:3(buttons) 2:firmware release
|
|
||||||
*/
|
|
||||||
int devicetype;
|
|
||||||
write(fd,&logi_id,6);
|
|
||||||
a=consumefa(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
devicetype = ((a >> 4) & 0x07) | ((a << 3) & 0x78);
|
|
||||||
printf("logi e9 is %02x %02x %02x vojtech-devicetype=%d =0x%2x\n",a,b,c,devicetype,devicetype);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
gete9(fd,f);
|
|
||||||
|
|
||||||
|
|
||||||
if(logi_extended) { int g;
|
|
||||||
write(fd,&logi_extended_id,9);
|
|
||||||
buf[0]=0xeb;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=consumefa(f);
|
|
||||||
if(a==0xfe) { printf("FE\n"); write(fd,&buf,1); a=consumefa(f); }
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
printf("logi extended poll 1 eb is %02x %02x %02x\n",a,b,c);
|
|
||||||
|
|
||||||
write(fd,&logi_extended_idb,9);
|
|
||||||
buf[0]=0xeb;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=consumefa(f);
|
|
||||||
if(a==0xfe) { printf("FE\n"); write(fd,&buf,1); a=consumefa(f); }
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
printf("logi extended poll 2 eb is %02x %02x %02x\n",a,b,c);
|
|
||||||
|
|
||||||
if(logi_extra) { // marble mouse sends 2 extra triples
|
|
||||||
a=fgetc(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
d=fgetc(f);
|
|
||||||
e=fgetc(f);
|
|
||||||
ee=fgetc(f);
|
|
||||||
printf("further is %02x %02x %02x %02x %02x %02x\n",a,b,c,d,e,ee);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(logi_extended_s48zilog) { int g;
|
|
||||||
write(fd,&logi_extended_s48zilog_id,11);
|
|
||||||
buf[0]=0xeb;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=consumefa(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
printf("logi extended_s48 zilo poll is %02x %02x %02x\n",a,b,c);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
buf[0]=0xe9;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
if(a==0xfe) { printf("FE\n"); write(fd,&buf,1); a=consumefa(f);}
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
d=fgetc(f);
|
|
||||||
printf(" e9 is %02x %02x %02x %02x\n",a,b,c,d);
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
if(logicord) {
|
|
||||||
write(fd,&logi_cordless_status,6);
|
|
||||||
a=fgetc(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
d=fgetc(f);
|
|
||||||
e=fgetc(f);
|
|
||||||
ee=fgetc(f);
|
|
||||||
printf("logicord e9 is %02x %02x %02x %02x %02x %02x\n",a,b,c,d,e,ee);
|
|
||||||
|
|
||||||
gete9(fd,f);
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[0]=0xe9;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
d=fgetc(f);
|
|
||||||
printf(" e9 is %02x %02x %02x %02x\n",a,b,c,d);
|
|
||||||
|
|
||||||
if(testid) {
|
|
||||||
printf("\n");
|
|
||||||
write(fd,&test_id,4);
|
|
||||||
a=consumefa(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
printf("test id e9 is %02x %02x %02x\n",a,b,c);
|
|
||||||
gete9(fd,f);
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(genius) {
|
|
||||||
write(fd,&genius_id,6);
|
|
||||||
a=consumefa(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
printf("genius id e9 is %02x %02x %02x\n",a,b,c);
|
|
||||||
if(c!=0xc8) {
|
|
||||||
|
|
||||||
if((b==0x33) && (c==0x44)) {
|
|
||||||
printf("autodetect GEN3D\n");
|
|
||||||
typ=GEN3D; // Netscroll groller 6bytes
|
|
||||||
}
|
|
||||||
else if((b==0x33) && (c==0x55)) {
|
|
||||||
printf("autodetect GEN3U\n");
|
|
||||||
typ=GEN3U; // Netmouse 4 bytes
|
|
||||||
}
|
|
||||||
gete9(fd,f);
|
|
||||||
}
|
|
||||||
|
|
||||||
ratetest(fd,f);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(alpsglidepoint) {
|
|
||||||
write(fd,&alps_glidepoint_id,8);
|
|
||||||
a=consumefa(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
|
|
||||||
if((b!=0) && (c!=100)) printf("Alps Glidepoint detected\n");
|
|
||||||
/* My Genius Newscroll locks rate=$3c (!50) !? */
|
|
||||||
|
|
||||||
printf("alps glidepoint id e9 is %02x %02x %02x\n",a,b,c);
|
|
||||||
gete9(fd,f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(versapad) {
|
|
||||||
write(fd,&versapad_id,9);
|
|
||||||
a=consumefa(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
|
|
||||||
if((b==0) && (c==10)) printf("versapad detected\n");
|
|
||||||
|
|
||||||
printf("versapad id e9 is %02x %02x %02x\n",a,b,c);
|
|
||||||
gete9(fd,f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(kensington) {
|
|
||||||
write(fd,&kensington_id,3);
|
|
||||||
a=consumefa(f);
|
|
||||||
printf("kensington f3 id is %d\n",a);
|
|
||||||
if(a==2) printf("AUTODETECT Kensington\n");
|
|
||||||
|
|
||||||
write(fd,&kensington_enable,21);
|
|
||||||
a=consumefa(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
|
|
||||||
printf("kensingon enable = %02x %02x %02x\n",a,b,c);
|
|
||||||
|
|
||||||
// beware of GENIUS: 3U locks rate at 100; 3D at 20-60
|
|
||||||
if((b!=0) && (c!=20)) printf("AUTODETECT Kensington enable\n");
|
|
||||||
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(intellimouse){
|
|
||||||
write(fd,&intellimouse_id,6);
|
|
||||||
buf[0]=0xf2;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
b=consumefa(f);
|
|
||||||
printf("Intellimouse ID(f2) is %x\n",b);
|
|
||||||
if(b==3) {
|
|
||||||
printf("autodetect is:typ=IM;\n");
|
|
||||||
typ=IM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(intellimouse_explorer) {
|
|
||||||
write(fd,&intellimouse_explorer_id,6);
|
|
||||||
buf[0]=0xf2;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
b=consumefa(f);
|
|
||||||
printf("Intellimouse Explorer ID(f2) is %x\n",b);
|
|
||||||
if(b==4) {
|
|
||||||
printf("autodetect is:typ=IM;\n");
|
|
||||||
typ=IM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(synaptics) {
|
|
||||||
write(fd,&synaptics_id,10);
|
|
||||||
a=consumefa(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
|
|
||||||
printf("synaptics_id is %02x %02x %02x\n",a,b,c);
|
|
||||||
if(b==0x47) printf("AUTODETECT Synaptics\n");
|
|
||||||
gete9(fd,f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(cirque) {
|
|
||||||
printf("Before cirque\n");
|
|
||||||
gete9(fd,f);
|
|
||||||
sendbuf(fd,f,cirque_id,6);
|
|
||||||
a=consumefa(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
|
|
||||||
printf("cirque_id is %02x %02x %02x\n",a,b,c);
|
|
||||||
|
|
||||||
if(a==0x88) printf("AUTODETECT Cirque\n"); // my smartcat has: 88 03 02
|
|
||||||
|
|
||||||
gete9(fd,f);
|
|
||||||
gete9(fd,f);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(a4tech) {
|
|
||||||
sendbuf(fd,f,a4tech_id,12);
|
|
||||||
buf[0]=0xf2;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
b=consumefa(f);
|
|
||||||
printf("a4tech ID(f2) is %x\n",b);
|
|
||||||
|
|
||||||
if(b==6 || b==8) printf("AUTODETECT: a4tech\n");
|
|
||||||
// b=6: spiffy gyro-mouse "8D Profi-Mouse Point Stick"
|
|
||||||
// b=8: boeder Smartmouse Pro (4Button, 2Scrollwheel, 520dpi) PSM_4DPLUS_ID MOUSE_MODEL_4DPLUS
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[0]=0xf2;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
b=consumefa(f);
|
|
||||||
printf( " ID(f2) is %x\n",b);
|
|
||||||
|
|
||||||
streamnostream=1;
|
|
||||||
if(streamnostream) {
|
|
||||||
buf[0]=0xea;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
printf("Activating stream mode %x\n",a);
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[0]=0xf4;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
printf("Enable mouse%x\n",a);
|
|
||||||
|
|
||||||
//scale
|
|
||||||
buf[0]=0xe6;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
|
|
||||||
|
|
||||||
// resolution
|
|
||||||
buf[0]=0xe8;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
buf[0]=2;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
|
|
||||||
ratetest(fd,f);
|
|
||||||
|
|
||||||
// rate
|
|
||||||
buf[0]=0xf3;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
buf[0]=100;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
|
|
||||||
|
|
||||||
buf[0]=0xe9;
|
|
||||||
write(fd,&buf,1);
|
|
||||||
a=fgetc(f);
|
|
||||||
b=fgetc(f);
|
|
||||||
c=fgetc(f);
|
|
||||||
d=fgetc(f);
|
|
||||||
printf(" e9 is %02x %02x %02x %02x\n",a,b,c,d);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//printf("Simulating 2 lost bytes\n");
|
|
||||||
//a=fgetc(f); a=fgetc(f);
|
|
||||||
|
|
||||||
// printf("Simulating 1 lost byte\n");
|
|
||||||
//a=fgetc(f);
|
|
||||||
|
|
||||||
printf("autodetect has typ=%d\n",typ);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
a=fgetc(f);
|
|
||||||
x=fgetc(f);
|
|
||||||
y=fgetc(f);
|
|
||||||
if(typ==GEN3U || typ==IM) z=fgetc(f);
|
|
||||||
i++;
|
|
||||||
printf("%5d -- %02x %02x %02x",i,a,x,y);
|
|
||||||
if(typ==GEN3U || typ==IM) printf(" %02x",z);
|
|
||||||
|
|
||||||
yo=a&0x80;
|
|
||||||
xo=a&0x40;
|
|
||||||
ys=a&0x20;
|
|
||||||
xs=a&0x10;
|
|
||||||
t=a&0x08;
|
|
||||||
m=a&0x04;
|
|
||||||
r=a&0x02;
|
|
||||||
l=a&0x01;
|
|
||||||
|
|
||||||
dx=x;
|
|
||||||
dy=y;
|
|
||||||
|
|
||||||
if(xs) dx= (~255) | dx; /* 9bit 2complement sign extension to signed integer */
|
|
||||||
if(ys) dy= (~255) | dy;
|
|
||||||
|
|
||||||
if (dx<xmin) xmin=dx;
|
|
||||||
if (dy<ymin) ymin=dy;
|
|
||||||
if (dx>xmax) xmax=dx;
|
|
||||||
if (dy>ymax) ymax=dy;
|
|
||||||
|
|
||||||
xtot=xtot+dx; /* total count */
|
|
||||||
ytot=ytot+dy;
|
|
||||||
|
|
||||||
|
|
||||||
// recognize mouseman+ packets aka PS2PP or PS2++ protocol
|
|
||||||
if( ((a&0x48) == 0x48) && // bit3 and bit6 set
|
|
||||||
((x&3) == 0x02) && // bit0 unset, bit1 set
|
|
||||||
(((x>>1)&0x40) == (x&0x40)) && // bit 7 = bit 6
|
|
||||||
( ((x>>7)&0x01) != ((a>>4)&0x01)) && // neg of p2
|
|
||||||
( ((x>>2)&0x03) == (y&0x03))) {// these 2 bits equal
|
|
||||||
int packettype;
|
|
||||||
packettype= ((x>>4) &0x03) | ((a>>2)&0x0c);
|
|
||||||
printf(" ps2++ packet type=0x%0x ",packettype);
|
|
||||||
|
|
||||||
switch (packettype) {
|
|
||||||
case 0:
|
|
||||||
printf("ID Data packet, model=0x%02x (decimal=%d)",y,y);
|
|
||||||
break;
|
|
||||||
case 1: // wheel data + BTN4+5 +Horizontal/vertical
|
|
||||||
dz = (y&0x07) - (y&0x08); //2s complement
|
|
||||||
printf("wheel: %d ",dz);
|
|
||||||
if(y&0x10) printf("Btn4 ");
|
|
||||||
if(y&0x20) printf("Btn3");
|
|
||||||
break;
|
|
||||||
case 2: /* Logitech reserves this packet type */
|
|
||||||
/* Xfree86 4.0.2
|
|
||||||
* IBM ScrollPoint uses this packet to encode its
|
|
||||||
* stick movement.
|
|
||||||
*
|
|
||||||
buttons |= (pMse->lastButtons & ~0x07);
|
|
||||||
dx = dy = 0;
|
|
||||||
dz = (pBuf[2] & 0x80) ? ((pBuf[2] >> 4) & 0x0f) - 16 :
|
|
||||||
((pBuf[2] >> 4) & 0x0f);
|
|
||||||
dw = (pBuf[2] & 0x08) ? (pBuf[2] & 0x0f) - 16 :
|
|
||||||
(pBuf[2] & 0x0f);
|
|
||||||
*/
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
printf("touchpad packet");
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
case 5:
|
|
||||||
case 6:
|
|
||||||
case 8:
|
|
||||||
case 9:
|
|
||||||
printf("cordless connect packet");
|
|
||||||
break;
|
|
||||||
case 0x0b:
|
|
||||||
printf("marble mouse or trackball packet");
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
|
|
||||||
|
|
||||||
printf(" --- %4d : %4d Buttons=%s%s%s Overflow/errors:%s%s%s ",
|
|
||||||
dx,dy,m?"M":" ", r?"R":" ", l?"L":" ",
|
|
||||||
xo?"X":" ", yo?"Y":" ", t?" ":"T");
|
|
||||||
|
|
||||||
printf(" Min/Max x=(%d , %d) y=(%d , %d) total=%d,%d\n",xmin,xmax,ymin,ymax,xtot,ytot);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
CVS_ADD="";
|
|
||||||
CVS_REMOVE="";
|
|
||||||
for a in *.gz;
|
|
||||||
do CVS_ADD="$CVS_ADD $a";
|
|
||||||
CVS_REMOVE="$CVS_REMOVE ${a%.gz}";
|
|
||||||
done;
|
|
||||||
cvs add $CVS_ADD
|
|
||||||
rm $CVS_REMOVE
|
|
||||||
cvs remove $CVS_REMOVE
|
|
|
@ -1,25 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
#
|
|
||||||
# Script by Jakub Jelinek
|
|
||||||
# Modified by Ian Zimmerman <itz@rahul.net> to reflect names from
|
|
||||||
# kernel device list
|
|
||||||
# $Id: create_vcs,v 1.2 2002/05/28 19:13:52 nico Exp $
|
|
||||||
|
|
||||||
if test -e /dev/vcs0 || test -e /dev/vcs
|
|
||||||
then
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
I=0
|
|
||||||
while [ $I -lt 25 ]
|
|
||||||
do
|
|
||||||
mknod /dev/vcs$I c 7 $I
|
|
||||||
chmod 622 /dev/vcs$I
|
|
||||||
chown root.tty /dev/vcs$I
|
|
||||||
mknod /dev/vcsa$I c 7 `expr $I + 128`
|
|
||||||
chmod 622 /dev/vcsa$I
|
|
||||||
chown root.tty /dev/vcsa$I
|
|
||||||
I=`expr $I + 1`
|
|
||||||
done
|
|
||||||
ln -s vcs0 /dev/vcs
|
|
||||||
ln -s vcsa0 /dev/vcsa
|
|
|
@ -1,7 +0,0 @@
|
||||||
|
|
||||||
cat $1 | sed 's/gpm_debug_log/gpm_report/g' > $1.tmp
|
|
||||||
cat $1.tmp | sed 's/LOG_NOTICE/GPM_PR_INFO/g' > $1.tmp2
|
|
||||||
cat $1.tmp2 | sed 's/LOG_ERR/GPM_PR_ERR/g' > $1.tmp
|
|
||||||
cat $1.tmp | sed 's/LOG_WARN/GPM_PR_WARN/g' > $1.tmp2
|
|
||||||
cat $1.tmp2 | sed 's/LOG_DEBUG/GPM_PR_DEBUG/g' > $1.tmp
|
|
||||||
echo "done:" $1.tmp
|
|
|
@ -1,37 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Date: 26th of September 2001
|
|
||||||
# Description: still missing
|
|
||||||
# Author: Nico Schottelius (nico-gpm@schottelius.org), 26th of September 2001
|
|
||||||
# Copying: GPL 2.0
|
|
||||||
#
|
|
||||||
|
|
||||||
if [ $# -ne 1 ]; then
|
|
||||||
echo `basename $0`': dir'
|
|
||||||
echo 'Hey, hey guy, what to release ?'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d $1 ]; then
|
|
||||||
echo `basename $0`': dir'
|
|
||||||
echo 'HEY! DIRECTORY! We need a gpm directory!'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
version=`echo $1 | sed 's/\/$//' | sed 's/gpm-//'`
|
|
||||||
echo -n "Releasing gpm-$version ..."
|
|
||||||
|
|
||||||
cd $1
|
|
||||||
|
|
||||||
cat configure.in | sed "s/release=.\*/release=$version/" > configure.on
|
|
||||||
mv configure.on configure.in
|
|
||||||
autoconf
|
|
||||||
|
|
||||||
cat src/headers/gpmCfg.h | sed "s/\(#define GPM_DATE\).*/\1 \"`date`\"/" > src/headers/gpmCfg.i; mv src/headers/gpmCfg.i src/headers/gpmCfg.h
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
tar cfz gpm-$version.tar.gz $1
|
|
||||||
tar cfI gpm-$version.tar.bz2 $1
|
|
||||||
|
|
||||||
echo done.
|
|
|
@ -1,315 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# gunze-setup, copied and adapted from microtouch-setup.
|
|
||||||
# Most of this code is duplicated, this is definitely not good.
|
|
||||||
#
|
|
||||||
# This program is execute by tclsh if we are in the console, and by wish
|
|
||||||
# otherwise (assuming we are under a graphic environment
|
|
||||||
|
|
||||||
#the following is a comment for tcl \
|
|
||||||
if [ $TERM = "linux" ] ; then exec tclsh $0 $* ; fi
|
|
||||||
|
|
||||||
#the following is another comment for tcl \
|
|
||||||
exec wish $0 $*
|
|
||||||
|
|
||||||
########### That's Tcl...
|
|
||||||
|
|
||||||
# The Gunze touchscreens don't adapt their output to calibration, so
|
|
||||||
# we must save calibration information somewhere...
|
|
||||||
set datafile /etc/gpm-calibration
|
|
||||||
|
|
||||||
puts "Calibration program for Gunze touch-screens"
|
|
||||||
|
|
||||||
# check generic permission
|
|
||||||
set who [exec whoami]
|
|
||||||
if [string compare $who root] {
|
|
||||||
puts stderr "you must be root to be able to run this program"
|
|
||||||
}
|
|
||||||
|
|
||||||
# check if we can access this file
|
|
||||||
if [catch {set F [open $datafile a]} err] {
|
|
||||||
puts stderr "$argv0: Can't open $datafile: $err"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
close $F
|
|
||||||
|
|
||||||
# Look for /dev/touchscreen or /dev/mouse
|
|
||||||
if [file exists /dev/mouse] {
|
|
||||||
set dev /dev/mouse
|
|
||||||
}
|
|
||||||
if [file exists /dev/touchscreen] {
|
|
||||||
set dev /dev/touchscreen
|
|
||||||
}
|
|
||||||
if ![info exists dev] {
|
|
||||||
puts stderr "$argv0: need to access /dev/touchscreen or /dev/mouse"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# horrible, for the linux console
|
|
||||||
proc goto {x y} {
|
|
||||||
set x [expr $x]
|
|
||||||
set y [expr $y]
|
|
||||||
puts -nonewline [format "\x1B\[%03i;%03iH" $y $x]
|
|
||||||
}
|
|
||||||
|
|
||||||
# an abort procedure, and one to read touchscreen data
|
|
||||||
proc do_abort {msg} {
|
|
||||||
if ![string compare $env(TERM) linux] {
|
|
||||||
goto 0 $env(LINES)-2
|
|
||||||
} else {
|
|
||||||
wm withdraw .
|
|
||||||
}
|
|
||||||
puts stderr $msg
|
|
||||||
killall -CONT gpm
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
proc get_position file {
|
|
||||||
global dev
|
|
||||||
while 1 {
|
|
||||||
gets $file string
|
|
||||||
if [scan $string %c%d,%d cmd x y]!=3 {
|
|
||||||
do_abort "Received wrong data \"$string\" from $dev"
|
|
||||||
}
|
|
||||||
# If release ('R') it's done
|
|
||||||
if $cmd==0x52 {
|
|
||||||
return "$sx $sy"
|
|
||||||
}
|
|
||||||
# If a touch event ('T'), save it
|
|
||||||
if $cmd==0x54 {
|
|
||||||
set sx $x; set sy $y
|
|
||||||
} else {
|
|
||||||
do_abort "Received wrong data \"$string\" from $dev"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ![string compare $env(TERM) linux] {
|
|
||||||
|
|
||||||
# Text-mode calibration
|
|
||||||
|
|
||||||
if {![info exists env(COLUMNS)] || ![info exists env(LINES)]} {
|
|
||||||
puts stderr "Please set COLUMNS and LINES in your environment"
|
|
||||||
puts stderr " for example, you can issue"
|
|
||||||
puts stderr " eval `resize`"
|
|
||||||
puts stderr " in your shell before running this program"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
fconfigure stdout -buffering none
|
|
||||||
exec clear > /dev/tty
|
|
||||||
|
|
||||||
|
|
||||||
# To calibrate, draw targets at 1/8 and 7/8 x-y
|
|
||||||
set x [expr $env(COLUMNS)/8]
|
|
||||||
set y [expr $env(LINES)/8]
|
|
||||||
set X [expr $env(COLUMNS) - $x]
|
|
||||||
set Y [expr $env(LINES) - $y]
|
|
||||||
|
|
||||||
# half x and y
|
|
||||||
set hx [expr $env(COLUMNS)/2]
|
|
||||||
set hy [expr $env(LINES)/2]
|
|
||||||
|
|
||||||
goto $hx-10 $hy-1; puts -nonewline "Please touch the lower"
|
|
||||||
goto $hx-10 $hy-0; puts -nonewline "left target, then the"
|
|
||||||
goto $hx-10 $hy+1; puts -nonewline "upper right target."
|
|
||||||
|
|
||||||
exec killall -STOP gpm
|
|
||||||
set F [open $dev r+]; # $dev is /dev/touchscreen or /dev/mouse
|
|
||||||
fconfigure $F -buffering none -translation auto
|
|
||||||
|
|
||||||
# Draw the target
|
|
||||||
goto $x $Y-1; puts -nonewline "|"
|
|
||||||
goto $x-1 $Y; puts -nonewline "-+-"
|
|
||||||
goto $x $Y+1; puts -nonewline "|"
|
|
||||||
|
|
||||||
# Read coordinates
|
|
||||||
set first [get_position $F]
|
|
||||||
|
|
||||||
#remove the target, draw the other
|
|
||||||
goto $x $Y-1; puts -nonewline " "
|
|
||||||
goto $x-1 $Y; puts -nonewline " "
|
|
||||||
goto $x $Y+1; puts -nonewline " "
|
|
||||||
|
|
||||||
goto $X $y-1; puts -nonewline "|"
|
|
||||||
goto $X-1 $y; puts -nonewline "-+-"
|
|
||||||
goto $X $y+1; puts -nonewline "|"
|
|
||||||
|
|
||||||
# Read coordinates
|
|
||||||
set second [get_position $F]
|
|
||||||
|
|
||||||
# remove the target
|
|
||||||
goto $X $y-1; puts -nonewline " "
|
|
||||||
goto $X-1 $y; puts -nonewline " "
|
|
||||||
goto $X $y+1; puts -nonewline " "
|
|
||||||
close $F
|
|
||||||
|
|
||||||
exec killall -CONT gpm
|
|
||||||
goto 0 $env(LINES)-2
|
|
||||||
|
|
||||||
# Now save the coordinates
|
|
||||||
set F [open $datafile w]
|
|
||||||
puts $F "# Calibration coordinates for Gunze device"
|
|
||||||
puts $F "$first $second"
|
|
||||||
close $F
|
|
||||||
|
|
||||||
puts "Done"
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# X calibration. This is Tk, so we can use the canvas items.
|
|
||||||
# However, there is uncertainty about the absolute X and Y...
|
|
||||||
|
|
||||||
set wid [winfo screenwidth .]
|
|
||||||
set hei [winfo screenheight .]
|
|
||||||
wm geometry . ${wid}x${hei}+0+0
|
|
||||||
|
|
||||||
set x [expr $wid/8]
|
|
||||||
set y [expr $hei/8]
|
|
||||||
set X [expr $wid - $x]
|
|
||||||
set Y [expr $hei - $y]
|
|
||||||
set hx [expr $wid/2]
|
|
||||||
set hy [expr $hei/2]
|
|
||||||
set cwid [expr 2*$x]
|
|
||||||
set chei [expr 2*$y]
|
|
||||||
|
|
||||||
# The offset variables account for window manager borders etc
|
|
||||||
set xoff1 0
|
|
||||||
set yoff1 0
|
|
||||||
set xoff2 0
|
|
||||||
set yoff2 0
|
|
||||||
|
|
||||||
proc recanvas {} {
|
|
||||||
global x y X Y xoff1 xoff2 yoff1 yoff2
|
|
||||||
catch {.l.c delete line}
|
|
||||||
catch {.r.c delete line}
|
|
||||||
|
|
||||||
set x1 [expr $x-$xoff1]
|
|
||||||
set y1 [expr $Y-$yoff1]
|
|
||||||
set x2 [expr $X-$xoff2]
|
|
||||||
set y2 [expr $y-$yoff2]
|
|
||||||
|
|
||||||
.l.c create line [expr $x1-50] $y1 [expr $x1+50] $y1 \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
.l.c create line $x1 [expr $y1-50] $x1 [expr $y1+50] \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
|
|
||||||
.r.c create line [expr $x2-50] $y2 [expr $x2+50] $y2 \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
.r.c create line $x2 [expr $y2-50] $x2 [expr $y2+50] \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
pack [frame .l] -side left -expand true -fill both
|
|
||||||
pack [frame .m] -side left -expand true -fill both
|
|
||||||
pack [frame .r] -side left -expand true -fill both
|
|
||||||
pack [canvas .l.c -width $cwid -hei $chei -scrollregion "0 0 $cwid $chei" \
|
|
||||||
] -side bottom
|
|
||||||
pack [frame .l.f] -expand true -fill both; #filler
|
|
||||||
pack [canvas .r.c -width $cwid -hei $chei -scrollregion "0 0 $cwid $chei" \
|
|
||||||
] -side top
|
|
||||||
pack [frame .r.f] -expand true -fill both; #filler
|
|
||||||
|
|
||||||
pack [label .m.t -text "Gunze Calibrator" -foreground blue] -pady 40
|
|
||||||
pack [label .m.l -bd 5 -relief raised] -expand true -fill both
|
|
||||||
pack [label .m.s] -expand true -fill both
|
|
||||||
|
|
||||||
bind .l.c <Enter> {
|
|
||||||
set xoff1 [expr %X - %x]
|
|
||||||
set yoff1 [expr %Y - %y]
|
|
||||||
set x1 [expr $x-$xoff1]
|
|
||||||
set y1 [expr $Y-$yoff1]
|
|
||||||
|
|
||||||
catch {.l.c delete line}
|
|
||||||
|
|
||||||
.l.c create line [expr $x1-50] $y1 [expr $x1+50] $y1 \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
.l.c create line $x1 [expr $y1-50] $x1 [expr $y1+50] \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
|
|
||||||
set done1 1
|
|
||||||
update
|
|
||||||
}
|
|
||||||
bind .r.c <Enter> {
|
|
||||||
set xoff2 [expr %X - %x]
|
|
||||||
set yoff2 [expr %Y - %y]
|
|
||||||
set x2 [expr $X-$xoff2]
|
|
||||||
set y2 [expr $y-$yoff2]
|
|
||||||
|
|
||||||
catch {.r.c delete line}
|
|
||||||
|
|
||||||
.r.c create line [expr $x2-50] $y2 [expr $x2+50] $y2 \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
.r.c create line $x2 [expr $y2-50] $x2 [expr $y2+50] \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
|
|
||||||
set done2 1
|
|
||||||
update
|
|
||||||
}
|
|
||||||
|
|
||||||
set done1 0; set done2 0
|
|
||||||
|
|
||||||
update
|
|
||||||
|
|
||||||
.m.l config -text "Please move the mouse towards\n\
|
|
||||||
the lower left corner, until a cross\n\
|
|
||||||
appears (there's no need to click)"
|
|
||||||
vwait done1
|
|
||||||
|
|
||||||
update
|
|
||||||
|
|
||||||
if !$done2 {
|
|
||||||
.m.l config -text "Please move the mouse towards\n\
|
|
||||||
the upper right corner, until a cross\n\
|
|
||||||
appears (there's no need to click)"
|
|
||||||
vwait done2
|
|
||||||
}
|
|
||||||
|
|
||||||
.m.l config -text "\nWait....\n"
|
|
||||||
after 1000
|
|
||||||
|
|
||||||
.m.l config -text "Please touch the lower-left taget\n\
|
|
||||||
and then the upper-right target\n\
|
|
||||||
to calibrate the touch screen"
|
|
||||||
update
|
|
||||||
|
|
||||||
exec killall -STOP gpm
|
|
||||||
set F [open $dev r+]; # $dev is /dev/touchscreen or /dev/mouse
|
|
||||||
fconfigure $F -buffering none -translation auto
|
|
||||||
|
|
||||||
.m.s configure -text "Calibration started"
|
|
||||||
update
|
|
||||||
|
|
||||||
# Read coordinates
|
|
||||||
set first [get_position $F]
|
|
||||||
|
|
||||||
.l.c itemco line -fill green
|
|
||||||
.m.s configure -text "First target ok"
|
|
||||||
update
|
|
||||||
|
|
||||||
# Read coordinates
|
|
||||||
set second [get_position $F]
|
|
||||||
|
|
||||||
.r.c itemco line -fill green
|
|
||||||
.m.s configure -text "Second target ok"
|
|
||||||
update
|
|
||||||
|
|
||||||
close $F
|
|
||||||
|
|
||||||
exec killall -CONT gpm
|
|
||||||
|
|
||||||
# Now save the coordinates
|
|
||||||
set F [open $datafile w]
|
|
||||||
puts $F "# Calibration coordinates for Gunze device"
|
|
||||||
puts $F "$first $second"
|
|
||||||
close $F
|
|
||||||
|
|
||||||
after 1000
|
|
||||||
.m.s configure -text ""
|
|
||||||
pack [button .m.b -text Ok -command exit]
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# Date: 3rd of October 2001
|
|
||||||
# Description: still missing
|
|
||||||
# Author: Nico Schottelius (nico-gpm@schottelius.org), 3rd of October 2001
|
|
||||||
# Copying: GPL 2.0
|
|
||||||
#
|
|
||||||
|
|
||||||
diff -u --recursive --new-file $@
|
|
|
@ -1,239 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# This program is execute by tclsh if we are in the console, and by wish
|
|
||||||
# otherwise (assuming we are under a graphic environment
|
|
||||||
|
|
||||||
#the following is a comment for tcl \
|
|
||||||
if [ $TERM = "linux" ] ; then exec tclsh $0 $* ; fi
|
|
||||||
|
|
||||||
#the following is another comment for tcl \
|
|
||||||
exec wish $0 $*
|
|
||||||
|
|
||||||
########### That's Tcl...
|
|
||||||
|
|
||||||
puts "Calibration program for Microtouch screens"
|
|
||||||
|
|
||||||
set who [exec whoami]
|
|
||||||
if [string compare $who root] {
|
|
||||||
puts stderr "you must be root to be able to run this program"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if ![string compare $env(TERM) linux] {
|
|
||||||
|
|
||||||
# Text-mode calibration
|
|
||||||
|
|
||||||
if {![info exists env(COLUMNS)] || ![info exists env(LINES)]} {
|
|
||||||
puts stderr "Please set COLUMNS and LINES in your environment"
|
|
||||||
puts stderr " for example, you can issue"
|
|
||||||
puts stderr " eval `resize`"
|
|
||||||
puts stderr " in your shell before running this program"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
fconfigure stdout -buffering none
|
|
||||||
exec clear > /dev/tty
|
|
||||||
|
|
||||||
proc goto {x y} {
|
|
||||||
set x [expr $x]
|
|
||||||
set y [expr $y]
|
|
||||||
puts -nonewline [format "\x1B\[%03i;%03iH" $y $x]
|
|
||||||
}
|
|
||||||
|
|
||||||
# To use "calibrate extended we must draw targets at 1/8 and 7/8 x-y
|
|
||||||
set x [expr $env(COLUMNS)/8]
|
|
||||||
set y [expr $env(LINES)/8]
|
|
||||||
set X [expr $env(COLUMNS) - $x]
|
|
||||||
set Y [expr $env(LINES) - $y]
|
|
||||||
|
|
||||||
# half x and y
|
|
||||||
set hx [expr $env(COLUMNS)/2]
|
|
||||||
set hy [expr $env(LINES)/2]
|
|
||||||
|
|
||||||
goto $hx-10 $hy-1; puts -nonewline "Please touch the lower"
|
|
||||||
goto $hx-10 $hy-0; puts -nonewline "left target, then the"
|
|
||||||
goto $hx-10 $hy+1; puts -nonewline "upper right target."
|
|
||||||
|
|
||||||
exec killall -STOP gpm
|
|
||||||
set F [open /dev/mouse r+]
|
|
||||||
fconfigure $F -buffering none
|
|
||||||
puts $F "\1CX\r"
|
|
||||||
|
|
||||||
set ack [gets $F]; # Acknowledge
|
|
||||||
goto $hx-18 $hy+3; puts -nonewline "received acknowledge: please start"
|
|
||||||
|
|
||||||
goto $x $Y-1; puts -nonewline "|"
|
|
||||||
goto $x-1 $Y; puts -nonewline "-+-"
|
|
||||||
goto $x $Y+1; puts -nonewline "|"
|
|
||||||
|
|
||||||
set ack [gets $F]; # First calibration point
|
|
||||||
goto $hx-5 $hy+4; puts -nonewline "received acknowledge: please go on"
|
|
||||||
|
|
||||||
#remove the target, draw the other
|
|
||||||
goto $x $Y-1; puts -nonewline " "
|
|
||||||
goto $x-1 $Y; puts -nonewline " "
|
|
||||||
goto $x $Y+1; puts -nonewline " "
|
|
||||||
|
|
||||||
goto $X $y-1; puts -nonewline "|"
|
|
||||||
goto $X-1 $y; puts -nonewline "-+-"
|
|
||||||
goto $X $y+1; puts -nonewline "|"
|
|
||||||
|
|
||||||
set ack [gets $F]; # Next calibration point
|
|
||||||
goto $hx-5 $hy+5; puts -nonewline "received acknowledge: looks ok"
|
|
||||||
|
|
||||||
goto $X $y-1; puts -nonewline " "
|
|
||||||
goto $X-1 $y; puts -nonewline " "
|
|
||||||
goto $X $y+1; puts -nonewline " "
|
|
||||||
close $F
|
|
||||||
|
|
||||||
exec killall -CONT gpm
|
|
||||||
goto 0 $env(LINES)-2
|
|
||||||
|
|
||||||
puts "Done"
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# X calibration. This is Tk, so we can use the canvas items.
|
|
||||||
# However, there is uncertainty about the absolute X and Y...
|
|
||||||
|
|
||||||
set wid [winfo screenwidth .]
|
|
||||||
set hei [winfo screenheight .]
|
|
||||||
wm geometry . ${wid}x${hei}+0+0
|
|
||||||
|
|
||||||
set x [expr $wid/8]
|
|
||||||
set y [expr $hei/8]
|
|
||||||
set X [expr $wid - $x]
|
|
||||||
set Y [expr $hei - $y]
|
|
||||||
set hx [expr $wid/2]
|
|
||||||
set hy [expr $hei/2]
|
|
||||||
set cwid [expr 2*$x]
|
|
||||||
set chei [expr 2*$y]
|
|
||||||
|
|
||||||
# The offset variables account for window manager borders etc
|
|
||||||
set xoff1 0
|
|
||||||
set yoff1 0
|
|
||||||
set xoff2 0
|
|
||||||
set yoff2 0
|
|
||||||
|
|
||||||
proc recanvas {} {
|
|
||||||
global x y X Y xoff1 xoff2 yoff1 yoff2
|
|
||||||
catch {.l.c delete line}
|
|
||||||
catch {.r.c delete line}
|
|
||||||
|
|
||||||
set x1 [expr $x-$xoff1]
|
|
||||||
set y1 [expr $Y-$yoff1]
|
|
||||||
set x2 [expr $X-$xoff2]
|
|
||||||
set y2 [expr $y-$yoff2]
|
|
||||||
|
|
||||||
.l.c create line [expr $x1-50] $y1 [expr $x1+50] $y1 \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
.l.c create line $x1 [expr $y1-50] $x1 [expr $y1+50] \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
|
|
||||||
.r.c create line [expr $x2-50] $y2 [expr $x2+50] $y2 \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
.r.c create line $x2 [expr $y2-50] $x2 [expr $y2+50] \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
pack [frame .l] -side left -expand true -fill both
|
|
||||||
pack [frame .m] -side left -expand true -fill both
|
|
||||||
pack [frame .r] -side left -expand true -fill both
|
|
||||||
pack [canvas .l.c -width $cwid -hei $chei -scrollregion "0 0 $cwid $chei" \
|
|
||||||
] -side bottom
|
|
||||||
pack [frame .l.f] -expand true -fill both; #filler
|
|
||||||
pack [canvas .r.c -width $cwid -hei $chei -scrollregion "0 0 $cwid $chei" \
|
|
||||||
] -side top
|
|
||||||
pack [frame .r.f] -expand true -fill both; #filler
|
|
||||||
|
|
||||||
pack [label .m.t -text "MicroTouch Calibrator" -foreground blue] -pady 40
|
|
||||||
pack [label .m.l -bd 5 -relief raised] -expand true -fill both
|
|
||||||
pack [label .m.s] -expand true -fill both
|
|
||||||
|
|
||||||
bind .l.c <Enter> {
|
|
||||||
set xoff1 [expr %X - %x]
|
|
||||||
set yoff1 [expr %Y - %y]
|
|
||||||
set x1 [expr $x-$xoff1]
|
|
||||||
set y1 [expr $Y-$yoff1]
|
|
||||||
|
|
||||||
catch {.l.c delete line}
|
|
||||||
|
|
||||||
.l.c create line [expr $x1-50] $y1 [expr $x1+50] $y1 \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
.l.c create line $x1 [expr $y1-50] $x1 [expr $y1+50] \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
|
|
||||||
set done1 1
|
|
||||||
update
|
|
||||||
}
|
|
||||||
bind .r.c <Enter> {
|
|
||||||
set xoff2 [expr %X - %x]
|
|
||||||
set yoff2 [expr %Y - %y]
|
|
||||||
set x2 [expr $X-$xoff2]
|
|
||||||
set y2 [expr $y-$yoff2]
|
|
||||||
|
|
||||||
catch {.r.c delete line}
|
|
||||||
|
|
||||||
.r.c create line [expr $x2-50] $y2 [expr $x2+50] $y2 \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
.r.c create line $x2 [expr $y2-50] $x2 [expr $y2+50] \
|
|
||||||
-width 3 -fill red -tag line
|
|
||||||
|
|
||||||
set done2 1
|
|
||||||
update
|
|
||||||
}
|
|
||||||
|
|
||||||
set done1 0; set done2 0
|
|
||||||
|
|
||||||
update
|
|
||||||
|
|
||||||
.m.l config -text "Please move the mouse towards\n\
|
|
||||||
the lower left corner, until a cross\n\
|
|
||||||
appears (there's no need to click)"
|
|
||||||
vwait done1
|
|
||||||
|
|
||||||
update
|
|
||||||
|
|
||||||
if !$done2 {
|
|
||||||
.m.l config -text "Please move the mouse towards\n\
|
|
||||||
the upper right corner, until a cross\n\
|
|
||||||
appears (there's no need to click)"
|
|
||||||
vwait done2
|
|
||||||
}
|
|
||||||
|
|
||||||
.m.l config -text "\nWait....\n"
|
|
||||||
after 1000
|
|
||||||
|
|
||||||
.m.l config -text "Please touch the lower-left taget\n\
|
|
||||||
and then the upper-right target\n\
|
|
||||||
to calibrate the touch screen"
|
|
||||||
update
|
|
||||||
|
|
||||||
exec killall -STOP gpm
|
|
||||||
set F [open /dev/mouse r+]
|
|
||||||
fconfigure $F -buffering none
|
|
||||||
puts $F "\1CX\r"
|
|
||||||
|
|
||||||
set ack [gets $F]; # Acknowledge
|
|
||||||
.m.s configure -text "Calibration started"
|
|
||||||
update
|
|
||||||
|
|
||||||
set ack [gets $F]; # First calibration point
|
|
||||||
.l.c itemco line -fill green
|
|
||||||
.m.s configure -text "First target ok"
|
|
||||||
update
|
|
||||||
|
|
||||||
set ack [gets $F]; # Next calibration point
|
|
||||||
.r.c itemco line -fill green
|
|
||||||
.m.s configure -text "Second target ok"
|
|
||||||
update
|
|
||||||
|
|
||||||
close $F
|
|
||||||
|
|
||||||
exec killall -CONT gpm
|
|
||||||
after 1000
|
|
||||||
.m.s configure -text ""
|
|
||||||
pack [button .m.b -text Ok -command exit]
|
|
||||||
|
|
||||||
exit 0
|
|
|
@ -1,40 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
# mkinstalldirs --- make directory hierarchy
|
|
||||||
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
|
|
||||||
# Created: 1993-05-16
|
|
||||||
# Public domain
|
|
||||||
|
|
||||||
# $Id: mkinstalldirs,v 1.2 2002/05/28 19:13:52 nico Exp $
|
|
||||||
|
|
||||||
errstatus=0
|
|
||||||
|
|
||||||
for file
|
|
||||||
do
|
|
||||||
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
|
|
||||||
shift
|
|
||||||
|
|
||||||
pathcomp=
|
|
||||||
for d
|
|
||||||
do
|
|
||||||
pathcomp="$pathcomp$d"
|
|
||||||
case "$pathcomp" in
|
|
||||||
-* ) pathcomp=./$pathcomp ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if test ! -d "$pathcomp"; then
|
|
||||||
echo "mkdir $pathcomp" 1>&2
|
|
||||||
|
|
||||||
mkdir "$pathcomp" || lasterr=$?
|
|
||||||
|
|
||||||
if test ! -d "$pathcomp"; then
|
|
||||||
errstatus=$lasterr
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
pathcomp="$pathcomp/"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
exit $errstatus
|
|
||||||
|
|
||||||
# mkinstalldirs ends here
|
|
|
@ -1,9 +0,0 @@
|
||||||
# 8 -> 2*4 --> 4*3 = 12
|
|
||||||
cat $1 | sed 's/^ \([^ ]\)/ \1/g' > $1.tmp
|
|
||||||
# 6=3*2 --> 3*3=9
|
|
||||||
cat $1.tmp | sed 's/^ \([^ ]\)/ \1/g' > $1.tmp2
|
|
||||||
# 4=2*2 --> 2*3=6
|
|
||||||
cat $1.tmp2 | sed 's/^ \([^ ]\)/ \1/g' > $1.tmp
|
|
||||||
# 2=1*2 --> 1*3=3
|
|
||||||
cat $1.tmp | sed 's/^ \([^ ]\)/ \1/g' > $1.tmp2
|
|
||||||
echo done: $1.tmp2
|
|
|
@ -1,10 +0,0 @@
|
||||||
# 4 tabs
|
|
||||||
cat $1 | sed 's/^ \([^ ]\)/ \1/g' > $1.tmp
|
|
||||||
# 3 tabs
|
|
||||||
cat $1.tmp | sed 's/^ \([^ ]\)/ \1/g' > $1.tmp2
|
|
||||||
# 2 tabs
|
|
||||||
cat $1.tmp2 | sed 's/^ \([^ ]\)/ \1/g' > $1.tmp
|
|
||||||
# 1 tab
|
|
||||||
cat $1.tmp | sed 's/^ \([^ ]\)/ \1/g' > $1.tmp2
|
|
||||||
rm $1.tmp
|
|
||||||
echo done: $1.tmp2
|
|
|
@ -1,35 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Date: 18th of September 2001
|
|
||||||
# Description: Test gpm with this script :)
|
|
||||||
# Author: Nico Schottelius (nico-gpm@schottelius.org), 3rd of October 2001
|
|
||||||
# Copying: GPL 2.0
|
|
||||||
# Version: 0.2
|
|
||||||
#
|
|
||||||
|
|
||||||
PREFIX=test-
|
|
||||||
POSTFIX=
|
|
||||||
|
|
||||||
if [ $# -ne 1 ]; then
|
|
||||||
echo `basename $0`': dir'
|
|
||||||
echo 'Hey, hey guy, what to test ?'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d $1 ]; then
|
|
||||||
echo `basename $0`': dir'
|
|
||||||
echo 'HEY! I need a DIRECTORY! Not something else!'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo rm -rf $PREFIX`basename $1`$POSTFIX -r
|
|
||||||
rm -rf $PREFIX`basename $1`$POSTFIX -r
|
|
||||||
echo cp $1 $PREFIX`basename $1`$POSTFIX -r
|
|
||||||
cp $1 $PREFIX`basename $1`$POSTFIX -r
|
|
||||||
|
|
||||||
echo rm -rf mkdir objdir
|
|
||||||
rm -rf objdir/ && mkdir -p objdir && cd objdir
|
|
||||||
echo configure
|
|
||||||
../$PREFIX`basename $1`$POSTFIX/configure --prefix=/usr/sys
|
|
||||||
echo make
|
|
||||||
make
|
|
|
@ -1,63 +0,0 @@
|
||||||
This is to announce gpm-1.0, available by ftp from
|
|
||||||
|
|
||||||
iride.unipv.it:/pub/gpm/gpm-1.0.tar.gz (my site) and
|
|
||||||
sunsite.unc.edu:/pub/Linux/Incoming/gpm-1.0.tar.gz its final destination
|
|
||||||
on sunsite and mirrors will be /pub/Linux/system/Daemons
|
|
||||||
|
|
||||||
|
|
||||||
What's gpm?
|
|
||||||
|
|
||||||
Gpm ("general purpose mouse") is a user-level daemon in charge of mouse
|
|
||||||
management. It can deliver mouse events to clients on a per-console basis.
|
|
||||||
Its client library eases writing mouse-sensitive application which will run
|
|
||||||
under both the Linux console and xterm.
|
|
||||||
|
|
||||||
Gpm is part of slackware since November 1994 (gpm-0.90).
|
|
||||||
|
|
||||||
From 0.98.x onward it supported two mice running concurrently (like you
|
|
||||||
do with "MultiMouse") and it can repeat events to an external fifo
|
|
||||||
(like you do with "mconv").
|
|
||||||
|
|
||||||
|
|
||||||
What's new?
|
|
||||||
|
|
||||||
What made me switch to 1.0 is the availability of the high-level library,
|
|
||||||
a useful tool for mouse programmers, together with a sample application
|
|
||||||
using that library ("hltest").
|
|
||||||
|
|
||||||
"mouse-test" is available as well -- it is a tiny utility meant to
|
|
||||||
help you in detecting what protocol does your mouse speak. Not too
|
|
||||||
smart (it has to run attended), but useful when you change mouse.
|
|
||||||
It works well with serial mice, and is otherwise untested.
|
|
||||||
|
|
||||||
gpm-root is now capable to draw recursive menus. Console locking is still
|
|
||||||
missing, lazy me.
|
|
||||||
|
|
||||||
The daemon is able to manage two mice running concurrently,
|
|
||||||
this should be useful for those owning a laptop.
|
|
||||||
|
|
||||||
t-mouse.el is enhanced, in mode-line and vertical-line management (not by
|
|
||||||
me, actually).
|
|
||||||
|
|
||||||
The alpha architecture is supported.
|
|
||||||
|
|
||||||
|
|
||||||
What about the future, after 1.0?
|
|
||||||
|
|
||||||
Most likely I'll release bug-fix updates in the near future (I only
|
|
||||||
own one mouse :-).
|
|
||||||
|
|
||||||
After that I'll consider making gpm a kernel module, implementing a
|
|
||||||
mouse-type independent mouse driver. The device driver will be
|
|
||||||
completely compatible with applications linked with libgpm version 1.0
|
|
||||||
or later. In this sense 1.0 is incompatible with previous versions:
|
|
||||||
applications linked with older libraries won't run with the kernel module.
|
|
||||||
|
|
||||||
|
|
||||||
I never use text consoles.
|
|
||||||
|
|
||||||
Then, gpm is not important for you (unless you write mouse-sensitive
|
|
||||||
curses-based application).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,197 +0,0 @@
|
||||||
|
|
||||||
This file tries to summarize the questions that I've been responding over
|
|
||||||
and over. It is meant to save some time to both you and me :)
|
|
||||||
|
|
||||||
If your problem with gpm isn't described here, feel free to ask me by
|
|
||||||
Email.
|
|
||||||
|
|
||||||
--
|
|
||||||
__ o La forza dei forti sta nel traversare le traversie con occhio sereno
|
|
||||||
_`\<, (Paperino)
|
|
||||||
__( )/( )__ rubini@prosa.it +39-382-529554
|
|
||||||
|
|
||||||
|
|
||||||
1. Installation / Compiling
|
|
||||||
2. Running problems
|
|
||||||
3. other questions
|
|
||||||
|
|
||||||
===========================================================================
|
|
||||||
|
|
||||||
1. Installation / Compiling
|
|
||||||
|
|
||||||
===========================================================================
|
|
||||||
Q: Compilation fails with
|
|
||||||
|
|
||||||
yacc gpm-root.y
|
|
||||||
make: /usr/bin/make: cannot execute binary file
|
|
||||||
make: *** [gpm-root.c] Error 126
|
|
||||||
|
|
||||||
A: This is a typical error (I've got several of them reported), though
|
|
||||||
not related to gpm.
|
|
||||||
|
|
||||||
It looks like you have an old slackware installation, like mine, or
|
|
||||||
another faulty setup. I've been reported that slackware-3 is wrong
|
|
||||||
as well.
|
|
||||||
|
|
||||||
The 'yacc' executable is a shell script that calls bison, and it
|
|
||||||
lacks the '#!/bin/sh' line (or has it incorrect, missing the
|
|
||||||
'!'). I don't remember the details, but while it runs under your
|
|
||||||
shell, it can't be executed under make. I looked in the binfmt
|
|
||||||
sources in the kernel, and /bin/sh doesn't appear explicitly, so
|
|
||||||
you must fix the first line in the 'yacc' script, and everything
|
|
||||||
should go fine.
|
|
||||||
|
|
||||||
Note however that the server has already been compiles. Only the
|
|
||||||
gpm-root client, written with yacc, is affected by this problem.
|
|
||||||
|
|
||||||
===========================================================================
|
|
||||||
|
|
||||||
2. Running problems
|
|
||||||
|
|
||||||
===========================================================================
|
|
||||||
|
|
||||||
Q: My serial mouse works in X with ms protocol, but behaves erratically
|
|
||||||
with gpm on the text console, and I get involuntary pastes.
|
|
||||||
|
|
||||||
A: Many ms protocol mice equipped with three buttons use an extension
|
|
||||||
to the protocol, which consists in repeating events (thus with no
|
|
||||||
effect under the normal protocol) to signal a change in the middle
|
|
||||||
button. Unfortunately, some old true-ms protocol mice do repeat
|
|
||||||
events, thus triggering the middle-button in gpm.
|
|
||||||
|
|
||||||
If you're running your mouse with ``-t ms'', you'd better try ``-t
|
|
||||||
bare'', which is the unadorned ms protocol of the old days. My
|
|
||||||
choice to use the third-button extension as the default, was taken
|
|
||||||
because a true ms protocol doesn't repeat event notification, and
|
|
||||||
because many three button mice feature the extension.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
Q: I have a serial mouse. It works fine except that when I try to drag
|
|
||||||
the mouse with the middle button pressed, gpm assumes that the middle
|
|
||||||
button has been released. Dragging with the other buttons works just
|
|
||||||
fine.
|
|
||||||
|
|
||||||
A: You are probably running your mouse with ``-t ms''. In this mode
|
|
||||||
dragging with the middle button has been deliberately disabled in
|
|
||||||
order to prevent problems with faulty mice that fail to report
|
|
||||||
middle-button events during mouse motion.
|
|
||||||
|
|
||||||
Try using ``-t ms+'' or ``-t ms+lr'' instead.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
Q: My mouse gets into a state where it thinks the middle button is up
|
|
||||||
when it's down and vice versa.
|
|
||||||
|
|
||||||
A: Your mouse uses an extension to the m$ protocol in order to report
|
|
||||||
the middle button. It sends empty events (i.e., no-motion &
|
|
||||||
no-button-change) in order to report a change in the status of the
|
|
||||||
middle button.
|
|
||||||
|
|
||||||
Unfortunately many devices that report middle-button events in this
|
|
||||||
way often fail miserably to report them correctly during mouse
|
|
||||||
motion. Since the protocol does not distinguish between the button
|
|
||||||
going up and the button going down it can easily get out of step
|
|
||||||
with reality.
|
|
||||||
|
|
||||||
There are two solutions: either use ``-t ms'', which disallows
|
|
||||||
dragging with the middle button, so you can get back to normal
|
|
||||||
simply by moving the mouse without any buttons pressed; or (probably
|
|
||||||
better) use ``-t ms+lr'', which allows you to reset the state of
|
|
||||||
the middle button by pressing the other two buttons together. (If
|
|
||||||
you want you can also deliberately get gpm out of step with reality
|
|
||||||
by pressing the left and right buttons while holding the middle
|
|
||||||
button!)
|
|
||||||
|
|
||||||
Note that there are many more faulty mice in the world than
|
|
||||||
non-faulty ones so you will probably will have to use ``-t ms+lr''
|
|
||||||
rather than ``-t ms+''.
|
|
||||||
|
|
||||||
Note also that most 3-button mice that use the microsoft protocol can
|
|
||||||
be made to use the MouseSystems protocol instead. You might want to
|
|
||||||
read about this in the ``3 Button Serial Mouse mini-HOWTO''.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
Q: My mouse doesn't sense the middle button in X, while it works with
|
|
||||||
gpm.
|
|
||||||
|
|
||||||
A: Gpm uses a different decoder (see the previous two answers). You
|
|
||||||
can use the ``-R'' option to repeat mouse data to X (look at the man
|
|
||||||
page).
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
Q: I have a busmouse, and I have the single-open problem. Is there any
|
|
||||||
way around it?
|
|
||||||
|
|
||||||
A: Try the -R option of gpm (look at the man page)
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
Q: I run "-t ms", and I get double-paste when I press the middle button.
|
|
||||||
Is there any workaround?
|
|
||||||
|
|
||||||
A: Try "-t mman" instead.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
Q: I have one of the new devices of old dear Bill, and gpm doesn't work any
|
|
||||||
more. What can I do?
|
|
||||||
|
|
||||||
A: Bill chose to use its own Plug-and-Pray specification, which finally
|
|
||||||
managed to break what worked painlessly for ages. The decoder for
|
|
||||||
any gpm up to 1.12 (and also any X version being used at the time)
|
|
||||||
is unable to deal with the new devices, which claim to be designed
|
|
||||||
to work with older drivers. Try to use "-t pnp" instead of "-t ms"
|
|
||||||
and see if it works with this gpm version. Actually, this version
|
|
||||||
might even work with "-t ms" or "-t bare", but I'm not sure about
|
|
||||||
it. If the version of X you run has problems, while gpm now works,
|
|
||||||
try passing the "-R" option to gpm (see the man page). Note that
|
|
||||||
"-t pnp" is strongly discouraged, as any time the serial port is
|
|
||||||
opened (for example when switching from X to text mode if "-R" is
|
|
||||||
not active) it will take several seconds to be initialized -- a
|
|
||||||
design misfeature of pnp. If either "-t ms" or "-t bare" work use
|
|
||||||
them instead.
|
|
||||||
|
|
||||||
If you are in the software field, you can enjoy the inaccuracies of
|
|
||||||
the specs and design bugs directly from the originators:
|
|
||||||
http://www.microsoft.com/hwdev/download/pnpcom.exe. You'll find the
|
|
||||||
following, and more:
|
|
||||||
- no support for real multitasking (the mouse driver must be able
|
|
||||||
to keep hold of processor time for at least 1 second).
|
|
||||||
- no pnp vendor will be able to support three buttons any more (no
|
|
||||||
more mouse protocols, all mice must behave the same).
|
|
||||||
- similary, only 1200 baud devices (any serial device) are supported,
|
|
||||||
because the initialization string of pnp devices only tells
|
|
||||||
the vendor and release, with no information about required
|
|
||||||
port configuration.
|
|
||||||
- people with UPS will have great troubles with ms software
|
|
||||||
because the pnp probing sequence plays with DTR, and w95
|
|
||||||
probes all serial ports. This funny idea might turn off
|
|
||||||
the UPS connected with your computer just after booting w95.
|
|
||||||
|
|
||||||
Don't despair. They will manage to make worse designs later on.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
Q: I have an old 386 computer around here and gpm is _really_ slow. Is there
|
|
||||||
any way I can make it faster ?
|
|
||||||
|
|
||||||
A: Go into src/headers/gpmCfg.h and look for DEF_CLUSTER. Change its values from
|
|
||||||
0 to 10.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
Q: gpm.conf is not accepted / does not work, but gpm works from command line.
|
|
||||||
|
|
||||||
A: gpm.conf is not from gpm itself. Please contact your distrubtion support
|
|
||||||
to clearify whats wrong.
|
|
||||||
|
|
||||||
===========================================================================
|
|
||||||
|
|
||||||
3. other questions
|
|
||||||
|
|
||||||
===========================================================================
|
|
||||||
|
|
||||||
Q: I am gonna buy computer X, do I have any chance getting gpm running on it?
|
|
||||||
A:
|
|
||||||
a) If it does not work, you could at least try to port it ;)
|
|
||||||
|
|
||||||
b) As report by a friend, gpm currently runs on Linux on
|
|
||||||
- i386 - Alpha - ARM - PA-RISC - ia64 (Itanium) - PPC - m68k - MIPS - SPARC
|
|
||||||
|
|
||||||
It's possible that you need some patches for some architecture.
|
|
|
@ -1,22 +0,0 @@
|
||||||
Dear GPM-Hacker,
|
|
||||||
|
|
||||||
thank you for reading this document.
|
|
||||||
|
|
||||||
I assume you have a good idea or you did some good work you want to see in the
|
|
||||||
main gpm tree. To make life easy for you and me, please follow the instructions:
|
|
||||||
|
|
||||||
* if you send a patch, explain why it's needed
|
|
||||||
* if possible, please patch against latest monotone sources (see README)
|
|
||||||
* if the patch introduces generally new things, explain how it works
|
|
||||||
* use 3 spaces tabs in the source files (if you use tabs, look into
|
|
||||||
contrib/scripts/replace_tab_with_3_spaces)
|
|
||||||
* if the patch is not big, use one file
|
|
||||||
* if you have to use more files, tar them
|
|
||||||
* include directory structure (src/mice.c and not mice.c)
|
|
||||||
|
|
||||||
* Still there?
|
|
||||||
* Then send the patch (either itself or the link to it) to the mailing list.
|
|
||||||
|
|
||||||
Thanks for your help,
|
|
||||||
|
|
||||||
Nico
|
|
|
@ -1,178 +0,0 @@
|
||||||
# -*-makefile-*- (gpm/doc)
|
|
||||||
#
|
|
||||||
# Copyright (C) 1994 Alessandro Rubini <rubini@linux.it>
|
|
||||||
# Copyright (C) 1998 Ian Zimmerman <itz@rahul.net>
|
|
||||||
# Copyright (C) 2001 Nico Schottelius <nico-gpm@schottelius.org>
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Do you ever got headache from reading Makefiles ? I will help you and
|
|
||||||
# me to understand this Makefile:
|
|
||||||
#
|
|
||||||
# The main file is doc.gpm (which is generated by configure from doc.gpm.in).
|
|
||||||
#
|
|
||||||
# doc.gpm is not 'real' texinfo, real texinfo is generated by infofilter
|
|
||||||
# to gpm.texinfo.
|
|
||||||
#
|
|
||||||
# gpm.texinfo is the source of all other formats.
|
|
||||||
#
|
|
||||||
# info is generated by makeinfo (I make that for you).
|
|
||||||
#
|
|
||||||
# man pages are generated with the help of manpager.
|
|
||||||
#
|
|
||||||
# dvi is generated from texinfo with a small block in this Makefile.
|
|
||||||
#
|
|
||||||
# ps is generated from dvi source.
|
|
||||||
#
|
|
||||||
|
|
||||||
SHELL = /bin/sh
|
|
||||||
srcdir = @srcdir@
|
|
||||||
top_builddir = ..
|
|
||||||
|
|
||||||
include $(top_builddir)/Makefile.include
|
|
||||||
|
|
||||||
MANPAGES = gpm.8 mev.1 gpm-root.1 gpm-types.7 mouse-test.1
|
|
||||||
|
|
||||||
all: $(srcdir)/gpm.info gpm.man
|
|
||||||
|
|
||||||
# HTML (texi2html)
|
|
||||||
%.html: %.texinfo
|
|
||||||
if [ $(TEXI2HTML) != "no" ]; then $(TEXI2HTML) $< ;fi
|
|
||||||
|
|
||||||
# TEXINFO (-)
|
|
||||||
%.texinfo: doc.% Makefile
|
|
||||||
@rm -f $@ # correct here ?
|
|
||||||
$(SED) -f $(srcdir)/infofilter $< > $@
|
|
||||||
chmod 400 $@
|
|
||||||
|
|
||||||
# PS (dvips)
|
|
||||||
%.ps: %.dvi
|
|
||||||
if [ $(DVIPS) != "no" ]; then $(DVIPS) -f $< > $@; fi
|
|
||||||
|
|
||||||
# INFO (makeinfo)
|
|
||||||
%.info: %.texinfo
|
|
||||||
if [ "@MAKEINFO@" != "no" ]; then $(MAKEINFO) $< -o $@; fi
|
|
||||||
|
|
||||||
# TXT (-)
|
|
||||||
%.txt: %.info
|
|
||||||
$(AWK) -f $(srcdir)/mktxt $< > $@
|
|
||||||
|
|
||||||
# MAN (-)
|
|
||||||
gpm.man: doc.gpm $(srcdir)/manpager
|
|
||||||
$(AWK) -f $(srcdir)/manpager doc.gpm
|
|
||||||
for i in gpm-root.1 gpm-types.7 gpm.8 mev.1 mouse-test.1; do \
|
|
||||||
expand $$i | sed s/^'[ ]*'//g > $$i.new; \
|
|
||||||
mv $$i.new $$i; \
|
|
||||||
done;
|
|
||||||
touch gpm.man
|
|
||||||
|
|
||||||
|
|
||||||
# DVI
|
|
||||||
# This rule is somewhat a rewrite of texi2dvi. I like make more than sh :-)
|
|
||||||
%.dvi: %.texinfo
|
|
||||||
|
|
||||||
# create a spurious index file to please silly sh (bash will work anyway)
|
|
||||||
# is this still needed for someone ?
|
|
||||||
touch $*.oo
|
|
||||||
|
|
||||||
# get the index list, but only if tex is installed
|
|
||||||
# check the file list, the file and if needed run TeX again
|
|
||||||
#
|
|
||||||
# can somebody tell me in a very short way what format dvi is and why we
|
|
||||||
# cannot generate ps directly ?
|
|
||||||
|
|
||||||
if [ -n "`ls $*.?? $*.aux 2>/dev/null`" -a "$(TEX)" != "no" -a \
|
|
||||||
"$(TEXINDEX)" != "no" ]; then \
|
|
||||||
for i in `ls $*.?? $*.aux 2>/dev/null`; do cp $$i $$i~; done; \
|
|
||||||
$(TEX) $< \
|
|
||||||
old="`ls $*.??~ $*.aux~ 2>/dev/null | $(SED) 's/~//g'`"; \
|
|
||||||
new="`ls $*.?? $*.aux 2>/dev/null`"; \
|
|
||||||
need="n"; \
|
|
||||||
if test "$$old" != "$$new"; then need="y"; \
|
|
||||||
else \
|
|
||||||
for i in `ls $*.?? $*.aux 2>/dev/null`; do \
|
|
||||||
cmp -s $$i $$i~; if test $$? -ne 0; then need="y" break; fi; \
|
|
||||||
done; \
|
|
||||||
fi; \
|
|
||||||
if test "$$need" = "y"; then \
|
|
||||||
$(TEXINDEX) $*.?? && $(TEX) $<; \
|
|
||||||
fi; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Main portion
|
|
||||||
|
|
||||||
# why gpmdoc.ps and gpm.ps??
|
|
||||||
# there is no gpm.ps in my tree and no rule to generate gpm.ps.
|
|
||||||
gpmdoc.ps: gpm.ps
|
|
||||||
-$(CP) $< $@
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f gpmdoc.ps gpmdoc.txt $(MANPAGES) *~
|
|
||||||
rm -f gpm.?? gpm.???
|
|
||||||
rm -f gpm.texinfo
|
|
||||||
|
|
||||||
# install & uninstall
|
|
||||||
|
|
||||||
installdirs:
|
|
||||||
$(MKDIR) $(man1dir) $(man7dir) $(man8dir) $(infodir)
|
|
||||||
|
|
||||||
install: all installdirs
|
|
||||||
$(INSTALL_DATA) -m 644 mev.1 $(man1dir)
|
|
||||||
$(INSTALL_DATA) -m 644 mouse-test.1 $(man1dir)
|
|
||||||
$(INSTALL_DATA) -m 644 gpm-root.1 $(man1dir)
|
|
||||||
$(INSTALL_DATA) -m 644 gpm-types.7 $(man7dir)
|
|
||||||
$(INSTALL_DATA) -m 644 gpm.8 $(man8dir)
|
|
||||||
$(INSTALL_DATA) -m 644 $(srcdir)/gpm.info $(infodir)
|
|
||||||
# Use install-info if available
|
|
||||||
-if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
|
|
||||||
if [ -f $(infodir)/dir ] ; then \
|
|
||||||
install-info --dir-file=$(infodir)/dir $(infodir)/gpm.info; \
|
|
||||||
fi; \
|
|
||||||
fi
|
|
||||||
#itz Sat Dec 26 23:21:05 PST 1998
|
|
||||||
#i keep all my infopages compressed and i'm tired to do it by
|
|
||||||
#hand, so check if there are any compressed pages and do this
|
|
||||||
#one too
|
|
||||||
-ls $(infodir)/*[-.]info.gz >/dev/null 2>&1 \
|
|
||||||
&& gzip -f $(infodir)/gpm.info
|
|
||||||
# Hmm.... shouldn't man pages be compressed too?
|
|
||||||
# maybe they should, but at least at my system they are not.
|
|
||||||
|
|
||||||
# This potentially leaves around cached manpages,
|
|
||||||
# e.g. /var/cache/man/cat1/mev.1.gz. Deleting these is not our job,
|
|
||||||
# but the job of the man program on the host.
|
|
||||||
uninstall:
|
|
||||||
cd $(man1dir) && rm -f mev.1 mouse-test.1 gpm-root.1
|
|
||||||
rm -f $(man7dir)/gpm-types.7 $(man8dir)/gpm.8
|
|
||||||
rm -f $(infodir)/gpm.info $(infodir)/gpm.info.gz
|
|
||||||
-if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
|
|
||||||
if [ -f $(infodir)/dir ] ; then \
|
|
||||||
install-info --dir-file=$(infodir)/dir \
|
|
||||||
--remove $(infodir)/gpm.info; \
|
|
||||||
fi; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# configure & unconfigure
|
|
||||||
|
|
||||||
Makefile: $(top_builddir)/config.status $(srcdir)/Makefile.in
|
|
||||||
cd $(top_builddir) && $(SHELL) config.status
|
|
||||||
|
|
||||||
distclean: clean
|
|
||||||
rm -f Makefile doc.gpm
|
|
||||||
|
|
||||||
# Maintainer portion, use at your own risk
|
|
||||||
|
|
||||||
# ignore this:
|
|
||||||
TAGS:
|
|
||||||
|
|
||||||
# when we cleaned it, we can securely copy us.
|
|
||||||
dist: distclean
|
|
||||||
$(CP) -r $(srcdir) $(top_builddir)/gpm-$(release)/
|
|
||||||
|
|
||||||
.INTERMEDIATE: gpm.ps
|
|
||||||
.SECONDARY: %.ps %.texinfo %.dvi
|
|
||||||
|
|
||||||
gs: gpm.ps
|
|
||||||
gs -sDEVICE=linux -r640x480x2 $<
|
|
||||||
|
|
||||||
gv: gpm.ps
|
|
||||||
ghostview gpm.ps -magstep -1 -a4
|
|
|
@ -1,54 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
Dear reader,
|
|
||||||
|
|
||||||
|
|
||||||
you are reading this document, because you saw that there is a new
|
|
||||||
release of gpm available, gpm 1.20.2.
|
|
||||||
|
|
||||||
Unfortunately this release is broken, but that's not a big problem.
|
|
||||||
|
|
||||||
gpm is broken for some time and I did not spent any time to the project
|
|
||||||
for about two years.
|
|
||||||
|
|
||||||
Some weeks ago, I was contacted by someone asking me to write a very
|
|
||||||
small feature for gpm (a small client program, included in this
|
|
||||||
release). I answered the person that I do not have the time to code
|
|
||||||
that part, but if he really insists that I should write that code,
|
|
||||||
he should think about sponsoring me [0].
|
|
||||||
|
|
||||||
Some days later I recieved an email that he wanted to sponsor me.
|
|
||||||
I was a little bit surprised, because it was the first person really
|
|
||||||
considering my sponsoring plans.
|
|
||||||
|
|
||||||
So I coded that small program and had some views in the old code of
|
|
||||||
gpm. There's so much information in it, so many hacks, so many dirty
|
|
||||||
tricks and there are still many people using it.
|
|
||||||
|
|
||||||
So I considered to try to spent more time to gpm, perhaps even creating
|
|
||||||
a more clean (and better maintainable) version of it.
|
|
||||||
|
|
||||||
But I _am_ actually a pretty busy person, working almost all time, if not
|
|
||||||
doing sports (just about 6 hours a week) or sleeping.
|
|
||||||
|
|
||||||
So I thought, perhaps you can help me to get more time for coding FOSS [1]
|
|
||||||
in general or gpm in specific:
|
|
||||||
|
|
||||||
My idea is, that if you consider sponsoring my work, I can begin to work less
|
|
||||||
"traditionally" and also finance my second study in computer science, which
|
|
||||||
I will begin in autumn 2008, if I have the money to do it (living in
|
|
||||||
Switzerland is not that cheap).
|
|
||||||
|
|
||||||
I am looking forward to get any feedback from you about this idea
|
|
||||||
at nico-gpm-sponsoring (at) schottelius.org.
|
|
||||||
|
|
||||||
Thanks for reading,
|
|
||||||
|
|
||||||
|
|
||||||
Nico Schottelius, 12. May 2007
|
|
||||||
|
|
||||||
|
|
||||||
P.S.: GPM is alive!
|
|
||||||
|
|
||||||
[0]: Sponsoring information: http://nico.schottelius.org/about/support
|
|
||||||
[1]: FOSS: http://nico.schottelius.org/documentations/foss/the-term-foss/
|
|
|
@ -1,52 +0,0 @@
|
||||||
|
|
||||||
This file tells how to use gpm and X with a Elotouch screen with
|
|
||||||
serial interface at 9600 Baud No parity.
|
|
||||||
|
|
||||||
CALIBRATION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Calibration is done in console mode using the program "elocalib"
|
|
||||||
available from http://www.dobit.com/emblin/pub/elocalib.tgz
|
|
||||||
See also elocalib --help
|
|
||||||
To start calibration at console 128x48, for screen 1024x786
|
|
||||||
> elocalib /dev/ttyS0 -c128 -r48 -w1024 -h768
|
|
||||||
|
|
||||||
Touch the upper-left corner and write down the coordinates Xmin, Ymin
|
|
||||||
Touch the bottom-right corner and write down the coordinates Xmax, Ymax
|
|
||||||
Update the file gpm-calibration with this coordinates
|
|
||||||
|
|
||||||
> cat /usr/local/etc/gpm-calibration
|
|
||||||
# EloTouch calibration coordinates Xmin Ymin Xmax Ymax
|
|
||||||
4010 80 80 4010
|
|
||||||
|
|
||||||
|
|
||||||
GPM OPERATION
|
|
||||||
-------------
|
|
||||||
|
|
||||||
> gpm -m /dev/ttyS0 -t etouch -o clickontouch -Rsumma
|
|
||||||
|
|
||||||
|
|
||||||
X OPERATION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
In order to use the touchscreen in X, you should install in your
|
|
||||||
system the "gpmsumma" module
|
|
||||||
available from http://www.annet.pl/~anowak/mtouch/gpmsumma_drv.o
|
|
||||||
or from http://www.dobit.com/emblin/pub/gpm_etouch.tgz
|
|
||||||
|
|
||||||
/usr/lib/X11/modules/input/gpmsumma_drv.o
|
|
||||||
|
|
||||||
|
|
||||||
Then add the following sections to your XF86config:
|
|
||||||
|
|
||||||
Section "InputDevice"
|
|
||||||
Identifier "EloTouch"
|
|
||||||
Driver "gpmsumma"
|
|
||||||
Option "Device" "/dev/gpmdata"
|
|
||||||
Option "SendCoreEvents" "On"
|
|
||||||
EndSection
|
|
||||||
|
|
||||||
Section "ServerLayout"
|
|
||||||
InputDevice "EloTouch" "SendCoreEvents"
|
|
||||||
...
|
|
||||||
EndSection
|
|
|
@ -1,196 +0,0 @@
|
||||||
This file tells how to use gpm and X with a Gunze touchscreen.
|
|
||||||
|
|
||||||
It is pretty similar to README.microtouch, and I plan to unify them as
|
|
||||||
soon as I port the two implementation to offer a consistent look and
|
|
||||||
feel. Currently the Gunze implementation is more configurable but has
|
|
||||||
a worse calibration management (it must write to
|
|
||||||
/etc/gpm-calibration).
|
|
||||||
|
|
||||||
DEVICE CONFIGURATION
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
The gpm decoder requires the Gunze device to be in Gunze Mode (not in
|
|
||||||
Elo Emulation Mode). The supported serial speeds are 9600 and 19200
|
|
||||||
baud, the latter being the default speed (in other words, to decode
|
|
||||||
data at 9600 you must use the "-b 9600" option of gpm; no "-b" option
|
|
||||||
selects 19200 baud). Currently, the only device supported is the
|
|
||||||
10-bit one.
|
|
||||||
|
|
||||||
USER INTERFACE
|
|
||||||
--------------
|
|
||||||
|
|
||||||
The decoder currently implemented in gpm is quite simple: it only
|
|
||||||
supports mouse motion and button-1 events. This will soon change: I
|
|
||||||
plan to implement corner-taps for button-2 and button-3, as well as a
|
|
||||||
different "mode" where motion is not supported and any touch event is
|
|
||||||
converted to a button-1 click.
|
|
||||||
|
|
||||||
In the default (and only) mode, when a user touches the screen, the
|
|
||||||
decoder generates mouse motion events. Tapping on the screen generates
|
|
||||||
button-press (as well as drag and release) events.
|
|
||||||
|
|
||||||
A "tap" is a finger-down (or pen-down) event generated quickly after a
|
|
||||||
finger-up. A touch event is considered a "tap" if the lapse since the
|
|
||||||
last finger-up is less than or equal to the double-click interval (the
|
|
||||||
default is 250ms, and the value is chosen by specifying the "-i"
|
|
||||||
option of gpm). This means that you'll usually move the pointer to the
|
|
||||||
desired position and then tap on it.
|
|
||||||
|
|
||||||
Double-and triple clicks are easily generated by repeated tapping.
|
|
||||||
|
|
||||||
Since tapping is usually accompanied by a small movement, the decoder
|
|
||||||
will use the coordinates of the finger-up event for the button-press.
|
|
||||||
Further dragging will be relative to the tapping position (i.e., the
|
|
||||||
finger-up position). Moreover, the last coordinate pair received on
|
|
||||||
finger-up is discarded, because it usually is slightly offset (due to
|
|
||||||
the non-negligible area of the fingertip).
|
|
||||||
|
|
||||||
My own experience with the Gunze device, revealed that sometimes the
|
|
||||||
finger bounces, generating very fast finger-up/finger-down pairs. The
|
|
||||||
gpm decoder, therefore, ignores any quick succession of finger-up and
|
|
||||||
finger-down events. The default is to ignore any release-press pair if
|
|
||||||
the time lapse is less than 100ms (note, however, that this time lapse
|
|
||||||
is configurable).
|
|
||||||
|
|
||||||
|
|
||||||
GPM OPERATION
|
|
||||||
-------------
|
|
||||||
|
|
||||||
In order to run the touchscreen with gpm, you need to update the
|
|
||||||
/dev/mouse symbolic link to point to the right serial port; then
|
|
||||||
invoke gpm with a command line like
|
|
||||||
|
|
||||||
gpm -t gunze
|
|
||||||
|
|
||||||
If /dev/mouse is not updated to point to the touchscreen serial port,
|
|
||||||
use
|
|
||||||
gpm -t gunze -m /dev/ttyS0
|
|
||||||
or an equivalent command.
|
|
||||||
|
|
||||||
Unfortunately, there is currently no way to paste text, but I'll
|
|
||||||
implement corner-tapping to achieve that.
|
|
||||||
|
|
||||||
|
|
||||||
Gunze-specific Configuration
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
It is possible to specify device-specific options to gpm in order to
|
|
||||||
customize the behaviour of the Gunze decoder. The options are passed
|
|
||||||
as argument to the "-o" command line (reminiscent of the mount
|
|
||||||
command).
|
|
||||||
|
|
||||||
The following options are recognized:
|
|
||||||
|
|
||||||
smooth=
|
|
||||||
The decoder smooths mouse movements, to prevent the jumpy
|
|
||||||
behaviour that usually results from finger movement. The
|
|
||||||
default smoothin factor is 9, you can specify a different
|
|
||||||
value if you wish: "gpm -t gunze -o smooth=3" gives faster
|
|
||||||
(and more jumpy) motion, while "gpm -t gunze -o smooth=30"
|
|
||||||
gives a very slow feeling.x
|
|
||||||
|
|
||||||
debounce=
|
|
||||||
The option is used to specify the minimum time lapse, in
|
|
||||||
milliseconds between finger-up and finger-down events. Smaller
|
|
||||||
time intervals are discarded to achieve debouncing. Note that
|
|
||||||
the maximum time lapse is the one used for double-click
|
|
||||||
detection, and is specified with the "-i" command-line option,
|
|
||||||
common to every other mouse type.
|
|
||||||
|
|
||||||
|
|
||||||
Please note that more than one option can be specified, by using the
|
|
||||||
comma ``,'' as a separator. For example:
|
|
||||||
|
|
||||||
gpm -t gunze -o smooth=5,debounce=150
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Calibration
|
|
||||||
-----------
|
|
||||||
|
|
||||||
To calibrate the touchscreen, use the program "gunze-setup" found in
|
|
||||||
the source tree of gpm. The gpm daemon must already be running in
|
|
||||||
order for the program to work flawlessly, as the program stops and
|
|
||||||
restarts gpm internally (it depends on gpm for correct serial port
|
|
||||||
initialization).
|
|
||||||
|
|
||||||
The calibration program uses either /dev/touchscreen (if available) or
|
|
||||||
/dev/mouse (otherwise) as the serial port to communicate with the
|
|
||||||
touchscreen. You'll need therefore to create a symlink for one of
|
|
||||||
those names before running "gunze-setup".
|
|
||||||
|
|
||||||
After calibration, the calibration values can be found in the file
|
|
||||||
/etc/gpm-calibration, but gpm must be restarted in order to be able to
|
|
||||||
read them. This can be construed as a bug, and avoiding to stop the
|
|
||||||
program is in my TODO list.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
X OPERATION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
In order to use the touchscreen in X, you should install in your
|
|
||||||
system the "Summa" module, as modified by Frank Holtz (the driver is
|
|
||||||
available from http://www.hof-berlin.de/tablet/tablet.html, as well as
|
|
||||||
in the gpm CVS tree and from gpm-1.18.2 in the gpm release as well).
|
|
||||||
|
|
||||||
The compiled module (xf86Summa.so) should go in the module directory
|
|
||||||
of your X server, usually /usr/X11/lib/modules, when it sits in the
|
|
||||||
right place, a proper XF86Config will arrange for its loading.
|
|
||||||
|
|
||||||
Gpm must run in repeater mode, with a command line like:
|
|
||||||
gpm -t gunze -Rsumma
|
|
||||||
, which instructs gpm to repeat packets according to the Summa protocol.
|
|
||||||
|
|
||||||
Then, you need to add the following sections to your XF86config:
|
|
||||||
|
|
||||||
Section "module"
|
|
||||||
Load "xf86Summa.so"
|
|
||||||
EndSection
|
|
||||||
|
|
||||||
Section "Xinput"
|
|
||||||
Subsection "SummaSketch"
|
|
||||||
Port "/dev/gpmdata"
|
|
||||||
DeviceName "touchscreen"
|
|
||||||
Mode Absolute
|
|
||||||
AlwaysCore
|
|
||||||
EndSubSection
|
|
||||||
EndSection
|
|
||||||
|
|
||||||
|
|
||||||
Moreover, you should disable the "Pointer" section. I used a trick
|
|
||||||
like this one:
|
|
||||||
|
|
||||||
Section "Pointer"
|
|
||||||
Protocol "MouseSystems"
|
|
||||||
Device "/dev/fifo"
|
|
||||||
EndSection
|
|
||||||
|
|
||||||
Where /dev/fifo is just a plain unused fifo ("mknod /dev/fifo p")
|
|
||||||
|
|
||||||
If, when calling ``startx'', it won't work with a message of ``Invalid
|
|
||||||
Subsection Name'', please check the previous error lines, as they
|
|
||||||
explain what is wrong. They usually look like:
|
|
||||||
|
|
||||||
(--) no ModulePath specified using default: /usr/X11R6/lib/modules
|
|
||||||
xf86Summa.so: Unknown error loading module
|
|
||||||
|
|
||||||
It is pretty clear, if your are careful in reading the messages (I am
|
|
||||||
not that careful, and lose half an hour in trying to figure out what
|
|
||||||
was wrong).
|
|
||||||
|
|
||||||
|
|
||||||
Calibration
|
|
||||||
-----------
|
|
||||||
|
|
||||||
To calibrate the touchscreen, use the program "gunze-setup" found in
|
|
||||||
the source tree of gpm (yes, it is the same program used for the text
|
|
||||||
mode). The gpm daemon must already be running in order for the
|
|
||||||
program to work flawlessly, as the program stops and restarts gpm
|
|
||||||
internally (it depends on gpm for correct serial port initialization).
|
|
||||||
|
|
||||||
The calibration program uses either /dev/touchscreen (if available) or
|
|
||||||
/dev/mouse (otherwise) as the serial port to communicate with the
|
|
||||||
touchscreen. You'll need therefore to create a symlink for one of
|
|
||||||
those names before running "gunze-setup".
|
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
|
|
||||||
This file tells how to use gpm and X with a touch screen (this is
|
|
||||||
being written as an addition to gpm 1.17.5 and currently the only
|
|
||||||
supported touchscreen is the MicroTouch).
|
|
||||||
|
|
||||||
|
|
||||||
USER INTERFACE
|
|
||||||
--------------
|
|
||||||
|
|
||||||
The decoder currently implemented in gpm is quite simple: it only
|
|
||||||
supports mouse motion and button-1 events.
|
|
||||||
|
|
||||||
When a user touches the screen, the decoder generates mouse motion
|
|
||||||
events. Tapping on the screen generates button-press (as well as drag and
|
|
||||||
release) events.
|
|
||||||
|
|
||||||
A "tap" is a finger-down event generated quickly after a finger-up
|
|
||||||
(half a secon at most). This means that you'll usually move the
|
|
||||||
pointer to the desired position and then tap on it.
|
|
||||||
|
|
||||||
Double-and triple clicks are easily generated by repeated tapping.
|
|
||||||
|
|
||||||
Since tapping is usually accompanied by a small movement, the decoder
|
|
||||||
will use the coordinates of the finger-up event for the button-press.
|
|
||||||
Further dragging will be relative to the tapping position (i.e., the
|
|
||||||
finger-up position). Moreover, the last coordinate pair received on
|
|
||||||
finger-up is discarded, because it usually is slightly offset (due to
|
|
||||||
the non-negligible area of the fingertip)
|
|
||||||
|
|
||||||
|
|
||||||
GPM OPERATION
|
|
||||||
-------------
|
|
||||||
|
|
||||||
In order to run the touchscreen with gpm, you need to update the
|
|
||||||
/dev/mouse symbolic link to point to the right serial port; then
|
|
||||||
invoke gpm with a command line like
|
|
||||||
|
|
||||||
gpm -t mtouch
|
|
||||||
|
|
||||||
Unfortunately, there is currently no way to paste text. I think some
|
|
||||||
modifier key should be eligible to this role but this would mean an
|
|
||||||
in-depth modification to gpm. We have to discuss about it to make the
|
|
||||||
right choice.
|
|
||||||
|
|
||||||
|
|
||||||
Calibration
|
|
||||||
-----------
|
|
||||||
|
|
||||||
To calibrate the touchscreen, use the program "microtouch-setup" found
|
|
||||||
in the source tree of gpm. The gpm daemon must already be running in
|
|
||||||
order for the program to work flawlessly, as the program stops and
|
|
||||||
restarts gpm internally (it depends on gpm for correct serial port
|
|
||||||
initialization). "microtouch-setup" uses /dev/mouse to access the
|
|
||||||
serial port, so /dev/mouse should point to a "ttyS" device.
|
|
||||||
|
|
||||||
|
|
||||||
X OPERATION
|
|
||||||
-----------
|
|
||||||
|
|
||||||
In order to use the touchscreen in X, you should install in your
|
|
||||||
system the "Summa" module, as modified by Frank Holtz (the driver is
|
|
||||||
available from http://www.hof-berlin.de/tablet/tablet.html).
|
|
||||||
|
|
||||||
Gpm must run in repeater mode, with a command line like:
|
|
||||||
gpm -t mtouch -Rsumma
|
|
||||||
, which instructs gpm to repeat packets according to the Summa protocol.
|
|
||||||
|
|
||||||
Then, you need to add the following sections to your XF86config:
|
|
||||||
|
|
||||||
Section "module"
|
|
||||||
Load "xf86Summa.so"
|
|
||||||
EndSection
|
|
||||||
|
|
||||||
Section "Xinput"
|
|
||||||
Subsection "SummaSketch"
|
|
||||||
Port "/dev/gpmdata"
|
|
||||||
DeviceName "touchscreen"
|
|
||||||
Mode Absolute
|
|
||||||
AlwaysCore
|
|
||||||
EndSubSection
|
|
||||||
EndSection
|
|
||||||
|
|
||||||
|
|
||||||
Moreover, you should disable the "Pointer" section. I used a trick
|
|
||||||
like this one:
|
|
||||||
|
|
||||||
Section "Pointer"
|
|
||||||
Protocol "MouseSystems"
|
|
||||||
Device "/dev/fifo"
|
|
||||||
EndSection
|
|
||||||
|
|
||||||
Where /dev/fifo is just a plain unused fifo ("mknod /dev/fifo p")
|
|
||||||
|
|
||||||
Calibration
|
|
||||||
-----------
|
|
||||||
|
|
||||||
To calibrate the touchscreen, use the program "microtouch-setup" found
|
|
||||||
in the source tree of gpm (yes, it is the same program used for the
|
|
||||||
text mode). The gpm daemon must already be running in order for the
|
|
||||||
program to work flawlessly, as the program stops and restarts gpm
|
|
||||||
internally (it depends on gpm for correct serial port
|
|
||||||
initialization). "microtouch-setup" uses /dev/mouse to access the
|
|
||||||
serial port, so /dev/mouse should point to a "ttyS" device.
|
|
|
@ -1,345 +0,0 @@
|
||||||
This README describes the support for the Synaptics ToucPads.
|
|
||||||
|
|
||||||
In addition to translating finger motion into mouse motion and supporting
|
|
||||||
the buttons, this support currently has several features:
|
|
||||||
- a "tap" on the TouchPad causes a left mouse click
|
|
||||||
- a "tap" followed quickly by a finger motion causes a
|
|
||||||
left button drag type action.
|
|
||||||
- a "tap" in one of the corners causes an action
|
|
||||||
the default configuration is upper right causes middle mouse click
|
|
||||||
and lower right causes right mouse click
|
|
||||||
- more pressure on the touch pad speeds the motion of the cursor
|
|
||||||
- a "tap" with a motion component (default > 2mm) initiates a
|
|
||||||
toss and catch sequence. This is terminated by a finger touch
|
|
||||||
on the pad (the toss also ends after 1 sec since that is the
|
|
||||||
idle timeout period for the touchpad).
|
|
||||||
- if the finger moves close to an edge then the mouse motion will
|
|
||||||
be continued in that direction so that you don't need to pick up
|
|
||||||
your finger and start moving again. This continued motion is
|
|
||||||
pressure sensitive (more pressure is faster motion).
|
|
||||||
- Scrolling by putting the finger at the edge, an dmoving up or down.
|
|
||||||
- Recognition of Stick.
|
|
||||||
- Multi fingers are recognized to to stop erradic motions, and to change
|
|
||||||
which mouse button is reported.
|
|
||||||
- Palm detection so the palm does not move the mouse.
|
|
||||||
|
|
||||||
These features can be enabled/disabled and many of them have time and speed
|
|
||||||
parameters which can be adjusted to the taste of the user. These parameters
|
|
||||||
can be provided in the "/usr/etc/gpm-syn.conf" file (or
|
|
||||||
/usr/local/etc/gpm-syn.conf, or /etc/gpm-syn.conf, according to how you ran
|
|
||||||
configure). Each line in this file has the following syntax: [param-name]
|
|
||||||
<value>
|
|
||||||
|
|
||||||
Where param-name is one of the following
|
|
||||||
|
|
||||||
param-name value description
|
|
||||||
====================== ===== ===========
|
|
||||||
/* feature enable configuration values all default to 1 (TRUE) */
|
|
||||||
/* flags are true if the first char of the value is in the string "YyTt1" */
|
|
||||||
/* flags are false if the first char of the value is in the string "NnFf0" */
|
|
||||||
edge_motion_enabled flag is edge motion enabled
|
|
||||||
edge_motion_speed_enabled flag does pressure control
|
|
||||||
speed of edge motion
|
|
||||||
corner_taps_enabled flag are corner taps enabled
|
|
||||||
tap_gesture_enabled flag are taps gesture enabled
|
|
||||||
pressure_speed_enabled flag does pressure control
|
|
||||||
speed in non edges
|
|
||||||
tossing_enabled flag is toss/catch enabled
|
|
||||||
does_toss_use_static_speed flag is toss/catch speed
|
|
||||||
based on toss dist
|
|
||||||
|
|
||||||
/* pressure induced speed related configuration constants */
|
|
||||||
low_pressure 0-255 the lowest pressure which triggers
|
|
||||||
speed processing. If this is less
|
|
||||||
than speed_up_pressure then the
|
|
||||||
motion is slowed down. When the
|
|
||||||
pad pressure is between these
|
|
||||||
values.
|
|
||||||
|
|
||||||
The default value is 60
|
|
||||||
|
|
||||||
pressure is described by
|
|
||||||
Synaptics as follows:
|
|
||||||
0 : no finger contact
|
|
||||||
10 : hovering NEAR pad surface
|
|
||||||
30 : very light finger contact
|
|
||||||
80 : normal finger contact
|
|
||||||
110: very heavy finger contact
|
|
||||||
200: finger lying flat on surface
|
|
||||||
255: whole palm on pad surface
|
|
||||||
|
|
||||||
speed_up_pressure 0-255 the lowest pressure at which speed
|
|
||||||
is increased. If the pad pressure
|
|
||||||
is less than this value then the
|
|
||||||
motion will bs slowed down. If
|
|
||||||
greater, then the motion will be
|
|
||||||
sped up.
|
|
||||||
|
|
||||||
The default value is 60
|
|
||||||
|
|
||||||
pressure_factor float the multiplicative factor applied
|
|
||||||
to the pressure difference to
|
|
||||||
be applied to the speed. This
|
|
||||||
is used as follows:
|
|
||||||
1 + pf * (press - speed_up)
|
|
||||||
The difference in pressure between
|
|
||||||
the measured pressure and the speed
|
|
||||||
up pressure is multiplied by this
|
|
||||||
value which is then applied to the
|
|
||||||
nominal mouse speed.
|
|
||||||
|
|
||||||
The default value is 0.05
|
|
||||||
|
|
||||||
standard_speed_factor float the standard speed factor used to
|
|
||||||
scale touchpad deltas into mouse
|
|
||||||
deltas. The touchpads have
|
|
||||||
resolutions in the 1000 points/inch
|
|
||||||
range (much more detail than a
|
|
||||||
mouse).
|
|
||||||
|
|
||||||
The default value is 0.08
|
|
||||||
|
|
||||||
/* toss/catch related constants */
|
|
||||||
min_toss_time msec This number specifies the minimum
|
|
||||||
finger contact time which is to
|
|
||||||
be considered a toss
|
|
||||||
(in milliseconds).
|
|
||||||
|
|
||||||
The default value is 100 (0.1 sec)
|
|
||||||
|
|
||||||
max_toss_time msec This number specifies the maximum
|
|
||||||
finger contact time which is to
|
|
||||||
be considered a toss
|
|
||||||
(in milliseconds).
|
|
||||||
|
|
||||||
The default value is 300 (0.3 sec)
|
|
||||||
|
|
||||||
prevent_toss_time msec This number specifies the minimum
|
|
||||||
finger release time after a toss
|
|
||||||
is terminated before reacting to
|
|
||||||
taps (in milliseconds). This
|
|
||||||
prevents the "catch" tap from
|
|
||||||
causing a mouse button tap.
|
|
||||||
|
|
||||||
The default value is 300 (0.3 sec)
|
|
||||||
|
|
||||||
min_toss_dist mm This number specifies the minimum
|
|
||||||
finger move distance which is to
|
|
||||||
be considered a toss
|
|
||||||
(in millieters).
|
|
||||||
|
|
||||||
The default value is 2
|
|
||||||
|
|
||||||
static_toss_speed int If does_toss_use_static_speed is
|
|
||||||
1 (TRUE) then this specifies the
|
|
||||||
speed to be used.
|
|
||||||
|
|
||||||
The default value is 70
|
|
||||||
|
|
||||||
toss_speed_factor float This is a multiplier against the
|
|
||||||
toss distance in touchpad units
|
|
||||||
used to scale the distance to a
|
|
||||||
speed.
|
|
||||||
|
|
||||||
The default value is 0.5
|
|
||||||
|
|
||||||
/* edge motion related configuration constants */
|
|
||||||
edge_speed int This is the nominal speed for
|
|
||||||
use when in the edge regions.
|
|
||||||
|
|
||||||
The defalt value is 20
|
|
||||||
|
|
||||||
/* corner tap actions */
|
|
||||||
upper_left_action int This is the mouse button which
|
|
||||||
will be activated on a tap in
|
|
||||||
the upper left corner of the
|
|
||||||
touchpad.
|
|
||||||
|
|
||||||
0: None
|
|
||||||
1: Left
|
|
||||||
2: Middle
|
|
||||||
3: Right
|
|
||||||
4: Fourth
|
|
||||||
5: Up
|
|
||||||
6: Down
|
|
||||||
7: Toggle pad on/off
|
|
||||||
|
|
||||||
The default value is 0 (none)
|
|
||||||
|
|
||||||
upper_right_action int This is the mouse button which
|
|
||||||
will be activated on a tap in
|
|
||||||
the upper right corner of the
|
|
||||||
touchpad.
|
|
||||||
|
|
||||||
The default value is 2 (middle)
|
|
||||||
|
|
||||||
lower_left_action int This is the mouse button which
|
|
||||||
will be activated on a tap in
|
|
||||||
the lower left corner of the
|
|
||||||
touchpad.
|
|
||||||
|
|
||||||
The default value is 0 (none)
|
|
||||||
|
|
||||||
lower_right_action int This is the mouse button which
|
|
||||||
will be activated on a tap in
|
|
||||||
the lower right corner of the
|
|
||||||
touchpad.
|
|
||||||
|
|
||||||
The default value is 3 (right)
|
|
||||||
|
|
||||||
/* wmode parameters */
|
|
||||||
wmode_enabled flag This is to enable the wmode of
|
|
||||||
Synaptics touchpad which
|
|
||||||
supports more configurable
|
|
||||||
options and buttons.
|
|
||||||
|
|
||||||
The default value is 1 (enabled)
|
|
||||||
|
|
||||||
drag_lock_enabled flag Whether to enable drag lock,
|
|
||||||
that is, do not break a drag
|
|
||||||
until next tap even when the
|
|
||||||
finger is off the pad.
|
|
||||||
|
|
||||||
The default value is 0 (disable)
|
|
||||||
|
|
||||||
finger_threshold int The threshold of the pressure
|
|
||||||
reading to consider the finger
|
|
||||||
is on the pad.
|
|
||||||
|
|
||||||
The default value is 30
|
|
||||||
|
|
||||||
tap_lower_limit msec The lower bound of finger
|
|
||||||
contact time to be considerred
|
|
||||||
a tap.
|
|
||||||
|
|
||||||
The default value is 5 (0.005 sec)
|
|
||||||
|
|
||||||
tap_upper_limit msec The upper bound of finger
|
|
||||||
contact time to be considerred
|
|
||||||
a tap.
|
|
||||||
|
|
||||||
The default value is 200 (0.2 sec)
|
|
||||||
|
|
||||||
tap_range int The maximum displacement of
|
|
||||||
finger contact to be considered
|
|
||||||
a tap.
|
|
||||||
|
|
||||||
The default value is 100 (0.1 sec)
|
|
||||||
|
|
||||||
tap_interval msec The time length of button press
|
|
||||||
generated when a tap is
|
|
||||||
recognized, which is also the
|
|
||||||
time within which further
|
|
||||||
finger contact will be consider
|
|
||||||
a drag (or multiple click, if
|
|
||||||
it's also a tap).
|
|
||||||
|
|
||||||
The default value is 200 (0.2 sec)
|
|
||||||
|
|
||||||
pads_tap_interval int Equivalent to tap_interval, but the
|
|
||||||
pads interval. Used when wmode is
|
|
||||||
disabled and multi finger is enabled.
|
|
||||||
|
|
||||||
The default value is 8.
|
|
||||||
|
|
||||||
|
|
||||||
multiple_tap_delay msec Break length between button
|
|
||||||
presses when generating multiple
|
|
||||||
click.
|
|
||||||
|
|
||||||
The default value is 30 (0.03 sec)
|
|
||||||
|
|
||||||
|
|
||||||
palm_detect_enabled flag This enables the palm detection in
|
|
||||||
the pad so a palm does no move the
|
|
||||||
mouse. Actually this is the width of
|
|
||||||
the finger on the pad.
|
|
||||||
|
|
||||||
The default value is 1 (enabled)
|
|
||||||
|
|
||||||
palm_detect_level int At what palm detection level should
|
|
||||||
the pad be ignored? Value should be
|
|
||||||
between 0-11, where 11 is a full palm
|
|
||||||
at pad, and 0 is a normal finger
|
|
||||||
size.
|
|
||||||
|
|
||||||
Default value is 12 (meaning disabled).
|
|
||||||
|
|
||||||
|
|
||||||
multi_finger_tap_enable flag This enables the ability to use 2
|
|
||||||
and 3 fingers during a tap, to press
|
|
||||||
right and middle button
|
|
||||||
respectively. The detection is not
|
|
||||||
100% perfect. If the pad supports
|
|
||||||
finger detection, its values are used.
|
|
||||||
|
|
||||||
The default value is 1 (enabled)
|
|
||||||
|
|
||||||
|
|
||||||
multi_finger_stop_enabled flag When more than one finger is one the
|
|
||||||
pad, an average value (weighted with
|
|
||||||
the the pressure) between the
|
|
||||||
fingers is reported. This gives
|
|
||||||
erradic movements when adding
|
|
||||||
or removing fingers, or when just
|
|
||||||
accidental touches the pad. This
|
|
||||||
option stops the mouse movement for
|
|
||||||
a given time, to let the movement settle.
|
|
||||||
|
|
||||||
The default value is 1 (enabled).
|
|
||||||
|
|
||||||
|
|
||||||
multi_finger_stop_delay Int Number of packets that should be
|
|
||||||
ignored when adding or removing an
|
|
||||||
additional finger to stop erradic
|
|
||||||
movements.
|
|
||||||
|
|
||||||
The default value is 8.
|
|
||||||
|
|
||||||
|
|
||||||
/* Additional options */
|
|
||||||
touch_pad_enabled flag This will stop the interpreting of
|
|
||||||
the touchpad (thought not the stick
|
|
||||||
if any). As such not that usefull,
|
|
||||||
but in a combination with a
|
|
||||||
corner toggle on/off, this may
|
|
||||||
come useful. A corner tap is
|
|
||||||
interpretated if it turns the pad on.
|
|
||||||
|
|
||||||
The default value is 1 (enabled).
|
|
||||||
|
|
||||||
stick_enabled flag Some touchpads have an additional
|
|
||||||
stick which uses the same port. This
|
|
||||||
is an attempt to enable the use
|
|
||||||
while using the touchpad.
|
|
||||||
|
|
||||||
The default value is 1 (enabled).
|
|
||||||
|
|
||||||
|
|
||||||
scrolling_enabled flag This enables the scrolling gesture,
|
|
||||||
which emulates the wheel on a wheel
|
|
||||||
mouse. Putting the finger on the
|
|
||||||
edge and moving it up and down, is
|
|
||||||
eqvivalent with rolling the wheel up
|
|
||||||
and down.
|
|
||||||
|
|
||||||
The default value is 1 (enabled).
|
|
||||||
|
|
||||||
|
|
||||||
scrolling_edge int This decides which edge(s) starts
|
|
||||||
the scrolling gesture. Legal values
|
|
||||||
are (added if more than one edge):
|
|
||||||
|
|
||||||
1: Left edge
|
|
||||||
2: Right edge
|
|
||||||
4: Top edge
|
|
||||||
5: Bottom edge
|
|
||||||
|
|
||||||
The default value is 2 (Right edge).
|
|
||||||
|
|
||||||
|
|
||||||
auto_scrolling_enabled flag This enables whether to keep
|
|
||||||
scrolling if the finger moves to the
|
|
||||||
top or bottom edge.
|
|
||||||
|
|
||||||
The default value is 1 (enabled).
|
|
|
@ -1,161 +0,0 @@
|
||||||
|
|
||||||
NEW FEATURE IN BETA-2 OVER BETA-1 (ONLY TWIDDLER CHANGES)
|
|
||||||
|
|
||||||
Fixed typo in twiddler.c which prevented compiling
|
|
||||||
Fixed segfault when using more than one thumb-key at a time
|
|
||||||
Should fix problem when non-ascii chars appear in the cfg file
|
|
||||||
Changed algorithm for dhouble-click
|
|
||||||
Added shift etc. support
|
|
||||||
Added VT change and Execution of commands
|
|
||||||
|
|
||||||
DETAILED DESCRIPTION OF GPM SUPPORT FOR THE TWIDDLER KEYBOARD
|
|
||||||
|
|
||||||
|
|
||||||
Gpm-1.14 and later support the twiddler keyboard, by HandyKey Corp.
|
|
||||||
(the keyboard is described at www.handykey.com). This document
|
|
||||||
describes the current status of the gpm decoder.
|
|
||||||
|
|
||||||
Mouse support
|
|
||||||
=============
|
|
||||||
|
|
||||||
Motion
|
|
||||||
------
|
|
||||||
The mouse functionality of the keyboard is supported by gpm. Three
|
|
||||||
decoders are currently available:
|
|
||||||
|
|
||||||
- a "static" decoder, which turns twiddler position to mouse
|
|
||||||
displacement. The decoder locks the mouse when the
|
|
||||||
``mouse'' button is pressed and any further motion
|
|
||||||
moves the cursor, as long as ``mouse'' is kept down.
|
|
||||||
This is compiled if "-DTWIDDLER_STATIC" (for example
|
|
||||||
by invoking ``make CC="gcc -DTWIDDLER_STATIC"''.
|
|
||||||
|
|
||||||
- a "ballistic" decoder, which turns twiddler position to
|
|
||||||
mouse speed. If the keyboard is hole vertical the mouse
|
|
||||||
cursor won't be moved. To compile this decoder
|
|
||||||
-DTWIDDLER_BALLISTIC must be used.
|
|
||||||
|
|
||||||
- a "mixed" decoder, that behaves like the static one when the
|
|
||||||
device is near-to-vertical and like the ballistic one
|
|
||||||
for large inclination. This is compiled by default
|
|
||||||
|
|
||||||
|
|
||||||
Problems
|
|
||||||
........
|
|
||||||
|
|
||||||
The current decoder doesn't allow tuning the parameters at run time.
|
|
||||||
I plan to implement twiddler chords to change the resolution,
|
|
||||||
acceleration and threshold of the mixed decoder, and the other ones as
|
|
||||||
well. If different people routinely use different decoders, I'll make
|
|
||||||
it possible to choose which decoder to run.
|
|
||||||
|
|
||||||
I will also implement the chord to switch up/down.
|
|
||||||
|
|
||||||
|
|
||||||
Buttons
|
|
||||||
-------
|
|
||||||
|
|
||||||
The first (left) mouse button is bound to the right key ("a", green,
|
|
||||||
R000). The other buttons are bound to M000 ("e", blue) and L000
|
|
||||||
("SP", red). This is consistent with the twiddler manual.
|
|
||||||
|
|
||||||
To ease using the fingers like with conventional mice, keys 0R00 and
|
|
||||||
00R0 (i.e., "b" and "c") are bound to the middle and right button as
|
|
||||||
well.
|
|
||||||
|
|
||||||
Since someone prefers to reverse the order of the keys (i.e., L000 is
|
|
||||||
the left mouse button), they will use "-B 321" on the gpm command
|
|
||||||
line. To ease them, 0L00 is bound to the middle button, and 00L0 is
|
|
||||||
bound to the *left* button. Thus, with "-B 321" it will be the right
|
|
||||||
button.
|
|
||||||
|
|
||||||
In summary:
|
|
||||||
|
|
||||||
Left button (B1): R000 R000
|
|
||||||
Middle button (B2): M000 0R00
|
|
||||||
Right button (B3): L000 00R0
|
|
||||||
|
|
||||||
For people using "-B 321"
|
|
||||||
|
|
||||||
Left button (B1): L000 L000
|
|
||||||
Middle button (B2): M000 0L00
|
|
||||||
Right button (B3): R000 00L0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Problems
|
|
||||||
........
|
|
||||||
|
|
||||||
None, by now.
|
|
||||||
|
|
||||||
|
|
||||||
Keyboard support
|
|
||||||
================
|
|
||||||
|
|
||||||
Configuration file
|
|
||||||
------------------
|
|
||||||
|
|
||||||
The keyboard map is stored in run-time tables within gpm. There is no
|
|
||||||
precompiled table, so a configuration file is needed. I chose not to
|
|
||||||
precompile values because that would mean to pre-parse a configurazion
|
|
||||||
file, and provide documentation as well. Using a compulsory
|
|
||||||
configuration file reliefs my workload :-)
|
|
||||||
|
|
||||||
The file "gpm-twiddler.conf" that appears in the gpm configuration
|
|
||||||
includes the default keyboard map, and can be used right away. If the
|
|
||||||
file is not in place, gpm will complain about its absence. By default
|
|
||||||
the file must live in /usr/etc (or /usr/local/etc, or whatever you
|
|
||||||
gave as a prefix to ./configure). The behaviour is similar for
|
|
||||||
different installation prefixes. The file is not installed by "make
|
|
||||||
install". If the file is missing, gpm will exit producing a message
|
|
||||||
like this:
|
|
||||||
|
|
||||||
./gpm: /usr/etc/gpm-twiddler.conf: No such file or directory
|
|
||||||
|
|
||||||
The distributed configuration file includes its own documentation.
|
|
||||||
|
|
||||||
If you want to add keys to the default file, you can avoid editing it
|
|
||||||
by writing a "gpm-twiddler.user" file and putting it in the same
|
|
||||||
directory as gpm-twiddler.conf. Gpm will read both files, in sequence,
|
|
||||||
but won't complain if gpm-twiddler.user doesn't exist.
|
|
||||||
|
|
||||||
Gpm will print an error message for any incorrect line in any of the
|
|
||||||
configuration files: error messages include the file name and the
|
|
||||||
line number where the error appears, as well as a description of the
|
|
||||||
type of error. If any error is encountered, gpm will exit.
|
|
||||||
|
|
||||||
The daemon will print a warning message for any redefined key, but will
|
|
||||||
use the new definition. Therefore, if you want to redefine keys in your
|
|
||||||
user file, just redirect standard error to /dev/null after checking
|
|
||||||
you are willing to override default definitions.
|
|
||||||
|
|
||||||
|
|
||||||
General information
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
A key press is reported when any key of the chord is released: this
|
|
||||||
avoides reporting false keys when a multi-key chord is being composed.
|
|
||||||
|
|
||||||
The twiddler driver in gpm implements auto-repeat. Auto-repeat is
|
|
||||||
invoked by double-clicking a chord and keeping it pressed. If the
|
|
||||||
double-click takes more than .3 seconds, it won't be considered a
|
|
||||||
double-click; auto-repeat will start .5 seconds after the
|
|
||||||
double-click.
|
|
||||||
|
|
||||||
Gpm unblanks the screen when keys are composed using the twiddler.
|
|
||||||
|
|
||||||
|
|
||||||
Problems
|
|
||||||
--------
|
|
||||||
|
|
||||||
Gpm doesn't currently report keypresses to the X server. You should
|
|
||||||
use other twiddler drivers for Linux if you need this functionality.
|
|
||||||
For example get the driver by Jeff Levine (there is a link to the
|
|
||||||
driver in www.handykey.com).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
I would like to thank HandyKey Corp. for sending a twiddler keyboard
|
|
||||||
to me and Torben Fjerdingstad for his help in testing out the driver.
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,16 +0,0 @@
|
||||||
#! /usr/bin/sed -f
|
|
||||||
|
|
||||||
|
|
||||||
# allow "%" as a comment char
|
|
||||||
s/^%/@c /
|
|
||||||
s/[^\\]%.*$//
|
|
||||||
s/\\%/%/
|
|
||||||
|
|
||||||
#preserve blanks in @lisp blocks
|
|
||||||
/@lisp/,/@end lisp/ p
|
|
||||||
/@lisp/,/@end lisp/ d
|
|
||||||
|
|
||||||
# remove leading blanks
|
|
||||||
s/^[ ]*//
|
|
||||||
|
|
||||||
#s/\\t/@code/g
|
|
|
@ -1,121 +0,0 @@
|
||||||
#! /usr/bin/awk -f
|
|
||||||
# Copyright (c) 1998-2001 Alessandro Rubini
|
|
||||||
|
|
||||||
BEGIN {IN=0}
|
|
||||||
|
|
||||||
/^%MANPAGE END/ {IN=0; next}
|
|
||||||
/^%MANPAGE/ {IN=1; USELP=NEEDLP=INTABLE=0; NAME=$2; next}
|
|
||||||
IN==0 {next}
|
|
||||||
|
|
||||||
/^%MSKIP/ {SKIP=1;next}
|
|
||||||
/^%M/ {SKIP=0}
|
|
||||||
|
|
||||||
/^@menu/ {SKIP=1;next}
|
|
||||||
/^@end menu/ {SKIP=0;next}
|
|
||||||
|
|
||||||
SKIP==1 {next}
|
|
||||||
/^%M$/ {next}
|
|
||||||
/^@ignore/ {next}
|
|
||||||
/^@end ign/ {next}
|
|
||||||
|
|
||||||
#now perform all the substitutions needed
|
|
||||||
|
|
||||||
{ gsub("^%M ?",""); }
|
|
||||||
|
|
||||||
# Use gensub for converting tags: itz Sep 30 1998
|
|
||||||
#
|
|
||||||
# However, the gensub function is gawk-specific, and we want things
|
|
||||||
# to work with original-awk too (for portability).
|
|
||||||
# Therefore, use a normal gsub, even though it's a subobptimal solution
|
|
||||||
# as it may step in extra braces. The good solution will be piping to sed,
|
|
||||||
# or match, extract subesxpression, replace, reinsert -- bleah...
|
|
||||||
# (ARub, Oct 10 2000)
|
|
||||||
/@b\{/ {
|
|
||||||
#$0 = gensub(/@b\{([^}]+)\}/, "\\\\fB\\1\\\\fP","g");
|
|
||||||
gsub(/@b\{/,"\\fB");
|
|
||||||
gsub(/\}/,"\\fP");
|
|
||||||
}
|
|
||||||
|
|
||||||
/@var\{/ {
|
|
||||||
#$0 = gensub(/@var\{([^}]+)\}/, "\\\\fI\\1\\\\fP","g");
|
|
||||||
gsub(/@var\{/,"\\fB");
|
|
||||||
gsub(/\}/,"\\fP");
|
|
||||||
}
|
|
||||||
|
|
||||||
/@(samp|code|file)\{/ {
|
|
||||||
#$0 = gensub(/@(samp|code|file)\{([^}]+)\}/, "`\\2'","g");
|
|
||||||
gsub(/@(samp|code|file)\{/,"");
|
|
||||||
gsub(/\}/,"");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/@xref\{.*\}\./ {
|
|
||||||
gsub(/@xref\{.*\}\./,"");
|
|
||||||
}
|
|
||||||
|
|
||||||
/@ref\{.*\}/ {
|
|
||||||
gsub(/@ref\{/,"");
|
|
||||||
gsub(/\}/,"");
|
|
||||||
}
|
|
||||||
|
|
||||||
/@\*/ {
|
|
||||||
gsub(/@\* */,"\n.br\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/@[a-z]+\{/ {
|
|
||||||
gsub("@[a-z]+\\{","");
|
|
||||||
gsub("}","");
|
|
||||||
}
|
|
||||||
|
|
||||||
/^@table/ { TABLE=1; }
|
|
||||||
/^@itemize/ { TABLE=1; next}
|
|
||||||
|
|
||||||
/^@item/ {
|
|
||||||
gsub("^@item *","");
|
|
||||||
printf ".TP\n%s\n",$0 > NAME;
|
|
||||||
NEEDLP=0; next;
|
|
||||||
}
|
|
||||||
|
|
||||||
/^@end table/ {TABLE=0}
|
|
||||||
/^@end itemize/ {TABLE=0}
|
|
||||||
|
|
||||||
# discard other texinfo commands
|
|
||||||
|
|
||||||
/^@/ {next}
|
|
||||||
|
|
||||||
# manage comments and '%'
|
|
||||||
|
|
||||||
/^%/ {next}
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
gsub(/[^\\]%.*$/,"");
|
|
||||||
gsub(/\%/,"%");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# remove leading blanks
|
|
||||||
|
|
||||||
/^[ \t]/ {gsub(/^[ \t]/,"");}
|
|
||||||
|
|
||||||
# put a .LP at blank lines
|
|
||||||
|
|
||||||
/^.nf/ {USELP=0}
|
|
||||||
/^.fi/ {USELP=1}
|
|
||||||
|
|
||||||
/^$/ {if (USELP) {NEEDLP++; next;} }
|
|
||||||
|
|
||||||
|
|
||||||
/./ { if (NEEDLP) { printf "\n.LP\n" > NAME; NEEDLP=0; } }
|
|
||||||
|
|
||||||
/^.TH/ {USELP=1}
|
|
||||||
|
|
||||||
# Escape single slashes (e.g. in documentation for `-l' command line option)
|
|
||||||
|
|
||||||
{gsub(/\\ /, "\\\\ ");}
|
|
||||||
|
|
||||||
{gsub(/~/, "~~");}
|
|
||||||
|
|
||||||
{print > NAME}
|
|
||||||
|
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
#! /usr/bin/awk -f
|
|
||||||
|
|
||||||
# This shouldn't contain any gawk specific features anymore
|
|
||||||
|
|
||||||
# Program to create ascii from info;
|
|
||||||
# Missing: table of contents
|
|
||||||
|
|
||||||
# skip
|
|
||||||
|
|
||||||
BEGIN {NODELINE=0; NODE=0; KEEP=1; printf "\n\n"}
|
|
||||||
|
|
||||||
|
|
||||||
/^\037$/ { NODELINE=1; NODE=NODE+1; KEEP=1; next}
|
|
||||||
|
|
||||||
NODE==1 { next }
|
|
||||||
|
|
||||||
NODELINE==1 {
|
|
||||||
NODELINE=2;
|
|
||||||
sub("^.*Node: ","*Node: ");
|
|
||||||
sub(",.*$","");
|
|
||||||
printf "\n\n\n%s",$0;
|
|
||||||
#print
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
NODELINE { NODELINE=NODELINE+1 }
|
|
||||||
|
|
||||||
NODELINE==4 { printf "\t\t\t\t"; }
|
|
||||||
NODELINE==5 { printf "\t\t\t\t"; NODELINE=0}
|
|
||||||
|
|
||||||
|
|
||||||
/^\*\ Menu:$/ { KEEP=0 }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
KEEP==0 { next }
|
|
||||||
|
|
||||||
{ print }
|
|
|
@ -1,4 +0,0 @@
|
||||||
This directory contains emails from/to companies, which were asked, if they
|
|
||||||
wanted to help support gpm.
|
|
||||||
This also includes the XFree project, perhaps sometime we can share mouse
|
|
||||||
support...
|
|
|
@ -1,46 +0,0 @@
|
||||||
Thank you for using Logitech's Electronic Technical Support. My name is Jesse. The following information addresses your original question. You may wish to print this out and/or save this on your computer.
|
|
||||||
|
|
||||||
The information you are requesting is proprietary and not publicly available. Please visit our web site for all public information on our products. http://www.logitech.com/cf/index.cfm
|
|
||||||
Logitech does not currently support Linux.
|
|
||||||
|
|
||||||
If you have additional technical questions regarding your product, please visit our web site at www.logitech.com and submit your question.
|
|
||||||
|
|
||||||
Thank you for your interest in Logitech.
|
|
||||||
|
|
||||||
|
|
||||||
Regards,
|
|
||||||
Jesse
|
|
||||||
Logitech Customer Support
|
|
||||||
|
|
||||||
--- Original Message ---
|
|
||||||
From: Nico Schottelius <nicos-mutt@pcsystems.de>
|
|
||||||
Received: 03/05/2002 11:42am Eastern Standard Time
|
|
||||||
To: eShare - Logitech Customer Support <customer.support@logitech.globalsupport.com>
|
|
||||||
Subject: mouse support
|
|
||||||
|
|
||||||
Hello!
|
|
||||||
|
|
||||||
I am the Linux gpm mouse maintainer and I would like to include
|
|
||||||
some more mouses from logitech into the support.
|
|
||||||
Gpm is the primary Linux mouse driver. For more information about
|
|
||||||
gpm visit freshmeat.net and search gpm.
|
|
||||||
|
|
||||||
I only need some protocol specifications and possibly other informations
|
|
||||||
from you.
|
|
||||||
|
|
||||||
Do you think we can corporate ?
|
|
||||||
|
|
||||||
Thanks for you answer,
|
|
||||||
|
|
||||||
Nico Schottelius
|
|
||||||
|
|
||||||
--
|
|
||||||
Nico Schottelius
|
|
||||||
|
|
||||||
Please send your messages pgp-signed or pgp-encrypted.
|
|
||||||
If you don't know what pgp is visit www.gnupg.org.
|
|
||||||
(public pgp key: ftp.schottelius.org/pub/familiy/nico/pgp-key)
|
|
||||||
|
|
||||||
------ Please do not remove your unique tracking number! ------
|
|
||||||
<<#140786-104335#>>
|
|
||||||
|
|
|
@ -1,72 +0,0 @@
|
||||||
Thank you for using Logitech's Electronic Technical Support. My name is Peggy. The following information addresses your original question. You may wish to print this out and/or save this on your computer.
|
|
||||||
|
|
||||||
Following is all the information I was able to find on Linux and Logitech mice. I hope it will help you some.
|
|
||||||
|
|
||||||
At this time, LINUX is not a supported operating system for Logitech pointing devices. Do not use the software which comes with the Logitech mouse.
|
|
||||||
Linux has Logitech drivers built in. Run either Linuxconf (for shell use) or XF86Config and tell it you're using a Logitech mouse. There are specific entries for serial, bus, and PS2 mice. Currently, the kernel does not support USB mice.
|
|
||||||
As a demand for this operating system increases, Logitech will consider implementing support for it in the future. Please visit our web site periodically for information on product announcements and releases.
|
|
||||||
Configuring 3 button support in Linux (X-Free):
|
|
||||||
In LINUX, you normally have only 2 button support, but it is possible to emulate a third button by pressing the left and the right button together (chording). This is a very uncomfortable solution. So, if a customer is asking for a nice solution, tell him following:
|
|
||||||
Edit the file: /usr/lib/X11/Xconfig
|
|
||||||
and try the following:
|
|
||||||
MouseMan "/dev/mouse"
|
|
||||||
Emulate3buttons
|
|
||||||
and then you have 3-button-support in LINUX
|
|
||||||
Configuring 3 button support in Linux ver.1.1.59:
|
|
||||||
The following information was entered in the configuration file for X11R6 found in the directory: /USR/X11R6/LIB/X11
|
|
||||||
In this directory the user will find a config file called: XF86CONFIG
|
|
||||||
They need to change, or make sure the information in the "POINTER" section reads as follows:
|
|
||||||
Section "Pointer"
|
|
||||||
Protocol "MouseMan"
|
|
||||||
Device "/DEV/MOUSE"
|
|
||||||
EndSection
|
|
||||||
PROTOCOL specifies the mouse protocol that your mouse uses (not the make or brand of mouse). Valid types for PROTOCOL are:
|
|
||||||
BusMouse, Logitech, Microsoft, MMSeries, MouseMan, MouseSystems, PS/2 & MMHitTab
|
|
||||||
DEVICE specifies the device file where the mouse can be accessed. On most Linux systems, this is /DEV/MOUSE. /DEV/MOUSE is usually a link to the appropriate serial port (such as /DEV/CUA0) for serial mice, or the appropriate BusMouse device for BusMice. Just be sure the device file listed in DEVICE exists.
|
|
||||||
BaudRate and SampleRate are only for some Logitech mice. An example of these, which would be added under DEVICE line are:
|
|
||||||
BaudRate 9600
|
|
||||||
SampleRate 150
|
|
||||||
|
|
||||||
|
|
||||||
If you have additional technical questions regarding your product, please visit our web site at www.logitech.com and submit your question.
|
|
||||||
|
|
||||||
Thank you for your interest in Logitech.
|
|
||||||
|
|
||||||
|
|
||||||
Regards,
|
|
||||||
Peggy
|
|
||||||
Logitech Customer Support
|
|
||||||
|
|
||||||
--- Original Message ---
|
|
||||||
From: Nico Schottelius <nicos-mutt@pcsystems.de>
|
|
||||||
Received: 03/11/2002 03:59am Eastern Standard Time
|
|
||||||
To: eShare - Logitech Customer Support <customer.support@logitech.globalsupport.com>
|
|
||||||
Subject: Re: mouse support
|
|
||||||
|
|
||||||
Hello Jesse!
|
|
||||||
|
|
||||||
> The information you are requesting is proprietary and not publicly
|
|
||||||
available. Please visit our web site for all public information on our
|
|
||||||
products. http://www.logitech.com/cf/index.cfm
|
|
||||||
> Logitech does not currently support Linux.
|
|
||||||
|
|
||||||
It would be nice for many logitech users to get mouse devices from
|
|
||||||
logitech to work under Linux.
|
|
||||||
|
|
||||||
When you start sharing information or supporting Linux, please drop me
|
|
||||||
a line, so I can include the support into gpm and possibly later into X.
|
|
||||||
|
|
||||||
Just one more question, why don't you release those information ?
|
|
||||||
What's the problem when the information are public available ?
|
|
||||||
|
|
||||||
Thanks in advance,
|
|
||||||
|
|
||||||
Nico Schottelius
|
|
||||||
|
|
||||||
Please send your messages pgp-signed or pgp-encrypted.
|
|
||||||
If you don't know what pgp is visit www.gnupg.org.
|
|
||||||
(public pgp key: ftp.schottelius.org/pub/familiy/nico/pgp-key)
|
|
||||||
|
|
||||||
------ Please do not remove your unique tracking number! ------
|
|
||||||
<<#140786-104335#>>
|
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
Thank you for using Logitech's Electronic Technical Support. My name is Donald. The following information addresses your original question. You may wish to print this out and/or save this on your computer.
|
|
||||||
|
|
||||||
We do not know when or if ever Logitech will support Linux.
|
|
||||||
|
|
||||||
If you have additional technical questions regarding your product, please visit our web site at www.logitech.com and submit your question.
|
|
||||||
|
|
||||||
Thank you for your interest in Logitech.
|
|
||||||
|
|
||||||
|
|
||||||
Regards,
|
|
||||||
Donald
|
|
||||||
Logitech Customer Support
|
|
||||||
|
|
||||||
--- Original Message ---
|
|
||||||
From: Nico Schottelius <nicos-mutt@pcsystems.de>
|
|
||||||
Received: 03/21/2002 12:11pm Eastern Standard Time
|
|
||||||
To: eShare - Logitech Customer Support <customer.support@logitech.globalsupport.com>
|
|
||||||
Subject: Re: mouse support
|
|
||||||
|
|
||||||
|
|
||||||
thanks for the information. but I am the gpm maintainer and I know all
|
|
||||||
that stuff.
|
|
||||||
|
|
||||||
It would just be nice, if you tell me when logitech starts to support
|
|
||||||
linux,
|
|
||||||
so we can work together!
|
|
||||||
|
|
||||||
Greetings,
|
|
||||||
Nico Schottelius
|
|
||||||
|
|
||||||
--
|
|
||||||
Nico Schottelius
|
|
||||||
|
|
||||||
Please send your messages pgp-signed or pgp-encrypted.
|
|
||||||
If you don't know what pgp is visit www.gnupg.org.
|
|
||||||
(public pgp key: ftp.schottelius.org/pub/familiy/nico/pgp-key)
|
|
||||||
|
|
||||||
------ Please do not remove your unique tracking number! ------
|
|
||||||
<<#140786-104335#>>
|
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
On Sun, Feb 17, 2002 at 10:46:48PM +0100, Nico Schottelius wrote:
|
|
||||||
>Hello David!
|
|
||||||
>
|
|
||||||
>As I am the current maintainer of gpm I found out that partly X can handle
|
|
||||||
>mouse protocols better and partly gpm. Why should we not join our work ?
|
|
||||||
|
|
||||||
That sounds like a good idea.
|
|
||||||
|
|
||||||
>For example the X I use cannot init ps2 correclty, if synps2 was taken before.
|
|
||||||
>gpm can (1.20.0 and later).
|
|
||||||
>Who is the mouse maintainer in X, who may I contact ?
|
|
||||||
|
|
||||||
The maintainer was Kazutaka Yokota <yokota@zodiac.mech.utsunomiya-u.ac.jp>,
|
|
||||||
although I haven't heard from him ina while.
|
|
||||||
|
|
||||||
I'm also interested in the mouse driver, so if you can't get in contact
|
|
||||||
with him, let me know.
|
|
||||||
|
|
||||||
David
|
|
||||||
--
|
|
||||||
David Dawes
|
|
||||||
Release Engineer/Architect The XFree86 Project
|
|
||||||
www.XFree86.org/~dawes
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Didn't get any answer from <yokota@zodiac.mech.utsunomiya-u.ac.jp>.
|
|
|
@ -1,238 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# install - install a program, script, or datafile
|
|
||||||
# This comes from X11R5.
|
|
||||||
#
|
|
||||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
|
||||||
# `make' implicit rules from creating a file called install from it
|
|
||||||
# when there is no Makefile.
|
|
||||||
#
|
|
||||||
# This script is compatible with the BSD install script, but was written
|
|
||||||
# from scratch.
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
# set DOITPROG to echo to test this script
|
|
||||||
|
|
||||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
|
||||||
doit="${DOITPROG-}"
|
|
||||||
|
|
||||||
|
|
||||||
# put in absolute paths if you don't have them in your path; or use env. vars.
|
|
||||||
|
|
||||||
mvprog="${MVPROG-mv}"
|
|
||||||
cpprog="${CPPROG-cp}"
|
|
||||||
chmodprog="${CHMODPROG-chmod}"
|
|
||||||
chownprog="${CHOWNPROG-chown}"
|
|
||||||
chgrpprog="${CHGRPPROG-chgrp}"
|
|
||||||
stripprog="${STRIPPROG-strip}"
|
|
||||||
rmprog="${RMPROG-rm}"
|
|
||||||
mkdirprog="${MKDIRPROG-mkdir}"
|
|
||||||
|
|
||||||
tranformbasename=""
|
|
||||||
transform_arg=""
|
|
||||||
instcmd="$mvprog"
|
|
||||||
chmodcmd="$chmodprog 0755"
|
|
||||||
chowncmd=""
|
|
||||||
chgrpcmd=""
|
|
||||||
stripcmd=""
|
|
||||||
rmcmd="$rmprog -f"
|
|
||||||
mvcmd="$mvprog"
|
|
||||||
src=""
|
|
||||||
dst=""
|
|
||||||
dir_arg=""
|
|
||||||
|
|
||||||
while [ x"$1" != x ]; do
|
|
||||||
case $1 in
|
|
||||||
-c) instcmd="$cpprog"
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-d) dir_arg=true
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-m) chmodcmd="$chmodprog $2"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-o) chowncmd="$chownprog $2"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-g) chgrpcmd="$chgrpprog $2"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-s) stripcmd="$stripprog"
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
*) if [ x"$src" = x ]
|
|
||||||
then
|
|
||||||
src=$1
|
|
||||||
else
|
|
||||||
# this colon is to work around a 386BSD /bin/sh bug
|
|
||||||
:
|
|
||||||
dst=$1
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ x"$src" = x ]
|
|
||||||
then
|
|
||||||
echo "install: no input file specified"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"$dir_arg" != x ]; then
|
|
||||||
dst=$src
|
|
||||||
src=""
|
|
||||||
|
|
||||||
if [ -d $dst ]; then
|
|
||||||
instcmd=:
|
|
||||||
else
|
|
||||||
instcmd=mkdir
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
|
|
||||||
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
|
||||||
# might cause directories to be created, which would be especially bad
|
|
||||||
# if $src (and thus $dsttmp) contains '*'.
|
|
||||||
|
|
||||||
if [ -f $src -o -d $src ]
|
|
||||||
then
|
|
||||||
true
|
|
||||||
else
|
|
||||||
echo "install: $src does not exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"$dst" = x ]
|
|
||||||
then
|
|
||||||
echo "install: no destination specified"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If destination is a directory, append the input filename; if your system
|
|
||||||
# does not like double slashes in filenames, you may need to add some logic
|
|
||||||
|
|
||||||
if [ -d $dst ]
|
|
||||||
then
|
|
||||||
dst="$dst"/`basename $src`
|
|
||||||
else
|
|
||||||
true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
## this sed command emulates the dirname command
|
|
||||||
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
|
||||||
|
|
||||||
# Make sure that the destination directory exists.
|
|
||||||
# this part is taken from Noah Friedman's mkinstalldirs script
|
|
||||||
|
|
||||||
# Skip lots of stat calls in the usual case.
|
|
||||||
if [ ! -d "$dstdir" ]; then
|
|
||||||
defaultIFS='
|
|
||||||
'
|
|
||||||
IFS="${IFS-${defaultIFS}}"
|
|
||||||
|
|
||||||
oIFS="${IFS}"
|
|
||||||
# Some sh's can't handle IFS=/ for some reason.
|
|
||||||
IFS='%'
|
|
||||||
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
|
|
||||||
IFS="${oIFS}"
|
|
||||||
|
|
||||||
pathcomp=''
|
|
||||||
|
|
||||||
while [ $# -ne 0 ] ; do
|
|
||||||
pathcomp="${pathcomp}${1}"
|
|
||||||
shift
|
|
||||||
|
|
||||||
if [ ! -d "${pathcomp}" ] ;
|
|
||||||
then
|
|
||||||
$mkdirprog "${pathcomp}"
|
|
||||||
else
|
|
||||||
true
|
|
||||||
fi
|
|
||||||
|
|
||||||
pathcomp="${pathcomp}/"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"$dir_arg" != x ]
|
|
||||||
then
|
|
||||||
$doit $instcmd $dst &&
|
|
||||||
|
|
||||||
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
|
|
||||||
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
|
|
||||||
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
|
|
||||||
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
|
|
||||||
else
|
|
||||||
|
|
||||||
# If we're going to rename the final executable, determine the name now.
|
|
||||||
|
|
||||||
if [ x"$transformarg" = x ]
|
|
||||||
then
|
|
||||||
dstfile=`basename $dst`
|
|
||||||
else
|
|
||||||
dstfile=`basename $dst $transformbasename |
|
|
||||||
sed $transformarg`$transformbasename
|
|
||||||
fi
|
|
||||||
|
|
||||||
# don't allow the sed command to completely eliminate the filename
|
|
||||||
|
|
||||||
if [ x"$dstfile" = x ]
|
|
||||||
then
|
|
||||||
dstfile=`basename $dst`
|
|
||||||
else
|
|
||||||
true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Make a temp file name in the proper directory.
|
|
||||||
|
|
||||||
dsttmp=$dstdir/#inst.$$#
|
|
||||||
|
|
||||||
# Move or copy the file name to the temp name
|
|
||||||
|
|
||||||
$doit $instcmd $src $dsttmp &&
|
|
||||||
|
|
||||||
trap "rm -f ${dsttmp}" 0 &&
|
|
||||||
|
|
||||||
# and set any options; do chmod last to preserve setuid bits
|
|
||||||
|
|
||||||
# If any of these fail, we abort the whole thing. If we want to
|
|
||||||
# ignore errors from any of these, just make sure not to ignore
|
|
||||||
# errors from the above "$doit $instcmd $src $dsttmp" command.
|
|
||||||
|
|
||||||
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
|
|
||||||
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
|
|
||||||
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
|
|
||||||
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
|
|
||||||
|
|
||||||
# Now rename the file to the real destination.
|
|
||||||
|
|
||||||
$doit $rmcmd -f $dstdir/$dstfile &&
|
|
||||||
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
|
||||||
|
|
||||||
fi &&
|
|
||||||
|
|
||||||
|
|
||||||
exit 0
|
|
|
@ -1,9 +0,0 @@
|
||||||
AC_DEFUN([ITZ_CHECK_TYPE],
|
|
||||||
[AC_CACHE_CHECK([for $1],itz_cv_type_$1,
|
|
||||||
AC_TRY_COMPILE([
|
|
||||||
#include <$2>
|
|
||||||
],[
|
|
||||||
$1 dummy;
|
|
||||||
return 0;
|
|
||||||
],[itz_cv_type_$1=yes],[itz_cv_type_$1=no]))
|
|
||||||
])
|
|
|
@ -1,9 +0,0 @@
|
||||||
AC_DEFUN([ITZ_PATH_SITE_LISP],
|
|
||||||
[AC_CACHE_CHECK([where to install Emacs Lisp files],itz_cv_path_site_lisp,
|
|
||||||
[eval itz_cv_path_site_lisp=`${EMACS} -batch -l ${srcdir}/exec.el -exec "(mapcar 'print load-path)" 2>/dev/null |
|
|
||||||
sed -e '/^$/d' | sed -n -e 2p`
|
|
||||||
case x${itz_cv_path_site_lisp} in
|
|
||||||
x*site-lisp*) ;;
|
|
||||||
x*) itz_cv_path_site_lisp='${datadir}/emacs/site-lisp' ;;
|
|
||||||
esac])
|
|
||||||
])
|
|
|
@ -1,17 +0,0 @@
|
||||||
AC_DEFUN([ITZ_SYS_ELF],
|
|
||||||
[AC_CACHE_CHECK([whether system is ELF],itz_cv_sys_elf,
|
|
||||||
[AC_EGREP_CPP(win,
|
|
||||||
[#ifdef __ELF__
|
|
||||||
win
|
|
||||||
#else
|
|
||||||
lose
|
|
||||||
#endif
|
|
||||||
],[itz_cv_sys_elf=yes],[itz_cv_sys_elf=no])])
|
|
||||||
if test ${itz_cv_sys_elf} = yes && test x${ac_cv_prog_gcc} = xyes ; then
|
|
||||||
PICFLAGS="-DPIC -fPIC"
|
|
||||||
SOLDFLAGS="-fPIC -shared -Wl,-soname,"
|
|
||||||
else
|
|
||||||
PICFLAGS=
|
|
||||||
SOLDFLAGS=
|
|
||||||
fi
|
|
||||||
])
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,116 +0,0 @@
|
||||||
Hello,
|
|
||||||
|
|
||||||
Gpm 1.20.1 fails to build for me for the mipsel-linux host. This happens
|
|
||||||
because the platform only defines ceil() in libm (as expected), while a
|
|
||||||
few others only work by an accident because they have an inline equivalent
|
|
||||||
in <math.h>. The failure also happens for these platforms if optimization
|
|
||||||
is disabled in CFLAGS. Following is a fix that adds an autoconf test for
|
|
||||||
<math.h> and whether linking against libm is needed to make use of ceil().
|
|
||||||
|
|
||||||
I've only tested the fix with autoconf 2.57 (I only use 2.5x for a long
|
|
||||||
time), hence that's the required version. It may work with older
|
|
||||||
versions; if not, fixing shouldn't be that difficult. Alternatively you
|
|
||||||
may consider upgrading autoconf -- the current version is much cleaner and
|
|
||||||
the transition should be painless as gpm's scripts seem to have no
|
|
||||||
incompatible hacks.
|
|
||||||
|
|
||||||
Please apply,
|
|
||||||
|
|
||||||
Maciej
|
|
||||||
|
|
||||||
--
|
|
||||||
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
|
|
||||||
+--------------------------------------------------------------+
|
|
||||||
+ e-mail: macro@ds2.pg.gda.pl, PGP key available +
|
|
||||||
|
|
||||||
gpm-1.20.1-ceil.patch
|
|
||||||
diff -up --recursive --new-file gpm-1.20.1.macro/configure.in gpm-1.20.1/configure.in
|
|
||||||
--- gpm-1.20.1.macro/configure.in 2002-12-24 22:57:16.000000000 +0000
|
|
||||||
+++ gpm-1.20.1/configure.in 2003-01-19 03:27:16.000000000 +0000
|
|
||||||
@@ -4,7 +4,7 @@ dnl Process this file with autoconf to p
|
|
||||||
dnl written jan/1997 - T.E.Dickey <dickey@clark.net>
|
|
||||||
|
|
||||||
AC_INIT(src/gpm.c)
|
|
||||||
-AC_PREREQ(2.12)
|
|
||||||
+AC_PREREQ(2.57)
|
|
||||||
AC_CONFIG_HEADER(src/headers/config.h)
|
|
||||||
|
|
||||||
release=1.20.1
|
|
||||||
@@ -112,6 +112,41 @@ No|no|N|n) SHARED_LIBS=-lc ;;
|
|
||||||
LIBS=$SAVELIBS ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
+dnl ceil() may be an inline, so check with no libm first
|
|
||||||
+AC_CHECK_HEADERS([math.h], , [AC_MSG_ERROR([a mandatory header is missing])])
|
|
||||||
+AC_CACHE_CHECK([whether libm is needed for ceil], [gpm_cv_ceil_libm],
|
|
||||||
+[ceil_found=no
|
|
||||||
+for i in "" "-lm"; do
|
|
||||||
+ SAVELIBS=$LIBS
|
|
||||||
+ LIBS=$i
|
|
||||||
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
|
||||||
+[#ifdef HAVE_MATH_H
|
|
||||||
+#include <math.h>
|
|
||||||
+#endif], [ceil(0.0);])], [ceil_found=yes])
|
|
||||||
+ LIBS=$SAVELIBS
|
|
||||||
+ if test x$ceil_found = xyes; then
|
|
||||||
+ break
|
|
||||||
+ fi
|
|
||||||
+done
|
|
||||||
+if test x$ceil_found = xno; then
|
|
||||||
+ gpm_cv_ceil_libm=missing
|
|
||||||
+elif test x$i = x-lm; then
|
|
||||||
+ gpm_cv_ceil_libm=yes
|
|
||||||
+else
|
|
||||||
+ gpm_cv_ceil_libm=no
|
|
||||||
+fi])
|
|
||||||
+case $gpm_cv_ceil_libm in
|
|
||||||
+no)
|
|
||||||
+ LIBM=
|
|
||||||
+ ;;
|
|
||||||
+yes)
|
|
||||||
+ LIBM=-lm
|
|
||||||
+ ;;
|
|
||||||
+*)
|
|
||||||
+ AC_MSG_ERROR([a mandatory function is missing])
|
|
||||||
+ ;;
|
|
||||||
+esac
|
|
||||||
+
|
|
||||||
GPMXTERM=
|
|
||||||
AC_SUBST(GPMXTERM)
|
|
||||||
AC_SUBST(release)
|
|
||||||
@@ -125,6 +160,7 @@ AC_SUBST(PICFLAGS)
|
|
||||||
AC_SUBST(SOLDFLAGS)
|
|
||||||
AC_SUBST(CURSES_OBJS)
|
|
||||||
AC_SUBST(SHARED_LIBS)
|
|
||||||
+AC_SUBST(LIBM)
|
|
||||||
AC_SUBST(lispdir)
|
|
||||||
|
|
||||||
CPPFLAGS='-I$(srcdir) $(DEFS) -include headers/config.h -Wall -DSYSCONFDIR="\"$(sysconfdir)\"" -DSBINDIR="\"$(sbindir)\""'
|
|
||||||
diff -up --recursive --new-file gpm-1.20.1.macro/src/Makefile.in gpm-1.20.1/src/Makefile.in
|
|
||||||
--- gpm-1.20.1.macro/src/Makefile.in 2002-12-24 22:57:16.000000000 +0000
|
|
||||||
+++ gpm-1.20.1/src/Makefile.in 2003-01-19 03:30:44.000000000 +0000
|
|
||||||
@@ -70,6 +70,10 @@ prog/%: prog/%.o
|
|
||||||
all: gpm lib/@SHLIB@ lib/libgpm.a $(PROG)
|
|
||||||
|
|
||||||
gpm: $(GOBJ)
|
|
||||||
+ $(CC) @LDFLAGS@ $(LDFLAGS) -o $@ $^ @LIBS@ @LIBM@ $(LIBS)
|
|
||||||
+
|
|
||||||
+prog/mouse-test: prog/mouse-test.o
|
|
||||||
+ $(CC) @LDFLAGS@ $(LDFLAGS) -o $@ $^ @LIBS@ @LIBM@ $(LIBS)
|
|
||||||
|
|
||||||
# construct dependings of sourcefiles and link sourcefiles
|
|
||||||
$(DEPFILE) dep: prog/gpm-root.c
|
|
||||||
diff -up --recursive --new-file gpm-1.20.1.macro/src/synaptics.c gpm-1.20.1/src/synaptics.c
|
|
||||||
--- gpm-1.20.1.macro/src/synaptics.c 2002-12-24 22:57:16.000000000 +0000
|
|
||||||
+++ gpm-1.20.1/src/synaptics.c 2003-01-19 03:32:31.000000000 +0000
|
|
||||||
@@ -209,7 +209,9 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
+#ifdef HAVE_MATH_H
|
|
||||||
#include <math.h> /* ceil */
|
|
||||||
+#endif
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
Hello,
|
|
||||||
|
|
||||||
Currently option.consolename is reinitialized to NULL whenever Gpm_Open()
|
|
||||||
is called. This leads to a crash due to a NULL pointer dereference for a
|
|
||||||
second invocation of the function, beacuse consolename is only set up for
|
|
||||||
the first one. I've discovered the bug with mc when switching back from
|
|
||||||
the underlying shell (i.e. toggling the program's panels on) -- with
|
|
||||||
1.20.1 it would always crash.
|
|
||||||
|
|
||||||
Following is a trivial fix. Additionally it prevents a crash that might
|
|
||||||
happen if Gpm_get_console() returned NULL and returns an error from
|
|
||||||
Gpm_Open() instead. Finally, gpm_stack is now also checked for being
|
|
||||||
non-NULL.
|
|
||||||
|
|
||||||
Please apply,
|
|
||||||
|
|
||||||
Maciej
|
|
||||||
|
|
||||||
--
|
|
||||||
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
|
|
||||||
+--------------------------------------------------------------+
|
|
||||||
+ e-mail: macro@ds2.pg.gda.pl, PGP key available +
|
|
||||||
|
|
||||||
gpm-1.20.1-consolename.patch
|
|
||||||
diff -up --recursive --new-file gpm-1.20.1.macro/src/lib/liblow.c gpm-1.20.1/src/lib/liblow.c
|
|
||||||
--- gpm-1.20.1.macro/src/lib/liblow.c 2002-12-24 22:57:16.000000000 +0000
|
|
||||||
+++ gpm-1.20.1/src/lib/liblow.c 2003-01-19 01:15:51.000000000 +0000
|
|
||||||
@@ -199,8 +199,6 @@ int Gpm_Open(Gpm_Connect *conn, int flag
|
|
||||||
Gpm_Stst *new = NULL;
|
|
||||||
char* sock_name = 0;
|
|
||||||
|
|
||||||
- option.consolename = NULL;
|
|
||||||
-
|
|
||||||
gpm_report(GPM_PR_DEBUG,"VC: %d",flag);
|
|
||||||
|
|
||||||
/*....................................... First of all, check xterm */
|
|
||||||
@@ -242,6 +240,10 @@ int Gpm_Open(Gpm_Connect *conn, int flag
|
|
||||||
if (new->next)
|
|
||||||
conn->vc=new->next->info.vc; /* inherit */
|
|
||||||
else {
|
|
||||||
+ if (!option.consolename) {
|
|
||||||
+ gpm_report(GPM_PR_ERR,"option.consolename null");
|
|
||||||
+ goto err;
|
|
||||||
+ }
|
|
||||||
conn->vc=0; /* default handler */
|
|
||||||
if (flag > 0) { /* forced vc number */
|
|
||||||
conn->vc=flag;
|
|
||||||
@@ -370,11 +372,11 @@ int Gpm_Open(Gpm_Connect *conn, int flag
|
|
||||||
/*....................................... Error: free all memory */
|
|
||||||
err:
|
|
||||||
gpm_report(GPM_PR_ERR,"Oh, oh, it's an error! possibly I die! ");
|
|
||||||
- do {
|
|
||||||
+ while(gpm_stack) {
|
|
||||||
new=gpm_stack->next;
|
|
||||||
free(gpm_stack);
|
|
||||||
gpm_stack=new;
|
|
||||||
- } while(gpm_stack);
|
|
||||||
+ };
|
|
||||||
if (gpm_fd>=0) close(gpm_fd);
|
|
||||||
if (sock_name) {
|
|
||||||
unlink(sock_name);
|
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
Hello,
|
|
||||||
|
|
||||||
Since $(ELISP) includes two files and in subdirectories, they need to be
|
|
||||||
properly handled for the "all" dependency and uninstallation. Here is an
|
|
||||||
obvious fix. Please apply.
|
|
||||||
|
|
||||||
Maciej
|
|
||||||
|
|
||||||
--
|
|
||||||
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
|
|
||||||
+--------------------------------------------------------------+
|
|
||||||
+ e-mail: macro@ds2.pg.gda.pl, PGP key available +
|
|
||||||
|
|
||||||
gpm-1.20.1-contrib.patch
|
|
||||||
diff -up --recursive --new-file gpm-1.20.1.macro/contrib/Makefile.in gpm-1.20.1/contrib/Makefile.in
|
|
||||||
--- gpm-1.20.1.macro/contrib/Makefile.in 2002-12-24 22:57:16.000000000 +0000
|
|
||||||
+++ gpm-1.20.1/contrib/Makefile.in 2003-01-18 23:12:12.000000000 +0000
|
|
||||||
@@ -9,7 +9,7 @@ top_builddir = ..
|
|
||||||
|
|
||||||
include $(top_builddir)/Makefile.include
|
|
||||||
|
|
||||||
-all: $(srcdir)/$(ELISP)
|
|
||||||
+all: $(addprefix $(srcdir)/,$(ELISP))
|
|
||||||
|
|
||||||
install: all
|
|
||||||
if [ -n "$(ELISP)" ]; then for i in `echo $(ELISP)`; do \
|
|
||||||
@@ -21,7 +21,7 @@ install: all
|
|
||||||
|
|
||||||
uninstall:
|
|
||||||
if [ -n "$(ELISP)" ]; then for i in `echo $(ELISP)`; do \
|
|
||||||
- rm -f $(lispdir)/$$i ;\
|
|
||||||
+ rm -f $(lispdir)/`basename $$i` ;\
|
|
||||||
done; fi
|
|
||||||
|
|
||||||
dist:
|
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
Hello,
|
|
||||||
|
|
||||||
There are bogus dependencies when one decides not to build a shared
|
|
||||||
library. In this case "all" depends on "lib/" and programs depend on
|
|
||||||
"lib/libgpm.so". Following is an obvious fix. Please apply.
|
|
||||||
|
|
||||||
Maciej
|
|
||||||
|
|
||||||
--
|
|
||||||
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
|
|
||||||
+--------------------------------------------------------------+
|
|
||||||
+ e-mail: macro@ds2.pg.gda.pl, PGP key available +
|
|
||||||
|
|
||||||
gpm-1.20.1-shlib.patch
|
|
||||||
diff -up --recursive --new-file gpm-1.20.1.macro/configure.in gpm-1.20.1/configure.in
|
|
||||||
--- gpm-1.20.1.macro/configure.in 2002-12-24 22:57:16.000000000 +0000
|
|
||||||
+++ gpm-1.20.1/configure.in 2003-01-18 23:04:19.000000000 +0000
|
|
||||||
@@ -83,7 +83,7 @@ fi
|
|
||||||
|
|
||||||
ITZ_SYS_ELF
|
|
||||||
if test ${itz_cv_sys_elf} = yes && test x${ac_cv_prog_gcc} = xyes ; then
|
|
||||||
- SHLIB=libgpm.so
|
|
||||||
+ SHLIB=lib/libgpm.so
|
|
||||||
else
|
|
||||||
SHLIB=
|
|
||||||
fi
|
|
||||||
diff -up --recursive --new-file gpm-1.20.1.macro/src/Makefile.in gpm-1.20.1/src/Makefile.in
|
|
||||||
--- gpm-1.20.1.macro/src/Makefile.in 2002-12-24 22:57:16.000000000 +0000
|
|
||||||
+++ gpm-1.20.1/src/Makefile.in 2003-01-18 23:05:07.000000000 +0000
|
|
||||||
@@ -67,7 +67,7 @@ prog/%: prog/%.o
|
|
||||||
# | $(SED) '\''s/\($*\)\.o\([ :]*\)/\1.o \1.lo\2/g'\'' > $(DEPDIR)/$@'
|
|
||||||
|
|
||||||
# Do it all!
|
|
||||||
-all: gpm lib/@SHLIB@ lib/libgpm.a $(PROG)
|
|
||||||
+all: gpm @SHLIB@ lib/libgpm.a $(PROG)
|
|
||||||
|
|
||||||
gpm: $(GOBJ)
|
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ prog/gpm-root: prog/gpm-root.c
|
|
||||||
|
|
||||||
prog/mouse-test: mice.o twiddler.o synaptics.o
|
|
||||||
|
|
||||||
-$(PROG): lib/libgpm.so lib/@SHLIB@ lib/libgpm.a
|
|
||||||
+$(PROG): @SHLIB@ lib/libgpm.a
|
|
||||||
|
|
||||||
# Subdirectory lib/
|
|
||||||
lib/libgpm.a: $(LOBJ)
|
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
diff -ruN gpm-1.20.1/src/headers/gpmInt.h gpm-1.20.1-pts/src/headers/gpmInt.h
|
|
||||||
--- gpm-1.20.1/src/headers/gpmInt.h 2002-12-25 00:56:54.000000000 +0200
|
|
||||||
+++ gpm-1.20.1-pts/src/headers/gpmInt.h 2003-09-17 09:11:13.000000000 +0300
|
|
||||||
@@ -82,6 +82,7 @@
|
|
||||||
#define GPM_NULL_DEV "/dev/null"
|
|
||||||
#define GPM_SYS_CONSOLE "/dev/console"
|
|
||||||
#define GPM_DEVFS_CONSOLE "/dev/vc/0"
|
|
||||||
+#define GPM_PTS_CONSOLE "/dev/pts/0"
|
|
||||||
#define GPM_OLD_CONSOLE "/dev/tty0"
|
|
||||||
|
|
||||||
/* for adding a mouse; add_mouse */
|
|
||||||
diff -ruN gpm-1.20.1/src/tools.c gpm-1.20.1-pts/src/tools.c
|
|
||||||
--- gpm-1.20.1/src/tools.c 2002-12-25 00:56:54.000000000 +0200
|
|
||||||
+++ gpm-1.20.1-pts/src/tools.c 2003-09-17 09:08:07.000000000 +0300
|
|
||||||
@@ -46,6 +46,10 @@
|
|
||||||
if (stat(GPM_DEVFS_CONSOLE,&buf) == 0)
|
|
||||||
tmp = GPM_DEVFS_CONSOLE;
|
|
||||||
|
|
||||||
+ /* May it be that we are on the network console? */
|
|
||||||
+ else if(stat(GPM_PTS_CONSOLE,&buf) == 0)
|
|
||||||
+ tmp = GPM_PTS_CONSOLE;
|
|
||||||
+
|
|
||||||
/* Failed, try OLD console */
|
|
||||||
else if(stat(GPM_OLD_CONSOLE,&buf) == 0)
|
|
||||||
tmp = GPM_OLD_CONSOLE;
|
|
Binary file not shown.
|
@ -1,77 +0,0 @@
|
||||||
2004-03-25 Stepan Kasal <kasal@ucw.cz>
|
|
||||||
|
|
||||||
* doc/manpager: the first argument to gsub is constant regex,
|
|
||||||
there is no need to give it as string; this also silences
|
|
||||||
some gawk warnings.
|
|
||||||
|
|
||||||
diff -u -r1.1 manpager
|
|
||||||
--- gpm/doc/manpager 27 May 2002 15:35:47 -0000 1.1
|
|
||||||
+++ gpm/doc/manpager 25 Mar 2004 13:23:46 -0000
|
|
||||||
@@ -32,20 +32,20 @@
|
|
||||||
# (ARub, Oct 10 2000)
|
|
||||||
/@b\{/ {
|
|
||||||
#$0 = gensub(/@b\{([^}]+)\}/, "\\\\fB\\1\\\\fP","g");
|
|
||||||
- gsub("@b\{","\\fB");
|
|
||||||
- gsub("\}","\\fP");
|
|
||||||
+ gsub(/@b\{/,"\\fB");
|
|
||||||
+ gsub(/\}/,"\\fP");
|
|
||||||
}
|
|
||||||
|
|
||||||
/@var\{/ {
|
|
||||||
#$0 = gensub(/@var\{([^}]+)\}/, "\\\\fI\\1\\\\fP","g");
|
|
||||||
- gsub("@var\{","\\fB");
|
|
||||||
- gsub("\}","\\fP");
|
|
||||||
+ gsub(/@var\{/,"\\fB");
|
|
||||||
+ gsub(/\}/,"\\fP");
|
|
||||||
}
|
|
||||||
|
|
||||||
/@(samp|code|file)\{/ {
|
|
||||||
#$0 = gensub(/@(samp|code|file)\{([^}]+)\}/, "`\\2'","g");
|
|
||||||
- gsub("@(samp|code|file)\{","");
|
|
||||||
- gsub("\}","");
|
|
||||||
+ gsub(/@(samp|code|file)\{/,"");
|
|
||||||
+ gsub(/\}/,"");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -54,8 +54,8 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
/@ref\{.*\}/ {
|
|
||||||
- gsub("@ref\{","");
|
|
||||||
- gsub("\}","");
|
|
||||||
+ gsub(/@ref\{/,"");
|
|
||||||
+ gsub(/\}/,"");
|
|
||||||
}
|
|
||||||
|
|
||||||
/@\*/ {
|
|
||||||
@@ -89,14 +89,14 @@
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
- gsub("[^\\\\]%.*$","");
|
|
||||||
- gsub("\\%","%");
|
|
||||||
+ gsub(/[^\\]%.*$/,"");
|
|
||||||
+ gsub(/\%/,"%");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# remove leading blanks
|
|
||||||
|
|
||||||
-/^[ \t]/ {gsub("^[ \t]","");}
|
|
||||||
+/^[ \t]/ {gsub(/^[ \t]/,"");}
|
|
||||||
|
|
||||||
# put a .LP at blank lines
|
|
||||||
|
|
||||||
@@ -112,9 +112,9 @@
|
|
||||||
|
|
||||||
# Escape single slashes (e.g. in documentation for `-l' command line option)
|
|
||||||
|
|
||||||
- {gsub("\\\\ ", "\\\\ ");}
|
|
||||||
+ {gsub(/\\ /, "\\\\ ");}
|
|
||||||
|
|
||||||
- {gsub("~", "~~");}
|
|
||||||
+ {gsub(/~/, "~~");}
|
|
||||||
|
|
||||||
{print > NAME}
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
2004-03-25 Stepan Kasal <kasal@ucw.cz>
|
|
||||||
|
|
||||||
* doc/Makefile.in: use @MAKEINFO@, not $(MAKEINFO), as the later
|
|
||||||
one can never be equal to "no".
|
|
||||||
|
|
||||||
diff -u -r1.2 Makefile.in
|
|
||||||
--- gpm/doc/Makefile.in 30 Nov 2002 13:20:07 -0000 1.2
|
|
||||||
+++ gpm/doc/Makefile.in 25 Mar 2004 13:23:46 -0000
|
|
||||||
@@ -48,7 +48,7 @@
|
|
||||||
|
|
||||||
# INFO (makeinfo)
|
|
||||||
%.info: %.texinfo
|
|
||||||
- if [ "$(MAKEINFO)" != "no" ]; then $(MAKEINFO) $< -o $@; fi
|
|
||||||
+ if [ "@MAKEINFO@" != "no" ]; then $(MAKEINFO) $< -o $@; fi
|
|
||||||
|
|
||||||
# TXT (-)
|
|
||||||
%.txt: %.info
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,40 +0,0 @@
|
||||||
--- gpm-1.19.3/gpm.c.serialconsole Fri Jan 5 14:10:46 2001
|
|
||||||
+++ gpm-1.19.3/gpm.c Fri Jan 5 14:39:28 2001
|
|
||||||
@@ -38,6 +38,7 @@
|
|
||||||
#include <sys/un.h> /* struct sockaddr_un */
|
|
||||||
|
|
||||||
#include <linux/vt.h> /* VT_GETSTATE */
|
|
||||||
+#include <linux/serial.h> /* for serial console check */
|
|
||||||
#include <sys/kd.h> /* KDGETMODE */
|
|
||||||
#include <termios.h> /* winsize */
|
|
||||||
|
|
||||||
@@ -142,10 +143,25 @@
|
|
||||||
static inline int open_console(const int mode)
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
-
|
|
||||||
- if ((fd=open(consolename, mode)) < 0)
|
|
||||||
- oops(consolename);
|
|
||||||
- return fd;
|
|
||||||
+ struct stat sb;
|
|
||||||
+ int maj, twelve=12;
|
|
||||||
+ struct serial_struct si;
|
|
||||||
+
|
|
||||||
+ fd = open(consolename, mode);
|
|
||||||
+ if (fd != -1) {
|
|
||||||
+ fstat(fd, &sb);
|
|
||||||
+ maj = major(sb.st_rdev);
|
|
||||||
+ if (maj != 4 && (maj < 136 || maj > 143)) {
|
|
||||||
+ if (ioctl (fd, TIOCLINUX, &twelve) < 0) {
|
|
||||||
+ if (ioctl (fd, TIOCGSERIAL, &si) >= 0) {
|
|
||||||
+ if (si.line > 0)
|
|
||||||
+ oops("we seem to be on a serial console");
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return fd;
|
|
||||||
+ } else
|
|
||||||
+ oops(consolename);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------*/
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -1,132 +0,0 @@
|
||||||
#include <string.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SYSMACROS_H
|
|
||||||
# include <sys/sysmacros.h>
|
|
||||||
#else
|
|
||||||
# define minor(dev) (((unsigned int) (dev)) >> 8)
|
|
||||||
# define major(dev) ((dev) & 0xff)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_LINUX_MAJOR_H
|
|
||||||
# include <linux/major.h>
|
|
||||||
#else
|
|
||||||
# ifndef TTY_MAJOR
|
|
||||||
# define TTY_MAJOR 4
|
|
||||||
# endif
|
|
||||||
# ifndef VCS_MAJOR
|
|
||||||
# define VCS_MAJOR 7
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gpmInt.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Arghhh. check_devfs was soo brain dead. We just need to determine
|
|
||||||
* whether or not we are using devfs. In that case we should do the
|
|
||||||
* nice thing and return a boolean value.
|
|
||||||
*
|
|
||||||
* To do this we check if the /dev/.devfsd file exists. If it does,
|
|
||||||
* then we are most likely running devfs. We should write another
|
|
||||||
* function which returns the /dev/XXX portion of the appropriate
|
|
||||||
* devices. This is a start and a building block for such a function.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int using_devfs( void ) {
|
|
||||||
struct stat devfs_node;
|
|
||||||
|
|
||||||
return (stat("/dev/.devfsd", (&devfs_node))
|
|
||||||
&& S_ISCHR(devfs_node.st_mode));
|
|
||||||
}
|
|
||||||
|
|
||||||
#define LOOP_SET_SUCCESS_MAJOR(var,dev_major,stat) \
|
|
||||||
do { \
|
|
||||||
for(i=0; var##_name[i] != NULL; i++) \
|
|
||||||
if (stat(var##_name[i], &buf) == 0 \
|
|
||||||
&& S_ISCHR(buf.st_mode) \
|
|
||||||
&& major(buf.st_rdev) == dev_major \
|
|
||||||
&& minor(buf.st_rdev) == 0) \
|
|
||||||
\
|
|
||||||
return var = var##_name[i]; \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
|
|
||||||
/* We may not be able to open the silly thing!!! */
|
|
||||||
|
|
||||||
const char * get_virtualconsole0( void ) {
|
|
||||||
static const char * const console_name[] = {
|
|
||||||
_PATH_TTY "0",
|
|
||||||
"/dev/tty0",
|
|
||||||
"/dev/vc/0",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
static const char * console = NULL;
|
|
||||||
struct stat buf;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (console)
|
|
||||||
return console;
|
|
||||||
|
|
||||||
LOOP_SET_SUCCESS_MAJOR(console,TTY_MAJOR,lstat);
|
|
||||||
|
|
||||||
/* If we failed as yet ... try again, this time with stat.
|
|
||||||
Someone is bound to leave a symlink around for compatiblity. */
|
|
||||||
|
|
||||||
LOOP_SET_SUCCESS_MAJOR(console,TTY_MAJOR,stat);
|
|
||||||
|
|
||||||
oops("Unable to determine virtual console device");
|
|
||||||
}
|
|
||||||
|
|
||||||
const char * get_virtualconsole_base( void ) {
|
|
||||||
static char * console_base = NULL;
|
|
||||||
|
|
||||||
if (console_base == NULL) {
|
|
||||||
console_base = strdup(get_virtualconsole0());
|
|
||||||
console_base[ strlen(console_base)-1 ] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
return console_base;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char * get_virtualscreen0( void ) {
|
|
||||||
static const char * const screen_name[] = {
|
|
||||||
"/dev/vcs",
|
|
||||||
"/dev/vcs0",
|
|
||||||
"/dev/vcc/0",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
static const char * screen = NULL;
|
|
||||||
struct stat buf;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (screen)
|
|
||||||
return screen;
|
|
||||||
|
|
||||||
LOOP_SET_SUCCESS_MAJOR(screen,VCS_MAJOR,lstat);
|
|
||||||
|
|
||||||
/* try again ... maybe there are others ... at least we can assume
|
|
||||||
some compatiblity from time to time... */
|
|
||||||
|
|
||||||
LOOP_SET_SUCCESS_MAJOR(screen,VCS_MAJOR,stat);
|
|
||||||
|
|
||||||
oops("Unable to determine virtual console screen device");
|
|
||||||
}
|
|
||||||
|
|
||||||
const char * get_virtualscreen_base( void ) {
|
|
||||||
static char * screen_base = NULL;
|
|
||||||
|
|
||||||
if (screen_base == NULL) {
|
|
||||||
screen_base = strdup(get_virtualscreen0());
|
|
||||||
if (using_devfs()
|
|
||||||
|| screen_base[ strlen(screen_base)-1 ] == '0')
|
|
||||||
screen_base[ strlen(screen_base)-1 ] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
return screen_base;
|
|
||||||
}
|
|
||||||
/* Local Variables: */
|
|
||||||
/* tab-width:8 */
|
|
||||||
/* c-indent-level:4 */
|
|
||||||
/* End: */
|
|
|
@ -1,6 +0,0 @@
|
||||||
#define TTY_NAME_MAX 32
|
|
||||||
|
|
||||||
const char * get_virtualconsole0( void );
|
|
||||||
const char * get_virtualconsole_base( void );
|
|
||||||
const char * get_virtualscreen0( void );
|
|
||||||
const char * get_virtualscreen_base( void );
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,213 +0,0 @@
|
||||||
From - Fri Jul 27 00:24:34 2001
|
|
||||||
Return-Path: <rubini@gnu.systemy.it>
|
|
||||||
Delivered-To: nico@schottelius.org
|
|
||||||
Received: (qmail 18456 invoked by uid 0); 4 Jul 2001 10:24:59 -0000
|
|
||||||
Received: from dns.pcsystems.de (HELO pcsystems.de) (217.89.38.234)
|
|
||||||
by dns.schottelius.org with SMTP; 4 Jul 2001 10:24:59 -0000
|
|
||||||
Received: (qmail 23917 invoked by uid 577); 4 Jul 2001 10:18:19 -0000
|
|
||||||
Delivered-To: nicos@pcsystems.de
|
|
||||||
Received: (qmail 23914 invoked by uid 0); 4 Jul 2001 10:18:18 -0000
|
|
||||||
Received: from unknown (HELO morgana.systemy.it) (194.20.140.51)
|
|
||||||
by dns.pcsystems.de with SMTP; 4 Jul 2001 10:18:18 -0000
|
|
||||||
Received: (from rubini@localhost)
|
|
||||||
by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) id MAA15398
|
|
||||||
for nicos@pcsystems.de; Wed, 4 Jul 2001 12:21:26 +0200
|
|
||||||
Received: from localhost (rubini@localhost [127.0.0.1])
|
|
||||||
by morgana.systemy.it (8.9.3/8.9.3/Debian/GNU) with ESMTP id TAA21587
|
|
||||||
for <rubini@morgana>; Fri, 29 Jun 2001 19:29:57 +0200
|
|
||||||
Received: from pop
|
|
||||||
by fetchmail-4.6.4 POP3
|
|
||||||
for <rubini@morgana> (single-drop); Fri, 29 Jun 2001 19:29:58 MEST
|
|
||||||
Received: from systemy.systemy.it (systemy.systemy.it [194.20.140.20]) by pop.systemy.it (8.8.8/8.8.3) with ESMTP id SAA13158 for <rubini@pop.systemy.it>; Fri, 29 Jun 2001 18:28:04 +0200
|
|
||||||
Received: from spock.linux.it (spock.linux.it [62.177.1.105] (may be forged))
|
|
||||||
by systemy.systemy.it (8.8.8/8.8.8) with ESMTP id QAA15187
|
|
||||||
for <rubini@systemy.it>; Fri, 29 Jun 2001 16:26:32 GMT
|
|
||||||
Received: from gateway.riverstone.com (unknown [206.31.85.126])
|
|
||||||
by spock.linux.it (Postfix) with ESMTP id 7CA5E196B9
|
|
||||||
for <rubini@linux.it>; Fri, 29 Jun 2001 18:26:28 +0200 (CEST)
|
|
||||||
Received: from ozemail.com.au (IDENT:steveb@ganges.riverstone.com [192.168.1.2])
|
|
||||||
by gateway.riverstone.com (8.9.3/8.8.7) with ESMTP id LAA28233
|
|
||||||
for <rubini@linux.it>; Fri, 29 Jun 2001 11:22:12 -0500
|
|
||||||
Sender: rubini@gnu.systemy.it
|
|
||||||
Message-ID: <3B3CABF1.D82BC05D@ozemail.com.au>
|
|
||||||
Date: Fri, 29 Jun 2001 11:25:21 -0500
|
|
||||||
From: Steve Bennett <msteveb@ozemail.com.au>
|
|
||||||
X-Mailer: Mozilla 4.61 [en] (X11; U; Linux 2.2.17-14smp i686)
|
|
||||||
X-Accept-Language: en
|
|
||||||
MIME-Version: 1.0
|
|
||||||
To: rubini@linux.it
|
|
||||||
Subject: Patch for gpm
|
|
||||||
Content-Type: multipart/mixed;
|
|
||||||
boundary="------------335CB4A2F62766DD7699430A"
|
|
||||||
X-Mozilla-Status: 8001
|
|
||||||
X-Mozilla-Status2: 00000000
|
|
||||||
X-UIDL: 994242300.18459.suppe
|
|
||||||
|
|
||||||
This is a multi-part message in MIME format.
|
|
||||||
--------------335CB4A2F62766DD7699430A
|
|
||||||
Content-Type: text/plain; charset=us-ascii
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
|
|
||||||
Hi,
|
|
||||||
|
|
||||||
Are you the maintainer for gpm?
|
|
||||||
I have a patch which you may be interested in including in the next version.
|
|
||||||
I use a laptop which has a builtin touchpad which emulates a standard PS/2
|
|
||||||
mouse, but when I'm not on the road, I use an Intellimouse PS/2 mouse. The
|
|
||||||
problem is that I have to reconfigure the mouse each time I switch.
|
|
||||||
With this patch, gpm mouse type "imps2" will auto-detect whether the type is
|
|
||||||
imps2 or ps2.
|
|
||||||
|
|
||||||
The patch is against an older version (1.17.9), but I could update it to be
|
|
||||||
against the latest version if necessary.
|
|
||||||
|
|
||||||
Cheers,
|
|
||||||
Steve
|
|
||||||
|
|
||||||
--
|
|
||||||
Steve Bennett
|
|
||||||
Email: msteveb@ozemail.com.au
|
|
||||||
Web: http://members.ozemail.com.au/~msteveb/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--------------335CB4A2F62766DD7699430A
|
|
||||||
Content-Type: text/plain; charset=us-ascii;
|
|
||||||
name="gpm-imps2-detect.patch"
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
Content-Disposition: inline;
|
|
||||||
filename="gpm-imps2-detect.patch"
|
|
||||||
|
|
||||||
diff -u gpm-1.17.9/mice.c
|
|
||||||
--- gpm-1.17.9/mice.c.orig
|
|
||||||
+++ gpm-1.17.9/mice.c Mon Jun 25 13:17:49 2001
|
|
||||||
@@ -57,6 +57,7 @@
|
|
||||||
|
|
||||||
#include <linux/kdev_t.h> /* MAJOR */
|
|
||||||
#include <linux/keyboard.h>
|
|
||||||
+#include <linux/pc_keyb.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_LINUX_JOYSTICK_H
|
|
||||||
#include <linux/joystick.h>
|
|
||||||
@@ -1147,17 +1148,109 @@
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
-/* intellimouse, ps2 version: Ben Pfaff and Colin Plumb */
|
|
||||||
-static Gpm_Type *I_imps2(int fd, unsigned short flags, struct Gpm_Type *type)
|
|
||||||
+#define AUX_SEND_ID 0xF2
|
|
||||||
+#define AUX_ID_ERROR -1
|
|
||||||
+#define AUX_ID_PS2 0
|
|
||||||
+#define AUX_ID_IMPS2 3
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * Sends the SEND_ID command to the mouse.
|
|
||||||
+ * Return one of AUX_ID_...
|
|
||||||
+ */
|
|
||||||
+static int read_mouse_id(int fd)
|
|
||||||
{
|
|
||||||
- static unsigned char s1[] = { 243, 200, 243, 100, 243, 80, };
|
|
||||||
- static unsigned char s2[] = { 246, 230, 244, 243, 100, 232, 3, };
|
|
||||||
- write (fd, s1, sizeof (s1));
|
|
||||||
- usleep (30000);
|
|
||||||
- write (fd, s2, sizeof (s2));
|
|
||||||
+ unsigned char c = AUX_SEND_ID;
|
|
||||||
+ unsigned char id;
|
|
||||||
+
|
|
||||||
+ write(fd, &c, 1);
|
|
||||||
+ read(fd, &c, 1);
|
|
||||||
+ if (c != AUX_ACK) {
|
|
||||||
+ return(-1);
|
|
||||||
+ }
|
|
||||||
+ read(fd, &id, 1);
|
|
||||||
+
|
|
||||||
+#ifdef DEBUG
|
|
||||||
+ fprintf(stderr, "Returning mouse id %d (ack=%d)\n", id, c);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+ return(id);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int write_to_mouse(int fd, unsigned char *data, size_t len)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ int error = 0;
|
|
||||||
+ for (i = 0; i < len; i++) {
|
|
||||||
+ unsigned char c;
|
|
||||||
+ write(fd, &data[i], 1);
|
|
||||||
+ read(fd, &c, 1);
|
|
||||||
+#ifdef DEBUG
|
|
||||||
+ fprintf(stderr, "Wrote: %02X, Read: %02X\n", data[i], c);
|
|
||||||
+#endif
|
|
||||||
+ if (c != AUX_ACK) {
|
|
||||||
+ error++;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
usleep (30000);
|
|
||||||
tcflush (fd, TCIFLUSH);
|
|
||||||
- return type;
|
|
||||||
+ return(error);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* intellimouse, ps2 version: Ben Pfaff and Colin Plumb */
|
|
||||||
+static Gpm_Type *I_imps2(int fd, unsigned short flags, struct Gpm_Type *type)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ int id;
|
|
||||||
+ static unsigned char basic_init[] = { AUX_ENABLE_DEV, AUX_SET_SAMPLE, 100 };
|
|
||||||
+ static unsigned char imps2_init[] = { AUX_SET_SAMPLE, 200, AUX_SET_SAMPLE, 100, AUX_SET_SAMPLE, 80, };
|
|
||||||
+ static unsigned char ps2_init[] = { AUX_SET_SCALE11, AUX_ENABLE_DEV, AUX_SET_SAMPLE, 100, AUX_SET_RES, 3, };
|
|
||||||
+
|
|
||||||
+ /* Do a basic init in case the mouse is confused */
|
|
||||||
+ write_to_mouse(fd, basic_init, sizeof (basic_init));
|
|
||||||
+
|
|
||||||
+ /* Now try again and make sure we have a PS/2 mouse */
|
|
||||||
+ if (write_to_mouse(fd, basic_init, sizeof (basic_init)) != 0) {
|
|
||||||
+ gpm_debug_log(LOG_ERR, "imps2: PS/2 mouse failed init");
|
|
||||||
+ return(NULL);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Now try to switch to 3 button mode */
|
|
||||||
+ if (write_to_mouse(fd, imps2_init, sizeof (imps2_init)) != 0) {
|
|
||||||
+ gpm_debug_log(LOG_ERR, "imps2: PS/2 mouse failed (3 button) init");
|
|
||||||
+ return(NULL);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Now read the mouse id */
|
|
||||||
+ id = read_mouse_id(fd);
|
|
||||||
+ if (id == AUX_ID_ERROR) {
|
|
||||||
+ gpm_debug_log(LOG_ERR, "imps2: PS/2 mouse failed to read id");
|
|
||||||
+ return(NULL);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* And do the real initialisation */
|
|
||||||
+ if (write_to_mouse(fd, ps2_init, sizeof (ps2_init)) != 0) {
|
|
||||||
+ gpm_debug_log(LOG_ERR, "imps2: PS/2 mouse failed setup");
|
|
||||||
+ return(NULL);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (id == AUX_ID_IMPS2) {
|
|
||||||
+ /* Really an intellipoint, so initialise 3 button mode (4 byte packets) */
|
|
||||||
+ gpm_debug_log(LOG_NOTICE, "imps2: Auto-detected intellimouse PS/2");
|
|
||||||
+
|
|
||||||
+ return type;
|
|
||||||
+ }
|
|
||||||
+ if (id == AUX_ID_PS2) {
|
|
||||||
+ gpm_debug_log(LOG_NOTICE, "imps2: Auto-detected standard PS/2");
|
|
||||||
+ for (type=mice; type->fun; type++) {
|
|
||||||
+ if (strcmp(type->name, "ps2") == 0) {
|
|
||||||
+ return(type);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ /* ps2 was not found!!! */
|
|
||||||
+ return(NULL);
|
|
||||||
+ }
|
|
||||||
+ gpm_debug_log(LOG_ERR, "imps2: Auto-detected unknown mouse type");
|
|
||||||
+ return(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Gpm_Type *I_twid(int fd, unsigned short flags, struct Gpm_Type *type)
|
|
||||||
|
|
||||||
--------------335CB4A2F62766DD7699430A--
|
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue