+#if 0
+ printf("loading artwork '%s' done [%d]\n",
+ basename, getNumNodes(artwork_info->content_list));
+#endif
+}
+#endif
+
+void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info)
+{
+ struct FileInfo *file_list = artwork_info->file_list;
+ struct FileInfo *dynamic_file_list = artwork_info->dynamic_file_list;
+ int num_file_list_entries = artwork_info->num_file_list_entries;
+ int num_dynamic_file_list_entries =
+ artwork_info->num_dynamic_file_list_entries;
+ int i;
+
+#if 0
+ printf("DEBUG: reloading %d static artwork files ...\n",
+ num_file_list_entries);
+#endif
+
+ for (i = 0; i < num_file_list_entries; i++)
+ {
+#if 0
+ if (strcmp(file_list[i].token, "background") == 0)
+ printf("::: '%s' -> '%s'\n", file_list[i].token, file_list[i].filename);
+#endif
+
+#if 1
+ LoadArtworkToList(artwork_info, &artwork_info->artwork_list[i],
+ &file_list[i]);
+#else
+ LoadArtworkToList(artwork_info, &artwork_info->artwork_list[i],
+ file_list[i].filename, i);
+#endif
+
+#if 0
+ /* !!! NEW ARTWORK FALLBACK CODE !!! NEARLY UNTESTED !!! */
+ if (artwork_info->artwork_list[i] == NULL &&
+ strcmp(file_list[i].filename, UNDEFINED_FILENAME) != 0 &&
+ strcmp(file_list[i].default_filename, file_list[i].filename) != 0 &&
+ strcmp(file_list[i].default_filename, UNDEFINED_FILENAME) != 0)
+ {
+ Error(ERR_WARN, "trying default artwork file '%s'",
+ file_list[i].default_filename);
+
+ LoadArtworkToList(artwork_info, &artwork_info->artwork_list[i],
+ file_list[i].default_filename, i);
+
+ /* even the fallback to default artwork was not successful -- fail now */
+ if (artwork_info->artwork_list[i] == NULL &&
+ artwork_info->type == ARTWORK_TYPE_GRAPHICS)
+ Error(ERR_EXIT, "cannot find artwork file '%s' or default file '%s'",
+ file_list[i].filename, file_list[i].default_filename);
+
+ file_list[i].fallback_to_default = TRUE;
+ }
+#endif
+ }
+
+#if 0
+ printf("DEBUG: reloading %d dynamic artwork files ...\n",
+ num_dynamic_file_list_entries);
+#endif
+
+ for (i = 0; i < num_dynamic_file_list_entries; i++)
+ {
+#if 1
+ LoadArtworkToList(artwork_info, &artwork_info->dynamic_artwork_list[i],
+ &dynamic_file_list[i]);
+#else
+ LoadArtworkToList(artwork_info, &artwork_info->dynamic_artwork_list[i],
+ dynamic_file_list[i].filename, i);
+#endif
+
+#if 0
+ printf("::: '%s', '0x%08x'\n",
+ dynamic_file_list[i].filename,
+ dynamic_file_list[i].default_filename);
+#endif
+
+ /* dynamic artwork does not have default filename! */
+ }
+
+#if 0
+ dumpList(artwork_info->content_list);
+#endif
+}
+
+static void FreeCustomArtworkList(struct ArtworkListInfo *artwork_info,
+ struct ListNodeInfo ***list,
+ int *num_list_entries)
+{
+ int i;
+
+ if (*list == NULL)
+ return;
+
+ for (i = 0; i < *num_list_entries; i++)
+ deleteArtworkListEntry(artwork_info, &(*list)[i]);
+ free(*list);
+
+ *list = NULL;
+ *num_list_entries = 0;
+}
+
+void FreeCustomArtworkLists(struct ArtworkListInfo *artwork_info)
+{
+ if (artwork_info == NULL)
+ return;
+
+#if 0
+ printf("%s: FREEING ARTWORK ...\n",
+ IS_CHILD_PROCESS() ? "CHILD" : "PARENT");
+#endif
+
+ FreeCustomArtworkList(artwork_info, &artwork_info->artwork_list,
+ &artwork_info->num_file_list_entries);
+
+ FreeCustomArtworkList(artwork_info, &artwork_info->dynamic_artwork_list,
+ &artwork_info->num_dynamic_file_list_entries);
+
+#if 0
+ printf("%s: FREEING ARTWORK -- DONE\n",
+ IS_CHILD_PROCESS() ? "CHILD" : "PARENT");
+#endif
+}
+
+
+/* ------------------------------------------------------------------------- */
+/* functions only needed for non-Unix (non-command-line) systems */
+/* (MS-DOS only; SDL/Windows creates files "stdout.txt" and "stderr.txt") */
+/* ------------------------------------------------------------------------- */
+
+#if defined(PLATFORM_MSDOS)
+
+#define ERROR_FILENAME "stderr.txt"
+
+void initErrorFile()
+{
+ unlink(ERROR_FILENAME);
+}
+
+FILE *openErrorFile()
+{
+ return fopen(ERROR_FILENAME, MODE_APPEND);
+}
+
+void dumpErrorFile()
+{
+ FILE *error_file = fopen(ERROR_FILENAME, MODE_READ);