1/* $Id: long_tag.c,v 1.3.2.1 2010-06-08 18:50:43 bfriesen Exp $ */
2
3/*
4 * Copyright (c) 2004, Andrey Kiselev  <dron@ak4719.spb.edu>
5 *
6 * Permission to use, copy, modify, distribute, and sell this software and
7 * its documentation for any purpose is hereby granted without fee, provided
8 * that (i) the above copyright notices and this permission notice appear in
9 * all copies of the software and related documentation, and (ii) the names of
10 * Sam Leffler and Silicon Graphics may not be used in any advertising or
11 * publicity relating to the software without the specific, prior written
12 * permission of Sam Leffler and Silicon Graphics.
13 *
14 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
15 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
16 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
17 *
18 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
19 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
20 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
21 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
22 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
23 * OF THIS SOFTWARE.
24 */
25
26/*
27 * TIFF Library
28 *
29 * Module to test LONG tags read/write functions.
30 */
31
32#include "tif_config.h"
33
34#include <stdio.h>
35
36#ifdef HAVE_UNISTD_H
37# include <unistd.h>
38#endif
39
40#include "tiffio.h"
41
42extern int CheckLongField(TIFF *, ttag_t, uint32);
43
44const char	*filename = "long_test.tiff";
45
46static struct Tags {
47	ttag_t		tag;
48	short		count;
49	uint32		value;
50} long_tags[] = {
51	{ TIFFTAG_SUBFILETYPE, 1, FILETYPE_REDUCEDIMAGE|FILETYPE_PAGE|FILETYPE_MASK }
52};
53#define NTAGS   (sizeof (long_tags) / sizeof (long_tags[0]))
54
55const uint32	width = 1;
56const uint32	length = 1;
57const uint32	rows_per_strip = 1;
58
59int
60main(int argc, char **argv)
61{
62	TIFF		*tif;
63	int		i;
64	unsigned char	buf[3] = { 0, 127, 255 };
65
66	/* Test whether we can write tags. */
67	tif = TIFFOpen(filename, "w");
68	if (!tif) {
69		fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
70		return 1;
71	}
72
73	if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width)) {
74		fprintf (stderr, "Can't set ImageWidth tag.\n");
75		goto failure;
76	}
77	if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, length)) {
78		fprintf (stderr, "Can't set ImageLength tag.\n");
79		goto failure;
80	}
81	if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8)) {
82		fprintf (stderr, "Can't set BitsPerSample tag.\n");
83		goto failure;
84	}
85	if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3)) {
86		fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
87		goto failure;
88	}
89	if (!TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rows_per_strip)) {
90		fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
91		goto failure;
92	}
93	if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG)) {
94		fprintf (stderr, "Can't set PlanarConfiguration tag.\n");
95		goto failure;
96	}
97	if (!TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB)) {
98		fprintf (stderr, "Can't set PhotometricInterpretation tag.\n");
99		goto failure;
100	}
101
102	for (i = 0; i < NTAGS; i++) {
103		if (!TIFFSetField(tif, long_tags[i].tag,
104				  long_tags[i].value)) {
105			fprintf(stderr, "Can't set tag %d.\n",
106				(int)long_tags[i].tag);
107			goto failure;
108		}
109	}
110
111	/* Write dummy pixel data. */
112	if (!TIFFWriteScanline(tif, buf, 0, 0) < 0) {
113		fprintf (stderr, "Can't write image data.\n");
114		goto failure;
115	}
116
117	TIFFClose(tif);
118
119	/* Ok, now test whether we can read written values. */
120	tif = TIFFOpen(filename, "r");
121	if (!tif) {
122		fprintf (stderr, "Can't open test TIFF file %s.\n", filename);
123		return 1;
124	}
125
126	if (CheckLongField(tif, TIFFTAG_IMAGEWIDTH, width) < 0)
127		goto failure;
128
129	if (CheckLongField(tif, TIFFTAG_IMAGELENGTH, length) < 0)
130		goto failure;
131
132	if (CheckLongField(tif, TIFFTAG_ROWSPERSTRIP, rows_per_strip) < 0)
133		goto failure;
134
135	for (i = 0; i < NTAGS; i++) {
136		if (CheckLongField(tif, long_tags[i].tag,
137				   long_tags[i].value) < 0)
138			goto failure;
139	}
140
141	TIFFClose(tif);
142
143	/* All tests passed; delete file and exit with success status. */
144	unlink(filename);
145	return 0;
146
147failure:
148	/* Something goes wrong; close file and return unsuccessful status. */
149	TIFFClose(tif);
150	unlink(filename);
151	return 1;
152}
153
154/* vim: set ts=8 sts=8 sw=8 noet: */
155/*
156 * Local Variables:
157 * mode: c
158 * c-basic-offset: 8
159 * fill-column: 78
160 * End:
161 */
162