return ret;
}
+char *atos (char *str)
+{
+ char *ret = NULL;
+
+ if (*str == '"') {
+ char *ptr = ++str;
+ while ((*ptr != '"') && (*ptr != '\0')) {
+ ptr++;
+ }
+ if (*ptr == '"') {
+ *ptr = '\0';
+ ret = str;
+ }
+ }
+
+ 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 ret = 1;
+
+ char *saveptr1, *saveptr2;
+
+ char *line = strtok_r (str, "\n", &saveptr1);
+ while (line) {
+
+ char *name = strtok_r (line, ":", &saveptr2);
+
+ char *value = line + strlen (name) + 1;
+ while (*value == ' ') {
+ value++;
+ }
+
+ 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) {
+ strcpy (play->tab, atos (value));
+ } else if (strcmp (name, "ntiles") == 0) {
+ draw->nbtiles = atoi (value);
+ } else if (strcmp (name, "tiles") == 0) {
+ strcpy (draw->tiles, atos (value));
+ } else if (strcmp (name, "game[0]") == 0) {
+ strcpy (game[0]->tiles, atos (value));
+ } else if (strcmp (name, "game[1]") == 0) {
+ strcpy (game[1]->tiles, atos (value));
+ } else if (strcmp (name, "game[2]") == 0) {
+ strcpy (game[2]->tiles, atos (value));
+ } else if (strcmp (name, "game[3]") == 0) {
+ strcpy (game[3]->tiles, atos (value));
+ } else if (strcmp (name, "current") == 0) {
+ *n = atoi (value);
+ } else if (strcmp (name, "turn[0]") == 0) {
+ strcpy (turn[0]->tab, atos (value));
+ } else if (strcmp (name, "turn[1]") == 0) {
+ strcpy (turn[1]->tab, atos (value));
+ } else if (strcmp (name, "turn[2]") == 0) {
+ strcpy (turn[2]->tab, atos (value));
+ } else if (strcmp (name, "turn[3]") == 0) {
+ strcpy (turn[3]->tab, atos (value));
+ } else if (strcmp (name, "score[0]") == 0) {
+ score[0] = atoi (value);
+ } else if (strcmp (name, "score[1]") == 0) {
+ score[1] = atoi (value);
+ } else if (strcmp (name, "score[2]") == 0) {
+ score[2] = atoi (value);
+ } else if (strcmp (name, "score[3]") == 0) {
+ score[3] = atoi (value);
+ } else {
+ VERBOSE (WARNING, printf ("unknown key word: %s\n", name));
+ }
+
+ line = strtok_r (NULL, "\n", &saveptr1);
+ }
+
+ return ret;
+}
+
/* vim: set ts=4 sw=4 et: */
VERBOSE (ERROR, fprintf (stderr, "language not found\n"));
return 1;
}
- if ((nbplayers < 1) || (nbplayers > 4)) {
- VERBOSE (ERROR, fprintf (stderr, "incorrect number of player [1, 4] (%d)\n", nbplayers));
+ if ((nbplayers < 1) || (nbplayers > MAXNBPLAYERS)) {
+ VERBOSE (ERROR, fprintf (stderr, "incorrect number of player [1, %d] (%d)\n", MAXNBPLAYERS, nbplayers));
return 1;
}
if (dict) {
play_t *play = initplay (board->xsize, board->ysize);
VERBOSE (DEBUG, printf ("play: 0x%p\nboard: 0x%p\n", play, board));
draw_t *draw = initdraw (bag);
- draw_t **game = (draw_t **) calloc (nbplayers, sizeof (draw_t *));
+ draw_t **game = (draw_t **) calloc (MAXNBPLAYERS, sizeof (draw_t *));
CHECKALLOC (game);
for (n = 0; n < nbplayers; n++) {
game[n] = retrievetiles (draw, board->length, NULL, 0);
}
VERBOSE (DEBUG, printf ("bag: 0x%p\ndraw: 0x%p\ngame: 0x%p\ngame[0]: 0x%p", bag, draw, game, game[0]));
- play_t **turn = (play_t **) calloc (nbplayers, sizeof (play_t *));
+ play_t **turn = (play_t **) calloc (MAXNBPLAYERS, sizeof (play_t *));
CHECKALLOC (turn);
- for (n = 0; n < nbplayers; n++) {
+ for (n = 0; n < MAXNBPLAYERS; n++) {
turn[n] = initplay (board->xsize, board->ysize);
}
int yvaluewin = yoffset - 1;
int xhelpwin = xvaluewin + xoffset + 10;
int yhelpwin = yoffset - 1;
- int *xdrawwin = (int *) calloc (nbplayers, sizeof (int));
+ int *xdrawwin = (int *) calloc (MAXNBPLAYERS, sizeof (int));
CHECKALLOC (xdrawwin);
- int *ydrawwin = (int *) calloc (nbplayers, sizeof (int));
+ int *ydrawwin = (int *) calloc (MAXNBPLAYERS, sizeof (int));
CHECKALLOC (ydrawwin);
- for (n = 0; n < nbplayers; n++) {
+ for (n = 0; n < MAXNBPLAYERS; n++) {
xdrawwin[n] = (n + 1) * xoffset + n * (board->length * 2 - 1);
ydrawwin[n] = 2 * yoffset + max (board->ysize, 1 + (bag->nbletters + 1) /2);
}
int x = (play->xsize + 1)/ 2 - 1;
int y = (play->ysize + 1)/ 2 - 1;
- int *score = (int *) calloc (nbplayers, sizeof (int));
+ 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);