aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorNipun Garg2019-06-01 17:06:36 +0530
committerEugene Sandulenko2019-09-03 17:16:42 +0200
commit6986e5495a1024bf478ac71fa1fc35718ac0d10e (patch)
tree839927284b95059411ea07083a2e6802c083adc8 /engines
parente38ac4a795b7776491181d0a6b6350465a939623 (diff)
downloadscummvm-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.cpp38
-rw-r--r--engines/hdb/file-manager.h4
-rw-r--r--engines/hdb/hdb.cpp9
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);