From b4a3a4142147a725c186ae3dcbd3a44b26e2652f Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Fri, 28 Jun 2024 07:54:22 +0200 Subject: [PATCH] define boards --- constant.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++ constant.h | 2 ++ solitaire.c | 11 +++++--- 3 files changed, 86 insertions(+), 3 deletions(-) diff --git a/constant.c b/constant.c index 1bfd22b..09d804c 100644 --- a/constant.c +++ b/constant.c @@ -1,5 +1,81 @@ +#include +#include + #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: */ diff --git a/constant.h b/constant.h index e270e12..258a35f 100644 --- a/constant.h +++ b/constant.h @@ -3,6 +3,8 @@ #include "type.h" +board_t *getboard (char *name); + #endif /* __CONSTANT_H__ */ /* vim: set ts=4 sw=4 et: */ diff --git a/solitaire.c b/solitaire.c index 95ec4bc..6d8fe13 100644 --- a/solitaire.c +++ b/solitaire.c @@ -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' */ -- 2.30.2