aboutsummaryrefslogtreecommitdiff
path: root/graphics/iff.h
diff options
context:
space:
mode:
authorDavid Corrales2007-05-26 20:23:24 +0000
committerDavid Corrales2007-05-26 20:23:24 +0000
commit3646c968c9578c2a94d65ebd5fb06ec835f8c51d (patch)
tree8b57b339ebb31a1d7a67f1678aa5dc5c7759070a /graphics/iff.h
parentd1f56d93f934150f4b579c2e90564e2bf035f113 (diff)
parentac45c5b33d834acbc9718f89be76e49d403a4d2c (diff)
downloadscummvm-rg350-3646c968c9578c2a94d65ebd5fb06ec835f8c51d.tar.gz
scummvm-rg350-3646c968c9578c2a94d65ebd5fb06ec835f8c51d.tar.bz2
scummvm-rg350-3646c968c9578c2a94d65ebd5fb06ec835f8c51d.zip
Merged the fs branch with trunk. r26472:26948
svn-id: r26949
Diffstat (limited to 'graphics/iff.h')
-rw-r--r--graphics/iff.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/graphics/iff.h b/graphics/iff.h
new file mode 100644
index 0000000000..322c372592
--- /dev/null
+++ b/graphics/iff.h
@@ -0,0 +1,135 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2006 The ScummVM project
+ *
+ * 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.
+ *
+ * $URL$
+ * $Id$
+ */
+
+
+#ifndef GRAPHICS_IFF_H
+#define GRAPHICS_IFF_H
+
+#include "common/iff_container.h"
+
+namespace Graphics {
+
+struct Surface;
+
+
+struct BMHD {
+ uint16 width, height;
+ uint16 x, y;
+ byte depth;
+ byte masking;
+ byte pack;
+ byte flags;
+ uint16 transparentColor;
+ byte xAspect, yAspect;
+ uint16 pageWidth, pageHeight;
+
+ BMHD() {
+ memset(this, 0, sizeof(*this));
+ }
+};
+
+
+// handles ILBM subtype of IFF FORM files
+//
+class ILBMDecoder : public Common::IFFParser {
+
+protected:
+ void readBMHD(Common::IFFChunk &chunk);
+ void readCMAP(Common::IFFChunk &chunk);
+ void readBODY(Common::IFFChunk &chunk);
+
+ BMHD _bitmapHeader;
+ uint32 _colorCount;
+
+ Surface *_surface;
+ byte **_colors;
+
+ void fillPlane(byte *out, byte* buf, uint32 width, uint32 plane);
+
+public:
+ ILBMDecoder(Common::ReadStream &input, Surface &surface, byte *&colors);
+ virtual ~ILBMDecoder() { }
+ void decode();
+};
+
+
+// handles PBM subtype of IFF FORM files
+//
+class PBMDecoder : public Common::IFFParser {
+
+protected:
+ void readBMHD(Common::IFFChunk &chunk);
+ void readCMAP(Common::IFFChunk &chunk);
+ void readBODY(Common::IFFChunk &chunk);
+
+ BMHD _bitmapHeader;
+ uint32 _colorCount;
+
+ Surface *_surface;
+ byte **_colors;
+
+public:
+ PBMDecoder(Common::ReadStream &input, Surface &surface, byte *&colors);
+ virtual ~PBMDecoder() { }
+ void decode();
+};
+
+void decodePBM(Common::ReadStream &input, Surface &surface, byte *&colors);
+
+
+/*
+ PackBits is a RLE compression algorithm introduced
+ by Apple. It is also used to encode ILBM and PBM
+ subtypes of IFF files, and some flavours of TIFF.
+
+ The following implementation uses a static storage
+ and is buffered, that means you can't destroy the
+ input stream before you are done with it.
+*/
+class PackBitsReadStream : public Common::ReadStream {
+
+protected:
+ Common::ReadStream *_input;
+
+ byte _storage[257];
+ byte *_wStoragePos;
+ byte *_rStoragePos;
+
+ byte* _out;
+ byte* _outEnd;
+ int32 _fed;
+ int32 _unpacked;
+
+ void store(byte b);
+ void feed();
+ void unpack();
+
+public:
+ PackBitsReadStream(Common::ReadStream &input);
+ ~PackBitsReadStream();
+
+ virtual bool eos() const;
+ uint32 read(void *dataPtr, uint32 dataSize);
+};
+
+}
+
+#endif