/***********************************************************
* Artsoft Retro-Game Library *
*----------------------------------------------------------*
-* (c) 1994-2002 Artsoft Entertainment *
+* (c) 1994-2006 Artsoft Entertainment *
* Holger Schemel *
* Detmolder Strasse 189 *
* 33604 Bielefeld *
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 */
return internal_error;
}
-#if 1
-
void Error(int mode, char *format, ...)
{
static boolean last_line_was_separator = FALSE;
}
}
-#else
-
-void Error(int mode, char *format, ...)
-{
- static boolean last_line_was_separator = FALSE;
- char *process_name = "";
- FILE *error = stderr;
- char *newline = "\n";
-
- /* display warnings only when running in verbose mode */
- if (mode & ERR_WARN && !options.verbose)
- return;
-
- if (mode == ERR_RETURN_LINE)
- {
- if (!last_line_was_separator)
- fprintf_line(error, format, 79);
-
- last_line_was_separator = TRUE;
-
- return;
- }
-
- last_line_was_separator = FALSE;
-
-#if defined(PLATFORM_WIN32) || defined(PLATFORM_MSDOS)
- newline = "\r\n";
-
- if ((error = openErrorFile()) == NULL)
- {
- printf("Cannot write to error output file!%s", newline);
-
- program.exit_function(1);
- }
-#endif
-
- if (mode & ERR_SOUND_SERVER)
- process_name = " sound server";
- else if (mode & ERR_NETWORK_SERVER)
- process_name = " network server";
- else if (mode & ERR_NETWORK_CLIENT)
- process_name = " network client **";
-
- if (format)
- {
- va_list ap;
-
- fprintf(error, "%s%s: ", program.command_basename, process_name);
-
- if (mode & ERR_WARN)
- fprintf(error, "warning: ");
-
- va_start(ap, format);
- vfprintf(error, format, ap);
- va_end(ap);
-
- fprintf(error, "%s", newline);
- }
-
- if (mode & ERR_HELP)
- fprintf(error, "%s: Try option '--help' for more information.%s",
- program.command_basename, newline);
-
- if (mode & ERR_EXIT)
- fprintf(error, "%s%s: aborting%s",
- program.command_basename, process_name, newline);
-
- if (error != stderr)
- fclose(error);
-
- if (mode & ERR_EXIT)
- {
- if (mode & ERR_FROM_SERVER)
- exit(1); /* child process: normal exit */
- else
- program.exit_function(1); /* main process: clean up stuff */
- }
-}
-
-#endif
-
/* ------------------------------------------------------------------------- */
/* checked memory allocation and freeing functions */
sprintf(name_buffer, "%c", '0' + (char)(key - KSYM_0));
else if (key >= KSYM_KP_0 && key <= KSYM_KP_9)
sprintf(name_buffer, "keypad %c", '0' + (char)(key - KSYM_KP_0));
-#if 1
else if (key >= KSYM_FKEY_FIRST && key <= KSYM_FKEY_LAST)
sprintf(name_buffer, "F%d", (int)(key - KSYM_FKEY_FIRST + 1));
-#else
- else if (key >= KSYM_FKEY_FIRST && key <= KSYM_FKEY_LAST)
- sprintf(name_buffer, "function F%d", (int)(key - KSYM_FKEY_FIRST + 1));
-#endif
else if (key == KSYM_UNDEFINED)
strcpy(name_buffer, "(undefined)");
else
if (strEqual((*node_first)->key, key))
{
- free((*node_first)->key);
+ checked_free((*node_first)->key);
if (destructor_function)
destructor_function((*node_first)->content);
*node_first = (*node_first)->next;
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;
+}
+
+void get_aspect_ratio_from_screen_mode(struct ScreenModeInfo *screen_mode,
+ int *x, int *y)
+{
+ float aspect_ratio = (float)screen_mode->width / (float)screen_mode->height;
+ float aspect_ratio_new;
+ int i = 1;
+
+ do
+ {
+ *x = i * aspect_ratio + 0.000001;
+ *y = i;
+
+ aspect_ratio_new = (float)*x / (float)*y;
+
+ i++;
+ }
+ while (aspect_ratio_new != aspect_ratio && *y < screen_mode->height);
+}
+
static void FreeCustomArtworkList(struct ArtworkListInfo *,
struct ListNodeInfo ***, int *);
char *getErrorFilename(char *basename)
{
- return getPath2(getUserDataDir(), basename);
+ return getPath2(getUserGameDataDir(), basename);
}
void openErrorFile()
{
- /* always start with reliable default values */
- program.error_file = stderr;
+ InitUserDataDirectory();
-#if defined(PLATFORM_WIN32) || defined(PLATFORM_MSDOS)
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
}
void closeErrorFile()