Support execution of command script arguments.
[open-adventure.git] / saveresume.c
index 8fe93091697023b60db2c3a422fad66e7620e961..fb247c91df8679ef669839d1c2d044d4f354fd44 100644 (file)
 
 #include <stdlib.h>
 #include <string.h>
-#include <editline/readline.h>
 #include <time.h>
 #include <inttypes.h>
 
 #include "advent.h"
 #include "dungeon.h"
 
-#define VRSION 28      /* bump on save format change */
+/*
+ * Bump on save format change.
+ *
+ * Note: Verify that the tests run clean before bumping this, then rebuild the check
+ * files afterwards.  Otherwise you will get a spurious failure due to the old version
+ * having been generated into a check file.
+ */
+#define VRSION 29
 
 /*
  * If you change the first three members, the resume function may not properly
  * reject saves from older versions.  Yes, this glues us to a hardware-
- * dependent length of long.  Later members can change, but bump the version
+ * dependent length of int.  Later members can change, but bump the version
  * when you do that.
  */
 struct save_t {
@@ -67,7 +73,7 @@ int suspend(void)
     game.saved = game.saved + 5;
 
     while (fp == NULL) {
-        char* name = readline("\nFile name: ");
+        char* name = myreadline("\nFile name: ");
         if (name == NULL)
             return GO_TOP;
         fp = fopen(name, WRITE_MODE);
@@ -100,7 +106,10 @@ int resume(void)
     }
 
     while (fp == NULL) {
-        char* name = readline("\nFile name: ");
+        char* name = myreadline("\nFile name: ");
+       // Autocomplete can leave the input with an extra traoling space.
+       if (name != NULL && strlen(name) > 0 && name[strlen(name) - 1] == ' ')
+           name[strlen(name) - 1] = '\0';
         if (name == NULL)
             return GO_TOP;
         fp = fopen(name, READ_MODE);
@@ -146,7 +155,7 @@ bool is_valid(struct game_t valgame)
 
     /* Check for RNG overflow. Truncate */
     if (valgame.lcg_x >= LCG_M) {
-        valgame.lcg_x %= LCG_M;
+        valgame.lcg_x %= LCG_M; // LCOV_EXCL_LINE
     }
 
     /* Check for RNG underflow. Transpose */
@@ -186,11 +195,11 @@ bool is_valid(struct game_t valgame)
 
     /*  Validate that we didn't die too many times in save */
     if (valgame.numdie >= NDEATHS) {
-        return false;
+        return false;  // LCOV_EXCL_LINE
     }
 
     /* Recalculate tally, throw the towel if in disagreement */
-    long temp_tally = 0;
+    int temp_tally = 0;
     for (int treasure = 1; treasure <= NOBJECTS; treasure++) {
         if (objects[treasure].is_treasure) {
             if (valgame.prop[treasure] == STATE_NOTFOUND) {