From 13935d0970613ba028f161be514d2cb9bac565a7 Mon Sep 17 00:00:00 2001 From: Martin Schaffner Date: Thu, 2 Dec 2004 16:50:20 +0000 Subject: [PATCH] remove mission list from global memory --- ChangeLog | 4 +++- main/mission.c | 49 +++++++++++++++++++++++++++++-------------------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3ea038d2..9bef7c53 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -2004-12-01 Chris Taylor +2004-12-02 Chris Taylor * main/bm.c, main/piggy.c: fix cfile bugs from recent changes @@ -8,6 +8,8 @@ * main/mission.c: pass individual mission around instead of whole list + * main/mission.c: remove mission list from global memory + 2004-12-02 Bradley Bell * include/cfile.h, include/physfsx.h: fix RELEASE build, make sure diff --git a/main/mission.c b/main/mission.c index 8835eb2a..0de21024 100644 --- a/main/mission.c +++ b/main/mission.c @@ -1,4 +1,4 @@ -/* $Id: mission.c,v 1.34 2004-12-02 16:46:33 schaffner Exp $ */ +/* $Id: mission.c,v 1.35 2004-12-02 16:50:20 schaffner Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -66,8 +66,6 @@ typedef struct mle { #define ML_MISSIONDIR 1 #define ML_CDROM 2 -mle mission_list[MAX_MISSIONS]; - int num_missions = -1; Mission *Current_mission = NULL; // currently loaded mission @@ -513,6 +511,7 @@ extern char AltHogdir_initialized; mle *build_mission_list(int anarchy_mode) { + mle *mission_list; int top_place; char builtin_mission_filename[FILENAME_LEN]; @@ -530,6 +529,7 @@ mle *build_mission_list(int anarchy_mode) //@@ return num_missions; //@@ } + MALLOC(mission_list, mle, MAX_MISSIONS); num_missions = 0; add_builtin_mission_to_list(mission_list + num_missions, builtin_mission_filename); //read built-in first @@ -563,6 +563,12 @@ mle *build_mission_list(int anarchy_mode) return mission_list; } +void free_mission_list(mle *mission_list) +{ + d_free(mission_list); + num_missions = 0; +} + void init_extra_robot_movie(char *filename); //values for built-in mission @@ -784,24 +790,26 @@ int load_mission(mle *mission) int load_mission_by_name(char *mission_name) { int i; - - build_mission_list(1); + mle *mission_list = build_mission_list(1); + bool found = 0; for (i = 0; i < num_missions; i++) if (!stricmp(mission_name, mission_list[i].filename)) - return load_mission(mission_list + i); + found = load_mission(mission_list + i); - return 0; //couldn't find mission + free_mission_list(mission_list); + return found; } int select_mission(int anarchy_mode, char *message) { - build_mission_list(anarchy_mode); + mle *mission_list = build_mission_list(anarchy_mode); + int new_mission_num; if (num_missions <= 1) { - load_mission(mission_list); + new_mission_num = load_mission(mission_list) ? 0 : -1; } else { - int new_mission_num,i, default_mission; + int i, default_mission; char * m[MAX_MISSIONS]; default_mission = 0; @@ -813,16 +821,17 @@ int select_mission(int anarchy_mode, char *message) new_mission_num = newmenu_listbox1( message, num_missions, m, 1, default_mission, NULL ); - if (new_mission_num == -1) - return 0; //abort! - - strcpy(config_last_mission, m[new_mission_num] ); - - if (!load_mission(mission_list + new_mission_num)) { - nm_messagebox( NULL, 1, TXT_OK, TXT_MISSION_ERROR); - return 0; - } + if (new_mission_num >= 0) { + // Chose a mission + strcpy(config_last_mission, m[new_mission_num] ); + + if (!load_mission(mission_list + new_mission_num)) { + nm_messagebox( NULL, 1, TXT_OK, TXT_MISSION_ERROR); + new_mission_num = -1; + } + } } - return 1; + free_mission_list(mission_list); + return (new_mission_num >= 0); } -- 2.39.2