diff options
-rw-r--r-- | engines/titanic/module.mk | 1 | ||||
-rw-r--r-- | engines/titanic/true_talk/st_vocab.cpp | 2 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_string_node.cpp | 46 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_string_node.h | 14 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_synonym.cpp | 71 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_synonym.h | 47 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_word.cpp | 8 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_word.h | 8 |
8 files changed, 128 insertions, 69 deletions
diff --git a/engines/titanic/module.mk b/engines/titanic/module.mk index 23354b40f6..42103e77da 100644 --- a/engines/titanic/module.mk +++ b/engines/titanic/module.mk @@ -467,6 +467,7 @@ MODULE_OBJS := \ true_talk/tt_scripts.o \ true_talk/tt_string.o \ true_talk/tt_string_node.o \ + true_talk/tt_synonym.o \ true_talk/tt_talker.o \ true_talk/tt_title_script.o \ true_talk/tt_word.o diff --git a/engines/titanic/true_talk/st_vocab.cpp b/engines/titanic/true_talk/st_vocab.cpp index 138af06854..084393bf87 100644 --- a/engines/titanic/true_talk/st_vocab.cpp +++ b/engines/titanic/true_talk/st_vocab.cpp @@ -141,7 +141,7 @@ void STVocab::addWord(TTword *word) { } TTword *STVocab::findWord(const TTString &str) { - TTsynonymNode *tempNode = new TTsynonymNode(); + TTsynonym *tempNode = new TTsynonym(); bool flag = false; TTword *word = _pHead; diff --git a/engines/titanic/true_talk/tt_string_node.cpp b/engines/titanic/true_talk/tt_string_node.cpp index 95b6465137..cf01ac6063 100644 --- a/engines/titanic/true_talk/tt_string_node.cpp +++ b/engines/titanic/true_talk/tt_string_node.cpp @@ -59,17 +59,6 @@ void TTstringNode::initialize(TTstringNode *oldNode) { delete oldNode; } -TTstringNode *TTstringNode::scan(TTstringNode *start, const TTString &str, int mode) { - for (; start; start = start->_pNext) { - if (start->_mode == mode || (mode == 3 && start->_mode < 3)) { - if (!strcmp(start->_string.c_str(), str.c_str())) - start; - } - } - - return nullptr; -} - void TTstringNode::addNode(TTstringNode *newNode) { TTstringNode *tail = getTail(); tail->_pNext = newNode; @@ -95,39 +84,4 @@ TTstringNode *TTstringNode::getTail() { return node; } -/*------------------------------------------------------------------------*/ - -TTsynonymNode::TTsynonymNode() : TTstringNode() { -} - -TTsynonymNode::TTsynonymNode(const TTstringNode *src) { - _string = src->_string; - initialize(src->_mode); - _field14 = src->_field14; -} - -TTsynonymNode::TTsynonymNode(int mode, const char *str, int val2) : - TTstringNode() { - _string = str; - initialize(mode); - _field14 = val2; -} - -TTsynonymNode *TTsynonymNode::copy(TTstringNode *src) { - if (src->_field1C) { - _field1C = 5; - return this; - } else { - _field1C = 0; - if (src == this) - return this; - - _string = src->_string; - TTsynonymNode *newNode = new TTsynonymNode(src); - initialize(newNode); - - return this; - } -} - } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_string_node.h b/engines/titanic/true_talk/tt_string_node.h index 2c6a4e148d..dddef8db0f 100644 --- a/engines/titanic/true_talk/tt_string_node.h +++ b/engines/titanic/true_talk/tt_string_node.h @@ -63,20 +63,6 @@ public: * Detaches a node from any predecessor and/or successor */ void detach(); - - /** - * Scan for a node with a given string - */ - static TTstringNode *scan(TTstringNode *start, const TTString &str, int mode); -}; - -class TTsynonymNode : public TTstringNode { -public: - TTsynonymNode(); - TTsynonymNode(const TTstringNode *src); - TTsynonymNode(int mode, const char *str, int val2); - - TTsynonymNode *copy(TTstringNode *src); }; } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_synonym.cpp b/engines/titanic/true_talk/tt_synonym.cpp new file mode 100644 index 0000000000..5da124ab27 --- /dev/null +++ b/engines/titanic/true_talk/tt_synonym.cpp @@ -0,0 +1,71 @@ +/* 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. + * + */ + +#include "titanic/true_talk/tt_synonym.h" + +namespace Titanic { + +TTsynonym::TTsynonym() : TTstringNode() { +} + +TTsynonym::TTsynonym(const TTstringNode *src) { + _string = src->_string; + initialize(src->_mode); + _field14 = src->_field14; +} + +TTsynonym::TTsynonym(int mode, const char *str, int val2) : + TTstringNode() { + _string = str; + initialize(mode); + _field14 = val2; +} + +TTsynonym *TTsynonym::findByName(TTsynonym *start, const TTString &str, int mode) { + for (; start; start = static_cast<TTsynonym *>(start->_pNext)) { + if (start->_mode == mode || (mode == 3 && start->_mode < 3)) { + if (!strcmp(start->_string.c_str(), str.c_str())) + start; + } + } + + return nullptr; +} + +TTsynonym *TTsynonym::copy(TTstringNode *src) { + if (src->_field1C) { + _field1C = 5; + return this; + } else { + _field1C = 0; + if (src == this) + return this; + + _string = src->_string; + TTsynonym *newNode = new TTsynonym(src); + initialize(newNode); + + return this; + } +} + +} // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_synonym.h b/engines/titanic/true_talk/tt_synonym.h new file mode 100644 index 0000000000..6a20ef37a4 --- /dev/null +++ b/engines/titanic/true_talk/tt_synonym.h @@ -0,0 +1,47 @@ +/* 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. + * + */ + +#ifndef TITANIC_TT_SYNONYM_H +#define TITANIC_TT_SYNONYM_H + +#include "titanic/true_talk/tt_string_node.h" + +namespace Titanic { + +class TTsynonym : public TTstringNode { +public: + TTsynonym(); + TTsynonym(const TTstringNode *src); + TTsynonym(int mode, const char *str, int val2); + + TTsynonym *copy(TTstringNode *src); + + /** + * Scan for a synonym with a given string + */ + static TTsynonym *findByName(TTsynonym *start, const TTString &str, int mode); + +}; + +} // End of namespace Titanic + +#endif /* TITANIC_TT_SYNONYM_H */ diff --git a/engines/titanic/true_talk/tt_word.cpp b/engines/titanic/true_talk/tt_word.cpp index 3fa5381684..431a1d8767 100644 --- a/engines/titanic/true_talk/tt_word.cpp +++ b/engines/titanic/true_talk/tt_word.cpp @@ -42,7 +42,7 @@ int TTword::readSyn(SimpleFile *file) { return 5; // Create new synanym node - TTsynonymNode *synNode = new TTsynonymNode(mode, str.c_str(), val1); + TTsynonym *synNode = new TTsynonym(mode, str.c_str(), val1); if (_synP) { // A synonym already exists, so add new one as a tail @@ -56,7 +56,7 @@ int TTword::readSyn(SimpleFile *file) { return 0; } -void TTword::appendNode(TTsynonymNode *node) { +void TTword::appendNode(TTsynonym *node) { if (_synP) _synP->addNode(node); else @@ -99,9 +99,9 @@ bool TTword::testFileHandle(SimpleFile *file) const { return true; } -TTword *TTword::scanCopy(const TTString &str, TTsynonymNode *node, int mode) { +TTword *TTword::scanCopy(const TTString &str, TTsynonym *node, int mode) { if (_synP) { - TTstringNode *strNode = _synP->scan(_synP, str, mode); + TTstringNode *strNode = TTsynonym::findByName(_synP, str, mode); if (strNode) { node->copy(strNode); node->_pPrior = nullptr; diff --git a/engines/titanic/true_talk/tt_word.h b/engines/titanic/true_talk/tt_word.h index a535cac834..850b6957f8 100644 --- a/engines/titanic/true_talk/tt_word.h +++ b/engines/titanic/true_talk/tt_word.h @@ -25,7 +25,7 @@ #include "titanic/support/simple_file.h" #include "titanic/true_talk/tt_string.h" -#include "titanic/true_talk/tt_string_node.h" +#include "titanic/true_talk/tt_synonym.h" namespace Titanic { @@ -46,7 +46,7 @@ protected: bool testFileHandle(SimpleFile *file) const; public: TTword *_pNext; - TTsynonymNode *_synP; + TTsynonym *_synP; TTString _string; public: TTword(TTString &str, int mode, int val2); @@ -59,14 +59,14 @@ public: /** * Either sets the first synonym for a word, or adds it to an existing one */ - void appendNode(TTsynonymNode *node); + void appendNode(TTsynonym *node); /** * Load the word */ int load(SimpleFile *file, int mode); - TTword *scanCopy(const TTString &str, TTsynonymNode *node, int mode); + TTword *scanCopy(const TTString &str, TTsynonym *node, int mode); const char *c_str() const { return _string.c_str(); } operator const char *() const { return c_str(); } |