Blame tools/tiffinfo.c

Packit 7838c8
/* $Id: tiffinfo.c,v 1.26 2016-12-03 14:18:49 erouault Exp $ */
Packit 7838c8
Packit 7838c8
/*
Packit 7838c8
 * Copyright (c) 1988-1997 Sam Leffler
Packit 7838c8
 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
Packit 7838c8
 *
Packit 7838c8
 * Permission to use, copy, modify, distribute, and sell this software and 
Packit 7838c8
 * its documentation for any purpose is hereby granted without fee, provided
Packit 7838c8
 * that (i) the above copyright notices and this permission notice appear in
Packit 7838c8
 * all copies of the software and related documentation, and (ii) the names of
Packit 7838c8
 * Sam Leffler and Silicon Graphics may not be used in any advertising or
Packit 7838c8
 * publicity relating to the software without the specific, prior written
Packit 7838c8
 * permission of Sam Leffler and Silicon Graphics.
Packit 7838c8
 * 
Packit 7838c8
 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
Packit 7838c8
 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
Packit 7838c8
 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
Packit 7838c8
 * 
Packit 7838c8
 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
Packit 7838c8
 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
Packit 7838c8
 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
Packit 7838c8
 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
Packit 7838c8
 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
Packit 7838c8
 * OF THIS SOFTWARE.
Packit 7838c8
 */
Packit 7838c8
Packit 7838c8
#include "tif_config.h"
Packit 7838c8
Packit 7838c8
#include <stdio.h>
Packit 7838c8
#include <stdlib.h>
Packit 7838c8
#include <string.h>
Packit 7838c8
Packit 7838c8
#ifdef HAVE_STRINGS_H
Packit 7838c8
# include <strings.h>
Packit 7838c8
#endif
Packit 7838c8
Packit 7838c8
#ifdef HAVE_UNISTD_H
Packit 7838c8
# include <unistd.h>
Packit 7838c8
#endif
Packit 7838c8
Packit 7838c8
#ifdef NEED_LIBPORT
Packit 7838c8
# include "libport.h"
Packit 7838c8
#endif
Packit 7838c8
Packit 7838c8
#include "tiffiop.h"
Packit 7838c8
Packit 7838c8
static TIFFErrorHandler old_error_handler = 0;
Packit 7838c8
static int status = 0;                  /* exit status */
Packit 7838c8
static int showdata = 0;		/* show data */
Packit 7838c8
static int rawdata = 0;			/* show raw/decoded data */
Packit 7838c8
static int showwords = 0;		/* show data as bytes/words */
Packit 7838c8
static int readdata = 0;		/* read data in file */
Packit 7838c8
static int stoponerr = 1;		/* stop on first read error */
Packit 7838c8
Packit 7838c8
static	void usage(void);
Packit 7838c8
static	void tiffinfo(TIFF*, uint16, long, int);
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
PrivateErrorHandler(const char* module, const char* fmt, va_list ap)
Packit 7838c8
{
Packit 7838c8
        if (old_error_handler)
Packit 7838c8
                (*old_error_handler)(module,fmt,ap);
Packit 7838c8
	status = 1;
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
int
Packit 7838c8
main(int argc, char* argv[])
Packit 7838c8
{
Packit 7838c8
	int dirnum = -1, multiplefiles, c;
Packit 7838c8
	uint16 order = 0;
Packit 7838c8
	TIFF* tif;
Packit 7838c8
#if !HAVE_DECL_OPTARG
Packit 7838c8
	extern int optind;
Packit 7838c8
	extern char* optarg;
Packit 7838c8
#endif
Packit 7838c8
	long flags = 0;
Packit 7838c8
	uint64 diroff = 0;
Packit 7838c8
	int chopstrips = 0;		/* disable strip chopping */
Packit 7838c8
Packit 7838c8
	while ((c = getopt(argc, argv, "f:o:cdDSjilmrsvwz0123456789")) != -1)
Packit 7838c8
		switch (c) {
Packit 7838c8
		case '0': case '1': case '2': case '3':
Packit 7838c8
		case '4': case '5': case '6': case '7':
Packit 7838c8
		case '8': case '9':
Packit 7838c8
			dirnum = atoi(&argv[optind-1][1]);
Packit 7838c8
			break;
Packit 7838c8
		case 'd':
Packit 7838c8
			showdata++;
Packit 7838c8
			/* fall thru... */
Packit 7838c8
		case 'D':
Packit 7838c8
			readdata++;
Packit 7838c8
			break;
Packit 7838c8
		case 'c':
Packit 7838c8
			flags |= TIFFPRINT_COLORMAP | TIFFPRINT_CURVES;
Packit 7838c8
			break;
Packit 7838c8
		case 'f':		/* fill order */
Packit 7838c8
			if (streq(optarg, "lsb2msb"))
Packit 7838c8
				order = FILLORDER_LSB2MSB;
Packit 7838c8
			else if (streq(optarg, "msb2lsb"))
Packit 7838c8
				order = FILLORDER_MSB2LSB;
Packit 7838c8
			else
Packit 7838c8
				usage();
Packit 7838c8
			break;
Packit 7838c8
		case 'i':
Packit 7838c8
			stoponerr = 0;
Packit 7838c8
			break;
Packit 7838c8
		case 'o':
Packit 7838c8
			diroff = strtoul(optarg, NULL, 0);
Packit 7838c8
			break;
Packit 7838c8
		case 'j':
Packit 7838c8
			flags |= TIFFPRINT_JPEGQTABLES |
Packit 7838c8
				 TIFFPRINT_JPEGACTABLES |
Packit 7838c8
				 TIFFPRINT_JPEGDCTABLES;
Packit 7838c8
			break;
Packit 7838c8
		case 'r':
Packit 7838c8
			rawdata = 1;
Packit 7838c8
			break;
Packit 7838c8
		case 's':
Packit 7838c8
			flags |= TIFFPRINT_STRIPS;
Packit 7838c8
			break;
Packit 7838c8
		case 'w':
Packit 7838c8
			showwords = 1;
Packit 7838c8
			break;
Packit 7838c8
		case 'z':
Packit 7838c8
			chopstrips = 1;
Packit 7838c8
			break;
Packit 7838c8
		case '?':
Packit 7838c8
			usage();
Packit 7838c8
			/*NOTREACHED*/
Packit 7838c8
		}
Packit 7838c8
	if (optind >= argc)
Packit 7838c8
		usage();
Packit 7838c8
Packit 7838c8
	old_error_handler = TIFFSetErrorHandler(PrivateErrorHandler);
Packit 7838c8
Packit 7838c8
	multiplefiles = (argc - optind > 1);
Packit 7838c8
	for (; optind < argc; optind++) {
Packit 7838c8
		if (multiplefiles)
Packit 7838c8
			printf("%s:\n", argv[optind]);
Packit 7838c8
		tif = TIFFOpen(argv[optind], chopstrips ? "rC" : "rc");
Packit 7838c8
		if (tif != NULL) {
Packit 7838c8
			if (dirnum != -1) {
Packit 7838c8
				if (TIFFSetDirectory(tif, (tdir_t) dirnum))
Packit 7838c8
					tiffinfo(tif, order, flags, 1);
Packit 7838c8
			} else if (diroff != 0) {
Packit 7838c8
				if (TIFFSetSubDirectory(tif, diroff))
Packit 7838c8
					tiffinfo(tif, order, flags, 1);
Packit 7838c8
			} else {
Packit 7838c8
				do {
Packit 7838c8
					toff_t offset=0;
Packit 7838c8
Packit 7838c8
					tiffinfo(tif, order, flags, 1);
Packit 7838c8
					if (TIFFGetField(tif, TIFFTAG_EXIFIFD,
Packit 7838c8
							 &offset)) {
Packit 7838c8
						if (TIFFReadEXIFDirectory(tif, offset)) {
Packit 7838c8
							tiffinfo(tif, order, flags, 0);
Packit 7838c8
						}
Packit 7838c8
					}
Packit 7838c8
				} while (TIFFReadDirectory(tif));
Packit 7838c8
			}
Packit 7838c8
			TIFFClose(tif);
Packit 7838c8
		}
Packit 7838c8
	}
Packit 7838c8
	return (status);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
char* stuff[] = {
Packit 7838c8
"usage: tiffinfo [options] input...",
Packit 7838c8
"where options are:",
Packit 7838c8
" -D		read data",
Packit 7838c8
" -i		ignore read errors",
Packit 7838c8
" -c		display data for grey/color response curve or colormap",
Packit 7838c8
" -d		display raw/decoded image data",
Packit 7838c8
" -f lsb2msb	force lsb-to-msb FillOrder for input",
Packit 7838c8
" -f msb2lsb	force msb-to-lsb FillOrder for input",
Packit 7838c8
" -j		show JPEG tables",
Packit 7838c8
" -o offset	set initial directory offset",
Packit 7838c8
" -r		read/display raw image data instead of decoded data",
Packit 7838c8
" -s		display strip offsets and byte counts",
Packit 7838c8
" -w		display raw data in words rather than bytes",
Packit 7838c8
" -z		enable strip chopping",
Packit 7838c8
" -#		set initial directory (first directory is # 0)",
Packit 7838c8
NULL
Packit 7838c8
};
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
usage(void)
Packit 7838c8
{
Packit 7838c8
	char buf[BUFSIZ];
Packit 7838c8
	int i;
Packit 7838c8
Packit 7838c8
	setbuf(stderr, buf);
Packit 7838c8
        fprintf(stderr, "%s\n\n", TIFFGetVersion());
Packit 7838c8
	for (i = 0; stuff[i] != NULL; i++)
Packit 7838c8
		fprintf(stderr, "%s\n", stuff[i]);
Packit 7838c8
	exit(-1);
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
ShowStrip(tstrip_t strip, unsigned char* pp, uint32 nrow, tsize_t scanline)
Packit 7838c8
{
Packit 7838c8
	register tsize_t cc;
Packit 7838c8
Packit 7838c8
	printf("Strip %lu:\n", (unsigned long) strip);
Packit 7838c8
	while (nrow-- > 0) {
Packit 7838c8
		for (cc = 0; cc < scanline; cc++) {
Packit 7838c8
			printf(" %02x", *pp++);
Packit 7838c8
			if (((cc+1) % 24) == 0)
Packit 7838c8
				putchar('\n');
Packit 7838c8
		}
Packit 7838c8
		putchar('\n');
Packit 7838c8
	}
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void
Packit 7838c8
TIFFReadContigStripData(TIFF* tif)
Packit 7838c8
{
Packit 7838c8
	unsigned char *buf;
Packit 7838c8
	tsize_t scanline = TIFFScanlineSize(tif);
Packit 7838c8
Packit 7838c8
	buf = (unsigned char *)_TIFFmalloc(TIFFStripSize(tif));
Packit 7838c8
	if (buf) {
Packit 7838c8
		uint32 row, h=0;
Packit 7838c8
		uint32 rowsperstrip = (uint32)-1;
Packit 7838c8
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h);
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip);
Packit 7838c8
		for (row = 0; row < h; row += rowsperstrip) {
Packit 7838c8
			uint32 nrow = (row+rowsperstrip > h ?
Packit 7838c8
			    h-row : rowsperstrip);
Packit 7838c8
			tstrip_t strip = TIFFComputeStrip(tif, row, 0);
Packit 7838c8
			if (TIFFReadEncodedStrip(tif, strip, buf, nrow*scanline) < 0) {
Packit 7838c8
				if (stoponerr)
Packit 7838c8
					break;
Packit 7838c8
			} else if (showdata)
Packit 7838c8
				ShowStrip(strip, buf, nrow, scanline);
Packit 7838c8
		}
Packit 7838c8
		_TIFFfree(buf);
Packit 7838c8
	}
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void
Packit 7838c8
TIFFReadSeparateStripData(TIFF* tif)
Packit 7838c8
{
Packit 7838c8
	unsigned char *buf;
Packit 7838c8
	tsize_t scanline = TIFFScanlineSize(tif);
Packit 7838c8
Packit 7838c8
	buf = (unsigned char *)_TIFFmalloc(TIFFStripSize(tif));
Packit 7838c8
	if (buf) {
Packit 7838c8
		uint32 row, h=0;
Packit 7838c8
		uint32 rowsperstrip = (uint32)-1;
Packit 7838c8
		tsample_t s, samplesperpixel=0;
Packit 7838c8
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h);
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip);
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel);
Packit 7838c8
		for (row = 0; row < h; row += rowsperstrip) {
Packit 7838c8
			for (s = 0; s < samplesperpixel; s++) {
Packit 7838c8
				uint32 nrow = (row+rowsperstrip > h ?
Packit 7838c8
				    h-row : rowsperstrip);
Packit 7838c8
				tstrip_t strip = TIFFComputeStrip(tif, row, s);
Packit 7838c8
				if (TIFFReadEncodedStrip(tif, strip, buf, nrow*scanline) < 0) {
Packit 7838c8
					if (stoponerr)
Packit 7838c8
						break;
Packit 7838c8
				} else if (showdata)
Packit 7838c8
					ShowStrip(strip, buf, nrow, scanline);
Packit 7838c8
			}
Packit 7838c8
		}
Packit 7838c8
		_TIFFfree(buf);
Packit 7838c8
	}
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
ShowTile(uint32 row, uint32 col, tsample_t sample,
Packit 7838c8
    unsigned char* pp, uint32 nrow, tsize_t rowsize)
Packit 7838c8
{
Packit 7838c8
	uint32 cc;
Packit 7838c8
Packit 7838c8
	printf("Tile (%lu,%lu", (unsigned long) row, (unsigned long) col);
Packit 7838c8
	if (sample != (tsample_t) -1)
Packit 7838c8
		printf(",%u", sample);
Packit 7838c8
	printf("):\n");
Packit 7838c8
	while (nrow-- > 0) {
Packit 7838c8
	  for (cc = 0; cc < (uint32) rowsize; cc++) {
Packit 7838c8
			printf(" %02x", *pp++);
Packit 7838c8
			if (((cc+1) % 24) == 0)
Packit 7838c8
				putchar('\n');
Packit 7838c8
		}
Packit 7838c8
		putchar('\n');
Packit 7838c8
	}
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void
Packit 7838c8
TIFFReadContigTileData(TIFF* tif)
Packit 7838c8
{
Packit 7838c8
	unsigned char *buf;
Packit 7838c8
	tmsize_t rowsize = TIFFTileRowSize(tif);
Packit 7838c8
        tmsize_t tilesize = TIFFTileSize(tif);
Packit 7838c8
Packit 7838c8
	buf = (unsigned char *)_TIFFmalloc(tilesize);
Packit 7838c8
	if (buf) {
Packit 7838c8
		uint32 tw=0, th=0, w=0, h=0;
Packit 7838c8
		uint32 row, col;
Packit 7838c8
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w);
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h);
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw);
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_TILELENGTH, &th);
Packit 7838c8
                if ( rowsize == 0 || th > (size_t) (tilesize / rowsize) )
Packit 7838c8
        {
Packit 7838c8
            fprintf(stderr, "Cannot display data: th * rowsize > tilesize\n");
Packit 7838c8
            _TIFFfree(buf);
Packit 7838c8
            return;
Packit 7838c8
        }
Packit 7838c8
		for (row = 0; row < h; row += th) {
Packit 7838c8
			for (col = 0; col < w; col += tw) {
Packit 7838c8
				if (TIFFReadTile(tif, buf, col, row, 0, 0) < 0) {
Packit 7838c8
					if (stoponerr)
Packit 7838c8
						break;
Packit 7838c8
				} else if (showdata)
Packit 7838c8
					ShowTile(row, col, (tsample_t) -1, buf, th, rowsize);
Packit 7838c8
			}
Packit 7838c8
		}
Packit 7838c8
		_TIFFfree(buf);
Packit 7838c8
	}
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void
Packit 7838c8
TIFFReadSeparateTileData(TIFF* tif)
Packit 7838c8
{
Packit 7838c8
	unsigned char *buf;
Packit 7838c8
        tmsize_t rowsize = TIFFTileRowSize(tif);
Packit 7838c8
        tmsize_t tilesize = TIFFTileSize(tif);
Packit 7838c8
Packit 7838c8
	buf = (unsigned char *)_TIFFmalloc(tilesize);
Packit 7838c8
	if (buf) {
Packit 7838c8
		uint32 tw=0, th=0, w=0, h=0;
Packit 7838c8
		uint32 row, col;
Packit 7838c8
		tsample_t s, samplesperpixel=0;
Packit 7838c8
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w);
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h);
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw);
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_TILELENGTH, &th);
Packit 7838c8
		TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel);
Packit 7838c8
                if ( rowsize == 0 || th > (size_t) (tilesize / rowsize) )
Packit 7838c8
        {
Packit 7838c8
            fprintf(stderr, "Cannot display data: th * rowsize > tilesize\n");
Packit 7838c8
            _TIFFfree(buf);
Packit 7838c8
            return;
Packit 7838c8
        }
Packit 7838c8
		for (row = 0; row < h; row += th) {
Packit 7838c8
			for (col = 0; col < w; col += tw) {
Packit 7838c8
				for (s = 0; s < samplesperpixel; s++) {
Packit 7838c8
					if (TIFFReadTile(tif, buf, col, row, 0, s) < 0) {
Packit 7838c8
						if (stoponerr)
Packit 7838c8
							break;
Packit 7838c8
					} else if (showdata)
Packit 7838c8
						ShowTile(row, col, s, buf, th, rowsize);
Packit 7838c8
				}
Packit 7838c8
			}
Packit 7838c8
		}
Packit 7838c8
		_TIFFfree(buf);
Packit 7838c8
	}
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void
Packit 7838c8
TIFFReadData(TIFF* tif)
Packit 7838c8
{
Packit 7838c8
	uint16 config = PLANARCONFIG_CONTIG;
Packit 7838c8
Packit 7838c8
	TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &config);
Packit 7838c8
	if (TIFFIsTiled(tif)) {
Packit 7838c8
		if (config == PLANARCONFIG_CONTIG)
Packit 7838c8
			TIFFReadContigTileData(tif);
Packit 7838c8
		else
Packit 7838c8
			TIFFReadSeparateTileData(tif);
Packit 7838c8
	} else {
Packit 7838c8
		if (config == PLANARCONFIG_CONTIG)
Packit 7838c8
			TIFFReadContigStripData(tif);
Packit 7838c8
		else
Packit 7838c8
			TIFFReadSeparateStripData(tif);
Packit 7838c8
	}
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
ShowRawBytes(unsigned char* pp, uint32 n)
Packit 7838c8
{
Packit 7838c8
	uint32 i;
Packit 7838c8
Packit 7838c8
	for (i = 0; i < n; i++) {
Packit 7838c8
		printf(" %02x", *pp++);
Packit 7838c8
		if (((i+1) % 24) == 0)
Packit 7838c8
			printf("\n ");
Packit 7838c8
	}
Packit 7838c8
	putchar('\n');
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
ShowRawWords(uint16* pp, uint32 n)
Packit 7838c8
{
Packit 7838c8
	uint32 i;
Packit 7838c8
Packit 7838c8
	for (i = 0; i < n; i++) {
Packit 7838c8
		printf(" %04x", *pp++);
Packit 7838c8
		if (((i+1) % 15) == 0)
Packit 7838c8
			printf("\n ");
Packit 7838c8
	}
Packit 7838c8
	putchar('\n');
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
void
Packit 7838c8
TIFFReadRawData(TIFF* tif, int bitrev)
Packit 7838c8
{
Packit 7838c8
	tstrip_t nstrips = TIFFNumberOfStrips(tif);
Packit 7838c8
	const char* what = TIFFIsTiled(tif) ? "Tile" : "Strip";
Packit 7838c8
	uint64* stripbc=NULL;
Packit 7838c8
Packit 7838c8
	TIFFGetField(tif, TIFFTAG_STRIPBYTECOUNTS, &stripbc);
Packit 7838c8
	if (stripbc != NULL && nstrips > 0) {
Packit 7838c8
		uint32 bufsize = (uint32) stripbc[0];
Packit 7838c8
		tdata_t buf = _TIFFmalloc(bufsize);
Packit 7838c8
		tstrip_t s;
Packit 7838c8
Packit 7838c8
		for (s = 0; s < nstrips; s++) {
Packit 7838c8
			if (stripbc[s] > bufsize) {
Packit 7838c8
				buf = _TIFFrealloc(buf, (tmsize_t)stripbc[s]);
Packit 7838c8
				bufsize = (uint32) stripbc[s];
Packit 7838c8
			}
Packit 7838c8
			if (buf == NULL) {
Packit 7838c8
				fprintf(stderr,
Packit 7838c8
				   "Cannot allocate buffer to read strip %lu\n",
Packit 7838c8
				    (unsigned long) s);
Packit 7838c8
				break;
Packit 7838c8
			}
Packit 7838c8
			if (TIFFReadRawStrip(tif, s, buf, (tmsize_t) stripbc[s]) < 0) {
Packit 7838c8
				fprintf(stderr, "Error reading strip %lu\n",
Packit 7838c8
				    (unsigned long) s);
Packit 7838c8
				if (stoponerr)
Packit 7838c8
					break;
Packit 7838c8
			} else if (showdata) {
Packit 7838c8
				if (bitrev) {
Packit 7838c8
					TIFFReverseBits(buf, (tmsize_t)stripbc[s]);
Packit 7838c8
					printf("%s %lu: (bit reversed)\n ",
Packit 7838c8
					    what, (unsigned long) s);
Packit 7838c8
				} else
Packit 7838c8
					printf("%s %lu:\n ", what,
Packit 7838c8
					    (unsigned long) s);
Packit 7838c8
				if (showwords)
Packit 7838c8
					ShowRawWords((uint16*) buf, (uint32) stripbc[s]>>1);
Packit 7838c8
				else
Packit 7838c8
					ShowRawBytes((unsigned char*) buf, (uint32) stripbc[s]);
Packit 7838c8
			}
Packit 7838c8
		}
Packit 7838c8
		if (buf != NULL)
Packit 7838c8
			_TIFFfree(buf);
Packit 7838c8
	}
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
static void
Packit 7838c8
tiffinfo(TIFF* tif, uint16 order, long flags, int is_image)
Packit 7838c8
{
Packit 7838c8
	TIFFPrintDirectory(tif, stdout, flags);
Packit 7838c8
	if (!readdata || !is_image)
Packit 7838c8
		return;
Packit 7838c8
	if (rawdata) {
Packit 7838c8
		if (order) {
Packit 7838c8
			uint16 o;
Packit 7838c8
			TIFFGetFieldDefaulted(tif,
Packit 7838c8
			    TIFFTAG_FILLORDER, &o);
Packit 7838c8
			TIFFReadRawData(tif, o != order);
Packit 7838c8
		} else
Packit 7838c8
			TIFFReadRawData(tif, 0);
Packit 7838c8
	} else {
Packit 7838c8
		if (order)
Packit 7838c8
			TIFFSetField(tif, TIFFTAG_FILLORDER, order);
Packit 7838c8
		TIFFReadData(tif);
Packit 7838c8
	}
Packit 7838c8
}
Packit 7838c8
Packit 7838c8
/* vim: set ts=8 sts=8 sw=8 noet: */
Packit 7838c8
/*
Packit 7838c8
 * Local Variables:
Packit 7838c8
 * mode: c
Packit 7838c8
 * c-basic-offset: 8
Packit 7838c8
 * fill-column: 78
Packit 7838c8
 * End:
Packit 7838c8
 */