diff options
author | Paul Gilbert | 2014-02-18 20:08:58 -0500 |
---|---|---|
committer | Paul Gilbert | 2014-02-18 20:08:58 -0500 |
commit | 0e46c809d10dcd8fd766d7adcb966785e7955f5b (patch) | |
tree | 817e0f1c0c6f4b5ab86f6703cc09fb839173f3f5 /engines/mads/compression.h | |
parent | ece3e9a2200052cc65f60e0295b674095d7a6a66 (diff) | |
download | scummvm-rg350-0e46c809d10dcd8fd766d7adcb966785e7955f5b.tar.gz scummvm-rg350-0e46c809d10dcd8fd766d7adcb966785e7955f5b.tar.bz2 scummvm-rg350-0e46c809d10dcd8fd766d7adcb966785e7955f5b.zip |
MADS: Initial implementation of MSurface class and dependant classes
Diffstat (limited to 'engines/mads/compression.h')
-rw-r--r-- | engines/mads/compression.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/engines/mads/compression.h b/engines/mads/compression.h new file mode 100644 index 0000000000..bf690dcc46 --- /dev/null +++ b/engines/mads/compression.h @@ -0,0 +1,80 @@ +/* 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 MADS_COMPRESSION_H +#define MADS_COMPRESSION_H + +#include "common/scummsys.h" +#include "common/endian.h" +#include "common/memstream.h" +#include "common/stream.h" + +#include "mads/mads.h" + +namespace MADS { + +struct MadsPackEntry { +public: + uint16 hash; + uint32 size; + uint32 compressedSize; + byte *data; +}; + +class MadsPack { +private: + MadsPackEntry *_items; + int _count; + int _dataOffset; + + void initialise(Common::SeekableReadStream *stream); +public: + static bool isCompressed(Common::SeekableReadStream *stream); + MadsPack(Common::SeekableReadStream *stream); + MadsPack(const Common::String &resourceName, MADSEngine *_vm); + ~MadsPack(); + + int getCount() const { return _count; } + MadsPackEntry &getItem(int index) const { return _items[index]; } + MadsPackEntry &operator[](int index) const { return _items[index]; } + Common::MemoryReadStream *getItemStream(int index) { + return new Common::MemoryReadStream(_items[index].data, _items[index].size, + DisposeAfterUse::NO); + } + int getDataOffset() const { return _dataOffset; } +}; + +class FabDecompressor { +private: + int _bitsLeft; + uint32 _bitBuffer; + const byte *_srcData, *_srcP; + int _srcSize; + + int getBit(); +public: + void decompress(const byte *srcData, int srcSize, byte *destData, int destSize); +}; + +} // End of namespace MADS + +#endif |