version 0.1.3 v0.1.3
authorMats Johannesson <devel@bredband.net>
Thu, 26 Jun 2008 17:50:51 +0000 (13:50 -0400)
committerAristeu Rozanski <arozansk@redhat.com>
Thu, 26 Jun 2008 17:50:51 +0000 (13:50 -0400)
* Just internal code cleanup/restructuring after having begun reading
"The Art of Unix Programming" by Eric Steven Raymond:
http://www.catb.org/~esr/writings/taoup/html/

* Now tags a new configuration file with a version number according to
his advice: "Always, _always_ either include a version number, or ...".
Expect more internal changes when I'm done reading. In an already
existing configuration file you'll have to add it manually. Put a:

Config File Version 1:

on a line by itself at the very top.

ChangeLog
src-server/config_read.c [moved from src-server/config_all.c with 69% similarity]
src-server/config_write.c [new file with mode: 0644]
src-server/globals.h
src-server/main_setup.c
src-server/makefile
src-server/on_error.c [new file with mode: 0644]
src-server/on_signal.c [moved from src-server/signal_all.c with 65% similarity]

index e6d076a..b6a0247 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,20 @@
 
+_Version 0.1.3 21 April 2005_
+
+* Just internal code cleanup/restructuring after having begun reading
+"The Art of Unix Programming" by Eric Steven Raymond:
+http://www.catb.org/~esr/writings/taoup/html/
+
+* Now tags a new configuration file with a version number according to
+his advice: "Always, _always_ either include a version number, or ...".
+Expect more internal changes when I'm done reading. In an already
+existing configuration file you'll have to add it manually. Put a:
+
+Config File Version 1:
+
+on a line by itself at the very top.
+
+
 _Version 0.1.2 20 April 2005_
 
 * Signal handling in place. Not much in itself, but:
similarity index 69%
rename from src-server/config_all.c
rename to src-server/config_read.c
index e20db9a..21e79e1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * config_all.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
+ * config_read.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
  *
  * Copyright (C) 2005 - Mats Johannesson
  *
@@ -198,42 +198,5 @@ int read_file_config(int *ip, FILE *fp)
        return 0;
 }
 
-/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
-/* Function writes out a short configuration file if none exists. It takes */
-/* the info from a global memory structure whose only purpose is this initial */
-/* write moment. The file should then be read back immediately to populate a */
-/* memory structure that other functions rely on for their proper operation. */
-/* Returns nothing useful. Write errors are checked in the calling function. */
-/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
-
-int write_file_config(int *ip, FILE *fp)
-{
-
-       struct program *p;
-       p = (void *)*ip;
-
-       fprintf(fp, "------------------------------The field order is:-------------------------\n");
-       fprintf(fp, "Programname        handle_touch \n");
-       fprintf(fp, "l_touch_up l_touch_up_plus l_touch_down    l_touch_down_plus\n");
-       fprintf(fp, "r_touch_up r_touch_up_plus r_touch_down    r_touch_down_plus\n");
-       fprintf(fp, "key_9              key_9_plus      key_10          key_10_plus\n");
-       fprintf(fp, "key_11             key_11_plus     key_12          key_12_plus\n");
-       fprintf(fp, "key_13             key_13_plus     key_14          key_14_plus\n");
-       fprintf(fp, "key_15             key_15_plus     key_16          key_16_plus\n");
-       fprintf(fp, "--------------------------------------------------------------------------\n");
-       fprintf(fp, "Please don't put any comment inside the definition below this text block.\n");
-       fprintf(fp, "And please don't alter or remove the commas (,) after each field entry.\n");
-       fprintf(fp, "\n");
-       fprintf(fp, "{\"%s\",   %d,\n", p->class_name, p->handle_touch);
-       fprintf(fp, "%d,                %d,             %d,             %d,\n", p->l_touch_up, p->l_touch_up_plus, p->l_touch_down, p->l_touch_down_plus);
-       fprintf(fp, "%d,                %d,             %d,             %d,\n", p->r_touch_up, p->r_touch_up_plus, p->r_touch_down, p->r_touch_down_plus);
-       fprintf(fp, "%d,                %d,             %d,             %d,\n", p->key_9, p->key_9_plus, p->key_10, p->key_10_plus);
-       fprintf(fp, "%d,                %d,             %d,             %d,\n", p->key_11, p->key_11_plus, p->key_12, p->key_12_plus);
-       fprintf(fp, "%d,                %d,             %d,             %d,\n", p->key_13, p->key_13_plus, p->key_14, p->key_14_plus);
-       fprintf(fp, "%d,                %d,             %d,             %d,     }\n\n", p->key_15, p->key_15_plus, p->key_16, p->key_16_plus);
-
-       return 0;
-}
-
 /* End Code */
 
diff --git a/src-server/config_write.c b/src-server/config_write.c
new file mode 100644 (file)
index 0000000..55a3020
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * config_write.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.h"
+
+/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Function writes out a short configuration file if none exists. It takes */
+/* the info from a global memory structure whose only purpose is this initial */
+/* write moment. The file should then be read back immediately to populate a */
+/* memory structure that other functions rely on for their proper operation. */
+/* Returns nothing useful. Write errors are checked in the calling function. */
+/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+int write_file_config(int *ip, FILE *fp)
+{
+
+       struct program *p;
+       p = (void *)*ip;
+
+       fprintf(fp, "------------------------------The field order is:-------------------------\n");
+       fprintf(fp, "Programname        handle_touch \n");
+       fprintf(fp, "l_touch_up l_touch_up_plus l_touch_down    l_touch_down_plus\n");
+       fprintf(fp, "r_touch_up r_touch_up_plus r_touch_down    r_touch_down_plus\n");
+       fprintf(fp, "key_9              key_9_plus      key_10          key_10_plus\n");
+       fprintf(fp, "key_11             key_11_plus     key_12          key_12_plus\n");
+       fprintf(fp, "key_13             key_13_plus     key_14          key_14_plus\n");
+       fprintf(fp, "key_15             key_15_plus     key_16          key_16_plus\n");
+       fprintf(fp, "--------------------------------------------------------------------------\n");
+       fprintf(fp, "Please don't put any comment inside the definition below this text block.\n");
+       fprintf(fp, "And please don't alter or remove the commas (,) after each field entry.\n");
+       fprintf(fp, "\n");
+       fprintf(fp, "{\"%s\",   %d,\n", p->class_name, p->handle_touch);
+       fprintf(fp, "%d,                %d,             %d,             %d,\n", p->l_touch_up, p->l_touch_up_plus, p->l_touch_down, p->l_touch_down_plus);
+       fprintf(fp, "%d,                %d,             %d,             %d,\n", p->r_touch_up, p->r_touch_up_plus, p->r_touch_down, p->r_touch_down_plus);
+       fprintf(fp, "%d,                %d,             %d,             %d,\n", p->key_9, p->key_9_plus, p->key_10, p->key_10_plus);
+       fprintf(fp, "%d,                %d,             %d,             %d,\n", p->key_11, p->key_11_plus, p->key_12, p->key_12_plus);
+       fprintf(fp, "%d,                %d,             %d,             %d,\n", p->key_13, p->key_13_plus, p->key_14, p->key_14_plus);
+       fprintf(fp, "%d,                %d,             %d,             %d,     }\n\n", p->key_15, p->key_15_plus, p->key_16, p->key_16_plus);
+
+       return 0;
+}
+
+/* End Code */
+
index 4fe97cc..c28230f 100644 (file)
@@ -50,6 +50,7 @@
 #define MAXFIELDS 25   /* Max entries (minus program name) in each record */
 #define MAXDIGITS 3    /* Max number of digits in a key entry */
 #define MAXBUFFER 64   /* Scratch buffer. Also sets program name length limit*/
+#define CONFIG_VERSION 1 /* Config file version - for future format changes */
 
 /* Our global variables */
 extern char *our_prog_name;    /* This program's file name */
@@ -85,20 +86,23 @@ extern XDevice *pad_device; /* The actual pointer to the pad device */
 extern XDevice *pen_device;    /* The actual pointer to the pen device */
 
 /* Our global (internal) functions */
-/* In config_all.c */
+/* In config_read.c */
 extern int read_file_config(int *ip, FILE *fp);
+/* In config_write.c */
 extern int write_file_config(int *ip, FILE *fp);
-/* In get_device.c */
-extern int get_device_info(Display *display, char *name);
-/* In reg_events.c */
-extern int register_events(Display *display, XDeviceInfo *pad_info, char *name);
-/* In pen_mode.c */
-extern int toggle_pen_mode(Display *display, char *name);
 /* In event_loop.c */
 extern int use_events(Display *display);
-/* In signal_all.c */
+/* In get_device.c */
+extern int get_device_info(Display *display, char *name);
+/* In on_error.c */
+extern int exit_on_error(FILE *fp, char *string1, char *string2, char *string3);
+/* In on_signal.c */
 extern void re_read_file_config(int signum);
 extern void clean_up_exit(int signum);
+/* In pen_mode.c */
+extern int toggle_pen_mode(Display *display, char *name);
+/* In reg_events.c */
+extern int register_events(Display *display, XDeviceInfo *pad_info, char *name);
 
 /* Our global structures */
 /* The internal_list is initialized in globals.c */
index 506ae72..0b773c3 100644 (file)
@@ -28,17 +28,17 @@ int main (int argc, char *argv[])
 
        struct program *p;
 
-       int i;
-       int len;
+       int i = 0;
+       int len = 0;
 
-       FILE *fp;
-       FILE *errorfp;
+       FILE *fp = NULL;
+       FILE *errorfp = NULL;
 
 /* Prelaunch sanity checks: See if X is OK */
 
        if ((display = XOpenDisplay(NULL)) == NULL) {
                fprintf(stderr, "%s ERROR: Can not connect to your X Server\n", our_prog_name);
-               return EXIT_KO
+               exit(EXIT_KO)
        }
        screen = DefaultScreen(display);
 
@@ -46,9 +46,7 @@ int main (int argc, char *argv[])
 
        char *user_homedir;
        if ((user_homedir = getenv("HOME")) == NULL) {
-               fprintf(stderr, "%s ERROR: Can not find your HOME directory!\n", our_prog_name);
-               XCloseDisplay(display);
-               return EXIT_KO;
+               exit_on_error(errorfp, "%s ERROR: Can not find your HOME directory!\n", our_prog_name, "");
        }
 
 /* This is silly, but in order to keep the heap from being stomped on */
@@ -62,8 +60,7 @@ int main (int argc, char *argv[])
 
        char *heap_protect;
        if ((heap_protect = (char *)malloc(1024)) == NULL) {
-               fprintf(stderr, "%s ERROR: Memory allocation trouble at stage 1!\n", our_prog_name);
-               return EXIT_KO; 
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 1!\n", our_prog_name, "");
        }
 
 /* Concatenate the home directory string with the string of our preferred*/
@@ -73,9 +70,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) {
-               fprintf(stderr, "%s ERROR: Memory allocation trouble at stage 2!\n", our_prog_name);
-               XCloseDisplay(display);
-               return EXIT_KO; 
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 2!\n", our_prog_name, "");
        }
        sprintf(total_config_dir_block, "%s%s", user_homedir, config_dir);
        total_config_dir = total_config_dir_block;
@@ -85,9 +80,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) {
-               fprintf(stderr, "%s ERROR: Memory allocation trouble at stage 3!\n", our_prog_name);
-               XCloseDisplay(display);
-               return EXIT_KO; 
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 3!\n", our_prog_name, "");
        }
        sprintf(total_config_file_block, "%s%s", total_config_dir, config_file);
        total_config_file = total_config_file_block;
@@ -97,9 +90,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) {
-               fprintf(stderr, "%s ERROR: Memory allocation trouble at stage 4!\n", our_prog_name);
-               XCloseDisplay(display);
-               return EXIT_KO; 
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 4!\n", our_prog_name, "");
        }
        sprintf(total_pid_file_block, "%s%s", total_config_dir, pid_file);
        total_pid_file = total_pid_file_block;
@@ -109,9 +100,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) {
-               fprintf(stderr, "%s ERROR: Memory allocation trouble at stage 5!\n", our_prog_name);
-               XCloseDisplay(display);
-               return EXIT_KO; 
+               exit_on_error(errorfp, "%s ERROR: Memory allocation trouble at stage 5!\n", our_prog_name, "");
        }
        sprintf(total_error_file_block, "%s%s", total_config_dir, error_file);
        total_error_file = total_error_file_block;
@@ -127,9 +116,7 @@ int main (int argc, char *argv[])
 
        if ((fp = fopen(total_config_dir, "r")) == NULL) {
                if ((mkdir(total_config_dir, 0777)) == NON_VALID) {
-                       fprintf(stderr, "%s ERROR: Can not read or create %s\n", our_prog_name, total_config_dir);
-                       XCloseDisplay(display);
-                       return EXIT_KO;
+                       exit_on_error(errorfp, "%s ERROR: Can not read or create %s\n", our_prog_name, total_config_dir);
                }
        } else {
                fclose(fp);
@@ -146,30 +133,23 @@ int main (int argc, char *argv[])
                fgets(pid_buffer, MAXBUFFER, fp);
                fclose(fp);
                if ((kill(atoi(pid_buffer), 0)) != NON_VALID) {
-                       fprintf(stderr, "%s ERROR: Another instance of %s seems to be running!\n", our_prog_name, our_prog_name);
-                       XCloseDisplay(display);
-                       return EXIT_KO;
+                       exit_on_error(errorfp, "%s ERROR: Another instance of %s seems to be running!\n", our_prog_name, our_prog_name);
                }
        }
 
 /* Open (and truncate) an error log for future reference */
 
        if ((errorfp = fopen(total_error_file, "w")) == NULL) {
-               fprintf(stderr, "%s ERROR: Can not open %s in write mode\n", our_prog_name, total_error_file);
-               XCloseDisplay(display);
-               return EXIT_KO;
+               exit_on_error(errorfp, "%s ERROR: Can not open %s in write mode\n", our_prog_name, total_error_file);
        }
-       
+
 /* Can we use XTest to send fake key presses */
 
        int event_base, error_base;
        int major_version, minor_version;
        if (!XTestQueryExtension(display, &event_base, &error_base,
                &major_version, &minor_version)) {
-               fprintf(stderr, "%s ERROR: XTest extension not present on your X server\n", our_prog_name);
-               fprintf(errorfp, "%s ERROR: XTest extension not present on your X server\n", our_prog_name);
-               XCloseDisplay(display);
-               return EXIT_KO;
+               exit_on_error(errorfp, "%s ERROR: XTest extension not present on your X server\n", our_prog_name, "");
        }
 
 /* Can we use XInput to talk with the tablet */
@@ -179,10 +159,7 @@ int main (int argc, char *argv[])
        if (xinputext && (xinputext != (XExtensionVersion*) NoSuchExtension)) {
                XFree(xinputext);
        } else {
-               fprintf(stderr, "%s ERROR: XInput extension not present on your X server\n", our_prog_name);
-               fprintf(errorfp, "%s ERROR: XInput extension not present on your X server\n", our_prog_name);
-               XCloseDisplay(display);
-               return EXIT_KO;
+               exit_on_error(errorfp, "%s ERROR: XInput extension not present on your X server\n", our_prog_name, "");
        }
 
 /* We need at least the pad name specified... */
@@ -198,7 +175,7 @@ int main (int argc, char *argv[])
                fprintf(stderr, "Example: %s pad stylus -d\n", our_prog_name);
                fprintf(stderr, "\n");
                XCloseDisplay(display);
-               return EXIT_KO;
+               exit(EXIT_KO);
        }
 
 /* See if the pad is for real, and if it is active */
@@ -206,10 +183,7 @@ int main (int argc, char *argv[])
        pad_info = (void *) get_device_info(display, argv[1]);
        XFreeDeviceList(info);
        if (!pad_info) {
-               fprintf(stderr, "%s ERROR: Can not find pad device: %s\n", our_prog_name, argv[1]);
-               fprintf(errorfp, "%s ERROR: Can not find pad device: %s\n", our_prog_name, argv[1]);
-               XCloseDisplay(display);
-               return EXIT_KO;
+               exit_on_error(errorfp, "%s ERROR: Can not find pad device: %s\n", our_prog_name, argv[1]);
        }
 
 /* Set a flag if we should run as a daemon. Also register */
@@ -229,10 +203,7 @@ int main (int argc, char *argv[])
                                pen_info = (void *) get_device_info(display, argv[i]);
                                XFreeDeviceList(info);
                                if (!pen_info) {
-                                       fprintf(stderr, "%s ERROR: Can not find pen device: %s\n", our_prog_name, pen_name);
-                                       fprintf(errorfp, "%s ERROR: Can not find pen device: %s\n", our_prog_name, pen_name);
-                                       XCloseDisplay(display);
-                                       return EXIT_KO;
+                                       exit_on_error(errorfp, "%s ERROR: Can not find pen device: %s\n", our_prog_name, pen_name);
                                }
                                break;
                        }
@@ -244,31 +215,23 @@ int main (int argc, char *argv[])
        if (handle_pen) {
                pen_mode = Relative;
                if (toggle_pen_mode(display, pen_name)) {
-                       fprintf(stderr, "%s ERROR: Can not open pen device: %s\n", our_prog_name, pen_name);
-                       fprintf(errorfp, "%s ERROR: Can not open pen device: %s\n", our_prog_name, pen_name);
-                       XCloseDisplay(display);
-                       return EXIT_KO;
+                       exit_on_error(errorfp, "%s ERROR: Can not open pen device: %s\n", our_prog_name, pen_name);
                }
        }
 
-/* If no configuration file exists, write out a */
-/* short one from an internal memory structure */
+/* If no configuration file exists, write out a short one from an internal */
+/* memory structure. Also tag it with a version number - for future use */
 
        if ((fp = fopen(total_config_file, "a+")) == NULL) {
-               fprintf(stderr, "%s ERROR: Can not open %s in read/write mode\n", our_prog_name, total_config_file);
-               fprintf(errorfp, "%s ERROR: Can not open %s in read/write mode\n", our_prog_name, total_config_file);
-               XCloseDisplay(display);
-               return EXIT_KO;
+               exit_on_error(errorfp, "%s ERROR: Can not open %s in read/write mode\n", our_prog_name, total_config_file);
        } else {
                rewind(fp);
                if (fgetc(fp) == EOF) {
+                       fprintf(fp, "Config File Version %d:\n\n", CONFIG_VERSION);
                        for (p = internal_list; p < internal_list + num_list; p++) {
                                write_file_config((void *)&p, fp);
                                if (ferror(fp)) {
-                                       fprintf(stderr, "%s ERROR: Write error in %s\n", our_prog_name, total_config_file);
-                                       fprintf(errorfp, "%s ERROR: Write error in %s\n", our_prog_name, total_config_file);
-                                       XCloseDisplay(display);
-                                       return EXIT_KO;
+                                       exit_on_error(errorfp, "%s ERROR: Write error in %s\n", our_prog_name, total_config_file);
                                }
                        }
                }
@@ -279,10 +242,7 @@ int main (int argc, char *argv[])
 
        p = external_list;
        if ((fp = fopen(total_config_file, "r")) == NULL) {
-               fprintf(stderr, "%s ERROR: Can not open %s in read mode\n", our_prog_name, total_config_file);
-               fprintf(errorfp, "%s ERROR: Can not open %s in read mode\n", our_prog_name, total_config_file);
-               XCloseDisplay(display);
-               return EXIT_KO;
+               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)){
                        
@@ -291,39 +251,26 @@ int main (int argc, char *argv[])
                        break;
 
                        case 1:
-                       fprintf(stderr, "%s ERROR: No complete record found in %s\n", our_prog_name, total_config_file);
-                       fprintf(errorfp, "%s ERROR: No complete record found in %s\n", our_prog_name, total_config_file);
-                       XCloseDisplay(display);
-                       return EXIT_KO;
+                       exit_on_error(errorfp, "%s ERROR: No complete record found in %s\n", our_prog_name, total_config_file);
                        
                        case 2:
-                       fprintf(stderr, "%s ERROR: Memory allocation error while parsing %s\n", our_prog_name, total_config_file);
-                       fprintf(errorfp, "%s ERROR: Memory allocation error while parsing %s\n", our_prog_name, total_config_file);
-                       XCloseDisplay(display);
-                       return EXIT_KO;
+                       exit_on_error(errorfp, "%s ERROR: Memory allocation error while parsing %s\n", our_prog_name, total_config_file);
                        
                        default:
-                       fprintf(stderr, "%s ERROR: Unknown error while parsing %s\n", our_prog_name, total_config_file);
-                       fprintf(errorfp, "%s ERROR: Unknown error while parsing %s\n", our_prog_name, total_config_file);
-                       XCloseDisplay(display);
-                       return EXIT_KO;
+                       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. We */
 /* want SIGUSR1 and SIGUSR2 to read in the config file after a modification, */
-/* and all the normal program exits should first clean up a bit. The exit */
-/* could have been handled by a call to "atexit" but this was more fun :-) */
+/* and all the normal program exits should first clean up a bit */
 
        if ((signal(SIGUSR1, re_read_file_config) == SIG_ERR)
                || (signal(SIGUSR2, re_read_file_config) == SIG_ERR)
                || (signal(SIGINT, clean_up_exit) == SIG_ERR)
                || (signal(SIGHUP, clean_up_exit) == SIG_ERR)
                || (signal(SIGTERM, clean_up_exit) == SIG_ERR)) {
-               fprintf(stderr, "%s ERROR: Failed to modify signal handling!\n", our_prog_name);
-               fprintf(errorfp, "%s ERROR: Failed to modify signal handling!\n", our_prog_name);
-               XCloseDisplay(display);
-               return EXIT_KO;
+               exit_on_error(errorfp, "%s ERROR: Failed to modify signal handling!\n", our_prog_name, "");
        }
 
 /* Ready to launch in the foreground or as a daemon after one last check. */
@@ -334,24 +281,15 @@ int main (int argc, char *argv[])
        if (register_events(display, pad_info, argv[1])) {
                if (go_daemon) {
                        if ((daemon(0, 1)) == NON_VALID) {
-                               fprintf(stderr, "%s ERROR: Failed to fork into daemon mode! EXITING!\n", our_prog_name);
-                               fprintf(errorfp, "%s ERROR: Failed to fork into daemon mode! EXITING!\n", our_prog_name);
-                               XCloseDisplay(display);
-                               return EXIT_KO;
+                               exit_on_error(errorfp, "%s ERROR: Failed to fork into daemon mode! EXITING!\n", our_prog_name, "");
                        } else {
                                sprintf(pid_buffer, "%d", getpid());
                                if ((fp = fopen(total_pid_file, "w")) == NULL) {
-                                       fprintf(stderr, "%s ERROR: Can not open %s in write mode\n", our_prog_name, total_pid_file);
-                                       fprintf(errorfp, "%s ERROR: Can not open %s in write mode\n", our_prog_name, total_pid_file);
-                                       XCloseDisplay(display);
-                                       exit(EXIT_KO);
+                                       exit_on_error(errorfp, "%s ERROR: Can not open %s in write mode\n", our_prog_name, total_pid_file);
                                } else {
                                        fprintf(fp, "%s", pid_buffer);
                                        if (ferror(fp)) {
-                                               fprintf(stderr, "%s ERROR: Write error in %s\n", our_prog_name, total_pid_file);
-                                               fprintf(errorfp, "%s ERROR: Write error in %s\n", our_prog_name, total_pid_file);
-                                               XCloseDisplay(display);
-                                               exit(EXIT_KO);
+                                               exit_on_error(errorfp, "%s ERROR: Write error in %s\n", our_prog_name, total_pid_file);
                                        } else {
                                                fclose(fp);
                                        }
@@ -362,14 +300,12 @@ int main (int argc, char *argv[])
                free(heap_protect); /* free the dummy heap protect */
                use_events(display); /* <-- Our true launch! The event loop */
        } else {
-               fprintf(stderr, "%s ERROR: Could not register any events!\n", our_prog_name);
-               fprintf(errorfp, "%s ERROR: Could not register any events!\n", our_prog_name);
-               XCloseDisplay(display);
-               return EXIT_KO;
+               exit_on_error(errorfp, "%s ERROR: Could not register any events!\n", our_prog_name, "");
        }
 
        XCloseDisplay(display);
-       return EXIT_OK;
+       exit(EXIT_OK);
+
 }
 
 /* End Code */
index 1149617..66d06cd 100644 (file)
@@ -8,8 +8,8 @@ LIBS = -lX11 -lXext -lXi -lXtst
 
 TARGET = ekeys
 
-SRCS = globals.c config_all.c signal_all.c pen_mode.c \
-       get_device.c reg_events.c event_loop.c main_setup.c
+SRCS = globals.c config_read.c config_write.c on_error.c on_signal.c \
+       pen_mode.c get_device.c reg_events.c event_loop.c main_setup.c
 
 OBJS = $(SRCS:.c=.o)
 ALL =  $(SRCS)
diff --git a/src-server/on_error.c b/src-server/on_error.c
new file mode 100644 (file)
index 0000000..a9cc0e7
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * on_error.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.h"
+
+/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Function prints out the error strings from a caller and exits */
+/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+
+int exit_on_error(FILE *fp, char *string1, char *string2, char *string3)
+{
+
+       if (fp) {
+               fprintf(fp, string1, string2, string3);
+       }
+
+       fprintf(stderr, string1, string2, string3);
+       XCloseDisplay(display);
+       exit(EXIT_KO);
+
+}
+
+/* End Code */
+
similarity index 65%
rename from src-server/signal_all.c
rename to src-server/on_signal.c
index 05eaa92..ecf0d5a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * signal_all.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
+ * on_signal.c -- Support ExpressKeys & Touch Strips on a Wacom Intuos3 tablet.
  *
  * Copyright (C) 2005 - Mats Johannesson
  *
@@ -37,19 +37,14 @@ void re_read_file_config(int signum)
 /* Open (and truncate) an error log for future reference */
        
        if ((errorfp = fopen(total_error_file, "w")) == NULL) {
-               fprintf(stderr, "%s ERROR: Reread - Can not open %s in write mode\n", our_prog_name, total_error_file);
-               XCloseDisplay(display);
-               exit(EXIT_KO);
+               exit_on_error(errorfp, "%s ERROR: Reread - Can not open %s in write mode\n", our_prog_name, total_error_file);
        }
 
 /* Read in an existing configuration file */
 
        p = external_list;
        if ((fp = fopen(total_config_file, "r")) == NULL) {
-               fprintf(stderr, "%s ERROR: Reread - Can not open %s in read mode\n", our_prog_name, total_config_file);
-               fprintf(errorfp, "%s ERROR: Reread - Can not open %s in read mode\n", our_prog_name, total_config_file);
-               XCloseDisplay(display);
-               exit(EXIT_KO);
+               exit_on_error(errorfp, "%s ERROR: Reread - Can not open %s in read mode\n", our_prog_name, total_config_file);
        } else {
                switch (read_file_config((void *)&p, fp)){
                        
@@ -58,22 +53,13 @@ void re_read_file_config(int signum)
                        break;
 
                        case 1:
-                       fprintf(stderr, "%s ERROR: Reread - No complete record found in %s\n", our_prog_name, total_config_file);
-                       fprintf(errorfp, "%s ERROR: Reread - No complete record found in %s\n", our_prog_name, total_config_file);
-                       XCloseDisplay(display);
-                       exit(EXIT_KO);
+                       exit_on_error(errorfp, "%s ERROR: Reread - No complete record found in %s\n", our_prog_name, total_config_file);
                        
                        case 2:
-                       fprintf(stderr, "%s ERROR: Reread - Memory allocation error while parsing %s\n", our_prog_name, total_config_file);
-                       fprintf(errorfp, "%s ERROR: Reread - Memory allocation error while parsing %s\n", our_prog_name, total_config_file);
-                       XCloseDisplay(display);
-                       exit(EXIT_KO);
+                       exit_on_error(errorfp, "%s ERROR: Reread - Memory allocation error while parsing %s\n", our_prog_name, total_config_file);
                        
                        default:
-                       fprintf(stderr, "%s ERROR: Reread - Unknown error while parsing %s\n", our_prog_name, total_config_file);
-                       fprintf(errorfp, "%s ERROR: Reread - Unknown error while parsing %s\n", our_prog_name, total_config_file);
-                       XCloseDisplay(display);
-                       exit(EXIT_KO);
+                       exit_on_error(errorfp, "%s ERROR: Reread - Unknown error while parsing %s\n", our_prog_name, total_config_file);
                }
        }