From 8aa7d9cd28cbbc74e5d77d3970ebeaa576698b8a Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Wed, 19 Jun 2024 00:57:58 +0200 Subject: [PATCH] fix most issues on restore function --- function.c | 29 +++++++++++++---------------- function.h | 2 +- scrabble.c | 27 +++++++++++++++------------ 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/function.c b/function.c index ebd09cf..692c52f 100644 --- a/function.c +++ b/function.c @@ -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; diff --git a/function.h b/function.h index 3fe5fbe..b21943e 100644 --- a/function.h +++ b/function.h @@ -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); diff --git a/scrabble.c b/scrabble.c index 64c0e67..c98a90f 100644 --- a/scrabble.c +++ b/scrabble.c @@ -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: */ -- 2.30.2