static void uninit_tile_sprites (void) { while (tile_set_size--) XFREE0 (tile_transp[tile_set_size]); XFREE0 (tile_transp); }
void free_preferences (void) { dmsg (D_MISC, "free preferences"); XFREE0 (name); XFREE0 (ignored_lines); }
void release_explosions (void) { free_htimer (explo_timer); XFREE0 (square_explo_state); XFREE0 (square_explo_type); XFREE0 (explo_list); }
void uninit_render_data (void) { dmsg (D_SECTION, "Uninitialize rendering data"); uninit_tile_sprites (); XFREE0 (bg_data); XFREE0 (fg_data); }
bool load_preferences (void) { FILE* fs; int endline = 0; char* buf = 0; size_t bufsize = 0; firstline = 0; reinit_preferences (); dmsg (D_FILE, "reading option from %s", preferences_file ()); fs = fopen (preferences_file (), "rb"); if (fs == NULL) { /* Don't warn, the file doesn't exists the first time. */ dmsg (D_FILE, "cannot open preferences file %s", preferences_file ()); dperror ("fopen"); return true; } XFREE0 (ignored_lines); while (getshline_numbered (&firstline, &endline, &buf, &bufsize, fs) != -1) { char* token; char* line = xstrdup (buf); token = strtok (buf, " \t.:"); if (!strcasecmp ("heroes", token)) { token = strtok (0, " \t.:"); if (!strcasecmp ("screen", token)) { token = strtok (0, " \t.:"); if (!strcasecmp ("display_radar", token)) { token = strtok (0, "\n"); opt.radar_map = parse_bool (token, false, true); } else if (!strcasecmp ("display_infos", token)) { token = strtok (0, "\n"); opt.display_infos = parse_bool (token, false, true); } else if (!strcasecmp ("gamma", token)) { token = strtok (0, "\n"); opt.luminance = parse_unsigned (token, 0, 12); } else if (!strcasecmp ("inertia", token)) { token = strtok (0, "\n"); opt.inertia = parse_bool (token, false, true); } else { append_ignored (line); } } else if (!strcasecmp ("sound", token)) { token = strtok (0, " \t.:"); if (!strcasecmp ("music_enable", token)) { token = strtok (0, "\n"); opt.music = parse_bool (token, false, true); } else if (!strcasecmp ("music_volume", token)) { token = strtok (0, "\n"); opt.music_volume = parse_unsigned (token, 0, 12); } else if (!strcasecmp ("sfx_enable", token)) { token = strtok (0, "\n"); opt.sfx = parse_bool (token, false, true); } else if (!strcasecmp ("sfx_volume", token)) { token = strtok (0, "\n"); opt.sfx_volume = parse_unsigned (token, 0, 12); } else { append_ignored (line); } } else if (!strcasecmp ("control", token)) { token = strtok (0, " \t.:"); if (!strcasecmp ("player1", token)) { token = strtok (0, "\n"); opt.ctrl_one = parse_unsigned (token, 0, 1); } else if (!strcasecmp ("autopilot1", token)) { token = strtok (0, "\n"); opt.autopilot_one = parse_bool (token, false, true); } else if (!strcasecmp ("player2", token)) { token = strtok (0, "\n"); opt.ctrl_two = parse_unsigned (token, 0, 1); } else if (!strcasecmp ("autopilot2", token)) { token = strtok (0, "\n"); opt.autopilot_two = parse_bool (token, false, true); } else { append_ignored (line); } } else if (!strcasecmp ("game", token)) { token = strtok (0, " \t.:"); if (!strcasecmp ("speed", token)) { token = strtok (0, "\n"); opt.speed = parse_unsigned (token, 0, 2); } else if (!strcasecmp ("gamerounds", token)) { token = strtok (0, "\n"); opt.gamerounds = parse_unsigned (token, 0, 15); } else if (!strcasecmp ("player_colors", token)) { token = strtok (0, " \t"); opt.player_color[0] = parse_unsigned (token, 0, 4); token = strtok (0, " \t"); opt.player_color[1] = parse_unsigned (token, 0, 4); token = strtok (0, " \t"); opt.player_color[2] = parse_unsigned (token, 0, 4); token = strtok (0, " \t"); opt.player_color[3] = parse_unsigned (token, 0, 4); } else { append_ignored (line); } } else if (!strcasecmp ("extras", token)) { token = strtok (0, " \t.:"); if (!strcasecmp ("mode", token)) { token = strtok (0, "\n"); opt.extras = parse_unsigned (token, 0, 2); } else { append_ignored (line); } } else if (!strcasecmp (keys_pref_group (), token)) { token = strtok (0, " \t.:"); if (!strcasecmp ("player1_keys", token)) { token = strtok (0, " \t"); opt.player_keys[0][0] = parse_unsigned (token, 0, HKEYCODE_MAX); token = strtok (0, " \t"); opt.player_keys[0][1] = parse_unsigned (token, 0, HKEYCODE_MAX); token = strtok (0, " \t"); opt.player_keys[0][2] = parse_unsigned (token, 0, HKEYCODE_MAX); token = strtok (0, " \t"); opt.player_keys[0][3] = parse_unsigned (token, 0, HKEYCODE_MAX); token = strtok (0, " \t"); opt.player_keys[0][4] = parse_unsigned (token, 0, HKEYCODE_MAX); token = strtok (0, " \t"); opt.player_keys[0][5] = parse_unsigned (token, 0, HKEYCODE_MAX); } else if (!strcasecmp ("player2_keys", token)) { token = strtok (0, " \t"); opt.player_keys[1][0] = parse_unsigned (token, 0, HKEYCODE_MAX); token = strtok (0, " \t"); opt.player_keys[1][1] = parse_unsigned (token, 0, HKEYCODE_MAX); token = strtok (0, " \t"); opt.player_keys[1][2] = parse_unsigned (token, 0, HKEYCODE_MAX); token = strtok (0, " \t"); opt.player_keys[1][3] = parse_unsigned (token, 0, HKEYCODE_MAX); token = strtok (0, " \t"); opt.player_keys[1][4] = parse_unsigned (token, 0, HKEYCODE_MAX); token = strtok (0, " \t"); opt.player_keys[1][5] = parse_unsigned (token, 0, HKEYCODE_MAX); } else { append_ignored (line); } } else { append_ignored (line); } } else { append_ignored (line); } free (line); } free (buf); fclose (fs); return false; }