[Scummvm-cvs-logs] SF.net SVN: scummvm:[38794] scummvm/trunk/engines/sci

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sun Feb 22 22:38:46 CET 2009


Revision: 38794
          http://scummvm.svn.sourceforge.net/scummvm/?rev=38794&view=rev
Author:   fingolfin
Date:     2009-02-22 21:38:46 +0000 (Sun, 22 Feb 2009)

Log Message:
-----------
SCI: Rewrite the way file handles are managed

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/game.cpp
    scummvm/trunk/engines/sci/engine/kfile.cpp
    scummvm/trunk/engines/sci/engine/savegame.cfsml
    scummvm/trunk/engines/sci/engine/savegame.cpp
    scummvm/trunk/engines/sci/engine/scriptdebug.cpp
    scummvm/trunk/engines/sci/include/engine.h
    scummvm/trunk/engines/sci/include/kernel.h
    scummvm/trunk/engines/sci/sci.cpp

Modified: scummvm/trunk/engines/sci/engine/game.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/game.cpp	2009-02-22 20:48:42 UTC (rev 38793)
+++ scummvm/trunk/engines/sci/engine/game.cpp	2009-02-22 21:38:46 UTC (rev 38794)
@@ -266,8 +266,7 @@
 	s->dyn_views = NULL;
 	s->port = NULL;
 
-	if (s->pics)
-		free(s->pics);
+	free(s->pics);
 	s->pics = NULL;
 }
 
@@ -445,6 +444,164 @@
 	return 0;
 }
 
+EngineState::EngineState() {
+	savegame_version = 0;
+
+	widget_serial_counter = 0;
+
+	resource_dir = 0;
+	work_dir = 0;
+	resmgr = 0;
+
+	game_name = 0;
+	game_version = 0;
+
+	gfx_state = 0;
+	old_screen = 0;
+
+	memset(&sound, 0, sizeof(sound));	// FIXME: Remove this once/if we C++ify sfx_state_t
+	sfx_init_flags = 0;
+	sound_volume = 0;
+	sound_mute = 0;
+
+	restarting_flags = 0;
+	have_mouse_flag = 0;
+
+	pic_not_valid = 0;
+	pic_is_new = 0;
+	onscreen_console = 0;
+	osc_backup = 0;
+
+	pic_priority_table = 0;
+
+	status_bar_text = 0;
+
+	status_bar_foreground = 0;
+	status_bar_background = 0;
+
+	game_time = 0;
+
+	save_dir_copy = NULL_REG;
+	save_dir_edit_offset = 0;
+	save_dir_copy_buf = 0;
+
+	mouse_pointer_view = 0;
+	mouse_pointer_loop = 0;
+	mouse_pointer_cel = 0;
+	save_mouse_pointer_view = 0;
+	save_mouse_pointer_loop = 0;
+	save_mouse_pointer_cel = 0;
+
+	port_serial = 0;
+	port = 0;
+
+	memset(ega_colors, 0, sizeof(ega_colors));
+
+	visual = 0;
+
+	titlebar_port = 0;
+	wm_port = 0;
+	picture_port = 0;
+	iconbar_port = 0;
+
+	memset(&pic_visible_map, 0, sizeof(pic_visible_map));	// FIXME: Remove this once/if we C++ify gfx_map_mask_t
+	pic_animate = 0;
+
+	dyn_views_list_serial = 0;
+	dyn_views = 0;
+
+	drop_views_list_serial = 0;
+	drop_views = 0;
+
+	animation_delay = 0;
+	animation_granularity = 0;
+
+	menubar = 0;
+
+	priority_first = 0;
+	priority_last = 0;
+
+	pics_drawn_nr = 0;
+	pics_nr = 0;
+	pics = 0;
+
+	last_wait_time = 0;
+
+	version_lock_flag = 0;
+	version = 0;
+	max_version = 0;
+	min_version = 0;
+
+	kernel_opt_flags = 0;
+
+	_fileHandles.resize(5);
+
+	dirseeker = 0;
+
+	execution_stack = 0;
+	execution_stack_size = 0;
+	execution_stack_pos = 0;
+	execution_stack_base = 0;
+	execution_stack_pos_changed = 0;
+
+	r_acc = NULL_REG;
+	r_amp_rest = 0;
+	r_prev = NULL_REG;
+
+	stack_segment = 0;
+	stack_base = 0;
+	stack_top = 0;
+
+	parser_segment = 0;
+	parser_base = NULL_REG;
+	parser_event = NULL_REG;
+	script_000_segment = 0;
+	script_000 = 0;
+
+	parser_lastmatch_word = 0;
+	bp_list = 0;
+	have_bp = 0;
+	debug_mode = 0;
+	sys_strings_segment = 0;
+	sys_strings = 0;
+	parser_words = 0;
+	parser_words_nr = 0;
+	parser_suffices = 0;
+	parser_suffices_nr = 0;
+	parser_branches = 0;
+	parser_rules = 0;
+	parser_branches_nr = 0;
+	memset(parser_nodes, 0, sizeof(parser_nodes));
+
+	parser_valid = 0;
+
+	synonyms = 0;
+	synonyms_nr = 0;
+
+	game_obj = NULL_REG;
+
+	classtable_size = 0;
+	classtable = 0;
+
+	seg_manager = 0;
+	gc_countdown = 0;
+
+	selector_names_nr = 0;
+	selector_names = 0;
+	kernel_names_nr = 0;
+	kernel_names = 0;
+
+	kfunct_table = 0;
+	kfunct_nr = 0;
+
+	opcodes = 0;
+
+	memset(&selector_map, 0, sizeof(selector_map));	// FIXME: Remove this once/if we C++ify selector_map_t
+	port_ID = 0;
+
+	successor = 0;
+}
+
 // Architectural stuff: Init/Unintialize engine
 int script_init_engine(EngineState *s, sci_version_t version) {
 	int result;
@@ -514,10 +671,6 @@
 	s->bp_list = NULL; // No breakpoints defined
 	s->have_bp = 0;
 
-	s->file_handles_nr = 5;
-	s->file_handles = (FILE**)sci_calloc(sizeof(FILE *), s->file_handles_nr);
-	// Allocate memory for file handles
-
 	s->dirseeker = 0; // Used by FileIO for FIND_FIRST, FIND_NEXT
 
 	if (s->version >= SCI_VERSION_FTU_LOFS_ABSOLUTE &&
@@ -539,8 +692,6 @@
 }
 
 void script_free_vm_memory(EngineState *s) {
-	int i;
-
 	sciprintf("Freeing VM memory\n");
 	s->save_dir_copy_buf = NULL;
 
@@ -548,15 +699,7 @@
 	s->classtable = NULL;
 
 	// Close all opened file handles
-	for (i = 1; i < s->file_handles_nr; i++)
-		if (s->file_handles[i])
-			fclose(s->file_handles[i]);
-
-	free(s->file_handles);
-	s->file_handles = NULL;
-
-	// FIXME: file handles will NOT be closed under DOS. DJGPP generates an
-	// exception fault whenever you try to close a never-opened file
+	s->_fileHandles.clear();
 }
 
 extern void free_kfunct_tables(EngineState *s);

Modified: scummvm/trunk/engines/sci/engine/kfile.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kfile.cpp	2009-02-22 20:48:42 UTC (rev 38793)
+++ scummvm/trunk/engines/sci/engine/kfile.cpp	2009-02-22 21:38:46 UTC (rev 38794)
@@ -150,7 +150,6 @@
 #define _K_FILE_MODE_CREATE 2
 
 void file_open(EngineState *s, char *filename, int mode) {
-	int retval = 1; // Ignore file_handles[0]
 	FILE *file = NULL;
 
 	SCIkdebug(SCIkFILE, "Opening file %s with mode %d\n", filename, mode);
@@ -177,13 +176,15 @@
 		return;
 	}
 
-	while (s->file_handles[retval] && (retval < s->file_handles_nr))
+	uint retval = 1; // Ignore _fileHandles[0]
+	while ((retval < s->_fileHandles.size()) && s->_fileHandles[retval]._file)
 		retval++;
 
-	if (retval == s->file_handles_nr) // Hit size limit => Allocate more space
-		s->file_handles = (FILE**)sci_realloc(s->file_handles, sizeof(FILE *) * ++(s->file_handles_nr));
+	if (retval == s->_fileHandles.size()) { // Hit size limit => Allocate more space
+		s->_fileHandles.resize(s->_fileHandles.size() + 1);
+	}
 
-	s->file_handles[retval] = file;
+	s->_fileHandles[retval]._file = file;
 
 	s->r_acc = make_reg(0, retval);
 }
@@ -196,18 +197,18 @@
 	return s->r_acc;
 }
 
-static FILE *getFileFromHandle(EngineState *s, int handle) {
+static FILE *getFileFromHandle(EngineState *s, uint handle) {
 	if (handle == 0) {
 		SCIkwarn(SCIkERROR, "Attempt to use file handle 0\n");
 		return 0;
 	}
 
-	if ((handle >= s->file_handles_nr) || (s->file_handles[handle] == NULL)) {
+	if ((handle >= s->_fileHandles.size()) || (s->_fileHandles[handle]._file == NULL)) {
 		SCIkwarn(SCIkERROR, "Attempt to use invalid/unused file handle %d\n", handle);
 		return 0;
 	}
 
-	return s->file_handles[handle];
+	return s->_fileHandles[handle]._file;
 }
 
 void file_close(EngineState *s, int handle) {
@@ -219,7 +220,7 @@
 
 	fclose(f);
 
-	s->file_handles[handle] = NULL;
+	s->_fileHandles[handle]._file = NULL;
 }
 
 reg_t kFClose(EngineState *s, int funct_nr, int argc, reg_t *argv) {

Modified: scummvm/trunk/engines/sci/engine/savegame.cfsml
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cfsml	2009-02-22 20:48:42 UTC (rev 38793)
+++ scummvm/trunk/engines/sci/engine/savegame.cfsml	2009-02-22 21:38:46 UTC (rev 38794)
@@ -1023,10 +1023,8 @@
 	}
 */
 
-	retval = (EngineState *) sci_malloc(sizeof(EngineState));
+	retval = new EngineState();
 
-	memset(retval, 0, sizeof(EngineState));
-
 	retval->savegame_version = -1;
 	_global_save_state = retval;
 	retval->gfx_state = s->gfx_state;
@@ -1096,10 +1094,6 @@
 	// Time state:
 	retval->last_wait_time = g_system->getMillis();
 
-	// File IO state:
-	retval->file_handles_nr = 2;
-	retval->file_handles = (FILE **)sci_calloc(2, sizeof(FILE *));
-
 	// static parser information:
 	retval->parser_rules = s->parser_rules;
 	retval->parser_words_nr = s->parser_words_nr;

Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp	2009-02-22 20:48:42 UTC (rev 38793)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp	2009-02-22 21:38:46 UTC (rev 38794)
@@ -326,7 +326,7 @@
 
 	while ((source != end) && (c = *source++) && (c > 31)) {
 		if (c == '\\') { // Escaped character?
-			c = *source++;
+    			c = *source++;
 			if ((c != '\\') && (c != '"')) // Un-escape 0-31 only
 				c -= ('a' - 1);
 		}
@@ -606,7 +606,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -674,7 +674,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -771,7 +771,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -860,10 +860,10 @@
 					_cfsml_error("Token expected by read_reg_t() for variables[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->variables_nr = max ; // Set array size accordingly
+		 	save_struc->variables_nr = max ; // Set array size accordingly
 			} else
 #line 699 "engines/sci/engine/savegame.cfsml"
 			{
@@ -962,7 +962,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -1016,10 +1016,10 @@
 					_cfsml_error("Token expected by _cfsml_read_menu_t() for menus[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->menus_nr = max ; // Set array size accordingly
+		 	save_struc->menus_nr = max ; // Set array size accordingly
 			} else
 #line 699 "engines/sci/engine/savegame.cfsml"
 			{
@@ -1094,7 +1094,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -1177,7 +1177,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -1224,7 +1224,7 @@
 					_cfsml_error("Token expected by read_int_hash_map_node_tp() for nodes[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
 			} else
@@ -1312,7 +1312,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -1373,10 +1373,10 @@
 					_cfsml_error("Token expected by read_mem_obj_tp() for heap[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->heap_size = max ; // Set array size accordingly
+		 	save_struc->heap_size = max ; // Set array size accordingly
 			} else
 				if (!strcmp(token, "heap_size")) {
 #line 690 "engines/sci/engine/savegame.cfsml"
@@ -1506,7 +1506,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -1661,7 +1661,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -1729,7 +1729,7 @@
 					_cfsml_error("Token expected by _cfsml_read_byte() for said[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
 			} else
@@ -1829,7 +1829,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -1943,7 +1943,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -2011,10 +2011,10 @@
 					_cfsml_error("Token expected by _cfsml_read_byte() for buf[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->size = max ; // Set array size accordingly
+		 	save_struc->size = max ; // Set array size accordingly
 			} else
 #line 699 "engines/sci/engine/savegame.cfsml"
 			{
@@ -2076,7 +2076,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -2144,10 +2144,10 @@
 					_cfsml_error("Token expected by read_reg_t() for locals[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->nr = max ; // Set array size accordingly
+		 	save_struc->nr = max ; // Set array size accordingly
 			} else
 #line 699 "engines/sci/engine/savegame.cfsml"
 			{
@@ -2215,7 +2215,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -2297,10 +2297,10 @@
 					_cfsml_error("Token expected by _cfsml_read_node_entry_t() for table[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->entries_nr = max ; // Set array size accordingly
+		 	save_struc->entries_nr = max ; // Set array size accordingly
 			} else
 #line 699 "engines/sci/engine/savegame.cfsml"
 			{
@@ -2354,7 +2354,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -2394,7 +2394,7 @@
 					_cfsml_error("Token expected by _cfsml_read_sys_string_t() for strings[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
 			} else
@@ -2477,7 +2477,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -2585,7 +2585,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -2667,10 +2667,10 @@
 					_cfsml_error("Token expected by _cfsml_read_list_entry_t() for table[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->entries_nr = max ; // Set array size accordingly
+		 	save_struc->entries_nr = max ; // Set array size accordingly
 			} else
 #line 699 "engines/sci/engine/savegame.cfsml"
 			{
@@ -2719,7 +2719,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -2880,7 +2880,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -2990,10 +2990,10 @@
 					_cfsml_error("Token expected by _cfsml_read_class_t() for classtable[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->classtable_size = max ; // Set array size accordingly
+		 	save_struc->classtable_size = max ; // Set array size accordingly
 			} else
 				if (!strcmp(token, "sound")) {
 #line 690 "engines/sci/engine/savegame.cfsml"
@@ -3061,7 +3061,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -3180,7 +3180,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -3255,10 +3255,10 @@
 					_cfsml_error("Token expected by _cfsml_read_menu_item_t() for items[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->items_nr = max ; // Set array size accordingly
+		 	save_struc->items_nr = max ; // Set array size accordingly
 			} else
 #line 699 "engines/sci/engine/savegame.cfsml"
 			{
@@ -3326,7 +3326,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -3408,10 +3408,10 @@
 					_cfsml_error("Token expected by _cfsml_read_clone_entry_t() for table[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->entries_nr = max ; // Set array size accordingly
+		 	save_struc->entries_nr = max ; // Set array size accordingly
 			} else
 #line 699 "engines/sci/engine/savegame.cfsml"
 			{
@@ -3482,7 +3482,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -3571,10 +3571,10 @@
 					_cfsml_error("Token expected by read_reg_t() for variables[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->variables_nr = max ; // Set array size accordingly
+		 	save_struc->variables_nr = max ; // Set array size accordingly
 			} else
 #line 699 "engines/sci/engine/savegame.cfsml"
 			{
@@ -3623,7 +3623,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -3701,7 +3701,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -3829,7 +3829,7 @@
 			return CFSML_FAILURE;
 		}
 		if (!assignment) {
-			if (!strcmp(token, "}"))
+			if (!strcmp(token, "}")) 
 				closed = 1;
 			else {
 				_cfsml_error("Expected assignment or closing braces in line %d\n", *line);
@@ -3953,10 +3953,10 @@
 					_cfsml_error("Token expected by _cfsml_read_object_t() for objects[i++] at line %d\n", *line);
 					return CFSML_FAILURE;
 				}
-			} else
+			} else 
 				done = 1;
 			} while (!done);
-			save_struc->objects_allocated = max ; // Set array size accordingly
+		 	save_struc->objects_allocated = max ; // Set array size accordingly
 			} else
 				if (!strcmp(token, "locals_offset")) {
 #line 690 "engines/sci/engine/savegame.cfsml"
@@ -3991,7 +3991,7 @@
 
 
 // Auto-generated CFSML declaration and function block ends here
-// Auto-generation performed by cfsml.pl 0.8.2
+// Auto-generation performed by cfsml.pl 0.8.2 
 #line 447 "engines/sci/engine/savegame.cfsml"
 
 void write_songlib_t(Common::WriteStream *fh, songlib_t *songlib) {
@@ -4974,10 +4974,8 @@
 	}
 */
 
-	retval = (EngineState *) sci_malloc(sizeof(EngineState));
+	retval = new EngineState();
 
-	memset(retval, 0, sizeof(EngineState));
-
 	retval->savegame_version = -1;
 	_global_save_state = retval;
 	retval->gfx_state = s->gfx_state;
@@ -5014,7 +5012,7 @@
 		}
 	}
 // End of auto-generated CFSML data reader code
-#line 1038 "engines/sci/engine/savegame.cfsml"
+#line 1036 "engines/sci/engine/savegame.cfsml"
 	if ((meta->savegame_version < FREESCI_MINIMUM_SAVEGAME_VERSION) ||
 	    (meta->savegame_version > FREESCI_CURRENT_SAVEGAME_VERSION)) {
 		if (meta->savegame_version < FREESCI_MINIMUM_SAVEGAME_VERSION)
@@ -5066,7 +5064,7 @@
 		}
 	}
 // End of auto-generated CFSML data reader code
-#line 1061 "engines/sci/engine/savegame.cfsml"
+#line 1059 "engines/sci/engine/savegame.cfsml"
 
 	sfx_exit(&s->sound);
 	_gamestate_unfrob(retval);
@@ -5105,10 +5103,6 @@
 	// Time state:
 	retval->last_wait_time = g_system->getMillis();
 
-	// File IO state:
-	retval->file_handles_nr = 2;
-	retval->file_handles = (FILE **)sci_calloc(2, sizeof(FILE *));
-
 	// static parser information:
 	retval->parser_rules = s->parser_rules;
 	retval->parser_words_nr = s->parser_words_nr;
@@ -5190,7 +5184,7 @@
 		}
 	}
 // End of auto-generated CFSML data reader code
-#line 1156 "engines/sci/engine/savegame.cfsml"
+#line 1150 "engines/sci/engine/savegame.cfsml"
 
 	if (read_eof)
 		return false;

Modified: scummvm/trunk/engines/sci/engine/scriptdebug.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2009-02-22 20:48:42 UTC (rev 38793)
+++ scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2009-02-22 21:38:46 UTC (rev 38794)
@@ -1049,7 +1049,6 @@
 
 int c_save_game(EngineState *s) {
 	int omit_check = cmd_params[0].str[0] == '_';
-	int i;
 
 	if (!s) {
 		sciprintf("Not in debug state\n");
@@ -1058,8 +1057,8 @@
 
 	if (!omit_check) {
 		int result = 0;
-		for (i = 0; i < s->file_handles_nr; i++)
-			if (s->file_handles[i])
+		for (uint i = 0; i < s->_fileHandles.size(); i++)
+			if (s->_fileHandles[i]._file)
 				result++;
 
 		if (result) {

Modified: scummvm/trunk/engines/sci/include/engine.h
===================================================================
--- scummvm/trunk/engines/sci/include/engine.h	2009-02-22 20:48:42 UTC (rev 38793)
+++ scummvm/trunk/engines/sci/include/engine.h	2009-02-22 21:38:46 UTC (rev 38794)
@@ -27,6 +27,7 @@
 #define _SCI_ENGINE_H
 
 #include "common/scummsys.h"
+#include "common/array.h"
 
 namespace Common {
 	class SeekableReadStream;
@@ -79,7 +80,22 @@
 	int savegame_time;
 };
 
+class FileHandle {
+public:
+	FILE *_file;
+	
+	FileHandle() : _file(0) {
+	}
+	
+	~FileHandle() {
+		if (_file)
+			fclose(_file);
+	}
+};
+
 struct EngineState {
+	EngineState();
+
 	int savegame_version;
 
 	int widget_serial_counter; /* Used for savegames */
@@ -171,8 +187,7 @@
 
 	/* Kernel File IO stuff */
 
-	int file_handles_nr; /* maximum numer of allowed file handles */
-	FILE **file_handles; /* Array of file handles. Dynamically increased if required. */
+	Common::Array<FileHandle> _fileHandles; /* Array of file handles. Dynamically increased if required. */
 
 	DirSeeker *dirseeker;
 

Modified: scummvm/trunk/engines/sci/include/kernel.h
===================================================================
--- scummvm/trunk/engines/sci/include/kernel.h	2009-02-22 20:48:42 UTC (rev 38793)
+++ scummvm/trunk/engines/sci/include/kernel.h	2009-02-22 21:38:46 UTC (rev 38794)
@@ -172,7 +172,7 @@
 
 int kernel_oops(EngineState *s, const char *file, int line, const char *reason);
 /* Halts script execution and informs the user about an internal kernel error or failed assertion
-** Paramters: (EngineState *) s: The state to use
+** Parameters: (EngineState *) s: The state to use
 **            (const char *) file: The file the oops occured in
 **            (int) line: The line the oops occured in
 **            (const char *) reason: Reason for the kernel oops

Modified: scummvm/trunk/engines/sci/sci.cpp
===================================================================
--- scummvm/trunk/engines/sci/sci.cpp	2009-02-22 20:48:42 UTC (rev 38793)
+++ scummvm/trunk/engines/sci/sci.cpp	2009-02-22 21:38:46 UTC (rev 38794)
@@ -232,8 +232,7 @@
 	map_MIDI_instruments(_resmgr);
 #endif
 
-	EngineState* gamestate = (EngineState *) sci_malloc(sizeof(EngineState));
-	memset(gamestate, 0, sizeof(EngineState));
+	EngineState* gamestate = new EngineState();
 	gamestate->resmgr = _resmgr;
 	gamestate->gfx_state = NULL;
 
@@ -313,8 +312,9 @@
 	script_free_engine(gamestate); // Uninitialize game state
 	script_free_breakpoints(gamestate);
 	free(gamestate->work_dir);
-	free(gamestate);
 
+	delete gamestate;
+
 	delete _resmgr;
 
 	close_console_file();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list