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  
  31  * TIFF I/O Library Definitions. 
  37  * TIFF is defined as an incomplete type to hide the 
  38  * library's internal data structures from clients. 
  40 typedef struct tiff TIFF
; 
  43  * The following typedefs define the intrinsic size of 
  44  * data types used in the *exported* interfaces.  These 
  45  * definitions depend on the proper definition of types 
  46  * in tiff.h.  Note also that the varargs interface used 
  47  * to pass tag types and values uses the types defined in 
  50  * NB: ttag_t is unsigned int and not unsigned short because 
  51  *     ANSI C requires that the type before the ellipsis be a 
  52  *     promoted type (i.e. one of int, unsigned int, pointer, 
  53  *     or double) and because we defined pseudo-tags that are 
  54  *     outside the range of legal Aldus-assigned tags. 
  55  * NB: tsize_t is int32 and not uint32 because some functions 
  57  * NB: toff_t is not off_t for many reasons; TIFFs max out at 
  58  *     32-bit file offsets being the most important, and to ensure 
  59  *     that it is unsigned, rather than signed. 
  61 typedef uint32 ttag_t
;          /* directory tag */ 
  62 typedef uint16 tdir_t
;          /* directory index */ 
  63 typedef uint16 tsample_t
;       /* sample number */ 
  64 typedef uint32 tstrip_t
;        /* strip number */ 
  65 typedef uint32 ttile_t
;         /* tile number */ 
  66 typedef int32 tsize_t
;          /* i/o size in bytes */ 
  67 typedef void* tdata_t
;          /* image data ref */ 
  68 typedef uint32 toff_t
;          /* file offset */ 
  70 #if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32)) 
  75  * On windows you should define USE_WIN32_FILEIO if you are using tif_win32.c 
  76  * or AVOID_WIN32_FILEIO if you are using something else (like tif_unix.c). 
  78  * By default tif_win32.c is assumed on windows if not using the cygwin 
  82 #if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows) 
  83 #  if !defined(__CYGWIN) && !defined(AVOID_WIN32_FILEIO) && !defined(USE_WIN32_FILIO) 
  84 #    define USE_WIN32_FILEIO 
  88 #if defined(USE_WIN32_FILEIO) 
  91 DECLARE_HANDLE(thandle_t
);      /* Win32 file handle */ 
  93 typedef HFILE thandle_t
;        /* client data handle */ 
  96 typedef void* thandle_t
;        /* client data handle */ 
 104  * Flags to pass to TIFFPrintDirectory to control 
 105  * printing of data structures that are potentially 
 106  * very large.   Bit-or these flags to enable printing 
 109 #define TIFFPRINT_NONE          0x0             /* no extra info */ 
 110 #define TIFFPRINT_STRIPS        0x1             /* strips/tiles info */ 
 111 #define TIFFPRINT_CURVES        0x2             /* color/gray response curves */ 
 112 #define TIFFPRINT_COLORMAP      0x4             /* colormap */ 
 113 #define TIFFPRINT_JPEGQTABLES   0x100           /* JPEG Q matrices */ 
 114 #define TIFFPRINT_JPEGACTABLES  0x200           /* JPEG AC tables */ 
 115 #define TIFFPRINT_JPEGDCTABLES  0x200           /* JPEG DC tables */ 
 118  * Colour conversion stuff 
 121 /* reference white */ 
 122 #define D65_X0 (95.0470F) 
 123 #define D65_Y0 (100.0F) 
 124 #define D65_Z0 (108.8827F) 
 126 #define D50_X0 (96.4250F) 
 127 #define D50_Y0 (100.0F) 
 128 #define D50_Z0 (82.4680F) 
 130 /* Structure for holding information about a display device. */ 
 132 typedef unsigned char TIFFRGBValue
;             /* 8-bit samples */ 
 135         float d_mat
[3][3];              /* XYZ -> luminance matrix */ 
 136         float d_YCR
;                    /* Light o/p for reference white */ 
 139         uint32 d_Vrwr
;                  /* Pixel values for ref. white */ 
 142         float d_Y0R
;                    /* Residual light for black pixel */ 
 145         float d_gammaR
;                 /* Gamma values for the three guns */ 
 150 typedef struct {                                /* YCbCr->RGB support */ 
 151         TIFFRGBValue
* clamptab
;                 /* range clamping table */ 
 159 typedef struct {                                /* CIE Lab 1976->RGB support */ 
 160         int     range
;                          /* Size of conversion table */ 
 161 #define CIELABTORGB_TABLE_RANGE 1500 
 162         float   rstep
, gstep
, bstep
; 
 163         float   X0
, Y0
, Z0
;                     /* Reference white point */ 
 165         float   Yr2r
[CIELABTORGB_TABLE_RANGE 
+ 1];  /* Conversion of Yr to r */ 
 166         float   Yg2g
[CIELABTORGB_TABLE_RANGE 
+ 1];  /* Conversion of Yg to g */ 
 167         float   Yb2b
[CIELABTORGB_TABLE_RANGE 
+ 1];  /* Conversion of Yb to b */ 
 170 extern int TIFFCIELabToRGBInit(TIFFCIELabToRGB
*, TIFFDisplay 
*, float*); 
 171 extern void TIFFCIELabToXYZ(TIFFCIELabToRGB 
*, uint32
, int32
, int32
, 
 172                             float *, float *, float *); 
 173 extern void TIFFXYZToRGB(TIFFCIELabToRGB 
*, float, float, float, 
 174                          uint32 
*, uint32 
*, uint32 
*); 
 176 extern int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB
*, float*, float*); 
 177 extern void TIFFYCbCrtoRGB(TIFFYCbCrToRGB 
*, uint32
, int32
, int32
, 
 178                            uint32 
*, uint32 
*, uint32 
*); 
 181  * RGBA-style image support. 
 183 typedef struct _TIFFRGBAImage TIFFRGBAImage
; 
 185  * The image reading and conversion routines invoke 
 186  * ``put routines'' to copy/image/whatever tiles of 
 187  * raw image data.  A default set of routines are  
 188  * provided to convert/copy raw image data to 8-bit 
 189  * packed ABGR format rasters.  Applications can supply 
 190  * alternate routines that unpack the data into a 
 191  * different format or, for example, unpack the data 
 192  * and draw the unpacked raster on the display. 
 194 typedef void (*tileContigRoutine
) 
 195     (TIFFRGBAImage
*, uint32
*, uint32
, uint32
, uint32
, uint32
, int32
, int32
, 
 197 typedef void (*tileSeparateRoutine
) 
 198     (TIFFRGBAImage
*, uint32
*, uint32
, uint32
, uint32
, uint32
, int32
, int32
, 
 199         unsigned char*, unsigned char*, unsigned char*, unsigned char*); 
 203 struct _TIFFRGBAImage 
{ 
 204         TIFF
*   tif
;                            /* image handle */ 
 205         int     stoponerr
;                      /* stop on read error */ 
 206         int     isContig
;                       /* data is packed/separate */ 
 207         int     alpha
;                          /* type of alpha data present */ 
 208         uint32  width
;                          /* image width */ 
 209         uint32  height
;                         /* image height */ 
 210         uint16  bitspersample
;                  /* image bits/sample */ 
 211         uint16  samplesperpixel
;                /* image samples/pixel */ 
 212         uint16  orientation
;                    /* image orientation */ 
 213         uint16  req_orientation
;                /* requested orientation */ 
 214         uint16  photometric
;                    /* image photometric interp */ 
 215         uint16
* redcmap
;                        /* colormap pallete */ 
 218                                                 /* get image data routine */ 
 219         int     (*get
)(TIFFRGBAImage
*, uint32
*, uint32
, uint32
); 
 221             void (*any
)(TIFFRGBAImage
*); 
 222             tileContigRoutine   contig
; 
 223             tileSeparateRoutine separate
; 
 224         } put
;                                  /* put decoded strip/tile */ 
 225         TIFFRGBValue
* Map
;                      /* sample mapping array */ 
 226         uint32
** BWmap
;                         /* black&white map */ 
 227         uint32
** PALmap
;                        /* palette image map */ 
 228         TIFFYCbCrToRGB
* ycbcr
;                  /* YCbCr conversion state */ 
 229         TIFFCIELabToRGB
* cielab
;                /* CIE L*a*b conversion state */ 
 236  * Macros for extracting components from the 
 237  * packed ABGR form returned by TIFFReadRGBAImage. 
 239 #define TIFFGetR(abgr)  ((abgr) & 0xff) 
 240 #define TIFFGetG(abgr)  (((abgr) >> 8) & 0xff) 
 241 #define TIFFGetB(abgr)  (((abgr) >> 16) & 0xff) 
 242 #define TIFFGetA(abgr)  (((abgr) >> 24) & 0xff) 
 245  * A CODEC is a software package that implements decoding, 
 246  * encoding, or decoding+encoding of a compression algorithm. 
 247  * The library provides a collection of builtin codecs. 
 248  * More codecs may be registered through calls to the library 
 249  * and/or the builtin implementations may be overridden. 
 251 typedef int (*TIFFInitMethod
)(TIFF
*, int); 
 261 /* share internal LogLuv conversion routines? */ 
 262 #ifndef LOGLUV_PUBLIC 
 263 #define LOGLUV_PUBLIC           1        
 266 #if defined(__cplusplus) 
 269 typedef void (*TIFFErrorHandler
)(const char*, const char*, va_list); 
 270 typedef tsize_t (*TIFFReadWriteProc
)(thandle_t
, tdata_t
, tsize_t
); 
 271 typedef toff_t (*TIFFSeekProc
)(thandle_t
, toff_t
, int); 
 272 typedef int (*TIFFCloseProc
)(thandle_t
); 
 273 typedef toff_t (*TIFFSizeProc
)(thandle_t
); 
 274 typedef int (*TIFFMapFileProc
)(thandle_t
, tdata_t
*, toff_t
*); 
 275 typedef void (*TIFFUnmapFileProc
)(thandle_t
, tdata_t
, toff_t
); 
 276 typedef void (*TIFFExtendProc
)(TIFF
*);  
 278 extern  const char* TIFFGetVersion(void); 
 280 extern  const TIFFCodec
* TIFFFindCODEC(uint16
); 
 281 extern  TIFFCodec
* TIFFRegisterCODEC(uint16
, const char*, TIFFInitMethod
); 
 282 extern  void TIFFUnRegisterCODEC(TIFFCodec
*); 
 283 extern  int TIFFIsCODECConfigured(uint16
); 
 285 extern  tdata_t 
_TIFFmalloc(tsize_t
); 
 286 extern  tdata_t 
_TIFFrealloc(tdata_t
, tsize_t
); 
 287 extern  void _TIFFmemset(tdata_t
, int, tsize_t
); 
 288 extern  void _TIFFmemcpy(tdata_t
, const tdata_t
, tsize_t
); 
 289 extern  int _TIFFmemcmp(const tdata_t
, const tdata_t
, tsize_t
); 
 290 extern  void _TIFFfree(tdata_t
); 
 292 extern  void TIFFClose(TIFF
*); 
 293 extern  int TIFFFlush(TIFF
*); 
 294 extern  int TIFFFlushData(TIFF
*); 
 295 extern  int TIFFGetField(TIFF
*, ttag_t
, ...); 
 296 extern  int TIFFVGetField(TIFF
*, ttag_t
, va_list); 
 297 extern  int TIFFGetFieldDefaulted(TIFF
*, ttag_t
, ...); 
 298 extern  int TIFFVGetFieldDefaulted(TIFF
*, ttag_t
, va_list); 
 299 extern  int TIFFReadDirectory(TIFF
*); 
 300 extern  tsize_t 
TIFFScanlineSize(TIFF
*); 
 301 extern  tsize_t 
TIFFRasterScanlineSize(TIFF
*); 
 302 extern  tsize_t 
TIFFStripSize(TIFF
*); 
 303 extern  tsize_t 
TIFFRawStripSize(TIFF
*, tstrip_t
); 
 304 extern  tsize_t 
TIFFVStripSize(TIFF
*, uint32
); 
 305 extern  tsize_t 
TIFFTileRowSize(TIFF
*); 
 306 extern  tsize_t 
TIFFTileSize(TIFF
*); 
 307 extern  tsize_t 
TIFFVTileSize(TIFF
*, uint32
); 
 308 extern  uint32 
TIFFDefaultStripSize(TIFF
*, uint32
); 
 309 extern  void TIFFDefaultTileSize(TIFF
*, uint32
*, uint32
*); 
 310 extern  int TIFFFileno(TIFF
*); 
 311 extern  int TIFFGetMode(TIFF
*); 
 312 extern  int TIFFIsTiled(TIFF
*); 
 313 extern  int TIFFIsByteSwapped(TIFF
*); 
 314 extern  int TIFFIsUpSampled(TIFF
*); 
 315 extern  int TIFFIsMSB2LSB(TIFF
*); 
 316 extern  uint32 
TIFFCurrentRow(TIFF
*); 
 317 extern  tdir_t 
TIFFCurrentDirectory(TIFF
*); 
 318 extern  tdir_t 
TIFFNumberOfDirectories(TIFF
*); 
 319 extern  uint32 
TIFFCurrentDirOffset(TIFF
*); 
 320 extern  tstrip_t 
TIFFCurrentStrip(TIFF
*); 
 321 extern  ttile_t 
TIFFCurrentTile(TIFF
*); 
 322 extern  int TIFFReadBufferSetup(TIFF
*, tdata_t
, tsize_t
); 
 323 extern  int TIFFWriteBufferSetup(TIFF
*, tdata_t
, tsize_t
); 
 324 extern  int TIFFSetupStrips(TIFF 
*); 
 325 extern  int TIFFWriteCheck(TIFF
*, int, const char *); 
 326 extern  int TIFFCreateDirectory(TIFF
*); 
 327 extern  int TIFFLastDirectory(TIFF
*); 
 328 extern  int TIFFSetDirectory(TIFF
*, tdir_t
); 
 329 extern  int TIFFSetSubDirectory(TIFF
*, uint32
); 
 330 extern  int TIFFUnlinkDirectory(TIFF
*, tdir_t
); 
 331 extern  int TIFFSetField(TIFF
*, ttag_t
, ...); 
 332 extern  int TIFFVSetField(TIFF
*, ttag_t
, va_list); 
 333 extern  int TIFFWriteDirectory(TIFF 
*); 
 334 extern  int TIFFCheckpointDirectory(TIFF 
*); 
 335 extern  int TIFFRewriteDirectory(TIFF 
*); 
 336 extern  int TIFFReassignTagToIgnore(enum TIFFIgnoreSense
, int); 
 338 #if defined(c_plusplus) || defined(__cplusplus) 
 339 extern  void TIFFPrintDirectory(TIFF
*, FILE*, long = 0); 
 340 extern  int TIFFReadScanline(TIFF
*, tdata_t
, uint32
, tsample_t 
= 0); 
 341 extern  int TIFFWriteScanline(TIFF
*, tdata_t
, uint32
, tsample_t 
= 0); 
 342 extern  int TIFFReadRGBAImage(TIFF
*, uint32
, uint32
, uint32
*, int = 0); 
 343 extern  int TIFFReadRGBAImageOriented(TIFF
*, uint32
, uint32
, uint32
*, 
 344                                       int = ORIENTATION_BOTLEFT
, int = 0); 
 346 extern  void TIFFPrintDirectory(TIFF
*, FILE*, long); 
 347 extern  int TIFFReadScanline(TIFF
*, tdata_t
, uint32
, tsample_t
); 
 348 extern  int TIFFWriteScanline(TIFF
*, tdata_t
, uint32
, tsample_t
); 
 349 extern  int TIFFReadRGBAImage(TIFF
*, uint32
, uint32
, uint32
*, int); 
 350 extern  int TIFFReadRGBAImageOriented(TIFF
*, uint32
, uint32
, uint32
*, int, int); 
 353 extern  int TIFFReadRGBAStrip(TIFF
*, tstrip_t
, uint32 
* ); 
 354 extern  int TIFFReadRGBATile(TIFF
*, uint32
, uint32
, uint32 
* ); 
 355 extern  int TIFFRGBAImageOK(TIFF
*, char [1024]); 
 356 extern  int TIFFRGBAImageBegin(TIFFRGBAImage
*, TIFF
*, int, char [1024]); 
 357 extern  int TIFFRGBAImageGet(TIFFRGBAImage
*, uint32
*, uint32
, uint32
); 
 358 extern  void TIFFRGBAImageEnd(TIFFRGBAImage
*); 
 359 extern  TIFF
* TIFFOpen(const char*, const char*); 
 360 extern  TIFF
* TIFFFdOpen(int, const char*, const char*); 
 361 extern  TIFF
* TIFFClientOpen(const char*, const char*, 
 363             TIFFReadWriteProc
, TIFFReadWriteProc
, 
 364             TIFFSeekProc
, TIFFCloseProc
, 
 366             TIFFMapFileProc
, TIFFUnmapFileProc
); 
 367 extern  const char* TIFFFileName(TIFF
*); 
 368 extern  void TIFFError(const char*, const char*, ...); 
 369 extern  void TIFFWarning(const char*, const char*, ...); 
 370 extern  TIFFErrorHandler 
TIFFSetErrorHandler(TIFFErrorHandler
); 
 371 extern  TIFFErrorHandler 
TIFFSetWarningHandler(TIFFErrorHandler
); 
 372 extern  TIFFExtendProc 
TIFFSetTagExtender(TIFFExtendProc
); 
 373 extern  ttile_t 
TIFFComputeTile(TIFF
*, uint32
, uint32
, uint32
, tsample_t
); 
 374 extern  int TIFFCheckTile(TIFF
*, uint32
, uint32
, uint32
, tsample_t
); 
 375 extern  ttile_t 
TIFFNumberOfTiles(TIFF
*); 
 376 extern  tsize_t 
TIFFReadTile(TIFF
*, 
 377             tdata_t
, uint32
, uint32
, uint32
, tsample_t
); 
 378 extern  tsize_t 
TIFFWriteTile(TIFF
*, 
 379             tdata_t
, uint32
, uint32
, uint32
, tsample_t
); 
 380 extern  tstrip_t 
TIFFComputeStrip(TIFF
*, uint32
, tsample_t
); 
 381 extern  tstrip_t 
TIFFNumberOfStrips(TIFF
*); 
 382 extern  tsize_t 
TIFFReadEncodedStrip(TIFF
*, tstrip_t
, tdata_t
, tsize_t
); 
 383 extern  tsize_t 
TIFFReadRawStrip(TIFF
*, tstrip_t
, tdata_t
, tsize_t
); 
 384 extern  tsize_t 
TIFFReadEncodedTile(TIFF
*, ttile_t
, tdata_t
, tsize_t
); 
 385 extern  tsize_t 
TIFFReadRawTile(TIFF
*, ttile_t
, tdata_t
, tsize_t
); 
 386 extern  tsize_t 
TIFFWriteEncodedStrip(TIFF
*, tstrip_t
, tdata_t
, tsize_t
); 
 387 extern  tsize_t 
TIFFWriteRawStrip(TIFF
*, tstrip_t
, tdata_t
, tsize_t
); 
 388 extern  tsize_t 
TIFFWriteEncodedTile(TIFF
*, ttile_t
, tdata_t
, tsize_t
); 
 389 extern  tsize_t 
TIFFWriteRawTile(TIFF
*, ttile_t
, tdata_t
, tsize_t
); 
 390 extern  int TIFFDataWidth(TIFFDataType
);    /* table of tag datatype widths */ 
 391 extern  void TIFFSetWriteOffset(TIFF
*, toff_t
); 
 392 extern  void TIFFSwabShort(uint16
*); 
 393 extern  void TIFFSwabLong(uint32
*); 
 394 extern  void TIFFSwabDouble(double*); 
 395 extern  void TIFFSwabArrayOfShort(uint16
*, unsigned long); 
 396 extern  void TIFFSwabArrayOfLong(uint32
*, unsigned long); 
 397 extern  void TIFFSwabArrayOfDouble(double*, unsigned long); 
 398 extern  void TIFFReverseBits(unsigned char *, unsigned long); 
 399 extern  const unsigned char* TIFFGetBitRevTable(int); 
 402 #define U_NEU           0.210526316 
 403 #define V_NEU           0.473684211 
 405 extern  double LogL16toY(int); 
 406 extern  double LogL10toY(int); 
 407 extern  void XYZtoRGB24(float*, uint8
*); 
 408 extern  int uv_decode(double*, double*, int); 
 409 extern  void LogLuv24toXYZ(uint32
, float*); 
 410 extern  void LogLuv32toXYZ(uint32
, float*); 
 411 #if defined(c_plusplus) || defined(__cplusplus) 
 412 extern  int LogL16fromY(double, int = SGILOGENCODE_NODITHER
); 
 413 extern  int LogL10fromY(double, int = SGILOGENCODE_NODITHER
); 
 414 extern  int uv_encode(double, double, int = SGILOGENCODE_NODITHER
); 
 415 extern  uint32 
LogLuv24fromXYZ(float*, int = SGILOGENCODE_NODITHER
); 
 416 extern  uint32 
LogLuv32fromXYZ(float*, int = SGILOGENCODE_NODITHER
); 
 418 extern  int LogL16fromY(double, int); 
 419 extern  int LogL10fromY(double, int); 
 420 extern  int uv_encode(double, double, int); 
 421 extern  uint32 
LogLuv24fromXYZ(float*, int); 
 422 extern  uint32 
LogLuv32fromXYZ(float*, int); 
 424 #endif /* LOGLUV_PUBLIC */ 
 427 ** New stuff going public in 3.6.x. 
 429 extern  int  TIFFGetTagListCount( TIFF 
* ); 
 430 extern  ttag_t 
TIFFGetTagListEntry( TIFF 
*, int tag_index 
); 
 432 #define TIFF_ANY        TIFF_NOTYPE     /* for field descriptor searching */ 
 433 #define TIFF_VARIABLE   -1              /* marker for variable length tags */ 
 434 #define TIFF_SPP        -2              /* marker for SamplesPerPixel tags */ 
 435 #define TIFF_VARIABLE2  -3              /* marker for uint32 var-length tags */ 
 437 #define FIELD_CUSTOM    65     
 440         ttag_t  field_tag
;              /* field's tag */ 
 441         short   field_readcount
;        /* read count/TIFF_VARIABLE/TIFF_SPP */ 
 442         short   field_writecount
;       /* write count/TIFF_VARIABLE */ 
 443         TIFFDataType field_type
;        /* type of associated data */ 
 444         unsigned short field_bit
;       /* bit in fieldsset bit vector */ 
 445         unsigned char field_oktochange
; /* if true, can change while writing */ 
 446         unsigned char field_passcount
;  /* if true, pass dir count on set */ 
 447         char    *field_name
;            /* ASCII name */ 
 450 typedef struct _TIFFTagValue 
{ 
 451     const TIFFFieldInfo  
*info
; 
 456 extern  void TIFFMergeFieldInfo(TIFF
*, const TIFFFieldInfo
[], int); 
 457 extern  const TIFFFieldInfo
* TIFFFindFieldInfo(TIFF
*, ttag_t
, TIFFDataType
); 
 458 extern  const TIFFFieldInfo
* TIFFFieldWithTag(TIFF
*, ttag_t
); 
 460 typedef int (*TIFFVSetMethod
)(TIFF
*, ttag_t
, va_list); 
 461 typedef int (*TIFFVGetMethod
)(TIFF
*, ttag_t
, va_list); 
 462 typedef void (*TIFFPrintMethod
)(TIFF
*, FILE*, long); 
 465     TIFFVSetMethod      vsetfield
;      /* tag set routine */ 
 466     TIFFVGetMethod      vgetfield
;      /* tag get routine */ 
 467     TIFFPrintMethod     printdir
;       /* directory print routine */ 
 470 extern  TIFFTagMethods 
*TIFFAccessTagMethods( TIFF 
* ); 
 471 extern  void *TIFFGetClientInfo( TIFF 
*, const char * ); 
 472 extern  void TIFFSetClientInfo( TIFF 
*, void *, const char * ); 
 474 #if defined(__cplusplus) 
 477 #endif /* _TIFFIO_ */