aboutsummaryrefslogtreecommitdiff
path: root/queen/resource.cpp
diff options
context:
space:
mode:
authorGregory Montoir2004-08-06 17:01:58 +0000
committerGregory Montoir2004-08-06 17:01:58 +0000
commit8b0e9502ec706cc82b05c216801ac0fd0a46d7fd (patch)
tree201a203c69f6285e8e91d4e00f3790721d5986ee /queen/resource.cpp
parenta7b610b25b5035962e5ee27610e49c1a5d2e5172 (diff)
downloadscummvm-rg350-8b0e9502ec706cc82b05c216801ac0fd0a46d7fd.tar.gz
scummvm-rg350-8b0e9502ec706cc82b05c216801ac0fd0a46d7fd.tar.bz2
scummvm-rg350-8b0e9502ec706cc82b05c216801ac0fd0a46d7fd.zip
cleanup and simplify Resource class a bit more
svn-id: r14488
Diffstat (limited to 'queen/resource.cpp')
-rw-r--r--queen/resource.cpp37
1 files changed, 21 insertions, 16 deletions
diff --git a/queen/resource.cpp b/queen/resource.cpp
index 45897e90be..64bef70f28 100644
--- a/queen/resource.cpp
+++ b/queen/resource.cpp
@@ -52,11 +52,11 @@ static int compareResourceEntry(const void *a, const void *b) {
return strcmp(filename, entry->filename);
}
-Resource::Resource(const Common::String &datafilePath)
- : _datafilePath(datafilePath), _resourceEntries(0), _resourceTable(NULL) {
+Resource::Resource()
+ : _resourceEntries(0), _resourceTable(NULL) {
_resourceFile = new File();
if (!findCompressedVersion() && !findNormalVersion())
- error("Could not open resource file '%s%s'", _datafilePath.c_str(), "queen.1");
+ error("Could not open resource file '%s'", "queen.1");
checkJASVersion();
debug(5, "Detected game version: %s, which has %d resource entries", _versionString, _resourceEntries);
}
@@ -98,26 +98,28 @@ ResourceEntry *Resource::resourceEntry(const char *filename) const {
return re;
}
-uint8 *Resource::loadFile(const char *filename, uint32 skipBytes, byte *dstBuf) {
+uint8 *Resource::loadFile(const char *filename, uint32 skipBytes, uint32 *size, bool useMalloc) {
ResourceEntry *re = resourceEntry(filename);
assert(re != NULL);
- uint32 size = re->size - skipBytes;
+ uint32 sz = re->size - skipBytes;
+ if (size != NULL) {
+ *size = sz;
+ }
+ byte *dstBuf;
#ifndef __PALM_OS__
- if (dstBuf == NULL)
- dstBuf = new byte[size];
+ if (useMalloc) {
+ dstBuf = (byte *)malloc(sz);
+ } else {
+ dstBuf = new byte[sz];
+ }
#else
- if (dstBuf == NULL)
- dstBuf = (byte *)calloc(size, sizeof(byte));
+ dstBuf = (byte *)calloc(sz, sizeof(byte));
#endif
_resourceFile->seek(re->offset + skipBytes);
- _resourceFile->read(dstBuf, size);
+ _resourceFile->read(dstBuf, sz);
return dstBuf;
}
-uint8 *Resource::loadFileMalloc(const char *filename, uint32 skipBytes, byte *dstBuf) {
- return loadFile(filename, skipBytes, (byte *)malloc(fileSize(filename) - skipBytes));
-}
-
bool Resource::findNormalVersion() {
_resourceFile->open("queen.1");
if (!_resourceFile->isOpen()) {
@@ -139,7 +141,7 @@ bool Resource::findNormalVersion() {
_resourceEntries = 1076;
_resourceTable = _resourceTablePEM10;
} else {
- error("Could not find tablefile '%s%s'", _datafilePath.c_str(), _tableFilename);
+ error("Could not find tablefile '%s'", _tableFilename);
}
}
return true;
@@ -239,10 +241,13 @@ const GameVersion *Resource::detectGameVersion(uint32 size) const {
return NULL;
}
-File *Resource::giveCompressedSound(const char *filename) {
+File *Resource::giveCompressedSound(const char *filename, uint32 *size) {
assert(strstr(filename, ".SB"));
ResourceEntry *re = resourceEntry(filename);
assert(re != NULL);
+ if (size != NULL) {
+ *size = re->size;
+ }
_resourceFile->seek(re->offset);
return _resourceFile;
}