(GTK only so far) Allow the argument passed to a game binary to be

either a game ID or a save file name. (The former takes priority,
because you can usually find a synonym for the latter, such as by
prepending `./' or `$PWD/'.)

[originally from svn r6135]
This commit is contained in:
Simon Tatham
2005-07-24 10:05:11 +00:00
parent 0a798c7484
commit 4da39de282

31
gtk.c
View File

@ -1373,7 +1373,7 @@ static void add_menu_separator(GtkContainer *cont)
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
} }
static frontend *new_window(char *game_id, char **error) static frontend *new_window(char *arg, char **error)
{ {
frontend *fe; frontend *fe;
GtkBox *vbox; GtkBox *vbox;
@ -1387,15 +1387,36 @@ static frontend *new_window(char *game_id, char **error)
fe->me = midend_new(fe, &thegame); fe->me = midend_new(fe, &thegame);
if (game_id) { if (arg) {
*error = midend_game_id(fe->me, game_id); char *err;
if (*error) { /*
* Try treating the argument as a game ID.
*/
err = midend_game_id(fe->me, arg);
if (!err) {
/*
* It's a valid game ID.
*/
midend_new_game(fe->me);
} else {
FILE *fp = fopen(arg, "r");
if (!fp) {
err = "Supplied argument is neither a game ID nor a save file";
} else {
err = midend_deserialise(fe->me, savefile_read, fp);
fclose(fp);
}
}
if (err) {
*error = err;
midend_free(fe->me); midend_free(fe->me);
sfree(fe); sfree(fe);
return NULL; return NULL;
} }
}
} else {
midend_new_game(fe->me); midend_new_game(fe->me);
}
fe->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); fe->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(fe->window), thegame.name); gtk_window_set_title(GTK_WINDOW(fe->window), thegame.name);