diff --git a/urogue/main.c b/urogue/main.c index 052fbe7..eb0da36 100644 --- a/urogue/main.c +++ b/urogue/main.c @@ -23,8 +23,11 @@ #include #include #include +#include #include "rogue.h" +#define SAVEDIR "." + FILE *fd_score = NULL; /* Command line options */ @@ -62,6 +65,21 @@ main(int argc, char *argv[]) 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 @@ main(int argc, char *argv[]) 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 @@ main(int argc, char *argv[]) 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); diff --git a/urogue/rogue.h b/urogue/rogue.h index 4a294f8..a3bd889 100644 --- a/urogue/rogue.h +++ b/urogue/rogue.h @@ -1686,6 +1686,7 @@ extern int waswizard; /* Was a wizard sometime */ 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 @@ char *md_strdup(const char *s); 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) ) diff --git a/urogue/save.c b/urogue/save.c index 69f6607..31c0718 100644 --- a/urogue/save.c +++ b/urogue/save.c @@ -90,6 +90,8 @@ restore(char *file) if ((infd = fopen(file, "r")) == NULL) { + if (use_savedir && errno == ENOENT) + return TRUE; perror(file); return(FALSE); } diff --git a/urogue/state.c b/urogue/state.c index 7a0b45f..ada3646 100644 --- a/urogue/state.c +++ b/urogue/state.c @@ -138,6 +138,7 @@ int fighting = FALSE; 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;