From 7d1cfbb72eb1493f247d3beba4bb70a198465815 Mon Sep 17 00:00:00 2001 From: simon Date: Sun, 24 Jul 2005 10:05:11 +0000 Subject: [PATCH] (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/'.) git-svn-id: svn://svn.tartarus.org/sgt/puzzles@6135 cda61777-01e9-0310-a592-d414129be87e --- gtk.c | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/gtk.c b/gtk.c index 8ebddd6..567ff56 100644 --- a/gtk.c +++ b/gtk.c @@ -1373,7 +1373,7 @@ static void add_menu_separator(GtkContainer *cont) gtk_widget_show(menuitem); } -static frontend *new_window(char *game_id, char **error) +static frontend *new_window(char *arg, char **error) { frontend *fe; GtkBox *vbox; @@ -1387,15 +1387,36 @@ static frontend *new_window(char *game_id, char **error) fe->me = midend_new(fe, &thegame); - if (game_id) { - *error = midend_game_id(fe->me, game_id); - if (*error) { - midend_free(fe->me); - sfree(fe); - return NULL; + if (arg) { + char *err; + /* + * 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); + sfree(fe); + return NULL; + } + + } else { + midend_new_game(fe->me); } - midend_new_game(fe->me); fe->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(fe->window), thegame.name); -- 2.11.0