Mercurial > hg > early-roguelike
changeset 252:3d4252fa2ed3
Use more portable random seed generation.
The new function md_random_seed() has replaced time() + getpid() and
similar methods. Putting everything in mdport.c slightly reduces the
warnings and workarounds.
| author | John "Elwin" Edwards |
|---|---|
| date | Sat, 28 Jan 2017 15:49:41 -0500 |
| parents | e7862a021609 |
| children | d9badb9c0179 e940e6c00751 |
| files | arogue5/main.c arogue5/mdport.c arogue5/rogue.h arogue5/save.c arogue7/main.c arogue7/mdport.c arogue7/rogue.h arogue7/save.c rogue3/main.c rogue3/mdport.c rogue3/mdport.h rogue3/save.c rogue4/extern.h rogue4/main.c rogue4/mdport.c rogue4/new_level.c rogue4/save.c rogue5/extern.h rogue5/main.c rogue5/mdport.c rogue5/save.c rogue5/scedit.c srogue/main.c srogue/mdport.c srogue/rogue.h srogue/save.c xrogue/main.c xrogue/rogue.h xrogue/state.c |
| diffstat | 29 files changed, 123 insertions(+), 81 deletions(-) [+] |
line wrap: on
line diff
--- a/arogue5/main.c Sat Jan 28 11:45:36 2017 -0500 +++ b/arogue5/main.c Sat Jan 28 15:49:41 2017 -0500 @@ -49,8 +49,6 @@ main(int argc, char *argv[], char *envp[]) { register char *env; - int lowtime; - time_t now; char *roguedir; roguedir = md_getroguedir(); @@ -100,7 +98,7 @@ strucpy(whoami, md_getusername(), strlen(md_getusername())); if (env == NULL || fruit[0] == '\0') { - md_srand((long)(getpid()+time(0))); + md_srand(md_random_seed()); strcpy(fruit, funfruit[rnd(NFRUIT)]); } @@ -177,10 +175,9 @@ else if (argc == 2) if (!restore(argv[1], envp)) /* Note: restore will never return */ exit(1); - lowtime = (int) time(&now); dnum = (wizard && getenv("SEED") != NULL ? atoi(getenv("SEED")) : - lowtime + getpid()); + md_random_seed()); if (wizard) printf("Hello %s, welcome to dungeon #%d\n", whoami, dnum); else
--- a/arogue5/mdport.c Sat Jan 28 11:45:36 2017 -0500 +++ b/arogue5/mdport.c Sat Jan 28 15:49:41 2017 -0500 @@ -78,6 +78,7 @@ #include <limits.h> #include <sys/stat.h> #include <signal.h> +#include <time.h> #define MOD_MOVE(c) (toupper(c) ) @@ -1232,3 +1233,16 @@ return(ch & 0x7F); } + +unsigned int +md_random_seed(void) +{ + unsigned int seed; + seed = (unsigned int) time((time_t *) NULL); +#ifdef _WIN32 + seed += _getpid(); +#else + seed += getpid(); +#endif + return seed; +}
--- a/arogue5/rogue.h Sat Jan 28 11:45:36 2017 -0500 +++ b/arogue5/rogue.h Sat Jan 28 15:49:41 2017 -0500 @@ -1198,6 +1198,7 @@ extern int md_rand(void); extern int md_erasechar(void); extern int md_killchar(void); +extern unsigned int md_random_seed(void); /* * Now all the global variables
--- a/arogue5/save.c Sat Jan 28 11:45:36 2017 -0500 +++ b/arogue5/save.c Sat Jan 28 15:49:41 2017 -0500 @@ -255,7 +255,7 @@ setup(); clearok(curscr, TRUE); touchwin(cw); - srand(getpid()); + srand(md_random_seed()); playit(); /*NOTREACHED*/ return(FALSE);
--- a/arogue7/main.c Sat Jan 28 11:45:36 2017 -0500 +++ b/arogue7/main.c Sat Jan 28 15:49:41 2017 -0500 @@ -47,8 +47,6 @@ main(int argc, char *argv[], char *envp[]) { register char *env; - int lowtime; - time_t now; #ifdef PC7300 int hardwindow; /* Do we have a hardware window? */ #endif @@ -179,10 +177,9 @@ if (argc == 2) if (!restore(argv[1], envp)) /* Note: restore will never return */ exit(1); - lowtime = (int) time(&now); dnum = (wizard && getenv("SEED") != NULL ? atoi(getenv("SEED")) : - lowtime + getpid()); + md_random_seed()); if (wizard) printf("Hello %s, welcome to dungeon #%d\n", whoami, dnum); else
--- a/arogue7/mdport.c Sat Jan 28 11:45:36 2017 -0500 +++ b/arogue7/mdport.c Sat Jan 28 15:49:41 2017 -0500 @@ -71,6 +71,7 @@ #include <limits.h> #include <sys/stat.h> #include <signal.h> +#include <time.h> #define MOD_MOVE(c) (toupper(c) ) @@ -1214,3 +1215,16 @@ return(ch & 0x7F); } + +unsigned int +md_random_seed(void) +{ + unsigned int seed; + seed = (unsigned int) time((time_t *) NULL); +#ifdef _WIN32 + seed += _getpid(); +#else + seed += getpid(); +#endif + return seed; +}
--- a/arogue7/rogue.h Sat Jan 28 11:45:36 2017 -0500 +++ b/arogue7/rogue.h Sat Jan 28 15:49:41 2017 -0500 @@ -1418,6 +1418,7 @@ long md_memused(void); int md_normaluser(void); int md_rand(void); +unsigned int md_random_seed(void); void md_reopen_score(void); int md_readchar(WINDOW *win); int md_shellescape(void);
--- a/arogue7/save.c Sat Jan 28 11:45:36 2017 -0500 +++ b/arogue7/save.c Sat Jan 28 15:49:41 2017 -0500 @@ -254,7 +254,7 @@ setup(); clearok(curscr, TRUE); touchwin(cw); - srand(getpid()); + srand(md_random_seed()); playit(); /*NOTREACHED*/ return(0);
--- a/rogue3/main.c Sat Jan 28 11:45:36 2017 -0500 +++ b/rogue3/main.c Sat Jan 28 15:49:41 2017 -0500 @@ -31,8 +31,6 @@ char *env; struct linked_list *item; struct object *obj; - int lowtime; - time_t now; md_init(MD_STRIP_CTRL_KEYPAD); @@ -130,9 +128,6 @@ if (!use_savedir) md_normaluser(); - time(&now); - lowtime = (int) now; - env = getenv("SEED"); if (env) @@ -146,7 +141,7 @@ dnum = seed; } else - dnum = lowtime + md_getpid(); + dnum = md_random_seed(); if (wizard || env) printf("Hello %s, welcome to dungeon #%d\n", whoami, dnum);
--- a/rogue3/mdport.c Sat Jan 28 11:45:36 2017 -0500 +++ b/rogue3/mdport.c Sat Jan 28 15:49:41 2017 -0500 @@ -102,6 +102,7 @@ #include <limits.h> #include <sys/stat.h> #include <signal.h> +#include <time.h> #define NOOP(x) (x += 0) @@ -415,16 +416,6 @@ #endif } -pid_t -md_getpid(void) -{ -#ifdef _WIN32 - return( _getpid() ); -#else - return( getpid() );
