4  * Copyright (c) 1988-1997 Sam Leffler 
   5  * Copyright (c) 1991-1997 Silicon Graphics, Inc. 
   7  * Permission to use, copy, modify, distribute, and sell this software and  
   8  * its documentation for any purpose is hereby granted without fee, provided 
   9  * that (i) the above copyright notices and this permission notice appear in 
  10  * all copies of the software and related documentation, and (ii) the names of 
  11  * Sam Leffler and Silicon Graphics may not be used in any advertising or 
  12  * publicity relating to the software without the specific, prior written 
  13  * permission of Sam Leffler and Silicon Graphics. 
  15  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,  
  16  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY  
  17  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.   
  19  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 
  20  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 
  21  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
  22  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF  
  23  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE  
  30  * Core Directory Tag Support. 
  36  * NB: NB: THIS ARRAY IS ASSUMED TO BE SORTED BY TAG. 
  37  *       If a tag can have both LONG and SHORT types then the LONG must be 
  38  *       placed before the SHORT for writing to work properly. 
  40  * NOTE: The second field (field_readcount) and third field (field_writecount) 
  41  *       sometimes use the values TIFF_VARIABLE (-1), TIFF_VARIABLE2 (-3) 
  42  *       and TIFFTAG_SPP (-2). The macros should be used but would throw off  
  43  *       the formatting of the code, so please interprete the -1, -2 and -3  
  46 static const TIFFFieldInfo
 
  48     { TIFFTAG_SUBFILETYPE
,       1, 1,  TIFF_LONG
,      FIELD_SUBFILETYPE
, 
  49       1,        0,      "SubfileType" }, 
  50 /* XXX SHORT for compatibility w/ old versions of the library */ 
  51     { TIFFTAG_SUBFILETYPE
,       1, 1,  TIFF_SHORT
,     FIELD_SUBFILETYPE
, 
  52       1,        0,      "SubfileType" }, 
  53     { TIFFTAG_OSUBFILETYPE
,      1, 1,  TIFF_SHORT
,     FIELD_SUBFILETYPE
, 
  54       1,        0,      "OldSubfileType" }, 
  55     { TIFFTAG_IMAGEWIDTH
,        1, 1,  TIFF_LONG
,      FIELD_IMAGEDIMENSIONS
, 
  57     { TIFFTAG_IMAGEWIDTH
,        1, 1,  TIFF_SHORT
,     FIELD_IMAGEDIMENSIONS
, 
  59     { TIFFTAG_IMAGELENGTH
,       1, 1,  TIFF_LONG
,      FIELD_IMAGEDIMENSIONS
, 
  60       1,        0,      "ImageLength" }, 
  61     { TIFFTAG_IMAGELENGTH
,       1, 1,  TIFF_SHORT
,     FIELD_IMAGEDIMENSIONS
, 
  62       1,        0,      "ImageLength" }, 
  63     { TIFFTAG_BITSPERSAMPLE
,    -1,-1,  TIFF_SHORT
,     FIELD_BITSPERSAMPLE
, 
  64       0,        0,      "BitsPerSample" }, 
  65 /* XXX LONG for compatibility with some broken TIFF writers */ 
  66     { TIFFTAG_BITSPERSAMPLE
,    -1,-1,  TIFF_LONG
,      FIELD_BITSPERSAMPLE
, 
  67       0,        0,      "BitsPerSample" }, 
  68     { TIFFTAG_COMPRESSION
,      -1, 1,  TIFF_SHORT
,     FIELD_COMPRESSION
, 
  69       0,        0,      "Compression" }, 
  70 /* XXX LONG for compatibility with some broken TIFF writers */ 
  71     { TIFFTAG_COMPRESSION
,      -1, 1,  TIFF_LONG
,      FIELD_COMPRESSION
, 
  72       0,        0,      "Compression" }, 
  73     { TIFFTAG_PHOTOMETRIC
,       1, 1,  TIFF_SHORT
,     FIELD_PHOTOMETRIC
, 
  74       0,        0,      "PhotometricInterpretation" }, 
  75 /* XXX LONG for compatibility with some broken TIFF writers */ 
  76     { TIFFTAG_PHOTOMETRIC
,       1, 1,  TIFF_LONG
,      FIELD_PHOTOMETRIC
, 
  77       0,        0,      "PhotometricInterpretation" }, 
  78     { TIFFTAG_THRESHHOLDING
,     1, 1,  TIFF_SHORT
,     FIELD_THRESHHOLDING
, 
  79       1,        0,      "Threshholding" }, 
  80     { TIFFTAG_CELLWIDTH
,         1, 1,  TIFF_SHORT
,     FIELD_IGNORE
, 
  82     { TIFFTAG_CELLLENGTH
,        1, 1,  TIFF_SHORT
,     FIELD_IGNORE
, 
  84     { TIFFTAG_FILLORDER
,         1, 1,  TIFF_SHORT
,     FIELD_FILLORDER
, 
  86     { TIFFTAG_DOCUMENTNAME
,     -1,-1,  TIFF_ASCII
,     FIELD_CUSTOM
, 
  87       1,        0,      "DocumentName" }, 
  88     { TIFFTAG_IMAGEDESCRIPTION
, -1,-1,  TIFF_ASCII
,     FIELD_CUSTOM
, 
  89       1,        0,      "ImageDescription" }, 
  90     { TIFFTAG_MAKE
,             -1,-1,  TIFF_ASCII
,     FIELD_CUSTOM
, 
  92     { TIFFTAG_MODEL
,            -1,-1,  TIFF_ASCII
,     FIELD_CUSTOM
, 
  94     { TIFFTAG_STRIPOFFSETS
,     -1,-1,  TIFF_LONG
,      FIELD_STRIPOFFSETS
, 
  95       0,        0,      "StripOffsets" }, 
  96     { TIFFTAG_STRIPOFFSETS
,     -1,-1,  TIFF_SHORT
,     FIELD_STRIPOFFSETS
, 
  97       0,        0,      "StripOffsets" }, 
  98     { TIFFTAG_ORIENTATION
,       1, 1,  TIFF_SHORT
,     FIELD_ORIENTATION
, 
  99       0,        0,      "Orientation" }, 
 100     { TIFFTAG_SAMPLESPERPIXEL
,   1, 1,  TIFF_SHORT
,     FIELD_SAMPLESPERPIXEL
, 
 101       0,        0,      "SamplesPerPixel" }, 
 102     { TIFFTAG_ROWSPERSTRIP
,      1, 1,  TIFF_LONG
,      FIELD_ROWSPERSTRIP
, 
 103       0,        0,      "RowsPerStrip" }, 
 104     { TIFFTAG_ROWSPERSTRIP
,      1, 1,  TIFF_SHORT
,     FIELD_ROWSPERSTRIP
, 
 105       0,        0,      "RowsPerStrip" }, 
 106     { TIFFTAG_STRIPBYTECOUNTS
,  -1,-1,  TIFF_LONG
,      FIELD_STRIPBYTECOUNTS
, 
 107       0,        0,      "StripByteCounts" }, 
 108     { TIFFTAG_STRIPBYTECOUNTS
,  -1,-1,  TIFF_SHORT
,     FIELD_STRIPBYTECOUNTS
, 
 109       0,        0,      "StripByteCounts" }, 
 110     { TIFFTAG_MINSAMPLEVALUE
,   -2,-1,  TIFF_SHORT
,     FIELD_MINSAMPLEVALUE
, 
 111       1,        0,      "MinSampleValue" }, 
 112     { TIFFTAG_MAXSAMPLEVALUE
,   -2,-1,  TIFF_SHORT
,     FIELD_MAXSAMPLEVALUE
, 
 113       1,        0,      "MaxSampleValue" }, 
 114     { TIFFTAG_XRESOLUTION
,       1, 1,  TIFF_RATIONAL
,  FIELD_RESOLUTION
, 
 115       1,        0,      "XResolution" }, 
 116     { TIFFTAG_YRESOLUTION
,       1, 1,  TIFF_RATIONAL
,  FIELD_RESOLUTION
, 
 117       1,        0,      "YResolution" }, 
 118     { TIFFTAG_PLANARCONFIG
,      1, 1,  TIFF_SHORT
,     FIELD_PLANARCONFIG
, 
 119       0,        0,      "PlanarConfiguration" }, 
 120     { TIFFTAG_PAGENAME
,         -1,-1,  TIFF_ASCII
,     FIELD_CUSTOM
, 
 122     { TIFFTAG_XPOSITION
,         1, 1,  TIFF_RATIONAL
,  FIELD_POSITION
, 
 124     { TIFFTAG_YPOSITION
,         1, 1,  TIFF_RATIONAL
,  FIELD_POSITION
, 
 126     { TIFFTAG_FREEOFFSETS
,      -1,-1,  TIFF_LONG
,      FIELD_IGNORE
, 
 127       0,        0,      "FreeOffsets" }, 
 128     { TIFFTAG_FREEBYTECOUNTS
,   -1,-1,  TIFF_LONG
,      FIELD_IGNORE
, 
 129       0,        0,      "FreeByteCounts" }, 
 130     { TIFFTAG_GRAYRESPONSEUNIT
,  1, 1,  TIFF_SHORT
,     FIELD_IGNORE
, 
 131       1,        0,      "GrayResponseUnit" }, 
 132     { TIFFTAG_GRAYRESPONSECURVE
,-1,-1,  TIFF_SHORT
,     FIELD_IGNORE
, 
 133       1,        0,      "GrayResponseCurve" }, 
 134     { TIFFTAG_RESOLUTIONUNIT
,    1, 1,  TIFF_SHORT
,     FIELD_RESOLUTIONUNIT
, 
 135       1,        0,      "ResolutionUnit" }, 
 136     { TIFFTAG_PAGENUMBER
,        2, 2,  TIFF_SHORT
,     FIELD_PAGENUMBER
, 
 137       1,        0,      "PageNumber" }, 
 138     { TIFFTAG_COLORRESPONSEUNIT
, 1, 1,  TIFF_SHORT
,     FIELD_IGNORE
, 
 139       1,        0,      "ColorResponseUnit" }, 
 140     { TIFFTAG_TRANSFERFUNCTION
, -1,-1,  TIFF_SHORT
,     FIELD_TRANSFERFUNCTION
, 
 141       1,        0,      "TransferFunction" }, 
 142     { TIFFTAG_SOFTWARE
,         -1,-1,  TIFF_ASCII
,     FIELD_CUSTOM
, 
 144     { TIFFTAG_DATETIME
,         20,20,  TIFF_ASCII
,     FIELD_CUSTOM
, 
 146     { TIFFTAG_ARTIST
,           -1,-1,  TIFF_ASCII
,     FIELD_CUSTOM
, 
 148     { TIFFTAG_HOSTCOMPUTER
,     -1,-1,  TIFF_ASCII
,     FIELD_CUSTOM
, 
 149       1,        0,      "HostComputer" }, 
 150     { TIFFTAG_WHITEPOINT
,        2, 2,  TIFF_RATIONAL
,  FIELD_CUSTOM
, 
 151       1,        0,      "WhitePoint" }, 
 152     { TIFFTAG_PRIMARYCHROMATICITIES
,6,6,TIFF_RATIONAL
,  FIELD_CUSTOM
, 
 153       1,        0,      "PrimaryChromaticities" }, 
 154     { TIFFTAG_COLORMAP
,         -1,-1,  TIFF_SHORT
,     FIELD_COLORMAP
, 
 156     { TIFFTAG_HALFTONEHINTS
,     2, 2,  TIFF_SHORT
,     FIELD_HALFTONEHINTS
, 
 157       1,        0,      "HalftoneHints" }, 
 158     { TIFFTAG_TILEWIDTH
,         1, 1,  TIFF_LONG
,      FIELD_TILEDIMENSIONS
, 
 160     { TIFFTAG_TILEWIDTH
,         1, 1,  TIFF_SHORT
,     FIELD_TILEDIMENSIONS
, 
 162     { TIFFTAG_TILELENGTH
,        1, 1,  TIFF_LONG
,      FIELD_TILEDIMENSIONS
, 
 163       0,        0,      "TileLength" }, 
 164     { TIFFTAG_TILELENGTH
,        1, 1,  TIFF_SHORT
,     FIELD_TILEDIMENSIONS
, 
 165       0,        0,      "TileLength" }, 
 166     { TIFFTAG_TILEOFFSETS
,      -1, 1,  TIFF_LONG
,      FIELD_STRIPOFFSETS
, 
 167       0,        0,      "TileOffsets" }, 
 168     { TIFFTAG_TILEBYTECOUNTS
,   -1, 1,  TIFF_LONG
,      FIELD_STRIPBYTECOUNTS
, 
 169       0,        0,      "TileByteCounts" }, 
 170     { TIFFTAG_TILEBYTECOUNTS
,   -1, 1,  TIFF_SHORT
,     FIELD_STRIPBYTECOUNTS
, 
 171       0,        0,      "TileByteCounts" }, 
 172     { TIFFTAG_SUBIFD
,           -1,-1,  TIFF_IFD
,       FIELD_SUBIFD
, 
 174     { TIFFTAG_SUBIFD
,           -1,-1,  TIFF_LONG
,      FIELD_SUBIFD
, 
 176     { TIFFTAG_INKSET
,            1, 1,  TIFF_SHORT
,     FIELD_CUSTOM
, 
 178     { TIFFTAG_INKNAMES
,         -1,-1,  TIFF_ASCII
,     FIELD_INKNAMES
, 
 180     { TIFFTAG_NUMBEROFINKS
,      1, 1,  TIFF_SHORT
,     FIELD_CUSTOM
, 
 181       1,        0,      "NumberOfInks" }, 
 182     { TIFFTAG_DOTRANGE
,          2, 2,  TIFF_SHORT
,     FIELD_CUSTOM
, 
 184     { TIFFTAG_DOTRANGE
,          2, 2,  TIFF_BYTE
,      FIELD_CUSTOM
, 
 186     { TIFFTAG_TARGETPRINTER
,    -1,-1,  TIFF_ASCII
,     FIELD_CUSTOM
, 
 187       1,        0,      "TargetPrinter" }, 
 188     { TIFFTAG_EXTRASAMPLES
,     -1,-1,  TIFF_SHORT
,     FIELD_EXTRASAMPLES
, 
 189       0,        1,      "ExtraSamples" }, 
 190 /* XXX for bogus Adobe Photoshop v2.5 files */ 
 191     { TIFFTAG_EXTRASAMPLES
,     -1,-1,  TIFF_BYTE
,      FIELD_EXTRASAMPLES
, 
 192       0,        1,      "ExtraSamples" }, 
 193     { TIFFTAG_SAMPLEFORMAT
,     -1,-1,  TIFF_SHORT
,     FIELD_SAMPLEFORMAT
, 
 194       0,        0,      "SampleFormat" }, 
 195     { TIFFTAG_SMINSAMPLEVALUE
,  -2,-1,  TIFF_ANY
,       FIELD_SMINSAMPLEVALUE
, 
 196       1,        0,      "SMinSampleValue" }, 
 197     { TIFFTAG_SMAXSAMPLEVALUE
,  -2,-1,  TIFF_ANY
,       FIELD_SMAXSAMPLEVALUE
, 
 198       1,        0,      "SMaxSampleValue" }, 
 199     { TIFFTAG_CLIPPATH
,         -1, -3, TIFF_BYTE
,      FIELD_CUSTOM
, 
 201     { TIFFTAG_XCLIPPATHUNITS
,    1, 1,  TIFF_SLONG
,     FIELD_CUSTOM
, 
 202       0,        0,      "XClipPathUnits" }, 
 203     { TIFFTAG_XCLIPPATHUNITS
,    1, 1,  TIFF_SSHORT
,    FIELD_CUSTOM
, 
 204       0,        0,      "XClipPathUnits" }, 
 205     { TIFFTAG_XCLIPPATHUNITS
,    1, 1,  TIFF_SBYTE
,     FIELD_CUSTOM
, 
 206       0,        0,      "XClipPathUnits" }, 
 207     { TIFFTAG_YCLIPPATHUNITS
,    1, 1,  TIFF_SLONG
,     FIELD_CUSTOM
, 
 208       0,        0,      "YClipPathUnits" }, 
 209     { TIFFTAG_YCLIPPATHUNITS
,    1, 1,  TIFF_SSHORT
,    FIELD_CUSTOM
, 
 210       0,        0,      "YClipPathUnits" }, 
 211     { TIFFTAG_YCLIPPATHUNITS
,    1, 1,  TIFF_SBYTE
,     FIELD_CUSTOM
, 
 212       0,        0,      "YClipPathUnits" }, 
 213     { TIFFTAG_YCBCRCOEFFICIENTS
, 3, 3,  TIFF_RATIONAL
,  FIELD_CUSTOM
, 
 214       0,        0,      "YCbCrCoefficients" }, 
 215     { TIFFTAG_YCBCRSUBSAMPLING
,  2, 2,  TIFF_SHORT
,     FIELD_YCBCRSUBSAMPLING
, 
 216       0,        0,      "YCbCrSubsampling" }, 
 217     { TIFFTAG_YCBCRPOSITIONING
,  1, 1,  TIFF_SHORT
,     FIELD_YCBCRPOSITIONING
, 
 218       0,        0,      "YCbCrPositioning" }, 
 219     { TIFFTAG_REFERENCEBLACKWHITE
, 6, 6, TIFF_RATIONAL
, FIELD_CUSTOM
, 
 220       1,        0,      "ReferenceBlackWhite" }, 
 221 /* XXX temporarily accept LONG for backwards compatibility */ 
 222     { TIFFTAG_REFERENCEBLACKWHITE
, 6, 6, TIFF_LONG
,     FIELD_CUSTOM
, 
 223       1,        0,      "ReferenceBlackWhite" }, 
 224     { TIFFTAG_XMLPACKET
,        -3,-3,  TIFF_BYTE
,      FIELD_CUSTOM
, 
 227     { TIFFTAG_MATTEING
,          1, 1,  TIFF_SHORT
,     FIELD_EXTRASAMPLES
, 
 229     { TIFFTAG_DATATYPE
,         -2,-1,  TIFF_SHORT
,     FIELD_SAMPLEFORMAT
, 
 231     { TIFFTAG_IMAGEDEPTH
,        1, 1,  TIFF_LONG
,      FIELD_IMAGEDEPTH
, 
 232       0,        0,      "ImageDepth" }, 
 233     { TIFFTAG_IMAGEDEPTH
,        1, 1,  TIFF_SHORT
,     FIELD_IMAGEDEPTH
, 
 234       0,        0,      "ImageDepth" }, 
 235     { TIFFTAG_TILEDEPTH
,         1, 1,  TIFF_LONG
,      FIELD_TILEDEPTH
, 
 237     { TIFFTAG_TILEDEPTH
,         1, 1,  TIFF_SHORT
,     FIELD_TILEDEPTH
, 
 240 /* begin Pixar tags */ 
 241     { TIFFTAG_PIXAR_IMAGEFULLWIDTH
,  1, 1, TIFF_LONG
,   FIELD_CUSTOM
, 
 242       1,        0,      "ImageFullWidth" }, 
 243     { TIFFTAG_PIXAR_IMAGEFULLLENGTH
, 1, 1, TIFF_LONG
,   FIELD_CUSTOM
, 
 244       1,        0,      "ImageFullLength" }, 
 245     { TIFFTAG_PIXAR_TEXTUREFORMAT
,  -1, -1, TIFF_ASCII
, FIELD_CUSTOM
, 
 246       1,        0,      "TextureFormat" }, 
 247     { TIFFTAG_PIXAR_WRAPMODES
,      -1, -1, TIFF_ASCII
, FIELD_CUSTOM
, 
 248       1,        0,      "TextureWrapModes" }, 
 249     { TIFFTAG_PIXAR_FOVCOT
,          1, 1, TIFF_FLOAT
,  FIELD_CUSTOM
, 
 250       1,        0,      "FieldOfViewCotangent" }, 
 251     { TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN
,       16,16,  TIFF_FLOAT
, 
 252       FIELD_CUSTOM
,     1,      0,      "MatrixWorldToScreen" }, 
 253     { TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA
,       16,16,  TIFF_FLOAT
, 
 254        FIELD_CUSTOM
,    1,      0,      "MatrixWorldToCamera" }, 
 255     { TIFFTAG_COPYRIGHT
,        -1, -1, TIFF_ASCII
,     FIELD_CUSTOM
, 
 258     { TIFFTAG_RICHTIFFIPTC
, -3, -3,     TIFF_LONG
,      FIELD_CUSTOM
,  
 259       0,    1,   "RichTIFFIPTC" }, 
 260     { TIFFTAG_PHOTOSHOP
,    -3, -3,     TIFF_BYTE
,      FIELD_CUSTOM
,  
 262     { TIFFTAG_EXIFIFD
,          1, 1,   TIFF_LONG
,      FIELD_CUSTOM
, 
 263       0,        0,      "EXIFIFDOffset" }, 
 264     { TIFFTAG_ICCPROFILE
,       -3, -3, TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 265       0,        1,      "ICC Profile" }, 
 266     { TIFFTAG_GPSIFD
,           1, 1,   TIFF_LONG
,      FIELD_CUSTOM
, 
 267       0,        0,      "GPSIFDOffset" }, 
 268     { TIFFTAG_STONITS
,           1, 1,  TIFF_DOUBLE
,    FIELD_CUSTOM
, 
 270     { TIFFTAG_INTEROPERABILITYIFD
, 1, 1, TIFF_LONG
,     FIELD_CUSTOM
, 
 271       0,        0,      "InteroperabilityIFDOffset" }, 
 273     { TIFFTAG_DNGVERSION
,       4, 4,   TIFF_BYTE
,      FIELD_CUSTOM
,  
 274       0,        0,      "DNGVersion" }, 
 275     { TIFFTAG_DNGBACKWARDVERSION
, 4, 4, TIFF_BYTE
,      FIELD_CUSTOM
,  
 276       0,        0,      "DNGBackwardVersion" }, 
 277     { TIFFTAG_UNIQUECAMERAMODEL
,    -1, -1, TIFF_ASCII
, FIELD_CUSTOM
, 
 278       1,        0,      "UniqueCameraModel" }, 
 279     { TIFFTAG_LOCALIZEDCAMERAMODEL
, -1, -1, TIFF_ASCII
, FIELD_CUSTOM
, 
 280       1,        0,      "LocalizedCameraModel" }, 
 281     { TIFFTAG_LOCALIZEDCAMERAMODEL
, -1, -1, TIFF_BYTE
,  FIELD_CUSTOM
, 
 282       1,        1,      "LocalizedCameraModel" }, 
 283     { TIFFTAG_CFAPLANECOLOR
,    -1, -1, TIFF_BYTE
,      FIELD_CUSTOM
,  
 284       0,        1,      "CFAPlaneColor" }, 
 285     { TIFFTAG_CFALAYOUT
,        1, 1,   TIFF_SHORT
,     FIELD_CUSTOM
,  
 287     { TIFFTAG_LINEARIZATIONTABLE
, -1, -1, TIFF_SHORT
,   FIELD_CUSTOM
,  
 288       0,        1,      "LinearizationTable" }, 
 289     { TIFFTAG_BLACKLEVELREPEATDIM
, 2, 2, TIFF_SHORT
,    FIELD_CUSTOM
,  
 290       0,        0,      "BlackLevelRepeatDim" }, 
 291     { TIFFTAG_BLACKLEVEL
,       -1, -1, TIFF_LONG
,      FIELD_CUSTOM
,  
 292       0,        1,      "BlackLevel" }, 
 293     { TIFFTAG_BLACKLEVEL
,       -1, -1, TIFF_SHORT
,     FIELD_CUSTOM
,  
 294       0,        1,      "BlackLevel" }, 
 295     { TIFFTAG_BLACKLEVEL
,       -1, -1, TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 296       0,        1,      "BlackLevel" }, 
 297     { TIFFTAG_BLACKLEVELDELTAH
, -1, -1, TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 298       0,        1,      "BlackLevelDeltaH" }, 
 299     { TIFFTAG_BLACKLEVELDELTAV
, -1, -1, TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 300       0,        1,      "BlackLevelDeltaV" }, 
 301     { TIFFTAG_WHITELEVEL
,       -2, -2, TIFF_LONG
,      FIELD_CUSTOM
,  
 302       0,        0,      "WhiteLevel" }, 
 303     { TIFFTAG_WHITELEVEL
,       -2, -2, TIFF_SHORT
,     FIELD_CUSTOM
,  
 304       0,        0,      "WhiteLevel" }, 
 305     { TIFFTAG_DEFAULTSCALE
,     2, 2,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 306       0,        0,      "DefaultScale" }, 
 307     { TIFFTAG_BESTQUALITYSCALE
, 1, 1,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 308       0,        0,      "BestQualityScale" }, 
 309     { TIFFTAG_DEFAULTCROPORIGIN
,        2, 2,   TIFF_LONG
,      FIELD_CUSTOM
,  
 310       0,        0,      "DefaultCropOrigin" }, 
 311     { TIFFTAG_DEFAULTCROPORIGIN
,        2, 2,   TIFF_SHORT
,     FIELD_CUSTOM
,  
 312       0,        0,      "DefaultCropOrigin" }, 
 313     { TIFFTAG_DEFAULTCROPORIGIN
,        2, 2,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 314       0,        0,      "DefaultCropOrigin" }, 
 315     { TIFFTAG_DEFAULTCROPSIZE
,  2, 2,   TIFF_LONG
,      FIELD_CUSTOM
,  
 316       0,        0,      "DefaultCropSize" }, 
 317     { TIFFTAG_DEFAULTCROPSIZE
,  2, 2,   TIFF_SHORT
,     FIELD_CUSTOM
,  
 318       0,        0,      "DefaultCropSize" }, 
 319     { TIFFTAG_DEFAULTCROPSIZE
,  2, 2,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 320       0,        0,      "DefaultCropSize" }, 
 321     { TIFFTAG_COLORMATRIX1
,     -1, -1, TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 322       0,        1,      "ColorMatrix1" }, 
 323     { TIFFTAG_COLORMATRIX2
,     -1, -1, TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 324       0,        1,      "ColorMatrix2" }, 
 325     { TIFFTAG_CAMERACALIBRATION1
,       -1, -1, TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 326       0,        1,      "CameraCalibration1" }, 
 327     { TIFFTAG_CAMERACALIBRATION2
,       -1, -1, TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 328       0,        1,      "CameraCalibration2" }, 
 329     { TIFFTAG_REDUCTIONMATRIX1
, -1, -1, TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 330       0,        1,      "ReductionMatrix1" }, 
 331     { TIFFTAG_REDUCTIONMATRIX2
, -1, -1, TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 332       0,        1,      "ReductionMatrix2" }, 
 333     { TIFFTAG_ANALOGBALANCE
,    -1, -1, TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 334       0,        1,      "AnalogBalance" }, 
 335     { TIFFTAG_ASSHOTNEUTRAL
,    -1, -1, TIFF_SHORT
,     FIELD_CUSTOM
,  
 336       0,        1,      "AsShotNeutral" }, 
 337     { TIFFTAG_ASSHOTNEUTRAL
,    -1, -1, TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 338       0,        1,      "AsShotNeutral" }, 
 339     { TIFFTAG_ASSHOTWHITEXY
,    2, 2,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 340       0,        0,      "AsShotWhiteXY" }, 
 341     { TIFFTAG_BASELINEEXPOSURE
, 1, 1,   TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 342       0,        0,      "BaselineExposure" }, 
 343     { TIFFTAG_BASELINENOISE
,    1, 1,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 344       0,        0,      "BaselineNoise" }, 
 345     { TIFFTAG_BASELINESHARPNESS
,        1, 1,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 346       0,        0,      "BaselineSharpness" }, 
 347     { TIFFTAG_BAYERGREENSPLIT
,  1, 1,   TIFF_LONG
,      FIELD_CUSTOM
,  
 348       0,        0,      "BayerGreenSplit" }, 
 349     { TIFFTAG_LINEARRESPONSELIMIT
,      1, 1,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 350       0,        0,      "LinearResponseLimit" }, 
 351     { TIFFTAG_CAMERASERIALNUMBER
,    -1, -1, TIFF_ASCII
,        FIELD_CUSTOM
, 
 352       1,        0,      "CameraSerialNumber" }, 
 353     { TIFFTAG_LENSINFO
, 4, 4,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 355     { TIFFTAG_CHROMABLURRADIUS
, 1, 1,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 356       0,        0,      "ChromaBlurRadius" }, 
 357     { TIFFTAG_ANTIALIASSTRENGTH
,        1, 1,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 358       0,        0,      "AntiAliasStrength" }, 
 359     { TIFFTAG_SHADOWSCALE
,      1, 1,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 360       0,        0,      "ShadowScale" }, 
 361     { TIFFTAG_DNGPRIVATEDATA
,    -1, -1, TIFF_BYTE
,     FIELD_CUSTOM
, 
 362       0,        1,      "DNGPrivateData" }, 
 363     { TIFFTAG_MAKERNOTESAFETY
,  1, 1,   TIFF_SHORT
,     FIELD_CUSTOM
,  
 364       0,        0,      "MakerNoteSafety" }, 
 365     { TIFFTAG_CALIBRATIONILLUMINANT1
,   1, 1,   TIFF_SHORT
,     FIELD_CUSTOM
,  
 366       0,        0,      "CalibrationIlluminant1" }, 
 367     { TIFFTAG_CALIBRATIONILLUMINANT2
,   1, 1,   TIFF_SHORT
,     FIELD_CUSTOM
,  
 368       0,        0,      "CalibrationIlluminant2" }, 
 369     { TIFFTAG_RAWDATAUNIQUEID
,  16, 16, TIFF_BYTE
,      FIELD_CUSTOM
,  
 370       0,        0,      "RawDataUniqueID" }, 
 371     { TIFFTAG_ORIGINALRAWFILENAME
,    -1, -1, TIFF_ASCII
,       FIELD_CUSTOM
, 
 372       1,        0,      "OriginalRawFileName" }, 
 373     { TIFFTAG_ORIGINALRAWFILENAME
,    -1, -1, TIFF_BYTE
,        FIELD_CUSTOM
, 
 374       1,        1,      "OriginalRawFileName" }, 
 375     { TIFFTAG_ORIGINALRAWFILEDATA
,    -1, -1, TIFF_UNDEFINED
,   FIELD_CUSTOM
, 
 376       0,        1,      "OriginalRawFileData" }, 
 377     { TIFFTAG_ACTIVEAREA
,       4, 4,   TIFF_LONG
,      FIELD_CUSTOM
,  
 378       0,        0,      "ActiveArea" }, 
 379     { TIFFTAG_ACTIVEAREA
,       4, 4,   TIFF_SHORT
,     FIELD_CUSTOM
,  
 380       0,        0,      "ActiveArea" }, 
 381     { TIFFTAG_MASKEDAREAS
,      -1, -1, TIFF_LONG
,      FIELD_CUSTOM
,  
 382       0,        1,      "MaskedAreas" }, 
 383     { TIFFTAG_ASSHOTICCPROFILE
,    -1, -1, TIFF_UNDEFINED
,      FIELD_CUSTOM
, 
 384       0,        1,      "AsShotICCProfile" }, 
 385     { TIFFTAG_ASSHOTPREPROFILEMATRIX
,   -1, -1, TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 386       0,        1,      "AsShotPreProfileMatrix" }, 
 387     { TIFFTAG_CURRENTICCPROFILE
,    -1, -1, TIFF_UNDEFINED
,     FIELD_CUSTOM
, 
 388       0,        1,      "CurrentICCProfile" }, 
 389     { TIFFTAG_CURRENTPREPROFILEMATRIX
,  -1, -1, TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 390       0,        1,      "CurrentPreProfileMatrix" }, 
 394 static const TIFFFieldInfo
 
 396     { EXIFTAG_EXPOSURETIME
,     1, 1,           TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 397       1,        0,      "ExposureTime" }, 
 398     { EXIFTAG_FNUMBER
,          1, 1,           TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 400     { EXIFTAG_EXPOSUREPROGRAM
,  1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 401       1,        0,      "ExposureProgram" }, 
 402     { EXIFTAG_SPECTRALSENSITIVITY
,    -1, -1,   TIFF_ASCII
,     FIELD_CUSTOM
, 
 403       1,        0,      "SpectralSensitivity" }, 
 404     { EXIFTAG_ISOSPEEDRATINGS
,  -1, -1,         TIFF_SHORT
,     FIELD_CUSTOM
, 
 405       1,        1,      "ISOSpeedRatings" }, 
 406     { EXIFTAG_OECF
,     -1, -1,                 TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 407       1,        1,      "OptoelectricConversionFactor" }, 
 408     { EXIFTAG_EXIFVERSION
,      4, 4,           TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 409       1,        0,      "ExifVersion" }, 
 410     { EXIFTAG_DATETIMEORIGINAL
, 20, 20,         TIFF_ASCII
,     FIELD_CUSTOM
, 
 411       1,        0,      "DateTimeOriginal" }, 
 412     { EXIFTAG_DATETIMEDIGITIZED
, 20, 20,        TIFF_ASCII
,     FIELD_CUSTOM
, 
 413       1,        0,      "DateTimeDigitized" }, 
 414     { EXIFTAG_COMPONENTSCONFIGURATION
,   4, 4,  TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 415       1,        0,      "ComponentsConfiguration" }, 
 416     { EXIFTAG_COMPRESSEDBITSPERPIXEL
,    1, 1,  TIFF_RATIONAL
,  FIELD_CUSTOM
, 
 417       1,        0,      "CompressedBitsPerPixel" }, 
 418     { EXIFTAG_SHUTTERSPEEDVALUE
,        1, 1,   TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 419       1,        0,      "ShutterSpeedValue" }, 
 420     { EXIFTAG_APERTUREVALUE
,    1, 1,           TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 421       1,        0,      "ApertureValue" }, 
 422     { EXIFTAG_BRIGHTNESSVALUE
,  1, 1,           TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 423       1,        0,      "BrightnessValue" }, 
 424     { EXIFTAG_EXPOSUREBIASVALUE
,        1, 1,   TIFF_SRATIONAL
, FIELD_CUSTOM
,  
 425       1,        0,      "ExposureBiasValue" }, 
 426     { EXIFTAG_MAXAPERTUREVALUE
, 1, 1,           TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 427       1,        0,      "MaxApertureValue" }, 
 428     { EXIFTAG_SUBJECTDISTANCE
,  1, 1,           TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 429       1,        0,      "SubjectDistance" }, 
 430     { EXIFTAG_METERINGMODE
,     1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 431       1,        0,      "MeteringMode" }, 
 432     { EXIFTAG_LIGHTSOURCE
,      1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 433       1,        0,      "LightSource" }, 
 434     { EXIFTAG_FLASH
,    1, 1,                   TIFF_SHORT
,     FIELD_CUSTOM
, 
 436     { EXIFTAG_FOCALLENGTH
,      1, 1,           TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 437       1,        0,      "FocalLength" }, 
 438     { EXIFTAG_SUBJECTAREA
,      -1, -1,         TIFF_SHORT
,     FIELD_CUSTOM
, 
 439       1,        1,      "SubjectArea" }, 
 440     { EXIFTAG_MAKERNOTE
,        -1, -1,         TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 442     { EXIFTAG_USERCOMMENT
,      -1, -1,         TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 443       1,        1,      "UserComment" }, 
 444     { EXIFTAG_SUBSECTIME
,    -1, -1,            TIFF_ASCII
,     FIELD_CUSTOM
, 
 445       1,        0,      "SubSecTime" }, 
 446     { EXIFTAG_SUBSECTIMEORIGINAL
, -1, -1,       TIFF_ASCII
,     FIELD_CUSTOM
, 
 447       1,        0,      "SubSecTimeOriginal" }, 
 448     { EXIFTAG_SUBSECTIMEDIGITIZED
,-1, -1,       TIFF_ASCII
,     FIELD_CUSTOM
, 
 449       1,        0,      "SubSecTimeDigitized" }, 
 450     { EXIFTAG_FLASHPIXVERSION
,  4, 4,           TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 451       1,        0,      "FlashpixVersion" }, 
 452     { EXIFTAG_PIXELXDIMENSION
,  1, 1,           TIFF_LONG
,      FIELD_CUSTOM
, 
 453       1,        0,      "PixelXDimension" }, 
 454     { EXIFTAG_PIXELXDIMENSION
,  1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 455       1,        0,      "PixelXDimension" }, 
 456     { EXIFTAG_PIXELYDIMENSION
,  1, 1,           TIFF_LONG
,      FIELD_CUSTOM
, 
 457       1,        0,      "PixelYDimension" }, 
 458     { EXIFTAG_PIXELYDIMENSION
,  1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 459       1,        0,      "PixelYDimension" }, 
 460     { EXIFTAG_RELATEDSOUNDFILE
, 13, 13,         TIFF_ASCII
,     FIELD_CUSTOM
, 
 461       1,        0,      "RelatedSoundFile" }, 
 462     { EXIFTAG_FLASHENERGY
,      1, 1,           TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 463       1,        0,      "FlashEnergy" }, 
 464     { EXIFTAG_SPATIALFREQUENCYRESPONSE
, -1, -1, TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 465       1,        1,      "SpatialFrequencyResponse" }, 
 466     { EXIFTAG_FOCALPLANEXRESOLUTION
,    1, 1,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 467       1,        0,      "FocalPlaneXResolution" }, 
 468     { EXIFTAG_FOCALPLANEYRESOLUTION
,    1, 1,   TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 469       1,        0,      "FocalPlaneYResolution" }, 
 470     { EXIFTAG_FOCALPLANERESOLUTIONUNIT
, 1, 1,   TIFF_SHORT
,     FIELD_CUSTOM
, 
 471       1,        0,      "FocalPlaneResolutionUnit" }, 
 472     { EXIFTAG_SUBJECTLOCATION
,  2, 2,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 473       1,        0,      "SubjectLocation" }, 
 474     { EXIFTAG_EXPOSUREINDEX
,    1, 1,           TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 475       1,        0,      "ExposureIndex" }, 
 476     { EXIFTAG_SENSINGMETHOD
,    1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 477       1,        0,      "SensingMethod" }, 
 478     { EXIFTAG_FILESOURCE
,       1, 1,           TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 479       1,        0,      "FileSource" }, 
 480     { EXIFTAG_SCENETYPE
,        1, 1,           TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 482     { EXIFTAG_CFAPATTERN
,       -1, -1,         TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 483       1,        1,      "CFAPattern" }, 
 484     { EXIFTAG_CUSTOMRENDERED
,   1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 485       1,        0,      "CustomRendered" }, 
 486     { EXIFTAG_EXPOSUREMODE
,     1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 487       1,        0,      "ExposureMode" }, 
 488     { EXIFTAG_WHITEBALANCE
,     1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 489       1,        0,      "WhiteBalance" }, 
 490     { EXIFTAG_DIGITALZOOMRATIO
, 1, 1,           TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 491       1,        0,      "DigitalZoomRatio" }, 
 492     { EXIFTAG_FOCALLENGTHIN35MMFILM
, 1, 1,      TIFF_SHORT
,     FIELD_CUSTOM
, 
 493       1,        0,      "FocalLengthIn35mmFilm" }, 
 494     { EXIFTAG_SCENECAPTURETYPE
, 1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 495       1,        0,      "SceneCaptureType" }, 
 496     { EXIFTAG_GAINCONTROL
,      1, 1,           TIFF_RATIONAL
,  FIELD_CUSTOM
,  
 497       1,        0,      "GainControl" }, 
 498     { EXIFTAG_CONTRAST
,         1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 500     { EXIFTAG_SATURATION
,       1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 501       1,        0,      "Saturation" }, 
 502     { EXIFTAG_SHARPNESS
,        1, 1,           TIFF_SHORT
,     FIELD_CUSTOM
, 
 504     { EXIFTAG_DEVICESETTINGDESCRIPTION
, -1, -1, TIFF_UNDEFINED
, FIELD_CUSTOM
, 
 505       1,        1,      "DeviceSettingDescription" }, 
 506     { EXIFTAG_SUBJECTDISTANCERANGE
, 1, 1,       TIFF_SHORT
,     FIELD_CUSTOM
, 
 507       1,        0,      "SubjectDistanceRange" }, 
 508     { EXIFTAG_IMAGEUNIQUEID
,    33, 33,         TIFF_ASCII
,     FIELD_CUSTOM
, 
 509       1,        0,      "ImageUniqueID" } 
 512 const TIFFFieldInfo 
* 
 513 _TIFFGetFieldInfo(size_t *size
) 
 515         *size 
= TIFFArrayCount(tiffFieldInfo
); 
 516         return tiffFieldInfo
; 
 519 const TIFFFieldInfo 
* 
 520 _TIFFGetExifFieldInfo(size_t *size
) 
 522         *size 
= TIFFArrayCount(exifFieldInfo
); 
 523         return exifFieldInfo
; 
 527 _TIFFSetupFieldInfo(TIFF
* tif
, const TIFFFieldInfo info
[], size_t n
) 
 529         if (tif
->tif_fieldinfo
) { 
 532                 for (i 
= 0; i 
< tif
->tif_nfields
; i
++)  
 534                         TIFFFieldInfo 
*fld 
= tif
->tif_fieldinfo
[i
]; 
 535                         if (fld
->field_bit 
== FIELD_CUSTOM 
&&  
 536                                 strncmp("Tag ", fld
->field_name
, 4) == 0) { 
 537                                         _TIFFfree(fld
->field_name
); 
 542                 _TIFFfree(tif
->tif_fieldinfo
); 
 543                 tif
->tif_nfields 
= 0; 
 545         _TIFFMergeFieldInfo(tif
, info
, n
); 
 549 tagCompare(const void* a
, const void* b
) 
 551         const TIFFFieldInfo
* ta 
= *(const TIFFFieldInfo
**) a
; 
 552         const TIFFFieldInfo
* tb 
= *(const TIFFFieldInfo
**) b
; 
 553         /* NB: be careful of return values for 16-bit platforms */ 
 554         if (ta
->field_tag 
!= tb
->field_tag
) 
 555                 return (ta
->field_tag 
< tb
->field_tag 
? -1 : 1); 
 557                 return ((int)tb
->field_type 
- (int)ta
->field_type
); 
 561 tagNameCompare(const void* a
, const void* b
) 
 563         const TIFFFieldInfo
* ta 
= *(const TIFFFieldInfo
**) a
; 
 564         const TIFFFieldInfo
* tb 
= *(const TIFFFieldInfo
**) b
; 
 566         return strcmp(ta
->field_name
, tb
->field_name
); 
 570 _TIFFMergeFieldInfo(TIFF
* tif
, const TIFFFieldInfo info
[], int n
) 
 575         tif
->tif_foundfield 
= NULL
; 
 577         if (tif
->tif_nfields 
> 0) { 
 578                 tif
->tif_fieldinfo 
= (TIFFFieldInfo
**) 
 579                     _TIFFrealloc(tif
->tif_fieldinfo
, 
 580                         (tif
->tif_nfields
+n
) * sizeof (TIFFFieldInfo
*)); 
 582                 tif
->tif_fieldinfo 
= (TIFFFieldInfo
**) 
 583                     _TIFFmalloc(n 
* sizeof (TIFFFieldInfo
*)); 
 585         assert(tif
->tif_fieldinfo 
!= NULL
); 
 586         tp 
= tif
->tif_fieldinfo 
+ tif
->tif_nfields
; 
 587         for (i 
= 0; i 
< n
; i
++) 
 588                 *tp
++ = (TIFFFieldInfo
*) (info 
+ i
);    /* XXX */ 
 590         /* Sort the field info by tag number */ 
 591         qsort(tif
->tif_fieldinfo
, tif
->tif_nfields 
+= n
, 
 592               sizeof (TIFFFieldInfo
*), tagCompare
); 
 596 _TIFFPrintFieldInfo(TIFF
* tif
, FILE* fd
) 
 600         fprintf(fd
, "%s: \n", tif
->tif_name
); 
 601         for (i 
= 0; i 
< tif
->tif_nfields
; i
++) { 
 602                 const TIFFFieldInfo
* fip 
= tif
->tif_fieldinfo
[i
]; 
 603                 fprintf(fd
, "field[%2d] %5lu, %2d, %2d, %d, %2d, %5s, %5s, %s\n" 
 605                         , (unsigned long) fip
->field_tag
 
 606                         , fip
->field_readcount
, fip
->field_writecount
 
 609                         , fip
->field_oktochange 
? "TRUE" : "FALSE" 
 610                         , fip
->field_passcount 
? "TRUE" : "FALSE" 
 617  * Return size of TIFFDataType in bytes 
 620 TIFFDataWidth(TIFFDataType type
) 
 624         case 0:  /* nothing */ 
 625         case 1:  /* TIFF_BYTE */ 
 626         case 2:  /* TIFF_ASCII */ 
 627         case 6:  /* TIFF_SBYTE */ 
 628         case 7:  /* TIFF_UNDEFINED */ 
 630         case 3:  /* TIFF_SHORT */ 
 631         case 8:  /* TIFF_SSHORT */ 
 633         case 4:  /* TIFF_LONG */ 
 634         case 9:  /* TIFF_SLONG */ 
 635         case 11: /* TIFF_FLOAT */ 
 636         case 13: /* TIFF_IFD */ 
 638         case 5:  /* TIFF_RATIONAL */ 
 639         case 10: /* TIFF_SRATIONAL */ 
 640         case 12: /* TIFF_DOUBLE */ 
 643                 return 0; /* will return 0 for unknown types */ 
 648  * Return size of TIFFDataType in bytes. 
 650  * XXX: We need a separate function to determine the space needed 
 651  * to store the value. For TIFF_RATIONAL values TIFFDataWidth() returns 8, 
 652  * but we use 4-byte float to represent rationals. 
 655 _TIFFDataSize(TIFFDataType type
) 
 681  * Return nearest TIFFDataType to the sample type of an image. 
 684 _TIFFSampleToTagType(TIFF
* tif
) 
 686         uint32 bps 
= TIFFhowmany8(tif
->tif_dir
.td_bitspersample
); 
 688         switch (tif
->tif_dir
.td_sampleformat
) { 
 689         case SAMPLEFORMAT_IEEEFP
: 
 690                 return (bps 
== 4 ? TIFF_FLOAT 
: TIFF_DOUBLE
); 
 691         case SAMPLEFORMAT_INT
: 
 692                 return (bps 
<= 1 ? TIFF_SBYTE 
: 
 693                     bps 
<= 2 ? TIFF_SSHORT 
: TIFF_SLONG
); 
 694         case SAMPLEFORMAT_UINT
: 
 695                 return (bps 
<= 1 ? TIFF_BYTE 
: 
 696                     bps 
<= 2 ? TIFF_SHORT 
: TIFF_LONG
); 
 697         case SAMPLEFORMAT_VOID
: 
 698                 return (TIFF_UNDEFINED
); 
 701         return (TIFF_UNDEFINED
); 
 705 _TIFFFindFieldInfo(TIFF
* tif
, ttag_t tag
, TIFFDataType dt
) 
 709         if (tif
->tif_foundfield 
&& tif
->tif_foundfield
->field_tag 
== tag 
&& 
 710             (dt 
== TIFF_ANY 
|| dt 
== tif
->tif_foundfield
->field_type
)) 
 711                 return (tif
->tif_foundfield
); 
 712         /* NB: use sorted search (e.g. binary search) */ 
 714             TIFFFieldInfo key 
= {0, 0, 0, TIFF_NOTYPE
, 0, 0, 0, 0}; 
 715             TIFFFieldInfo
* pkey 
= &key
; 
 716             const TIFFFieldInfo 
**ret
; 
 721             ret 
= (const TIFFFieldInfo 
**) bsearch(&pkey
, 
 724                                                    sizeof(TIFFFieldInfo 
*),  
 726             return (ret
) ? (*ret
) : NULL
; 
 727         } else for (i 
= 0, n 
= tif
->tif_nfields
; i 
< n
; i
++) { 
 728                 const TIFFFieldInfo
* fip 
= tif
->tif_fieldinfo
[i
]; 
 729                 if (fip
->field_tag 
== tag 
&& 
 730                     (dt 
== TIFF_ANY 
|| fip
->field_type 
== dt
)) 
 731                         return (tif
->tif_foundfield 
= fip
); 
 733         return ((const TIFFFieldInfo 
*)0); 
 737 _TIFFFindFieldInfoByName(TIFF
* tif
, const char *field_name
, TIFFDataType dt
) 
 741         if (tif
->tif_foundfield
 
 742             && streq(tif
->tif_foundfield
->field_name
, field_name
) 
 743             && (dt 
== TIFF_ANY 
|| dt 
== tif
->tif_foundfield
->field_type
)) 
 744                 return (tif
->tif_foundfield
); 
 745         /* NB: use sorted search (e.g. binary search) */ 
 747             TIFFFieldInfo key 
= {0, 0, 0, TIFF_NOTYPE
, 0, 0, 0, 0}; 
 748             TIFFFieldInfo
* pkey 
= &key
; 
 749             const TIFFFieldInfo 
**ret
; 
 751             key
.field_name 
= (char *)field_name
; 
 754             ret 
= (const TIFFFieldInfo 
**) lfind(&pkey
, 
 757                                                  sizeof(TIFFFieldInfo 
*), 
 759             return (ret
) ? (*ret
) : NULL
; 
 761                 for (i 
= 0, n 
= tif
->tif_nfields
; i 
< n
; i
++) { 
 762                         const TIFFFieldInfo
* fip 
= tif
->tif_fieldinfo
[i
]; 
 763                         if (streq(fip
->field_name
, field_name
) && 
 764                             (dt 
== TIFF_ANY 
|| fip
->field_type 
== dt
)) 
 765                                 return (tif
->tif_foundfield 
= fip
); 
 767         return ((const TIFFFieldInfo 
*)0); 
 771 _TIFFFieldWithTag(TIFF
* tif
, ttag_t tag
) 
 773         const TIFFFieldInfo
* fip 
= _TIFFFindFieldInfo(tif
, tag
, TIFF_ANY
); 
 775                 TIFFErrorExt(tif
->tif_clientdata
, "TIFFFieldWithTag", 
 776                           "Internal error, unknown tag 0x%x", 
 785 _TIFFFieldWithName(TIFF
* tif
, const char *field_name
) 
 787         const TIFFFieldInfo
* fip 
= 
 788                 _TIFFFindFieldInfoByName(tif
, field_name
, TIFF_ANY
); 
 790                 TIFFErrorExt(tif
->tif_clientdata
, "TIFFFieldWithName", 
 791                           "Internal error, unknown tag %s", field_name
); 
 799 _TIFFFindOrRegisterFieldInfo( TIFF 
*tif
, ttag_t tag
, TIFFDataType dt 
) 
 802     const TIFFFieldInfo 
*fld
; 
 804     fld 
= _TIFFFindFieldInfo( tif
, tag
, dt 
); 
 807         fld 
= _TIFFCreateAnonFieldInfo( tif
, tag
, dt 
); 
 808         _TIFFMergeFieldInfo( tif
, fld
, 1 ); 
 815 _TIFFCreateAnonFieldInfo(TIFF 
*tif
, ttag_t tag
, TIFFDataType field_type
) 
 820         fld 
= (TIFFFieldInfo 
*) _TIFFmalloc(sizeof (TIFFFieldInfo
)); 
 823         _TIFFmemset( fld
, 0, sizeof(TIFFFieldInfo
) ); 
 825         fld
->field_tag 
= tag
; 
 826         fld
->field_readcount 
= TIFF_VARIABLE
; 
 827         fld
->field_writecount 
= TIFF_VARIABLE
; 
 828         fld
->field_type 
= field_type
; 
 829         fld
->field_bit 
= FIELD_CUSTOM
; 
 830         fld
->field_oktochange 
= TRUE
; 
 831         fld
->field_passcount 
= TRUE
; 
 832         fld
->field_name 
= (char *) _TIFFmalloc(32); 
 833         if (fld
->field_name 
== NULL
) { 
 838         /* note that this name is a special sign to TIFFClose() and 
 839          * _TIFFSetupFieldInfo() to free the field 
 841         sprintf(fld
->field_name
, "Tag %d", (int) tag
); 
 846 /* vim: set ts=8 sts=8 sw=8 noet: */