diff options
| -rw-r--r-- | engines/director/lingo/lingo.cpp | 16 | ||||
| -rw-r--r-- | engines/director/lingo/lingo.h | 2 | ||||
| -rw-r--r-- | engines/director/score.cpp | 18 | 
3 files changed, 19 insertions, 17 deletions
| diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp index 26fdfc2edb..a7362d18b9 100644 --- a/engines/director/lingo/lingo.cpp +++ b/engines/director/lingo/lingo.cpp @@ -100,10 +100,10 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {  Lingo::~Lingo() {  } -void Lingo::addCode(Common::String code, ScriptType type, uint16 id) { +void Lingo::addCode(const char *code, ScriptType type, uint16 id) {  	code += '\n'; -	debug(2, "Add code \"%s\" for type %d with id %d", code.c_str(), type, id); +	debug(2, "Add code \"%s\" for type %d with id %d", code, type, id);  	if (_scripts[type].contains(id)) {  		delete _scripts[type][id]; @@ -115,15 +115,17 @@ void Lingo::addCode(Common::String code, ScriptType type, uint16 id) {  	_linenumber = _colnumber = 1; +	const char *begin, *end; +  	// macros have conflicting grammar. Thus we ease life for the parser. -	if (code.contains("\nmacro ")) { -		const char *begin = strstr(code.c_str(), "\nmacro ") + 1; -		const char *end; +	if ((begin = strstr(code, "\nmacro "))) {  		bool first = true; +		begin += 1; +  		while ((end = strstr(begin, "\nmacro "))) {  			if (first) { -				begin = code.c_str(); +				begin = code;  				first = false;  			}  			Common::String chunk(begin, end); @@ -137,7 +139,7 @@ void Lingo::addCode(Common::String code, ScriptType type, uint16 id) {  		parse(begin);  	} else { -		parse(code.c_str()); +		parse(code);  		code1(STOP);  	} diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h index 6aa7917ff4..1509c1d36e 100644 --- a/engines/director/lingo/lingo.h +++ b/engines/director/lingo/lingo.h @@ -135,7 +135,7 @@ public:  	Lingo(DirectorEngine *vm);  	~Lingo(); -	void addCode(Common::String code, ScriptType type, uint16 id); +	void addCode(const char *code, ScriptType type, uint16 id);  	void executeScript(ScriptType type, uint16 id);  	void processEvent(LEvent event, int entityId); diff --git a/engines/director/score.cpp b/engines/director/score.cpp index 24d0b3494f..4ca299846f 100644 --- a/engines/director/score.cpp +++ b/engines/director/score.cpp @@ -340,8 +340,8 @@ void Score::loadActions(Common::SeekableSubReadStreamEndian &stream) {  	Common::HashMap<uint16, Common::String>::iterator j;  	for (j = _actions.begin(); j != _actions.end(); ++j) -		if (j->_value != "") -			_lingo->addCode(j->_value, kFrameScript, j->_key); +		if (!j->_value.empty()) +			_lingo->addCode(j->_value.c_str(), kFrameScript, j->_key);  	if (!ConfMan.getBool("dump_scripts"))  		return; @@ -368,10 +368,10 @@ void Score::loadScriptText(Common::SeekableSubReadStreamEndian &stream) {  		script += ch;  	} -	if (script != "") -		_lingo->addCode(script, kMovieScript, _movieScriptCount); +	if (!script.empty()) +		_lingo->addCode(script.c_str(), kMovieScript, _movieScriptCount); -	if (ConfMan.getBool("dump_scripts") && (script != "")) { +	if (ConfMan.getBool("dump_scripts") && (!script.empty())) {  		dumpScript(_movieScriptCount, kMovieScript, script);  	} @@ -427,8 +427,8 @@ void Score::loadCastInfo(Common::SeekableSubReadStreamEndian &stream, uint16 id)  	ci->script = castStrings[0]; -	if (ci->script != "") { -		_lingo->addCode(ci->script, kSpriteScript, id); +	if (!ci->script.empty()) { +		_lingo->addCode(ci->script.c_str(), kSpriteScript, id);  	}  	if (!ConfMan.getBool("dump_scripts")) { @@ -525,8 +525,8 @@ void Score::loadFileInfo(Common::SeekableSubReadStreamEndian &stream) {  	Common::Array<Common::String> fileInfoStrings = loadStrings(stream, _flags);  	_script = fileInfoStrings[0]; -	if (_script != "") { -		_lingo->addCode(_script, kMovieScript, _movieScriptCount); +	if (!_script.empty()) { +		_lingo->addCode(_script.c_str(), kMovieScript, _movieScriptCount);  	}  	if (!ConfMan.getBool("dump_scripts")) { | 
