Compilation fix

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13594 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2002-01-16 02:50:51 +00:00
parent db34b2d45d
commit c17e761dc3

View File

@@ -102,9 +102,9 @@ bool wxIFFDecoder::ConvertToImage(wxImage *image) const
#if wxUSE_PALETTE #if wxUSE_PALETTE
if (pal && colors > 0) if (pal && colors > 0)
{ {
unsigned char r[colors]; unsigned char* r = new unsigned char[colors];
unsigned char g[colors]; unsigned char* g = new unsigned char[colors];
unsigned char b[colors]; unsigned char* b = new unsigned char[colors];
for (i = 0; i < colors; i++) for (i = 0; i < colors; i++)
{ {
@@ -114,6 +114,10 @@ bool wxIFFDecoder::ConvertToImage(wxImage *image) const
} }
image->SetPalette(wxPalette(colors, r, g, b)); image->SetPalette(wxPalette(colors, r, g, b));
delete [] r;
delete [] g;
delete [] b;
} }
#endif // wxUSE_PALETTE #endif // wxUSE_PALETTE
@@ -170,10 +174,10 @@ typedef unsigned char byte;
/************************************************************************* /*************************************************************************
void decomprle(source, destination, source length, buffer size) void decomprle(source, destination, source length, buffer size)
Decompress run-length encoded data from source to destination. Terminates Decompress run-length encoded data from source to destination. Terminates
when source is decoded completely or destination buffer is full. when source is decoded completely or destination buffer is full.
The decruncher is as optimized as I could make it, without risking The decruncher is as optimized as I could make it, without risking
safety in case of corrupt BODY chunks. safety in case of corrupt BODY chunks.
**************************************************************************/ **************************************************************************/
@@ -181,11 +185,11 @@ typedef unsigned char byte;
static void decomprle(const byte *sptr, byte *dptr, long slen, long dlen) static void decomprle(const byte *sptr, byte *dptr, long slen, long dlen)
{ {
byte codeByte, dataByte; byte codeByte, dataByte;
while ((slen > 0) && (dlen > 0)) { while ((slen > 0) && (dlen > 0)) {
// read control byte // read control byte
codeByte = *sptr++; codeByte = *sptr++;
if (codeByte < 0x80) { if (codeByte < 0x80) {
codeByte++; codeByte++;
if ((slen > (long) codeByte) && (dlen >= (long) codeByte)) { if ((slen > (long) codeByte) && (dlen >= (long) codeByte)) {
@@ -296,9 +300,9 @@ int wxIFFDecoder::ReadIFF()
dataptr = dataptr + 4; // skip ID dataptr = dataptr + 4; // skip ID
// //
// main decoding loop. searches IFF chunks and handles them. // main decoding loop. searches IFF chunks and handles them.
// terminates when BODY chunk was found or dataptr ran over end of file // 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; int bmhd_width = 0, bmhd_height = 0, bmhd_bitplanes = 0, bmhd_transcol = -1;
@@ -307,7 +311,7 @@ int wxIFFDecoder::ReadIFF()
int colors = 0; int colors = 0;
while (dataptr + 8 <= dataend) { while (dataptr + 8 <= dataend) {
// get chunk length and make even // get chunk length and make even
size_t chunkLen = (iff_getlong(dataptr + 4) + 1) & 0xfffffffe; size_t chunkLen = (iff_getlong(dataptr + 4) + 1) & 0xfffffffe;
if (chunkLen < 0) { // format error? if (chunkLen < 0) { // format error?
break; break;
} }
@@ -332,7 +336,7 @@ int wxIFFDecoder::ReadIFF()
} }
const byte *cmapptr = dataptr + 8; const byte *cmapptr = dataptr + 8;
colors = chunkLen / 3; // calc no of colors colors = chunkLen / 3; // calc no of colors
delete m_image->pal; delete m_image->pal;
m_image->pal = 0; m_image->pal = 0;
m_image->colors = colors; m_image->colors = colors;
@@ -342,7 +346,7 @@ int wxIFFDecoder::ReadIFF()
Destroy(); Destroy();
return wxIFF_MEMERR; return wxIFF_MEMERR;
} }
// copy colors to color map // copy colors to color map
for (int i=0; i < colors; i++) { for (int i=0; i < colors; i++) {
m_image->pal[3*i + 0] = *cmapptr++; m_image->pal[3*i + 0] = *cmapptr++;
@@ -353,7 +357,7 @@ int wxIFFDecoder::ReadIFF()
wxLogTrace(_T("iff"), _T("Read %d colors from IFF file."), wxLogTrace(_T("iff"), _T("Read %d colors from IFF file."),
colors); colors);
CMAPok = true; // got CMAP CMAPok = true; // got CMAP
dataptr += 8 + chunkLen; // to next chunk dataptr += 8 + chunkLen; // to next chunk
} else if (strncmp((char *)dataptr, "CAMG", 4) == 0) { // CAMG ? } else if (strncmp((char *)dataptr, "CAMG", 4) == 0) { // CAMG ?
@@ -373,23 +377,23 @@ int wxIFFDecoder::ReadIFF()
if (truncated) { if (truncated) {
chunkLen = dataend - dataptr; chunkLen = dataend - dataptr;
} }
// //
// if BODY is compressed, allocate buffer for decrunched BODY // if BODY is compressed, allocate buffer for decrunched BODY
// and decompress it (run length encoding) // and decompress it (run length encoding)
// //
if (bmhd_compression == 1) { if (bmhd_compression == 1) {
// calc size of decrunch buffer - (size of the actual pic. // calc size of decrunch buffer - (size of the actual pic.
// decompressed in interleaved Amiga bitplane format) // decompressed in interleaved Amiga bitplane format)
size_t decomp_bufsize = (((bmhd_width + 15) >> 4) << 1) size_t decomp_bufsize = (((bmhd_width + 15) >> 4) << 1)
* bmhd_height * bmhd_bitplanes; * bmhd_height * bmhd_bitplanes;
if ((decomp_mem = new byte[decomp_bufsize]) == 0) { if ((decomp_mem = new byte[decomp_bufsize]) == 0) {
Destroy(); Destroy();
return wxIFF_MEMERR; return wxIFF_MEMERR;
} }
decomprle(bodyptr, decomp_mem, chunkLen, decomp_bufsize); decomprle(bodyptr, decomp_mem, chunkLen, decomp_bufsize);
bodyptr = decomp_mem; // -> uncompressed BODY bodyptr = decomp_mem; // -> uncompressed BODY
chunkLen = decomp_bufsize; chunkLen = decomp_bufsize;
@@ -399,7 +403,7 @@ int wxIFFDecoder::ReadIFF()
// the following determines the type of the ILBM file. // the following determines the type of the ILBM file.
// it's either NORMAL, EHB, HAM, HAM8 or 24BIT // it's either NORMAL, EHB, HAM, HAM8 or 24BIT
int fmt = ILBM_NORMAL; // assume normal ILBM int fmt = ILBM_NORMAL; // assume normal ILBM
if (bmhd_bitplanes == 24) { if (bmhd_bitplanes == 24) {
fmt = ILBM_24BIT; fmt = ILBM_24BIT;
@@ -415,18 +419,18 @@ int wxIFFDecoder::ReadIFF()
} }
} }
wxLogTrace(_T("iff"), wxLogTrace(_T("iff"),
_T("LoadIFF: %s %dx%d, planes=%d (%d cols), comp=%d"), _T("LoadIFF: %s %dx%d, planes=%d (%d cols), comp=%d"),
(fmt==ILBM_NORMAL) ? "Normal ILBM" : (fmt==ILBM_NORMAL) ? "Normal ILBM" :
(fmt==ILBM_HAM) ? "HAM ILBM" : (fmt==ILBM_HAM) ? "HAM ILBM" :
(fmt==ILBM_HAM8) ? "HAM8 ILBM" : (fmt==ILBM_HAM8) ? "HAM8 ILBM" :
(fmt==ILBM_EHB) ? "EHB ILBM" : (fmt==ILBM_EHB) ? "EHB ILBM" :
(fmt==ILBM_24BIT) ? "24BIT ILBM" : "unknown ILBM", (fmt==ILBM_24BIT) ? "24BIT ILBM" : "unknown ILBM",
bmhd_width, bmhd_height, bmhd_bitplanes, bmhd_width, bmhd_height, bmhd_bitplanes,
1<<bmhd_bitplanes, bmhd_compression); 1<<bmhd_bitplanes, bmhd_compression);
if ((fmt==ILBM_NORMAL) || (fmt==ILBM_EHB) || (fmt==ILBM_HAM)) { if ((fmt==ILBM_NORMAL) || (fmt==ILBM_EHB) || (fmt==ILBM_HAM)) {
wxLogTrace(_T("iff"), wxLogTrace(_T("iff"),
_T("Converting CMAP from normal ILBM CMAP")); _T("Converting CMAP from normal ILBM CMAP"));
switch(fmt) { switch(fmt) {
@@ -562,21 +566,21 @@ int wxIFFDecoder::ReadIFF()
} else if ((fmt == ILBM_NORMAL) || (fmt == ILBM_EHB)) { } else if ((fmt == ILBM_NORMAL) || (fmt == ILBM_EHB)) {
if (fmt == ILBM_EHB) { if (fmt == ILBM_EHB) {
wxLogTrace(_T("iff"), _T("Doubling CMAP for EHB mode")); wxLogTrace(_T("iff"), _T("Doubling CMAP for EHB mode"));
for (int i=0; i<32; i++) { for (int i=0; i<32; i++) {
pal[3*(i + 32) + 0] = pal[3*i + 0] >> 1; pal[3*(i + 32) + 0] = pal[3*i + 0] >> 1;
pal[3*(i + 32) + 1] = pal[3*i + 1] >> 1; pal[3*(i + 32) + 1] = pal[3*i + 1] >> 1;
pal[3*(i + 32) + 2] = pal[3*i + 2] >> 1; pal[3*(i + 32) + 2] = pal[3*i + 2] >> 1;
} }
} }
byte *pic = picptr; // ptr to buffer byte *pic = picptr; // ptr to buffer
const byte *workptr = bodyptr; // ptr to pic, planar format const byte *workptr = bodyptr; // ptr to pic, planar format
if (bmhd_height < height) { if (bmhd_height < height) {
height = bmhd_height; height = bmhd_height;
} }
for (int i=0; i < height; i++) { for (int i=0; i < height; i++) {
byte bitmsk = 0x80; // left most bit (mask) byte bitmsk = 0x80; // left most bit (mask)
const byte *workptr2 = workptr; // work ptr to source const byte *workptr2 = workptr; // work ptr to source
@@ -584,7 +588,7 @@ int wxIFFDecoder::ReadIFF()
long col = 0; long col = 0;
long colbit = 1; long colbit = 1;
const byte *workptr3 = workptr2; // 1st byte in 1st pln const byte *workptr3 = workptr2; // 1st byte in 1st pln
for (int k=0; k < bmhd_bitplanes; k++) { for (int k=0; k < bmhd_bitplanes; k++) {
if (*workptr3 & bitmsk) { // if bit set in this pln if (*workptr3 & bitmsk) { // if bit set in this pln
col = col + colbit; // add bit to chunky byte col = col + colbit; // add bit to chunky byte
@@ -592,7 +596,7 @@ int wxIFFDecoder::ReadIFF()
workptr3 += lineskip; // go to next line workptr3 += lineskip; // go to next line
colbit <<= 1; // shift color bit colbit <<= 1; // shift color bit
} }
if (col >= 0 && col < colors) { if (col >= 0 && col < colors) {
pic[0] = pal[3*col + 0]; pic[0] = pal[3*col + 0];
pic[1] = pal[3*col + 1]; pic[1] = pal[3*col + 1];
@@ -607,7 +611,7 @@ int wxIFFDecoder::ReadIFF()
workptr2++; // mv ptr to next byte workptr2++; // mv ptr to next byte
} }
} }
workptr += lineskip * bmhd_bitplanes; // to next line workptr += lineskip * bmhd_bitplanes; // to next line
} }
} else { } else {
@@ -617,7 +621,7 @@ int wxIFFDecoder::ReadIFF()
m_image->w = bmhd_width; m_image->w = bmhd_width;
m_image->h = height; m_image->h = height;
m_image->transparent = bmhd_transcol; m_image->transparent = bmhd_transcol;
wxLogTrace(_T("iff"), _T("Loaded IFF picture %s"), wxLogTrace(_T("iff"), _T("Loaded IFF picture %s"),
truncated? "truncated" : "completely"); truncated? "truncated" : "completely");