X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fmakepattern.c;h=ef1a9371b5f59867aa50ce84da92e6e302a9cbe9;hb=6ec68dbedbcb4225cfe8e29e32675cb0fa486b34;hp=cf869e270d4f633b644b6d1fcf5d519ed8844e18;hpb=411d29916e5e7691271850a5f723e3b1f2d61721;p=gnushogi.git diff --git a/gnushogi/makepattern.c b/gnushogi/makepattern.c index cf869e2..ef1a937 100644 --- a/gnushogi/makepattern.c +++ b/gnushogi/makepattern.c @@ -4,6 +4,7 @@ * ---------------------------------------------------------------------- * Copyright (c) 1993, 1994, 1995 Matthias Mutz * Copyright (c) 1999 Michael Vanier and the Free Software Foundation + * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation * * GNU SHOGI is based on GNU CHESS * @@ -36,7 +37,6 @@ #define MAX_OPENING_SEQUENCE 20 #define MAX_PATTERN 200 -static char *patternfile = PATTERNFILE; small_short pattern_data[MAX_PATTERN_DATA]; /* minimal ShowMessage to avoid dependency on extraneous display code */ @@ -124,7 +124,7 @@ ScanPiece(char **s, small_short *side, /* determine column */ for (c = 0; c < NO_COLS; c++) { - if (**s == cxx[c]) + if (**s == COL_NAME(c)) { (*s)++; break; @@ -137,7 +137,7 @@ ScanPiece(char **s, small_short *side, /* determine row */ for (r = 0; r < NO_ROWS; r++) { - if (**s == rxx[r]) + if (**s == ROW_NAME(r)) { (*s)++; break; @@ -191,74 +191,73 @@ ScanPattern (char *s, short *pindex) void -ReadOpeningSequences (short *pindex) +ReadOpeningSequences (short *pindex, const char* patternfile) { FILE *fd; char s[256]; short max_pattern = 0; short max_opening_sequence = 0; - if ((fd = fopen (patternfile, "r")) == NULL) - fd = fopen ("gnushogi.pat", "r"); + fd = fopen (patternfile, "r"); - if (fd != NULL) - { - *pindex = 0; + if (fd == NULL) { + sprintf(s, "no pattern file '%s'", patternfile); + dsp->ShowMessage(s); + return; + } + + *pindex = 0; - while (fgets (s, 256, fd) != NULL) + while (fgets (s, 256, fd) != NULL) + { + if (*s == '#') + { + /* comment, skip line */ + } + else if (is_alpha(*s)) { - if (*s == '#') + if (max_opening_sequence++ > 0) { - /* comment, skip line */ + pattern_data[(*pindex)++] = END_OF_PATTERNS; } - else if (is_alpha(*s)) - { - if (max_opening_sequence++ > 0) - { - pattern_data[(*pindex)++] = END_OF_PATTERNS; - } - pattern_data[(*pindex)++] = ValueOfOpeningName(s); + pattern_data[(*pindex)++] = ValueOfOpeningName(s); + } + else + { + if (ScanPattern(s, pindex)) + { + dsp->ShowMessage("error in pattern sequence..."); + exit(1); } else { - if (ScanPattern(s, pindex)) - { - dsp->ShowMessage("error in pattern sequence..."); - exit(1); - } - else - { - max_pattern++; - } + max_pattern++; } } + } - pattern_data[(*pindex)++] = END_OF_PATTERNS; - pattern_data[(*pindex)++] = END_OF_SEQUENCES; + pattern_data[(*pindex)++] = END_OF_PATTERNS; + pattern_data[(*pindex)++] = END_OF_SEQUENCES; - sprintf(s, - "Pattern: %d bytes for %d sequences with %d patterns.\n", - *pindex, max_opening_sequence, max_pattern); - dsp->ShowMessage(s); + sprintf(s, + "Pattern: %d bytes for %d sequences with %d patterns.\n", + *pindex, max_opening_sequence, max_pattern); + dsp->ShowMessage(s); - fclose(fd); - } else { - sprintf(s, "no pattern file '%s'", patternfile); - dsp->ShowMessage(s); - } + fclose(fd); } void -WriteOpeningSequences (short pindex) +WriteOpeningSequences (short pindex, const char* patternincfile) { FILE *fd; short n = 0; short max_pattern = 0; short max_opening_sequence = 0; - fd = fopen ("pattern.inc", "w"); + fd = fopen (patternincfile, "w"); fprintf(fd, "#define MAX_PATTERN_DATA %d\n\n", pindex); fprintf(fd, "small_short pattern_data[MAX_PATTERN_DATA] =\n{\n");