+ rack->done = FALSE;
+
+ bag_init (&rack->bag);
+
+ dict_init (&rack->dict);
+ dict_add_words_from_file (&rack->dict, "words.txt");
+
+ dict_init (&rack->solution);
+
+ for (i = 0; i < MAX_TILES; i++)
+ rack->tiles[i] = tile_create (root, 'A', i);
+ rack->num_tiles = 0;
+}
+
+static void
+rack_new_game (rack_t *rack)
+{
+ int i;
+ char *draw;
+ char word[8];
+
+ /* Clean up any remnants from the last game */
+ dict_fini (&rack->solution);
+
+ bag_shuffle (&rack->bag);
+
+ /* Keep drawing until we get 7 non-blank tiles */
+ i = 0;
+ draw = rack->bag.tiles;
+ while (i < 7) {
+ if (*draw != '?')
+ word[i++] = *draw;
+ draw++;
+ }
+ word[7] = '\0';
+
+ for (i = 0; i < 7; i++) {
+ rack->tiles[i]->letter = toupper (word[i]);
+ goo_canvas_item_simple_changed (GOO_CANVAS_ITEM_SIMPLE (rack->tiles[i]->item), FALSE);
+ }
+ rack->num_tiles = 7;
+
+ dict_init (&rack->solution);
+ subanagram_expand (word, &rack->dict, &rack->solution);
+ goo_canvas_item_simple_changed (GOO_CANVAS_ITEM_SIMPLE (rack->solution_item), FALSE);