first try to backup data
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Fri, 14 Jun 2024 16:57:11 +0000 (18:57 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Fri, 14 Jun 2024 16:57:11 +0000 (18:57 +0200)
function.c
function.h
scrabble.c

index fff192c19cdcca7772d3e8d670676ec14705df86..d121f1d01e6af414fe5296b11947dd56eaf3fc61 100644 (file)
@@ -36,7 +36,7 @@ play_t *initplay (int xsize, int ysize)
 {
     play_t *play = (play_t *) malloc (sizeof (play_t));
     CHECKALLOC (play);
-    play->tab = (char *) malloc (xsize * ysize);
+    play->tab = (char *) calloc (1, xsize * ysize + 1);
     CHECKALLOC (play->tab);
     memset (play->tab, ' ', xsize * ysize);
     play->xsize = xsize;
@@ -97,7 +97,7 @@ draw_t *newdraw (int nbtiles)
 {
     draw_t *draw = (draw_t *) malloc (sizeof (draw_t));
     CHECKALLOC (draw);
-    draw->tiles = (char *) calloc (1, nbtiles);
+    draw->tiles = (char *) calloc (1, nbtiles + 1);
     CHECKALLOC (draw->tiles);
     draw->nbtiles = nbtiles;
     return draw;
@@ -548,4 +548,39 @@ void checkspellingfromcache (word_t *words, char **listofwords)
     }
 }
 
+char *savedata (int nbplayers, char *lang, char *board, play_t *play, draw_t *draw, draw_t **game, int n, play_t **turn, int *score)
+{
+    int i;
+    char *buffer = (char *) calloc (10000, 1);
+    CHECKALLOC (buffer);
+
+    int l = sprintf (buffer, "nbplayers: %d\n", nbplayers);
+    l += sprintf (buffer + l, "lang: %s\n", lang);
+    l += sprintf (buffer + l, "board: %s\n", board);
+    l += sprintf (buffer + l, "play: %s\n", play->tab);
+    l += sprintf (buffer + l, "draw: %s\n", draw->tiles);
+    for (i = 0; i < nbplayers; i++) {
+        l += sprintf (buffer + l, "game[%d]: %s\n", i, game[i]->tiles);
+    }
+    l += sprintf (buffer + l, "n: %d\n", n);
+    l += sprintf (buffer + l, "turn[%d]: %s\n", n, turn[n]->tab);
+    for (i = 0; i < nbplayers; i++) {
+        l += sprintf (buffer + l, "score[%d]: %d\n", i, score[i]);
+    }
+
+    return buffer;
+}
+
+int writedata (char *filename, char *data)
+{
+    int ret = 0;
+    FILE *fd = fopen (filename, "w");
+    if (fd) {
+        fwrite (data, strlen (data), 1, fd);
+        fclose (fd);
+        ret = 1;
+    }
+    return ret;
+}
+
 /* vim: set ts=4 sw=4 et: */
index fa27ebbbe13e3336c08931f4b82c5927acfc711f..af612d306635806c884f8763fa44e14bcfca8abe 100644 (file)
@@ -63,6 +63,10 @@ void freecache (char **listofwords);
 
 void checkspellingfromcache (word_t *words, char **listofwords);
 
+char *savedata (int nbplayers, char *lang, char *board, play_t *play, draw_t *draw, draw_t **game, int n, play_t **turn, int *score);
+
+int writedata (char *filename, char *data);
+
 #endif /* __FUNCTION_H__ */
 
 /* vim: set ts=4 sw=4 et: */
index 8c1e1d0816f097ffed6e62a5bd5eddde55b44329..e10e942eb7b4ecb38e1c56372af374f6a8ea7cec 100644 (file)
@@ -292,6 +292,13 @@ int main (int argc, char *argv[])
         case 'q':
             stop = 1;
             break;
+        case 's':
+            {
+                char *data = savedata (nbplayers, language, boardname, play, draw, game, n, turn, score);
+                writedata ("data.scr", data);
+                free (data);
+            }
+            break;
         case 't':
             mode ^= 1;
             break;