fix most issues on restore function
authorLaurent Mazet <mazet@softndesign.org>
Tue, 18 Jun 2024 22:57:58 +0000 (00:57 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 18 Jun 2024 22:57:58 +0000 (00:57 +0200)
function.c
function.h
scrabble.c

index ebd09cf928e7de095aa15547efdc946b2045bd5f..692c52fc1910345debdba905d544222bd2d54df9 100644 (file)
@@ -122,24 +122,23 @@ void freedraw (draw_t *draw)
     free (draw);
 }
 
-draw_t *retrievetiles (draw_t *draw, int nbtiles, draw_t *game, int mode)
+void retrievetiles (draw_t *draw, draw_t *game, int mode)
 {
-    draw_t *ret = (game == NULL) ? newdraw (nbtiles) : game;
     int i;
     if (mode) {
-        for (i = 0; i < ret->nbtiles; i++) {
-            if (ret->tiles[i] != ' ') {
-                draw->tiles[draw->nbtiles++] = ret->tiles[i];
-                ret->tiles[i] = ' ';
+        for (i = 0; i < game->nbtiles; i++) {
+            if (game->tiles[i] != ' ') {
+                draw->tiles[draw->nbtiles++] = game->tiles[i];
+                game->tiles[i] = ' ';
             }
         }
     }
-    for (i = 0; (i < ret->nbtiles) && (draw->nbtiles > 0); i++) {
-        if (ret->tiles[i] != ' ') {
+    for (i = 0; (i < game->nbtiles) && (draw->nbtiles > 0); i++) {
+        if (game->tiles[i] != ' ') {
             continue;
         }
         int j = rand () % draw->nbtiles;
-        ret->tiles[i] = draw->tiles[j];
+        game->tiles[i] = draw->tiles[j];
         if (j < draw->nbtiles - 1) {
             char *pt = draw->tiles;
             memmove(pt + j, pt + j + 1, draw->nbtiles - j - 1);
@@ -147,8 +146,7 @@ draw_t *retrievetiles (draw_t *draw, int nbtiles, draw_t *game, int mode)
         draw->nbtiles--;
         draw->tiles[draw->nbtiles] = '\0';
     }
-    ret->index = -1;
-    return ret;
+    game->index = -1;
 }
 
 char getnextletter (draw_t *game)
@@ -596,7 +594,7 @@ int writedata (char *pattern, char *data)
         fclose (fd);
         ret = (n == strlen (data));
     } else {
-        VERBOSE (WARNING, printf ("Can't write file (%s)\n", name));
+        VERBOSE (WARNING, printf ("can't write file (%s)\n", name));
     }
 
     free (name);
@@ -645,7 +643,7 @@ char *atos (char *str)
 
 int restoredata (char *str, int *nbplayers, board_t **board, bag_t **bag, play_t *play, draw_t *draw, draw_t **game, int *n, play_t **turn, int *score)
 {
-    int ret = 1;
+    int ret = 0;
 
     char *saveptr1, *saveptr2;
 
@@ -667,7 +665,7 @@ int restoredata (char *str, int *nbplayers, board_t **board, bag_t **bag, play_t
             *bag = getbag (atos (value));
         } else if (strcmp (name,  "play->tab") == 0) {
             strcpy (play->tab, atos (value));
-        } else if (strcmp (name,  "draw->ntiles") == 0) {
+        } else if (strcmp (name,  "draw->nbtiles") == 0) {
             draw->nbtiles = atoi (value);
         } else if (strcmp (name,  "draw->tiles") == 0) {
             strcpy (draw->tiles, atos (value));
@@ -724,8 +722,7 @@ int restoredata (char *str, int *nbplayers, board_t **board, bag_t **bag, play_t
             turn[i]->xsize = (*board)->xsize;
             turn[i]->ysize = (*board)->ysize;
         }
-    } else {
-        ret = 0;
+        ret = 1;
     }
 
     return ret;
index 3fe5fbe407797d1dfcc4662a016c650da8b35086..b21943ee8f06e7278b82f5f21cc81ff8d3ad5e22 100644 (file)
@@ -33,7 +33,7 @@ void freedraw (draw_t *draw);
 
 void cleanplay (play_t *play);
 
-draw_t *retrievetiles (draw_t *draw, int nbtiles, draw_t *game, int mode);
+void retrievetiles (draw_t *draw, draw_t *game, int mode);
 
 void freedraw (draw_t *draw);
 
index 64c0e67d194435daf31b4d00d6d52eb163097ca2..c98a90f2d19f81b10b79672b232f0f877649a12f 100644 (file)
@@ -94,33 +94,30 @@ int main (int argc, char *argv[])
         switch (c) {
         case 'b':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
-            if (arg) {
-                boardname = arg;
-            } else {
+            if (arg == NULL) {
                 VERBOSE (ERROR, fprintf (stderr, "%s: no board specified\n", progname));
                 return usage (1);
             }
+            boardname = arg;
             break;
         case 'c':
             cache = 1;
             break;
         case 'd':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
-            if (arg) {
-                dict = arg;
-            } else {
+            if (arg == NULL) {
                 VERBOSE (ERROR, fprintf (stderr, "%s: no dictionary specified\n", progname));
                 return usage (1);
             }
+            dict = arg;
             break;
         case 'l':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
-            if (arg) {
-                language = arg;
-            } else {
+            if (arg == NULL) {
                 VERBOSE (ERROR, fprintf (stderr, "%s: no language specified\n", progname));
                 return usage (1);
             }
+            language = arg;
             break;
         case 'n':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
@@ -195,8 +192,11 @@ int main (int argc, char *argv[])
     draw_t *draw = initdraw (bag);
     draw_t **game = (draw_t **) calloc (MAXNBPLAYERS, sizeof (draw_t *));
     CHECKALLOC (game);
+    for (n = 0; n < MAXNBPLAYERS; n++) {
+        game[n] = newdraw (board->length);
+    }
     for (n = 0; n < nbplayers; n++) {
-        game[n] = retrievetiles (draw, board->length, NULL, 0);
+        retrievetiles (draw, game[n], 0);
     }
     VERBOSE (DEBUG, printf ("bag: 0x%p\ndraw: 0x%p\ngame: 0x%p\ngame[0]: 0x%p", bag, draw, game, game[0]));
 
@@ -295,7 +295,7 @@ int main (int argc, char *argv[])
         case '\n':
         case '\r':
         case 'd':
-            game[n] = retrievetiles (draw, board->length, game[n], isturnempty (turn[n]));
+            retrievetiles (draw, game[n], isturnempty (turn[n]));
             score[n] += nbpoints;
             drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 0);
             cleanplay (turn[n]);
@@ -393,7 +393,7 @@ int main (int argc, char *argv[])
     endwin ();
 
     freeplay (play);
-    for (n = 0; n < nbplayers; n++) {
+    for (n = 0; n < MAXNBPLAYERS; n++) {
         freeplay (turn[n]);
         freedraw (game[n]);
     }
@@ -435,5 +435,8 @@ int main (int argc, char *argv[])
 /* test: echo q | scrabble.exe -v 5 */
 /* test: echo vlvlvlvlvlvdkjjjjvlvlvlvlvlvdjjjjjvlvlvlvlvlvlvdq | scrabble.exe -l en -d dict/en.dict */
 /* test: echo vlvlvlvlvlvdkjjjjvlvlvlvlvlvdkvjvjvjvjvjvjvdklllvlvxccvq | scrabble.exe -d dict/fr.dict -c */
+/* test: echo vlvlvllvdkjjjjvlvlvsq | scrabble.exe -n 4 -s test-%.scr */
+/* test: echo divsdsdsdsq | scrabble.exe -r `ls -1t test-*.scr | head -1` */
+/* test: rm -f {test,save}-*.scr */
 
 /* vim: set ts=4 sw=4 et: */