diff options
Diffstat (limited to 'plugins/FreeImage/Source/LibTIFF')
65 files changed, 0 insertions, 40134 deletions
diff --git a/plugins/FreeImage/Source/LibTIFF/ChangeLog b/plugins/FreeImage/Source/LibTIFF/ChangeLog deleted file mode 100644 index f3dfe26b0b..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/ChangeLog +++ /dev/null @@ -1,4849 +0,0 @@ -2011-04-09  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff 3.9.5 released.
 -
 -2011-04-09  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* configure.ac: Should use AC_CANONICAL_HOST since host specifies
 -	the run-time target whereas target is used to specify the final
 -	output target if the package is a build tool (like a compiler),
 -	which libtiff is not.  Resolves libtiff bug 2307 "Use
 -	AC_CANONICAL_HOST macro".
 -
 -2011-04-02  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/fax2ps.c (main): Use tmpfile() rather than mkstemp() since
 -	it is much more portable.  Tmpfile is included in ISO/IEC
 -	9899:1990 and the WIN32 CRT.
 -
 -2011-03-21  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tiffiop.h: avoid declaring int64/uint64 on AIX with XLC
 -	where they are already available.  (#2301)
 -
 -	* libtiff/tif_thunder.c: Correct potential buffer overflow with 
 -	thunder encoded files with wrong bitspersample set.  The libtiff 
 -	development team would like to thank Marin Barbella and TippingPoint's
 -	Zero Day Initiative for reporting this vulnerability (ZDI-CAN-1004,
 -	CVE-2011-1167).
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2300
 -
 -2011-03-10  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_fax3.h: Fix to last change allowing zero length 
 -	runs at the start of a scanline - needed for legal cases.
 -
 -2011-03-02  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_fax3.h: Protect against a fax VL(n) codeword commanding 
 -	a move left.  Without this, a malicious input file can generate an 
 -	indefinitely large series of runs without a0 ever reaching the right 
 -	margin, thus overrunning our buffer of run lengths.  Per CVE-2011-0192.
 -	This is a modified version of a patch proposed by Drew Yao of Apple 
 -	Product Security.  It adds an unexpected() report, and disallows the 
 -	equality case, since emitting a run without increasing a0 still allows 
 -	buffer overrun.
 -
 -2011-02-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirwrite.c: Avoid undefined behaviour when casting from
 -	float to unsigned integer in TIFFWriteRationalArray() as reported by
 -	Kareem Shehata.
 -
 -2011-01-03  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_jpeg.c: Fix regressions with 2 and 3 band images
 -	caused by commit on 2010-12-14.  Submitted by e-mail from 
 -	Even Rouault <even.rouault@mines-paris.org>
 -
 -2010-12-31  Olivier Paquet  <olivier.paquet@gmail.com>
 -
 -	* libtiff/tif_dirread.c: Allow reading directories where
 -	TIFFTAG_SMINSAMPLEVALUE and TIFFTAG_SMAXSAMPLEVALUE values differ for each
 -	channel. The min/max of all channels is used as appropriate.
 -
 -2010-12-14  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_dirread.c: tolerate some cases where
 -	FIELD_COLORMAP is missing
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2189
 -
 -2010-12-14  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_strip.c: use TIFFGetFieldDefaulted instead
 -	of TIFFGetField when we assume that it will succeed
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2215
 -
 -2010-12-14  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* tools/gif2tiff.c: fix buffer overrun
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2270
 -
 -2010-12-14  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_jpeg.c: reduce usage of JCS_UNKNOWN in order
 -	to improve compatibility with various viewers
 -	submitted by e-mail from Dwight Kelly <dkelly@apago.com>
 -
 -2010-12-13  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* tools/fax2ps.c: be consistent with page-numbering
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2225
 -
 -2010-12-13  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_dirread.c: fix needless tag ordering warning
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2210
 -
 -2010-12-13  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_color.c: prevent crash in handling bad TIFFs
 -	resolves CVE-2010-2595
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2208
 -
 -2010-12-13  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* tools/tiffcrop.c: new release by Richard Nolde
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2004
 -
 -2010-12-12  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* tools/tiff2pdf.c: fix colors for images with RGBA 
 -	interleaved data
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2250
 -
 -2010-12-11  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* tools/tiff2pdf.c: remove invalid duplication for Lab 
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2162
 -
 -2010-12-11  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_jpeg.c: fix use of clumplines calculation
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2149
 -
 -2010-12-11  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* tools/fax2ps.c: replace unsafe tmpfile() with mkstemp()
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2118
 -
 -2010-12-11  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* tools/tiff2pdf.c: add fill-page option
 -	 http://bugzilla.maptools.org/show_bug.cgi?id=2051
 -
 -2010-12-11  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_dirread.c: modify warnings
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2016
 -
 -2010-12-11  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_ojpeg.c: fix buffer overflow on problem data
 -	http://bugzilla.maptools.org/show_bug.cgi?id=1999
 -
 -2010-12-11  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_ojpeg.c: fix crash when reading a TIFF with a zero
 -	or missing byte-count tag
 -	* tools/tiffsplit.c: abort when reading a TIFF without a byte-count
 -	per http://bugzilla.maptools.org/show_bug.cgi?id=1996
 -
 -2010-12-08  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_dirread.c: fix crash when reading a badly-constructed
 -	TIFF per http://bugzilla.maptools.org/show_bug.cgi?id=1994
 -
 -2010-12-07  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_jpeg.c, libtiff/tif_strip.c: apply patch for 
 -	CVE-2010-3087 per bug
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2140
 -
 -2010-12-06  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_open.c: Fix mode check before opening a file.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=1906
 -
 -2010-09-25  Lee Howard <faxguy@howardsilvan.com>
 -
 -	* tools/tiff2ps.c: improvements and enhancements from Richard Nolde
 -	with additional command line options for Document Title, 
 -	Document Creator, and Page Orientation
 -
 -2010-07-13  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiffcrop.c: Patch from Richard Nolde to avoid a
 -	potentially unterminated buffer due to using an exceptionally long
 -	file name.
 -
 -2010-07-08  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Fixed ID buffer filling in
 -	t2p_write_pdf_trailer(), thanks to Dmitry V. Levin.
 -
 -2010-07-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Really reset the tag count in CheckDirCount()
 -	to expected value as the warning message suggests. As per bug
 -	http://bugzilla.maptools.org/show_bug.cgi?id=1963
 -
 -	* tools/tiffdump.c: Avoid integer overflows computing the buffer size
 -	for large directories. As per bug
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2218
 -
 -2010-07-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffset.c: Properly handle TIFFTAG_PAGENUMBER,
 -	TIFFTAG_HALFTONEHINTS, TIFFTAG_YCBCRSUBSAMPLING, TIFFTAG_DOTRANGE
 -	which should be set by value.
 -
 -	* libtiff/tif_dirinfo.c: Don't use assertions in _TIFFFieldWithTag()
 -	and _TIFFFieldWithName() if the tag is not found in the tag table.
 -	This should be normal situation and returned NULL value should be
 -	properly handled by the caller.
 -
 -	* libtiff/{tif_dirwrite.c, tif_print.c}: Properly handle "DotRange"
 -	tag as it can be either byte or short size and should be set and read
 -	by value, not as an array. As per bug
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2116
 -
 -2010-07-02  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_getimage.c: Avoid wrong math du to the signed/unsigned
 -	integer type conversions. As per bug
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2207
 -
 -	* tools/{tiff2bw.c, thumbnail.c, pal2rgb.c}: Fix the count for
 -	WhitePoint tag as per bug
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2042
 -
 -	* tools/tiffdump.c: Use PrintData() function instead of
 -	PrintByte/Short/Long(). Should fix an issue reported at
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2116
 -
 -	* libtiff/tif_getimage.c: Check the number of samples per pixel when
 -	working with YCbCr image in PickContigCase(). As per bug
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2216
 -
 -	* libtiff/tif_dir.c: Set the bogus post-decoding hook when processing
 -	TIFFTAG_BITSPERSAMPLE in _TIFFVSetField() for the case of 8 bit when
 -	we don't need any post-processing. That helps to reset the hook if we
 -	previously set this field to some other value and the hook was
 -	initialized accordingly. As per bug
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2035
 -
 -2010-06-30  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Better generation of ID field in
 -	t2p_write_pdf_trailer(). Get rid of GCC aliasing warnings.
 -
 -	* tools/tiff2pdf.c: Fixed computation of the tile buffer size when
 -	converting JPEG encoded tiles.
 -
 -	* tools/tiff2pdf.c: Better handling of string fields, use static
 -	string buffers instead of dynamically allocated, use strncpy() instead
 -	of strcpy(), control the string lengths.
 -
 -2010-06-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcp.c: Initialize buffer arrays with zero to avoid
 -	referencing to uninitialized memory in some cases (e.g. when tile size
 -	set bigger than the image size).
 -
 -2010-06-15  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiffcrop.c: Patch from Richard Nolde. Reject YCbCr
 -	subsampled data since tiffcrop currently doesn't support it.  Fix
 -	JPEG support.
 -
 -2010-06-15  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff 3.9.4 released.
 -
 -2010-06-13  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: avoid re-preparing jpeg tables unnecessarily
 -	(gdal #3633, libtiff #2135).
 -
 -	* libtiff/tif_dirread.c: Fixed bad handling of out of order tags
 -	definated late by a codec (#2210)
 -
 -	* libtiff/tif_dirread.c: Fixed inadequate validation of the 
 -	SubjectDistance field (#2212).
 -
 -	* tiff2pdf.c: Fix assorted bugs in tiff2pdf: missing "return" 
 -	in t2p_read_tiff_size() causes t2p->tiff_datasize to be set entirely 
 -	wrong for COMPRESSION_JPEG case, resulting in memory stomp if actual 
 -	size is larger.  Also, there are a bunch of places that try to 
 -	memset() a malloc'd buffer before checking for malloc failure, which 
 -	would result in core dump if there actually were a failure. (#2211)
 -
 -2010-06-11  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiff2rgba.c: Applied portion of patch (from Tom Lane)
 -	which was left out in order to fully resolve "CVE-2009-2347
 -	libtiff: integer overflows in various inter-color space conversion
 -	tools". http://bugzilla.maptools.org/show_bug.cgi?id=2079
 -
 -	* libtiff/tiffiop.h (TIFFSafeMultiply): Need more castings to
 -	avoid compiler warnings if parameter types are not sign
 -	consistent.
 -
 -	* tools/tiffcrop.c: Applied patch from Richard Nolde: Corrected
 -	European page size dimensions.  Added an option to allow the user
 -	to specify a custom page size on the command line.  Fix the case
 -	where a page size specified with a fractional part was being
 -	coerced to an integer by retyping the variables that define the
 -	paper size.
 -
 -	* libtiff 3.9.3 released.
 -
 -	* tools/tiffcp.c (tiffcp): Applied Tom Lane's patch to reject
 -	YCbCr subsampled data since tiffcp currently doesn't support it.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2097
 -
 -	* Update libtool to version 2.2.10.
 -
 -2010-06-10  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tiffiop.h (TIFFSafeMultiply): Work properly if
 -	multiplier is zero.
 -
 -2010-06-09  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tif_dir.h: Restore ReferenceBlackWhite as a non-custom
 -	field.  This avoids a multi-thread reentrancy problem as well as
 -	fixing output of wrong tag value due to redundant definitions for
 -	the same tag in the tiffFieldInfo[] array.  Resolves
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2185
 -
 -	* libtiff/tif_fax3.c (Fax3SetupState): Yesterday's fix for
 -	CVE-2010-1411 was not complete.
 -
 -	* libtiff/tiffiop.h (TIFFSafeMultiply): New macro to safely
 -	multiply two integers.  Returns zero if there is an integer
 -	overflow.
 -
 -	* tools/tiffcp.c (main): Fix more TIFF handle leaks.
 -
 -	* libtiff/tif_read.c (TIFFReadBufferSetup): Skip allocating
 -	tif_rawdata if tif_rawdatasize becomes zero.
 -
 -2010-06-08  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiffcrop.c: Removed duplicated macros such as
 -	TIFFhowmany().
 -
 -	* Update libtool to version 2.2.8.
 -
 -	* libtiff/tif_fax3.c (Fax3SetupState): Avoid under-allocation of
 -	buffer due to integer overflow in TIFFroundup() and several other
 -	potential overflows.  In conjunction with the fix to TIFFhowmany(),
 -	fixes CVE-2010-1411.
 -
 -	* libtiff/tiffiop.h (TIFFhowmany): Return zero if parameters would
 -	result in an integer overflow. This causes TIFFroundup() to also
 -	return zero if there would be an integer overflow.
 -
 -	* libtiff/tif_read.c (TIFFReadBufferSetup): Return an error if
 -	tif_rawdatasize becomes zero due to an initial raw size of zero or
 -	an overflow reported by TIFFroundup().
 -
 -	* libtiff/tif_ojpeg.c (OJPEGReadBufferFill): Report an error and
 -	avoid a crash if the input file is so broken that the strip
 -	offsets are not defined.
 -
 -	* tools/tiffcp.c (main): tiffcp should not leak memory if an error
 -	is reported when reading the input file.
 -
 -	* libtiff/tif_aux.c (_TIFFCheckRealloc): Produce a fully detailed
 -	error message string.
 -
 -	* Add an emacs formatting mode footer to all source files so that
 -	emacs can be effectively used.
 -
 -2010-06-03  Oliver Chen Feng <scip8183@gmail.com>
 -
 -        * libtiff/tools/tiffcp.c: add a new option -x to force merged tiff
 -	file PAGENUMBER value in sequence for users who care the page
 -	sequence, this will also prevent tiff2pdf from creating pdf file from
 -	the merged tiff file with wrong page sequence.
 -
 -2010-05-07  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: Ensure that quality is always set in 
 -	JPEGPreEncode(), not just when we want to output local tables.  
 -	Otherwise the quality used during compression may not be right and
 -	might not match the tables in the tables tag.   This bug only occurs
 -	when seeking between directories in the midst of writing blocks.
 -	http://trac.osgeo.org/gdal/ticket/3539
 -	
 -2010-05-05  Olivier Paquet  <olivier.paquet@gmail.com>
 -
 -	* libtiff/tif_print.c: Have TIFFTAG_REFERENCEBLACKWHITE always print 6
 -	floats instead of 2*SamplesPerPixel.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2186
 -	* man/TIFFGetField.3tiff, man/TIFFSetField.3tiff: Fixed doc to reflect the
 -	fact that libtiff considers TIFFTAG_REFERENCEBLACKWHITE to be 6 floats.
 -
 -2010-04-10  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/ppm2tiff.c (main): While case for parsing comment line
 -	requires extra parenthesis to work as expected.  Reported by
 -	Thomas Sinclair.
 -
 -2010-02-22  Lee Howard  <faxguy@howardsilvan.com>
 -
 -	* libtiff/tif_jpeg.c: Do not generate a JPEGTables tag when creating
 -	the JPEG TIFF as is is not required in order to prevent it from 
 -	being unused and filled with invalid data.  (Leave it to be 
 -	generated by later activity.)
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2135
 -	* tools/tiff2pdf.c: Write the JPEG SOI headers into the TIFF strip 
 -	data rather than skipping them.  This fixes the ability to view in
 -	Acrobat Reader, Evince, and Ghostscript.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2135
 -	* libtiff/tif_fax3.c: Don't return error on badly-terminated MMR
 -	strips.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2029
 -
 -2010-01-06  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dir.c: Ensure tile and scanline sizes are reset
 -	when moving to new directories. 
 -	http://bugzilla.maptools.org/show_bug.cgi?id=1936
 -
 -2009-12-03  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: Fix a couple of issues that trigger failures in
 -	some cases when using TIFFReadScanline() with JPEG compressed 
 -	subsampled ycbcr images.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=1936
 -
 -2009-11-04  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff 3.9.2 released.
 -
 -2009-11-03  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiffcrop.c: Updated tiffcrop from Richard Nolde.  This
 -	version has undergone substantial testing with arbitrary sample
 -	bit depths.  Also eliminates GCC compilation warnings.
 -
 -2009-11-02  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* port/libport.h: Added header file for porting prototypes and
 -	extern declarations.
 -
 -2009-10-31  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tif_dirwrite.c (TIFFWriteAnyArray): Add missing break
 -	statement so writing an array of TIFF_DOUBLE works.
 -
 -2009-10-29  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tif_dirread.c: Eliminate GCC "dereferencing type-punned
 -	pointer" warnings.
 -
 -2009-10-28  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* html/tools.html: Add manual page links, and a summary
 -	description of tiffcrop.
 -
 -2009-10-07  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* configure.ac: x86_64 should use the same fill order as i386.
 -
 -2009-09-24  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiffcrop.c, man/tiffcrop.1: New tiffcrop from Richard
 -	Nolde.  Major updates to add significant functionality for reading
 -	and writing tile based images with bit depths not a multiple of 8
 -	which cannot be handled by tiffcp.
 -
 -2009-09-03  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tif_ojpeg.c (OJPEGWriteHeaderInfo): IJG JPEG 7 needs
 -	do_fancy_upsampling=FALSE in order to read raw data.  Resolves
 -	"Bug 2090 - OJPEG crash with libjpeg v7".
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2090
 -
 -2009-08-30  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* contrib/iptcutil/iptcutil.c,
 -	libtiff/tif_getimage.c,libtiff/tif_jpeg.c,libtiff/tif_ojpeg.c,tools/tiffcrop.c,tools/tiffgt.c:
 -	Applied patch from Oden Eriksson to allow building with GCC using
 -	the "-Wformat -Werror=format-security" flags.
 -
 -2009-08-28  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff 3.9.1 released.
 -
 -2009-08-28  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirwrite.c: Back out changes from 2007-11-22 that
 -	resulted in the final strip not being written in some circumstances.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2088
 -
 -2009-08-27  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tif_write.c (TIFFAppendToStrip): Remove cast which
 -	caused libtiff to output a wrong last strip with byte-count and
 -	strip-offset of zero.  This cast was added on the day of the 3.9.0
 -	release.
 -
 -	* libtiff/tif_config.vc.h: tiffiop.h needs the TIFF_INT64_T and
 -	TIFF_UINT64_T defines in order to compile.  Copy existing
 -	definitions from tiffconf.vc.h.
 -
 -2009-08-21  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* test/Makefile.am (AUTOMAKE_OPTIONS): Colorized tests was not
 -	actually activated since it needed to be enabled in this
 -	Makefile.am.  Also activated parallel-tests mode since it offers
 -	useful features such as per-test .log files and a summary test
 -	report .log file.
 -
 -2009-08-20  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff 3.9.0 released.
 -
 -	* libtiff/tif_print.c (TIFFPrintDirectory): Applied patch for "tag
 -	error may cause segfault in tif_print.c."
 -	http://bugzilla.maptools.org/show_bug.cgi?id=1896
 -
 -	* tools/{rgb2ycbcr.c, tiff2rgba.c}: Applied patch for
 -	CVE-2009-2347 libtiff: integer overflows in various inter-color
 -	space conversion tools.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2079
 -
 -	* configure.ac: Updated autotools.  Autoconf 2.64, Automake 1.11,
 -	libtool 2.2.6.  Enabled support for silent build rules
 -	(--enable-silent-rules or 'make V=0') and colorized tests.
 -
 -2009-06-30  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_luv.c: correct return codes from encoderow to be
 -	1 on success instead of zero.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2069
 -
 -2009-06-22  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_lzw.c: Fix buffer underflow bug. 
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2065
 -
 -2009-06-03  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_write.c: do not override the planar configuration to be
 -	contig for one sample files if planar configuration is already set.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2057
 -
 -2009-02-12  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_luv.c: Fix handling of tiled logluv images. 
 -	http://bugzilla.maptools.org/show_bug.cgi?id=2005
 -
 -2009-01-23  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_predict.c: Add support for 32bit integer horz. predictors.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=1911
 -
 -2009-01-20  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiffsplit.c: fix sampleformat to be shortv instead of longv.
 -
 -2009-01-12  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiff2ps.c: Remove spurious message printed to stderr. 
 -
 -2009-01-11  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiff2ps.c: Incorporated significant functionality update
 -	from Richard Nolde.  In particular, support for rotating the image
 -	by 90, 180, 270, and 'auto' has been added.
 -
 -	* tools/tiffcrop.c: Incorporated significant functionality update
 -	from Richard Nolde.
 -
 -2009-01-06  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tiffiop.h: Add private type declarations for int64, and
 -	uint64 so that bundled utilities (like tiffcrop) can use it when
 -	necessary.
 -
 -2009-01-01  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* configure.ac: Updated to test for 64-bit types.  This version of
 -	the library does not require a 64-bit type, but tiffcrop needs it.
 -
 -2008-12-31  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* Update to use current FSF autotools versions.
 -	* libtiff/tiffio.h: GCC will now validate format specifications
 -	for TIFFError(), TIFFErrorExt(), TIFFWarning(), and
 -	TIFFWarningExt() in order to reveal bugs.  Cleaned up resulting
 -	warnings throughout for 32 bit build only.
 -
 -2008-12-31  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiffcrop.c, man/tiffcrop.1: A major update from Richard
 -	Nolde.  
 -
 -2008-12-21  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: Avoid errors if the application writes a full
 -	strip for the last partial strip in a jpeg compressed file.
 -	http://bugzilla.maptools.org/show_bug.cgi?id=1981
 -
 -2008-12-21  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_getimage.c, tiffio.h: More ABI corrections. 
 -	Removed SubsamplingHor/Ver from TIFFRGBAImage structure.
 -	  http://bugzilla.maptools.org/show_bug.cgi?id=1980
 -
 -2008-12-18  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_getimage.c,tiffio.h: removed all use of UaToAa and
 -	Bitmap16to8 arrays in TIFFRGBAImage structure to restore ABI
 -	compatability.  These were just an attempt to speed up processing
 -	with precalculated tables.
 -	  http://bugzilla.maptools.org/show_bug.cgi?id=1979
 -
 -	* libtiff/tif_codec.c: Avoid printing c->name if it does not exist.
 -
 -2008-10-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_jbig.c: Support the JBIG-KIT 2.0 (compatibility with
 -	the older versions retained).
 -
 -2008-09-05  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffsplit.c: Use dynamically allocated array instead of static
 -	when constructing output file names.
 -
 -2008-09-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffsplit.c: Get rid of unsafe strcpy()/strcat() calls when
 -	doing the filename/path construction.
 -
 -	* tools/tiff2pdf.c: More appropriate format string in
 -	t2p_write_pdf_string(); avoid signed/unsigned mismatch.
 -
 -	* libtiff/tif_lzw.c: Properly zero out the codetable. As per bug
 -
 -	http://bugzilla.maptools.org/show_bug.cgi?id=1929
 -
 -	* libtiff/tif_lzw.c: Properly zero out the string table. Fixes
 -	CVE-2008-2327 security issue.
 -
 -2008-05-24  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_codec.c: Avoid NULL pointer dereferencing for exotic 
 -	compression codec codes.
 -
 -	* tif_dirread.c: zero tif->tif_dir after freeing the directory
 -	in TIFFReadCustomDirectory().  I don't exactly remember why this
 -	was important. 
 -
 -	* tif_dirwrite.c: Fix potential memory leak writing large double
 -	tags. 
 -
 -	* tif_dirread.c: Fix unchecked malloc result.
 -
 -2008-01-30  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tif_fax3.c: Make find0span() and find1span() non-inline to
 -	make MSVC 6.0 compiler happy.
 -
 -2007-11-26  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_fax3.c: fix leak of FAXCS state (per bug 1603).
 -
 -2007-11-23  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure.com, libtiff/tif_vms.c: Better OpenVMS support. Patches
 -	from Alexey Chupahin.
 -
 -2007-11-22  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_write.c: Rip out the fancy logic in TIFFAppendToStrip() for 
 -	establishing if an existing tile can be rewritten to the same location 
 -	by comparing the current size to all the other blocks in the same 
 -	directory.  This is dangerous in many situations and can easily 
 -	corrupt a file.  (observed in esoteric GDAL situation that's hard to
 -	document).  This change involves leaving the stripbytecount[] values 
 -	unaltered till TIFFAppendToStrip().  Now we only write a block back
 -	to the same location it used to be at if the new data is the same
 -	size or smaller - otherwise we move it to the end of file.
 -
 -	* tif_dirwrite.c: Try to avoid writing out a full readbuffer of tile
 -	data when writing the directory just because we have BEENWRITING at
 -	some point in the past.  This was causing odd junk to be written out
 -	in a tile of data when a single tile had an interleaving of reading 
 -	and writing with reading last.  (highlighted by gdal 
 -	autotest/gcore/tif_write.py test 7. 
 -
 -	* tif_predict.c: use working buffer in PredictorEncodeTile to avoid
 -	modifying callers buffer. 
 -	http://trac.osgeo.org/gdal/ticket/1965
 -
 -	* tif_predict.c/h, tif_lzw.c, tif_zip.c: Improvements so that 
 -	predictor based encoding and decoding works in read-write update
 -	mode properly. 
 -	http://trac.osgeo.org/gdal/ticket/1948
 -
 -2007-10-05  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiff2pdf.c: Fixed setting of alpha value per report on list.
 -
 -2007-09-13  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_dirinfo.c:  _TIFFMergeFields() now only merges in field
 -	definitions that are missing.  Existing definitions are silently
 -	ignored.  (Bug #1585)
 -
 -2007-07-18  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{Makefile.am, Makefile.v}: Do not distribute tiffconf.h, 
 -	remove tif_config.h/tiffconf.h during cleaning. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1573
 -
 -2007-07-13  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.9.0beta released.
 -
 -2007-07-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Added missed extern optind as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1567
 -
 -2007-07-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2ps.c:  Added support 16-bit images as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1566
 -
 -	Patch from William Bader.
 -
 -	* tools/tiff2pdf.c: Fix for TIFFTAG_JPEGTABLES tag fetching and
 -	significant upgrade of the whole utility as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1560
 -
 -	Now we don't need tiffiop.h in tiff2pdf anymore and will open output
 -	PDF file using TIFFClientOpen() machinery as it is implemented
 -	by Leon Bottou.
 -
 -2007-06-29  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tif_dirinfo.c (_TIFFFindFieldInfo): Don't attempt to
 -	bsearch() on a NULL fieldinfo list.
 -	(_TIFFFindFieldInfoByName): Don't attempt to
 -	lfind() on a NULL fieldinfo list.
 -
 -2007-05-01  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirwrite.c: Fixed problem introduced with a fix for a
 -	byte swapping issue
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1363
 -
 -	As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1550
 -
 -2007-04-27  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Check the tmpfile() return status as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=154
 -
 -2007-04-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dir.h, tif_dirread.c, tif_dirinfo.c, tif_jpeg.c,
 -	tif_fax3.c, tif_jbig.c, tif_luv.c, tif_ojpeg.c, tif_pixarlog.c,
 -	tif_predict.c, tif_zip.c}: Finally fix bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1274
 -
 -	by introducing _TIFFMergeFieldInfo() returning integer error status
 -	instead of void in case of problems with field merging (e.g., if the
 -	field with such a tag already registered). TIFFMergeFieldInfo() in
 -	public API remains void. Use _TIFFMergeFieldInfo() everywhere and
 -	check returned value.
 -
 -2007-04-07  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* contrib/addtiffo/tif_overview.c: Fix problems with odd sized output 
 -	blocks in TIFF_DownSample_Subsampled() (bug 1542).
 -
 -2007-04-06  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: Changed JPEGInitializeLibJPEG() so that it
 -	will convert from decompressor to compressor or compress to decompress
 -	if required by the force arguments.  This works around a problem in
 -	where the JPEGFixupTestSubsampling() may cause a decompressor to 
 -	be setup on a directory when later a compressor is required with the
 -	force flag set.  Occurs with the addtiffo program for instance. 
 -
 -2007-04-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirwrite.c: Fixed swapping of byte arrays stored
 -	in-place in tag offsets as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1363
 -
 -	* tools/tiffcrop.c, man/tiffcrop.1: Significant update in
 -	functionality from Richard Nolde. As per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1525
 -
 -2007-03-28  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_fax3.c: "inline static" -> "static inline" for IRIC CC.
 -
 -2007-03-07  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -	
 -	* libtiff/tif_getimage.c: workaround for 'Fractional scanline' error reading
 -	OJPEG images with rowsperstrip that is not a multiple of vertical subsampling
 -	factor. This bug is mentioned in:
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1390
 -	http://www.asmail.be/msg0054766825.html 
 -
 -2007-03-07  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -	
 -	* libtiff/tif_win32.c: made inclusion of windows.h unconditional
 -
 -	* libtiff/tif_win32.c: replaced preprocessor indication for consiously
 -	unused arguments by standard C indication for the same
 -
 -2007-02-27  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Use uint32 type instead of tsize_t in byte
 -	counters in TIFFFetchData(). Should finally fix the issue
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=890
 -
 -2007-02-24  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffset.c: Properly handle tags with TIFF_VARIABLE writecount.
 -	As per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1350
 -
 -	* libtiff/tif_dirread.c: Added special function to handle
 -	SubjectDistance EXIF tag as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1362
 -
 -	* tools/tiff2pdf.c: Do not assume inches when the resolution units
 -	do not specified. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1366
 -
 -	* tools/{tiffcp.c, tiffcrop.c}: Do not change RowsPerStrip value if
 -	it was set as infinite. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1368
 -
 -	* tools/tiffcrop.c, man/tiffcrop.1: New tiffcrop utility contributed
 -	by Richard Nolde. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1383
 -
 -2007-02-22  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dir.c: Workaround for incorrect TIFFs with
 -	ExtraSamples == 999 produced by Corel Draw. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1490
 -
 -	* libtiff/{tif_dirread.c, tif_read.c}: Type of the byte counters
 -	changed from tsize_t to uint32 to be able to work with data arrays
 -	larger than 2GB. Fixes bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=890
 -	
 -	Idea submitted by Matt Hancher.
 -
 -2007-01-31  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tif2rgba.c: This utility does not work properly on big-endian
 -	architectures. It was fixed including the bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1149
 -
 -2007-01-15  Mateusz Loskot <mateusz@loskot.net>
 -
 -	* Submitted libtiff port for Windows CE platform
 -	* libtiff/tif_config.wince.h: Added configuration header for WinCE.
 -	* libtiff/tiffconf.wince.h: Ported old configuration header for WinCE.
 -	* libtiff/tif_wince.c: Added WinCE-specific implementation of some
 -	functons from tif_win32.c.
 -	* libtiff/tif_win32.c: Disabled some functions already reimplemented in tif_wince.c.
 -	* libtiff/tiffiop.h, port/lfind.c: Added conditional include of some
 -	standard header files for Windows CE build.
 -	* tools/tiffinfoce.c: Ported tiffinfo utility for Windows CE.
 -
 -2006-11-19  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_write.c: TIFFAppendToStrip() - clear sorted flag if 
 -	we move a strip. 
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1359	
 -
 -2006-10-13  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dir.c: More fixes for vulnerabilities, reported
 -	in Gentoo bug ():
 -	
 -	http://bugs.gentoo.org/show_bug.cgi?id=142383
 -
 -	* libtiff/contrib/dbs/xtiff/xtiff.c: Make xtiff utility compilable.
 -	Though it is still far from the state of being working and useful.
 -
 -2006-10-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_fax3.c: Save the state of printdir codec dependent
 -	method.
 -
 -	* libtiff/tif_jpeg.c: Save the state of printdir codec dependent method
 -	as per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1273
 -
 -	* libtiff/tif_win32.c: Fixed problem with offset value manipulation
 -	as per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1322
 -
 -	* libtiff/{tif_read.c, tif_jpeg.c, tif_dir.c}: More fixes for
 -	vulnerabilities, reported in Gentoo bug ():
 -
 -	http://bugs.gentoo.org/show_bug.cgi?id=142383
 -
 -2006-09-28  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_fax3.c, tif_next.c, tif_pixarlog.c}: Fixed multiple
 -	vulnerabilities, as per	Gentoo bug ():
 -
 -	http://bugs.gentoo.org/show_bug.cgi?id=142383
 -
 -2006-09-27  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_lzw.c, libtiff/tif_zip.c: Fixed problems with mixing
 -	encoding and decoding on the same read-write TIFF handle.  The LZW
 -	code can now maintain encode and decode state at the same time. The
 -	ZIP code will switch back and forth as needed.  
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=757
 -
 -2006-09-20  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff: Rename config.h.vc and tif_config.h.vc to config.vc.h and 
 -	tif_config.vc.h for easier identification by folks using an IDE.
 -
 -2006-07-25  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_msdos.c: Avoid handle leak for failed opens.  c/o Thierry Pierron
 -
 -2006-07-19  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_dirwrite.c: take care not to flush out buffer of strip/tile
 -	data in _TIFFWriteDirectory if TIFF_BEENWRITING not set.  Relates
 -	to bug report by Peng Gao with black strip at bottom of images.
 -
 -2006-07-12  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_dirwrite.c: make sure to use uint32 for wordcount in 
 -	TIFFWriteNormanTag if writecount is VARIABLE2 for ASCII fields.
 -	It already seems to have been done for other field types.  Needed
 -	for "tiffset" on files with geotiff ascii text.
 -
 -2006-07-04  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* {configure.ac, libtiff/tif_config.h.vc, libtiff/tif_jbig.c}
 -	(JBIGDecode): jbg_newlen is not available in older JBIG-KIT and
 -	its use does not appear to be required, so use it only when it is
 -	available.
 -
 -2006-06-24  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirinfo.c: Added missed EXIF tag ColorSpace (40961).
 -
 -	* libtiff/tif_dirread.c: Move IFD fetching code in the separate
 -	function TIFFFetchDirectory() avoiding code duplication in
 -	TIFFReadDirectory() and TIFFReadCustomDirectory().
 -
 -2006-06-19  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiff2pdf.c: Fix handling of -q values.
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=587
 -
 -2006-06-17  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_readdir.c: Added case in EstimateStripByteCounts() for tiled
 -	files.  Modified TIFFReadDirectory() to not invoke 
 -	EstimateStripByteCounts() for case where entry 0 and 1 are unequal
 -	but one of them is zero. 
 -	  http://bugzilla.remotesensing.org/show_bug.cgi?id=1204
 -
 -2006-06-08  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_open.c, tif_dirread.c, tiffiop.h}: Move IFD looping
 -	checking code in the separate function TIFFCheckDirOffset().
 -
 -	* libtiff/tif_aux.c: Added _TIFFCheckRealloc() function.
 -
 -	* tools/tiffcmp.c: Fixed floating point comparison logic as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1191
 -
 -	* libtiff/tif_fax3.c: Fixed problems in fax decoder as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1194
 -
 -	* tools/tiff2pdf.c: Fixed buffer overflow condition in
 -	t2p_write_pdf_string() as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1196
 -
 -2006-06-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* {configure, configure.ac, libtiff/tif_jbig.c, tools/tiffcp.c}: Added
 -	support for JBIG compression scheme (34661 code) contributed by Lee
 -	Howard. As per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=896
 -
 -	* configure, configure.ac: OJPEG support enabled by default.
 -
 -	* contrib/ojpeg/: Removed. New OJPEG support does not need this patch.
 -
 -2006-06-03  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/{tif_dirinfo.c, tif_print.c} : Fix crash in
 -	TIFFPrintDirectory().  Joris Van Damme authored the fix.
 -
 -2006-04-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Unified line ending characters (always use '\n')
 -	as per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1163
 -
 -	* README.vms, Makefile.am, configure.com, libtiff/{Makefile.am,
 -	tif_config.h-vms, tif_stream.cxx, tif_vms.c, tiffconf.h-vms}:
 -	Added support for OpenVMS by Alexey Chupahin, elvis_75@mail.ru.
 -
 -2006-04-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/{fax2ps.c, fax2tiff.c, ppm2tiff.c, ras2tiff.c, tiff2pdf.c}:
 -	Properly set the binary mode for stdin stream as per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1141
 -
 -	* man/{bmp2tiff.1, fax2ps.1, fax2tiff.1, gif2tiff.1, ras2tiff.1,
 -	raw2tiff.1, rgb2ycbcr.1, sgi2tiff.1, tiff2bw.1, tiff2pdf.1, tiff2ps.1,
 -	tiff2rgba.1, tiffcmp.1, tiffcp.1, tiffdither.1,	tiffdump.1, tiffgt.1,
 -	tiffset.1}: Improvements in page formatting as per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1140
 -
 -	* html/tools.html, html/man/Makefile.am, tools/tiff2pdf.c: Fixed
 -	typos as per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1139
 -
 -2006-04-18  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* nmake.opt: use /EHsc for VS2005 compatibility.  Also define
 -	_CRT_SECURE_NO_DEPRECATE to avoid noise on VS2005. 
 -
 -2006-04-12  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* libtiff/tif_getimage.c: Added support for planarconfig separate
 -	non-subsampled YCbCr (i.e. separate YCbCr with subsampling [1,1])
 -
 -2006-04-11  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -	
 -	* libtiff/tif_getimage.c: Revision of all RGB(A) put routines
 -	- Conversion of unassociated alpha to associated alpha now done with
 -	  more performant LUT, and calculation more correct
 -	- Conversion of 16bit data to 8bit data now done with
 -	  more performant LUT, and calculation more correct
 -	- Bugfix of handling of 16bit RGB with unassociated alpha
 -
 -2006-04-11  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -	
 -	* libtiff/tif_getimage.c: 
 -	- When there is no alpha, gtTileSeparate and gtStripSeparate allocated 
 -	  buffer for alpha strile and filled it, only to never read it back. 
 -	  Removed allocation and fill.
 -	- Minor rename of vars in gtTileSeparate and gtStripSeparate 
 -	  anticipating planned functionality extension
 -
 -2006-04-08  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* libtiff/tif_getimage.c: renamed pickTileContigCase to PickContigCase 
 -	and pickTileSeparateCase to PickSeparateCase as both work on strips as 
 -	well
 -
 -	* libtiff/tif_getimage.c: moved img->get selection from 
 -	TIFFRGBAImageBegin into PickContigCase and PickSeparateCase to create
 -	logical hook for planned functionality extension
 -
 -2006-04-08  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* libtiff/tif_ojpeg.c: resolved memory leak that was a consequence
 -	of inappropriate use of jpeg_abort instead of jpeg_destroy
 -
 -2006-04-07  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* libtiff/tif_getimage.c: replaced usage of TIFFScanlineSize in 
 -	gtStripContig with TIFFNewScanlineSize so as to fix buggy behaviour
 -	on subsampled images - this ought to get sorted when we feel brave 
 -	enough to replace TIFFScanlineSize alltogether
 -
 -	* libtiff/tif_ojpeg.c: fixed bug in OJPEGReadSkip
 -
 -2006-04-04  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* libtiff/tiffio.h: added new type tstrile_t
 -
 -	* libtiff/tif_dir.h: changed types of td_stripsperimage and td_nstrips 
 -	to new tstrile_t, types of td_stripoffset and td_stripbytecount to 
 -	toff_t*
 -
 -	* libtiff/tif_ojpeg.c: totally new implementation
 -
 -	* libtiff/tif_dirread.c: added several hacks to suit new support of 
 -	OJPEG
 -
 -	* libtiff/tif_getimage.c: removed TIFFTAG_JPEGCOLORMODE handling
 -	of OJPEG images in favor of tif_getimage.c native handling of
 -	YCbCr and desubsampling
 -
 -2006-03-29  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: JPEGVSetField() so that altering the photometric
 -	interpretation causes the "upsampled" flag to be recomputed.  Fixes
 -	peculiar bug where photometric flag had to be set before jpegcolormode
 -	flag.
 -
 -2006-03-25  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* libtiff/tif_jpeg.c: strip size related bugfix in encode raw
 -
 -	* libtiff/tif_strip.c: temporarilly added two new versions of
 -	TIFFScanlineSize
 -	  - TIFFNewScanlineSize: proposed new version, after all related
 -	    issues and side-effects are sorted out
 -	  - TIFFOldScanlineSize: old version, from prior to 2006-03-21 change
 -	This needs further sorting out.
 -
 -2006-03-25  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* contrib/addtiffo/tif_ovrcache.c: bugfix to correctly pass size
 -	of last truncated strip data to TIFFWriteEncodedStrip
 -
 -2006-03-25  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* libtiff/{tif_jpeg.c, tif_strip.c}: bugfix of tif_jpeg decode raw
 -
 -2006-03-25  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* libtiff/tif_getimage.c: bugfix/rewrite of putcontig8bitYCbCr22tile
 -
 -	* libtiff/tif_getimage.c: added putcontig8bitYCbCr12tile
 -
 -	* libtiff/tif_read.c: added support for new TIFF_NOREADRAW flag to 
 -	prepare	the path for new tif_ojpeg.c
 -
 -2006-03-23  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.8.2 released.
 -
 -	* tools/Makefile.am: Use runtime paths linker flags when rpath
 -	option enabled.
 -
 -2006-03-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/libtiff.def: Added missed exports as per bug
 -	http://bugzilla.remotesensing.org/attachment.cgi?id=337
 -
 -	* contrib/addtiffo/Makefile.vc, libtiff/Makefile.vc, port/Makefile.vc,
 -	tools/Makefile.vc: Makefiles improvements as per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1128
 -
 -	* nmake.opt libtiff/{tif_config.h.vc, tif_unix.c, tiffio.h},
 -	tools/{fax2ps.c, fax2tiff.c, tiff2pdf.c}: Fixed win32 I/O functions
 -	usage as per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1127
 -
 -	* libtiff/tif_strip.c: Take subsampling in account when calculating
 -	TIFFScanlineSize().
 -
 -	* tools/tiffcp.c: Do not set RowsPerStrip bigger than image length.
 -
 -2006-03-17  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/fax2tiff.c: Fixed wrong TIFFerror() invocations as per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1125
 -
 -	* tools/fax2ps.c: Fixed reading the input stream from stdin as per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1124
 -
 -2006-03-16  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tiffiop.h: Added decalration for
 -	_TIFFSetDefaultCompressionState().
 -
 -	* libtiff/{tif_jpeg.c, tif_fax3.c, tif_zip.c, tif_pixarlog.c,
 -	tif_lzw.c, tif_luv.c}: Use _TIFFSetDefaultCompressionState() in all
 -	codec cleanup methods. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1120
 -
 -2006-03-15  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_jpeg.c: Do not cleanup codec state in TIFFInitJPEG(). As
 -	per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1119
 -
 -	* tools/raw2tiff.c: Do not set RowsPerStrip larger than ImageLength.
 -	As per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1110
 -
 -	* libtiff/tiffiop.h: dblparam_t typedef removed; GLOBALDATA macro
 -	removed; move here the STRIP_SIZE_DEFAULT macro definition.
 -
 -	* libtiff/{tif_dirread.c, tif_strip.c}: Removed STRIP_SIZE_DEFAULT
 -	macro definition.
 -
 -	* libtiff/tif_dir.c: Use double type instead of dblparam_t.
 -
 -2006-03-14  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Do not check the PlanarConfig tag presence
 -	in TIFFReadDirectory, because it is always set at the start of
 -	function and we allow TIFFs without that tag set.
 -
 -2005-03-13  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.8.1 released.
 -
 -2006-03-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Fixed error reporting in TIFFFetchAnyArray()
 -	function as per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1102
 -
 -	* libtiff/tif_dirread.c: More wise check for integer overflow
 -	condition as per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1102
 -
 -	* libtiff/{tif_jpeg.c, tif_pixarlog.c, tif_fax3.c, tif_zip.c}:
 -	Properly restore setfield/getfield methods in cleanup functions. As
 -	per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1102
 -
 -2006-03-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_predict.c, tif_predict.h}: Added new function
 -	TIFFPredictorCleanup() to restore parent decode/encode/field methods.
 -
 -	* libtiff/{tif_lzw.c, tif_pixarlog.c, tif_zip.c}: Use
 -	TIFFPredictorCleanup() in codec cleanup methods. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1102
 -
 -	* libtiff/tif_dirread.c: Fixed integer overflow condition in
 -	TIFFFetchData() function. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1102
 -
 -2006-03-01  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_ojpeg.c: Set the ReferenceBlackWhite with the
 -	TIFFSetField() method, not directly. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1043
 -
 -	* tools/ppm2tiff.c: Added support for PBM files as per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1044
 -
 -2006-02-27  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_write.c: Small code rearrangement in TIFFWriteScanline()
 -	to avoid crash as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1081.
 -
 -2006-02-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Functions t2p_sample_rgbaa_to_rgb() and
 -	t2p_sample_rgba_to_rgb() was used in place of each other, that was
 -	resulted in problems with RGBA images with associated alpha.
 -	As per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1097
 -
 -2006-02-23  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirwrite.c: Properly write TIFFTAG_DOTRANGE tag as per
 -	bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1088.
 -
 -	* libtiff/tif_print.c: Properly read TIFFTAG_PAGENUMBER,
 -	TIFFTAG_HALFTONEHINTS, TIFFTAG_YCBCRSUBSAMPLING and TIFFTAG_DOTRANGE
 -	tags as per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1088.
 -
 -	* tools/tiff2ps.c: Properly scale all the pages when converting
 -	multipage TIFF with /width/height/center options set. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1080
 -
 -2006-02-15  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Do not create output file until all option checks
 -	will be done. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1072
 -
 -	* tools/bmp2tiff.c: Added ability to create multipage TIFFs from the
 -	list of input files as per bug:
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1077
 -
 -2006-02-09  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_tile.c: Fix error reporting in TIFFCheckTile() as per
 -	bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1063.
 -
 -	* tools/tiffgt.c: Avoid crashing in case of image unsupported by
 -	TIFFRGBAImage interface.
 -
 -	* libtiff/tif_color.c: Avoid overflow in case of wrong input as per
 -	bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1065.
 -
 -2006-02-07  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiff2pdf.c: Fixed support for non-YCbCr encoded JPEG
 -	compressed TIFF files, per submission from Dan Cobra. 
 -
 -2006-02-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dirread.c, tif_packbits.c, tif_win32.c}: Properly
 -	cast values to avoid warnings. As per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1033.
 -
 -	* libtiff/tif_dirinfo.c: Use TIFF_NOTYPE instead of 0 when
 -	appropriate. As per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1033.
 -
 -	* libtiff/tif_aux.c: Fixed type of temporary variable in
 -	_TIFFCheckMalloc() as per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1033.
 -
 -2006-02-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_aux.c: Return static array when fetching default
 -	YCbCrCoefficients (another problem, reported a the
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1029 entry).
 -
 -2006-02-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dir.c: Special handling for PageNumber, HalftoneHints,
 -	YCbCrSubsampling and DotRange tags as per bugs
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1029
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1034
 -
 -	* libtiff/tif_dirread.c: Use _TIFFGetExifFieldInfo() instead of
 -	_TIFFGetFieldInfo() in TIFFReadEXIFDirectory() call as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1026.
 -
 -2006-01-23  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtool related stuff updated from the 2.1a branch.
 -
 -2006-01-11  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/bmp2tiff,pal2rgb,ppm2tiff,ras2tiff,raw2tiff,sgi2tiff,
 -	tiff2bw,tiffcp: Fixed jpeg option processing so -c jpeg:r:50 works
 -	properly as per bug:
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1025
 -
 -2006-01-09  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* configure.ac: Fix with_default_strip_size comparison as reported
 -	by Norihiko Murase.
 -
 -2006-01-08  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* test/Makefile.am (LIBTIFF): Due to linking against libtiff
 -	incorrectly, tests were not actually testing the uninstalled
 -	libtiff.  Now they are.
 -
 -2006-01-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirinfo.c: Change definitions for TIFFTAG_ICCPROFILE,
 -	TIFFTAG_PHOTOSHOP, TIFFTAG_RICHTIFFIPTC, TIFFTAG_XMLPACKET: readcount
 -	should be uint32 value.
 -
 -2006-01-02  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* html/man/Makefile.am (htmldoc): Fix htmldoc rule so that it can
 -	be used if build directory is not the same as source directory.
 -	* man/{TIFFGetField.3tiff, TIFFSetField.3tiff}: Documented
 -	TIFFTAG_PHOTOSHOP, TIFFTAG_RICHTIFFIPTC, and TIFFTAG_XMLPACKET,
 -	and re-sorted tag names in alphabetical order.
 -
 -2005-12-29  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.8.0 released.
 -
 -2005-12-28  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/bmp2tiff.c (main): Fixed warning regarding returning
 -	inconsistent types from a condition.
 -	* tools/tiffcmp.c (CheckLongTag): Eliminate warning due to printf
 -	format.
 -	* tools/bmp2tiff.c: Reduce compilation warnings on big-endian CPUs.
 -
 -2005-12-28  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* html/{index.html, support.hml, libtiff.html}: Cleaned up HTML
 -
 -2005-12-27  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tiffio.h: Added VC_EXTRALEAN definition before including
 -	windows.h, to reduce the compile time.
 -
 -2005-12-26  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tif_jpeg.c: Improve compilation under MinGW.
 -
 -2005-12-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dir.c, tif_dir.h, tif_dirread.c, tif_dirinfo.c}: 
 -	tiffFieldInfo and exifFieldInfo arrays definitions moved back to
 -	tif_dirinfo.c; added _TIFFGetFieldInfo() and _TIFFGetExifFieldInfo()
 -	private functions to retrieve FieldInfo arrays.
 -
 -2005-12-24  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* html/build.html: Added some additional instructions for when
 -	building using MSVC under Windows.  Also fixed two HTML syntax
 -	errors and used HTML Tidy to tidy up the HTML syntax and
 -	formatting.
 -
 -2005-12-24  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_aux.c, tif_dir.c, tif_dir.h, tif_dirwrite.c,
 -	tif_print.c, tif_getimage.c}: Make InkSet, NumberOfInks, DotRange and
 -	StoNits tags custom.
 -
 -2005-12-23  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_aux.c, tif_dir.c, tif_dir.h, tif_print.c}: Make
 -	WhitePoint tag custom.
 -
 -	* libtiff/{tif_dir.h, tiff.h}: More EXIF tags added.
 -
 -2005-12-23  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* libtiff/tiffio.h: fixed typo that potentially resulted in 
 -	redefininition of USE_WIN32_FILEIO
 -
 -	* libtiff/*: Added more 'dual-mode' error handling: Done TIFFWarning 
 -	calls in core LibTiff.
 -
 -2005-12-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dir.c, tif_dir.h, tif_print.c}: Make RichTIFFIPTC,
 -	Photoshop and ICCProfile tags custom.
 -
 -2005-12-21  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* libtiff/*, contrib/*: Added 'dual-mode' error handling, enabling 
 -	newer code to get context indicator in error handler and still
 -	remain compatible with older code: Done TIFFError calls everywhere 
 -	except in tools   
 -
 -2005-12-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcp.c: Added many error reporting messages; fixed integer
 -	overflow as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=789
 -
 -2005-12-16  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* contrib/addtiffo/*: Major upgrade by Joris to support subsampled
 -	YCbCr images in jpeg compressed TIFF files.
 -
 -2005-12-14  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcp.c: Return non-zero status when reading fails (again).
 -
 -2005-12-13  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcp.c: Return non-zero status when reading fails.
 -
 -2005-12-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dir.h, tiff.h}: Added more EXIF tags.
 -
 -2005-12-09  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dir.c, tif_dir.h, tif_print.c}: Make XMLPacket tag
 -	custom.
 -
 -	* tools/tiffinfo.c: Print EXIF directory contents if exist.
 -
 -	* libtiff/tiff.h: Few EXIF tag numbers added.
 -
 -	* libtiff/{tif_dirinfo.c, tif_dirread.c, tif_dir.h, tif_dir.c,
 -	tiffio.h}: Preliminary support to read custom directories. New
 -	functions: TIFFReadCustomDirectory() and TIFFReadEXIFDirectory().
 -
 -2005-12-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dirinfo.c, tif_dirread.c, tif_dir.h, tif_dir.c}:
 -	More work to implement custom directory read support.
 -
 -	* libtiff/{tif_aux.c, tif_dirinfo.c, tif_dirread.c, tif_dir.h,
 -	tif_dir.c, tif_print.c}: Make YCbCrCoefficients and ReferenceBlackWhite
 -	tags custom.
 -
 -2005-12-05  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: One more workaround for broken
 -	StripByteCounts tag. Handle the case when StripByteCounts array filled
 -	with completely wrong values.
 -
 -2005-11-30  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirinfo.c: Release file descriptor in case of failure
 -	in the TIFFOpenW() function as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1003
 -
 -	* libtiff/tif_dirinfo.c: Correctly yse bsearch() and lfind()
 -	functions as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1008
 -
 -2005-11-20  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_open.c, tiff.h, tiffdump.c: Incorporate preliminary support
 -	for MS MDI format.
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=1002
 -
 -	* .cvsignore: many files added, and a few update according
 -	to suggestion of Brad HArds on tiff mailing list. 
 -
 -2005-11-03  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/libtiff.def, tiffiop.h, tiffio.h: Made TIFFFreeDirectory
 -	public.
 -
 -2005-10-31  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/fax2tiff.c: Properly calculate sizes of temporary arrays
 -	as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=943
 -
 -	* tools/fax2tiff.c: Added option '-r' to set RowsPerStrip parameter
 -	as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=944
 -
 -	* tools/tiffdump.c: Fixed typeshift and typemask arrays initialization
 -	problem as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=946
 -
 -	* tools/bmp2tiff.c: Fixed possible integer overflow error as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=965
 -
 -	* libtiff/tif_dirinfo.c: Make XResolution, YResolution and
 -	ResolutionUnit tags modifiable during write process. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=977
 -
 -	* tools/tiffsplit.c: Copy fax related fields over splitted parts
 -	as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=983
 -
 -2005-10-21  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_dirread.c: Don't try and split single strips into "0" strips
 -	in ChopUpSingleUncompressedStrip.  This happens in some degenerate
 -	cases (like 1x1 files with stripbytecounts==0 (gtsmall.jp2 embed tiff)
 -
 -2005-10-20  Joris Van Damme  <joris.at.lebbeke@skynet.be>
 -
 -	* tif_fax3.c: changed 'at scanline ...' style warning/errors
 -	with incorrect use of tif_row, to 'at line ... of
 -	strip/tile ...' style
 -
 -2005-10-15  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_write.c: fixed setting of planarconfig as per bug report
 -	on the mailing list from Joris.
 -
 -2005-10-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure.ac, configure, nmake.opt, libtiff/{tif_config.h,
 -	tif_dirread.c}: Make the default strip size configurable via the
 -	--with-default-strip-size and STRIP_SIZE_DEFAULT options.
 -
 -2005-09-30  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* html/support.html: Fixed link to documentation on Greg Ward's
 -	LogLuv TIFF format.
 -
 -2005-09-28  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffdump.c: Fixed crash when reading malformed tags.
 -
 -2005-09-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Added missed 'break' statement as per bug
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=932
 -
 -2005-09-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.7.4 released.
 -
 -	* {configure, configure.ac, Makefile.am, autogen.sh}: Applied patch
 -	from Patrick Welche (all scripts moved in the 'config' and 'm4'
 -	directories).
 -
 -2005-09-12  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_open.c: reintroduce seek to avoid problem on solaris.
 -
 -2005-09-05  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dir.c: When prefreeing tv->value in TIFFSetFieldV
 -	also set it to NULL to avoid double free when re-setting custom
 -	string fields as per: 
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=922
 -
 -2005-08-12  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_print.c: avoid signed/unsigned warning.
 -
 -	* libtiff/tif_dirread.c: removed unused variable.
 -
 -2005-07-30  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dir.c: Fixed up support for swapping "double complex"
 -	values (128 bits as 2 64 bits doubles).  GDAL gcore tests now
 -	pass on bigendian (macosx) system.
 -
 -2005-07-28  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_aux.c, tif_dirread.c, tif_fax3.c, tiffiop.h}: Rename
 -	CheckMalloc() function to _TIFFCheckMalloc() and make it available
 -	globally as an internal helper routine.
 -
 -2005-07-27  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dir.c: More improvements in the "pass by value" part of
 -	the custom tags handling code.
 -
 -2005-07-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dirread.c, tif_dirinfo.c}: Do not upcast BYTEs to
 -	SHORTs in the TIFFFetchByteArray(). Remove TIFFFetchExtraSamples()
 -	function, use TIFFFetchNormalTag() instead as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=831
 -
 -	Remove TIFFFetchExtraSamples() function, use TIFFFetchNormalTag()
 -	instead. 
 -
 -	* libtiff/tiffconf.h.in: One more attempt to fix the AIX bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=39
 -
 -2005-07-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_print.c: Fixed printing of the BYTE and SBYTE arrays.
 -
 -	* tools/tiffdump.c: Added support for TIFF_IFD datatype.
 -
 -2005-07-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_write.c: Do not check the PlanarConfiguration field in
 -	the TIFFWriteCheck() function in case of single band images (as per
 -	TIFF spec).
 -
 -2005-07-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* SConstruct, libtiff/SConstruct: Added the first very preliminary
 -	support for SCons software building tool (http://www.scons.org/).
 -	This is experimental infrastructure and it will exist along with the
 -	autotools mechanics.
 -
 -2005-07-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* port/{getopt.c, strcasecmp.c, strtoul.c}: Update modules from
 -	the NetBSD source tree (the old	4-clause BSD license changed to
 -	the new 3-clause one).
 -
 -	* configure.ac, port/lfind.c, libtiff/tiffiop.h: Added lfind()
 -	replacement module.
 -
 -	* port/dummy.c: Make the dummy function static.
 -
 -2005-07-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcp.c: Fixed WhitePoint tag copying.
 -
 -	* libtiff/{tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_print.c}:
 -	Make FieldOfViewCotangent, MatrixWorldToScreen, MatrixWorldToCamera,
 -	ImageFullWidth, ImageFullLength and PrimaryChromaticities tags custom.
 -
 -2005-07-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.7.3 released.
 -
 -	* configure, configure.ac: Do not use empty -R option when linking
 -	with --enable-rpath.
 -
 -2005-07-01  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffiop.h, tif_open.c}: Added open option 'h' to avoid
 -	reading the first IFD when needed. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=875
 -
 -	* libtiff/tif_color.c: Better use of TIFFmin() macro to avoid side
 -	effects.
 -
 -2005-06-23  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Print two characters per loop in the
 -	t2p_write_pdf_trailer(). As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=594
 -
 -	* tools/tiffgt.c: Use MacOS X OpenGL framework when appropriate. As
 -	per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=844
 -
 -	* acinclude.m4: Updated to latest OpenGL test macros versions.
 -
 -	* libtiff/tiff.h: Use correct int size on Sparc 64bit/Sun compiler
 -	platform. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=855
 -
 -2005-06-14  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirinfo.c: Added support for ClipPath, XClipPathUnits
 -	and YClipPathUnits tags.
 -
 -2005-06-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* contrib/addtiffo/tif_ovrcache.c: Properly extract tile/strip size;
 -	use pixel sized shift in contigous case.
 -
 -2005-06-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* contrib/addtiffo/{tif_overview.c, tif_ovrcache.c, tif_ovrcache.h}:
 -	Make overviews working for contiguos images.
 -
 -2005-06-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_open.c: Replace runtime endianess check with the compile
 -	time one.
 -
 -	* libtiff/tif_predict.c: Floating point predictor now works on
 -	big-endian hosts.
 -
 -2005-06-01  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dir.c: Use _TIFFsetString() function when read custom
 -	ASCII values.
 -
 -	* libtiff/{tif_dirinfo.c, tif_dir.h, tif_dir.c, tif_print.c}: Make
 -	DocumentName, Artist, HostComputer, ImageDescription, Make, Model,
 -	Copyright, DateTime, PageName, TextureFormat, TextureWrapModes and
 -	TargetPrinter tags custom.
 -
 -	* libtiff/tif_jpeg.c: Cleanup the codec state depending on
 -	TIFF_CODERSETUP flag (to fix memry leaks).
 -
 -	* libtiff/tif_jpeg.c: Initialize JPEGTables array with zero after
 -	allocating.
 -
 -2005-05-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure.ac, libtiff/Makefile.am: Added workaround for
 -	OpenBSD/MirOS soname problem as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=838
 -
 -	* libtiff/tif_dirwrite.c: Use tdir_count when calling
 -	TIFFCvtNativeToIEEEDouble() in the TIFFWriteDoubleArray() function as
 -	per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=845
 -
 -2005-05-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/ppm2tiff.c: Fixed format string when read PPM file header with
 -	the fscanf() function. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=861
 -
 -	* libtiff/{tif_dirinfo.c, tif_print.c}: TIFFFetchByteArray() returns
 -	uint16 array when fetching the BYTE and SBYTE filds, so we should
 -	consider result as pointer to uint16 array and not as array of chars.
 -	As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=831
 -
 -	* libtiff/tif_dir.c: More efficient custom tags retrieval as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=830
 -
 -	* libtiff/tif_win32.c: Use FILE_SHARE_READ | FILE_SHARE_WRITE share
 -	mode in CreateFile() call as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=829
 -
 -	* libtiff/Makefile.am: Fixed parallel compilation of the libtiff and
 -	libtiffxx libraries as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=826
 -
 -	* contrib/addtiffo/{tif_overview.c, tif_ovrcache.h}: Sinchronized with
 -	GDAL.
 -
 -2005-05-23  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: Substantial fix for addtiffo problems with
 -	JPEG encoded TIFF files.  Pre-allocate lots of space for jpegtables
 -	in directory.
 -
 -2005-05-22  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirread.c: Changed the code that computes 
 -	stripbytecount[0] if it appears bogus to ignore if stripoffset[0] is
 -	zero. This is a common case with GDAL indicating a "null" tile/strip.
 -
 -2005-05-17  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffsplit.c: Check for JPEGTables tag presence before copying.
 -
 -2005-05-06  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirread.c: Applied similar change to 
 -	TIFFFetchPerSampleLongs and TIFFFetchPerSampleAnys. 
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=843
 -
 -	* libtiff/tif_jpeg.c: added LIB_JPEG_MK1 support in JPEGDecodeRaw().
 -
 -2005-05-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	* tools/tiff2pdfr.c, man/tiff2pdf.1: Calculate the tile width properly;
 -	added new option '-b' to use interpolation in output PDF files (Bruno
 -	Ledoux).
 -
 -2005-05-05  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirread.c: Ensure that broken files with too many
 -	values in PerSampleShorts work ok instead of crashing.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=843
 -
 -2005-04-27  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffdither.c: Copy the PhotometricInterpretation tag from the
 -	input file.
 -
 -2005-04-15  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_predict.c: Added ability to encode floating point
 -	predictor, as per TIFF Technical Note 3.
 -
 -2005-04-14  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_predict.h, tif_predict.c}: Added ability to decode
 -	floating point predictor, as per TIFF Technical Note 3.
 -
 -2005-04-13  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffio.h, tiffiop.h, tif_dir.c, tif_read.c, tif_swab.c}:
 -	Added _TIFFSwab24BitData() and TIFFSwabArrayOfLong() functions used to
 -	swap 24-bit floating point values.
 -
 -	* libtiff/tiff.h: Added predictor constants.
 -
 -2005-04-08  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffiop.h, tif_dir.c}: Use uint32 type for appropriate
 -	values in _TIFFVSetField() function. Inspired by the bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=816
 -
 -	* man/TIFFSetField.3tiff: Fixed definition of the TIFFTAG_INKNAMES tag
 -	as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=816
 -
 -2005-03-30  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_open.c: Do not read header in case the output file
 -	should be truncated (Ron).
 -
 -	* libtiff/{tif_dirinfo.c, tif_config.h.vc}: Use lfind() instead
 -	of bsearch() in _TIFFFindFieldInfoByName() function (Ron).
 -
 -	* libtiff/{tiff.h, tif_dirinfo.c}: Fixes in EXIF tag ordering (Ron).
 -
 -2005-03-22  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure.ac, libtiff/Makefile.am: Use libtool machinery to pass
 -	rpath option.
 -
 -2005-03-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dir.c, tif_print.c}: Handle all data types in custom
 -	tags.
 -
 -2005-03-18  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/dirinfo.c: Added DNG tags.
 -
 -	* libtiff/{tif_dir.c, tif_print.c}: More improvements in custom tag
 -	handling code.
 -
 -	* libtiff/tiff.h: More comments; added missed DNG tag (LensInfo);
 -	added DNG 1.1.0.0 tags.
 -
 -	* tools/tif2pdf.c: Fixed problem with alpha channel handling as per
 -	bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=794
 -
 -	* man/TIFFGetField.3tiff: Add a note about autoregistered tags.
 -
 -2005-03-17  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* nmake.opt: Build with Win32 CRT library by default.
 -
 -	* tools/tiff2ps.c: Fixed typo in page size handling code.
 -
 -	* libtiff/{tif_dir.c, tif_print.c}: Support for custom tags, passed
 -	by value.
 -
 -	* libtiff/{tiff.h, tif_dirinfo.c, tiffiop.h}: Added EXIF related tags.
 -
 -2005-03-15  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.7.2 released.
 -
 -2005-03-09  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcmp.c: Added ability to compare the 32-bit integer and
 -	floating point data; complain on unsupported bit depths.
 -
 -2005-03-05  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tif_stream.cxx: Use ios namespace instead of ios_base to support
 -	GCC 2.95.
 -
 -	* libtiff/{tiff.h, tif_fax3.tif, tif_jpeg.c}: Applied correct patch from
 -	Lee Howard for HylaFax DCS tag
 -	(see http://bugzilla.remotesensing.org/show_bug.cgi?id=771)
 -
 -2005-03-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure, configure.ac: Use -rpath option instead of -R as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=732
 -
 -	* libtiff/{tiff.h, tif_fax3.tif, tif_jpeg.c}: Applied patch from Lee
 -	Howard to support a new tag TIFFTAG_FAXDCS (34911) used in HylaFax
 -	software. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=771
 -
 -	* nmake.opt, html/build.html: Add more comments, change the config
 -	file organization a bit as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=764
 -
 -	* tools/tiffcmp.c: Use properly sized buffer in short arrays comparison
 -	as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=785
 -
 -2005-03-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: More logic to guess missed strip size as per
 -	bug http://bugzilla.remotesensing.org/show_bug.cgi?id=705
 -
 -	* tools/fax2ps.c: Replace insecure mktemp() function with the
 -	tmpfile() as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=786
 -
 -2005-02-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tiff.h: Changed the int8 definition to be always signed char
 -	as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=727
 -
 -	* libtiff/tiffio.h: Move TIFFOpenW() function into the extern "C"{}
 -	block as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=763
 -
 -2005-02-03  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiffgt.c: Fix problem on big-endian CPUs so that images
 -	display more correctly.  Images display brighter than they should
 -	on a Sun workstation.
 -
 -2005-02-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Estimate strip size in case of wrong or
 -	suspicious values in the tags. As per bugs
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=705
 -
 -	and
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=320
 -
 -	* tools/tiff2ps.c: Fixed problem with page sizes as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=742
 -
 -2005-01-31  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tiff.h (TIFFTAG_TILEWIDTH): Corrected description.
 -	(TIFFTAG_TILELENGTH): Corrected description.
 -
 -2005-01-30  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure.ac: Fixes for --with-docdir option as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=759
 -
 -	* libtiff/tif_open.c: Remove unnesessary TIFFSeekFile() call as per
 -	bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=756
 -
 -	* libtiff/tif_stream.cxx: Fixes for C++ stream interface from
 -	Michael Rinne and Edward Lam.
 -
 -2005-01-15  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure.ac: Make the documentation directory location configurable
 -	via the --with-docdir option (as suggested by Jeremy C. Reed).
 -
 -	* libtiff/tif_color.c: Use double as the second argument of pow()
 -	function in TIFFCIELabToRGBInit(). As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=741
 -
 -	* libtiff/tif_pixarlog.c: Avoid warnings when converting float to
 -	integer as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=740
 -
 -	* libtiff/tif_getimage.c: Always fill the error message buffer in
 -	TIFFRGBAImageBegin() as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=739
 -	
 -2005-01-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_jpeg.c: Added ability to read/write the fax specific
 -	TIFFTAG_FAXRECVPARAMS, TIFFTAG_FAXSUBADDRESS and TIFFTAG_FAXRECVTIME
 -	tags as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=736
 -
 -	* libtiff/tif_win32.c: Fixed message formatting in functions
 -	Win32WarningHandler() and Win32ErrorHandler() as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=735
 -
 -	* tools/tiff2ps.c: Interpret the -w and -h options independently. As
 -	per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=689
 -
 -2005-01-11  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tiffio.h: Move the color conversion routines in the 'extern
 -	"C"' section as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=727
 -
 -	* libtiff/tiff.h: Restore back the workaround for AIX Visual Age C
 -	compiler to avoid double definition of BSD types as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=39	
 -
 -	* libtiff/Makefile.am: Place the C++ stream API in the separate
 -	library called libtiffxx to avoid unneeded dependencies. Probably
 -	there will be more C++ API in the future. As per bugs
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=733
 -
 -	and
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=730
 -
 -2005-01-05  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffdump.c: Fixed problem when read broken TIFFs with the
 -	wrong tag counts (Dmitry V. Levin, Martin Pitt).
 -
 -	* configure.ac: Replace --disable-c++ with the --disable-cxx option as
 -	per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=730
 -
 -2004-12-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_getimage.c: More fixes for multiple-alpha-channelled
 -	RGB-images as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=713
 -
 -
 -	* tools/tiffset.c: Convert character option to integer value as per
 -	bug http://bugzilla.remotesensing.org/show_bug.cgi?id=725
 -
 -2004-12-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.7.1 released.
 -
 -	* html/tiffset.1.html: Add missed manual page as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=678
 -
 -	* libtiff/tiff.h: Revert back libtiff data type definitions as per
 -	bug http://bugzilla.remotesensing.org/show_bug.cgi?id=687
 -
 -2004-12-19  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Do not forget about TIFF_VARIABLE2 when
 -	checking for tag count in TIFFReadDirectory() function. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=713
 -
 -	* libtiff/{tif_dirread.c, tif_fax3.c}: More argument checking in
 -	CheckMallock() function.
 -
 -	* libtiff/tif_getimage.c: Support for multiple-alpha-channelled
 -	RGB-images as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=718
 -
 -2004-12-15  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_getimage.c: #define A1 bracketing for clean build on
 -	SunPro compiler. 
 -
 -2004-12-11  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* autogen.sh: aclocal and autoheader should be executed after
 -	libtoolize.  Also add '-I .' to aclocal invocation to check
 -	current directory for macros.
 -
 -2004-12-10  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirwrite.c: Always write TIFFTAG_SUBIFD using LONG type
 -	as per bugs
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=703
 -
 -	and
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=704
 -
 -2004-12-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* nmake.opt: Link with the user32.lib in windowed mode. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=697
 -
 -	* libtiff/tif_win32.c: Use char* strings instead of TCHAR in windowed
 -	mode as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=697
 -
 -	* libtiff/tif_config.in.vc: Removed unneded definitions for
 -	read/open/close/lseek functions to fix the
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=680
 -	
 -2004-12-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dir.c, tif_dirread.c}: Remove TIFFReassignTagToIgnore()
 -	call from the TIFFReadDirectory() function. TIFFReassignTagToIgnore
 -	must be removed in the future, as it was never used properly. As per
 -	bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=692
 -
 -2004-11-30  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tif_jpeg.c: Added a work-around in order to allow
 -	compilation with the heavily modified version of libjpeg delivered
 -	with Cygwin.
 -
 -2004-11-29  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dir.c: Properly handle tags, which have the uint32
 -	counts. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=693
 -
 -	* tools/fax2ps.c: Be able to extract the first page (#0). As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=690
 -
 -2004-11-28  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_unix.c: Make UNIX module compilable (and usable)
 -	on Windows.
 -
 -	* nmake.opt: Add missed DLLNAME variable.
 -
 -2004-11-26  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/makefile.vc: make it easier to rename the libtiff DLL. 
 -
 -2004-11-24  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* man/libtiff.3tiff: Improvements in the "LIST OF ROUTINES" table as
 -	per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=545
 -
 -	* man/tiffset.1: Added manual page for tiffset tool written by Jay
 -	Berkenbilt. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=678
 -
 -2004-11-23  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_error.c: fixed TIFFerror call to be TIFFError.
 -
 -2004-11-21  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* html/document.html: Updated Adobe web links as per email from Joris.
 -
 -2004-11-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffio.hxx, tiffio.h}: C++ stream interface moved to new
 -	file tiffio.hxx. We don't have any C++ in tiffio.h, those who want to
 -	use C++ streams should #include <tiffio.hxx>.
 -
 -2004-11-13  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tiff.h: Added Adobe DNG tags.
 -
 -	* libtiff/tif_win32.c: Typo fixed.
 -
 -	* libtiff/{tif_stream.cxx, tiffio.h}: C++ stream interface updated to
 -	be compliant with the latest standard. Appropriate additions in
 -	makefiles now completed.
 -
 -2004-11-11  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffset.c, libtiff/tif_dirinfo.c: Properly handle the
 -	different tag types. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=600
 -
 -2004-11-10  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_aux.c: Set the appropriate ReferenceBlackWhite array for
 -	YCbCr image which lacks that tag (noted by Hans Petter Selasky).
 -
 -2004-11-09  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_color.c: Division by zero fixed (Hans Petter Selasky).
 -
 -2004-11-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_stream.cxx, tiffio.h}: Added C++ stream interface
 -	contributed by Edward Lam (see
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=654 for details).
 -	Though no changes in any makefiles yet.
 -
 -2004-11-05  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_open.c: Removed close() in TIFFClientOpen() if file
 -	is bad. This is the callers responsibility.
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=651
 -
 -2004-11-05  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffio.h, tif_win32.c, libtiff.def}: Added TIFFOpenW()
 -	function to work with the double byte strings (used to represent
 -	filenames in some locales). As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=625
 -
 -	* libtiff/tif_dirread.c: Fixed problem when fetching BitsPerSample and
 -	Compression tags of type LONG from broken TIFFS as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=662
 -
 -	* libtiff/tif_dirinfo.c: Fixed definition for TIFFTAG_RICHTIFFIPTC,
 -	the writecount should have uint32 type. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=662
 -
 -	* libtiff/tif_write.c: Fixed wrong if() statement in
 -	TIFFAppendToStrip() function as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=660
 -
 -2004-11-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirinfo.c: Change definition for TIFFTAG_EXTRASAMPLES
 -	field. The caller should supply a count when setting this field. As
 -	per bug
 -
 -	 http://bugzilla.remotesensing.org/show_bug.cgi?id=648
 -	
 -	* libtiff/{tif_jpeg.c, tif_ojpeg.c}: TIFFTAG_JPEGTABLES should have
 -	uint32 count. Use this type everywhere.
 -
 -2004-11-03  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_next.c: avoid use of u_long and u_char types.  Bug 653.
 -
 -2004-11-02  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiff2rgba.c: removed extra newlines in usage message.
 -
 -2004-10-30  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* libtiff/tif_dirwrite.c: Improvements in tag writing code.
 -
 -	* tools/tiff2ps.c: Fixed wrong variable data type when read Position
 -	tags (Tristan Hill).
 -
 -2004-10-30  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tiffiop.h: added fallback definition of assert() if we
 -	don't have assert.h.
 -
 -2004-10-29  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_fax3.c: Fixed case with the wrong decode routines
 -	choosing when the incorrect Group4Options tag set. As per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=323
 -
 -	* libtiff/tif_dirwrite.c: Fixed problem with passing count variable of
 -	wrong type when writing the TIFF_BYTE/TIFF_SBYTE tags in
 -	TIFFWriteNormalTag().
 -
 -2004-10-28  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2ps.c: Fixed wrong variable data type when read Resolution
 -	tags (Peter Fales).
 -
 -	* tools/{bmp2tiff.c, raw2tiff.c}: Get rid of stream I/O functions.
 -
 -2004-10-28  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiff2pdf.c: added casts to avoid warnings.
 -
 -	* libtiff/libtiff.def: Added several more entry points required
 -	to link fax2tiff.c against the DLL on windows. 
 -
 -2004-10-27  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure, configure.ac: Added --enable-rpath option to embed linker
 -	paths into library binary.
 -
 -2004-10-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffset.c: Check the malloc return value (Dmitry V. Levin).
 -
 -	* libtiff/{tif_strip.c, tif_tile.c}: Zero division problem fixed
 -	(Vladimir Nadvornik, Dmitry V. Levin).
 -
 -2004-10-16  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.7.0 released.
 -
 -2004-10-15  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tif_jpeg.c: There seems to be no need to include stdio.h
 -	in this file so its inclusion is removed.  Including stdio.h
 -	sometimes incurs an INT32 typedef conflict between MinGW's
 -	basetsd.h and libjpeg's jmorecfg.h.
 -
 -2004-10-15  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* man/bmp2tiff.1: Added manual page for bmp2tiff utility.
 -
 -2004-10-13  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiffcmp.c (leof): Renamed from 'eof' in order to avoid
 -	conflict noticed under MinGW.
 -	* ltmain.sh: Fix for MinGW compilation.
 -
 -2004-10-13  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* man/tiffsplit.1: Fixed to indicate using aaa-zzz, not aa-zz.
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=635
 -
 -2004-10-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dirread.c, tif_jpeg.c, tif_luv.c, tif_ojpeg.c,
 -	tif_pixarlog.c, tif_write.c}: Handle the zero strip/tile sizes
 -	properly (Dmitry V. Levin, Marcus Meissner).
 -
 -2004-10-11  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirinfo.c: Type of the TIFFTAG_SUBIFD field changed
 -	to TIFF_IFD.
 -
 -2004-10-10  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/bmp2tif.c: Check the space allocation results.
 -
 -2004-10-09  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dir.c: Initialize td_tilewidth and td_tilelength fields
 -	of the TIFFDirectory structure with the 0 instead of -1 to avoid
 -	confusing integer overflows in TIFFTileRowSize() for striped images.
 -
 -	* tools/tiff2pdf.c: Fixed TransferFunction tag handling reported
 -	by Ross A. Finlayson.
 -
 -	* libtiff/tif_dir.c: Fixed custom tags handling as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=629
 -
 -2004-10-08  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirinfo.c: Fix bug with tif_foundfield and reallocation
 -	of tif_fieldinfo.  
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=630
 -
 -2004-10-04  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* contrib/iptcutil/README: Added the missing README which goes
 -	along with iptcutil.
 -
 -2004-10-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_compress.c: Improved error reporting in
 -	TIFFGetConfiguredCODECs() (Dmitry V. Levin).
 -
 -2004-10-02  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.7.0beta2 released.
 -
 -	* libtiff/{tif_aux.c, tif_compress.c, tif_dirinfo.c, tif_dirwrite.c,
 -	tif_extension.c, tif_fax3.c, tif_luv.c, tif_packbits.c,
 -	tif_pixarlog.c, tif_write.c}: Added checks for failed memory
 -	allocations and	integer overflows (Dmitry V. Levin).
 -
 -	* libtiff/tiff.h: Missed TIFF_BIGTIFF_VERSION constant added.
 -
 -2004-10-01  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_open.c: added a more informative message if a BigTIFF
 -	file is opened.
 -
 -2004-09-30  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirinfo.c: changed type of XMLPacket (tag 700) to 
 -	TIFFTAG_BYTE instead of TIFFTAG_UNDEFINED to comply with the info
 -	in the Adobe XMP Specification.
 -
 -2004-09-29  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_jpeg.c, tif_pixarlog.c}: Use _TIFFmemset() instead of
 -	memset().
 -
 -	* libtiff/{tif_dirread.c, tif_strip.c, tif_tile.c}: Applied patches
 -	from Dmitry V. Levin to fix possible integer overflow problems.
 -
 -2004-09-28  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_getimage.c: Check for allocated buffers before clearing
 -	(Dmitry V. Levin).
 -
 -2004-09-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dir.h, tif_dir.c, tif_dirread.c, tif_write.c}:
 -	Optimize checking for the strip bounds. 
 -
 -	* libtiff/{tif_dirread.c, tif_strip.c}: TIFFScanlineSize() and
 -	TIFFRasterScanlineSize() functions report zero in the case of integer
 -	overflow now. Properly handle this case in TIFFReadDirectory()
 -	(patches from Dmitry V. Levin).
 -
 -2004-09-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_dirinfo.c, tif_strip.c, tif_tile.c}: Use TIFFhowmany8()
 -	macro where appropriate.
 -
 -	* tools/tiff2bw.c: Write ImageWidth/Height tags to output file, as
 -	noted by Gennady Khokhorin.
 -
 -	* libtiff/tif_dirread.c: Always check the return values, returned
 -	by the _TIFFmalloc() (Dmitry V. Levin).
 -
 -	* libtiff/tif_dir.c: Fixed possible integer overflow _TIFFset*Array()
 -	functions (Dmitry V. Levin).
 -
 -	* libtiff/{tif_dirread.c, tif_dir.c, tif_write.c}:
 -	Potential memory leak fixed in TIFFReadDirectory(), _TIFFVSetField(),
 -	TIFFGrowStrips() (found by Dmitry V. Levin).
 -
 -2004-09-24  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffio.h, tif_compress.c}: Added TIFFGetConfiguredCODECs()
 -	to get the list of configured codecs.
 -
 -	* libtiff/{tiffiop.h, tif_dirread.c}: More overflow fixes from
 -	Dmitry V. Levin.
 -
 -2004-09-23  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Applied patch from Dmitry V. Levin to fix
 -	possible integer overflow in CheckMalloc() function.
 -
 -2004-09-22  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffiop.h, tif_strip.c}: Use TIFFhowmany8() macro instead
 -	of plain TIFFhowmany() where appropriate.
 -
 -2004-09-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_getimage.c: Initialize arrays after space allocation.
 -
 -2004-09-19  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.7.0beta released.
 -
 -	* libtiff/{tif_luv.c, tif_next.c, tif_thunder.c}: Several buffer
 -	overruns fixed, as noted by Chris Evans.
 -
 -2004-09-14  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* commit: Added a script to make it more convenient to commit
 -	updates.  The CVS commit message is extracted from this ChangeLog
 -	file.
 -
 -2004-09-14  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure.ac, configure, aclocal.m4, libtiff/{mkspans.c, tif_fax3.c,
 -	tif_getimage.c, tif_luv.c, tif_lzw.c, tif_ojpeg.c, tif_packbits.c,
 -	tif_predict.c, tif_read.c, tif_swab.c, tif_thunder.c, tif_write.c,
 -	tif_dir.c, tif_dirread.c, tif_dirwrite.c, tif_jpeg.c, tif_dirinfo.c,
 -	tif_vms.c, tif_print.c, tif_strip.c, tif_tile.c, tif_dir.h,
 -	tif_config.h.in, tiffiop.h}:
 -	Get rid of BSD data types (u_char, u_short, u_int, u_long).
 -
 -2004-09-13  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* libtiff/tiff.h: Fix column tagging. Reference current Adobe XMP
 -	specification. Reference libtiff bug tracking system to submit
 -	private tag additions.
 -
 -2004-09-12  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* tools/tiffgt.c: Include "tif_config.h".
 -
 -	* configure.ac: Use AM_PROG_CC_C_O since it is now needed to build
 -	tiffgt.  This results in the 'compile' script being added to the
 -	project.
 -
 -	* tools/Makefile.am (tiffgt_CFLAGS): Add extra build options
 -	required to find OpenGL headers necessary to build tiffgt.  Also
 -	ensure that the libtiff that we built is used rather than some other
 -	libtiff installed on the system.
 -
 -2004-09-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure.ac, acinclude.m4, aclocal.m4: New macros to detect GLUT
 -	libraries.
 -
 -2004-09-11  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 -
 -	* configure.ac: Pass library configuration defines via
 -	tif_config.h rather than extending CPPFLAGS. Configure a
 -	libtiff/tiffconf.h in order to satisfy application requirements
 -	(not used by library build). Do not define _POSIX_C_SOURCE=2 since
 -	this causes failure to build on systems which properly respect
 -	this request.
 -
 -	* libtiff/tiffconf.h.in: New file to act as the template for the
 -	configured tiffconf.h
 -
 -	* libtiff/files.lst (HDRS): Install the configured tiffconf.h.
 -
 -2004-09-10  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* html/internals.html: Split off a discussion of adding new tags
 -	into addingtags.html.
 -
 -2004-09-10  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* test/{ascii_tag.c, long_tag.c}: Preliminary test suite added.
 -
 -	* tools/tiff2pdf.c: Fixed reading TransferFunction tag as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=590
 -
 -	* libtiff/tif_print.c: Fixes in InkNames and NumberOfInks reporting.
 -
 -	* libtiff/tif_dirread.c: Don't reject to read tags of the
 -	SamplesPerPixel size when the tag count is greater than number of
 -	samples as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=576
 -
 -	* libtiff/tiff.h: Use _TIFF_DATA_TYPEDEFS_ guardian to switch off
 -	defining int8/uint8/... etc. types. As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=607
 -
 -2004-09-09  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiff2ps.c, tools/tiffmedian.c: fiddle with include files
 -	to avoid compile warnings about getopt() and a few other things.
 -
 -2004-09-02  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Use memcpy() function instead of pointer
 -	assigning magic in TIFFFetchFloat().
 -
 -2004-09-01  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffio.h, tif_open.c}: Applied patches from Joris Van Damme
 -	to avoid requirement for tiffiop.h inclusion in some applications. See
 -	here
 -
 -	http://www.asmail.be/msg0054799560.html
 -	
 -	for details.
 -
 -	* tools/fax2tiff.c: Use the new functions in the code.
 -
 -2004-08-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Initialize arrays properly.
 -
 -	* tools/tiff2ps.c: Avoid zero division in setupPageState() function;
 -	properly initialize array in PSDataBW().
 -
 -2004-08-24  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: More fixes for bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=590
 -
 -	from Ross Finlayson.
 -
 -2004-08-23  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2ps.c: Fixed problem with uninitialized values.
 -
 -	* libtiff/tif_dir.c: Initialize tif_foundfield data member in the
 -	TIFFDefaultDirectory() (in addition to 2004-08-19 fix).
 -
 -	* tools/tiff2pdf.c: Fixed a bunch of problems as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=590
 -
 -2004-08-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Applied patch from Ross Finlayson that checks
 -	that the input file has compression, photometric interpretation,
 -	etcetra, tags or if not than a more descriptive error is returned.
 -
 -	* libtiff/tif_dirread.c: Fixed problem in TIFFReadDirectory() in the
 -	code, responsible for tag data type checking.
 -
 -2004-08-19  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffiop.h, tif_dirinfo.c}: Fixed problem with the static
 -	variable as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=593
 -
 -2004-08-16  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/ras2tiff.c: Fixed issue with missed big-endian checks as per
 -	bug http://bugzilla.remotesensing.org/show_bug.cgi?id=586
 -
 -2004-08-01  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_config.h.in, tif_config.h.vc}: config.h.in and
 -	config.h.vc files renamed in the tif_config.h.in and tif_config.h.vc.
 -
 -2004-07-24  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_lzw.c: LZW compression code is merged back from the
 -	separate package. All libtiff tools are updated to not advertise an
 -	abcence of LZW support.
 -
 -2004-07-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tiffio.h: Revert thandle_t back to void* type.
 -
 -2004-07-11  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_read.c, tif_tile.c, tif_strip.c}: Fixes in error
 -	messages, as suggested by Bernd Herd.
 -
 -2004-07-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dir.c: Call TIFFError() instead of producing warnings
 -	when setting custom tags by value. Reported by Eric Fieleke.
 -
 -2004-06-14  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/bmp2tiff.c: Add missed RawsPerStrip setting.
 -
 -2004-06-08  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/bmp2tiff.c: Added new utility to convert Windows BMP files
 -	into TIFFs.
 -
 -2004-06-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.7.0alpha released.
 -
 -2004-06-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiff.h, tif_dirwrite.c, tif_fax3.c, tif_packbits.c,}: Get rid
 -	of ugly 64-bit hacks, replace them with the clever (autoconf based )
 -	ones :-).
 -
 -	* libtiff/tiffio.h: Define thandle_t as int, not void* (may cause
 -	problems in 64-bit environment).
 -
 -2004-06-05  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffset.c: tiffset now can set any libtiff supported tags.
 -	Tags can be supplied by the mnemonic name or number.
 -
 -	* libtiff/{tiffio.h, tif_dir.h, tif_dirinfo.c,}: Added two new
 -	functions TIFFFindFieldInfoByName() and TIFFFieldWithName().
 -
 -2004-05-27  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_ojpeg.c: Fixed problem with duplicated SOI and SOF
 -	markers as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=581
 -
 -2004-05-24  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffsplit.c: Don't forget to copy Photometric
 -	Interpretation tag.
 -
 -2004-05-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_open.c, tiffio.h}: New function added:
 -	TIFFIsBigEndian(). Function returns nonzero if given was file written
 -	in big-endian order.
 -
 -	* tools/tiffsplit.c: Fixed problem with unproperly written multibyte
 -	files. Now output files will be written using the same byte order
 -	flag as	in the input image. See
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=574
 -	
 -	for details.
 -	
 -2004-05-19  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_print.c: added (untested) support for printing
 -	SSHORT, SLONG and SRATIONAL fields.
 -
 -	* tools/tiffcp.c: close output file on normal exit.
 -
 -2004-05-17  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_fax3.c: Avoid reading CCITT compression options
 -	if compression type mismatches. See
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=565
 -
 -2004-04-30  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_strip.c: Never return 0 from the
 -	TIFFNumberOfStrips().
 -
 -2004-04-29  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Workaround for broken TIFF writers which
 -	store single SampleFormat value for multisampled images. See
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=562
 -
 -2004-04-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure.ac, libtiff/{tiff.h, config.h.in}: Added tests for int8,
 -	int16 and int32 types to avoid complains on some compilers. Details at
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=39
 -
 -2004-04-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2pdf.c: Fixed problem with unaligned access as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=555
 -
 -2004-04-14  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_write.c: Allow in-place updating of the compressed
 -	images (don't work properly with all codecs). For details see GDAL bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=534
 -
 -2004-04-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_jpeg.c: Workaround for wrong sampling factors used
 -	in the Intergarph JPEG compressed TIFF images as per bug:
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=532
 -
 -2004-04-04  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_open.c: close clientdata if TIFFClientOpen() fails
 -	via bad2. 
 -
 -2004-03-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcp.c: Properly set Photometric Interpretation in case of
 -	JPEG compression of grayscale images.
 -
 -	* tools/tiffcp.c: Don't emit warnings when Orientation tag does not
 -	present in the input image.
 -
 -2004-03-19  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* {many}: The first attempt to switch to autotools.
 -
 -2004-03-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_open.c: Use dummy mmap/munmap functions in
 -	TIFFClientOpen() when the appropriate client functions was not
 -	supplied by user.
 -
 -2004-03-02  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/ycbcr.c: fixed main() declaration as per:
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=513
 -
 -2004-02-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffsplit.c: Copy JPEGTables tag contents for JPEG compressed 
 -	images. Reported by Artem Mirolubov.
 -
 -	* libtiff/tif_dirread.c: Fixed problem with handling TIFF_UNDEFINED 
 -	tag type in TIFFFetchNormalTag() as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=508
 -
 -2004-02-17  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_codec.c: Fixed typo in TIFFInitPackBits name as per:
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=494
 -
 -2004-02-05  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_fax3.c: Fixed problem with CCITT encoding modes as per
 -	bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=483
 -
 -	But we need more work on fax codec to support update mode.
 -
 -2004-01-30  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/libtiff.def: Added TIFFCurrentDirOffset, TIFFWriteCheck,
 -	TIFFRGBAImageOK, and TIFFNumberOfDirectories as suggested by 
 -	Scott Reynolds. 
 -
 -2004-01-29  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tiff.h: Fixed tag definitions for TIFFTAG_YCLIPPATHUNITS
 -	and TIFFTAG_INDEXED as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=475
 -
 -	* libtiff/{tif_win32.c, tif_unix.c}: Check whether the pointer is
 -	NULL before proceeding further as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=474
 -
 -	Check results, returned by the TIFFFdOpen() before returning and close
 -	file if TIFFFdOpen() failed as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=468
 -	
 -	* libtiff/tif_open.c: More fixes for
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=468
 -
 -2004-01-28  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{libtiff.def, tif_close.c, tiffio.h, tif_open.c}: Separate
 -	TIFFCleanup() from the TIFFClose() in order to fix the bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=468
 -
 -	* tools/tiffcp.c: Fixed problem with wrong interpretation of the
 -	InkNames tag as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=466
 -
 -	Memory leak fixed.
 -
 -2004-01-21  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirwrite.c: Fixed handling of writable ASCII tags that
 -	are field_passcount=TRUE properly.  Arguably anonymous custom tags
 -	should be declared as passcount=FALSE, but I don't want to change
 -	that without a careful review. 
 -
 -2004-01-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_write.c: Fixed reporting size of the buffer in case of
 -	stripped image in TIFFWriteBufferSetup(). As per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=460
 -
 -2004-01-11  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dir.c: Incomplete cleanup in TIFFFreeDirectory(),
 -	patch from Gerben Koopmans.
 -
 -	* libtiff/tif_dirread.c: Check field_passcount value before setting
 -	the value of undefined type, patch from Gerben Koopmans.
 -
 -2004-01-02  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcp.c: Fixed problem with wrong Photometric setting for
 -	non-RGB images.
 -
 -2003-12-31  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_win32.c: Fixed problem with _TIFFrealloc() when the NULL
 -	pointer passed. Patch supplied by Larry Grill.
 -
 -	* libtiff/{tiff.h, tif_fax3.c}:Fixes for AMD 64 platform as
 -	suggested by Jeremy C. Reed.
 -
 -2003-12-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff 3.6.1 released.
 -
 -2003-12-24  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* config.guess, config.sub: Updated from the recent upstream.
 -
 -2003-12-22  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_color, tif_getimage.c, tiffio.h}, man/TIFFcolor.3t:
 -	More cleanups in color conversion interface, added appropriate manual
 -	page.
 -
 -2003-12-19  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_extension.c, tif_dirinfo.c, tiff.h}: Warnings fixed as
 -	per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=357
 -
 -	* tools/tiff2ps.c: Added support for alpha channel. Fixes
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=428
 -
 -	* libtiff/{libtiff.def, tif_color.c, tif_getimage.c, tiffio.h}:
 -	Interface for Lab->RGB color conversion is finally cleaned up.
 -	Added support for ReferenceBlackWhite tag handling when converted from
 -	YCbCr color space. The latter closes
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=120
 -
 -2003-12-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_getimage.c, tiffio.h}: Avoid warnings.
 -
 -	* libtiff/makefile.vc, tools/makefile.vc: Support for IJG JPEG
 -	library.
 -
 -2003-12-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_getimage.c, tif_aux.c}: Read WhitePoint tag from the
 -	file and properly use it for CIE Lab->RGB transform.
 -
 -2003-12-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_getimage.c, tif_color.c, tiffio.h}: YCbCr->RGB
 -	conversion routines now in the tif_color.c module. New function
 -	TIFFYCbCrtoRGB() available in TIFF API.
 -
 -	* libtiff/tif_dirwrite.c: Handle TIFF_IFD tag type correctly.
 -
 -2003-12-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_getimage.c, tif_color.c, tiffio.h}: Improvements in
 -	CIE Lab conversion code. Start moving YCbCr stuff to the tif_color.c
 -	module.
 -
 -	* libtiff/{tif_getimage.c, tiffio.h}, man{TIFFReadRGBAImage.3t,
 -	TIFFReadRGBAStrip.3t, TIFFReadRGBATile.3t, TIFFRGBAImage.3t}:
 -	Finally resolved problems with orientation handling. TIFFRGBAImage
 -	interface now properly supports all possible orientations, i.e. images
 -	will be flipped both in horizontal and vertical directions if
 -	required. 'Known bugs' section now removed from the appropriate manual
 -	pages. Closed bug entry:
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=322
 -
 -2003-12-02  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dir.c: Fixed order of the parameters in TIFFError()
 -	function calls as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=440
 -
 -2003-11-28 Ross Finlayson  <libtiff@apexinternetsoftware.com>
 -
 -	* tools/tiff2pdf.c:  Some bugs fixed.
 -
 -2003-11-27  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_luv.c: Fixed bug in 48-bit to 24-bit conversion routine,
 -	reported by Antonio Scuri.
 -
 -	* man/tiff2pdf.1: Few improvements in page layout.
 -
 -	* Makefile.in, /man/Makefile.in, /html/man/tiff2pdf.1.html:
 -	 Added support fpr tiff2pdf manual page.
 -
 -2003-11-26 Ross Finlayson  <libtiff@apexinternetsoftware.com>
 -
 -	* /man/tiff2pdf.1:  File added to repository.
 -
 -2003-11-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* Makefile.in, /tools/{Makefile.in, makefile.vc}:
 -	 Added support fpr tiff2pdf utility.
 -
 -2003-11-25  Ross Finlayson  <libtiff@apexinternetsoftware.com>
 -
 -	* /tools/tiff2pdf.c:  File added to repository.
 -
 -2003-11-22  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* /tools/raw2tiff.c: sqrtf() replaced with sqrt().
 -
 -2003-11-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* /tools/raw2tiff.c: #include <getopt.h> removed.
 -
 -	* tools/{Makefile.in, tiffgt.c}: Unmaintained and platform dependent
 -	sgigt utility removed and replaced with the completely rewritten
 -	portable tiffgt tool (depend on OpenGL and GLUT). Initial revision,
 -	there is a lot of things to improve.
 -
 -	* libtiff/tif_ojpeg.c: TIFFVGetField() function now can properly
 -	extract the fields from the OJPEG files. Patch supplied by Ross
 -	Finlayson.
 -
 -	* libtiff/{tiffio.h, tif_codec.c}, man/{libtiff.3t, TIFFcodec.3t}:
 -	Added new function TIFFIsCODECConfigured(), suggested by Ross
 -	Finlayson.
 -
 -2003-11-18  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirinfo.c: Implemented binary search in
 -	_TIFFMergeFieldInfo(). Patch supplied by Ross Finlayson.
 -
 -	* libtiff/tif_dir.h: _TIFFFindOrRegisterdInfo declaration replaced
 -	with _TIFFFindOrRegisterFieldInfo as reported by Ross Finlayson.
 -
 -2003-11-17  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_dirread.c: do not mark all anonymously defined tags to be 
 -	IGNOREd.  
 -
 -2003-11-17  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* contrib/pds/{tif_pdsdirread.c, tif_pdsdirwrite.c}: Use
 -	TIFFDataWidth() function insted of tiffDataWidth array.
 -
 -2003-11-16  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiff.h, tif_dirinfo.c}: Added support for IFD (13)
 -	datatype, intruduced in "Adobe PageMaker TIFF Tech. Notes".
 -
 -2003-11-15  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* Makefile.in: fixed missing backslash for tif_color.c in list.
 -
 -2003-11-13  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_color.c, tif_getimage.c, tiffio.h, Makefile.in}:
 -	New color space conversion code: CIE L*a*b* 1976 images now supported
 -	by the TIFFRGBAImage interface. All introduced routines go to new
 -	module tif_color.c. Eventually all color conversion functions should
 -	be moved there.
 -
 -2003-11-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/{ras2tiff.c, rasterfile.h}: Properly determine SUN Rasterfiles
 -	with the reverse byte order (it is reported by the magic header
 -	field). Problem reported by Andreas Wiesmann.
 -
 -	* tools/raw2tiff.c, man/raw2tiff.1: Few improvements in correlation
 -	calculation function. Guessing mechanics now documented in manual page.
 -
 -2003-11-11  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/raw2tiff.c: Implemented image size guessing using
 -	correlation coefficient calculation between two neighbour lines.
 -
 -2003-11-09  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_tile.c: remove spurious use of "s" (sample) in the 
 -	planarconfig_contig case in TIFFComputeTile().
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=387
 -
 -2003-11-09  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* libtiff/tiffiop.h: New macros: TIFFmax, TIFFmin and TIFFrint.
 -	
 -2003-11-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffio.h, tif_strip.c}, man/{TIFFstrip.3t, libtiff.3t}:
 -	Added TIFFRawStripSize() function as suggested by Chris Hanson.
 -
 -2003-11-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_lzw.c, tif_fax3.c}: Proper support for update mode as
 -	per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=424
 -
 -2003-10-29  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/libtiff.def: Added TIFFReadRGBAImageOriented.
 -
 -	* html/build.html: Added note about GNU make requirement.
 -
 -2003-10-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* Makefile.in: Fixes in using MAKEFLAGS as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=418
 -
 -	* port/install.sh.in: Option -p added to the mkdir command to create
 -	all directory tree structure before installing.
 -
 -2003-10-18  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* /tools/tiff2ps.c: #include <strings.h> replaced with the
 -	#include <string.h>.
 -
 -2003-10-16  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* Makefile.in: Add an absolute path to the test_pics.sh call.
 -
 -2003-10-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tiffcomp.h: #define _BSDTYPES_DEFINED when defining BSD
 -	typedefs.
 -
 -2003-10-09  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* configure, libtiff/{Makefile.in, mkversion.c}:
 -	Relative buildings fixed.
 -
 -	* tools/Makefile.in: Added "-I../libtiff" to the tiffset building
 -	rule.
 -
 -2003-10-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* Makefile.in: Added missed v3.6.0.html.
 -
 -	* libtiff/tiffio.h: Typo fixed: ORIENTATION_BOTTOMLEFT replaced with
 -	ORIENTATION_BOTLEFT.
 -
 -2003-10-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* 3.6.0 final release.
 -
 -2003-10-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tif_getimage.c, tiffio.h}, man/TIFFReadRGBAImage.3t: New
 -	function TIFFReadRGBAImageOriented() implemented to retrieve raster
 -	array with user-specified origin position as suggested by Jason Frank.
 -	See
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=322
 -
 -	for details.
 -	
 -	* tools/tiff2rgba.c: Switched to use TIFFReadRGBAImageOriented()
 -	instead of TIFFReadRGBAImage().
 -
 -	* tools/tiff2ps.c: Fixed possible endless loop as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=404
 -
 -2003-09-30  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Check field counter against number of fields
 -	in order to fix
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=366
 -
 -	* libtiff/tif_fax3.c: Fix wrong line numbering as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=342
 -
 -2003-09-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/{tiffiop.h, tif_dirread.c, tif_dir.c, tif_open.c,
 -	tif_close.c}: Store a list of opened IFD to prevent looping as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=383
 -
 -2003-09-23  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: More fixes for	EstimateStripByteCounts(). See
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=358
 -
 -2003-08-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffmedian.c: int declaration replaced with the uint32 to
 -	support large images as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=382
 -
 -2003-08-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 - 	* libtiff/Makefile.in: Fixed problem with building in different
 -	directory.
 -
 -	* tools/tiff2ps.c: Added missing #include <strings.h>.
 -
 -	* libtiff/tif_dirwrite.c: More fixes for custom tags code
 -	from Ashley Dreier.
 -
 -2003-08-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2ps.c: Added page size setting when creating PS Level 2.
 -	Patch submitted by Balatoni Denes (with corrections from Tom
 -	Kacvinsky).
 -
 -	* tools/tiff2ps.c: Fixed PS comment emitted when FlateDecode is
 -	being used. Reported by Tom Kacvinsky.
 -
 -	* libtiff/tif_dirwrite.c: Fixed problem with custom tags writing,
 -	reported by Ashley Dreier.
 -
 -	* libtiff/tif_print.c: Fixed problem with float tags reading, support
 -	for printing RATIONAL and BYTE tags added.
 -
 -2003-08-05  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_lzw.c: Move LZW codec state block allocation back to
 -	TIFFInitLZW(), because its initialization in LZWSetupDecode() cause
 -	problems with predictor initialization. Remove O_RDONLY check during
 -	state block allocation to be able open LZW compressed files in update
 -	mode.
 -
 -	Problem exist for libtiff version of the tif_lzw.c module. One from
 -	lzw-compression-kit hasn't such troubles.
 -
 -2003-08-04  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_write.c: modified tif_write.c so that the various
 -	encoded write functions use tif_postdecode() to apply byte order
 -	swapping (swab) to the application passed data buffer if the same
 -	would be done when reading.  This allows us to write pixel data with
 -	more than 8 bits per sample to existing files of a non-native byte 
 -	order.  One side effect of this change is the applications buffer
 -	itself is altered in this case by the act of writing. 
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=171
 -
 -2003-07-25  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_open.c: avoid signed/unsigned casting warning
 -	initializing typemask as per patch from J.A. Strother.
 -
 -	* tools/tiffcp.c: fixed signed/unsigned casting warning.
 -
 -	* libtiff/tif_print.c: dos2unix conversion.
 -
 -	* tools/tiffsplit.c: increased the maximum number of pages that
 -	can be split.  Patch provided by Andrew J. Montalenti.
 -
 -2003-07-11  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/raw2tiff.c: Added option `-p' to explicitly select color
 -	space of input image data. Closes
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=364
 -
 -2003-07-08  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_aux.c, tif_codec.c, tif_dir.c, tif_dirread.c, tif_extension.c,
 -	tif_fax3.c, tif_getimage.c, tif_luv.c, tif_lzw.c, tif_next.c, 
 -	tif_packbits.c, tif_predict.c, tif_print.c, tif_swab.c, tif_thunder.c:
 -	avoid casting warning at /W4. 
 -
 -2003-07-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/thumbnail.c: Memory leak fixed as reported by Robert S. Kissel.
 -
 -2003-06-30  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_pixarlog.c: Unused variables removed.
 -
 -	* libtiff/{tif_dirread.c, tif_dir.c}: Fixed problem with
 -	EstimateStripByteCounts() as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=358
 -
 -	* libtiff/{tif_dirwrite.c, tif_packbits.c}: Fixed compilation on
 -	64-bit architectures as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=357
 -
 -	* libtiff/tif_dirinfo.c: TIFFDataWidth() returns 0 in case of
 -	unknown data type.
 -	
 -2003-06-19  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_print.c: fixed some serious bugs when printing
 -	custom tags ... almost certain to crash. 
 -
 -	* libtiff/tif_dirread.c: Don't ignore custom fields that are
 -	autodefined.  Not sure how this got to be like this.
 -
 -2003-06-18  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* 3.6.0 Beta2 released.
 -
 -	* tools/tiffcmp.c, man/tiffcmp.1: Fixed problem with unused data
 -	comparing as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=349
 -
 -	`-z' option now can be used to set the number of reported different
 -	bytes.
 -	
 -2003-06-09  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcp.c, man/tiffcp.1: Added possibility to specify value -1
 -	to -r option to get the entire image as one strip. See
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=343
 -
 -	for details.
 -
 -2003-06-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcp.c: Set the correct RowsPerStrip and PageNumber
 -	values as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=343
 -
 -2003-05-27  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: modified segment_height calculation to always
 -	be a full height tile for tiled images.  Also changed error to just
 -	be a warning.
 -
 -2003-05-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/fax2tiff.c: Page numbering fixed, as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=341
 -
 -2003-05-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* contrib/ojpeg/{Makefile.in, jdhuff.h, jinclude.h, ojpeg.c, README},
 -	configure, Makefile.in:	Switched back to the old behaviour. Likely
 -	better solution should be found for OJPEG support.
 -
 -2003-05-11  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/mkversion.c: Fixed problem with wrong string size when
 -	reading RELEASE-DATE file.
 -
 -2003-05-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2ps.c: Fixed bug in Ascii85EncodeBlock() function: array
 -	index was out of range.
 -
 -2003-05-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* contrib/ojpeg/{Makefile.in, jdhuff.h, jinclude.h, ojpeg.c, README},
 -	configure, Makefile.in:	Improved libtiff compilation with OJPEG
 -	support. Now no need for patching IJG JPEG library, hack requred by
 -	libtiff will be compiled and used in-place. Implemented with
 -	suggestion and help from Bill Allombert, Debian's libjpeg maintainer.
 -
 -	* libtiff/tif_aux.c: Properly handle TIFFTAG_PREDICTOR in
 -	TIFFVGetFieldDefaulted() function.
 -
 -2003-05-05  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/ppm2tiff.c: PPM header parser improved: now able to skip
 -	comments.
 -
 -	* tools/tiffdither.c: Fixed problem with bit fill order tag setting:
 -	was not copied from source image.
 -
 -	* libtiff/getimage.c: Workaround for some images without correct
 -	info about alpha channel as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=331
 -
 -2003-04-29  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2ps.c, man/tiff2ps.1: Add ability to generate PS Level 3.
 -	It basically allows one to use the /flateDecode filter for ZIP
 -	compressed TIFF images. Patch supplied by Tom Kacvinsky. Fixes
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=328
 -
 -	* tools/tiff2ps.c: Force deadzone printing when EPS output specified
 -	as per bug
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=325
 -
 -2003-04-17  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Removed additional check for StripByteCounts
 -	due to problems with multidirectory images. Quality of error messages
 -	improved.
 -
 -2003-04-16  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiffcp.c: Fixed problem with colorspace conversion for JPEG
 -	encoded images. See bug entries
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=275
 -
 -	and
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=23
 -
 -	* libtiff/tif_dirread.c: Additional check for StripByteCounts
 -	correctness. Fixes
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=320
 -
 -2003-03-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/{fax2ps.c, fax2tiff.c, gif2tiff.c, pal2rgb.c, ppm2tiff.c,
 -	ras2tiff.c, raw2tiff.c, rgb2ycbcr.c, thumbnail.c, tiff2bw.c,
 -	tiff2ps.c, tiff2rgba.c, tiffcp.c, tiffdither.c, tiffinfo.c,
 -	tiffmedian.c}: Added library version reporting facility to all tools.
 -
 -2003-03-06  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* port/install.sh.in: Fixed problems with install producing paths
 -	like ///usr/local/lib on cygwin.
 -
 -2003-02-27  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/fax2tiff.c, man/fax2tiff.1: New switch (-X) to set width of
 -	raw input page. Patch supplied by Julien Gaulmin. See
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=293
 -
 -	for details.
 -
 -2003-02-26  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dir.c: fixed up the tif_postdecode settings
 -	responsible for byte swapping complex image data.
 -
 -	* libtiff/tif_lzw.c: fixed so that decoder state isn't allocated till
 -	LZWSetupDecode().  Needed to read LZW files in "r+" mode.
 -
 -2003-02-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/ppm2tiff.c: Fixed problem with too many arguments.
 -
 -2003-02-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/raw2tiff.c: Memory leak fixed.
 -
 -2003-02-03  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/fax2tiff.c, man/fax2tiff.1: Applied patch from Julien Gaulmin
 -	(thanks, Julien!). More switches for fax2tiff tool for better control
 -	of input and output. Details at
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=272
 -
 -2003-02-03  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: Modified to defer initialization of jpeg
 -	library so that we can check if there is already any tile/strip data
 -	before deciding between creating a compressor or a decompressor. 
 -
 -2003-01-31  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_write.c: TIFFWriteCheck() now fails if the image is
 -	a pre-existing compressed image.  That is, image writing to 
 -	pre-existing compressed images is not allowed.
 -
 -	* libtiff/tif_open.c: Removed error if opening a compressed file
 -	in update mode. 
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=198
 -
 -2003-01-31  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* config.guess, config.sub: Updated to recent upstream versions.
 -
 -2003-01-15  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* cut 3.6.0 Beta release.
 -
 -2002-12-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* tools/fax2ps.c, man/fax2ps.1: Page size was determined
 -	in wrong way as per bug
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=239
 -
 -2002-12-17  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirread.c: Allow wrong sized arrays in 
 -	TIFFFetchStripThing(). 
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=49
 -
 -2002-12-02  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dir.c: fix problem with test on td_customValueCount.
 -	Was using realloc even first time.  Fix by Igor Venevtsev.
 -
 -2002-11-30  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dir.c: fixed bug with resetting an existing custom
 -	field value.
 -
 -	* libtiff/tif_dir.c: Fixed potential problem with ascii "custom" 
 -	tags in TIFFVGetField() ... added missing break.
 -
 -2002-10-14  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiff2ps.c: fixes a problem where "tiff2ps -1e" did not make
 -	the scanline buffer long enough when writing rgb triplets.
 -	The scanline needs to be 3 X the number of dots or else it will
 -	contain	an incomplete triplet and programs that try to separate
 -	the eps by redefining the colorimage operator will get messed up.
 -	Patch supplied by William Bader.
 -
 -	* Makefile.in: added tif_extension.c to file list as per 
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=218.
 -
 -2002-10-11  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* configure, config.site, libtiff/{tif_unix.c, Makefile.in}: Fix for
 -	large files (>2GiB) supporting. New option in the config.site:
 -	LARGEFILE="yes". Should be enough for I/O of the large files.
 -
 -2002-10-10  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/html/v3.6.0.html: new release notes.
 -
 -	* libtiff/index.html: removed faq, cvs snapshot cruft.  Added email
 -	link for Andrey.  Pointer to v3.6.0.html.
 -
 -	* libtiff/Makefile.in: added direct rule for tiffvers.h for release.
 -
 -2002-10-07  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	* tools/tiff2ps.c, man/tiff2ps.1: Applied patch form Sebastian Eken
 -	(thanks, Sebastian!). New switches:
 -	-b # for a bottom margin of # inches
 -	-c   center image
 -	-l # for a left margin of # inches
 -	-r   rotate the image by 180 degrees
 -	New features merged with code for shrinking/overlapping.
 -	Previously added -c and -n switches (for overriding PS units) renamed
 -	in -x and -y respectively.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=200
 -
 -	* html/man/*.html: Updated from actual manual pages.
 -
 -2002-10-06  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: fixed problem with boolean defined with wrong
 -	size on windows.  Use #define boolean hack.  
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=188
 -
 -	* libtiff/tiff.h: Don't do special type handling in tiff.h unless
 -	USING_VISUALAGE is defined.
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=39
 -
 -2002-10-03  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tiff.h: added COMPRESSION_JP2000.
 -
 -2002-10-02  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_dirread.c: Another fix for the fetching SBYTE arrays
 -	by the TIFFFetchByteArray() function. Should finally resolve
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=52
 -	
 -	* configure: Set -DPIXARLOG_SUPPORT option along with -DZIP_SUPPORT
 -
 -	* html/Makefile.in: New targets added: html and groffhtml for
 -	producing HTML representations of the manual pages automatically.
 -	html target uses man2html tool, groffhtml uses groff tool.
 -	
 -2002-09-29  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* configure, libtiff/Makefile.in: Added SCO OpenServer 5.0.6 support
 -	from John H. DuBois III.  
 -
 -2002-09-15  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* Makefile.in, /man/{raw2tiff.1, Makefile.in, libtiff.3}: Added
 -	manual page for raw2tiff(1) tool.
 -	
 -2002-09-12  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* /libtiff/{tiffio.h, tif_dir.h}: TIFFDataWidth() declaration moved to
 -	the tiffio.h header file.
 -	
 -	* Makefile.in, /man/{TIFFDataWidth.3t, Makefile.in, libtiff.3}: Added
 -	manual page for TIFFDataWidth() function
 -
 -2002-09-08  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirread.c: Expand v[2] to v[4] in TIFFFetchShortPair()
 -	as per http://bugzilla.remotesensing.org/show_bug.cgi?id=196.
 -
 -	* tools/tiff2ps.c: Don't emit BeginData/EndData DSC comments
 -	since we are unable to properly include the amount to skip. 
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=80
 -
 -2002-09-02  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* /libtiff/tif_dirread.c: Fixed problem with SBYTE type data fetching
 -	in TIFFFetchByteArray(). Problem described at
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=52
 -
 -2002-08-22  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* /libtiff/tif_dirinfo.c: Further additions to free custom fields
 -	in _TIFFSetupFieldInfo() function.
 -	See http://bugzilla.remotesensing.org/show_bug.cgi?id=169 for details.
 -
 -	* /libtiff/tif_lzw.c: Additional consistency checking added in
 -	LZWDecode() and LZWDecodeCompat().
 -	Fixes http://bugzilla.remotesensing.org/show_bug.cgi?id=190
 -	and http://bugzilla.remotesensing.org/show_bug.cgi?id=100
 -	
 -	* /libtiff/tif_lzw.c:
 -	Added check for valid code lengths in LZWDecode() and
 -	LZWDecodeCompat(). Fixes
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=115
 -
 -2002-08-16  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* /libtiff/{Makefile.vc, libtiff.def}:
 -	Missed declarations added.
 -
 -2002-08-15  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_getimage.c: Ensure that TIFFRGBAImageBegin() returns the
 -	return code from the underlying pick function.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=177
 -
 -	* tif_dir.h: changed FIELD_CODEC to 66 from 64 to avoid overlap 
 -	with FIELD_CUSTOM as mentioned in bug 169.
 -
 -	* tif_close.c: added logic to free dynamically created anonymous
 -	field definitions to correct a small memory leak.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=169
 -
 -2002-08-10  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* /tools/{raw2tiff.c, Makefile.in, Makefile.lcc, Makefile.vc}:
 -	New tool: raw2tiff --- raw images to TIFF converter. No manual page yet.
 -
 -2002-07-31  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: Fixed problem with setting of nrows in 
 -	JPEGDecode() as per bugzilla bug (issue 1):
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=129
 -
 -	* libtiff/{tif_jpeg.c,tif_strip.c,tif_print.c}: Hacked tif_jpeg.c to
 -	fetch TIFFTAG_YCBCRSUBSAMPLING from the jpeg data stream if it isn't
 -	present in the tiff tags. 
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=168
 -
 -	* libtiff/tif_read.c, libtiff/tif_write.c: TIFFReadScanline() and
 -	TIFFWriteScanline() now set tif_row explicitly in case the codec has
 -	fooled with the value. 
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=129
 -
 -2002-06-22  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* /tools/tiff2ps.c: Added workaround for some software that may crash
 -	when last strip of image contains fewer number of scanlines than
 -	specified by the `/Height' variable. See
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=164
 -	for explanation.
 -
 -2002-06-21  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2ps, man/tiff2ps.1: New functionality for tiff2ps utility:
 -	splitting long images in several pages. See
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=142 for explanation.
 -	Patch granted by John Williams <williams@morinda.com>.
 -
 -2002-06-11  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/contrib/win95: renamed to contrib/win_dib.  Added new 
 -	Tiffile.cpp example of converting TIFF files into a DIB on Win32.  
 -	This one is described in:
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=143
 -
 -	* libtiff/tif_ojpeg.c: Major upgrade from Scott.  See details at:
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=156
 -
 -2002-05-10  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2ps: New commandline switches to override resolution
 -	units obtained from the input file. Closes
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=131
 -
 -2002-04-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* libtiff/libtiff.def: Added missed declaration.
 -	
 -2002-04-22  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* tools/fax2tiff.c: Updated to reflect latest changes in libtiff.
 -	Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=125
 -
 -2002-04-20  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* libtiff/tif_open.c: Pointers to custom procedures
 -	in TIFFClientOpen() are checked to be not NULL-pointers.
 -	
 -2002-04-18  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* libtiff/libtiff.def: Added missed declarations.
 -
 -	* libtiff/tif_pixarlog.c: Updated for using tif_tagmethods structure.
 -
 -2002-04-16  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_lzw.c: Additional checks for data integrity introduced.
 -	Should finally close
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=100
 -	
 -2002-04-10  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/tiff2ps: Division by zero fixed.
 -	Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=88
 -
 -2002-04-09  Andrey Kiselev  <dron@ak4719.spb.edu>
 -	
 -	* libtiff/: tif_dirwrite.c, tif_write.c, tiffio.h:
 -	TIFFCheckpointDirectory() routine added.
 -	Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=124
 -
 -	* man/: TIFFWriteDirectory.3t,  Makefile.in: Added description
 -	for the new function.
 -
 -2002-04-08  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/: tif_codec.c, tif_compress.c, tiffiop.h: Introduced
 -	additional members tif->tif_decodestatus and tif->tif_encodestatus
 -	for correct handling of unconfigured codecs (we should not try to read
 -	data or to define data size without correct codecs).
 -
 -	* libtiff/tif_getimage.c: The way of codecs checking in TIFFRGBAImageOK
 -	changed. Now it has used tif->tif_decodestatus and
 -	tif->tif_encodestatus.
 -	Should fix http://bugzilla.remotesensing.org/show_bug.cgi?id=119 (in
 -	case of __cvs_8.tif test image).
 -
 -	* libtiff/: tif_dirinfo.c, tif_dirread.c: Somebody makes a bug in
 -	tif_dirread.c when TIFFCreateAnonFieldInfo was introduced.
 -	Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=119 in case
 -	of _cvs_00000-00.tif, _cvs_00000-01.tif and _cvs_00000-02.tif.
 -
 -2002-04-04  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/: tif_lzw.c: Assertions in LZWDecode and LZWDecodeCompat
 -	replaced by warnings. Now libtiff should read corrupted LZW-compressed
 -	files by skipping bad strips.
 -	Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=100
 -	
 -2002-04-03  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirwrite.c: Removed some dead code.
 -
 -	* libtiff/*: Cleanup some warnings.
 -
 -	* libtiff/tif_dir.c: Fixed bug with count returned by TIFFGetField()
 -	for variable length FIELD_CUSTOM values.  Was int * but should be
 -	u_short *.
 -
 -2002-04-01  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* tools/: tifcp.c: Added support for 'Orientation' tag in tiffcp
 -	utility (at cpStripToTile routine).
 -
 -2002-03-27  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_dirread.c: avoid div-by-zero if rowbytes is zero in chop func.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=111
 -
 -	* tif_print.c: Fixed so that ASCII FIELD_CUSTOM values with 
 -	passcount set FALSE can be printed (such as TIFFTAG_SOFTWARE).
 -
 -	* libtiff/tif_dir.c,tif_dirinfo.c,tif_dir.h,tif_ojpeg.c: modified so 
 -	that TIFFTAG_SOFTWARE uses FIELD_CUSTOM as an example.
 -
 -2002-03-26  Dwight Kelly  <dbmalloc@remotesensing.org>
 -
 -	* libtiff/: tiff.h, tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c,
 -	tif_dirwrite.c: Added get/put code for new tag XMLPACKET as defined
 -	in Adobe XMP Technote. Added missing INKSET tag value from TIFF 6.0 spec 
 -	INKSET_MULTIINK (=2). Added missing tags from Adobe TIFF technotes: 
 -	CLIPPATH, XCLIPPATHUNITS, YCLIPPATHUNITS, OPIIMAGEID, OPIPROXY and
 -	INDEXED. Added PHOTOMETRIC tag value from TIFF technote 4 ICCLAB (=9).
 -
 -2002-03-26  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/: tif_getimage.c: TIFFReadRGBAStrip and TIFFReadRGBATile
 -	now also uses TIFFRGBAImageOK before reading. This is additional fix
 -	for http://bugzilla.remotesensing.org/show_bug.cgi?id=110
 -
 -2002-03-25  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/: tif_getimage.c: Additional check for supported
 -	codecs added in TIFFRGBAImageOK and TIFFReadRGBAImage now uses
 -	TIFFRGBAImageOK before reading.
 -	Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=110
 -
 -2002-03-15  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/: tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c,
 -	tif_dirwrite.c: Added routine TIFFDataWidth for detrmining
 -	TIFFDataType sizes instead of working with tiffDataWidth array
 -	directly. Should prevent out-of-borders bugs in case of unknown or
 -	broken data types.  EstimateStripByteCounts routine modified, so it
 -	won't work when tags with uknown sizes founded.
 -	Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=109
 -
 -2002-03-13  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/tif_getimage.c: Added support for correct handling
 -	`Orientation' tag in gtTileContig. Should be added in other gt*
 -	functions as well, but I have not images for testing yet. Partially
 -	resolves http://bugzilla.remotesensing.org/show_bug.cgi?id=23
 -
 -2002-03-10  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/: tif_dirinfo.c, tif_dirwrite.c: Added possibility to
 -	read broken TIFFs with LONG type used for TIFFTAG_COMPRESSION,
 -	TIFFTAG_BITSPERSAMPLE, TIFFTAG_PHOTOMETRIC.  Closes
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=99
 -
 -2002-03-08  Andrey Kiselev  <dron@ak4719.spb.edu>
 -
 -	* libtiff/Makefile.in, tools/Makefile.in: Shared library will not
 -	be stripped when installing, utility binaries will do.	Closes
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=93
 -
 -2002-02-28  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* man/TIFFGetField: fixed type of TIFFTAG_COPYRIGHT.
 -
 -	* man/libtiff.3t: added copyright tag info.
 -
 -2002-02-11  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/{tiff.h,tif_fax3.c}: Add support for __arch64__.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=94
 -
 -	* man/Makefile.in: Patch DESTDIR handling 
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=95
 -
 -	* configure: OpenBSD changes for Sparc64 and DSO version.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=96
 -
 -2002-02-05  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* config.site/configure: added support for OJPEG=yes option to enable
 -	OJPEG support from config.site.
 -
 -2002-01-27  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* html/document.html: fixed links for TIFf 6 docs.
 -
 -2002-01-18  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* config.guess, config.sub: Updated from ftp.gnu.org/pub/config.
 -
 -	* libtiff/tif_read.c: Fixed TIFFReadEncodedStrip() to fail if the
 -	decodestrip function returns anything not greater than zero as per
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=97
 -
 -	* configure: Modify CheckForBigEndian so it can work in a cross
 -	compiled situation.
 -
 -2002-01-16  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiffdump.c: include TIFFTAG_JPEGTABLES in tag list.
 -
 -	* tools/tiffset.c: fix bug in error reporting.
 -
 -	* tools/tiffcp.c: fix several warnings that show up with -Wall.
 -
 -2002-01-04  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: fixed computation of segment_width for 
 -	tiles files to avoid error about it not matching the 
 -	cinfo.d.image_width values ("JPEGPreDecode: Improper JPEG strip/tile 
 -	size.") for ITIFF files.  Apparently the problem was incorporated since
 -	3.5.5, presumably during the OJPEG/JPEG work recently.
 -
 -2001-12-15  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* configure, libtiff/Makefile.in: Changes for building on MacOS 10.1.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=94
 -
 -	* libtiff/tif_getimage.c: If DEFAULT_EXTRASAMPLE_AS_ALPHA is 1 
 -	(defined in tiffconf.h - 1 by default) then the RGBA interface
 -	will assume that a fourth extra sample is ASSOCALPHA if the
 -	EXTRASAMPLE value isn't set for it.  This changes the behaviour of
 -	the library, but makes it work better with RGBA files produced by
 -	lots of applications that don't mark the alpha values properly.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=93
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=65
 -
 -2001-12-12  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: allow jpeg data stream sampling values to 
 -	override those from tiff directory.  This makes this work with 
 -	ImageGear generated files. 
 -
 -2001-12-07  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* html/Makefile.in: added missing images per bug 92.
 -
 -	* port/Makefile.in: fixed clean target per bug 92.
 -
 -2001-11-28  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* Reissue 3.5.7 release.
 -
 -	* libtiff/mkversion.c: Fix output of TIFF_VERSION to be
 -	YYYYMMDD so that it is increasing over time. 
 -
 -	* Makefile.in: Ensure that tiffvers.h is regenerated in the
 -	make release target.
 -
 -	* Makefile.in: added libtiff/tiffvers.h to the release file list.
 -
 -2001-11-23  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* added html/v3.5.7.html, updated html/index.html.
 -
 -	* Makefile.in: added contrib/addtiffo/tif_ovrcache.{c,h}.
 -
 -2001-11-15  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* configure: fixed test for -lm.
 -
 -2001-11-02  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* Added PHOTOMETRIC_ITULAB as per bug 90.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=90
 -
 -2001-10-10  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tiff.h: I have created COMPRESSION_CCITT_T4, 
 -	COMPRESSION_CCITT_T6, TIFFTAG_T4OPTIONS and TIFFTAG_T6OPTIONS aliases 
 -	in keeping with TIFF 6.0 standard in tiff.h
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=83
 -
 -2001-09-26  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirwrite.c: added TIFFRewriteDirectory() function.
 -	Updated TIFFWriteDirectory man page to include TIFFRewriteDirectory.
 -
 -2001-09-24  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_lzw.c: Avoid MS VC++ 5.0 optimization bug.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=78
 -
 -	* libtiff/tif_lzw.c: added dummy LZWSetupEncode() to report an
 -	error about LZW not being available.
 -
 -	* libtiff/tif_dir.c: propagate failure to initialize compression
 -	back from TIFFSetField() as an error status, so applications can 
 -	detect failure.
 -
 -	* libtiff/tif_dir.c: removed the auto replacement of 
 -	COMPRESSION_LZW with COMPRESSION_NONE in _TIFFVSetField().
 -
 -	* Removed Makefile, tools/Makefile, port/install.sh, man/Makefile
 -	from CVS as they are all supposed to be auto-generated by configure.
 -
 -2001-09-22  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_ojpeg.c: new update from Scott. 
 -
 -2001-09-09  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtif/tif_fax3.c: Removed #ifdef PURIFY logic, and modified to
 -	always use the "safe" version, even if there is a very slight
 -	cost in performance.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=54
 -
 -	* libtiff/Makefile.in: Fixed @DSOSUB_VERSION to be @DSOSUF_VERSION@
 -	in two places.
 -
 -	* libtiff/tif_getimage.c: Fixed problem with reading strips or
 -	tiles that don't start on a tile boundary.  Fix contributed by
 -	Josep Vallverdu (from HP), and further described in bug 47.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=47
 -
 -	* tools/tiff2ps.c: added OJPEG YCbCr to RGB support. 
 -
 -	* libtiff/tif_ojpeg.c: Applied substantial patch from Scott.
 -
 -2001-09-06  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_packbits.c: fixed memory overrun error.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=77
 -	
 -2001-08-31  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_getimage.c: relax handling of contig case where
 -	there are extra samples that are supposed to be ignored.  This
 -	should now work for 8bit greyscale or palletted images.  
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=75	
 -
 -2001-08-28  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_getimage.c: Don't complain for CMYK (separated)
 -	images with more than four samples per pixel.  See:
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=73
 -
 -2001-08-10  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_getimage.c: Use memmove() instead of TIFFmemcpy()
 -	in TIFFReadRGBATile() to avoid issues in cases of overlapping
 -	buffers.  See Bug 69 in Bugzilla. 
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=69
 -	
 -	* tools/tiff2rgba.c: fixed getopt() call so that -b works again.
 -
 -2001-08-09  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tiff.h, libtiff/tif_fax3.c: added check for __LP64__ 
 -	when checking for 64 bit architectures as per bugzilla bug 67.
 -
 -2001-07-27  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* man/Makefile.in: add TIFFClientOpen link as per debian submitted
 -	bug 66.
 -
 -2001-07-20  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_jpeg.c: Define HAVE_BOOLEAN on windows if RPCNDR.H 
 -	has been included.
 -
 -2001-07-19  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_open.c: Seek back to zero after failed read,
 -	before writing header.
 -
 -2001-07-18  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_ojpeg.c: updates from Scott.  Handles colors
 -	much better.  Now depends on having patched libjpeg as per
 -	patch in contrib/ojpeg/*. 
 -
 -2001-07-17  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* */Makefile.in: added DESTDIR support. 
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=60
 -
 -2001-07-16  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* configure, libtiff/Makefile.in: applied OpenBSD patches
 -	as per:
 -	
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=61
 -
 -2001-06-28  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_getimage.c: Fixed so that failure is properly
 -	reported by gtTileContig, gtStripContig, gtTileSeparate and 
 -	gtStripSeparate.
 -
 -	See http://bugzilla.remotesensing.org/show_bug.cgi?id=51
 -
 -	* tiffcmp.c: Fixed multi samples per pixel support for ContigCompare.  
 -	Updated bug section of tiffcmp.1 to note tiled file issues.
 -	
 -	See http://bugzilla.remotesensing.org/show_bug.cgi?id=53
 -
 -2001-06-22  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* configure: Changes for DSO generation on AIX provided by
 -	John Marquart <jomarqua@indiana.edu>.
 -
 -	* configure, libtiff/Makeifle.in: Modified to build DSOs properly
 -	on Darwin thanks to Robert Krajewski (rpk@alum.mit.edu) and
 -	Keisuke Fujii (fujiik@jlcuxf.kek.jp).
 -
 -2001-06-13  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tools/tiff2rgba.c: added -n flag to avoid emitting alpha component.
 -
 -	* man/tiff2rgba.1: new
 -
 -2001-05-22  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* Added tiffset and tif_ojpeg to the dist lists in Makefile.in.
 -
 -2001-05-13  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tools/thumbnail.c: changed default output compression
 -	to packbits from LZW since LZW isn't generally available.
 -
 -2001-05-12  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_ojpeg.c: New.
 -	libtiff/tif_jpeg.c, tiffconf.h, tif_getimage.c: changes related
 -	to OJPEG support.
 -
 -	Scott Marovich <marovich@hpl.hp.com> supplied OJPEG support.
 -
 -2001-05-11  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tiff.h: removed, it duplicates libtiff/tiff.h.
 -
 -2001-05-08  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirinfo.c: moved pixar and copyright flags to 
 -	ensure everything is in order.
 -
 -	* libtiff/libtiff.def: added TIFFCreateDirectory and 
 -	TIFFDefaultStripSize as per:
 -
 -	  http://bugzilla.remotesensing.org/show_bug.cgi?id=46
 -
 -2001-05-02  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirinfo.c: Modified the TIFF_BYTE definition for
 -	TIFFTAG_PHOTOSHOP to use a writecount of TIFF_VARIABLE2 (-3) to
 -	force use of uint32 counts instead of short counts. 
 -
 -	* libtiff/tif_dirwrite.c: Added support for TIFF_VARIABLE2 in the
 -	case of writing TIFF_BYTE/TIFF_SBYTE fields.  
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=43
 -
 -2001-05-01  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_dirinfo.c: removed duplicate TIFFTAG_PHOTOSHOP as per
 -	bug report http://bugzilla.remotesensing.org/show_bug.cgi?id=44
 -
 -2001-04-05  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tiffio.h: removed C++ style comment.
 -
 -	* configure: fixed up SCRIPT_SH/SHELL handling.
 -
 -	* Makefile.in: Fixed SCRIPT_SH/SHELL handling.
 -
 -	* config.guess: documented more variables as per bug 40.
 -
 -2001-04-03  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* configure, *Makefile.in: Various changes to improve configuration
 -	for HP/UX specifically, and also in general.  They include:
 -	 - Try to handle /usr/bin/sh instead of /bin/sh where necessary.
 -	 - Upgrade to HP/UX 10.x+ compiler, linker and dso options.
 -	 - Fixed mmap() test to avoid MMAP_FIXED ... it isn't available on HP
 -	 - Use -${MAKEFLAGS} in sub makes from makefiles.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=40
 -
 -2001-04-02  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tiff.h: Applied hac to try and resolve the problem
 -	with the inttypes.h include file on AIX.
 -
 -	See http://bugzilla.remotesensing.org/show_bug.cgi?id=39
 -	
 -	* VERSION: update to 3.5.7 beta in preparation for release.
 -
 -	* configure/config.site: modified to check if -lm is needed for
 -	MACHDEPLIBS if not supplied by config.site.  Needed for Darwin.
 -
 -	* config.guess: updated wholesale to an FSF version apparently 
 -	from 1998 (as opposed to 1994).  This is mainly inspired by 
 -	providing for MacOS X support.
 -
 -2001-03-29  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* configure, Makefile.in, etc: added support for OPTIMIZER being
 -	set from config.site. 
 -
 -2001-03-28  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* fax2ps.c: Helge (libtiff at oldach.net) submitted fix:
 -
 -	Here's a fix for fax2ps that corrects behaviour for non-Letter paper
 -	sizes. It fixes two problems:
 -
 -	Without	scaling (-S) the fax is now centered on the page size specified
 -	with -H	and/or -W. Before, fax2ps was using an obscure and practially
 -	useless algorithm to allocate the image relative to Letter sized paper
 -	which sometime sled to useless whitespace on the paper, while at the
 -	same time cutting of the faxes printable area at the opposite border.
 -
 -	Second, scaling now preserves aspect ratio, which makes unusual faxes
 -	(in particular short ones) print properly.
 -
 -	See http://bugzilla.remotesensing.org/show_bug.cgi?id=35
 -	
 -	* tiff2ps.c/tiff2ps.1: Substantial changes to tiff2ps by
 -	Bruce A. Mallett.  See check message for detailed information
 -	on all the changes, including a faster encoder, fixes for level
 -	2 PostScript, and support for the imagemask operator.
 -
 -2001-03-27  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tiffio.h: Changed "#if LOGLUV_PUBLIC" to 
 -	"#ifdef LOGLUV_PUBLIC" so it will work with VisualAge on AIX.
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=39
 -
 -2001-03-16  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_dirinfo.c: moved definition of copyright tag in field list.
 -	Apparently they have to be in sorted order by tag id.
 -
 -2001-03-13  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_getimage.c: Added support for 16bit minisblack/miniswhite 
 -	images in RGBA interface.
 -
 -2001-03-02  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* Added TIFFTAG_COPYRIGHT support.
 -
 -2001-02-19  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* Brent Roman contributed updated tiffcp utility (and tiffcp.1)
 -	with support for extracting subimages with the ,n syntax, and also
 -	adding the -b bias removal flag. 
 -
 -2001-02-16  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/libtiff.def: Brent Roman submitted new version adding
 -	serveral missing entry points. 
 -
 -	* libtiff/tif_dirinfo.c: don't declare tiffFieldInfo static on VMS.
 -	Some sort of weird VMS thing.  
 -
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=31
 -
 -	* tif_luv.c/tiff.h/tiffio.h: 
 -	New version of TIFF LogLuv (SGILOG) modules contributed by Greg Ward 
 -	(greg@shutterfly.com).  He writes:
 -
 -	1) I improved the gamut-mapping function in tif_luv.c for imaginary
 -	colors, because some images were being super-saturated on the input 
 -	side and this resulted in some strange color shifts in the output.
 -
 -	2) I added a psuedotag in tiff.h to control random dithering during
 -	LogLuv encoding.  This is turned off by default for 32-bit LogLuv and 
 -	on for 24-bit LogLuv output.  Dithering improves the average color 
 -	accuracy over the image.
 -
 -	3) I added a #define for LOG_LUV_PUBLIC, which is enabled by default in
 -	tiffio.h, to expose internal routines for converting between LogLuv and
 -	XYZ coordinates.  This is helpful for writing more efficient,
 -	specialized conversion routines, especially for reading LogLuv files.
 -
 -	Changes applied with minor edits.
 -
 -2001-01-23  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* tif_fax3.c: keep rw_mode flag internal to fax3 state to remember
 -	whether we are encoding or decoding.  This is to ensure graceful 
 -	recovery if TIFFClientOpen() discovers an attempt to open a compressed
 -	file for "r+" access, and subsequently close it, as it resets the 
 -	tif_mode flag to O_RDONLY in this case to avoid writes, confusing the
 -	compressor's concept of whether it is in encode or decode mode.
 -
 -2001-01-08  Mike Welles <mike@bangstate.com> 
 -
 -	* Makefile.in:  Now cleaning up after itself after creating the .tar.gz and .zip
 -	
 -2001-01-07  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* html/libtiff.html: Fixed arguments in example for TIFFRGBAImageGet()
 -	as per bug report by Patrick Connor. 
 -
 -2000-12-28  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* Added RELEASE-DATE file to release file list.
 -
 -	* Fixed libtiff/makefile.vc to make tiffvers.h not version.h.
 -
 -2000-12-22  Mike Welles <mike@bangstate.com> 
 -        * added link to CVS mirror from index.html
 -	
 -	* updated html/internals.html to note that LZW compression is 
 -	  not supported by default. 
 -	
 -2000-12-22  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* updated html/libtiff.html to not point at Niles' old JPL web site
 -	for the man pages, point at www.libtiff.org.
 -
 -2000-12-21  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/tif_apple.c: Applied "Carbon" support patches supplied by
 -	Leonard Rosenthol <leonardr@lazerware.com>.  May interfere
 -	with correct building on older systems.  If so, please let me know.
 -
 -2000-12-19 Mike Welles <mike@bangsate.com>   
 -
 -	* Took out LZW Encoding from tif_lzw.c 
 -
 -	* Created HOWTO-RELEASE
 -
 -	* Created html/v3.5.6.html
 -
 -	* updated index.html
 -	
 -2000-12-01  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* Added patches for EOFB support in tif_fax3.c and tif_fax3.h. 
 -	Patches supplied by Frank Cringle <fdc@cliwe.ping.de>
 -	Example file at: ftp://ftp.remotesensing.org/pub/libtiff/eofb_396.tif
 -
 -2000-11-24  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* libtiff/Makefile.in: Added an installPrivateHdrs and install-private
 -	target so that the private headers required by libgeotiff can be
 -	installed with the others.  They are not installed by default.
 -
 -	* libtiff/Makefile.in: Added @MACHLIBDEPS@ to LINUXdso and GNULDdso
 -	targets so libtiff.so will be built with an explicit dependency
 -	on libm.so.
 -
 -	* libtiff/Makefile.in: Use softlinks to link libtiff.so.3 to 
 -	libtiff.so.3.5.5.  
 -
 -	* libtiff/Makefile.in & configure: Remove all references to the ALPHA 
 -	file, or ALPHA version logic.  Added stuff about DIST_POINT in 
 -	place of DIST_TYPE and the alpha release number stuff.
 -
 -2000-11-22  Frank Warmerdam  <warmerdam@pobox.com>
 -
 -	* I have applied a patch from Steffen Moeller <moeller@ebi.ac.uk> to
 -	the configure script so that it now accepts the --prefix, and 
 -	--exec-prefix directives. 
 -
 -2000-11-13  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* I have made a variety of modifications in an effort to ensure the 
 -	TIFFLIB_VERSION macro is automatically generated from the RELEASE-DATE
 -	file which seems to be updated regularly.  
 -
 -	 o mkversion.c now reads RELEASE-DATE and emits TIFFLIB_VERSION in 
 -	   version include file. 
 -	 o renamed version.h to tiffvers.h because we now have to install it 
 -	   with the public libtiff include files.  
 -	 o include tiffvers.h in tiffio.h. 
 -	 o updated tif_version.c to use tiffvers.h.
 -	 o Updated Makefile.in accordingly.
 -
 -	* As per http://bugzilla.remotesensing.org/show_bug.cgi?id=25
 -	I have updated the win32 detection rules in tiffcomp.h.
 -
 -2000-10-20  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* tif_getimage.c: Fixed RGBA translation for YCbCr images for which
 -	the strip/tile width and height aren't multiples of the sampling size.
 -	See http://bugzilla.remotesensing.org/show_bug.cgi?id=20
 -	Some patches from Rick LaMont of Dot C Software.
 -
 -	* Modified tif_packbits.c encoder to avoid compressing more 
 -	data than provided if rowsize doesn't factor into provided data
 -	(such as occurs for YCbCr).
 -
 -2000-10-19  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* tools/rgb2ycbcr.c: fixed output strip size to account for vertical 
 -	roundup if rows_per_strip not a multiple of vertical sample size.
 -
 -2000-10-16  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* tif_dir.c: Clear TIFF_ISTILED flag in TIFFDefaultDirectory
 -	as per http://bugzilla.remotesensing.org/show_bug.cgi?id=18
 -	from vandrove@vc.cvut.cz.
 -
 -	* Modified tif_packbits.c decoding to avoid overrunning the
 -	output buffer, and to issue a warning if data needs to be
 -	discarded.  See http://bugzilla.remotesensing.org/show_bug.cgi?id=18
 -
 -2000-10-12  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* Modified tiff2bw to ensure portions add to 100%, and that
 -	white is properly recovered. 
 -	
 -	See bug http://bugzilla.remotesensing.org/show_bug.cgi?id=15
 -	Patch c/o Stanislav Brabec <utx@penguin.cz>
 -
 -2000-09-30  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* Modified TIFFClientOpen() to emit an error on an attempt to
 -	open a comperessed file for update (O_RDWR/r+) access.  This is
 -	because the compressor/decompressor code gets very confused when
 -	the mode is O_RDWR, assuming this means writing only.  See
 -	bug http://bugzilla.remotesensing.org/show_bug.cgi?id=13
 -
 -2000-09-27  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* Added GNULDdso target an`d switched linux and freebsd to use it. 
 -
 -2000-09-26  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* Applied patch for 0x0000 sequences in tif_fax3.h's definition
 -	of EXPAND1D() as per bug 11 (from Roman). 
 -
 -2000-09-25  Frank Warmerdam  <warmerda@cs46980-c>
 -	* Fixed tiffcomp.h to avoid win32 stuff if unix #defined, to improve
 -	cygwin compatibility.
 -
 -	* Applied patch from Roman Shpount to tif_fax3.c.  This seems to
 -	be a proper fix to the buffer sizing problem.  See 
 -	http://bugzilla.remotesensing.org/show_bug.cgi?id=11
 -
 -	* Fixed tif_getimage.c to fix overrun bug with YCbCr images without
 -	downsampling.  http://bugzilla.remotesensing.org/show_bug.cgi?id=10
 -	Thanks to Nick Lamb <njl98r@ecs.soton.ac.uk> for reporting the
 -	bug and proving the patch.
 -	
 -2000-09-18  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* Fixed tif_jpeg.c so avoid destroying the decompressor before
 -	we are done access data thanks to bug report from:
 -	Michael Eckstein <eckstein@gepro.cz>.
 -
 -	* Reverted tif_flush change.
 -
 -2000-09-14  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* tif_flush.c: Changed so that TIFFFlushData() doesn't return an
 -	error when TIFF_BEENWRITING is not set.  This ensures that the
 -	directory contents can still be flushed by TIFFFlush().
 -
 -2000-08-14  Frank Warmerdam  <warmerda@rommel.atlsci.com>
 -
 -	* tif_open.c: Don't set MMAP for O_RDWR files.
 -
 -	* tif_open.c: Set STRIPCHOP_DEFAULT for O_RDWR as well as O_RDONLY
 -	so that files opened for update can be strip chopped too.
 -
 -	* tif_read.c: fixed up bug with files missing rowsperstrip and
 -	the strips per separation fix done a few weeks ago.
 -
 -2000-07-17  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* Tentatively added support for SAMPLEFORMAT_COMPLEXIEEEFP, and
 -	SAMPLEFORMAT_COMPLEXINT.
 -
 -2000-07-13  Mike Welles <mike@onshore.com> 
 -
 -	* index.html, bugs.html: added bugzilla info. 
 -	
 -2000-07-12  Frank Warmerdam  <warmerda@rommel.atlsci.com>
 -
 -	* tif_read.c: fix subtle bug with determining the number of
 -	rows for strips that are the last strip in a separation but
 -	not the last strip of all in TIFFReadEncodedStrip().  
 -
 -	* Applied 16/32 bit fix to tif_fax3.c.  Fix supplied by
 -	Peter Skarpetis <peters@serendipity-software.com.au>
 -
 -2000-06-15  Frank Warmerdam  <warmerda@rommel.atlsci.com>
 -
 -	* Modified tiffio.h logic with regard to including windows.h.  It
 -	won't include it when building with __CYGWIN__.
 -
 -2000-05-11  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* README: update to mention www.libtiff.org, don't list Sam's old
 -	email address.
 -
 -	* configure: Fixed DSO test for Linux as per patch from
 -	  Jan Van Buggenhout <chipzz@Ace.ULYSSIS.Student.KULeuven.Ac.Be>.
 -
 -2000-04-21  Frank Warmerdam  <warmerda@rommel.atlsci.com>
 -
 -	* libtiff/tif_dirread.c: Don't use estimate strip byte count for
 -	one tile/strip images with an offset, and byte count of zero. These
 -	could be "unpopulated" images. 
 -
 -2000-04-18  Frank Warmerdam  <warmerda@rommel.atlsci.com>
 -
 -	* contrib/addtiffo: Added "averaging" resampling option.
 -
 -	* tools/tiffsplit.c: Copy TIFFTAG_SAMPLEFORMAT.
 -
 -Tue Apr 18 16:18:08 2000  Frank Warmerdam  <warmerda@esabot.atlsci.com>
 -
 -	* tools/Makefile.in: Modified to install properly on SGI.
 -
 -2000-04-12  Mike Welles	     <mike@onshore.com>
 -	* configure:  Fixed stupid mistake in libc6 test on Linux
 -
 -2000-04-04  Mike Welles	     <mike@onshore.com> 
 -	* tif_win32.c:  Applied patch to fix overreads and ovverwrites
 -	  caught by BoundsChecker.  From Arvan Pritchard 
 -	  <arvan.pritchard@infomatix.co.uk>  (untested). 
 -	
 -	* tif_getimage.c:  Applied patch to silence VC6 warnings.  From 
 -	  Arvan Pritchard <arvan.pritchard@informatix.co.uk>
 -	
 -	* tif_lzw.c:  Applied patch to silence VC6 warnings.  From 
 -	  Arvan Pritchard <arvan.pritchard@informatix.co.uk>
 -	
 -2000-03-28  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* Added contrib/stream (stream io) code submitted by Avi Bleiweiss.
 -
 -2000-03-28  Frank Warmerdam  <warmerda@cs46980-c>    *** 3.5.5 release ***
 -
 -	* fax2ps: Fixed mixup of width and height in bounding box statement
 -	as per submission by Nalin Dahyabhai <nalin@redhat.com>.
 -
 -2000-03-27  Mike Welles	     <mike@onshore.com> 
 -
 -	* fax2ps:  Modified printruns to take uint32 instead of uint16.  
 -	Patch courtesy of Bernt Herd <herd@herdsoft.com> 
 -	
 -2000-03-20  Mike Welles	     <mike@onshore.com> 
 -
 -	* configure: added test for libc6 for linux targets.  Bug reported by 
 -        Stanislav Brabec <utx@k332.feld.cvut.cz>
 -
 -	* Added 3.5 docs to html/Makefile.in.  
 -	Thanks to  Stanislav Brabec <utx@k332.feld.cvut.cz>
 -
 -	* configure: fixed bugs in sed scripts 
 -	(applied sed script s:/@:s;@:;s:/s;;:;: to configure). 
 -	fix submitted to Stanislav Brabec <utx@k332.feld.cvut.cz>
 -
 -	* tools/iptcutil was not in files list, and wasn't being 
 -	added to tar archive.  Updated Makefile.in.
 -
 -2000-03-17  Frank Warmerdam  <warmerda@cs46980-c>
 -
 -	* tif_fax3.c: Fixed serious bug introduced during the uint16->uint32
 -	conversion for the run arrays.  
 -
 -2000-03-03  Frank Warmerdam  <warmerda@cs46980-c.mtnk1.on.wave.home.com>
 -
 -	* Set td_sampleformat default to SAMPLEFORMAT_UINT instead of 
 -	SAMPLEFORMAT_VOID in TIFFDefaultDirectory() in tif_dir.c.
 -
 -2000-03-02  Frank Warmerdam  <warmerda@cs46980-c.mtnk1.on.wave.home.com>
 -
 -	* Added "GetDefaulted" support for TIFFTAG_SAMPLEFORMAT in tif_aux.c.
 -
 -	* Patched tif_fax3.c so that dsp->runs is allocated a bit bigger
 -	to avoid overruns encountered with frle_bug.tif.
 -
 -Tue Feb 15 22:01:05 2000  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Fixed tools/tiffcmp so that stopondiff testing works.
 -	  Patch care of Joseph Orost <joe@sanskrit.lz.att.com>.
 -
 -2000-01-28    <warmerda@CS46980-B>
 -
 -	* Modified tif_unix.c to support 2-4GB seeks if USE_64BIT_API is
 -	  set to 1, and added default (off) setting in tiffconf.h.  This
 -	  should eventually be set by the configure script somehow.
 -
 -	  The original work on all these 2-4GB changes was done by 
 -	  Peter Smith (psmith@creo.com).
 -
 -	* Modified tif_win32.c to support 2-4GB seeks.
 -
 -	* tentatively changed toff_t to be unsigned instead of signed to
 -	  facilitate support for 2-4GB files. 
 -
 -	* Updated a variety of files to use toff_t.  Fixed some mixups
 -	  between toff_t and tsize_t.
 -
 -Fri Jan 28 10:13:49 2000  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Largely reimplemented contrib/addtiffo to avoid temp files, 
 -	updating the TIFF file in place.  Fixed a few other bugs to.
 -
 -	* Set tif_rawdatasize to zero when freeing raw data buffer in
 -	TIFFWriteDirectory().
 -
 -	* Enabled "REWRITE_HACK" in tif_write.c by default.
 -
 -	* Fix bug in tif_write.c when switching between reading one directory
 -	and writing to another. 
 -
 -	* Made TIFFWriteCheck() public, and added TIFFCreateDirectory()
 -
 -Wed Jan  5 12:37:48 2000  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Added TIFFmemory(3t) functions to libtiff.def.
 -
 -Tue Jan  4 13:39:00 2000  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Added libtiff/libtiff.def to TIFFILES distribution list.
 -
 -Mon Dec 27 12:13:39 EST 1999  Mike Welles <mike@onshore.com> 
 -
 -	* Created lzw compression kit, as a new module (libtiff-lzw-compression-kit). 
 -
 -	* Altered descriptions in tools to reflect "by default" lzw not supported
 -
 -	* Updated index.html to note lzw compression kit. 
 -	
 -Tue Dec 21 14:01:51 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Added fax3sm_winnt.c to distribution list in Makefile.in. 
 -
 -Tue Dec 21 11:04:45 EST 1999  Mike Welles <mike@onshore.com> *** 3.5.4 release ***
 -	
 -	* Aadded Pixar tag support.  Contributed by Phil Beffery <phil@pixar.com> 
 -
 -	* Made one more change to tif_dir.c for removal of LZW compression. Also added notice 
 -	  when LZW compression invoked. 
 -
 -	* Changed default compression in tools to TIFF_PACKBITS, and changed usage descriptions
 -	  in tools to reflect removal of LZW compression
 -	  
 -Mon Dec 20 18:39:02 EST 1999  Mike Welles  <mike@onshore.com>
 -
 -        * Fixed bug that caused LZW (non) compression to segfault. Added 
 -	  warning about LZW compression removed being removed, and why. 
 -
 -	* Added nostrip to install in tools/Makefile.in so that debugging 
 -	  symbols are kept. 
 -	
 -Tue Dec  7 12:04:47 EST 1999  Mike Welles  <mike@onshore.com>
 -
 -	* Added patch from Ivo Penzar <ivo.penzar@infolink-software.com>, 
 -	  supporting Adobe ZIP deflate.  Untested. 
 -	
 -Sat Dec  4 15:47:11 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Made Packbits the default compression in tools/tiff2rgba.c instead
 -	of LZW.
 -
 -Tue Nov 30 14:41:43 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>    *** 3.5.3. release ***
 -
 -	* Added tif_luv to contrib/djgpp/Makefile.lib.
 -
 -Tue Nov 30 14:15:32 EST 1999   Mike Welles <mike@onshore.com> 
 -
 -        * Added zip creation to relase makefile target 
 -
 -	* Added html for TIFFWriteTile.3t man page. 
 -	
 -Tue Nov 30 09:20:16 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Added some changes to tif_write.c to support rewriting existing
 -	fixed sized tiles and strips.  Code mods disabled by default, only
 -	enabled if REWRITE_HACK is defined for now.
 -
 -Mon Nov 29 11:43:42 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Added TIFFWriteTile.3t man page.
 -
 -Sun Nov 28 20:36:18 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Added notes on use of makefile.vc in build.html, and fixed 
 -	email subscription address.
 -
 -199-11-28  Mike Welles <mike@onshore.com> 
 -
 -	*  Fixed apocalypse-inducing y2k bug in contrib/ras/ras2tiff.c 
 -
 -	*  Did some casts cleaning up to reduce compiler warnings in tif_fax3.c,
 -	   from Bruce Carmeron <cameron@petris.com> -- modifications of 
 -	   changes made by Frank (sun cc still complained on cast). 
 -
 -	*  Added tiffconf.h to install target per request from Bill
 -	   Radcliffe <billr@corbis.com>: "We need a way for ImageMagick to
 - 	   know features have been compiled into the TIFF library in order to
 -	   handle things properly".  
 -	
 -Sat Nov 27 16:49:21 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* fixed various VC++ warnings as suggested by Gilles Vollant
 -	<info@winimage.com>.  
 -
 -Wed Nov 24 12:08:16 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Modified TIFFquery.3t man pages info on TIFFIsByteSwapped() to
 -	not imply applications are responsible for image data swapping.
 -
 -1999-11-22  Mike Welles <mike@onshore.com>
 -	*  HTML-ized the man pages, added to html/man
 -	
 -	*  Removed LZW Compression to comply with Unisys patent extortion. 
 -	
 -1999-09-29  Mike Welles		<mike@onshore.com> 
 -	*  Corrected one remaining 16 -> 32 bit value in tif_fax3.c, 
 -	   From Ivo Penzar <ivo.penzar@infolink-software.com. 
 -
 -	*  Added patch from Ivo Penzar to have TiffAdvanceDirectory handle
 -	   memory mapped files. <ivo.penzar@infolink-software.com>
 -	
 -1999-09-26  Mike Welles 	<mike@onshore.com>  *** 3.5.2 release ***
 -	* Corrected alpha versioning.  
 -
 -	* Removed distinction between  alpha and release targets in Makefile.in. 
 -
 -	* added release.stamp target, which tags cvs tree, and updates 
 -	  "RELEASE-DATE"
 -
 -	* added releasediff target, which diffs tree with source as of 
 -	  date in "RELEASE-DATE"
 -	  
 -	* Ticked up version to 3.5.2 (alpha 01 -- but I think we'll moving 
 -	  away from alpha/non-alpha distinctions). 
 -
 -	* updated html to reflect release 
 -	
 -1999-09-23    <warmerda@CS46980-B>
 -
 -	* Set O_BINARY for tif_unix.c open() ... used on cygwin for instance.
 -
 -	* Added CYGWIN case in configure.
 -
 -Fri Sep 17 00:13:51 CEST 1999  Mike Welles <mike@onshore.com> 
 -
 -	* Applied Francois Dagand's patch to handle fax decompression bug. 
 -	  (sizes >= 65536 were failing) 
 -	
 -Tue Sep 14 21:31:43 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Applied "a" mode fix to tif_win32.c/TIFFOpen() as suggested 
 -	  by Christopher Lawton <clawton@mathworks.com>
 -
 -Wed Sep  8 08:19:18 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Added IRIX/gcc, and OSF/1 4.x support on behalf of 
 -	  Albert Chin-A-Young <china@thewrittenword.com>
 -
 -	* Added TIFFReassignTagToIgnore() API on behalf of 
 -	  Bruce Cameron <cameron@petris.com>.  Man page still pending.
 -
 -Wed Aug 25 11:39:07 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Added test target in Makefile, test_pics.sh script and pics/*.rpt 
 -	files to provide for a rudimentary testsuite.
 -
 -	* Added contrib/tags back from old distribution ... fixed up a bit.
 -
 -1999-08-16    <warmerda@CS46980-B>
 -
 -	* Added simple makefile.vc makefiles for building with MS VC++
 -	on Windows NT/98/95 in console mode.  Stuff in contrib/win* make give 
 -	better solutions for some users.
 -
 -Mon Aug 16 21:52:11 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* Added addtiffo (add overviews to a TIFF file) in contrib.  Didn't
 -	put it in tools since part of it is in C++.
 -
 -1999-08-16  Michael L. Welles  <mike@kurtz.fake>
 -
 -	* Updated html/index.html with anon CVS instructions. 
 -
 -Mon Aug 16 13:18:41 1999  Frank Warmerdam  <warmerda@gdal.velocet.ca>
 -
 -	* pre-remove so link before softlink in LINUXdso action in 
 -	libtiff/Makefile.in to avoid failure on LINUXdso builds other than
 -	the first.
 -
 -	* Fixed problem with cvtcmap() in tif_getimage.c modifying the
 -	colormaps owned by the TIFF handle itself when trying to fixup wrong
 -	(eight bit) colormaps.  Corrected by maintaining a private copy of
 -	the colormap. 
 -
 -	* Added TIFFReadRGBATile()/TIFFReadRGBAStrip() support in 
 -	tif_getimage.c.
 -
 -	* CVS Repository placed at remotesensing.org.  ChangeLog added.
 diff --git a/plugins/FreeImage/Source/LibTIFF/LibTIFF.dsp b/plugins/FreeImage/Source/LibTIFF/LibTIFF.dsp deleted file mode 100644 index 9dd04050be..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/LibTIFF.dsp +++ /dev/null @@ -1,293 +0,0 @@ -# Microsoft Developer Studio Project File - Name="LibTIFF" - Package Owner=<4>
 -# Microsoft Developer Studio Generated Build File, Format Version 6.00
 -# ** NICHT BEARBEITEN **
 -
 -# TARGTYPE "Win32 (x86) Static Library" 0x0104
 -
 -CFG=LibTIFF - Win32 Debug
 -!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
 -!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
 -!MESSAGE 
 -!MESSAGE NMAKE /f "LibTIFF.mak".
 -!MESSAGE 
 -!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
 -!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
 -!MESSAGE 
 -!MESSAGE NMAKE /f "LibTIFF.mak" CFG="LibTIFF - Win32 Debug"
 -!MESSAGE 
 -!MESSAGE Für die Konfiguration stehen zur Auswahl:
 -!MESSAGE 
 -!MESSAGE "LibTIFF - Win32 Release" (basierend auf  "Win32 (x86) Static Library")
 -!MESSAGE "LibTIFF - Win32 Debug" (basierend auf  "Win32 (x86) Static Library")
 -!MESSAGE "LibTIFF - Win32 Release Unicode" (basierend auf  "Win32 (x86) Static Library")
 -!MESSAGE 
 -
 -# Begin Project
 -# PROP AllowPerConfigDependencies 0
 -# PROP Scc_ProjName ""
 -# PROP Scc_LocalPath ""
 -CPP=cl.exe
 -RSC=rc.exe
 -
 -!IF  "$(CFG)" == "LibTIFF - Win32 Release"
 -
 -# PROP BASE Use_MFC 0
 -# PROP BASE Use_Debug_Libraries 0
 -# PROP BASE Output_Dir "Release"
 -# PROP BASE Intermediate_Dir "Release"
 -# PROP BASE Target_Dir ""
 -# PROP Use_MFC 0
 -# PROP Use_Debug_Libraries 0
 -# PROP Output_Dir "Release"
 -# PROP Intermediate_Dir "Release"
 -# PROP Target_Dir ""
 -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
 -# ADD CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
 -# ADD BASE RSC /l 0x409 /d "NDEBUG"
 -# ADD RSC /l 0x409 /d "NDEBUG"
 -BSC32=bscmake.exe
 -# ADD BASE BSC32 /nologo
 -# ADD BSC32 /nologo
 -LIB32=link.exe -lib
 -# ADD BASE LIB32 /nologo
 -# ADD LIB32 /nologo
 -
 -!ELSEIF  "$(CFG)" == "LibTIFF - Win32 Debug"
 -
 -# PROP BASE Use_MFC 0
 -# PROP BASE Use_Debug_Libraries 1
 -# PROP BASE Output_Dir "Debug"
 -# PROP BASE Intermediate_Dir "Debug"
 -# PROP BASE Target_Dir ""
 -# PROP Use_MFC 0
 -# PROP Use_Debug_Libraries 1
 -# PROP Output_Dir "Debug"
 -# PROP Intermediate_Dir "Debug"
 -# PROP Target_Dir ""
 -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
 -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
 -# ADD BASE RSC /l 0x409 /d "_DEBUG"
 -# ADD RSC /l 0x409 /d "_DEBUG"
 -BSC32=bscmake.exe
 -# ADD BASE BSC32 /nologo
 -# ADD BSC32 /nologo
 -LIB32=link.exe -lib
 -# ADD BASE LIB32 /nologo
 -# ADD LIB32 /nologo
 -
 -!ELSEIF  "$(CFG)" == "LibTIFF - Win32 Release Unicode"
 -
 -# PROP BASE Use_MFC 0
 -# PROP BASE Use_Debug_Libraries 0
 -# PROP BASE Output_Dir "LibTIFF___Win32_Release_Unicode"
 -# PROP BASE Intermediate_Dir "LibTIFF___Win32_Release_Unicode"
 -# PROP BASE Target_Dir ""
 -# PROP Use_MFC 0
 -# PROP Use_Debug_Libraries 0
 -# PROP Output_Dir "LibTIFF___Win32_Release_Unicode"
 -# PROP Intermediate_Dir "LibTIFF___Win32_Release_Unicode"
 -# PROP Target_Dir ""
 -# ADD BASE CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
 -# ADD CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
 -# ADD BASE RSC /l 0x409 /d "NDEBUG"
 -# ADD RSC /l 0x409 /d "NDEBUG"
 -BSC32=bscmake.exe
 -# ADD BASE BSC32 /nologo
 -# ADD BSC32 /nologo
 -LIB32=link.exe -lib
 -# ADD BASE LIB32 /nologo
 -# ADD LIB32 /nologo
 -
 -!ENDIF 
 -
 -# Begin Target
 -
 -# Name "LibTIFF - Win32 Release"
 -# Name "LibTIFF - Win32 Debug"
 -# Name "LibTIFF - Win32 Release Unicode"
 -# Begin Group "Source Files"
 -
 -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
 -# Begin Source File
 -
 -SOURCE=.\tif_aux.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_close.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_codec.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_color.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_compress.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_dir.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_dirinfo.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_dirread.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_dirwrite.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_dumpmode.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_error.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_extension.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_fax3.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_fax3sm.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_flush.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_getimage.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_jpeg.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_luv.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_lzw.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_next.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_open.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_packbits.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_pixarlog.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_predict.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_print.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_read.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_strip.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_swab.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_thunder.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_tile.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_version.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_warning.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_write.c
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_zip.c
 -# End Source File
 -# End Group
 -# Begin Group "Header Files"
 -
 -# PROP Default_Filter "h;hpp;hxx;hm;inl"
 -# Begin Source File
 -
 -SOURCE=.\t4.h
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_config.h
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_dir.h
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_fax3.h
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tif_predict.h
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tiff.h
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tiffio.h
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tiffiop.h
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\tiffvers.h
 -# End Source File
 -# Begin Source File
 -
 -SOURCE=.\uvcode.h
 -# End Source File
 -# End Group
 -# End Target
 -# End Project
 diff --git a/plugins/FreeImage/Source/LibTIFF/SConstruct b/plugins/FreeImage/Source/LibTIFF/SConstruct deleted file mode 100644 index d1a2620cf5..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/SConstruct +++ /dev/null @@ -1,73 +0,0 @@ -# $Id: SConstruct,v 1.29 2011/04/10 17:14:09 drolon Exp $
 -
 -# Tag Image File Format (TIFF) Software
 -#
 -# Copyright (C) 2005, Andrey Kiselev <dron@ak4719.spb.edu>
 -#
 -# Permission to use, copy, modify, distribute, and sell this software and 
 -# its documentation for any purpose is hereby granted without fee, provided
 -# that (i) the above copyright notices and this permission notice appear in
 -# all copies of the software and related documentation, and (ii) the names of
 -# Sam Leffler and Silicon Graphics may not be used in any advertising or
 -# publicity relating to the software without the specific, prior written
 -# permission of Sam Leffler and Silicon Graphics.
 -# 
 -# THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 -# EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 -# WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 -# 
 -# IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 -# ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 -# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 -# WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 -# LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 -# OF THIS SOFTWARE.
 -
 -# This file contains rules to build software with the SCons tool
 -# (see the http://www.scons.org/ for details on SCons).
 -
 -# Import globally defined options
 -Import([ 'env', 'idir_lib' ])
 -
 -SRCS = [ \
 -	'tif_aux.c', \
 -	'tif_close.c', \
 -	'tif_codec.c', \
 -	'tif_color.c', \
 -	'tif_compress.c', \
 -	'tif_dir.c', \
 -	'tif_dirinfo.c', \
 -	'tif_dirread.c', \
 -	'tif_dirwrite.c', \
 -	'tif_dumpmode.c', \
 -	'tif_error.c', \
 -	'tif_extension.c', \
 -	'tif_fax3.c', \
 -	'tif_fax3sm.c', \
 -	'tif_flush.c', \
 -	'tif_getimage.c', \
 -	'tif_jbig.c', \
 -	'tif_jpeg.c', \
 -	'tif_luv.c', \
 -	'tif_lzw.c', \
 -	'tif_next.c', \
 -	'tif_ojpeg.c', \
 -	'tif_open.c', \
 -	'tif_packbits.c', \
 -	'tif_pixarlog.c', \
 -	'tif_predict.c', \
 -	'tif_print.c', \
 -	'tif_read.c', \
 -	'tif_strip.c', \
 -	'tif_swab.c', \
 -	'tif_thunder.c', \
 -	'tif_tile.c', \
 -	'tif_unix.c', \
 -	'tif_version.c', \
 -	'tif_warning.c', \
 -	'tif_write.c', \
 -	'tif_zip.c' ]
 -
 -StaticLibrary('tiff', SRCS)
 -SharedLibrary('tiff', SRCS)
 -
 diff --git a/plugins/FreeImage/Source/LibTIFF/mkg3states.c b/plugins/FreeImage/Source/LibTIFF/mkg3states.c deleted file mode 100644 index 46fac37a9c..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/mkg3states.c +++ /dev/null @@ -1,451 +0,0 @@ -/* "$Id: mkg3states.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1991-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/* Initialise fax decoder tables
 - * Decoder support is derived, with permission, from the code
 - * in Frank Cringle's viewfax program;
 - *      Copyright (C) 1990, 1995  Frank D. Cringle.
 - */
 -#include "tif_config.h"
 -
 -#include <stdio.h>
 -#include <stdlib.h>
 -#include <string.h>
 -
 -#ifdef HAVE_UNISTD_H
 -# include <unistd.h>
 -#endif
 -
 -#include "tif_fax3.h"
 -
 -#ifndef HAVE_GETOPT
 -extern int getopt(int, char**, char*);
 -#endif
 -
 -#define	streq(a,b)	(strcmp(a,b) == 0)
 -
 -/* NB: can't use names in tif_fax3.h 'cuz they are declared const */
 -TIFFFaxTabEnt MainTable[128];
 -TIFFFaxTabEnt WhiteTable[4096];
 -TIFFFaxTabEnt BlackTable[8192];
 -
 -struct proto {
 -    uint16 code;		/* right justified, lsb-first, zero filled */
 -    uint16 val;		/* (pixel count)<<4 + code width  */
 -};
 -
 -static struct proto Pass[] = {
 -{ 0x0008, 4 },
 -{ 0, 0 }
 -};
 -
 -static struct proto Horiz[]  = {
 -{ 0x0004, 3 },
 -{ 0, 0 }
 -};
 -
 -static struct proto V0[]  = {
 -{ 0x0001, 1 },
 -{ 0, 0 }
 -};
 -
 -static struct proto VR[]  = {
 -{ 0x0006, (1<<4)+3 },
 -{ 0x0030, (2<<4)+6 },
 -{ 0x0060, (3<<4)+7 },
 -{ 0, 0 }
 -};
 -
 -static struct proto VL[]  = {
 -{ 0x0002, (1<<4)+3 },
 -{ 0x0010, (2<<4)+6 },
 -{ 0x0020, (3<<4)+7 },
 -{ 0, 0 }
 -};
 -
 -static struct proto Ext[]  = {
 -{ 0x0040, 7 },
 -{ 0, 0 }
 -};
 -
 -static struct proto EOLV[]  = {
 -{ 0x0000, 7 },
 -{ 0, 0 }
 -};
 -
 -static struct proto MakeUpW[] = {
 -{ 0x001b, 1029 },
 -{ 0x0009, 2053 },
 -{ 0x003a, 3078 },
 -{ 0x0076, 4103 },
 -{ 0x006c, 5128 },
 -{ 0x00ec, 6152 },
 -{ 0x0026, 7176 },
 -{ 0x00a6, 8200 },
 -{ 0x0016, 9224 },
 -{ 0x00e6, 10248 },
 -{ 0x0066, 11273 },
 -{ 0x0166, 12297 },
 -{ 0x0096, 13321 },
 -{ 0x0196, 14345 },
 -{ 0x0056, 15369 },
 -{ 0x0156, 16393 },
 -{ 0x00d6, 17417 },
 -{ 0x01d6, 18441 },
 -{ 0x0036, 19465 },
 -{ 0x0136, 20489 },
 -{ 0x00b6, 21513 },
 -{ 0x01b6, 22537 },
 -{ 0x0032, 23561 },
 -{ 0x0132, 24585 },
 -{ 0x00b2, 25609 },
 -{ 0x0006, 26630 },
 -{ 0x01b2, 27657 },
 -{ 0, 0 }
 -};
 -
 -static struct proto MakeUpB[] = {
 -{ 0x03c0, 1034 },
 -{ 0x0130, 2060 },
 -{ 0x0930, 3084 },
 -{ 0x0da0, 4108 },
 -{ 0x0cc0, 5132 },
 -{ 0x02c0, 6156 },
 -{ 0x0ac0, 7180 },
 -{ 0x06c0, 8205 },
 -{ 0x16c0, 9229 },
 -{ 0x0a40, 10253 },
 -{ 0x1a40, 11277 },
 -{ 0x0640, 12301 },
 -{ 0x1640, 13325 },
 -{ 0x09c0, 14349 },
 -{ 0x19c0, 15373 },
 -{ 0x05c0, 16397 },
 -{ 0x15c0, 17421 },
 -{ 0x0dc0, 18445 },
 -{ 0x1dc0, 19469 },
 -{ 0x0940, 20493 },
 -{ 0x1940, 21517 },
 -{ 0x0540, 22541 },
 -{ 0x1540, 23565 },
 -{ 0x0b40, 24589 },
 -{ 0x1b40, 25613 },
 -{ 0x04c0, 26637 },
 -{ 0x14c0, 27661 },
 -{ 0, 0 }
 -};
 -
 -static struct proto MakeUp[] = {
 -{ 0x0080, 28683 },
 -{ 0x0180, 29707 },
 -{ 0x0580, 30731 },
 -{ 0x0480, 31756 },
 -{ 0x0c80, 32780 },
 -{ 0x0280, 33804 },
 -{ 0x0a80, 34828 },
 -{ 0x0680, 35852 },
 -{ 0x0e80, 36876 },
 -{ 0x0380, 37900 },
 -{ 0x0b80, 38924 },
 -{ 0x0780, 39948 },
 -{ 0x0f80, 40972 },
 -{ 0, 0 }
 -};
 -
 -static struct proto TermW[] = {
 -{ 0x00ac, 8 },
 -{ 0x0038, 22 },
 -{ 0x000e, 36 },
 -{ 0x0001, 52 },
 -{ 0x000d, 68 },
 -{ 0x0003, 84 },
 -{ 0x0007, 100 },
 -{ 0x000f, 116 },
 -{ 0x0019, 133 },
 -{ 0x0005, 149 },
 -{ 0x001c, 165 },
 -{ 0x0002, 181 },
 -{ 0x0004, 198 },
 -{ 0x0030, 214 },
 -{ 0x000b, 230 },
 -{ 0x002b, 246 },
 -{ 0x0015, 262 },
 -{ 0x0035, 278 },
 -{ 0x0072, 295 },
 -{ 0x0018, 311 },
 -{ 0x0008, 327 },
 -{ 0x0074, 343 },
 -{ 0x0060, 359 },
 -{ 0x0010, 375 },
 -{ 0x000a, 391 },
 -{ 0x006a, 407 },
 -{ 0x0064, 423 },
 -{ 0x0012, 439 },
 -{ 0x000c, 455 },
 -{ 0x0040, 472 },
 -{ 0x00c0, 488 },
 -{ 0x0058, 504 },
 -{ 0x00d8, 520 },
 -{ 0x0048, 536 },
 -{ 0x00c8, 552 },
 -{ 0x0028, 568 },
 -{ 0x00a8, 584 },
 -{ 0x0068, 600 },
 -{ 0x00e8, 616 },
 -{ 0x0014, 632 },
 -{ 0x0094, 648 },
 -{ 0x0054, 664 },
 -{ 0x00d4, 680 },
 -{ 0x0034, 696 },
 -{ 0x00b4, 712 },
 -{ 0x0020, 728 },
 -{ 0x00a0, 744 },
 -{ 0x0050, 760 },
 -{ 0x00d0, 776 },
 -{ 0x004a, 792 },
 -{ 0x00ca, 808 },
 -{ 0x002a, 824 },
 -{ 0x00aa, 840 },
 -{ 0x0024, 856 },
 -{ 0x00a4, 872 },
 -{ 0x001a, 888 },
 -{ 0x009a, 904 },
 -{ 0x005a, 920 },
 -{ 0x00da, 936 },
 -{ 0x0052, 952 },
 -{ 0x00d2, 968 },
 -{ 0x004c, 984 },
 -{ 0x00cc, 1000 },
 -{ 0x002c, 1016 },
 -{ 0, 0 }
 -};
 -
 -static struct proto TermB[] = {
 -{ 0x03b0, 10 },
 -{ 0x0002, 19 },
 -{ 0x0003, 34 },
 -{ 0x0001, 50 },
 -{ 0x0006, 67 },
 -{ 0x000c, 84 },
 -{ 0x0004, 100 },
 -{ 0x0018, 117 },
 -{ 0x0028, 134 },
 -{ 0x0008, 150 },
 -{ 0x0010, 167 },
 -{ 0x0050, 183 },
 -{ 0x0070, 199 },
 -{ 0x0020, 216 },
 -{ 0x00e0, 232 },
 -{ 0x0030, 249 },
 -{ 0x03a0, 266 },
 -{ 0x0060, 282 },
 -{ 0x0040, 298 },
 -{ 0x0730, 315 },
 -{ 0x00b0, 331 },
 -{ 0x01b0, 347 },
 -{ 0x0760, 363 },
 -{ 0x00a0, 379 },
 -{ 0x0740, 395 },
 -{ 0x00c0, 411 },
 -{ 0x0530, 428 },
 -{ 0x0d30, 444 },
 -{ 0x0330, 460 },
 -{ 0x0b30, 476 },
 -{ 0x0160, 492 },
 -{ 0x0960, 508 },
 -{ 0x0560, 524 },
 -{ 0x0d60, 540 },
 -{ 0x04b0, 556 },
 -{ 0x0cb0, 572 },
 -{ 0x02b0, 588 },
 -{ 0x0ab0, 604 },
 -{ 0x06b0, 620 },
 -{ 0x0eb0, 636 },
 -{ 0x0360, 652 },
 -{ 0x0b60, 668 },
 -{ 0x05b0, 684 },
 -{ 0x0db0, 700 },
 -{ 0x02a0, 716 },
 -{ 0x0aa0, 732 },
 -{ 0x06a0, 748 },
 -{ 0x0ea0, 764 },
 -{ 0x0260, 780 },
 -{ 0x0a60, 796 },
 -{ 0x04a0, 812 },
 -{ 0x0ca0, 828 },
 -{ 0x0240, 844 },
 -{ 0x0ec0, 860 },
 -{ 0x01c0, 876 },
 -{ 0x0e40, 892 },
 -{ 0x0140, 908 },
 -{ 0x01a0, 924 },
 -{ 0x09a0, 940 },
 -{ 0x0d40, 956 },
 -{ 0x0340, 972 },
 -{ 0x05a0, 988 },
 -{ 0x0660, 1004 },
 -{ 0x0e60, 1020 },
 -{ 0, 0 }
 -};
 -
 -static struct proto EOLH[] = {
 -{ 0x0000, 11 },
 -{ 0, 0 }
 -};
 -
 -static void
 -FillTable(TIFFFaxTabEnt *T, int Size, struct proto *P, int State)
 -{
 -    int limit = 1 << Size;
 -
 -    while (P->val) {
 -	int width = P->val & 15;
 -	int param = P->val >> 4;
 -	int incr = 1 << width;
 -	int code;
 -	for (code = P->code; code < limit; code += incr) {
 -	    TIFFFaxTabEnt *E = T+code;
 -	    E->State = State;
 -	    E->Width = width;
 -	    E->Param = param;
 -	}
 -	P++;
 -    }
 -}
 -
 -static	char* storage_class = "";
 -static	char* const_class = "";
 -static	int packoutput = 1;
 -static	char* prebrace = "";
 -static	char* postbrace = "";
 -
 -void
 -WriteTable(FILE* fd, const TIFFFaxTabEnt* T, int Size, const char* name)
 -{
 -    int i;
 -    char* sep;
 -
 -    fprintf(fd, "%s %s TIFFFaxTabEnt %s[%d] = {",
 -	storage_class, const_class, name, Size);
 -    if (packoutput) {
 -	sep = "\n";
 -	for (i = 0; i < Size; i++) {
 -	    fprintf(fd, "%s%s%d,%d,%d%s",
 -		sep, prebrace, T->State, T->Width, (int) T->Param, postbrace);
 -	    if (((i+1) % 10) == 0)
 -		    sep = ",\n";
 -	    else
 -		    sep = ",";
 -	    T++;
 -	}
 -    } else {
 -	sep = "\n ";
 -	for (i = 0; i < Size; i++) {
 -	    fprintf(fd, "%s%s%3d,%3d,%4d%s",
 -		sep, prebrace, T->State, T->Width, (int) T->Param, postbrace);
 -	    if (((i+1) % 6) == 0)
 -		    sep = ",\n ";
 -	    else
 -		    sep = ",";
 -	    T++;
 -	}
 -    }
 -    fprintf(fd, "\n};\n");
 -}
 -
 -/* initialise the huffman code tables */
 -int
 -main(int argc, char* argv[])
 -{
 -    FILE* fd;
 -    char* outputfile;
 -    int c;
 -    extern int optind;
 -    extern char* optarg;
 -
 -    while ((c = getopt(argc, argv, "c:s:bp")) != -1)
 -	switch (c) {
 -	case 'c':
 -	    const_class = optarg;
 -	    break;
 -	case 's':
 -	    storage_class = optarg;
 -	    break;
 -	case 'p':
 -	    packoutput = 0;
 -	    break;
 -	case 'b':
 -	    prebrace = "{";
 -	    postbrace = "}";
 -	    break;
 -	case '?':
 -	    fprintf(stderr,
 -		"usage: %s [-c const] [-s storage] [-p] [-b] file\n",
 -		argv[0]);
 -	    return (-1);
 -	}
 -    outputfile = optind < argc ? argv[optind] : "g3states.h";
 -    fd = fopen(outputfile, "w");
 -    if (fd == NULL) {
 -	fprintf(stderr, "%s: %s: Cannot create output file.\n",
 -	    argv[0], outputfile);
 -	return (-2);
 -    }
 -    FillTable(MainTable, 7, Pass, S_Pass);
 -    FillTable(MainTable, 7, Horiz, S_Horiz);
 -    FillTable(MainTable, 7, V0, S_V0);
 -    FillTable(MainTable, 7, VR, S_VR);
 -    FillTable(MainTable, 7, VL, S_VL);
 -    FillTable(MainTable, 7, Ext, S_Ext);
 -    FillTable(MainTable, 7, EOLV, S_EOL);
 -    FillTable(WhiteTable, 12, MakeUpW, S_MakeUpW);
 -    FillTable(WhiteTable, 12, MakeUp, S_MakeUp);
 -    FillTable(WhiteTable, 12, TermW, S_TermW);
 -    FillTable(WhiteTable, 12, EOLH, S_EOL);
 -    FillTable(BlackTable, 13, MakeUpB, S_MakeUpB);
 -    FillTable(BlackTable, 13, MakeUp, S_MakeUp);
 -    FillTable(BlackTable, 13, TermB, S_TermB);
 -    FillTable(BlackTable, 13, EOLH, S_EOL);
 -
 -    fprintf(fd, "/* WARNING, this file was automatically generated by the\n");
 -    fprintf(fd, "    mkg3states program */\n");
 -    fprintf(fd, "#include \"tiff.h\"\n");
 -    fprintf(fd, "#include \"tif_fax3.h\"\n");
 -    WriteTable(fd, MainTable, 128, "TIFFFaxMainTable");
 -    WriteTable(fd, WhiteTable, 4096, "TIFFFaxWhiteTable");
 -    WriteTable(fd, BlackTable, 8192, "TIFFFaxBlackTable");
 -    fclose(fd);
 -    return (0);
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/t4.h b/plugins/FreeImage/Source/LibTIFF/t4.h deleted file mode 100644 index 1457ebfabe..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/t4.h +++ /dev/null @@ -1,292 +0,0 @@ -/* $Id: t4.h,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#ifndef _T4_
 -#define	_T4_
 -/*
 - * CCITT T.4 1D Huffman runlength codes and
 - * related definitions.  Given the small sizes
 - * of these tables it does not seem
 - * worthwhile to make code & length 8 bits.
 - */
 -typedef struct tableentry {
 -    unsigned short length;	/* bit length of g3 code */
 -    unsigned short code;	/* g3 code */
 -    short	runlen;		/* run length in bits */
 -} tableentry;
 -
 -#define	EOL	0x001	/* EOL code value - 0000 0000 0000 1 */
 -
 -/* status values returned instead of a run length */
 -#define	G3CODE_EOL	-1	/* NB: ACT_EOL - ACT_WRUNT */
 -#define	G3CODE_INVALID	-2	/* NB: ACT_INVALID - ACT_WRUNT */
 -#define	G3CODE_EOF	-3	/* end of input data */
 -#define	G3CODE_INCOMP	-4	/* incomplete run code */
 -
 -/*
 - * Note that these tables are ordered such that the
 - * index into the table is known to be either the
 - * run length, or (run length / 64) + a fixed offset.
 - *
 - * NB: The G3CODE_INVALID entries are only used
 - *     during state generation (see mkg3states.c).
 - */
 -#ifdef G3CODES
 -const tableentry TIFFFaxWhiteCodes[] = {
 -    { 8, 0x35, 0 },	/* 0011 0101 */
 -    { 6, 0x7, 1 },	/* 0001 11 */
 -    { 4, 0x7, 2 },	/* 0111 */
 -    { 4, 0x8, 3 },	/* 1000 */
 -    { 4, 0xB, 4 },	/* 1011 */
 -    { 4, 0xC, 5 },	/* 1100 */
 -    { 4, 0xE, 6 },	/* 1110 */
 -    { 4, 0xF, 7 },	/* 1111 */
 -    { 5, 0x13, 8 },	/* 1001 1 */
 -    { 5, 0x14, 9 },	/* 1010 0 */
 -    { 5, 0x7, 10 },	/* 0011 1 */
 -    { 5, 0x8, 11 },	/* 0100 0 */
 -    { 6, 0x8, 12 },	/* 0010 00 */
 -    { 6, 0x3, 13 },	/* 0000 11 */
 -    { 6, 0x34, 14 },	/* 1101 00 */
 -    { 6, 0x35, 15 },	/* 1101 01 */
 -    { 6, 0x2A, 16 },	/* 1010 10 */
 -    { 6, 0x2B, 17 },	/* 1010 11 */
 -    { 7, 0x27, 18 },	/* 0100 111 */
 -    { 7, 0xC, 19 },	/* 0001 100 */
 -    { 7, 0x8, 20 },	/* 0001 000 */
 -    { 7, 0x17, 21 },	/* 0010 111 */
 -    { 7, 0x3, 22 },	/* 0000 011 */
 -    { 7, 0x4, 23 },	/* 0000 100 */
 -    { 7, 0x28, 24 },	/* 0101 000 */
 -    { 7, 0x2B, 25 },	/* 0101 011 */
 -    { 7, 0x13, 26 },	/* 0010 011 */
 -    { 7, 0x24, 27 },	/* 0100 100 */
 -    { 7, 0x18, 28 },	/* 0011 000 */
 -    { 8, 0x2, 29 },	/* 0000 0010 */
 -    { 8, 0x3, 30 },	/* 0000 0011 */
 -    { 8, 0x1A, 31 },	/* 0001 1010 */
 -    { 8, 0x1B, 32 },	/* 0001 1011 */
 -    { 8, 0x12, 33 },	/* 0001 0010 */
 -    { 8, 0x13, 34 },	/* 0001 0011 */
 -    { 8, 0x14, 35 },	/* 0001 0100 */
 -    { 8, 0x15, 36 },	/* 0001 0101 */
 -    { 8, 0x16, 37 },	/* 0001 0110 */
 -    { 8, 0x17, 38 },	/* 0001 0111 */
 -    { 8, 0x28, 39 },	/* 0010 1000 */
 -    { 8, 0x29, 40 },	/* 0010 1001 */
 -    { 8, 0x2A, 41 },	/* 0010 1010 */
 -    { 8, 0x2B, 42 },	/* 0010 1011 */
 -    { 8, 0x2C, 43 },	/* 0010 1100 */
 -    { 8, 0x2D, 44 },	/* 0010 1101 */
 -    { 8, 0x4, 45 },	/* 0000 0100 */
 -    { 8, 0x5, 46 },	/* 0000 0101 */
 -    { 8, 0xA, 47 },	/* 0000 1010 */
 -    { 8, 0xB, 48 },	/* 0000 1011 */
 -    { 8, 0x52, 49 },	/* 0101 0010 */
 -    { 8, 0x53, 50 },	/* 0101 0011 */
 -    { 8, 0x54, 51 },	/* 0101 0100 */
 -    { 8, 0x55, 52 },	/* 0101 0101 */
 -    { 8, 0x24, 53 },	/* 0010 0100 */
 -    { 8, 0x25, 54 },	/* 0010 0101 */
 -    { 8, 0x58, 55 },	/* 0101 1000 */
 -    { 8, 0x59, 56 },	/* 0101 1001 */
 -    { 8, 0x5A, 57 },	/* 0101 1010 */
 -    { 8, 0x5B, 58 },	/* 0101 1011 */
 -    { 8, 0x4A, 59 },	/* 0100 1010 */
 -    { 8, 0x4B, 60 },	/* 0100 1011 */
 -    { 8, 0x32, 61 },	/* 0011 0010 */
 -    { 8, 0x33, 62 },	/* 0011 0011 */
 -    { 8, 0x34, 63 },	/* 0011 0100 */
 -    { 5, 0x1B, 64 },	/* 1101 1 */
 -    { 5, 0x12, 128 },	/* 1001 0 */
 -    { 6, 0x17, 192 },	/* 0101 11 */
 -    { 7, 0x37, 256 },	/* 0110 111 */
 -    { 8, 0x36, 320 },	/* 0011 0110 */
 -    { 8, 0x37, 384 },	/* 0011 0111 */
 -    { 8, 0x64, 448 },	/* 0110 0100 */
 -    { 8, 0x65, 512 },	/* 0110 0101 */
 -    { 8, 0x68, 576 },	/* 0110 1000 */
 -    { 8, 0x67, 640 },	/* 0110 0111 */
 -    { 9, 0xCC, 704 },	/* 0110 0110 0 */
 -    { 9, 0xCD, 768 },	/* 0110 0110 1 */
 -    { 9, 0xD2, 832 },	/* 0110 1001 0 */
 -    { 9, 0xD3, 896 },	/* 0110 1001 1 */
 -    { 9, 0xD4, 960 },	/* 0110 1010 0 */
 -    { 9, 0xD5, 1024 },	/* 0110 1010 1 */
 -    { 9, 0xD6, 1088 },	/* 0110 1011 0 */
 -    { 9, 0xD7, 1152 },	/* 0110 1011 1 */
 -    { 9, 0xD8, 1216 },	/* 0110 1100 0 */
 -    { 9, 0xD9, 1280 },	/* 0110 1100 1 */
 -    { 9, 0xDA, 1344 },	/* 0110 1101 0 */
 -    { 9, 0xDB, 1408 },	/* 0110 1101 1 */
 -    { 9, 0x98, 1472 },	/* 0100 1100 0 */
 -    { 9, 0x99, 1536 },	/* 0100 1100 1 */
 -    { 9, 0x9A, 1600 },	/* 0100 1101 0 */
 -    { 6, 0x18, 1664 },	/* 0110 00 */
 -    { 9, 0x9B, 1728 },	/* 0100 1101 1 */
 -    { 11, 0x8, 1792 },	/* 0000 0001 000 */
 -    { 11, 0xC, 1856 },	/* 0000 0001 100 */
 -    { 11, 0xD, 1920 },	/* 0000 0001 101 */
 -    { 12, 0x12, 1984 },	/* 0000 0001 0010 */
 -    { 12, 0x13, 2048 },	/* 0000 0001 0011 */
 -    { 12, 0x14, 2112 },	/* 0000 0001 0100 */
 -    { 12, 0x15, 2176 },	/* 0000 0001 0101 */
 -    { 12, 0x16, 2240 },	/* 0000 0001 0110 */
 -    { 12, 0x17, 2304 },	/* 0000 0001 0111 */
 -    { 12, 0x1C, 2368 },	/* 0000 0001 1100 */
 -    { 12, 0x1D, 2432 },	/* 0000 0001 1101 */
 -    { 12, 0x1E, 2496 },	/* 0000 0001 1110 */
 -    { 12, 0x1F, 2560 },	/* 0000 0001 1111 */
 -    { 12, 0x1, G3CODE_EOL },	/* 0000 0000 0001 */
 -    { 9, 0x1, G3CODE_INVALID },	/* 0000 0000 1 */
 -    { 10, 0x1, G3CODE_INVALID },	/* 0000 0000 01 */
 -    { 11, 0x1, G3CODE_INVALID },	/* 0000 0000 001 */
 -    { 12, 0x0, G3CODE_INVALID },	/* 0000 0000 0000 */
 -};
 -
 -const tableentry TIFFFaxBlackCodes[] = {
 -    { 10, 0x37, 0 },	/* 0000 1101 11 */
 -    { 3, 0x2, 1 },	/* 010 */
 -    { 2, 0x3, 2 },	/* 11 */
 -    { 2, 0x2, 3 },	/* 10 */
 -    { 3, 0x3, 4 },	/* 011 */
 -    { 4, 0x3, 5 },	/* 0011 */
 -    { 4, 0x2, 6 },	/* 0010 */
 -    { 5, 0x3, 7 },	/* 0001 1 */
 -    { 6, 0x5, 8 },	/* 0001 01 */
 -    { 6, 0x4, 9 },	/* 0001 00 */
 -    { 7, 0x4, 10 },	/* 0000 100 */
 -    { 7, 0x5, 11 },	/* 0000 101 */
 -    { 7, 0x7, 12 },	/* 0000 111 */
 -    { 8, 0x4, 13 },	/* 0000 0100 */
 -    { 8, 0x7, 14 },	/* 0000 0111 */
 -    { 9, 0x18, 15 },	/* 0000 1100 0 */
 -    { 10, 0x17, 16 },	/* 0000 0101 11 */
 -    { 10, 0x18, 17 },	/* 0000 0110 00 */
 -    { 10, 0x8, 18 },	/* 0000 0010 00 */
 -    { 11, 0x67, 19 },	/* 0000 1100 111 */
 -    { 11, 0x68, 20 },	/* 0000 1101 000 */
 -    { 11, 0x6C, 21 },	/* 0000 1101 100 */
 -    { 11, 0x37, 22 },	/* 0000 0110 111 */
 -    { 11, 0x28, 23 },	/* 0000 0101 000 */
 -    { 11, 0x17, 24 },	/* 0000 0010 111 */
 -    { 11, 0x18, 25 },	/* 0000 0011 000 */
 -    { 12, 0xCA, 26 },	/* 0000 1100 1010 */
 -    { 12, 0xCB, 27 },	/* 0000 1100 1011 */
 -    { 12, 0xCC, 28 },	/* 0000 1100 1100 */
 -    { 12, 0xCD, 29 },	/* 0000 1100 1101 */
 -    { 12, 0x68, 30 },	/* 0000 0110 1000 */
 -    { 12, 0x69, 31 },	/* 0000 0110 1001 */
 -    { 12, 0x6A, 32 },	/* 0000 0110 1010 */
 -    { 12, 0x6B, 33 },	/* 0000 0110 1011 */
 -    { 12, 0xD2, 34 },	/* 0000 1101 0010 */
 -    { 12, 0xD3, 35 },	/* 0000 1101 0011 */
 -    { 12, 0xD4, 36 },	/* 0000 1101 0100 */
 -    { 12, 0xD5, 37 },	/* 0000 1101 0101 */
 -    { 12, 0xD6, 38 },	/* 0000 1101 0110 */
 -    { 12, 0xD7, 39 },	/* 0000 1101 0111 */
 -    { 12, 0x6C, 40 },	/* 0000 0110 1100 */
 -    { 12, 0x6D, 41 },	/* 0000 0110 1101 */
 -    { 12, 0xDA, 42 },	/* 0000 1101 1010 */
 -    { 12, 0xDB, 43 },	/* 0000 1101 1011 */
 -    { 12, 0x54, 44 },	/* 0000 0101 0100 */
 -    { 12, 0x55, 45 },	/* 0000 0101 0101 */
 -    { 12, 0x56, 46 },	/* 0000 0101 0110 */
 -    { 12, 0x57, 47 },	/* 0000 0101 0111 */
 -    { 12, 0x64, 48 },	/* 0000 0110 0100 */
 -    { 12, 0x65, 49 },	/* 0000 0110 0101 */
 -    { 12, 0x52, 50 },	/* 0000 0101 0010 */
 -    { 12, 0x53, 51 },	/* 0000 0101 0011 */
 -    { 12, 0x24, 52 },	/* 0000 0010 0100 */
 -    { 12, 0x37, 53 },	/* 0000 0011 0111 */
 -    { 12, 0x38, 54 },	/* 0000 0011 1000 */
 -    { 12, 0x27, 55 },	/* 0000 0010 0111 */
 -    { 12, 0x28, 56 },	/* 0000 0010 1000 */
 -    { 12, 0x58, 57 },	/* 0000 0101 1000 */
 -    { 12, 0x59, 58 },	/* 0000 0101 1001 */
 -    { 12, 0x2B, 59 },	/* 0000 0010 1011 */
 -    { 12, 0x2C, 60 },	/* 0000 0010 1100 */
 -    { 12, 0x5A, 61 },	/* 0000 0101 1010 */
 -    { 12, 0x66, 62 },	/* 0000 0110 0110 */
 -    { 12, 0x67, 63 },	/* 0000 0110 0111 */
 -    { 10, 0xF, 64 },	/* 0000 0011 11 */
 -    { 12, 0xC8, 128 },	/* 0000 1100 1000 */
 -    { 12, 0xC9, 192 },	/* 0000 1100 1001 */
 -    { 12, 0x5B, 256 },	/* 0000 0101 1011 */
 -    { 12, 0x33, 320 },	/* 0000 0011 0011 */
 -    { 12, 0x34, 384 },	/* 0000 0011 0100 */
 -    { 12, 0x35, 448 },	/* 0000 0011 0101 */
 -    { 13, 0x6C, 512 },	/* 0000 0011 0110 0 */
 -    { 13, 0x6D, 576 },	/* 0000 0011 0110 1 */
 -    { 13, 0x4A, 640 },	/* 0000 0010 0101 0 */
 -    { 13, 0x4B, 704 },	/* 0000 0010 0101 1 */
 -    { 13, 0x4C, 768 },	/* 0000 0010 0110 0 */
 -    { 13, 0x4D, 832 },	/* 0000 0010 0110 1 */
 -    { 13, 0x72, 896 },	/* 0000 0011 1001 0 */
 -    { 13, 0x73, 960 },	/* 0000 0011 1001 1 */
 -    { 13, 0x74, 1024 },	/* 0000 0011 1010 0 */
 -    { 13, 0x75, 1088 },	/* 0000 0011 1010 1 */
 -    { 13, 0x76, 1152 },	/* 0000 0011 1011 0 */
 -    { 13, 0x77, 1216 },	/* 0000 0011 1011 1 */
 -    { 13, 0x52, 1280 },	/* 0000 0010 1001 0 */
 -    { 13, 0x53, 1344 },	/* 0000 0010 1001 1 */
 -    { 13, 0x54, 1408 },	/* 0000 0010 1010 0 */
 -    { 13, 0x55, 1472 },	/* 0000 0010 1010 1 */
 -    { 13, 0x5A, 1536 },	/* 0000 0010 1101 0 */
 -    { 13, 0x5B, 1600 },	/* 0000 0010 1101 1 */
 -    { 13, 0x64, 1664 },	/* 0000 0011 0010 0 */
 -    { 13, 0x65, 1728 },	/* 0000 0011 0010 1 */
 -    { 11, 0x8, 1792 },	/* 0000 0001 000 */
 -    { 11, 0xC, 1856 },	/* 0000 0001 100 */
 -    { 11, 0xD, 1920 },	/* 0000 0001 101 */
 -    { 12, 0x12, 1984 },	/* 0000 0001 0010 */
 -    { 12, 0x13, 2048 },	/* 0000 0001 0011 */
 -    { 12, 0x14, 2112 },	/* 0000 0001 0100 */
 -    { 12, 0x15, 2176 },	/* 0000 0001 0101 */
 -    { 12, 0x16, 2240 },	/* 0000 0001 0110 */
 -    { 12, 0x17, 2304 },	/* 0000 0001 0111 */
 -    { 12, 0x1C, 2368 },	/* 0000 0001 1100 */
 -    { 12, 0x1D, 2432 },	/* 0000 0001 1101 */
 -    { 12, 0x1E, 2496 },	/* 0000 0001 1110 */
 -    { 12, 0x1F, 2560 },	/* 0000 0001 1111 */
 -    { 12, 0x1, G3CODE_EOL },	/* 0000 0000 0001 */
 -    { 9, 0x1, G3CODE_INVALID },	/* 0000 0000 1 */
 -    { 10, 0x1, G3CODE_INVALID },	/* 0000 0000 01 */
 -    { 11, 0x1, G3CODE_INVALID },	/* 0000 0000 001 */
 -    { 12, 0x0, G3CODE_INVALID },	/* 0000 0000 0000 */
 -};
 -#else
 -extern	const tableentry TIFFFaxWhiteCodes[];
 -extern	const tableentry TIFFFaxBlackCodes[];
 -#endif
 -#endif /* _T4_ */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_acorn.c b/plugins/FreeImage/Source/LibTIFF/tif_acorn.c deleted file mode 100644 index d2de42de53..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_acorn.c +++ /dev/null @@ -1,526 +0,0 @@ -/* $Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_acorn.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - *
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
 - *
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library RISC OS specific Routines.
 - * Developed out of the Unix version.
 - * Peter Greenham, May 1995
 - */
 -#include "tiffiop.h"
 -#include <stdio.h>
 -#include <stdlib.h>
 -
 -/*
 -Low-level file handling
 -~~~~~~~~~~~~~~~~~~~~~~~
 -The functions in osfcn.h are unavailable when compiling under C, as it's a
 -C++ header. Therefore they have been implemented here.
 -
 -Now, why have I done it this way?
 -
 -The definitive API library for RISC OS is Jonathan Coxhead's OSLib, which
 -uses heavily optimised ARM assembler or even plain inline SWI calls for
 -maximum performance and minimum runtime size. However, I don't want to make
 -LIBTIFF need that to survive. Therefore I have also emulated the functions
 -using macros to _swi() and _swix() defined in the swis.h header, and
 -borrowing types from kernel.h, which is less efficient but doesn't need any
 -third-party libraries.
 - */
 -
 -#ifdef INCLUDE_OSLIB
 -
 -#include "osfile.h"
 -#include "osgbpb.h"
 -#include "osargs.h"
 -#include "osfind.h"
 -
 -#else
 -
 -/* OSLIB EMULATION STARTS */
 -
 -#include "kernel.h"
 -#include "swis.h"
 -
 -/* From oslib:types.h */
 -typedef unsigned int                            bits;
 -typedef unsigned char                           byte;
 -#ifndef TRUE
 -#define TRUE                                    1
 -#endif
 -#ifndef FALSE
 -#define FALSE                                   0
 -#endif
 -#ifndef NULL
 -#define NULL                                    0
 -#endif
 -#ifndef SKIP
 -#define SKIP                                    0
 -#endif
 -
 -/* From oslib:os.h */
 -typedef _kernel_oserror os_error;
 -typedef byte os_f;
 -
 -/* From oslib:osfile.h */
 -#undef  OS_File
 -#define OS_File                                 0x8
 -
 -/* From oslib:osgbpb.h */
 -#undef  OS_GBPB
 -#define OS_GBPB                                 0xC
 -#undef  OSGBPB_Write
 -#define OSGBPB_Write                            0x2
 -#undef  OSGBPB_Read
 -#define OSGBPB_Read                             0x4
 -
 -extern os_error *xosgbpb_write (os_f file,
 -      byte *data,
 -      int size,
 -      int *unwritten);
 -extern int osgbpb_write (os_f file,
 -      byte *data,
 -      int size);
 -
 -#define	xosgbpb_write(file, data, size, unwritten) \
 -	(os_error*) _swix(OS_GBPB, _IN(0)|_IN(1)|_IN(2)|_IN(3)|_IN(4)|_OUT(3), \
 -		OSGBPB_WriteAt, \
 -		file, \
 -		data, \
 -		size, \
 -		unwritten)
 -
 -#define	osgbpb_write(file, data, size) \
 -	_swi(OS_GBPB, _IN(0)|_IN(1)|_IN(2)|_IN(3)|_RETURN(3), \
 -		OSGBPB_Write, \
 -		file, \
 -		data, \
 -		size)
 -
 -extern os_error *xosgbpb_read (os_f file,
 -      byte *buffer,
 -      int size,
 -      int *unread);
 -extern int osgbpb_read (os_f file,
 -      byte *buffer,
 -      int size);
 -
 -#define	xosgbpb_read(file, buffer, size, unread) \
 -	(os_error*) _swix(OS_GBPB, _IN(0)|_IN(1)|_IN(2)|_IN(3)|_OUT(3), \
 -		OSGBPB_Read, \
 -		file, \
 -		buffer, \
 -		size, \
 -		unread)
 -
 -#define	osgbpb_read(file, buffer, size) \
 -	_swi(OS_GBPB, _IN(0)|_IN(1)|_IN(2)|_IN(3)|_RETURN(3), \
 -		OSGBPB_Read, \
 -		file, \
 -		buffer, \
 -		size)
 -
 -/* From oslib:osfind.h */
 -#undef  OS_Find
 -#define OS_Find                                 0xD
 -#undef  OSFind_Openin
 -#define OSFind_Openin                           0x40
 -#undef  OSFind_Openout
 -#define OSFind_Openout                          0x80
 -#undef  OSFind_Openup
 -#define OSFind_Openup                           0xC0
 -#undef  OSFind_Close
 -#define OSFind_Close                            0x0
 -
 -#define	xosfind_open(reason, file_name, path, file) \
 -	(os_error*) _swix(OS_Find, _IN(0)|_IN(1)|_IN(2)|_OUT(0), \
 -		reason, file_name, path, file)
 -
 -#define	osfind_open(reason, file_name, path) \
 -	(os_f) _swi(OS_Find, _IN(0)|_IN(1)|_IN(2)|_RETURN(0), \
 -		reason, file_name, path)
 -
 -extern os_error *xosfind_openin (bits flags,
 -      char *file_name,
 -      char *path,
 -      os_f *file);
 -extern os_f osfind_openin (bits flags,
 -      char *file_name,
 -      char *path);
 -
 -#define	xosfind_openin(flags, file_name, path, file) \
 -	xosfind_open(flags | OSFind_Openin, file_name, path, file)
 -
 -#define	osfind_openin(flags, file_name, path) \
 -	osfind_open(flags | OSFind_Openin, file_name, path)
 -
 -extern os_error *xosfind_openout (bits flags,
 -      char *file_name,
 -      char *path,
 -      os_f *file);
 -extern os_f osfind_openout (bits flags,
 -      char *file_name,
 -      char *path);
 -
 -#define	xosfind_openout(flags, file_name, path, file) \
 -	xosfind_open(flags | OSFind_Openout, file_name, path, file)
 -
 -#define	osfind_openout(flags, file_name, path) \
 -	osfind_open(flags | OSFind_Openout, file_name, path)
 -
 -extern os_error *xosfind_openup (bits flags,
 -      char *file_name,
 -      char *path,
 -      os_f *file);
 -extern os_f osfind_openup (bits flags,
 -      char *file_name,
 -      char *path);
 -
 -#define	xosfind_openup(flags, file_name, path, file) \
 -	xosfind_open(flags | OSFind_Openup, file_name, path, file)
 -
 -#define	osfind_openup(flags, file_name, path) \
 -	osfind_open(flags | OSFind_Openup, file_name, path)
 -
 -extern os_error *xosfind_close (os_f file);
 -extern void osfind_close (os_f file);
 -
 -#define	xosfind_close(file) \
 -	(os_error*) _swix(OS_Find, _IN(0)|_IN(1), \
 -		OSFind_Close, \
 -		file)
 -
 -#define	osfind_close(file) \
 -	(void) _swi(OS_Find, _IN(0)|_IN(1), \
 -		OSFind_Close, \
 -		file)
 -
 -/* From oslib:osargs.h */
 -#undef  OS_Args
 -#define OS_Args                                 0x9
 -#undef  OSArgs_ReadPtr
 -#define OSArgs_ReadPtr                          0x0
 -#undef  OSArgs_SetPtr
 -#define OSArgs_SetPtr                           0x1
 -#undef  OSArgs_ReadExt
 -#define OSArgs_ReadExt                          0x2
 -
 -extern os_error *xosargs_read_ptr (os_f file,
 -      int *ptr);
 -extern int osargs_read_ptr (os_f file);
 -
 -#define	xosargs_read_ptr(file, ptr) \
 -	(os_error*) _swix(OS_Args, _IN(0)|_IN(1)|_OUT(2), \
 -		OSArgs_ReadPtr, \
 -		file, \
 -		ptr)
 -
 -#define	osargs_read_ptr(file) \
 -	_swi(OS_Args, _IN(0)|_IN(1)|_RETURN(2), \
 -		OSArgs_ReadPtr, \
 -		file)
 -
 -extern os_error *xosargs_set_ptr (os_f file,
 -      int ptr);
 -extern void osargs_set_ptr (os_f file,
 -      int ptr);
 -
 -#define	xosargs_set_ptr(file, ptr) \
 -	(os_error*) _swix(OS_Args, _IN(0)|_IN(1)|_IN(2), \
 -		OSArgs_SetPtr, \
 -		file, \
 -		ptr)
 -
 -#define	osargs_set_ptr(file, ptr) \
 -	(void) _swi(OS_Args, _IN(0)|_IN(1)|_IN(2), \
 -		OSArgs_SetPtr, \
 -		file, \
 -		ptr)
 -
 -extern os_error *xosargs_read_ext (os_f file,
 -      int *ext);
 -extern int osargs_read_ext (os_f file);
 -
 -#define	xosargs_read_ext(file, ext) \
 -	(os_error*) _swix(OS_Args, _IN(0)|_IN(1)|_OUT(2), \
 -		OSArgs_ReadExt, \
 -		file, \
 -		ext)
 -
 -#define	osargs_read_ext(file) \
 -	_swi(OS_Args, _IN(0)|_IN(1)|_RETURN(2), \
 -		OSArgs_ReadExt, \
 -		file)
 -
 -/* OSLIB EMULATION ENDS */
 -
 -#endif
 -
 -#ifndef __osfcn_h
 -/* Will be set or not during tiffcomp.h */
 -/* You get this to compile under C++? Please say how! */
 -
 -extern int open(const char* name, int flags, int mode)
 -{
 -	/* From what I can tell, should return <0 for failure */
 -	os_error* e = (os_error*) 1; /* Cheeky way to use a pointer eh? :-) */
 -	os_f file = (os_f) -1;
 -
 -	flags = flags;
 -
 -	switch(mode)
 -	{
 -		case O_RDONLY:
 -		{
 -			e = xosfind_openin(SKIP, name, SKIP, &file);
 -			break;
 -		}
 -		case O_WRONLY:
 -		case O_RDWR|O_CREAT:
 -		case O_RDWR|O_CREAT|O_TRUNC:
 -		{
 -			e = xosfind_openout(SKIP, name, SKIP, &file);
 -			break;
 -		}
 -		case O_RDWR:
 -		{
 -			e = xosfind_openup(SKIP, name, SKIP, &file);
 -			break;
 -		}
 -	}
 -	if (e)
 -	{
 -		file = (os_f) -1;
 -	}
 -	return (file);
 -}
 -
 -extern int close(int fd)
 -{
 -	return ((int) xosfind_close((os_f) fd));
 -}
 -
 -extern int write(int fd, const char *buf, int nbytes)
 -{
 -	/* Returns number of bytes written */
 -	return (nbytes - osgbpb_write((os_f) fd, (const byte*) buf, nbytes));
 -}
 -
 -extern int read(int fd, char *buf, int nbytes)
 -{
 -	/* Returns number of bytes read */
 -	return (nbytes - osgbpb_read((os_f) fd, (byte*) buf, nbytes));
 -}
 -
 -extern off_t lseek(int fd, off_t offset, int whence)
 -{
 -	int absolute = 0;
 -
 -	switch (whence)
 -	{
 -		case SEEK_SET:
 -		{
 -			absolute = (int) offset;
 -			break;
 -		}
 -		case SEEK_CUR:
 -		{
 -			absolute = osargs_read_ptr((os_f) fd) + (int) offset;
 -			break;
 -		}
 -		case SEEK_END:
 -		{
 -			absolute = osargs_read_ext((os_f) fd) + (int) offset;
 -			break;
 -		}
 -	}
 -
 -	osargs_set_ptr((os_f) fd, absolute);
 -
 -	return ((off_t) osargs_read_ptr((os_f) fd));
 -}
 -#endif
 -
 -static tsize_t
 -_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return ((tsize_t) read((int) fd, buf, (size_t) size));
 -}
 -
 -static tsize_t
 -_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return ((tsize_t) write((int) fd, buf, (size_t) size));
 -}
 -
 -static toff_t
 -_tiffSeekProc(thandle_t fd, toff_t off, int whence)
 -{
 -	return ((toff_t) lseek((int) fd, (off_t) off, whence));
 -}
 -
 -static int
 -_tiffCloseProc(thandle_t fd)
 -{
 -	return (close((int) fd));
 -}
 -
 -static toff_t
 -_tiffSizeProc(thandle_t fd)
 -{
 -	return (lseek((int) fd, SEEK_END, SEEK_SET));
 -}
 -
 -#ifdef HAVE_MMAP
 -#error "I didn't know Acorn had that!"
 -#endif
 -
 -/* !HAVE_MMAP */
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	(void) fd; (void) pbase; (void) psize;
 -	return (0);
 -}
 -
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -	(void) fd; (void) base; (void) size;
 -}
 -
 -/*
 - * Open a TIFF file descriptor for read/writing.
 - */
 -TIFF*
 -TIFFFdOpen(int fd, const char* name, const char* mode)
 -{
 -	TIFF* tif;
 -
 -	tif = TIFFClientOpen(name, mode,
 -		(thandle_t) fd,
 -		_tiffReadProc, _tiffWriteProc,
 -		_tiffSeekProc, _tiffCloseProc, _tiffSizeProc,
 -		_tiffMapProc, _tiffUnmapProc);
 -	if (tif)
 -	{
 -		tif->tif_fd = fd;
 -	}
 -	return (tif);
 -}
 -
 -/*
 - * Open a TIFF file for read/writing.
 - */
 -TIFF*
 -TIFFOpen(const char* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpen";
 -	int m, fd;
 -
 -	m = _TIFFgetMode(mode, module);
 -
 -	if (m == -1)
 -	{
 -		return ((TIFF*) 0);
 -	}
 -
 -	fd = open(name, 0, m);
 -
 -	if (fd < 0)
 -	{
 -		TIFFErrorExt(0, module, "%s: Cannot open", name);
 -		return ((TIFF *)0);
 -	}
 -	return (TIFFFdOpen(fd, name, mode));
 -}
 -
 -void*
 -_TIFFmalloc(tsize_t s)
 -{
 -	return (malloc((size_t) s));
 -}
 -
 -void
 -_TIFFfree(tdata_t p)
 -{
 -	free(p);
 -}
 -
 -void*
 -_TIFFrealloc(tdata_t p, tsize_t s)
 -{
 -	return (realloc(p, (size_t) s));
 -}
 -
 -void
 -_TIFFmemset(tdata_t p, int v, tsize_t c)
 -{
 -	memset(p, v, (size_t) c);
 -}
 -
 -void
 -_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
 -{
 -	memcpy(d, s, (size_t) c);
 -}
 -
 -int
 -_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
 -{
 -	return (memcmp(p1, p2, (size_t) c));
 -}
 -
 -static void
 -acornWarningHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -	{
 -		fprintf(stderr, "%s: ", module);
 -	}
 -	fprintf(stderr, "Warning, ");
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -TIFFErrorHandler _TIFFwarningHandler = acornWarningHandler;
 -
 -static void
 -acornErrorHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -	{
 -		fprintf(stderr, "%s: ", module);
 -	}
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -TIFFErrorHandler _TIFFerrorHandler = acornErrorHandler;
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_apple.c b/plugins/FreeImage/Source/LibTIFF/tif_apple.c deleted file mode 100644 index 0cd2948cb7..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_apple.c +++ /dev/null @@ -1,281 +0,0 @@ -/* $Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_apple.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library Macintosh-specific routines.
 - *
 - * These routines use only Toolbox and high-level File Manager traps.
 - * They make no calls to the THINK C "unix" compatibility library.  Also,
 - * malloc is not used directly but it is still referenced internally by
 - * the ANSI library in rare cases.  Heap fragmentation by the malloc ring
 - * buffer is therefore minimized.
 - *
 - * O_RDONLY and O_RDWR are treated identically here.  The tif_mode flag is
 - * checked in TIFFWriteCheck().
 - *
 - * Create below fills in a blank creator signature and sets the file type
 - * to 'TIFF'.  It is much better for the application to do this by Create'ing
 - * the file first and TIFFOpen'ing it later.
 - * ---------
 - * This code has been "Carbonized", and may not work with older MacOS versions.
 - * If so, grab the tif_apple.c out of an older libtiff distribution, like
 - * 3.5.5 from www.libtiff.org.
 - */
 -
 -#include "tiffiop.h"
 -#include <Errors.h>
 -#include <Files.h>
 -#include <Memory.h>
 -#include <Script.h>
 -
 -#if defined(__PPCC__) || defined(__SC__) || defined(__MRC__) || defined(applec)
 -#define	CtoPstr	c2pstr
 -#endif
 -
 -static tsize_t
 -_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return (FSRead((short) fd, (long*) &size, (char*) buf) == noErr ?
 -	    size : (tsize_t) -1);
 -}
 -
 -static tsize_t
 -_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return (FSWrite((short) fd, (long*) &size, (char*) buf) == noErr ?
 -	    size : (tsize_t) -1);
 -}
 -
 -static toff_t
 -_tiffSeekProc(thandle_t fd, toff_t off, int whence)
 -{
 -	long fpos, size;
 -
 -	if (GetEOF((short) fd, &size) != noErr)
 -		return EOF;
 -	(void) GetFPos((short) fd, &fpos);
 -
 -	switch (whence) {
 -	case SEEK_CUR:
 -		if (off + fpos > size)
 -			SetEOF((short) fd, off + fpos);
 -		if (SetFPos((short) fd, fsFromMark, off) != noErr)
 -			return EOF;
 -		break;
 -	case SEEK_END:
 -		if (off > 0)
 -			SetEOF((short) fd, off + size);
 -		if (SetFPos((short) fd, fsFromStart, off + size) != noErr)
 -			return EOF;
 -		break;
 -	case SEEK_SET:
 -		if (off > size)
 -			SetEOF((short) fd, off);
 -		if (SetFPos((short) fd, fsFromStart, off) != noErr)
 -			return EOF;
 -		break;
 -	}
 -
 -	return (toff_t)(GetFPos((short) fd, &fpos) == noErr ? fpos : EOF);
 -}
 -
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	return (0);
 -}
 -
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -}
 -
 -static int
 -_tiffCloseProc(thandle_t fd)
 -{
 -	return (FSClose((short) fd));
 -}
 -
 -static toff_t
 -_tiffSizeProc(thandle_t fd)
 -{
 -	long size;
 -
 -	if (GetEOF((short) fd, &size) != noErr) {
 -		TIFFErrorExt(fd, "_tiffSizeProc", "%s: Cannot get file size");
 -		return (-1L);
 -	}
 -	return ((toff_t) size);
 -}
 -
 -/*
 - * Open a TIFF file descriptor for read/writing.
 - */
 -TIFF*
 -TIFFFdOpen(int fd, const char* name, const char* mode)
 -{
 -	TIFF* tif;
 -
 -	tif = TIFFClientOpen(name, mode, (thandle_t) fd,
 -	    _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc,
 -	    _tiffSizeProc, _tiffMapProc, _tiffUnmapProc);
 -	if (tif)
 -		tif->tif_fd = fd;
 -	return (tif);
 -}
 -
 -static void ourc2pstr( char* inString )
 -{
 -	int	sLen = strlen( inString );
 -	BlockMoveData( inString, &inString[1], sLen );
 -	inString[0] = sLen;
 -}
 -
 -/*
 - * Open a TIFF file for read/writing.
 - */
 -TIFF*
 -TIFFOpen(const char* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpen";
 -	Str255 pname;
 -	FInfo finfo;
 -	short fref;
 -	OSErr err;
 -	FSSpec	fSpec;
 -
 -	strcpy((char*) pname, name);
 -	ourc2pstr((char*) pname);
 -	
 -	err = FSMakeFSSpec( 0, 0, pname, &fSpec );
 -
 -	switch (_TIFFgetMode(mode, module)) {
 -	default:
 -		return ((TIFF*) 0);
 -	case O_RDWR | O_CREAT | O_TRUNC:
 -		if (FSpGetFInfo(&fSpec, &finfo) == noErr)
 -			FSpDelete(&fSpec);
 -		/* fall through */
 -	case O_RDWR | O_CREAT:
 -		if ((err = FSpGetFInfo(&fSpec, &finfo)) == fnfErr) {
 -			if (FSpCreate(&fSpec, '    ', 'TIFF', smSystemScript) != noErr)
 -				goto badCreate;
 -			if (FSpOpenDF(&fSpec, fsRdWrPerm, &fref) != noErr)
 -				goto badOpen;
 -		} else if (err == noErr) {
 -			if (FSpOpenDF(&fSpec, fsRdWrPerm, &fref) != noErr)
 -				goto badOpen;
 -		} else
 -			goto badOpen;
 -		break;
 -	case O_RDONLY:
 -		if (FSpOpenDF(&fSpec, fsRdPerm, &fref) != noErr)
 -			goto badOpen;
 -		break;
 -	case O_RDWR:
 -		if (FSpOpenDF(&fSpec, fsRdWrPerm, &fref) != noErr)
 -			goto badOpen;
 -		break;
 -	}
 -	return (TIFFFdOpen((int) fref, name, mode));
 -badCreate:
 -	TIFFErrorExt(0, module, "%s: Cannot create", name);
 -	return ((TIFF*) 0);
 -badOpen:
 -	TIFFErrorExt(0, module, "%s: Cannot open", name);
 -	return ((TIFF*) 0);
 -}
 -
 -void
 -_TIFFmemset(tdata_t p, int v, tsize_t c)
 -{
 -	memset(p, v, (size_t) c);
 -}
 -
 -void
 -_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
 -{
 -	memcpy(d, s, (size_t) c);
 -}
 -
 -int
 -_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
 -{
 -	return (memcmp(p1, p2, (size_t) c));
 -}
 -
 -tdata_t
 -_TIFFmalloc(tsize_t s)
 -{
 -	return (NewPtr((size_t) s));
 -}
 -
 -void
 -_TIFFfree(tdata_t p)
 -{
 -	DisposePtr(p);
 -}
 -
 -tdata_t
 -_TIFFrealloc(tdata_t p, tsize_t s)
 -{
 -	Ptr n = p;
 -
 -	SetPtrSize(p, (size_t) s);
 -	if (MemError() && (n = NewPtr((size_t) s)) != NULL) {
 -		BlockMove(p, n, GetPtrSize(p));
 -		DisposePtr(p);
 -	}
 -	return ((tdata_t) n);
 -}
 -
 -static void
 -appleWarningHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	fprintf(stderr, "Warning, ");
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -TIFFErrorHandler _TIFFwarningHandler = appleWarningHandler;
 -
 -static void
 -appleErrorHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -TIFFErrorHandler _TIFFerrorHandler = appleErrorHandler;
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_atari.c b/plugins/FreeImage/Source/LibTIFF/tif_atari.c deleted file mode 100644 index 62453a1d93..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_atari.c +++ /dev/null @@ -1,250 +0,0 @@ -/* "$Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_atari.c,v 1.37 2011/04/10 17:14:09 drolon Exp $" */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library ATARI-specific Routines.
 - */
 -#include "tiffiop.h"
 -#if defined(__TURBOC__)
 -#include <tos.h>
 -#include <stdio.h>
 -#else
 -#include <osbind.h>
 -#include <fcntl.h>
 -#endif
 -
 -#ifndef O_ACCMODE
 -#define O_ACCMODE 3
 -#endif
 -
 -#include <errno.h>
 -
 -#define AEFILNF   -33
 -
 -static tsize_t
 -_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	long r;
 -
 -	r = Fread((int) fd, size, buf);
 -	if (r < 0) {
 -		errno = (int)-r;
 -		r = -1;
 -	}
 -	return r;
 -}
 -
 -static tsize_t
 -_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	long r;
 -
 -	r = Fwrite((int) fd, size, buf);
 -	if (r < 0) {
 -		errno = (int)-r;
 -		r = -1;
 -	}
 -	return r;
 -}
 -
 -static toff_t
 -_tiffSeekProc(thandle_t fd, off_t off, int whence)
 -{
 -	char buf[256];
 -	long current_off, expected_off, new_off;
 -
 -	if (whence == SEEK_END || off <= 0)
 -		return Fseek(off, (int) fd, whence);
 -	current_off = Fseek(0, (int) fd, SEEK_CUR); /* find out where we are */
 -	if (whence == SEEK_SET)
 -		expected_off = off;
 -	else
 -		expected_off = off + current_off;
 -	new_off = Fseek(off, (int) fd, whence);
 -	if (new_off == expected_off)
 -		return new_off;
 -	/* otherwise extend file -- zero filling the hole */
 -	if (new_off < 0)            /* error? */
 -		new_off = Fseek(0, (int) fd, SEEK_END); /* go to eof */
 -	_TIFFmemset(buf, 0, sizeof(buf));
 -	while (expected_off > new_off) {
 -		off = expected_off - new_off;
 -		if (off > sizeof(buf))
 -			off = sizeof(buf);
 -		if ((current_off = Fwrite((int) fd, off, buf)) != off)
 -			return (current_off > 0) ?
 -			    new_off + current_off : new_off;
 -		new_off += off;
 -	}
 -	return new_off;
 -}
 -
 -static int
 -_tiffCloseProc(thandle_t fd)
 -{
 -	long r;
 -
 -	r = Fclose((int) fd);
 -	if (r < 0) {
 -		errno = (int)-r;
 -		r = -1;
 -	}
 -	return (int)r;
 -}
 -
 -static toff_t
 -_tiffSizeProc(thandle_t fd)
 -{
 -	long pos, eof;
 -
 -	pos = Fseek(0, (int) fd, SEEK_CUR);
 -	eof = Fseek(0, (int) fd, SEEK_END);
 -	Fseek(pos, (int) fd, SEEK_SET);
 -	return eof;
 -}
 -
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	return (0);
 -}
 -
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -}
 -
 -/*
 -* Open a TIFF file descriptor for read/writing.
 -*/
 -TIFF*
 -TIFFFdOpen(int fd, const char* name, const char* mode)
 -{
 -	TIFF* tif;
 -
 -	tif = TIFFClientOpen(name, mode,
 -		(thandle_t) fd,
 -		_tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc,
 -		_tiffSizeProc, _tiffMapProc, _tiffUnmapProc);
 -	if (tif)
 -		tif->tif_fd = fd;
 -	return (tif);
 -}
 -
 -/*
 -* Open a TIFF file for read/writing.
 -*/
 -TIFF*
 -TIFFOpen(const char* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpen";
 -	int m;
 -	long fd;
 -
 -	m = _TIFFgetMode(mode, module);
 -	if (m == -1)
 -		return ((TIFF*)0);
 -	if (m & O_TRUNC) {
 -		fd = Fcreate(name, 0);
 -	} else {
 -		fd = Fopen(name, m & O_ACCMODE);
 -		if (fd == AEFILNF && m & O_CREAT)
 -			fd = Fcreate(name, 0);
 -	}
 -	if (fd < 0)
 -		errno = (int)fd;
 -	if (fd < 0) {
 -		TIFFErrorExt(0, module, "%s: Cannot open", name);
 -		return ((TIFF*)0);
 -	}
 -	return (TIFFFdOpen(fd, name, mode));
 -}
 -
 -#include <stdlib.h>
 -
 -tdata_t
 -_TIFFmalloc(tsize_t s)
 -{
 -	return (malloc((size_t) s));
 -}
 -
 -void
 -_TIFFfree(tdata_t p)
 -{
 -	free(p);
 -}
 -
 -tdata_t
 -_TIFFrealloc(tdata_t p, tsize_t s)
 -{
 -	return (realloc(p, (size_t) s));
 -}
 -
 -void
 -_TIFFmemset(tdata_t p, int v, size_t c)
 -{
 -	memset(p, v, (size_t) c);
 -}
 -
 -void
 -_TIFFmemcpy(tdata_t d, const tdata_t s, size_t c)
 -{
 -	memcpy(d, s, (size_t) c);
 -}
 -
 -int
 -_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
 -{
 -	return (memcmp(p1, p2, (size_t) c));
 -}
 -
 -static void
 -atariWarningHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	fprintf(stderr, "Warning, ");
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -TIFFErrorHandler _TIFFwarningHandler = atariWarningHandler;
 -
 -static void
 -atariErrorHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -TIFFErrorHandler _TIFFerrorHandler = atariErrorHandler;
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_aux.c b/plugins/FreeImage/Source/LibTIFF/tif_aux.c deleted file mode 100644 index 92df69bd1a..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_aux.c +++ /dev/null @@ -1,290 +0,0 @@ -/* $Id: tif_aux.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1991-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Auxiliary Support Routines.
 - */
 -#include "tiffiop.h"
 -#include "tif_predict.h"
 -#include <math.h>
 -
 -tdata_t
 -_TIFFCheckRealloc(TIFF* tif, tdata_t buffer,
 -		  size_t nmemb, size_t elem_size, const char* what)
 -{
 -	tdata_t cp = NULL;
 -	tsize_t	bytes = nmemb * elem_size;
 -
 -	/*
 -	 * XXX: Check for integer overflow.
 -	 */
 -	if (nmemb && elem_size && bytes / elem_size == nmemb)
 -		cp = _TIFFrealloc(buffer, bytes);
 -
 -	if (cp == NULL)
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Failed to allocate memory for %s "
 -			     "(%ld elements of %ld bytes each)",
 -			     what,(long) nmemb, (long) elem_size);
 -
 -	return cp;
 -}
 -
 -tdata_t
 -_TIFFCheckMalloc(TIFF* tif, size_t nmemb, size_t elem_size, const char* what)
 -{
 -	return _TIFFCheckRealloc(tif, NULL, nmemb, elem_size, what);
 -}
 -
 -static int
 -TIFFDefaultTransferFunction(TIFFDirectory* td)
 -{
 -	uint16 **tf = td->td_transferfunction;
 -	tsize_t i, n, nbytes;
 -
 -	tf[0] = tf[1] = tf[2] = 0;
 -	if (td->td_bitspersample >= sizeof(tsize_t) * 8 - 2)
 -		return 0;
 -
 -	n = 1<<td->td_bitspersample;
 -	nbytes = n * sizeof (uint16);
 -	if (!(tf[0] = (uint16 *)_TIFFmalloc(nbytes)))
 -		return 0;
 -	tf[0][0] = 0;
 -	for (i = 1; i < n; i++) {
 -		double t = (double)i/((double) n-1.);
 -		tf[0][i] = (uint16)floor(65535.*pow(t, 2.2) + .5);
 -	}
 -
 -	if (td->td_samplesperpixel - td->td_extrasamples > 1) {
 -		if (!(tf[1] = (uint16 *)_TIFFmalloc(nbytes)))
 -			goto bad;
 -		_TIFFmemcpy(tf[1], tf[0], nbytes);
 -		if (!(tf[2] = (uint16 *)_TIFFmalloc(nbytes)))
 -			goto bad;
 -		_TIFFmemcpy(tf[2], tf[0], nbytes);
 -	}
 -	return 1;
 -
 -bad:
 -	if (tf[0])
 -		_TIFFfree(tf[0]);
 -	if (tf[1])
 -		_TIFFfree(tf[1]);
 -	if (tf[2])
 -		_TIFFfree(tf[2]);
 -	tf[0] = tf[1] = tf[2] = 0;
 -	return 0;
 -}
 -
 -static int
 -TIFFDefaultRefBlackWhite(TIFFDirectory* td)
 -{
 -	int i;
 -
 -	if (!(td->td_refblackwhite = (float *)_TIFFmalloc(6*sizeof (float))))
 -		return 0;
 -        if (td->td_photometric == PHOTOMETRIC_YCBCR) {
 -		/*
 -		 * YCbCr (Class Y) images must have the ReferenceBlackWhite
 -		 * tag set. Fix the broken images, which lacks that tag.
 -		 */
 -		td->td_refblackwhite[0] = 0.0F;
 -		td->td_refblackwhite[1] = td->td_refblackwhite[3] =
 -			td->td_refblackwhite[5] = 255.0F;
 -		td->td_refblackwhite[2] = td->td_refblackwhite[4] = 128.0F;
 -	} else {
 -		/*
 -		 * Assume RGB (Class R)
 -		 */
 -		for (i = 0; i < 3; i++) {
 -		    td->td_refblackwhite[2*i+0] = 0;
 -		    td->td_refblackwhite[2*i+1] =
 -			    (float)((1L<<td->td_bitspersample)-1L);
 -		}
 -	}
 -	return 1;
 -}
 -
 -/*
 - * Like TIFFGetField, but return any default
 - * value if the tag is not present in the directory.
 - *
 - * NB:	We use the value in the directory, rather than
 - *	explcit values so that defaults exist only one
 - *	place in the library -- in TIFFDefaultDirectory.
 - */
 -int
 -TIFFVGetFieldDefaulted(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	if (TIFFVGetField(tif, tag, ap))
 -		return (1);
 -	switch (tag) {
 -	case TIFFTAG_SUBFILETYPE:
 -		*va_arg(ap, uint32 *) = td->td_subfiletype;
 -		return (1);
 -	case TIFFTAG_BITSPERSAMPLE:
 -		*va_arg(ap, uint16 *) = td->td_bitspersample;
 -		return (1);
 -	case TIFFTAG_THRESHHOLDING:
 -		*va_arg(ap, uint16 *) = td->td_threshholding;
 -		return (1);
 -	case TIFFTAG_FILLORDER:
 -		*va_arg(ap, uint16 *) = td->td_fillorder;
 -		return (1);
 -	case TIFFTAG_ORIENTATION:
 -		*va_arg(ap, uint16 *) = td->td_orientation;
 -		return (1);
 -	case TIFFTAG_SAMPLESPERPIXEL:
 -		*va_arg(ap, uint16 *) = td->td_samplesperpixel;
 -		return (1);
 -	case TIFFTAG_ROWSPERSTRIP:
 -		*va_arg(ap, uint32 *) = td->td_rowsperstrip;
 -		return (1);
 -	case TIFFTAG_MINSAMPLEVALUE:
 -		*va_arg(ap, uint16 *) = td->td_minsamplevalue;
 -		return (1);
 -	case TIFFTAG_MAXSAMPLEVALUE:
 -		*va_arg(ap, uint16 *) = td->td_maxsamplevalue;
 -		return (1);
 -	case TIFFTAG_PLANARCONFIG:
 -		*va_arg(ap, uint16 *) = td->td_planarconfig;
 -		return (1);
 -	case TIFFTAG_RESOLUTIONUNIT:
 -		*va_arg(ap, uint16 *) = td->td_resolutionunit;
 -		return (1);
 -	case TIFFTAG_PREDICTOR:
 -                {
 -			TIFFPredictorState* sp = (TIFFPredictorState*) tif->tif_data;
 -			*va_arg(ap, uint16*) = (uint16) sp->predictor;
 -			return 1;
 -                }
 -	case TIFFTAG_DOTRANGE:
 -		*va_arg(ap, uint16 *) = 0;
 -		*va_arg(ap, uint16 *) = (1<<td->td_bitspersample)-1;
 -		return (1);
 -	case TIFFTAG_INKSET:
 -		*va_arg(ap, uint16 *) = INKSET_CMYK;
 -		return 1;
 -	case TIFFTAG_NUMBEROFINKS:
 -		*va_arg(ap, uint16 *) = 4;
 -		return (1);
 -	case TIFFTAG_EXTRASAMPLES:
 -		*va_arg(ap, uint16 *) = td->td_extrasamples;
 -		*va_arg(ap, uint16 **) = td->td_sampleinfo;
 -		return (1);
 -	case TIFFTAG_MATTEING:
 -		*va_arg(ap, uint16 *) =
 -		    (td->td_extrasamples == 1 &&
 -		     td->td_sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA);
 -		return (1);
 -	case TIFFTAG_TILEDEPTH:
 -		*va_arg(ap, uint32 *) = td->td_tiledepth;
 -		return (1);
 -	case TIFFTAG_DATATYPE:
 -		*va_arg(ap, uint16 *) = td->td_sampleformat-1;
 -		return (1);
 -	case TIFFTAG_SAMPLEFORMAT:
 -		*va_arg(ap, uint16 *) = td->td_sampleformat;
 -                return(1);
 -	case TIFFTAG_IMAGEDEPTH:
 -		*va_arg(ap, uint32 *) = td->td_imagedepth;
 -		return (1);
 -	case TIFFTAG_YCBCRCOEFFICIENTS:
 -		{
 -			/* defaults are from CCIR Recommendation 601-1 */
 -			static float ycbcrcoeffs[] = { 0.299f, 0.587f, 0.114f };
 -			*va_arg(ap, float **) = ycbcrcoeffs;
 -			return 1;
 -		}
 -	case TIFFTAG_YCBCRSUBSAMPLING:
 -		*va_arg(ap, uint16 *) = td->td_ycbcrsubsampling[0];
 -		*va_arg(ap, uint16 *) = td->td_ycbcrsubsampling[1];
 -		return (1);
 -	case TIFFTAG_YCBCRPOSITIONING:
 -		*va_arg(ap, uint16 *) = td->td_ycbcrpositioning;
 -		return (1);
 -	case TIFFTAG_WHITEPOINT:
 -		{
 -			static float whitepoint[2];
 -
 -			/* TIFF 6.0 specification tells that it is no default
 -			   value for the WhitePoint, but AdobePhotoshop TIFF
 -			   Technical Note tells that it should be CIE D50. */
 -			whitepoint[0] =	D50_X0 / (D50_X0 + D50_Y0 + D50_Z0);
 -			whitepoint[1] =	D50_Y0 / (D50_X0 + D50_Y0 + D50_Z0);
 -			*va_arg(ap, float **) = whitepoint;
 -			return 1;
 -		}
 -	case TIFFTAG_TRANSFERFUNCTION:
 -		if (!td->td_transferfunction[0] &&
 -		    !TIFFDefaultTransferFunction(td)) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "No space for \"TransferFunction\" tag");
 -			return (0);
 -		}
 -		*va_arg(ap, uint16 **) = td->td_transferfunction[0];
 -		if (td->td_samplesperpixel - td->td_extrasamples > 1) {
 -			*va_arg(ap, uint16 **) = td->td_transferfunction[1];
 -			*va_arg(ap, uint16 **) = td->td_transferfunction[2];
 -		}
 -		return (1);
 -	case TIFFTAG_REFERENCEBLACKWHITE:
 -		if (!td->td_refblackwhite && !TIFFDefaultRefBlackWhite(td))
 -			return (0);
 -		*va_arg(ap, float **) = td->td_refblackwhite;
 -		return (1);
 -	}
 -	return 0;
 -}
 -
 -/*
 - * Like TIFFGetField, but return any default
 - * value if the tag is not present in the directory.
 - */
 -int
 -TIFFGetFieldDefaulted(TIFF* tif, ttag_t tag, ...)
 -{
 -	int ok;
 -	va_list ap;
 -
 -	va_start(ap, tag);
 -	ok =  TIFFVGetFieldDefaulted(tif, tag, ap);
 -	va_end(ap);
 -	return (ok);
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_close.c b/plugins/FreeImage/Source/LibTIFF/tif_close.c deleted file mode 100644 index 03a8847e84..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_close.c +++ /dev/null @@ -1,126 +0,0 @@ -/* $Id: tif_close.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - */
 -#include "tiffiop.h"
 -
 -/************************************************************************/
 -/*                            TIFFCleanup()                             */
 -/************************************************************************/
 -
 -/**
 - * Auxiliary function to free the TIFF structure. Given structure will be
 - * completetly freed, so you should save opened file handle and pointer
 - * to the close procedure in external variables before calling
 - * _TIFFCleanup(), if you will need these ones to close the file.
 - * 
 - * @param tif A TIFF pointer.
 - */
 -
 -void
 -TIFFCleanup(TIFF* tif)
 -{
 -	if (tif->tif_mode != O_RDONLY)
 -	    /*
 -	     * Flush buffered data and directory (if dirty).
 -	     */
 -	    TIFFFlush(tif);
 -	(*tif->tif_cleanup)(tif);
 -	TIFFFreeDirectory(tif);
 -
 -	if (tif->tif_dirlist)
 -		_TIFFfree(tif->tif_dirlist);
 -
 -	/* Clean up client info links */
 -	while( tif->tif_clientinfo )
 -	{
 -		TIFFClientInfoLink *link = tif->tif_clientinfo;
 -
 -		tif->tif_clientinfo = link->next;
 -		_TIFFfree( link->name );
 -		_TIFFfree( link );
 -	}
 -
 -	if (tif->tif_rawdata && (tif->tif_flags&TIFF_MYBUFFER))
 -		_TIFFfree(tif->tif_rawdata);
 -	if (isMapped(tif))
 -		TIFFUnmapFileContents(tif, tif->tif_base, tif->tif_size);
 -
 -	/* Clean up custom fields */
 -	if (tif->tif_nfields > 0)
 -	{
 -		size_t  i;
 -
 -	    for (i = 0; i < tif->tif_nfields; i++) 
 -	    {
 -		TIFFFieldInfo *fld = tif->tif_fieldinfo[i];
 -		if (fld->field_bit == FIELD_CUSTOM && 
 -		    strncmp("Tag ", fld->field_name, 4) == 0) 
 -		{
 -		    _TIFFfree(fld->field_name);
 -		    _TIFFfree(fld);
 -		}
 -	    }   
 -	  
 -	    _TIFFfree(tif->tif_fieldinfo);
 -	}
 -
 -	_TIFFfree(tif);
 -}
 -
 -/************************************************************************/
 -/*                            TIFFClose()                               */
 -/************************************************************************/
 -
 -/**
 - * Close a previously opened TIFF file.
 - *
 - * TIFFClose closes a file that was previously opened with TIFFOpen().
 - * Any buffered data are flushed to the file, including the contents of
 - * the current directory (if modified); and all resources are reclaimed.
 - * 
 - * @param tif A TIFF pointer.
 - */
 -
 -void
 -TIFFClose(TIFF* tif)
 -{
 -	TIFFCloseProc closeproc = tif->tif_closeproc;
 -	thandle_t fd = tif->tif_clientdata;
 -
 -	TIFFCleanup(tif);
 -	(void) (*closeproc)(fd);
 -}
 -
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_codec.c b/plugins/FreeImage/Source/LibTIFF/tif_codec.c deleted file mode 100644 index 7876a5fc63..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_codec.c +++ /dev/null @@ -1,160 +0,0 @@ -/* $Id: tif_codec.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library
 - *
 - * Builtin Compression Scheme Configuration Support.
 - */
 -#include "tiffiop.h"
 -
 -static	int NotConfigured(TIFF*, int);
 -
 -#ifndef	LZW_SUPPORT
 -#define	TIFFInitLZW		NotConfigured
 -#endif
 -#ifndef	PACKBITS_SUPPORT
 -#define	TIFFInitPackBits	NotConfigured
 -#endif
 -#ifndef	THUNDER_SUPPORT
 -#define	TIFFInitThunderScan	NotConfigured
 -#endif
 -#ifndef	NEXT_SUPPORT
 -#define	TIFFInitNeXT		NotConfigured
 -#endif
 -#ifndef	JPEG_SUPPORT
 -#define	TIFFInitJPEG		NotConfigured
 -#endif
 -#ifndef	OJPEG_SUPPORT
 -#define	TIFFInitOJPEG		NotConfigured
 -#endif
 -#ifndef	CCITT_SUPPORT
 -#define	TIFFInitCCITTRLE	NotConfigured
 -#define	TIFFInitCCITTRLEW	NotConfigured
 -#define	TIFFInitCCITTFax3	NotConfigured
 -#define	TIFFInitCCITTFax4	NotConfigured
 -#endif
 -#ifndef JBIG_SUPPORT
 -#define	TIFFInitJBIG		NotConfigured
 -#endif
 -#ifndef	ZIP_SUPPORT
 -#define	TIFFInitZIP		NotConfigured
 -#endif
 -#ifndef	PIXARLOG_SUPPORT
 -#define	TIFFInitPixarLog	NotConfigured
 -#endif
 -#ifndef LOGLUV_SUPPORT
 -#define TIFFInitSGILog		NotConfigured
 -#endif
 -
 -/*
 - * Compression schemes statically built into the library.
 - */
 -#ifdef VMS
 -const TIFFCodec _TIFFBuiltinCODECS[] = {
 -#else
 -TIFFCodec _TIFFBuiltinCODECS[] = {
 -#endif
 -    { "None",		COMPRESSION_NONE,	TIFFInitDumpMode },
 -    { "LZW",		COMPRESSION_LZW,	TIFFInitLZW },
 -    { "PackBits",	COMPRESSION_PACKBITS,	TIFFInitPackBits },
 -    { "ThunderScan",	COMPRESSION_THUNDERSCAN,TIFFInitThunderScan },
 -    { "NeXT",		COMPRESSION_NEXT,	TIFFInitNeXT },
 -    { "JPEG",		COMPRESSION_JPEG,	TIFFInitJPEG },
 -    { "Old-style JPEG",	COMPRESSION_OJPEG,	TIFFInitOJPEG },
 -    { "CCITT RLE",	COMPRESSION_CCITTRLE,	TIFFInitCCITTRLE },
 -    { "CCITT RLE/W",	COMPRESSION_CCITTRLEW,	TIFFInitCCITTRLEW },
 -    { "CCITT Group 3",	COMPRESSION_CCITTFAX3,	TIFFInitCCITTFax3 },
 -    { "CCITT Group 4",	COMPRESSION_CCITTFAX4,	TIFFInitCCITTFax4 },
 -    { "ISO JBIG",	COMPRESSION_JBIG,	TIFFInitJBIG },
 -    { "Deflate",	COMPRESSION_DEFLATE,	TIFFInitZIP },
 -    { "AdobeDeflate",   COMPRESSION_ADOBE_DEFLATE , TIFFInitZIP }, 
 -    { "PixarLog",	COMPRESSION_PIXARLOG,	TIFFInitPixarLog },
 -    { "SGILog",		COMPRESSION_SGILOG,	TIFFInitSGILog },
 -    { "SGILog24",	COMPRESSION_SGILOG24,	TIFFInitSGILog },
 -    { NULL,             0,                      NULL }
 -};
 -
 -static int
 -_notConfigured(TIFF* tif)
 -{
 -	const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression);
 -        char compression_code[20];
 -        
 -        sprintf( compression_code, "%d", tif->tif_dir.td_compression );
 -	TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -                     "%s compression support is not configured", 
 -                     c ? c->name : compression_code );
 -	return (0);
 -}
 -
 -static int
 -NotConfigured(TIFF* tif, int scheme)
 -{
 -    (void) scheme;
 -    
 -    tif->tif_decodestatus = FALSE;
 -    tif->tif_setupdecode = _notConfigured;
 -    tif->tif_encodestatus = FALSE;
 -    tif->tif_setupencode = _notConfigured;
 -    return (1);
 -}
 -
 -/************************************************************************/
 -/*                       TIFFIsCODECConfigured()                        */
 -/************************************************************************/
 -
 -/**
 - * Check whether we have working codec for the specific coding scheme.
 - * 
 - * @return returns 1 if the codec is configured and working. Otherwise
 - * 0 will be returned.
 - */
 -
 -int
 -TIFFIsCODECConfigured(uint16 scheme)
 -{
 -	const TIFFCodec* codec = TIFFFindCODEC(scheme);
 -
 -	if(codec == NULL) {
 -            return 0;
 -        }
 -        if(codec->init == NULL) {
 -            return 0;
 -        }
 -	if(codec->init != NotConfigured){
 -            return 1;
 -        }
 -	return 0;
 -}
 -
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_color.c b/plugins/FreeImage/Source/LibTIFF/tif_color.c deleted file mode 100644 index f0302e4bf2..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_color.c +++ /dev/null @@ -1,287 +0,0 @@ -/* $Id: tif_color.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * CIE L*a*b* to CIE XYZ and CIE XYZ to RGB conversion routines are taken
 - * from the VIPS library (http://www.vips.ecs.soton.ac.uk) with
 - * the permission of John Cupitt, the VIPS author.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Color space conversion routines.
 - */
 -
 -#include "tiffiop.h"
 -#include <math.h>
 -
 -/*
 - * Convert color value from the CIE L*a*b* 1976 space to CIE XYZ.
 - */
 -void
 -TIFFCIELabToXYZ(TIFFCIELabToRGB *cielab, uint32 l, int32 a, int32 b,
 -		float *X, float *Y, float *Z)
 -{
 -	float L = (float)l * 100.0F / 255.0F;
 -	float cby, tmp;
 -
 -	if ( L < 8.856F ) {
 -		*Y = (L * cielab->Y0) / 903.292F;
 -		cby = 7.787F * (*Y / cielab->Y0) + 16.0F / 116.0F;
 -	} else {
 -		cby = (L + 16.0F) / 116.0F;
 -		*Y = cielab->Y0 * cby * cby * cby;
 -	}
 -
 -	tmp = (float)a / 500.0F + cby;
 -	if ( tmp < 0.2069F )
 -		*X = cielab->X0 * (tmp - 0.13793F) / 7.787F;
 -	else    
 -		*X = cielab->X0 * tmp * tmp * tmp;
 -
 -	tmp = cby - (float)b / 200.0F;
 -	if ( tmp < 0.2069F )
 -		*Z = cielab->Z0 * (tmp - 0.13793F) / 7.787F;
 -	else    
 -		*Z = cielab->Z0 * tmp * tmp * tmp;
 -}
 -
 -#define RINT(R) ((uint32)((R)>0?((R)+0.5):((R)-0.5)))
 -/*
 - * Convert color value from the XYZ space to RGB.
 - */
 -void
 -TIFFXYZToRGB(TIFFCIELabToRGB *cielab, float X, float Y, float Z,
 -	     uint32 *r, uint32 *g, uint32 *b)
 -{
 -	int i;
 -	float Yr, Yg, Yb;
 -	float *matrix = &cielab->display.d_mat[0][0];
 -
 -	/* Multiply through the matrix to get luminosity values. */
 -	Yr =  matrix[0] * X + matrix[1] * Y + matrix[2] * Z;
 -	Yg =  matrix[3] * X + matrix[4] * Y + matrix[5] * Z;
 -	Yb =  matrix[6] * X + matrix[7] * Y + matrix[8] * Z;
 -
 -	/* Clip input */
 -	Yr = TIFFmax(Yr, cielab->display.d_Y0R);
 -	Yg = TIFFmax(Yg, cielab->display.d_Y0G);
 -	Yb = TIFFmax(Yb, cielab->display.d_Y0B);
 -
 -	/* Avoid overflow in case of wrong input values */
 -	Yr = TIFFmin(Yr, cielab->display.d_YCR);
 -	Yg = TIFFmin(Yg, cielab->display.d_YCG);
 -	Yb = TIFFmin(Yb, cielab->display.d_YCB);
 -
 -	/* Turn luminosity to colour value. */
 -	i = (int)((Yr - cielab->display.d_Y0R) / cielab->rstep);
 -	i = TIFFmin(cielab->range, i);
 -	*r = RINT(cielab->Yr2r[i]);
 -
 -	i = (int)((Yg - cielab->display.d_Y0G) / cielab->gstep);
 -	i = TIFFmin(cielab->range, i);
 -	*g = RINT(cielab->Yg2g[i]);
 -
 -	i = (int)((Yb - cielab->display.d_Y0B) / cielab->bstep);
 -	i = TIFFmin(cielab->range, i);
 -	*b = RINT(cielab->Yb2b[i]);
 -
 -	/* Clip output. */
 -	*r = TIFFmin(*r, cielab->display.d_Vrwr);
 -	*g = TIFFmin(*g, cielab->display.d_Vrwg);
 -	*b = TIFFmin(*b, cielab->display.d_Vrwb);
 -}
 -#undef RINT
 -
 -/* 
 - * Allocate conversion state structures and make look_up tables for
 - * the Yr,Yb,Yg <=> r,g,b conversions.
 - */
 -int
 -TIFFCIELabToRGBInit(TIFFCIELabToRGB* cielab,
 -		    TIFFDisplay *display, float *refWhite)
 -{
 -	int i;
 -	double gamma;
 -
 -	cielab->range = CIELABTORGB_TABLE_RANGE;
 -
 -	_TIFFmemcpy(&cielab->display, display, sizeof(TIFFDisplay));
 -
 -	/* Red */
 -	gamma = 1.0 / cielab->display.d_gammaR ;
 -	cielab->rstep =
 -		(cielab->display.d_YCR - cielab->display.d_Y0R)	/ cielab->range;
 -	for(i = 0; i <= cielab->range; i++) {
 -		cielab->Yr2r[i] = cielab->display.d_Vrwr
 -		    * ((float)pow((double)i / cielab->range, gamma));
 -	}
 -
 -	/* Green */
 -	gamma = 1.0 / cielab->display.d_gammaG ;
 -	cielab->gstep =
 -	    (cielab->display.d_YCR - cielab->display.d_Y0R) / cielab->range;
 -	for(i = 0; i <= cielab->range; i++) {
 -		cielab->Yg2g[i] = cielab->display.d_Vrwg
 -		    * ((float)pow((double)i / cielab->range, gamma));
 -	}
 -
 -	/* Blue */
 -	gamma = 1.0 / cielab->display.d_gammaB ;
 -	cielab->bstep =
 -	    (cielab->display.d_YCR - cielab->display.d_Y0R) / cielab->range;
 -	for(i = 0; i <= cielab->range; i++) {
 -		cielab->Yb2b[i] = cielab->display.d_Vrwb
 -		    * ((float)pow((double)i / cielab->range, gamma));
 -	}
 -
 -	/* Init reference white point */
 -	cielab->X0 = refWhite[0];
 -	cielab->Y0 = refWhite[1];
 -	cielab->Z0 = refWhite[2];
 -
 -	return 0;
 -}
 -
 -/* 
 - * Convert color value from the YCbCr space to CIE XYZ.
 - * The colorspace conversion algorithm comes from the IJG v5a code;
 - * see below for more information on how it works.
 - */
 -#define	SHIFT			16
 -#define	FIX(x)			((int32)((x) * (1L<<SHIFT) + 0.5))
 -#define	ONE_HALF		((int32)(1<<(SHIFT-1)))
 -#define	Code2V(c, RB, RW, CR)	((((c)-(int32)(RB))*(float)(CR))/(float)(((RW)-(RB)) ? ((RW)-(RB)) : 1))
 -#define	CLAMP(f,min,max)	((f)<(min)?(min):(f)>(max)?(max):(f))
 -#define HICLAMP(f,max)		((f)>(max)?(max):(f))
 -
 -void
 -TIFFYCbCrtoRGB(TIFFYCbCrToRGB *ycbcr, uint32 Y, int32 Cb, int32 Cr,
 -	       uint32 *r, uint32 *g, uint32 *b)
 -{
 -	int32 i;
 -
 -	/* XXX: Only 8-bit YCbCr input supported for now */
 -	Y = HICLAMP(Y, 255), Cb = CLAMP(Cb, 0, 255), Cr = CLAMP(Cr, 0, 255);
 -
 -	i = ycbcr->Y_tab[Y] + ycbcr->Cr_r_tab[Cr];
 -	*r = CLAMP(i, 0, 255);
 -	i = ycbcr->Y_tab[Y]
 -	    + (int)((ycbcr->Cb_g_tab[Cb] + ycbcr->Cr_g_tab[Cr]) >> SHIFT);
 -	*g = CLAMP(i, 0, 255);
 -	i = ycbcr->Y_tab[Y] + ycbcr->Cb_b_tab[Cb];
 -	*b = CLAMP(i, 0, 255);
 -}
 -
 -/*
 - * Initialize the YCbCr->RGB conversion tables.  The conversion
 - * is done according to the 6.0 spec:
 - *
 - *    R = Y + Cr*(2 - 2*LumaRed)
 - *    B = Y + Cb*(2 - 2*LumaBlue)
 - *    G =   Y
 - *        - LumaBlue*Cb*(2-2*LumaBlue)/LumaGreen
 - *        - LumaRed*Cr*(2-2*LumaRed)/LumaGreen
 - *
 - * To avoid floating point arithmetic the fractional constants that
 - * come out of the equations are represented as fixed point values
 - * in the range 0...2^16.  We also eliminate multiplications by
 - * pre-calculating possible values indexed by Cb and Cr (this code
 - * assumes conversion is being done for 8-bit samples).
 - */
 -int
 -TIFFYCbCrToRGBInit(TIFFYCbCrToRGB* ycbcr, float *luma, float *refBlackWhite)
 -{
 -    TIFFRGBValue* clamptab;
 -    int i;
 -    
 -#define LumaRed	    luma[0]
 -#define LumaGreen   luma[1]
 -#define LumaBlue    luma[2]
 -
 -    clamptab = (TIFFRGBValue*)(
 -	(tidata_t) ycbcr+TIFFroundup(sizeof (TIFFYCbCrToRGB), sizeof (long)));
 -    _TIFFmemset(clamptab, 0, 256);		/* v < 0 => 0 */
 -    ycbcr->clamptab = (clamptab += 256);
 -    for (i = 0; i < 256; i++)
 -	clamptab[i] = (TIFFRGBValue) i;
 -    _TIFFmemset(clamptab+256, 255, 2*256);	/* v > 255 => 255 */
 -    ycbcr->Cr_r_tab = (int*) (clamptab + 3*256);
 -    ycbcr->Cb_b_tab = ycbcr->Cr_r_tab + 256;
 -    ycbcr->Cr_g_tab = (int32*) (ycbcr->Cb_b_tab + 256);
 -    ycbcr->Cb_g_tab = ycbcr->Cr_g_tab + 256;
 -    ycbcr->Y_tab = ycbcr->Cb_g_tab + 256;
 -
 -    { float f1 = 2-2*LumaRed;		int32 D1 = FIX(f1);
 -      float f2 = LumaRed*f1/LumaGreen;	int32 D2 = -FIX(f2);
 -      float f3 = 2-2*LumaBlue;		int32 D3 = FIX(f3);
 -      float f4 = LumaBlue*f3/LumaGreen;	int32 D4 = -FIX(f4);
 -      int x;
 -
 -#undef LumaBlue
 -#undef LumaGreen
 -#undef LumaRed
 -      
 -      /*
 -       * i is the actual input pixel value in the range 0..255
 -       * Cb and Cr values are in the range -128..127 (actually
 -       * they are in a range defined by the ReferenceBlackWhite
 -       * tag) so there is some range shifting to do here when
 -       * constructing tables indexed by the raw pixel data.
 -       */
 -      for (i = 0, x = -128; i < 256; i++, x++) {
 -	    int32 Cr = (int32)Code2V(x, refBlackWhite[4] - 128.0F,
 -			    refBlackWhite[5] - 128.0F, 127);
 -	    int32 Cb = (int32)Code2V(x, refBlackWhite[2] - 128.0F,
 -			    refBlackWhite[3] - 128.0F, 127);
 -
 -	    ycbcr->Cr_r_tab[i] = (int32)((D1*Cr + ONE_HALF)>>SHIFT);
 -	    ycbcr->Cb_b_tab[i] = (int32)((D3*Cb + ONE_HALF)>>SHIFT);
 -	    ycbcr->Cr_g_tab[i] = D2*Cr;
 -	    ycbcr->Cb_g_tab[i] = D4*Cb + ONE_HALF;
 -	    ycbcr->Y_tab[i] =
 -		    (int32)Code2V(x + 128, refBlackWhite[0], refBlackWhite[1], 255);
 -      }
 -    }
 -
 -    return 0;
 -}
 -#undef	HICLAMP
 -#undef	CLAMP
 -#undef	Code2V
 -#undef	SHIFT
 -#undef	ONE_HALF
 -#undef	FIX
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_compress.c b/plugins/FreeImage/Source/LibTIFF/tif_compress.c deleted file mode 100644 index ac471b1e10..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_compress.c +++ /dev/null @@ -1,295 +0,0 @@ -/* $Id: tif_compress.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library
 - *
 - * Compression Scheme Configuration Support.
 - */
 -#include "tiffiop.h"
 -
 -static int
 -TIFFNoEncode(TIFF* tif, const char* method)
 -{
 -	const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression);
 -
 -	if (c) { 
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%s %s encoding is not implemented",
 -			     c->name, method);
 -	} else { 
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			"Compression scheme %u %s encoding is not implemented",
 -			     tif->tif_dir.td_compression, method);
 -	}
 -	return (-1);
 -}
 -
 -int
 -_TIFFNoRowEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s)
 -{
 -	(void) pp; (void) cc; (void) s;
 -	return (TIFFNoEncode(tif, "scanline"));
 -}
 -
 -int
 -_TIFFNoStripEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s)
 -{
 -	(void) pp; (void) cc; (void) s;
 -	return (TIFFNoEncode(tif, "strip"));
 -}
 -
 -int
 -_TIFFNoTileEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s)
 -{
 -	(void) pp; (void) cc; (void) s;
 -	return (TIFFNoEncode(tif, "tile"));
 -}
 -
 -static int
 -TIFFNoDecode(TIFF* tif, const char* method)
 -{
 -	const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression);
 -
 -	if (c)
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%s %s decoding is not implemented",
 -			     c->name, method);
 -	else
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Compression scheme %u %s decoding is not implemented",
 -			     tif->tif_dir.td_compression, method);
 -	return (-1);
 -}
 -
 -int
 -_TIFFNoRowDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s)
 -{
 -	(void) pp; (void) cc; (void) s;
 -	return (TIFFNoDecode(tif, "scanline"));
 -}
 -
 -int
 -_TIFFNoStripDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s)
 -{
 -	(void) pp; (void) cc; (void) s;
 -	return (TIFFNoDecode(tif, "strip"));
 -}
 -
 -int
 -_TIFFNoTileDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s)
 -{
 -	(void) pp; (void) cc; (void) s;
 -	return (TIFFNoDecode(tif, "tile"));
 -}
 -
 -int
 -_TIFFNoSeek(TIFF* tif, uint32 off)
 -{
 -	(void) off;
 -	TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		     "Compression algorithm does not support random access");
 -	return (0);
 -}
 -
 -int
 -_TIFFNoPreCode(TIFF* tif, tsample_t s)
 -{
 -	(void) tif; (void) s;
 -	return (1);
 -}
 -
 -static int _TIFFtrue(TIFF* tif) { (void) tif; return (1); }
 -static void _TIFFvoid(TIFF* tif) { (void) tif; }
 -
 -void
 -_TIFFSetDefaultCompressionState(TIFF* tif)
 -{
 -	tif->tif_decodestatus = TRUE;
 -	tif->tif_setupdecode = _TIFFtrue;
 -	tif->tif_predecode = _TIFFNoPreCode;
 -	tif->tif_decoderow = _TIFFNoRowDecode;
 -	tif->tif_decodestrip = _TIFFNoStripDecode;
 -	tif->tif_decodetile = _TIFFNoTileDecode;
 -	tif->tif_encodestatus = TRUE;
 -	tif->tif_setupencode = _TIFFtrue;
 -	tif->tif_preencode = _TIFFNoPreCode;
 -	tif->tif_postencode = _TIFFtrue;
 -	tif->tif_encoderow = _TIFFNoRowEncode;
 -	tif->tif_encodestrip = _TIFFNoStripEncode;
 -	tif->tif_encodetile = _TIFFNoTileEncode;
 -	tif->tif_close = _TIFFvoid;
 -	tif->tif_seek = _TIFFNoSeek;
 -	tif->tif_cleanup = _TIFFvoid;
 -	tif->tif_defstripsize = _TIFFDefaultStripSize;
 -	tif->tif_deftilesize = _TIFFDefaultTileSize;
 -	tif->tif_flags &= ~(TIFF_NOBITREV|TIFF_NOREADRAW);
 -}
 -
 -int
 -TIFFSetCompressionScheme(TIFF* tif, int scheme)
 -{
 -	const TIFFCodec *c = TIFFFindCODEC((uint16) scheme);
 -
 -	_TIFFSetDefaultCompressionState(tif);
 -	/*
 -	 * Don't treat an unknown compression scheme as an error.
 -	 * This permits applications to open files with data that
 -	 * the library does not have builtin support for, but which
 -	 * may still be meaningful.
 -	 */
 -	return (c ? (*c->init)(tif, scheme) : 1);
 -}
 -
 -/*
 - * Other compression schemes may be registered.  Registered
 - * schemes can also override the builtin versions provided
 - * by this library.
 - */
 -typedef struct _codec {
 -	struct _codec*	next;
 -	TIFFCodec*	info;
 -} codec_t;
 -static	codec_t* registeredCODECS = NULL;
 -
 -const TIFFCodec*
 -TIFFFindCODEC(uint16 scheme)
 -{
 -	const TIFFCodec* c;
 -	codec_t* cd;
 -
 -	for (cd = registeredCODECS; cd; cd = cd->next)
 -		if (cd->info->scheme == scheme)
 -			return ((const TIFFCodec*) cd->info);
 -	for (c = _TIFFBuiltinCODECS; c->name; c++)
 -		if (c->scheme == scheme)
 -			return (c);
 -	return ((const TIFFCodec*) 0);
 -}
 -
 -TIFFCodec*
 -TIFFRegisterCODEC(uint16 scheme, const char* name, TIFFInitMethod init)
 -{
 -	codec_t* cd = (codec_t*)
 -	    _TIFFmalloc(sizeof (codec_t) + sizeof (TIFFCodec) + strlen(name)+1);
 -
 -	if (cd != NULL) {
 -		cd->info = (TIFFCodec*) ((tidata_t) cd + sizeof (codec_t));
 -		cd->info->name = (char*)
 -		    ((tidata_t) cd->info + sizeof (TIFFCodec));
 -		strcpy(cd->info->name, name);
 -		cd->info->scheme = scheme;
 -		cd->info->init = init;
 -		cd->next = registeredCODECS;
 -		registeredCODECS = cd;
 -	} else {
 -		TIFFErrorExt(0, "TIFFRegisterCODEC",
 -		    "No space to register compression scheme %s", name);
 -		return NULL;
 -	}
 -	return (cd->info);
 -}
 -
 -void
 -TIFFUnRegisterCODEC(TIFFCodec* c)
 -{
 -	codec_t* cd;
 -	codec_t** pcd;
 -
 -	for (pcd = ®isteredCODECS; (cd = *pcd); pcd = &cd->next)
 -		if (cd->info == c) {
 -			*pcd = cd->next;
 -			_TIFFfree(cd);
 -			return;
 -		}
 -	TIFFErrorExt(0, "TIFFUnRegisterCODEC",
 -	    "Cannot remove compression scheme %s; not registered", c->name);
 -}
 -
 -/************************************************************************/
 -/*                       TIFFGetConfisuredCODECs()                      */
 -/************************************************************************/
 -
 -/**
 - * Get list of configured codecs, both built-in and registered by user.
 - * Caller is responsible to free this structure.
 - * 
 - * @return returns array of TIFFCodec records (the last record should be NULL)
 - * or NULL if function failed.
 - */
 -
 -TIFFCodec*
 -TIFFGetConfiguredCODECs()
 -{
 -	int		i = 1;
 -        codec_t		*cd;
 -        const TIFFCodec	*c;
 -	TIFFCodec	*codecs = NULL, *new_codecs;
 -
 -        for (cd = registeredCODECS; cd; cd = cd->next) {
 -                new_codecs = (TIFFCodec *)
 -			_TIFFrealloc(codecs, i * sizeof(TIFFCodec));
 -		if (!new_codecs) {
 -			_TIFFfree (codecs);
 -			return NULL;
 -		}
 -		codecs = new_codecs;
 -		_TIFFmemcpy(codecs + i - 1, cd, sizeof(TIFFCodec));
 -		i++;
 -	}
 -        for (c = _TIFFBuiltinCODECS; c->name; c++) {
 -                if (TIFFIsCODECConfigured(c->scheme)) {
 -                        new_codecs = (TIFFCodec *)
 -				_TIFFrealloc(codecs, i * sizeof(TIFFCodec));
 -			if (!new_codecs) {
 -				_TIFFfree (codecs);
 -				return NULL;
 -			}
 -			codecs = new_codecs;
 -			_TIFFmemcpy(codecs + i - 1, (const tdata_t)c, sizeof(TIFFCodec));
 -			i++;
 -		}
 -	}
 -
 -	new_codecs = (TIFFCodec *) _TIFFrealloc(codecs, i * sizeof(TIFFCodec));
 -	if (!new_codecs) {
 -		_TIFFfree (codecs);
 -		return NULL;
 -	}
 -	codecs = new_codecs;
 -	_TIFFmemset(codecs + i - 1, 0, sizeof(TIFFCodec));
 -
 -        return codecs;
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_config.h b/plugins/FreeImage/Source/LibTIFF/tif_config.h deleted file mode 100644 index 3e08176627..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_config.h +++ /dev/null @@ -1,266 +0,0 @@ -/* FreeImage libtiff config */
 -
 -#ifndef _TIFFCONF_
 -#define _TIFFCONF_
 -
 -/* Define as 0 or 1 according to the floating point format suported by the
 -   machine */
 -#define HAVE_IEEEFP 1
 -
 -/* --- byte order --- */
 -
 -/* Some versions of gcc may have BYTE_ORDER or __BYTE_ORDER defined
 -   If your big endian system isn't being detected, add an OS specific check
 -*/
 -#if (defined(BYTE_ORDER) && BYTE_ORDER==BIG_ENDIAN) || \
 -	(defined(__BYTE_ORDER) && __BYTE_ORDER==__BIG_ENDIAN) || \
 -	defined(__BIG_ENDIAN__)
 -/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */
 -#define HOST_FILLORDER FILLORDER_MSB2LSB
 -/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian (Intel) */
 -#define WORDS_BIGENDIAN 1
 -#else
 -/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */
 -#define HOST_FILLORDER FILLORDER_LSB2MSB
 -/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian (Intel) */
 -#undef WORDS_BIGENDIAN
 -#endif // BYTE_ORDER
 -
 -/* --- compression algorithms --- */
 -
 -/* Support CCITT Group 3 & 4 algorithms */
 -#define CCITT_SUPPORT 1
 -
 -/* Support JPEG compression (requires IJG JPEG library) */
 -#define JPEG_SUPPORT 1
 -
 -/* Support LogLuv high dynamic range encoding */
 -#define LOGLUV_SUPPORT 1
 -
 -/* Support LZW algorithm */
 -#define LZW_SUPPORT 1
 -
 -/* Support NeXT 2-bit RLE algorithm */
 -#define NEXT_SUPPORT 1
 -
 -/* Support Old JPEG compression (read-only) */
 -#define OJPEG_SUPPORT 1
 -
 -/* Support Macintosh PackBits algorithm */
 -#define PACKBITS_SUPPORT 1
 -
 -/* Support Pixar log-format algorithm (requires Zlib) */
 -#define PIXARLOG_SUPPORT 1
 -
 -/* Support ThunderScan 4-bit RLE algorithm */
 -#define THUNDER_SUPPORT 1
 -
 -/* Support Deflate compression */
 -#define ZIP_SUPPORT 1
 -
 -/* --- ``Orthogonal Features'' --- */
 -
 -/* Support strip chopping (whether or not to convert single-strip uncompressed
 -   images to mutiple strips of ~8Kb to reduce memory usage) */
 -#define STRIPCHOP_DEFAULT TIFF_STRIPCHOP
 -
 -/* Enable SubIFD tag (330) support */
 -#define SUBIFD_SUPPORT 1
 -
 -/* Treat extra sample as alpha (default enabled). The RGBA interface will
 -   treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many
 -   packages produce RGBA files but don't mark the alpha properly. */
 -#define DEFAULT_EXTRASAMPLE_AS_ALPHA 1
 -
 -/* Pick up YCbCr subsampling info from the JPEG data stream to support files
 -   lacking the tag (default enabled). */
 -#define CHECK_JPEG_YCBCR_SUBSAMPLING 1
 -
 -/* --- include files --- */
 -
 -/* Use the Apple OpenGL framework. */
 -/* #undef HAVE_APPLE_OPENGL_FRAMEWORK */
 -
 -/* Define to 1 if you have the <assert.h> header file. */
 -#define HAVE_ASSERT_H 1
 -
 -/* Define to 1 if you have the <dlfcn.h> header file. */
 -#define HAVE_DLFCN_H 1
 -
 -/* Define to 1 if you have the <fcntl.h> header file. */
 -#define HAVE_FCNTL_H 1
 -
 -/* Define to 1 if you have the `floor' function. */
 -#define HAVE_FLOOR 1
 -
 -/* Define to 1 if you have the `getopt' function. */
 -#define HAVE_GETOPT 1
 -
 -/* Define as 0 or 1 according to the floating point format suported by the
 -   machine */
 -#define HAVE_IEEEFP 1
 -
 -/* Define to 1 if the system has the type `int16'. */
 -/* #undef HAVE_INT16 */
 -
 -/* Define to 1 if the system has the type `int32'. */
 -/* #undef HAVE_INT32 */
 -
 -/* Define to 1 if the system has the type `int8'. */
 -/* #undef HAVE_INT8 */
 -
 -/* Define to 1 if you have the <inttypes.h> header file. */
 -#define HAVE_INTTYPES_H 1
 -
 -/* Define to 1 if you have the `isascii' function. */
 -#define HAVE_ISASCII 1
 -
 -/* Define to 1 if you have the `c' library (-lc). */
 -#define HAVE_LIBC 1
 -
 -/* Define to 1 if you have the `m' library (-lm). */
 -#define HAVE_LIBM 1
 -
 -/* Define to 1 if you have the <limits.h> header file. */
 -#define HAVE_LIMITS_H 1
 -
 -/* Define to 1 if you have the <malloc.h> header file. */
 -#define HAVE_MALLOC_H 1
 -
 -/* Define to 1 if you have the `memmove' function. */
 -#define HAVE_MEMMOVE 1
 -
 -/* Define to 1 if you have the <memory.h> header file. */
 -#define HAVE_MEMORY_H 1
 -
 -/* Define to 1 if you have the `memset' function. */
 -#define HAVE_MEMSET 1
 -
 -/* Define to 1 if you have the `mmap' function. */
 -#define HAVE_MMAP 1
 -
 -/* Define to 1 if you have the `pow' function. */
 -#define HAVE_POW 1
 -
 -/* Define if you have POSIX threads libraries and header files. */
 -#define HAVE_PTHREAD 1
 -
 -/* Define to 1 if you have the `sqrt' function. */
 -#define HAVE_SQRT 1
 -
 -/* Define to 1 if you have the <stdint.h> header file. */
 -#define HAVE_STDINT_H 1
 -
 -/* Define to 1 if you have the <stdlib.h> header file. */
 -#define HAVE_STDLIB_H 1
 -
 -/* Define to 1 if you have the `strcasecmp' function. */
 -#define HAVE_STRCASECMP 1
 -
 -/* Define to 1 if you have the `strchr' function. */
 -#define HAVE_STRCHR 1
 -
 -/* Define to 1 if you have the <strings.h> header file. */
 -#define HAVE_STRINGS_H 1
 -
 -/* Define to 1 if you have the <string.h> header file. */
 -#define HAVE_STRING_H 1
 -
 -/* Define to 1 if you have the `strrchr' function. */
 -#define HAVE_STRRCHR 1
 -
 -/* Define to 1 if you have the `strstr' function. */
 -#define HAVE_STRSTR 1
 -
 -/* Define to 1 if you have the `strtol' function. */
 -#define HAVE_STRTOL 1
 -
 -/* Define to 1 if you have the `strtoul' function. */
 -#define HAVE_STRTOUL 1
 -
 -/* Define to 1 if you have the <sys/stat.h> header file. */
 -#define HAVE_SYS_STAT_H 1
 -
 -/* Define to 1 if you have the <sys/time.h> header file. */
 -#define HAVE_SYS_TIME_H 1
 -
 -/* Define to 1 if you have the <sys/types.h> header file. */
 -#define HAVE_SYS_TYPES_H 1
 -
 -/* Define to 1 if you have the <unistd.h> header file. */
 -#define HAVE_UNISTD_H 1
 -
 -/* Define to 1 if you have the <windows.h> header file. */
 -/* #undef HAVE_WINDOWS_H */
 -
 -
 -/* Define to 1 if your C compiler doesn't accept -c and -o together. */
 -/* #undef NO_MINUS_C_MINUS_O */
 -
 -
 -/* Define to the necessary symbol if this constant uses a non-standard name on
 -   your system. */
 -/* #undef PTHREAD_CREATE_JOINABLE */
 -
 -/* The size of a `int', as computed by sizeof. */
 -#define SIZEOF_INT 4
 -
 -/* The size of a `long', as computed by sizeof. */
 -#include <limits.h>
 -#if (LONG_MAX == +9223372036854775807L)
 -#define SIZEOF_LONG 8
 -#elif (LONG_MAX == +2147483647)
 -#define SIZEOF_LONG 4
 -#else
 -#error "Cannot detect SIZEOF_LONG"
 -#endif
 -
 -/* Define to 1 if you have the ANSI C header files. */
 -#define STDC_HEADERS 1
 -
 -/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
 -#define TIME_WITH_SYS_TIME 1
 -
 -/* Define to 1 if your <sys/time.h> declares `struct tm'. */
 -/* #undef TM_IN_SYS_TIME */
 -
 -
 -/* Define to 1 if your processor stores words with the most significant byte
 -   first (like Motorola and SPARC, unlike Intel and VAX). */
 -/* #undef WORDS_BIGENDIAN */
 -
 -/* Define to 1 if the X Window System is missing or not being used. */
 -/* #undef X_DISPLAY_MISSING */
 -
 -/* Define for large files, on AIX-style hosts. */
 -/* #undef _LARGE_FILES */
 -
 -/* Define to empty if `const' does not conform to ANSI C. */
 -/* #undef const */
 -
 -/* Define to `__inline__' or `__inline' if that's what the C compiler
 -   calls it, or to nothing if 'inline' is not supported under any name.  */
 -#ifndef __cplusplus
 -  #ifdef _MSC_VER
 -    #ifndef inline
 -    #define inline __inline
 -    #endif
 -  #else
 -    #undef inline
 -  #endif // _MSC_VER
 -#endif // __cplusplus
 -
 -#ifdef _MSC_VER 
 -#define lfind _lfind
 -/* Define to 1 if you have the <search.h> header file. */
 -#define HAVE_SEARCH_H 1
 -#endif // _MSC_VER
 -
 -
 -/* Define to `long' if <sys/types.h> does not define. */
 -/* #undef off_t */
 -
 -/* Define to `unsigned' if <sys/types.h> does not define. */
 -/* #undef size_t */
 -
 -#endif /* _TIFFCONF_ */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_config.h-vms b/plugins/FreeImage/Source/LibTIFF/tif_config.h-vms deleted file mode 100644 index c2cae5752e..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_config.h-vms +++ /dev/null @@ -1,46 +0,0 @@ -/* Define to 1 if you have the <assert.h> header file. */
 -#define HAVE_ASSERT_H 1
 -
 -/* Define to 1 if you have the <fcntl.h> header file. */
 -#define HAVE_FCNTL_H 1
 -
 -/* Define as 0 or 1 according to the floating point format suported by the
 -   machine */
 -#define HAVE_IEEEFP 1
 -
 -#define HAVE_UNISTD_H 1
 -
 -#define HAVE_STRING_H 1
 -/* Define to 1 if you have the <sys/types.h> header file. */
 -#define HAVE_SYS_TYPES_H 1
 -
 -/* Define to 1 if you have the <io.h> header file. */
 -//#define HAVE_IO_H 1
 -
 -/* Define to 1 if you have the <search.h> header file. */
 -//#define HAVE_SEARCH_H 1
 -
 -/* The size of a `int', as computed by sizeof. */
 -#define SIZEOF_INT 4
 -
 -/* The size of a `long', as computed by sizeof. */
 -#define SIZEOF_LONG 4
 -
 -/* Set the native cpu bit order */
 -#define HOST_FILLORDER FILLORDER_LSB2MSB
 -
 -/* Define to 1 if your processor stores words with the most significant byte
 -   first (like Motorola and SPARC, unlike Intel and VAX). */
 -/* #undef WORDS_BIGENDIAN */
 -
 -/* Define to `__inline__' or `__inline' if that's what the C compiler
 -   calls it, or to nothing if 'inline' is not supported under any name.  */
 -/*
 -#ifndef __cplusplus
 -# ifndef inline
 -#  define inline __inline
 -# endif
 -#endif
 -*/
 -
 -// #define lfind _lfind
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_config.h.in b/plugins/FreeImage/Source/LibTIFF/tif_config.h.in deleted file mode 100644 index 86c07e6a99..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_config.h.in +++ /dev/null @@ -1,309 +0,0 @@ -/* libtiff/tif_config.h.in.  Generated from configure.ac by autoheader.  */
 -
 -/* Define if building universal (internal helper macro) */
 -#undef AC_APPLE_UNIVERSAL_BUILD
 -
 -/* Support CCITT Group 3 & 4 algorithms */
 -#undef CCITT_SUPPORT
 -
 -/* Pick up YCbCr subsampling info from the JPEG data stream to support files
 -   lacking the tag (default enabled). */
 -#undef CHECK_JPEG_YCBCR_SUBSAMPLING
 -
 -/* Support C++ stream API (requires C++ compiler) */
 -#undef CXX_SUPPORT
 -
 -/* Treat extra sample as alpha (default enabled). The RGBA interface will
 -   treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many
 -   packages produce RGBA files but don't mark the alpha properly. */
 -#undef DEFAULT_EXTRASAMPLE_AS_ALPHA
 -
 -/* Use the Apple OpenGL framework. */
 -#undef HAVE_APPLE_OPENGL_FRAMEWORK
 -
 -/* Define to 1 if you have the <assert.h> header file. */
 -#undef HAVE_ASSERT_H
 -
 -/* Define to 1 if you have the <dlfcn.h> header file. */
 -#undef HAVE_DLFCN_H
 -
 -/* Define to 1 if you have the <fcntl.h> header file. */
 -#undef HAVE_FCNTL_H
 -
 -/* Define to 1 if you have the `floor' function. */
 -#undef HAVE_FLOOR
 -
 -/* Define to 1 if you have the `getopt' function. */
 -#undef HAVE_GETOPT
 -
 -/* Define as 0 or 1 according to the floating point format suported by the
 -   machine */
 -#undef HAVE_IEEEFP
 -
 -/* Define to 1 if the system has the type `int16'. */
 -#undef HAVE_INT16
 -
 -/* Define to 1 if the system has the type `int32'. */
 -#undef HAVE_INT32
 -
 -/* Define to 1 if the system has the type `int8'. */
 -#undef HAVE_INT8
 -
 -/* Define to 1 if you have the <inttypes.h> header file. */
 -#undef HAVE_INTTYPES_H
 -
 -/* Define to 1 if you have the <io.h> header file. */
 -#undef HAVE_IO_H
 -
 -/* Define to 1 if you have the `isascii' function. */
 -#undef HAVE_ISASCII
 -
 -/* Define to 1 if you have the `jbg_newlen' function. */
 -#undef HAVE_JBG_NEWLEN
 -
 -/* Define to 1 if you have the `lfind' function. */
 -#undef HAVE_LFIND
 -
 -/* Define to 1 if you have the `c' library (-lc). */
 -#undef HAVE_LIBC
 -
 -/* Define to 1 if you have the `m' library (-lm). */
 -#undef HAVE_LIBM
 -
 -/* Define to 1 if you have the <limits.h> header file. */
 -#undef HAVE_LIMITS_H
 -
 -/* Define to 1 if you have the <malloc.h> header file. */
 -#undef HAVE_MALLOC_H
 -
 -/* Define to 1 if you have the `memmove' function. */
 -#undef HAVE_MEMMOVE
 -
 -/* Define to 1 if you have the <memory.h> header file. */
 -#undef HAVE_MEMORY_H
 -
 -/* Define to 1 if you have the `memset' function. */
 -#undef HAVE_MEMSET
 -
 -/* Define to 1 if you have the `mmap' function. */
 -#undef HAVE_MMAP
 -
 -/* Define to 1 if you have the `pow' function. */
 -#undef HAVE_POW
 -
 -/* Define if you have POSIX threads libraries and header files. */
 -#undef HAVE_PTHREAD
 -
 -/* Define to 1 if you have the <search.h> header file. */
 -#undef HAVE_SEARCH_H
 -
 -/* Define to 1 if you have the `setmode' function. */
 -#undef HAVE_SETMODE
 -
 -/* Define to 1 if you have the `sqrt' function. */
 -#undef HAVE_SQRT
 -
 -/* Define to 1 if you have the <stdint.h> header file. */
 -#undef HAVE_STDINT_H
 -
 -/* Define to 1 if you have the <stdlib.h> header file. */
 -#undef HAVE_STDLIB_H
 -
 -/* Define to 1 if you have the `strcasecmp' function. */
 -#undef HAVE_STRCASECMP
 -
 -/* Define to 1 if you have the `strchr' function. */
 -#undef HAVE_STRCHR
 -
 -/* Define to 1 if you have the <strings.h> header file. */
 -#undef HAVE_STRINGS_H
 -
 -/* Define to 1 if you have the <string.h> header file. */
 -#undef HAVE_STRING_H
 -
 -/* Define to 1 if you have the `strrchr' function. */
 -#undef HAVE_STRRCHR
 -
 -/* Define to 1 if you have the `strstr' function. */
 -#undef HAVE_STRSTR
 -
 -/* Define to 1 if you have the `strtol' function. */
 -#undef HAVE_STRTOL
 -
 -/* Define to 1 if you have the `strtoul' function. */
 -#undef HAVE_STRTOUL
 -
 -/* Define to 1 if you have the <sys/stat.h> header file. */
 -#undef HAVE_SYS_STAT_H
 -
 -/* Define to 1 if you have the <sys/time.h> header file. */
 -#undef HAVE_SYS_TIME_H
 -
 -/* Define to 1 if you have the <sys/types.h> header file. */
 -#undef HAVE_SYS_TYPES_H
 -
 -/* Define to 1 if you have the <unistd.h> header file. */
 -#undef HAVE_UNISTD_H
 -
 -/* Define to 1 if you have the <windows.h> header file. */
 -#undef HAVE_WINDOWS_H
 -
 -/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian
 -   (Intel) */
 -#undef HOST_BIGENDIAN
 -
 -/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */
 -#undef HOST_FILLORDER
 -
 -/* Support ISO JBIG compression (requires JBIG-KIT library) */
 -#undef JBIG_SUPPORT
 -
 -/* Support JPEG compression (requires IJG JPEG library) */
 -#undef JPEG_SUPPORT
 -
 -/* Support LogLuv high dynamic range encoding */
 -#undef LOGLUV_SUPPORT
 -
 -/* Define to the sub-directory in which libtool stores uninstalled libraries.
 -   */
 -#undef LT_OBJDIR
 -
 -/* Support LZW algorithm */
 -#undef LZW_SUPPORT
 -
 -/* Support Microsoft Document Imaging format */
 -#undef MDI_SUPPORT
 -
 -/* Support NeXT 2-bit RLE algorithm */
 -#undef NEXT_SUPPORT
 -
 -/* Define to 1 if your C compiler doesn't accept -c and -o together. */
 -#undef NO_MINUS_C_MINUS_O
 -
 -/* Support Old JPEG compresson (read-only) */
 -#undef OJPEG_SUPPORT
 -
 -/* Name of package */
 -#undef PACKAGE
 -
 -/* Define to the address where bug reports for this package should be sent. */
 -#undef PACKAGE_BUGREPORT
 -
 -/* Define to the full name of this package. */
 -#undef PACKAGE_NAME
 -
 -/* Define to the full name and version of this package. */
 -#undef PACKAGE_STRING
 -
 -/* Define to the one symbol short name of this package. */
 -#undef PACKAGE_TARNAME
 -
 -/* Define to the home page for this package. */
 -#undef PACKAGE_URL
 -
 -/* Define to the version of this package. */
 -#undef PACKAGE_VERSION
 -
 -/* Support Macintosh PackBits algorithm */
 -#undef PACKBITS_SUPPORT
 -
 -/* Support Pixar log-format algorithm (requires Zlib) */
 -#undef PIXARLOG_SUPPORT
 -
 -/* Define to necessary symbol if this constant uses a non-standard name on
 -   your system. */
 -#undef PTHREAD_CREATE_JOINABLE
 -
 -/* The size of `int', as computed by sizeof. */
 -#undef SIZEOF_INT
 -
 -/* The size of `long', as computed by sizeof. */
 -#undef SIZEOF_LONG
 -
 -/* The size of `signed long', as computed by sizeof. */
 -#undef SIZEOF_SIGNED_LONG
 -
 -/* The size of `signed long long', as computed by sizeof. */
 -#undef SIZEOF_SIGNED_LONG_LONG
 -
 -/* The size of `unsigned long', as computed by sizeof. */
 -#undef SIZEOF_UNSIGNED_LONG
 -
 -/* The size of `unsigned long long', as computed by sizeof. */
 -#undef SIZEOF_UNSIGNED_LONG_LONG
 -
 -/* Define to 1 if you have the ANSI C header files. */
 -#undef STDC_HEADERS
 -
 -/* Support strip chopping (whether or not to convert single-strip uncompressed
 -   images to mutiple strips of specified size to reduce memory usage) */
 -#undef STRIPCHOP_DEFAULT
 -
 -/* Default size of the strip in bytes (when strip chopping enabled) */
 -#undef STRIP_SIZE_DEFAULT
 -
 -/* Enable SubIFD tag (330) support */
 -#undef SUBIFD_SUPPORT
 -
 -/* Support ThunderScan 4-bit RLE algorithm */
 -#undef THUNDER_SUPPORT
 -
 -/* Signed 64-bit type formatter */
 -#undef TIFF_INT64_FORMAT
 -
 -/* Signed 64-bit type */
 -#undef TIFF_INT64_T
 -
 -/* Unsigned 64-bit type formatter */
 -#undef TIFF_UINT64_FORMAT
 -
 -/* Unsigned 64-bit type */
 -#undef TIFF_UINT64_T
 -
 -/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
 -#undef TIME_WITH_SYS_TIME
 -
 -/* Define to 1 if your <sys/time.h> declares `struct tm'. */
 -#undef TM_IN_SYS_TIME
 -
 -/* Version number of package */
 -#undef VERSION
 -
 -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
 -   significant byte first (like Motorola and SPARC, unlike Intel). */
 -#if defined AC_APPLE_UNIVERSAL_BUILD
 -# if defined __BIG_ENDIAN__
 -#  define WORDS_BIGENDIAN 1
 -# endif
 -#else
 -# ifndef WORDS_BIGENDIAN
 -#  undef WORDS_BIGENDIAN
 -# endif
 -#endif
 -
 -/* Define to 1 if the X Window System is missing or not being used. */
 -#undef X_DISPLAY_MISSING
 -
 -/* Support Deflate compression */
 -#undef ZIP_SUPPORT
 -
 -/* Number of bits in a file offset, on hosts where this is settable. */
 -#undef _FILE_OFFSET_BITS
 -
 -/* Define for large files, on AIX-style hosts. */
 -#undef _LARGE_FILES
 -
 -/* Define to empty if `const' does not conform to ANSI C. */
 -#undef const
 -
 -/* Define to `__inline__' or `__inline' if that's what the C compiler
 -   calls it, or to nothing if 'inline' is not supported under any name.  */
 -#ifndef __cplusplus
 -#undef inline
 -#endif
 -
 -/* Define to `long int' if <sys/types.h> does not define. */
 -#undef off_t
 -
 -/* Define to `unsigned int' if <sys/types.h> does not define. */
 -#undef size_t
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_config.vc.h b/plugins/FreeImage/Source/LibTIFF/tif_config.vc.h deleted file mode 100644 index 2bb16d3322..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_config.vc.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Define to 1 if you have the <assert.h> header file. */
 -#define HAVE_ASSERT_H 1
 -
 -/* Define to 1 if you have the <fcntl.h> header file. */
 -#define HAVE_FCNTL_H 1
 -
 -/* Define as 0 or 1 according to the floating point format suported by the
 -   machine */
 -#define HAVE_IEEEFP 1
 -
 -/* Define to 1 if you have the `jbg_newlen' function. */
 -#define HAVE_JBG_NEWLEN 1
 -
 -/* Define to 1 if you have the <string.h> header file. */
 -#define HAVE_STRING_H 1
 -
 -/* Define to 1 if you have the <sys/types.h> header file. */
 -#define HAVE_SYS_TYPES_H 1
 -
 -/* Define to 1 if you have the <io.h> header file. */
 -#define HAVE_IO_H 1
 -
 -/* Define to 1 if you have the <search.h> header file. */
 -#define HAVE_SEARCH_H 1
 -
 -/* Define to 1 if you have the `setmode' function. */
 -#define HAVE_SETMODE 1
 -
 -/* The size of a `int', as computed by sizeof. */
 -#define SIZEOF_INT 4
 -
 -/* The size of a `long', as computed by sizeof. */
 -#define SIZEOF_LONG 4
 -
 -/* Signed 64-bit type */
 -#define TIFF_INT64_T signed __int64
 -
 -/* Unsigned 64-bit type */
 -#define TIFF_UINT64_T unsigned __int64
 -
 -/* Set the native cpu bit order */
 -#define HOST_FILLORDER FILLORDER_LSB2MSB
 -
 -/* Define to 1 if your processor stores words with the most significant byte
 -   first (like Motorola and SPARC, unlike Intel and VAX). */
 -/* #undef WORDS_BIGENDIAN */
 -
 -/* Define to `__inline__' or `__inline' if that's what the C compiler
 -   calls it, or to nothing if 'inline' is not supported under any name.  */
 -#ifndef __cplusplus
 -# ifndef inline
 -#  define inline __inline
 -# endif
 -#endif
 -
 -#define lfind _lfind
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_dir.c b/plugins/FreeImage/Source/LibTIFF/tif_dir.c deleted file mode 100644 index 081bb43c06..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_dir.c +++ /dev/null @@ -1,1391 +0,0 @@ -/* $Id: tif_dir.c,v 1.38 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Directory Tag Get & Set Routines.
 - * (and also some miscellaneous stuff)
 - */
 -#include "tiffiop.h"
 -
 -/*
 - * These are used in the backwards compatibility code...
 - */
 -#define DATATYPE_VOID		0       /* !untyped data */
 -#define DATATYPE_INT		1       /* !signed integer data */
 -#define DATATYPE_UINT		2       /* !unsigned integer data */
 -#define DATATYPE_IEEEFP		3       /* !IEEE floating point data */
 -
 -static void
 -setByteArray(void** vpp, void* vp, size_t nmemb, size_t elem_size)
 -{
 -	if (*vpp)
 -		_TIFFfree(*vpp), *vpp = 0;
 -	if (vp) {
 -		tsize_t	bytes = nmemb * elem_size;
 -		if (elem_size && bytes / elem_size == nmemb)
 -			*vpp = (void*) _TIFFmalloc(bytes);
 -		if (*vpp)
 -			_TIFFmemcpy(*vpp, vp, bytes);
 -	}
 -}
 -void _TIFFsetByteArray(void** vpp, void* vp, uint32 n)
 -    { setByteArray(vpp, vp, n, 1); }
 -void _TIFFsetString(char** cpp, char* cp)
 -    { setByteArray((void**) cpp, (void*) cp, strlen(cp)+1, 1); }
 -void _TIFFsetNString(char** cpp, char* cp, uint32 n)
 -    { setByteArray((void**) cpp, (void*) cp, n, 1); }
 -void _TIFFsetShortArray(uint16** wpp, uint16* wp, uint32 n)
 -    { setByteArray((void**) wpp, (void*) wp, n, sizeof (uint16)); }
 -void _TIFFsetLongArray(uint32** lpp, uint32* lp, uint32 n)
 -    { setByteArray((void**) lpp, (void*) lp, n, sizeof (uint32)); }
 -void _TIFFsetFloatArray(float** fpp, float* fp, uint32 n)
 -    { setByteArray((void**) fpp, (void*) fp, n, sizeof (float)); }
 -void _TIFFsetDoubleArray(double** dpp, double* dp, uint32 n)
 -    { setByteArray((void**) dpp, (void*) dp, n, sizeof (double)); }
 -
 -/*
 - * Install extra samples information.
 - */
 -static int
 -setExtraSamples(TIFFDirectory* td, va_list ap, uint32* v)
 -{
 -/* XXX: Unassociated alpha data == 999 is a known Corel Draw bug, see below */
 -#define EXTRASAMPLE_COREL_UNASSALPHA 999 
 -
 -	uint16* va;
 -	uint32 i;
 -
 -	*v = va_arg(ap, uint32);
 -	if ((uint16) *v > td->td_samplesperpixel)
 -		return 0;
 -	va = va_arg(ap, uint16*);
 -	if (*v > 0 && va == NULL)		/* typically missing param */
 -		return 0;
 -	for (i = 0; i < *v; i++) {
 -		if (va[i] > EXTRASAMPLE_UNASSALPHA) {
 -			/*
 -			 * XXX: Corel Draw is known to produce incorrect
 -			 * ExtraSamples tags which must be patched here if we
 -			 * want to be able to open some of the damaged TIFF
 -			 * files: 
 -			 */
 -			if (va[i] == EXTRASAMPLE_COREL_UNASSALPHA)
 -				va[i] = EXTRASAMPLE_UNASSALPHA;
 -			else
 -				return 0;
 -		}
 -	}
 -	td->td_extrasamples = (uint16) *v;
 -	_TIFFsetShortArray(&td->td_sampleinfo, va, td->td_extrasamples);
 -	return 1;
 -
 -#undef EXTRASAMPLE_COREL_UNASSALPHA
 -}
 -
 -static uint32
 -checkInkNamesString(TIFF* tif, uint32 slen, const char* s)
 -{
 -	TIFFDirectory* td = &tif->tif_dir;
 -	uint16 i = td->td_samplesperpixel;
 -
 -	if (slen > 0) {
 -		const char* ep = s+slen;
 -		const char* cp = s;
 -		for (; i > 0; i--) {
 -			for (; *cp != '\0'; cp++)
 -				if (cp >= ep)
 -					goto bad;
 -			cp++;				/* skip \0 */
 -		}
 -		return (cp-s);
 -	}
 -bad:
 -	TIFFErrorExt(tif->tif_clientdata, "TIFFSetField",
 -	    "%s: Invalid InkNames value; expecting %d names, found %d",
 -	    tif->tif_name,
 -	    td->td_samplesperpixel,
 -	    td->td_samplesperpixel-i);
 -	return (0);
 -}
 -
 -static int
 -_TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	static const char module[] = "_TIFFVSetField";
 -
 -	TIFFDirectory* td = &tif->tif_dir;
 -	int status = 1;
 -	uint32 v32, i, v;
 -	char* s;
 -
 -	switch (tag) {
 -	case TIFFTAG_SUBFILETYPE:
 -		td->td_subfiletype = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_IMAGEWIDTH:
 -		td->td_imagewidth = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_IMAGELENGTH:
 -		td->td_imagelength = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_BITSPERSAMPLE:
 -		td->td_bitspersample = (uint16) va_arg(ap, int);
 -		/*
 -		 * If the data require post-decoding processing to byte-swap
 -		 * samples, set it up here.  Note that since tags are required
 -		 * to be ordered, compression code can override this behaviour
 -		 * in the setup method if it wants to roll the post decoding
 -		 * work in with its normal work.
 -		 */
 -		if (tif->tif_flags & TIFF_SWAB) {
 -			if (td->td_bitspersample == 8)
 -				tif->tif_postdecode = _TIFFNoPostDecode;
 -			else if (td->td_bitspersample == 16)
 -				tif->tif_postdecode = _TIFFSwab16BitData;
 -			else if (td->td_bitspersample == 24)
 -				tif->tif_postdecode = _TIFFSwab24BitData;
 -			else if (td->td_bitspersample == 32)
 -				tif->tif_postdecode = _TIFFSwab32BitData;
 -			else if (td->td_bitspersample == 64)
 -				tif->tif_postdecode = _TIFFSwab64BitData;
 -			else if (td->td_bitspersample == 128) /* two 64's */
 -				tif->tif_postdecode = _TIFFSwab64BitData;
 -		}
 -		break;
 -	case TIFFTAG_COMPRESSION:
 -		v = va_arg(ap, uint32) & 0xffff;
 -		/*
 -		 * If we're changing the compression scheme, the notify the
 -		 * previous module so that it can cleanup any state it's
 -		 * setup.
 -		 */
 -		if (TIFFFieldSet(tif, FIELD_COMPRESSION)) {
 -			if (td->td_compression == v)
 -				break;
 -			(*tif->tif_cleanup)(tif);
 -			tif->tif_flags &= ~TIFF_CODERSETUP;
 -		}
 -		/*
 -		 * Setup new compression routine state.
 -		 */
 -		if ( (status = TIFFSetCompressionScheme(tif, v)) != 0 )
 -                    td->td_compression = (uint16) v;
 -                else
 -                    status = 0;
 -		break;
 -	case TIFFTAG_PHOTOMETRIC:
 -		td->td_photometric = (uint16) va_arg(ap, int);
 -		break;
 -	case TIFFTAG_THRESHHOLDING:
 -		td->td_threshholding = (uint16) va_arg(ap, int);
 -		break;
 -	case TIFFTAG_FILLORDER:
 -		v = va_arg(ap, uint32);
 -		if (v != FILLORDER_LSB2MSB && v != FILLORDER_MSB2LSB)
 -			goto badvalue;
 -		td->td_fillorder = (uint16) v;
 -		break;
 -	case TIFFTAG_ORIENTATION:
 -		v = va_arg(ap, uint32);
 -		if (v < ORIENTATION_TOPLEFT || ORIENTATION_LEFTBOT < v)
 -			goto badvalue;
 -		else
 -			td->td_orientation = (uint16) v;
 -		break;
 -	case TIFFTAG_SAMPLESPERPIXEL:
 -		/* XXX should cross check -- e.g. if pallette, then 1 */
 -		v = va_arg(ap, uint32);
 -		if (v == 0)
 -			goto badvalue;
 -		td->td_samplesperpixel = (uint16) v;
 -		break;
 -	case TIFFTAG_ROWSPERSTRIP:
 -		v32 = va_arg(ap, uint32);
 -		if (v32 == 0)
 -			goto badvalue32;
 -		td->td_rowsperstrip = v32;
 -		if (!TIFFFieldSet(tif, FIELD_TILEDIMENSIONS)) {
 -			td->td_tilelength = v32;
 -			td->td_tilewidth = td->td_imagewidth;
 -		}
 -		break;
 -	case TIFFTAG_MINSAMPLEVALUE:
 -		td->td_minsamplevalue = (uint16) va_arg(ap, int);
 -		break;
 -	case TIFFTAG_MAXSAMPLEVALUE:
 -		td->td_maxsamplevalue = (uint16) va_arg(ap, int);
 -		break;
 -	case TIFFTAG_SMINSAMPLEVALUE:
 -		td->td_sminsamplevalue = va_arg(ap, double);
 -		break;
 -	case TIFFTAG_SMAXSAMPLEVALUE:
 -		td->td_smaxsamplevalue = va_arg(ap, double);
 -		break;
 -	case TIFFTAG_XRESOLUTION:
 -		td->td_xresolution = (float) va_arg(ap, double);
 -		break;
 -	case TIFFTAG_YRESOLUTION:
 -		td->td_yresolution = (float) va_arg(ap, double);
 -		break;
 -	case TIFFTAG_PLANARCONFIG:
 -		v = va_arg(ap, uint32);
 -		if (v != PLANARCONFIG_CONTIG && v != PLANARCONFIG_SEPARATE)
 -			goto badvalue;
 -		td->td_planarconfig = (uint16) v;
 -		break;
 -	case TIFFTAG_XPOSITION:
 -		td->td_xposition = (float) va_arg(ap, double);
 -		break;
 -	case TIFFTAG_YPOSITION:
 -		td->td_yposition = (float) va_arg(ap, double);
 -		break;
 -	case TIFFTAG_RESOLUTIONUNIT:
 -		v = va_arg(ap, uint32);
 -		if (v < RESUNIT_NONE || RESUNIT_CENTIMETER < v)
 -			goto badvalue;
 -		td->td_resolutionunit = (uint16) v;
 -		break;
 -	case TIFFTAG_PAGENUMBER:
 -		td->td_pagenumber[0] = (uint16) va_arg(ap, int);
 -		td->td_pagenumber[1] = (uint16) va_arg(ap, int);
 -		break;
 -	case TIFFTAG_HALFTONEHINTS:
 -		td->td_halftonehints[0] = (uint16) va_arg(ap, int);
 -		td->td_halftonehints[1] = (uint16) va_arg(ap, int);
 -		break;
 -	case TIFFTAG_COLORMAP:
 -		v32 = (uint32)(1L<<td->td_bitspersample);
 -		_TIFFsetShortArray(&td->td_colormap[0], va_arg(ap, uint16*), v32);
 -		_TIFFsetShortArray(&td->td_colormap[1], va_arg(ap, uint16*), v32);
 -		_TIFFsetShortArray(&td->td_colormap[2], va_arg(ap, uint16*), v32);
 -		break;
 -	case TIFFTAG_EXTRASAMPLES:
 -		if (!setExtraSamples(td, ap, &v))
 -			goto badvalue;
 -		break;
 -	case TIFFTAG_MATTEING:
 -		td->td_extrasamples = (uint16) (va_arg(ap, int) != 0);
 -		if (td->td_extrasamples) {
 -			uint16 sv = EXTRASAMPLE_ASSOCALPHA;
 -			_TIFFsetShortArray(&td->td_sampleinfo, &sv, 1);
 -		}
 -		break;
 -	case TIFFTAG_TILEWIDTH:
 -		v32 = va_arg(ap, uint32);
 -		if (v32 % 16) {
 -			if (tif->tif_mode != O_RDONLY)
 -				goto badvalue32;
 -			TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
 -				"Nonstandard tile width %d, convert file", v32);
 -		}
 -		td->td_tilewidth = v32;
 -		tif->tif_flags |= TIFF_ISTILED;
 -		break;
 -	case TIFFTAG_TILELENGTH:
 -		v32 = va_arg(ap, uint32);
 -		if (v32 % 16) {
 -			if (tif->tif_mode != O_RDONLY)
 -				goto badvalue32;
 -			TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
 -			    "Nonstandard tile length %d, convert file", v32);
 -		}
 -		td->td_tilelength = v32;
 -		tif->tif_flags |= TIFF_ISTILED;
 -		break;
 -	case TIFFTAG_TILEDEPTH:
 -		v32 = va_arg(ap, uint32);
 -		if (v32 == 0)
 -			goto badvalue32;
 -		td->td_tiledepth = v32;
 -		break;
 -	case TIFFTAG_DATATYPE:
 -		v = va_arg(ap, uint32);
 -		switch (v) {
 -		case DATATYPE_VOID:	v = SAMPLEFORMAT_VOID;	break;
 -		case DATATYPE_INT:	v = SAMPLEFORMAT_INT;	break;
 -		case DATATYPE_UINT:	v = SAMPLEFORMAT_UINT;	break;
 -		case DATATYPE_IEEEFP:	v = SAMPLEFORMAT_IEEEFP;break;
 -		default:		goto badvalue;
 -		}
 -		td->td_sampleformat = (uint16) v;
 -		break;
 -	case TIFFTAG_SAMPLEFORMAT:
 -		v = va_arg(ap, uint32);
 -		if (v < SAMPLEFORMAT_UINT || SAMPLEFORMAT_COMPLEXIEEEFP < v)
 -			goto badvalue;
 -		td->td_sampleformat = (uint16) v;
 -
 -                /*  Try to fix up the SWAB function for complex data. */
 -                if ( td->td_sampleformat == SAMPLEFORMAT_COMPLEXINT 
 -                    && td->td_bitspersample == 32
 -                    && tif->tif_postdecode == _TIFFSwab32BitData )
 -                    tif->tif_postdecode = _TIFFSwab16BitData;
 -                else if ( (td->td_sampleformat == SAMPLEFORMAT_COMPLEXINT 
 -                          || td->td_sampleformat == SAMPLEFORMAT_COMPLEXIEEEFP)
 -                         && td->td_bitspersample == 64
 -                         && tif->tif_postdecode == _TIFFSwab64BitData )
 -                    tif->tif_postdecode = _TIFFSwab32BitData;
 -		break;
 -	case TIFFTAG_IMAGEDEPTH:
 -		td->td_imagedepth = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_SUBIFD:
 -		if ((tif->tif_flags & TIFF_INSUBIFD) == 0) {
 -			td->td_nsubifd = (uint16) va_arg(ap, int);
 -			_TIFFsetLongArray(&td->td_subifd, va_arg(ap, uint32*),
 -			    (long) td->td_nsubifd);
 -		} else {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				     "%s: Sorry, cannot nest SubIFDs",
 -				     tif->tif_name);
 -			status = 0;
 -		}
 -		break;
 -	case TIFFTAG_YCBCRPOSITIONING:
 -		td->td_ycbcrpositioning = (uint16) va_arg(ap, int);
 -		break;
 -	case TIFFTAG_YCBCRSUBSAMPLING:
 -		td->td_ycbcrsubsampling[0] = (uint16) va_arg(ap, int);
 -		td->td_ycbcrsubsampling[1] = (uint16) va_arg(ap, int);
 -		break;
 -	case TIFFTAG_TRANSFERFUNCTION:
 -		v = (td->td_samplesperpixel - td->td_extrasamples) > 1 ? 3 : 1;
 -		for (i = 0; i < v; i++)
 -			_TIFFsetShortArray(&td->td_transferfunction[i],
 -			    va_arg(ap, uint16*), 1L<<td->td_bitspersample);
 -		break;
 -	case TIFFTAG_REFERENCEBLACKWHITE:
 -		/* XXX should check for null range */
 -		_TIFFsetFloatArray(&td->td_refblackwhite, va_arg(ap, float*), 6);
 -		break;
 -	case TIFFTAG_INKNAMES:
 -		v = va_arg(ap, uint32);
 -		s = va_arg(ap, char*);
 -		v = checkInkNamesString(tif, v, s);
 -                status = v > 0;
 -		if ( v > 0 ) {
 -			_TIFFsetNString(&td->td_inknames, s, v);
 -			td->td_inknameslen = v;
 -		}
 -		break;
 -        default: {
 -            TIFFTagValue *tv;
 -            int tv_size, iCustom;
 -	    const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);
 -
 -            /*
 -	     * This can happen if multiple images are open with different
 -	     * codecs which have private tags.  The global tag information
 -	     * table may then have tags that are valid for one file but not
 -	     * the other. If the client tries to set a tag that is not valid
 -	     * for the image's codec then we'll arrive here.  This
 -	     * happens, for example, when tiffcp is used to convert between
 -	     * compression schemes and codec-specific tags are blindly copied.
 -             */
 -            if(fip == NULL || fip->field_bit != FIELD_CUSTOM) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "%s: Invalid %stag \"%s\" (not supported by codec)",
 -			     tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "",
 -			     fip ? fip->field_name : "Unknown");
 -		status = 0;
 -		break;
 -            }
 -
 -            /*
 -             * Find the existing entry for this custom value.
 -             */
 -            tv = NULL;
 -            for (iCustom = 0; iCustom < td->td_customValueCount; iCustom++) {
 -		    if (td->td_customValues[iCustom].info->field_tag == tag) {
 -			    tv = td->td_customValues + iCustom;
 -			    if (tv->value != NULL) {
 -				    _TIFFfree(tv->value);
 -				    tv->value = NULL;
 -			    }
 -			    break;
 -		    }
 -            }
 -
 -            /*
 -             * Grow the custom list if the entry was not found.
 -             */
 -            if(tv == NULL) {
 -		TIFFTagValue	*new_customValues;
 -		
 -		td->td_customValueCount++;
 -		new_customValues = (TIFFTagValue *)
 -			_TIFFrealloc(td->td_customValues,
 -				     sizeof(TIFFTagValue) * td->td_customValueCount);
 -		if (!new_customValues) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -		"%s: Failed to allocate space for list of custom values",
 -				  tif->tif_name);
 -			status = 0;
 -			goto end;
 -		}
 -
 -		td->td_customValues = new_customValues;
 -
 -                tv = td->td_customValues + (td->td_customValueCount - 1);
 -                tv->info = fip;
 -                tv->value = NULL;
 -                tv->count = 0;
 -            }
 -
 -            /*
 -             * Set custom value ... save a copy of the custom tag value.
 -             */
 -	    tv_size = _TIFFDataSize(fip->field_type);
 -	    if (tv_size == 0) {
 -		    status = 0;
 -		    TIFFErrorExt(tif->tif_clientdata, module,
 -				 "%s: Bad field type %d for \"%s\"",
 -				 tif->tif_name, fip->field_type,
 -				 fip->field_name);
 -		    goto end;
 -	    }
 -           
 -            if(fip->field_passcount) {
 -		    if (fip->field_writecount == TIFF_VARIABLE2)
 -			tv->count = (uint32) va_arg(ap, uint32);
 -		    else
 -			tv->count = (int) va_arg(ap, int);
 -	    } else if (fip->field_writecount == TIFF_VARIABLE
 -		       || fip->field_writecount == TIFF_VARIABLE2)
 -		tv->count = 1;
 -	    else if (fip->field_writecount == TIFF_SPP)
 -		tv->count = td->td_samplesperpixel;
 -	    else
 -                tv->count = fip->field_writecount;
 -            
 -    
 -	    if (fip->field_type == TIFF_ASCII)
 -		    _TIFFsetString((char **)&tv->value, va_arg(ap, char *));
 -	    else {
 -		tv->value = _TIFFCheckMalloc(tif, tv_size, tv->count,
 -					     "Tag Value");
 -		if (!tv->value) {
 -		    status = 0;
 -		    goto end;
 -		}
 -
 -		if ((fip->field_passcount
 -		    || fip->field_writecount == TIFF_VARIABLE
 -		    || fip->field_writecount == TIFF_VARIABLE2
 -		    || fip->field_writecount == TIFF_SPP
 -		    || tv->count > 1)
 -		    && fip->field_tag != TIFFTAG_PAGENUMBER
 -		    && fip->field_tag != TIFFTAG_HALFTONEHINTS
 -		    && fip->field_tag != TIFFTAG_YCBCRSUBSAMPLING
 -		    && fip->field_tag != TIFFTAG_DOTRANGE) {
 -                    _TIFFmemcpy(tv->value, va_arg(ap, void *),
 -				tv->count * tv_size);
 -		} else {
 -		    /*
 -		     * XXX: The following loop required to handle
 -		     * TIFFTAG_PAGENUMBER, TIFFTAG_HALFTONEHINTS,
 -		     * TIFFTAG_YCBCRSUBSAMPLING and TIFFTAG_DOTRANGE tags.
 -		     * These tags are actually arrays and should be passed as
 -		     * array pointers to TIFFSetField() function, but actually
 -		     * passed as a list of separate values. This behaviour
 -		     * must be changed in the future!
 -		     */
 -		    int i;
 -		    char *val = (char *)tv->value;
 -
 -		    for (i = 0; i < tv->count; i++, val += tv_size) {
 -			    switch (fip->field_type) {
 -				case TIFF_BYTE:
 -				case TIFF_UNDEFINED:
 -				    {
 -					uint8 v = (uint8)va_arg(ap, int);
 -					_TIFFmemcpy(val, &v, tv_size);
 -				    }
 -				    break;
 -				case TIFF_SBYTE:
 -				    {
 -					int8 v = (int8)va_arg(ap, int);
 -					_TIFFmemcpy(val, &v, tv_size);
 -				    }
 -				    break;
 -				case TIFF_SHORT:
 -				    {
 -					uint16 v = (uint16)va_arg(ap, int);
 -					_TIFFmemcpy(val, &v, tv_size);
 -				    }
 -				    break;
 -				case TIFF_SSHORT:
 -				    {
 -					int16 v = (int16)va_arg(ap, int);
 -					_TIFFmemcpy(val, &v, tv_size);
 -				    }
 -				    break;
 -				case TIFF_LONG:
 -				case TIFF_IFD:
 -				    {
 -					uint32 v = va_arg(ap, uint32);
 -					_TIFFmemcpy(val, &v, tv_size);
 -				    }
 -				    break;
 -				case TIFF_SLONG:
 -				    {
 -					int32 v = va_arg(ap, int32);
 -					_TIFFmemcpy(val, &v, tv_size);
 -				    }
 -				    break;
 -				case TIFF_RATIONAL:
 -				case TIFF_SRATIONAL:
 -				case TIFF_FLOAT:
 -				    {
 -					float v = (float)va_arg(ap, double);
 -					_TIFFmemcpy(val, &v, tv_size);
 -				    }
 -				    break;
 -				case TIFF_DOUBLE:
 -				    {
 -					double v = va_arg(ap, double);
 -					_TIFFmemcpy(val, &v, tv_size);
 -				    }
 -				    break;
 -				default:
 -				    _TIFFmemset(val, 0, tv_size);
 -				    status = 0;
 -				    break;
 -			    }
 -		    }
 -		}
 -	    }
 -          }
 -	}
 -	if (status) {
 -		TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);
 -		tif->tif_flags |= TIFF_DIRTYDIRECT;
 -	}
 -
 -end:
 -	va_end(ap);
 -	return (status);
 -badvalue:
 -	TIFFErrorExt(tif->tif_clientdata, module,
 -		     "%s: Bad value %d for \"%s\" tag",
 -		     tif->tif_name, v,
 -		     _TIFFFieldWithTag(tif, tag)->field_name);
 -	va_end(ap);
 -	return (0);
 -badvalue32:
 -	TIFFErrorExt(tif->tif_clientdata, module,
 -		     "%s: Bad value %u for \"%s\" tag",
 -		     tif->tif_name, v32,
 -		     _TIFFFieldWithTag(tif, tag)->field_name);
 -	va_end(ap);
 -	return (0);
 -}
 -
 -/*
 - * Return 1/0 according to whether or not
 - * it is permissible to set the tag's value.
 - * Note that we allow ImageLength to be changed
 - * so that we can append and extend to images.
 - * Any other tag may not be altered once writing
 - * has commenced, unless its value has no effect
 - * on the format of the data that is written.
 - */
 -static int
 -OkToChangeTag(TIFF* tif, ttag_t tag)
 -{
 -	const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);
 -	if (!fip) {			/* unknown tag */
 -		TIFFErrorExt(tif->tif_clientdata, "TIFFSetField", "%s: Unknown %stag %u",
 -		    tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "", tag);
 -		return (0);
 -	}
 -	if (tag != TIFFTAG_IMAGELENGTH && (tif->tif_flags & TIFF_BEENWRITING) &&
 -	    !fip->field_oktochange) {
 -		/*
 -		 * Consult info table to see if tag can be changed
 -		 * after we've started writing.  We only allow changes
 -		 * to those tags that don't/shouldn't affect the
 -		 * compression and/or format of the data.
 -		 */
 -		TIFFErrorExt(tif->tif_clientdata, "TIFFSetField",
 -		    "%s: Cannot modify tag \"%s\" while writing",
 -		    tif->tif_name, fip->field_name);
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Record the value of a field in the
 - * internal directory structure.  The
 - * field will be written to the file
 - * when/if the directory structure is
 - * updated.
 - */
 -int
 -TIFFSetField(TIFF* tif, ttag_t tag, ...)
 -{
 -	va_list ap;
 -	int status;
 -
 -	va_start(ap, tag);
 -	status = TIFFVSetField(tif, tag, ap);
 -	va_end(ap);
 -	return (status);
 -}
 -
 -/*
 - * Like TIFFSetField, but taking a varargs
 - * parameter list.  This routine is useful
 - * for building higher-level interfaces on
 - * top of the library.
 - */
 -int
 -TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	return OkToChangeTag(tif, tag) ?
 -	    (*tif->tif_tagmethods.vsetfield)(tif, tag, ap) : 0;
 -}
 -
 -static int
 -_TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -    TIFFDirectory* td = &tif->tif_dir;
 -    int            ret_val = 1;
 -
 -    switch (tag) {
 -	case TIFFTAG_SUBFILETYPE:
 -            *va_arg(ap, uint32*) = td->td_subfiletype;
 -            break;
 -	case TIFFTAG_IMAGEWIDTH:
 -            *va_arg(ap, uint32*) = td->td_imagewidth;
 -            break;
 -	case TIFFTAG_IMAGELENGTH:
 -            *va_arg(ap, uint32*) = td->td_imagelength;
 -            break;
 -	case TIFFTAG_BITSPERSAMPLE:
 -            *va_arg(ap, uint16*) = td->td_bitspersample;
 -            break;
 -	case TIFFTAG_COMPRESSION:
 -            *va_arg(ap, uint16*) = td->td_compression;
 -            break;
 -	case TIFFTAG_PHOTOMETRIC:
 -            *va_arg(ap, uint16*) = td->td_photometric;
 -            break;
 -	case TIFFTAG_THRESHHOLDING:
 -            *va_arg(ap, uint16*) = td->td_threshholding;
 -            break;
 -	case TIFFTAG_FILLORDER:
 -            *va_arg(ap, uint16*) = td->td_fillorder;
 -            break;
 -	case TIFFTAG_ORIENTATION:
 -            *va_arg(ap, uint16*) = td->td_orientation;
 -            break;
 -	case TIFFTAG_SAMPLESPERPIXEL:
 -            *va_arg(ap, uint16*) = td->td_samplesperpixel;
 -            break;
 -	case TIFFTAG_ROWSPERSTRIP:
 -            *va_arg(ap, uint32*) = td->td_rowsperstrip;
 -            break;
 -	case TIFFTAG_MINSAMPLEVALUE:
 -            *va_arg(ap, uint16*) = td->td_minsamplevalue;
 -            break;
 -	case TIFFTAG_MAXSAMPLEVALUE:
 -            *va_arg(ap, uint16*) = td->td_maxsamplevalue;
 -            break;
 -	case TIFFTAG_SMINSAMPLEVALUE:
 -            *va_arg(ap, double*) = td->td_sminsamplevalue;
 -            break;
 -	case TIFFTAG_SMAXSAMPLEVALUE:
 -            *va_arg(ap, double*) = td->td_smaxsamplevalue;
 -            break;
 -	case TIFFTAG_XRESOLUTION:
 -            *va_arg(ap, float*) = td->td_xresolution;
 -            break;
 -	case TIFFTAG_YRESOLUTION:
 -            *va_arg(ap, float*) = td->td_yresolution;
 -            break;
 -	case TIFFTAG_PLANARCONFIG:
 -            *va_arg(ap, uint16*) = td->td_planarconfig;
 -            break;
 -	case TIFFTAG_XPOSITION:
 -            *va_arg(ap, float*) = td->td_xposition;
 -            break;
 -	case TIFFTAG_YPOSITION:
 -            *va_arg(ap, float*) = td->td_yposition;
 -            break;
 -	case TIFFTAG_RESOLUTIONUNIT:
 -            *va_arg(ap, uint16*) = td->td_resolutionunit;
 -            break;
 -	case TIFFTAG_PAGENUMBER:
 -            *va_arg(ap, uint16*) = td->td_pagenumber[0];
 -            *va_arg(ap, uint16*) = td->td_pagenumber[1];
 -            break;
 -	case TIFFTAG_HALFTONEHINTS:
 -            *va_arg(ap, uint16*) = td->td_halftonehints[0];
 -            *va_arg(ap, uint16*) = td->td_halftonehints[1];
 -            break;
 -	case TIFFTAG_COLORMAP:
 -            *va_arg(ap, uint16**) = td->td_colormap[0];
 -            *va_arg(ap, uint16**) = td->td_colormap[1];
 -            *va_arg(ap, uint16**) = td->td_colormap[2];
 -            break;
 -	case TIFFTAG_STRIPOFFSETS:
 -	case TIFFTAG_TILEOFFSETS:
 -            *va_arg(ap, uint32**) = td->td_stripoffset;
 -            break;
 -	case TIFFTAG_STRIPBYTECOUNTS:
 -	case TIFFTAG_TILEBYTECOUNTS:
 -            *va_arg(ap, uint32**) = td->td_stripbytecount;
 -            break;
 -	case TIFFTAG_MATTEING:
 -            *va_arg(ap, uint16*) =
 -                (td->td_extrasamples == 1 &&
 -                 td->td_sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA);
 -            break;
 -	case TIFFTAG_EXTRASAMPLES:
 -            *va_arg(ap, uint16*) = td->td_extrasamples;
 -            *va_arg(ap, uint16**) = td->td_sampleinfo;
 -            break;
 -	case TIFFTAG_TILEWIDTH:
 -            *va_arg(ap, uint32*) = td->td_tilewidth;
 -            break;
 -	case TIFFTAG_TILELENGTH:
 -            *va_arg(ap, uint32*) = td->td_tilelength;
 -            break;
 -	case TIFFTAG_TILEDEPTH:
 -            *va_arg(ap, uint32*) = td->td_tiledepth;
 -            break;
 -	case TIFFTAG_DATATYPE:
 -            switch (td->td_sampleformat) {
 -		case SAMPLEFORMAT_UINT:
 -                    *va_arg(ap, uint16*) = DATATYPE_UINT;
 -                    break;
 -		case SAMPLEFORMAT_INT:
 -                    *va_arg(ap, uint16*) = DATATYPE_INT;
 -                    break;
 -		case SAMPLEFORMAT_IEEEFP:
 -                    *va_arg(ap, uint16*) = DATATYPE_IEEEFP;
 -                    break;
 -		case SAMPLEFORMAT_VOID:
 -                    *va_arg(ap, uint16*) = DATATYPE_VOID;
 -                    break;
 -            }
 -            break;
 -	case TIFFTAG_SAMPLEFORMAT:
 -            *va_arg(ap, uint16*) = td->td_sampleformat;
 -            break;
 -	case TIFFTAG_IMAGEDEPTH:
 -            *va_arg(ap, uint32*) = td->td_imagedepth;
 -            break;
 -	case TIFFTAG_SUBIFD:
 -            *va_arg(ap, uint16*) = td->td_nsubifd;
 -            *va_arg(ap, uint32**) = td->td_subifd;
 -            break;
 -	case TIFFTAG_YCBCRPOSITIONING:
 -            *va_arg(ap, uint16*) = td->td_ycbcrpositioning;
 -            break;
 -	case TIFFTAG_YCBCRSUBSAMPLING:
 -            *va_arg(ap, uint16*) = td->td_ycbcrsubsampling[0];
 -            *va_arg(ap, uint16*) = td->td_ycbcrsubsampling[1];
 -            break;
 -	case TIFFTAG_TRANSFERFUNCTION:
 -            *va_arg(ap, uint16**) = td->td_transferfunction[0];
 -            if (td->td_samplesperpixel - td->td_extrasamples > 1) {
 -                *va_arg(ap, uint16**) = td->td_transferfunction[1];
 -                *va_arg(ap, uint16**) = td->td_transferfunction[2];
 -            }
 -            break;
 -	case TIFFTAG_REFERENCEBLACKWHITE:
 -	    *va_arg(ap, float**) = td->td_refblackwhite;
 -	    break;
 -	case TIFFTAG_INKNAMES:
 -            *va_arg(ap, char**) = td->td_inknames;
 -            break;
 -        default:
 -        {
 -            const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);
 -            int           i;
 -            
 -            /*
 -	     * This can happen if multiple images are open with different
 -	     * codecs which have private tags.  The global tag information
 -	     * table may then have tags that are valid for one file but not
 -	     * the other. If the client tries to get a tag that is not valid
 -	     * for the image's codec then we'll arrive here.
 -             */
 -            if ( fip == NULL || fip->field_bit != FIELD_CUSTOM )
 -            {
 -		    TIFFErrorExt(tif->tif_clientdata, "_TIFFVGetField",
 -				 "%s: Invalid %stag \"%s\" "
 -				 "(not supported by codec)",
 -				 tif->tif_name,
 -				 isPseudoTag(tag) ? "pseudo-" : "",
 -				 fip ? fip->field_name : "Unknown");
 -		    ret_val = 0;
 -		    break;
 -            }
 -
 -            /*
 -	     * Do we have a custom value?
 -	     */
 -            ret_val = 0;
 -            for (i = 0; i < td->td_customValueCount; i++) {
 -		TIFFTagValue *tv = td->td_customValues + i;
 -
 -		if (tv->info->field_tag != tag)
 -			continue;
 -                
 -		if (fip->field_passcount) {
 -			if (fip->field_readcount == TIFF_VARIABLE2) 
 -				*va_arg(ap, uint32*) = (uint32)tv->count;
 -			else	/* Assume TIFF_VARIABLE */
 -				*va_arg(ap, uint16*) = (uint16)tv->count;
 -			*va_arg(ap, void **) = tv->value;
 -			ret_val = 1;
 -                } else {
 -			if ((fip->field_type == TIFF_ASCII
 -			    || fip->field_readcount == TIFF_VARIABLE
 -			    || fip->field_readcount == TIFF_VARIABLE2
 -			    || fip->field_readcount == TIFF_SPP
 -			    || tv->count > 1)
 -			    && fip->field_tag != TIFFTAG_PAGENUMBER
 -			    && fip->field_tag != TIFFTAG_HALFTONEHINTS
 -			    && fip->field_tag != TIFFTAG_YCBCRSUBSAMPLING
 -			    && fip->field_tag != TIFFTAG_DOTRANGE) {
 -				*va_arg(ap, void **) = tv->value;
 -				ret_val = 1;
 -			} else {
 -			    int j;
 -			    char *val = (char *)tv->value;
 -
 -			    for (j = 0; j < tv->count;
 -				 j++, val += _TIFFDataSize(tv->info->field_type)) {
 -				switch (fip->field_type) {
 -					case TIFF_BYTE:
 -					case TIFF_UNDEFINED:
 -						*va_arg(ap, uint8*) =
 -							*(uint8 *)val;
 -						ret_val = 1;
 -						break;
 -					case TIFF_SBYTE:
 -						*va_arg(ap, int8*) =
 -							*(int8 *)val;
 -						ret_val = 1;
 -						break;
 -					case TIFF_SHORT:
 -						*va_arg(ap, uint16*) =
 -							*(uint16 *)val;
 -						ret_val = 1;
 -						break;
 -					case TIFF_SSHORT:
 -						*va_arg(ap, int16*) =
 -							*(int16 *)val;
 -						ret_val = 1;
 -						break;
 -					case TIFF_LONG:
 -					case TIFF_IFD:
 -						*va_arg(ap, uint32*) =
 -							*(uint32 *)val;
 -						ret_val = 1;
 -						break;
 -					case TIFF_SLONG:
 -						*va_arg(ap, int32*) =
 -							*(int32 *)val;
 -						ret_val = 1;
 -						break;
 -					case TIFF_RATIONAL:
 -					case TIFF_SRATIONAL:
 -					case TIFF_FLOAT:
 -						*va_arg(ap, float*) =
 -							*(float *)val;
 -						ret_val = 1;
 -						break;
 -					case TIFF_DOUBLE:
 -						*va_arg(ap, double*) =
 -							*(double *)val;
 -						ret_val = 1;
 -						break;
 -					default:
 -						ret_val = 0;
 -						break;
 -				}
 -			    }
 -			}
 -                }
 -		break;
 -            }
 -        }
 -    }
 -    return(ret_val);
 -}
 -
 -/*
 - * Return the value of a field in the
 - * internal directory structure.
 - */
 -int
 -TIFFGetField(TIFF* tif, ttag_t tag, ...)
 -{
 -	int status;
 -	va_list ap;
 -
 -	va_start(ap, tag);
 -	status = TIFFVGetField(tif, tag, ap);
 -	va_end(ap);
 -	return (status);
 -}
 -
 -/*
 - * Like TIFFGetField, but taking a varargs
 - * parameter list.  This routine is useful
 - * for building higher-level interfaces on
 - * top of the library.
 - */
 -int
 -TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);
 -	return (fip && (isPseudoTag(tag) || TIFFFieldSet(tif, fip->field_bit)) ?
 -	    (*tif->tif_tagmethods.vgetfield)(tif, tag, ap) : 0);
 -}
 -
 -#define	CleanupField(member) {		\
 -    if (td->member) {			\
 -	_TIFFfree(td->member);		\
 -	td->member = 0;			\
 -    }					\
 -}
 -
 -/*
 - * Release storage associated with a directory.
 - */
 -void
 -TIFFFreeDirectory(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	int            i;
 -
 -	_TIFFmemset(td->td_fieldsset, 0, FIELD_SETLONGS);
 -	CleanupField(td_colormap[0]);
 -	CleanupField(td_colormap[1]);
 -	CleanupField(td_colormap[2]);
 -	CleanupField(td_sampleinfo);
 -	CleanupField(td_subifd);
 -	CleanupField(td_inknames);
 -	CleanupField(td_refblackwhite);
 -	CleanupField(td_transferfunction[0]);
 -	CleanupField(td_transferfunction[1]);
 -	CleanupField(td_transferfunction[2]);
 -	CleanupField(td_stripoffset);
 -	CleanupField(td_stripbytecount);
 -	TIFFClrFieldBit(tif, FIELD_YCBCRSUBSAMPLING);
 -	TIFFClrFieldBit(tif, FIELD_YCBCRPOSITIONING);
 -
 -	/* Cleanup custom tag values */
 -	for ( i = 0; i < td->td_customValueCount; i++ ) {
 -		if (td->td_customValues[i].value)
 -			_TIFFfree(td->td_customValues[i].value);
 -	}
 -
 -	td->td_customValueCount = 0;
 -	CleanupField(td_customValues);
 -}
 -#undef CleanupField
 -
 -/*
 - * Client Tag extension support (from Niles Ritter).
 - */
 -static TIFFExtendProc _TIFFextender = (TIFFExtendProc) NULL;
 -
 -TIFFExtendProc
 -TIFFSetTagExtender(TIFFExtendProc extender)
 -{
 -	TIFFExtendProc prev = _TIFFextender;
 -	_TIFFextender = extender;
 -	return (prev);
 -}
 -
 -/*
 - * Setup for a new directory.  Should we automatically call
 - * TIFFWriteDirectory() if the current one is dirty?
 - *
 - * The newly created directory will not exist on the file till
 - * TIFFWriteDirectory(), TIFFFlush() or TIFFClose() is called.
 - */
 -int
 -TIFFCreateDirectory(TIFF* tif)
 -{
 -    TIFFDefaultDirectory(tif);
 -    tif->tif_diroff = 0;
 -    tif->tif_nextdiroff = 0;
 -    tif->tif_curoff = 0;
 -    tif->tif_row = (uint32) -1;
 -    tif->tif_curstrip = (tstrip_t) -1;
 -
 -    return 0;
 -}
 -
 -/*
 - * Setup a default directory structure.
 - */
 -int
 -TIFFDefaultDirectory(TIFF* tif)
 -{
 -	register TIFFDirectory* td = &tif->tif_dir;
 -
 -	size_t tiffFieldInfoCount;
 -	const TIFFFieldInfo *tiffFieldInfo =
 -	    _TIFFGetFieldInfo(&tiffFieldInfoCount);
 -	_TIFFSetupFieldInfo(tif, tiffFieldInfo, tiffFieldInfoCount);
 -
 -	_TIFFmemset(td, 0, sizeof (*td));
 -	td->td_fillorder = FILLORDER_MSB2LSB;
 -	td->td_bitspersample = 1;
 -	td->td_threshholding = THRESHHOLD_BILEVEL;
 -	td->td_orientation = ORIENTATION_TOPLEFT;
 -	td->td_samplesperpixel = 1;
 -	td->td_rowsperstrip = (uint32) -1;
 -	td->td_tilewidth = 0;
 -	td->td_tilelength = 0;
 -	td->td_tiledepth = 1;
 -	td->td_stripbytecountsorted = 1; /* Our own arrays always sorted. */
 -	td->td_resolutionunit = RESUNIT_INCH;
 -	td->td_sampleformat = SAMPLEFORMAT_UINT;
 -	td->td_imagedepth = 1;
 -	td->td_ycbcrsubsampling[0] = 2;
 -	td->td_ycbcrsubsampling[1] = 2;
 -	td->td_ycbcrpositioning = YCBCRPOSITION_CENTERED;
 -	tif->tif_postdecode = _TIFFNoPostDecode;
 -	tif->tif_foundfield = NULL;
 -	tif->tif_tagmethods.vsetfield = _TIFFVSetField;
 -	tif->tif_tagmethods.vgetfield = _TIFFVGetField;
 -	tif->tif_tagmethods.printdir = NULL;
 -	/*
 -	 *  Give client code a chance to install their own
 -	 *  tag extensions & methods, prior to compression overloads.
 -	 */
 -	if (_TIFFextender)
 -		(*_TIFFextender)(tif);
 -	(void) TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
 -	/*
 -	 * NB: The directory is marked dirty as a result of setting
 -	 * up the default compression scheme.  However, this really
 -	 * isn't correct -- we want TIFF_DIRTYDIRECT to be set only
 -	 * if the user does something.  We could just do the setup
 -	 * by hand, but it seems better to use the normal mechanism
 -	 * (i.e. TIFFSetField).
 -	 */
 -	tif->tif_flags &= ~TIFF_DIRTYDIRECT;
 -
 -	/*
 -	 * As per http://bugzilla.remotesensing.org/show_bug.cgi?id=19
 -	 * we clear the ISTILED flag when setting up a new directory.
 -	 * Should we also be clearing stuff like INSUBIFD?
 -	 */
 -	tif->tif_flags &= ~TIFF_ISTILED;
 -        /*
 -         * Clear other directory-specific fields.
 -         */
 -        tif->tif_tilesize = -1;
 -        tif->tif_scanlinesize = -1;
 -
 -	return (1);
 -}
 -
 -static int
 -TIFFAdvanceDirectory(TIFF* tif, uint32* nextdir, toff_t* off)
 -{
 -	static const char module[] = "TIFFAdvanceDirectory";
 -	uint16 dircount;
 -	if (isMapped(tif))
 -	{
 -		toff_t poff=*nextdir;
 -		if (poff+sizeof(uint16) > tif->tif_size)
 -		{
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory count",
 -			    tif->tif_name);
 -			return (0);
 -		}
 -		_TIFFmemcpy(&dircount, tif->tif_base+poff, sizeof (uint16));
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabShort(&dircount);
 -		poff+=sizeof (uint16)+dircount*sizeof (TIFFDirEntry);
 -		if (off != NULL)
 -			*off = poff;
 -		if (((toff_t) (poff+sizeof (uint32))) > tif->tif_size)
 -		{
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory link",
 -			    tif->tif_name);
 -			return (0);
 -		}
 -		_TIFFmemcpy(nextdir, tif->tif_base+poff, sizeof (uint32));
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabLong(nextdir);
 -		return (1);
 -	}
 -	else
 -	{
 -		if (!SeekOK(tif, *nextdir) ||
 -		    !ReadOK(tif, &dircount, sizeof (uint16))) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory count",
 -			    tif->tif_name);
 -			return (0);
 -		}
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabShort(&dircount);
 -		if (off != NULL)
 -			*off = TIFFSeekFile(tif,
 -			    dircount*sizeof (TIFFDirEntry), SEEK_CUR);
 -		else
 -			(void) TIFFSeekFile(tif,
 -			    dircount*sizeof (TIFFDirEntry), SEEK_CUR);
 -		if (!ReadOK(tif, nextdir, sizeof (uint32))) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory link",
 -			    tif->tif_name);
 -			return (0);
 -		}
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabLong(nextdir);
 -		return (1);
 -	}
 -}
 -
 -/*
 - * Count the number of directories in a file.
 - */
 -tdir_t
 -TIFFNumberOfDirectories(TIFF* tif)
 -{
 -    toff_t nextdir = tif->tif_header.tiff_diroff;
 -    tdir_t n = 0;
 -    
 -    while (nextdir != 0 && TIFFAdvanceDirectory(tif, &nextdir, NULL))
 -        n++;
 -    return (n);
 -}
 -
 -/*
 - * Set the n-th directory as the current directory.
 - * NB: Directories are numbered starting at 0.
 - */
 -int
 -TIFFSetDirectory(TIFF* tif, tdir_t dirn)
 -{
 -	toff_t nextdir;
 -	tdir_t n;
 -
 -	nextdir = tif->tif_header.tiff_diroff;
 -	for (n = dirn; n > 0 && nextdir != 0; n--)
 -		if (!TIFFAdvanceDirectory(tif, &nextdir, NULL))
 -			return (0);
 -	tif->tif_nextdiroff = nextdir;
 -	/*
 -	 * Set curdir to the actual directory index.  The
 -	 * -1 is because TIFFReadDirectory will increment
 -	 * tif_curdir after successfully reading the directory.
 -	 */
 -	tif->tif_curdir = (dirn - n) - 1;
 -	/*
 -	 * Reset tif_dirnumber counter and start new list of seen directories.
 -	 * We need this to prevent IFD loops.
 -	 */
 -	tif->tif_dirnumber = 0;
 -	return (TIFFReadDirectory(tif));
 -}
 -
 -/*
 - * Set the current directory to be the directory
 - * located at the specified file offset.  This interface
 - * is used mainly to access directories linked with
 - * the SubIFD tag (e.g. thumbnail images).
 - */
 -int
 -TIFFSetSubDirectory(TIFF* tif, uint32 diroff)
 -{
 -	tif->tif_nextdiroff = diroff;
 -	/*
 -	 * Reset tif_dirnumber counter and start new list of seen directories.
 -	 * We need this to prevent IFD loops.
 -	 */
 -	tif->tif_dirnumber = 0;
 -	return (TIFFReadDirectory(tif));
 -}
 -
 -/*
 - * Return file offset of the current directory.
 - */
 -uint32
 -TIFFCurrentDirOffset(TIFF* tif)
 -{
 -	return (tif->tif_diroff);
 -}
 -
 -/*
 - * Return an indication of whether or not we are
 - * at the last directory in the file.
 - */
 -int
 -TIFFLastDirectory(TIFF* tif)
 -{
 -	return (tif->tif_nextdiroff == 0);
 -}
 -
 -/*
 - * Unlink the specified directory from the directory chain.
 - */
 -int
 -TIFFUnlinkDirectory(TIFF* tif, tdir_t dirn)
 -{
 -	static const char module[] = "TIFFUnlinkDirectory";
 -	toff_t nextdir;
 -	toff_t off;
 -	tdir_t n;
 -
 -	if (tif->tif_mode == O_RDONLY) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -                             "Can not unlink directory in read-only file");
 -		return (0);
 -	}
 -	/*
 -	 * Go to the directory before the one we want
 -	 * to unlink and nab the offset of the link
 -	 * field we'll need to patch.
 -	 */
 -	nextdir = tif->tif_header.tiff_diroff;
 -	off = sizeof (uint16) + sizeof (uint16);
 -	for (n = dirn-1; n > 0; n--) {
 -		if (nextdir == 0) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "Directory %d does not exist", dirn);
 -			return (0);
 -		}
 -		if (!TIFFAdvanceDirectory(tif, &nextdir, &off))
 -			return (0);
 -	}
 -	/*
 -	 * Advance to the directory to be unlinked and fetch
 -	 * the offset of the directory that follows.
 -	 */
 -	if (!TIFFAdvanceDirectory(tif, &nextdir, NULL))
 -		return (0);
 -	/*
 -	 * Go back and patch the link field of the preceding
 -	 * directory to point to the offset of the directory
 -	 * that follows.
 -	 */
 -	(void) TIFFSeekFile(tif, off, SEEK_SET);
 -	if (tif->tif_flags & TIFF_SWAB)
 -		TIFFSwabLong(&nextdir);
 -	if (!WriteOK(tif, &nextdir, sizeof (uint32))) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "Error writing directory link");
 -		return (0);
 -	}
 -	/*
 -	 * Leave directory state setup safely.  We don't have
 -	 * facilities for doing inserting and removing directories,
 -	 * so it's safest to just invalidate everything.  This
 -	 * means that the caller can only append to the directory
 -	 * chain.
 -	 */
 -	(*tif->tif_cleanup)(tif);
 -	if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) {
 -		_TIFFfree(tif->tif_rawdata);
 -		tif->tif_rawdata = NULL;
 -		tif->tif_rawcc = 0;
 -	}
 -	tif->tif_flags &= ~(TIFF_BEENWRITING|TIFF_BUFFERSETUP|TIFF_POSTENCODE);
 -	TIFFFreeDirectory(tif);
 -	TIFFDefaultDirectory(tif);
 -	tif->tif_diroff = 0;			/* force link on next write */
 -	tif->tif_nextdiroff = 0;		/* next write must be at end */
 -	tif->tif_curoff = 0;
 -	tif->tif_row = (uint32) -1;
 -	tif->tif_curstrip = (tstrip_t) -1;
 -	return (1);
 -}
 -
 -/*			[BFC]
 - *
 - * Author: Bruce Cameron <cameron@petris.com>
 - *
 - * Set a table of tags that are to be replaced during directory process by the
 - * 'IGNORE' state - or return TRUE/FALSE for the requested tag such that
 - * 'ReadDirectory' can use the stored information.
 - *
 - * FIXME: this is never used properly. Should be removed in the future.
 - */
 -int
 -TIFFReassignTagToIgnore (enum TIFFIgnoreSense task, int TIFFtagID)
 -{
 -    static int TIFFignoretags [FIELD_LAST];
 -    static int tagcount = 0 ;
 -    int		i;					/* Loop index */
 -    int		j;					/* Loop index */
 -
 -    switch (task)
 -    {
 -      case TIS_STORE:
 -        if ( tagcount < (FIELD_LAST - 1) )
 -        {
 -            for ( j = 0 ; j < tagcount ; ++j )
 -            {					/* Do not add duplicate tag */
 -                if ( TIFFignoretags [j] == TIFFtagID )
 -                    return (TRUE) ;
 -            }
 -            TIFFignoretags [tagcount++] = TIFFtagID ;
 -            return (TRUE) ;
 -        }
 -        break ;
 -        
 -      case TIS_EXTRACT:
 -        for ( i = 0 ; i < tagcount ; ++i )
 -        {
 -            if ( TIFFignoretags [i] == TIFFtagID )
 -                return (TRUE) ;
 -        }
 -        break;
 -        
 -      case TIS_EMPTY:
 -        tagcount = 0 ;			/* Clear the list */
 -        return (TRUE) ;
 -        
 -      default:
 -        break;
 -    }
 -    
 -    return (FALSE);
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_dir.h b/plugins/FreeImage/Source/LibTIFF/tif_dir.h deleted file mode 100644 index f642834c44..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_dir.h +++ /dev/null @@ -1,211 +0,0 @@ -/* $Id: tif_dir.h,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#ifndef _TIFFDIR_
 -#define	_TIFFDIR_
 -/*
 - * ``Library-private'' Directory-related Definitions.
 - */
 -
 -/*
 - * Internal format of a TIFF directory entry.
 - */
 -typedef	struct {
 -#define	FIELD_SETLONGS	4
 -	/* bit vector of fields that are set */
 -	unsigned long	td_fieldsset[FIELD_SETLONGS];
 -
 -	uint32  td_imagewidth, td_imagelength, td_imagedepth;
 -	uint32  td_tilewidth, td_tilelength, td_tiledepth;
 -	uint32  td_subfiletype;
 -	uint16  td_bitspersample;
 -	uint16  td_sampleformat;
 -	uint16  td_compression;
 -	uint16  td_photometric;
 -	uint16  td_threshholding;
 -	uint16  td_fillorder;
 -	uint16  td_orientation;
 -	uint16  td_samplesperpixel;
 -	uint32  td_rowsperstrip;
 -	uint16  td_minsamplevalue, td_maxsamplevalue;
 -	double  td_sminsamplevalue, td_smaxsamplevalue;
 -	float   td_xresolution, td_yresolution;
 -	uint16  td_resolutionunit;
 -	uint16  td_planarconfig;
 -	float   td_xposition, td_yposition;
 -	uint16  td_pagenumber[2];
 -	uint16* td_colormap[3];
 -	uint16  td_halftonehints[2];
 -	uint16  td_extrasamples;
 -	uint16* td_sampleinfo;
 -	/* even though the name is misleading, td_stripsperimage is the number
 -	 * of striles (=strips or tiles) per plane, and td_nstrips the total
 -	 * number of striles */
 -	tstrile_t td_stripsperimage;
 -	tstrile_t td_nstrips;            /* size of offset & bytecount arrays */
 -	toff_t* td_stripoffset;
 -	toff_t* td_stripbytecount;	 /* FIXME: it should be tsize_t array */
 -	int     td_stripbytecountsorted; /* is the bytecount array sorted ascending? */
 -	uint16  td_nsubifd;
 -	uint32* td_subifd;
 -	/* YCbCr parameters */
 -	uint16  td_ycbcrsubsampling[2];
 -	uint16  td_ycbcrpositioning;
 -	/* Colorimetry parameters */
 -	float*	td_refblackwhite;
 -	uint16* td_transferfunction[3];
 -	/* CMYK parameters */
 -	int     td_inknameslen;
 -	char*   td_inknames;
 -
 -	int     td_customValueCount;
 -        TIFFTagValue *td_customValues;
 -} TIFFDirectory;
 -
 -/*
 - * Field flags used to indicate fields that have
 - * been set in a directory, and to reference fields
 - * when manipulating a directory.
 - */
 -
 -/*
 - * FIELD_IGNORE is used to signify tags that are to
 - * be processed but otherwise ignored.  This permits
 - * antiquated tags to be quietly read and discarded.
 - * Note that a bit *is* allocated for ignored tags;
 - * this is understood by the directory reading logic
 - * which uses this fact to avoid special-case handling
 - */ 
 -#define	FIELD_IGNORE			0
 -
 -/* multi-item fields */
 -#define	FIELD_IMAGEDIMENSIONS		1
 -#define FIELD_TILEDIMENSIONS		2
 -#define	FIELD_RESOLUTION		3
 -#define	FIELD_POSITION			4
 -
 -/* single-item fields */
 -#define	FIELD_SUBFILETYPE		5
 -#define	FIELD_BITSPERSAMPLE		6
 -#define	FIELD_COMPRESSION		7
 -#define	FIELD_PHOTOMETRIC		8
 -#define	FIELD_THRESHHOLDING		9
 -#define	FIELD_FILLORDER			10
 -#define	FIELD_ORIENTATION		15
 -#define	FIELD_SAMPLESPERPIXEL		16
 -#define	FIELD_ROWSPERSTRIP		17
 -#define	FIELD_MINSAMPLEVALUE		18
 -#define	FIELD_MAXSAMPLEVALUE		19
 -#define	FIELD_PLANARCONFIG		20
 -#define	FIELD_RESOLUTIONUNIT		22
 -#define	FIELD_PAGENUMBER		23
 -#define	FIELD_STRIPBYTECOUNTS		24
 -#define	FIELD_STRIPOFFSETS		25
 -#define	FIELD_COLORMAP			26
 -#define	FIELD_EXTRASAMPLES		31
 -#define FIELD_SAMPLEFORMAT		32
 -#define	FIELD_SMINSAMPLEVALUE		33
 -#define	FIELD_SMAXSAMPLEVALUE		34
 -#define FIELD_IMAGEDEPTH		35
 -#define FIELD_TILEDEPTH			36
 -#define	FIELD_HALFTONEHINTS		37
 -#define FIELD_YCBCRSUBSAMPLING		39
 -#define FIELD_YCBCRPOSITIONING		40
 -#define	FIELD_REFBLACKWHITE		41
 -#define	FIELD_TRANSFERFUNCTION		44
 -#define	FIELD_INKNAMES			46
 -#define	FIELD_SUBIFD			49
 -/*      FIELD_CUSTOM (see tiffio.h)     65 */
 -/* end of support for well-known tags; codec-private tags follow */
 -#define	FIELD_CODEC			66	/* base of codec-private tags */
 -
 -
 -/*
 - * Pseudo-tags don't normally need field bits since they
 - * are not written to an output file (by definition).
 - * The library also has express logic to always query a
 - * codec for a pseudo-tag so allocating a field bit for
 - * one is a waste.   If codec wants to promote the notion
 - * of a pseudo-tag being ``set'' or ``unset'' then it can
 - * do using internal state flags without polluting the
 - * field bit space defined for real tags.
 - */
 -#define	FIELD_PSEUDO			0
 -
 -#define	FIELD_LAST			(32*FIELD_SETLONGS-1)
 -
 -#define	TIFFExtractData(tif, type, v) \
 -    ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \
 -        ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : \
 -	(v) & (tif)->tif_typemask[type]))
 -#define	TIFFInsertData(tif, type, v) \
 -    ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \
 -        ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : \
 -	(v) & (tif)->tif_typemask[type]))
 -
 -
 -#define BITn(n)				(((unsigned long)1L)<<((n)&0x1f)) 
 -#define BITFIELDn(tif, n)		((tif)->tif_dir.td_fieldsset[(n)/32]) 
 -#define TIFFFieldSet(tif, field)	(BITFIELDn(tif, field) & BITn(field)) 
 -#define TIFFSetFieldBit(tif, field)	(BITFIELDn(tif, field) |= BITn(field))
 -#define TIFFClrFieldBit(tif, field)	(BITFIELDn(tif, field) &= ~BITn(field))
 -
 -#define	FieldSet(fields, f)		(fields[(f)/32] & BITn(f))
 -#define	ResetFieldBit(fields, f)	(fields[(f)/32] &= ~BITn(f))
 -
 -#if defined(__cplusplus)
 -extern "C" {
 -#endif
 -extern	const TIFFFieldInfo *_TIFFGetFieldInfo(size_t *);
 -extern	const TIFFFieldInfo *_TIFFGetExifFieldInfo(size_t *);
 -extern	void _TIFFSetupFieldInfo(TIFF*, const TIFFFieldInfo[], size_t);
 -extern	int _TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], int);
 -extern	void _TIFFPrintFieldInfo(TIFF*, FILE*);
 -extern	TIFFDataType _TIFFSampleToTagType(TIFF*);
 -extern  const TIFFFieldInfo* _TIFFFindOrRegisterFieldInfo( TIFF *tif,
 -							   ttag_t tag,
 -							   TIFFDataType dt );
 -extern  TIFFFieldInfo* _TIFFCreateAnonFieldInfo( TIFF *tif, ttag_t tag,
 -                                                 TIFFDataType dt );
 -
 -#define _TIFFFindFieldInfo	    TIFFFindFieldInfo
 -#define _TIFFFindFieldInfoByName    TIFFFindFieldInfoByName
 -#define _TIFFFieldWithTag	    TIFFFieldWithTag
 -#define _TIFFFieldWithName	    TIFFFieldWithName
 -
 -#if defined(__cplusplus)
 -}
 -#endif
 -#endif /* _TIFFDIR_ */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_dirinfo.c b/plugins/FreeImage/Source/LibTIFF/tif_dirinfo.c deleted file mode 100644 index 7b7507a8cb..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_dirinfo.c +++ /dev/null @@ -1,884 +0,0 @@ -/* $Id: tif_dirinfo.c,v 1.38 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Core Directory Tag Support.
 - */
 -#include "tiffiop.h"
 -#include <stdlib.h>
 -#include <string.h>
 -
 -/*
 - * NB: NB: THIS ARRAY IS ASSUMED TO BE SORTED BY TAG.
 - *       If a tag can have both LONG and SHORT types then the LONG must be
 - *       placed before the SHORT for writing to work properly.
 - *
 - * NOTE: The second field (field_readcount) and third field (field_writecount)
 - *       sometimes use the values TIFF_VARIABLE (-1), TIFF_VARIABLE2 (-3)
 - *       and TIFFTAG_SPP (-2). The macros should be used but would throw off 
 - *       the formatting of the code, so please interprete the -1, -2 and -3 
 - *       values accordingly.
 - */
 -static const TIFFFieldInfo
 -tiffFieldInfo[] = {
 -    { TIFFTAG_SUBFILETYPE,	 1, 1,	TIFF_LONG,	FIELD_SUBFILETYPE,
 -      1,	0,	"SubfileType" },
 -/* XXX SHORT for compatibility w/ old versions of the library */
 -    { TIFFTAG_SUBFILETYPE,	 1, 1,	TIFF_SHORT,	FIELD_SUBFILETYPE,
 -      1,	0,	"SubfileType" },
 -    { TIFFTAG_OSUBFILETYPE,	 1, 1,	TIFF_SHORT,	FIELD_SUBFILETYPE,
 -      1,	0,	"OldSubfileType" },
 -    { TIFFTAG_IMAGEWIDTH,	 1, 1,	TIFF_LONG,	FIELD_IMAGEDIMENSIONS,
 -      0,	0,	"ImageWidth" },
 -    { TIFFTAG_IMAGEWIDTH,	 1, 1,	TIFF_SHORT,	FIELD_IMAGEDIMENSIONS,
 -      0,	0,	"ImageWidth" },
 -    { TIFFTAG_IMAGELENGTH,	 1, 1,	TIFF_LONG,	FIELD_IMAGEDIMENSIONS,
 -      1,	0,	"ImageLength" },
 -    { TIFFTAG_IMAGELENGTH,	 1, 1,	TIFF_SHORT,	FIELD_IMAGEDIMENSIONS,
 -      1,	0,	"ImageLength" },
 -    { TIFFTAG_BITSPERSAMPLE,	-1,-1,	TIFF_SHORT,	FIELD_BITSPERSAMPLE,
 -      0,	0,	"BitsPerSample" },
 -/* XXX LONG for compatibility with some broken TIFF writers */
 -    { TIFFTAG_BITSPERSAMPLE,	-1,-1,	TIFF_LONG,	FIELD_BITSPERSAMPLE,
 -      0,	0,	"BitsPerSample" },
 -    { TIFFTAG_COMPRESSION,	-1, 1,	TIFF_SHORT,	FIELD_COMPRESSION,
 -      0,	0,	"Compression" },
 -/* XXX LONG for compatibility with some broken TIFF writers */
 -    { TIFFTAG_COMPRESSION,	-1, 1,	TIFF_LONG,	FIELD_COMPRESSION,
 -      0,	0,	"Compression" },
 -    { TIFFTAG_PHOTOMETRIC,	 1, 1,	TIFF_SHORT,	FIELD_PHOTOMETRIC,
 -      0,	0,	"PhotometricInterpretation" },
 -/* XXX LONG for compatibility with some broken TIFF writers */
 -    { TIFFTAG_PHOTOMETRIC,	 1, 1,	TIFF_LONG,	FIELD_PHOTOMETRIC,
 -      0,	0,	"PhotometricInterpretation" },
 -    { TIFFTAG_THRESHHOLDING,	 1, 1,	TIFF_SHORT,	FIELD_THRESHHOLDING,
 -      1,	0,	"Threshholding" },
 -    { TIFFTAG_CELLWIDTH,	 1, 1,	TIFF_SHORT,	FIELD_IGNORE,
 -      1,	0,	"CellWidth" },
 -    { TIFFTAG_CELLLENGTH,	 1, 1,	TIFF_SHORT,	FIELD_IGNORE,
 -      1,	0,	"CellLength" },
 -    { TIFFTAG_FILLORDER,	 1, 1,	TIFF_SHORT,	FIELD_FILLORDER,
 -      0,	0,	"FillOrder" },
 -    { TIFFTAG_DOCUMENTNAME,	-1,-1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"DocumentName" },
 -    { TIFFTAG_IMAGEDESCRIPTION,	-1,-1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"ImageDescription" },
 -    { TIFFTAG_MAKE,		-1,-1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"Make" },
 -    { TIFFTAG_MODEL,		-1,-1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"Model" },
 -    { TIFFTAG_STRIPOFFSETS,	-1,-1,	TIFF_LONG,	FIELD_STRIPOFFSETS,
 -      0,	0,	"StripOffsets" },
 -    { TIFFTAG_STRIPOFFSETS,	-1,-1,	TIFF_SHORT,	FIELD_STRIPOFFSETS,
 -      0,	0,	"StripOffsets" },
 -    { TIFFTAG_ORIENTATION,	 1, 1,	TIFF_SHORT,	FIELD_ORIENTATION,
 -      0,	0,	"Orientation" },
 -    { TIFFTAG_SAMPLESPERPIXEL,	 1, 1,	TIFF_SHORT,	FIELD_SAMPLESPERPIXEL,
 -      0,	0,	"SamplesPerPixel" },
 -    { TIFFTAG_ROWSPERSTRIP,	 1, 1,	TIFF_LONG,	FIELD_ROWSPERSTRIP,
 -      0,	0,	"RowsPerStrip" },
 -    { TIFFTAG_ROWSPERSTRIP,	 1, 1,	TIFF_SHORT,	FIELD_ROWSPERSTRIP,
 -      0,	0,	"RowsPerStrip" },
 -    { TIFFTAG_STRIPBYTECOUNTS,	-1,-1,	TIFF_LONG,	FIELD_STRIPBYTECOUNTS,
 -      0,	0,	"StripByteCounts" },
 -    { TIFFTAG_STRIPBYTECOUNTS,	-1,-1,	TIFF_SHORT,	FIELD_STRIPBYTECOUNTS,
 -      0,	0,	"StripByteCounts" },
 -    { TIFFTAG_MINSAMPLEVALUE,	-2,-1,	TIFF_SHORT,	FIELD_MINSAMPLEVALUE,
 -      1,	0,	"MinSampleValue" },
 -    { TIFFTAG_MAXSAMPLEVALUE,	-2,-1,	TIFF_SHORT,	FIELD_MAXSAMPLEVALUE,
 -      1,	0,	"MaxSampleValue" },
 -    { TIFFTAG_XRESOLUTION,	 1, 1,	TIFF_RATIONAL,	FIELD_RESOLUTION,
 -      1,	0,	"XResolution" },
 -    { TIFFTAG_YRESOLUTION,	 1, 1,	TIFF_RATIONAL,	FIELD_RESOLUTION,
 -      1,	0,	"YResolution" },
 -    { TIFFTAG_PLANARCONFIG,	 1, 1,	TIFF_SHORT,	FIELD_PLANARCONFIG,
 -      0,	0,	"PlanarConfiguration" },
 -    { TIFFTAG_PAGENAME,		-1,-1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"PageName" },
 -    { TIFFTAG_XPOSITION,	 1, 1,	TIFF_RATIONAL,	FIELD_POSITION,
 -      1,	0,	"XPosition" },
 -    { TIFFTAG_YPOSITION,	 1, 1,	TIFF_RATIONAL,	FIELD_POSITION,
 -      1,	0,	"YPosition" },
 -    { TIFFTAG_FREEOFFSETS,	-1,-1,	TIFF_LONG,	FIELD_IGNORE,
 -      0,	0,	"FreeOffsets" },
 -    { TIFFTAG_FREEBYTECOUNTS,	-1,-1,	TIFF_LONG,	FIELD_IGNORE,
 -      0,	0,	"FreeByteCounts" },
 -    { TIFFTAG_GRAYRESPONSEUNIT,	 1, 1,	TIFF_SHORT,	FIELD_IGNORE,
 -      1,	0,	"GrayResponseUnit" },
 -    { TIFFTAG_GRAYRESPONSECURVE,-1,-1,	TIFF_SHORT,	FIELD_IGNORE,
 -      1,	0,	"GrayResponseCurve" },
 -    { TIFFTAG_RESOLUTIONUNIT,	 1, 1,	TIFF_SHORT,	FIELD_RESOLUTIONUNIT,
 -      1,	0,	"ResolutionUnit" },
 -    { TIFFTAG_PAGENUMBER,	 2, 2,	TIFF_SHORT,	FIELD_PAGENUMBER,
 -      1,	0,	"PageNumber" },
 -    { TIFFTAG_COLORRESPONSEUNIT, 1, 1,	TIFF_SHORT,	FIELD_IGNORE,
 -      1,	0,	"ColorResponseUnit" },
 -    { TIFFTAG_TRANSFERFUNCTION,	-1,-1,	TIFF_SHORT,	FIELD_TRANSFERFUNCTION,
 -      1,	0,	"TransferFunction" },
 -    { TIFFTAG_SOFTWARE,		-1,-1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"Software" },
 -    { TIFFTAG_DATETIME,		20,20,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"DateTime" },
 -    { TIFFTAG_ARTIST,		-1,-1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"Artist" },
 -    { TIFFTAG_HOSTCOMPUTER,	-1,-1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"HostComputer" },
 -    { TIFFTAG_WHITEPOINT,	 2, 2,	TIFF_RATIONAL,	FIELD_CUSTOM,
 -      1,	0,	"WhitePoint" },
 -    { TIFFTAG_PRIMARYCHROMATICITIES,6,6,TIFF_RATIONAL,	FIELD_CUSTOM,
 -      1,	0,	"PrimaryChromaticities" },
 -    { TIFFTAG_COLORMAP,		-1,-1,	TIFF_SHORT,	FIELD_COLORMAP,
 -      1,	0,	"ColorMap" },
 -    { TIFFTAG_HALFTONEHINTS,	 2, 2,	TIFF_SHORT,	FIELD_HALFTONEHINTS,
 -      1,	0,	"HalftoneHints" },
 -    { TIFFTAG_TILEWIDTH,	 1, 1,	TIFF_LONG,	FIELD_TILEDIMENSIONS,
 -      0,	0,	"TileWidth" },
 -    { TIFFTAG_TILEWIDTH,	 1, 1,	TIFF_SHORT,	FIELD_TILEDIMENSIONS,
 -      0,	0,	"TileWidth" },
 -    { TIFFTAG_TILELENGTH,	 1, 1,	TIFF_LONG,	FIELD_TILEDIMENSIONS,
 -      0,	0,	"TileLength" },
 -    { TIFFTAG_TILELENGTH,	 1, 1,	TIFF_SHORT,	FIELD_TILEDIMENSIONS,
 -      0,	0,	"TileLength" },
 -    { TIFFTAG_TILEOFFSETS,	-1, 1,	TIFF_LONG,	FIELD_STRIPOFFSETS,
 -      0,	0,	"TileOffsets" },
 -    { TIFFTAG_TILEBYTECOUNTS,	-1, 1,	TIFF_LONG,	FIELD_STRIPBYTECOUNTS,
 -      0,	0,	"TileByteCounts" },
 -    { TIFFTAG_TILEBYTECOUNTS,	-1, 1,	TIFF_SHORT,	FIELD_STRIPBYTECOUNTS,
 -      0,	0,	"TileByteCounts" },
 -    { TIFFTAG_SUBIFD,		-1,-1,	TIFF_IFD,	FIELD_SUBIFD,
 -      1,	1,	"SubIFD" },
 -    { TIFFTAG_SUBIFD,		-1,-1,	TIFF_LONG,	FIELD_SUBIFD,
 -      1,	1,	"SubIFD" },
 -    { TIFFTAG_INKSET,		 1, 1,	TIFF_SHORT,	FIELD_CUSTOM,
 -      0,	0,	"InkSet" },
 -    { TIFFTAG_INKNAMES,		-1,-1,	TIFF_ASCII,	FIELD_INKNAMES,
 -      1,	1,	"InkNames" },
 -    { TIFFTAG_NUMBEROFINKS,	 1, 1,	TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"NumberOfInks" },
 -    { TIFFTAG_DOTRANGE,		 2, 2,	TIFF_SHORT,	FIELD_CUSTOM,
 -      0,	0,	"DotRange" },
 -    { TIFFTAG_DOTRANGE,		 2, 2,	TIFF_BYTE,	FIELD_CUSTOM,
 -      0,	0,	"DotRange" },
 -    { TIFFTAG_TARGETPRINTER,	-1,-1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"TargetPrinter" },
 -    { TIFFTAG_EXTRASAMPLES,	-1,-1,	TIFF_SHORT,	FIELD_EXTRASAMPLES,
 -      0,	1,	"ExtraSamples" },
 -/* XXX for bogus Adobe Photoshop v2.5 files */
 -    { TIFFTAG_EXTRASAMPLES,	-1,-1,	TIFF_BYTE,	FIELD_EXTRASAMPLES,
 -      0,	1,	"ExtraSamples" },
 -    { TIFFTAG_SAMPLEFORMAT,	-1,-1,	TIFF_SHORT,	FIELD_SAMPLEFORMAT,
 -      0,	0,	"SampleFormat" },
 -    { TIFFTAG_SMINSAMPLEVALUE,	-2,-1,	TIFF_ANY,	FIELD_SMINSAMPLEVALUE,
 -      1,	0,	"SMinSampleValue" },
 -    { TIFFTAG_SMAXSAMPLEVALUE,	-2,-1,	TIFF_ANY,	FIELD_SMAXSAMPLEVALUE,
 -      1,	0,	"SMaxSampleValue" },
 -    { TIFFTAG_CLIPPATH,		-1, -3, TIFF_BYTE,	FIELD_CUSTOM,
 -      0,	1,	"ClipPath" },
 -    { TIFFTAG_XCLIPPATHUNITS,	 1, 1,	TIFF_SLONG,	FIELD_CUSTOM,
 -      0,	0,	"XClipPathUnits" },
 -    { TIFFTAG_XCLIPPATHUNITS,	 1, 1,	TIFF_SSHORT,	FIELD_CUSTOM,
 -      0,	0,	"XClipPathUnits" },
 -    { TIFFTAG_XCLIPPATHUNITS,	 1, 1,	TIFF_SBYTE,	FIELD_CUSTOM,
 -      0,	0,	"XClipPathUnits" },
 -    { TIFFTAG_YCLIPPATHUNITS,	 1, 1,	TIFF_SLONG,	FIELD_CUSTOM,
 -      0,	0,	"YClipPathUnits" },
 -    { TIFFTAG_YCLIPPATHUNITS,	 1, 1,	TIFF_SSHORT,	FIELD_CUSTOM,
 -      0,	0,	"YClipPathUnits" },
 -    { TIFFTAG_YCLIPPATHUNITS,	 1, 1,	TIFF_SBYTE,	FIELD_CUSTOM,
 -      0,	0,	"YClipPathUnits" },
 -    { TIFFTAG_YCBCRCOEFFICIENTS, 3, 3,	TIFF_RATIONAL,	FIELD_CUSTOM,
 -      0,	0,	"YCbCrCoefficients" },
 -    { TIFFTAG_YCBCRSUBSAMPLING,	 2, 2,	TIFF_SHORT,	FIELD_YCBCRSUBSAMPLING,
 -      0,	0,	"YCbCrSubsampling" },
 -    { TIFFTAG_YCBCRPOSITIONING,	 1, 1,	TIFF_SHORT,	FIELD_YCBCRPOSITIONING,
 -      0,	0,	"YCbCrPositioning" },
 -    { TIFFTAG_REFERENCEBLACKWHITE, 6, 6, TIFF_RATIONAL,	FIELD_REFBLACKWHITE,
 -      1,	0,	"ReferenceBlackWhite" },
 -/* XXX temporarily accept LONG for backwards compatibility */
 -    { TIFFTAG_REFERENCEBLACKWHITE, 6, 6, TIFF_LONG,	FIELD_REFBLACKWHITE,
 -      1,	0,	"ReferenceBlackWhite" },
 -    { TIFFTAG_XMLPACKET,	-3,-3,	TIFF_BYTE,	FIELD_CUSTOM,
 -      0,	1,	"XMLPacket" },
 -/* begin SGI tags */
 -    { TIFFTAG_MATTEING,		 1, 1,	TIFF_SHORT,	FIELD_EXTRASAMPLES,
 -      0,	0,	"Matteing" },
 -    { TIFFTAG_DATATYPE,		-2,-1,	TIFF_SHORT,	FIELD_SAMPLEFORMAT,
 -      0,	0,	"DataType" },
 -    { TIFFTAG_IMAGEDEPTH,	 1, 1,	TIFF_LONG,	FIELD_IMAGEDEPTH,
 -      0,	0,	"ImageDepth" },
 -    { TIFFTAG_IMAGEDEPTH,	 1, 1,	TIFF_SHORT,	FIELD_IMAGEDEPTH,
 -      0,	0,	"ImageDepth" },
 -    { TIFFTAG_TILEDEPTH,	 1, 1,	TIFF_LONG,	FIELD_TILEDEPTH,
 -      0,	0,	"TileDepth" },
 -    { TIFFTAG_TILEDEPTH,	 1, 1,	TIFF_SHORT,	FIELD_TILEDEPTH,
 -      0,	0,	"TileDepth" },
 -/* end SGI tags */
 -/* begin Pixar tags */
 -    { TIFFTAG_PIXAR_IMAGEFULLWIDTH,  1, 1, TIFF_LONG,	FIELD_CUSTOM,
 -      1,	0,	"ImageFullWidth" },
 -    { TIFFTAG_PIXAR_IMAGEFULLLENGTH, 1, 1, TIFF_LONG,	FIELD_CUSTOM,
 -      1,	0,	"ImageFullLength" },
 -    { TIFFTAG_PIXAR_TEXTUREFORMAT,  -1, -1, TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"TextureFormat" },
 -    { TIFFTAG_PIXAR_WRAPMODES,	    -1, -1, TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"TextureWrapModes" },
 -    { TIFFTAG_PIXAR_FOVCOT,	     1, 1, TIFF_FLOAT,	FIELD_CUSTOM,
 -      1,	0,	"FieldOfViewCotangent" },
 -    { TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN,	16,16,	TIFF_FLOAT,
 -      FIELD_CUSTOM,	1,	0,	"MatrixWorldToScreen" },
 -    { TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA,	16,16,	TIFF_FLOAT,
 -       FIELD_CUSTOM,	1,	0,	"MatrixWorldToCamera" },
 -    { TIFFTAG_COPYRIGHT,	-1, -1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"Copyright" },
 -/* end Pixar tags */
 -    { TIFFTAG_RICHTIFFIPTC, -3, -3,	TIFF_LONG,	FIELD_CUSTOM, 
 -      0,    1,   "RichTIFFIPTC" },
 -    { TIFFTAG_PHOTOSHOP,    -3, -3,	TIFF_BYTE,	FIELD_CUSTOM, 
 -      0,    1,   "Photoshop" },
 -    { TIFFTAG_EXIFIFD,		1, 1,	TIFF_LONG,	FIELD_CUSTOM,
 -      0,	0,	"EXIFIFDOffset" },
 -    { TIFFTAG_ICCPROFILE,	-3, -3,	TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      0,	1,	"ICC Profile" },
 -    { TIFFTAG_GPSIFD,		1, 1,	TIFF_LONG,	FIELD_CUSTOM,
 -      0,	0,	"GPSIFDOffset" },
 -    { TIFFTAG_STONITS,		 1, 1,	TIFF_DOUBLE,	FIELD_CUSTOM,
 -      0,	0,	"StoNits" },
 -    { TIFFTAG_INTEROPERABILITYIFD, 1, 1, TIFF_LONG,	FIELD_CUSTOM,
 -      0,	0,	"InteroperabilityIFDOffset" },
 -/* begin DNG tags */
 -    { TIFFTAG_DNGVERSION,	4, 4,	TIFF_BYTE,	FIELD_CUSTOM, 
 -      0,	0,	"DNGVersion" },
 -    { TIFFTAG_DNGBACKWARDVERSION, 4, 4,	TIFF_BYTE,	FIELD_CUSTOM, 
 -      0,	0,	"DNGBackwardVersion" },
 -    { TIFFTAG_UNIQUECAMERAMODEL,    -1, -1, TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"UniqueCameraModel" },
 -    { TIFFTAG_LOCALIZEDCAMERAMODEL, -1, -1, TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"LocalizedCameraModel" },
 -    { TIFFTAG_LOCALIZEDCAMERAMODEL, -1, -1, TIFF_BYTE,	FIELD_CUSTOM,
 -      1,	1,	"LocalizedCameraModel" },
 -    { TIFFTAG_CFAPLANECOLOR,	-1, -1,	TIFF_BYTE,	FIELD_CUSTOM, 
 -      0,	1,	"CFAPlaneColor" },
 -    { TIFFTAG_CFALAYOUT,	1, 1,	TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	0,	"CFALayout" },
 -    { TIFFTAG_LINEARIZATIONTABLE, -1, -1, TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	1,	"LinearizationTable" },
 -    { TIFFTAG_BLACKLEVELREPEATDIM, 2, 2, TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	0,	"BlackLevelRepeatDim" },
 -    { TIFFTAG_BLACKLEVEL,	-1, -1,	TIFF_LONG,	FIELD_CUSTOM, 
 -      0,	1,	"BlackLevel" },
 -    { TIFFTAG_BLACKLEVEL,	-1, -1,	TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	1,	"BlackLevel" },
 -    { TIFFTAG_BLACKLEVEL,	-1, -1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"BlackLevel" },
 -    { TIFFTAG_BLACKLEVELDELTAH,	-1, -1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"BlackLevelDeltaH" },
 -    { TIFFTAG_BLACKLEVELDELTAV,	-1, -1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"BlackLevelDeltaV" },
 -    { TIFFTAG_WHITELEVEL,	-2, -2,	TIFF_LONG,	FIELD_CUSTOM, 
 -      0,	0,	"WhiteLevel" },
 -    { TIFFTAG_WHITELEVEL,	-2, -2,	TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	0,	"WhiteLevel" },
 -    { TIFFTAG_DEFAULTSCALE,	2, 2,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"DefaultScale" },
 -    { TIFFTAG_BESTQUALITYSCALE,	1, 1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"BestQualityScale" },
 -    { TIFFTAG_DEFAULTCROPORIGIN,	2, 2,	TIFF_LONG,	FIELD_CUSTOM, 
 -      0,	0,	"DefaultCropOrigin" },
 -    { TIFFTAG_DEFAULTCROPORIGIN,	2, 2,	TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	0,	"DefaultCropOrigin" },
 -    { TIFFTAG_DEFAULTCROPORIGIN,	2, 2,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"DefaultCropOrigin" },
 -    { TIFFTAG_DEFAULTCROPSIZE,	2, 2,	TIFF_LONG,	FIELD_CUSTOM, 
 -      0,	0,	"DefaultCropSize" },
 -    { TIFFTAG_DEFAULTCROPSIZE,	2, 2,	TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	0,	"DefaultCropSize" },
 -    { TIFFTAG_DEFAULTCROPSIZE,	2, 2,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"DefaultCropSize" },
 -    { TIFFTAG_COLORMATRIX1,	-1, -1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"ColorMatrix1" },
 -    { TIFFTAG_COLORMATRIX2,	-1, -1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"ColorMatrix2" },
 -    { TIFFTAG_CAMERACALIBRATION1,	-1, -1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"CameraCalibration1" },
 -    { TIFFTAG_CAMERACALIBRATION2,	-1, -1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"CameraCalibration2" },
 -    { TIFFTAG_REDUCTIONMATRIX1,	-1, -1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"ReductionMatrix1" },
 -    { TIFFTAG_REDUCTIONMATRIX2,	-1, -1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"ReductionMatrix2" },
 -    { TIFFTAG_ANALOGBALANCE,	-1, -1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"AnalogBalance" },
 -    { TIFFTAG_ASSHOTNEUTRAL,	-1, -1,	TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	1,	"AsShotNeutral" },
 -    { TIFFTAG_ASSHOTNEUTRAL,	-1, -1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"AsShotNeutral" },
 -    { TIFFTAG_ASSHOTWHITEXY,	2, 2,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"AsShotWhiteXY" },
 -    { TIFFTAG_BASELINEEXPOSURE,	1, 1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"BaselineExposure" },
 -    { TIFFTAG_BASELINENOISE,	1, 1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"BaselineNoise" },
 -    { TIFFTAG_BASELINESHARPNESS,	1, 1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"BaselineSharpness" },
 -    { TIFFTAG_BAYERGREENSPLIT,	1, 1,	TIFF_LONG,	FIELD_CUSTOM, 
 -      0,	0,	"BayerGreenSplit" },
 -    { TIFFTAG_LINEARRESPONSELIMIT,	1, 1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"LinearResponseLimit" },
 -    { TIFFTAG_CAMERASERIALNUMBER,    -1, -1, TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"CameraSerialNumber" },
 -    { TIFFTAG_LENSINFO,	4, 4,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"LensInfo" },
 -    { TIFFTAG_CHROMABLURRADIUS,	1, 1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"ChromaBlurRadius" },
 -    { TIFFTAG_ANTIALIASSTRENGTH,	1, 1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"AntiAliasStrength" },
 -    { TIFFTAG_SHADOWSCALE,	1, 1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      0,	0,	"ShadowScale" },
 -    { TIFFTAG_DNGPRIVATEDATA,    -1, -1, TIFF_BYTE,	FIELD_CUSTOM,
 -      0,	1,	"DNGPrivateData" },
 -    { TIFFTAG_MAKERNOTESAFETY,	1, 1,	TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	0,	"MakerNoteSafety" },
 -    { TIFFTAG_CALIBRATIONILLUMINANT1,	1, 1,	TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	0,	"CalibrationIlluminant1" },
 -    { TIFFTAG_CALIBRATIONILLUMINANT2,	1, 1,	TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	0,	"CalibrationIlluminant2" },
 -    { TIFFTAG_RAWDATAUNIQUEID,	16, 16,	TIFF_BYTE,	FIELD_CUSTOM, 
 -      0,	0,	"RawDataUniqueID" },
 -    { TIFFTAG_ORIGINALRAWFILENAME,    -1, -1, TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"OriginalRawFileName" },
 -    { TIFFTAG_ORIGINALRAWFILENAME,    -1, -1, TIFF_BYTE,	FIELD_CUSTOM,
 -      1,	1,	"OriginalRawFileName" },
 -    { TIFFTAG_ORIGINALRAWFILEDATA,    -1, -1, TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      0,	1,	"OriginalRawFileData" },
 -    { TIFFTAG_ACTIVEAREA,	4, 4,	TIFF_LONG,	FIELD_CUSTOM, 
 -      0,	0,	"ActiveArea" },
 -    { TIFFTAG_ACTIVEAREA,	4, 4,	TIFF_SHORT,	FIELD_CUSTOM, 
 -      0,	0,	"ActiveArea" },
 -    { TIFFTAG_MASKEDAREAS,	-1, -1,	TIFF_LONG,	FIELD_CUSTOM, 
 -      0,	1,	"MaskedAreas" },
 -    { TIFFTAG_ASSHOTICCPROFILE,    -1, -1, TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      0,	1,	"AsShotICCProfile" },
 -    { TIFFTAG_ASSHOTPREPROFILEMATRIX,	-1, -1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"AsShotPreProfileMatrix" },
 -    { TIFFTAG_CURRENTICCPROFILE,    -1, -1, TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      0,	1,	"CurrentICCProfile" },
 -    { TIFFTAG_CURRENTPREPROFILEMATRIX,	-1, -1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      0,	1,	"CurrentPreProfileMatrix" },
 -/* end DNG tags */
 -};
 -
 -static const TIFFFieldInfo
 -exifFieldInfo[] = {
 -    { EXIFTAG_EXPOSURETIME,	1, 1,		TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"ExposureTime" },
 -    { EXIFTAG_FNUMBER,		1, 1,		TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"FNumber" },
 -    { EXIFTAG_EXPOSUREPROGRAM,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"ExposureProgram" },
 -    { EXIFTAG_SPECTRALSENSITIVITY,    -1, -1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"SpectralSensitivity" },
 -    { EXIFTAG_ISOSPEEDRATINGS,  -1, -1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	1,	"ISOSpeedRatings" },
 -    { EXIFTAG_OECF,	-1, -1,			TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	1,	"OptoelectricConversionFactor" },
 -    { EXIFTAG_EXIFVERSION,	4, 4,		TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	0,	"ExifVersion" },
 -    { EXIFTAG_DATETIMEORIGINAL,	20, 20,		TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"DateTimeOriginal" },
 -    { EXIFTAG_DATETIMEDIGITIZED, 20, 20,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"DateTimeDigitized" },
 -    { EXIFTAG_COMPONENTSCONFIGURATION,	 4, 4,	TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	0,	"ComponentsConfiguration" },
 -    { EXIFTAG_COMPRESSEDBITSPERPIXEL,	 1, 1,	TIFF_RATIONAL,	FIELD_CUSTOM,
 -      1,	0,	"CompressedBitsPerPixel" },
 -    { EXIFTAG_SHUTTERSPEEDVALUE,	1, 1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"ShutterSpeedValue" },
 -    { EXIFTAG_APERTUREVALUE,	1, 1,		TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"ApertureValue" },
 -    { EXIFTAG_BRIGHTNESSVALUE,	1, 1,		TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"BrightnessValue" },
 -    { EXIFTAG_EXPOSUREBIASVALUE,	1, 1,	TIFF_SRATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"ExposureBiasValue" },
 -    { EXIFTAG_MAXAPERTUREVALUE,	1, 1,		TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"MaxApertureValue" },
 -    { EXIFTAG_SUBJECTDISTANCE,	1, 1,		TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"SubjectDistance" },
 -    { EXIFTAG_METERINGMODE,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"MeteringMode" },
 -    { EXIFTAG_LIGHTSOURCE,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"LightSource" },
 -    { EXIFTAG_FLASH,	1, 1,			TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"Flash" },
 -    { EXIFTAG_FOCALLENGTH,	1, 1,		TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"FocalLength" },
 -    { EXIFTAG_SUBJECTAREA,	-1, -1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	1,	"SubjectArea" },
 -    { EXIFTAG_MAKERNOTE,	-1, -1,		TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	1,	"MakerNote" },
 -    { EXIFTAG_USERCOMMENT,	-1, -1,		TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	1,	"UserComment" },
 -    { EXIFTAG_SUBSECTIME,    -1, -1,		TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"SubSecTime" },
 -    { EXIFTAG_SUBSECTIMEORIGINAL, -1, -1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"SubSecTimeOriginal" },
 -    { EXIFTAG_SUBSECTIMEDIGITIZED,-1, -1,	TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"SubSecTimeDigitized" },
 -    { EXIFTAG_FLASHPIXVERSION,	4, 4,		TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	0,	"FlashpixVersion" },
 -    { EXIFTAG_COLORSPACE,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"ColorSpace" },
 -    { EXIFTAG_PIXELXDIMENSION,	1, 1,		TIFF_LONG,	FIELD_CUSTOM,
 -      1,	0,	"PixelXDimension" },
 -    { EXIFTAG_PIXELXDIMENSION,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"PixelXDimension" },
 -    { EXIFTAG_PIXELYDIMENSION,	1, 1,		TIFF_LONG,	FIELD_CUSTOM,
 -      1,	0,	"PixelYDimension" },
 -    { EXIFTAG_PIXELYDIMENSION,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"PixelYDimension" },
 -    { EXIFTAG_RELATEDSOUNDFILE,	13, 13,		TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"RelatedSoundFile" },
 -    { EXIFTAG_FLASHENERGY,	1, 1,		TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"FlashEnergy" },
 -    { EXIFTAG_SPATIALFREQUENCYRESPONSE,	-1, -1,	TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	1,	"SpatialFrequencyResponse" },
 -    { EXIFTAG_FOCALPLANEXRESOLUTION,	1, 1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"FocalPlaneXResolution" },
 -    { EXIFTAG_FOCALPLANEYRESOLUTION,	1, 1,	TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"FocalPlaneYResolution" },
 -    { EXIFTAG_FOCALPLANERESOLUTIONUNIT,	1, 1,	TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"FocalPlaneResolutionUnit" },
 -    { EXIFTAG_SUBJECTLOCATION,	2, 2,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"SubjectLocation" },
 -    { EXIFTAG_EXPOSUREINDEX,	1, 1,		TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"ExposureIndex" },
 -    { EXIFTAG_SENSINGMETHOD,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"SensingMethod" },
 -    { EXIFTAG_FILESOURCE,	1, 1,		TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	0,	"FileSource" },
 -    { EXIFTAG_SCENETYPE,	1, 1,		TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	0,	"SceneType" },
 -    { EXIFTAG_CFAPATTERN,	-1, -1,		TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	1,	"CFAPattern" },
 -    { EXIFTAG_CUSTOMRENDERED,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"CustomRendered" },
 -    { EXIFTAG_EXPOSUREMODE,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"ExposureMode" },
 -    { EXIFTAG_WHITEBALANCE,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"WhiteBalance" },
 -    { EXIFTAG_DIGITALZOOMRATIO,	1, 1,		TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"DigitalZoomRatio" },
 -    { EXIFTAG_FOCALLENGTHIN35MMFILM, 1, 1,	TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"FocalLengthIn35mmFilm" },
 -    { EXIFTAG_SCENECAPTURETYPE,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"SceneCaptureType" },
 -    { EXIFTAG_GAINCONTROL,	1, 1,		TIFF_RATIONAL,	FIELD_CUSTOM, 
 -      1,	0,	"GainControl" },
 -    { EXIFTAG_CONTRAST,		1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"Contrast" },
 -    { EXIFTAG_SATURATION,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"Saturation" },
 -    { EXIFTAG_SHARPNESS,	1, 1,		TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"Sharpness" },
 -    { EXIFTAG_DEVICESETTINGDESCRIPTION,	-1, -1,	TIFF_UNDEFINED,	FIELD_CUSTOM,
 -      1,	1,	"DeviceSettingDescription" },
 -    { EXIFTAG_SUBJECTDISTANCERANGE, 1, 1,	TIFF_SHORT,	FIELD_CUSTOM,
 -      1,	0,	"SubjectDistanceRange" },
 -    { EXIFTAG_IMAGEUNIQUEID,	33, 33,		TIFF_ASCII,	FIELD_CUSTOM,
 -      1,	0,	"ImageUniqueID" }
 -};
 -
 -const TIFFFieldInfo *
 -_TIFFGetFieldInfo(size_t *size)
 -{
 -	*size = TIFFArrayCount(tiffFieldInfo);
 -	return tiffFieldInfo;
 -}
 -
 -const TIFFFieldInfo *
 -_TIFFGetExifFieldInfo(size_t *size)
 -{
 -	*size = TIFFArrayCount(exifFieldInfo);
 -	return exifFieldInfo;
 -}
 -
 -void
 -_TIFFSetupFieldInfo(TIFF* tif, const TIFFFieldInfo info[], size_t n)
 -{
 -	if (tif->tif_fieldinfo) {
 -		size_t  i;
 -
 -		for (i = 0; i < tif->tif_nfields; i++) 
 -		{
 -			TIFFFieldInfo *fld = tif->tif_fieldinfo[i];
 -			if (fld->field_bit == FIELD_CUSTOM && 
 -				strncmp("Tag ", fld->field_name, 4) == 0) {
 -					_TIFFfree(fld->field_name);
 -					_TIFFfree(fld);
 -				}
 -		}   
 -      
 -		_TIFFfree(tif->tif_fieldinfo);
 -		tif->tif_nfields = 0;
 -	}
 -	if (!_TIFFMergeFieldInfo(tif, info, n))
 -	{
 -		TIFFErrorExt(tif->tif_clientdata, "_TIFFSetupFieldInfo",
 -			     "Setting up field info failed");
 -	}
 -}
 -
 -static int
 -tagCompare(const void* a, const void* b)
 -{
 -	const TIFFFieldInfo* ta = *(const TIFFFieldInfo**) a;
 -	const TIFFFieldInfo* tb = *(const TIFFFieldInfo**) b;
 -	/* NB: be careful of return values for 16-bit platforms */
 -	if (ta->field_tag != tb->field_tag)
 -		return (int)ta->field_tag - (int)tb->field_tag;
 -	else
 -		return (ta->field_type == TIFF_ANY) ?
 -			0 : ((int)tb->field_type - (int)ta->field_type);
 -}
 -
 -static int
 -tagNameCompare(const void* a, const void* b)
 -{
 -	const TIFFFieldInfo* ta = *(const TIFFFieldInfo**) a;
 -	const TIFFFieldInfo* tb = *(const TIFFFieldInfo**) b;
 -	int ret = strcmp(ta->field_name, tb->field_name);
 -
 -	if (ret)
 -		return ret;
 -	else
 -		return (ta->field_type == TIFF_ANY) ?
 -			0 : ((int)tb->field_type - (int)ta->field_type);
 -}
 -
 -void
 -TIFFMergeFieldInfo(TIFF* tif, const TIFFFieldInfo info[], int n)
 -{
 -	if (_TIFFMergeFieldInfo(tif, info, n) < 0)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata, "TIFFMergeFieldInfo",
 -			     "Merging block of %d fields failed", n);
 -	}
 -}
 -
 -int
 -_TIFFMergeFieldInfo(TIFF* tif, const TIFFFieldInfo info[], int n)
 -{
 -	static const char module[] = "_TIFFMergeFieldInfo";
 -	static const char reason[] = "for field info array";
 -	TIFFFieldInfo** tp;
 -	int i;
 -
 -        tif->tif_foundfield = NULL;
 -
 -	if (tif->tif_nfields > 0) {
 -		tif->tif_fieldinfo = (TIFFFieldInfo**)
 -			_TIFFCheckRealloc(tif, tif->tif_fieldinfo,
 -					  (tif->tif_nfields + n),
 -					  sizeof (TIFFFieldInfo*), reason);
 -	} else {
 -		tif->tif_fieldinfo = (TIFFFieldInfo**)
 -			_TIFFCheckMalloc(tif, n, sizeof (TIFFFieldInfo*),
 -					 reason);
 -	}
 -	if (!tif->tif_fieldinfo) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "Failed to allocate field info array");
 -		return 0;
 -	}
 -	tp = tif->tif_fieldinfo + tif->tif_nfields;
 -	for (i = 0; i < n; i++)
 -        {
 -            const TIFFFieldInfo *fip =
 -                _TIFFFindFieldInfo(tif, info[i].field_tag, info[i].field_type);
 -
 -            /* only add definitions that aren't already present */
 -            if (!fip) {
 -                *tp++ = (TIFFFieldInfo*) (info + i);
 -                tif->tif_nfields++;
 -            }
 -        }
 -
 -        /* Sort the field info by tag number */
 -        qsort(tif->tif_fieldinfo, tif->tif_nfields,
 -	      sizeof (TIFFFieldInfo*), tagCompare);
 -
 -	return n;
 -}
 -
 -void
 -_TIFFPrintFieldInfo(TIFF* tif, FILE* fd)
 -{
 -	size_t i;
 -
 -	fprintf(fd, "%s: \n", tif->tif_name);
 -	for (i = 0; i < tif->tif_nfields; i++) {
 -		const TIFFFieldInfo* fip = tif->tif_fieldinfo[i];
 -		fprintf(fd, "field[%2d] %5lu, %2d, %2d, %d, %2d, %5s, %5s, %s\n"
 -			, (int)i
 -			, (unsigned long) fip->field_tag
 -			, fip->field_readcount, fip->field_writecount
 -			, fip->field_type
 -			, fip->field_bit
 -			, fip->field_oktochange ? "TRUE" : "FALSE"
 -			, fip->field_passcount ? "TRUE" : "FALSE"
 -			, fip->field_name
 -		);
 -	}
 -}
 -
 -/*
 - * Return size of TIFFDataType in bytes
 - */
 -int
 -TIFFDataWidth(TIFFDataType type)
 -{
 -	switch(type)
 -	{
 -	case 0:  /* nothing */
 -	case 1:  /* TIFF_BYTE */
 -	case 2:  /* TIFF_ASCII */
 -	case 6:  /* TIFF_SBYTE */
 -	case 7:  /* TIFF_UNDEFINED */
 -		return 1;
 -	case 3:  /* TIFF_SHORT */
 -	case 8:  /* TIFF_SSHORT */
 -		return 2;
 -	case 4:  /* TIFF_LONG */
 -	case 9:  /* TIFF_SLONG */
 -	case 11: /* TIFF_FLOAT */
 -        case 13: /* TIFF_IFD */
 -		return 4;
 -	case 5:  /* TIFF_RATIONAL */
 -	case 10: /* TIFF_SRATIONAL */
 -	case 12: /* TIFF_DOUBLE */
 -		return 8;
 -	default:
 -		return 0; /* will return 0 for unknown types */
 -	}
 -}
 -
 -/*
 - * Return size of TIFFDataType in bytes.
 - *
 - * XXX: We need a separate function to determine the space needed
 - * to store the value. For TIFF_RATIONAL values TIFFDataWidth() returns 8,
 - * but we use 4-byte float to represent rationals.
 - */
 -int
 -_TIFFDataSize(TIFFDataType type)
 -{
 -	switch (type) {
 -		case TIFF_BYTE:
 -		case TIFF_SBYTE:
 -		case TIFF_ASCII:
 -		case TIFF_UNDEFINED:
 -		    return 1;
 -		case TIFF_SHORT:
 -		case TIFF_SSHORT:
 -		    return 2;
 -		case TIFF_LONG:
 -		case TIFF_SLONG:
 -		case TIFF_FLOAT:
 -		case TIFF_IFD:
 -		case TIFF_RATIONAL:
 -		case TIFF_SRATIONAL:
 -		    return 4;
 -		case TIFF_DOUBLE:
 -		    return 8;
 -		default:
 -		    return 0;
 -	}
 -}
 -
 -/*
 - * Return nearest TIFFDataType to the sample type of an image.
 - */
 -TIFFDataType
 -_TIFFSampleToTagType(TIFF* tif)
 -{
 -	uint32 bps = TIFFhowmany8(tif->tif_dir.td_bitspersample);
 -
 -	switch (tif->tif_dir.td_sampleformat) {
 -	case SAMPLEFORMAT_IEEEFP:
 -		return (bps == 4 ? TIFF_FLOAT : TIFF_DOUBLE);
 -	case SAMPLEFORMAT_INT:
 -		return (bps <= 1 ? TIFF_SBYTE :
 -		    bps <= 2 ? TIFF_SSHORT : TIFF_SLONG);
 -	case SAMPLEFORMAT_UINT:
 -		return (bps <= 1 ? TIFF_BYTE :
 -		    bps <= 2 ? TIFF_SHORT : TIFF_LONG);
 -	case SAMPLEFORMAT_VOID:
 -		return (TIFF_UNDEFINED);
 -	}
 -	/*NOTREACHED*/
 -	return (TIFF_UNDEFINED);
 -}
 -
 -const TIFFFieldInfo*
 -_TIFFFindFieldInfo(TIFF* tif, ttag_t tag, TIFFDataType dt)
 -{
 -        TIFFFieldInfo key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0};
 -	TIFFFieldInfo* pkey = &key;
 -	const TIFFFieldInfo **ret;
 -
 -	if (tif->tif_foundfield && tif->tif_foundfield->field_tag == tag &&
 -	    (dt == TIFF_ANY || dt == tif->tif_foundfield->field_type))
 -		return tif->tif_foundfield;
 -
 -	/* If we are invoked with no field information, then just return. */
 -	if ( !tif->tif_fieldinfo ) {
 -		return NULL;
 -	}
 -
 -	/* NB: use sorted search (e.g. binary search) */
 -	key.field_tag = tag;
 -        key.field_type = dt;
 -
 -	ret = (const TIFFFieldInfo **) bsearch(&pkey,
 -					       tif->tif_fieldinfo, 
 -					       tif->tif_nfields,
 -					       sizeof(TIFFFieldInfo *), 
 -					       tagCompare);
 -	return tif->tif_foundfield = (ret ? *ret : NULL);
 -}
 -
 -const TIFFFieldInfo*
 -_TIFFFindFieldInfoByName(TIFF* tif, const char *field_name, TIFFDataType dt)
 -{
 -        TIFFFieldInfo key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0};
 -	TIFFFieldInfo* pkey = &key;
 -	const TIFFFieldInfo **ret;
 -
 -	if (tif->tif_foundfield
 -	    && streq(tif->tif_foundfield->field_name, field_name)
 -	    && (dt == TIFF_ANY || dt == tif->tif_foundfield->field_type))
 -		return (tif->tif_foundfield);
 -
 -	/* If we are invoked with no field information, then just return. */
 -	if ( !tif->tif_fieldinfo ) {
 -		return NULL;
 -	}
 -
 -	/* NB: use sorted search (e.g. binary search) */
 -        key.field_name = (char *)field_name;
 -        key.field_type = dt;
 -
 -        ret = (const TIFFFieldInfo **) lfind(&pkey,
 -					     tif->tif_fieldinfo, 
 -					     &tif->tif_nfields,
 -					     sizeof(TIFFFieldInfo *),
 -					     tagNameCompare);
 -	return tif->tif_foundfield = (ret ? *ret : NULL);
 -}
 -
 -const TIFFFieldInfo*
 -_TIFFFieldWithTag(TIFF* tif, ttag_t tag)
 -{
 -	const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);
 -	if (!fip) {
 -		TIFFErrorExt(tif->tif_clientdata, "TIFFFieldWithTag",
 -			     "Internal error, unknown tag 0x%x",
 -			     (unsigned int) tag);
 -	}
 -	return (fip);
 -}
 -
 -const TIFFFieldInfo*
 -_TIFFFieldWithName(TIFF* tif, const char *field_name)
 -{
 -	const TIFFFieldInfo* fip =
 -		_TIFFFindFieldInfoByName(tif, field_name, TIFF_ANY);
 -	if (!fip) {
 -		TIFFErrorExt(tif->tif_clientdata, "TIFFFieldWithName",
 -			     "Internal error, unknown tag %s", field_name);
 -	}
 -	return (fip);
 -}
 -
 -const TIFFFieldInfo*
 -_TIFFFindOrRegisterFieldInfo( TIFF *tif, ttag_t tag, TIFFDataType dt )
 -
 -{
 -    const TIFFFieldInfo *fld;
 -
 -    fld = _TIFFFindFieldInfo( tif, tag, dt );
 -    if ( fld == NULL )
 -    {
 -        fld = _TIFFCreateAnonFieldInfo( tif, tag, dt );
 -        if (!_TIFFMergeFieldInfo(tif, fld, 1))
 -		return NULL;
 -    }
 -
 -    return fld;
 -}
 -
 -TIFFFieldInfo*
 -_TIFFCreateAnonFieldInfo(TIFF *tif, ttag_t tag, TIFFDataType field_type)
 -{
 -	TIFFFieldInfo *fld;
 -	(void) tif;
 -
 -	fld = (TIFFFieldInfo *) _TIFFmalloc(sizeof (TIFFFieldInfo));
 -	if (fld == NULL)
 -	    return NULL;
 -	_TIFFmemset( fld, 0, sizeof(TIFFFieldInfo) );
 -
 -	fld->field_tag = tag;
 -	fld->field_readcount = TIFF_VARIABLE2;
 -	fld->field_writecount = TIFF_VARIABLE2;
 -	fld->field_type = field_type;
 -	fld->field_bit = FIELD_CUSTOM;
 -	fld->field_oktochange = TRUE;
 -	fld->field_passcount = TRUE;
 -	fld->field_name = (char *) _TIFFmalloc(32);
 -	if (fld->field_name == NULL) {
 -	    _TIFFfree(fld);
 -	    return NULL;
 -	}
 -
 -	/* 
 -	 * note that this name is a special sign to TIFFClose() and
 -	 * _TIFFSetupFieldInfo() to free the field
 -	 */
 -	sprintf(fld->field_name, "Tag %d", (int) tag);
 -
 -	return fld;    
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_dirread.c b/plugins/FreeImage/Source/LibTIFF/tif_dirread.c deleted file mode 100644 index 3567b2ae51..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_dirread.c +++ /dev/null @@ -1,2117 +0,0 @@ -/* $Id: tif_dirread.c,v 1.38 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Directory Read Support Routines.
 - */
 -#include "tiffiop.h"
 -
 -#define	IGNORE	0		/* tag placeholder used below */
 -
 -#ifdef HAVE_IEEEFP
 -# define	TIFFCvtIEEEFloatToNative(tif, n, fp)
 -# define	TIFFCvtIEEEDoubleToNative(tif, n, dp)
 -#else
 -extern	void TIFFCvtIEEEFloatToNative(TIFF*, uint32, float*);
 -extern	void TIFFCvtIEEEDoubleToNative(TIFF*, uint32, double*);
 -#endif
 -
 -static  TIFFDirEntry* TIFFReadDirectoryFind(TIFFDirEntry* dir,
 -					    uint16 dircount, uint16 tagid);
 -static	int EstimateStripByteCounts(TIFF*, TIFFDirEntry*, uint16);
 -static	void MissingRequired(TIFF*, const char*);
 -static	int TIFFCheckDirOffset(TIFF*, toff_t);
 -static	int CheckDirCount(TIFF*, TIFFDirEntry*, uint32);
 -static	uint16 TIFFFetchDirectory(TIFF*, toff_t, TIFFDirEntry**, toff_t *);
 -static	tsize_t TIFFFetchData(TIFF*, TIFFDirEntry*, char*);
 -static	tsize_t TIFFFetchString(TIFF*, TIFFDirEntry*, char*);
 -static	float TIFFFetchRational(TIFF*, TIFFDirEntry*);
 -static	int TIFFFetchNormalTag(TIFF*, TIFFDirEntry*);
 -static	int TIFFFetchPerSampleShorts(TIFF*, TIFFDirEntry*, uint16*);
 -static	int TIFFFetchPerSampleLongs(TIFF*, TIFFDirEntry*, uint32*);
 -static	int TIFFFetchPerSampleAnys(TIFF*, TIFFDirEntry*, double*, double*);
 -static	int TIFFFetchShortArray(TIFF*, TIFFDirEntry*, uint16*);
 -static	int TIFFFetchStripThing(TIFF*, TIFFDirEntry*, long, uint32**);
 -static	int TIFFFetchRefBlackWhite(TIFF*, TIFFDirEntry*);
 -static	int TIFFFetchSubjectDistance(TIFF*, TIFFDirEntry*);
 -static	float TIFFFetchFloat(TIFF*, TIFFDirEntry*);
 -static	int TIFFFetchFloatArray(TIFF*, TIFFDirEntry*, float*);
 -static	int TIFFFetchDoubleArray(TIFF*, TIFFDirEntry*, double*);
 -static	int TIFFFetchAnyArray(TIFF*, TIFFDirEntry*, double*);
 -static	int TIFFFetchShortPair(TIFF*, TIFFDirEntry*);
 -static	void ChopUpSingleUncompressedStrip(TIFF*);
 -
 -/*
 - * Read the next TIFF directory from a file and convert it to the internal
 - * format. We read directories sequentially.
 - */
 -int
 -TIFFReadDirectory(TIFF* tif)
 -{
 -	static const char module[] = "TIFFReadDirectory";
 -
 -	int n;
 -	TIFFDirectory* td;
 -	TIFFDirEntry *dp, *dir = NULL;
 -	uint16 iv;
 -	uint32 v;
 -	const TIFFFieldInfo* fip;
 -	size_t fix;
 -	uint16 dircount;
 -	uint16 previous_tag = 0;
 -	int diroutoforderwarning = 0, compressionknown = 0;
 -	int haveunknowntags = 0;
 -
 -	tif->tif_diroff = tif->tif_nextdiroff;
 -	/*
 -	 * Check whether we have the last offset or bad offset (IFD looping).
 -	 */
 -	if (!TIFFCheckDirOffset(tif, tif->tif_nextdiroff))
 -		return 0;
 -	/*
 -	 * Cleanup any previous compression state.
 -	 */
 -	(*tif->tif_cleanup)(tif);
 -	tif->tif_curdir++;
 -	dircount = TIFFFetchDirectory(tif, tif->tif_nextdiroff,
 -				      &dir, &tif->tif_nextdiroff);
 -	if (!dircount) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "%s: Failed to read directory at offset %u",
 -			     tif->tif_name, tif->tif_nextdiroff);
 -		return 0;
 -	}
 -	{
 -		TIFFDirEntry* ma;
 -		uint16 mb;
 -		for (ma=dir, mb=0; mb<dircount; ma++, mb++)
 -		{
 -			TIFFDirEntry* na;
 -			uint16 nb;
 -			for (na=ma+1, nb=mb+1; nb<dircount; na++, nb++)
 -			{
 -				if (ma->tdir_tag==na->tdir_tag)
 -					na->tdir_tag=IGNORE;
 -			}
 -		}
 -	}
 -	tif->tif_flags &= ~TIFF_BEENWRITING;	/* reset before new dir */
 -	/*
 -	 * Setup default value and then make a pass over
 -	 * the fields to check type and tag information,
 -	 * and to extract info required to size data
 -	 * structures.  A second pass is made afterwards
 -	 * to read in everthing not taken in the first pass.
 -	 */
 -	td = &tif->tif_dir;
 -	/* free any old stuff and reinit */
 -	TIFFFreeDirectory(tif);
 -	TIFFDefaultDirectory(tif);
 -	/*
 -	 * Electronic Arts writes gray-scale TIFF files
 -	 * without a PlanarConfiguration directory entry.
 -	 * Thus we setup a default value here, even though
 -	 * the TIFF spec says there is no default value.
 -	 */
 -	TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
 -
 -	/*
 -	 * Sigh, we must make a separate pass through the
 -	 * directory for the following reason:
 -	 *
 -	 * We must process the Compression tag in the first pass
 -	 * in order to merge in codec-private tag definitions (otherwise
 -	 * we may get complaints about unknown tags).  However, the
 -	 * Compression tag may be dependent on the SamplesPerPixel
 -	 * tag value because older TIFF specs permited Compression
 -	 * to be written as a SamplesPerPixel-count tag entry.
 -	 * Thus if we don't first figure out the correct SamplesPerPixel
 -	 * tag value then we may end up ignoring the Compression tag
 -	 * value because it has an incorrect count value (if the
 -	 * true value of SamplesPerPixel is not 1).
 -	 *
 -	 * It sure would have been nice if Aldus had really thought
 -	 * this stuff through carefully.
 -	 */
 -	for (dp = dir, n = dircount; n > 0; n--, dp++) {
 -		if (tif->tif_flags & TIFF_SWAB) {
 -			TIFFSwabArrayOfShort(&dp->tdir_tag, 2);
 -			TIFFSwabArrayOfLong(&dp->tdir_count, 2);
 -		}
 -		if (dp->tdir_tag == TIFFTAG_SAMPLESPERPIXEL) {
 -			if (!TIFFFetchNormalTag(tif, dp))
 -				goto bad;
 -			dp->tdir_tag = IGNORE;
 -		}
 -	}
 -	/*
 -	 * First real pass over the directory.
 -	 */
 -	fix = 0;
 -	for (dp = dir, n = dircount; n > 0; n--, dp++) {
 -
 -		if (dp->tdir_tag == IGNORE)
 -			continue;
 -
 -		/*
 -		 * Silicon Beach (at least) writes unordered
 -		 * directory tags (violating the spec).  Handle
 -		 * it here, but be obnoxious (maybe they'll fix it?).
 -		 */
 -		if (dp->tdir_tag < previous_tag) {
 -			if (!diroutoforderwarning) {
 -				TIFFWarningExt(tif->tif_clientdata, module,
 -	"%s: invalid TIFF directory; tags are not sorted in ascending order",
 -					    tif->tif_name);
 -				diroutoforderwarning = 1;
 -			}
 -		}
 -		previous_tag = dp->tdir_tag;
 -		if (fix >= tif->tif_nfields ||
 -		    dp->tdir_tag < tif->tif_fieldinfo[fix]->field_tag)
 -			fix = 0;			/* O(n^2) */
 -		while (fix < tif->tif_nfields &&
 -		    tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag)
 -			fix++;
 -		if (fix >= tif->tif_nfields ||
 -		    tif->tif_fieldinfo[fix]->field_tag != dp->tdir_tag) {
 -			/* Unknown tag ... we'll deal with it below */
 -			haveunknowntags = 1;
 -			continue;
 -		}
 -		/*
 -		 * Null out old tags that we ignore.
 -		 */
 -		if (tif->tif_fieldinfo[fix]->field_bit == FIELD_IGNORE) {
 -	ignore:
 -			dp->tdir_tag = IGNORE;
 -			continue;
 -		}
 -		/*
 -		 * Check data type.
 -		 */
 -		fip = tif->tif_fieldinfo[fix];
 -		while (dp->tdir_type != (unsigned short) fip->field_type
 -		    && fix < tif->tif_nfields) {
 -			if (fip->field_type == TIFF_ANY)	/* wildcard */
 -				break;
 -			fip = tif->tif_fieldinfo[++fix];
 -			if (fix >= tif->tif_nfields ||
 -			    fip->field_tag != dp->tdir_tag) {
 -				TIFFWarningExt(tif->tif_clientdata, module,
 -			"%s: wrong data type %d for \"%s\"; tag ignored",
 -					    tif->tif_name, dp->tdir_type,
 -					    tif->tif_fieldinfo[fix-1]->field_name);
 -				goto ignore;
 -			}
 -		}
 -		/*
 -		 * Check count if known in advance.
 -		 */
 -		if (fip->field_readcount != TIFF_VARIABLE
 -		    && fip->field_readcount != TIFF_VARIABLE2) {
 -			uint32 expected = (fip->field_readcount == TIFF_SPP) ?
 -			    (uint32) td->td_samplesperpixel :
 -			    (uint32) fip->field_readcount;
 -			if (!CheckDirCount(tif, dp, expected))
 -				goto ignore;
 -		}
 -
 -		switch (dp->tdir_tag) {
 -		case TIFFTAG_COMPRESSION:
 -			/*
 -			 * The 5.0 spec says the Compression tag has
 -			 * one value, while earlier specs say it has
 -			 * one value per sample.  Because of this, we
 -			 * accept the tag if one value is supplied.
 -			 */
 -			if (dp->tdir_count == 1) {
 -				v = TIFFExtractData(tif,
 -				    dp->tdir_type, dp->tdir_offset);
 -				if (!TIFFSetField(tif, dp->tdir_tag, (uint16)v))
 -					goto bad;
 -				else
 -					compressionknown = 1;
 -				break;
 -			/* XXX: workaround for broken TIFFs */
 -			} else if (dp->tdir_type == TIFF_LONG) {
 -				if (!TIFFFetchPerSampleLongs(tif, dp, &v) ||
 -				    !TIFFSetField(tif, dp->tdir_tag, (uint16)v))
 -					goto bad;
 -			} else {
 -				if (!TIFFFetchPerSampleShorts(tif, dp, &iv)
 -				    || !TIFFSetField(tif, dp->tdir_tag, iv))
 -					goto bad;
 -			}
 -			dp->tdir_tag = IGNORE;
 -			break;
 -		case TIFFTAG_STRIPOFFSETS:
 -		case TIFFTAG_STRIPBYTECOUNTS:
 -		case TIFFTAG_TILEOFFSETS:
 -		case TIFFTAG_TILEBYTECOUNTS:
 -			TIFFSetFieldBit(tif, fip->field_bit);
 -			break;
 -		case TIFFTAG_IMAGEWIDTH:
 -		case TIFFTAG_IMAGELENGTH:
 -		case TIFFTAG_IMAGEDEPTH:
 -		case TIFFTAG_TILELENGTH:
 -		case TIFFTAG_TILEWIDTH:
 -		case TIFFTAG_TILEDEPTH:
 -		case TIFFTAG_PLANARCONFIG:
 -		case TIFFTAG_ROWSPERSTRIP:
 -		case TIFFTAG_EXTRASAMPLES:
 -			if (!TIFFFetchNormalTag(tif, dp))
 -				goto bad;
 -			dp->tdir_tag = IGNORE;
 -			break;
 -		}
 -	}
 -
 -	/*
 -	 * If we saw any unknown tags, make an extra pass over the directory
 -	 * to deal with them.  This must be done separately because the tags
 -	 * could have become known when we registered a codec after finding
 -	 * the Compression tag.  In a correctly-sorted directory there's
 -	 * no problem because Compression will come before any codec-private
 -	 * tags, but if the sorting is wrong that might not hold.
 -	 */
 -	if (haveunknowntags) {
 -	    fix = 0;
 -	    for (dp = dir, n = dircount; n > 0; n--, dp++) {
 -		if (dp->tdir_tag == IGNORE)
 -			continue;
 -		if (fix >= tif->tif_nfields ||
 -		    dp->tdir_tag < tif->tif_fieldinfo[fix]->field_tag)
 -			fix = 0;			/* O(n^2) */
 -		while (fix < tif->tif_nfields &&
 -		    tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag)
 -			fix++;
 -		if (fix >= tif->tif_nfields ||
 -		    tif->tif_fieldinfo[fix]->field_tag != dp->tdir_tag) {
 -
 -					TIFFWarningExt(tif->tif_clientdata,
 -						       module,
 -                        "%s: unknown field with tag %d (0x%x) encountered",
 -						       tif->tif_name,
 -						       dp->tdir_tag,
 -						       dp->tdir_tag);
 -
 -					if (!_TIFFMergeFieldInfo(tif,
 -						_TIFFCreateAnonFieldInfo(tif,
 -						dp->tdir_tag,
 -						(TIFFDataType) dp->tdir_type),
 -						1))
 -					{
 -					TIFFWarningExt(tif->tif_clientdata,
 -						       module,
 -			"Registering anonymous field with tag %d (0x%x) failed",
 -						       dp->tdir_tag,
 -						       dp->tdir_tag);
 -					dp->tdir_tag = IGNORE;
 -					continue;
 -					}
 -			fix = 0;
 -			while (fix < tif->tif_nfields &&
 -			       tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag)
 -				fix++;
 -		}
 -		/*
 -		 * Check data type.
 -		 */
 -		fip = tif->tif_fieldinfo[fix];
 -		while (dp->tdir_type != (unsigned short) fip->field_type
 -		    && fix < tif->tif_nfields) {
 -			if (fip->field_type == TIFF_ANY)	/* wildcard */
 -				break;
 -			fip = tif->tif_fieldinfo[++fix];
 -			if (fix >= tif->tif_nfields ||
 -			    fip->field_tag != dp->tdir_tag) {
 -				TIFFWarningExt(tif->tif_clientdata, module,
 -			"%s: wrong data type %d for \"%s\"; tag ignored",
 -					    tif->tif_name, dp->tdir_type,
 -					    tif->tif_fieldinfo[fix-1]->field_name);
 -				dp->tdir_tag = IGNORE;
 -				break;
 -			}
 -		}
 -	    }
 -	}
 -
 -	/*
 -	 * XXX: OJPEG hack.
 -	 * If a) compression is OJPEG, b) planarconfig tag says it's separate,
 -	 * c) strip offsets/bytecounts tag are both present and
 -	 * d) both contain exactly one value, then we consistently find
 -	 * that the buggy implementation of the buggy compression scheme
 -	 * matches contig planarconfig best. So we 'fix-up' the tag here
 -	 */
 -	if ((td->td_compression==COMPRESSION_OJPEG) &&
 -	    (td->td_planarconfig==PLANARCONFIG_SEPARATE)) {
 -		dp = TIFFReadDirectoryFind(dir,dircount,TIFFTAG_STRIPOFFSETS);
 -		if ((dp!=0) && (dp->tdir_count==1)) {
 -			dp = TIFFReadDirectoryFind(dir, dircount,
 -						   TIFFTAG_STRIPBYTECOUNTS);
 -			if ((dp!=0) && (dp->tdir_count==1)) {
 -				td->td_planarconfig=PLANARCONFIG_CONTIG;
 -				TIFFWarningExt(tif->tif_clientdata,
 -					       "TIFFReadDirectory",
 -				"Planarconfig tag value assumed incorrect, "
 -				"assuming data is contig instead of chunky");
 -			}
 -		}
 -	}
 -
 -	/*
 -	 * Allocate directory structure and setup defaults.
 -	 */
 -	if (!TIFFFieldSet(tif, FIELD_IMAGEDIMENSIONS)) {
 -		MissingRequired(tif, "ImageLength");
 -		goto bad;
 -	}
 -	/* 
 -	 * Setup appropriate structures (by strip or by tile)
 -	 */
 -	if (!TIFFFieldSet(tif, FIELD_TILEDIMENSIONS)) {
 -		td->td_nstrips = TIFFNumberOfStrips(tif);
 -		td->td_tilewidth = td->td_imagewidth;
 -		td->td_tilelength = td->td_rowsperstrip;
 -		td->td_tiledepth = td->td_imagedepth;
 -		tif->tif_flags &= ~TIFF_ISTILED;
 -	} else {
 -		td->td_nstrips = TIFFNumberOfTiles(tif);
 -		tif->tif_flags |= TIFF_ISTILED;
 -	}
 -	if (!td->td_nstrips) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "%s: cannot handle zero number of %s",
 -			     tif->tif_name, isTiled(tif) ? "tiles" : "strips");
 -		goto bad;
 -	}
 -	td->td_stripsperimage = td->td_nstrips;
 -	if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
 -		td->td_stripsperimage /= td->td_samplesperpixel;
 -	if (!TIFFFieldSet(tif, FIELD_STRIPOFFSETS)) {
 -		if ((td->td_compression==COMPRESSION_OJPEG) &&
 -		    (isTiled(tif)==0) &&
 -		    (td->td_nstrips==1)) {
 -			/*
 -			 * XXX: OJPEG hack.
 -			 * If a) compression is OJPEG, b) it's not a tiled TIFF,
 -			 * and c) the number of strips is 1,
 -			 * then we tolerate the absence of stripoffsets tag,
 -			 * because, presumably, all required data is in the
 -			 * JpegInterchangeFormat stream.
 -			 */
 -			TIFFSetFieldBit(tif, FIELD_STRIPOFFSETS);
 -		} else {
 -			MissingRequired(tif,
 -				isTiled(tif) ? "TileOffsets" : "StripOffsets");
 -			goto bad;
 -		}
 -	}
 -
 -	/*
 -	 * Second pass: extract other information.
 -	 */
 -	for (dp = dir, n = dircount; n > 0; n--, dp++) {
 -		if (dp->tdir_tag == IGNORE)
 -			continue;
 -		switch (dp->tdir_tag) {
 -		case TIFFTAG_MINSAMPLEVALUE:
 -		case TIFFTAG_MAXSAMPLEVALUE:
 -		case TIFFTAG_BITSPERSAMPLE:
 -		case TIFFTAG_DATATYPE:
 -		case TIFFTAG_SAMPLEFORMAT:
 -			/*
 -			 * The 5.0 spec says the Compression tag has
 -			 * one value, while earlier specs say it has
 -			 * one value per sample.  Because of this, we
 -			 * accept the tag if one value is supplied.
 -			 *
 -			 * The MinSampleValue, MaxSampleValue, BitsPerSample
 -			 * DataType and SampleFormat tags are supposed to be
 -			 * written as one value/sample, but some vendors
 -			 * incorrectly write one value only -- so we accept
 -			 * that as well (yech). Other vendors write correct
 -			 * value for NumberOfSamples, but incorrect one for
 -			 * BitsPerSample and friends, and we will read this
 -			 * too.
 -			 */
 -			if (dp->tdir_count == 1) {
 -				v = TIFFExtractData(tif,
 -				    dp->tdir_type, dp->tdir_offset);
 -				if (!TIFFSetField(tif, dp->tdir_tag, (uint16)v))
 -					goto bad;
 -			/* XXX: workaround for broken TIFFs */
 -			} else if (dp->tdir_tag == TIFFTAG_BITSPERSAMPLE
 -				   && dp->tdir_type == TIFF_LONG) {
 -				if (!TIFFFetchPerSampleLongs(tif, dp, &v) ||
 -				    !TIFFSetField(tif, dp->tdir_tag, (uint16)v))
 -					goto bad;
 -			} else {
 -				if (!TIFFFetchPerSampleShorts(tif, dp, &iv) ||
 -				    !TIFFSetField(tif, dp->tdir_tag, iv))
 -					goto bad;
 -			}
 -			break;
 -		case TIFFTAG_SMINSAMPLEVALUE:
 -			{
 -				double minv = 0.0, maxv = 0.0;
 -				if (!TIFFFetchPerSampleAnys(tif, dp, &minv, &maxv) ||
 -				    !TIFFSetField(tif, dp->tdir_tag, minv))
 -					goto bad;
 -			}
 -			break;
 -		case TIFFTAG_SMAXSAMPLEVALUE:
 -			{
 -				double minv = 0.0, maxv = 0.0;
 -				if (!TIFFFetchPerSampleAnys(tif, dp, &minv, &maxv) ||
 -				    !TIFFSetField(tif, dp->tdir_tag, maxv))
 -					goto bad;
 -			}
 -			break;
 -		case TIFFTAG_STRIPOFFSETS:
 -		case TIFFTAG_TILEOFFSETS:
 -			if (!TIFFFetchStripThing(tif, dp,
 -			    td->td_nstrips, &td->td_stripoffset))
 -				goto bad;
 -			break;
 -		case TIFFTAG_STRIPBYTECOUNTS:
 -		case TIFFTAG_TILEBYTECOUNTS:
 -			if (!TIFFFetchStripThing(tif, dp,
 -			    td->td_nstrips, &td->td_stripbytecount))
 -				goto bad;
 -			break;
 -		case TIFFTAG_COLORMAP:
 -		case TIFFTAG_TRANSFERFUNCTION:
 -			{
 -				char* cp;
 -				/*
 -				 * TransferFunction can have either 1x or 3x
 -				 * data values; Colormap can have only 3x
 -				 * items.
 -				 */
 -				v = 1L<<td->td_bitspersample;
 -				if (dp->tdir_tag == TIFFTAG_COLORMAP ||
 -				    dp->tdir_count != v) {
 -					if (!CheckDirCount(tif, dp, 3 * v))
 -						break;
 -				}
 -				v *= sizeof(uint16);
 -				cp = (char *)_TIFFCheckMalloc(tif,
 -							      dp->tdir_count,
 -							      sizeof (uint16),
 -					"to read \"TransferFunction\" tag");
 -				if (cp != NULL) {
 -					if (TIFFFetchData(tif, dp, cp)) {
 -						/*
 -						 * This deals with there being
 -						 * only one array to apply to
 -						 * all samples.
 -						 */
 -						uint32 c = 1L << td->td_bitspersample;
 -						if (dp->tdir_count == c)
 -							v = 0L;
 -						TIFFSetField(tif, dp->tdir_tag,
 -						    cp, cp+v, cp+2*v);
 -					}
 -					_TIFFfree(cp);
 -				}
 -				break;
 -			}
 -		case TIFFTAG_PAGENUMBER:
 -		case TIFFTAG_HALFTONEHINTS:
 -		case TIFFTAG_YCBCRSUBSAMPLING:
 -		case TIFFTAG_DOTRANGE:
 -			(void) TIFFFetchShortPair(tif, dp);
 -			break;
 -		case TIFFTAG_REFERENCEBLACKWHITE:
 -			(void) TIFFFetchRefBlackWhite(tif, dp);
 -			break;
 -/* BEGIN REV 4.0 COMPATIBILITY */
 -		case TIFFTAG_OSUBFILETYPE:
 -			v = 0L;
 -			switch (TIFFExtractData(tif, dp->tdir_type,
 -			    dp->tdir_offset)) {
 -			case OFILETYPE_REDUCEDIMAGE:
 -				v = FILETYPE_REDUCEDIMAGE;
 -				break;
 -			case OFILETYPE_PAGE:
 -				v = FILETYPE_PAGE;
 -				break;
 -			}
 -			if (v)
 -				TIFFSetField(tif, TIFFTAG_SUBFILETYPE, v);
 -			break;
 -/* END REV 4.0 COMPATIBILITY */
 -		default:
 -			(void) TIFFFetchNormalTag(tif, dp);
 -			break;
 -		}
 -	}
 -	/*
 -	 * OJPEG hack:
 -	 * - If a) compression is OJPEG, and b) photometric tag is missing,
 -	 * then we consistently find that photometric should be YCbCr
 -	 * - If a) compression is OJPEG, and b) photometric tag says it's RGB,
 -	 * then we consistently find that the buggy implementation of the
 -	 * buggy compression scheme matches photometric YCbCr instead.
 -	 * - If a) compression is OJPEG, and b) bitspersample tag is missing,
 -	 * then we consistently find bitspersample should be 8.
 -	 * - If a) compression is OJPEG, b) samplesperpixel tag is missing,
 -	 * and c) photometric is RGB or YCbCr, then we consistently find
 -	 * samplesperpixel should be 3
 -	 * - If a) compression is OJPEG, b) samplesperpixel tag is missing,
 -	 * and c) photometric is MINISWHITE or MINISBLACK, then we consistently
 -	 * find samplesperpixel should be 3
 -	 */
 -	if (td->td_compression==COMPRESSION_OJPEG)
 -	{
 -		if (!TIFFFieldSet(tif,FIELD_PHOTOMETRIC))
 -		{
 -			TIFFWarningExt(tif->tif_clientdata, "TIFFReadDirectory",
 -			"Photometric tag is missing, assuming data is YCbCr");
 -			if (!TIFFSetField(tif,TIFFTAG_PHOTOMETRIC,PHOTOMETRIC_YCBCR))
 -				goto bad;
 -		}
 -		else if (td->td_photometric==PHOTOMETRIC_RGB)
 -		{
 -			td->td_photometric=PHOTOMETRIC_YCBCR;
 -			TIFFWarningExt(tif->tif_clientdata, "TIFFReadDirectory",
 -			"Photometric tag value assumed incorrect, "
 -			"assuming data is YCbCr instead of RGB");
 -		}
 -		if (!TIFFFieldSet(tif,FIELD_BITSPERSAMPLE))
 -		{
 -			TIFFWarningExt(tif->tif_clientdata,"TIFFReadDirectory",
 -		"BitsPerSample tag is missing, assuming 8 bits per sample");
 -			if (!TIFFSetField(tif,TIFFTAG_BITSPERSAMPLE,8))
 -				goto bad;
 -		}
 -		if (!TIFFFieldSet(tif,FIELD_SAMPLESPERPIXEL))
 -		{
 -			if (td->td_photometric==PHOTOMETRIC_RGB)
 -			{
 -				TIFFWarningExt(tif->tif_clientdata,
 -					       "TIFFReadDirectory",
 -				"SamplesPerPixel tag is missing, "
 -				"assuming correct SamplesPerPixel value is 3");
 -				if (!TIFFSetField(tif,TIFFTAG_SAMPLESPERPIXEL,3))
 -					goto bad;
 -			}
 -			if (td->td_photometric==PHOTOMETRIC_YCBCR)
 -			{
 -				TIFFWarningExt(tif->tif_clientdata,
 -					       "TIFFReadDirectory",
 -				"SamplesPerPixel tag is missing, "
 -				"applying correct SamplesPerPixel value of 3");
 -				if (!TIFFSetField(tif,TIFFTAG_SAMPLESPERPIXEL,3))
 -					goto bad;
 -			}
 -			else if ((td->td_photometric==PHOTOMETRIC_MINISWHITE)
 -				 || (td->td_photometric==PHOTOMETRIC_MINISBLACK))
 -			{
 -				/*
 -				 * SamplesPerPixel tag is missing, but is not required
 -				 * by spec.  Assume correct SamplesPerPixel value of 1.
 -				 */
 -				if (!TIFFSetField(tif,TIFFTAG_SAMPLESPERPIXEL,1))
 -					goto bad;
 -			}
 -		}
 -	}
 -	/*
 -	 * Verify Palette image has a Colormap.
 -	 */
 -	if (td->td_photometric == PHOTOMETRIC_PALETTE &&
 -	    !TIFFFieldSet(tif, FIELD_COLORMAP)) {
 -		if ( tif->tif_dir.td_bitspersample>=8 && tif->tif_dir.td_samplesperpixel==3)
 -			tif->tif_dir.td_photometric = PHOTOMETRIC_RGB;
 -		else if (tif->tif_dir.td_bitspersample>=8)
 -			tif->tif_dir.td_photometric = PHOTOMETRIC_MINISBLACK;
 -		else {
 -			MissingRequired(tif, "Colormap");
 -			goto bad;
 -		}
 -	}
 -	/*
 -	 * OJPEG hack:
 -	 * We do no further messing with strip/tile offsets/bytecounts in OJPEG
 -	 * TIFFs
 -	 */
 -	if (td->td_compression!=COMPRESSION_OJPEG)
 -	{
 -		/*
 -		 * Attempt to deal with a missing StripByteCounts tag.
 -		 */
 -		if (!TIFFFieldSet(tif, FIELD_STRIPBYTECOUNTS)) {
 -			/*
 -			 * Some manufacturers violate the spec by not giving
 -			 * the size of the strips.  In this case, assume there
 -			 * is one uncompressed strip of data.
 -			 */
 -			if ((td->td_planarconfig == PLANARCONFIG_CONTIG &&
 -			    td->td_nstrips > 1) ||
 -			    (td->td_planarconfig == PLANARCONFIG_SEPARATE &&
 -			     td->td_nstrips != td->td_samplesperpixel)) {
 -			    MissingRequired(tif, "StripByteCounts");
 -			    goto bad;
 -			}
 -			TIFFWarningExt(tif->tif_clientdata, module,
 -				"%s: TIFF directory is missing required "
 -				"\"%s\" field, calculating from imagelength",
 -				tif->tif_name,
 -				_TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name);
 -			if (EstimateStripByteCounts(tif, dir, dircount) < 0)
 -			    goto bad;
 -		/*
 -		 * Assume we have wrong StripByteCount value (in case
 -		 * of single strip) in following cases:
 -		 *   - it is equal to zero along with StripOffset;
 -		 *   - it is larger than file itself (in case of uncompressed
 -		 *     image);
 -		 *   - it is smaller than the size of the bytes per row
 -		 *     multiplied on the number of rows.  The last case should
 -		 *     not be checked in the case of writing new image,
 -		 *     because we may do not know the exact strip size
 -		 *     until the whole image will be written and directory
 -		 *     dumped out.
 -		 */
 -		#define	BYTECOUNTLOOKSBAD \
 -		    ( (td->td_stripbytecount[0] == 0 && td->td_stripoffset[0] != 0) || \
 -		      (td->td_compression == COMPRESSION_NONE && \
 -		       td->td_stripbytecount[0] > TIFFGetFileSize(tif) - td->td_stripoffset[0]) || \
 -		      (tif->tif_mode == O_RDONLY && \
 -		       td->td_compression == COMPRESSION_NONE && \
 -		       td->td_stripbytecount[0] < TIFFScanlineSize(tif) * td->td_imagelength) )
 -
 -		} else if (td->td_nstrips == 1
 -			   && td->td_stripoffset[0] != 0
 -			   && BYTECOUNTLOOKSBAD) {
 -			/*
 -			 * XXX: Plexus (and others) sometimes give a value of
 -			 * zero for a tag when they don't know what the
 -			 * correct value is!  Try and handle the simple case
 -			 * of estimating the size of a one strip image.
 -			 */
 -			TIFFWarningExt(tif->tif_clientdata, module,
 -	"%s: Bogus \"%s\" field, ignoring and calculating from imagelength",
 -				    tif->tif_name,
 -				    _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name);
 -			if(EstimateStripByteCounts(tif, dir, dircount) < 0)
 -			    goto bad;
 -		} else if (td->td_planarconfig == PLANARCONFIG_CONTIG
 -			   && td->td_nstrips > 2
 -			   && td->td_compression == COMPRESSION_NONE
 -			   && td->td_stripbytecount[0] != td->td_stripbytecount[1]
 -                           && td->td_stripbytecount[0] != 0 
 -                           && td->td_stripbytecount[1] != 0 ) {
 -			/*
 -			 * XXX: Some vendors fill StripByteCount array with 
 -                         * absolutely wrong values (it can be equal to 
 -                         * StripOffset array, for example). Catch this case 
 -                         * here.
 -			 */
 -			TIFFWarningExt(tif->tif_clientdata, module,
 -	"%s: Wrong \"%s\" field, ignoring and calculating from imagelength",
 -				    tif->tif_name,
 -				    _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name);
 -			if (EstimateStripByteCounts(tif, dir, dircount) < 0)
 -			    goto bad;
 -		}
 -	}
 -	if (dir) {
 -		_TIFFfree((char *)dir);
 -		dir = NULL;
 -	}
 -	if (!TIFFFieldSet(tif, FIELD_MAXSAMPLEVALUE))
 -		td->td_maxsamplevalue = (uint16)((1L<<td->td_bitspersample)-1);
 -	/*
 -	 * Setup default compression scheme.
 -	 */
 -
 -	/*
 -	 * XXX: We can optimize checking for the strip bounds using the sorted
 -	 * bytecounts array. See also comments for TIFFAppendToStrip()
 -	 * function in tif_write.c.
 -	 */
 -	if (td->td_nstrips > 1) {
 -		tstrip_t strip;
 -
 -		td->td_stripbytecountsorted = 1;
 -		for (strip = 1; strip < td->td_nstrips; strip++) {
 -			if (td->td_stripoffset[strip - 1] >
 -			    td->td_stripoffset[strip]) {
 -				td->td_stripbytecountsorted = 0;
 -				break;
 -			}
 -		}
 -	}
 -
 -	if (!TIFFFieldSet(tif, FIELD_COMPRESSION))
 -		TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
 -	/*
 -	 * Some manufacturers make life difficult by writing
 -	 * large amounts of uncompressed data as a single strip.
 -	 * This is contrary to the recommendations of the spec.
 -	 * The following makes an attempt at breaking such images
 -	 * into strips closer to the recommended 8k bytes.  A
 -	 * side effect, however, is that the RowsPerStrip tag
 -	 * value may be changed.
 -	 */
 -	if (td->td_nstrips == 1 && td->td_compression == COMPRESSION_NONE &&
 -	    (tif->tif_flags & (TIFF_STRIPCHOP|TIFF_ISTILED)) == TIFF_STRIPCHOP)
 -		ChopUpSingleUncompressedStrip(tif);
 -
 -	/*
 -	 * Reinitialize i/o since we are starting on a new directory.
 -	 */
 -	tif->tif_row = (uint32) -1;
 -	tif->tif_curstrip = (tstrip_t) -1;
 -	tif->tif_col = (uint32) -1;
 -	tif->tif_curtile = (ttile_t) -1;
 -	tif->tif_tilesize = (tsize_t) -1;
 -
 -	tif->tif_scanlinesize = TIFFScanlineSize(tif);
 -	if (!tif->tif_scanlinesize) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "%s: cannot handle zero scanline size",
 -			     tif->tif_name);
 -		return (0);
 -	}
 -
 -	if (isTiled(tif)) {
 -		tif->tif_tilesize = TIFFTileSize(tif);
 -		if (!tif->tif_tilesize) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				     "%s: cannot handle zero tile size",
 -				     tif->tif_name);
 -			return (0);
 -		}
 -	} else {
 -		if (!TIFFStripSize(tif)) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				     "%s: cannot handle zero strip size",
 -				     tif->tif_name);
 -			return (0);
 -		}
 -	}
 -	return (1);
 -bad:
 -	if (dir)
 -		_TIFFfree(dir);
 -	return (0);
 -}
 -
 -static TIFFDirEntry*
 -TIFFReadDirectoryFind(TIFFDirEntry* dir, uint16 dircount, uint16 tagid)
 -{
 -	TIFFDirEntry* m;
 -	uint16 n;
 -	for (m=dir, n=0; n<dircount; m++, n++)
 -	{
 -		if (m->tdir_tag==tagid)
 -			return(m);
 -	}
 -	return(0);
 -}
 -
 -/*
 - * Read custom directory from the arbitarry offset.
 - * The code is very similar to TIFFReadDirectory().
 - */
 -int
 -TIFFReadCustomDirectory(TIFF* tif, toff_t diroff,
 -			const TIFFFieldInfo info[], size_t n)
 -{
 -	static const char module[] = "TIFFReadCustomDirectory";
 -
 -	TIFFDirectory* td = &tif->tif_dir;
 -	TIFFDirEntry *dp, *dir = NULL;
 -	const TIFFFieldInfo* fip;
 -	size_t fix;
 -	uint16 i, dircount;
 -
 -	_TIFFSetupFieldInfo(tif, info, n);
 -
 -	dircount = TIFFFetchDirectory(tif, diroff, &dir, NULL);
 -	if (!dircount) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			"%s: Failed to read custom directory at offset %u",
 -			     tif->tif_name, diroff);
 -		return 0;
 -	}
 -
 -	TIFFFreeDirectory(tif);
 -        _TIFFmemset(&tif->tif_dir, 0, sizeof(TIFFDirectory));
 -
 -	fix = 0;
 -	for (dp = dir, i = dircount; i > 0; i--, dp++) {
 -		if (tif->tif_flags & TIFF_SWAB) {
 -			TIFFSwabArrayOfShort(&dp->tdir_tag, 2);
 -			TIFFSwabArrayOfLong(&dp->tdir_count, 2);
 -		}
 -
 -		if (fix >= tif->tif_nfields || dp->tdir_tag == IGNORE)
 -			continue;
 -
 -		while (fix < tif->tif_nfields &&
 -		       tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag)
 -			fix++;
 -
 -		if (fix >= tif->tif_nfields ||
 -		    tif->tif_fieldinfo[fix]->field_tag != dp->tdir_tag) {
 -
 -			TIFFWarningExt(tif->tif_clientdata, module,
 -                        "%s: unknown field with tag %d (0x%x) encountered",
 -				    tif->tif_name, dp->tdir_tag, dp->tdir_tag);
 -			if (!_TIFFMergeFieldInfo(tif,
 -						 _TIFFCreateAnonFieldInfo(tif,
 -						 dp->tdir_tag,
 -						 (TIFFDataType) dp->tdir_type),
 -						 1))
 -			{
 -				TIFFWarningExt(tif->tif_clientdata, module,
 -			"Registering anonymous field with tag %d (0x%x) failed",
 -						dp->tdir_tag, dp->tdir_tag);
 -				goto ignore;
 -			}
 -
 -			fix = 0;
 -			while (fix < tif->tif_nfields &&
 -			       tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag)
 -				fix++;
 -		}
 -		/*
 -		 * Null out old tags that we ignore.
 -		 */
 -		if (tif->tif_fieldinfo[fix]->field_bit == FIELD_IGNORE) {
 -	ignore:
 -			dp->tdir_tag = IGNORE;
 -			continue;
 -		}
 -		/*
 -		 * Check data type.
 -		 */
 -		fip = tif->tif_fieldinfo[fix];
 -		while (dp->tdir_type != (unsigned short) fip->field_type
 -                       && fix < tif->tif_nfields) {
 -			if (fip->field_type == TIFF_ANY)	/* wildcard */
 -				break;
 -                        fip = tif->tif_fieldinfo[++fix];
 -			if (fix >= tif->tif_nfields ||
 -			    fip->field_tag != dp->tdir_tag) {
 -				TIFFWarningExt(tif->tif_clientdata, module,
 -			"%s: wrong data type %d for \"%s\"; tag ignored",
 -					    tif->tif_name, dp->tdir_type,
 -					    tif->tif_fieldinfo[fix-1]->field_name);
 -				goto ignore;
 -			}
 -		}
 -		/*
 -		 * Check count if known in advance.
 -		 */
 -		if (fip->field_readcount != TIFF_VARIABLE
 -		    && fip->field_readcount != TIFF_VARIABLE2) {
 -			uint32 expected = (fip->field_readcount == TIFF_SPP) ?
 -			    (uint32) td->td_samplesperpixel :
 -			    (uint32) fip->field_readcount;
 -			if (!CheckDirCount(tif, dp, expected))
 -				goto ignore;
 -		}
 -
 -		/*
 -		 * EXIF tags which need to be specifically processed.
 -		 */
 -		switch (dp->tdir_tag) {
 -			case EXIFTAG_SUBJECTDISTANCE:
 -				(void) TIFFFetchSubjectDistance(tif, dp);
 -				break;
 -			default:
 -				(void) TIFFFetchNormalTag(tif, dp);
 -				break;
 -		}
 -	}
 -	
 -	if (dir)
 -		_TIFFfree(dir);
 -	return 1;
 -}
 -
 -/*
 - * EXIF is important special case of custom IFD, so we have a special
 - * function to read it.
 - */
 -int
 -TIFFReadEXIFDirectory(TIFF* tif, toff_t diroff)
 -{
 -	size_t exifFieldInfoCount;
 -	const TIFFFieldInfo *exifFieldInfo =
 -		_TIFFGetExifFieldInfo(&exifFieldInfoCount);
 -	return TIFFReadCustomDirectory(tif, diroff, exifFieldInfo,
 -				       exifFieldInfoCount);
 -}
 -
 -static int
 -EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount)
 -{
 -	static const char module[] = "EstimateStripByteCounts";
 -
 -	TIFFDirEntry *dp;
 -	TIFFDirectory *td = &tif->tif_dir;
 -	uint32 strip;
 -
 -	if (td->td_stripbytecount)
 -		_TIFFfree(td->td_stripbytecount);
 -	td->td_stripbytecount = (uint32*)
 -	    _TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint32),
 -		"for \"StripByteCounts\" array");
 -        if ( td->td_stripbytecount == NULL )
 -            return -1;
 -
 -	if (td->td_compression != COMPRESSION_NONE) {
 -		uint32 space = (uint32)(sizeof (TIFFHeader)
 -		    + sizeof (uint16)
 -		    + (dircount * sizeof (TIFFDirEntry))
 -		    + sizeof (uint32));
 -		toff_t filesize = TIFFGetFileSize(tif);
 -		uint16 n;
 -
 -		/* calculate amount of space used by indirect values */
 -		for (dp = dir, n = dircount; n > 0; n--, dp++)
 -		{
 -			uint32 cc = TIFFDataWidth((TIFFDataType) dp->tdir_type);
 -			if (cc == 0) {
 -				TIFFErrorExt(tif->tif_clientdata, module,
 -			"%s: Cannot determine size of unknown tag type %d",
 -					  tif->tif_name, dp->tdir_type);
 -				return -1;
 -			}
 -			cc = cc * dp->tdir_count;
 -			if (cc > sizeof (uint32))
 -				space += cc;
 -		}
 -		space = filesize - space;
 -		if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
 -			space /= td->td_samplesperpixel;
 -		for (strip = 0; strip < td->td_nstrips; strip++)
 -			td->td_stripbytecount[strip] = space;
 -		/*
 -		 * This gross hack handles the case were the offset to
 -		 * the last strip is past the place where we think the strip
 -		 * should begin.  Since a strip of data must be contiguous,
 -		 * it's safe to assume that we've overestimated the amount
 -		 * of data in the strip and trim this number back accordingly.
 -		 */ 
 -		strip--;
 -		if (((toff_t)(td->td_stripoffset[strip]+
 -			      td->td_stripbytecount[strip])) > filesize)
 -			td->td_stripbytecount[strip] =
 -			    filesize - td->td_stripoffset[strip];
 -	} else if (isTiled(tif)) {
 -		uint32 bytespertile = TIFFTileSize(tif);
 -
 -		for (strip = 0; strip < td->td_nstrips; strip++)
 -                    td->td_stripbytecount[strip] = bytespertile;
 -	} else {
 -		uint32 rowbytes = TIFFScanlineSize(tif);
 -		uint32 rowsperstrip = td->td_imagelength/td->td_stripsperimage;
 -		for (strip = 0; strip < td->td_nstrips; strip++)
 -			td->td_stripbytecount[strip] = rowbytes * rowsperstrip;
 -	}
 -	TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS);
 -	if (!TIFFFieldSet(tif, FIELD_ROWSPERSTRIP))
 -		td->td_rowsperstrip = td->td_imagelength;
 -	return 1;
 -}
 -
 -static void
 -MissingRequired(TIFF* tif, const char* tagname)
 -{
 -	static const char module[] = "MissingRequired";
 -
 -	TIFFErrorExt(tif->tif_clientdata, module,
 -		  "%s: TIFF directory is missing required \"%s\" field",
 -		  tif->tif_name, tagname);
 -}
 -
 -/*
 - * Check the directory offset against the list of already seen directory
 - * offsets. This is a trick to prevent IFD looping. The one can create TIFF
 - * file with looped directory pointers. We will maintain a list of already
 - * seen directories and check every IFD offset against that list.
 - */
 -static int
 -TIFFCheckDirOffset(TIFF* tif, toff_t diroff)
 -{
 -	uint16 n;
 -
 -	if (diroff == 0)			/* no more directories */
 -		return 0;
 -
 -	for (n = 0; n < tif->tif_dirnumber && tif->tif_dirlist; n++) {
 -		if (tif->tif_dirlist[n] == diroff)
 -			return 0;
 -	}
 -
 -	tif->tif_dirnumber++;
 -
 -	if (tif->tif_dirnumber > tif->tif_dirlistsize) {
 -		toff_t* new_dirlist;
 -
 -		/*
 -		 * XXX: Reduce memory allocation granularity of the dirlist
 -		 * array.
 -		 */
 -		new_dirlist = (toff_t *)_TIFFCheckRealloc(tif,
 -							  tif->tif_dirlist,
 -							  tif->tif_dirnumber,
 -							  2 * sizeof(toff_t),
 -							  "for IFD list");
 -		if (!new_dirlist)
 -			return 0;
 -		tif->tif_dirlistsize = 2 * tif->tif_dirnumber;
 -		tif->tif_dirlist = new_dirlist;
 -	}
 -
 -	tif->tif_dirlist[tif->tif_dirnumber - 1] = diroff;
 -
 -	return 1;
 -}
 -
 -/*
 - * Check the count field of a directory entry against a known value.  The
 - * caller is expected to skip/ignore the tag if there is a mismatch.
 - */
 -static int
 -CheckDirCount(TIFF* tif, TIFFDirEntry* dir, uint32 count)
 -{
 -	if (count > dir->tdir_count) {
 -		TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
 -	"incorrect count for field \"%s\" (%u, expecting %u); tag ignored",
 -		    _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name,
 -		    dir->tdir_count, count);
 -		return (0);
 -	} else if (count < dir->tdir_count) {
 -		TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
 -	"incorrect count for field \"%s\" (%u, expecting %u); tag trimmed",
 -		    _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name,
 -		    dir->tdir_count, count);
 -		dir->tdir_count = count;
 -		return (1);
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Read IFD structure from the specified offset. If the pointer to
 - * nextdiroff variable has been specified, read it too. Function returns a
 - * number of fields in the directory or 0 if failed.
 - */
 -static uint16
 -TIFFFetchDirectory(TIFF* tif, toff_t diroff, TIFFDirEntry **pdir,
 -		   toff_t *nextdiroff)
 -{
 -	static const char module[] = "TIFFFetchDirectory";
 -
 -	TIFFDirEntry *dir;
 -	uint16 dircount;
 -
 -	assert(pdir);
 -
 -	tif->tif_diroff = diroff;
 -	if (nextdiroff)
 -		*nextdiroff = 0;
 -	if (!isMapped(tif)) {
 -		if (!SeekOK(tif, tif->tif_diroff)) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				"%s: Seek error accessing TIFF directory",
 -				tif->tif_name);
 -			return 0;
 -		}
 -		if (!ReadOK(tif, &dircount, sizeof (uint16))) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				"%s: Can not read TIFF directory count",
 -				tif->tif_name);
 -			return 0;
 -		}
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabShort(&dircount);
 -		dir = (TIFFDirEntry *)_TIFFCheckMalloc(tif, dircount,
 -						sizeof (TIFFDirEntry),
 -						"to read TIFF directory");
 -		if (dir == NULL)
 -			return 0;
 -		if (!ReadOK(tif, dir, dircount*sizeof (TIFFDirEntry))) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				"%.100s: Can not read TIFF directory",
 -				tif->tif_name);
 -			_TIFFfree(dir);
 -			return 0;
 -		}
 -		/*
 -		 * Read offset to next directory for sequential scans if
 -		 * needed.
 -		 */
 -		if (nextdiroff)
 -			(void) ReadOK(tif, nextdiroff, sizeof(uint32));
 -	} else {
 -		toff_t off = tif->tif_diroff;
 -
 -		/*
 -		 * Check for integer overflow when validating the dir_off,
 -		 * otherwise a very high offset may cause an OOB read and
 -		 * crash the client. Make two comparisons instead of
 -		 *
 -		 *  off + sizeof(uint16) > tif->tif_size
 -		 *
 -		 * to avoid overflow.
 -		 */
 -		if (tif->tif_size < sizeof (uint16) ||
 -		    off > tif->tif_size - sizeof(uint16)) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				"%s: Can not read TIFF directory count",
 -				tif->tif_name);
 -			return 0;
 -		} else {
 -			_TIFFmemcpy(&dircount, tif->tif_base + off,
 -				    sizeof(uint16));
 -		}
 -		off += sizeof (uint16);
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabShort(&dircount);
 -		dir = (TIFFDirEntry *)_TIFFCheckMalloc(tif, dircount,
 -						sizeof(TIFFDirEntry),
 -						"to read TIFF directory");
 -		if (dir == NULL)
 -			return 0;
 -		if (off + dircount * sizeof (TIFFDirEntry) > tif->tif_size) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				     "%s: Can not read TIFF directory",
 -				     tif->tif_name);
 -			_TIFFfree(dir);
 -			return 0;
 -		} else {
 -			_TIFFmemcpy(dir, tif->tif_base + off,
 -				    dircount * sizeof(TIFFDirEntry));
 -		}
 -		if (nextdiroff) {
 -			off += dircount * sizeof (TIFFDirEntry);
 -			if (off + sizeof (uint32) <= tif->tif_size) {
 -				_TIFFmemcpy(nextdiroff, tif->tif_base + off,
 -					    sizeof (uint32));
 -			}
 -		}
 -	}
 -	if (nextdiroff && tif->tif_flags & TIFF_SWAB)
 -		TIFFSwabLong(nextdiroff);
 -	*pdir = dir;
 -	return dircount;
 -}
 -
 -/*
 - * Fetch a contiguous directory item.
 - */
 -static tsize_t
 -TIFFFetchData(TIFF* tif, TIFFDirEntry* dir, char* cp)
 -{
 -	uint32 w = TIFFDataWidth((TIFFDataType) dir->tdir_type);
 -	/* 
 -	 * FIXME: butecount should have tsize_t type, but for now libtiff
 -	 * defines tsize_t as a signed 32-bit integer and we are losing
 -	 * ability to read arrays larger than 2^31 bytes. So we are using
 -	 * uint32 instead of tsize_t here.
 -	 */
 -	uint32 cc = dir->tdir_count * w;
 -
 -	/* Check for overflow. */
 -	if (!dir->tdir_count || !w || cc / w != dir->tdir_count)
 -		goto bad;
 -
 -	if (!isMapped(tif)) {
 -		if (!SeekOK(tif, dir->tdir_offset))
 -			goto bad;
 -		if (!ReadOK(tif, cp, cc))
 -			goto bad;
 -	} else {
 -		/* Check for overflow. */
 -		if (dir->tdir_offset + cc < dir->tdir_offset
 -		    || dir->tdir_offset + cc < cc
 -		    || dir->tdir_offset + cc > tif->tif_size)
 -			goto bad;
 -		_TIFFmemcpy(cp, tif->tif_base + dir->tdir_offset, cc);
 -	}
 -	if (tif->tif_flags & TIFF_SWAB) {
 -		switch (dir->tdir_type) {
 -		case TIFF_SHORT:
 -		case TIFF_SSHORT:
 -			TIFFSwabArrayOfShort((uint16*) cp, dir->tdir_count);
 -			break;
 -		case TIFF_LONG:
 -		case TIFF_SLONG:
 -		case TIFF_FLOAT:
 -			TIFFSwabArrayOfLong((uint32*) cp, dir->tdir_count);
 -			break;
 -		case TIFF_RATIONAL:
 -		case TIFF_SRATIONAL:
 -			TIFFSwabArrayOfLong((uint32*) cp, 2*dir->tdir_count);
 -			break;
 -		case TIFF_DOUBLE:
 -			TIFFSwabArrayOfDouble((double*) cp, dir->tdir_count);
 -			break;
 -		}
 -	}
 -	return (cc);
 -bad:
 -	TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		     "Error fetching data for field \"%s\"",
 -		     _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
 -	return (tsize_t) 0;
 -}
 -
 -/*
 - * Fetch an ASCII item from the file.
 - */
 -static tsize_t
 -TIFFFetchString(TIFF* tif, TIFFDirEntry* dir, char* cp)
 -{
 -	if (dir->tdir_count <= 4) {
 -		uint32 l = dir->tdir_offset;
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabLong(&l);
 -		_TIFFmemcpy(cp, &l, dir->tdir_count);
 -		return (1);
 -	}
 -	return (TIFFFetchData(tif, dir, cp));
 -}
 -
 -/*
 - * Convert numerator+denominator to float.
 - */
 -static int
 -cvtRational(TIFF* tif, TIFFDirEntry* dir, uint32 num, uint32 denom, float* rv)
 -{
 -	if (denom == 0) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		    "%s: Rational with zero denominator (num = %u)",
 -		    _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, num);
 -		return (0);
 -	} else {
 -		if (dir->tdir_type == TIFF_RATIONAL)
 -			*rv = ((float)num / (float)denom);
 -		else
 -			*rv = ((float)(int32)num / (float)(int32)denom);
 -		return (1);
 -	}
 -}
 -
 -/*
 - * Fetch a rational item from the file at offset off and return the value as a
 - * floating point number.
 - */
 -static float
 -TIFFFetchRational(TIFF* tif, TIFFDirEntry* dir)
 -{
 -	uint32 l[2];
 -	float v;
 -
 -	return (!TIFFFetchData(tif, dir, (char *)l) ||
 -	    !cvtRational(tif, dir, l[0], l[1], &v) ? 1.0f : v);
 -}
 -
 -/*
 - * Fetch a single floating point value from the offset field and return it as
 - * a native float.
 - */
 -static float
 -TIFFFetchFloat(TIFF* tif, TIFFDirEntry* dir)
 -{
 -	float v;
 -	int32 l = TIFFExtractData(tif, dir->tdir_type, dir->tdir_offset);
 -        _TIFFmemcpy(&v, &l, sizeof(float));
 -	TIFFCvtIEEEFloatToNative(tif, 1, &v);
 -	return (v);
 -}
 -
 -/*
 - * Fetch an array of BYTE or SBYTE values.
 - */
 -static int
 -TIFFFetchByteArray(TIFF* tif, TIFFDirEntry* dir, uint8* v)
 -{
 -    if (dir->tdir_count <= 4) {
 -        /*
 -         * Extract data from offset field.
 -         */
 -        if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) {
 -	    if (dir->tdir_type == TIFF_SBYTE)
 -                switch (dir->tdir_count) {
 -                    case 4: v[3] = dir->tdir_offset & 0xff;
 -                    case 3: v[2] = (dir->tdir_offset >> 8) & 0xff;
 -                    case 2: v[1] = (dir->tdir_offset >> 16) & 0xff;
 -		    case 1: v[0] = dir->tdir_offset >> 24;
 -                }
 -	    else
 -                switch (dir->tdir_count) {
 -                    case 4: v[3] = dir->tdir_offset & 0xff;
 -                    case 3: v[2] = (dir->tdir_offset >> 8) & 0xff;
 -                    case 2: v[1] = (dir->tdir_offset >> 16) & 0xff;
 -		    case 1: v[0] = dir->tdir_offset >> 24;
 -                }
 -	} else {
 -	    if (dir->tdir_type == TIFF_SBYTE)
 -                switch (dir->tdir_count) {
 -                    case 4: v[3] = dir->tdir_offset >> 24;
 -                    case 3: v[2] = (dir->tdir_offset >> 16) & 0xff;
 -                    case 2: v[1] = (dir->tdir_offset >> 8) & 0xff;
 -                    case 1: v[0] = dir->tdir_offset & 0xff;
 -		}
 -	    else
 -                switch (dir->tdir_count) {
 -                    case 4: v[3] = dir->tdir_offset >> 24;
 -                    case 3: v[2] = (dir->tdir_offset >> 16) & 0xff;
 -                    case 2: v[1] = (dir->tdir_offset >> 8) & 0xff;
 -                    case 1: v[0] = dir->tdir_offset & 0xff;
 -		}
 -	}
 -        return (1);
 -    } else
 -        return (TIFFFetchData(tif, dir, (char*) v) != 0);	/* XXX */
 -}
 -
 -/*
 - * Fetch an array of SHORT or SSHORT values.
 - */
 -static int
 -TIFFFetchShortArray(TIFF* tif, TIFFDirEntry* dir, uint16* v)
 -{
 -	if (dir->tdir_count <= 2) {
 -		if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) {
 -			switch (dir->tdir_count) {
 -			case 2: v[1] = (uint16) (dir->tdir_offset & 0xffff);
 -			case 1: v[0] = (uint16) (dir->tdir_offset >> 16);
 -			}
 -		} else {
 -			switch (dir->tdir_count) {
 -			case 2: v[1] = (uint16) (dir->tdir_offset >> 16);
 -			case 1: v[0] = (uint16) (dir->tdir_offset & 0xffff);
 -			}
 -		}
 -		return (1);
 -	} else
 -		return (TIFFFetchData(tif, dir, (char *)v) != 0);
 -}
 -
 -/*
 - * Fetch a pair of SHORT or BYTE values. Some tags may have either BYTE
 - * or SHORT type and this function works with both ones.
 - */
 -static int
 -TIFFFetchShortPair(TIFF* tif, TIFFDirEntry* dir)
 -{
 -	/*
 -	 * Prevent overflowing the v stack arrays below by performing a sanity
 -	 * check on tdir_count, this should never be greater than two.
 -	 */
 -	if (dir->tdir_count > 2) {
 -		TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
 -		"unexpected count for field \"%s\", %u, expected 2; ignored",
 -			_TIFFFieldWithTag(tif, dir->tdir_tag)->field_name,
 -			dir->tdir_count);
 -		return 0;
 -	}
 -
 -	switch (dir->tdir_type) {
 -		case TIFF_BYTE:
 -		case TIFF_SBYTE:
 -			{
 -			uint8 v[4];
 -			return TIFFFetchByteArray(tif, dir, v)
 -				&& TIFFSetField(tif, dir->tdir_tag, v[0], v[1]);
 -			}
 -		case TIFF_SHORT:
 -		case TIFF_SSHORT:
 -			{
 -			uint16 v[2];
 -			return TIFFFetchShortArray(tif, dir, v)
 -				&& TIFFSetField(tif, dir->tdir_tag, v[0], v[1]);
 -			}
 -		default:
 -			return 0;
 -	}
 -}
 -
 -/*
 - * Fetch an array of LONG or SLONG values.
 - */
 -static int
 -TIFFFetchLongArray(TIFF* tif, TIFFDirEntry* dir, uint32* v)
 -{
 -	if (dir->tdir_count == 1) {
 -		v[0] = dir->tdir_offset;
 -		return (1);
 -	} else
 -		return (TIFFFetchData(tif, dir, (char*) v) != 0);
 -}
 -
 -/*
 - * Fetch an array of RATIONAL or SRATIONAL values.
 - */
 -static int
 -TIFFFetchRationalArray(TIFF* tif, TIFFDirEntry* dir, float* v)
 -{
 -	int ok = 0;
 -	uint32* l;
 -
 -	l = (uint32*)_TIFFCheckMalloc(tif,
 -	    dir->tdir_count, TIFFDataWidth((TIFFDataType) dir->tdir_type),
 -	    "to fetch array of rationals");
 -	if (l) {
 -		if (TIFFFetchData(tif, dir, (char *)l)) {
 -			uint32 i;
 -			for (i = 0; i < dir->tdir_count; i++) {
 -				ok = cvtRational(tif, dir,
 -				    l[2*i+0], l[2*i+1], &v[i]);
 -				if (!ok)
 -					break;
 -			}
 -		}
 -		_TIFFfree((char *)l);
 -	}
 -	return (ok);
 -}
 -
 -/*
 - * Fetch an array of FLOAT values.
 - */
 -static int
 -TIFFFetchFloatArray(TIFF* tif, TIFFDirEntry* dir, float* v)
 -{
 -
 -	if (dir->tdir_count == 1) {
 -	        union
 -		{
 -		  float  f;
 -		  uint32 i;
 -		} float_union;
 -
 -		float_union.i=dir->tdir_offset;
 -		v[0]=float_union.f;
 -		TIFFCvtIEEEFloatToNative(tif, dir->tdir_count, v);
 -		return (1);
 -	} else	if (TIFFFetchData(tif, dir, (char*) v)) {
 -		TIFFCvtIEEEFloatToNative(tif, dir->tdir_count, v);
 -		return (1);
 -	} else
 -		return (0);
 -}
 -
 -/*
 - * Fetch an array of DOUBLE values.
 - */
 -static int
 -TIFFFetchDoubleArray(TIFF* tif, TIFFDirEntry* dir, double* v)
 -{
 -	if (TIFFFetchData(tif, dir, (char*) v)) {
 -		TIFFCvtIEEEDoubleToNative(tif, dir->tdir_count, v);
 -		return (1);
 -	} else
 -		return (0);
 -}
 -
 -/*
 - * Fetch an array of ANY values.  The actual values are returned as doubles
 - * which should be able hold all the types.  Yes, there really should be an
 - * tany_t to avoid this potential non-portability ...  Note in particular that
 - * we assume that the double return value vector is large enough to read in
 - * any fundamental type.  We use that vector as a buffer to read in the base
 - * type vector and then convert it in place to double (from end to front of
 - * course).
 - */
 -static int
 -TIFFFetchAnyArray(TIFF* tif, TIFFDirEntry* dir, double* v)
 -{
 -	int i;
 -
 -	switch (dir->tdir_type) {
 -	case TIFF_BYTE:
 -	case TIFF_SBYTE:
 -		if (!TIFFFetchByteArray(tif, dir, (uint8*) v))
 -			return (0);
 -		if (dir->tdir_type == TIFF_BYTE) {
 -			uint8* vp = (uint8*) v;
 -			for (i = dir->tdir_count-1; i >= 0; i--)
 -				v[i] = vp[i];
 -		} else {
 -			int8* vp = (int8*) v;
 -			for (i = dir->tdir_count-1; i >= 0; i--)
 -				v[i] = vp[i];
 -		}
 -		break;
 -	case TIFF_SHORT:
 -	case TIFF_SSHORT:
 -		if (!TIFFFetchShortArray(tif, dir, (uint16*) v))
 -			return (0);
 -		if (dir->tdir_type == TIFF_SHORT) {
 -			uint16* vp = (uint16*) v;
 -			for (i = dir->tdir_count-1; i >= 0; i--)
 -				v[i] = vp[i];
 -		} else {
 -			int16* vp = (int16*) v;
 -			for (i = dir->tdir_count-1; i >= 0; i--)
 -				v[i] = vp[i];
 -		}
 -		break;
 -	case TIFF_LONG:
 -	case TIFF_SLONG:
 -		if (!TIFFFetchLongArray(tif, dir, (uint32*) v))
 -			return (0);
 -		if (dir->tdir_type == TIFF_LONG) {
 -			uint32* vp = (uint32*) v;
 -			for (i = dir->tdir_count-1; i >= 0; i--)
 -				v[i] = vp[i];
 -		} else {
 -			int32* vp = (int32*) v;
 -			for (i = dir->tdir_count-1; i >= 0; i--)
 -				v[i] = vp[i];
 -		}
 -		break;
 -	case TIFF_RATIONAL:
 -	case TIFF_SRATIONAL:
 -		if (!TIFFFetchRationalArray(tif, dir, (float*) v))
 -			return (0);
 -		{ float* vp = (float*) v;
 -		  for (i = dir->tdir_count-1; i >= 0; i--)
 -			v[i] = vp[i];
 -		}
 -		break;
 -	case TIFF_FLOAT:
 -		if (!TIFFFetchFloatArray(tif, dir, (float*) v))
 -			return (0);
 -		{ float* vp = (float*) v;
 -		  for (i = dir->tdir_count-1; i >= 0; i--)
 -			v[i] = vp[i];
 -		}
 -		break;
 -	case TIFF_DOUBLE:
 -		return (TIFFFetchDoubleArray(tif, dir, (double*) v));
 -	default:
 -		/* TIFF_NOTYPE */
 -		/* TIFF_ASCII */
 -		/* TIFF_UNDEFINED */
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "cannot read TIFF_ANY type %d for field \"%s\"",
 -			     dir->tdir_type,
 -			     _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Fetch a tag that is not handled by special case code.
 - */
 -static int
 -TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp)
 -{
 -	static const char mesg[] = "to fetch tag value";
 -	int ok = 0;
 -	const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dp->tdir_tag);
 -
 -	if (dp->tdir_count > 1) {		/* array of values */
 -		char* cp = NULL;
 -
 -		switch (dp->tdir_type) {
 -		case TIFF_BYTE:
 -		case TIFF_SBYTE:
 -			cp = (char *)_TIFFCheckMalloc(tif,
 -			    dp->tdir_count, sizeof (uint8), mesg);
 -			ok = cp && TIFFFetchByteArray(tif, dp, (uint8*) cp);
 -			break;
 -		case TIFF_SHORT:
 -		case TIFF_SSHORT:
 -			cp = (char *)_TIFFCheckMalloc(tif,
 -			    dp->tdir_count, sizeof (uint16), mesg);
 -			ok = cp && TIFFFetchShortArray(tif, dp, (uint16*) cp);
 -			break;
 -		case TIFF_LONG:
 -		case TIFF_SLONG:
 -			cp = (char *)_TIFFCheckMalloc(tif,
 -			    dp->tdir_count, sizeof (uint32), mesg);
 -			ok = cp && TIFFFetchLongArray(tif, dp, (uint32*) cp);
 -			break;
 -		case TIFF_RATIONAL:
 -		case TIFF_SRATIONAL:
 -			cp = (char *)_TIFFCheckMalloc(tif,
 -			    dp->tdir_count, sizeof (float), mesg);
 -			ok = cp && TIFFFetchRationalArray(tif, dp, (float*) cp);
 -			break;
 -		case TIFF_FLOAT:
 -			cp = (char *)_TIFFCheckMalloc(tif,
 -			    dp->tdir_count, sizeof (float), mesg);
 -			ok = cp && TIFFFetchFloatArray(tif, dp, (float*) cp);
 -			break;
 -		case TIFF_DOUBLE:
 -			cp = (char *)_TIFFCheckMalloc(tif,
 -			    dp->tdir_count, sizeof (double), mesg);
 -			ok = cp && TIFFFetchDoubleArray(tif, dp, (double*) cp);
 -			break;
 -		case TIFF_ASCII:
 -		case TIFF_UNDEFINED:		/* bit of a cheat... */
 -			/*
 -			 * Some vendors write strings w/o the trailing
 -			 * NULL byte, so always append one just in case.
 -			 */
 -			cp = (char *)_TIFFCheckMalloc(tif, dp->tdir_count + 1,
 -						      1, mesg);
 -			if ( (ok = (cp && TIFFFetchString(tif, dp, cp))) != 0 )
 -				cp[dp->tdir_count] = '\0';	/* XXX */
 -			break;
 -		}
 -		if (ok) {
 -			ok = (fip->field_passcount ?
 -			    TIFFSetField(tif, dp->tdir_tag, dp->tdir_count, cp)
 -			  : TIFFSetField(tif, dp->tdir_tag, cp));
 -		}
 -		if (cp != NULL)
 -			_TIFFfree(cp);
 -	} else if (CheckDirCount(tif, dp, 1)) {	/* singleton value */
 -		switch (dp->tdir_type) {
 -		case TIFF_BYTE:
 -		case TIFF_SBYTE:
 -		case TIFF_SHORT:
 -		case TIFF_SSHORT:
 -			/*
 -			 * If the tag is also acceptable as a LONG or SLONG
 -			 * then TIFFSetField will expect an uint32 parameter
 -			 * passed to it (through varargs).  Thus, for machines
 -			 * where sizeof (int) != sizeof (uint32) we must do
 -			 * a careful check here.  It's hard to say if this
 -			 * is worth optimizing.
 -			 *
 -			 * NB: We use TIFFFieldWithTag here knowing that
 -			 *     it returns us the first entry in the table
 -			 *     for the tag and that that entry is for the
 -			 *     widest potential data type the tag may have.
 -			 */
 -			{ TIFFDataType type = fip->field_type;
 -			  if (type != TIFF_LONG && type != TIFF_SLONG) {
 -				uint16 v = (uint16)
 -			   TIFFExtractData(tif, dp->tdir_type, dp->tdir_offset);
 -				ok = (fip->field_passcount ?
 -				    TIFFSetField(tif, dp->tdir_tag, 1, &v)
 -				  : TIFFSetField(tif, dp->tdir_tag, v));
 -				break;
 -			  }
 -			}
 -			/* fall thru... */
 -		case TIFF_LONG:
 -		case TIFF_SLONG:
 -			{ uint32 v32 =
 -		    TIFFExtractData(tif, dp->tdir_type, dp->tdir_offset);
 -			  ok = (fip->field_passcount ? 
 -			      TIFFSetField(tif, dp->tdir_tag, 1, &v32)
 -			    : TIFFSetField(tif, dp->tdir_tag, v32));
 -			}
 -			break;
 -		case TIFF_RATIONAL:
 -		case TIFF_SRATIONAL:
 -		case TIFF_FLOAT:
 -			{ float v = (dp->tdir_type == TIFF_FLOAT ? 
 -			      TIFFFetchFloat(tif, dp)
 -			    : TIFFFetchRational(tif, dp));
 -			  ok = (fip->field_passcount ?
 -			      TIFFSetField(tif, dp->tdir_tag, 1, &v)
 -			    : TIFFSetField(tif, dp->tdir_tag, v));
 -			}
 -			break;
 -		case TIFF_DOUBLE:
 -			{ double v;
 -			  ok = (TIFFFetchDoubleArray(tif, dp, &v) &&
 -			    (fip->field_passcount ?
 -			      TIFFSetField(tif, dp->tdir_tag, 1, &v)
 -			    : TIFFSetField(tif, dp->tdir_tag, v))
 -			  );
 -			}
 -			break;
 -		case TIFF_ASCII:
 -		case TIFF_UNDEFINED:		/* bit of a cheat... */
 -			{ char c[2];
 -			  if ( (ok = (TIFFFetchString(tif, dp, c) != 0)) != 0 ) {
 -				c[1] = '\0';		/* XXX paranoid */
 -				ok = (fip->field_passcount ?
 -					TIFFSetField(tif, dp->tdir_tag, 1, c)
 -				      : TIFFSetField(tif, dp->tdir_tag, c));
 -			  }
 -			}
 -			break;
 -		}
 -	}
 -	return (ok);
 -}
 -
 -#define	NITEMS(x)	(sizeof (x) / sizeof (x[0]))
 -/*
 - * Fetch samples/pixel short values for 
 - * the specified tag and verify that
 - * all values are the same.
 - */
 -static int
 -TIFFFetchPerSampleShorts(TIFF* tif, TIFFDirEntry* dir, uint16* pl)
 -{
 -    uint16 samples = tif->tif_dir.td_samplesperpixel;
 -    int status = 0;
 -
 -    if (CheckDirCount(tif, dir, (uint32) samples)) {
 -        uint16 buf[10];
 -        uint16* v = buf;
 -
 -        if (dir->tdir_count > NITEMS(buf))
 -            v = (uint16*) _TIFFCheckMalloc(tif, dir->tdir_count, sizeof(uint16),
 -                                      "to fetch per-sample values");
 -        if (v && TIFFFetchShortArray(tif, dir, v)) {
 -            uint16 i;
 -            int check_count = dir->tdir_count;
 -            if ( samples < check_count )
 -                check_count = samples;
 -
 -            for (i = 1; i < check_count; i++)
 -                if (v[i] != v[0]) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -                "Cannot handle different per-sample values for field \"%s\"",
 -			_TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
 -			goto bad;
 -                }
 -            *pl = v[0];
 -            status = 1;
 -        }
 -      bad:
 -        if (v && v != buf)
 -            _TIFFfree(v);
 -    }
 -    return (status);
 -}
 -
 -/*
 - * Fetch samples/pixel long values for 
 - * the specified tag and verify that
 - * all values are the same.
 - */
 -static int
 -TIFFFetchPerSampleLongs(TIFF* tif, TIFFDirEntry* dir, uint32* pl)
 -{
 -    uint16 samples = tif->tif_dir.td_samplesperpixel;
 -    int status = 0;
 -
 -    if (CheckDirCount(tif, dir, (uint32) samples)) {
 -        uint32 buf[10];
 -        uint32* v = buf;
 -
 -        if (dir->tdir_count > NITEMS(buf))
 -            v = (uint32*) _TIFFCheckMalloc(tif, dir->tdir_count, sizeof(uint32),
 -                                      "to fetch per-sample values");
 -        if (v && TIFFFetchLongArray(tif, dir, v)) {
 -            uint16 i;
 -            int check_count = dir->tdir_count;
 -
 -            if ( samples < check_count )
 -                check_count = samples;
 -            for (i = 1; i < check_count; i++)
 -                if (v[i] != v[0]) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -                "Cannot handle different per-sample values for field \"%s\"",
 -			_TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
 -			goto bad;
 -                }
 -            *pl = v[0];
 -            status = 1;
 -        }
 -      bad:
 -        if (v && v != buf)
 -            _TIFFfree(v);
 -    }
 -    return (status);
 -}
 -
 -/*
 - * Fetch samples/pixel ANY values for the specified tag and returns their min
 - * and max.
 - */
 -static int
 -TIFFFetchPerSampleAnys(TIFF* tif, TIFFDirEntry* dir, double* minv, double* maxv)
 -{
 -    uint16 samples = tif->tif_dir.td_samplesperpixel;
 -    int status = 0;
 -
 -    if (CheckDirCount(tif, dir, (uint32) samples)) {
 -        double buf[10];
 -        double* v = buf;
 -
 -        if (dir->tdir_count > NITEMS(buf))
 -            v = (double*) _TIFFCheckMalloc(tif, dir->tdir_count, sizeof (double),
 -                                      "to fetch per-sample values");
 -        if (v && TIFFFetchAnyArray(tif, dir, v)) {
 -            uint16 i;
 -            int check_count = dir->tdir_count;
 -            if ( samples < check_count )
 -                check_count = samples;
 -
 -            *minv = *maxv = v[0];
 -            for (i = 1; i < check_count; i++)
 -            {
 -                if (v[i] < *minv)
 -                    *minv = v[i];
 -                if (v[i] > *maxv)
 -                    *maxv = v[i];
 -            }
 -            status = 1;
 -        }
 -        if (v && v != buf)
 -            _TIFFfree(v);
 -    }
 -    return (status);
 -}
 -#undef NITEMS
 -
 -/*
 - * Fetch a set of offsets or lengths.
 - * While this routine says "strips", in fact it's also used for tiles.
 - */
 -static int
 -TIFFFetchStripThing(TIFF* tif, TIFFDirEntry* dir, long nstrips, uint32** lpp)
 -{
 -	register uint32* lp;
 -	int status;
 -
 -        CheckDirCount(tif, dir, (uint32) nstrips);
 -
 -	/*
 -	 * Allocate space for strip information.
 -	 */
 -	if (*lpp == NULL &&
 -	    (*lpp = (uint32 *)_TIFFCheckMalloc(tif,
 -	      nstrips, sizeof (uint32), "for strip array")) == NULL)
 -		return (0);
 -	lp = *lpp;
 -        _TIFFmemset( lp, 0, sizeof(uint32) * nstrips );
 -
 -	if (dir->tdir_type == (int)TIFF_SHORT) {
 -		/*
 -		 * Handle uint16->uint32 expansion.
 -		 */
 -		uint16* dp = (uint16*) _TIFFCheckMalloc(tif,
 -		    dir->tdir_count, sizeof (uint16), "to fetch strip tag");
 -		if (dp == NULL)
 -			return (0);
 -		if ( (status = TIFFFetchShortArray(tif, dir, dp)) != 0 ) {
 -                    int i;
 -                    
 -                    for ( i = 0; i < nstrips && i < (int) dir->tdir_count; i++ )
 -                    {
 -                        lp[i] = dp[i];
 -                    }
 -		}
 -		_TIFFfree((char*) dp);
 -
 -        } else if ( nstrips != (int) dir->tdir_count ) {
 -            /* Special case to correct length */
 -
 -            uint32* dp = (uint32*) _TIFFCheckMalloc(tif,
 -		    dir->tdir_count, sizeof (uint32), "to fetch strip tag");
 -            if (dp == NULL)
 -                return (0);
 -
 -            status = TIFFFetchLongArray(tif, dir, dp);
 -            if ( status != 0 ) {
 -                int i;
 -
 -                for ( i = 0; i < nstrips && i < (int) dir->tdir_count; i++ )
 -                {
 -                    lp[i] = dp[i];
 -                }
 -            }
 -
 -            _TIFFfree( (char *) dp );
 -	} else
 -            status = TIFFFetchLongArray(tif, dir, lp);
 -        
 -	return (status);
 -}
 -
 -/*
 - * Fetch and set the RefBlackWhite tag.
 - */
 -static int
 -TIFFFetchRefBlackWhite(TIFF* tif, TIFFDirEntry* dir)
 -{
 -	static const char mesg[] = "for \"ReferenceBlackWhite\" array";
 -	char* cp;
 -	int ok;
 -
 -	if (dir->tdir_type == TIFF_RATIONAL)
 -		return (TIFFFetchNormalTag(tif, dir));
 -	/*
 -	 * Handle LONG's for backward compatibility.
 -	 */
 -	cp = (char *)_TIFFCheckMalloc(tif, dir->tdir_count,
 -				      sizeof (uint32), mesg);
 -	if ( (ok = (cp && TIFFFetchLongArray(tif, dir, (uint32*) cp))) != 0) {
 -		float* fp = (float*)
 -		    _TIFFCheckMalloc(tif, dir->tdir_count, sizeof (float), mesg);
 -		if ( (ok = (fp != NULL)) != 0 ) {
 -			uint32 i;
 -			for (i = 0; i < dir->tdir_count; i++)
 -				fp[i] = (float)((uint32*) cp)[i];
 -			ok = TIFFSetField(tif, dir->tdir_tag, fp);
 -			_TIFFfree((char*) fp);
 -		}
 -	}
 -	if (cp)
 -		_TIFFfree(cp);
 -	return (ok);
 -}
 -
 -/*
 - * Fetch and set the SubjectDistance EXIF tag.
 - */
 -static int
 -TIFFFetchSubjectDistance(TIFF* tif, TIFFDirEntry* dir)
 -{
 -	uint32 l[2];
 -	float v;
 -	int ok = 0;
 -
 -    if ( dir->tdir_count != 1 || dir->tdir_type != TIFF_RATIONAL )
 -    {
 -		TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
 -                       "incorrect count or type for SubjectDistance, tag ignored" );
 -		return (0);
 -    }
 -
 -	if (TIFFFetchData(tif, dir, (char *)l)
 -	    && cvtRational(tif, dir, l[0], l[1], &v)) {
 -		/*
 -		 * XXX: Numerator 0xFFFFFFFF means that we have infinite
 -		 * distance. Indicate that with a negative floating point
 -		 * SubjectDistance value.
 -		 */
 -		ok = TIFFSetField(tif, dir->tdir_tag,
 -				  (l[0] != 0xFFFFFFFF) ? v : -v);
 -	}
 -
 -	return ok;
 -}
 -
 -/*
 - * Replace a single strip (tile) of uncompressed data by multiple strips
 - * (tiles), each approximately STRIP_SIZE_DEFAULT bytes. This is useful for
 - * dealing with large images or for dealing with machines with a limited
 - * amount memory.
 - */
 -static void
 -ChopUpSingleUncompressedStrip(TIFF* tif)
 -{
 -	register TIFFDirectory *td = &tif->tif_dir;
 -	uint32 bytecount = td->td_stripbytecount[0];
 -	uint32 offset = td->td_stripoffset[0];
 -	tsize_t rowbytes = TIFFVTileSize(tif, 1), stripbytes;
 -	tstrip_t strip, nstrips, rowsperstrip;
 -	uint32* newcounts;
 -	uint32* newoffsets;
 -
 -	/*
 -	 * Make the rows hold at least one scanline, but fill specified amount
 -	 * of data if possible.
 -	 */
 -	if (rowbytes > STRIP_SIZE_DEFAULT) {
 -		stripbytes = rowbytes;
 -		rowsperstrip = 1;
 -	} else if (rowbytes > 0 ) {
 -		rowsperstrip = STRIP_SIZE_DEFAULT / rowbytes;
 -		stripbytes = rowbytes * rowsperstrip;
 -	}
 -        else
 -            return;
 -
 -	/* 
 -	 * never increase the number of strips in an image
 -	 */
 -	if (rowsperstrip >= td->td_rowsperstrip)
 -		return;
 -	nstrips = (tstrip_t) TIFFhowmany(bytecount, stripbytes);
 -        if ( nstrips == 0 ) /* something is wonky, do nothing. */
 -            return;
 -
 -	newcounts = (uint32*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint32),
 -				"for chopped \"StripByteCounts\" array");
 -	newoffsets = (uint32*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint32),
 -				"for chopped \"StripOffsets\" array");
 -	if (newcounts == NULL || newoffsets == NULL) {
 -	        /*
 -		 * Unable to allocate new strip information, give up and use
 -		 * the original one strip information.
 -		 */
 -		if (newcounts != NULL)
 -			_TIFFfree(newcounts);
 -		if (newoffsets != NULL)
 -			_TIFFfree(newoffsets);
 -		return;
 -	}
 -	/*
 -	 * Fill the strip information arrays with new bytecounts and offsets
 -	 * that reflect the broken-up format.
 -	 */
 -	for (strip = 0; strip < nstrips; strip++) {
 -		if ((uint32)stripbytes > bytecount)
 -			stripbytes = bytecount;
 -		newcounts[strip] = stripbytes;
 -		newoffsets[strip] = offset;
 -		offset += stripbytes;
 -		bytecount -= stripbytes;
 -	}
 -	/*
 -	 * Replace old single strip info with multi-strip info.
 -	 */
 -	td->td_stripsperimage = td->td_nstrips = nstrips;
 -	TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip);
 -
 -	_TIFFfree(td->td_stripbytecount);
 -	_TIFFfree(td->td_stripoffset);
 -	td->td_stripbytecount = newcounts;
 -	td->td_stripoffset = newoffsets;
 -	td->td_stripbytecountsorted = 1;
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_dirwrite.c b/plugins/FreeImage/Source/LibTIFF/tif_dirwrite.c deleted file mode 100644 index 962937298e..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_dirwrite.c +++ /dev/null @@ -1,1436 +0,0 @@ -/* $Id: tif_dirwrite.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Directory Write Support Routines.
 - */
 -#include "tiffiop.h"
 -
 -#ifdef HAVE_IEEEFP
 -# define	TIFFCvtNativeToIEEEFloat(tif, n, fp)
 -# define	TIFFCvtNativeToIEEEDouble(tif, n, dp)
 -#else
 -extern	void TIFFCvtNativeToIEEEFloat(TIFF*, uint32, float*);
 -extern	void TIFFCvtNativeToIEEEDouble(TIFF*, uint32, double*);
 -#endif
 -
 -static	int TIFFWriteNormalTag(TIFF*, TIFFDirEntry*, const TIFFFieldInfo*);
 -static	void TIFFSetupShortLong(TIFF*, ttag_t, TIFFDirEntry*, uint32);
 -static	void TIFFSetupShort(TIFF*, ttag_t, TIFFDirEntry*, uint16);
 -static	int TIFFSetupBytePair(TIFF*, ttag_t, TIFFDirEntry*);
 -static	int TIFFSetupShortPair(TIFF*, ttag_t, TIFFDirEntry*);
 -static	int TIFFWritePerSampleShorts(TIFF*, ttag_t, TIFFDirEntry*);
 -static	int TIFFWritePerSampleAnys(TIFF*, TIFFDataType, ttag_t, TIFFDirEntry*);
 -static	int TIFFWriteShortTable(TIFF*, ttag_t, TIFFDirEntry*, uint32, uint16**);
 -static	int TIFFWriteShortArray(TIFF*, TIFFDirEntry*, uint16*);
 -static	int TIFFWriteLongArray(TIFF *, TIFFDirEntry*, uint32*);
 -static	int TIFFWriteRationalArray(TIFF *, TIFFDirEntry*, float*);
 -static	int TIFFWriteFloatArray(TIFF *, TIFFDirEntry*, float*);
 -static	int TIFFWriteDoubleArray(TIFF *, TIFFDirEntry*, double*);
 -static	int TIFFWriteByteArray(TIFF*, TIFFDirEntry*, char*);
 -static	int TIFFWriteAnyArray(TIFF*,
 -	    TIFFDataType, ttag_t, TIFFDirEntry*, uint32, double*);
 -static	int TIFFWriteTransferFunction(TIFF*, TIFFDirEntry*);
 -static	int TIFFWriteInkNames(TIFF*, TIFFDirEntry*);
 -static	int TIFFWriteData(TIFF*, TIFFDirEntry*, char*);
 -static	int TIFFLinkDirectory(TIFF*);
 -
 -#define	WriteRationalPair(type, tag1, v1, tag2, v2) {		\
 -	TIFFWriteRational((tif), (type), (tag1), (dir), (v1))	\
 -	TIFFWriteRational((tif), (type), (tag2), (dir)+1, (v2))	\
 -	(dir)++;						\
 -}
 -#define	TIFFWriteRational(tif, type, tag, dir, v)		\
 -	(dir)->tdir_tag = (tag);				\
 -	(dir)->tdir_type = (type);				\
 -	(dir)->tdir_count = 1;					\
 -	if (!TIFFWriteRationalArray((tif), (dir), &(v)))	\
 -		goto bad;
 -
 -/*
 - * Write the contents of the current directory
 - * to the specified file.  This routine doesn't
 - * handle overwriting a directory with auxiliary
 - * storage that's been changed.
 - */
 -static int
 -_TIFFWriteDirectory(TIFF* tif, int done)
 -{
 -	uint16 dircount;
 -	toff_t diroff;
 -	ttag_t tag;
 -	uint32 nfields;
 -	tsize_t dirsize;
 -	char* data;
 -	TIFFDirEntry* dir;
 -	TIFFDirectory* td;
 -	unsigned long b, fields[FIELD_SETLONGS];
 -	int fi, nfi;
 -
 -	if (tif->tif_mode == O_RDONLY)
 -		return (1);
 -	/*
 -	 * Clear write state so that subsequent images with
 -	 * different characteristics get the right buffers
 -	 * setup for them.
 -	 */
 -	if (done)
 -	{
 -		if (tif->tif_flags & TIFF_POSTENCODE) {
 -			tif->tif_flags &= ~TIFF_POSTENCODE;
 -			if (!(*tif->tif_postencode)(tif)) {
 -				TIFFErrorExt(tif->tif_clientdata,
 -					     tif->tif_name,
 -				"Error post-encoding before directory write");
 -				return (0);
 -			}
 -		}
 -		(*tif->tif_close)(tif);		/* shutdown encoder */
 -		/*
 -		 * Flush any data that might have been written
 - 		 * by the compression close+cleanup routines.
 -		 */
 -		if (tif->tif_rawcc > 0
 -                    && (tif->tif_flags & TIFF_BEENWRITING) != 0
 -                    && !TIFFFlushData1(tif)) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			    "Error flushing data before directory write");
 -			return (0);
 -		}
 -		if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) {
 -			_TIFFfree(tif->tif_rawdata);
 -			tif->tif_rawdata = NULL;
 -			tif->tif_rawcc = 0;
 -			tif->tif_rawdatasize = 0;
 -		}
 -		tif->tif_flags &= ~(TIFF_BEENWRITING|TIFF_BUFFERSETUP);
 -	}
 -
 -	td = &tif->tif_dir;
 -	/*
 -	 * Size the directory so that we can calculate
 -	 * offsets for the data items that aren't kept
 -	 * in-place in each field.
 -	 */
 -	nfields = 0;
 -	for (b = 0; b <= FIELD_LAST; b++)
 -		if (TIFFFieldSet(tif, b) && b != FIELD_CUSTOM)
 -			nfields += (b < FIELD_SUBFILETYPE ? 2 : 1);
 -	nfields += td->td_customValueCount;
 -	dirsize = nfields * sizeof (TIFFDirEntry);
 -	data = (char*) _TIFFmalloc(dirsize);
 -	if (data == NULL) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Cannot write directory, out of space");
 -		return (0);
 -	}
 -	/*
 -	 * Directory hasn't been placed yet, put
 -	 * it at the end of the file and link it
 -	 * into the existing directory structure.
 -	 */
 -	if (tif->tif_diroff == 0 && !TIFFLinkDirectory(tif))
 -		goto bad;
 -	tif->tif_dataoff = (toff_t)(
 -	    tif->tif_diroff + sizeof (uint16) + dirsize + sizeof (toff_t));
 -	if (tif->tif_dataoff & 1)
 -		tif->tif_dataoff++;
 -	(void) TIFFSeekFile(tif, tif->tif_dataoff, SEEK_SET);
 -	tif->tif_curdir++;
 -	dir = (TIFFDirEntry*) data;
 -	/*
 -	 * Setup external form of directory
 -	 * entries and write data items.
 -	 */
 -	_TIFFmemcpy(fields, td->td_fieldsset, sizeof (fields));
 -	/*
 -	 * Write out ExtraSamples tag only if
 -	 * extra samples are present in the data.
 -	 */
 -	if (FieldSet(fields, FIELD_EXTRASAMPLES) && !td->td_extrasamples) {
 -		ResetFieldBit(fields, FIELD_EXTRASAMPLES);
 -		nfields--;
 -		dirsize -= sizeof (TIFFDirEntry);
 -	}								/*XXX*/
 -	for (fi = 0, nfi = tif->tif_nfields; nfi > 0; nfi--, fi++) {
 -		const TIFFFieldInfo* fip = tif->tif_fieldinfo[fi];
 -
 -		/*
 -		 * For custom fields, we test to see if the custom field
 -		 * is set or not.  For normal fields, we just use the
 -		 * FieldSet test.
 -		*/
 -		if ( fip->field_bit == FIELD_CUSTOM )
 -		{
 -			int ci, is_set = FALSE;
 -
 -			for ( ci = 0; ci < td->td_customValueCount; ci++ )
 -				is_set |= (td->td_customValues[ci].info == fip);
 -
 -			if ( !is_set )
 -				continue;
 -		}
 -		else if (!FieldSet(fields, fip->field_bit))
 -			continue;
 -
 -		/*
 -		 * Handle other fields.
 -		 */
 -		switch (fip->field_bit)
 -		{
 -		case FIELD_STRIPOFFSETS:
 -			/*
 -			 * We use one field bit for both strip and tile
 -
 -			 * offsets, and so must be careful in selecting
 -			 * the appropriate field descriptor (so that tags
 -			 * are written in sorted order).
 -			 */
 -			tag = isTiled(tif) ?
 -			    TIFFTAG_TILEOFFSETS : TIFFTAG_STRIPOFFSETS;
 -			if (tag != fip->field_tag)
 -				continue;
 -			
 -			dir->tdir_tag = (uint16) tag;
 -			dir->tdir_type = (uint16) TIFF_LONG;
 -			dir->tdir_count = (uint32) td->td_nstrips;
 -			if (!TIFFWriteLongArray(tif, dir, td->td_stripoffset))
 -				goto bad;
 -			break;
 -		case FIELD_STRIPBYTECOUNTS:
 -			/*
 -			 * We use one field bit for both strip and tile
 -			 * byte counts, and so must be careful in selecting
 -			 * the appropriate field descriptor (so that tags
 -			 * are written in sorted order).
 -			 */
 -			tag = isTiled(tif) ?
 -			    TIFFTAG_TILEBYTECOUNTS : TIFFTAG_STRIPBYTECOUNTS;
 -			if (tag != fip->field_tag)
 -				continue;
 -			
 -			dir->tdir_tag = (uint16) tag;
 -			dir->tdir_type = (uint16) TIFF_LONG;
 -			dir->tdir_count = (uint32) td->td_nstrips;
 -			if (!TIFFWriteLongArray(tif, dir, td->td_stripbytecount))
 -				goto bad;
 -			break;
 -		case FIELD_ROWSPERSTRIP:
 -			TIFFSetupShortLong(tif, TIFFTAG_ROWSPERSTRIP,
 -			    dir, td->td_rowsperstrip);
 -			break;
 -		case FIELD_COLORMAP:
 -			if (!TIFFWriteShortTable(tif, TIFFTAG_COLORMAP, dir,
 -			    3, td->td_colormap))
 -				goto bad;
 -			break;
 -		case FIELD_IMAGEDIMENSIONS:
 -			TIFFSetupShortLong(tif, TIFFTAG_IMAGEWIDTH,
 -			    dir++, td->td_imagewidth);
 -			TIFFSetupShortLong(tif, TIFFTAG_IMAGELENGTH,
 -			    dir, td->td_imagelength);
 -			break;
 -		case FIELD_TILEDIMENSIONS:
 -			TIFFSetupShortLong(tif, TIFFTAG_TILEWIDTH,
 -			    dir++, td->td_tilewidth);
 -			TIFFSetupShortLong(tif, TIFFTAG_TILELENGTH,
 -			    dir, td->td_tilelength);
 -			break;
 -		case FIELD_COMPRESSION:
 -			TIFFSetupShort(tif, TIFFTAG_COMPRESSION,
 -			    dir, td->td_compression);
 -			break;
 -		case FIELD_PHOTOMETRIC:
 -			TIFFSetupShort(tif, TIFFTAG_PHOTOMETRIC,
 -			    dir, td->td_photometric);
 -			break;
 -		case FIELD_POSITION:
 -			WriteRationalPair(TIFF_RATIONAL,
 -			    TIFFTAG_XPOSITION, td->td_xposition,
 -			    TIFFTAG_YPOSITION, td->td_yposition);
 -			break;
 -		case FIELD_RESOLUTION:
 -			WriteRationalPair(TIFF_RATIONAL,
 -			    TIFFTAG_XRESOLUTION, td->td_xresolution,
 -			    TIFFTAG_YRESOLUTION, td->td_yresolution);
 -			break;
 -		case FIELD_BITSPERSAMPLE:
 -		case FIELD_MINSAMPLEVALUE:
 -		case FIELD_MAXSAMPLEVALUE:
 -		case FIELD_SAMPLEFORMAT:
 -			if (!TIFFWritePerSampleShorts(tif, fip->field_tag, dir))
 -				goto bad;
 -			break;
 -		case FIELD_SMINSAMPLEVALUE:
 -		case FIELD_SMAXSAMPLEVALUE:
 -			if (!TIFFWritePerSampleAnys(tif,
 -			    _TIFFSampleToTagType(tif), fip->field_tag, dir))
 -				goto bad;
 -			break;
 -		case FIELD_INKNAMES:
 -			if (!TIFFWriteInkNames(tif, dir))
 -				goto bad;
 -			break;
 -		case FIELD_TRANSFERFUNCTION:
 -			if (!TIFFWriteTransferFunction(tif, dir))
 -				goto bad;
 -			break;
 -		case FIELD_SUBIFD:
 -			/*
 -			 * XXX: Always write this field using LONG type
 -			 * for backward compatibility.
 -			 */
 -			dir->tdir_tag = (uint16) fip->field_tag;
 -			dir->tdir_type = (uint16) TIFF_LONG;
 -			dir->tdir_count = (uint32) td->td_nsubifd;
 -			if (!TIFFWriteLongArray(tif, dir, td->td_subifd))
 -				goto bad;
 -			/*
 -			 * Total hack: if this directory includes a SubIFD
 -			 * tag then force the next <n> directories to be
 -			 * written as ``sub directories'' of this one.  This
 -			 * is used to write things like thumbnails and
 -			 * image masks that one wants to keep out of the
 -			 * normal directory linkage access mechanism.
 -			 */
 -			if (dir->tdir_count > 0) {
 -				tif->tif_flags |= TIFF_INSUBIFD;
 -				tif->tif_nsubifd = (uint16) dir->tdir_count;
 -				if (dir->tdir_count > 1)
 -					tif->tif_subifdoff = dir->tdir_offset;
 -				else
 -					tif->tif_subifdoff = (uint32)(
 -					      tif->tif_diroff
 -					    + sizeof (uint16)
 -					    + ((char*)&dir->tdir_offset-data));
 -			}
 -			break;
 -		default:
 -			/*
 -			 * XXX: Should be fixed and removed. See comments
 -			 * related to these tags in tif_dir.c.
 -			 */
 -			if (fip->field_tag == TIFFTAG_PAGENUMBER
 -			    || fip->field_tag == TIFFTAG_HALFTONEHINTS
 -			    || fip->field_tag == TIFFTAG_YCBCRSUBSAMPLING
 -			    || fip->field_tag == TIFFTAG_DOTRANGE) {
 -				if (fip->field_type == TIFF_BYTE) {
 -					if (!TIFFSetupBytePair(tif, fip->field_tag, dir))
 -						goto bad;
 -				} else if (fip->field_type == TIFF_SHORT) {
 -					if (!TIFFSetupShortPair(tif, fip->field_tag, dir))
 -						goto bad;
 -				}
 -			} else if (!TIFFWriteNormalTag(tif, dir, fip))
 -				goto bad;
 -			break;
 -		}
 -		dir++;
 -                
 -		if ( fip->field_bit != FIELD_CUSTOM )
 -			ResetFieldBit(fields, fip->field_bit);
 -	}
 -
 -	/*
 -	 * Write directory.
 -	 */
 -	dircount = (uint16) nfields;
 -	diroff = (uint32) tif->tif_nextdiroff;
 -	if (tif->tif_flags & TIFF_SWAB) {
 -		/*
 -		 * The file's byte order is opposite to the
 -		 * native machine architecture.  We overwrite
 -		 * the directory information with impunity
 -		 * because it'll be released below after we
 -		 * write it to the file.  Note that all the
 -		 * other tag construction routines assume that
 -		 * we do this byte-swapping; i.e. they only
 -		 * byte-swap indirect data.
 -		 */
 -		for (dir = (TIFFDirEntry*) data; dircount; dir++, dircount--) {
 -			TIFFSwabArrayOfShort(&dir->tdir_tag, 2);
 -			TIFFSwabArrayOfLong(&dir->tdir_count, 2);
 -		}
 -		dircount = (uint16) nfields;
 -		TIFFSwabShort(&dircount);
 -		TIFFSwabLong(&diroff);
 -	}
 -	(void) TIFFSeekFile(tif, tif->tif_diroff, SEEK_SET);
 -	if (!WriteOK(tif, &dircount, sizeof (dircount))) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Error writing directory count");
 -		goto bad;
 -	}
 -	if (!WriteOK(tif, data, dirsize)) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Error writing directory contents");
 -		goto bad;
 -	}
 -	if (!WriteOK(tif, &diroff, sizeof (uint32))) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Error writing directory link");
 -		goto bad;
 -	}
 -	if (done) {
 -		TIFFFreeDirectory(tif);
 -		tif->tif_flags &= ~TIFF_DIRTYDIRECT;
 -		(*tif->tif_cleanup)(tif);
 -
 -		/*
 -		* Reset directory-related state for subsequent
 -		* directories.
 -		*/
 -		TIFFCreateDirectory(tif);
 -	}
 -	_TIFFfree(data);
 -	return (1);
 -bad:
 -	_TIFFfree(data);
 -	return (0);
 -}
 -#undef WriteRationalPair
 -
 -int
 -TIFFWriteDirectory(TIFF* tif)
 -{
 -	return _TIFFWriteDirectory(tif, TRUE);
 -}
 -
 -/*
 - * Similar to TIFFWriteDirectory(), writes the directory out
 - * but leaves all data structures in memory so that it can be
 - * written again.  This will make a partially written TIFF file
 - * readable before it is successfully completed/closed.
 - */ 
 -int
 -TIFFCheckpointDirectory(TIFF* tif)
 -{
 -	int rc;
 -	/* Setup the strips arrays, if they haven't already been. */
 -	if (tif->tif_dir.td_stripoffset == NULL)
 -	    (void) TIFFSetupStrips(tif);
 -	rc = _TIFFWriteDirectory(tif, FALSE);
 -	(void) TIFFSetWriteOffset(tif, TIFFSeekFile(tif, 0, SEEK_END));
 -	return rc;
 -}
 -
 -static int
 -_TIFFWriteCustomDirectory(TIFF* tif, toff_t *pdiroff)
 -{
 -	uint16 dircount;
 -	uint32 nfields;
 -	tsize_t dirsize;
 -	char* data;
 -	TIFFDirEntry* dir;
 -	TIFFDirectory* td;
 -	unsigned long b, fields[FIELD_SETLONGS];
 -	int fi, nfi;
 -
 -	if (tif->tif_mode == O_RDONLY)
 -		return (1);
 -
 -	td = &tif->tif_dir;
 -	/*
 -	 * Size the directory so that we can calculate
 -	 * offsets for the data items that aren't kept
 -	 * in-place in each field.
 -	 */
 -	nfields = 0;
 -	for (b = 0; b <= FIELD_LAST; b++)
 -		if (TIFFFieldSet(tif, b) && b != FIELD_CUSTOM)
 -			nfields += (b < FIELD_SUBFILETYPE ? 2 : 1);
 -	nfields += td->td_customValueCount;
 -	dirsize = nfields * sizeof (TIFFDirEntry);
 -	data = (char*) _TIFFmalloc(dirsize);
 -	if (data == NULL) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Cannot write directory, out of space");
 -		return (0);
 -	}
 -	/*
 -	 * Put the directory  at the end of the file.
 -	 */
 -	tif->tif_diroff = (TIFFSeekFile(tif, (toff_t) 0, SEEK_END)+1) &~ 1;
 -	tif->tif_dataoff = (toff_t)(
 -	    tif->tif_diroff + sizeof (uint16) + dirsize + sizeof (toff_t));
 -	if (tif->tif_dataoff & 1)
 -		tif->tif_dataoff++;
 -	(void) TIFFSeekFile(tif, tif->tif_dataoff, SEEK_SET);
 -	dir = (TIFFDirEntry*) data;
 -	/*
 -	 * Setup external form of directory
 -	 * entries and write data items.
 -	 */
 -	_TIFFmemcpy(fields, td->td_fieldsset, sizeof (fields));
 -
 -	for (fi = 0, nfi = tif->tif_nfields; nfi > 0; nfi--, fi++) {
 -		const TIFFFieldInfo* fip = tif->tif_fieldinfo[fi];
 -
 -		/*
 -		 * For custom fields, we test to see if the custom field
 -		 * is set or not.  For normal fields, we just use the
 -		 * FieldSet test.
 -		*/
 -		if ( fip->field_bit == FIELD_CUSTOM )
 -		{
 -			int ci, is_set = FALSE;
 -
 -			for ( ci = 0; ci < td->td_customValueCount; ci++ )
 -				is_set |= (td->td_customValues[ci].info == fip);
 -
 -			if ( !is_set )
 -				continue;
 -		}
 -		else if (!FieldSet(fields, fip->field_bit))
 -			continue;
 -                
 -		if ( fip->field_bit != FIELD_CUSTOM )
 -			ResetFieldBit(fields, fip->field_bit);
 -	}
 -
 -	/*
 -	 * Write directory.
 -	 */
 -	dircount = (uint16) nfields;
 -	*pdiroff = (uint32) tif->tif_nextdiroff;
 -	if (tif->tif_flags & TIFF_SWAB) {
 -		/*
 -		 * The file's byte order is opposite to the
 -		 * native machine architecture.  We overwrite
 -		 * the directory information with impunity
 -		 * because it'll be released below after we
 -		 * write it to the file.  Note that all the
 -		 * other tag construction routines assume that
 -		 * we do this byte-swapping; i.e. they only
 -		 * byte-swap indirect data.
 -		 */
 -		for (dir = (TIFFDirEntry*) data; dircount; dir++, dircount--) {
 -			TIFFSwabArrayOfShort(&dir->tdir_tag, 2);
 -			TIFFSwabArrayOfLong(&dir->tdir_count, 2);
 -		}
 -		dircount = (uint16) nfields;
 -		TIFFSwabShort(&dircount);
 -		TIFFSwabLong(pdiroff);
 -	}
 -	(void) TIFFSeekFile(tif, tif->tif_diroff, SEEK_SET);
 -	if (!WriteOK(tif, &dircount, sizeof (dircount))) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Error writing directory count");
 -		goto bad;
 -	}
 -	if (!WriteOK(tif, data, dirsize)) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Error writing directory contents");
 -		goto bad;
 -	}
 -	if (!WriteOK(tif, pdiroff, sizeof (uint32))) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Error writing directory link");
 -		goto bad;
 -	}
 -	_TIFFfree(data);
 -	return (1);
 -bad:
 -	_TIFFfree(data);
 -	return (0);
 -}
 -
 -int
 -TIFFWriteCustomDirectory(TIFF* tif, toff_t *pdiroff)
 -{
 -	return _TIFFWriteCustomDirectory(tif, pdiroff);
 -}
 -
 -/*
 - * Process tags that are not special cased.
 - */
 -static int
 -TIFFWriteNormalTag(TIFF* tif, TIFFDirEntry* dir, const TIFFFieldInfo* fip)
 -{
 -	uint16 wc = (uint16) fip->field_writecount;
 -	uint32 wc2;
 -
 -	dir->tdir_tag = (uint16) fip->field_tag;
 -	dir->tdir_type = (uint16) fip->field_type;
 -	dir->tdir_count = wc;
 -	
 -	switch (fip->field_type) {
 -	case TIFF_SHORT:
 -	case TIFF_SSHORT:
 -		if (fip->field_passcount) {
 -			uint16* wp;
 -			if (wc == (uint16) TIFF_VARIABLE2) {
 -				TIFFGetField(tif, fip->field_tag, &wc2, &wp);
 -				dir->tdir_count = wc2;
 -			} else {	/* Assume TIFF_VARIABLE */
 -				TIFFGetField(tif, fip->field_tag, &wc, &wp);
 -				dir->tdir_count = wc;
 -			}
 -			if (!TIFFWriteShortArray(tif, dir, wp))
 -				return 0;
 -		} else {
 -			if (wc == 1) {
 -				uint16 sv;
 -				TIFFGetField(tif, fip->field_tag, &sv);
 -				dir->tdir_offset =
 -					TIFFInsertData(tif, dir->tdir_type, sv);
 -			} else {
 -				uint16* wp;
 -				TIFFGetField(tif, fip->field_tag, &wp);
 -				if (!TIFFWriteShortArray(tif, dir, wp))
 -					return 0;
 -			}
 -		}
 -		break;
 -	case TIFF_LONG:
 -	case TIFF_SLONG:
 -	case TIFF_IFD:
 -		if (fip->field_passcount) {
 -			uint32* lp;
 -			if (wc == (uint16) TIFF_VARIABLE2) {
 -				TIFFGetField(tif, fip->field_tag, &wc2, &lp);
 -				dir->tdir_count = wc2;
 -			} else {	/* Assume TIFF_VARIABLE */
 -				TIFFGetField(tif, fip->field_tag, &wc, &lp);
 -				dir->tdir_count = wc;
 -			}
 -			if (!TIFFWriteLongArray(tif, dir, lp))
 -				return 0;
 -		} else {
 -			if (wc == 1) {
 -				/* XXX handle LONG->SHORT conversion */
 -				TIFFGetField(tif, fip->field_tag,
 -					     &dir->tdir_offset);
 -			} else {
 -				uint32* lp;
 -				TIFFGetField(tif, fip->field_tag, &lp);
 -				if (!TIFFWriteLongArray(tif, dir, lp))
 -					return 0;
 -			}
 -		}
 -		break;
 -	case TIFF_RATIONAL:
 -	case TIFF_SRATIONAL:
 -		if (fip->field_passcount) {
 -			float* fp;
 -			if (wc == (uint16) TIFF_VARIABLE2) {
 -				TIFFGetField(tif, fip->field_tag, &wc2, &fp);
 -				dir->tdir_count = wc2;
 -			} else {	/* Assume TIFF_VARIABLE */
 -				TIFFGetField(tif, fip->field_tag, &wc, &fp);
 -				dir->tdir_count = wc;
 -			}
 -			if (!TIFFWriteRationalArray(tif, dir, fp))
 -				return 0;
 -		} else {
 -			if (wc == 1) {
 -				float fv;
 -				TIFFGetField(tif, fip->field_tag, &fv);
 -				if (!TIFFWriteRationalArray(tif, dir, &fv))
 -					return 0;
 -			} else {
 -				float* fp;
 -				TIFFGetField(tif, fip->field_tag, &fp);
 -				if (!TIFFWriteRationalArray(tif, dir, fp))
 -					return 0;
 -			}
 -		}
 -		break;
 -	case TIFF_FLOAT:
 -		if (fip->field_passcount) {
 -			float* fp;
 -			if (wc == (uint16) TIFF_VARIABLE2) {
 -				TIFFGetField(tif, fip->field_tag, &wc2, &fp);
 -				dir->tdir_count = wc2;
 -			} else {	/* Assume TIFF_VARIABLE */
 -				TIFFGetField(tif, fip->field_tag, &wc, &fp);
 -				dir->tdir_count = wc;
 -			}
 -			if (!TIFFWriteFloatArray(tif, dir, fp))
 -				return 0;
 -		} else {
 -			if (wc == 1) {
 -				float fv;
 -				TIFFGetField(tif, fip->field_tag, &fv);
 -				if (!TIFFWriteFloatArray(tif, dir, &fv))
 -					return 0;
 -			} else {
 -				float* fp;
 -				TIFFGetField(tif, fip->field_tag, &fp);
 -				if (!TIFFWriteFloatArray(tif, dir, fp))
 -					return 0;
 -			}
 -		}
 -		break;
 -	case TIFF_DOUBLE:
 -		if (fip->field_passcount) {
 -			double* dp;
 -			if (wc == (uint16) TIFF_VARIABLE2) {
 -				TIFFGetField(tif, fip->field_tag, &wc2, &dp);
 -				dir->tdir_count = wc2;
 -			} else {	/* Assume TIFF_VARIABLE */
 -				TIFFGetField(tif, fip->field_tag, &wc, &dp);
 -				dir->tdir_count = wc;
 -			}
 -			if (!TIFFWriteDoubleArray(tif, dir, dp))
 -				return 0;
 -		} else {
 -			if (wc == 1) {
 -				double dv;
 -				TIFFGetField(tif, fip->field_tag, &dv);
 -				if (!TIFFWriteDoubleArray(tif, dir, &dv))
 -					return 0;
 -			} else {
 -				double* dp;
 -				TIFFGetField(tif, fip->field_tag, &dp);
 -				if (!TIFFWriteDoubleArray(tif, dir, dp))
 -					return 0;
 -			}
 -		}
 -		break;
 -	case TIFF_ASCII:
 -		{ 
 -                    char* cp;
 -                    if (fip->field_passcount)
 -                    {
 -                        if ( wc == (uint16) TIFF_VARIABLE2 )
 -                            TIFFGetField(tif, fip->field_tag, &wc2, &cp);
 -                        else
 -                            TIFFGetField(tif, fip->field_tag, &wc, &cp);
 -                    }
 -                    else
 -                        TIFFGetField(tif, fip->field_tag, &cp);
 -
 -                    dir->tdir_count = (uint32) (strlen(cp) + 1);
 -                    if (!TIFFWriteByteArray(tif, dir, cp))
 -                        return (0);
 -		}
 -		break;
 -
 -        case TIFF_BYTE:
 -        case TIFF_SBYTE:          
 -		if (fip->field_passcount) {
 -			char* cp;
 -			if (wc == (uint16) TIFF_VARIABLE2) {
 -				TIFFGetField(tif, fip->field_tag, &wc2, &cp);
 -				dir->tdir_count = wc2;
 -			} else {	/* Assume TIFF_VARIABLE */
 -				TIFFGetField(tif, fip->field_tag, &wc, &cp);
 -				dir->tdir_count = wc;
 -			}
 -			if (!TIFFWriteByteArray(tif, dir, cp))
 -				return 0;
 -		} else {
 -			if (wc == 1) {
 -				char cv;
 -				TIFFGetField(tif, fip->field_tag, &cv);
 -				if (!TIFFWriteByteArray(tif, dir, &cv))
 -					return 0;
 -			} else {
 -				char* cp;
 -				TIFFGetField(tif, fip->field_tag, &cp);
 -				if (!TIFFWriteByteArray(tif, dir, cp))
 -					return 0;
 -			}
 -		}
 -                break;
 -
 -	case TIFF_UNDEFINED:
 -		{ char* cp;
 -		  if (wc == (unsigned short) TIFF_VARIABLE) {
 -			TIFFGetField(tif, fip->field_tag, &wc, &cp);
 -			dir->tdir_count = wc;
 -		  } else if (wc == (unsigned short) TIFF_VARIABLE2) {
 -			TIFFGetField(tif, fip->field_tag, &wc2, &cp);
 -			dir->tdir_count = wc2;
 -		  } else 
 -			TIFFGetField(tif, fip->field_tag, &cp);
 -		  if (!TIFFWriteByteArray(tif, dir, cp))
 -			return (0);
 -		}
 -		break;
 -
 -        case TIFF_NOTYPE:
 -                break;
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Setup a directory entry with either a SHORT
 - * or LONG type according to the value.
 - */
 -static void
 -TIFFSetupShortLong(TIFF* tif, ttag_t tag, TIFFDirEntry* dir, uint32 v)
 -{
 -	dir->tdir_tag = (uint16) tag;
 -	dir->tdir_count = 1;
 -	if (v > 0xffffL) {
 -		dir->tdir_type = (short) TIFF_LONG;
 -		dir->tdir_offset = v;
 -	} else {
 -		dir->tdir_type = (short) TIFF_SHORT;
 -		dir->tdir_offset = TIFFInsertData(tif, (int) TIFF_SHORT, v);
 -	}
 -}
 -
 -/*
 - * Setup a SHORT directory entry
 - */
 -static void
 -TIFFSetupShort(TIFF* tif, ttag_t tag, TIFFDirEntry* dir, uint16 v)
 -{
 -	dir->tdir_tag = (uint16) tag;
 -	dir->tdir_count = 1;
 -	dir->tdir_type = (short) TIFF_SHORT;
 -	dir->tdir_offset = TIFFInsertData(tif, (int) TIFF_SHORT, v);
 -}
 -#undef MakeShortDirent
 -
 -#define	NITEMS(x)	(sizeof (x) / sizeof (x[0]))
 -/*
 - * Setup a directory entry that references a
 - * samples/pixel array of SHORT values and
 - * (potentially) write the associated indirect
 - * values.
 - */
 -static int
 -TIFFWritePerSampleShorts(TIFF* tif, ttag_t tag, TIFFDirEntry* dir)
 -{
 -	uint16 buf[10], v;
 -	uint16* w = buf;
 -	uint16 i, samples = tif->tif_dir.td_samplesperpixel;
 -	int status;
 -
 -	if (samples > NITEMS(buf)) {
 -		w = (uint16*) _TIFFmalloc(samples * sizeof (uint16));
 -		if (w == NULL) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			    "No space to write per-sample shorts");
 -			return (0);
 -		}
 -	}
 -	TIFFGetField(tif, tag, &v);
 -	for (i = 0; i < samples; i++)
 -		w[i] = v;
 -	
 -	dir->tdir_tag = (uint16) tag;
 -	dir->tdir_type = (uint16) TIFF_SHORT;
 -	dir->tdir_count = samples;
 -	status = TIFFWriteShortArray(tif, dir, w);
 -	if (w != buf)
 -		_TIFFfree((char*) w);
 -	return (status);
 -}
 -
 -/*
 - * Setup a directory entry that references a samples/pixel array of ``type''
 - * values and (potentially) write the associated indirect values.  The source
 - * data from TIFFGetField() for the specified tag must be returned as double.
 - */
 -static int
 -TIFFWritePerSampleAnys(TIFF* tif,
 -    TIFFDataType type, ttag_t tag, TIFFDirEntry* dir)
 -{
 -	double buf[10], v;
 -	double* w = buf;
 -	uint16 i, samples = tif->tif_dir.td_samplesperpixel;
 -	int status;
 -
 -	if (samples > NITEMS(buf)) {
 -		w = (double*) _TIFFmalloc(samples * sizeof (double));
 -		if (w == NULL) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			    "No space to write per-sample values");
 -			return (0);
 -		}
 -	}
 -	TIFFGetField(tif, tag, &v);
 -	for (i = 0; i < samples; i++)
 -		w[i] = v;
 -	status = TIFFWriteAnyArray(tif, type, tag, dir, samples, w);
 -	if (w != buf)
 -		_TIFFfree(w);
 -	return (status);
 -}
 -#undef NITEMS
 -
 -/*
 - * Setup a pair of bytes that are returned by
 - * value, rather than as a reference to an array.
 - */
 -static int
 -TIFFSetupBytePair(TIFF* tif, ttag_t tag, TIFFDirEntry* dir)
 -{
 -	char v[2];
 -
 -	TIFFGetField(tif, tag, &v[0], &v[1]);
 -
 -	dir->tdir_tag = (uint16) tag;
 -	dir->tdir_type = (uint16) TIFF_BYTE;
 -	dir->tdir_count = 2;
 -	return (TIFFWriteByteArray(tif, dir, v));
 -}
 -
 -/*
 - * Setup a pair of shorts that are returned by
 - * value, rather than as a reference to an array.
 - */
 -static int
 -TIFFSetupShortPair(TIFF* tif, ttag_t tag, TIFFDirEntry* dir)
 -{
 -	uint16 v[2];
 -
 -	TIFFGetField(tif, tag, &v[0], &v[1]);
 -
 -	dir->tdir_tag = (uint16) tag;
 -	dir->tdir_type = (uint16) TIFF_SHORT;
 -	dir->tdir_count = 2;
 -	return (TIFFWriteShortArray(tif, dir, v));
 -}
 -
 -/*
 - * Setup a directory entry for an NxM table of shorts,
 - * where M is known to be 2**bitspersample, and write
 - * the associated indirect data.
 - */
 -static int
 -TIFFWriteShortTable(TIFF* tif,
 -    ttag_t tag, TIFFDirEntry* dir, uint32 n, uint16** table)
 -{
 -	uint32 i, off;
 -
 -	dir->tdir_tag = (uint16) tag;
 -	dir->tdir_type = (short) TIFF_SHORT;
 -	/* XXX -- yech, fool TIFFWriteData */
 -	dir->tdir_count = (uint32) (1L<<tif->tif_dir.td_bitspersample);
 -	off = tif->tif_dataoff;
 -	for (i = 0; i < n; i++)
 -		if (!TIFFWriteData(tif, dir, (char *)table[i]))
 -			return (0);
 -	dir->tdir_count *= n;
 -	dir->tdir_offset = off;
 -	return (1);
 -}
 -
 -/*
 - * Write/copy data associated with an ASCII or opaque tag value.
 - */
 -static int
 -TIFFWriteByteArray(TIFF* tif, TIFFDirEntry* dir, char* cp)
 -{
 -	if (dir->tdir_count <= 4) {
 -		if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) {
 -			dir->tdir_offset = (uint32)cp[0] << 24;
 -			if (dir->tdir_count >= 2)
 -				dir->tdir_offset |= (uint32)cp[1] << 16;
 -			if (dir->tdir_count >= 3)
 -				dir->tdir_offset |= (uint32)cp[2] << 8;
 -			if (dir->tdir_count == 4)
 -				dir->tdir_offset |= cp[3];
 -		} else {
 -			dir->tdir_offset = cp[0];
 -			if (dir->tdir_count >= 2)
 -				dir->tdir_offset |= (uint32) cp[1] << 8;
 -			if (dir->tdir_count >= 3)
 -				dir->tdir_offset |= (uint32) cp[2] << 16;
 -			if (dir->tdir_count == 4)
 -				dir->tdir_offset |= (uint32) cp[3] << 24;
 -		}
 -		return 1;
 -	} else
 -		return TIFFWriteData(tif, dir, cp);
 -}
 -
 -/*
 - * Setup a directory entry of an array of SHORT
 - * or SSHORT and write the associated indirect values.
 - */
 -static int
 -TIFFWriteShortArray(TIFF* tif, TIFFDirEntry* dir, uint16* v)
 -{
 -	if (dir->tdir_count <= 2) {
 -		if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) {
 -			dir->tdir_offset = (uint32) v[0] << 16;
 -			if (dir->tdir_count == 2)
 -				dir->tdir_offset |= v[1] & 0xffff;
 -		} else {
 -			dir->tdir_offset = v[0] & 0xffff;
 -			if (dir->tdir_count == 2)
 -				dir->tdir_offset |= (uint32) v[1] << 16;
 -		}
 -		return (1);
 -	} else
 -		return (TIFFWriteData(tif, dir, (char*) v));
 -}
 -
 -/*
 - * Setup a directory entry of an array of LONG
 - * or SLONG and write the associated indirect values.
 - */
 -static int
 -TIFFWriteLongArray(TIFF* tif, TIFFDirEntry* dir, uint32* v)
 -{
 -	if (dir->tdir_count == 1) {
 -		dir->tdir_offset = v[0];
 -		return (1);
 -	} else
 -		return (TIFFWriteData(tif, dir, (char*) v));
 -}
 -
 -/*
 - * Setup a directory entry of an array of RATIONAL
 - * or SRATIONAL and write the associated indirect values.
 - */
 -static int
 -TIFFWriteRationalArray(TIFF* tif, TIFFDirEntry* dir, float* v)
 -{
 -	uint32 i;
 -	uint32* t;
 -	int status;
 -
 -	t = (uint32*) _TIFFmalloc(2 * dir->tdir_count * sizeof (uint32));
 -	if (t == NULL) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		    "No space to write RATIONAL array");
 -		return (0);
 -	}
 -	for (i = 0; i < dir->tdir_count; i++) {
 -		float fv = v[i];
 -		int sign = 1;
 -		uint32 den;
 -
 -		if (fv < 0) {
 -			if (dir->tdir_type == TIFF_RATIONAL) {
 -				TIFFWarningExt(tif->tif_clientdata,
 -					       tif->tif_name,
 -	"\"%s\": Information lost writing value (%g) as (unsigned) RATIONAL",
 -				_TIFFFieldWithTag(tif,dir->tdir_tag)->field_name,
 -						fv);
 -				fv = 0;
 -			} else
 -				fv = -fv, sign = -1;
 -		}
 -		den = 1L;
 -		if (fv > 0) {
 -			while (fv < 1L<<(31-3) && den < 1L<<(31-3))
 -				fv *= 1<<3, den *= 1L<<3;
 -		}
 -		t[2*i+0] = (uint32) (sign * (int32)(fv + 0.5));
 -		t[2*i+1] = den;
 -	}
 -	status = TIFFWriteData(tif, dir, (char *)t);
 -	_TIFFfree((char*) t);
 -	return (status);
 -}
 -
 -static int
 -TIFFWriteFloatArray(TIFF* tif, TIFFDirEntry* dir, float* v)
 -{
 -	TIFFCvtNativeToIEEEFloat(tif, dir->tdir_count, v);
 -	if (dir->tdir_count == 1) {
 -		dir->tdir_offset = *(uint32*) &v[0];
 -		return (1);
 -	} else
 -		return (TIFFWriteData(tif, dir, (char*) v));
 -}
 -
 -static int
 -TIFFWriteDoubleArray(TIFF* tif, TIFFDirEntry* dir, double* v)
 -{
 -	TIFFCvtNativeToIEEEDouble(tif, dir->tdir_count, v);
 -	return (TIFFWriteData(tif, dir, (char*) v));
 -}
 -
 -/*
 - * Write an array of ``type'' values for a specified tag (i.e. this is a tag
 - * which is allowed to have different types, e.g. SMaxSampleType).
 - * Internally the data values are represented as double since a double can
 - * hold any of the TIFF tag types (yes, this should really be an abstract
 - * type tany_t for portability).  The data is converted into the specified
 - * type in a temporary buffer and then handed off to the appropriate array
 - * writer.
 - */
 -static int
 -TIFFWriteAnyArray(TIFF* tif,
 -    TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, double* v)
 -{
 -	char buf[10 * sizeof(double)];
 -	char* w = buf;
 -	int i, status = 0;
 -
 -	if (n * TIFFDataWidth(type) > sizeof buf) {
 -		w = (char*) _TIFFmalloc(n * TIFFDataWidth(type));
 -		if (w == NULL) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -				     "No space to write array");
 -			return (0);
 -		}
 -	}
 -
 -	dir->tdir_tag = (uint16) tag;
 -	dir->tdir_type = (uint16) type;
 -	dir->tdir_count = n;
 -
 -	switch (type) {
 -	case TIFF_BYTE:
 -		{ 
 -			uint8* bp = (uint8*) w;
 -			for (i = 0; i < (int) n; i++)
 -				bp[i] = (uint8) v[i];
 -			if (!TIFFWriteByteArray(tif, dir, (char*) bp))
 -				goto out;
 -		}
 -		break;
 -	case TIFF_SBYTE:
 -		{ 
 -			int8* bp = (int8*) w;
 -			for (i = 0; i < (int) n; i++)
 -				bp[i] = (int8) v[i];
 -			if (!TIFFWriteByteArray(tif, dir, (char*) bp))
 -				goto out;
 -		}
 -		break;
 -	case TIFF_SHORT:
 -		{
 -			uint16* bp = (uint16*) w;
 -			for (i = 0; i < (int) n; i++)
 -				bp[i] = (uint16) v[i];
 -			if (!TIFFWriteShortArray(tif, dir, (uint16*)bp))
 -				goto out;
 -		}
 -		break;
 -	case TIFF_SSHORT:
 -		{ 
 -			int16* bp = (int16*) w;
 -			for (i = 0; i < (int) n; i++)
 -				bp[i] = (int16) v[i];
 -			if (!TIFFWriteShortArray(tif, dir, (uint16*)bp))
 -				goto out;
 -		}
 -		break;
 -	case TIFF_LONG:
 -		{
 -			uint32* bp = (uint32*) w;
 -			for (i = 0; i < (int) n; i++)
 -				bp[i] = (uint32) v[i];
 -			if (!TIFFWriteLongArray(tif, dir, bp))
 -				goto out;
 -		}
 -		break;
 -	case TIFF_SLONG:
 -		{
 -			int32* bp = (int32*) w;
 -			for (i = 0; i < (int) n; i++)
 -				bp[i] = (int32) v[i];
 -			if (!TIFFWriteLongArray(tif, dir, (uint32*) bp))
 -				goto out;
 -		}
 -		break;
 -	case TIFF_FLOAT:
 -		{ 
 -			float* bp = (float*) w;
 -			for (i = 0; i < (int) n; i++)
 -				bp[i] = (float) v[i];
 -			if (!TIFFWriteFloatArray(tif, dir, bp))
 -				goto out;
 -		}
 -		break;
 -	case TIFF_DOUBLE:
 -                {
 -                    if ( !TIFFWriteDoubleArray(tif, dir, v))
 -                        goto out;
 -                }
 -		break;
 -	default:
 -		/* TIFF_NOTYPE */
 -		/* TIFF_ASCII */
 -		/* TIFF_UNDEFINED */
 -		/* TIFF_RATIONAL */
 -		/* TIFF_SRATIONAL */
 -		goto out;
 -	}
 -	status = 1;
 - out:
 -	if (w != buf)
 -		_TIFFfree(w);
 -	return (status);
 -}
 -
 -static int
 -TIFFWriteTransferFunction(TIFF* tif, TIFFDirEntry* dir)
 -{
 -	TIFFDirectory* td = &tif->tif_dir;
 -	tsize_t n = (1L<<td->td_bitspersample) * sizeof (uint16);
 -	uint16** tf = td->td_transferfunction;
 -	int ncols;
 -
 -	/*
 -	 * Check if the table can be written as a single column,
 -	 * or if it must be written as 3 columns.  Note that we
 -	 * write a 3-column tag if there are 2 samples/pixel and
 -	 * a single column of data won't suffice--hmm.
 -	 */
 -	switch (td->td_samplesperpixel - td->td_extrasamples) {
 -	default:	if (_TIFFmemcmp(tf[0], tf[2], n)) { ncols = 3; break; }
 -	case 2:		if (_TIFFmemcmp(tf[0], tf[1], n)) { ncols = 3; break; }
 -	case 1: case 0:	ncols = 1;
 -	}
 -	return (TIFFWriteShortTable(tif,
 -	    TIFFTAG_TRANSFERFUNCTION, dir, ncols, tf));
 -}
 -
 -static int
 -TIFFWriteInkNames(TIFF* tif, TIFFDirEntry* dir)
 -{
 -	TIFFDirectory* td = &tif->tif_dir;
 -
 -	dir->tdir_tag = TIFFTAG_INKNAMES;
 -	dir->tdir_type = (short) TIFF_ASCII;
 -	dir->tdir_count = td->td_inknameslen;
 -	return (TIFFWriteByteArray(tif, dir, td->td_inknames));
 -}
 -
 -/*
 - * Write a contiguous directory item.
 - */
 -static int
 -TIFFWriteData(TIFF* tif, TIFFDirEntry* dir, char* cp)
 -{
 -	tsize_t cc;
 -
 -	if (tif->tif_flags & TIFF_SWAB) {
 -		switch (dir->tdir_type) {
 -		case TIFF_SHORT:
 -		case TIFF_SSHORT:
 -			TIFFSwabArrayOfShort((uint16*) cp, dir->tdir_count);
 -			break;
 -		case TIFF_LONG:
 -		case TIFF_SLONG:
 -		case TIFF_FLOAT:
 -			TIFFSwabArrayOfLong((uint32*) cp, dir->tdir_count);
 -			break;
 -		case TIFF_RATIONAL:
 -		case TIFF_SRATIONAL:
 -			TIFFSwabArrayOfLong((uint32*) cp, 2*dir->tdir_count);
 -			break;
 -		case TIFF_DOUBLE:
 -			TIFFSwabArrayOfDouble((double*) cp, dir->tdir_count);
 -			break;
 -		}
 -	}
 -	dir->tdir_offset = tif->tif_dataoff;
 -	cc = dir->tdir_count * TIFFDataWidth((TIFFDataType) dir->tdir_type);
 -	if (SeekOK(tif, dir->tdir_offset) &&
 -	    WriteOK(tif, cp, cc)) {
 -		tif->tif_dataoff += (cc + 1) & ~1;
 -		return (1);
 -	}
 -	TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		     "Error writing data for field \"%s\"",
 -	_TIFFFieldWithTag(tif, dir->tdir_tag)->field_name);
 -	return (0);
 -}
 -
 -/*
 - * Similar to TIFFWriteDirectory(), but if the directory has already
 - * been written once, it is relocated to the end of the file, in case it
 - * has changed in size.  Note that this will result in the loss of the 
 - * previously used directory space. 
 - */ 
 -
 -int 
 -TIFFRewriteDirectory( TIFF *tif )
 -{
 -    static const char module[] = "TIFFRewriteDirectory";
 -
 -    /* We don't need to do anything special if it hasn't been written. */
 -    if ( tif->tif_diroff == 0 )
 -        return TIFFWriteDirectory( tif );
 -
 -    /*
 -    ** Find and zero the pointer to this directory, so that TIFFLinkDirectory
 -    ** will cause it to be added after this directories current pre-link.
 -    */
 -    
 -    /* Is it the first directory in the file? */
 -    if (tif->tif_header.tiff_diroff == tif->tif_diroff) 
 -    {
 -        tif->tif_header.tiff_diroff = 0;
 -        tif->tif_diroff = 0;
 -
 -        TIFFSeekFile(tif, (toff_t)(TIFF_MAGIC_SIZE+TIFF_VERSION_SIZE),
 -		     SEEK_SET);
 -        if (!WriteOK(tif, &(tif->tif_header.tiff_diroff), 
 -                     sizeof (tif->tif_diroff))) 
 -        {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -				     "Error updating TIFF header");
 -            return (0);
 -        }
 -    }
 -    else
 -    {
 -        toff_t  nextdir, off;
 -
 -	nextdir = tif->tif_header.tiff_diroff;
 -	do {
 -		uint16 dircount;
 -
 -		if (!SeekOK(tif, nextdir) ||
 -		    !ReadOK(tif, &dircount, sizeof (dircount))) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				     "Error fetching directory count");
 -			return (0);
 -		}
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabShort(&dircount);
 -		(void) TIFFSeekFile(tif,
 -		    dircount * sizeof (TIFFDirEntry), SEEK_CUR);
 -		if (!ReadOK(tif, &nextdir, sizeof (nextdir))) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				     "Error fetching directory link");
 -			return (0);
 -		}
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabLong(&nextdir);
 -	} while (nextdir != tif->tif_diroff && nextdir != 0);
 -        off = TIFFSeekFile(tif, 0, SEEK_CUR); /* get current offset */
 -        (void) TIFFSeekFile(tif, off - (toff_t)sizeof(nextdir), SEEK_SET);
 -        tif->tif_diroff = 0;
 -	if (!WriteOK(tif, &(tif->tif_diroff), sizeof (nextdir))) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "Error writing directory link");
 -		return (0);
 -	}
 -    }
 -
 -    /*
 -    ** Now use TIFFWriteDirectory() normally.
 -    */
 -
 -    return TIFFWriteDirectory( tif );
 -}
 -
 -
 -/*
 - * Link the current directory into the directory chain for the file.
 - */
 -static int
 -TIFFLinkDirectory(TIFF* tif)
 -{
 -	static const char module[] = "TIFFLinkDirectory";
 -	toff_t nextdir;
 -	toff_t diroff, off;
 -
 -	tif->tif_diroff = (TIFFSeekFile(tif, (toff_t) 0, SEEK_END)+1) &~ 1;
 -	diroff = tif->tif_diroff;
 -	if (tif->tif_flags & TIFF_SWAB)
 -		TIFFSwabLong(&diroff);
 -
 -	/*
 -	 * Handle SubIFDs
 -	 */
 -        if (tif->tif_flags & TIFF_INSUBIFD) {
 -		(void) TIFFSeekFile(tif, tif->tif_subifdoff, SEEK_SET);
 -		if (!WriteOK(tif, &diroff, sizeof (diroff))) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				     "%s: Error writing SubIFD directory link",
 -				     tif->tif_name);
 -			return (0);
 -		}
 -		/*
 -		 * Advance to the next SubIFD or, if this is
 -		 * the last one configured, revert back to the
 -		 * normal directory linkage.
 -		 */
 -		if (--tif->tif_nsubifd)
 -			tif->tif_subifdoff += sizeof (diroff);
 -		else
 -			tif->tif_flags &= ~TIFF_INSUBIFD;
 -		return (1);
 -	}
 -
 -	if (tif->tif_header.tiff_diroff == 0) {
 -		/*
 -		 * First directory, overwrite offset in header.
 -		 */
 -		tif->tif_header.tiff_diroff = tif->tif_diroff;
 -		(void) TIFFSeekFile(tif,
 -				    (toff_t)(TIFF_MAGIC_SIZE+TIFF_VERSION_SIZE),
 -                                    SEEK_SET);
 -		if (!WriteOK(tif, &diroff, sizeof (diroff))) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -				     "Error writing TIFF header");
 -			return (0);
 -		}
 -		return (1);
 -	}
 -	/*
 -	 * Not the first directory, search to the last and append.
 -	 */
 -	nextdir = tif->tif_header.tiff_diroff;
 -	do {
 -		uint16 dircount;
 -
 -		if (!SeekOK(tif, nextdir) ||
 -		    !ReadOK(tif, &dircount, sizeof (dircount))) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				     "Error fetching directory count");
 -			return (0);
 -		}
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabShort(&dircount);
 -		(void) TIFFSeekFile(tif,
 -		    dircount * sizeof (TIFFDirEntry), SEEK_CUR);
 -		if (!ReadOK(tif, &nextdir, sizeof (nextdir))) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				     "Error fetching directory link");
 -			return (0);
 -		}
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabLong(&nextdir);
 -	} while (nextdir != 0);
 -        off = TIFFSeekFile(tif, 0, SEEK_CUR); /* get current offset */
 -        (void) TIFFSeekFile(tif, off - (toff_t)sizeof(nextdir), SEEK_SET);
 -	if (!WriteOK(tif, &diroff, sizeof (diroff))) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "Error writing directory link");
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_dumpmode.c b/plugins/FreeImage/Source/LibTIFF/tif_dumpmode.c deleted file mode 100644 index 273614728d..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_dumpmode.c +++ /dev/null @@ -1,126 +0,0 @@ -/* $Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_dumpmode.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * "Null" Compression Algorithm Support.
 - */
 -#include "tiffiop.h"
 -
 -/*
 - * Encode a hunk of pixels.
 - */
 -static int
 -DumpModeEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s)
 -{
 -	(void) s;
 -	while (cc > 0) {
 -		tsize_t n;
 -
 -		n = cc;
 -		if (tif->tif_rawcc + n > tif->tif_rawdatasize)
 -			n = tif->tif_rawdatasize - tif->tif_rawcc;
 -
 -		assert( n > 0 );
 -                
 -		/*
 -		 * Avoid copy if client has setup raw
 -		 * data buffer to avoid extra copy.
 -		 */
 -		if (tif->tif_rawcp != pp)
 -			_TIFFmemcpy(tif->tif_rawcp, pp, n);
 -		tif->tif_rawcp += n;
 -		tif->tif_rawcc += n;
 -		pp += n;
 -		cc -= n;
 -		if (tif->tif_rawcc >= tif->tif_rawdatasize &&
 -		    !TIFFFlushData1(tif))
 -			return (-1);
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Decode a hunk of pixels.
 - */
 -static int
 -DumpModeDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s)
 -{
 -	(void) s;
 -/*         fprintf(stderr,"DumpModeDecode: scanline %ld, expected %ld bytes, got %ld bytes\n", */
 -/*                 (long) tif->tif_row, (long) tif->tif_rawcc, (long) cc); */
 -	if (tif->tif_rawcc < cc) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		    "DumpModeDecode: Not enough data for scanline %d",
 -		    tif->tif_row);
 -		return (0);
 -	}
 -	/*
 -	 * Avoid copy if client has setup raw
 -	 * data buffer to avoid extra copy.
 -	 */
 -	if (tif->tif_rawcp != buf)
 -		_TIFFmemcpy(buf, tif->tif_rawcp, cc);
 -	tif->tif_rawcp += cc;
 -	tif->tif_rawcc -= cc;
 -	return (1);
 -}
 -
 -/*
 - * Seek forwards nrows in the current strip.
 - */
 -static int
 -DumpModeSeek(TIFF* tif, uint32 nrows)
 -{
 -	tif->tif_rawcp += nrows * tif->tif_scanlinesize;
 -	tif->tif_rawcc -= nrows * tif->tif_scanlinesize;
 -	return (1);
 -}
 -
 -/*
 - * Initialize dump mode.
 - */
 -int
 -TIFFInitDumpMode(TIFF* tif, int scheme)
 -{
 -	(void) scheme;
 -	tif->tif_decoderow = DumpModeDecode;
 -	tif->tif_decodestrip = DumpModeDecode;
 -	tif->tif_decodetile = DumpModeDecode;
 -	tif->tif_encoderow = DumpModeEncode;
 -	tif->tif_encodestrip = DumpModeEncode;
 -	tif->tif_encodetile = DumpModeEncode;
 -	tif->tif_seek = DumpModeSeek;
 -	return (1);
 -}
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_error.c b/plugins/FreeImage/Source/LibTIFF/tif_error.c deleted file mode 100644 index 23f90648de..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_error.c +++ /dev/null @@ -1,80 +0,0 @@ -/* $Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_error.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - */
 -#include "tiffiop.h"
 -
 -TIFFErrorHandlerExt _TIFFerrorHandlerExt = NULL;
 -
 -TIFFErrorHandler
 -TIFFSetErrorHandler(TIFFErrorHandler handler)
 -{
 -	TIFFErrorHandler prev = _TIFFerrorHandler;
 -	_TIFFerrorHandler = handler;
 -	return (prev);
 -}
 -
 -TIFFErrorHandlerExt
 -TIFFSetErrorHandlerExt(TIFFErrorHandlerExt handler)
 -{
 -	TIFFErrorHandlerExt prev = _TIFFerrorHandlerExt;
 -	_TIFFerrorHandlerExt = handler;
 -	return (prev);
 -}
 -
 -void
 -TIFFError(const char* module, const char* fmt, ...)
 -{
 -	va_list ap;
 -	va_start(ap, fmt);
 -	if (_TIFFerrorHandler)
 -		(*_TIFFerrorHandler)(module, fmt, ap);
 -	if (_TIFFerrorHandlerExt)
 -		(*_TIFFerrorHandlerExt)(0, module, fmt, ap);
 -	va_end(ap);
 -}
 -
 -void
 -TIFFErrorExt(thandle_t fd, const char* module, const char* fmt, ...)
 -{
 -	va_list ap;
 -	va_start(ap, fmt);
 -	if (_TIFFerrorHandler)
 -		(*_TIFFerrorHandler)(module, fmt, ap);
 -	if (_TIFFerrorHandlerExt)
 -		(*_TIFFerrorHandlerExt)(fd, module, fmt, ap);
 -	va_end(ap);
 -}
 -
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_extension.c b/plugins/FreeImage/Source/LibTIFF/tif_extension.c deleted file mode 100644 index e8fb4a2cac..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_extension.c +++ /dev/null @@ -1,118 +0,0 @@ -/* $Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_extension.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Various routines support external extension of the tag set, and other
 - * application extension capabilities. 
 - */
 -
 -#include "tiffiop.h"
 -
 -int TIFFGetTagListCount( TIFF *tif )
 -
 -{
 -    TIFFDirectory* td = &tif->tif_dir;
 -    
 -    return td->td_customValueCount;
 -}
 -
 -ttag_t TIFFGetTagListEntry( TIFF *tif, int tag_index )
 -
 -{
 -    TIFFDirectory* td = &tif->tif_dir;
 -
 -    if ( tag_index < 0 || tag_index >= td->td_customValueCount )
 -        return (ttag_t) -1;
 -    else
 -        return td->td_customValues[tag_index].info->field_tag;
 -}
 -
 -/*
 -** This provides read/write access to the TIFFTagMethods within the TIFF
 -** structure to application code without giving access to the private
 -** TIFF structure.
 -*/
 -TIFFTagMethods *TIFFAccessTagMethods( TIFF *tif )
 -
 -{
 -    return &(tif->tif_tagmethods);
 -}
 -
 -void *TIFFGetClientInfo( TIFF *tif, const char *name )
 -
 -{
 -    TIFFClientInfoLink *link = tif->tif_clientinfo;
 -
 -    while( link != NULL && strcmp(link->name,name) != 0 )
 -        link = link->next;
 -
 -    if ( link != NULL )
 -        return link->data;
 -    else
 -        return NULL;
 -}
 -
 -void TIFFSetClientInfo( TIFF *tif, void *data, const char *name )
 -
 -{
 -    TIFFClientInfoLink *link = tif->tif_clientinfo;
 -
 -    /*
 -    ** Do we have an existing link with this name?  If so, just
 -    ** set it.
 -    */
 -    while( link != NULL && strcmp(link->name,name) != 0 )
 -        link = link->next;
 -
 -    if ( link != NULL )
 -    {
 -        link->data = data;
 -        return;
 -    }
 -
 -    /*
 -    ** Create a new link.
 -    */
 -
 -    link = (TIFFClientInfoLink *) _TIFFmalloc(sizeof(TIFFClientInfoLink));
 -    assert (link != NULL);
 -    link->next = tif->tif_clientinfo;
 -    link->name = (char *) _TIFFmalloc(strlen(name)+1);
 -    assert (link->name != NULL);
 -    strcpy(link->name, name);
 -    link->data = data;
 -
 -    tif->tif_clientinfo = link;
 -}
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_fax3.c b/plugins/FreeImage/Source/LibTIFF/tif_fax3.c deleted file mode 100644 index 2e74a37c69..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_fax3.c +++ /dev/null @@ -1,1626 +0,0 @@ -/* $Id: tif_fax3.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1990-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#include "tiffiop.h"
 -#ifdef CCITT_SUPPORT
 -/*
 - * TIFF Library.
 - *
 - * CCITT Group 3 (T.4) and Group 4 (T.6) Compression Support.
 - *
 - * This file contains support for decoding and encoding TIFF
 - * compression algorithms 2, 3, 4, and 32771.
 - *
 - * Decoder support is derived, with permission, from the code
 - * in Frank Cringle's viewfax program;
 - *      Copyright (C) 1990, 1995  Frank D. Cringle.
 - */
 -#include "tif_fax3.h"
 -#define	G3CODES
 -#include "t4.h"
 -#include <stdio.h>
 -
 -/*
 - * Compression+decompression state blocks are
 - * derived from this ``base state'' block.
 - */
 -typedef struct {
 -        int     rw_mode;                /* O_RDONLY for decode, else encode */
 -	int	mode;			/* operating mode */
 -	uint32	rowbytes;		/* bytes in a decoded scanline */
 -	uint32	rowpixels;		/* pixels in a scanline */
 -
 -	uint16	cleanfaxdata;		/* CleanFaxData tag */
 -	uint32	badfaxrun;		/* BadFaxRun tag */
 -	uint32	badfaxlines;		/* BadFaxLines tag */
 -	uint32	groupoptions;		/* Group 3/4 options tag */
 -	uint32	recvparams;		/* encoded Class 2 session params */
 -	char*	subaddress;		/* subaddress string */
 -	uint32	recvtime;		/* time spent receiving (secs) */
 -	char*	faxdcs;			/* Table 2/T.30 encoded session params */
 -	TIFFVGetMethod vgetparent;	/* super-class method */
 -	TIFFVSetMethod vsetparent;	/* super-class method */
 -	TIFFPrintMethod printdir;	/* super-class method */
 -} Fax3BaseState;
 -#define	Fax3State(tif)		((Fax3BaseState*) (tif)->tif_data)
 -
 -typedef enum { G3_1D, G3_2D } Ttag;
 -typedef struct {
 -	Fax3BaseState b;
 -
 -	/* Decoder state info */
 -	const unsigned char* bitmap;	/* bit reversal table */
 -	uint32	data;			/* current i/o byte/word */
 -	int	bit;			/* current i/o bit in byte */
 -	int	EOLcnt;			/* count of EOL codes recognized */
 -	TIFFFaxFillFunc fill;		/* fill routine */
 -	uint32*	runs;			/* b&w runs for current/previous row */
 -	uint32*	refruns;		/* runs for reference line */
 -	uint32*	curruns;		/* runs for current line */
 -
 -	/* Encoder state info */
 -	Ttag    tag;			/* encoding state */
 -	unsigned char*	refline;	/* reference line for 2d decoding */
 -	int	k;			/* #rows left that can be 2d encoded */
 -	int	maxk;			/* max #rows that can be 2d encoded */
 -
 -	int line;
 -} Fax3CodecState;
 -#define	DecoderState(tif)	((Fax3CodecState*) Fax3State(tif))
 -#define	EncoderState(tif)	((Fax3CodecState*) Fax3State(tif))
 -
 -#define	is2DEncoding(sp) \
 -	(sp->b.groupoptions & GROUP3OPT_2DENCODING)
 -#define	isAligned(p,t)	((((unsigned long)(p)) & (sizeof (t)-1)) == 0)
 -
 -/*
 - * Group 3 and Group 4 Decoding.
 - */
 -
 -/*
 - * These macros glue the TIFF library state to
 - * the state expected by Frank's decoder.
 - */
 -#define	DECLARE_STATE(tif, sp, mod)					\
 -    static const char module[] = mod;					\
 -    Fax3CodecState* sp = DecoderState(tif);				\
 -    int a0;				/* reference element */		\
 -    int lastx = sp->b.rowpixels;	/* last element in row */	\
 -    uint32 BitAcc;			/* bit accumulator */		\
 -    int BitsAvail;			/* # valid bits in BitAcc */	\
 -    int RunLength;			/* length of current run */	\
 -    unsigned char* cp;			/* next byte of input data */	\
 -    unsigned char* ep;			/* end of input data */		\
 -    uint32* pa;				/* place to stuff next run */	\
 -    uint32* thisrun;			/* current row's run array */	\
 -    int EOLcnt;				/* # EOL codes recognized */	\
 -    const unsigned char* bitmap = sp->bitmap;	/* input data bit reverser */	\
 -    const TIFFFaxTabEnt* TabEnt
 -#define	DECLARE_STATE_2D(tif, sp, mod)					\
 -    DECLARE_STATE(tif, sp, mod);					\
 -    int b1;				/* next change on prev line */	\
 -    uint32* pb				/* next run in reference line */\
 -/*
 - * Load any state that may be changed during decoding.
 - */
 -#define	CACHE_STATE(tif, sp) do {					\
 -    BitAcc = sp->data;							\
 -    BitsAvail = sp->bit;						\
 -    EOLcnt = sp->EOLcnt;						\
 -    cp = (unsigned char*) tif->tif_rawcp;				\
 -    ep = cp + tif->tif_rawcc;						\
 -} while (0)
 -/*
 - * Save state possibly changed during decoding.
 - */
 -#define	UNCACHE_STATE(tif, sp) do {					\
 -    sp->bit = BitsAvail;						\
 -    sp->data = BitAcc;							\
 -    sp->EOLcnt = EOLcnt;						\
 -    tif->tif_rawcc -= (tidata_t) cp - tif->tif_rawcp;			\
 -    tif->tif_rawcp = (tidata_t) cp;					\
 -} while (0)
 -
 -/*
 - * Setup state for decoding a strip.
 - */
 -static int
 -Fax3PreDecode(TIFF* tif, tsample_t s)
 -{
 -	Fax3CodecState* sp = DecoderState(tif);
 -
 -	(void) s;
 -	assert(sp != NULL);
 -	sp->bit = 0;			/* force initial read */
 -	sp->data = 0;
 -	sp->EOLcnt = 0;			/* force initial scan for EOL */
 -	/*
 -	 * Decoder assumes lsb-to-msb bit order.  Note that we select
 -	 * this here rather than in Fax3SetupState so that viewers can
 -	 * hold the image open, fiddle with the FillOrder tag value,
 -	 * and then re-decode the image.  Otherwise they'd need to close
 -	 * and open the image to get the state reset.
 -	 */
 -	sp->bitmap =
 -	    TIFFGetBitRevTable(tif->tif_dir.td_fillorder != FILLORDER_LSB2MSB);
 -	if (sp->refruns) {		/* init reference line to white */
 -		sp->refruns[0] = (uint32) sp->b.rowpixels;
 -		sp->refruns[1] = 0;
 -	}
 -	sp->line = 0;
 -	return (1);
 -}
 -
 -/*
 - * Routine for handling various errors/conditions.
 - * Note how they are "glued into the decoder" by
 - * overriding the definitions used by the decoder.
 - */
 -
 -static void
 -Fax3Unexpected(const char* module, TIFF* tif, uint32 line, uint32 a0)
 -{
 -	TIFFErrorExt(tif->tif_clientdata, module, "%s: Bad code word at line %u of %s %u (x %u)",
 -		     tif->tif_name, line, isTiled(tif) ? "tile" : "strip",
 -		     (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip),
 -		     a0);
 -}
 -#define	unexpected(table, a0)	Fax3Unexpected(module, tif, sp->line, a0)
 -
 -static void
 -Fax3Extension(const char* module, TIFF* tif, uint32 line, uint32 a0)
 -{
 -	TIFFErrorExt(tif->tif_clientdata, module,
 -		     "%s: Uncompressed data (not supported) at line %u of %s %u (x %u)",
 -		     tif->tif_name, line, isTiled(tif) ? "tile" : "strip",
 -		     (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip),
 -		     a0);
 -}
 -#define	extension(a0)	Fax3Extension(module, tif, sp->line, a0)
 -
 -static void
 -Fax3BadLength(const char* module, TIFF* tif, uint32 line, uint32 a0, uint32 lastx)
 -{
 -	TIFFWarningExt(tif->tif_clientdata, module, "%s: %s at line %u of %s %u (got %u, expected %u)",
 -		       tif->tif_name,
 -		       a0 < lastx ? "Premature EOL" : "Line length mismatch",
 -		       line, isTiled(tif) ? "tile" : "strip",
 -		       (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip),
 -		       a0, lastx);
 -}
 -#define	badlength(a0,lastx)	Fax3BadLength(module, tif, sp->line, a0, lastx)
 -
 -static void
 -Fax3PrematureEOF(const char* module, TIFF* tif, uint32 line, uint32 a0)
 -{
 -	TIFFWarningExt(tif->tif_clientdata, module, "%s: Premature EOF at line %u of %s %u (x %u)",
 -	    tif->tif_name,
 -		       line, isTiled(tif) ? "tile" : "strip",
 -		       (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip),
 -		       a0);
 -}
 -#define	prematureEOF(a0)	Fax3PrematureEOF(module, tif, sp->line, a0)
 -
 -#define	Nop
 -
 -/*
 - * Decode the requested amount of G3 1D-encoded data.
 - */
 -static int
 -Fax3Decode1D(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s)
 -{
 -	DECLARE_STATE(tif, sp, "Fax3Decode1D");
 -
 -	(void) s;
 -	CACHE_STATE(tif, sp);
 -	thisrun = sp->curruns;
 -	while ((long)occ > 0) {
 -		a0 = 0;
 -		RunLength = 0;
 -		pa = thisrun;
 -#ifdef FAX3_DEBUG
 -		printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail);
 -		printf("-------------------- %d\n", tif->tif_row);
 -		fflush(stdout);
 -#endif
 -		SYNC_EOL(EOF1D);
 -		EXPAND1D(EOF1Da);
 -		(*sp->fill)(buf, thisrun, pa, lastx);
 -		buf += sp->b.rowbytes;
 -		occ -= sp->b.rowbytes;
 -		sp->line++;
 -		continue;
 -	EOF1D:				/* premature EOF */
 -		CLEANUP_RUNS();
 -	EOF1Da:				/* premature EOF */
 -		(*sp->fill)(buf, thisrun, pa, lastx);
 -		UNCACHE_STATE(tif, sp);
 -		return (-1);
 -	}
 -	UNCACHE_STATE(tif, sp);
 -	return (1);
 -}
 -
 -#define	SWAP(t,a,b)	{ t x; x = (a); (a) = (b); (b) = x; }
 -/*
 - * Decode the requested amount of G3 2D-encoded data.
 - */
 -static int
 -Fax3Decode2D(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s)
 -{
 -	DECLARE_STATE_2D(tif, sp, "Fax3Decode2D");
 -	int is1D;			/* current line is 1d/2d-encoded */
 -
 -	(void) s;
 -	CACHE_STATE(tif, sp);
 -	while ((long)occ > 0) {
 -		a0 = 0;
 -		RunLength = 0;
 -		pa = thisrun = sp->curruns;
 -#ifdef FAX3_DEBUG
 -		printf("\nBitAcc=%08X, BitsAvail = %d EOLcnt = %d",
 -		    BitAcc, BitsAvail, EOLcnt);
 -#endif
 -		SYNC_EOL(EOF2D);
 -		NeedBits8(1, EOF2D);
 -		is1D = GetBits(1);	/* 1D/2D-encoding tag bit */
 -		ClrBits(1);
 -#ifdef FAX3_DEBUG
 -		printf(" %s\n-------------------- %d\n",
 -		    is1D ? "1D" : "2D", tif->tif_row);
 -		fflush(stdout);
 -#endif
 -		pb = sp->refruns;
 -		b1 = *pb++;
 -		if (is1D)
 -			EXPAND1D(EOF2Da);
 -		else
 -			EXPAND2D(EOF2Da);
 -		(*sp->fill)(buf, thisrun, pa, lastx);
 -		SETVALUE(0);		/* imaginary change for reference */
 -		SWAP(uint32*, sp->curruns, sp->refruns);
 -		buf += sp->b.rowbytes;
 -		occ -= sp->b.rowbytes;
 -		sp->line++;
 -		continue;
 -	EOF2D:				/* premature EOF */
 -		CLEANUP_RUNS();
 -	EOF2Da:				/* premature EOF */
 -		(*sp->fill)(buf, thisrun, pa, lastx);
 -		UNCACHE_STATE(tif, sp);
 -		return (-1);
 -	}
 -	UNCACHE_STATE(tif, sp);
 -	return (1);
 -}
 -#undef SWAP
 -
 -/*
 - * The ZERO & FILL macros must handle spans < 2*sizeof(long) bytes.
 - * For machines with 64-bit longs this is <16 bytes; otherwise
 - * this is <8 bytes.  We optimize the code here to reflect the
 - * machine characteristics.
 - */
 -#if SIZEOF_LONG == 8
 -# define FILL(n, cp)							    \
 -    switch (n) {							    \
 -    case 15:(cp)[14] = 0xff; case 14:(cp)[13] = 0xff; case 13: (cp)[12] = 0xff;\
 -    case 12:(cp)[11] = 0xff; case 11:(cp)[10] = 0xff; case 10: (cp)[9] = 0xff;\
 -    case  9: (cp)[8] = 0xff; case  8: (cp)[7] = 0xff; case  7: (cp)[6] = 0xff;\
 -    case  6: (cp)[5] = 0xff; case  5: (cp)[4] = 0xff; case  4: (cp)[3] = 0xff;\
 -    case  3: (cp)[2] = 0xff; case  2: (cp)[1] = 0xff;			      \
 -    case  1: (cp)[0] = 0xff; (cp) += (n); case 0:  ;			      \
 -    }
 -# define ZERO(n, cp)							\
 -    switch (n) {							\
 -    case 15:(cp)[14] = 0; case 14:(cp)[13] = 0; case 13: (cp)[12] = 0;	\
 -    case 12:(cp)[11] = 0; case 11:(cp)[10] = 0; case 10: (cp)[9] = 0;	\
 -    case  9: (cp)[8] = 0; case  8: (cp)[7] = 0; case  7: (cp)[6] = 0;	\
 -    case  6: (cp)[5] = 0; case  5: (cp)[4] = 0; case  4: (cp)[3] = 0;	\
 -    case  3: (cp)[2] = 0; case  2: (cp)[1] = 0;				\
 -    case  1: (cp)[0] = 0; (cp) += (n); case 0:  ;			\
 -    }
 -#else
 -# define FILL(n, cp)							    \
 -    switch (n) {							    \
 -    case 7: (cp)[6] = 0xff; case 6: (cp)[5] = 0xff; case 5: (cp)[4] = 0xff; \
 -    case 4: (cp)[3] = 0xff; case 3: (cp)[2] = 0xff; case 2: (cp)[1] = 0xff; \
 -    case 1: (cp)[0] = 0xff; (cp) += (n); case 0:  ;			    \
 -    }
 -# define ZERO(n, cp)							\
 -    switch (n) {							\
 -    case 7: (cp)[6] = 0; case 6: (cp)[5] = 0; case 5: (cp)[4] = 0;	\
 -    case 4: (cp)[3] = 0; case 3: (cp)[2] = 0; case 2: (cp)[1] = 0;	\
 -    case 1: (cp)[0] = 0; (cp) += (n); case 0:  ;			\
 -    }
 -#endif
 -
 -/*
 - * Bit-fill a row according to the white/black
 - * runs generated during G3/G4 decoding.
 - */
 -void
 -_TIFFFax3fillruns(unsigned char* buf, uint32* runs, uint32* erun, uint32 lastx)
 -{
 -	static const unsigned char _fillmasks[] =
 -	    { 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff };
 -	unsigned char* cp;
 -	uint32 x, bx, run;
 -	int32 n, nw;
 -	long* lp;
 -
 -	if ((erun-runs)&1)
 -	    *erun++ = 0;
 -	x = 0;
 -	for (; runs < erun; runs += 2) {
 -	    run = runs[0];
 -	    if (x+run > lastx || run > lastx )
 -		run = runs[0] = (uint32) (lastx - x);
 -	    if (run) {
 -		cp = buf + (x>>3);
 -		bx = x&7;
 -		if (run > 8-bx) {
 -		    if (bx) {			/* align to byte boundary */
 -			*cp++ &= 0xff << (8-bx);
 -			run -= 8-bx;
 -		    }
 -		    if ( (n = run >> 3) != 0 ) {	/* multiple bytes to fill */
 -			if ((n/sizeof (long)) > 1) {
 -			    /*
 -			     * Align to longword boundary and fill.
 -			     */
 -			    for (; n && !isAligned(cp, long); n--)
 -				    *cp++ = 0x00;
 -			    lp = (long*) cp;
 -			    nw = (int32)(n / sizeof (long));
 -			    n -= nw * sizeof (long);
 -			    do {
 -				    *lp++ = 0L;
 -			    } while (--nw);
 -			    cp = (unsigned char*) lp;
 -			}
 -			ZERO(n, cp);
 -			run &= 7;
 -		    }
 -		    if (run)
 -			cp[0] &= 0xff >> run;
 -		} else
 -		    cp[0] &= ~(_fillmasks[run]>>bx);
 -		x += runs[0];
 -	    }
 -	    run = runs[1];
 -	    if (x+run > lastx || run > lastx )
 -		run = runs[1] = lastx - x;
 -	    if (run) {
 -		cp = buf + (x>>3);
 -		bx = x&7;
 -		if (run > 8-bx) {
 -		    if (bx) {			/* align to byte boundary */
 -			*cp++ |= 0xff >> bx;
 -			run -= 8-bx;
 -		    }
 -		    if ( (n = run>>3) != 0 ) {	/* multiple bytes to fill */
 -			if ((n/sizeof (long)) > 1) {
 -			    /*
 -			     * Align to longword boundary and fill.
 -			     */
 -			    for (; n && !isAligned(cp, long); n--)
 -				*cp++ = 0xff;
 -			    lp = (long*) cp;
 -			    nw = (int32)(n / sizeof (long));
 -			    n -= nw * sizeof (long);
 -			    do {
 -				*lp++ = -1L;
 -			    } while (--nw);
 -			    cp = (unsigned char*) lp;
 -			}
 -			FILL(n, cp);
 -			run &= 7;
 -		    }
 -		    if (run)
 -			cp[0] |= 0xff00 >> run;
 -		} else
 -		    cp[0] |= _fillmasks[run]>>bx;
 -		x += runs[1];
 -	    }
 -	}
 -	assert(x == lastx);
 -}
 -#undef	ZERO
 -#undef	FILL
 -
 -/*
 - * Setup G3/G4-related compression/decompression state
 - * before data is processed.  This routine is called once
 - * per image -- it sets up different state based on whether
 - * or not decoding or encoding is being done and whether
 - * 1D- or 2D-encoded data is involved.
 - */
 -static int
 -Fax3SetupState(TIFF* tif)
 -{
 -	TIFFDirectory* td = &tif->tif_dir;
 -	Fax3BaseState* sp = Fax3State(tif);
 -	int needsRefLine;
 -	Fax3CodecState* dsp = (Fax3CodecState*) Fax3State(tif);
 -	uint32 rowbytes, rowpixels, nruns;
 -
 -	if (td->td_bitspersample != 1) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		    "Bits/sample must be 1 for Group 3/4 encoding/decoding");
 -		return (0);
 -	}
 -	/*
 -	 * Calculate the scanline/tile widths.
 -	 */
 -	if (isTiled(tif)) {
 -		rowbytes = TIFFTileRowSize(tif);
 -		rowpixels = td->td_tilewidth;
 -	} else {
 -		rowbytes = TIFFScanlineSize(tif);
 -		rowpixels = td->td_imagewidth;
 -	}
 -	sp->rowbytes = (uint32) rowbytes;
 -	sp->rowpixels = (uint32) rowpixels;
 -	/*
 -	 * Allocate any additional space required for decoding/encoding.
 -	 */
 -	needsRefLine = (
 -	    (sp->groupoptions & GROUP3OPT_2DENCODING) ||
 -	    td->td_compression == COMPRESSION_CCITTFAX4
 -	);
 -
 -	/*
 -	  Assure that allocation computations do not overflow.
 -  
 -	  TIFFroundup and TIFFSafeMultiply return zero on integer overflow
 -	*/
 -	dsp->runs=(uint32*) NULL;
 -	nruns = TIFFroundup(rowpixels,32);
 -	if (needsRefLine) {
 -		nruns = TIFFSafeMultiply(uint32,nruns,2);
 -	}
 -	if ((nruns == 0) || (TIFFSafeMultiply(uint32,nruns,2) == 0)) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "Row pixels integer overflow (rowpixels %u)",
 -			     rowpixels);
 -		return (0);
 -	}
 -	dsp->runs = (uint32*) _TIFFCheckMalloc(tif,
 -					       TIFFSafeMultiply(uint32,nruns,2),
 -					       sizeof (uint32),
 -					       "for Group 3/4 run arrays");
 -	if (dsp->runs == NULL)
 -		return (0);
 -	dsp->curruns = dsp->runs;
 -	if (needsRefLine)
 -		dsp->refruns = dsp->runs + nruns;
 -	else
 -		dsp->refruns = NULL;
 -	if (td->td_compression == COMPRESSION_CCITTFAX3
 -	    && is2DEncoding(dsp)) {	/* NB: default is 1D routine */
 -		tif->tif_decoderow = Fax3Decode2D;
 -		tif->tif_decodestrip = Fax3Decode2D;
 -		tif->tif_decodetile = Fax3Decode2D;
 -	}
 -
 -	if (needsRefLine) {		/* 2d encoding */
 -		Fax3CodecState* esp = EncoderState(tif);
 -		/*
 -		 * 2d encoding requires a scanline
 -		 * buffer for the ``reference line''; the
 -		 * scanline against which delta encoding
 -		 * is referenced.  The reference line must
 -		 * be initialized to be ``white'' (done elsewhere).
 -		 */
 -		esp->refline = (unsigned char*) _TIFFmalloc(rowbytes);
 -		if (esp->refline == NULL) {
 -			TIFFErrorExt(tif->tif_clientdata, "Fax3SetupState",
 -			    "%s: No space for Group 3/4 reference line",
 -			    tif->tif_name);
 -			return (0);
 -		}
 -	} else					/* 1d encoding */
 -		EncoderState(tif)->refline = NULL;
 -
 -	return (1);
 -}
 -
 -/*
 - * CCITT Group 3 FAX Encoding.
 - */
 -
 -#define	Fax3FlushBits(tif, sp) {				\
 -	if ((tif)->tif_rawcc >= (tif)->tif_rawdatasize)		\
 -		(void) TIFFFlushData1(tif);			\
 -	*(tif)->tif_rawcp++ = (tidataval_t) (sp)->data;		\
 -	(tif)->tif_rawcc++;					\
 -	(sp)->data = 0, (sp)->bit = 8;				\
 -}
 -#define	_FlushBits(tif) {					\
 -	if ((tif)->tif_rawcc >= (tif)->tif_rawdatasize)		\
 -		(void) TIFFFlushData1(tif);			\
 -	*(tif)->tif_rawcp++ = (tidataval_t) data;		\
 -	(tif)->tif_rawcc++;					\
 -	data = 0, bit = 8;					\
 -}
 -static const int _msbmask[9] =
 -    { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff };
 -#define	_PutBits(tif, bits, length) {				\
 -	while (length > bit) {					\
 -		data |= bits >> (length - bit);			\
 -		length -= bit;					\
 -		_FlushBits(tif);				\
 -	}							\
 -	data |= (bits & _msbmask[length]) << (bit - length);	\
 -	bit -= length;						\
 -	if (bit == 0)						\
 -		_FlushBits(tif);				\
 -}
 -	
 -/*
 - * Write a variable-length bit-value to
 - * the output stream.  Values are
 - * assumed to be at most 16 bits.
 - */
 -static void
 -Fax3PutBits(TIFF* tif, unsigned int bits, unsigned int length)
 -{
 -	Fax3CodecState* sp = EncoderState(tif);
 -	unsigned int bit = sp->bit;
 -	int data = sp->data;
 -
 -	_PutBits(tif, bits, length);
 -
 -	sp->data = data;
 -	sp->bit = bit;
 -}
 -
 -/*
 - * Write a code to the output stream.
 - */
 -#define putcode(tif, te)	Fax3PutBits(tif, (te)->code, (te)->length)
 -
 -#ifdef FAX3_DEBUG
 -#define	DEBUG_COLOR(w) (tab == TIFFFaxWhiteCodes ? w "W" : w "B")
 -#define	DEBUG_PRINT(what,len) {						\
 -    int t;								\
 -    printf("%08X/%-2d: %s%5d\t", data, bit, DEBUG_COLOR(what), len);	\
 -    for (t = length-1; t >= 0; t--)					\
 -	putchar(code & (1<<t) ? '1' : '0');				\
 -    putchar('\n');							\
 -}
 -#endif
 -
 -/*
 - * Write the sequence of codes that describes
 - * the specified span of zero's or one's.  The
 - * appropriate table that holds the make-up and
 - * terminating codes is supplied.
 - */
 -static void
 -putspan(TIFF* tif, int32 span, const tableentry* tab)
 -{
 -	Fax3CodecState* sp = EncoderState(tif);
 -	unsigned int bit = sp->bit;
 -	int data = sp->data;
 -	unsigned int code, length;
 -
 -	while (span >= 2624) {
 -		const tableentry* te = &tab[63 + (2560>>6)];
 -		code = te->code, length = te->length;
 -#ifdef FAX3_DEBUG
 -		DEBUG_PRINT("MakeUp", te->runlen);
 -#endif
 -		_PutBits(tif, code, length);
 -		span -= te->runlen;
 -	}
 -	if (span >= 64) {
 -		const tableentry* te = &tab[63 + (span>>6)];
 -		assert(te->runlen == 64*(span>>6));
 -		code = te->code, length = te->length;
 -#ifdef FAX3_DEBUG
 -		DEBUG_PRINT("MakeUp", te->runlen);
 -#endif
 -		_PutBits(tif, code, length);
 -		span -= te->runlen;
 -	}
 -	code = tab[span].code, length = tab[span].length;
 -#ifdef FAX3_DEBUG
 -	DEBUG_PRINT("  Term", tab[span].runlen);
 -#endif
 -	_PutBits(tif, code, length);
 -
 -	sp->data = data;
 -	sp->bit = bit;
 -}
 -
 -/*
 - * Write an EOL code to the output stream.  The zero-fill
 - * logic for byte-aligning encoded scanlines is handled
 - * here.  We also handle writing the tag bit for the next
 - * scanline when doing 2d encoding.
 - */
 -static void
 -Fax3PutEOL(TIFF* tif)
 -{
 -	Fax3CodecState* sp = EncoderState(tif);
 -	unsigned int bit = sp->bit;
 -	int data = sp->data;
 -	unsigned int code, length, tparm;
 -
 -	if (sp->b.groupoptions & GROUP3OPT_FILLBITS) {
 -		/*
 -		 * Force bit alignment so EOL will terminate on
 -		 * a byte boundary.  That is, force the bit alignment
 -		 * to 16-12 = 4 before putting out the EOL code.
 -		 */
 -		int align = 8 - 4;
 -		if (align != sp->bit) {
 -			if (align > sp->bit)
 -				align = sp->bit + (8 - align);
 -			else
 -				align = sp->bit - align;
 -			code = 0;
 -			tparm=align; 
 -			_PutBits(tif, 0, tparm);
 -		}
 -	}
 -	code = EOL, length = 12;
 -	if (is2DEncoding(sp))
 -		code = (code<<1) | (sp->tag == G3_1D), length++;
 -	_PutBits(tif, code, length);
 -
 -	sp->data = data;
 -	sp->bit = bit;
 -}
 -
 -/*
 - * Reset encoding state at the start of a strip.
 - */
 -static int
 -Fax3PreEncode(TIFF* tif, tsample_t s)
 -{
 -	Fax3CodecState* sp = EncoderState(tif);
 -
 -	(void) s;
 -	assert(sp != NULL);
 -	sp->bit = 8;
 -	sp->data = 0;
 -	sp->tag = G3_1D;
 -	/*
 -	 * This is necessary for Group 4; otherwise it isn't
 -	 * needed because the first scanline of each strip ends
 -	 * up being copied into the refline.
 -	 */
 -	if (sp->refline)
 -		_TIFFmemset(sp->refline, 0x00, sp->b.rowbytes);
 -	if (is2DEncoding(sp)) {
 -		float res = tif->tif_dir.td_yresolution;
 -		/*
 -		 * The CCITT spec says that when doing 2d encoding, you
 -		 * should only do it on K consecutive scanlines, where K
 -		 * depends on the resolution of the image being encoded
 -		 * (2 for <= 200 lpi, 4 for > 200 lpi).  Since the directory
 -		 * code initializes td_yresolution to 0, this code will
 -		 * select a K of 2 unless the YResolution tag is set
 -		 * appropriately.  (Note also that we fudge a little here
 -		 * and use 150 lpi to avoid problems with units conversion.)
 -		 */
 -		if (tif->tif_dir.td_resolutionunit == RESUNIT_CENTIMETER)
 -			res *= 2.54f;		/* convert to inches */
 -		sp->maxk = (res > 150 ? 4 : 2);
 -		sp->k = sp->maxk-1;
 -	} else
 -		sp->k = sp->maxk = 0;
 -	sp->line = 0;
 -	return (1);
 -}
 -
 -static const unsigned char zeroruns[256] = {
 -    8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,	/* 0x00 - 0x0f */
 -    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0x10 - 0x1f */
 -    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,	/* 0x20 - 0x2f */
 -    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,	/* 0x30 - 0x3f */
 -    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* 0x40 - 0x4f */
 -    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* 0x50 - 0x5f */
 -    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* 0x60 - 0x6f */
 -    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* 0x70 - 0x7f */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0x80 - 0x8f */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0x90 - 0x9f */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0xa0 - 0xaf */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0xb0 - 0xbf */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0xc0 - 0xcf */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0xd0 - 0xdf */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0xe0 - 0xef */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0xf0 - 0xff */
 -};
 -static const unsigned char oneruns[256] = {
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0x00 - 0x0f */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0x10 - 0x1f */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0x20 - 0x2f */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0x30 - 0x3f */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0x40 - 0x4f */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0x50 - 0x5f */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0x60 - 0x6f */
 -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* 0x70 - 0x7f */
 -    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* 0x80 - 0x8f */
 -    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* 0x90 - 0x9f */
 -    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* 0xa0 - 0xaf */
 -    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* 0xb0 - 0xbf */
 -    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,	/* 0xc0 - 0xcf */
 -    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,	/* 0xd0 - 0xdf */
 -    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0xe0 - 0xef */
 -    4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8,	/* 0xf0 - 0xff */
 -};
 -
 -/*
 - * On certain systems it pays to inline
 - * the routines that find pixel spans.
 - */
 -#ifdef VAXC
 -static	int32 find0span(unsigned char*, int32, int32);
 -static	int32 find1span(unsigned char*, int32, int32);
 -#pragma inline(find0span,find1span)
 -#endif
 -
 -/*
 - * Find a span of ones or zeros using the supplied
 - * table.  The ``base'' of the bit string is supplied
 - * along with the start+end bit indices.
 - */
 -static int32
 -find0span(unsigned char* bp, int32 bs, int32 be)
 -{
 -	int32 bits = be - bs;
 -	int32 n, span;
 -
 -	bp += bs>>3;
 -	/*
 -	 * Check partial byte on lhs.
 -	 */
 -	if (bits > 0 && (n = (bs & 7))) {
 -		span = zeroruns[(*bp << n) & 0xff];
 -		if (span > 8-n)		/* table value too generous */
 -			span = 8-n;
 -		if (span > bits)	/* constrain span to bit range */
 -			span = bits;
 -		if (n+span < 8)		/* doesn't extend to edge of byte */
 -			return (span);
 -		bits -= span;
 -		bp++;
 -	} else
 -		span = 0;
 -	if (bits >= (int32)(2 * 8 * sizeof(long))) {
 -		long* lp;
 -		/*
 -		 * Align to longword boundary and check longwords.
 -		 */
 -		while (!isAligned(bp, long)) {
 -			if (*bp != 0x00)
 -				return (span + zeroruns[*bp]);
 -			span += 8, bits -= 8;
 -			bp++;
 -		}
 -		lp = (long*) bp;
 -		while ((bits >= (int32)(8 * sizeof(long))) && (0 == *lp)) {
 -			span += 8*sizeof (long), bits -= 8*sizeof (long);
 -			lp++;
 -		}
 -		bp = (unsigned char*) lp;
 -	}
 -	/*
 -	 * Scan full bytes for all 0's.
 -	 */
 -	while (bits >= 8) {
 -		if (*bp != 0x00)	/* end of run */
 -			return (span + zeroruns[*bp]);
 -		span += 8, bits -= 8;
 -		bp++;
 -	}
 -	/*
 -	 * Check partial byte on rhs.
 -	 */
 -	if (bits > 0) {
 -		n = zeroruns[*bp];
 -		span += (n > bits ? bits : n);
 -	}
 -	return (span);
 -}
 -
 -static int32
 -find1span(unsigned char* bp, int32 bs, int32 be)
 -{
 -	int32 bits = be - bs;
 -	int32 n, span;
 -
 -	bp += bs>>3;
 -	/*
 -	 * Check partial byte on lhs.
 -	 */
 -	if (bits > 0 && (n = (bs & 7))) {
 -		span = oneruns[(*bp << n) & 0xff];
 -		if (span > 8-n)		/* table value too generous */
 -			span = 8-n;
 -		if (span > bits)	/* constrain span to bit range */
 -			span = bits;
 -		if (n+span < 8)		/* doesn't extend to edge of byte */
 -			return (span);
 -		bits -= span;
 -		bp++;
 -	} else
 -		span = 0;
 -	if (bits >= (int32)(2 * 8 * sizeof(long))) {
 -		long* lp;
 -		/*
 -		 * Align to longword boundary and check longwords.
 -		 */
 -		while (!isAligned(bp, long)) {
 -			if (*bp != 0xff)
 -				return (span + oneruns[*bp]);
 -			span += 8, bits -= 8;
 -			bp++;
 -		}
 -		lp = (long*) bp;
 -		while ((bits >= (int32)(8 * sizeof(long))) && (~0 == *lp)) {
 -			span += 8*sizeof (long), bits -= 8*sizeof (long);
 -			lp++;
 -		}
 -		bp = (unsigned char*) lp;
 -	}
 -	/*
 -	 * Scan full bytes for all 1's.
 -	 */
 -	while (bits >= 8) {
 -		if (*bp != 0xff)	/* end of run */
 -			return (span + oneruns[*bp]);
 -		span += 8, bits -= 8;
 -		bp++;
 -	}
 -	/*
 -	 * Check partial byte on rhs.
 -	 */
 -	if (bits > 0) {
 -		n = oneruns[*bp];
 -		span += (n > bits ? bits : n);
 -	}
 -	return (span);
 -}
 -
 -/*
 - * Return the offset of the next bit in the range
 - * [bs..be] that is different from the specified
 - * color.  The end, be, is returned if no such bit
 - * exists.
 - */
 -#define	finddiff(_cp, _bs, _be, _color)	\
 -	(_bs + (_color ? find1span(_cp,_bs,_be) : find0span(_cp,_bs,_be)))
 -/*
 - * Like finddiff, but also check the starting bit
 - * against the end in case start > end.
 - */
 -#define	finddiff2(_cp, _bs, _be, _color) \
 -	(_bs < _be ? finddiff(_cp,_bs,_be,_color) : _be)
 -
 -/*
 - * 1d-encode a row of pixels.  The encoding is
 - * a sequence of all-white or all-black spans
 - * of pixels encoded with Huffman codes.
 - */
 -static int
 -Fax3Encode1DRow(TIFF* tif, unsigned char* bp, uint32 bits)
 -{
 -	Fax3CodecState* sp = EncoderState(tif);
 -	int32 span;
 -        uint32 bs = 0;
 -
 -	for (;;) {
 -		span = find0span(bp, bs, bits);		/* white span */
 -		putspan(tif, span, TIFFFaxWhiteCodes);
 -		bs += span;
 -		if (bs >= bits)
 -			break;
 -		span = find1span(bp, bs, bits);		/* black span */
 -		putspan(tif, span, TIFFFaxBlackCodes);
 -		bs += span;
 -		if (bs >= bits)
 -			break;
 -	}
 -	if (sp->b.mode & (FAXMODE_BYTEALIGN|FAXMODE_WORDALIGN)) {
 -		if (sp->bit != 8)			/* byte-align */
 -			Fax3FlushBits(tif, sp);
 -		if ((sp->b.mode&FAXMODE_WORDALIGN) &&
 -		    !isAligned(tif->tif_rawcp, uint16))
 -			Fax3FlushBits(tif, sp);
 -	}
 -	return (1);
 -}
 -
 -static const tableentry horizcode =
 -    { 3, 0x1, 0 };	/* 001 */
 -static const tableentry passcode =
 -    { 4, 0x1, 0 };	/* 0001 */
 -static const tableentry vcodes[7] = {
 -    { 7, 0x03, 0 },	/* 0000 011 */
 -    { 6, 0x03, 0 },	/* 0000 11 */
 -    { 3, 0x03, 0 },	/* 011 */
 -    { 1, 0x1, 0 },	/* 1 */
 -    { 3, 0x2, 0 },	/* 010 */
 -    { 6, 0x02, 0 },	/* 0000 10 */
 -    { 7, 0x02, 0 }	/* 0000 010 */
 -};
 -
 -/*
 - * 2d-encode a row of pixels.  Consult the CCITT
 - * documentation for the algorithm.
 - */
 -static int
 -Fax3Encode2DRow(TIFF* tif, unsigned char* bp, unsigned char* rp, uint32 bits)
 -{
 -#define	PIXEL(buf,ix)	((((buf)[(ix)>>3]) >> (7-((ix)&7))) & 1)
 -        uint32 a0 = 0;
 -	uint32 a1 = (PIXEL(bp, 0) != 0 ? 0 : finddiff(bp, 0, bits, 0));
 -	uint32 b1 = (PIXEL(rp, 0) != 0 ? 0 : finddiff(rp, 0, bits, 0));
 -	uint32 a2, b2;
 -
 -	for (;;) {
 -		b2 = finddiff2(rp, b1, bits, PIXEL(rp,b1));
 -		if (b2 >= a1) {
 -			int32 d = b1 - a1;
 -			if (!(-3 <= d && d <= 3)) {	/* horizontal mode */
 -				a2 = finddiff2(bp, a1, bits, PIXEL(bp,a1));
 -				putcode(tif, &horizcode);
 -				if (a0+a1 == 0 || PIXEL(bp, a0) == 0) {
 -					putspan(tif, a1-a0, TIFFFaxWhiteCodes);
 -					putspan(tif, a2-a1, TIFFFaxBlackCodes);
 -				} else {
 -					putspan(tif, a1-a0, TIFFFaxBlackCodes);
 -					putspan(tif, a2-a1, TIFFFaxWhiteCodes);
 -				}
 -				a0 = a2;
 -			} else {			/* vertical mode */
 -				putcode(tif, &vcodes[d+3]);
 -				a0 = a1;
 -			}
 -		} else {				/* pass mode */
 -			putcode(tif, &passcode);
 -			a0 = b2;
 -		}
 -		if (a0 >= bits)
 -			break;
 -		a1 = finddiff(bp, a0, bits, PIXEL(bp,a0));
 -		b1 = finddiff(rp, a0, bits, !PIXEL(bp,a0));
 -		b1 = finddiff(rp, b1, bits, PIXEL(bp,a0));
 -	}
 -	return (1);
 -#undef PIXEL
 -}
 -
 -/*
 - * Encode a buffer of pixels.
 - */
 -static int
 -Fax3Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	Fax3CodecState* sp = EncoderState(tif);
 -
 -	(void) s;
 -	while ((long)cc > 0) {
 -		if ((sp->b.mode & FAXMODE_NOEOL) == 0)
 -			Fax3PutEOL(tif);
 -		if (is2DEncoding(sp)) {
 -			if (sp->tag == G3_1D) {
 -				if (!Fax3Encode1DRow(tif, bp, sp->b.rowpixels))
 -					return (0);
 -				sp->tag = G3_2D;
 -			} else {
 -				if (!Fax3Encode2DRow(tif, bp, sp->refline,
 -                                                     sp->b.rowpixels))
 -					return (0);
 -				sp->k--;
 -			}
 -			if (sp->k == 0) {
 -				sp->tag = G3_1D;
 -				sp->k = sp->maxk-1;
 -			} else
 -				_TIFFmemcpy(sp->refline, bp, sp->b.rowbytes);
 -		} else {
 -			if (!Fax3Encode1DRow(tif, bp, sp->b.rowpixels))
 -				return (0);
 -		}
 -		bp += sp->b.rowbytes;
 -		cc -= sp->b.rowbytes;
 -	}
 -	return (1);
 -}
 -
 -static int
 -Fax3PostEncode(TIFF* tif)
 -{
 -	Fax3CodecState* sp = EncoderState(tif);
 -
 -	if (sp->bit != 8)
 -		Fax3FlushBits(tif, sp);
 -	return (1);
 -}
 -
 -static void
 -Fax3Close(TIFF* tif)
 -{
 -	if ((Fax3State(tif)->mode & FAXMODE_NORTC) == 0) {
 -		Fax3CodecState* sp = EncoderState(tif);
 -		unsigned int code = EOL;
 -		unsigned int length = 12;
 -		int i;
 -
 -		if (is2DEncoding(sp))
 -			code = (code<<1) | (sp->tag == G3_1D), length++;
 -		for (i = 0; i < 6; i++)
 -			Fax3PutBits(tif, code, length);
 -		Fax3FlushBits(tif, sp);
 -	}
 -}
 -
 -static void
 -Fax3Cleanup(TIFF* tif)
 -{
 -	Fax3CodecState* sp = DecoderState(tif);
 -	
 -	assert(sp != 0);
 -
 -	tif->tif_tagmethods.vgetfield = sp->b.vgetparent;
 -	tif->tif_tagmethods.vsetfield = sp->b.vsetparent;
 -	tif->tif_tagmethods.printdir = sp->b.printdir;
 -
 -	if (sp->runs)
 -		_TIFFfree(sp->runs);
 -	if (sp->refline)
 -		_TIFFfree(sp->refline);
 -
 -	if (Fax3State(tif)->subaddress)
 -		_TIFFfree(Fax3State(tif)->subaddress);
 -	if (Fax3State(tif)->faxdcs)
 -		_TIFFfree(Fax3State(tif)->faxdcs);
 -
 -	_TIFFfree(tif->tif_data);
 -	tif->tif_data = NULL;
 -
 -	_TIFFSetDefaultCompressionState(tif);
 -}
 -
 -#define	FIELD_BADFAXLINES	(FIELD_CODEC+0)
 -#define	FIELD_CLEANFAXDATA	(FIELD_CODEC+1)
 -#define	FIELD_BADFAXRUN		(FIELD_CODEC+2)
 -#define	FIELD_RECVPARAMS	(FIELD_CODEC+3)
 -#define	FIELD_SUBADDRESS	(FIELD_CODEC+4)
 -#define	FIELD_RECVTIME		(FIELD_CODEC+5)
 -#define	FIELD_FAXDCS		(FIELD_CODEC+6)
 -
 -#define	FIELD_OPTIONS		(FIELD_CODEC+7)
 -
 -static const TIFFFieldInfo faxFieldInfo[] = {
 -    { TIFFTAG_FAXMODE,		 0, 0,	TIFF_ANY,	FIELD_PSEUDO,
 -      FALSE,	FALSE,	"FaxMode" },
 -    { TIFFTAG_FAXFILLFUNC,	 0, 0,	TIFF_ANY,	FIELD_PSEUDO,
 -      FALSE,	FALSE,	"FaxFillFunc" },
 -    { TIFFTAG_BADFAXLINES,	 1, 1,	TIFF_LONG,	FIELD_BADFAXLINES,
 -      TRUE,	FALSE,	"BadFaxLines" },
 -    { TIFFTAG_BADFAXLINES,	 1, 1,	TIFF_SHORT,	FIELD_BADFAXLINES,
 -      TRUE,	FALSE,	"BadFaxLines" },
 -    { TIFFTAG_CLEANFAXDATA,	 1, 1,	TIFF_SHORT,	FIELD_CLEANFAXDATA,
 -      TRUE,	FALSE,	"CleanFaxData" },
 -    { TIFFTAG_CONSECUTIVEBADFAXLINES,1,1, TIFF_LONG,	FIELD_BADFAXRUN,
 -      TRUE,	FALSE,	"ConsecutiveBadFaxLines" },
 -    { TIFFTAG_CONSECUTIVEBADFAXLINES,1,1, TIFF_SHORT,	FIELD_BADFAXRUN,
 -      TRUE,	FALSE,	"ConsecutiveBadFaxLines" },
 -    { TIFFTAG_FAXRECVPARAMS,	 1, 1, TIFF_LONG,	FIELD_RECVPARAMS,
 -      TRUE,	FALSE,	"FaxRecvParams" },
 -    { TIFFTAG_FAXSUBADDRESS,	-1,-1, TIFF_ASCII,	FIELD_SUBADDRESS,
 -      TRUE,	FALSE,	"FaxSubAddress" },
 -    { TIFFTAG_FAXRECVTIME,	 1, 1, TIFF_LONG,	FIELD_RECVTIME,
 -      TRUE,	FALSE,	"FaxRecvTime" },
 -    { TIFFTAG_FAXDCS,		-1,-1, TIFF_ASCII,	FIELD_FAXDCS,
 -      TRUE,	FALSE,	"FaxDcs" },
 -};
 -static const TIFFFieldInfo fax3FieldInfo[] = {
 -    { TIFFTAG_GROUP3OPTIONS,	 1, 1,	TIFF_LONG,	FIELD_OPTIONS,
 -      FALSE,	FALSE,	"Group3Options" },
 -};
 -static const TIFFFieldInfo fax4FieldInfo[] = {
 -    { TIFFTAG_GROUP4OPTIONS,	 1, 1,	TIFF_LONG,	FIELD_OPTIONS,
 -      FALSE,	FALSE,	"Group4Options" },
 -};
 -#define	N(a)	(sizeof (a) / sizeof (a[0]))
 -
 -static int
 -Fax3VSetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	Fax3BaseState* sp = Fax3State(tif);
 -	const TIFFFieldInfo* fip;
 -
 -	assert(sp != 0);
 -	assert(sp->vsetparent != 0);
 -
 -	switch (tag) {
 -	case TIFFTAG_FAXMODE:
 -		sp->mode = va_arg(ap, int);
 -		return 1;			/* NB: pseudo tag */
 -	case TIFFTAG_FAXFILLFUNC:
 -		DecoderState(tif)->fill = va_arg(ap, TIFFFaxFillFunc);
 -		return 1;			/* NB: pseudo tag */
 -	case TIFFTAG_GROUP3OPTIONS:
 -		/* XXX: avoid reading options if compression mismatches. */
 -		if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX3)
 -			sp->groupoptions = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_GROUP4OPTIONS:
 -		/* XXX: avoid reading options if compression mismatches. */
 -		if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX4)
 -			sp->groupoptions = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_BADFAXLINES:
 -		sp->badfaxlines = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_CLEANFAXDATA:
 -		sp->cleanfaxdata = (uint16) va_arg(ap, int);
 -		break;
 -	case TIFFTAG_CONSECUTIVEBADFAXLINES:
 -		sp->badfaxrun = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_FAXRECVPARAMS:
 -		sp->recvparams = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_FAXSUBADDRESS:
 -		_TIFFsetString(&sp->subaddress, va_arg(ap, char*));
 -		break;
 -	case TIFFTAG_FAXRECVTIME:
 -		sp->recvtime = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_FAXDCS:
 -		_TIFFsetString(&sp->faxdcs, va_arg(ap, char*));
 -		break;
 -	default:
 -		return (*sp->vsetparent)(tif, tag, ap);
 -	}
 -	
 -	if ((fip = _TIFFFieldWithTag(tif, tag)))
 -		TIFFSetFieldBit(tif, fip->field_bit);
 -	else
 -		return 0;
 -
 -	tif->tif_flags |= TIFF_DIRTYDIRECT;
 -	return 1;
 -}
 -
 -static int
 -Fax3VGetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	Fax3BaseState* sp = Fax3State(tif);
 -
 -	assert(sp != 0);
 -
 -	switch (tag) {
 -	case TIFFTAG_FAXMODE:
 -		*va_arg(ap, int*) = sp->mode;
 -		break;
 -	case TIFFTAG_FAXFILLFUNC:
 -		*va_arg(ap, TIFFFaxFillFunc*) = DecoderState(tif)->fill;
 -		break;
 -	case TIFFTAG_GROUP3OPTIONS:
 -	case TIFFTAG_GROUP4OPTIONS:
 -		*va_arg(ap, uint32*) = sp->groupoptions;
 -		break;
 -	case TIFFTAG_BADFAXLINES:
 -		*va_arg(ap, uint32*) = sp->badfaxlines;
 -		break;
 -	case TIFFTAG_CLEANFAXDATA:
 -		*va_arg(ap, uint16*) = sp->cleanfaxdata;
 -		break;
 -	case TIFFTAG_CONSECUTIVEBADFAXLINES:
 -		*va_arg(ap, uint32*) = sp->badfaxrun;
 -		break;
 -	case TIFFTAG_FAXRECVPARAMS:
 -		*va_arg(ap, uint32*) = sp->recvparams;
 -		break;
 -	case TIFFTAG_FAXSUBADDRESS:
 -		*va_arg(ap, char**) = sp->subaddress;
 -		break;
 -	case TIFFTAG_FAXRECVTIME:
 -		*va_arg(ap, uint32*) = sp->recvtime;
 -		break;
 -	case TIFFTAG_FAXDCS:
 -		*va_arg(ap, char**) = sp->faxdcs;
 -		break;
 -	default:
 -		return (*sp->vgetparent)(tif, tag, ap);
 -	}
 -	return (1);
 -}
 -
 -static void
 -Fax3PrintDir(TIFF* tif, FILE* fd, long flags)
 -{
 -	Fax3BaseState* sp = Fax3State(tif);
 -
 -	assert(sp != 0);
 -
 -	(void) flags;
 -	if (TIFFFieldSet(tif,FIELD_OPTIONS)) {
 -		const char* sep = " ";
 -		if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX4) {
 -			fprintf(fd, "  Group 4 Options:");
 -			if (sp->groupoptions & GROUP4OPT_UNCOMPRESSED)
 -				fprintf(fd, "%suncompressed data", sep);
 -		} else {
 -
 -			fprintf(fd, "  Group 3 Options:");
 -			if (sp->groupoptions & GROUP3OPT_2DENCODING)
 -				fprintf(fd, "%s2-d encoding", sep), sep = "+";
 -			if (sp->groupoptions & GROUP3OPT_FILLBITS)
 -				fprintf(fd, "%sEOL padding", sep), sep = "+";
 -			if (sp->groupoptions & GROUP3OPT_UNCOMPRESSED)
 -				fprintf(fd, "%suncompressed data", sep);
 -		}
 -		fprintf(fd, " (%lu = 0x%lx)\n",
 -                        (unsigned long) sp->groupoptions,
 -                        (unsigned long) sp->groupoptions);
 -	}
 -	if (TIFFFieldSet(tif,FIELD_CLEANFAXDATA)) {
 -		fprintf(fd, "  Fax Data:");
 -		switch (sp->cleanfaxdata) {
 -		case CLEANFAXDATA_CLEAN:
 -			fprintf(fd, " clean");
 -			break;
 -		case CLEANFAXDATA_REGENERATED:
 -			fprintf(fd, " receiver regenerated");
 -			break;
 -		case CLEANFAXDATA_UNCLEAN:
 -			fprintf(fd, " uncorrected errors");
 -			break;
 -		}
 -		fprintf(fd, " (%u = 0x%x)\n",
 -		    sp->cleanfaxdata, sp->cleanfaxdata);
 -	}
 -	if (TIFFFieldSet(tif,FIELD_BADFAXLINES))
 -		fprintf(fd, "  Bad Fax Lines: %lu\n",
 -                        (unsigned long) sp->badfaxlines);
 -	if (TIFFFieldSet(tif,FIELD_BADFAXRUN))
 -		fprintf(fd, "  Consecutive Bad Fax Lines: %lu\n",
 -		    (unsigned long) sp->badfaxrun);
 -	if (TIFFFieldSet(tif,FIELD_RECVPARAMS))
 -		fprintf(fd, "  Fax Receive Parameters: %08lx\n",
 -		   (unsigned long) sp->recvparams);
 -	if (TIFFFieldSet(tif,FIELD_SUBADDRESS))
 -		fprintf(fd, "  Fax SubAddress: %s\n", sp->subaddress);
 -	if (TIFFFieldSet(tif,FIELD_RECVTIME))
 -		fprintf(fd, "  Fax Receive Time: %lu secs\n",
 -		    (unsigned long) sp->recvtime);
 -	if (TIFFFieldSet(tif,FIELD_FAXDCS))
 -		fprintf(fd, "  Fax DCS: %s\n", sp->faxdcs);
 -}
 -
 -static int
 -InitCCITTFax3(TIFF* tif)
 -{
 -	Fax3BaseState* sp;
 -
 -	/*
 -	 * Merge codec-specific tag information.
 -	 */
 -	if (!_TIFFMergeFieldInfo(tif, faxFieldInfo, N(faxFieldInfo))) {
 -		TIFFErrorExt(tif->tif_clientdata, "InitCCITTFax3",
 -			"Merging common CCITT Fax codec-specific tags failed");
 -		return 0;
 -	}
 -
 -	/*
 -	 * Allocate state block so tag methods have storage to record values.
 -	 */
 -	tif->tif_data = (tidata_t)
 -		_TIFFmalloc(sizeof (Fax3CodecState));
 -
 -	if (tif->tif_data == NULL) {
 -		TIFFErrorExt(tif->tif_clientdata, "TIFFInitCCITTFax3",
 -		    "%s: No space for state block", tif->tif_name);
 -		return (0);
 -	}
 -
 -	sp = Fax3State(tif);
 -        sp->rw_mode = tif->tif_mode;
 -
 -	/*
 -	 * Override parent get/set field methods.
 -	 */
 -	sp->vgetparent = tif->tif_tagmethods.vgetfield;
 -	tif->tif_tagmethods.vgetfield = Fax3VGetField; /* hook for codec tags */
 -	sp->vsetparent = tif->tif_tagmethods.vsetfield;
 -	tif->tif_tagmethods.vsetfield = Fax3VSetField; /* hook for codec tags */
 -	sp->printdir = tif->tif_tagmethods.printdir;
 -	tif->tif_tagmethods.printdir = Fax3PrintDir;   /* hook for codec tags */
 -	sp->groupoptions = 0;	
 -	sp->recvparams = 0;
 -	sp->subaddress = NULL;
 -	sp->faxdcs = NULL;
 -
 -	if (sp->rw_mode == O_RDONLY) /* FIXME: improve for in place update */
 -		tif->tif_flags |= TIFF_NOBITREV; /* decoder does bit reversal */
 -	DecoderState(tif)->runs = NULL;
 -	TIFFSetField(tif, TIFFTAG_FAXFILLFUNC, _TIFFFax3fillruns);
 -	EncoderState(tif)->refline = NULL;
 -
 -	/*
 -	 * Install codec methods.
 -	 */
 -	tif->tif_setupdecode = Fax3SetupState;
 -	tif->tif_predecode = Fax3PreDecode;
 -	tif->tif_decoderow = Fax3Decode1D;
 -	tif->tif_decodestrip = Fax3Decode1D;
 -	tif->tif_decodetile = Fax3Decode1D;
 -	tif->tif_setupencode = Fax3SetupState;
 -	tif->tif_preencode = Fax3PreEncode;
 -	tif->tif_postencode = Fax3PostEncode;
 -	tif->tif_encoderow = Fax3Encode;
 -	tif->tif_encodestrip = Fax3Encode;
 -	tif->tif_encodetile = Fax3Encode;
 -	tif->tif_close = Fax3Close;
 -	tif->tif_cleanup = Fax3Cleanup;
 -
 -	return (1);
 -}
 -
 -int
 -TIFFInitCCITTFax3(TIFF* tif, int scheme)
 -{
 -	(void) scheme;
 -	if (InitCCITTFax3(tif)) {
 -		/*
 -		 * Merge codec-specific tag information.
 -		 */
 -		if (!_TIFFMergeFieldInfo(tif, fax3FieldInfo, N(fax3FieldInfo))) {
 -			TIFFErrorExt(tif->tif_clientdata, "TIFFInitCCITTFax3",
 -			"Merging CCITT Fax 3 codec-specific tags failed");
 -			return 0;
 -		}
 -
 -		/*
 -		 * The default format is Class/F-style w/o RTC.
 -		 */
 -		return TIFFSetField(tif, TIFFTAG_FAXMODE, FAXMODE_CLASSF);
 -	} else
 -		return 01;
 -}
 -
 -/*
 - * CCITT Group 4 (T.6) Facsimile-compatible
 - * Compression Scheme Support.
 - */
 -
 -#define	SWAP(t,a,b)	{ t x; x = (a); (a) = (b); (b) = x; }
 -/*
 - * Decode the requested amount of G4-encoded data.
 - */
 -static int
 -Fax4Decode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s)
 -{
 -	DECLARE_STATE_2D(tif, sp, "Fax4Decode");
 -
 -	(void) s;
 -	CACHE_STATE(tif, sp);
 -	while ((long)occ > 0) {
 -		a0 = 0;
 -		RunLength = 0;
 -		pa = thisrun = sp->curruns;
 -		pb = sp->refruns;
 -		b1 = *pb++;
 -#ifdef FAX3_DEBUG
 -		printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail);
 -		printf("-------------------- %d\n", tif->tif_row);
 -		fflush(stdout);
 -#endif
 -		EXPAND2D(EOFG4);
 -                if (EOLcnt)
 -                    goto EOFG4;
 -		(*sp->fill)(buf, thisrun, pa, lastx);
 -		SETVALUE(0);		/* imaginary change for reference */
 -		SWAP(uint32*, sp->curruns, sp->refruns);
 -		buf += sp->b.rowbytes;
 -		occ -= sp->b.rowbytes;
 -		sp->line++;
 -		continue;
 -	EOFG4:
 -                NeedBits16( 13, BADG4 );
 -        BADG4:
 -#ifdef FAX3_DEBUG
 -                if ( GetBits(13) != 0x1001 )
 -                    fputs( "Bad EOFB\n", stderr );
 -#endif                
 -                ClrBits( 13 );
 -		(*sp->fill)(buf, thisrun, pa, lastx);
 -		UNCACHE_STATE(tif, sp);
 -		return ( sp->line ? 1 : -1);	/* don't error on badly-terminated strips */
 -	}
 -	UNCACHE_STATE(tif, sp);
 -	return (1);
 -}
 -#undef	SWAP
 -
 -/*
 - * Encode the requested amount of data.
 - */
 -static int
 -Fax4Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	Fax3CodecState *sp = EncoderState(tif);
 -
 -	(void) s;
 -	while ((long)cc > 0) {
 -		if (!Fax3Encode2DRow(tif, bp, sp->refline, sp->b.rowpixels))
 -			return (0);
 -		_TIFFmemcpy(sp->refline, bp, sp->b.rowbytes);
 -		bp += sp->b.rowbytes;
 -		cc -= sp->b.rowbytes;
 -	}
 -	return (1);
 -}
 -
 -static int
 -Fax4PostEncode(TIFF* tif)
 -{
 -	Fax3CodecState *sp = EncoderState(tif);
 -
 -	/* terminate strip w/ EOFB */
 -	Fax3PutBits(tif, EOL, 12);
 -	Fax3PutBits(tif, EOL, 12);
 -	if (sp->bit != 8)
 -		Fax3FlushBits(tif, sp);
 -	return (1);
 -}
 -
 -int
 -TIFFInitCCITTFax4(TIFF* tif, int scheme)
 -{
 -	(void) scheme;
 -	if (InitCCITTFax3(tif)) {		/* reuse G3 support */
 -		/*
 -		 * Merge codec-specific tag information.
 -		 */
 -		if (!_TIFFMergeFieldInfo(tif, fax4FieldInfo, N(fax4FieldInfo))) {
 -			TIFFErrorExt(tif->tif_clientdata, "TIFFInitCCITTFax4",
 -			"Merging CCITT Fax 4 codec-specific tags failed");
 -			return 0;
 -		}
 -
 -		tif->tif_decoderow = Fax4Decode;
 -		tif->tif_decodestrip = Fax4Decode;
 -		tif->tif_decodetile = Fax4Decode;
 -		tif->tif_encoderow = Fax4Encode;
 -		tif->tif_encodestrip = Fax4Encode;
 -		tif->tif_encodetile = Fax4Encode;
 -		tif->tif_postencode = Fax4PostEncode;
 -		/*
 -		 * Suppress RTC at the end of each strip.
 -		 */
 -		return TIFFSetField(tif, TIFFTAG_FAXMODE, FAXMODE_NORTC);
 -	} else
 -		return (0);
 -}
 -
 -/*
 - * CCITT Group 3 1-D Modified Huffman RLE Compression Support.
 - * (Compression algorithms 2 and 32771)
 - */
 -
 -/*
 - * Decode the requested amount of RLE-encoded data.
 - */
 -static int
 -Fax3DecodeRLE(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s)
 -{
 -	DECLARE_STATE(tif, sp, "Fax3DecodeRLE");
 -	int mode = sp->b.mode;
 -
 -	(void) s;
 -	CACHE_STATE(tif, sp);
 -	thisrun = sp->curruns;
 -	while ((long)occ > 0) {
 -		a0 = 0;
 -		RunLength = 0;
 -		pa = thisrun;
 -#ifdef FAX3_DEBUG
 -		printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail);
 -		printf("-------------------- %d\n", tif->tif_row);
 -		fflush(stdout);
 -#endif
 -		EXPAND1D(EOFRLE);
 -		(*sp->fill)(buf, thisrun, pa, lastx);
 -		/*
 -		 * Cleanup at the end of the row.
 -		 */
 -		if (mode & FAXMODE_BYTEALIGN) {
 -			int n = BitsAvail - (BitsAvail &~ 7);
 -			ClrBits(n);
 -		} else if (mode & FAXMODE_WORDALIGN) {
 -			int n = BitsAvail - (BitsAvail &~ 15);
 -			ClrBits(n);
 -			if (BitsAvail == 0 && !isAligned(cp, uint16))
 -			    cp++;
 -		}
 -		buf += sp->b.rowbytes;
 -		occ -= sp->b.rowbytes;
 -		sp->line++;
 -		continue;
 -	EOFRLE:				/* premature EOF */
 -		(*sp->fill)(buf, thisrun, pa, lastx);
 -		UNCACHE_STATE(tif, sp);
 -		return (-1);
 -	}
 -	UNCACHE_STATE(tif, sp);
 -	return (1);
 -}
 -
 -int
 -TIFFInitCCITTRLE(TIFF* tif, int scheme)
 -{
 -	(void) scheme;
 -	if (InitCCITTFax3(tif)) {		/* reuse G3 support */
 -		tif->tif_decoderow = Fax3DecodeRLE;
 -		tif->tif_decodestrip = Fax3DecodeRLE;
 -		tif->tif_decodetile = Fax3DecodeRLE;
 -		/*
 -		 * Suppress RTC+EOLs when encoding and byte-align data.
 -		 */
 -		return TIFFSetField(tif, TIFFTAG_FAXMODE,
 -		    FAXMODE_NORTC|FAXMODE_NOEOL|FAXMODE_BYTEALIGN);
 -	} else
 -		return (0);
 -}
 -
 -int
 -TIFFInitCCITTRLEW(TIFF* tif, int scheme)
 -{
 -	(void) scheme;
 -	if (InitCCITTFax3(tif)) {		/* reuse G3 support */
 -		tif->tif_decoderow = Fax3DecodeRLE;
 -		tif->tif_decodestrip = Fax3DecodeRLE;
 -		tif->tif_decodetile = Fax3DecodeRLE;
 -		/*
 -		 * Suppress RTC+EOLs when encoding and word-align data.
 -		 */
 -		return TIFFSetField(tif, TIFFTAG_FAXMODE,
 -		    FAXMODE_NORTC|FAXMODE_NOEOL|FAXMODE_WORDALIGN);
 -	} else
 -		return (0);
 -}
 -#endif /* CCITT_SUPPORT */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_fax3.h b/plugins/FreeImage/Source/LibTIFF/tif_fax3.h deleted file mode 100644 index ec2811f660..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_fax3.h +++ /dev/null @@ -1,538 +0,0 @@ -/* $Id: tif_fax3.h,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1990-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#ifndef _FAX3_
 -#define	_FAX3_
 -/*
 - * TIFF Library.
 - *
 - * CCITT Group 3 (T.4) and Group 4 (T.6) Decompression Support.
 - *
 - * Decoder support is derived, with permission, from the code
 - * in Frank Cringle's viewfax program;
 - *      Copyright (C) 1990, 1995  Frank D. Cringle.
 - */
 -#include "tiff.h"
 -
 -/*
 - * To override the default routine used to image decoded
 - * spans one can use the pseduo tag TIFFTAG_FAXFILLFUNC.
 - * The routine must have the type signature given below;
 - * for example:
 - *
 - * fillruns(unsigned char* buf, uint32* runs, uint32* erun, uint32 lastx)
 - *
 - * where buf is place to set the bits, runs is the array of b&w run
 - * lengths (white then black), erun is the last run in the array, and
 - * lastx is the width of the row in pixels.  Fill routines can assume
 - * the run array has room for at least lastx runs and can overwrite
 - * data in the run array as needed (e.g. to append zero runs to bring
 - * the count up to a nice multiple).
 - */
 -typedef	void (*TIFFFaxFillFunc)(unsigned char*, uint32*, uint32*, uint32);
 -
 -/*
 - * The default run filler; made external for other decoders.
 - */
 -#if defined(__cplusplus)
 -extern "C" {
 -#endif
 -extern	void _TIFFFax3fillruns(unsigned char*, uint32*, uint32*, uint32);
 -#if defined(__cplusplus)
 -}
 -#endif
 -
 -
 -/* finite state machine codes */
 -#define S_Null		0
 -#define S_Pass		1
 -#define S_Horiz		2
 -#define S_V0		3
 -#define S_VR		4
 -#define S_VL		5
 -#define S_Ext		6
 -#define S_TermW		7
 -#define S_TermB		8
 -#define S_MakeUpW	9
 -#define S_MakeUpB	10
 -#define S_MakeUp	11
 -#define S_EOL		12
 -
 -typedef struct {		/* state table entry */
 -	unsigned char State;	/* see above */
 -	unsigned char Width;	/* width of code in bits */
 -	uint32	Param;		/* unsigned 32-bit run length in bits */
 -} TIFFFaxTabEnt;
 -
 -extern	const TIFFFaxTabEnt TIFFFaxMainTable[];
 -extern	const TIFFFaxTabEnt TIFFFaxWhiteTable[];
 -extern	const TIFFFaxTabEnt TIFFFaxBlackTable[];
 -
 -/*
 - * The following macros define the majority of the G3/G4 decoder
 - * algorithm using the state tables defined elsewhere.  To build
 - * a decoder you need some setup code and some glue code. Note
 - * that you may also need/want to change the way the NeedBits*
 - * macros get input data if, for example, you know the data to be
 - * decoded is properly aligned and oriented (doing so before running
 - * the decoder can be a big performance win).
 - *
 - * Consult the decoder in the TIFF library for an idea of what you
 - * need to define and setup to make use of these definitions.
 - *
 - * NB: to enable a debugging version of these macros define FAX3_DEBUG
 - *     before including this file.  Trace output goes to stdout.
 - */
 -
 -#ifndef EndOfData
 -#define EndOfData()	(cp >= ep)
 -#endif
 -/*
 - * Need <=8 or <=16 bits of input data.  Unlike viewfax we
 - * cannot use/assume a word-aligned, properly bit swizzled
 - * input data set because data may come from an arbitrarily
 - * aligned, read-only source such as a memory-mapped file.
 - * Note also that the viewfax decoder does not check for
 - * running off the end of the input data buffer.  This is
 - * possible for G3-encoded data because it prescans the input
 - * data to count EOL markers, but can cause problems for G4
 - * data.  In any event, we don't prescan and must watch for
 - * running out of data since we can't permit the library to
 - * scan past the end of the input data buffer.
 - *
 - * Finally, note that we must handle remaindered data at the end
 - * of a strip specially.  The coder asks for a fixed number of
 - * bits when scanning for the next code.  This may be more bits
 - * than are actually present in the data stream.  If we appear
 - * to run out of data but still have some number of valid bits
 - * remaining then we makeup the requested amount with zeros and
 - * return successfully.  If the returned data is incorrect then
 - * we should be called again and get a premature EOF error;
 - * otherwise we should get the right answer.
 - */
 -#ifndef NeedBits8
 -#define NeedBits8(n,eoflab) do {					\
 -    if (BitsAvail < (n)) {						\
 -	if (EndOfData()) {						\
 -	    if (BitsAvail == 0)			/* no valid bits */	\
 -		goto eoflab;						\
 -	    BitsAvail = (n);			/* pad with zeros */	\
 -	} else {							\
 -	    BitAcc |= ((uint32) bitmap[*cp++])<<BitsAvail;		\
 -	    BitsAvail += 8;						\
 -	}								\
 -    }									\
 -} while (0)
 -#endif
 -#ifndef NeedBits16
 -#define NeedBits16(n,eoflab) do {					\
 -    if (BitsAvail < (n)) {						\
 -	if (EndOfData()) {						\
 -	    if (BitsAvail == 0)			/* no valid bits */	\
 -		goto eoflab;						\
 -	    BitsAvail = (n);			/* pad with zeros */	\
 -	} else {							\
 -	    BitAcc |= ((uint32) bitmap[*cp++])<<BitsAvail;		\
 -	    if ((BitsAvail += 8) < (n)) {				\
 -		if (EndOfData()) {					\
 -		    /* NB: we know BitsAvail is non-zero here */	\
 -		    BitsAvail = (n);		/* pad with zeros */	\
 -		} else {						\
 -		    BitAcc |= ((uint32) bitmap[*cp++])<<BitsAvail;	\
 -		    BitsAvail += 8;					\
 -		}							\
 -	    }								\
 -	}								\
 -    }									\
 -} while (0)
 -#endif
 -#define GetBits(n)	(BitAcc & ((1<<(n))-1))
 -#define ClrBits(n) do {							\
 -    BitsAvail -= (n);							\
 -    BitAcc >>= (n);							\
 -} while (0)
 -
 -#ifdef FAX3_DEBUG
 -static const char* StateNames[] = {
 -    "Null   ",
 -    "Pass   ",
 -    "Horiz  ",
 -    "V0     ",
 -    "VR     ",
 -    "VL     ",
 -    "Ext    ",
 -    "TermW  ",
 -    "TermB  ",
 -    "MakeUpW",
 -    "MakeUpB",
 -    "MakeUp ",
 -    "EOL    ",
 -};
 -#define DEBUG_SHOW putchar(BitAcc & (1 << t) ? '1' : '0')
 -#define LOOKUP8(wid,tab,eoflab) do {					\
 -    int t;								\
 -    NeedBits8(wid,eoflab);						\
 -    TabEnt = tab + GetBits(wid);					\
 -    printf("%08lX/%d: %s%5d\t", (long) BitAcc, BitsAvail,		\
 -	   StateNames[TabEnt->State], TabEnt->Param);			\
 -    for (t = 0; t < TabEnt->Width; t++)					\
 -	DEBUG_SHOW;							\
 -    putchar('\n');							\
 -    fflush(stdout);							\
 -    ClrBits(TabEnt->Width);						\
 -} while (0)
 -#define LOOKUP16(wid,tab,eoflab) do {					\
 -    int t;								\
 -    NeedBits16(wid,eoflab);						\
 -    TabEnt = tab + GetBits(wid);					\
 -    printf("%08lX/%d: %s%5d\t", (long) BitAcc, BitsAvail,		\
 -	   StateNames[TabEnt->State], TabEnt->Param);			\
 -    for (t = 0; t < TabEnt->Width; t++)					\
 -	DEBUG_SHOW;							\
 -    putchar('\n');							\
 -    fflush(stdout);							\
 -    ClrBits(TabEnt->Width);						\
 -} while (0)
 -
 -#define SETVALUE(x) do {							\
 -    *pa++ = RunLength + (x);						\
 -    printf("SETVALUE: %d\t%d\n", RunLength + (x), a0);			\
 -    a0 += x;								\
 -    RunLength = 0;							\
 -} while (0)
 -#else
 -#define LOOKUP8(wid,tab,eoflab) do {					\
 -    NeedBits8(wid,eoflab);						\
 -    TabEnt = tab + GetBits(wid);					\
 -    ClrBits(TabEnt->Width);						\
 -} while (0)
 -#define LOOKUP16(wid,tab,eoflab) do {					\
 -    NeedBits16(wid,eoflab);						\
 -    TabEnt = tab + GetBits(wid);					\
 -    ClrBits(TabEnt->Width);						\
 -} while (0)
 -
 -/*
 - * Append a run to the run length array for the
 - * current row and reset decoding state.
 - */
 -#define SETVALUE(x) do {							\
 -    *pa++ = RunLength + (x);						\
 -    a0 += (x);								\
 -    RunLength = 0;							\
 -} while (0)
 -#endif
 -
 -/*
 - * Synchronize input decoding at the start of each
 - * row by scanning for an EOL (if appropriate) and
 - * skipping any trash data that might be present
 - * after a decoding error.  Note that the decoding
 - * done elsewhere that recognizes an EOL only consumes
 - * 11 consecutive zero bits.  This means that if EOLcnt
 - * is non-zero then we still need to scan for the final flag
 - * bit that is part of the EOL code.
 - */
 -#define	SYNC_EOL(eoflab) do {						\
 -    if (EOLcnt == 0) {							\
 -	for (;;) {							\
 -	    NeedBits16(11,eoflab);					\
 -	    if (GetBits(11) == 0)					\
 -		break;							\
 -	    ClrBits(1);							\
 -	}								\
 -    }									\
 -    for (;;) {								\
 -	NeedBits8(8,eoflab);						\
 -	if (GetBits(8))							\
 -	    break;							\
 -	ClrBits(8);							\
 -    }									\
 -    while (GetBits(1) == 0)						\
 -	ClrBits(1);							\
 -    ClrBits(1);				/* EOL bit */			\
 -    EOLcnt = 0;				/* reset EOL counter/flag */	\
 -} while (0)
 -
 -/*
 - * Cleanup the array of runs after decoding a row.
 - * We adjust final runs to insure the user buffer is not
 - * overwritten and/or undecoded area is white filled.
 - */
 -#define	CLEANUP_RUNS() do {						\
 -    if (RunLength)							\
 -	SETVALUE(0);							\
 -    if (a0 != lastx) {							\
 -	badlength(a0, lastx);						\
 -	while (a0 > lastx && pa > thisrun)				\
 -	    a0 -= *--pa;						\
 -	if (a0 < lastx) {						\
 -	    if (a0 < 0)							\
 -		a0 = 0;							\
 -	    if ((pa-thisrun)&1)						\
 -		SETVALUE(0);						\
 -	    SETVALUE(lastx - a0);						\
 -	} else if (a0 > lastx) {					\
 -	    SETVALUE(lastx);						\
 -	    SETVALUE(0);							\
 -	}								\
 -    }									\
 -} while (0)
 -
 -/*
 - * Decode a line of 1D-encoded data.
 - *
 - * The line expanders are written as macros so that they can be reused
 - * but still have direct access to the local variables of the "calling"
 - * function.
 - *
 - * Note that unlike the original version we have to explicitly test for
 - * a0 >= lastx after each black/white run is decoded.  This is because
 - * the original code depended on the input data being zero-padded to
 - * insure the decoder recognized an EOL before running out of data.
 - */
 -#define EXPAND1D(eoflab) do {						\
 -    for (;;) {								\
 -	for (;;) {							\
 -	    LOOKUP16(12, TIFFFaxWhiteTable, eof1d);			\
 -	    switch (TabEnt->State) {					\
 -	    case S_EOL:							\
 -		EOLcnt = 1;						\
 -		goto done1d;						\
 -	    case S_TermW:						\
 -		SETVALUE(TabEnt->Param);					\
 -		goto doneWhite1d;					\
 -	    case S_MakeUpW:						\
 -	    case S_MakeUp:						\
 -		a0 += TabEnt->Param;					\
 -		RunLength += TabEnt->Param;				\
 -		break;							\
 -	    default:							\
 -		unexpected("WhiteTable", a0);				\
 -		goto done1d;						\
 -	    }								\
 -	}								\
 -    doneWhite1d:							\
 -	if (a0 >= lastx)						\
 -	    goto done1d;						\
 -	for (;;) {							\
 -	    LOOKUP16(13, TIFFFaxBlackTable, eof1d);			\
 -	    switch (TabEnt->State) {					\
 -	    case S_EOL:							\
 -		EOLcnt = 1;						\
 -		goto done1d;						\
 -	    case S_TermB:						\
 -		SETVALUE(TabEnt->Param);					\
 -		goto doneBlack1d;					\
 -	    case S_MakeUpB:						\
 -	    case S_MakeUp:						\
 -		a0 += TabEnt->Param;					\
 -		RunLength += TabEnt->Param;				\
 -		break;							\
 -	    default:							\
 -		unexpected("BlackTable", a0);				\
 -		goto done1d;						\
 -	    }								\
 -	}								\
 -    doneBlack1d:							\
 -	if (a0 >= lastx)						\
 -	    goto done1d;						\
 -        if ( *(pa-1) == 0 && *(pa-2) == 0 )				\
 -            pa -= 2;                                                    \
 -    }									\
 -eof1d:									\
 -    prematureEOF(a0);							\
 -    CLEANUP_RUNS();							\
 -    goto eoflab;							\
 -done1d:									\
 -    CLEANUP_RUNS();							\
 -} while (0)
 -
 -/*
 - * Update the value of b1 using the array
 - * of runs for the reference line.
 - */
 -#define CHECK_b1 do {							\
 -    if (pa != thisrun) while (b1 <= a0 && b1 < lastx) {			\
 -	b1 += pb[0] + pb[1];						\
 -	pb += 2;							\
 -    }									\
 -} while (0)
 -
 -/*
 - * Expand a row of 2D-encoded data.
 - */
 -#define EXPAND2D(eoflab) do {						\
 -    while (a0 < lastx) {						\
 -	LOOKUP8(7, TIFFFaxMainTable, eof2d);				\
 -	switch (TabEnt->State) {					\
 -	case S_Pass:							\
 -	    CHECK_b1;							\
 -	    b1 += *pb++;						\
 -	    RunLength += b1 - a0;					\
 -	    a0 = b1;							\
 -	    b1 += *pb++;						\
 -	    break;							\
 -	case S_Horiz:							\
 -	    if ((pa-thisrun)&1) {					\
 -		for (;;) {	/* black first */			\
 -		    LOOKUP16(13, TIFFFaxBlackTable, eof2d);		\
 -		    switch (TabEnt->State) {				\
 -		    case S_TermB:					\
 -			SETVALUE(TabEnt->Param);				\
 -			goto doneWhite2da;				\
 -		    case S_MakeUpB:					\
 -		    case S_MakeUp:					\
 -			a0 += TabEnt->Param;				\
 -			RunLength += TabEnt->Param;			\
 -			break;						\
 -		    default:						\
 -			goto badBlack2d;				\
 -		    }							\
 -		}							\
 -	    doneWhite2da:;						\
 -		for (;;) {	/* then white */			\
 -		    LOOKUP16(12, TIFFFaxWhiteTable, eof2d);		\
 -		    switch (TabEnt->State) {				\
 -		    case S_TermW:					\
 -			SETVALUE(TabEnt->Param);				\
 -			goto doneBlack2da;				\
 -		    case S_MakeUpW:					\
 -		    case S_MakeUp:					\
 -			a0 += TabEnt->Param;				\
 -			RunLength += TabEnt->Param;			\
 -			break;						\
 -		    default:						\
 -			goto badWhite2d;				\
 -		    }							\
 -		}							\
 -	    doneBlack2da:;						\
 -	    } else {							\
 -		for (;;) {	/* white first */			\
 -		    LOOKUP16(12, TIFFFaxWhiteTable, eof2d);		\
 -		    switch (TabEnt->State) {				\
 -		    case S_TermW:					\
 -			SETVALUE(TabEnt->Param);				\
 -			goto doneWhite2db;				\
 -		    case S_MakeUpW:					\
 -		    case S_MakeUp:					\
 -			a0 += TabEnt->Param;				\
 -			RunLength += TabEnt->Param;			\
 -			break;						\
 -		    default:						\
 -			goto badWhite2d;				\
 -		    }							\
 -		}							\
 -	    doneWhite2db:;						\
 -		for (;;) {	/* then black */			\
 -		    LOOKUP16(13, TIFFFaxBlackTable, eof2d);		\
 -		    switch (TabEnt->State) {				\
 -		    case S_TermB:					\
 -			SETVALUE(TabEnt->Param);				\
 -			goto doneBlack2db;				\
 -		    case S_MakeUpB:					\
 -		    case S_MakeUp:					\
 -			a0 += TabEnt->Param;				\
 -			RunLength += TabEnt->Param;			\
 -			break;						\
 -		    default:						\
 -			goto badBlack2d;				\
 -		    }							\
 -		}							\
 -	    doneBlack2db:;						\
 -	    }								\
 -	    CHECK_b1;							\
 -	    break;							\
 -	case S_V0:							\
 -	    CHECK_b1;							\
 -	    SETVALUE(b1 - a0);						\
 -	    b1 += *pb++;						\
 -	    break;							\
 -	case S_VR:							\
 -	    CHECK_b1;							\
 -	    SETVALUE(b1 - a0 + TabEnt->Param);				\
 -	    b1 += *pb++;						\
 -	    break;							\
 -	case S_VL:							\
 -	    CHECK_b1;							\
 -	    if (b1 <= (int) (a0 + TabEnt->Param)) {			\
 -		if (b1 < (int) (a0 + TabEnt->Param) || pa != thisrun) {	\
 -		    unexpected("VL", a0);				\
 -		    goto eol2d;						\
 -		}							\
 -	    }								\
 -	    SETVALUE(b1 - a0 - TabEnt->Param);				\
 -	    b1 -= *--pb;						\
 -	    break;							\
 -	case S_Ext:							\
 -	    *pa++ = lastx - a0;						\
 -	    extension(a0);						\
 -	    goto eol2d;							\
 -	case S_EOL:							\
 -	    *pa++ = lastx - a0;						\
 -	    NeedBits8(4,eof2d);						\
 -	    if (GetBits(4))						\
 -		unexpected("EOL", a0);					\
 -            ClrBits(4);                                                 \
 -	    EOLcnt = 1;							\
 -	    goto eol2d;							\
 -	default:							\
 -	badMain2d:							\
 -	    unexpected("MainTable", a0);				\
 -	    goto eol2d;							\
 -	badBlack2d:							\
 -	    unexpected("BlackTable", a0);				\
 -	    goto eol2d;							\
 -	badWhite2d:							\
 -	    unexpected("WhiteTable", a0);				\
 -	    goto eol2d;							\
 -	eof2d:								\
 -	    prematureEOF(a0);						\
 -	    CLEANUP_RUNS();						\
 -	    goto eoflab;						\
 -	}								\
 -    }									\
 -    if (RunLength) {							\
 -	if (RunLength + a0 < lastx) {					\
 -	    /* expect a final V0 */					\
 -	    NeedBits8(1,eof2d);						\
 -	    if (!GetBits(1))						\
 -		goto badMain2d;						\
 -	    ClrBits(1);							\
 -	}								\
 -	SETVALUE(0);							\
 -    }									\
 -eol2d:									\
 -    CLEANUP_RUNS();							\
 -} while (0)
 -#endif /* _FAX3_ */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_fax3sm.c b/plugins/FreeImage/Source/LibTIFF/tif_fax3sm.c deleted file mode 100644 index 1e2fe42316..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_fax3sm.c +++ /dev/null @@ -1,1260 +0,0 @@ -/* WARNING, this file was automatically generated by the
 -    mkg3states program */
 -#include "tiff.h"
 -#include "tif_fax3.h"
 - const TIFFFaxTabEnt TIFFFaxMainTable[128] = {
 -{12,7,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{1,4,0},{3,1,0},
 -{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{5,6,2},{3,1,0},{5,3,1},{3,1,0},
 -{2,3,0},{3,1,0},{4,3,1},{3,1,0},{1,4,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},
 -{4,3,1},{3,1,0},{5,7,3},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},
 -{1,4,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{4,6,2},{3,1,0},
 -{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{1,4,0},{3,1,0},{5,3,1},{3,1,0},
 -{2,3,0},{3,1,0},{4,3,1},{3,1,0},{6,7,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},
 -{4,3,1},{3,1,0},{1,4,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},
 -{5,6,2},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{1,4,0},{3,1,0},
 -{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{4,7,3},{3,1,0},{5,3,1},{3,1,0},
 -{2,3,0},{3,1,0},{4,3,1},{3,1,0},{1,4,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},
 -{4,3,1},{3,1,0},{4,6,2},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},
 -{1,4,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0}
 -};
 - const TIFFFaxTabEnt TIFFFaxWhiteTable[4096] = {
 -{12,11,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 -{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 -{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},
 -{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,960},{7,4,6},{7,8,31},{7,5,8},
 -{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 -{7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,11,1792},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 -{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},
 -{9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},
 -{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1600},{7,4,5},
 -{7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},
 -{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 -{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},
 -{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},
 -{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},
 -{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1536},{7,4,5},{7,8,43},{7,6,17},
 -{9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},
 -{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},
 -{7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,768},{7,4,6},
 -{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,11,1856},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,896},{7,4,6},{7,7,19},{7,5,8},
 -{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},
 -{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},{7,8,44},{7,6,17},{9,9,1408},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},
 -{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},
 -{9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},
 -{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 -{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 -{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},
 -{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,960},{7,4,6},
 -{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 -{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},
 -{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 -{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{11,12,2112},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 -{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 -{7,8,40},{7,6,16},{9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},
 -{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{9,9,1600},{7,4,5},{7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},{7,8,32},{7,5,8},
 -{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 -{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 -{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},
 -{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},
 -{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1536},{7,4,5},
 -{7,8,43},{7,6,17},{9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},
 -{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 -{9,9,768},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,12,2368},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,896},{7,4,6},
 -{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},
 -{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},
 -{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},{7,8,44},{7,6,17},
 -{9,9,1408},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},
 -{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},
 -{7,8,42},{7,6,16},{9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},
 -{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},
 -{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},
 -{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},
 -{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},
 -{9,9,960},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},
 -{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 -{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{11,12,1984},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 -{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},
 -{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{9,9,1600},{7,4,5},{7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},
 -{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 -{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},
 -{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 -{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 -{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 -{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},
 -{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{9,9,1536},{7,4,5},{7,8,43},{7,6,17},{9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},
 -{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 -{7,7,26},{7,5,9},{9,9,768},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,11,1920},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 -{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},
 -{9,9,896},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},
 -{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},
 -{7,8,44},{7,6,17},{9,9,1408},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},
 -{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 -{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},
 -{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},
 -{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},
 -{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1472},{7,4,5},{7,8,43},{7,6,17},
 -{9,9,1216},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},
 -{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},
 -{7,8,41},{7,6,16},{9,9,960},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,704},{7,4,6},
 -{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,12,2240},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,832},{7,4,6},{7,7,19},{7,5,8},
 -{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},
 -{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1600},{7,4,5},{7,8,44},{7,6,17},{9,9,1344},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},
 -{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},
 -{9,9,1088},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},
 -{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 -{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 -{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},
 -{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{9,9,1536},{7,4,5},{7,8,43},{7,6,17},{9,9,1280},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,1024},{7,4,6},
 -{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 -{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,768},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},
 -{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 -{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{11,12,2496},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 -{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 -{7,8,40},{7,6,16},{9,9,896},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},
 -{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{9,9,1728},{7,4,5},{7,8,44},{7,6,17},{9,9,1408},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1152},{7,4,6},{7,8,32},{7,5,8},
 -{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 -{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{12,11,0},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 -{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},
 -{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},
 -{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1472},{7,4,5},
 -{7,8,43},{7,6,17},{9,9,1216},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},
 -{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,960},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 -{9,9,704},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,11,1792},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,832},{7,4,6},
 -{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},
 -{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},
 -{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1600},{7,4,5},{7,8,44},{7,6,17},
 -{9,9,1344},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},
 -{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},
 -{7,8,42},{7,6,16},{9,9,1088},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},
 -{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},
 -{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},
 -{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1536},{7,4,5},{7,8,43},{7,6,17},{9,9,1280},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},
 -{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},
 -{9,9,1024},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,768},{7,4,6},{7,8,37},{9,5,128},
 -{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 -{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{11,11,1856},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 -{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,896},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},
 -{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{9,9,1728},{7,4,5},{7,8,44},{7,6,17},{9,9,1408},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1152},{7,4,6},
 -{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 -{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},
 -{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 -{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 -{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 -{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},
 -{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,960},{7,4,6},{7,8,31},{7,5,8},
 -{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 -{7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,12,2176},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 -{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},
 -{9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},
 -{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1600},{7,4,5},
 -{7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},
 -{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 -{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},
 -{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},
 -{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},
 -{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1536},{7,4,5},{7,8,43},{7,6,17},
 -{9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},
 -{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},
 -{7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,768},{7,4,6},
 -{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,12,2432},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,896},{7,4,6},{7,7,19},{7,5,8},
 -{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},
 -{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},{7,8,44},{7,6,17},{9,9,1408},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},
 -{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},
 -{9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},
 -{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 -{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 -{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},
 -{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,960},{7,4,6},
 -{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 -{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},
 -{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 -{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{11,12,2048},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 -{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 -{7,8,40},{7,6,16},{9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},
 -{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{9,9,1600},{7,4,5},{7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},{7,8,32},{7,5,8},
 -{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 -{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 -{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},
 -{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},
 -{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1536},{7,4,5},
 -{7,8,43},{7,6,17},{9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},
 -{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 -{9,9,768},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,11,1920},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,896},{7,4,6},
 -{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},
 -{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},
 -{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},{7,8,44},{7,6,17},
 -{9,9,1408},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},
 -{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},
 -{7,8,42},{7,6,16},{9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},
 -{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},
 -{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},
 -{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},
 -{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},
 -{9,9,960},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},
 -{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 -{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{11,12,2304},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 -{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},
 -{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{9,9,1600},{7,4,5},{7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},
 -{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},
 -{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 -{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},
 -{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 -{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 -{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 -{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},
 -{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 -{9,9,1536},{7,4,5},{7,8,43},{7,6,17},{9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 -{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},
 -{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 -{7,7,26},{7,5,9},{9,9,768},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},
 -{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 -{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,12,2560},{7,4,3},
 -{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 -{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},
 -{9,9,896},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 -{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},
 -{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},
 -{7,8,44},{7,6,17},{9,9,1408},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 -{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 -{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},
 -{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},
 -{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 -{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},
 -{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 -{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7}
 -};
 - const TIFFFaxTabEnt TIFFFaxBlackTable[8192] = {
 -{12,11,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,18},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,17},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1792},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,11,23},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,20},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,11,25},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,128},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,56},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,30},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1856},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,57},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,11,21},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,54},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,52},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,48},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{11,12,2112},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,44},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,36},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,384},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,28},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,60},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,40},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2368},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,16},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{10,10,64},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,18},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,10,17},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{11,12,1984},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,50},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,34},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1664},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,26},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1408},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,32},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1920},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,61},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,42},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{10,13,1024},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{10,13,768},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,62},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2240},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,46},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,38},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,512},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,11,19},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,24},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,22},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{11,12,2496},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,10,16},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,0},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,10,64},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{12,11,0},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,10,18},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,17},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1792},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,23},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,20},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,11,25},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{10,12,192},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1280},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,31},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{11,11,1856},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,58},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,11,21},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,896},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,640},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,49},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2176},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,45},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,37},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{10,12,448},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,29},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{10,13,1536},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,41},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2432},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,16},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,10,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,10,64},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,18},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,17},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{11,12,2048},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,51},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,35},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,320},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,27},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,59},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,33},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1920},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,256},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,43},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{10,13,1152},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,55},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,63},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{11,12,2304},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,47},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,39},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,53},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,19},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,24},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,22},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2560},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,10,16},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,0},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{10,10,64},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{12,11,0},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,10,18},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,10,17},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1792},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,23},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,11,20},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,25},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{10,12,128},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,56},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,30},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{11,11,1856},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,57},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,21},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,54},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,52},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,48},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2112},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,44},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,36},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{10,12,384},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,28},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,60},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,40},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{11,12,2368},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,16},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,10,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,10,64},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,18},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,17},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,1984},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,50},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,34},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{10,13,1728},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,26},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{10,13,1472},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,32},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1920},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,61},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,42},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1088},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,832},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,62},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{11,12,2240},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,46},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,38},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,576},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,19},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,11,24},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,22},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2496},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,16},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{10,10,64},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{12,11,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,18},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,10,17},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{11,11,1792},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,23},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,11,20},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,25},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,192},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1344},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,31},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1856},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,58},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,21},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{10,13,960},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{10,13,704},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,49},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2176},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,45},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,37},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,448},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,29},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1600},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,41},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{11,12,2432},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,10,16},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,0},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,10,64},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,10,18},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,17},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2048},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,51},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,35},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{10,12,320},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,27},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,59},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,33},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{11,11,1920},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,256},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,43},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1216},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,55},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,63},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2304},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,12,47},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,39},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,12,53},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,19},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,11,24},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,11,22},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2560},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,16},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2},{8,10,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 -{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,10,64},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 -{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
 -{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
 -{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
 -{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
 -{8,3,4},{8,2,2}
 -};
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_flush.c b/plugins/FreeImage/Source/LibTIFF/tif_flush.c deleted file mode 100644 index af7fdd9b2a..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_flush.c +++ /dev/null @@ -1,74 +0,0 @@ -/* $Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_flush.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - */
 -#include "tiffiop.h"
 -
 -int
 -TIFFFlush(TIFF* tif)
 -{
 -
 -	if (tif->tif_mode != O_RDONLY) {
 -		if (!TIFFFlushData(tif))
 -			return (0);
 -		if ((tif->tif_flags & TIFF_DIRTYDIRECT) &&
 -		    !TIFFWriteDirectory(tif))
 -			return (0);
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Flush buffered data to the file.
 - *
 - * Frank Warmerdam'2000: I modified this to return 1 if TIFF_BEENWRITING
 - * is not set, so that TIFFFlush() will proceed to write out the directory.
 - * The documentation says returning 1 is an error indicator, but not having
 - * been writing isn't exactly a an error.  Hopefully this doesn't cause
 - * problems for other people. 
 - */
 -int
 -TIFFFlushData(TIFF* tif)
 -{
 -	if ((tif->tif_flags & TIFF_BEENWRITING) == 0)
 -		return (0);
 -	if (tif->tif_flags & TIFF_POSTENCODE) {
 -		tif->tif_flags &= ~TIFF_POSTENCODE;
 -		if (!(*tif->tif_postencode)(tif))
 -			return (0);
 -	}
 -	return (TIFFFlushData1(tif));
 -}
 -
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_getimage.c b/plugins/FreeImage/Source/LibTIFF/tif_getimage.c deleted file mode 100644 index 041e540cba..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_getimage.c +++ /dev/null @@ -1,2678 +0,0 @@ -/* $Id: tif_getimage.c,v 1.39 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1991-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library
 - *
 - * Read and return a packed RGBA image.
 - */
 -#include "tiffiop.h"
 -#include <stdio.h>
 -
 -static int gtTileContig(TIFFRGBAImage*, uint32*, uint32, uint32);
 -static int gtTileSeparate(TIFFRGBAImage*, uint32*, uint32, uint32);
 -static int gtStripContig(TIFFRGBAImage*, uint32*, uint32, uint32);
 -static int gtStripSeparate(TIFFRGBAImage*, uint32*, uint32, uint32);
 -static int PickContigCase(TIFFRGBAImage*);
 -static int PickSeparateCase(TIFFRGBAImage*);
 -static const char photoTag[] = "PhotometricInterpretation";
 -
 -/* 
 - * Helper constants used in Orientation tag handling
 - */
 -#define FLIP_VERTICALLY 0x01
 -#define FLIP_HORIZONTALLY 0x02
 -
 -/*
 - * Color conversion constants. We will define display types here.
 - */
 -
 -TIFFDisplay display_sRGB = {
 -	{			/* XYZ -> luminance matrix */
 -		{  3.2410F, -1.5374F, -0.4986F },
 -		{  -0.9692F, 1.8760F, 0.0416F },
 -		{  0.0556F, -0.2040F, 1.0570F }
 -	},	
 -	100.0F, 100.0F, 100.0F,	/* Light o/p for reference white */
 -	255, 255, 255,		/* Pixel values for ref. white */
 -	1.0F, 1.0F, 1.0F,	/* Residual light o/p for black pixel */
 -	2.4F, 2.4F, 2.4F,	/* Gamma values for the three guns */
 -};
 -
 -/*
 - * Check the image to see if TIFFReadRGBAImage can deal with it.
 - * 1/0 is returned according to whether or not the image can
 - * be handled.  If 0 is returned, emsg contains the reason
 - * why it is being rejected.
 - */
 -int
 -TIFFRGBAImageOK(TIFF* tif, char emsg[1024])
 -{
 -	TIFFDirectory* td = &tif->tif_dir;
 -	uint16 photometric;
 -	int colorchannels;
 -
 -	if (!tif->tif_decodestatus) {
 -		sprintf(emsg, "Sorry, requested compression method is not configured");
 -		return (0);
 -	}
 -	switch (td->td_bitspersample) {
 -		case 1:
 -		case 2:
 -		case 4:
 -		case 8:
 -		case 16:
 -			break;
 -		default:
 -			sprintf(emsg, "Sorry, can not handle images with %d-bit samples",
 -			    td->td_bitspersample);
 -			return (0);
 -	}
 -	colorchannels = td->td_samplesperpixel - td->td_extrasamples;
 -	if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometric)) {
 -		switch (colorchannels) {
 -			case 1:
 -				photometric = PHOTOMETRIC_MINISBLACK;
 -				break;
 -			case 3:
 -				photometric = PHOTOMETRIC_RGB;
 -				break;
 -			default:
 -				sprintf(emsg, "Missing needed %s tag", photoTag);
 -				return (0);
 -		}
 -	}
 -	switch (photometric) {
 -		case PHOTOMETRIC_MINISWHITE:
 -		case PHOTOMETRIC_MINISBLACK:
 -		case PHOTOMETRIC_PALETTE:
 -			if (td->td_planarconfig == PLANARCONFIG_CONTIG
 -			    && td->td_samplesperpixel != 1
 -			    && td->td_bitspersample < 8 ) {
 -				sprintf(emsg,
 -				    "Sorry, can not handle contiguous data with %s=%d, "
 -				    "and %s=%d and Bits/Sample=%d",
 -				    photoTag, photometric,
 -				    "Samples/pixel", td->td_samplesperpixel,
 -				    td->td_bitspersample);
 -				return (0);
 -			}
 -			/*
 -			 * We should likely validate that any extra samples are either
 -			 * to be ignored, or are alpha, and if alpha we should try to use
 -			 * them.  But for now we won't bother with this.
 -			*/
 -			break;
 -		case PHOTOMETRIC_YCBCR:
 -			/*
 -			 * TODO: if at all meaningful and useful, make more complete
 -			 * support check here, or better still, refactor to let supporting
 -			 * code decide whether there is support and what meaningfull
 -			 * error to return
 -			 */
 -			break;
 -		case PHOTOMETRIC_RGB:
 -			if (colorchannels < 3) {
 -				sprintf(emsg, "Sorry, can not handle RGB image with %s=%d",
 -				    "Color channels", colorchannels);
 -				return (0);
 -			}
 -			break;
 -		case PHOTOMETRIC_SEPARATED:
 -			{
 -				uint16 inkset;
 -				TIFFGetFieldDefaulted(tif, TIFFTAG_INKSET, &inkset);
 -				if (inkset != INKSET_CMYK) {
 -					sprintf(emsg,
 -					    "Sorry, can not handle separated image with %s=%d",
 -					    "InkSet", inkset);
 -					return 0;
 -				}
 -				if (td->td_samplesperpixel < 4) {
 -					sprintf(emsg,
 -					    "Sorry, can not handle separated image with %s=%d",
 -					    "Samples/pixel", td->td_samplesperpixel);
 -					return 0;
 -				}
 -				break;
 -			}
 -		case PHOTOMETRIC_LOGL:
 -			if (td->td_compression != COMPRESSION_SGILOG) {
 -				sprintf(emsg, "Sorry, LogL data must have %s=%d",
 -				    "Compression", COMPRESSION_SGILOG);
 -				return (0);
 -			}
 -			break;
 -		case PHOTOMETRIC_LOGLUV:
 -			if (td->td_compression != COMPRESSION_SGILOG &&
 -			    td->td_compression != COMPRESSION_SGILOG24) {
 -				sprintf(emsg, "Sorry, LogLuv data must have %s=%d or %d",
 -				    "Compression", COMPRESSION_SGILOG, COMPRESSION_SGILOG24);
 -				return (0);
 -			}
 -			if (td->td_planarconfig != PLANARCONFIG_CONTIG) {
 -				sprintf(emsg, "Sorry, can not handle LogLuv images with %s=%d",
 -				    "Planarconfiguration", td->td_planarconfig);
 -				return (0);
 -			}
 -			break;
 -		case PHOTOMETRIC_CIELAB:
 -			break;
 -		default:
 -			sprintf(emsg, "Sorry, can not handle image with %s=%d",
 -			    photoTag, photometric);
 -			return (0);
 -	}
 -	return (1);
 -}
 -
 -void
 -TIFFRGBAImageEnd(TIFFRGBAImage* img)
 -{
 -	if (img->Map)
 -		_TIFFfree(img->Map), img->Map = NULL;
 -	if (img->BWmap)
 -		_TIFFfree(img->BWmap), img->BWmap = NULL;
 -	if (img->PALmap)
 -		_TIFFfree(img->PALmap), img->PALmap = NULL;
 -	if (img->ycbcr)
 -		_TIFFfree(img->ycbcr), img->ycbcr = NULL;
 -	if (img->cielab)
 -		_TIFFfree(img->cielab), img->cielab = NULL;
 -	if ( img->redcmap ) {
 -		_TIFFfree( img->redcmap );
 -		_TIFFfree( img->greencmap );
 -		_TIFFfree( img->bluecmap );
 -	}
 -}
 -
 -static int
 -isCCITTCompression(TIFF* tif)
 -{
 -    uint16 compress;
 -    TIFFGetField(tif, TIFFTAG_COMPRESSION, &compress);
 -    return (compress == COMPRESSION_CCITTFAX3 ||
 -	    compress == COMPRESSION_CCITTFAX4 ||
 -	    compress == COMPRESSION_CCITTRLE ||
 -	    compress == COMPRESSION_CCITTRLEW);
 -}
 -
 -int
 -TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024])
 -{
 -	uint16* sampleinfo;
 -	uint16 extrasamples;
 -	uint16 planarconfig;
 -	uint16 compress;
 -	int colorchannels;
 -	uint16 *red_orig, *green_orig, *blue_orig;
 -	int n_color;
 -
 -	/* Initialize to normal values */
 -	img->row_offset = 0;
 -	img->col_offset = 0;
 -	img->redcmap = NULL;
 -	img->greencmap = NULL;
 -	img->bluecmap = NULL;
 -	img->req_orientation = ORIENTATION_BOTLEFT;     /* It is the default */
 -
 -	img->tif = tif;
 -	img->stoponerr = stop;
 -	TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &img->bitspersample);
 -	switch (img->bitspersample) {
 -		case 1:
 -		case 2:
 -		case 4:
 -		case 8:
 -		case 16:
 -			break;
 -		default:
 -			sprintf(emsg, "Sorry, can not handle images with %d-bit samples",
 -			    img->bitspersample);
 -			return (0);
 -	}
 -	img->alpha = 0;
 -	TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &img->samplesperpixel);
 -	TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
 -	    &extrasamples, &sampleinfo);
 -	if (extrasamples >= 1)
 -	{
 -		switch (sampleinfo[0]) {
 -			case EXTRASAMPLE_UNSPECIFIED:          /* Workaround for some images without */
 -				if (img->samplesperpixel > 3)  /* correct info about alpha channel */
 -					img->alpha = EXTRASAMPLE_ASSOCALPHA;
 -				break;
 -			case EXTRASAMPLE_ASSOCALPHA:           /* data is pre-multiplied */
 -			case EXTRASAMPLE_UNASSALPHA:           /* data is not pre-multiplied */
 -				img->alpha = sampleinfo[0];
 -				break;
 -		}
 -	}
 -
 -#ifdef DEFAULT_EXTRASAMPLE_AS_ALPHA
 -	if ( !TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &img->photometric))
 -		img->photometric = PHOTOMETRIC_MINISWHITE;
 -
 -	if ( extrasamples == 0
 -	    && img->samplesperpixel == 4
 -	    && img->photometric == PHOTOMETRIC_RGB )
 -	{
 -		img->alpha = EXTRASAMPLE_ASSOCALPHA;
 -		extrasamples = 1;
 -	}
 -#endif
 -
 -	colorchannels = img->samplesperpixel - extrasamples;
 -	TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &compress);
 -	TIFFGetFieldDefaulted(tif, TIFFTAG_PLANARCONFIG, &planarconfig);
 -	if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &img->photometric)) {
 -		switch (colorchannels) {
 -			case 1:
 -				if (isCCITTCompression(tif))
 -					img->photometric = PHOTOMETRIC_MINISWHITE;
 -				else
 -					img->photometric = PHOTOMETRIC_MINISBLACK;
 -				break;
 -			case 3:
 -				img->photometric = PHOTOMETRIC_RGB;
 -				break;
 -			default:
 -				sprintf(emsg, "Missing needed %s tag", photoTag);
 -				return (0);
 -		}
 -	}
 -	switch (img->photometric) {
 -		case PHOTOMETRIC_PALETTE:
 -			if (!TIFFGetField(tif, TIFFTAG_COLORMAP,
 -			    &red_orig, &green_orig, &blue_orig)) {
 -				sprintf(emsg, "Missing required \"Colormap\" tag");
 -				return (0);
 -			}
 -
 -			/* copy the colormaps so we can modify them */
 -			n_color = (1L << img->bitspersample);
 -			img->redcmap = (uint16 *) _TIFFmalloc(sizeof(uint16)*n_color);
 -			img->greencmap = (uint16 *) _TIFFmalloc(sizeof(uint16)*n_color);
 -			img->bluecmap = (uint16 *) _TIFFmalloc(sizeof(uint16)*n_color);
 -			if ( !img->redcmap || !img->greencmap || !img->bluecmap ) {
 -				sprintf(emsg, "Out of memory for colormap copy");
 -				return (0);
 -			}
 -
 -			_TIFFmemcpy( img->redcmap, red_orig, n_color * 2 );
 -			_TIFFmemcpy( img->greencmap, green_orig, n_color * 2 );
 -			_TIFFmemcpy( img->bluecmap, blue_orig, n_color * 2 );
 -
 -			/* fall thru... */
 -		case PHOTOMETRIC_MINISWHITE:
 -		case PHOTOMETRIC_MINISBLACK:
 -			if (planarconfig == PLANARCONFIG_CONTIG
 -			    && img->samplesperpixel != 1
 -			    && img->bitspersample < 8 ) {
 -				sprintf(emsg,
 -				    "Sorry, can not handle contiguous data with %s=%d, "
 -				    "and %s=%d and Bits/Sample=%d",
 -				    photoTag, img->photometric,
 -				    "Samples/pixel", img->samplesperpixel,
 -				    img->bitspersample);
 -				return (0);
 -			}
 -			break;
 -		case PHOTOMETRIC_YCBCR:
 -			/* It would probably be nice to have a reality check here. */
 -			if (planarconfig == PLANARCONFIG_CONTIG)
 -				/* can rely on libjpeg to convert to RGB */
 -				/* XXX should restore current state on exit */
 -				switch (compress) {
 -					case COMPRESSION_JPEG:
 -						/*
 -						 * TODO: when complete tests verify complete desubsampling
 -						 * and YCbCr handling, remove use of TIFFTAG_JPEGCOLORMODE in
 -						 * favor of tif_getimage.c native handling
 -						 */
 -						TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB);
 -						img->photometric = PHOTOMETRIC_RGB;
 -						break;
 -					default:
 -						/* do nothing */;
 -						break;
 -				}
 -			/*
 -			 * TODO: if at all meaningful and useful, make more complete
 -			 * support check here, or better still, refactor to let supporting
 -			 * code decide whether there is support and what meaningfull
 -			 * error to return
 -			 */
 -			break;
 -		case PHOTOMETRIC_RGB:
 -			if (colorchannels < 3) {
 -				sprintf(emsg, "Sorry, can not handle RGB image with %s=%d",
 -				    "Color channels", colorchannels);
 -				return (0);
 -			}
 -			break;
 -		case PHOTOMETRIC_SEPARATED:
 -			{
 -				uint16 inkset;
 -				TIFFGetFieldDefaulted(tif, TIFFTAG_INKSET, &inkset);
 -				if (inkset != INKSET_CMYK) {
 -					sprintf(emsg, "Sorry, can not handle separated image with %s=%d",
 -					    "InkSet", inkset);
 -					return (0);
 -				}
 -				if (img->samplesperpixel < 4) {
 -					sprintf(emsg, "Sorry, can not handle separated image with %s=%d",
 -					    "Samples/pixel", img->samplesperpixel);
 -					return (0);
 -				}
 -			}
 -			break;
 -		case PHOTOMETRIC_LOGL:
 -			if (compress != COMPRESSION_SGILOG) {
 -				sprintf(emsg, "Sorry, LogL data must have %s=%d",
 -				    "Compression", COMPRESSION_SGILOG);
 -				return (0);
 -			}
 -			TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_8BIT);
 -			img->photometric = PHOTOMETRIC_MINISBLACK;	/* little white lie */
 -			img->bitspersample = 8;
 -			break;
 -		case PHOTOMETRIC_LOGLUV:
 -			if (compress != COMPRESSION_SGILOG && compress != COMPRESSION_SGILOG24) {
 -				sprintf(emsg, "Sorry, LogLuv data must have %s=%d or %d",
 -				    "Compression", COMPRESSION_SGILOG, COMPRESSION_SGILOG24);
 -				return (0);
 -			}
 -			if (planarconfig != PLANARCONFIG_CONTIG) {
 -				sprintf(emsg, "Sorry, can not handle LogLuv images with %s=%d",
 -				    "Planarconfiguration", planarconfig);
 -				return (0);
 -			}
 -			TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_8BIT);
 -			img->photometric = PHOTOMETRIC_RGB;		/* little white lie */
 -			img->bitspersample = 8;
 -			break;
 -		case PHOTOMETRIC_CIELAB:
 -			break;
 -		default:
 -			sprintf(emsg, "Sorry, can not handle image with %s=%d",
 -			    photoTag, img->photometric);
 -			return (0);
 -	}
 -	img->Map = NULL;
 -	img->BWmap = NULL;
 -	img->PALmap = NULL;
 -	img->ycbcr = NULL;
 -	img->cielab = NULL;
 -	TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &img->width);
 -	TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &img->height);
 -	TIFFGetFieldDefaulted(tif, TIFFTAG_ORIENTATION, &img->orientation);
 -	img->isContig =
 -	    !(planarconfig == PLANARCONFIG_SEPARATE && colorchannels > 1);
 -	if (img->isContig) {
 -		if (!PickContigCase(img)) {
 -			sprintf(emsg, "Sorry, can not handle image");
 -			return 0;
 -		}
 -	} else {
 -		if (!PickSeparateCase(img)) {
 -			sprintf(emsg, "Sorry, can not handle image");
 -			return 0;
 -		}
 -	}
 -	return 1;
 -}
 -
 -int
 -TIFFRGBAImageGet(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
 -{
 -    if (img->get == NULL) {
 -		TIFFErrorExt(img->tif->tif_clientdata, TIFFFileName(img->tif), "No \"get\" routine setup");
 -		return (0);
 -	}
 -	if (img->put.any == NULL) {
 -		TIFFErrorExt(img->tif->tif_clientdata, TIFFFileName(img->tif),
 -		"No \"put\" routine setupl; probably can not handle image format");
 -		return (0);
 -    }
 -    return (*img->get)(img, raster, w, h);
 -}
 -
 -/*
 - * Read the specified image into an ABGR-format rastertaking in account
 - * specified orientation.
 - */
 -int
 -TIFFReadRGBAImageOriented(TIFF* tif,
 -			  uint32 rwidth, uint32 rheight, uint32* raster,
 -			  int orientation, int stop)
 -{
 -    char emsg[1024] = "";
 -    TIFFRGBAImage img;
 -    int ok;
 -
 -	if (TIFFRGBAImageOK(tif, emsg) && TIFFRGBAImageBegin(&img, tif, stop, emsg)) {
 -		img.req_orientation = orientation;
 -		/* XXX verify rwidth and rheight against width and height */
 -		ok = TIFFRGBAImageGet(&img, raster+(rheight-img.height)*rwidth,
 -			rwidth, img.height);
 -		TIFFRGBAImageEnd(&img);
 -	} else {
 -		TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "%s", emsg);
 -		ok = 0;
 -    }
 -    return (ok);
 -}
 -
 -/*
 - * Read the specified image into an ABGR-format raster. Use bottom left
 - * origin for raster by default.
 - */
 -int
 -TIFFReadRGBAImage(TIFF* tif,
 -		  uint32 rwidth, uint32 rheight, uint32* raster, int stop)
 -{
 -	return TIFFReadRGBAImageOriented(tif, rwidth, rheight, raster,
 -					 ORIENTATION_BOTLEFT, stop);
 -}
 -
 -static int 
 -setorientation(TIFFRGBAImage* img)
 -{
 -	switch (img->orientation) {
 -		case ORIENTATION_TOPLEFT:
 -		case ORIENTATION_LEFTTOP:
 -			if (img->req_orientation == ORIENTATION_TOPRIGHT ||
 -			    img->req_orientation == ORIENTATION_RIGHTTOP)
 -				return FLIP_HORIZONTALLY;
 -			else if (img->req_orientation == ORIENTATION_BOTRIGHT ||
 -			    img->req_orientation == ORIENTATION_RIGHTBOT)
 -				return FLIP_HORIZONTALLY | FLIP_VERTICALLY;
 -			else if (img->req_orientation == ORIENTATION_BOTLEFT ||
 -			    img->req_orientation == ORIENTATION_LEFTBOT)
 -				return FLIP_VERTICALLY;
 -			else
 -				return 0;
 -		case ORIENTATION_TOPRIGHT:
 -		case ORIENTATION_RIGHTTOP:
 -			if (img->req_orientation == ORIENTATION_TOPLEFT ||
 -			    img->req_orientation == ORIENTATION_LEFTTOP)
 -				return FLIP_HORIZONTALLY;
 -			else if (img->req_orientation == ORIENTATION_BOTRIGHT ||
 -			    img->req_orientation == ORIENTATION_RIGHTBOT)
 -				return FLIP_VERTICALLY;
 -			else if (img->req_orientation == ORIENTATION_BOTLEFT ||
 -			    img->req_orientation == ORIENTATION_LEFTBOT)
 -				return FLIP_HORIZONTALLY | FLIP_VERTICALLY;
 -			else
 -				return 0;
 -		case ORIENTATION_BOTRIGHT:
 -		case ORIENTATION_RIGHTBOT:
 -			if (img->req_orientation == ORIENTATION_TOPLEFT ||
 -			    img->req_orientation == ORIENTATION_LEFTTOP)
 -				return FLIP_HORIZONTALLY | FLIP_VERTICALLY;
 -			else if (img->req_orientation == ORIENTATION_TOPRIGHT ||
 -			    img->req_orientation == ORIENTATION_RIGHTTOP)
 -				return FLIP_VERTICALLY;
 -			else if (img->req_orientation == ORIENTATION_BOTLEFT ||
 -			    img->req_orientation == ORIENTATION_LEFTBOT)
 -				return FLIP_HORIZONTALLY;
 -			else
 -				return 0;
 -		case ORIENTATION_BOTLEFT:
 -		case ORIENTATION_LEFTBOT:
 -			if (img->req_orientation == ORIENTATION_TOPLEFT ||
 -			    img->req_orientation == ORIENTATION_LEFTTOP)
 -				return FLIP_VERTICALLY;
 -			else if (img->req_orientation == ORIENTATION_TOPRIGHT ||
 -			    img->req_orientation == ORIENTATION_RIGHTTOP)
 -				return FLIP_HORIZONTALLY | FLIP_VERTICALLY;
 -			else if (img->req_orientation == ORIENTATION_BOTRIGHT ||
 -			    img->req_orientation == ORIENTATION_RIGHTBOT)
 -				return FLIP_HORIZONTALLY;
 -			else
 -				return 0;
 -		default:	/* NOTREACHED */
 -			return 0;
 -	}
 -}
 -
 -/*
 - * Get an tile-organized image that has
 - *	PlanarConfiguration contiguous if SamplesPerPixel > 1
 - * or
 - *	SamplesPerPixel == 1
 - */	
 -static int
 -gtTileContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
 -{
 -    TIFF* tif = img->tif;
 -    tileContigRoutine put = img->put.contig;
 -    uint32 col, row, y, rowstoread;
 -    uint32 pos;
 -    uint32 tw, th;
 -    unsigned char* buf;
 -    int32 fromskew, toskew;
 -    uint32 nrow;
 -    int ret = 1, flip;
 -
 -    buf = (unsigned char*) _TIFFmalloc(TIFFTileSize(tif));
 -    if (buf == 0) {
 -		TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "No space for tile buffer");
 -		return (0);
 -    }
 -    _TIFFmemset(buf, 0, TIFFTileSize(tif));
 -    TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw);
 -    TIFFGetField(tif, TIFFTAG_TILELENGTH, &th);
 -
 -    flip = setorientation(img);
 -    if (flip & FLIP_VERTICALLY) {
 -	    y = h - 1;
 -	    toskew = -(int32)(tw + w);
 -    }
 -    else {
 -	    y = 0;
 -	    toskew = -(int32)(tw - w);
 -    }
 -     
 -    for (row = 0; row < h; row += nrow)
 -    {
 -        rowstoread = th - (row + img->row_offset) % th;
 -    	nrow = (row + rowstoread > h ? h - row : rowstoread);
 -	for (col = 0; col < w; col += tw) 
 -        {
 -            if (TIFFReadTile(tif, buf, col+img->col_offset,
 -                             row+img->row_offset, 0, 0) < 0 && img->stoponerr)
 -            {
 -                ret = 0;
 -                break;
 -            }
 -	    
 -            pos = ((row+img->row_offset) % th) * TIFFTileRowSize(tif);
 -
 -    	    if (col + tw > w) 
 -            {
 -                /*
 -                 * Tile is clipped horizontally.  Calculate
 -                 * visible portion and skewing factors.
 -                 */
 -                uint32 npix = w - col;
 -                fromskew = tw - npix;
 -                (*put)(img, raster+y*w+col, col, y,
 -                       npix, nrow, fromskew, toskew + fromskew, buf + pos);
 -            }
 -            else 
 -            {
 -                (*put)(img, raster+y*w+col, col, y, tw, nrow, 0, toskew, buf + pos);
 -            }
 -        }
 -
 -        y += (flip & FLIP_VERTICALLY ? -(int32) nrow : (int32) nrow);
 -    }
 -    _TIFFfree(buf);
 -
 -    if (flip & FLIP_HORIZONTALLY) {
 -	    uint32 line;
 -
 -	    for (line = 0; line < h; line++) {
 -		    uint32 *left = raster + (line * w);
 -		    uint32 *right = left + w - 1;
 -		    
 -		    while ( left < right ) {
 -			    uint32 temp = *left;
 -			    *left = *right;
 -			    *right = temp;
 -			    left++, right--;
 -		    }
 -	    }
 -    }
 -
 -    return (ret);
 -}
 -
 -/*
 - * Get an tile-organized image that has
 - *	 SamplesPerPixel > 1
 - *	 PlanarConfiguration separated
 - * We assume that all such images are RGB.
 - */	
 -static int
 -gtTileSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
 -{
 -	TIFF* tif = img->tif;
 -	tileSeparateRoutine put = img->put.separate;
 -	uint32 col, row, y, rowstoread;
 -	uint32 pos;
 -	uint32 tw, th;
 -	unsigned char* buf;
 -	unsigned char* p0;
 -	unsigned char* p1;
 -	unsigned char* p2;
 -	unsigned char* pa;
 -	tsize_t tilesize;
 -	int32 fromskew, toskew;
 -	int alpha = img->alpha;
 -	uint32 nrow;
 -	int ret = 1, flip;
 -
 -	tilesize = TIFFTileSize(tif);
 -	buf = (unsigned char*) _TIFFmalloc((alpha?4:3)*tilesize);
 -	if (buf == 0) {
 -		TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "No space for tile buffer");
 -		return (0);
 -	}
 -	_TIFFmemset(buf, 0, (alpha?4:3)*tilesize);
 -	p0 = buf;
 -	p1 = p0 + tilesize;
 -	p2 = p1 + tilesize;
 -	pa = (alpha?(p2+tilesize):NULL);
 -	TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw);
 -	TIFFGetField(tif, TIFFTAG_TILELENGTH, &th);
 -
 -	flip = setorientation(img);
 -	if (flip & FLIP_VERTICALLY) {
 -		y = h - 1;
 -		toskew = -(int32)(tw + w);
 -	}
 -	else {
 -		y = 0;
 -		toskew = -(int32)(tw - w);
 -	}
 -
 -	for (row = 0; row < h; row += nrow)
 -	{
 -		rowstoread = th - (row + img->row_offset) % th;
 -		nrow = (row + rowstoread > h ? h - row : rowstoread);
 -		for (col = 0; col < w; col += tw)
 -		{
 -			if (TIFFReadTile(tif, p0, col+img->col_offset,
 -			    row+img->row_offset,0,0) < 0 && img->stoponerr)
 -			{
 -				ret = 0;
 -				break;
 -			}
 -			if (TIFFReadTile(tif, p1, col+img->col_offset,
 -			    row+img->row_offset,0,1) < 0 && img->stoponerr)
 -			{
 -				ret = 0;
 -				break;
 -			}
 -			if (TIFFReadTile(tif, p2, col+img->col_offset,
 -			    row+img->row_offset,0,2) < 0 && img->stoponerr)
 -			{
 -				ret = 0;
 -				break;
 -			}
 -			if (alpha)
 -			{
 -				if (TIFFReadTile(tif,pa,col+img->col_offset,
 -				    row+img->row_offset,0,3) < 0 && img->stoponerr)
 -				{
 -					ret = 0;
 -					break;
 -				}
 -			}
 -
 -			pos = ((row+img->row_offset) % th) * TIFFTileRowSize(tif);
 -
 -			if (col + tw > w)
 -			{
 -				/*
 -				 * Tile is clipped horizontally.  Calculate
 -				 * visible portion and skewing factors.
 -				 */
 -				uint32 npix = w - col;
 -				fromskew = tw - npix;
 -				(*put)(img, raster+y*w+col, col, y,
 -				    npix, nrow, fromskew, toskew + fromskew,
 -				    p0 + pos, p1 + pos, p2 + pos, (alpha?(pa+pos):NULL));
 -			} else {
 -				(*put)(img, raster+y*w+col, col, y,
 -				    tw, nrow, 0, toskew, p0 + pos, p1 + pos, p2 + pos, (alpha?(pa+pos):NULL));
 -			}
 -		}
 -
 -		y += (flip & FLIP_VERTICALLY ?-(int32) nrow : (int32) nrow);
 -	}
 -
 -	if (flip & FLIP_HORIZONTALLY) {
 -		uint32 line;
 -
 -		for (line = 0; line < h; line++) {
 -			uint32 *left = raster + (line * w);
 -			uint32 *right = left + w - 1;
 -
 -			while ( left < right ) {
 -				uint32 temp = *left;
 -				*left = *right;
 -				*right = temp;
 -				left++, right--;
 -			}
 -		}
 -	}
 -
 -	_TIFFfree(buf);
 -	return (ret);
 -}
 -
 -/*
 - * Get a strip-organized image that has
 - *	PlanarConfiguration contiguous if SamplesPerPixel > 1
 - * or
 - *	SamplesPerPixel == 1
 - */	
 -static int
 -gtStripContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
 -{
 -	TIFF* tif = img->tif;
 -	tileContigRoutine put = img->put.contig;
 -	uint32 row, y, nrow, nrowsub, rowstoread;
 -	uint32 pos;
 -	unsigned char* buf;
 -	uint32 rowsperstrip;
 -	uint16 subsamplinghor,subsamplingver;
 -	uint32 imagewidth = img->width;
 -	tsize_t scanline;
 -	int32 fromskew, toskew;
 -	int ret = 1, flip;
 -
 -	buf = (unsigned char*) _TIFFmalloc(TIFFStripSize(tif));
 -	if (buf == 0) {
 -		TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "No space for strip buffer");
 -		return (0);
 -	}
 -	_TIFFmemset(buf, 0, TIFFStripSize(tif));
 -
 -	flip = setorientation(img);
 -	if (flip & FLIP_VERTICALLY) {
 -		y = h - 1;
 -		toskew = -(int32)(w + w);
 -	} else {
 -		y = 0;
 -		toskew = -(int32)(w - w);
 -	}
 -
 -	TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip);
 -	TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRSUBSAMPLING, &subsamplinghor, &subsamplingver);
 -	scanline = TIFFNewScanlineSize(tif);
 -	fromskew = (w < imagewidth ? imagewidth - w : 0);
 -	for (row = 0; row < h; row += nrow)
 -	{
 -		rowstoread = rowsperstrip - (row + img->row_offset) % rowsperstrip;
 -		nrow = (row + rowstoread > h ? h - row : rowstoread);
 -		nrowsub = nrow;
 -		if ((nrowsub%subsamplingver)!=0)
 -			nrowsub+=subsamplingver-nrowsub%subsamplingver;
 -		if (TIFFReadEncodedStrip(tif,
 -		    TIFFComputeStrip(tif,row+img->row_offset, 0),
 -		    buf,
 -		    ((row + img->row_offset)%rowsperstrip + nrowsub) * scanline) < 0
 -		    && img->stoponerr)
 -		{
 -			ret = 0;
 -			break;
 -		}
 -
 -		pos = ((row + img->row_offset) % rowsperstrip) * scanline;
 -		(*put)(img, raster+y*w, 0, y, w, nrow, fromskew, toskew, buf + pos);
 -		y += (flip & FLIP_VERTICALLY ? -(int32) nrow : (int32) nrow);
 -	}
 -
 -	if (flip & FLIP_HORIZONTALLY) {
 -		uint32 line;
 -
 -		for (line = 0; line < h; line++) {
 -			uint32 *left = raster + (line * w);
 -			uint32 *right = left + w - 1;
 -
 -			while ( left < right ) {
 -				uint32 temp = *left;
 -				*left = *right;
 -				*right = temp;
 -				left++, right--;
 -			}
 -		}
 -	}
 -
 -	_TIFFfree(buf);
 -	return (ret);
 -}
 -
 -/*
 - * Get a strip-organized image with
 - *	 SamplesPerPixel > 1
 - *	 PlanarConfiguration separated
 - * We assume that all such images are RGB.
 - */
 -static int
 -gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
 -{
 -	TIFF* tif = img->tif;
 -	tileSeparateRoutine put = img->put.separate;
 -	unsigned char *buf;
 -	unsigned char *p0, *p1, *p2, *pa;
 -	uint32 row, y, nrow, rowstoread;
 -	uint32 pos;
 -	tsize_t scanline;
 -	uint32 rowsperstrip, offset_row;
 -	uint32 imagewidth = img->width;
 -	tsize_t stripsize;
 -	int32 fromskew, toskew;
 -	int alpha = img->alpha;
 -	int ret = 1, flip;
 -
 -	stripsize = TIFFStripSize(tif);
 -	p0 = buf = (unsigned char *)_TIFFmalloc((alpha?4:3)*stripsize);
 -	if (buf == 0) {
 -		TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "No space for tile buffer");
 -		return (0);
 -	}
 -	_TIFFmemset(buf, 0, (alpha?4:3)*stripsize);
 -	p1 = p0 + stripsize;
 -	p2 = p1 + stripsize;
 -	pa = (alpha?(p2+stripsize):NULL);
 -
 -	flip = setorientation(img);
 -	if (flip & FLIP_VERTICALLY) {
 -		y = h - 1;
 -		toskew = -(int32)(w + w);
 -	}
 -	else {
 -		y = 0;
 -		toskew = -(int32)(w - w);
 -	}
 -
 -	TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip);
 -	scanline = TIFFScanlineSize(tif);
 -	fromskew = (w < imagewidth ? imagewidth - w : 0);
 -	for (row = 0; row < h; row += nrow)
 -	{
 -		rowstoread = rowsperstrip - (row + img->row_offset) % rowsperstrip;
 -		nrow = (row + rowstoread > h ? h - row : rowstoread);
 -		offset_row = row + img->row_offset;
 -		if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 0),
 -		    p0, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0
 -		    && img->stoponerr)
 -		{
 -			ret = 0;
 -			break;
 -		}
 -		if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 1),
 -		    p1, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0
 -		    && img->stoponerr)
 -		{
 -			ret = 0;
 -			break;
 -		}
 -		if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 2),
 -		    p2, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0
 -		    && img->stoponerr)
 -		{
 -			ret = 0;
 -			break;
 -		}
 -		if (alpha)
 -		{
 -			if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 3),
 -			    pa, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0
 -			    && img->stoponerr)
 -			{
 -				ret = 0;
 -				break;
 -			}
 -		}
 -
 -		pos = ((row + img->row_offset) % rowsperstrip) * scanline;
 -		(*put)(img, raster+y*w, 0, y, w, nrow, fromskew, toskew, p0 + pos, p1 + pos,
 -		    p2 + pos, (alpha?(pa+pos):NULL));
 -		y += (flip & FLIP_VERTICALLY ? -(int32) nrow : (int32) nrow);
 -	}
 -
 -	if (flip & FLIP_HORIZONTALLY) {
 -		uint32 line;
 -
 -		for (line = 0; line < h; line++) {
 -			uint32 *left = raster + (line * w);
 -			uint32 *right = left + w - 1;
 -
 -			while ( left < right ) {
 -				uint32 temp = *left;
 -				*left = *right;
 -				*right = temp;
 -				left++, right--;
 -			}
 -		}
 -	}
 -
 -	_TIFFfree(buf);
 -	return (ret);
 -}
 -
 -/*
 - * The following routines move decoded data returned
 - * from the TIFF library into rasters filled with packed
 - * ABGR pixels (i.e. suitable for passing to lrecwrite.)
 - *
 - * The routines have been created according to the most
 - * important cases and optimized.  PickContigCase and
 - * PickSeparateCase analyze the parameters and select
 - * the appropriate "get" and "put" routine to use.
 - */
 -#define	REPEAT8(op)	REPEAT4(op); REPEAT4(op)
 -#define	REPEAT4(op)	REPEAT2(op); REPEAT2(op)
 -#define	REPEAT2(op)	op; op
 -#define	CASE8(x,op)			\
 -    switch (x) {			\
 -    case 7: op; case 6: op; case 5: op;	\
 -    case 4: op; case 3: op; case 2: op;	\
 -    case 1: op;				\
 -    }
 -#define	CASE4(x,op)	switch (x) { case 3: op; case 2: op; case 1: op; }
 -#define	NOP
 -
 -#define	UNROLL8(w, op1, op2) {		\
 -    uint32 _x;				\
 -    for (_x = w; _x >= 8; _x -= 8) {	\
 -	op1;				\
 -	REPEAT8(op2);			\
 -    }					\
 -    if (_x > 0) {			\
 -	op1;				\
 -	CASE8(_x,op2);			\
 -    }					\
 -}
 -#define	UNROLL4(w, op1, op2) {		\
 -    uint32 _x;				\
 -    for (_x = w; _x >= 4; _x -= 4) {	\
 -	op1;				\
 -	REPEAT4(op2);			\
 -    }					\
 -    if (_x > 0) {			\
 -	op1;				\
 -	CASE4(_x,op2);			\
 -    }					\
 -}
 -#define	UNROLL2(w, op1, op2) {		\
 -    uint32 _x;				\
 -    for (_x = w; _x >= 2; _x -= 2) {	\
 -	op1;				\
 -	REPEAT2(op2);			\
 -    }					\
 -    if (_x) {				\
 -	op1;				\
 -	op2;				\
 -    }					\
 -}
 -    
 -#define	SKEW(r,g,b,skew)	{ r += skew; g += skew; b += skew; }
 -#define	SKEW4(r,g,b,a,skew)	{ r += skew; g += skew; b += skew; a+= skew; }
 -
 -#define A1 (((uint32)0xffL)<<24)
 -#define	PACK(r,g,b)	\
 -	((uint32)(r)|((uint32)(g)<<8)|((uint32)(b)<<16)|A1)
 -#define	PACK4(r,g,b,a)	\
 -	((uint32)(r)|((uint32)(g)<<8)|((uint32)(b)<<16)|((uint32)(a)<<24))
 -#define W2B(v) (((v)>>8)&0xff)
 -#define	PACKW(r,g,b)	\
 -	((uint32)W2B(r)|((uint32)W2B(g)<<8)|((uint32)W2B(b)<<16)|A1)
 -#define	PACKW4(r,g,b,a)	\
 -	((uint32)W2B(r)|((uint32)W2B(g)<<8)|((uint32)W2B(b)<<16)|((uint32)W2B(a)<<24))
 -
 -#define	DECLAREContigPutFunc(name) \
 -static void name(\
 -    TIFFRGBAImage* img, \
 -    uint32* cp, \
 -    uint32 x, uint32 y, \
 -    uint32 w, uint32 h, \
 -    int32 fromskew, int32 toskew, \
 -    unsigned char* pp \
 -)
 -
 -/*
 - * 8-bit palette => colormap/RGB
 - */
 -DECLAREContigPutFunc(put8bitcmaptile)
 -{
 -    uint32** PALmap = img->PALmap;
 -    int samplesperpixel = img->samplesperpixel;
 -
 -    (void) y;
 -    while (h-- > 0) {
 -	for (x = w; x-- > 0;)
 -        {
 -	    *cp++ = PALmap[*pp][0];
 -            pp += samplesperpixel;
 -        }
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 4-bit palette => colormap/RGB
 - */
 -DECLAREContigPutFunc(put4bitcmaptile)
 -{
 -    uint32** PALmap = img->PALmap;
 -
 -    (void) x; (void) y;
 -    fromskew /= 2;
 -    while (h-- > 0) {
 -	uint32* bw;
 -	UNROLL2(w, bw = PALmap[*pp++], *cp++ = *bw++);
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 2-bit palette => colormap/RGB
 - */
 -DECLAREContigPutFunc(put2bitcmaptile)
 -{
 -    uint32** PALmap = img->PALmap;
 -
 -    (void) x; (void) y;
 -    fromskew /= 4;
 -    while (h-- > 0) {
 -	uint32* bw;
 -	UNROLL4(w, bw = PALmap[*pp++], *cp++ = *bw++);
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 1-bit palette => colormap/RGB
 - */
 -DECLAREContigPutFunc(put1bitcmaptile)
 -{
 -    uint32** PALmap = img->PALmap;
 -
 -    (void) x; (void) y;
 -    fromskew /= 8;
 -    while (h-- > 0) {
 -	uint32* bw;
 -	UNROLL8(w, bw = PALmap[*pp++], *cp++ = *bw++);
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 8-bit greyscale => colormap/RGB
 - */
 -DECLAREContigPutFunc(putgreytile)
 -{
 -    int samplesperpixel = img->samplesperpixel;
 -    uint32** BWmap = img->BWmap;
 -
 -    (void) y;
 -    while (h-- > 0) {
 -	for (x = w; x-- > 0;)
 -        {
 -	    *cp++ = BWmap[*pp][0];
 -            pp += samplesperpixel;
 -        }
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 16-bit greyscale => colormap/RGB
 - */
 -DECLAREContigPutFunc(put16bitbwtile)
 -{
 -    int samplesperpixel = img->samplesperpixel;
 -    uint32** BWmap = img->BWmap;
 -
 -    (void) y;
 -    while (h-- > 0) {
 -        uint16 *wp = (uint16 *) pp;
 -
 -	for (x = w; x-- > 0;)
 -        {
 -            /* use high order byte of 16bit value */
 -
 -	    *cp++ = BWmap[*wp >> 8][0];
 -            pp += 2 * samplesperpixel;
 -            wp += samplesperpixel;
 -        }
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 1-bit bilevel => colormap/RGB
 - */
 -DECLAREContigPutFunc(put1bitbwtile)
 -{
 -    uint32** BWmap = img->BWmap;
 -
 -    (void) x; (void) y;
 -    fromskew /= 8;
 -    while (h-- > 0) {
 -	uint32* bw;
 -	UNROLL8(w, bw = BWmap[*pp++], *cp++ = *bw++);
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 2-bit greyscale => colormap/RGB
 - */
 -DECLAREContigPutFunc(put2bitbwtile)
 -{
 -    uint32** BWmap = img->BWmap;
 -
 -    (void) x; (void) y;
 -    fromskew /= 4;
 -    while (h-- > 0) {
 -	uint32* bw;
 -	UNROLL4(w, bw = BWmap[*pp++], *cp++ = *bw++);
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 4-bit greyscale => colormap/RGB
 - */
 -DECLAREContigPutFunc(put4bitbwtile)
 -{
 -    uint32** BWmap = img->BWmap;
 -
 -    (void) x; (void) y;
 -    fromskew /= 2;
 -    while (h-- > 0) {
 -	uint32* bw;
 -	UNROLL2(w, bw = BWmap[*pp++], *cp++ = *bw++);
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 8-bit packed samples, no Map => RGB
 - */
 -DECLAREContigPutFunc(putRGBcontig8bittile)
 -{
 -    int samplesperpixel = img->samplesperpixel;
 -
 -    (void) x; (void) y;
 -    fromskew *= samplesperpixel;
 -    while (h-- > 0) {
 -	UNROLL8(w, NOP,
 -	    *cp++ = PACK(pp[0], pp[1], pp[2]);
 -	    pp += samplesperpixel);
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 8-bit packed samples => RGBA w/ associated alpha
 - * (known to have Map == NULL)
 - */
 -DECLAREContigPutFunc(putRGBAAcontig8bittile)
 -{
 -    int samplesperpixel = img->samplesperpixel;
 -
 -    (void) x; (void) y;
 -    fromskew *= samplesperpixel;
 -    while (h-- > 0) {
 -	UNROLL8(w, NOP,
 -	    *cp++ = PACK4(pp[0], pp[1], pp[2], pp[3]);
 -	    pp += samplesperpixel);
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 8-bit packed samples => RGBA w/ unassociated alpha
 - * (known to have Map == NULL)
 - */
 -DECLAREContigPutFunc(putRGBUAcontig8bittile)
 -{
 -	int samplesperpixel = img->samplesperpixel;
 -	(void) y;
 -	fromskew *= samplesperpixel;
 -	while (h-- > 0) {
 -		uint32 r, g, b, a;
 -		for (x = w; x-- > 0;) {
 -			a = pp[3];
 -                        r = (a*pp[0] + 127) / 255;
 -                        g = (a*pp[1] + 127) / 255;
 -                        b = (a*pp[2] + 127) / 255;
 -			*cp++ = PACK4(r,g,b,a);
 -			pp += samplesperpixel;
 -		}
 -		cp += toskew;
 -		pp += fromskew;
 -	}
 -}
 -
 -/*
 - * 16-bit packed samples => RGB
 - */
 -DECLAREContigPutFunc(putRGBcontig16bittile)
 -{
 -	int samplesperpixel = img->samplesperpixel;
 -	uint16 *wp = (uint16 *)pp;
 -	(void) y;
 -	fromskew *= samplesperpixel;
 -	while (h-- > 0) {
 -		for (x = w; x-- > 0;) {
 -                    *cp++ = PACKW(wp[0],wp[1],wp[2]);
 -                    wp += samplesperpixel;
 -		}
 -		cp += toskew;
 -		wp += fromskew;
 -	}
 -}
 -
 -/*
 - * 16-bit packed samples => RGBA w/ associated alpha
 - * (known to have Map == NULL)
 - */
 -DECLAREContigPutFunc(putRGBAAcontig16bittile)
 -{
 -	int samplesperpixel = img->samplesperpixel;
 -	uint16 *wp = (uint16 *)pp;
 -	(void) y;
 -	fromskew *= samplesperpixel;
 -	while (h-- > 0) {
 -		for (x = w; x-- > 0;) {
 -                    *cp++ = PACKW4(wp[0],wp[1],wp[2],wp[3]);
 -                    wp += samplesperpixel;
 -		}
 -		cp += toskew;
 -		wp += fromskew;
 -	}
 -}
 -
 -/*
 - * 16-bit packed samples => RGBA w/ unassociated alpha
 - * (known to have Map == NULL)
 - */
 -DECLAREContigPutFunc(putRGBUAcontig16bittile)
 -{
 -	int samplesperpixel = img->samplesperpixel;
 -	uint16 *wp = (uint16 *)pp;
 -	(void) y;
 -	fromskew *= samplesperpixel;
 -	while (h-- > 0) {
 -		uint32 r,g,b,a;
 -		for (x = w; x-- > 0;) {
 -                    a = W2B(wp[3]);
 -                    r = (a*W2B(wp[0]) + 127) / 255;
 -                    g = (a*W2B(wp[1]) + 127) / 255;
 -                    b = (a*W2B(wp[2]) + 127) / 255;
 -                    *cp++ = PACK4(r,g,b,a);
 -                    wp += samplesperpixel;
 -		}
 -		cp += toskew;
 -		wp += fromskew;
 -	}
 -}
 -
 -/*
 - * 8-bit packed CMYK samples w/o Map => RGB
 - *
 - * NB: The conversion of CMYK->RGB is *very* crude.
 - */
 -DECLAREContigPutFunc(putRGBcontig8bitCMYKtile)
 -{
 -    int samplesperpixel = img->samplesperpixel;
 -    uint16 r, g, b, k;
 -
 -    (void) x; (void) y;
 -    fromskew *= samplesperpixel;
 -    while (h-- > 0) {
 -	UNROLL8(w, NOP,
 -	    k = 255 - pp[3];
 -	    r = (k*(255-pp[0]))/255;
 -	    g = (k*(255-pp[1]))/255;
 -	    b = (k*(255-pp[2]))/255;
 -	    *cp++ = PACK(r, g, b);
 -	    pp += samplesperpixel);
 -	cp += toskew;
 -	pp += fromskew;
 -    }
 -}
 -
 -/*
 - * 8-bit packed CMYK samples w/Map => RGB
 - *
 - * NB: The conversion of CMYK->RGB is *very* crude.
 - */
 -DECLAREContigPutFunc(putRGBcontig8bitCMYKMaptile)
 -{
 -    int samplesperpixel = img->samplesperpixel;
 -    TIFFRGBValue* Map = img->Map;
 -    uint16 r, g, b, k;
 -
 -    (void) y;
 -    fromskew *= samplesperpixel;
 -    while (h-- > 0) {
 -	for (x = w; x-- > 0;) {
 -	    k = 255 - pp[3];
 -	    r = (k*(255-pp[0]))/255;
 -	    g = (k*(255-pp[1]))/255;
 -	    b = (k*(255-pp[2]))/255;
 -	    *cp++ = PACK(Map[r], Map[g], Map[b]);
 -	    pp += samplesperpixel;
 -	}
 -	pp += fromskew;
 -	cp += toskew;
 -    }
 -}
 -
 -#define	DECLARESepPutFunc(name) \
 -static void name(\
 -    TIFFRGBAImage* img,\
 -    uint32* cp,\
 -    uint32 x, uint32 y, \
 -    uint32 w, uint32 h,\
 -    int32 fromskew, int32 toskew,\
 -    unsigned char* r, unsigned char* g, unsigned char* b, unsigned char* a\
 -)
 -
 -/*
 - * 8-bit unpacked samples => RGB
 - */
 -DECLARESepPutFunc(putRGBseparate8bittile)
 -{
 -    (void) img; (void) x; (void) y; (void) a;
 -    while (h-- > 0) {
 -	UNROLL8(w, NOP, *cp++ = PACK(*r++, *g++, *b++));
 -	SKEW(r, g, b, fromskew);
 -	cp += toskew;
 -    }
 -}
 -
 -/*
 - * 8-bit unpacked samples => RGBA w/ associated alpha
 - */
 -DECLARESepPutFunc(putRGBAAseparate8bittile)
 -{
 -	(void) img; (void) x; (void) y;
 -	while (h-- > 0) {
 -		UNROLL8(w, NOP, *cp++ = PACK4(*r++, *g++, *b++, *a++));
 -		SKEW4(r, g, b, a, fromskew);
 -		cp += toskew;
 -	}
 -}
 -
 -/*
 - * 8-bit unpacked samples => RGBA w/ unassociated alpha
 - */
 -DECLARESepPutFunc(putRGBUAseparate8bittile)
 -{
 -	(void) img; (void) y;
 -	while (h-- > 0) {
 -		uint32 rv, gv, bv, av;
 -		for (x = w; x-- > 0;) {
 -			av = *a++;
 -                        rv = (av* *r++ + 127) / 255;
 -                        gv = (av* *g++ + 127) / 255;
 -                        bv = (av* *b++ + 127) / 255;
 -			*cp++ = PACK4(rv,gv,bv,av);
 -		}
 -		SKEW4(r, g, b, a, fromskew);
 -		cp += toskew;
 -	}
 -}
 -
 -/*
 - * 16-bit unpacked samples => RGB
 - */
 -DECLARESepPutFunc(putRGBseparate16bittile)
 -{
 -	uint16 *wr = (uint16*) r;
 -	uint16 *wg = (uint16*) g;
 -	uint16 *wb = (uint16*) b;
 -	(void) img; (void) y; (void) a;
 -	while (h-- > 0) {
 -		for (x = 0; x < w; x++)
 -                    *cp++ = PACKW(*wr++,*wg++,*wb++);
 -		SKEW(wr, wg, wb, fromskew);
 -		cp += toskew;
 -	}
 -}
 -
 -/*
 - * 16-bit unpacked samples => RGBA w/ associated alpha
 - */
 -DECLARESepPutFunc(putRGBAAseparate16bittile)
 -{
 -	uint16 *wr = (uint16*) r;
 -	uint16 *wg = (uint16*) g;
 -	uint16 *wb = (uint16*) b;
 -	uint16 *wa = (uint16*) a;
 -	(void) img; (void) y;
 -	while (h-- > 0) {
 -		for (x = 0; x < w; x++)
 -                    *cp++ = PACKW4(*wr++,*wg++,*wb++,*wa++);
 -		SKEW4(wr, wg, wb, wa, fromskew);
 -		cp += toskew;
 -	}
 -}
 -
 -/*
 - * 16-bit unpacked samples => RGBA w/ unassociated alpha
 - */
 -DECLARESepPutFunc(putRGBUAseparate16bittile)
 -{
 -	uint16 *wr = (uint16*) r;
 -	uint16 *wg = (uint16*) g;
 -	uint16 *wb = (uint16*) b;
 -	uint16 *wa = (uint16*) a;
 -	(void) img; (void) y;
 -	while (h-- > 0) {
 -		uint32 r,g,b,a;
 -		for (x = w; x-- > 0;) {
 -                    a = W2B(*wa++);
 -                    r = (a*W2B(*wr++) + 127) / 255;
 -                    g = (a*W2B(*wg++) + 127) / 255;
 -                    b = (a*W2B(*wb++) + 127) / 255;
 -                    *cp++ = PACK4(r,g,b,a);
 -		}
 -		SKEW4(wr, wg, wb, wa, fromskew);
 -		cp += toskew;
 -	}
 -}
 -
 -/*
 - * 8-bit packed CIE L*a*b 1976 samples => RGB
 - */
 -DECLAREContigPutFunc(putcontig8bitCIELab)
 -{
 -	float X, Y, Z;
 -	uint32 r, g, b;
 -	(void) y;
 -	fromskew *= 3;
 -	while (h-- > 0) {
 -		for (x = w; x-- > 0;) {
 -			TIFFCIELabToXYZ(img->cielab,
 -					(unsigned char)pp[0],
 -					(signed char)pp[1],
 -					(signed char)pp[2],
 -					&X, &Y, &Z);
 -			TIFFXYZToRGB(img->cielab, X, Y, Z, &r, &g, &b);
 -			*cp++ = PACK(r, g, b);
 -			pp += 3;
 -		}
 -		cp += toskew;
 -		pp += fromskew;
 -	}
 -}
 -
 -/*
 - * YCbCr -> RGB conversion and packing routines.
 - */
 -
 -#define	YCbCrtoRGB(dst, Y) {						\
 -	uint32 r, g, b;							\
 -	TIFFYCbCrtoRGB(img->ycbcr, (Y), Cb, Cr, &r, &g, &b);		\
 -	dst = PACK(r, g, b);						\
 -}
 -
 -/*
 - * 8-bit packed YCbCr samples => RGB 
 - * This function is generic for different sampling sizes, 
 - * and can handle blocks sizes that aren't multiples of the
 - * sampling size.  However, it is substantially less optimized
 - * than the specific sampling cases.  It is used as a fallback
 - * for difficult blocks.
 - */
 -#ifdef notdef
 -static void putcontig8bitYCbCrGenericTile( 
 -    TIFFRGBAImage* img, 
 -    uint32* cp, 
 -    uint32 x, uint32 y, 
 -    uint32 w, uint32 h, 
 -    int32 fromskew, int32 toskew, 
 -    unsigned char* pp,
 -    int h_group, 
 -    int v_group )
 -
 -{
 -    uint32* cp1 = cp+w+toskew;
 -    uint32* cp2 = cp1+w+toskew;
 -    uint32* cp3 = cp2+w+toskew;
 -    int32 incr = 3*w+4*toskew;
 -    int32   Cb, Cr;
 -    int     group_size = v_group * h_group + 2;
 -
 -    (void) y;
 -    fromskew = (fromskew * group_size) / h_group;
 -
 -    for ( yy = 0; yy < h; yy++ )
 -    {
 -        unsigned char *pp_line;
 -        int     y_line_group = yy / v_group;
 -        int     y_remainder = yy - y_line_group * v_group;
 -
 -        pp_line = pp + v_line_group * 
 -
 -        
 -        for ( xx = 0; xx < w; xx++ )
 -        {
 -            Cb = pp
 -        }
 -    }
 -    for (; h >= 4; h -= 4) {
 -	x = w>>2;
 -	do {
 -	    Cb = pp[16];
 -	    Cr = pp[17];
 -
 -	    YCbCrtoRGB(cp [0], pp[ 0]);
 -	    YCbCrtoRGB(cp [1], pp[ 1]);
 -	    YCbCrtoRGB(cp [2], pp[ 2]);
 -	    YCbCrtoRGB(cp [3], pp[ 3]);
 -	    YCbCrtoRGB(cp1[0], pp[ 4]);
 -	    YCbCrtoRGB(cp1[1], pp[ 5]);
 -	    YCbCrtoRGB(cp1[2], pp[ 6]);
 -	    YCbCrtoRGB(cp1[3], pp[ 7]);
 -	    YCbCrtoRGB(cp2[0], pp[ 8]);
 -	    YCbCrtoRGB(cp2[1], pp[ 9]);
 -	    YCbCrtoRGB(cp2[2], pp[10]);
 -	    YCbCrtoRGB(cp2[3], pp[11]);
 -	    YCbCrtoRGB(cp3[0], pp[12]);
 -	    YCbCrtoRGB(cp3[1], pp[13]);
 -	    YCbCrtoRGB(cp3[2], pp[14]);
 -	    YCbCrtoRGB(cp3[3], pp[15]);
 -
 -	    cp += 4, cp1 += 4, cp2 += 4, cp3 += 4;
 -	    pp += 18;
 -	} while (--x);
 -	cp += incr, cp1 += incr, cp2 += incr, cp3 += incr;
 -	pp += fromskew;
 -    }
 -}
 -#endif
 -
 -/*
 - * 8-bit packed YCbCr samples w/ 4,4 subsampling => RGB
 - */
 -DECLAREContigPutFunc(putcontig8bitYCbCr44tile)
 -{
 -    uint32* cp1 = cp+w+toskew;
 -    uint32* cp2 = cp1+w+toskew;
 -    uint32* cp3 = cp2+w+toskew;
 -    int32 incr = 3*w+4*toskew;
 -
 -    (void) y;
 -    /* adjust fromskew */
 -    fromskew = (fromskew * 18) / 4;
 -    if ((h & 3) == 0 && (w & 3) == 0) {				        
 -        for (; h >= 4; h -= 4) {
 -            x = w>>2;
 -            do {
 -                int32 Cb = pp[16];
 -                int32 Cr = pp[17];
 -
 -                YCbCrtoRGB(cp [0], pp[ 0]);
 -                YCbCrtoRGB(cp [1], pp[ 1]);
 -                YCbCrtoRGB(cp [2], pp[ 2]);
 -                YCbCrtoRGB(cp [3], pp[ 3]);
 -                YCbCrtoRGB(cp1[0], pp[ 4]);
 -                YCbCrtoRGB(cp1[1], pp[ 5]);
 -                YCbCrtoRGB(cp1[2], pp[ 6]);
 -                YCbCrtoRGB(cp1[3], pp[ 7]);
 -                YCbCrtoRGB(cp2[0], pp[ 8]);
 -                YCbCrtoRGB(cp2[1], pp[ 9]);
 -                YCbCrtoRGB(cp2[2], pp[10]);
 -                YCbCrtoRGB(cp2[3], pp[11]);
 -                YCbCrtoRGB(cp3[0], pp[12]);
 -                YCbCrtoRGB(cp3[1], pp[13]);
 -                YCbCrtoRGB(cp3[2], pp[14]);
 -                YCbCrtoRGB(cp3[3], pp[15]);
 -
 -                cp += 4, cp1 += 4, cp2 += 4, cp3 += 4;
 -                pp += 18;
 -            } while (--x);
 -            cp += incr, cp1 += incr, cp2 += incr, cp3 += incr;
 -            pp += fromskew;
 -        }
 -    } else {
 -        while (h > 0) {
 -            for (x = w; x > 0;) {
 -                int32 Cb = pp[16];
 -                int32 Cr = pp[17];
 -                switch (x) {
 -                default:
 -                    switch (h) {
 -                    default: YCbCrtoRGB(cp3[3], pp[15]); /* FALLTHROUGH */
 -                    case 3:  YCbCrtoRGB(cp2[3], pp[11]); /* FALLTHROUGH */
 -                    case 2:  YCbCrtoRGB(cp1[3], pp[ 7]); /* FALLTHROUGH */
 -                    case 1:  YCbCrtoRGB(cp [3], pp[ 3]); /* FALLTHROUGH */
 -                    }                                    /* FALLTHROUGH */
 -                case 3:
 -                    switch (h) {
 -                    default: YCbCrtoRGB(cp3[2], pp[14]); /* FALLTHROUGH */
 -                    case 3:  YCbCrtoRGB(cp2[2], pp[10]); /* FALLTHROUGH */
 -                    case 2:  YCbCrtoRGB(cp1[2], pp[ 6]); /* FALLTHROUGH */
 -                    case 1:  YCbCrtoRGB(cp [2], pp[ 2]); /* FALLTHROUGH */
 -                    }                                    /* FALLTHROUGH */
 -                case 2:
 -                    switch (h) {
 -                    default: YCbCrtoRGB(cp3[1], pp[13]); /* FALLTHROUGH */
 -                    case 3:  YCbCrtoRGB(cp2[1], pp[ 9]); /* FALLTHROUGH */
 -                    case 2:  YCbCrtoRGB(cp1[1], pp[ 5]); /* FALLTHROUGH */
 -                    case 1:  YCbCrtoRGB(cp [1], pp[ 1]); /* FALLTHROUGH */
 -                    }                                    /* FALLTHROUGH */
 -                case 1:
 -                    switch (h) {
 -                    default: YCbCrtoRGB(cp3[0], pp[12]); /* FALLTHROUGH */
 -                    case 3:  YCbCrtoRGB(cp2[0], pp[ 8]); /* FALLTHROUGH */
 -                    case 2:  YCbCrtoRGB(cp1[0], pp[ 4]); /* FALLTHROUGH */
 -                    case 1:  YCbCrtoRGB(cp [0], pp[ 0]); /* FALLTHROUGH */
 -                    }                                    /* FALLTHROUGH */
 -                }
 -                if (x < 4) {
 -                    cp += x; cp1 += x; cp2 += x; cp3 += x;
 -                    x = 0;
 -                }
 -                else {
 -                    cp += 4; cp1 += 4; cp2 += 4; cp3 += 4;
 -                    x -= 4;
 -                }
 -                pp += 18;
 -            }
 -            if (h <= 4)
 -                break;
 -            h -= 4;
 -            cp += incr, cp1 += incr, cp2 += incr, cp3 += incr;
 -            pp += fromskew;
 -        }
 -    }
 -}
 -
 -/*
 - * 8-bit packed YCbCr samples w/ 4,2 subsampling => RGB
 - */
 -DECLAREContigPutFunc(putcontig8bitYCbCr42tile)
 -{
 -    uint32* cp1 = cp+w+toskew;
 -    int32 incr = 2*toskew+w;
 -
 -    (void) y;
 -    fromskew = (fromskew * 10) / 4;
 -    if ((h & 3) == 0 && (w & 1) == 0) {
 -        for (; h >= 2; h -= 2) {
 -            x = w>>2;
 -            do {
 -                int32 Cb = pp[8];
 -                int32 Cr = pp[9];
 -                
 -                YCbCrtoRGB(cp [0], pp[0]);
 -                YCbCrtoRGB(cp [1], pp[1]);
 -                YCbCrtoRGB(cp [2], pp[2]);
 -                YCbCrtoRGB(cp [3], pp[3]);
 -                YCbCrtoRGB(cp1[0], pp[4]);
 -                YCbCrtoRGB(cp1[1], pp[5]);
 -                YCbCrtoRGB(cp1[2], pp[6]);
 -                YCbCrtoRGB(cp1[3], pp[7]);
 -                
 -                cp += 4, cp1 += 4;
 -                pp += 10;
 -            } while (--x);
 -            cp += incr, cp1 += incr;
 -            pp += fromskew;
 -        }
 -    } else {
 -        while (h > 0) {
 -            for (x = w; x > 0;) {
 -                int32 Cb = pp[8];
 -                int32 Cr = pp[9];
 -                switch (x) {
 -                default:
 -                    switch (h) {
 -                    default: YCbCrtoRGB(cp1[3], pp[ 7]); /* FALLTHROUGH */
 -                    case 1:  YCbCrtoRGB(cp [3], pp[ 3]); /* FALLTHROUGH */
 -                    }                                    /* FALLTHROUGH */
 -                case 3:
 -                    switch (h) {
 -                    default: YCbCrtoRGB(cp1[2], pp[ 6]); /* FALLTHROUGH */
 -                    case 1:  YCbCrtoRGB(cp [2], pp[ 2]); /* FALLTHROUGH */
 -                    }                                    /* FALLTHROUGH */
 -                case 2:
 -                    switch (h) {
 -                    default: YCbCrtoRGB(cp1[1], pp[ 5]); /* FALLTHROUGH */
 -                    case 1:  YCbCrtoRGB(cp [1], pp[ 1]); /* FALLTHROUGH */
 -                    }                                    /* FALLTHROUGH */
 -                case 1:
 -                    switch (h) {
 -                    default: YCbCrtoRGB(cp1[0], pp[ 4]); /* FALLTHROUGH */
 -                    case 1:  YCbCrtoRGB(cp [0], pp[ 0]); /* FALLTHROUGH */
 -                    }                                    /* FALLTHROUGH */
 -                }
 -                if (x < 4) {
 -                    cp += x; cp1 += x;
 -                    x = 0;
 -                }
 -                else {
 -                    cp += 4; cp1 += 4;
 -                    x -= 4;
 -                }
 -                pp += 10;
 -            }
 -            if (h <= 2)
 -                break;
 -            h -= 2;
 -            cp += incr, cp1 += incr;
 -            pp += fromskew;
 -        }
 -    }
 -}
 -
 -/*
 - * 8-bit packed YCbCr samples w/ 4,1 subsampling => RGB
 - */
 -DECLAREContigPutFunc(putcontig8bitYCbCr41tile)
 -{
 -    (void) y;
 -    /* XXX adjust fromskew */
 -    do {
 -	x = w>>2;
 -	do {
 -	    int32 Cb = pp[4];
 -	    int32 Cr = pp[5];
 -
 -	    YCbCrtoRGB(cp [0], pp[0]);
 -	    YCbCrtoRGB(cp [1], pp[1]);
 -	    YCbCrtoRGB(cp [2], pp[2]);
 -	    YCbCrtoRGB(cp [3], pp[3]);
 -
 -	    cp += 4;
 -	    pp += 6;
 -	} while (--x);
 -
 -        if ( (w&3) != 0 )
 -        {
 -	    int32 Cb = pp[4];
 -	    int32 Cr = pp[5];
 -
 -            switch( (w&3) ) {
 -              case 3: YCbCrtoRGB(cp [2], pp[2]);
 -              case 2: YCbCrtoRGB(cp [1], pp[1]);
 -              case 1: YCbCrtoRGB(cp [0], pp[0]);
 -              case 0: break;
 -            }
 -
 -            cp += (w&3);
 -            pp += 6;
 -        }
 -
 -	cp += toskew;
 -	pp += fromskew;
 -    } while (--h);
 -
 -}
 -
 -/*
 - * 8-bit packed YCbCr samples w/ 2,2 subsampling => RGB
 - */
 -DECLAREContigPutFunc(putcontig8bitYCbCr22tile)
 -{
 -	uint32* cp2;
 -	int32 incr = 2*toskew+w;
 -	(void) y;
 -	fromskew = (fromskew / 2) * 6;
 -	cp2 = cp+w+toskew;
 -	while (h>=2) {
 -		x = w;
 -		while (x>=2) {
 -			uint32 Cb = pp[4];
 -			uint32 Cr = pp[5];
 -			YCbCrtoRGB(cp[0], pp[0]);
 -			YCbCrtoRGB(cp[1], pp[1]);
 -			YCbCrtoRGB(cp2[0], pp[2]);
 -			YCbCrtoRGB(cp2[1], pp[3]);
 -			cp += 2;
 -			cp2 += 2;
 -			pp += 6;
 -			x -= 2;
 -		}
 -		if (x==1) {
 -			uint32 Cb = pp[4];
 -			uint32 Cr = pp[5];
 -			YCbCrtoRGB(cp[0], pp[0]);
 -			YCbCrtoRGB(cp2[0], pp[2]);
 -			cp ++ ;
 -			cp2 ++ ;
 -			pp += 6;
 -		}
 -		cp += incr;
 -		cp2 += incr;
 -		pp += fromskew;
 -		h-=2;
 -	}
 -	if (h==1) {
 -		x = w;
 -		while (x>=2) {
 -			uint32 Cb = pp[4];
 -			uint32 Cr = pp[5];
 -			YCbCrtoRGB(cp[0], pp[0]);
 -			YCbCrtoRGB(cp[1], pp[1]);
 -			cp += 2;
 -			cp2 += 2;
 -			pp += 6;
 -			x -= 2;
 -		}
 -		if (x==1) {
 -			uint32 Cb = pp[4];
 -			uint32 Cr = pp[5];
 -			YCbCrtoRGB(cp[0], pp[0]);
 -		}
 -	}
 -}
 -
 -/*
 - * 8-bit packed YCbCr samples w/ 2,1 subsampling => RGB
 - */
 -DECLAREContigPutFunc(putcontig8bitYCbCr21tile)
 -{
 -	(void) y;
 -	fromskew = (fromskew * 4) / 2;
 -	do {
 -		x = w>>1;
 -		do {
 -			int32 Cb = pp[2];
 -			int32 Cr = pp[3];
 -
 -			YCbCrtoRGB(cp[0], pp[0]);
 -			YCbCrtoRGB(cp[1], pp[1]);
 -
 -			cp += 2;
 -			pp += 4;
 -		} while (--x);
 -
 -		if ( (w&1) != 0 )
 -		{
 -			int32 Cb = pp[2];
 -			int32 Cr = pp[3];
 -
 -			YCbCrtoRGB(cp[0], pp[0]);
 -
 -			cp += 1;
 -			pp += 4;
 -		}
 -
 -		cp += toskew;
 -		pp += fromskew;
 -	} while (--h);
 -}
 -
 -/*
 - * 8-bit packed YCbCr samples w/ 1,2 subsampling => RGB
 - */
 -DECLAREContigPutFunc(putcontig8bitYCbCr12tile)
 -{
 -	uint32* cp2;
 -	int32 incr = 2*toskew+w;
 -	(void) y;
 -	fromskew = (fromskew / 2) * 4;
 -	cp2 = cp+w+toskew;
 -	while (h>=2) {
 -		x = w;
 -		do {
 -			uint32 Cb = pp[2];
 -			uint32 Cr = pp[3];
 -			YCbCrtoRGB(cp[0], pp[0]);
 -			YCbCrtoRGB(cp2[0], pp[1]);
 -			cp ++;
 -			cp2 ++;
 -			pp += 4;
 -		} while (--x);
 -		cp += incr;
 -		cp2 += incr;
 -		pp += fromskew;
 -		h-=2;
 -	}
 -	if (h==1) {
 -		x = w;
 -		do {
 -			uint32 Cb = pp[2];
 -			uint32 Cr = pp[3];
 -			YCbCrtoRGB(cp[0], pp[0]);
 -			cp ++;
 -			pp += 4;
 -		} while (--x);
 -	}
 -}
 -
 -/*
 - * 8-bit packed YCbCr samples w/ no subsampling => RGB
 - */
 -DECLAREContigPutFunc(putcontig8bitYCbCr11tile)
 -{
 -	(void) y;
 -	fromskew *= 3;
 -	do {
 -		x = w; /* was x = w>>1; patched 2000/09/25 warmerda@home.com */
 -		do {
 -			int32 Cb = pp[1];
 -			int32 Cr = pp[2];
 -
 -			YCbCrtoRGB(*cp++, pp[0]);
 -
 -			pp += 3;
 -		} while (--x);
 -		cp += toskew;
 -		pp += fromskew;
 -	} while (--h);
 -}
 -
 -/*
 - * 8-bit packed YCbCr samples w/ no subsampling => RGB
 - */
 -DECLARESepPutFunc(putseparate8bitYCbCr11tile)
 -{
 -	(void) y;
 -	(void) a;
 -	/* TODO: naming of input vars is still off, change obfuscating declaration inside define, or resolve obfuscation */
 -	while (h-- > 0) {
 -		x = w;
 -		do {
 -			uint32 dr, dg, db;
 -			TIFFYCbCrtoRGB(img->ycbcr,*r++,*g++,*b++,&dr,&dg,&db);
 -			*cp++ = PACK(dr,dg,db);
 -		} while (--x);
 -		SKEW(r, g, b, fromskew);
 -		cp += toskew;
 -	}
 -}
 -#undef YCbCrtoRGB
 -
 -static int
 -initYCbCrConversion(TIFFRGBAImage* img)
 -{
 -	static char module[] = "initYCbCrConversion";
 -
 -	float *luma, *refBlackWhite;
 -
 -	if (img->ycbcr == NULL) {
 -		img->ycbcr = (TIFFYCbCrToRGB*) _TIFFmalloc(
 -		    TIFFroundup(sizeof (TIFFYCbCrToRGB), sizeof (long))
 -		    + 4*256*sizeof (TIFFRGBValue)
 -		    + 2*256*sizeof (int)
 -		    + 3*256*sizeof (int32)
 -		    );
 -		if (img->ycbcr == NULL) {
 -			TIFFErrorExt(img->tif->tif_clientdata, module,
 -			    "No space for YCbCr->RGB conversion state");
 -			return (0);
 -		}
 -	}
 -
 -	TIFFGetFieldDefaulted(img->tif, TIFFTAG_YCBCRCOEFFICIENTS, &luma);
 -	TIFFGetFieldDefaulted(img->tif, TIFFTAG_REFERENCEBLACKWHITE,
 -	    &refBlackWhite);
 -	if (TIFFYCbCrToRGBInit(img->ycbcr, luma, refBlackWhite) < 0)
 -		return(0);
 -	return (1);
 -}
 -
 -static tileContigRoutine
 -initCIELabConversion(TIFFRGBAImage* img)
 -{
 -	static char module[] = "initCIELabConversion";
 -
 -	float   *whitePoint;
 -	float   refWhite[3];
 -
 -	if (!img->cielab) {
 -		img->cielab = (TIFFCIELabToRGB *)
 -			_TIFFmalloc(sizeof(TIFFCIELabToRGB));
 -		if (!img->cielab) {
 -			TIFFErrorExt(img->tif->tif_clientdata, module,
 -			    "No space for CIE L*a*b*->RGB conversion state.");
 -			return NULL;
 -		}
 -	}
 -
 -	TIFFGetFieldDefaulted(img->tif, TIFFTAG_WHITEPOINT, &whitePoint);
 -	refWhite[1] = 100.0F;
 -	refWhite[0] = whitePoint[0] / whitePoint[1] * refWhite[1];
 -	refWhite[2] = (1.0F - whitePoint[0] - whitePoint[1])
 -		      / whitePoint[1] * refWhite[1];
 -	if (TIFFCIELabToRGBInit(img->cielab, &display_sRGB, refWhite) < 0) {
 -		TIFFErrorExt(img->tif->tif_clientdata, module,
 -		    "Failed to initialize CIE L*a*b*->RGB conversion state.");
 -		_TIFFfree(img->cielab);
 -		return NULL;
 -	}
 -
 -	return putcontig8bitCIELab;
 -}
 -
 -/*
 - * Greyscale images with less than 8 bits/sample are handled
 - * with a table to avoid lots of shifts and masks.  The table
 - * is setup so that put*bwtile (below) can retrieve 8/bitspersample
 - * pixel values simply by indexing into the table with one
 - * number.
 - */
 -static int
 -makebwmap(TIFFRGBAImage* img)
 -{
 -    TIFFRGBValue* Map = img->Map;
 -    int bitspersample = img->bitspersample;
 -    int nsamples = 8 / bitspersample;
 -    int i;
 -    uint32* p;
 -
 -    if ( nsamples == 0 )
 -        nsamples = 1;
 -
 -    img->BWmap = (uint32**) _TIFFmalloc(
 -	256*sizeof (uint32 *)+(256*nsamples*sizeof(uint32)));
 -    if (img->BWmap == NULL) {
 -		TIFFErrorExt(img->tif->tif_clientdata, TIFFFileName(img->tif), "No space for B&W mapping table");
 -		return (0);
 -    }
 -    p = (uint32*)(img->BWmap + 256);
 -    for (i = 0; i < 256; i++) {
 -	TIFFRGBValue c;
 -	img->BWmap[i] = p;
 -	switch (bitspersample) {
 -#define	GREY(x)	c = Map[x]; *p++ = PACK(c,c,c);
 -	case 1:
 -	    GREY(i>>7);
 -	    GREY((i>>6)&1);
 -	    GREY((i>>5)&1);
 -	    GREY((i>>4)&1);
 -	    GREY((i>>3)&1);
 -	    GREY((i>>2)&1);
 -	    GREY((i>>1)&1);
 -	    GREY(i&1);
 -	    break;
 -	case 2:
 -	    GREY(i>>6);
 -	    GREY((i>>4)&3);
 -	    GREY((i>>2)&3);
 -	    GREY(i&3);
 -	    break;
 -	case 4:
 -	    GREY(i>>4);
 -	    GREY(i&0xf);
 -	    break;
 -	case 8:
 -        case 16:
 -	    GREY(i);
 -	    break;
 -	}
 -#undef	GREY
 -    }
 -    return (1);
 -}
 -
 -/*
 - * Construct a mapping table to convert from the range
 - * of the data samples to [0,255] --for display.  This
 - * process also handles inverting B&W images when needed.
 - */ 
 -static int
 -setupMap(TIFFRGBAImage* img)
 -{
 -    int32 x, range;
 -
 -    range = (int32)((1L<<img->bitspersample)-1);
 -    
 -    /* treat 16 bit the same as eight bit */
 -    if ( img->bitspersample == 16 )
 -        range = (int32) 255;
 -
 -    img->Map = (TIFFRGBValue*) _TIFFmalloc((range+1) * sizeof (TIFFRGBValue));
 -    if (img->Map == NULL) {
 -		TIFFErrorExt(img->tif->tif_clientdata, TIFFFileName(img->tif),
 -			"No space for photometric conversion table");
 -		return (0);
 -    }
 -    if (img->photometric == PHOTOMETRIC_MINISWHITE) {
 -	for (x = 0; x <= range; x++)
 -	    img->Map[x] = (TIFFRGBValue) (((range - x) * 255) / range);
 -    } else {
 -	for (x = 0; x <= range; x++)
 -	    img->Map[x] = (TIFFRGBValue) ((x * 255) / range);
 -    }
 -    if (img->bitspersample <= 16 &&
 -	(img->photometric == PHOTOMETRIC_MINISBLACK ||
 -	 img->photometric == PHOTOMETRIC_MINISWHITE)) {
 -	/*
 -	 * Use photometric mapping table to construct
 -	 * unpacking tables for samples <= 8 bits.
 -	 */
 -	if (!makebwmap(img))
 -	    return (0);
 -	/* no longer need Map, free it */
 -	_TIFFfree(img->Map), img->Map = NULL;
 -    }
 -    return (1);
 -}
 -
 -static int
 -checkcmap(TIFFRGBAImage* img)
 -{
 -    uint16* r = img->redcmap;
 -    uint16* g = img->greencmap;
 -    uint16* b = img->bluecmap;
 -    long n = 1L<<img->bitspersample;
 -
 -    while (n-- > 0)
 -	if (*r++ >= 256 || *g++ >= 256 || *b++ >= 256)
 -	    return (16);
 -    return (8);
 -}
 -
 -static void
 -cvtcmap(TIFFRGBAImage* img)
 -{
 -    uint16* r = img->redcmap;
 -    uint16* g = img->greencmap;
 -    uint16* b = img->bluecmap;
 -    long i;
 -
 -    for (i = (1L<<img->bitspersample)-1; i >= 0; i--) {
 -#define	CVT(x)		((uint16)((x)>>8))
 -	r[i] = CVT(r[i]);
 -	g[i] = CVT(g[i]);
 -	b[i] = CVT(b[i]);
 -#undef	CVT
 -    }
 -}
 -
 -/*
 - * Palette images with <= 8 bits/sample are handled
 - * with a table to avoid lots of shifts and masks.  The table
 - * is setup so that put*cmaptile (below) can retrieve 8/bitspersample
 - * pixel values simply by indexing into the table with one
 - * number.
 - */
 -static int
 -makecmap(TIFFRGBAImage* img)
 -{
 -    int bitspersample = img->bitspersample;
 -    int nsamples = 8 / bitspersample;
 -    uint16* r = img->redcmap;
 -    uint16* g = img->greencmap;
 -    uint16* b = img->bluecmap;
 -    uint32 *p;
 -    int i;
 -
 -    img->PALmap = (uint32**) _TIFFmalloc(
 -	256*sizeof (uint32 *)+(256*nsamples*sizeof(uint32)));
 -    if (img->PALmap == NULL) {
 -		TIFFErrorExt(img->tif->tif_clientdata, TIFFFileName(img->tif), "No space for Palette mapping table");
 -		return (0);
 -	}
 -    p = (uint32*)(img->PALmap + 256);
 -    for (i = 0; i < 256; i++) {
 -	TIFFRGBValue c;
 -	img->PALmap[i] = p;
 -#define	CMAP(x)	c = (TIFFRGBValue) x; *p++ = PACK(r[c]&0xff, g[c]&0xff, b[c]&0xff);
 -	switch (bitspersample) {
 -	case 1:
 -	    CMAP(i>>7);
 -	    CMAP((i>>6)&1);
 -	    CMAP((i>>5)&1);
 -	    CMAP((i>>4)&1);
 -	    CMAP((i>>3)&1);
 -	    CMAP((i>>2)&1);
 -	    CMAP((i>>1)&1);
 -	    CMAP(i&1);
 -	    break;
 -	case 2:
 -	    CMAP(i>>6);
 -	    CMAP((i>>4)&3);
 -	    CMAP((i>>2)&3);
 -	    CMAP(i&3);
 -	    break;
 -	case 4:
 -	    CMAP(i>>4);
 -	    CMAP(i&0xf);
 -	    break;
 -	case 8:
 -	    CMAP(i);
 -	    break;
 -	}
 -#undef CMAP
 -    }
 -    return (1);
 -}
 -
 -/* 
 - * Construct any mapping table used
 - * by the associated put routine.
 - */
 -static int
 -buildMap(TIFFRGBAImage* img)
 -{
 -    switch (img->photometric) {
 -    case PHOTOMETRIC_RGB:
 -    case PHOTOMETRIC_YCBCR:
 -    case PHOTOMETRIC_SEPARATED:
 -	if (img->bitspersample == 8)
 -	    break;
 -	/* fall thru... */
 -    case PHOTOMETRIC_MINISBLACK:
 -    case PHOTOMETRIC_MINISWHITE:
 -	if (!setupMap(img))
 -	    return (0);
 -	break;
 -    case PHOTOMETRIC_PALETTE:
 -	/*
 -	 * Convert 16-bit colormap to 8-bit (unless it looks
 -	 * like an old-style 8-bit colormap).
 -	 */
 -	if (checkcmap(img) == 16)
 -	    cvtcmap(img);
 -	else
 -	    TIFFWarningExt(img->tif->tif_clientdata, TIFFFileName(img->tif), "Assuming 8-bit colormap");
 -	/*
 -	 * Use mapping table and colormap to construct
 -	 * unpacking tables for samples < 8 bits.
 -	 */
 -	if (img->bitspersample <= 8 && !makecmap(img))
 -	    return (0);
 -	break;
 -    }
 -    return (1);
 -}
 -
 -/*
 - * Select the appropriate conversion routine for packed data.
 - */
 -static int
 -PickContigCase(TIFFRGBAImage* img)
 -{
 -	img->get = TIFFIsTiled(img->tif) ? gtTileContig : gtStripContig;
 -	img->put.contig = NULL;
 -	switch (img->photometric) {
 -		case PHOTOMETRIC_RGB:
 -			switch (img->bitspersample) {
 -				case 8:
 -					if (img->alpha == EXTRASAMPLE_ASSOCALPHA)
 -						img->put.contig = putRGBAAcontig8bittile;
 -					else if (img->alpha == EXTRASAMPLE_UNASSALPHA)
 -					{
 -                                            img->put.contig = putRGBUAcontig8bittile;
 -					}
 -					else
 -                                            img->put.contig = putRGBcontig8bittile;
 -					break;
 -				case 16:
 -					if (img->alpha == EXTRASAMPLE_ASSOCALPHA)
 -					{
 -                                            img->put.contig = putRGBAAcontig16bittile;
 -					}
 -					else if (img->alpha == EXTRASAMPLE_UNASSALPHA)
 -					{
 -                                            img->put.contig = putRGBUAcontig16bittile;
 -					}
 -					else
 -					{
 -                                            img->put.contig = putRGBcontig16bittile;
 -					}
 -					break;
 -			}
 -			break;
 -		case PHOTOMETRIC_SEPARATED:
 -			if (buildMap(img)) {
 -				if (img->bitspersample == 8) {
 -					if (!img->Map)
 -						img->put.contig = putRGBcontig8bitCMYKtile;
 -					else
 -						img->put.contig = putRGBcontig8bitCMYKMaptile;
 -				}
 -			}
 -			break;
 -		case PHOTOMETRIC_PALETTE:
 -			if (buildMap(img)) {
 -				switch (img->bitspersample) {
 -					case 8:
 -						img->put.contig = put8bitcmaptile;
 -						break;
 -					case 4:
 -						img->put.contig = put4bitcmaptile;
 -						break;
 -					case 2:
 -						img->put.contig = put2bitcmaptile;
 -						break;
 -					case 1:
 -						img->put.contig = put1bitcmaptile;
 -						break;
 -				}
 -			}
 -			break;
 -		case PHOTOMETRIC_MINISWHITE:
 -		case PHOTOMETRIC_MINISBLACK:
 -			if (buildMap(img)) {
 -				switch (img->bitspersample) {
 -					case 16:
 -						img->put.contig = put16bitbwtile;
 -						break;
 -					case 8:
 -						img->put.contig = putgreytile;
 -						break;
 -					case 4:
 -						img->put.contig = put4bitbwtile;
 -						break;
 -					case 2:
 -						img->put.contig = put2bitbwtile;
 -						break;
 -					case 1:
 -						img->put.contig = put1bitbwtile;
 -						break;
 -				}
 -			}
 -			break;
 -		case PHOTOMETRIC_YCBCR:
 -			if ((img->bitspersample==8) && (img->samplesperpixel==3))
 -			{
 -				if (initYCbCrConversion(img)!=0)
 -				{
 -					/*
 -					 * The 6.0 spec says that subsampling must be
 -					 * one of 1, 2, or 4, and that vertical subsampling
 -					 * must always be <= horizontal subsampling; so
 -					 * there are only a few possibilities and we just
 -					 * enumerate the cases.
 -					 * Joris: added support for the [1,2] case, nonetheless, to accomodate
 -					 * some OJPEG files
 -					 */
 -					uint16 SubsamplingHor;
 -					uint16 SubsamplingVer;
 -					TIFFGetFieldDefaulted(img->tif, TIFFTAG_YCBCRSUBSAMPLING, &SubsamplingHor, &SubsamplingVer);
 -					switch ((SubsamplingHor<<4)|SubsamplingVer) {
 -						case 0x44:
 -							img->put.contig = putcontig8bitYCbCr44tile;
 -							break;
 -						case 0x42:
 -							img->put.contig = putcontig8bitYCbCr42tile;
 -							break;
 -						case 0x41:
 -							img->put.contig = putcontig8bitYCbCr41tile;
 -							break;
 -						case 0x22:
 -							img->put.contig = putcontig8bitYCbCr22tile;
 -							break;
 -						case 0x21:
 -							img->put.contig = putcontig8bitYCbCr21tile;
 -							break;
 -						case 0x12:
 -							img->put.contig = putcontig8bitYCbCr12tile;
 -							break;
 -						case 0x11:
 -							img->put.contig = putcontig8bitYCbCr11tile;
 -							break;
 -					}
 -				}
 -			}
 -			break;
 -		case PHOTOMETRIC_CIELAB:
 -			if (buildMap(img)) {
 -				if (img->bitspersample == 8)
 -					img->put.contig = initCIELabConversion(img);
 -				break;
 -			}
 -	}
 -	return ((img->get!=NULL) && (img->put.contig!=NULL));
 -}
 -
 -/*
 - * Select the appropriate conversion routine for unpacked data.
 - *
 - * NB: we assume that unpacked single channel data is directed
 - *	 to the "packed routines.
 - */
 -static int
 -PickSeparateCase(TIFFRGBAImage* img)
 -{
 -	img->get = TIFFIsTiled(img->tif) ? gtTileSeparate : gtStripSeparate;
 -	img->put.separate = NULL;
 -	switch (img->photometric) {
 -		case PHOTOMETRIC_RGB:
 -			switch (img->bitspersample) {
 -				case 8:
 -					if (img->alpha == EXTRASAMPLE_ASSOCALPHA)
 -						img->put.separate = putRGBAAseparate8bittile;
 -					else if (img->alpha == EXTRASAMPLE_UNASSALPHA)
 -					{
 -                                            img->put.separate = putRGBUAseparate8bittile;
 -					}
 -					else
 -						img->put.separate = putRGBseparate8bittile;
 -					break;
 -				case 16:
 -					if (img->alpha == EXTRASAMPLE_ASSOCALPHA)
 -					{
 -                                            img->put.separate = putRGBAAseparate16bittile;
 -					}
 -					else if (img->alpha == EXTRASAMPLE_UNASSALPHA)
 -					{
 -                                            img->put.separate = putRGBUAseparate16bittile;
 -					}
 -					else
 -					{
 -                                            img->put.separate = putRGBseparate16bittile;
 -					}
 -					break;
 -			}
 -			break;
 -		case PHOTOMETRIC_YCBCR:
 -			if ((img->bitspersample==8) && (img->samplesperpixel==3))
 -			{
 -				if (initYCbCrConversion(img)!=0)
 -				{
 -					uint16 hs, vs;
 -					TIFFGetFieldDefaulted(img->tif, TIFFTAG_YCBCRSUBSAMPLING, &hs, &vs);
 -					switch ((hs<<4)|vs) {
 -						case 0x11:
 -							img->put.separate = putseparate8bitYCbCr11tile;
 -							break;
 -						/* TODO: add other cases here */
 -					}
 -				}
 -			}
 -			break;
 -	}
 -	return ((img->get!=NULL) && (img->put.separate!=NULL));
 -}
 -
 -/*
 - * Read a whole strip off data from the file, and convert to RGBA form.
 - * If this is the last strip, then it will only contain the portion of
 - * the strip that is actually within the image space.  The result is
 - * organized in bottom to top form.
 - */
 -
 -
 -int
 -TIFFReadRGBAStrip(TIFF* tif, uint32 row, uint32 * raster )
 -
 -{
 -    char 	emsg[1024] = "";
 -    TIFFRGBAImage img;
 -    int 	ok;
 -    uint32	rowsperstrip, rows_to_read;
 -
 -    if ( TIFFIsTiled( tif ) )
 -    {
 -		TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif),
 -                  "Can't use TIFFReadRGBAStrip() with tiled file.");
 -	return (0);
 -    }
 -    
 -    TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip);
 -    if ( (row % rowsperstrip) != 0 )
 -    {
 -		TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif),
 -				"Row passed to TIFFReadRGBAStrip() must be first in a strip.");
 -		return (0);
 -    }
 -
 -    if (TIFFRGBAImageOK(tif, emsg) && TIFFRGBAImageBegin(&img, tif, 0, emsg)) {
 -
 -        img.row_offset = row;
 -        img.col_offset = 0;
 -
 -        if ( row + rowsperstrip > img.height )
 -            rows_to_read = img.height - row;
 -        else
 -            rows_to_read = rowsperstrip;
 -        
 -	ok = TIFFRGBAImageGet(&img, raster, img.width, rows_to_read );
 -        
 -	TIFFRGBAImageEnd(&img);
 -    } else {
 -		TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "%s", emsg);
 -		ok = 0;
 -    }
 -    
 -    return (ok);
 -}
 -
 -/*
 - * Read a whole tile off data from the file, and convert to RGBA form.
 - * The returned RGBA data is organized from bottom to top of tile,
 - * and may include zeroed areas if the tile extends off the image.
 - */
 -
 -int
 -TIFFReadRGBATile(TIFF* tif, uint32 col, uint32 row, uint32 * raster)
 -
 -{
 -    char 	emsg[1024] = "";
 -    TIFFRGBAImage img;
 -    int 	ok;
 -    uint32	tile_xsize, tile_ysize;
 -    uint32	read_xsize, read_ysize;
 -    uint32	i_row;
 -
 -    /*
 -     * Verify that our request is legal - on a tile file, and on a
 -     * tile boundary.
 -     */
 -    
 -    if ( !TIFFIsTiled( tif ) )
 -    {
 -		TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif),
 -				  "Can't use TIFFReadRGBATile() with stripped file.");
 -		return (0);
 -    }
 -    
 -    TIFFGetFieldDefaulted(tif, TIFFTAG_TILEWIDTH, &tile_xsize);
 -    TIFFGetFieldDefaulted(tif, TIFFTAG_TILELENGTH, &tile_ysize);
 -    if ( (col % tile_xsize) != 0 || (row % tile_ysize) != 0 )
 -    {
 -		TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif),
 -                  "Row/col passed to TIFFReadRGBATile() must be top"
 -                  "left corner of a tile.");
 -	return (0);
 -    }
 -
 -    /*
 -     * Setup the RGBA reader.
 -     */
 -    
 -    if (!TIFFRGBAImageOK(tif, emsg) 
 -	|| !TIFFRGBAImageBegin(&img, tif, 0, emsg)) {
 -	    TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "%s", emsg);
 -	    return( 0 );
 -    }
 -
 -    /*
 -     * The TIFFRGBAImageGet() function doesn't allow us to get off the
 -     * edge of the image, even to fill an otherwise valid tile.  So we
 -     * figure out how much we can read, and fix up the tile buffer to
 -     * a full tile configuration afterwards.
 -     */
 -
 -    if ( row + tile_ysize > img.height )
 -        read_ysize = img.height - row;
 -    else
 -        read_ysize = tile_ysize;
 -    
 -    if ( col + tile_xsize > img.width )
 -        read_xsize = img.width - col;
 -    else
 -        read_xsize = tile_xsize;
 -
 -    /*
 -     * Read the chunk of imagery.
 -     */
 -    
 -    img.row_offset = row;
 -    img.col_offset = col;
 -
 -    ok = TIFFRGBAImageGet(&img, raster, read_xsize, read_ysize );
 -        
 -    TIFFRGBAImageEnd(&img);
 -
 -    /*
 -     * If our read was incomplete we will need to fix up the tile by
 -     * shifting the data around as if a full tile of data is being returned.
 -     *
 -     * This is all the more complicated because the image is organized in
 -     * bottom to top format. 
 -     */
 -
 -    if ( read_xsize == tile_xsize && read_ysize == tile_ysize )
 -        return( ok );
 -
 -    for ( i_row = 0; i_row < read_ysize; i_row++ ) {
 -        memmove( raster + (tile_ysize - i_row - 1) * tile_xsize,
 -                 raster + (read_ysize - i_row - 1) * read_xsize,
 -                 read_xsize * sizeof(uint32) );
 -        _TIFFmemset( raster + (tile_ysize - i_row - 1) * tile_xsize+read_xsize,
 -                     0, sizeof(uint32) * (tile_xsize - read_xsize) );
 -    }
 -
 -    for ( i_row = read_ysize; i_row < tile_ysize; i_row++ ) {
 -        _TIFFmemset( raster + (tile_ysize - i_row - 1) * tile_xsize,
 -                     0, sizeof(uint32) * tile_xsize );
 -    }
 -
 -    return (ok);
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_jbig.c b/plugins/FreeImage/Source/LibTIFF/tif_jbig.c deleted file mode 100644 index c779c9b0f6..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_jbig.c +++ /dev/null @@ -1,385 +0,0 @@ -/* $Id: tif_jbig.c,v 1.23 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * JBIG Compression Algorithm Support.
 - * Contributed by Lee Howard <faxguy@deanox.com>
 - * 
 - */
 -
 -#include "tiffiop.h"
 -
 -#ifdef JBIG_SUPPORT
 -#include "jbig.h"
 -
 -typedef struct
 -{
 -        uint32  recvparams;     /* encoded Class 2 session params             */
 -        char*   subaddress;     /* subaddress string                          */
 -        uint32  recvtime;       /* time spend receiving in seconds            */
 -        char*   faxdcs;         /* encoded fax parameters (DCS, Table 2/T.30) */
 -
 -        TIFFVGetMethod vgetparent;
 -        TIFFVSetMethod vsetparent;
 -} JBIGState;
 -
 -#define GetJBIGState(tif) ((JBIGState*)(tif)->tif_data)
 -
 -#define FIELD_RECVPARAMS        (FIELD_CODEC+0)
 -#define FIELD_SUBADDRESS        (FIELD_CODEC+1)
 -#define FIELD_RECVTIME          (FIELD_CODEC+2)
 -#define FIELD_FAXDCS            (FIELD_CODEC+3)
 -
 -static const TIFFFieldInfo jbigFieldInfo[] = 
 -{
 -        {TIFFTAG_FAXRECVPARAMS,  1,  1, TIFF_LONG,  FIELD_RECVPARAMS, TRUE, FALSE, "FaxRecvParams"},
 -        {TIFFTAG_FAXSUBADDRESS, -1, -1, TIFF_ASCII, FIELD_SUBADDRESS, TRUE, FALSE, "FaxSubAddress"},
 -        {TIFFTAG_FAXRECVTIME,    1,  1, TIFF_LONG,  FIELD_RECVTIME,   TRUE, FALSE, "FaxRecvTime"},
 -        {TIFFTAG_FAXDCS,        -1, -1, TIFF_ASCII, FIELD_FAXDCS,     TRUE, FALSE, "FaxDcs"},
 -};
 -
 -static int JBIGSetupDecode(TIFF* tif)
 -{
 -        if (TIFFNumberOfStrips(tif) != 1)
 -        {
 -                TIFFError("JBIG", "Multistrip images not supported in decoder");
 -                return 0;
 -        }
 -
 -        return 1;
 -}
 -
 -static int JBIGDecode(TIFF* tif, tidata_t buffer, tsize_t size, tsample_t s)
 -{
 -        struct jbg_dec_state decoder;
 -        int decodeStatus = 0;
 -        unsigned char* pImage = NULL;
 -	(void) size, (void) s;
 -
 -        if (isFillOrder(tif, tif->tif_dir.td_fillorder))
 -        {
 -                TIFFReverseBits(tif->tif_rawdata, tif->tif_rawdatasize);
 -        }
 -
 -        jbg_dec_init(&decoder);
 -
 -#if defined(HAVE_JBG_NEWLEN)
 -        jbg_newlen(tif->tif_rawdata, tif->tif_rawdatasize);
 -        /*
 -         * I do not check the return status of jbg_newlen because even if this
 -         * function fails it does not necessarily mean that decoding the image
 -         * will fail.  It is generally only needed for received fax images
 -         * that do not contain the actual length of the image in the BIE
 -         * header.  I do not log when an error occurs because that will cause
 -         * problems when converting JBIG encoded TIFF's to 
 -         * PostScript.  As long as the actual image length is contained in the
 -         * BIE header jbg_dec_in should succeed.
 -         */
 -#endif /* HAVE_JBG_NEWLEN */
 -
 -        decodeStatus = jbg_dec_in(&decoder, tif->tif_rawdata,
 -                                  tif->tif_rawdatasize, NULL);
 -        if (JBG_EOK != decodeStatus)
 -        {
 -		/*
 -		 * XXX: JBG_EN constant was defined in pre-2.0 releases of the
 -		 * JBIG-KIT. Since the 2.0 the error reporting functions were
 -		 * changed. We will handle both cases here.
 -		 */
 -                TIFFError("JBIG", "Error (%d) decoding: %s", decodeStatus,
 -#if defined(JBG_EN)
 -			  jbg_strerror(decodeStatus, JBG_EN)
 -#else
 -                          jbg_strerror(decodeStatus)
 -#endif
 -			 );
 -                return 0;
 -        }
 -        
 -        pImage = jbg_dec_getimage(&decoder, 0);
 -        _TIFFmemcpy(buffer, pImage, jbg_dec_getsize(&decoder));
 -        jbg_dec_free(&decoder);
 -        return 1;
 -}
 -
 -static int JBIGSetupEncode(TIFF* tif)
 -{
 -        if (TIFFNumberOfStrips(tif) != 1)
 -        {
 -                TIFFError("JBIG", "Multistrip images not supported in encoder");
 -                return 0;
 -        }
 -
 -        return 1;
 -}
 -
 -static int JBIGCopyEncodedData(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s)
 -{
 -        (void) s;
 -        while (cc > 0) 
 -        {
 -                tsize_t n = cc;
 -
 -                if (tif->tif_rawcc + n > tif->tif_rawdatasize)
 -                {
 -                        n = tif->tif_rawdatasize - tif->tif_rawcc;
 -                }
 -
 -                assert(n > 0);
 -                _TIFFmemcpy(tif->tif_rawcp, pp, n);
 -                tif->tif_rawcp += n;
 -                tif->tif_rawcc += n;
 -                pp += n;
 -                cc -= n;
 -                if (tif->tif_rawcc >= tif->tif_rawdatasize &&
 -                    !TIFFFlushData1(tif))
 -                {
 -                        return (-1);
 -                }
 -        }
 -
 -        return (1);
 -}
 -
 -static void JBIGOutputBie(unsigned char* buffer, size_t len, void *userData)
 -{
 -        TIFF* tif = (TIFF*)userData;
 -
 -        if (isFillOrder(tif, tif->tif_dir.td_fillorder))
 -        {
 -                TIFFReverseBits(buffer, len);
 -        }
 -
 -        JBIGCopyEncodedData(tif, buffer, len, 0);
 -}
 -
 -static int JBIGEncode(TIFF* tif, tidata_t buffer, tsize_t size, tsample_t s)
 -{
 -        TIFFDirectory* dir = &tif->tif_dir;
 -        struct jbg_enc_state encoder;
 -
 -	(void) size, (void) s;
 -
 -        jbg_enc_init(&encoder, 
 -                     dir->td_imagewidth, 
 -                     dir->td_imagelength, 
 -                     1, 
 -                     &buffer,
 -                     JBIGOutputBie,
 -                     tif);
 -        /* 
 -         * jbg_enc_out does the "real" encoding.  As data is encoded,
 -         * JBIGOutputBie is called, which writes the data to the directory.
 -         */
 -        jbg_enc_out(&encoder);
 -        jbg_enc_free(&encoder);
 -
 -        return 1;
 -}
 -
 -static void JBIGCleanup(TIFF* tif)
 -{
 -        JBIGState *sp = GetJBIGState(tif);
 -
 -        assert(sp != 0);
 -
 -        tif->tif_tagmethods.vgetfield = sp->vgetparent;
 -        tif->tif_tagmethods.vsetfield = sp->vsetparent;
 -
 -	_TIFFfree(tif->tif_data);
 -	tif->tif_data = NULL;
 -
 -	_TIFFSetDefaultCompressionState(tif);
 -}
 -
 -static void JBIGPrintDir(TIFF* tif, FILE* fd, long flags)
 -{
 -        JBIGState* codec = GetJBIGState(tif);
 -        (void)flags;
 -
 -        if (TIFFFieldSet(tif, FIELD_RECVPARAMS))
 -        {
 -                fprintf(fd, 
 -                        "  Fax Receive Parameters: %08lx\n",
 -                        (unsigned long)codec->recvparams);
 -        }
 -
 -        if (TIFFFieldSet(tif, FIELD_SUBADDRESS))
 -        {
 -                fprintf(fd, 
 -                        "  Fax SubAddress: %s\n", 
 -                        codec->subaddress);
 -        }
 -
 -        if (TIFFFieldSet(tif, FIELD_RECVTIME))
 -        {
 -                fprintf(fd, 
 -                        "  Fax Receive Time: %lu secs\n",
 -                        (unsigned long)codec->recvtime);
 -        }
 -
 -        if (TIFFFieldSet(tif, FIELD_FAXDCS))
 -        {
 -                fprintf(fd, 
 -                        "  Fax DCS: %s\n", 
 -                        codec->faxdcs);
 -        }
 -}
 -
 -static int JBIGVGetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -        JBIGState* codec = GetJBIGState(tif);
 -
 -        switch (tag)
 -        {
 -                case TIFFTAG_FAXRECVPARAMS:
 -                        *va_arg(ap, uint32*) = codec->recvparams;
 -                        break;
 -                
 -                case TIFFTAG_FAXSUBADDRESS:
 -                        *va_arg(ap, char**) = codec->subaddress;
 -                        break;
 -
 -                case TIFFTAG_FAXRECVTIME:
 -                        *va_arg(ap, uint32*) = codec->recvtime;
 -                        break;
 -
 -                case TIFFTAG_FAXDCS:
 -                        *va_arg(ap, char**) = codec->faxdcs;
 -                        break;
 -
 -                default:
 -                        return (*codec->vgetparent)(tif, tag, ap);
 -        }
 -
 -        return 1;
 -}
 -
 -static int JBIGVSetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -        JBIGState* codec = GetJBIGState(tif);
 -
 -        switch (tag)
 -        {
 -                case TIFFTAG_FAXRECVPARAMS:
 -                        codec->recvparams = va_arg(ap, uint32);
 -                        break;
 -
 -                case TIFFTAG_FAXSUBADDRESS:
 -                        _TIFFsetString(&codec->subaddress, va_arg(ap, char*));
 -                        break;
 -
 -                case TIFFTAG_FAXRECVTIME:
 -                        codec->recvtime = va_arg(ap, uint32);
 -                        break;
 -
 -                case TIFFTAG_FAXDCS:
 -                        _TIFFsetString(&codec->faxdcs, va_arg(ap, char*));
 -                        break;
 -
 -                default:
 -                        return (*codec->vsetparent)(tif, tag, ap);
 -        }
 -
 -        TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);
 -        tif->tif_flags |= TIFF_DIRTYDIRECT;
 -        return 1;
 -}
 -
 -int TIFFInitJBIG(TIFF* tif, int scheme)
 -{
 -        JBIGState* codec = NULL;
 -
 -	assert(scheme == COMPRESSION_JBIG);
 -
 -	/*
 -	 * Merge codec-specific tag information.
 -	 */
 -	if (!_TIFFMergeFieldInfo(tif, jbigFieldInfo,
 -				 TIFFArrayCount(jbigFieldInfo))) {
 -		TIFFErrorExt(tif->tif_clientdata, "TIFFInitJBIG",
 -			     "Merging JBIG codec-specific tags failed");
 -		return 0;
 -	}
 -
 -        /* Allocate memory for the JBIGState structure.*/
 -        tif->tif_data = (tdata_t)_TIFFmalloc(sizeof(JBIGState));
 -        if (tif->tif_data == NULL)
 -        {
 -                TIFFError("TIFFInitJBIG", "Not enough memory for JBIGState");
 -                return 0;
 -        }
 -        _TIFFmemset(tif->tif_data, 0, sizeof(JBIGState));
 -        codec = GetJBIGState(tif);
 -
 -        /* Initialize codec private fields */
 -        codec->recvparams = 0;
 -        codec->subaddress = NULL;
 -        codec->faxdcs = NULL;
 -        codec->recvtime = 0;
 -
 -	/* 
 -	 * Override parent get/set field methods.
 -	 */
 -        codec->vgetparent = tif->tif_tagmethods.vgetfield;
 -        codec->vsetparent = tif->tif_tagmethods.vsetfield;
 -        tif->tif_tagmethods.vgetfield = JBIGVGetField;
 -        tif->tif_tagmethods.vsetfield = JBIGVSetField;
 -        tif->tif_tagmethods.printdir = JBIGPrintDir;
 -
 -        /*
 -         * These flags are set so the JBIG Codec can control when to reverse
 -         * bits and when not to and to allow the jbig decoder and bit reverser
 -         * to write to memory when necessary.
 -         */
 -        tif->tif_flags |= TIFF_NOBITREV;
 -        tif->tif_flags &= ~TIFF_MAPPED;
 -
 -        /* Setup the function pointers for encode, decode, and cleanup. */
 -        tif->tif_setupdecode = JBIGSetupDecode;
 -        tif->tif_decodestrip = JBIGDecode;
 -
 -        tif->tif_setupencode = JBIGSetupEncode;
 -        tif->tif_encodestrip = JBIGEncode;
 -        
 -        tif->tif_cleanup = JBIGCleanup;
 -
 -        return 1;
 -}
 -
 -#endif /* JBIG_SUPPORT */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_jpeg.c b/plugins/FreeImage/Source/LibTIFF/tif_jpeg.c deleted file mode 100644 index ee7d886fa8..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_jpeg.c +++ /dev/null @@ -1,2078 +0,0 @@ -/* $Id: tif_jpeg.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1994-1997 Sam Leffler
 - * Copyright (c) 1994-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#define WIN32_LEAN_AND_MEAN
 -#define VC_EXTRALEAN
 -
 -#include "tiffiop.h"
 -#ifdef JPEG_SUPPORT
 -
 -/*
 - * TIFF Library
 - *
 - * JPEG Compression support per TIFF Technical Note #2
 - * (*not* per the original TIFF 6.0 spec).
 - *
 - * This file is simply an interface to the libjpeg library written by
 - * the Independent JPEG Group.  You need release 5 or later of the IJG
 - * code, which you can find on the Internet at ftp.uu.net:/graphics/jpeg/.
 - *
 - * Contributed by Tom Lane <tgl@sss.pgh.pa.us>.
 - */
 -#include <setjmp.h>
 -
 -int TIFFFillStrip(TIFF*, tstrip_t);
 -int TIFFFillTile(TIFF*, ttile_t);
 -
 -/* We undefine FAR to avoid conflict with JPEG definition */
 -
 -#ifdef FAR
 -#undef FAR
 -#endif
 -
 -/*
 -  Libjpeg's jmorecfg.h defines INT16 and INT32, but only if XMD_H is
 -  not defined.  Unfortunately, the MinGW and Borland compilers include
 -  a typedef for INT32, which causes a conflict.  MSVC does not include
 -  a conficting typedef given the headers which are included.
 -*/
 -#if defined(__BORLANDC__) || defined(__MINGW32__)
 -# define XMD_H 1
 -#endif
 -
 -/*
 -   The windows RPCNDR.H file defines boolean, but defines it with the
 -   unsigned char size.  You should compile JPEG library using appropriate
 -   definitions in jconfig.h header, but many users compile library in wrong
 -   way. That causes errors of the following type:
 -
 -   "JPEGLib: JPEG parameter struct mismatch: library thinks size is 432,
 -   caller expects 464"
 -
 -   For such users we wil fix the problem here. See install.doc file from
 -   the JPEG library distribution for details.
 -*/
 -
 -/* Define "boolean" as unsigned char, not int, per Windows custom. */
 -#if defined(WIN32) && !defined(__MINGW32__)
 -# ifndef __RPCNDR_H__            /* don't conflict if rpcndr.h already read */
 -   typedef unsigned char boolean;
 -# endif
 -# define HAVE_BOOLEAN            /* prevent jmorecfg.h from redefining it */
 -#endif
 -
 -#include "../LibJPEG/jpeglib.h"
 -#include "../LibJPEG/jerror.h"
 -
 -/*
 - * We are using width_in_blocks which is supposed to be private to
 - * libjpeg. Unfortunately, the libjpeg delivered with Cygwin has
 - * renamed this member to width_in_data_units.  Since the header has
 - * also renamed a define, use that unique define name in order to
 - * detect the problem header and adjust to suit.
 - */
 -#if defined(D_MAX_DATA_UNITS_IN_MCU)
 -#define width_in_blocks width_in_data_units
 -#endif
 -
 -/*
 - * On some machines it may be worthwhile to use _setjmp or sigsetjmp
 - * in place of plain setjmp.  These macros will make it easier.
 - */
 -#define SETJMP(jbuf)		setjmp(jbuf)
 -#define LONGJMP(jbuf,code)	longjmp(jbuf,code)
 -#define JMP_BUF			jmp_buf
 -
 -typedef struct jpeg_destination_mgr jpeg_destination_mgr;
 -typedef struct jpeg_source_mgr jpeg_source_mgr;
 -typedef	struct jpeg_error_mgr jpeg_error_mgr;
 -
 -/*
 - * State block for each open TIFF file using
 - * libjpeg to do JPEG compression/decompression.
 - *
 - * libjpeg's visible state is either a jpeg_compress_struct
 - * or jpeg_decompress_struct depending on which way we
 - * are going.  comm can be used to refer to the fields
 - * which are common to both.
 - *
 - * NB: cinfo is required to be the first member of JPEGState,
 - *     so we can safely cast JPEGState* -> jpeg_xxx_struct*
 - *     and vice versa!
 - */
 -typedef	struct {
 -	union {
 -		struct jpeg_compress_struct c;
 -		struct jpeg_decompress_struct d;
 -		struct jpeg_common_struct comm;
 -	} cinfo;			/* NB: must be first */
 -        int             cinfo_initialized;
 -
 -	jpeg_error_mgr	err;		/* libjpeg error manager */
 -	JMP_BUF		exit_jmpbuf;	/* for catching libjpeg failures */
 -	/*
 -	 * The following two members could be a union, but
 -	 * they're small enough that it's not worth the effort.
 -	 */
 -	jpeg_destination_mgr dest;	/* data dest for compression */
 -	jpeg_source_mgr	src;		/* data source for decompression */
 -					/* private state */
 -	TIFF*		tif;		/* back link needed by some code */
 -	uint16		photometric;	/* copy of PhotometricInterpretation */
 -	uint16		h_sampling;	/* luminance sampling factors */
 -	uint16		v_sampling;
 -	tsize_t		bytesperline;	/* decompressed bytes per scanline */
 -	/* pointers to intermediate buffers when processing downsampled data */
 -	JSAMPARRAY	ds_buffer[MAX_COMPONENTS];
 -	int		scancount;	/* number of "scanlines" accumulated */
 -	int		samplesperclump;
 -
 -	TIFFVGetMethod	vgetparent;	/* super-class method */
 -	TIFFVSetMethod	vsetparent;	/* super-class method */
 -	TIFFPrintMethod printdir;	/* super-class method */
 -	TIFFStripMethod	defsparent;	/* super-class method */
 -	TIFFTileMethod	deftparent;	/* super-class method */
 -					/* pseudo-tag fields */
 -	void*		jpegtables;	/* JPEGTables tag value, or NULL */
 -	uint32		jpegtables_length; /* number of bytes in same */
 -	int		jpegquality;	/* Compression quality level */
 -	int		jpegcolormode;	/* Auto RGB<=>YCbCr convert? */
 -	int		jpegtablesmode;	/* What to put in JPEGTables */
 -
 -        int             ycbcrsampling_fetched;
 -	uint32		recvparams;	/* encoded Class 2 session params */
 -	char*		subaddress;	/* subaddress string */
 -	uint32		recvtime;	/* time spent receiving (secs) */
 -	char*		faxdcs;		/* encoded fax parameters (DCS, Table 2/T.30) */
 -} JPEGState;
 -
 -#define	JState(tif)	((JPEGState*)(tif)->tif_data)
 -
 -static	int JPEGDecode(TIFF*, tidata_t, tsize_t, tsample_t);
 -static	int JPEGDecodeRaw(TIFF*, tidata_t, tsize_t, tsample_t);
 -static	int JPEGEncode(TIFF*, tidata_t, tsize_t, tsample_t);
 -static	int JPEGEncodeRaw(TIFF*, tidata_t, tsize_t, tsample_t);
 -static  int JPEGInitializeLibJPEG( TIFF * tif,
 -								   int force_encode, int force_decode );
 -
 -#define	FIELD_JPEGTABLES	(FIELD_CODEC+0)
 -#define	FIELD_RECVPARAMS	(FIELD_CODEC+1)
 -#define	FIELD_SUBADDRESS	(FIELD_CODEC+2)
 -#define	FIELD_RECVTIME		(FIELD_CODEC+3)
 -#define	FIELD_FAXDCS		(FIELD_CODEC+4)
 -
 -static const TIFFFieldInfo jpegFieldInfo[] = {
 -    { TIFFTAG_JPEGTABLES,	 -3,-3,	TIFF_UNDEFINED,	FIELD_JPEGTABLES,
 -      FALSE,	TRUE,	"JPEGTables" },
 -    { TIFFTAG_JPEGQUALITY,	 0, 0,	TIFF_ANY,	FIELD_PSEUDO,
 -      TRUE,	FALSE,	"" },
 -    { TIFFTAG_JPEGCOLORMODE,	 0, 0,	TIFF_ANY,	FIELD_PSEUDO,
 -      FALSE,	FALSE,	"" },
 -    { TIFFTAG_JPEGTABLESMODE,	 0, 0,	TIFF_ANY,	FIELD_PSEUDO,
 -      FALSE,	FALSE,	"" },
 -    /* Specific for JPEG in faxes */
 -    { TIFFTAG_FAXRECVPARAMS,	 1, 1, TIFF_LONG,	FIELD_RECVPARAMS,
 -      TRUE,	FALSE,	"FaxRecvParams" },
 -    { TIFFTAG_FAXSUBADDRESS,	-1,-1, TIFF_ASCII,	FIELD_SUBADDRESS,
 -      TRUE,	FALSE,	"FaxSubAddress" },
 -    { TIFFTAG_FAXRECVTIME,	 1, 1, TIFF_LONG,	FIELD_RECVTIME,
 -      TRUE,	FALSE,	"FaxRecvTime" },
 -    { TIFFTAG_FAXDCS,		-1, -1, TIFF_ASCII,	FIELD_FAXDCS,
 -	  TRUE,	FALSE,	"FaxDcs" },
 -};
 -#define	N(a)	(sizeof (a) / sizeof (a[0]))
 -
 -/*
 - * libjpeg interface layer.
 - *
 - * We use setjmp/longjmp to return control to libtiff
 - * when a fatal error is encountered within the JPEG
 - * library.  We also direct libjpeg error and warning
 - * messages through the appropriate libtiff handlers.
 - */
 -
 -/*
 - * Error handling routines (these replace corresponding
 - * IJG routines from jerror.c).  These are used for both
 - * compression and decompression.
 - */
 -static void
 -TIFFjpeg_error_exit(j_common_ptr cinfo)
 -{
 -	JPEGState *sp = (JPEGState *) cinfo;	/* NB: cinfo assumed first */
 -	char buffer[JMSG_LENGTH_MAX];
 -
 -	(*cinfo->err->format_message) (cinfo, buffer);
 -	TIFFErrorExt(sp->tif->tif_clientdata, "JPEGLib", "%s", buffer);		/* display the error message */
 -	jpeg_abort(cinfo);			/* clean up libjpeg state */
 -	LONGJMP(sp->exit_jmpbuf, 1);		/* return to libtiff caller */
 -}
 -
 -/*
 - * This routine is invoked only for warning messages,
 - * since error_exit does its own thing and trace_level
 - * is never set > 0.
 - */
 -static void
 -TIFFjpeg_output_message(j_common_ptr cinfo)
 -{
 -	char buffer[JMSG_LENGTH_MAX];
 -
 -	(*cinfo->err->format_message) (cinfo, buffer);
 -	TIFFWarningExt(((JPEGState *) cinfo)->tif->tif_clientdata, "JPEGLib", "%s", buffer);
 -}
 -
 -/*
 - * Interface routines.  This layer of routines exists
 - * primarily to limit side-effects from using setjmp.
 - * Also, normal/error returns are converted into return
 - * values per libtiff practice.
 - */
 -#define	CALLJPEG(sp, fail, op)	(SETJMP((sp)->exit_jmpbuf) ? (fail) : (op))
 -#define	CALLVJPEG(sp, op)	CALLJPEG(sp, 0, ((op),1))
 -
 -static int
 -TIFFjpeg_create_compress(JPEGState* sp)
 -{
 -	/* initialize JPEG error handling */
 -	sp->cinfo.c.err = jpeg_std_error(&sp->err);
 -	sp->err.error_exit = TIFFjpeg_error_exit;
 -	sp->err.output_message = TIFFjpeg_output_message;
 -
 -	return CALLVJPEG(sp, jpeg_create_compress(&sp->cinfo.c));
 -}
 -
 -static int
 -TIFFjpeg_create_decompress(JPEGState* sp)
 -{
 -	/* initialize JPEG error handling */
 -	sp->cinfo.d.err = jpeg_std_error(&sp->err);
 -	sp->err.error_exit = TIFFjpeg_error_exit;
 -	sp->err.output_message = TIFFjpeg_output_message;
 -
 -	return CALLVJPEG(sp, jpeg_create_decompress(&sp->cinfo.d));
 -}
 -
 -static int
 -TIFFjpeg_set_defaults(JPEGState* sp)
 -{
 -	return CALLVJPEG(sp, jpeg_set_defaults(&sp->cinfo.c));
 -}
 -
 -static int
 -TIFFjpeg_set_colorspace(JPEGState* sp, J_COLOR_SPACE colorspace)
 -{
 -	return CALLVJPEG(sp, jpeg_set_colorspace(&sp->cinfo.c, colorspace));
 -}
 -
 -static int
 -TIFFjpeg_set_quality(JPEGState* sp, int quality, boolean force_baseline)
 -{
 -	return CALLVJPEG(sp,
 -	    jpeg_set_quality(&sp->cinfo.c, quality, force_baseline));
 -}
 -
 -static int
 -TIFFjpeg_suppress_tables(JPEGState* sp, boolean suppress)
 -{
 -	return CALLVJPEG(sp, jpeg_suppress_tables(&sp->cinfo.c, suppress));
 -}
 -
 -static int
 -TIFFjpeg_start_compress(JPEGState* sp, boolean write_all_tables)
 -{
 -	return CALLVJPEG(sp,
 -	    jpeg_start_compress(&sp->cinfo.c, write_all_tables));
 -}
 -
 -static int
 -TIFFjpeg_write_scanlines(JPEGState* sp, JSAMPARRAY scanlines, int num_lines)
 -{
 -	return CALLJPEG(sp, -1, (int) jpeg_write_scanlines(&sp->cinfo.c,
 -	    scanlines, (JDIMENSION) num_lines));
 -}
 -
 -static int
 -TIFFjpeg_write_raw_data(JPEGState* sp, JSAMPIMAGE data, int num_lines)
 -{
 -	return CALLJPEG(sp, -1, (int) jpeg_write_raw_data(&sp->cinfo.c,
 -	    data, (JDIMENSION) num_lines));
 -}
 -
 -static int
 -TIFFjpeg_finish_compress(JPEGState* sp)
 -{
 -	return CALLVJPEG(sp, jpeg_finish_compress(&sp->cinfo.c));
 -}
 -
 -static int
 -TIFFjpeg_write_tables(JPEGState* sp)
 -{
 -	return CALLVJPEG(sp, jpeg_write_tables(&sp->cinfo.c));
 -}
 -
 -static int
 -TIFFjpeg_read_header(JPEGState* sp, boolean require_image)
 -{
 -	return CALLJPEG(sp, -1, jpeg_read_header(&sp->cinfo.d, require_image));
 -}
 -
 -static int
 -TIFFjpeg_start_decompress(JPEGState* sp)
 -{
 -	return CALLVJPEG(sp, jpeg_start_decompress(&sp->cinfo.d));
 -}
 -
 -static int
 -TIFFjpeg_read_scanlines(JPEGState* sp, JSAMPARRAY scanlines, int max_lines)
 -{
 -	return CALLJPEG(sp, -1, (int) jpeg_read_scanlines(&sp->cinfo.d,
 -	    scanlines, (JDIMENSION) max_lines));
 -}
 -
 -static int
 -TIFFjpeg_read_raw_data(JPEGState* sp, JSAMPIMAGE data, int max_lines)
 -{
 -	return CALLJPEG(sp, -1, (int) jpeg_read_raw_data(&sp->cinfo.d,
 -	    data, (JDIMENSION) max_lines));
 -}
 -
 -static int
 -TIFFjpeg_finish_decompress(JPEGState* sp)
 -{
 -	return CALLJPEG(sp, -1, (int) jpeg_finish_decompress(&sp->cinfo.d));
 -}
 -
 -static int
 -TIFFjpeg_abort(JPEGState* sp)
 -{
 -	return CALLVJPEG(sp, jpeg_abort(&sp->cinfo.comm));
 -}
 -
 -static int
 -TIFFjpeg_destroy(JPEGState* sp)
 -{
 -	return CALLVJPEG(sp, jpeg_destroy(&sp->cinfo.comm));
 -}
 -
 -static JSAMPARRAY
 -TIFFjpeg_alloc_sarray(JPEGState* sp, int pool_id,
 -		      JDIMENSION samplesperrow, JDIMENSION numrows)
 -{
 -	return CALLJPEG(sp, (JSAMPARRAY) NULL,
 -	    (*sp->cinfo.comm.mem->alloc_sarray)
 -		(&sp->cinfo.comm, pool_id, samplesperrow, numrows));
 -}
 -
 -/*
 - * JPEG library destination data manager.
 - * These routines direct compressed data from libjpeg into the
 - * libtiff output buffer.
 - */
 -
 -static void
 -std_init_destination(j_compress_ptr cinfo)
 -{
 -	JPEGState* sp = (JPEGState*) cinfo;
 -	TIFF* tif = sp->tif;
 -
 -	sp->dest.next_output_byte = (JOCTET*) tif->tif_rawdata;
 -	sp->dest.free_in_buffer = (size_t) tif->tif_rawdatasize;
 -}
 -
 -static boolean
 -std_empty_output_buffer(j_compress_ptr cinfo)
 -{
 -	JPEGState* sp = (JPEGState*) cinfo;
 -	TIFF* tif = sp->tif;
 -
 -	/* the entire buffer has been filled */
 -	tif->tif_rawcc = tif->tif_rawdatasize;
 -	TIFFFlushData1(tif);
 -	sp->dest.next_output_byte = (JOCTET*) tif->tif_rawdata;
 -	sp->dest.free_in_buffer = (size_t) tif->tif_rawdatasize;
 -
 -	return (TRUE);
 -}
 -
 -static void
 -std_term_destination(j_compress_ptr cinfo)
 -{
 -	JPEGState* sp = (JPEGState*) cinfo;
 -	TIFF* tif = sp->tif;
 -
 -	tif->tif_rawcp = (tidata_t) sp->dest.next_output_byte;
 -	tif->tif_rawcc =
 -	    tif->tif_rawdatasize - (tsize_t) sp->dest.free_in_buffer;
 -	/* NB: libtiff does the final buffer flush */
 -}
 -
 -static void
 -TIFFjpeg_data_dest(JPEGState* sp, TIFF* tif)
 -{
 -	(void) tif;
 -	sp->cinfo.c.dest = &sp->dest;
 -	sp->dest.init_destination = std_init_destination;
 -	sp->dest.empty_output_buffer = std_empty_output_buffer;
 -	sp->dest.term_destination = std_term_destination;
 -}
 -
 -/*
 - * Alternate destination manager for outputting to JPEGTables field.
 - */
 -
 -static void
 -tables_init_destination(j_compress_ptr cinfo)
 -{
 -	JPEGState* sp = (JPEGState*) cinfo;
 -
 -	/* while building, jpegtables_length is allocated buffer size */
 -	sp->dest.next_output_byte = (JOCTET*) sp->jpegtables;
 -	sp->dest.free_in_buffer = (size_t) sp->jpegtables_length;
 -}
 -
 -static boolean
 -tables_empty_output_buffer(j_compress_ptr cinfo)
 -{
 -	JPEGState* sp = (JPEGState*) cinfo;
 -	void* newbuf;
 -
 -	/* the entire buffer has been filled; enlarge it by 1000 bytes */
 -	newbuf = _TIFFrealloc((tdata_t) sp->jpegtables,
 -			      (tsize_t) (sp->jpegtables_length + 1000));
 -	if (newbuf == NULL)
 -		ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 100);
 -	sp->dest.next_output_byte = (JOCTET*) newbuf + sp->jpegtables_length;
 -	sp->dest.free_in_buffer = (size_t) 1000;
 -	sp->jpegtables = newbuf;
 -	sp->jpegtables_length += 1000;
 -	return (TRUE);
 -}
 -
 -static void
 -tables_term_destination(j_compress_ptr cinfo)
 -{
 -	JPEGState* sp = (JPEGState*) cinfo;
 -
 -	/* set tables length to number of bytes actually emitted */
 -	sp->jpegtables_length -= sp->dest.free_in_buffer;
 -}
 -
 -static int
 -TIFFjpeg_tables_dest(JPEGState* sp, TIFF* tif)
 -{
 -	(void) tif;
 -	/*
 -	 * Allocate a working buffer for building tables.
 -	 * Initial size is 1000 bytes, which is usually adequate.
 -	 */
 -	if (sp->jpegtables)
 -		_TIFFfree(sp->jpegtables);
 -	sp->jpegtables_length = 1000;
 -	sp->jpegtables = (void*) _TIFFmalloc((tsize_t) sp->jpegtables_length);
 -	if (sp->jpegtables == NULL) {
 -		sp->jpegtables_length = 0;
 -		TIFFErrorExt(sp->tif->tif_clientdata, "TIFFjpeg_tables_dest", "No space for JPEGTables");
 -		return (0);
 -	}
 -	sp->cinfo.c.dest = &sp->dest;
 -	sp->dest.init_destination = tables_init_destination;
 -	sp->dest.empty_output_buffer = tables_empty_output_buffer;
 -	sp->dest.term_destination = tables_term_destination;
 -	return (1);
 -}
 -
 -/*
 - * JPEG library source data manager.
 - * These routines supply compressed data to libjpeg.
 - */
 -
 -static void
 -std_init_source(j_decompress_ptr cinfo)
 -{
 -	JPEGState* sp = (JPEGState*) cinfo;
 -	TIFF* tif = sp->tif;
 -
 -	sp->src.next_input_byte = (const JOCTET*) tif->tif_rawdata;
 -	sp->src.bytes_in_buffer = (size_t) tif->tif_rawcc;
 -}
 -
 -static boolean
 -std_fill_input_buffer(j_decompress_ptr cinfo)
 -{
 -	JPEGState* sp = (JPEGState* ) cinfo;
 -	static const JOCTET dummy_EOI[2] = { 0xFF, JPEG_EOI };
 -
 -	/*
 -	 * Should never get here since entire strip/tile is
 -	 * read into memory before the decompressor is called,
 -	 * and thus was supplied by init_source.
 -	 */
 -	WARNMS(cinfo, JWRN_JPEG_EOF);
 -	/* insert a fake EOI marker */
 -	sp->src.next_input_byte = dummy_EOI;
 -	sp->src.bytes_in_buffer = 2;
 -	return (TRUE);
 -}
 -
 -static void
 -std_skip_input_data(j_decompress_ptr cinfo, long num_bytes)
 -{
 -	JPEGState* sp = (JPEGState*) cinfo;
 -
 -	if (num_bytes > 0) {
 -		if (num_bytes > (long) sp->src.bytes_in_buffer) {
 -			/* oops, buffer overrun */
 -			(void) std_fill_input_buffer(cinfo);
 -		} else {
 -			sp->src.next_input_byte += (size_t) num_bytes;
 -			sp->src.bytes_in_buffer -= (size_t) num_bytes;
 -		}
 -	}
 -}
 -
 -static void
 -std_term_source(j_decompress_ptr cinfo)
 -{
 -	/* No work necessary here */
 -	/* Or must we update tif->tif_rawcp, tif->tif_rawcc ??? */
 -	/* (if so, need empty tables_term_source!) */
 -	(void) cinfo;
 -}
 -
 -static void
 -TIFFjpeg_data_src(JPEGState* sp, TIFF* tif)
 -{
 -	(void) tif;
 -	sp->cinfo.d.src = &sp->src;
 -	sp->src.init_source = std_init_source;
 -	sp->src.fill_input_buffer = std_fill_input_buffer;
 -	sp->src.skip_input_data = std_skip_input_data;
 -	sp->src.resync_to_restart = jpeg_resync_to_restart;
 -	sp->src.term_source = std_term_source;
 -	sp->src.bytes_in_buffer = 0;		/* for safety */
 -	sp->src.next_input_byte = NULL;
 -}
 -
 -/*
 - * Alternate source manager for reading from JPEGTables.
 - * We can share all the code except for the init routine.
 - */
 -
 -static void
 -tables_init_source(j_decompress_ptr cinfo)
 -{
 -	JPEGState* sp = (JPEGState*) cinfo;
 -
 -	sp->src.next_input_byte = (const JOCTET*) sp->jpegtables;
 -	sp->src.bytes_in_buffer = (size_t) sp->jpegtables_length;
 -}
 -
 -static void
 -TIFFjpeg_tables_src(JPEGState* sp, TIFF* tif)
 -{
 -	TIFFjpeg_data_src(sp, tif);
 -	sp->src.init_source = tables_init_source;
 -}
 -
 -/*
 - * Allocate downsampled-data buffers needed for downsampled I/O.
 - * We use values computed in jpeg_start_compress or jpeg_start_decompress.
 - * We use libjpeg's allocator so that buffers will be released automatically
 - * when done with strip/tile.
 - * This is also a handy place to compute samplesperclump, bytesperline.
 - */
 -static int
 -alloc_downsampled_buffers(TIFF* tif, jpeg_component_info* comp_info,
 -			  int num_components)
 -{
 -	JPEGState* sp = JState(tif);
 -	int ci;
 -	jpeg_component_info* compptr;
 -	JSAMPARRAY buf;
 -	int samples_per_clump = 0;
 -
 -	for (ci = 0, compptr = comp_info; ci < num_components;
 -	     ci++, compptr++) {
 -		samples_per_clump += compptr->h_samp_factor *
 -			compptr->v_samp_factor;
 -		buf = TIFFjpeg_alloc_sarray(sp, JPOOL_IMAGE,
 -				compptr->width_in_blocks * DCTSIZE,
 -				(JDIMENSION) (compptr->v_samp_factor*DCTSIZE));
 -		if (buf == NULL)
 -			return (0);
 -		sp->ds_buffer[ci] = buf;
 -	}
 -	sp->samplesperclump = samples_per_clump;
 -	return (1);
 -}
 -
 -
 -/*
 - * JPEG Decoding.
 - */
 -
 -static int
 -JPEGSetupDecode(TIFF* tif)
 -{
 -	JPEGState* sp = JState(tif);
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -        JPEGInitializeLibJPEG( tif, 0, 1 );
 -
 -	assert(sp != NULL);
 -	assert(sp->cinfo.comm.is_decompressor);
 -
 -	/* Read JPEGTables if it is present */
 -	if (TIFFFieldSet(tif,FIELD_JPEGTABLES)) {
 -		TIFFjpeg_tables_src(sp, tif);
 -		if(TIFFjpeg_read_header(sp,FALSE) != JPEG_HEADER_TABLES_ONLY) {
 -			TIFFErrorExt(tif->tif_clientdata, "JPEGSetupDecode", "Bogus JPEGTables field");
 -			return (0);
 -		}
 -	}
 -
 -	/* Grab parameters that are same for all strips/tiles */
 -	sp->photometric = td->td_photometric;
 -	switch (sp->photometric) {
 -	case PHOTOMETRIC_YCBCR:
 -		sp->h_sampling = td->td_ycbcrsubsampling[0];
 -		sp->v_sampling = td->td_ycbcrsubsampling[1];
 -		break;
 -	default:
 -		/* TIFF 6.0 forbids subsampling of all other color spaces */
 -		sp->h_sampling = 1;
 -		sp->v_sampling = 1;
 -		break;
 -	}
 -
 -	/* Set up for reading normal data */
 -	TIFFjpeg_data_src(sp, tif);
 -	tif->tif_postdecode = _TIFFNoPostDecode; /* override byte swapping */
 -	return (1);
 -}
 -
 -/*
 - * Set up for decoding a strip or tile.
 - */
 -static int
 -JPEGPreDecode(TIFF* tif, tsample_t s)
 -{
 -	JPEGState *sp = JState(tif);
 -	TIFFDirectory *td = &tif->tif_dir;
 -	static const char module[] = "JPEGPreDecode";
 -	uint32 segment_width, segment_height;
 -	int downsampled_output;
 -	int ci;
 -
 -	assert(sp != NULL);
 -	assert(sp->cinfo.comm.is_decompressor);
 -	/*
 -	 * Reset decoder state from any previous strip/tile,
 -	 * in case application didn't read the whole strip.
 -	 */
 -	if (!TIFFjpeg_abort(sp))
 -		return (0);
 -	/*
 -	 * Read the header for this strip/tile.
 -	 */
 -	if (TIFFjpeg_read_header(sp, TRUE) != JPEG_HEADER_OK)
 -		return (0);
 -	/*
 -	 * Check image parameters and set decompression parameters.
 -	 */
 -	segment_width = td->td_imagewidth;
 -	segment_height = td->td_imagelength - tif->tif_row;
 -	if (isTiled(tif)) {
 -                segment_width = td->td_tilewidth;
 -                segment_height = td->td_tilelength;
 -		sp->bytesperline = TIFFTileRowSize(tif);
 -	} else {
 -		if (segment_height > td->td_rowsperstrip)
 -			segment_height = td->td_rowsperstrip;
 -		sp->bytesperline = TIFFOldScanlineSize(tif);
 -	}
 -	if (td->td_planarconfig == PLANARCONFIG_SEPARATE && s > 0) {
 -		/*
 -		 * For PC 2, scale down the expected strip/tile size
 -		 * to match a downsampled component
 -		 */
 -		segment_width = TIFFhowmany(segment_width, sp->h_sampling);
 -		segment_height = TIFFhowmany(segment_height, sp->v_sampling);
 -	}
 -	if (sp->cinfo.d.image_width < segment_width ||
 -	    sp->cinfo.d.image_height < segment_height) {
 -		TIFFWarningExt(tif->tif_clientdata, module,
 -			       "Improper JPEG strip/tile size, "
 -			       "expected %dx%d, got %dx%d",
 -			       segment_width, segment_height,
 -			       sp->cinfo.d.image_width,
 -			       sp->cinfo.d.image_height);
 -	} 
 -	if (sp->cinfo.d.image_width > segment_width ||
 -	    sp->cinfo.d.image_height > segment_height) {
 -		/*
 -		 * This case could be dangerous, if the strip or tile size has
 -		 * been reported as less than the amount of data jpeg will
 -		 * return, some potential security issues arise. Catch this
 -		 * case and error out.
 -		 */
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "JPEG strip/tile size exceeds expected dimensions,"
 -			     " expected %dx%d, got %dx%d",
 -			     segment_width, segment_height,
 -			     sp->cinfo.d.image_width, sp->cinfo.d.image_height);
 -		return (0);
 -	}
 -	if (sp->cinfo.d.num_components !=
 -	    (td->td_planarconfig == PLANARCONFIG_CONTIG ?
 -	     td->td_samplesperpixel : 1)) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "Improper JPEG component count");
 -		return (0);
 -	}
 -#ifdef JPEG_LIB_MK1
 -	if (12 != td->td_bitspersample && 8 != td->td_bitspersample) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "Improper JPEG data precision");
 -            return (0);
 -	}
 -        sp->cinfo.d.data_precision = td->td_bitspersample;
 -        sp->cinfo.d.bits_in_jsample = td->td_bitspersample;
 -#else
 -	if (sp->cinfo.d.data_precision != td->td_bitspersample) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "Improper JPEG data precision");
 -            return (0);
 -	}
 -#endif
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG) {
 -		/* Component 0 should have expected sampling factors */
 -		if (sp->cinfo.d.comp_info[0].h_samp_factor != sp->h_sampling ||
 -		    sp->cinfo.d.comp_info[0].v_samp_factor != sp->v_sampling) {
 -				TIFFWarningExt(tif->tif_clientdata, module,
 -                                    "Improper JPEG sampling factors %d,%d\n"
 -                                    "Apparently should be %d,%d.",
 -                                    sp->cinfo.d.comp_info[0].h_samp_factor,
 -                                    sp->cinfo.d.comp_info[0].v_samp_factor,
 -                                    sp->h_sampling, sp->v_sampling);
 -
 -				/*
 -				 * There are potential security issues here
 -				 * for decoders that have already allocated
 -				 * buffers based on the expected sampling
 -				 * factors. Lets check the sampling factors
 -				 * dont exceed what we were expecting.
 -				 */
 -				if (sp->cinfo.d.comp_info[0].h_samp_factor
 -					> sp->h_sampling
 -				    || sp->cinfo.d.comp_info[0].v_samp_factor
 -					> sp->v_sampling) {
 -					TIFFErrorExt(tif->tif_clientdata,
 -						     module,
 -					"Cannot honour JPEG sampling factors"
 -					" that exceed those specified.");
 -					return (0);
 -				}
 -
 -			    /*
 -			     * XXX: Files written by the Intergraph software
 -			     * has different sampling factors stored in the
 -			     * TIFF tags and in the JPEG structures. We will
 -			     * try to deduce Intergraph files by the presense
 -			     * of the tag 33918.
 -			     */
 -			    if (!_TIFFFindFieldInfo(tif, 33918, TIFF_ANY)) {
 -					TIFFWarningExt(tif->tif_clientdata, module,
 -					"Decompressor will try reading with "
 -					"sampling %d,%d.",
 -					sp->cinfo.d.comp_info[0].h_samp_factor,
 -					sp->cinfo.d.comp_info[0].v_samp_factor);
 -
 -				    sp->h_sampling = (uint16)
 -					sp->cinfo.d.comp_info[0].h_samp_factor;
 -				    sp->v_sampling = (uint16)
 -					sp->cinfo.d.comp_info[0].v_samp_factor;
 -			    }
 -		}
 -		/* Rest should have sampling factors 1,1 */
 -		for (ci = 1; ci < sp->cinfo.d.num_components; ci++) {
 -			if (sp->cinfo.d.comp_info[ci].h_samp_factor != 1 ||
 -			    sp->cinfo.d.comp_info[ci].v_samp_factor != 1) {
 -				TIFFErrorExt(tif->tif_clientdata, module, "Improper JPEG sampling factors");
 -				return (0);
 -			}
 -		}
 -	} else {
 -		/* PC 2's single component should have sampling factors 1,1 */
 -		if (sp->cinfo.d.comp_info[0].h_samp_factor != 1 ||
 -		    sp->cinfo.d.comp_info[0].v_samp_factor != 1) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "Improper JPEG sampling factors");
 -			return (0);
 -		}
 -	}
 -	downsampled_output = FALSE;
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG &&
 -	    sp->photometric == PHOTOMETRIC_YCBCR &&
 -	    sp->jpegcolormode == JPEGCOLORMODE_RGB) {
 -	/* Convert YCbCr to RGB */
 -		sp->cinfo.d.jpeg_color_space = JCS_YCbCr;
 -		sp->cinfo.d.out_color_space = JCS_RGB;
 -	} else {
 -			/* Suppress colorspace handling */
 -		sp->cinfo.d.jpeg_color_space = JCS_UNKNOWN;
 -		sp->cinfo.d.out_color_space = JCS_UNKNOWN;
 -		if (td->td_planarconfig == PLANARCONFIG_CONTIG &&
 -		    (sp->h_sampling != 1 || sp->v_sampling != 1))
 -			downsampled_output = TRUE;
 -		/* XXX what about up-sampling? */
 -	}
 -	if (downsampled_output) {
 -		/* Need to use raw-data interface to libjpeg */
 -		sp->cinfo.d.raw_data_out = TRUE;
 -		tif->tif_decoderow = JPEGDecodeRaw;
 -		tif->tif_decodestrip = JPEGDecodeRaw;
 -		tif->tif_decodetile = JPEGDecodeRaw;
 -	} else {
 -		/* Use normal interface to libjpeg */
 -		sp->cinfo.d.raw_data_out = FALSE;
 -		tif->tif_decoderow = JPEGDecode;
 -		tif->tif_decodestrip = JPEGDecode;
 -		tif->tif_decodetile = JPEGDecode;
 -	}
 -	/* Start JPEG decompressor */
 -	if (!TIFFjpeg_start_decompress(sp))
 -		return (0);
 -	/* Allocate downsampled-data buffers if needed */
 -	if (downsampled_output) {
 -		if (!alloc_downsampled_buffers(tif, sp->cinfo.d.comp_info,
 -					       sp->cinfo.d.num_components))
 -			return (0);
 -		sp->scancount = DCTSIZE;	/* mark buffer empty */
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Decode a chunk of pixels.
 - * "Standard" case: returned data is not downsampled.
 - */
 -/*ARGSUSED*/ static int
 -JPEGDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s)
 -{
 -    JPEGState *sp = JState(tif);
 -    tsize_t nrows;
 -    (void) s;
 -
 -    nrows = cc / sp->bytesperline;
 -    if (cc % sp->bytesperline)
 -		TIFFWarningExt(tif->tif_clientdata, tif->tif_name, "fractional scanline not read");
 -
 -    if ( nrows > (int) sp->cinfo.d.image_height )
 -        nrows = sp->cinfo.d.image_height;
 -
 -    /* data is expected to be read in multiples of a scanline */
 -    if (nrows)
 -    {
 -        JSAMPROW line_work_buf = NULL;
 -
 -        /*
 -        ** For 6B, only use temporary buffer for 12 bit imagery. 
 -        ** For Mk1 always use it. 
 -        */
 -#if !defined(JPEG_LIB_MK1)        
 -        if ( sp->cinfo.d.data_precision == 12 )
 -#endif
 -        {
 -            line_work_buf = (JSAMPROW) 
 -                _TIFFmalloc(sizeof(short) * sp->cinfo.d.output_width 
 -                            * sp->cinfo.d.num_components );
 -        }
 -
 -        do {
 -            if ( line_work_buf != NULL )
 -            {
 -                /* 
 -                ** In the MK1 case, we aways read into a 16bit buffer, and then
 -                ** pack down to 12bit or 8bit.  In 6B case we only read into 16
 -                ** bit buffer for 12bit data, which we need to repack. 
 -                */
 -                if (TIFFjpeg_read_scanlines(sp, &line_work_buf, 1) != 1)
 -                    return (0);
 -
 -                if ( sp->cinfo.d.data_precision == 12 )
 -                {
 -                    int value_pairs = (sp->cinfo.d.output_width 
 -                                       * sp->cinfo.d.num_components) / 2;
 -                    int iPair;
 -
 -                    for ( iPair = 0; iPair < value_pairs; iPair++ )
 -                    {
 -                        unsigned char *out_ptr = 
 -                            ((unsigned char *) buf) + iPair * 3;
 -                        JSAMPLE *in_ptr = line_work_buf + iPair * 2;
 -
 -                        out_ptr[0] = (in_ptr[0] & 0xff0) >> 4;
 -                        out_ptr[1] = ((in_ptr[0] & 0xf) << 4)
 -                            | ((in_ptr[1] & 0xf00) >> 8);
 -                        out_ptr[2] = ((in_ptr[1] & 0xff) >> 0);
 -                    }
 -                }
 -                else if ( sp->cinfo.d.data_precision == 8 )
 -                {
 -                    int value_count = (sp->cinfo.d.output_width 
 -                                       * sp->cinfo.d.num_components);
 -                    int iValue;
 -
 -                    for ( iValue = 0; iValue < value_count; iValue++ )
 -                    {
 -                        ((unsigned char *) buf)[iValue] = 
 -                            line_work_buf[iValue] & 0xff;
 -                    }
 -                }
 -            }
 -            else
 -            {
 -                /*
 -                ** In the libjpeg6b 8bit case.  We read directly into the 
 -                ** TIFF buffer.
 -                */
 -                JSAMPROW bufptr = (JSAMPROW)buf;
 -  
 -                if (TIFFjpeg_read_scanlines(sp, &bufptr, 1) != 1)
 -                    return (0);
 -            }
 -
 -            ++tif->tif_row;
 -            buf += sp->bytesperline;
 -            cc -= sp->bytesperline;
 -        } while (--nrows > 0);
 -
 -        if ( line_work_buf != NULL )
 -            _TIFFfree( line_work_buf );
 -    }
 -
 -    /* Close down the decompressor if we've finished the strip or tile. */
 -    return sp->cinfo.d.output_scanline < sp->cinfo.d.output_height
 -        || TIFFjpeg_finish_decompress(sp);
 -}
 -
 -/*
 - * Decode a chunk of pixels.
 - * Returned data is downsampled per sampling factors.
 - */
 -/*ARGSUSED*/ static int
 -JPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s)
 -{
 -	JPEGState *sp = JState(tif);
 -	tsize_t nrows;
 -	(void) s;
 -
 -    nrows = cc / sp->bytesperline;
 -    if (cc % sp->bytesperline)
 -		TIFFWarningExt(tif->tif_clientdata, tif->tif_name, "fractional scanline not read");
 -
 -    if ( nrows > (int) sp->cinfo.d.image_height )
 -        nrows = sp->cinfo.d.image_height;
 -
 -    /* data is expected to be read in multiples of a scanline */
 -    if (nrows) {
 -		/* Cb,Cr both have sampling factors 1, so this is correct */
 -		JDIMENSION clumps_per_line = sp->cinfo.d.comp_info[1].downsampled_width;            
 -		int samples_per_clump = sp->samplesperclump;
 -
 -#ifdef JPEG_LIB_MK1
 -		unsigned short* tmpbuf = _TIFFmalloc(sizeof(unsigned short) *
 -		    sp->cinfo.d.output_width *
 -		    sp->cinfo.d.num_components);
 -#endif
 -
 -		do {
 -			jpeg_component_info *compptr;
 -			int ci, clumpoffset;
 -
 -			/* Reload downsampled-data buffer if needed */
 -			if (sp->scancount >= DCTSIZE) {
 -				int n = sp->cinfo.d.max_v_samp_factor * DCTSIZE;
 -				if (TIFFjpeg_read_raw_data(sp, sp->ds_buffer, n) != n)
 -					return (0);
 -				sp->scancount = 0;
 -			}
 -			/*
 -			 * Fastest way to unseparate data is to make one pass
 -			 * over the scanline for each row of each component.
 -			 */
 -			clumpoffset = 0;    /* first sample in clump */
 -			for (ci = 0, compptr = sp->cinfo.d.comp_info;
 -			    ci < sp->cinfo.d.num_components;
 -			    ci++, compptr++) {
 -				int hsamp = compptr->h_samp_factor;
 -				int vsamp = compptr->v_samp_factor;
 -				int ypos;
 -
 -				for (ypos = 0; ypos < vsamp; ypos++) {
 -					JSAMPLE *inptr = sp->ds_buffer[ci][sp->scancount*vsamp + ypos];
 -#ifdef JPEG_LIB_MK1
 -					JSAMPLE *outptr = (JSAMPLE*)tmpbuf + clumpoffset;
 -#else
 -					JSAMPLE *outptr = (JSAMPLE*)buf + clumpoffset;
 -#endif
 -					JDIMENSION nclump;
 -
 -					if (hsamp == 1) {
 -						/* fast path for at least Cb and Cr */
 -						for (nclump = clumps_per_line; nclump-- > 0; ) {
 -							outptr[0] = *inptr++;
 -							outptr += samples_per_clump;
 -						}
 -					} else {
 -						int xpos;
 -
 -			/* general case */
 -						for (nclump = clumps_per_line; nclump-- > 0; ) {
 -							for (xpos = 0; xpos < hsamp; xpos++)
 -								outptr[xpos] = *inptr++;
 -							outptr += samples_per_clump;
 -						}
 -					}
 -					clumpoffset += hsamp;
 -				}
 -			}
 -
 -#ifdef JPEG_LIB_MK1
 -			{
 -				if (sp->cinfo.d.data_precision == 8)
 -				{
 -					int i=0;
 -					int len = sp->cinfo.d.output_width * sp->cinfo.d.num_components;
 -					for (i=0; i<len; i++)
 -					{
 -						((unsigned char*)buf)[i] = tmpbuf[i] & 0xff;
 -					}
 -				}
 -				else
 -				{         /* 12-bit  */
 -					int value_pairs = (sp->cinfo.d.output_width
 -					    * sp->cinfo.d.num_components) / 2;
 -					int iPair;
 -					for ( iPair = 0; iPair < value_pairs; iPair++ )
 -					{
 -						unsigned char *out_ptr = ((unsigned char *) buf) + iPair * 3;
 -						JSAMPLE *in_ptr = tmpbuf + iPair * 2;
 -						out_ptr[0] = (in_ptr[0] & 0xff0) >> 4;
 -						out_ptr[1] = ((in_ptr[0] & 0xf) << 4)
 -						    | ((in_ptr[1] & 0xf00) >> 8);
 -						out_ptr[2] = ((in_ptr[1] & 0xff) >> 0);
 -					}
 -				}
 -			}
 -#endif
 -
 -			sp->scancount ++;
 -			tif->tif_row += sp->v_sampling;
 -			/* increment/decrement of buf and cc is still incorrect, but should not matter
 -			 * TODO: resolve this */
 -			buf += sp->bytesperline;
 -			cc -= sp->bytesperline;
 -		} while (--nrows > 0);
 -
 -#ifdef JPEG_LIB_MK1
 -		_TIFFfree(tmpbuf);
 -#endif
 -
 -	}
 -
 -	/* Close down the decompressor if done. */
 -	return sp->cinfo.d.output_scanline < sp->cinfo.d.output_height
 -	    || TIFFjpeg_finish_decompress(sp);
 -}
 -
 -
 -/*
 - * JPEG Encoding.
 - */
 -
 -static void
 -unsuppress_quant_table (JPEGState* sp, int tblno)
 -{
 -	JQUANT_TBL* qtbl;
 -
 -	if ((qtbl = sp->cinfo.c.quant_tbl_ptrs[tblno]) != NULL)
 -		qtbl->sent_table = FALSE;
 -}
 -
 -static void
 -unsuppress_huff_table (JPEGState* sp, int tblno)
 -{
 -	JHUFF_TBL* htbl;
 -
 -	if ((htbl = sp->cinfo.c.dc_huff_tbl_ptrs[tblno]) != NULL)
 -		htbl->sent_table = FALSE;
 -	if ((htbl = sp->cinfo.c.ac_huff_tbl_ptrs[tblno]) != NULL)
 -		htbl->sent_table = FALSE;
 -}
 -
 -static int
 -prepare_JPEGTables(TIFF* tif)
 -{
 -	JPEGState* sp = JState(tif);
 -
 -        JPEGInitializeLibJPEG( tif, 0, 0 );
 -
 -	/* Initialize quant tables for current quality setting */
 -	if (!TIFFjpeg_set_quality(sp, sp->jpegquality, FALSE))
 -		return (0);
 -	/* Mark only the tables we want for output */
 -	/* NB: chrominance tables are currently used only with YCbCr */
 -	if (!TIFFjpeg_suppress_tables(sp, TRUE))
 -		return (0);
 -	if (sp->jpegtablesmode & JPEGTABLESMODE_QUANT) {
 -		unsuppress_quant_table(sp, 0);
 -		if (sp->photometric == PHOTOMETRIC_YCBCR)
 -			unsuppress_quant_table(sp, 1);
 -	}
 -	if (sp->jpegtablesmode & JPEGTABLESMODE_HUFF) {
 -		unsuppress_huff_table(sp, 0);
 -		if (sp->photometric == PHOTOMETRIC_YCBCR)
 -			unsuppress_huff_table(sp, 1);
 -	}
 -	/* Direct libjpeg output into jpegtables */
 -	if (!TIFFjpeg_tables_dest(sp, tif))
 -		return (0);
 -	/* Emit tables-only datastream */
 -	if (!TIFFjpeg_write_tables(sp))
 -		return (0);
 -
 -	return (1);
 -}
 -
 -static int
 -JPEGSetupEncode(TIFF* tif)
 -{
 -	JPEGState* sp = JState(tif);
 -	TIFFDirectory *td = &tif->tif_dir;
 -	static const char module[] = "JPEGSetupEncode";
 -
 -        JPEGInitializeLibJPEG( tif, 1, 0 );
 -
 -	assert(sp != NULL);
 -	assert(!sp->cinfo.comm.is_decompressor);
 -
 -	/*
 -	 * Initialize all JPEG parameters to default values.
 -	 * Note that jpeg_set_defaults needs legal values for
 -	 * in_color_space and input_components.
 -	 */
 -	sp->cinfo.c.in_color_space = JCS_UNKNOWN;
 -	sp->cinfo.c.input_components = 1;
 -	if (!TIFFjpeg_set_defaults(sp))
 -		return (0);
 -	/* Set per-file parameters */
 -	sp->photometric = td->td_photometric;
 -	switch (sp->photometric) {
 -	case PHOTOMETRIC_YCBCR:
 -		sp->h_sampling = td->td_ycbcrsubsampling[0];
 -		sp->v_sampling = td->td_ycbcrsubsampling[1];
 -		/*
 -		 * A ReferenceBlackWhite field *must* be present since the
 -		 * default value is inappropriate for YCbCr.  Fill in the
 -		 * proper value if application didn't set it.
 -		 */
 -		{
 -			float *ref;
 -			if (!TIFFGetField(tif, TIFFTAG_REFERENCEBLACKWHITE,
 -					  &ref)) {
 -				float refbw[6];
 -				long top = 1L << td->td_bitspersample;
 -				refbw[0] = 0;
 -				refbw[1] = (float)(top-1L);
 -				refbw[2] = (float)(top>>1);
 -				refbw[3] = refbw[1];
 -				refbw[4] = refbw[2];
 -				refbw[5] = refbw[1];
 -				TIFFSetField(tif, TIFFTAG_REFERENCEBLACKWHITE,
 -					     refbw);
 -			}
 -		}
 -		break;
 -	case PHOTOMETRIC_PALETTE:		/* disallowed by Tech Note */
 -	case PHOTOMETRIC_MASK:
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			  "PhotometricInterpretation %d not allowed for JPEG",
 -			  (int) sp->photometric);
 -		return (0);
 -	default:
 -		/* TIFF 6.0 forbids subsampling of all other color spaces */
 -		sp->h_sampling = 1;
 -		sp->v_sampling = 1;
 -		break;
 -	}
 -
 -	/* Verify miscellaneous parameters */
 -
 -	/*
 -	 * This would need work if libtiff ever supports different
 -	 * depths for different components, or if libjpeg ever supports
 -	 * run-time selection of depth.  Neither is imminent.
 -	 */
 -#ifdef JPEG_LIB_MK1
 -        /* BITS_IN_JSAMPLE now permits 8 and 12 --- dgilbert */
 -	if (td->td_bitspersample != 8 && td->td_bitspersample != 12) 
 -#else
 -	if (td->td_bitspersample != BITS_IN_JSAMPLE )
 -#endif
 -	{
 -		TIFFErrorExt(tif->tif_clientdata, module, "BitsPerSample %d not allowed for JPEG",
 -			  (int) td->td_bitspersample);
 -		return (0);
 -	}
 -	sp->cinfo.c.data_precision = td->td_bitspersample;
 -#ifdef JPEG_LIB_MK1
 -        sp->cinfo.c.bits_in_jsample = td->td_bitspersample;
 -#endif
 -	if (isTiled(tif)) {
 -		if ((td->td_tilelength % (sp->v_sampling * DCTSIZE)) != 0) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				  "JPEG tile height must be multiple of %d",
 -				  sp->v_sampling * DCTSIZE);
 -			return (0);
 -		}
 -		if ((td->td_tilewidth % (sp->h_sampling * DCTSIZE)) != 0) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				  "JPEG tile width must be multiple of %d",
 -				  sp->h_sampling * DCTSIZE);
 -			return (0);
 -		}
 -	} else {
 -		if (td->td_rowsperstrip < td->td_imagelength &&
 -		    (td->td_rowsperstrip % (sp->v_sampling * DCTSIZE)) != 0) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				  "RowsPerStrip must be multiple of %d for JPEG",
 -				  sp->v_sampling * DCTSIZE);
 -			return (0);
 -		}
 -	}
 -
 -	/* Create a JPEGTables field if appropriate */
 -	if (sp->jpegtablesmode & (JPEGTABLESMODE_QUANT|JPEGTABLESMODE_HUFF)) {
 -                if ( sp->jpegtables == NULL
 -                    || memcmp(sp->jpegtables,"\0\0\0\0\0\0\0\0\0",8) == 0 )
 -                {
 -                        if (!prepare_JPEGTables(tif))
 -                                return (0);
 -                        /* Mark the field present */
 -                        /* Can't use TIFFSetField since BEENWRITING is already set! */
 -                        tif->tif_flags |= TIFF_DIRTYDIRECT;
 -                        TIFFSetFieldBit(tif, FIELD_JPEGTABLES);
 -                }
 -	} else {
 -		/* We do not support application-supplied JPEGTables, */
 -		/* so mark the field not present */
 -		TIFFClrFieldBit(tif, FIELD_JPEGTABLES);
 -	}
 -
 -	/* Direct libjpeg output to libtiff's output buffer */
 -	TIFFjpeg_data_dest(sp, tif);
 -
 -	return (1);
 -}
 -
 -/*
 - * Set encoding state at the start of a strip or tile.
 - */
 -static int
 -JPEGPreEncode(TIFF* tif, tsample_t s)
 -{
 -	JPEGState *sp = JState(tif);
 -	TIFFDirectory *td = &tif->tif_dir;
 -	static const char module[] = "JPEGPreEncode";
 -	uint32 segment_width, segment_height;
 -	int downsampled_input;
 -
 -	assert(sp != NULL);
 -	assert(!sp->cinfo.comm.is_decompressor);
 -	/*
 -	 * Set encoding parameters for this strip/tile.
 -	 */
 -	if (isTiled(tif)) {
 -		segment_width = td->td_tilewidth;
 -		segment_height = td->td_tilelength;
 -		sp->bytesperline = TIFFTileRowSize(tif);
 -	} else {
 -		segment_width = td->td_imagewidth;
 -		segment_height = td->td_imagelength - tif->tif_row;
 -		if (segment_height > td->td_rowsperstrip)
 -			segment_height = td->td_rowsperstrip;
 -		sp->bytesperline = TIFFOldScanlineSize(tif);
 -	}
 -	if (td->td_planarconfig == PLANARCONFIG_SEPARATE && s > 0) {
 -		/* for PC 2, scale down the strip/tile size
 -		 * to match a downsampled component
 -		 */
 -		segment_width = TIFFhowmany(segment_width, sp->h_sampling);
 -		segment_height = TIFFhowmany(segment_height, sp->v_sampling);
 -	}
 -	if (segment_width > 65535 || segment_height > 65535) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "Strip/tile too large for JPEG");
 -		return (0);
 -	}
 -	sp->cinfo.c.image_width = segment_width;
 -	sp->cinfo.c.image_height = segment_height;
 -	downsampled_input = FALSE;
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG) {
 -		sp->cinfo.c.input_components = td->td_samplesperpixel;
 -		if (sp->photometric == PHOTOMETRIC_YCBCR) {
 -			if (sp->jpegcolormode == JPEGCOLORMODE_RGB) {
 -				sp->cinfo.c.in_color_space = JCS_RGB;
 -			} else {
 -				sp->cinfo.c.in_color_space = JCS_YCbCr;
 -				if (sp->h_sampling != 1 || sp->v_sampling != 1)
 -					downsampled_input = TRUE;
 -			}
 -			if (!TIFFjpeg_set_colorspace(sp, JCS_YCbCr))
 -				return (0);
 -			/*
 -			 * Set Y sampling factors;
 -			 * we assume jpeg_set_colorspace() set the rest to 1
 -			 */
 -			sp->cinfo.c.comp_info[0].h_samp_factor = sp->h_sampling;
 -			sp->cinfo.c.comp_info[0].v_samp_factor = sp->v_sampling;
 -		} else {
 -			if ((td->td_photometric == PHOTOMETRIC_MINISWHITE || td->td_photometric == PHOTOMETRIC_MINISBLACK) && td->td_samplesperpixel == 1)
 -				sp->cinfo.c.in_color_space = JCS_GRAYSCALE;
 -			else if (td->td_photometric == PHOTOMETRIC_RGB)
 -				sp->cinfo.c.in_color_space = JCS_RGB;
 -			else if (td->td_photometric == PHOTOMETRIC_SEPARATED && td->td_samplesperpixel == 4)
 -				sp->cinfo.c.in_color_space = JCS_CMYK;
 -			else
 -				sp->cinfo.c.in_color_space = JCS_UNKNOWN;
 -			if (!TIFFjpeg_set_colorspace(sp, sp->cinfo.c.in_color_space))
 -				return (0);
 -			/* jpeg_set_colorspace set all sampling factors to 1 */
 -		}
 -	} else {
 -		sp->cinfo.c.input_components = 1;
 -		sp->cinfo.c.in_color_space = JCS_UNKNOWN;
 -		if (!TIFFjpeg_set_colorspace(sp, JCS_UNKNOWN))
 -			return (0);
 -		sp->cinfo.c.comp_info[0].component_id = s;
 -		/* jpeg_set_colorspace() set sampling factors to 1 */
 -		if (sp->photometric == PHOTOMETRIC_YCBCR && s > 0) {
 -			sp->cinfo.c.comp_info[0].quant_tbl_no = 1;
 -			sp->cinfo.c.comp_info[0].dc_tbl_no = 1;
 -			sp->cinfo.c.comp_info[0].ac_tbl_no = 1;
 -		}
 -	}
 -	/* ensure libjpeg won't write any extraneous markers */
 -	sp->cinfo.c.write_JFIF_header = FALSE;
 -	sp->cinfo.c.write_Adobe_marker = FALSE;
 -	/* set up table handling correctly */
 -        if (!TIFFjpeg_set_quality(sp, sp->jpegquality, FALSE))
 -                return (0);
 -	if (! (sp->jpegtablesmode & JPEGTABLESMODE_QUANT)) {
 -		unsuppress_quant_table(sp, 0);
 -		unsuppress_quant_table(sp, 1);
 -	}
 -	if (sp->jpegtablesmode & JPEGTABLESMODE_HUFF)
 -		sp->cinfo.c.optimize_coding = FALSE;
 -	else
 -		sp->cinfo.c.optimize_coding = TRUE;
 -	if (downsampled_input) {
 -		/* Need to use raw-data interface to libjpeg */
 -		sp->cinfo.c.raw_data_in = TRUE;
 -		tif->tif_encoderow = JPEGEncodeRaw;
 -		tif->tif_encodestrip = JPEGEncodeRaw;
 -		tif->tif_encodetile = JPEGEncodeRaw;
 -	} else {
 -		/* Use normal interface to libjpeg */
 -		sp->cinfo.c.raw_data_in = FALSE;
 -		tif->tif_encoderow = JPEGEncode;
 -		tif->tif_encodestrip = JPEGEncode;
 -		tif->tif_encodetile = JPEGEncode;
 -	}
 -	/* Start JPEG compressor */
 -	if (!TIFFjpeg_start_compress(sp, FALSE))
 -		return (0);
 -	/* Allocate downsampled-data buffers if needed */
 -	if (downsampled_input) {
 -		if (!alloc_downsampled_buffers(tif, sp->cinfo.c.comp_info,
 -					       sp->cinfo.c.num_components))
 -			return (0);
 -	}
 -	sp->scancount = 0;
 -
 -	return (1);
 -}
 -
 -/*
 - * Encode a chunk of pixels.
 - * "Standard" case: incoming data is not downsampled.
 - */
 -static int
 -JPEGEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s)
 -{
 -	JPEGState *sp = JState(tif);
 -	tsize_t nrows;
 -	JSAMPROW bufptr[1];
 -
 -	(void) s;
 -	assert(sp != NULL);
 -	/* data is expected to be supplied in multiples of a scanline */
 -	nrows = cc / sp->bytesperline;
 -	if (cc % sp->bytesperline)
 -		TIFFWarningExt(tif->tif_clientdata, tif->tif_name, "fractional scanline discarded");
 -
 -        /* The last strip will be limited to image size */
 -        if ( !isTiled(tif) && tif->tif_row+nrows > tif->tif_dir.td_imagelength )
 -            nrows = tif->tif_dir.td_imagelength - tif->tif_row;
 -
 -	while (nrows-- > 0) {
 -		bufptr[0] = (JSAMPROW) buf;
 -		if (TIFFjpeg_write_scanlines(sp, bufptr, 1) != 1)
 -			return (0);
 -		if (nrows > 0)
 -			tif->tif_row++;
 -		buf += sp->bytesperline;
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Encode a chunk of pixels.
 - * Incoming data is expected to be downsampled per sampling factors.
 - */
 -static int
 -JPEGEncodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s)
 -{
 -	JPEGState *sp = JState(tif);
 -	JSAMPLE* inptr;
 -	JSAMPLE* outptr;
 -	tsize_t nrows;
 -	JDIMENSION clumps_per_line, nclump;
 -	int clumpoffset, ci, xpos, ypos;
 -	jpeg_component_info* compptr;
 -	int samples_per_clump = sp->samplesperclump;
 -	tsize_t bytesperclumpline;
 -
 -	(void) s;
 -	assert(sp != NULL);
 -	/* data is expected to be supplied in multiples of a clumpline */
 -	/* a clumpline is equivalent to v_sampling desubsampled scanlines */
 -	/* TODO: the following calculation of bytesperclumpline, should substitute calculation of sp->bytesperline, except that it is per v_sampling lines */
 -	bytesperclumpline = (((sp->cinfo.c.image_width+sp->h_sampling-1)/sp->h_sampling)
 -			     *(sp->h_sampling*sp->v_sampling+2)*sp->cinfo.c.data_precision+7)
 -			    /8;
 -
 -	nrows = ( cc / bytesperclumpline ) * sp->v_sampling;
 -	if (cc % bytesperclumpline)
 -		TIFFWarningExt(tif->tif_clientdata, tif->tif_name, "fractional scanline discarded");
 -
 -	/* Cb,Cr both have sampling factors 1, so this is correct */
 -	clumps_per_line = sp->cinfo.c.comp_info[1].downsampled_width;
 -
 -	while (nrows > 0) {
 -		/*
 -		 * Fastest way to separate the data is to make one pass
 -		 * over the scanline for each row of each component.
 -		 */
 -		clumpoffset = 0;		/* first sample in clump */
 -		for (ci = 0, compptr = sp->cinfo.c.comp_info;
 -		     ci < sp->cinfo.c.num_components;
 -		     ci++, compptr++) {
 -		    int hsamp = compptr->h_samp_factor;
 -		    int vsamp = compptr->v_samp_factor;
 -		    int padding = (int) (compptr->width_in_blocks * DCTSIZE -
 -					 clumps_per_line * hsamp);
 -		    for (ypos = 0; ypos < vsamp; ypos++) {
 -			inptr = ((JSAMPLE*) buf) + clumpoffset;
 -			outptr = sp->ds_buffer[ci][sp->scancount*vsamp + ypos];
 -			if (hsamp == 1) {
 -			    /* fast path for at least Cb and Cr */
 -			    for (nclump = clumps_per_line; nclump-- > 0; ) {
 -				*outptr++ = inptr[0];
 -				inptr += samples_per_clump;
 -			    }
 -			} else {
 -			    /* general case */
 -			    for (nclump = clumps_per_line; nclump-- > 0; ) {
 -				for (xpos = 0; xpos < hsamp; xpos++)
 -				    *outptr++ = inptr[xpos];
 -				inptr += samples_per_clump;
 -			    }
 -			}
 -			/* pad each scanline as needed */
 -			for (xpos = 0; xpos < padding; xpos++) {
 -			    *outptr = outptr[-1];
 -			    outptr++;
 -			}
 -			clumpoffset += hsamp;
 -		    }
 -		}
 -		sp->scancount++;
 -		if (sp->scancount >= DCTSIZE) {
 -			int n = sp->cinfo.c.max_v_samp_factor * DCTSIZE;
 -			if (TIFFjpeg_write_raw_data(sp, sp->ds_buffer, n) != n)
 -				return (0);
 -			sp->scancount = 0;
 -		}
 -		tif->tif_row += sp->v_sampling;
 -		buf += bytesperclumpline;
 -		nrows -= sp->v_sampling;
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Finish up at the end of a strip or tile.
 - */
 -static int
 -JPEGPostEncode(TIFF* tif)
 -{
 -	JPEGState *sp = JState(tif);
 -
 -	if (sp->scancount > 0) {
 -		/*
 -		 * Need to emit a partial bufferload of downsampled data.
 -		 * Pad the data vertically.
 -		 */
 -		int ci, ypos, n;
 -		jpeg_component_info* compptr;
 -
 -		for (ci = 0, compptr = sp->cinfo.c.comp_info;
 -		     ci < sp->cinfo.c.num_components;
 -		     ci++, compptr++) {
 -			int vsamp = compptr->v_samp_factor;
 -			tsize_t row_width = compptr->width_in_blocks * DCTSIZE
 -				* sizeof(JSAMPLE);
 -			for (ypos = sp->scancount * vsamp;
 -			     ypos < DCTSIZE * vsamp; ypos++) {
 -				_TIFFmemcpy((tdata_t)sp->ds_buffer[ci][ypos],
 -					    (tdata_t)sp->ds_buffer[ci][ypos-1],
 -					    row_width);
 -
 -			}
 -		}
 -		n = sp->cinfo.c.max_v_samp_factor * DCTSIZE;
 -		if (TIFFjpeg_write_raw_data(sp, sp->ds_buffer, n) != n)
 -			return (0);
 -	}
 -
 -	return (TIFFjpeg_finish_compress(JState(tif)));
 -}
 -
 -static void
 -JPEGCleanup(TIFF* tif)
 -{
 -	JPEGState *sp = JState(tif);
 -	
 -	assert(sp != 0);
 -
 -	tif->tif_tagmethods.vgetfield = sp->vgetparent;
 -	tif->tif_tagmethods.vsetfield = sp->vsetparent;
 -	tif->tif_tagmethods.printdir = sp->printdir;
 -
 -	if ( sp->cinfo_initialized )
 -	    TIFFjpeg_destroy(sp);	/* release libjpeg resources */
 -	if (sp->jpegtables)		/* tag value */
 -		_TIFFfree(sp->jpegtables);
 -	_TIFFfree(tif->tif_data);	/* release local state */
 -	tif->tif_data = NULL;
 -
 -	_TIFFSetDefaultCompressionState(tif);
 -}
 -
 -static void 
 -JPEGResetUpsampled( TIFF* tif )
 -{
 -	JPEGState* sp = JState(tif);
 -	TIFFDirectory* td = &tif->tif_dir;
 -
 -	/*
 -	 * Mark whether returned data is up-sampled or not so TIFFStripSize
 -	 * and TIFFTileSize return values that reflect the true amount of
 -	 * data.
 -	 */
 -	tif->tif_flags &= ~TIFF_UPSAMPLED;
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG) {
 -		if (td->td_photometric == PHOTOMETRIC_YCBCR &&
 -		    sp->jpegcolormode == JPEGCOLORMODE_RGB) {
 -			tif->tif_flags |= TIFF_UPSAMPLED;
 -		} else {
 -#ifdef notdef
 -			if (td->td_ycbcrsubsampling[0] != 1 ||
 -			    td->td_ycbcrsubsampling[1] != 1)
 -				; /* XXX what about up-sampling? */
 -#endif
 -		}
 -	}
 -
 -	/*
 -	 * Must recalculate cached tile size in case sampling state changed.
 -	 * Should we really be doing this now if image size isn't set? 
 -	 */
 -        if ( tif->tif_tilesize > 0 )
 -            tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tsize_t) -1;
 -
 -        if(tif->tif_scanlinesize > 0 )
 -            tif->tif_scanlinesize = TIFFScanlineSize(tif); 
 -}
 -
 -static int
 -JPEGVSetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	JPEGState* sp = JState(tif);
 -	const TIFFFieldInfo* fip;
 -	uint32 v32;
 -
 -	assert(sp != NULL);
 -
 -	switch (tag) {
 -	case TIFFTAG_JPEGTABLES:
 -		v32 = va_arg(ap, uint32);
 -		if (v32 == 0) {
 -			/* XXX */
 -			return (0);
 -		}
 -		_TIFFsetByteArray(&sp->jpegtables, va_arg(ap, void*),
 -		    (long) v32);
 -		sp->jpegtables_length = v32;
 -		TIFFSetFieldBit(tif, FIELD_JPEGTABLES);
 -		break;
 -	case TIFFTAG_JPEGQUALITY:
 -		sp->jpegquality = va_arg(ap, int);
 -		return (1);			/* pseudo tag */
 -	case TIFFTAG_JPEGCOLORMODE:
 -		sp->jpegcolormode = va_arg(ap, int);
 -                JPEGResetUpsampled( tif );
 -		return (1);			/* pseudo tag */
 -	case TIFFTAG_PHOTOMETRIC:
 -        {
 -                int ret_value = (*sp->vsetparent)(tif, tag, ap);
 -                JPEGResetUpsampled( tif );
 -                return ret_value;
 -        }
 -	case TIFFTAG_JPEGTABLESMODE:
 -		sp->jpegtablesmode = va_arg(ap, int);
 -		return (1);			/* pseudo tag */
 -	case TIFFTAG_YCBCRSUBSAMPLING:
 -                /* mark the fact that we have a real ycbcrsubsampling! */
 -		sp->ycbcrsampling_fetched = 1;
 -                /* should we be recomputing upsampling info here? */
 -		return (*sp->vsetparent)(tif, tag, ap);
 -	case TIFFTAG_FAXRECVPARAMS:
 -		sp->recvparams = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_FAXSUBADDRESS:
 -		_TIFFsetString(&sp->subaddress, va_arg(ap, char*));
 -		break;
 -	case TIFFTAG_FAXRECVTIME:
 -		sp->recvtime = va_arg(ap, uint32);
 -		break;
 -	case TIFFTAG_FAXDCS:
 -		_TIFFsetString(&sp->faxdcs, va_arg(ap, char*));
 -		break;
 -	default:
 -		return (*sp->vsetparent)(tif, tag, ap);
 -	}
 -
 -	if ((fip = _TIFFFieldWithTag(tif, tag))) {
 -		TIFFSetFieldBit(tif, fip->field_bit);
 -	} else {
 -		return (0);
 -	}
 -
 -	tif->tif_flags |= TIFF_DIRTYDIRECT;
 -	return (1);
 -}
 -
 -/*
 - * Some JPEG-in-TIFF produces do not emit the YCBCRSUBSAMPLING values in
 - * the TIFF tags, but still use non-default (2,2) values within the jpeg
 - * data stream itself.  In order for TIFF applications to work properly
 - * - for instance to get the strip buffer size right - it is imperative
 - * that the subsampling be available before we start reading the image
 - * data normally.  This function will attempt to load the first strip in
 - * order to get the sampling values from the jpeg data stream.  Various
 - * hacks are various places are done to ensure this function gets called
 - * before the td_ycbcrsubsampling values are used from the directory structure,
 - * including calling TIFFGetField() for the YCBCRSUBSAMPLING field from 
 - * TIFFStripSize(), and the printing code in tif_print.c. 
 - *
 - * Note that JPEGPreDeocode() will produce a fairly loud warning when the
 - * discovered sampling does not match the default sampling (2,2) or whatever
 - * was actually in the tiff tags. 
 - *
 - * Problems:
 - *  o This code will cause one whole strip/tile of compressed data to be
 - *    loaded just to get the tags right, even if the imagery is never read.
 - *    It would be more efficient to just load a bit of the header, and
 - *    initialize things from that. 
 - *
 - * See the bug in bugzilla for details:
 - *
 - * http://bugzilla.remotesensing.org/show_bug.cgi?id=168
 - *
 - * Frank Warmerdam, July 2002
 - */
 -
 -static void 
 -JPEGFixupTestSubsampling( TIFF * tif )
 -{
 -#ifdef CHECK_JPEG_YCBCR_SUBSAMPLING
 -    JPEGState *sp = JState(tif);
 -    TIFFDirectory *td = &tif->tif_dir;
 -
 -    JPEGInitializeLibJPEG( tif, 0, 0 );
 -
 -    /*
 -     * Some JPEG-in-TIFF files don't provide the ycbcrsampling tags, 
 -     * and use a sampling schema other than the default 2,2.  To handle
 -     * this we actually have to scan the header of a strip or tile of
 -     * jpeg data to get the sampling.  
 -     */
 -    if ( !sp->cinfo.comm.is_decompressor 
 -        || sp->ycbcrsampling_fetched  
 -        || td->td_photometric != PHOTOMETRIC_YCBCR )
 -        return;
 -
 -    sp->ycbcrsampling_fetched = 1;
 -    if ( TIFFIsTiled( tif ) )
 -    {
 -        if ( !TIFFFillTile( tif, 0 ) )
 -			return;
 -    }
 -    else
 -    {
 -        if ( !TIFFFillStrip( tif, 0 ) )
 -            return;
 -    }
 -
 -    TIFFSetField( tif, TIFFTAG_YCBCRSUBSAMPLING, 
 -                  (uint16) sp->h_sampling, (uint16) sp->v_sampling );
 -
 -    /*
 -    ** We want to clear the loaded strip so the application has time
 -    ** to set JPEGCOLORMODE or other behavior modifiers.  This essentially
 -    ** undoes the JPEGPreDecode triggers by TIFFFileStrip().  (#1936)
 -    */
 -    tif->tif_curstrip = -1;
 -
 -#endif /* CHECK_JPEG_YCBCR_SUBSAMPLING */
 -}
 -
 -static int
 -JPEGVGetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	JPEGState* sp = JState(tif);
 -
 -	assert(sp != NULL);
 -
 -	switch (tag) {
 -		case TIFFTAG_JPEGTABLES:
 -			*va_arg(ap, uint32*) = sp->jpegtables_length;
 -			*va_arg(ap, void**) = sp->jpegtables;
 -			break;
 -		case TIFFTAG_JPEGQUALITY:
 -			*va_arg(ap, int*) = sp->jpegquality;
 -			break;
 -		case TIFFTAG_JPEGCOLORMODE:
 -			*va_arg(ap, int*) = sp->jpegcolormode;
 -			break;
 -		case TIFFTAG_JPEGTABLESMODE:
 -			*va_arg(ap, int*) = sp->jpegtablesmode;
 -			break;
 -		case TIFFTAG_YCBCRSUBSAMPLING:
 -			JPEGFixupTestSubsampling( tif );
 -			return (*sp->vgetparent)(tif, tag, ap);
 -		case TIFFTAG_FAXRECVPARAMS:
 -			*va_arg(ap, uint32*) = sp->recvparams;
 -			break;
 -		case TIFFTAG_FAXSUBADDRESS:
 -			*va_arg(ap, char**) = sp->subaddress;
 -			break;
 -		case TIFFTAG_FAXRECVTIME:
 -			*va_arg(ap, uint32*) = sp->recvtime;
 -			break;
 -		case TIFFTAG_FAXDCS:
 -			*va_arg(ap, char**) = sp->faxdcs;
 -			break;
 -		default:
 -			return (*sp->vgetparent)(tif, tag, ap);
 -	}
 -	return (1);
 -}
 -
 -static void
 -JPEGPrintDir(TIFF* tif, FILE* fd, long flags)
 -{
 -	JPEGState* sp = JState(tif);
 -
 -	assert(sp != NULL);
 -
 -	(void) flags;
 -	if (TIFFFieldSet(tif,FIELD_JPEGTABLES))
 -		fprintf(fd, "  JPEG Tables: (%lu bytes)\n",
 -			(unsigned long) sp->jpegtables_length);
 -        if (TIFFFieldSet(tif,FIELD_RECVPARAMS))
 -                fprintf(fd, "  Fax Receive Parameters: %08lx\n",
 -                   (unsigned long) sp->recvparams);
 -        if (TIFFFieldSet(tif,FIELD_SUBADDRESS))
 -                fprintf(fd, "  Fax SubAddress: %s\n", sp->subaddress);
 -        if (TIFFFieldSet(tif,FIELD_RECVTIME))
 -                fprintf(fd, "  Fax Receive Time: %lu secs\n",
 -                    (unsigned long) sp->recvtime);
 -        if (TIFFFieldSet(tif,FIELD_FAXDCS))
 -                fprintf(fd, "  Fax DCS: %s\n", sp->faxdcs);
 -}
 -
 -static uint32
 -JPEGDefaultStripSize(TIFF* tif, uint32 s)
 -{
 -	JPEGState* sp = JState(tif);
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	s = (*sp->defsparent)(tif, s);
 -	if (s < td->td_imagelength)
 -		s = TIFFroundup(s, td->td_ycbcrsubsampling[1] * DCTSIZE);
 -	return (s);
 -}
 -
 -static void
 -JPEGDefaultTileSize(TIFF* tif, uint32* tw, uint32* th)
 -{
 -	JPEGState* sp = JState(tif);
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	(*sp->deftparent)(tif, tw, th);
 -	*tw = TIFFroundup(*tw, td->td_ycbcrsubsampling[0] * DCTSIZE);
 -	*th = TIFFroundup(*th, td->td_ycbcrsubsampling[1] * DCTSIZE);
 -}
 -
 -/*
 - * The JPEG library initialized used to be done in TIFFInitJPEG(), but
 - * now that we allow a TIFF file to be opened in update mode it is necessary
 - * to have some way of deciding whether compression or decompression is
 - * desired other than looking at tif->tif_mode.  We accomplish this by 
 - * examining {TILE/STRIP}BYTECOUNTS to see if there is a non-zero entry.
 - * If so, we assume decompression is desired. 
 - *
 - * This is tricky, because TIFFInitJPEG() is called while the directory is
 - * being read, and generally speaking the BYTECOUNTS tag won't have been read
 - * at that point.  So we try to defer jpeg library initialization till we
 - * do have that tag ... basically any access that might require the compressor
 - * or decompressor that occurs after the reading of the directory. 
 - *
 - * In an ideal world compressors or decompressors would be setup
 - * at the point where a single tile or strip was accessed (for read or write)
 - * so that stuff like update of missing tiles, or replacement of tiles could
 - * be done. However, we aren't trying to crack that nut just yet ...
 - *
 - * NFW, Feb 3rd, 2003.
 - */
 -
 -static int JPEGInitializeLibJPEG( TIFF * tif, int force_encode, int force_decode )
 -{
 -    JPEGState* sp = JState(tif);
 -    uint32 *byte_counts = NULL;
 -    int     data_is_empty = TRUE;
 -    int     decompress;
 -
 -
 -    if(sp->cinfo_initialized)
 -    {
 -        if ( force_encode && sp->cinfo.comm.is_decompressor )
 -            TIFFjpeg_destroy( sp );
 -        else if ( force_decode && !sp->cinfo.comm.is_decompressor )
 -            TIFFjpeg_destroy( sp );
 -        else
 -            return 1;
 -
 -        sp->cinfo_initialized = 0;
 -    }
 -
 -    /*
 -     * Do we have tile data already?  Make sure we initialize the
 -     * the state in decompressor mode if we have tile data, even if we
 -     * are not in read-only file access mode. 
 -     */
 -    if ( TIFFIsTiled( tif ) 
 -        && TIFFGetField( tif, TIFFTAG_TILEBYTECOUNTS, &byte_counts ) 
 -        && byte_counts != NULL )
 -    {
 -        data_is_empty = byte_counts[0] == 0;
 -    }
 -    if ( !TIFFIsTiled( tif ) 
 -        && TIFFGetField( tif, TIFFTAG_STRIPBYTECOUNTS, &byte_counts) 
 -        && byte_counts != NULL )
 -    {
 -        data_is_empty = byte_counts[0] == 0;
 -    }
 -
 -    if ( force_decode )
 -        decompress = 1;
 -    else if ( force_encode )
 -        decompress = 0;
 -    else if ( tif->tif_mode == O_RDONLY )
 -        decompress = 1;
 -    else if ( data_is_empty )
 -        decompress = 0;
 -    else
 -        decompress = 1;
 -
 -    /*
 -     * Initialize libjpeg.
 -     */
 -    if ( decompress ) {
 -        if (!TIFFjpeg_create_decompress(sp))
 -            return (0);
 -
 -    } else {
 -        if (!TIFFjpeg_create_compress(sp))
 -            return (0);
 -    }
 -
 -    sp->cinfo_initialized = TRUE;
 -
 -    return 1;
 -}
 -
 -int
 -TIFFInitJPEG(TIFF* tif, int scheme)
 -{
 -	JPEGState* sp;
 -
 -	assert(scheme == COMPRESSION_JPEG);
 -
 -	/*
 -	 * Merge codec-specific tag information.
 -	 */
 -	if (!_TIFFMergeFieldInfo(tif, jpegFieldInfo, N(jpegFieldInfo))) {
 -		TIFFErrorExt(tif->tif_clientdata,
 -			     "TIFFInitJPEG",
 -			     "Merging JPEG codec-specific tags failed");
 -		return 0;
 -	}
 -
 -	/*
 -	 * Allocate state block so tag methods have storage to record values.
 -	 */
 -	tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (JPEGState));
 -
 -	if (tif->tif_data == NULL) {
 -		TIFFErrorExt(tif->tif_clientdata,
 -			     "TIFFInitJPEG", "No space for JPEG state block");
 -		return 0;
 -	}
 -        _TIFFmemset(tif->tif_data, 0, sizeof(JPEGState));
 -
 -	sp = JState(tif);
 -	sp->tif = tif;				/* back link */
 -
 -	/*
 -	 * Override parent get/set field methods.
 -	 */
 -	sp->vgetparent = tif->tif_tagmethods.vgetfield;
 -	tif->tif_tagmethods.vgetfield = JPEGVGetField; /* hook for codec tags */
 -	sp->vsetparent = tif->tif_tagmethods.vsetfield;
 -	tif->tif_tagmethods.vsetfield = JPEGVSetField; /* hook for codec tags */
 -	sp->printdir = tif->tif_tagmethods.printdir;
 -	tif->tif_tagmethods.printdir = JPEGPrintDir;   /* hook for codec tags */
 -
 -	/* Default values for codec-specific fields */
 -	sp->jpegtables = NULL;
 -	sp->jpegtables_length = 0;
 -	sp->jpegquality = 75;			/* Default IJG quality */
 -	sp->jpegcolormode = JPEGCOLORMODE_RAW;
 -	sp->jpegtablesmode = JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF;
 -
 -        sp->recvparams = 0;
 -        sp->subaddress = NULL;
 -        sp->faxdcs = NULL;
 -
 -        sp->ycbcrsampling_fetched = 0;
 -
 -	/*
 -	 * Install codec methods.
 -	 */
 -	tif->tif_setupdecode = JPEGSetupDecode;
 -	tif->tif_predecode = JPEGPreDecode;
 -	tif->tif_decoderow = JPEGDecode;
 -	tif->tif_decodestrip = JPEGDecode;
 -	tif->tif_decodetile = JPEGDecode;
 -	tif->tif_setupencode = JPEGSetupEncode;
 -	tif->tif_preencode = JPEGPreEncode;
 -	tif->tif_postencode = JPEGPostEncode;
 -	tif->tif_encoderow = JPEGEncode;
 -	tif->tif_encodestrip = JPEGEncode;
 -	tif->tif_encodetile = JPEGEncode;
 -	tif->tif_cleanup = JPEGCleanup;
 -	sp->defsparent = tif->tif_defstripsize;
 -	tif->tif_defstripsize = JPEGDefaultStripSize;
 -	sp->deftparent = tif->tif_deftilesize;
 -	tif->tif_deftilesize = JPEGDefaultTileSize;
 -	tif->tif_flags |= TIFF_NOBITREV;	/* no bit reversal, please */
 -
 -        sp->cinfo_initialized = FALSE;
 -
 -	/*
 -        ** Create a JPEGTables field if no directory has yet been created. 
 -        ** We do this just to ensure that sufficient space is reserved for
 -        ** the JPEGTables field.  It will be properly created the right
 -        ** size later. 
 -        */
 -        if ( tif->tif_diroff == 0 )
 -        {
 -#define SIZE_OF_JPEGTABLES 2000
 -/*
 -The following line assumes incorrectly that all JPEG-in-TIFF files will have
 -a JPEGTABLES tag generated and causes null-filled JPEGTABLES tags to be written
 -when the JPEG data is placed with TIFFWriteRawStrip.  The field bit should be 
 -set, anyway, later when actual JPEGTABLES header is generated, so removing it 
 -here hopefully is harmless.
 -            TIFFSetFieldBit(tif, FIELD_JPEGTABLES);
 -*/
 -            sp->jpegtables_length = SIZE_OF_JPEGTABLES;
 -            sp->jpegtables = (void *) _TIFFmalloc(sp->jpegtables_length);
 -	    _TIFFmemset(sp->jpegtables, 0, SIZE_OF_JPEGTABLES);
 -#undef SIZE_OF_JPEGTABLES
 -        }
 -
 -        /*
 -         * Mark the TIFFTAG_YCBCRSAMPLES as present even if it is not
 -         * see: JPEGFixupTestSubsampling().
 -         */
 -        TIFFSetFieldBit( tif, FIELD_YCBCRSUBSAMPLING );
 -
 -	return 1;
 -}
 -#endif /* JPEG_SUPPORT */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_luv.c b/plugins/FreeImage/Source/LibTIFF/tif_luv.c deleted file mode 100644 index 5e72ca63ba..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_luv.c +++ /dev/null @@ -1,1629 +0,0 @@ -/* $Id: tif_luv.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1997 Greg Ward Larson
 - * Copyright (c) 1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler, Greg Larson and Silicon Graphics may not be used in any
 - * advertising or publicity relating to the software without the specific,
 - * prior written permission of Sam Leffler, Greg Larson and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER, GREG LARSON OR SILICON GRAPHICS BE LIABLE
 - * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#include "tiffiop.h"
 -#ifdef LOGLUV_SUPPORT
 -
 -/*
 - * TIFF Library.
 - * LogLuv compression support for high dynamic range images.
 - *
 - * Contributed by Greg Larson.
 - *
 - * LogLuv image support uses the TIFF library to store 16 or 10-bit
 - * log luminance values with 8 bits each of u and v or a 14-bit index.
 - *
 - * The codec can take as input and produce as output 32-bit IEEE float values 
 - * as well as 16-bit integer values.  A 16-bit luminance is interpreted
 - * as a sign bit followed by a 15-bit integer that is converted
 - * to and from a linear magnitude using the transformation:
 - *
 - *	L = 2^( (Le+.5)/256 - 64 )		# real from 15-bit
 - *
 - *	Le = floor( 256*(log2(L) + 64) )	# 15-bit from real
 - *
 - * The actual conversion to world luminance units in candelas per sq. meter
 - * requires an additional multiplier, which is stored in the TIFFTAG_STONITS.
 - * This value is usually set such that a reasonable exposure comes from
 - * clamping decoded luminances above 1 to 1 in the displayed image.
 - *
 - * The 16-bit values for u and v may be converted to real values by dividing
 - * each by 32768.  (This allows for negative values, which aren't useful as
 - * far as we know, but are left in case of future improvements in human
 - * color vision.)
 - *
 - * Conversion from (u,v), which is actually the CIE (u',v') system for
 - * you color scientists, is accomplished by the following transformation:
 - *
 - *	u = 4*x / (-2*x + 12*y + 3)
 - *	v = 9*y / (-2*x + 12*y + 3)
 - *
 - *	x = 9*u / (6*u - 16*v + 12)
 - *	y = 4*v / (6*u - 16*v + 12)
 - *
 - * This process is greatly simplified by passing 32-bit IEEE floats
 - * for each of three CIE XYZ coordinates.  The codec then takes care
 - * of conversion to and from LogLuv, though the application is still
 - * responsible for interpreting the TIFFTAG_STONITS calibration factor.
 - *
 - * By definition, a CIE XYZ vector of [1 1 1] corresponds to a neutral white
 - * point of (x,y)=(1/3,1/3).  However, most color systems assume some other
 - * white point, such as D65, and an absolute color conversion to XYZ then
 - * to another color space with a different white point may introduce an
 - * unwanted color cast to the image.  It is often desirable, therefore, to
 - * perform a white point conversion that maps the input white to [1 1 1]
 - * in XYZ, then record the original white point using the TIFFTAG_WHITEPOINT
 - * tag value.  A decoder that demands absolute color calibration may use
 - * this white point tag to get back the original colors, but usually it
 - * will be ignored and the new white point will be used instead that
 - * matches the output color space.
 - *
 - * Pixel information is compressed into one of two basic encodings, depending
 - * on the setting of the compression tag, which is one of COMPRESSION_SGILOG
 - * or COMPRESSION_SGILOG24.  For COMPRESSION_SGILOG, greyscale data is
 - * stored as:
 - *
 - *	 1       15
 - *	|-+---------------|
 - *
 - * COMPRESSION_SGILOG color data is stored as:
 - *
 - *	 1       15           8        8
 - *	|-+---------------|--------+--------|
 - *	 S       Le           ue       ve
 - *
 - * For the 24-bit COMPRESSION_SGILOG24 color format, the data is stored as:
 - *
 - *	     10           14
 - *	|----------|--------------|
 - *	     Le'          Ce
 - *
 - * There is no sign bit in the 24-bit case, and the (u,v) chromaticity is
 - * encoded as an index for optimal color resolution.  The 10 log bits are
 - * defined by the following conversions:
 - *
 - *	L = 2^((Le'+.5)/64 - 12)		# real from 10-bit
 - *
 - *	Le' = floor( 64*(log2(L) + 12) )	# 10-bit from real
 - *
 - * The 10 bits of the smaller format may be converted into the 15 bits of
 - * the larger format by multiplying by 4 and adding 13314.  Obviously,
 - * a smaller range of magnitudes is covered (about 5 orders of magnitude
 - * instead of 38), and the lack of a sign bit means that negative luminances
 - * are not allowed.  (Well, they aren't allowed in the real world, either,
 - * but they are useful for certain types of image processing.)
 - *
 - * The desired user format is controlled by the setting the internal
 - * pseudo tag TIFFTAG_SGILOGDATAFMT to one of:
 - *  SGILOGDATAFMT_FLOAT       = IEEE 32-bit float XYZ values
 - *  SGILOGDATAFMT_16BIT	      = 16-bit integer encodings of logL, u and v
 - * Raw data i/o is also possible using:
 - *  SGILOGDATAFMT_RAW         = 32-bit unsigned integer with encoded pixel
 - * In addition, the following decoding is provided for ease of display:
 - *  SGILOGDATAFMT_8BIT        = 8-bit default RGB gamma-corrected values
 - *
 - * For grayscale images, we provide the following data formats:
 - *  SGILOGDATAFMT_FLOAT       = IEEE 32-bit float Y values
 - *  SGILOGDATAFMT_16BIT       = 16-bit integer w/ encoded luminance
 - *  SGILOGDATAFMT_8BIT        = 8-bit gray monitor values
 - *
 - * Note that the COMPRESSION_SGILOG applies a simple run-length encoding
 - * scheme by separating the logL, u and v bytes for each row and applying
 - * a PackBits type of compression.  Since the 24-bit encoding is not
 - * adaptive, the 32-bit color format takes less space in many cases.
 - *
 - * Further control is provided over the conversion from higher-resolution
 - * formats to final encoded values through the pseudo tag
 - * TIFFTAG_SGILOGENCODE:
 - *  SGILOGENCODE_NODITHER     = do not dither encoded values
 - *  SGILOGENCODE_RANDITHER    = apply random dithering during encoding
 - *
 - * The default value of this tag is SGILOGENCODE_NODITHER for
 - * COMPRESSION_SGILOG to maximize run-length encoding and
 - * SGILOGENCODE_RANDITHER for COMPRESSION_SGILOG24 to turn
 - * quantization errors into noise.
 - */
 -
 -#include <stdio.h>
 -#include <stdlib.h>
 -#include <math.h>
 -
 -/*
 - * State block for each open TIFF
 - * file using LogLuv compression/decompression.
 - */
 -typedef	struct logLuvState LogLuvState;
 -
 -struct logLuvState {
 -	int			user_datafmt;	/* user data format */
 -	int			encode_meth;	/* encoding method */
 -	int			pixel_size;	/* bytes per pixel */
 -
 -	tidata_t*		tbuf;		/* translation buffer */
 -	int			tbuflen;	/* buffer length */
 -	void (*tfunc)(LogLuvState*, tidata_t, int);
 -
 -	TIFFVSetMethod		vgetparent;	/* super-class method */
 -	TIFFVSetMethod		vsetparent;	/* super-class method */
 -};
 -
 -#define	DecoderState(tif)	((LogLuvState*) (tif)->tif_data)
 -#define	EncoderState(tif)	((LogLuvState*) (tif)->tif_data)
 -
 -#define SGILOGDATAFMT_UNKNOWN	-1
 -
 -#define MINRUN		4	/* minimum run length */
 -
 -/*
 - * Decode a string of 16-bit gray pixels.
 - */
 -static int
 -LogL16Decode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s)
 -{
 -	LogLuvState* sp = DecoderState(tif);
 -	int shft, i, npixels;
 -	unsigned char* bp;
 -	int16* tp;
 -	int16 b;
 -	int cc, rc;
 -
 -	assert(s == 0);
 -	assert(sp != NULL);
 -
 -	npixels = occ / sp->pixel_size;
 -
 -	if (sp->user_datafmt == SGILOGDATAFMT_16BIT)
 -		tp = (int16*) op;
 -	else {
 -		assert(sp->tbuflen >= npixels);
 -		tp = (int16*) sp->tbuf;
 -	}
 -	_TIFFmemset((tdata_t) tp, 0, npixels*sizeof (tp[0]));
 -
 -	bp = (unsigned char*) tif->tif_rawcp;
 -	cc = tif->tif_rawcc;
 -					/* get each byte string */
 -	for (shft = 2*8; (shft -= 8) >= 0; ) {
 -		for (i = 0; i < npixels && cc > 0; )
 -			if (*bp >= 128) {		/* run */
 -				rc = *bp++ + (2-128);
 -				b = (int16)(*bp++ << shft);
 -				cc -= 2;
 -				while (rc-- && i < npixels)
 -					tp[i++] |= b;
 -			} else {			/* non-run */
 -				rc = *bp++;		/* nul is noop */
 -				while (--cc && rc-- && i < npixels)
 -					tp[i++] |= (int16)*bp++ << shft;
 -			}
 -		if (i != npixels) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		"LogL16Decode: Not enough data at row %d (short %d pixels)",
 -			    tif->tif_row, npixels - i);
 -			tif->tif_rawcp = (tidata_t) bp;
 -			tif->tif_rawcc = cc;
 -			return (0);
 -		}
 -	}
 -	(*sp->tfunc)(sp, op, npixels);
 -	tif->tif_rawcp = (tidata_t) bp;
 -	tif->tif_rawcc = cc;
 -	return (1);
 -}
 -
 -/*
 - * Decode a string of 24-bit pixels.
 - */
 -static int
 -LogLuvDecode24(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s)
 -{
 -	LogLuvState* sp = DecoderState(tif);
 -	int cc, i, npixels;
 -	unsigned char* bp;
 -	uint32* tp;
 -
 -	assert(s == 0);
 -	assert(sp != NULL);
 -
 -	npixels = occ / sp->pixel_size;
 -
 -	if (sp->user_datafmt == SGILOGDATAFMT_RAW)
 -		tp = (uint32 *)op;
 -	else {
 -		assert(sp->tbuflen >= npixels);
 -		tp = (uint32 *) sp->tbuf;
 -	}
 -					/* copy to array of uint32 */
 -	bp = (unsigned char*) tif->tif_rawcp;
 -	cc = tif->tif_rawcc;
 -	for (i = 0; i < npixels && cc > 0; i++) {
 -		tp[i] = bp[0] << 16 | bp[1] << 8 | bp[2];
 -		bp += 3;
 -		cc -= 3;
 -	}
 -	tif->tif_rawcp = (tidata_t) bp;
 -	tif->tif_rawcc = cc;
 -	if (i != npixels) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -	    "LogLuvDecode24: Not enough data at row %d (short %d pixels)",
 -		    tif->tif_row, npixels - i);
 -		return (0);
 -	}
 -	(*sp->tfunc)(sp, op, npixels);
 -	return (1);
 -}
 -
 -/*
 - * Decode a string of 32-bit pixels.
 - */
 -static int
 -LogLuvDecode32(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s)
 -{
 -	LogLuvState* sp;
 -	int shft, i, npixels;
 -	unsigned char* bp;
 -	uint32* tp;
 -	uint32 b;
 -	int cc, rc;
 -
 -	assert(s == 0);
 -	sp = DecoderState(tif);
 -	assert(sp != NULL);
 -
 -	npixels = occ / sp->pixel_size;
 -
 -	if (sp->user_datafmt == SGILOGDATAFMT_RAW)
 -		tp = (uint32*) op;
 -	else {
 -		assert(sp->tbuflen >= npixels);
 -		tp = (uint32*) sp->tbuf;
 -	}
 -	_TIFFmemset((tdata_t) tp, 0, npixels*sizeof (tp[0]));
 -
 -	bp = (unsigned char*) tif->tif_rawcp;
 -	cc = tif->tif_rawcc;
 -					/* get each byte string */
 -	for (shft = 4*8; (shft -= 8) >= 0; ) {
 -		for (i = 0; i < npixels && cc > 0; )
 -			if (*bp >= 128) {		/* run */
 -				rc = *bp++ + (2-128);
 -				b = (uint32)*bp++ << shft;
 -				cc -= 2;
 -				while (rc-- && i < npixels)
 -					tp[i++] |= b;
 -			} else {			/* non-run */
 -				rc = *bp++;		/* nul is noop */
 -				while (--cc && rc-- && i < npixels)
 -					tp[i++] |= (uint32)*bp++ << shft;
 -			}
 -		if (i != npixels) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		"LogLuvDecode32: Not enough data at row %d (short %d pixels)",
 -			    tif->tif_row, npixels - i);
 -			tif->tif_rawcp = (tidata_t) bp;
 -			tif->tif_rawcc = cc;
 -			return (0);
 -		}
 -	}
 -	(*sp->tfunc)(sp, op, npixels);
 -	tif->tif_rawcp = (tidata_t) bp;
 -	tif->tif_rawcc = cc;
 -	return (1);
 -}
 -
 -/*
 - * Decode a strip of pixels.  We break it into rows to
 - * maintain synchrony with the encode algorithm, which
 - * is row by row.
 - */
 -static int
 -LogLuvDecodeStrip(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	tsize_t rowlen = TIFFScanlineSize(tif);
 -
 -	assert(cc%rowlen == 0);
 -	while (cc && (*tif->tif_decoderow)(tif, bp, rowlen, s))
 -		bp += rowlen, cc -= rowlen;
 -	return (cc == 0);
 -}
 -
 -/*
 - * Decode a tile of pixels.  We break it into rows to
 - * maintain synchrony with the encode algorithm, which
 - * is row by row.
 - */
 -static int
 -LogLuvDecodeTile(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	tsize_t rowlen = TIFFTileRowSize(tif);
 -
 -	assert(cc%rowlen == 0);
 -	while (cc && (*tif->tif_decoderow)(tif, bp, rowlen, s))
 -		bp += rowlen, cc -= rowlen;
 -	return (cc == 0);
 -}
 -
 -/*
 - * Encode a row of 16-bit pixels.
 - */
 -static int
 -LogL16Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	LogLuvState* sp = EncoderState(tif);
 -	int shft, i, j, npixels;
 -	tidata_t op;
 -	int16* tp;
 -	int16 b;
 -	int occ, rc=0, mask, beg;
 -
 -	assert(s == 0);
 -	assert(sp != NULL);
 -	npixels = cc / sp->pixel_size;
 -
 -	if (sp->user_datafmt == SGILOGDATAFMT_16BIT)
 -		tp = (int16*) bp;
 -	else {
 -		tp = (int16*) sp->tbuf;
 -		assert(sp->tbuflen >= npixels);
 -		(*sp->tfunc)(sp, bp, npixels);
 -	}
 -					/* compress each byte string */
 -	op = tif->tif_rawcp;
 -	occ = tif->tif_rawdatasize - tif->tif_rawcc;
 -	for (shft = 2*8; (shft -= 8) >= 0; )
 -		for (i = 0; i < npixels; i += rc) {
 -			if (occ < 4) {
 -				tif->tif_rawcp = op;
 -				tif->tif_rawcc = tif->tif_rawdatasize - occ;
 -				if (!TIFFFlushData1(tif))
 -					return (-1);
 -				op = tif->tif_rawcp;
 -				occ = tif->tif_rawdatasize - tif->tif_rawcc;
 -			}
 -			mask = 0xff << shft;		/* find next run */
 -			for (beg = i; beg < npixels; beg += rc) {
 -				b = (int16) (tp[beg] & mask);
 -				rc = 1;
 -				while (rc < 127+2 && beg+rc < npixels &&
 -						(tp[beg+rc] & mask) == b)
 -					rc++;
 -				if (rc >= MINRUN)
 -					break;		/* long enough */
 -			}
 -			if (beg-i > 1 && beg-i < MINRUN) {
 -				b = (int16) (tp[i] & mask);/*check short run */
 -				j = i+1;
 -				while ((tp[j++] & mask) == b)
 -                                    if (j == beg) {
 -                                        *op++ = (tidataval_t)(128-2+j-i);
 -                                        *op++ = (tidataval_t) (b >> shft);
 -                                        occ -= 2;
 -                                        i = beg;
 -                                        break;
 -                                    }
 -			}
 -			while (i < beg) {		/* write out non-run */
 -				if ((j = beg-i) > 127) j = 127;
 -				if (occ < j+3) {
 -                                    tif->tif_rawcp = op;
 -                                    tif->tif_rawcc = tif->tif_rawdatasize - occ;
 -                                    if (!TIFFFlushData1(tif))
 -                                        return (-1);
 -                                    op = tif->tif_rawcp;
 -                                    occ = tif->tif_rawdatasize - tif->tif_rawcc;
 -				}
 -				*op++ = (tidataval_t) j; occ--;
 -				while (j--) {
 -					*op++ = (tidataval_t) (tp[i++] >> shft & 0xff);
 -					occ--;
 -				}
 -			}
 -			if (rc >= MINRUN) {		/* write out run */
 -				*op++ = (tidataval_t) (128-2+rc);
 -				*op++ = (tidataval_t) (tp[beg] >> shft & 0xff);
 -				occ -= 2;
 -			} else
 -				rc = 0;
 -		}
 -	tif->tif_rawcp = op;
 -	tif->tif_rawcc = tif->tif_rawdatasize - occ;
 -
 -	return (1);
 -}
 -
 -/*
 - * Encode a row of 24-bit pixels.
 - */
 -static int
 -LogLuvEncode24(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	LogLuvState* sp = EncoderState(tif);
 -	int i, npixels, occ;
 -	tidata_t op;
 -	uint32* tp;
 -
 -	assert(s == 0);
 -	assert(sp != NULL);
 -	npixels = cc / sp->pixel_size;
 -
 -	if (sp->user_datafmt == SGILOGDATAFMT_RAW)
 -		tp = (uint32*) bp;
 -	else {
 -		tp = (uint32*) sp->tbuf;
 -		assert(sp->tbuflen >= npixels);
 -		(*sp->tfunc)(sp, bp, npixels);
 -	}
 -					/* write out encoded pixels */
 -	op = tif->tif_rawcp;
 -	occ = tif->tif_rawdatasize - tif->tif_rawcc;
 -	for (i = npixels; i--; ) {
 -		if (occ < 3) {
 -			tif->tif_rawcp = op;
 -			tif->tif_rawcc = tif->tif_rawdatasize - occ;
 -			if (!TIFFFlushData1(tif))
 -				return (-1);
 -			op = tif->tif_rawcp;
 -			occ = tif->tif_rawdatasize - tif->tif_rawcc;
 -		}
 -		*op++ = (tidataval_t)(*tp >> 16);
 -		*op++ = (tidataval_t)(*tp >> 8 & 0xff);
 -		*op++ = (tidataval_t)(*tp++ & 0xff);
 -		occ -= 3;
 -	}
 -	tif->tif_rawcp = op;
 -	tif->tif_rawcc = tif->tif_rawdatasize - occ;
 -
 -	return (1);
 -}
 -
 -/*
 - * Encode a row of 32-bit pixels.
 - */
 -static int
 -LogLuvEncode32(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	LogLuvState* sp = EncoderState(tif);
 -	int shft, i, j, npixels;
 -	tidata_t op;
 -	uint32* tp;
 -	uint32 b;
 -	int occ, rc=0, mask, beg;
 -
 -	assert(s == 0);
 -	assert(sp != NULL);
 -
 -	npixels = cc / sp->pixel_size;
 -
 -	if (sp->user_datafmt == SGILOGDATAFMT_RAW)
 -		tp = (uint32*) bp;
 -	else {
 -		tp = (uint32*) sp->tbuf;
 -		assert(sp->tbuflen >= npixels);
 -		(*sp->tfunc)(sp, bp, npixels);
 -	}
 -					/* compress each byte string */
 -	op = tif->tif_rawcp;
 -	occ = tif->tif_rawdatasize - tif->tif_rawcc;
 -	for (shft = 4*8; (shft -= 8) >= 0; )
 -		for (i = 0; i < npixels; i += rc) {
 -			if (occ < 4) {
 -				tif->tif_rawcp = op;
 -				tif->tif_rawcc = tif->tif_rawdatasize - occ;
 -				if (!TIFFFlushData1(tif))
 -					return (-1);
 -				op = tif->tif_rawcp;
 -				occ = tif->tif_rawdatasize - tif->tif_rawcc;
 -			}
 -			mask = 0xff << shft;		/* find next run */
 -			for (beg = i; beg < npixels; beg += rc) {
 -				b = tp[beg] & mask;
 -				rc = 1;
 -				while (rc < 127+2 && beg+rc < npixels &&
 -						(tp[beg+rc] & mask) == b)
 -					rc++;
 -				if (rc >= MINRUN)
 -					break;		/* long enough */
 -			}
 -			if (beg-i > 1 && beg-i < MINRUN) {
 -				b = tp[i] & mask;	/* check short run */
 -				j = i+1;
 -				while ((tp[j++] & mask) == b)
 -					if (j == beg) {
 -						*op++ = (tidataval_t)(128-2+j-i);
 -						*op++ = (tidataval_t)(b >> shft);
 -						occ -= 2;
 -						i = beg;
 -						break;
 -					}
 -			}
 -			while (i < beg) {		/* write out non-run */
 -				if ((j = beg-i) > 127) j = 127;
 -				if (occ < j+3) {
 -					tif->tif_rawcp = op;
 -					tif->tif_rawcc = tif->tif_rawdatasize - occ;
 -					if (!TIFFFlushData1(tif))
 -						return (-1);
 -					op = tif->tif_rawcp;
 -					occ = tif->tif_rawdatasize - tif->tif_rawcc;
 -				}
 -				*op++ = (tidataval_t) j; occ--;
 -				while (j--) {
 -					*op++ = (tidataval_t)(tp[i++] >> shft & 0xff);
 -					occ--;
 -				}
 -			}
 -			if (rc >= MINRUN) {		/* write out run */
 -				*op++ = (tidataval_t) (128-2+rc);
 -				*op++ = (tidataval_t)(tp[beg] >> shft & 0xff);
 -				occ -= 2;
 -			} else
 -				rc = 0;
 -		}
 -	tif->tif_rawcp = op;
 -	tif->tif_rawcc = tif->tif_rawdatasize - occ;
 -
 -	return (1);
 -}
 -
 -/*
 - * Encode a strip of pixels.  We break it into rows to
 - * avoid encoding runs across row boundaries.
 - */
 -static int
 -LogLuvEncodeStrip(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	tsize_t rowlen = TIFFScanlineSize(tif);
 -
 -	assert(cc%rowlen == 0);
 -	while (cc && (*tif->tif_encoderow)(tif, bp, rowlen, s) == 1)
 -		bp += rowlen, cc -= rowlen;
 -	return (cc == 0);
 -}
 -
 -/*
 - * Encode a tile of pixels.  We break it into rows to
 - * avoid encoding runs across row boundaries.
 - */
 -static int
 -LogLuvEncodeTile(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	tsize_t rowlen = TIFFTileRowSize(tif);
 -
 -	assert(cc%rowlen == 0);
 -	while (cc && (*tif->tif_encoderow)(tif, bp, rowlen, s) == 1)
 -		bp += rowlen, cc -= rowlen;
 -	return (cc == 0);
 -}
 -
 -/*
 - * Encode/Decode functions for converting to and from user formats.
 - */
 -
 -#include "uvcode.h"
 -
 -#ifndef UVSCALE
 -#define U_NEU		0.210526316
 -#define V_NEU		0.473684211
 -#define UVSCALE		410.
 -#endif
 -
 -#ifndef	M_LN2
 -#define M_LN2		0.69314718055994530942
 -#endif
 -#ifndef M_PI
 -#define M_PI		3.14159265358979323846
 -#endif
 -#define log2(x)		((1./M_LN2)*log(x))
 -#define exp2(x)		exp(M_LN2*(x))
 -
 -#define itrunc(x,m)	((m)==SGILOGENCODE_NODITHER ? \
 -				(int)(x) : \
 -				(int)((x) + rand()*(1./RAND_MAX) - .5))
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -double
 -LogL16toY(int p16)		/* compute luminance from 16-bit LogL */
 -{
 -	int	Le = p16 & 0x7fff;
 -	double	Y;
 -
 -	if (!Le)
 -		return (0.);
 -	Y = exp(M_LN2/256.*(Le+.5) - M_LN2*64.);
 -	return (!(p16 & 0x8000) ? Y : -Y);
 -}
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -int
 -LogL16fromY(double Y, int em)	/* get 16-bit LogL from Y */
 -{
 -	if (Y >= 1.8371976e19)
 -		return (0x7fff);
 -	if (Y <= -1.8371976e19)
 -		return (0xffff);
 -	if (Y > 5.4136769e-20)
 -		return itrunc(256.*(log2(Y) + 64.), em);
 -	if (Y < -5.4136769e-20)
 -		return (~0x7fff | itrunc(256.*(log2(-Y) + 64.), em));
 -	return (0);
 -}
 -
 -static void
 -L16toY(LogLuvState* sp, tidata_t op, int n)
 -{
 -	int16* l16 = (int16*) sp->tbuf;
 -	float* yp = (float*) op;
 -
 -	while (n-- > 0)
 -		*yp++ = (float)LogL16toY(*l16++);
 -}
 -
 -static void
 -L16toGry(LogLuvState* sp, tidata_t op, int n)
 -{
 -	int16* l16 = (int16*) sp->tbuf;
 -	uint8* gp = (uint8*) op;
 -
 -	while (n-- > 0) {
 -		double Y = LogL16toY(*l16++);
 -		*gp++ = (uint8) ((Y <= 0.) ? 0 : (Y >= 1.) ? 255 : (int)(256.*sqrt(Y)));
 -	}
 -}
 -
 -static void
 -L16fromY(LogLuvState* sp, tidata_t op, int n)
 -{
 -	int16* l16 = (int16*) sp->tbuf;
 -	float* yp = (float*) op;
 -
 -	while (n-- > 0)
 -		*l16++ = (int16) (LogL16fromY(*yp++, sp->encode_meth));
 -}
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -void
 -XYZtoRGB24(float xyz[3], uint8 rgb[3])
 -{
 -	double	r, g, b;
 -					/* assume CCIR-709 primaries */
 -	r =  2.690*xyz[0] + -1.276*xyz[1] + -0.414*xyz[2];
 -	g = -1.022*xyz[0] +  1.978*xyz[1] +  0.044*xyz[2];
 -	b =  0.061*xyz[0] + -0.224*xyz[1] +  1.163*xyz[2];
 -					/* assume 2.0 gamma for speed */
 -	/* could use integer sqrt approx., but this is probably faster */
 -	rgb[0] = (uint8)((r<=0.) ? 0 : (r >= 1.) ? 255 : (int)(256.*sqrt(r)));
 -	rgb[1] = (uint8)((g<=0.) ? 0 : (g >= 1.) ? 255 : (int)(256.*sqrt(g)));
 -	rgb[2] = (uint8)((b<=0.) ? 0 : (b >= 1.) ? 255 : (int)(256.*sqrt(b)));
 -}
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -double
 -LogL10toY(int p10)		/* compute luminance from 10-bit LogL */
 -{
 -	if (p10 == 0)
 -		return (0.);
 -	return (exp(M_LN2/64.*(p10+.5) - M_LN2*12.));
 -}
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -int
 -LogL10fromY(double Y, int em)	/* get 10-bit LogL from Y */
 -{
 -	if (Y >= 15.742)
 -		return (0x3ff);
 -	else if (Y <= .00024283)
 -		return (0);
 -	else
 -		return itrunc(64.*(log2(Y) + 12.), em);
 -}
 -
 -#define NANGLES		100
 -#define uv2ang(u, v)	( (NANGLES*.499999999/M_PI) \
 -				* atan2((v)-V_NEU,(u)-U_NEU) + .5*NANGLES )
 -
 -static int
 -oog_encode(double u, double v)		/* encode out-of-gamut chroma */
 -{
 -	static int	oog_table[NANGLES];
 -	static int	initialized = 0;
 -	register int	i;
 -	
 -	if (!initialized) {		/* set up perimeter table */
 -		double	eps[NANGLES], ua, va, ang, epsa;
 -		int	ui, vi, ustep;
 -		for (i = NANGLES; i--; )
 -			eps[i] = 2.;
 -		for (vi = UV_NVS; vi--; ) {
 -			va = UV_VSTART + (vi+.5)*UV_SQSIZ;
 -			ustep = uv_row[vi].nus-1;
 -			if (vi == UV_NVS-1 || vi == 0 || ustep <= 0)
 -				ustep = 1;
 -			for (ui = uv_row[vi].nus-1; ui >= 0; ui -= ustep) {
 -				ua = uv_row[vi].ustart + (ui+.5)*UV_SQSIZ;
 -				ang = uv2ang(ua, va);
 -                                i = (int) ang;
 -				epsa = fabs(ang - (i+.5));
 -				if (epsa < eps[i]) {
 -					oog_table[i] = uv_row[vi].ncum + ui;
 -					eps[i] = epsa;
 -				}
 -			}
 -		}
 -		for (i = NANGLES; i--; )	/* fill any holes */
 -			if (eps[i] > 1.5) {
 -				int	i1, i2;
 -				for (i1 = 1; i1 < NANGLES/2; i1++)
 -					if (eps[(i+i1)%NANGLES] < 1.5)
 -						break;
 -				for (i2 = 1; i2 < NANGLES/2; i2++)
 -					if (eps[(i+NANGLES-i2)%NANGLES] < 1.5)
 -						break;
 -				if (i1 < i2)
 -					oog_table[i] =
 -						oog_table[(i+i1)%NANGLES];
 -				else
 -					oog_table[i] =
 -						oog_table[(i+NANGLES-i2)%NANGLES];
 -			}
 -		initialized = 1;
 -	}
 -	i = (int) uv2ang(u, v);		/* look up hue angle */
 -	return (oog_table[i]);
 -}
 -
 -#undef uv2ang
 -#undef NANGLES
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -int
 -uv_encode(double u, double v, int em)	/* encode (u',v') coordinates */
 -{
 -	register int	vi, ui;
 -
 -	if (v < UV_VSTART)
 -		return oog_encode(u, v);
 -	vi = itrunc((v - UV_VSTART)*(1./UV_SQSIZ), em);
 -	if (vi >= UV_NVS)
 -		return oog_encode(u, v);
 -	if (u < uv_row[vi].ustart)
 -		return oog_encode(u, v);
 -	ui = itrunc((u - uv_row[vi].ustart)*(1./UV_SQSIZ), em);
 -	if (ui >= uv_row[vi].nus)
 -		return oog_encode(u, v);
 -
 -	return (uv_row[vi].ncum + ui);
 -}
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -int
 -uv_decode(double *up, double *vp, int c)	/* decode (u',v') index */
 -{
 -	int	upper, lower;
 -	register int	ui, vi;
 -
 -	if (c < 0 || c >= UV_NDIVS)
 -		return (-1);
 -	lower = 0;				/* binary search */
 -	upper = UV_NVS;
 -	while (upper - lower > 1) {
 -		vi = (lower + upper) >> 1;
 -		ui = c - uv_row[vi].ncum;
 -		if (ui > 0)
 -			lower = vi;
 -		else if (ui < 0)
 -			upper = vi;
 -		else {
 -			lower = vi;
 -			break;
 -		}
 -	}
 -	vi = lower;
 -	ui = c - uv_row[vi].ncum;
 -	*up = uv_row[vi].ustart + (ui+.5)*UV_SQSIZ;
 -	*vp = UV_VSTART + (vi+.5)*UV_SQSIZ;
 -	return (0);
 -}
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -void
 -LogLuv24toXYZ(uint32 p, float XYZ[3])
 -{
 -	int	Ce;
 -	double	L, u, v, s, x, y;
 -					/* decode luminance */
 -	L = LogL10toY(p>>14 & 0x3ff);
 -	if (L <= 0.) {
 -		XYZ[0] = XYZ[1] = XYZ[2] = 0.;
 -		return;
 -	}
 -					/* decode color */
 -	Ce = p & 0x3fff;
 -	if (uv_decode(&u, &v, Ce) < 0) {
 -		u = U_NEU; v = V_NEU;
 -	}
 -	s = 1./(6.*u - 16.*v + 12.);
 -	x = 9.*u * s;
 -	y = 4.*v * s;
 -					/* convert to XYZ */
 -	XYZ[0] = (float)(x/y * L);
 -	XYZ[1] = (float)L;
 -	XYZ[2] = (float)((1.-x-y)/y * L);
 -}
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -uint32
 -LogLuv24fromXYZ(float XYZ[3], int em)
 -{
 -	int	Le, Ce;
 -	double	u, v, s;
 -					/* encode luminance */
 -	Le = LogL10fromY(XYZ[1], em);
 -					/* encode color */
 -	s = XYZ[0] + 15.*XYZ[1] + 3.*XYZ[2];
 -	if (!Le || s <= 0.) {
 -		u = U_NEU;
 -		v = V_NEU;
 -	} else {
 -		u = 4.*XYZ[0] / s;
 -		v = 9.*XYZ[1] / s;
 -	}
 -	Ce = uv_encode(u, v, em);
 -	if (Ce < 0)			/* never happens */
 -		Ce = uv_encode(U_NEU, V_NEU, SGILOGENCODE_NODITHER);
 -					/* combine encodings */
 -	return (Le << 14 | Ce);
 -}
 -
 -static void
 -Luv24toXYZ(LogLuvState* sp, tidata_t op, int n)
 -{
 -	uint32* luv = (uint32*) sp->tbuf;
 -	float* xyz = (float*) op;
 -
 -	while (n-- > 0) {
 -		LogLuv24toXYZ(*luv, xyz);
 -		xyz += 3;
 -		luv++;
 -	}
 -}
 -
 -static void
 -Luv24toLuv48(LogLuvState* sp, tidata_t op, int n)
 -{
 -	uint32* luv = (uint32*) sp->tbuf;
 -	int16* luv3 = (int16*) op;
 -
 -	while (n-- > 0) {
 -		double u, v;
 -
 -		*luv3++ = (int16)((*luv >> 12 & 0xffd) + 13314);
 -		if (uv_decode(&u, &v, *luv&0x3fff) < 0) {
 -			u = U_NEU;
 -			v = V_NEU;
 -		}
 -		*luv3++ = (int16)(u * (1L<<15));
 -		*luv3++ = (int16)(v * (1L<<15));
 -		luv++;
 -	}
 -}
 -
 -static void
 -Luv24toRGB(LogLuvState* sp, tidata_t op, int n)
 -{
 -	uint32* luv = (uint32*) sp->tbuf;
 -	uint8* rgb = (uint8*) op;
 -
 -	while (n-- > 0) {
 -		float xyz[3];
 -
 -		LogLuv24toXYZ(*luv++, xyz);
 -		XYZtoRGB24(xyz, rgb);
 -		rgb += 3;
 -	}
 -}
 -
 -static void
 -Luv24fromXYZ(LogLuvState* sp, tidata_t op, int n)
 -{
 -	uint32* luv = (uint32*) sp->tbuf;
 -	float* xyz = (float*) op;
 -
 -	while (n-- > 0) {
 -		*luv++ = LogLuv24fromXYZ(xyz, sp->encode_meth);
 -		xyz += 3;
 -	}
 -}
 -
 -static void
 -Luv24fromLuv48(LogLuvState* sp, tidata_t op, int n)
 -{
 -	uint32* luv = (uint32*) sp->tbuf;
 -	int16* luv3 = (int16*) op;
 -
 -	while (n-- > 0) {
 -		int Le, Ce;
 -
 -		if (luv3[0] <= 0)
 -			Le = 0;
 -		else if (luv3[0] >= (1<<12)+3314)
 -			Le = (1<<10) - 1;
 -		else if (sp->encode_meth == SGILOGENCODE_NODITHER)
 -			Le = (luv3[0]-3314) >> 2;
 -		else
 -			Le = itrunc(.25*(luv3[0]-3314.), sp->encode_meth);
 -
 -		Ce = uv_encode((luv3[1]+.5)/(1<<15), (luv3[2]+.5)/(1<<15),
 -					sp->encode_meth);
 -		if (Ce < 0)	/* never happens */
 -			Ce = uv_encode(U_NEU, V_NEU, SGILOGENCODE_NODITHER);
 -		*luv++ = (uint32)Le << 14 | Ce;
 -		luv3 += 3;
 -	}
 -}
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -void
 -LogLuv32toXYZ(uint32 p, float XYZ[3])
 -{
 -	double	L, u, v, s, x, y;
 -					/* decode luminance */
 -	L = LogL16toY((int)p >> 16);
 -	if (L <= 0.) {
 -		XYZ[0] = XYZ[1] = XYZ[2] = 0.;
 -		return;
 -	}
 -					/* decode color */
 -	u = 1./UVSCALE * ((p>>8 & 0xff) + .5);
 -	v = 1./UVSCALE * ((p & 0xff) + .5);
 -	s = 1./(6.*u - 16.*v + 12.);
 -	x = 9.*u * s;
 -	y = 4.*v * s;
 -					/* convert to XYZ */
 -	XYZ[0] = (float)(x/y * L);
 -	XYZ[1] = (float)L;
 -	XYZ[2] = (float)((1.-x-y)/y * L);
 -}
 -
 -#if !LOGLUV_PUBLIC
 -static
 -#endif
 -uint32
 -LogLuv32fromXYZ(float XYZ[3], int em)
 -{
 -	unsigned int	Le, ue, ve;
 -	double	u, v, s;
 -					/* encode luminance */
 -	Le = (unsigned int)LogL16fromY(XYZ[1], em);
 -					/* encode color */
 -	s = XYZ[0] + 15.*XYZ[1] + 3.*XYZ[2];
 -	if (!Le || s <= 0.) {
 -		u = U_NEU;
 -		v = V_NEU;
 -	} else {
 -		u = 4.*XYZ[0] / s;
 -		v = 9.*XYZ[1] / s;
 -	}
 -	if (u <= 0.) ue = 0;
 -	else ue = itrunc(UVSCALE*u, em);
 -	if (ue > 255) ue = 255;
 -	if (v <= 0.) ve = 0;
 -	else ve = itrunc(UVSCALE*v, em);
 -	if (ve > 255) ve = 255;
 -					/* combine encodings */
 -	return (Le << 16 | ue << 8 | ve);
 -}
 -
 -static void
 -Luv32toXYZ(LogLuvState* sp, tidata_t op, int n)
 -{
 -	uint32* luv = (uint32*) sp->tbuf;
 -	float* xyz = (float*) op;
 -
 -	while (n-- > 0) {
 -		LogLuv32toXYZ(*luv++, xyz);
 -		xyz += 3;
 -	}
 -}
 -
 -static void
 -Luv32toLuv48(LogLuvState* sp, tidata_t op, int n)
 -{
 -	uint32* luv = (uint32*) sp->tbuf;
 -	int16* luv3 = (int16*) op;
 -
 -	while (n-- > 0) {
 -		double u, v;
 -
 -		*luv3++ = (int16)(*luv >> 16);
 -		u = 1./UVSCALE * ((*luv>>8 & 0xff) + .5);
 -		v = 1./UVSCALE * ((*luv & 0xff) + .5);
 -		*luv3++ = (int16)(u * (1L<<15));
 -		*luv3++ = (int16)(v * (1L<<15));
 -		luv++;
 -	}
 -}
 -
 -static void
 -Luv32toRGB(LogLuvState* sp, tidata_t op, int n)
 -{
 -	uint32* luv = (uint32*) sp->tbuf;
 -	uint8* rgb = (uint8*) op;
 -
 -	while (n-- > 0) {
 -		float xyz[3];
 -
 -		LogLuv32toXYZ(*luv++, xyz);
 -		XYZtoRGB24(xyz, rgb);
 -		rgb += 3;
 -	}
 -}
 -
 -static void
 -Luv32fromXYZ(LogLuvState* sp, tidata_t op, int n)
 -{
 -	uint32* luv = (uint32*) sp->tbuf;
 -	float* xyz = (float*) op;
 -
 -	while (n-- > 0) {
 -		*luv++ = LogLuv32fromXYZ(xyz, sp->encode_meth);
 -		xyz += 3;
 -	}
 -}
 -
 -static void
 -Luv32fromLuv48(LogLuvState* sp, tidata_t op, int n)
 -{
 -	uint32* luv = (uint32*) sp->tbuf;
 -	int16* luv3 = (int16*) op;
 -
 -	if (sp->encode_meth == SGILOGENCODE_NODITHER) {
 -		while (n-- > 0) {
 -			*luv++ = (uint32)luv3[0] << 16 |
 -				(luv3[1]*(uint32)(UVSCALE+.5) >> 7 & 0xff00) |
 -				(luv3[2]*(uint32)(UVSCALE+.5) >> 15 & 0xff);
 -			luv3 += 3;
 -		}
 -		return;
 -	}
 -	while (n-- > 0) {
 -		*luv++ = (uint32)luv3[0] << 16 |
 -	(itrunc(luv3[1]*(UVSCALE/(1<<15)), sp->encode_meth) << 8 & 0xff00) |
 -		(itrunc(luv3[2]*(UVSCALE/(1<<15)), sp->encode_meth) & 0xff);
 -		luv3 += 3;
 -	}
 -}
 -
 -static void
 -_logLuvNop(LogLuvState* sp, tidata_t op, int n)
 -{
 -	(void) sp; (void) op; (void) n;
 -}
 -
 -static int
 -LogL16GuessDataFmt(TIFFDirectory *td)
 -{
 -#define	PACK(s,b,f)	(((b)<<6)|((s)<<3)|(f))
 -	switch (PACK(td->td_samplesperpixel, td->td_bitspersample, td->td_sampleformat)) {
 -	case PACK(1, 32, SAMPLEFORMAT_IEEEFP):
 -		return (SGILOGDATAFMT_FLOAT);
 -	case PACK(1, 16, SAMPLEFORMAT_VOID):
 -	case PACK(1, 16, SAMPLEFORMAT_INT):
 -	case PACK(1, 16, SAMPLEFORMAT_UINT):
 -		return (SGILOGDATAFMT_16BIT);
 -	case PACK(1,  8, SAMPLEFORMAT_VOID):
 -	case PACK(1,  8, SAMPLEFORMAT_UINT):
 -		return (SGILOGDATAFMT_8BIT);
 -	}
 -#undef PACK
 -	return (SGILOGDATAFMT_UNKNOWN);
 -}
 -
 -static uint32
 -multiply(size_t m1, size_t m2)
 -{
 -	uint32	bytes = m1 * m2;
 -
 -	if (m1 && bytes / m1 != m2)
 -		bytes = 0;
 -
 -	return bytes;
 -}
 -
 -static int
 -LogL16InitState(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	LogLuvState* sp = DecoderState(tif);
 -	static const char module[] = "LogL16InitState";
 -
 -	assert(sp != NULL);
 -	assert(td->td_photometric == PHOTOMETRIC_LOGL);
 -
 -	/* for some reason, we can't do this in TIFFInitLogL16 */
 -	if (sp->user_datafmt == SGILOGDATAFMT_UNKNOWN)
 -		sp->user_datafmt = LogL16GuessDataFmt(td);
 -	switch (sp->user_datafmt) {
 -	case SGILOGDATAFMT_FLOAT:
 -		sp->pixel_size = sizeof (float);
 -		break;
 -	case SGILOGDATAFMT_16BIT:
 -		sp->pixel_size = sizeof (int16);
 -		break;
 -	case SGILOGDATAFMT_8BIT:
 -		sp->pixel_size = sizeof (uint8);
 -		break;
 -	default:
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		    "No support for converting user data format to LogL");
 -		return (0);
 -	}
 -        if ( isTiled(tif) )
 -            sp->tbuflen = multiply(td->td_tilewidth, td->td_tilelength);
 -        else
 -            sp->tbuflen = multiply(td->td_imagewidth, td->td_rowsperstrip);
 -	if (multiply(sp->tbuflen, sizeof (int16)) == 0 ||
 -	    (sp->tbuf = (tidata_t*) _TIFFmalloc(sp->tbuflen * sizeof (int16))) == NULL) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: No space for SGILog translation buffer",
 -		    tif->tif_name);
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -static int
 -LogLuvGuessDataFmt(TIFFDirectory *td)
 -{
 -	int guess;
 -
 -	/*
 -	 * If the user didn't tell us their datafmt,
 -	 * take our best guess from the bitspersample.
 -	 */
 -#define	PACK(a,b)	(((a)<<3)|(b))
 -	switch (PACK(td->td_bitspersample, td->td_sampleformat)) {
 -	case PACK(32, SAMPLEFORMAT_IEEEFP):
 -		guess = SGILOGDATAFMT_FLOAT;
 -		break;
 -	case PACK(32, SAMPLEFORMAT_VOID):
 -	case PACK(32, SAMPLEFORMAT_UINT):
 -	case PACK(32, SAMPLEFORMAT_INT):
 -		guess = SGILOGDATAFMT_RAW;
 -		break;
 -	case PACK(16, SAMPLEFORMAT_VOID):
 -	case PACK(16, SAMPLEFORMAT_INT):
 -	case PACK(16, SAMPLEFORMAT_UINT):
 -		guess = SGILOGDATAFMT_16BIT;
 -		break;
 -	case PACK( 8, SAMPLEFORMAT_VOID):
 -	case PACK( 8, SAMPLEFORMAT_UINT):
 -		guess = SGILOGDATAFMT_8BIT;
 -		break;
 -	default:
 -		guess = SGILOGDATAFMT_UNKNOWN;
 -		break;
 -#undef PACK
 -	}
 -	/*
 -	 * Double-check samples per pixel.
 -	 */
 -	switch (td->td_samplesperpixel) {
 -	case 1:
 -		if (guess != SGILOGDATAFMT_RAW)
 -			guess = SGILOGDATAFMT_UNKNOWN;
 -		break;
 -	case 3:
 -		if (guess == SGILOGDATAFMT_RAW)
 -			guess = SGILOGDATAFMT_UNKNOWN;
 -		break;
 -	default:
 -		guess = SGILOGDATAFMT_UNKNOWN;
 -		break;
 -	}
 -	return (guess);
 -}
 -
 -static int
 -LogLuvInitState(TIFF* tif)
 -{
 -	TIFFDirectory* td = &tif->tif_dir;
 -	LogLuvState* sp = DecoderState(tif);
 -	static const char module[] = "LogLuvInitState";
 -
 -	assert(sp != NULL);
 -	assert(td->td_photometric == PHOTOMETRIC_LOGLUV);
 -
 -	/* for some reason, we can't do this in TIFFInitLogLuv */
 -	if (td->td_planarconfig != PLANARCONFIG_CONTIG) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -		    "SGILog compression cannot handle non-contiguous data");
 -		return (0);
 -	}
 -	if (sp->user_datafmt == SGILOGDATAFMT_UNKNOWN)
 -		sp->user_datafmt = LogLuvGuessDataFmt(td);
 -	switch (sp->user_datafmt) {
 -	case SGILOGDATAFMT_FLOAT:
 -		sp->pixel_size = 3*sizeof (float);
 -		break;
 -	case SGILOGDATAFMT_16BIT:
 -		sp->pixel_size = 3*sizeof (int16);
 -		break;
 -	case SGILOGDATAFMT_RAW:
 -		sp->pixel_size = sizeof (uint32);
 -		break;
 -	case SGILOGDATAFMT_8BIT:
 -		sp->pixel_size = 3*sizeof (uint8);
 -		break;
 -	default:
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		    "No support for converting user data format to LogLuv");
 -		return (0);
 -	}
 -        if ( isTiled(tif) )
 -            sp->tbuflen = multiply(td->td_tilewidth, td->td_tilelength);
 -        else
 -            sp->tbuflen = multiply(td->td_imagewidth, td->td_rowsperstrip);
 -	if (multiply(sp->tbuflen, sizeof (uint32)) == 0 ||
 -	    (sp->tbuf = (tidata_t*) _TIFFmalloc(sp->tbuflen * sizeof (uint32))) == NULL) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: No space for SGILog translation buffer",
 -		    tif->tif_name);
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -static int
 -LogLuvSetupDecode(TIFF* tif)
 -{
 -	LogLuvState* sp = DecoderState(tif);
 -	TIFFDirectory* td = &tif->tif_dir;
 -
 -	tif->tif_postdecode = _TIFFNoPostDecode;
 -	switch (td->td_photometric) {
 -	case PHOTOMETRIC_LOGLUV:
 -		if (!LogLuvInitState(tif))
 -			break;
 -		if (td->td_compression == COMPRESSION_SGILOG24) {
 -			tif->tif_decoderow = LogLuvDecode24;
 -			switch (sp->user_datafmt) {
 -			case SGILOGDATAFMT_FLOAT:
 -				sp->tfunc = Luv24toXYZ;
 -				break;
 -			case SGILOGDATAFMT_16BIT:
 -				sp->tfunc = Luv24toLuv48;
 -				break;
 -			case SGILOGDATAFMT_8BIT:
 -				sp->tfunc = Luv24toRGB;
 -				break;
 -			}
 -		} else {
 -			tif->tif_decoderow = LogLuvDecode32;
 -			switch (sp->user_datafmt) {
 -			case SGILOGDATAFMT_FLOAT:
 -				sp->tfunc = Luv32toXYZ;
 -				break;
 -			case SGILOGDATAFMT_16BIT:
 -				sp->tfunc = Luv32toLuv48;
 -				break;
 -			case SGILOGDATAFMT_8BIT:
 -				sp->tfunc = Luv32toRGB;
 -				break;
 -			}
 -		}
 -		return (1);
 -	case PHOTOMETRIC_LOGL:
 -		if (!LogL16InitState(tif))
 -			break;
 -		tif->tif_decoderow = LogL16Decode;
 -		switch (sp->user_datafmt) {
 -		case SGILOGDATAFMT_FLOAT:
 -			sp->tfunc = L16toY;
 -			break;
 -		case SGILOGDATAFMT_8BIT:
 -			sp->tfunc = L16toGry;
 -			break;
 -		}
 -		return (1);
 -	default:
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -    "Inappropriate photometric interpretation %d for SGILog compression; %s",
 -		    td->td_photometric, "must be either LogLUV or LogL");
 -		break;
 -	}
 -	return (0);
 -}
 -
 -static int
 -LogLuvSetupEncode(TIFF* tif)
 -{
 -	LogLuvState* sp = EncoderState(tif);
 -	TIFFDirectory* td = &tif->tif_dir;
 -
 -	switch (td->td_photometric) {
 -	case PHOTOMETRIC_LOGLUV:
 -		if (!LogLuvInitState(tif))
 -			break;
 -		if (td->td_compression == COMPRESSION_SGILOG24) {
 -			tif->tif_encoderow = LogLuvEncode24;
 -			switch (sp->user_datafmt) {
 -			case SGILOGDATAFMT_FLOAT:
 -				sp->tfunc = Luv24fromXYZ;
 -				break;
 -			case SGILOGDATAFMT_16BIT:
 -				sp->tfunc = Luv24fromLuv48;
 -				break;
 -			case SGILOGDATAFMT_RAW:
 -				break;
 -			default:
 -				goto notsupported;
 -			}
 -		} else {
 -			tif->tif_encoderow = LogLuvEncode32;
 -			switch (sp->user_datafmt) {
 -			case SGILOGDATAFMT_FLOAT:
 -				sp->tfunc = Luv32fromXYZ;
 -				break;
 -			case SGILOGDATAFMT_16BIT:
 -				sp->tfunc = Luv32fromLuv48;
 -				break;
 -			case SGILOGDATAFMT_RAW:
 -				break;
 -			default:
 -				goto notsupported;
 -			}
 -		}
 -		break;
 -	case PHOTOMETRIC_LOGL:
 -		if (!LogL16InitState(tif))
 -			break;
 -		tif->tif_encoderow = LogL16Encode;
 -		switch (sp->user_datafmt) {
 -		case SGILOGDATAFMT_FLOAT:
 -			sp->tfunc = L16fromY;
 -			break;
 -		case SGILOGDATAFMT_16BIT:
 -			break;
 -		default:
 -			goto notsupported;
 -		}
 -		break;
 -	default:
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -    "Inappropriate photometric interpretation %d for SGILog compression; %s",
 -    		    td->td_photometric, "must be either LogLUV or LogL");
 -		break;
 -	}
 -	return (1);
 -notsupported:
 -	TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -	    "SGILog compression supported only for %s, or raw data",
 -	    td->td_photometric == PHOTOMETRIC_LOGL ? "Y, L" : "XYZ, Luv");
 -	return (0);
 -}
 -
 -static void
 -LogLuvClose(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	/*
 -	 * For consistency, we always want to write out the same
 -	 * bitspersample and sampleformat for our TIFF file,
 -	 * regardless of the data format being used by the application.
 -	 * Since this routine is called after tags have been set but
 -	 * before they have been recorded in the file, we reset them here.
 -	 */
 -	td->td_samplesperpixel =
 -	    (td->td_photometric == PHOTOMETRIC_LOGL) ? 1 : 3;
 -	td->td_bitspersample = 16;
 -	td->td_sampleformat = SAMPLEFORMAT_INT;
 -}
 -
 -static void
 -LogLuvCleanup(TIFF* tif)
 -{
 -	LogLuvState* sp = (LogLuvState *)tif->tif_data;
 -
 -	assert(sp != 0);
 -
 -	tif->tif_tagmethods.vgetfield = sp->vgetparent;
 -	tif->tif_tagmethods.vsetfield = sp->vsetparent;
 -
 -	if (sp->tbuf)
 -		_TIFFfree(sp->tbuf);
 -	_TIFFfree(sp);
 -	tif->tif_data = NULL;
 -
 -	_TIFFSetDefaultCompressionState(tif);
 -}
 -
 -static int
 -LogLuvVSetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	LogLuvState* sp = DecoderState(tif);
 -	int bps, fmt;
 -
 -	switch (tag) {
 -	case TIFFTAG_SGILOGDATAFMT:
 -		sp->user_datafmt = va_arg(ap, int);
 -		/*
 -		 * Tweak the TIFF header so that the rest of libtiff knows what
 -		 * size of data will be passed between app and library, and
 -		 * assume that the app knows what it is doing and is not
 -		 * confused by these header manipulations...
 -		 */
 -		switch (sp->user_datafmt) {
 -		case SGILOGDATAFMT_FLOAT:
 -			bps = 32, fmt = SAMPLEFORMAT_IEEEFP;
 -			break;
 -		case SGILOGDATAFMT_16BIT:
 -			bps = 16, fmt = SAMPLEFORMAT_INT;
 -			break;
 -		case SGILOGDATAFMT_RAW:
 -			bps = 32, fmt = SAMPLEFORMAT_UINT;
 -			TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
 -			break;
 -		case SGILOGDATAFMT_8BIT:
 -			bps = 8, fmt = SAMPLEFORMAT_UINT;
 -			break;
 -		default:
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			    "Unknown data format %d for LogLuv compression",
 -			    sp->user_datafmt);
 -			return (0);
 -		}
 -		TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
 -		TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, fmt);
 -		/*
 -		 * Must recalculate sizes should bits/sample change.
 -		 */
 -		tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tsize_t) -1;
 -		tif->tif_scanlinesize = TIFFScanlineSize(tif);
 -		return (1);
 -	case TIFFTAG_SGILOGENCODE:
 -		sp->encode_meth = va_arg(ap, int);
 -		if (sp->encode_meth != SGILOGENCODE_NODITHER &&
 -				sp->encode_meth != SGILOGENCODE_RANDITHER) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -				"Unknown encoding %d for LogLuv compression",
 -				sp->encode_meth);
 -			return (0);
 -		}
 -		return (1);
 -	default:
 -		return (*sp->vsetparent)(tif, tag, ap);
 -	}
 -}
 -
 -static int
 -LogLuvVGetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	LogLuvState *sp = (LogLuvState *)tif->tif_data;
 -
 -	switch (tag) {
 -	case TIFFTAG_SGILOGDATAFMT:
 -		*va_arg(ap, int*) = sp->user_datafmt;
 -		return (1);
 -	default:
 -		return (*sp->vgetparent)(tif, tag, ap);
 -	}
 -}
 -
 -static const TIFFFieldInfo LogLuvFieldInfo[] = {
 -    { TIFFTAG_SGILOGDATAFMT,	  0, 0,	TIFF_SHORT,	FIELD_PSEUDO,
 -      TRUE,	FALSE,	"SGILogDataFmt"},
 -    { TIFFTAG_SGILOGENCODE,	  0, 0, TIFF_SHORT,	FIELD_PSEUDO,
 -      TRUE,	FALSE,	"SGILogEncode"}
 -};
 -
 -int
 -TIFFInitSGILog(TIFF* tif, int scheme)
 -{
 -	static const char module[] = "TIFFInitSGILog";
 -	LogLuvState* sp;
 -
 -	assert(scheme == COMPRESSION_SGILOG24 || scheme == COMPRESSION_SGILOG);
 -
 -	/*
 -	 * Merge codec-specific tag information.
 -	 */
 -	if (!_TIFFMergeFieldInfo(tif, LogLuvFieldInfo,
 -				 TIFFArrayCount(LogLuvFieldInfo))) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "Merging SGILog codec-specific tags failed");
 -		return 0;
 -	}
 -
 -	/*
 -	 * Allocate state block so tag methods have storage to record values.
 -	 */
 -	tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (LogLuvState));
 -	if (tif->tif_data == NULL)
 -		goto bad;
 -	sp = (LogLuvState*) tif->tif_data;
 -	_TIFFmemset((tdata_t)sp, 0, sizeof (*sp));
 -	sp->user_datafmt = SGILOGDATAFMT_UNKNOWN;
 -	sp->encode_meth = (scheme == COMPRESSION_SGILOG24) ?
 -				SGILOGENCODE_RANDITHER : SGILOGENCODE_NODITHER;
 -	sp->tfunc = _logLuvNop;
 -
 -	/*
 -	 * Install codec methods.
 -	 * NB: tif_decoderow & tif_encoderow are filled
 -	 *     in at setup time.
 -	 */
 -	tif->tif_setupdecode = LogLuvSetupDecode;
 -	tif->tif_decodestrip = LogLuvDecodeStrip;
 -	tif->tif_decodetile = LogLuvDecodeTile;
 -	tif->tif_setupencode = LogLuvSetupEncode;
 -	tif->tif_encodestrip = LogLuvEncodeStrip;
 -	tif->tif_encodetile = LogLuvEncodeTile;
 -	tif->tif_close = LogLuvClose;
 -	tif->tif_cleanup = LogLuvCleanup;
 -
 -	/* 
 -	 * Override parent get/set field methods.
 -	 */
 -	sp->vgetparent = tif->tif_tagmethods.vgetfield;
 -	tif->tif_tagmethods.vgetfield = LogLuvVGetField;   /* hook for codec tags */
 -	sp->vsetparent = tif->tif_tagmethods.vsetfield;
 -	tif->tif_tagmethods.vsetfield = LogLuvVSetField;   /* hook for codec tags */
 -
 -	return (1);
 -bad:
 -	TIFFErrorExt(tif->tif_clientdata, module,
 -		     "%s: No space for LogLuv state block", tif->tif_name);
 -	return (0);
 -}
 -#endif /* LOGLUV_SUPPORT */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_lzw.c b/plugins/FreeImage/Source/LibTIFF/tif_lzw.c deleted file mode 100644 index 16fcd7f9a7..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_lzw.c +++ /dev/null @@ -1,1129 +0,0 @@ -/* $Id: tif_lzw.c,v 1.38 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#include "tiffiop.h"
 -#ifdef LZW_SUPPORT
 -/*
 - * TIFF Library.
 - * Rev 5.0 Lempel-Ziv & Welch Compression Support
 - *
 - * This code is derived from the compress program whose code is
 - * derived from software contributed to Berkeley by James A. Woods,
 - * derived from original work by Spencer Thomas and Joseph Orost.
 - *
 - * The original Berkeley copyright notice appears below in its entirety.
 - */
 -#include "tif_predict.h"
 -
 -#include <stdio.h>
 -
 -/*
 - * NB: The 5.0 spec describes a different algorithm than Aldus
 - *     implements.  Specifically, Aldus does code length transitions
 - *     one code earlier than should be done (for real LZW).
 - *     Earlier versions of this library implemented the correct
 - *     LZW algorithm, but emitted codes in a bit order opposite
 - *     to the TIFF spec.  Thus, to maintain compatibility w/ Aldus
 - *     we interpret MSB-LSB ordered codes to be images written w/
 - *     old versions of this library, but otherwise adhere to the
 - *     Aldus "off by one" algorithm.
 - *
 - * Future revisions to the TIFF spec are expected to "clarify this issue".
 - */
 -#define	LZW_COMPAT		/* include backwards compatibility code */
 -/*
 - * Each strip of data is supposed to be terminated by a CODE_EOI.
 - * If the following #define is included, the decoder will also
 - * check for end-of-strip w/o seeing this code.  This makes the
 - * library more robust, but also slower.
 - */
 -#define	LZW_CHECKEOS		/* include checks for strips w/o EOI code */
 -
 -#define MAXCODE(n)	((1L<<(n))-1)
 -/*
 - * The TIFF spec specifies that encoded bit
 - * strings range from 9 to 12 bits.
 - */
 -#define	BITS_MIN	9		/* start with 9 bits */
 -#define	BITS_MAX	12		/* max of 12 bit strings */
 -/* predefined codes */
 -#define	CODE_CLEAR	256		/* code to clear string table */
 -#define	CODE_EOI	257		/* end-of-information code */
 -#define CODE_FIRST	258		/* first free code entry */
 -#define	CODE_MAX	MAXCODE(BITS_MAX)
 -#define	HSIZE		9001L		/* 91% occupancy */
 -#define	HSHIFT		(13-8)
 -#ifdef LZW_COMPAT
 -/* NB: +1024 is for compatibility with old files */
 -#define	CSIZE		(MAXCODE(BITS_MAX)+1024L)
 -#else
 -#define	CSIZE		(MAXCODE(BITS_MAX)+1L)
 -#endif
 -
 -/*
 - * State block for each open TIFF file using LZW
 - * compression/decompression.  Note that the predictor
 - * state block must be first in this data structure.
 - */
 -typedef	struct {
 -	TIFFPredictorState predict;	/* predictor super class */
 -
 -	unsigned short	nbits;		/* # of bits/code */
 -	unsigned short	maxcode;	/* maximum code for lzw_nbits */
 -	unsigned short	free_ent;	/* next free entry in hash table */
 -	long		nextdata;	/* next bits of i/o */
 -	long		nextbits;	/* # of valid bits in lzw_nextdata */
 -
 -        int             rw_mode;        /* preserve rw_mode from init */
 -} LZWBaseState;
 -
 -#define	lzw_nbits	base.nbits
 -#define	lzw_maxcode	base.maxcode
 -#define	lzw_free_ent	base.free_ent
 -#define	lzw_nextdata	base.nextdata
 -#define	lzw_nextbits	base.nextbits
 -
 -/*
 - * Encoding-specific state.
 - */
 -typedef uint16 hcode_t;			/* codes fit in 16 bits */
 -typedef struct {
 -	long	hash;
 -	hcode_t	code;
 -} hash_t;
 -
 -/*
 - * Decoding-specific state.
 - */
 -typedef struct code_ent {
 -	struct code_ent *next;
 -	unsigned short	length;		/* string len, including this token */
 -	unsigned char	value;		/* data value */
 -	unsigned char	firstchar;	/* first token of string */
 -} code_t;
 -
 -typedef	int (*decodeFunc)(TIFF*, tidata_t, tsize_t, tsample_t);
 -
 -typedef struct {
 -	LZWBaseState base;
 -
 -	/* Decoding specific data */
 -	long	dec_nbitsmask;		/* lzw_nbits 1 bits, right adjusted */
 -	long	dec_restart;		/* restart count */
 -#ifdef LZW_CHECKEOS
 -	long	dec_bitsleft;		/* available bits in raw data */
 -#endif
 -	decodeFunc dec_decode;		/* regular or backwards compatible */
 -	code_t*	dec_codep;		/* current recognized code */
 -	code_t*	dec_oldcodep;		/* previously recognized code */
 -	code_t*	dec_free_entp;		/* next free entry */
 -	code_t*	dec_maxcodep;		/* max available entry */
 -	code_t*	dec_codetab;		/* kept separate for small machines */
 -
 -	/* Encoding specific data */
 -	int	enc_oldcode;		/* last code encountered */
 -	long	enc_checkpoint;		/* point at which to clear table */
 -#define CHECK_GAP	10000		/* enc_ratio check interval */
 -	long	enc_ratio;		/* current compression ratio */
 -	long	enc_incount;		/* (input) data bytes encoded */
 -	long	enc_outcount;		/* encoded (output) bytes */
 -	tidata_t enc_rawlimit;		/* bound on tif_rawdata buffer */
 -	hash_t*	enc_hashtab;		/* kept separate for small machines */
 -} LZWCodecState;
 -
 -#define	LZWState(tif)		((LZWBaseState*) (tif)->tif_data)
 -#define	DecoderState(tif)	((LZWCodecState*) LZWState(tif))
 -#define	EncoderState(tif)	((LZWCodecState*) LZWState(tif))
 -
 -static	int LZWDecode(TIFF*, tidata_t, tsize_t, tsample_t);
 -#ifdef LZW_COMPAT
 -static	int LZWDecodeCompat(TIFF*, tidata_t, tsize_t, tsample_t);
 -#endif
 -static  void cl_hash(LZWCodecState*);
 -
 -/*
 - * LZW Decoder.
 - */
 -
 -#ifdef LZW_CHECKEOS
 -/*
 - * This check shouldn't be necessary because each
 - * strip is suppose to be terminated with CODE_EOI.
 - */
 -#define	NextCode(_tif, _sp, _bp, _code, _get) {				\
 -	if ((_sp)->dec_bitsleft < nbits) {				\
 -		TIFFWarningExt(_tif->tif_clientdata, _tif->tif_name,				\
 -		    "LZWDecode: Strip %d not terminated with EOI code", \
 -		    _tif->tif_curstrip);				\
 -		_code = CODE_EOI;					\
 -	} else {							\
 -		_get(_sp,_bp,_code);					\
 -		(_sp)->dec_bitsleft -= nbits;				\
 -	}								\
 -}
 -#else
 -#define	NextCode(tif, sp, bp, code, get) get(sp, bp, code)
 -#endif
 -
 -static int
 -LZWSetupDecode(TIFF* tif)
 -{
 -	LZWCodecState* sp = DecoderState(tif);
 -	static const char module[] = " LZWSetupDecode";
 -	int code;
 -
 -        if ( sp == NULL )
 -        {
 -            /*
 -             * Allocate state block so tag methods have storage to record 
 -			 * values.
 -             */
 -            tif->tif_data = (tidata_t) _TIFFmalloc(sizeof(LZWCodecState));
 -            if (tif->tif_data == NULL)
 -            {
 -				TIFFErrorExt(tif->tif_clientdata, "LZWPreDecode", "No space for LZW state block");
 -                return (0);
 -            }
 -
 -            DecoderState(tif)->dec_codetab = NULL;
 -            DecoderState(tif)->dec_decode = NULL;
 -            
 -            /*
 -             * Setup predictor setup.
 -             */
 -            (void) TIFFPredictorInit(tif);
 -
 -            sp = DecoderState(tif);
 -        }
 -            
 -	assert(sp != NULL);
 -
 -	if (sp->dec_codetab == NULL) {
 -		sp->dec_codetab = (code_t*)_TIFFmalloc(CSIZE*sizeof (code_t));
 -		if (sp->dec_codetab == NULL) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				     "No space for LZW code table");
 -			return (0);
 -		}
 -		/*
 -		 * Pre-load the table.
 -		 */
 -                code = 255;
 -                do {
 -                    sp->dec_codetab[code].value = code;
 -                    sp->dec_codetab[code].firstchar = code;
 -                    sp->dec_codetab[code].length = 1;
 -                    sp->dec_codetab[code].next = NULL;
 -                } while (code--);
 -		/*
 -		 * Zero-out the unused entries
 -                 */
 -                 _TIFFmemset(&sp->dec_codetab[CODE_CLEAR], 0,
 -			     (CODE_FIRST - CODE_CLEAR) * sizeof (code_t));
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Setup state for decoding a strip.
 - */
 -static int
 -LZWPreDecode(TIFF* tif, tsample_t s)
 -{
 -	LZWCodecState *sp = DecoderState(tif);
 -
 -	(void) s;
 -	assert(sp != NULL);
 -        if ( sp->dec_codetab == NULL )
 -        {
 -            tif->tif_setupdecode( tif );
 -        }
 -
 -	/*
 -	 * Check for old bit-reversed codes.
 -	 */
 -	if (tif->tif_rawdata[0] == 0 && (tif->tif_rawdata[1] & 0x1)) {
 -#ifdef LZW_COMPAT
 -		if (!sp->dec_decode) {
 -			TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
 -			    "Old-style LZW codes, convert file");
 -			/*
 -			 * Override default decoding methods with
 -			 * ones that deal with the old coding.
 -			 * Otherwise the predictor versions set
 -			 * above will call the compatibility routines
 -			 * through the dec_decode method.
 -			 */
 -			tif->tif_decoderow = LZWDecodeCompat;
 -			tif->tif_decodestrip = LZWDecodeCompat;
 -			tif->tif_decodetile = LZWDecodeCompat;
 -			/*
 -			 * If doing horizontal differencing, must
 -			 * re-setup the predictor logic since we
 -			 * switched the basic decoder methods...
 -			 */
 -			(*tif->tif_setupdecode)(tif);
 -			sp->dec_decode = LZWDecodeCompat;
 -		}
 -		sp->lzw_maxcode = MAXCODE(BITS_MIN);
 -#else /* !LZW_COMPAT */
 -		if (!sp->dec_decode) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			    "Old-style LZW codes not supported");
 -			sp->dec_decode = LZWDecode;
 -		}
 -		return (0);
 -#endif/* !LZW_COMPAT */
 -	} else {
 -		sp->lzw_maxcode = MAXCODE(BITS_MIN)-1;
 -		sp->dec_decode = LZWDecode;
 -	}
 -	sp->lzw_nbits = BITS_MIN;
 -	sp->lzw_nextbits = 0;
 -	sp->lzw_nextdata = 0;
 -
 -	sp->dec_restart = 0;
 -	sp->dec_nbitsmask = MAXCODE(BITS_MIN);
 -#ifdef LZW_CHECKEOS
 -	sp->dec_bitsleft = tif->tif_rawcc << 3;
 -#endif
 -	sp->dec_free_entp = sp->dec_codetab + CODE_FIRST;
 -	/*
 -	 * Zero entries that are not yet filled in.  We do
 -	 * this to guard against bogus input data that causes
 -	 * us to index into undefined entries.  If you can
 -	 * come up with a way to safely bounds-check input codes
 -	 * while decoding then you can remove this operation.
 -	 */
 -	_TIFFmemset(sp->dec_free_entp, 0, (CSIZE-CODE_FIRST)*sizeof (code_t));
 -	sp->dec_oldcodep = &sp->dec_codetab[-1];
 -	sp->dec_maxcodep = &sp->dec_codetab[sp->dec_nbitsmask-1];
 -	return (1);
 -}
 -
 -/*
 - * Decode a "hunk of data".
 - */
 -#define	GetNextCode(sp, bp, code) {				\
 -	nextdata = (nextdata<<8) | *(bp)++;			\
 -	nextbits += 8;						\
 -	if (nextbits < nbits) {					\
 -		nextdata = (nextdata<<8) | *(bp)++;		\
 -		nextbits += 8;					\
 -	}							\
 -	code = (hcode_t)((nextdata >> (nextbits-nbits)) & nbitsmask);	\
 -	nextbits -= nbits;					\
 -}
 -
 -static void
 -codeLoop(TIFF* tif)
 -{
 -	TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -	    "LZWDecode: Bogus encoding, loop in the code table; scanline %d",
 -	    tif->tif_row);
 -}
 -
 -static int
 -LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s)
 -{
 -	LZWCodecState *sp = DecoderState(tif);
 -	char *op = (char*) op0;
 -	long occ = (long) occ0;
 -	char *tp;
 -	unsigned char *bp;
 -	hcode_t code;
 -	int len;
 -	long nbits, nextbits, nextdata, nbitsmask;
 -	code_t *codep, *free_entp, *maxcodep, *oldcodep;
 -
 -	(void) s;
 -	assert(sp != NULL);
 -        assert(sp->dec_codetab != NULL);
 -	/*
 -	 * Restart interrupted output operation.
 -	 */
 -	if (sp->dec_restart) {
 -		long residue;
 -
 -		codep = sp->dec_codep;
 -		residue = codep->length - sp->dec_restart;
 -		if (residue > occ) {
 -			/*
 -			 * Residue from previous decode is sufficient
 -			 * to satisfy decode request.  Skip to the
 -			 * start of the decoded string, place decoded
 -			 * values in the output buffer, and return.
 -			 */
 -			sp->dec_restart += occ;
 -			do {
 -				codep = codep->next;
 -			} while (--residue > occ && codep);
 -			if (codep) {
 -				tp = op + occ;
 -				do {
 -					*--tp = codep->value;
 -					codep = codep->next;
 -				} while (--occ && codep);
 -			}
 -			return (1);
 -		}
 -		/*
 -		 * Residue satisfies only part of the decode request.
 -		 */
 -		op += residue, occ -= residue;
 -		tp = op;
 -		do {
 -			int t;
 -			--tp;
 -			t = codep->value;
 -			codep = codep->next;
 -			*tp = t;
 -		} while (--residue && codep);
 -		sp->dec_restart = 0;
 -	}
 -
 -	bp = (unsigned char *)tif->tif_rawcp;
 -	nbits = sp->lzw_nbits;
 -	nextdata = sp->lzw_nextdata;
 -	nextbits = sp->lzw_nextbits;
 -	nbitsmask = sp->dec_nbitsmask;
 -	oldcodep = sp->dec_oldcodep;
 -	free_entp = sp->dec_free_entp;
 -	maxcodep = sp->dec_maxcodep;
 -
 -	while (occ > 0) {
 -		NextCode(tif, sp, bp, code, GetNextCode);
 -		if (code == CODE_EOI)
 -			break;
 -		if (code == CODE_CLEAR) {
 -			free_entp = sp->dec_codetab + CODE_FIRST;
 -			_TIFFmemset(free_entp, 0,
 -				    (CSIZE - CODE_FIRST) * sizeof (code_t));
 -			nbits = BITS_MIN;
 -			nbitsmask = MAXCODE(BITS_MIN);
 -			maxcodep = sp->dec_codetab + nbitsmask-1;
 -			NextCode(tif, sp, bp, code, GetNextCode);
 -			if (code == CODE_EOI)
 -				break;
 -			if (code == CODE_CLEAR) {
 -				TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -				"LZWDecode: Corrupted LZW table at scanline %d",
 -					     tif->tif_row);
 -				return (0);
 -			}
 -			*op++ = (char)code, occ--;
 -			oldcodep = sp->dec_codetab + code;
 -			continue;
 -		}
 -		codep = sp->dec_codetab + code;
 -
 -		/*
 -	 	 * Add the new entry to the code table.
 -	 	 */
 -		if (free_entp < &sp->dec_codetab[0] ||
 -			free_entp >= &sp->dec_codetab[CSIZE]) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			"LZWDecode: Corrupted LZW table at scanline %d",
 -			tif->tif_row);
 -			return (0);
 -		}
 -
 -		free_entp->next = oldcodep;
 -		if (free_entp->next < &sp->dec_codetab[0] ||
 -			free_entp->next >= &sp->dec_codetab[CSIZE]) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			"LZWDecode: Corrupted LZW table at scanline %d",
 -			tif->tif_row);
 -			return (0);
 -		}
 -		free_entp->firstchar = free_entp->next->firstchar;
 -		free_entp->length = free_entp->next->length+1;
 -		free_entp->value = (codep < free_entp) ?
 -		    codep->firstchar : free_entp->firstchar;
 -		if (++free_entp > maxcodep) {
 -			if (++nbits > BITS_MAX)		/* should not happen */
 -				nbits = BITS_MAX;
 -			nbitsmask = MAXCODE(nbits);
 -			maxcodep = sp->dec_codetab + nbitsmask-1;
 -		}
 -		oldcodep = codep;
 -		if (code >= 256) {
 -			/*
 -		 	 * Code maps to a string, copy string
 -			 * value to output (written in reverse).
 -		 	 */
 -			if(codep->length == 0) {
 -				TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -	    		    "LZWDecode: Wrong length of decoded string: "
 -			    "data probably corrupted at scanline %d",
 -			    tif->tif_row);	
 -			    return (0);
 -			}
 -			if (codep->length > occ) {
 -				/*
 -				 * String is too long for decode buffer,
 -				 * locate portion that will fit, copy to
 -				 * the decode buffer, and setup restart
 -				 * logic for the next decoding call.
 -				 */
 -				sp->dec_codep = codep;
 -				do {
 -					codep = codep->next;
 -				} while (codep && codep->length > occ);
 -				if (codep) {
 -					sp->dec_restart = occ;
 -					tp = op + occ;
 -					do  {
 -						*--tp = codep->value;
 -						codep = codep->next;
 -					}  while (--occ && codep);
 -					if (codep)
 -						codeLoop(tif);
 -				}
 -				break;
 -			}
 -			len = codep->length;
 -			tp = op + len;
 -			do {
 -				int t;
 -				--tp;
 -				t = codep->value;
 -				codep = codep->next;
 -				*tp = t;
 -			} while (codep && tp > op);
 -			if (codep) {
 -			    codeLoop(tif);
 -			    break;
 -			}
 -			op += len, occ -= len;
 -		} else
 -			*op++ = (char)code, occ--;
 -	}
 -
 -	tif->tif_rawcp = (tidata_t) bp;
 -	sp->lzw_nbits = (unsigned short) nbits;
 -	sp->lzw_nextdata = nextdata;
 -	sp->lzw_nextbits = nextbits;
 -	sp->dec_nbitsmask = nbitsmask;
 -	sp->dec_oldcodep = oldcodep;
 -	sp->dec_free_entp = free_entp;
 -	sp->dec_maxcodep = maxcodep;
 -
 -	if (occ > 0) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		"LZWDecode: Not enough data at scanline %d (short %ld bytes)",
 -		    tif->tif_row, occ);
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -#ifdef LZW_COMPAT
 -/*
 - * Decode a "hunk of data" for old images.
 - */
 -#define	GetNextCodeCompat(sp, bp, code) {			\
 -	nextdata |= (unsigned long) *(bp)++ << nextbits;	\
 -	nextbits += 8;						\
 -	if (nextbits < nbits) {					\
 -		nextdata |= (unsigned long) *(bp)++ << nextbits;\
 -		nextbits += 8;					\
 -	}							\
 -	code = (hcode_t)(nextdata & nbitsmask);			\
 -	nextdata >>= nbits;					\
 -	nextbits -= nbits;					\
 -}
 -
 -static int
 -LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s)
 -{
 -	LZWCodecState *sp = DecoderState(tif);
 -	char *op = (char*) op0;
 -	long occ = (long) occ0;
 -	char *tp;
 -	unsigned char *bp;
 -	int code, nbits;
 -	long nextbits, nextdata, nbitsmask;
 -	code_t *codep, *free_entp, *maxcodep, *oldcodep;
 -
 -	(void) s;
 -	assert(sp != NULL);
 -	/*
 -	 * Restart interrupted output operation.
 -	 */
 -	if (sp->dec_restart) {
 -		long residue;
 -
 -		codep = sp->dec_codep;
 -		residue = codep->length - sp->dec_restart;
 -		if (residue > occ) {
 -			/*
 -			 * Residue from previous decode is sufficient
 -			 * to satisfy decode request.  Skip to the
 -			 * start of the decoded string, place decoded
 -			 * values in the output buffer, and return.
 -			 */
 -			sp->dec_restart += occ;
 -			do {
 -				codep = codep->next;
 -			} while (--residue > occ);
 -			tp = op + occ;
 -			do {
 -				*--tp = codep->value;
 -				codep = codep->next;
 -			} while (--occ);
 -			return (1);
 -		}
 -		/*
 -		 * Residue satisfies only part of the decode request.
 -		 */
 -		op += residue, occ -= residue;
 -		tp = op;
 -		do {
 -			*--tp = codep->value;
 -			codep = codep->next;
 -		} while (--residue);
 -		sp->dec_restart = 0;
 -	}
 -
 -	bp = (unsigned char *)tif->tif_rawcp;
 -	nbits = sp->lzw_nbits;
 -	nextdata = sp->lzw_nextdata;
 -	nextbits = sp->lzw_nextbits;
 -	nbitsmask = sp->dec_nbitsmask;
 -	oldcodep = sp->dec_oldcodep;
 -	free_entp = sp->dec_free_entp;
 -	maxcodep = sp->dec_maxcodep;
 -
 -	while (occ > 0) {
 -		NextCode(tif, sp, bp, code, GetNextCodeCompat);
 -		if (code == CODE_EOI)
 -			break;
 -		if (code == CODE_CLEAR) {
 -			free_entp = sp->dec_codetab + CODE_FIRST;
 -			_TIFFmemset(free_entp, 0,
 -				    (CSIZE - CODE_FIRST) * sizeof (code_t));
 -			nbits = BITS_MIN;
 -			nbitsmask = MAXCODE(BITS_MIN);
 -			maxcodep = sp->dec_codetab + nbitsmask;
 -			NextCode(tif, sp, bp, code, GetNextCodeCompat);
 -			if (code == CODE_EOI)
 -				break;
 -			if (code == CODE_CLEAR) {
 -				TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -				"LZWDecode: Corrupted LZW table at scanline %d",
 -					     tif->tif_row);
 -				return (0);
 -			}
 -			*op++ = code, occ--;
 -			oldcodep = sp->dec_codetab + code;
 -			continue;
 -		}
 -		codep = sp->dec_codetab + code;
 -
 -		/*
 -	 	 * Add the new entry to the code table.
 -	 	 */
 -		if (free_entp < &sp->dec_codetab[0] ||
 -			free_entp >= &sp->dec_codetab[CSIZE]) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			"LZWDecodeCompat: Corrupted LZW table at scanline %d",
 -			tif->tif_row);
 -			return (0);
 -		}
 -
 -		free_entp->next = oldcodep;
 -		if (free_entp->next < &sp->dec_codetab[0] ||
 -			free_entp->next >= &sp->dec_codetab[CSIZE]) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			"LZWDecodeCompat: Corrupted LZW table at scanline %d",
 -			tif->tif_row);
 -			return (0);
 -		}
 -		free_entp->firstchar = free_entp->next->firstchar;
 -		free_entp->length = free_entp->next->length+1;
 -		free_entp->value = (codep < free_entp) ?
 -		    codep->firstchar : free_entp->firstchar;
 -		if (++free_entp > maxcodep) {
 -			if (++nbits > BITS_MAX)		/* should not happen */
 -				nbits = BITS_MAX;
 -			nbitsmask = MAXCODE(nbits);
 -			maxcodep = sp->dec_codetab + nbitsmask;
 -		}
 -		oldcodep = codep;
 -		if (code >= 256) {
 -			char *op_orig = op;
 -			/*
 -		 	 * Code maps to a string, copy string
 -			 * value to output (written in reverse).
 -		 	 */
 -			if(codep->length == 0) {
 -				TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -	    		    "LZWDecodeCompat: Wrong length of decoded "
 -			    "string: data probably corrupted at scanline %d",
 -			    tif->tif_row);	
 -			    return (0);
 -			}
 -			if (codep->length > occ) {
 -				/*
 -				 * String is too long for decode buffer,
 -				 * locate portion that will fit, copy to
 -				 * the decode buffer, and setup restart
 -				 * logic for the next decoding call.
 -				 */
 -				sp->dec_codep = codep;
 -				do {
 -					codep = codep->next;
 -				} while (codep->length > occ);
 -				sp->dec_restart = occ;
 -				tp = op + occ;
 -				do  {
 -					*--tp = codep->value;
 -					codep = codep->next;
 -				}  while (--occ);
 -				break;
 -			}
 -			op += codep->length, occ -= codep->length;
 -			tp = op;
 -			do {
 -				*--tp = codep->value;
 -			} while( (codep = codep->next) != NULL && tp > op_orig);
 -		} else
 -			*op++ = code, occ--;
 -	}
 -
 -	tif->tif_rawcp = (tidata_t) bp;
 -	sp->lzw_nbits = nbits;
 -	sp->lzw_nextdata = nextdata;
 -	sp->lzw_nextbits = nextbits;
 -	sp->dec_nbitsmask = nbitsmask;
 -	sp->dec_oldcodep = oldcodep;
 -	sp->dec_free_entp = free_entp;
 -	sp->dec_maxcodep = maxcodep;
 -
 -	if (occ > 0) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -	    "LZWDecodeCompat: Not enough data at scanline %d (short %ld bytes)",
 -		    tif->tif_row, occ);
 -		return (0);
 -	}
 -	return (1);
 -}
 -#endif /* LZW_COMPAT */
 -
 -/*
 - * LZW Encoding.
 - */
 -
 -static int
 -LZWSetupEncode(TIFF* tif)
 -{
 -	LZWCodecState* sp = EncoderState(tif);
 -	static const char module[] = "LZWSetupEncode";
 -
 -	assert(sp != NULL);
 -	sp->enc_hashtab = (hash_t*) _TIFFmalloc(HSIZE*sizeof (hash_t));
 -	if (sp->enc_hashtab == NULL) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "No space for LZW hash table");
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Reset encoding state at the start of a strip.
 - */
 -static int
 -LZWPreEncode(TIFF* tif, tsample_t s)
 -{
 -	LZWCodecState *sp = EncoderState(tif);
 -
 -	(void) s;
 -	assert(sp != NULL);
 -        
 -        if ( sp->enc_hashtab == NULL )
 -        {
 -            tif->tif_setupencode( tif );
 -        }
 -
 -	sp->lzw_nbits = BITS_MIN;
 -	sp->lzw_maxcode = MAXCODE(BITS_MIN);
 -	sp->lzw_free_ent = CODE_FIRST;
 -	sp->lzw_nextbits = 0;
 -	sp->lzw_nextdata = 0;
 -	sp->enc_checkpoint = CHECK_GAP;
 -	sp->enc_ratio = 0;
 -	sp->enc_incount = 0;
 -	sp->enc_outcount = 0;
 -	/*
 -	 * The 4 here insures there is space for 2 max-sized
 -	 * codes in LZWEncode and LZWPostDecode.
 -	 */
 -	sp->enc_rawlimit = tif->tif_rawdata + tif->tif_rawdatasize-1 - 4;
 -	cl_hash(sp);		/* clear hash table */
 -	sp->enc_oldcode = (hcode_t) -1;	/* generates CODE_CLEAR in LZWEncode */
 -	return (1);
 -}
 -
 -#define	CALCRATIO(sp, rat) {					\
 -	if (incount > 0x007fffff) { /* NB: shift will overflow */\
 -		rat = outcount >> 8;				\
 -		rat = (rat == 0 ? 0x7fffffff : incount/rat);	\
 -	} else							\
 -		rat = (incount<<8) / outcount;			\
 -}
 -#define	PutNextCode(op, c) {					\
 -	nextdata = (nextdata << nbits) | c;			\
 -	nextbits += nbits;					\
 -	*op++ = (unsigned char)(nextdata >> (nextbits-8));		\
 -	nextbits -= 8;						\
 -	if (nextbits >= 8) {					\
 -		*op++ = (unsigned char)(nextdata >> (nextbits-8));	\
 -		nextbits -= 8;					\
 -	}							\
 -	outcount += nbits;					\
 -}
 -
 -/*
 - * Encode a chunk of pixels.
 - *
 - * Uses an open addressing double hashing (no chaining) on the 
 - * prefix code/next character combination.  We do a variant of
 - * Knuth's algorithm D (vol. 3, sec. 6.4) along with G. Knott's
 - * relatively-prime secondary probe.  Here, the modular division
 - * first probe is gives way to a faster exclusive-or manipulation. 
 - * Also do block compression with an adaptive reset, whereby the
 - * code table is cleared when the compression ratio decreases,
 - * but after the table fills.  The variable-length output codes
 - * are re-sized at this point, and a CODE_CLEAR is generated
 - * for the decoder. 
 - */
 -static int
 -LZWEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	register LZWCodecState *sp = EncoderState(tif);
 -	register long fcode;
 -	register hash_t *hp;
 -	register int h, c;
 -	hcode_t ent;
 -	long disp;
 -	long incount, outcount, checkpoint;
 -	long nextdata, nextbits;
 -	int free_ent, maxcode, nbits;
 -	tidata_t op, limit;
 -
 -	(void) s;
 -	if (sp == NULL)
 -		return (0);
 -
 -        assert(sp->enc_hashtab != NULL);
 -
 -	/*
 -	 * Load local state.
 -	 */
 -	incount = sp->enc_incount;
 -	outcount = sp->enc_outcount;
 -	checkpoint = sp->enc_checkpoint;
 -	nextdata = sp->lzw_nextdata;
 -	nextbits = sp->lzw_nextbits;
 -	free_ent = sp->lzw_free_ent;
 -	maxcode = sp->lzw_maxcode;
 -	nbits = sp->lzw_nbits;
 -	op = tif->tif_rawcp;
 -	limit = sp->enc_rawlimit;
 -	ent = sp->enc_oldcode;
 -
 -	if (ent == (hcode_t) -1 && cc > 0) {
 -		/*
 -		 * NB: This is safe because it can only happen
 -		 *     at the start of a strip where we know there
 -		 *     is space in the data buffer.
 -		 */
 -		PutNextCode(op, CODE_CLEAR);
 -		ent = *bp++; cc--; incount++;
 -	}
 -	while (cc > 0) {
 -		c = *bp++; cc--; incount++;
 -		fcode = ((long)c << BITS_MAX) + ent;
 -		h = (c << HSHIFT) ^ ent;	/* xor hashing */
 -#ifdef _WINDOWS
 -		/*
 -		 * Check hash index for an overflow.
 -		 */
 -		if (h >= HSIZE)
 -			h -= HSIZE;
 -#endif
 -		hp = &sp->enc_hashtab[h];
 -		if (hp->hash == fcode) {
 -			ent = hp->code;
 -			continue;
 -		}
 -		if (hp->hash >= 0) {
 -			/*
 -			 * Primary hash failed, check secondary hash.
 -			 */
 -			disp = HSIZE - h;
 -			if (h == 0)
 -				disp = 1;
 -			do {
 -				/*
 -				 * Avoid pointer arithmetic 'cuz of
 -				 * wraparound problems with segments.
 -				 */
 -				if ((h -= disp) < 0)
 -					h += HSIZE;
 -				hp = &sp->enc_hashtab[h];
 -				if (hp->hash == fcode) {
 -					ent = hp->code;
 -					goto hit;
 -				}
 -			} while (hp->hash >= 0);
 -		}
 -		/*
 -		 * New entry, emit code and add to table.
 -		 */
 -		/*
 -		 * Verify there is space in the buffer for the code
 -		 * and any potential Clear code that might be emitted
 -		 * below.  The value of limit is setup so that there
 -		 * are at least 4 bytes free--room for 2 codes.
 -		 */
 -		if (op > limit) {
 -			tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata);
 -			TIFFFlushData1(tif);
 -			op = tif->tif_rawdata;
 -		}
 -		PutNextCode(op, ent);
 -		ent = c;
 -		hp->code = free_ent++;
 -		hp->hash = fcode;
 -		if (free_ent == CODE_MAX-1) {
 -			/* table is full, emit clear code and reset */
 -			cl_hash(sp);
 -			sp->enc_ratio = 0;
 -			incount = 0;
 -			outcount = 0;
 -			free_ent = CODE_FIRST;
 -			PutNextCode(op, CODE_CLEAR);
 -			nbits = BITS_MIN;
 -			maxcode = MAXCODE(BITS_MIN);
 -		} else {
 -			/*
 -			 * If the next entry is going to be too big for
 -			 * the code size, then increase it, if possible.
 -			 */
 -			if (free_ent > maxcode) {
 -				nbits++;
 -				assert(nbits <= BITS_MAX);
 -				maxcode = (int) MAXCODE(nbits);
 -			} else if (incount >= checkpoint) {
 -				long rat;
 -				/*
 -				 * Check compression ratio and, if things seem
 -				 * to be slipping, clear the hash table and
 -				 * reset state.  The compression ratio is a
 -				 * 24+8-bit fractional number.
 -				 */
 -				checkpoint = incount+CHECK_GAP;
 -				CALCRATIO(sp, rat);
 -				if (rat <= sp->enc_ratio) {
 -					cl_hash(sp);
 -					sp->enc_ratio = 0;
 -					incount = 0;
 -					outcount = 0;
 -					free_ent = CODE_FIRST;
 -					PutNextCode(op, CODE_CLEAR);
 -					nbits = BITS_MIN;
 -					maxcode = MAXCODE(BITS_MIN);
 -				} else
 -					sp->enc_ratio = rat;
 -			}
 -		}
 -	hit:
 -		;
 -	}
 -
 -	/*
 -	 * Restore global state.
 -	 */
 -	sp->enc_incount = incount;
 -	sp->enc_outcount = outcount;
 -	sp->enc_checkpoint = checkpoint;
 -	sp->enc_oldcode = ent;
 -	sp->lzw_nextdata = nextdata;
 -	sp->lzw_nextbits = nextbits;
 -	sp->lzw_free_ent = free_ent;
 -	sp->lzw_maxcode = maxcode;
 -	sp->lzw_nbits = nbits;
 -	tif->tif_rawcp = op;
 -	return (1);
 -}
 -
 -/*
 - * Finish off an encoded strip by flushing the last
 - * string and tacking on an End Of Information code.
 - */
 -static int
 -LZWPostEncode(TIFF* tif)
 -{
 -	register LZWCodecState *sp = EncoderState(tif);
 -	tidata_t op = tif->tif_rawcp;
 -	long nextbits = sp->lzw_nextbits;
 -	long nextdata = sp->lzw_nextdata;
 -	long outcount = sp->enc_outcount;
 -	int nbits = sp->lzw_nbits;
 -
 -	if (op > sp->enc_rawlimit) {
 -		tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata);
 -		TIFFFlushData1(tif);
 -		op = tif->tif_rawdata;
 -	}
 -	if (sp->enc_oldcode != (hcode_t) -1) {
 -		PutNextCode(op, sp->enc_oldcode);
 -		sp->enc_oldcode = (hcode_t) -1;
 -	}
 -	PutNextCode(op, CODE_EOI);
 -	if (nextbits > 0) 
 -		*op++ = (unsigned char)(nextdata << (8-nextbits));
 -	tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata);
 -	return (1);
 -}
 -
 -/*
 - * Reset encoding hash table.
 - */
 -static void
 -cl_hash(LZWCodecState* sp)
 -{
 -	register hash_t *hp = &sp->enc_hashtab[HSIZE-1];
 -	register long i = HSIZE-8;
 -
 - 	do {
 -		i -= 8;
 -		hp[-7].hash = -1;
 -		hp[-6].hash = -1;
 -		hp[-5].hash = -1;
 -		hp[-4].hash = -1;
 -		hp[-3].hash = -1;
 -		hp[-2].hash = -1;
 -		hp[-1].hash = -1;
 -		hp[ 0].hash = -1;
 -		hp -= 8;
 -	} while (i >= 0);
 -    	for (i += 8; i > 0; i--, hp--)
 -		hp->hash = -1;
 -}
 -
 -static void
 -LZWCleanup(TIFF* tif)
 -{
 -	(void)TIFFPredictorCleanup(tif);
 -
 -	assert(tif->tif_data != 0);
 -
 -	if (DecoderState(tif)->dec_codetab)
 -		_TIFFfree(DecoderState(tif)->dec_codetab);
 -
 -	if (EncoderState(tif)->enc_hashtab)
 -		_TIFFfree(EncoderState(tif)->enc_hashtab);
 -
 -	_TIFFfree(tif->tif_data);
 -	tif->tif_data = NULL;
 -
 -	_TIFFSetDefaultCompressionState(tif);
 -}
 -
 -int
 -TIFFInitLZW(TIFF* tif, int scheme)
 -{
 -	assert(scheme == COMPRESSION_LZW);
 -	/*
 -	 * Allocate state block so tag methods have storage to record values.
 -	 */
 -	tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (LZWCodecState));
 -	if (tif->tif_data == NULL)
 -		goto bad;
 -	DecoderState(tif)->dec_codetab = NULL;
 -	DecoderState(tif)->dec_decode = NULL;
 -	EncoderState(tif)->enc_hashtab = NULL;
 -        LZWState(tif)->rw_mode = tif->tif_mode;
 -
 -	/*
 -	 * Install codec methods.
 -	 */
 -	tif->tif_setupdecode = LZWSetupDecode;
 -	tif->tif_predecode = LZWPreDecode;
 -	tif->tif_decoderow = LZWDecode;
 -	tif->tif_decodestrip = LZWDecode;
 -	tif->tif_decodetile = LZWDecode;
 -	tif->tif_setupencode = LZWSetupEncode;
 -	tif->tif_preencode = LZWPreEncode;
 -	tif->tif_postencode = LZWPostEncode;
 -	tif->tif_encoderow = LZWEncode;
 -	tif->tif_encodestrip = LZWEncode;
 -	tif->tif_encodetile = LZWEncode;
 -	tif->tif_cleanup = LZWCleanup;
 -	/*
 -	 * Setup predictor setup.
 -	 */
 -	(void) TIFFPredictorInit(tif);
 -	return (1);
 -bad:
 -	TIFFErrorExt(tif->tif_clientdata, "TIFFInitLZW", 
 -		     "No space for LZW state block");
 -	return (0);
 -}
 -
 -/*
 - * Copyright (c) 1985, 1986 The Regents of the University of California.
 - * All rights reserved.
 - *
 - * This code is derived from software contributed to Berkeley by
 - * James A. Woods, derived from original work by Spencer Thomas
 - * and Joseph Orost.
 - *
 - * Redistribution and use in source and binary forms are permitted
 - * provided that the above copyright notice and this paragraph are
 - * duplicated in all such forms and that any documentation,
 - * advertising materials, and other materials related to such
 - * distribution and use acknowledge that the software was developed
 - * by the University of California, Berkeley.  The name of the
 - * University may not be used to endorse or promote products derived
 - * from this software without specific prior written permission.
 - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
 - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 - */
 -#endif /* LZW_SUPPORT */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_msdos.c b/plugins/FreeImage/Source/LibTIFF/tif_msdos.c deleted file mode 100644 index 884981fa49..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_msdos.c +++ /dev/null @@ -1,193 +0,0 @@ -/* $Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_msdos.c,v 1.35 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library MSDOS-specific Routines.
 - */
 -#if defined(__WATCOMC__) || defined(__BORLANDC__) || defined(_MSC_VER)
 -#include <io.h>		/* for open, close, etc. function prototypes */
 -#include <stdio.h>
 -#endif
 -#include "tiffiop.h"
 -
 -static tsize_t 
 -_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return (read((int) fd, buf, size));
 -}
 -
 -static tsize_t
 -_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return (write((int) fd, buf, size));
 -}
 -
 -static toff_t
 -_tiffSeekProc(thandle_t fd, toff_t off, int whence)
 -{
 -	return (lseek((int) fd, (off_t) off, whence));
 -}
 -
 -static int
 -_tiffCloseProc(thandle_t fd)
 -{
 -	return (close((int) fd));
 -}
 -
 -#include <sys/stat.h>
 -
 -static toff_t
 -_tiffSizeProc(thandle_t fd)
 -{
 -	struct stat sb;
 -	return (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size);
 -}
 -
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	return (0);
 -}
 -
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -}
 -
 -/*
 - * Open a TIFF file descriptor for read/writing.
 - */
 -TIFF*
 -TIFFFdOpen(int fd, const char* name, const char* mode)
 -{
 -	TIFF* tif;
 -
 -	tif = TIFFClientOpen(name, mode,
 -	    (void*) fd,
 -	    _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc,
 -	    _tiffSizeProc, _tiffMapProc, _tiffUnmapProc);
 -	if (tif)
 -		tif->tif_fd = fd;
 -	return (tif);
 -}
 -
 -/*
 - * Open a TIFF file for read/writing.
 - */
 -TIFF*
 -TIFFOpen(const char* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpen";
 -	int m, fd;
 -        TIFF *ret;
 -
 -	m = _TIFFgetMode(mode, module);
 -	if (m == -1)
 -		return ((TIFF*)0);
 -	fd = open(name, m|O_BINARY, 0666);
 -	if (fd < 0) {
 -		TIFFErrorExt(0, module, "%s: Cannot open", name);
 -		return ((TIFF*)0);
 -	}
 -	return (TIFFFdOpen(fd, name, mode));
 -
 -        ret = TIFFFdOpen(fd, name, mode);
 -
 -        if (ret == NULL) close(fd);
 -
 -        return ret;
 -}
 -
 -#ifdef __GNUC__
 -extern	char* malloc();
 -extern	char* realloc();
 -#else
 -#include <malloc.h>
 -#endif
 -
 -tdata_t
 -_TIFFmalloc(tsize_t s)
 -{
 -	return (malloc((size_t) s));
 -}
 -
 -void
 -_TIFFfree(tdata_t p)
 -{
 -	free(p);
 -}
 -
 -tdata_t
 -_TIFFrealloc(tdata_t p, tsize_t s)
 -{
 -	return (realloc(p, (size_t) s));
 -}
 -
 -void
 -_TIFFmemset(tdata_t p, int v, tsize_t c)
 -{
 -	memset(p, v, (size_t) c);
 -}
 -
 -void
 -_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
 -{
 -	memcpy(d, s, (size_t) c);
 -}
 -
 -int
 -_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
 -{
 -	return (memcmp(p1, p2, (size_t) c));
 -}
 -
 -static void
 -msdosWarningHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	fprintf(stderr, "Warning, ");
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -TIFFErrorHandler _TIFFwarningHandler = msdosWarningHandler;
 -
 -static void
 -msdosErrorHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -TIFFErrorHandler _TIFFerrorHandler = msdosErrorHandler;
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_next.c b/plugins/FreeImage/Source/LibTIFF/tif_next.c deleted file mode 100644 index 3fa6406e68..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_next.c +++ /dev/null @@ -1,154 +0,0 @@ -/* $Id: tif_next.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#include "tiffiop.h"
 -#ifdef NEXT_SUPPORT
 -/*
 - * TIFF Library.
 - *
 - * NeXT 2-bit Grey Scale Compression Algorithm Support
 - */
 -
 -#define SETPIXEL(op, v) {			\
 -	switch (npixels++ & 3) {		\
 -	case 0:	op[0]  = (unsigned char) ((v) << 6); break;	\
 -	case 1:	op[0] |= (v) << 4; break;	\
 -	case 2:	op[0] |= (v) << 2; break;	\
 -	case 3:	*op++ |= (v);	   break;	\
 -	}					\
 -}
 -
 -#define LITERALROW	0x00
 -#define LITERALSPAN	0x40
 -#define WHITE   	((1<<2)-1)
 -
 -static int
 -NeXTDecode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s)
 -{
 -	unsigned char *bp, *op;
 -	tsize_t cc;
 -	tidata_t row;
 -	tsize_t scanline, n;
 -
 -	(void) s;
 -	/*
 -	 * Each scanline is assumed to start off as all
 -	 * white (we assume a PhotometricInterpretation
 -	 * of ``min-is-black'').
 -	 */
 -	for (op = buf, cc = occ; cc-- > 0;)
 -		*op++ = 0xff;
 -
 -	bp = (unsigned char *)tif->tif_rawcp;
 -	cc = tif->tif_rawcc;
 -	scanline = tif->tif_scanlinesize;
 -	for (row = buf; occ > 0; occ -= scanline, row += scanline) {
 -		n = *bp++, cc--;
 -		switch (n) {
 -		case LITERALROW:
 -			/*
 -			 * The entire scanline is given as literal values.
 -			 */
 -			if (cc < scanline)
 -				goto bad;
 -			_TIFFmemcpy(row, bp, scanline);
 -			bp += scanline;
 -			cc -= scanline;
 -			break;
 -		case LITERALSPAN: {
 -			tsize_t off;
 -			/*
 -			 * The scanline has a literal span that begins at some
 -			 * offset.
 -			 */
 -			off = (bp[0] * 256) + bp[1];
 -			n = (bp[2] * 256) + bp[3];
 -			if (cc < 4+n || off+n > scanline)
 -				goto bad;
 -			_TIFFmemcpy(row+off, bp+4, n);
 -			bp += 4+n;
 -			cc -= 4+n;
 -			break;
 -		}
 -		default: {
 -			uint32 npixels = 0, grey;
 -			uint32 imagewidth = tif->tif_dir.td_imagewidth;
 -
 -			/*
 -			 * The scanline is composed of a sequence of constant
 -			 * color ``runs''.  We shift into ``run mode'' and
 -			 * interpret bytes as codes of the form
 -			 * <color><npixels> until we've filled the scanline.
 -			 */
 -			op = row;
 -			for (;;) {
 -				grey = (n>>6) & 0x3;
 -				n &= 0x3f;
 -				/*
 -				 * Ensure the run does not exceed the scanline
 -				 * bounds, potentially resulting in a security
 -				 * issue.
 -				 */
 -				while (n-- > 0 && npixels < imagewidth)
 -					SETPIXEL(op, grey);
 -				if (npixels >= imagewidth)
 -					break;
 -				if (cc == 0)
 -					goto bad;
 -				n = *bp++, cc--;
 -			}
 -			break;
 -		}
 -		}
 -	}
 -	tif->tif_rawcp = (tidata_t) bp;
 -	tif->tif_rawcc = cc;
 -	return (1);
 -bad:
 -	TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "NeXTDecode: Not enough data for scanline %ld",
 -	    (long) tif->tif_row);
 -	return (0);
 -}
 -
 -int
 -TIFFInitNeXT(TIFF* tif, int scheme)
 -{
 -	(void) scheme;
 -	tif->tif_decoderow = NeXTDecode;
 -	tif->tif_decodestrip = NeXTDecode;
 -	tif->tif_decodetile = NeXTDecode;
 -	return (1);
 -}
 -#endif /* NEXT_SUPPORT */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_ojpeg.c b/plugins/FreeImage/Source/LibTIFF/tif_ojpeg.c deleted file mode 100644 index ad339afc1b..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_ojpeg.c +++ /dev/null @@ -1,2448 +0,0 @@ -/* $Id: tif_ojpeg.c,v 1.36 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/* WARNING: The type of JPEG encapsulation defined by the TIFF Version 6.0
 -   specification is now totally obsolete and deprecated for new applications and
 -   images. This file was was created solely in order to read unconverted images
 -   still present on some users' computer systems. It will never be extended
 -   to write such files. Writing new-style JPEG compressed TIFFs is implemented
 -   in tif_jpeg.c.
 -
 -   The code is carefully crafted to robustly read all gathered JPEG-in-TIFF
 -   testfiles, and anticipate as much as possible all other... But still, it may
 -   fail on some. If you encounter problems, please report them on the TIFF
 -   mailing list and/or to Joris Van Damme <info@awaresystems.be>.
 -
 -   Please read the file called "TIFF Technical Note #2" if you need to be
 -   convinced this compression scheme is bad and breaks TIFF. That document
 -   is linked to from the LibTiff site <http://www.remotesensing.org/libtiff/>
 -   and from AWare Systems' TIFF section
 -   <http://www.awaresystems.be/imaging/tiff.html>. It is also absorbed
 -   in Adobe's specification supplements, marked "draft" up to this day, but
 -   supported by the TIFF community.
 -
 -   This file interfaces with Release 6B of the JPEG Library written by the
 -   Independent JPEG Group. Previous versions of this file required a hack inside
 -   the LibJpeg library. This version no longer requires that. Remember to
 -   remove the hack if you update from the old version.
 -
 -   Copyright (c) Joris Van Damme <info@awaresystems.be>
 -   Copyright (c) AWare Systems <http://www.awaresystems.be/>
 -
 -   The licence agreement for this file is the same as the rest of the LibTiff
 -   library.
 -
 -   IN NO EVENT SHALL JORIS VAN DAMME OR AWARE SYSTEMS BE LIABLE FOR
 -   ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 -   OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 -   WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
 -   LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 -   OF THIS SOFTWARE.
 -
 -   Joris Van Damme and/or AWare Systems may be available for custom
 -   developement. If you like what you see, and need anything similar or related,
 -   contact <info@awaresystems.be>.
 -*/
 -
 -/* What is what, and what is not?
 -
 -   This decoder starts with an input stream, that is essentially the JpegInterchangeFormat
 -   stream, if any, followed by the strile data, if any. This stream is read in
 -   OJPEGReadByte and related functions.
 -
 -   It analyzes the start of this stream, until it encounters non-marker data, i.e.
 -   compressed image data. Some of the header markers it sees have no actual content,
 -   like the SOI marker, and APP/COM markers that really shouldn't even be there. Some
 -   other markers do have content, and the valuable bits and pieces of information
 -   in these markers are saved, checking all to verify that the stream is more or
 -   less within expected bounds. This happens inside the OJPEGReadHeaderInfoSecStreamXxx
 -   functions.
 -
 -   Some OJPEG imagery contains no valid JPEG header markers. This situation is picked
 -   up on if we've seen no SOF marker when we're at the start of the compressed image
 -   data. In this case, the tables are read from JpegXxxTables tags, and the other
 -   bits and pieces of information is initialized to its most basic value. This is
 -   implemented in the OJPEGReadHeaderInfoSecTablesXxx functions.
 -
 -   When this is complete, a good and valid JPEG header can be assembled, and this is
 -   passed through to LibJpeg. When that's done, the remainder of the input stream, i.e.
 -   the compressed image data, can be passed through unchanged. This is done in
 -   OJPEGWriteStream functions.
 -
 -   LibTiff rightly expects to know the subsampling values before decompression. Just like
 -   in new-style JPEG-in-TIFF, though, or even more so, actually, the YCbCrsubsampling
 -   tag is notoriously unreliable. To correct these tag values with the ones inside
 -   the JPEG stream, the first part of the input stream is pre-scanned in
 -   OJPEGSubsamplingCorrect, making no note of any other data, reporting no warnings
 -   or errors, up to the point where either these values are read, or it's clear they
 -   aren't there. This means that some of the data is read twice, but we feel speed
 -   in correcting these values is important enough to warrant this sacrifice. Allthough
 -   there is currently no define or other configuration mechanism to disable this behaviour,
 -   the actual header scanning is build to robustly respond with error report if it
 -   should encounter an uncorrected mismatch of subsampling values. See
 -   OJPEGReadHeaderInfoSecStreamSof.
 -
 -   The restart interval and restart markers are the most tricky part... The restart
 -   interval can be specified in a tag. It can also be set inside the input JPEG stream.
 -   It can be used inside the input JPEG stream. If reading from strile data, we've
 -   consistenly discovered the need to insert restart markers in between the different
 -   striles, as is also probably the most likely interpretation of the original TIFF 6.0
 -   specification. With all this setting of interval, and actual use of markers that is not
 -   predictable at the time of valid JPEG header assembly, the restart thing may turn
 -   out the Achilles heel of this implementation. Fortunately, most OJPEG writer vendors
 -   succeed in reading back what they write, which may be the reason why we've been able
 -   to discover ways that seem to work.
 -
 -   Some special provision is made for planarconfig separate OJPEG files. These seem
 -   to consistently contain header info, a SOS marker, a plane, SOS marker, plane, SOS,
 -   and plane. This may or may not be a valid JPEG configuration, we don't know and don't
 -   care. We want LibTiff to be able to access the planes individually, without huge
 -   buffering inside LibJpeg, anyway. So we compose headers to feed to LibJpeg, in this
 -   case, that allow us to pass a single plane such that LibJpeg sees a valid
 -   single-channel JPEG stream. Locating subsequent SOS markers, and thus subsequent
 -   planes, is done inside OJPEGReadSecondarySos.
 -
 -   The benefit of the scheme is... that it works, basically. We know of no other that
 -   does. It works without checking software tag, or otherwise going about things in an
 -   OJPEG flavor specific manner. Instead, it is a single scheme, that covers the cases
 -   with and without JpegInterchangeFormat, with and without striles, with part of
 -   the header in JpegInterchangeFormat and remainder in first strile, etc. It is forgiving
 -   and robust, may likely work with OJPEG flavors we've not seen yet, and makes most out
 -   of the data.
 -
 -   Another nice side-effect is that a complete JPEG single valid stream is build if
 -   planarconfig is not separate (vast majority). We may one day use that to build
 -   converters to JPEG, and/or to new-style JPEG compression inside TIFF.
 -
 -   A dissadvantage is the lack of random access to the individual striles. This is the
 -   reason for much of the complicated restart-and-position stuff inside OJPEGPreDecode.
 -   Applications would do well accessing all striles in order, as this will result in
 -   a single sequential scan of the input stream, and no restarting of LibJpeg decoding
 -   session.
 -*/
 -
 -
 -#include "tiffiop.h"
 -#ifdef OJPEG_SUPPORT
 -
 -/* Configuration defines here are:
 - * JPEG_ENCAP_EXTERNAL: The normal way to call libjpeg, uses longjump. In some environments,
 - * 	like eg LibTiffDelphi, this is not possible. For this reason, the actual calls to
 - * 	libjpeg, with longjump stuff, are encapsulated in dedicated functions. When
 - * 	JPEG_ENCAP_EXTERNAL is defined, these encapsulating functions are declared external
 - * 	to this unit, and can be defined elsewhere to use stuff other then longjump.
 - * 	The default mode, without JPEG_ENCAP_EXTERNAL, implements the call encapsulators
 - * 	here, internally, with normal longjump.
 - * SETJMP, LONGJMP, JMP_BUF: On some machines/environments a longjump equivalent is
 - * 	conviniently available, but still it may be worthwhile to use _setjmp or sigsetjmp
 - * 	in place of plain setjmp. These macros will make it easier. It is useless
 - * 	to fiddle with these if you define JPEG_ENCAP_EXTERNAL.
 - * OJPEG_BUFFER: Define the size of the desired buffer here. Should be small enough so as to guarantee
 - * 	instant processing, optimal streaming and optimal use of processor cache, but also big
 - * 	enough so as to not result in significant call overhead. It should be at least a few
 - * 	bytes to accomodate some structures (this is verified in asserts), but it would not be
 - * 	sensible to make it this small anyway, and it should be at most 64K since it is indexed
 - * 	with uint16. We recommend 2K.
 - * EGYPTIANWALK: You could also define EGYPTIANWALK here, but it is not used anywhere and has
 - * 	absolutely no effect. That is why most people insist the EGYPTIANWALK is a bit silly.
 - */
 -
 -/* #define LIBJPEG_ENCAP_EXTERNAL */
 -#define SETJMP(jbuf) setjmp(jbuf)
 -#define LONGJMP(jbuf,code) longjmp(jbuf,code)
 -#define JMP_BUF jmp_buf
 -#define OJPEG_BUFFER 2048
 -/* define EGYPTIANWALK */
 -
 -#define JPEG_MARKER_SOF0 0xC0
 -#define JPEG_MARKER_SOF1 0xC1
 -#define JPEG_MARKER_SOF3 0xC3
 -#define JPEG_MARKER_DHT 0xC4
 -#define JPEG_MARKER_RST0 0XD0
 -#define JPEG_MARKER_SOI 0xD8
 -#define JPEG_MARKER_EOI 0xD9
 -#define JPEG_MARKER_SOS 0xDA
 -#define JPEG_MARKER_DQT 0xDB
 -#define JPEG_MARKER_DRI 0xDD
 -#define JPEG_MARKER_APP0 0xE0
 -#define JPEG_MARKER_COM 0xFE
 -
 -#define FIELD_OJPEG_JPEGINTERCHANGEFORMAT (FIELD_CODEC+0)
 -#define FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH (FIELD_CODEC+1)
 -#define FIELD_OJPEG_JPEGQTABLES (FIELD_CODEC+2)
 -#define FIELD_OJPEG_JPEGDCTABLES (FIELD_CODEC+3)
 -#define FIELD_OJPEG_JPEGACTABLES (FIELD_CODEC+4)
 -#define FIELD_OJPEG_JPEGPROC (FIELD_CODEC+5)
 -#define FIELD_OJPEG_JPEGRESTARTINTERVAL (FIELD_CODEC+6)
 -#define FIELD_OJPEG_COUNT 7
 -
 -static const TIFFFieldInfo ojpeg_field_info[] = {
 -	{TIFFTAG_JPEGIFOFFSET,1,1,TIFF_LONG,FIELD_OJPEG_JPEGINTERCHANGEFORMAT,TRUE,FALSE,"JpegInterchangeFormat"},
 -	{TIFFTAG_JPEGIFBYTECOUNT,1,1,TIFF_LONG,FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH,TRUE,FALSE,"JpegInterchangeFormatLength"},
 -	{TIFFTAG_JPEGQTABLES,TIFF_VARIABLE,TIFF_VARIABLE,TIFF_LONG,FIELD_OJPEG_JPEGQTABLES,FALSE,TRUE,"JpegQTables"},
 -	{TIFFTAG_JPEGDCTABLES,TIFF_VARIABLE,TIFF_VARIABLE,TIFF_LONG,FIELD_OJPEG_JPEGDCTABLES,FALSE,TRUE,"JpegDcTables"},
 -	{TIFFTAG_JPEGACTABLES,TIFF_VARIABLE,TIFF_VARIABLE,TIFF_LONG,FIELD_OJPEG_JPEGACTABLES,FALSE,TRUE,"JpegAcTables"},
 -	{TIFFTAG_JPEGPROC,1,1,TIFF_SHORT,FIELD_OJPEG_JPEGPROC,FALSE,FALSE,"JpegProc"},
 -	{TIFFTAG_JPEGRESTARTINTERVAL,1,1,TIFF_SHORT,FIELD_OJPEG_JPEGRESTARTINTERVAL,FALSE,FALSE,"JpegRestartInterval"},
 -};
 -
 -#ifndef LIBJPEG_ENCAP_EXTERNAL
 -#include <setjmp.h>
 -#endif
 -
 -#include "../LibJPEG/jpeglib.h"
 -#include "../LibJPEG/jerror.h"
 -
 -typedef struct jpeg_error_mgr jpeg_error_mgr;
 -typedef struct jpeg_common_struct jpeg_common_struct;
 -typedef struct jpeg_decompress_struct jpeg_decompress_struct;
 -typedef struct jpeg_source_mgr jpeg_source_mgr;
 -
 -typedef enum {
 -	osibsNotSetYet,
 -	osibsJpegInterchangeFormat,
 -	osibsStrile,
 -	osibsEof
 -} OJPEGStateInBufferSource;
 -
 -typedef enum {
 -	ososSoi,
 -	ososQTable0,ososQTable1,ososQTable2,ososQTable3,
 -	ososDcTable0,ososDcTable1,ososDcTable2,ososDcTable3,
 -	ososAcTable0,ososAcTable1,ososAcTable2,ososAcTable3,
 -	ososDri,
 -	ososSof,
 -	ososSos,
 -	ososCompressed,
 -	ososRst,
 -	ososEoi
 -} OJPEGStateOutState;
 -
 -typedef struct {
 -	TIFF* tif;
 -	#ifndef LIBJPEG_ENCAP_EXTERNAL
 -	JMP_BUF exit_jmpbuf;
 -	#endif
 -	TIFFVGetMethod vgetparent;
 -	TIFFVSetMethod vsetparent;
 -	toff_t file_size;
 -	uint32 image_width;
 -	uint32 image_length;
 -	uint32 strile_width;
 -	uint32 strile_length;
 -	uint32 strile_length_total;
 -	uint8 samples_per_pixel;
 -	uint8 plane_sample_offset;
 -	uint8 samples_per_pixel_per_plane;
 -	toff_t jpeg_interchange_format;
 -	toff_t jpeg_interchange_format_length;
 -	uint8 jpeg_proc;
 -	uint8 subsamplingcorrect;
 -	uint8 subsamplingcorrect_done;
 -	uint8 subsampling_tag;
 -	uint8 subsampling_hor;
 -	uint8 subsampling_ver;
 -	uint8 subsampling_force_desubsampling_inside_decompression;
 -	uint8 qtable_offset_count;
 -	uint8 dctable_offset_count;
 -	uint8 actable_offset_count;
 -	toff_t qtable_offset[3];
 -	toff_t dctable_offset[3];
 -	toff_t actable_offset[3];
 -	uint8* qtable[4];
 -	uint8* dctable[4];
 -	uint8* actable[4];
 -	uint16 restart_interval;
 -	uint8 restart_index;
 -	uint8 sof_log;
 -	uint8 sof_marker_id;
 -	uint32 sof_x;
 -	uint32 sof_y;
 -	uint8 sof_c[3];
 -	uint8 sof_hv[3];
 -	uint8 sof_tq[3];
 -	uint8 sos_cs[3];
 -	uint8 sos_tda[3];
 -	struct {
 -		uint8 log;
 -		OJPEGStateInBufferSource in_buffer_source;
 -		tstrile_t in_buffer_next_strile;
 -		toff_t in_buffer_file_pos;
 -		toff_t in_buffer_file_togo;
 -	} sos_end[3];
 -	uint8 readheader_done;
 -	uint8 writeheader_done;
 -	tsample_t write_cursample;
 -	tstrile_t write_curstrile;
 -	uint8 libjpeg_session_active;
 -	uint8 libjpeg_jpeg_query_style;
 -	jpeg_error_mgr libjpeg_jpeg_error_mgr;
 -	jpeg_decompress_struct libjpeg_jpeg_decompress_struct;
 -	jpeg_source_mgr libjpeg_jpeg_source_mgr;
 -	uint8 subsampling_convert_log;
 -	uint32 subsampling_convert_ylinelen;
 -	uint32 subsampling_convert_ylines;
 -	uint32 subsampling_convert_clinelen;
 -	uint32 subsampling_convert_clines;
 -	uint32 subsampling_convert_ybuflen;
 -	uint32 subsampling_convert_cbuflen;
 -	uint32 subsampling_convert_ycbcrbuflen;
 -	uint8* subsampling_convert_ycbcrbuf;
 -	uint8* subsampling_convert_ybuf;
 -	uint8* subsampling_convert_cbbuf;
 -	uint8* subsampling_convert_crbuf;
 -	uint32 subsampling_convert_ycbcrimagelen;
 -	uint8** subsampling_convert_ycbcrimage;
 -	uint32 subsampling_convert_clinelenout;
 -	uint32 subsampling_convert_state;
 -	uint32 bytes_per_line;   /* if the codec outputs subsampled data, a 'line' in bytes_per_line */
 -	uint32 lines_per_strile; /* and lines_per_strile means subsampling_ver desubsampled rows     */
 -	OJPEGStateInBufferSource in_buffer_source;
 -	tstrile_t in_buffer_next_strile;
 -	tstrile_t in_buffer_strile_count;
 -	toff_t in_buffer_file_pos;
 -	uint8 in_buffer_file_pos_log;
 -	toff_t in_buffer_file_togo;
 -	uint16 in_buffer_togo;
 -	uint8* in_buffer_cur;
 -	uint8 in_buffer[OJPEG_BUFFER];
 -	OJPEGStateOutState out_state;
 -	uint8 out_buffer[OJPEG_BUFFER];
 -	uint8* skip_buffer;
 -} OJPEGState;
 -
 -static int OJPEGVGetField(TIFF* tif, ttag_t tag, va_list ap);
 -static int OJPEGVSetField(TIFF* tif, ttag_t tag, va_list ap);
 -static void OJPEGPrintDir(TIFF* tif, FILE* fd, long flags);
 -
 -static int OJPEGSetupDecode(TIFF* tif);
 -static int OJPEGPreDecode(TIFF* tif, tsample_t s);
 -static int OJPEGPreDecodeSkipRaw(TIFF* tif);
 -static int OJPEGPreDecodeSkipScanlines(TIFF* tif);
 -static int OJPEGDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s);
 -static int OJPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc);
 -static int OJPEGDecodeScanlines(TIFF* tif, tidata_t buf, tsize_t cc);
 -static void OJPEGPostDecode(TIFF* tif, tidata_t buf, tsize_t cc);
 -static int OJPEGSetupEncode(TIFF* tif);
 -static int OJPEGPreEncode(TIFF* tif, tsample_t s);
 -static int OJPEGEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s);
 -static int OJPEGPostEncode(TIFF* tif);
 -static void OJPEGCleanup(TIFF* tif);
 -
 -static void OJPEGSubsamplingCorrect(TIFF* tif);
 -static int OJPEGReadHeaderInfo(TIFF* tif);
 -static int OJPEGReadSecondarySos(TIFF* tif, tsample_t s);
 -static int OJPEGWriteHeaderInfo(TIFF* tif);
 -static void OJPEGLibjpegSessionAbort(TIFF* tif);
 -
 -static int OJPEGReadHeaderInfoSec(TIFF* tif);
 -static int OJPEGReadHeaderInfoSecStreamDri(TIFF* tif);
 -static int OJPEGReadHeaderInfoSecStreamDqt(TIFF* tif);
 -static int OJPEGReadHeaderInfoSecStreamDht(TIFF* tif);
 -static int OJPEGReadHeaderInfoSecStreamSof(TIFF* tif, uint8 marker_id);
 -static int OJPEGReadHeaderInfoSecStreamSos(TIFF* tif);
 -static int OJPEGReadHeaderInfoSecTablesQTable(TIFF* tif);
 -static int OJPEGReadHeaderInfoSecTablesDcTable(TIFF* tif);
 -static int OJPEGReadHeaderInfoSecTablesAcTable(TIFF* tif);
 -
 -static int OJPEGReadBufferFill(OJPEGState* sp);
 -static int OJPEGReadByte(OJPEGState* sp, uint8* byte);
 -static int OJPEGReadBytePeek(OJPEGState* sp, uint8* byte);
 -static void OJPEGReadByteAdvance(OJPEGState* sp);
 -static int OJPEGReadWord(OJPEGState* sp, uint16* word);
 -static int OJPEGReadBlock(OJPEGState* sp, uint16 len, void* mem);
 -static void OJPEGReadSkip(OJPEGState* sp, uint16 len);
 -
 -static int OJPEGWriteStream(TIFF* tif, void** mem, uint32* len);
 -static void OJPEGWriteStreamSoi(TIFF* tif, void** mem, uint32* len);
 -static void OJPEGWriteStreamQTable(TIFF* tif, uint8 table_index, void** mem, uint32* len);
 -static void OJPEGWriteStreamDcTable(TIFF* tif, uint8 table_index, void** mem, uint32* len);
 -static void OJPEGWriteStreamAcTable(TIFF* tif, uint8 table_index, void** mem, uint32* len);
 -static void OJPEGWriteStreamDri(TIFF* tif, void** mem, uint32* len);
 -static void OJPEGWriteStreamSof(TIFF* tif, void** mem, uint32* len);
 -static void OJPEGWriteStreamSos(TIFF* tif, void** mem, uint32* len);
 -static int OJPEGWriteStreamCompressed(TIFF* tif, void** mem, uint32* len);
 -static void OJPEGWriteStreamRst(TIFF* tif, void** mem, uint32* len);
 -static void OJPEGWriteStreamEoi(TIFF* tif, void** mem, uint32* len);
 -
 -#ifdef LIBJPEG_ENCAP_EXTERNAL
 -extern int jpeg_create_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo);
 -extern int jpeg_read_header_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, uint8 require_image);
 -extern int jpeg_start_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo);
 -extern int jpeg_read_scanlines_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* scanlines, uint32 max_lines);
 -extern int jpeg_read_raw_data_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* data, uint32 max_lines);
 -extern void jpeg_encap_unwind(TIFF* tif);
 -#else
 -static int jpeg_create_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* j);
 -static int jpeg_read_header_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, uint8 require_image);
 -static int jpeg_start_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo);
 -static int jpeg_read_scanlines_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* scanlines, uint32 max_lines);
 -static int jpeg_read_raw_data_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* data, uint32 max_lines);
 -static void jpeg_encap_unwind(TIFF* tif);
 -#endif
 -
 -static void OJPEGLibjpegJpegErrorMgrOutputMessage(jpeg_common_struct* cinfo);
 -static void OJPEGLibjpegJpegErrorMgrErrorExit(jpeg_common_struct* cinfo);
 -static void OJPEGLibjpegJpegSourceMgrInitSource(jpeg_decompress_struct* cinfo);
 -static boolean OJPEGLibjpegJpegSourceMgrFillInputBuffer(jpeg_decompress_struct* cinfo);
 -static void OJPEGLibjpegJpegSourceMgrSkipInputData(jpeg_decompress_struct* cinfo, long num_bytes);
 -static boolean OJPEGLibjpegJpegSourceMgrResyncToRestart(jpeg_decompress_struct* cinfo, int desired);
 -static void OJPEGLibjpegJpegSourceMgrTermSource(jpeg_decompress_struct* cinfo);
 -
 -int
 -TIFFInitOJPEG(TIFF* tif, int scheme)
 -{
 -	static const char module[]="TIFFInitOJPEG";
 -	OJPEGState* sp;
 -
 -	assert(scheme==COMPRESSION_OJPEG);
 -
 -        /*
 -	 * Merge codec-specific tag information.
 -	 */
 -	if (!_TIFFMergeFieldInfo(tif,ojpeg_field_info,FIELD_OJPEG_COUNT)) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "Merging Old JPEG codec-specific tags failed");
 -		return 0;
 -	}
 -
 -	/* state block */
 -	sp=_TIFFmalloc(sizeof(OJPEGState));
 -	if (sp==NULL)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"No space for OJPEG state block");
 -		return(0);
 -	}
 -	_TIFFmemset(sp,0,sizeof(OJPEGState));
 -	sp->tif=tif;
 -	sp->jpeg_proc=1;
 -	sp->subsampling_hor=2;
 -	sp->subsampling_ver=2;
 -	TIFFSetField(tif,TIFFTAG_YCBCRSUBSAMPLING,2,2);
 -	/* tif codec methods */
 -	tif->tif_setupdecode=OJPEGSetupDecode;
 -	tif->tif_predecode=OJPEGPreDecode;
 -	tif->tif_postdecode=OJPEGPostDecode;
 -	tif->tif_decoderow=OJPEGDecode;
 -	tif->tif_decodestrip=OJPEGDecode;
 -	tif->tif_decodetile=OJPEGDecode;
 -	tif->tif_setupencode=OJPEGSetupEncode;
 -	tif->tif_preencode=OJPEGPreEncode;
 -	tif->tif_postencode=OJPEGPostEncode;
 -	tif->tif_encoderow=OJPEGEncode;
 -	tif->tif_encodestrip=OJPEGEncode;
 -	tif->tif_encodetile=OJPEGEncode;
 -	tif->tif_cleanup=OJPEGCleanup;
 -	tif->tif_data=(tidata_t)sp;
 -	/* tif tag methods */
 -	sp->vgetparent=tif->tif_tagmethods.vgetfield;
 -	tif->tif_tagmethods.vgetfield=OJPEGVGetField;
 -	sp->vsetparent=tif->tif_tagmethods.vsetfield;
 -	tif->tif_tagmethods.vsetfield=OJPEGVSetField;
 -	tif->tif_tagmethods.printdir=OJPEGPrintDir;
 -	/* Some OJPEG files don't have strip or tile offsets or bytecounts tags.
 -	   Some others do, but have totally meaningless or corrupt values
 -	   in these tags. In these cases, the JpegInterchangeFormat stream is
 -	   reliable. In any case, this decoder reads the compressed data itself,
 -	   from the most reliable locations, and we need to notify encapsulating
 -	   LibTiff not to read raw strips or tiles for us. */
 -	tif->tif_flags|=TIFF_NOREADRAW;
 -	return(1);
 -}
 -
 -static int
 -OJPEGVGetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	switch(tag)
 -	{
 -		case TIFFTAG_JPEGIFOFFSET:
 -			*va_arg(ap,uint32*)=(uint32)sp->jpeg_interchange_format;
 -			break;
 -		case TIFFTAG_JPEGIFBYTECOUNT:
 -			*va_arg(ap,uint32*)=(uint32)sp->jpeg_interchange_format_length;
 -			break;
 -		case TIFFTAG_YCBCRSUBSAMPLING:
 -			if (sp->subsamplingcorrect_done==0)
 -				OJPEGSubsamplingCorrect(tif);
 -			*va_arg(ap,uint16*)=(uint16)sp->subsampling_hor;
 -			*va_arg(ap,uint16*)=(uint16)sp->subsampling_ver;
 -			break;
 -		case TIFFTAG_JPEGQTABLES:
 -			*va_arg(ap,uint32*)=(uint32)sp->qtable_offset_count;
 -			*va_arg(ap,void**)=(void*)sp->qtable_offset;
 -			break;
 -		case TIFFTAG_JPEGDCTABLES:
 -			*va_arg(ap,uint32*)=(uint32)sp->dctable_offset_count;
 -			*va_arg(ap,void**)=(void*)sp->dctable_offset;
 -			break;
 -		case TIFFTAG_JPEGACTABLES:
 -			*va_arg(ap,uint32*)=(uint32)sp->actable_offset_count;
 -			*va_arg(ap,void**)=(void*)sp->actable_offset;
 -			break;
 -		case TIFFTAG_JPEGPROC:
 -			*va_arg(ap,uint16*)=(uint16)sp->jpeg_proc;
 -			break;
 -		case TIFFTAG_JPEGRESTARTINTERVAL:
 -			*va_arg(ap,uint16*)=sp->restart_interval;
 -			break;
 -		default:
 -			return (*sp->vgetparent)(tif,tag,ap);
 -	}
 -	return (1);
 -}
 -
 -static int
 -OJPEGVSetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	static const char module[]="OJPEGVSetField";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint32 ma;
 -	uint32* mb;
 -	uint32 n;
 -	switch(tag)
 -	{
 -		case TIFFTAG_JPEGIFOFFSET:
 -			sp->jpeg_interchange_format=(toff_t)va_arg(ap,uint32);  
 -			break;
 -		case TIFFTAG_JPEGIFBYTECOUNT:
 -			sp->jpeg_interchange_format_length=(toff_t)va_arg(ap,uint32);  
 -			break;
 -		case TIFFTAG_YCBCRSUBSAMPLING:
 -			sp->subsampling_tag=1;
 -			sp->subsampling_hor=(uint8)va_arg(ap,int);
 -			sp->subsampling_ver=(uint8)va_arg(ap,int);
 -			tif->tif_dir.td_ycbcrsubsampling[0]=sp->subsampling_hor;
 -			tif->tif_dir.td_ycbcrsubsampling[1]=sp->subsampling_ver;
 -			break;
 -		case TIFFTAG_JPEGQTABLES:
 -			ma=va_arg(ap,uint32);
 -			if (ma!=0)
 -			{
 -				if (ma>3)
 -				{
 -					TIFFErrorExt(tif->tif_clientdata,module,"JpegQTables tag has incorrect count");
 -					return(0);
 -				}
 -				sp->qtable_offset_count=(uint8)ma;
 -				mb=va_arg(ap,uint32*);
 -				for (n=0; n<ma; n++)
 -					sp->qtable_offset[n]=(toff_t)mb[n];
 -			}
 -			break;
 -		case TIFFTAG_JPEGDCTABLES:
 -			ma=va_arg(ap,uint32);
 -			if (ma!=0)
 -			{
 -				if (ma>3)
 -				{
 -					TIFFErrorExt(tif->tif_clientdata,module,"JpegDcTables tag has incorrect count");
 -					return(0);
 -				}
 -				sp->dctable_offset_count=(uint8)ma;
 -				mb=va_arg(ap,uint32*);
 -				for (n=0; n<ma; n++)
 -					sp->dctable_offset[n]=(toff_t)mb[n];
 -			}
 -			break;
 -		case TIFFTAG_JPEGACTABLES:
 -			ma=va_arg(ap,uint32);
 -			if (ma!=0)
 -			{
 -				if (ma>3)
 -				{
 -					TIFFErrorExt(tif->tif_clientdata,module,"JpegAcTables tag has incorrect count");
 -					return(0);
 -				}
 -				sp->actable_offset_count=(uint8)ma;
 -				mb=va_arg(ap,uint32*);
 -				for (n=0; n<ma; n++)
 -					sp->actable_offset[n]=(toff_t)mb[n];
 -			}
 -			break;
 -		case TIFFTAG_JPEGPROC:
 -			sp->jpeg_proc=(uint8)va_arg(ap,uint32);
 -			break;
 -		case TIFFTAG_JPEGRESTARTINTERVAL:
 -			sp->restart_interval=(uint16)va_arg(ap,uint32);
 -			break;
 -		default:
 -			return (*sp->vsetparent)(tif,tag,ap);
 -	}
 -	TIFFSetFieldBit(tif,_TIFFFieldWithTag(tif,tag)->field_bit);
 -	tif->tif_flags|=TIFF_DIRTYDIRECT;
 -	return(1);
 -}
 -
 -static void
 -OJPEGPrintDir(TIFF* tif, FILE* fd, long flags)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8 m;
 -	(void)flags;
 -	assert(sp!=NULL);
 -	if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGINTERCHANGEFORMAT))
 -		fprintf(fd,"  JpegInterchangeFormat: %lu\n",(unsigned long)sp->jpeg_interchange_format);
 -	if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH))
 -		fprintf(fd,"  JpegInterchangeFormatLength: %lu\n",(unsigned long)sp->jpeg_interchange_format_length);
 -	if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGQTABLES))
 -	{
 -		fprintf(fd,"  JpegQTables:");
 -		for (m=0; m<sp->qtable_offset_count; m++)
 -			fprintf(fd," %lu",(unsigned long)sp->qtable_offset[m]);
 -		fprintf(fd,"\n");
 -	}
 -	if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGDCTABLES))
 -	{
 -		fprintf(fd,"  JpegDcTables:");
 -		for (m=0; m<sp->dctable_offset_count; m++)
 -			fprintf(fd," %lu",(unsigned long)sp->dctable_offset[m]);
 -		fprintf(fd,"\n");
 -	}
 -	if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGACTABLES))
 -	{
 -		fprintf(fd,"  JpegAcTables:");
 -		for (m=0; m<sp->actable_offset_count; m++)
 -			fprintf(fd," %lu",(unsigned long)sp->actable_offset[m]);
 -		fprintf(fd,"\n");
 -	}
 -	if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGPROC))
 -		fprintf(fd,"  JpegProc: %u\n",(unsigned int)sp->jpeg_proc);
 -	if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGRESTARTINTERVAL))
 -		fprintf(fd,"  JpegRestartInterval: %u\n",(unsigned int)sp->restart_interval);
 -}
 -
 -static int
 -OJPEGSetupDecode(TIFF* tif)
 -{
 -	static const char module[]="OJPEGSetupDecode";
 -	TIFFWarningExt(tif->tif_clientdata,module,"Depreciated and troublesome old-style JPEG compression mode, please convert to new-style JPEG compression and notify vendor of writing software");
 -	return(1);
 -}
 -
 -static int
 -OJPEGPreDecode(TIFF* tif, tsample_t s)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	tstrile_t m;
 -	if (sp->subsamplingcorrect_done==0)
 -		OJPEGSubsamplingCorrect(tif);
 -	if (sp->readheader_done==0)
 -	{
 -		if (OJPEGReadHeaderInfo(tif)==0)
 -			return(0);
 -	}
 -	if (sp->sos_end[s].log==0)
 -	{
 -		if (OJPEGReadSecondarySos(tif,s)==0)
 -			return(0);
 -	}
 -	if isTiled(tif)
 -		m=(tstrile_t)tif->tif_curtile;
 -	else
 -		m=(tstrile_t)tif->tif_curstrip;
 -	if ((sp->writeheader_done!=0) && ((sp->write_cursample!=s) || (sp->write_curstrile>m)))
 -	{
 -		if (sp->libjpeg_session_active!=0)
 -			OJPEGLibjpegSessionAbort(tif);
 -		sp->writeheader_done=0;
 -	}
 -	if (sp->writeheader_done==0)
 -	{
 -		sp->plane_sample_offset=s;
 -		sp->write_cursample=s;
 -		sp->write_curstrile=s*tif->tif_dir.td_stripsperimage;
 -		if ((sp->in_buffer_file_pos_log==0) ||
 -		    (sp->in_buffer_file_pos-sp->in_buffer_togo!=sp->sos_end[s].in_buffer_file_pos))
 -		{
 -			sp->in_buffer_source=sp->sos_end[s].in_buffer_source;
 -			sp->in_buffer_next_strile=sp->sos_end[s].in_buffer_next_strile;
 -			sp->in_buffer_file_pos=sp->sos_end[s].in_buffer_file_pos;
 -			sp->in_buffer_file_pos_log=0;
 -			sp->in_buffer_file_togo=sp->sos_end[s].in_buffer_file_togo;
 -			sp->in_buffer_togo=0;
 -			sp->in_buffer_cur=0;
 -		}
 -		if (OJPEGWriteHeaderInfo(tif)==0)
 -			return(0);
 -	}
 -	while (sp->write_curstrile<m)          
 -	{
 -		if (sp->libjpeg_jpeg_query_style==0)
 -		{
 -			if (OJPEGPreDecodeSkipRaw(tif)==0)
 -				return(0);
 -		}
 -		else
 -		{
 -			if (OJPEGPreDecodeSkipScanlines(tif)==0)
 -				return(0);
 -		}
 -		sp->write_curstrile++;
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGPreDecodeSkipRaw(TIFF* tif)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint32 m;
 -	m=sp->lines_per_strile;
 -	if (sp->subsampling_convert_state!=0)
 -	{
 -		if (sp->subsampling_convert_clines-sp->subsampling_convert_state>=m)
 -		{
 -			sp->subsampling_convert_state+=m;
 -			if (sp->subsampling_convert_state==sp->subsampling_convert_clines)
 -				sp->subsampling_convert_state=0;
 -			return(1);
 -		}
 -		m-=sp->subsampling_convert_clines-sp->subsampling_convert_state;
 -		sp->subsampling_convert_state=0;
 -	}
 -	while (m>=sp->subsampling_convert_clines)
 -	{
 -		if (jpeg_read_raw_data_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),sp->subsampling_convert_ycbcrimage,sp->subsampling_ver*8)==0)
 -			return(0);
 -		m-=sp->subsampling_convert_clines;
 -	}
 -	if (m>0)
 -	{
 -		if (jpeg_read_raw_data_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),sp->subsampling_convert_ycbcrimage,sp->subsampling_ver*8)==0)
 -			return(0);
 -		sp->subsampling_convert_state=m;
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGPreDecodeSkipScanlines(TIFF* tif)
 -{
 -	static const char module[]="OJPEGPreDecodeSkipScanlines";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint32 m;
 -	if (sp->skip_buffer==NULL)
 -	{
 -		sp->skip_buffer=_TIFFmalloc(sp->bytes_per_line);
 -		if (sp->skip_buffer==NULL)
 -		{
 -			TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
 -			return(0);
 -		}
 -	}
 -	for (m=0; m<sp->lines_per_strile; m++)
 -	{
 -		if (jpeg_read_scanlines_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),&sp->skip_buffer,1)==0)
 -			return(0);
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	(void)s;
 -	if (sp->libjpeg_jpeg_query_style==0)
 -	{
 -		if (OJPEGDecodeRaw(tif,buf,cc)==0)
 -			return(0);
 -	}
 -	else
 -	{
 -		if (OJPEGDecodeScanlines(tif,buf,cc)==0)
 -			return(0);
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc)
 -{
 -	static const char module[]="OJPEGDecodeRaw";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8* m;
 -	uint32 n;
 -	uint8* oy;
 -	uint8* ocb;
 -	uint8* ocr;
 -	uint8* p;
 -	uint32 q;
 -	uint8* r;
 -	uint8 sx,sy;
 -	if (cc%sp->bytes_per_line!=0)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"Fractional scanline not read");
 -		return(0);
 -	}
 -	assert(cc>0);
 -	m=buf;
 -	n=cc;
 -	do
 -	{
 -		if (sp->subsampling_convert_state==0)
 -		{
 -			if (jpeg_read_raw_data_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),sp->subsampling_convert_ycbcrimage,sp->subsampling_ver*8)==0)
 -				return(0);
 -		}
 -		oy=sp->subsampling_convert_ybuf+sp->subsampling_convert_state*sp->subsampling_ver*sp->subsampling_convert_ylinelen;
 -		ocb=sp->subsampling_convert_cbbuf+sp->subsampling_convert_state*sp->subsampling_convert_clinelen;
 -		ocr=sp->subsampling_convert_crbuf+sp->subsampling_convert_state*sp->subsampling_convert_clinelen;
 -		p=m;
 -		for (q=0; q<sp->subsampling_convert_clinelenout; q++)
 -		{
 -			r=oy;
 -			for (sy=0; sy<sp->subsampling_ver; sy++)
 -			{
 -				for (sx=0; sx<sp->subsampling_hor; sx++)
 -					*p++=*r++;
 -				r+=sp->subsampling_convert_ylinelen-sp->subsampling_hor;
 -			}
 -			oy+=sp->subsampling_hor;
 -			*p++=*ocb++;
 -			*p++=*ocr++;
 -		}
 -		sp->subsampling_convert_state++;
 -		if (sp->subsampling_convert_state==sp->subsampling_convert_clines)
 -			sp->subsampling_convert_state=0;
 -		m+=sp->bytes_per_line;
 -		n-=sp->bytes_per_line;
 -	} while(n>0);
 -	return(1);
 -}
 -
 -static int
 -OJPEGDecodeScanlines(TIFF* tif, tidata_t buf, tsize_t cc)
 -{
 -	static const char module[]="OJPEGDecodeScanlines";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8* m;
 -	uint32 n;
 -	if (cc%sp->bytes_per_line!=0)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"Fractional scanline not read");
 -		return(0);
 -	}
 -	assert(cc>0);
 -	m=buf;
 -	n=cc;
 -	do
 -	{
 -		if (jpeg_read_scanlines_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),&m,1)==0)
 -			return(0);
 -		m+=sp->bytes_per_line;
 -		n-=sp->bytes_per_line;
 -	} while(n>0);
 -	return(1);
 -}
 -
 -static void
 -OJPEGPostDecode(TIFF* tif, tidata_t buf, tsize_t cc)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	(void)buf;
 -	(void)cc;
 -	sp->write_curstrile++;
 -	if (sp->write_curstrile%tif->tif_dir.td_stripsperimage==0)
 -	{
 -		assert(sp->libjpeg_session_active!=0);
 -		OJPEGLibjpegSessionAbort(tif);
 -		sp->writeheader_done=0;
 -	}
 -}
 -
 -static int
 -OJPEGSetupEncode(TIFF* tif)
 -{
 -	static const char module[]="OJPEGSetupEncode";
 -	TIFFErrorExt(tif->tif_clientdata,module,"OJPEG encoding not supported; use new-style JPEG compression instead");
 -	return(0);
 -}
 -
 -static int
 -OJPEGPreEncode(TIFF* tif, tsample_t s)
 -{
 -	static const char module[]="OJPEGPreEncode";
 -	(void)s;
 -	TIFFErrorExt(tif->tif_clientdata,module,"OJPEG encoding not supported; use new-style JPEG compression instead");
 -	return(0);
 -}
 -
 -static int
 -OJPEGEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s)
 -{
 -	static const char module[]="OJPEGEncode";
 -	(void)buf;
 -	(void)cc;
 -	(void)s;
 -	TIFFErrorExt(tif->tif_clientdata,module,"OJPEG encoding not supported; use new-style JPEG compression instead");
 -	return(0);
 -}
 -
 -static int
 -OJPEGPostEncode(TIFF* tif)
 -{
 -	static const char module[]="OJPEGPostEncode";
 -	TIFFErrorExt(tif->tif_clientdata,module,"OJPEG encoding not supported; use new-style JPEG compression instead");
 -	return(0);
 -}
 -
 -static void
 -OJPEGCleanup(TIFF* tif)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	if (sp!=0)
 -	{
 -		tif->tif_tagmethods.vgetfield=sp->vgetparent;
 -		tif->tif_tagmethods.vsetfield=sp->vsetparent;
 -		if (sp->qtable[0]!=0)
 -			_TIFFfree(sp->qtable[0]);
 -		if (sp->qtable[1]!=0)
 -			_TIFFfree(sp->qtable[1]);
 -		if (sp->qtable[2]!=0)
 -			_TIFFfree(sp->qtable[2]);
 -		if (sp->qtable[3]!=0)
 -			_TIFFfree(sp->qtable[3]);
 -		if (sp->dctable[0]!=0)
 -			_TIFFfree(sp->dctable[0]);
 -		if (sp->dctable[1]!=0)
 -			_TIFFfree(sp->dctable[1]);
 -		if (sp->dctable[2]!=0)
 -			_TIFFfree(sp->dctable[2]);
 -		if (sp->dctable[3]!=0)
 -			_TIFFfree(sp->dctable[3]);
 -		if (sp->actable[0]!=0)
 -			_TIFFfree(sp->actable[0]);
 -		if (sp->actable[1]!=0)
 -			_TIFFfree(sp->actable[1]);
 -		if (sp->actable[2]!=0)
 -			_TIFFfree(sp->actable[2]);
 -		if (sp->actable[3]!=0)
 -			_TIFFfree(sp->actable[3]);
 -		if (sp->libjpeg_session_active!=0)
 -			OJPEGLibjpegSessionAbort(tif);
 -		if (sp->subsampling_convert_ycbcrbuf!=0)
 -			_TIFFfree(sp->subsampling_convert_ycbcrbuf);
 -		if (sp->subsampling_convert_ycbcrimage!=0)
 -			_TIFFfree(sp->subsampling_convert_ycbcrimage);
 -		if (sp->skip_buffer!=0)
 -			_TIFFfree(sp->skip_buffer);
 -		_TIFFfree(sp);
 -		tif->tif_data=NULL;
 -		_TIFFSetDefaultCompressionState(tif);
 -	}
 -}
 -
 -static void
 -OJPEGSubsamplingCorrect(TIFF* tif)
 -{
 -	static const char module[]="OJPEGSubsamplingCorrect";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8 mh;
 -	uint8 mv;
 -	assert(sp->subsamplingcorrect_done==0);
 -	if ((tif->tif_dir.td_samplesperpixel!=3) || ((tif->tif_dir.td_photometric!=PHOTOMETRIC_YCBCR) &&
 -	    (tif->tif_dir.td_photometric!=PHOTOMETRIC_ITULAB)))
 -	{
 -		if (sp->subsampling_tag!=0)
 -			TIFFWarningExt(tif->tif_clientdata,module,"Subsampling tag not appropriate for this Photometric and/or SamplesPerPixel");
 -		sp->subsampling_hor=1;
 -		sp->subsampling_ver=1;
 -		sp->subsampling_force_desubsampling_inside_decompression=0;
 -	}
 -	else
 -	{
 -		sp->subsamplingcorrect_done=1;
 -		mh=sp->subsampling_hor;
 -		mv=sp->subsampling_ver;
 -		sp->subsamplingcorrect=1;
 -		OJPEGReadHeaderInfoSec(tif);
 -		if (sp->subsampling_force_desubsampling_inside_decompression!=0)
 -		{
 -			sp->subsampling_hor=1;
 -			sp->subsampling_ver=1;
 -		}
 -		sp->subsamplingcorrect=0;
 -		if (((sp->subsampling_hor!=mh) || (sp->subsampling_ver!=mv)) && (sp->subsampling_force_desubsampling_inside_decompression==0))
 -		{
 -			if (sp->subsampling_tag==0)
 -				TIFFWarningExt(tif->tif_clientdata,module,"Subsampling tag is not set, yet subsampling inside JPEG data [%d,%d] does not match default values [2,2]; assuming subsampling inside JPEG data is correct",sp->subsampling_hor,sp->subsampling_ver);
 -			else
 -				TIFFWarningExt(tif->tif_clientdata,module,"Subsampling inside JPEG data [%d,%d] does not match subsampling tag values [%d,%d]; assuming subsampling inside JPEG data is correct",sp->subsampling_hor,sp->subsampling_ver,mh,mv);
 -		}
 -		if (sp->subsampling_force_desubsampling_inside_decompression!=0)
 -		{
 -			if (sp->subsampling_tag==0)
 -				TIFFWarningExt(tif->tif_clientdata,module,"Subsampling tag is not set, yet subsampling inside JPEG data does not match default values [2,2] (nor any other values allowed in TIFF); assuming subsampling inside JPEG data is correct and desubsampling inside JPEG decompression");
 -			else
 -				TIFFWarningExt(tif->tif_clientdata,module,"Subsampling inside JPEG data does not match subsampling tag values [%d,%d] (nor any other values allowed in TIFF); assuming subsampling inside JPEG data is correct and desubsampling inside JPEG decompression",mh,mv);
 -		}
 -		if (sp->subsampling_force_desubsampling_inside_decompression==0)
 -		{
 -			if (sp->subsampling_hor<sp->subsampling_ver)
 -				TIFFWarningExt(tif->tif_clientdata,module,"Subsampling values [%d,%d] are not allowed in TIFF",sp->subsampling_hor,sp->subsampling_ver);
 -		}
 -	}
 -	sp->subsamplingcorrect_done=1;
 -}
 -
 -static int
 -OJPEGReadHeaderInfo(TIFF* tif)
 -{
 -	static const char module[]="OJPEGReadHeaderInfo";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	assert(sp->readheader_done==0);
 -	sp->image_width=tif->tif_dir.td_imagewidth;
 -	sp->image_length=tif->tif_dir.td_imagelength;
 -	if isTiled(tif)
 -	{
 -		sp->strile_width=tif->tif_dir.td_tilewidth;
 -		sp->strile_length=tif->tif_dir.td_tilelength;
 -		sp->strile_length_total=((sp->image_length+sp->strile_length-1)/sp->strile_length)*sp->strile_length;
 -	}
 -	else
 -	{
 -		sp->strile_width=sp->image_width;
 -		sp->strile_length=tif->tif_dir.td_rowsperstrip;
 -		sp->strile_length_total=sp->image_length;
 -	}
 -	sp->samples_per_pixel=tif->tif_dir.td_samplesperpixel;
 -	if (sp->samples_per_pixel==1)
 -	{
 -		sp->plane_sample_offset=0;
 -		sp->samples_per_pixel_per_plane=sp->samples_per_pixel;
 -		sp->subsampling_hor=1;
 -		sp->subsampling_ver=1;
 -	}
 -	else
 -	{
 -		if (sp->samples_per_pixel!=3)
 -		{
 -			TIFFErrorExt(tif->tif_clientdata,module,"SamplesPerPixel %d not supported for this compression scheme",sp->samples_per_pixel);
 -			return(0);
 -		}
 -		sp->plane_sample_offset=0;
 -		if (tif->tif_dir.td_planarconfig==PLANARCONFIG_CONTIG)
 -			sp->samples_per_pixel_per_plane=3;
 -		else
 -			sp->samples_per_pixel_per_plane=1;
 -	}
 -	if (sp->strile_length<sp->image_length)
 -	{
 -		if (sp->strile_length%(sp->subsampling_ver*8)!=0)
 -		{
 -			TIFFErrorExt(tif->tif_clientdata,module,"Incompatible vertical subsampling and image strip/tile length");
 -			return(0);
 -		}
 -		sp->restart_interval=((sp->strile_width+sp->subsampling_hor*8-1)/(sp->subsampling_hor*8))*(sp->strile_length/(sp->subsampling_ver*8));
 -	}
 -	if (OJPEGReadHeaderInfoSec(tif)==0)
 -		return(0);
 -	sp->sos_end[0].log=1;
 -	sp->sos_end[0].in_buffer_source=sp->in_buffer_source;
 -	sp->sos_end[0].in_buffer_next_strile=sp->in_buffer_next_strile;
 -	sp->sos_end[0].in_buffer_file_pos=sp->in_buffer_file_pos-sp->in_buffer_togo;
 -	sp->sos_end[0].in_buffer_file_togo=sp->in_buffer_file_togo+sp->in_buffer_togo;
 -	sp->readheader_done=1;
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadSecondarySos(TIFF* tif, tsample_t s)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8 m;
 -	assert(s>0);
 -	assert(s<3);
 -	assert(sp->sos_end[0].log!=0);
 -	assert(sp->sos_end[s].log==0);
 -	sp->plane_sample_offset=s-1;
 -	while(sp->sos_end[sp->plane_sample_offset].log==0)
 -		sp->plane_sample_offset--;
 -	sp->in_buffer_source=sp->sos_end[sp->plane_sample_offset].in_buffer_source;
 -	sp->in_buffer_next_strile=sp->sos_end[sp->plane_sample_offset].in_buffer_next_strile;
 -	sp->in_buffer_file_pos=sp->sos_end[sp->plane_sample_offset].in_buffer_file_pos;  
 -	sp->in_buffer_file_pos_log=0;
 -	sp->in_buffer_file_togo=sp->sos_end[sp->plane_sample_offset].in_buffer_file_togo;
 -	sp->in_buffer_togo=0;
 -	sp->in_buffer_cur=0;
 -	while(sp->plane_sample_offset<s)
 -	{
 -		do
 -		{
 -			if (OJPEGReadByte(sp,&m)==0)
 -				return(0);
 -			if (m==255)
 -			{
 -				do
 -				{
 -					if (OJPEGReadByte(sp,&m)==0)
 -						return(0);
 -					if (m!=255)
 -						break;
 -				} while(1);
 -				if (m==JPEG_MARKER_SOS)
 -					break;
 -			}
 -		} while(1);
 -		sp->plane_sample_offset++;
 -		if (OJPEGReadHeaderInfoSecStreamSos(tif)==0)
 -			return(0);
 -		sp->sos_end[sp->plane_sample_offset].log=1;
 -		sp->sos_end[sp->plane_sample_offset].in_buffer_source=sp->in_buffer_source;
 -		sp->sos_end[sp->plane_sample_offset].in_buffer_next_strile=sp->in_buffer_next_strile;
 -		sp->sos_end[sp->plane_sample_offset].in_buffer_file_pos=sp->in_buffer_file_pos-sp->in_buffer_togo;
 -		sp->sos_end[sp->plane_sample_offset].in_buffer_file_togo=sp->in_buffer_file_togo+sp->in_buffer_togo;
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGWriteHeaderInfo(TIFF* tif)
 -{
 -	static const char module[]="OJPEGWriteHeaderInfo";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8** m;
 -	uint32 n;
 -	assert(sp->libjpeg_session_active==0);
 -	sp->out_state=ososSoi;
 -	sp->restart_index=0;
 -	jpeg_std_error(&(sp->libjpeg_jpeg_error_mgr));
 -	sp->libjpeg_jpeg_error_mgr.output_message=OJPEGLibjpegJpegErrorMgrOutputMessage;
 -	sp->libjpeg_jpeg_error_mgr.error_exit=OJPEGLibjpegJpegErrorMgrErrorExit;
 -	sp->libjpeg_jpeg_decompress_struct.err=&(sp->libjpeg_jpeg_error_mgr);
 -	sp->libjpeg_jpeg_decompress_struct.client_data=(void*)tif;
 -	if (jpeg_create_decompress_encap(sp,&(sp->libjpeg_jpeg_decompress_struct))==0)
 -		return(0);
 -	sp->libjpeg_session_active=1;
 -	sp->libjpeg_jpeg_source_mgr.bytes_in_buffer=0;
 -	sp->libjpeg_jpeg_source_mgr.init_source=OJPEGLibjpegJpegSourceMgrInitSource;
 -	sp->libjpeg_jpeg_source_mgr.fill_input_buffer=OJPEGLibjpegJpegSourceMgrFillInputBuffer;
 -	sp->libjpeg_jpeg_source_mgr.skip_input_data=OJPEGLibjpegJpegSourceMgrSkipInputData;
 -	sp->libjpeg_jpeg_source_mgr.resync_to_restart=OJPEGLibjpegJpegSourceMgrResyncToRestart;
 -	sp->libjpeg_jpeg_source_mgr.term_source=OJPEGLibjpegJpegSourceMgrTermSource;
 -	sp->libjpeg_jpeg_decompress_struct.src=&(sp->libjpeg_jpeg_source_mgr);
 -	if (jpeg_read_header_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),1)==0)
 -		return(0);
 -	if ((sp->subsampling_force_desubsampling_inside_decompression==0) && (sp->samples_per_pixel_per_plane>1))
 -	{
 -		sp->libjpeg_jpeg_decompress_struct.raw_data_out=1;
 -#if JPEG_LIB_VERSION >= 70
 -		sp->libjpeg_jpeg_decompress_struct.do_fancy_upsampling=FALSE;
 -#endif
 -		sp->libjpeg_jpeg_query_style=0;
 -		if (sp->subsampling_convert_log==0)
 -		{
 -			assert(sp->subsampling_convert_ycbcrbuf==0);
 -			assert(sp->subsampling_convert_ycbcrimage==0);
 -			sp->subsampling_convert_ylinelen=((sp->strile_width+sp->subsampling_hor*8-1)/(sp->subsampling_hor*8)*sp->subsampling_hor*8);
 -			sp->subsampling_convert_ylines=sp->subsampling_ver*8;
 -			sp->subsampling_convert_clinelen=sp->subsampling_convert_ylinelen/sp->subsampling_hor;
 -			sp->subsampling_convert_clines=8;
 -			sp->subsampling_convert_ybuflen=sp->subsampling_convert_ylinelen*sp->subsampling_convert_ylines;
 -			sp->subsampling_convert_cbuflen=sp->subsampling_convert_clinelen*sp->subsampling_convert_clines;
 -			sp->subsampling_convert_ycbcrbuflen=sp->subsampling_convert_ybuflen+2*sp->subsampling_convert_cbuflen;
 -			sp->subsampling_convert_ycbcrbuf=_TIFFmalloc(sp->subsampling_convert_ycbcrbuflen);
 -			if (sp->subsampling_convert_ycbcrbuf==0)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
 -				return(0);
 -			}
 -			sp->subsampling_convert_ybuf=sp->subsampling_convert_ycbcrbuf;
 -			sp->subsampling_convert_cbbuf=sp->subsampling_convert_ybuf+sp->subsampling_convert_ybuflen;
 -			sp->subsampling_convert_crbuf=sp->subsampling_convert_cbbuf+sp->subsampling_convert_cbuflen;
 -			sp->subsampling_convert_ycbcrimagelen=3+sp->subsampling_convert_ylines+2*sp->subsampling_convert_clines;
 -			sp->subsampling_convert_ycbcrimage=_TIFFmalloc(sp->subsampling_convert_ycbcrimagelen*sizeof(uint8*));
 -			if (sp->subsampling_convert_ycbcrimage==0)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
 -				return(0);
 -			}
 -			m=sp->subsampling_convert_ycbcrimage;
 -			*m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3);
 -			*m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3+sp->subsampling_convert_ylines);
 -			*m++=(uint8*)(sp->subsampling_convert_ycbcrimage+3+sp->subsampling_convert_ylines+sp->subsampling_convert_clines);
 -			for (n=0; n<sp->subsampling_convert_ylines; n++)
 -				*m++=sp->subsampling_convert_ybuf+n*sp->subsampling_convert_ylinelen;
 -			for (n=0; n<sp->subsampling_convert_clines; n++)
 -				*m++=sp->subsampling_convert_cbbuf+n*sp->subsampling_convert_clinelen;
 -			for (n=0; n<sp->subsampling_convert_clines; n++)
 -				*m++=sp->subsampling_convert_crbuf+n*sp->subsampling_convert_clinelen;
 -			sp->subsampling_convert_clinelenout=((sp->strile_width+sp->subsampling_hor-1)/sp->subsampling_hor);
 -			sp->subsampling_convert_state=0;
 -			sp->bytes_per_line=sp->subsampling_convert_clinelenout*(sp->subsampling_ver*sp->subsampling_hor+2);
 -			sp->lines_per_strile=((sp->strile_length+sp->subsampling_ver-1)/sp->subsampling_ver);
 -			sp->subsampling_convert_log=1;
 -		}
 -	}
 -	else
 -	{
 -		sp->libjpeg_jpeg_decompress_struct.jpeg_color_space=JCS_UNKNOWN;
 -		sp->libjpeg_jpeg_decompress_struct.out_color_space=JCS_UNKNOWN;
 -		sp->libjpeg_jpeg_query_style=1;
 -		sp->bytes_per_line=sp->samples_per_pixel_per_plane*sp->strile_width;
 -		sp->lines_per_strile=sp->strile_length;
 -	}
 -	if (jpeg_start_decompress_encap(sp,&(sp->libjpeg_jpeg_decompress_struct))==0)
 -		return(0);
 -	sp->writeheader_done=1;
 -	return(1);
 -}
 -
 -static void
 -OJPEGLibjpegSessionAbort(TIFF* tif)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	assert(sp->libjpeg_session_active!=0);
 -	jpeg_destroy((jpeg_common_struct*)(&(sp->libjpeg_jpeg_decompress_struct)));
 -	sp->libjpeg_session_active=0;
 -}
 -
 -static int
 -OJPEGReadHeaderInfoSec(TIFF* tif)
 -{
 -	static const char module[]="OJPEGReadHeaderInfoSec";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8 m;
 -	uint16 n;
 -	uint8 o;
 -	if (sp->file_size==0)
 -		sp->file_size=TIFFGetFileSize(tif);
 -	if (sp->jpeg_interchange_format!=0)
 -	{
 -		if (sp->jpeg_interchange_format>=sp->file_size)
 -		{
 -			sp->jpeg_interchange_format=0;
 -			sp->jpeg_interchange_format_length=0;
 -		}
 -		else
 -		{
 -			if ((sp->jpeg_interchange_format_length==0) || (sp->jpeg_interchange_format+sp->jpeg_interchange_format_length>sp->file_size))
 -				sp->jpeg_interchange_format_length=sp->file_size-sp->jpeg_interchange_format;
 -		}
 -	}
 -	sp->in_buffer_source=osibsNotSetYet;
 -	sp->in_buffer_next_strile=0;
 -	sp->in_buffer_strile_count=tif->tif_dir.td_nstrips;   
 -	sp->in_buffer_file_togo=0;
 -	sp->in_buffer_togo=0;
 -	do
 -	{
 -		if (OJPEGReadBytePeek(sp,&m)==0)
 -			return(0);
 -		if (m!=255)
 -			break;
 -		OJPEGReadByteAdvance(sp);
 -		do
 -		{
 -			if (OJPEGReadByte(sp,&m)==0)
 -				return(0);
 -		} while(m==255);
 -		switch(m)
 -		{
 -			case JPEG_MARKER_SOI:
 -				/* this type of marker has no data, and should be skipped */
 -				break;
 -			case JPEG_MARKER_COM:
 -			case JPEG_MARKER_APP0:
 -			case JPEG_MARKER_APP0+1:
 -			case JPEG_MARKER_APP0+2:
 -			case JPEG_MARKER_APP0+3:
 -			case JPEG_MARKER_APP0+4:
 -			case JPEG_MARKER_APP0+5:
 -			case JPEG_MARKER_APP0+6:
 -			case JPEG_MARKER_APP0+7:
 -			case JPEG_MARKER_APP0+8:
 -			case JPEG_MARKER_APP0+9:
 -			case JPEG_MARKER_APP0+10:
 -			case JPEG_MARKER_APP0+11:
 -			case JPEG_MARKER_APP0+12:
 -			case JPEG_MARKER_APP0+13:
 -			case JPEG_MARKER_APP0+14:
 -			case JPEG_MARKER_APP0+15:
 -				/* this type of marker has data, but it has no use to us (and no place here) and should be skipped */
 -				if (OJPEGReadWord(sp,&n)==0)
 -					return(0);
 -				if (n<2)
 -				{
 -					if (sp->subsamplingcorrect==0)
 -						TIFFErrorExt(tif->tif_clientdata,module,"Corrupt JPEG data");
 -					return(0);
 -				}
 -				if (n>2)
 -					OJPEGReadSkip(sp,n-2);
 -				break;
 -			case JPEG_MARKER_DRI:
 -				if (OJPEGReadHeaderInfoSecStreamDri(tif)==0)
 -					return(0);
 -				break;
 -			case JPEG_MARKER_DQT:
 -				if (OJPEGReadHeaderInfoSecStreamDqt(tif)==0)
 -					return(0);
 -				break;
 -			case JPEG_MARKER_DHT:
 -				if (OJPEGReadHeaderInfoSecStreamDht(tif)==0)
 -					return(0);
 -				break;
 -			case JPEG_MARKER_SOF0:
 -			case JPEG_MARKER_SOF1:
 -			case JPEG_MARKER_SOF3:
 -				if (OJPEGReadHeaderInfoSecStreamSof(tif,m)==0)
 -					return(0);
 -				if (sp->subsamplingcorrect!=0)
 -					return(1);
 -				break;
 -			case JPEG_MARKER_SOS:
 -				if (sp->subsamplingcorrect!=0)
 -					return(1);
 -				assert(sp->plane_sample_offset==0);
 -				if (OJPEGReadHeaderInfoSecStreamSos(tif)==0)
 -					return(0);
 -				break;
 -			default:
 -				TIFFErrorExt(tif->tif_clientdata,module,"Unknown marker type %d in JPEG data",m);
 -				return(0);
 -		}
 -	} while(m!=JPEG_MARKER_SOS);
 -	if (sp->subsamplingcorrect)
 -		return(1);
 -	if (sp->sof_log==0)
 -	{
 -		if (OJPEGReadHeaderInfoSecTablesQTable(tif)==0)
 -			return(0);
 -		sp->sof_marker_id=JPEG_MARKER_SOF0;
 -		for (o=0; o<sp->samples_per_pixel; o++)
 -			sp->sof_c[o]=o;
 -		sp->sof_hv[0]=((sp->subsampling_hor<<4)|sp->subsampling_ver);
 -		for (o=1; o<sp->samples_per_pixel; o++)
 -			sp->sof_hv[o]=17;
 -		sp->sof_x=sp->strile_width;
 -		sp->sof_y=sp->strile_length_total;
 -		sp->sof_log=1;
 -		if (OJPEGReadHeaderInfoSecTablesDcTable(tif)==0)
 -			return(0);
 -		if (OJPEGReadHeaderInfoSecTablesAcTable(tif)==0)
 -			return(0);
 -		for (o=1; o<sp->samples_per_pixel; o++)
 -			sp->sos_cs[o]=o;
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadHeaderInfoSecStreamDri(TIFF* tif)
 -{
 -	/* this could easilly cause trouble in some cases... but no such cases have occured sofar */
 -	static const char module[]="OJPEGReadHeaderInfoSecStreamDri";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint16 m;
 -	if (OJPEGReadWord(sp,&m)==0)
 -		return(0);
 -	if (m!=4)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DRI marker in JPEG data");
 -		return(0);
 -	}
 -	if (OJPEGReadWord(sp,&m)==0)
 -		return(0);
 -	sp->restart_interval=m;
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadHeaderInfoSecStreamDqt(TIFF* tif)
 -{
 -	/* this is a table marker, and it is to be saved as a whole for exact pushing on the jpeg stream later on */
 -	static const char module[]="OJPEGReadHeaderInfoSecStreamDqt";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint16 m;
 -	uint32 na;
 -	uint8* nb;
 -	uint8 o;
 -	if (OJPEGReadWord(sp,&m)==0)
 -		return(0);
 -	if (m<=2)
 -	{
 -		if (sp->subsamplingcorrect==0)
 -			TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DQT marker in JPEG data");
 -		return(0);
 -	}
 -	if (sp->subsamplingcorrect!=0)
 -		OJPEGReadSkip(sp,m-2);
 -	else
 -	{
 -		m-=2;
 -		do
 -		{
 -			if (m<65)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DQT marker in JPEG data");
 -				return(0);
 -			}
 -			na=sizeof(uint32)+69;
 -			nb=_TIFFmalloc(na);
 -			if (nb==0)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
 -				return(0);
 -			}
 -			*(uint32*)nb=na;
 -			nb[sizeof(uint32)]=255;
 -			nb[sizeof(uint32)+1]=JPEG_MARKER_DQT;
 -			nb[sizeof(uint32)+2]=0;
 -			nb[sizeof(uint32)+3]=67;
 -			if (OJPEGReadBlock(sp,65,&nb[sizeof(uint32)+4])==0)
 -				return(0);
 -			o=nb[sizeof(uint32)+4]&15;
 -			if (3<o)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DQT marker in JPEG data");
 -				return(0);
 -			}
 -			if (sp->qtable[o]!=0)
 -				_TIFFfree(sp->qtable[o]);
 -			sp->qtable[o]=nb;
 -			m-=65;
 -		} while(m>0);
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadHeaderInfoSecStreamDht(TIFF* tif)
 -{
 -	/* this is a table marker, and it is to be saved as a whole for exact pushing on the jpeg stream later on */
 -	/* TODO: the following assumes there is only one table in this marker... but i'm not quite sure that assumption is guaranteed correct */
 -	static const char module[]="OJPEGReadHeaderInfoSecStreamDht";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint16 m;
 -	uint32 na;
 -	uint8* nb;
 -	uint8 o;
 -	if (OJPEGReadWord(sp,&m)==0)
 -		return(0);
 -	if (m<=2)
 -	{
 -		if (sp->subsamplingcorrect==0)
 -			TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DHT marker in JPEG data");
 -		return(0);
 -	}
 -	if (sp->subsamplingcorrect!=0)
 -	{
 -		OJPEGReadSkip(sp,m-2);
 -	}
 -	else
 -	{
 -		na=sizeof(uint32)+2+m;
 -		nb=_TIFFmalloc(na);
 -		if (nb==0)
 -		{
 -			TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
 -			return(0);
 -		}
 -		*(uint32*)nb=na;
 -		nb[sizeof(uint32)]=255;
 -		nb[sizeof(uint32)+1]=JPEG_MARKER_DHT;
 -		nb[sizeof(uint32)+2]=(m>>8);
 -		nb[sizeof(uint32)+3]=(m&255);
 -		if (OJPEGReadBlock(sp,m-2,&nb[sizeof(uint32)+4])==0)
 -			return(0);
 -		o=nb[sizeof(uint32)+4];
 -		if ((o&240)==0)
 -		{
 -			if (3<o)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DHT marker in JPEG data");
 -				return(0);
 -			}
 -			if (sp->dctable[o]!=0)
 -				_TIFFfree(sp->dctable[o]);
 -			sp->dctable[o]=nb;
 -		}
 -		else
 -		{
 -			if ((o&240)!=16)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DHT marker in JPEG data");
 -				return(0);
 -			}
 -			o&=15;
 -			if (3<o)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Corrupt DHT marker in JPEG data");
 -				return(0);
 -			}
 -			if (sp->actable[o]!=0)
 -				_TIFFfree(sp->actable[o]);
 -			sp->actable[o]=nb;
 -		}
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadHeaderInfoSecStreamSof(TIFF* tif, uint8 marker_id)
 -{
 -	/* this marker needs to be checked, and part of its data needs to be saved for regeneration later on */
 -	static const char module[]="OJPEGReadHeaderInfoSecStreamSof";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint16 m;
 -	uint16 n;
 -	uint8 o;
 -	uint16 p;
 -	uint16 q;
 -	if (sp->sof_log!=0)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"Corrupt JPEG data");
 -		return(0);
 -	}
 -	if (sp->subsamplingcorrect==0)
 -		sp->sof_marker_id=marker_id;
 -	/* Lf: data length */
 -	if (OJPEGReadWord(sp,&m)==0)
 -		return(0);
 -	if (m<11)
 -	{
 -		if (sp->subsamplingcorrect==0)
 -			TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOF marker in JPEG data");
 -		return(0);
 -	}
 -	m-=8;
 -	if (m%3!=0)
 -	{
 -		if (sp->subsamplingcorrect==0)
 -			TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOF marker in JPEG data");
 -		return(0);
 -	}
 -	n=m/3;
 -	if (sp->subsamplingcorrect==0)
 -	{
 -		if (n!=sp->samples_per_pixel)
 -		{
 -			TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected number of samples");
 -			return(0);
 -		}
 -	}
 -	/* P: Sample precision */
 -	if (OJPEGReadByte(sp,&o)==0)
 -		return(0);
 -	if (o!=8)
 -	{
 -		if (sp->subsamplingcorrect==0)
 -			TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected number of bits per sample");
 -		return(0);
 -	}
 -	/* Y: Number of lines, X: Number of samples per line */
 -	if (sp->subsamplingcorrect)
 -		OJPEGReadSkip(sp,4);
 -	else
 -	{
 -		/* Y: Number of lines */
 -		if (OJPEGReadWord(sp,&p)==0)
 -			return(0);
 -		if ((p<sp->image_length) && (p<sp->strile_length_total))
 -		{
 -			TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected height");
 -			return(0);
 -		}
 -		sp->sof_y=p;
 -		/* X: Number of samples per line */
 -		if (OJPEGReadWord(sp,&p)==0)
 -			return(0);
 -		if ((p<sp->image_width) && (p<sp->strile_width))
 -		{
 -			TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected width");
 -			return(0);
 -		}
 -		if ((uint32)p>sp->strile_width)
 -		{
 -			TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data image width exceeds expected image width");
 -			return(0);
 -		}
 -		sp->sof_x=p;
 -	}
 -	/* Nf: Number of image components in frame */
 -	if (OJPEGReadByte(sp,&o)==0)
 -		return(0);
 -	if (o!=n)
 -	{
 -		if (sp->subsamplingcorrect==0)
 -			TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOF marker in JPEG data");
 -		return(0);
 -	}
 -	/* per component stuff */
 -	/* TODO: double-check that flow implies that n cannot be as big as to make us overflow sof_c, sof_hv and sof_tq arrays */
 -	for (q=0; q<n; q++)
 -	{
 -		/* C: Component identifier */
 -		if (OJPEGReadByte(sp,&o)==0)
 -			return(0);
 -		if (sp->subsamplingcorrect==0)
 -			sp->sof_c[q]=o;
 -		/* H: Horizontal sampling factor, and V: Vertical sampling factor */
 -		if (OJPEGReadByte(sp,&o)==0)
 -			return(0);
 -		if (sp->subsamplingcorrect!=0)
 -		{
 -			if (q==0)
 -			{
 -				sp->subsampling_hor=(o>>4);
 -				sp->subsampling_ver=(o&15);
 -				if (((sp->subsampling_hor!=1) && (sp->subsampling_hor!=2) && (sp->subsampling_hor!=4)) ||
 -					((sp->subsampling_ver!=1) && (sp->subsampling_ver!=2) && (sp->subsampling_ver!=4)))
 -					sp->subsampling_force_desubsampling_inside_decompression=1;
 -			}
 -			else
 -			{
 -				if (o!=17)
 -					sp->subsampling_force_desubsampling_inside_decompression=1;
 -			}
 -		}
 -		else
 -		{
 -			sp->sof_hv[q]=o;
 -			if (sp->subsampling_force_desubsampling_inside_decompression==0)
 -			{
 -				if (q==0)
 -				{
 -					if (o!=((sp->subsampling_hor<<4)|sp->subsampling_ver))
 -					{
 -						TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected subsampling values");
 -						return(0);
 -					}
 -				}
 -				else
 -				{
 -					if (o!=17)
 -					{
 -						TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected subsampling values");
 -						return(0);
 -					}
 -				}
 -			}
 -		}
 -		/* Tq: Quantization table destination selector */
 -		if (OJPEGReadByte(sp,&o)==0)
 -			return(0);
 -		if (sp->subsamplingcorrect==0)
 -			sp->sof_tq[q]=o;
 -	}
 -	if (sp->subsamplingcorrect==0)
 -		sp->sof_log=1;
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadHeaderInfoSecStreamSos(TIFF* tif)
 -{
 -	/* this marker needs to be checked, and part of its data needs to be saved for regeneration later on */
 -	static const char module[]="OJPEGReadHeaderInfoSecStreamSos";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint16 m;
 -	uint8 n;
 -	uint8 o;
 -	assert(sp->subsamplingcorrect==0);
 -	if (sp->sof_log==0)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOS marker in JPEG data");
 -		return(0);
 -	}
 -	/* Ls */
 -	if (OJPEGReadWord(sp,&m)==0)
 -		return(0);
 -	if (m!=6+sp->samples_per_pixel_per_plane*2)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOS marker in JPEG data");
 -		return(0);
 -	}
 -	/* Ns */
 -	if (OJPEGReadByte(sp,&n)==0)
 -		return(0);
 -	if (n!=sp->samples_per_pixel_per_plane)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"Corrupt SOS marker in JPEG data");
 -		return(0);
 -	}
 -	/* Cs, Td, and Ta */
 -	for (o=0; o<sp->samples_per_pixel_per_plane; o++)
 -	{
 -		/* Cs */
 -		if (OJPEGReadByte(sp,&n)==0)
 -			return(0);
 -		sp->sos_cs[sp->plane_sample_offset+o]=n;
 -		/* Td and Ta */
 -		if (OJPEGReadByte(sp,&n)==0)
 -			return(0);
 -		sp->sos_tda[sp->plane_sample_offset+o]=n;
 -	}
 -	/* skip Ss, Se, Ah, en Al -> no check, as per Tom Lane recommendation, as per LibJpeg source */
 -	OJPEGReadSkip(sp,3);
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadHeaderInfoSecTablesQTable(TIFF* tif)
 -{
 -	static const char module[]="OJPEGReadHeaderInfoSecTablesQTable";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8 m;
 -	uint8 n;
 -	uint32 oa;
 -	uint8* ob;
 -	uint32 p;
 -	if (sp->qtable_offset[0]==0)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"Missing JPEG tables");
 -		return(0);
 -	}
 -	sp->in_buffer_file_pos_log=0;
 -	for (m=0; m<sp->samples_per_pixel; m++)
 -	{
 -		if ((sp->qtable_offset[m]!=0) && ((m==0) || (sp->qtable_offset[m]!=sp->qtable_offset[m-1])))
 -		{
 -			for (n=0; n<m-1; n++)
 -			{
 -				if (sp->qtable_offset[m]==sp->qtable_offset[n])
 -				{
 -					TIFFErrorExt(tif->tif_clientdata,module,"Corrupt JpegQTables tag value");
 -					return(0);
 -				}
 -			}
 -			oa=sizeof(uint32)+69;
 -			ob=_TIFFmalloc(oa);
 -			if (ob==0)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
 -				return(0);
 -			}
 -			*(uint32*)ob=oa;
 -			ob[sizeof(uint32)]=255;
 -			ob[sizeof(uint32)+1]=JPEG_MARKER_DQT;
 -			ob[sizeof(uint32)+2]=0;
 -			ob[sizeof(uint32)+3]=67;
 -			ob[sizeof(uint32)+4]=m;
 -			TIFFSeekFile(tif,sp->qtable_offset[m],SEEK_SET);
 -			p=TIFFReadFile(tif,&ob[sizeof(uint32)+5],64);
 -			if (p!=64)
 -				return(0);
 -			sp->qtable[m]=ob;
 -			sp->sof_tq[m]=m;
 -		}
 -		else
 -			sp->sof_tq[m]=sp->sof_tq[m-1];
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadHeaderInfoSecTablesDcTable(TIFF* tif)
 -{
 -	static const char module[]="OJPEGReadHeaderInfoSecTablesDcTable";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8 m;
 -	uint8 n;
 -	uint8 o[16];
 -	uint32 p;
 -	uint32 q;
 -	uint32 ra;
 -	uint8* rb;
 -	if (sp->dctable_offset[0]==0)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"Missing JPEG tables");
 -		return(0);
 -	}
 -	sp->in_buffer_file_pos_log=0;
 -	for (m=0; m<sp->samples_per_pixel; m++)
 -	{
 -		if ((sp->dctable_offset[m]!=0) && ((m==0) || (sp->dctable_offset[m]!=sp->dctable_offset[m-1])))
 -		{
 -			for (n=0; n<m-1; n++)
 -			{
 -				if (sp->dctable_offset[m]==sp->dctable_offset[n])
 -				{
 -					TIFFErrorExt(tif->tif_clientdata,module,"Corrupt JpegDcTables tag value");
 -					return(0);
 -				}
 -			}
 -			TIFFSeekFile(tif,sp->dctable_offset[m],SEEK_SET);
 -			p=TIFFReadFile(tif,o,16);
 -			if (p!=16)
 -				return(0);
 -			q=0;
 -			for (n=0; n<16; n++)
 -				q+=o[n];
 -			ra=sizeof(uint32)+21+q;
 -			rb=_TIFFmalloc(ra);
 -			if (rb==0)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
 -				return(0);
 -			}
 -			*(uint32*)rb=ra;
 -			rb[sizeof(uint32)]=255;
 -			rb[sizeof(uint32)+1]=JPEG_MARKER_DHT;
 -			rb[sizeof(uint32)+2]=((19+q)>>8);
 -			rb[sizeof(uint32)+3]=((19+q)&255);
 -			rb[sizeof(uint32)+4]=m;
 -			for (n=0; n<16; n++)
 -				rb[sizeof(uint32)+5+n]=o[n];
 -			p=TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q);
 -			if (p!=q)
 -				return(0);
 -			sp->dctable[m]=rb;
 -			sp->sos_tda[m]=(m<<4);
 -		}
 -		else
 -			sp->sos_tda[m]=sp->sos_tda[m-1];
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadHeaderInfoSecTablesAcTable(TIFF* tif)
 -{
 -	static const char module[]="OJPEGReadHeaderInfoSecTablesAcTable";
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8 m;
 -	uint8 n;
 -	uint8 o[16];
 -	uint32 p;
 -	uint32 q;
 -	uint32 ra;
 -	uint8* rb;
 -	if (sp->actable_offset[0]==0)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,module,"Missing JPEG tables");
 -		return(0);
 -	}
 -	sp->in_buffer_file_pos_log=0;
 -	for (m=0; m<sp->samples_per_pixel; m++)
 -	{
 -		if ((sp->actable_offset[m]!=0) && ((m==0) || (sp->actable_offset[m]!=sp->actable_offset[m-1])))
 -		{
 -			for (n=0; n<m-1; n++)
 -			{
 -				if (sp->actable_offset[m]==sp->actable_offset[n])
 -				{
 -					TIFFErrorExt(tif->tif_clientdata,module,"Corrupt JpegAcTables tag value");
 -					return(0);
 -				}
 -			}
 -			TIFFSeekFile(tif,sp->actable_offset[m],SEEK_SET);
 -			p=TIFFReadFile(tif,o,16);
 -			if (p!=16)
 -				return(0);
 -			q=0;
 -			for (n=0; n<16; n++)
 -				q+=o[n];
 -			ra=sizeof(uint32)+21+q;
 -			rb=_TIFFmalloc(ra);
 -			if (rb==0)
 -			{
 -				TIFFErrorExt(tif->tif_clientdata,module,"Out of memory");
 -				return(0);
 -			}
 -			*(uint32*)rb=ra;
 -			rb[sizeof(uint32)]=255;
 -			rb[sizeof(uint32)+1]=JPEG_MARKER_DHT;
 -			rb[sizeof(uint32)+2]=((19+q)>>8);
 -			rb[sizeof(uint32)+3]=((19+q)&255);
 -			rb[sizeof(uint32)+4]=(16|m);
 -			for (n=0; n<16; n++)
 -				rb[sizeof(uint32)+5+n]=o[n];
 -			p=TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q);
 -			if (p!=q)
 -				return(0);
 -			sp->actable[m]=rb;
 -			sp->sos_tda[m]=(sp->sos_tda[m]|m);
 -		}
 -		else
 -			sp->sos_tda[m]=(sp->sos_tda[m]|(sp->sos_tda[m-1]&15));
 -	}
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadBufferFill(OJPEGState* sp)
 -{
 -	uint16 m;
 -	tsize_t n;
 -	/* TODO: double-check: when subsamplingcorrect is set, no call to TIFFErrorExt or TIFFWarningExt should be made
 -	 * in any other case, seek or read errors should be passed through */
 -	do
 -	{
 -		if (sp->in_buffer_file_togo!=0)
 -		{
 -			if (sp->in_buffer_file_pos_log==0)
 -			{
 -				TIFFSeekFile(sp->tif,sp->in_buffer_file_pos,SEEK_SET);
 -				sp->in_buffer_file_pos_log=1;
 -			}
 -			m=OJPEG_BUFFER;
 -			if (m>sp->in_buffer_file_togo)
 -				m=(uint16)sp->in_buffer_file_togo;
 -			n=TIFFReadFile(sp->tif,sp->in_buffer,(tsize_t)m);
 -			if (n==0)
 -				return(0);
 -			assert(n>0);
 -			assert(n<=OJPEG_BUFFER);
 -			assert(n<65536);
 -			assert((uint16)n<=sp->in_buffer_file_togo);
 -			m=(uint16)n;
 -			sp->in_buffer_togo=m;
 -			sp->in_buffer_cur=sp->in_buffer;
 -			sp->in_buffer_file_togo-=m;
 -			sp->in_buffer_file_pos+=m;
 -			break;
 -		}
 -		sp->in_buffer_file_pos_log=0;
 -		switch(sp->in_buffer_source)
 -		{
 -			case osibsNotSetYet:
 -				if (sp->jpeg_interchange_format!=0)
 -				{
 -					sp->in_buffer_file_pos=sp->jpeg_interchange_format;
 -					sp->in_buffer_file_togo=sp->jpeg_interchange_format_length;
 -				}
 -				sp->in_buffer_source=osibsJpegInterchangeFormat;
 -				break;
 -			case osibsJpegInterchangeFormat:
 -				sp->in_buffer_source=osibsStrile;
 -			case osibsStrile:
 -				if (sp->in_buffer_next_strile==sp->in_buffer_strile_count)  
 -					sp->in_buffer_source=osibsEof;
 -				else
 -				{
 -					if (sp->tif->tif_dir.td_stripoffset == 0) {
 -						TIFFErrorExt(sp->tif->tif_clientdata,sp->tif->tif_name,"Strip offsets are missing");
 -						return(0);
 -					}
 -					sp->in_buffer_file_pos=sp->tif->tif_dir.td_stripoffset[sp->in_buffer_next_strile];  
 -					if (sp->in_buffer_file_pos!=0)
 -					{
 -						if (sp->in_buffer_file_pos>=sp->file_size)
 -							sp->in_buffer_file_pos=0;
 -						else if (sp->tif->tif_dir.td_stripbytecount==NULL)
 -							sp->in_buffer_file_togo=sp->file_size-sp->in_buffer_file_pos;
 -						else
 -						{
 -							if (sp->tif->tif_dir.td_stripbytecount == 0) {
 -								TIFFErrorExt(sp->tif->tif_clientdata,sp->tif->tif_name,"Strip byte counts are missing");
 -								return(0);
 -							}
 -							sp->in_buffer_file_togo=sp->tif->tif_dir.td_stripbytecount[sp->in_buffer_next_strile];  
 -							if (sp->in_buffer_file_togo==0)
 -								sp->in_buffer_file_pos=0;
 -							else if (sp->in_buffer_file_pos+sp->in_buffer_file_togo>sp->file_size)
 -								sp->in_buffer_file_togo=sp->file_size-sp->in_buffer_file_pos;
 -						}
 -					}
 -					sp->in_buffer_next_strile++;
 -				}
 -				break;
 -			default:
 -				return(0);
 -		}
 -	} while (1);
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadByte(OJPEGState* sp, uint8* byte)
 -{
 -	if (sp->in_buffer_togo==0)
 -	{
 -		if (OJPEGReadBufferFill(sp)==0)
 -			return(0);
 -		assert(sp->in_buffer_togo>0);
 -	}
 -	*byte=*(sp->in_buffer_cur);
 -	sp->in_buffer_cur++;
 -	sp->in_buffer_togo--;
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadBytePeek(OJPEGState* sp, uint8* byte)
 -{
 -	if (sp->in_buffer_togo==0)
 -	{
 -		if (OJPEGReadBufferFill(sp)==0)
 -			return(0);
 -		assert(sp->in_buffer_togo>0);
 -	}
 -	*byte=*(sp->in_buffer_cur);
 -	return(1);
 -}
 -
 -static void
 -OJPEGReadByteAdvance(OJPEGState* sp)
 -{
 -	assert(sp->in_buffer_togo>0);
 -	sp->in_buffer_cur++;
 -	sp->in_buffer_togo--;
 -}
 -
 -static int
 -OJPEGReadWord(OJPEGState* sp, uint16* word)
 -{
 -	uint8 m;
 -	if (OJPEGReadByte(sp,&m)==0)
 -		return(0);
 -	*word=(m<<8);
 -	if (OJPEGReadByte(sp,&m)==0)
 -		return(0);
 -	*word|=m;
 -	return(1);
 -}
 -
 -static int
 -OJPEGReadBlock(OJPEGState* sp, uint16 len, void* mem)
 -{
 -	uint16 mlen;
 -	uint8* mmem;
 -	uint16 n;
 -	assert(len>0);
 -	mlen=len;
 -	mmem=mem;
 -	do
 -	{
 -		if (sp->in_buffer_togo==0)
 -		{
 -			if (OJPEGReadBufferFill(sp)==0)
 -				return(0);
 -			assert(sp->in_buffer_togo>0);
 -		}
 -		n=mlen;
 -		if (n>sp->in_buffer_togo)
 -			n=sp->in_buffer_togo;
 -		_TIFFmemcpy(mmem,sp->in_buffer_cur,n);
 -		sp->in_buffer_cur+=n;
 -		sp->in_buffer_togo-=n;
 -		mlen-=n;
 -		mmem+=n;
 -	} while(mlen>0);
 -	return(1);
 -}
 -
 -static void
 -OJPEGReadSkip(OJPEGState* sp, uint16 len)
 -{
 -	uint16 m;
 -	uint16 n;
 -	m=len;
 -	n=m;
 -	if (n>sp->in_buffer_togo)
 -		n=sp->in_buffer_togo;
 -	sp->in_buffer_cur+=n;
 -	sp->in_buffer_togo-=n;
 -	m-=n;
 -	if (m>0)
 -	{
 -		assert(sp->in_buffer_togo==0);
 -		n=m;
 -		if (n>sp->in_buffer_file_togo)
 -			n=sp->in_buffer_file_togo;
 -		sp->in_buffer_file_pos+=n;
 -		sp->in_buffer_file_togo-=n;
 -		sp->in_buffer_file_pos_log=0;
 -		/* we don't skip past jpeginterchangeformat/strile block...
 -		 * if that is asked from us, we're dealing with totally bazurk
 -		 * data anyway, and we've not seen this happening on any
 -		 * testfile, so we might as well likely cause some other
 -		 * meaningless error to be passed at some later time
 -		 */
 -	}
 -}
 -
 -static int
 -OJPEGWriteStream(TIFF* tif, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	*len=0;
 -	do
 -	{
 -		assert(sp->out_state<=ososEoi);
 -		switch(sp->out_state)
 -		{
 -			case ososSoi:
 -				OJPEGWriteStreamSoi(tif,mem,len);
 -				break;
 -			case ososQTable0:
 -				OJPEGWriteStreamQTable(tif,0,mem,len);
 -				break;
 -			case ososQTable1:
 -				OJPEGWriteStreamQTable(tif,1,mem,len);
 -				break;
 -			case ososQTable2:
 -				OJPEGWriteStreamQTable(tif,2,mem,len);
 -				break;
 -			case ososQTable3:
 -				OJPEGWriteStreamQTable(tif,3,mem,len);
 -				break;
 -			case ososDcTable0:
 -				OJPEGWriteStreamDcTable(tif,0,mem,len);
 -				break;
 -			case ososDcTable1:
 -				OJPEGWriteStreamDcTable(tif,1,mem,len);
 -				break;
 -			case ososDcTable2:
 -				OJPEGWriteStreamDcTable(tif,2,mem,len);
 -				break;
 -			case ososDcTable3:
 -				OJPEGWriteStreamDcTable(tif,3,mem,len);
 -				break;
 -			case ososAcTable0:
 -				OJPEGWriteStreamAcTable(tif,0,mem,len);
 -				break;
 -			case ososAcTable1:
 -				OJPEGWriteStreamAcTable(tif,1,mem,len);
 -				break;
 -			case ososAcTable2:
 -				OJPEGWriteStreamAcTable(tif,2,mem,len);
 -				break;
 -			case ososAcTable3:
 -				OJPEGWriteStreamAcTable(tif,3,mem,len);
 -				break;
 -			case ososDri:
 -				OJPEGWriteStreamDri(tif,mem,len);
 -				break;
 -			case ososSof:
 -				OJPEGWriteStreamSof(tif,mem,len);
 -				break;
 -			case ososSos:
 -				OJPEGWriteStreamSos(tif,mem,len);
 -				break;
 -			case ososCompressed:
 -				if (OJPEGWriteStreamCompressed(tif,mem,len)==0)
 -					return(0);
 -				break;
 -			case ososRst:
 -				OJPEGWriteStreamRst(tif,mem,len);
 -				break;
 -			case ososEoi:
 -				OJPEGWriteStreamEoi(tif,mem,len);
 -				break;
 -		}
 -	} while (*len==0);
 -	return(1);
 -}
 -
 -static void
 -OJPEGWriteStreamSoi(TIFF* tif, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	assert(OJPEG_BUFFER>=2);
 -	sp->out_buffer[0]=255;
 -	sp->out_buffer[1]=JPEG_MARKER_SOI;
 -	*len=2;
 -	*mem=(void*)sp->out_buffer;
 -	sp->out_state++;
 -}
 -
 -static void
 -OJPEGWriteStreamQTable(TIFF* tif, uint8 table_index, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	if (sp->qtable[table_index]!=0)
 -	{
 -		*mem=(void*)(sp->qtable[table_index]+sizeof(uint32));
 -		*len=*((uint32*)sp->qtable[table_index])-sizeof(uint32);
 -	}
 -	sp->out_state++;
 -}
 -
 -static void
 -OJPEGWriteStreamDcTable(TIFF* tif, uint8 table_index, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	if (sp->dctable[table_index]!=0)
 -	{
 -		*mem=(void*)(sp->dctable[table_index]+sizeof(uint32));
 -		*len=*((uint32*)sp->dctable[table_index])-sizeof(uint32);
 -	}
 -	sp->out_state++;
 -}
 -
 -static void
 -OJPEGWriteStreamAcTable(TIFF* tif, uint8 table_index, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	if (sp->actable[table_index]!=0)
 -	{
 -		*mem=(void*)(sp->actable[table_index]+sizeof(uint32));
 -		*len=*((uint32*)sp->actable[table_index])-sizeof(uint32);
 -	}
 -	sp->out_state++;
 -}
 -
 -static void
 -OJPEGWriteStreamDri(TIFF* tif, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	assert(OJPEG_BUFFER>=6);
 -	if (sp->restart_interval!=0)
 -	{
 -		sp->out_buffer[0]=255;
 -		sp->out_buffer[1]=JPEG_MARKER_DRI;
 -		sp->out_buffer[2]=0;
 -		sp->out_buffer[3]=4;
 -		sp->out_buffer[4]=(sp->restart_interval>>8);
 -		sp->out_buffer[5]=(sp->restart_interval&255);
 -		*len=6;
 -		*mem=(void*)sp->out_buffer;
 -	}
 -	sp->out_state++;
 -}
 -
 -static void
 -OJPEGWriteStreamSof(TIFF* tif, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8 m;
 -	assert(OJPEG_BUFFER>=2+8+sp->samples_per_pixel_per_plane*3);
 -	assert(255>=8+sp->samples_per_pixel_per_plane*3);
 -	sp->out_buffer[0]=255;
 -	sp->out_buffer[1]=sp->sof_marker_id;
 -	/* Lf */
 -	sp->out_buffer[2]=0;
 -	sp->out_buffer[3]=8+sp->samples_per_pixel_per_plane*3;
 -	/* P */
 -	sp->out_buffer[4]=8;
 -	/* Y */
 -	sp->out_buffer[5]=(sp->sof_y>>8);
 -	sp->out_buffer[6]=(sp->sof_y&255);
 -	/* X */
 -	sp->out_buffer[7]=(sp->sof_x>>8);
 -	sp->out_buffer[8]=(sp->sof_x&255);
 -	/* Nf */
 -	sp->out_buffer[9]=sp->samples_per_pixel_per_plane;
 -	for (m=0; m<sp->samples_per_pixel_per_plane; m++)
 -	{
 -		/* C */
 -		sp->out_buffer[10+m*3]=sp->sof_c[sp->plane_sample_offset+m];
 -		/* H and V */
 -		sp->out_buffer[10+m*3+1]=sp->sof_hv[sp->plane_sample_offset+m];
 -		/* Tq */
 -		sp->out_buffer[10+m*3+2]=sp->sof_tq[sp->plane_sample_offset+m];
 -	}
 -	*len=10+sp->samples_per_pixel_per_plane*3;
 -	*mem=(void*)sp->out_buffer;
 -	sp->out_state++;
 -}
 -
 -static void
 -OJPEGWriteStreamSos(TIFF* tif, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	uint8 m;
 -	assert(OJPEG_BUFFER>=2+6+sp->samples_per_pixel_per_plane*2);
 -	assert(255>=6+sp->samples_per_pixel_per_plane*2);
 -	sp->out_buffer[0]=255;
 -	sp->out_buffer[1]=JPEG_MARKER_SOS;
 -	/* Ls */
 -	sp->out_buffer[2]=0;
 -	sp->out_buffer[3]=6+sp->samples_per_pixel_per_plane*2;
 -	/* Ns */
 -	sp->out_buffer[4]=sp->samples_per_pixel_per_plane;
 -	for (m=0; m<sp->samples_per_pixel_per_plane; m++)
 -	{
 -		/* Cs */
 -		sp->out_buffer[5+m*2]=sp->sos_cs[sp->plane_sample_offset+m];
 -		/* Td and Ta */
 -		sp->out_buffer[5+m*2+1]=sp->sos_tda[sp->plane_sample_offset+m];
 -	}
 -	/* Ss */
 -	sp->out_buffer[5+sp->samples_per_pixel_per_plane*2]=0;
 -	/* Se */
 -	sp->out_buffer[5+sp->samples_per_pixel_per_plane*2+1]=63;
 -	/* Ah and Al */
 -	sp->out_buffer[5+sp->samples_per_pixel_per_plane*2+2]=0;
 -	*len=8+sp->samples_per_pixel_per_plane*2;
 -	*mem=(void*)sp->out_buffer;
 -	sp->out_state++;
 -}
 -
 -static int
 -OJPEGWriteStreamCompressed(TIFF* tif, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	if (sp->in_buffer_togo==0)
 -	{
 -		if (OJPEGReadBufferFill(sp)==0)
 -			return(0);
 -		assert(sp->in_buffer_togo>0);
 -	}
 -	*len=sp->in_buffer_togo;
 -	*mem=(void*)sp->in_buffer_cur;
 -	sp->in_buffer_togo=0;
 -	if (sp->in_buffer_file_togo==0)
 -	{
 -		switch(sp->in_buffer_source)
 -		{
 -			case osibsStrile:
 -				if (sp->in_buffer_next_strile<sp->in_buffer_strile_count)  
 -					sp->out_state=ososRst;
 -				else
 -					sp->out_state=ososEoi;
 -				break;
 -			case osibsEof:
 -				sp->out_state=ososEoi;
 -				break;
 -			default:
 -				break;
 -		}
 -	}
 -	return(1);
 -}
 -
 -static void
 -OJPEGWriteStreamRst(TIFF* tif, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	assert(OJPEG_BUFFER>=2);
 -	sp->out_buffer[0]=255;
 -	sp->out_buffer[1]=JPEG_MARKER_RST0+sp->restart_index;
 -	sp->restart_index++;
 -	if (sp->restart_index==8)
 -		sp->restart_index=0;
 -	*len=2;
 -	*mem=(void*)sp->out_buffer;
 -	sp->out_state=ososCompressed;
 -}
 -
 -static void
 -OJPEGWriteStreamEoi(TIFF* tif, void** mem, uint32* len)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	assert(OJPEG_BUFFER>=2);
 -	sp->out_buffer[0]=255;
 -	sp->out_buffer[1]=JPEG_MARKER_EOI;
 -	*len=2;
 -	*mem=(void*)sp->out_buffer;
 -}
 -
 -#ifndef LIBJPEG_ENCAP_EXTERNAL
 -static int
 -jpeg_create_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo)
 -{
 -	return(SETJMP(sp->exit_jmpbuf)?0:(jpeg_create_decompress(cinfo),1));
 -}
 -#endif
 -
 -#ifndef LIBJPEG_ENCAP_EXTERNAL
 -static int
 -jpeg_read_header_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, uint8 require_image)
 -{
 -	return(SETJMP(sp->exit_jmpbuf)?0:(jpeg_read_header(cinfo,require_image),1));
 -}
 -#endif
 -
 -#ifndef LIBJPEG_ENCAP_EXTERNAL
 -static int
 -jpeg_start_decompress_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo)
 -{
 -	return(SETJMP(sp->exit_jmpbuf)?0:(jpeg_start_decompress(cinfo),1));
 -}
 -#endif
 -
 -#ifndef LIBJPEG_ENCAP_EXTERNAL
 -static int
 -jpeg_read_scanlines_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* scanlines, uint32 max_lines)
 -{
 -	return(SETJMP(sp->exit_jmpbuf)?0:(jpeg_read_scanlines(cinfo,scanlines,max_lines),1));
 -}
 -#endif
 -
 -#ifndef LIBJPEG_ENCAP_EXTERNAL
 -static int
 -jpeg_read_raw_data_encap(OJPEGState* sp, jpeg_decompress_struct* cinfo, void* data, uint32 max_lines)
 -{
 -	return(SETJMP(sp->exit_jmpbuf)?0:(jpeg_read_raw_data(cinfo,data,max_lines),1));
 -}
 -#endif
 -
 -#ifndef LIBJPEG_ENCAP_EXTERNAL
 -static void
 -jpeg_encap_unwind(TIFF* tif)
 -{
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	LONGJMP(sp->exit_jmpbuf,1);
 -}
 -#endif
 -
 -static void
 -OJPEGLibjpegJpegErrorMgrOutputMessage(jpeg_common_struct* cinfo)
 -{
 -	char buffer[JMSG_LENGTH_MAX];
 -	(*cinfo->err->format_message)(cinfo,buffer);
 -	TIFFWarningExt(((TIFF*)(cinfo->client_data))->tif_clientdata,"LibJpeg", "%s", buffer);
 -}
 -
 -static void
 -OJPEGLibjpegJpegErrorMgrErrorExit(jpeg_common_struct* cinfo)
 -{
 -	char buffer[JMSG_LENGTH_MAX];
 -	(*cinfo->err->format_message)(cinfo,buffer);
 -	TIFFErrorExt(((TIFF*)(cinfo->client_data))->tif_clientdata,"LibJpeg", "%s", buffer);
 -	jpeg_encap_unwind((TIFF*)(cinfo->client_data));
 -}
 -
 -static void
 -OJPEGLibjpegJpegSourceMgrInitSource(jpeg_decompress_struct* cinfo)
 -{
 -	(void)cinfo;
 -}
 -
 -static boolean
 -OJPEGLibjpegJpegSourceMgrFillInputBuffer(jpeg_decompress_struct* cinfo)
 -{
 -	TIFF* tif=(TIFF*)cinfo->client_data;
 -	OJPEGState* sp=(OJPEGState*)tif->tif_data;
 -	void* mem=0;
 -	uint32 len=0;
 -	if (OJPEGWriteStream(tif,&mem,&len)==0)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Premature end of JPEG data");
 -		jpeg_encap_unwind(tif);
 -	}
 -	sp->libjpeg_jpeg_source_mgr.bytes_in_buffer=len;
 -	sp->libjpeg_jpeg_source_mgr.next_input_byte=mem;
 -	return(1);
 -}
 -
 -static void
 -OJPEGLibjpegJpegSourceMgrSkipInputData(jpeg_decompress_struct* cinfo, long num_bytes)
 -{
 -	TIFF* tif=(TIFF*)cinfo->client_data;
 -	(void)num_bytes;
 -	TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Unexpected error");
 -	jpeg_encap_unwind(tif);
 -}
 -
 -static boolean
 -OJPEGLibjpegJpegSourceMgrResyncToRestart(jpeg_decompress_struct* cinfo, int desired)
 -{
 -	TIFF* tif=(TIFF*)cinfo->client_data;
 -	(void)desired;
 -	TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Unexpected error");
 -	jpeg_encap_unwind(tif);
 -	return(0);
 -}
 -
 -static void
 -OJPEGLibjpegJpegSourceMgrTermSource(jpeg_decompress_struct* cinfo)
 -{
 -	(void)cinfo;
 -}
 -
 -#endif
 -
 -
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_open.c b/plugins/FreeImage/Source/LibTIFF/tif_open.c deleted file mode 100644 index c2a0412e90..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_open.c +++ /dev/null @@ -1,695 +0,0 @@ -/* $Id: tif_open.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - */
 -#include "tiffiop.h"
 -
 -static const long typemask[13] = {
 -	(long)0L,		/* TIFF_NOTYPE */
 -	(long)0x000000ffL,	/* TIFF_BYTE */
 -	(long)0xffffffffL,	/* TIFF_ASCII */
 -	(long)0x0000ffffL,	/* TIFF_SHORT */
 -	(long)0xffffffffL,	/* TIFF_LONG */
 -	(long)0xffffffffL,	/* TIFF_RATIONAL */
 -	(long)0x000000ffL,	/* TIFF_SBYTE */
 -	(long)0x000000ffL,	/* TIFF_UNDEFINED */
 -	(long)0x0000ffffL,	/* TIFF_SSHORT */
 -	(long)0xffffffffL,	/* TIFF_SLONG */
 -	(long)0xffffffffL,	/* TIFF_SRATIONAL */
 -	(long)0xffffffffL,	/* TIFF_FLOAT */
 -	(long)0xffffffffL,	/* TIFF_DOUBLE */
 -};
 -static const int bigTypeshift[13] = {
 -	0,		/* TIFF_NOTYPE */
 -	24,		/* TIFF_BYTE */
 -	0,		/* TIFF_ASCII */
 -	16,		/* TIFF_SHORT */
 -	0,		/* TIFF_LONG */
 -	0,		/* TIFF_RATIONAL */
 -	24,		/* TIFF_SBYTE */
 -	24,		/* TIFF_UNDEFINED */
 -	16,		/* TIFF_SSHORT */
 -	0,		/* TIFF_SLONG */
 -	0,		/* TIFF_SRATIONAL */
 -	0,		/* TIFF_FLOAT */
 -	0,		/* TIFF_DOUBLE */
 -};
 -static const int litTypeshift[13] = {
 -	0,		/* TIFF_NOTYPE */
 -	0,		/* TIFF_BYTE */
 -	0,		/* TIFF_ASCII */
 -	0,		/* TIFF_SHORT */
 -	0,		/* TIFF_LONG */
 -	0,		/* TIFF_RATIONAL */
 -	0,		/* TIFF_SBYTE */
 -	0,		/* TIFF_UNDEFINED */
 -	0,		/* TIFF_SSHORT */
 -	0,		/* TIFF_SLONG */
 -	0,		/* TIFF_SRATIONAL */
 -	0,		/* TIFF_FLOAT */
 -	0,		/* TIFF_DOUBLE */
 -};
 -
 -/*
 - * Dummy functions to fill the omitted client procedures.
 - */
 -static int
 -_tiffDummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	(void) fd; (void) pbase; (void) psize;
 -	return (0);
 -}
 -
 -static void
 -_tiffDummyUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -	(void) fd; (void) base; (void) size;
 -}
 -
 -/*
 - * Initialize the shift & mask tables, and the
 - * byte swapping state according to the file
 - * contents and the machine architecture.
 - */
 -static void
 -TIFFInitOrder(TIFF* tif, int magic)
 -{
 -	tif->tif_typemask = typemask;
 -	if (magic == TIFF_BIGENDIAN) {
 -		tif->tif_typeshift = bigTypeshift;
 -#ifndef WORDS_BIGENDIAN
 -		tif->tif_flags |= TIFF_SWAB;
 -#endif
 -	} else {
 -		tif->tif_typeshift = litTypeshift;
 -#ifdef WORDS_BIGENDIAN
 -		tif->tif_flags |= TIFF_SWAB;
 -#endif
 -	}
 -}
 -
 -int
 -_TIFFgetMode(const char* mode, const char* module)
 -{
 -	int m = -1;
 -
 -	switch (mode[0]) {
 -	case 'r':
 -		m = O_RDONLY;
 -		if (mode[1] == '+')
 -			m = O_RDWR;
 -		break;
 -	case 'w':
 -	case 'a':
 -		m = O_RDWR|O_CREAT;
 -		if (mode[0] == 'w')
 -			m |= O_TRUNC;
 -		break;
 -	default:
 -		TIFFErrorExt(0, module, "\"%s\": Bad mode", mode);
 -		break;
 -	}
 -	return (m);
 -}
 -
 -TIFF*
 -TIFFClientOpen(
 -	const char* name, const char* mode,
 -	thandle_t clientdata,
 -	TIFFReadWriteProc readproc,
 -	TIFFReadWriteProc writeproc,
 -	TIFFSeekProc seekproc,
 -	TIFFCloseProc closeproc,
 -	TIFFSizeProc sizeproc,
 -	TIFFMapFileProc mapproc,
 -	TIFFUnmapFileProc unmapproc
 -)
 -{
 -	static const char module[] = "TIFFClientOpen";
 -	TIFF *tif;
 -	int m;
 -	const char* cp;
 -
 -	m = _TIFFgetMode(mode, module);
 -	if (m == -1)
 -		goto bad2;
 -	tif = (TIFF *)_TIFFmalloc(sizeof (TIFF) + strlen(name) + 1);
 -	if (tif == NULL) {
 -		TIFFErrorExt(clientdata, module, "%s: Out of memory (TIFF structure)", name);
 -		goto bad2;
 -	}
 -	_TIFFmemset(tif, 0, sizeof (*tif));
 -	tif->tif_name = (char *)tif + sizeof (TIFF);
 -	strcpy(tif->tif_name, name);
 -	tif->tif_mode = m &~ (O_CREAT|O_TRUNC);
 -	tif->tif_curdir = (tdir_t) -1;		/* non-existent directory */
 -	tif->tif_curoff = 0;
 -	tif->tif_curstrip = (tstrip_t) -1;	/* invalid strip */
 -	tif->tif_row = (uint32) -1;		/* read/write pre-increment */
 -	tif->tif_clientdata = clientdata;
 -	if (!readproc || !writeproc || !seekproc || !closeproc || !sizeproc) {
 -		TIFFErrorExt(clientdata, module,
 -			  "One of the client procedures is NULL pointer.");
 -		goto bad2;
 -	}
 -	tif->tif_readproc = readproc;
 -	tif->tif_writeproc = writeproc;
 -	tif->tif_seekproc = seekproc;
 -	tif->tif_closeproc = closeproc;
 -	tif->tif_sizeproc = sizeproc;
 -        if (mapproc)
 -		tif->tif_mapproc = mapproc;
 -	else
 -		tif->tif_mapproc = _tiffDummyMapProc;
 -	if (unmapproc)
 -		tif->tif_unmapproc = unmapproc;
 -	else
 -		tif->tif_unmapproc = _tiffDummyUnmapProc;
 -	_TIFFSetDefaultCompressionState(tif);	/* setup default state */
 -	/*
 -	 * Default is to return data MSB2LSB and enable the
 -	 * use of memory-mapped files and strip chopping when
 -	 * a file is opened read-only.
 -	 */
 -	tif->tif_flags = FILLORDER_MSB2LSB;
 -	if (m == O_RDONLY )
 -		tif->tif_flags |= TIFF_MAPPED;
 -
 -#ifdef STRIPCHOP_DEFAULT
 -	if (m == O_RDONLY || m == O_RDWR)
 -		tif->tif_flags |= STRIPCHOP_DEFAULT;
 -#endif
 -
 -	/*
 -	 * Process library-specific flags in the open mode string.
 -	 * The following flags may be used to control intrinsic library
 -	 * behaviour that may or may not be desirable (usually for
 -	 * compatibility with some application that claims to support
 -	 * TIFF but only supports some braindead idea of what the
 -	 * vendor thinks TIFF is):
 -	 *
 -	 * 'l'		use little-endian byte order for creating a file
 -	 * 'b'		use big-endian byte order for creating a file
 -	 * 'L'		read/write information using LSB2MSB bit order
 -	 * 'B'		read/write information using MSB2LSB bit order
 -	 * 'H'		read/write information using host bit order
 -	 * 'M'		enable use of memory-mapped files when supported
 -	 * 'm'		disable use of memory-mapped files
 -	 * 'C'		enable strip chopping support when reading
 -	 * 'c'		disable strip chopping support
 -	 * 'h'		read TIFF header only, do not load the first IFD
 -	 *
 -	 * The use of the 'l' and 'b' flags is strongly discouraged.
 -	 * These flags are provided solely because numerous vendors,
 -	 * typically on the PC, do not correctly support TIFF; they
 -	 * only support the Intel little-endian byte order.  This
 -	 * support is not configured by default because it supports
 -	 * the violation of the TIFF spec that says that readers *MUST*
 -	 * support both byte orders.  It is strongly recommended that
 -	 * you not use this feature except to deal with busted apps
 -	 * that write invalid TIFF.  And even in those cases you should
 -	 * bang on the vendors to fix their software.
 -	 *
 -	 * The 'L', 'B', and 'H' flags are intended for applications
 -	 * that can optimize operations on data by using a particular
 -	 * bit order.  By default the library returns data in MSB2LSB
 -	 * bit order for compatibiltiy with older versions of this
 -	 * library.  Returning data in the bit order of the native cpu
 -	 * makes the most sense but also requires applications to check
 -	 * the value of the FillOrder tag; something they probably do
 -	 * not do right now.
 -	 *
 -	 * The 'M' and 'm' flags are provided because some virtual memory
 -	 * systems exhibit poor behaviour when large images are mapped.
 -	 * These options permit clients to control the use of memory-mapped
 -	 * files on a per-file basis.
 -	 *
 -	 * The 'C' and 'c' flags are provided because the library support
 -	 * for chopping up large strips into multiple smaller strips is not
 -	 * application-transparent and as such can cause problems.  The 'c'
 -	 * option permits applications that only want to look at the tags,
 -	 * for example, to get the unadulterated TIFF tag information.
 -	 */
 -	for (cp = mode; *cp; cp++)
 -		switch (*cp) {
 -		case 'b':
 -#ifndef WORDS_BIGENDIAN
 -		    if (m&O_CREAT)
 -				tif->tif_flags |= TIFF_SWAB;
 -#endif
 -			break;
 -		case 'l':
 -#ifdef WORDS_BIGENDIAN
 -			if ((m&O_CREAT))
 -				tif->tif_flags |= TIFF_SWAB;
 -#endif
 -			break;
 -		case 'B':
 -			tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) |
 -			    FILLORDER_MSB2LSB;
 -			break;
 -		case 'L':
 -			tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) |
 -			    FILLORDER_LSB2MSB;
 -			break;
 -		case 'H':
 -			tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) |
 -			    HOST_FILLORDER;
 -			break;
 -		case 'M':
 -			if (m == O_RDONLY)
 -				tif->tif_flags |= TIFF_MAPPED;
 -			break;
 -		case 'm':
 -			if (m == O_RDONLY)
 -				tif->tif_flags &= ~TIFF_MAPPED;
 -			break;
 -		case 'C':
 -			if (m == O_RDONLY)
 -				tif->tif_flags |= TIFF_STRIPCHOP;
 -			break;
 -		case 'c':
 -			if (m == O_RDONLY)
 -				tif->tif_flags &= ~TIFF_STRIPCHOP;
 -			break;
 -		case 'h':
 -			tif->tif_flags |= TIFF_HEADERONLY;
 -			break;
 -		}
 -	/*
 -	 * Read in TIFF header.
 -	 */
 -	if ((m & O_TRUNC) ||
 -	    !ReadOK(tif, &tif->tif_header, sizeof (TIFFHeader))) {
 -		if (tif->tif_mode == O_RDONLY) {
 -			TIFFErrorExt(tif->tif_clientdata, name,
 -				     "Cannot read TIFF header");
 -			goto bad;
 -		}
 -		/*
 -		 * Setup header and write.
 -		 */
 -#ifdef WORDS_BIGENDIAN
 -		tif->tif_header.tiff_magic = tif->tif_flags & TIFF_SWAB
 -		    ? TIFF_LITTLEENDIAN : TIFF_BIGENDIAN;
 -#else
 -		tif->tif_header.tiff_magic = tif->tif_flags & TIFF_SWAB
 -		    ? TIFF_BIGENDIAN : TIFF_LITTLEENDIAN;
 -#endif
 -		tif->tif_header.tiff_version = TIFF_VERSION;
 -		if (tif->tif_flags & TIFF_SWAB)
 -			TIFFSwabShort(&tif->tif_header.tiff_version);
 -		tif->tif_header.tiff_diroff = 0;	/* filled in later */
 -
 -
 -                /*
 -                 * The doc for "fopen" for some STD_C_LIBs says that if you 
 -                 * open a file for modify ("+"), then you must fseek (or 
 -                 * fflush?) between any freads and fwrites.  This is not
 -                 * necessary on most systems, but has been shown to be needed
 -                 * on Solaris. 
 -                 */
 -                TIFFSeekFile( tif, 0, SEEK_SET );
 -               
 -		if (!WriteOK(tif, &tif->tif_header, sizeof (TIFFHeader))) {
 -			TIFFErrorExt(tif->tif_clientdata, name,
 -				     "Error writing TIFF header");
 -			goto bad;
 -		}
 -		/*
 -		 * Setup the byte order handling.
 -		 */
 -		TIFFInitOrder(tif, tif->tif_header.tiff_magic);
 -		/*
 -		 * Setup default directory.
 -		 */
 -		if (!TIFFDefaultDirectory(tif))
 -			goto bad;
 -		tif->tif_diroff = 0;
 -		tif->tif_dirlist = NULL;
 -		tif->tif_dirlistsize = 0;
 -		tif->tif_dirnumber = 0;
 -		return (tif);
 -	}
 -	/*
 -	 * Setup the byte order handling.
 -	 */
 -	if (tif->tif_header.tiff_magic != TIFF_BIGENDIAN &&
 -	    tif->tif_header.tiff_magic != TIFF_LITTLEENDIAN
 -#if MDI_SUPPORT
 -	    &&
 -#if HOST_BIGENDIAN
 -	    tif->tif_header.tiff_magic != MDI_BIGENDIAN
 -#else
 -	    tif->tif_header.tiff_magic != MDI_LITTLEENDIAN
 -#endif
 -	    ) {
 -		TIFFErrorExt(tif->tif_clientdata, name,
 -			"Not a TIFF or MDI file, bad magic number %d (0x%x)",
 -#else
 -	    ) {
 -		TIFFErrorExt(tif->tif_clientdata, name,
 -			     "Not a TIFF file, bad magic number %d (0x%x)",
 -#endif
 -		    tif->tif_header.tiff_magic,
 -		    tif->tif_header.tiff_magic);
 -		goto bad;
 -	}
 -	TIFFInitOrder(tif, tif->tif_header.tiff_magic);
 -	/*
 -	 * Swap header if required.
 -	 */
 -	if (tif->tif_flags & TIFF_SWAB) {
 -		TIFFSwabShort(&tif->tif_header.tiff_version);
 -		TIFFSwabLong(&tif->tif_header.tiff_diroff);
 -	}
 -	/*
 -	 * Now check version (if needed, it's been byte-swapped).
 -	 * Note that this isn't actually a version number, it's a
 -	 * magic number that doesn't change (stupid).
 -	 */
 -	if (tif->tif_header.tiff_version == TIFF_BIGTIFF_VERSION) {
 -		TIFFErrorExt(tif->tif_clientdata, name,
 -                          "This is a BigTIFF file.  This format not supported\n"
 -                          "by this version of libtiff." );
 -		goto bad;
 -	}
 -	if (tif->tif_header.tiff_version != TIFF_VERSION) {
 -		TIFFErrorExt(tif->tif_clientdata, name,
 -		    "Not a TIFF file, bad version number %d (0x%x)",
 -		    tif->tif_header.tiff_version,
 -		    tif->tif_header.tiff_version);
 -		goto bad;
 -	}
 -	tif->tif_flags |= TIFF_MYBUFFER;
 -	tif->tif_rawcp = tif->tif_rawdata = 0;
 -	tif->tif_rawdatasize = 0;
 -
 -	/*
 -	 * Sometimes we do not want to read the first directory (for example,
 -	 * it may be broken) and want to proceed to other directories. I this
 -	 * case we use the TIFF_HEADERONLY flag to open file and return
 -	 * immediately after reading TIFF header.
 -	 */
 -	if (tif->tif_flags & TIFF_HEADERONLY)
 -		return (tif);
 -
 -	/*
 -	 * Setup initial directory.
 -	 */
 -	switch (mode[0]) {
 -	case 'r':
 -		tif->tif_nextdiroff = tif->tif_header.tiff_diroff;
 -		/*
 -		 * Try to use a memory-mapped file if the client
 -		 * has not explicitly suppressed usage with the
 -		 * 'm' flag in the open mode (see above).
 -		 */
 -		if ((tif->tif_flags & TIFF_MAPPED) &&
 -	!TIFFMapFileContents(tif, (tdata_t*) &tif->tif_base, &tif->tif_size))
 -			tif->tif_flags &= ~TIFF_MAPPED;
 -		if (TIFFReadDirectory(tif)) {
 -			tif->tif_rawcc = -1;
 -			tif->tif_flags |= TIFF_BUFFERSETUP;
 -			return (tif);
 -		}
 -		break;
 -	case 'a':
 -		/*
 -		 * New directories are automatically append
 -		 * to the end of the directory chain when they
 -		 * are written out (see TIFFWriteDirectory).
 -		 */
 -		if (!TIFFDefaultDirectory(tif))
 -			goto bad;
 -		return (tif);
 -	}
 -bad:
 -	tif->tif_mode = O_RDONLY;	/* XXX avoid flush */
 -        TIFFCleanup(tif);
 -bad2:
 -	return ((TIFF*)0);
 -}
 -
 -/*
 - * Query functions to access private data.
 - */
 -
 -/*
 - * Return open file's name.
 - */
 -const char *
 -TIFFFileName(TIFF* tif)
 -{
 -	return (tif->tif_name);
 -}
 -
 -/*
 - * Set the file name.
 - */
 -const char *
 -TIFFSetFileName(TIFF* tif, const char *name)
 -{
 -	const char* old_name = tif->tif_name;
 -	tif->tif_name = (char *)name;
 -	return (old_name);
 -}
 -
 -/*
 - * Return open file's I/O descriptor.
 - */
 -int
 -TIFFFileno(TIFF* tif)
 -{
 -	return (tif->tif_fd);
 -}
 -
 -/*
 - * Set open file's I/O descriptor, and return previous value.
 - */
 -int
 -TIFFSetFileno(TIFF* tif, int fd)
 -{
 -        int old_fd = tif->tif_fd;
 -	tif->tif_fd = fd;
 -	return old_fd;
 -}
 -
 -/*
 - * Return open file's clientdata.
 - */
 -thandle_t
 -TIFFClientdata(TIFF* tif)
 -{
 -	return (tif->tif_clientdata);
 -}
 -
 -/*
 - * Set open file's clientdata, and return previous value.
 - */
 -thandle_t
 -TIFFSetClientdata(TIFF* tif, thandle_t newvalue)
 -{
 -	thandle_t m = tif->tif_clientdata;
 -	tif->tif_clientdata = newvalue;
 -	return m;
 -}
 -
 -/*
 - * Return read/write mode.
 - */
 -int
 -TIFFGetMode(TIFF* tif)
 -{
 -	return (tif->tif_mode);
 -}
 -
 -/*
 - * Return read/write mode.
 - */
 -int
 -TIFFSetMode(TIFF* tif, int mode)
 -{
 -	int old_mode = tif->tif_mode;
 -	tif->tif_mode = mode;
 -	return (old_mode);
 -}
 -
 -/*
 - * Return nonzero if file is organized in
 - * tiles; zero if organized as strips.
 - */
 -int
 -TIFFIsTiled(TIFF* tif)
 -{
 -	return (isTiled(tif));
 -}
 -
 -/*
 - * Return current row being read/written.
 - */
 -uint32
 -TIFFCurrentRow(TIFF* tif)
 -{
 -	return (tif->tif_row);
 -}
 -
 -/*
 - * Return index of the current directory.
 - */
 -tdir_t
 -TIFFCurrentDirectory(TIFF* tif)
 -{
 -	return (tif->tif_curdir);
 -}
 -
 -/*
 - * Return current strip.
 - */
 -tstrip_t
 -TIFFCurrentStrip(TIFF* tif)
 -{
 -	return (tif->tif_curstrip);
 -}
 -
 -/*
 - * Return current tile.
 - */
 -ttile_t
 -TIFFCurrentTile(TIFF* tif)
 -{
 -	return (tif->tif_curtile);
 -}
 -
 -/*
 - * Return nonzero if the file has byte-swapped data.
 - */
 -int
 -TIFFIsByteSwapped(TIFF* tif)
 -{
 -	return ((tif->tif_flags & TIFF_SWAB) != 0);
 -}
 -
 -/*
 - * Return nonzero if the data is returned up-sampled.
 - */
 -int
 -TIFFIsUpSampled(TIFF* tif)
 -{
 -	return (isUpSampled(tif));
 -}
 -
 -/*
 - * Return nonzero if the data is returned in MSB-to-LSB bit order.
 - */
 -int
 -TIFFIsMSB2LSB(TIFF* tif)
 -{
 -	return (isFillOrder(tif, FILLORDER_MSB2LSB));
 -}
 -
 -/*
 - * Return nonzero if given file was written in big-endian order.
 - */
 -int
 -TIFFIsBigEndian(TIFF* tif)
 -{
 -	return (tif->tif_header.tiff_magic == TIFF_BIGENDIAN);
 -}
 -
 -/*
 - * Return pointer to file read method.
 - */
 -TIFFReadWriteProc
 -TIFFGetReadProc(TIFF* tif)
 -{
 -	return (tif->tif_readproc);
 -}
 -
 -/*
 - * Return pointer to file write method.
 - */
 -TIFFReadWriteProc
 -TIFFGetWriteProc(TIFF* tif)
 -{
 -	return (tif->tif_writeproc);
 -}
 -
 -/*
 - * Return pointer to file seek method.
 - */
 -TIFFSeekProc
 -TIFFGetSeekProc(TIFF* tif)
 -{
 -	return (tif->tif_seekproc);
 -}
 -
 -/*
 - * Return pointer to file close method.
 - */
 -TIFFCloseProc
 -TIFFGetCloseProc(TIFF* tif)
 -{
 -	return (tif->tif_closeproc);
 -}
 -
 -/*
 - * Return pointer to file size requesting method.
 - */
 -TIFFSizeProc
 -TIFFGetSizeProc(TIFF* tif)
 -{
 -	return (tif->tif_sizeproc);
 -}
 -
 -/*
 - * Return pointer to memory mapping method.
 - */
 -TIFFMapFileProc
 -TIFFGetMapFileProc(TIFF* tif)
 -{
 -	return (tif->tif_mapproc);
 -}
 -
 -/*
 - * Return pointer to memory unmapping method.
 - */
 -TIFFUnmapFileProc
 -TIFFGetUnmapFileProc(TIFF* tif)
 -{
 -	return (tif->tif_unmapproc);
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_packbits.c b/plugins/FreeImage/Source/LibTIFF/tif_packbits.c deleted file mode 100644 index 1fc96d13a2..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_packbits.c +++ /dev/null @@ -1,300 +0,0 @@ -/* $Id: tif_packbits.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#include "tiffiop.h"
 -#ifdef PACKBITS_SUPPORT
 -/*
 - * TIFF Library.
 - *
 - * PackBits Compression Algorithm Support
 - */
 -#include <stdio.h>
 -
 -static int
 -PackBitsPreEncode(TIFF* tif, tsample_t s)
 -{
 -	(void) s;
 -
 -        if (!(tif->tif_data = (tidata_t)_TIFFmalloc(sizeof(tsize_t))))
 -		return (0);
 -	/*
 -	 * Calculate the scanline/tile-width size in bytes.
 -	 */
 -	if (isTiled(tif))
 -		*(tsize_t*)tif->tif_data = TIFFTileRowSize(tif);
 -	else
 -		*(tsize_t*)tif->tif_data = TIFFScanlineSize(tif);
 -	return (1);
 -}
 -
 -static int
 -PackBitsPostEncode(TIFF* tif)
 -{
 -        if (tif->tif_data)
 -            _TIFFfree(tif->tif_data);
 -	return (1);
 -}
 -
 -/*
 - * NB: tidata is the type representing *(tidata_t);
 - *     if tidata_t is made signed then this type must
 - *     be adjusted accordingly.
 - */
 -typedef unsigned char tidata;
 -
 -/*
 - * Encode a run of pixels.
 - */
 -static int
 -PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s)
 -{
 -	unsigned char* bp = (unsigned char*) buf;
 -	tidata_t op, ep, lastliteral;
 -	long n, slop;
 -	int b;
 -	enum { BASE, LITERAL, RUN, LITERAL_RUN } state;
 -
 -	(void) s;
 -	op = tif->tif_rawcp;
 -	ep = tif->tif_rawdata + tif->tif_rawdatasize;
 -	state = BASE;
 -	lastliteral = 0;
 -	while (cc > 0) {
 -		/*
 -		 * Find the longest string of identical bytes.
 -		 */
 -		b = *bp++, cc--, n = 1;
 -		for (; cc > 0 && b == *bp; cc--, bp++)
 -			n++;
 -	again:
 -		if (op + 2 >= ep) {		/* insure space for new data */
 -			/*
 -			 * Be careful about writing the last
 -			 * literal.  Must write up to that point
 -			 * and then copy the remainder to the
 -			 * front of the buffer.
 -			 */
 -			if (state == LITERAL || state == LITERAL_RUN) {
 -				slop = op - lastliteral;
 -				tif->tif_rawcc += lastliteral - tif->tif_rawcp;
 -				if (!TIFFFlushData1(tif))
 -					return (-1);
 -				op = tif->tif_rawcp;
 -				while (slop-- > 0)
 -					*op++ = *lastliteral++;
 -				lastliteral = tif->tif_rawcp;
 -			} else {
 -				tif->tif_rawcc += op - tif->tif_rawcp;
 -				if (!TIFFFlushData1(tif))
 -					return (-1);
 -				op = tif->tif_rawcp;
 -			}
 -		}
 -		switch (state) {
 -		case BASE:		/* initial state, set run/literal */
 -			if (n > 1) {
 -				state = RUN;
 -				if (n > 128) {
 -					*op++ = (tidata) -127;
 -					*op++ = (tidataval_t) b;
 -					n -= 128;
 -					goto again;
 -				}
 -				*op++ = (tidataval_t)(-(n-1));
 -				*op++ = (tidataval_t) b;
 -			} else {
 -				lastliteral = op;
 -				*op++ = 0;
 -				*op++ = (tidataval_t) b;
 -				state = LITERAL;
 -			}
 -			break;
 -		case LITERAL:		/* last object was literal string */
 -			if (n > 1) {
 -				state = LITERAL_RUN;
 -				if (n > 128) {
 -					*op++ = (tidata) -127;
 -					*op++ = (tidataval_t) b;
 -					n -= 128;
 -					goto again;
 -				}
 -				*op++ = (tidataval_t)(-(n-1));	/* encode run */
 -				*op++ = (tidataval_t) b;
 -			} else {			/* extend literal */
 -				if (++(*lastliteral) == 127)
 -					state = BASE;
 -				*op++ = (tidataval_t) b;
 -			}
 -			break;
 -		case RUN:		/* last object was run */
 -			if (n > 1) {
 -				if (n > 128) {
 -					*op++ = (tidata) -127;
 -					*op++ = (tidataval_t) b;
 -					n -= 128;
 -					goto again;
 -				}
 -				*op++ = (tidataval_t)(-(n-1));
 -				*op++ = (tidataval_t) b;
 -			} else {
 -				lastliteral = op;
 -				*op++ = 0;
 -				*op++ = (tidataval_t) b;
 -				state = LITERAL;
 -			}
 -			break;
 -		case LITERAL_RUN:	/* literal followed by a run */
 -			/*
 -			 * Check to see if previous run should
 -			 * be converted to a literal, in which
 -			 * case we convert literal-run-literal
 -			 * to a single literal.
 -			 */
 -			if (n == 1 && op[-2] == (tidata) -1 &&
 -			    *lastliteral < 126) {
 -				state = (((*lastliteral) += 2) == 127 ?
 -				    BASE : LITERAL);
 -				op[-2] = op[-1];	/* replicate */
 -			} else
 -				state = RUN;
 -			goto again;
 -		}
 -	}
 -	tif->tif_rawcc += op - tif->tif_rawcp;
 -	tif->tif_rawcp = op;
 -	return (1);
 -}
 -
 -/*
 - * Encode a rectangular chunk of pixels.  We break it up
 - * into row-sized pieces to insure that encoded runs do
 - * not span rows.  Otherwise, there can be problems with
 - * the decoder if data is read, for example, by scanlines
 - * when it was encoded by strips.
 - */
 -static int
 -PackBitsEncodeChunk(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	tsize_t rowsize = *(tsize_t*)tif->tif_data;
 -
 -	while ((long)cc > 0) {
 -		int	chunk = rowsize;
 -		
 -		if ( cc < chunk )
 -		    chunk = cc;
 -
 -		if (PackBitsEncode(tif, bp, chunk, s) < 0)
 -		    return (-1);
 -		bp += chunk;
 -		cc -= chunk;
 -	}
 -	return (1);
 -}
 -
 -static int
 -PackBitsDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s)
 -{
 -	char *bp;
 -	tsize_t cc;
 -	long n;
 -	int b;
 -
 -	(void) s;
 -	bp = (char*) tif->tif_rawcp;
 -	cc = tif->tif_rawcc;
 -	while (cc > 0 && (long)occ > 0) {
 -		n = (long) *bp++, cc--;
 -		/*
 -		 * Watch out for compilers that
 -		 * don't sign extend chars...
 -		 */
 -		if (n >= 128)
 -			n -= 256;
 -		if (n < 0) {		/* replicate next byte -n+1 times */
 -			if (n == -128)	/* nop */
 -				continue;
 -                        n = -n + 1;
 -                        if ( occ < n )
 -                        {
 -							TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
 -                                        "PackBitsDecode: discarding %ld bytes "
 -                                        "to avoid buffer overrun",
 -                                        n - occ);
 -                            n = occ;
 -                        }
 -			occ -= n;
 -			b = *bp++, cc--;
 -			while (n-- > 0)
 -				*op++ = (tidataval_t) b;
 -		} else {		/* copy next n+1 bytes literally */
 -			if (occ < n + 1)
 -                        {
 -                            TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
 -                                        "PackBitsDecode: discarding %ld bytes "
 -                                        "to avoid buffer overrun",
 -                                        n - occ + 1);
 -                            n = occ - 1;
 -                        }
 -                        _TIFFmemcpy(op, bp, ++n);
 -			op += n; occ -= n;
 -			bp += n; cc -= n;
 -		}
 -	}
 -	tif->tif_rawcp = (tidata_t) bp;
 -	tif->tif_rawcc = cc;
 -	if (occ > 0) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		    "PackBitsDecode: Not enough data for scanline %ld",
 -		    (long) tif->tif_row);
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -int
 -TIFFInitPackBits(TIFF* tif, int scheme)
 -{
 -	(void) scheme;
 -	tif->tif_decoderow = PackBitsDecode;
 -	tif->tif_decodestrip = PackBitsDecode;
 -	tif->tif_decodetile = PackBitsDecode;
 -	tif->tif_preencode = PackBitsPreEncode;
 -        tif->tif_postencode = PackBitsPostEncode;
 -	tif->tif_encoderow = PackBitsEncode;
 -	tif->tif_encodestrip = PackBitsEncodeChunk;
 -	tif->tif_encodetile = PackBitsEncodeChunk;
 -	return (1);
 -}
 -#endif /* PACKBITS_SUPPORT */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_pixarlog.c b/plugins/FreeImage/Source/LibTIFF/tif_pixarlog.c deleted file mode 100644 index ef4faa4e45..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_pixarlog.c +++ /dev/null @@ -1,1371 +0,0 @@ -/* $Id: tif_pixarlog.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1996-1997 Sam Leffler
 - * Copyright (c) 1996 Pixar
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Pixar, Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Pixar, Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL PIXAR, SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#include "tiffiop.h"
 -#ifdef PIXARLOG_SUPPORT
 -
 -/*
 - * TIFF Library.
 - * PixarLog Compression Support
 - *
 - * Contributed by Dan McCoy.
 - *
 - * PixarLog film support uses the TIFF library to store companded
 - * 11 bit values into a tiff file, which are compressed using the 
 - * zip compressor.  
 - *
 - * The codec can take as input and produce as output 32-bit IEEE float values 
 - * as well as 16-bit or 8-bit unsigned integer values.
 - *
 - * On writing any of the above are converted into the internal
 - * 11-bit log format.   In the case of  8 and 16 bit values, the
 - * input is assumed to be unsigned linear color values that represent
 - * the range 0-1.  In the case of IEEE values, the 0-1 range is assumed to
 - * be the normal linear color range, in addition over 1 values are
 - * accepted up to a value of about 25.0 to encode "hot" hightlights and such.
 - * The encoding is lossless for 8-bit values, slightly lossy for the
 - * other bit depths.  The actual color precision should be better
 - * than the human eye can perceive with extra room to allow for
 - * error introduced by further image computation.  As with any quantized
 - * color format, it is possible to perform image calculations which
 - * expose the quantization error. This format should certainly be less 
 - * susceptable to such errors than standard 8-bit encodings, but more
 - * susceptable than straight 16-bit or 32-bit encodings.
 - *
 - * On reading the internal format is converted to the desired output format.
 - * The program can request which format it desires by setting the internal
 - * pseudo tag TIFFTAG_PIXARLOGDATAFMT to one of these possible values:
 - *  PIXARLOGDATAFMT_FLOAT     = provide IEEE float values.
 - *  PIXARLOGDATAFMT_16BIT     = provide unsigned 16-bit integer values
 - *  PIXARLOGDATAFMT_8BIT      = provide unsigned 8-bit integer values
 - *
 - * alternately PIXARLOGDATAFMT_8BITABGR provides unsigned 8-bit integer
 - * values with the difference that if there are exactly three or four channels
 - * (rgb or rgba) it swaps the channel order (bgr or abgr).
 - *
 - * PIXARLOGDATAFMT_11BITLOG provides the internal encoding directly
 - * packed in 16-bit values.   However no tools are supplied for interpreting
 - * these values.
 - *
 - * "hot" (over 1.0) areas written in floating point get clamped to
 - * 1.0 in the integer data types.
 - *
 - * When the file is closed after writing, the bit depth and sample format
 - * are set always to appear as if 8-bit data has been written into it.
 - * That way a naive program unaware of the particulars of the encoding
 - * gets the format it is most likely able to handle.
 - *
 - * The codec does it's own horizontal differencing step on the coded
 - * values so the libraries predictor stuff should be turned off.
 - * The codec also handle byte swapping the encoded values as necessary
 - * since the library does not have the information necessary
 - * to know the bit depth of the raw unencoded buffer.
 - * 
 - */
 -
 -#include "tif_predict.h"
 -#include "../ZLib/zlib.h"
 -
 -#include <stdio.h>
 -#include <stdlib.h>
 -#include <math.h>
 -
 -/* Tables for converting to/from 11 bit coded values */
 -
 -#define  TSIZE	 2048		/* decode table size (11-bit tokens) */
 -#define  TSIZEP1 2049		/* Plus one for slop */
 -#define  ONE	 1250		/* token value of 1.0 exactly */
 -#define  RATIO	 1.004		/* nominal ratio for log part */
 -
 -#define CODE_MASK 0x7ff         /* 11 bits. */
 -
 -static float  Fltsize;
 -static float  LogK1, LogK2;
 -
 -#define REPEAT(n, op)   { int i; i=n; do { i--; op; } while (i>0); }
 -
 -static void
 -horizontalAccumulateF(uint16 *wp, int n, int stride, float *op, 
 -	float *ToLinearF)
 -{
 -    register unsigned int  cr, cg, cb, ca, mask;
 -    register float  t0, t1, t2, t3;
 -
 -    if (n >= stride) {
 -	mask = CODE_MASK;
 -	if (stride == 3) {
 -	    t0 = ToLinearF[cr = wp[0]];
 -	    t1 = ToLinearF[cg = wp[1]];
 -	    t2 = ToLinearF[cb = wp[2]];
 -	    op[0] = t0;
 -	    op[1] = t1;
 -	    op[2] = t2;
 -	    n -= 3;
 -	    while (n > 0) {
 -		wp += 3;
 -		op += 3;
 -		n -= 3;
 -		t0 = ToLinearF[(cr += wp[0]) & mask];
 -		t1 = ToLinearF[(cg += wp[1]) & mask];
 -		t2 = ToLinearF[(cb += wp[2]) & mask];
 -		op[0] = t0;
 -		op[1] = t1;
 -		op[2] = t2;
 -	    }
 -	} else if (stride == 4) {
 -	    t0 = ToLinearF[cr = wp[0]];
 -	    t1 = ToLinearF[cg = wp[1]];
 -	    t2 = ToLinearF[cb = wp[2]];
 -	    t3 = ToLinearF[ca = wp[3]];
 -	    op[0] = t0;
 -	    op[1] = t1;
 -	    op[2] = t2;
 -	    op[3] = t3;
 -	    n -= 4;
 -	    while (n > 0) {
 -		wp += 4;
 -		op += 4;
 -		n -= 4;
 -		t0 = ToLinearF[(cr += wp[0]) & mask];
 -		t1 = ToLinearF[(cg += wp[1]) & mask];
 -		t2 = ToLinearF[(cb += wp[2]) & mask];
 -		t3 = ToLinearF[(ca += wp[3]) & mask];
 -		op[0] = t0;
 -		op[1] = t1;
 -		op[2] = t2;
 -		op[3] = t3;
 -	    }
 -	} else {
 -	    REPEAT(stride, *op = ToLinearF[*wp&mask]; wp++; op++)
 -	    n -= stride;
 -	    while (n > 0) {
 -		REPEAT(stride,
 -		    wp[stride] += *wp; *op = ToLinearF[*wp&mask]; wp++; op++)
 -		n -= stride;
 -	    }
 -	}
 -    }
 -}
 -
 -static void
 -horizontalAccumulate12(uint16 *wp, int n, int stride, int16 *op,
 -	float *ToLinearF)
 -{
 -    register unsigned int  cr, cg, cb, ca, mask;
 -    register float  t0, t1, t2, t3;
 -
 -#define SCALE12 2048.0F
 -#define CLAMP12(t) (((t) < 3071) ? (uint16) (t) : 3071)
 -
 -    if (n >= stride) {
 -	mask = CODE_MASK;
 -	if (stride == 3) {
 -	    t0 = ToLinearF[cr = wp[0]] * SCALE12;
 -	    t1 = ToLinearF[cg = wp[1]] * SCALE12;
 -	    t2 = ToLinearF[cb = wp[2]] * SCALE12;
 -	    op[0] = CLAMP12(t0);
 -	    op[1] = CLAMP12(t1);
 -	    op[2] = CLAMP12(t2);
 -	    n -= 3;
 -	    while (n > 0) {
 -		wp += 3;
 -		op += 3;
 -		n -= 3;
 -		t0 = ToLinearF[(cr += wp[0]) & mask] * SCALE12;
 -		t1 = ToLinearF[(cg += wp[1]) & mask] * SCALE12;
 -		t2 = ToLinearF[(cb += wp[2]) & mask] * SCALE12;
 -		op[0] = CLAMP12(t0);
 -		op[1] = CLAMP12(t1);
 -		op[2] = CLAMP12(t2);
 -	    }
 -	} else if (stride == 4) {
 -	    t0 = ToLinearF[cr = wp[0]] * SCALE12;
 -	    t1 = ToLinearF[cg = wp[1]] * SCALE12;
 -	    t2 = ToLinearF[cb = wp[2]] * SCALE12;
 -	    t3 = ToLinearF[ca = wp[3]] * SCALE12;
 -	    op[0] = CLAMP12(t0);
 -	    op[1] = CLAMP12(t1);
 -	    op[2] = CLAMP12(t2);
 -	    op[3] = CLAMP12(t3);
 -	    n -= 4;
 -	    while (n > 0) {
 -		wp += 4;
 -		op += 4;
 -		n -= 4;
 -		t0 = ToLinearF[(cr += wp[0]) & mask] * SCALE12;
 -		t1 = ToLinearF[(cg += wp[1]) & mask] * SCALE12;
 -		t2 = ToLinearF[(cb += wp[2]) & mask] * SCALE12;
 -		t3 = ToLinearF[(ca += wp[3]) & mask] * SCALE12;
 -		op[0] = CLAMP12(t0);
 -		op[1] = CLAMP12(t1);
 -		op[2] = CLAMP12(t2);
 -		op[3] = CLAMP12(t3);
 -	    }
 -	} else {
 -	    REPEAT(stride, t0 = ToLinearF[*wp&mask] * SCALE12;
 -                           *op = CLAMP12(t0); wp++; op++)
 -	    n -= stride;
 -	    while (n > 0) {
 -		REPEAT(stride,
 -		    wp[stride] += *wp; t0 = ToLinearF[wp[stride]&mask]*SCALE12;
 -		    *op = CLAMP12(t0);  wp++; op++)
 -		n -= stride;
 -	    }
 -	}
 -    }
 -}
 -
 -static void
 -horizontalAccumulate16(uint16 *wp, int n, int stride, uint16 *op,
 -	uint16 *ToLinear16)
 -{
 -    register unsigned int  cr, cg, cb, ca, mask;
 -
 -    if (n >= stride) {
 -	mask = CODE_MASK;
 -	if (stride == 3) {
 -	    op[0] = ToLinear16[cr = wp[0]];
 -	    op[1] = ToLinear16[cg = wp[1]];
 -	    op[2] = ToLinear16[cb = wp[2]];
 -	    n -= 3;
 -	    while (n > 0) {
 -		wp += 3;
 -		op += 3;
 -		n -= 3;
 -		op[0] = ToLinear16[(cr += wp[0]) & mask];
 -		op[1] = ToLinear16[(cg += wp[1]) & mask];
 -		op[2] = ToLinear16[(cb += wp[2]) & mask];
 -	    }
 -	} else if (stride == 4) {
 -	    op[0] = ToLinear16[cr = wp[0]];
 -	    op[1] = ToLinear16[cg = wp[1]];
 -	    op[2] = ToLinear16[cb = wp[2]];
 -	    op[3] = ToLinear16[ca = wp[3]];
 -	    n -= 4;
 -	    while (n > 0) {
 -		wp += 4;
 -		op += 4;
 -		n -= 4;
 -		op[0] = ToLinear16[(cr += wp[0]) & mask];
 -		op[1] = ToLinear16[(cg += wp[1]) & mask];
 -		op[2] = ToLinear16[(cb += wp[2]) & mask];
 -		op[3] = ToLinear16[(ca += wp[3]) & mask];
 -	    }
 -	} else {
 -	    REPEAT(stride, *op = ToLinear16[*wp&mask]; wp++; op++)
 -	    n -= stride;
 -	    while (n > 0) {
 -		REPEAT(stride,
 -		    wp[stride] += *wp; *op = ToLinear16[*wp&mask]; wp++; op++)
 -		n -= stride;
 -	    }
 -	}
 -    }
 -}
 -
 -/* 
 - * Returns the log encoded 11-bit values with the horizontal
 - * differencing undone.
 - */
 -static void
 -horizontalAccumulate11(uint16 *wp, int n, int stride, uint16 *op)
 -{
 -    register unsigned int  cr, cg, cb, ca, mask;
 -
 -    if (n >= stride) {
 -	mask = CODE_MASK;
 -	if (stride == 3) {
 -	    op[0] = cr = wp[0];  op[1] = cg = wp[1];  op[2] = cb = wp[2];
 -	    n -= 3;
 -	    while (n > 0) {
 -		wp += 3;
 -		op += 3;
 -		n -= 3;
 -		op[0] = (cr += wp[0]) & mask;
 -		op[1] = (cg += wp[1]) & mask;
 -		op[2] = (cb += wp[2]) & mask;
 -	    }
 -	} else if (stride == 4) {
 -	    op[0] = cr = wp[0];  op[1] = cg = wp[1];
 -	    op[2] = cb = wp[2];  op[3] = ca = wp[3];
 -	    n -= 4;
 -	    while (n > 0) {
 -		wp += 4;
 -		op += 4;
 -		n -= 4;
 -		op[0] = (cr += wp[0]) & mask;
 -		op[1] = (cg += wp[1]) & mask;
 -		op[2] = (cb += wp[2]) & mask;
 -		op[3] = (ca += wp[3]) & mask;
 -	    } 
 -	} else {
 -	    REPEAT(stride, *op = *wp&mask; wp++; op++)
 -	    n -= stride;
 -	    while (n > 0) {
 -		REPEAT(stride,
 -		    wp[stride] += *wp; *op = *wp&mask; wp++; op++)
 -		n -= stride;
 -	    }
 -	}
 -    }
 -}
 -
 -static void
 -horizontalAccumulate8(uint16 *wp, int n, int stride, unsigned char *op,
 -	unsigned char *ToLinear8)
 -{
 -    register unsigned int  cr, cg, cb, ca, mask;
 -
 -    if (n >= stride) {
 -	mask = CODE_MASK;
 -	if (stride == 3) {
 -	    op[0] = ToLinear8[cr = wp[0]];
 -	    op[1] = ToLinear8[cg = wp[1]];
 -	    op[2] = ToLinear8[cb = wp[2]];
 -	    n -= 3;
 -	    while (n > 0) {
 -		n -= 3;
 -		wp += 3;
 -		op += 3;
 -		op[0] = ToLinear8[(cr += wp[0]) & mask];
 -		op[1] = ToLinear8[(cg += wp[1]) & mask];
 -		op[2] = ToLinear8[(cb += wp[2]) & mask];
 -	    }
 -	} else if (stride == 4) {
 -	    op[0] = ToLinear8[cr = wp[0]];
 -	    op[1] = ToLinear8[cg = wp[1]];
 -	    op[2] = ToLinear8[cb = wp[2]];
 -	    op[3] = ToLinear8[ca = wp[3]];
 -	    n -= 4;
 -	    while (n > 0) {
 -		n -= 4;
 -		wp += 4;
 -		op += 4;
 -		op[0] = ToLinear8[(cr += wp[0]) & mask];
 -		op[1] = ToLinear8[(cg += wp[1]) & mask];
 -		op[2] = ToLinear8[(cb += wp[2]) & mask];
 -		op[3] = ToLinear8[(ca += wp[3]) & mask];
 -	    }
 -	} else {
 -	    REPEAT(stride, *op = ToLinear8[*wp&mask]; wp++; op++)
 -	    n -= stride;
 -	    while (n > 0) {
 -		REPEAT(stride,
 -		    wp[stride] += *wp; *op = ToLinear8[*wp&mask]; wp++; op++)
 -		n -= stride;
 -	    }
 -	}
 -    }
 -}
 -
 -
 -static void
 -horizontalAccumulate8abgr(uint16 *wp, int n, int stride, unsigned char *op,
 -	unsigned char *ToLinear8)
 -{
 -    register unsigned int  cr, cg, cb, ca, mask;
 -    register unsigned char  t0, t1, t2, t3;
 -
 -    if (n >= stride) {
 -	mask = CODE_MASK;
 -	if (stride == 3) {
 -	    op[0] = 0;
 -	    t1 = ToLinear8[cb = wp[2]];
 -	    t2 = ToLinear8[cg = wp[1]];
 -	    t3 = ToLinear8[cr = wp[0]];
 -	    op[1] = t1;
 -	    op[2] = t2;
 -	    op[3] = t3;
 -	    n -= 3;
 -	    while (n > 0) {
 -		n -= 3;
 -		wp += 3;
 -		op += 4;
 -		op[0] = 0;
 -		t1 = ToLinear8[(cb += wp[2]) & mask];
 -		t2 = ToLinear8[(cg += wp[1]) & mask];
 -		t3 = ToLinear8[(cr += wp[0]) & mask];
 -		op[1] = t1;
 -		op[2] = t2;
 -		op[3] = t3;
 -	    }
 -	} else if (stride == 4) {
 -	    t0 = ToLinear8[ca = wp[3]];
 -	    t1 = ToLinear8[cb = wp[2]];
 -	    t2 = ToLinear8[cg = wp[1]];
 -	    t3 = ToLinear8[cr = wp[0]];
 -	    op[0] = t0;
 -	    op[1] = t1;
 -	    op[2] = t2;
 -	    op[3] = t3;
 -	    n -= 4;
 -	    while (n > 0) {
 -		n -= 4;
 -		wp += 4;
 -		op += 4;
 -		t0 = ToLinear8[(ca += wp[3]) & mask];
 -		t1 = ToLinear8[(cb += wp[2]) & mask];
 -		t2 = ToLinear8[(cg += wp[1]) & mask];
 -		t3 = ToLinear8[(cr += wp[0]) & mask];
 -		op[0] = t0;
 -		op[1] = t1;
 -		op[2] = t2;
 -		op[3] = t3;
 -	    }
 -	} else {
 -	    REPEAT(stride, *op = ToLinear8[*wp&mask]; wp++; op++)
 -	    n -= stride;
 -	    while (n > 0) {
 -		REPEAT(stride,
 -		    wp[stride] += *wp; *op = ToLinear8[*wp&mask]; wp++; op++)
 -		n -= stride;
 -	    }
 -	}
 -    }
 -}
 -
 -/*
 - * State block for each open TIFF
 - * file using PixarLog compression/decompression.
 - */
 -typedef	struct {
 -	TIFFPredictorState	predict;
 -	z_stream		stream;
 -	uint16			*tbuf; 
 -	uint16			stride;
 -	int			state;
 -	int			user_datafmt;
 -	int			quality;
 -#define PLSTATE_INIT 1
 -
 -	TIFFVSetMethod		vgetparent;	/* super-class method */
 -	TIFFVSetMethod		vsetparent;	/* super-class method */
 -
 -	float *ToLinearF;
 -	uint16 *ToLinear16;
 -	unsigned char *ToLinear8;
 -	uint16  *FromLT2;
 -	uint16  *From14; /* Really for 16-bit data, but we shift down 2 */
 -	uint16  *From8;
 -	
 -} PixarLogState;
 -
 -static int
 -PixarLogMakeTables(PixarLogState *sp)
 -{
 -
 -/*
 - *    We make several tables here to convert between various external
 - *    representations (float, 16-bit, and 8-bit) and the internal
 - *    11-bit companded representation.  The 11-bit representation has two
 - *    distinct regions.  A linear bottom end up through .018316 in steps
 - *    of about .000073, and a region of constant ratio up to about 25.
 - *    These floating point numbers are stored in the main table ToLinearF. 
 - *    All other tables are derived from this one.  The tables (and the
 - *    ratios) are continuous at the internal seam.
 - */
 -
 -    int  nlin, lt2size;
 -    int  i, j;
 -    double  b, c, linstep, v;
 -    float *ToLinearF;
 -    uint16 *ToLinear16;
 -    unsigned char *ToLinear8;
 -    uint16  *FromLT2;
 -    uint16  *From14; /* Really for 16-bit data, but we shift down 2 */
 -    uint16  *From8;
 -
 -    c = log(RATIO);	
 -    nlin = (int)(1./c);	/* nlin must be an integer */
 -    c = 1./nlin;
 -    b = exp(-c*ONE);	/* multiplicative scale factor [b*exp(c*ONE) = 1] */
 -    linstep = b*c*exp(1.);
 -
 -    LogK1 = (float)(1./c);	/* if (v >= 2)  token = k1*log(v*k2) */
 -    LogK2 = (float)(1./b);
 -    lt2size = (int)(2./linstep) + 1;
 -    FromLT2 = (uint16 *)_TIFFmalloc(lt2size*sizeof(uint16));
 -    From14 = (uint16 *)_TIFFmalloc(16384*sizeof(uint16));
 -    From8 = (uint16 *)_TIFFmalloc(256*sizeof(uint16));
 -    ToLinearF = (float *)_TIFFmalloc(TSIZEP1 * sizeof(float));
 -    ToLinear16 = (uint16 *)_TIFFmalloc(TSIZEP1 * sizeof(uint16));
 -    ToLinear8 = (unsigned char *)_TIFFmalloc(TSIZEP1 * sizeof(unsigned char));
 -    if (FromLT2 == NULL || From14  == NULL || From8   == NULL ||
 -	 ToLinearF == NULL || ToLinear16 == NULL || ToLinear8 == NULL) {
 -	if (FromLT2) _TIFFfree(FromLT2);
 -	if (From14) _TIFFfree(From14);
 -	if (From8) _TIFFfree(From8);
 -	if (ToLinearF) _TIFFfree(ToLinearF);
 -	if (ToLinear16) _TIFFfree(ToLinear16);
 -	if (ToLinear8) _TIFFfree(ToLinear8);
 -	sp->FromLT2 = NULL;
 -	sp->From14 = NULL;
 -	sp->From8 = NULL;
 -	sp->ToLinearF = NULL;
 -	sp->ToLinear16 = NULL;
 -	sp->ToLinear8 = NULL;
 -	return 0;
 -    }
 -
 -    j = 0;
 -
 -    for (i = 0; i < nlin; i++)  {
 -	v = i * linstep;
 -	ToLinearF[j++] = (float)v;
 -    }
 -
 -    for (i = nlin; i < TSIZE; i++)
 -	ToLinearF[j++] = (float)(b*exp(c*i));
 -
 -    ToLinearF[2048] = ToLinearF[2047];
 -
 -    for (i = 0; i < TSIZEP1; i++)  {
 -	v = ToLinearF[i]*65535.0 + 0.5;
 -	ToLinear16[i] = (v > 65535.0) ? 65535 : (uint16)v;
 -	v = ToLinearF[i]*255.0  + 0.5;
 -	ToLinear8[i]  = (v > 255.0) ? 255 : (unsigned char)v;
 -    }
 -
 -    j = 0;
 -    for (i = 0; i < lt2size; i++)  {
 -	if ((i*linstep)*(i*linstep) > ToLinearF[j]*ToLinearF[j+1])
 -	    j++;
 -	FromLT2[i] = j;
 -    }
 -
 -    /*
 -     * Since we lose info anyway on 16-bit data, we set up a 14-bit
 -     * table and shift 16-bit values down two bits on input.
 -     * saves a little table space.
 -     */
 -    j = 0;
 -    for (i = 0; i < 16384; i++)  {
 -	while ((i/16383.)*(i/16383.) > ToLinearF[j]*ToLinearF[j+1])
 -	    j++;
 -	From14[i] = j;
 -    }
 -
 -    j = 0;
 -    for (i = 0; i < 256; i++)  {
 -	while ((i/255.)*(i/255.) > ToLinearF[j]*ToLinearF[j+1])
 -	    j++;
 -	From8[i] = j;
 -    }
 -
 -    Fltsize = (float)(lt2size/2);
 -
 -    sp->ToLinearF = ToLinearF;
 -    sp->ToLinear16 = ToLinear16;
 -    sp->ToLinear8 = ToLinear8;
 -    sp->FromLT2 = FromLT2;
 -    sp->From14 = From14;
 -    sp->From8 = From8;
 -
 -    return 1;
 -}
 -
 -#define	DecoderState(tif)	((PixarLogState*) (tif)->tif_data)
 -#define	EncoderState(tif)	((PixarLogState*) (tif)->tif_data)
 -
 -static	int PixarLogEncode(TIFF*, tidata_t, tsize_t, tsample_t);
 -static	int PixarLogDecode(TIFF*, tidata_t, tsize_t, tsample_t);
 -
 -#define PIXARLOGDATAFMT_UNKNOWN	-1
 -
 -static int
 -PixarLogGuessDataFmt(TIFFDirectory *td)
 -{
 -	int guess = PIXARLOGDATAFMT_UNKNOWN;
 -	int format = td->td_sampleformat;
 -
 -	/* If the user didn't tell us his datafmt,
 -	 * take our best guess from the bitspersample.
 -	 */
 -	switch (td->td_bitspersample) {
 -	 case 32:
 -		if (format == SAMPLEFORMAT_IEEEFP)
 -			guess = PIXARLOGDATAFMT_FLOAT;
 -		break;
 -	 case 16:
 -		if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_UINT)
 -			guess = PIXARLOGDATAFMT_16BIT;
 -		break;
 -	 case 12:
 -		if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_INT)
 -			guess = PIXARLOGDATAFMT_12BITPICIO;
 -		break;
 -	 case 11:
 -		if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_UINT)
 -			guess = PIXARLOGDATAFMT_11BITLOG;
 -		break;
 -	 case 8:
 -		if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_UINT)
 -			guess = PIXARLOGDATAFMT_8BIT;
 -		break;
 -	}
 -
 -	return guess;
 -}
 -
 -static uint32
 -multiply(size_t m1, size_t m2)
 -{
 -	uint32	bytes = m1 * m2;
 -
 -	if (m1 && bytes / m1 != m2)
 -		bytes = 0;
 -
 -	return bytes;
 -}
 -
 -static int
 -PixarLogSetupDecode(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	PixarLogState* sp = DecoderState(tif);
 -	tsize_t tbuf_size;
 -	static const char module[] = "PixarLogSetupDecode";
 -
 -	assert(sp != NULL);
 -
 -	/* Make sure no byte swapping happens on the data
 -	 * after decompression. */
 -	tif->tif_postdecode = _TIFFNoPostDecode;
 -
 -	/* for some reason, we can't do this in TIFFInitPixarLog */
 -
 -	sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ?
 -	    td->td_samplesperpixel : 1);
 -	tbuf_size = multiply(multiply(multiply(sp->stride, td->td_imagewidth),
 -				      td->td_rowsperstrip), sizeof(uint16));
 -	if (tbuf_size == 0)
 -		return (0);
 -	sp->tbuf = (uint16 *) _TIFFmalloc(tbuf_size);
 -	if (sp->tbuf == NULL)
 -		return (0);
 -	if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN)
 -		sp->user_datafmt = PixarLogGuessDataFmt(td);
 -	if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			"PixarLog compression can't handle bits depth/data format combination (depth: %d)", 
 -			td->td_bitspersample);
 -		return (0);
 -	}
 -
 -	if (inflateInit(&sp->stream) != Z_OK) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: %s", tif->tif_name, sp->stream.msg);
 -		return (0);
 -	} else {
 -		sp->state |= PLSTATE_INIT;
 -		return (1);
 -	}
 -}
 -
 -/*
 - * Setup state for decoding a strip.
 - */
 -static int
 -PixarLogPreDecode(TIFF* tif, tsample_t s)
 -{
 -	PixarLogState* sp = DecoderState(tif);
 -
 -	(void) s;
 -	assert(sp != NULL);
 -	sp->stream.next_in = tif->tif_rawdata;
 -	sp->stream.avail_in = tif->tif_rawcc;
 -	return (inflateReset(&sp->stream) == Z_OK);
 -}
 -
 -static int
 -PixarLogDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	PixarLogState* sp = DecoderState(tif);
 -	static const char module[] = "PixarLogDecode";
 -	int i, nsamples, llen;
 -	uint16 *up;
 -
 -	switch (sp->user_datafmt) {
 -	case PIXARLOGDATAFMT_FLOAT:
 -		nsamples = occ / sizeof(float);	/* XXX float == 32 bits */
 -		break;
 -	case PIXARLOGDATAFMT_16BIT:
 -	case PIXARLOGDATAFMT_12BITPICIO:
 -	case PIXARLOGDATAFMT_11BITLOG:
 -		nsamples = occ / sizeof(uint16); /* XXX uint16 == 16 bits */
 -		break;
 -	case PIXARLOGDATAFMT_8BIT:
 -	case PIXARLOGDATAFMT_8BITABGR:
 -		nsamples = occ;
 -		break;
 -	default:
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			"%d bit input not supported in PixarLog",
 -			td->td_bitspersample);
 -		return 0;
 -	}
 -
 -	llen = sp->stride * td->td_imagewidth;
 -
 -	(void) s;
 -	assert(sp != NULL);
 -	sp->stream.next_out = (unsigned char *) sp->tbuf;
 -	sp->stream.avail_out = nsamples * sizeof(uint16);
 -	do {
 -		int state = inflate(&sp->stream, Z_PARTIAL_FLUSH);
 -		if (state == Z_STREAM_END) {
 -			break;			/* XXX */
 -		}
 -		if (state == Z_DATA_ERROR) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -			    "%s: Decoding error at scanline %d, %s",
 -			    tif->tif_name, tif->tif_row, sp->stream.msg);
 -			if (inflateSync(&sp->stream) != Z_OK)
 -				return (0);
 -			continue;
 -		}
 -		if (state != Z_OK) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s",
 -			    tif->tif_name, sp->stream.msg);
 -			return (0);
 -		}
 -	} while (sp->stream.avail_out > 0);
 -
 -	/* hopefully, we got all the bytes we needed */
 -	if (sp->stream.avail_out != 0) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -		    "%s: Not enough data at scanline %d (short %d bytes)",
 -		    tif->tif_name, tif->tif_row, sp->stream.avail_out);
 -		return (0);
 -	}
 -
 -	up = sp->tbuf;
 -	/* Swap bytes in the data if from a different endian machine. */
 -	if (tif->tif_flags & TIFF_SWAB)
 -		TIFFSwabArrayOfShort(up, nsamples);
 -
 -	/* 
 -	 * if llen is not an exact multiple of nsamples, the decode operation
 -	 * may overflow the output buffer, so truncate it enough to prevent
 -	 * that but still salvage as much data as possible.
 -	 */
 -	if (nsamples % llen) { 
 -		TIFFWarningExt(tif->tif_clientdata, module,
 -			"%s: stride %d is not a multiple of sample count, "
 -			"%d, data truncated.", tif->tif_name, llen, nsamples);
 -		nsamples -= nsamples % llen;
 -	}
 -
 -	for (i = 0; i < nsamples; i += llen, up += llen) {
 -		switch (sp->user_datafmt)  {
 -		case PIXARLOGDATAFMT_FLOAT:
 -			horizontalAccumulateF(up, llen, sp->stride,
 -					(float *)op, sp->ToLinearF);
 -			op += llen * sizeof(float);
 -			break;
 -		case PIXARLOGDATAFMT_16BIT:
 -			horizontalAccumulate16(up, llen, sp->stride,
 -					(uint16 *)op, sp->ToLinear16);
 -			op += llen * sizeof(uint16);
 -			break;
 -		case PIXARLOGDATAFMT_12BITPICIO:
 -			horizontalAccumulate12(up, llen, sp->stride,
 -					(int16 *)op, sp->ToLinearF);
 -			op += llen * sizeof(int16);
 -			break;
 -		case PIXARLOGDATAFMT_11BITLOG:
 -			horizontalAccumulate11(up, llen, sp->stride,
 -					(uint16 *)op);
 -			op += llen * sizeof(uint16);
 -			break;
 -		case PIXARLOGDATAFMT_8BIT:
 -			horizontalAccumulate8(up, llen, sp->stride,
 -					(unsigned char *)op, sp->ToLinear8);
 -			op += llen * sizeof(unsigned char);
 -			break;
 -		case PIXARLOGDATAFMT_8BITABGR:
 -			horizontalAccumulate8abgr(up, llen, sp->stride,
 -					(unsigned char *)op, sp->ToLinear8);
 -			op += llen * sizeof(unsigned char);
 -			break;
 -		default:
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -				  "PixarLogDecode: unsupported bits/sample: %d", 
 -				  td->td_bitspersample);
 -			return (0);
 -		}
 -	}
 -
 -	return (1);
 -}
 -
 -static int
 -PixarLogSetupEncode(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	PixarLogState* sp = EncoderState(tif);
 -	tsize_t tbuf_size;
 -	static const char module[] = "PixarLogSetupEncode";
 -
 -	assert(sp != NULL);
 -
 -	/* for some reason, we can't do this in TIFFInitPixarLog */
 -
 -	sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ?
 -	    td->td_samplesperpixel : 1);
 -	tbuf_size = multiply(multiply(multiply(sp->stride, td->td_imagewidth),
 -				      td->td_rowsperstrip), sizeof(uint16));
 -	if (tbuf_size == 0)
 -		return (0);
 -	sp->tbuf = (uint16 *) _TIFFmalloc(tbuf_size);
 -	if (sp->tbuf == NULL)
 -		return (0);
 -	if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN)
 -		sp->user_datafmt = PixarLogGuessDataFmt(td);
 -	if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "PixarLog compression can't handle %d bit linear encodings", td->td_bitspersample);
 -		return (0);
 -	}
 -
 -	if (deflateInit(&sp->stream, sp->quality) != Z_OK) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: %s", tif->tif_name, sp->stream.msg);
 -		return (0);
 -	} else {
 -		sp->state |= PLSTATE_INIT;
 -		return (1);
 -	}
 -}
 -
 -/*
 - * Reset encoding state at the start of a strip.
 - */
 -static int
 -PixarLogPreEncode(TIFF* tif, tsample_t s)
 -{
 -	PixarLogState *sp = EncoderState(tif);
 -
 -	(void) s;
 -	assert(sp != NULL);
 -	sp->stream.next_out = tif->tif_rawdata;
 -	sp->stream.avail_out = tif->tif_rawdatasize;
 -	return (deflateReset(&sp->stream) == Z_OK);
 -}
 -
 -static void
 -horizontalDifferenceF(float *ip, int n, int stride, uint16 *wp, uint16 *FromLT2)
 -{
 -
 -    int32 r1, g1, b1, a1, r2, g2, b2, a2, mask;
 -    float fltsize = Fltsize;
 -
 -#define  CLAMP(v) ( (v<(float)0.)   ? 0				\
 -		  : (v<(float)2.)   ? FromLT2[(int)(v*fltsize)]	\
 -		  : (v>(float)24.2) ? 2047			\
 -		  : LogK1*log(v*LogK2) + 0.5 )
 -
 -    mask = CODE_MASK;
 -    if (n >= stride) {
 -	if (stride == 3) {
 -	    r2 = wp[0] = (uint16) CLAMP(ip[0]);
 -	    g2 = wp[1] = (uint16) CLAMP(ip[1]);
 -	    b2 = wp[2] = (uint16) CLAMP(ip[2]);
 -	    n -= 3;
 -	    while (n > 0) {
 -		n -= 3;
 -		wp += 3;
 -		ip += 3;
 -		r1 = (int32) CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1;
 -		g1 = (int32) CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1;
 -		b1 = (int32) CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1;
 -	    }
 -	} else if (stride == 4) {
 -	    r2 = wp[0] = (uint16) CLAMP(ip[0]);
 -	    g2 = wp[1] = (uint16) CLAMP(ip[1]);
 -	    b2 = wp[2] = (uint16) CLAMP(ip[2]);
 -	    a2 = wp[3] = (uint16) CLAMP(ip[3]);
 -	    n -= 4;
 -	    while (n > 0) {
 -		n -= 4;
 -		wp += 4;
 -		ip += 4;
 -		r1 = (int32) CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1;
 -		g1 = (int32) CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1;
 -		b1 = (int32) CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1;
 -		a1 = (int32) CLAMP(ip[3]); wp[3] = (a1-a2) & mask; a2 = a1;
 -	    }
 -	} else {
 -	    ip += n - 1;	/* point to last one */
 -	    wp += n - 1;	/* point to last one */
 -	    n -= stride;
 -	    while (n > 0) {
 -		REPEAT(stride, wp[0] = (uint16) CLAMP(ip[0]);
 -				wp[stride] -= wp[0];
 -				wp[stride] &= mask;
 -				wp--; ip--)
 -		n -= stride;
 -	    }
 -	    REPEAT(stride, wp[0] = (uint16) CLAMP(ip[0]); wp--; ip--)
 -	}
 -    }
 -}
 -
 -static void
 -horizontalDifference16(unsigned short *ip, int n, int stride, 
 -	unsigned short *wp, uint16 *From14)
 -{
 -    register int  r1, g1, b1, a1, r2, g2, b2, a2, mask;
 -
 -/* assumption is unsigned pixel values */
 -#undef   CLAMP
 -#define  CLAMP(v) From14[(v) >> 2]
 -
 -    mask = CODE_MASK;
 -    if (n >= stride) {
 -	if (stride == 3) {
 -	    r2 = wp[0] = CLAMP(ip[0]);  g2 = wp[1] = CLAMP(ip[1]);
 -	    b2 = wp[2] = CLAMP(ip[2]);
 -	    n -= 3;
 -	    while (n > 0) {
 -		n -= 3;
 -		wp += 3;
 -		ip += 3;
 -		r1 = CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1;
 -		g1 = CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1;
 -		b1 = CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1;
 -	    }
 -	} else if (stride == 4) {
 -	    r2 = wp[0] = CLAMP(ip[0]);  g2 = wp[1] = CLAMP(ip[1]);
 -	    b2 = wp[2] = CLAMP(ip[2]);  a2 = wp[3] = CLAMP(ip[3]);
 -	    n -= 4;
 -	    while (n > 0) {
 -		n -= 4;
 -		wp += 4;
 -		ip += 4;
 -		r1 = CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1;
 -		g1 = CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1;
 -		b1 = CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1;
 -		a1 = CLAMP(ip[3]); wp[3] = (a1-a2) & mask; a2 = a1;
 -	    }
 -	} else {
 -	    ip += n - 1;	/* point to last one */
 -	    wp += n - 1;	/* point to last one */
 -	    n -= stride;
 -	    while (n > 0) {
 -		REPEAT(stride, wp[0] = CLAMP(ip[0]);
 -				wp[stride] -= wp[0];
 -				wp[stride] &= mask;
 -				wp--; ip--)
 -		n -= stride;
 -	    }
 -	    REPEAT(stride, wp[0] = CLAMP(ip[0]); wp--; ip--)
 -	}
 -    }
 -}
 -
 -
 -static void
 -horizontalDifference8(unsigned char *ip, int n, int stride, 
 -	unsigned short *wp, uint16 *From8)
 -{
 -    register int  r1, g1, b1, a1, r2, g2, b2, a2, mask;
 -
 -#undef	 CLAMP
 -#define  CLAMP(v) (From8[(v)])
 -
 -    mask = CODE_MASK;
 -    if (n >= stride) {
 -	if (stride == 3) {
 -	    r2 = wp[0] = CLAMP(ip[0]);  g2 = wp[1] = CLAMP(ip[1]);
 -	    b2 = wp[2] = CLAMP(ip[2]);
 -	    n -= 3;
 -	    while (n > 0) {
 -		n -= 3;
 -		r1 = CLAMP(ip[3]); wp[3] = (r1-r2) & mask; r2 = r1;
 -		g1 = CLAMP(ip[4]); wp[4] = (g1-g2) & mask; g2 = g1;
 -		b1 = CLAMP(ip[5]); wp[5] = (b1-b2) & mask; b2 = b1;
 -		wp += 3;
 -		ip += 3;
 -	    }
 -	} else if (stride == 4) {
 -	    r2 = wp[0] = CLAMP(ip[0]);  g2 = wp[1] = CLAMP(ip[1]);
 -	    b2 = wp[2] = CLAMP(ip[2]);  a2 = wp[3] = CLAMP(ip[3]);
 -	    n -= 4;
 -	    while (n > 0) {
 -		n -= 4;
 -		r1 = CLAMP(ip[4]); wp[4] = (r1-r2) & mask; r2 = r1;
 -		g1 = CLAMP(ip[5]); wp[5] = (g1-g2) & mask; g2 = g1;
 -		b1 = CLAMP(ip[6]); wp[6] = (b1-b2) & mask; b2 = b1;
 -		a1 = CLAMP(ip[7]); wp[7] = (a1-a2) & mask; a2 = a1;
 -		wp += 4;
 -		ip += 4;
 -	    }
 -	} else {
 -	    wp += n + stride - 1;	/* point to last one */
 -	    ip += n + stride - 1;	/* point to last one */
 -	    n -= stride;
 -	    while (n > 0) {
 -		REPEAT(stride, wp[0] = CLAMP(ip[0]);
 -				wp[stride] -= wp[0];
 -				wp[stride] &= mask;
 -				wp--; ip--)
 -		n -= stride;
 -	    }
 -	    REPEAT(stride, wp[0] = CLAMP(ip[0]); wp--; ip--)
 -	}
 -    }
 -}
 -
 -/*
 - * Encode a chunk of pixels.
 - */
 -static int
 -PixarLogEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	PixarLogState *sp = EncoderState(tif);
 -	static const char module[] = "PixarLogEncode";
 -	int	i, n, llen;
 -	unsigned short * up;
 -
 -	(void) s;
 -
 -	switch (sp->user_datafmt) {
 -	case PIXARLOGDATAFMT_FLOAT:
 -		n = cc / sizeof(float);		/* XXX float == 32 bits */
 -		break;
 -	case PIXARLOGDATAFMT_16BIT:
 -	case PIXARLOGDATAFMT_12BITPICIO:
 -	case PIXARLOGDATAFMT_11BITLOG:
 -		n = cc / sizeof(uint16);	/* XXX uint16 == 16 bits */
 -		break;
 -	case PIXARLOGDATAFMT_8BIT:
 -	case PIXARLOGDATAFMT_8BITABGR:
 -		n = cc;
 -		break;
 -	default:
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			"%d bit input not supported in PixarLog",
 -			td->td_bitspersample);
 -		return 0;
 -	}
 -
 -	llen = sp->stride * td->td_imagewidth;
 -
 -	for (i = 0, up = sp->tbuf; i < n; i += llen, up += llen) {
 -		switch (sp->user_datafmt)  {
 -		case PIXARLOGDATAFMT_FLOAT:
 -			horizontalDifferenceF((float *)bp, llen, 
 -				sp->stride, up, sp->FromLT2);
 -			bp += llen * sizeof(float);
 -			break;
 -		case PIXARLOGDATAFMT_16BIT:
 -			horizontalDifference16((uint16 *)bp, llen, 
 -				sp->stride, up, sp->From14);
 -			bp += llen * sizeof(uint16);
 -			break;
 -		case PIXARLOGDATAFMT_8BIT:
 -			horizontalDifference8((unsigned char *)bp, llen, 
 -				sp->stride, up, sp->From8);
 -			bp += llen * sizeof(unsigned char);
 -			break;
 -		default:
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -				"%d bit input not supported in PixarLog",
 -				td->td_bitspersample);
 -			return 0;
 -		}
 -	}
 - 
 -	sp->stream.next_in = (unsigned char *) sp->tbuf;
 -	sp->stream.avail_in = n * sizeof(uint16);
 -
 -	do {
 -		if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: Encoder error: %s",
 -			    tif->tif_name, sp->stream.msg);
 -			return (0);
 -		}
 -		if (sp->stream.avail_out == 0) {
 -			tif->tif_rawcc = tif->tif_rawdatasize;
 -			TIFFFlushData1(tif);
 -			sp->stream.next_out = tif->tif_rawdata;
 -			sp->stream.avail_out = tif->tif_rawdatasize;
 -		}
 -	} while (sp->stream.avail_in > 0);
 -	return (1);
 -}
 -
 -/*
 - * Finish off an encoded strip by flushing the last
 - * string and tacking on an End Of Information code.
 - */
 -
 -static int
 -PixarLogPostEncode(TIFF* tif)
 -{
 -	PixarLogState *sp = EncoderState(tif);
 -	static const char module[] = "PixarLogPostEncode";
 -	int state;
 -
 -	sp->stream.avail_in = 0;
 -
 -	do {
 -		state = deflate(&sp->stream, Z_FINISH);
 -		switch (state) {
 -		case Z_STREAM_END:
 -		case Z_OK:
 -		    if (sp->stream.avail_out != (uint32)tif->tif_rawdatasize) {
 -			    tif->tif_rawcc =
 -				tif->tif_rawdatasize - sp->stream.avail_out;
 -			    TIFFFlushData1(tif);
 -			    sp->stream.next_out = tif->tif_rawdata;
 -			    sp->stream.avail_out = tif->tif_rawdatasize;
 -		    }
 -		    break;
 -		default:
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s",
 -			tif->tif_name, sp->stream.msg);
 -		    return (0);
 -		}
 -	} while (state != Z_STREAM_END);
 -	return (1);
 -}
 -
 -static void
 -PixarLogClose(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	/* In a really sneaky maneuver, on close, we covertly modify both
 -	 * bitspersample and sampleformat in the directory to indicate
 -	 * 8-bit linear.  This way, the decode "just works" even for
 -	 * readers that don't know about PixarLog, or how to set
 -	 * the PIXARLOGDATFMT pseudo-tag.
 -	 */
 -	td->td_bitspersample = 8;
 -	td->td_sampleformat = SAMPLEFORMAT_UINT;
 -}
 -
 -static void
 -PixarLogCleanup(TIFF* tif)
 -{
 -	PixarLogState* sp = (PixarLogState*) tif->tif_data;
 -
 -	assert(sp != 0);
 -
 -	(void)TIFFPredictorCleanup(tif);
 -
 -	tif->tif_tagmethods.vgetfield = sp->vgetparent;
 -	tif->tif_tagmethods.vsetfield = sp->vsetparent;
 -
 -	if (sp->FromLT2) _TIFFfree(sp->FromLT2);
 -	if (sp->From14) _TIFFfree(sp->From14);
 -	if (sp->From8) _TIFFfree(sp->From8);
 -	if (sp->ToLinearF) _TIFFfree(sp->ToLinearF);
 -	if (sp->ToLinear16) _TIFFfree(sp->ToLinear16);
 -	if (sp->ToLinear8) _TIFFfree(sp->ToLinear8);
 -	if (sp->state&PLSTATE_INIT) {
 -		if (tif->tif_mode == O_RDONLY)
 -			inflateEnd(&sp->stream);
 -		else
 -			deflateEnd(&sp->stream);
 -	}
 -	if (sp->tbuf)
 -		_TIFFfree(sp->tbuf);
 -	_TIFFfree(sp);
 -	tif->tif_data = NULL;
 -
 -	_TIFFSetDefaultCompressionState(tif);
 -}
 -
 -static int
 -PixarLogVSetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -    PixarLogState *sp = (PixarLogState *)tif->tif_data;
 -    int result;
 -    static const char module[] = "PixarLogVSetField";
 -
 -    switch (tag) {
 -     case TIFFTAG_PIXARLOGQUALITY:
 -		sp->quality = va_arg(ap, int);
 -		if (tif->tif_mode != O_RDONLY && (sp->state&PLSTATE_INIT)) {
 -			if (deflateParams(&sp->stream,
 -			    sp->quality, Z_DEFAULT_STRATEGY) != Z_OK) {
 -				TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s",
 -					tif->tif_name, sp->stream.msg);
 -				return (0);
 -			}
 -		}
 -		return (1);
 -     case TIFFTAG_PIXARLOGDATAFMT:
 -	sp->user_datafmt = va_arg(ap, int);
 -	/* Tweak the TIFF header so that the rest of libtiff knows what
 -	 * size of data will be passed between app and library, and
 -	 * assume that the app knows what it is doing and is not
 -	 * confused by these header manipulations...
 -	 */
 -	switch (sp->user_datafmt) {
 -	 case PIXARLOGDATAFMT_8BIT:
 -	 case PIXARLOGDATAFMT_8BITABGR:
 -	    TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
 -	    TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);
 -	    break;
 -	 case PIXARLOGDATAFMT_11BITLOG:
 -	    TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 16);
 -	    TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);
 -	    break;
 -	 case PIXARLOGDATAFMT_12BITPICIO:
 -	    TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 16);
 -	    TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_INT);
 -	    break;
 -	 case PIXARLOGDATAFMT_16BIT:
 -	    TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 16);
 -	    TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);
 -	    break;
 -	 case PIXARLOGDATAFMT_FLOAT:
 -	    TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 32);
 -	    TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP);
 -	    break;
 -	}
 -	/*
 -	 * Must recalculate sizes should bits/sample change.
 -	 */
 -	tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tsize_t) -1;
 -	tif->tif_scanlinesize = TIFFScanlineSize(tif);
 -	result = 1;		/* NB: pseudo tag */
 -	break;
 -     default:
 -	result = (*sp->vsetparent)(tif, tag, ap);
 -    }
 -    return (result);
 -}
 -
 -static int
 -PixarLogVGetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -    PixarLogState *sp = (PixarLogState *)tif->tif_data;
 -
 -    switch (tag) {
 -     case TIFFTAG_PIXARLOGQUALITY:
 -	*va_arg(ap, int*) = sp->quality;
 -	break;
 -     case TIFFTAG_PIXARLOGDATAFMT:
 -	*va_arg(ap, int*) = sp->user_datafmt;
 -	break;
 -     default:
 -	return (*sp->vgetparent)(tif, tag, ap);
 -    }
 -    return (1);
 -}
 -
 -static const TIFFFieldInfo pixarlogFieldInfo[] = {
 -    {TIFFTAG_PIXARLOGDATAFMT,0,0,TIFF_ANY,  FIELD_PSEUDO,FALSE,FALSE,""},
 -    {TIFFTAG_PIXARLOGQUALITY,0,0,TIFF_ANY,  FIELD_PSEUDO,FALSE,FALSE,""}
 -};
 -
 -int
 -TIFFInitPixarLog(TIFF* tif, int scheme)
 -{
 -	static const char module[] = "TIFFInitPixarLog";
 -
 -	PixarLogState* sp;
 -
 -	assert(scheme == COMPRESSION_PIXARLOG);
 -
 -	/*
 -	 * Merge codec-specific tag information.
 -	 */
 -	if (!_TIFFMergeFieldInfo(tif, pixarlogFieldInfo,
 -				 TIFFArrayCount(pixarlogFieldInfo))) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "Merging PixarLog codec-specific tags failed");
 -		return 0;
 -	}
 -
 -	/*
 -	 * Allocate state block so tag methods have storage to record values.
 -	 */
 -	tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (PixarLogState));
 -	if (tif->tif_data == NULL)
 -		goto bad;
 -	sp = (PixarLogState*) tif->tif_data;
 -	_TIFFmemset(sp, 0, sizeof (*sp));
 -	sp->stream.data_type = Z_BINARY;
 -	sp->user_datafmt = PIXARLOGDATAFMT_UNKNOWN;
 -
 -	/*
 -	 * Install codec methods.
 -	 */
 -	tif->tif_setupdecode = PixarLogSetupDecode;
 -	tif->tif_predecode = PixarLogPreDecode;
 -	tif->tif_decoderow = PixarLogDecode;
 -	tif->tif_decodestrip = PixarLogDecode;
 -	tif->tif_decodetile = PixarLogDecode;
 -	tif->tif_setupencode = PixarLogSetupEncode;
 -	tif->tif_preencode = PixarLogPreEncode;
 -	tif->tif_postencode = PixarLogPostEncode;
 -	tif->tif_encoderow = PixarLogEncode;
 -	tif->tif_encodestrip = PixarLogEncode;
 -	tif->tif_encodetile = PixarLogEncode;
 -	tif->tif_close = PixarLogClose;
 -	tif->tif_cleanup = PixarLogCleanup;
 -
 -	/* Override SetField so we can handle our private pseudo-tag */
 -	sp->vgetparent = tif->tif_tagmethods.vgetfield;
 -	tif->tif_tagmethods.vgetfield = PixarLogVGetField;   /* hook for codec tags */
 -	sp->vsetparent = tif->tif_tagmethods.vsetfield;
 -	tif->tif_tagmethods.vsetfield = PixarLogVSetField;   /* hook for codec tags */
 -
 -	/* Default values for codec-specific fields */
 -	sp->quality = Z_DEFAULT_COMPRESSION; /* default comp. level */
 -	sp->state = 0;
 -
 -	/* we don't wish to use the predictor, 
 -	 * the default is none, which predictor value 1
 -	 */
 -	(void) TIFFPredictorInit(tif);
 -
 -	/*
 -	 * build the companding tables 
 -	 */
 -	PixarLogMakeTables(sp);
 -
 -	return (1);
 -bad:
 -	TIFFErrorExt(tif->tif_clientdata, module,
 -		     "No space for PixarLog state block");
 -	return (0);
 -}
 -#endif /* PIXARLOG_SUPPORT */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_predict.c b/plugins/FreeImage/Source/LibTIFF/tif_predict.c deleted file mode 100644 index 7f7dc636be..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_predict.c +++ /dev/null @@ -1,736 +0,0 @@ -/* $Id: tif_predict.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Predictor Tag Support (used by multiple codecs).
 - */
 -#include "tiffiop.h"
 -#include "tif_predict.h"
 -
 -#define	PredictorState(tif)	((TIFFPredictorState*) (tif)->tif_data)
 -
 -static	void horAcc8(TIFF*, tidata_t, tsize_t);
 -static	void horAcc16(TIFF*, tidata_t, tsize_t);
 -static	void horAcc32(TIFF*, tidata_t, tsize_t);
 -static	void swabHorAcc16(TIFF*, tidata_t, tsize_t);
 -static	void swabHorAcc32(TIFF*, tidata_t, tsize_t);
 -static	void horDiff8(TIFF*, tidata_t, tsize_t);
 -static	void horDiff16(TIFF*, tidata_t, tsize_t);
 -static	void horDiff32(TIFF*, tidata_t, tsize_t);
 -static	void fpAcc(TIFF*, tidata_t, tsize_t);
 -static	void fpDiff(TIFF*, tidata_t, tsize_t);
 -static	int PredictorDecodeRow(TIFF*, tidata_t, tsize_t, tsample_t);
 -static	int PredictorDecodeTile(TIFF*, tidata_t, tsize_t, tsample_t);
 -static	int PredictorEncodeRow(TIFF*, tidata_t, tsize_t, tsample_t);
 -static	int PredictorEncodeTile(TIFF*, tidata_t, tsize_t, tsample_t);
 -
 -static int
 -PredictorSetup(TIFF* tif)
 -{
 -	static const char module[] = "PredictorSetup";
 -
 -	TIFFPredictorState* sp = PredictorState(tif);
 -	TIFFDirectory* td = &tif->tif_dir;
 -
 -	switch (sp->predictor)		/* no differencing */
 -	{
 -		case PREDICTOR_NONE:
 -			return 1;
 -		case PREDICTOR_HORIZONTAL:
 -			if (td->td_bitspersample != 8
 -			    && td->td_bitspersample != 16
 -			    && td->td_bitspersample != 32) {
 -				TIFFErrorExt(tif->tif_clientdata, module,
 -    "Horizontal differencing \"Predictor\" not supported with %d-bit samples",
 -					  td->td_bitspersample);
 -				return 0;
 -			}
 -			break;
 -		case PREDICTOR_FLOATINGPOINT:
 -			if (td->td_sampleformat != SAMPLEFORMAT_IEEEFP) {
 -				TIFFErrorExt(tif->tif_clientdata, module,
 -	"Floating point \"Predictor\" not supported with %d data format",
 -					  td->td_sampleformat);
 -				return 0;
 -			}
 -			break;
 -		default:
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -				  "\"Predictor\" value %d not supported",
 -				  sp->predictor);
 -			return 0;
 -	}
 -	sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ?
 -	    td->td_samplesperpixel : 1);
 -	/*
 -	 * Calculate the scanline/tile-width size in bytes.
 -	 */
 -	if (isTiled(tif))
 -		sp->rowsize = TIFFTileRowSize(tif);
 -	else
 -		sp->rowsize = TIFFScanlineSize(tif);
 -
 -	return 1;
 -}
 -
 -static int
 -PredictorSetupDecode(TIFF* tif)
 -{
 -	TIFFPredictorState* sp = PredictorState(tif);
 -	TIFFDirectory* td = &tif->tif_dir;
 -
 -	if (!(*sp->setupdecode)(tif) || !PredictorSetup(tif))
 -		return 0;
 -
 -	if (sp->predictor == 2) {
 -		switch (td->td_bitspersample) {
 -			case 8:  sp->decodepfunc = horAcc8; break;
 -			case 16: sp->decodepfunc = horAcc16; break;
 -			case 32: sp->decodepfunc = horAcc32; break;
 -		}
 -		/*
 -		 * Override default decoding method with one that does the
 -		 * predictor stuff.
 -		 */
 -                if ( tif->tif_decoderow != PredictorDecodeRow )
 -                {
 -                    sp->decoderow = tif->tif_decoderow;
 -                    tif->tif_decoderow = PredictorDecodeRow;
 -                    sp->decodestrip = tif->tif_decodestrip;
 -                    tif->tif_decodestrip = PredictorDecodeTile;
 -                    sp->decodetile = tif->tif_decodetile;
 -                    tif->tif_decodetile = PredictorDecodeTile;
 -                }
 -		/*
 -		 * If the data is horizontally differenced 16-bit data that
 -		 * requires byte-swapping, then it must be byte swapped before
 -		 * the accumulation step.  We do this with a special-purpose
 -		 * routine and override the normal post decoding logic that
 -		 * the library setup when the directory was read.
 -		 */
 -		if (tif->tif_flags & TIFF_SWAB) {
 -			if (sp->decodepfunc == horAcc16) {
 -				sp->decodepfunc = swabHorAcc16;
 -				tif->tif_postdecode = _TIFFNoPostDecode;
 -			} else if (sp->decodepfunc == horAcc32) {
 -				sp->decodepfunc = swabHorAcc32;
 -				tif->tif_postdecode = _TIFFNoPostDecode;
 -			}
 -		}
 -	}
 -
 -	else if (sp->predictor == 3) {
 -		sp->decodepfunc = fpAcc;
 -		/*
 -		 * Override default decoding method with one that does the
 -		 * predictor stuff.
 -		 */
 -                if ( tif->tif_decoderow != PredictorDecodeRow )
 -                {
 -                    sp->decoderow = tif->tif_decoderow;
 -                    tif->tif_decoderow = PredictorDecodeRow;
 -                    sp->decodestrip = tif->tif_decodestrip;
 -                    tif->tif_decodestrip = PredictorDecodeTile;
 -                    sp->decodetile = tif->tif_decodetile;
 -                    tif->tif_decodetile = PredictorDecodeTile;
 -                }
 -		/*
 -		 * The data should not be swapped outside of the floating
 -		 * point predictor, the accumulation routine should return
 -		 * byres in the native order.
 -		 */
 -		if (tif->tif_flags & TIFF_SWAB) {
 -			tif->tif_postdecode = _TIFFNoPostDecode;
 -		}
 -		/*
 -		 * Allocate buffer to keep the decoded bytes before
 -		 * rearranging in the ight order
 -		 */
 -	}
 -
 -	return 1;
 -}
 -
 -static int
 -PredictorSetupEncode(TIFF* tif)
 -{
 -	TIFFPredictorState* sp = PredictorState(tif);
 -	TIFFDirectory* td = &tif->tif_dir;
 -
 -	if (!(*sp->setupencode)(tif) || !PredictorSetup(tif))
 -		return 0;
 -
 -	if (sp->predictor == 2) {
 -		switch (td->td_bitspersample) {
 -			case 8:  sp->encodepfunc = horDiff8; break;
 -			case 16: sp->encodepfunc = horDiff16; break;
 -			case 32: sp->encodepfunc = horDiff32; break;
 -		}
 -		/*
 -		 * Override default encoding method with one that does the
 -		 * predictor stuff.
 -		 */
 -                if ( tif->tif_encoderow != PredictorEncodeRow )
 -                {
 -                    sp->encoderow = tif->tif_encoderow;
 -                    tif->tif_encoderow = PredictorEncodeRow;
 -                    sp->encodestrip = tif->tif_encodestrip;
 -                    tif->tif_encodestrip = PredictorEncodeTile;
 -                    sp->encodetile = tif->tif_encodetile;
 -                    tif->tif_encodetile = PredictorEncodeTile;
 -                }
 -	}
 -	
 -	else if (sp->predictor == 3) {
 -		sp->encodepfunc = fpDiff;
 -		/*
 -		 * Override default encoding method with one that does the
 -		 * predictor stuff.
 -		 */
 -                if ( tif->tif_encoderow != PredictorEncodeRow )
 -                {
 -                    sp->encoderow = tif->tif_encoderow;
 -                    tif->tif_encoderow = PredictorEncodeRow;
 -                    sp->encodestrip = tif->tif_encodestrip;
 -                    tif->tif_encodestrip = PredictorEncodeTile;
 -                    sp->encodetile = tif->tif_encodetile;
 -                    tif->tif_encodetile = PredictorEncodeTile;
 -                }
 -	}
 -
 -	return 1;
 -}
 -
 -#define REPEAT4(n, op)		\
 -    switch (n) {		\
 -    default: { int i; for (i = n-4; i > 0; i--) { op; } } \
 -    case 4:  op;		\
 -    case 3:  op;		\
 -    case 2:  op;		\
 -    case 1:  op;		\
 -    case 0:  ;			\
 -    }
 -
 -static void
 -horAcc8(TIFF* tif, tidata_t cp0, tsize_t cc)
 -{
 -	tsize_t stride = PredictorState(tif)->stride;
 -
 -	char* cp = (char*) cp0;
 -	if (cc > stride) {
 -		cc -= stride;
 -		/*
 -		 * Pipeline the most common cases.
 -		 */
 -		if (stride == 3)  {
 -			unsigned int cr = cp[0];
 -			unsigned int cg = cp[1];
 -			unsigned int cb = cp[2];
 -			do {
 -				cc -= 3, cp += 3;
 -				cp[0] = (char) (cr += cp[0]);
 -				cp[1] = (char) (cg += cp[1]);
 -				cp[2] = (char) (cb += cp[2]);
 -			} while ((int32) cc > 0);
 -		} else if (stride == 4)  {
 -			unsigned int cr = cp[0];
 -			unsigned int cg = cp[1];
 -			unsigned int cb = cp[2];
 -			unsigned int ca = cp[3];
 -			do {
 -				cc -= 4, cp += 4;
 -				cp[0] = (char) (cr += cp[0]);
 -				cp[1] = (char) (cg += cp[1]);
 -				cp[2] = (char) (cb += cp[2]);
 -				cp[3] = (char) (ca += cp[3]);
 -			} while ((int32) cc > 0);
 -		} else  {
 -			do {
 -				REPEAT4(stride, cp[stride] =
 -					(char) (cp[stride] + *cp); cp++)
 -				cc -= stride;
 -			} while ((int32) cc > 0);
 -		}
 -	}
 -}
 -
 -static void
 -swabHorAcc16(TIFF* tif, tidata_t cp0, tsize_t cc)
 -{
 -	tsize_t stride = PredictorState(tif)->stride;
 -	uint16* wp = (uint16*) cp0;
 -	tsize_t wc = cc / 2;
 -
 -	if (wc > stride) {
 -		TIFFSwabArrayOfShort(wp, wc);
 -		wc -= stride;
 -		do {
 -			REPEAT4(stride, wp[stride] += wp[0]; wp++)
 -			wc -= stride;
 -		} while ((int32) wc > 0);
 -	}
 -}
 -
 -static void
 -horAcc16(TIFF* tif, tidata_t cp0, tsize_t cc)
 -{
 -	tsize_t stride = PredictorState(tif)->stride;
 -	uint16* wp = (uint16*) cp0;
 -	tsize_t wc = cc / 2;
 -
 -	if (wc > stride) {
 -		wc -= stride;
 -		do {
 -			REPEAT4(stride, wp[stride] += wp[0]; wp++)
 -			wc -= stride;
 -		} while ((int32) wc > 0);
 -	}
 -}
 -
 -static void
 -swabHorAcc32(TIFF* tif, tidata_t cp0, tsize_t cc)
 -{
 -	tsize_t stride = PredictorState(tif)->stride;
 -	uint32* wp = (uint32*) cp0;
 -	tsize_t wc = cc / 4;
 -
 -	if (wc > stride) {
 -		TIFFSwabArrayOfLong(wp, wc);
 -		wc -= stride;
 -		do {
 -			REPEAT4(stride, wp[stride] += wp[0]; wp++)
 -			wc -= stride;
 -		} while ((int32) wc > 0);
 -	}
 -}
 -
 -static void
 -horAcc32(TIFF* tif, tidata_t cp0, tsize_t cc)
 -{
 -	tsize_t stride = PredictorState(tif)->stride;
 -	uint32* wp = (uint32*) cp0;
 -	tsize_t wc = cc / 4;
 -
 -	if (wc > stride) {
 -		wc -= stride;
 -		do {
 -			REPEAT4(stride, wp[stride] += wp[0]; wp++)
 -			wc -= stride;
 -		} while ((int32) wc > 0);
 -	}
 -}
 -
 -/*
 - * Floating point predictor accumulation routine.
 - */
 -static void
 -fpAcc(TIFF* tif, tidata_t cp0, tsize_t cc)
 -{
 -	tsize_t stride = PredictorState(tif)->stride;
 -	uint32 bps = tif->tif_dir.td_bitspersample / 8;
 -	tsize_t wc = cc / bps;
 -	tsize_t count = cc;
 -	uint8 *cp = (uint8 *) cp0;
 -	uint8 *tmp = (uint8 *)_TIFFmalloc(cc);
 -
 -	if (!tmp)
 -		return;
 -
 -	while (count > stride) {
 -		REPEAT4(stride, cp[stride] += cp[0]; cp++)
 -		count -= stride;
 -	}
 -
 -	_TIFFmemcpy(tmp, cp0, cc);
 -	cp = (uint8 *) cp0;
 -	for (count = 0; count < wc; count++) {
 -		uint32 byte;
 -		for (byte = 0; byte < bps; byte++) {
 -#if WORDS_BIGENDIAN
 -			cp[bps * count + byte] = tmp[byte * wc + count];
 -#else
 -			cp[bps * count + byte] =
 -				tmp[(bps - byte - 1) * wc + count];
 -#endif
 -		}
 -	}
 -	_TIFFfree(tmp);
 -}
 -
 -/*
 - * Decode a scanline and apply the predictor routine.
 - */
 -static int
 -PredictorDecodeRow(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s)
 -{
 -	TIFFPredictorState *sp = PredictorState(tif);
 -
 -	assert(sp != NULL);
 -	assert(sp->decoderow != NULL);
 -	assert(sp->decodepfunc != NULL);
 -
 -	if ((*sp->decoderow)(tif, op0, occ0, s)) {
 -		(*sp->decodepfunc)(tif, op0, occ0);
 -		return 1;
 -	} else
 -		return 0;
 -}
 -
 -/*
 - * Decode a tile/strip and apply the predictor routine.
 - * Note that horizontal differencing must be done on a
 - * row-by-row basis.  The width of a "row" has already
 - * been calculated at pre-decode time according to the
 - * strip/tile dimensions.
 - */
 -static int
 -PredictorDecodeTile(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s)
 -{
 -	TIFFPredictorState *sp = PredictorState(tif);
 -
 -	assert(sp != NULL);
 -	assert(sp->decodetile != NULL);
 -
 -	if ((*sp->decodetile)(tif, op0, occ0, s)) {
 -		tsize_t rowsize = sp->rowsize;
 -		assert(rowsize > 0);
 -		assert(sp->decodepfunc != NULL);
 -		while ((long)occ0 > 0) {
 -			(*sp->decodepfunc)(tif, op0, (tsize_t) rowsize);
 -			occ0 -= rowsize;
 -			op0 += rowsize;
 -		}
 -		return 1;
 -	} else
 -		return 0;
 -}
 -
 -static void
 -horDiff8(TIFF* tif, tidata_t cp0, tsize_t cc)
 -{
 -	TIFFPredictorState* sp = PredictorState(tif);
 -	tsize_t stride = sp->stride;
 -	char* cp = (char*) cp0;
 -
 -	if (cc > stride) {
 -		cc -= stride;
 -		/*
 -		 * Pipeline the most common cases.
 -		 */
 -		if (stride == 3) {
 -			int r1, g1, b1;
 -			int r2 = cp[0];
 -			int g2 = cp[1];
 -			int b2 = cp[2];
 -			do {
 -				r1 = cp[3]; cp[3] = r1-r2; r2 = r1;
 -				g1 = cp[4]; cp[4] = g1-g2; g2 = g1;
 -				b1 = cp[5]; cp[5] = b1-b2; b2 = b1;
 -				cp += 3;
 -			} while ((int32)(cc -= 3) > 0);
 -		} else if (stride == 4) {
 -			int r1, g1, b1, a1;
 -			int r2 = cp[0];
 -			int g2 = cp[1];
 -			int b2 = cp[2];
 -			int a2 = cp[3];
 -			do {
 -				r1 = cp[4]; cp[4] = r1-r2; r2 = r1;
 -				g1 = cp[5]; cp[5] = g1-g2; g2 = g1;
 -				b1 = cp[6]; cp[6] = b1-b2; b2 = b1;
 -				a1 = cp[7]; cp[7] = a1-a2; a2 = a1;
 -				cp += 4;
 -			} while ((int32)(cc -= 4) > 0);
 -		} else {
 -			cp += cc - 1;
 -			do {
 -				REPEAT4(stride, cp[stride] -= cp[0]; cp--)
 -			} while ((int32)(cc -= stride) > 0);
 -		}
 -	}
 -}
 -
 -static void
 -horDiff16(TIFF* tif, tidata_t cp0, tsize_t cc)
 -{
 -	TIFFPredictorState* sp = PredictorState(tif);
 -	tsize_t stride = sp->stride;
 -	int16 *wp = (int16*) cp0;
 -	tsize_t wc = cc/2;
 -
 -	if (wc > stride) {
 -		wc -= stride;
 -		wp += wc - 1;
 -		do {
 -			REPEAT4(stride, wp[stride] -= wp[0]; wp--)
 -			wc -= stride;
 -		} while ((int32) wc > 0);
 -	}
 -}
 -
 -static void
 -horDiff32(TIFF* tif, tidata_t cp0, tsize_t cc)
 -{
 -	TIFFPredictorState* sp = PredictorState(tif);
 -	tsize_t stride = sp->stride;
 -	int32 *wp = (int32*) cp0;
 -	tsize_t wc = cc/4;
 -
 -	if (wc > stride) {
 -		wc -= stride;
 -		wp += wc - 1;
 -		do {
 -			REPEAT4(stride, wp[stride] -= wp[0]; wp--)
 -			wc -= stride;
 -		} while ((int32) wc > 0);
 -	}
 -}
 -
 -/*
 - * Floating point predictor differencing routine.
 - */
 -static void
 -fpDiff(TIFF* tif, tidata_t cp0, tsize_t cc)
 -{
 -	tsize_t stride = PredictorState(tif)->stride;
 -	uint32 bps = tif->tif_dir.td_bitspersample / 8;
 -	tsize_t wc = cc / bps;
 -	tsize_t count;
 -	uint8 *cp = (uint8 *) cp0;
 -	uint8 *tmp = (uint8 *)_TIFFmalloc(cc);
 -
 -	if (!tmp)
 -		return;
 -
 -	_TIFFmemcpy(tmp, cp0, cc);
 -	for (count = 0; count < wc; count++) {
 -		uint32 byte;
 -		for (byte = 0; byte < bps; byte++) {
 -#if WORDS_BIGENDIAN
 -			cp[byte * wc + count] =	tmp[bps * count + byte];
 -#else
 -			cp[(bps - byte - 1) * wc + count] =
 -				tmp[bps * count + byte];
 -#endif
 -		}
 -	}
 -	_TIFFfree(tmp);
 -
 -	cp = (uint8 *) cp0;
 -	cp += cc - stride - 1;
 -	for (count = cc; count > stride; count -= stride)
 -		REPEAT4(stride, cp[stride] -= cp[0]; cp--)
 -}
 -
 -static int
 -PredictorEncodeRow(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	TIFFPredictorState *sp = PredictorState(tif);
 -
 -	assert(sp != NULL);
 -	assert(sp->encodepfunc != NULL);
 -	assert(sp->encoderow != NULL);
 -
 -	/* XXX horizontal differencing alters user's data XXX */
 -	(*sp->encodepfunc)(tif, bp, cc);
 -	return (*sp->encoderow)(tif, bp, cc, s);
 -}
 -
 -static int
 -PredictorEncodeTile(TIFF* tif, tidata_t bp0, tsize_t cc0, tsample_t s)
 -{
 -	static const char module[] = "PredictorEncodeTile";
 -	TIFFPredictorState *sp = PredictorState(tif);
 -        uint8 *working_copy;
 -	tsize_t cc = cc0, rowsize;
 -	unsigned char* bp;
 -        int result_code;
 -
 -	assert(sp != NULL);
 -	assert(sp->encodepfunc != NULL);
 -	assert(sp->encodetile != NULL);
 -
 -        /* 
 -         * Do predictor manipulation in a working buffer to avoid altering
 -         * the callers buffer. http://trac.osgeo.org/gdal/ticket/1965
 -         */
 -        working_copy = (uint8*) _TIFFmalloc(cc0);
 -        if ( working_copy == NULL )
 -        {
 -            TIFFErrorExt(tif->tif_clientdata, module, 
 -                         "Out of memory allocating %d byte temp buffer.",
 -                         cc0 );
 -            return 0;
 -        }
 -        memcpy( working_copy, bp0, cc0 );
 -        bp = working_copy;
 -
 -	rowsize = sp->rowsize;
 -	assert(rowsize > 0);
 -	assert((cc0%rowsize)==0);
 -	while (cc > 0) {
 -		(*sp->encodepfunc)(tif, bp, rowsize);
 -		cc -= rowsize;
 -		bp += rowsize;
 -	}
 -	result_code = (*sp->encodetile)(tif, working_copy, cc0, s);
 -
 -        _TIFFfree( working_copy );
 -
 -        return result_code;
 -}
 -
 -#define	FIELD_PREDICTOR	(FIELD_CODEC+0)		/* XXX */
 -
 -static const TIFFFieldInfo predictFieldInfo[] = {
 -    { TIFFTAG_PREDICTOR,	 1, 1, TIFF_SHORT,	FIELD_PREDICTOR,
 -      FALSE,	FALSE,	"Predictor" },
 -};
 -
 -static int
 -PredictorVSetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	TIFFPredictorState *sp = PredictorState(tif);
 -
 -	assert(sp != NULL);
 -	assert(sp->vsetparent != NULL);
 -
 -	switch (tag) {
 -	case TIFFTAG_PREDICTOR:
 -		sp->predictor = (uint16) va_arg(ap, int);
 -		TIFFSetFieldBit(tif, FIELD_PREDICTOR);
 -		break;
 -	default:
 -		return (*sp->vsetparent)(tif, tag, ap);
 -	}
 -	tif->tif_flags |= TIFF_DIRTYDIRECT;
 -	return 1;
 -}
 -
 -static int
 -PredictorVGetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	TIFFPredictorState *sp = PredictorState(tif);
 -
 -	assert(sp != NULL);
 -	assert(sp->vgetparent != NULL);
 -
 -	switch (tag) {
 -	case TIFFTAG_PREDICTOR:
 -		*va_arg(ap, uint16*) = sp->predictor;
 -		break;
 -	default:
 -		return (*sp->vgetparent)(tif, tag, ap);
 -	}
 -	return 1;
 -}
 -
 -static void
 -PredictorPrintDir(TIFF* tif, FILE* fd, long flags)
 -{
 -	TIFFPredictorState* sp = PredictorState(tif);
 -
 -	(void) flags;
 -	if (TIFFFieldSet(tif,FIELD_PREDICTOR)) {
 -		fprintf(fd, "  Predictor: ");
 -		switch (sp->predictor) {
 -		case 1: fprintf(fd, "none "); break;
 -		case 2: fprintf(fd, "horizontal differencing "); break;
 -		case 3: fprintf(fd, "floating point predictor "); break;
 -		}
 -		fprintf(fd, "%u (0x%x)\n", sp->predictor, sp->predictor);
 -	}
 -	if (sp->printdir)
 -		(*sp->printdir)(tif, fd, flags);
 -}
 -
 -int
 -TIFFPredictorInit(TIFF* tif)
 -{
 -	TIFFPredictorState* sp = PredictorState(tif);
 -
 -	assert(sp != 0);
 -
 -	/*
 -	 * Merge codec-specific tag information.
 -	 */
 -	if (!_TIFFMergeFieldInfo(tif, predictFieldInfo,
 -				 TIFFArrayCount(predictFieldInfo))) {
 -		TIFFErrorExt(tif->tif_clientdata, "TIFFPredictorInit",
 -			     "Merging Predictor codec-specific tags failed");
 -		return 0;
 -	}
 -
 -	/*
 -	 * Override parent get/set field methods.
 -	 */
 -	sp->vgetparent = tif->tif_tagmethods.vgetfield;
 -	tif->tif_tagmethods.vgetfield =
 -            PredictorVGetField;/* hook for predictor tag */
 -	sp->vsetparent = tif->tif_tagmethods.vsetfield;
 -	tif->tif_tagmethods.vsetfield =
 -            PredictorVSetField;/* hook for predictor tag */
 -	sp->printdir = tif->tif_tagmethods.printdir;
 -	tif->tif_tagmethods.printdir =
 -            PredictorPrintDir;	/* hook for predictor tag */
 -
 -	sp->setupdecode = tif->tif_setupdecode;
 -	tif->tif_setupdecode = PredictorSetupDecode;
 -	sp->setupencode = tif->tif_setupencode;
 -	tif->tif_setupencode = PredictorSetupEncode;
 -
 -	sp->predictor = 1;			/* default value */
 -	sp->encodepfunc = NULL;			/* no predictor routine */
 -	sp->decodepfunc = NULL;			/* no predictor routine */
 -	return 1;
 -}
 -
 -int
 -TIFFPredictorCleanup(TIFF* tif)
 -{
 -	TIFFPredictorState* sp = PredictorState(tif);
 -
 -	assert(sp != 0);
 -
 -	tif->tif_tagmethods.vgetfield = sp->vgetparent;
 -	tif->tif_tagmethods.vsetfield = sp->vsetparent;
 -	tif->tif_tagmethods.printdir = sp->printdir;
 -	tif->tif_setupdecode = sp->setupdecode;
 -	tif->tif_setupencode = sp->setupencode;
 -
 -	return 1;
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_predict.h b/plugins/FreeImage/Source/LibTIFF/tif_predict.h deleted file mode 100644 index 6675d9b2a7..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_predict.h +++ /dev/null @@ -1,77 +0,0 @@ -/* $Id: tif_predict.h,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1995-1997 Sam Leffler
 - * Copyright (c) 1995-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#ifndef _TIFFPREDICT_
 -#define	_TIFFPREDICT_
 -/*
 - * ``Library-private'' Support for the Predictor Tag
 - */
 -
 -/*
 - * Codecs that want to support the Predictor tag must place
 - * this structure first in their private state block so that
 - * the predictor code can cast tif_data to find its state.
 - */
 -typedef struct {
 -	int		predictor;	/* predictor tag value */
 -	int		stride;		/* sample stride over data */
 -	tsize_t		rowsize;	/* tile/strip row size */
 -
 - 	TIFFCodeMethod  encoderow;	/* parent codec encode/decode row */
 - 	TIFFCodeMethod  encodestrip;	/* parent codec encode/decode strip */
 - 	TIFFCodeMethod  encodetile;	/* parent codec encode/decode tile */ 
 - 	TIFFPostMethod  encodepfunc;	/* horizontal differencer */
 - 
 - 	TIFFCodeMethod  decoderow;	/* parent codec encode/decode row */
 - 	TIFFCodeMethod  decodestrip;	/* parent codec encode/decode strip */
 - 	TIFFCodeMethod  decodetile;	/* parent codec encode/decode tile */ 
 - 	TIFFPostMethod  decodepfunc;	/* horizontal accumulator */
 -
 -	TIFFVGetMethod	vgetparent;	/* super-class method */
 -	TIFFVSetMethod	vsetparent;	/* super-class method */
 -	TIFFPrintMethod	printdir;	/* super-class method */
 -	TIFFBoolMethod	setupdecode;	/* super-class method */
 -	TIFFBoolMethod	setupencode;	/* super-class method */
 -} TIFFPredictorState;
 -
 -#if defined(__cplusplus)
 -extern "C" {
 -#endif
 -extern	int TIFFPredictorInit(TIFF*);
 -extern	int TIFFPredictorCleanup(TIFF*);
 -#if defined(__cplusplus)
 -}
 -#endif
 -#endif /* _TIFFPREDICT_ */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_print.c b/plugins/FreeImage/Source/LibTIFF/tif_print.c deleted file mode 100644 index 50663396df..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_print.c +++ /dev/null @@ -1,642 +0,0 @@ -/* $Id: tif_print.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Directory Printing Support
 - */
 -#include "tiffiop.h"
 -#include <stdio.h>
 -#include <string.h>
 -#include <ctype.h>
 -
 -static const char *photoNames[] = {
 -    "min-is-white",				/* PHOTOMETRIC_MINISWHITE */
 -    "min-is-black",				/* PHOTOMETRIC_MINISBLACK */
 -    "RGB color",				/* PHOTOMETRIC_RGB */
 -    "palette color (RGB from colormap)",	/* PHOTOMETRIC_PALETTE */
 -    "transparency mask",			/* PHOTOMETRIC_MASK */
 -    "separated",				/* PHOTOMETRIC_SEPARATED */
 -    "YCbCr",					/* PHOTOMETRIC_YCBCR */
 -    "7 (0x7)",
 -    "CIE L*a*b*",				/* PHOTOMETRIC_CIELAB */
 -};
 -#define	NPHOTONAMES	(sizeof (photoNames) / sizeof (photoNames[0]))
 -
 -static const char *orientNames[] = {
 -    "0 (0x0)",
 -    "row 0 top, col 0 lhs",			/* ORIENTATION_TOPLEFT */
 -    "row 0 top, col 0 rhs",			/* ORIENTATION_TOPRIGHT */
 -    "row 0 bottom, col 0 rhs",			/* ORIENTATION_BOTRIGHT */
 -    "row 0 bottom, col 0 lhs",			/* ORIENTATION_BOTLEFT */
 -    "row 0 lhs, col 0 top",			/* ORIENTATION_LEFTTOP */
 -    "row 0 rhs, col 0 top",			/* ORIENTATION_RIGHTTOP */
 -    "row 0 rhs, col 0 bottom",			/* ORIENTATION_RIGHTBOT */
 -    "row 0 lhs, col 0 bottom",			/* ORIENTATION_LEFTBOT */
 -};
 -#define	NORIENTNAMES	(sizeof (orientNames) / sizeof (orientNames[0]))
 -
 -static void
 -_TIFFPrintField(FILE* fd, const TIFFFieldInfo *fip,
 -		uint32 value_count, void *raw_data)
 -{
 -	uint32 j;
 -		
 -	fprintf(fd, "  %s: ", fip->field_name);
 -
 -	for(j = 0; j < value_count; j++) {
 -		if(fip->field_type == TIFF_BYTE)
 -			fprintf(fd, "%u", ((uint8 *) raw_data)[j]);
 -		else if(fip->field_type == TIFF_UNDEFINED)
 -			fprintf(fd, "0x%x",
 -				(unsigned int) ((unsigned char *) raw_data)[j]);
 -		else if(fip->field_type == TIFF_SBYTE)
 -			fprintf(fd, "%d", ((int8 *) raw_data)[j]);
 -		else if(fip->field_type == TIFF_SHORT)
 -			fprintf(fd, "%u", ((uint16 *) raw_data)[j]);
 -		else if(fip->field_type == TIFF_SSHORT)
 -			fprintf(fd, "%d", ((int16 *) raw_data)[j]);
 -		else if(fip->field_type == TIFF_LONG)
 -			fprintf(fd, "%lu",
 -				(unsigned long)((uint32 *) raw_data)[j]);
 -		else if(fip->field_type == TIFF_SLONG)
 -			fprintf(fd, "%ld", (long)((int32 *) raw_data)[j]);
 -		else if(fip->field_type == TIFF_RATIONAL
 -			|| fip->field_type == TIFF_SRATIONAL
 -			|| fip->field_type == TIFF_FLOAT)
 -			fprintf(fd, "%f", ((float *) raw_data)[j]);
 -		else if(fip->field_type == TIFF_IFD)
 -			fprintf(fd, "0x%ulx", ((uint32 *) raw_data)[j]);
 -		else if(fip->field_type == TIFF_ASCII) {
 -			fprintf(fd, "%s", (char *) raw_data);
 -			break;
 -		}
 -		else if(fip->field_type == TIFF_DOUBLE)
 -			fprintf(fd, "%f", ((double *) raw_data)[j]);
 -		else if(fip->field_type == TIFF_FLOAT)
 -			fprintf(fd, "%f", ((float *)raw_data)[j]);
 -		else {
 -			fprintf(fd, "<unsupported data type in TIFFPrint>");
 -			break;
 -		}
 -
 -		if(j < value_count - 1)
 -			fprintf(fd, ",");
 -	}
 -
 -	fprintf(fd, "\n");
 -}
 -
 -static int
 -_TIFFPrettyPrintField(TIFF* tif, FILE* fd, ttag_t tag,
 -		      uint32 value_count, void *raw_data)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	switch (tag)
 -	{
 -		case TIFFTAG_INKSET:
 -			fprintf(fd, "  Ink Set: ");
 -			switch (*((uint16*)raw_data)) {
 -				case INKSET_CMYK:
 -					fprintf(fd, "CMYK\n");
 -					break;
 -				default:
 -					fprintf(fd, "%u (0x%x)\n",
 -						*((uint16*)raw_data),
 -						*((uint16*)raw_data));
 -					break;
 -			}
 -			return 1;
 -		case TIFFTAG_WHITEPOINT:
 -			fprintf(fd, "  White Point: %g-%g\n",
 -				((float *)raw_data)[0], ((float *)raw_data)[1]);			return 1;
 -		case TIFFTAG_REFERENCEBLACKWHITE:
 -		{
 -			uint16 i;
 -
 -			fprintf(fd, "  Reference Black/White:\n");
 -			for (i = 0; i < 3; i++)
 -			fprintf(fd, "    %2d: %5g %5g\n", i,
 -				((float *)raw_data)[2*i+0],
 -				((float *)raw_data)[2*i+1]);
 -			return 1;
 -		}
 -		case TIFFTAG_XMLPACKET:
 -		{
 -			uint32 i;
 -			
 -			fprintf(fd, "  XMLPacket (XMP Metadata):\n" );
 -			for(i = 0; i < value_count; i++)
 -				fputc(((char *)raw_data)[i], fd);
 -			fprintf( fd, "\n" );
 -			return 1;
 -		}
 -		case TIFFTAG_RICHTIFFIPTC:
 -			/*
 -			 * XXX: for some weird reason RichTIFFIPTC tag
 -			 * defined as array of LONG values.
 -			 */
 -			fprintf(fd,
 -				"  RichTIFFIPTC Data: <present>, %lu bytes\n",
 -				(unsigned long) value_count * 4);
 -			return 1;
 -		case TIFFTAG_PHOTOSHOP:
 -			fprintf(fd, "  Photoshop Data: <present>, %lu bytes\n",
 -				(unsigned long) value_count);
 -			return 1;
 -		case TIFFTAG_ICCPROFILE:
 -			fprintf(fd, "  ICC Profile: <present>, %lu bytes\n",
 -				(unsigned long) value_count);
 -			return 1;
 -		case TIFFTAG_STONITS:
 -			fprintf(fd,
 -				"  Sample to Nits conversion factor: %.4e\n",
 -				*((double*)raw_data));
 -			return 1;
 -        }
 -
 -	return 0;
 -}
 -
 -/*
 - * Print the contents of the current directory
 - * to the specified stdio file stream.
 - */
 -void
 -TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	char *sep;
 -	uint16 i;
 -	long l, n;
 -
 -	fprintf(fd, "TIFF Directory at offset 0x%lx (%lu)\n",
 -		(unsigned long)tif->tif_diroff, (unsigned long)tif->tif_diroff);
 -	if (TIFFFieldSet(tif,FIELD_SUBFILETYPE)) {
 -		fprintf(fd, "  Subfile Type:");
 -		sep = " ";
 -		if (td->td_subfiletype & FILETYPE_REDUCEDIMAGE) {
 -			fprintf(fd, "%sreduced-resolution image", sep);
 -			sep = "/";
 -		}
 -		if (td->td_subfiletype & FILETYPE_PAGE) {
 -			fprintf(fd, "%smulti-page document", sep);
 -			sep = "/";
 -		}
 -		if (td->td_subfiletype & FILETYPE_MASK)
 -			fprintf(fd, "%stransparency mask", sep);
 -		fprintf(fd, " (%lu = 0x%lx)\n",
 -		    (long) td->td_subfiletype, (long) td->td_subfiletype);
 -	}
 -	if (TIFFFieldSet(tif,FIELD_IMAGEDIMENSIONS)) {
 -		fprintf(fd, "  Image Width: %lu Image Length: %lu",
 -		    (unsigned long) td->td_imagewidth, (unsigned long) td->td_imagelength);
 -		if (TIFFFieldSet(tif,FIELD_IMAGEDEPTH))
 -			fprintf(fd, " Image Depth: %lu",
 -			    (unsigned long) td->td_imagedepth);
 -		fprintf(fd, "\n");
 -	}
 -	if (TIFFFieldSet(tif,FIELD_TILEDIMENSIONS)) {
 -		fprintf(fd, "  Tile Width: %lu Tile Length: %lu",
 -		    (unsigned long) td->td_tilewidth, (unsigned long) td->td_tilelength);
 -		if (TIFFFieldSet(tif,FIELD_TILEDEPTH))
 -			fprintf(fd, " Tile Depth: %lu",
 -			    (unsigned long) td->td_tiledepth);
 -		fprintf(fd, "\n");
 -	}
 -	if (TIFFFieldSet(tif,FIELD_RESOLUTION)) {
 -		fprintf(fd, "  Resolution: %g, %g",
 -		    td->td_xresolution, td->td_yresolution);
 -		if (TIFFFieldSet(tif,FIELD_RESOLUTIONUNIT)) {
 -			switch (td->td_resolutionunit) {
 -			case RESUNIT_NONE:
 -				fprintf(fd, " (unitless)");
 -				break;
 -			case RESUNIT_INCH:
 -				fprintf(fd, " pixels/inch");
 -				break;
 -			case RESUNIT_CENTIMETER:
 -				fprintf(fd, " pixels/cm");
 -				break;
 -			default:
 -				fprintf(fd, " (unit %u = 0x%x)",
 -				    td->td_resolutionunit,
 -				    td->td_resolutionunit);
 -				break;
 -			}
 -		}
 -		fprintf(fd, "\n");
 -	}
 -	if (TIFFFieldSet(tif,FIELD_POSITION))
 -		fprintf(fd, "  Position: %g, %g\n",
 -		    td->td_xposition, td->td_yposition);
 -	if (TIFFFieldSet(tif,FIELD_BITSPERSAMPLE))
 -		fprintf(fd, "  Bits/Sample: %u\n", td->td_bitspersample);
 -	if (TIFFFieldSet(tif,FIELD_SAMPLEFORMAT)) {
 -		fprintf(fd, "  Sample Format: ");
 -		switch (td->td_sampleformat) {
 -		case SAMPLEFORMAT_VOID:
 -			fprintf(fd, "void\n");
 -			break;
 -		case SAMPLEFORMAT_INT:
 -			fprintf(fd, "signed integer\n");
 -			break;
 -		case SAMPLEFORMAT_UINT:
 -			fprintf(fd, "unsigned integer\n");
 -			break;
 -		case SAMPLEFORMAT_IEEEFP:
 -			fprintf(fd, "IEEE floating point\n");
 -			break;
 -		case SAMPLEFORMAT_COMPLEXINT:
 -			fprintf(fd, "complex signed integer\n");
 -			break;
 -		case SAMPLEFORMAT_COMPLEXIEEEFP:
 -			fprintf(fd, "complex IEEE floating point\n");
 -			break;
 -		default:
 -			fprintf(fd, "%u (0x%x)\n",
 -			    td->td_sampleformat, td->td_sampleformat);
 -			break;
 -		}
 -	}
 -	if (TIFFFieldSet(tif,FIELD_COMPRESSION)) {
 -		const TIFFCodec* c = TIFFFindCODEC(td->td_compression);
 -		fprintf(fd, "  Compression Scheme: ");
 -		if (c)
 -			fprintf(fd, "%s\n", c->name);
 -		else
 -			fprintf(fd, "%u (0x%x)\n",
 -			    td->td_compression, td->td_compression);
 -	}
 -	if (TIFFFieldSet(tif,FIELD_PHOTOMETRIC)) {
 -		fprintf(fd, "  Photometric Interpretation: ");
 -		if (td->td_photometric < NPHOTONAMES)
 -			fprintf(fd, "%s\n", photoNames[td->td_photometric]);
 -		else {
 -			switch (td->td_photometric) {
 -			case PHOTOMETRIC_LOGL:
 -				fprintf(fd, "CIE Log2(L)\n");
 -				break;
 -			case PHOTOMETRIC_LOGLUV:
 -				fprintf(fd, "CIE Log2(L) (u',v')\n");
 -				break;
 -			default:
 -				fprintf(fd, "%u (0x%x)\n",
 -				    td->td_photometric, td->td_photometric);
 -				break;
 -			}
 -		}
 -	}
 -	if (TIFFFieldSet(tif,FIELD_EXTRASAMPLES) && td->td_extrasamples) {
 -		fprintf(fd, "  Extra Samples: %u<", td->td_extrasamples);
 -		sep = "";
 -		for (i = 0; i < td->td_extrasamples; i++) {
 -			switch (td->td_sampleinfo[i]) {
 -			case EXTRASAMPLE_UNSPECIFIED:
 -				fprintf(fd, "%sunspecified", sep);
 -				break;
 -			case EXTRASAMPLE_ASSOCALPHA:
 -				fprintf(fd, "%sassoc-alpha", sep);
 -				break;
 -			case EXTRASAMPLE_UNASSALPHA:
 -				fprintf(fd, "%sunassoc-alpha", sep);
 -				break;
 -			default:
 -				fprintf(fd, "%s%u (0x%x)", sep,
 -				    td->td_sampleinfo[i], td->td_sampleinfo[i]);
 -				break;
 -			}
 -			sep = ", ";
 -		}
 -		fprintf(fd, ">\n");
 -	}
 -	if (TIFFFieldSet(tif,FIELD_INKNAMES)) {
 -		char* cp;
 -		fprintf(fd, "  Ink Names: ");
 -		i = td->td_samplesperpixel;
 -		sep = "";
 -		for (cp = td->td_inknames; i > 0; cp = strchr(cp,'\0')+1, i--) {
 -			fputs(sep, fd);
 -			_TIFFprintAscii(fd, cp);
 -			sep = ", ";
 -		}
 -                fputs("\n", fd);
 -	}
 -	if (TIFFFieldSet(tif,FIELD_THRESHHOLDING)) {
 -		fprintf(fd, "  Thresholding: ");
 -		switch (td->td_threshholding) {
 -		case THRESHHOLD_BILEVEL:
 -			fprintf(fd, "bilevel art scan\n");
 -			break;
 -		case THRESHHOLD_HALFTONE:
 -			fprintf(fd, "halftone or dithered scan\n");
 -			break;
 -		case THRESHHOLD_ERRORDIFFUSE:
 -			fprintf(fd, "error diffused\n");
 -			break;
 -		default:
 -			fprintf(fd, "%u (0x%x)\n",
 -			    td->td_threshholding, td->td_threshholding);
 -			break;
 -		}
 -	}
 -	if (TIFFFieldSet(tif,FIELD_FILLORDER)) {
 -		fprintf(fd, "  FillOrder: ");
 -		switch (td->td_fillorder) {
 -		case FILLORDER_MSB2LSB:
 -			fprintf(fd, "msb-to-lsb\n");
 -			break;
 -		case FILLORDER_LSB2MSB:
 -			fprintf(fd, "lsb-to-msb\n");
 -			break;
 -		default:
 -			fprintf(fd, "%u (0x%x)\n",
 -			    td->td_fillorder, td->td_fillorder);
 -			break;
 -		}
 -	}
 -	if (TIFFFieldSet(tif,FIELD_YCBCRSUBSAMPLING))
 -        {
 -            /*
 -             * For hacky reasons (see tif_jpeg.c - JPEGFixupTestSubsampling),
 -             * we need to fetch this rather than trust what is in our
 -             * structures.
 -             */
 -            uint16 subsampling[2];
 -
 -            TIFFGetField( tif, TIFFTAG_YCBCRSUBSAMPLING, 
 -                          subsampling + 0, subsampling + 1 );
 -		fprintf(fd, "  YCbCr Subsampling: %u, %u\n",
 -                        subsampling[0], subsampling[1] );
 -        }
 -	if (TIFFFieldSet(tif,FIELD_YCBCRPOSITIONING)) {
 -		fprintf(fd, "  YCbCr Positioning: ");
 -		switch (td->td_ycbcrpositioning) {
 -		case YCBCRPOSITION_CENTERED:
 -			fprintf(fd, "centered\n");
 -			break;
 -		case YCBCRPOSITION_COSITED:
 -			fprintf(fd, "cosited\n");
 -			break;
 -		default:
 -			fprintf(fd, "%u (0x%x)\n",
 -			    td->td_ycbcrpositioning, td->td_ycbcrpositioning);
 -			break;
 -		}
 -	}
 -	if (TIFFFieldSet(tif,FIELD_HALFTONEHINTS))
 -		fprintf(fd, "  Halftone Hints: light %u dark %u\n",
 -		    td->td_halftonehints[0], td->td_halftonehints[1]);
 -	if (TIFFFieldSet(tif,FIELD_ORIENTATION)) {
 -		fprintf(fd, "  Orientation: ");
 -		if (td->td_orientation < NORIENTNAMES)
 -			fprintf(fd, "%s\n", orientNames[td->td_orientation]);
 -		else
 -			fprintf(fd, "%u (0x%x)\n",
 -			    td->td_orientation, td->td_orientation);
 -	}
 -	if (TIFFFieldSet(tif,FIELD_SAMPLESPERPIXEL))
 -		fprintf(fd, "  Samples/Pixel: %u\n", td->td_samplesperpixel);
 -	if (TIFFFieldSet(tif,FIELD_ROWSPERSTRIP)) {
 -		fprintf(fd, "  Rows/Strip: ");
 -		if (td->td_rowsperstrip == (uint32) -1)
 -			fprintf(fd, "(infinite)\n");
 -		else
 -			fprintf(fd, "%lu\n", (unsigned long) td->td_rowsperstrip);
 -	}
 -	if (TIFFFieldSet(tif,FIELD_MINSAMPLEVALUE))
 -		fprintf(fd, "  Min Sample Value: %u\n", td->td_minsamplevalue);
 -	if (TIFFFieldSet(tif,FIELD_MAXSAMPLEVALUE))
 -		fprintf(fd, "  Max Sample Value: %u\n", td->td_maxsamplevalue);
 -	if (TIFFFieldSet(tif,FIELD_SMINSAMPLEVALUE))
 -		fprintf(fd, "  SMin Sample Value: %g\n",
 -		    td->td_sminsamplevalue);
 -	if (TIFFFieldSet(tif,FIELD_SMAXSAMPLEVALUE))
 -		fprintf(fd, "  SMax Sample Value: %g\n",
 -		    td->td_smaxsamplevalue);
 -	if (TIFFFieldSet(tif,FIELD_PLANARCONFIG)) {
 -		fprintf(fd, "  Planar Configuration: ");
 -		switch (td->td_planarconfig) {
 -		case PLANARCONFIG_CONTIG:
 -			fprintf(fd, "single image plane\n");
 -			break;
 -		case PLANARCONFIG_SEPARATE:
 -			fprintf(fd, "separate image planes\n");
 -			break;
 -		default:
 -			fprintf(fd, "%u (0x%x)\n",
 -			    td->td_planarconfig, td->td_planarconfig);
 -			break;
 -		}
 -	}
 -	if (TIFFFieldSet(tif,FIELD_PAGENUMBER))
 -		fprintf(fd, "  Page Number: %u-%u\n",
 -		    td->td_pagenumber[0], td->td_pagenumber[1]);
 -	if (TIFFFieldSet(tif,FIELD_COLORMAP)) {
 -		fprintf(fd, "  Color Map: ");
 -		if (flags & TIFFPRINT_COLORMAP) {
 -			fprintf(fd, "\n");
 -			n = 1L<<td->td_bitspersample;
 -			for (l = 0; l < n; l++)
 -				fprintf(fd, "   %5lu: %5u %5u %5u\n",
 -				    l,
 -				    td->td_colormap[0][l],
 -				    td->td_colormap[1][l],
 -				    td->td_colormap[2][l]);
 -		} else
 -			fprintf(fd, "(present)\n");
 -	}
 -	if (TIFFFieldSet(tif,FIELD_TRANSFERFUNCTION)) {
 -		fprintf(fd, "  Transfer Function: ");
 -		if (flags & TIFFPRINT_CURVES) {
 -			fprintf(fd, "\n");
 -			n = 1L<<td->td_bitspersample;
 -			for (l = 0; l < n; l++) {
 -				fprintf(fd, "    %2lu: %5u",
 -				    l, td->td_transferfunction[0][l]);
 -				for (i = 1; i < td->td_samplesperpixel; i++)
 -					fprintf(fd, " %5u",
 -					    td->td_transferfunction[i][l]);
 -				fputc('\n', fd);
 -			}
 -		} else
 -			fprintf(fd, "(present)\n");
 -	}
 -	if (TIFFFieldSet(tif, FIELD_SUBIFD) && (td->td_subifd)) {
 -		fprintf(fd, "  SubIFD Offsets:");
 -		for (i = 0; i < td->td_nsubifd; i++)
 -			fprintf(fd, " %5lu", (long) td->td_subifd[i]);
 -		fputc('\n', fd);
 -	}
 -
 -        /*
 -        ** Custom tag support.
 -        */
 -        {
 -            int  i;
 -            short count;
 -
 -            count = (short) TIFFGetTagListCount(tif);
 -            for(i = 0; i < count; i++) {
 -                ttag_t  tag = TIFFGetTagListEntry(tif, i);
 -                const TIFFFieldInfo *fip;
 -                uint32 value_count;
 -                int mem_alloc = 0;
 -                void *raw_data;
 -
 -                fip = TIFFFieldWithTag(tif, tag);
 -                if(fip == NULL)
 -			continue;
 -
 -		if(fip->field_passcount) {
 -			if(TIFFGetField(tif, tag, &value_count, &raw_data) != 1)
 -				continue;
 -		} else {
 -			if (fip->field_readcount == TIFF_VARIABLE
 -			    || fip->field_readcount == TIFF_VARIABLE2)
 -				value_count = 1;
 -			else if (fip->field_readcount == TIFF_SPP)
 -				value_count = td->td_samplesperpixel;
 -			else
 -				value_count = fip->field_readcount;
 -			if ((fip->field_type == TIFF_ASCII
 -			     || fip->field_readcount == TIFF_VARIABLE
 -			     || fip->field_readcount == TIFF_VARIABLE2
 -			     || fip->field_readcount == TIFF_SPP
 -			     || value_count > 1)
 -			    && fip->field_tag != TIFFTAG_PAGENUMBER
 -			    && fip->field_tag != TIFFTAG_HALFTONEHINTS
 -			    && fip->field_tag != TIFFTAG_YCBCRSUBSAMPLING
 -			    && fip->field_tag != TIFFTAG_DOTRANGE) {
 -				if(TIFFGetField(tif, tag, &raw_data) != 1)
 -					continue;
 -			} else if (fip->field_tag != TIFFTAG_PAGENUMBER
 -				   && fip->field_tag != TIFFTAG_HALFTONEHINTS
 -				   && fip->field_tag != TIFFTAG_YCBCRSUBSAMPLING
 -				   && fip->field_tag != TIFFTAG_DOTRANGE) {
 -				raw_data = _TIFFmalloc(
 -					_TIFFDataSize(fip->field_type)
 -					* value_count);
 -				mem_alloc = 1;
 -				if(TIFFGetField(tif, tag, raw_data) != 1) {
 -					_TIFFfree(raw_data);
 -					continue;
 -				}
 -			} else {
 -				/* 
 -				 * XXX: Should be fixed and removed, see the
 -				 * notes related to TIFFTAG_PAGENUMBER,
 -				 * TIFFTAG_HALFTONEHINTS,
 -				 * TIFFTAG_YCBCRSUBSAMPLING and
 -				 * TIFFTAG_DOTRANGE tags in tif_dir.c. */
 -				char *tmp;
 -				raw_data = _TIFFmalloc(
 -					_TIFFDataSize(fip->field_type)
 -					* value_count);
 -				tmp = raw_data;
 -				mem_alloc = 1;
 -				if(TIFFGetField(tif, tag, tmp,
 -				tmp + _TIFFDataSize(fip->field_type)) != 1) {
 -					_TIFFfree(raw_data);
 -					continue;
 -				}
 -			}
 -		}
 -
 -		/*
 -		 * Catch the tags which needs to be specially handled and
 -		 * pretty print them. If tag not handled in
 -		 * _TIFFPrettyPrintField() fall down and print it as any other
 -		 * tag.
 -		 */
 -		if (_TIFFPrettyPrintField(tif, fd, tag, value_count, raw_data)) {
 -			if(mem_alloc)
 -				_TIFFfree(raw_data);
 -			continue;
 -		}
 -		else
 -			_TIFFPrintField(fd, fip, value_count, raw_data);
 -
 -		if(mem_alloc)
 -			_TIFFfree(raw_data);
 -            }
 -        }
 -        
 -	if (tif->tif_tagmethods.printdir)
 -		(*tif->tif_tagmethods.printdir)(tif, fd, flags);
 -	if ((flags & TIFFPRINT_STRIPS) &&
 -	    TIFFFieldSet(tif,FIELD_STRIPOFFSETS)) {
 -		tstrip_t s;
 -
 -		fprintf(fd, "  %lu %s:\n",
 -		    (long) td->td_nstrips,
 -		    isTiled(tif) ? "Tiles" : "Strips");
 -		for (s = 0; s < td->td_nstrips; s++)
 -			fprintf(fd, "    %3lu: [%8lu, %8lu]\n",
 -			    (unsigned long) s,
 -			    (unsigned long) td->td_stripoffset[s],
 -			    (unsigned long) td->td_stripbytecount[s]);
 -	}
 -}
 -
 -void
 -_TIFFprintAscii(FILE* fd, const char* cp)
 -{
 -	for (; *cp != '\0'; cp++) {
 -		const char* tp;
 -
 -		if (isprint((int)*cp)) {
 -			fputc(*cp, fd);
 -			continue;
 -		}
 -		for (tp = "\tt\bb\rr\nn\vv"; *tp; tp++)
 -			if (*tp++ == *cp)
 -				break;
 -		if (*tp)
 -			fprintf(fd, "\\%c", *tp);
 -		else
 -			fprintf(fd, "\\%03o", *cp & 0xff);
 -	}
 -}
 -
 -void
 -_TIFFprintAsciiTag(FILE* fd, const char* name, const char* value)
 -{
 -	fprintf(fd, "  %s: \"", name);
 -	_TIFFprintAscii(fd, value);
 -	fprintf(fd, "\"\n");
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_read.c b/plugins/FreeImage/Source/LibTIFF/tif_read.c deleted file mode 100644 index 351a1b058d..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_read.c +++ /dev/null @@ -1,750 +0,0 @@ -/* $Id: tif_read.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - * Scanline-oriented Read Support
 - */
 -#include "tiffiop.h"
 -#include <stdio.h>
 -
 -	int TIFFFillStrip(TIFF*, tstrip_t);
 -	int TIFFFillTile(TIFF*, ttile_t);
 -static	int TIFFStartStrip(TIFF*, tstrip_t);
 -static	int TIFFStartTile(TIFF*, ttile_t);
 -static	int TIFFCheckRead(TIFF*, int);
 -
 -#define	NOSTRIP	((tstrip_t) -1)			/* undefined state */
 -#define	NOTILE	((ttile_t) -1)			/* undefined state */
 -
 -/*
 - * Seek to a random row+sample in a file.
 - */
 -static int
 -TIFFSeek(TIFF* tif, uint32 row, tsample_t sample)
 -{
 -	register TIFFDirectory *td = &tif->tif_dir;
 -	tstrip_t strip;
 -
 -	if (row >= td->td_imagelength) {	/* out of range */
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%lu: Row out of range, max %lu",
 -			     (unsigned long) row,
 -			     (unsigned long) td->td_imagelength);
 -		return (0);
 -	}
 -	if (td->td_planarconfig == PLANARCONFIG_SEPARATE) {
 -		if (sample >= td->td_samplesperpixel) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			    "%lu: Sample out of range, max %lu",
 -			    (unsigned long) sample, (unsigned long) td->td_samplesperpixel);
 -			return (0);
 -		}
 -		strip = sample*td->td_stripsperimage + row/td->td_rowsperstrip;
 -	} else
 -		strip = row / td->td_rowsperstrip;
 -	if (strip != tif->tif_curstrip) {	/* different strip, refill */
 -		if (!TIFFFillStrip(tif, strip))
 -			return (0);
 -	} else if (row < tif->tif_row) {
 -		/*
 -		 * Moving backwards within the same strip: backup
 -		 * to the start and then decode forward (below).
 -		 *
 -		 * NB: If you're planning on lots of random access within a
 -		 * strip, it's better to just read and decode the entire
 -		 * strip, and then access the decoded data in a random fashion.
 -		 */
 -		if (!TIFFStartStrip(tif, strip))
 -			return (0);
 -	}
 -	if (row != tif->tif_row) {
 -		/*
 -		 * Seek forward to the desired row.
 -		 */
 -		if (!(*tif->tif_seek)(tif, row - tif->tif_row))
 -			return (0);
 -		tif->tif_row = row;
 -	}
 -	return (1);
 -}
 -
 -int
 -TIFFReadScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample)
 -{
 -	int e;
 -
 -	if (!TIFFCheckRead(tif, 0))
 -		return (-1);
 -	if ( (e = TIFFSeek(tif, row, sample)) != 0) {
 -		/*
 -		 * Decompress desired row into user buffer.
 -		 */
 -		e = (*tif->tif_decoderow)
 -		    (tif, (tidata_t) buf, tif->tif_scanlinesize, sample);
 -
 -		/* we are now poised at the beginning of the next row */
 -		tif->tif_row = row + 1;
 -
 -		if (e)
 -			(*tif->tif_postdecode)(tif, (tidata_t) buf,
 -			    tif->tif_scanlinesize);
 -	}
 -	return (e > 0 ? 1 : -1);
 -}
 -
 -/*
 - * Read a strip of data and decompress the specified
 - * amount into the user-supplied buffer.
 - */
 -tsize_t
 -TIFFReadEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	uint32 nrows;
 -	tsize_t stripsize;
 -        tstrip_t sep_strip, strips_per_sep;
 -
 -	if (!TIFFCheckRead(tif, 0))
 -		return (-1);
 -	if (strip >= td->td_nstrips) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%ld: Strip out of range, max %ld",
 -			     (long) strip, (long) td->td_nstrips);
 -		return (-1);
 -	}
 -	/*
 -	 * Calculate the strip size according to the number of
 -	 * rows in the strip (check for truncated last strip on any
 -	 * of the separations).
 -	 */
 -	if ( td->td_rowsperstrip >= td->td_imagelength )
 -		strips_per_sep = 1;
 -	else
 -		strips_per_sep = (td->td_imagelength+td->td_rowsperstrip-1)
 -		    / td->td_rowsperstrip;
 -
 -	sep_strip = strip % strips_per_sep;
 -
 -	if (sep_strip != strips_per_sep-1 ||
 -	    (nrows = td->td_imagelength % td->td_rowsperstrip) == 0)
 -		nrows = td->td_rowsperstrip;
 -
 -	stripsize = TIFFVStripSize(tif, nrows);
 -	if (size == (tsize_t) -1)
 -		size = stripsize;
 -	else if (size > stripsize)
 -		size = stripsize;
 -	if (TIFFFillStrip(tif, strip)
 -	    && (*tif->tif_decodestrip)(tif, (tidata_t) buf, size,   
 -	    (tsample_t)(strip / td->td_stripsperimage)) > 0 ) {
 -		(*tif->tif_postdecode)(tif, (tidata_t) buf, size);
 -		return (size);
 -	} else
 -		return ((tsize_t) -1);
 -}
 -
 -static tsize_t
 -TIFFReadRawStrip1(TIFF* tif,
 -    tstrip_t strip, tdata_t buf, tsize_t size, const char* module)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	assert((tif->tif_flags&TIFF_NOREADRAW)==0);
 -	if (!isMapped(tif)) {
 -		tsize_t cc;
 -
 -		if (!SeekOK(tif, td->td_stripoffset[strip])) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -			    "%s: Seek error at scanline %lu, strip %lu",
 -			    tif->tif_name,
 -			    (unsigned long) tif->tif_row, (unsigned long) strip);
 -			return (-1);
 -		}
 -		cc = TIFFReadFile(tif, buf, size);
 -		if (cc != size) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -		"%s: Read error at scanline %lu; got %lu bytes, expected %lu",
 -			    tif->tif_name,
 -			    (unsigned long) tif->tif_row,
 -			    (unsigned long) cc,
 -			    (unsigned long) size);
 -			return (-1);
 -		}
 -	} else {
 -		if (td->td_stripoffset[strip] + size > tif->tif_size) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -    "%s: Read error at scanline %lu, strip %lu; got %lu bytes, expected %lu",
 -			    tif->tif_name,
 -			    (unsigned long) tif->tif_row,
 -			    (unsigned long) strip,
 -			    (unsigned long) tif->tif_size - td->td_stripoffset[strip],
 -			    (unsigned long) size);
 -			return (-1);
 -		}
 -		_TIFFmemcpy(buf, tif->tif_base + td->td_stripoffset[strip],
 -                            size);
 -	}
 -	return (size);
 -}
 -
 -/*
 - * Read a strip of data from the file.
 - */
 -tsize_t
 -TIFFReadRawStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size)
 -{
 -	static const char module[] = "TIFFReadRawStrip";
 -	TIFFDirectory *td = &tif->tif_dir;
 -	/*
 -	 * FIXME: butecount should have tsize_t type, but for now libtiff
 -	 * defines tsize_t as a signed 32-bit integer and we are losing
 -	 * ability to read arrays larger than 2^31 bytes. So we are using
 -	 * uint32 instead of tsize_t here.
 -	 */
 -	uint32 bytecount;
 -
 -	if (!TIFFCheckRead(tif, 0))
 -		return ((tsize_t) -1);
 -	if (strip >= td->td_nstrips) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%lu: Strip out of range, max %lu",
 -			     (unsigned long) strip,
 -			     (unsigned long) td->td_nstrips);
 -		return ((tsize_t) -1);
 -	}
 -	if (tif->tif_flags&TIFF_NOREADRAW)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -	"Compression scheme does not support access to raw uncompressed data");
 -		return ((tsize_t) -1);
 -	}
 -	bytecount = td->td_stripbytecount[strip];
 -	if (bytecount <= 0) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		    "%lu: Invalid strip byte count, strip %lu",
 -		    (unsigned long) bytecount, (unsigned long) strip);
 -		return ((tsize_t) -1);
 -	}
 -	if (size != (tsize_t)-1 && (uint32)size < bytecount)
 -		bytecount = size;
 -	return (TIFFReadRawStrip1(tif, strip, buf, bytecount, module));
 -}
 -
 -/*
 - * Read the specified strip and setup for decoding. The data buffer is
 - * expanded, as necessary, to hold the strip's data.
 - */
 -int
 -TIFFFillStrip(TIFF* tif, tstrip_t strip)
 -{
 -	static const char module[] = "TIFFFillStrip";
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	if ((tif->tif_flags&TIFF_NOREADRAW)==0)
 -	{
 -		/*
 -		 * FIXME: butecount should have tsize_t type, but for now
 -		 * libtiff defines tsize_t as a signed 32-bit integer and we
 -		 * are losing ability to read arrays larger than 2^31 bytes.
 -		 * So we are using uint32 instead of tsize_t here.
 -		 */
 -		uint32 bytecount = td->td_stripbytecount[strip];
 -		if (bytecount <= 0) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -			    "%s: Invalid strip byte count %lu, strip %lu",
 -			    tif->tif_name, (unsigned long) bytecount,
 -			    (unsigned long) strip);
 -			return (0);
 -		}
 -		if (isMapped(tif) &&
 -		    (isFillOrder(tif, td->td_fillorder)
 -		    || (tif->tif_flags & TIFF_NOBITREV))) {
 -			/*
 -			 * The image is mapped into memory and we either don't
 -			 * need to flip bits or the compression routine is
 -			 * going to handle this operation itself.  In this
 -			 * case, avoid copying the raw data and instead just
 -			 * reference the data from the memory mapped file
 -			 * image.  This assumes that the decompression
 -			 * routines do not modify the contents of the raw data
 -			 * buffer (if they try to, the application will get a
 -			 * fault since the file is mapped read-only).
 -			 */
 -			if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata)
 -				_TIFFfree(tif->tif_rawdata);
 -			tif->tif_flags &= ~TIFF_MYBUFFER;
 -			/*
 -			 * We must check for overflow, potentially causing
 -			 * an OOB read. Instead of simple
 -			 *
 -			 *  td->td_stripoffset[strip]+bytecount > tif->tif_size
 -			 *
 -			 * comparison (which can overflow) we do the following
 -			 * two comparisons:
 -			 */
 -			if (bytecount > tif->tif_size ||
 -			    td->td_stripoffset[strip] > tif->tif_size - bytecount) {
 -				/*
 -				 * This error message might seem strange, but
 -				 * it's what would happen if a read were done
 -				 * instead.
 -				 */
 -				TIFFErrorExt(tif->tif_clientdata, module,
 -
 -					"%s: Read error on strip %lu; "
 -					"got %lu bytes, expected %lu",
 -					tif->tif_name, (unsigned long) strip,
 -					(unsigned long) tif->tif_size - td->td_stripoffset[strip],
 -					(unsigned long) bytecount);
 -				tif->tif_curstrip = NOSTRIP;
 -				return (0);
 -			}
 -			tif->tif_rawdatasize = bytecount;
 -			tif->tif_rawdata = tif->tif_base + td->td_stripoffset[strip];
 -		} else {
 -			/*
 -			 * Expand raw data buffer, if needed, to hold data
 -			 * strip coming from file (perhaps should set upper
 -			 * bound on the size of a buffer we'll use?).
 -			 */
 -			if (bytecount > (uint32)tif->tif_rawdatasize) {
 -				tif->tif_curstrip = NOSTRIP;
 -				if ((tif->tif_flags & TIFF_MYBUFFER) == 0) {
 -					TIFFErrorExt(tif->tif_clientdata,
 -						     module,
 -				"%s: Data buffer too small to hold strip %lu",
 -						     tif->tif_name,
 -						     (unsigned long) strip);
 -					return (0);
 -				}
 -				if (!TIFFReadBufferSetup(tif, 0,
 -				    TIFFroundup(bytecount, 1024)))
 -					return (0);
 -			}
 -			if ((uint32)TIFFReadRawStrip1(tif, strip,
 -				(unsigned char *)tif->tif_rawdata,
 -				bytecount, module) != bytecount)
 -				return (0);
 -			if (!isFillOrder(tif, td->td_fillorder) &&
 -			    (tif->tif_flags & TIFF_NOBITREV) == 0)
 -				TIFFReverseBits(tif->tif_rawdata, bytecount);
 -		}
 -	}
 -	return (TIFFStartStrip(tif, strip));
 -}
 -
 -/*
 - * Tile-oriented Read Support
 - * Contributed by Nancy Cam (Silicon Graphics).
 - */
 -
 -/*
 - * Read and decompress a tile of data.  The
 - * tile is selected by the (x,y,z,s) coordinates.
 - */
 -tsize_t
 -TIFFReadTile(TIFF* tif,
 -    tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t s)
 -{
 -	if (!TIFFCheckRead(tif, 1) || !TIFFCheckTile(tif, x, y, z, s))
 -		return (-1);
 -	return (TIFFReadEncodedTile(tif,
 -	    TIFFComputeTile(tif, x, y, z, s), buf, (tsize_t) -1));
 -}
 -
 -/*
 - * Read a tile of data and decompress the specified
 - * amount into the user-supplied buffer.
 - */
 -tsize_t
 -TIFFReadEncodedTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	tsize_t tilesize = tif->tif_tilesize;
 -
 -	if (!TIFFCheckRead(tif, 1))
 -		return (-1);
 -	if (tile >= td->td_nstrips) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%ld: Tile out of range, max %ld",
 -			     (long) tile, (unsigned long) td->td_nstrips);
 -		return (-1);
 -	}
 -	if (size == (tsize_t) -1)
 -		size = tilesize;
 -	else if (size > tilesize)
 -		size = tilesize;
 -	if (TIFFFillTile(tif, tile) && (*tif->tif_decodetile)(tif,
 -	    (tidata_t) buf, size, (tsample_t)(tile/td->td_stripsperimage))) {
 -		(*tif->tif_postdecode)(tif, (tidata_t) buf, size);
 -		return (size);
 -	} else
 -		return (-1);
 -}
 -
 -static tsize_t
 -TIFFReadRawTile1(TIFF* tif,
 -    ttile_t tile, tdata_t buf, tsize_t size, const char* module)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	assert((tif->tif_flags&TIFF_NOREADRAW)==0);
 -	if (!isMapped(tif)) {
 -		tsize_t cc;
 -
 -		if (!SeekOK(tif, td->td_stripoffset[tile])) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -			    "%s: Seek error at row %ld, col %ld, tile %ld",
 -			    tif->tif_name,
 -			    (long) tif->tif_row,
 -			    (long) tif->tif_col,
 -			    (long) tile);
 -			return ((tsize_t) -1);
 -		}
 -		cc = TIFFReadFile(tif, buf, size);
 -		if (cc != size) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -	    "%s: Read error at row %ld, col %ld; got %lu bytes, expected %lu",
 -			    tif->tif_name,
 -			    (long) tif->tif_row,
 -			    (long) tif->tif_col,
 -			    (unsigned long) cc,
 -			    (unsigned long) size);
 -			return ((tsize_t) -1);
 -		}
 -	} else {
 -		if (td->td_stripoffset[tile] + size > tif->tif_size) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -    "%s: Read error at row %ld, col %ld, tile %ld; got %lu bytes, expected %lu",
 -			    tif->tif_name,
 -			    (long) tif->tif_row,
 -			    (long) tif->tif_col,
 -			    (long) tile,
 -			    (unsigned long) tif->tif_size - td->td_stripoffset[tile],
 -			    (unsigned long) size);
 -			return ((tsize_t) -1);
 -		}
 -		_TIFFmemcpy(buf, tif->tif_base + td->td_stripoffset[tile], size);
 -	}
 -	return (size);
 -}
 -
 -/*
 - * Read a tile of data from the file.
 - */
 -tsize_t
 -TIFFReadRawTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size)
 -{
 -	static const char module[] = "TIFFReadRawTile";
 -	TIFFDirectory *td = &tif->tif_dir;
 -	/*
 -	 * FIXME: butecount should have tsize_t type, but for now libtiff
 -	 * defines tsize_t as a signed 32-bit integer and we are losing
 -	 * ability to read arrays larger than 2^31 bytes. So we are using
 -	 * uint32 instead of tsize_t here.
 -	 */
 -	uint32 bytecount;
 -
 -	if (!TIFFCheckRead(tif, 1))
 -		return ((tsize_t) -1);
 -	if (tile >= td->td_nstrips) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%lu: Tile out of range, max %lu",
 -		    (unsigned long) tile, (unsigned long) td->td_nstrips);
 -		return ((tsize_t) -1);
 -	}
 -	if (tif->tif_flags&TIFF_NOREADRAW)
 -	{
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -	"Compression scheme does not support access to raw uncompressed data");
 -		return ((tsize_t) -1);
 -	}
 -	bytecount = td->td_stripbytecount[tile];
 -	if (size != (tsize_t) -1 && (uint32)size < bytecount)
 -		bytecount = size;
 -	return (TIFFReadRawTile1(tif, tile, buf, bytecount, module));
 -}
 -
 -/*
 - * Read the specified tile and setup for decoding. The data buffer is
 - * expanded, as necessary, to hold the tile's data.
 - */
 -int
 -TIFFFillTile(TIFF* tif, ttile_t tile)
 -{
 -	static const char module[] = "TIFFFillTile";
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	if ((tif->tif_flags&TIFF_NOREADRAW)==0)
 -	{
 -		/*
 -		 * FIXME: butecount should have tsize_t type, but for now
 -		 * libtiff defines tsize_t as a signed 32-bit integer and we
 -		 * are losing ability to read arrays larger than 2^31 bytes.
 -		 * So we are using uint32 instead of tsize_t here.
 -		 */
 -		uint32 bytecount = td->td_stripbytecount[tile];
 -		if (bytecount <= 0) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			    "%lu: Invalid tile byte count, tile %lu",
 -			    (unsigned long) bytecount, (unsigned long) tile);
 -			return (0);
 -		}
 -		if (isMapped(tif) &&
 -		    (isFillOrder(tif, td->td_fillorder)
 -		     || (tif->tif_flags & TIFF_NOBITREV))) {
 -			/*
 -			 * The image is mapped into memory and we either don't
 -			 * need to flip bits or the compression routine is
 -			 * going to handle this operation itself.  In this
 -			 * case, avoid copying the raw data and instead just
 -			 * reference the data from the memory mapped file
 -			 * image.  This assumes that the decompression
 -			 * routines do not modify the contents of the raw data
 -			 * buffer (if they try to, the application will get a
 -			 * fault since the file is mapped read-only).
 -			 */
 -			if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata)
 -				_TIFFfree(tif->tif_rawdata);
 -			tif->tif_flags &= ~TIFF_MYBUFFER;
 -			/*
 -			 * We must check for overflow, potentially causing
 -			 * an OOB read. Instead of simple
 -			 *
 -			 *  td->td_stripoffset[tile]+bytecount > tif->tif_size
 -			 *
 -			 * comparison (which can overflow) we do the following
 -			 * two comparisons:
 -			 */
 -			if (bytecount > tif->tif_size ||
 -			    td->td_stripoffset[tile] > tif->tif_size - bytecount) {
 -				tif->tif_curtile = NOTILE;
 -				return (0);
 -			}
 -			tif->tif_rawdatasize = bytecount;
 -			tif->tif_rawdata =
 -				tif->tif_base + td->td_stripoffset[tile];
 -		} else {
 -			/*
 -			 * Expand raw data buffer, if needed, to hold data
 -			 * tile coming from file (perhaps should set upper
 -			 * bound on the size of a buffer we'll use?).
 -			 */
 -			if (bytecount > (uint32)tif->tif_rawdatasize) {
 -				tif->tif_curtile = NOTILE;
 -				if ((tif->tif_flags & TIFF_MYBUFFER) == 0) {
 -					TIFFErrorExt(tif->tif_clientdata,
 -						     module,
 -				"%s: Data buffer too small to hold tile %ld",
 -						     tif->tif_name,
 -						     (long) tile);
 -					return (0);
 -				}
 -				if (!TIFFReadBufferSetup(tif, 0,
 -				    TIFFroundup(bytecount, 1024)))
 -					return (0);
 -			}
 -			if ((uint32)TIFFReadRawTile1(tif, tile,
 -				(unsigned char *)tif->tif_rawdata,
 -				bytecount, module) != bytecount)
 -				return (0);
 -			if (!isFillOrder(tif, td->td_fillorder) &&
 -			    (tif->tif_flags & TIFF_NOBITREV) == 0)
 -				TIFFReverseBits(tif->tif_rawdata, bytecount);
 -		}
 -	}
 -	return (TIFFStartTile(tif, tile));
 -}
 -
 -/*
 - * Setup the raw data buffer in preparation for
 - * reading a strip of raw data.  If the buffer
 - * is specified as zero, then a buffer of appropriate
 - * size is allocated by the library.  Otherwise,
 - * the client must guarantee that the buffer is
 - * large enough to hold any individual strip of
 - * raw data.
 - */
 -int
 -TIFFReadBufferSetup(TIFF* tif, tdata_t bp, tsize_t size)
 -{
 -	static const char module[] = "TIFFReadBufferSetup";
 -
 -	assert((tif->tif_flags&TIFF_NOREADRAW)==0);
 -	if (tif->tif_rawdata) {
 -		if (tif->tif_flags & TIFF_MYBUFFER)
 -			_TIFFfree(tif->tif_rawdata);
 -		tif->tif_rawdata = NULL;
 -	}
 -
 -	if (bp) {
 -		tif->tif_rawdatasize = size;
 -		tif->tif_rawdata = (tidata_t) bp;
 -		tif->tif_flags &= ~TIFF_MYBUFFER;
 -	} else {
 -		tif->tif_rawdatasize = TIFFroundup(size, 1024);
 -		if (tif->tif_rawdatasize > 0)
 -			tif->tif_rawdata = (tidata_t) _TIFFmalloc(tif->tif_rawdatasize);
 -		tif->tif_flags |= TIFF_MYBUFFER;
 -	}
 -	if ((tif->tif_rawdata == NULL) || (tif->tif_rawdatasize == 0)) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -		    "%s: No space for data buffer at scanline %ld",
 -		    tif->tif_name, (long) tif->tif_row);
 -		tif->tif_rawdatasize = 0;
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Set state to appear as if a
 - * strip has just been read in.
 - */
 -static int
 -TIFFStartStrip(TIFF* tif, tstrip_t strip)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
 -		if (!(*tif->tif_setupdecode)(tif))
 -			return (0);
 -		tif->tif_flags |= TIFF_CODERSETUP;
 -	}
 -	tif->tif_curstrip = strip;
 -	tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip;
 -	if (tif->tif_flags&TIFF_NOREADRAW)
 -	{
 -		tif->tif_rawcp = NULL;
 -		tif->tif_rawcc = 0;
 -	}
 -	else
 -	{
 -		tif->tif_rawcp = tif->tif_rawdata;
 -		tif->tif_rawcc = td->td_stripbytecount[strip];
 -	}
 -	return ((*tif->tif_predecode)(tif,
 -			(tsample_t)(strip / td->td_stripsperimage)));
 -}
 -
 -/*
 - * Set state to appear as if a
 - * tile has just been read in.
 - */
 -static int
 -TIFFStartTile(TIFF* tif, ttile_t tile)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
 -		if (!(*tif->tif_setupdecode)(tif))
 -			return (0);
 -		tif->tif_flags |= TIFF_CODERSETUP;
 -	}
 -	tif->tif_curtile = tile;
 -	tif->tif_row =
 -	    (tile % TIFFhowmany(td->td_imagewidth, td->td_tilewidth)) *
 -		td->td_tilelength;
 -	tif->tif_col =
 -	    (tile % TIFFhowmany(td->td_imagelength, td->td_tilelength)) *
 -		td->td_tilewidth;
 -	if (tif->tif_flags&TIFF_NOREADRAW)
 -	{
 -		tif->tif_rawcp = NULL;
 -		tif->tif_rawcc = 0;
 -	}
 -	else
 -	{
 -		tif->tif_rawcp = tif->tif_rawdata;
 -		tif->tif_rawcc = td->td_stripbytecount[tile];
 -	}
 -	return ((*tif->tif_predecode)(tif,
 -			(tsample_t)(tile/td->td_stripsperimage)));
 -}
 -
 -static int
 -TIFFCheckRead(TIFF* tif, int tiles)
 -{
 -	if (tif->tif_mode == O_WRONLY) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "File not open for reading");
 -		return (0);
 -	}
 -	if (tiles ^ isTiled(tif)) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name, tiles ?
 -		    "Can not read tiles from a stripped image" :
 -		    "Can not read scanlines from a tiled image");
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -void
 -_TIFFNoPostDecode(TIFF* tif, tidata_t buf, tsize_t cc)
 -{
 -    (void) tif; (void) buf; (void) cc;
 -}
 -
 -void
 -_TIFFSwab16BitData(TIFF* tif, tidata_t buf, tsize_t cc)
 -{
 -    (void) tif;
 -    assert((cc & 1) == 0);
 -    TIFFSwabArrayOfShort((uint16*) buf, cc/2);
 -}
 -
 -void
 -_TIFFSwab24BitData(TIFF* tif, tidata_t buf, tsize_t cc)
 -{
 -    (void) tif;
 -    assert((cc % 3) == 0);
 -    TIFFSwabArrayOfTriples((uint8*) buf, cc/3);
 -}
 -
 -void
 -_TIFFSwab32BitData(TIFF* tif, tidata_t buf, tsize_t cc)
 -{
 -    (void) tif;
 -    assert((cc & 3) == 0);
 -    TIFFSwabArrayOfLong((uint32*) buf, cc/4);
 -}
 -
 -void
 -_TIFFSwab64BitData(TIFF* tif, tidata_t buf, tsize_t cc)
 -{
 -    (void) tif;
 -    assert((cc & 7) == 0);
 -    TIFFSwabArrayOfDouble((double*) buf, cc/8);
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_stream.cxx b/plugins/FreeImage/Source/LibTIFF/tif_stream.cxx deleted file mode 100644 index a3aaea19d7..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_stream.cxx +++ /dev/null @@ -1,295 +0,0 @@ -/* $Id: tif_stream.cxx,v 1.32 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1996 Sam Leffler
 - * Copyright (c) 1991-1996 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library UNIX-specific Routines.
 - */
 -#include "tiffiop.h"
 -#include <iostream>
 -
 -#ifndef __VMS
 -using namespace std;
 -#endif
 -
 -class tiffis_data
 -{
 -  public:
 -
 -	istream	*myIS;
 -        long	myStreamStartPos;
 -};
 -
 -class tiffos_data
 -{
 -  public:
 -
 -	ostream	*myOS;
 -	long	myStreamStartPos;
 -};
 -
 -static tsize_t
 -_tiffosReadProc(thandle_t, tdata_t, tsize_t)
 -{
 -        return 0;
 -}
 -
 -static tsize_t
 -_tiffisReadProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -        tiffis_data	*data = (tiffis_data *)fd;
 -
 -        data->myIS->read((char *)buf, (int)size);
 -
 -        return data->myIS->gcount();
 -}
 -
 -static tsize_t
 -_tiffosWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	tiffos_data	*data = (tiffos_data *)fd;
 -	ostream		*os = data->myOS;
 -	int		pos = os->tellp();
 -
 -	os->write((const char *)buf, size);
 -
 -	return ((int)os->tellp()) - pos;
 -}
 -
 -static tsize_t
 -_tiffisWriteProc(thandle_t, tdata_t, tsize_t)
 -{
 -	return 0;
 -}
 -
 -static toff_t
 -_tiffosSeekProc(thandle_t fd, toff_t off, int whence)
 -{
 -	tiffos_data	*data = (tiffos_data *)fd;
 -	ostream	*os = data->myOS;
 -
 -	// if the stream has already failed, don't do anything
 -	if( os->fail() )
 -		return os->tellp();
 -
 -	switch(whence) {
 -	case SEEK_SET:
 -	    os->seekp(data->myStreamStartPos + off, ios::beg);
 -		break;
 -	case SEEK_CUR:
 -		os->seekp(off, ios::cur);
 -		break;
 -	case SEEK_END:
 -		os->seekp(off, ios::end);
 -		break;
 -	}
 -
 -	// Attempt to workaround problems with seeking past the end of the
 -	// stream.  ofstream doesn't have a problem with this but
 -	// ostrstream/ostringstream does. In that situation, add intermediate
 -	// '\0' characters.
 -	if( os->fail() ) {
 -#ifdef __VMS
 -		int		old_state;
 -#else
 -		ios::iostate	old_state;
 -#endif
 -		toff_t		origin=0;
 -
 -		old_state = os->rdstate();
 -		// reset the fail bit or else tellp() won't work below
 -		os->clear(os->rdstate() & ~ios::failbit);
 -		switch( whence ) {
 -			case SEEK_SET:
 -				origin = data->myStreamStartPos;
 -				break;
 -			case SEEK_CUR:
 -				origin = os->tellp();
 -				break;
 -			case SEEK_END:
 -				os->seekp(0, ios::end);
 -				origin = os->tellp();
 -				break;
 -		}
 -		// restore original stream state
 -		os->clear(old_state);	
 -
 -		// only do something if desired seek position is valid
 -		if( origin + off > data->myStreamStartPos ) {
 -			toff_t	num_fill;
 -
 -			// clear the fail bit 
 -			os->clear(os->rdstate() & ~ios::failbit);
 -
 -			// extend the stream to the expected size
 -			os->seekp(0, ios::end);
 -			num_fill = origin + off - (toff_t)os->tellp();
 -			for( toff_t i = 0; i < num_fill; i++ )
 -				os->put('\0');
 -
 -			// retry the seek
 -			os->seekp(origin + off, ios::beg);
 -		}
 -	}
 -
 -	return os->tellp();
 -}
 -
 -static toff_t
 -_tiffisSeekProc(thandle_t fd, toff_t off, int whence)
 -{
 -	tiffis_data	*data = (tiffis_data *)fd;
 -
 -	switch(whence) {
 -	case SEEK_SET:
 -		data->myIS->seekg(data->myStreamStartPos + off, ios::beg);
 -		break;
 -	case SEEK_CUR:
 -		data->myIS->seekg(off, ios::cur);
 -		break;
 -	case SEEK_END:
 -		data->myIS->seekg(off, ios::end);
 -		break;
 -	}
 -
 -	return ((long)data->myIS->tellg()) - data->myStreamStartPos;
 -}
 -
 -static toff_t
 -_tiffosSizeProc(thandle_t fd)
 -{
 -	tiffos_data	*data = (tiffos_data *)fd;
 -	ostream		*os = data->myOS;
 -	toff_t		pos = os->tellp();
 -	toff_t		len;
 -
 -	os->seekp(0, ios::end);
 -	len = os->tellp();
 -	os->seekp(pos);
 -
 -	return len;
 -}
 -
 -static toff_t
 -_tiffisSizeProc(thandle_t fd)
 -{
 -	tiffis_data	*data = (tiffis_data *)fd;
 -	int		pos = data->myIS->tellg();
 -	int		len;
 -
 -	data->myIS->seekg(0, ios::end);
 -	len = data->myIS->tellg();
 -	data->myIS->seekg(pos);
 -
 -	return len;
 -}
 -
 -static int
 -_tiffosCloseProc(thandle_t fd)
 -{
 -	// Our stream was not allocated by us, so it shouldn't be closed by us.
 -	delete (tiffos_data *)fd;
 -	return 0;
 -}
 -
 -static int
 -_tiffisCloseProc(thandle_t fd)
 -{
 -	// Our stream was not allocated by us, so it shouldn't be closed by us.
 -	delete (tiffis_data *)fd;
 -	return 0;
 -}
 -
 -static int
 -_tiffDummyMapProc(thandle_t , tdata_t* , toff_t* )
 -{
 -	return (0);
 -}
 -
 -static void
 -_tiffDummyUnmapProc(thandle_t , tdata_t , toff_t )
 -{
 -}
 -
 -/*
 - * Open a TIFF file descriptor for read/writing.
 - */
 -static TIFF*
 -_tiffStreamOpen(const char* name, const char* mode, void *fd)
 -{
 -	TIFF*	tif;
 -
 -	if( strchr(mode, 'w') ) {
 -		tiffos_data	*data = new tiffos_data;
 -		data->myOS = (ostream *)fd;
 -		data->myStreamStartPos = data->myOS->tellp();
 -
 -		// Open for writing.
 -		tif = TIFFClientOpen(name, mode,
 -				(thandle_t) data,
 -				_tiffosReadProc, _tiffosWriteProc,
 -				_tiffosSeekProc, _tiffosCloseProc,
 -				_tiffosSizeProc,
 -				_tiffDummyMapProc, _tiffDummyUnmapProc);
 -	} else {
 -		tiffis_data	*data = new tiffis_data;
 -		data->myIS = (istream *)fd;
 -		data->myStreamStartPos = data->myIS->tellg();
 -		// Open for reading.
 -		tif = TIFFClientOpen(name, mode,
 -				(thandle_t) data,
 -				_tiffisReadProc, _tiffisWriteProc,
 -				_tiffisSeekProc, _tiffisCloseProc,
 -				_tiffisSizeProc,
 -				_tiffDummyMapProc, _tiffDummyUnmapProc);
 -	}
 -
 -	return (tif);
 -}
 -
 -TIFF*
 -TIFFStreamOpen(const char* name, ostream *os)
 -{
 -	// If os is either a ostrstream or ostringstream, and has no data
 -	// written to it yet, then tellp() will return -1 which will break us.
 -	// We workaround this by writing out a dummy character and
 -	// then seek back to the beginning.
 -	if( !os->fail() && (int)os->tellp() < 0 ) {
 -		*os << '\0';
 -		os->seekp(0);
 -	}
 -
 -	// NB: We don't support mapped files with streams so add 'm'
 -	return _tiffStreamOpen(name, "wm", os);
 -}
 -
 -TIFF*
 -TIFFStreamOpen(const char* name, istream *is)
 -{
 -	// NB: We don't support mapped files with streams so add 'm'
 -	return _tiffStreamOpen(name, "rm", is);
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_strip.c b/plugins/FreeImage/Source/LibTIFF/tif_strip.c deleted file mode 100644 index 8abf726a00..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_strip.c +++ /dev/null @@ -1,366 +0,0 @@ -/* $Id: tif_strip.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1991-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Strip-organized Image Support Routines.
 - */
 -#include "tiffiop.h"
 -
 -static uint32
 -summarize(TIFF* tif, size_t summand1, size_t summand2, const char* where)
 -{
 -	/*
 -	 * XXX: We are using casting to uint32 here, bacause sizeof(size_t)
 -	 * may be larger than sizeof(uint32) on 64-bit architectures.
 -	 */
 -	uint32	bytes = summand1 + summand2;
 -
 -	if (bytes - summand1 != summand2) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Integer overflow in %s", where);
 -		bytes = 0;
 -	}
 -
 -	return (bytes);
 -}
 -
 -static uint32
 -multiply(TIFF* tif, size_t nmemb, size_t elem_size, const char* where)
 -{
 -	uint32	bytes = nmemb * elem_size;
 -
 -	if (elem_size && bytes / elem_size != nmemb) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Integer overflow in %s", where);
 -		bytes = 0;
 -	}
 -
 -	return (bytes);
 -}
 -
 -/*
 - * Compute which strip a (row,sample) value is in.
 - */
 -tstrip_t
 -TIFFComputeStrip(TIFF* tif, uint32 row, tsample_t sample)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	tstrip_t strip;
 -
 -	strip = row / td->td_rowsperstrip;
 -	if (td->td_planarconfig == PLANARCONFIG_SEPARATE) {
 -		if (sample >= td->td_samplesperpixel) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			    "%lu: Sample out of range, max %lu",
 -			    (unsigned long) sample, (unsigned long) td->td_samplesperpixel);
 -			return ((tstrip_t) 0);
 -		}
 -		strip += sample*td->td_stripsperimage;
 -	}
 -	return (strip);
 -}
 -
 -/*
 - * Compute how many strips are in an image.
 - */
 -tstrip_t
 -TIFFNumberOfStrips(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	tstrip_t nstrips;
 -
 -	nstrips = (td->td_rowsperstrip == (uint32) -1 ? 1 :
 -	     TIFFhowmany(td->td_imagelength, td->td_rowsperstrip));
 -	if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
 -		nstrips = multiply(tif, nstrips, td->td_samplesperpixel,
 -				   "TIFFNumberOfStrips");
 -	return (nstrips);
 -}
 -
 -/*
 - * Compute the # bytes in a variable height, row-aligned strip.
 - */
 -tsize_t
 -TIFFVStripSize(TIFF* tif, uint32 nrows)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	if (nrows == (uint32) -1)
 -		nrows = td->td_imagelength;
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG &&
 -	    td->td_photometric == PHOTOMETRIC_YCBCR &&
 -	    !isUpSampled(tif)) {
 -		/*
 -		 * Packed YCbCr data contain one Cb+Cr for every
 -		 * HorizontalSampling*VerticalSampling Y values.
 -		 * Must also roundup width and height when calculating
 -		 * since images that are not a multiple of the
 -		 * horizontal/vertical subsampling area include
 -		 * YCbCr data for the extended image.
 -		 */
 -		uint16 ycbcrsubsampling[2];
 -		tsize_t w, scanline, samplingarea;
 -
 -		TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRSUBSAMPLING,
 -				      ycbcrsubsampling + 0,
 -				      ycbcrsubsampling + 1);
 -
 -		samplingarea = ycbcrsubsampling[0]*ycbcrsubsampling[1];
 -		if (samplingarea == 0) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -				     "Invalid YCbCr subsampling");
 -			return 0;
 -		}
 -
 -		w = TIFFroundup(td->td_imagewidth, ycbcrsubsampling[0]);
 -		scanline = TIFFhowmany8(multiply(tif, w, td->td_bitspersample,
 -						 "TIFFVStripSize"));
 -		nrows = TIFFroundup(nrows, ycbcrsubsampling[1]);
 -		/* NB: don't need TIFFhowmany here 'cuz everything is rounded */
 -		scanline = multiply(tif, nrows, scanline, "TIFFVStripSize");
 -		return ((tsize_t)
 -		    summarize(tif, scanline,
 -			      multiply(tif, 2, scanline / samplingarea,
 -				       "TIFFVStripSize"), "TIFFVStripSize"));
 -	} else
 -		return ((tsize_t) multiply(tif, nrows, TIFFScanlineSize(tif),
 -					   "TIFFVStripSize"));
 -}
 -
 -
 -/*
 - * Compute the # bytes in a raw strip.
 - */
 -tsize_t
 -TIFFRawStripSize(TIFF* tif, tstrip_t strip)
 -{
 -	TIFFDirectory* td = &tif->tif_dir;
 -	tsize_t bytecount = td->td_stripbytecount[strip];
 -
 -	if (bytecount <= 0) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			  "%lu: Invalid strip byte count, strip %lu",
 -			  (unsigned long) bytecount, (unsigned long) strip);
 -		bytecount = (tsize_t) -1;
 -	}
 -
 -	return bytecount;
 -}
 -
 -/*
 - * Compute the # bytes in a (row-aligned) strip.
 - *
 - * Note that if RowsPerStrip is larger than the
 - * recorded ImageLength, then the strip size is
 - * truncated to reflect the actual space required
 - * to hold the strip.
 - */
 -tsize_t
 -TIFFStripSize(TIFF* tif)
 -{
 -	TIFFDirectory* td = &tif->tif_dir;
 -	uint32 rps = td->td_rowsperstrip;
 -	if (rps > td->td_imagelength)
 -		rps = td->td_imagelength;
 -	return (TIFFVStripSize(tif, rps));
 -}
 -
 -/*
 - * Compute a default strip size based on the image
 - * characteristics and a requested value.  If the
 - * request is <1 then we choose a strip size according
 - * to certain heuristics.
 - */
 -uint32
 -TIFFDefaultStripSize(TIFF* tif, uint32 request)
 -{
 -	return (*tif->tif_defstripsize)(tif, request);
 -}
 -
 -uint32
 -_TIFFDefaultStripSize(TIFF* tif, uint32 s)
 -{
 -	if ((int32) s < 1) {
 -		/*
 -		 * If RowsPerStrip is unspecified, try to break the
 -		 * image up into strips that are approximately
 -		 * STRIP_SIZE_DEFAULT bytes long.
 -		 */
 -		tsize_t scanline = TIFFScanlineSize(tif);
 -		s = (uint32)STRIP_SIZE_DEFAULT / (scanline == 0 ? 1 : scanline);
 -		if (s == 0)		/* very wide images */
 -			s = 1;
 -	}
 -	return (s);
 -}
 -
 -/*
 - * Return the number of bytes to read/write in a call to
 - * one of the scanline-oriented i/o routines.  Note that
 - * this number may be 1/samples-per-pixel if data is
 - * stored as separate planes.
 - */
 -tsize_t
 -TIFFScanlineSize(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	tsize_t scanline;
 -
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG) {
 -		if (td->td_photometric == PHOTOMETRIC_YCBCR
 -		    && !isUpSampled(tif)) {
 -			uint16 ycbcrsubsampling[2];
 -
 -			TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRSUBSAMPLING,
 -					      ycbcrsubsampling + 0,
 -					      ycbcrsubsampling + 1);
 -
 -			if (ycbcrsubsampling[0]*ycbcrsubsampling[1] == 0) {
 -				TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -					     "Invalid YCbCr subsampling");
 -				return 0;
 -			}
 -
 -			/* number of sample clumps per line */
 -			scanline = TIFFhowmany(td->td_imagewidth,
 -					       ycbcrsubsampling[0]);
 -			/* number of samples per line */
 -			scanline = multiply(tif, scanline,
 -					    ycbcrsubsampling[0]*ycbcrsubsampling[1] + 2,
 -					    "TIFFScanlineSize");
 -		} else {
 -			scanline = multiply(tif, td->td_imagewidth,
 -					    td->td_samplesperpixel,
 -					    "TIFFScanlineSize");
 -		}
 -	} else
 -		scanline = td->td_imagewidth;
 -	return ((tsize_t) TIFFhowmany8(multiply(tif, scanline,
 -						td->td_bitspersample,
 -						"TIFFScanlineSize")));
 -}
 -
 -/*
 - * Some stuff depends on this older version of TIFFScanlineSize
 - * TODO: resolve this
 - */
 -tsize_t
 -TIFFOldScanlineSize(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	tsize_t scanline;
 -
 -	scanline = multiply (tif, td->td_bitspersample, td->td_imagewidth,
 -			     "TIFFScanlineSize");
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG)
 -		scanline = multiply (tif, scanline, td->td_samplesperpixel,
 -				     "TIFFScanlineSize");
 -	return ((tsize_t) TIFFhowmany8(scanline));
 -}
 -
 -/*
 - * Return the number of bytes to read/write in a call to
 - * one of the scanline-oriented i/o routines.  Note that
 - * this number may be 1/samples-per-pixel if data is
 - * stored as separate planes.
 - * The ScanlineSize in case of YCbCrSubsampling is defined as the
 - * strip size divided by the strip height, i.e. the size of a pack of vertical
 - * subsampling lines divided by vertical subsampling. It should thus make
 - * sense when multiplied by a multiple of vertical subsampling.
 - * Some stuff depends on this newer version of TIFFScanlineSize
 - * TODO: resolve this
 - */
 -tsize_t
 -TIFFNewScanlineSize(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	tsize_t scanline;
 -
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG) {
 -		if (td->td_photometric == PHOTOMETRIC_YCBCR
 -		    && !isUpSampled(tif)) {
 -			uint16 ycbcrsubsampling[2];
 -
 -			TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRSUBSAMPLING,
 -					      ycbcrsubsampling + 0,
 -					      ycbcrsubsampling + 1);
 -
 -			if (ycbcrsubsampling[0]*ycbcrsubsampling[1] == 0) {
 -				TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -					     "Invalid YCbCr subsampling");
 -				return 0;
 -			}
 -
 -			return((tsize_t) ((((td->td_imagewidth+ycbcrsubsampling[0]-1)
 -					    /ycbcrsubsampling[0])
 -					   *(ycbcrsubsampling[0]*ycbcrsubsampling[1]+2)
 -					   *td->td_bitspersample+7)
 -					  /8)/ycbcrsubsampling[1]);
 -
 -		} else {
 -			scanline = multiply(tif, td->td_imagewidth,
 -					    td->td_samplesperpixel,
 -					    "TIFFScanlineSize");
 -		}
 -	} else
 -		scanline = td->td_imagewidth;
 -	return ((tsize_t) TIFFhowmany8(multiply(tif, scanline,
 -						td->td_bitspersample,
 -						"TIFFScanlineSize")));
 -}
 -
 -/*
 - * Return the number of bytes required to store a complete
 - * decoded and packed raster scanline (as opposed to the
 - * I/O size returned by TIFFScanlineSize which may be less
 - * if data is store as separate planes).
 - */
 -tsize_t
 -TIFFRasterScanlineSize(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	tsize_t scanline;
 -	
 -	scanline = multiply (tif, td->td_bitspersample, td->td_imagewidth,
 -			     "TIFFRasterScanlineSize");
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG) {
 -		scanline = multiply (tif, scanline, td->td_samplesperpixel,
 -				     "TIFFRasterScanlineSize");
 -		return ((tsize_t) TIFFhowmany8(scanline));
 -	} else
 -		return ((tsize_t) multiply (tif, TIFFhowmany8(scanline),
 -					    td->td_samplesperpixel,
 -					    "TIFFRasterScanlineSize"));
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_swab.c b/plugins/FreeImage/Source/LibTIFF/tif_swab.c deleted file mode 100644 index 5a42713d5c..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_swab.c +++ /dev/null @@ -1,242 +0,0 @@ -/* $Id: tif_swab.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library Bit & Byte Swapping Support.
 - *
 - * XXX We assume short = 16-bits and long = 32-bits XXX
 - */
 -#include "tiffiop.h"
 -
 -#ifndef TIFFSwabShort
 -void
 -TIFFSwabShort(uint16* wp)
 -{
 -	register unsigned char* cp = (unsigned char*) wp;
 -	unsigned char t;
 -
 -	t = cp[1]; cp[1] = cp[0]; cp[0] = t;
 -}
 -#endif
 -
 -#ifndef TIFFSwabLong
 -void
 -TIFFSwabLong(uint32* lp)
 -{
 -	register unsigned char* cp = (unsigned char*) lp;
 -	unsigned char t;
 -
 -	t = cp[3]; cp[3] = cp[0]; cp[0] = t;
 -	t = cp[2]; cp[2] = cp[1]; cp[1] = t;
 -}
 -#endif
 -
 -#ifndef TIFFSwabArrayOfShort
 -void
 -TIFFSwabArrayOfShort(uint16* wp, register unsigned long n)
 -{
 -	register unsigned char* cp;
 -	register unsigned char t;
 -
 -	/* XXX unroll loop some */
 -	while (n-- > 0) {
 -		cp = (unsigned char*) wp;
 -		t = cp[1]; cp[1] = cp[0]; cp[0] = t;
 -		wp++;
 -	}
 -}
 -#endif
 -
 -#ifndef TIFFSwabArrayOfTriples
 -void
 -TIFFSwabArrayOfTriples(uint8* tp, unsigned long n)
 -{
 -	unsigned char* cp;
 -	unsigned char t;
 -
 -	/* XXX unroll loop some */
 -	while (n-- > 0) {
 -		cp = (unsigned char*) tp;
 -		t = cp[2]; cp[2] = cp[0]; cp[0] = t;
 -		tp += 3;
 -	}
 -}
 -#endif
 -
 -#ifndef TIFFSwabArrayOfLong
 -void
 -TIFFSwabArrayOfLong(register uint32* lp, register unsigned long n)
 -{
 -	register unsigned char *cp;
 -	register unsigned char t;
 -
 -	/* XXX unroll loop some */
 -	while (n-- > 0) {
 -		cp = (unsigned char *)lp;
 -		t = cp[3]; cp[3] = cp[0]; cp[0] = t;
 -		t = cp[2]; cp[2] = cp[1]; cp[1] = t;
 -		lp++;
 -	}
 -}
 -#endif
 -
 -#ifndef TIFFSwabDouble
 -void
 -TIFFSwabDouble(double *dp)
 -{
 -        register uint32* lp = (uint32*) dp;
 -        uint32 t;
 -
 -	TIFFSwabArrayOfLong(lp, 2);
 -	t = lp[0]; lp[0] = lp[1]; lp[1] = t;
 -}
 -#endif
 -
 -#ifndef TIFFSwabArrayOfDouble
 -void
 -TIFFSwabArrayOfDouble(double* dp, register unsigned long n)
 -{
 -	register uint32* lp = (uint32*) dp;
 -        register uint32 t;
 -
 -	TIFFSwabArrayOfLong(lp, n + n);
 -        while (n-- > 0) {
 -		t = lp[0]; lp[0] = lp[1]; lp[1] = t;
 -                lp += 2;
 -        }
 -}
 -#endif
 -
 -/*
 - * Bit reversal tables.  TIFFBitRevTable[<byte>] gives
 - * the bit reversed value of <byte>.  Used in various
 - * places in the library when the FillOrder requires
 - * bit reversal of byte values (e.g. CCITT Fax 3
 - * encoding/decoding).  TIFFNoBitRevTable is provided
 - * for algorithms that want an equivalent table that
 - * do not reverse bit values.
 - */
 -static const unsigned char TIFFBitRevTable[256] = {
 -    0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
 -    0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
 -    0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
 -    0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
 -    0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
 -    0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
 -    0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
 -    0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
 -    0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
 -    0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
 -    0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
 -    0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
 -    0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
 -    0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
 -    0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
 -    0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
 -    0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
 -    0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
 -    0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
 -    0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
 -    0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
 -    0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
 -    0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
 -    0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
 -    0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
 -    0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
 -    0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
 -    0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
 -    0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
 -    0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
 -    0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
 -    0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
 -};
 -static const unsigned char TIFFNoBitRevTable[256] = {
 -    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 
 -    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 
 -    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 
 -    0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 
 -    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 
 -    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 
 -    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 
 -    0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 
 -    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 
 -    0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 
 -    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 
 -    0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 
 -    0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 
 -    0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 
 -    0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 
 -    0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 
 -    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 
 -    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 
 -    0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 
 -    0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 
 -    0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 
 -    0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
 -    0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
 -    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
 -    0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 
 -    0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
 -    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
 -    0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
 -    0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 
 -    0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
 -    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
 -    0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 
 -};
 -
 -const unsigned char*
 -TIFFGetBitRevTable(int reversed)
 -{
 -	return (reversed ? TIFFBitRevTable : TIFFNoBitRevTable);
 -}
 -
 -void
 -TIFFReverseBits(register unsigned char* cp, register unsigned long n)
 -{
 -	for (; n > 8; n -= 8) {
 -		cp[0] = TIFFBitRevTable[cp[0]];
 -		cp[1] = TIFFBitRevTable[cp[1]];
 -		cp[2] = TIFFBitRevTable[cp[2]];
 -		cp[3] = TIFFBitRevTable[cp[3]];
 -		cp[4] = TIFFBitRevTable[cp[4]];
 -		cp[5] = TIFFBitRevTable[cp[5]];
 -		cp[6] = TIFFBitRevTable[cp[6]];
 -		cp[7] = TIFFBitRevTable[cp[7]];
 -		cp += 8;
 -	}
 -	while (n-- > 0)
 -		*cp = TIFFBitRevTable[*cp], cp++;
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_thunder.c b/plugins/FreeImage/Source/LibTIFF/tif_thunder.c deleted file mode 100644 index b8c6cc93cc..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_thunder.c +++ /dev/null @@ -1,189 +0,0 @@ -/* $Id: tif_thunder.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#include "tiffiop.h"
 -#include <assert.h>
 -#ifdef THUNDER_SUPPORT
 -/*
 - * TIFF Library.
 - *
 - * ThunderScan 4-bit Compression Algorithm Support
 - */
 -
 -/*
 - * ThunderScan uses an encoding scheme designed for
 - * 4-bit pixel values.  Data is encoded in bytes, with
 - * each byte split into a 2-bit code word and a 6-bit
 - * data value.  The encoding gives raw data, runs of
 - * pixels, or pixel values encoded as a delta from the
 - * previous pixel value.  For the latter, either 2-bit
 - * or 3-bit delta values are used, with the deltas packed
 - * into a single byte.
 - */
 -#define	THUNDER_DATA		0x3f	/* mask for 6-bit data */
 -#define	THUNDER_CODE		0xc0	/* mask for 2-bit code word */
 -/* code values */
 -#define	THUNDER_RUN		0x00	/* run of pixels w/ encoded count */
 -#define	THUNDER_2BITDELTAS	0x40	/* 3 pixels w/ encoded 2-bit deltas */
 -#define	    DELTA2_SKIP		2	/* skip code for 2-bit deltas */
 -#define	THUNDER_3BITDELTAS	0x80	/* 2 pixels w/ encoded 3-bit deltas */
 -#define	    DELTA3_SKIP		4	/* skip code for 3-bit deltas */
 -#define	THUNDER_RAW		0xc0	/* raw data encoded */
 -
 -static const int twobitdeltas[4] = { 0, 1, 0, -1 };
 -static const int threebitdeltas[8] = { 0, 1, 2, 3, 0, -3, -2, -1 };
 -
 -#define	SETPIXEL(op, v) {                     \
 -	lastpixel = (v) & 0xf;                \
 -        if ( npixels < maxpixels )         \
 -        {                                     \
 -	  if (npixels++ & 1)                  \
 -	    *op++ |= lastpixel;               \
 -	  else                                \
 -	    op[0] = (tidataval_t) (lastpixel << 4); \
 -        }                                     \
 -}
 -
 -static int
 -ThunderSetupDecode(TIFF* tif)
 -{
 -	static const char module[] = "ThunderSetupDecode";
 -
 -        if ( tif->tif_dir.td_bitspersample != 4 )
 -        {
 -                TIFFErrorExt(tif->tif_clientdata, module,
 -                             "Wrong bitspersample value (%d), Thunder decoder only supports 4bits per sample.",
 -                             (int) tif->tif_dir.td_bitspersample );
 -                return 0;
 -        }
 -        
 -
 -	return (1);
 -}
 -
 -static int
 -ThunderDecode(TIFF* tif, tidata_t op, tsize_t maxpixels)
 -{
 -	register unsigned char *bp;
 -	register tsize_t cc;
 -	unsigned int lastpixel;
 -	tsize_t npixels;
 -
 -	bp = (unsigned char *)tif->tif_rawcp;
 -	cc = tif->tif_rawcc;
 -	lastpixel = 0;
 -	npixels = 0;
 -	while (cc > 0 && npixels < maxpixels) {
 -		int n, delta;
 -
 -		n = *bp++, cc--;
 -		switch (n & THUNDER_CODE) {
 -		case THUNDER_RUN:		/* pixel run */
 -			/*
 -			 * Replicate the last pixel n times,
 -			 * where n is the lower-order 6 bits.
 -			 */
 -			if (npixels & 1) {
 -				op[0] |= lastpixel;
 -				lastpixel = *op++; npixels++; n--;
 -			} else
 -				lastpixel |= lastpixel << 4;
 -			npixels += n;
 -			if (npixels < maxpixels) {
 -				for (; n > 0; n -= 2)
 -					*op++ = (tidataval_t) lastpixel;
 -			}
 -			if (n == -1)
 -				*--op &= 0xf0;
 -			lastpixel &= 0xf;
 -			break;
 -		case THUNDER_2BITDELTAS:	/* 2-bit deltas */
 -			if ((delta = ((n >> 4) & 3)) != DELTA2_SKIP)
 -				SETPIXEL(op, lastpixel + twobitdeltas[delta]);
 -			if ((delta = ((n >> 2) & 3)) != DELTA2_SKIP)
 -				SETPIXEL(op, lastpixel + twobitdeltas[delta]);
 -			if ((delta = (n & 3)) != DELTA2_SKIP)
 -				SETPIXEL(op, lastpixel + twobitdeltas[delta]);
 -			break;
 -		case THUNDER_3BITDELTAS:	/* 3-bit deltas */
 -			if ((delta = ((n >> 3) & 7)) != DELTA3_SKIP)
 -				SETPIXEL(op, lastpixel + threebitdeltas[delta]);
 -			if ((delta = (n & 7)) != DELTA3_SKIP)
 -				SETPIXEL(op, lastpixel + threebitdeltas[delta]);
 -			break;
 -		case THUNDER_RAW:		/* raw data */
 -			SETPIXEL(op, n);
 -			break;
 -		}
 -	}
 -	tif->tif_rawcp = (tidata_t) bp;
 -	tif->tif_rawcc = cc;
 -	if (npixels != maxpixels) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		    "ThunderDecode: %s data at scanline %ld (%lu != %lu)",
 -		    npixels < maxpixels ? "Not enough" : "Too much",
 -		    (long) tif->tif_row, (long) npixels, (long) maxpixels);
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -static int
 -ThunderDecodeRow(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s)
 -{
 -	tidata_t row = buf;
 -	
 -	(void) s;
 -	while ((long)occ > 0) {
 -		if (!ThunderDecode(tif, row, tif->tif_dir.td_imagewidth))
 -			return (0);
 -		occ -= tif->tif_scanlinesize;
 -		row += tif->tif_scanlinesize;
 -	}
 -
 -        return (1);
 -}
 -
 -int
 -TIFFInitThunderScan(TIFF* tif, int scheme)
 -{
 -	(void) scheme;
 -	tif->tif_decoderow = ThunderDecodeRow;
 -	tif->tif_decodestrip = ThunderDecodeRow;
 -        tif->tif_setupdecode = ThunderSetupDecode;
 -	return (1);
 -}
 -#endif /* THUNDER_SUPPORT */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 -
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_tile.c b/plugins/FreeImage/Source/LibTIFF/tif_tile.c deleted file mode 100644 index 4659825aab..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_tile.c +++ /dev/null @@ -1,280 +0,0 @@ -/* $Id: tif_tile.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1991-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Tiled Image Support Routines.
 - */
 -#include "tiffiop.h"
 -
 -static uint32
 -summarize(TIFF* tif, size_t summand1, size_t summand2, const char* where)
 -{
 -	/*
 -	 * XXX: We are using casting to uint32 here, because sizeof(size_t)
 -	 * may be larger than sizeof(uint32) on 64-bit architectures.
 -	 */
 -	uint32	bytes = summand1 + summand2;
 -
 -	if (bytes - summand1 != summand2) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Integer overflow in %s", where);
 -		bytes = 0;
 -	}
 -
 -	return (bytes);
 -}
 -
 -static uint32
 -multiply(TIFF* tif, size_t nmemb, size_t elem_size, const char* where)
 -{
 -	uint32	bytes = nmemb * elem_size;
 -
 -	if (elem_size && bytes / elem_size != nmemb) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Integer overflow in %s", where);
 -		bytes = 0;
 -	}
 -
 -	return (bytes);
 -}
 -
 -/*
 - * Compute which tile an (x,y,z,s) value is in.
 - */
 -ttile_t
 -TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	uint32 dx = td->td_tilewidth;
 -	uint32 dy = td->td_tilelength;
 -	uint32 dz = td->td_tiledepth;
 -	ttile_t tile = 1;
 -
 -	if (td->td_imagedepth == 1)
 -		z = 0;
 -	if (dx == (uint32) -1)
 -		dx = td->td_imagewidth;
 -	if (dy == (uint32) -1)
 -		dy = td->td_imagelength;
 -	if (dz == (uint32) -1)
 -		dz = td->td_imagedepth;
 -	if (dx != 0 && dy != 0 && dz != 0) {
 -		uint32 xpt = TIFFhowmany(td->td_imagewidth, dx); 
 -		uint32 ypt = TIFFhowmany(td->td_imagelength, dy); 
 -		uint32 zpt = TIFFhowmany(td->td_imagedepth, dz); 
 -
 -		if (td->td_planarconfig == PLANARCONFIG_SEPARATE) 
 -			tile = (xpt*ypt*zpt)*s +
 -			     (xpt*ypt)*(z/dz) +
 -			     xpt*(y/dy) +
 -			     x/dx;
 -		else
 -			tile = (xpt*ypt)*(z/dz) + xpt*(y/dy) + x/dx;
 -	}
 -	return (tile);
 -}
 -
 -/*
 - * Check an (x,y,z,s) coordinate
 - * against the image bounds.
 - */
 -int
 -TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	if (x >= td->td_imagewidth) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%lu: Col out of range, max %lu",
 -			     (unsigned long) x,
 -			     (unsigned long) (td->td_imagewidth - 1));
 -		return (0);
 -	}
 -	if (y >= td->td_imagelength) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%lu: Row out of range, max %lu",
 -			     (unsigned long) y,
 -			     (unsigned long) (td->td_imagelength - 1));
 -		return (0);
 -	}
 -	if (z >= td->td_imagedepth) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%lu: Depth out of range, max %lu",
 -			     (unsigned long) z,
 -			     (unsigned long) (td->td_imagedepth - 1));
 -		return (0);
 -	}
 -	if (td->td_planarconfig == PLANARCONFIG_SEPARATE &&
 -	    s >= td->td_samplesperpixel) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			     "%lu: Sample out of range, max %lu",
 -			     (unsigned long) s,
 -			     (unsigned long) (td->td_samplesperpixel - 1));
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Compute how many tiles are in an image.
 - */
 -ttile_t
 -TIFFNumberOfTiles(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	uint32 dx = td->td_tilewidth;
 -	uint32 dy = td->td_tilelength;
 -	uint32 dz = td->td_tiledepth;
 -	ttile_t ntiles;
 -
 -	if (dx == (uint32) -1)
 -		dx = td->td_imagewidth;
 -	if (dy == (uint32) -1)
 -		dy = td->td_imagelength;
 -	if (dz == (uint32) -1)
 -		dz = td->td_imagedepth;
 -	ntiles = (dx == 0 || dy == 0 || dz == 0) ? 0 :
 -	    multiply(tif, multiply(tif, TIFFhowmany(td->td_imagewidth, dx),
 -				   TIFFhowmany(td->td_imagelength, dy),
 -				   "TIFFNumberOfTiles"),
 -		     TIFFhowmany(td->td_imagedepth, dz), "TIFFNumberOfTiles");
 -	if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
 -		ntiles = multiply(tif, ntiles, td->td_samplesperpixel,
 -				  "TIFFNumberOfTiles");
 -	return (ntiles);
 -}
 -
 -/*
 - * Compute the # bytes in each row of a tile.
 - */
 -tsize_t
 -TIFFTileRowSize(TIFF* tif)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	tsize_t rowsize;
 -	
 -	if (td->td_tilelength == 0 || td->td_tilewidth == 0)
 -		return ((tsize_t) 0);
 -	rowsize = multiply(tif, td->td_bitspersample, td->td_tilewidth,
 -			   "TIFFTileRowSize");
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG)
 -		rowsize = multiply(tif, rowsize, td->td_samplesperpixel,
 -				   "TIFFTileRowSize");
 -	return ((tsize_t) TIFFhowmany8(rowsize));
 -}
 -
 -/*
 - * Compute the # bytes in a variable length, row-aligned tile.
 - */
 -tsize_t
 -TIFFVTileSize(TIFF* tif, uint32 nrows)
 -{
 -	TIFFDirectory *td = &tif->tif_dir;
 -	tsize_t tilesize;
 -
 -	if (td->td_tilelength == 0 || td->td_tilewidth == 0 ||
 -	    td->td_tiledepth == 0)
 -		return ((tsize_t) 0);
 -	if (td->td_planarconfig == PLANARCONFIG_CONTIG &&
 -	    td->td_photometric == PHOTOMETRIC_YCBCR &&
 -	    !isUpSampled(tif)) {
 -		/*
 -		 * Packed YCbCr data contain one Cb+Cr for every
 -		 * HorizontalSampling*VerticalSampling Y values.
 -		 * Must also roundup width and height when calculating
 -		 * since images that are not a multiple of the
 -		 * horizontal/vertical subsampling area include
 -		 * YCbCr data for the extended image.
 -		 */
 -		tsize_t w =
 -		    TIFFroundup(td->td_tilewidth, td->td_ycbcrsubsampling[0]);
 -		tsize_t rowsize =
 -		    TIFFhowmany8(multiply(tif, w, td->td_bitspersample,
 -					  "TIFFVTileSize"));
 -		tsize_t samplingarea =
 -		    td->td_ycbcrsubsampling[0]*td->td_ycbcrsubsampling[1];
 -		if (samplingarea == 0) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Invalid YCbCr subsampling");
 -			return 0;
 -		}
 -		nrows = TIFFroundup(nrows, td->td_ycbcrsubsampling[1]);
 -		/* NB: don't need TIFFhowmany here 'cuz everything is rounded */
 -		tilesize = multiply(tif, nrows, rowsize, "TIFFVTileSize");
 -		tilesize = summarize(tif, tilesize,
 -				     multiply(tif, 2, tilesize / samplingarea,
 -					      "TIFFVTileSize"),
 -				     "TIFFVTileSize");
 -	} else
 -		tilesize = multiply(tif, nrows, TIFFTileRowSize(tif),
 -				    "TIFFVTileSize");
 -	return ((tsize_t)
 -	    multiply(tif, tilesize, td->td_tiledepth, "TIFFVTileSize"));
 -}
 -
 -/*
 - * Compute the # bytes in a row-aligned tile.
 - */
 -tsize_t
 -TIFFTileSize(TIFF* tif)
 -{
 -	return (TIFFVTileSize(tif, tif->tif_dir.td_tilelength));
 -}
 -
 -/*
 - * Compute a default tile size based on the image
 - * characteristics and a requested value.  If a
 - * request is <1 then we choose a size according
 - * to certain heuristics.
 - */
 -void
 -TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th)
 -{
 -	(*tif->tif_deftilesize)(tif, tw, th);
 -}
 -
 -void
 -_TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th)
 -{
 -	(void) tif;
 -	if (*(int32*) tw < 1)
 -		*tw = 256;
 -	if (*(int32*) th < 1)
 -		*th = 256;
 -	/* roundup to a multiple of 16 per the spec */
 -	if (*tw & 0xf)
 -		*tw = TIFFroundup(*tw, 16);
 -	if (*th & 0xf)
 -		*th = TIFFroundup(*th, 16);
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_unix.c b/plugins/FreeImage/Source/LibTIFF/tif_unix.c deleted file mode 100644 index 7e294cb78b..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_unix.c +++ /dev/null @@ -1,300 +0,0 @@ -/* $Id: tif_unix.c,v 1.35 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library UNIX-specific Routines. These are should also work with the
 - * Windows Common RunTime Library.
 - */
 -#include "tif_config.h"
 -
 -#ifdef HAVE_SYS_TYPES_H
 -# include <sys/types.h>
 -#endif
 -
 -#include <stdarg.h>
 -#include <stdlib.h>
 -#include <sys/stat.h>
 -
 -#ifdef HAVE_UNISTD_H
 -# include <unistd.h>
 -#endif
 -
 -#ifdef HAVE_FCNTL_H
 -# include <fcntl.h>
 -#endif
 -
 -#ifdef HAVE_IO_H
 -# include <io.h>
 -#endif
 -
 -#include "tiffiop.h"
 -
 -static tsize_t
 -_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return ((tsize_t) read((int) fd, buf, (size_t) size));
 -}
 -
 -static tsize_t
 -_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return ((tsize_t) write((int) fd, buf, (size_t) size));
 -}
 -
 -static toff_t
 -_tiffSeekProc(thandle_t fd, toff_t off, int whence)
 -{
 -	return ((toff_t) lseek((int) fd, (off_t) off, whence));
 -}
 -
 -static int
 -_tiffCloseProc(thandle_t fd)
 -{
 -	return (close((int) fd));
 -}
 -
 -
 -static toff_t
 -_tiffSizeProc(thandle_t fd)
 -{
 -#ifdef _AM29K
 -	long fsize;
 -	return ((fsize = lseek((int) fd, 0, SEEK_END)) < 0 ? 0 : fsize);
 -#else
 -	struct stat sb;
 -	return (toff_t) (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size);
 -#endif
 -}
 -
 -#ifdef HAVE_MMAP
 -#include <sys/mman.h>
 -
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	toff_t size = _tiffSizeProc(fd);
 -	if (size != (toff_t) -1) {
 -		*pbase = (tdata_t)
 -		    mmap(0, size, PROT_READ, MAP_SHARED, (int) fd, 0);
 -		if (*pbase != (tdata_t) -1) {
 -			*psize = size;
 -			return (1);
 -		}
 -	}
 -	return (0);
 -}
 -
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -	(void) fd;
 -	(void) munmap(base, (off_t) size);
 -}
 -#else /* !HAVE_MMAP */
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	(void) fd; (void) pbase; (void) psize;
 -	return (0);
 -}
 -
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -	(void) fd; (void) base; (void) size;
 -}
 -#endif /* !HAVE_MMAP */
 -
 -/*
 - * Open a TIFF file descriptor for read/writing.
 - */
 -TIFF*
 -TIFFFdOpen(int fd, const char* name, const char* mode)
 -{
 -	TIFF* tif;
 -
 -	tif = TIFFClientOpen(name, mode,
 -	    (thandle_t) fd,
 -	    _tiffReadProc, _tiffWriteProc,
 -	    _tiffSeekProc, _tiffCloseProc, _tiffSizeProc,
 -	    _tiffMapProc, _tiffUnmapProc);
 -	if (tif)
 -		tif->tif_fd = fd;
 -	return (tif);
 -}
 -
 -/*
 - * Open a TIFF file for read/writing.
 - */
 -TIFF*
 -TIFFOpen(const char* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpen";
 -	int m, fd;
 -        TIFF* tif;
 -
 -	m = _TIFFgetMode(mode, module);
 -	if (m == -1)
 -		return ((TIFF*)0);
 -
 -/* for cygwin and mingw */        
 -#ifdef O_BINARY
 -        m |= O_BINARY;
 -#endif        
 -        
 -#ifdef _AM29K
 -	fd = open(name, m);
 -#else
 -	fd = open(name, m, 0666);
 -#endif
 -	if (fd < 0) {
 -		TIFFErrorExt(0, module, "%s: Cannot open", name);
 -		return ((TIFF *)0);
 -	}
 -
 -	tif = TIFFFdOpen((int)fd, name, mode);
 -	if (!tif)
 -		close(fd);
 -	return tif;
 -}
 -
 -#ifdef __WIN32__
 -#include <windows.h>
 -/*
 - * Open a TIFF file with a Unicode filename, for read/writing.
 - */
 -TIFF*
 -TIFFOpenW(const wchar_t* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpenW";
 -	int m, fd;
 -	int mbsize;
 -	char *mbname;
 -	TIFF* tif;
 -
 -	m = _TIFFgetMode(mode, module);
 -	if (m == -1)
 -		return ((TIFF*)0);
 -
 -/* for cygwin and mingw */        
 -#ifdef O_BINARY
 -        m |= O_BINARY;
 -#endif        
 -        
 -	fd = _wopen(name, m, 0666);
 -	if (fd < 0) {
 -		TIFFErrorExt(0, module, "%s: Cannot open", name);
 -		return ((TIFF *)0);
 -	}
 -
 -	mbname = NULL;
 -	mbsize = WideCharToMultiByte(CP_ACP, 0, name, -1, NULL, 0, NULL, NULL);
 -	if (mbsize > 0) {
 -		mbname = _TIFFmalloc(mbsize);
 -		if (!mbname) {
 -			TIFFErrorExt(0, module,
 -			"Can't allocate space for filename conversion buffer");
 -			return ((TIFF*)0);
 -		}
 -
 -		WideCharToMultiByte(CP_ACP, 0, name, -1, mbname, mbsize,
 -				    NULL, NULL);
 -	}
 -
 -	tif = TIFFFdOpen((int)fd, (mbname != NULL) ? mbname : "<unknown>",
 -			 mode);
 -	
 -	_TIFFfree(mbname);
 -	
 -	if (!tif)
 -		close(fd);
 -	return tif;
 -}
 -#endif
 -
 -void*
 -_TIFFmalloc(tsize_t s)
 -{
 -	return (malloc((size_t) s));
 -}
 -
 -void
 -_TIFFfree(tdata_t p)
 -{
 -	free(p);
 -}
 -
 -void*
 -_TIFFrealloc(tdata_t p, tsize_t s)
 -{
 -	return (realloc(p, (size_t) s));
 -}
 -
 -void
 -_TIFFmemset(tdata_t p, int v, tsize_t c)
 -{
 -	memset(p, v, (size_t) c);
 -}
 -
 -void
 -_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
 -{
 -	memcpy(d, s, (size_t) c);
 -}
 -
 -int
 -_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
 -{
 -	return (memcmp(p1, p2, (size_t) c));
 -}
 -
 -static void
 -unixWarningHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	fprintf(stderr, "Warning, ");
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -TIFFErrorHandler _TIFFwarningHandler = unixWarningHandler;
 -
 -static void
 -unixErrorHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -TIFFErrorHandler _TIFFerrorHandler = unixErrorHandler;
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_version.c b/plugins/FreeImage/Source/LibTIFF/tif_version.c deleted file mode 100644 index 6badfcdb5f..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_version.c +++ /dev/null @@ -1,40 +0,0 @@ -/* $Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_version.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -/*
 - * Copyright (c) 1992-1997 Sam Leffler
 - * Copyright (c) 1992-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -#include "tiffiop.h"
 -
 -static const char TIFFVersion[] = TIFFLIB_VERSION_STR;
 -
 -const char*
 -TIFFGetVersion(void)
 -{
 -	return (TIFFVersion);
 -}
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_vms.c b/plugins/FreeImage/Source/LibTIFF/tif_vms.c deleted file mode 100644 index 553f5072e3..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_vms.c +++ /dev/null @@ -1,595 +0,0 @@ -/* $Id: tif_vms.c,v 1.21 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library VMS-specific Routines.
 - */
 -
 -#include <stdlib.h>
 -#include <unixio.h>
 -#include "tiffiop.h"
 -#if !HAVE_IEEEFP
 -#include <math.h>
 -#endif
 -
 -#ifdef VAXC
 -#define	NOSHARE	noshare
 -#else
 -#define	NOSHARE
 -#endif
 -
 -#ifdef __alpha
 -/* Dummy entry point for backwards compatibility */
 -void TIFFModeCCITTFax3(void){}
 -#endif
 -
 -static tsize_t
 -_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return (read((int) fd, buf, size));
 -}
 -
 -static tsize_t
 -_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return (write((int) fd, buf, size));
 -}
 -
 -static toff_t
 -_tiffSeekProc(thandle_t fd, toff_t off, int whence)
 -{
 -	return ((toff_t) lseek((int) fd, (off_t) off, whence));
 -}
 -
 -static int
 -_tiffCloseProc(thandle_t fd)
 -{
 -	return (close((int) fd));
 -}
 -
 -#include <sys/stat.h>
 -
 -static toff_t
 -_tiffSizeProc(thandle_t fd)
 -{
 -	struct stat sb;
 -	return (toff_t) (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size);
 -}
 -
 -#ifdef HAVE_MMAP
 -#include <starlet.h>
 -#include <fab.h>
 -#include <secdef.h>
 -
 -/*
 - * Table for storing information on current open sections. 
 - * (Should really be a linked list)
 - */
 -#define MAX_MAPPED 100
 -static int no_mapped = 0;
 -static struct {
 -	char *base;
 -	char *top;
 -	unsigned short channel;
 -} map_table[MAX_MAPPED];
 -
 -/* 
 - * This routine maps a file into a private section. Note that this 
 - * method of accessing a file is by far the fastest under VMS.
 - * The routine may fail (i.e. return 0) for several reasons, for
 - * example:
 - * - There is no more room for storing the info on sections.
 - * - The process is out of open file quota, channels, ...
 - * - fd does not describe an opened file.
 - * - The file is already opened for write access by this process
 - *   or another process
 - * - There is no free "hole" in virtual memory that fits the
 - *   size of the file
 - */
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	char name[256];
 -	struct FAB fab;
 -	unsigned short channel;
 -	char *inadr[2], *retadr[2];
 -	unsigned long status;
 -	long size;
 -	
 -	if (no_mapped >= MAX_MAPPED)
 -		return(0);
 -	/*
 -	 * We cannot use a file descriptor, we
 -	 * must open the file once more.
 -	 */
 -	if (getname((int)fd, name, 1) == NULL)
 -		return(0);
 -	/* prepare the FAB for a user file open */
 -	fab = cc$rms_fab;
 -	fab.fab$l_fop |= FAB$V_UFO;
 -	fab.fab$b_fac = FAB$M_GET;
 -	fab.fab$b_shr = FAB$M_SHRGET;
 -	fab.fab$l_fna = name;
 -	fab.fab$b_fns = strlen(name);
 -	status = sys$open(&fab);	/* open file & get channel number */
 -	if ((status&1) == 0)
 -		return(0);
 -	channel = (unsigned short)fab.fab$l_stv;
 -	inadr[0] = inadr[1] = (char *)0; /* just an address in P0 space */
 -	/*
 -	 * Map the blocks of the file up to
 -	 * the EOF block into virtual memory.
 -	 */
 -	size = _tiffSizeProc(fd);
 -	status = sys$crmpsc(inadr, retadr, 0, SEC$M_EXPREG, 0,0,0, channel,
 -		TIFFhowmany(size,512), 0,0,0);
 -	if ((status&1) == 0){
 -		sys$dassgn(channel);
 -		return(0);
 -	}
 -	*pbase = (tdata_t) retadr[0];	/* starting virtual address */
 -	/*
 -	 * Use the size of the file up to the
 -	 * EOF mark for UNIX compatibility.
 -	 */
 -	*psize = (toff_t) size;
 -	/* Record the section in the table */
 -	map_table[no_mapped].base = retadr[0];
 -	map_table[no_mapped].top = retadr[1];
 -	map_table[no_mapped].channel = channel;
 -	no_mapped++;
 -
 -        return(1);
 -}
 -
 -/*
 - * This routine unmaps a section from the virtual address space of 
 - * the process, but only if the base was the one returned from a
 - * call to TIFFMapFileContents.
 - */
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -	char *inadr[2];
 -	int i, j;
 -	
 -	/* Find the section in the table */
 -	for (i = 0;i < no_mapped; i++) {
 -		if (map_table[i].base == (char *) base) {
 -			/* Unmap the section */
 -			inadr[0] = (char *) base;
 -			inadr[1] = map_table[i].top;
 -			sys$deltva(inadr, 0, 0);
 -			sys$dassgn(map_table[i].channel);
 -			/* Remove this section from the list */
 -			for (j = i+1; j < no_mapped; j++)
 -				map_table[j-1] = map_table[j];
 -			no_mapped--;
 -			return;
 -		}
 -	}
 -}
 -#else /* !HAVE_MMAP */
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	return (0);
 -}
 -
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -}
 -#endif /* !HAVE_MMAP */
 -
 -/*
 - * Open a TIFF file descriptor for read/writing.
 - */
 -TIFF*
 -TIFFFdOpen(int fd, const char* name, const char* mode)
 -{
 -	TIFF* tif;
 -
 -	tif = TIFFClientOpen(name, mode,
 -	    (thandle_t) fd,
 -	    _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc,
 -	    _tiffSizeProc, _tiffMapProc, _tiffUnmapProc);
 -	if (tif)
 -		tif->tif_fd = fd;
 -	return (tif);
 -}
 -
 -/*
 - * Open a TIFF file for read/writing.
 - */
 -TIFF*
 -TIFFOpen(const char* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpen";
 -	int m, fd;
 -
 -	m = _TIFFgetMode(mode, module);
 -	if (m == -1)
 -		return ((TIFF*)0);
 -        if (m&O_TRUNC){
 -                /*
 -		 * There is a bug in open in VAXC. If you use
 -		 * open w/ m=O_RDWR|O_CREAT|O_TRUNC the
 -		 * wrong thing happens.  On the other hand
 -		 * creat does the right thing.
 -                 */
 -                fd = creat((char *) /* bug in stdio.h */ name, 0666,
 -		    "alq = 128", "deq = 64", "mbc = 32",
 -		    "fop = tef");
 -	} else if (m&O_RDWR) {
 -		fd = open(name, m, 0666,
 -		    "deq = 64", "mbc = 32", "fop = tef", "ctx = stm");
 -	} else
 -		fd = open(name, m, 0666, "mbc = 32", "ctx = stm");
 -	if (fd < 0) {
 -		TIFFErrorExt(0, module, "%s: Cannot open", name);
 -		return ((TIFF*)0);
 -	}
 -	return (TIFFFdOpen(fd, name, mode));
 -}
 -
 -tdata_t
 -_TIFFmalloc(tsize_t s)
 -{
 -	return (malloc((size_t) s));
 -}
 -
 -void
 -_TIFFfree(tdata_t p)
 -{
 -	free(p);
 -}
 -
 -tdata_t
 -_TIFFrealloc(tdata_t p, tsize_t s)
 -{
 -	return (realloc(p, (size_t) s));
 -}
 -
 -void
 -_TIFFmemset(tdata_t p, int v, tsize_t c)
 -{
 -	memset(p, v, (size_t) c);
 -}
 -
 -void
 -_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
 -{
 -	memcpy(d, s, (size_t) c);
 -}
 -
 -int
 -_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
 -{
 -	return (memcmp(p1, p2, (size_t) c));
 -}
 -
 -/*
 - * On the VAX, we need to make those global, writable pointers
 - * non-shareable, otherwise they would be made shareable by default.
 - * On the AXP, this brain damage has been corrected. 
 - * 
 - * I (Karsten Spang, krs@kampsax.dk) have dug around in the GCC
 - * manual and the GAS code and have come up with the following
 - * construct, but I don't have GCC on my VAX, so it is untested.
 - * Please tell me if it does not work.
 - */
 -
 -static void
 -vmsWarningHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	fprintf(stderr, "Warning, ");
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -
 -NOSHARE TIFFErrorHandler _TIFFwarningHandler = vmsWarningHandler
 -#if defined(VAX) && defined(__GNUC__)
 -asm("_$$PsectAttributes_NOSHR$$_TIFFwarningHandler")
 -#endif
 -;
 -
 -static void
 -vmsErrorHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -}
 -
 -NOSHARE TIFFErrorHandler _TIFFerrorHandler = vmsErrorHandler
 -#if defined(VAX) && defined(__GNUC__)
 -asm("_$$PsectAttributes_NOSHR$$_TIFFerrorHandler")
 -#endif
 -;
 -
 -
 -#if !HAVE_IEEEFP
 -/* IEEE floting point handling */
 -
 -typedef	struct ieeedouble {
 -	unsigned long	mant2;          /* fix NDR: full 8-byte swap */
 -	unsigned long	mant	: 20,
 -		        exp	: 11,
 -		        sign	: 1;
 -} ieeedouble;
 -typedef	struct ieeefloat {
 -	unsigned long   mant	: 23,
 -		        exp	: 8,
 -		        sign	: 1;
 -} ieeefloat;
 -
 -/* 
 - * NB: These are D_FLOAT's, not G_FLOAT's. A G_FLOAT is
 - *  simply a reverse-IEEE float/double.
 - */
 -
 -typedef	struct {
 -	unsigned long	mant1	: 7,
 -		        exp	: 8,
 -		        sign	: 1,
 -		        mant2	: 16,
 -		        mant3   : 16,
 -		        mant4   : 16;
 -} nativedouble;
 -typedef	struct {
 -	unsigned long	mant1	: 7,
 -		        exp	: 8,
 -		        sign	: 1,
 -		        mant2	: 16;
 -} nativefloat;
 -
 -typedef	union {
 -	ieeedouble	ieee;
 -	nativedouble	native;
 -	char		b[8];
 -	uint32		l[2];
 -	double		d;
 -} double_t;
 -
 -typedef	union {
 -	ieeefloat	ieee;
 -	nativefloat	native;
 -	char		b[4];
 -	uint32		l;
 -	float		f;
 -} float_t;
 -
 -#if defined(VAXC) || defined(DECC)
 -#pragma inline(ieeetod,dtoieee)
 -#endif
 -
 -/*
 - * Convert an IEEE double precision number to native double precision.
 - * The source is contained in two longwords, the second holding the sign,
 - * exponent and the higher order bits of the mantissa, and the first
 - * holding the rest of the mantissa as follows:
 - * (Note: It is assumed that the number has been eight-byte swapped to
 - * LSB first.)
 - * 
 - * First longword:
 - *	32 least significant bits of mantissa
 - * Second longword:
 - *	0-19:	20 most significant bits of mantissa
 - *	20-30:	exponent
 - *	31:	sign
 - * The exponent is stored as excess 1023.
 - * The most significant bit of the mantissa is implied 1, and not stored.
 - * If the exponent and mantissa are zero, the number is zero.
 - * If the exponent is 0 (i.e. -1023) and the mantissa is non-zero, it is an
 - * unnormalized number with the most significant bit NOT implied.
 - * If the exponent is 2047, the number is invalid, in case the mantissa is zero,
 - * this means overflow (+/- depending of the sign bit), otherwise
 - * it simply means invalid number.
 - * 
 - * If the number is too large for the machine or was specified as overflow, 
 - * +/-HUGE_VAL is returned.
 - */
 -INLINE static void
 -ieeetod(double *dp)
 -{
 -	double_t source;
 -	long sign,exp,mant;
 -	double dmant;
 -
 -	source.ieee = ((double_t*)dp)->ieee;
 -	sign = source.ieee.sign;
 -	exp = source.ieee.exp;
 -	mant = source.ieee.mant;
 -
 -	if (exp == 2047) {
 -		if (mant)			/* Not a Number (NAN) */
 -			*dp = HUGE_VAL;
 -		else				/* +/- infinity */
 -			*dp = (sign ? -HUGE_VAL : HUGE_VAL);
 -		return;
 -	}
 -	if (!exp) {
 -		if (!(mant || source.ieee.mant2)) {	/* zero */
 -			*dp=0;
 -			return;
 -		} else {			/* Unnormalized number */
 -			/* NB: not -1023, the 1 bit is not implied */
 -			exp= -1022;
 -		}
 -	} else {
 -		mant |= 1<<20;
 -		exp -= 1023;
 -	}
 -	dmant = (((double) mant) +
 -		((double) source.ieee.mant2) / (((double) (1<<16)) *
 -		((double) (1<<16)))) / (double) (1<<20);
 -	dmant = ldexp(dmant, exp);
 -	if (sign)
 -		dmant= -dmant;
 -	*dp = dmant;
 -}
 -
 -INLINE static void
 -dtoieee(double *dp)
 -{
 -	double_t num;
 -	double x;
 -	int exp;
 -
 -	num.d = *dp;
 -	if (!num.d) {			/* Zero is just binary all zeros */
 -		num.l[0] = num.l[1] = 0;
 -		return;
 -	}
 -
 -	if (num.d < 0) {		/* Sign is encoded separately */
 -		num.d = -num.d;
 -		num.ieee.sign = 1;
 -	} else {
 -		num.ieee.sign = 0;
 -	}
 -
 -	/* Now separate the absolute value into mantissa and exponent */
 -	x = frexp(num.d, &exp);
 -
 -	/*
 -	 * Handle cases where the value is outside the
 -	 * range for IEEE floating point numbers. 
 -	 * (Overflow cannot happen on a VAX, but underflow
 -	 * can happen for G float.)
 -	 */
 -	if (exp < -1022) {		/* Unnormalized number */
 -		x = ldexp(x, -1023-exp);
 -		exp = 0;
 -	} else if (exp > 1023) {	/* +/- infinity */
 -		x = 0;
 -		exp = 2047;
 -	} else {			/* Get rid of most significant bit */
 -		x *= 2;
 -		x -= 1;
 -		exp += 1022; /* fix NDR: 1.0 -> x=0.5, exp=1 -> ieee.exp = 1023 */
 -	}
 -	num.ieee.exp = exp;
 -
 -	x *= (double) (1<<20);
 -	num.ieee.mant = (long) x;
 -	x -= (double) num.ieee.mant;
 -	num.ieee.mant2 = (long) (x*((double) (1<<16)*(double) (1<<16)));
 -
 -	if (!(num.ieee.mant || num.ieee.exp || num.ieee.mant2)) {
 -		/* Avoid negative zero */
 -		num.ieee.sign = 0;
 -	}
 -	((double_t*)dp)->ieee = num.ieee;
 -}
 -
 -/*
 - * Beware, these do not handle over/under-flow
 - * during conversion from ieee to native format.
 - */
 -#define	NATIVE2IEEEFLOAT(fp) { \
 -    float_t t; \
 -    if (t.ieee.exp = (fp)->native.exp) \
 -	t.ieee.exp += -129 + 127; \
 -    t.ieee.sign = (fp)->native.sign; \
 -    t.ieee.mant = ((fp)->native.mant1<<16)|(fp)->native.mant2; \
 -    *(fp) = t; \
 -}
 -#define	IEEEFLOAT2NATIVE(fp) { \
 -    float_t t; int v = (fp)->ieee.exp; \
 -    if (v) v += -127 + 129;		/* alter bias of exponent */\
 -    t.native.exp = v;			/* implicit truncation of exponent */\
 -    t.native.sign = (fp)->ieee.sign; \
 -    v = (fp)->ieee.mant; \
 -    t.native.mant1 = v >> 16; \
 -    t.native.mant2 = v;\
 -    *(fp) = t; \
 -}
 -
 -#define IEEEDOUBLE2NATIVE(dp) ieeetod(dp)
 -
 -#define NATIVE2IEEEDOUBLE(dp) dtoieee(dp)
 -
 -
 -/*
 - * These unions are used during floating point
 - * conversions.  The above macros define the
 - * conversion operations.
 - */
 -void
 -TIFFCvtIEEEFloatToNative(TIFF* tif, u_int n, float* f)
 -{
 -	float_t* fp = (float_t*) f;
 -
 -	while (n-- > 0) {
 -		IEEEFLOAT2NATIVE(fp);
 -		fp++;
 -	}
 -}
 -
 -void
 -TIFFCvtNativeToIEEEFloat(TIFF* tif, u_int n, float* f)
 -{
 -	float_t* fp = (float_t*) f;
 -
 -	while (n-- > 0) {
 -		NATIVE2IEEEFLOAT(fp);
 -		fp++;
 -	}
 -}
 -void
 -TIFFCvtIEEEDoubleToNative(TIFF* tif, u_int n, double* f)
 -{
 -	double_t* fp = (double_t*) f;
 -
 -	while (n-- > 0) {
 -		IEEEDOUBLE2NATIVE(fp);
 -		fp++;
 -	}
 -}
 -
 -void
 -TIFFCvtNativeToIEEEDouble(TIFF* tif, u_int n, double* f)
 -{
 -	double_t* fp = (double_t*) f;
 -
 -	while (n-- > 0) {
 -		NATIVE2IEEEDOUBLE(fp);
 -		fp++;
 -	}
 -}
 -#endif
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_warning.c b/plugins/FreeImage/Source/LibTIFF/tif_warning.c deleted file mode 100644 index a2dbbe7e2f..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_warning.c +++ /dev/null @@ -1,81 +0,0 @@ -/* $Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_warning.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - */
 -#include "tiffiop.h"
 -
 -TIFFErrorHandlerExt _TIFFwarningHandlerExt = NULL;
 -
 -TIFFErrorHandler
 -TIFFSetWarningHandler(TIFFErrorHandler handler)
 -{
 -	TIFFErrorHandler prev = _TIFFwarningHandler;
 -	_TIFFwarningHandler = handler;
 -	return (prev);
 -}
 -
 -TIFFErrorHandlerExt
 -TIFFSetWarningHandlerExt(TIFFErrorHandlerExt handler)
 -{
 -	TIFFErrorHandlerExt prev = _TIFFwarningHandlerExt;
 -	_TIFFwarningHandlerExt = handler;
 -	return (prev);
 -}
 -
 -void
 -TIFFWarning(const char* module, const char* fmt, ...)
 -{
 -	va_list ap;
 -	va_start(ap, fmt);
 -	if (_TIFFwarningHandler)
 -		(*_TIFFwarningHandler)(module, fmt, ap);
 -	if (_TIFFwarningHandlerExt)
 -		(*_TIFFwarningHandlerExt)(0, module, fmt, ap);
 -	va_end(ap);
 -}
 -
 -void
 -TIFFWarningExt(thandle_t fd, const char* module, const char* fmt, ...)
 -{
 -	va_list ap;
 -	va_start(ap, fmt);
 -	if (_TIFFwarningHandler)
 -		(*_TIFFwarningHandler)(module, fmt, ap);
 -	if (_TIFFwarningHandlerExt)
 -		(*_TIFFwarningHandlerExt)(fd, module, fmt, ap);
 -	va_end(ap);
 -}
 -
 -
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_win3.c b/plugins/FreeImage/Source/LibTIFF/tif_win3.c deleted file mode 100644 index aa21e3aef8..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_win3.c +++ /dev/null @@ -1,232 +0,0 @@ -/* $Header: /cvsroot/freeimage/FreeImage/Source/LibTIFF/tif_win3.c,v 1.35 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library Windows 3.x-specific Routines.
 - */
 -#include "tiffiop.h"
 -#if defined(__WATCOMC__) || defined(__BORLANDC__) || defined(_MSC_VER)
 -#include <io.h>		/* for open, close, etc. function prototypes */
 -#endif
 -
 -#include <windows.h>
 -#include <windowsx.h>
 -#include <memory.h>
 -
 -static tsize_t 
 -_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return (_hread(fd, buf, size));
 -}
 -
 -static tsize_t
 -_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	return (_hwrite(fd, buf, size));
 -}
 -
 -static toff_t
 -_tiffSeekProc(thandle_t fd, toff_t off, int whence)
 -{
 -	return (_llseek(fd, (off_t) off, whence));
 -}
 -
 -static int
 -_tiffCloseProc(thandle_t fd)
 -{
 -	return (_lclose(fd));
 -}
 -
 -#include <sys/stat.h>
 -
 -static toff_t
 -_tiffSizeProc(thandle_t fd)
 -{
 -	struct stat sb;
 -	return (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size);
 -}
 -
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	return (0);
 -}
 -
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -}
 -
 -/*
 - * Open a TIFF file descriptor for read/writing.
 - */
 -TIFF*
 -TIFFFdOpen(int fd, const char* name, const char* mode)
 -{
 -	TIFF* tif;
 -
 -	tif = TIFFClientOpen(name, mode,
 -	    (thandle_t) fd,
 -	    _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc,
 -	    _tiffSizeProc, _tiffMapProc, _tiffUnmapProc);
 -	if (tif)
 -		tif->tif_fd = fd;
 -	return (tif);
 -}
 -
 -/*
 - * Open a TIFF file for read/writing.
 - */
 -TIFF*
 -TIFFOpen(const char* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpen";
 -	int m, fd;
 -	OFSTRUCT of;
 -	int mm = 0;
 -
 -	m = _TIFFgetMode(mode, module);
 -	if (m == -1)
 -		return ((TIFF*)0);
 -	if (m & O_CREAT) {
 -		if ((m & O_TRUNC) || OpenFile(name, &of, OF_EXIST) != HFILE_ERROR)
 -			mm |= OF_CREATE;
 -	}
 -	if (m & O_WRONLY)
 -		mm |= OF_WRITE;
 -	if (m & O_RDWR)
 -		mm |= OF_READWRITE;
 -	fd = OpenFile(name, &of, mm);
 -	if (fd < 0) {
 -		TIFFErrorExt(0, module, "%s: Cannot open", name);
 -		return ((TIFF*)0);
 -	}
 -	return (TIFFFdOpen(fd, name, mode));
 -}
 -
 -tdata_t
 -_TIFFmalloc(tsize_t s)
 -{
 -	return (tdata_t) GlobalAllocPtr(GHND, (DWORD) s);
 -}
 -
 -void
 -_TIFFfree(tdata_t p)
 -{
 -	GlobalFreePtr(p);
 -}
 -
 -tdata_t
 -_TIFFrealloc(tdata_t p, tsize_t s)
 -{
 -	return (tdata_t) GlobalReAllocPtr(p, (DWORD) s, GHND);
 -}
 -
 -void
 -_TIFFmemset(tdata_t p, int v, tsize_t c)
 -{
 -	char* pp = (char*) p;
 -
 -	while (c > 0) {
 -		tsize_t chunk = 0x10000 - ((uint32) pp & 0xffff);/* What's left in segment */
 -		if (chunk > 0xff00)				/* No more than 0xff00 */
 -			chunk = 0xff00;
 -		if (chunk > c)					/* No more than needed */
 -			chunk = c;
 -		memset(pp, v, chunk);
 -		pp = (char*) (chunk + (char huge*) pp);
 -		c -= chunk;
 -	}
 -}
 -
 -void
 -_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
 -{
 -	if (c > 0xFFFF)
 -		hmemcpy((void _huge*) d, (void _huge*) s, c);
 -	else
 -		(void) memcpy(d, s, (size_t) c);
 -}
 -
 -int
 -_TIFFmemcmp(const tdata_t d, const tdata_t s, tsize_t c)
 -{
 -	char* dd = (char*) d;
 -	char* ss = (char*) s;
 -	tsize_t chunks, chunkd, chunk;
 -	int result;
 -
 -	while (c > 0) {
 -		chunks = 0x10000 - ((uint32) ss & 0xffff);	/* What's left in segment */
 -		chunkd = 0x10000 - ((uint32) dd & 0xffff);	/* What's left in segment */
 -		chunk = c;					/* Get the largest of     */
 -		if (chunk > chunks)				/*   c, chunks, chunkd,   */
 -			chunk = chunks;				/*   0xff00               */
 -		if (chunk > chunkd)
 -			chunk = chunkd;
 -		if (chunk > 0xff00)
 -			chunk = 0xff00;
 -		result = memcmp(dd, ss, chunk);
 -		if (result != 0)
 -			return (result);
 -		dd = (char*) (chunk + (char huge*) dd);
 -		ss = (char*) (chunk + (char huge*) ss);
 -		c -= chunk;
 -	}
 -	return (0);
 -}
 -
 -static void
 -win3WarningHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	char e[512] = { '\0' };
 -	if (module != NULL)
 -		strcat(strcpy(e, module), ":");
 -	vsprintf(e+strlen(e), fmt, ap);
 -	strcat(e, ".");
 -	MessageBox(GetActiveWindow(), e, "LibTIFF Warning",
 -	    MB_OK|MB_ICONEXCLAMATION);
 -}
 -TIFFErrorHandler _TIFFwarningHandler = win3WarningHandler;
 -
 -static void
 -win3ErrorHandler(const char* module, const char* fmt, va_list ap)
 -{
 -	char e[512] = { '\0' };
 -	if (module != NULL)
 -		strcat(strcpy(e, module), ":");
 -	vsprintf(e+strlen(e), fmt, ap);
 -	strcat(e, ".");
 -	MessageBox(GetActiveWindow(), e, "LibTIFF Error", MB_OK|MB_ICONSTOP);
 -}
 -TIFFErrorHandler _TIFFerrorHandler = win3ErrorHandler;
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_win32.c b/plugins/FreeImage/Source/LibTIFF/tif_win32.c deleted file mode 100644 index 5b3875901d..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_win32.c +++ /dev/null @@ -1,408 +0,0 @@ -/* $Id: tif_win32.c,v 1.35 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library Win32-specific Routines.  Adapted from tif_unix.c 4/5/95 by
 - * Scott Wagner (wagner@itek.com), Itek Graphix, Rochester, NY USA
 - */
 -#include "tiffiop.h"
 -
 -#include <windows.h>
 -
 -static tsize_t
 -_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	DWORD dwSizeRead;
 -	if (!ReadFile(fd, buf, size, &dwSizeRead, NULL))
 -		return(0);
 -	return ((tsize_t) dwSizeRead);
 -}
 -
 -static tsize_t
 -_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
 -{
 -	DWORD dwSizeWritten;
 -	if (!WriteFile(fd, buf, size, &dwSizeWritten, NULL))
 -		return(0);
 -	return ((tsize_t) dwSizeWritten);
 -}
 -
 -static toff_t
 -_tiffSeekProc(thandle_t fd, toff_t off, int whence)
 -{
 -        ULARGE_INTEGER li;
 -	DWORD dwMoveMethod;
 -
 -	li.QuadPart = off;
 -        
 -	switch(whence)
 -	{
 -	case SEEK_SET:
 -		dwMoveMethod = FILE_BEGIN;
 -		break;
 -	case SEEK_CUR:
 -		dwMoveMethod = FILE_CURRENT;
 -		break;
 -	case SEEK_END:
 -		dwMoveMethod = FILE_END;
 -		break;
 -	default:
 -		dwMoveMethod = FILE_BEGIN;
 -		break;
 -	}
 -	return ((toff_t)SetFilePointer(fd, (LONG) li.LowPart,
 -				       (PLONG)&li.HighPart, dwMoveMethod));
 -}
 -
 -static int
 -_tiffCloseProc(thandle_t fd)
 -{
 -	return (CloseHandle(fd) ? 0 : -1);
 -}
 -
 -static toff_t
 -_tiffSizeProc(thandle_t fd)
 -{
 -	return ((toff_t)GetFileSize(fd, NULL));
 -}
 -
 -static int
 -_tiffDummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	(void) fd;
 -	(void) pbase;
 -	(void) psize;
 -	return (0);
 -}
 -
 -/*
 - * From "Hermann Josef Hill" <lhill@rhein-zeitung.de>:
 - *
 - * Windows uses both a handle and a pointer for file mapping,
 - * but according to the SDK documentation and Richter's book
 - * "Advanced Windows Programming" it is safe to free the handle
 - * after obtaining the file mapping pointer
 - *
 - * This removes a nasty OS dependency and cures a problem
 - * with Visual C++ 5.0
 - */
 -static int
 -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
 -{
 -	toff_t size;
 -	HANDLE hMapFile;
 -
 -	if ((size = _tiffSizeProc(fd)) == 0xFFFFFFFF)
 -		return (0);
 -	hMapFile = CreateFileMapping(fd, NULL, PAGE_READONLY, 0, size, NULL);
 -	if (hMapFile == NULL)
 -		return (0);
 -	*pbase = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
 -	CloseHandle(hMapFile);
 -	if (*pbase == NULL)
 -		return (0);
 -	*psize = size;
 -	return(1);
 -}
 -
 -static void
 -_tiffDummyUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -	(void) fd;
 -	(void) base;
 -	(void) size;
 -}
 -
 -static void
 -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
 -{
 -	UnmapViewOfFile(base);
 -}
 -
 -/*
 - * Open a TIFF file descriptor for read/writing.
 - * Note that TIFFFdOpen and TIFFOpen recognise the character 'u' in the mode
 - * string, which forces the file to be opened unmapped.
 - */
 -TIFF*
 -TIFFFdOpen(int ifd, const char* name, const char* mode)
 -{
 -	TIFF* tif;
 -	BOOL fSuppressMap = (mode[1] == 'u' || (mode[1]!=0 && mode[2] == 'u'));
 -
 -	tif = TIFFClientOpen(name, mode, (thandle_t)ifd,
 -			_tiffReadProc, _tiffWriteProc,
 -			_tiffSeekProc, _tiffCloseProc, _tiffSizeProc,
 -			fSuppressMap ? _tiffDummyMapProc : _tiffMapProc,
 -			fSuppressMap ? _tiffDummyUnmapProc : _tiffUnmapProc);
 -	if (tif)
 -		tif->tif_fd = ifd;
 -	return (tif);
 -}
 -
 -#ifndef _WIN32_WCE
 -
 -/*
 - * Open a TIFF file for read/writing.
 - */
 -TIFF*
 -TIFFOpen(const char* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpen";
 -	thandle_t fd;
 -	int m;
 -	DWORD dwMode;
 -	TIFF* tif;
 -
 -	m = _TIFFgetMode(mode, module);
 -
 -	switch(m)
 -	{
 -	case O_RDONLY:
 -		dwMode = OPEN_EXISTING;
 -		break;
 -	case O_RDWR:
 -		dwMode = OPEN_ALWAYS;
 -		break;
 -	case O_RDWR|O_CREAT:
 -		dwMode = OPEN_ALWAYS;
 -		break;
 -	case O_RDWR|O_TRUNC:
 -		dwMode = CREATE_ALWAYS;
 -		break;
 -	case O_RDWR|O_CREAT|O_TRUNC:
 -		dwMode = CREATE_ALWAYS;
 -		break;
 -	default:
 -		return ((TIFF*)0);
 -	}
 -	fd = (thandle_t)CreateFileA(name,
 -		(m == O_RDONLY)?GENERIC_READ:(GENERIC_READ | GENERIC_WRITE),
 -		FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode,
 -		(m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL,
 -		NULL);
 -	if (fd == INVALID_HANDLE_VALUE) {
 -		TIFFErrorExt(0, module, "%s: Cannot open", name);
 -		return ((TIFF *)0);
 -	}
 -
 -	tif = TIFFFdOpen((int)fd, name, mode);
 -	if (!tif)
 -		CloseHandle(fd);
 -	return tif;
 -}
 -
 -/*
 - * Open a TIFF file with a Unicode filename, for read/writing.
 - */
 -TIFF*
 -TIFFOpenW(const wchar_t* name, const char* mode)
 -{
 -	static const char module[] = "TIFFOpenW";
 -	thandle_t fd;
 -	int m;
 -	DWORD dwMode;
 -	int mbsize;
 -	char *mbname;
 -	TIFF *tif;
 -
 -	m = _TIFFgetMode(mode, module);
 -
 -	switch(m) {
 -		case O_RDONLY:			dwMode = OPEN_EXISTING; break;
 -		case O_RDWR:			dwMode = OPEN_ALWAYS;   break;
 -		case O_RDWR|O_CREAT:		dwMode = OPEN_ALWAYS;   break;
 -		case O_RDWR|O_TRUNC:		dwMode = CREATE_ALWAYS; break;
 -		case O_RDWR|O_CREAT|O_TRUNC:	dwMode = CREATE_ALWAYS; break;
 -		default:			return ((TIFF*)0);
 -	}
 -
 -	fd = (thandle_t)CreateFileW(name,
 -		(m == O_RDONLY)?GENERIC_READ:(GENERIC_READ|GENERIC_WRITE),
 -		FILE_SHARE_READ, NULL, dwMode,
 -		(m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL,
 -		NULL);
 -	if (fd == INVALID_HANDLE_VALUE) {
 -		TIFFErrorExt(0, module, "%S: Cannot open", name);
 -		return ((TIFF *)0);
 -	}
 -
 -	mbname = NULL;
 -	mbsize = WideCharToMultiByte(CP_ACP, 0, name, -1, NULL, 0, NULL, NULL);
 -	if (mbsize > 0) {
 -		mbname = (char *)_TIFFmalloc(mbsize);
 -		if (!mbname) {
 -			TIFFErrorExt(0, module,
 -			"Can't allocate space for filename conversion buffer");
 -			return ((TIFF*)0);
 -		}
 -
 -		WideCharToMultiByte(CP_ACP, 0, name, -1, mbname, mbsize,
 -				    NULL, NULL);
 -	}
 -
 -	tif = TIFFFdOpen((int)fd,
 -			 (mbname != NULL) ? mbname : "<unknown>", mode);
 -	if (!tif)
 -		CloseHandle(fd);
 -
 -	_TIFFfree(mbname);
 -
 -	return tif;
 -}
 -
 -#endif /* ndef _WIN32_WCE */
 -
 -
 -tdata_t
 -_TIFFmalloc(tsize_t s)
 -{
 -	return ((tdata_t)GlobalAlloc(GMEM_FIXED, s));
 -}
 -
 -void
 -_TIFFfree(tdata_t p)
 -{
 -	GlobalFree(p);
 -	return;
 -}
 -
 -tdata_t
 -_TIFFrealloc(tdata_t p, tsize_t s)
 -{
 -	void* pvTmp;
 -	tsize_t old;
 -
 -	if(p == NULL)
 -		return ((tdata_t)GlobalAlloc(GMEM_FIXED, s));
 -
 -	old = GlobalSize(p);
 -
 -	if (old>=s) {
 -		if ((pvTmp = GlobalAlloc(GMEM_FIXED, s)) != NULL) {
 -			CopyMemory(pvTmp, p, s);
 -			GlobalFree(p);
 -		}
 -	} else {
 -		if ((pvTmp = GlobalAlloc(GMEM_FIXED, s)) != NULL) {
 -			CopyMemory(pvTmp, p, old);
 -			GlobalFree(p);
 -		}
 -	}
 -	return ((tdata_t)pvTmp);
 -}
 -
 -void
 -_TIFFmemset(void* p, int v, tsize_t c)
 -{
 -	FillMemory(p, c, (BYTE)v);
 -}
 -
 -void
 -_TIFFmemcpy(void* d, const tdata_t s, tsize_t c)
 -{
 -	CopyMemory(d, s, c);
 -}
 -
 -int
 -_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
 -{
 -	register const BYTE *pb1 = (const BYTE *) p1;
 -	register const BYTE *pb2 = (const BYTE *) p2;
 -	register DWORD dwTmp = c;
 -	register int iTmp;
 -	for (iTmp = 0; dwTmp-- && !iTmp; iTmp = (int)*pb1++ - (int)*pb2++)
 -		;
 -	return (iTmp);
 -}
 -
 -#ifndef _WIN32_WCE
 -
 -static void
 -Win32WarningHandler(const char* module, const char* fmt, va_list ap)
 -{
 -#ifndef TIF_PLATFORM_CONSOLE
 -	LPTSTR szTitle;
 -	LPTSTR szTmp;
 -	LPCTSTR szTitleText = "%s Warning";
 -	LPCTSTR szDefaultModule = "LIBTIFF";
 -	LPCTSTR szTmpModule = (module == NULL) ? szDefaultModule : module;
 -	if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, (strlen(szTmpModule) +
 -		strlen(szTitleText) + strlen(fmt) + 128)*sizeof(char))) == NULL)
 -		return;
 -	sprintf(szTitle, szTitleText, szTmpModule);
 -	szTmp = szTitle + (strlen(szTitle)+2)*sizeof(char);
 -	vsprintf(szTmp, fmt, ap);
 -	MessageBoxA(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONINFORMATION);
 -	LocalFree(szTitle);
 -	return;
 -#else
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	fprintf(stderr, "Warning, ");
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -#endif        
 -}
 -TIFFErrorHandler _TIFFwarningHandler = Win32WarningHandler;
 -
 -static void
 -Win32ErrorHandler(const char* module, const char* fmt, va_list ap)
 -{
 -#ifndef TIF_PLATFORM_CONSOLE
 -	LPTSTR szTitle;
 -	LPTSTR szTmp;
 -	LPCTSTR szTitleText = "%s Error";
 -	LPCTSTR szDefaultModule = "LIBTIFF";
 -	LPCTSTR szTmpModule = (module == NULL) ? szDefaultModule : module;
 -	if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, (strlen(szTmpModule) +
 -		strlen(szTitleText) + strlen(fmt) + 128)*sizeof(char))) == NULL)
 -		return;
 -	sprintf(szTitle, szTitleText, szTmpModule);
 -	szTmp = szTitle + (strlen(szTitle)+2)*sizeof(char);
 -	vsprintf(szTmp, fmt, ap);
 -	MessageBoxA(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONEXCLAMATION);
 -	LocalFree(szTitle);
 -	return;
 -#else
 -	if (module != NULL)
 -		fprintf(stderr, "%s: ", module);
 -	vfprintf(stderr, fmt, ap);
 -	fprintf(stderr, ".\n");
 -#endif        
 -}
 -TIFFErrorHandler _TIFFerrorHandler = Win32ErrorHandler;
 -
 -#endif /* ndef _WIN32_WCE */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_write.c b/plugins/FreeImage/Source/LibTIFF/tif_write.c deleted file mode 100644 index 043e645b87..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_write.c +++ /dev/null @@ -1,718 +0,0 @@ -/* $Id: tif_write.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -/*
 - * TIFF Library.
 - *
 - * Scanline-oriented Write Support
 - */
 -#include "tiffiop.h"
 -#include <stdio.h>
 -
 -#define	STRIPINCR	20		/* expansion factor on strip array */
 -
 -#define	WRITECHECKSTRIPS(tif, module)				\
 -	(((tif)->tif_flags&TIFF_BEENWRITING) || TIFFWriteCheck((tif),0,module))
 -#define	WRITECHECKTILES(tif, module)				\
 -	(((tif)->tif_flags&TIFF_BEENWRITING) || TIFFWriteCheck((tif),1,module))
 -#define	BUFFERCHECK(tif)					\
 -	((((tif)->tif_flags & TIFF_BUFFERSETUP) && tif->tif_rawdata) ||	\
 -	    TIFFWriteBufferSetup((tif), NULL, (tsize_t) -1))
 -
 -static	int TIFFGrowStrips(TIFF*, int, const char*);
 -static	int TIFFAppendToStrip(TIFF*, tstrip_t, tidata_t, tsize_t);
 -
 -int
 -TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample)
 -{
 -	static const char module[] = "TIFFWriteScanline";
 -	register TIFFDirectory *td;
 -	int status, imagegrew = 0;
 -	tstrip_t strip;
 -
 -	if (!WRITECHECKSTRIPS(tif, module))
 -		return (-1);
 -	/*
 -	 * Handle delayed allocation of data buffer.  This
 -	 * permits it to be sized more intelligently (using
 -	 * directory information).
 -	 */
 -	if (!BUFFERCHECK(tif))
 -		return (-1);
 -	td = &tif->tif_dir;
 -	/*
 -	 * Extend image length if needed
 -	 * (but only for PlanarConfig=1).
 -	 */
 -	if (row >= td->td_imagelength) {	/* extend image */
 -		if (td->td_planarconfig == PLANARCONFIG_SEPARATE) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		"Can not change \"ImageLength\" when using separate planes");
 -			return (-1);
 -		}
 -		td->td_imagelength = row+1;
 -		imagegrew = 1;
 -	}
 -	/*
 -	 * Calculate strip and check for crossings.
 -	 */
 -	if (td->td_planarconfig == PLANARCONFIG_SEPARATE) {
 -		if (sample >= td->td_samplesperpixel) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -			    "%d: Sample out of range, max %d",
 -			    sample, td->td_samplesperpixel);
 -			return (-1);
 -		}
 -		strip = sample*td->td_stripsperimage + row/td->td_rowsperstrip;
 -	} else
 -		strip = row / td->td_rowsperstrip;
 -	/*
 -	 * Check strip array to make sure there's space. We don't support
 -	 * dynamically growing files that have data organized in separate
 -	 * bitplanes because it's too painful.  In that case we require that
 -	 * the imagelength be set properly before the first write (so that the
 -	 * strips array will be fully allocated above).
 -	 */
 -	if (strip >= td->td_nstrips && !TIFFGrowStrips(tif, 1, module))
 -		return (-1);
 -	if (strip != tif->tif_curstrip) {
 -		/*
 -		 * Changing strips -- flush any data present.
 -		 */
 -		if (!TIFFFlushData(tif))
 -			return (-1);
 -		tif->tif_curstrip = strip;
 -		/*
 -		 * Watch out for a growing image.  The value of strips/image
 -		 * will initially be 1 (since it can't be deduced until the
 -		 * imagelength is known).
 -		 */
 -		if (strip >= td->td_stripsperimage && imagegrew)
 -			td->td_stripsperimage =
 -			    TIFFhowmany(td->td_imagelength,td->td_rowsperstrip);
 -		tif->tif_row =
 -		    (strip % td->td_stripsperimage) * td->td_rowsperstrip;
 -		if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
 -			if (!(*tif->tif_setupencode)(tif))
 -				return (-1);
 -			tif->tif_flags |= TIFF_CODERSETUP;
 -		}
 -        
 -		tif->tif_rawcc = 0;
 -		tif->tif_rawcp = tif->tif_rawdata;
 -
 -		if ( td->td_stripbytecount[strip] > 0 )
 -		{
 -			/* if we are writing over existing tiles, zero length */
 -			td->td_stripbytecount[strip] = 0;
 -
 -			/* this forces TIFFAppendToStrip() to do a seek */
 -			tif->tif_curoff = 0;
 -		}
 -
 -		if (!(*tif->tif_preencode)(tif, sample))
 -			return (-1);
 -		tif->tif_flags |= TIFF_POSTENCODE;
 -	}
 -	/*
 -	 * Ensure the write is either sequential or at the
 -	 * beginning of a strip (or that we can randomly
 -	 * access the data -- i.e. no encoding).
 -	 */
 -	if (row != tif->tif_row) {
 -		if (row < tif->tif_row) {
 -			/*
 -			 * Moving backwards within the same strip:
 -			 * backup to the start and then decode
 -			 * forward (below).
 -			 */
 -			tif->tif_row = (strip % td->td_stripsperimage) *
 -			    td->td_rowsperstrip;
 -			tif->tif_rawcp = tif->tif_rawdata;
 -		}
 -		/*
 -		 * Seek forward to the desired row.
 -		 */
 -		if (!(*tif->tif_seek)(tif, row - tif->tif_row))
 -			return (-1);
 -		tif->tif_row = row;
 -	}
 -
 -        /* swab if needed - note that source buffer will be altered */
 -        tif->tif_postdecode( tif, (tidata_t) buf, tif->tif_scanlinesize );
 -
 -	status = (*tif->tif_encoderow)(tif, (tidata_t) buf,
 -	    tif->tif_scanlinesize, sample);
 -
 -        /* we are now poised at the beginning of the next row */
 -	tif->tif_row = row + 1;
 -	return (status);
 -}
 -
 -/*
 - * Encode the supplied data and write it to the
 - * specified strip.
 - *
 - * NB: Image length must be setup before writing.
 - */
 -tsize_t
 -TIFFWriteEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc)
 -{
 -	static const char module[] = "TIFFWriteEncodedStrip";
 -	TIFFDirectory *td = &tif->tif_dir;
 -	tsample_t sample;
 -
 -	if (!WRITECHECKSTRIPS(tif, module))
 -		return ((tsize_t) -1);
 -	/*
 -	 * Check strip array to make sure there's space.
 -	 * We don't support dynamically growing files that
 -	 * have data organized in separate bitplanes because
 -	 * it's too painful.  In that case we require that
 -	 * the imagelength be set properly before the first
 -	 * write (so that the strips array will be fully
 -	 * allocated above).
 -	 */
 -	if (strip >= td->td_nstrips) {
 -		if (td->td_planarconfig == PLANARCONFIG_SEPARATE) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		"Can not grow image by strips when using separate planes");
 -			return ((tsize_t) -1);
 -		}
 -		if (!TIFFGrowStrips(tif, 1, module))
 -			return ((tsize_t) -1);
 -		td->td_stripsperimage =
 -		    TIFFhowmany(td->td_imagelength, td->td_rowsperstrip);
 -	}
 -	/*
 -	 * Handle delayed allocation of data buffer.  This
 -	 * permits it to be sized according to the directory
 -	 * info.
 -	 */
 -	if (!BUFFERCHECK(tif))
 -		return ((tsize_t) -1);
 -	tif->tif_curstrip = strip;
 -	tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip;
 -	if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
 -		if (!(*tif->tif_setupencode)(tif))
 -			return ((tsize_t) -1);
 -		tif->tif_flags |= TIFF_CODERSETUP;
 -	}
 -        
 -	tif->tif_rawcc = 0;
 -	tif->tif_rawcp = tif->tif_rawdata;
 -
 -        if ( td->td_stripbytecount[strip] > 0 )
 -        {
 -	    /* Force TIFFAppendToStrip() to consider placing data at end
 -               of file. */
 -            tif->tif_curoff = 0;
 -        }
 -        
 -	tif->tif_flags &= ~TIFF_POSTENCODE;
 -	sample = (tsample_t)(strip / td->td_stripsperimage);
 -	if (!(*tif->tif_preencode)(tif, sample))
 -		return ((tsize_t) -1);
 -
 -        /* swab if needed - note that source buffer will be altered */
 -        tif->tif_postdecode( tif, (tidata_t) data, cc );
 -
 -	if (!(*tif->tif_encodestrip)(tif, (tidata_t) data, cc, sample))
 -		return ((tsize_t) 0);
 -	if (!(*tif->tif_postencode)(tif))
 -		return ((tsize_t) -1);
 -	if (!isFillOrder(tif, td->td_fillorder) &&
 -	    (tif->tif_flags & TIFF_NOBITREV) == 0)
 -		TIFFReverseBits(tif->tif_rawdata, tif->tif_rawcc);
 -	if (tif->tif_rawcc > 0 &&
 -	    !TIFFAppendToStrip(tif, strip, tif->tif_rawdata, tif->tif_rawcc))
 -		return ((tsize_t) -1);
 -	tif->tif_rawcc = 0;
 -	tif->tif_rawcp = tif->tif_rawdata;
 -	return (cc);
 -}
 -
 -/*
 - * Write the supplied data to the specified strip.
 - *
 - * NB: Image length must be setup before writing.
 - */
 -tsize_t
 -TIFFWriteRawStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc)
 -{
 -	static const char module[] = "TIFFWriteRawStrip";
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	if (!WRITECHECKSTRIPS(tif, module))
 -		return ((tsize_t) -1);
 -	/*
 -	 * Check strip array to make sure there's space.
 -	 * We don't support dynamically growing files that
 -	 * have data organized in separate bitplanes because
 -	 * it's too painful.  In that case we require that
 -	 * the imagelength be set properly before the first
 -	 * write (so that the strips array will be fully
 -	 * allocated above).
 -	 */
 -	if (strip >= td->td_nstrips) {
 -		if (td->td_planarconfig == PLANARCONFIG_SEPARATE) {
 -			TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
 -		"Can not grow image by strips when using separate planes");
 -			return ((tsize_t) -1);
 -		}
 -		/*
 -		 * Watch out for a growing image.  The value of
 -		 * strips/image will initially be 1 (since it
 -		 * can't be deduced until the imagelength is known).
 -		 */
 -		if (strip >= td->td_stripsperimage)
 -			td->td_stripsperimage =
 -			    TIFFhowmany(td->td_imagelength,td->td_rowsperstrip);
 -		if (!TIFFGrowStrips(tif, 1, module))
 -			return ((tsize_t) -1);
 -	}
 -	tif->tif_curstrip = strip;
 -	tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip;
 -	return (TIFFAppendToStrip(tif, strip, (tidata_t) data, cc) ?
 -	    cc : (tsize_t) -1);
 -}
 -
 -/*
 - * Write and compress a tile of data.  The
 - * tile is selected by the (x,y,z,s) coordinates.
 - */
 -tsize_t
 -TIFFWriteTile(TIFF* tif,
 -    tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t s)
 -{
 -	if (!TIFFCheckTile(tif, x, y, z, s))
 -		return (-1);
 -	/*
 -	 * NB: A tile size of -1 is used instead of tif_tilesize knowing
 -	 *     that TIFFWriteEncodedTile will clamp this to the tile size.
 -	 *     This is done because the tile size may not be defined until
 -	 *     after the output buffer is setup in TIFFWriteBufferSetup.
 -	 */
 -	return (TIFFWriteEncodedTile(tif,
 -	    TIFFComputeTile(tif, x, y, z, s), buf, (tsize_t) -1));
 -}
 -
 -/*
 - * Encode the supplied data and write it to the
 - * specified tile.  There must be space for the
 - * data.  The function clamps individual writes
 - * to a tile to the tile size, but does not (and
 - * can not) check that multiple writes to the same
 - * tile do not write more than tile size data.
 - *
 - * NB: Image length must be setup before writing; this
 - *     interface does not support automatically growing
 - *     the image on each write (as TIFFWriteScanline does).
 - */
 -tsize_t
 -TIFFWriteEncodedTile(TIFF* tif, ttile_t tile, tdata_t data, tsize_t cc)
 -{
 -	static const char module[] = "TIFFWriteEncodedTile";
 -	TIFFDirectory *td;
 -	tsample_t sample;
 -
 -	if (!WRITECHECKTILES(tif, module))
 -		return ((tsize_t) -1);
 -	td = &tif->tif_dir;
 -	if (tile >= td->td_nstrips) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: Tile %lu out of range, max %lu",
 -		    tif->tif_name, (unsigned long) tile, (unsigned long) td->td_nstrips);
 -		return ((tsize_t) -1);
 -	}
 -	/*
 -	 * Handle delayed allocation of data buffer.  This
 -	 * permits it to be sized more intelligently (using
 -	 * directory information).
 -	 */
 -	if (!BUFFERCHECK(tif))
 -		return ((tsize_t) -1);
 -	tif->tif_curtile = tile;
 -
 -	tif->tif_rawcc = 0;
 -	tif->tif_rawcp = tif->tif_rawdata;
 -
 -        if ( td->td_stripbytecount[tile] > 0 )
 -        {
 -	    /* Force TIFFAppendToStrip() to consider placing data at end
 -               of file. */
 -            tif->tif_curoff = 0;
 -        }
 -        
 -	/* 
 -	 * Compute tiles per row & per column to compute
 -	 * current row and column
 -	 */
 -	tif->tif_row = (tile % TIFFhowmany(td->td_imagelength, td->td_tilelength))
 -		* td->td_tilelength;
 -	tif->tif_col = (tile % TIFFhowmany(td->td_imagewidth, td->td_tilewidth))
 -		* td->td_tilewidth;
 -
 -	if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
 -		if (!(*tif->tif_setupencode)(tif))
 -			return ((tsize_t) -1);
 -		tif->tif_flags |= TIFF_CODERSETUP;
 -	}
 -	tif->tif_flags &= ~TIFF_POSTENCODE;
 -	sample = (tsample_t)(tile/td->td_stripsperimage);
 -	if (!(*tif->tif_preencode)(tif, sample))
 -		return ((tsize_t) -1);
 -	/*
 -	 * Clamp write amount to the tile size.  This is mostly
 -	 * done so that callers can pass in some large number
 -	 * (e.g. -1) and have the tile size used instead.
 -	 */
 -	if ( cc < 1 || cc > tif->tif_tilesize)
 -		cc = tif->tif_tilesize;
 -
 -        /* swab if needed - note that source buffer will be altered */
 -        tif->tif_postdecode( tif, (tidata_t) data, cc );
 -
 -	if (!(*tif->tif_encodetile)(tif, (tidata_t) data, cc, sample))
 -		return ((tsize_t) 0);
 -	if (!(*tif->tif_postencode)(tif))
 -		return ((tsize_t) -1);
 -	if (!isFillOrder(tif, td->td_fillorder) &&
 -	    (tif->tif_flags & TIFF_NOBITREV) == 0)
 -		TIFFReverseBits((unsigned char *)tif->tif_rawdata, tif->tif_rawcc);
 -	if (tif->tif_rawcc > 0 && !TIFFAppendToStrip(tif, tile,
 -	    tif->tif_rawdata, tif->tif_rawcc))
 -		return ((tsize_t) -1);
 -	tif->tif_rawcc = 0;
 -	tif->tif_rawcp = tif->tif_rawdata;
 -	return (cc);
 -}
 -
 -/*
 - * Write the supplied data to the specified strip.
 - * There must be space for the data; we don't check
 - * if strips overlap!
 - *
 - * NB: Image length must be setup before writing; this
 - *     interface does not support automatically growing
 - *     the image on each write (as TIFFWriteScanline does).
 - */
 -tsize_t
 -TIFFWriteRawTile(TIFF* tif, ttile_t tile, tdata_t data, tsize_t cc)
 -{
 -	static const char module[] = "TIFFWriteRawTile";
 -
 -	if (!WRITECHECKTILES(tif, module))
 -		return ((tsize_t) -1);
 -	if (tile >= tif->tif_dir.td_nstrips) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: Tile %lu out of range, max %lu",
 -		    tif->tif_name, (unsigned long) tile,
 -		    (unsigned long) tif->tif_dir.td_nstrips);
 -		return ((tsize_t) -1);
 -	}
 -	return (TIFFAppendToStrip(tif, tile, (tidata_t) data, cc) ?
 -	    cc : (tsize_t) -1);
 -}
 -
 -#define	isUnspecified(tif, f) \
 -    (TIFFFieldSet(tif,f) && (tif)->tif_dir.td_imagelength == 0)
 -
 -int
 -TIFFSetupStrips(TIFF* tif)
 -{
 -	TIFFDirectory* td = &tif->tif_dir;
 -
 -	if (isTiled(tif))
 -		td->td_stripsperimage =
 -		    isUnspecified(tif, FIELD_TILEDIMENSIONS) ?
 -			td->td_samplesperpixel : TIFFNumberOfTiles(tif);
 -	else
 -		td->td_stripsperimage =
 -		    isUnspecified(tif, FIELD_ROWSPERSTRIP) ?
 -			td->td_samplesperpixel : TIFFNumberOfStrips(tif);
 -	td->td_nstrips = td->td_stripsperimage;
 -	if (td->td_planarconfig == PLANARCONFIG_SEPARATE)
 -		td->td_stripsperimage /= td->td_samplesperpixel;
 -	td->td_stripoffset = (uint32 *)
 -	    _TIFFmalloc(td->td_nstrips * sizeof (uint32));
 -	td->td_stripbytecount = (uint32 *)
 -	    _TIFFmalloc(td->td_nstrips * sizeof (uint32));
 -	if (td->td_stripoffset == NULL || td->td_stripbytecount == NULL)
 -		return (0);
 -	/*
 -	 * Place data at the end-of-file
 -	 * (by setting offsets to zero).
 -	 */
 -	_TIFFmemset(td->td_stripoffset, 0, td->td_nstrips*sizeof (uint32));
 -	_TIFFmemset(td->td_stripbytecount, 0, td->td_nstrips*sizeof (uint32));
 -	TIFFSetFieldBit(tif, FIELD_STRIPOFFSETS);
 -	TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS);
 -	return (1);
 -}
 -#undef isUnspecified
 -
 -/*
 - * Verify file is writable and that the directory
 - * information is setup properly.  In doing the latter
 - * we also "freeze" the state of the directory so
 - * that important information is not changed.
 - */
 -int
 -TIFFWriteCheck(TIFF* tif, int tiles, const char* module)
 -{
 -	if (tif->tif_mode == O_RDONLY) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: File not open for writing",
 -		    tif->tif_name);
 -		return (0);
 -	}
 -	if (tiles ^ isTiled(tif)) {
 -		TIFFErrorExt(tif->tif_clientdata, tif->tif_name, tiles ?
 -		    "Can not write tiles to a stripped image" :
 -		    "Can not write scanlines to a tiled image");
 -		return (0);
 -	}
 -        
 -	/*
 -	 * On the first write verify all the required information
 -	 * has been setup and initialize any data structures that
 -	 * had to wait until directory information was set.
 -	 * Note that a lot of our work is assumed to remain valid
 -	 * because we disallow any of the important parameters
 -	 * from changing after we start writing (i.e. once
 -	 * TIFF_BEENWRITING is set, TIFFSetField will only allow
 -	 * the image's length to be changed).
 -	 */
 -	if (!TIFFFieldSet(tif, FIELD_IMAGEDIMENSIONS)) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -		    "%s: Must set \"ImageWidth\" before writing data",
 -		    tif->tif_name);
 -		return (0);
 -	}
 -	if (tif->tif_dir.td_samplesperpixel == 1) {
 -		/* 
 -		 * Planarconfiguration is irrelevant in case of single band
 -		 * images and need not be included. We will set it anyway,
 -		 * because this field is used in other parts of library even
 -		 * in the single band case.
 -		 */
 -		if (!TIFFFieldSet(tif, FIELD_PLANARCONFIG))
 -                    tif->tif_dir.td_planarconfig = PLANARCONFIG_CONTIG;
 -	} else {
 -		if (!TIFFFieldSet(tif, FIELD_PLANARCONFIG)) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -		    "%s: Must set \"PlanarConfiguration\" before writing data",
 -			    tif->tif_name);
 -			return (0);
 -		}
 -	}
 -	if (tif->tif_dir.td_stripoffset == NULL && !TIFFSetupStrips(tif)) {
 -		tif->tif_dir.td_nstrips = 0;
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: No space for %s arrays",
 -		    tif->tif_name, isTiled(tif) ? "tile" : "strip");
 -		return (0);
 -	}
 -	tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tsize_t) -1;
 -	tif->tif_scanlinesize = TIFFScanlineSize(tif);
 -	tif->tif_flags |= TIFF_BEENWRITING;
 -	return (1);
 -}
 -
 -/*
 - * Setup the raw data buffer used for encoding.
 - */
 -int
 -TIFFWriteBufferSetup(TIFF* tif, tdata_t bp, tsize_t size)
 -{
 -	static const char module[] = "TIFFWriteBufferSetup";
 -
 -	if (tif->tif_rawdata) {
 -		if (tif->tif_flags & TIFF_MYBUFFER) {
 -			_TIFFfree(tif->tif_rawdata);
 -			tif->tif_flags &= ~TIFF_MYBUFFER;
 -		}
 -		tif->tif_rawdata = NULL;
 -	}
 -	if (size == (tsize_t) -1) {
 -		size = (isTiled(tif) ?
 -		    tif->tif_tilesize : TIFFStripSize(tif));
 -		/*
 -		 * Make raw data buffer at least 8K
 -		 */
 -		if (size < 8*1024)
 -			size = 8*1024;
 -		bp = NULL;			/* NB: force malloc */
 -	}
 -	if (bp == NULL) {
 -		bp = _TIFFmalloc(size);
 -		if (bp == NULL) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: No space for output buffer",
 -			    tif->tif_name);
 -			return (0);
 -		}
 -		tif->tif_flags |= TIFF_MYBUFFER;
 -	} else
 -		tif->tif_flags &= ~TIFF_MYBUFFER;
 -	tif->tif_rawdata = (tidata_t) bp;
 -	tif->tif_rawdatasize = size;
 -	tif->tif_rawcc = 0;
 -	tif->tif_rawcp = tif->tif_rawdata;
 -	tif->tif_flags |= TIFF_BUFFERSETUP;
 -	return (1);
 -}
 -
 -/*
 - * Grow the strip data structures by delta strips.
 - */
 -static int
 -TIFFGrowStrips(TIFF* tif, int delta, const char* module)
 -{
 -	TIFFDirectory	*td = &tif->tif_dir;
 -	uint32		*new_stripoffset, *new_stripbytecount;
 -
 -	assert(td->td_planarconfig == PLANARCONFIG_CONTIG);
 -	new_stripoffset = (uint32*)_TIFFrealloc(td->td_stripoffset,
 -		(td->td_nstrips + delta) * sizeof (uint32));
 -	new_stripbytecount = (uint32*)_TIFFrealloc(td->td_stripbytecount,
 -		(td->td_nstrips + delta) * sizeof (uint32));
 -	if (new_stripoffset == NULL || new_stripbytecount == NULL) {
 -		if (new_stripoffset)
 -			_TIFFfree(new_stripoffset);
 -		if (new_stripbytecount)
 -			_TIFFfree(new_stripbytecount);
 -		td->td_nstrips = 0;
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: No space to expand strip arrays",
 -			  tif->tif_name);
 -		return (0);
 -	}
 -	td->td_stripoffset = new_stripoffset;
 -	td->td_stripbytecount = new_stripbytecount;
 -	_TIFFmemset(td->td_stripoffset + td->td_nstrips,
 -		    0, delta*sizeof (uint32));
 -	_TIFFmemset(td->td_stripbytecount + td->td_nstrips,
 -		    0, delta*sizeof (uint32));
 -	td->td_nstrips += delta;
 -	return (1);
 -}
 -
 -/*
 - * Append the data to the specified strip.
 - */
 -static int
 -TIFFAppendToStrip(TIFF* tif, tstrip_t strip, tidata_t data, tsize_t cc)
 -{
 -	static const char module[] = "TIFFAppendToStrip";
 -	TIFFDirectory *td = &tif->tif_dir;
 -
 -	if (td->td_stripoffset[strip] == 0 || tif->tif_curoff == 0) {
 -            assert(td->td_nstrips > 0);
 -
 -            if ( td->td_stripbytecount[strip] != 0 
 -                && td->td_stripoffset[strip] != 0 
 -                && td->td_stripbytecount[strip] >= cc )
 -            {
 -                /* 
 -                 * There is already tile data on disk, and the new tile
 -                 * data we have to will fit in the same space.  The only 
 -                 * aspect of this that is risky is that there could be
 -                 * more data to append to this strip before we are done
 -                 * depending on how we are getting called.
 -                 */
 -                if (!SeekOK(tif, td->td_stripoffset[strip])) {
 -                    TIFFErrorExt(tif->tif_clientdata, module,
 -                                 "Seek error at scanline %lu",
 -                                 (unsigned long)tif->tif_row);
 -                    return (0);
 -                }
 -            }
 -            else
 -            {
 -                /* 
 -                 * Seek to end of file, and set that as our location to 
 -                 * write this strip.
 -                 */
 -                td->td_stripoffset[strip] = TIFFSeekFile(tif, 0, SEEK_END);
 -            }
 -
 -            tif->tif_curoff = td->td_stripoffset[strip];
 -
 -            /*
 -             * We are starting a fresh strip/tile, so set the size to zero.
 -             */
 -            td->td_stripbytecount[strip] = 0;
 -	}
 -
 -	if (!WriteOK(tif, data, cc)) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "Write error at scanline %lu",
 -		    (unsigned long) tif->tif_row);
 -		    return (0);
 -	}
 -	tif->tif_curoff =  tif->tif_curoff+cc;
 -	td->td_stripbytecount[strip] += cc;
 -	return (1);
 -}
 -
 -/*
 - * Internal version of TIFFFlushData that can be
 - * called by ``encodestrip routines'' w/o concern
 - * for infinite recursion.
 - */
 -int
 -TIFFFlushData1(TIFF* tif)
 -{
 -	if (tif->tif_rawcc > 0) {
 -		if (!isFillOrder(tif, tif->tif_dir.td_fillorder) &&
 -		    (tif->tif_flags & TIFF_NOBITREV) == 0)
 -			TIFFReverseBits((unsigned char *)tif->tif_rawdata,
 -			    tif->tif_rawcc);
 -		if (!TIFFAppendToStrip(tif,
 -		    isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip,
 -		    tif->tif_rawdata, tif->tif_rawcc))
 -			return (0);
 -		tif->tif_rawcc = 0;
 -		tif->tif_rawcp = tif->tif_rawdata;
 -	}
 -	return (1);
 -}
 -
 -/*
 - * Set the current write offset.  This should only be
 - * used to set the offset to a known previous location
 - * (very carefully), or to 0 so that the next write gets
 - * appended to the end of the file.
 - */
 -void
 -TIFFSetWriteOffset(TIFF* tif, toff_t off)
 -{
 -	tif->tif_curoff = off;
 -}
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tif_zip.c b/plugins/FreeImage/Source/LibTIFF/tif_zip.c deleted file mode 100644 index 74ee9c4b5a..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tif_zip.c +++ /dev/null @@ -1,419 +0,0 @@ -/* $Id: tif_zip.c,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1995-1997 Sam Leffler
 - * Copyright (c) 1995-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#include "tiffiop.h"
 -#ifdef ZIP_SUPPORT
 -/*
 - * TIFF Library.
 - *
 - * ZIP (aka Deflate) Compression Support
 - *
 - * This file is simply an interface to the zlib library written by
 - * Jean-loup Gailly and Mark Adler.  You must use version 1.0 or later
 - * of the library: this code assumes the 1.0 API and also depends on
 - * the ability to write the zlib header multiple times (one per strip)
 - * which was not possible with versions prior to 0.95.  Note also that
 - * older versions of this codec avoided this bug by supressing the header
 - * entirely.  This means that files written with the old library cannot
 - * be read; they should be converted to a different compression scheme
 - * and then reconverted.
 - *
 - * The data format used by the zlib library is described in the files
 - * zlib-3.1.doc, deflate-1.1.doc and gzip-4.1.doc, available in the
 - * directory ftp://ftp.uu.net/pub/archiving/zip/doc.  The library was
 - * last found at ftp://ftp.uu.net/pub/archiving/zip/zlib/zlib-0.99.tar.gz.
 - */
 -#include "tif_predict.h"
 -#include "../ZLib/zlib.h"
 -
 -#include <stdio.h>
 -
 -/*
 - * Sigh, ZLIB_VERSION is defined as a string so there's no
 - * way to do a proper check here.  Instead we guess based
 - * on the presence of #defines that were added between the
 - * 0.95 and 1.0 distributions.
 - */
 -#if !defined(Z_NO_COMPRESSION) || !defined(Z_DEFLATED)
 -#error "Antiquated ZLIB software; you must use version 1.0 or later"
 -#endif
 -
 -/*
 - * State block for each open TIFF
 - * file using ZIP compression/decompression.
 - */
 -typedef	struct {
 -	TIFFPredictorState predict;
 -	z_stream	stream;
 -	int		zipquality;		/* compression level */
 -	int		state;			/* state flags */
 -#define ZSTATE_INIT_DECODE 0x01
 -#define ZSTATE_INIT_ENCODE 0x02
 -
 -	TIFFVGetMethod	vgetparent;		/* super-class method */
 -	TIFFVSetMethod	vsetparent;		/* super-class method */
 -} ZIPState;
 -
 -#define	ZState(tif)		((ZIPState*) (tif)->tif_data)
 -#define	DecoderState(tif)	ZState(tif)
 -#define	EncoderState(tif)	ZState(tif)
 -
 -static	int ZIPEncode(TIFF*, tidata_t, tsize_t, tsample_t);
 -static	int ZIPDecode(TIFF*, tidata_t, tsize_t, tsample_t);
 -
 -static int
 -ZIPSetupDecode(TIFF* tif)
 -{
 -	ZIPState* sp = DecoderState(tif);
 -	static const char module[] = "ZIPSetupDecode";
 -
 -	assert(sp != NULL);
 -        
 -        /* if we were last encoding, terminate this mode */
 -	if (sp->state & ZSTATE_INIT_ENCODE) {
 -            deflateEnd(&sp->stream);
 -            sp->state = 0;
 -        }
 -
 -	if (inflateInit(&sp->stream) != Z_OK) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: %s", tif->tif_name, sp->stream.msg);
 -		return (0);
 -	} else {
 -		sp->state |= ZSTATE_INIT_DECODE;
 -		return (1);
 -	}
 -}
 -
 -/*
 - * Setup state for decoding a strip.
 - */
 -static int
 -ZIPPreDecode(TIFF* tif, tsample_t s)
 -{
 -	ZIPState* sp = DecoderState(tif);
 -
 -	(void) s;
 -	assert(sp != NULL);
 -
 -        if ( (sp->state & ZSTATE_INIT_DECODE) == 0 )
 -            tif->tif_setupdecode( tif );
 -
 -	sp->stream.next_in = tif->tif_rawdata;
 -	sp->stream.avail_in = tif->tif_rawcc;
 -	return (inflateReset(&sp->stream) == Z_OK);
 -}
 -
 -static int
 -ZIPDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s)
 -{
 -	ZIPState* sp = DecoderState(tif);
 -	static const char module[] = "ZIPDecode";
 -
 -	(void) s;
 -	assert(sp != NULL);
 -        assert(sp->state == ZSTATE_INIT_DECODE);
 -
 -	sp->stream.next_out = op;
 -	sp->stream.avail_out = occ;
 -	do {
 -		int state = inflate(&sp->stream, Z_PARTIAL_FLUSH);
 -		if (state == Z_STREAM_END)
 -			break;
 -		if (state == Z_DATA_ERROR) {
 -			TIFFErrorExt(tif->tif_clientdata, module,
 -			    "%s: Decoding error at scanline %d, %s",
 -			    tif->tif_name, tif->tif_row, sp->stream.msg);
 -			if (inflateSync(&sp->stream) != Z_OK)
 -				return (0);
 -			continue;
 -		}
 -		if (state != Z_OK) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s",
 -			    tif->tif_name, sp->stream.msg);
 -			return (0);
 -		}
 -	} while (sp->stream.avail_out > 0);
 -	if (sp->stream.avail_out != 0) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -		    "%s: Not enough data at scanline %d (short %d bytes)",
 -		    tif->tif_name, tif->tif_row, sp->stream.avail_out);
 -		return (0);
 -	}
 -	return (1);
 -}
 -
 -static int
 -ZIPSetupEncode(TIFF* tif)
 -{
 -	ZIPState* sp = EncoderState(tif);
 -	static const char module[] = "ZIPSetupEncode";
 -
 -	assert(sp != NULL);
 -	if (sp->state & ZSTATE_INIT_DECODE) {
 -            inflateEnd(&sp->stream);
 -            sp->state = 0;
 -        }
 -
 -	if (deflateInit(&sp->stream, sp->zipquality) != Z_OK) {
 -		TIFFErrorExt(tif->tif_clientdata, module, "%s: %s", tif->tif_name, sp->stream.msg);
 -		return (0);
 -	} else {
 -		sp->state |= ZSTATE_INIT_ENCODE;
 -		return (1);
 -	}
 -}
 -
 -/*
 - * Reset encoding state at the start of a strip.
 - */
 -static int
 -ZIPPreEncode(TIFF* tif, tsample_t s)
 -{
 -	ZIPState *sp = EncoderState(tif);
 -
 -	(void) s;
 -	assert(sp != NULL);
 -        if ( sp->state != ZSTATE_INIT_ENCODE )
 -            tif->tif_setupencode( tif );
 -
 -	sp->stream.next_out = tif->tif_rawdata;
 -	sp->stream.avail_out = tif->tif_rawdatasize;
 -	return (deflateReset(&sp->stream) == Z_OK);
 -}
 -
 -/*
 - * Encode a chunk of pixels.
 - */
 -static int
 -ZIPEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
 -{
 -	ZIPState *sp = EncoderState(tif);
 -	static const char module[] = "ZIPEncode";
 -
 -        assert(sp != NULL);
 -        assert(sp->state == ZSTATE_INIT_ENCODE);
 -
 -	(void) s;
 -	sp->stream.next_in = bp;
 -	sp->stream.avail_in = cc;
 -	do {
 -		if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK) {
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: Encoder error: %s",
 -			    tif->tif_name, sp->stream.msg);
 -			return (0);
 -		}
 -		if (sp->stream.avail_out == 0) {
 -			tif->tif_rawcc = tif->tif_rawdatasize;
 -			TIFFFlushData1(tif);
 -			sp->stream.next_out = tif->tif_rawdata;
 -			sp->stream.avail_out = tif->tif_rawdatasize;
 -		}
 -	} while (sp->stream.avail_in > 0);
 -	return (1);
 -}
 -
 -/*
 - * Finish off an encoded strip by flushing the last
 - * string and tacking on an End Of Information code.
 - */
 -static int
 -ZIPPostEncode(TIFF* tif)
 -{
 -	ZIPState *sp = EncoderState(tif);
 -	static const char module[] = "ZIPPostEncode";
 -	int state;
 -
 -	sp->stream.avail_in = 0;
 -	do {
 -		state = deflate(&sp->stream, Z_FINISH);
 -		switch (state) {
 -		case Z_STREAM_END:
 -		case Z_OK:
 -		    if ((int)sp->stream.avail_out != (int)tif->tif_rawdatasize)
 -                    {
 -			    tif->tif_rawcc =
 -				tif->tif_rawdatasize - sp->stream.avail_out;
 -			    TIFFFlushData1(tif);
 -			    sp->stream.next_out = tif->tif_rawdata;
 -			    sp->stream.avail_out = tif->tif_rawdatasize;
 -		    }
 -		    break;
 -		default:
 -			TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s",
 -			tif->tif_name, sp->stream.msg);
 -		    return (0);
 -		}
 -	} while (state != Z_STREAM_END);
 -	return (1);
 -}
 -
 -static void
 -ZIPCleanup(TIFF* tif)
 -{
 -	ZIPState* sp = ZState(tif);
 -
 -	assert(sp != 0);
 -
 -	(void)TIFFPredictorCleanup(tif);
 -
 -	tif->tif_tagmethods.vgetfield = sp->vgetparent;
 -	tif->tif_tagmethods.vsetfield = sp->vsetparent;
 -
 -	if (sp->state & ZSTATE_INIT_ENCODE) {
 -            deflateEnd(&sp->stream);
 -            sp->state = 0;
 -        } else if ( sp->state & ZSTATE_INIT_DECODE) {
 -            inflateEnd(&sp->stream);
 -            sp->state = 0;
 -	}
 -	_TIFFfree(sp);
 -	tif->tif_data = NULL;
 -
 -	_TIFFSetDefaultCompressionState(tif);
 -}
 -
 -static int
 -ZIPVSetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	ZIPState* sp = ZState(tif);
 -	static const char module[] = "ZIPVSetField";
 -
 -	switch (tag) {
 -	case TIFFTAG_ZIPQUALITY:
 -		sp->zipquality = va_arg(ap, int);
 -		if ( sp->state&ZSTATE_INIT_ENCODE ) {
 -			if (deflateParams(&sp->stream,
 -			    sp->zipquality, Z_DEFAULT_STRATEGY) != Z_OK) {
 -				TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s",
 -				    tif->tif_name, sp->stream.msg);
 -				return (0);
 -			}
 -		}
 -		return (1);
 -	default:
 -		return (*sp->vsetparent)(tif, tag, ap);
 -	}
 -	/*NOTREACHED*/
 -}
 -
 -static int
 -ZIPVGetField(TIFF* tif, ttag_t tag, va_list ap)
 -{
 -	ZIPState* sp = ZState(tif);
 -
 -	switch (tag) {
 -	case TIFFTAG_ZIPQUALITY:
 -		*va_arg(ap, int*) = sp->zipquality;
 -		break;
 -	default:
 -		return (*sp->vgetparent)(tif, tag, ap);
 -	}
 -	return (1);
 -}
 -
 -static const TIFFFieldInfo zipFieldInfo[] = {
 -    { TIFFTAG_ZIPQUALITY,	 0, 0,	TIFF_ANY,	FIELD_PSEUDO,
 -      TRUE,	FALSE,	"" },
 -};
 -
 -int
 -TIFFInitZIP(TIFF* tif, int scheme)
 -{
 -	static const char module[] = "TIFFInitZIP";
 -	ZIPState* sp;
 -
 -	assert( (scheme == COMPRESSION_DEFLATE)
 -		|| (scheme == COMPRESSION_ADOBE_DEFLATE));
 -
 -	/*
 -	 * Merge codec-specific tag information.
 -	 */
 -	if (!_TIFFMergeFieldInfo(tif, zipFieldInfo,
 -				 TIFFArrayCount(zipFieldInfo))) {
 -		TIFFErrorExt(tif->tif_clientdata, module,
 -			     "Merging Deflate codec-specific tags failed");
 -		return 0;
 -	}
 -
 -	/*
 -	 * Allocate state block so tag methods have storage to record values.
 -	 */
 -	tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (ZIPState));
 -	if (tif->tif_data == NULL)
 -		goto bad;
 -	sp = ZState(tif);
 -	sp->stream.zalloc = NULL;
 -	sp->stream.zfree = NULL;
 -	sp->stream.opaque = NULL;
 -	sp->stream.data_type = Z_BINARY;
 -
 -	/*
 -	 * Override parent get/set field methods.
 -	 */
 -	sp->vgetparent = tif->tif_tagmethods.vgetfield;
 -	tif->tif_tagmethods.vgetfield = ZIPVGetField; /* hook for codec tags */
 -	sp->vsetparent = tif->tif_tagmethods.vsetfield;
 -	tif->tif_tagmethods.vsetfield = ZIPVSetField; /* hook for codec tags */
 -
 -	/* Default values for codec-specific fields */
 -	sp->zipquality = Z_DEFAULT_COMPRESSION;	/* default comp. level */
 -	sp->state = 0;
 -
 -	/*
 -	 * Install codec methods.
 -	 */
 -	tif->tif_setupdecode = ZIPSetupDecode;
 -	tif->tif_predecode = ZIPPreDecode;
 -	tif->tif_decoderow = ZIPDecode;
 -	tif->tif_decodestrip = ZIPDecode;
 -	tif->tif_decodetile = ZIPDecode;
 -	tif->tif_setupencode = ZIPSetupEncode;
 -	tif->tif_preencode = ZIPPreEncode;
 -	tif->tif_postencode = ZIPPostEncode;
 -	tif->tif_encoderow = ZIPEncode;
 -	tif->tif_encodestrip = ZIPEncode;
 -	tif->tif_encodetile = ZIPEncode;
 -	tif->tif_cleanup = ZIPCleanup;
 -	/*
 -	 * Setup predictor setup.
 -	 */
 -	(void) TIFFPredictorInit(tif);
 -	return (1);
 -bad:
 -	TIFFErrorExt(tif->tif_clientdata, module,
 -		     "No space for ZIP state block");
 -	return (0);
 -}
 -#endif /* ZIP_SUPORT */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tiff.h b/plugins/FreeImage/Source/LibTIFF/tiff.h deleted file mode 100644 index b8912efb9d..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tiff.h +++ /dev/null @@ -1,654 +0,0 @@ -/* $Id: tiff.h,v 1.38 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#ifndef _TIFF_
 -#define	_TIFF_
 -
 -#include "tif_config.h"
 -
 -/*
 - * Tag Image File Format (TIFF)
 - *
 - * Based on Rev 6.0 from:
 - *    Developer's Desk
 - *    Aldus Corporation
 - *    411 First Ave. South
 - *    Suite 200
 - *    Seattle, WA  98104
 - *    206-622-5500
 - *    
 - *    (http://partners.adobe.com/asn/developer/PDFS/TN/TIFF6.pdf)
 - *
 - * For Big TIFF design notes see the following link
 - *    http://www.remotesensing.org/libtiff/bigtiffdesign.html
 - */
 -#define	TIFF_VERSION	        42
 -#define TIFF_BIGTIFF_VERSION    43
 -
 -#define	TIFF_BIGENDIAN		0x4d4d
 -#define	TIFF_LITTLEENDIAN	0x4949
 -#define	MDI_LITTLEENDIAN        0x5045
 -#define	MDI_BIGENDIAN           0x4550
 -/*
 - * Intrinsic data types required by the file format:
 - *
 - * 8-bit quantities	int8/uint8
 - * 16-bit quantities	int16/uint16
 - * 32-bit quantities	int32/uint32
 - * strings		unsigned char*
 - */
 -
 -#ifndef HAVE_INT8
 -typedef	signed char int8;	/* NB: non-ANSI compilers may not grok */
 -#endif
 -typedef	unsigned char uint8;
 -#ifndef HAVE_INT16
 -typedef	short int16;
 -#endif
 -typedef	unsigned short uint16;	/* sizeof (uint16) must == 2 */
 -#if SIZEOF_INT == 4
 -#ifndef HAVE_INT32
 -typedef	int int32;
 -#endif
 -typedef	unsigned int uint32;	/* sizeof (uint32) must == 4 */
 -#elif SIZEOF_LONG == 4
 -#ifndef HAVE_INT32
 -typedef	long int32;
 -#endif
 -typedef	unsigned long uint32;	/* sizeof (uint32) must == 4 */
 -#endif
 -
 -/* For TIFFReassignTagToIgnore */
 -enum TIFFIgnoreSense /* IGNORE tag table */
 -{
 -	TIS_STORE,
 -	TIS_EXTRACT,
 -	TIS_EMPTY
 -};
 -
 -/*
 - * TIFF header.
 - */
 -typedef	struct {
 -	uint16	tiff_magic;	/* magic number (defines byte order) */
 -#define TIFF_MAGIC_SIZE		2
 -	uint16	tiff_version;	/* TIFF version number */
 -#define TIFF_VERSION_SIZE	2
 -	uint32	tiff_diroff;	/* byte offset to first directory */
 -#define TIFF_DIROFFSET_SIZE	4
 -} TIFFHeader;
 -
 -
 -/*
 - * TIFF Image File Directories are comprised of a table of field
 - * descriptors of the form shown below.  The table is sorted in
 - * ascending order by tag.  The values associated with each entry are
 - * disjoint and may appear anywhere in the file (so long as they are
 - * placed on a word boundary).
 - *
 - * If the value is 4 bytes or less, then it is placed in the offset
 - * field to save space.  If the value is less than 4 bytes, it is
 - * left-justified in the offset field.
 - */
 -typedef	struct {
 -	uint16		tdir_tag;	/* see below */
 -	uint16		tdir_type;	/* data type; see below */
 -	uint32		tdir_count;	/* number of items; length in spec */
 -	uint32		tdir_offset;	/* byte offset to field data */
 -} TIFFDirEntry;
 -
 -/*
 - * NB: In the comments below,
 - *  - items marked with a + are obsoleted by revision 5.0,
 - *  - items marked with a ! are introduced in revision 6.0.
 - *  - items marked with a % are introduced post revision 6.0.
 - *  - items marked with a $ are obsoleted by revision 6.0.
 - *  - items marked with a & are introduced by Adobe DNG specification.
 - */
 -
 -/*
 - * Tag data type information.
 - *
 - * Note: RATIONALs are the ratio of two 32-bit integer values.
 - */
 -typedef	enum {
 -	TIFF_NOTYPE	= 0,	/* placeholder */
 -	TIFF_BYTE	= 1,	/* 8-bit unsigned integer */
 -	TIFF_ASCII	= 2,	/* 8-bit bytes w/ last byte null */
 -	TIFF_SHORT	= 3,	/* 16-bit unsigned integer */
 -	TIFF_LONG	= 4,	/* 32-bit unsigned integer */
 -	TIFF_RATIONAL	= 5,	/* 64-bit unsigned fraction */
 -	TIFF_SBYTE	= 6,	/* !8-bit signed integer */
 -	TIFF_UNDEFINED	= 7,	/* !8-bit untyped data */
 -	TIFF_SSHORT	= 8,	/* !16-bit signed integer */
 -	TIFF_SLONG	= 9,	/* !32-bit signed integer */
 -	TIFF_SRATIONAL	= 10,	/* !64-bit signed fraction */
 -	TIFF_FLOAT	= 11,	/* !32-bit IEEE floating point */
 -	TIFF_DOUBLE	= 12,	/* !64-bit IEEE floating point */
 -	TIFF_IFD	= 13	/* %32-bit unsigned integer (offset) */
 -} TIFFDataType;
 -
 -/*
 - * TIFF Tag Definitions.
 - */
 -#define	TIFFTAG_SUBFILETYPE		254	/* subfile data descriptor */
 -#define	    FILETYPE_REDUCEDIMAGE	0x1	/* reduced resolution version */
 -#define	    FILETYPE_PAGE		0x2	/* one page of many */
 -#define	    FILETYPE_MASK		0x4	/* transparency mask */
 -#define	TIFFTAG_OSUBFILETYPE		255	/* +kind of data in subfile */
 -#define	    OFILETYPE_IMAGE		1	/* full resolution image data */
 -#define	    OFILETYPE_REDUCEDIMAGE	2	/* reduced size image data */
 -#define	    OFILETYPE_PAGE		3	/* one page of many */
 -#define	TIFFTAG_IMAGEWIDTH		256	/* image width in pixels */
 -#define	TIFFTAG_IMAGELENGTH		257	/* image height in pixels */
 -#define	TIFFTAG_BITSPERSAMPLE		258	/* bits per channel (sample) */
 -#define	TIFFTAG_COMPRESSION		259	/* data compression technique */
 -#define	    COMPRESSION_NONE		1	/* dump mode */
 -#define	    COMPRESSION_CCITTRLE	2	/* CCITT modified Huffman RLE */
 -#define	    COMPRESSION_CCITTFAX3	3	/* CCITT Group 3 fax encoding */
 -#define     COMPRESSION_CCITT_T4        3       /* CCITT T.4 (TIFF 6 name) */
 -#define	    COMPRESSION_CCITTFAX4	4	/* CCITT Group 4 fax encoding */
 -#define     COMPRESSION_CCITT_T6        4       /* CCITT T.6 (TIFF 6 name) */
 -#define	    COMPRESSION_LZW		5       /* Lempel-Ziv  & Welch */
 -#define	    COMPRESSION_OJPEG		6	/* !6.0 JPEG */
 -#define	    COMPRESSION_JPEG		7	/* %JPEG DCT compression */
 -#define	    COMPRESSION_NEXT		32766	/* NeXT 2-bit RLE */
 -#define	    COMPRESSION_CCITTRLEW	32771	/* #1 w/ word alignment */
 -#define	    COMPRESSION_PACKBITS	32773	/* Macintosh RLE */
 -#define	    COMPRESSION_THUNDERSCAN	32809	/* ThunderScan RLE */
 -/* codes 32895-32898 are reserved for ANSI IT8 TIFF/IT <dkelly@apago.com) */
 -#define	    COMPRESSION_IT8CTPAD	32895   /* IT8 CT w/padding */
 -#define	    COMPRESSION_IT8LW		32896   /* IT8 Linework RLE */
 -#define	    COMPRESSION_IT8MP		32897   /* IT8 Monochrome picture */
 -#define	    COMPRESSION_IT8BL		32898   /* IT8 Binary line art */
 -/* compression codes 32908-32911 are reserved for Pixar */
 -#define     COMPRESSION_PIXARFILM	32908   /* Pixar companded 10bit LZW */
 -#define	    COMPRESSION_PIXARLOG	32909   /* Pixar companded 11bit ZIP */
 -#define	    COMPRESSION_DEFLATE		32946	/* Deflate compression */
 -#define     COMPRESSION_ADOBE_DEFLATE   8       /* Deflate compression,
 -						   as recognized by Adobe */
 -/* compression code 32947 is reserved for Oceana Matrix <dev@oceana.com> */
 -#define     COMPRESSION_DCS             32947   /* Kodak DCS encoding */
 -#define	    COMPRESSION_JBIG		34661	/* ISO JBIG */
 -#define     COMPRESSION_SGILOG		34676	/* SGI Log Luminance RLE */
 -#define     COMPRESSION_SGILOG24	34677	/* SGI Log 24-bit packed */
 -#define     COMPRESSION_JP2000          34712   /* Leadtools JPEG2000 */
 -#define	TIFFTAG_PHOTOMETRIC		262	/* photometric interpretation */
 -#define	    PHOTOMETRIC_MINISWHITE	0	/* min value is white */
 -#define	    PHOTOMETRIC_MINISBLACK	1	/* min value is black */
 -#define	    PHOTOMETRIC_RGB		2	/* RGB color model */
 -#define	    PHOTOMETRIC_PALETTE		3	/* color map indexed */
 -#define	    PHOTOMETRIC_MASK		4	/* $holdout mask */
 -#define	    PHOTOMETRIC_SEPARATED	5	/* !color separations */
 -#define	    PHOTOMETRIC_YCBCR		6	/* !CCIR 601 */
 -#define	    PHOTOMETRIC_CIELAB		8	/* !1976 CIE L*a*b* */
 -#define	    PHOTOMETRIC_ICCLAB		9	/* ICC L*a*b* [Adobe TIFF Technote 4] */
 -#define	    PHOTOMETRIC_ITULAB		10	/* ITU L*a*b* */
 -#define     PHOTOMETRIC_LOGL		32844	/* CIE Log2(L) */
 -#define     PHOTOMETRIC_LOGLUV		32845	/* CIE Log2(L) (u',v') */
 -#define	TIFFTAG_THRESHHOLDING		263	/* +thresholding used on data */
 -#define	    THRESHHOLD_BILEVEL		1	/* b&w art scan */
 -#define	    THRESHHOLD_HALFTONE		2	/* or dithered scan */
 -#define	    THRESHHOLD_ERRORDIFFUSE	3	/* usually floyd-steinberg */
 -#define	TIFFTAG_CELLWIDTH		264	/* +dithering matrix width */
 -#define	TIFFTAG_CELLLENGTH		265	/* +dithering matrix height */
 -#define	TIFFTAG_FILLORDER		266	/* data order within a byte */
 -#define	    FILLORDER_MSB2LSB		1	/* most significant -> least */
 -#define	    FILLORDER_LSB2MSB		2	/* least significant -> most */
 -#define	TIFFTAG_DOCUMENTNAME		269	/* name of doc. image is from */
 -#define	TIFFTAG_IMAGEDESCRIPTION	270	/* info about image */
 -#define	TIFFTAG_MAKE			271	/* scanner manufacturer name */
 -#define	TIFFTAG_MODEL			272	/* scanner model name/number */
 -#define	TIFFTAG_STRIPOFFSETS		273	/* offsets to data strips */
 -#define	TIFFTAG_ORIENTATION		274	/* +image orientation */
 -#define	    ORIENTATION_TOPLEFT		1	/* row 0 top, col 0 lhs */
 -#define	    ORIENTATION_TOPRIGHT	2	/* row 0 top, col 0 rhs */
 -#define	    ORIENTATION_BOTRIGHT	3	/* row 0 bottom, col 0 rhs */
 -#define	    ORIENTATION_BOTLEFT		4	/* row 0 bottom, col 0 lhs */
 -#define	    ORIENTATION_LEFTTOP		5	/* row 0 lhs, col 0 top */
 -#define	    ORIENTATION_RIGHTTOP	6	/* row 0 rhs, col 0 top */
 -#define	    ORIENTATION_RIGHTBOT	7	/* row 0 rhs, col 0 bottom */
 -#define	    ORIENTATION_LEFTBOT		8	/* row 0 lhs, col 0 bottom */
 -#define	TIFFTAG_SAMPLESPERPIXEL		277	/* samples per pixel */
 -#define	TIFFTAG_ROWSPERSTRIP		278	/* rows per strip of data */
 -#define	TIFFTAG_STRIPBYTECOUNTS		279	/* bytes counts for strips */
 -#define	TIFFTAG_MINSAMPLEVALUE		280	/* +minimum sample value */
 -#define	TIFFTAG_MAXSAMPLEVALUE		281	/* +maximum sample value */
 -#define	TIFFTAG_XRESOLUTION		282	/* pixels/resolution in x */
 -#define	TIFFTAG_YRESOLUTION		283	/* pixels/resolution in y */
 -#define	TIFFTAG_PLANARCONFIG		284	/* storage organization */
 -#define	    PLANARCONFIG_CONTIG		1	/* single image plane */
 -#define	    PLANARCONFIG_SEPARATE	2	/* separate planes of data */
 -#define	TIFFTAG_PAGENAME		285	/* page name image is from */
 -#define	TIFFTAG_XPOSITION		286	/* x page offset of image lhs */
 -#define	TIFFTAG_YPOSITION		287	/* y page offset of image lhs */
 -#define	TIFFTAG_FREEOFFSETS		288	/* +byte offset to free block */
 -#define	TIFFTAG_FREEBYTECOUNTS		289	/* +sizes of free blocks */
 -#define	TIFFTAG_GRAYRESPONSEUNIT	290	/* $gray scale curve accuracy */
 -#define	    GRAYRESPONSEUNIT_10S	1	/* tenths of a unit */
 -#define	    GRAYRESPONSEUNIT_100S	2	/* hundredths of a unit */
 -#define	    GRAYRESPONSEUNIT_1000S	3	/* thousandths of a unit */
 -#define	    GRAYRESPONSEUNIT_10000S	4	/* ten-thousandths of a unit */
 -#define	    GRAYRESPONSEUNIT_100000S	5	/* hundred-thousandths */
 -#define	TIFFTAG_GRAYRESPONSECURVE	291	/* $gray scale response curve */
 -#define	TIFFTAG_GROUP3OPTIONS		292	/* 32 flag bits */
 -#define	TIFFTAG_T4OPTIONS		292	/* TIFF 6.0 proper name alias */
 -#define	    GROUP3OPT_2DENCODING	0x1	/* 2-dimensional coding */
 -#define	    GROUP3OPT_UNCOMPRESSED	0x2	/* data not compressed */
 -#define	    GROUP3OPT_FILLBITS		0x4	/* fill to byte boundary */
 -#define	TIFFTAG_GROUP4OPTIONS		293	/* 32 flag bits */
 -#define TIFFTAG_T6OPTIONS               293     /* TIFF 6.0 proper name */
 -#define	    GROUP4OPT_UNCOMPRESSED	0x2	/* data not compressed */
 -#define	TIFFTAG_RESOLUTIONUNIT		296	/* units of resolutions */
 -#define	    RESUNIT_NONE		1	/* no meaningful units */
 -#define	    RESUNIT_INCH		2	/* english */
 -#define	    RESUNIT_CENTIMETER		3	/* metric */
 -#define	TIFFTAG_PAGENUMBER		297	/* page numbers of multi-page */
 -#define	TIFFTAG_COLORRESPONSEUNIT	300	/* $color curve accuracy */
 -#define	    COLORRESPONSEUNIT_10S	1	/* tenths of a unit */
 -#define	    COLORRESPONSEUNIT_100S	2	/* hundredths of a unit */
 -#define	    COLORRESPONSEUNIT_1000S	3	/* thousandths of a unit */
 -#define	    COLORRESPONSEUNIT_10000S	4	/* ten-thousandths of a unit */
 -#define	    COLORRESPONSEUNIT_100000S	5	/* hundred-thousandths */
 -#define	TIFFTAG_TRANSFERFUNCTION	301	/* !colorimetry info */
 -#define	TIFFTAG_SOFTWARE		305	/* name & release */
 -#define	TIFFTAG_DATETIME		306	/* creation date and time */
 -#define	TIFFTAG_ARTIST			315	/* creator of image */
 -#define	TIFFTAG_HOSTCOMPUTER		316	/* machine where created */
 -#define	TIFFTAG_PREDICTOR		317	/* prediction scheme w/ LZW */
 -#define     PREDICTOR_NONE		1	/* no prediction scheme used */
 -#define     PREDICTOR_HORIZONTAL	2	/* horizontal differencing */
 -#define     PREDICTOR_FLOATINGPOINT	3	/* floating point predictor */
 -#define	TIFFTAG_WHITEPOINT		318	/* image white point */
 -#define	TIFFTAG_PRIMARYCHROMATICITIES	319	/* !primary chromaticities */
 -#define	TIFFTAG_COLORMAP		320	/* RGB map for pallette image */
 -#define	TIFFTAG_HALFTONEHINTS		321	/* !highlight+shadow info */
 -#define	TIFFTAG_TILEWIDTH		322	/* !tile width in pixels */
 -#define	TIFFTAG_TILELENGTH		323	/* !tile height in pixels */
 -#define TIFFTAG_TILEOFFSETS		324	/* !offsets to data tiles */
 -#define TIFFTAG_TILEBYTECOUNTS		325	/* !byte counts for tiles */
 -#define	TIFFTAG_BADFAXLINES		326	/* lines w/ wrong pixel count */
 -#define	TIFFTAG_CLEANFAXDATA		327	/* regenerated line info */
 -#define	    CLEANFAXDATA_CLEAN		0	/* no errors detected */
 -#define	    CLEANFAXDATA_REGENERATED	1	/* receiver regenerated lines */
 -#define	    CLEANFAXDATA_UNCLEAN	2	/* uncorrected errors exist */
 -#define	TIFFTAG_CONSECUTIVEBADFAXLINES	328	/* max consecutive bad lines */
 -#define	TIFFTAG_SUBIFD			330	/* subimage descriptors */
 -#define	TIFFTAG_INKSET			332	/* !inks in separated image */
 -#define	    INKSET_CMYK			1	/* !cyan-magenta-yellow-black color */
 -#define	    INKSET_MULTIINK		2	/* !multi-ink or hi-fi color */
 -#define	TIFFTAG_INKNAMES		333	/* !ascii names of inks */
 -#define	TIFFTAG_NUMBEROFINKS		334	/* !number of inks */
 -#define	TIFFTAG_DOTRANGE		336	/* !0% and 100% dot codes */
 -#define	TIFFTAG_TARGETPRINTER		337	/* !separation target */
 -#define	TIFFTAG_EXTRASAMPLES		338	/* !info about extra samples */
 -#define	    EXTRASAMPLE_UNSPECIFIED	0	/* !unspecified data */
 -#define	    EXTRASAMPLE_ASSOCALPHA	1	/* !associated alpha data */
 -#define	    EXTRASAMPLE_UNASSALPHA	2	/* !unassociated alpha data */
 -#define	TIFFTAG_SAMPLEFORMAT		339	/* !data sample format */
 -#define	    SAMPLEFORMAT_UINT		1	/* !unsigned integer data */
 -#define	    SAMPLEFORMAT_INT		2	/* !signed integer data */
 -#define	    SAMPLEFORMAT_IEEEFP		3	/* !IEEE floating point data */
 -#define	    SAMPLEFORMAT_VOID		4	/* !untyped data */
 -#define	    SAMPLEFORMAT_COMPLEXINT	5	/* !complex signed int */
 -#define	    SAMPLEFORMAT_COMPLEXIEEEFP	6	/* !complex ieee floating */
 -#define	TIFFTAG_SMINSAMPLEVALUE		340	/* !variable MinSampleValue */
 -#define	TIFFTAG_SMAXSAMPLEVALUE		341	/* !variable MaxSampleValue */
 -#define	TIFFTAG_CLIPPATH		343	/* %ClipPath
 -						   [Adobe TIFF technote 2] */
 -#define	TIFFTAG_XCLIPPATHUNITS		344	/* %XClipPathUnits
 -						   [Adobe TIFF technote 2] */
 -#define	TIFFTAG_YCLIPPATHUNITS		345	/* %YClipPathUnits
 -						   [Adobe TIFF technote 2] */
 -#define	TIFFTAG_INDEXED			346	/* %Indexed
 -						   [Adobe TIFF Technote 3] */
 -#define	TIFFTAG_JPEGTABLES		347	/* %JPEG table stream */
 -#define	TIFFTAG_OPIPROXY		351	/* %OPI Proxy [Adobe TIFF technote] */
 -/*
 - * Tags 512-521 are obsoleted by Technical Note #2 which specifies a
 - * revised JPEG-in-TIFF scheme.
 - */
 -#define	TIFFTAG_JPEGPROC		512	/* !JPEG processing algorithm */
 -#define	    JPEGPROC_BASELINE		1	/* !baseline sequential */
 -#define	    JPEGPROC_LOSSLESS		14	/* !Huffman coded lossless */
 -#define	TIFFTAG_JPEGIFOFFSET		513	/* !pointer to SOI marker */
 -#define	TIFFTAG_JPEGIFBYTECOUNT		514	/* !JFIF stream length */
 -#define	TIFFTAG_JPEGRESTARTINTERVAL	515	/* !restart interval length */
 -#define	TIFFTAG_JPEGLOSSLESSPREDICTORS	517	/* !lossless proc predictor */
 -#define	TIFFTAG_JPEGPOINTTRANSFORM	518	/* !lossless point transform */
 -#define	TIFFTAG_JPEGQTABLES		519	/* !Q matrice offsets */
 -#define	TIFFTAG_JPEGDCTABLES		520	/* !DCT table offsets */
 -#define	TIFFTAG_JPEGACTABLES		521	/* !AC coefficient offsets */
 -#define	TIFFTAG_YCBCRCOEFFICIENTS	529	/* !RGB -> YCbCr transform */
 -#define	TIFFTAG_YCBCRSUBSAMPLING	530	/* !YCbCr subsampling factors */
 -#define	TIFFTAG_YCBCRPOSITIONING	531	/* !subsample positioning */
 -#define	    YCBCRPOSITION_CENTERED	1	/* !as in PostScript Level 2 */
 -#define	    YCBCRPOSITION_COSITED	2	/* !as in CCIR 601-1 */
 -#define	TIFFTAG_REFERENCEBLACKWHITE	532	/* !colorimetry info */
 -#define	TIFFTAG_XMLPACKET		700	/* %XML packet
 -						   [Adobe XMP Specification,
 -						   January 2004 */
 -#define TIFFTAG_OPIIMAGEID		32781	/* %OPI ImageID
 -						   [Adobe TIFF technote] */
 -/* tags 32952-32956 are private tags registered to Island Graphics */
 -#define TIFFTAG_REFPTS			32953	/* image reference points */
 -#define TIFFTAG_REGIONTACKPOINT		32954	/* region-xform tack point */
 -#define TIFFTAG_REGIONWARPCORNERS	32955	/* warp quadrilateral */
 -#define TIFFTAG_REGIONAFFINE		32956	/* affine transformation mat */
 -/* tags 32995-32999 are private tags registered to SGI */
 -#define	TIFFTAG_MATTEING		32995	/* $use ExtraSamples */
 -#define	TIFFTAG_DATATYPE		32996	/* $use SampleFormat */
 -#define	TIFFTAG_IMAGEDEPTH		32997	/* z depth of image */
 -#define	TIFFTAG_TILEDEPTH		32998	/* z depth/data tile */
 -/* tags 33300-33309 are private tags registered to Pixar */
 -/*
 - * TIFFTAG_PIXAR_IMAGEFULLWIDTH and TIFFTAG_PIXAR_IMAGEFULLLENGTH
 - * are set when an image has been cropped out of a larger image.  
 - * They reflect the size of the original uncropped image.
 - * The TIFFTAG_XPOSITION and TIFFTAG_YPOSITION can be used
 - * to determine the position of the smaller image in the larger one.
 - */
 -#define TIFFTAG_PIXAR_IMAGEFULLWIDTH    33300   /* full image size in x */
 -#define TIFFTAG_PIXAR_IMAGEFULLLENGTH   33301   /* full image size in y */
 - /* Tags 33302-33306 are used to identify special image modes and data
 -  * used by Pixar's texture formats.
 -  */
 -#define TIFFTAG_PIXAR_TEXTUREFORMAT	33302	/* texture map format */
 -#define TIFFTAG_PIXAR_WRAPMODES		33303	/* s & t wrap modes */
 -#define TIFFTAG_PIXAR_FOVCOT		33304	/* cotan(fov) for env. maps */
 -#define TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN 33305
 -#define TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA 33306
 -/* tag 33405 is a private tag registered to Eastman Kodak */
 -#define TIFFTAG_WRITERSERIALNUMBER      33405   /* device serial number */
 -/* tag 33432 is listed in the 6.0 spec w/ unknown ownership */
 -#define	TIFFTAG_COPYRIGHT		33432	/* copyright string */
 -/* IPTC TAG from RichTIFF specifications */
 -#define TIFFTAG_RICHTIFFIPTC		33723
 -/* 34016-34029 are reserved for ANSI IT8 TIFF/IT <dkelly@apago.com) */
 -#define TIFFTAG_IT8SITE			34016	/* site name */
 -#define TIFFTAG_IT8COLORSEQUENCE	34017	/* color seq. [RGB,CMYK,etc] */
 -#define TIFFTAG_IT8HEADER		34018	/* DDES Header */
 -#define TIFFTAG_IT8RASTERPADDING	34019	/* raster scanline padding */
 -#define TIFFTAG_IT8BITSPERRUNLENGTH	34020	/* # of bits in short run */
 -#define TIFFTAG_IT8BITSPEREXTENDEDRUNLENGTH 34021/* # of bits in long run */
 -#define TIFFTAG_IT8COLORTABLE		34022	/* LW colortable */
 -#define TIFFTAG_IT8IMAGECOLORINDICATOR	34023	/* BP/BL image color switch */
 -#define TIFFTAG_IT8BKGCOLORINDICATOR	34024	/* BP/BL bg color switch */
 -#define TIFFTAG_IT8IMAGECOLORVALUE	34025	/* BP/BL image color value */
 -#define TIFFTAG_IT8BKGCOLORVALUE	34026	/* BP/BL bg color value */
 -#define TIFFTAG_IT8PIXELINTENSITYRANGE	34027	/* MP pixel intensity value */
 -#define TIFFTAG_IT8TRANSPARENCYINDICATOR 34028	/* HC transparency switch */
 -#define TIFFTAG_IT8COLORCHARACTERIZATION 34029	/* color character. table */
 -#define TIFFTAG_IT8HCUSAGE		34030	/* HC usage indicator */
 -#define TIFFTAG_IT8TRAPINDICATOR	34031	/* Trapping indicator
 -						   (untrapped=0, trapped=1) */
 -#define TIFFTAG_IT8CMYKEQUIVALENT	34032	/* CMYK color equivalents */
 -/* tags 34232-34236 are private tags registered to Texas Instruments */
 -#define TIFFTAG_FRAMECOUNT              34232   /* Sequence Frame Count */
 -/* tag 34377 is private tag registered to Adobe for PhotoShop */
 -#define TIFFTAG_PHOTOSHOP		34377 
 -/* tags 34665, 34853 and 40965 are documented in EXIF specification */
 -#define TIFFTAG_EXIFIFD			34665	/* Pointer to EXIF private directory */
 -/* tag 34750 is a private tag registered to Adobe? */
 -#define TIFFTAG_ICCPROFILE		34675	/* ICC profile data */
 -/* tag 34750 is a private tag registered to Pixel Magic */
 -#define	TIFFTAG_JBIGOPTIONS		34750	/* JBIG options */
 -#define TIFFTAG_GPSIFD			34853	/* Pointer to GPS private directory */
 -/* tags 34908-34914 are private tags registered to SGI */
 -#define	TIFFTAG_FAXRECVPARAMS		34908	/* encoded Class 2 ses. parms */
 -#define	TIFFTAG_FAXSUBADDRESS		34909	/* received SubAddr string */
 -#define	TIFFTAG_FAXRECVTIME		34910	/* receive time (secs) */
 -#define	TIFFTAG_FAXDCS			34911	/* encoded fax ses. params, Table 2/T.30 */
 -/* tags 37439-37443 are registered to SGI <gregl@sgi.com> */
 -#define TIFFTAG_STONITS			37439	/* Sample value to Nits */
 -/* tag 34929 is a private tag registered to FedEx */
 -#define	TIFFTAG_FEDEX_EDR		34929	/* unknown use */
 -#define TIFFTAG_INTEROPERABILITYIFD	40965	/* Pointer to Interoperability private directory */
 -/* Adobe Digital Negative (DNG) format tags */
 -#define TIFFTAG_DNGVERSION		50706	/* &DNG version number */
 -#define TIFFTAG_DNGBACKWARDVERSION	50707	/* &DNG compatibility version */
 -#define TIFFTAG_UNIQUECAMERAMODEL	50708	/* &name for the camera model */
 -#define TIFFTAG_LOCALIZEDCAMERAMODEL	50709	/* &localized camera model
 -						   name */
 -#define TIFFTAG_CFAPLANECOLOR		50710	/* &CFAPattern->LinearRaw space
 -						   mapping */
 -#define TIFFTAG_CFALAYOUT		50711	/* &spatial layout of the CFA */
 -#define TIFFTAG_LINEARIZATIONTABLE	50712	/* &lookup table description */
 -#define TIFFTAG_BLACKLEVELREPEATDIM	50713	/* &repeat pattern size for
 -						   the BlackLevel tag */
 -#define TIFFTAG_BLACKLEVEL		50714	/* &zero light encoding level */
 -#define TIFFTAG_BLACKLEVELDELTAH	50715	/* &zero light encoding level
 -						   differences (columns) */
 -#define TIFFTAG_BLACKLEVELDELTAV	50716	/* &zero light encoding level
 -						   differences (rows) */
 -#define TIFFTAG_WHITELEVEL		50717	/* &fully saturated encoding
 -						   level */
 -#define TIFFTAG_DEFAULTSCALE		50718	/* &default scale factors */
 -#define TIFFTAG_DEFAULTCROPORIGIN	50719	/* &origin of the final image
 -						   area */
 -#define TIFFTAG_DEFAULTCROPSIZE		50720	/* &size of the final image 
 -						   area */
 -#define TIFFTAG_COLORMATRIX1		50721	/* &XYZ->reference color space
 -						   transformation matrix 1 */
 -#define TIFFTAG_COLORMATRIX2		50722	/* &XYZ->reference color space
 -						   transformation matrix 2 */
 -#define TIFFTAG_CAMERACALIBRATION1	50723	/* &calibration matrix 1 */
 -#define TIFFTAG_CAMERACALIBRATION2	50724	/* &calibration matrix 2 */
 -#define TIFFTAG_REDUCTIONMATRIX1	50725	/* &dimensionality reduction
 -						   matrix 1 */
 -#define TIFFTAG_REDUCTIONMATRIX2	50726	/* &dimensionality reduction
 -						   matrix 2 */
 -#define TIFFTAG_ANALOGBALANCE		50727	/* &gain applied the stored raw
 -						   values*/
 -#define TIFFTAG_ASSHOTNEUTRAL		50728	/* &selected white balance in
 -						   linear reference space */
 -#define TIFFTAG_ASSHOTWHITEXY		50729	/* &selected white balance in
 -						   x-y chromaticity
 -						   coordinates */
 -#define TIFFTAG_BASELINEEXPOSURE	50730	/* &how much to move the zero
 -						   point */
 -#define TIFFTAG_BASELINENOISE		50731	/* &relative noise level */
 -#define TIFFTAG_BASELINESHARPNESS	50732	/* &relative amount of
 -						   sharpening */
 -#define TIFFTAG_BAYERGREENSPLIT		50733	/* &how closely the values of
 -						   the green pixels in the
 -						   blue/green rows track the
 -						   values of the green pixels
 -						   in the red/green rows */
 -#define TIFFTAG_LINEARRESPONSELIMIT	50734	/* &non-linear encoding range */
 -#define TIFFTAG_CAMERASERIALNUMBER	50735	/* &camera's serial number */
 -#define TIFFTAG_LENSINFO		50736	/* info about the lens */
 -#define TIFFTAG_CHROMABLURRADIUS	50737	/* &chroma blur radius */
 -#define TIFFTAG_ANTIALIASSTRENGTH	50738	/* &relative strength of the
 -						   camera's anti-alias filter */
 -#define TIFFTAG_SHADOWSCALE		50739	/* &used by Adobe Camera Raw */
 -#define TIFFTAG_DNGPRIVATEDATA		50740	/* &manufacturer's private data */
 -#define TIFFTAG_MAKERNOTESAFETY		50741	/* &whether the EXIF MakerNote
 -						   tag is safe to preserve
 -						   along with the rest of the
 -						   EXIF data */
 -#define	TIFFTAG_CALIBRATIONILLUMINANT1	50778	/* &illuminant 1 */
 -#define TIFFTAG_CALIBRATIONILLUMINANT2	50779	/* &illuminant 2 */
 -#define TIFFTAG_BESTQUALITYSCALE	50780	/* &best quality multiplier */
 -#define TIFFTAG_RAWDATAUNIQUEID		50781	/* &unique identifier for
 -						   the raw image data */
 -#define TIFFTAG_ORIGINALRAWFILENAME	50827	/* &file name of the original
 -						   raw file */
 -#define TIFFTAG_ORIGINALRAWFILEDATA	50828	/* &contents of the original
 -						   raw file */
 -#define TIFFTAG_ACTIVEAREA		50829	/* &active (non-masked) pixels
 -						   of the sensor */
 -#define TIFFTAG_MASKEDAREAS		50830	/* &list of coordinates
 -						   of fully masked pixels */
 -#define TIFFTAG_ASSHOTICCPROFILE	50831	/* &these two tags used to */
 -#define TIFFTAG_ASSHOTPREPROFILEMATRIX	50832	/* map cameras's color space
 -						   into ICC profile space */
 -#define TIFFTAG_CURRENTICCPROFILE	50833	/* & */
 -#define TIFFTAG_CURRENTPREPROFILEMATRIX	50834	/* & */
 -/* tag 65535 is an undefined tag used by Eastman Kodak */
 -#define TIFFTAG_DCSHUESHIFTVALUES       65535   /* hue shift correction data */
 -
 -/*
 - * The following are ``pseudo tags'' that can be used to control
 - * codec-specific functionality.  These tags are not written to file.
 - * Note that these values start at 0xffff+1 so that they'll never
 - * collide with Aldus-assigned tags.
 - *
 - * If you want your private pseudo tags ``registered'' (i.e. added to
 - * this file), please post a bug report via the tracking system at
 - * http://www.remotesensing.org/libtiff/bugs.html with the appropriate
 - * C definitions to add.
 - */
 -#define	TIFFTAG_FAXMODE			65536	/* Group 3/4 format control */
 -#define	    FAXMODE_CLASSIC	0x0000		/* default, include RTC */
 -#define	    FAXMODE_NORTC	0x0001		/* no RTC at end of data */
 -#define	    FAXMODE_NOEOL	0x0002		/* no EOL code at end of row */
 -#define	    FAXMODE_BYTEALIGN	0x0004		/* byte align row */
 -#define	    FAXMODE_WORDALIGN	0x0008		/* word align row */
 -#define	    FAXMODE_CLASSF	FAXMODE_NORTC	/* TIFF Class F */
 -#define	TIFFTAG_JPEGQUALITY		65537	/* Compression quality level */
 -/* Note: quality level is on the IJG 0-100 scale.  Default value is 75 */
 -#define	TIFFTAG_JPEGCOLORMODE		65538	/* Auto RGB<=>YCbCr convert? */
 -#define	    JPEGCOLORMODE_RAW	0x0000		/* no conversion (default) */
 -#define	    JPEGCOLORMODE_RGB	0x0001		/* do auto conversion */
 -#define	TIFFTAG_JPEGTABLESMODE		65539	/* What to put in JPEGTables */
 -#define	    JPEGTABLESMODE_QUANT 0x0001		/* include quantization tbls */
 -#define	    JPEGTABLESMODE_HUFF	0x0002		/* include Huffman tbls */
 -/* Note: default is JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF */
 -#define	TIFFTAG_FAXFILLFUNC		65540	/* G3/G4 fill function */
 -#define	TIFFTAG_PIXARLOGDATAFMT		65549	/* PixarLogCodec I/O data sz */
 -#define	    PIXARLOGDATAFMT_8BIT	0	/* regular u_char samples */
 -#define	    PIXARLOGDATAFMT_8BITABGR	1	/* ABGR-order u_chars */
 -#define	    PIXARLOGDATAFMT_11BITLOG	2	/* 11-bit log-encoded (raw) */
 -#define	    PIXARLOGDATAFMT_12BITPICIO	3	/* as per PICIO (1.0==2048) */
 -#define	    PIXARLOGDATAFMT_16BIT	4	/* signed short samples */
 -#define	    PIXARLOGDATAFMT_FLOAT	5	/* IEEE float samples */
 -/* 65550-65556 are allocated to Oceana Matrix <dev@oceana.com> */
 -#define TIFFTAG_DCSIMAGERTYPE           65550   /* imager model & filter */
 -#define     DCSIMAGERMODEL_M3           0       /* M3 chip (1280 x 1024) */
 -#define     DCSIMAGERMODEL_M5           1       /* M5 chip (1536 x 1024) */
 -#define     DCSIMAGERMODEL_M6           2       /* M6 chip (3072 x 2048) */
 -#define     DCSIMAGERFILTER_IR          0       /* infrared filter */
 -#define     DCSIMAGERFILTER_MONO        1       /* monochrome filter */
 -#define     DCSIMAGERFILTER_CFA         2       /* color filter array */
 -#define     DCSIMAGERFILTER_OTHER       3       /* other filter */
 -#define TIFFTAG_DCSINTERPMODE           65551   /* interpolation mode */
 -#define     DCSINTERPMODE_NORMAL        0x0     /* whole image, default */
 -#define     DCSINTERPMODE_PREVIEW       0x1     /* preview of image (384x256) */
 -#define TIFFTAG_DCSBALANCEARRAY         65552   /* color balance values */
 -#define TIFFTAG_DCSCORRECTMATRIX        65553   /* color correction values */
 -#define TIFFTAG_DCSGAMMA                65554   /* gamma value */
 -#define TIFFTAG_DCSTOESHOULDERPTS       65555   /* toe & shoulder points */
 -#define TIFFTAG_DCSCALIBRATIONFD        65556   /* calibration file desc */
 -/* Note: quality level is on the ZLIB 1-9 scale. Default value is -1 */
 -#define	TIFFTAG_ZIPQUALITY		65557	/* compression quality level */
 -#define	TIFFTAG_PIXARLOGQUALITY		65558	/* PixarLog uses same scale */
 -/* 65559 is allocated to Oceana Matrix <dev@oceana.com> */
 -#define TIFFTAG_DCSCLIPRECTANGLE	65559	/* area of image to acquire */
 -#define TIFFTAG_SGILOGDATAFMT		65560	/* SGILog user data format */
 -#define     SGILOGDATAFMT_FLOAT		0	/* IEEE float samples */
 -#define     SGILOGDATAFMT_16BIT		1	/* 16-bit samples */
 -#define     SGILOGDATAFMT_RAW		2	/* uninterpreted data */
 -#define     SGILOGDATAFMT_8BIT		3	/* 8-bit RGB monitor values */
 -#define TIFFTAG_SGILOGENCODE		65561 /* SGILog data encoding control*/
 -#define     SGILOGENCODE_NODITHER	0     /* do not dither encoded values*/
 -#define     SGILOGENCODE_RANDITHER	1     /* randomly dither encd values */
 -
 -/*
 - * EXIF tags
 - */
 -#define EXIFTAG_EXPOSURETIME		33434	/* Exposure time */
 -#define EXIFTAG_FNUMBER			33437	/* F number */
 -#define EXIFTAG_EXPOSUREPROGRAM		34850	/* Exposure program */
 -#define EXIFTAG_SPECTRALSENSITIVITY	34852	/* Spectral sensitivity */
 -#define EXIFTAG_ISOSPEEDRATINGS		34855	/* ISO speed rating */
 -#define EXIFTAG_OECF			34856	/* Optoelectric conversion
 -						   factor */
 -#define EXIFTAG_EXIFVERSION		36864	/* Exif version */
 -#define EXIFTAG_DATETIMEORIGINAL	36867	/* Date and time of original
 -						   data generation */
 -#define EXIFTAG_DATETIMEDIGITIZED	36868	/* Date and time of digital
 -						   data generation */
 -#define EXIFTAG_COMPONENTSCONFIGURATION	37121	/* Meaning of each component */
 -#define EXIFTAG_COMPRESSEDBITSPERPIXEL	37122	/* Image compression mode */
 -#define EXIFTAG_SHUTTERSPEEDVALUE	37377	/* Shutter speed */
 -#define EXIFTAG_APERTUREVALUE		37378	/* Aperture */
 -#define EXIFTAG_BRIGHTNESSVALUE		37379	/* Brightness */
 -#define EXIFTAG_EXPOSUREBIASVALUE	37380	/* Exposure bias */
 -#define EXIFTAG_MAXAPERTUREVALUE	37381	/* Maximum lens aperture */
 -#define EXIFTAG_SUBJECTDISTANCE		37382	/* Subject distance */
 -#define EXIFTAG_METERINGMODE		37383	/* Metering mode */
 -#define EXIFTAG_LIGHTSOURCE		37384	/* Light source */
 -#define EXIFTAG_FLASH			37385	/* Flash */
 -#define EXIFTAG_FOCALLENGTH		37386	/* Lens focal length */
 -#define EXIFTAG_SUBJECTAREA		37396	/* Subject area */
 -#define EXIFTAG_MAKERNOTE		37500	/* Manufacturer notes */
 -#define EXIFTAG_USERCOMMENT		37510	/* User comments */
 -#define EXIFTAG_SUBSECTIME		37520	/* DateTime subseconds */
 -#define EXIFTAG_SUBSECTIMEORIGINAL	37521	/* DateTimeOriginal subseconds */
 -#define EXIFTAG_SUBSECTIMEDIGITIZED	37522	/* DateTimeDigitized subseconds */
 -#define EXIFTAG_FLASHPIXVERSION		40960	/* Supported Flashpix version */
 -#define EXIFTAG_COLORSPACE		40961	/* Color space information */
 -#define EXIFTAG_PIXELXDIMENSION		40962	/* Valid image width */
 -#define EXIFTAG_PIXELYDIMENSION		40963	/* Valid image height */
 -#define EXIFTAG_RELATEDSOUNDFILE	40964	/* Related audio file */
 -#define EXIFTAG_FLASHENERGY		41483	/* Flash energy */
 -#define EXIFTAG_SPATIALFREQUENCYRESPONSE 41484	/* Spatial frequency response */
 -#define EXIFTAG_FOCALPLANEXRESOLUTION	41486	/* Focal plane X resolution */
 -#define EXIFTAG_FOCALPLANEYRESOLUTION	41487	/* Focal plane Y resolution */
 -#define EXIFTAG_FOCALPLANERESOLUTIONUNIT 41488	/* Focal plane resolution unit */
 -#define EXIFTAG_SUBJECTLOCATION		41492	/* Subject location */
 -#define EXIFTAG_EXPOSUREINDEX		41493	/* Exposure index */
 -#define EXIFTAG_SENSINGMETHOD		41495	/* Sensing method */
 -#define EXIFTAG_FILESOURCE		41728	/* File source */
 -#define EXIFTAG_SCENETYPE		41729	/* Scene type */
 -#define EXIFTAG_CFAPATTERN		41730	/* CFA pattern */
 -#define EXIFTAG_CUSTOMRENDERED		41985	/* Custom image processing */
 -#define EXIFTAG_EXPOSUREMODE		41986	/* Exposure mode */
 -#define EXIFTAG_WHITEBALANCE		41987	/* White balance */
 -#define EXIFTAG_DIGITALZOOMRATIO	41988	/* Digital zoom ratio */
 -#define EXIFTAG_FOCALLENGTHIN35MMFILM	41989	/* Focal length in 35 mm film */
 -#define EXIFTAG_SCENECAPTURETYPE	41990	/* Scene capture type */
 -#define EXIFTAG_GAINCONTROL		41991	/* Gain control */
 -#define EXIFTAG_CONTRAST		41992	/* Contrast */
 -#define EXIFTAG_SATURATION		41993	/* Saturation */
 -#define EXIFTAG_SHARPNESS		41994	/* Sharpness */
 -#define EXIFTAG_DEVICESETTINGDESCRIPTION 41995	/* Device settings description */
 -#define EXIFTAG_SUBJECTDISTANCERANGE	41996	/* Subject distance range */
 -#define EXIFTAG_GAINCONTROL		41991	/* Gain control */
 -#define EXIFTAG_GAINCONTROL		41991	/* Gain control */
 -#define EXIFTAG_IMAGEUNIQUEID		42016	/* Unique image ID */
 -
 -#endif /* _TIFF_ */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tiffconf.h-vms b/plugins/FreeImage/Source/LibTIFF/tiffconf.h-vms deleted file mode 100644 index de717ecb97..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tiffconf.h-vms +++ /dev/null @@ -1,99 +0,0 @@ -/*
 -  Configuration defines for installed libtiff.
 -  This file maintained for backward compatibility. Do not use definitions
 -  from this file in your programs.
 -*/
 -
 -#ifndef _TIFFCONF_
 -#define _TIFFCONF_
 -
 -/* Define to 1 if the system has the type `int16'. */
 -//#define HAVE_INT16 
 -
 -/* Define to 1 if the system has the type `int32'. */
 -//#define  HAVE_INT32 
 -
 -/* Define to 1 if the system has the type `int8'. */
 -//#define HAVE_INT8 
 -
 -/* The size of a `int', as computed by sizeof. */
 -#define SIZEOF_INT 4
 -
 -/* The size of a `long', as computed by sizeof. */
 -#define SIZEOF_LONG 4
 -
 -/* Compatibility stuff. */
 -
 -/* Define as 0 or 1 according to the floating point format suported by the
 -   machine */
 -#define HAVE_IEEEFP 1
 -
 -#define HAVE_GETOPT 1
 -
 -/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */
 -#define HOST_FILLORDER FILLORDER_LSB2MSB
 -
 -/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian
 -   (Intel) */
 -#define HOST_BIGENDIAN 0
 -
 -/* Support CCITT Group 3 & 4 algorithms */
 -#define CCITT_SUPPORT 1
 -
 -/* Support JPEG compression (requires IJG JPEG library) */
 -#define JPEG_SUPPORT 
 -
 -/* Support LogLuv high dynamic range encoding */
 -#define LOGLUV_SUPPORT 1
 -
 -/* Support LZW algorithm */
 -#define LZW_SUPPORT 1
 -
 -/* Support NeXT 2-bit RLE algorithm */
 -#define NEXT_SUPPORT 1
 -
 -/* Support Old JPEG compresson (read contrib/ojpeg/README first! Compilation
 -   fails with unpatched IJG JPEG library) */
 -/* #undef OJPEG_SUPPORT */
 -
 -/* Support Macintosh PackBits algorithm */
 -#define PACKBITS_SUPPORT 1
 -
 -/* Support Pixar log-format algorithm (requires Zlib) */
 -/* #undef PIXARLOG_SUPPORT */
 -
 -/* Support ThunderScan 4-bit RLE algorithm */
 -#define THUNDER_SUPPORT 1
 -
 -/* Support Deflate compression */
 -/* #undef ZIP_SUPPORT */
 -
 -/* Support strip chopping (whether or not to convert single-strip uncompressed
 -   images to mutiple strips of ~8Kb to reduce memory usage) */
 -#define STRIPCHOP_DEFAULT TIFF_STRIPCHOP
 -
 -/* Enable SubIFD tag (330) support */
 -#define SUBIFD_SUPPORT 1
 -
 -/* Treat extra sample as alpha (default enabled). The RGBA interface will
 -   treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many
 -   packages produce RGBA files but don't mark the alpha properly. */
 -#define DEFAULT_EXTRASAMPLE_AS_ALPHA 1
 -
 -/* Pick up YCbCr subsampling info from the JPEG data stream to support files
 -   lacking the tag (default enabled). */
 -#define CHECK_JPEG_YCBCR_SUBSAMPLING 1
 -
 -/*
 - * Feature support definitions.
 - * XXX: These macros are obsoleted. Don't use them in your apps!
 - * Macros stays here for backward compatibility and should be always defined.
 - */
 -#define COLORIMETRY_SUPPORT
 -#define YCBCR_SUPPORT
 -#define CMYK_SUPPORT
 -#define ICC_SUPPORT
 -#define PHOTOSHOP_SUPPORT
 -#define IPTC_SUPPORT
 -
 -#endif /* _TIFFCONF_ */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tiffconf.vc.h b/plugins/FreeImage/Source/LibTIFF/tiffconf.vc.h deleted file mode 100644 index 5d73852c41..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tiffconf.vc.h +++ /dev/null @@ -1,116 +0,0 @@ -/*
 -  Configuration defines for installed libtiff.
 -  This file maintained for backward compatibility. Do not use definitions
 -  from this file in your programs.
 -*/
 -
 -#ifndef _TIFFCONF_
 -#define _TIFFCONF_
 -
 -/* Define to 1 if the system has the type `int16'. */
 -/* #undef HAVE_INT16 */
 -
 -/* Define to 1 if the system has the type `int32'. */
 -/* #undef HAVE_INT32 */
 -
 -/* Define to 1 if the system has the type `int8'. */
 -/* #undef HAVE_INT8 */
 -
 -/* The size of a `int', as computed by sizeof. */
 -#define SIZEOF_INT 4
 -
 -/* The size of a `long', as computed by sizeof. */
 -#define SIZEOF_LONG 4
 -
 -/* Signed 64-bit type formatter */
 -#define TIFF_INT64_FORMAT "%I64d"
 -
 -/* Signed 64-bit type */
 -#define TIFF_INT64_T signed __int64
 -
 -/* Unsigned 64-bit type formatter */
 -#define TIFF_UINT64_FORMAT "%I64u"
 -
 -/* Unsigned 64-bit type */
 -#define TIFF_UINT64_T unsigned __int64
 -
 -/* Compatibility stuff. */
 -
 -/* Define as 0 or 1 according to the floating point format suported by the
 -   machine */
 -#define HAVE_IEEEFP 1
 -
 -/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */
 -#define HOST_FILLORDER FILLORDER_LSB2MSB
 -
 -/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian
 -   (Intel) */
 -#define HOST_BIGENDIAN 0
 -
 -/* Support CCITT Group 3 & 4 algorithms */
 -#define CCITT_SUPPORT 1
 -
 -/* Support JPEG compression (requires IJG JPEG library) */
 -/* #undef JPEG_SUPPORT */
 -
 -/* Support LogLuv high dynamic range encoding */
 -#define LOGLUV_SUPPORT 1
 -
 -/* Support LZW algorithm */
 -#define LZW_SUPPORT 1
 -
 -/* Support NeXT 2-bit RLE algorithm */
 -#define NEXT_SUPPORT 1
 -
 -/* Support Old JPEG compresson (read contrib/ojpeg/README first! Compilation
 -   fails with unpatched IJG JPEG library) */
 -/* #undef OJPEG_SUPPORT */
 -
 -/* Support Macintosh PackBits algorithm */
 -#define PACKBITS_SUPPORT 1
 -
 -/* Support Pixar log-format algorithm (requires Zlib) */
 -/* #undef PIXARLOG_SUPPORT */
 -
 -/* Support ThunderScan 4-bit RLE algorithm */
 -#define THUNDER_SUPPORT 1
 -
 -/* Support Deflate compression */
 -/* #undef ZIP_SUPPORT */
 -
 -/* Support strip chopping (whether or not to convert single-strip uncompressed
 -   images to mutiple strips of ~8Kb to reduce memory usage) */
 -#define STRIPCHOP_DEFAULT TIFF_STRIPCHOP
 -
 -/* Enable SubIFD tag (330) support */
 -#define SUBIFD_SUPPORT 1
 -
 -/* Treat extra sample as alpha (default enabled). The RGBA interface will
 -   treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many
 -   packages produce RGBA files but don't mark the alpha properly. */
 -#define DEFAULT_EXTRASAMPLE_AS_ALPHA 1
 -
 -/* Pick up YCbCr subsampling info from the JPEG data stream to support files
 -   lacking the tag (default enabled). */
 -#define CHECK_JPEG_YCBCR_SUBSAMPLING 1
 -
 -/*
 - * Feature support definitions.
 - * XXX: These macros are obsoleted. Don't use them in your apps!
 - * Macros stays here for backward compatibility and should be always defined.
 - */
 -#define COLORIMETRY_SUPPORT
 -#define YCBCR_SUPPORT
 -#define CMYK_SUPPORT
 -#define ICC_SUPPORT
 -#define PHOTOSHOP_SUPPORT
 -#define IPTC_SUPPORT
 -
 -#endif /* _TIFFCONF_ */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tiffio.h b/plugins/FreeImage/Source/LibTIFF/tiffio.h deleted file mode 100644 index 2b94407acd..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tiffio.h +++ /dev/null @@ -1,526 +0,0 @@ -/* $Id: tiffio.h,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 - * OF THIS SOFTWARE.
 - */
 -
 -#ifndef _TIFFIO_
 -#define	_TIFFIO_
 -
 -/*
 - * TIFF I/O Library Definitions.
 - */
 -#include "tiff.h"
 -#include "tiffvers.h"
 -
 -/*
 - * TIFF is defined as an incomplete type to hide the
 - * library's internal data structures from clients.
 - */
 -typedef	struct tiff TIFF;
 -
 -/*
 - * The following typedefs define the intrinsic size of
 - * data types used in the *exported* interfaces.  These
 - * definitions depend on the proper definition of types
 - * in tiff.h.  Note also that the varargs interface used
 - * to pass tag types and values uses the types defined in
 - * tiff.h directly.
 - *
 - * NB: ttag_t is unsigned int and not unsigned short because
 - *     ANSI C requires that the type before the ellipsis be a
 - *     promoted type (i.e. one of int, unsigned int, pointer,
 - *     or double) and because we defined pseudo-tags that are
 - *     outside the range of legal Aldus-assigned tags.
 - * NB: tsize_t is int32 and not uint32 because some functions
 - *     return -1.
 - * NB: toff_t is not off_t for many reasons; TIFFs max out at
 - *     32-bit file offsets being the most important, and to ensure
 - *     that it is unsigned, rather than signed.
 - */
 -typedef uint32 ttag_t;          /* directory tag */
 -typedef uint16 tdir_t;          /* directory index */
 -typedef uint16 tsample_t;       /* sample number */
 -typedef uint32 tstrile_t;       /* strip or tile number */
 -typedef tstrile_t tstrip_t;     /* strip number */
 -typedef tstrile_t ttile_t;      /* tile number */
 -typedef int32 tsize_t;          /* i/o size in bytes */
 -typedef void* tdata_t;          /* image data ref */
 -typedef uint32 toff_t;          /* file offset */
 -
 -#if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32))
 -#define __WIN32__
 -#endif
 -
 -/*
 - * On windows you should define USE_WIN32_FILEIO if you are using tif_win32.c
 - * or AVOID_WIN32_FILEIO if you are using something else (like tif_unix.c).
 - *
 - * By default tif_unix.c is assumed.
 - */
 -
 -#if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows)
 -#  if !defined(__CYGWIN) && !defined(AVOID_WIN32_FILEIO) && !defined(USE_WIN32_FILEIO)
 -#    define AVOID_WIN32_FILEIO
 -#  endif
 -#endif
 -
 -#if defined(USE_WIN32_FILEIO)
 -# define VC_EXTRALEAN
 -# include <windows.h>
 -# ifdef __WIN32__
 -DECLARE_HANDLE(thandle_t);	/* Win32 file handle */
 -# else
 -typedef	HFILE thandle_t;	/* client data handle */
 -# endif /* __WIN32__ */
 -#else
 -typedef	void* thandle_t;	/* client data handle */
 -#endif /* USE_WIN32_FILEIO */
 -
 -/*
 - * Flags to pass to TIFFPrintDirectory to control
 - * printing of data structures that are potentially
 - * very large.   Bit-or these flags to enable printing
 - * multiple items.
 - */
 -#define	TIFFPRINT_NONE		0x0		/* no extra info */
 -#define	TIFFPRINT_STRIPS	0x1		/* strips/tiles info */
 -#define	TIFFPRINT_CURVES	0x2		/* color/gray response curves */
 -#define	TIFFPRINT_COLORMAP	0x4		/* colormap */
 -#define	TIFFPRINT_JPEGQTABLES	0x100		/* JPEG Q matrices */
 -#define	TIFFPRINT_JPEGACTABLES	0x200		/* JPEG AC tables */
 -#define	TIFFPRINT_JPEGDCTABLES	0x200		/* JPEG DC tables */
 -
 -/* 
 - * Colour conversion stuff
 - */
 -
 -/* reference white */
 -#define D65_X0 (95.0470F)
 -#define D65_Y0 (100.0F)
 -#define D65_Z0 (108.8827F)
 -
 -#define D50_X0 (96.4250F)
 -#define D50_Y0 (100.0F)
 -#define D50_Z0 (82.4680F)
 -
 -/* Structure for holding information about a display device. */
 -
 -typedef	unsigned char TIFFRGBValue;		/* 8-bit samples */
 -
 -typedef struct {
 -	float d_mat[3][3]; 		/* XYZ -> luminance matrix */
 -	float d_YCR;			/* Light o/p for reference white */
 -	float d_YCG;
 -	float d_YCB;
 -	uint32 d_Vrwr;			/* Pixel values for ref. white */
 -	uint32 d_Vrwg;
 -	uint32 d_Vrwb;
 -	float d_Y0R;			/* Residual light for black pixel */
 -	float d_Y0G;
 -	float d_Y0B;
 -	float d_gammaR;			/* Gamma values for the three guns */
 -	float d_gammaG;
 -	float d_gammaB;
 -} TIFFDisplay;
 -
 -typedef struct {				/* YCbCr->RGB support */
 -	TIFFRGBValue* clamptab;			/* range clamping table */
 -	int*	Cr_r_tab;
 -	int*	Cb_b_tab;
 -	int32*	Cr_g_tab;
 -	int32*	Cb_g_tab;
 -        int32*  Y_tab;
 -} TIFFYCbCrToRGB;
 -
 -typedef struct {				/* CIE Lab 1976->RGB support */
 -	int	range;				/* Size of conversion table */
 -#define CIELABTORGB_TABLE_RANGE 1500
 -	float	rstep, gstep, bstep;
 -	float	X0, Y0, Z0;			/* Reference white point */
 -	TIFFDisplay display;
 -	float	Yr2r[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yr to r */
 -	float	Yg2g[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yg to g */
 -	float	Yb2b[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yb to b */
 -} TIFFCIELabToRGB;
 -
 -/*
 - * RGBA-style image support.
 - */
 -typedef struct _TIFFRGBAImage TIFFRGBAImage;
 -/*
 - * The image reading and conversion routines invoke
 - * ``put routines'' to copy/image/whatever tiles of
 - * raw image data.  A default set of routines are 
 - * provided to convert/copy raw image data to 8-bit
 - * packed ABGR format rasters.  Applications can supply
 - * alternate routines that unpack the data into a
 - * different format or, for example, unpack the data
 - * and draw the unpacked raster on the display.
 - */
 -typedef void (*tileContigRoutine)
 -    (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32,
 -	unsigned char*);
 -typedef void (*tileSeparateRoutine)
 -    (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32,
 -	unsigned char*, unsigned char*, unsigned char*, unsigned char*);
 -/*
 - * RGBA-reader state.
 - */
 -struct _TIFFRGBAImage {
 -	TIFF* tif;                              /* image handle */
 -	int stoponerr;                          /* stop on read error */
 -	int isContig;                           /* data is packed/separate */
 -	int alpha;                              /* type of alpha data present */
 -	uint32 width;                           /* image width */
 -	uint32 height;                          /* image height */
 -	uint16 bitspersample;                   /* image bits/sample */
 -	uint16 samplesperpixel;                 /* image samples/pixel */
 -	uint16 orientation;                     /* image orientation */
 -	uint16 req_orientation;                 /* requested orientation */
 -	uint16 photometric;                     /* image photometric interp */
 -	uint16* redcmap;                        /* colormap pallete */
 -	uint16* greencmap;
 -	uint16* bluecmap;
 -	/* get image data routine */
 -	int (*get)(TIFFRGBAImage*, uint32*, uint32, uint32);
 -	/* put decoded strip/tile */
 -	union {
 -	    void (*any)(TIFFRGBAImage*);
 -	    tileContigRoutine contig;
 -	    tileSeparateRoutine separate;
 -	} put;
 -	TIFFRGBValue* Map;                      /* sample mapping array */
 -	uint32** BWmap;                         /* black&white map */
 -	uint32** PALmap;                        /* palette image map */
 -	TIFFYCbCrToRGB* ycbcr;                  /* YCbCr conversion state */
 -	TIFFCIELabToRGB* cielab;                /* CIE L*a*b conversion state */
 -
 -	int row_offset;
 -	int col_offset;
 -};
 -
 -/*
 - * Macros for extracting components from the
 - * packed ABGR form returned by TIFFReadRGBAImage.
 - */
 -#define	TIFFGetR(abgr)	((abgr) & 0xff)
 -#define	TIFFGetG(abgr)	(((abgr) >> 8) & 0xff)
 -#define	TIFFGetB(abgr)	(((abgr) >> 16) & 0xff)
 -#define	TIFFGetA(abgr)	(((abgr) >> 24) & 0xff)
 -
 -/*
 - * A CODEC is a software package that implements decoding,
 - * encoding, or decoding+encoding of a compression algorithm.
 - * The library provides a collection of builtin codecs.
 - * More codecs may be registered through calls to the library
 - * and/or the builtin implementations may be overridden.
 - */
 -typedef	int (*TIFFInitMethod)(TIFF*, int);
 -typedef struct {
 -	char*		name;
 -	uint16		scheme;
 -	TIFFInitMethod	init;
 -} TIFFCodec;
 -
 -#include <stdio.h>
 -#include <stdarg.h>
 -
 -/* share internal LogLuv conversion routines? */
 -#ifndef LOGLUV_PUBLIC
 -#define LOGLUV_PUBLIC		1
 -#endif
 -
 -#if !defined(__GNUC__) && !defined(__attribute__)
 -#  define __attribute__(x) /*nothing*/
 -#endif
 -
 -#if defined(c_plusplus) || defined(__cplusplus)
 -extern "C" {
 -#endif
 -typedef	void (*TIFFErrorHandler)(const char*, const char*, va_list);
 -typedef	void (*TIFFErrorHandlerExt)(thandle_t, const char*, const char*, va_list);
 -typedef	tsize_t (*TIFFReadWriteProc)(thandle_t, tdata_t, tsize_t);
 -typedef	toff_t (*TIFFSeekProc)(thandle_t, toff_t, int);
 -typedef	int (*TIFFCloseProc)(thandle_t);
 -typedef	toff_t (*TIFFSizeProc)(thandle_t);
 -typedef	int (*TIFFMapFileProc)(thandle_t, tdata_t*, toff_t*);
 -typedef	void (*TIFFUnmapFileProc)(thandle_t, tdata_t, toff_t);
 -typedef	void (*TIFFExtendProc)(TIFF*); 
 -
 -extern	const char* TIFFGetVersion(void);
 -
 -extern	const TIFFCodec* TIFFFindCODEC(uint16);
 -extern	TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod);
 -extern	void TIFFUnRegisterCODEC(TIFFCodec*);
 -extern  int TIFFIsCODECConfigured(uint16);
 -extern	TIFFCodec* TIFFGetConfiguredCODECs(void);
 -
 -/*
 - * Auxiliary functions.
 - */
 -
 -extern	tdata_t _TIFFmalloc(tsize_t);
 -extern	tdata_t _TIFFrealloc(tdata_t, tsize_t);
 -extern	void _TIFFmemset(tdata_t, int, tsize_t);
 -extern	void _TIFFmemcpy(tdata_t, const tdata_t, tsize_t);
 -extern	int _TIFFmemcmp(const tdata_t, const tdata_t, tsize_t);
 -extern	void _TIFFfree(tdata_t);
 -
 -/*
 -** Stuff, related to tag handling and creating custom tags.
 -*/
 -extern  int  TIFFGetTagListCount( TIFF * );
 -extern  ttag_t TIFFGetTagListEntry( TIFF *, int tag_index );
 -    
 -#define	TIFF_ANY	TIFF_NOTYPE	/* for field descriptor searching */
 -#define	TIFF_VARIABLE	-1		/* marker for variable length tags */
 -#define	TIFF_SPP	-2		/* marker for SamplesPerPixel tags */
 -#define	TIFF_VARIABLE2	-3		/* marker for uint32 var-length tags */
 -
 -#define FIELD_CUSTOM    65    
 -
 -typedef	struct {
 -	ttag_t	field_tag;		/* field's tag */
 -	short	field_readcount;	/* read count/TIFF_VARIABLE/TIFF_SPP */
 -	short	field_writecount;	/* write count/TIFF_VARIABLE */
 -	TIFFDataType field_type;	/* type of associated data */
 -        unsigned short field_bit;	/* bit in fieldsset bit vector */
 -	unsigned char field_oktochange;	/* if true, can change while writing */
 -	unsigned char field_passcount;	/* if true, pass dir count on set */
 -	char	*field_name;		/* ASCII name */
 -} TIFFFieldInfo;
 -
 -typedef struct _TIFFTagValue {
 -    const TIFFFieldInfo  *info;
 -    int             count;
 -    void           *value;
 -} TIFFTagValue;
 -
 -extern	void TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], int);
 -extern	const TIFFFieldInfo* TIFFFindFieldInfo(TIFF*, ttag_t, TIFFDataType);
 -extern  const TIFFFieldInfo* TIFFFindFieldInfoByName(TIFF* , const char *,
 -						     TIFFDataType);
 -extern	const TIFFFieldInfo* TIFFFieldWithTag(TIFF*, ttag_t);
 -extern	const TIFFFieldInfo* TIFFFieldWithName(TIFF*, const char *);
 -
 -typedef	int (*TIFFVSetMethod)(TIFF*, ttag_t, va_list);
 -typedef	int (*TIFFVGetMethod)(TIFF*, ttag_t, va_list);
 -typedef	void (*TIFFPrintMethod)(TIFF*, FILE*, long);
 -    
 -typedef struct {
 -    TIFFVSetMethod	vsetfield;	/* tag set routine */
 -    TIFFVGetMethod	vgetfield;	/* tag get routine */
 -    TIFFPrintMethod	printdir;	/* directory print routine */
 -} TIFFTagMethods;
 -        
 -extern  TIFFTagMethods *TIFFAccessTagMethods( TIFF * );
 -extern  void *TIFFGetClientInfo( TIFF *, const char * );
 -extern  void TIFFSetClientInfo( TIFF *, void *, const char * );
 -
 -extern	void TIFFCleanup(TIFF*);
 -extern	void TIFFClose(TIFF*);
 -extern	int TIFFFlush(TIFF*);
 -extern	int TIFFFlushData(TIFF*);
 -extern	int TIFFGetField(TIFF*, ttag_t, ...);
 -extern	int TIFFVGetField(TIFF*, ttag_t, va_list);
 -extern	int TIFFGetFieldDefaulted(TIFF*, ttag_t, ...);
 -extern	int TIFFVGetFieldDefaulted(TIFF*, ttag_t, va_list);
 -extern	int TIFFReadDirectory(TIFF*);
 -extern	int TIFFReadCustomDirectory(TIFF*, toff_t, const TIFFFieldInfo[],
 -				    size_t);
 -extern	int TIFFReadEXIFDirectory(TIFF*, toff_t);
 -extern	tsize_t TIFFScanlineSize(TIFF*);
 -extern	tsize_t TIFFOldScanlineSize(TIFF*);
 -extern	tsize_t TIFFNewScanlineSize(TIFF*);
 -extern	tsize_t TIFFRasterScanlineSize(TIFF*);
 -extern	tsize_t TIFFStripSize(TIFF*);
 -extern	tsize_t TIFFRawStripSize(TIFF*, tstrip_t);
 -extern	tsize_t TIFFVStripSize(TIFF*, uint32);
 -extern	tsize_t TIFFTileRowSize(TIFF*);
 -extern	tsize_t TIFFTileSize(TIFF*);
 -extern	tsize_t TIFFVTileSize(TIFF*, uint32);
 -extern	uint32 TIFFDefaultStripSize(TIFF*, uint32);
 -extern	void TIFFDefaultTileSize(TIFF*, uint32*, uint32*);
 -extern	int TIFFFileno(TIFF*);
 -extern  int TIFFSetFileno(TIFF*, int);
 -extern  thandle_t TIFFClientdata(TIFF*);
 -extern  thandle_t TIFFSetClientdata(TIFF*, thandle_t);
 -extern	int TIFFGetMode(TIFF*);
 -extern	int TIFFSetMode(TIFF*, int);
 -extern	int TIFFIsTiled(TIFF*);
 -extern	int TIFFIsByteSwapped(TIFF*);
 -extern	int TIFFIsUpSampled(TIFF*);
 -extern	int TIFFIsMSB2LSB(TIFF*);
 -extern	int TIFFIsBigEndian(TIFF*);
 -extern	TIFFReadWriteProc TIFFGetReadProc(TIFF*);
 -extern	TIFFReadWriteProc TIFFGetWriteProc(TIFF*);
 -extern	TIFFSeekProc TIFFGetSeekProc(TIFF*);
 -extern	TIFFCloseProc TIFFGetCloseProc(TIFF*);
 -extern	TIFFSizeProc TIFFGetSizeProc(TIFF*);
 -extern	TIFFMapFileProc TIFFGetMapFileProc(TIFF*);
 -extern	TIFFUnmapFileProc TIFFGetUnmapFileProc(TIFF*);
 -extern	uint32 TIFFCurrentRow(TIFF*);
 -extern	tdir_t TIFFCurrentDirectory(TIFF*);
 -extern	tdir_t TIFFNumberOfDirectories(TIFF*);
 -extern	uint32 TIFFCurrentDirOffset(TIFF*);
 -extern	tstrip_t TIFFCurrentStrip(TIFF*);
 -extern	ttile_t TIFFCurrentTile(TIFF*);
 -extern	int TIFFReadBufferSetup(TIFF*, tdata_t, tsize_t);
 -extern	int TIFFWriteBufferSetup(TIFF*, tdata_t, tsize_t);
 -extern	int TIFFSetupStrips(TIFF *);
 -extern  int TIFFWriteCheck(TIFF*, int, const char *);
 -extern	void TIFFFreeDirectory(TIFF*);
 -extern  int TIFFCreateDirectory(TIFF*);
 -extern	int TIFFLastDirectory(TIFF*);
 -extern	int TIFFSetDirectory(TIFF*, tdir_t);
 -extern	int TIFFSetSubDirectory(TIFF*, uint32);
 -extern	int TIFFUnlinkDirectory(TIFF*, tdir_t);
 -extern	int TIFFSetField(TIFF*, ttag_t, ...);
 -extern	int TIFFVSetField(TIFF*, ttag_t, va_list);
 -extern	int TIFFWriteDirectory(TIFF *);
 -extern	int TIFFCheckpointDirectory(TIFF *);
 -extern	int TIFFRewriteDirectory(TIFF *);
 -extern	int TIFFReassignTagToIgnore(enum TIFFIgnoreSense, int);
 -
 -#if defined(c_plusplus) || defined(__cplusplus)
 -extern	void TIFFPrintDirectory(TIFF*, FILE*, long = 0);
 -extern	int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t = 0);
 -extern	int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t = 0);
 -extern	int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0);
 -extern	int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*,
 -				      int = ORIENTATION_BOTLEFT, int = 0);
 -#else
 -extern	void TIFFPrintDirectory(TIFF*, FILE*, long);
 -extern	int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t);
 -extern	int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t);
 -extern	int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int);
 -extern	int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, int, int);
 -#endif
 -
 -extern	int TIFFReadRGBAStrip(TIFF*, tstrip_t, uint32 * );
 -extern	int TIFFReadRGBATile(TIFF*, uint32, uint32, uint32 * );
 -extern	int TIFFRGBAImageOK(TIFF*, char [1024]);
 -extern	int TIFFRGBAImageBegin(TIFFRGBAImage*, TIFF*, int, char [1024]);
 -extern	int TIFFRGBAImageGet(TIFFRGBAImage*, uint32*, uint32, uint32);
 -extern	void TIFFRGBAImageEnd(TIFFRGBAImage*);
 -extern	TIFF* TIFFOpen(const char*, const char*);
 -# ifdef __WIN32__
 -extern	TIFF* TIFFOpenW(const wchar_t*, const char*);
 -# endif /* __WIN32__ */
 -extern	TIFF* TIFFFdOpen(int, const char*, const char*);
 -extern	TIFF* TIFFClientOpen(const char*, const char*,
 -	    thandle_t,
 -	    TIFFReadWriteProc, TIFFReadWriteProc,
 -	    TIFFSeekProc, TIFFCloseProc,
 -	    TIFFSizeProc,
 -	    TIFFMapFileProc, TIFFUnmapFileProc);
 -extern	const char* TIFFFileName(TIFF*);
 -extern	const char* TIFFSetFileName(TIFF*, const char *);
 -extern void TIFFError(const char*, const char*, ...) __attribute__((format (printf,2,3)));
 -extern void TIFFErrorExt(thandle_t, const char*, const char*, ...) __attribute__((format (printf,3,4)));
 -extern void TIFFWarning(const char*, const char*, ...) __attribute__((format (printf,2,3)));
 -extern void TIFFWarningExt(thandle_t, const char*, const char*, ...) __attribute__((format (printf,3,4)));
 -extern	TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler);
 -extern	TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt);
 -extern	TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler);
 -extern	TIFFErrorHandlerExt TIFFSetWarningHandlerExt(TIFFErrorHandlerExt);
 -extern	TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc);
 -extern	ttile_t TIFFComputeTile(TIFF*, uint32, uint32, uint32, tsample_t);
 -extern	int TIFFCheckTile(TIFF*, uint32, uint32, uint32, tsample_t);
 -extern	ttile_t TIFFNumberOfTiles(TIFF*);
 -extern	tsize_t TIFFReadTile(TIFF*,
 -	    tdata_t, uint32, uint32, uint32, tsample_t);
 -extern	tsize_t TIFFWriteTile(TIFF*,
 -	    tdata_t, uint32, uint32, uint32, tsample_t);
 -extern	tstrip_t TIFFComputeStrip(TIFF*, uint32, tsample_t);
 -extern	tstrip_t TIFFNumberOfStrips(TIFF*);
 -extern	tsize_t TIFFReadEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
 -extern	tsize_t TIFFReadRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
 -extern	tsize_t TIFFReadEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t);
 -extern	tsize_t TIFFReadRawTile(TIFF*, ttile_t, tdata_t, tsize_t);
 -extern	tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
 -extern	tsize_t TIFFWriteRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
 -extern	tsize_t TIFFWriteEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t);
 -extern	tsize_t TIFFWriteRawTile(TIFF*, ttile_t, tdata_t, tsize_t);
 -extern	int TIFFDataWidth(TIFFDataType);    /* table of tag datatype widths */
 -extern	void TIFFSetWriteOffset(TIFF*, toff_t);
 -extern	void TIFFSwabShort(uint16*);
 -extern	void TIFFSwabLong(uint32*);
 -extern	void TIFFSwabDouble(double*);
 -extern	void TIFFSwabArrayOfShort(uint16*, unsigned long);
 -extern	void TIFFSwabArrayOfTriples(uint8*, unsigned long);
 -extern	void TIFFSwabArrayOfLong(uint32*, unsigned long);
 -extern	void TIFFSwabArrayOfDouble(double*, unsigned long);
 -extern	void TIFFReverseBits(unsigned char *, unsigned long);
 -extern	const unsigned char* TIFFGetBitRevTable(int);
 -
 -#ifdef LOGLUV_PUBLIC
 -#define U_NEU		0.210526316
 -#define V_NEU		0.473684211
 -#define UVSCALE		410.
 -extern	double LogL16toY(int);
 -extern	double LogL10toY(int);
 -extern	void XYZtoRGB24(float*, uint8*);
 -extern	int uv_decode(double*, double*, int);
 -extern	void LogLuv24toXYZ(uint32, float*);
 -extern	void LogLuv32toXYZ(uint32, float*);
 -#if defined(c_plusplus) || defined(__cplusplus)
 -extern	int LogL16fromY(double, int = SGILOGENCODE_NODITHER);
 -extern	int LogL10fromY(double, int = SGILOGENCODE_NODITHER);
 -extern	int uv_encode(double, double, int = SGILOGENCODE_NODITHER);
 -extern	uint32 LogLuv24fromXYZ(float*, int = SGILOGENCODE_NODITHER);
 -extern	uint32 LogLuv32fromXYZ(float*, int = SGILOGENCODE_NODITHER);
 -#else
 -extern	int LogL16fromY(double, int);
 -extern	int LogL10fromY(double, int);
 -extern	int uv_encode(double, double, int);
 -extern	uint32 LogLuv24fromXYZ(float*, int);
 -extern	uint32 LogLuv32fromXYZ(float*, int);
 -#endif
 -#endif /* LOGLUV_PUBLIC */
 -    
 -extern int TIFFCIELabToRGBInit(TIFFCIELabToRGB*, TIFFDisplay *, float*);
 -extern void TIFFCIELabToXYZ(TIFFCIELabToRGB *, uint32, int32, int32,
 -			    float *, float *, float *);
 -extern void TIFFXYZToRGB(TIFFCIELabToRGB *, float, float, float,
 -			 uint32 *, uint32 *, uint32 *);
 -
 -extern int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB*, float*, float*);
 -extern void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *, uint32, int32, int32,
 -			   uint32 *, uint32 *, uint32 *);
 -
 -#if defined(c_plusplus) || defined(__cplusplus)
 -}
 -#endif
 -
 -#endif /* _TIFFIO_ */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tiffio.hxx b/plugins/FreeImage/Source/LibTIFF/tiffio.hxx deleted file mode 100644 index fc20d725d2..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tiffio.hxx +++ /dev/null @@ -1,49 +0,0 @@ -/* $Id: tiffio.hxx,v 1.32 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#ifndef _TIFFIO_HXX_
 -#define	_TIFFIO_HXX_
 -
 -/*
 - * TIFF I/O library definitions which provide C++ streams API.
 - */
 -
 -#include <iostream>
 -#include "tiff.h"
 -
 -extern	TIFF* TIFFStreamOpen(const char*, std::ostream *);
 -extern	TIFF* TIFFStreamOpen(const char*, std::istream *);
 -
 -#endif /* _TIFFIO_HXX_ */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c++
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tiffiop.h b/plugins/FreeImage/Source/LibTIFF/tiffiop.h deleted file mode 100644 index 1a64862810..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tiffiop.h +++ /dev/null @@ -1,353 +0,0 @@ -/* $Id: tiffiop.h,v 1.37 2011/04/10 17:14:09 drolon Exp $ */
 -
 -/*
 - * Copyright (c) 1988-1997 Sam Leffler
 - * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 - *
 - * Permission to use, copy, modify, distribute, and sell this software and 
 - * its documentation for any purpose is hereby granted without fee, provided
 - * that (i) the above copyright notices and this permission notice appear in
 - * all copies of the software and related documentation, and (ii) the names of
 - * Sam Leffler and Silicon Graphics may not be used in any advertising or
 - * publicity relating to the software without the specific, prior written
 - * permission of Sam Leffler and Silicon Graphics.
 - * 
 - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
 - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
 - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
 - * 
 - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
 - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
 - * OF THIS SOFTWARE.
 - */
 -
 -#ifndef _TIFFIOP_
 -#define	_TIFFIOP_
 -/*
 - * ``Library-private'' definitions.
 - */
 -
 -#include "tif_config.h"
 -
 -#ifdef HAVE_FCNTL_H
 -# include <fcntl.h>
 -#endif
 -
 -#ifdef HAVE_SYS_TYPES_H
 -# include <sys/types.h>
 -#endif
 -
 -#ifdef HAVE_STRING_H
 -# include <string.h>
 -#endif
 -
 -#ifdef HAVE_ASSERT_H
 -# include <assert.h>
 -#else
 -# define assert(x) 
 -#endif
 -
 -#ifdef HAVE_SEARCH_H
 -# include <search.h>
 -#else
 -extern void *lfind(const void *, const void *, size_t *, size_t,
 -		   int (*)(const void *, const void *));
 -#endif
 -
 -/*
 -  Libtiff itself does not require a 64-bit type, but bundled TIFF
 -  utilities may use it.  
 -*/
 -
 -#if !defined(__xlC__) && !defined(__xlc__) // Already defined there (#2301)
 -#define TIFF_INT64_T signed long long
 -#define TIFF_UINT64_T unsigned long long
 -#endif
 -
 -#include "tiffio.h"
 -#include "tif_dir.h"
 -
 -#ifndef STRIP_SIZE_DEFAULT
 -# define STRIP_SIZE_DEFAULT 8192
 -#endif
 -
 -#define    streq(a,b)      (strcmp(a,b) == 0)
 -
 -#ifndef TRUE
 -#define	TRUE	1
 -#define	FALSE	0
 -#endif
 -
 -typedef struct client_info {
 -    struct client_info *next;
 -    void      *data;
 -    char      *name;
 -} TIFFClientInfoLink;
 -
 -/*
 - * Typedefs for ``method pointers'' used internally.
 - */
 -typedef	unsigned char tidataval_t;	/* internal image data value type */
 -typedef	tidataval_t* tidata_t;		/* reference to internal image data */
 -
 -typedef	void (*TIFFVoidMethod)(TIFF*);
 -typedef	int (*TIFFBoolMethod)(TIFF*);
 -typedef	int (*TIFFPreMethod)(TIFF*, tsample_t);
 -typedef	int (*TIFFCodeMethod)(TIFF*, tidata_t, tsize_t, tsample_t);
 -typedef	int (*TIFFSeekMethod)(TIFF*, uint32);
 -typedef	void (*TIFFPostMethod)(TIFF*, tidata_t, tsize_t);
 -typedef	uint32 (*TIFFStripMethod)(TIFF*, uint32);
 -typedef	void (*TIFFTileMethod)(TIFF*, uint32*, uint32*);
 -
 -struct tiff {
 -	char*		tif_name;	/* name of open file */
 -	int		tif_fd;		/* open file descriptor */
 -	int		tif_mode;	/* open mode (O_*) */
 -	uint32		tif_flags;
 -#define	TIFF_FILLORDER		0x00003	/* natural bit fill order for machine */
 -#define	TIFF_DIRTYHEADER	0x00004	/* header must be written on close */
 -#define	TIFF_DIRTYDIRECT	0x00008	/* current directory must be written */
 -#define	TIFF_BUFFERSETUP	0x00010	/* data buffers setup */
 -#define	TIFF_CODERSETUP		0x00020	/* encoder/decoder setup done */
 -#define	TIFF_BEENWRITING	0x00040	/* written 1+ scanlines to file */
 -#define	TIFF_SWAB		0x00080	/* byte swap file information */
 -#define	TIFF_NOBITREV		0x00100	/* inhibit bit reversal logic */
 -#define	TIFF_MYBUFFER		0x00200	/* my raw data buffer; free on close */
 -#define	TIFF_ISTILED		0x00400	/* file is tile, not strip- based */
 -#define	TIFF_MAPPED		0x00800	/* file is mapped into memory */
 -#define	TIFF_POSTENCODE		0x01000	/* need call to postencode routine */
 -#define	TIFF_INSUBIFD		0x02000	/* currently writing a subifd */
 -#define	TIFF_UPSAMPLED		0x04000	/* library is doing data up-sampling */ 
 -#define	TIFF_STRIPCHOP		0x08000	/* enable strip chopping support */
 -#define	TIFF_HEADERONLY		0x10000	/* read header only, do not process */
 -					/* the first directory */
 -#define TIFF_NOREADRAW		0x20000 /* skip reading of raw uncompressed */
 -					/* image data */
 -#define	TIFF_INCUSTOMIFD	0x40000	/* currently writing a custom IFD */
 -	toff_t		tif_diroff;	/* file offset of current directory */
 -	toff_t		tif_nextdiroff;	/* file offset of following directory */
 -	toff_t*		tif_dirlist;	/* list of offsets to already seen */
 -					/* directories to prevent IFD looping */
 -	tsize_t		tif_dirlistsize;/* number of entires in offset list */
 -	uint16		tif_dirnumber;  /* number of already seen directories */
 -	TIFFDirectory	tif_dir;	/* internal rep of current directory */
 -	TIFFDirectory	tif_customdir;	/* custom IFDs are separated from
 -					   the main ones */
 -	TIFFHeader	tif_header;	/* file's header block */
 -	const int*	tif_typeshift;	/* data type shift counts */
 -	const long*	tif_typemask;	/* data type masks */
 -	uint32		tif_row;	/* current scanline */
 -	tdir_t		tif_curdir;	/* current directory (index) */
 -	tstrip_t	tif_curstrip;	/* current strip for read/write */
 -	toff_t		tif_curoff;	/* current offset for read/write */
 -	toff_t		tif_dataoff;	/* current offset for writing dir */
 -/* SubIFD support */
 -	uint16		tif_nsubifd;	/* remaining subifds to write */
 -	toff_t		tif_subifdoff;	/* offset for patching SubIFD link */
 -/* tiling support */
 -	uint32 		tif_col;	/* current column (offset by row too) */
 -	ttile_t		tif_curtile;	/* current tile for read/write */
 -	tsize_t		tif_tilesize;	/* # of bytes in a tile */
 -/* compression scheme hooks */
 -	int		tif_decodestatus;
 -	TIFFBoolMethod	tif_setupdecode;/* called once before predecode */
 -	TIFFPreMethod	tif_predecode;	/* pre- row/strip/tile decoding */
 -	TIFFBoolMethod	tif_setupencode;/* called once before preencode */
 -	int		tif_encodestatus;
 -	TIFFPreMethod	tif_preencode;	/* pre- row/strip/tile encoding */
 -	TIFFBoolMethod	tif_postencode;	/* post- row/strip/tile encoding */
 -	TIFFCodeMethod	tif_decoderow;	/* scanline decoding routine */
 -	TIFFCodeMethod	tif_encoderow;	/* scanline encoding routine */
 -	TIFFCodeMethod	tif_decodestrip;/* strip decoding routine */
 -	TIFFCodeMethod	tif_encodestrip;/* strip encoding routine */
 -	TIFFCodeMethod	tif_decodetile;	/* tile decoding routine */
 -	TIFFCodeMethod	tif_encodetile;	/* tile encoding routine */
 -	TIFFVoidMethod	tif_close;	/* cleanup-on-close routine */
 -	TIFFSeekMethod	tif_seek;	/* position within a strip routine */
 -	TIFFVoidMethod	tif_cleanup;	/* cleanup state routine */
 -	TIFFStripMethod	tif_defstripsize;/* calculate/constrain strip size */
 -	TIFFTileMethod	tif_deftilesize;/* calculate/constrain tile size */
 -	tidata_t	tif_data;	/* compression scheme private data */
 -/* input/output buffering */
 -	tsize_t		tif_scanlinesize;/* # of bytes in a scanline */
 -	tsize_t		tif_scanlineskew;/* scanline skew for reading strips */
 -	tidata_t	tif_rawdata;	/* raw data buffer */
 -	tsize_t		tif_rawdatasize;/* # of bytes in raw data buffer */
 -	tidata_t	tif_rawcp;	/* current spot in raw buffer */
 -	tsize_t		tif_rawcc;	/* bytes unread from raw buffer */
 -/* memory-mapped file support */
 -	tidata_t	tif_base;	/* base of mapped file */
 -	toff_t		tif_size;	/* size of mapped file region (bytes)
 -					   FIXME: it should be tsize_t */
 -	TIFFMapFileProc	tif_mapproc;	/* map file method */
 -	TIFFUnmapFileProc tif_unmapproc;/* unmap file method */
 -/* input/output callback methods */
 -	thandle_t	tif_clientdata;	/* callback parameter */
 -	TIFFReadWriteProc tif_readproc;	/* read method */
 -	TIFFReadWriteProc tif_writeproc;/* write method */
 -	TIFFSeekProc	tif_seekproc;	/* lseek method */
 -	TIFFCloseProc	tif_closeproc;	/* close method */
 -	TIFFSizeProc	tif_sizeproc;	/* filesize method */
 -/* post-decoding support */
 -	TIFFPostMethod	tif_postdecode;	/* post decoding routine */
 -/* tag support */
 -	TIFFFieldInfo**	tif_fieldinfo;	/* sorted table of registered tags */
 -	size_t		tif_nfields;	/* # entries in registered tag table */
 -	const TIFFFieldInfo *tif_foundfield;/* cached pointer to already found tag */
 -        TIFFTagMethods  tif_tagmethods; /* tag get/set/print routines */
 -        TIFFClientInfoLink *tif_clientinfo; /* extra client information. */
 -};
 -
 -#define	isPseudoTag(t)	(t > 0xffff)	/* is tag value normal or pseudo */
 -
 -#define	isTiled(tif)	(((tif)->tif_flags & TIFF_ISTILED) != 0)
 -#define	isMapped(tif)	(((tif)->tif_flags & TIFF_MAPPED) != 0)
 -#define	isFillOrder(tif, o)	(((tif)->tif_flags & (o)) != 0)
 -#define	isUpSampled(tif)	(((tif)->tif_flags & TIFF_UPSAMPLED) != 0)
 -#define	TIFFReadFile(tif, buf, size) \
 -	((*(tif)->tif_readproc)((tif)->tif_clientdata,buf,size))
 -#define	TIFFWriteFile(tif, buf, size) \
 -	((*(tif)->tif_writeproc)((tif)->tif_clientdata,buf,size))
 -#define	TIFFSeekFile(tif, off, whence) \
 -	((*(tif)->tif_seekproc)((tif)->tif_clientdata,(toff_t)(off),whence))
 -#define	TIFFCloseFile(tif) \
 -	((*(tif)->tif_closeproc)((tif)->tif_clientdata))
 -#define	TIFFGetFileSize(tif) \
 -	((*(tif)->tif_sizeproc)((tif)->tif_clientdata))
 -#define	TIFFMapFileContents(tif, paddr, psize) \
 -	((*(tif)->tif_mapproc)((tif)->tif_clientdata,paddr,psize))
 -#define	TIFFUnmapFileContents(tif, addr, size) \
 -	((*(tif)->tif_unmapproc)((tif)->tif_clientdata,addr,size))
 -
 -/*
 - * Default Read/Seek/Write definitions.
 - */
 -#ifndef ReadOK
 -#define	ReadOK(tif, buf, size) \
 -	(TIFFReadFile(tif, (tdata_t) buf, (tsize_t)(size)) == (tsize_t)(size))
 -#endif
 -#ifndef SeekOK
 -#define	SeekOK(tif, off) \
 -	(TIFFSeekFile(tif, (toff_t) off, SEEK_SET) == (toff_t) off)
 -#endif
 -#ifndef WriteOK
 -#define	WriteOK(tif, buf, size) \
 -	(TIFFWriteFile(tif, (tdata_t) buf, (tsize_t) size) == (tsize_t) size)
 -#endif
 -
 -/* NB: the uint32 casts are to silence certain ANSI-C compilers */
 -#define TIFFhowmany(x, y) (((uint32)x < (0xffffffff - (uint32)(y-1))) ?	\
 -			   ((((uint32)(x))+(((uint32)(y))-1))/((uint32)(y))) : \
 -			   0U)
 -#define TIFFhowmany8(x) (((x)&0x07)?((uint32)(x)>>3)+1:(uint32)(x)>>3)
 -#define	TIFFroundup(x, y) (TIFFhowmany(x,y)*(y))
 -
 -/* Safe multiply which returns zero if there is an integer overflow */
 -#define TIFFSafeMultiply(t,v,m) ((((t)m != (t)0) && (((t)((v*m)/m)) == (t)v)) ? (t)(v*m) : (t)0)
 -
 -#define TIFFmax(A,B) ((A)>(B)?(A):(B))
 -#define TIFFmin(A,B) ((A)<(B)?(A):(B))
 -
 -#define TIFFArrayCount(a) (sizeof (a) / sizeof ((a)[0]))
 -
 -#if defined(__cplusplus)
 -extern "C" {
 -#endif
 -extern	int _TIFFgetMode(const char*, const char*);
 -extern	int _TIFFNoRowEncode(TIFF*, tidata_t, tsize_t, tsample_t);
 -extern	int _TIFFNoStripEncode(TIFF*, tidata_t, tsize_t, tsample_t);
 -extern	int _TIFFNoTileEncode(TIFF*, tidata_t, tsize_t, tsample_t);
 -extern	int _TIFFNoRowDecode(TIFF*, tidata_t, tsize_t, tsample_t);
 -extern	int _TIFFNoStripDecode(TIFF*, tidata_t, tsize_t, tsample_t);
 -extern	int _TIFFNoTileDecode(TIFF*, tidata_t, tsize_t, tsample_t);
 -extern	void _TIFFNoPostDecode(TIFF*, tidata_t, tsize_t);
 -extern  int  _TIFFNoPreCode (TIFF*, tsample_t); 
 -extern	int _TIFFNoSeek(TIFF*, uint32);
 -extern	void _TIFFSwab16BitData(TIFF*, tidata_t, tsize_t);
 -extern	void _TIFFSwab24BitData(TIFF*, tidata_t, tsize_t);
 -extern	void _TIFFSwab32BitData(TIFF*, tidata_t, tsize_t);
 -extern	void _TIFFSwab64BitData(TIFF*, tidata_t, tsize_t);
 -extern	int TIFFFlushData1(TIFF*);
 -extern	int TIFFDefaultDirectory(TIFF*);
 -extern	void _TIFFSetDefaultCompressionState(TIFF*);
 -extern	int TIFFSetCompressionScheme(TIFF*, int);
 -extern	int TIFFSetDefaultCompressionState(TIFF*);
 -extern	uint32 _TIFFDefaultStripSize(TIFF*, uint32);
 -extern	void _TIFFDefaultTileSize(TIFF*, uint32*, uint32*);
 -extern	int _TIFFDataSize(TIFFDataType);
 -
 -extern	void _TIFFsetByteArray(void**, void*, uint32);
 -extern	void _TIFFsetString(char**, char*);
 -extern	void _TIFFsetShortArray(uint16**, uint16*, uint32);
 -extern	void _TIFFsetLongArray(uint32**, uint32*, uint32);
 -extern	void _TIFFsetFloatArray(float**, float*, uint32);
 -extern	void _TIFFsetDoubleArray(double**, double*, uint32);
 -
 -extern	void _TIFFprintAscii(FILE*, const char*);
 -extern	void _TIFFprintAsciiTag(FILE*, const char*, const char*);
 -
 -extern	TIFFErrorHandler _TIFFwarningHandler;
 -extern	TIFFErrorHandler _TIFFerrorHandler;
 -extern	TIFFErrorHandlerExt _TIFFwarningHandlerExt;
 -extern	TIFFErrorHandlerExt _TIFFerrorHandlerExt;
 -
 -extern	tdata_t _TIFFCheckMalloc(TIFF*, size_t, size_t, const char*);
 -extern	tdata_t _TIFFCheckRealloc(TIFF*, tdata_t, size_t, size_t, const char*);
 -
 -extern	int TIFFInitDumpMode(TIFF*, int);
 -#ifdef PACKBITS_SUPPORT
 -extern	int TIFFInitPackBits(TIFF*, int);
 -#endif
 -#ifdef CCITT_SUPPORT
 -extern	int TIFFInitCCITTRLE(TIFF*, int), TIFFInitCCITTRLEW(TIFF*, int);
 -extern	int TIFFInitCCITTFax3(TIFF*, int), TIFFInitCCITTFax4(TIFF*, int);
 -#endif
 -#ifdef THUNDER_SUPPORT
 -extern	int TIFFInitThunderScan(TIFF*, int);
 -#endif
 -#ifdef NEXT_SUPPORT
 -extern	int TIFFInitNeXT(TIFF*, int);
 -#endif
 -#ifdef LZW_SUPPORT
 -extern	int TIFFInitLZW(TIFF*, int);
 -#endif
 -#ifdef OJPEG_SUPPORT
 -extern	int TIFFInitOJPEG(TIFF*, int);
 -#endif
 -#ifdef JPEG_SUPPORT
 -extern	int TIFFInitJPEG(TIFF*, int);
 -#endif
 -#ifdef JBIG_SUPPORT
 -extern	int TIFFInitJBIG(TIFF*, int);
 -#endif
 -#ifdef ZIP_SUPPORT
 -extern	int TIFFInitZIP(TIFF*, int);
 -#endif
 -#ifdef PIXARLOG_SUPPORT
 -extern	int TIFFInitPixarLog(TIFF*, int);
 -#endif
 -#ifdef LOGLUV_SUPPORT
 -extern	int TIFFInitSGILog(TIFF*, int);
 -#endif
 -#ifdef VMS
 -extern	const TIFFCodec _TIFFBuiltinCODECS[];
 -#else
 -extern	TIFFCodec _TIFFBuiltinCODECS[];
 -#endif
 -
 -#if defined(__cplusplus)
 -}
 -#endif
 -#endif /* _TIFFIOP_ */
 -
 -/* vim: set ts=8 sts=8 sw=8 noet: */
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
 diff --git a/plugins/FreeImage/Source/LibTIFF/tiffvers.h b/plugins/FreeImage/Source/LibTIFF/tiffvers.h deleted file mode 100644 index 594702b566..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/tiffvers.h +++ /dev/null @@ -1,9 +0,0 @@ -#define TIFFLIB_VERSION_STR "LIBTIFF, Version 3.9.5\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc."
 -/*
 - * This define can be used in code that requires
 - * compilation-related definitions specific to a
 - * version or versions of the library.  Runtime
 - * version checking should be done based on the
 - * string returned by TIFFGetVersion.
 - */
 -#define TIFFLIB_VERSION 20110409
 diff --git a/plugins/FreeImage/Source/LibTIFF/uvcode.h b/plugins/FreeImage/Source/LibTIFF/uvcode.h deleted file mode 100644 index 8f22325703..0000000000 --- a/plugins/FreeImage/Source/LibTIFF/uvcode.h +++ /dev/null @@ -1,180 +0,0 @@ -/* Version 1.0 generated April 7, 1997 by Greg Ward Larson, SGI */
 -#define UV_SQSIZ	(float)0.003500
 -#define UV_NDIVS	16289
 -#define UV_VSTART	(float)0.016940
 -#define UV_NVS		163
 -static struct {
 -	float	ustart;
 -	short	nus, ncum;
 -}	uv_row[UV_NVS] = {
 -	{ (float)0.247663,	4,	0 },
 -	{ (float)0.243779,	6,	4 },
 -	{ (float)0.241684,	7,	10 },
 -	{ (float)0.237874,	9,	17 },
 -	{ (float)0.235906,	10,	26 },
 -	{ (float)0.232153,	12,	36 },
 -	{ (float)0.228352,	14,	48 },
 -	{ (float)0.226259,	15,	62 },
 -	{ (float)0.222371,	17,	77 },
 -	{ (float)0.220410,	18,	94 },
 -	{ (float)0.214710,	21,	112 },
 -	{ (float)0.212714,	22,	133 },
 -	{ (float)0.210721,	23,	155 },
 -	{ (float)0.204976,	26,	178 },
 -	{ (float)0.202986,	27,	204 },
 -	{ (float)0.199245,	29,	231 },
 -	{ (float)0.195525,	31,	260 },
 -	{ (float)0.193560,	32,	291 },
 -	{ (float)0.189878,	34,	323 },
 -	{ (float)0.186216,	36,	357 },
 -	{ (float)0.186216,	36,	393 },
 -	{ (float)0.182592,	38,	429 },
 -	{ (float)0.179003,	40,	467 },
 -	{ (float)0.175466,	42,	507 },
 -	{ (float)0.172001,	44,	549 },
 -	{ (float)0.172001,	44,	593 },
 -	{ (float)0.168612,	46,	637 },
 -	{ (float)0.168612,	46,	683 },
 -	{ (float)0.163575,	49,	729 },
 -	{ (float)0.158642,	52,	778 },
 -	{ (float)0.158642,	52,	830 },
 -	{ (float)0.158642,	52,	882 },
 -	{ (float)0.153815,	55,	934 },
 -	{ (float)0.153815,	55,	989 },
 -	{ (float)0.149097,	58,	1044 },
 -	{ (float)0.149097,	58,	1102 },
 -	{ (float)0.142746,	62,	1160 },
 -	{ (float)0.142746,	62,	1222 },
 -	{ (float)0.142746,	62,	1284 },
 -	{ (float)0.138270,	65,	1346 },
 -	{ (float)0.138270,	65,	1411 },
 -	{ (float)0.138270,	65,	1476 },
 -	{ (float)0.132166,	69,	1541 },
 -	{ (float)0.132166,	69,	1610 },
 -	{ (float)0.126204,	73,	1679 },
 -	{ (float)0.126204,	73,	1752 },
 -	{ (float)0.126204,	73,	1825 },
 -	{ (float)0.120381,	77,	1898 },
 -	{ (float)0.120381,	77,	1975 },
 -	{ (float)0.120381,	77,	2052 },
 -	{ (float)0.120381,	77,	2129 },
 -	{ (float)0.112962,	82,	2206 },
 -	{ (float)0.112962,	82,	2288 },
 -	{ (float)0.112962,	82,	2370 },
 -	{ (float)0.107450,	86,	2452 },
 -	{ (float)0.107450,	86,	2538 },
 -	{ (float)0.107450,	86,	2624 },
 -	{ (float)0.107450,	86,	2710 },
 -	{ (float)0.100343,	91,	2796 },
 -	{ (float)0.100343,	91,	2887 },
 -	{ (float)0.100343,	91,	2978 },
 -	{ (float)0.095126,	95,	3069 },
 -	{ (float)0.095126,	95,	3164 },
 -	{ (float)0.095126,	95,	3259 },
 -	{ (float)0.095126,	95,	3354 },
 -	{ (float)0.088276,	100,	3449 },
 -	{ (float)0.088276,	100,	3549 },
 -	{ (float)0.088276,	100,	3649 },
 -	{ (float)0.088276,	100,	3749 },
 -	{ (float)0.081523,	105,	3849 },
 -	{ (float)0.081523,	105,	3954 },
 -	{ (float)0.081523,	105,	4059 },
 -	{ (float)0.081523,	105,	4164 },
 -	{ (float)0.074861,	110,	4269 },
 -	{ (float)0.074861,	110,	4379 },
 -	{ (float)0.074861,	110,	4489 },
 -	{ (float)0.074861,	110,	4599 },
 -	{ (float)0.068290,	115,	4709 },
 -	{ (float)0.068290,	115,	4824 },
 -	{ (float)0.068290,	115,	4939 },
 -	{ (float)0.068290,	115,	5054 },
 -	{ (float)0.063573,	119,	5169 },
 -	{ (float)0.063573,	119,	5288 },
 -	{ (float)0.063573,	119,	5407 },
 -	{ (float)0.063573,	119,	5526 },
 -	{ (float)0.057219,	124,	5645 },
 -	{ (float)0.057219,	124,	5769 },
 -	{ (float)0.057219,	124,	5893 },
 -	{ (float)0.057219,	124,	6017 },
 -	{ (float)0.050985,	129,	6141 },
 -	{ (float)0.050985,	129,	6270 },
 -	{ (float)0.050985,	129,	6399 },
 -	{ (float)0.050985,	129,	6528 },
 -	{ (float)0.050985,	129,	6657 },
 -	{ (float)0.044859,	134,	6786 },
 -	{ (float)0.044859,	134,	6920 },
 -	{ (float)0.044859,	134,	7054 },
 -	{ (float)0.044859,	134,	7188 },
 -	{ (float)0.040571,	138,	7322 },
 -	{ (float)0.040571,	138,	7460 },
 -	{ (float)0.040571,	138,	7598 },
 -	{ (float)0.040571,	138,	7736 },
 -	{ (float)0.036339,	142,	7874 },
 -	{ (float)0.036339,	142,	8016 },
 -	{ (float)0.036339,	142,	8158 },
 -	{ (float)0.036339,	142,	8300 },
 -	{ (float)0.032139,	146,	8442 },
 -	{ (float)0.032139,	146,	8588 },
 -	{ (float)0.032139,	146,	8734 },
 -	{ (float)0.032139,	146,	8880 },
 -	{ (float)0.027947,	150,	9026 },
 -	{ (float)0.027947,	150,	9176 },
 -	{ (float)0.027947,	150,	9326 },
 -	{ (float)0.023739,	154,	9476 },
 -	{ (float)0.023739,	154,	9630 },
 -	{ (float)0.023739,	154,	9784 },
 -	{ (float)0.023739,	154,	9938 },
 -	{ (float)0.019504,	158,	10092 },
 -	{ (float)0.019504,	158,	10250 },
 -	{ (float)0.019504,	158,	10408 },
 -	{ (float)0.016976,	161,	10566 },
 -	{ (float)0.016976,	161,	10727 },
 -	{ (float)0.016976,	161,	10888 },
 -	{ (float)0.016976,	161,	11049 },
 -	{ (float)0.012639,	165,	11210 },
 -	{ (float)0.012639,	165,	11375 },
 -	{ (float)0.012639,	165,	11540 },
 -	{ (float)0.009991,	168,	11705 },
 -	{ (float)0.009991,	168,	11873 },
 -	{ (float)0.009991,	168,	12041 },
 -	{ (float)0.009016,	170,	12209 },
 -	{ (float)0.009016,	170,	12379 },
 -	{ (float)0.009016,	170,	12549 },
 -	{ (float)0.006217,	173,	12719 },
 -	{ (float)0.006217,	173,	12892 },
 -	{ (float)0.005097,	175,	13065 },
 -	{ (float)0.005097,	175,	13240 },
 -	{ (float)0.005097,	175,	13415 },
 -	{ (float)0.003909,	177,	13590 },
 -	{ (float)0.003909,	177,	13767 },
 -	{ (float)0.002340,	177,	13944 },
 -	{ (float)0.002389,	170,	14121 },
 -	{ (float)0.001068,	164,	14291 },
 -	{ (float)0.001653,	157,	14455 },
 -	{ (float)0.000717,	150,	14612 },
 -	{ (float)0.001614,	143,	14762 },
 -	{ (float)0.000270,	136,	14905 },
 -	{ (float)0.000484,	129,	15041 },
 -	{ (float)0.001103,	123,	15170 },
 -	{ (float)0.001242,	115,	15293 },
 -	{ (float)0.001188,	109,	15408 },
 -	{ (float)0.001011,	103,	15517 },
 -	{ (float)0.000709,	97,	15620 },
 -	{ (float)0.000301,	89,	15717 },
 -	{ (float)0.002416,	82,	15806 },
 -	{ (float)0.003251,	76,	15888 },
 -	{ (float)0.003246,	69,	15964 },
 -	{ (float)0.004141,	62,	16033 },
 -	{ (float)0.005963,	55,	16095 },
 -	{ (float)0.008839,	47,	16150 },
 -	{ (float)0.010490,	40,	16197 },
 -	{ (float)0.016994,	31,	16237 },
 -	{ (float)0.023659,	21,	16268 },
 -};
 -/*
 - * Local Variables:
 - * mode: c
 - * c-basic-offset: 8
 - * fill-column: 78
 - * End:
 - */
  | 
