diff options
author | Nipun Garg | 2019-06-01 17:06:36 +0530 |
---|---|---|
committer | Eugene Sandulenko | 2019-09-03 17:16:42 +0200 |
commit | 6986e5495a1024bf478ac71fa1fc35718ac0d10e (patch) | |
tree | 839927284b95059411ea07083a2e6802c083adc8 /engines | |
parent | e38ac4a795b7776491181d0a6b6350465a939623 (diff) | |
download | scummvm-rg350-6986e5495a1024bf478ac71fa1fc35718ac0d10e.tar.gz scummvm-rg350-6986e5495a1024bf478ac71fa1fc35718ac0d10e.tar.bz2 scummvm-rg350-6986e5495a1024bf478ac71fa1fc35718ac0d10e.zip |
HDB: Refactor readStream() into findFirstData()
Diffstat (limited to 'engines')
-rw-r--r-- | engines/hdb/file-manager.cpp | 38 | ||||
-rw-r--r-- | engines/hdb/file-manager.h | 4 | ||||
-rw-r--r-- | engines/hdb/hdb.cpp | 9 |
3 files changed, 26 insertions, 25 deletions
diff --git a/engines/hdb/file-manager.cpp b/engines/hdb/file-manager.cpp index 72250a2251..9c0e7efe52 100644 --- a/engines/hdb/file-manager.cpp +++ b/engines/hdb/file-manager.cpp @@ -91,20 +91,36 @@ void FileMan::seek(int32 offset, int flag) { _mpcFile->seek(offset, flag); } -MPCEntry **FileMan::findFirstData(const char *string, DataType type) { +Common::SeekableReadStream *FileMan::findFirstData(const char *string, DataType type) { Common::String fileString; - + MPCEntry *file = NULL; + + // Find MPC Entry for (MPCIterator it = _dir.begin(); it != _dir.end(); it++) { fileString = (*it)->filename; if (fileString.contains(string)) { if ((*it)->type == type) { - return it; + file = *it; + break; } } } - return NULL; + + if (file == NULL) { + return NULL; + } + + // Load corresponding file into a buffer + _mpcFile->seek(file->offset); + byte *buffer = new byte[file->ulength]; + + _mpcFile->read(buffer, file->ulength); + + // Return buffer wrapped in a MemoryReadStream + return new Common::MemoryReadStream(buffer, file->ulength); } +/* MPCEntry **FileMan::findNextData(MPCIterator begin) { Common::String fileString; @@ -118,7 +134,7 @@ MPCEntry **FileMan::findNextData(MPCIterator begin) { } return NULL; } -/* + int FileMan::findAmount(char *string, DataType type) { int count = 0; @@ -131,16 +147,4 @@ int FileMan::findAmount(char *string, DataType type) { return count; }*/ -Common::SeekableReadStream *FileMan::readStream(uint32 length) { - byte *buffer = new byte[length]; - byte *origin = buffer; - - for (uint32 i = 0; i < length; i++) { - *buffer = _mpcFile->readByte(); - buffer++; - } - - return new Common::MemoryReadStream(origin, length); -} - } // End of Namespace HDB diff --git a/engines/hdb/file-manager.h b/engines/hdb/file-manager.h index 0394e60879..83f8889ee5 100644 --- a/engines/hdb/file-manager.h +++ b/engines/hdb/file-manager.h @@ -83,8 +83,8 @@ public: void loadData(char *string, uint32 *length); */ - MPCEntry **findFirstData(const char *string, DataType type); - MPCEntry **findNextData(MPCIterator it); + Common::SeekableReadStream *findFirstData(const char *string, DataType type); + //MPCEntry **findNextData(MPCIterator it); //int findAmount(char *string, DataType type); Common::SeekableReadStream *readStream(uint32 length); diff --git a/engines/hdb/hdb.cpp b/engines/hdb/hdb.cpp index 772307c530..78c555c2d9 100644 --- a/engines/hdb/hdb.cpp +++ b/engines/hdb/hdb.cpp @@ -111,15 +111,12 @@ Common::Error HDBGame::run() { _console = new Console(); - MPCEntry **titleMPC = fileMan->findFirstData("monkeylogoscreen", DataType::TYPE_PIC); - if (titleMPC == NULL) { + Common::SeekableReadStream *stream = fileMan->findFirstData("monkeylogoscreen", DataType::TYPE_PIC); + if (stream == NULL) { debug("The TitleScreen MPC entry can't be found."); return Common::kReadingFailed; } - MPCEntry *titleScreen = *titleMPC; - fileMan->seek(titleScreen->offset, SEEK_SET); - Common::SeekableReadStream *stream = fileMan->readStream(titleScreen->ulength); - + Picture *titlePic = new Picture; Graphics::Surface surf = titlePic->load(stream); |