new arguments to manage lang and board
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Tue, 28 May 2024 10:24:16 +0000 (12:24 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Tue, 28 May 2024 10:24:16 +0000 (12:24 +0200)
constant.c
scrabble.c

index 6f9345e1db39885033d508bb81359ca72e426a8e..82be83f054385d209e526960bf4acea99c9c270a 100644 (file)
@@ -19,7 +19,8 @@ static board_t _board_15x15_7 =
     "H8\0" /* CS */
 };
 
-static char _tiles_fr[106] = {
+#define NB_TILES_FR 102
+static char _tiles_fr[NB_TILES_FR] = {
     ' ', ' ',
     'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E',
     'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
@@ -49,7 +50,8 @@ static char _tiles_fr[106] = {
     'Z'
 };
 
-static lettervalue_t _lettervalues_fr[27] = {
+#define NB_LETTERVALUES_FR 27
+static lettervalue_t _lettervalues_fr[NB_LETTERVALUES_FR] = {
     {' ', 0},
     {'E', 1},
     {'A', 1},
@@ -98,9 +100,9 @@ bag_t *getbag (char *lang)
 
     if (strcmp (lang, "fr") == 0) {
         pt = &_bag;
-        pt->nbtiles = sizeof (_tiles_fr);
+        pt->nbtiles = NB_TILES_FR;
         pt->tiles = _tiles_fr;
-        pt->nbletters = 27;
+        pt->nbletters = NB_LETTERVALUES_FR;
         pt->lettervalues = _lettervalues_fr;
     }
 
index 4819e8cb7458c3075d5d5392fba4726867a0c0a4..8221e58b3171baa360cb41bfe958fa0dad835016 100644 (file)
 char *progname = NULL;
 char *version = "0.1";
 
-char *language = "FR";
+char *boardname = "15x15-7";
+char *language = "fr";
 
 int usage (int ret)
 {
     FILE *fd = ret ? stderr : stdout;
-    fprintf (fd, "usage: %s [-h] [-l lang] [-v level]\n", progname);
+    fprintf (fd, "usage: %s [-b board] [-h] [-l lang] [-v level]\n", progname);
+    fprintf (fd, " -b: board (%s)\n", boardname);
     fprintf (fd, " -h: help message\n");
     fprintf (fd, " -l: language (%s)\n", language);
     fprintf (fd, " -v: verbose level (%d)\n", verbose);
@@ -71,6 +73,15 @@ int main (int argc, char *argv[])
         }
         char c = arg[1];
         switch (c) {
+        case 'b':
+            arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+            if (arg) {
+                boardname = arg;
+            } else {
+                VERBOSE (ERROR, fprintf (stderr, "%s: no board specified\n", progname));
+                return usage (1);
+            }
+            break;
         case 'l':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
             if (arg) {
@@ -94,7 +105,17 @@ int main (int argc, char *argv[])
         }
     }
 
-    board_t *board = getboard ("15x15-7");
+    board_t *board = getboard (boardname);
+    if (!board) {
+        VERBOSE (ERROR, fprintf (stderr, "board not found\n"));
+        return 1;
+    }
+    bag_t *bag = getbag (language);
+    if (!bag) {
+        VERBOSE (ERROR, fprintf (stderr, "language not found\n"));
+        return 1;
+    }
+
     play_t *play = initplay (board->xsize, board->ysize);
     VERBOSE (DEBUG, printf ("play: 0x%p\nboard: 0x%p\n", play, board));