diff options
author | Max Horn | 2010-11-23 22:25:36 +0000 |
---|---|---|
committer | Max Horn | 2010-11-23 22:25:36 +0000 |
commit | 09ba53dcfb3acb4d4041c30ccde095e89e89517c (patch) | |
tree | decf9becca8504b85058b84221cdc0be23bd3260 /engines/scumm/file.cpp | |
parent | 54e0390752b299d739daaf211e6b84b485738ada (diff) | |
download | scummvm-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.cpp | 24 |
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 |