diff --git a/src/add-ons/translators/bmp/BMPTranslator.cpp b/src/add-ons/translators/bmp/BMPTranslator.cpp index c9264754e8..3bedbb0cdc 100644 --- a/src/add-ons/translators/bmp/BMPTranslator.cpp +++ b/src/add-ons/translators/bmp/BMPTranslator.cpp @@ -25,7 +25,7 @@ using std::min; #define ERROR(x) // The input formats that this translator supports. -translation_format gInputFormats[] = { +static const translation_format sInputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -45,7 +45,7 @@ translation_format gInputFormats[] = { }; // The output formats that this translator supports. -translation_format gOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -65,11 +65,16 @@ translation_format gOutputFormats[] = { }; // Default settings for the Translator -TranSetting gDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false} }; +const uint32 kNumInputFormats = sizeof(sInputFormats) / sizeof(translation_format); +const uint32 kNumOutputFormats = sizeof(sOutputFormats) / sizeof(translation_format); +const uint32 kNumDefaultSettings = sizeof(sDefaultSettings) / sizeof(TranSetting); + + // --------------------------------------------------------------- // make_nth_translator // @@ -118,10 +123,10 @@ make_nth_translator(int32 n, image_id you, uint32 flags, ...) BMPTranslator::BMPTranslator() : BaseTranslator("BMP images", "BMP image translator", BMP_TRANSLATOR_VERSION, - gInputFormats, sizeof(gInputFormats) / sizeof(translation_format), - gOutputFormats, sizeof(gOutputFormats) / sizeof(translation_format), + sInputFormats, kNumInputFormats, + sOutputFormats, kNumOutputFormats, "BMPTranslator_Settings", - gDefaultSettings, sizeof(gDefaultSettings) / sizeof(TranSetting), + sDefaultSettings, kNumDefaultSettings, B_TRANSLATOR_BITMAP, B_BMP_FORMAT) { } @@ -148,7 +153,7 @@ BMPTranslator::~BMPTranslator() // // Returns number of bytes of padding required at the end of // the row by the BMP format -// +// // // Preconditions: If bitsperpixel is zero, a division by zero // will occur, which is bad @@ -159,13 +164,13 @@ BMPTranslator::~BMPTranslator() // // Postconditions: // -// Returns: -// --------------------------------------------------------------- +// Returns: +// --------------------------------------------------------------- int32 get_padding(uint32 width, uint16 bitsperpixel) { int32 padding = 0; - + if (bitsperpixel > 8) { uint8 bytesPerPixel = bitsperpixel / 8; padding = (width * bytesPerPixel) % 4; @@ -178,10 +183,10 @@ get_padding(uint32 width, uint16 bitsperpixel) (width % pixelsPerByte)) / pixelsPerByte) % 4; } - + if (padding) padding = 4 - padding; - + return padding; } @@ -190,7 +195,7 @@ get_padding(uint32 width, uint16 bitsperpixel) // // Returns number of bytes required to store a row of BMP pixels // with a width of width and a bit depth of bitsperpixel. -// +// // // Preconditions: If bitsperpixel is zero, a division by zero // will occur, which is bad @@ -201,14 +206,14 @@ get_padding(uint32 width, uint16 bitsperpixel) // // Postconditions: // -// Returns: +// Returns: // --------------------------------------------------------------- int32 get_rowbytes(uint32 width, uint16 bitsperpixel) { int32 rowbytes = 0; int32 padding = get_padding(width, bitsperpixel); - + if (bitsperpixel > 8) { uint8 bytesPerPixel = bitsperpixel / 8; rowbytes = (width * bytesPerPixel) + padding; @@ -217,7 +222,7 @@ get_rowbytes(uint32 width, uint16 bitsperpixel) rowbytes = (width / pixelsPerByte) + ((width % pixelsPerByte) ? 1 : 0) + padding; } - + return rowbytes; } @@ -278,14 +283,14 @@ identify_bmp_header(BPositionIO *inSource, translator_info *outInfo, ssize_t size = 14; if (inSource->Read(buf, size) != size) return B_NO_TRANSLATOR; - + // check BMP magic number const uint16 kBmpMagic = B_HOST_TO_LENDIAN_INT16('MB'); uint16 sourceMagic; memcpy(&sourceMagic, buf, sizeof(uint16)); if (sourceMagic != kBmpMagic) return B_NO_TRANSLATOR; - + // convert fileHeader to host byte order memcpy(&fileHeader.magic, buf, 2); memcpy(&fileHeader.fileSize, buf + 2, 4); @@ -301,32 +306,32 @@ identify_bmp_header(BPositionIO *inSource, translator_info *outInfo, if (fileHeader.reserved != 0) return B_NO_TRANSLATOR; - + uint32 headersize = 0; if (inSource->Read(&headersize, 4) != 4) return B_NO_TRANSLATOR; if (swap_data(B_UINT32_TYPE, &headersize, 4, B_SWAP_LENDIAN_TO_HOST) != B_OK) return B_ERROR; - + if (headersize == sizeof(MSInfoHeader)) { // MS format - + if (fileHeader.dataOffset < 54) return B_NO_TRANSLATOR; - + MSInfoHeader msheader; msheader.size = headersize; if (inSource->Read( reinterpret_cast (&msheader) + 4, 36) != 36) return B_NO_TRANSLATOR; - + // convert msheader to host byte order if (swap_data(B_UINT32_TYPE, reinterpret_cast (&msheader) + 4, 36, B_SWAP_LENDIAN_TO_HOST) != B_OK) return B_ERROR; - + // check if msheader is valid if (msheader.width == 0 || msheader.height == 0) return B_NO_TRANSLATOR; @@ -350,8 +355,8 @@ identify_bmp_header(BPositionIO *inSource, translator_info *outInfo, if (!msheader.imagesize && msheader.compression) return B_NO_TRANSLATOR; if (msheader.colorsimportant > msheader.colorsused) - return B_NO_TRANSLATOR; - + return B_NO_TRANSLATOR; + if (outInfo) { outInfo->type = B_BMP_FORMAT; outInfo->group = B_TRANSLATOR_BITMAP; @@ -365,7 +370,7 @@ identify_bmp_header(BPositionIO *inSource, translator_info *outInfo, strcat(outInfo->name, ")"); strcpy(outInfo->MIME, "image/x-bmp"); } - + if (pfileheader) { pfileheader->magic = fileHeader.magic; pfileheader->fileSize = fileHeader.fileSize; @@ -389,7 +394,7 @@ identify_bmp_header(BPositionIO *inSource, translator_info *outInfo, } if (pfrommsformat) (*pfrommsformat) = true; - + return B_OK; } else if (headersize == sizeof(OS2InfoHeader)) { @@ -397,19 +402,19 @@ identify_bmp_header(BPositionIO *inSource, translator_info *outInfo, if (fileHeader.dataOffset < 26) return B_NO_TRANSLATOR; - + OS2InfoHeader os2header; os2header.size = headersize; if (inSource->Read( reinterpret_cast (&os2header) + 4, 8) != 8) return B_NO_TRANSLATOR; - + // convert msheader to host byte order if (swap_data(B_UINT32_TYPE, reinterpret_cast (&os2header) + 4, 8, B_SWAP_LENDIAN_TO_HOST) != B_OK) return B_ERROR; - + // check if msheader is valid if (os2header.width == 0 || os2header.height == 0) return B_NO_TRANSLATOR; @@ -420,7 +425,7 @@ identify_bmp_header(BPositionIO *inSource, translator_info *outInfo, os2header.bitsperpixel != 8 && os2header.bitsperpixel != 24) return B_NO_TRANSLATOR; - + if (outInfo) { outInfo->type = B_BMP_FORMAT; outInfo->group = B_TRANSLATOR_BITMAP; @@ -447,21 +452,21 @@ identify_bmp_header(BPositionIO *inSource, translator_info *outInfo, pmsheader->ypixperm = 2835; // 72 dpi vertical pmsheader->colorsused = 0; pmsheader->colorsimportant = 0; - + // determine fileSize / imagesize switch (pmsheader->bitsperpixel) { case 24: if (pos2skip && fileHeader.dataOffset > 26) (*pos2skip) = fileHeader.dataOffset - 26; - + pfileheader->dataOffset = 54; pmsheader->imagesize = get_rowbytes(pmsheader->width, pmsheader->bitsperpixel) * pmsheader->height; pfileheader->fileSize = pfileheader->dataOffset + pmsheader->imagesize; - + break; - + case 8: case 4: case 1: @@ -479,17 +484,17 @@ identify_bmp_header(BPositionIO *inSource, translator_info *outInfo, pmsheader->bitsperpixel) * pmsheader->height; pfileheader->fileSize = pfileheader->dataOffset + pmsheader->imagesize; - + break; } - + default: break; } } if (pfrommsformat) (*pfrommsformat) = false; - + return B_OK; } else @@ -583,13 +588,13 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) case B_CMYK32: bitsBytesPerPixel = 4; break; - + case B_RGB24: case B_RGB24_BIG: case B_CMY24: bitsBytesPerPixel = 3; break; - + case B_RGB16: case B_RGB16_BIG: case B_RGBA15: @@ -598,12 +603,12 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) case B_RGB15_BIG: bitsBytesPerPixel = 2; break; - + case B_CMAP8: case B_GRAY8: bitsBytesPerPixel = 1; break; - + default: return B_ERROR; } @@ -634,7 +639,7 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) } } while (rd == static_cast(bitsRowBytes)) { - + for (uint32 i = 0; i < msheader.width; i++) { uint8 *bitspixel, *bmppixel; uint16 val; @@ -645,7 +650,7 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) memcpy(bmpRowData + (i * 3), bitsRowData + (i * bitsBytesPerPixel), 3); break; - + case B_RGB16: case B_RGB16_BIG: bitspixel = bitsRowData + (i * bitsBytesPerPixel); @@ -673,14 +678,14 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) val = bitspixel[0] + (bitspixel[1] << 8); else val = bitspixel[1] + (bitspixel[0] << 8); - bmppixel[0] = + bmppixel[0] = ((val & 0x1f) << 3) | ((val & 0x1f) >> 2); bmppixel[1] = ((val & 0x3e0) >> 2) | ((val & 0x3e0) >> 7); bmppixel[2] = ((val & 0x7c00) >> 7) | ((val & 0x7c00) >> 12); break; - + case B_RGB32_BIG: case B_RGBA32_BIG: bitspixel = bitsRowData + (i * bitsBytesPerPixel); @@ -689,7 +694,7 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) bmppixel[1] = bitspixel[2]; bmppixel[2] = bitspixel[1]; break; - + case B_RGB24_BIG: bitspixel = bitsRowData + (i * bitsBytesPerPixel); bmppixel = bmpRowData + (i * 3); @@ -697,7 +702,7 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) bmppixel[1] = bitspixel[1]; bmppixel[2] = bitspixel[0]; break; - + case B_CMAP8: { bitspixel = bitsRowData + (i * bitsBytesPerPixel); @@ -708,7 +713,7 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) bmppixel[2] = c.red; break; } - + case B_GRAY8: bitspixel = bitsRowData + (i * bitsBytesPerPixel); bmppixel = bmpRowData + (i * 3); @@ -716,23 +721,23 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) bmppixel[1] = bitspixel[0]; bmppixel[2] = bitspixel[0]; break; - + case B_CMYK32: { bitspixel = bitsRowData + (i * bitsBytesPerPixel); bmppixel = bmpRowData + (i * 3); - + int32 comp = 255 - bitspixel[2] - bitspixel[3]; bmppixel[0] = (comp < 0) ? 0 : comp; - + comp = 255 - bitspixel[1] - bitspixel[3]; bmppixel[1] = (comp < 0) ? 0 : comp; - + comp = 255 - bitspixel[0] - bitspixel[3]; bmppixel[2] = (comp < 0) ? 0 : comp; break; } - + case B_CMY32: case B_CMYA32: case B_CMY24: @@ -742,16 +747,16 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) bmppixel[1] = 255 - bitspixel[1]; bmppixel[2] = 255 - bitspixel[0]; break; - + default: break; } // switch (fromspace) } // for for (uint32 i = 0; i < msheader.width; i++) - + outDestination->Write(bmpRowData, bmpRowBytes); bmppixrow++; // if I've read all of the pixel data, break - // out of the loop so I don't try to read + // out of the loop so I don't try to read // non-pixel data if (bmppixrow == msheader.height) break; @@ -759,7 +764,7 @@ BPositionIO *outDestination, color_space fromspace, MSInfoHeader &msheader) inSource->Seek(bitsRowBytes * -2, SEEK_CUR); rd = inSource->Read(bitsRowData, bitsRowBytes); } // while (rd == bitsRowBytes) - + delete[] bmpRowData; delete[] bitsRowData; @@ -815,7 +820,7 @@ translate_from_bits8_to_bmp8(BPositionIO *inSource, outDestination->Write(bmpRowData, bmpRowBytes); bmppixrow++; // if I've read all of the pixel data, break - // out of the loop so I don't try to read + // out of the loop so I don't try to read // non-pixel data if (bmppixrow == msheader.height) break; @@ -823,7 +828,7 @@ translate_from_bits8_to_bmp8(BPositionIO *inSource, inSource->Seek(bitsRowBytes * -2, SEEK_CUR); rd = inSource->Read(bitsRowData, bitsRowBytes); } // while (rd == bitsRowBytes) - + delete[] bmpRowData; delete[] bitsRowData; @@ -876,7 +881,7 @@ translate_from_bits1_to_bmp1(BPositionIO *inSource, while (rd == bitsRowBytes) { uint32 bmppixcol = 0; memset(bmpRowData, 0, bmpRowBytes); - for (int32 i = 0; (bmppixcol < msheader.width) && + for (int32 i = 0; (bmppixcol < msheader.width) && (i < bitsRowBytes); i++) { // process each byte in the row uint8 pixels = bitsRowData[i]; @@ -891,16 +896,16 @@ translate_from_bits1_to_bmp1(BPositionIO *inSource, else // 0 == white index = 0; - bmpRowData[bmppixcol / pixelsPerByte] |= + bmpRowData[bmppixcol / pixelsPerByte] |= index << (7 - (bmppixcol % pixelsPerByte)); bmppixcol++; } } - + outDestination->Write(bmpRowData, bmpRowBytes); bmppixrow++; // if I've read all of the pixel data, break - // out of the loop so I don't try to read + // out of the loop so I don't try to read // non-pixel data if (bmppixrow == msheader.height) break; @@ -908,7 +913,7 @@ translate_from_bits1_to_bmp1(BPositionIO *inSource, inSource->Seek(bitsRowBytes * -2, SEEK_CUR); rd = inSource->Read(bitsRowData, bitsRowBytes); } // while (rd == bitsRowBytes) - + delete[] bmpRowData; delete[] bitsRowData; @@ -956,7 +961,7 @@ write_bmp_headers(BPositionIO *outDestination, BMPFileHeader &fileHeader, return B_ERROR; if (outDestination->Write(bmpheaders, 54) != 54) return B_ERROR; - + return B_OK; } @@ -996,26 +1001,26 @@ BMPTranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, result = identify_bits_header(inSource, NULL, &bitsHeader); if (result != B_OK) return result; - + // Translate B_TRANSLATOR_BITMAP to B_BMP_FORMAT if (outType == B_BMP_FORMAT) { // Set up BMP header BMPFileHeader fileHeader; fileHeader.magic = 'MB'; fileHeader.reserved = 0; - + MSInfoHeader msheader; msheader.size = 40; - msheader.width = + msheader.width = static_cast (bitsHeader.bounds.Width() + 1); - msheader.height = + msheader.height = static_cast (bitsHeader.bounds.Height() + 1); msheader.planes = 1; msheader.xpixperm = 2835; // 72 dpi horizontal msheader.ypixperm = 2835; // 72 dpi vertical msheader.colorsused = 0; msheader.colorsimportant = 0; - + // determine fileSize / imagesize switch (bitsHeader.colors) { case B_RGB32: @@ -1034,7 +1039,7 @@ BMPTranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, case B_CMY32: case B_CMYA32: case B_CMY24: - + fileHeader.dataOffset = 54; msheader.bitsperpixel = 24; msheader.compression = BMP_NO_COMPRESS; @@ -1042,12 +1047,12 @@ BMPTranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, msheader.height; fileHeader.fileSize = fileHeader.dataOffset + msheader.imagesize; - + break; - + case B_CMAP8: case B_GRAY8: - + msheader.colorsused = 256; msheader.colorsimportant = 256; fileHeader.dataOffset = 54 + (4 * 256); @@ -1057,11 +1062,11 @@ BMPTranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, msheader.bitsperpixel) * msheader.height; fileHeader.fileSize = fileHeader.dataOffset + msheader.imagesize; - + break; - + case B_GRAY1: - + msheader.colorsused = 2; msheader.colorsimportant = 2; fileHeader.dataOffset = 62; @@ -1071,13 +1076,13 @@ BMPTranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, msheader.bitsperpixel) * msheader.height; fileHeader.fileSize = fileHeader.dataOffset + msheader.imagesize; - + break; - + default: return B_NO_TRANSLATOR; } - + // write out the BMP headers if (bheaderonly || (!bheaderonly && !bdataonly)) { result = write_bmp_headers(outDestination, fileHeader, msheader); @@ -1109,7 +1114,7 @@ BMPTranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, case B_CMY24: return translate_from_bits_to_bmp24(inSource, outDestination, bitsHeader.colors, msheader); - + case B_CMAP8: case B_GRAY8: { @@ -1138,7 +1143,7 @@ BMPTranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, palHandle[3] = 255; palHandle += 4; } - } + } ssize_t written = outDestination->Write(pal, 1024); if (written < 0) return written; @@ -1148,7 +1153,7 @@ BMPTranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, return translate_from_bits8_to_bmp8(inSource, outDestination, bitsHeader.rowBytes, msheader); } - + case B_GRAY1: { // write monochrome palette to the BMP file @@ -1158,11 +1163,11 @@ BMPTranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, return written; if (written != 8) return B_ERROR; - + return translate_from_bits1_to_bmp1(inSource, outDestination, bitsHeader.rowBytes, msheader); } - + default: return B_NO_TRANSLATOR; } @@ -1202,7 +1207,7 @@ translate_from_bmpnpal_to_bits(BPositionIO *inSource, // Setup outDestination so that it can be written to // from the end of the file to the beginning instead of // the other way around - off_t bitsFileSize = (bitsRowBytes * msheader.height) + + off_t bitsFileSize = (bitsRowBytes * msheader.height) + sizeof(TranslatorBitmap); if (outDestination->SetSize(bitsFileSize) != B_OK) { // This call should work for BFile and BMallocIO objects, @@ -1212,7 +1217,7 @@ translate_from_bmpnpal_to_bits(BPositionIO *inSource, } off_t bitsoffset = (msheader.height - 1) * bitsRowBytes; outDestination->Seek(bitsoffset, SEEK_CUR); - + // allocate row buffers uint8 *bmpRowData = new (nothrow) uint8[bmpRowBytes]; if (!bmpRowData) @@ -1269,7 +1274,7 @@ translate_from_bmpnpal_to_bits(BPositionIO *inSource, break; } } - + delete[] bmpRowData; delete[] bitsRowData; @@ -1279,7 +1284,7 @@ translate_from_bmpnpal_to_bits(BPositionIO *inSource, // --------------------------------------------------------------- // translate_from_bmppal_to_bits // -// Translates an uncompressed, palette BMP from inSource to +// Translates an uncompressed, palette BMP from inSource to // the B_RGB32 bits format. // // Preconditions: @@ -1313,19 +1318,19 @@ translate_from_bmppal_to_bits(BPositionIO *inSource, palBytesPerPixel = 4; else palBytesPerPixel = 3; - + uint8 mask = 1; mask = (mask << bitsPerPixel) - 1; int32 bmpRowBytes = get_rowbytes(msheader.width, msheader.bitsperpixel); uint32 bmppixrow = 0; - + // Setup outDestination so that it can be written to // from the end of the file to the beginning instead of // the other way around int32 bitsRowBytes = msheader.width * 4; - off_t bitsFileSize = (bitsRowBytes * msheader.height) + + off_t bitsFileSize = (bitsRowBytes * msheader.height) + sizeof(TranslatorBitmap); if (outDestination->SetSize(bitsFileSize) != B_OK) // This call should work for BFile and BMallocIO objects, @@ -1350,16 +1355,16 @@ translate_from_bmppal_to_bits(BPositionIO *inSource, uint8 indices = (bmpRowData + (i / pixelsPerByte))[0]; uint8 index; index = (indices >> - (bitsPerPixel * ((pixelsPerByte - 1) - + (bitsPerPixel * ((pixelsPerByte - 1) - (i % pixelsPerByte)))) & mask; memcpy(bitsRowData + (i * 4), palette + (index * palBytesPerPixel), 3); } - + outDestination->Write(bitsRowData, bitsRowBytes); bmppixrow++; // if I've read all of the pixel data, break - // out of the loop so I don't try to read + // out of the loop so I don't try to read // non-pixel data if (bmppixrow == msheader.height) break; @@ -1367,7 +1372,7 @@ translate_from_bmppal_to_bits(BPositionIO *inSource, outDestination->Seek(bitsRowBytes * -2, SEEK_CUR); rd = inSource->Read(bmpRowData, bmpRowBytes); } - + delete[] bmpRowData; delete[] bitsRowData; @@ -1406,10 +1411,10 @@ pixelcpy(uint8 *dest, uint32 pixel, uint32 count) // --------------------------------------------------------------- // translate_from_bmppalr_to_bits // -// Translates an RLE compressed, palette BMP from inSource to +// Translates an RLE compressed, palette BMP from inSource to // the B_RGB32 bits format. Currently, this code is not as // memory effcient as it could be. It assumes that the BMP -// from inSource is relatively small. +// from inSource is relatively small. // // Preconditions: // @@ -1443,7 +1448,7 @@ translate_from_bmppalr_to_bits(BPositionIO *inSource, // from the end of the file to the beginning instead of // the other way around int32 bitsRowBytes = msheader.width * 4; - off_t bitsFileSize = (bitsRowBytes * msheader.height) + + off_t bitsFileSize = (bitsRowBytes * msheader.height) + sizeof(TranslatorBitmap); if (outDestination->SetSize(bitsFileSize) != B_OK) // This call should work for BFile and BMallocIO objects, @@ -1470,19 +1475,19 @@ translate_from_bmppalr_to_bits(BPositionIO *inSource, break; } // if count is greater than the number of - // pixels remaining in the current row, + // pixels remaining in the current row, // only process the correct number of pixels // remaining in the row if (count + bmppixcol > msheader.width) count = msheader.width - bmppixcol; - + rd = inSource->Read(&indices, 1); if (rd != 1) { rd = -1; break; } for (uint8 i = 0; i < count; i++) { - index = (indices >> (bitsPerPixel * ((pixelsPerByte - 1) - + index = (indices >> (bitsPerPixel * ((pixelsPerByte - 1) - (i % pixelsPerByte)))) & mask; memcpy(bitsRowData + (bmppixcol*4), palette + (index*4), 3); bmppixcol++; @@ -1509,8 +1514,8 @@ translate_from_bmppalr_to_bits(BPositionIO *inSource, if (bmppixrow < msheader.height) outDestination->Seek(bitsRowBytes * -2, SEEK_CUR); break; - - // end of bitmap + + // end of bitmap case 1: // if at the end of a row if (bmppixcol == msheader.width) { @@ -1520,7 +1525,7 @@ translate_from_bmppalr_to_bits(BPositionIO *inSource, if (bmppixrow < msheader.height) outDestination->Seek(bitsRowBytes * -2, SEEK_CUR); } - + while (bmppixrow < msheader.height) { pixelcpy(bitsRowData + (bmppixcol * 4), defaultcolor, msheader.width - bmppixcol); @@ -1533,9 +1538,9 @@ translate_from_bmppalr_to_bits(BPositionIO *inSource, rd = 0; // break out of while loop break; - + // delta, skip several rows and/or columns and - // fill the skipped pixels with the default color + // fill the skipped pixels with the default color case 2: { uint8 da[2], lastcol, dx, dy; @@ -1546,16 +1551,16 @@ translate_from_bmppalr_to_bits(BPositionIO *inSource, } dx = da[0]; dy = da[1]; - + // abort if dx or dy is too large if ((dx + bmppixcol >= msheader.width) || (dy + bmppixrow >= msheader.height)) { rd = -1; break; - } - + } + lastcol = bmppixcol; - + // set all pixels to the first entry in // the palette, for the number of rows skipped while (dy > 0) { @@ -1567,13 +1572,13 @@ translate_from_bmppalr_to_bits(BPositionIO *inSource, dy--; outDestination->Seek(bitsRowBytes * -2, SEEK_CUR); } - + if (bmppixcol < static_cast(lastcol + dx)) { pixelcpy(bitsRowData + (bmppixcol * 4), defaultcolor, dx + lastcol - bmppixcol); bmppixcol = dx + lastcol; } - + break; } @@ -1587,20 +1592,20 @@ translate_from_bmppalr_to_bits(BPositionIO *inSource, break; } // if code is greater than the number of - // pixels remaining in the current row, + // pixels remaining in the current row, // only process the correct number of pixels // remaining in the row if (code + bmppixcol > msheader.width) code = msheader.width - bmppixcol; - + uint8 uncomp[256]; int32 padding; if (!(code % pixelsPerByte)) padding = (code / pixelsPerByte) % 2; else - padding = ((code + pixelsPerByte - + padding = ((code + pixelsPerByte - (code % pixelsPerByte)) / pixelsPerByte) % 2; - int32 uncompBytes = (code / pixelsPerByte) + + int32 uncompBytes = (code / pixelsPerByte) + ((code % pixelsPerByte) ? 1 : 0) + padding; rd = inSource->Read(uncomp, uncompBytes); if (rd != uncompBytes) { @@ -1610,7 +1615,7 @@ translate_from_bmppalr_to_bits(BPositionIO *inSource, for (uint8 i = 0; i < code; i++) { indices = (uncomp + (i / pixelsPerByte))[0]; index = (indices >> - (bitsPerPixel * ((pixelsPerByte - 1) - + (bitsPerPixel * ((pixelsPerByte - 1) - (i % pixelsPerByte)))) & mask; memcpy(bitsRowData + (bmppixcol * 4), palette + (index * 4), 3); @@ -1623,9 +1628,9 @@ translate_from_bmppalr_to_bits(BPositionIO *inSource, if (rd > 0) rd = inSource->Read(&count, 1); } - + delete[] bitsRowData; - + if (!rd) return B_OK; else @@ -1675,8 +1680,8 @@ BMPTranslator::translate_from_bmp(BPositionIO *inSource, uint32 outType, INFO("BMPTranslator::translate_from_bmp() - identify_bmp_header failed\n"); return result; } - - // if the user wants to translate a BMP to a BMP, easy enough :) + + // if the user wants to translate a BMP to a BMP, easy enough :) if (outType == B_BMP_FORMAT) { // write out the BMP headers if (bheaderonly || (!bheaderonly && !bdataonly)) { @@ -1685,14 +1690,14 @@ BMPTranslator::translate_from_bmp(BPositionIO *inSource, uint32 outType, return result; } if (bheaderonly) - // if the user only wants the header, + // if the user only wants the header, // bail before it is written return result; - + uint8 buf[1024]; ssize_t rd; uint32 rdtotal = 54; - if (!frommsformat && (msheader.bitsperpixel == 1 || + if (!frommsformat && (msheader.bitsperpixel == 1 || msheader.bitsperpixel == 4 || msheader.bitsperpixel == 8)) { // if OS/2 paletted format, convert palette to MS format uint16 ncolors = 1 << msheader.bitsperpixel; @@ -1723,7 +1728,7 @@ BMPTranslator::translate_from_bmp(BPositionIO *inSource, uint32 outType, return B_OK; else return B_ERROR; - + // if translating a BMP to a Be Bitmap } else if (outType == B_TRANSLATOR_BITMAP) { TranslatorBitmap bitsHeader; @@ -1732,31 +1737,31 @@ BMPTranslator::translate_from_bmp(BPositionIO *inSource, uint32 outType, bitsHeader.bounds.top = 0; bitsHeader.bounds.right = msheader.width - 1; bitsHeader.bounds.bottom = msheader.height - 1; - - // read in palette and/or skip non-BMP data + + // read in palette and/or skip non-BMP data uint8 bmppalette[1024]; off_t nskip = 0; if (msheader.bitsperpixel == 1 || msheader.bitsperpixel == 4 || msheader.bitsperpixel == 8) { - + uint8 palBytesPerPixel; if (frommsformat) palBytesPerPixel = 4; else palBytesPerPixel = 3; - + if (!msheader.colorsused) msheader.colorsused = 1 << msheader.bitsperpixel; - + if (inSource->Read(bmppalette, msheader.colorsused * palBytesPerPixel) != (off_t) msheader.colorsused * palBytesPerPixel) return B_NO_TRANSLATOR; - + // skip over non-BMP data if (frommsformat) { - if (fileHeader.dataOffset > (msheader.colorsused * + if (fileHeader.dataOffset > (msheader.colorsused * palBytesPerPixel) + 54) nskip = fileHeader.dataOffset - ((msheader.colorsused * palBytesPerPixel) + 54); @@ -1765,7 +1770,7 @@ BMPTranslator::translate_from_bmp(BPositionIO *inSource, uint32 outType, } else if (fileHeader.dataOffset > 54) // skip over non-BMP data nskip = fileHeader.dataOffset - 54; - + if (nskip > 0 && inSource->Seek(nskip, SEEK_CUR) < 0) return B_NO_TRANSLATOR; @@ -1773,7 +1778,7 @@ BMPTranslator::translate_from_bmp(BPositionIO *inSource, uint32 outType, bitsHeader.colors = B_RGB32; int32 datasize = bitsHeader.rowBytes * msheader.height; bitsHeader.dataSize = datasize; - + // write out Be's Bitmap header if (bheaderonly || (!bheaderonly && !bdataonly)) { if (swap_data(B_UINT32_TYPE, &bitsHeader, @@ -1782,17 +1787,17 @@ BMPTranslator::translate_from_bmp(BPositionIO *inSource, uint32 outType, outDestination->Write(&bitsHeader, sizeof(TranslatorBitmap)); } if (bheaderonly) - // if the user only wants the header, + // if the user only wants the header, // bail before the data is written return B_OK; - + // write out the actual image data switch (msheader.bitsperpixel) { case 32: case 24: return translate_from_bmpnpal_to_bits(inSource, outDestination, msheader); - + case 8: // 8 bit BMP with NO compression if (msheader.compression == BMP_NO_COMPRESS) @@ -1805,10 +1810,10 @@ BMPTranslator::translate_from_bmp(BPositionIO *inSource, uint32 outType, outDestination, datasize, msheader, bmppalette); else return B_NO_TRANSLATOR; - + case 4: // 4 bit BMP with NO compression - if (!msheader.compression) + if (!msheader.compression) return translate_from_bmppal_to_bits(inSource, outDestination, msheader, bmppalette, frommsformat); @@ -1818,15 +1823,15 @@ BMPTranslator::translate_from_bmp(BPositionIO *inSource, uint32 outType, outDestination, datasize, msheader, bmppalette); else return B_NO_TRANSLATOR; - + case 1: return translate_from_bmppal_to_bits(inSource, outDestination, msheader, bmppalette, frommsformat); - + default: return B_NO_TRANSLATOR; } - + } else return B_NO_TRANSLATOR; } @@ -1840,7 +1845,7 @@ BMPTranslator::translate_from_bmp(BPositionIO *inSource, uint32 outType, // Preconditions: // // Parameters: inSource, the data to be translated -// +// // inInfo, hint about the data in inSource (not used) // // ioExtension, configuration options for the diff --git a/src/add-ons/translators/exr/EXRTranslator.cpp b/src/add-ons/translators/exr/EXRTranslator.cpp index ddc509383e..b6618401e4 100644 --- a/src/add-ons/translators/exr/EXRTranslator.cpp +++ b/src/add-ons/translators/exr/EXRTranslator.cpp @@ -21,7 +21,7 @@ // The input formats that this translator supports. -translation_format sInputFormats[] = { +static const translation_format sInputFormats[] = { { EXR_IMAGE_FORMAT, B_TRANSLATOR_BITMAP, @@ -33,7 +33,7 @@ translation_format sInputFormats[] = { }; // The output formats that this translator supports. -translation_format sOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -45,7 +45,7 @@ translation_format sOutputFormats[] = { }; // Default settings for the Translator -static TranSetting sDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false} }; @@ -91,7 +91,7 @@ EXRTranslator::DerivedIdentify(BPositionIO *stream, try { IStreamWrapper istream("filename", stream); RgbaInputFile inputFile(istream); - + if (outInfo) { outInfo->type = EXR_IMAGE_FORMAT; outInfo->group = B_TRANSLATOR_BITMAP; @@ -131,7 +131,7 @@ EXRTranslator::DerivedTranslate(BPositionIO* source, int dataHeight = dataWindow.max.y - dataWindow.min.y + 1; int displayWidth = displayWindow.max.x - displayWindow.min.x + 1; int displayHeight = displayWindow.max.y - displayWindow.min.y + 1; - + // Write out the data to outDestination // Construct and write Be bitmap header TranslatorBitmap bitsHeader; @@ -148,11 +148,11 @@ EXRTranslator::DerivedTranslate(BPositionIO* source, return B_ERROR; } target->Write(&bitsHeader, sizeof(TranslatorBitmap)); - + Array2D pixels(dataHeight, dataWidth); in.setFrameBuffer (&pixels[0][0] - dataWindow.min.y * dataWidth - dataWindow.min.x, 1, dataWidth); in.readPixels (dataWindow.min.y, dataWindow.max.y); - + float _gamma = 0.4545f; float _exposure = 0.0f; float _defog = 0.0f; @@ -162,7 +162,7 @@ EXRTranslator::DerivedTranslate(BPositionIO* source, float _fogR = 0.0f; float _fogG = 0.0f; float _fogB = 0.0f; - + halfFunction rGamma (Gamma (_gamma, _exposure, @@ -171,7 +171,7 @@ EXRTranslator::DerivedTranslate(BPositionIO* source, _kneeHigh), -HALF_MAX, HALF_MAX, 0.f, 255.f, 0.f, 0.f); - + halfFunction gGamma (Gamma (_gamma, _exposure, @@ -180,7 +180,7 @@ EXRTranslator::DerivedTranslate(BPositionIO* source, _kneeHigh), -HALF_MAX, HALF_MAX, 0.f, 255.f, 0.f, 0.f); - + halfFunction bGamma (Gamma (_gamma, _exposure, @@ -189,7 +189,7 @@ EXRTranslator::DerivedTranslate(BPositionIO* source, _kneeHigh), -HALF_MAX, HALF_MAX, 0.f, 255.f, 0.f, 0.f); - + for (int y = displayWindow.min.y; y <= displayWindow.max.y; ++y) { if (y < dataWindow.min.y || y > dataWindow.max.y) { @@ -203,7 +203,7 @@ EXRTranslator::DerivedTranslate(BPositionIO* source, } continue; } - + for (int x = displayWindow.min.x; x <= displayWindow.max.x; ++x) { unsigned char sp[4]; if (x < dataWindow.min.x @@ -214,7 +214,7 @@ EXRTranslator::DerivedTranslate(BPositionIO* source, sp[3] = 255; } else { const Imf::Rgba &rp = pixels[y][x]; - + sp[0] = (unsigned char)bGamma(rp.b); sp[1] = (unsigned char)gGamma(rp.g); sp[2] = (unsigned char)rGamma(rp.r); diff --git a/src/add-ons/translators/hpgs/HPGSTranslator.cpp b/src/add-ons/translators/hpgs/HPGSTranslator.cpp index f1cce10746..b052536c24 100644 --- a/src/add-ons/translators/hpgs/HPGSTranslator.cpp +++ b/src/add-ons/translators/hpgs/HPGSTranslator.cpp @@ -23,7 +23,7 @@ typedef struct my_hpgs_png_image_st { } my_hpgs_png_image; -int +int my_pim_write(hpgs_image *_this, const char *filename) { BPositionIO* target = ((my_hpgs_png_image *)_this)->target; @@ -42,7 +42,7 @@ my_pim_write(hpgs_image *_this, const char *filename) // The input formats that this translator supports. -translation_format sInputFormats[] = { +static const translation_format sInputFormats[] = { { HPGS_IMAGE_FORMAT, B_TRANSLATOR_BITMAP, @@ -54,7 +54,7 @@ translation_format sInputFormats[] = { }; // The output formats that this translator supports. -translation_format sOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -66,7 +66,7 @@ translation_format sOutputFormats[] = { }; // Default settings for the Translator -static TranSetting sDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false} }; @@ -109,7 +109,7 @@ HPGSTranslator::DerivedIdentify(BPositionIO *stream, return B_NO_TRANSLATOR; hpgs_istream *istream = hpgs_new_wrapper_istream(stream); - + status_t err = B_OK; int verbosity = 1; hpgs_bool multipage = HPGS_FALSE; @@ -126,7 +126,7 @@ HPGSTranslator::DerivedIdentify(BPositionIO *stream, strcpy(info->MIME, "vector/x-hpgl2"); } else err = B_NO_TRANSLATOR; - + free(reader); free(size_dev); hpgs_free_wrapper_istream(istream); @@ -147,11 +147,11 @@ HPGSTranslator::DerivedTranslate(BPositionIO* source, status_t err = B_OK; hpgs_istream *istream = hpgs_new_wrapper_istream(source); - + TranslatorBitmap header; ssize_t bytesWritten; uint32 dataSize; - + double paper_angle = 180.0; double paper_border = 0.0; double paper_width = 0.0; @@ -201,7 +201,7 @@ HPGSTranslator::DerivedTranslate(BPositionIO* source, image->vtable->write = &my_pim_write; image = (hpgs_image *)realloc(image, sizeof(my_hpgs_png_image)); ((my_hpgs_png_image *)image)->target = target; - + pdv = hpgs_new_paint_device(image, NULL, &bbox, antialias); hpgs_paint_device_set_image_interpolation(pdv, image_interpolation); hpgs_paint_device_set_thin_alpha(pdv, thin_alpha); diff --git a/src/add-ons/translators/hvif/HVIFTranslator.cpp b/src/add-ons/translators/hvif/HVIFTranslator.cpp index 772077d5c2..2e4e302657 100644 --- a/src/add-ons/translators/hvif/HVIFTranslator.cpp +++ b/src/add-ons/translators/hvif/HVIFTranslator.cpp @@ -21,7 +21,7 @@ #define HVIF_TRANSLATION_QUALITY 1.0 #define HVIF_TRANSLATION_CAPABILITY 1.0 -static translation_format sInputFormats[] = { +static const translation_format sInputFormats[] = { { HVIF_FORMAT_CODE, B_TRANSLATOR_BITMAP, @@ -33,7 +33,7 @@ static translation_format sInputFormats[] = { }; -static translation_format sOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -45,10 +45,15 @@ static translation_format sOutputFormats[] = { }; -static TranSetting sDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { { HVIF_SETTING_RENDER_SIZE, TRAN_SETTING_INT32, 64 } }; +const uint32 kNumInputFormats = sizeof(sInputFormats) / sizeof(translation_format); +const uint32 kNumOutputFormats = sizeof(sOutputFormats) / sizeof(translation_format); +const uint32 kNumDefaultSettings = sizeof(sDefaultSettings) / sizeof(TranSetting); + + BTranslator * make_nth_translator(int32 n, image_id image, uint32 flags, ...) @@ -60,13 +65,13 @@ make_nth_translator(int32 n, image_id image, uint32 flags, ...) HVIFTranslator::HVIFTranslator() - : BaseTranslator("HVIF icons", "Native Haiku vector icon translator", - HVIF_TRANSLATOR_VERSION, sInputFormats, - sizeof(sInputFormats) / sizeof(sInputFormats[0]), sOutputFormats, - sizeof(sOutputFormats) / sizeof(sOutputFormats[0]), - "HVIFTranslator_Settings", sDefaultSettings, - sizeof(sDefaultSettings) / sizeof(sDefaultSettings[0]), - B_TRANSLATOR_BITMAP, HVIF_FORMAT_CODE) + : BaseTranslator("HVIF icons", "Native Haiku vector icon translator", + HVIF_TRANSLATOR_VERSION, + sInputFormats, kNumInputFormats, + sOutputFormats, kNumOutputFormats, + "HVIFTranslator_Settings", + sDefaultSettings, kNumDefaultSettings, + B_TRANSLATOR_BITMAP, HVIF_FORMAT_CODE) { } diff --git a/src/add-ons/translators/ico/ICOTranslator.cpp b/src/add-ons/translators/ico/ICOTranslator.cpp index 084a69ac47..e121d777b0 100644 --- a/src/add-ons/translators/ico/ICOTranslator.cpp +++ b/src/add-ons/translators/ico/ICOTranslator.cpp @@ -21,7 +21,7 @@ const char *kDocumentIndex = "/documentIndex"; // The input formats that this translator supports. -translation_format sInputFormats[] = { +static const translation_format sInputFormats[] = { { ICO_IMAGE_FORMAT, B_TRANSLATOR_BITMAP, @@ -41,7 +41,7 @@ translation_format sInputFormats[] = { }; // The output formats that this translator supports. -translation_format sOutputFormats[] = { +static const translation_format sOutputFormats[] = { { ICO_IMAGE_FORMAT, B_TRANSLATOR_BITMAP, @@ -61,7 +61,7 @@ translation_format sOutputFormats[] = { }; // Default settings for the Translator -static TranSetting sDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false} }; diff --git a/src/add-ons/translators/jpeg/JPEGTranslator.cpp b/src/add-ons/translators/jpeg/JPEGTranslator.cpp index 7af38d0e98..2d699e2556 100644 --- a/src/add-ons/translators/jpeg/JPEGTranslator.cpp +++ b/src/add-ons/translators/jpeg/JPEGTranslator.cpp @@ -55,8 +55,8 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Translation Kit required globals -char gTranslatorName[] = "JPEG images"; -char gTranslatorInfo[] = +static char sTranslatorName[] = "JPEG images"; +static char sTranslatorInfo[] = "©2002-2003, Marcin Konicki\n" "©2005-2007, Haiku\n" "\n" @@ -69,28 +69,26 @@ char gTranslatorInfo[] = "With some colorspace conversion routines by Magnus Hellman\n" " http://www.bebits.com/app/802\n"; -int32 gTranslatorVersion = B_TRANSLATION_MAKE_VERSION(1, 2, 0); +static const int32 sTranslatorVersion = B_TRANSLATION_MAKE_VERSION(1, 2, 0); // Define the formats we know how to read -const translation_format gInputFormats[] = { +static const translation_format sInputFormats[] = { { JPEG_FORMAT, B_TRANSLATOR_BITMAP, 0.5, 0.5, JPEG_MIME_STRING, JPEG_DESCRIPTION }, { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, 0.5, 0.5, B_TRANSLATOR_BITMAP_MIME_STRING, B_TRANSLATOR_BITMAP_DESCRIPTION } }; -const int gInputFormatCount = sizeof(gInputFormats) / sizeof(translation_format); // Define the formats we know how to write -const translation_format gOutputFormats[] = { +static const translation_format sOutputFormats[] = { { JPEG_FORMAT, B_TRANSLATOR_BITMAP, 0.5, 0.5, JPEG_MIME_STRING, JPEG_DESCRIPTION }, { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, 0.5, 0.5, B_TRANSLATOR_BITMAP_MIME_STRING, B_TRANSLATOR_BITMAP_DESCRIPTION } }; -const int gOutputFormatCount = sizeof(gOutputFormats) / sizeof(translation_format); -TranSetting gSettings[] = { +static const TranSetting sDefaultSettings[] = { {JPEG_SET_SMOOTHING, TRAN_SETTING_INT32, 0}, {JPEG_SET_QUALITY, TRAN_SETTING_INT32, 95}, {JPEG_SET_PROGRESSIVE, TRAN_SETTING_BOOL, true}, @@ -101,7 +99,10 @@ TranSetting gSettings[] = { {JPEG_SET_PHOTOSHOP_CMYK, TRAN_SETTING_BOOL, true}, {JPEG_SET_SHOWREADWARNING, TRAN_SETTING_BOOL, true} }; -const int gSettingsCount = sizeof(gSettings) / sizeof(TranSetting); + +const uint32 kNumInputFormats = sizeof(sInputFormats) / sizeof(translation_format); +const uint32 kNumOutputFormats = sizeof(sOutputFormats) / sizeof(translation_format); +const uint32 kNumDefaultSettings = sizeof(sDefaultSettings) / sizeof(TranSetting); namespace conversion { @@ -658,19 +659,19 @@ TranslatorAboutView::TranslatorAboutView(const char* name) BView(name, 0, new BGroupLayout(B_VERTICAL)) { BAlignment labelAlignment = BAlignment(B_ALIGN_LEFT, B_ALIGN_TOP); - BStringView* title = new BStringView("Title", gTranslatorName); + BStringView* title = new BStringView("Title", sTranslatorName); title->SetFont(be_bold_font); title->SetExplicitAlignment(labelAlignment); char versionString[16]; - sprintf(versionString, "v%d.%d.%d", (int)(gTranslatorVersion >> 8), - (int)((gTranslatorVersion >> 4) & 0xf), (int)(gTranslatorVersion & 0xf)); + sprintf(versionString, "v%d.%d.%d", (int)(sTranslatorVersion >> 8), + (int)((sTranslatorVersion >> 4) & 0xf), (int)(sTranslatorVersion & 0xf)); BStringView* version = new BStringView("Version", versionString); version->SetExplicitAlignment(labelAlignment); BTextView* infoView = new BTextView("info"); - infoView->SetText(gTranslatorInfo); + infoView->SetText(sTranslatorInfo); infoView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); infoView->MakeEditable(false); @@ -1293,11 +1294,12 @@ JPEGTranslator::Error(j_common_ptr cinfo, status_t error) JPEGTranslator::JPEGTranslator() - : - BaseTranslator(gTranslatorName, gTranslatorInfo, gTranslatorVersion, - gInputFormats, gInputFormatCount, gOutputFormats, gOutputFormatCount, - SETTINGS_FILE, gSettings, gSettingsCount, - B_TRANSLATOR_BITMAP, JPEG_FORMAT) + : BaseTranslator(sTranslatorName, sTranslatorInfo, sTranslatorVersion, + sInputFormats, kNumInputFormats, + sOutputFormats, kNumOutputFormats, + SETTINGS_FILE, + sDefaultSettings, kNumDefaultSettings, + B_TRANSLATOR_BITMAP, JPEG_FORMAT) {} @@ -1316,7 +1318,7 @@ main(int, char**) { BApplication app("application/x-vnd.Haiku-JPEGTranslator"); JPEGTranslator* translator = new JPEGTranslator(); - if (LaunchTranslatorWindow(translator, gTranslatorName) == B_OK) + if (LaunchTranslatorWindow(translator, sTranslatorName) == B_OK) app.Run(); return 0; diff --git a/src/add-ons/translators/jpeg2000/JPEG2000Translator.cpp b/src/add-ons/translators/jpeg2000/JPEG2000Translator.cpp index 6315bd9e54..e32a10e80d 100644 --- a/src/add-ons/translators/jpeg2000/JPEG2000Translator.cpp +++ b/src/add-ons/translators/jpeg2000/JPEG2000Translator.cpp @@ -50,8 +50,8 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define B_TRANSLATOR_BITMAP_MIME_STRING "image/x-be-bitmap" #define B_TRANSLATOR_BITMAP_DESCRIPTION "Be Bitmap Format (JPEG2000Translator)" -const char gTranslatorName[] = "JPEG2000 images"; -const char gTranslatorInfo[] = "©2002-2003, Shard\n" +static const char sTranslatorName[] = "JPEG2000 images"; +static const char sTranslatorInfo[] = "©2002-2003, Shard\n" "©2005-2006, Haiku\n" "\n" "Based on JasPer library:\n" @@ -63,34 +63,33 @@ const char gTranslatorInfo[] = "©2002-2003, Shard\n" "ImageMagick's jp2 codec was used as \"tutorial\".\n" " http://www.imagemagick.org/\n"; -int32 gTranslatorVersion = B_TRANSLATION_MAKE_VERSION(1, 0, 0); +static int32 sTranslatorVersion = B_TRANSLATION_MAKE_VERSION(1, 0, 0); -translation_format gInputFormats[] = { +static const translation_format sInputFormats[] = { { JP2_FORMAT, B_TRANSLATOR_BITMAP, 0.5, 0.5, JP2_MIME_STRING, JP2_DESCRIPTION }, { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, 0.5, 0.5, B_TRANSLATOR_BITMAP_MIME_STRING, B_TRANSLATOR_BITMAP_DESCRIPTION }, }; -const int gInputFormatCount = - sizeof(gInputFormats) / sizeof(translation_format); -translation_format gOutputFormats[] = { +static const translation_format sOutputFormats[] = { { JP2_FORMAT, B_TRANSLATOR_BITMAP, 0.5, 0.5, JP2_MIME_STRING, JP2_DESCRIPTION }, { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, 0.5, 0.5, B_TRANSLATOR_BITMAP_MIME_STRING, B_TRANSLATOR_BITMAP_DESCRIPTION }, }; -const int gOutputFormatCount = - sizeof(gOutputFormats) / sizeof(translation_format); -TranSetting gSettings[] = { +static const TranSetting sDefaultSettings[] = { {JP2_SET_QUALITY, TRAN_SETTING_INT32, 25}, {JP2_SET_JPC, TRAN_SETTING_BOOL, false}, {JP2_SET_GRAY1_AS_B_RGB24, TRAN_SETTING_BOOL, false}, {JP2_SET_GRAY8_AS_B_RGB32, TRAN_SETTING_BOOL, true} }; -const int gSettingsCount = sizeof(gSettings) / sizeof(TranSetting) ; + +const uint32 kNumInputFormats = sizeof(sInputFormats) / sizeof(translation_format); +const uint32 kNumOutputFormats = sizeof(sOutputFormats) / sizeof(translation_format); +const uint32 kNumDefaultSettings = sizeof(sDefaultSettings) / sizeof(TranSetting); namespace conversion{ @@ -492,7 +491,7 @@ static jas_stream_ops_t positionIOops = { }; -static jas_stream_t* +static jas_stream_t* jas_stream_positionIOopen(BPositionIO *positionIO) { jas_stream_t* stream; @@ -628,7 +627,7 @@ TranslatorWriteView::TranslatorWriteView(const char* name, new BMessage(VIEW_MSG_SET_JPC)); if (fSettings->SetGetBool(JP2_SET_JPC)) fCodeStreamOnly->SetValue(B_CONTROL_ON); - + float padding = 10.0f; AddChild(BGroupLayoutBuilder(B_VERTICAL, padding) .Add(fQualitySlider) @@ -703,22 +702,22 @@ TranslatorAboutView::TranslatorAboutView(const char* name) BView(name, 0, new BGroupLayout(B_VERTICAL)) { BAlignment labelAlignment = BAlignment(B_ALIGN_LEFT, B_ALIGN_TOP); - BStringView* title = new BStringView("Title", gTranslatorName); + BStringView* title = new BStringView("Title", sTranslatorName); title->SetFont(be_bold_font); title->SetExplicitAlignment(labelAlignment); char versionString[16]; - sprintf(versionString, "v%d.%d.%d", (int)(gTranslatorVersion >> 8), - (int)((gTranslatorVersion >> 4) & 0xf), (int)(gTranslatorVersion & 0xf)); + sprintf(versionString, "v%d.%d.%d", (int)(sTranslatorVersion >> 8), + (int)((sTranslatorVersion >> 4) & 0xf), (int)(sTranslatorVersion & 0xf)); BStringView* version = new BStringView("Version", versionString); version->SetExplicitAlignment(labelAlignment); - BTextView* infoView = new BTextView("info"); - infoView->SetText(gTranslatorInfo); + BTextView* infoView = new BTextView("info"); + infoView->SetText(sTranslatorInfo); infoView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); infoView->MakeEditable(false); - + float padding = 10.0f; AddChild(BGroupLayoutBuilder(B_VERTICAL, padding) .Add(BGroupLayoutBuilder(B_HORIZONTAL, padding) @@ -763,11 +762,12 @@ JP2Translator::NewConfigView(TranslatorSettings* settings) JP2Translator::JP2Translator() - : - BaseTranslator(gTranslatorName, gTranslatorInfo, gTranslatorVersion, - gInputFormats, gInputFormatCount, - gOutputFormats, gOutputFormatCount, JP2_SETTINGS_FILE, - gSettings, gSettingsCount, B_TRANSLATOR_BITMAP, JP2_FORMAT) + : BaseTranslator(sTranslatorName, sTranslatorInfo, sTranslatorVersion, + sInputFormats, kNumInputFormats, + sOutputFormats, kNumOutputFormats, + JP2_SETTINGS_FILE, + sDefaultSettings, kNumDefaultSettings, + B_TRANSLATOR_BITMAP, JP2_FORMAT) { } @@ -1048,7 +1048,7 @@ JP2Translator::Compress(BPositionIO* in, BPositionIO* out) (float)fSettings->SetGetInt32(JP2_SET_QUALITY) / 100.0); if (jas_image_encode(image, outs, jas_image_strtofmt( - fSettings->SetGetBool(JP2_SET_JPC) ? + fSettings->SetGetBool(JP2_SET_JPC) ? (char*)"jpc" : (char*)"jp2"), opts)) { return Error(outs, image, pixels, out_color_components, in_scanline, err); @@ -1287,7 +1287,7 @@ main() { BApplication app("application/x-vnd.Haiku-JPEG2000Translator"); JP2Translator* translator = new JP2Translator(); - if (LaunchTranslatorWindow(translator, gTranslatorName) == B_OK) + if (LaunchTranslatorWindow(translator, sTranslatorName) == B_OK) app.Run(); return 0; diff --git a/src/add-ons/translators/pcx/PCXTranslator.cpp b/src/add-ons/translators/pcx/PCXTranslator.cpp index d05b3e659d..21d7c932be 100644 --- a/src/add-ons/translators/pcx/PCXTranslator.cpp +++ b/src/add-ons/translators/pcx/PCXTranslator.cpp @@ -18,7 +18,7 @@ // The input formats that this translator supports. -translation_format sInputFormats[] = { +static const translation_format sInputFormats[] = { { PCX_IMAGE_FORMAT, B_TRANSLATOR_BITMAP, @@ -38,7 +38,7 @@ translation_format sInputFormats[] = { }; // The output formats that this translator supports. -translation_format sOutputFormats[] = { +static const translation_format sOutputFormats[] = { /*{ PCX_IMAGE_FORMAT, B_TRANSLATOR_BITMAP, @@ -58,7 +58,7 @@ translation_format sOutputFormats[] = { }; // Default settings for the Translator -static TranSetting sDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false} }; diff --git a/src/add-ons/translators/png/PNGTranslator.cpp b/src/add-ons/translators/png/PNGTranslator.cpp index f11818aebb..8bd83d983d 100644 --- a/src/add-ons/translators/png/PNGTranslator.cpp +++ b/src/add-ons/translators/png/PNGTranslator.cpp @@ -4,7 +4,7 @@ // // PNGTranslator.cpp // -// This BTranslator based object is for opening and writing +// This BTranslator based object is for opening and writing // PNG images. // // @@ -14,18 +14,18 @@ // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // -// The above copyright notice and this permission notice shall be included +// The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. /*****************************************************************************/ @@ -39,7 +39,7 @@ #include "PNGView.h" // The input formats that this translator supports. -translation_format gInputFormats[] = { +static const translation_format sInputFormats[] = { { B_PNG_FORMAT, B_TRANSLATOR_BITMAP, @@ -67,7 +67,7 @@ translation_format gInputFormats[] = { }; // The output formats that this translator supports. -translation_format gOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_PNG_FORMAT, B_TRANSLATOR_BITMAP, @@ -87,13 +87,18 @@ translation_format gOutputFormats[] = { }; // Default settings for the Translator -TranSetting gDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false}, {PNG_SETTING_INTERLACE, TRAN_SETTING_INT32, PNG_INTERLACE_NONE} // interlacing is off by default }; +const uint32 kNumInputFormats = sizeof(sInputFormats) / sizeof(translation_format); +const uint32 kNumOutputFormats = sizeof(sOutputFormats) / sizeof(translation_format); +const uint32 kNumDefaultSettings = sizeof(sDefaultSettings) / sizeof(TranSetting); + + // --------------------------------------------------------------- // make_nth_translator // @@ -141,7 +146,7 @@ BPositionIO * get_pio(png_structp ppng) { BPositionIO *pio = NULL; - pio = static_cast(png_get_io_ptr(ppng)); + pio = static_cast(png_get_io_ptr(ppng)); return pio; } @@ -182,10 +187,10 @@ pngcb_flush_data(png_structp ppng) PNGTranslator::PNGTranslator() : BaseTranslator("PNG images", "PNG image translator", PNG_TRANSLATOR_VERSION, - gInputFormats, sizeof(gInputFormats) / sizeof(translation_format), - gOutputFormats, sizeof(gOutputFormats) / sizeof(translation_format), + sInputFormats, kNumInputFormats, + sOutputFormats, kNumOutputFormats, "PNGTranslator_Settings", - gDefaultSettings, sizeof(gDefaultSettings) / sizeof(TranSetting), + sDefaultSettings, kNumDefaultSettings, B_TRANSLATOR_BITMAP, B_PNG_FORMAT) { } @@ -213,7 +218,7 @@ identify_png_header(BPositionIO *inSource, translator_info *outInfo) const int32 kSigSize = 8; uint8 buf[kSigSize]; if (inSource->Read(buf, kSigSize) != kSigSize) - return B_NO_TRANSLATOR; + return B_NO_TRANSLATOR; if (png_sig_cmp(buf, 0, kSigSize)) // if first 8 bytes of stream don't match PNG signature bail return B_NO_TRANSLATOR; @@ -226,10 +231,10 @@ identify_png_header(BPositionIO *inSource, translator_info *outInfo) strcpy(outInfo->MIME, "image/png"); strcpy(outInfo->name, "PNG image"); } - + return B_OK; } - + // --------------------------------------------------------------- // DerivedIdentify // @@ -288,13 +293,13 @@ PNGTranslator::translate_from_png_to_bits(BPositionIO *inSource, // if a libpng errors before this is set // to a different value, the above is what // will be returned from this function - + bool bheaderonly = false, bdataonly = false; - + // for storing decoded PNG row data uint8 **prows = NULL, *prow = NULL; png_uint_32 nalloc = 0; - + png_structp ppng = NULL; png_infop pinfo = NULL; while (ppng == NULL) { @@ -312,67 +317,67 @@ PNGTranslator::translate_from_png_to_bits(BPositionIO *inSource, // the longjmp function to continue execution // from this point break; - + // set read callback function png_set_read_fn(ppng, static_cast(inSource), pngcb_read_data); - + // Read in PNG image info png_set_sig_bytes(ppng, 8); png_read_info(ppng, pinfo); - + png_uint_32 width, height; int bit_depth, color_type, interlace_type; png_get_IHDR(ppng, pinfo, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); - + // Setup image transformations to make converting it easier bool balpha = false; - + if (bit_depth == 16) png_set_strip_16(ppng); else if (bit_depth < 8) png_set_packing(ppng); - + if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(ppng); - + if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) // In order to convert from low-depth gray images to RGB, // I first need to convert them to grayscale, 8 bpp png_set_expand_gray_1_2_4_to_8(ppng); - + if (png_get_valid(ppng, pinfo, PNG_INFO_tRNS)) { // if there is transparency data in the // PNG, but not in the form of an alpha channel balpha = true; png_set_tRNS_to_alpha(ppng); } - + // change RGB to BGR as it is in 'bits' if (color_type & PNG_COLOR_MASK_COLOR) png_set_bgr(ppng); - + // have libpng convert gray to RGB for me if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_gray_to_rgb(ppng); - + if (color_type & PNG_COLOR_MASK_ALPHA) // if image contains an alpha channel balpha = true; - + if (!balpha) // add filler byte for images without alpha // so that the pixels are 4 bytes each png_set_filler(ppng, 0xff, PNG_FILLER_AFTER); - + // Check that transformed PNG rowbytes matches // what is expected const int32 kbytes = 4; png_uint_32 rowbytes = png_get_rowbytes(ppng, pinfo); if (rowbytes < kbytes * width) rowbytes = kbytes * width; - + if (!bdataonly) { // Write out the data to outDestination // Construct and write Be bitmap header @@ -394,13 +399,13 @@ PNGTranslator::translate_from_png_to_bits(BPositionIO *inSource, break; } outDestination->Write(&bitsHeader, sizeof(TranslatorBitmap)); - + if (bheaderonly) { result = B_OK; break; } } - + if (interlace_type == PNG_INTERLACE_NONE) { // allocate buffer for storing PNG row prow = new uint8[rowbytes]; @@ -416,13 +421,13 @@ PNGTranslator::translate_from_png_to_bits(BPositionIO *inSource, // Set OK status here, because, in the event of // an error, png_read_end() will longjmp to error // handler above and not execute lines below it - + // finish reading, pass NULL for info because I // don't need the extra data png_read_end(ppng, NULL); - + break; - + } else { // interlaced PNG image prows = new uint8 *[height]; @@ -436,30 +441,30 @@ PNGTranslator::translate_from_png_to_bits(BPositionIO *inSource, if (!prows[nalloc]) break; } - + if (nalloc < height) result = B_NO_MEMORY; else { png_read_image(ppng, prows); - + for (png_uint_32 i = 0; i < height; i++) outDestination->Write(prows[i], width * kbytes); result = B_OK; // Set OK status here, because, in the event of // an error, png_read_end() will longjmp to error // handler above and not execute lines below it - + png_read_end(ppng, NULL); } - + break; } } - + if (ppng) { delete[] prow; prow = NULL; - + // delete row pointers and array of pointers to rows while (nalloc) { nalloc--; @@ -467,7 +472,7 @@ PNGTranslator::translate_from_png_to_bits(BPositionIO *inSource, } delete[] prows; prows = NULL; - + // free PNG handle / info structures if (!pinfo) png_destroy_read_struct(&ppng, NULL, NULL); @@ -499,13 +504,13 @@ pix_bits_to_png(uint8 *pbits, uint8 *ppng, color_space fromspace, { status_t bytescopied = 0; uint16 val; - + switch (fromspace) { case B_RGBA32: bytescopied = width * bitsBytesPerPixel; memcpy(ppng, pbits, bytescopied); break; - + case B_RGB32: case B_RGB24: bytescopied = width * bitsBytesPerPixel; @@ -515,7 +520,7 @@ pix_bits_to_png(uint8 *pbits, uint8 *ppng, color_space fromspace, pbits += bitsBytesPerPixel; } break; - + case B_RGBA32_BIG: bytescopied = width * 4; while (width--) { @@ -523,12 +528,12 @@ pix_bits_to_png(uint8 *pbits, uint8 *ppng, color_space fromspace, ppng[1] = pbits[2]; ppng[2] = pbits[1]; ppng[3] = pbits[0]; - + ppng += 4; pbits += 4; } break; - + case B_CMYA32: bytescopied = width * 4; while (width--) { @@ -536,32 +541,32 @@ pix_bits_to_png(uint8 *pbits, uint8 *ppng, color_space fromspace, ppng[1] = 255 - pbits[1]; ppng[2] = 255 - pbits[0]; ppng[3] = pbits[3]; - + ppng += 4; pbits += 4; } break; - + case B_CMYK32: { int32 comp; bytescopied = width * 3; - while (width--) { + while (width--) { comp = 255 - pbits[2] - pbits[3]; ppng[0] = (comp < 0) ? 0 : comp; - + comp = 255 - pbits[1] - pbits[3]; ppng[1] = (comp < 0) ? 0 : comp; - + comp = 255 - pbits[0] - pbits[3]; ppng[2] = (comp < 0) ? 0 : comp; - + ppng += 3; pbits += 4; } break; } - + case B_CMY32: case B_CMY24: bytescopied = width * 3; @@ -569,12 +574,12 @@ pix_bits_to_png(uint8 *pbits, uint8 *ppng, color_space fromspace, ppng[0] = 255 - pbits[2]; ppng[1] = 255 - pbits[1]; ppng[2] = 255 - pbits[0]; - + ppng += 3; pbits += bitsBytesPerPixel; } break; - + case B_RGB16: case B_RGB16_BIG: bytescopied = width * 3; @@ -590,7 +595,7 @@ pix_bits_to_png(uint8 *pbits, uint8 *ppng, color_space fromspace, ((val & 0x7e0) >> 3) | ((val & 0x7e0) >> 9); ppng[2] = ((val & 0xf800) >> 8) | ((val & 0xf800) >> 13); - + ppng += 3; pbits += 2; } @@ -604,18 +609,18 @@ pix_bits_to_png(uint8 *pbits, uint8 *ppng, color_space fromspace, val = pbits[0] + (pbits[1] << 8); else val = pbits[1] + (pbits[0] << 8); - ppng[0] = + ppng[0] = ((val & 0x1f) << 3) | ((val & 0x1f) >> 2); ppng[1] = ((val & 0x3e0) >> 2) | ((val & 0x3e0) >> 7); ppng[2] = ((val & 0x7c00) >> 7) | ((val & 0x7c00) >> 12); - + ppng += 3; pbits += 2; } break; - + case B_RGBA15: case B_RGBA15_BIG: bytescopied = width * 4; @@ -624,43 +629,43 @@ pix_bits_to_png(uint8 *pbits, uint8 *ppng, color_space fromspace, val = pbits[0] + (pbits[1] << 8); else val = pbits[1] + (pbits[0] << 8); - ppng[0] = + ppng[0] = ((val & 0x1f) << 3) | ((val & 0x1f) >> 2); ppng[1] = ((val & 0x3e0) >> 2) | ((val & 0x3e0) >> 7); ppng[2] = ((val & 0x7c00) >> 7) | ((val & 0x7c00) >> 12); ppng[3] = (val & 0x8000) ? 255 : 0; - + ppng += 4; pbits += 2; } break; - + case B_RGB32_BIG: bytescopied = width * 3; while (width--) { ppng[0] = pbits[3]; ppng[1] = pbits[2]; ppng[2] = pbits[1]; - + ppng += 3; pbits += 4; } break; - + case B_RGB24_BIG: bytescopied = width * 3; while (width--) { ppng[0] = pbits[2]; ppng[1] = pbits[1]; ppng[2] = pbits[0]; - + ppng += 3; pbits += 3; } break; - + case B_CMAP8: { rgb_color c; @@ -670,23 +675,23 @@ pix_bits_to_png(uint8 *pbits, uint8 *ppng, color_space fromspace, ppng[0] = c.blue; ppng[1] = c.green; ppng[2] = c.red; - + ppng += 3; pbits++; } break; } - + case B_GRAY8: bytescopied = width; memcpy(ppng, pbits, bytescopied); break; - + default: bytescopied = B_ERROR; break; } // switch (fromspace) - + return bytescopied; } @@ -695,24 +700,24 @@ PNGTranslator::translate_from_bits_to_png(BPositionIO *inSource, BPositionIO *outDestination) { TranslatorBitmap bitsHeader; - + status_t result; - + result = identify_bits_header(inSource, NULL, &bitsHeader); if (result != B_OK) return result; - + const color_map *pmap = NULL; if (bitsHeader.colors == B_CMAP8) { pmap = system_colors(); if (!pmap) return B_ERROR; } - + png_uint_32 width, height; width = static_cast(bitsHeader.bounds.Width() + 1); height = static_cast(bitsHeader.bounds.Height() + 1); - + int32 pngBytesPerPixel = 0; int bit_depth, color_type, interlace_type; bit_depth = 8; @@ -725,7 +730,7 @@ PNGTranslator::translate_from_bits_to_png(BPositionIO *inSource, pngBytesPerPixel = 4; color_type = PNG_COLOR_TYPE_RGB_ALPHA; break; - + case B_RGB32: case B_RGB32_BIG: case B_RGB24: @@ -740,19 +745,19 @@ PNGTranslator::translate_from_bits_to_png(BPositionIO *inSource, pngBytesPerPixel = 3; color_type = PNG_COLOR_TYPE_RGB; break; - + // ADD SUPPORT FOR B_CMAP8 HERE (later) - + case B_GRAY8: pngBytesPerPixel = 1; color_type = PNG_COLOR_TYPE_GRAY; break; - + default: return B_NO_TRANSLATOR; } interlace_type = fSettings->SetGetInt32(PNG_SETTING_INTERLACE); - + int32 bitsBytesPerPixel = 0; switch (bitsHeader.colors) { case B_RGBA32: @@ -764,13 +769,13 @@ PNGTranslator::translate_from_bits_to_png(BPositionIO *inSource, case B_CMY32: bitsBytesPerPixel = 4; break; - + case B_RGB24: case B_RGB24_BIG: case B_CMY24: bitsBytesPerPixel = 3; break; - + case B_RGB16: case B_RGB16_BIG: case B_RGBA15: @@ -784,20 +789,20 @@ PNGTranslator::translate_from_bits_to_png(BPositionIO *inSource, case B_CMAP8: bitsBytesPerPixel = 1; break; - + default: return B_NO_TRANSLATOR; }; - + uint8 *pbitsrow = NULL, *prow = NULL; // row buffers // image buffer for writing whole png image at once uint8 **prows = NULL; png_uint_32 nalloc = 0; - + png_structp ppng = NULL; png_infop pinfo = NULL; - + result = B_NO_TRANSLATOR; while (ppng == NULL) { // create PNG read pointer with default error handling routines @@ -822,9 +827,9 @@ PNGTranslator::translate_from_bits_to_png(BPositionIO *inSource, break; } - png_set_write_fn(ppng, static_cast(outDestination), + png_set_write_fn(ppng, static_cast(outDestination), pngcb_write_data, pngcb_flush_data); - + // Allocate memory needed to buffer image data pbitsrow = new uint8[bitsHeader.rowBytes]; if (!pbitsrow) { @@ -858,46 +863,46 @@ PNGTranslator::translate_from_bits_to_png(BPositionIO *inSource, break; } } - + // Specify image info png_set_IHDR(ppng, pinfo, width, height, bit_depth, color_type, interlace_type, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); png_write_info(ppng, pinfo); - + png_set_bgr(ppng); - + // write out image data if (interlace_type == PNG_INTERLACE_NONE) { for (png_uint_32 i = 0; i < height; i++) { inSource->Read(pbitsrow, bitsHeader.rowBytes); - + pix_bits_to_png(pbitsrow, prow, bitsHeader.colors, width, pmap, bitsBytesPerPixel); - + png_write_row(ppng, prow); } } else { for (png_uint_32 i = 0; i < height; i++) { inSource->Read(pbitsrow, bitsHeader.rowBytes); - + pix_bits_to_png(pbitsrow, prows[i], bitsHeader.colors, width, pmap, bitsBytesPerPixel); } png_write_image(ppng, prows); } png_write_end(ppng, NULL); - + result = B_OK; break; } - + if (ppng) { delete[] pbitsrow; pbitsrow = NULL; - + delete[] prow; prow = NULL; - + // delete row pointers and array of pointers to rows while (nalloc) { nalloc--; @@ -905,7 +910,7 @@ PNGTranslator::translate_from_bits_to_png(BPositionIO *inSource, } delete[] prows; prows = NULL; - + // free PNG handle / info structures if (!pinfo) png_destroy_write_struct(&ppng, NULL); @@ -925,7 +930,7 @@ PNGTranslator::translate_from_bits_to_png(BPositionIO *inSource, // Preconditions: // // Parameters: inSource, the data to be translated -// +// // inInfo, hint about the data in inSource (not used) // // ioExtension, configuration options for the @@ -958,7 +963,7 @@ PNGTranslator::DerivedTranslate(BPositionIO *inSource, { if (baseType == 1) // if inSource is in bits format - return translate_from_bits_to_png(inSource, outDestination); + return translate_from_bits_to_png(inSource, outDestination); else if (baseType == 0) // if inSource is NOT in bits format return translate_from_png(inSource, outType, outDestination); diff --git a/src/add-ons/translators/ppm/PPMTranslator.cpp b/src/add-ons/translators/ppm/PPMTranslator.cpp index cd9233ecb7..46f405fc39 100644 --- a/src/add-ons/translators/ppm/PPMTranslator.cpp +++ b/src/add-ons/translators/ppm/PPMTranslator.cpp @@ -90,8 +90,8 @@ struct ppm_settings { bool write_ascii; bool settings_touched; }; -BLocker g_settings_lock("PPM settings lock"); -ppm_settings g_settings; +static BLocker g_settings_lock("PPM settings lock"); +static ppm_settings g_settings; BPoint get_window_origin(); void set_window_origin(BPoint pos); @@ -485,10 +485,10 @@ public: if (g_settings.write_ascii) mAscii->SetValue(1); mAscii->SetViewColor(ViewColor()); - + // Build the layout SetLayout(new BGroupLayout(B_HORIZONTAL)); - + AddChild(BGroupLayoutBuilder(B_VERTICAL, 7) .Add(mTitle) .Add(mDetail) @@ -504,7 +504,7 @@ public: .AddGlue() .SetInsets(5, 5, 5, 5) ); - + BFont font; GetFont(&font); SetExplicitPreferredSize(BSize((font.Size() * 350)/12, (font.Size() * 200)/12)); diff --git a/src/add-ons/translators/raw/RAWTranslator.cpp b/src/add-ons/translators/raw/RAWTranslator.cpp index 718ee98842..d5eeebb5c5 100644 --- a/src/add-ons/translators/raw/RAWTranslator.cpp +++ b/src/add-ons/translators/raw/RAWTranslator.cpp @@ -46,7 +46,7 @@ const char* kProgressMonitor = "/progressMonitor"; const char* kProgressMessage = "/progressMessage"; // The input formats that this translator supports. -translation_format sInputFormats[] = { +static const translation_format sInputFormats[] = { { RAW_IMAGE_FORMAT, B_TRANSLATOR_BITMAP, @@ -62,11 +62,11 @@ translation_format sInputFormats[] = { RAW_IN_CAPABILITY, "image/x-vnd.photo-raw", "Digital Photo RAW image" - }, + } }; // The output formats that this translator supports. -translation_format sOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -74,11 +74,11 @@ translation_format sOutputFormats[] = { BITS_OUT_CAPABILITY, "image/x-be-bitmap", "Be Bitmap Format (RAWTranslator)" - }, + } }; // Default settings for the Translator -static TranSetting sDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false} }; diff --git a/src/add-ons/translators/rtf/RTFTranslator.cpp b/src/add-ons/translators/rtf/RTFTranslator.cpp index 93e11b9600..471c4df037 100644 --- a/src/add-ons/translators/rtf/RTFTranslator.cpp +++ b/src/add-ons/translators/rtf/RTFTranslator.cpp @@ -19,7 +19,7 @@ // The input formats that this translator supports. -translation_format sInputFormats[] = { +static const translation_format sInputFormats[] = { { RTF_TEXT_FORMAT, B_TRANSLATOR_TEXT, @@ -27,11 +27,11 @@ translation_format sInputFormats[] = { RTF_IN_CAPABILITY, "text/rtf", "RichTextFormat file" - }, + } }; // The output formats that this translator supports. -translation_format sOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_TEXT, B_TRANSLATOR_TEXT, diff --git a/src/add-ons/translators/sgi/SGITranslator.cpp b/src/add-ons/translators/sgi/SGITranslator.cpp index c22dd85de1..7d82541ce9 100644 --- a/src/add-ons/translators/sgi/SGITranslator.cpp +++ b/src/add-ons/translators/sgi/SGITranslator.cpp @@ -6,7 +6,7 @@ // // SGITranslator.cpp // -// This BTranslator based object is for opening and writing +// This BTranslator based object is for opening and writing // SGI images. // // @@ -15,18 +15,18 @@ // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // -// The above copyright notice and this permission notice shall be included +// The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. /*****************************************************************************/ @@ -53,7 +53,7 @@ using std::nothrow; // The input formats that this translator supports. -translation_format gInputFormats[] = { +static const translation_format sInputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -73,7 +73,7 @@ translation_format gInputFormats[] = { }; // The output formats that this translator supports. -translation_format gOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -93,13 +93,18 @@ translation_format gOutputFormats[] = { }; // Default settings for the Translator -TranSetting gDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false}, {SGI_SETTING_COMPRESSION, TRAN_SETTING_INT32, SGI_COMP_RLE} // compression is set to RLE by default }; +const uint32 kNumInputFormats = sizeof(sInputFormats) / sizeof(translation_format); +const uint32 kNumOutputFormats = sizeof(sOutputFormats) / sizeof(translation_format); +const uint32 kNumDefaultSettings = sizeof(sDefaultSettings) / sizeof(TranSetting); + + // --------------------------------------------------------------- // make_nth_translator // @@ -149,10 +154,10 @@ SGITranslator::SGITranslator() : BaseTranslator("SGI images", "SGI image translator", SGI_TRANSLATOR_VERSION, - gInputFormats, sizeof(gInputFormats) / sizeof(translation_format), - gOutputFormats, sizeof(gOutputFormats) / sizeof(translation_format), + sInputFormats, kNumInputFormats, + sOutputFormats, kNumOutputFormats, "SGITranslator_Settings", - gDefaultSettings, sizeof(gDefaultSettings) / sizeof(TranSetting), + sDefaultSettings, kNumDefaultSettings, B_TRANSLATOR_BITMAP, SGI_FORMAT) { } @@ -183,7 +188,7 @@ identify_sgi_header(BPositionIO *inSource, translator_info *outInfo, uint32 outT SGIImage* sgiImage = new(nothrow) SGIImage(); if (sgiImage) status = sgiImage->SetTo(inSource); - + if (status >= B_OK) { if (outInfo) { outInfo->type = SGI_FORMAT; @@ -206,7 +211,7 @@ identify_sgi_header(BPositionIO *inSource, translator_info *outInfo, uint32 outT return status; } - + // --------------------------------------------------------------- // DerivedIdentify // @@ -304,7 +309,7 @@ SGITranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, // read one row at a time, // convert to the correct format // and write out the results - + // SGI Images store each channel separately // a buffer is allocated big enough to hold all channels // then the pointers are assigned with offsets into that buffer @@ -402,7 +407,7 @@ SGITranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, // cannot be here break; } // switch (format) - + // for each channel, write a row buffer for (uint32 z = 0; z < channelCount; z++) { ret = sgiImage->WriteRow(rows[z], y, z); @@ -411,13 +416,13 @@ printf("WriteRow() returned %s!\n", strerror(ret)); break; } } - + } // for (uint32 y = 0; y < height && ret >= B_OK; y++) if (ret >= B_OK) ret = B_OK; } else // if (rows && rows[0] && rowBuffer) ret = B_NO_MEMORY; - + delete[] rows[0]; delete[] rows; delete[] rowBuffer; @@ -437,7 +442,7 @@ SGITranslator::translate_from_sgi(BPositionIO *inSource, uint32 outType, BPositionIO *outDestination) { status_t ret = B_NO_TRANSLATOR; - + // if copying SGI_FORMAT to SGI_FORMAT if (outType == SGI_FORMAT) { translate_direct_copy(inSource, outDestination); @@ -446,13 +451,13 @@ SGITranslator::translate_from_sgi(BPositionIO *inSource, uint32 outType, // variables needing cleanup SGIImage* sgiImage = NULL; - + ret = identify_sgi_header(inSource, NULL, outType, &sgiImage); if (ret >= B_OK) { bool bheaderonly = false, bdataonly = false; - + uint32 width = sgiImage->Width(); uint32 height = sgiImage->Height(); uint32 channelCount = sgiImage->CountChannels(); @@ -687,7 +692,7 @@ printf("error writing bits header: %s\n", strerror(ret)); // Preconditions: // // Parameters: inSource, the data to be translated -// +// // inInfo, hint about the data in inSource (not used) // // ioExtension, configuration options for the @@ -727,7 +732,7 @@ SGITranslator::DerivedTranslate(BPositionIO *inSource, else // if BaseTranslator did not properly identify the data as // bits or not bits - return B_NO_TRANSLATOR; + return B_NO_TRANSLATOR; } BView * diff --git a/src/add-ons/translators/shared/BaseTranslator.cpp b/src/add-ons/translators/shared/BaseTranslator.cpp index ad9b75eb69..5a33fcce2f 100644 --- a/src/add-ons/translators/shared/BaseTranslator.cpp +++ b/src/add-ons/translators/shared/BaseTranslator.cpp @@ -14,18 +14,18 @@ // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // -// The above copyright notice and this permission notice shall be included +// The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. /*****************************************************************************/ @@ -59,7 +59,7 @@ BaseTranslator::BaseTranslator(const char *name, const char *info, const int32 version, const translation_format *inFormats, int32 inCount, const translation_format *outFormats, int32 outCount, - const char *settingsFile, TranSetting *defaults, int32 defCount, + const char *settingsFile, const TranSetting *defaults, int32 defCount, uint32 tranGroup, uint32 tranType) : BTranslator() @@ -123,7 +123,7 @@ BaseTranslator::~BaseTranslator() // Postconditions: // // Returns: a const char * to the short name of the translator -// --------------------------------------------------------------- +// --------------------------------------------------------------- const char * BaseTranslator::TranslatorName() const { @@ -166,7 +166,7 @@ BaseTranslator::TranslatorInfo() const // // Returns: // --------------------------------------------------------------- -int32 +int32 BaseTranslator::TranslatorVersion() const { return fVersion; @@ -213,7 +213,7 @@ BaseTranslator::InputFormats(int32 *out_count) const // // Returns: the array of output formats and the number of output // formats through the out_count parameter -// --------------------------------------------------------------- +// --------------------------------------------------------------- const translation_format * BaseTranslator::OutputFormats(int32 *out_count) const { @@ -229,7 +229,7 @@ BaseTranslator::OutputFormats(int32 *out_count) const // identify_bits_header // // Determines if the data in inSource is in the -// B_TRANSLATOR_BITMAP ('bits') format. If it is, it returns +// B_TRANSLATOR_BITMAP ('bits') format. If it is, it returns // info about the data in inSource to outInfo and pheader. // // Preconditions: @@ -259,7 +259,7 @@ BaseTranslator::OutputFormats(int32 *out_count) const // B_OK, if the data looks like bits data and no errors were // encountered // --------------------------------------------------------------- -status_t +status_t BaseTranslator::identify_bits_header(BPositionIO *inSource, translator_info *outInfo, TranslatorBitmap *pheader) { @@ -270,12 +270,12 @@ BaseTranslator::identify_bits_header(BPositionIO *inSource, if (inSource->Read( (reinterpret_cast (&header)), size) != size) return B_NO_TRANSLATOR; - + // convert to host byte order if (swap_data(B_UINT32_TYPE, &header, sizeof(TranslatorBitmap), B_SWAP_BENDIAN_TO_HOST) != B_OK) return B_ERROR; - + // check if header values are reasonable if (header.colors != B_RGB32 && header.colors != B_RGB32_BIG && @@ -299,7 +299,7 @@ BaseTranslator::identify_bits_header(BPositionIO *inSource, return B_NO_TRANSLATOR; if (header.rowBytes * (header.bounds.Height() + 1) != header.dataSize) return B_NO_TRANSLATOR; - + if (outInfo) { outInfo->type = B_TRANSLATOR_BITMAP; outInfo->group = B_TRANSLATOR_BITMAP; @@ -307,7 +307,7 @@ BaseTranslator::identify_bits_header(BPositionIO *inSource, outInfo->capability = 0.2; strcpy(outInfo->name, B_TRANSLATE("Be Bitmap Format")); strcpy(outInfo->MIME, "image/x-be-bitmap"); - + // Look for quality / capability info in fInputFormats for (int32 i = 0; i < fInputCount; i++) { if (fInputFormats[i].type == B_TRANSLATOR_BITMAP && @@ -319,7 +319,7 @@ BaseTranslator::identify_bits_header(BPositionIO *inSource, } } } - + if (pheader) { pheader->magic = header.magic; pheader->bounds = header.bounds; @@ -327,7 +327,7 @@ BaseTranslator::identify_bits_header(BPositionIO *inSource, pheader->colors = header.colors; pheader->dataSize = header.dataSize; } - + return B_OK; } @@ -335,7 +335,7 @@ BaseTranslator::identify_bits_header(BPositionIO *inSource, // --------------------------------------------------------------- // BitsCheck // -// Examines the input stream for B_TRANSLATOR_BITMAP format +// Examines the input stream for B_TRANSLATOR_BITMAP format // information and determines if BaseTranslator can handle // the translation entirely, if it must pass the task of // translation to the derived translator or if the stream cannot @@ -382,7 +382,7 @@ BaseTranslator::BitsCheck(BPositionIO *inSource, BMessage *ioExtension, // I won't have to convert the data read in to see whether or not // it is a supported type const uint32 kBitsMagic = B_HOST_TO_BENDIAN_INT32(B_TRANSLATOR_BITMAP); - + // Read in the magic number and determine if it // is a supported type uint8 ch[4]; @@ -391,11 +391,11 @@ BaseTranslator::BitsCheck(BPositionIO *inSource, BMessage *ioExtension, inSource->Seek(-4, SEEK_CUR); // seek backward becuase functions used after this one // expect the stream to be at the beginning - + // Read settings from ioExtension if (ioExtension && fSettings->LoadSettings(ioExtension) < B_OK) return B_BAD_VALUE; - + uint32 sourceMagic; memcpy(&sourceMagic, ch, sizeof(uint32)); if (sourceMagic == kBitsMagic) @@ -516,13 +516,13 @@ BaseTranslator::translate_from_bits_to_bits(BPositionIO *inSource, { TranslatorBitmap bitsHeader; bool bheaderonly = false, bdataonly = false; - + status_t result; result = identify_bits_header(inSource, NULL, &bitsHeader); if (result != B_OK) return result; - - // Translate B_TRANSLATOR_BITMAP to B_TRANSLATOR_BITMAP, easy enough :) + + // Translate B_TRANSLATOR_BITMAP to B_TRANSLATOR_BITMAP, easy enough :) if (outType == B_TRANSLATOR_BITMAP) { // write out bitsHeader (only if configured to) if (bheaderonly || (!bheaderonly && !bdataonly)) { @@ -533,9 +533,9 @@ BaseTranslator::translate_from_bits_to_bits(BPositionIO *inSource, sizeof(TranslatorBitmap)) != sizeof(TranslatorBitmap)) return B_ERROR; } - + // write out the data (only if configured to) - if (bdataonly || (!bheaderonly && !bdataonly)) { + if (bdataonly || (!bheaderonly && !bdataonly)) { uint8 buf[1024]; uint32 remaining = B_BENDIAN_TO_HOST_INT32(bitsHeader.dataSize); ssize_t rd, writ; @@ -547,7 +547,7 @@ BaseTranslator::translate_from_bits_to_bits(BPositionIO *inSource, remaining -= static_cast(writ); rd = inSource->Read(buf, min(1024, remaining)); } - + if (remaining > 0) return B_ERROR; else @@ -587,7 +587,7 @@ BaseTranslator::BitsTranslate(BPositionIO *inSource, // Preconditions: // // Parameters: inSource, the data to be translated -// +// // inInfo, hint about the data in inSource (not used) // // ioExtension, configuration options for the @@ -638,7 +638,7 @@ BaseTranslator::GetConfigurationMessage(BMessage *ioExtension) // MakeConfigurationView // // Makes a BView object for configuring / displaying info about -// this translator. +// this translator. // // Preconditions: // diff --git a/src/add-ons/translators/shared/BaseTranslator.h b/src/add-ons/translators/shared/BaseTranslator.h index c8f10b6410..8e00cae5fa 100644 --- a/src/add-ons/translators/shared/BaseTranslator.h +++ b/src/add-ons/translators/shared/BaseTranslator.h @@ -14,18 +14,18 @@ // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // -// The above copyright notice and this permission notice shall be included +// The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. /*****************************************************************************/ @@ -55,15 +55,15 @@ public: BaseTranslator(const char *name, const char *info, const int32 version, const translation_format *inFormats, int32 inCount, const translation_format *outFormats, int32 outCount, - const char *settingsFile, TranSetting *defaults, int32 defCount, + const char *settingsFile, const TranSetting *defaults, int32 defCount, uint32 tranGroup, uint32 tranType); - + virtual const char *TranslatorName() const; // returns the short name of the translator - + virtual const char *TranslatorInfo() const; // returns a verbose name/description for the translator - + virtual int32 TranslatorVersion() const; // returns the version of the translator @@ -71,7 +71,7 @@ public: const; // returns the input formats and the count of input formats // that this translator supports - + virtual const translation_format *OutputFormats(int32 *out_count) const; // returns the output formats and the count of output formats @@ -89,31 +89,31 @@ public: // this function is the whole point of the Translation Kit, // it translates the data in inSource to outDestination // using the format outType - + virtual status_t GetConfigurationMessage(BMessage *ioExtension); // write the current state of the translator into // the supplied BMessage object - + virtual status_t MakeConfigurationView(BMessage *ioExtension, BView **outView, BRect *outExtent); // creates and returns the view for displaying information // about this translator - + TranslatorSettings *AcquireSettings(); - + // Functions to be implmemented by derived class virtual status_t DerivedIdentify(BPositionIO *inSource, const translation_format *inFormat, BMessage *ioExtension, translator_info *outInfo, uint32 outType); - + virtual status_t DerivedTranslate(BPositionIO *inSource, const translator_info *inInfo, BMessage *ioExtension, uint32 outType, BPositionIO *outDestination, int32 baseType); - + virtual status_t DerivedCanHandleImageSize(float width, float height) const; virtual BView *NewConfigView(TranslatorSettings *settings); - + protected: status_t BitsCheck(BPositionIO *inSource, BMessage *ioExtension, @@ -122,14 +122,14 @@ protected: status_t BitsIdentify(BPositionIO *inSource, const translation_format *inFormat, BMessage *ioExtension, translator_info *outInfo, uint32 outType); - + status_t identify_bits_header(BPositionIO *inSource, translator_info *outInfo, TranslatorBitmap *pheader = NULL); - + status_t BitsTranslate(BPositionIO *inSource, const translator_info *inInfo, BMessage *ioExtension, uint32 outType, BPositionIO *outDestination); - + status_t translate_from_bits_to_bits(BPositionIO *inSource, uint32 outType, BPositionIO *outDestination); @@ -137,9 +137,9 @@ protected: // this is protected because the object is deleted by the // Release() function instead of being deleted directly by // the user - + TranslatorSettings *fSettings; - + private: int32 fVersion; char *fName; diff --git a/src/add-ons/translators/shared/TranslatorSettings.cpp b/src/add-ons/translators/shared/TranslatorSettings.cpp index 9c2d34640c..97c9db2fcb 100644 --- a/src/add-ons/translators/shared/TranslatorSettings.cpp +++ b/src/add-ons/translators/shared/TranslatorSettings.cpp @@ -13,18 +13,18 @@ // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // -// The above copyright notice and this permission notice shall be included +// The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. /*****************************************************************************/ @@ -51,15 +51,15 @@ // Returns: // --------------------------------------------------------------- TranslatorSettings::TranslatorSettings(const char *settingsFile, - TranSetting *defaults, int32 defCount) + const TranSetting *defaults, int32 defCount) : fLock("TranslatorSettings Lock") { if (find_directory(B_USER_SETTINGS_DIRECTORY, &fSettingsPath)) fSettingsPath.SetTo("/tmp"); fSettingsPath.Append(settingsFile); - + fRefCount = 1; - + if (defCount > 0) { fDefaults = defaults; fDefCount = defCount; @@ -67,7 +67,7 @@ TranslatorSettings::TranslatorSettings(const char *settingsFile, fDefaults = NULL; fDefCount = 0; } - + // Add Default Settings // (Used when loading from the settings file or from // a BMessage fails) @@ -78,11 +78,11 @@ TranslatorSettings::TranslatorSettings(const char *settingsFile, fSettingsMsg.AddBool(defs[i].name, static_cast(defs[i].defaultVal)); break; - + case TRAN_SETTING_INT32: fSettingsMsg.AddInt32(defs[i].name, defs[i].defaultVal); break; - + default: // ASSERT here? Erase the bogus setting entry instead? break; @@ -94,7 +94,7 @@ TranslatorSettings::TranslatorSettings(const char *settingsFile, // Acquire // // Returns a pointer to the TranslatorSettings and increments -// the reference count. +// the reference count. // // Preconditions: // @@ -108,12 +108,12 @@ TranslatorSettings * TranslatorSettings::Acquire() { TranslatorSettings *psettings = NULL; - + fLock.Lock(); fRefCount++; psettings = this; fLock.Unlock(); - + return psettings; } @@ -138,7 +138,7 @@ TranslatorSettings * TranslatorSettings::Release() { TranslatorSettings *psettings = NULL; - + fLock.Lock(); fRefCount--; if (fRefCount > 0) { @@ -148,8 +148,8 @@ TranslatorSettings::Release() delete this; // delete this object and // release locks - - return psettings; + + return psettings; } // --------------------------------------------------------------- @@ -188,9 +188,9 @@ status_t TranslatorSettings::LoadSettings() { status_t result; - + fLock.Lock(); - + // Don't try to open the settings file if there are // no settings that need to be loaded if (fDefCount > 0) { @@ -204,9 +204,9 @@ TranslatorSettings::LoadSettings() } } else result = B_OK; - + fLock.Unlock(); - + return result; } @@ -294,9 +294,9 @@ status_t TranslatorSettings::SaveSettings() { status_t result; - + fLock.Lock(); - + // Only write out settings file if there are // actual settings stored by this object if (fDefCount > 0) { @@ -307,9 +307,9 @@ TranslatorSettings::SaveSettings() result = fSettingsMsg.Flatten(&settingsFile); } else result = B_OK; - + fLock.Unlock(); - + return result; } @@ -334,7 +334,7 @@ status_t TranslatorSettings::GetConfigurationMessage(BMessage *pmsg) { status_t result = B_BAD_VALUE; - + if (pmsg) { int32 i; for (i = 0; i < fDefCount; i++) { @@ -345,7 +345,7 @@ TranslatorSettings::GetConfigurationMessage(BMessage *pmsg) if (i == fDefCount) { fLock.Lock(); result = B_OK; - + const TranSetting *defs = fDefaults; for (i = 0; i < fDefCount && result >= B_OK; i++) { switch (defs[i].dataType) { @@ -353,22 +353,22 @@ TranslatorSettings::GetConfigurationMessage(BMessage *pmsg) result = pmsg->AddBool(defs[i].name, SetGetBool(defs[i].name)); break; - + case TRAN_SETTING_INT32: result = pmsg->AddInt32(defs[i].name, SetGetInt32(defs[i].name)); break; - + default: // ASSERT here? Erase the bogus setting entry instead? break; - } + } } - + fLock.Unlock(); } } - + return result; } @@ -420,9 +420,9 @@ bool TranslatorSettings::SetGetBool(const char *name, bool *pbool) { bool bprevValue; - + fLock.Lock(); - + const TranSetting *def = FindTranSetting(name); if (def) { fSettingsMsg.FindBool(def->name, &bprevValue); @@ -430,9 +430,9 @@ TranslatorSettings::SetGetBool(const char *name, bool *pbool) fSettingsMsg.ReplaceBool(def->name, *pbool); } else bprevValue = false; - + fLock.Unlock(); - + return bprevValue; } @@ -458,9 +458,9 @@ int32 TranslatorSettings::SetGetInt32(const char *name, int32 *pint32) { int32 prevValue; - + fLock.Lock(); - + const TranSetting *def = FindTranSetting(name); if (def) { fSettingsMsg.FindInt32(def->name, &prevValue); @@ -468,9 +468,9 @@ TranslatorSettings::SetGetInt32(const char *name, int32 *pint32) fSettingsMsg.ReplaceInt32(def->name, *pint32); } else prevValue = 0; - + fLock.Unlock(); - + return prevValue; } diff --git a/src/add-ons/translators/shared/TranslatorSettings.h b/src/add-ons/translators/shared/TranslatorSettings.h index e4d1f1aac3..2dea72de37 100644 --- a/src/add-ons/translators/shared/TranslatorSettings.h +++ b/src/add-ons/translators/shared/TranslatorSettings.h @@ -13,18 +13,18 @@ // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // -// The above copyright notice and this permission notice shall be included +// The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. /*****************************************************************************/ @@ -49,40 +49,40 @@ struct TranSetting { class TranslatorSettings { public: - TranslatorSettings(const char *settingsFile, TranSetting *defaults, + TranslatorSettings(const char *settingsFile, const TranSetting *defaults, int32 defCount); - + TranslatorSettings *Acquire(); // increments the reference count, returns this TranslatorSettings *Release(); // decrements the reference count, deletes this - // when count reaches zero, returns this when + // when count reaches zero, returns this when // ref count is greater than zero, NULL when // ref count is zero - + status_t LoadSettings(); status_t LoadSettings(BMessage *pmsg); status_t SaveSettings(); status_t GetConfigurationMessage(BMessage *pmsg); - + bool SetGetBool(const char *name, bool *pbool = NULL); int32 SetGetInt32(const char *name, int32 *pint32 = NULL); - + private: const TranSetting *FindTranSetting(const char *name); ~TranslatorSettings(); // private so that Release() must be used // to delete the object - + BLocker fLock; int32 fRefCount; BPath fSettingsPath; // where the settings file will be loaded from / // saved to - + BMessage fSettingsMsg; // the actual settings - + const TranSetting *fDefaults; int32 fDefCount; }; diff --git a/src/add-ons/translators/stxt/STXTTranslator.cpp b/src/add-ons/translators/stxt/STXTTranslator.cpp index 48e308a4a3..6a2eed01fc 100644 --- a/src/add-ons/translators/stxt/STXTTranslator.cpp +++ b/src/add-ons/translators/stxt/STXTTranslator.cpp @@ -32,7 +32,7 @@ using namespace std; #define DATA_BUFFER_SIZE 256 // The input formats that this translator supports. -translation_format gInputFormats[] = { +static const translation_format sInputFormats[] = { { B_TRANSLATOR_TEXT, B_TRANSLATOR_TEXT, @@ -52,7 +52,7 @@ translation_format gInputFormats[] = { }; // The output formats that this translator supports. -translation_format gOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_TEXT, B_TRANSLATOR_TEXT, @@ -72,11 +72,15 @@ translation_format gOutputFormats[] = { }; // Default settings for the Translator -TranSetting gDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false} }; +const uint32 kNumInputFormats = sizeof(sInputFormats) / sizeof(translation_format); +const uint32 kNumOutputFormats = sizeof(sOutputFormats) / sizeof(translation_format); +const uint32 kNumDefaultSettings = sizeof(sDefaultSettings) / sizeof(TranSetting); + // --------------------------------------------------------------- // make_nth_translator // @@ -119,7 +123,7 @@ make_nth_translator(int32 n, image_id you, uint32 flags, ...) * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -129,7 +133,7 @@ make_nth_translator(int32 n, image_id you, uint32 flags, ...) * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * + * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -149,12 +153,12 @@ make_nth_translator(int32 n, image_id you, uint32 flags, ...) if (subtypeMimeSpecific != NULL) { mimeType->SetTo(subtypeMimeSpecific); if (mimeType->IsInstalled()) - found = true; + found = true; } if (!found && subtypeMimeGeneric != NULL) { mimeType->SetTo(subtypeMimeGeneric); if (mimeType->IsInstalled()) - found = true; + found = true; } if (!found) mimeType->SetTo("text/plain"); @@ -195,7 +199,7 @@ file_ascmagic(const unsigned char *buf, size_t nbytes, BMimeType* mimeType, { size_t i; unsigned char *nbuf = NULL; - my_unichar *ubuf = NULL; + my_unichar *ubuf = NULL; size_t ulen; struct names *p; int rv = -1; @@ -260,7 +264,7 @@ file_ascmagic(const unsigned char *buf, size_t nbytes, BMimeType* mimeType, } else if (looks_latin1(buf, nbytes, ubuf, &ulen)) { code = "ISO-8859"; type = "text"; - encoding = "iso-8859-1"; + encoding = "iso-8859-1"; } else if (looks_extended(buf, nbytes, ubuf, &ulen)) { code = "Non-ISO extended-ASCII"; type = "text"; @@ -407,12 +411,12 @@ done: if (subtypeMimeSpecific != NULL) { mimeType->SetTo(subtypeMimeSpecific); if (mimeType->IsInstalled()) - found = true; + found = true; } if (!found && subtypeMimeGeneric != NULL) { mimeType->SetTo(subtypeMimeGeneric); if (mimeType->IsInstalled()) - found = true; + found = true; } if (!found) mimeType->SetTo("text/plain"); @@ -789,19 +793,19 @@ identify_stxt_header(const TranslatorStyledTextStreamHeader &header, { const ssize_t ktxtsize = sizeof(TranslatorStyledTextTextHeader); const ssize_t kstylsize = sizeof(TranslatorStyledTextStyleHeader); - + uint8 buffer[max(ktxtsize, kstylsize)]; - + // Check the TEXT header TranslatorStyledTextTextHeader txtheader; if (inSource->Read(buffer, ktxtsize) != ktxtsize) return B_NO_TRANSLATOR; - + memcpy(&txtheader, buffer, ktxtsize); if (swap_data(B_UINT32_TYPE, &txtheader, ktxtsize, B_SWAP_BENDIAN_TO_HOST) != B_OK) return B_ERROR; - + if (txtheader.header.magic != 'TEXT' || txtheader.header.header_size != sizeof(TranslatorStyledTextTextHeader) || txtheader.charset != B_UNICODE_UTF8) @@ -835,7 +839,7 @@ identify_stxt_header(const TranslatorStyledTextStreamHeader &header, return B_ERROR; if (stylheader.header.magic != 'STYL' - || stylheader.header.header_size != + || stylheader.header.header_size != sizeof(TranslatorStyledTextStyleHeader)) return B_NO_TRANSLATOR; } @@ -943,10 +947,10 @@ translate_from_stxt(BPositionIO *inSource, BPositionIO *outDestination, { if (inSource->Seek(0, SEEK_SET) != 0) return B_ERROR; - + const ssize_t kstxtsize = sizeof(TranslatorStyledTextStreamHeader); const ssize_t ktxtsize = sizeof(TranslatorStyledTextTextHeader); - + bool btoplain; if (outType == B_TRANSLATOR_TEXT) btoplain = true; @@ -954,19 +958,19 @@ translate_from_stxt(BPositionIO *inSource, BPositionIO *outDestination, btoplain = false; else return B_BAD_VALUE; - + uint8 buffer[READ_BUFFER_SIZE]; ssize_t nread = 0, nwritten = 0, nreed = 0, ntotalread = 0; // skip to the actual text data when outputting a // plain text file if (btoplain) { - if (inSource->Seek(kstxtsize + ktxtsize, SEEK_CUR) != + if (inSource->Seek(kstxtsize + ktxtsize, SEEK_CUR) != kstxtsize + ktxtsize) return B_ERROR; } - - // Read data from inSource + + // Read data from inSource // When outputing B_TRANSLATOR_TEXT, the loop stops when all of // the text data has been read and written. // When outputting B_STYLED_TEXT_FORMAT, the loop stops when all @@ -990,7 +994,7 @@ translate_from_stxt(BPositionIO *inSource, BPositionIO *outDestination, nreed = READ_BUFFER_SIZE; nread = inSource->Read(buffer, nreed); } - + if (btoplain && static_cast(txtheader.header.data_size) != ntotalread) // If not all of the text data was able to be read... @@ -1017,10 +1021,10 @@ translate_from_stxt(BPositionIO *inSource, BPositionIO *outDestination, // // Postconditions: // -// Returns: +// Returns: // // B_ERROR, if there was an error writing to outDestination or -// an error with converting the byte order +// an error with converting the byte order // // B_OK, if all went well // --------------------------------------------------------------- @@ -1032,22 +1036,22 @@ output_headers(BPositionIO *outDestination, uint32 text_data_size) status_t result; TranslatorStyledTextStreamHeader stxtheader; TranslatorStyledTextTextHeader txtheader; - + uint8 buffer[kHeadersSize]; - + stxtheader.header.magic = 'STXT'; stxtheader.header.header_size = sizeof(TranslatorStyledTextStreamHeader); stxtheader.header.data_size = 0; stxtheader.version = 100; memcpy(buffer, &stxtheader, stxtheader.header.header_size); - + txtheader.header.magic = 'TEXT'; txtheader.header.header_size = sizeof(TranslatorStyledTextTextHeader); txtheader.header.data_size = text_data_size; txtheader.charset = B_UNICODE_UTF8; memcpy(buffer + stxtheader.header.header_size, &txtheader, txtheader.header.header_size); - + // write out headers in Big Endian byte order result = swap_data(B_UINT32_TYPE, buffer, kHeadersSize, B_SWAP_HOST_TO_BENDIAN); @@ -1059,7 +1063,7 @@ output_headers(BPositionIO *outDestination, uint32 text_data_size) else return B_OK; } - + return result; } @@ -1084,7 +1088,7 @@ output_headers(BPositionIO *outDestination, uint32 text_data_size) // Returns: // // B_ERROR, if there was an error writing to outDestination or -// an error with converting the byte order +// an error with converting the byte order // // B_OK, if all went well // --------------------------------------------------------------- @@ -1093,9 +1097,9 @@ output_styles(BPositionIO *outDestination, uint32 text_size, uint8 *pflatRunArray, ssize_t data_size) { const ssize_t kstylsize = sizeof(TranslatorStyledTextStyleHeader); - + uint8 buffer[kstylsize]; - + // output STYL header TranslatorStyledTextStyleHeader stylheader; stylheader.header.magic = 'STYL'; @@ -1104,19 +1108,19 @@ output_styles(BPositionIO *outDestination, uint32 text_size, stylheader.header.data_size = data_size; stylheader.apply_offset = 0; stylheader.apply_length = text_size; - + memcpy(buffer, &stylheader, kstylsize); if (swap_data(B_UINT32_TYPE, buffer, kstylsize, B_SWAP_HOST_TO_BENDIAN) != B_OK) return B_ERROR; if (outDestination->Write(buffer, kstylsize) != kstylsize) return B_ERROR; - + // output actual style information if (outDestination->Write(pflatRunArray, data_size) != data_size) return B_ERROR; - + return B_OK; } @@ -1290,7 +1294,7 @@ translate_from_text(BPositionIO* source, const char* encoding, bool forceEncodin return status; } - // Read file attributes if outputting styled data + // Read file attributes if outputting styled data // and source is a BNode object if (node == NULL) @@ -1331,10 +1335,10 @@ translate_from_text(BPositionIO* source, const char* encoding, bool forceEncodin STXTTranslator::STXTTranslator() : BaseTranslator("StyledEdit files", "StyledEdit files translator", STXT_TRANSLATOR_VERSION, - gInputFormats, sizeof(gInputFormats) / sizeof(translation_format), - gOutputFormats, sizeof(gOutputFormats) / sizeof(translation_format), + sInputFormats, kNumInputFormats, + sOutputFormats, kNumOutputFormats, "STXTTranslator_Settings", - gDefaultSettings, sizeof(gDefaultSettings) / sizeof(TranSetting), + sDefaultSettings, kNumDefaultSettings, B_TRANSLATOR_TEXT, B_STYLED_TEXT_FORMAT) { } @@ -1354,9 +1358,9 @@ STXTTranslator::Identify(BPositionIO *inSource, outType = B_TRANSLATOR_TEXT; if (outType != B_TRANSLATOR_TEXT && outType != B_STYLED_TEXT_FORMAT) return B_NO_TRANSLATOR; - + const ssize_t kstxtsize = sizeof(TranslatorStyledTextStreamHeader); - + uint8 buffer[DATA_BUFFER_SIZE]; status_t nread = 0; // Read in the header to determine diff --git a/src/add-ons/translators/tga/TGATranslator.cpp b/src/add-ons/translators/tga/TGATranslator.cpp index 5cd65da5b8..6be49f747a 100644 --- a/src/add-ons/translators/tga/TGATranslator.cpp +++ b/src/add-ons/translators/tga/TGATranslator.cpp @@ -12,18 +12,18 @@ // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // -// The above copyright notice and this permission notice shall be included +// The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. /*****************************************************************************/ @@ -35,7 +35,7 @@ #include "StreamBuffer.h" // The input formats that this translator supports. -translation_format gInputFormats[] = { +static const translation_format sInputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -55,7 +55,7 @@ translation_format gInputFormats[] = { }; // The output formats that this translator supports. -translation_format gOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -75,7 +75,7 @@ translation_format gOutputFormats[] = { }; // Default settings for the Translator -TranSetting gDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false}, {TGA_SETTING_RLE, TRAN_SETTING_BOOL, false}, @@ -84,6 +84,11 @@ TranSetting gDefaultSettings[] = { // Don't ignore the alpha channel by default }; +const uint32 kNumInputFormats = sizeof(sInputFormats) / sizeof(translation_format); +const uint32 kNumOutputFormats = sizeof(sOutputFormats) / sizeof(translation_format); +const uint32 kNumDefaultSettings = sizeof(sDefaultSettings) / sizeof(TranSetting); + + // --------------------------------------------------------------- // make_nth_translator // @@ -112,7 +117,7 @@ make_nth_translator(int32 n, image_id you, uint32 flags, ...) BTranslator *ptranslator = NULL; if (!n) ptranslator = new TGATranslator(); - + return ptranslator; } @@ -133,10 +138,10 @@ make_nth_translator(int32 n, image_id you, uint32 flags, ...) TGATranslator::TGATranslator() : BaseTranslator("TGA images", "TGA image translator", TGA_TRANSLATOR_VERSION, - gInputFormats, sizeof(gInputFormats) / sizeof(translation_format), - gOutputFormats, sizeof(gOutputFormats) / sizeof(translation_format), + sInputFormats, kNumInputFormats, + sOutputFormats, kNumOutputFormats, "TGATranslator_Settings", - gDefaultSettings, sizeof(gDefaultSettings) / sizeof(TranSetting), + sDefaultSettings, kNumDefaultSettings, B_TRANSLATOR_BITMAP, B_TGA_FORMAT) { } @@ -172,7 +177,7 @@ TGATranslator::tga_alphabits(TGAFileHeader &filehead, TGAColorMapSpec &mapspec, if (filehead.imagetype == TGA_NOCOMP_COLORMAP || filehead.imagetype == TGA_RLE_COLORMAP) { // color mapped images - + if (mapspec.entrysize == 32) nalpha = 8; else if (mapspec.entrysize == 16) @@ -182,9 +187,9 @@ TGATranslator::tga_alphabits(TGAFileHeader &filehead, TGAColorMapSpec &mapspec, } else { // non-color mapped images - + if (imagespec.depth == 32) - // Some programs that generate 32-bit TGA files + // Some programs that generate 32-bit TGA files // have an alpha channel, but have an incorrect // descriptor which says there are no alpha bits. // This logic is so that the alpha data can be @@ -193,7 +198,7 @@ TGATranslator::tga_alphabits(TGAFileHeader &filehead, TGAColorMapSpec &mapspec, else nalpha = imagespec.descriptor & TGA_DESC_ALPHABITS; } - + return nalpha; } } @@ -246,15 +251,15 @@ identify_tga_header(BPositionIO *inSource, translator_info *outInfo, ssize_t size = TGA_HEADERS_SIZE; if (size > 0 && inSource->Read(buf, size) != size) return B_NO_TRANSLATOR; - + // Read in TGA file header TGAFileHeader fileheader; fileheader.idlength = buf[0]; - + fileheader.colormaptype = buf[1]; if (fileheader.colormaptype > 1) return B_NO_TRANSLATOR; - + fileheader.imagetype = buf[2]; if ((fileheader.imagetype > 3 && fileheader.imagetype < 9) || fileheader.imagetype > 11) @@ -265,14 +270,14 @@ identify_tga_header(BPositionIO *inSource, translator_info *outInfo, fileheader.imagetype != TGA_NOCOMP_COLORMAP && fileheader.imagetype != TGA_RLE_COLORMAP)) return B_NO_TRANSLATOR; - + // Read in TGA color map spec TGAColorMapSpec mapspec; memcpy(&mapspec.firstentry, buf + 3, 2); mapspec.firstentry = B_LENDIAN_TO_HOST_INT16(mapspec.firstentry); if (fileheader.colormaptype == 0 && mapspec.firstentry != 0) return B_NO_TRANSLATOR; - + memcpy(&mapspec.length, buf + 5, 2); mapspec.length = B_LENDIAN_TO_HOST_INT16(mapspec.length); if (fileheader.colormaptype == TGA_NO_COLORMAP && @@ -281,7 +286,7 @@ identify_tga_header(BPositionIO *inSource, translator_info *outInfo, if (fileheader.colormaptype == TGA_COLORMAP && mapspec.length == 0) return B_NO_TRANSLATOR; - + mapspec.entrysize = buf[7]; if (fileheader.colormaptype == TGA_NO_COLORMAP && mapspec.entrysize != 0) @@ -290,25 +295,25 @@ identify_tga_header(BPositionIO *inSource, translator_info *outInfo, mapspec.entrysize != 15 && mapspec.entrysize != 16 && mapspec.entrysize != 24 && mapspec.entrysize != 32) return B_NO_TRANSLATOR; - + // Read in TGA image spec TGAImageSpec imagespec; memcpy(&imagespec.xorigin, buf + 8, 2); imagespec.xorigin = B_LENDIAN_TO_HOST_INT16(imagespec.xorigin); - + memcpy(&imagespec.yorigin, buf + 10, 2); imagespec.yorigin = B_LENDIAN_TO_HOST_INT16(imagespec.yorigin); - + memcpy(&imagespec.width, buf + 12, 2); imagespec.width = B_LENDIAN_TO_HOST_INT16(imagespec.width); if (imagespec.width == 0) return B_NO_TRANSLATOR; - + memcpy(&imagespec.height, buf + 14, 2); imagespec.height = B_LENDIAN_TO_HOST_INT16(imagespec.height); if (imagespec.height == 0) return B_NO_TRANSLATOR; - + imagespec.depth = buf[16]; if (imagespec.depth < 1 || imagespec.depth > 32) return B_NO_TRANSLATOR; @@ -324,7 +329,7 @@ identify_tga_header(BPositionIO *inSource, translator_info *outInfo, if (fileheader.colormaptype == TGA_COLORMAP && imagespec.depth != 8) return B_NO_TRANSLATOR; - + imagespec.descriptor = buf[17]; // images ordered from Right to Left (rather than Left to Right) // are not supported @@ -354,7 +359,7 @@ identify_tga_header(BPositionIO *inSource, translator_info *outInfo, imagespec.depth == 15 && (imagespec.descriptor & TGA_DESC_ALPHABITS) != 0) return B_NO_TRANSLATOR; - + // Fill in headers passed to this function if (pfileheader) { pfileheader->idlength = fileheader.idlength; @@ -374,7 +379,7 @@ identify_tga_header(BPositionIO *inSource, translator_info *outInfo, pimagespec->depth = imagespec.depth; pimagespec->descriptor = imagespec.descriptor; } - + if (outInfo) { outInfo->type = B_TGA_FORMAT; outInfo->group = B_TRANSLATOR_BITMAP; @@ -405,7 +410,7 @@ identify_tga_header(BPositionIO *inSource, translator_info *outInfo, strcat(outInfo->name, ")"); strcpy(outInfo->MIME, "image/x-targa"); } - + return B_OK; } @@ -424,13 +429,13 @@ pix_bits_to_tga(uint8 *pbits, uint8 *ptga, color_space fromspace, uint16 width, const color_map *pmap, int32 bitsBytesPerPixel) { status_t bytescopied = 0; - + switch (fromspace) { case B_RGBA32: bytescopied = width * 4; memcpy(ptga, pbits, bytescopied); break; - + case B_RGBA32_BIG: bytescopied = width * 4; while (width--) { @@ -438,12 +443,12 @@ pix_bits_to_tga(uint8 *pbits, uint8 *ptga, color_space fromspace, ptga[1] = pbits[2]; ptga[2] = pbits[1]; ptga[3] = pbits[0]; - + ptga += 4; pbits += 4; } break; - + case B_CMYA32: bytescopied = width * 4; while (width--) { @@ -451,43 +456,43 @@ pix_bits_to_tga(uint8 *pbits, uint8 *ptga, color_space fromspace, ptga[1] = 255 - pbits[1]; ptga[2] = 255 - pbits[0]; ptga[3] = pbits[3]; - + ptga += 4; pbits += 4; } break; - + case B_RGB32: case B_RGB24: - bytescopied = width * 3; + bytescopied = width * 3; while (width--) { memcpy(ptga, pbits, 3); - + ptga += 3; pbits += bitsBytesPerPixel; } break; - + case B_CMYK32: { int32 comp; bytescopied = width * 3; - while (width--) { + while (width--) { comp = 255 - pbits[2] - pbits[3]; ptga[0] = (comp < 0) ? 0 : comp; - + comp = 255 - pbits[1] - pbits[3]; ptga[1] = (comp < 0) ? 0 : comp; - + comp = 255 - pbits[0] - pbits[3]; ptga[2] = (comp < 0) ? 0 : comp; - + ptga += 3; pbits += 4; } break; } - + case B_CMY32: case B_CMY24: bytescopied = width * 3; @@ -495,12 +500,12 @@ pix_bits_to_tga(uint8 *pbits, uint8 *ptga, color_space fromspace, ptga[0] = 255 - pbits[2]; ptga[1] = 255 - pbits[1]; ptga[2] = 255 - pbits[0]; - + ptga += 3; pbits += bitsBytesPerPixel; } break; - + case B_RGB16: case B_RGB16_BIG: { @@ -521,24 +526,24 @@ pix_bits_to_tga(uint8 *pbits, uint8 *ptga, color_space fromspace, ((val & 0x7e0) >> 3) | ((val & 0x7e0) >> 9); ptga[2] = ((val & 0xf800) >> 8) | ((val & 0xf800) >> 13); - + ptga += 3; pbits += 2; } break; } - + case B_RGBA15: bytescopied = width * 2; memcpy(ptga, pbits, bytescopied); break; - + case B_RGBA15_BIG: bytescopied = width * 2; while (width--) { ptga[0] = pbits[1]; ptga[1] = pbits[0]; - + ptga += 2; pbits += 2; } @@ -550,48 +555,48 @@ pix_bits_to_tga(uint8 *pbits, uint8 *ptga, color_space fromspace, ptga[0] = pbits[0]; ptga[1] = pbits[1] | 0x80; // alpha bit is always 1 - + ptga += 2; pbits += 2; } break; - + case B_RGB15_BIG: bytescopied = width * 2; while (width--) { ptga[0] = pbits[1]; ptga[1] = pbits[0] | 0x80; // alpha bit is always 1 - + ptga += 2; pbits += 2; } break; - + case B_RGB32_BIG: bytescopied = width * 3; while (width--) { ptga[0] = pbits[3]; ptga[1] = pbits[2]; ptga[2] = pbits[1]; - + ptga += 3; pbits += 4; } break; - + case B_RGB24_BIG: bytescopied = width * 3; while (width--) { ptga[0] = pbits[2]; ptga[1] = pbits[1]; ptga[2] = pbits[0]; - + ptga += 3; pbits += 3; } break; - + case B_CMAP8: { rgb_color c; @@ -601,13 +606,13 @@ pix_bits_to_tga(uint8 *pbits, uint8 *ptga, color_space fromspace, ptga[0] = c.blue; ptga[1] = c.green; ptga[2] = c.red; - + ptga += 3; pbits++; } break; } - + case B_GRAY8: // NOTE: this code assumes that the // destination TGA color space is either @@ -615,12 +620,12 @@ pix_bits_to_tga(uint8 *pbits, uint8 *ptga, color_space fromspace, bytescopied = width; memcpy(ptga, pbits, bytescopied); break; - + default: bytescopied = B_ERROR; break; } // switch (fromspace) - + return bytescopied; } @@ -630,7 +635,7 @@ status_t copy_rle_packet(uint8 *ptga, uint32 pixel, uint8 count, color_space fromspace, const color_map *pmap, int32 bitsBytesPerPixel) -{ +{ // copy packet header // (made of type and count) uint8 packethead = (count - 1) | 0x80; @@ -653,13 +658,13 @@ copy_raw_packet(uint8 *ptga, uint8 *praw, uint8 count, uint8 packethead = count - 1; ptga[0] = packethead; ptga++; - + return pix_bits_to_tga(praw, ptga, fromspace, count, pmap, bitsBytesPerPixel) + 1; } // convert a row of pixel data from pbits to a -// row of pixel data in the TGA format using +// row of pixel data in the TGA format using // Run Length Encoding status_t pix_bits_to_tgarle(uint8 *pbits, uint8 *ptga, color_space fromspace, @@ -667,7 +672,7 @@ pix_bits_to_tgarle(uint8 *pbits, uint8 *ptga, color_space fromspace, { if (width == 0) return B_ERROR; - + uint32 current = 0, next = 0, aftnext = 0; uint16 nread = 0; status_t result, bytescopied = 0; @@ -676,17 +681,17 @@ pix_bits_to_tgarle(uint8 *pbits, uint8 *ptga, color_space fromspace, praw = prawbuf; if (!prawbuf) return B_ERROR; - + uint8 rlecount = 1, rawcount = 0; bool bJustWroteRLE = false; - + memcpy(¤t, pbits, bitsBytesPerPixel); pbits += bitsBytesPerPixel; if (width == 1) { result = copy_raw_packet(ptga, reinterpret_cast (¤t), 1, fromspace, pmap, bitsBytesPerPixel); - + ptga += result; bytescopied += result; nread++; @@ -697,82 +702,82 @@ pix_bits_to_tgarle(uint8 *pbits, uint8 *ptga, color_space fromspace, pbits += bitsBytesPerPixel; nread++; } - + while (nread < width) { - + if (nread < width - 1) { memcpy(&aftnext, pbits, bitsBytesPerPixel); pbits += bitsBytesPerPixel; } - nread++; - + nread++; + // RLE Packet Creation if (current == next && !bJustWroteRLE) { rlecount++; - + if (next != aftnext || nread == width || rlecount == 128) { result = copy_rle_packet(ptga, current, rlecount, fromspace, pmap, bitsBytesPerPixel); - + ptga += result; bytescopied += result; rlecount = 1; bJustWroteRLE = true; } - + // RAW Packet Creation } else { - + if (!bJustWroteRLE) { // output the current pixel only if - // it was not just written out in an RLE packet + // it was not just written out in an RLE packet rawcount++; memcpy(praw, ¤t, bitsBytesPerPixel); praw += bitsBytesPerPixel; } - + if (nread == width) { // if in the last iteration of the loop, // "next" will be the last pixel in the row, // and will need to be written out for this // special case - + if (rawcount == 128) { result = copy_raw_packet(ptga, prawbuf, rawcount, fromspace, pmap, bitsBytesPerPixel); - + ptga += result; bytescopied += result; praw = prawbuf; rawcount = 0; } - + rawcount++; memcpy(praw, &next, bitsBytesPerPixel); praw += bitsBytesPerPixel; } - + if ((!bJustWroteRLE && next == aftnext) || nread == width || rawcount == 128) { result = copy_raw_packet(ptga, prawbuf, rawcount, fromspace, pmap, bitsBytesPerPixel); - + ptga += result; bytescopied += result; praw = prawbuf; rawcount = 0; } - + bJustWroteRLE = false; } current = next; next = aftnext; } - + delete[] prawbuf; prawbuf = NULL; - + return bytescopied; } @@ -805,7 +810,7 @@ pix_bits_to_tgarle(uint8 *pbits, uint8 *ptga, color_space fromspace, // B_OK, if no errors occurred // --------------------------------------------------------------- status_t -translate_from_bits_to_tgatc(BPositionIO *inSource, +translate_from_bits_to_tgatc(BPositionIO *inSource, BPositionIO *outDestination, color_space fromspace, TGAImageSpec &imagespec, bool brle) { @@ -820,13 +825,13 @@ translate_from_bits_to_tgatc(BPositionIO *inSource, case B_CMYK32: bitsBytesPerPixel = 4; break; - + case B_RGB24: case B_RGB24_BIG: case B_CMY24: bitsBytesPerPixel = 3; break; - + case B_RGB16: case B_RGB16_BIG: case B_RGBA15: @@ -835,12 +840,12 @@ translate_from_bits_to_tgatc(BPositionIO *inSource, case B_RGB15_BIG: bitsBytesPerPixel = 2; break; - + case B_CMAP8: case B_GRAY8: bitsBytesPerPixel = 1; break; - + default: return B_ERROR; } @@ -859,18 +864,18 @@ translate_from_bits_to_tgatc(BPositionIO *inSource, tgaRowData = NULL; return B_ERROR; } - + // conversion function pointer, points to either // RLE or normal TGA conversion function status_t (*convert_to_tga)(uint8 *pbits, uint8 *ptga, color_space fromspace, uint16 width, const color_map *pmap, int32 bitsBytesPerPixel); - + if (brle) convert_to_tga = pix_bits_to_tgarle; else convert_to_tga = pix_bits_to_tga; - + ssize_t rd = inSource->Read(bitsRowData, bitsRowBytes); const color_map *pmap = NULL; if (fromspace == B_CMAP8) { @@ -885,18 +890,18 @@ translate_from_bits_to_tgatc(BPositionIO *inSource, status_t bytescopied; bytescopied = convert_to_tga(bitsRowData, tgaRowData, fromspace, imagespec.width, pmap, bitsBytesPerPixel); - + outDestination->Write(tgaRowData, bytescopied); tgapixrow++; // if I've read all of the pixel data, break - // out of the loop so I don't try to read + // out of the loop so I don't try to read // non-pixel data if (tgapixrow == imagespec.height) break; rd = inSource->Read(bitsRowData, bitsRowBytes); } // while (rd == bitsRowBytes) - + delete[] bitsRowData; bitsRowData = NULL; delete[] tgaRowData; @@ -908,7 +913,7 @@ translate_from_bits_to_tgatc(BPositionIO *inSource, // --------------------------------------------------------------- // translate_from_bits1_to_tgabw // -// Converts 1-bit Be Bitmaps ('bits') to the +// Converts 1-bit Be Bitmaps ('bits') to the // black and white (8-bit grayscale) TGA format // // Preconditions: @@ -946,7 +951,7 @@ translate_from_bits1_to_tgabw(BPositionIO *inSource, uint8 *tgaRowData = new uint8[tgaRowBytes]; if (!tgaRowData) return B_ERROR; - + uint8 *medRowData = new uint8[imagespec.width]; if (!medRowData) { delete[] tgaRowData; @@ -961,22 +966,22 @@ translate_from_bits1_to_tgabw(BPositionIO *inSource, tgaRowData = NULL; return B_ERROR; } - + // conversion function pointer, points to either // RLE or normal TGA conversion function status_t (*convert_to_tga)(uint8 *pbits, uint8 *ptga, color_space fromspace, uint16 width, const color_map *pmap, int32 bitsBytesPerPixel); - + if (brle) convert_to_tga = pix_bits_to_tgarle; else convert_to_tga = pix_bits_to_tga; - + ssize_t rd = inSource->Read(bitsRowData, bitsRowBytes); while (rd == bitsRowBytes) { uint32 tgapixcol = 0; - for (int32 i = 0; (tgapixcol < imagespec.width) && + for (int32 i = 0; (tgapixcol < imagespec.width) && (i < bitsRowBytes); i++) { // process each byte in the row uint8 pixels = bitsRowData[i]; @@ -993,22 +998,22 @@ translate_from_bits1_to_tgabw(BPositionIO *inSource, tgapixcol++; } } - + status_t bytescopied; bytescopied = convert_to_tga(medRowData, tgaRowData, B_GRAY8, imagespec.width, NULL, 1); - + outDestination->Write(tgaRowData, bytescopied); tgapixrow++; // if I've read all of the pixel data, break - // out of the loop so I don't try to read + // out of the loop so I don't try to read // non-pixel data if (tgapixrow == imagespec.height) break; rd = inSource->Read(bitsRowData, bitsRowBytes); } // while (rd == bitsRowBytes) - + delete[] bitsRowData; bitsRowData = NULL; delete[] medRowData; @@ -1046,18 +1051,18 @@ write_tga_headers(BPositionIO *outDestination, TGAFileHeader &fileheader, TGAColorMapSpec &mapspec, TGAImageSpec &imagespec) { uint8 tgaheaders[TGA_HEADERS_SIZE]; - + // Convert host format headers to Little Endian (Intel) byte order TGAFileHeader outFileheader; outFileheader.idlength = fileheader.idlength; outFileheader.colormaptype = fileheader.colormaptype; outFileheader.imagetype = fileheader.imagetype; - + TGAColorMapSpec outMapspec; outMapspec.firstentry = B_HOST_TO_LENDIAN_INT16(mapspec.firstentry); outMapspec.length = B_HOST_TO_LENDIAN_INT16(mapspec.length); outMapspec.entrysize = mapspec.entrysize; - + TGAImageSpec outImagespec; outImagespec.xorigin = B_HOST_TO_LENDIAN_INT16(imagespec.xorigin); outImagespec.yorigin = B_HOST_TO_LENDIAN_INT16(imagespec.yorigin); @@ -1065,27 +1070,27 @@ write_tga_headers(BPositionIO *outDestination, TGAFileHeader &fileheader, outImagespec.height = B_HOST_TO_LENDIAN_INT16(imagespec.height); outImagespec.depth = imagespec.depth; outImagespec.descriptor = imagespec.descriptor; - + // Copy TGA headers to buffer to be written out // all at once tgaheaders[0] = outFileheader.idlength; tgaheaders[1] = outFileheader.colormaptype; tgaheaders[2] = outFileheader.imagetype; - + memcpy(tgaheaders + 3, &outMapspec.firstentry, 2); memcpy(tgaheaders + 5, &outMapspec.length, 2); tgaheaders[7] = outMapspec.entrysize; - + memcpy(tgaheaders + 8, &outImagespec.xorigin, 2); memcpy(tgaheaders + 10, &outImagespec.yorigin, 2); memcpy(tgaheaders + 12, &outImagespec.width, 2); memcpy(tgaheaders + 14, &outImagespec.height, 2); tgaheaders[16] = outImagespec.depth; tgaheaders[17] = outImagespec.descriptor; - + ssize_t written; written = outDestination->Write(tgaheaders, TGA_HEADERS_SIZE); - + if (written == TGA_HEADERS_SIZE) return B_OK; else @@ -1115,14 +1120,14 @@ write_tga_footer(BPositionIO *outDestination) { const int32 kfootersize = 26; uint8 footer[kfootersize]; - + memset(footer, 0, 8); // set the Extension Area Offset and Developer // Area Offset to zero (as they are not present) memcpy(footer + 8, "TRUEVISION-XFILE.", 18); // copy the string including the '.' and the '\0' - + ssize_t written; written = outDestination->Write(footer, kfootersize); if (written == kfootersize) @@ -1169,7 +1174,7 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, TranslatorBitmap bitsHeader; bool bheaderonly = false, bdataonly = false, brle; brle = fSettings->SetGetBool(TGA_SETTING_RLE); - + status_t result; result = identify_bits_header(inSource, NULL, &bitsHeader); if (result != B_OK) @@ -1182,12 +1187,12 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, fileheader.idlength = 0; fileheader.colormaptype = TGA_NO_COLORMAP; fileheader.imagetype = 0; - + TGAColorMapSpec mapspec; mapspec.firstentry = 0; mapspec.length = 0; mapspec.entrysize = 0; - + TGAImageSpec imagespec; imagespec.xorigin = 0; imagespec.yorigin = 0; @@ -1195,10 +1200,10 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, imagespec.height = static_cast (bitsHeader.bounds.Height() + 1); imagespec.depth = 0; imagespec.descriptor = TGA_ORIGIN_VERT_BIT; - + // determine fileSize / imagesize switch (bitsHeader.colors) { - + // Output to 32-bit True Color TGA (8 bits alpha) case B_RGBA32: case B_RGBA32_BIG: @@ -1211,7 +1216,7 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, imagespec.descriptor |= 8; // 8 bits of alpha break; - + // Output to 24-bit True Color TGA (no alpha) case B_RGB32: case B_RGB32_BIG: @@ -1226,20 +1231,20 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, fileheader.imagetype = TGA_NOCOMP_TRUECOLOR; imagespec.depth = 24; break; - + // Output to 16-bit True Color TGA (no alpha) // (TGA doesn't see 16 bit images as Be does // so converting 16 bit Be Image to 16-bit TGA // image would result in loss of quality) case B_RGB16: - case B_RGB16_BIG: + case B_RGB16_BIG: if (brle) fileheader.imagetype = TGA_RLE_TRUECOLOR; else fileheader.imagetype = TGA_NOCOMP_TRUECOLOR; imagespec.depth = 24; break; - + // Output to 15-bit True Color TGA (1 bit alpha) case B_RGB15: case B_RGB15_BIG: @@ -1251,7 +1256,7 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, imagespec.descriptor |= 1; // 1 bit of alpha (always opaque) break; - + // Output to 16-bit True Color TGA (1 bit alpha) case B_RGBA15: case B_RGBA15_BIG: @@ -1263,7 +1268,7 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, imagespec.descriptor |= 1; // 1 bit of alpha break; - + // Output to 8-bit Color Mapped TGA 32 bits per color map entry case B_CMAP8: fileheader.colormaptype = TGA_COLORMAP; @@ -1278,7 +1283,7 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, imagespec.descriptor |= 8; // the pixel values contain 8 bits of attribute data break; - + // Output to 8-bit Black and White TGA case B_GRAY8: case B_GRAY1: @@ -1288,11 +1293,11 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, fileheader.imagetype = TGA_NOCOMP_BW; imagespec.depth = 8; break; - + default: return B_NO_TRANSLATOR; } - + // write out the TGA headers if (bheaderonly || (!bheaderonly && !bdataonly)) { result = write_tga_headers(outDestination, fileheader, @@ -1326,7 +1331,7 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, result = translate_from_bits_to_tgatc(inSource, outDestination, bitsHeader.colors, imagespec, brle); break; - + case B_CMAP8: { // write Be's system palette to the TGA file @@ -1349,32 +1354,32 @@ TGATranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, B_GRAY8, imagespec, brle); break; } - + case B_GRAY8: result = translate_from_bits_to_tgatc(inSource, outDestination, B_GRAY8, imagespec, brle); break; - + case B_GRAY1: result = translate_from_bits1_to_tgabw(inSource, outDestination, bitsHeader.rowBytes, imagespec, brle); break; - + default: result = B_NO_TRANSLATOR; break; } - + if (result == B_OK) result = write_tga_footer(outDestination); - + return result; } else return B_NO_TRANSLATOR; } -// convert a row of uncompressed, non-color mapped +// convert a row of uncompressed, non-color mapped // TGA pixels from ptga to pbits status_t pix_tganm_to_bits(uint8 *pbits, uint8 *ptga, @@ -1396,22 +1401,22 @@ pix_tganm_to_bits(uint8 *pbits, uint8 *ptga, } else { while (width--) { memcpy(pbits, ptga, 3); - + pbits += 4; ptga += tgaBytesPerPixel; } } break; - + case 24: while (width--) { memcpy(pbits, ptga, 3); - + pbits += 4; ptga += tgaBytesPerPixel; } break; - + case 16: { uint16 val; @@ -1425,7 +1430,7 @@ pix_tganm_to_bits(uint8 *pbits, uint8 *ptga, pbits[2] = ((val & 0x7c00) >> 7) | ((val & 0x7c00) >> 12); pbits[3] = (val & 0x8000) ? 255 : 0; - + pbits += 4; ptga += tgaBytesPerPixel; } @@ -1438,14 +1443,14 @@ pix_tganm_to_bits(uint8 *pbits, uint8 *ptga, ((val & 0x3e0) >> 2) | ((val & 0x3e0) >> 7); pbits[2] = ((val & 0x7c00) >> 7) | ((val & 0x7c00) >> 12); - + pbits += 4; ptga += tgaBytesPerPixel; } } break; } - + case 15: { uint16 val; @@ -1457,27 +1462,27 @@ pix_tganm_to_bits(uint8 *pbits, uint8 *ptga, ((val & 0x3e0) >> 2) | ((val & 0x3e0) >> 7); pbits[2] = ((val & 0x7c00) >> 7) | ((val & 0x7c00) >> 12); - + pbits += 4; ptga += tgaBytesPerPixel; } break; } - + case 8: while (width--) { memset(pbits, ptga[0], 3); - + pbits += 4; ptga += tgaBytesPerPixel; } break; - + default: result = B_ERROR; break; } - + return result; } @@ -1523,11 +1528,11 @@ TGATranslator::translate_from_tganm_to_bits(BPositionIO *inSource, ((imagespec.depth % 8) ? 1 : 0); int32 tgaRowBytes = (imagespec.width * tgaBytesPerPixel); uint32 tgapixrow = 0; - + // Setup outDestination so that it can be written to // from the end of the file to the beginning instead of // the other way around - off_t bitsFileSize = (bitsRowBytes * imagespec.height) + + off_t bitsFileSize = (bitsRowBytes * imagespec.height) + sizeof(TranslatorBitmap); if (outDestination->SetSize(bitsFileSize) != B_OK) // This call should work for BFile and BMallocIO objects, @@ -1536,7 +1541,7 @@ TGATranslator::translate_from_tganm_to_bits(BPositionIO *inSource, off_t bitsoffset = (imagespec.height - 1) * bitsRowBytes; if (bvflip) outDestination->Seek(bitsoffset, SEEK_CUR); - + // allocate row buffers uint8 *tgaRowData = new uint8[tgaRowBytes]; if (!tgaRowData) @@ -1553,13 +1558,13 @@ TGATranslator::translate_from_tganm_to_bits(BPositionIO *inSource, ssize_t rd = inSource->Read(tgaRowData, tgaRowBytes); while (rd == tgaRowBytes) { pix_tganm_to_bits(bitsRowData, tgaRowData, - imagespec.width, imagespec.depth, + imagespec.width, imagespec.depth, tgaBytesPerPixel, nalpha); - + outDestination->Write(bitsRowData, bitsRowBytes); tgapixrow++; // if I've read all of the pixel data, break - // out of the loop so I don't try to read + // out of the loop so I don't try to read // non-pixel data if (tgapixrow == imagespec.height) break; @@ -1568,7 +1573,7 @@ TGATranslator::translate_from_tganm_to_bits(BPositionIO *inSource, outDestination->Seek(-(bitsRowBytes * 2), SEEK_CUR); rd = inSource->Read(tgaRowData, tgaRowBytes); } - + delete[] tgaRowData; tgaRowData = NULL; delete[] bitsRowData; @@ -1609,7 +1614,7 @@ TGATranslator::translate_from_tganmrle_to_bits(BPositionIO *inSource, TGAColorMapSpec &mapspec, TGAImageSpec &imagespec) { status_t result = B_OK; - + bool bvflip; if (imagespec.descriptor & TGA_ORIGIN_VERT_BIT) bvflip = false; @@ -1620,11 +1625,11 @@ TGATranslator::translate_from_tganmrle_to_bits(BPositionIO *inSource, uint8 tgaBytesPerPixel = (imagespec.depth / 8) + ((imagespec.depth % 8) ? 1 : 0); uint16 tgapixrow = 0, tgapixcol = 0; - + // Setup outDestination so that it can be written to // from the end of the file to the beginning instead of // the other way around - off_t bitsFileSize = (bitsRowBytes * imagespec.height) + + off_t bitsFileSize = (bitsRowBytes * imagespec.height) + sizeof(TranslatorBitmap); if (outDestination->SetSize(bitsFileSize) != B_OK) // This call should work for BFile and BMallocIO objects, @@ -1633,7 +1638,7 @@ TGATranslator::translate_from_tganmrle_to_bits(BPositionIO *inSource, off_t bitsoffset = (imagespec.height - 1) * bitsRowBytes; if (bvflip) outDestination->Seek(bitsoffset, SEEK_CUR); - + // allocate row buffers uint8 *bitsRowData = new uint8[bitsRowBytes]; if (!bitsRowData) @@ -1660,14 +1665,14 @@ TGATranslator::translate_from_tganmrle_to_bits(BPositionIO *inSource, if (rd == tgaBytesPerPixel) { pix_tganm_to_bits(pbitspixel, tgapixel, rlecount, imagespec.depth, 0, nalpha); - + pbitspixel += 4 * rlecount; tgapixcol += rlecount; } else { result = B_NO_TRANSLATOR; break; // error } - + // Raw Packet } else { uint8 tgaPixelBuf[512], rawcount; @@ -1690,7 +1695,7 @@ TGATranslator::translate_from_tganmrle_to_bits(BPositionIO *inSource, break; } } - + if (tgapixcol == imagespec.width) { outDestination->Write(bitsRowData, bitsRowBytes); tgapixcol = 0; @@ -1703,7 +1708,7 @@ TGATranslator::translate_from_tganmrle_to_bits(BPositionIO *inSource, } rd = sbuf.Read(&packethead, 1); } - + delete[] bitsRowData; bitsRowData = NULL; @@ -1723,28 +1728,28 @@ pix_tgam_to_bits(uint8 *pbits, uint8 *ptgaindices, for (uint16 i = 0; i < width; i++) { ptgapixel = pmap + (ptgaindices[i] * 4); - + memcpy(pbits, ptgapixel, 4); - + pbits += 4; } break; - + case 24: for (uint16 i = 0; i < width; i++) { ptgapixel = pmap + (ptgaindices[i] * 3); - + memcpy(pbits, ptgapixel, 3); - + pbits += 4; } break; - + case 16: for (uint16 i = 0; i < width; i++) { uint16 val; - + ptgapixel = pmap + (ptgaindices[i] * 2); val = ptgapixel[0] + (ptgapixel[1] << 8); @@ -1755,15 +1760,15 @@ pix_tgam_to_bits(uint8 *pbits, uint8 *ptgaindices, pbits[2] = ((val & 0x7c00) >> 7) | ((val & 0x7c00) >> 12); pbits[3] = (val & 0x8000) ? 255 : 0; - + pbits += 4; } break; - + case 15: for (uint16 i = 0; i < width; i++) { uint16 val; - + ptgapixel = pmap + (ptgaindices[i] * 2); val = ptgapixel[0] + (ptgapixel[1] << 8); @@ -1773,16 +1778,16 @@ pix_tgam_to_bits(uint8 *pbits, uint8 *ptgaindices, ((val & 0x3e0) >> 2) | ((val & 0x3e0) >> 7); pbits[2] = ((val & 0x7c00) >> 7) | ((val & 0x7c00) >> 12); - + pbits += 4; } break; - + default: result = B_ERROR; break; } - + return result; } @@ -1826,11 +1831,11 @@ translate_from_tgam_to_bits(BPositionIO *inSource, ((imagespec.depth % 8) ? 1 : 0); int32 tgaRowBytes = (imagespec.width * tgaBytesPerPixel); uint32 tgapixrow = 0; - + // Setup outDestination so that it can be written to // from the end of the file to the beginning instead of // the other way around - off_t bitsFileSize = (bitsRowBytes * imagespec.height) + + off_t bitsFileSize = (bitsRowBytes * imagespec.height) + sizeof(TranslatorBitmap); if (outDestination->SetSize(bitsFileSize) != B_OK) // This call should work for BFile and BMallocIO objects, @@ -1839,7 +1844,7 @@ translate_from_tgam_to_bits(BPositionIO *inSource, off_t bitsoffset = (imagespec.height - 1) * bitsRowBytes; if (bvflip) outDestination->Seek(bitsoffset, SEEK_CUR); - + // allocate row buffers uint8 *tgaRowData = new uint8[tgaRowBytes]; if (!tgaRowData) @@ -1857,11 +1862,11 @@ translate_from_tgam_to_bits(BPositionIO *inSource, while (rd == tgaRowBytes) { pix_tgam_to_bits(bitsRowData, tgaRowData, imagespec.width, mapspec.entrysize, pmap); - + outDestination->Write(bitsRowData, bitsRowBytes); tgapixrow++; // if I've read all of the pixel data, break - // out of the loop so I don't try to read + // out of the loop so I don't try to read // non-pixel data if (tgapixrow == imagespec.height) break; @@ -1870,7 +1875,7 @@ translate_from_tgam_to_bits(BPositionIO *inSource, outDestination->Seek(-(bitsRowBytes * 2), SEEK_CUR); rd = inSource->Read(tgaRowData, tgaRowBytes); } - + delete[] tgaRowData; tgaRowData = NULL; delete[] bitsRowData; @@ -1912,7 +1917,7 @@ TGATranslator::translate_from_tgamrle_to_bits(BPositionIO *inSource, TGAColorMapSpec &mapspec, TGAImageSpec &imagespec, uint8 *pmap) { status_t result = B_OK; - + bool bvflip; if (imagespec.descriptor & TGA_ORIGIN_VERT_BIT) bvflip = false; @@ -1925,11 +1930,11 @@ TGATranslator::translate_from_tgamrle_to_bits(BPositionIO *inSource, uint8 tgaBytesPerPixel = (imagespec.depth / 8) + ((imagespec.depth % 8) ? 1 : 0); uint16 tgapixrow = 0, tgapixcol = 0; - + // Setup outDestination so that it can be written to // from the end of the file to the beginning instead of // the other way around - off_t bitsFileSize = (bitsRowBytes * imagespec.height) + + off_t bitsFileSize = (bitsRowBytes * imagespec.height) + sizeof(TranslatorBitmap); if (outDestination->SetSize(bitsFileSize) != B_OK) // This call should work for BFile and BMallocIO objects, @@ -1938,7 +1943,7 @@ TGATranslator::translate_from_tgamrle_to_bits(BPositionIO *inSource, off_t bitsoffset = (imagespec.height - 1) * bitsRowBytes; if (bvflip) outDestination->Seek(bitsoffset, SEEK_CUR); - + // allocate row buffers uint8 *bitsRowData = new uint8[bitsRowBytes]; if (!bitsRowData) @@ -1965,17 +1970,17 @@ TGATranslator::translate_from_tgamrle_to_bits(BPositionIO *inSource, if (rd == tgaBytesPerPixel) { uint8 *ptgapixel; ptgapixel = pmap + (tgaindex * tgaPalBytesPerPixel); - + pix_tganm_to_bits(pbitspixel, ptgapixel, rlecount, mapspec.entrysize, 0, nalpha); - + pbitspixel += 4 * rlecount; tgapixcol += rlecount; } else { result = B_NO_TRANSLATOR; break; // error } - + // Raw Packet } else { uint8 tgaIndexBuf[128], rawcount; @@ -1996,7 +2001,7 @@ TGATranslator::translate_from_tgamrle_to_bits(BPositionIO *inSource, break; } } - + if (tgapixcol == imagespec.width) { outDestination->Write(bitsRowData, bitsRowBytes); tgapixcol = 0; @@ -2009,7 +2014,7 @@ TGATranslator::translate_from_tgamrle_to_bits(BPositionIO *inSource, } rd = sbuf.Read(&packethead, 1); } - + delete[] bitsRowData; bitsRowData = NULL; @@ -2060,8 +2065,8 @@ TGATranslator::translate_from_tga(BPositionIO *inSource, uint32 outType, &imagespec); if (result != B_OK) return result; - - // if the user wants to translate a TGA to a TGA, easy enough :) + + // if the user wants to translate a TGA to a TGA, easy enough :) if (outType == B_TGA_FORMAT) { // write out the TGA headers if (bheaderonly || (!bheaderonly && !bdataonly)) { @@ -2071,10 +2076,10 @@ TGATranslator::translate_from_tga(BPositionIO *inSource, uint32 outType, return result; } if (bheaderonly) - // if the user only wants the header, + // if the user only wants the header, // bail before it is written return result; - + const int32 kbuflen = 1024; uint8 buf[kbuflen]; ssize_t rd = inSource->Read(buf, kbuflen); @@ -2086,7 +2091,7 @@ TGATranslator::translate_from_tga(BPositionIO *inSource, uint32 outType, return B_OK; else return B_ERROR; - + // if translating a TGA to a Be Bitmap } else if (outType == B_TRANSLATOR_BITMAP) { TranslatorBitmap bitsHeader; @@ -2095,12 +2100,12 @@ TGATranslator::translate_from_tga(BPositionIO *inSource, uint32 outType, bitsHeader.bounds.top = 0; bitsHeader.bounds.right = imagespec.width - 1; bitsHeader.bounds.bottom = imagespec.height - 1; - + // skip over Image ID data (if present) if (fileheader.idlength > 0) inSource->Seek(fileheader.idlength, SEEK_CUR); - - // read in palette and/or skip non-TGA data + + // read in palette and/or skip non-TGA data uint8 *ptgapalette = NULL; if (fileheader.colormaptype == TGA_COLORMAP) { uint32 nentrybytes; @@ -2120,7 +2125,7 @@ TGATranslator::translate_from_tga(BPositionIO *inSource, uint32 outType, bitsHeader.colors = B_RGB32; int32 datasize = bitsHeader.rowBytes * imagespec.height; bitsHeader.dataSize = datasize; - + // write out Be's Bitmap header if (bheaderonly || (!bheaderonly && !bdataonly)) { if (swap_data(B_UINT32_TYPE, &bitsHeader, @@ -2129,10 +2134,10 @@ TGATranslator::translate_from_tga(BPositionIO *inSource, uint32 outType, outDestination->Write(&bitsHeader, sizeof(TranslatorBitmap)); } if (bheaderonly) - // if the user only wants the header, + // if the user only wants the header, // bail before the data is written return B_OK; - + // write out the actual image data switch (fileheader.imagetype) { case TGA_NOCOMP_TRUECOLOR: @@ -2140,38 +2145,38 @@ TGATranslator::translate_from_tga(BPositionIO *inSource, uint32 outType, result = translate_from_tganm_to_bits(inSource, outDestination, fileheader, mapspec, imagespec); break; - + case TGA_NOCOMP_COLORMAP: result = translate_from_tgam_to_bits(inSource, outDestination, mapspec, imagespec, ptgapalette); break; - + case TGA_RLE_TRUECOLOR: case TGA_RLE_BW: result = translate_from_tganmrle_to_bits(inSource, outDestination, fileheader, mapspec, imagespec); break; - + case TGA_RLE_COLORMAP: result = translate_from_tgamrle_to_bits(inSource, outDestination, fileheader, mapspec, imagespec, ptgapalette); break; - + default: result = B_NO_TRANSLATOR; break; } - + delete[] ptgapalette; ptgapalette = NULL; - + return result; - + } else return B_NO_TRANSLATOR; } -status_t +status_t TGATranslator::DerivedTranslate(BPositionIO *inSource, const translator_info *inInfo, BMessage *ioExtension, uint32 outType, BPositionIO *outDestination, int32 baseType) diff --git a/src/add-ons/translators/tiff/TIFFTranslator.cpp b/src/add-ons/translators/tiff/TIFFTranslator.cpp index ad2adfc3bb..b51d37412d 100644 --- a/src/add-ons/translators/tiff/TIFFTranslator.cpp +++ b/src/add-ons/translators/tiff/TIFFTranslator.cpp @@ -19,7 +19,7 @@ /*! How this works: - + libtiff has a special version of TIFFOpen() that gets passed custom functions for reading writing etc. and a handle. This handle in our case is a BPositionIO object, which libtiff passes on to the functions for reading @@ -30,7 +30,7 @@ // The input formats that this translator supports. -translation_format gInputFormats[] = { +static const translation_format sInputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -50,7 +50,7 @@ translation_format gInputFormats[] = { }; // The output formats that this translator supports. -translation_format gOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -70,13 +70,18 @@ translation_format gOutputFormats[] = { }; // Default settings for the Translator -TranSetting gDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false}, {TIFF_SETTING_COMPRESSION, TRAN_SETTING_INT32, COMPRESSION_LZW} // Compression is LZW by default }; +const uint32 kNumInputFormats = sizeof(sInputFormats) / sizeof(translation_format); +const uint32 kNumOutputFormats = sizeof(sOutputFormats) / sizeof(translation_format); +const uint32 kNumDefaultSettings = sizeof(sDefaultSettings) / sizeof(TranSetting); + + // --------------------------------------------------------------- // make_nth_translator // @@ -118,7 +123,7 @@ tiff_get_pio(thandle_t stream) pio = static_cast(stream); if (!pio) debugger("pio is NULL"); - + return pio; } @@ -155,7 +160,7 @@ tiff_size_proc(thandle_t stream) cur = pio->Position(); end = pio->Seek(0, SEEK_END); pio->Seek(cur, SEEK_SET); - + return end; } @@ -177,10 +182,10 @@ status_t identify_tiff_header(BPositionIO *inSource, BMessage *ioExtension, translator_info *outInfo, uint32 outType, TIFF **poutTIFF = NULL) { - // get TIFF handle + // get TIFF handle TIFF* tif = TIFFClientOpen("TIFFTranslator", "r", inSource, tiff_read_proc, tiff_write_proc, tiff_seek_proc, tiff_close_proc, - tiff_size_proc, tiff_map_file_proc, tiff_unmap_file_proc); + tiff_size_proc, tiff_map_file_proc, tiff_unmap_file_proc); if (!tif) return B_NO_TRANSLATOR; @@ -234,7 +239,7 @@ identify_tiff_header(BPositionIO *inSource, BMessage *ioExtension, return B_OK; } - + // How this works: // Following are a couple of functions, @@ -593,10 +598,10 @@ write_tif_stream(TIFF* tif, BPositionIO* inSource, color_space format, TIFFTranslator::TIFFTranslator() : BaseTranslator("TIFF images", "TIFF image translator", TIFF_TRANSLATOR_VERSION, - gInputFormats, sizeof(gInputFormats) / sizeof(translation_format), - gOutputFormats, sizeof(gOutputFormats) / sizeof(translation_format), + sInputFormats, kNumInputFormats, + sOutputFormats, kNumOutputFormats, "TIFFTranslator_Settings", - gDefaultSettings, sizeof(gDefaultSettings) / sizeof(TranSetting), + sDefaultSettings, kNumDefaultSettings, B_TRANSLATOR_BITMAP, B_TIFF_FORMAT) { // TODO: for now! @@ -630,15 +635,15 @@ TIFFTranslator::translate_from_bits(BPositionIO *inSource, uint32 outType, result = identify_bits_header(inSource, NULL, &bitsHeader); if (result != B_OK) return result; - + // Translate B_TRANSLATOR_BITMAP to B_TIFF_FORMAT if (outType == B_TIFF_FORMAT) { // Set up TIFF header - // get TIFF handle + // get TIFF handle TIFF* tif = TIFFClientOpen("TIFFTranslator", "w", outDestination, tiff_read_proc, tiff_write_proc, tiff_seek_proc, tiff_close_proc, - tiff_size_proc, tiff_map_file_proc, tiff_unmap_file_proc); + tiff_size_proc, tiff_map_file_proc, tiff_unmap_file_proc); if (!tif) return B_NO_TRANSLATOR; @@ -769,7 +774,7 @@ printf("using unkown compression (%ld).\n", compression); default: ret = B_NO_TRANSLATOR; } - // Close the handle + // Close the handle TIFFClose(tif); return ret; @@ -787,16 +792,16 @@ TIFFTranslator::translate_from_tiff(BPositionIO *inSource, BMessage *ioExtension // Always write out the entire image. Some programs // fail when given "headerOnly", even though they requested it. // These settings are not applicable when outputting TIFFs - + // variables needing cleanup TIFF *ptif = NULL; uint32 *praster = NULL; - + status_t ret; ret = identify_tiff_header(inSource, ioExtension, NULL, outType, &ptif); if (outType == B_TIFF_FORMAT && ret == B_OK && ptif) { - // if translating from TIFF to TIFF, + // if translating from TIFF to TIFF, // just write out the entire TIFF TIFFClose(ptif); translate_direct_copy(inSource, outDestination); @@ -804,12 +809,12 @@ TIFFTranslator::translate_from_tiff(BPositionIO *inSource, BMessage *ioExtension } while (ret == B_OK && ptif) { - // use while / break not for looping, but for + // use while / break not for looping, but for // cleaner goto like capability - + ret = B_ERROR; // make certain there is no looping - + uint32 width = 0, height = 0; if (!TIFFGetField(ptif, TIFFTAG_IMAGEWIDTH, &width)) { result = B_NO_TRANSLATOR; @@ -841,7 +846,7 @@ TIFFTranslator::translate_from_tiff(BPositionIO *inSource, BMessage *ioExtension } outDestination->Write(&bitsHeader, sizeof(TranslatorBitmap)); } - + if (!bheaderonly) { // Convert raw RGBA data to B_RGBA32 colorspace // and write out the results @@ -855,7 +860,7 @@ TIFFTranslator::translate_from_tiff(BPositionIO *inSource, BMessage *ioExtension uint8 *pbits, *prgba; pbits = pbitsrow; prgba = pras8 + ((height - (i + 1)) * width * 4); - + for (uint32 k = 0; k < width; k++) { pbits[0] = prgba[2]; pbits[1] = prgba[1]; @@ -875,7 +880,7 @@ TIFFTranslator::translate_from_tiff(BPositionIO *inSource, BMessage *ioExtension break; } // if (praster && TIFFReadRGBAImage(ptif, width, height, praster, 0)) - + } // while (ret == B_OK && ptif) if (praster) { @@ -899,7 +904,7 @@ TIFFTranslator::translate_from_tiff(BPositionIO *inSource, BMessage *ioExtension // Preconditions: // // Parameters: inSource, the data to be translated -// +// // inInfo, hint about the data in inSource (not used) // // ioExtension, configuration options for the diff --git a/src/add-ons/translators/webp/WebPTranslator.cpp b/src/add-ons/translators/webp/WebPTranslator.cpp index 048aa98582..a0cabc3f67 100644 --- a/src/add-ons/translators/webp/WebPTranslator.cpp +++ b/src/add-ons/translators/webp/WebPTranslator.cpp @@ -41,7 +41,7 @@ class FreeAllocation { // The input formats that this translator supports. -translation_format sInputFormats[] = { +static const translation_format sInputFormats[] = { { WEBP_IMAGE_FORMAT, B_TRANSLATOR_BITMAP, @@ -53,7 +53,7 @@ translation_format sInputFormats[] = { }; // The output formats that this translator supports. -translation_format sOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -65,7 +65,7 @@ translation_format sOutputFormats[] = { }; // Default settings for the Translator -static TranSetting sDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false} }; diff --git a/src/add-ons/translators/wonderbrush/WonderBrushTranslator.cpp b/src/add-ons/translators/wonderbrush/WonderBrushTranslator.cpp index 270889bf62..3c4f834c7e 100644 --- a/src/add-ons/translators/wonderbrush/WonderBrushTranslator.cpp +++ b/src/add-ons/translators/wonderbrush/WonderBrushTranslator.cpp @@ -23,7 +23,7 @@ using std::nothrow; // The input formats that this translator supports. -translation_format gInputFormats[] = { +static const translation_format sInputFormats[] = { /*{ B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -43,7 +43,7 @@ translation_format gInputFormats[] = { }; // The output formats that this translator supports. -translation_format gOutputFormats[] = { +static const translation_format sOutputFormats[] = { { B_TRANSLATOR_BITMAP, B_TRANSLATOR_BITMAP, @@ -64,11 +64,15 @@ translation_format gOutputFormats[] = { // Default settings for the Translator -TranSetting gDefaultSettings[] = { +static const TranSetting sDefaultSettings[] = { { B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false }, { B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false } }; +const uint32 kNumInputFormats = sizeof(sInputFormats) / sizeof(translation_format); +const uint32 kNumOutputFormats = sizeof(sOutputFormats) / sizeof(translation_format); +const uint32 kNumDefaultSettings = sizeof(sDefaultSettings) / sizeof(TranSetting); + BTranslator* make_nth_translator(int32 n, image_id you, uint32 flags, ...) @@ -83,10 +87,10 @@ make_nth_translator(int32 n, image_id you, uint32 flags, ...) WonderBrushTranslator::WonderBrushTranslator() : BaseTranslator("WonderBrush images", "WonderBrush image translator", WBI_TRANSLATOR_VERSION, - gInputFormats, sizeof(gInputFormats) / sizeof(translation_format), - gOutputFormats, sizeof(gOutputFormats) / sizeof(translation_format), + sInputFormats, kNumInputFormats, + sOutputFormats, kNumOutputFormats, "WBITranslator_Settings", - gDefaultSettings, sizeof(gDefaultSettings) / sizeof(TranSetting), + sDefaultSettings, kNumDefaultSettings, B_TRANSLATOR_BITMAP, WBI_FORMAT) { #if GAMMA_BLEND @@ -112,7 +116,7 @@ identify_wbi_header(BPositionIO* inSource, translator_info* outInfo, WonderBrushImage* wbImage = new(nothrow) WonderBrushImage(); if (wbImage) status = wbImage->SetTo(inSource); - + if (status >= B_OK) { if (outInfo) { outInfo->type = WBI_FORMAT; @@ -137,7 +141,7 @@ identify_wbi_header(BPositionIO* inSource, translator_info* outInfo, return status; } - + status_t WonderBrushTranslator::DerivedIdentify(BPositionIO* inSource, @@ -159,7 +163,7 @@ WonderBrushTranslator::DerivedTranslate(BPositionIO* inSource, else // if BaseTranslator did not properly identify the data as // bits or not bits - return B_NO_TRANSLATOR; + return B_NO_TRANSLATOR; }