version 0.2.4
authorMats Johannesson <devel@bredband.net>
Thu, 26 Jun 2008 18:41:33 +0000 (14:41 -0400)
committerAristeu Rozanski <arozansk@redhat.com>
Thu, 26 Jun 2008 18:41:33 +0000 (14:41 -0400)
* Began code transfer/reuse from src-expresskeys to src-expresskeysconf
as a scaffold for some kind of graphical utility. Long way to go...

* Explained the X "xev" program and keycodes a little better in
the USAGE file.

* Put a warning regarding the X program "xmodmap" in the BUGS and
in the USAGE file.

* Cleaned up gcc warnings on a x86_64 system.

_Data Type Sizes (for my own reference)_

Type x86 x86_64

char 8 8
short 16 16
int 32 32
long 32 64
long long 64 64
float 32 32
double 64 64
long double 96 128
void* 32 64

In short, a programmer should NOT assume that:
sizeof(int) == sizeof(long) == sizeof(void*)

29 files changed:
BUGS
ChangeLog
Makefile.in
NEWS
TODO
USAGE
aclocal.m4
depcomp
install-sh
missing
old-extra/Makefile-expresskeysconf
old-extra/Makefile-top
src-expresskeys/Makefile.in
src-expresskeys/config_read.c
src-expresskeys/config_write.c
src-expresskeys/get_device.c
src-expresskeys/globals.c
src-expresskeys/globals.h
src-expresskeys/main_setup.c
src-expresskeysconf/Makefile.am
src-expresskeysconf/Makefile.in
src-expresskeysconf/config_read-conf.c [new file with mode: 0644]
src-expresskeysconf/event_loop-conf.c [new file with mode: 0644]
src-expresskeysconf/globals-conf.c [new file with mode: 0644]
src-expresskeysconf/globals-conf.h [new file with mode: 0644]
src-expresskeysconf/main_dummy.c [deleted file]
src-expresskeysconf/main_setup-conf.c [new file with mode: 0644]
src-expresskeysconf/on_error-conf.c [new file with mode: 0644]
src-expresskeysconf/on_signal-conf.c [new file with mode: 0644]

diff --git a/BUGS b/BUGS
index cab9aa8..4e67ffd 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -21,6 +21,17 @@ button 1 or react to mouse button 2 and 3 presses until the Wacom stylus
 has come into proximity for the first time. After the first proximity,
 the mouse and puck react normally. Strange...
 
+! If the expresskeys program is started before any usage of the
+X program "xmodmap" in eg .xinitrc, it can crash with the message:
+
+X Error of failed request:  BadWindow (invalid Window parameter)
+  Major opcode of failed request:  15 (X_QueryTree)
+  Resource id in failed request:  0x1
+  Serial number of failed request:  20
+  Current serial number in output stream:  20
+
+Reason, totally unknown...
+
 _Known bugs, unmarked_
 
 ! Should check that only valid keycodes (and our fake ones) are used
index 07e1d25..f002dd1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,35 @@
 
+_Version 0.2.4 23 Aug 2005_
+
+* Began code transfer/reuse from src-expresskeys to src-expresskeysconf
+as a scaffold for some kind of graphical utility. Long way to go...
+
+* Explained the X "xev" program and keycodes a little better in
+the USAGE file.
+
+* Put a warning regarding the X program "xmodmap" in the BUGS and
+in the USAGE file.
+
+* Cleaned up gcc warnings on a x86_64 system.
+
+_Data Type Sizes (for my own reference)_
+
+Type           x86     x86_64
+
+char           8       8
+short          16      16
+int            32      32
+long           32      64
+long long      64      64
+float          32      32
+double         64      64
+long double    96      128
+void*          32      64
+
+In short, a programmer should NOT assume that:
+sizeof(int) == sizeof(long) == sizeof(void*)
+
+
 _Version 0.2.3 13 May 2005_
 
 * The project now uses the GNU Autotools to:
index 66767b3..4dd22c6 100644 (file)
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.3 from Makefile.am.
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004  Free Software Foundation, Inc.
+# 2003, 2004, 2005  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -208,7 +208,13 @@ uninstall-info-am:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-       @set fnord $$MAKEFLAGS; amf=$$2; \
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
        list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -220,7 +226,7 @@ $(RECURSIVE_TARGETS):
            local_target="$$target"; \
          fi; \
          (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+         || eval $$failcom; \
        done; \
        if test "$$dot_seen" = "no"; then \
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
@@ -228,7 +234,13 @@ $(RECURSIVE_TARGETS):
 
 mostlyclean-recursive clean-recursive distclean-recursive \
 maintainer-clean-recursive:
-       @set fnord $$MAKEFLAGS; amf=$$2; \
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
        dot_seen=no; \
        case "$@" in \
          distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@@ -249,7 +261,7 @@ maintainer-clean-recursive:
            local_target="$$target"; \
          fi; \
          (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+         || eval $$failcom; \
        done && test -z "$$fail"
 tags-recursive:
        list='$(SUBDIRS)'; for subdir in $$list; do \
diff --git a/NEWS b/NEWS
index 365c2f9..757b6ee 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,5 @@
 
 _Changes since last version. Executive summary_
 
-- The project now uses the GNU Autotools.
+- Cleaned up gcc warnings on a x86_64 system.
 
diff --git a/TODO b/TODO
index 9188ee6..22d6ac2 100644 (file)
--- a/TODO
+++ b/TODO
@@ -8,5 +8,3 @@ in the class name as well when user clicks on a window.
 
 + Replace ASCII with something more international, like UTF-8.
 
-+ Make the code 64-bit clean.
-
diff --git a/USAGE b/USAGE
index 3547169..d68306d 100644 (file)
--- a/USAGE
+++ b/USAGE
@@ -43,6 +43,10 @@ The names are the "Identifier" strings in your X config file (xorg.conf)
 Myself I start expresskeys just before the window manager in my 
 .xinitrc with: /usr/local/bin/expresskeys pad stylus -d
 
+OBS! I just found out that it should be started AFTER any usage of
+the X program "xmodmap", else expresskeys could crash. Reason unknown.
+See the BUGS file for further info.
+
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 * A minimal configuration file is written on first run to the user home
@@ -72,6 +76,104 @@ a pid-file from a daemon instance is present.
 
 * Use the X program "xev" to find keycodes when changing the configuration.
 
+Since I've received a request for an explanation, I'll quote the reply:
+
+--Begin Letter--
+
+> I'm using your expresskeys for my intous3 but I'm
+> a linux newbie and now I'm a bit confused, what is
+> the right keycode or config for the arrow key.
+>
+> I want Space on 12
+> Left arrow on 9
+> Right arrow on 10
+
+Keycodes are both confusing and simple, at the same time ;-) They are
+different depending on your language and keyboard design, and also
+different if you are in X or not, but share some common details.
+
+To find how they are organized on your own keyboard, you must use a
+program. First (if you are in X as you should be) open a terminal. The
+only one I have per default is "xterm" since I don't use gnome or kde or
+anything like that, where a terminal window can be called just
+"terminal"... Other standalone terminals are "aterm", "rxvt", "eterm"
+etc.
+
+Now start a program from within the open terminal. One that _must_ be
+present on your system (I think) is "xev". It comes as standard with X.
+When you start xev it spawns another window (small white square) and
+spits out a lot of info in the terminal window. You must move the mouse
+pointer to the square window before doing any key presses.
+
+Ok, now I'll press Space, Left Arrow and Right Arrow:
+
+KeyPress event, serial 27, synthetic NO, window 0x1200001,
+    root 0x115, subw 0x0, time 5261195, (128,125), root:(138,145),
+    state 0x0, keycode 65 (keysym 0x20, space), same_screen YES,
+    XLookupString gives 1 bytes: (20) " "
+    XmbLookupString gives 1 bytes: (20) " "
+    XFilterEvent returns: False
+
+The important information here is the "keycode 65 (keysym 0x20, space)".
+There will be another information dump when you release the space key,
+called KeyRelease.
+
+So on my Swedish keyboard, X uses the keycode 65 to represent the
+spacebar. Ok, here's Left Arrow:
+
+KeyPress event, serial 27, synthetic NO, window 0x1200001,
+    root 0x115, subw 0x0, time 5281166, (128,125), root:(138,145),
+    state 0x0, keycode 100 (keysym 0xff51, Left), same_screen YES,
+    XLookupString gives 0 bytes: 
+    XmbLookupString gives 0 bytes: 
+    XFilterEvent returns: False
+
+Keycode is 100 here. Let's go to Right Arrow:
+
+KeyPress event, serial 27, synthetic NO, window 0x1200001,
+    root 0x115, subw 0x0, time 5283438, (128,125), root:(138,145),
+    state 0x0, keycode 102 (keysym 0xff53, Right), same_screen YES,
+    XLookupString gives 0 bytes: 
+    XmbLookupString gives 0 bytes: 
+    XFilterEvent returns: False
+
+So it's 102. When you are finished looking for the keycodes, give the
+terminal window focus (place the mouse cursor there or whatever) and
+press Ctrl-c (you can also click on the close button of the white square
+window).
+
+That's how it looks on this Swedish keyboard. Now open the expresskeys
+configuration file with any editor. The location is a hidden directory
+in your home directory. Here's mine:
+
+/home/loke/.expresskeys/expresskeys.conf
+
+Replace the keycodes in the section you are interested in, I'd do:
+
+10 Left Pad - Button 9:         100     # Button 9 Left Arrow
+11 Left Pad - Button 9 Plus:    0       # Extra key
+
+12 Left Pad - Button 10:        102     # Button 10 Right Arrow
+13 Left Pad - Button 10 Plus:   0       # Extra key
+
+14 Left Pad - Button 11:        37      # Button 11
+15 Left Pad - Button 11 Plus:   0       # Extra key
+
+16 Left Pad - Button 12:        65      # Button 12 Space (was default)
+17 Left Pad - Button 12 Plus:   0       # Extra key
+
+Save the file and read in the new values with the shell script I
+supplied (expresskeys-reread.sh)
+
+The extra key are for when you want two keys pressed. First the normal,
+then the extra, like Ctrl-s or so. I've been informed that a US keyboard
+doesn't have a single + key, it's shifted on their = key. So they must
+use Shift-= in the expresskeys gimp section to zoom in, thereby wasting
+the extra key. A workaround is to configure gimp itself to zoom by the =
+key instead of +.
+
+--End Letter--
+
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 * Use the X program "xprop" to find the name string to use when changing
index bd284f0..2b84dd9 100644 (file)
@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.9.3 -*- Autoconf -*-
+# generated automatically by aclocal 1.9.5 -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-# Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005  Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-#                                                        -*- Autoconf -*-
-# Copyright (C) 2002, 2003  Free Software Foundation, Inc.
-# Generated from amversion.in; do not edit by hand.
-
-# 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
@@ -40,26 +28,15 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
 # Call AM_AUTOMAKE_VERSION so it can be traced.
 # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-        [AM_AUTOMAKE_VERSION([1.9.3])])
-
-# AM_AUX_DIR_EXPAND
-
-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+        [AM_AUTOMAKE_VERSION([1.9.5])])
 
-# 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, or (at your option)
-# any later version.
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
 # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
@@ -106,26 +83,16 @@ AC_PREREQ([2.50])dnl
 am_aux_dir=`cd $ac_aux_dir && pwd`
 ])
 
-# AM_CONDITIONAL                                              -*- Autoconf -*-
+# AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# serial 6
+# serial 7
 
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
@@ -149,26 +116,15 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# serial 7                                             -*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
 # Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# This program is 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
+# serial 8
 
 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
@@ -177,7 +133,6 @@ fi])])
 # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
 
 
-
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
@@ -317,27 +272,16 @@ AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
 AC_SUBST([AMDEPBACKSLASH])
 ])
 
-# Generate code to set up dependency tracking.   -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
-#   Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-#serial 2
+#serial 3
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
@@ -396,54 +340,31 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
      [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
 ])
 
-# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# serial 7
+# serial 8
 
 # AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
 AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
 
-# Do all the work for Automake.                            -*- Autoconf -*-
-
-# This macro actually does too much some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
+# Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
 # Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# This program is 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# serial 12
 
-# serial 11
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
 
 # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
 # AM_INIT_AUTOMAKE([OPTIONS])
@@ -545,51 +466,27 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
 
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
-
-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
 AC_DEFUN([AM_PROG_INSTALL_SH],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 install_sh=${install_sh-"$am_aux_dir/install-sh"}
 AC_SUBST(install_sh)])
 
-#                                                          -*- Autoconf -*-
-# Copyright (C) 2003  Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# serial 1
+# serial 2
 
 # Check whether the underlying file-system supports filenames
 # with a leading dot.  For instance MS-DOS doesn't.
@@ -604,28 +501,17 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Add --enable-maintainer-mode option to configure.
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
 # Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# This program is 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-# serial 3
+# serial 4
 
 AC_DEFUN([AM_MAINTAINER_MODE],
 [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
@@ -644,26 +530,15 @@ AC_DEFUN([AM_MAINTAINER_MODE],
 
 AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
 
-# Check to see how 'make' treats includes.     -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # AM_MAKE_INCLUDE()
 # -----------------
@@ -707,27 +582,16 @@ AC_MSG_RESULT([$_am_result])
 rm -f confinc confmf
 ])
 
-#  -*- Autoconf -*-
-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# serial 3
+# serial 4
 
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
@@ -753,27 +617,16 @@ else
 fi
 ])
 
+# Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
 # AM_PROG_MKDIR_P
 # ---------------
 # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
-
-# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
+#
 # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
 # created by `make install' are always world readable, even if the
 # installer happens to have an overly restrictive umask (e.g. 077).
@@ -827,26 +680,15 @@ else
 fi
 AC_SUBST([mkdir_p])])
 
-# Helper functions for option handling.                    -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003  Free Software Foundation, Inc.
+# Helper functions for option handling.                     -*- Autoconf -*-
 
-# 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
@@ -871,28 +713,16 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-#
-# Check to make sure that the build environment is sane.
-#
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-# serial 3
+# serial 4
 
 # AM_SANITY_CHECK
 # ---------------
@@ -935,25 +765,14 @@ Check your system clock])
 fi
 AC_MSG_RESULT(yes)])
 
-# AM_PROG_INSTALL_STRIP
-
-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
+# AM_PROG_INSTALL_STRIP
+# ---------------------
 # One issue with vendor `install' (even GNU) is that you can't
 # specify the program used to strip binaries.  This is especially
 # annoying in cross-compiling environments, where the build's strip
@@ -976,25 +795,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004  Free Software Foundation, Inc.
-
-# 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, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-# serial 1
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
+# serial 2
 
 # _AM_PROG_TAR(FORMAT)
 # --------------------
diff --git a/depcomp b/depcomp
index 11e2d3b..ffcd540 100755 (executable)
--- a/depcomp
+++ b/depcomp
@@ -1,9 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2004-05-31.23
+scriptversion=2005-02-09.22
 
-# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 # 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
@@ -50,11 +50,11 @@ Environment variables:
 
 Report bugs to <bug-automake@gnu.org>.
 EOF
-    exit 0
+    exit $?
     ;;
   -v | --v*)
     echo "depcomp $scriptversion"
-    exit 0
+    exit $?
     ;;
 esac
 
@@ -287,36 +287,43 @@ tru64)
    base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
 
    if test "$libtool" = yes; then
-      # Dependencies are output in .lo.d with libtool 1.4.
-      # With libtool 1.5 they are output both in $dir.libs/$base.o.d
-      # and in $dir.libs/$base.o.d and $dir$base.o.d.  We process the
-      # latter, because the former will be cleaned when $dir.libs is
-      # erased.
-      tmpdepfile1="$dir.libs/$base.lo.d"
-      tmpdepfile2="$dir$base.o.d"
-      tmpdepfile3="$dir.libs/$base.d"
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mecanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
       "$@" -Wc,-MD
    else
-      tmpdepfile1="$dir$base.o.d"
-      tmpdepfile2="$dir$base.d"
-      tmpdepfile3="$dir$base.d"
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
       "$@" -MD
    fi
 
    stat=$?
    if test $stat -eq 0; then :
    else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
       exit $stat
    fi
 
-   if test -f "$tmpdepfile1"; then
-      tmpdepfile="$tmpdepfile1"
-   elif test -f "$tmpdepfile2"; then
-      tmpdepfile="$tmpdepfile2"
-   else
-      tmpdepfile="$tmpdepfile3"
-   fi
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
    if test -f "$tmpdepfile"; then
       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
       # That's a tab and a space in the [].
index 0b65ee8..1a83534 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2004-10-22.00
+scriptversion=2005-02-02.21
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -109,7 +109,7 @@ while test -n "$1"; do
         shift
         continue;;
 
-    --help) echo "$usage"; exit 0;;
+    --help) echo "$usage"; exit $?;;
 
     -m) chmodcmd="$chmodprog $2"
         shift
@@ -134,7 +134,7 @@ while test -n "$1"; do
        shift
        continue;;
 
-    --version) echo "$0 $scriptversion"; exit 0;;
+    --version) echo "$0 $scriptversion"; exit $?;;
 
     *)  # When -d is used, all remaining arguments are directories to create.
        # When -t is used, the destination is already specified.
@@ -296,7 +296,7 @@ do
               || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
               || {
                 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
-                (exit 1); exit
+                (exit 1); exit 1
               }
             else
               :
@@ -307,12 +307,12 @@ do
           $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
         }
     }
-  fi || { (exit 1); exit; }
+  fi || { (exit 1); exit 1; }
 done
 
 # The final little trick to "correctly" pass the exit status to the exit trap.
 {
-  (exit 0); exit
+  (exit 0); exit 0
 }
 
 # Local variables:
diff --git a/missing b/missing
index 64b5f90..09edd88 100755 (executable)
--- a/missing
+++ b/missing
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2004-09-07.08
+scriptversion=2005-02-08.22
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
 #   Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
@@ -87,12 +87,12 @@ Supported PROGRAM values:
   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
 
 Send bug reports to <bug-automake@gnu.org>."
-    exit 0
+    exit $?
     ;;
 
   -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
     echo "missing $scriptversion (GNU Automake)"
-    exit 0
+    exit $?
     ;;
 
   -*)
@@ -288,10 +288,14 @@ WARNING: \`$1' is $msg.  You should only need it if
          call might also be the consequence of using a buggy \`make' (AIX,
          DU, IRIX).  You might want to install the \`Texinfo' package or
          the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
     file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
     if test -z "$file"; then
-      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
     fi
     touch $file
     ;;
index 5c48663..a69f938 100644 (file)
@@ -8,7 +8,8 @@ LIBS = -lX11
 
 TARGET = expresskeysconf
 
-SRCS = main_dummy.c
+SRCS = globals-conf.c config_read-conf.c on_error-conf.c on_signal-conf.c \
+       event_loop-conf.c main_setup-conf.c
 
 OBJS = $(SRCS:.c=.o)
 ALL =  $(SRCS)
index d4f5a3e..288db46 100644 (file)
@@ -1,10 +1,10 @@
 
 all:
-       $(MAKE) -C src-expresskeys
-       mv src-expresskeys/expresskeys .
+#      $(MAKE) -C src-expresskeys
+#      mv src-expresskeys/expresskeys .
 
-#      $(MAKE) -C src-expresskeysconf
-#      mv src-expresskeysconf/expresskeysconf .
+       $(MAKE) -C src-expresskeysconf
+       mv src-expresskeysconf/expresskeysconf .
 clean:
        rm -f expresskeys expresskeysconf src-expresskeys/*.o src-expresskeysconf/*.o
 
index 1595679..6ed00ca 100644 (file)
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.3 from Makefile.am.
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004  Free Software Foundation, Inc.
+# 2003, 2004, 2005  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
index 058f392..4450dac 100644 (file)
@@ -31,7 +31,9 @@ int read_file_config(int *ip, FILE *fp)
 {
 
        struct program *p;
-       p = (void *)*ip;
+       
+       /* Convert to long for x86_64 systems */
+       p = (void *)(long)*ip;
 
        int i;
        int num_record = 0;
@@ -52,7 +54,8 @@ int read_file_config(int *ip, FILE *fp)
                for (i = 0; i < num_list; i++, p++) {
                        free(p->class_name);
                }
-               p = (void *)*ip;
+               /* Convert to long for x86_64 systems */
+               p = (void *)(long)*ip;
        }
        reread_config = 1;
        num_list = 0;
index e635c8b..eb9dd01 100644 (file)
@@ -79,7 +79,9 @@ int write_file_config(int *ip, FILE *fp)
 {
 
        struct program *p;
-       p = (void *)*ip;
+       
+       /* Convert to long for x86_64 systems */
+       p = (void *)(long)*ip;
 
        fprintf(fp, "%s                         # <--- Begin New Program Record\n\n", "%%");
        fprintf(fp, "00 Program Name: \"%s\"    # Name must be within double quotes \"\"\n", p->class_name);
index 342297a..043b71a 100644 (file)
@@ -29,7 +29,8 @@
  permanent global copy for freeing at program exit
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
 
-int get_device_info(Display *display, XDeviceInfo *info, char *name)
+/* get_device_info returns a long to satisfy x86_64 systems */
+long get_device_info(Display *display, XDeviceInfo *info, char *name)
 {
        int             i;
        int             nr_devices;
@@ -45,7 +46,8 @@ int get_device_info(Display *display, XDeviceInfo *info, char *name)
        for(i = 0; i < nr_devices; i++) {
                if ((info[i].use == IsXExtensionDevice) &&
                (strcmp (info[i].name, name) == 0)) {
-                       return (int) &info[i];
+                       /* Convert to long for x86_64 systems */
+                       return (long) &info[i];
                }
        }
        return 0;
index 5297d97..fe171bc 100644 (file)
@@ -29,7 +29,7 @@ XDevice *pad_device;
 XDevice *pen_device;
 
 char *our_prog_name;
-char *our_prog_version = "0.2.3"; /* Our version. Remember to change it! */
+char *our_prog_version = "0.2.4"; /* Our version. Remember to change it! */
 char *pen_name;
 char *total_config_dir;
 char *total_config_file;
index 6c1568b..688711d 100644 (file)
@@ -107,7 +107,8 @@ extern XDevice *pen_device; /* The actual pointer to the pen device */
 extern int write_file_config_header(FILE *fp);
 extern int write_file_config(int *ip, FILE *fp);
 extern int read_file_config(int *ip, FILE *fp);
-extern int get_device_info(Display *display, XDeviceInfo *info, char *name);
+/* get_device_info returns a long to satisfy x86_64 systems */
+extern long get_device_info(Display *display, XDeviceInfo *info, char *name);
 extern int register_events(Display *display, XDeviceInfo *pad_info, char *name);
 extern int toggle_pen_mode(Display *display, char *name);
 extern int use_events(Display *display);
index 581d4e8..e7eb2d1 100644 (file)
@@ -37,7 +37,6 @@ int main (int argc, char *argv[])
 
        if ((display = XOpenDisplay(NULL)) == NULL) {
                exit_on_error(errorfp, "%s ERROR: Can not connect to your X Server\n", our_prog_name, "");
-               exit(EXIT_KO); 
        }
        screen = DefaultScreen(display);
 
@@ -55,7 +54,7 @@ int main (int argc, char *argv[])
        char *total_config_dir_block;
        len = strlen(user_homedir) + strlen(config_dir) + 1;
        if ((total_config_dir_block = (char *)malloc(len)) == NULL) {
-               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 2!\n", our_prog_name, "");
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 1!\n", our_prog_name, "");
        }
        sprintf(total_config_dir_block, "%s%s", user_homedir, config_dir);
        total_config_dir = total_config_dir_block;
@@ -65,7 +64,7 @@ int main (int argc, char *argv[])
        char *total_config_file_block;
        len = strlen(total_config_dir) + strlen(config_file) + 1;
        if ((total_config_file_block = (char *)malloc(len)) == NULL) {
-               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 3!\n", our_prog_name, "");
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 2!\n", our_prog_name, "");
        }
        sprintf(total_config_file_block, "%s%s", total_config_dir, config_file);
        total_config_file = total_config_file_block;
@@ -75,7 +74,7 @@ int main (int argc, char *argv[])
        char *total_pid_file_block;
        len = strlen(total_config_dir) + strlen(pid_file) + 1;
        if ((total_pid_file_block = (char *)malloc(len)) == NULL) {
-               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 4!\n", our_prog_name, "");
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 3!\n", our_prog_name, "");
        }
        sprintf(total_pid_file_block, "%s%s", total_config_dir, pid_file);
        total_pid_file = total_pid_file_block;
@@ -85,7 +84,7 @@ int main (int argc, char *argv[])
        char *total_error_file_block;
        len = strlen(total_config_dir) + strlen(error_file) + 1;
        if ((total_error_file_block = (char *)malloc(len)) == NULL) {
-               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 5!\n", our_prog_name, "");
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 4!\n", our_prog_name, "");
        }
        sprintf(total_error_file_block, "%s%s", total_config_dir, error_file);
        total_error_file = total_error_file_block;
@@ -202,6 +201,7 @@ int main (int argc, char *argv[])
        }
 
        if (be_verbose) {
+               fprintf(stderr, "PGR VERSION = %s\n", our_prog_version);
                fprintf(stderr, "USR HOMEDIR = %s\n", user_homedir);
                fprintf(stderr, "OUR CNF-DIR = %s\n", total_config_dir);
                fprintf(stderr, "OUR CNFFILE = %s\n", total_config_file);
@@ -316,7 +316,7 @@ int main (int argc, char *argv[])
                exit_on_error(errorfp, "%s ERROR: Could not register any events!\n", our_prog_name, "");
        }
 
-       exit(EXIT_OK);
+       exit(EXIT_OK); /* We should never reach this */
 
 }
 
index 6efaa0f..1302f5f 100644 (file)
@@ -4,7 +4,8 @@ AM_CFLAGS = -Wall
 
 bin_PROGRAMS = expresskeysconf
 
-expresskeysconf_SOURCES = main_dummy.c
+expresskeysconf_SOURCES = main_setup-conf.c globals-conf.c globals-conf.h \
+       config_read-conf.c on_error-conf.c on_signal-conf.c event_loop-conf.c
 
 expresskeysconf_LDFLAGS = @EXPRESSKEYSCONF_LIBS@
 
index a1e7e2e..a1766a3 100644 (file)
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.3 from Makefile.am.
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004  Free Software Foundation, Inc.
+# 2003, 2004, 2005  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -49,7 +49,10 @@ CONFIG_CLEAN_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
-am_expresskeysconf_OBJECTS = main_dummy.$(OBJEXT)
+am_expresskeysconf_OBJECTS = main_setup-conf.$(OBJEXT) \
+       globals-conf.$(OBJEXT) config_read-conf.$(OBJEXT) \
+       on_error-conf.$(OBJEXT) on_signal-conf.$(OBJEXT) \
+       event_loop-conf.$(OBJEXT)
 expresskeysconf_OBJECTS = $(am_expresskeysconf_OBJECTS)
 expresskeysconf_LDADD = $(LDADD)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
@@ -140,7 +143,9 @@ sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
 AM_CFLAGS = -Wall
-expresskeysconf_SOURCES = main_dummy.c
+expresskeysconf_SOURCES = main_setup-conf.c globals-conf.c globals-conf.h \
+       config_read-conf.c on_error-conf.c on_signal-conf.c event_loop-conf.c
+
 expresskeysconf_LDFLAGS = @EXPRESSKEYSCONF_LIBS@
 all: all-am
 
@@ -208,7 +213,12 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main_dummy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config_read-conf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event_loop-conf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globals-conf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main_setup-conf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/on_error-conf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/on_signal-conf.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
diff --git a/src-expresskeysconf/config_read-conf.c b/src-expresskeysconf/config_read-conf.c
new file mode 100644 (file)
index 0000000..d0f7869
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ config_read-conf.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
+ Copyright (C) 2005 - Mats Johannesson
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+#include "globals-conf.h"
+
+/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Function reads a configuration file containing program names and
+ definitions of which keys that should be mapped to pad buttons and
+ touch strips. It takes a file pointer and a pointer to a global
+ structure as input. Returns nothing unless an error occured.
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+int read_file_config(int *ip, FILE *fp)
+{
+
+       struct program *p;
+       
+       /* Convert to long for x86_64 systems */
+       p = (void *)(long)*ip;
+
+       int num_record = 0;
+       int num_field = 0;
+       
+       int *field_index = 0;
+
+       char buffer [MAXBUFFER];
+       char line_buffer [MAXBUFFER];
+       const char ignore[] = " \t\n";
+       const char *delimiter_first, *delimiter_last;
+       char *token;
+
+/* Begin by making sure that the Config File Version number is present before
+   a record begins. We exit if it's lacking or the number doesn't match up */
+
+/* FIXME Unpredictable behaviour on lines longer than MAXBUFFER etc. See BUGS */
+
+       while ((fgets(line_buffer, MAXBUFFER, fp)) != NULL) {
+               if ((delimiter_first = (strchr(line_buffer, '#'))) != NULL) {
+                       strncpy(buffer, line_buffer, ((delimiter_first) - (line_buffer)));
+                       strncpy(buffer + ((delimiter_first) - (line_buffer)), "\0", 1);
+                       strcpy(line_buffer, buffer);
+               }
+               if ((delimiter_first = (strchr(line_buffer, '%'))) != NULL &&
+               (delimiter_last = (strrchr(line_buffer, '%'))) != NULL &&
+               (delimiter_last != delimiter_first)) {
+                       return 3;
+               }
+               if ((delimiter_first = (strchr(line_buffer, ':'))) != NULL) {
+                       strcpy(buffer, line_buffer);
+                       token = strtok(buffer, ":");
+                       token = strtok(NULL, ignore);
+                       strcpy(buffer, token);
+                       if (be_verbose) {
+                               fprintf(stderr, "Config File Version on disk = %s Expected = %d\n", buffer, CONFIG_VERSION);
+                       }
+                       if ((atoi(buffer)) != CONFIG_VERSION) {
+                               return 3;
+                       }
+                       break;
+               }
+       }
+
+/* Read the config file in one go from top to bottom. Parse out the info
+   between record start "%%" and record end "%%". Recognize field beginnings
+   by a colon ":". Each full record is written to a global memory structure,
+   while partial records are discarded and excessive fields are truncated.
+   No sanity check on program names or keycode functionality is performed
+   A global counter variable of full record instances is updated before the
+   function exits to reflect the new state. */
+
+/* FIXME Unpredictable behaviour on lines longer than MAXBUFFER etc. See BUGS */
+
+       while ((fgets(line_buffer, MAXBUFFER, fp)) != NULL) {
+               if (num_record < MAXRECORDS) {
+                       if ((delimiter_first = (strchr(line_buffer, '#'))) != NULL) {
+                               strncpy(buffer, line_buffer, ((delimiter_first) - (line_buffer)));
+                               strncpy(buffer + ((delimiter_first) - (line_buffer)), "\0", 1);
+                               strcpy(line_buffer, buffer);
+                       }
+                       if ((delimiter_first = (strchr(line_buffer, '%'))) == NULL &&
+                       (delimiter_last = (strrchr(line_buffer, '%'))) == NULL &&
+                       (delimiter_last == delimiter_first)) {
+                               if ((delimiter_first = (strchr(line_buffer, ':'))) != NULL) {
+                                       if ((delimiter_first = (strchr(line_buffer, '"'))) != NULL) {
+                                               strcpy(buffer, line_buffer);
+                                               token = strtok(buffer, "\t\n");
+                                               while ((delimiter_first = (strchr(token, '"'))) == NULL) {
+                                                       token = strtok(NULL, "\t\n");
+                                               }
+                                               if (((delimiter_last = (strrchr(token, '"'))) != NULL) &&
+                                               (delimiter_last != delimiter_first)) {
+                                                       strncpy(buffer, delimiter_first+1, ((delimiter_last) - (delimiter_first + 1)));
+                                                       strncpy(buffer + ((delimiter_last) - (delimiter_first + 1)), "\0", 1);
+                                                       if ((p->class_name = (char *)malloc(strlen(buffer)+1)) == NULL) {
+                                                               return 2;
+                                                       }
+                                                       sprintf(p->class_name, "%s", buffer);
+                                                       if (be_verbose) {
+                                                               fprintf(stderr, "PGR RECNAME = %s\n", buffer);
+                                                       }
+                                                       field_index = &p->handle_touch;
+
+/* FIXME Unpredictable behaviour on lines longer than MAXBUFFER etc. See BUGS */
+
+                                                       while ((fgets(line_buffer, MAXBUFFER, fp)) != NULL) {
+                                                               if ((delimiter_first = (strchr(line_buffer, '%'))) != NULL &&
+                                                               (delimiter_last = (strrchr(line_buffer, '%'))) != NULL &&
+                                                               (delimiter_last != delimiter_first)) {
+                                                                       break;
+                                                               }
+                                                               if (num_field < MAXFIELDS) {
+                                                                       if ((delimiter_first = (strchr(line_buffer, '#'))) != NULL) {
+                                                                               strncpy(buffer, line_buffer, ((delimiter_first) - (line_buffer)));
+                                                                               strncpy(buffer + ((delimiter_first) - (line_buffer)), "\0", 1);
+                                                                               strcpy(line_buffer, buffer);
+                                                                       }
+                                                                       if ((delimiter_first = (strchr(line_buffer, ':'))) != NULL) {
+                                                                               strcpy(buffer, line_buffer);
+                                                                               token = strtok(buffer, ":");
+                                                                               token = strtok(NULL, ignore);
+                                                                               strcpy(buffer, token);
+                                                                               *field_index = atoi(buffer);
+                                                                               field_index++;
+                                                                               num_field++;
+                                                                       }
+                                                               }
+                                                       }
+                                                       if (num_field == MAXFIELDS) {
+                                                               num_record++;
+                                                               p++;
+                                                       } else {
+                                                               if (be_verbose) {
+                                                                       fprintf(stderr, "%s skipped! (fields were too few)\n", p->class_name);
+                                                               }
+                                                               free(p->class_name);
+                                                       }
+                                                       num_field = 0;
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+       if (!num_record) {
+               return 1;
+       }
+       num_list = num_record;
+
+       if (be_verbose) {
+               fprintf(stderr, "PGR RECORDS = %d\n", num_list);
+       }
+
+       return 0;
+}
+
+/* End Code */
+
diff --git a/src-expresskeysconf/event_loop-conf.c b/src-expresskeysconf/event_loop-conf.c
new file mode 100644 (file)
index 0000000..e5b6cac
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ event_loop-conf.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
+ Copyright (C) 2005 - Mats Johannesson
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+#include "globals-conf.h"
+
+/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Function waits perpetually for the X server
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+int use_events(Display *display)
+{
+
+       return 0;
+       /*exit(EXIT_OK);*/
+}
+
+/* End code */
+
diff --git a/src-expresskeysconf/globals-conf.c b/src-expresskeysconf/globals-conf.c
new file mode 100644 (file)
index 0000000..0d8fc07
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ globals-conf.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
+ Copyright (C) 2005 - Mats Johannesson
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+#include "globals-conf.h"
+
+Display *display;
+
+char *our_prog_name;
+char *our_prog_version = "0.2.4"; /* Our version. Remember to change it! */
+char *total_config_dir;
+char *total_config_file;
+char *total_pid_file;
+char *total_error_file;
+char *config_dir = "/.expresskeys";    /* This is where in the user home */
+char *config_file = "/expresskeys.conf";/* directory we will look, */
+char *pid_file = "/expresskeys.pid";   /* and what the different status */
+char *error_file = "/error_conf.log";  /* files are called */
+
+int screen;
+int be_verbose = 0; /* Run silently per default */
+int num_list = 0;
+
+/* Allocate space for a list of program definitions (config file based) */
+
+struct program external_list [MAXRECORDS];
+
+/* End Code */
+
diff --git a/src-expresskeysconf/globals-conf.h b/src-expresskeysconf/globals-conf.h
new file mode 100644 (file)
index 0000000..ccc4cec
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ globals-conf.h -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
+ Copyright (C) 2005 - Mats Johannesson
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+/* Standard Program includes */
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+/* For the basename call */
+#include <libgen.h>
+/* For the mkdir call */
+#include <sys/stat.h>
+/* For the mkdir and kill calls */
+#include <sys/types.h>
+/* For the signal and kill calls */
+#include <signal.h>
+
+/* Standard X includes */
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+/* Our internal defines */
+#define EXIT_OK 0
+#define EXIT_KO 1
+#define NON_VALID -1
+#define MAXRECORDS 64  /* Max program definitions to handle (enough? ;-) */
+#define MAXFIELDS 25   /* Max entries (minus program name) in each record */
+#define MAXBUFFER 160  /* Scratch buffer. Two full terminal lines */
+#define CONFIG_VERSION 2 /* Config file version - for future format changes */
+
+/* Our global variables */
+extern char *our_prog_name;    /* This program's file name */
+extern char *our_prog_version; /* Our version. Change it in globals-conf.c! */
+extern char *total_config_dir; /* The "~/" of the user, plus our config_dir */
+extern char *total_config_file;        /* total_config_dir plus config_file */
+extern char *total_pid_file;   /* total_config_dir plus pid_file */
+extern char *total_error_file; /* total_config_dir plus error_file */
+extern char *config_dir;       /* Set to a dot directory: .expresskeys */
+extern char *config_file;      /* Set to expresskeys.conf */
+extern char *pid_file;         /* Set to expresskeys.pid */
+extern char *error_file;       /* Set to error_conf.log */
+
+extern int screen;     /* Active screen. An X thing */
+extern int num_list;   /* Number of programs we currently handle */
+
+extern int be_verbose; /* Flag to see if we should be spitting out info */
+
+/* Global X functions */
+extern Display *display;       /* Active display. An X thing */
+
+/* Our global (internal) functions */
+extern int read_file_config(int *ip, FILE *fp);
+extern int use_events(Display *display);
+extern void exit_on_error(FILE *fp, char *string1, char *string2, char *string3);
+extern void clean_up_exit(int signum);
+
+/* Our global structures */
+/* The external_list is initialized from a file read */
+extern struct program {
+       char *class_name;
+       int handle_touch;
+       int l_touch_up;
+       int l_touch_up_plus;
+       int l_touch_down;
+       int l_touch_down_plus;
+       int r_touch_up;
+       int r_touch_up_plus;
+       int r_touch_down;
+       int r_touch_down_plus;
+       int key_9;
+       int key_9_plus;
+       int key_10;
+       int key_10_plus;
+       int key_11;
+       int key_11_plus;
+       int key_12;
+       int key_12_plus;
+       int key_13;
+       int key_13_plus;
+       int key_14;
+       int key_14_plus;
+       int key_15;
+       int key_15_plus;
+       int key_16;
+       int key_16_plus;
+}external_list [];
+
+/* End Code */
+
diff --git a/src-expresskeysconf/main_dummy.c b/src-expresskeysconf/main_dummy.c
deleted file mode 100644 (file)
index c58abbf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-int main (int argc, char *argv[])
-{
-       return 0;
-}
-
diff --git a/src-expresskeysconf/main_setup-conf.c b/src-expresskeysconf/main_setup-conf.c
new file mode 100644 (file)
index 0000000..8b06ec6
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ main_setup-conf.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
+ Copyright (C) 2005 - Mats Johannesson
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+#include "globals-conf.h"
+
+int main (int argc, char *argv[])
+{
+
+       our_prog_name = basename(argv[0]);
+
+       struct program *p;
+
+       int i = 0;
+       int len = 0;
+
+       FILE *fp = NULL;
+       FILE *errorfp = NULL;
+
+/* Prelaunch sanity checks: See if X is OK */
+
+       if ((display = XOpenDisplay(NULL)) == NULL) {
+               exit_on_error(errorfp, "%s ERROR: Can not connect to your X Server\n", our_prog_name, "");
+       }
+       screen = DefaultScreen(display);
+
+/* Locate the home directory of the user running this program */
+
+       char *user_homedir;
+       if ((user_homedir = getenv("HOME")) == NULL) {
+               exit_on_error(errorfp, "%s ERROR: Can not find your HOME directory!\n", our_prog_name, "");
+       }
+
+/* Concatenate the home directory string with the string of our expected
+   configuration file directory. The address to the whole string is then
+   copied to a global pointer, so we won't have to perform this part again */
+
+       char *total_config_dir_block;
+       len = strlen(user_homedir) + strlen(config_dir) + 1;
+       if ((total_config_dir_block = (char *)malloc(len)) == NULL) {
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 1!\n", our_prog_name, "");
+       }
+       sprintf(total_config_dir_block, "%s%s", user_homedir, config_dir);
+       total_config_dir = total_config_dir_block;
+
+/* Concatenate the full path with the config file name. Store address */
+
+       char *total_config_file_block;
+       len = strlen(total_config_dir) + strlen(config_file) + 1;
+       if ((total_config_file_block = (char *)malloc(len)) == NULL) {
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 2!\n", our_prog_name, "");
+       }
+       sprintf(total_config_file_block, "%s%s", total_config_dir, config_file);
+       total_config_file = total_config_file_block;
+
+/* Concatenate the full path with the pid file name. Store address */
+
+       char *total_pid_file_block;
+       len = strlen(total_config_dir) + strlen(pid_file) + 1;
+       if ((total_pid_file_block = (char *)malloc(len)) == NULL) {
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 3!\n", our_prog_name, "");
+       }
+       sprintf(total_pid_file_block, "%s%s", total_config_dir, pid_file);
+       total_pid_file = total_pid_file_block;
+
+/* Concatenate the full path with the error file name. Store address */
+
+       char *total_error_file_block;
+       len = strlen(total_config_dir) + strlen(error_file) + 1;
+       if ((total_error_file_block = (char *)malloc(len)) == NULL) {
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 4!\n", our_prog_name, "");
+       }
+       sprintf(total_error_file_block, "%s%s", total_config_dir, error_file);
+       total_error_file = total_error_file_block;
+
+/* Try to open the the configuration directory for reading, just as a
+   test to see if it exists. A failure here can mean many things, but we
+   then try to create it as a means to rule out a true lack of existence */
+
+       if ((fp = fopen(total_config_dir, "r")) == NULL) {
+               if ((mkdir(total_config_dir, 0777)) == NON_VALID) {
+                       exit_on_error(errorfp, "%s ERROR: Can not read or create %s\n", our_prog_name, total_config_dir);
+               }
+       } else {
+               fclose(fp);
+       }
+
+/* Open (and truncate) an error log for future reference */
+
+       if ((errorfp = fopen(total_error_file, "w")) == NULL) {
+               exit_on_error(errorfp, "%s ERROR: Can not open %s in write mode\n", our_prog_name, total_error_file);
+       }
+
+/* Set a flag if we should run in verbose mode */
+
+       if (argc > 1) {
+               for (i = 1; i < argc; i++) {
+                       if (strcmp(argv[i], "-v") == 0) {
+                               be_verbose = 1;
+                               break;
+                       }
+               }
+       }
+
+       if (be_verbose) {
+               fprintf(stderr, "PGR VERSION = %s\n", our_prog_version);
+               fprintf(stderr, "USR HOMEDIR = %s\n", user_homedir);
+               fprintf(stderr, "THE CNF-DIR = %s\n", total_config_dir);
+               fprintf(stderr, "THE CNFFILE = %s\n", total_config_file);
+               fprintf(stderr, "THE PIDFILE = %s\n", total_pid_file);
+               fprintf(stderr, "OUR LOGFILE = %s\n", total_error_file);
+       }
+
+/* Read in an existing configuration file */
+
+       p = external_list;
+       if ((fp = fopen(total_config_file, "r")) == NULL) {
+               exit_on_error(errorfp, "%s ERROR: Can not open %s in read mode\n", our_prog_name, total_config_file);
+       } else {
+               switch (read_file_config((void *)&p, fp)){
+                       
+                       case 0:
+                       fclose(fp);
+                       break;
+
+                       case 1:
+                       fclose(fp);
+                       exit_on_error(errorfp, "%s ERROR: No complete record found in %s\n", our_prog_name, total_config_file);
+                       
+                       case 2:
+                       fclose(fp);
+                       exit_on_error(errorfp, "%s ERROR: Memory allocation error while parsing %s\n", our_prog_name, total_config_file);
+
+                       case 3:
+                       fclose(fp);
+                       exit_on_error(errorfp, "%s ERROR: Config File Version %d not found\n", our_prog_name, (void *)CONFIG_VERSION);
+
+                       default:
+                       fclose(fp);
+                       exit_on_error(errorfp, "%s ERROR: Unknown error while parsing %s\n", our_prog_name, total_config_file);
+               }
+       }
+
+/* Replace some of the normal signal handlers with our own functions.
+   All the normal program exits should first clean up a bit */
+
+       if ((signal(SIGINT, clean_up_exit) == SIG_ERR)
+               || (signal(SIGHUP, clean_up_exit) == SIG_ERR)
+               || (signal(SIGTERM, clean_up_exit) == SIG_ERR)) {
+               exit_on_error(errorfp, "%s ERROR: Failed to modify signal handling!\n", our_prog_name, "");
+       }
+
+       use_events(display); /* <-- Our true launch! The event loop */
+       exit_on_error(errorfp, "", "", "");
+
+       exit(EXIT_OK); /* We should never reach this */
+
+}
+
+/* End Code */
+
diff --git a/src-expresskeysconf/on_error-conf.c b/src-expresskeysconf/on_error-conf.c
new file mode 100644 (file)
index 0000000..40b0547
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ on_error-conf.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
+ Copyright (C) 2005 - Mats Johannesson
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+#include "globals-conf.h"
+
+/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Function prints out the error strings from a caller and terminates
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+void exit_on_error(FILE *fp, char *string1, char *string2, char *string3)
+{
+
+       if (fp) {
+               fprintf(fp, string1, string2, string3);
+               fclose(fp);
+       }
+
+       fprintf(stderr, string1, string2, string3);
+       clean_up_exit(SIGTERM);
+
+/* FIXME Drops the state EXIT_KO when calling clean_up_exit, becomes EXIT_OK */
+
+}
+
+/* End Code */
+
diff --git a/src-expresskeysconf/on_signal-conf.c b/src-expresskeysconf/on_signal-conf.c
new file mode 100644 (file)
index 0000000..03eb49d
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ on_signal-conf.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
+ Copyright (C) 2005 - Mats Johannesson
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+#include "globals-conf.h"
+
+/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Function acts as a signal handler replacement for SIGINT, SIGHUP and
+ SIGTERM. All are normal exit signals. We want to trap them in order to
+ perform some house keeping pre-exit. Mostly to free memory.
+ Since it takes care of several signals, it could get invoked recursively
+ if some other signal comes in. We use this "volatile" variable to track
+ the case. At the end we restore the default signal handler and raise it
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+volatile sig_atomic_t clean_up_exit_in_progress = 0;
+void clean_up_exit(int signum)
+{
+       int i;
+       struct program *p;
+       p = external_list;
+
+       if (clean_up_exit_in_progress) {
+               raise(signum);
+       }
+       clean_up_exit_in_progress = 1;
+       
+       if (total_config_dir) {
+               free(total_config_dir);
+       }
+
+       if (total_config_file) {
+               free(total_config_file);
+       }
+
+       if (total_pid_file) {
+               free(total_pid_file);
+       }
+
+       if (total_error_file) {
+               free(total_error_file);
+       }
+
+       if (num_list) {
+               for (i = 0; i < num_list; i++, p++) {
+                       free(p->class_name);
+               }
+       }
+
+       if (display) {
+               XCloseDisplay(display);
+       }
+
+       signal(signum, SIG_DFL);
+       raise(signum);
+}
+
+/* End Code */
+