added option for window icon file to run-time special edition support
[rocksndiamonds.git] / src / main.c
index 74e539656b85e24d84f731f854977326a7257dd9..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"
 
@@ -85,18 +86,24 @@ int                 ActiveFont[NUM_FONTS];
 int                    lev_fieldx, lev_fieldy;
 int                    scroll_x, scroll_y;
 
-int                    WIN_XSIZE = 672, WIN_YSIZE = 560;
-int                    SCR_FIELDX = 17, SCR_FIELDY = 17;
+int                    WIN_XSIZE = WIN_XSIZE_DEFAULT;
+int                    WIN_YSIZE = WIN_YSIZE_DEFAULT;
+
+int                    SCR_FIELDX = SCR_FIELDX_DEFAULT;
+int                    SCR_FIELDY = SCR_FIELDY_DEFAULT;
+
 int                    REAL_SX = 6, REAL_SY = 6;
 int                    SX = 8, SY = 8;
 int                    DX = 566, DY = 60;
 int                    VX = 566, VY = 400;
 int                    EX = 566, EY = 356;
 int                    dDX, dDY;
-int                    FULL_SXSIZE = 2 + 17 * TILEX + 2; /* 2 + SXSIZE + 2 */
-int                    FULL_SYSIZE = 2 + 17 * TILEY + 2; /* 2 + SYSIZE + 2 */
-int                    SXSIZE = 17 * TILEX;    /* SCR_FIELDX * TILEX */
-int                    SYSIZE = 17 * TILEY;    /* SCR_FIELDY * TILEY */
+
+int                    FULL_SXSIZE = 2 + SXSIZE_DEFAULT + 2;
+int                    FULL_SYSIZE = 2 + SYSIZE_DEFAULT + 2;
+int                    SXSIZE = SXSIZE_DEFAULT;
+int                    SYSIZE = SYSIZE_DEFAULT;
+
 int                    DXSIZE = 100;
 int                    DYSIZE = 280;
 int                    VXSIZE = 100;
@@ -5560,7 +5567,6 @@ static void print_usage()
         "  -v, --verbose                    verbose mode\n"
         "  -V, --version                    show program version\n"
         "      --debug                      display debugging information\n"
-        "      --debug-x11-sync             enable X11 synchronous mode\n"
         "  -e, --execute COMMAND            execute batch COMMAND\n"
         "\n"
         "Valid commands for '--execute' option:\n"
@@ -5575,6 +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 DIRECTORY\"      write BMP image to DIRECTORY\n"
         "\n",
         program.command_basename);
 }
@@ -5618,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);