diff rogue5/save.c @ 34:655c317b6237

rogue5: add savedir, logfile, bugfixes
author elwin
date Mon, 24 May 2010 20:16:15 +0000
parents f502bf60e6e4
children af6b05e86747
line wrap: on
line diff
--- a/rogue5/save.c	Mon May 24 20:10:59 2010 +0000
+++ b/rogue5/save.c	Mon May 24 20:16:15 2010 +0000
@@ -41,7 +41,10 @@
     {
 	for (;;)
 	{
-	    msg("save file (%s)? ", file_name);
+            if (use_savedir)
+                msg("Save game? ");
+            else
+	        msg("Save file (%s)? ", file_name);
 	    c = readchar();
 	    mpos = 0;
 	    if (c == ESCAPE)
@@ -63,6 +66,8 @@
 	}
     }
 
+    if (use_savedir) /* User chose N, changing location isn't allowed. */
+        goto quit_it;
     do
     {
 	mpos = 0;
@@ -79,7 +84,7 @@
 	/*
 	 * test to see if the file exists
 	 */
-	if (stat(buf, &sbuf) >= 0)
+	if (stat(buf, &sbuf) >= 0 && !use_savedir)
 	{
 	    for (;;)
 	    {
@@ -99,7 +104,11 @@
 	}
 	strcpy(file_name, buf);
 	if ((savef = fopen(file_name, "w")) == NULL)
+        {
 	    msg(strerror(errno));
+            if (use_savedir)
+                return;
+        }
     } while (savef == NULL);
     msg("");
     save_file(savef);
@@ -138,13 +147,14 @@
     putchar('\n');
     endwin();
     resetltchars();
-    md_chmod(file_name, 0400);
+    md_chmod(file_name, 0644);
     encwrite(version, strlen(version)+1, savef);
     sprintf(buf,"%d x %d\n", LINES, COLS);
     encwrite(buf,80,savef);
     rs_save_file(savef);
     fflush(savef);
     fclose(savef);
+    printf("See you soon, %s!\n", whoami);
     exit(0);
 }
 
@@ -167,8 +177,11 @@
 
 	md_tstphold();
 
-	if ((inf = fopen(file,"r")) == NULL)
+    if ((inf = fopen(file,"r")) == NULL)
     {
+        /* If a system savefile doesn't exist, start a new game. */
+        if (use_savedir && errno == ENOENT)
+            return TRUE;
 	perror(file);
 	return FALSE;
     }