add pattern for saving file name
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Tue, 18 Jun 2024 13:55:13 +0000 (15:55 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Tue, 18 Jun 2024 13:55:13 +0000 (15:55 +0200)
function.c
function.h
scrabble.c

index 8f4a9a181103514ed74fae096af825ee12a6ee26..ebd09cf928e7de095aa15547efdc946b2045bd5f 100644 (file)
@@ -2,6 +2,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <time.h>
 
 #include "constant.h"
 #include "debug.h"
@@ -576,15 +577,30 @@ char *savedata (int nbplayers, char *lang, char *board, play_t *play, draw_t *dr
     return buffer;
 }
 
-int writedata (char *filename, char *data)
+int writedata (char *pattern, char *data)
 {
     int ret = 0;
-    FILE *fd = fopen (filename, "w");
+
+    char *name = (char *) calloc (1, strlen (pattern) + 1 + 8 + 4);
+    CHECKALLOC (name);
+    char *ptr = strchr (pattern, '%');
+    int p = (ptr != NULL) ? ptr - pattern : 0;
+    if (p > 0) {
+        strncpy (name, pattern, p);
+    }
+    sprintf (name + p, "%ld%s", time (NULL), pattern + p + 1);
+
+    FILE *fd = fopen (name, "w");
     if (fd) {
         size_t n = fwrite (data, strlen (data), 1, fd);
         fclose (fd);
         ret = (n == strlen (data));
+    } else {
+        VERBOSE (WARNING, printf ("Can't write file (%s)\n", name));
     }
+
+    free (name);
+
     return ret;
 }
 
index 0347e18d3531e584ac2634eccd88c20a4e0a5ba5..3fe5fbe407797d1dfcc4662a016c650da8b35086 100644 (file)
@@ -65,7 +65,7 @@ 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);
+int writedata (char *pattern, char *data);
 
 char *loaddata (char *filename);
 
index fa3844ced9ac54af5e197b2e8dbb51e4f06a8f07..64c0e67d194435daf31b4d00d6d52eb163097ca2 100644 (file)
@@ -29,6 +29,7 @@ char *language = "fr";
 int nbplayers = 2;
 char *dict = NULL;
 char *file = NULL;
+char *pattern = "save-%.scr";
 int cache = 0;
 
 int xoffset = 4;
@@ -53,7 +54,7 @@ char *help =
 int usage (int ret)
 {
     FILE *fd = ret ? stderr : stdout;
-    fprintf (fd, "usage: %s [-b board] [-c] [-d dict] [-h] [-l lang] [-n nb] [-v level]\n", progname);
+    fprintf (fd, "usage: %s [-b board] [-c] [-d dict] [-h] [-l lang] [-n nb] [-r file] [-s pattern] [-v level]\n", progname);
     fprintf (fd, " -b: board (%s)\n", boardname);
     fprintf (fd, " -c: cache dictionary\n");
     fprintf (fd, " -d: dictionary (%s)\n", (dict) ? dict : "none");
@@ -61,6 +62,7 @@ int usage (int ret)
     fprintf (fd, " -l: language (%s)\n", language);
     fprintf (fd, " -n: number of players (%d)\n", nbplayers);
     fprintf (fd, " -r: restore game (%s)\n", (file) ? file : "none");
+    fprintf (fd, " -s: save pattern (%s)\n", (pattern) ? pattern : "none");
     fprintf (fd, " -v: verbose level (%d)\n", verbose);
     fprintf (fd, "%s version %s\n", progname, version);
 
@@ -136,6 +138,14 @@ int main (int argc, char *argv[])
             }
             file = arg;
             break;
+        case 's':
+            arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+            if (arg == NULL) {
+                VERBOSE (ERROR, fprintf (stderr, "%s: missing saving pattern\n", progname));
+                return usage (1);
+            }
+            pattern = arg;
+            break;
         case 'v':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
             if (arg == NULL) {
@@ -324,7 +334,7 @@ int main (int argc, char *argv[])
             break;
         case 's':
             data = savedata (nbplayers, language, boardname, play, draw, game, n, turn, score);
-            writedata ("data.scr", data);
+            writedata (pattern, data);
             free (data);
             break;
         case 't':
@@ -408,6 +418,8 @@ int main (int argc, char *argv[])
 /* test: scrabble.exe -l aa 2>&1 | grep 'not found' */
 /* test: scrabble.exe -n 2>&1 | grep 'no number' */
 /* test: scrabble.exe -n 5 2>&1 | grep 'incorrect' */
+/* test: scrabble.exe -r 2>&1 | grep 'missing file name' */
+/* test: scrabble.exe -s 2>&1 | grep 'missing saving pattern' */
 /* test: scrabble.exe -v 2>&1 | grep missing */
 /* test: scrabble.exe _ 2>&1 | grep invalid */
 /* test: echo vlvjxdvjvjvcivkkvkvctJcLccLLLLLLLLJJJJJJJJq | scrabble.exe */