X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1811af8709aa08b4d442f34b0f714cd78c5b9f26..4c420a80e0fb11511b235411875ba5d3e0eb8492:/src/common/imagiff.cpp diff --git a/src/common/imagiff.cpp b/src/common/imagiff.cpp index affbd43967..5a6dc5cced 100644 --- a/src/common/imagiff.cpp +++ b/src/common/imagiff.cpp @@ -10,9 +10,9 @@ // 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 wxWindows has been gratefully given. +// in wxWidgets has been gratefully given. -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "imagiff.h" #endif @@ -34,6 +34,10 @@ #include "wx/log.h" #include "wx/intl.h" +#if wxUSE_PALETTE + #include "wx/palette.h" +#endif // wxUSE_PALETTE + #include #include @@ -68,7 +72,7 @@ public: unsigned int w; /* width */ unsigned int h; /* height */ int transparent; /* transparent color (-1 = none) */ - int colors; /* number of colors */ + int colors; /* number of colors */ unsigned char *p; /* bitmap */ unsigned char *pal; /* palette */ @@ -79,8 +83,8 @@ public: class WXDLLEXPORT wxIFFDecoder { private: - IFFImage *m_image; // image data - wxInputStream *m_f; // input stream + IFFImage *m_image; // image data + wxInputStream *m_f; // input stream unsigned char *databuf; unsigned char *picptr; unsigned char *decomp_mem; @@ -142,7 +146,7 @@ bool wxIFFDecoder::ConvertToImage(wxImage *image) const image->Create(GetWidth(), GetHeight()); if (!image->Ok()) - return FALSE; + return false; unsigned char *pal = GetPalette(); unsigned char *src = GetData(); @@ -171,7 +175,7 @@ bool wxIFFDecoder::ConvertToImage(wxImage *image) const image->SetMaskColour(255, 0, 255); } else - image->SetMask(FALSE); + image->SetMask(false); #if wxUSE_PALETTE if (pal && colors > 0) @@ -203,7 +207,7 @@ bool wxIFFDecoder::ConvertToImage(wxImage *image) const dst[2] = src[2]; } - return TRUE; + return true; } @@ -226,22 +230,24 @@ int wxIFFDecoder::GetTransparentColour() const { return m_image->transparent; } // // CanRead: -// Returns TRUE if the file looks like a valid IFF, FALSE otherwise. +// Returns true if the file looks like a valid IFF, false otherwise. // 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; - return (memcmp(buf, "FORM", 4) == 0 && memcmp(buf+8, "ILBM", 4) == 0); + m_f->SeekI(-(off_t)WXSIZEOF(buf), wxFromCurrent); + + 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 @@ -378,7 +384,7 @@ int wxIFFDecoder::ReadIFF() // main decoding loop. searches IFF chunks and handles them. // terminates when BODY chunk was found or dataptr ran over end of file // - bool BMHDok = FALSE, CMAPok = FALSE, CAMGok = FALSE; + bool BMHDok = false, CMAPok = false, CAMGok = false; int bmhd_width = 0, bmhd_height = 0, bmhd_bitplanes = 0, bmhd_transcol = -1; byte bmhd_masking = 0, bmhd_compression = 0; long camg_viewmode = 0; @@ -394,7 +400,7 @@ int wxIFFDecoder::ReadIFF() #else if (chunkLen < 0) { // format error? #endif - break; + break; } bool truncated = (dataptr + 8 + chunkLen > dataend); @@ -408,7 +414,7 @@ int wxIFFDecoder::ReadIFF() bmhd_masking = *(dataptr + 8 + 9); bmhd_compression = *(dataptr + 8 + 10); // get compression bmhd_transcol = iff_getword(dataptr + 8 + 12); - BMHDok = TRUE; // got BMHD + BMHDok = true; // got BMHD dataptr += 8 + chunkLen; // to next chunk } else if (strncmp((char *)dataptr, "CMAP", 4) == 0) { // CMAP ? @@ -439,14 +445,14 @@ int wxIFFDecoder::ReadIFF() wxLogTrace(_T("iff"), _T("Read %d colors from IFF file."), colors); - CMAPok = TRUE; // got CMAP + CMAPok = true; // got CMAP dataptr += 8 + chunkLen; // to next chunk } else if (strncmp((char *)dataptr, "CAMG", 4) == 0) { // CAMG ? if (chunkLen < 4 || truncated) { break; } camg_viewmode = iff_getlong(dataptr + 8); // get viewmodes - CAMGok = TRUE; // got CAMG + CAMGok = true; // got CAMG dataptr += 8 + chunkLen; // to next chunk } else if (strncmp((char *)dataptr, "BODY", 4) == 0) { // BODY ? @@ -757,7 +763,7 @@ bool wxIFFHandler::LoadFile(wxImage *image, wxInputStream& stream, } } delete decod; - return FALSE; + return false; } if ((error == wxIFF_TRUNCATED) && verbose) @@ -778,19 +784,14 @@ bool wxIFFHandler::SaveFile(wxImage * WXUNUSED(image), if (verbose) wxLogDebug(wxT("IFF: the handler is read-only!!")); - return FALSE; + return false; } 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