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, "nbtiles: %d\n", draw->nbtiles);
- l += sprintf (buffer + l, "tiles: \"%s\"\n", draw->tiles);
+ l += sprintf (buffer + l, "lang: \"%s\"\n", lang);
+ l += sprintf (buffer + l, "play->tab: \"%s\"\n", play->tab);
+ l += sprintf (buffer + l, "draw->nbtiles: %d\n", draw->nbtiles);
+ l += sprintf (buffer + l, "draw->tiles: \"%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, "game[%d]->nbtiles: %d\n", i, game[i]->nbtiles);
+ l += sprintf (buffer + l, "game[%d]->tiles: \"%s\"\n", i, game[i]->tiles);
}
l += sprintf (buffer + l, "current: %d\n", n);
- l += sprintf (buffer + l, "turn[%d]: \"%s\"\n", n, turn[n]->tab);
+ l += sprintf (buffer + l, "turn[%d]->tab: \"%s\"\n", n, turn[n]->tab);
for (i = 0; i < nbplayers; i++) {
l += sprintf (buffer + l, "score[%d]: %d\n", i, score[i]);
}
return ret;
}
+char *loaddata (char *filename)
+{
+ char *buffer = NULL;
+ FILE *fd = fopen (filename, "r");
+ if (fd) {
+ int size = fseek (fd, 0, SEEK_END);
+ buffer = (char *) calloc (size, 1);
+ CHECKALLOC (buffer);
+
+ fseek (fd, 0, SEEK_BEGIN);
+ fread (buffer, 1, size, fd);
+ fclose (fd);
+ }
+
+ return buffer;
+}
+
char *atos (char *str)
{
char *ret = NULL;
return ret;
}
-int loaddata (char *str, int *nbplayers, char *lang, char *board, play_t *play, draw_t *draw, draw_t **game, int *n, play_t **turn, int *score)
+int loaddata (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;
if (strcmp (name, "nbplayers") == 0) {
*nbplayers = atoi (value);
- } else if (strcmp (name, "lang") == 0) {
- strcpy (lang, atos (value));
} else if (strcmp (name, "board") == 0) {
- strcpy (board, atos (value));
- } else if (strcmp (name, "play") == 0) {
+ *board = getboard (atos (value));
+ } else if (strcmp (name, "lang") == 0) {
+ *bag = getbag (atos (value));
+ } else if (strcmp (name, "play->tab") == 0) {
strcpy (play->tab, atos (value));
- } else if (strcmp (name, "ntiles") == 0) {
+ } else if (strcmp (name, "draw->ntiles") == 0) {
draw->nbtiles = atoi (value);
- } else if (strcmp (name, "tiles") == 0) {
+ } else if (strcmp (name, "draw->tiles") == 0) {
strcpy (draw->tiles, atos (value));
- } else if (strcmp (name, "game[0]") == 0) {
+ } else if (strcmp (name, "game[0]->nbtiles") == 0) {
+ game[0]->nbtiles = atoi (value);
+ } else if (strcmp (name, "game[0]->tiles") == 0) {
strcpy (game[0]->tiles, atos (value));
- } else if (strcmp (name, "game[1]") == 0) {
+ } else if (strcmp (name, "game[1]->nbtiles") == 0) {
+ game[1]->nbtiles = atoi (value);
+ } else if (strcmp (name, "game[1]->tiles") == 0) {
strcpy (game[1]->tiles, atos (value));
- } else if (strcmp (name, "game[2]") == 0) {
+ } else if (strcmp (name, "game[2]->nbtiles") == 0) {
+ game[2]->nbtiles = atoi (value);
+ } else if (strcmp (name, "game[2]->tiles") == 0) {
strcpy (game[2]->tiles, atos (value));
- } else if (strcmp (name, "game[3]") == 0) {
+ } else if (strcmp (name, "game[3]->nbtiles") == 0) {
+ game[3]->nbtiles = atoi (value);
+ } else if (strcmp (name, "game[3]->tiles") == 0) {
strcpy (game[3]->tiles, atos (value));
} else if (strcmp (name, "current") == 0) {
*n = atoi (value);
- } else if (strcmp (name, "turn[0]") == 0) {
+ } else if (strcmp (name, "turn[0]->tab") == 0) {
strcpy (turn[0]->tab, atos (value));
- } else if (strcmp (name, "turn[1]") == 0) {
+ } else if (strcmp (name, "turn[1]->tab") == 0) {
strcpy (turn[1]->tab, atos (value));
- } else if (strcmp (name, "turn[2]") == 0) {
+ } else if (strcmp (name, "turn[2]->tab") == 0) {
strcpy (turn[2]->tab, atos (value));
- } else if (strcmp (name, "turn[3]") == 0) {
+ } else if (strcmp (name, "turn[3]->tab") == 0) {
strcpy (turn[3]->tab, atos (value));
} else if (strcmp (name, "score[0]") == 0) {
score[0] = atoi (value);
} else if (strcmp (name, "score[3]") == 0) {
score[3] = atoi (value);
} else {
- VERBOSE (WARNING, printf ("unknown key word: %s\n", name));
+ VERBOSE (WARNING, printf ("unknown keyword: %s\n", name));
}
line = strtok_r (NULL, "\n", &saveptr1);
}
+ if (board) {
+ play->xsize = board->xsize;
+ play->ysize = board->ysize;
+ for (i = 0; i < MAXNBPLAYERS; i++) {
+ turn[i]->xsize = board->xsize;
+ turn[i]->ysize = board->ysize;
+ }
+ } else {
+ ret = 0;
+ }
+
return ret;
}
char *language = "fr";
int nbplayers = 2;
char *dict = NULL;
+char *file = NULL;
int cache = 0;
int xoffset = 4;
"<l> Move right tile\n"
"<q> Quit\n"
"<t> Toggle case legend\n"
+ "<s> Save game\n"
"<v> Put tile\n"
"<x> Retrieve tile\n"
"<J> Move left in line\n"
fprintf (fd, " -h: help message\n");
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, " -v: verbose level (%d)\n", verbose);
fprintf (fd, "%s version %s\n", progname, version);
int xspellwin = xscorewin;
int yspellwin = yscorewin + 3 + 1;
- int mode = 0;
- showboard (play, board, xoffset, yoffset, mode);
-
- int x = (play->xsize + 1)/ 2 - 1;
- int y = (play->ysize + 1)/ 2 - 1;
-
int *score = (int *) calloc (MAXNBPLAYERS, sizeof (int));
CHECKALLOC (score);
for (n = 0; n < nbplayers; n++) {
drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 0);
}
n = 0;
+
+ if (file) {
+ char *buffer = loaddata (file);
+ if (buffer) {
+ if (!restoredata (buffer, &nbplayers, &board, &bag, play, draw, game, &n, turn, score)) {
+ VERBOSE (ERROR, fprintf (stderr, "incorrect file (%s)\n", file));
+ return 1;
+ }
+ } else {
+ VERBOSE (ERROR, fprintf (stderr, "can't read file (%s)\n", file));
+ return 1;
+ }
+ }
+
+ int mode = 0;
+ showboard (play, board, xoffset, yoffset, mode);
+
+ int x = (play->xsize + 1)/ 2 - 1;
+ int y = (play->ysize + 1)/ 2 - 1;
+
char current, letter = getnextletter (game[n]);
drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 1);
int nbpoints = 0;
int stop = 0;
char *data = NULL;
while (!stop) {
+ showboard (play, board, xoffset, yoffset, mode);
+ nbpoints = evalscore (play, turn[n], board, bag);
char highlight = current = gessletter (play, x, y);
if ((current == ' ') && (letter != '\0')) {
highlight = letter;
//case ERR:
//default:
}
- showboard (play, board, xoffset, yoffset, mode);
- nbpoints = evalscore (play, turn[n], board, bag);
}
endwin ();