* ----------------------------------------------------------------------
* 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
*
#define MAX_OPENING_SEQUENCE 20
#define MAX_PATTERN 200
-char *patternfile = PATTERNFILE;
+short xboard = false;
+
+small_short pattern_data[MAX_PATTERN_DATA];
+
+/* minimal ShowMessage to avoid dependency on extraneous display code */
+static void
+Dummy_ShowMessage(char *format, ...)
+{
+ va_list ap;
+ va_start(ap, format);
+ vprintf(format, ap);
+ va_end(ap);
+}
+static struct display dummydsp = {
+ .ShowMessage = Dummy_ShowMessage,
+};
+struct display *dsp = &dummydsp;
#define is_digit(c) (((c) >= '0') && ((c) <= '9'))
#define is_alpha(c) ((((c) >= 'a') && ((c) <= 'z')) \
/* determine column */
for (c = 0; c < NO_COLS; c++)
{
- if (**s == cxx[c])
+ if (**s == COL_NAME(c))
{
(*s)++;
break;
/* determine row */
for (r = 0; r < NO_ROWS; r++)
{
- if (**s == rxx[r])
+ if (**s == ROW_NAME(r))
{
(*s)++;
break;
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;
+ }
- while (fgets (s, 256, fd) != NULL)
+ *pindex = 0;
+
+ while (fgets (s, 256, fd) != NULL)
+ {
+ if (*s == '#')
{
- if (*s == '#')
+ /* comment, skip line */
+ }
+ else if (is_alpha(*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))
- {
- 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);
- 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);
- 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");