diff options
| -rw-r--r-- | engines/parallaction/disk_br.cpp | 8 | ||||
| -rw-r--r-- | engines/parallaction/disk_ns.cpp | 16 | ||||
| -rw-r--r-- | engines/parallaction/objects.cpp | 67 | ||||
| -rw-r--r-- | engines/parallaction/objects.h | 34 | ||||
| -rw-r--r-- | engines/parallaction/parallaction.cpp | 56 | ||||
| -rw-r--r-- | engines/parallaction/parallaction.h | 31 | 
6 files changed, 104 insertions, 108 deletions
| diff --git a/engines/parallaction/disk_br.cpp b/engines/parallaction/disk_br.cpp index 64eb6b533d..5b79ad7df6 100644 --- a/engines/parallaction/disk_br.cpp +++ b/engines/parallaction/disk_br.cpp @@ -357,13 +357,7 @@ Table* DosDisk_br::loadTable(const char* name) {  	if (!stream.open(path))  		errorFileNotFound(path); -	Table *t = new Table(100); - -	fillBuffers(stream); -	while (scumm_stricmp(_tokens[0], "ENDTABLE")) { -		t->addData(_tokens[0]); -		fillBuffers(stream); -	} +	Table *t = createTableFromStream(100, stream);  	stream.close(); diff --git a/engines/parallaction/disk_ns.cpp b/engines/parallaction/disk_ns.cpp index cb224b713b..8b5ce850ff 100644 --- a/engines/parallaction/disk_ns.cpp +++ b/engines/parallaction/disk_ns.cpp @@ -659,13 +659,7 @@ Table* DosDisk_ns::loadTable(const char* name) {  	if (!stream.open(path))  		errorFileNotFound(path); -	Table *t = new Table(100); - -	fillBuffers(stream); -	while (scumm_stricmp(_tokens[0], "ENDTABLE")) { -		t->addData(_tokens[0]); -		fillBuffers(stream); -	} +	Table *t = createTableFromStream(100, stream);  	stream.close(); @@ -1404,13 +1398,7 @@ Table* AmigaDisk_ns::loadTable(const char* name) {  		stream = &_resArchive;  	} -	Table *t = new Table(100); - -	fillBuffers(*stream); -	while (scumm_stricmp(_tokens[0], "ENDTABLE")) { -		t->addData(_tokens[0]); -		fillBuffers(*stream); -	} +	Table *t = createTableFromStream(100, *stream);  	if (dispose)  		delete stream; diff --git a/engines/parallaction/objects.cpp b/engines/parallaction/objects.cpp index c856d419e3..0e0d7c4c38 100644 --- a/engines/parallaction/objects.cpp +++ b/engines/parallaction/objects.cpp @@ -25,6 +25,7 @@  #include "common/stdafx.h"  #include "parallaction/objects.h" +#include "parallaction/parser.h"  namespace Parallaction { @@ -337,5 +338,71 @@ ScriptVar::ScriptVar() {  	_pvalue = 0;  } +Table::Table(uint32 size) : _size(size), _used(0), _disposeMemory(true) { +	_data = (char**)calloc(size, sizeof(char*)); +} + +Table::Table(uint32 size, const char **data) : _size(size), _used(size), _disposeMemory(false) { +	_data = const_cast<char**>(data); +} + +Table::~Table() { + +	if (!_disposeMemory) return; + +	clear(); + +	free(_data); + +} + +void Table::addData(const char* s) { + +	if (!(_used < _size)) +		error("Table overflow"); + +	_data[_used++] = strdup(s); + +} + +uint16 Table::lookup(const char* s) { + +	for (uint16 i = 0; i < _used; i++) { +		if (!scumm_stricmp(_data[i], s)) return i + 1; +	} + +	return notFound; +} + +void Table::clear() { +	for (uint32 i = 0; i < _used; i++) +		free(_data[i]); + +	_used = 0; +} + +FixedTable::FixedTable(uint32 size, uint32 fixed) : Table(size), _numFixed(fixed) { +} + +void FixedTable::clear() { +	for (uint32 i = _numFixed; i < _used; i++) { +		free(_data[i]); +		_used--; +	} +} + +Table* createTableFromStream(uint32 size, Common::SeekableReadStream &stream) { + +	Table *t = new Table(size); + +	fillBuffers(stream); +	while (scumm_stricmp(_tokens[0], "ENDTABLE")) { +		t->addData(_tokens[0]); +		fillBuffers(stream); +	} + +	return t; +} +  } // namespace Parallaction diff --git a/engines/parallaction/objects.h b/engines/parallaction/objects.h index b456a1960a..41e8bbcf5d 100644 --- a/engines/parallaction/objects.h +++ b/engines/parallaction/objects.h @@ -424,6 +424,40 @@ typedef Animation* AnimationPointer;  typedef ManagedList<AnimationPointer> AnimationList; +class Table { + +protected: +	char	**_data; +	uint16	_size; +	uint16	_used; +	bool	_disposeMemory; + +public: +	Table(uint32 size); +	Table(uint32 size, const char** data); + +	virtual ~Table(); + +	enum { +		notFound = 0 +	}; + +	virtual void addData(const char* s); +	virtual void clear(); +	virtual uint16 lookup(const char* s); +}; + +class FixedTable : public Table { + +	uint16	_numFixed; + +public: +	FixedTable(uint32 size, uint32 fixed); +	void clear(); +}; + +Table* createTableFromStream(uint32 size, Common::SeekableReadStream &stream); +  } // namespace Parallaction  #endif diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp index 9b2ac2a6a1..7b641bf838 100644 --- a/engines/parallaction/parallaction.cpp +++ b/engines/parallaction/parallaction.cpp @@ -752,62 +752,6 @@ void Parallaction::runJobs() {  } -Table::Table(uint32 size) : _size(size), _used(0), _disposeMemory(true) { -	_data = (char**)malloc(sizeof(char*)*size); -} - -Table::Table(uint32 size, const char **data) : _size(size), _used(size), _disposeMemory(false) { -	_data = const_cast<char**>(data); -} - -Table::~Table() { - -	if (!_disposeMemory) return; - -	clear(); - -	free(_data); - -} - -void Table::addData(const char* s) { - -	if (!(_used < _size)) -		error("Table overflow"); - -	_data[_used++] = strdup(s); - -} - -uint16 Table::lookup(const char* s) { - -	for (uint16 i = 0; i < _used; i++) { -		if (!scumm_stricmp(_data[i], s)) return i + 1; -	} - -	return notFound; -} - -void Table::clear() { -	for (uint32 i = 0; i < _used; i++) -		free(_data[i]); - -	_used = 0; -} - -FixedTable::FixedTable(uint32 size, uint32 fixed) : Table(size), _numFixed(fixed) { -} - -FixedTable::~FixedTable() { -	_numFixed = 0; -} - -void FixedTable::clear() { -	for (uint32 i = _numFixed; i < _used; i++) { -		free(_data[i]); -		_used--; -	} -}  void Parallaction::pushParserTables(OpcodeSet *opcodes, Table *statements) { diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h index 7c9c93a0bf..c0975d4c85 100644 --- a/engines/parallaction/parallaction.h +++ b/engines/parallaction/parallaction.h @@ -253,38 +253,7 @@ struct Character {  }; -class Table { -protected: -	char	**_data; -	uint16	_size; -	uint16	_used; -	bool	_disposeMemory; - -public: -	Table(uint32 size); -	Table(uint32 size, const char** data); - -	virtual ~Table(); - -	enum { -		notFound = 0 -	}; - -	virtual void addData(const char* s); -	virtual void clear(); -	virtual uint16 lookup(const char* s); -}; - -class FixedTable : public Table { - -	uint16	_numFixed; - -public: -	FixedTable(uint32 size, uint32 fixed); -	~FixedTable(); -	void clear(); -};  struct BackgroundInfo {  	uint width; | 
