XBoard: teach about xboard move notation.
[gnushogi.git] / gnushogi / makepattern.c
index cf869e2..b42a4d1 100644 (file)
@@ -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,8 @@
 #define MAX_OPENING_SEQUENCE 20
 #define MAX_PATTERN          200
 
-static char *patternfile = PATTERNFILE;
+short xboard = false;
+
 small_short pattern_data[MAX_PATTERN_DATA];
 
 /* minimal ShowMessage to avoid dependency on extraneous display code */
@@ -124,7 +126,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 +139,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 +193,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;
+    }
 
-        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))
-                {
-                    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");