rw_base_path = getProgramMainDataPath();
/* initialize global program options */
- options.display_name = NULL;
options.server_host = NULL;
options.server_port = 0;
exit(0);
}
- else if (strncmp(option, "-display", option_len) == 0)
- {
- if (option_arg == NULL)
- Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
-
- options.display_name = option_arg;
- if (option_arg == next_option)
- options_left++;
- }
else if (strncmp(option, "-basepath", option_len) == 0)
{
if (option_arg == NULL)
return getStringCat2(map_token_prefix[i][1], &token[len_token_prefix]);
}
+ // change tokens containing ".gfx" by moving the "gfx" part to the very left
+ char *gfx_substring = ".gfx";
+ char *gfx_prefix = "gfx.";
+ if (strstr(token, gfx_substring) != NULL)
+ {
+ char *token_prefix = getStringCopy(token);
+ char *token_gfx_pos = strstr(token_prefix, gfx_substring);
+ char *token_suffix = &token_gfx_pos[strlen(gfx_substring)];
+ char *mapped_token;
+
+ // cut off token string at ".gfx" substring position
+ *token_gfx_pos = '\0';
+
+ // put together prefix "gfx." and token prefix and suffix without ".gfx"
+ mapped_token = getStringCat3(gfx_prefix, token_prefix, token_suffix);
+
+ free(token_prefix);
+
+ return mapped_token;
+ }
+
return NULL;
}
return result;
}
-struct ScreenModeInfo *get_screen_mode_from_string(char *screen_mode_string)
-{
- static struct ScreenModeInfo screen_mode;
- char *screen_mode_string_x = strchr(screen_mode_string, 'x');
- char *screen_mode_string_copy;
- char *screen_mode_string_pos_w;
- char *screen_mode_string_pos_h;
-
- if (screen_mode_string_x == NULL) /* invalid screen mode format */
- return NULL;
-
- screen_mode_string_copy = getStringCopy(screen_mode_string);
-
- screen_mode_string_pos_w = screen_mode_string_copy;
- screen_mode_string_pos_h = strchr(screen_mode_string_copy, 'x');
- *screen_mode_string_pos_h++ = '\0';
-
- screen_mode.width = atoi(screen_mode_string_pos_w);
- screen_mode.height = atoi(screen_mode_string_pos_h);
-
- return &screen_mode;
-}
-
-void get_aspect_ratio_from_screen_mode(struct ScreenModeInfo *screen_mode,
- int *x, int *y)
-{
- float aspect_ratio = (float)screen_mode->width / (float)screen_mode->height;
- float aspect_ratio_new;
- int i = 1;
-
- do
- {
- *x = i * aspect_ratio + 0.000001;
- *y = i;
-
- aspect_ratio_new = (float)*x / (float)*y;
-
- i++;
- }
- while (aspect_ratio_new != aspect_ratio && *y < screen_mode->height);
-}
-
static void FreeCustomArtworkList(struct ArtworkListInfo *,
struct ListNodeInfo ***, int *);
int num_ext2_suffixes = artwork_info->num_ext2_suffixes;
int num_ext3_suffixes = artwork_info->num_ext3_suffixes;
int num_ignore_tokens = artwork_info->num_ignore_tokens;
- SetupFileHash *setup_file_hash, *valid_file_hash;
+ SetupFileHash *setup_file_hash, *valid_file_hash, *valid_file_hash_tmp;
SetupFileHash *extra_file_hash, *empty_file_hash;
char *known_token_value = KNOWN_TOKEN_VALUE;
char *base_token_value = UNDEFINED_FILENAME;
/* at this point, we do not need the setup file hash anymore -- free it */
freeSetupFileHash(setup_file_hash);
- /* map deprecated to current tokens (using prefix match and replace) */
+ /* prevent changing hash while iterating over it by using a temporary copy */
+ valid_file_hash_tmp = newSetupFileHash();
BEGIN_HASH_ITERATION(valid_file_hash, itr)
+ {
+ setHashEntry(valid_file_hash_tmp,
+ HASH_ITERATION_TOKEN(itr),
+ HASH_ITERATION_VALUE(itr));
+ }
+ END_HASH_ITERATION(valid_file_hash, itr)
+
+ /* (iterate over same temporary hash, as modifications are independent) */
+
+ /* map deprecated to current tokens (using prefix match and replace) */
+ BEGIN_HASH_ITERATION(valid_file_hash_tmp, itr)
{
char *token = HASH_ITERATION_TOKEN(itr);
char *mapped_token = get_mapped_token(token);
free(mapped_token);
}
}
- END_HASH_ITERATION(valid_file_hash, itr)
+ END_HASH_ITERATION(valid_file_hash_tmp, itr)
/* add special base tokens (using prefix match and replace) */
- BEGIN_HASH_ITERATION(valid_file_hash, itr)
+ BEGIN_HASH_ITERATION(valid_file_hash_tmp, itr)
{
char *token = HASH_ITERATION_TOKEN(itr);
char *base_token = get_special_base_token(artwork_info, token);
free(base_token);
}
}
- END_HASH_ITERATION(valid_file_hash, itr)
+ END_HASH_ITERATION(valid_file_hash_tmp, itr)
+
+ /* free temporary hash used for iteration */
+ freeSetupFileHash(valid_file_hash_tmp);
/* read parameters for all known config file tokens */
for (i = 0; i < num_file_list_entries; i++)