return getLevelDirFromTreeInfo(leveldir_current);
}
+char *getNewUserLevelSubdir()
+{
+ static char *new_level_subdir = NULL;
+ char *subdir_prefix = getLoginName();
+ char subdir_suffix[10];
+ int max_suffix_number = 1000;
+ int i = 0;
+
+ while (++i < max_suffix_number)
+ {
+ sprintf(subdir_suffix, "_%d", i);
+
+ checked_free(new_level_subdir);
+ new_level_subdir = getStringCat2(subdir_prefix, subdir_suffix);
+
+ if (!directoryExists(getUserLevelDir(new_level_subdir)))
+ break;
+ }
+
+ return new_level_subdir;
+}
+
static char *getTapeDir(char *level_subdir)
{
static char *tape_dir = NULL;
ti->imported_by = getStringCopy(parent->imported_by);
ti->tested_by = getStringCopy(parent->tested_by);
- ti->graphics_set_ecs = NULL;
- ti->graphics_set_aga = NULL;
- ti->graphics_set = NULL;
- ti->sounds_set = NULL;
- ti->music_set = NULL;
+ ti->graphics_set_ecs = getStringCopy(parent->graphics_set_ecs);
+ ti->graphics_set_aga = getStringCopy(parent->graphics_set_aga);
+ ti->graphics_set = getStringCopy(parent->graphics_set);
+ ti->sounds_set = getStringCopy(parent->sounds_set);
+ ti->music_set = getStringCopy(parent->music_set);
ti->graphics_path = getStringCopy(UNDEFINED_FILENAME);
ti->sounds_path = getStringCopy(UNDEFINED_FILENAME);
ti->music_path = getStringCopy(UNDEFINED_FILENAME);
- ti->level_filename = NULL;
- ti->level_filetype = NULL;
+ ti->level_filename = getStringCopy(parent->level_filename);
+ ti->level_filetype = getStringCopy(parent->level_filetype);
ti->special_flags = getStringCopy(parent->special_flags);
- ti->levels = 0;
- ti->first_level = 0;
- ti->last_level = 0;
+ ti->levels = parent->levels;
+ ti->first_level = parent->first_level;
+ ti->last_level = parent->last_level;
ti->level_group = FALSE;
- ti->handicap_level = 0;
+ ti->handicap_level = parent->handicap_level;
ti->readonly = parent->readonly;
- ti->handicap = TRUE;
- ti->skip_levels = FALSE;
+ ti->handicap = parent->handicap;
+ ti->skip_levels = parent->skip_levels;
}
}
print_timestamp_done("LoadLevelArtworkInfo");
}
-static void SaveUserLevelInfo()
+boolean UpdateUserLevelSet(char *level_subdir,
+ char *level_name, char *level_author,
+ int num_levels, int first_level_nr)
+{
+ char *filename = getPath2(getUserLevelDir(level_subdir), LEVELINFO_FILENAME);
+ char *filename_tmp = getStringCat2(filename, ".tmp");
+ FILE *file = NULL;
+ FILE *file_tmp = NULL;
+ char line[MAX_LINE_LEN];
+ boolean success = FALSE;
+
+ if ((file = fopen(filename, MODE_READ)) &&
+ (file_tmp = fopen(filename_tmp, MODE_WRITE)))
+ {
+ while (fgets(line, MAX_LINE_LEN, file))
+ {
+ if (strPrefix(line, "name:") && level_name != NULL)
+ fprintf(file_tmp, "%-32s%s\n", "name:", level_name);
+ else if (strPrefix(line, "author:") && level_author != NULL)
+ fprintf(file_tmp, "%-32s%s\n", "author:", level_author);
+ else if (strPrefix(line, "levels:") && num_levels != -1)
+ fprintf(file_tmp, "%-32s%d\n", "levels:", num_levels);
+ else if (strPrefix(line, "first_level:") && first_level_nr != -1)
+ fprintf(file_tmp, "%-32s%d\n", "first_level:", first_level_nr);
+ else
+ fputs(line, file_tmp);
+ }
+
+ success = TRUE;
+ }
+
+ if (file)
+ fclose(file);
+
+ if (file_tmp)
+ fclose(file_tmp);
+
+ if (success)
+ success = (rename(filename_tmp, filename) == 0);
+
+ free(filename);
+ free(filename_tmp);
+
+ return success;
+}
+
+boolean CreateUserLevelSet(char *level_subdir,
+ char *level_name, char *level_author,
+ int num_levels, int first_level_nr)
{
LevelDirTree *level_info;
char *filename;
FILE *file;
int i;
- filename = getPath2(getUserLevelDir(getLoginName()), LEVELINFO_FILENAME);
+ // create user level sub-directory, if needed
+ createDirectory(getUserLevelDir(level_subdir), "user level", PERMS_PRIVATE);
+
+ filename = getPath2(getUserLevelDir(level_subdir), LEVELINFO_FILENAME);
if (!(file = fopen(filename, MODE_WRITE)))
{
Error(ERR_WARN, "cannot write level info file '%s'", filename);
free(filename);
- return;
+
+ return FALSE;
}
level_info = newTreeInfo();
/* always start with reliable default values */
setTreeInfoToDefaults(level_info, TREE_TYPE_LEVEL_DIR);
- setString(&level_info->name, getLoginName());
- setString(&level_info->author, getRealName());
- level_info->levels = 100;
- level_info->first_level = 1;
+ setString(&level_info->name, level_name);
+ setString(&level_info->author, level_author);
+ level_info->levels = num_levels;
+ level_info->first_level = first_level_nr;
+ level_info->sort_priority = LEVELCLASS_PRIVATE_START;
+ level_info->readonly = FALSE;
token_value_position = TOKEN_VALUE_POSITION_SHORT;
if (i == LEVELINFO_TOKEN_NAME ||
i == LEVELINFO_TOKEN_AUTHOR ||
i == LEVELINFO_TOKEN_LEVELS ||
- i == LEVELINFO_TOKEN_FIRST_LEVEL)
+ i == LEVELINFO_TOKEN_FIRST_LEVEL ||
+ i == LEVELINFO_TOKEN_SORT_PRIORITY ||
+ i == LEVELINFO_TOKEN_READONLY)
fprintf(file, "%s\n", getSetupLine(levelinfo_tokens, "", i));
/* just to make things nicer :) */
- if (i == LEVELINFO_TOKEN_AUTHOR)
+ if (i == LEVELINFO_TOKEN_AUTHOR ||
+ i == LEVELINFO_TOKEN_FIRST_LEVEL)
fprintf(file, "\n");
}
freeTreeInfo(level_info);
free(filename);
+
+ return TRUE;
+}
+
+static void SaveUserLevelInfo()
+{
+ CreateUserLevelSet(getLoginName(), getLoginName(), getRealName(), 100, 1);
}
char *getSetupValue(int type, void *value)