update gpm website

Signed-off-by: Nico Schottelius <nico@brief.schottelius.org>
This commit is contained in:
Nico Schottelius 2012-10-26 19:25:59 +02:00
parent faaa2d2448
commit 57066ac67e
5811 changed files with 11 additions and 752922 deletions

View File

@ -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
### git
Currently the best way to get gpm is via git:
You can browse the [static archives](archives) or use git:
git-clone git://git.schottelius.org/gpm
* Alternate clone URLs:
* http://git.schottelius.org/gpm (plain http instead of git://)
* 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.
The archives are also mirrored at
[ar.linux.it](http://www.ar.linux.it/pub/gpm/).
## Support
### IRC
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".
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.
For example:
echo subscribe | mail gpm-request@lists.linux.it
The mailing list archive can be found at
<A
HREF="http://lists.linux.it/pipermail/gpm/">http://lists.linux.it/pipermail/gpm/</A>
Or you can browse the
[mailing list archive](http://lists.linux.it/pipermail/gpm/).
#### Commits mailinglist
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/)
[[!tag gpm unix]]

View File

@ -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

View File

@ -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?
[...]
/*============================================================================*/

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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@

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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"
}

View File

@ -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

View File

@ -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....

View File

@ -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)

View File

@ -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

View File

@ -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))))
)

View File

@ -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

View File

@ -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 $?

View File

@ -1,4 +0,0 @@
Have a look into MANIFEST for more informations.
README - this file
TPdetect.cc - sample TP detection

View File

@ -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);
}

View File

@ -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 &ndash; Standard toknapps Microsoft Mouse
MSH0002 &ndash; Microsoft Wheel Mouse
MSH0005 &ndash; 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;
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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 $@

View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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).

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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/

View File

@ -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

View File

@ -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".

View File

@ -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.

View File

@ -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).

View File

@ -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

View File

@ -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

View File

@ -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}

View File

@ -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 }

View File

@ -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...

View File

@ -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#>>

View File

@ -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#>>

View File

@ -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#>>

View File

@ -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

View File

@ -1 +0,0 @@
Didn't get any answer from <yokota@zodiac.mech.utsunomiya-u.ac.jp>.

View File

@ -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

View File

@ -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]))
])

View File

@ -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])
])

View File

@ -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
])

View File

@ -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>

View File

@ -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);

View File

@ -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:

View File

@ -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)

View File

@ -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;

View File

@ -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}

View File

@ -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

View File

@ -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);
}
/*-------------------------------------------------------------------*/

View File

@ -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: */

View File

@ -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 );

View File

@ -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