added option for window icon file to run-time special edition support
[rocksndiamonds.git] / src / main.c
index 836e0594df2d850731e86e68f239ec8b534f17c6..5bc7e681553d3d85e9254fa16ad0b9adfa731bae 100644 (file)
@@ -16,6 +16,7 @@
 #include "game.h"
 #include "tape.h"
 #include "tools.h"
+#include "files.h"
 #include "events.h"
 #include "config.h"
 
@@ -5580,7 +5581,7 @@ static void print_usage()
         "  \"autoplay LEVELDIR [NR ...]\"     play level tapes for LEVELDIR\n"
         "  \"convert LEVELDIR [NR]\"          convert levels in LEVELDIR\n"
         "  \"create images DIRECTORY\"        write BMP images to DIRECTORY\n"
-        "  \"create CE image FILE\"           write BMP image to FILE\n"
+        "  \"create CE image DIRECTORY\"      write BMP image to DIRECTORY\n"
         "\n",
         program.command_basename);
 }
@@ -5624,11 +5625,57 @@ static void print_version()
   }
 }
 
+static void InitProgramConfig(char *command_filename)
+{
+  char *command_basename = getBaseName(command_filename);
+  char *config_filename = getProgramConfigFilename(command_filename);
+  char *program_title = PROGRAM_TITLE_STRING;
+  char *program_icon_file = PROGRAM_ICON_FILENAME;
+  char *userdata_subdir;
+  char *userdata_subdir_unix;
+
+  // read default program config, if existing
+  if (fileExists(config_filename))
+    LoadSetupFromFilename(config_filename);
+
+  // set program title from potentially redefined program title
+  if (setup.internal.program_title != NULL &&
+      strlen(setup.internal.program_title) > 0)
+    program_title = getStringCopy(setup.internal.program_title);
+
+  // set program icon file from potentially redefined program icon file
+  if (setup.internal.program_icon_file != NULL &&
+      strlen(setup.internal.program_icon_file) > 0)
+    program_icon_file = getStringCopy(setup.internal.program_icon_file);
+
+  // strip trailing executable suffix from command basename
+  if (strSuffix(command_basename, ".exe"))
+    command_basename[strlen(command_basename) - 4] = '\0';
+
+  userdata_subdir_unix = getStringCat2(".", command_basename);
+
+#if defined(PLATFORM_WIN32) || defined(PLATFORM_MACOSX)
+  userdata_subdir = program_title;
+#elif defined(PLATFORM_UNIX)
+  userdata_subdir = userdata_subdir_unix;
+#else
+  userdata_subdir = USERDATA_DIRECTORY_OTHER;
+#endif
+
+  InitProgramInfo(command_filename,
+                 config_filename,
+                 userdata_subdir,
+                 userdata_subdir_unix,
+                 program_title,
+                 program_title,
+                 program_icon_file,
+                 COOKIE_PREFIX,
+                 GAME_VERSION_ACTUAL);
+}
+
 int main(int argc, char *argv[])
 {
-  InitProgramInfo(argv[0], USERDATA_DIRECTORY, USERDATA_DIRECTORY_UNIX,
-                 PROGRAM_TITLE_STRING, ICON_TITLE_STRING, SDL_ICON_FILENAME,
-                 COOKIE_PREFIX, GAME_VERSION_ACTUAL);
+  InitProgramConfig(argv[0]);
 
   InitWindowTitleFunction(getWindowTitleString);
   InitExitMessageFunction(DisplayExitMessage);