155 lines
5.4 KiB
C
155 lines
5.4 KiB
C
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
|
||
|
* This is GNU Go, a Go program. Contact gnugo@gnu.org, or see *
|
||
|
* http://www.gnu.org/software/gnugo/ for more information. *
|
||
|
* *
|
||
|
* Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, *
|
||
|
* 2008 and 2009 by the Free Software Foundation. *
|
||
|
* *
|
||
|
* 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 - version 3 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 in file COPYING 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., 51 Franklin Street, Fifth Floor, *
|
||
|
* Boston, MA 02111, USA. *
|
||
|
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
|
||
|
/* Compile Monte Carlo local pattern database. This produces mcpat.c. */
|
||
|
|
||
|
/* See also mc_*.db and engine/montecarlo.c. */
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
#include "liberty.h"
|
||
|
|
||
|
/* Trim leading path, a possible mc_ prefix, and a possible .db suffix
|
||
|
* from the filename. The caller has to free the returned pointer when
|
||
|
* it's no longer needed.
|
||
|
*
|
||
|
* FIXME: This code is quite ugly and should be possible to clean up.
|
||
|
*/
|
||
|
static char *
|
||
|
copy_and_trim_name(const char *filename)
|
||
|
{
|
||
|
int name_length = strlen(filename);
|
||
|
char *name = malloc(name_length + 1);
|
||
|
char *start = name;
|
||
|
char *p;
|
||
|
char *name2;
|
||
|
|
||
|
strcpy(name, filename);
|
||
|
|
||
|
p = strrchr(name, '/');
|
||
|
if (p) {
|
||
|
p++;
|
||
|
name_length -= (p - name);
|
||
|
start = p;
|
||
|
}
|
||
|
|
||
|
if (strncmp(start, "mc_", 3) == 0) {
|
||
|
start += 3;
|
||
|
name_length -= 3;
|
||
|
}
|
||
|
|
||
|
if (strncmp(start + name_length - 3, ".db", 3) == 0)
|
||
|
start[name_length - 3] = '\0';
|
||
|
|
||
|
name2 = malloc(name_length + 1);
|
||
|
strcpy(name2, start);
|
||
|
free(name);
|
||
|
|
||
|
return name2;
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main(int argc, char *argv[])
|
||
|
{
|
||
|
int N = mc_get_size_of_pattern_values_table();
|
||
|
unsigned int *values;
|
||
|
int i;
|
||
|
int k;
|
||
|
char *name;
|
||
|
|
||
|
if (argc < 2) {
|
||
|
fprintf(stderr, "Usage: ...\n");
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
|
||
|
printf("\
|
||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\\\n\
|
||
|
* This is GNU Go, a Go program. Contact gnugo@gnu.org, or see *\n\
|
||
|
* http://www.gnu.org/software/gnugo/ for more information. *\n\
|
||
|
* *\n\
|
||
|
* Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, *\n\
|
||
|
* 2008 and 2009 by the Free Software Foundation. *\n\
|
||
|
* *\n\
|
||
|
* This program is free software; you can redistribute it and/or *\n\
|
||
|
* modify it under the terms of the GNU General Public License as *\n\
|
||
|
* published by the Free Software Foundation - version 3 *\n\
|
||
|
* or (at your option) any later version *\n\
|
||
|
* *\n\
|
||
|
* This program is distributed in the hope that it will be useful, *\n\
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *\n\
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *\n\
|
||
|
* GNU General Public License in file COPYING for more details. *\n\
|
||
|
* *\n\
|
||
|
* You should have received a copy of the GNU General Public *\n\
|
||
|
* License along with this program; if not, write to the Free *\n\
|
||
|
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *\n\
|
||
|
* Boston, MA 02111, USA. *\n\
|
||
|
\\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n");
|
||
|
|
||
|
printf("/* This file is automatically generated by mkmcpat. Do not\n");
|
||
|
printf(" * edit it directly. Instead, edit the pattern databases\n");
|
||
|
printf(" * mc_*.db.\n");
|
||
|
printf(" */\n\n");
|
||
|
printf("#include <stdio.h> /* for NULL */\n");
|
||
|
printf("#include \"liberty.h\"\n\n");
|
||
|
printf("#include \"patterns.h\"\n\n");
|
||
|
|
||
|
values = malloc(N * sizeof(*values));
|
||
|
|
||
|
for (i = 1; i < argc; i++) {
|
||
|
if (!mc_load_patterns_from_db(argv[i], values))
|
||
|
exit(EXIT_FAILURE);
|
||
|
|
||
|
name = copy_and_trim_name(argv[i]);
|
||
|
|
||
|
printf("static const unsigned int %s_values[] = {\n", name);
|
||
|
for (k = 0; k < N; k++) {
|
||
|
printf("%u, ", values[k]);
|
||
|
if (k % 16 == 15)
|
||
|
printf("\n");
|
||
|
}
|
||
|
printf("\n};\n\n");
|
||
|
|
||
|
free(name);
|
||
|
}
|
||
|
|
||
|
printf("struct mc_pattern_database mc_pattern_databases[] = {\n");
|
||
|
for (i = 1; i < argc; i++) {
|
||
|
name = copy_and_trim_name(argv[i]);
|
||
|
printf(" {\"%s\", %s_values},\n", name, name);
|
||
|
free(name);
|
||
|
}
|
||
|
printf(" {NULL, NULL}};\n");
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Local Variables:
|
||
|
* tab-width: 8
|
||
|
* c-basic-offset: 2
|
||
|
* End:
|
||
|
*/
|