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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Tue Jun 1 17:11:20 CEST 2010


Revision: 49373
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49373&view=rev
Author:   thebluegr
Date:     2010-06-01 15:11:20 +0000 (Tue, 01 Jun 2010)

Log Message:
-----------
The parser vocabulary remains static throughout the game, thus it has been removed from the engine state

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/game.cpp
    scummvm/trunk/engines/sci/engine/kevent.cpp
    scummvm/trunk/engines/sci/engine/kparse.cpp
    scummvm/trunk/engines/sci/engine/savegame.cpp
    scummvm/trunk/engines/sci/engine/state.cpp
    scummvm/trunk/engines/sci/engine/state.h
    scummvm/trunk/engines/sci/parser/said.cpp
    scummvm/trunk/engines/sci/parser/said.y
    scummvm/trunk/engines/sci/sci.cpp

Modified: scummvm/trunk/engines/sci/engine/game.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/game.cpp	2010-06-01 14:41:48 UTC (rev 49372)
+++ scummvm/trunk/engines/sci/engine/game.cpp	2010-06-01 15:11:20 UTC (rev 49373)
@@ -99,10 +99,12 @@
 		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()

Modified: scummvm/trunk/engines/sci/engine/kevent.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kevent.cpp	2010-06-01 14:41:48 UTC (rev 49372)
+++ scummvm/trunk/engines/sci/engine/kevent.cpp	2010-06-01 15:11:20 UTC (rev 49373)
@@ -67,8 +67,8 @@
 	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);

Modified: scummvm/trunk/engines/sci/engine/kparse.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kparse.cpp	2010-06-01 14:41:48 UTC (rev 49372)
+++ scummvm/trunk/engines/sci/engine/kparse.cpp	2010-06-01 15:11:20 UTC (rev 49373)
@@ -42,6 +42,7 @@
 	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 @@
 		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 @@
 		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 @@
 	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 @@
 			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 @@
 		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 @@
 	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 @@
 						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);

Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp	2010-06-01 14:41:48 UTC (rev 49372)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp	2010-06-01 15:11:20 UTC (rev 49373)
@@ -857,7 +857,7 @@
 	}
 
 	// 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 @@
 	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

Modified: scummvm/trunk/engines/sci/engine/state.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/state.cpp	2010-06-01 14:41:48 UTC (rev 49372)
+++ scummvm/trunk/engines/sci/engine/state.cpp	2010-06-01 15:11:20 UTC (rev 49373)
@@ -69,8 +69,8 @@
 	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;

Modified: scummvm/trunk/engines/sci/engine/state.h
===================================================================
--- scummvm/trunk/engines/sci/engine/state.h	2010-06-01 14:41:48 UTC (rev 49372)
+++ scummvm/trunk/engines/sci/engine/state.h	2010-06-01 15:11:20 UTC (rev 49373)
@@ -95,14 +95,13 @@
 
 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 */
 

Modified: scummvm/trunk/engines/sci/parser/said.cpp
===================================================================
--- scummvm/trunk/engines/sci/parser/said.cpp	2010-06-01 14:41:48 UTC (rev 49372)
+++ scummvm/trunk/engines/sci/parser/said.cpp	2010-06-01 15:11:20 UTC (rev 49373)
@@ -2443,13 +2443,14 @@
 
 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;
 		}
 

Modified: scummvm/trunk/engines/sci/parser/said.y
===================================================================
--- scummvm/trunk/engines/sci/parser/said.y	2010-06-01 14:41:48 UTC (rev 49372)
+++ scummvm/trunk/engines/sci/parser/said.y	2010-06-01 15:11:20 UTC (rev 49373)
@@ -799,13 +799,14 @@
 
 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;
 		}
 

Modified: scummvm/trunk/engines/sci/sci.cpp
===================================================================
--- scummvm/trunk/engines/sci/sci.cpp	2010-06-01 14:41:48 UTC (rev 49372)
+++ scummvm/trunk/engines/sci/sci.cpp	2010-06-01 15:11:20 UTC (rev 49373)
@@ -190,7 +190,7 @@
 
 	_features = new GameFeatures(segMan, _kernel);
 
-	_gamestate = new EngineState(_vocabulary, segMan);
+	_gamestate = new EngineState(segMan);
 
 	_gamestate->_event = new SciEvent(_resMan);
 


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