#include <maya/MPxImageFile.h>
#include <maya/MImageFileInfo.h>
#include <maya/MImage.h>
#include <maya/MFnPlugin.h>
#include <maya/MStringArray.h>
#include <maya/MIOStream.h>
#include <maya/MGlobal.h>
#define _TIFF_LIBRARY_AVAILABLE_
#if defined(_TIFF_LIBRARY_AVAILABLE_)
#include "tiff.h"
#include "tiffio.h"
#endif
MString kImagePluginName( 
"TIFF Float Reader");
 
#define _TIFF_SUCCESS   1
{
public:
                    tiffFloatReader();
    virtual         ~tiffFloatReader();
    static void*    creator();
protected:
    unsigned int    fWidth;             
    unsigned int    fHeight;            
    unsigned int    fChannels;          
#if defined(_TIFF_LIBRARY_AVAILABLE_)
    TIFF            *fInputFile;        
#else
    void            *fInputFile;        
#endif
};
tiffFloatReader::tiffFloatReader()
: fInputFile( NULL), 
  fChannels( 0), 
  fWidth(0),
  fHeight(0)
{
}
tiffFloatReader::~tiffFloatReader()
{
    close();
}
void * tiffFloatReader::creator()
{
    return new tiffFloatReader();
}
{
#if defined(_TIFF_LIBRARY_AVAILABLE_)
    try
    {
        
        
        fInputFile = (TIFF *) TIFFOpen( pathname.
asChar(), 
"r" );
    }
    catch( ... )
    {
    }
    if( !fInputFile)
    {
    }
    unsigned short num_samps;
    unsigned short bitsPerChannel;
    unsigned short sampleType = 0;
    short config;
    if (_TIFF_SUCCESS != TIFFGetField(fInputFile, TIFFTAG_IMAGEWIDTH, &fWidth ) || 
        fWidth < 1)
        goto no_support;
    if (_TIFF_SUCCESS != TIFFGetField(fInputFile, TIFFTAG_IMAGELENGTH, &fHeight ) || 
        fHeight < 1)
        goto no_support;
    
    if (_TIFF_SUCCESS != TIFFGetField(fInputFile, TIFFTAG_SAMPLESPERPIXEL, &num_samps))
        goto no_support;
    if ((num_samps != 3) && (num_samps!= 4))
        goto no_support;
    fChannels = num_samps;
    
    
    if (_TIFF_SUCCESS != TIFFGetField(fInputFile, TIFFTAG_BITSPERSAMPLE, &bitsPerChannel))
        goto no_support;
    if (bitsPerChannel != 32)
        goto no_support;
    
    
    
    if (_TIFF_SUCCESS != TIFFGetField(fInputFile, TIFFTAG_SAMPLEFORMAT, &sampleType) ||
        sampleType != SAMPLEFORMAT_IEEEFP)
    {
        goto no_support;
    }
    
    
    
    if (_TIFF_SUCCESS != TIFFGetField(fInputFile, TIFFTAG_PLANARCONFIG, &config) ||
        (config != PLANARCONFIG_CONTIG))
    {
        goto no_support;
    }
    
#if 0
    unsigned short compression;
    if (_TIFF_SUCCESS != TIFFGetField(fInputFile, TIFFTAG_COMPRESSION, &compression) ||
        (compression != COMPRESSION_NONE))
    {
        goto no_support;
    }
#endif
    
    
    if( info)
    {
        
        
    }
no_support:
    close();
#else
#endif
}
{
#if defined(_TIFF_LIBRARY_AVAILABLE_)
    if (fInputFile)
        TIFFClose( fInputFile );
    fInputFile = NULL;
#else
#endif
}
MStatus tiffFloatReader::load( 
MImage& image, 
unsigned int imageNumber)
 
{
#if defined(_TIFF_LIBRARY_AVAILABLE_)
    if (!fInputFile)
        return rval;
    
    if (outputBuffer == NULL)
        return rval;
    
    
    unsigned int row = 0;
    bool flipVertically = true;
    if (flipVertically)
    {
        outputBuffer += (fHeight-1) * (fWidth * fChannels);
        for (row = 0; row < fHeight; row++)
        {
            TIFFReadScanline (fInputFile, outputBuffer, row);
            outputBuffer -= (fWidth * fChannels);
        }
    }
    else
    {
        for (row = 0; row < fHeight; row++)
        {
            TIFFReadScanline (fInputFile, outputBuffer, row);
            outputBuffer += (fWidth * fChannels);
        }
    }
#endif
    return rval;
}
{
    MFnPlugin plugin( obj, PLUGIN_COMPANY, 
"8.0", 
"Any" );
 
                    kImagePluginName,
                    tiffFloatReader::creator, 
                    extensions));
    
}
{
}