summaryrefslogtreecommitdiff
path: root/tiff/tools/tiffset.c
diff options
context:
space:
mode:
Diffstat (limited to 'tiff/tools/tiffset.c')
-rw-r--r--tiff/tools/tiffset.c325
1 files changed, 0 insertions, 325 deletions
diff --git a/tiff/tools/tiffset.c b/tiff/tools/tiffset.c
deleted file mode 100644
index eb68924..0000000
--- a/tiff/tools/tiffset.c
+++ /dev/null
@@ -1,325 +0,0 @@
-/******************************************************************************
- * $Id: tiffset.c,v 1.12.2.1 2010-06-08 18:50:44 bfriesen Exp $
- *
- * Project: libtiff tools
- * Purpose: Mainline for setting metadata in existing TIFF files.
- * Author: Frank Warmerdam, warmerdam@pobox.com
- *
- ******************************************************************************
- * Copyright (c) 2000, Frank Warmerdam
- *
- * 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.
- ******************************************************************************
- *
- * $Log: tiffset.c,v $
- * Revision 1.12.2.1 2010-06-08 18:50:44 bfriesen
- * * Add an emacs formatting mode footer to all source files so that
- * emacs can be effectively used.
- *
- * Revision 1.12 2007/02/24 17:14:14 dron
- * Properly handle tags with TIFF_VARIABLE writecount. As per bug
- * http://bugzilla.remotesensing.org/show_bug.cgi?id=1350
- *
- * Revision 1.11 2005/09/13 14:13:42 dron
- * Avoid warnings.
- *
- * Revision 1.10 2005/02/24 14:47:11 fwarmerdam
- * Updated header.
- *
- */
-
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "tiffio.h"
-
-static char* usageMsg[] = {
-"usage: tiffset [options] filename",
-"where options are:",
-" -s <tagname> [count] <value>... set the tag value",
-" -sf <tagname> <filename> read the tag value from file (for ASCII tags only)",
-NULL
-};
-
-static void
-usage(void)
-{
- int i;
- for (i = 0; usageMsg[i]; i++)
- fprintf(stderr, "%s\n", usageMsg[i]);
- exit(-1);
-}
-
-static const TIFFFieldInfo *
-GetField(TIFF *tiff, const char *tagname)
-{
- const TIFFFieldInfo *fip;
-
- if( atoi(tagname) > 0 )
- fip = TIFFFieldWithTag(tiff, (ttag_t)atoi(tagname));
- else
- fip = TIFFFieldWithName(tiff, tagname);
-
- if (!fip) {
- fprintf( stderr, "Field name %s not recognised.\n", tagname );
- return (TIFFFieldInfo *)NULL;
- }
-
- return fip;
-}
-
-int
-main(int argc, char* argv[])
-{
- TIFF *tiff;
- int arg_index;
-
- if (argc < 2)
- usage();
-
- tiff = TIFFOpen(argv[argc-1], "r+");
- if (tiff == NULL)
- return 2;
-
- for( arg_index = 1; arg_index < argc-1; arg_index++ ) {
- if (strcmp(argv[arg_index],"-s") == 0 && arg_index < argc-3) {
- const TIFFFieldInfo *fip;
- const char *tagname;
-
- arg_index++;
- tagname = argv[arg_index];
- fip = GetField(tiff, tagname);
-
- if (!fip)
- return 3;
-
- arg_index++;
- if (fip->field_type == TIFF_ASCII) {
- if (TIFFSetField(tiff, fip->field_tag, argv[arg_index]) != 1)
- fprintf( stderr, "Failed to set %s=%s\n",
- fip->field_name, argv[arg_index] );
- } else if (fip->field_writecount > 0
- || fip->field_writecount == TIFF_VARIABLE) {
- int ret = 1;
- short wc;
-
- if (fip->field_writecount == TIFF_VARIABLE)
- wc = atoi(argv[arg_index++]);
- else
- wc = fip->field_writecount;
-
- if (argc - arg_index < wc) {
- fprintf( stderr,
- "Number of tag values is not enough. "
- "Expected %d values for %s tag, got %d\n",
- wc, fip->field_name, argc - arg_index);
- return 4;
- }
-
- if (wc > 1) {
- int i, size;
- void *array;
-
- switch (fip->field_type) {
- /*
- * XXX: We can't use TIFFDataWidth()
- * 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.
- */
- case TIFF_BYTE:
- case TIFF_ASCII:
- case TIFF_SBYTE:
- case TIFF_UNDEFINED:
- default:
- size = 1;
- break;
-
- case TIFF_SHORT:
- case TIFF_SSHORT:
- size = 2;
- break;
-
- case TIFF_LONG:
- case TIFF_SLONG:
- case TIFF_FLOAT:
- case TIFF_IFD:
- case TIFF_RATIONAL:
- case TIFF_SRATIONAL:
- size = 4;
- break;
-
- case TIFF_DOUBLE:
- size = 8;
- break;
- }
-
- array = _TIFFmalloc(wc * size);
- if (!array) {
- fprintf(stderr, "No space for %s tag\n",
- tagname);
- return 4;
- }
-
- switch (fip->field_type) {
- case TIFF_BYTE:
- for (i = 0; i < wc; i++)
- ((uint8 *)array)[i] = atoi(argv[arg_index+i]);
- break;
- case TIFF_SHORT:
- for (i = 0; i < wc; i++)
- ((uint16 *)array)[i] = atoi(argv[arg_index+i]);
- break;
- case TIFF_SBYTE:
- for (i = 0; i < wc; i++)
- ((int8 *)array)[i] = atoi(argv[arg_index+i]);
- break;
- case TIFF_SSHORT:
- for (i = 0; i < wc; i++)
- ((int16 *)array)[i] = atoi(argv[arg_index+i]);
- break;
- case TIFF_LONG:
- for (i = 0; i < wc; i++)
- ((uint32 *)array)[i] = atol(argv[arg_index+i]);
- break;
- case TIFF_SLONG:
- case TIFF_IFD:
- for (i = 0; i < wc; i++)
- ((uint32 *)array)[i] = atol(argv[arg_index+i]);
- break;
- case TIFF_DOUBLE:
- for (i = 0; i < wc; i++)
- ((double *)array)[i] = atof(argv[arg_index+i]);
- break;
- case TIFF_RATIONAL:
- case TIFF_SRATIONAL:
- case TIFF_FLOAT:
- for (i = 0; i < wc; i++)
- ((float *)array)[i] = (float)atof(argv[arg_index+i]);
- break;
- default:
- break;
- }
-
- if (fip->field_passcount) {
- ret = TIFFSetField(tiff, fip->field_tag,
- wc, array);
- } else {
- ret = TIFFSetField(tiff, fip->field_tag,
- array);
- }
-
- _TIFFfree(array);
- } else {
- switch (fip->field_type) {
- case TIFF_BYTE:
- case TIFF_SHORT:
- case TIFF_SBYTE:
- case TIFF_SSHORT:
- ret = TIFFSetField(tiff, fip->field_tag,
- atoi(argv[arg_index++]));
- break;
- case TIFF_LONG:
- case TIFF_SLONG:
- case TIFF_IFD:
- ret = TIFFSetField(tiff, fip->field_tag,
- atol(argv[arg_index++]));
- break;
- case TIFF_DOUBLE:
- ret = TIFFSetField(tiff, fip->field_tag,
- atof(argv[arg_index++]));
- break;
- case TIFF_RATIONAL:
- case TIFF_SRATIONAL:
- case TIFF_FLOAT:
- ret = TIFFSetField(tiff, fip->field_tag,
- (float)atof(argv[arg_index++]));
- break;
- default:
- break;
- }
- }
-
- if (ret != 1)
- fprintf(stderr, "Failed to set %s\n", fip->field_name);
- arg_index += wc;
- }
- } else if (strcmp(argv[arg_index],"-sf") == 0 && arg_index < argc-3) {
- FILE *fp;
- const TIFFFieldInfo *fip;
- char *text;
- int len;
-
- arg_index++;
- fip = GetField(tiff, argv[arg_index]);
-
- if (!fip)
- return 3;
-
- if (fip->field_type != TIFF_ASCII) {
- fprintf( stderr,
- "Only ASCII tags can be set from file. "
- "%s is not ASCII tag.\n", fip->field_name );
- return 5;
- }
-
- arg_index++;
- fp = fopen( argv[arg_index], "rt" );
- if(fp == NULL) {
- perror( argv[arg_index] );
- continue;
- }
-
- text = (char *) malloc(1000000);
- len = fread( text, 1, 999999, fp );
- text[len] = '\0';
-
- fclose( fp );
-
- if(TIFFSetField( tiff, fip->field_tag, text ) != 1) {
- fprintf(stderr, "Failed to set %s from file %s\n",
- fip->field_name, argv[arg_index]);
- }
-
- _TIFFfree( text );
- arg_index++;
- } else {
- fprintf(stderr, "Unrecognised option: %s\n",
- argv[arg_index]);
- usage();
- }
- }
-
- TIFFRewriteDirectory(tiff);
- TIFFClose(tiff);
- return 0;
-}
-
-/* vim: set ts=8 sts=8 sw=8 noet: */
-/*
- * Local Variables:
- * mode: c
- * c-basic-offset: 8
- * fill-column: 78
- * End:
- */