--- /dev/null
+--- Sjeng-Free-11.2/book.c.deb 2001-07-16 20:04:48.000000000 +0800
++++ Sjeng-Free-11.2/book.c 2005-07-03 19:43:03.000000000 +0800
+@@ -38,6 +40,10 @@
+ #define book_solid 4 /* = */
+ #define book_murky 5 /* ?! */
+
++#ifndef BOOK_PATH
++#define BOOK_PATH "/usr/share/games/sjeng"
++#endif
++
+ int init_book (void) {
+
+ /* simply read all the book moves into a book array. The book will be
+@@ -63,27 +69,27 @@
+
+ if (Variant == Normal)
+ {
+- if ((f_book = fopen ("normal.opn", "r")) == NULL)
++ if ((f_book = fopen (BOOK_PATH "/normal.opn", "r")) == NULL)
+ return FALSE;
+ }
+ else if (Variant == Crazyhouse)
+ {
+- if ((f_book = fopen ("zh.opn", "r")) == NULL)
++ if ((f_book = fopen (BOOK_PATH "/zh.opn", "r")) == NULL)
+ return FALSE;
+ }
+ else if (Variant == Suicide)
+ {
+- if ((f_book = fopen ("suicide.opn", "r")) == NULL)
++ if ((f_book = fopen (BOOK_PATH "/suicide.opn", "r")) == NULL)
+ return FALSE;
+ }
+ else if (Variant == Losers)
+ {
+- if ((f_book = fopen ("losers.opn", "r")) == NULL)
++ if ((f_book = fopen (BOOK_PATH "/losers.opn", "r")) == NULL)
+ return FALSE;
+ }
+ else
+ {
+- if ((f_book = fopen ("bug.opn", "r")) == NULL)
++ if ((f_book = fopen (BOOK_PATH "/bug.opn", "r")) == NULL)
+ return FALSE;
+ }
+
+--- Sjeng-Free-11.2/rcfile.c.deb 2001-09-28 18:19:18.000000000 +0800
++++ Sjeng-Free-11.2/rcfile.c 2005-07-03 20:09:07.000000000 +0800
+@@ -26,6 +26,14 @@
+ #include "extvars.h"
+ #include "config.h"
+
++/* Local name is relative to user's home directory */
++#define RC_LOCALNAME "/.sjeng/sjeng.rc"
++#ifndef SYSCONFDIR
++#define RC_GLOBALNAME "/etc/sjeng.rc"
++#else
++#define RC_GLOBALNAME SYSCONFDIR "/sjeng.rc"
++#endif
++
+ FILE *rcfile;
+ char line[STR_BUFF];
+
+@@ -51,8 +59,22 @@
+ {
+ int i;
+ unsigned int setc;
+-
+- if ((rcfile = fopen ("sjeng.rc", "r")) == NULL)
++ struct passwd *pw;
++ char rcname[STR_BUFF];
++
++ rcfile = NULL;
++ pw = getpwuid(getuid());
++ if (pw != NULL &&
++ strlen(pw->pw_dir) + strlen(RC_LOCALNAME) + 1 < STR_BUFF ) {
++ strcpy(rcname, pw->pw_dir);
++ strcat(rcname, RC_LOCALNAME);
++ rcfile = fopen(rcname, "r");
++ }
++ if (rcfile == NULL) {
++ rcfile = fopen(RC_GLOBALNAME, "r");
++ }
++
++ if (rcfile == NULL)
+ {
+ printf("No configuration file!\n");
+
+--- Sjeng-Free-11.2/sjeng.c.deb 2001-12-28 06:20:38.000000000 +0800
++++ Sjeng-Free-11.2/sjeng.c 2005-07-03 19:25:22.000000000 +0800
+@@ -27,6 +27,11 @@
+ \r
+ */\r
+ \r
++#include <sys/types.h>\r
++#include <sys/stat.h>\r
++#include <unistd.h>\r
++#include <pwd.h>\r
++\r
+ #include "sjeng.h"\r
+ #include "protos.h"\r
+ #include "extvars.h"\r
+@@ -106,7 +111,11 @@
+ int braindeadinterface;\r
+ int automode;\r
+ rtime_t xstart_time;\r
+- \r
++ char lrn_name[STR_BUFF];\r
++ int path_len;\r
++ struct passwd *pw;\r
++ struct stat st;\r
++\r
+ read_rcfile();\r
+ initialize_zobrist();\r
+ \r
+@@ -119,60 +128,88 @@
+ if (!init_book())\r
+ printf("No .OPN opening book found.\n");\r
+ \r
+- if ((lrn_standard = fopen ("standard.lrn", "rb+")) == NULL)\r
++ pw = getpwuid(getuid());\r
++ if (pw == NULL) {\r
++ perror("Unable to get home directory");\r
++ exit(1);\r
++ }\r
++ path_len = strlen(pw->pw_dir) + strlen("/.sjeng/");\r
++ if (path_len + 21 >= STR_BUFF) {\r
++ fprintf(stderr,"Home directory path too long\n");\r
++ exit(1);\r
++ }\r
++ strcpy(lrn_name, pw->pw_dir);\r
++ strcat(lrn_name, "/.sjeng/");\r
++\r
++ if (stat(lrn_name, &st) < 0) {\r
++ printf("Trying to create directory %s\n", lrn_name);\r
++ if (mkdir(lrn_name, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0) {\r
++ perror("Unable to create directory");\r
++ exit(1);\r
++ }\r
++ }\r
++\r
++ strcpy(lrn_name + path_len, "standard.lrn");\r
++ if ((lrn_standard = fopen (lrn_name, "rb+")) == NULL)\r
+ {\r
+ printf("No standard learn file.\n");\r
+ \r
+- if ((lrn_standard = fopen ("standard.lrn", "wb+")) == NULL)\r
++ if ((lrn_standard = fopen (lrn_name, "wb+")) == NULL)\r
+ {\r
+ printf("Error creating standard learn file.\n");\r
+ }\r
+ else\r
+ {\r
+ fclose(lrn_standard);\r
+- lrn_standard = fopen ("standard.lrn", "rb+");\r
++ lrn_standard = fopen (lrn_name, "rb+");\r
+ }\r
+ }\r
+- if ((lrn_zh = fopen ("bug.lrn", "rb+")) == NULL)\r
++\r
++ strcpy(lrn_name + path_len, "bug.lrn");\r
++ if ((lrn_zh = fopen (lrn_name, "rb+")) == NULL)\r
+ {\r
+ printf("No crazyhouse learn file.\n");\r
+ \r
+- if ((lrn_zh = fopen ("bug.lrn", "wb+")) == NULL)\r
++ if ((lrn_zh = fopen (lrn_name, "wb+")) == NULL)\r
+ {\r
+ printf("Error creating crazyhouse learn file.\n");\r
+ }\r
+ else\r
+ {\r
+ fclose(lrn_zh);\r
+- lrn_zh = fopen ("bug.lrn", "rb+");\r
++ lrn_zh = fopen (lrn_name, "rb+");\r
+ }\r
+ }\r
+- if ((lrn_suicide = fopen ("suicide.lrn", "rb+")) == NULL)\r
++\r
++ strcpy(lrn_name + path_len, "suicide.lrn");\r
++ if ((lrn_suicide = fopen (lrn_name, "rb+")) == NULL)\r
+ {\r
+ printf("No suicide learn file.\n");\r
+ \r
+- if ((lrn_suicide = fopen ("suicide.lrn", "wb+")) == NULL)\r
++ if ((lrn_suicide = fopen (lrn_name, "wb+")) == NULL)\r
+ {\r
+ printf("Error creating suicide learn file.\n");\r
+ }\r
+ else\r
+ {\r
+ fclose(lrn_suicide);\r
+- lrn_suicide = fopen ("suicide.lrn", "rb+");\r
++ lrn_suicide = fopen (lrn_name, "rb+");\r
+ }\r
+ }\r
+- if ((lrn_losers = fopen ("losers.lrn", "rb+")) == NULL)\r
++\r
++ strcpy(lrn_name + path_len, "losers.lrn");\r
++ if ((lrn_losers = fopen (lrn_name, "rb+")) == NULL)\r
+ {\r
+ printf("No losers learn file.\n");\r
+ \r
+- if ((lrn_losers = fopen ("losers.lrn", "wb+")) == NULL)\r
++ if ((lrn_losers = fopen (lrn_name, "wb+")) == NULL)\r
+ {\r
+ printf("Error creating losers learn file.\n");\r
+ }\r
+ else\r
+ {\r
+ fclose(lrn_losers);\r
+- lrn_losers = fopen ("losers.lrn", "rb+");\r
++ lrn_losers = fopen (lrn_name, "rb+");\r
+ }\r
+ }\r
+ \r
+--- Sjeng-Free-11.2/newbook.c~ 2005-07-03 20:28:23.000000000 +0800
++++ Sjeng-Free-11.2/newbook.c 2005-07-03 21:00:52.000000000 +0800
+@@ -35,6 +35,10 @@
+ #error You need the GNU DBM library (GDBM). Go to ftp.gnu.org
+ #endif
+
++#ifndef BOOK_PATH
++#define BOOK_PATH "/usr/share/games/sjeng"
++#endif
++
+ typedef struct
+ {
+ unsigned long hashkey;
+@@ -465,13 +469,13 @@
+ srand(time(0));
+
+ if (Variant == Normal)
+- binbook = gdbm_open("nbook.bin", 16384, GDBM_READER, 0, NULL);
++ binbook = gdbm_open(BOOK_PATH "/nbook.bin", 16384, GDBM_READER, 0, NULL);
+ else if (Variant == Suicide)
+- binbook = gdbm_open("sbook.bin", 16384, GDBM_READER, 0, NULL);
++ binbook = gdbm_open(BOOK_PATH "/sbook.bin", 16384, GDBM_READER, 0, NULL);
+ else if (Variant == Losers)
+- binbook = gdbm_open("lbook.bin", 16384, GDBM_READER, 0, NULL);
++ binbook = gdbm_open(BOOK_PATH "/lbook.bin", 16384, GDBM_READER, 0, NULL);
+ else
+- binbook = gdbm_open("zbook.bin", 16384, GDBM_READER, 0, NULL);
++ binbook = gdbm_open(BOOK_PATH "/zbook.bin", 16384, GDBM_READER, 0, NULL);
+
+
+ if (binbook == NULL)
+--- Sjeng-Free-11.2/Makefile.am.bak 2001-09-12 17:32:27.000000000 +0800
++++ Sjeng-Free-11.2/Makefile.am 2005-07-03 21:05:34.000000000 +0800
+@@ -4,5 +4,9 @@
+ sjeng.c utils.c newbook.c proof.c neval.c rcfile.c\
+ leval.c draw.c see.c probe.c segtb.c\
+ protos.h extvars.h sjeng.h squares.h
++
++sjeng_CFLAGS = -DBOOK_PATH="\"$(datadir)/sjeng\"" \
++ -DSYSCONFDIR="\"$(sysconfdir)\""
++
+ EXTRA_DIST = TODO NEWS ChangeLog COPYING BUGS THANKS blob2.c sjeng.rc
+ SUBDIRS = books tests
+--- Sjeng-Free-11.2/segtb.c.bak 2005-07-03 22:31:07.000000000 +0800
++++ Sjeng-Free-11.2/segtb.c 2005-07-03 22:55:02.000000000 +0800
+@@ -30,13 +30,17 @@
+ #define FILE(x) ((x) & 7)
+ #define RANK(x) ((x) >> 3)
+
++#ifndef BOOK_PATH
++#define BOOK_PATH "/usr/share/games/sjeng"
++#endif
++
+ #define TWO_PIECE_SIZE 4096
+ #define TWO_PIECE_HASH(x,y,z) (((((x) << 5) | (y)) << 6) | (z))
+-#define TWO_PIECE_FILE "stb/2pieces.bin"
++#define TWO_PIECE_FILE BOOK_PATH "/stb/2pieces.bin"
+
+ #define THREE_PIECE_SIZE (64*TWO_PIECE_SIZE)
+ #define THREE_PIECE_HASH(x,y,z,w) (((((((x) << 5) | (y)) << 6) | (z)) << 6) | (w))
+-#define THREE_PIECE_FILE "stb/xxx.bin"
++#define THREE_PIECE_FILE BOOK_PATH "/stb/xxx.bin"
+
+ #define TABLE_KEY(x,y,z) (((((x) << 3) | (y)) << 3) | (z))
+
+@@ -510,9 +514,9 @@
+ /* generate the filename */
+
+ strcpy(fname, THREE_PIECE_FILE);
+- fname[4] = xpiece_char[w1_man];
+- fname[5] = xpiece_char[b1_man];
+- fname[6] = xpiece_char[b2_man];
++ fname[strlen(BOOK_PATH)+5] = xpiece_char[w1_man];
++ fname[strlen(BOOK_PATH)+6] = xpiece_char[b1_man];
++ fname[strlen(BOOK_PATH)+7] = xpiece_char[b2_man];
+
+ if(!(f = fopen(fname,"w"))) return 0;
+
+@@ -971,9 +975,9 @@
+ /* generate the filename */
+
+ strcpy(fname, THREE_PIECE_FILE);
+- fname[4]= xpiece_char[w1_man];
+- fname[5]= xpiece_char[b1_man];
+- fname[6]= xpiece_char[b2_man];
++ fname[strlen(BOOK_PATH)+5]= xpiece_char[w1_man];
++ fname[strlen(BOOK_PATH)+6]= xpiece_char[b1_man];
++ fname[strlen(BOOK_PATH)+7]= xpiece_char[b2_man];
+
+ if(!(f = fopen(fname,"r"))) return 0;
+