return complete_path;
}
+static char *getStringCat2(char *s1, char *s2)
+{
+ char *complete_string = checked_malloc(strlen(s1) + strlen(s2) + 1);
+
+ sprintf(complete_string, "%s%s", s1, s2);
+ return complete_string;
+}
+
char *getStringCopy(char *s)
{
char *s_copy;
/* ========================================================================= */
struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
- char *suffix_list[],
- int num_list_entries)
+ struct ConfigInfo *suffix_list,
+ int num_file_list_entries)
{
- struct FileInfo *file_list =
- checked_calloc(num_list_entries * sizeof(struct FileInfo));
+ struct FileInfo *file_list;
+ int num_suffix_list_entries = 0;
int list_pos = 0;
int i, j;
+ file_list = checked_calloc(num_file_list_entries * sizeof(struct FileInfo));
+
+ for (i=0; suffix_list[i].token != NULL; i++)
+ num_suffix_list_entries++;
+
+ /* always start with reliable default values */
+ for (i=0; i<num_file_list_entries; i++)
+ {
+ file_list[i].token = NULL;
+ file_list[i].default_filename = NULL;
+ file_list[i].filename = NULL;
+
+ if (num_suffix_list_entries > 0)
+ {
+ int parameter_array_size = num_suffix_list_entries * sizeof(int);
+
+ file_list[i].default_parameter = checked_calloc(parameter_array_size);
+ file_list[i].parameter = checked_calloc(parameter_array_size);
+
+ for (j=0; j<num_suffix_list_entries; j++)
+ {
+ int default_parameter = atoi(suffix_list[j].value);
+
+ file_list[i].default_parameter[j] = default_parameter;
+ file_list[i].parameter[j] = default_parameter;
+ }
+ }
+ }
+
for (i=0; config_list[i].token != NULL; i++)
{
int len_config_token = strlen(config_list[i].token);
boolean is_file_entry = TRUE;
- for (j=0; suffix_list[j] != NULL; j++)
+ for (j=0; suffix_list[j].token != NULL; j++)
{
- int len_suffix = strlen(suffix_list[j]);
+ int len_suffix = strlen(suffix_list[j].token);
if (len_suffix < len_config_token &&
strcmp(&config_list[i].token[len_config_token - len_suffix],
- suffix_list[j]) == 0)
+ suffix_list[j].token) == 0)
{
+ file_list[list_pos].default_parameter[j] = atoi(config_list[i].value);
+
is_file_entry = FALSE;
break;
}
if (is_file_entry)
{
- if (list_pos >= num_list_entries)
+ if (i > 0)
+ list_pos++;
+
+ if (list_pos >= num_file_list_entries)
Error(ERR_EXIT, "inconsistant config list information -- please fix");
file_list[list_pos].token = config_list[i].token;
file_list[list_pos].default_filename = config_list[i].value;
-
- list_pos++;
}
}
- if (list_pos != num_list_entries)
+ if (list_pos != num_file_list_entries - 1)
Error(ERR_EXIT, "inconsistant config list information -- please fix");
return file_list;
static void LoadArtworkConfig(struct ArtworkListInfo *artwork_info)
{
- int num_list_entries = artwork_info->num_list_entries;
struct FileInfo *file_list = artwork_info->file_list;
+ struct ConfigInfo *suffix_list = artwork_info->suffix_list;
+ int num_file_list_entries = artwork_info->num_file_list_entries;
+ int num_suffix_list_entries = artwork_info->num_suffix_list_entries;
char *filename = getCustomArtworkConfigFilename(artwork_info->type);
struct SetupFileList *setup_file_list;
- int i;
+ int i, j;
#if 0
printf("GOT CUSTOM ARTWORK CONFIG FILE '%s'\n", filename);
#endif
/* always start with reliable default values */
- for (i=0; i<num_list_entries; i++)
+ for (i=0; i<num_file_list_entries; i++)
+ {
+ if (file_list[i].filename != NULL)
+ free(file_list[i].filename);
file_list[i].filename = NULL;
+ for (j=0; j<num_suffix_list_entries; j++)
+ file_list[i].parameter[j] = file_list[i].default_parameter[j];
+ }
+
if (filename == NULL)
return;
if ((setup_file_list = loadSetupFileList(filename)))
{
- for (i=0; i<num_list_entries; i++)
- file_list[i].filename =
- getStringCopy(getTokenValue(setup_file_list, file_list[i].token));
+ for (i=0; i<num_file_list_entries; i++)
+ {
+ char *filename = getTokenValue(setup_file_list, file_list[i].token);
+
+ if (filename == NULL)
+ filename = file_list[i].default_filename;
+ file_list[i].filename = getStringCopy(filename);
+
+ for (j=0; j<num_suffix_list_entries; j++)
+ {
+ char *token = getStringCat2(file_list[i].token, suffix_list[j].token);
+ char *value = getTokenValue(setup_file_list, token);
+
+ if (value != NULL)
+ file_list[i].parameter[j] = atoi(value);
+
+ free(token);
+ }
+ }
freeSetupFileList(setup_file_list);
#if 0
- for (i=0; i<num_list_entries; i++)
+ for (i=0; i<num_file_list_entries; i++)
{
printf("'%s' ", file_list[i].token);
if (file_list[i].filename)
char *basename, int list_pos)
{
if (artwork_info->artwork_list == NULL ||
- list_pos >= artwork_info->num_list_entries)
+ list_pos >= artwork_info->num_file_list_entries)
return;
#if 0
{ "Loading music:", TRUE }
};
- int num_list_entries = artwork_info->num_list_entries;
+ int num_file_list_entries = artwork_info->num_file_list_entries;
struct FileInfo *file_list = artwork_info->file_list;
int i;
DrawInitText(draw_init[artwork_info->type].text, 120, FC_GREEN);
#if 0
- printf("DEBUG: reloading %d sounds ...\n", num_list_entries);
+ printf("DEBUG: reloading %d artwork files ...\n", num_file_list_entries);
#endif
- for(i=0; i<num_list_entries; i++)
+ for(i=0; i<num_file_list_entries; i++)
{
if (draw_init[artwork_info->type].do_it)
DrawInitText(file_list[i].token, 150, FC_YELLOW);
- if (file_list[i].filename)
- LoadArtworkToList(artwork_info, file_list[i].filename, i);
- else
- LoadArtworkToList(artwork_info, file_list[i].default_filename, i);
+ LoadArtworkToList(artwork_info, file_list[i].filename, i);
}
draw_init[artwork_info->type].do_it = FALSE;
IS_CHILD_PROCESS(audio.mixer_pid) ? "CHILD" : "PARENT");
#endif
- for(i=0; i<artwork_info->num_list_entries; i++)
+ for(i=0; i<artwork_info->num_file_list_entries; i++)
deleteArtworkListEntry(artwork_info, &artwork_info->artwork_list[i]);
#if 0
free(artwork_info->artwork_list);
artwork_info->artwork_list = NULL;
- artwork_info->num_list_entries = 0;
+ artwork_info->num_file_list_entries = 0;
}