aboutsummaryrefslogtreecommitdiff
path: root/engines/zvision/utility
diff options
context:
space:
mode:
Diffstat (limited to 'engines/zvision/utility')
-rw-r--r--engines/zvision/utility/lzss_read_stream.cpp102
-rw-r--r--engines/zvision/utility/lzss_read_stream.h71
-rw-r--r--engines/zvision/utility/zfs_archive.cpp154
-rw-r--r--engines/zvision/utility/zfs_archive.h125
4 files changed, 0 insertions, 452 deletions
diff --git a/engines/zvision/utility/lzss_read_stream.cpp b/engines/zvision/utility/lzss_read_stream.cpp
deleted file mode 100644
index bbe6e35f76..0000000000
--- a/engines/zvision/utility/lzss_read_stream.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "common/scummsys.h"
-
-#include "zvision/utility/lzss_read_stream.h"
-
-namespace ZVision {
-
-LzssReadStream::LzssReadStream(Common::SeekableReadStream *source)
- : _source(source),
- // It's convention to set the starting cursor position to blockSize - 16
- _windowCursor(0x0FEE),
- _eosFlag(false) {
- // Clear the window to null
- memset(_window, 0, BLOCK_SIZE);
-}
-
-uint32 LzssReadStream::decompressBytes(byte *destination, uint32 numberOfBytes) {
- uint32 destinationCursor = 0;
-
- while (destinationCursor < numberOfBytes) {
- byte flagbyte = _source->readByte();
- if (_source->eos())
- break;
- uint mask = 1;
-
- for (int i = 0; i < 8; ++i) {
- if ((flagbyte & mask) == mask) {
- byte data = _source->readByte();
- if (_source->eos()) {
- return destinationCursor;
- }
-
- _window[_windowCursor] = data;
- destination[destinationCursor++] = data;
-
- // Increment and wrap the window cursor
- _windowCursor = (_windowCursor + 1) & 0xFFF;
- } else {
- byte low = _source->readByte();
- if (_source->eos()) {
- return destinationCursor;
- }
-
- byte high = _source->readByte();
- if (_source->eos()) {
- return destinationCursor;
- }
-
- uint16 length = (high & 0xF) + 2;
- uint16 offset = low | ((high & 0xF0) << 4);
-
- for (int j = 0; j <= length; ++j) {
- byte temp = _window[(offset + j) & 0xFFF];
- _window[_windowCursor] = temp;
- destination[destinationCursor++] = temp;
- _windowCursor = (_windowCursor + 1) & 0xFFF;
- }
- }
-
- mask = mask << 1;
- }
- }
-
- return destinationCursor;
-}
-
-bool LzssReadStream::eos() const {
- return _eosFlag;
-}
-
-uint32 LzssReadStream::read(void *dataPtr, uint32 dataSize) {
- uint32 bytesRead = decompressBytes(static_cast<byte *>(dataPtr), dataSize);
- if (bytesRead < dataSize) {
- // Flag that we're at EOS
- _eosFlag = true;
- }
-
- return dataSize;
-}
-
-} // End of namespace ZVision
diff --git a/engines/zvision/utility/lzss_read_stream.h b/engines/zvision/utility/lzss_read_stream.h
deleted file mode 100644
index 1420621f13..0000000000
--- a/engines/zvision/utility/lzss_read_stream.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef ZVISION_LZSS_STREAM_H
-#define ZVISION_LZSS_STREAM_H
-
-#include "common/stream.h"
-#include "common/array.h"
-
-namespace Common {
-class SeekableReadStream;
-}
-
-namespace ZVision {
-
-class LzssReadStream : public Common::ReadStream {
-public:
- /**
- * A class that decompresses LZSS data and implements ReadStream for easy access
- * to the decompiled data.
- *
- * @param source The source data
- */
- LzssReadStream(Common::SeekableReadStream *source);
-
-private:
- enum {
- BLOCK_SIZE = 0x1000
- };
-
-private:
- Common::SeekableReadStream *_source;
- byte _window[BLOCK_SIZE];
- uint _windowCursor;
- bool _eosFlag;
-
-public:
- bool eos() const;
- uint32 read(void *dataPtr, uint32 dataSize);
-
-private:
- /**
- * Decompress the next <numberOfBytes> from the source stream. Or until EOS
- *
- * @param numberOfBytes How many bytes to decompress. This is a count of source bytes, not destination bytes
- */
- uint32 decompressBytes(byte *destination, uint32 numberOfBytes);
-};
-
-}
-
-#endif
diff --git a/engines/zvision/utility/zfs_archive.cpp b/engines/zvision/utility/zfs_archive.cpp
deleted file mode 100644
index 13b0168e1c..0000000000
--- a/engines/zvision/utility/zfs_archive.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "common/scummsys.h"
-#include "common/memstream.h"
-#include "common/debug.h"
-#include "common/file.h"
-
-#include "zvision/utility/zfs_archive.h"
-
-namespace ZVision {
-
-ZfsArchive::ZfsArchive(const Common::String &fileName) : _fileName(fileName) {
- Common::File zfsFile;
-
- if (!zfsFile.open(_fileName)) {
- warning("ZFSArchive::ZFSArchive(): Could not find the archive file");
- return;
- }
-
- readHeaders(&zfsFile);
-
- debug(1, "ZfsArchive::ZfsArchive(%s): Located %d files", _fileName.c_str(), _entryHeaders.size());
-}
-
-ZfsArchive::ZfsArchive(const Common::String &fileName, Common::SeekableReadStream *stream) : _fileName(fileName) {
- readHeaders(stream);
-
- debug(1, "ZfsArchive::ZfsArchive(%s): Located %d files", _fileName.c_str(), _entryHeaders.size());
-}
-
-ZfsArchive::~ZfsArchive() {
- debug(1, "ZfsArchive Destructor Called");
- ZfsEntryHeaderMap::iterator it = _entryHeaders.begin();
- for (; it != _entryHeaders.end(); ++it) {
- delete it->_value;
- }
-}
-
-void ZfsArchive::readHeaders(Common::SeekableReadStream *stream) {
- // Don't do a straight struct cast since we can't guarantee endianness
- _header.magic = stream->readUint32LE();
- _header.unknown1 = stream->readUint32LE();
- _header.maxNameLength = stream->readUint32LE();
- _header.filesPerBlock = stream->readUint32LE();
- _header.fileCount = stream->readUint32LE();
- _header.xorKey[0] = stream->readByte();
- _header.xorKey[1] = stream->readByte();
- _header.xorKey[2] = stream->readByte();
- _header.xorKey[3] = stream->readByte();
- _header.fileSectionOffset = stream->readUint32LE();
-
- uint32 nextOffset;
-
- do {
- // Read the offset to the next block
- nextOffset = stream->readUint32LE();
-
- // Read in each entry header
- for (uint32 i = 0; i < _header.filesPerBlock; ++i) {
- ZfsEntryHeader entryHeader;
-
- entryHeader.name = readEntryName(stream);
- entryHeader.offset = stream->readUint32LE();
- entryHeader.id = stream->readUint32LE();
- entryHeader.size = stream->readUint32LE();
- entryHeader.time = stream->readUint32LE();
- entryHeader.unknown = stream->readUint32LE();
-
- if (entryHeader.size != 0)
- _entryHeaders[entryHeader.name] = new ZfsEntryHeader(entryHeader);
- }
-
- // Seek to the next block of headers
- stream->seek(nextOffset);
- } while (nextOffset != 0);
-}
-
-Common::String ZfsArchive::readEntryName(Common::SeekableReadStream *stream) const {
- // Entry Names are at most 16 bytes and are null padded
- char buffer[16];
- stream->read(buffer, 16);
-
- return Common::String(buffer);
-}
-
-bool ZfsArchive::hasFile(const Common::String &name) const {
- return _entryHeaders.contains(name);
-}
-
-int ZfsArchive::listMembers(Common::ArchiveMemberList &list) const {
- int matches = 0;
-
- for (ZfsEntryHeaderMap::const_iterator it = _entryHeaders.begin(); it != _entryHeaders.end(); ++it) {
- list.push_back(Common::ArchiveMemberList::value_type(new Common::GenericArchiveMember(it->_value->name, this)));
- matches++;
- }
-
- return matches;
-}
-
-const Common::ArchiveMemberPtr ZfsArchive::getMember(const Common::String &name) const {
- if (!_entryHeaders.contains(name))
- return Common::ArchiveMemberPtr();
-
- return Common::ArchiveMemberPtr(new Common::GenericArchiveMember(name, this));
-}
-
-Common::SeekableReadStream *ZfsArchive::createReadStreamForMember(const Common::String &name) const {
- if (!_entryHeaders.contains(name)) {
- return 0;
- }
-
- ZfsEntryHeader *entryHeader = _entryHeaders[name];
-
- Common::File zfsArchive;
- zfsArchive.open(_fileName);
- zfsArchive.seek(entryHeader->offset);
-
- // This *HAS* to be malloc (not new[]) because MemoryReadStream uses free() to free the memory
- byte *buffer = (byte *)malloc(entryHeader->size);
- zfsArchive.read(buffer, entryHeader->size);
- // Decrypt the data in place
- if (_header.xorKey != 0)
- unXor(buffer, entryHeader->size, _header.xorKey);
-
- return new Common::MemoryReadStream(buffer, entryHeader->size, DisposeAfterUse::YES);
-}
-
-void ZfsArchive::unXor(byte *buffer, uint32 length, const byte *xorKey) const {
- for (uint32 i = 0; i < length; ++i)
- buffer[i] ^= xorKey[i % 4];
-}
-
-} // End of namespace ZVision
diff --git a/engines/zvision/utility/zfs_archive.h b/engines/zvision/utility/zfs_archive.h
deleted file mode 100644
index 571591a6d1..0000000000
--- a/engines/zvision/utility/zfs_archive.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef ZVISION_ZFS_ARCHIVE_H
-#define ZVISION_ZFS_ARCHIVE_H
-
-#include "common/archive.h"
-#include "common/hashmap.h"
-#include "common/hash-str.h"
-
-namespace Common {
-class String;
-}
-
-namespace ZVision {
-
-struct ZfsHeader {
- uint32 magic;
- uint32 unknown1;
- uint32 maxNameLength;
- uint32 filesPerBlock;
- uint32 fileCount;
- byte xorKey[4];
- uint32 fileSectionOffset;
-};
-
-struct ZfsEntryHeader {
- Common::String name;
- uint32 offset;
- uint32 id;
- uint32 size;
- uint32 time;
- uint32 unknown;
-};
-
-typedef Common::HashMap<Common::String, ZfsEntryHeader *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> ZfsEntryHeaderMap;
-
-class ZfsArchive : public Common::Archive {
-public:
- ZfsArchive(const Common::String &fileName);
- ZfsArchive(const Common::String &fileName, Common::SeekableReadStream *stream);
- ~ZfsArchive();
-
- /**
- * Check if a member with the given name is present in the Archive.
- * Patterns are not allowed, as this is meant to be a quick File::exists()
- * replacement.
- */
- bool hasFile(const Common::String &fileName) const;
-
- /**
- * Add all members of the Archive to list.
- * Must only append to list, and not remove elements from it.
- *
- * @return The number of names added to list
- */
- int listMembers(Common::ArchiveMemberList &list) const;
-
- /**
- * Returns a ArchiveMember representation of the given file.
- */
- const Common::ArchiveMemberPtr getMember(const Common::String &name) const;
-
- /**
- * Create a stream bound to a member with the specified name in the
- * archive. If no member with this name exists, 0 is returned.
- *
- * @return The newly created input stream
- */
- Common::SeekableReadStream *createReadStreamForMember(const Common::String &name) const;
-
-private:
- const Common::String _fileName;
- ZfsHeader _header;
- ZfsEntryHeaderMap _entryHeaders;
-
- /**
- * Parses the zfs file into file entry headers that can be used later
- * to get the entry data.
- *
- * @param stream The contents of the zfs file
- */
- void readHeaders(Common::SeekableReadStream *stream);
-
- /**
- * Entry names are contained within a 16 byte block. This reads the block
- * and converts it the name to a Common::String
- *
- * @param stream The zfs file stream
- * @return The entry file name
- */
- Common::String readEntryName(Common::SeekableReadStream *stream) const;
-
- /**
- * ZFS file entries can be encrypted using XOR encoding. This method
- * decodes the buffer in place using the supplied xorKey.
- *
- * @param buffer The data to decode
- * @param length Length of buffer
- */
- void unXor(byte *buffer, uint32 length, const byte *xorKey) const;
-};
-
-} // End of namespace ZVision
-
-#endif