fprintf(stream, "%s", newline);
}
-static void vprintf_error_ext(char *format, va_list ap, boolean print_newline)
-{
- FILE *error_file = openErrorFile(); /* this returns at least 'stderr' */
-
- if (print_newline)
- vfprintf_newline(error_file, format, ap);
- else
- vfprintf(error_file, format, ap);
-
- if (error_file != stderr) /* do not close stream 'stderr' */
- fclose(error_file);
-}
-
-static void vprintf_error(char *format, va_list ap)
-{
- vprintf_error_ext(format, ap, FALSE);
-}
-
-static void vprintf_error_newline(char *format, va_list ap)
-{
- vprintf_error_ext(format, ap, TRUE);
-}
-
-static void printf_error(char *format, ...)
-{
- if (format)
- {
- va_list ap;
-
- va_start(ap, format);
- vprintf_error(format, ap);
- va_end(ap);
- }
-}
-
-static void printf_error_newline(char *format, ...)
-{
- if (format)
- {
- va_list ap;
-
- va_start(ap, format);
- vprintf_error_newline(format, ap);
- va_end(ap);
- }
-}
-
static void fprintf_newline(FILE *stream, char *format, ...)
{
if (format)
}
}
-static char *get_line_string(char *line_chars, int line_length)
+void fprintf_line(FILE *stream, char *line_chars, int line_length)
{
- static char *buffer = NULL;
- int line_chars_length = strlen(line_chars);
int i;
- if (buffer != NULL)
- checked_free(buffer);
-
- buffer = checked_malloc(line_chars_length * line_length + 1);
-
for (i = 0; i < line_length; i++)
- strcpy(&buffer[i * line_chars_length], line_chars);
-
- return buffer;
-}
+ fprintf(stream, "%s", line_chars);
-void fprintf_line(FILE *stream, char *line_chars, int line_length)
-{
- fprintf_newline(stream, get_line_string(line_chars, line_length));
+ fprintf_newline(stream, "");
}
void printf_line(char *line_chars, int line_length)
fprintf_line(stdout, line_chars, line_length);
}
-void printf_line_error(char *line_chars, int line_length)
-{
- printf_error_newline(get_line_string(line_chars, line_length));
-}
-
void printf_line_with_prefix(char *prefix, char *line_chars, int line_length)
{
fprintf(stdout, "%s", prefix);
return real_name;
}
-char *getHomeDir()
-{
- static char *dir = NULL;
-
-#if defined(PLATFORM_WIN32)
- if (dir == 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)
- dir = getStringCopy(pwd->pw_dir);
- else
- dir = ".";
- }
- }
-#else
- dir = ".";
-#endif
-
- return dir;
-}
-
/* ------------------------------------------------------------------------- */
/* path manipulation functions */
if (mode == ERR_RETURN_LINE)
{
if (!last_line_was_separator)
- printf_line_error(format, 79);
+ fprintf_line(program.error_file, format, 79);
last_line_was_separator = TRUE;
{
va_list ap;
- printf_error("%s%s: ", program.command_basename, process_name);
+ fprintf(program.error_file, "%s%s: ", program.command_basename,
+ process_name);
if (mode & ERR_WARN)
- printf_error("warning: ");
+ fprintf(program.error_file, "warning: ");
va_start(ap, format);
- vprintf_error_newline(format, ap);
+ vfprintf_newline(program.error_file, format, ap);
va_end(ap);
}
if (mode & ERR_HELP)
- printf_error_newline("%s: Try option '--help' for more information.",
- program.command_basename);
+ fprintf_newline(program.error_file,
+ "%s: Try option '--help' for more information.",
+ program.command_basename);
if (mode & ERR_EXIT)
- printf_error_newline("%s%s: aborting",
- program.command_basename, process_name);
+ fprintf_newline(program.error_file, "%s%s: aborting",
+ program.command_basename, process_name);
if (mode & ERR_EXIT)
{
return get_parameter_value(value_raw, suffix, TYPE_INTEGER);
}
+struct ScreenModeInfo *get_screen_mode_from_string(char *screen_mode_string)
+{
+ static struct ScreenModeInfo screen_mode;
+ char *screen_mode_string_x = strchr(screen_mode_string, 'x');
+ char *screen_mode_string_copy;
+ char *screen_mode_string_pos_w;
+ char *screen_mode_string_pos_h;
+
+ if (screen_mode_string_x == NULL) /* invalid screen mode format */
+ return NULL;
+
+ screen_mode_string_copy = getStringCopy(screen_mode_string);
+
+ screen_mode_string_pos_w = screen_mode_string_copy;
+ screen_mode_string_pos_h = strchr(screen_mode_string_copy, 'x');
+ *screen_mode_string_pos_h++ = '\0';
+
+ screen_mode.width = atoi(screen_mode_string_pos_w);
+ screen_mode.height = atoi(screen_mode_string_pos_h);
+
+ return &screen_mode;
+}
+
static void FreeCustomArtworkList(struct ArtworkListInfo *,
struct ListNodeInfo ***, int *);
char *getErrorFilename(char *basename)
{
- return getPath2(getUserDataDir(), basename);
+ return getPath2(getUserGameDataDir(), basename);
}
-void initErrorFile()
+void openErrorFile()
{
- unlink(program.error_filename);
-}
-
-FILE *openErrorFile()
-{
- FILE *error_file = stderr;
+ /* always start with reliable default values */
+ program.error_file = stderr;
#if defined(PLATFORM_WIN32) || defined(PLATFORM_MSDOS)
- if ((error_file = fopen(program.error_filename, MODE_APPEND)) == NULL)
- fprintf_newline(stderr, "ERROR: cannot open file '%s' for appending!",
+ if ((program.error_file = fopen(program.error_filename, MODE_WRITE)) == NULL)
+ fprintf_newline(stderr, "ERROR: cannot open file '%s' for writing!",
program.error_filename);
#endif
+}
- return error_file;
+void closeErrorFile()
+{
+ if (program.error_file != stderr) /* do not close stream 'stderr' */
+ fclose(program.error_file);
}
void dumpErrorFile()