changeset 259:096d3cfd9afd

UltraRogue: add the -n option.
author John "Elwin" Edwards
date Thu, 09 Feb 2017 16:29:45 -0500
parents 2908dc47f9e2
children b80e1bf4eaec
files urogue/main.c urogue/rogue.h urogue/save.c urogue/state.c
diffstat 4 files changed, 35 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/urogue/main.c	Wed Feb 08 19:50:36 2017 -0500
+++ b/urogue/main.c	Thu Feb 09 16:29:45 2017 -0500
@@ -23,8 +23,11 @@
 #include <string.h>
 #include <signal.h>
 #include <stdlib.h>
+#include <errno.h>
 #include "rogue.h"
 
+#define SAVEDIR "."
+
 FILE *fd_score = NULL;
 
 /* Command line options */
@@ -62,6 +65,21 @@
                 rflag = TRUE;
                 break;
 
+#ifdef SAVEDIR
+	    case 'n':
+		if (x + 1 < argc) {
+		    use_savedir = TRUE;
+		    x++;
+		    // Set rogue's name to the next argument
+		    strncpy(whoami, argv[x], 2*LINELEN);
+		    whoami[2*LINELEN - 1] = '\0';
+		    // And set up the savefile name
+		    snprintf(file_name, 2*LINELEN, "%s/%d-%.80s.ursav", SAVEDIR,
+				    md_getuid(), whoami);
+		}
+		break;
+#endif
+
             default:
                 fprintf(stderr,"%s: Unknown option '%c'.\n",argv[0],argv[x][1]);
                 exit(1);
@@ -86,12 +104,14 @@
     if ((env = getenv("OPTIONS")) != NULL)
         parse_opts(env);
 
-    nm = getenv("USER");
+    if (!use_savedir) {
+        nm = getenv("USER");
 
-    if (nm != NULL)
-        strcpy(whoami,nm);
-    else
-        strcpy(whoami,"anonymous");
+        if (nm != NULL)
+            strcpy(whoami,nm);
+        else
+            strcpy(whoami,"anonymous");
+    }
 		
 	lowtime = time(&now);
 	
@@ -168,7 +188,11 @@
     mw = newwin(LINES, COLS, 0, 0);
     hw = newwin(LINES, COLS, 0, 0);
 
-    if (argc == 2 && argv[1][0] != '\0' && !restore(argv[1]))
+    if (use_savedir) {
+        if (!restore(file_name))
+            exit(1);
+    }
+    else if (argc == 2 && argv[1][0] != '\0' && !restore(argv[1]))
         /* Note: restore returns on error only */
         exit(1);
 
--- a/urogue/rogue.h	Wed Feb 08 19:50:36 2017 -0500
+++ b/urogue/rogue.h	Thu Feb 09 16:29:45 2017 -0500
@@ -1686,6 +1686,7 @@
 extern int canwizard;      /* Will be permitted to do this */
 extern int askme;          /* Ask about unidentified things */
 extern int moving;         /* move using 'm' command */
+extern int use_savedir;    /* Savefile is in system savedir */
 
 extern int inv_type;       /* Inven style. Bool so options works */
 extern char take;           /* Thing the rogue is taking */
@@ -1809,6 +1810,7 @@
 long md_random(void);
 void md_srandom(long seed);
 int md_readchar(WINDOW *win);
+int md_getuid(void);
 
 #define NOOP(x) (x += 0)
 #define CCHAR(x) ( (char) (x & A_CHARTEXT) )
--- a/urogue/save.c	Wed Feb 08 19:50:36 2017 -0500
+++ b/urogue/save.c	Thu Feb 09 16:29:45 2017 -0500
@@ -90,6 +90,8 @@
 
     if ((infd = fopen(file, "r")) == NULL)
     {
+        if (use_savedir && errno == ENOENT)
+            return TRUE;
         perror(file);
         return(FALSE);
     }
--- a/urogue/state.c	Wed Feb 08 19:50:36 2017 -0500
+++ b/urogue/state.c	Thu Feb 09 16:29:45 2017 -0500
@@ -138,6 +138,7 @@
 int  wizard          = FALSE;
 int  wiz_verbose     = TRUE;
 int  moving          = FALSE;
+int  use_savedir     = FALSE;
 coord    delta;                     /* Change indicated to get_dir()    */
 LEVTYPE  levtype;                   /* type of level i'm on             */
 long purse  = 0;