/////////////////////////////////////////////////////////////////////////////
// Name: imagiff.h
// Purpose: wxImage handler for Amiga IFF images
-// Author: Steffen Gutmann
+// Author: Steffen Gutmann, Thomas Meyer
// RCS-ID: $Id$
// Copyright: (c) Steffen Gutmann, 2002
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-// parts of the source are based on xviff by Thomas Meyer
-// Permission for use in wxWindows has been gratefully given.
+// Parts of this source are based on the iff loading algorithm found
+// in xviff.c. Permission by the original author, Thomas Meyer, and
+// by the author of xv, John Bradley for using the iff loading part
+// in wxWidgets has been gratefully given.
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "imagiff.h"
#endif
#include "wx/log.h"
#include "wx/intl.h"
+#if wxUSE_PALETTE
+ #include "wx/palette.h"
+#endif // wxUSE_PALETTE
+
#include <stdlib.h>
#include <string.h>
//
bool wxIFFDecoder::CanRead()
{
- unsigned char buf[12] = "";
+ unsigned char buf[12];
- m_f->Read(buf, 12);
- m_f->SeekI(-12, wxFromCurrent);
+ if ( !m_f->Read(buf, WXSIZEOF(buf)) )
+ return FALSE;
+
+ m_f->SeekI(-(off_t)WXSIZEOF(buf), wxFromCurrent);
- return (memcmp(buf, "FORM", 4) == 0 && memcmp(buf+8, "ILBM", 4) == 0);
+ return (memcmp(buf, "FORM", 4) == 0) && (memcmp(buf+8, "ILBM", 4) == 0);
}
// ReadIFF:
// Based on xv source code by Thomas Meyer
-// Permission for use in wxWindows has been gratefully given.
+// Permission for use in wxWidgets has been gratefully given.
typedef unsigned char byte;
#define IFFDEBUG 0
bool wxIFFHandler::DoCanRead(wxInputStream& stream)
{
- wxIFFDecoder *decod;
- bool ok;
+ wxIFFDecoder decod(&stream);
- decod = new wxIFFDecoder(&stream);
- ok = decod->CanRead();
- delete decod;
-
- return ok;
+ return decod.CanRead();
}
#endif // wxUSE_STREAMS