diff options
author | Filippos Karapetis | 2009-02-26 23:03:35 +0000 |
---|---|---|
committer | Filippos Karapetis | 2009-02-26 23:03:35 +0000 |
commit | 6c879e96d122aa4746276d94a46d339595c9f0d4 (patch) | |
tree | 48dcfcdb1f094e9f4abe54eae86d6c410b3b7dbd /engines | |
parent | 2d1fd81f90ca0583d1e28b57926079cec3d6c48c (diff) | |
download | scummvm-rg350-6c879e96d122aa4746276d94a46d339595c9f0d4.tar.gz scummvm-rg350-6c879e96d122aa4746276d94a46d339595c9f0d4.tar.bz2 scummvm-rg350-6c879e96d122aa4746276d94a46d339595c9f0d4.zip |
- Removed engine/sys_strings.*
- Renamed sys_string_t -> SystemString, sys_strings_t -> SystemStrings
svn-id: r38916
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/engine/game.cpp | 17 | ||||
-rw-r--r-- | engines/sci/engine/savegame.cfsml | 29 | ||||
-rw-r--r-- | engines/sci/engine/savegame.cpp | 283 | ||||
-rw-r--r-- | engines/sci/engine/scriptdebug.cpp | 2 | ||||
-rw-r--r-- | engines/sci/engine/seg_manager.cpp | 22 | ||||
-rw-r--r-- | engines/sci/engine/seg_manager.h | 3 | ||||
-rw-r--r-- | engines/sci/engine/sys_strings.cpp | 111 | ||||
-rw-r--r-- | engines/sci/engine/sys_strings.h | 80 | ||||
-rw-r--r-- | engines/sci/engine/vm.h | 23 | ||||
-rw-r--r-- | engines/sci/include/engine.h | 2 | ||||
-rw-r--r-- | engines/sci/module.mk | 1 |
11 files changed, 227 insertions, 346 deletions
diff --git a/engines/sci/engine/game.cpp b/engines/sci/engine/game.cpp index 03fbb74266..337f20f09f 100644 --- a/engines/sci/engine/game.cpp +++ b/engines/sci/engine/game.cpp @@ -633,7 +633,11 @@ int script_init_engine(EngineState *s, sci_version_t version) { s->sys_strings = s->seg_manager->allocateSysStrings(&s->sys_strings_segment); // Allocate static buffer for savegame and CWD directories - sys_string_acquire(s->sys_strings, SYS_STRING_SAVEDIR, "savedir", MAX_SAVE_DIR_SIZE); + SystemString *str = &s->sys_strings->strings[SYS_STRING_SAVEDIR]; + str->name = strdup("savedir"); + str->max_size = MAX_SAVE_DIR_SIZE; + str->value = (char*)sci_malloc(MAX_SAVE_DIR_SIZE + 1); + str->value[0] = 0; // Set to empty string s->save_dir_copy = make_reg(s->sys_strings_segment, SYS_STRING_SAVEDIR); s->save_dir_edit_offset = 0; @@ -677,7 +681,9 @@ int script_init_engine(EngineState *s, sci_version_t version) { } void script_set_gamestate_save_dir(EngineState *s, const char *path) { - sys_string_set(s->sys_strings, SYS_STRING_SAVEDIR, path); + SystemString *str = &s->sys_strings->strings[SYS_STRING_SAVEDIR]; + strncpy(str->value, path, str->max_size); + str->value[str->max_size] = 0; // Make sure to terminate } void script_free_vm_memory(EngineState *s) { @@ -759,7 +765,12 @@ int game_init(EngineState *s) { s->status_bar_foreground = 0; s->status_bar_background = s->resmgr->sci_version >= SCI_VERSION_01_VGA ? 255 : 15; - sys_string_acquire(s->sys_strings, SYS_STRING_PARSER_BASE, "parser-base", MAX_PARSER_BASE); + SystemString *str = &s->sys_strings->strings[SYS_STRING_PARSER_BASE]; + str->name = strdup("parser-base"); + str->max_size = MAX_PARSER_BASE; + str->value = (char*)sci_malloc(MAX_PARSER_BASE + 1); + str->value[0] = 0; // Set to empty string + s->parser_base = make_reg(s->sys_strings_segment, SYS_STRING_PARSER_BASE); s->game_start_time = g_system->getMillis(); diff --git a/engines/sci/engine/savegame.cfsml b/engines/sci/engine/savegame.cfsml index b146599e71..b0cf1d0f61 100644 --- a/engines/sci/engine/savegame.cfsml +++ b/engines/sci/engine/savegame.cfsml @@ -428,14 +428,14 @@ RECORD script_t "script_t" { int marked_as_deleted; } -RECORD sys_string_t "sys_string_t" { +RECORD SystemString "SystemString" { string name; int max_size; string value; } -RECORD sys_strings_t "sys_strings_t" { - sys_string_t strings[STATIC SYS_STRINGS_MAX]; +RECORD SystemStrings "SystemStrings" { + SystemString strings[STATIC SYS_STRINGS_MAX]; } RECORD dynmem_t "dynmem_t" { @@ -624,7 +624,7 @@ void write_mem_obj_t(Common::WriteStream *fh, mem_obj_t *foo) { %CFSMLWRITE local_variables_t &foo->data.locals INTO fh; break; case MEM_OBJ_SYS_STRINGS: - %CFSMLWRITE sys_strings_t &foo->data.sys_strings INTO fh; + %CFSMLWRITE SystemStrings &foo->data.sys_strings INTO fh; break; case MEM_OBJ_STACK: %CFSMLWRITE int &foo->data.stack.nr INTO fh; @@ -664,7 +664,7 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l %CFSMLREAD local_variables_t &foo->data.locals FROM fh ERRVAR *hiteof LINECOUNTER *line; break; case MEM_OBJ_SYS_STRINGS: - %CFSMLREAD sys_strings_t &foo->data.sys_strings FROM fh ERRVAR *hiteof LINECOUNTER *line; + %CFSMLREAD SystemStrings &foo->data.sys_strings FROM fh ERRVAR *hiteof LINECOUNTER *line; break; case MEM_OBJ_LISTS: %CFSMLREAD list_table_t &foo->data.lists FROM fh ERRVAR *hiteof LINECOUNTER *line; @@ -1104,8 +1104,25 @@ EngineState *gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) { retval->save_dir_edit_offset = 0; retval->sys_strings_segment = find_unique_seg_by_type(retval->seg_manager, MEM_OBJ_SYS_STRINGS); retval->sys_strings = &(((mem_obj_t *)(GET_SEGMENT(*retval->seg_manager, retval->sys_strings_segment, MEM_OBJ_SYS_STRINGS)))->data.sys_strings); - sys_strings_restore(retval->sys_strings, s->sys_strings); + // Restore system strings + SystemString *str; + + // First, pad memory + for (int i = 0; i < SYS_STRINGS_MAX; i++) { + str = &retval->sys_strings->strings[i]; + char *data = str->value; + if (data) { + str->value = (char *)sci_malloc(str->max_size + 1); + strcpy(str->value, data); + free(data); + } + } + + str = &retval->sys_strings->strings[SYS_STRING_SAVEDIR]; + strncpy(str->value, s->sys_strings->strings[SYS_STRING_SAVEDIR].value, str->max_size); + str->value[str->max_size] = 0; // Make sure to terminate + // Time state: retval->last_wait_time = g_system->getMillis(); retval->game_start_time = g_system->getMillis() - retval->game_time * 1000; diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 593476fe06..5d80fca594 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -512,8 +512,8 @@ static void _cfsml_write_node_table_t(Common::WriteStream *fh, node_table_t* sav static int _cfsml_read_node_table_t(Common::SeekableReadStream *fh, node_table_t* save_struc, const char *lastval, int *line, int *hiteof); #line 382 "engines/sci/engine/savegame.cfsml" -static void _cfsml_write_sys_strings_t(Common::WriteStream *fh, sys_strings_t* save_struc); -static int _cfsml_read_sys_strings_t(Common::SeekableReadStream *fh, sys_strings_t* save_struc, const char *lastval, int *line, int *hiteof); +static void _cfsml_write_SystemString(Common::WriteStream *fh, SystemString* save_struc); +static int _cfsml_read_SystemString(Common::SeekableReadStream *fh, SystemString* save_struc, const char *lastval, int *line, int *hiteof); #line 382 "engines/sci/engine/savegame.cfsml" static void _cfsml_write_byte(Common::WriteStream *fh, byte* save_struc); @@ -524,6 +524,10 @@ static void _cfsml_write_node_t(Common::WriteStream *fh, node_t* save_struc); static int _cfsml_read_node_t(Common::SeekableReadStream *fh, node_t* save_struc, const char *lastval, int *line, int *hiteof); #line 382 "engines/sci/engine/savegame.cfsml" +static void _cfsml_write_SystemStrings(Common::WriteStream *fh, SystemStrings* save_struc); +static int _cfsml_read_SystemStrings(Common::SeekableReadStream *fh, SystemStrings* save_struc, const char *lastval, int *line, int *hiteof); + +#line 382 "engines/sci/engine/savegame.cfsml" static void _cfsml_write_list_table_t(Common::WriteStream *fh, list_table_t* save_struc); static int _cfsml_read_list_table_t(Common::SeekableReadStream *fh, list_table_t* save_struc, const char *lastval, int *line, int *hiteof); @@ -568,10 +572,6 @@ static void _cfsml_write_list_t(Common::WriteStream *fh, list_t* save_struc); static int _cfsml_read_list_t(Common::SeekableReadStream *fh, list_t* save_struc, const char *lastval, int *line, int *hiteof); #line 382 "engines/sci/engine/savegame.cfsml" -static void _cfsml_write_sys_string_t(Common::WriteStream *fh, sys_string_t* save_struc); -static int _cfsml_read_sys_string_t(Common::SeekableReadStream *fh, sys_string_t* save_struc, const char *lastval, int *line, int *hiteof); - -#line 382 "engines/sci/engine/savegame.cfsml" static void _cfsml_write_script_t(Common::WriteStream *fh, script_t* save_struc); static int _cfsml_read_script_t(Common::SeekableReadStream *fh, script_t* save_struc, const char *lastval, int *line, int *hiteof); @@ -2227,34 +2227,32 @@ _cfsml_read_node_table_t(Common::SeekableReadStream *fh, node_table_t* save_stru #line 394 "engines/sci/engine/savegame.cfsml" static void -_cfsml_write_sys_strings_t(Common::WriteStream *fh, sys_strings_t* save_struc) +_cfsml_write_SystemString(Common::WriteStream *fh, SystemString* save_struc) { #line 411 "engines/sci/engine/savegame.cfsml" WSprintf(fh, "{\n"); - WSprintf(fh, "strings = "); - int min, max; - min = max = SYS_STRINGS_MAX; -#line 438 "engines/sci/engine/savegame.cfsml" - WSprintf(fh, "[%d][\n", max); - for (int i = 0; i < min; i++) { - _cfsml_write_sys_string_t(fh, &(save_struc->strings[i])); - WSprintf(fh, "\n"); - } - WSprintf(fh, "]"); + WSprintf(fh, "name = "); + _cfsml_write_string(fh, (char **) &(save_struc->name)); + WSprintf(fh, "\n"); + WSprintf(fh, "max_size = "); + _cfsml_write_int(fh, (int*) &(save_struc->max_size)); + WSprintf(fh, "\n"); + WSprintf(fh, "value = "); + _cfsml_write_string(fh, (char **) &(save_struc->value)); WSprintf(fh, "\n"); WSprintf(fh, "}"); } #line 485 "engines/sci/engine/savegame.cfsml" static int -_cfsml_read_sys_strings_t(Common::SeekableReadStream *fh, sys_strings_t* save_struc, const char *lastval, int *line, int *hiteof) +_cfsml_read_SystemString(Common::SeekableReadStream *fh, SystemString* save_struc, const char *lastval, int *line, int *hiteof) { #line 540 "engines/sci/engine/savegame.cfsml" char *token; int assignment, closed; if (strcmp(lastval, "{")) { - _cfsml_error("Reading record sys_strings_t; expected opening braces in line %d, got \"%s\"\n", *line, lastval); + _cfsml_error("Reading record SystemString; expected opening braces in line %d, got \"%s\"\n", *line, lastval); return CFSML_FAILURE; }; closed = 0; @@ -2281,39 +2279,30 @@ _cfsml_read_sys_strings_t(Common::SeekableReadStream *fh, sys_strings_t* save_st _cfsml_error("Expected token at line %d\n", *line); return CFSML_FAILURE; } - if (!strcmp(token, "strings")) { -#line 603 "engines/sci/engine/savegame.cfsml" - if ((value[0] != '[') || (value[strlen(value) - 1] != '[')) { - _cfsml_error("Opening brackets expected at line %d\n", *line); - return CFSML_FAILURE; - } - int max,done,i; - // Prepare to restore static array - max = SYS_STRINGS_MAX; -#line 638 "engines/sci/engine/savegame.cfsml" - done = i = 0; - do { - if (!(value = _cfsml_get_identifier(fh, line, hiteof, NULL))) { -#line 646 "engines/sci/engine/savegame.cfsml" - _cfsml_error("Token expected at line %d\n", *line); - return 1; - } - if (strcmp(value, "]")) { - if (i == max) { - _cfsml_error("More elements than space available (%d) in '%s' at line %d\n", max, token, *line); + if (!strcmp(token, "name")) { +#line 689 "engines/sci/engine/savegame.cfsml" + if (_cfsml_read_string(fh, (char **) &(save_struc->name), value, line, hiteof)) { + _cfsml_error("Token expected by _cfsml_read_string() for name at line %d\n", *line); return CFSML_FAILURE; } - if (_cfsml_read_sys_string_t(fh, &(save_struc->strings[i++]), value, line, hiteof)) { - _cfsml_error("Token expected by _cfsml_read_sys_string_t() for strings[i++] at line %d\n", *line); + } else + if (!strcmp(token, "max_size")) { +#line 689 "engines/sci/engine/savegame.cfsml" + if (_cfsml_read_int(fh, (int*) &(save_struc->max_size), value, line, hiteof)) { + _cfsml_error("Token expected by _cfsml_read_int() for max_size at line %d\n", *line); return CFSML_FAILURE; } } else - done = 1; - } while (!done); + if (!strcmp(token, "value")) { +#line 689 "engines/sci/engine/savegame.cfsml" + if (_cfsml_read_string(fh, (char **) &(save_struc->value), value, line, hiteof)) { + _cfsml_error("Token expected by _cfsml_read_string() for value at line %d\n", *line); + return CFSML_FAILURE; + } } else #line 698 "engines/sci/engine/savegame.cfsml" { - _cfsml_error("sys_strings_t: Assignment to invalid identifier '%s' in line %d\n", token, *line); + _cfsml_error("SystemString: Assignment to invalid identifier '%s' in line %d\n", token, *line); return CFSML_FAILURE; } } @@ -2444,6 +2433,102 @@ _cfsml_read_node_t(Common::SeekableReadStream *fh, node_t* save_struc, const cha #line 394 "engines/sci/engine/savegame.cfsml" static void +_cfsml_write_SystemStrings(Common::WriteStream *fh, SystemStrings* save_struc) +{ +#line 411 "engines/sci/engine/savegame.cfsml" + WSprintf(fh, "{\n"); + WSprintf(fh, "strings = "); + int min, max; + min = max = SYS_STRINGS_MAX; +#line 438 "engines/sci/engine/savegame.cfsml" + WSprintf(fh, "[%d][\n", max); + for (int i = 0; i < min; i++) { + _cfsml_write_SystemString(fh, &(save_struc->strings[i])); + WSprintf(fh, "\n"); + } + WSprintf(fh, "]"); + WSprintf(fh, "\n"); + WSprintf(fh, "}"); +} + +#line 485 "engines/sci/engine/savegame.cfsml" +static int +_cfsml_read_SystemStrings(Common::SeekableReadStream *fh, SystemStrings* save_struc, const char *lastval, int *line, int *hiteof) +{ +#line 540 "engines/sci/engine/savegame.cfsml" + char *token; + int assignment, closed; + + if (strcmp(lastval, "{")) { + _cfsml_error("Reading record SystemStrings; expected opening braces in line %d, got \"%s\"\n", *line, lastval); + return CFSML_FAILURE; + }; + closed = 0; + do { + const char *value; + token = _cfsml_get_identifier(fh, line, hiteof, &assignment); + + if (!token) { + _cfsml_error("Expected token at line %d\n", *line); + return CFSML_FAILURE; + } + if (!assignment) { + if (!strcmp(token, "}")) + closed = 1; + else { + _cfsml_error("Expected assignment or closing braces in line %d\n", *line); + return CFSML_FAILURE; + } + } else { + value = ""; + while (!value || !strcmp(value, "")) + value = _cfsml_get_value(fh, line, hiteof); + if (!value) { + _cfsml_error("Expected token at line %d\n", *line); + return CFSML_FAILURE; + } + if (!strcmp(token, "strings")) { +#line 603 "engines/sci/engine/savegame.cfsml" + if ((value[0] != '[') || (value[strlen(value) - 1] != '[')) { + _cfsml_error("Opening brackets expected at line %d\n", *line); + return CFSML_FAILURE; + } + int max,done,i; + // Prepare to restore static array + max = SYS_STRINGS_MAX; +#line 638 "engines/sci/engine/savegame.cfsml" + done = i = 0; + do { + if (!(value = _cfsml_get_identifier(fh, line, hiteof, NULL))) { +#line 646 "engines/sci/engine/savegame.cfsml" + _cfsml_error("Token expected at line %d\n", *line); + return 1; + } + if (strcmp(value, "]")) { + if (i == max) { + _cfsml_error("More elements than space available (%d) in '%s' at line %d\n", max, token, *line); + return CFSML_FAILURE; + } + if (_cfsml_read_SystemString(fh, &(save_struc->strings[i++]), value, line, hiteof)) { + _cfsml_error("Token expected by _cfsml_read_SystemString() for strings[i++] at line %d\n", *line); + return CFSML_FAILURE; + } + } else + done = 1; + } while (!done); + } else +#line 698 "engines/sci/engine/savegame.cfsml" + { + _cfsml_error("SystemStrings: Assignment to invalid identifier '%s' in line %d\n", token, *line); + return CFSML_FAILURE; + } + } + } while (!closed); // Until closing braces are hit + return CFSML_SUCCESS; +} + +#line 394 "engines/sci/engine/savegame.cfsml" +static void _cfsml_write_list_table_t(Common::WriteStream *fh, list_table_t* save_struc) { #line 411 "engines/sci/engine/savegame.cfsml" @@ -3682,91 +3767,6 @@ _cfsml_read_list_t(Common::SeekableReadStream *fh, list_t* save_struc, const cha #line 394 "engines/sci/engine/savegame.cfsml" static void -_cfsml_write_sys_string_t(Common::WriteStream *fh, sys_string_t* save_struc) -{ -#line 411 "engines/sci/engine/savegame.cfsml" - WSprintf(fh, "{\n"); - WSprintf(fh, "name = "); - _cfsml_write_string(fh, (char **) &(save_struc->name)); - WSprintf(fh, "\n"); - WSprintf(fh, "max_size = "); - _cfsml_write_int(fh, (int*) &(save_struc->max_size)); - WSprintf(fh, "\n"); - WSprintf(fh, "value = "); - _cfsml_write_string(fh, (char **) &(save_struc->value)); - WSprintf(fh, "\n"); - WSprintf(fh, "}"); -} - -#line 485 "engines/sci/engine/savegame.cfsml" -static int -_cfsml_read_sys_string_t(Common::SeekableReadStream *fh, sys_string_t* save_struc, const char *lastval, int *line, int *hiteof) -{ -#line 540 "engines/sci/engine/savegame.cfsml" - char *token; - int assignment, closed; - - if (strcmp(lastval, "{")) { - _cfsml_error("Reading record sys_string_t; expected opening braces in line %d, got \"%s\"\n", *line, lastval); - return CFSML_FAILURE; - }; - closed = 0; - do { - const char *value; - token = _cfsml_get_identifier(fh, line, hiteof, &assignment); - - if (!token) { - _cfsml_error("Expected token at line %d\n", *line); - return CFSML_FAILURE; - } - if (!assignment) { - if (!strcmp(token, "}")) - closed = 1; - else { - _cfsml_error("Expected assignment or closing braces in line %d\n", *line); - return CFSML_FAILURE; - } - } else { - value = ""; - while (!value || !strcmp(value, "")) - value = _cfsml_get_value(fh, line, hiteof); - if (!value) { - _cfsml_error("Expected token at line %d\n", *line); - return CFSML_FAILURE; - } - if (!strcmp(token, "name")) { -#line 689 "engines/sci/engine/savegame.cfsml" - if (_cfsml_read_string(fh, (char **) &(save_struc->name), value, line, hiteof)) { - _cfsml_error("Token expected by _cfsml_read_string() for name at line %d\n", *line); - return CFSML_FAILURE; - } - } else - if (!strcmp(token, "max_size")) { -#line 689 "engines/sci/engine/savegame.cfsml" - if (_cfsml_read_int(fh, (int*) &(save_struc->max_size), value, line, hiteof)) { - _cfsml_error("Token expected by _cfsml_read_int() for max_size at line %d\n", *line); - return CFSML_FAILURE; - } - } else - if (!strcmp(token, "value")) { -#line 689 "engines/sci/engine/savegame.cfsml" - if (_cfsml_read_string(fh, (char **) &(save_struc->value), value, line, hiteof)) { - _cfsml_error("Token expected by _cfsml_read_string() for value at line %d\n", *line); - return CFSML_FAILURE; - } - } else -#line 698 "engines/sci/engine/savegame.cfsml" - { - _cfsml_error("sys_string_t: Assignment to invalid identifier '%s' in line %d\n", token, *line); - return CFSML_FAILURE; - } - } - } while (!closed); // Until closing braces are hit - return CFSML_SUCCESS; -} - -#line 394 "engines/sci/engine/savegame.cfsml" -static void _cfsml_write_script_t(Common::WriteStream *fh, script_t* save_struc) { #line 411 "engines/sci/engine/savegame.cfsml" @@ -4334,7 +4334,7 @@ void write_mem_obj_t(Common::WriteStream *fh, mem_obj_t *foo) { case MEM_OBJ_SYS_STRINGS: #line 818 "engines/sci/engine/savegame.cfsml" // Auto-generated CFSML data writer code - _cfsml_write_sys_strings_t(fh, &foo->data.sys_strings); + _cfsml_write_SystemStrings(fh, &foo->data.sys_strings); WSprintf(fh, "\n"); // End of auto-generated CFSML data writer code #line 628 "engines/sci/engine/savegame.cfsml" @@ -4512,7 +4512,7 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l _cfsml_error = CFSML_FAILURE; } else { #line 788 "engines/sci/engine/savegame.cfsml" - _cfsml_error = _cfsml_read_sys_strings_t(fh, &foo->data.sys_strings, _cfsml_inp, &(*line), &_cfsml_eof); + _cfsml_error = _cfsml_read_SystemStrings(fh, &foo->data.sys_strings, _cfsml_inp, &(*line), &_cfsml_eof); } #line 793 "engines/sci/engine/savegame.cfsml" *hiteof = _cfsml_error; @@ -5232,8 +5232,25 @@ EngineState *gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) { retval->save_dir_edit_offset = 0; retval->sys_strings_segment = find_unique_seg_by_type(retval->seg_manager, MEM_OBJ_SYS_STRINGS); retval->sys_strings = &(((mem_obj_t *)(GET_SEGMENT(*retval->seg_manager, retval->sys_strings_segment, MEM_OBJ_SYS_STRINGS)))->data.sys_strings); - sys_strings_restore(retval->sys_strings, s->sys_strings); + // Restore system strings + SystemString *str; + + // First, pad memory + for (int i = 0; i < SYS_STRINGS_MAX; i++) { + str = &retval->sys_strings->strings[i]; + char *data = str->value; + if (data) { + str->value = (char *)sci_malloc(str->max_size + 1); + strcpy(str->value, data); + free(data); + } + } + + str = &retval->sys_strings->strings[SYS_STRING_SAVEDIR]; + strncpy(str->value, s->sys_strings->strings[SYS_STRING_SAVEDIR].value, str->max_size); + str->value[str->max_size] = 0; // Make sure to terminate + // Time state: retval->last_wait_time = g_system->getMillis(); retval->game_start_time = g_system->getMillis() - retval->game_time * 1000; @@ -5319,7 +5336,7 @@ bool get_savegame_metadata(Common::SeekableReadStream* stream, SavegameMetadata* } } // End of auto-generated CFSML data reader code -#line 1163 "engines/sci/engine/savegame.cfsml" +#line 1180 "engines/sci/engine/savegame.cfsml" if (read_eof) return false; diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp index 1f3ddfa235..5d753255bd 100644 --- a/engines/sci/engine/scriptdebug.cpp +++ b/engines/sci/engine/scriptdebug.cpp @@ -414,7 +414,7 @@ static void _c_single_seg_info(EngineState *s, mem_obj_t *mobj) { break; case MEM_OBJ_SYS_STRINGS: { - sys_strings_t *strings = &(mobj->data.sys_strings); + SystemStrings *strings = &(mobj->data.sys_strings); int i; sciprintf("system string table\n"); diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp index 5f662d5c6e..efa5746a61 100644 --- a/engines/sci/engine/seg_manager.cpp +++ b/engines/sci/engine/seg_manager.cpp @@ -232,6 +232,7 @@ int SegManager::initialiseScript(mem_obj_t *mem, EngineState *s, int script_nr) int SegManager::deallocate(int seg, bool recursive) { mem_obj_t *mobj; VERIFY(check(seg), "invalid seg id"); + int i; mobj = heap[seg]; id_seg_map->removeKey(mobj->segmgr_id); @@ -255,8 +256,19 @@ int SegManager::deallocate(int seg, bool recursive) { free(mobj->data.dynmem.buf); mobj->data.dynmem.buf = NULL; break; - case MEM_OBJ_SYS_STRINGS: - sys_string_free_all(&(mobj->data.sys_strings)); + case MEM_OBJ_SYS_STRINGS: + for (i = 0; i < SYS_STRINGS_MAX; i++) { + SystemString *str = &mobj->data.sys_strings.strings[i]; + if (str->name) { + free(str->name); + str->name = NULL; + + free(str->value); + str->value = NULL; + + str->max_size = 0; + } + } break; case MEM_OBJ_STACK: free(mobj->data.stack.entries); @@ -1193,11 +1205,11 @@ dstack_t *SegManager::allocateStack(int size, seg_id_t *segid) { return retval; } -sys_strings_t *SegManager::allocateSysStrings(seg_id_t *segid) { +SystemStrings *SegManager::allocateSysStrings(seg_id_t *segid) { mem_obj_t *memobj = allocNonscriptSegment(MEM_OBJ_SYS_STRINGS, segid); - sys_strings_t *retval = &(memobj->data.sys_strings); + SystemStrings *retval = &(memobj->data.sys_strings); - memset(retval, 0, sizeof(sys_string_t)*SYS_STRINGS_MAX); + memset(retval, 0, sizeof(SystemString)*SYS_STRINGS_MAX); return retval; } diff --git a/engines/sci/engine/seg_manager.h b/engines/sci/engine/seg_manager.h index acc4565ed1..0dc4b3755b 100644 --- a/engines/sci/engine/seg_manager.h +++ b/engines/sci/engine/seg_manager.h @@ -300,8 +300,7 @@ public: // Allocates a system string table // Returns : (dstack_t *): The physical stack // (seg_id_t) segid: Segment ID of the stack - // See also sys_string_acquire(); - sys_strings_t *allocateSysStrings(seg_id_t *segid); + SystemStrings *allocateSysStrings(seg_id_t *segid); // 6, 7. Lists and Nodes diff --git a/engines/sci/engine/sys_strings.cpp b/engines/sci/engine/sys_strings.cpp deleted file mode 100644 index 7aba4b58d3..0000000000 --- a/engines/sci/engine/sys_strings.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "sci/tools.h" -#include "sci/engine/sys_strings.h" -#include "sci/sci_memory.h" - -namespace Sci { - -void sys_string_acquire(sys_strings_t *strings, int index, const char *name, int max_len) { - sys_string_t *str = strings->strings + index; - - if (index < 0 || index >= SYS_STRINGS_MAX) { - fprintf(stderr, "[SYSSTR] Error: Attempt to acquire string #%d\n", - index); - BREAKPOINT(); - } - - if (str->name - && (strcmp(name, str->name) - || (str->max_size != max_len))) { - fprintf(stderr, "[SYSSTR] Error: Attempt to re-acquire existing string #%d;" - "was '%s', tried to claim as '%s'\n", - index, str->name, name); - BREAKPOINT(); - } - - str->name = strdup(name); - str->max_size = max_len; - str->value = (char*)sci_malloc(max_len + 1); - str->value[0] = 0; // Set to empty string -} - -int sys_string_set(sys_strings_t *strings, int index, const char *value) { - sys_string_t *str = strings->strings + index; - - if (index < 0 || index >= SYS_STRINGS_MAX || !str->name) { - fprintf(stderr, "[SYSSTR] Error: Attempt to write to invalid/unused string #%d\n", - index); - BREAKPOINT(); - return 1; - } - - strncpy(str->value, value, str->max_size); - str->value[str->max_size] = 0; // Make sure to terminate - - return 0; -} - -void sys_string_free(sys_strings_t *strings, int index) { - sys_string_t *str = strings->strings + index; - - free(str->name); - str->name = NULL; - - free(str->value); - str->value = NULL; - - str->max_size = 0; -} - -void sys_string_free_all(sys_strings_t *strings) { - int i; - - for (i = 0;i < SYS_STRINGS_MAX;i++) { - if (strings->strings[i].name) - sys_string_free(strings, i); - } - -} - -void sys_strings_restore(sys_strings_t *new_strings, sys_strings_t *old_strings) { - int i; - - // First, pad memory - for (i = 0; i < SYS_STRINGS_MAX; i++) { - sys_string_t *s = new_strings->strings + i; - char *data = s->value; - if (data) { - s->value = (char *)sci_malloc(s->max_size + 1); - strcpy(s->value, data); - free(data); - } - } - - sys_string_set(new_strings, SYS_STRING_SAVEDIR, old_strings->strings[SYS_STRING_SAVEDIR].value); -} - -} // End of namespace Sci diff --git a/engines/sci/engine/sys_strings.h b/engines/sci/engine/sys_strings.h deleted file mode 100644 index 3e7360c5cd..0000000000 --- a/engines/sci/engine/sys_strings.h +++ /dev/null @@ -1,80 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef SCI_ENGINE_SYS_STRINGS_H -#define SCI_ENGINE_SYS_STRINGS_H - -namespace Sci { - -enum { - SYS_STRINGS_MAX = 4, - - SYS_STRING_SAVEDIR = 0, - SYS_STRING_PARSER_BASE = 1, - - MAX_PARSER_BASE = 64 -}; - -struct sys_string_t { - char *name; - int max_size; - char *value; -}; - -struct sys_strings_t { - sys_string_t strings[SYS_STRINGS_MAX]; -}; - -void sys_string_acquire(sys_strings_t *strings, int index, const char *name, int max_len); -/* Reserves a new system string -** Parameters: (sys_strings_t *) strings: The string table to reserve in -** (int) index: Index number to reserve -** (const char *) name: Name the entry should be tagged with -** (int) max_len: Maximum string length in bytes -*/ - -int sys_string_set(sys_strings_t *strings, int index, const char *value); -/* Sets the value of a system string -** Parameters: (sys_strings_t *) strings: The string table to use -** (int) index: Index of the string to write to -** (const char *) value: The value to copy -** Returns : 0 on success, 1 on error -** Length clipping is performed. -*/ - -void sys_strings_restore(sys_strings_t *new_strings, sys_strings_t *old_strings); -/* Cleanup system strings after a gamestate restore -** Parameters: (sys_strings_t *) The freshly loaded system strings to clean up -** (sys_strings_t *) The old system strings to clean up -*/ - -void sys_string_free_all(sys_strings_t *strings); -/* Deallocates all allocated system strings -** Parameters: (sys_strings_t *) strings: The string table to deallocate -*/ - -} // End of namespace Sci - -#endif // SCI_ENGINE_SYS_STRINGS_H diff --git a/engines/sci/engine/vm.h b/engines/sci/engine/vm.h index 721360932f..50d2032b44 100644 --- a/engines/sci/engine/vm.h +++ b/engines/sci/engine/vm.h @@ -32,12 +32,29 @@ #include "sci/include/vm_types.h" // for reg_t #include "sci/include/heapmgr.h" -#include "sci/engine/sys_strings.h" - namespace Sci { struct IntMapper; +enum { + SYS_STRINGS_MAX = 4, + + SYS_STRING_SAVEDIR = 0, + SYS_STRING_PARSER_BASE = 1, + + MAX_PARSER_BASE = 64 +}; + +struct SystemString { + char *name; + int max_size; + char *value; +}; + +struct SystemStrings { + SystemString strings[SYS_STRINGS_MAX]; +}; + #define VM_STACK_SIZE 0x1000 /* Number of bytes to be allocated for the stack */ @@ -277,7 +294,7 @@ struct mem_obj_t { clone_table_t clones; local_variables_t locals; dstack_t stack; - sys_strings_t sys_strings; + SystemStrings sys_strings; list_table_t lists; node_table_t nodes; hunk_table_t hunks; diff --git a/engines/sci/include/engine.h b/engines/sci/include/engine.h index 13e58ecd8b..085b50b2e4 100644 --- a/engines/sci/include/engine.h +++ b/engines/sci/include/engine.h @@ -226,7 +226,7 @@ struct EngineState { /* System strings */ seg_id_t sys_strings_segment; - sys_strings_t *sys_strings; + SystemStrings *sys_strings; /* Parser data: */ word_t **parser_words; diff --git a/engines/sci/module.mk b/engines/sci/module.mk index 34d9a9bb60..39cca125cc 100644 --- a/engines/sci/module.mk +++ b/engines/sci/module.mk @@ -31,7 +31,6 @@ MODULE_OBJS = \ engine/scriptconsole.o \ engine/scriptdebug.o \ engine/seg_manager.o \ - engine/sys_strings.o \ engine/vm.o \ gfx/font.o \ gfx/gfx_driver.o \ |