[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