rogue4: add -n option and system savedir

This commit is contained in:
John "Elwin" Edwards 2009-10-31 01:51:52 +00:00
parent 9f62c197cc
commit 18a08fce7e
6 changed files with 53 additions and 8 deletions

View file

@ -71,16 +71,36 @@ char **envp;
}
#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 @@ char **envp;
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