X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=a76bba5653a55990f0504cffedd738ed262ef320;hb=a098627819ee709e24a49088e7a374cacf80cc92;hp=7c3e04fca21eaa297b0a5398bfb98b1c604c2618;hpb=e89a21e95b3cb84d1515c0fb3378ce902a48c1c8;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 7c3e04fc..a76bba56 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -41,8 +41,7 @@ // logging functions // ---------------------------------------------------------------------------- -#define DUPLICATE_LOG_OUT_TO_STDOUT TRUE -#define DUPLICATE_LOG_ERR_TO_STDERR TRUE +#define DUPLICATE_LOGGING_TO_STDOUT TRUE #if defined(PLATFORM_ANDROID) @@ -94,15 +93,15 @@ static void vprintf_log(char *format, va_list ap) static void vprintf_log_nonewline(char *format, va_list ap) { - FILE *file = program.log_file[LOG_ERR_ID]; + FILE *file = program.log_file; -#if DUPLICATE_LOG_ERR_TO_STDERR - if (file != program.log_file_default[LOG_ERR_ID]) +#if DUPLICATE_LOGGING_TO_STDOUT + if (file != program.log_file_default) { va_list ap2; va_copy(ap2, ap); - vfprintf(program.log_file_default[LOG_ERR_ID], format, ap2); + vfprintf(program.log_file_default, format, ap2); va_end(ap2); } @@ -113,17 +112,17 @@ static void vprintf_log_nonewline(char *format, va_list ap) static void vprintf_log(char *format, va_list ap) { - FILE *file = program.log_file[LOG_ERR_ID]; + FILE *file = program.log_file; char *newline = STRING_NEWLINE; -#if DUPLICATE_LOG_ERR_TO_STDERR - if (file != program.log_file_default[LOG_ERR_ID]) +#if DUPLICATE_LOGGING_TO_STDOUT + if (file != program.log_file_default) { va_list ap2; va_copy(ap2, ap); - vfprintf(program.log_file_default[LOG_ERR_ID], format, ap2); - fprintf(program.log_file_default[LOG_ERR_ID], "%s", newline); + vfprintf(program.log_file_default, format, ap2); + fprintf(program.log_file_default, "%s", newline); va_end(ap2); } @@ -196,15 +195,15 @@ void printf_line_with_prefix(char *prefix, char *line_chars, int line_length) static void vPrint(char *format, va_list ap) { - FILE *file = program.log_file[LOG_OUT_ID]; + FILE *file = program.log_file; -#if DUPLICATE_LOG_OUT_TO_STDOUT - if (file != program.log_file_default[LOG_OUT_ID]) +#if DUPLICATE_LOGGING_TO_STDOUT + if (file != program.log_file_default) { va_list ap2; va_copy(ap2, ap); - vfprintf(program.log_file_default[LOG_OUT_ID], format, ap2); + vfprintf(program.log_file_default, format, ap2); va_end(ap2); } @@ -224,7 +223,7 @@ void Print(char *format, ...) void PrintNoLog(char *format, ...) { - FILE *file = program.log_file_default[LOG_OUT_ID]; + FILE *file = program.log_file_default; va_list ap; va_start(ap, format); @@ -1350,6 +1349,8 @@ void GetOptions(int argc, char *argv[], options.identifier = NULL; options.level_nr = NULL; + options.display_nr = 0; + options.mytapes = FALSE; options.serveronly = FALSE; options.network = FALSE; @@ -1549,6 +1550,28 @@ void GetOptions(int argc, char *argv[], if (option_arg == next_option) options_left++; } + else if (strncmp(option, "-display", option_len) == 0) + { + if (option_arg == NULL) + FailWithHelp("option '%s' requires an argument", option_str); + + if (option_arg == next_option) + options_left++; + + int display_nr = atoi(option_arg); + +#if 1 + // dirty hack: SDL_GetNumVideoDisplays() seems broken on some systems + options.display_nr = display_nr; +#else + options.display_nr = + MAX(0, MIN(display_nr, SDL_GetNumVideoDisplays() - 1)); + + if (display_nr != options.display_nr) + Warn("invalid display %d -- using display %d", + display_nr, options.display_nr); +#endif + } #if defined(PLATFORM_MAC) else if (strPrefix(option, "-psn")) { @@ -4156,45 +4179,41 @@ void FreeCustomArtworkLists(struct ArtworkListInfo *artwork_info) // (now also added for Windows, to create files in user data directory) // ---------------------------------------------------------------------------- +char *getLogBasename(char *basename) +{ + return getStringCat2(basename, ".log"); +} + char *getLogFilename(char *basename) { return getPath2(getMainUserGameDataDir(), basename); } -void OpenLogFiles(void) +void OpenLogFile(void) { - int i; - InitMainUserDataDirectory(); - for (i = 0; i < NUM_LOGS; i++) + if ((program.log_file = fopen(program.log_filename, MODE_WRITE)) == NULL) { - if ((program.log_file[i] = fopen(program.log_filename[i], MODE_WRITE)) - == NULL) - { - program.log_file[i] = program.log_file_default[i]; // reset to default - - Warn("cannot open file '%s' for writing: %s", - program.log_filename[i], strerror(errno)); - } + program.log_file = program.log_file_default; // reset to default - // output should be unbuffered so it is not truncated in a crash - setbuf(program.log_file[i], NULL); + Warn("cannot open file '%s' for writing: %s", + program.log_filename, strerror(errno)); } + + // output should be unbuffered so it is not truncated in a crash + setbuf(program.log_file, NULL); } -void CloseLogFiles(void) +void CloseLogFile(void) { - int i; - - for (i = 0; i < NUM_LOGS; i++) - if (program.log_file[i] != program.log_file_default[i]) - fclose(program.log_file[i]); + if (program.log_file != program.log_file_default) + fclose(program.log_file); } -void DumpLogFile(int nr) +void DumpLogFile(void) { - FILE *log_file = fopen(program.log_filename[nr], MODE_READ); + FILE *log_file = fopen(program.log_filename, MODE_READ); if (log_file == NULL) return; @@ -4212,7 +4231,7 @@ void NotifyUserAboutErrorFile(void) char *error_text = getStringCat2("The program was aborted due to an error; " "for details, see the following error file:" STRING_NEWLINE, - program.log_filename[LOG_ERR_ID]); + program.log_filename); MessageBox(NULL, error_text, title_text, MB_OK); #endif