]>
Commit | Line | Data |
---|---|---|
3386af5f JB |
1 | --- Sjeng-Free-11.2/book.c.deb 2001-07-16 20:04:48.000000000 +0800 |
2 | +++ Sjeng-Free-11.2/book.c 2005-07-03 19:43:03.000000000 +0800 | |
3 | @@ -38,6 +40,10 @@ | |
4 | #define book_solid 4 /* = */ | |
5 | #define book_murky 5 /* ?! */ | |
6 | ||
7 | +#ifndef BOOK_PATH | |
8 | +#define BOOK_PATH "/usr/share/games/sjeng" | |
9 | +#endif | |
10 | + | |
11 | int init_book (void) { | |
12 | ||
13 | /* simply read all the book moves into a book array. The book will be | |
14 | @@ -63,27 +69,27 @@ | |
15 | ||
16 | if (Variant == Normal) | |
17 | { | |
18 | - if ((f_book = fopen ("normal.opn", "r")) == NULL) | |
19 | + if ((f_book = fopen (BOOK_PATH "/normal.opn", "r")) == NULL) | |
20 | return FALSE; | |
21 | } | |
22 | else if (Variant == Crazyhouse) | |
23 | { | |
24 | - if ((f_book = fopen ("zh.opn", "r")) == NULL) | |
25 | + if ((f_book = fopen (BOOK_PATH "/zh.opn", "r")) == NULL) | |
26 | return FALSE; | |
27 | } | |
28 | else if (Variant == Suicide) | |
29 | { | |
30 | - if ((f_book = fopen ("suicide.opn", "r")) == NULL) | |
31 | + if ((f_book = fopen (BOOK_PATH "/suicide.opn", "r")) == NULL) | |
32 | return FALSE; | |
33 | } | |
34 | else if (Variant == Losers) | |
35 | { | |
36 | - if ((f_book = fopen ("losers.opn", "r")) == NULL) | |
37 | + if ((f_book = fopen (BOOK_PATH "/losers.opn", "r")) == NULL) | |
38 | return FALSE; | |
39 | } | |
40 | else | |
41 | { | |
42 | - if ((f_book = fopen ("bug.opn", "r")) == NULL) | |
43 | + if ((f_book = fopen (BOOK_PATH "/bug.opn", "r")) == NULL) | |
44 | return FALSE; | |
45 | } | |
46 | ||
47 | --- Sjeng-Free-11.2/rcfile.c.deb 2001-09-28 18:19:18.000000000 +0800 | |
48 | +++ Sjeng-Free-11.2/rcfile.c 2005-07-03 20:09:07.000000000 +0800 | |
49 | @@ -26,6 +26,14 @@ | |
50 | #include "extvars.h" | |
51 | #include "config.h" | |
52 | ||
53 | +/* Local name is relative to user's home directory */ | |
54 | +#define RC_LOCALNAME "/.sjeng/sjeng.rc" | |
55 | +#ifndef SYSCONFDIR | |
56 | +#define RC_GLOBALNAME "/etc/sjeng.rc" | |
57 | +#else | |
58 | +#define RC_GLOBALNAME SYSCONFDIR "/sjeng.rc" | |
59 | +#endif | |
60 | + | |
61 | FILE *rcfile; | |
62 | char line[STR_BUFF]; | |
63 | ||
64 | @@ -51,8 +59,22 @@ | |
65 | { | |
66 | int i; | |
67 | unsigned int setc; | |
68 | - | |
69 | - if ((rcfile = fopen ("sjeng.rc", "r")) == NULL) | |
70 | + struct passwd *pw; | |
71 | + char rcname[STR_BUFF]; | |
72 | + | |
73 | + rcfile = NULL; | |
74 | + pw = getpwuid(getuid()); | |
75 | + if (pw != NULL && | |
76 | + strlen(pw->pw_dir) + strlen(RC_LOCALNAME) + 1 < STR_BUFF ) { | |
77 | + strcpy(rcname, pw->pw_dir); | |
78 | + strcat(rcname, RC_LOCALNAME); | |
79 | + rcfile = fopen(rcname, "r"); | |
80 | + } | |
81 | + if (rcfile == NULL) { | |
82 | + rcfile = fopen(RC_GLOBALNAME, "r"); | |
83 | + } | |
84 | + | |
85 | + if (rcfile == NULL) | |
86 | { | |
87 | printf("No configuration file!\n"); | |
88 | ||
89 | --- Sjeng-Free-11.2/sjeng.c.deb 2001-12-28 06:20:38.000000000 +0800 | |
90 | +++ Sjeng-Free-11.2/sjeng.c 2005-07-03 19:25:22.000000000 +0800 | |
91 | @@ -27,6 +27,11 @@ | |
92 | \r | |
93 | */\r | |
94 | \r | |
95 | +#include <sys/types.h>\r | |
96 | +#include <sys/stat.h>\r | |
97 | +#include <unistd.h>\r | |
98 | +#include <pwd.h>\r | |
99 | +\r | |
100 | #include "sjeng.h"\r | |
101 | #include "protos.h"\r | |
102 | #include "extvars.h"\r | |
103 | @@ -106,7 +111,11 @@ | |
104 | int braindeadinterface;\r | |
105 | int automode;\r | |
106 | rtime_t xstart_time;\r | |
107 | - \r | |
108 | + char lrn_name[STR_BUFF];\r | |
109 | + int path_len;\r | |
110 | + struct passwd *pw;\r | |
111 | + struct stat st;\r | |
112 | +\r | |
113 | read_rcfile();\r | |
114 | initialize_zobrist();\r | |
115 | \r | |
116 | @@ -119,60 +128,88 @@ | |
117 | if (!init_book())\r | |
118 | printf("No .OPN opening book found.\n");\r | |
119 | \r | |
120 | - if ((lrn_standard = fopen ("standard.lrn", "rb+")) == NULL)\r | |
121 | + pw = getpwuid(getuid());\r | |
122 | + if (pw == NULL) {\r | |
123 | + perror("Unable to get home directory");\r | |
124 | + exit(1);\r | |
125 | + }\r | |
126 | + path_len = strlen(pw->pw_dir) + strlen("/.sjeng/");\r | |
127 | + if (path_len + 21 >= STR_BUFF) {\r | |
128 | + fprintf(stderr,"Home directory path too long\n");\r | |
129 | + exit(1);\r | |
130 | + }\r | |
131 | + strcpy(lrn_name, pw->pw_dir);\r | |
132 | + strcat(lrn_name, "/.sjeng/");\r | |
133 | +\r | |
134 | + if (stat(lrn_name, &st) < 0) {\r | |
135 | + printf("Trying to create directory %s\n", lrn_name);\r | |
136 | + if (mkdir(lrn_name, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0) {\r | |
137 | + perror("Unable to create directory");\r | |
138 | + exit(1);\r | |
139 | + }\r | |
140 | + }\r | |
141 | +\r | |
142 | + strcpy(lrn_name + path_len, "standard.lrn");\r | |
143 | + if ((lrn_standard = fopen (lrn_name, "rb+")) == NULL)\r | |
144 | {\r | |
145 | printf("No standard learn file.\n");\r | |
146 | \r | |
147 | - if ((lrn_standard = fopen ("standard.lrn", "wb+")) == NULL)\r | |
148 | + if ((lrn_standard = fopen (lrn_name, "wb+")) == NULL)\r | |
149 | {\r | |
150 | printf("Error creating standard learn file.\n");\r | |
151 | }\r | |
152 | else\r | |
153 | {\r | |
154 | fclose(lrn_standard);\r | |
155 | - lrn_standard = fopen ("standard.lrn", "rb+");\r | |
156 | + lrn_standard = fopen (lrn_name, "rb+");\r | |
157 | }\r | |
158 | }\r | |
159 | - if ((lrn_zh = fopen ("bug.lrn", "rb+")) == NULL)\r | |
160 | +\r | |
161 | + strcpy(lrn_name + path_len, "bug.lrn");\r | |
162 | + if ((lrn_zh = fopen (lrn_name, "rb+")) == NULL)\r | |
163 | {\r | |
164 | printf("No crazyhouse learn file.\n");\r | |
165 | \r | |
166 | - if ((lrn_zh = fopen ("bug.lrn", "wb+")) == NULL)\r | |
167 | + if ((lrn_zh = fopen (lrn_name, "wb+")) == NULL)\r | |
168 | {\r | |
169 | printf("Error creating crazyhouse learn file.\n");\r | |
170 | }\r | |
171 | else\r | |
172 | {\r | |
173 | fclose(lrn_zh);\r | |
174 | - lrn_zh = fopen ("bug.lrn", "rb+");\r | |
175 | + lrn_zh = fopen (lrn_name, "rb+");\r | |
176 | }\r | |
177 | }\r | |
178 | - if ((lrn_suicide = fopen ("suicide.lrn", "rb+")) == NULL)\r | |
179 | +\r | |
180 | + strcpy(lrn_name + path_len, "suicide.lrn");\r | |
181 | + if ((lrn_suicide = fopen (lrn_name, "rb+")) == NULL)\r | |
182 | {\r | |
183 | printf("No suicide learn file.\n");\r | |
184 | \r | |
185 | - if ((lrn_suicide = fopen ("suicide.lrn", "wb+")) == NULL)\r | |
186 | + if ((lrn_suicide = fopen (lrn_name, "wb+")) == NULL)\r | |
187 | {\r | |
188 | printf("Error creating suicide learn file.\n");\r | |
189 | }\r | |
190 | else\r | |
191 | {\r | |
192 | fclose(lrn_suicide);\r | |
193 | - lrn_suicide = fopen ("suicide.lrn", "rb+");\r | |
194 | + lrn_suicide = fopen (lrn_name, "rb+");\r | |
195 | }\r | |
196 | }\r | |
197 | - if ((lrn_losers = fopen ("losers.lrn", "rb+")) == NULL)\r | |
198 | +\r | |
199 | + strcpy(lrn_name + path_len, "losers.lrn");\r | |
200 | + if ((lrn_losers = fopen (lrn_name, "rb+")) == NULL)\r | |
201 | {\r | |
202 | printf("No losers learn file.\n");\r | |
203 | \r | |
204 | - if ((lrn_losers = fopen ("losers.lrn", "wb+")) == NULL)\r | |
205 | + if ((lrn_losers = fopen (lrn_name, "wb+")) == NULL)\r | |
206 | {\r | |
207 | printf("Error creating losers learn file.\n");\r | |
208 | }\r | |
209 | else\r | |
210 | {\r | |
211 | fclose(lrn_losers);\r | |
212 | - lrn_losers = fopen ("losers.lrn", "rb+");\r | |
213 | + lrn_losers = fopen (lrn_name, "rb+");\r | |
214 | }\r | |
215 | }\r | |
216 | \r | |
217 | --- Sjeng-Free-11.2/newbook.c~ 2005-07-03 20:28:23.000000000 +0800 | |
218 | +++ Sjeng-Free-11.2/newbook.c 2005-07-03 21:00:52.000000000 +0800 | |
219 | @@ -35,6 +35,10 @@ | |
220 | #error You need the GNU DBM library (GDBM). Go to ftp.gnu.org | |
221 | #endif | |
222 | ||
223 | +#ifndef BOOK_PATH | |
224 | +#define BOOK_PATH "/usr/share/games/sjeng" | |
225 | +#endif | |
226 | + | |
227 | typedef struct | |
228 | { | |
229 | unsigned long hashkey; | |
230 | @@ -465,13 +469,13 @@ | |
231 | srand(time(0)); | |
232 | ||
233 | if (Variant == Normal) | |
234 | - binbook = gdbm_open("nbook.bin", 16384, GDBM_READER, 0, NULL); | |
235 | + binbook = gdbm_open(BOOK_PATH "/nbook.bin", 16384, GDBM_READER, 0, NULL); | |
236 | else if (Variant == Suicide) | |
237 | - binbook = gdbm_open("sbook.bin", 16384, GDBM_READER, 0, NULL); | |
238 | + binbook = gdbm_open(BOOK_PATH "/sbook.bin", 16384, GDBM_READER, 0, NULL); | |
239 | else if (Variant == Losers) | |
240 | - binbook = gdbm_open("lbook.bin", 16384, GDBM_READER, 0, NULL); | |
241 | + binbook = gdbm_open(BOOK_PATH "/lbook.bin", 16384, GDBM_READER, 0, NULL); | |
242 | else | |
243 | - binbook = gdbm_open("zbook.bin", 16384, GDBM_READER, 0, NULL); | |
244 | + binbook = gdbm_open(BOOK_PATH "/zbook.bin", 16384, GDBM_READER, 0, NULL); | |
245 | ||
246 | ||
247 | if (binbook == NULL) | |
248 | --- Sjeng-Free-11.2/Makefile.am.bak 2001-09-12 17:32:27.000000000 +0800 | |
249 | +++ Sjeng-Free-11.2/Makefile.am 2005-07-03 21:05:34.000000000 +0800 | |
250 | @@ -4,5 +4,9 @@ | |
251 | sjeng.c utils.c newbook.c proof.c neval.c rcfile.c\ | |
252 | leval.c draw.c see.c probe.c segtb.c\ | |
253 | protos.h extvars.h sjeng.h squares.h | |
254 | + | |
255 | +sjeng_CFLAGS = -DBOOK_PATH="\"$(datadir)/sjeng\"" \ | |
256 | + -DSYSCONFDIR="\"$(sysconfdir)\"" | |
257 | + | |
258 | EXTRA_DIST = TODO NEWS ChangeLog COPYING BUGS THANKS blob2.c sjeng.rc | |
259 | SUBDIRS = books tests | |
260 | --- Sjeng-Free-11.2/segtb.c.bak 2005-07-03 22:31:07.000000000 +0800 | |
261 | +++ Sjeng-Free-11.2/segtb.c 2005-07-03 22:55:02.000000000 +0800 | |
262 | @@ -30,13 +30,17 @@ | |
263 | #define FILE(x) ((x) & 7) | |
264 | #define RANK(x) ((x) >> 3) | |
265 | ||
266 | +#ifndef BOOK_PATH | |
267 | +#define BOOK_PATH "/usr/share/games/sjeng" | |
268 | +#endif | |
269 | + | |
270 | #define TWO_PIECE_SIZE 4096 | |
271 | #define TWO_PIECE_HASH(x,y,z) (((((x) << 5) | (y)) << 6) | (z)) | |
272 | -#define TWO_PIECE_FILE "stb/2pieces.bin" | |
273 | +#define TWO_PIECE_FILE BOOK_PATH "/stb/2pieces.bin" | |
274 | ||
275 | #define THREE_PIECE_SIZE (64*TWO_PIECE_SIZE) | |
276 | #define THREE_PIECE_HASH(x,y,z,w) (((((((x) << 5) | (y)) << 6) | (z)) << 6) | (w)) | |
277 | -#define THREE_PIECE_FILE "stb/xxx.bin" | |
278 | +#define THREE_PIECE_FILE BOOK_PATH "/stb/xxx.bin" | |
279 | ||
280 | #define TABLE_KEY(x,y,z) (((((x) << 3) | (y)) << 3) | (z)) | |
281 | ||
282 | @@ -510,9 +514,9 @@ | |
283 | /* generate the filename */ | |
284 | ||
285 | strcpy(fname, THREE_PIECE_FILE); | |
286 | - fname[4] = xpiece_char[w1_man]; | |
287 | - fname[5] = xpiece_char[b1_man]; | |
288 | - fname[6] = xpiece_char[b2_man]; | |
289 | + fname[strlen(BOOK_PATH)+5] = xpiece_char[w1_man]; | |
290 | + fname[strlen(BOOK_PATH)+6] = xpiece_char[b1_man]; | |
291 | + fname[strlen(BOOK_PATH)+7] = xpiece_char[b2_man]; | |
292 | ||
293 | if(!(f = fopen(fname,"w"))) return 0; | |
294 | ||
295 | @@ -971,9 +975,9 @@ | |
296 | /* generate the filename */ | |
297 | ||
298 | strcpy(fname, THREE_PIECE_FILE); | |
299 | - fname[4]= xpiece_char[w1_man]; | |
300 | - fname[5]= xpiece_char[b1_man]; | |
301 | - fname[6]= xpiece_char[b2_man]; | |
302 | + fname[strlen(BOOK_PATH)+5]= xpiece_char[w1_man]; | |
303 | + fname[strlen(BOOK_PATH)+6]= xpiece_char[b1_man]; | |
304 | + fname[strlen(BOOK_PATH)+7]= xpiece_char[b2_man]; | |
305 | ||
306 | if(!(f = fopen(fname,"r"))) return 0; | |
307 |