Mercurial > hg > early-roguelike
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; }