--- /dev/null
+diff -Nru abook-0.4.17/abook.c abook-0.4.17.new/abook.c
+--- abook-0.4.17/abook.c Tue Apr 2 20:45:47 2002
++++ abook-0.4.17.new/abook.c Sat Mar 22 14:14:51 2003
+@@ -63,7 +63,13 @@
+ /*if( options_get_int("datafile", "autosave") )*/
+
+ if( load_database(datafile) == 2 ) {
+- char *tmp = strconcat(getenv("HOME"),
++ char *config_dir = getenv("CONFIG_DIR");
++ char *tmp;
++
++ if (config_dir)
++ tmp = strconcat(config_dir, "/" CONFIG_DIR_DATAFILE, NULL);
++ else
++ tmp = strconcat(getenv("HOME"),
+ "/" DATAFILE, NULL);
+
+ if( safe_strcmp(tmp, datafile) ) {
+@@ -119,17 +125,22 @@
+ set_filenames()
+ {
+ struct stat s;
++ char *config_dir = getenv("CONFIG_DIR");
++ if (config_dir) {
++ if (!datafile)
++ datafile = strconcat(config_dir, "/" CONFIG_DIR_DATAFILE, NULL);
++ rcfile = strconcat(config_dir, "/" CONFIG_DIR_RCFILE, NULL);
++ } else {
++ if( (stat(getenv("HOME"), &s)) == -1 || ! S_ISDIR(s.st_mode) ) {
++ fprintf(stderr,"%s is not a valid HOME directory\n", getenv("HOME") );
++ exit(1);
++ }
+
+- if( (stat(getenv("HOME"), &s)) == -1 || ! S_ISDIR(s.st_mode) ) {
+- fprintf(stderr,"%s is not a valid HOME directory\n", getenv("HOME") );
+- exit(1);
+- }
+-
+- if (!datafile)
+- datafile = strconcat(getenv("HOME"), "/" DATAFILE, NULL);
+-
+- rcfile = strconcat(getenv("HOME"), "/" RCFILE, NULL);
++ if (!datafile)
++ datafile = strconcat(getenv("HOME"), "/" DATAFILE, NULL);
+
++ rcfile = strconcat(getenv("HOME"), "/" RCFILE, NULL);
++ }
+ atexit(free_filenames);
+ }
+
+diff -Nru abook-0.4.17/abook.h abook-0.4.17.new/abook.h
+--- abook-0.4.17/abook.h Sat Sep 29 16:44:10 2001
++++ abook-0.4.17.new/abook.h Sat Mar 22 14:08:42 2003
+@@ -24,7 +24,7 @@
+
+ #define DEFAULT_UMASK 066
+ #define DATAFILE ".abook.addressbook"
+-
++#define CONFIG_DIR_DATAFILE "abook.addressbook"
+ /*
+ * some "abookwide" useful macros
+ */
+diff -Nru abook-0.4.17/options.h abook-0.4.17.new/options.h
+--- abook-0.4.17/options.h Mon Apr 23 14:58:43 2001
++++ abook-0.4.17.new/options.h Sat Mar 22 14:09:11 2003
+@@ -2,6 +2,7 @@
+ #define _OPTIONS_H
+
+ #define RCFILE ".abookrc"
++#define CONFIG_DIR_RCFILE "abookrc"
+ #define SYSWIDE_RCFILE "/etc/abookrc"
+
+ #include "conff.h"