Cleanup of code for the new option to immediately load a saved game.
authorDavid Griffith <dave@661.org>
Fri, 22 Jan 2016 03:58:19 +0000 (19:58 -0800)
committerDavid Griffith <dave@661.org>
Fri, 22 Jan 2016 03:58:19 +0000 (19:58 -0800)
ChangeLog
src/common/fastmem.c
src/common/process.c
src/curses/ux_init.c
src/curses/ux_input.c

index a7767b1165fac65bb8d816db34e9a208ad88078d..1aeb68da3fcfca4a77b854900fc53971008a28a2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,7 @@
 Summary of changes between Frotz 2.44 and Frotz 2.45:
 =====================================================
 
-Frotz 2.45 was released on Wednesday, January 20, 2016.
+Frotz 2.45 was released on ????
 
 NEW FEATURE
 
index 07964031380cd5c8bb44b358982a07d6873b6d97..75b042d7600d37ca10d4bbc7698bbb37e8df674b 100644 (file)
@@ -770,6 +770,9 @@ void z_restore (void)
 
 finished:
 
+    if (gfp == NULL && f_setup.restore_mode)
+       os_fatal ("Error reading save file");
+
     if (h_version <= V3)
        branch (success);
     else
index 6944ce33e42909ceced0f645617818869ffc83ef..c542b133e102c40f6692bd8aaa5dd90224727a40 100644 (file)
@@ -255,12 +255,11 @@ static void load_all_operands (zbyte specifier)
  */
 void interpret (void)
 {
-/*before we start lets load a save if one was given from the command line*/
-    if(f_setup.restore_mode==1)
-     {
-      z_restore();
-      f_setup.restore_mode=0;
-     } 
+    /* If we got a save file on the command line, use it now. */
+    if(f_setup.restore_mode==1) {
+       z_restore();
+       f_setup.restore_mode=0;
+    }
 
     do {
 
index 4887bedd4e4478b1fe8adb072e32e9bd83dcb0ba..4d69ad8d8f85bd0fb2246606474d0c2bdf851f4f 100644 (file)
@@ -72,14 +72,14 @@ Syntax: frotz [options] story-file\n\
   -b # background color         \t -P   alter piracy opcode\n\
   -c # context lines            \t -q   quiet (disable sound effects)\n\
   -d   disable color            \t -r # right margin\n\
-  -e   enable sound             \t -R   load a save file directly from command line\n\
+  -e   enable sound             \t -R <name> load this save file\n\
   -f # foreground color         \t -s # random number seed value\n\
   -F   Force color mode         \t -S # transcript width\n\
   -h # screen height            \t -t   set Tandy bit\n\
   -i   ignore fatal errors      \t -u # slots for multiple undo\n\
   -l # left margin              \t -w # screen width\n\
   -o   watch object movement   \t -x   expand abbreviations g/x/z\n"
-                                
+
 /*
 char stripped_story_name[FILENAME_MAX+1];
 char semi_stripped_story_name[FILENAME_MAX+1];
@@ -207,8 +207,6 @@ void os_process_arguments (int argc, char *argv[])
        getconfig(configfile);  /* we're not concerned if this fails */
     }
 
-    f_setup.tmp_save_name = malloc(FILENAME_MAX * sizeof(char)); /*needs to be initialized before we get to parsing our options*/
-
     /* Parse the options */
 
     do {
@@ -246,7 +244,10 @@ void os_process_arguments (int argc, char *argv[])
          case 'P': f_setup.piracy = 1; break;
          case 'q': f_setup.sound = 0; break;
          case 'r': f_setup.right_margin = atoi(optarg); break;
-         case 'R': f_setup.restore_mode = 1; strcpy(f_setup.tmp_save_name, optarg); break;
+         case 'R': f_setup.restore_mode = 1;
+                   f_setup.tmp_save_name = malloc(FILENAME_MAX * sizeof(char) + 1);
+                   strncpy(f_setup.tmp_save_name, optarg, FILENAME_MAX);
+                   break;
          case 's': u_setup.random_seed = atoi(optarg); break;
          case 'S': f_setup.script_cols = atoi(optarg); break;
          case 't': u_setup.tandy_bit = 1; break;
@@ -343,22 +344,19 @@ void os_process_arguments (int argc, char *argv[])
     strncpy(f_setup.command_name, f_setup.story_name, strlen(f_setup.story_name));
     strncat(f_setup.command_name, EXT_COMMAND, strlen(EXT_COMMAND));
 
-
-    f_setup.save_name = malloc(strlen(f_setup.story_name) * sizeof(char) + 5);
-    strncpy(f_setup.save_name, f_setup.story_name, strlen(f_setup.story_name));
-    strncat(f_setup.save_name, EXT_SAVE, strlen(EXT_SAVE));
+    if (!f_setup.restore_mode) {
+       f_setup.save_name = malloc(strlen(f_setup.story_name) * sizeof(char) + 5);
+       strncpy(f_setup.save_name, f_setup.story_name, strlen(f_setup.story_name));
+       strncat(f_setup.save_name, EXT_SAVE, strlen(EXT_SAVE));
+    } else {  /*Set our auto load save as the name_save*/
+       f_setup.save_name = malloc(strlen(f_setup.tmp_save_name) * sizeof(char) + 5);
+       strncpy(f_setup.save_name, f_setup.tmp_save_name, strlen(f_setup.tmp_save_name));
+       free(f_setup.tmp_save_name);
+    }
 
     f_setup.aux_name = malloc(strlen(f_setup.story_name) * sizeof(char) + 5);
     strncpy(f_setup.aux_name, f_setup.story_name, strlen(f_setup.story_name));
     strncat(f_setup.aux_name, EXT_AUX, strlen(EXT_AUX));
-    
-    /*Set our auto load save as the name_save*/
-     if(f_setup.restore_mode == 1)
-       {
-        char * delete_me = f_setup.save_name;
-        f_setup.save_name=f_setup.tmp_save_name;
-       free(delete_me);
-        }
 
     switch (ux_init_blorb()) {
         case bb_err_Format:
index fd91c81eb42925c816d8c6cf98a2f2870fd09859..ee9101179f9fc6329e63b256203df18bf3693976 100644 (file)
@@ -640,16 +640,18 @@ int os_read_file_name (char *file_name, const char *default_name, int flag)
 
     istream_replay = 0;
     ostream_record = 0;
-    if(f_setup.restore_mode==0)
-       {
-        print_string ("Enter a file name.\nDefault is \"");
-        print_string (default_name);
-        print_string ("\": ");
 
-        read_string (FILENAME_MAX, (zchar *)file_name);
-       }
-       else
-       file_name[0]=0;//set to zero because we are not taking user input
+    /* If we're restoring a game before the interpreter starts,
+     * our filename is already provided.  Just go ahead silently.
+     */
+    if (f_setup.restore_mode) {
+       file_name[0]=0;
+    } else {
+       print_string ("Enter a file name.\nDefault is \"");
+       print_string (default_name);
+       print_string ("\": ");
+       read_string (FILENAME_MAX, (zchar *)file_name);
+    }
 
     /* Use the default name if nothing was typed */