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  * Directory Printing Support 
  37 static const char *photoNames
[] = { 
  38     "min-is-white",                             /* PHOTOMETRIC_MINISWHITE */ 
  39     "min-is-black",                             /* PHOTOMETRIC_MINISBLACK */ 
  40     "RGB color",                                /* PHOTOMETRIC_RGB */ 
  41     "palette color (RGB from colormap)",        /* PHOTOMETRIC_PALETTE */ 
  42     "transparency mask",                        /* PHOTOMETRIC_MASK */ 
  43     "separated",                                /* PHOTOMETRIC_SEPARATED */ 
  44     "YCbCr",                                    /* PHOTOMETRIC_YCBCR */ 
  46     "CIE L*a*b*",                               /* PHOTOMETRIC_CIELAB */ 
  48 #define NPHOTONAMES     (sizeof (photoNames) / sizeof (photoNames[0])) 
  50 static const char *orientNames
[] = { 
  52     "row 0 top, col 0 lhs",                     /* ORIENTATION_TOPLEFT */ 
  53     "row 0 top, col 0 rhs",                     /* ORIENTATION_TOPRIGHT */ 
  54     "row 0 bottom, col 0 rhs",                  /* ORIENTATION_BOTRIGHT */ 
  55     "row 0 bottom, col 0 lhs",                  /* ORIENTATION_BOTLEFT */ 
  56     "row 0 lhs, col 0 top",                     /* ORIENTATION_LEFTTOP */ 
  57     "row 0 rhs, col 0 top",                     /* ORIENTATION_RIGHTTOP */ 
  58     "row 0 rhs, col 0 bottom",                  /* ORIENTATION_RIGHTBOT */ 
  59     "row 0 lhs, col 0 bottom",                  /* ORIENTATION_LEFTBOT */ 
  61 #define NORIENTNAMES    (sizeof (orientNames) / sizeof (orientNames[0])) 
  64 _TIFFPrintField(FILE* fd
, const TIFFFieldInfo 
*fip
, 
  65                 uint32 value_count
, void *raw_data
) 
  69         fprintf(fd
, "  %s: ", fip
->field_name
); 
  71         for(j 
= 0; j 
< value_count
; j
++) { 
  72                 if(fip
->field_type 
== TIFF_BYTE
) 
  73                         fprintf(fd
, "%u", ((uint8 
*) raw_data
)[j
]); 
  74                 else if(fip
->field_type 
== TIFF_UNDEFINED
) 
  76                                 (unsigned int) ((unsigned char *) raw_data
)[j
]); 
  77                 else if(fip
->field_type 
== TIFF_SBYTE
) 
  78                         fprintf(fd
, "%d", ((int8 
*) raw_data
)[j
]); 
  79                 else if(fip
->field_type 
== TIFF_SHORT
) 
  80                         fprintf(fd
, "%u", ((uint16 
*) raw_data
)[j
]); 
  81                 else if(fip
->field_type 
== TIFF_SSHORT
) 
  82                         fprintf(fd
, "%d", ((int16 
*) raw_data
)[j
]); 
  83                 else if(fip
->field_type 
== TIFF_LONG
) 
  85                                 (unsigned long)((uint32 
*) raw_data
)[j
]); 
  86                 else if(fip
->field_type 
== TIFF_SLONG
) 
  87                         fprintf(fd
, "%ld", (long)((int32 
*) raw_data
)[j
]); 
  88                 else if(fip
->field_type 
== TIFF_RATIONAL
 
  89                         || fip
->field_type 
== TIFF_SRATIONAL
 
  90                         || fip
->field_type 
== TIFF_FLOAT
) 
  91                         fprintf(fd
, "%f", ((float *) raw_data
)[j
]); 
  92                 else if(fip
->field_type 
== TIFF_IFD
) 
  93                         fprintf(fd
, "0x%ulx", ((uint32 
*) raw_data
)[j
]); 
  94                 else if(fip
->field_type 
== TIFF_ASCII
) { 
  95                         fprintf(fd
, "%s", (char *) raw_data
); 
  98                 else if(fip
->field_type 
== TIFF_DOUBLE
) 
  99                         fprintf(fd
, "%f", ((double *) raw_data
)[j
]); 
 100                 else if(fip
->field_type 
== TIFF_FLOAT
) 
 101                         fprintf(fd
, "%f", ((float *)raw_data
)[j
]); 
 103                         fprintf(fd
, "<unsupported data type in TIFFPrint>"); 
 107                 if(j 
< value_count 
- 1) 
 115 _TIFFPrettyPrintField(TIFF
* tif
, FILE* fd
, ttag_t tag
, 
 116                       uint32 value_count
, void *raw_data
) 
 118         TIFFDirectory 
*td 
= &tif
->tif_dir
; 
 123                         fprintf(fd
, "  Ink Set: "); 
 124                         switch (*((uint16
*)raw_data
)) { 
 126                                         fprintf(fd
, "CMYK\n"); 
 129                                         fprintf(fd
, "%u (0x%x)\n", 
 130                                                 *((uint16
*)raw_data
), 
 131                                                 *((uint16
*)raw_data
)); 
 135                 case TIFFTAG_DOTRANGE
: 
 136                         fprintf(fd
, "  Dot Range: %u-%u\n", 
 137                                 ((uint16
*)raw_data
)[0], ((uint16
*)raw_data
)[1]); 
 139                 case TIFFTAG_WHITEPOINT
: 
 140                         fprintf(fd
, "  White Point: %g-%g\n", 
 141                                 ((float *)raw_data
)[0], ((float *)raw_data
)[1]);                        return 1; 
 142                 case TIFFTAG_REFERENCEBLACKWHITE
: 
 146                         fprintf(fd
, "  Reference Black/White:\n"); 
 147                         for (i 
= 0; i 
< td
->td_samplesperpixel
; i
++) 
 148                         fprintf(fd
, "    %2d: %5g %5g\n", i
, 
 149                                 ((float *)raw_data
)[2*i
+0], 
 150                                 ((float *)raw_data
)[2*i
+1]); 
 153                 case TIFFTAG_XMLPACKET
: 
 157                         fprintf(fd
, "  XMLPacket (XMP Metadata):\n" ); 
 158                         for(i 
= 0; i 
< value_count
; i
++) 
 159                                 fputc(((char *)raw_data
)[i
], fd
); 
 163                 case TIFFTAG_RICHTIFFIPTC
: 
 165                          * XXX: for some weird reason RichTIFFIPTC tag 
 166                          * defined as array of LONG values. 
 169                                 "  RichTIFFIPTC Data: <present>, %lu bytes\n", 
 170                                 (unsigned long) value_count 
* 4); 
 172                 case TIFFTAG_PHOTOSHOP
: 
 173                         fprintf(fd
, "  Photoshop Data: <present>, %lu bytes\n", 
 174                                 (unsigned long) value_count
); 
 176                 case TIFFTAG_ICCPROFILE
: 
 177                         fprintf(fd
, "  ICC Profile: <present>, %lu bytes\n", 
 178                                 (unsigned long) value_count
); 
 180                 case TIFFTAG_STONITS
: 
 182                                 "  Sample to Nits conversion factor: %.4e\n", 
 183                                 *((double*)raw_data
)); 
 191  * Print the contents of the current directory 
 192  * to the specified stdio file stream. 
 195 TIFFPrintDirectory(TIFF
* tif
, FILE* fd
, long flags
) 
 197         TIFFDirectory 
*td 
= &tif
->tif_dir
; 
 202         fprintf(fd
, "TIFF Directory at offset 0x%lx (%lu)\n", 
 203                 (unsigned long)tif
->tif_diroff
, (unsigned long)tif
->tif_diroff
); 
 204         if (TIFFFieldSet(tif
,FIELD_SUBFILETYPE
)) { 
 205                 fprintf(fd
, "  Subfile Type:"); 
 207                 if (td
->td_subfiletype 
& FILETYPE_REDUCEDIMAGE
) { 
 208                         fprintf(fd
, "%sreduced-resolution image", sep
); 
 211                 if (td
->td_subfiletype 
& FILETYPE_PAGE
) { 
 212                         fprintf(fd
, "%smulti-page document", sep
); 
 215                 if (td
->td_subfiletype 
& FILETYPE_MASK
) 
 216                         fprintf(fd
, "%stransparency mask", sep
); 
 217                 fprintf(fd
, " (%lu = 0x%lx)\n", 
 218                     (long) td
->td_subfiletype
, (long) td
->td_subfiletype
); 
 220         if (TIFFFieldSet(tif
,FIELD_IMAGEDIMENSIONS
)) { 
 221                 fprintf(fd
, "  Image Width: %lu Image Length: %lu", 
 222                     (unsigned long) td
->td_imagewidth
, (unsigned long) td
->td_imagelength
); 
 223                 if (TIFFFieldSet(tif
,FIELD_IMAGEDEPTH
)) 
 224                         fprintf(fd
, " Image Depth: %lu", 
 225                             (unsigned long) td
->td_imagedepth
); 
 228         if (TIFFFieldSet(tif
,FIELD_TILEDIMENSIONS
)) { 
 229                 fprintf(fd
, "  Tile Width: %lu Tile Length: %lu", 
 230                     (unsigned long) td
->td_tilewidth
, (unsigned long) td
->td_tilelength
); 
 231                 if (TIFFFieldSet(tif
,FIELD_TILEDEPTH
)) 
 232                         fprintf(fd
, " Tile Depth: %lu", 
 233                             (unsigned long) td
->td_tiledepth
); 
 236         if (TIFFFieldSet(tif
,FIELD_RESOLUTION
)) { 
 237                 fprintf(fd
, "  Resolution: %g, %g", 
 238                     td
->td_xresolution
, td
->td_yresolution
); 
 239                 if (TIFFFieldSet(tif
,FIELD_RESOLUTIONUNIT
)) { 
 240                         switch (td
->td_resolutionunit
) { 
 242                                 fprintf(fd
, " (unitless)"); 
 245                                 fprintf(fd
, " pixels/inch"); 
 247                         case RESUNIT_CENTIMETER
: 
 248                                 fprintf(fd
, " pixels/cm"); 
 251                                 fprintf(fd
, " (unit %u = 0x%x)", 
 252                                     td
->td_resolutionunit
, 
 253                                     td
->td_resolutionunit
); 
 259         if (TIFFFieldSet(tif
,FIELD_POSITION
)) 
 260                 fprintf(fd
, "  Position: %g, %g\n", 
 261                     td
->td_xposition
, td
->td_yposition
); 
 262         if (TIFFFieldSet(tif
,FIELD_BITSPERSAMPLE
)) 
 263                 fprintf(fd
, "  Bits/Sample: %u\n", td
->td_bitspersample
); 
 264         if (TIFFFieldSet(tif
,FIELD_SAMPLEFORMAT
)) { 
 265                 fprintf(fd
, "  Sample Format: "); 
 266                 switch (td
->td_sampleformat
) { 
 267                 case SAMPLEFORMAT_VOID
: 
 268                         fprintf(fd
, "void\n"); 
 270                 case SAMPLEFORMAT_INT
: 
 271                         fprintf(fd
, "signed integer\n"); 
 273                 case SAMPLEFORMAT_UINT
: 
 274                         fprintf(fd
, "unsigned integer\n"); 
 276                 case SAMPLEFORMAT_IEEEFP
: 
 277                         fprintf(fd
, "IEEE floating point\n"); 
 279                 case SAMPLEFORMAT_COMPLEXINT
: 
 280                         fprintf(fd
, "complex signed integer\n"); 
 282                 case SAMPLEFORMAT_COMPLEXIEEEFP
: 
 283                         fprintf(fd
, "complex IEEE floating point\n"); 
 286                         fprintf(fd
, "%u (0x%x)\n", 
 287                             td
->td_sampleformat
, td
->td_sampleformat
); 
 291         if (TIFFFieldSet(tif
,FIELD_COMPRESSION
)) { 
 292                 const TIFFCodec
* c 
= TIFFFindCODEC(td
->td_compression
); 
 293                 fprintf(fd
, "  Compression Scheme: "); 
 295                         fprintf(fd
, "%s\n", c
->name
); 
 297                         fprintf(fd
, "%u (0x%x)\n", 
 298                             td
->td_compression
, td
->td_compression
); 
 300         if (TIFFFieldSet(tif
,FIELD_PHOTOMETRIC
)) { 
 301                 fprintf(fd
, "  Photometric Interpretation: "); 
 302                 if (td
->td_photometric 
< NPHOTONAMES
) 
 303                         fprintf(fd
, "%s\n", photoNames
[td
->td_photometric
]); 
 305                         switch (td
->td_photometric
) { 
 306                         case PHOTOMETRIC_LOGL
: 
 307                                 fprintf(fd
, "CIE Log2(L)\n"); 
 309                         case PHOTOMETRIC_LOGLUV
: 
 310                                 fprintf(fd
, "CIE Log2(L) (u',v')\n"); 
 313                                 fprintf(fd
, "%u (0x%x)\n", 
 314                                     td
->td_photometric
, td
->td_photometric
); 
 319         if (TIFFFieldSet(tif
,FIELD_EXTRASAMPLES
) && td
->td_extrasamples
) { 
 320                 fprintf(fd
, "  Extra Samples: %u<", td
->td_extrasamples
); 
 322                 for (i 
= 0; i 
< td
->td_extrasamples
; i
++) { 
 323                         switch (td
->td_sampleinfo
[i
]) { 
 324                         case EXTRASAMPLE_UNSPECIFIED
: 
 325                                 fprintf(fd
, "%sunspecified", sep
); 
 327                         case EXTRASAMPLE_ASSOCALPHA
: 
 328                                 fprintf(fd
, "%sassoc-alpha", sep
); 
 330                         case EXTRASAMPLE_UNASSALPHA
: 
 331                                 fprintf(fd
, "%sunassoc-alpha", sep
); 
 334                                 fprintf(fd
, "%s%u (0x%x)", sep
, 
 335                                     td
->td_sampleinfo
[i
], td
->td_sampleinfo
[i
]); 
 342         if (TIFFFieldSet(tif
,FIELD_INKNAMES
)) { 
 344                 fprintf(fd
, "  Ink Names: "); 
 345                 i 
= td
->td_samplesperpixel
; 
 347                 for (cp 
= td
->td_inknames
; i 
> 0; cp 
= strchr(cp
,'\0')+1, i
--) { 
 349                         _TIFFprintAscii(fd
, cp
); 
 354         if (TIFFFieldSet(tif
,FIELD_THRESHHOLDING
)) { 
 355                 fprintf(fd
, "  Thresholding: "); 
 356                 switch (td
->td_threshholding
) { 
 357                 case THRESHHOLD_BILEVEL
: 
 358                         fprintf(fd
, "bilevel art scan\n"); 
 360                 case THRESHHOLD_HALFTONE
: 
 361                         fprintf(fd
, "halftone or dithered scan\n"); 
 363                 case THRESHHOLD_ERRORDIFFUSE
: 
 364                         fprintf(fd
, "error diffused\n"); 
 367                         fprintf(fd
, "%u (0x%x)\n", 
 368                             td
->td_threshholding
, td
->td_threshholding
); 
 372         if (TIFFFieldSet(tif
,FIELD_FILLORDER
)) { 
 373                 fprintf(fd
, "  FillOrder: "); 
 374                 switch (td
->td_fillorder
) { 
 375                 case FILLORDER_MSB2LSB
: 
 376                         fprintf(fd
, "msb-to-lsb\n"); 
 378                 case FILLORDER_LSB2MSB
: 
 379                         fprintf(fd
, "lsb-to-msb\n"); 
 382                         fprintf(fd
, "%u (0x%x)\n", 
 383                             td
->td_fillorder
, td
->td_fillorder
); 
 387         if (TIFFFieldSet(tif
,FIELD_YCBCRSUBSAMPLING
)) 
 390              * For hacky reasons (see tif_jpeg.c - JPEGFixupTestSubsampling), 
 391              * we need to fetch this rather than trust what is in our 
 394             uint16 subsampling
[2]; 
 396             TIFFGetField( tif
, TIFFTAG_YCBCRSUBSAMPLING
,  
 397                           subsampling 
+ 0, subsampling 
+ 1 ); 
 398                 fprintf(fd
, "  YCbCr Subsampling: %u, %u\n", 
 399                         subsampling
[0], subsampling
[1] ); 
 401         if (TIFFFieldSet(tif
,FIELD_YCBCRPOSITIONING
)) { 
 402                 fprintf(fd
, "  YCbCr Positioning: "); 
 403                 switch (td
->td_ycbcrpositioning
) { 
 404                 case YCBCRPOSITION_CENTERED
: 
 405                         fprintf(fd
, "centered\n"); 
 407                 case YCBCRPOSITION_COSITED
: 
 408                         fprintf(fd
, "cosited\n"); 
 411                         fprintf(fd
, "%u (0x%x)\n", 
 412                             td
->td_ycbcrpositioning
, td
->td_ycbcrpositioning
); 
 416         if (TIFFFieldSet(tif
,FIELD_HALFTONEHINTS
)) 
 417                 fprintf(fd
, "  Halftone Hints: light %u dark %u\n", 
 418                     td
->td_halftonehints
[0], td
->td_halftonehints
[1]); 
 419         if (TIFFFieldSet(tif
,FIELD_ORIENTATION
)) { 
 420                 fprintf(fd
, "  Orientation: "); 
 421                 if (td
->td_orientation 
< NORIENTNAMES
) 
 422                         fprintf(fd
, "%s\n", orientNames
[td
->td_orientation
]); 
 424                         fprintf(fd
, "%u (0x%x)\n", 
 425                             td
->td_orientation
, td
->td_orientation
); 
 427         if (TIFFFieldSet(tif
,FIELD_SAMPLESPERPIXEL
)) 
 428                 fprintf(fd
, "  Samples/Pixel: %u\n", td
->td_samplesperpixel
); 
 429         if (TIFFFieldSet(tif
,FIELD_ROWSPERSTRIP
)) { 
 430                 fprintf(fd
, "  Rows/Strip: "); 
 431                 if (td
->td_rowsperstrip 
== (uint32
) -1) 
 432                         fprintf(fd
, "(infinite)\n"); 
 434                         fprintf(fd
, "%lu\n", (unsigned long) td
->td_rowsperstrip
); 
 436         if (TIFFFieldSet(tif
,FIELD_MINSAMPLEVALUE
)) 
 437                 fprintf(fd
, "  Min Sample Value: %u\n", td
->td_minsamplevalue
); 
 438         if (TIFFFieldSet(tif
,FIELD_MAXSAMPLEVALUE
)) 
 439                 fprintf(fd
, "  Max Sample Value: %u\n", td
->td_maxsamplevalue
); 
 440         if (TIFFFieldSet(tif
,FIELD_SMINSAMPLEVALUE
)) 
 441                 fprintf(fd
, "  SMin Sample Value: %g\n", 
 442                     td
->td_sminsamplevalue
); 
 443         if (TIFFFieldSet(tif
,FIELD_SMAXSAMPLEVALUE
)) 
 444                 fprintf(fd
, "  SMax Sample Value: %g\n", 
 445                     td
->td_smaxsamplevalue
); 
 446         if (TIFFFieldSet(tif
,FIELD_PLANARCONFIG
)) { 
 447                 fprintf(fd
, "  Planar Configuration: "); 
 448                 switch (td
->td_planarconfig
) { 
 449                 case PLANARCONFIG_CONTIG
: 
 450                         fprintf(fd
, "single image plane\n"); 
 452                 case PLANARCONFIG_SEPARATE
: 
 453                         fprintf(fd
, "separate image planes\n"); 
 456                         fprintf(fd
, "%u (0x%x)\n", 
 457                             td
->td_planarconfig
, td
->td_planarconfig
); 
 461         if (TIFFFieldSet(tif
,FIELD_PAGENUMBER
)) 
 462                 fprintf(fd
, "  Page Number: %u-%u\n", 
 463                     td
->td_pagenumber
[0], td
->td_pagenumber
[1]); 
 464         if (TIFFFieldSet(tif
,FIELD_COLORMAP
)) { 
 465                 fprintf(fd
, "  Color Map: "); 
 466                 if (flags 
& TIFFPRINT_COLORMAP
) { 
 468                         n 
= 1L<<td
->td_bitspersample
; 
 469                         for (l 
= 0; l 
< n
; l
++) 
 470                                 fprintf(fd
, "   %5lu: %5u %5u %5u\n", 
 472                                     td
->td_colormap
[0][l
], 
 473                                     td
->td_colormap
[1][l
], 
 474                                     td
->td_colormap
[2][l
]); 
 476                         fprintf(fd
, "(present)\n"); 
 478         if (TIFFFieldSet(tif
,FIELD_TRANSFERFUNCTION
)) { 
 479                 fprintf(fd
, "  Transfer Function: "); 
 480                 if (flags 
& TIFFPRINT_CURVES
) { 
 482                         n 
= 1L<<td
->td_bitspersample
; 
 483                         for (l 
= 0; l 
< n
; l
++) { 
 484                                 fprintf(fd
, "    %2lu: %5u", 
 485                                     l
, td
->td_transferfunction
[0][l
]); 
 486                                 for (i 
= 1; i 
< td
->td_samplesperpixel
; i
++) 
 488                                             td
->td_transferfunction
[i
][l
]); 
 492                         fprintf(fd
, "(present)\n"); 
 494         if (TIFFFieldSet(tif
, FIELD_SUBIFD
)) { 
 495                 fprintf(fd
, "  SubIFD Offsets:"); 
 496                 for (i 
= 0; i 
< td
->td_nsubifd
; i
++) 
 497                         fprintf(fd
, " %5lu", (long) td
->td_subifd
[i
]); 
 502         ** Custom tag support. 
 508             count 
= (short) TIFFGetTagListCount(tif
); 
 509             for(i 
= 0; i 
< count
; i
++) { 
 510                 ttag_t  tag 
= TIFFGetTagListEntry(tif
, i
); 
 511                 const TIFFFieldInfo 
*fip
; 
 516                 fip 
= TIFFFieldWithTag(tif
, tag
); 
 520                 if(fip
->field_passcount
) { 
 521                         if(TIFFGetField(tif
, tag
, &value_count
, &raw_data
) != 1) 
 524                         if (fip
->field_readcount 
== TIFF_VARIABLE
 
 525                             || fip
->field_readcount 
== TIFF_VARIABLE2
) 
 527                         else if (fip
->field_readcount 
== TIFF_SPP
) 
 528                                 value_count 
= td
->td_samplesperpixel
; 
 530                                 value_count 
= fip
->field_readcount
; 
 531                         if ((fip
->field_type 
== TIFF_ASCII
 
 532                              || fip
->field_readcount 
== TIFF_VARIABLE
 
 533                              || fip
->field_readcount 
== TIFF_VARIABLE2
 
 534                              || fip
->field_readcount 
== TIFF_SPP
 
 536                             && fip
->field_tag 
!= TIFFTAG_PAGENUMBER
 
 537                             && fip
->field_tag 
!= TIFFTAG_HALFTONEHINTS
 
 538                             && fip
->field_tag 
!= TIFFTAG_YCBCRSUBSAMPLING
 
 539                             && fip
->field_tag 
!= TIFFTAG_DOTRANGE
) { 
 540                                 if(TIFFGetField(tif
, tag
, &raw_data
) != 1) 
 542                         } else if (fip
->field_tag 
!= TIFFTAG_PAGENUMBER
 
 543                                    && fip
->field_tag 
!= TIFFTAG_HALFTONEHINTS
 
 544                                    && fip
->field_tag 
!= TIFFTAG_YCBCRSUBSAMPLING
 
 545                                    && fip
->field_tag 
!= TIFFTAG_DOTRANGE
) { 
 546                                 raw_data 
= _TIFFmalloc( 
 547                                         _TIFFDataSize(fip
->field_type
) 
 550                                 if(TIFFGetField(tif
, tag
, raw_data
) != 1) { 
 556                                  * XXX: Should be fixed and removed, see the 
 557                                  * notes related to TIFFTAG_PAGENUMBER, 
 558                                  * TIFFTAG_HALFTONEHINTS, 
 559                                  * TIFFTAG_YCBCRSUBSAMPLING and 
 560                                  * TIFFTAG_DOTRANGE tags in tif_dir.c. */ 
 562                                 raw_data 
= _TIFFmalloc( 
 563                                         _TIFFDataSize(fip
->field_type
) 
 567                                 if(TIFFGetField(tif
, tag
, tmp
, 
 568                                 tmp 
+ _TIFFDataSize(fip
->field_type
)) != 1) { 
 576                  * Catch the tags which needs to be specially handled and 
 577                  * pretty print them. If tag not handled in 
 578                  * _TIFFPrettyPrintField() fall down and print it as any other 
 581                 if (_TIFFPrettyPrintField(tif
, fd
, tag
, value_count
, raw_data
)) { 
 587                         _TIFFPrintField(fd
, fip
, value_count
, raw_data
); 
 594         if (tif
->tif_tagmethods
.printdir
) 
 595                 (*tif
->tif_tagmethods
.printdir
)(tif
, fd
, flags
); 
 596         if ((flags 
& TIFFPRINT_STRIPS
) && 
 597             TIFFFieldSet(tif
,FIELD_STRIPOFFSETS
)) { 
 600                 fprintf(fd
, "  %lu %s:\n", 
 601                     (long) td
->td_nstrips
, 
 602                     isTiled(tif
) ? "Tiles" : "Strips"); 
 603                 for (s 
= 0; s 
< td
->td_nstrips
; s
++) 
 604                         fprintf(fd
, "    %3lu: [%8lu, %8lu]\n", 
 606                             (unsigned long) td
->td_stripoffset
[s
], 
 607                             (unsigned long) td
->td_stripbytecount
[s
]); 
 612 _TIFFprintAscii(FILE* fd
, const char* cp
) 
 614         for (; *cp 
!= '\0'; cp
++) { 
 617                 if (isprint((int)*cp
)) { 
 621                 for (tp 
= "\tt\bb\rr\nn\vv"; *tp
; tp
++) 
 625                         fprintf(fd
, "\\%c", *tp
); 
 627                         fprintf(fd
, "\\%03o", *cp 
& 0xff); 
 632 _TIFFprintAsciiTag(FILE* fd
, const char* name
, const char* value
) 
 634         fprintf(fd
, "  %s: \"", name
); 
 635         _TIFFprintAscii(fd
, value
); 
 639 /* vim: set ts=8 sts=8 sw=8 noet: */