fe->me = midend_new(fe, &thegame);
if (game_id) {
- *error = midend_game_id(fe->me, game_id, FALSE);
+ *error = midend_game_id(fe->me, game_id);
if (*error) {
midend_free(fe->me);
sfree(fe);
menuitem = gtk_menu_item_new_with_label("Specific...");
gtk_object_set_data(GTK_OBJECT(menuitem), "user-data",
+ GINT_TO_POINTER(CFG_DESC));
+ gtk_container_add(GTK_CONTAINER(menu), menuitem);
+ gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
+ GTK_SIGNAL_FUNC(menu_config_event), fe);
+ gtk_widget_show(menuitem);
+
+ menuitem = gtk_menu_item_new_with_label("Random Seed...");
+ gtk_object_set_data(GTK_OBJECT(menuitem), "user-data",
GINT_TO_POINTER(CFG_SEED));
gtk_container_add(GTK_CONTAINER(menu), menuitem);
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
fe->ncolours = ncolours;
fe->colours = snewn(ncolours, GdkColor);
for (i = 0; i < ncolours; i++) {
- fe->colours[i].red = colours[i*3] * 0xFFFF;
- fe->colours[i].green = colours[i*3+1] * 0xFFFF;
- fe->colours[i].blue = colours[i*3+2] * 0xFFFF;
+ /*
+ * Just for Gareth: if you dislike any of the standard
+ * colours, here's your chance to configure them in a
+ * really hacky way.
+ */
+ char buf[80], *e;
+ unsigned int r, g, b;
+ sprintf(buf, "PUZZLE_COLOUR_%d", i);
+ if ((e = getenv(buf)) != NULL &&
+ sscanf(e, "%2x%2x%2x", &r, &g, &b) == 3) {
+ fe->colours[i].red = r * 0x101;
+ fe->colours[i].green = g * 0x101;
+ fe->colours[i].blue = b * 0x101;
+ } else {
+ fe->colours[i].red = colours[i*3] * 0xFFFF;
+ fe->colours[i].green = colours[i*3+1] * 0xFFFF;
+ fe->colours[i].blue = colours[i*3+2] * 0xFFFF;
+ }
}
success = snewn(ncolours, gboolean);
gdk_colormap_alloc_colors(fe->colmap, fe->colours, ncolours,
*/
if (argc > 1 && !strcmp(argv[1], "--generate")) {
int n = 1;
- char *params = NULL;
+ char *params = NULL, *seed = NULL;
game_params *par;
random_state *rs;
char *parstr;
- {
- void *seed;
- int seedlen;
- get_random_seed(&seed, &seedlen);
- rs = random_init(seed, seedlen);
- }
-
if (argc > 2)
n = atoi(argv[2]);
if (argc > 3)
params = argv[3];
- if (params)
- par = thegame.decode_params(params);
- else
- par = thegame.default_params();
- parstr = thegame.encode_params(par);
+ par = thegame.default_params();
+ if (params) {
+ if ( (seed = strchr(params, '#')) != NULL )
+ *seed++ = '\0';
+ thegame.decode_params(par, params);
+ } else {
+ }
+ parstr = thegame.encode_params(par, FALSE);
+
+ {
+ void *seeddata;
+ int seedlen;
+ if (seed) {
+ seeddata = seed;
+ seedlen = strlen(seed);
+ } else {
+ get_random_seed(&seeddata, &seedlen);
+ }
+ rs = random_init(seeddata, seedlen);
+ }
while (n-- > 0) {
game_aux_info *aux = NULL;
- char *seed = thegame.new_seed(par, rs, &aux);
- printf("%s:%s\n", parstr, seed);
- sfree(seed);
+ char *desc = thegame.new_desc(par, rs, &aux);
+ printf("%s:%s\n", parstr, desc);
+ sfree(desc);
if (aux)
thegame.free_aux_info(aux);
}