changeset 13:63b9fd7d70ce

rogue4: add -n option and system savedir
author edwarj4
date Sat, 31 Oct 2009 01:51:52 +0000
parents 9535a08ddc39
children e7dc81b41168
files rogue4/Makefile rogue4/extern.c rogue4/extern.h rogue4/mach_dep.c rogue4/main.c rogue4/save.c
diffstat 6 files changed, 53 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/rogue4/Makefile	Sat Oct 24 16:52:52 2009 +0000
+++ b/rogue4/Makefile	Sat Oct 31 01:51:52 2009 +0000
@@ -26,13 +26,14 @@
 MISC=	Makefile LICENSE.TXT rogue.6 rogue.me
 
 CC    = gcc
-CFLAGS= -O3
+CFLAGS= -O3 -DSAVEDIR=\"/usr/local/games/roguelike/rogue4save/\"
 CRLIB = -lcurses
 RM    = rm -f
 TAR   = tar
 
 SCOREFILE=
-SF=-DSCOREFILE=\"rogue52.scr\" -DLOCKFILE=\"rogue52.lck\"
+SF=-DSCOREFILE=\"/usr/local/games/roguelike/rogue4.scr\" \
+    -DLOCKFILE=\"/usr/local/games/roguelike/rogue4.lck\"
 NAMELIST=
 NL=
 #MACHDEP=	-DMAXLOAD=40 -DLOADAV -DCHECKTIME=4
--- a/rogue4/extern.c	Sat Oct 24 16:52:52 2009 +0000
+++ b/rogue4/extern.c	Sat Oct 31 01:51:52 2009 +0000
@@ -32,6 +32,7 @@
 bool save_msg = TRUE;			/* Remember last msg */
 bool slow_invent = FALSE;		/* Inventory one line at a time */
 bool terse = FALSE;			/* True if we should be short */
+bool use_savedir = FALSE;		/* True if using system savefile area */
 #ifdef WIZARD
 bool wizard = FALSE;			/* True if allows wizard commands */
 #endif
--- a/rogue4/extern.h	Sat Oct 24 16:52:52 2009 +0000
+++ b/rogue4/extern.h	Sat Oct 31 01:51:52 2009 +0000
@@ -28,7 +28,7 @@
 extern bool	after, amulet, askme, door_stop, fight_flush,
 		firstmove, in_shell, jump, noscore, p_know[], passgo,
 		playing, r_know[], running, s_know[], save_msg,
-		slow_invent, terse, wizard, ws_know[];
+		slow_invent, terse, use_savedir, wizard, ws_know[];
 
 
 extern const char *p_colors[], *r_stones[], *w_names[], 
--- a/rogue4/mach_dep.c	Sat Oct 24 16:52:52 2009 +0000
+++ b/rogue4/mach_dep.c	Sat Oct 31 01:51:52 2009 +0000
@@ -77,7 +77,9 @@
 #else
     fd = -1;
 #endif
-    md_normaluser();
+    if (!use_savedir)
+        md_normaluser();
+    return;
 }
 
 /*
--- a/rogue4/main.c	Sat Oct 24 16:52:52 2009 +0000
+++ b/rogue4/main.c	Sat Oct 31 01:51:52 2009 +0000
@@ -71,16 +71,36 @@
 	}
 #endif
 
+#ifdef SAVEDIR
+    if (argc >= 3 && !strcmp(argv[1], "-n"))
+    {
+        strncpy(whoami, argv[2], MAXSTR - 1);
+        whoami[MAXSTR - 1] = '\0'; /* insurance */
+        use_savedir = TRUE;
+        /* look for savefile at SAVEDIR/UIDplayername.r4sav */
+        if (snprintf(file_name, MAXSTR, "%s%d%.10s.r4sav", SAVEDIR, md_getuid(),
+            whoami) >= MAXSTR)
+        {
+            /* Name is too long- this shouldn't happen */
+            strcpy(file_name, "rogue4.save");
+            use_savedir = FALSE;
+        }
+    }
+#endif
+
     /*
      * get home and options from environment
      */
     strncpy(home, md_gethomedir(), PATH_MAX);
-    strcpy(file_name, home);
-    strcat(file_name, "rogue52.sav");
+    if (!use_savedir)
+    {
+        strcpy(file_name, home);
+        strcat(file_name, "/rogue4.save");
+    }
 
     if ((env = getenv("ROGUEOPTS")) != NULL)
 	parse_opts(env);
-    if (env == NULL || whoami[0] == '\0')
+    if (!use_savedir && (env == NULL || whoami[0] == '\0'))
 	strucpy(whoami, md_getusername(md_getuid()), strlen(md_getusername(md_getuid())));
     if (env == NULL || fruit[0] == '\0')
 	strcpy(fruit, "slime-mold");
@@ -96,12 +116,27 @@
 	exit(0);
     }
     init_check();			/* check for legal startup */
-    if (argc == 2)
+
+    if (use_savedir)
+    {
+        /* Try to restore from file_name which we just set up. */
+        if (!restore(file_name, envp))
+            exit(1);
+        /* If restore() returns true, the system savefile doesn't exist.
+           So we'll start a new game. */
+    }
+    else if (argc == 2)
+    {
 	if (!restore(argv[1], envp))	/* Note: restore will never return */
 	{
 		endwin();
 	    exit(1);
 	}
+    }
+
+    if (!use_savedir)
+        md_normaluser();
+
     lowtime = (int) time(NULL);
 
 #ifdef WIZARD
--- a/rogue4/save.c	Sat Oct 24 16:52:52 2009 +0000
+++ b/rogue4/save.c	Sat Oct 31 01:51:52 2009 +0000
@@ -197,6 +197,12 @@
 
     if ((inf = open(file, 0)) < 0)
     {
+        if (use_savedir && errno == ENOENT)
+        {
+            /* We're using a system savefile which doesn't exist.
+               This isn't a fatal error, it means start a new game. */
+            return TRUE;
+        }
 	perror(file);
 	return FALSE;
     }