X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibgame%2Fmisc.c;h=33c6abc16ff25a6c9e7ddb957173625b975dd627;hb=60616073708fbb623db3408620aca220e871e696;hp=e7c2e098f513cfebe52a6a97a01e45de043900f2;hpb=cffcb1ebb7183c52253df6e8d2af6b5e92ebef0a;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index e7c2e098..33c6abc1 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -557,7 +557,12 @@ boolean getTokenValueFromString(char *string, char **token, char **value) #define UUID_CHARS (UUID_BYTES * 2) #define UUID_LENGTH (UUID_CHARS + 4) -char *getUUID(void) +static unsigned int uuid_random_function(int max) +{ + return GetSimpleRandom(max); +} + +char *getUUIDExt(unsigned int (*random_function)(int max)) { static char uuid[UUID_LENGTH + 1]; int data[UUID_BYTES]; @@ -565,7 +570,7 @@ char *getUUID(void) int i; for (i = 0; i < UUID_BYTES; i++) - data[i] = GetSimpleRandom(256); + data[i] = random_function(256); data[6] = 0x40 | (data[6] & 0x0f); data[8] = 0x80 | (data[8] & 0x3f); @@ -582,6 +587,11 @@ char *getUUID(void) return uuid; } +char *getUUID(void) +{ + return getUUIDExt(uuid_random_function); +} + // ---------------------------------------------------------------------------- // counter functions @@ -746,7 +756,7 @@ void SkipUntilDelayReached(unsigned int *counter_var, unsigned int delay, // random generator functions // ---------------------------------------------------------------------------- -unsigned int init_random_number(int nr, int seed) +static unsigned int init_random_number_ext(int nr, int seed) { if (seed == NEW_RANDOMIZE) { @@ -774,9 +784,32 @@ unsigned int init_random_number(int nr, int seed) return (unsigned int) seed; } +static unsigned int prng_seed_gettimeofday(void) +{ + struct timeval current_time; + + gettimeofday(¤t_time, NULL); + + prng_seed_bytes(¤t_time, sizeof(current_time)); + + return 0; +} + +unsigned int init_random_number(int nr, int seed) +{ + return (nr == RANDOM_BETTER ? prng_seed_gettimeofday() : + init_random_number_ext(nr, seed)); +} + +static unsigned int get_random_number_ext(int nr) +{ + return (nr == RANDOM_BETTER ? prng_get_uint() : + random_linux_libc(nr)); +} + unsigned int get_random_number(int nr, int max) { - return (max > 0 ? random_linux_libc(nr) % max : 0); + return (max > 0 ? get_random_number_ext(nr) % max : 0); } @@ -1300,6 +1333,8 @@ void GetOptions(int argc, char *argv[], options.special_flags = NULL; options.debug_mode = NULL; options.player_name = NULL; + options.identifier = NULL; + options.level_nr = NULL; options.mytapes = FALSE; options.serveronly = FALSE; @@ -1446,6 +1481,24 @@ void GetOptions(int argc, char *argv[], if (option_arg == next_option) options_left++; } + else if (strncmp(option, "-identifier", option_len) == 0) + { + if (option_arg == NULL) + FailWithHelp("option '%s' requires an argument", option_str); + + options.identifier = getStringCopy(option_arg); + if (option_arg == next_option) + options_left++; + } + else if (strncmp(option, "-level-nr", option_len) == 0) + { + if (option_arg == NULL) + FailWithHelp("option '%s' requires an argument", option_str); + + options.level_nr = getStringCopy(option_arg); + if (option_arg == next_option) + options_left++; + } else if (strncmp(option, "-verbose", option_len) == 0) { options.verbose = TRUE; @@ -2766,6 +2819,22 @@ int copyFile(char *filename_from, char *filename_to) return 0; } +boolean touchFile(char *filename) +{ + FILE *file; + + if (!(file = fopen(filename, MODE_WRITE))) + { + Warn("cannot touch file '%s'", filename); + + return FALSE; + } + + fclose(file); + + return TRUE; +} + // ---------------------------------------------------------------------------- // functions for directory handling @@ -3780,8 +3849,8 @@ void LoadArtworkConfig(struct ArtworkListInfo *artwork_info) char *filename_base = UNDEFINED_FILENAME, *filename_local; int i, j; - DrawInitText("Loading artwork config", 120, FC_GREEN); - DrawInitText(ARTWORKINFO_FILENAME(artwork_info->type), 150, FC_YELLOW); + DrawInitTextHead("Loading artwork config"); + DrawInitTextItem(ARTWORKINFO_FILENAME(artwork_info->type)); // always start with reliable default values for (i = 0; i < num_file_list_entries; i++) @@ -3939,8 +4008,8 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info, return; } - DrawInitText(init_text[artwork_info->type], 120, FC_GREEN); - DrawInitText(basename, 150, FC_YELLOW); + DrawInitTextHead(init_text[artwork_info->type]); + DrawInitTextItem(basename); if ((*listnode = artwork_info->load_artwork(filename)) != NULL) {