{
setHashEntry(missing_file_hash, filename, "");
- Warn("cannot find artwork file '%s' (using fallback)", filename);
+ Debug("setup", "cannot find artwork file '%s' (using fallback)", filename);
}
}
set the current working directory to the program package directory) */
char *main_data_path = getBasePath(command_filename);
-#if defined(PLATFORM_MACOSX)
+#if defined(PLATFORM_MAC)
if (strSuffix(main_data_path, MAC_APP_BINARY_SUBDIR))
{
char *main_data_path_old = main_data_path;
return config_filename_3;
}
+static char *getPlatformConfigFilename(char *config_filename)
+{
+ static char *platform_config_filename = NULL;
+ static boolean initialized = FALSE;
+
+ if (!initialized)
+ {
+ char *config_basepath = getBasePath(config_filename);
+ char *config_basename = getBaseNameNoSuffix(config_filename);
+ char *config_filename_prefix = getPath2(config_basepath, config_basename);
+ char *platform_string_lower = getStringToLower(PLATFORM_STRING);
+ char *platform_suffix = getStringCat2("-", platform_string_lower);
+
+ platform_config_filename = getStringCat3(config_filename_prefix,
+ platform_suffix, ".conf");
+
+ checked_free(config_basepath);
+ checked_free(config_basename);
+ checked_free(config_filename_prefix);
+ checked_free(platform_string_lower);
+ checked_free(platform_suffix);
+
+ initialized = TRUE;
+ }
+
+ return platform_config_filename;
+}
+
char *getTapeFilename(int nr)
{
static char *filename = NULL;
return program.config_filename;
}
+char *getPlatformSetupFilename(void)
+{
+ return getPlatformConfigFilename(program.config_filename);
+}
+
char *getEditorSetupFilename(void)
{
static char *filename = NULL;
static char *filename = NULL;
if (info_subdir == NULL)
- info_subdir = getPath2(DOCS_DIRECTORY, INFO_DIRECTORY);
+ info_subdir = getPath2(DOCS_DIRECTORY, PROGRAM_INFO_DIRECTORY);
checked_free(filename);
{
boolean new_tape_dir = !directoryExists(getTapeDir(level_subdir));
- createDirectory(getUserGameDataDir(), "user data", PERMS_PRIVATE);
- createDirectory(getTapeDir(NULL), "main tape", PERMS_PRIVATE);
- createDirectory(getTapeDir(level_subdir), "level tape", PERMS_PRIVATE);
+ createDirectory(getUserGameDataDir(), "user data");
+ createDirectory(getTapeDir(NULL), "main tape");
+ createDirectory(getTapeDir(level_subdir), "level tape");
if (new_tape_dir)
MarkTapeDirectoryUploadsAsComplete(level_subdir);
void InitScoreDirectory(char *level_subdir)
{
- createDirectory(getMainUserGameDataDir(), "main user data", PERMS_PRIVATE);
- createDirectory(getScoreDir(NULL), "main score", PERMS_PRIVATE);
- createDirectory(getScoreDir(level_subdir), "level score", PERMS_PRIVATE);
+ createDirectory(getMainUserGameDataDir(), "main user data");
+ createDirectory(getScoreDir(NULL), "main score");
+ createDirectory(getScoreDir(level_subdir), "level score");
}
void InitScoreCacheDirectory(char *level_subdir)
{
- createDirectory(getMainUserGameDataDir(), "main user data", PERMS_PRIVATE);
- createDirectory(getCacheDir(), "cache data", PERMS_PRIVATE);
- createDirectory(getScoreCacheDir(NULL), "main score", PERMS_PRIVATE);
- createDirectory(getScoreCacheDir(level_subdir), "level score", PERMS_PRIVATE);
+ createDirectory(getMainUserGameDataDir(), "main user data");
+ createDirectory(getCacheDir(), "cache data");
+ createDirectory(getScoreCacheDir(NULL), "main score");
+ createDirectory(getScoreCacheDir(level_subdir), "level score");
}
void InitScoreTapeDirectory(char *level_subdir, int nr)
{
InitScoreDirectory(level_subdir);
- createDirectory(getScoreTapeDir(level_subdir, nr), "score tape", PERMS_PRIVATE);
+ createDirectory(getScoreTapeDir(level_subdir, nr), "score tape");
}
void InitScoreCacheTapeDirectory(char *level_subdir, int nr)
{
InitScoreCacheDirectory(level_subdir);
- createDirectory(getScoreCacheTapeDir(level_subdir, nr), "score tape", PERMS_PRIVATE);
+ createDirectory(getScoreCacheTapeDir(level_subdir, nr), "score tape");
}
static void SaveUserLevelInfo(void);
{
if (!directoryExists(getUserLevelDir(level_subdir)))
{
- createDirectory(getMainUserGameDataDir(), "main user data", PERMS_PRIVATE);
- createDirectory(getUserLevelDir(NULL), "main user level", PERMS_PRIVATE);
- createDirectory(getUserLevelDir(level_subdir), "user level", PERMS_PRIVATE);
+ createDirectory(getMainUserGameDataDir(), "main user data");
+ createDirectory(getUserLevelDir(NULL), "main user level");
if (setup.internal.create_user_levelset)
+ {
+ createDirectory(getUserLevelDir(level_subdir), "user level");
+
SaveUserLevelInfo();
+ }
}
}
{
if (!directoryExists(getNetworkLevelDir(level_subdir)))
{
- createDirectory(getMainUserGameDataDir(), "main user data", PERMS_PRIVATE);
- createDirectory(getNetworkDir(), "network data", PERMS_PRIVATE);
- createDirectory(getNetworkLevelDir(NULL), "main network level", PERMS_PRIVATE);
- createDirectory(getNetworkLevelDir(level_subdir), "network level", PERMS_PRIVATE);
+ createDirectory(getMainUserGameDataDir(), "main user data");
+ createDirectory(getNetworkDir(), "network data");
+ createDirectory(getNetworkLevelDir(NULL), "main network level");
+ createDirectory(getNetworkLevelDir(level_subdir), "network level");
}
}
void InitLevelSetupDirectory(char *level_subdir)
{
- createDirectory(getUserGameDataDir(), "user data", PERMS_PRIVATE);
- createDirectory(getLevelSetupDir(NULL), "main level setup", PERMS_PRIVATE);
- createDirectory(getLevelSetupDir(level_subdir), "level setup", PERMS_PRIVATE);
+ createDirectory(getUserGameDataDir(), "user data");
+ createDirectory(getLevelSetupDir(NULL), "main level setup");
+ createDirectory(getLevelSetupDir(level_subdir), "level setup");
}
static void InitCacheDirectory(void)
{
- createDirectory(getMainUserGameDataDir(), "main user data", PERMS_PRIVATE);
- createDirectory(getCacheDir(), "cache data", PERMS_PRIVATE);
+ createDirectory(getMainUserGameDataDir(), "main user data");
+ createDirectory(getCacheDir(), "cache data");
}
// some stuff from "files.c"
// ============================================================================
-#if defined(PLATFORM_WIN32)
+#if defined(PLATFORM_WINDOWS)
#ifndef S_IRGRP
#define S_IRGRP S_IRUSR
#endif
#ifndef S_ISGID
#define S_ISGID 0
#endif
-#endif // PLATFORM_WIN32
+#endif // PLATFORM_WINDOWS
// file permissions for newly written files
#define MODE_R_ALL (S_IRUSR | S_IRGRP | S_IROTH)
{
static char *dir = NULL;
-#if defined(PLATFORM_WIN32)
+#if defined(PLATFORM_WINDOWS)
if (dir == NULL)
{
dir = checked_malloc(MAX_PATH + 1);
{
static char *personal_data_dir = NULL;
-#if defined(PLATFORM_MACOSX)
+#if defined(PLATFORM_MAC)
if (personal_data_dir == NULL)
personal_data_dir = getPath2(getHomeDir(), "Documents");
#else
static int posix_mkdir(const char *pathname, mode_t mode)
{
-#if defined(PLATFORM_WIN32)
+#if defined(PLATFORM_WINDOWS)
return mkdir(pathname);
#else
return mkdir(pathname, mode);
#endif
}
-void createDirectory(char *dir, char *text, int permission_class)
+void createDirectory(char *dir, char *text)
{
if (directoryExists(dir))
return;
// leave "other" permissions in umask untouched, but ensure group parts
// of USERDATA_DIR_MODE are not masked
+ int permission_class = PERMS_PRIVATE;
mode_t dir_mode = (permission_class == PERMS_PRIVATE ?
DIR_PERMS_PRIVATE : DIR_PERMS_PUBLIC);
mode_t last_umask = posix_umask(0);
void InitMainUserDataDirectory(void)
{
- createDirectory(getMainUserGameDataDir(), "main user data", PERMS_PRIVATE);
+ createDirectory(getMainUserGameDataDir(), "main user data");
}
void InitUserDataDirectory(void)
{
- createDirectory(getMainUserGameDataDir(), "main user data", PERMS_PRIVATE);
+ createDirectory(getMainUserGameDataDir(), "main user data");
if (user.nr != 0)
{
- createDirectory(getUserDir(-1), "users", PERMS_PRIVATE);
- createDirectory(getUserDir(user.nr), "user data", PERMS_PRIVATE);
+ createDirectory(getUserDir(-1), "users");
+ createDirectory(getUserDir(user.nr), "user data");
}
}
#define LEVELINFO_TOKEN_EMPTY_LEVEL_NAME 27
#define LEVELINFO_TOKEN_FORCE_LEVEL_NAME 28
#define LEVELINFO_TOKEN_HANDICAP 29
-#define LEVELINFO_TOKEN_SKIP_LEVELS 30
-#define LEVELINFO_TOKEN_USE_EMC_TILES 31
+#define LEVELINFO_TOKEN_TIME_LIMIT 30
+#define LEVELINFO_TOKEN_SKIP_LEVELS 31
+#define LEVELINFO_TOKEN_USE_EMC_TILES 32
-#define NUM_LEVELINFO_TOKENS 32
+#define NUM_LEVELINFO_TOKENS 33
static LevelDirTree ldi;
{ TYPE_STRING, &ldi.empty_level_name, "empty_level_name" },
{ TYPE_BOOLEAN, &ldi.force_level_name, "force_level_name" },
{ TYPE_BOOLEAN, &ldi.handicap, "handicap" },
+ { TYPE_BOOLEAN, &ldi.time_limit, "time_limit" },
{ TYPE_BOOLEAN, &ldi.skip_levels, "skip_levels" },
{ TYPE_BOOLEAN, &ldi.use_emc_tiles, "use_emc_tiles" }
};
ti->handicap_level = 0;
ti->readonly = TRUE;
ti->handicap = TRUE;
+ ti->time_limit = TRUE;
ti->skip_levels = FALSE;
ti->use_emc_tiles = FALSE;
ti->handicap_level = parent->handicap_level;
ti->readonly = parent->readonly;
ti->handicap = parent->handicap;
+ ti->time_limit = parent->time_limit;
ti->skip_levels = parent->skip_levels;
ti->use_emc_tiles = parent->use_emc_tiles;
ti_copy->user_defined = ti->user_defined;
ti_copy->readonly = ti->readonly;
ti_copy->handicap = ti->handicap;
+ ti_copy->time_limit = ti->time_limit;
ti_copy->skip_levels = ti->skip_levels;
ti_copy->use_emc_tiles = ti->use_emc_tiles;
level_directory, ".");
}
- if (!valid_entry_found)
+ boolean valid_entry_expected =
+ (strEqual(level_directory, options.level_directory) ||
+ setup.internal.create_user_levelset);
+
+ if (valid_entry_expected && !valid_entry_found)
Warn("cannot find any valid level series in directory '%s'",
- level_directory);
+ level_directory);
}
boolean AdjustGraphicsForEMC(void)
int i;
// create user level sub-directory, if needed
- createDirectory(getUserLevelDir(level_subdir), "user level", PERMS_PRIVATE);
+ createDirectory(getUserLevelDir(level_subdir), "user level");
filename = getPath2(getUserLevelDir(level_subdir), LEVELINFO_FILENAME);