X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=7b82420cf6dade4071cbc3a4571ecfcf1b0ac408;hb=c8689f0335cd584d24570046c6eb5a3b75701305;hp=239a7d8ce8b637ab26764b9dcc2fb9ff7db3585f;hpb=2e69a002d77d8c0b18c8d44184504769c44d60d8;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 239a7d8c..7b82420c 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -763,7 +763,7 @@ static unsigned int init_random_number_ext(int nr, int seed) // default random seed seed = (int)time(NULL); // seconds since the epoch -#if !defined(PLATFORM_WIN32) +#if !defined(PLATFORM_WINDOWS) // add some more randomness struct timeval current_time; @@ -896,7 +896,7 @@ char *getLoginName(void) { static char *login_name = NULL; -#if defined(PLATFORM_WIN32) +#if defined(PLATFORM_WINDOWS) if (login_name == NULL) { unsigned long buffer_size = MAX_USERNAME_LEN + 1; @@ -927,7 +927,7 @@ char *getRealName(void) { static char *real_name = NULL; -#if defined(PLATFORM_WIN32) +#if defined(PLATFORM_WINDOWS) if (real_name == NULL) { static char buffer[MAX_USERNAME_LEN + 1]; @@ -1298,6 +1298,14 @@ boolean strSuffixLower(char *s, char *suffix) return match; } +boolean isURL(char *s) +{ + while (*s && *s >= 'a' && *s <= 'z') + s++; + + return strPrefix(s, "://"); +} + // ---------------------------------------------------------------------------- // command line option handling functions @@ -1535,7 +1543,7 @@ void GetOptions(int argc, char *argv[], if (option_arg == next_option) options_left++; } -#if defined(PLATFORM_MACOSX) +#if defined(PLATFORM_MAC) else if (strPrefix(option, "-psn")) { // ignore process serial number when launched via GUI on Mac OS X @@ -1609,7 +1617,7 @@ void checked_free(void *ptr) void clear_mem(void *ptr, unsigned int size) { -#if defined(PLATFORM_WIN32) +#if defined(PLATFORM_WINDOWS) // for unknown reason, memset() sometimes crashes when compiled with MinGW char *cptr = (char *)ptr; @@ -1946,6 +1954,64 @@ char *getLatin1FromUTF8(char *utf8) return latin1; } +int getTextEncoding(char *text) +{ + unsigned char *src = (unsigned char *)text; + int encoding = TEXT_ENCODING_ASCII; // default: assume encoding is ASCII + + while (*src) + { + if (*src >= 128) + encoding = TEXT_ENCODING_UTF_8; // non-ASCII character: assume UTF-8 + + if (*src < 128) + { + src++; + } + else if (src[0] >= 192 && src[0] < 224 && + src[1] >= 128 && src[1] < 192) + { + src += 2; + } + else if (src[0] >= 224 && src[0] < 240 && + src[1] >= 128 && src[1] < 192 && + src[2] >= 128 && src[2] < 192) + { + src += 3; + } + else if (src[0] >= 240 && src[0] < 248 && + src[1] >= 128 && src[1] < 192 && + src[2] >= 128 && src[2] < 192 && + src[3] >= 128 && src[3] < 192) + { + src += 4; + } + else if (src[0] >= 248 && src[0] < 252 && + src[1] >= 128 && src[1] < 192 && + src[2] >= 128 && src[2] < 192 && + src[3] >= 128 && src[3] < 192 && + src[4] >= 128 && src[4] < 192) + { + src += 5; + } + else if (src[0] >= 252 && src[0] < 254 && + src[1] >= 128 && src[1] < 192 && + src[2] >= 128 && src[2] < 192 && + src[3] >= 128 && src[3] < 192 && + src[4] >= 128 && src[4] < 192 && + src[5] >= 128 && src[5] < 192) + { + src += 6; + } + else + { + return TEXT_ENCODING_UNKNOWN; // non-UTF-8 character: unknown encoding + } + } + + return encoding; +} + // ---------------------------------------------------------------------------- // functions for JSON handling @@ -4135,7 +4201,7 @@ void DumpLogFile(int nr) void NotifyUserAboutErrorFile(void) { -#if defined(PLATFORM_WIN32) +#if defined(PLATFORM_WINDOWS) char *title_text = getStringCat2(program.program_title, " Error Message"); char *error_text = getStringCat2("The program was aborted due to an error; " "for details, see the following error file:"