diff options
author | Max Horn | 2009-03-24 12:46:48 +0000 |
---|---|---|
committer | Max Horn | 2009-03-24 12:46:48 +0000 |
commit | b76f7fea4eee59eb88d8028120bb1cae780f1c00 (patch) | |
tree | 0174fb28d19ebacc2e6d75cd31cd3c76e7e1df50 | |
parent | 33895c0220c114653ee77a347452f03e8b8654f7 (diff) | |
download | scummvm-rg350-b76f7fea4eee59eb88d8028120bb1cae780f1c00.tar.gz scummvm-rg350-b76f7fea4eee59eb88d8028120bb1cae780f1c00.tar.bz2 scummvm-rg350-b76f7fea4eee59eb88d8028120bb1cae780f1c00.zip |
SCI: Changed some char* into Common::String
svn-id: r39663
-rw-r--r-- | engines/sci/engine/game.cpp | 16 | ||||
-rw-r--r-- | engines/sci/engine/kgraphics.cpp | 5 | ||||
-rw-r--r-- | engines/sci/engine/kmenu.cpp | 15 | ||||
-rw-r--r-- | engines/sci/engine/savegame.cpp | 2 | ||||
-rw-r--r-- | engines/sci/engine/scriptdebug.cpp | 2 | ||||
-rw-r--r-- | engines/sci/engine/state.cpp | 3 | ||||
-rw-r--r-- | engines/sci/engine/state.h | 6 | ||||
-rw-r--r-- | engines/sci/engine/vm.cpp | 31 | ||||
-rw-r--r-- | engines/sci/gfx/sci_widgets.cpp | 6 | ||||
-rw-r--r-- | engines/sci/gfx/sci_widgets.h | 2 |
10 files changed, 25 insertions, 63 deletions
diff --git a/engines/sci/engine/game.cpp b/engines/sci/engine/game.cpp index 11f90c962b..3a0d02b4cf 100644 --- a/engines/sci/engine/game.cpp +++ b/engines/sci/engine/game.cpp @@ -603,7 +603,7 @@ int game_init(EngineState *s) { return 1; s->successor = NULL; // No successor - s->status_bar_text = NULL; // Status bar is blank + s->_statusBarText.clear(); // Status bar is blank s->status_bar_foreground = 0; s->status_bar_background = s->resmgr->_sciVersion >= SCI_VERSION_01_VGA ? 255 : 15; @@ -628,20 +628,16 @@ int game_init(EngineState *s) { game_obj = script_lookup_export(s, 0, 0); // The first entry in the export table of script 0 points to the game object - s->game_name = sci_strdup(obj_get_name(s, game_obj)); + const char *tmp = obj_get_name(s, game_obj); - if (!s->game_name) { + if (!tmp) { sciprintf("Error: script.000, export 0 ("PREG") does not\n" " yield an object with a name -> sanity check failed\n", PRINT_REG(game_obj)); return 1; } + s->_gameName = tmp; - sciprintf(" \"%s\" at "PREG"\n", s->game_name, PRINT_REG(game_obj)); - - if (strlen((char *)s->game_name) >= MAX_GAMEDIR_SIZE) { - s->game_name[MAX_GAMEDIR_SIZE - 1] = 0; // Fix length with brute force - sciprintf(" Designation too long; was truncated to \"%s\"\n", s->game_name); - } + sciprintf(" \"%s\" at "PREG"\n", s->_gameName.c_str(), PRINT_REG(game_obj)); s->game_obj = game_obj; @@ -684,8 +680,6 @@ int game_exit(EngineState *s) { _free_graphics_input(s); - free(s->game_name); - return 0; } diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index e0e4e80e5a..8823102472 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -1297,7 +1297,10 @@ static void _k_disable_delete_for_now(EngineState *s, reg_t obj) { int type = GET_SEL32V(obj, type); int state = GET_SEL32V(obj, state); - if (type == K_CONTROL_BUTTON && text && !strcmp(s->game_name, "sq4") && + // FIXME: This seems to be some kind of of game specific workaround. + // Therefore, a proper WORKAROUND comment should be added here which + // explains what this does. + if (type == K_CONTROL_BUTTON && text && (s->_gameName == "sq4") && s->version < SCI_VERSION(1, 001, 000) && !strcmp(text, " Delete ")) { PUT_SEL32V(obj, state, (state | CONTROL_STATE_GRAY) & ~CONTROL_STATE_ENABLED); } diff --git a/engines/sci/engine/kmenu.cpp b/engines/sci/engine/kmenu.cpp index 3304acf2de..a8d505e183 100644 --- a/engines/sci/engine/kmenu.cpp +++ b/engines/sci/engine/kmenu.cpp @@ -76,15 +76,12 @@ reg_t kDrawStatus(EngineState *s, int funct_nr, int argc, reg_t *argv) { s->status_bar_foreground = fgcolor; s->status_bar_background = bgcolor; - if (NULL != s->status_bar_text) { - free(s->status_bar_text); - s->status_bar_text = NULL; + if (text.segment) { + const char *tmp = sci_strdup(kernel_dereference_char_pointer(s, text, 0)); + s->_statusBarText = tmp ? tmp : ""; } - if (text.segment) - s->status_bar_text = sci_strdup(kernel_dereference_char_pointer(s, text, 0)); - - sciw_set_status_bar(s, s->titlebar_port, s->status_bar_text, fgcolor, bgcolor); + sciw_set_status_bar(s, s->titlebar_port, s->_statusBarText, fgcolor, bgcolor); gfxop_update(s->gfx_state); @@ -97,7 +94,7 @@ reg_t kDrawMenuBar(EngineState *s, int funct_nr, int argc, reg_t *argv) { if (SKPV(0)) sciw_set_menubar(s, s->titlebar_port, s->_menubar, -1); else - sciw_set_status_bar(s, s->titlebar_port, NULL, 0, 0); + sciw_set_status_bar(s, s->titlebar_port, "", 0, 0); s->titlebar_port->draw(GFXW(s->titlebar_port), Common::Point(0, 0)); gfxop_update(s->gfx_state); @@ -317,7 +314,7 @@ reg_t kMenuSelect(EngineState *s, int funct_nr, int argc, reg_t *argv) { port->widfree(GFXW(port)); port = NULL; - sciw_set_status_bar(s, s->titlebar_port, s->status_bar_text, s->status_bar_foreground, s->status_bar_background); + sciw_set_status_bar(s, s->titlebar_port, s->_statusBarText, s->status_bar_foreground, s->status_bar_background); gfxop_update(s->gfx_state); } FULL_REDRAW; diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 901e160b67..c90b8cf6c8 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -925,7 +925,7 @@ EngineState *gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) { retval->successor = NULL; retval->pic_priority_table = (int*)gfxop_get_pic_metainfo(retval->gfx_state); - retval->game_name = sci_strdup(obj_get_name(retval, retval->game_obj)); + retval->_gameName = obj_get_name(retval, retval->game_obj); retval->sound.it = NULL; retval->sound.flags = s->sound.flags; diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp index 69d823a369..a7d0abcd2a 100644 --- a/engines/sci/engine/scriptdebug.cpp +++ b/engines/sci/engine/scriptdebug.cpp @@ -2781,7 +2781,7 @@ int c_statusbar(EngineState *s) { s->status_bar_foreground = cmd_params[0].val; s->status_bar_background = cmd_params[1].val; - sciw_set_status_bar(s, s->titlebar_port, s->status_bar_text, s->status_bar_foreground, s->status_bar_background); + sciw_set_status_bar(s, s->titlebar_port, s->_statusBarText, s->status_bar_foreground, s->status_bar_background); gfxop_update(s->gfx_state); return 0; diff --git a/engines/sci/engine/state.cpp b/engines/sci/engine/state.cpp index 414e9d6892..521cd46de6 100644 --- a/engines/sci/engine/state.cpp +++ b/engines/sci/engine/state.cpp @@ -34,7 +34,6 @@ EngineState::EngineState() : _dirseeker(this) { resmgr = 0; - game_name = 0; game_version = 0; gfx_state = 0; @@ -55,8 +54,6 @@ EngineState::EngineState() : _dirseeker(this) { pic_priority_table = 0; - status_bar_text = 0; - status_bar_foreground = 0; status_bar_background = 0; diff --git a/engines/sci/engine/state.h b/engines/sci/engine/state.h index b01f6539c5..069e798ba8 100644 --- a/engines/sci/engine/state.h +++ b/engines/sci/engine/state.h @@ -76,7 +76,6 @@ public: #define CURRENT_SAVEGAME_VERSION 8 #define MINIMUM_SAVEGAME_VERSION 8 -#define MAX_GAMEDIR_SIZE 32 /* Used for subdirectory inside of "~/.freesci/" */ #define MAX_SAVEGAME_NR 20 /* Maximum number of savegames */ #define MAX_SAVE_DIR_SIZE MAXPATHLEN @@ -119,7 +118,7 @@ public: ResourceManager *resmgr; /* The resource manager */ - char *game_name; /* Designation of the primary object (which inherits from Game) */ + Common::String _gameName; /* Designation of the primary object (which inherits from Game) */ char *game_version; /* Non-VM information */ @@ -142,7 +141,8 @@ public: int *pic_priority_table; /* 16 entries with priorities or NULL if not present */ - char *status_bar_text; /* Text on the status bar, or NULL if the title bar is blank */ + /** Text on the status bar, or NULL if the title bar is blank */ + Common::String _statusBarText; int status_bar_foreground, status_bar_background; diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp index 424c7a8180..678c5e4f14 100644 --- a/engines/sci/engine/vm.cpp +++ b/engines/sci/engine/vm.cpp @@ -2078,7 +2078,7 @@ int objinfo(EngineState *s, reg_t pos); int game_run(EngineState **_s) { EngineState *s = *_s; - sciprintf(" Calling %s::play()\n", s->game_name); + sciprintf(" Calling %s::play()\n", s->_gameName.c_str()); _init_stack_base_with_selector(s, s->selector_map.play); // Call the play selector // Now: Register the first element on the execution stack- @@ -2095,35 +2095,6 @@ int game_run(EngineState **_s) { return 0; } -#if 0 -int game_restore(EngineState **_s, char *game_name) { - EngineState *s; - int debug_state = _debugstate_valid; - - sciprintf("Restoring savegame '%s'...\n", game_name); - s = gamestate_restore(*_s, game_name); - - if (!s) { - sciprintf("Restoring gamestate '%s' failed.\n", game_name); - return 1; - } - _debugstate_valid = debug_state; - script_abort_flag = 0; - s->restarting_flags = 0; - - s->execution_stack_pos = -1; // Resatart with replay - - _init_stack_base_with_selector(s, s->selector_map.replay); - - send_selector(s, s->game_obj, s->game_obj, s->stack_base, 2, s->stack_base); - - *_s = s = _game_run(s, 1); - - sciprintf(" Game::play() finished.\n"); - return 0; -} -#endif - Object *obj_get(EngineState *s, reg_t offset) { MemObject *memobj = GET_OBJECT_SEGMENT(*s->seg_manager, offset.segment); Object *obj = NULL; diff --git a/engines/sci/gfx/sci_widgets.cpp b/engines/sci/gfx/sci_widgets.cpp index d939fdd754..f816c2fea2 100644 --- a/engines/sci/gfx/sci_widgets.cpp +++ b/engines/sci/gfx/sci_widgets.cpp @@ -72,7 +72,7 @@ static gfxw_list_t *finish_titlebar_list(EngineState *s, gfxw_list_t *list, gfxw return list; } -void sciw_set_status_bar(EngineState *s, gfxw_port_t *status_bar, const char *text, int fgcolor, int bgcolor) { +void sciw_set_status_bar(EngineState *s, gfxw_port_t *status_bar, const Common::String &text, int fgcolor, int bgcolor) { gfx_state_t *state; gfxw_list_t *list; gfx_color_t bg = status_bar->bgcolor; @@ -93,9 +93,9 @@ void sciw_set_status_bar(EngineState *s, gfxw_port_t *status_bar, const char *te clear_titlebar(status_bar); - if (text) { + if (!text.empty()) { gfxw_text_t *textw = gfxw_new_text(state, gfx_rect(0, 0, status_bar->bounds.width, status_bar->bounds.height), - status_bar->font_nr, text, ALIGN_LEFT, ALIGN_CENTER, + status_bar->font_nr, text.c_str(), ALIGN_LEFT, ALIGN_CENTER, fg, fg, bg, GFXR_FONT_FLAG_NO_NEWLINES); list = make_titlebar_list(s, status_bar->bounds, status_bar); diff --git a/engines/sci/gfx/sci_widgets.h b/engines/sci/gfx/sci_widgets.h index 62749d9ce4..b47e7120a1 100644 --- a/engines/sci/gfx/sci_widgets.h +++ b/engines/sci/gfx/sci_widgets.h @@ -62,7 +62,7 @@ class Menu; /* Used by the interpreter to flag buttons that are enabled */ #define CONTROL_STATE_ENABLED 0x0001 -void sciw_set_status_bar(EngineState *s, gfxw_port_t *status_bar, const char *text, int fgcolor, int bgcolor); +void sciw_set_status_bar(EngineState *s, gfxw_port_t *status_bar, const Common::String &text, int fgcolor, int bgcolor); /* Sets the contents of a port used as status bar ** Parmeters: (EngineState *) s: The affected game state ** (gfxw_port_t *) status_bar: The status bar port |