From 7d620010208d8b6ed1e0158027332c11db385298 Mon Sep 17 00:00:00 2001 From: Laurent MAZET Date: Tue, 18 Jun 2024 15:55:13 +0200 Subject: [PATCH] add pattern for saving file name --- function.c | 20 ++++++++++++++++++-- function.h | 2 +- scrabble.c | 16 ++++++++++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/function.c b/function.c index 8f4a9a1..ebd09cf 100644 --- a/function.c +++ b/function.c @@ -2,6 +2,7 @@ #include #include #include +#include #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; } diff --git a/function.h b/function.h index 0347e18..3fe5fbe 100644 --- a/function.h +++ b/function.h @@ -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); diff --git a/scrabble.c b/scrabble.c index fa3844c..64c0e67 100644 --- a/scrabble.c +++ b/scrabble.c @@ -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 */ -- 2.30.2