# HG changeset patch # User elwin # Date 1344575768 0 # Node ID a98834ce7e0483901fbba9f253e16fd3f9b352bc # Parent 0ed67132cf10828b1e8f148cea7eb890420ec2d3 arogue5: add the savedir feature. diff -r 0ed67132cf10 -r a98834ce7e04 arogue5/mach_dep.h --- a/arogue5/mach_dep.h Thu Aug 09 22:58:48 2012 +0000 +++ b/arogue5/mach_dep.h Fri Aug 10 05:16:08 2012 +0000 @@ -25,7 +25,8 @@ /* * where scorefile should live */ -#define SCOREFILE "/bnr/contrib/lib/rogue/scorefile" +#define SCOREFILE "/var/local/games/roguelike/arogue5.scr" +#define SAVEDIR "/var/local/games/roguelike/arogue5save/" /* * Variables for checking to make sure the system isn't too loaded diff -r 0ed67132cf10 -r a98834ce7e04 arogue5/main.c --- a/arogue5/main.c Thu Aug 09 22:58:48 2012 +0000 +++ b/arogue5/main.c Fri Aug 10 05:16:08 2012 +0000 @@ -57,10 +57,29 @@ strncpy(home,md_gethomedir(),LINELEN); +#ifdef SAVEDIR + if (argc >= 3 && !strcmp(argv[1], "-n")) { + use_savedir = TRUE; + strncpy(whoami, argv[2], LINELEN); + whoami[LINELEN - 1] = '\0'; + if (snprintf(file_name, LINELEN, "%s%d-%.10s.ar5sav", SAVEDIR, + md_getuid(), whoami) >= LINELEN) + { + /* The name is too long */ + use_savedir = FALSE; + } + } +#endif /* Get default save file */ - strcpy(file_name, home); - strcat(file_name, "arogue58.sav"); + if (!use_savedir) { + strcpy(file_name, home); + strcat(file_name, "arogue58.sav"); + } +#ifdef SCOREFILE + strncpy(score_file, SCOREFILE, LINELEN); + score_file[LINELEN - 1] = '\0'; +#else /* Get default score file */ strcpy(score_file, roguedir); @@ -68,6 +87,7 @@ strcat(score_file,"/"); strcat(score_file, "arogue58.scr"); +#endif if ((env = getenv("ROGUEOPTS")) != NULL) parse_opts(env); @@ -139,7 +159,15 @@ exit(1); } #endif - if (argc == 2) + if (use_savedir) + { + /* Try to restore from file_name first. */ + if (!restore(file_name, envp)) + exit(1); + /* If restore() returns true, there is no such saved game. + So start a new one. */ + } + else if (argc == 2) if (!restore(argv[1], envp)) /* Note: restore will never return */ exit(1); lowtime = (int) time(&now); diff -r 0ed67132cf10 -r a98834ce7e04 arogue5/rogue.c --- a/arogue5/rogue.c Thu Aug 09 22:58:48 2012 +0000 +++ b/arogue5/rogue.c Fri Aug 10 05:16:08 2012 +0000 @@ -114,6 +114,7 @@ bool askme = FALSE; bool in_shell = FALSE; bool daytime = TRUE; +bool use_savedir = FALSE; coord delta; /* Change indicated to get_dir() */ LEVTYPE levtype; /* type of level i'm on */ diff -r 0ed67132cf10 -r a98834ce7e04 arogue5/rogue.h --- a/arogue5/rogue.h Thu Aug 09 22:58:48 2012 +0000 +++ b/arogue5/rogue.h Fri Aug 10 05:16:08 2012 +0000 @@ -1096,6 +1096,7 @@ extern bool m_know[]; /* Does he know what a MM does */ extern bool in_shell; /* True if executing a shell */ extern bool daytime; /* Indicates whether it is daytime */ +extern bool use_savedir; /* True if using systemwide save area */ extern coord oldpos; /* Position before last look() call */ extern coord delta; /* Change indicated to get_dir() */ extern coord grid[]; /* used for random pos generation */ diff -r 0ed67132cf10 -r a98834ce7e04 arogue5/save.c --- a/arogue5/save.c Thu Aug 09 22:58:48 2012 +0000 +++ b/arogue5/save.c Fri Aug 10 05:16:08 2012 +0000 @@ -152,6 +152,11 @@ if ((inf = open(file, O_RDONLY)) < 0) { + if (use_savedir && errno == ENOENT) + { + /* No such game in SAVEDIR */ + return TRUE; + } perror(file); return FALSE; }