Get rid of cxx/rxx in favor of COL/ROW_NAME.
[gnushogi.git] / gnushogi / makepattern.c
index b2e618a..ef1a937 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
  *
@@ -14,8 +15,8 @@
  *
  * GNU Shogi 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; either version 1, or (at your option) any
- * later version.
+ * Free Software Foundation; either version 3 of the License,
+ * or (at your option) any later version.
  *
  * GNU Shogi is distributed in the hope that it will be useful, but WITHOUT
  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
@@ -23,8 +24,8 @@
  * for more details.
  *
  * You should have received a copy of the GNU General Public License along
- * with GNU Shogi; see the file COPYING.  If not, write to the Free
- * Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * with GNU Shogi; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
  * ----------------------------------------------------------------------
  *
  */
 #define MAX_OPENING_SEQUENCE 20
 #define MAX_PATTERN          200
 
-char *patternfile = PATTERNFILE;
+small_short pattern_data[MAX_PATTERN_DATA];
+
+/* minimal ShowMessage to avoid dependency on extraneous display code */
+static void
+Dummy_ShowMessage(char *s)
+{
+    printf("%s\n", s);
+}
+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')) \
@@ -112,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;
@@ -125,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;
@@ -179,79 +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 == '#')
         {
-            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;
 
-        if (NOT_CURSES)
-        {
-            sprintf(s,
-                    "Pattern: %d bytes for %d sequences with %d patterns.\n",
-                    *pindex, max_opening_sequence, max_pattern);
-            ShowMessage(s);
-        }
-        fclose(fd);
-    }
-    else if (NOT_CURSES)
-    {
-        sprintf(s, "no pattern file '%s'", patternfile);
-        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);
 }
 
 
 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");