From: Carl Worth <cworth@cworth.org>
Date: Wed, 29 Nov 2006 07:09:46 +0000 (-0800)
Subject: Add the ability to specify grid letters on the command line.
X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=b157806da521d22963c0246fdffa4671fd22e091;p=wordgame

Add the ability to specify grid letters on the command line.
---

diff --git a/grid.c b/grid.c
index 273a6e8..c68ae43 100644
--- a/grid.c
+++ b/grid.c
@@ -86,6 +86,31 @@ grid_init (grid_t *grid, int size)
 	    cubes_source[cubes[i]][rand_within(6)];
 }
 
+void
+grid_set_letters (grid_t 	*grid,
+		  const char	*letters)
+{
+    int i;
+    int num_cubes = grid->size * grid->size;
+    char letter;
+
+    if (strlen (letters) != num_cubes) {
+	fprintf (stderr, "Error: Invalid string for %dx%d grid. Expected %d letters: %s\n",
+		 grid->size, grid->size, num_cubes, letters);
+	exit (1);
+    }
+
+    for (i = 0; i < num_cubes; i++) {
+	letter = tolower (letters[i]);
+	if (letter < 'a' || letter > 'z') {
+	    fprintf (stderr, "Error: Invalid character '%c' in letters: %s\n",
+		     letters[i], letters);
+	    exit (1);
+	}
+	grid->letters[i / grid->size][i % grid->size] = letter;
+    }
+}
+
 char *
 grid_string (grid_t *grid)
 {
diff --git a/grid.h b/grid.h
index e5b3d1e..e6c205d 100644
--- a/grid.h
+++ b/grid.h
@@ -43,6 +43,10 @@ typedef struct _grid {
 void
 grid_init (grid_t *grid, int size);
 
+void
+grid_set_letters (grid_t 	*grid,
+		  const char	*letters);
+
 char *
 grid_string (grid_t *grid);
 
diff --git a/grid4.c b/grid4.c
index cd1e90b..989e38d 100644
--- a/grid4.c
+++ b/grid4.c
@@ -19,16 +19,28 @@
 #include "grid.h"
 #include "word-game.h"
 
+#include <string.h>
 #include <sys/time.h>
 #include <time.h>
 
 #define GAME_LENGTH (3 * 60)
 int
-main (void)
+main (int argc, char *argv[])
 {
     dict_t dict, solution;
     grid_t grid;
     struct timeval tv;
+    const char *letters = NULL;
+
+    if (argc > 1) {
+	if (argc == 2) {
+	    letters = argv[1];
+	} else {
+	    fprintf (stderr, "Usage: %s [letters]\n", argv[0]);
+	    fprintf (stderr, "Uses the given 16 letters or else a random grid.\n");
+	    return 1;
+	}
+    }
 
     gettimeofday (&tv, NULL);
     srand (tv.tv_sec ^ tv.tv_usec);
@@ -37,6 +49,8 @@ main (void)
     dict_add_words_from_file (&dict, "words.txt");
 
     grid_init (&grid, 4);
+    if (letters)
+	grid_set_letters (&grid, letters);
 
     dict_init (&solution);
     grid_solve (&grid, &dict, &solution);