Merge branch 'maint'
[gnushogi.git] / gnushogi / makepattern.c
index 0d510d9..6dbca38 100644 (file)
 #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 */
-void
-ShowMessage(char *s)
+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')) \
@@ -188,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;
+    }
 
-        while (fgets (s, 256, fd) != NULL)
+    *pindex = 0;
+
+    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))
-                {
-                    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");