From 9c92bd1b810621bdaa779bd3354b10ad048c7924 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Tue, 1 Jun 2010 15:11:20 +0000 Subject: The parser vocabulary remains static throughout the game, thus it has been removed from the engine state svn-id: r49373 --- engines/sci/engine/game.cpp | 10 ++++++---- engines/sci/engine/kevent.cpp | 4 ++-- engines/sci/engine/kparse.cpp | 28 +++++++++++++++------------- engines/sci/engine/savegame.cpp | 7 +------ engines/sci/engine/state.cpp | 4 ++-- engines/sci/engine/state.h | 3 +-- engines/sci/parser/said.cpp | 7 ++++--- engines/sci/parser/said.y | 7 ++++--- engines/sci/sci.cpp | 2 +- 9 files changed, 36 insertions(+), 36 deletions(-) (limited to 'engines/sci') diff --git a/engines/sci/engine/game.cpp b/engines/sci/engine/game.cpp index 02e66f2142..03c3594f03 100644 --- a/engines/sci/engine/game.cpp +++ b/engines/sci/engine/game.cpp @@ -99,10 +99,12 @@ int game_init(EngineState *s) { return 1; } - if (s->_voc) { - s->_voc->parserIsValid = false; // Invalidate parser - s->_voc->parser_event = NULL_REG; // Invalidate parser event - s->_voc->parser_base = make_reg(s->_segMan->getSysStringsSegment(), SYS_STRING_PARSER_BASE); + // Reset parser + Vocabulary *voc = g_sci->getVocabulary(); + if (voc) { + voc->parserIsValid = false; // Invalidate parser + voc->parser_event = NULL_REG; // Invalidate parser event + voc->parser_base = make_reg(s->_segMan->getSysStringsSegment(), SYS_STRING_PARSER_BASE); } // Initialize menu TODO: Actually this should be another init() diff --git a/engines/sci/engine/kevent.cpp b/engines/sci/engine/kevent.cpp index f0432f0c96..35f71efedd 100644 --- a/engines/sci/engine/kevent.cpp +++ b/engines/sci/engine/kevent.cpp @@ -67,8 +67,8 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) { oldy = mousePos.y; curEvent = s->_event->get(mask); - if (s->_voc) - s->_voc->parser_event = NULL_REG; // Invalidate parser event + if (g_sci->getVocabulary()) + g_sci->getVocabulary()->parser_event = NULL_REG; // Invalidate parser event writeSelectorValue(segMan, obj, SELECTOR(x), mousePos.x); writeSelectorValue(segMan, obj, SELECTOR(y), mousePos.y); diff --git a/engines/sci/engine/kparse.cpp b/engines/sci/engine/kparse.cpp index 97a75dcb1c..785ff39d22 100644 --- a/engines/sci/engine/kparse.cpp +++ b/engines/sci/engine/kparse.cpp @@ -42,6 +42,7 @@ reg_t kSaid(EngineState *s, int argc, reg_t *argv) { reg_t heap_said_block = argv[0]; byte *said_block; int new_lastmatch; + Vocabulary *voc = g_sci->getVocabulary(); #ifdef DEBUG_PARSER const int debug_parser = 1; #else @@ -63,7 +64,7 @@ reg_t kSaid(EngineState *s, int argc, reg_t *argv) { s->_voc->decipherSaidBlock(said_block); #endif - if (s->_voc->parser_event.isNull() || (readSelectorValue(s->_segMan, s->_voc->parser_event, SELECTOR(claimed)))) { + if (voc->parser_event.isNull() || (readSelectorValue(s->_segMan, voc->parser_event, SELECTOR(claimed)))) { return NULL_REG; } @@ -77,7 +78,7 @@ reg_t kSaid(EngineState *s, int argc, reg_t *argv) { s->r_acc = make_reg(0, 1); if (new_lastmatch != SAID_PARTIAL_MATCH) - writeSelectorValue(s->_segMan, s->_voc->parser_event, SELECTOR(claimed), 1); + writeSelectorValue(s->_segMan, voc->parser_event, SELECTOR(claimed), 1); } else { return NULL_REG; @@ -92,15 +93,15 @@ reg_t kParse(EngineState *s, int argc, reg_t *argv) { char *error; ResultWordList words; reg_t event = argv[1]; - Vocabulary *voc = s->_voc; + Vocabulary *voc = g_sci->getVocabulary(); - s->_voc->parser_event = event; + voc->parser_event = event; bool res = voc->tokenizeString(words, string.c_str(), &error); - s->_voc->parserIsValid = false; /* not valid */ + voc->parserIsValid = false; /* not valid */ if (res && !words.empty()) { - s->_voc->synonymizeTokens(words); + voc->synonymizeTokens(words); s->r_acc = make_reg(0, 1); @@ -117,17 +118,17 @@ reg_t kParse(EngineState *s, int argc, reg_t *argv) { s->r_acc = make_reg(0, 1); writeSelectorValue(segMan, event, SELECTOR(claimed), 1); - invokeSelector(INV_SEL(s, s->_gameObj, syntaxFail, kStopOnInvalidSelector), 2, s->_voc->parser_base, stringpos); + invokeSelector(INV_SEL(s, s->_gameObj, syntaxFail, kStopOnInvalidSelector), 2, voc->parser_base, stringpos); /* Issue warning */ debugC(2, kDebugLevelParser, "Tree building failed"); } else { - s->_voc->parserIsValid = true; + voc->parserIsValid = true; writeSelectorValue(segMan, event, SELECTOR(claimed), 0); #ifdef DEBUG_PARSER - s->_voc->dumpParseTree(); + voc->dumpParseTree(); #endif } @@ -136,11 +137,11 @@ reg_t kParse(EngineState *s, int argc, reg_t *argv) { s->r_acc = make_reg(0, 0); writeSelectorValue(segMan, event, SELECTOR(claimed), 1); if (error) { - s->_segMan->strcpy(s->_voc->parser_base, error); + s->_segMan->strcpy(voc->parser_base, error); debugC(2, kDebugLevelParser, "Word unknown: %s", error); /* Issue warning: */ - invokeSelector(INV_SEL(s, s->_gameObj, wordFail, kStopOnInvalidSelector), 2, s->_voc->parser_base, stringpos); + invokeSelector(INV_SEL(s, s->_gameObj, wordFail, kStopOnInvalidSelector), 2, voc->parser_base, stringpos); free(error); return make_reg(0, 1); /* Tell them that it didn't work */ } @@ -156,12 +157,13 @@ reg_t kSetSynonyms(EngineState *s, int argc, reg_t *argv) { Node *node; int script; int numSynonyms = 0; + Vocabulary *voc = g_sci->getVocabulary(); // Only SCI0-SCI1 EGA games had a parser. In newer versions, this is a stub if (getSciVersion() > SCI_VERSION_1_EGA) return s->r_acc; - s->_voc->clearSynonyms(); + voc->clearSynonyms(); list = s->_segMan->lookupList(readSelector(segMan, object, SELECTOR(elements))); node = s->_segMan->lookupNode(list->first); @@ -193,7 +195,7 @@ reg_t kSetSynonyms(EngineState *s, int argc, reg_t *argv) { synonym_t tmp; tmp.replaceant = (int16)READ_LE_UINT16(synonyms + i * 4); tmp.replacement = (int16)READ_LE_UINT16(synonyms + i * 4 + 2); - s->_voc->addSynonym(tmp); + voc->addSynonym(tmp); } } else warning("Synonyms of script.%03d were requested, but script is not available", script); diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 85c9915d57..bba087d953 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -857,7 +857,7 @@ void gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) { } // Create a new EngineState object - retval = new EngineState(s->_voc, s->_segMan); + retval = new EngineState(s->_segMan); retval->_event = s->_event; // Copy some old data @@ -898,11 +898,6 @@ void gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) { retval->last_wait_time = g_system->getMillis(); retval->game_start_time = g_system->getMillis(); - // static parser information: - - if (retval->_voc) - retval->_voc->parser_base = make_reg(s->_segMan->getSysStringsSegment(), SYS_STRING_PARSER_BASE); - retval->successor = NULL; #ifdef USE_OLD_MUSIC_FUNCTIONS diff --git a/engines/sci/engine/state.cpp b/engines/sci/engine/state.cpp index 3c36a05c2f..5325d128be 100644 --- a/engines/sci/engine/state.cpp +++ b/engines/sci/engine/state.cpp @@ -69,8 +69,8 @@ static const uint16 s_halfWidthSJISMap[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -EngineState::EngineState(Vocabulary *voc, SegManager *segMan) -: _voc(voc), _segMan(segMan), _dirseeker() { +EngineState::EngineState(SegManager *segMan) +: _segMan(segMan), _dirseeker() { #ifdef USE_OLD_MUSIC_FUNCTIONS sfx_init_flags = 0; diff --git a/engines/sci/engine/state.h b/engines/sci/engine/state.h index 2025b49f51..0746e8e0a8 100644 --- a/engines/sci/engine/state.h +++ b/engines/sci/engine/state.h @@ -95,14 +95,13 @@ public: struct EngineState : public Common::Serializable { public: - EngineState(Vocabulary *voc, SegManager *segMan); + EngineState(SegManager *segMan); virtual ~EngineState(); virtual void saveLoadWithSerializer(Common::Serializer &ser); public: SegManager *_segMan; /**< The segment manager */ - Vocabulary *_voc; /* Non-VM information */ diff --git a/engines/sci/parser/said.cpp b/engines/sci/parser/said.cpp index 5cd1310ad3..f49704372a 100644 --- a/engines/sci/parser/said.cpp +++ b/engines/sci/parser/said.cpp @@ -2443,13 +2443,14 @@ static int augment_parse_nodes(parse_tree_node_t *parset, parse_tree_node_t *sai int said(EngineState *s, byte *spec, bool verbose) { int retval; + Vocabulary *voc = g_sci->getVocabulary(); - parse_tree_node_t *parse_tree_ptr = s->_voc->_parserNodes; + parse_tree_node_t *parse_tree_ptr = voc->_parserNodes; - if (s->_voc->parserIsValid) { + if (voc->parserIsValid) { if (said_parse_spec(spec)) { printf("Offending spec was: "); - s->_voc->decipherSaidBlock(spec); + voc->decipherSaidBlock(spec); return SAID_NO_MATCH; } diff --git a/engines/sci/parser/said.y b/engines/sci/parser/said.y index 27486c5794..cbb2ff3e62 100644 --- a/engines/sci/parser/said.y +++ b/engines/sci/parser/said.y @@ -799,13 +799,14 @@ static int augment_parse_nodes(parse_tree_node_t *parset, parse_tree_node_t *sai int said(EngineState *s, byte *spec, bool verbose) { int retval; + Vocabulary *voc = g_sci->getVocabulary(); - parse_tree_node_t *parse_tree_ptr = s->_voc->_parserNodes; + parse_tree_node_t *parse_tree_ptr = voc->_parserNodes; - if (s->_voc->parserIsValid) { + if (voc->parserIsValid) { if (said_parse_spec(spec)) { printf("Offending spec was: "); - s->_voc->decipherSaidBlock(spec); + voc->decipherSaidBlock(spec); return SAID_NO_MATCH; } diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index 31d473a0b5..1de42ab115 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -190,7 +190,7 @@ Common::Error SciEngine::run() { _features = new GameFeatures(segMan, _kernel); - _gamestate = new EngineState(_vocabulary, segMan); + _gamestate = new EngineState(segMan); _gamestate->_event = new SciEvent(_resMan); -- cgit v1.2.3