Moggy Patterns: Add block side cut
[pachi.git] / joseki / base.c
blob19c16a0b45861a4065b81f60814fd1342ad5989a
1 #include <assert.h>
2 #include <stdio.h>
3 #include <stdlib.h>
5 #include "board.h"
6 #include "debug.h"
7 #include "move.h"
8 #include "joseki/base.h"
11 struct joseki joseki_pats[1 << joseki_hash_bits];
13 void
14 joseki_load(void)
16 FILE *f = fopen("pachijoseki.dat", "r");
17 if (!f) return;
19 char linebuf[1024];
20 while (fgets(linebuf, 1024, f)) {
21 char *line = linebuf;
23 hash_t h = strtoull(line, &line, 16);
24 while (isspace(*line)) line++;
25 enum stone color = *line++ == 'b' ? S_BLACK : S_WHITE;
26 while (isspace(*line)) line++;
28 /* Get count. */
29 char *cs = strrchr(line, ' '); assert(cs);
30 *cs++ = 0;
31 int count = atoi(cs);
33 coord_t **ccp = &joseki_pats[h].moves[color - 1];
34 assert(!*ccp);
35 *ccp = calloc2(count + 1, sizeof(coord_t));
36 coord_t *cc = *ccp;
37 while (*line) {
38 assert(cc - *ccp < count);
39 coord_t *c = str2coord(line, 21 /* XXX */);
40 *cc++ = *c;
41 coord_done(c);
42 line += strcspn(line, " ");
43 line += strspn(line, " ");
45 *cc = pass;
48 fclose(f);