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