define boards
authorLaurent Mazet <mazet@softndesign.org>
Fri, 28 Jun 2024 05:54:22 +0000 (07:54 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Fri, 28 Jun 2024 05:54:22 +0000 (07:54 +0200)
constant.c
constant.h
solitaire.c

index 1bfd22bc16b27c5534c2eb53b990bde85f98f190..09d804cb9a2309e2e428a7ac18511841b714e5f0 100644 (file)
@@ -1,5 +1,81 @@
+#include <stdio.h>
+#include <string.h>
+
 #include "type.h"
 
 #include "constant.h"
 
+board_t _board_french = {7, 7,
+    "  XXX  "
+    " XXXXX "
+    "XXXOXXX"
+    "XXXXXXX"
+    "XXXXXXX"
+    " XXXXX "
+    "  XXX  "};
+
+board_t _board_german = {9, 9,
+    "   XXX   "
+    "   XXX   "
+    "   XXX   "
+    "XXXXXXXXX"
+    "XXXXOXXXX"
+    "XXXXXXXXX"
+    "   XXX   "
+    "   XXX   "
+    "   XXX   "};
+
+board_t _board_assymetric = {8, 9,
+    "  XXX   "
+    "  XXX   "
+    "  XXX   "
+    "XXXXXXXX"
+    "XXXOXXXX"
+    "XXXXXXXX"
+    "  XXX   "
+    "  XXX   "
+    "  XXX   "};
+
+board_t _board_english = {7, 7,
+    "  XXX  "
+    "  XXX  "
+    "XXXXXXX"
+    "XXXOXXX"
+    "XXXXXXX"
+    "  XXX  "
+    "  XXX  "};
+
+board_t _board_diamond = {9, 9,
+    "    X    "
+    "   XXX   "
+    "  XXXXx  "
+    " XXXXXXX "
+    "XXXXOXXXX"
+    " XXXXXXX "
+    "  XXXXX  "
+    "   XXX   "
+    "    X    "};
+
+board_t *getboard (char *name)
+{
+    board_t *pt = NULL;
+
+    if (strcmp (name, "french") == 0) {
+        pt = &_board_french;
+    } else if (strcmp (name, "german") == 0) {
+        pt = &_board_german;
+    } else if (strcmp (name, "assymetric") == 0) {
+        pt = &_board_assymetric;
+    } else if (strcmp (name, "english") == 0) {
+        pt = &_board_english;
+    } else if (strcmp (name, "diamond") == 0) {
+        pt = &_board_diamond;
+    } else if (strcmp (name, "list") == 0) {
+        printf ("board: french german assymetric english diamon\n");
+        pt = (board_t *)(-1);
+    }
+
+    return pt;
+}
+
 /* vim: set ts=4 sw=4 et: */
index e270e129c300189dd292ed5c15d5ce470d72b28c..258a35ff3525d545fe7ebf557a23bb2e4440a01e 100644 (file)
@@ -3,6 +3,8 @@
 
 #include "type.h"
 
+board_t *getboard (char *name);
+
 #endif /* __CONSTANT_H__ */
 
 /* vim: set ts=4 sw=4 et: */
index 95ec4bc0343dd6c7c6f2209e649563c23bdcb6b3..6d8fe132a804c9b0186eeea1e127586c806746ba 100644 (file)
@@ -20,7 +20,7 @@
 char *progname = NULL;
 char *version = "0.1";
 
-char *boardname = NULL;
+char *boardname = "french";
 char *filename = NULL;
 
 int xoffset = 1;
@@ -41,7 +41,7 @@ int usage (int ret)
 {
     FILE *fd = ret ? stderr : stdout;
     fprintf (fd, "usage: %s [-b board] [-f file] [-h] [-v level]\n", progname);
-    fprintf (fd, " -b: board name (%s)\n", boardname);
+    fprintf (fd, " -b: board name (%s|list)\n", boardname);
     fprintf (fd, " -h: help message\n");
     fprintf (fd, " -f: file name (%s)\n", (filename) ? filename : "none");
     fprintf (fd, " -v: verbose level (%d)\n", verbose);
@@ -105,7 +105,11 @@ int main (int argc, char *argv[])
     /* load playground */
     board_t *board = NULL;
     if (filename) {
-    } else if (filename) {
+    } else if (boardname) {
+        board = getboard (boardname);
+        if (board == (board_t *)(-1)) {
+            return 0;
+        }
     }
     if (board == NULL) {
         return 1;
@@ -199,6 +203,7 @@ int main (int argc, char *argv[])
 
 /* test: solitaire.exe -b 2>&1 | grep 'no board' */
 /* test: solitaire.exe -b bogus 2>&1 | grep 'unkonwn board' */
+/* test: solitaire.exe -b list | grep 'board:' */
 /* test: solitaire.exe -f 2>&1 | grep 'no file' */
 /* test: solitaire.exe -f nofile.sol 2>&1 | grep "can't read file" */
 /* test: solitaire.exe -f bogus.sol 2>&1 | grep 'incorrect file' */