X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=efb56bba2cfc6d9030c5de4e1be6dc74f151f9e4;hb=e1fdeb57afb3db322b3757d8105c66ba33cadca4;hp=2750b627f09d507494596ff02a83682c9a44d04f;hpb=3440a4bbdb7531fc5a72b3fc1fb57f245d59f7ed;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 2750b627..efb56bba 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -215,8 +215,8 @@ boolean FrameReached(unsigned long *frame_counter_var, { unsigned long actual_frame_counter = FrameCounter; - if (actual_frame_counter < *frame_counter_var + frame_delay && - actual_frame_counter >= *frame_counter_var) + if (actual_frame_counter >= *frame_counter_var && + actual_frame_counter < *frame_counter_var + frame_delay) return FALSE; *frame_counter_var = actual_frame_counter; @@ -229,8 +229,8 @@ boolean DelayReached(unsigned long *counter_var, { unsigned long actual_counter = Counter(); - if (actual_counter < *counter_var + delay && - actual_counter >= *counter_var) + if (actual_counter >= *counter_var && + actual_counter < *counter_var + delay) return FALSE; *counter_var = actual_counter; @@ -246,8 +246,8 @@ void WaitUntilDelayReached(unsigned long *counter_var, unsigned long delay) { actual_counter = Counter(); - if (actual_counter < *counter_var + delay && - actual_counter >= *counter_var) + if (actual_counter >= *counter_var && + actual_counter < *counter_var + delay) sleep_milliseconds((*counter_var + delay - actual_counter) / 2); else break; @@ -332,13 +332,53 @@ unsigned int get_random_number(int nr, unsigned int max) /* system info functions */ /* ------------------------------------------------------------------------- */ +static char *get_corrected_real_name(char *real_name) +{ + char *real_name_new = checked_malloc(MAX_USERNAME_LEN + 1); + char *from_ptr = real_name; + char *to_ptr = real_name_new; + + if (strchr(real_name, 'ß') == NULL) /* name does not contain 'ß' */ + { + strncpy(real_name_new, real_name, MAX_USERNAME_LEN); + real_name_new[MAX_USERNAME_LEN] = '\0'; + + return real_name_new; + } + + /* the user's real name may contain a 'ß' character (german sharp s), + which has no equivalent in upper case letters (which our fonts use) */ + while (*from_ptr && (long)(to_ptr - real_name_new) < MAX_USERNAME_LEN - 1) + { + if (*from_ptr != 'ß') + *to_ptr++ = *from_ptr++; + else + { + from_ptr++; + *to_ptr++ = 's'; + *to_ptr++ = 's'; + } + } + + *to_ptr = '\0'; + + return real_name_new; +} + char *getLoginName() { -#if defined(PLATFORM_WIN32) - return ANONYMOUS_NAME; -#else static char *login_name = NULL; +#if defined(PLATFORM_WIN32) + if (login_name == NULL) + { + unsigned long buffer_size = MAX_USERNAME_LEN + 1; + login_name = checked_malloc(buffer_size); + + if (GetUserName(login_name, &buffer_size) == 0) + strcpy(login_name, ANONYMOUS_NAME); + } +#else if (login_name == NULL) { struct passwd *pwd; @@ -348,70 +388,73 @@ char *getLoginName() else login_name = getStringCopy(pwd->pw_name); } +#endif return login_name; -#endif } char *getRealName() { -#if defined(PLATFORM_UNIX) - struct passwd *pwd; + static char *real_name = NULL; - if ((pwd = getpwuid(getuid())) == NULL || strlen(pwd->pw_gecos) == 0) - return ANONYMOUS_NAME; - else +#if defined(PLATFORM_WIN32) + if (real_name == NULL) { - static char real_name[1024]; - char *from_ptr = pwd->pw_gecos, *to_ptr = real_name; - - if (strchr(pwd->pw_gecos, 'ß') == NULL) - return pwd->pw_gecos; + static char buffer[MAX_USERNAME_LEN + 1]; + unsigned long buffer_size = MAX_USERNAME_LEN + 1; - /* the user's real name contains a 'ß' character (german sharp s), - which has no equivalent in upper case letters (which our fonts use) */ - while (*from_ptr != '\0' && (long)(to_ptr - real_name) < 1024 - 2) - { - if (*from_ptr != 'ß') - *to_ptr++ = *from_ptr++; - else - { - from_ptr++; - *to_ptr++ = 's'; - *to_ptr++ = 's'; - } - } - *to_ptr = '\0'; + if (GetUserName(buffer, &buffer_size) != 0) + real_name = get_corrected_real_name(buffer); + else + real_name = ANONYMOUS_NAME; + } +#elif defined(PLATFORM_UNIX) + if (real_name == NULL) + { + struct passwd *pwd; - return real_name; + if ((pwd = getpwuid(getuid())) != NULL && strlen(pwd->pw_gecos) != 0) + real_name = get_corrected_real_name(pwd->pw_gecos); + else + real_name = ANONYMOUS_NAME; } -#else /* !PLATFORM_UNIX */ - return ANONYMOUS_NAME; +#else + real_name = ANONYMOUS_NAME; #endif + + return real_name; } char *getHomeDir() { -#if defined(PLATFORM_UNIX) - static char *home_dir = NULL; + static char *dir = NULL; - if (home_dir == NULL) +#if defined(PLATFORM_WIN32) + if (dir == NULL) { - if ((home_dir = getenv("HOME")) == NULL) + dir = checked_malloc(MAX_PATH + 1); + + if (!SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, dir))) + strcpy(dir, "."); + } +#elif defined(PLATFORM_UNIX) + if (dir == NULL) + { + if ((dir = getenv("HOME")) == NULL) { struct passwd *pwd; - if ((pwd = getpwuid(getuid())) == NULL) - home_dir = "."; + if ((pwd = getpwuid(getuid())) != NULL) + dir = getStringCopy(pwd->pw_dir); else - home_dir = getStringCopy(pwd->pw_dir); + dir = "."; } } - - return home_dir; #else - return "."; + dir = "."; #endif + + return dir; } @@ -530,6 +573,7 @@ void GetOptions(char *argv[]) options.graphics_directory = RO_BASE_PATH "/" GRAPHICS_DIRECTORY; options.sounds_directory = RO_BASE_PATH "/" SOUNDS_DIRECTORY; options.music_directory = RO_BASE_PATH "/" MUSIC_DIRECTORY; + options.docs_directory = RO_BASE_PATH "/" DOCS_DIRECTORY; options.execute_command = NULL; options.serveronly = FALSE; options.network = FALSE; @@ -1457,9 +1501,18 @@ void dumpList(ListNode *node_first) /* ------------------------------------------------------------------------- */ -/* functions for checking filenames */ +/* functions for checking files and filenames */ /* ------------------------------------------------------------------------- */ +boolean fileExists(char *filename) +{ +#if 0 + printf("checking file '%s'\n", filename); +#endif + + return (access(filename, F_OK) == 0); +} + boolean FileIsGraphic(char *filename) { if (strlen(filename) > 4 && @@ -1567,6 +1620,7 @@ int get_parameter_value(char *token, char *value_raw, int type) string_has_parameter(value, "pingpong") ? ANIM_PINGPONG : string_has_parameter(value, "pingpong2") ? ANIM_PINGPONG2 : string_has_parameter(value, "random") ? ANIM_RANDOM : + string_has_parameter(value, "none") ? ANIM_NONE : ANIM_LOOP); if (string_has_parameter(value, "reverse"))