aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/file.cpp
diff options
context:
space:
mode:
authorMax Horn2010-11-23 22:25:36 +0000
committerMax Horn2010-11-23 22:25:36 +0000
commit09ba53dcfb3acb4d4041c30ccde095e89e89517c (patch)
treedecf9becca8504b85058b84221cdc0be23bd3260 /engines/scumm/file.cpp
parent54e0390752b299d739daaf211e6b84b485738ada (diff)
downloadscummvm-rg350-09ba53dcfb3acb4d4041c30ccde095e89e89517c.tar.gz
scummvm-rg350-09ba53dcfb3acb4d4041c30ccde095e89e89517c.tar.bz2
scummvm-rg350-09ba53dcfb3acb4d4041c30ccde095e89e89517c.zip
SCUMM: Use explicit XOR decoding code in BaseScummFile subclasses
This made it possible to turn some MemoryReadStream pointers into plain SeekableReadStream pointers. svn-id: r54435
Diffstat (limited to 'engines/scumm/file.cpp')
-rw-r--r--engines/scumm/file.cpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/engines/scumm/file.cpp b/engines/scumm/file.cpp
index 95b99d22bd..20050e5d4c 100644
--- a/engines/scumm/file.cpp
+++ b/engines/scumm/file.cpp
@@ -27,6 +27,7 @@
#include "scumm/scumm.h"
+#include "common/memstream.h"
#include "common/substream.h"
namespace Scumm {
@@ -35,11 +36,7 @@ namespace Scumm {
#pragma mark --- ScummFile ---
#pragma mark -
-ScummFile::ScummFile() : _encbyte(0), _subFileStart(0), _subFileLen(0) {
-}
-
-void ScummFile::setEnc(byte value) {
- _encbyte = value;
+ScummFile::ScummFile() : _subFileStart(0), _subFileLen(0) {
}
void ScummFile::setSubfileRange(int32 start, int32 len) {
@@ -248,10 +245,6 @@ ScummDiskImage::ScummDiskImage(const char *disk1, const char *disk2, GameSetting
}
}
-void ScummDiskImage::setEnc(byte enc) {
- _stream->setEnc(enc);
-}
-
byte ScummDiskImage::fileReadByte() {
byte b = 0;
File::read(&b, 1);
@@ -499,4 +492,17 @@ bool ScummDiskImage::openSubFile(const Common::String &filename) {
return true;
}
+uint32 ScummDiskImage::read(void *dataPtr, uint32 dataSize) {
+ uint32 realLen = _stream->read(dataPtr, dataSize);
+
+ if (_encbyte) {
+ byte *p = (byte *)dataPtr;
+ byte *end = p + realLen;
+ while (p < end)
+ *p++ ^= _encbyte;
+ }
+
+ return realLen;
+}
+
} // End of namespace Scumm