From 6e9553033550a28b461e8b5888d2661e5f8dbfd7 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 19 Jul 2014 07:44:42 +0000 Subject: [PATCH] Initial import git-svn-id: http://moon:8086/svn/software/trunk/libsrc/libtiff@1 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- COPYRIGHT | 21 + Debug/fax3sm.obj | Bin 0 -> 100952 bytes Debug/libtiff.pch | Bin 0 -> 2867656 bytes Debug/tif_aux.obj | Bin 0 -> 17492 bytes Debug/tif_close.obj | Bin 0 -> 11058 bytes Debug/tif_codec.obj | Bin 0 -> 15198 bytes Debug/tif_compress.obj | Bin 0 -> 24575 bytes Debug/tif_dir.obj | Bin 0 -> 58920 bytes Debug/tif_dirinfo.obj | Bin 0 -> 33178 bytes Debug/tif_dirread.obj | Bin 0 -> 55110 bytes Debug/tif_dirwrite.obj | Bin 0 -> 42157 bytes Debug/tif_dumpmode.obj | Bin 0 -> 14179 bytes Debug/tif_error.obj | Bin 0 -> 11416 bytes Debug/tif_fax3.obj | Bin 0 -> 84956 bytes Debug/tif_flush.obj | Bin 0 -> 11431 bytes Debug/tif_getimage.obj | Bin 0 -> 107458 bytes Debug/tif_jpeg.obj | Bin 0 -> 9955 bytes Debug/tif_luv.obj | Bin 0 -> 72812 bytes Debug/tif_lzw.obj | Bin 0 -> 33648 bytes Debug/tif_next.obj | Bin 0 -> 13100 bytes Debug/tif_open.obj | Bin 0 -> 23576 bytes Debug/tif_packbits.obj | Bin 0 -> 17176 bytes Debug/tif_pixarlog.obj | Bin 0 -> 9963 bytes Debug/tif_predict.obj | Bin 0 -> 33043 bytes Debug/tif_print.obj | Bin 0 -> 45979 bytes Debug/tif_read.obj | Bin 0 -> 35263 bytes Debug/tif_strip.obj | Bin 0 -> 16052 bytes Debug/tif_swab.obj | Bin 0 -> 16126 bytes Debug/tif_thunder.obj | Bin 0 -> 14821 bytes Debug/tif_tile.obj | Bin 0 -> 17561 bytes Debug/tif_version.obj | Bin 0 -> 10817 bytes Debug/tif_warning.obj | Bin 0 -> 11432 bytes Debug/tif_win32.obj | Bin 0 -> 25961 bytes Debug/tif_write.obj | Bin 0 -> 30153 bytes Debug/tif_zip.obj | Bin 0 -> 9953 bytes Debug/vc60.idb | Bin 0 -> 91136 bytes Debug/vc60.pdb | Bin 0 -> 77824 bytes Makefile.in | 556 +++++++ Release/fax3sm.obj | Bin 0 -> 99742 bytes Release/libtiff.pch | Bin 0 -> 2873628 bytes Release/tif_aux.obj | Bin 0 -> 4129 bytes Release/tif_close.obj | Bin 0 -> 782 bytes Release/tif_codec.obj | Bin 0 -> 4330 bytes Release/tif_compress.obj | Bin 0 -> 8275 bytes Release/tif_dir.obj | Bin 0 -> 25762 bytes Release/tif_dirinfo.obj | Bin 0 -> 17766 bytes Release/tif_dirread.obj | Bin 0 -> 24253 bytes Release/tif_dirwrite.obj | Bin 0 -> 16307 bytes Release/tif_dumpmode.obj | Bin 0 -> 1904 bytes Release/tif_error.obj | Bin 0 -> 809 bytes Release/tif_fax3.obj | Bin 0 -> 37922 bytes Release/tif_flush.obj | Bin 0 -> 918 bytes Release/tif_getimage.obj | Bin 0 -> 50189 bytes Release/tif_jpeg.obj | Bin 0 -> 270 bytes Release/tif_luv.obj | Bin 0 -> 30376 bytes Release/tif_lzw.obj | Bin 0 -> 9197 bytes Release/tif_next.obj | Bin 0 -> 1612 bytes Release/tif_open.obj | Bin 0 -> 7109 bytes Release/tif_packbits.obj | Bin 0 -> 3002 bytes Release/tif_pixarlog.obj | Bin 0 -> 270 bytes Release/tif_predict.obj | Bin 0 -> 8663 bytes Release/tif_print.obj | Bin 0 -> 28148 bytes Release/tif_read.obj | Bin 0 -> 13253 bytes Release/tif_strip.obj | Bin 0 -> 2809 bytes Release/tif_swab.obj | Bin 0 -> 3272 bytes Release/tif_thunder.obj | Bin 0 -> 2867 bytes Release/tif_tile.obj | Bin 0 -> 3788 bytes Release/tif_version.obj | Bin 0 -> 726 bytes Release/tif_warning.obj | Bin 0 -> 815 bytes Release/tif_win32.obj | Bin 0 -> 7770 bytes Release/tif_write.obj | Bin 0 -> 11273 bytes Release/tif_zip.obj | Bin 0 -> 270 bytes Release/vc60.idb | Bin 0 -> 91136 bytes config.guess | 476 ++++++ config.site | 160 ++ config.sub | 793 +++++++++ configure | 1837 +++++++++++++++++++++ contrib/acorn/Makefile | 165 ++ contrib/acorn/ReadMe | 79 + contrib/acorn/SetVars | 3 + contrib/acorn/cleanlib | 5 + contrib/acorn/convert | 175 ++ contrib/acorn/install | 128 ++ contrib/addtiffo/Makefile | 26 + contrib/addtiffo/Makefile.vc | 27 + contrib/addtiffo/addtiffo.c | 131 ++ contrib/addtiffo/readme | 145 ++ contrib/dbs/Imakefile | 12 + contrib/dbs/readme | 7 + contrib/dbs/tiff-bi.c | 85 + contrib/dbs/tiff-grayscale.c | 141 ++ contrib/dbs/tiff-palette.c | 277 ++++ contrib/dbs/tiff-rgb.c | 196 +++ contrib/dbs/xtiff/Imakefile | 17 + contrib/dbs/xtiff/patchlevel.h | 1 + contrib/dbs/xtiff/readme | 6 + contrib/dbs/xtiff/xtiff.c | 1275 +++++++++++++++ contrib/dbs/xtiff/xtifficon.h | 14 + contrib/dosdjgpp/Makefile.lib | 249 +++ contrib/dosdjgpp/Makefile.tools | 217 +++ contrib/dosdjgpp/Makefile.top | 54 + contrib/dosdjgpp/conf.bat | 11 + contrib/dosdjgpp/port.h | 29 + contrib/dosdjgpp/readme | 30 + contrib/iptcutil/Makefile | 12 + contrib/iptcutil/iptcutil.c | 920 +++++++++++ contrib/iptcutil/test.iptc | Bin 0 -> 1107 bytes contrib/mac-cw/Makefile.script | 72 + contrib/mac-cw/mac_main.c | 20 + contrib/mac-cw/mac_main.h | 12 + contrib/mac-cw/metrowerks.note | 84 + contrib/mac-cw/mkg3_main.c | 14 + contrib/mac-cw/readme | 18 + contrib/mac-cw/version.h | 4 + contrib/mac-mpw/build.mpw | 47 + contrib/mac-mpw/libtiff.make | 202 +++ contrib/mac-mpw/mactrans.c | 56 + contrib/mac-mpw/port.make | 53 + contrib/mac-mpw/readme | 20 + contrib/mac-mpw/tools.make | 138 ++ contrib/mac-mpw/top.make | 133 ++ contrib/mfs/mfs_file.c | 579 +++++++ contrib/mfs/readme | 37 + contrib/pds/readme | 90 ++ contrib/pds/tif_imageiter.c | 518 ++++++ contrib/pds/tif_imageiter.h | 57 + contrib/pds/tif_pdsdirread.c | 1124 +++++++++++++ contrib/pds/tif_pdsdirwrite.c | 964 +++++++++++ contrib/ras/ras2tif.c | 247 +++ contrib/ras/readme | 10 + contrib/ras/tif2ras.c | 337 ++++ contrib/vms/libtiff/makevms.com | 229 +++ contrib/vms/libtiff/tiffvec.mar | 131 ++ contrib/vms/tools/makevms.com | 113 ++ contrib/win32/dllshell.c | 38 + contrib/win32/libtiff.def | 72 + contrib/win32/readme | 111 ++ contrib/win95/Makefile.w95 | 134 ++ contrib/win95/readme | 50 + contrib/win95/tiff2dib.c | 372 +++++ contrib/winnt/README.console | 182 +++ contrib/winnt/fax3sm.c | 1046 ++++++++++++ contrib/winnt/libtiff.def | 72 + contrib/winnt/libtiff.mak | 1947 ++++++++++++++++++++++ contrib/winnt/libtiff.vcp | Bin 0 -> 17408 bytes contrib/winnt/readme | 26 + contrib/winnt/version.h | 1 + dist/newalpha | 8 + dist/newversion | 32 + dist/tiff.alpha | 1 + dist/tiff.spec | 68 + dist/tiff.version | 1 + html/Makefile.in | 109 ++ html/bugs.html | 46 + html/build.html | 1167 ++++++++++++++ html/contrib.html | 158 ++ html/document.html | 50 + html/images.html | 40 + html/images/back.gif | Bin 0 -> 1000 bytes html/images/bali.jpg | Bin 0 -> 26152 bytes html/images/cat.gif | Bin 0 -> 12477 bytes html/images/cover.jpg | Bin 0 -> 20189 bytes html/images/cramps.gif | Bin 0 -> 13137 bytes html/images/dave.gif | Bin 0 -> 8220 bytes html/images/info.gif | Bin 0 -> 131 bytes html/images/jello.jpg | Bin 0 -> 13744 bytes html/images/jim.gif | Bin 0 -> 14493 bytes html/images/note.gif | Bin 0 -> 264 bytes html/images/oxford.gif | Bin 0 -> 6069 bytes html/images/quad.jpg | Bin 0 -> 23904 bytes html/images/ring.gif | Bin 0 -> 4275 bytes html/images/smallliz.jpg | Bin 0 -> 16463 bytes html/images/strike.gif | Bin 0 -> 5610 bytes html/images/warning.gif | Bin 0 -> 287 bytes html/index.html | 97 ++ html/internals.html | 654 ++++++++ html/intro.html | 68 + html/libtiff.html | 728 +++++++++ html/man/TIFFClose.3t.html | 69 + html/man/TIFFError.3t.html | 97 ++ html/man/TIFFFlush.3t.html | 93 ++ html/man/TIFFGetField.3t.html | 266 +++ html/man/TIFFOpen.3t.html | 361 +++++ html/man/TIFFPrintDirectory.3t.html | 100 ++ html/man/TIFFRGBAImage.3t.html | 370 +++++ html/man/TIFFReadDirectory.3t.html | 212 +++ html/man/TIFFReadEncodedStrip.3t.html | 103 ++ html/man/TIFFReadEncodedTile.3t.html | 107 ++ html/man/TIFFReadRGBAImage.3t.html | 262 +++ html/man/TIFFReadRGBAStrip.3t.html | 249 +++ html/man/TIFFReadRGBATile.3t.html | 251 +++ html/man/TIFFReadRawStrip.3t.html | 88 + html/man/TIFFReadRawTile.3t.html | 91 ++ html/man/TIFFReadScanline.3t.html | 139 ++ html/man/TIFFReadTile.3t.html | 120 ++ html/man/TIFFSetDirectory.3t.html | 114 ++ html/man/TIFFSetField.3t.html | 269 ++++ html/man/TIFFWarning.3t.html | 98 ++ html/man/TIFFWriteDirectory.3t.html | 148 ++ html/man/TIFFWriteEncodedStrip.3t.html | 147 ++ html/man/TIFFWriteEncodedTile.3t.html | 137 ++ html/man/TIFFWriteRawStrip.3t.html | 134 ++ html/man/TIFFWriteRawTile.3t.html | 116 ++ html/man/TIFFWriteScanline.3t.html | 225 +++ html/man/TIFFWriteTile.3t.html | 109 ++ html/man/TIFFbuffer.3t.html | 101 ++ html/man/TIFFcodec.3t.html | 102 ++ html/man/TIFFmemory.3t.html | 104 ++ html/man/TIFFquery.3t.html | 178 +++ html/man/TIFFsize.3t.html | 75 + html/man/TIFFstrip.3t.html | 131 ++ html/man/TIFFswab.3t.html | 108 ++ html/man/TIFFtile.3t.html | 183 +++ html/man/fax2ps.1.html | 210 +++ html/man/fax2tiff.1.html | 257 +++ html/man/gif2tiff.1.html | 112 ++ html/man/index.html | 69 + html/man/libtiff.3t.html | 612 +++++++ html/man/pal2rgb.1.html | 149 ++ html/man/ppm2tiff.1.html | 129 ++ html/man/ras2tiff.1.html | 127 ++ html/man/rgb2ycbcr.1.html | 129 ++ html/man/sgi2tiff.1.html | 123 ++ html/man/thumbnail.1.html | 123 ++ html/man/tiff2bw.1.html | 125 ++ html/man/tiff2ps.1.html | 237 +++ html/man/tiffcmp.1.html | 106 ++ html/man/tiffcp.1.html | 291 ++++ html/man/tiffdither.1.html | 171 ++ html/man/tiffdump.1.html | 97 ++ html/man/tiffgt.1.html | 325 ++++ html/man/tiffinfo.1.html | 114 ++ html/man/tiffmedian.1.html | 150 ++ html/man/tiffsplit.1.html | 90 ++ html/man/tiffsv.1.html | 192 +++ html/misc.html | 93 ++ html/support.html | 682 ++++++++ html/tools.html | 178 +++ html/v3.4beta007.html | 112 ++ html/v3.4beta016.html | 122 ++ html/v3.4beta018.html | 84 + html/v3.4beta024.html | 139 ++ html/v3.4beta028.html | 146 ++ html/v3.4beta029.html | 86 + html/v3.4beta031.html | 94 ++ html/v3.4beta032.html | 90 ++ html/v3.4beta033.html | 82 + html/v3.4beta034.html | 68 + html/v3.4beta035.html | 63 + html/v3.4beta036.html | 117 ++ html/v3.5.1.html | 75 + html/v3.5.2.html | 108 ++ html/v3.5.3.html | 132 ++ libtiff.dsp | 266 +++ libtiff.dsw | 29 + libtiff.ncb | Bin 0 -> 451584 bytes libtiff.opt | Bin 0 -> 48640 bytes libtiff.plg | 139 ++ libtiff/Makefile.in | 348 ++++ libtiff/Makefile.lcc | 129 ++ libtiff/fax3sm.c | 1046 ++++++++++++ libtiff/fax3sm_winnt.c | 1046 ++++++++++++ libtiff/libtiff.def | 77 + libtiff/makefile.vc | 79 + libtiff/mkg3states.c | 436 +++++ libtiff/mkspans.c | 72 + libtiff/mkversion.c | 132 ++ libtiff/t4.h | 285 ++++ libtiff/tif_acorn.c | 519 ++++++ libtiff/tif_apple.c | 256 +++ libtiff/tif_atari.c | 243 +++ libtiff/tif_aux.c | 206 +++ libtiff/tif_close.c | 50 + libtiff/tif_codec.c | 117 ++ libtiff/tif_compress.c | 231 +++ libtiff/tif_dir.c | 1295 +++++++++++++++ libtiff/tif_dir.h | 268 ++++ libtiff/tif_dirinfo.c | 402 +++++ libtiff/tif_dirread.c | 1375 ++++++++++++++++ libtiff/tif_dirwrite.c | 1021 ++++++++++++ libtiff/tif_dumpmode.c | 118 ++ libtiff/tif_error.c | 49 + libtiff/tif_fax3.c | 1562 ++++++++++++++++++ libtiff/tif_fax3.h | 522 ++++++ libtiff/tif_flush.c | 60 + libtiff/tif_getimage.c | 2046 ++++++++++++++++++++++++ libtiff/tif_jpeg.c | 1484 +++++++++++++++++ libtiff/tif_luv.c | 1425 +++++++++++++++++ libtiff/tif_lzw.c | 1013 ++++++++++++ libtiff/tif_msdos.c | 179 +++ libtiff/tif_next.c | 142 ++ libtiff/tif_open.c | 477 ++++++ libtiff/tif_packbits.c | 261 +++ libtiff/tif_pixarlog.c | 1309 +++++++++++++++ libtiff/tif_predict.c | 461 ++++++ libtiff/tif_predict.h | 61 + libtiff/tif_print.c | 519 ++++++ libtiff/tif_read.c | 622 +++++++ libtiff/tif_strip.c | 192 +++ libtiff/tif_swab.c | 217 +++ libtiff/tif_thunder.c | 154 ++ libtiff/tif_tile.c | 219 +++ libtiff/tif_unix.c | 224 +++ libtiff/tif_version.c | 34 + libtiff/tif_vms.c | 588 +++++++ libtiff/tif_warning.c | 49 + libtiff/tif_win3.c | 225 +++ libtiff/tif_win32.c | 314 ++++ libtiff/tif_write.c | 659 ++++++++ libtiff/tif_zip.c | 367 +++++ libtiff/tiff.h | 439 +++++ libtiff/tiffcomp.h | 214 +++ libtiff/tiffconf.h | 143 ++ libtiff/tiffio.h | 327 ++++ libtiff/tiffiop.h | 279 ++++ libtiff/uvcode.h | 173 ++ libtiff/version.h | 1 + man/Makefile.in | 407 +++++ man/TIFFClose.3t | 51 + man/TIFFError.3t | 69 + man/TIFFFlush.3t | 64 + man/TIFFGetField.3t | 210 +++ man/TIFFOpen.3t | 273 ++++ man/TIFFPrintDirectory.3t | 71 + man/TIFFRGBAImage.3t | 277 ++++ man/TIFFReadDirectory.3t | 164 ++ man/TIFFReadEncodedStrip.3t | 73 + man/TIFFReadEncodedTile.3t | 76 + man/TIFFReadRGBAImage.3t | 187 +++ man/TIFFReadRGBAStrip.3t | 176 ++ man/TIFFReadRGBATile.3t | 178 +++ man/TIFFReadRawStrip.3t | 63 + man/TIFFReadRawTile.3t | 65 + man/TIFFReadScanline.3t | 99 ++ man/TIFFReadTile.3t | 85 + man/TIFFSetDirectory.3t | 78 + man/TIFFSetField.3t | 213 +++ man/TIFFWarning.3t | 70 + man/TIFFWriteDirectory.3t | 104 ++ man/TIFFWriteEncodedStrip.3t | 105 ++ man/TIFFWriteEncodedTile.3t | 98 ++ man/TIFFWriteRawStrip.3t | 94 ++ man/TIFFWriteRawTile.3t | 83 + man/TIFFWriteScanline.3t | 162 ++ man/TIFFWriteTile.3t | 77 + man/TIFFbuffer.3t | 77 + man/TIFFcodec.3t | 73 + man/TIFFmemory.3t | 84 + man/TIFFquery.3t | 137 ++ man/TIFFsize.3t | 57 + man/TIFFstrip.3t | 96 ++ man/TIFFswab.3t | 73 + man/TIFFtile.3t | 134 ++ man/fax2ps.1 | 158 ++ man/fax2tiff.1 | 205 +++ man/gif2tiff.1 | 78 + man/libtiff.3t | 519 ++++++ man/pal2rgb.1 | 108 ++ man/ppm2tiff.1 | 97 ++ man/ras2tiff.1 | 92 ++ man/rgb2ycbcr.1 | 98 ++ man/sgi2tiff.1 | 90 ++ man/thumbnail.1 | 87 + man/tiff2bw.1 | 91 ++ man/tiff2ps.1 | 177 ++ man/tiffcmp.1 | 74 + man/tiffcp.1 | 221 +++ man/tiffdither.1 | 125 ++ man/tiffdump.1 | 74 + man/tiffgt.1 | 242 +++ man/tiffinfo.1 | 85 + man/tiffmedian.1 | 109 ++ man/tiffsplit.1 | 66 + man/tiffsv.1 | 139 ++ port/Makefile.in | 67 + port/getopt.c | 116 ++ port/install.sh.in | 246 +++ port/irix/so_locations | 4 + port/strcasecmp.c | 98 ++ port/strtoul.c | 107 ++ readme | 61 + test_pics.sh | 28 + todo | 9 + tools/Makefile.in | 259 +++ tools/Makefile.lcc | 137 ++ tools/Makefile.vc | 31 + tools/fax2ps.c | 437 +++++ tools/fax2tiff.c | 359 +++++ tools/gif2tiff.c | 513 ++++++ tools/pal2rgb.c | 386 +++++ tools/ppm2tiff.c | 242 +++ tools/ras2tiff.c | 266 +++ tools/rasterfile.h | 41 + tools/rgb2ycbcr.c | 341 ++++ tools/sgi2tiff.c | 321 ++++ tools/sgigt.c | 984 ++++++++++++ tools/sgisv.c | 310 ++++ tools/thumbnail.c | 572 +++++++ tools/tiff2bw.c | 401 +++++ tools/tiff2ps.c | 1408 ++++++++++++++++ tools/tiff2rgba.c | 453 ++++++ tools/tiffcmp.c | 483 ++++++ tools/tiffcp.c | 1314 +++++++++++++++ tools/tiffdither.c | 314 ++++ tools/tiffdump.c | 755 +++++++++ tools/tiffinfo.c | 429 +++++ tools/tiffmedian.c | 890 +++++++++++ tools/tiffsplit.c | 226 +++ tools/ycbcr.c | 161 ++ version | 1 + 410 files changed, 80036 insertions(+) create mode 100755 COPYRIGHT create mode 100755 Debug/fax3sm.obj create mode 100755 Debug/libtiff.pch create mode 100755 Debug/tif_aux.obj create mode 100755 Debug/tif_close.obj create mode 100755 Debug/tif_codec.obj create mode 100755 Debug/tif_compress.obj create mode 100755 Debug/tif_dir.obj create mode 100755 Debug/tif_dirinfo.obj create mode 100755 Debug/tif_dirread.obj create mode 100755 Debug/tif_dirwrite.obj create mode 100755 Debug/tif_dumpmode.obj create mode 100755 Debug/tif_error.obj create mode 100755 Debug/tif_fax3.obj create mode 100755 Debug/tif_flush.obj create mode 100755 Debug/tif_getimage.obj create mode 100755 Debug/tif_jpeg.obj create mode 100755 Debug/tif_luv.obj create mode 100755 Debug/tif_lzw.obj create mode 100755 Debug/tif_next.obj create mode 100755 Debug/tif_open.obj create mode 100755 Debug/tif_packbits.obj create mode 100755 Debug/tif_pixarlog.obj create mode 100755 Debug/tif_predict.obj create mode 100755 Debug/tif_print.obj create mode 100755 Debug/tif_read.obj create mode 100755 Debug/tif_strip.obj create mode 100755 Debug/tif_swab.obj create mode 100755 Debug/tif_thunder.obj create mode 100755 Debug/tif_tile.obj create mode 100755 Debug/tif_version.obj create mode 100755 Debug/tif_warning.obj create mode 100755 Debug/tif_win32.obj create mode 100755 Debug/tif_write.obj create mode 100755 Debug/tif_zip.obj create mode 100755 Debug/vc60.idb create mode 100755 Debug/vc60.pdb create mode 100755 Makefile.in create mode 100755 Release/fax3sm.obj create mode 100755 Release/libtiff.pch create mode 100755 Release/tif_aux.obj create mode 100755 Release/tif_close.obj create mode 100755 Release/tif_codec.obj create mode 100755 Release/tif_compress.obj create mode 100755 Release/tif_dir.obj create mode 100755 Release/tif_dirinfo.obj create mode 100755 Release/tif_dirread.obj create mode 100755 Release/tif_dirwrite.obj create mode 100755 Release/tif_dumpmode.obj create mode 100755 Release/tif_error.obj create mode 100755 Release/tif_fax3.obj create mode 100755 Release/tif_flush.obj create mode 100755 Release/tif_getimage.obj create mode 100755 Release/tif_jpeg.obj create mode 100755 Release/tif_luv.obj create mode 100755 Release/tif_lzw.obj create mode 100755 Release/tif_next.obj create mode 100755 Release/tif_open.obj create mode 100755 Release/tif_packbits.obj create mode 100755 Release/tif_pixarlog.obj create mode 100755 Release/tif_predict.obj create mode 100755 Release/tif_print.obj create mode 100755 Release/tif_read.obj create mode 100755 Release/tif_strip.obj create mode 100755 Release/tif_swab.obj create mode 100755 Release/tif_thunder.obj create mode 100755 Release/tif_tile.obj create mode 100755 Release/tif_version.obj create mode 100755 Release/tif_warning.obj create mode 100755 Release/tif_win32.obj create mode 100755 Release/tif_write.obj create mode 100755 Release/tif_zip.obj create mode 100755 Release/vc60.idb create mode 100755 config.guess create mode 100755 config.site create mode 100755 config.sub create mode 100755 configure create mode 100755 contrib/acorn/Makefile create mode 100755 contrib/acorn/ReadMe create mode 100755 contrib/acorn/SetVars create mode 100755 contrib/acorn/cleanlib create mode 100755 contrib/acorn/convert create mode 100755 contrib/acorn/install create mode 100755 contrib/addtiffo/Makefile create mode 100755 contrib/addtiffo/Makefile.vc create mode 100755 contrib/addtiffo/addtiffo.c create mode 100755 contrib/addtiffo/readme create mode 100755 contrib/dbs/Imakefile create mode 100755 contrib/dbs/readme create mode 100755 contrib/dbs/tiff-bi.c create mode 100755 contrib/dbs/tiff-grayscale.c create mode 100755 contrib/dbs/tiff-palette.c create mode 100755 contrib/dbs/tiff-rgb.c create mode 100755 contrib/dbs/xtiff/Imakefile create mode 100755 contrib/dbs/xtiff/patchlevel.h create mode 100755 contrib/dbs/xtiff/readme create mode 100755 contrib/dbs/xtiff/xtiff.c create mode 100755 contrib/dbs/xtiff/xtifficon.h create mode 100755 contrib/dosdjgpp/Makefile.lib create mode 100755 contrib/dosdjgpp/Makefile.tools create mode 100755 contrib/dosdjgpp/Makefile.top create mode 100755 contrib/dosdjgpp/conf.bat create mode 100755 contrib/dosdjgpp/port.h create mode 100755 contrib/dosdjgpp/readme create mode 100755 contrib/iptcutil/Makefile create mode 100755 contrib/iptcutil/iptcutil.c create mode 100755 contrib/iptcutil/test.iptc create mode 100755 contrib/mac-cw/Makefile.script create mode 100755 contrib/mac-cw/mac_main.c create mode 100755 contrib/mac-cw/mac_main.h create mode 100755 contrib/mac-cw/metrowerks.note create mode 100755 contrib/mac-cw/mkg3_main.c create mode 100755 contrib/mac-cw/readme create mode 100755 contrib/mac-cw/version.h create mode 100755 contrib/mac-mpw/build.mpw create mode 100755 contrib/mac-mpw/libtiff.make create mode 100755 contrib/mac-mpw/mactrans.c create mode 100755 contrib/mac-mpw/port.make create mode 100755 contrib/mac-mpw/readme create mode 100755 contrib/mac-mpw/tools.make create mode 100755 contrib/mac-mpw/top.make create mode 100755 contrib/mfs/mfs_file.c create mode 100755 contrib/mfs/readme create mode 100755 contrib/pds/readme create mode 100755 contrib/pds/tif_imageiter.c create mode 100755 contrib/pds/tif_imageiter.h create mode 100755 contrib/pds/tif_pdsdirread.c create mode 100755 contrib/pds/tif_pdsdirwrite.c create mode 100755 contrib/ras/ras2tif.c create mode 100755 contrib/ras/readme create mode 100755 contrib/ras/tif2ras.c create mode 100755 contrib/vms/libtiff/makevms.com create mode 100755 contrib/vms/libtiff/tiffvec.mar create mode 100755 contrib/vms/tools/makevms.com create mode 100755 contrib/win32/dllshell.c create mode 100755 contrib/win32/libtiff.def create mode 100755 contrib/win32/readme create mode 100755 contrib/win95/Makefile.w95 create mode 100755 contrib/win95/readme create mode 100755 contrib/win95/tiff2dib.c create mode 100755 contrib/winnt/README.console create mode 100755 contrib/winnt/fax3sm.c create mode 100755 contrib/winnt/libtiff.def create mode 100755 contrib/winnt/libtiff.mak create mode 100755 contrib/winnt/libtiff.vcp create mode 100755 contrib/winnt/readme create mode 100755 contrib/winnt/version.h create mode 100755 dist/newalpha create mode 100755 dist/newversion create mode 100755 dist/tiff.alpha create mode 100755 dist/tiff.spec create mode 100755 dist/tiff.version create mode 100755 html/Makefile.in create mode 100755 html/bugs.html create mode 100755 html/build.html create mode 100755 html/contrib.html create mode 100755 html/document.html create mode 100755 html/images.html create mode 100755 html/images/back.gif create mode 100755 html/images/bali.jpg create mode 100755 html/images/cat.gif create mode 100755 html/images/cover.jpg create mode 100755 html/images/cramps.gif create mode 100755 html/images/dave.gif create mode 100755 html/images/info.gif create mode 100755 html/images/jello.jpg create mode 100755 html/images/jim.gif create mode 100755 html/images/note.gif create mode 100755 html/images/oxford.gif create mode 100755 html/images/quad.jpg create mode 100755 html/images/ring.gif create mode 100755 html/images/smallliz.jpg create mode 100755 html/images/strike.gif create mode 100755 html/images/warning.gif create mode 100755 html/index.html create mode 100755 html/internals.html create mode 100755 html/intro.html create mode 100755 html/libtiff.html create mode 100755 html/man/TIFFClose.3t.html create mode 100755 html/man/TIFFError.3t.html create mode 100755 html/man/TIFFFlush.3t.html create mode 100755 html/man/TIFFGetField.3t.html create mode 100755 html/man/TIFFOpen.3t.html create mode 100755 html/man/TIFFPrintDirectory.3t.html create mode 100755 html/man/TIFFRGBAImage.3t.html create mode 100755 html/man/TIFFReadDirectory.3t.html create mode 100755 html/man/TIFFReadEncodedStrip.3t.html create mode 100755 html/man/TIFFReadEncodedTile.3t.html create mode 100755 html/man/TIFFReadRGBAImage.3t.html create mode 100755 html/man/TIFFReadRGBAStrip.3t.html create mode 100755 html/man/TIFFReadRGBATile.3t.html create mode 100755 html/man/TIFFReadRawStrip.3t.html create mode 100755 html/man/TIFFReadRawTile.3t.html create mode 100755 html/man/TIFFReadScanline.3t.html create mode 100755 html/man/TIFFReadTile.3t.html create mode 100755 html/man/TIFFSetDirectory.3t.html create mode 100755 html/man/TIFFSetField.3t.html create mode 100755 html/man/TIFFWarning.3t.html create mode 100755 html/man/TIFFWriteDirectory.3t.html create mode 100755 html/man/TIFFWriteEncodedStrip.3t.html create mode 100755 html/man/TIFFWriteEncodedTile.3t.html create mode 100755 html/man/TIFFWriteRawStrip.3t.html create mode 100755 html/man/TIFFWriteRawTile.3t.html create mode 100755 html/man/TIFFWriteScanline.3t.html create mode 100755 html/man/TIFFWriteTile.3t.html create mode 100755 html/man/TIFFbuffer.3t.html create mode 100755 html/man/TIFFcodec.3t.html create mode 100755 html/man/TIFFmemory.3t.html create mode 100755 html/man/TIFFquery.3t.html create mode 100755 html/man/TIFFsize.3t.html create mode 100755 html/man/TIFFstrip.3t.html create mode 100755 html/man/TIFFswab.3t.html create mode 100755 html/man/TIFFtile.3t.html create mode 100755 html/man/fax2ps.1.html create mode 100755 html/man/fax2tiff.1.html create mode 100755 html/man/gif2tiff.1.html create mode 100755 html/man/index.html create mode 100755 html/man/libtiff.3t.html create mode 100755 html/man/pal2rgb.1.html create mode 100755 html/man/ppm2tiff.1.html create mode 100755 html/man/ras2tiff.1.html create mode 100755 html/man/rgb2ycbcr.1.html create mode 100755 html/man/sgi2tiff.1.html create mode 100755 html/man/thumbnail.1.html create mode 100755 html/man/tiff2bw.1.html create mode 100755 html/man/tiff2ps.1.html create mode 100755 html/man/tiffcmp.1.html create mode 100755 html/man/tiffcp.1.html create mode 100755 html/man/tiffdither.1.html create mode 100755 html/man/tiffdump.1.html create mode 100755 html/man/tiffgt.1.html create mode 100755 html/man/tiffinfo.1.html create mode 100755 html/man/tiffmedian.1.html create mode 100755 html/man/tiffsplit.1.html create mode 100755 html/man/tiffsv.1.html create mode 100755 html/misc.html create mode 100755 html/support.html create mode 100755 html/tools.html create mode 100755 html/v3.4beta007.html create mode 100755 html/v3.4beta016.html create mode 100755 html/v3.4beta018.html create mode 100755 html/v3.4beta024.html create mode 100755 html/v3.4beta028.html create mode 100755 html/v3.4beta029.html create mode 100755 html/v3.4beta031.html create mode 100755 html/v3.4beta032.html create mode 100755 html/v3.4beta033.html create mode 100755 html/v3.4beta034.html create mode 100755 html/v3.4beta035.html create mode 100755 html/v3.4beta036.html create mode 100755 html/v3.5.1.html create mode 100755 html/v3.5.2.html create mode 100755 html/v3.5.3.html create mode 100755 libtiff.dsp create mode 100755 libtiff.dsw create mode 100755 libtiff.ncb create mode 100755 libtiff.opt create mode 100755 libtiff.plg create mode 100755 libtiff/Makefile.in create mode 100755 libtiff/Makefile.lcc create mode 100755 libtiff/fax3sm.c create mode 100755 libtiff/fax3sm_winnt.c create mode 100755 libtiff/libtiff.def create mode 100755 libtiff/makefile.vc create mode 100755 libtiff/mkg3states.c create mode 100755 libtiff/mkspans.c create mode 100755 libtiff/mkversion.c create mode 100755 libtiff/t4.h create mode 100755 libtiff/tif_acorn.c create mode 100755 libtiff/tif_apple.c create mode 100755 libtiff/tif_atari.c create mode 100755 libtiff/tif_aux.c create mode 100755 libtiff/tif_close.c create mode 100755 libtiff/tif_codec.c create mode 100755 libtiff/tif_compress.c create mode 100755 libtiff/tif_dir.c create mode 100755 libtiff/tif_dir.h create mode 100755 libtiff/tif_dirinfo.c create mode 100755 libtiff/tif_dirread.c create mode 100755 libtiff/tif_dirwrite.c create mode 100755 libtiff/tif_dumpmode.c create mode 100755 libtiff/tif_error.c create mode 100755 libtiff/tif_fax3.c create mode 100755 libtiff/tif_fax3.h create mode 100755 libtiff/tif_flush.c create mode 100755 libtiff/tif_getimage.c create mode 100755 libtiff/tif_jpeg.c create mode 100755 libtiff/tif_luv.c create mode 100755 libtiff/tif_lzw.c create mode 100755 libtiff/tif_msdos.c create mode 100755 libtiff/tif_next.c create mode 100755 libtiff/tif_open.c create mode 100755 libtiff/tif_packbits.c create mode 100755 libtiff/tif_pixarlog.c create mode 100755 libtiff/tif_predict.c create mode 100755 libtiff/tif_predict.h create mode 100755 libtiff/tif_print.c create mode 100755 libtiff/tif_read.c create mode 100755 libtiff/tif_strip.c create mode 100755 libtiff/tif_swab.c create mode 100755 libtiff/tif_thunder.c create mode 100755 libtiff/tif_tile.c create mode 100755 libtiff/tif_unix.c create mode 100755 libtiff/tif_version.c create mode 100755 libtiff/tif_vms.c create mode 100755 libtiff/tif_warning.c create mode 100755 libtiff/tif_win3.c create mode 100755 libtiff/tif_win32.c create mode 100755 libtiff/tif_write.c create mode 100755 libtiff/tif_zip.c create mode 100755 libtiff/tiff.h create mode 100755 libtiff/tiffcomp.h create mode 100755 libtiff/tiffconf.h create mode 100755 libtiff/tiffio.h create mode 100755 libtiff/tiffiop.h create mode 100755 libtiff/uvcode.h create mode 100755 libtiff/version.h create mode 100755 man/Makefile.in create mode 100755 man/TIFFClose.3t create mode 100755 man/TIFFError.3t create mode 100755 man/TIFFFlush.3t create mode 100755 man/TIFFGetField.3t create mode 100755 man/TIFFOpen.3t create mode 100755 man/TIFFPrintDirectory.3t create mode 100755 man/TIFFRGBAImage.3t create mode 100755 man/TIFFReadDirectory.3t create mode 100755 man/TIFFReadEncodedStrip.3t create mode 100755 man/TIFFReadEncodedTile.3t create mode 100755 man/TIFFReadRGBAImage.3t create mode 100755 man/TIFFReadRGBAStrip.3t create mode 100755 man/TIFFReadRGBATile.3t create mode 100755 man/TIFFReadRawStrip.3t create mode 100755 man/TIFFReadRawTile.3t create mode 100755 man/TIFFReadScanline.3t create mode 100755 man/TIFFReadTile.3t create mode 100755 man/TIFFSetDirectory.3t create mode 100755 man/TIFFSetField.3t create mode 100755 man/TIFFWarning.3t create mode 100755 man/TIFFWriteDirectory.3t create mode 100755 man/TIFFWriteEncodedStrip.3t create mode 100755 man/TIFFWriteEncodedTile.3t create mode 100755 man/TIFFWriteRawStrip.3t create mode 100755 man/TIFFWriteRawTile.3t create mode 100755 man/TIFFWriteScanline.3t create mode 100755 man/TIFFWriteTile.3t create mode 100755 man/TIFFbuffer.3t create mode 100755 man/TIFFcodec.3t create mode 100755 man/TIFFmemory.3t create mode 100755 man/TIFFquery.3t create mode 100755 man/TIFFsize.3t create mode 100755 man/TIFFstrip.3t create mode 100755 man/TIFFswab.3t create mode 100755 man/TIFFtile.3t create mode 100755 man/fax2ps.1 create mode 100755 man/fax2tiff.1 create mode 100755 man/gif2tiff.1 create mode 100755 man/libtiff.3t create mode 100755 man/pal2rgb.1 create mode 100755 man/ppm2tiff.1 create mode 100755 man/ras2tiff.1 create mode 100755 man/rgb2ycbcr.1 create mode 100755 man/sgi2tiff.1 create mode 100755 man/thumbnail.1 create mode 100755 man/tiff2bw.1 create mode 100755 man/tiff2ps.1 create mode 100755 man/tiffcmp.1 create mode 100755 man/tiffcp.1 create mode 100755 man/tiffdither.1 create mode 100755 man/tiffdump.1 create mode 100755 man/tiffgt.1 create mode 100755 man/tiffinfo.1 create mode 100755 man/tiffmedian.1 create mode 100755 man/tiffsplit.1 create mode 100755 man/tiffsv.1 create mode 100755 port/Makefile.in create mode 100755 port/getopt.c create mode 100755 port/install.sh.in create mode 100755 port/irix/so_locations create mode 100755 port/strcasecmp.c create mode 100755 port/strtoul.c create mode 100755 readme create mode 100755 test_pics.sh create mode 100755 todo create mode 100755 tools/Makefile.in create mode 100755 tools/Makefile.lcc create mode 100755 tools/Makefile.vc create mode 100755 tools/fax2ps.c create mode 100755 tools/fax2tiff.c create mode 100755 tools/gif2tiff.c create mode 100755 tools/pal2rgb.c create mode 100755 tools/ppm2tiff.c create mode 100755 tools/ras2tiff.c create mode 100755 tools/rasterfile.h create mode 100755 tools/rgb2ycbcr.c create mode 100755 tools/sgi2tiff.c create mode 100755 tools/sgigt.c create mode 100755 tools/sgisv.c create mode 100755 tools/thumbnail.c create mode 100755 tools/tiff2bw.c create mode 100755 tools/tiff2ps.c create mode 100755 tools/tiff2rgba.c create mode 100755 tools/tiffcmp.c create mode 100755 tools/tiffcp.c create mode 100755 tools/tiffdither.c create mode 100755 tools/tiffdump.c create mode 100755 tools/tiffinfo.c create mode 100755 tools/tiffmedian.c create mode 100755 tools/tiffsplit.c create mode 100755 tools/ycbcr.c create mode 100755 version diff --git a/COPYRIGHT b/COPYRIGHT new file mode 100755 index 0000000..219b27a --- /dev/null +++ b/COPYRIGHT @@ -0,0 +1,21 @@ +Copyright (c) 1988-1997 Sam Leffler +Copyright (c) 1991-1997 Silicon Graphics, Inc. + +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. diff --git a/Debug/fax3sm.obj b/Debug/fax3sm.obj new file mode 100755 index 0000000000000000000000000000000000000000..38a010eb122455c8df9910f825921c9b0cbc3ab4 GIT binary patch literal 100952 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 F{{!|}AA|q^ literal 0 HcmV?d00001 diff --git a/Debug/libtiff.pch b/Debug/libtiff.pch new file mode 100755 index 0000000000000000000000000000000000000000..3a506494477b0a13cccb8a0cbdec778dfdb1890b GIT binary patch literal 2867656 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 jF7`?v4% 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
9k1n>Um-d6I9 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
  • `D*O^?!x%ZrN2gws_lYpv9y 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 z z&G~a5>9z0ukCbyR>b7f;fA=#fdl&Auk08G#UCL9G=Yj}V^3waGc5x^D&xK0=gHgK+ z`J1Y}3^de4G*gPqI|}XpEy^_g=a+VoR9X}4=H<3K4V_wJ9eg8 zA@Wj~J&k;mlKU#C&mZr#e{)HyH6-|Hk6V!6_>9z_JO2}Q z2>Ddizf7i5-;fJcc<P? zd?Ecga)A21guE@2_AT@`bB^R)tVKkgLC$$^w>^M-@|Co2WX~1d_B8TPq4Y2P>>m3# z@}qB+at_a3=8>B}AmvWlLw*p@D|5|wZ0Xuge z{qqm$pGePQM%1oB{_-u7Z~8i}2grARU&@PL?zSh8A5!7Pw2%D#oYlCQ{tWw}^d38a z{9TnFUap^EcJ2Yz*UIK>b=5GJiCotx!*i$ZvPY3C znxq`)yT?vF2)}B-S+o}~@}QDuXpa%(&%J^EUiia!X%zWGx6|Jvx6?n(ApcvXzu+AQ z?Rn&Ob-nMSKk-C+?LVsUApKt#a?5wPK44$Gl|2=ZE1sABcybTg6Ug4zNIAmwFr%9@ zN4H72?I(BHHOTqzkn-${TrZIu)Of+qcxx2-svH?!w3%x{Pp{qmdMO7taJ@!uIZw)4 zxPCSu|4=-{<&$y#K|73m<-C-|dygZ?XR7gsI5&O*dGDkQPha;rJNppz?b#IPhu~J~ zBl5dGB*Qx?zrDzB`J$9FzQr{e`E(UN&h;g`x7WTagX<&tF}A7K4j>=dA@%#nuVLgf z)I*_^{R8#{a^XhB|BoKd;-Y>3UCP;~_SiYdwcSzE6&VN1SiTp{W@8N!Y z5&2u^aXlvfoC~?0ezMp88)IehX}^j-6WRN9DNo-{dqB>=RLTpC7Z#9j|Av%{-tw@W zb}!?xUn+h2w*d0F2c%r^)qVCb@}IAfat{8FA>a9el(TM)+DDPU{(C96)4!(n@ot*Z z-}}a>?L{7*V7!38vvc(K$Tc%k-%EatAm5_oS*}0n_YvRYj3>~az@I|oFDQR97~hp6 zf9wirFVYu}^N!+3NCIiTdl*KvLR6#E!_kMR)t1%KxL1NnDq zyqa}2*FWTsD|!5J)`cR!I*0KR`n5Hj>-!+(`8~-$d)Ga-5BW?bd+s}EN0GPNT<_68 z#&}>9dG0Bx-*7hNi(LP(O3!A-#>kJW_FTjLLFT8qKT`S`jNfXI?>UL2A)BKWrT<+*e&I>wFW1j41N2W^4?5s$c!KdQ@=vHAdy$|CJdgbTYZxCO zPtl+6MIL%3*L&pQBM0pf z7nnn#zT_bP%U1d4XRLyJK!sFeA*Mt1e_S$DDx$~U| z?RMk~{>FF${fYLdJ%W7cPo)0HDN)Wx?X{nKM#?_MGv&x@89&dU-$(rpBX^C+@DSxW zihMxH;ysy^&oLf2gYgLZ;(V-pi~PR-k>N|t)K}zmbw5|0e!yNrE)kRMd}hhNnn$SrNJTY^1IdbrK>Pv??paS$+=fD{ziV&XBeOS5B&%Czv)9jI8$o>Z+b}{nA4U7+v zJFcbfAwT_g8GknU8%E~#&H3c*irQ_+*W4*(vCq^L@@zHZ1MFwt*KJ#0>a~CU6xT;& zi}6lAa{Jv}uS9(R>alB(zd`%WN6uh8+l9R53Hp2FEXHdi$i9C1Z{$M8m&cLsEvA1) zuHk+;^HI{@NdJqR=4Z@|oX`E}7UVqkZwVvsR^x%aL-ZHOuRBS0F!MXORv^D#$?c36 zXONGo`fF8l-Z%0q56SdJ=sy>c|D7S_(Q^9iFEjpB`ct(3PUMja`e)+rqdg2Ge@xwP z4Kp6e9Hu@f*>@d%JMyfT{#p1-dV7(-{Wi&;`MLx446?@~Dm0^N{;*rhiB7Je~Vz(40&cP{VQ_+4fNGtXTD?& z{U>rBiMi|dpT#h*Pa}Z;l8)*w+E2lo+sr_#+OUThu2Cu>l%?p%Hw`12e=>eBcGw> z-}5zq-)E#;P<)qNFiLw?;d6hv+m0fCnETIp(${rc z)Sf_o=4_=;dFDUPH7iTW^j96o+wP&iLBHd*J@z>A=G$d>@vFaNPa{|7N_m0#xV$HN z?FZi|1g&gD)YB%c`ZMGl`nPf9r}F8~kdM6ifPEbKw~R0H zk%#*Z+G*cnJkNYaA@UseQ+dcYKSO_poI(HVMLtqUe}+83{Z|NiU4Z@!d6fB`C~_O~ zUt2^t`9F+&#c%0fMEKYC+f&GEZleD{o*;i0kT0h_hL8)2x;ZDi*Z%QQ+9&c9h9HD%BkuUla?Gt&P`RP&Qd-u>jk$u_K6(5tlRb>PcR=oCS=kdLf&;I?Gst7>5C#) zTu%E$4m184K`uu=hU}v}r;*no&mhm!pIGDcFUZG{J8G$`$k)_SpOG_9=l&IWAMzq{ z-^2Uu0P=;qs6W3V|7lO1$fq??ACS|p>$L}vuNT)p*~i0i>D@)ca4 zvXT49@6_*NKSlW?577VTA*bI<`6Ev<{`4W&klsQOF4iU?`>&_`k*)2$b{}%(W0XH~ z=I0LBuATTh6BZku9z-nNNy+5-ES=z+ZX(f!xmZ zwHG-^f4T+vI_g_L@B#${`nUuf8>7r9YB6$n({}UKZX7f`HCM?{>Wl2^Ks-qlYfQC zdG%4wLC2o_D@OL&$>kps+^M3En)e%2yq zFn>3KeC2bLKk_K^*)zyLdlTi4JV|@7e!%_Wmu3I9!2G)x*{kj!JdB_H$O9jj;VI0& z)FS_Fvy`LUZw(+HP~kOVa){sH=z^a=Xs9a4Xa`|lj&4Qjq3hx^wc^50c> z7XFPOAHJXZhkYmG`+4M=3#9!L{eS)s(O;7Nc|eS(kRQ2Fh9CVp^U=ulJyOo5{`MjF zsrkRzKTw~3ME{`1tLgMt0ptsO)NkVRKfce7AlIq+%l;sFiyZo>Q0r`!4qZ?awbrxtRLnMIKF;axdfW z8stmAC*|SjJ$4`R54HR@p0^;MnIp?@l z_D}zb^;%*-La`P^?1T6!$C@=-*U*N-jK`VxD^Sn!pP*Kh;Z7C35DzCW8J-z!?x2C{HE7idt_Da|M5r~(^$>`UMaDZb~D@|89; zvK^N9Gmp4yr-Xl|j}bWYeT*gG>{Oh;PQvM7`{b79TiwKK-}>RHeHZgDMq2+j2~Rb9 z_i2(QHt`d($V<&9=5O179kI*c)9)z0uqwWi)>~Oosd**^&#i~-%?8h(lko7SP-}y7 z?8b_wTk6@JTyxF9u8MFuM~yIN7OOhH=3y9EGEvpE0}*L&R$jT(zw??QNPH#O&KMNa|OTX zuPd5bDV~xYyeKbza?45AaWh`=U98*J@z)Z6(8qia@eiu_&rA|O>!?)x!Mg4ByPQ3m zgP}c5fl$yY|K>w+?Mv*9sN?A%p57~Z?E8pkOvRI(B%WA0WARM&#MVBFv>k^>^Y_DF zSkz+=z`vyU&rQN#S;d;KvJGmx$f|0QZ)x zFA!Ji^K!59+$3=&P*P^jcAL(-k29a{w;Aa>A91~0O_|LQe|r`8G{m3&5yq2zE=v-B zSyLd<1vf1g^FIv_v9~x}8-QRC&Y;9yEvdfbWPv3oa+24mpx4-u#KKMSy|8VFv)t)3AYg!tccFF?wH~X7I zCRZ_BlfS*o{-xp1x+Gi`t=Bd;@2U@&96mUvzt?U5%HX&v2}kv2AMYlKW3U8^{QM4E zbN@f76Za~=bzJMH_pzkTwY;bj_nMmZd#$J5QIdKa%EZn|IzE9fXuU$qBV?)P9EHT0 zA>tSL`GeBa?_mi&=j88F@qU-NV<2nGl&*dcOXyaYS8Yx_Yxa*yPrrL5^vWwdWr=!! zQhNH_73pJXm2Yd@k+{~MrJj4XmDF>Na#@x^^HSG6|3vCm^J=`4ptzH#{~~qWbFPH0 z$jA7T&n@f!&=X;C`QqfN&esiP%Xf2SUA(fZtTKI-hE80f2XhXp)umxs|8RVYov9`C zN~*V3md5pTQh(9Wjh(IKtZR+mBEVWgN540u*R(o%@+e3*;{U|-+|36xU&0aX){8M+ zcc%hJmpAbe4|M;pp{sW);Cv>(cm28zB67Va*Vx8hJL@FoOCMlOk?Iq#rk&}Jnx1vu z?Qb*oQ4;&-w|#*1T-b?w38C-BE?XNWpxDDc%=@#1 z5aRYgV_2ZJAHsef`*&fl&upnw_WJrD^z}#EiE{&TKiF#*V3(!*uTplWXk`Pnoj9kU z7Q1&Fc0Og7X6Wm$+D@E{(2L!B47+QT-Rrcnf!a=-!ytaX)Uey2?9{EhVa59q-gWH5 z$v)0>HhNDXQO21Q-F6`yqKw6LqZ$r<{fHw#U>~m-OG#`$ut|6_vU}{y;3=e^cz?qVGPdts}# zyZvQwi9wETFFv@&FX*;6DlUSoz{}tg`kJd2uHN&z?X3n^eG)FGZ%Rm{<_f{(%{ydY zXQXk*%i%Kms1CSto@Gwd@N4JG;WE+~fy?2JsR7^b-lTGQV;Yr&#m7adWA%{;4Y9@Qkg*vw3wqjx*}tcmj`} zGhL}{&2$`1u#3-w)%l@q%yd1KjCYmk)4XOne{=#~onD#4Ynt0s1=jVapZb$?X^%aH z{V`Q1A4pPv;(224a1X)LHQ8-H2hW`1d3e=4v6TE4`}jC?3XI=%2B@?&NCVxexotzd zH!<_c9(xW>t5eR=d}TF0#qr0|I1k@Adt?30;2V3{e6h5?Xr?tT&K1(EDyL{;C-ob7 z@lp*8eK$W89sY9s*EU8vUUx#yRi;OC z>O_HWT!~YqPt4;v7gO{aJi(p9tVwO&rQ1}9^%dgx%>LN(g6}4&C(P%Ce_uNEk-Q+hsH zppJ8lIFFC?*yr^#_n_kZNs>5YX^?R;#?ZT}IuX_m^e@|M(!)MxW}NfHS<~2KzmqtN zRGiaE;*6!!U*8rkv1+fm&wWo_r%OB|)oDuK%Gl}cJYRy}r}%%fYW~gE{Kk8i@ryBv z=Ff&du!rYP@COwC3#;b0+|OF<6Vv8Vp|O0HX>MZg)zaqOPC1Xg>XXazxQ6tbc`V+= z@qK{xBgE0BeEh#8KE}tl+1gTicv&35^Wx*EC62roSTjN#T`G>HRmY(c3e;d9AAhW0 zEN!UYelxXPZP94aZuD1cw-d;I0%s2`D=+i8O9y_Y&qeJUiKk!rdGbX`#;hXF4RwLW zW;ZGk@7l(e*0BBs*;^MAMY!XQ4i~8t{jd1wIx5P?ETbXe*GIeUoBG-NRr!^c#IK50 zHzS<5L=)F_avrXQ!XCR7uA_?U4N17fE-9+>h}(-vkIS{sEA2aFv2HbYDPrG7T+=G9 ztd|v6>{^=+SIXud`y&R|`7evhaz9;gtduUJO;yr?knD9W&AUTRN8G^SFM{Aku{BO3 zn}PDZ|E%t~`lRzh=XE|lcYHW%A0WPYmHu}m@tL}<;`P_vD7$~R+-l*fX}R0}q`~#> zrwuCXrHrpEd`B8B2vKIzq>oA2TsjIK3@?AODcr?_jAaGQQ= zGVNywF8`U`_Nj)SHzwgKZK!M78OuCGXDfckSGiTX>$m7nT%S9LC;a26eJ1hf^)x$^ z#AD`%KJRHa8?o)G3tQzwpLgrF==;reWkbX>%$Wt}5Kpnnn_!Z7%)HU@=)9SP%i7Oc zOt}1tt2qf*Y#$v}XQjU-R9)t|T5nVCyLmDL|M5Ex+3$ou_ZGPqUCYbor$xrvq{aH) z&{aJDfwM?)?tb~4g3|e12G0r8r8+8S%;(l#nM!eu()lRXNDovn7KKZ-B$+tFihgF~0+CzAM5(dv@OY%jT`t}$3AmW#M$IRxi1 z?gi@M)O*a`orDwLeJzd6EschUlAJYwb@H25@HVzO&sMj~pGDQQhCVgu_94N9d%rP! zv9@&EH{(l0<@JH&zQkRs9u>{olt2wvKn3^ z4Sm?U@u}N7H%)7H@7O^)=o83(uR75=maY!s@6TmS3&)I#|BFfDkK-k6GlgGp`xkNl zF8UYotWu}1AO6CDL-yz3Ur_vCT`j+n#v$zE;#TQ&)2-5};~gVj&%+V>t46vWPZDn& z59yltcWiz_mzkNaN%)Vn9kL&XKlM&I1|455zmcwS?Bn7#%5P&RRBzV7dE#vNewY0e zHd!jpCzHe}^2^~c+KhDrW8S|VvY&<{UvWIO8V9%L!-lDjtR?BUq_qS$xW%`_c zLgazBnW1h;tUc8dXV+Hd$+6L8^z)a9)8R16C9tT`iB{dn)#>?+N)W2IVE_>Nv-U zv-4iwAHgQ5%J_FL5vSlFyIqb+IOcnJM<0$3#qq)_I1HDqOy#rmPmVxD8pM=`@K=n{ zs>5}xI+x!|cek{N#l|`v^Z3y5-ER9Vc%sUOKfi5zWM(jn3%-@j3wi^O4=Q9j`I|6)yrevd|{s~Df!uZ!3h!#k>c`u8e)l5xo# z%lIktSIS8pM`Ap+#MAYWZu>IgnN;zl@Q(P2o|%_4wKh6q6eIDaD(!0Q;w0Ybn}xEW z=RwcyvsM4+@`?It=$4tBMqPG!6ZF@b+=jm3clvUJd!6D|*9pg8S1*CL+|*6rb^0HJ zw?gTvzRl%zuRNIwh`g4sB5O4SLvB`u(Ha_`rC~q>&h&P@i>*Q zBp7O_6HUw7-oP69^!>K2NQ$}t(Dg50yifPUL36Y@rHm0B-qrSR z<-Wj3L;B0&a+6|(;?v^#?Nk=jWIFW-CYF!=_;8%}CT=m(^QM>dL62f$JVWq!-yE@T zH_~$2>Ui8lbhv3STafl$)qb>fU794$VSm)V)A0TDmyFZliK|O9@J!s?W8Y=?p0zq2 z*Y}9)yV**eXI*QXw>wkpuHRN2>snZ6+KY{zZ#z3leB7IgW2oJifpq%CyX$Q~>$dNQ zN8bm&H95~RU&Q;vi(%$d434)Y=eT-}m=pHZ?c{dbO;bKRTdwJ`ABIQo4}b1U@YLVR z^(0(xHEn8aktg}Z_=@3+W<=~E_|iTm$Md<#`J5NhI1o^h;@d6G>3}iLS~zR(W3NDi z^TOnuFgUZtF6Yv(WBpo|aaL6a+{X{?XRk2UgDQXDk%XK1$YtERTqAIe|KgziZG-FL zBwW-FxWrtOd~O=O>PzkzK&)d+oMY;TKX5L4{J>wJd@Wox|7NTGlpTlY193g{M{)V|E(eFkoYf-A2aIYB!1NXq{n_99(|VGnk0Vs zn@d`^H#V}SAXXoDS8uP=&p_CR-x*|eHhtcHg>q9rD-?A>a#eo;UmUGW*PS5!{VWCI}4sE<-_jP_)sP{y6?DQ$mJGea+7;Vn&Tm?CjA?wZ2M+$u0DaBwK}ASG_A|>Tal5SDr|InbueD z%q`P5$S+sA`n@?*cRlN{yk+sHre2}+^}BP+^$l|Jzewrpcj!$0&E;ifUbkc|>%CH! zV-94kF?CDUR9AU7ns5AB)|HOFI2A$a?-J*gs=5%Ma}3-{e_j2!s1?g*OwY$~x@7?R`Le7PTbZPDxxF;U^gxv*qj^aMJ zT5hBNNoUWFiSPB;2MnIx)$$nm+>1SKn*KYjH10Rm7j--qJ6A!Kb zTRM^?Zg`vnzy*&OwQC-+ugczqsQnl`UX>r8PtH?X7YgrgVUVmjI^Y<&>!3XbhaRs# zl7vG%vrgoQz%f_$3Hy6+=zE8uBpe&+gY~R-S;o^3Pu@qUcSgQEnuLe76yo?Zo_MY2 zEZ4?Ru)gZXn|NnHJp2lk*EMmJne!ZMhtMhsI_rx9dp6hIT))1q^=9VK_Qb|aqMa_P zXJop~>O304ukoHk_A~fZtMXawt$U(*qZ9hYC~D@@pLNG+I!+y*Kpp2ian?k6oZoSYe@s@4yi{m+CnzLF@Un7KGMWt_}zhqNM zg>#mttNg!OS6w5nsooZMfqg-TtLqctPWPI49s7gUQ*r)3&dvwE?&<#jpFnrdu85L;+y+9qj25ClPx5x!wTP?nKxu@x~f zF&!}-v2|9H+3$Hi=bZaF_cpHVcOMU$*XQ#-ulM`>|MNNLyp7zPd4WJdeo&pW-NmNESfGV(BVxJyoFQp=hC205IR zha`pbnU*o~LS{a4w+=XGKCia1&d3fWO zX|cCK*U8r+)XDQ!mX{j?)>!&`ZuP!L$vurB^BHvXu@^NS9UWT78xeGvyD7}<$+RCO z@FX0zP8 z>Z;Jaj^o(2wPl^~!8@vL`y_&G)9diofaU$mWp8d0ITqh%|1+P7t>fgwGri8>l#RWi z?%h)15qHYmC#(tm_qO2LeN>aT&JeqTa+$}PH9EHIxbKK$YenUi;YwtgQhMYr6j{Dp z3Aq);S?d0owW_*mr8}6YJ@fA1I+L^`JTFqPr@x~`{1|(j8`aqU%m2|HSr$#Xu7s~G zdb3z;@$GiX*N;6ir->hQ!C#roi)my`P6SVpSczoP$1RF5HKlY1)4<)6O*+W^x5nls zY~K2Ai>O3boKAziBiKBhPCE^H;Y(nxV6DX$`#+J5e_{SbmaR5VefC^y&nF!?~5-$pdfT?whkFR^idqyyUH{o zbGlyGaP?$n_@$HdpdtKmGctN;q;$;*y#nVJ-k)J}guP$S`!lWg#cawBzt5!!nX@dJ z1=GlEKt>O}RD3SL$#~wJps5>q|2>PNI6L(HCf=KInVaT0nIREvmhW|Aug)%GXz7x^ZZe?{z}D{O8Qe%?-=ccUNf|FqGYSjkHF3ctcZTHqur$rd z<2pQ_C-ZA56PBjoGOtJ(J5BR45ZvzWG^!`2~emoAW#Q-b&xxtc?6Q1qC7XUi#!X(~5U7m(AH7(`)j*73T$E?|(1f zd-0W5?-doy%lFxpeJe6&g~XS9&dkoT6YdQu6B6HDW!{uBUVMvk3+Cr#WM=2&TX{Vy zWxP1^*&{2Xh>uiZ&6M+&l(Wi}H5_#d#e{sX%M9zoMOUuoID6hQrYTETO93+$@8vG_ zsl(X2h`jmUd|-sJbAEwafZh42ypdSVx8+~z+=$^Ffp_$!X7O*ytH=295qRZ%SF+gS z`bjt%?qmLTFW+u7#}PB&@M;C$i3w}C&G_A5bJc(shv1bJ!Sso}j5XG0Sv!EouWd-2 zfenV+j!z0)Thlj*{VlHV{104qybiYFWptVNk>4^YgK_YqSB6a>OsS5;aS`;gF6M@h ziM=zp-XZ64_I=YOaHg|g;uttN;%x~mSkjuWn<6CH_N>%?j3=+rtg zW~4($fPcPESUcW6{VIE9`O0cHEz}`n*8bEZedc(LLaua_4r9_k+|EJlY~>)(Fne*NZj%R-=uNp}y*L-WLt5{=nd+rd zY<+e8E_rSC4U(O2?*{`_N)-|K)Owp+&4V^I!I3i2BCdoZUUOXjjU4WE z!!D7DoAd{f9(#+p#^PBWfk&_Hg>dx3F<96lZh*twXMaTm4)>x3$zbY`zUM*1U>pbG zmHE65-eeuet0M5K^=Xe-uG70q;YLr`I`}yJ4TsN`WUPuSMJqPnqVqWoA6)dXpem zI$XWQt>OW=OkQn>z@_eHmu6)+Yl!p8>Xj9%u#L1e-2!W@!9Qho?b0Thc2M>YCQg3r zNb779k77ryj#I~s?3nMA9^So6dt`Lj>-^8`bZ!flt{kBc~8on-VOK${QJbpPUp`CF5ulz_%7uP}f z{m0=~4*q`4|J025H8KCZO;}H_8KJP}qoQ=>@+(ytD9dx3v|xD}NAK{e&Eh@6nta?6 zLGRX2ZxqgCn<#x)>6P~p`oN?3pX$axjC@)N&U!_?_kSCIG~mwP9X@wWx8AKWZD!8dRV{vbH%KluLwpMD|!w!j_u z?-~bRxVz$uzJH@A`3GktKTi_<}dgQg}Q5n^L~OUzfIj+h+W+en}bC@;mU~nLI_iqvey{ zzfn|!pUhI>7vdjm09;U`a4r65qyB@APZXB@t{?oB#$EWs>Hwd3m3kjXdD;ffe@La@ z&PQ5A_E(HgHEuX;qv!$e^=od}eINgDm#{Y!JV$R;Ob2KGm;E9d_x&IKvcTJ<|1{*s z@K3xATw1L7Q${H(PP@28<3#)^)q>Y`;a?5;t@vN+1kxV;D6$;ZWi{Xu*Z1>e9h1C_XhUw)hedI zOYlE88yxpE{@r$O7w;a4zc;YM-pl~F4u5pn;JP=dui(Z2{@%bl$e$kY5Ap9-4Bolt zMll9X!(UwqxCj57(NXQ9dp-W%z`4}lRB&t_{@%bz?Hfc1_@pnQof>dI{$m@#qxcW3 z0|z#45dC0z53l^ylm5;g?c)BYRQc_reEYz+)G8cvMZ0JK|KV7LXW<{q*|S~r{zT!_ zGh0MD`1d6Wr{F)V0erxfs=U>a|HI(3?^n2*`WU-cyT}_>0Y6Ur(h2U}llBn&i!|D2a4G&36QW7~)wGA;9r&yE zf$xy*Avpfz4Wbh4tfM^y*Whov6MV7uhdYHo<0$qi*XyqYUF6?FursC7s~UR-z@_^u zob*wv7y>_oKf59Lw&9O$JNN?1#|T(T#eS<@T!;U;QE<-%eAfqm{1ojUc;JEcqD10M z+COl$^fwOfpgv536S9dT_|~7%{()<$|6|~F2U0(`(H2pDqQ6c0JWBloSK@Cn60 zet~1~H@FboMEQ&dr?U=H4^DZG`UP&Fz3&5mkxzLBCtT4i#=!nE$}?En9~ILs7X5?r zEZ;Aty$7dIUem$7_}?rBuc3X<2FKCAHGnsR{oo}0efELpT|jvTN5yXv>$0T(AUNScRlXLIeo_09-n#uAz~5*#cz%j5kF8Cj z3H;9P3MY_Wqu`zOs=Vdm|2J{Jc5(h~3NNI+DhJ2^M(G=XzXrVT3WZ1Brtb%TuHV<< zFE1^&T@?P8`i8yR=TYXs$LaD?NBcVr&egd7giRuK|90^k%0rEeKmK`3zzw?n?7^OL zaNo&F-!{ez)!=_Ur*IPT+riIj`N|{kpM5~PcxxH;8NO}!!&?ZRolX4#C*jYu4*bH6 z)F1HHwhf{S+>U?NHt>kF5Bw(Du0Y}kZ#vRx$ZhwIK15QY560^at zJWu@r2k_Ur5Pa>M)E{uJ^mhn8ub%P`PAR0X25%go{Da4jTrY;fe{WOqne`<8|Kcd$ z8js;0q5*ub;1*S*8|AN-x8lziD^_&W!G@_U7M-nUVVfUnRy4@>DEwt@H5e0_It zH{n6;;tU{+oA#U!GKaiHx_(4sI7C8poZ{B1XYq;NNlr`2osf z+#&7aqkWZpI{o`X@I~(`JV1Zm1-|wGg(tp?KTB}#H42ZgpI~-8_Qon)$67}{IPOD* zQ)!=u!4K>4-U#nw4s935CaL!wl&?7OJNqb{a25R_7?m}1MLI2nelG&;q78aKkWm!p7y*1Jef@U08YW*VjK9kZ__@2 z2k9S%z?&ae@fnS67F)qpm@9v&_=_F|KYOUcHILx`99(d^!kurh9+1#3mgmyGz$f>3 zm4XxTFIx%NN!4?0Z{(`%tfAJ%zf2UGE!M?NT z&%nOdl|Dzdm*5jNDO^o@kAYYIRpG{q@rMdd8&o*{(H4<*WV<-(1BK)Mi@#Rz%V#TG z{s}$}!10GD97Fw|0$;7mS2E=-<|xJk$Ef#B=r097x>eyC>O(d7xd-%n?!4*)KO`4& z_(kC#H#U*{(d|{#j#g0#K1BP+Y@q&)fHxkeaMDZEckoKu znG;v{za3($Krpt7ux#0EZ z(>{SqPue7^!Iz_N5bVQ0Z3nm%JR~vsy#;*bV5X38$|>7p(7Oz{DV7z zz`rx|P3BY1aqZ&pTG~J2*ZV%>WpK$Av~OUC`CS0~$o{k^;HCpwMGg23UH>LeSuYyE zU+MDL4F3>#^G}t&sdFiB$G3~Y3l*0B&Jw|o=>9W`^qvL2Yq5IYOZ*zZ2mf1PAN^Gu zI9s>hDb(*SaLq>bKCP1R*eud}RN+C|lQ{4qJ^uGmUK7CEex}|x+_O`w1S)p$!DDWIPiOE-$9f0M8|SB6yI!^%LOVGv1md!xNvx@3xCWpQZf-cacBE z;Ol;(>`5%4zJp(AP~(>Y#&2EVHvN7({1f2zuV`-xzXN~PF()z}(D|Qx4doO3D~;or zKMsKZ&U_>t`E93h{|tE0J)ywe6yIGhl9JoSlNwj=ze$vVKYW$;8u`A1Hi>5NsSA{S zU9(%n4)Ea`%kOG|lV~sLFa5~-nUB?hb1zl$_4IF};NvuI+QxkFm9}5hn`jPDf1YgfS=HKfb`l4F8l-i0rI&Y-Yin*P(L)^wjbbc8r-P;5!a)C z6#TYs|I1g1zg z99XNyyK;Rs?i~96hZIhIiSh^DcahTH@LY=+00$bhJ@NEMbKAvQ-T!4XzNrMiru&-` z#{YxhPY+Y_^4^#s@a_0FZy-h;dM-YBAT+QrYA4-SHd8Bfjzzej&C z1fD!;y(kC2MSUFsC;k~fieUd|wD;h8<|{+s#`kF-!A%L=I|P1{@$3Y6gz}nvF7t&S z(LRDJ-=ltlkL{to08f$sP2hd!&|Z89|3|F7f%gMPgGU%&O@d>>MyvS`BND<{bA}SxbrtRiB9l?^q%lIt-evSEN4Y-c@)`362nDPwnr9bHbf5rM@19+>fFW{I|@*kW+ zdPe1AudZK}l;>FRd%C}n=N03@`FcE^erT&m0vB|s^40qR`oQBlyu6=u9K3%8O)Kc^V6G@yr29|0Kd0d;ZeqCb>JiQ`=}>qPr-k=f$~TAdd3&=e){tts`^p?qjh2y z_@MVx_-*~P;o$8bDO|GjZsD9ydvl4ZZzJ^AwcsdSANxL`et`e|vU=af`a@bF>6fK& z;APSf{G_hmo%D}G;2-a!-VZNnW-WyI&3BbOoy_-}!T-2M;X&4u#v~q6IGOxU3bc!# zY5VF9X%(FpkbgRSb;2ew0sfl~Kg#-F%KUb5gAU(^KlK{$Pk*KOwy?f82>xTX!t(x? z=wkYlGKCYE5BtIKEh;@?8ISjXchh*7^~vZ3jBoxzeI|YDV(~2m-dE>eGUMR}@JoMI z;Tz!_22UKMa3AA?xF2JWZm$y-P@cgZdVHF6`vy@1{_BfMKJj42C*TziE1V+dQy0?S z>G47AhtywiyB^=jvn$=;>Wh^8;1OM-5B%FdsPyk-d=R^k^|~eMeG=pAh2UF$t?(Aw z&r0yGbpMbT!}kF26}mm#O8uGwKhUV;yX5@hBJ{tja3AHh9(?mB3O6%f7y^&~LSxEX z%*BM?sqmJQ>7T*R>G#R3clUx%tW)p%X}<@-r)Dc$@)xMi>=_pdK8|d zK8=G9)afhl6;4~k{PH^WKArJcF8Dioytj?@z7BBvOX~d~@3({ByN>pm{M|zP9#ca2 zCupC+!^@k+Z16)@(LRGa_ih!XU~vxZGdT7W=4;@+^!#_Yoc?Ed*8Oy9nk8V?p{WmG#@y(Rs5SU=DYA45%l>u(WLf>c;9Se z;Yc5D7Q5Z&al8|OL+|5}U#jPv(+;!G^s2%tdTTF0eP!9!pqr{zJac%q=L&(rGIHIga;wyPzZAXBD#(*Sb>R zc;4%+g6{jGEH-2ZJc3!g*V_c0>cuMp{ycw1VMbn&lrTOcM~KJh2b;u+$nMbb_&4z| zzc~GeY&DxKpOMk@x7BaSeC$6`1f`rg#r+Qcbv zM6XkRO}~o35n7&t*V;IHYGvW&N0uGQYix=|UqT1IbJ3T;a~W)pl&{~{lb4f|x2Px( z;y?Nt!n$X&xlJNP7ZO*_-NB&@sk3EtK~Y@u=ExnI+FbXaYi(J*XVjH-_ps(=6rSf6 z8&~!^TXwcOjN{4%7WnP*d%Y!R&g8gqzKlSIrM%vfGiOXFuhK;6=`kn&oB~(elv(+0 zZT1~);x-vhr{A8WpZO*0KV%u|2rIKmpEFM&oGG(=5iZdL4EuMvI^rKJuTAJJCH(DH z_-Gw|y7IbQU#wxuyByQ$OhwLY${63l^-VUt)mK=6RWOydw*#XZz7SFz#Ct(^M{A1F^DbEFl!(mK5 zdnb7UM=|#%$YA?vj>Ks>WQK-v#KKVt$GvdKJ&-b3tma6XhQsKN`m3t<_YuyN#r<`- zS<{3IuMDQ`N<@F}&6~u7@W{HbCt(kO$Fw!!RJs08Cc`7Y=lgQoTppk1IWPiGSpA$Y z^_cpZF1a?+E@M-%uAgymnV(%hyTj_|0DCANw$kJvohBx%{jW(&Sub}G?hz~8!8+V@ z_0ois^)dP1?8&gg9iqccS07C{Sr1DI*K37~*WsqChbEk?gB^tXg%$2l9WK_6nEu;@ zll5*Z;T|KLsdtCzaMRU06HeB(m@nJJG_3>d;X-+&9%BSzt}s_oKh< z<~H$5X*cCnjv*4^nOPn3{C}6g6MbH*%Tum-j*h@%*F+g-V^1YK37c4N!XDGV9TR~k zv`%|Gb@0TNwTS28k#$k5!Nji2v;?rBjo9Ni4b#O=640T8=)o+~eq58e~rk+>H zi07AhZC#F%A)w5@=$0UKXlkj0S1QWrU>ju-n=ubqyB>9T)CZB&4L4O#R8&AWP zqPh0E-^)+m%(;Sbi6wlPo?u+&=J|3Kab=$`rzrf`mlH=gbzf7iJ}FO{Ncp)19R4lv z7x?G-z0thm9AxBAv*gwJ9^9=h=3XpWY#e9#oGabk=PNENT`7-(FeMMRk(I>RKhh=+ zfyV2ez#d1hQ35y1}}`DPp;lb{&T7-F7sEcbp3f&Ru?U;TDHtx^%^}f)R(2yIcn(} zmudE5t2i8esaoHX2>O`0E|PaGh98gYafdxm<^jG)7Nj|3&Pc?P87FIUeChmmKB)qJ%(xx&UK30OTU+LP+3NHAmDA&&MjQz3jNKv0<$4bpJ z-5A`?Ofz0egrm9gW|0Ml$;(UN*elEi1N|0>;Yfj_6kn*4W1%h&mqy^owMig0Jn8VH z|6qLxPk96$UxBsPK^P9f`@ z1%-A+$}w_!!BfiR&C3ns`0X1C9p_vlr`NcooWHPOZeB)yQ0;lHjJK{PWs0)1a&yDh zt#XZA(6&V~<<#;#I_k1q;xIlS*5 zcLdLuN&b+23*N!o+r$ER>oxD1$h>QFmb%BcoYbPG;8?JW^&hjoZrd&Q?({Ef5sTn& z)BIOQ;Lk7M!2bLI7d2DQ0*mNIbOP|tC2$1SN%dkoGO`;D3SBzAjOt;6Qp`L4U6m*1RM>KQy_Gm{5rS_{VOGX@mZ(!{$(l7+ zWQ(|7B{z#Z6Ycfc%Pm>6?uu+yu|Ff?`{i+p)|WQH%~Mwm68{AuR?WaR02xl_yf=y8Q7muku77jWqj*Qo@P zYON<1yuTSfYNV?_C|47d!%VOIFzya;aZP~hxPqe2PlK|U=*jvs0@;gbJ#zd-Id+md zwLy7I_2juGbXW1Kg0kNI(b$_;;A22R?{6p8)kapD?C}-`aw#pL$?9BVWTnZTtSno* z8bMU+jJz~i%e!L`RRMz^n9Mjt?ki1x{bo^5xE@`Xuc0oRU!49!js*t8)&jTg!~O-r znYEod!X=u3VgIh=Vmado&h)*N=#Jl)Jri)qc18xdR&z`@_E?#_YuG1XTjXzcvu3S-ONYH0&X@aL4o(7BOdd)N4cw`O6tXffBCeMY-$%NtQ zgh$5XMk`(FHBYR35%x1JqsbW4kN3ip{BWDN2_BO#H^8%3Sa<{Fcpxl`gJXh0xO(u9 zDY*v8<2?!Vvj|)=P62#2Wgu5x8T|YjJijaZ1$l;5=9!$I$^18Vjp+DqK-X4Xo;IK> zLZ9a9QY$gu8DXhIp4pvF$0RzkSF97aqGLkq=$L^HlUDNIdkE{r)91c2SYGeF^{!4g zo#YE?i@86+#8;-HiE}J_{TddviihBw()Qdl1AFv!<&Mk``ICCg{Rz|QNkq@sJuTu< z^u*q*)?gl-ksie_|NpoZZ|fR!XKvME9N4G}CCcVhtyx_r^S)qBb>*6B_wrm#vA6zL z+8W@$WbV$DzFy2Y!T#5zPdavQy_fyD=uXmhKNG=j&lYd5MyWA%%)FYc#P*}(Aomiosn|FTRCtW{-7 zwkvjdl7HK6jXXnBUAb9&1pjPZuHKGNCS?6~_0rhvrFEvmk^ZYq;;$CR2Q%T&;pIP{ z5H`rIixu77l4Yf`6{QXl&s97y*Cfbwx$;W+q^P>0(t9eO6jZI0-JAO}{g zE3q%k-*X9ZnfODS_$T({>h$zSOxvb(cm`scL^eDfI?qpuz(YE@1SU>?!pEM)-2jB|)#16P^=rpWZg{pel~t`+ zB|XwhTgslkH{`zNg&S{n*BgwE5_ELdG>HH@wrCySi=e}oS-dFxw%Ub+4bIh1wbn|I z&Eyh1d+vIXEo-f1OJ2Flt|*KBQh~yd`PRjD7;BwchLO`#uG!1=6oF4h@KKFjJ*ym!!QnKg)4M2yx5Yr*P^9-R&i$TJYQDfTyJ^GS!&7KYs^yK zoxpNqXCNd5>$X-Hd#%~hG0)HXmYv4Sy)Yqb&LMijLap$^Fry63!`y<*^HiRP1tOhS zdf}K^hK9Rs4CLjPYnQRP#m4W72S(G>qQoW^p~TrrpVkkcQf) zkK1-7C3-&PCXI6*t1WUFXfY5qRe;W60w+_;OsN{wV&cEo6N&>1uDj z<#4uSXf^lI!0+6m=0OD!__J1(YIgQGpZ0JF?<~R_yX6_BSy`LKW_Z&yZy*9MX{x$l zJw;xURfWqV*2L31{{b>>WEqxYC!;3?Jp;RK7I&b>uk~CwBRwnJkzrY(`nM*%eU~=h z)+5j0#Jt)f?n6(h*0Usn9{NgEMl?V7)0Hx04wjcn_S%j59xGhj-=Z+pZ<2& z-f27G-EoX=%L`pOwXhuSDC%!UR=49)mT&7J=Kwx2GP?biGP`PJ--VIWZMT%mms>vE zCGAknpJ`dsek<8f&41T2W`3?@b{!?{&~oOxfRtkie;2`jYB@8PmvU+(kY5m-1d)gT zQgXrX0#eSkEL6}sQy*TgT(-W2%@^9A+s~SslxWz&Jrb`QBk6o85v8i*sMI4PyQR`J7 z{z4?1<}Xr?Q+6q}j&mX$c6~0IzS=vxS=(^w2$)aZ>x??hp%n2X+coeytE&>OU0>n*R;ib)gx4k{lhZ3$`5rCzyS zCI2(J)6w1Y`DSrGx|6l;Z4q=Al~t@&iKjAQtjOVAn6I{zL?XVIKR z>ZW-4ojKd(m;bwz@b-Fi7IJ#cHdGMVawDtPl5N?L59`RTGP1fav}MEBaVw0hu0OV{ z?WOl}BR36asP|vTsWP(DaOQ@1EoS`=SzD(Y7xn2To4Y^Q#fM*5hr3%T1y%9XX=EOy&X{slMp*T{dt~6T z-m}=Fxxy9dP|tes?P=msuAlWXUop?N>1Q=R^`4d9q{3ES>hTTeXC_@z zh)3M_Re7$yQl+VUR=!T_{fP=I_c0i`F&#JgtgTVW89tdVMy_&=3M-$5%gJ<3T&?u( zWM7DhM|D#upOmZJsM0z2_bPwov+i#7%;=TR8aO8ro|oJ8v&3t>G^pLEU)t=35cPqKU*SxyAT|euf-H>&4@^p`Xp(U5wrJk3sRdVsEo}9E>roB94Ssu6E zjYqw%m-1QeKxkVh>!6XFq^*%*RF#vR~z&*lP)rB%o9p(P`7pR zS*?C1G;ZLUHX~PE1#tfD7j{B5Z zJsV%C(nZ=5`>cA_WA&Ha`kCQ#+nnc>+}Ikg?d;dj`nGs=Au;M!w;U8-?WKM79_m@( zPoCVUerD^~vX_!eV_abJZC12;mh`4qb|;Tl&pLP}^R4GhWt-%Zzuk6AbpJJS5=gnN zmR#a#s{F~g4SZMe4bxv4y@@BPXIpRa`u((IZ3}&}#ZsrFT&^Y8 zNxd+6-gTOiE5|M=S8d59>Gn$2>6BC@mwdTOdpQpdA4kYGtno}GH@42}qhiid&!k<~ zIf+gUa`JEUlX|yXdbeKXwc{f?Y?oDMhG*M+^slqMG??Tb6%)6~vz6S!D^*(gEjg*% z$Tj^y$pwhp^*m1}Zo5eV{gd|9SYhMIqhQ$dP+R&exioAsd6`<`$(d)(`q}8o>wEV)?52S%>=#!&kb z&i2x!o^g|r8*U7h^I3A8*LdktdW(`P(e<(aXK|D!on1S!tTm?md%vp7?z)4brSSJ=hT{ zmu<;yY4+-V=bfQ)m6lxRE7E7*&aki0*Nmp`-)k^PnOK#H2%l&JHetj6lkOYT;C!IG@;>4;zP zHCtov^7GZRq#>`5cM839F?Fz0KU=umt8XzyN-otJgN*5Cwtd<7eUi9~_QLQ@nP<9h zl<873PsvSL^UEFjStEPjP1wK%O3wGLXLHPa^=yZwqeefIy3N?alr{NGmbH{0d1XUB zGdf}xC_eejgf-<)K9ga~zb0(04qNGt#}lQv6J92}t+4S{8l?SL=^b|42o=^Yr!E=) zGwU)Xtjko-ZWHgZF4K3iiVOZ{XSOb5$oTg|!iTN>xGRyYOM2@#8MFy^-5>JZ-<$(5 z_S9j|&}nVrZ}1IidwvkXo)CW4iKfo>{1nQuk=g%m_?zI5PiYl9;2+cczM1k{@%@tU zA-eVYSI9GUq=i^}>D?>i7ibdVLGK&t+?ncEeC}$PiO(Q>JGt{@PmAx||BWvgt8c?G zt^M9QIo~STF|0q?))w9s9J9%^w!e{%W7ophTE+fwPU>_nn2BAQ+r)1Yp2lwS%;E_| z;K?YxWX)=`?M7d8s9gyI9q$d;J{!SZ|Gq>6VbJlTAF|zu* z5NFtoc<>%8KXw(jtP`gqYt}ZGVVC*YXXuB+&aO4HHhLQ2aSUu3Wqn#ZK6O|>$!x~e>>2~-s zd6`A_;#H;P%Yqzra4dx53^?R`TFS4~9Mhd!Q|I7`jAcg?9G!5S35U#g$#IG1h?OAh zmshc7^)mgD*?f=aghPs*1&2A0f2rm$X9#VYU}o|#c;*d`#8mDPhr{G&IUJ@O+TrEj zxqgqua16px|KWO@@kVXHpY=-y}|ZP-eqFjJc*9+=eT1S z9kp7=ng}|ud0HLDW{3O7M+@4-58!Lkd}|}{;d6YB%(J{Xiwf)m(Q^r}zH7_#s@}e0 zS1vOnKQqfa+>~w0TKmtD&6rbA7~oEh!UbWMxaQbltbOQ&S&&u4vFA_~&bhYy=^^&G z@-hzQcb+Y4?N^7}H6@%o*Ooscgj*g5%jQ(Kp>_%^S$mH<+*0=Zd09nr!*NjFZ^_$x z)U~|ark;_W#35IMF7auJEQCEmF-C@aqxhRAZvghG%tx3FNIRk_eoZo){jL&K2n8Qe@l z`WKzY-3f~d@^ih7^_Q7&?!kr-UC8DY6nWQHIF&}$J&PYA8@{#1x!lOgD1_QG?Y#h1 zTHZB3R9@cln@8FQ)3VNROX_n%?2vUfMD|)s_MA{&(j`RHxz3Y4C(LH@J=BKlgR&IE zP~N z&)%1n{xNrZMQ;{2qN_{yUv&}sue_k{`A*H>9|?|`CBNJoBmcAc>)`J#-7Gf1->>;^ zoDqL8+njd7dU}IfF|225Rt{KUllaWc0 zFRye*a9p9t81lx4g*zyPNR9=~7;zk%obPa-DV))))64VscVm-D8(XjZTi&JXs!^9T zWXNac{tO4d2irHcil^W*`wi}a%lu~PKV*3v4V#0+;h*Gb!kIZp7vU03z_5Si-CYH1 zS1qgJxfyfEqB|FkU&0~tKnA&2bC~jP)0l8Op1nmh5pIBR+ZZQGnfr9O>E<2fm8*ZE zYMZA!5#3wicm@txw${PY?``AD(USJa5_ZkmfP-Pn)W| za`~#f)hlSjG8dPZFTwGFm!>6fB^2R<3@%wNWw;*Am1vXbzl{w8_o=n*7cCne*5Q(- z2^U_NO}(f@za#J)4v#F$a_;m9JYQEY{9#0frw*R&pESEXDVpce2t3@68&bUtPZK=3 ze_kKtk@d7U0#8^yb=RFtJ?(_6Y!jBtr2 zVA#JVPh!zGLAW8pnY#J74);xUGjSgK=Ll!&W}gl>UEMVL646&oxK{`#`yy%96FS^< z_0fb&AzTyTUbVtKsl$C!9ULOuFyTxc{68ITx;kj|rK8We0KdGJzJ48Ux_W2A`3X0h zaKE+mJ*C4=Yy=*=X3F$2 z_Kd^R+kdlolX#ha@3{y(AywSsnS`gT7~j9}$hJc27>vLZ8ZXZt=Wp!okHg=b#q)dw z9&cQgv#NAu6)Ue9PU_Hu!SRB$#pF>e+}-=(3mEQlZR3k@f8Bb|uH5q-f7NY4Zkg_e zI}z@!$G3?;!Cj}hU;3Z8Ws0fapW)b5_pal{Wy>mql*f(;G}*xnIa|R>C=PE^W?3+>5T$_YV;`S@#ODjq}Lv&B5_!JR0QRZk?^FgTEw$ zJGJ2N*8Fco;FpJ|!qcx4j^fwYg9XQc=6EXthqTe6aeT*kw%Ok_df~0(?7;!>j%ePo zZ{XEg8!R7#a0Ht1%?HOe&GDxQ9GO+iI5V5MxN2Fo@l)j%PSfYfzEJMDlk4U7w~P_= zlwZ>(jzrH+t>?oCdSn_%C3DKT&^CY*Dzun9pM-0C_s!yXxVm(i{wM+$>#4hNt;s7| zwzOhZsXXChcpZGERa4GSg4fiQ?GbpnzJwcRuT+U)@g%~NG`m%t4o@3<|6~Gv5`ias zWvNb4&z2N8w!hdaz6Xc7vE7V#sCV@D(ooldganl$mlF`V5d zvfwav_KOG{Cf{t15;(HIz~3SqrVdR-;7}j+0u`Lha&PjkZ1&c@W%;t}XC>UR7vX0X z?wC_m{~}mW`?|JUaRw@s4lk|h;MsogEn(J3ncWa#EYP6265xEe?;67JQ*7$Yt3(Gmz{4u}BTb zf_7ai?b2QZf->^<)1U-Z~&dDhBB!7n78R51|KWaIdL7|@`b7r_qUPg%B4al5jWMpdTqr$eb zn~*W-hKj@jxXSe%_9Ev4PqAffOn&vL~z^g8-*YI622;Dfs^qyUJL%o_4on? z=Pqs*9pJC7 zSIQ@?7k%J=l;S%U+=H*!ZQ#Ryfv-`p%$%6(+r_QY7qr9|;hztj|0%vk!M*tUE(Sl3 zulpfzAHIld!TU7hOB5Wy{!Z}4Z{kZ7Ji>b1R`9|f;!70VaMlJ9RZsr#egd4hoVg#k z_A-2lf>Zv=oDN*~H++eLJC?MIE^zAc%#c4q*Hi1o7V1VfenR;K|M3Ea1KaWC3f`$d*VLYmziM!8vU=~3Ut7UfXiorOoQtfMZyqI+*@F%V6eQqgb51jfNg~u0ge-Ze~ zyA-Z`<|g5A2B=8mbbN7Vg9FdttCsRMd%umM27HRnzl7Rm(E$GP0~Nk)zh=T8sqPwFlBQrB4CKUWLh zo%$OOUoPdl2Ym1KDtrfc2l#gy`$^xl_3h$y+Ji)CKfdnE!Ch}E`ToP2ML+oBG==58 zl2hQj-&1&U5#z=t?rmlaBY%NYT0|W9hAj%qJ!=cW8GRbF_h1lw_9+TGw3ksE$S;jc zsQ=mEQ}H!C3wxx$rE2h(x_rjcUXFsF*SKRvyGYwe`M;F*82Ot0sn6g$&Qko1q|X-c zou4UOi*N2(o7%qQE< z`Fth6h4!olJpMZEJMWw1JqF-D%7Y)A$h{+@;JePEeFyg+gm2>(d>?XqP*#3aQ`Ve`$ID z1>}EQyLjrm^f%}mUPKuLAGk?{FQL7z2QT`g!hKKDCxhG1Q#kuaw~J2j;v|LBsJ~MZ zYx&eyH;e3c+Uu+7zu-?>PG13Dy`PeAAU~SHFY5NVvyAy7c)yp_`{p0E2;Z&r-_OzC z5xyK>>h<8yZ>GPKd=IS`z2MxH^mpJc(qjxfL3tbkCogLk(YLWy$@pRfoNyt1I@tFh z{T0;}rL^fo~b6eE@HLV3QaDfA%r;AMB^TM%~^n ziiz(ma3VMb{LUrRFL2TjzSqG!DQ~mEbxYXe2;TE->IZlSzP$Uvhc2W(fIAuQOn|?0 zH1z>IPJa-82fpK9rapjEN@&l)XI)2m2lt)SA}Yb(VLVj^PNseD0PmGS`37&r7yS_U zL&g_1;Bn?Bli<%8AJu_7?p-eu?`#)0eL?vKcMT9H@PGO!-{5BY+Zyl(pHsfU{rxSX z6TJK$${*N|eM4a1`;-^?p7zA)r2KtA{)4O6ZxAUGGv4Y4FC;%p!1qz#2Eh(%m`z~c z0`ebRPI(>#pR%0%2ajKhz2J|2O8$dOlQ)T3ceRTntH^(_oD&4VPi-Lo!A*=G>cAgS ze<#76hqsDu@bXIXAKZtp`VsKl8_EBVvG1WxVkh`h%2zbFB)~m(cejggFDC!NHHSBg zV(_`qepQwC`X|Wad-#sHud45<-J3)?cz%V#b^Er89`L+JcXI3a4Py9Cbf0 zH;LKc-v3fw!M&tM3HYm8$}2d9{?@G2U$g$8ByB@!gEi`zf#T{n;%d4SXr(zY{$9?N(6&{_T3oE4YdAWdr!z2U1?a zQ%kW8d=ByJ2XFb5{uBI30p(S`znC)n0R7=S$}70`(snTm`~hn&@>jz6AQk*Ed&cFj z=kjJz3yx);Du0QLe+R*j(cX*@KK091u^n8}px(#FHjAC$J9K-#eK~#ggUlE7`)xg& zL_K)JN7M(x$C6*Y;5GZI@X6WO2+q_vZB@I-eyCl%hP~s+_dm{kD&Q7fK2mS(63yVx zZc^b(Vp~NAIQ}=PyzQVr?*=y?tZ)gGZm_9zyWN;B;`;akLNMaV8+y;B@pSKT3PmL3syH{+RI^__Vz#?_jyU z)C~S9`b)sgCv6f#;McBE=^@uwN5SuXM`3xdQgUy*IOJ~%cM`r59M_=IyOQxmFZij~ z6?Pb3?*N~5l)`2EG>h54XcsrmS9sxhv{~Th?fU&Qj90+3?^W$X?`6yn9%~mHPgOYT zDe4G#xt>oj{qu^)%Lj5Iv+sRMoane)gf8Sx7L=5;%pm!(SHNB>g;E`C_yt<0atz#V^9xcLRj1h{;b!jqSf zK2OkpZcupixfZby+^q8}jrrOrc-C9$eaDx4v-!VvaocAqy?yit>EN?JRe1Pv#!uk# zxeE8w9!`P(wOXZr-($%4v%jWB;W*|u4dC4Ew1=c`&EXqG5BO!q7d2o%=`{?lID+;N z97X>=3I4-Q+Cy*&?P>f|?c#REKTY5|#v|$AFIUnYf^+FF%D~Uk|967xnLjszFQG`~@79MtcZOE+ehM)lbkKf};;<7BNp#zvv$a!8`7zJqPdo8toytS&q-ZmoPpa z0e2lrdj;NbIPDcUhVgeV_?NsN2lt=0L5zW4xR~|ipsF9zwTd#ZqvfL-H;7vBsBW(l=wG&jV^31@9aYFa+b(kQ6!tNm z4}dRwUf~_|$8F$`uT!|Zn*JC3pDSqZus8b1W)b^byErV9_6|G@e+u|+Ros|!5g+im zj3;OFK85zC1e_A9_)?GEgzpgEKTdnd`+DkcC-~ML+Cy+I^e~32Ui8V97rS_A?%JUZhW_ybggUkxu}>#d^jFxV)UU8hkYAGYU>-yu1+n z?ivbcLFT^+Vp@gZ>PS1`UuHej4=zn<5hLLH zo~QhPJC?SK9pJop$`82yK)$EGO#6a;Wnf>|CXohCxSa9>-V(P-lz`vLrTl=0&m|1F zdk*CXJV1Hv2Cqye|G^#07~6yYNqRJa7hb|#4V=Y#L>svBpjMIit9J1PmXhPhKxZ!M6^Q|KL)}{}i~N z_HhI}K>L_9)Gq$-UGg71oB2R4_(SHa?0l%{s`Tr^Q{IE&H{hBmoei{vqYHku~;B{w`|6o~bO29vzP5y&tow7kR zfWI6g|G~W#j7Pw||04e-j&BuP!TPu?Q>z$wi4O29o!2n&Au_vAmg>t)K= ztF(W;dh%c5H}DM#e#uAvgBOw?P2ks&Z;+VvtpV^j@o56bG2Wj5m!CrZ zgNNd1KZhBA)sg?;gbT14+{E~^8=TAfQ5ksreDWV$4sHS;F--o0{fDtW2ELE>YY<#Z ze>M(&U<3INZmeMa1$_Rm$bazERm~#dH=HMXi~I-o(4MD*pUNQr!4COb3BKb(@*ljt zlC?+hMemUR;F#rO|@*lj7^#$j*tXGjAvHV+qT8l^==e!i-(|B+>?NcuJ-!GHD z;90DH*McYBCx5|P7|(Qr|F9eR3$CTT90jkTyw3(#)1Sq>$M~J{kq+*iApOC&o=X0L z%Sqod@Z!tJU+}hfZWK-6(Ja!q+TS{G?Uj@t@CL^34d5i!m-@jMF+OSnSJJ+31Fxd}ZUe{s zl(zJJ;vGl+f~zS{>EOiO$zO02>*wX*HyA(lf@A5=n!zuiuOD1Of3OAo>s0a=Ed6?K z1III78v>VK#aL<^?aejhuME$4H3|F|%I7H9FZ)OEd$dpE;I^ZhMJafU_I3h1@W^`6 z2tMmk@)ta{lKB((!Y9aIaNmzw#5g#Q{>J$o`dR;o{R`t6+N)@AH{UN(z-wE{fA9d` zqXOV|!pDPSSx>G3@5OjA5iI?Ub$~ym{hbAtehvn~7blVb;2P$q+rSgYkpJLv+P~-z z_}+34`40{pzDXp5j~gKW!M5Dz~L*~zr1o2DND$IaMv-6hrmCf zJoSTn<61=<+ z6p{a6*`BM9-*S)tu4j4H@ohKwecS#1n~~|d&cKg{ec-JTx#0J0S1u=idP&E*8QI`> zZdXom($sSqZ(3Ayiu@TrvG93|dtOf1k9DstuU~2v zTKDO`X_D0Wg&oclaDy6MxSR?pmydm87|LIGAfo$tgmCPME4p%ZW<@!hYWLD*xqv?1wb=td{01%_?7Z z8P{k?P+qw>i1@p3#S*-PtXbyDb@)4id!OXq&K;voqJ%qvOq}F*_Q`t2aoEwO?U)t8 z4(U_zoQkDuR_i-9q(1~{kKvQ+c;nqoVyooiZXEgUqzHWHtSm3rR8HBFDyQVoJA?L0 zKMK-+g1q0<@b|#q{9%iD8~z?`Z)zm|s>PRScQHX5hvDd5(uiTtZFsK3#>AX{in)w(Q$FVy40=f4VFa{A3IKs=$+h`H9GW8X}yah z=$*G}Wrgc!%}W0PIO2cZDh{K{-7A`>z)lz*C}mnrF(xu+8L6Ej(#| zV1Js$(>_xk($M^t5I)RScN`E*D{X(NOf2~~0ZZ?GAXsNjTFE;djcpy+mc8sIQ3iLl zj$>y8+d_0%aU6hW)VEnwSUmU7l*dGnf3F~Xhz{=#u*~wst5=&cVC)}5Z_jyrJ13ke zS3QySPRp|$o|Ka}i|gSrW#;h+JmiDRqmw+C*HiFx9&n3T2Ty}e&;A+m$dSH@SIi35 zOgLA%!Qy#lhCEhsI-3a}YO5M`lE%~8pN!to(pGUh;X1VaTO#PSd2IXB;2FtdkD$f# z>I`{o`yV2_t;3uYBTm}$u4*P^7?XAj(H(tut9YES#*goBBIt(8&#@D{Xn7pvaBPj{ z>^mIBukc6&4r~l^$g>mfc?0<5-_*w7J7Z%l{K>bm1_OVuPUqJn@Jrto))|J?GQM^D zh5A+uaF459w|mergdeMK8e_6 z+`FqkGdkgAAfb$P+?q||Z}800cKkDf9g;Ut#sN8fSY|a=G;kO8?%F7Mjyhb2{B~V; z4*Mn0k*0M_eUpyGtF?bTsX?7-{(|tk=$|#q$MTHt1R;_W#cuq!`w4nUDA=y$Go_*1 z4wl(m>`8dFO?(BPx$koK)QIy^w=I-Bb{n=3o~Acj#UAWwF!x%1Ylb{-r1bw{2yfb8 zWveQ^JY&|gYx`A;-r_SiivtK}+MazP>&@q)8IK6PvOFB5^s48xR05jBLpSs1yo%Dr zmNP-Z{Fna@Cfuz2dAYe-n6_HWG{klvY5IGIBUJ8~}#!uRJw6t%QycR1r>x8c}&P^LP!X|lS ze&sG+t$oh>D=ODidgW_7woNs%_71nnpMxUVHh)p}{CwXzIfeGkON1r7Iqx%9$>eh3 zmutKH-$}eTYsUJ0epa#f{$$>pwPO9=Uznvg01^Ha-kbGd-WSZzw^vQk&3m&x%zM{s zVNf}LoXUH%Hq85w6HTYv?@XQ(W=-a0ZeE*quzV%oc>cq;D&$LbJ{}e!tte|MA6I8r zR9u?jtYSfg*{OSL64#O_BnuI`dZs)dPjU`WOaEu|Hlla%o;Hz#-WsjBnp!i@E+K5=EK zOiRWhmsPlVvvYlKu>UgYChzf(ZM)Gc_nS>!v`N&Uw^Qq79rbJ1_Cn*P`boo;z_*ye za`seMT;Km6xV%)PFWMy?y*_c5bo_suy$?WLb^ZT;PGO=_VNsHi-f|iy8R}FlG8h*I z?gCd}8&hn|u?fmH+?b-0lFhdcV*6-+7;N-skn^W5@dX%dClC-WC0ZRQ7+-`N}0< z{XgusZ^7rVI>&Pt$d^RJk%3l9Q@*2=Uy=)!_?5Dh?PPdoEdb`qDu_)DTyTEuq31Ujrz`4YGf`-JiSis%U77%2cz1Uczs2ym#iu% zFD*5LP;!0`MfDOq&WIf+dcEzvQ63L_dZOO>^p%AYKdXw5S&iR_rzi5APw#GnsXH<@ zk9ykJyvWO%LPKgjW@^n?p_E@qWj-Gbd+JeBYsLsITD`oipt!JLnIR@0KQ#6JJjbbj zWNLGK=SR#;N4}(_sx&`b=@rVDXA@hWl~onKu$k6RJZ)^5xPCpi)=y2X8Lza+y?zBN z@@0w^{q6Dev28G19yWLUw5*?d+H7CE(xTP!;*?KumsAwyFN^yAg`xMwD^+@*7^}U8 z-WPjR>PX(V7(L>bhBl^6#V9T7SB5sGPpUYO(JWg}MzwK$huE0@_rv2+ZA_fYqSd}Q zmrq4?F>x;GyYk}cyye7sEm{@L#MATZOUr3dl?)CA#sKw9R38%?vxseGy)Ix)M0MHO z{&J{V9oy($M9WyH{@Ha>T2!?eN4bx`YjaGkn?A`wr_Yiht)oOv9KmY@9>N zK=jU}ET&Qa&eeN|41Gm@u%z7SlF{O}UO}(M_n5v&xg;3Se((DC4w?R?LSx>qABg&o zZ6{TU8vt4RgPVr0eR$Qy zs4ljX{mIp-e|B>!{$dCC8CR$OIqEObApB=n>m734(k?6G2L#UPFIw-*g|uVJzzz5s zt@OXTTK&(C=YslmYcG?C*cEH)8a7EFc2}<7pGmxJnV*>d>A6sd^)nOS;CC+xJ3GS2IK{OR&CeaYY9c^qng9V&m~FKMxx*NO%F>GIu&-N8FqXM~;JFR&6j z{gZfu@{@BsMEP!LF4v)EE&a@<7atS-e7j+kO_eGe$2jJHHZ+$w?Md4YVxMsrYo84J z<;p%$*=}gAY~I}9ynb-V1Wu2llMtSS8JgWM%(ir7kT3%K{#>3?+jYm1BDxFd0gv^$; zQod=N^%2%xGy3nRI zbxRtWH>_bx`^F~sFL^F1hPn^eY+?=VQ4xCyKJrw*yoi1|-`XP2r}ylp6(3X2@ZC8+ zs+5n5-;s~#DOhFLdcO7BC->jn7&ZKZQG6^8 z-fCZfk5=WQ@g4c_&Y@PFgU+v65AMH7NGu+$@f2N`|0L;(hxOQYs&qHKqja?|?;K|E zHFrhCz6@Xe%Gc)qlP~XFntbP?)AH&?#rD%70Y)qc*nE$mbYPaP-tx4hgfR?cv?JLONh&snFFK~`J z?w-!5_S1-;sV8>W*W+iO^0RFLKeGPFtwYJN`^@{R*z(M~V0lGldBw@1kjT>fi}d1? zdDwmO$2QDaTz2 zZO&SpZP@q*MQkGT*qmnANIGRJ{nypq^Vpf??bsDo`ksCC%wuPkx!A2Vu5-7~V`G-N zla^8Fz4O?ZWiB>mJiKqrV`G+iS-G@W_xH_t^f^Y^@c@#@YZX=I)1^BT+ns6Flm9Bn z7&MQKt|#|>7q?HUW7V(Sx><6W^XOpoeU-#-HJ_Ku_eOb3yX|}MJ*E2XjSKW!XNMeF zu8dzj*YCy0!(PTJk>7-U zK>kSZlQD6N8WXjTQG6ud&$>5!$oYv`hw>rm#{Oh1jrAelVi)7%e#6Jj$_HOh#Qo|o z-cTxU?Q|X{vG2hC0qi9Xs~Fs(>{H^bxwc-s!CjclG3{dpA0mCw@Nuj1p+33wd6K@Y zsv~-zaR?t7PwcdZ@genb7#5xQ&||gF0VHfV(f2ATn^{A~yXc4Tk$k4RkHc*X_>j4V zRBJx|*yW4A+*yTAGXsC&o}Koi_|tQWZu~7YFA^{2d+l6&4D|555kB;s;`Vpo!#v-g zW9#MBol&^gUbj)Mb*`gZthG$W{k#9!qC&)tvWh(i)XMy~yYps(p?PE~N;MR!!96t1Q_InHX2=P*8 zt5Y8(bu#M+I`OzSZI;EuO`F$kanFP{@PmQq7?HvIZ0UzO%~8^vI-|pWnKZLiz90Di zlO`{p*0yj~!%akpw*JhpX8>C;Y z(*ODYIeq;W&g+x0=_NY%T+%KcXN@;$H>$LMyFl9P+2GEl_--T2wN#JSA^fBtx6?lS zKGtF>KhNMt|I*bTGH#|ZUhAYTt-`7xwSPUd90_nn`7!mY|%Bp(g616(9TX@jk=Hi^|7`68Ly`p8JnE z8{G5~NStSFvHxy15Iy#HkoNvvJU1h4-9BC-ZQTcBeT2fM7w>sjFMg)>-s<@2Qtj;J z1^kqh<}WRbd(&ZAA0Qv}Oa$K)BagV$CG4q**Mz1+>HHBrxrG-`bMJ2u% z#~((g*Petb^y6#ii>0W$bjeQ(kIGc0(D8hOw;L7ZrF66C?;~2LGKbFZ2<5R_qcZ1c z!mHThaCt>pdBxJGGyeFf)~dxXO6$I}j?rdlt@>ULZKymySVR_mXZ$gx)6bZcE>W0f z>o}#=&zjJxXFoEF_Huf>(&^_&=vFMv_n&$|Y4kH4l`b!9&j>n7V;=u;M=S3I-RC-J zd3?pg?_kLi-t+ptL;ZxKmG?cKwmiH_&RgFTMl*VXqm_4qQ7t27h3|#*B1a?d_moEF zIUCko;w;?5lYWjZ*MGeaTB5Ogw3+J$`}UlSzX8=3UZpQAIRBA!m;h}%+MRz%#w8uS zA6lYx_L0t99^ZG9&ZtV~&+jCiXsKA%=dpF>NbY$$lO*SET)5I5rcn09mFsh&yv&f7 z%o}dB3-C9t^78iu@)9iJd9ks#-g($L{Y>>Ajyqk~$f~tWYgGS1L$@jQZM+!L8r8AU z@FYB(Uu8Hd)f&~e&?IczWm>2Dm3&7h6EwM^uWfO!BWtg6v0+Q|x~7u#`5PO!AtNom ziz{kuSbN#J%|!&)7fa?I4MmM>E@5KH?+E9Axz989aFF{ovux!XI&(f0+Df}B@3h0@ z>wqfb_nbL@yYl8kdT$oyfeoBMgR`xhwfEz9N7o$5ykC#`gQPQ9MXVyynN#T;u~0hd z>5ZI{_OTBiwNFRvFXBV*7m~7o57shD(eeq|CTs8E-uzU`#LU|ye#ed=&I5i^&T{9~ zM=#))fxx+qRmJT<1Gf4aBFAH|AeVAnUq8wVy|IK>&Z|Q_whva6tS}yJTR%4Zm6gl& zs?sW?|DjzY-JuQUs@hLyXWSyIXn7H1)G>nZePMi%Gb=hGjQS6 z`S+L&ZeLbSrl~yD`(?`pa>>*0&_cHquc`#vP97*bgN^^Qj%rG&rVXK9FDE zE5jo>rsF)61pQCpj^fxk?o_~HmTx*Rrb7({IaxPZ;38gjH zouLiqS60gB4bjp*LFvr(X6W*lSCz-TYh9$Y=2|nQjeF;MqSBh{rqGs^7ncwa!Pvl@ zoSfupee3DaGF&tKGCF%TWm%tewZ3(fXqi?9eR~pTx;o$bNpvgo+;eizWP7K(fQXT6_&B&iT#w#&6m$~(~iC)MzgFW6!MEm|14LBL$}$Xi(4Oi zwyR--;HYMKILI8@$bXKjp-iHh!ioxifRS@t&6$RVcl`eN7N6A`bwMRRarOE+S94aj zr-^GPxmu$Jj=}<`zm?`!EG;q1JU){i zc=atAmiutVChuz4sC8a_Q$JPtOIYV(uG`+Ab-sGkmm!}^YopeBb;)YEs#S6lOO_WE znS=2rt@YKX^U0Ii0Lx#_O~&?YX2X07$wjr2KZ`1ERuZ`ZZX8(;7lue(y~yf%iv_-59E&gqZ3{i$h! z?#ue0bpc$Z{d#SZuOH%?igmTtdF@gvUWDkiH_N(4>s0$(xx_zD`??%=yQamlxOvx2 z99P9F$4e@C!X|ymY&RWfRIyr1m=7(lEMBs_s;b<)F6~hH;NcNJZ%&AwXA22UtS-~W zm>*)}e$ZfSE4I_r8goRnGVhAhcbj@+tulINdA2@*L&Q9^h~b#h$~RnK23P}Tf$d-} zI0A;i8L$S-ASPoYSPZs;O<)HY0eitc;2<~yj)LjLSlkB&!AYW$c?FmOZUeKx0WcTb2Zq2|um((fmGr?JuobKUJHTyVFE{`Wg8RWya1PuD zX8cj&tl$%z0qem-U>BHj9a=C0oB^}I^l7wUF&F|{z#4D>Yy>C3Rxs%`(g(A_Ua$@v z1iQdda17iB&VrL*fS7I!Tzf`NoZUb|{POu*A1G~T>a1S^J9t6k1OuNUP0;|AT za2sg-iM7aJDtG`4fNAgQv9rNEFb}K)!(azk3l4)#-~`wP&Vij^`nyRV%mIhMYH$o} z1;@c*a0=WH&VmQQzzq3J!Vb)N4|ZTZI0klt;tF3z2Gc316qIMygoqsU=A1n zYr$-=4a@@vz%V!t)`D|j6Bzg)>4U{!C)fh^fdk+WxE~w?=fH6=kVg7oF*pl0fz}(; zCzuM3fdOy^%m&jxMEYP541-NzE!Yb-fqTI=@F3U;W_+0R!5}yU)`MeUCpZp{f>YoW zI145nL;8PbtN>HNYA^t91GB+lFb|vt!(duE>4SM-6W9#4fqh^nxF75Tt&fmCm<^7B z)!;bT22O#4;4C-?S_koaEa`(eU;wNIv%z*S4;%o);6AVxoCTY}w2zWLm;-i#HDDju z3J!sN;25|U90#YtDKIUA^uZu#y~%liso($@0QZC0p!G4*2Q$GiSOwOC?O+o)0=9t% zz)mprIMN4m!6C2?90NPRac~%%0w=*)@DOPIgLZK|>4U{!0Bi!Y!3dZKj)7rt8mt9V z1Ede;fNfwc*a^0Sec%u{1WtfsV9LiyAIt%#z&dai>;$cU(k{SMa2gDNX`di{Fc-`N z>%cJB0oH=UU=w%%Yy;CyAbl_o>;oIYA+QS^14qDda1xvXlNOOamVYShv-LVlkc}E z{~-AW7lTb;4cG>@gPq_o*auF5Ltttl`3CdAaj+4b0=vLja16Bm$2b9|g6T!%2MmJQ zU^AEpM!+yQ2G)WzU=x_Sl=Q(IuoJ8Y`@jxx2pj>&z-e$COfDvUFbkXo!{7-2&D8eT z6X2pXJ@zyh1n0ndFuA11?f}!lAuto%59WZ@#XWX0m<3jYVXz)-16#l$upOKNBVfwf z9(w@H0Y|_(a4*;iPJpA}G%q(oqz_hs?O+!e0Y||B@BlahrfejAa4|Rm)_~LCHgFCc z1e42XZ(urj2+RaCH<3PA1r~#?U^Une)`R=N7Vse04rVlwJ{STAz-Dj+90IGuXs*Ey z90ps!Nw6JEZp98<3=V*`;0V|O?gfXz32+je2CXlVZ!i-~KA-*oMk?t~9oU0S;0V|Y zR#%Z$C+ULyU<_2f!L|1ndC!f}`LBcmSLRQ@4{Ym;)v+r(c2TUU? zzmmK}@B_Br&cB1h-~f0490AjMu>teI39u2I2D`w_YJ7Z?bil=6F<1vygI!=fI0m+W zGhjQIaR=#u#oz$g3}&ukT)GoKU^Q3_wu9B+2v`pu09(M+Z*vUH1tVZ1I1Ogq#kqhr zVDbgDOE4WA05ie8U=BD97K6#(!9SP<)`KCi1#AS{!45D24uJ#UI5=@3>E4GAupXQP zyTF_p{N0aVa4}d7)`9h47uW)hf$iW7H~`i@z`21P;9hVTOumSGKS+MTK`;j#2aCaj zU^N&R#xEEKTfl8#J2(tRz$tJ5OnwOe;9_tuSOZRg+rVjX5S#<|gUMgyZ!jIqc$oCT zJTM2W1B=0Suo@f$>%nob1w070gBg#IJ{SZCz(#NcjDUN=J>Ud515ShKBcuri!Q|ES zH!vNHfSKSJm;=s$#bDYGNFU4v>%ls(1#Ab~!9g$rj)Mc>95@079wmLS7@Pnb!D+A) z9N@o{adcn~xEHJiC%{f{8XN=Xz*#W)G5kG6KEV)}3ATVaU_V$4j)T?UA+R3I{0$ng z3Ty}4zz8@94uBKj2$=LV>4Vwe1Xu@7gT0`Ba<%B+B1F6 zw&dAUoPM{dKg*|=O$WkDjOSWCruJ-~miILk`Z1NxwspIyH{NNg=U~2PTiU4Cv^mF@ zh8Mp;i@|T0`XxTSyaV<nc^=tEQEEZp*7!` zqV>J2{Bd!t%e zU+61`BEH*?7Q|pwCu~J|D(K z6XuU$j_c>#9FGkxVLin0=riuJ_|Ojzb6l_6z+T1v@ltq%<9h9e94}u^XrQ=U^4%di zy@o^bNj>@2U_Q!mFMsYC!(x*#wt_3PN6l9M(p{+RT3JfcA^>Pk6&tysvtK%{$-fI(i&AjZd!iLKCMv&#QQxe z&^dQsT|cRGdVPWDVpYG^8eK+cMn6UuJ49K}nOfr=58Ak~_jyxmyyHRZyGFcV>Wp_g=$7zCd6|Dj z0pBB-dgEG;UP9dX#^Q~yGtd~r^ajn;RiQS{;Wm9il?^Rx6<<^v` zH?H?OKd}bCGxf%`9=*&bB%DgL$-iQ1Sw*bJ5VVyggk15i9+vfcQ)|o#(8~B+RxYn_ zS61YQquyDgYuXg}{3o1uylU!$K7HJ^|Bt4YrBO!S6MpP4ZR(5sdKs32#pM+j7Sy8|T^am0fl=Jmod^9D`52r`xW9zj8;i z6@U-VbldIl_NDAOCdb)ha2WnLd&p(Ox3Nd%0r(YPX3sJB9`+PVvwQ4c+{>P0@Qga1 zGr~L8u;-ZAvu9T`{Ll&PIR@{mjM)9~7uaL68s5wviu>W`uxD2-Je57Ulit;1e{B_e zj>&QM;9U%Fyoo)>;Nvyyi4MQ^TOP_nmv;{gl^Uc<k|ekCo6q1|Qut+i*pm!>^%=L>)9}xq;2y7L59#c~dhA=CcKP^=#7%`y z{nh1duSe`+_~=2G=U&3|Son!wb9owjZr8y-e5uP1u;=k!c*}2Ge&|Zd;5|Kd!v*Yt zM*77c+iq9Gf6~YvXz*$F2yKJEZ#R3O!8_mAZ4bcDW{;*eD26DI~Ts?c-kX;8||SE9=MtI2oJEQcRT#R&w}s&1?}%Q zyaQklK|Uyz}vQ0-=Y5D zZR}a!3NK`j!!~%=;10VV{?R+BfB3|=x7+*RFSBQGryPI1+dc^YDtkgk;3>_N$>e4hj-9lC*Z#eQ~&Tu`eV|E7!N7m zdU(nv+93S4A5j1Bs(Ws+Yv7M@{ceHxv*&a>{3ZHVn{f6d9)=%#fcl50vM2o%d>`Xc zC;T9LgrQ?&0I_=(q2|L~cMX=CubZ&Ls8qa9QWj4FC2k z)IZ#!eEZ-7jAzsEX7;2Xho3h?{lmvt2a=S|c=Rgu4_|Z^*GG6C>0A3Lt3Q%|`1iOT zB*Qz|W3?0B^%V6FpS+Ab!vDe^=jre;>CM7Jlve=0=e(E2ddqtNWf**Mo z^$+i)KAYhmc%Ax(x3LFvFPxpttvvWat{1by7gPW6TJ}&)IhOJ6tJFU{8=eI}e+Bgq zAFF21bNCUh)IU7fbDP})Uqk<_hxh-GJzC+{(>|Ku7UStCe02-;4}Vux75dHZngX2I~jkH;dRU>_roWCPyNH2s+b=iM}Cf>{^1=m|AFtK z{{-M;9It|3d_DCK&sfj(9DeUc>K{IJ6#Lh}|6hRmhu5*k@jm#of2RK7ZM2Vr@F4YF z4DVw;opwC!^G)g>F5hkEz!xo}{^5Clh}gC8j_as@;fz=9@Jhy`dbq567=mB+Zt5T2 z!5+;M@DCkN{lgD3epvzfUncbrZ{qrv3I8|ksa^D2Y2)x0>5rZ8AoGD1c;pT0A71yL zZo3bjUrGJL4{|@S7k>S5)IYq7`Qj}6$t3C@-u~!Ld(p>x?2nXE|M12V_RxiY<}&IZ zKKxd<-3o8Mi28?zX&(ddC6xC#e4O*$55MRM>L1=ae5-AJg7hfgDLKx3HVb~)Gt@tP zbSq;X{KPA%f4J;v)(U^Qf%=Cp{t5GOc$ofXJwtnBzO)aX*-ib!+u5`C5Pai9)IU6r z`CiruJfGi3{llC7%zObp!Tc%!ALn|y4W1vQ{^5t{AA|7gIlpZ9809+-@1?)x!1wR$ zwCCX8yovgUA0$74MLqUuJE(tn2kkWk?`BWtu;_oiix^=&_FMm@{^7FTq#u4G`L7jD z{~d?7?V|qS*^I|YC(?eHKR3Y_Ge5|MH`2da;0I+7ZuoELA8qgs#;Z>FFBvb};ZxFo z;Zuyao$!6+X9E6%`>B6;nCrK7Qjh%r?XwTwdO7z)aGUxafcI0MRq*#R-yDMHQvPl5 zf}^N^c=7Su?Lqjz7;nblvc6;j-g*S}58uyxJ??(7vzfS$b$C*EO!7pWgG7Hb6zNX-le{$#VqgSwQBa`{v3GNM5^^x1{ z3HZZ`XKiMVaWehkHurco<4Y&}jX{^E;(tH<+SA;qrHvcA?DS7@J-@-_#tVsui^ixaq}Pf*S+>Ie90!4XE1*{ z2>;yYUEW6ix1Gv6tR6T2Sg z_}d3RocT^V<(bX%fJ5*PsPj!F{o*spui``W|1S8MXE7e2pBvq2?}hLEo9ln}W4-ni z{7-!A>HJt1y67zCcW1e@jq+=TUt8nyQLd*4;a#g;erUxmyZLP96Ge{_Xk0EMYGFmr@0=%KX-@A_x<2jJL$8$ z*ZipKFN^DM2!5{WAH!Tr1ELw<~*D*P2sE`=L(w5c8$Q@JqQ~Mc@+K zv=-iSI@cq3KkcCd{xtV%1MuVxChxx$}JY@s(A^5F~mm}~1<(agU@#|EsM`Hg^ z=D+Z^-*7#G2YEgihHqHL^$2cJUv2PTy_f3|Tw;Lr!zY+eO~I2s!~F;R_vKuV;ETB5 zw2DcO@}7nFQGNmV+LsyM;q86f?VucIzGY49wxiE)V;-FU$$Wn6fA>(eDqQG`)iGmg z{m+ui%8A@uRN{S>_ZLHJzN01|aqm%QJ+1FOHCp$*ivKl}^*2xNdsmI#dAA~aKDeWb z`@e5^df$6!(GwU_0^7u-U|E0nY<%ydv8h~Mwyewm|LmOUa0L!pvzWr^|a z(wkAe|GhDK0+#SCdW^w8qI&=PWAyU&Ax{6#sGis3{`XW`>#Ntf`SexJ%S+!oDEofr z{pM+BtM{9gX!wxKr+JswsCRdw;U#EX87FC-dT*zFNr))3{tnYR^`5h`D*i?Idqkt& zhRE^Qm%)c~T)zjG-XT2&(g}JzCFi|lJr}$Pdi(^ zUtC$hyYhTOUPL`u*3oD(RS*#N@hQ#BZlOX?j|RLAt_+D^LX+_IzhU=b@vY8HG{MkP z-?xRwa9qEGm*eun%P_anIUbF5uqD{Arg76HrR;pCBOEP?d^Z{wQ1-eTZT0plll%DG z_MP?#_$WS$af)B&0`VnE{Qg&pUdO^n#aH_OBKFCKuTQ^oU*gL7eFpoObfQ5kO4l^G zC#d!d*J)>y_Q+Rv+h=1td#ZaLr!SCpu<;VYD252{BQdnYYntmTo7Szhtc@i>`Nt)j zi2uRgmCb9K8`jEUa<)~%R6D!D5pQS7o%UfWzfz_;E{MbiF=PAWk*~f}cG~BXuNqap zpMOXBa*Eb6)6lU&V$zbYQ;HwN`13>Ik9Sb!(doTk@^;Z{8h^1rytzbQ{m(nPkT&Bdi-Go|vlV z^WV0fbsBDaa%Z2!)uqjv?MbH*CXJl6x7v-Q5m9Me@Q%~)8b~wtZhO+{N4v1m&I&ed zxOfwNjlC8L;G&4z&zi4lT8BHGuO{-`vm<(*W?Hf5>Xw1diPX0~FL}-^-nQdM*XdPno0nLB-notAulUw3y9a-| z{;vN&`}5B4&gl8YrfHlb-zqPu%nuRSCu(>vc5=PcD-wdttJnjqJZMC98+0|%St*)O zc|kr~&-r7uf6vi*t1!ivtnD&a!hPS-cq=Q>IElqfhpqb@oi}4eM`$lLXr=QNG0~WvQ#VGni%Fukxp-Vrb6@hRS`xl^$|5bbn)=4mzgPg+U4?n)Jh3XRL{F z@>rB#5^^IZMzxP9t+|c^ErD{Xh!_%;StG8_H#ZhtY)qpcxH{i_II44YN%4F>>S+D* zVU>2=-XD)STK{^>pfj!H6MA>MAII^J(PgeIb>=sx=pgDGK}&u6wLdYnI(WLPCH_Wv zWr;7Mq-Fig)a&5(qAwsU8^Hn0eEibM@0n*TR&gqrj}Fb-;5wxD2Sv-g6pVC@=ozvRV!ph2+dGl`)X*nAT%NNAvX{}R}MCW|w ziC(Z@X`|OqNuTyUU#x@QDt+`?D*A-0wRvo=v^u6}v|J?ugi#95DqW7gR*Fwq8d>7S z+n8`QG(dGd6-~@S+vgmOcl{16SzS;SDku*c6PXu8qXsFCmoLlrW)o9#%yn;Zj5tbO zt^ST^;!mIIiz; z=# zaT}?pAxx3iRIS6cPF=E9n!Z>}$y%evJTzpS>2*vU9HDh8E)P1U;a*}#>fB@SrO~5|bLSK($WA;BoztHGe26>%B^Mj_R;coiq<)YHR_VZlqDC?f|#QaFU@F1R;t!}?G3;4>yOrYU%Mk}^77KMl_kNdVy{T84`{8| z{^)PM5YW~KwZ?0Ea$a%eo~Cua_UH5=-wNOlX`QeAiH?ACY7LuY@xxl@wL#L2*BzsE zUK^wmopgPpT)Nho?XZebOo}olFxW@5)@zH@QDW_}TI;n-^63OZi*;*#RBOGqiQmN9 z46XIrr#k=QLfOvLs7C8!N}KO%qf!R(+T*m=Yo}iSD6GyeFgzcxwO(5#5AIajOh2G? zUOVEv;&mU_I$vAzceqbzjn|IYN|4c_yuvq2S)_GdJCYN2<2}WE%W|UDdTlB8F`SjD zG)tmo82`ZeELX$4Oy7MF|CA4I*pbR8HNNxEy67E)j#gGNH1#_sI{%x7Bl98}DX`d`8R09nzvX|AMRaJ=Yhl1mk2b zyrew8B3QylL1snexi-H07qM~1;2`%;#$`C))%xyXM5{h*Vhc@wG{q&3-hUq>`ZDfR z&2g^4(fRLTT%DOZG1DBK|GB^Dn7)<;Ik#v*@W)cLnXVK0@+{CAaFn!C{#?n2ac*8+ zvP9klRH*35mQ@flS3O_SRdZF2`R1w>l8!M~b&vb!s+Eq$o2wSgGgn;|=gXaE#?DnQ zK&R)b;wyHpdLhU4Tvd+K6k|Wvv1-uhxvFRq%|kCjqvxtlo_Tfyd<3{BiL z-CB!I--8uM`-%B*~o8;x={8?@f|21)eujb9s;-W)fnZBklu{Bry!2nu|;(wgI!Xk*9z&92TjW{ED*__@W^`o=8L z^5AIRF|paT@r_wxGv7G0)z$mPEzu_m{(PmQ^^ZlOO%(jO#nJl5Bl$!u!OpYMtur=n~%leNF3BhZmiB@6oQ0 ztIp1GnYa1wb8gfc)!CIM?q2TeTBka^s|zjh-+{5moz|(2Z|cmuunw(LogZDod*Pe4 zPR*0iCA@FFMeEc&8J#yjjE+c_b*t8?IWjsKmg4T~I<-#Cj~!iA{C(+dTBqj5qAM<6 z88_@~*E%&XMn_%5-xusqI=vUMn{K?WOY6Kghd)U+T*ziK&J)krZy0xK8?XJ*P7}|! zyS3J9gDSuA^POE<>$O8^|8hsjY-D+fQT$d!Ykh4pv39rC`r4*CNB^h6R*%+t?bECO znEQjY?A8>I~5b>GlBuZ^OMzt_A&>n?UDCT`uv>-w~AZB&Q9`R|>- zrS)}DJ?AsO{!Xo57uDlmm21q+_P4cmeN>C@#M*wPJxfizIKPDVKzC`K*LLIXYX-DN zwbe?-bI#}jvn@U1YIxx6-PedN=95ipMC**Xf#@iC|4SO2|3GVvxq)cqHsQ)8g$+;udvuYLJSkSZd$;gR;|W3rzEkr41W}Yx`RAJB|JCu$Of#a_p~D`EOVDsd1@$=?3_|rXRZlM!GjDyR-y$8>=?2 zS$kP{(-w~Dv^z;#q<=7cd|mlSPvFC>aJ{c%A3hEqyVHIZA5!0kVRsWg^m>9=H=(fU z#oO0$2tO(NZ*}~PDL)+x`YG@^()k&~&-8=rQ75Y>C*fk;Wm8$vJK(jrsQ7W6v>P8jUyH72W?-*1d>tIcM#EO8h7B zEie94&vyNHFW|qdyfi42JpPv()(|i1N?Ia(AvsnC1Evw`JOTTN9)x%$T)(DyO4kfh066KGE1xUw-Arb(_8Z)r5U6_SS=>snYLJ_KC(8 z-7izvYql9X8#_HF-LC8sjVanL1G_=&-euVJD!YZo64?{?0Cw*-?7pGw5{)G~J=qgC zgKuh*47+bCyF}xMwyO#4va7H=47+NzulgOzPG29)>d|(+e1k3j{vPat%C1k@1xy3= zcU;5b-}N}rM%@g)8L?A~kG4Jf;}YujVkz0a`w zuCjZ(wmpa4`whE$l-=94?QFgiOT|vN?R%BoJ89cTW2f8ppt1{?6{r4=X^qZeO5GlZ zq%AzW!~OuibQ}5}zTR=$#+&vvhOe|UB95KjdgNJ z_p4O=2>%#<^gQ@M7fPu1=p=F+Pr4Ny71;rYx6m$`js2&qQj%V-AUTjf4SAp!?tg0w^P^q7f##s<@9rX9)0-g%G+g^8opk9=f3o5 zSj*k>Fw@beVsYEBaZBTx=5-vcylPAS+O_K%#Zc-}SESC*82L%QYo~n?{`9vSuPl(C z{LMJOWS#8C+pyN{Q(MHh_BSPEwQ9G$9)ClszW=a*KX)HuGV1!0Cg=Q)R4Cs>$bT{} z%eBY+PuiU9scN>jS<)}QeW%?>`g>IR|9-1%PyZrY~)3^A>Zs4Ka_BEtG zq0)ap-`mdD-eb;Rowa3s9s8JLUj6b3i7xspi#J^80`S;_KLj^1Eis+BJ32Uh-M5Q`|E}^sk8H zCztvVKUoX-VNT(zTJ2{RKYb0|K0lvcz)wsYar(J#Bi4Vp7kFT|{cX-ItlG$__|iYK zjno+PcWE2-d>?)ncDkK@2D^YZj6t(K^kMg1?6TE8QMR&6)E>l6w*hf^4|X#rxNYDx zW%r(#w1k=^Cnv1SE|v35qwMZA&i8cuyra6rk@ge7PYTa%#7~_nw=)*-V}%XD#5z ze_mdGYVlK5y3>Bp@N@P8erTgIez6U@JpA^asWjndV&!i8Vf?hH{N&(A|MWeIw2^w+ z=apjPYt`J%I@vj{4{oZ47*}wm#EF_^OLq7Ag;&H47(C# zm#D3aoo?S!WIxAl?iBa>bDpwG)V_^Y;aqQZyO<^Y(Q_j9FYu%5a~Xc#Njo*KV;1{m zHTT`>_}Q!4MQ8y(zIJL{$5Qb#@Y7D8pV9^V80Qu3djWjpWbL+};GFarUABM^v&%@C z>axkkkMJk)BYj5xE?>Zp@0`$TKY946TfEEuwc#hcfFC(0=c_-Kl}MWU_bm3YYXlwb z`OAGDSWal2@h;ub#jK2fPV0@SytQY6gJK}0yzK4w!oWwoXdgHyn9K^yL&@dPRN#u)x5I{ z8Rzq7tyk~iN`l3#2lb!MESl4E7VG7dmS{>#Dl1FMmd170zbUP9=V+G}mJ!*W4^*Xp z$9&uPhSICodXC;)Y5aF}T(6&&v}0EpA5aVO#Z#69eUC%w^akHgD}dliA_ z*6gz9;MTdsv4Rg0_j6Glak+0NjupIK~p>d*2U#jNBzT-{z2Se_>C7) z|L`%|!(MptyQqJ-?B971e%^>IEL_hDgP<>FmZ&(;BOFDbQ+$`bCwx+>ygwyykj|W`Y$6c^|RDJyp}kNLHKw# z_5VD2;;J^mKSX~^h94p>bT9k?+HWd6^8w-{!jFB4`iIwCfq(d!lwSZoOI+8~#vc2A z@}CKBeC=jp;S)#tThu>1eHk(1;Ahi+bKrxm#4&|;T}u7KtBE5w3jYytw~OJa%y$pK z`?9Eic-!IK#DXKv{w>tM94D@DF8oo(pIZ1B`wFzdPbQ9OJ$&w{?e+jX?Q7IOJpGRC z_BcF4;@H7EDBn5waTikmaM=evu#xk5n)-+LQJ=-|u}112o{j$|cm?^7z&k(0z5(zx z#If&#j}ixP4Bkdu@d0=fv4N)H$1JA);o*Oh=S@BKpR=idcsBRmx$rM?K4b7bnK#?@ z@U2^@f4Ho@>4Z;UKMt4uO-JC*S5W`(DcbuK{4V13O~Lz!1Do8${mG-$KRl26UkpFC zgZhUD*+-!c{ww1#C?SS?n##qGM+8k%)T6-aQWhc-F74VqEEU!?*qiWgfG6t=h! z2@h_ezdr5qjE2oEd+8NE1=k@OKnagR@@a&gdK1hG*hqwR5 z<+HS(8Tj5+E2ldmH~k8(2daG9xLyoh zMI2IPzvoTP2Y#xu&tqTU;;Vb?Pbz!a2e%9Uzwf#J_R(IZ;7_W!mU+Y_&ANs-dDkIo;(Uu1|;H>s1`t8Lmgg*U`WJ>y}p^aYnn~*QmI)X~bckf*<~p zo4!SP*0wResrK7O{S3fgNpt--UdLKnC^tCYB|@CTN-=}i*1 zcNBh|;<8V4()Gm6t#Xg2(w;-`*Isthmwk!{ze4*_`Z3z$LHPNK=Zx&MbGH%aRM`)+ zZ_GA$$~~?>*)M!AJo_1!cTwM|HxMWDgD%g#hB}A8R_mrWP)-bGcqrA)e+T&ue6`2^ zv}&(&@7r$I!^g^8`@UJ~5dKP=Yd`fOaeKeU`B%C2xm-Vn;13tOyzX)4SMcf6T%Je! z$!RAJ^SH|`#-CPr`tvTAeS=5g4exT(t09iHbt8M8p5^j!<|oDQIhB6ar@n5d-$eRK z-?oP9Iefd)&#=!+Km4dk*FG@Ecng1jmdjh2pJjJYK3!Z7qh87{KuF-HQ!8}(IGeg!^GttgV$W)`tM-AmwXFxmIqv3{~q?afPY=t zThbqHrM)WsDC1EFe1+0CF~01F9~N-!8_91*CvoLRU0%B?V%Nc6d^gu8^4EC`^IiC1 zxm=&%dBi~-gRgsp>l1vG`N=H&sf}Ep;LShYWe09!pOB-uKEVUbFGBF893Oy>F&?zQ zU;8!JC-{NKn2*A1%D6tkW$nNOd?Vw-7<`EOv9_}gcR$xBcrDkl1v6`NlZ>fgf^xg3r+Z=HS2T;raw0BfpDw5I6Z& zu1}N97h1?aJdNvnGQ6gm{s`}2{*elocVxZrUeZs8C$SI4UbxMCB>)dG-XDbTe1`E5 z-bkGNKo|E*yyuqREc;62z@IzKdV!-#XId<_=PG?cnAA*jlr)|`YD;ucN1s$PR3u!?;+y$!?#y4{=&zo{~`F) z?To+h?Elcd;e(lOda2A$tX}oW6#rH;SUUR{UQB&%A+4H{iPn>0w0GwMo zzqG(3@NBsBmp1qSyaq1)r5!#+dv1rHNBwldGg#X>1b_cc?)kMH*KOB-qsPAQ1UEmE z%%2D0&Ffs=%Ju3X{3x#H5%I@(wCJ1U=b!XXcpmr9VffwjuK{=#^XoSF)gPpP!qZm} z6CIxO0{s&{ok84n__h=1pYTEAUMJr{d*^;-FMJR8_c`ztDfCZx&DC9YogC-~(o0eY@QS zzwK-8`G(jBXaYVu=JHYYk;u4{`wzyGDblYS*<}~QL)@QE!)J*@-VFac^O;%rz>jv? z{qUEbVmyEcKGJRPhyRWFi}fOX^LMo8Z}a?NobdoYLwnAG@23B!!o!Te)$mO>GakUF z*_Wgp{;N;9^_9W%fM7rO0}(g>snkaY{8R6D^Ba7SeMR6ae(&-{>|>U37yIlmUIy^j zmeFk&!+-u3;|V;E`EUz7?KZ{-_!Q?8f&b|+`Zs(J^N~^bJ(ttJ#h&Lglkm(h)4$=p zt;}!WN8Ceyh0hg}x9f-?Xt`EB9k~Mn{@E>$T;|gU;Qu(_@(JQz zXAkgh@-r^)W1oyR_?v3}9XX%5HT>sg%AWB#?YpF>+Q;Zd`Zs*)U+(cCt``IFWA1W! z8{_>!_;qUEgDLK}g7?rTf8`$E_m7+HF8Iz0w?5L?7h@9M|EkNw+;1(qm+?xSkL+uo z@_pjyEB)Y~S;qr^Qt1z{?@%xN$~@OT{e#=>DR|`_F0Z+gd*1ulN8nWYKjk&de7PEa z<4yE`cnb6PZSd>s>Cf6V2FLV9#HxFFJ%t@!G~PlL3=$2|0wtG zeb|q2|FP(P?h&@p|KS~655w>xo-Yi+C(5|Dgnz!6{tw^7^?eBb;UW4zyq5dLNqF`B z^ndsa^XKFT*jMaLH$UT-a(#y1&GmAe+t~muh-B&;eGUI!Uh=zGyN1o8u#o z%R5G{A6$>;;6v=2aR9!8eVDA57_YdVrVi6y7~hiNV?4jih1U}|J{2BdylsSU+)V$5 z?=9t70sQ%t@G%g z@N~wX7Wm=tV)*!5lnMMj@Gv}^eP;H;uTG^Qv_GB?jl;*dAIXNdJxlw6Hy^vhu7O{33hf7O zt>bzL-*yA-0UoCQhTx~oQvdKN=ARSrT>Q_$i!b2W;t$YYP5r-&Z}u6;g0K5A^$*Xf zq^#ulm#BZZMSE_ACtpPU%kgUJAAWU&`WH_5?17hZJK{JD{ZK9Z)j{eX-v0hBdmB9Ox70se^$LqMg~jU{oAQM_>wed` z-`zDfZMj+w$iHtT0PTh~8|&on)X#m-7jIa;*O7IG)yDeYddB|2CwAKZ;~l_cj+@ph z-b2o}9#Z9jx3iWt@Vnc6{^c8qSpNg~pIgTBqG9H}%Kyc0?_bo_EmwHv;^u zBC<_Iekre6ips6ZaEW|lyQHwtd#!N-cKSVw9Ow0t@Ax8)>-Q?kJ|_C9Wu1sdzgtm0 z;xs3r(eGAtKAb2%D*pnXM5EuW=)A;gGSR3{clG(`P)U{H!a{ZCuG5pz>UUVm-@MvS ziB=VaXhVEw>%_PAUfWrxh(>=yi$*pA@V-lv7(%?wGR`MU^!oc@x9s_Du&}VKGJgec zb4v@$eW9JKPm5lEgX`ACg8EZMuL?|+si!9@ni+NbGosbsJjeQu(PoQQ#Zpjy`OG^= zz^k(5A;ND}t@2LtG|}pBfnC4zYEKvKIhIpLsy>2+mCIK0HZhzZHeM*={tUD_j;f($ z&j|MCHX;!%7M)RVv~OL<#7!{*nBwzH(HiwfTc1~ZmS~N-le(7J0`k3LY)zjnTBF{` zgUE@l5h{$?F5Aixtx;#>VP5SyqBZIazw)|S0x&pH10YpiO<2}vMQ_v_z8BPgPW1k| z3zjb@wpu}GSxhJhD_68Jb*HtlQ9(YB_6+@9zuWGk=g2M*zF^hoiq@z<@~rbvQm{-q ziFbxy5Us!doN>l|9bCE6+?YI1v_}1zP(ehA;Wd=mls`MNeiq@z*>Uv&nk!X#2Lt9o}=6*j@T1dpZ0?+YM zw2S@aJFm7_v_|<#dt(h}DPbOhv3^TL>o4DVwdaY}U%t{FVqIFxMCUKtgu0OE{N>8t zFw64U;3it2rK0hdXPl-?G)6g6KjA_mj>c4tRW3TC?Nctr#IuwxUO_vFrg=U(*4LWj zTS8rh==^!pZ(NN&!2l8pg_!ZC(F@A_p&js0WrE2qBGhI=bKM6 zAm((rG4e9s5S`IpD8GcdYS9^O1%EOI5CNa%B>qdLwMw)`TfyhN+6zSMZ!gkkVuvp4 zLecr_MRc*lmQ^D#wJI{jL+Ozpfw3ahRr%7T=5jdeQqdW8M7gVh#ff)SX?CT{L~GO$={wgoMwgP1aaN6@ z^Vd&8-3HP5>&BZGR#Yr6V_m*?_U!E=db2#ElhkX+Dby*)uJ=nH2(4n3fMOxZsf77 zYtZVrU8+vz)wYV(UoY&y%}cY=CU9AvQ_pxX&Zj^1ML*s?^hvB>thz z_?AFo9o1dVnjY-r8HDKTunWi^34RSrHf^q3w|QklU30x0)@$$O+2{QT7LQ?LA_#^uJcv>%-z?I#^S`|z{J@YA6Dq$TjvxL#$b zXw$}KBQ-zqdzZt$I%&X2rHuf@;Ljr?4u{8S~#kLO39 znOD}u_!_|1FAQIe%2#y)UybXdnR3of=cyV$Gx*tSoZANFrzU})28nv0Dop#R$47QE z?_7<%Y*aoX^Z8Jxq>O4f}Vc2_C8L}RA5lQA-k-G0OFYGs#bjMR3? zQZCs2*08%q*(DkiwOu-PW7s`o*tIIVw3spxs_indo5Su|?6RJ8$Gk5oyF_E2w#&gT zyM;9kMtavOyXFPbE5@!KyXOqM>y%x~0(RBd^^TO40`%GcKx z@D)Gyc;9-b<7>QZhtF600={C;Q3^rlD-&M>n{KgR*LTQ-8>{E)sJ+wXWs6DzQ`7#hbAU zXu}w6h?x^+l5PcH&3>)Up`o8}R;^_SV8W^JFO()!w?X3uwa_blOX0)0(vn8!wSV zy3Gub{uq9aFzRZT@{_RLNt;RFX9Pb>(t>qf_TnRmkE0A9 zyOobbZLe{?|9)lydpWlh?Dc(TkFrnH?tB%3ovzzy{4}rcw%>~%sS~+(xE(+9wz(Kb z+Rq$*W*2ukema$(-Ua-G!hT2EPjZFiXQ$84Hx}^YZ)^V_W#HO2#&(H$~;ou^sLPCmiE8QJ4b+Ckbj7J@3XbF@!L3$!%wxf2k}c&jy9_L6m2W%+k1P`>rrl`gj&9;iZoVrf&KH)6qqV+B zU+@!SV6fdhjeSz%)1%A8(3`Mm7OHG&iQ_Hid1vB?z96>sEE6YYpR_nZ;-uaXGC!=v z`QkEh=nIkG_tdoZ>R8`QEZ4mu^DJVG$~=9ESn8wNnrN$ow*D~pS)M_}PxXh#@JmyU zHr6qRdhX7;9n1AJ|ch~NQ=&@&l zd=C>RgE(T&LlNg|GLC8o;yd*bajXc@7&F9hH1lqh7USzOM!fN-E^q7J>Jrf^qA?bT z;UUHaS~>K~81crUI*|!+TaF;AOdO@u0Wm(V#rTGdk*sz=W1UqX5&snY#pX=S|C`c3 z-n|UHA*lA0PK?Bl95q)GL$m{N4E+`{jx`oC&wb=48JbgM+z`)eW}IZjaa?T08CWJx zOuJ+(RPE9&_UX=}=4$ejN*u9&PY_3a^maLJYnNkp@(iq27Ej8uP`)}<9f)@6_#DsG z;-}i>Q_?S9yHtLn9p>P7A%0@+OA&ie`o(L9%1^YtAbuBVe&3dU@!Fp96YZ@JKc}{T z-;sXt+MDtdZEOa=wVL14(l1^cQ+}##U99;HNx$XWR`foGpR_|2hs{ffq3ZIx#CSVx zOFz!m5@#{(XgE%$Y!lyGCQh`4M%!nQ7#Z&mnK|S|jd$N)CWhY5Mcu0Y(o7uJ8SQ2+ zaYQ>8+lH5kLtZwBAM@1DnEF#L1;nuKT}0Qmx9oE_@#}odN~G&_TlG6(I5v+I@!%lq z!HTSeKkIc{`MW0lO@CfUblpgw8)2V>-hiJ=?$a~ullrK3Df+{dt=O)Yk0K$KeT?_ab7ch+R*fOlf>Q}yz^^ov(7%1_mS zPvldMg)d0Ix2glZpQo_D$=_@>%e4J{kvMO!4x-~uI&l{NVZ~{Z)$G;UR>Iy_ zQ0j|hm_O=tJ6V3hPCR65J)jh|{)BET%TCy?_Y~*ptI%Ap+sQH$c06lS=`Gm?eM zxeSG^d@d-zR!sfws@qc^*m@I-Fg0)=Zx2V?K)tJG-^N|l;@H)-r_;3F3S^GR7h7ZA z1sW)`j>S#HY?EWf&loF?^)67{^cYl!-od?CnMwCpY#I}!(fZFL=Ix}>Bh#4tU(?VE zpoKVb^C4$rkGriP7(NHFj_v#Ew$&7|q5^&Y#_IxGx9>6Phg!qOPLYgwXG)Zln9E)q zm&7_0>X@*=zPLHZJV+h}<-Yvkf8CdYVEDLOyXK3LG{t*VqTJ%8nZAkh@Sldv4$>Tx zY5x6xPcu@2-N!0FQAV=;@@~e)N}g6N;n_7YSn#N6OoM%t80qOQolc&Vo#b1;mfpXX2z2sf(wG5odd( z9#|`)p=O77t62Y|p=S3UvAmjS$a}*V=expd@a?S&Z#U}qS-g&y=L&b$8L6#bjl8QT z&dbC<(Ut|(zVxs!)fe--IQdAt#JavXX_-)r&S|3Aiy6b^s< zl{oRzR0YKOY|Jya>bgFq+#1*ZjenZluan7#`lxG4ah|zgJD2S_%J~z1>RdJ%zcl4& zqdF%Q*BG<-y@sDUmpw)L#XFa+E8kkzu(7me8}U?(bn={eA9LJjF+Lz;#5=F8bJZ~D zTR~I|Covj`@wyh{gEEFXf7f@RuB4{EW~-GG6~j%80b(p_F;ZlVc-Q`QdAs)R+*T9L zh>GEt<^NwT#)o8#c=rMHN>t~uwZvFl-)g==3{{7x5<|5$eLuwC9TPu!}G&^-3Ebg=E&w8u=xIi5w zUl1}A@o~#KNTm+cN40O!R}wD2Co=wuXMCN^Yw~XVRDb-iY)8shr)qzqKZ@_)gP-b; zACZ3X`lFs{)&3lQYYcg>mgm!#X*b-%(RV#^U6(=}Ulwz@5T`=!d)hK_N~xDN zpJZa#ug8Ray!LmBZY$fLusv4$`+#mQ+n=yMR{Q&)Zm*u>kHn8{e<_-+YJVbjy!Q7Y z%~rL)@IIEg3VEY*9j`{`u}W{G+E3N&RXY^+ygkUpfUh88$RDR^wvl&~gl&1TcsqgD zj-uA7QCluftTQ9pcg#B!s(lYo$J005W3I%fUe@s$)Uo>L_mPuq?K_2eZ&u-_+V`2V zoho0Qdi$=xZ#90ZeV--$;bI3uc@gfn2Iq%p1X;WrNvkwW2pY9r(Nf(+fn1& z6^W$cOb};=IBT>xXUjNok2(1by8|*aD#i>k(wNWZLM_HeWsG>o9OdU(yxXkC?;_3b z9O)PDI8%LNNzI;`-TP{)S4GNUfwaYbI<*+-GKM-&(91z@0Fkj`GxL!=9x~SwL)HJe z#5ne`DjG$_NFhddaeFw%e%Xf3TPDUv+HE9?HcVVb9_(X;u#GoHT&~;7F+$iLYmCUz z?d2FD?2k1@=ZC{_dSy9gE)yr$$GC01sH(Mo%7lE_+rO|a zE@F6Ja`Z5a&APohPL{4;$HebN`oW_@*vSjzQn6j!sIkqtgc2_VDZu(U!J7CJ$`4-u8?b z)W+n2?Q!x@XU{`^S*fphVT$1bH8hGcz-_}Ctkm*)8p8#2`7lhS zbq#x>d7B|#hg>5Jh!XGv0alBEBQ;z1*gTjM8;YXCziNJ857Rs@dz`OH#hOBi5DcE z`VBH$#!HVAFE($*yQ}MVZVhPh{KOM(H);91RL0AQ6ECK-vR#eewZvI`?5KG&aYTPT zo^6*A=h(-A*hnf)kT}CUuP5S+%Q%-W6DM~3h(6cYOq|fehne?`^+)9RkwYBy(Z`Q0 z+xXGTTz{X$PmLeBvOJWpPE{}BxIB&Dt@x?&BTxFp8$Xnv7%x(LnVV4a%a?xf#tY>q z#s(jLO`4xe`o$X?l%E&_TJZa{=2sy7;*9~yPxSd={BG0y)=9s3eO~!FM7zN6Gn(Ie z=@+kmD?ibfvmWOiR?W{X{o?gy<(H0M0Kd;_eudI6O|LllxAJr1*Nxxpn%@=DFJ3=Y zes26G@w)>*^?URN=@+j*DnHflnzi&i((f($UAf4*>MtSE58ZskypuSpoo^)0+v;~j zQgM2SlkH>O$78C5Ad?7cUcodnVCCzqU^!#2NX&gXRI^ zh%rFyuXmX^rKQ|6iAIV!A3RJ9`}v@-k9R%PuG>b=1>;|X9MNs%$qZvr%$yDC8o^OP zxjfQt-iJ?8wzWT3vOnsh`nebOWptK#7~VyrP43n zSfpoKwTBe)-2a=y=KWfpeaqB=$E!z)wySjFjLx)$l)Jb)$Q54 zHITNaVQ+Qau8Muz);cTdc5Vyot*)uKv2N$iz@7_g`R#{vPm#5B4e1G;I@4~7_(ZRa zR3LwpK4~c~3&ZJd%=K4#n3gJUGf#48h5_u<+={|RPL3h2^deR}uu<1>8}oP+qku)@ zSglQeCSeaY_O_0#Wmp({U$a5Cm4UHkYL4}u&0e?dDwE$2b$fLmCr>mBn&c*?j=nGgbegXH z$a*6!Z&^`(Oq^C}qskwfd}glk=xN<6ZB*G~lg9*9(VOuYACxwcGGAHgw`cm0v{Coh zh?C3nY`J<`ZI(^s-h2Kky4yM*kDl__o0jvVGFGJSR#k>Ae8sVEq~53OR9UX7EGT0F zN_ht`l60rClVcX?T6VNXW}wv{eKqb^wyNxvEf0b*cE%V#plsE%JF6-Qmsgl?-GPjx z|Ddvyb1jj+SW%K$!Iq}qrEKMVOW5Xlit{(bF*P1iwyF)RqJOOyGjA@nepuPcd6$S= z?q_@Dr=Go8RT*Aav8bSoDZipk=MiO>XN?2IdFndzT6GDMbW1FRcRCHN2__fl1ch>o3BZmNI$|R*RyWPe1Bh; zc9FicI{Y}`61#qB7wJ!{D|zF&n0ao!ZoMqNVcA9dl*oT6Z%0S7Z+z3TiHzBlzo)=2 zW{ZtR`j%zGLx5I&4!yxS?HJc!p-4UpYFF^%7j@%W9af99_YBef8*nU_XMMdJP}+z7FOqNBdY0as++q#mrZZZn`F9 z&ZB?N`WRE_G1lKm`w8p0uwL8@dgjT)rU(7PyO^&W-O73=P3TuxZ(#vl!TKKq=x^pY zjB(iI3z?~NtUnNN7?bF^--b*#I*0sDqepkNnGNXO*w3N|nJ>Qw{jo1OjCu4t=QQK! ziXS+PMRe-xoG1Q``PL6QjD&IC^4D#ZG`ijFy z72E&AnkMMEHixkSJ=}J$*^mAu^Rs85_p`p+IC}ORhmnO&+C+JvAAizeWTX50SugPK zJnzi@y3iBf;dg#?!ybp>L8ovY=0}V5>U`)KbPzqn{QDK?R_62XM4!rh>DA~();kzR zU-W{*2%rthXBO>bKK=%DD)pQ658|@EStGjVH0H}kXQKC`Yacym`q7VeIgA!`BIVbF zKEnC|ZDho@c#~ zdGsm6)IU1Clzsarzd^2}{?SvcACQAiq<_o{&H81v=))7#KYGO%51B3KPtQ>QKV|zg z>7mZD!KH`8~LW`bRrh zUnLVg^e^fkJ<53EM_+s`^^bNPxz}t$|KTa>ADu~i?m;(hr~c9XtXDINZeYEKMs(}- zv`6%TSEzsV(aw!6Z!?x??w-^ zep3(He=qfq_OHFy97W$cN&TbKOXv&e6If4R5M5QydX}&84)iane{>GxUncr8{6~dm zJq91TjQowG$61dwh`yEeD<;uRjJKWW@6&&$(MhbAFod3_{mh~b*3+6nzxZqFAHARc zmiQma=N{@GE#8UFLVxoN>i=cR^;Px{oy7VQiRgOz_kMIU`AR)#y@~ZjTK|Rt`czfu;?t;qbT8vUGunawezBePUwhC`?4bV9^DnSIA$rR}n%73YM`cF5y3IA;LGmK}w=(ac7&1&=utT)t;9=V#bL?6U|5H0Re_M+?P zzr*N?Pqmq&=(De({?Y!;JcEe7?Q7IOI*auJQ{UjXDaOA^^z61aGY5SaUL_bEW-I;4gK{GG`g+O7b(kN1 zj`~MWalCh-&r7HN(W4wc8ql}gO8ukjS?{zPy};E{>C!S9I3w!ckjeglf{i7X}cN_YBjE}SEk;FE01ig~;i+S`Y>vt`pt7xx_ z=xo}5W@WST8vP;8PZH5x*Rj47TI4?&JupO@LHAxy{iAajZyd*Wm=_OF z|7c%FtC@xVE$iiGpj#O)tI#(y9%Z3NM0-SkaGv@{53s)KAi9P8xzMBQkC?OQwX}Z^ zx{CGCQcmbFuYZ{ONBdZh+l3zb6!nizWxcot^qGgLe{}1g81K=&=TiS@gZ-I6pT9u; zqjRV)$B7;0ee}OZbWbH^fWC_3(SCHVIKM;xm;AP%(>Y#up;vWM|LAPiBN{_r;-~)6 zT~~5EbkKh3f8FRI){DtPU&8rjudrvmmn!uA-=Y4|4*GKodNuZg=*;sEm;>lj-=O}{ z!S8d9gYN$T^)I%wo=wV09p=Mpseg2pSPu++4gF~noyvN64d@+@Q~zk+2kthz&?AhW zv*_T-j3?-6#?N`Q^9Pj4J3GuP(2M9K#;Xjp`(*0>=j;#Ty&rux$MZz=9LJ|-p--Ux z(V=IkGxP^PP5q-==)cqGzmeVwbUnwLq<2wYjISB!K#=oiw4Zoc=swQZ8_`1<)IU0d z_SlDh7sn?T+DUy(qfey%Jm@a+mz>yP8fYInk@ewRXcJw5UMS>Pjy?`ujh^~5>-nMI zfexVk^pA0LHo5_wLjDup-CW?d2S^(AT5e&^;Bj ze{?On6P-i;65i8c)}g!6eVm^=(VNh{=qA=f3!ux<{pbnmw+p>*n)*i%)w2E-`bP9H zI_KBSCimVBvjIJdc3wdnK<`D5qdo2;W)*rjdJ>&}4Q(F12R)5$`%k+$gsw-=qJ12H z=Fm5w=h2guN6fUO4)a#@B0A$1uE)^3IA2Wo1@+DOW)pfRIuTvX`n-MU9q43qJ?o=R zp#$ht^f2oMC%upU&-K^}bk|>5V+nl;Is@(AOc|h^=qz-I@*Y61MQ5WM?zz{TLtln= zp#!Yfn*RO{^K!HYZE(I>h0aF%&;uW8GehW0(G}=U&OgV{tI*Zx1lCV;oJ{#~yb7RO z*uNa~jpzpS1lOBE^geVWdXDzqhpt2KM-Pn9|IqK8p#ITL&eu|tJIu%EFKy^9t|z?c zRUD5x(G!fK{Ewf0;phNpBL}%K1m?2ReA)o%%;R$&VNP z3de(4v?sIGY()QVBlVAN`^FKo7yY>q^^ZgT+jQ^pCUglbb$4^o6ukFp#FvZRgB5#FQa|v+F{BZ{S|Ztx>c+f_94c5 zbT!(`{$!#bM+eYJTz^-fzl3fOn)+)-KZb5Z_s}2v(fOQ@??(^Su|6ES0^NeHXFN$h zwZps`-G;99bIy;x2HlCCqrWzwE79HP3Hoa{+K=un-w zVe~B8Q_npSbQ^je?Wa9gqmQ5$(fxx*%vSW1w6BCo>WlRRhtN-<6VVCZI%3YD`_akh zAjki-4|kZ~K&PU8mmfC0==E0PR9oaX#TgKZy3A8%B?q&FD_F4?W5L45IHxSDL0yu6>U7N!|d@> z|L6?*qZ?h{P5q-AFK;#L(XTQ-bfbr8Z>{JTUZwugQ;c7IX!8u}U)W#G^#uCe*bkz6 zo+tlk&+n;!bPDI^NoRDJ|Dr#QqGv|wbLi(ue;l2}`Ah}+o+|1eotE5gHlzRSqyEuZ zYY&?P=%!Ptf3%zPs~Pm^z1CZq1H?-|v%~EEh^4dXf3@gC*H}7(`(Zt3@3YoDzHF|q zXV4iRv3@O1o8^4rERH|#v2-Tui`S!XTy5#`x#1RT-~~ z_UB6Hcq8q5$$vBY32EQ<#69LH+Wnm6@1{K`olAS4wRG}ayXixJ^$jb3jf|fmwBu)1 zeo{HVpA`0$mQEr4wDUU5zsU97YpKs_^y&+(?UNjzdeJw(Z0U@xv@i7L?Urt$y=R}# z{@!Gz-^lrR6ME|(Ev@dfa_@D??;=k;DSj7pM&6YU-yc85z4WKTw$b;h`89WAW#M}9 zqi%j~Y4j(e??&vfmG{#%TY3LIYX3dmUfx&N?5+Fe+K-~&*X`x~bTwWY31>vW~=Vmd-8>K_$R=ax|xXDM(*2Nw&9-?V{CsOwT;}r zw`^H=MohyHDPhC-MbtKOAK$VSzi5{fY|?Ch8MUS1S>%{v7gaX=}|qpy$C_hRo%Q{?sugZACAM&98?ynag-FsE}W-b6HGsePl0x zYx!8&j>$`D;YNO_;=Ka#t9W4%vlm31_+#4gvvwiIkDtI?{2EnUl2^fSk zuoEu8A?WxH`GhGj;h&@r)1ec3p&K?pKkS6Ha0CY7ENq5J{~~?pggvkd4!{;T0{h_v zoPaZM5iY>gf0I7v%sDUx*1~ky3dOnf0CdAi=!eDvHgE+DLKkd?wJ-!*VGrzw18@S4 zz(qI#Q(q%}m<<Ig|+CNNz9+(arpc8gMHynX}I0I{;<4w|snXnmp zVF)(B9@q&7;0PRnvv2|?86D;f%!CWj4;@?s?1w3^7pB88=!6T<4O30d>0vgkh1DWU<&uHdY}sqz3-YheHeVJB>cBQON#VGm5_9?}4;f+MgEPQVd30~g=|Oy}N^ zgKJ(tOo7cX9S%SzoPlnb!aW~9^oV;uun7iXKWv6GFa%S%m(v5iZ~*RyBd{M%z-c%G zles6e0A0|*J%49EVPrz`YhX%z}Pc4QpW=48md94Ci48W^ga12Uf!Y*a=7A zIGliq+$))ZF1P?2q2q_-52nCbm=0HP55x&8pc}S9KOBX%(BPg%5N5$*$&=0#| zEgXkIn83AkGt3g#*svD%z)m;-$KVJ|;2L=XI^hfqzy;U^9bB`F!xZS?+BY3$Lno|< zZrBa|Z~}^J97h`I!z|bgD_{sV!XDTO2jCzafs=3oF2Wg@dIsr3H*~zf{=pR34b$N` z41J9I#2(_o1vmgRHxdul!U@<7XW%4UfXPMV=YkH?<;Cyg+y^WrUMBa4e0&dw%7_E| zHu3$+4s)uU@8O`IcyM|%->>5OzMk)4*A1ix`*xGh)!c{KgB?t{5xXq>g5(7b-$Z(_ z?`G_w^A@&WNd7*}-*61N;Ue_I^xN=*UKoT8uo-s35FCO%a0U**q|Xo+=D-OUfHN=z z7vK3E zK^TNnuo)&Cz#pdEi$8S11sH&ii-`kM;4n;wbI=J>4iX=_p&tfeE$oFsI0c(w@*(mM z-LMBX!U5O|N8p6`{u1m$d=InX2&{$^um#S*ez*Xqpd-7(Ogu^+pcAIUYUqTm&<%&6 zAI`%bxOgA&;AjVamr|ddIc|< zk$gT&UBavp>IP=~khEbnO#2dlKSvDM2Xo*g^g?5l-|k=rtcO*w35H-R9EM$R0rtW4 z=h+un0mon~oPxt}4$eX2G4|;N+8A`fG*}NaVF>2HVd#bPunMNVhz<0>CfEpDVIS;* z)36UFkC8rf!7&(wQ?MJ(!BJ@R5*H@H)E^TYx?v`)hdHnddf^zXf(b9N4LV^H48T^{ z1-sxF?1KqEA$^zy$6x?X!A>{_N1^dJcH^WEoiGgsU?%K>IdB|$;UcVpD}GA)&1F&3)s=HBCCu z`8(pkw%@ZIj=?dQ_y_g_=D<1F1dXq=KQIZ-!!+oeAs(!TY2PH~KZysk|BWBaS>WHd zD8JXp2dw=M+hNx0Y=;?(Z^|7E{m_Z!52f_xjDW)*BUJIyZGc3h{K`6PY`on}4E zKEBf&f`Jn{%{kb7VyBt&6!q?4J8U@#KUn|HPIC&5y{pqq8l;aWVh2O-?lk-0{Cn6A z$KTs&8s8@WN!Y9D+eO z27BNXoPcxCaWd(Dhqy2aR>3sb3Nzsl%z<;z3)7NGA9`UuY=TX&7q-F)*aZ_#A$^zy zhhQ}vgKcmM4#7D%2aTtR`vKC2UYG`(U?%K^IdBqsVd4i#A7;aP7=TT%3%0^>*aZ_) zNFV0FAsB>Xuoq6jDL4m{K13Y;rDPHZdSNSUhFx$7_Q3@>1T$9>2iC$V*ahd{1T;?V zG?Q1cAJ7ZaU^C2wBZ8-Onu%-KALxW$7=Tr<6V}5~*aR0~D@?zbG@u{$!DcuF2jCc- zg;Ox~67m5(Ff*03vxx_tm*NjSmthYxE+?NK?liM=$OrV~5*PO7k={o-%`7+eup0Kk zRyYKQ;24~RQ!urVG*0K=71+V?B5a^hOg`W|%uMSv6Ru=`pix3x*bMvNAj~|Izqhde zu;D853%g+x9D}WJ0d~O^6~u+vSM&W@lvfqs!x7jA7vLOBx|VWXf!#K?!>nqy!&*25 zTVT@Jon}uBd56=m3#MJdz!So%Z536Al?18Ot8g{|7oum&d;1FzuV{jZ!!4;V?f<1&81qoQFmR`}0ZCg?^X@n_(s#ggI~)dSTkFqzk>U=>ph--^cMg zKp$(Pocn2$un7*rZa4~u;Ut`fvoPTslqF1uiH9k7m|+1z+RX%NLnx(j>0N93H#wJoP~?f`EAk<(cWPy?1vd}4rarg z?~p!hgB5Tb24K?Dqz|iL3+#lQa2EE$oFUSO`{5|;fs=3)&cb=P2-Chx`bXI>mS-9`?dcI0#4KC^UY6 z4|Kv=7=Vkg8zy#84=@!bJxd;74$OuP&;z?*1ssO~m@q>8PHdkiKJ>y#*a&A~4@|tD zzV!lep&w?zCYTL-gnoeZe@uLs{1Wk@69!-{Y=kYa1rEYaI0t)S>QDF%df+H*gp;rb z&cboH2#s;_@gU;|Ooi1j1Gd3zI0QX#7FNKNpOQXw!$uf{EwB@g!mgKz(?$FF8F3$? zK3_w_dYA!QVK(d&e3*7>-fwzf(sB2j6)*<|U<+)7{jdd2!cORT$Ngq6%!Gr`4@Y4m zoP=F)5w1wM-%RW#9!!N*FatKhY}f@oa0phwDHwpp@uUmWU<=HFov;e_!X`KfyWl7s zf|GCx&O+k^(uZj<@e%xCDy)JTunA_vF6e*a@p(FKmMP zZ;ZctGW;&EoOE6N_Q_kig+1#2yzz3vTA{kFdQZAZm)cAWp2JVn#NfoKUOvjwiOp_)VCVO3Ox_r%8kr`rg^j8m!1bNDU$_P zY!b#tW7A*qZsIv?&yqVr9?E=Tau)eHmu(lWi4>K{Bio&7vvHo>9w{eQFi>w*M~wI* z6T8TM3Y%O{9xI1wZx2$I*sNY7UvkAK-?CdT7NyZ+t;TNEN>!rDu4Fwgr1Iu$)G`aZ zHL9J3V=-Gc4dWT|(0g-u?ryCk`~2 z7Sjiu*sZ?EwvX7YFD#2ra>g#K6?Upl!f6(G3b#ZbAGnz9Yg8vyWyLF}g_~mYeu=PK zt7=D;OE)6hOv)#z4N1uC12QN%0Q9)mK5juVnP`%>{dH%^_Rb;AV2yDiBW(} zmU`$%#c~xC+20#pC+zfccNL2TVkspt#bj9?uQ=mveb!?eQw|0BWx1}HsW=QbHfz?} z+F-%@&EDwnXB1+ivKB7S0#7AXyvZKx3K1*Q9*e2?Y<+eEcB?N^wJ6)yy4-@2;)2S; zQr_@)MVr4zq`g+Y0L^ZN(_dFuB&^ha3T_lJ*Vye!a*MR735tY`-X|F)Hs%)Tk0}|& z*kq~q&_%s7J{M>)yds7=286elF??^N!AEm*B{pj^ZTsggE^?KXd8uVm)y=%YeLDR#~^_IPDQ^q-i#`$XRKc3qgyU=mwSWx_@ca4JnPF^rb~P1vaJ zAI=lod8(~cw<*WwLYXDYhO&+pf#DZ1oT~N7edERSD>a+V!sbHT{uh=k$@3QMR!zDdqwWXT)jh+x2v&Hxeo8w6}hZd8O`)HY*)Kw zZD-C*&7e}`Llq2eVVeyFMVqzqt-@xNy$&{%mFH?xZEOw4v5gs?T%SHvUyIG^i&So9 zTAl)qk+Jg_Z41Y;+ZE>Nd8!t9T50P)o7wUa@qnL4^IFjJ?Y*$$d?;q1)m>)>kt+nNu`D?T$VC)k%dKs}EnWxa}6%R;866B8?vAa;O8*gz;F$US5C3h{n z@8Tk*Y`uPpZrp^;YL!?d-zDN{%;?VX{ms}p_3_qQR#4(A7AFbO#)RE1*s0zZPV-7; z@rX{(WHhpU?M1e6utZdf-ntFrlh~$R5Gf~_if%eJhjP;W4#b2m1t zR@%zlS5~4wy?qZhYxVK6ELUp*hH*e_w;zYfHi*le7`s;NR;vfl)jpCXZW2^(plNX` z%eU6&UTm}Ux{-F_MHaLke-OKveJm>}vkfoCA#B#z&mn1m1zXBE*H9_4CYi9)$A(RX ztX#*C7Bw*rW8>8GwYh*vjiLtaY+uVH$Li!XT<%*6H|FK$mFtCZ1iMvQn_wQLT&A@v zDrOe75_(5T2~+As!x~@4-g*y1+-kAHOCLNc?Y9VwuY~R8Eu2{Uk^<_tsM0nO6lr}e z>?0p7kM$AFkYZi0XUTXXY%lV|M^=K&lQ@fCV*jLWFZ-pkFDP2S#O0}oJ@;K~@pJR? zcxgbmP(NC(1|vS?NgfAO8r)$j+$7E}Z9d=DePrEAA4c*rrX`CWt)A9x<+!Kf+iiz* zTiL~wE&FRXH@+LOXMb(wW9_eKO|kp?y@(I{E1R84!`k1aKHt}UWP4ZpD<`*GQWwwY zKJpaH=CfpfexUovIlGqlxR_^5YgW(dK63spn@?_0Db-^08;ST)cD6c{`y}pz+1-pE zYJMwiZOp?7kJbf^=OVV0b$(1AWMzQd(lYJ9II7#aVr)xY1^Fz78NGISLANc4we`6f z5n>Mk#*4cBx>)=5CB;uKU>fDLzZ8?H9Vet&fWRwwKf|b$eU? z6#E^|XHxgE_0M=^`-*OF>zmZKaEX-CuXNkkzEUbyu8kP-$CPes>nmc-4c+!Px~;9R zl)5>Ww*~*LZg1-=9?IQjZv3BSukLxNHY)P6j&~Y!wNYU@V$Zk}+derfi`~!PMQj<~ z?S0E;{CnNj*0=0s@(114mIq-g?jbVWt9F*c+}#l$@*UgmxocF!8A7yM{V`%ozGM4T zq0crb{7JX9#dYOwwpkm-pLP4#zEnuRSYkh`+uQol%9Y$a);@pHZDadT=_+xfS^NA| zx3%>jab{M;jqRA1M)94C_)vy6pJK1|DxUJyk~03L``P*ti&2--hBp_lD=#RBUPc*z z*L`C96YmP*Bg~7}Z7$F*EdQbV*!mSoh!Y8YYFgu;5qs)6c08cZhVAt!YK?#C_Obh+ z>{sji{cqhqb{~{|mTteG+sDuU8r}Xi-QG4f$oyZZ+y6(mw~Y>K?Ef z8?5uQrKP&4`^5J7(ik7DWdE!C#PK6WhmQeYDa(PWQ3(^YAg&)_UKe+uQnj#9k}o1l>Ni@0LdFweme) zx3~3;h`m;}C+POJz7et4%JoFu-qtrF_F9=bbbDLhh}di8d6I5#>l+dK=ufo9J9T?o z--y_2Bj~#{dv%XW^^J%okm0bU$1FviWJP)G$7v``P-L%};BshVen&&(_~;ep;(F zj1=9^*6(b7TI)5859xlk{%7}#wqnCLRrh;~cBVI&({w*uf3&BkH<;9jAMM)a$2lPr z25jPoz4bBYh98OeaB3KPAE=b`{P0~AyU*#mPi%iKBpqQMa|)WK+sF22aqYOo{tVqd zwm*mCZ{8?o)Zq4Qspyr~=S!Bs}KYCtdfk^~J){;tN-=U3zcpT;0dk5Aj*O^1=(3+#otn_mO>2 zTt{$sl4lLdn3%n|q?9!z^xx?()_l~xI_YCKH7?O@W!+0#b-5C=FhRC%FY7UE&&61N z!Ky57k(Ai4%P!S@WLb$ztjahSiTS#%Y`bCGI2VX6-B#v3Y%A`<@*Eq_qgWRUsu98h z-ACphvr2xwV}cMLD`1qx)N_e$FY_bpS<1o_d-soZLUdc1pKxq(CBPDtr3E~_RHWTt zBR@XfNA{&~`~sd&2tWQ7&3u_|tL42kPC0JUZDrpH$Bk2t<+`oxGhy4Mr_hF9x0QWG zx7EkV&AP3ucimPW8@K4TvTx|N`T_JR-FB;W&rP@051JLa?X^p7^#kSAy6v{5w)(;G z8r`;9v$YNYOG>U%x34*teYEtdbo=X$WgjiUt(v{MuNW?qnEXUb@mk$pZ`U#Q(URPz z+iPt*_M#zLn$^0!-mYWfM@zIux7XWtC`bz8k{M{J{ISgYIW zZ98HcEx$V5R&U!8+i2N+Lbui1cEmPXZrAI!dfSfJM$0Uq+v;sQVjDdz+o9X)Z98Hc zJr&!j+v;sQVjFY%W$e=J^|l?gk5(STS-ozrx9zBXv;wieL9}3qdvu?r?K|S5XRJZ@S=z=UK6>W%>OOiqxB5lIC)(0je@XYz+q=yt+TwWj zLif?zz0D`u@>sV?_tD$G%_rIdSvyqs(ffhTC)yHuRzvsE`-9CV+9G*wL-*19h0RBA znT@)S-aqU9z?xXh;yN}ioZq>6d z+{<>^gu~nI4}BbDyKJuE?e4-WN(!|M9Adj{npS)svCuXfZETm#(DElVi-q-y)1Z7cvZ6Knu$*4Lh)~JH@}FDSikW^GFC~46O8wve#5uI)!L12{O7-P zpZOK(e*#Wb%lj9K=OdKAAOGH;w42}1(%-s_f91CNx}DeUGSqsPwfMU-ml_D(k#kmu`E6pTwJ*03BTWUd(N%NZ*1drS z5hol&#BL_Weqwxw7?bDTWeS&S8AEKhe>^o?tMhJZs1e_bwKRoIh!}&!c$ygVXIn99 zWDHTR_Rl+VtZ$qV`@)PwG#P1pWR6SiU{o>VA+0MFc zyQ*vSW)o?96U6Ex)(?o4N&gf149HmT*E22u7I_e#6{p;7F5vg9w$D4HpK9}#rS*S4 z8Srl1UQ@JnM@*ZWA$?&nLYx)#2f}~vlyOq@0P=6E<_r9}Xw`leh>`T$R`Z9%5cMYN zeit#`s{M#4Du&}l=J0y5JshK%7@{2Omx&Q+KjqQ(lR}K~(?aHt$VaDaKQ|CVebQuS z5OrH^Yd=}%bePX+Ww{%_H05ZcY6qhI1n?WhPqm*t((kR>Pd9$gC~wZy3Qx0}Bv#;}ahNDTE+(3D5 z*zI1A5{)xMoQd&JIL-ud#MrujnK%LF_cn4m%wNj+#rHG6ep@c<2L-LcFSvnt=yEy# zcRF*lrsc67$$o2l|09RYYV^;Zv9xRDVY3IlRt`+5tS^z{qKt2{T8ZzRLuNDj*E=lj zVSS@<^wkep{++Bxlv>bXzVw=pRT#(!PuN=KIm3(%!{-Ba7%Y z*IE9ff4bYuaWn5%o25q{KWH|iFUhp@80(phqidhH^bGAGt&sV_HduP0oG}~yuHRdF zi236O(Et9KrPBwQ%kYX0^P~bxH&Z@d^i6kKI)n9QI?+Ft=?z@P9E|AOWqN*e)&|yZ zkm=QKV(v)vr7AtvhZsehGQH-jnfuejdL%NvMdp*QM(>j8^|F3LA9}&T`U;cGU&wlS z)98<~zQiJWqL8@`H?rOW>v1H!!u*=d2k%2)@^{u(K&MwQ7bW@@*7Hk7cYlrbBhkmb zoAnjYp{r@@MXZ-0*4GibjJX-nU$=JG2wuT?E&A#2ikjoNb8W~RMmyeX>1x(za1=AY z+aE05d<}C^qU*1)^a|Ef3ZTE}v~<-!kD86>#TzW0_Q7^@0{yhyKF9q0PA}_Yv0gz2 z`I)EvR-^yZX4&_%{|)G0jLZ0cZ#M_fZ{B9<+6&0bm8@5FhoyteL79QB-(l(Dfg@%% z`mDcMy826pOb_~+^DMns-)2^zH~i7kL#%%?jDBgx(zVQ~Ie}jDtfjrIA2ox1`LLx^ zS-+vGq{G}U+xPG~K6cm~L*I3y6@UJ_N6abotJ^KT|NV!|8T3P+v9y>g zdLC_*TUyK^ZIpMIx5@TDdlUT;U9->Hp8Q(7IfnktjjR_!dJ}H!{j8@Z`^SKXb7AzA z+bsKO)*doq~Y5B-|l{~Xo_sYa{*)w+fCY0>-Ev;GM2d#>c15B;qdEPp3+ z+RmY$zs1u2V&*(WU;711XJ@yX)tfuaJEgt<^9Rjw^kwv?YT^Z%li9I_@moIB8l=8c z(HkGM{L{Bk=4e;=2+j2z>$A0?-;nlW=!$ygTPtS$6XK1r9!?wjs-WfHoOsaeLEqbB z=~4Q_Ao`lGS$dK6%0|##&s%y{tjBjlhnXw=o$PN5x|{XM8i-#d`XBnT2Q2#})+?Jp zKiF;Q3dYCm-Hh>adro4z*@Zr*hV@tQZ{~P6j?R`3FE_DX=?wbvODz9B)}PJV!+0pS zJ7}*>=m*|py%zijuQ_7&qn~@HWuLh-WGp8o9vC{i(b~R1|LH`ZD(we3UO8^0e}07ZX4oGwXM8r=d$VQVHN|>5=$oZ( zW&M*Gbivuy_MWHcpF!H^3QI4tK3E?*@o%hGLpeiqT4Ct5m_^_-laq(9tZ>FLK=KNWq-Q$n7_pAfz`qr}=w!Vi%Ga04`ikh=SFqj?+QIlVgC6<>>kXkBzRr4;w=vJ= zC9F4u4m7f!D7xl$)*C_(Fn-peJMvg>2<_y2r3HP`5!M?*`+vmT;pp$xgYyxg$-fhQvb=LV#Ck*f(RZ@SsQ6T{ zKItfW^$#rF%ldGh&vuxvf5Or^od2|;-&13i=g4N}5=R^Ie6gPO3p1EIx%n!N@1*DW z4##`+O4et}Mz2_CH$&(Ty`SSF+IPw!a}53J104U*Vs2^29n3fSEXODGLKbshqMtp) z@dWK)PWWo{odJ#q=q|?77Ia@N<2l;R_}h~Z4X++lvYaPs@A4s+I?1m$z^Dfq>lE;@I_ekc@FXUSO`(M4&%xdBI zc%`K)zI4D0qT9Y^=_%IN96@h>-O^$X_r$wdZ}3l+cJ1pjz3AW8TiQ>59YHVFTIq)v z?~?9e{M%>gRL+n5=zW|YHBg>2Y;Qzwyo=)zdjC^L%r5jfdpN$Jn>e11qkk1*d`1UJ ze*yi#0OKp#%lUBX0p^!})2feVj@OP>&X-P=`Q?0~32mHXrSIZ=dl(%$-qQ7dWj)e+ z#dyVdOT4Uy51E%pN{zfS)a+c|$3 zM!(AXqO<69#+L>3XE?shqs5%>8Hc!@NvD6Kovhzpg?{A``uDHtJ6Cajf-c`j|3;6q zKG`t(yPQ8Hqvu%fdJg@_Cae6Czi`NGY~y;T+bX{vKlO=Dd%)76_q8!^A?<%!YR>1p z=$<-DFK|8Ai4Lx{%Gb+!Y;)*WKW6Ff(+`=hcKZ9Im0knu(~qJn4_p2-tC(x{2-hzj z%RcdD)+a-!Hd%Ur^6N#vd4Z*8sNW&#2glKQ9N1Mw21+HTKGW73GXS_m- zHF&(}j3*ec&@Qg$gXn8G{%4^xSf8^Cz2QTQCusk>S-%(kt+Nm?V*+W`7|QcvF6W)7flVExPe*w1l%okM@C(TYElO~|LG1q%N z`ipXV;L=v+{o{D@Uiv5g{%bg9pjXN3oAE!g9_andYk!aB-^BiP za{KUK+L;fKd6GGvcH*DGdUELxvL4~bt@PZqKNouV^OhdtdftnE=3|!bI<=j70hu59 zpO#+1dV3@2kqazc&-rF{7xznUV*DV!__i5+`@FS%i1Df${pph}J@-?tKhf<0OAoR> z`y%>=otB>D_?Y^6j#*Dxx{LK+Gte8Zvb2l#*ol6Zvgi1k{1Ed=?_|6peb;=uS%rS! z*OvXl8s_>&C&=?@gX_gnG|TaZKj}{9>qkF7Ej8nl=V8WExxJd>(GYqo{iUDyeYC&C zZmvJ?mi8Ra($Tld>w!=SeGvVPBi43T8siK4ya7uOaeX|D-YCx(GFjhn8tp!6Z4WSh zWM>t{k{8hT!)*T?$QO=$6a ziTEUNzoZNOyAv&)&H1zODCON^Y4v~fUUhloUiAp)*2(!t%|8%pR^F@r>_y6h=cnbL zVq|O7e^23>et!<-jGwwceLH?>QP-Hi-XT>peuMb^QS-Y)`iV5`ALS?RL(k*)C(W-} z`pIgIaaDdj_+{jB?tow5qt<=rJEdQ|`_9Tw+-I)FZ&vgBob-!#pIP~h;3qQj7cHN6 zNx$Tn99klBN4PwCKUiGvG<^0x^RL7Zbt3Kuw-7^C?~*7UuO1~DN8A@}I=wX<$GDU> z!RPK};zXigr+!meAVxyfVe=p4Mg5j>&oVKzyhLI+82@~awVU(A5cju5J`OAsqjKBc z-MedcZo4V`tBUs9A8|%o51EU^NtXN5N*wh`lYfYI)NE_3nfa{8j-P6)_u{AQrCS85 zE=60d#qSNx@1XR1tG3#O-A?f#4ZFK@agMP1mBWaUXMw`!|? z{EovW_f=h4OaqX_~QA3rv zlUTwwLED#*jFqYfk$4XJH!!fMci6FN}OZ&q1Z^O{rict;>`AN zoOI%dzIfj(&QhaUA5WT?rZ^T*=uFniJ!8U zZV{+*6m56KI*tLF-~H0>t=et{ekW;u4@keaYP)Uty%Rq*&ORvp-m2}6;`c7iPu!;# z`}bCDH(@>JR9ZeiFa6@RT~#ikt!Cr*Zq4r@=@+l9DnHdO-=pR8Vd?i4?Xp}{j%rUq z($9J!WWJX;q8*6#)J>eX)h>yo;xrRS#1(P8vOPVrOdPFsM`DDCk=b?FOeTgJPrtBC z41O(TBOjBbD#NXEyfGW$KdfX@q}^sTvYvORQ;#dwC>1R=fmO|SCxj7G%^l{%-cz0QufcE zyqz=(g5l#E=e*%`3WBWhefJ}#I-dYSZNV~P^AK6+hcP>w480P!nU-Df^Z{0tfYkITg0$b;T> z;z4cSuJXF-n(#Buw_pvvnAd7UU|H@{3?b7WrswM<@BBEDVG?1*RXqED-fyp`>#sgC_lOH%*Z4K0L z?sa4Sj{0?ht=sp6%Q1h~-kl9A$q!`~{#*VmYRJc5!tW@EKB3A?QI(mSe64u-p!pp6 zs+IXle!KZ97bRgVNlTT5qDm`7T2r@$%%750qfG0Jx0{xgRQUg2<8LdU@SyC;-?+6t zQevX4(6X!o^`*PFS{Q*V{TX0?{C_)S{*L^# z%Kf=unf=l7Crj?wWoK{ODcpAropRKCm9)BLT9>@Nv?3+<8opW{BI68WkJY@yI4;^+ zzVD`b+FGFAlkeKvuvG-0%))=VPkB)Oa%;W+BFe{JE>7~A^UhZDP0|~Xd37z5*O>Gv z8RtL0x+D#Ic?3x#t)$&N@jHewD%05bcGHNI2-kf0$D}VyrPNj?4cB%?jstqTP;DVZ ze)?92%u|RrCG+E3COg~qY_V+COW73xU zOBwj;cGRrfwR^`_9>1pUg%q^D5+SVbBK^fO;CuU6(^PjLJl@#b#R&T_eezxAx#Yod zxpl0pU1lF*@^p-`Mx-Um$=*IvR&vkk#Wr&_X{E}v_P*V;wDP(X|CoG4%ZvV?mzR*D zj07WP6#i1xp_4oDx{w*zlCj<#>**1kp4i0&JY z(eosJq&0~Bvc3{~##mqpVvY58#T_qQl)1hBL*(1}mwU{sN!Ksyq;vUv>-h+`fb62j zm!v1^zlnJEHZVeZgGRf#o%Gsddg8g-WzMJd^dcp7gH=xYHd#{Ed7Hce8!0XAo~$_C z2_KuKO*p2#zldYu6s3<#!WzM$--5XxRl{iP|m5?-tH!j>M}7F3q3grlsH2%I|t_ zZ8zm3I{(kv`M}jx)_?pSok}?iYZ>Y+Oft%;?2n3y2?I9BJGcScP**Sq8z=(;=1@`5 zrjas-Zfuu`36EaDY?1xyBx`@p{sqpMd8h!+@=<4a+UkjTj)e8ZO9zWe>O<=ySenY0b)a}|7pDY{dZ z?%{Lq_H3kXQMzO2b$R(xuFn~}^FHPCr=IWU%WT%1h>RR!qso$#bEYg;v35jo#vQ7R zIxM;U?c1F@srMaU-0X4nZ1C$^kaZHGn{tcfOS1e7nDn-HZg$f)Ve#c$*yYu~n-}l+@nLOA>{gZU0ecG2vzsJ&LO@i2OTj<+pVqJlp+k+409-P$Y(l%T77VrN> zP7WhCXwH$R=G-CP>x)c^bzjzeS)Hr-obO8w@6$!@aGN?O_ebj^Di3q4doca0O0M6! zfA{KhVRVe$gdZw7;WYVT%1zEmzT}npGP}qlqdTZ|d&lHnNEY#cxi96n=x(xf(>8W` zx>Y|?obAu}ZAr%y>fD?m|J)&cZi4xxv0Fc+fGEXegE3m z-{a=r-m6$AkAErUN=E#ZL->;E1NwfV&dFs+-@g1fOGw0^~UY)By zOXZcTtIwIV$+>wiD>-vc`ku)c=Yso{+*p&}HichN=Mv_r_N8LA&n0}4r_E94OncBa z>C1{-uO(Mm z)=jJfiF?JLGrQ{B#`RD5YtCwXe@F8Ys>Yp+-JUgXmMtInm;4jH*#eQr>8C zhtVB&)Vb2zeV@~gnJzc)*y-o?=ySvRUKP8|vy@yqV-;g#T%X%RoiOJ*j#F|K7yEe{ zI9}`0j~lsueQy65cYEiOPf&8(tg;-_=TT|oxd|#5@spJN%GT*JwrGL=(FX2Qb*Rsaft=H#LH~3{aYxZ>i>h-xrR$G_!E+v;} zjTzeXxs0FqW3z(`lw4k=YVYT)RdvObxw%&-F7WNjJ)IFHC;2CBNhouA`@Bb=OZ}y) ze8;5323Oy&nI^Kj$k)uwJ&G#zE7X4BCq6}Joj(rnV|TV#@t!v6^AXp z{mi$F+_;vjppJ=L%C&yJn6wFB+d6e`buiu#xu7LiugA|Kw_nSNuE;f6a{I0M^u7w^ z-`q>PT)rMl&e)Z4SZ1Y?%V3-+d_$Jp@QwZ$vt;e`d>Pc|c2U<%KKIu9a+1$;uJhA7 zd6DX8q}+Bj`f?_p=QOEv<dQfV+5aOYw`zf^fCJ2=jN$C zXMC1>b$`^kxxCxlJ*sqjt!Hzyexc48-4Sf;dv5x7*5hV zrO$=7`1#T^rsQVRc9}Yv@Vsy1vp6I+%zIn$PwIV7onKEgt@+@{3%;(%jahP{D@XKm zTzL-N#~eTUIdl@=kW@Vsc5dT2?jYAi_lcuO8tQoM889+J$#3^%U&2b(rfVCrR#5WF{4?(z(j^^p?s4wLhkZI7 zBXQCZ?T>yOt-o{(xa-f14f$*AG-Icuqs!^S&ZM^U+)>!k$#DNX07tYR=Hb1Z_g{K7 zW{HA&$F*dAla*gR$(`Q2IXiERzhV3>5ASpy$JSx(@A%vJYuPo~;_as+>+(##7#joF z2>g7r^CUJB84HN7FVEbDh`YznbbeU&O?J5XRu2~S3s;`w(R9^UK5O!nDD`{lg|E45*2PzI zznk?r(uWuy!uT-vlAX@^_>ivi`{bGX;I%Kui6IVSOZqG6PiHNq{ZR=E;K1|XWD}9HgJpZ`WS%r;q zoj&4`9kK2%sjI0_iNH|~I}c4+MZf1x;G4(s&vrU%vC*V$Tsk8gD+9sXJ0j|Yodzi@ zQzw$Jkq~0vB5bs28%t(n!%c?!Uo*OP`gHNQ{eZf`RD&cv0c(NW6=+ts7%08-E8ZGU z(=QtT((!Lk=XU27Z1iaVu88BG@J86AJd;22fX8q8M8jVSe@`m=z`)6wP}f+uwki4g>c$PLYmytAHdIvCt-5~A#p$c6 zYuD6lsHj}Ekso!n=T$L>#815~Mc``u6I}kyole=x`~o7NlzC3@V+cRwD9bJ^ETZC> zZ@b3O>A1Sn`6<`Ud-zpwnZw-Q$8e(8`nGFO_NBOqeHzf4%e^o1pF%HLe#AJA)#pah zlb<7&-lw&m*oZ!~yWV#Tlla@r_W?iC{z@GvL*LYeX#J2TFyB2KLVwokEw28UuE*tZ z^vjBgh8rv+eou*)X9;}6J=Ps|evS`jO~Pt8%wgs{lAb>DELgd=Nv@eZNJ2m1X1+18 z^57bs2ZqD`TT)l=>87Hahwd*d-8EV_R{j-Lud5Q{#&$aTZRkI1=~rldQ`WZa#dS?h zb?i-N^z+b{>%X-0E499vpV|6W_IYJk3diV!>?;C?=^zl9@HmrY$9jtx=zljslQ!|$wg)N6gc&4TTMtQoJXZEC2KLMd)? zmnnMXa!C8~B3v?N62;GGu2|oi#;CU5eUxw^u$m)Oy#d-NSF^w|tx|TEX4fqn1&$F&5D=hGm6ZoT+F|k&P zvx^FY!D(WF16t0+n9R-!6-P_`Nz0_`*mb!Dd07R-hLiTmw-^ZgS;-L?PknM#5G*c} zuT!$~tRT85{6+H-w4B42%?gGfUcM~1C_mfgoig$wZpmMfRg!f@Rza36`&T2oAW}9j zzbI>Il;9Uk^XBl{eNK$hKJk46+d5aOtpw_7 zy?Z(xp8c#NJOqy!Lv4U3*$_qjt=PDD1HEc(blZ>z&)hrMO9dX&He9cHVzvFI&yY5y z0=<7(dK8>Km9ETf9Of67lr3IfQo>+(`mG;0W-zjy za@(F|g>iL`H9ESz@@*|B$cbZXmeJE~m#??5D4yPNMo+h6zTTpeyg2rb*LtR1Q`x($ zaD~-U&o}I}GIBbNG7rfqT#1)U zmgE+d73W`->kYolJ($3LM`_<>k3DqFn%bKvTXUFtFJpyq?m<)Ma~@P{{7xS9@3|IT zSBEJ#dOIQfF_DQ_n(iNKM_9{hUf3>T)^Tb=|!s4rkdiJ{gW| zuDo$-I$U#}+V0H3KeMj*));vuc{b^`SA4a#o^9y!E4;QU4-PH|-Uo-g8Qpma z{Wr32IewXS)t@~=J{=^VuHixMlDah;_{7i4r#78Wr@~>z^PA%2Qw(>!d5e#Q3&kKa`Lr9ZP1&6;*SOB7JL7Pbyr0V+U)2fsycf2NGkSs7i@PvJgDlU z%uzeAf5h=Z6p^_<(&1_TP`AsIL_HJzd*kqUQzFaJbMV2QzgR;PPimf#(S2f!uE2fT z;3@FqT%)7=N547rrOq=lroZ=_IZx<(Eo1ujGMN-`qf5*zbH9bjht${ZcIG2%zVWz^ zd@zS8(_<*PB>#-RvKUUZ%cJw_19pOl8iVVzmo0Paoskl7;A*=N8-0OEw0h z{+j#8%*_{}XXfUearE@m+-nndlg>~F`~Qo+_IG<6ePg%v>AT!Idm(zp-yK@dq|tWS z%3`n14q*E*rAI`U6{CjuJSe-gm{}AeMCQ(xSrUGT5|3 zGhc=ecAd542)~zW&1M6Ej~iJthV?m%>;c{7M$U{`eK|ry=N1s5{Yu>Rj?6*rgRZ-a zv$C&<xby)C(zzUF9oGY`)$Tt=+Xvfzrv%p9_E z@(Y%hExxiOH(-ujCGXA0EqQ`i=d&?Ulmd!NlnxV89iP&-v9u^Zr!0>^l~)l^Ju8T? zK9&x;dC2rQwoZ^4a)|`zHVXXBQ#wqMW9t;f(8+goX(pQb~7M2F|9evSnKSGe*rbDt((%%co>oZ*o#b7j*O8d-T5P+Z7tgoiCuUo(er z8#&Wfja|aC!5!=mi>~=TZ727RIZn|(q_>piab7VM5;4tqbzMwf`KcghlWcB(D>lIZ*yvZcEgnKz$=6S{!HP?IO zLevqbsJyl^Rs72gJ1YkLvg(EN$Zh43%ipw}>2S8Ubi14_w4KM{*8_1ly*kBKaK(kD z$MpNmJox5p3p=IwXuf0o5`5+`Wg+F75mlciwzEh3p#R+F%R0Y|uKo9#71fQ^*U0W7 ze)*N^JilrXfAqX;m*$97k4&E1Niq3S1y}g8ozB&8NjfB7z7i*2ct@u0HJc0_!`BSo zo@6^}e=YZyYFb=Q#s5e{9 z`JnNRb%WeDs)-4>GK9s=x?;Lq6>?r2V0prv9V|4@20b!*gX6F@7ligrsbziP!^{~|)OluE_uWe*?KdxofFgQ{)uu;pJzFf=t>7xoT z0rj|VHr$cvTUnG9D$8Q~!opx#ltv(Mi_y{P3{_TM#~YT$x|+)T+WHN$eMW%Yc>EJ! zvwuS2T6dP>pX3`*nIp)v)&y(spsEbj{(Wwc_tab$rN^k3N7~0A+8+tY%)*G34b@GRQ3;AJQ;}(^tPO+${oYzyDbs^7 z%2f8z4`u9dzJtvKzGD*?eig^>Y4*tklb;EfF;^|*`H98#;?Z!4aee$`Fc6q#OJ{p#|`BiET zBiB+%V?xVj=jVg0@6h@6dYm*)^VQ0)X1Kzeb~?{nTyGu?mpG)4mj@&2jL8@GCb09- zTwt#=sYwwTV5dKaw8ct)7@v2&bdU2I_DXg71D71R4VZ3wrB`1D;7ae>>AYcaop@AS zI`RB@3y$fw%v}>BZ)C!}dQDShLl$+x1Jn~$Vp2=|`%12>rm~6e5A1xBHFwfZN?zG* zCm zqsvn+N;BymcA3h0%2@eZg@22Rd47a{+jRb3^uPJ13Kh$?U0Gup%WfFEZTUQV!tQQu zck%ybS0$GJGvJDwf2#Y8A#=pC^zze`=Ky|hyRXYxZ27$`j^9hFYie}YrkW|MIM;Z; zRTAucljmcx@@)+Jr8luZ754Y)d@KE*>`%W3Wj-3q<{@l`**AM7Hb=G1HUE=Muc!j6 z;fj|xx~Qhh_(c`)=huFJopd>M`Qz+MW%*hg$5+-->*84^ORBuFWgf56WY%WNJssYI z_jWoB@b2qT-wQOx=Phve`6^s%k8IQcm2B|a4DXa@s}x(3Q#V?+n&aEjHj39YR94oi zQG%?C7duD16bR=(?5zQoHdyA>CcVx0u;_<;mxvGhb(!BB--qDphIO)wsv4YI&l(J8 z7|xdL9nM{F9@3nx@i{e_dM2Y%WTh$cbih2zm9)s*)!5yQ-91fV=U(j2E>n4XM|`_c zW#_(KQVTg6?XrtJzpLR9$I(^X?l*_AziV!%(}n$HZNDv!eO^)ObgMeK|BJhvz+kuY z^($t%>?t4K>STh0L(15kXLdMY@Qu3NZ~i~xQi01;)%9fJN{4>f?Y!~2!YRn_0ylm} z;bGzuCj5xFde13bPMpUS@Z%p*xW1A&QQ(VC)p%Xl$pgRZJcSQQoIG%Gg~C%sVP`LR zK=UOK2Q=}CZs%3v80{sFQ4?|DO2JciDEU<40M>(_yGZjrL7X~p@1+VKCT{4sVD`L} zV~Tafnd}*KnSy~J*Gs`)ZBZwZ$HGn(_+#>bogUWA11EaydU$NZd6@QtP49$;2jz#aD4#0xJq5$P2BGh@RbiL+(ulaIZtx`=(0=7uh( z9vrS#xP!Qf6W}@e`WWS(I!t-oOx!#4cN4d%1bk+jk}oB$W(D}H?F#2SvBTL1K2cwn zcdv7QLLak%IC^xiO&!>x1YFn zU}-d$5XY>d1;1c4vg~7M&qJD!*leRfS;Qzae`U(yc zSNs5Y6g&>@C4cAqg7`+@{a{%;mjOP8xQhqC@?Ap}`22RtADl`1)B*nDD#{-`#r-=7 zo_`hP{}TLrJDn-;Uxp}uaLIRfI4RGv=J!O(AH1J9Wu@Tzeoy&>^N0i44$dL2WD59j zZI?3$-uocs51wRvGzDIHGUX4RO&~Y9!6Vealzo)P8I(UbKz^5k&zMd5gEN0i+*EMdM<{>6 ze<8i#2R}{ugHw4PasWJDLHUFC5tnbybKOopaWUJ$ZN!<*0QY{D@&_lsK>G;}evtA9 z*IZif1C&2FZxLhH(4~Tm@dyF{F3n+i^Xz~^(6MXV| z${)P@N%|=8S^uH@!5LTb3=I6fZInMa@D_aFt8b_L!7cUp_dId;ZlnCc@(eu_{3Y)9 z3~+xb{Rep0Ija5I_aEZ=f%}hD{rTaCw>Yz2pnbht;lOQQb%Nl}3@beQ`95bGc)i9+ zKO%p?$LcuBt+XGhzo9?YIFGoEP2d9|rJsHwbrn3cT;W6b7Z@i7(hn7`A_h|qICO@> zCB%_z13##*@4LC(83lL#KwTdo4tLUTiL0*hUizbQaMe|61eQab`#$hZuc`FT&iJ~s z7yRhw6;7u;83uny_YZCKSNp)t`X!$1KRp3{Ek()iCQkJMu!%DszKFIMT&EYRPK*;* z_IG@rbfS_Uq5W(DuQv8?*yc=uR}g17hw>=J{@fRdlkl>Vui3cGnFk&}U*Y{f-r;0` zJ3puJA?jBU{HJRaUPb>@3a-}UlR0~6-@x~+QP-Qe-^ai&X#Vm)5l3-?cQdpPLF~`^ z!o5x__*v!`aQ2Pr+?fF{?R=Or+$L*&dd1Ab3QrR*LOM1;9BBbSHM?7+{`}kRTrr1!<7O!kM}cRSK78zy)sAIPZtFk>GRItMpC% zh5Q5W;JbD?4$!|Pz0Me6o6;{K?shr&;8zru?|^rK$DUBQhxTC#eDTE!Couj@`yIRjbar&2o;0Iq+c#8fi@Mpg7`me%i@XZFlF<0UA z1&oiul_x1&F|@;(2i{q#a1-N+Z6d!?*&Cz%8V45-sq1+^B6ihZXrGHzex#qW&8Y%^ z>r{nzwcYFVgP$u?xRm;K5d6gdDJ=1cGN!tnkLx(jyYZ(L{LQn~^+k+#hry5O+5ORJt*Y*eBzulPt2U@j#=3^;;W4}F(`^c{<@CQoO z^(y*<-QeF=D*il)iwsWf*Xd_GJns$iQ`=ibT=LLCzQxe;i35y%!7H?UCjRaNfACqQ zU;hy0{U-Nwf#&-GZ3;NKfbj(Ned@Ka(+vL8qq=+;k8J{<@gap1|JcQtm+`iOfx(lA zOAKD8=UZdM&CU5c^EKUm2YSBYl!AZ0PAT*=UatZ_{vU;db&OZRr)l}r$7w_UK^$lL z{}KEd_)e!&0siQ?l21=3PAd3g-&c6(p{>p+c&WY~AiZgax}99ovk(0d+V663lb&xj zpSsPd2Y-*}2XgFZzSaW%^QROJF}^tnF3|GrA>vN|v)eiE3yh!OEBWtsrx$#o?q3ET z>2wZ*lQr)DJN?kfce3Q8*_?b+F^C-`8aJ9a^oB43czwx(~ z@fiBax1A_efiV9`I-TVIFrU!!Lr-#lgTKZ6Zr01xb;d74;4QlT1sSg={FgZK zZz_F>BQzJBTBdLn&kNeXpFUUP%kFo!f%7U<{tSGI{$8-Y-bViBv9IZg#2KHBy;bxN zP2l5FlzyxW3+e+BRnsxaNC|kI@gk(dFy`PrR)3M|r+741QUU2NH+w za`u6b->j}De~Mjp1is){bv=XrVix99t`5903fd8fK zmD4|^u>Wcn^*sfD4$j%^l!ABb=Q;cC?Qp8V??_epX>0KhEb#~B=-ACzkiA;hF~6FJ z{_v&5WdeWZG<98K1vG(!_bR;S@7tYL@RRup&s*5x><3?`<&z&}Z5DgF&Sk!_2)+Pu z$iv_yo&JLtb~*{{<$9jR2d>@bG=qOR$b13${sHES;0FCXrh@U)Uht}yl)Yx2UkroS zzNPKc9;dSBYo3;lX zWvy!;`1o6uyu=Socqi%6xRm-?0WKS7{E2+{8OBH8wfg=^6X`+atg^DB)0Dlcmi0!PlOouIJ!?4SUlLXubsM$2j<0o|iRYukAwGvUlT;t{;1uFVusJG|nqy z3~ia$(yQj*x?e4vBzBiAQ*K2Q(-?1vaXf(QQ?c6z`cx|i`I zcyAN=1J1da@gw*!`F99>*Ex(I!J`inhw9`WXBp2s`oIa)?-2OFnT#L7yPl>$0l)9p zj32>y%A9x?n6Gp(}c{`kh_i%rIhW-kiddhuHI`{(W!#KE^@p1+D zGY#}7V2RDL4ZM-(D+jifFKk@u>9ysYD z#!uiv`h!K_&|~y1;N?H#{sVV#fAoOAOn;aIu0Krvg1f*$a3;^k4~jhLF9CGXpSeT@17o}xV-2fy)7>I1lb5B{Fg z<9zIV${*ZU-Q{F}KlydaADsAI`~_FjUTp)nUBxpJa5~SAdcc_n@E1IC9_0_N=l(hb z{x#1_`oKAiPgCFDqgHySGwt*izK>34Pc|J7^Udi*IgWycY zABVvo<@wTKuzY(f@8V8Sw*%j|vFF$P9ZoOfpL+f7ZSy5ZUZ3H=Kgn7nalq}jVnS(n zlgXEZ&uw>h!#l*D+H$QU4)2nh4UJ|^j=LC5y=e3JWZpcmk>{Ki-_|&MzMr;-?(*C~ zMXw*@QQl|CS`6cNCUz3}&hXpVSyZOpXN6~EXZqS^!x@5eVpXT}1B>(iqu?~}<|Gf* zC|#{NT7`ecMmaV%-M-a%5*zi}?=Qu(!45gz+jBdMvg92cC%9Tvxu%IN)Z7KOyz8u~ zW(|}%Q?XIP&Q;g0Zel@HVMF!0>RR;Vt+RL;xlSRBKk`rVS=I>|pXJ`^xw6xF2A})1 z&kz4EKCkra-5{K4wLBxTI0yb0PL&Mz|KG!>j>$tMgCnPHMY9iDP$ZWo=~xTY#9C))+UR-mz{+d{MAsqihyh+1R+Wp>9Jx zAMA1%n;~rGt?Y7~ANl(wJ`=}gR!vRa8g0<#X@w{J>K5l6@PyezTds}9;aS4M0YhVa zk#X_lV>_L9Ssc&C;qcc|lvFp>RAz}yuRgh_{B-uhy=fND4dKqYQ^n)`^~|}sn|!W8 zxJK7@I;X=`s=3Bz&Lvdt@gel5r6EUM^Y0x$Z6=>4uwTkPrm5(s)~LLGF^>Hxu86cu z!6g>YgDXRG{eI?L%31zjgnpDAZ(*CY_RTG$T5q+3ED0>Blj}m1Q5m@|Q0_}vA0%rV z|W=5=umIOTFB;<*lCtAUeb?wuZO+Fa#d!>UV7v)iEUpJZSt-jo`Jh}I-j<9-ZeuW zFVXy{Lf^Jw5^g^CD9J4?Sw_rp{c)A2dL4S+cM=WkQe|2JyT3)+?QgxcMeG2(nm+vb z>3eLZlNVA)?E2A58WRuPMP+F9x=OY*HJqbxjy%izemG5B@DIe{^nKII`S8$iO~KXlblCZv7e+^&cSW#TI zB%cpk)K|#roc#X{t{0V*$rpvPuaDbuBCBzv_#?=gdWQ`A_7s)nfxr)J`9;&@i}F`wmEcr<(9hbylBA_v-7ipQFeZ4=`65y3Mur0D+>66%1io?C7Tu{n^Rcq$^F>KMVA|#g~bczU+75& z0#6!QcdIDNXC=FEfhGHtk>$(OX!`~JXH9`&Bj;{x70Fq)II=K*YGj2nDouLNoMPMI zr)_z=zTj_JXqhb<7_nvTdZJ__()Kf3c43sy>dUZVTj3d7-mX({Qx>sY4~!ZeDVHeU zEgjoT;1{+|lpVJ$qZ0kBk(cs}N;C2c7a(sN_@$ATGL1?%`$NV^Idcr7Bjs!R#IADD zb@tar7SV|Em2L1sZujNZurXWC&Ku-%fGG_lcBA{UtrMA_N{0>T zLcy#nJtO?sZ|g+ntI~15qVzRhvE?K4SIHOTmaHr+is)-zwRJ9x%45m1;wy_wa+i5V z{$R^Tmx;*d7f_VJV8mv6XiwUDc7I^Xrdal&@XQ2Wv*j<2;g@Wh;EM-dx8>QRZa7@_kQTPM2CxH^m= za!alZS(RqW)`_Syd_bIET+B`_xj8b5u=3#zqoW5uD-h*VY=%9##r946W(+x@$}eE3 zWbyso$m#E8g-`ZiD=92=cha>)1OG6x`n%v2`3SRlNH(l)rLctmWn_(?BAY{g=P+I= z;nQ8Kl>TjGjSu-t%BYi}sH6wpGIG*X+U0`$vV7cSU}L!u_>V1bmkIL4McENP{MVMX z??q&D@Lg_so7;Ipe|s&y*!5k@XERp{SsKS!@)2VnEgxAk_}1T&j~MqLzp^O5B$uzI z?ead(l3!%EjmXC;_v0=3^eA~gsxDko9LmbJD#{7IJiW7ZAHkoME#IfF$S(}i##Gn7?@>Jg$J`gXozvlv=L4d0HXO>cIqP6G|(3jF!!dkA@ZHN{jY}S(t_o$ z@pq8)^xwMEIgj)->9#9}^qeWiVjNa_+-K7wV%wDO)Fb|3%f*(>%zoazoYU=Gg3UH< zbNS3{dLAuB*Yd?Y&XsfdwT(@yYid-MH{Mv>u*T1F@?5gaKjB{Y^1Woey#AEBOx|iR zv%EF=Z0Bt`=?vb$T0MO2(dk?pKb@BEDtqJRt;uUEZwIkC`-`ksz-GU;xpBrez3dHC zs{FP5@v>On0ZA^A)zbIKTT*!^FMBF9H8xS*i2~@>@0$9GjnUr;PvGC8+-~PO_=mKA zEphydZOh+JB9XOZ2QS#^G{85e`EEOEK0nioi^+QR;%`K>rvV9^XT4~dF1C0 z6(h)+gAKe%kcQ4}_cqEIC>n26KL!>&;Jr6DZI%2r?NTfL&f31y*^aF_+TWdV{Ef2d zW=iV($0BT)yfHTVu`&2NzN5fKs?0cEP`A=@BY`9^?>Y5Fb6ZMOE zAAOzszG%ZW-tU@vy;LSpzhQda86gI+)SpArmRk4vDE_D4zRh_E`x)B*hvNJ1`$7)w z>h19M3KAQVKhZXlS^HITMwjy#HbUCQH)m?Y%b`Hv`znuo`#Oi@3FE>A?Bj{-|MZTg zp>mzPqmeag<{ix*{1aUNbhjJ-33k1*SUL0?e366m#aTRrF@1YIIvvh-=g(X>b@5wp znfju%{QvWGoC^6{h6S@1V+TBYcW!YG!c(F1?A!2|!`!R#w}kn?vHHU7Kd3cUqG$HK z`wn`^MltHI@w*j!eJP!;y=Lr*zXNgn4r#}YelPlyon6kG*lpMP-;Ja1rZ+p7MW~Zv z_O*+cryqtRH8oj8l0TZ9)+{qTIg&rB9%(7v<-9oI(UiQ^veNWcY~A@0x&#r)3YIO) z%Ffff=_!K$#MWI9p)2#mJF;`jatI7!`5PFDnbt)S`b?DF zwDO{PNxsx_bsQ60_ksxBoGS~WZ5|t2??R&|yXnbhrGyxeS9&G9jfi?{NPUJw4o~!o z+}sfFA+y*-mmOaVmX_ox0semnvT4ocO(gr_t*$9sLqs1ICwcWflkXqWw(z|qvc0;# zf6uD#W}Y_-zH;h292+VbB#4n?-L8 z#~$+KI23*W$C28TdN)y7UcPpq-}d8f=RN2T>wJA2eRG&OucWJne67E}%w-k(w{W>LOykR_=yRNczO>Ww`w6XY>YAK0hm_6o+$^tLCeY8hXs7dj^d(=V zT!zp;Qn`c-0dl6zoPr}MuhZoi*Bn2N!=cJ{rB}8A)-b0oxW`GthbdjQPoi%QyKI}S zK0?ZJ5#Rcqik|e>BL9?5yV14(nmm*8t3mHH^i25;YrR>vg8psvq^x$KcRG5etbU^P zVwIKAGi5XvJyS+M)p|!Rqm^F%CXzpWYqmRQpl|Z$Y4qQwjNEabDWhaK25#Tsa?H9$ z)tQla9Bw`F%Qy}F#Qd=HA$&0R-_PRdt9s(4Art+yhON$7=t~`utbHbq{wJ5`7G0_L zixt`HDsM1Nt=sO_R5v!sdBT;-jov7~S*yurh|+>py6sm}9dq9@&g%BHS~dkOV}o6{ zwe{o1OIb>rBxNJNWzCv9=9wj|w8!{f!#BaH_?|@G$vyI$IKGFXoHu1K2v1*emvat0 z^Wc&48;`?70MP5JD=Hhxs@?6Gy!&Mop3%>DIp@NYsmt=W@R-9qYZLc3Nn2Q5R+LsY zpKS8m!3j88|H5~F+85FN9URH>BgUaPc$A}f`rkk3d@)@1U&CYfzpZej|BYv6aF{Zh)Er_z`Y;?atTE-&0Y@_&ms%XJ zX^vQR4vvU^w-BDC~S3KRR@|{s|6q*yY+|^}SM#{cm(Tm!oI; z-aqT~8(sUa$#*HcN%S(UeEW;mn`JBL-$qZ$EBRozlV#~mX}wtGW%NurEw=Rjs`ZXs zPJZ7zf!(BY?s2lwH~I57^xvkOBKqDbICgE>>2mDSW&K7R4pr2CIS2R#x#9y|P98p( zd+%Tzed&6sY+gM{M8D_CE+-#-sV9=PZ^qG=#}M<`1f5B(S0XFWEm+Rtqa1aLjdQbW z>KZGF#}ufN|2T$T?eO-rGjne_pN9RWbGAF>a13bshp>O7eY4>%yuPxbfxa))P+3vA zR`XXCRBp`Ezqfs<%Q;5KImDK2FC_M!+3Kvr-iWsMR(yMW&QQy@K(ZY$k8N*|=eNsN zuc_kG5A}K?P+xUjQDx(X8X0u7{)7E=T+6KgV!R->&9eeIU61{wm+o`wus@;g&&r6K z-YEMk0~3}F*%vk1MlUwTuJ3j>V&kB;apFd!cI3nr0F!wn_(Jqo86`+VB0nO=$dD|;zKOE zY1rL=*$(GH?B-~@m(SR)$+q;iyr7II|n;`jMxXa;Ay0^<2g1bg@=g*K^Q@VeiR%!L@nv{C! zT%jIr*VMZ|+}6YR(25U2@(U|{1vBx%rSjkN^ujaR#@=UET8d}PGO%}T&oq8h zhYkM({KMyloj=3BP4idIh~H25KUBKC^i5B*)L^;4*Ic8UfA@EG&FV&(EY#GmZ3?b# zY;wP$DXEs%*Y07)A$H!#eJ=l`4UoUHIyZZDGQi#q!`})!Z{g2wotEoolooT>`|q2L zP024~)BLt=W@5AD4|hB7{4vi0waw4X(56nN`{(`W`*p;>pLiRIhlMi`4(-n1Dj2Eb~zuz=6-GS z!5P}L^Xwu&&m!(N^345QT)I?~PTAL^{M*bA&@p4CzW6qIRSQFL<(ds_>@J)S2FhDyL2;7 zGX0_5-cMlTz$4q80&L8#P;KMh8QEAFNceky1h=&Hc6%RS--8g`E8tGn+)vDi+b^+C zqf6O%>9X31g1V;awKuRQd+j>u+1%m`tj%h?p>|DGLtU*KGS($JPSZ*H$w?m`29)S?7u=XODI3hY)o)gQU?E|&gEUl$JdoTdnv`L3kh^hc)6 zJJMgf@8~CA22#45FOsf$oi8U|7I$7_r&A47NvrKgblW=I`tf6v_9JEH zet1RnLsdSuk7hV0b=ZDC@0N+W%XuE0__c^}iquzkj89+X-H-U#^Kz&26gI-z$8%@k zqiaLw)GY0(sjHG#rIw9yY$UN){U|p2w2cdAYQxKgK;U^RA6)x77fc>3W7=C?&mt!o z+BVAE*!{&a4eDye#*(_GM%Fwrclne5J+$~N&l=?3GIh=5O)GxaJizz4*d5e}BiWmfx^;uvbgfcYc1(>OqwPA<+a3) zu%0ag>1?&4IXjhOYoTIWzWr!$8taLpz`0d zVLF5STArEml|%6jjZKy7i>o#?Rn%>)b)UPl*%7N{Az^62!xi4&^ZS}5bq#AO`7WT* zeeF;oHm)hEyr!1>j?JhCGUu}AT_Mug(!bOBCO#g}Wi$~d zjj?@Jor$q0V-I(n7QpZ30T3Jw#UB<<-WySpOxf(c$ z>uJp_?sUJ&Q;)wrSw1Lb(WEE*E+gxHix(v;hWQrQ6XwUejl8?pM3nprmVOrd(uqda z{bnypc79rf&nFw%3uIMllq_pYms`B=F|rrNkS$(bP!=LvmiP+qHS!n5kS9O*4m;#~ z&AN6Y?=F&!^5xpE{-9)q$CuP zNYs*ye0B`^P*zEve5CKY9yry==fsc?<}b;OD4{^$G$WrILq1fvGPj7#^xY4fZseE5 zkYBvgE~3C(E$dd<=ta@I28VCOR++Nr1u@;T{Tjo($H>Pj(-Kx0Sog)pjBKp( zEXpZbz}E>>8ZWKq70#Cjum#?@NvmKKe^|Q{)mS3paFH1h#zLzerW%d3Fo~&6o?WL3$@wU7UEN|px zFM+bG0{??@^e(pLbv=lXr>v}7FK~%1ua~z+$h&*3_zqoa%SYvn>krDgMJue_2?Q>) zb#(mr2piFxaa6#iKR0?s!X+xwKEXk z?IE9PGFS=dyFxN6xg~kpHI*ULt{7MJH!JnOBHl?F`)l{H-}Wo)&s-dK7J>guyu#Vw zUgG`KfFB{=&>ZmCrM#B_-}*K7+XknzKm0iOx9pFd0&ZqM?m6?>AO8aO+Xg4D;Tuu# zyY{o+HaO)&Tb)hd{ z8t?<)Gd`to#*M^-TEu?rzf*YN$LygEzU5+t$9{y*;AcOfaNZ^C6AS+K9ECSs+UaCo z(Br(M3qpk}qa|e&Po@N;ZznFIb;I|UkUmToAe1S>u!{1_mad0#Hm(RI`cm(Xf-vb^dK3Wd=>94ZC zI5h6(w9sem=+k;^0!^Nv4C( zVE^wC!R%*V1-|%PRepoZ9&}p3Nrx2<5uaxeyi#B9Q0aB{%I zdLmHs_!g%Wob)ZF-+ab>&R+0i`ud*9?M}*NJ9C? z_Y+Sv{o};rKz={+<;1^e0{_FEU9*;ch9W5+`0|^S zKkdXr*$ZB-aR>3LQdsvg#GCYk$R|$`?-87!<8h4gjd3&hla zh%fOL`>CUU_(tLf2xji(9&dIzo4_9#Qc%`?c7VUb`!G4C`nsK7@M~`v>)*8BKQWK zpZkA6d<*cqpH%lxh@na4y>2ZFp<=al&=439VK4|$;+MjmtduHqViS}R&y!vv5#}=|@L|%{c zvlD0!NniQg9w!9;3H$la0f(vIt>9l?NqZ>Q*~7OFy!tP+hu}ft35F4{p-( zrRl8WFX(YTp;uxpBEDZU_=X=SzLD#7_nSf%7k={RXF9 z%0F3q(E?7=I86SIgI_JDeMdg@SK^a|h(Gc{B_I3*@wLFOJgcy*eQgI<>FeRgiTMJ4 zE}i}W{SM+oq&DbL;Nq=R4oywYzyy~oJ}*Zo4_L-VNb;1MmKQMSW50R9E> zKP%vCCjMSZ5&hleO1|nz;!T3@_$Tcx*AuDVyTE6kLVF7i5Km8h6KeSQFk3Qb*BwtN_Xxv8oR0V!U`ak5$i6^>EuCvoeJ2?3f#v|a@j-mepACh=x z;9qsp|ABYYza_3Bo=YqJAGqpDV*G*6JEZKTQlCq}UwBpfKbLjV;OF!JefLGA51gju zWgnQ-PmzCJ^q=sh$sR}G2lPg!!|?3~uYQ**pN^AuIcc9J-p4G3`&SWP6ueu<;ebD)%+812f;tTmi{084&r-dTtk1kTG`L}?QSOo{_S?fm&W*K75Ivm6`mXXx>E(-a)M6p z>GYl86wE8)oB{Bn zk1KzZ(x?yM7yh8^O(LJl-s@djew28&+rWKm7!L^FWvmqiZzUe`Ves6w#7_YS#+82m zY1^Gd)?MEGU4`3;XOskf@C1cBh`*Zxe&!~Hd(XlbaCk)FVeY3)aKWz>PD`e4fltx= zgJ;tBucQ5-Kb!RjVwKTe2EkjnKW2jyD9&Eereb-w%QhF+bV^o+7^wgYW+-_Zv8gc&lkO zv?mX7zkw%CBNiL@I~Q{QfJZ+`{9|wh_v1crBIDCB@V)z}uiyaj43pN=ClgO@KX`!n zJVEeKFZC7NO!_;(>G*dLJViXWec*dvqP~H17IiuawTxd5Q~s0GN8*76!LvR^`Ge=| zxYua~f2@b{2g|+_d%%0&LHUFCpS9IVsOxdQ`&Y^z+>d`H;707t1E+!n({5d-tZ#Uy?_tD zoBAb~{F~iKfB6mS7dV;zB^`Xhv(zu}1o4q7zymKS{}TV%<+OntRw}&vd)!mt+x7KK z>es3!#yd|_AJHG6z1RbObiS5nd@>AvK+h+qh*vdt1NzkW7UX-mf78JaUqyWdcW}Q~ zfPY>{eFg7kKHC9)@iWv{a5Cfbz2M*k^%b1P{c`{uAfEg#aN85q!RvdRum6Vn3J#;6 z1Ag%q>MOY9w5?7Pc=3AbD>#|)b?oduli;&&roMtDm*zD0 zIA4@_jjth3e8f!fD>c+ta31AZ1ODWvsjuLagWH`R@U{0)U%|50Xau}{fcgqfXMT4G zd@uIrfe#V?F8K!f`w{9ZI6!?1fl5acla`g zrT&+I!;T_TO8o#g^=@_c zf>R!${K31qKM#N#WxNBP$M|dRP0T;PN%@0A@B0o+0VyB~bY<HJADTPGbDo2mUtl z2f%wN{|WHD%*PIb%TL|nB;L~FOun1?0G`Y9pB(TnmQo*HC#}Sb>jRG_tNXv6`Q^M@ zdz{Um)0p{w4fq9peHZ;pAGqNT)jlMDh}ev++<&(#`EAb-s|@`50}3B5__{LzKJ#jY z2VZA?a$Aq{!*?kC3C1U5;I|%C*XOGPNrPp0mhf%wjSqG?@)Z@Da3aBJo@^2CiN)@ZrY^EueF5x3;f7>h1-dr zUJrgn|C`&LX7JN`yubIrW~U8&;!brv0e?Ecdm9v<`Utkc`{pW~3C?M!f1p0krhZJ# z?QzP%kLdg!VE$GE9@pd9HlD8~Z)SW|q4K|t@k=WB%v%*-BICC)@Ur98^(5}EaqtV( z>UuKv+V7$Nzd&8@|1|Nd!QW|D*Xut>d2Qi&82#-W{7IufY68EcU(93@uVVn*e~rq& z!B==b0{&gO!V|RL867>&=bushy*yuP0dIc4!ilu^gW#;6D|_Sh#3Q|zc$lv#eOcqM z7o4ukYn1Uw;6BFFzf{+Q)R!Fa-)a@Ex`H+Xe2cDsRXmRz0-tcJvX@MJ--NA<7v5BO z^5ge9A@Gg5zl(f~4T^g4kWanxcV3EohoHAwDqFiTiAL_ ziwc+9FX}_KUevoNTaTA%5!=%j*?JcqIX|Pe&}*(-%Hvy3v!C(O<&|oD9ZIpTYs^#E9*^6 zJqMxjTkLxF%dvkLo-&K)@0uqe zlEOt58<)E)!;ByG=w~jXy|wiJq4mu-1~yGieXwrL>KgZxKEu%pM;jcg;gEG=B7aD8 zB-+aQcMUNk*Vi?f&%(X5bigwL&ovg$KQ+&sm^|5a>({f#2G@))y>KL6KCHa6&}%lD-Mrc*JX-h>iPscy{yezi$58d&B5eTY8Sxi&dwMUOjq& zix}5iddFzJSasRxwW61f-gW57x%O(d$KTH+t(W zz2mfAtU7A+`XzlFwU*xTTJLS@r90C#^=S&8md|xLb?}&aZ~{Ch2ziVnqF%yecmj-z zH+@j?gmk@3h{I#mZjU1oj#*bQzQPyN{=Op)M}#lqbBv%5 zwAwm)tYUN|mPcVxmKEV35V*~j*JBMM?=J1i$}Y)Y;di6A+w!{KHu5B3SxAp%C7(WP z$(nT$Mz$a~H-}h3Hg#Z=CBHzA>x_I+?viXG*I4XODgEa1)1W>O*`Gzp<{N!n*&M{{+7gcDBG#q3iO=)a5fR z|LvdCc)3SU&;rSDO=WdEop3d4uB4;kvJBl1$241dd^YX;0$GPng84e9ZUf8CHIHfc zOppec~wjG?n}3*E)UCHcbkp%%iVyO9V!r z>+!y;GIihno?-$&C#$zRzkz?&I@OPT@+ke}76_#O%C}?czHLXIv5b7V%XtYqN!m{7 z(b};x6(S0|roNWXs@FBiGJw2S{O`>qU!uQvO+15f{b0BAC+y7A z{+7LszY+Gxla@a|>gB!UN%S|avThZ;l36%_rCk6s`{K+g7;DVdfRHI5Ef^jonEkZc{|;rztoRa#-&GhncT! zgCp6HMEy1Mi$vb*1ksz1o|LJGb!t7a7k#*~=4+{oTreDg4=^WyV*wmy9KKz1Bt#Qf zdi_aToMH49T0Za4da>qiJP)b7o;d14X>2EATks-_Bdj@M&Exd=%`OIiJ^|OFbGn=h z;F5BXzPbx8Q-{QkeFQ_(+05J|4X&IEce-4=;5r_~opHFP)er7BQ$I4{N^0+NF2t_^ zT|c_vGKXD1Myxr!)QP!EdYp@_yy?+-V|4AmUY=4XO3+J3&(w+gwO*_`Vf3UPw4--1 zdNSS+?k{M)1ly4QZSwc*UaWdx^i0`bYU%ZAy_uA~G-;;1LioO`pEWUX znLK^~u9=s;zxQQ1Tmvh*T&@vakG>R#E4mg*_87nF;Y!Hjy#aoiw&BZhxTe=hpQ{zF zkyksN#c)ZT6g#`(aEV{sD1>JylP|JF+&yy9k2UudSKEo`N&hXqPfpD`)iei^uYK5YGZ^cV*QOp#Q3f^F?Qn|Wp3r6RHOk;j&&$Xk zG3`-tXP@$*$1iov@F(&fDtz2dXC?dxHUC3L%Wt{xDR^S~p!;0{e->wxfu>V4ZI-NO zXg`xRdFUrpsk-)c{4j^zW{pL)S)-rexiWgDAL~Oe*(gT+_1Xg3tb{9gj*OmZvmVxZ z@!BkT4w#AF8uZL_>~CnjgeY4AjXik|*o(M*235Q1xDOP9+v7cS|m9*e^jS>}E`0$BrA ze%lUb9X_S$GXEw#=CI3re^i+d1$ky{<;fnMCq~!)Ysx^zE{D;pM$eS_x3u2dmHDD& zJTpemJp28&)=RJr>EFhllz9z$*I9bs(Rwo}^BVL_nGa~aw=Hw-b+0cVfBSFlaMr_P z^7p&&%&^R*yYskO;Tk&B?Q-Sl`t!XwToJX$;^}~=p7;n2_+;+$@5kYZs)wFGz3}W? zxYKEbN9v&Xx;GAw_;aL(v)4=h$T#KIvsqWZpiqTk7IJ-Tv}Db5N@?$+$NtjB_y4QU zYjed%lkcPW9+-X54I`_W*%8Gz>OivSb@FR8&kVDpXWdwlT*h85J2ODJdov78)8F6%`c~ z6%{HL=`2dh-}7AOyzlGW_ZZga`@0{H?ZxXl?|aF2VBW$U^Bz?Pl&2Ta~=Uv~bzRYOeei~kP%FSXv`K7?+Nby=0Y7gq4Useo4r z#U*UHrFM$0Q2QRUMbw44VJnakY{j0lOcyTX-OEvx9uiu8Xo z*qiLw?>=tgQtf{Mds61HCc{O`Ta;_X0`_`?d@qK*3G%7z{bdDv%axmIb5d>&-y`+$ zPT>jc&6;w1@hIiCWL?{(oW6^mTx(zY&&tW`5+q-VDvn>X{;w6s;T7_=Y&l_3>;0?#zvV-Y(eZbzG0vH4E9tVsy6Vq z73{I_K=cVi!F2|YY|)WllvFd?&Gul{RCD0HD1U(T=b-!{~f)6 zD8`_E4$?!MGL|X#PnEPM)MH1PGaWE`Da|xkfMEc4YpJEj@K|OZg2D!|>7p_vhG>JRgItf4?sLF_;l-jlO4( zXDiQ?-|JSe6&sfdSK^w$mebzl{+hVt+=*MkR=DU$Yhr5#TOFV1aA&Zk+KBS=`W0-c z`!wDsL|ufk(J|j-dFO>%XMWqRaLtu9bxz=Ze?L}v*A#m%vOo-D=Q5v+7|Kly#}UKv zDwt({%f+DTExEcca^EBGn__*b@3yP2xzl|fU-ib<|Ne)*?2ry)XSsOndlpq*yjW4i z6lps_;wT$t4j20JF6ll0MjY5tS&i5!!cO2%o$fJD`tOV0_wU(JX1w1U(Um-SafbA9 zRvFsJ0$H2FEZbynO!_~_b8jS{rl70jve&IEW=##gPBH49kyTpO+zlx|N)~Gcn>K1M z`v13iaxw}ga%LnlKWa%L=k1=XjDSUAmyhUFH}92o^;I-h^Q|J^IGAtj^i^PK^^tou z+wX}6DA({6?0JH(R?|+>Ub|dvCtf`*{`$+2_kHU5MBYhBA2NfVBF^O#@Y7}dto_gY zM2hhP*f8~I$01G8QQzdLn_WFN=J)LmbA#$HJm8*+e!qz!gBau&Fn_3iH(>ScYCPZh zD05)ZlW~MI&=Yy17J=%kBrJB2R@wEF@&&nx@GH3V{5too^N0qw>0YY*~LZx z8y(n4w``ncY{W;R@c*d3iiO`Bwp6j~AiD)^ud?4ErDJOhTdOTwnZ}k}>wHUoK7wjp ziVEI6S$bz1z2(MMtR@;Miy*$+u(1{!>E?UhbBqlcv$B1wa^24MwGCuI%AyDxF{epIC>&mG zrn`718X^B}*WKxU2p^N?{LUf&$J>Qx{e4uw^l0s8^+o)s zYpm^O20z_=N4X9^bH-2J|HY3LOFp)a8jtDOiq;ow@IIwfpG2xRL)l#0cVDBfxjVTQ zsK52c3)rpN8u`=nBIk>I?@`LyqS9`h6rSzw-|rR?L*mEuy;0!`?dFI$D6ipPeJRra z%l96(k03s>-g2|M2_Kop$A$li538&$!Nw6W_+`ZRpM?cEs)+Q*qm+_YPC0zN-ms-^ z{r0*Vk9!~2Yv$i`s`+HIxqIA7d{mk^FIhRxSbyI2P|CIgdr3dxyL9Ze8GF_LnY~EP zcj$b_`iormii;}3g&U&pA?new?_rS1FUXJnruK3z6S;SxY$>{&+>(-_!f<|0er`#& zYFpktFUUjy_NA?9kjKo(n4x+XpxT%GQ`br*OfAtnZ|SfhNY zb|(L9Uk-ETrmpXBugBMv@pa9AxeX1wyc^}Zdhbu3D?Ie}DA*}~nvan9wv*G_OLBIaKjr(R<~QEwJv*z2 z)qR~BD^O)2D1D=vN7#Psez%jD=1rM=nlgEfzA+N3E`5J|Sou=-c*>Wc`0Bt{`~w|s zH@=+9bbr$EANcZ1-*LW(4bv}1Vvz>FxuBwCQ;uqOxyT`r95|X> zDK?AvBs}`|-uW8xo>A|OwJ##=03SKo1vyb;tM^BAbW)fn21~w}SyJ{CF6V)WyiT%Y zxulvrNd~~di2SC4+%lGW)k3z9jfKUz6?{qW^?{=L^@yIIZ24N39nxPCSj!DM4@PwI z3)rqRKU9$&3h^;^iSb7Ml^#i(a>b9rhmO!IV)50DxuqD7@yRC%{shCJh@LX5lGJdt zRx!Sc*zc1$dt$|L9**cpj1dt}2)%5txm1L53-Y5L-<)qmbfZPYI=bsOv0NyRXcg-= zl|=$&vLo9Fae2y%laMtteby!Lpr&(QV|>h_3o_BDbJ$(}p|| zvtp&a(;A{?G&;^VE!{}6Q6hi2WlYNmF$F=NJbo>HE20-8;_IqPihZ@!pZ zkI{&JtcZ5*>6Xe@W6^EsNlVujvGU6-7#dR4>d=n!R7B58_VcP&@FXAVG_Z=v`CddX zTEz0F%9n=VojVcL@ra&D_FnZwom<}2k7zB&c{)nZEG+8BDFto@Gos7pnTW24arWkK zD3D5_TummTTi^F1ddzsPSf8CA-o$)j?Gzn<;Dr5u3rnJXPDFGqu}uZp7h**^AKeyI z&skXP^k2iGJmT=jQ96-iiPhAN)E(oju?q@g=_e5zM;F&o zsB5~^9UV?#X1J;teAd^_i5U`feiNl1Ef!;g`}Pg0Agr1Bj`Q0neP1L-*Sj3Y z`u?4ztDg!g^b~%Rb=51#Sz!&8Mc#u1Q+bwV9_;hjS!M3wZsQ(Kelk82$APq%v9cuA z8=6N?-5VvtEWJC7p7Ig2};u1$ac2ukjmYu!E&T`{oN2!L$ z*iZ}h%2w@n|AIZKhke+Sd+peA@y3RhsaSaq>%iXO$vvLERO(fY5p}I#Z*u|0)Ym&I z&}{2w3%!?!DR!Jl%X3<=4ugFQeb|;YPnue`BwV^Gp3|vLl<#PvR1ut zoWI(#W<1H;<7{Wl9GIe-25(%6X;A8B*qbkBCN5aROHSJQdm`gL>iZg1MpD)@s*Qa6 zfctlRW|?#1AZ2%aY$X`}T5+gns@c@9MEt4mY;1qd$-DzTZ?F3={1q90cmF^5v%`G- zQ;zdm@kO4q@(b3k;r1?@`{#lXcbn|s@SpExQdM2k&~REUL8Ox}vwW@ddGe!pRwC;v zupWO!4p&hB66zdJoa*Nt=21JFZcy$5bc*Agh)jBuT6SGu)wQg*LP~Zxr!Zt+58mg= zst?p`S^cJ!Unf{5|=i>!Hq*LEYfo!RPPKw?mMlE|C(t>rlvm}4BKgSKT;Mb@l= zBC>hxGEk}>BrV~SMOMDcRz*aoo*g3Y*up^X10rwMJJGh+^Eko-+cNT}h`d?nM9VAt z%gd*UyjkBwjIWnNrMBc1pqU|G(^!Z1MJEx1hX|P(p zpfInn(CSraBO+(kDbaGpxf|4k^x};rUc<7=eYMEv=(bYi#cf8lW7^ePPgZSAVat}} zmToFKBH|2@HSNmS%`PsQMfAX0=BxLhxacH*G0LO?$7%p@~xI+f)sL+6^&)R#(emcmUp=D4JWy^B`KVadZBm6-O2Mf9!LL!~oQS+> z-|LHY?5ba*gUyKv-#O2dR~xjL_&s@TpI|nW=3SgyTSA?HS#7i; z@nnZC%#Rwd*l~o;nphp4&ZD(<9-*@~Rwp~h>g9JGA)gT|A2l3We}w!QvGT>a7i`M4 zOZM_3bk2;`DJneQzk)X$A%9k^d~R884)@D`?d?87Co@)ulhCj3#uelv-?pVO*W=a$ z?kA9~HusZXpuNdY-m5Ci@0n}+x--FAxjLpOeaKTk`DGgML5j-rR`3l;1t*%kzPc{j+$COBUiB@k&1%KlZ^i2zCl)kr3)O6^Y1mX>4HX*$_#VKuHa5QG?Y)Xfo{1;0p?EholFgXFea42wsnX@A z%3XQ^DSK6hja&AyPPAW!1K4=2vQIpf_-Qj=Mz7tJ{nyZwpENlYN0C+b34grVo&N;u z09*OK-^zDnQ+Q)&8B1!7MBByGmB@qlF`A*Q`yqpoI)XCh+5A^uuy z+-unwv~0XN#)g!qYCApXebv(Yx}_Ie@1m#bdkVe#EWHOUz1aG;>p1aK>|=zU)bT?` zPi#w>D^z-_-G?)8bo0;~M6W01CNDQbMo-QQB`?3%1@&L*`yDwJi_0a@ro4V%+LLM* z{qNrIejUHkE*{43Yqh5UdiAu6$5gzgJ$(Z``PuEMJf=ORw|2YVK~MV3M@&9F-8YK` zjgc}_^^e};mfoJIqn6%r5eM3zU5``fJ%ygs<2Q|7jEbjd*JI+R zS(g?)smE^_z5k!<(Yv-vJ*xWXFJ!%c<=5252!3Cy9@Ehqq22u)y+Nb*7<%%Pm{p!@ zW9o5{d`_b$_4sX*PfvG+dQATe`#e~B-?8+LR*$Oxu0`)xmfonPx6*msgWj(#y~i!R zmCj?8kKdsu_5Xy?Tdw{&ufpmPP3l9HYwNCk?kxIJuHQxfwd$h?y*A4A59p1V`WQn` ze)f6Q7*ii@pJg2%E1yqV`HbzSB@Z2x>j-+!T6#}eda-@8=&AmA5xwUuz3*9iN2^D5 zKBl*IyU$yCzcVX$ zH4Rs8ui^q+d)3bBoVxAaVx{$$@7i5ZbCsj8sG;Uc6?euD{PmC2H%kk&x4PqRij4DC z5{Fa3o(aSeSEs*U`6+Q6Z)e*2JAX$#-=yx^$@bucq&;umzLO2YiDmQ7Y86;bgP)Hc z>`$Jw-#zAgd~^NDz24<&dIkGMTdFSOJgY0>BVIKdbjR*Xoh!D7cc~Dr*q*mtVeK#d z@2}N&ck)llZUmoA7j?VG;xozQ>31vm+_bYk%4@xG2x^D;l(wLJh17RI>YE^YKI&dBOqrP1p_^+kaWXc5%%WyKUo? zVg63?02X>1w)6Mv`KNv=FH(Mj;x~xjwmbH_3HU8FewSA8`+ph}*iq+=lh@-*#>xMQ z55-qCn{jdqYGc?R@Jb;b^~>XR&4pnGH0{4DDkAUodayC^Lr$}#Al3$dzR{2cVqihBe* zOHc6aK6W}x+%9(HXUE;XOx#LO;yxz$+Hnuyuf1FQ>osw|4n1iH;#V-QP>w+>k9eXn-{x@Jxes=u5%fzqrB>s5x0-_j$68{46&z*dy=kKtI z|5)^n7C+y-srUU+-(scXGly}*b?V7Iq#ZSGxs<9Y%2u00OWp$Ht-O+X1IWkk(0%+H z@g+YQ!cch}AaAw1uPM2*%73O!M?Zmm1LzJ zs)ylUDIbIRmdA-yYO?SZ)rD-2kK=O<*JL zr+eL8Y^eHI=j{Jt<7nruTEfk5MSgpn!A||51MYh4gs`LT`;%6%W7?yd4HG%H7qAgt z*X5qC@?+ZKJFp?YO7n+mCu1>fF>wH0uN-t+d}r|JZ82>x<%WFvExN@eU%uZB!tXmt z^TYu63h=2)%{v$Ox)X5cCC!6>V$Q|an0xzG&6CccAGx1-n`xS-zUg*12;cvE&1cwa zsRh2}`2y@S54`2u@2wZh+;rFlAgF^<8no77JLYHjp{LH0s2 zdo!1^H&hY4w^sDSJb~%h(HL z3jQs47CaIAi}3s=_J)FwJ<5JYUuQkcjCd!k^w~Q$3w{uPrSK&7imimt+``^a@B!X~ zw8Gck#@^+?UFT;O3++nZna`+|iPWS+O`?SDU7qK@Ke1>^{eefH~*c%GomelD^z%Ts~ zdqKfVAKK?G!hgx$ZG-UH7xucz4>8vID0@M{C)lej2>;zl>;(l+u4Aub_$?Q*7ZiMv zy*At6Ck(O|6g-`0(gAoc@lV6c*vn@U{@b6h7Zkjb@?V0#!d_zY@HF<04GggtU>18p z!Kc2HrRCi2q(oEI zrM$~sfS;X1{lk-JZ^@5vzcWw$!_|De5d3WN-wY4(T}d7MzGI&dt+6@H(o;h!)w`Vt`~kKd+$xd z|Ht;bBk z;q*rn@DFa#>22(lH3dJ%@QlD6Zs2lgLe3rdT+u_gC z-iF~xr_$fUU!*=p;l1>Cb8z=7v}dKyUYN;G(7w;0J;U4gv9BHcAGNe+c*3TAZX5hJ z)c-6zPwfp0ANo1%8D5*k`tk73(0?3;C#CV6`d#|(KhU1xP1J8Cy!CF{^9$^y_Z;W5 zO6Pi!0H2^fN8m5hf3AYhz3X=OFno;mpA4TFV6XEr+LI~2j()BO@IRif%d_$x_Qrt! z<}I2B{@mrZ!e1TGyqk9w9q^mX&0+h?yd#3on!(A5OS)X=N%sERsO6ov?sd!H&*y61 z!QN(r@Pd0ZpTB~=grB0%`i$lyw1+x)dr_s;QKlY&JZCuZ$;7!+P zKEqz08Q)|i%qCbEK(eHx4DV_cRKJZ)i zvV?ypr0tclS7P89;{7K51L;!_>~Ztpx38mrfVZ*tc|H8ehv*;R6DRN<68=W|^Ky85 zCv6-43v+`T`fRT|1+TtMpFhFguevkv^W^;4+2s~}pKIbfwEuwGiyHo`6wN1I-tX4I z<8RcwfZIIg!2# zK6)zs2fVp#pBw)p_U7dJ+YMi2@8k^l4z3@)@EOjRYIq9$L%-qy?hoO|UQGW1Z{N!K z2>&wIk70OVuFIW=r~iQdL&<;XfSWYg?SB3g`VV*q{cRY2bu;}3yp6qko8fQ7-!y!_ zX}{YKpS_6w1KvgXPQf?cN&f*KXD{fuAJf0l-yK%^>|L4;Z#~KQYH^-K5|)?+YEnui}pXm-tK)1 zsJ?i@m9?f>$=<-_}eEtysa<_ZG*~_v11GIhkH9yq)J$AAJshgF7gHs7<*-0&r=uaZ;bp1 z^7Zg1jePmV?7a;?)$DCLLAvvI`u{g+dy8XS1L0rzANo`3JAnUM_}YKapTd*b>$MgB z;RO0qxI=%{3;!(lGgqISBNK7`%7i-@@DuR zoqeaAy<+Q^cwPzW1M!b@4+VeamzvMhUrhaz{`{{-fxRu0{zaV~(!6Mj=O_4S6(*hY zzX$&G^*0A!wL|mf&vEX*N_-#D@n+r0vjlwlDy=_V+v(=H2i?E@P0J6GzYcg` zqUNLD=6rzfYvp=D{=4g0R|sC@a=m~r2pZdlgcLM(L1N5Kp%%|w%;3p2zf5Mw6uawsvWNlsgPk1_eC5Pd!=XtRe-ogDw zBfQ|x^q=r%_IB=q|JPsWKjB5md);C9E#~~oq`fA_9du9KNPkLtEBEgi@C(N1PvH~q zNE4-8EfkF5j;{#prJ@8?;bNa3B5PUCu6dvUMVhX+wJ`V5i5s4#A&;$Nic3PollRpNA*FD=Gg)_&j`-;+%g;|8>xP0iFy`8y{vbRIZ<*ikF2Wyz zm%{V7|4DkoL3apV4v**hkqLhoUJVb>ACLkydB=mUet^5Q{kP8li#HHgYIeYZg~CTem4_-I=mNNJIpf_ zJRRN-uVnn73BDRW2oLf+)&>8~`>21#d0rZV{}w(9UsU&l@ZZ75;oY2Hi||?aBz)un zuD8b?bbk+@h7T~FlnMU>d={R>`B4V{BYYkn_buulJ_kPxPoaFf;LpN)zyY2|k^%?a zw{rdMgSWh!`h@=vd;ng)nfipUf)ByFh_4C$HuwmmC*X;y zJ;9UUQ}A$@@fLVaO1v`zFYlr}k3Z;!;BzXS@wZHPE_?yr#$Lo_@b&OTcq{!!6a3{9 z;~8)~=sMW%g8vmB4wd<5P{{9W+Z!^f09_lHC9|AJ4z!v`pT_#5C;@G0aM;qmYp`24kLRsFyJp!+6xD!h7uz3kx$@N}h5|5^rrGdvSMs`^v-aqu9#U-^eC`+4wT z7s1Dsf4H(=24CR*U=iNW`Bw?=;`)?y(n0rLcrAR0y~{J&ISO(9655XsBA5HKN!AIcjjJI^b&xMb{n`=1#;2(xhz{gbk zg9qVL@L|sPMR-5`?+o1Gc{J%{@(-Vbr#?dd;a`O>z>Dag%Ha3G7vUq^uQtI4;7$VV zfxW%E;9rBs!_zq*hv4_a6XE^p{s;a5JPDrl1^mO+^(O!?qW?(x0QE)xoC>df%k6F^ z{7vw5cq;c}W$*-eCVY4=`G>z59#r}~4|KtggXh76YCIkO7I+a{t(iOpPlT7j=NO+{ zg#RA@mGBPw&!ki6zu~p;tm|q2@IS)q;kDwx7e2V_( zRPq6zgI98YmI=QOz5q{F=O6sz@J0Ax#zUIm*TbDRlTQEM1#f}J!&BAx7W@oYXfbZt|l?h+M zUnhKo=k*{w^+WiB?@grs;qk}b?#{q3VSKd+-c0+8I~_YeqW+3$=>$xhEGxd@FwExfj>=u-2@NPKaRnl?V$eQ&5TDMhNqjw>V~kNkxsb> z^!<1<@ixK>-l2In?SBydjZd2Ub?#>l!{QR8Xw-THQ)cMN;o zarkp3v^V^ZeSMER2Y-h9=MH!e=hLb+2i@EMNqbZA(f@?tcM)$7Jn#FAVZ$HUKzoBX zo^prV3IF!Pv^RKi1LFy}_?G<7IPa z^1cjS^lcsR(Aop;D7@}g&4b@O;KpZgKWEbW>5uZ@pZ<bF6HDF%0XSnX`N)AA&XR^vp!;Ok<}9I|bNL z->WE%pBVCc0pUOr~W0Nuwu~CkVQfyp=4f%%Tq@cEu5uJ*IxdmM_<M(0=5s>+9MaE2X^km3SL2iz{VgqYPB4egz8aw%=tHl6VO}d$i8A)GbrPq*drWSkY zOr$HZC&g|f-ApC+($%+U#W@#-EECS9$e1a_o{akVKgtNgwaA$1!x0%i|B5oT9T_ui z*ppEc?qcnH3>hW5R!K!p`LSvK!-<&ELQ?SNHtQ%*i zk}-uFv2%o!y?ZtXiMe@YnLlISp$HKRj5S^kh1He5gB`}1+utY z({Y+SIi|*%vd~2pJsNNS_UB3Y9-f-jHzH1Q#jvl zY4k}(M(Pfk$h=m|lyjYtlU27>Oaa)xFE6!yBkf`arPMas^&r$b$n%S~;{oLTm`D-KSJQfwP&_(GcYcl(do?LqRwr%>$ zO;3)w_hunb+oW@ok(IgE+NQSxMQ-thQKHVx$fkZgRYU^K0q;*$g7SB^M02v4Wvhil z7qX(o5%zA0wnvV|j1;(7;TtwppPZ4)*}3(oc1&T5*+`kj*rhXE&TfZg*I0@us#Px3 zZ1Ig7iX-*iiF|q!?Mvpp7gex!VRk`DeniCSLWUZY?%c`oWZ0EO&58HLoc&6UCL!P6 zYPo{kO{K;5Y3&?DPN#W(ye3-4ie&3qn$J7IEt_|H@zMOH&opxK?Xrk|UgV@d^yFe1 zH^RLlXZnjWZ#{#GjoBsViz(-ep3M3j$%&C!S6JwGPG9n5{B~_*qQdI)Wc+i)$gB@% zZ?Iav<9ykZ^Uq%+N9$*?URD;fmzuf9llA)pRc^71HufWvsuyRX6)j^;9kt6l5Sd=? zc=qW3qcTFt+$%O$r~5X&ocPM3YxgH#6}>fCz|BvS;Tdwrp*?W!X9EvK@O*I4CwVk7hHbjYO?-;5c6w{j)9o<;q8v z+_4JiLD9{&bpPG_nEuf+=R73#)>-zvHW!lzwLzi2_l>9ziEfUi`|rlGso;p*JuLP@ z{|9@U^TVOo0EzS)Vl&sWx!gHr*LzeC$9MSHP+i1&(_4G(z9cVyy>-Gpii~vnrTH6k z)xxydB^MRsL`utX9`o#|^|#bd_xu;ILU4?j^Y}7yB^PrsD!Hhnf^*eg*zHHio=|f2 zZl3K=kZVaqRxRPE6{7mkNu}e>veby#bUwT$eHO(`9{tb&9X<0mgSZ1r?M zQ}TH=b@j%BXTQQLH1%K9-R#emtXF2L1k^))BrIorL1ZS4<300}cg9=1M?lbf)MH-^ z7C~I?Xw*-CGTtO}=hS$V8cS0D)Vv-w$3gvjL!2(vX5Qm2zR0&4#L~huuR59)T;aLd z3QV4xr?D~6b*KAVY;ddv*R!MndYh?abLySGSc(lg^fHIXkK`dPNnUDb;XS;rhkgg z+HFxfCFkcC$rH6)_ibOVik`~0<;&C4SDs?;ZqZg6H}#>i9;+kQt0T1>*XVi05Ub~3 zH*HVOF-FHLidY@W!oG~!imx+zYpeVic__=-7&6cDg#}@IqF=n^3GvnGk>#8nqr+-r zJl?C7t}G|VS~_cv)QP$}zR{OmzdlA*t$tQP*Ip2cUJ&&yz7A1E$K>fmd0?KKEx+EE z=e%RzxkxYLm@X!AjyLmOJo!g^-M6COahIN#yEV9CUtv}{)q}SFm_7YhPL6Z9{ZM2N z3Dqx2U#-S*)f_D8Te|VP_}C3@5`KqGAGKp;zZYCl({Ob`O;e-Hf!FUZ^hEsB-yMj| z?^eEKo~=3)$JM+4h7R|g_?j@j8dmn@ZyjyMri0__1Su`rLaWaoc5*(9QR| zC+~Gn#BRb)eVzQo%65xus&?(%$+n=FjkKR+?DVbM&-Xlxts6V7E8FqvQH|NFwQ`lM z?bW3XTXybdQ!%~2S-q85-|4SKpyF3;N{wYpJ4(a<(uoJ$_u)Uo_`hjo|E%+%UYzA^ z*;%c2?@`Zkd>5 z$x9u6#=G{rC*h~u_}Ra*pQ2s68?&pg-0m&(locF^>o-H{QT&a{% zm3#fmuw)r2^dymEmA~SPHfOV`M8O6Tb%ay-KMzbuh6V`Y?quIQN4q+UG+pjKaf6*s+C)Oj5aT%HAzSrGVIAJnss?Mv*d?~1aDnP-gsNn?L{ zW&3Qcs_oZ@yw|SeZR3_Ee2L9rY-U`#$K8m{Ib-wpE8EPjs^aNY>aA+4`pa9*zW$T< zMXt*#4|e^iZ^FmR_qzr7Su%c}TiMU1om*^Ajw9D(S>u6hI0<~Kk=C}~EyQl(E`4o# zVP(7Caxs3b`(>fN>uF!l+-l3#!V0$X)VN6ncaDXd)qW(AUorYo=UjCS_29oim$J{o zU+u{U+)c>$?AP~WFRkD&v@xs}mSsZm$Z!44yH#G0-bc`^CVJVuTuB*wYT z08JzV{PB_H<)hvnm5Yq@Ejm6`D$5$ZMC7H9G4kQCw>eg1fpohpKPo!rou-MKttZ*l zCVPX`J3CH=$V%U&?W?D{W#g$7dGn6b*ft9f`}<8vxoi=6^RCm#vk!snq$HA#vsGlx z3uYs$H)e{dzbcWHzEbLWnKxL~B5Pha8@sd#9*{4rV7*zcS@|V-b{W=)&KBKBjE;JG zUAA1diTu_W`I1sbw7kc7+q`qB$X7+l7w4)~R#=nXe*UTz+3F}+y~hZbT-)$=k*$fA zWz;YF1fbYICbIGlP?w?i8hyD;US{Owy{;*fO{@pOg5BzxzA3jtFSp@UYMsbOxAmyC zba%$e$TfyNNVo62R9|J(*w5~3oU%Ve-@mE757jy#(l>P9#rH@TGtUN_DW+fhM{vb! ziN2oMz8K$`y82MmeWKd;(DpNopWe8A?&bK&G=5xSJl=20QGcoHxOd&O{a6xLU}sqw zGY&+W_e`MGv(>nuQ&m-~FG|>Xy|E?N*mAQkp&j!yG1uL4r+XE?!Y1Z~m1DMi>W}PV z{m5Q~wx0yP15Iz>+gJQl8bAO0Z~O5JrCFDW6@w`ZL?{n+JvyQ^kBKP&8O?{Mov6Y3bq4N&7*ITxZU)fg9jwn;Ro%DUTMy~ntOe^-)ckJz1 zJbPll&BXft73{OhzgnEEq=*iK^;tYpp?Vy(A%oeCP}X6p!}iF#ZgJbN-EC~2gl+ky znLpG$)ugpn%M9O=xBQH?InY!0Z%Ql`y@2{-nV&qvEuc4q-i?;t$wp7^+iZ2wYhk^i z1@vx0Pqk?!^8uqL_qefo%HCnt;Z?`m(Hk)NJH_ZF*b3(Fzqqb@fVs+S>VV|A&+ZtT?4mOF@R%Gfy# zJMzmjf2i`9vFcE*{S^L1w|g6UQirFTvJqVy)pvWPj6O)6^y9Z3{oB!(@BY$_{&IC$ zeO2jpwn>iY52HVh{vGH`ovt?e%hhRZ>6YD>5s>&FM?Ybj?=R60(7&lz*BJc-J8<*& zRU28jk)P;KqaQ+l5Bie-wMIX28GX@fe0HzfjNV>LFT?1qT0yUS_*Qoqy?yAZH4c^N z8AdN@8NKQqwbkmd_?;(S#kN!jORGXTo z{RW%&y2qG~z1_&G^iT3n^c7b>kvsg7wyTaQxdls49TT})<`*ljeo8LsS3XzAL~io$ z`gr+?H@QkKXvsD2y*UzJ$17THfj&~n)mn0+V;vE>(5qUmmUf}!IxM-Y%l-T=F<*dW zr@m>A`w6b{svUKnf1`J-w_&e$OkI0>`0icFrKGe)jyY%OW9qolRdS&sbL!u!~Ebxx7R3977-0!~59P2m7iazbfJhe&74U#9(UD|B?Vn^jS^lQJI z+o$|;iLcdiLm%Gnl}n!`H)hF=8M#W*5z7GbZ2k7+3hvQ zmev?u>@78Fxk2nHzg?E!Rort*z4csc>`~5gY{?ue+wGTq_jSHsRW5Uuy@X%*+a&hEc`AD&jsr;&A;h1C64iY~V9bel~YEr~X#uJZ8y_nKr4eZHael zdtKDIYA@EK8xA=0w0WCLD z&prMz$~$AL_v>SI^i8VXT4w$BH%*<3TpzrULJm6mHdTbJL6B^SKO@BhNT(QzvT% zdEy`Zd<5w0L@r}a%LRF#CdbB~)yFzm!(5Kd{7D~MqW@9#R%zL5+vV3s-h!5E=31fT z+AO(p>Lb!l|Dxqm*81mB?Th+Yz-oWf=Gdy!eYw1swA?D{P3#StW21*|jvRAd)^fqC ze7RwBtZ$cpZUz3T<$53Y&zWI!Z1e_SH~DW`Zg#aFOWC46HgU0^w-IwJMBPYyfxm0H z>C^Q!RGq)$|Io+AXa^$K@rpjy+~mhMZ;mBi#11MpY>xNGuNn)b!?)^&&NQ5w%5E}pM!OlTte5)p1l_9*hr(VTlrQ$7Uj3k zlC$HRT@@`iVadg_#=n$RR+5$r&>zUL9&@ao{#lM?zC+73PWyG)V~!1BTgjDXV&OOvU#p{sn2f@;sSLeaNw(65!Wt^;e_sj?PE5zulyzhfUT zY^c3Z#K(NO-#6u*sO9?UBUJf~SoYG-^v}!Q)mmdm9x}&l-LgzAH$hw~AF53MO9}8R;@y`#SJa>5`&Ib}Kkt`I zC2dk->CDn{3*5_#Zt1!D*d%RDtnw$Z^fVe>E9Sf_^s%-&t=n$vQZ7kII&F@%U+TAm z)@!xgFzrv`t8O-a(N|@H1*K(_P)=+Y3FD##rj!$U0B+d^dS8B<%VLOuF z)@Z-YmfX-M{Bu9^Gg_{LYpt@^YsocQZG7UhT5gg1P9-;P$#q)ybuBmeepUGm)7BRG z_6ijzi))H{-irT|pSMx^U5UBv7A-fKs;|@OmR$EOe*aS6q2)S0>eo@mZTeWLb^p9z zjwNwlEI!IUr{z*Pr&T^WEgyk#|K6v&Ps^#emE5o;r;dretN|@oX3AyOk_$Ea_aL43 zYq^T=SOQ{|$5uhZbDvCklD+jTSM zr0y-$;d8QId;D6BSvH|}5Iq^Q{GicWZp>5ssjg-WSo6`VSes)D`r`(HlhXOO{@)(MwxK zud2%TnMK{tquYnB%*$VIbkmp7l~~m~lN821zij#3VDw6lqNm!hyfe86J$Yx6XY|UJ z(PMZxGN>zK!(r84_jS2n!G?^<=3`@}G3JO7e2ATL?DYRd+nF|Fw&$&2M~^YH(S{ym zMv`%3Z`++MpJhhc zjaqwg02}vVLyfU2rH#hMO8tiFZ|2Y&Ku_9Rfzey8-;lbWzpL8~u$Jc6(3A72(C8%` z5wYLaR6kX&*5pJ_`l%wLw_Ja*yRpH`qsl|ODqnOTKzA-p?_+U+(OtIB2hF0E8X}X8exrR{Hyv^@8^o~zfzmC4T+t8>?GFh_3XqkCa3I_tY9am&3P}z zrOgdvEA;pQ_v^$Y?-EL}B|p2(#jW%Ads5e@8Qw)ah@P~$O{OeG*G4HP)y|Us*6luo zp0u+Ijoxduvm*3{(35ty+33AiJ8MJlVf3V(l^MMRJ3#Zd#HrfZ2zuW@Pukf2~o zGi_u%2XS-XY%%cqc)_i+{EL4MM%R69zHIoHDfVDD7)73ZbMPwc{=Q%Z$FXbK8vQsWlce(fcWS(qGpZy=D7PV??bBR*&A4rMJWA z$u(>_e`-CjKJFqRnE8W+t=Z`t`evY2h>n@`gupODdz1>Gyl1=j2Px++%i@gcZ zm-4MQ`YFrkd-I~qBq^~mjE#D1Ok+cyWiB^1QjccCOv4ZxI9KJa$I1?)2<5n{&2t1v~njRo}!OdCo3j ztL;h~&RW2N&~o%fmO{SG}j@0*O?a_6u3Q|Em>db8-sd4ILhOR$4Ae~X?v-}=z|J$iD! zU1RiCI#1R4HiOq?ezK;>}<>~t01QQ(!yeE#;M~x zPaJaJpysCPd7xU*uC{sP^qgrmq1B%Y>aEFO4BPTAAn&d3vff(%!Jb@ul=VM0uCL&c zgEg(#FHe3iY2SL9ubF^=9BYV$)W?1z<{Z{?dTOsPS5)YIPwvaTtmV8J$}-;=d$O2- zFNo#8YFTe)vL)+%7j6sw&66`B`o6s`CK4cjEP8S#L|;x-aYXFzo{S04mx-F4`-&&S z)L-wXzgz!5?B!c`>F(2NmE(EZlkDZ&LOW7Ct)0DjLg5W1d1{Hi@FsR+t%wB4AMbct zv#Q3r_1hctydOyqkVbnU6FN3z)Wj4?c8)jc+st?L^}B1mbsI$B{W1Ea>%|+4z)6yB zZm3CLE4m6(CEeUqlb&IxpDgL-rkeCK?DP*vx;Z&WH>s(#@O-($$I|kqn$cy4DGK$JF0;0iP-QrhQb^Hrd&8 zK4{WqUIpoP_M9w9H|>LTJA2NDB;B+R((UXy=SsS1AEevab3QETrhSlZhwlU>-LwzV zquNKdq?`6ZdQ|&ZC+VhrkRH`OawOff57MLBM@Z65`%vk20p?1&X&)-xF2MDYZrX=R zw+nECq?`7k((MAwlXTNQRJvV&`I2thhf22#@H|O3_200i+790-H0iPqBI$PcPLZUW z`X}8E-?>22P5qN@hwl_ix~YHC?eLuvNjLRRx*fh#D(R;FNsp@kO_FZvpY*8uzfjUm z{gdw1|L_;N4+*e#G#CJ^nU>Z0BW`PcSG=#wb zSPllkI(um|i0N5Fn?1{?+*_E;DP1K>0m1n0p@a0zSy6TXZ-sPoCbs7JXi@Xfh}Od zJ?MkU;0Txo&VX52a~}OFb$jmvp|PE0>WSbEC+*N9asrAgDqe?*aLQhBVa!`0}g`@Yy6Lc z0dN`&g7aV{xCFL<3H|7U$>0c>2F`$4pu-ydVK4xegF&zktOT3E7O)-c0lUEwupgWO zhe0O||6l-|27}-{SP3qHEnvdE=!41N2$%-WfLWk(D*nL$SPlk3wbpti*bKIS?O+es z4UT~Q;0!nn#<2$eIG7GjgQeg+*bFX#Jz&CD8NUFN!FezZT*bHPSzs0z1}njGunnvO z2f$`<8e9UWR%7Qr)}jED!L&8l0ZYLwuo(=4ePB5_3D$wmTI_&nVBQ(*b5O)u``{ut z29_1GCO+5I0S~lF|Zz- z0z1Jua0pxkr@{D4_8<8O_Q5tV6&wIF!6`5gj4LNLFdeJ~%fKeE1#AQRz%Fnc>;n&j zLtxS+_y@DVDX3it$^+~J%fTVA6&wTm!6|SOoCBA@MKGlj|L3r7KbQnIfvI2*moC8zAgev@l zVK5JD1IxfsuojG~#y=PY+rTEU3mgLbz{B7Wm|lZ_unwF8`@lJH4qOBS+wh;o{u5vl z*bSzFQ(z{TbSeJ9GO!Hn1Z%+wF!e*EU4|T32j+ntU>P_F)`C-D6SxGnfhl#w2^N8U zU?VsLc7bEy2sj1Kf^%TP4&nsU!LoDlvkSXm2iOD-DgI$>HNe3Munk-UyTH`lq=9AN z5ZDQhfurCQco>`mQ<%H32$q5IL2Q6Y;4s()I#-eo&VupToVQnz4rYLTTlE&jnuun#P4#y;2qPJv_K9Ozt!eJ~x2&p`(q0%u#00TVxgJeUQ} zsdR7=>;&UO)Ek%t&V#97@+XN041sxIEm#J2g0+EjR~ufQ#S=7{7t@PH`|{A3P6vFbS*!Q^9U96C4Ngz$LH@ zOzXlXSPnLU?O+=?40eI@U>}&gpLoD9Ses8f=q3&@?-0k&BmTQNem>ZX{6^BgLcHKm zKk*mPzw%xE6gUsgfq}0PFIWb~7m^<^2^-GcW@z1*^eoupMj!hrm{F4(tRI ze~b+<6C4D~!Pz0o?3efh`@pz|$uqbLoC8z9_+Q}zOant;8CVLofYo51!bgyO9=~7_ z*a|j-onSB63r>K8;1W0rrp=RYupFEPyTHTX6c{(mzZZxDOb1iIN-zWL07KviSPCwH z)nL+}@DJvJtza|Q3HF1N-z46@V&_}PEfUWNvj5~b82T6dF=FC->CSHxWBehv7n}kI z!6k4MOy&FMl<(k+ZsrUy+z)~>fH2i~YU?VsOwu0f)@elTcyw&sf+=gUtJ1+iun!zn>0skHZ7_s9n30P- z*a-H51K=RI0FHub>xl!b182d0@Gv+J#yw4Y*+4mf)nE$P17?6TU{^KUfd;f`i~7xB!l-^z-nq(!p7906eVH!MJBgKOg^KJ(vOxfEi$F82{iX zSPGVH#6LI;HiD%E_y^~}PB2)Af3OQ21P_CwU{MkN!9H*n3|@eLa1f09K7NYv5B7j5 zU}6dW!4@zCPJ^XjMk)TmUa%2d0$ah-P51`~z+N!%Li~e0;3ycs8UJ86I14&u=<_e7 z9=(eWxxs7D16#pCa1>-f}>zNI0+7ev*0{< z7);)a|4PaSTm?3RDPTXC0ZxMuc3ML%F zKbQsfg7x4a*b9z=li(y6cNhM_Oz<#R2gX$$a(lp4;3Sv=Iz9LY17HXYfu&#_SPgc9 zjo>iY3eJL^V8Z9{31)zumx4p+)lyI2Ko1-T8^O3o&;zr;POuT|1^dB4a26Z|lZS~3 zECXl3PVg`|4#sWA-=oA0hQSoD1Iz#?z!13VoA?Kdz-q7+?7a+`IsAZ?;3(JzPJ#pA zEI0)o2AyZ|Q%8FOSAk_<3fKZ>fPG*HoB&I~C9oPyd5%1RMPMt~40eKjU@tfc4uVVI zD46m*$G|W+3pRm=!Co+K2ll~LpfiswmO z*1wZdU^zGfc7qe(Bsc@E3g90s0-b-* zUcp3g91MW*$KxLifeh z|CdU-dA~qb^uH}4lnkMh4=(#`t?(xd!;Ow#53LRDjw|H~v@>c6Tn%72}tOZ`_h zM)}_%=~DkyjZyx0O1i24?Nz&?{O^)8W`X@cg|22|s>YsGG`8wB1x~YHC?dIz=OS-9l z(xculT_@?L{z;E|zw~iQH}y|?)ceKjCEe6N=~3r@i=>EenQes{i}4l06!_| zrv6pBU4WmGbW{H--7dgZNjLSc((MBLw4|H*SLt>Een!%*`nL=4vnKrvbN(xRy8zoH z-LL=Eb^+cX>3;q5s?z`6DCvIvud&PTCQ0|}e~n#!?UL@-{~EjeZkBYv{@2*$cZ;O^ z^}oh0zgs2Uum3f6`E^LTU;k_D^1Dsa{rX>Hm*4G@?$`esyZr8ubie-Tiv3@wr2F;1 z)-Jz2lJ3|4TD$!AO1i24y4}(J-vN_;rm26@ZFQ$x(oOx7ZWq6EP|{8PlWrHkb4b!n z{gZANzjK$QoBAi+E`Fy+(oOx7ZWq7vIY~G5Pr6YsGG_?^#7x~YHCqt5?c zNjLSc((Us9f~1@JSLt>Eeo@j*{i}4l0KX*Zrv6pBU4VU(Zt7p9+XeV#NjLSc((MAg zN77CGSMAtphwt2H($A9bmv(Hm!*>QG-PAw&cKFWMB;C|M>2~2?7=D(R;FRk~e(-;{Jy|25Uo=l^$1 zy6lZfx*fhVD(R;FNw>py9+z}e|D@aDJ5NZusejV#@SX2Ux~YHC?eLv3NjLRRdQ|;C zDe0#ENsp@krzG9fKj~5R|2;`J^-p?K{f|q!sehGj*Z2?8r zU(!wet8}{nCnVj}ze=|Y@CTA^>R+YX1^7crm+OC3gB`x}Qq;Y?C_l_Ntf$? zRf8SA^D{}8>wi^)9lrB(Ntf$?Rf8SA^9xCr>wi^)9lkRy>2m$AYKW@;UrM@M|En6J z>i<`gZt9;k_;U-3atjKJ_4jz{N;`|p>ND0F3(S|<6jr-E9w~_I@3pM4#@ZBYZd1y) zqqe<2Xc^O@luSWMZYle}MvFOr)N-a}InMh0f>5l?oF^l9=gecwEedDnW*5c^7JKgBFrXO_wiGG@y%lk?617aWsw{Bo%;+_87 zpMLa5(f^mF|0$!de8&E^uB*F(Wm6+_TZYk(TYb=d)zWV@`peB_+?w0e*s#UdA4lKw z@r)n;r;WbMTd-sB3XcQwZT>X+=}#PRUG$~=K7;!Bd5*z*42;H#XJp&u#=A6D|1smaul@(uq82z3qzFo8QZ(C7cZA0km zkE1_#$4zby`l+m`rZRlT3i@nhk?S?_nrgMD4U((@xNab_26#E^8LNMiziI5Jyluam zkNp{wzrFvy{msgLcbRWrt<$dliT!!($KSTkEyVs|V}Jh&_EXPd&5R=60q>4?Cf>|D zzcUWF8SvX)RGu8C^2Pmb2mE=%L*Luy&ckmxBi@-pexkU`O}gNqd(Gooe&$>3Qw2Z4 z@QGBu7laq4==8uTtS14leY583yUDy_-dX=R-kHH(()aFkYvJcq>h$<9?^oenFUC7_ zq}Oll;(aIaJ{RvSz}0)?Koj z(EabL;+;fzC*LiE;cI`Vd)%HAI0xW=Xw|S>P{-K9;`poI{ zp{2~zxJe_)>$@1{M7b)f1h*CbI-lKy{Y?pwfBDV zd_SM_?|c3{=Q+Tsvdm#*EAj`{C@Dm_h?-IT#HJW)vjJi)HrkOJ!%s8SaW?-(oa>LV8dT`_*%6Q zT)0l#Z(PIqHl^)qziTy4eY928f+ruNarHB;Y8b3G==4owopSnxJc~YE>GEw3d8 zO2M_1_j2%EuOX5(BkhS!X)7 ztX-XukQk^Fd+JjVT>8(%Ks`9{1KuA5pN~H_fXiChCkMRwkid!%}CD_%hy1~zVM*RWH`t>c~TOX(XfD;~H zt#*O)-=KbgC(@^no87LS$)NnfnXk2|eDJ+*QvTr1PuKDcyW`9|C8dK^cLYXCoJ0A8%O6;+ z)`P!2p7ICF`u9Qbb;XoFIO)k&wF~?s@^c8h{rM)Iakr}t4U|848|_UE_{CbvA3SN8 z@&@mNKL(Omn?wHY0B`H0{K1)&$M|yUH~yal&cC=xRf7NWJmnAGL3-DLcm0&|2T!bS zR@=Z2ms0*2>A30-QLyhY*vBFc9mDJ+y5f^%Wm-6 z|C;_QvsLwi@486auVg=;zAI_)8yn zct^9E2)^+m{1u%3H1!djLin4(rL=b|!FN>PuX6prV?mB`iGC<9uM5{kj9Nq zHmObE{$h<2$?xPv?dqO)G?w+;W#Ij(pMitvhseJb;FC|n|G}F{PZ#)a=i>k1^_SzH z;5YxL`J0wEtBmS)wdx=ppCSBt61d|p8q5Dd@MBXo?tF+99W z)4zhVCu&?YpY{>F>u`XTcw}Xxwww8kM=YU7ggc z@yHD74|pHrubI!cs4{TLJ^K1)+PgOJ_9Lm^q<16z&j9%I7V0-x_955-{$z;y4PH65 zNu?|yKcAz1gH!OwAb33E#Y}KI?NJ^0#!sl<;Mz0pRz2Xt7pULh@x*^S_~XUYZ*X;Y zt4gkESHI_aDR@Q38kGaCJe&Fr9>AY!!OxvX{RRgZ53C3OdJgp)Jf8Z$6+Don%O{=u z90DIwsOwYbGx#j{W{O)r$uG114t$Hj^8QfKQrf?9hR=8`1nxON<7&o}+rV#|8}3QH zjGw@%w5PR%zxDLn)wpYDx3Aaw-J~ZS9K2oQIS=6<;C(tZmi7Ai;4#-|-0-cnY9;tm zV_*HRW;Fd?H-op(UWLHFyo&lR_TOw&1K=-%)OT<-^>YXKqz|d@;QEc!$7|cw zH(ROi;C26QR+->r+V>IgoNdGxyk(FAI)wCu7>|H|bw2eIobq~$O1X~ykoubh4xK?7 z!2fs}{{=V5_#XV+4frp(5C7f-{yXVU16MI#Py7-7z<4JeEbmtY!HZtRf5DSB&|ZQo zm+SJ``Ndk*04{w_<1+e>9pJ_0dJ*Hn;Bv-!Tkv=In@?o?2)qC7lss|h(zD3|2P3VE&yBGflZ)~H!|F~UEr9GMh9)5x|K*1lAUzOm_|KKm+ug%x~ zxsv+S2)^iL9bVB#A(itJ%IhV4J?HVeR6cn2yZU-cHep{+{kYBedsnL(1KzMiUr&2- zjp_rRY5JRzlh>$(I_k_b+J0T?Dis8u`VWnVo~AzoKe$=r+R2n1xOO4+llb<1g8$w? zJ-MIy0#2blP6s#QFLmI$KZjHqxJ%*R;I?-9ckoii0}bHymo}*$@c#eBzrm@gy#EHC z$ar)ec-yZyck@QZtEc1N;7OE!2DkwGZg9gRt*Q)sKK8w0e-!;c_=mgjZ}7+_?mxht z_{RXai29yz6XVbQbbc&9ock^C^aS0W)X}~SfTupL@jC9W>Q=xn);N{^t`B_i<;I@- z<;_6qze?d3M`X8MDE@I8#5hQM=Z&xXaG`?X=YPX3L(6?@ZvCE>5-;Iw0P ze0y_93;05VlkmUo;EUeW*JWMg_c}6Z_&7${OJaN+NyCK{nz;0D9@WT zo_Iy0ss^9)Yn{IO-?XS+@WHohJcjxixSjjcK6CvvX-gT;Bx<}lnfeI+!o)v~@Ixz! zztO8?eq$T>ETgxM{7Ac#@wd?n(0*5gk1={%sXx8o|9z(Q*K_~83tah66F%)j&Rwjr zo~m)Mfbk7@tLY!){kK8zPoARvB7a9NZBe_xi&xWr9ZEd_k6+cUo;ri}3q0xIwWcHuj(SCt@NpBbU=B2b>;LLMd)fVt7`sXxoi20MmhIVzlnM)o11=sJU z{hh7j*C6G44}P4dankQXsvLavUp21&Hv4pf|8cLzdM{=1E8+*;;GLK-ip{j3B(XyzA^ z{uEN(;E@;f^=|xi1pNHxw9lk>4*8ST#Q5Y7w9nu)`kzwpl(%Vb!Sa4*J@`Ye2f_99 z553@0t`~uWS=fM&0hfyX2KtW>{tBKW__vIYz{i0r!NdP+R<+=Ea5Xs4!*~$t86Q@Hw^r%)q~So;Qi4zWLf3~C z8)#d>WoEo0?@490aKG}UzMgOq>m|WIdO+iG$K0s~z+)fPSl$mG(@MOqHu=l_c@g-q z294MM?M~GQF8!Ova?bWvaN2;zA?BOLwb8!NzlMl!J?&u-{K3&WzWJ4nsu7%L=DU)p z&zr$>Ki1)orM{-LlZFqCKJ{k~_z&$G2WUUKzzaUnIEDUi7`)4j-{;`JnH{u8+z+fH z{Gm&@{{h=o1{t3)-dRU`bGPOfy&qE5;0?x~wot!%!G}Jfua75vf%_P*n)DWZpZ*#A zmbo9;LVa!k-)pu2sj6&NTfvK&PnA!}ugOdBlTT|rhx>tD;O`%&aUcGX@KeU0D>WWC zjj{s=4L^nZ*FNx+`SeGmC-q9^%fMGH(DrF((cj+Byo#C6ti=D4z}LO0ua}>+Mpc5} zHBVvd&tSd_JnKMxz5h(+Kfz~yN8_P<#t`7Qj@3AW^~fXOr_R+liTkTSC*u!O9GO}8 z0(iXP=QCf@2d=B6za+l$-sCRu*^g>|!;y@a9)M%?``!(yByh6Hk81k26!52%2@kfbn@s*pTub=iTaGsN zr_v^XWv@5+jOYHO8$9iEgBj0{fU~!294KQx@*(=KnHtOc()Hl)zOV6EnQsK2{!@cx z{-TTVmbrgQxR|xw;M-05<-OEQ@X@CH(;4qKfPb+=^BWk?tOMU@#`C>-%s+ukO?pO{ zzuXC4VB%9M^YIUJziINjlKFsq@O}TM_0}_=xf1+AuF>ayq7ytlU*pme^uf=V`?<1D z?^HX%ON{?+xq$h(M;QNZ)b`c%huz?#n~dJSLhRK*eR)#jZH(8F9%cU4l;KV76H^4p2KWqcn)88)#hsfU{a1ej#0sol$-(m2M^_;gVnEAvJ@bG8ND(wmG z(>^7GlBp}q*OY_1${2ru<^AL~aL?uYcoFQb2&qo+hwDuI4`Y1tB=>FW^z}04pUc3@ z=IHCSXYxFwr(Hd|Ltif%OML;~X2uWsEz~FQgO};+)!(JR0bhK+=C7xHZumvJdi-O3 zy#fAa@Ut5=)>eT))N?oc=fF(b*{Ew-dgZ%3OP*F;u~42j@<5D_xn&QO@qDg^GezX= zl>>~D%=2aRgw)08CB8?W!KWSCQRaH|S6Ev+velMnbJ5zBXcyhlsxCu&tkJ%2ue8IV zUI{lGrk_OqR$NhmZ`pLz6IS`^Hnj-*u7&!U?gMednqD!tT!&-RAp0^(9?7@W4WXOx zSc6)IZn{as!*O-9s}?P(@Z;45e{fewT@Qb#O+ROSG!Fl(uRU0>V9B*hYAP0-SShLL zB|N+KU_Ido?m3zJUUrO|T~JVbVR1=rK{$H@4-+r>%$}83SWqxK;C*EknO;g?+loz2 zZZ-!r=Vs5&D=3;ay~Mg&V0P7_x#i{NrWx~XMo%*Xf%hH#Qzp!wSxS4v-iJknSp{sV zTxiV#>UH*0HY({c;Y7S*u*zG80| z4D;uLf|rNxj#m}+42vo>0bo}({qbicO}Sbl%i36 z0rM4(#?RttP!3wev=yRtEL{2I7tLUyR#>|h?VRTwcAz4|@b|5!{ImccbAZ zxFqwteCdJ(G9<__nNnZTL}C54t|G4d2X#S7&^r51#$lbW43I$48bdT6jfu&Eo1s zPQ8-nnPNW$4O_3Cixc*O`Q`J)-sW4-@XvGN@O&J;<>m8SKy-o191n^A%W*U$7iJd}+iVHslYVc%U$b)7yI!1CP?Vn=Hp05V+L^x8 zvzvTjiECA8ZOn>TtyNIuF8Z5hZOp1v9iO}$cVJLtY*>h%BN6p%q%(G6bb+z4`$86E zP0gJ$ZN~KMY@IamfeW!oOUs$X+T`QYB(BG&DRn#>5=Z}WpW{;}PE5^=b!lJk(#faA zx|ZNwn~;%uyuT!nv49L6PA-@>6K6A@xn5jP$uh|?HWMOjE;BZE0khG$D8dN6dB)Bz zV%ByOcC#xtc6Jf7(VIM@q-0uQ4l5gN_HtuuM@td9&OsGd7(2UA zIYQI1t2B0Ykur7#*?Hau(ib{W3|wjK>|$~3W=$)YEvue=vnpdV*^DBMO?LjY;&5SL zy};OIN806ZOoXqs(AeZSHhEFuRU4b!NSoclyV}@IiL}efat^>*tZlL#A1R0qug2Io zJ|Z@|g}2n$IX)tG5#e29Y#jd(oBU~o=SA2pGj?{7yOa-h-Zy_>p$2xmnRMtT%Q}Ss1&>7~W>=oU$->5!n*B-Pk$h zVC*7ec!#lzDhu{o&nw}sCwsEv2zP1QYvM75c`T)N%mQ~CJEyLSzZ6WHo*R*k zjmFNYs|9(bIBH&D?(A&VsGk?EvrQ(RPWgGZY`R`DeOi9Bc_3u$!{x|rEJ zPV7wGot4GCUX;asT=(xW>B@F9AmKm7<}{~YjMliH>t~pPpaa=WqLb?y`GhRJv(nUg`QV<-t1{prtoHpQ%GIdp32)?#?-T&nX|jy z!!b0oW7s|7*=5?Q>gh>-Mk_ulb|;_e2kgZ$_kw7%zQeXdf{>l+zFzMv3TLvFkD_q@r)vw8*-BzcqSG<{Axy+&r2T^bKwkU za_ZSw+%w!UoGE87zoz78ofl5ak9gdotm#?dfcs){!w%+ibrDUTQ5+ru zJr|Q3b}pamg`1a?m7ka843`7_G5KK!^ZDdgj?UH>C=6-g7 z`$+pqFh3OE)y`brn7`_|XW`lNhkgSu)e@t={d-@+%lQ{)ror1tcyizRTX=iA|1Kzy zjG7tXAKm$syz}JbnA}o7{$1#$yx*YSMQ^i-|10R(Pm=ke_+C!@%a`S3=M~Stt^#c5 z6nfE^GoNRlXxO=oO=zSVZuD1G^^)sErNTSqR9;^SYYm{a9<4v3weuJ~-}tK0vU%z1 z8Lh0U`E!?OrLfi(w1(08lcV*T(X#V+u2%WNoQi7-7nQqd8$v^D-gDCSy3w%nw62CN zC&|~%m8>~|XY+M4ygijuQFH+zYPCktYMa>PX>B)U^hO-5!Wd#!EAeddw>}i1^=2Hc z{5V=EXcg^R6QT8194(T_jZ)-0kHh4TJC7nZx{nX%>c6dx8QF+U#0@N_|FJgaW0E=uUG~YeqcMTjkyUBn<>+C!vVr|R_$_vY@Tr;M-hM!tHa|0lD z7tF|=exa_35yqccTQkZN+q}Z!5{4~)+(xX8xgisq>A8_J9iLkpb0Z-(xutm}#ks}i zNsE^IKWk@hB*d<0+N_8%$`{tg+<@!w7%9$-7*YgwX*Iuy|qT|=cIQF zI(yevgxiTUbargwykT_4Y}3zF04=XxbsJRbEw2U|P8Es=qF z(RBOL^nS)t{73p%c?OxoZ~14-tDbZPo(ZYL(aJFS{C=Etc~78o7SF$i^Cc_IcU93` zp2D0Q(BBgRJC1%_S-+BSZJ5>vWW9U;&CTiv!VH=)hY0hiKrBxS1Z2g52`WHu>jiH6 z$0gTAbiIMfiEVz^;{Wnb!na||+O*z}L+aavU1q}mSDdhmD;AdP5DO}nESY;n1$mmz z8SJ($MdzyxC-Ge7!3!;*`FMdeGYDuTT2FV7u|Hm#AzrryVn zj|8Nk9lE4hjYWHf(f%TiHo_(e5%PYWOhd1pbDY2H=>0d2UQWg3TCZsFqItxJagUUIF9iMHDcYWX%Jdsr+6!OoWhm~L2Qsiv z6ERC*Dj~gg%9JVQPSGAhIJ@M+qTGlR{{n$5xL!MPx*YmfWl|9c_?*HSPH!3rOt$vk z8G$kES$x5izaPD9YwsOn7{k6KtJrOma;&{~oM8<6DKiSQWhT%MArQ#5oKyCYhLT{! zwh`xHpXMh}BH-Urhtr)qGgsCy*iX=gacX23;wOwZCTC?&#Xn~(5uYqyb~67acvRaq z+WISPr2Th5f>uwP#J#|4YgGYZgz#CZ+sXK>t>ZQh_FMNIHq>xmR*6n%Qj3~~&U)kf zhsDwHhN)p0zYnTKr(vj7UEt_^D~^ubFM0QvW?9a(r8U({YjP?sTY5!tjZ{waxeUF? zYx5UgVLVPWip>rEl7;0(RdcT`UbJ*!In4uS`d#P!7MaVJ>Yp}mdWoz2y$0=Z*XuP? z--%P-U2XAFt22a7=M7D2DLR=(Cv`7%Bz*h17QP#XotrLZ$CTm=3$v}AeBXqv+eeE{ zR+P~SYh(IovElACcS@F7z+(h&wsxkE7CR=vrcDn|>jZAGHfAg@Hu=-06}fS`)!LXb zwGOYCEq}sR^~T0NGu1Y;vhtkza=X<@mx`S4w<}^BJzsQ(we{MF7`C$`=RQ~3@MGA^ zMn;h1i)KuBo&s>*uCcYdMtSKgD$38x z&WdQI?lyLI?>9dmm=SjeTa998atlB5?$K@B_Tfhp*VCfNH1}WS$+O?sIWpdoI&X$2 zFQPdPG!veUN7`}4$Bj=t?gz&ig=jwaX{=+5Xqp2pyYtW86JMqxZCd5Kb$4!XPh7cQ zbGdE1b948^jVuAyj_%Ga-V=9LZhrPOXTe^_?%Y{>;^vleG%~w_xmkAa?);gzUMZ3@RDaXZW7yWR| z5WtSlWqcg19YTBLfHrkM+Ji>>#J$mW3i=_qewe1QmA*ut^@y4O3@u0Rz~)c`Pr*&| z4ZJ5X{=}#GGya^P&n|Em^3cksZrGjYPpli>jKU&zkIUi#qt6Nip5C43PpaGS+%96{ z?)Ls9y0MQjD;o$r6NeWRB60G*ojKXGY}T`VllMp94w)bm@t@OGK-PKIawE{dk(n^$PRiFtVLBPemdWUYFRI3&HV z@8KuxA@1v9#9eqc?x*ZU+%pMp;)`p%@Wv6I#5rTMxUSqhrU6z5>@>FJ$Y#*hbH-ZVKD#OU77iBUeuZ03mKy4bzd{K_L6HG9f#M$wvlmw9I-fpv~3RCdY61%d9GfNRaE3mU%rKHTAHi_ zKi=Q>Zie-oE}Hi9JM7&#ZO@i_lWDUe2gL7KJ2TGp?7XmTYyyGbTN^XZb;Hfc zo6ZK7Hq=1i57yRimiKoW z&T3Qdp;vF}{Y3oDep1a3X>)s>dS89SDiykk=OpmtT@Nuk8(ymXi18_3HhJmgmsc## zuUL3RO=b95Pd(vpL+5>T?A-4;MkgV*&b2iaOQu)MTeP^mLa!+nvk*EdE85kc9i4NH zPOOfVbV@Wf@+QOEAC7m*p>7j9XW$A^6r`a^df(&-9u(5#VFnxGiX`3p9BeHttj6XcRgkR$~Z_ zo;N}f8f^8t$9U-WR!78YjG&S7XtS>&X$Z#Am<2t$QTzw_pzoi#Pc!$&o?VQw*ACa# zwjH85IhV(~k$1uWbZu=LBDT3~X&QCE{E=&G+YqtME2LG3-2d}mj;+0S=9!KZGyP(A zR#9=5KPD*6WsQGRv)T!#+xS=>`C~sB=7&`Ne%gj*1@p`0PuABe;rFoD!zU6Zb53&Y zeE6yIBgSW0Q6#?>{x0~RI{c}IzfTPQHF|1xX2s$q^A{})$DbPI$&YD9V|=s#*oM8L>n=6vHr^q1ctwVHVhkR) zW=pH97qQc8SYv>&#dMbw{|k&pdJK&ShvK@eb6e0^+1a4JL`Qr|#!1uBiQ9hoo*C8| zLMQR-EuK!l(J79jquY?Mkd4m>I$Mrf8=+GYM@P3KyX(k%wt+K3zK*=dG9!*oWSyJk z*SQpQy6$dP|0RF6m^wET9s4OUKcp}=JNXKR|GHc zMwnM>c>6?g1X^A_yn1*Fo~=_C8eXhAB|KY~`rz#YZ}WUTS9+1*#i~m-ye`5UfwwO_ zTYoM#ykMMoN}Wkx$-Adc`pOK?eO75DYWMd7Vf```grpA*+)qI_z&OIy;O%&55HEQBM%EIze=H zWHd$S%#EWHQBNG5Qgm{TYW8)c{$CbH$H^Z*E|q9BZoEw$NSbWFG%t>ZH+(QvRRVs&Ru%b(%QD}LYF+3|?A%by-) z$#W2EYsVwjHu6>~aE!6DV-Y`1`kkz-?Ccp4u|3w<+xMV+dws8CAK%!d1&%ZJc5d9X zyS&Bi4Rylp?s=>S{2zNuVITOj_Ju3Rd;3W@Kg3D4Mzy;Q4ZPbc;g~T_CA?HijQY0i zi?q7~@J@7i^9^sGD2_nOlXf?7H~Zhgv+eGchBsQfn+Y!+o*lznWq6~tyVdYchG*N| zD#J^Q6HjS(yWmZ5(zn3yMjNY$>?sa!q2a|Et4R6V!nE}|jj~*K#afkthLokWF^kZM z+jd$JY^_cvIunm!e@=9gjZSqO9o;^Jg{)2xo#eMd5jt1L(b4V0?mDIDl%E^ckuk>N zI64u&P8)3R`76;W39)BB=}I%cz62fnvHg_z`cRawFJH~xEKb?fz)Q8nsBi1D;_E%| zPIq`q4R4<)jzG&3U*7>Q6Q1?;YYcBRUmw@VJK6B;7-N~?jpplR@Xmy1eZAK3oaWV! zv5lwrdLz8Eob+95c%zLmL~NqNyUy@pjWNQ$KFjyfTFP?x?KX8b8n!HdgvMU@x(pM1 zoqBYFg<5B#@rmVebX;E-A?xcQbc)Vy@#153ejG=~^>tUL3!T8VAzw%8@K56Cg!3jG zmtHgyHnM*ud1Kr3>*Hv6;{;vp{PYZI|XN{c)Q*&(XOtj*jFD^8l>c&)e?sY~kA%L>yfexX`tC#u&bRaisl4uDvtPu=W$8;(xJY?~XTo z`>6PrIri>&!?%x$|0RyS9dEe#IUy?kmpb_EGVl6Sim7 zK@9t-_|Fa7v+5v*eN_A}3)}l^h-HrXa&Pt{a_^LZAor)Ygj5BbB2$lU!f);8K=VT? z*iM;C(o-lUvj2*0XSbk{$X}`y)q^M#si!Z}*89^t6P9-|FueinN#Oj+CW?gf|WSO}(LN-l_dAxst&U{DbR-+TE zuUa^{YSFx_SdwwYLO)+p(2%%Z>7=RNXpE5yQ6KRc`y|@7PibhZf1y=fg@%-mw70jR z5w{;PB32_4jo@*2c^c)WjBk&lq1#FulW@#L>}haHT@TNe-x_$SmKgPIdD5<>+{-+*!&_^3`$TaBTAs9HMeuHbXWOwR!;969 zSzaRPtA}@^!wVT+tai)tQsDK$yUB@Xv*E>Rt1K@BZv@^7hu30wvHaTd5+7gV)rXrM zUaR5R`sij)RB`(CA(4G3OY+;)t>{R3O8eM`&R(>SytNl@+fvX8-L}fp=`nuM9!JM* zBSpy8hctAS=e9=Zbi~nd+elX@Q_|HEiqN??u1Mpc8>(+YZ_fxd?w0=IUg;4g~>Lpo$z*2tB zpI6~6+N@sYE!_{yyG;M6-4%XkL+&eO?oYmL_?3iTzc!@qA^c%eMh}0L@VSxM{8-4Z z)1obNuWlG!gi&@4=Q#lUZwXPY;TPy z7g@XDmP^W1*701=y&7?tWa9ALSBrypUtN7|M?^TXucsSMDdF^%w5f*)r^JLa@YTYR z4F_F^M-Sw6BpO41KGCl{x*p1Zgr$o{1AMueofQrdt@`JM9HRet$MSh5bmEuSI6 zO#8uIs+TYuOqlPD9_EaN)sdmvyh+KYZ)RWiryRWxN7tLRc)qvwo!>U5p;Mi|N^Nj- z{yDl%(cGnMrpm|0Clj6RSFcu2J9#=hy3X_p97G-rTb&>}-RnYXqoecjUg=cG<7Ho` z6rIE^Yt%E2&Znd6OkP|u_bORg<7&ws(seUh)w7P)=c8-Ujub6gGQY-KJ5bFAprSeN zGV_Dqc1$7uB75Mu{!&YrJBypuuL-l$_)8#rZ~CmF`8D$@r9IX^2*>7a7n()9OVfv@ zZF~0{U6Zy~OIb;)H-O%H_UeBQJ=?y1eRMs^7hZ*tHe&i*@kZk6{jj=2=$7BuqMmo+ zdC=&(63+--BkQL>v4H!j{TtN_PJEL`*CoFCU5#pI5Kxu*NJPJ5_kfi$P9vP|$t|j% zaC%MI9Wi=1{!5abXFcq{BPqTiei7X^1_`6|gH|;_7@JHOM~@Ol-a?WR9v=DmQi@jS z-d6P*T6TOiZf~^0!z0?l`ST?0w1?i0;qje*dnoajxlY%=D+#mnp0(;t!rW%!f5KM? zQ#!@|-k(K;A@jp-7$L$)%V|Q;1>V33qA3y0UY1!0p4!xTmKP>xZmrbkgvgzZ! zJx2#m?exasq9W^~C9n6?cMlQQHr_$sK{$!q^?0;k)VS)dTY{_mOZfd=yB=M_O)O+g zkQP$^LU*juEgDsKx31f7dqq3CuTCS30MBlR2_xNvF>BN?cI&GBa?3<7<#x`XaP%%6 zRWGZ&TrY9;b%N+@J!*~mkE2sDs!rq?+ofm>f7z-&cJi-sFEpe_v_4&lM*W@iPmab_ zqiWFA(?wg2S~My*gw!XF#==oGBD&N-=!EQlnVG3B^)Z^EFt z?`sX;SBSRTzK75)OKel0p<8NnuNzg@Z{7o?$qjz{F4|I$qTBZ_!kBnqoBDz0$=PI2-m5k%y6vB1z92;1J1_>vRh-0^HwMCyu{$y7lpz+y^EX;OTG_|!Lz$hYp@7#_{a_D`!Lz$;SspJql+2cm6!Qur7SJZg;M!fbEH~B*QHRCh1%*iL zyl>}ysLE;dxy7_aaO;dut-z=3$Ij2m1WAfBhiKo25}ti0=Vo}RmKgPI=Wt31FSww= z3$Kyzr0(AW&$a(c;dUFiDdae}22~Lv^9I@tJ1zZQ`-n#Q*j^#6LYo{Do)Zf5%?L zKSX#{yoV&b?I!*!M~gojS;|uiFaGk|@tpzmCS|v&@1Qqg;(zBJ;y*D){Do)Zf7f2b zznAdJ>s!6>#(bcCXH}f|^FEj7_15>cz#m@OroKzKsqm#-8b;?wybm^nM&OWU^*uB) z(AW=+yW?o|eTQ&1bN1Qy_L1NMZPzxc9PsuBG?w{{dhnXZG)_FNRc!`Oeo*7BwaqH! z4bHOREYqZ9o^x>4(Ui?h#Ga<(0K zh_h}p!Dl^~7?=d!##xe8;O982ISAg&S!p5g;pi2C=gi=&VDJ$woNWhA;;hSI@Mg~X znFCHdlk>#~+f{KFXWN1Ef66=%_|2<1+YUU)S-W-Ma^h19PW?x->H;5lDQDY(Q#iYN z3;6YKakd>e=>yJ+0{K!N1ASc!aZ|#=gVzxF2cU_noz>OmMlue+{Xv;ES)+`M-&? z=EiN|?7DL`4rWp(!4KW1aW7{b_kf%Jq4B`Ut!fu|sfkY?XZuZj7k#5Q%vp&mz;_$H ze9k7{1b)@%E$6JTMJkzQ+g8y|ZXKR6bxo_VJ{{5Ytodq7t zS%160=TiOya-FlX$Nq`-``3z_Gf^XpL z$suqN{@w?^^AKHLlfK`kQn$6MmY?YOPvR`Fa&X3XHST-{{{|=gSmRRidnfp;vo)^7 zeb4Ht=C58NDI)_XB_MrN;S`$G9QR3jD3sAL1EU75K3W zwEl9=#_9%tt6k$B&IaBIE-28rp7dt?jkBOjG#>XW&U*&e+@tl^b9PxTc+F*6KgikM z34fSIOoCDYBTui0j)Q1 z!||)sxPQ{#eS`K8+>JjJfuAX%Jp|98eCxo=dT0;9`Lx&F;9tE?dkF3&f46}ro=1BK z9!Tfx;E%v-Xb-`iuQ#bo@Mqv!@U{~7DWA65M%4#C#GF;w za2#iCgWq~oUoSaiwMzS#HO%s`P(J?*sfpk-nl-HDY{Eux?=p?ce#F^);ETVeao~HL z?FYW(XpIv&doi#Rzxz<*y5EOX5PU(M#`R-3s}wwNrp9fYHMj@+H;RgC&^pc;V?*+fGMcdc%zGOc5BojZ`M{zy)(tqpgD;fVJe9qan zCjVEQu|`#a*Sx2%S5uxF!8=dXc-z8|+62D8LE|xbO=`^lQ9dVWTz5%Gm4FX;!SFd7 zyAAyIy&5-g7JD~%%vz1>C(xdQk2y}`F|_A>;3MW}ypi$J*e~d})@z(jearwKZTx$H zvk)hOml^$yl=pJ*;?J~w&QrWA2EOQAqqn|IP27e5{aWLR)Sr6rhPyN_<1E-VaHYww zIh#}_s(X3g;eVVZYnD3oY-&;s;O0sC zdL`}AHt-!L|0i;`d|IGG9g(T8Z{h6GD)32FHU=j>nbRi^#g z#CSX-p+imjoo>Gpe$AQ$@acckSmro4f+5~^ ze<%1aG9Dwn>lhCWfP2O<9s>{mA*6PI7hS-347}w`>g3lt)Mt$EH-oo7P5lJ_`!StA z8|iQB!38NA*U^84z{ePWsAW9d22ML#U*GmK$_M;?W50{?EBQL{xry-|`Z>=tb^#wW zTidTYmi8EY&5*{aoF$+3jSlsT?Hbp=$XVv#7F+*c!GFQcPwMn;J7lfu1i!b+=+WPn zj_FYU+o`V??WDedU$*&2f7J=T)VmvG4x9GA^qU=OsTofX(0{dopKWLSNqiFq@EP#% z0gOMv$+TxX!C8N2JOW*=2p!8^yV zR)gTvpJY4&UPpe8If(csF&+WSn$}6+O6*g?ZJeFm2tKcy@d$V#^>q{Y=g%`90q>wc z9GBFgzDIwb3C?fiEL3pqPR1kPKF&h#0l&`K>_KqPvv9z_znt+1xPi0Oa}Fjy8NZZ* zyBXgu2Y>QM#v|Yq?nef}r+mhE1l+%oKH-oKb*d?!WXiJ$eB;47|Hsq5)gIcRnoif_ zfi(CV!3%FSn6q>fk~`Fc<*Z=vUq5F2M*dCW zdg>7!s{SKwpU&Cis8<@w`$x?{JO!f z1~o4FHtqG;4mDux)4yz1)!;J|_4P?d;&0$f8Z}P4utn_xAN!)l>yN)(P5LhWvO(jT z>Tb0HJb9JIb?`I3*P+h8UgP?6IlKBu&X@naE}zZ~%n5+c{+j=KD77X(($coJNPa7g8||9HL2haI#kXnwD;g(S&Qld|Bm)%3wU!c z_Zug4r~?Ua8@Q73StYpl2HHQdKa2hnd{8;jbFZTP12=%@oY)YTfO{yMz%_SO-VLZ_Q{+X%o<=kI~z$XUv^*;E+;C92`bwQIV znb4trdpiDvetAFb1NewH@F#HpGxRy&6OX~4z~irNR*9!{sFE@G6S$50;~ensUcsNh z4Qce};Cry|0?Tu(0dQ#({sd0v{yZ^*{^?ITK5g7DB!dTktZ@qUc`SId>2G)BH>n!% zQ)lSwq0$yL0$wm#*WV!Hm5HZzsC%!}c!>MI72wysH}{zb=YC@VeE-Y(`ntb|)bMGv zM?cqi4*gNa>F70U+$iJ8%nmhXyV1ix2f+(o(YWvXt5o`#^e?7;naKQG7kIxD^z{_N z9|8|uW$gdmtSZl_M5tX5BA=rhQY_1@j)eLwP#MGfBlud9t78cSDEy8 zUxhzrcc>YL-^X~U3Vg2NC(dTR4?NlMSG>R+B>3%_T5lcW>71Mnb(WbwD*x$fwG!O( ziN4-N{Tl?|*++e+ytU#>l$^1_cTyX;R9h~zk#(UsPW>DY3<7t2Uz>mC7eFxXlz6XLG>T~8ZQo(Z=59WYx zWBic@UiYVvst12mMtujT%xYnbM17=v$P|10c}yPd>vrlpxbsEYT=2!r{|3Ryw2uwo zLE5(>a0%B3!DGf#-@!rdZZkA-FBE~3KcRktcQAf$01v%M{RAh`-URYH)H{s#Lg3mnsH5QN zY1B{fB(7%^bg0uRsh{9#%C`~x&JU=c;4QDWsPw`P_2p#BA1v!z2EflSzUu>zfK#W@ zpP@eh&Zqoq!S5YP`GeEAKiLev;xx)1+`R_7o$)pExq%~yAM*pt!D+-N5j=DT?HM@u4ay(fMt;mG z?oj)WrToETxL@oAHxZvyaQD%)HznM!(SD_YE4klW0ltp$bvn4DmoflLdC??lQUT+Mi9 z`K%6=k6xu*&nGn3pQaLeC~^`t+;|!|x!J6ISZAJhQ=e9l1+p6dUK^YZA8hUF`|ZUgn-|c2;&UcQ!j!hV65(x9==EHj~*Mdy2bD zbuM=1)ogr}IBG3#H_5OX=bdBcpVumO9DyLAx;E!wV_w@1u=j+>nO%3nd&hRlDIOL{dB?Jo$SF-gw4| zvd&I^-*0&70-`<a|Ho+lIja8J9MiH`W1tOw~t=YS}_gTkg1DZ=-7|9I0_&IP!d%aSNxv&3a4BjhL>uIQQ!L-EOl`sybB%PBZfCxUEB%p zB6zkgK5BTQ)y46D;Q1dsyARBI!;4iHZ9Jv^mBTA@;`x~21*6g?(DJ0-wZXf@;r-0; z%px~~i8Am6gej#LaR-n`S zUmYK-(-TK0qJB9#jp!sMHu>?9cHDiVort`_*5*w=I(3JwQCB)Ty>WCR^2X5_L}%kA4eBaK=czb4EWDj9 z`6CA!OWf_}$MF5}2{vpCSK`*KpK#qDm&o-CA}y}xx<4M_`V`Kpb`|QlZpR{C93r;{ z58S|Y|GaqO=k1RdwTs;fY}|eHBpsezjQ#FzwzekHzHQVf=@x5eBInz2SDEXaom_A2 z%q^H{!~IRc>^=iB2h@9YySfYeKI0!7C=dIw{k1sGoTxTD_+GnOCE=Jp_Gx&jmKgQD zuffuW*THLWcpD9Gv^KmK-rewQ8~%*pjn;+_!@CEb9Zx-Lc=6hB+r~A*vu)h34KFP! zZ33knZ06cJvx2-GXb!2hXh_~lJJ5$l-1g0iU~6?6(P`toSkW0YI?u(?(RDa1WOX{x zNnPC*q4Rtk9bJca*Xcp0^nb0sj*K5(h@%tXd$g0*_xjNpA6ToJNY{|@y?%7;$M#*~ zdsR`s*Uvh>5IpO9FTzW;#HjCm4HnQ4m4$u1DZw$|E<7_g+z8ButZIHYTY+I%7MZ@OpZ_(Hb-;=J@_r2}tByt9^ z=$?AE)1!M(2zPQdG>l74L4uJ*5*qFI?1^_hj4T@$I)@~ z#ns6{XZwq->S0IcjW{|B=9kZpKFgs*(sWsqdJ2uC4|ST}M8ke2nIDqaTBknBSq>#1 zux<%nnK{ehEqJNMKKg54^M`t#FRX<3G(79)gNC=KdL`5lync8a9p2l97q4E)Sq;13 zJ>&3xXLw_xBMG+gl(QN#SeN^(!+Xc@lH%}siDwnOU&9+`@^g#fCCA~(84KO;`ke57 zZ+K>@O$3{*7B0VBUbf?7<6KTz4x#b9qwxo$5$l`=;YptNQI?|f0=(`;Jip-cuHmH$ zi26wV;-~=MpKA!WZ8GQKz_&iM6@J`yM+ErTI#?jDqON&^IMl|vV zbv&%bpW~0cYt?ValT70W+t9He z>qC;+E2vkT5nEAJGq+^EIYU6~`qAiTZT4@`uyy5qG*abaj1PP8*RZ$2g1nrtPYj}w zzNPZMUVebap8QM7WJ%591($Jp4CgRMoL!TQ*7`?U z)Ej8!n{xROE&H)?l1Mjr<>DU=;pfRXG)iU7yOSq>HEFUs?svI4MDvk5C3_`7GzR+Zi-e5R(+b|1@moPT)sasa1%qU=4# zmcxv-ycFI)u}@2zd|^rM@o8ykN*#aBITJFDKUR)GKHeU};Iutw;ue{AR3x_lj;Ijz(D198e*gcq%xQ|5G+c$;v z{hK(^?5GD-yTty7jxP0vQ{#(f^ER>Mh5e|v#OGu9hP6L0(taP$K89~t`;xqZ+?>3b zR$smoJ&yLK^phQb@;Q;^^flLhLfBr~#OlS1s%z+A%I9Ab(I$4X=5x~)<^|!-F>T^M zsQ>n3+Y<4)Hrm8_m(kBGofk3o=s}~J_ej2phV83%n6}93xZmZ=q^rxBe+_@!*Ibab zr}FbaN8_JHBUZa8?U|H|%{JR#45G8^i;z0VNzX^bP~R3Q-?Y6|2R%wIQi-+S)Fm{%(;(u*wAS+ z`LHvNj^yc{_WjF1YZuR1#-e5SwfPjSJ?;A^T6&aZ_dQ{-!e?Fq7x+%EYVh|zk+m7J zCxrO3`_KAO4q=yn)T+Km*xe=_`{wLT*k%tDg5G>>r@w!heFs|NQ-gLxXS+HQ?S7-Z z|6XYqQOhe9*Idi|Nww7Y^0_s0WuLb2-}|q5RP8H)@R2abnl##UH4^s3>=tztVQ(>E ze{=7`_V>c7GMix~edn==u%h?xkoAqbJ`Sm)32TQ5D|xTN!Xt=(^#a+SjsN(p=xL4! zOYQ+=?#8BTyQJ%c7B!Br0)N%_y5HHWu=G}FRwtP?RLhgrsAHV6`QBdX_*WRsUCj1peX{3Y{Dkbe4CptI{|?dk+aXTm5t zx-IZGXu<~;&6D!S54<0PhlKa(lk%5mAg&)YN}hk%s!k@%G!yqTzDk(hY+1P95^Z^Q z<7`kxx~!hO zk2UGzR&^eFc5kf$rxPL?=TrN)h(UXt4=5;jH zQo;Ca+0fuU6OiAseo%ZSR^O6AJcnOxQ^kZ)Yw~g4=<)RT#awZIcyBGcH;9B;g6>A< z@n@jB(&%13y6*0qYoTTP5YdlrYs(2I^g8Pn2xpxMXTj*u*X(6c!eiqG9c*b*XnbkaG?1 z^vWOjNLh)`Mei-!Px#$ySoc8qJ*K=??q&Eni}I9zqDM8f7%0`DPhysAl+ zIr?ix*Z22j?7nw>M4RL8)s=zvu7Z%d1nmJ6_m@JfCp;qjJK` zxVTweMVP}T{_DR&n9_)jPY>_KCff3B$PGi@HS6ZtR~2C-4C(RJlV2eWg781pXh{1R zYcEFs?@p6z%c+Mr^sH=Fi{ab;V#D6V!Pg4!#n_Kl%1x`)60~ez@!VI^@{UzRRG5Nk})OebEkmObV{fFHH zOTtUwy~^r0R;wG(9B(vVA5}B5o9O)GL%vUnc61++Ocvv(0;Ofq5oZqzV#>mvL% zW*mCu6>aJ!NAHiL>g~PcV+=RJ{Fzv^#C6x)49%qiGG8f<5r$cqZv+EPSgqLcGQQvm#B!}8=z+~x2dc6j?3UaWP+mS@-EJOWSJI#J%&@WzLO@qhUR z$zSX|Q$J-ne&rhVC>m0h`*AG+4eMV%+59MSM6AXj8gu^F?rAg_js4=pK znfH@;SdIPTXynJx*oj76WjG$P{^o!<8e!iKuiZ`HUFo{tG^+K)qtp0yA{zE%*KtZ_ z_eJ^kr2TkD3ZC`tufa>T#HepuhT_|`@P6j-zHWG<`F1zF$KhGu{)XX==G#N?y5ZTi zH)9NMG~Z6$pFJ0xcz)CHf>CJ`XwxUYT?+3Bhj*ai#ap{;efvpx*0&Eby!;s98MpNA zW35lgz6@h;<6V3-Y*{9uF`93Sh}9T}#+;G{PovlP!@+SheBVaIYGk0%w^_%-Y8(t(G?)Nt*sHAyR?>pM0hiL>zjk5 zvAbi9dIx)Z|8oRs+|wMC)(PMIRL`BqTp$0LkFAf=R!G^&w+(AMVU@Ag^$&!#$&_pA z-iC#buAK3JKZX@u@lRJjnfJRpZ(XC_MSq*oKW=aJZ36gy4}MfS>CL^rMa;d~bY&3k zKwFFY0Nzd$?)Xu|4bR~%zo6T{pO*BvbA&l)m!veS57AEio30Bd$Jb_xFg&)~w*TY) z*iN+NpS^Ff@h>5ap00NFcfuHJ!ZHvRo*q}PU2U@#D9L}Nd$O^&1Cxqx2OFuO3T zAa}OBBU~KL>3z`QUZ}amCi9z`DHSE$nvFWoX zXBFo<+p4n`Jj|0Vz^6|O_vBySo#!v0aCrn7v2XY{cIWwv5)3caw&8&>qw!`_cXG2! zrpyjz73Sner13zwvDY+^KA-1>?q|$F9>=UvaM!#@p7ZQ#UdG1|{RlkdB)Kn3IdtH9E286+Hhn1!nuI3^WqBUpW>HDX;y|lUCIFh3LB<-X-u$-D>2Z(aSl*qOs9v z6vWYxwKTp6;#NoYyD5Kpt*;~V0@7>kDK4%L%DtfV!E$s`>ewfi_-r;lI1L^9apwkx zqkORJF!qCiXMIrCH>O%*)VD1M@xexT$2+_W3~w|a+yw6j@T?C`H@wk&FoAsoPmuJ@ z*X!Mj4KJ1t+IWiJO@ucdp7pyD!;3dJVEyce4o^CF$(QiRAe=dV={ontHH6*sM7ugs z;%v%fCK`Jx+pvp--w9fQ#?V1cp2l{gF)NOS<7eU?zMnOsvm=>($cT&R?8mjzI68iM z9F0yi`tMgv7MBFn;L$cNTOobm6zW>n5 z`@4Q*#TlUsYAt6!^Fzk*5+{4_C*L*?GKgQ-M~!Ma`l%*LPT?jLr?{*iV=FAj%UJTE+RX4&* zwZy1zdFRCMB)MkWydJ`z$ey5Oj?PU+$L4`6MR&bu>Ed}6@;9r|k47CDmpB?Lj7F^X zwtQLs{Du1HWnW_ujXpFkbu?}^8e`lDnBR;WM8xOI-ex24XFL2`3_mFb-^N|u8JonO zrgI$Lt%jEzgU5Nei&$^FkoRUvuB{G-zmxD+pflIesW&>Y-szf`T{)K(c~$OsCE;b( zW}|VLqj8(ji1kj_JhQ0J414^%NJb}#eOTu?I=360)EH?JotnjqBH}U*jS@7<9gRDT z#<&<7ORn>l-xSVWpz}n0Cj*T}G%C=jHom>mXr#r|@aSGTgr5U{4*SDi4u6H=-)Z=n zG5EGl1sBw-&imWd74SlacNaYS@yFN$J;#`Nud`F|fXvC^dmM7!;UU*l+vtz5f4KG$5vOF1E4a2+2;oW0+Uw0#Gep_BW zyfpH*3ZArYa(T7k#j0<@llaT{UThb@v*Y_l!;4qXlApcH<1K_|%Vdq=`JIUfn~yi9 zFpZ@h|CW=toip0hA~d9}+z;EeXxKK{a_zSsQ)m&ZQG-VRT&=O*Xf(yqFk=eaZ2RMi z6%v=+kQW!xk+FCvj*i>@yJPW2bQ-c7R5fYpGrro4j{T%~xu*BnNp^fy+W#T;M!p)J zZU0-~rCMUtw=H*R?^BOr&qs&XYIyPdQ`-1acuO2!o8iUtPifa1;MF+1cEj6~pGnlE zJs*I#)Zuj)UOYdO_B?Pjd-OWIdkrr+Do+I3e3AA$6W%h1x6bflwcnPPK>1a}t95wy z8D6Y5+wzj(b-}yV;r-O`QscyP9K3Dtu5)VX_7sKJ`j=iaoFyxsVE zNZpKvZKHmM#^~*C_};Wf%IEqPPh*$yhsWb+IPGr4y=gx>b@{En&VIzZJC2T@9_(x% zFo?$38=BM|q{oiAe;!98+>eAcwxcoTinVGb8q)qt_B|0t!%2@HkDU^aRc-1{N8`yj z8h%=4OLsJ7c2;&tp3D*0&tvF>-^-1f4;PBz@n$fOEed%mAa4VNKR@&N@}A?K`Nh*_ zOwV@0eca>4dN-0;EH7MM>@1pA$g7?5LhS6EVqVqFn_gTJ4m$8FKWv$jjTQFp8Z!!W za;K0iHxa$)=;t=^0(PI~$h)C?j%QBZd3hyS`F>2F+FO19sZV@;iKQ>jj}3dP?>`-i zuU{~&Ft22qJW17`r}tLh9?lCbUj7spOcO^QPf*et)!w_hK5Q?g^ClC6vkx(Wq|B%W4eMlm`rh_ zjWtwEDk@ZTq-^8Q1!ke5PDMpUMMFbFMWsSrHghWG)RkD+mlW;yJolV)Kj&U9ci8Xu zyN}1leSPlx^*Zl!-sj)v^EsdM@nz>_2hy-I^6*^KFfRu_KpNq9jD9;;ee(k01L!X= z$j!2ENe#|bKP`9*Cu$tz4M?kaoJamY)L&YZHKR}X9r~(2llS-z+$TtlNPWUkG(Uq0 z&#h08=HY$9V{_G?L!Th^!~2BC=c+%4K0)d)$<5+PYT2ONX#Re#Y0RNtkZA;V+sl@l zhP!>w@LbcFL%$%?kRt+Ppd8ME8F^x^Y0RNtkZDBf7oMDJ8gu9uWEzE8x)%-R!f~FO zYZ`Ot8)O>cH^E2dsy~OmLF&u(W_h`pMQr~b{5(C^G)_Hm{}V_fKQpgjaZuiQX0G}t zSo=)OGS*A|@c!-D|5y6H%p&%L2uye)bV|>mouZbkSbeU=2@e?Aejbil=jV>eVI1q0 z`wQ5cHGdK9XWaScnMF9keKUh)Wu*~zcmB`V2lvs8WFLCl-FXpvv#+MP*ATcGyngM5 zO!CO}{tf3{5V+S;DI?8w-duii%8s}_c%4qJyOMKm`yNBwlU&EWns-H`KkscdAAf-U z?LhZgOxp4!W8zQUA!*3-6gv$cY3%&lcJVT4B~``N8o~K~`1lyg51+C-Z`<6Ey+)V|hjIg6*mLatHrLvB zB!b@|lXjDL`SeJ{3pZaT1p&g z`_P!SG@jBLF*7B&ccwK0cSPK4YKijwj_7=7>5OQdNY_>m_TJY_64sOBX`;K}P|GVb!;MIqO*4uV&ziW3KUzFf-je5qSGi=}`gIp=zDVktxcexh9Ny0rgN9eHG5VAC*`#m(tz5FYCS0Qo z4QX?Tr7@;8BGsLPGt{$4Y2>?~v?bU0FTc$e92cpR4hCA3l4~Fm3z!DDgof7$BojujBIxOXGz( z#-~{4+xS0QY~*p1p7gm1-due)Jn82!ypQ9jiH}3OlRnJVPgyU`zL=k)T>LsdyQ7rt z!VR0(ms$NwGyc|`#=FSin|AwW%`cPAgnjIKQA$id4X;cyI+)#WTf z36^iSj3?=S#){`(qWHb$ysXWesyAHZ4eS);>hz(LhR$a#ojp->WSs1Bn+MO7+e=Y+ zOUkP^u3O{2i)2Xp&*yVi{{O1^wWbiPzkxZ1HDCs>>7o<&3*HTnjvOx!f%7stW^A@3 z0$=rdBei-v)4HyUPC}E?8PYm?qv)75M@Go_Gl`C;WA#ap~LH19xT zdgAH4R}r4M7q(CH4m76k$>jaq@XWoiH#INS&Y1pg;wQ)S8v3NK!rQOo_ZB?!vDkho*BpYYd=kz_Fq$;W$@(jBP`zE zH7{b^Gu*Men)Cvi+RwoES^hKWNk4b}kA9BB`#64@v0*4FXeJH`luMk>-#=!F zL!%XkYVy}edPl-D?eCpA#Gzit;V6qYF~>Me>--r%X9+>zu!)28GnIP%zxY`R@8kGs z;?NCGIx$y2?Xf12axr7gyK^YdX7V?=koVlfGwtu6n%5Vhfb6)>r#z2=m!#wVFL>r- zx7!vg?%kwUPkP5%@td53pMCHK;3ZkS_YT0b%jKK!Ou78~06dw8A<~n7kF)akf0{QU ze+c{7W3L>b%vcx4__XVmCUHDEW_+4LXHH`;LPjSMoyIf#0iASR-v5cB6FT;~_nK4D zk*-UBq|PCHe?N+joiE8V{&>-8D&HYaK*yYee-K3{WKLn}_|S=cr9+&Ej+_g~G^V5I zgyzfjrwpC?8?F*3Svns^(XsQz#qz*|YKyo-lDnwDY%MHZah9VOyp9xpElBfR{*q;R zzTCn*(lwtIHb4A&&oXVT**9&A1N>R;9|!rqk}NLJE@ih5`%2Ca0^CLNrZFG) zI!kZ|v3Giom9%}}FQKn5V3vg#XKNY#$<*vPM&dUSb z1uA3*Eb~0}F?YFZ1Kd*%$X&W@VWjHfR0Q}by28v}UzTzUD-f`fg#`t9*_rnH(k@UM z2lm0$SmyH;*b>f#N<&wksD1=0T}fd zy0pdc12y45=`YP)9J<`asWJROH*z5Uvixv`iw!@}jU0&Y&CbeQn4M=;qDu@v(2X33 zU&sTIp&PtkYWRV!WH!DUy8`#p!b0#9_-eh+j1Eg#Ce$W`_epjv&7H?k8!J5>ve2I2 zaeg{`x&hM&$Ge0k>{-64V1~Qq{Otcf-&Bg)wOPwdt_ceBs(z+V zku$je`XE`&egN~r6#bmCThfjO>Fjb!v?Wy{^vA9y0h8SGp*lkKF-$vIZY!r zhkVW)E}f?TIbAJwpuRioG~rjXr>87ujprQ8wlHLB?OZ!EJ*!{RNxDPC>@ho=B@g-D z5cTWkrfs^W*|kGYg`DP@x~44#EN3mEu&OX?+Yj5QYun89tTIwbT17N_KG@jC?gzKe zNjF$Lv+MGzTF&r;t!2lYbWP74WxkVr_Oi^pkR^pq%bc`L&mBcuotP|T8E}?$y6Lpe z)Hkt}=OYn9%ap=8(}`dZY1p2C7?T zMsTh$H4?gWah4(l6MOt;IXe?5A*NuMB0RE%aPg~4A>n-f{srj+%TE!6f zbDE#>_f|2lrc?Y)^DBzlL@D_0CZ$*LSew`d&itCfwW(K%De%GD6z*TrCcGE(Ox?>W zh7;%FKltYz3J=`4Rg{7M`>MhT|7;b5;O}eu_>##7%Z9{=R1@Q*grqmH*yv_(lBBJH_E$%D(30c2NmV{HntHmbHl?aDS!3Q>XDf(=R$j z#ulZQl*6-;;Qa+kujk=5(F=a~O=a)pUGXu$Bp#JePEmM{(%bzV-t7Utb5hy&tZWlI!Ix|Qn!e)~Q{d(y^?Pwin<%`ZQ(Tjv^ok#8 z6BXd|bbajR-H284_qWvV&Fm*R0&davb-lcM>dH=W>wi5?5A~_;&UR4>E8eh#XR*?6IjvpPfLFzMoMC=Xz~6pwI(nnv zoLrun1K# zCcqxr%WkmeZdD%D@)=_A5xq*!A^p6oJH_e8=<@tQn`j3A>RgXA1wWqn4uBtO;Lh_` zXkYXvjLP z+BOx>LVl0gN`2BeeM7Uz0blwV<&VFM{lUSX^(&l~)geZ~-}$=2KG~j{ShsMp!qd01 zei!^hU4Lrm@A|>pA5iHJ9_<&?;DW$v3!Yn|J;na2Q@mZKe)rsXt%w89`$*vy@}B_y zdZNNR-)a>};OX^w3YUJ^D)xdmenR2lGuy;Cc=J&T%Xg)v zT}yvP1ML0hb}f}6m#7qki=_yuqaxQz7bz|Vts zg5w|DCU$}QpQgQnM=ogZ4W3Em5?d$(02@1Q>f?*seE|0?ie@B}!nl)f1(^{2pz z-~q7IcfLw{2k!?Dd4BDS?tc)@94?+@sEz-NIozmDI+%msf~CIO&--kq3S+m-vHomhe6uaN{+^ADl4IF8tt(Ul4z=T=z5x{@};N zA6)!Io7fK?2RDIJ?rj(G?VaLva0__4vQ>D&AA)y+Gm_~K!BgNKa1QeaKlnf3Ua+Tt zIsm?P8Sw|p_o_{SKU+ZjC1xM?WIz4WXNf;}g7#Yqe)1*a5BB?Zh-UDGR}p{k=lR8a(|R@t@DW zw%8|kk{_@K+<$tzSOvc2L;6>61LJ8E`0#1s4^G(CE{4GGW1j%7{f%EtfhMnb7jQAS=D{|R3VwGz@dw8|O&-8+f-As-q#Mf|}Y#=ku9Ra2@ztbTHbNc%POg-$h|OyF+~_!k-v z)HaKL@T(f{V|<$eKc#WQnbhImuy1I#pgQ| z&Pe3B6!5fP;Xe610Qg1yd&?Q^BKd|+@jH#{?`1v;{;Ezt>35U|I7Z{i652obvKFP+ zy^6l~M(Y2K3RnMtxdwREK?+ZAXK!}!UvE&jWdZdWd{~jfmDkh1-Ng9wHHCN8(jSBW z_M#duYj5_8A#hcN!gb95JUz^}K2&&!@ih$qJX9OW$=DiNJaK;j4znlI$y^nZmzIQeKJvc|>O5!;HexXF! z_cLE`?jikm6pnd}J`kMJq;S)DEn*6MXuk4y@V<7DelO#pF5g0M9XR_B>i5`-I6nke zU!ic}E$zZ{ALGAXs5?pi3c)ArQu*yCKc(P;^$L%#WN#(#nR@=yLVs2X&O1u|9<#Pn z41r(1P2qjtZ5N6CtkGva(?WYsqCWe;zK7NCeUsZoDY#JUjlu7gzki^9_vE$-&;8U_ zzrxMb-+1tU9#eR#vO!dVFEQtvoF5E;-_Y~LA=>W=#-Zyx8{;G3DB4T7sF-xhE>zYl|l&S5SD{=6KIz<$pEJOkvP-*!&T7UZuzWXc>O;)$>HnRt;UE1=HTb@p z8IQozJ+ue#!T(}B0;fJee*^a2$9M$Zdk6LDVcI9>HwoZA{H+0hcn#wbSg!Z-ga6v8 z>QnDIEn*M&eBEE{Wd1k*x3rJ*)$b`s(f@-Vx>1#H+{#Wd1}-jEzxNEbiM`+p?^VC= z_xnZ0An)wBQvIHOn_tv}r#sc}Ui$O2y`AFG3e_G;A8r@5;QLo8TtodC053RF;Y#$J zS31SYZ3=sdZw+|&NeUMaU=QB&y22S#>=O@u@^cEOK1dnA+A032uP@Xcfj{8F*VONc z{5}l+s8-=UjNh@Z(VxDn@XnPjVgQ`ntZ?@P``&}Uv|Qz{iSadKyi;s@N8$b7-y!P3 z_it2qn*Mee{6T}lRS&d_*w;J75`8_O?_7KVm)EKCsaZrF0RQDEm0kkveGGh+SK$iI zzvBMJ`OAq4@1j5Ufmi%Q;l0QB#TfWxeSW`d|J5S?4f?D%t0j_$G z{tdjB`d115;_37k-~{FqE#QrxqrU);QQwBZCxUyyWk2W?6X35eqQ3y=q?3oYJH@GI z&|iSZ>A%v!?{j@|7~F6c9PpvPr@sKla{ky1el(H(0$f9R4}xEyJobX)=e7FUCOA-AAIDzX?gWz}f z(O-c3nZND>pYs;|1-R+$7BTPdo#KpV=`X;QKW-Ii;17RJe*u>3C`-ZHpCSI>9?G{4 zd^GlH5_A1;C%Ctg_=A&9W6lX4Lq7-Hw7*5{12^>&e`(M4sn~xo|NaB<2TwiSCQ`uN z_Y;3`74w@)@Tv!hKX{t@(gXhV6~rH0yS`P7gRgHO{$TF~og(3#PVveB@du~M`4adp z>O%v#o9kKi;6y(Ci7b-kLd+rB6rR`I{ z&$Al;;{2k5`YiqX59e#(?<#Yrf$L#~;8)kE0~OTQZg9s@3YV6*h+goCdc3b@{uMLH z_0un@-}{*_m4Z+HhQgDS-vIaz=PJB=Rht+FAAh#O_Wx1t5wPej^d3Ry|BHJBdIjB_ z?-7{ig5*Qk`WF0BdHKgYTT)-l^F6<46*u5hp#k^{!iM8=@xO`T$wRW32QTp~Sd z71-;#dShTlYc!gvb5&^EW@#LvHKcFhpQ_dDmmQ|jjfS+l9SyT4{!pzE7cKw}w9l|c zVAkpPp*4QNHgN}9vJJ@Y<}kFPKYtJ^X0+rrki=7V1hi_jmM4mqwXd7qJcG{=jG>qE zVMkE!P<;DD6un68U0$9x?R{M86}5|A^4h4|(I?R}AG^H|SnWu*_xR29-B!##1uwx6 z!~U9B%l1A6?=FiMt9ho)+En}5nNr&A-SBp5KR<2xX}Gez4_ki9b~H$OeO7v(nS-CE zz29T;J{ygf;kNgbAE~-%{51KA*#7j7($5Nbk^GFtlYZ`m7s=0vJp456efKPW8h`D- zCVsNL&)dQ|n^i9Jbh$)o?}jJacn-XNi}yLri`2#q&$R3N;hAT6KCgLmYS&bD(-tT3 zp^ja(<}V}tv+2J3Z;-e}4D2yriM6NBW_jNxC5qUG*KX}TO&D;2H1hjI@NE!ls`I`O3_S`qRY^vjEu zNBG5~mR5WeEwguu+*8MFDV|CCyf>k84S(JJJvKR|r-tsOB7K$f5EEM;X=f~M6}w4$ zSm)#Gq&=7Yd`#LhUE32YNN+n`7>$Cv2m}Jzj>U$?!nJ@;5BZ&I?%S0=a4@y`IG)nSblyh8ZW~g z8}rDYDx+`fGKw_bRjr<>5ySbpOzK}~BplTc`2HQOG3(f;`vB7n%$N{|R_e-j zF^QIG11V^k{xK{|PRO&TMhqjPC$Am!T*-6L=*8%=H}W?mbb-M~soUv{xCQ|8CC4=>t-*KgxKD0^FJUr$2Yd~);`S-|_P_EFDVb^3C7 zztnC2sqhjEG3>8t$Ib9k>$nbR@lMt}(-v*2Owu*``&C90-t@lE_@el^J&muWFV%(>VoH|+)IIH#)8w}B^YAZU%M`3 zz&qIDrEA_?>Ou@Wvp2~1H1Ffq1z7;5Y@5k{#*HoF5G((uqx(PA1%!=mw=CC_sRQU% z=yE+Hif;6};LfxA(DmiFhv;TR(T&z7WQdHvL+B=4(l6x~R3BKy%}(;g<#l|If#w^sY>Mb~^x z9hF8g+1H4*%U4%!E_bj0#Bh&C+I|hb*&8Mseu6w0;S(u7<`Fj&n>aLMuj>#;SU$;T z%|2EgHKO=nbQ967{Z@ZTHex1*}D4LODVmx(YU9a&bFv z;2nx(lo{6of)nWC?e04i6LzLJvZ-P0!lx_Dl9U>FHiPia0%2t)j(gT)DmhI1sYa$W& zVfzGlZT^fhiNKFgCW~wht4x+G$qzh5Bp+3hcM5r@e0~A{Td&=4d~lQ8ZOC1_EZ%}{ zJ?Okl+G!E_-udIr!|<;5QeV-skZ07EhjUJHpQV#hSzKLOn3)w=#kASC?xOOI?$siB z4j@1BT}1YKE(7gPcaG!4bT@Olm89eOhdOWA7^Us!6^5p2`jD9KGf&vqF3v?~zSh|k zMMtWX$k%@46xh|<`2l>@Mw~$N3fS>@Yi@xzH%nzF@PCQ1)0?IT>`Y;lELxV&`*ZAF zSASwnHjgr zD66>tY!emIp0bj^RZ~{xW6mk$4@rz$TMElJuG>(?rm^l^uNsZ`t-Om64fC$4&1fVT zk+8o;V|9(IQICc+yTH=;k=D@FBSb}(nS6z|JZR$Hj7Hiyt>Qu}FI%F-U00ugh|%bl zel)fPG`zYzYNBZ5TOvlI4~?=t+d?!hj-p}ev2?^}455*dz#231BK?r<=aMKIGQPY{ ze(A-V*pFJaJ?vX9yH#G=3w)YiR_~WJbLBDgeShf?>(MXP`Mezc*~U7pA5b(bY{Uyhkp^rqo1NcctKdr&lIS$<*Ovc-$-UEmz&=ixl--6rr# z)D{?l*EP#(=QLm+7zcF!?%JFf_+9>Yg|X2u!f_Xcer za6htrNPKTp_R9Up_6w}yac)xf%KgapA@S`|_R9Up_95}TS=lT1Bio0>_m+UYc0Z#1 zNg?sQHDIsZk8B?j-(3NF?S5qYkoevfu-EQ~*%uZpmpjw3f0H?5XB{H;Nh=D9yx&at zmU-`z>?^Tl2h|msMXsrHr_|OxsLKDa!UOE6OhpCV8*)sRkSQIU%&YDBG1m+xu+W6C>H46SVEOZBrxJ z76onZw{6oR*)9v(K495~k59_qlk-MrLkJ?wI*_>uA}Ynsna#`&$wq4G!K%&3~qpv$2FgmRWG&Gz!j%yaA) z{5|5@Q?o+tRbE1tpg2R=%Xwdk`mvY=%Pv|Og3bv+MImTe2wEP3D2NcO1K{q9B@^Uy z9TzganRzQRS6Zd^n8{C|dkM{t;S{ed$j@`DxbwK-1iF~W9J_=6y|E8;F_G=<4u06! z2fCQZ_QjztIZtSg>Lnv{!m{B!sX3~rjLfkIlBcx2>M0}JFRbFZs+{fe3}DSnRuTW2U5A7W$wSo_p^^)&oja@4gF3kKfDA( z4Et+%^8M_dU$ZXU;&o`Ax%OgHB~M<@lJ8m1f%iJR82!HcPR)ySy=zPHMe>qcaDDv{ z`D}pyH~8k7TbJf1+6n6K@a5&UAb$-0F#I)m$>C8812&3Zmd;|8sfZW6ZsnmSX>wW@S@f46uyYF>tAZ@wCy zyhd6J?;jTLCe5>^h=%5DDGDvKRQw%)KVk8EG(RWEa=*Y2iJ2GvH2ilh{>_@7=hA}T zwk!)x-v>Ya2G+h={981?FvxPhzz<2k41O*Ae_8xnHQ$}FTKwgq>C5Mu2jEXy{9T&w z&SpdSA?eq{pN9XQ#lKDSSGly{w=G#*a0i+AHN(%ik>@-u{_UDy8f3X&&RW};rXh@3> z&`7M>8u)&<)@X96!EeCb0R7_eRmki=dGx{WxQL(2qm$`MxL`?ijivIEJR8k$58O z6e*7ZJ%;w9VLrR{z$ObjBWw(fyP4;p;h8b?es~Fn81~n+3ps}7!E;`4c@JpbfyU5! zcmm$&Iu-i|H7_PCEeTC}a_k&{cMv=?b`EG>q<+-!o-#d|{Y+g7*cB_l)K>&cc)Z#~8eEcwdBP`j=-lFVff|%SH0W z;Yryq!K>C|(x~Q*${)f$dN^4j51X+-?h!QqYW8$M!}P&_K;uATk`yr-J~^H&Y!7IR z>VEu>Q8a>M5+X*U42`6-J3=)66h$LACRrNQXcS(uBd8(A*Rd!Xx;%nD)Wc8DZ5IiY zg*m5tE(+fai*|W7qcO}Fe!C1;YSh}CxCeDIy%J8r7qqVPq0J^3= zB%;yOn@!!<^ z_=x=FA^bl0qwtqo{I@iJenh_85KSJ2(1^c>y_hVGx3xw>6b(*G&nw^Pw&yW)iqR>y zboOhV#E3fTQls%>9DWo0l@|Z+nx7PbZ+LmrSBqhI=UBXdXkKy@-V}Q($)C@)c<*Rl zN(7$nf3oE~+O+*id`{?NZyYpCdz(PxKz)!DF&Z)Kl~Z{M`&*%rpxf-bQ8a>m5F$n+ z4vqOWp&I{;q7m$aER94ohC14Ue#k!PUr{vZgIG32Enwx89Ggs@Q_-n8eY-f1{B+lC z50vqH=*+e*P3h?6SDCCOJ9ERua@A?o1#%r0|M5vbe`oMIuN?2>_%HvOG`*ymQ*(_d zC(Tq{hSPIRa|LTH&$u~6U(U5`{d)A%yW7QD^mDZS!HegZCz%2Lxd47xe#xmhRu~xL zt1ejQH1{htM6*ZWWu* ztUBDwkDg9Zd1d+P zP32sStKPh^obob0PolN=igvLDEwk3|3(>XYiu9n)+N_Gz>(4JQ)8Prs{pEN0%(N_b z`7g$*XEE#(Rm1bAB@%6;Ut`iD-`fyF*-pW@3YCFW-owDc9>QS&|!A z2`>N2MSF6+oymjzdj(o2p1eTconlWMZMP^lFPjzUi{uM$Z2K#*PclYQ%z7z?Ib5*J zSFmVF_L71k_eSYe5qRdUFNVjGKawmc%(mWY*%*OmR-%XUvhoV7tX&;}XWrNn%9D43 z-5g#MfoGN{hVoVv}wo*KqomcMY>qD3LgSDfo2@J_IvK`=fSX8Lj>BYNq!)P>{hh{QLQ%i{YA3YKK%uap&9Hm9Zh6#TSA(l8YbE0d4hd>-b>^-6w_+Zu^$ zDjQZ=iEk^2J8CZ9DDq+!FEo=F3QSs=N8rL)HzlccIG*$MEaJ)EDif>P9cws zaKOwf>fx6?y-n$fFO_QTTbSa=EYON5W{yP5R-pJcy9c!Q)T{Z5MFw{*9#sDP4V?RnKj z7p>bMPubaTY}56^_$Ko&#{>DyrTll8{-KYw_I$rl{F=1JNb3+ZPKc5g&(Q@_GyaaD z(fAYIQG>=l?eB?EG)km|K8G~te&c8iG;R|;Xp9W1xSxcE`Q+#?vJk5%?_|@$1?Cw+R0&70R1$VU?KkUq&qrJLmK2SaF$qtWqCKdZJ1E0=>z7>e_%TEBP_yoc<~0vwbY@3ra7I`eN*Q^)X{7 z(@p=9vTNS5E$DNPK30FO@|o6w12cIX&3XDo8K|wYwY4L3Drxs>{3p1`=Ol6lwB`AOFf@u*FzdcFZuFNy;{qz z*($%-pD4Rk#7pXRTXu!Vx#idQQ)QRBL6yshWj9{qmP_)_m0i_eRD35byCGs}{2Ts- zvP(Wj#drSWZn+Fu<(F}Vva8&y`#;MLcZ2n+yGhvc?(=4fRC>~XI&AL91S$2|Z^b-E0>|)ldd`w$*Nj!6A?8cr~cD0pnTXqx70Ze{-_bI!H&D#R`jeEk)Z=B^{&D+YZ^qac>v+QzCaqDx+JIXGW zn9K4jv+SBEQ2{hwAOI>{7qwwsU7n z*^MyvNWGXR-TVTB^=0gRWtX!_l}qw0b_3JOE_J=K^UY#6=IjiNc{`6&^RU`5J2_4d z$a%@Z%1-(s$Ng^0uBp~-=Q|H^?PNYiEW5r+x4n&jTG_=gHcGom%WiDMtyjC|h3d_J z$}N{FE56;IS9VFHA@#hLUB(aGbYs7$>=Njoe}-K$^8>vVIY_nXN{gHRC)bzaFDY)n z_PNKh%lTGAFy_vem0iY@s&5~)?B+GQZMyEO%Fd)aW!cGNvh1aQrtAlQ@A{H)hEAix z&0AxJI@ZM8N9Ha4>sN_DaQQyOIBn`=;zDKD&pH`%tTEU1MRMme-!|MT+NiPHd8V?9 zt=Sexqw*NnZWndZ*zGw>*`@1vjE%T)Lq3ow}7fq{H^YIDlq|vL) zS9bFP=MYlCapDTqG5KA_yvjpC=;NwRmObOfV_eVg zWxBn~Rk|sRTc!-sSEysD`rJU;_32}E$qhlf+G1rluhPx$gg#crJl5!SuT*wE_FXZ@ zruDIjmt4E%bCg{*Thf=B-&_$mHuNJa-E$Q;N1rc9yD~lJ-?LSf zOTASt<9;>IseRThm-@}FUd;EE-hiGz@3Oc<UoM=^Bwot?(M3aeWPxhnbLNXR{JPhqqyl-`yJKCd>h?5nO^4lXY$dlj}4#hraP}( z*~MA)phh3d)8}t8mZfWz-9E-Qqc^IL$vm558QkxYxax8@mc9B|A9D+1*Il9P`k05C zV{z-$FO>_)f_BJG?%x%ntgw&qCw zP`xC}ZWVJ|!U9=$Hw)sNvnO7bt}8tUnn~{HcskevPfi`jvsT&C6&34 z(W|~eans&#%V1m|lUy@~4&UVZEX%pV(vx;lPo^7lhHCqhs(((9^}s1ree8(7mL`w& zymW1#Z57h*8DA!DRcQ=c`OVwqrfcka^s${5H|92Fw@bHadF{r`4<@vpTua<@yR!4> z@lx8EW5v3E&awK_#7o__P;rOi7F%s=Ods=E^&tIDWj9}6gOd5}*T;sK!<&4>-=%#a zJz1tx);QfX=GMQlK4rJ>YPTME?@`D0Sp8qOKGt`t8{fElm0ipk?y&)VY}ds~PnLoA zK4m9kDeFtl^KN~S$BfUr`jy={KAU6a+Lvt?{{_|O^grj?#Xq39rOd+&w_YFHSM8n$ zbU&!PK-JSt;te^RiEUSH%f8ETLO+B6eu(B)WdWp1~_kx>`abhlyjal5%7u<4A zdQ@>uK4g6!c}yKkqwULbDYf(p|LUIm&3jzg)zh|Q8r7Da)RV^=!j2iAhkmcqt)uHkuQ=cUZeu}OW5B!d0R;Gf-eWf=@xK1(~p&H0P6 ztA5oVh)14P1}%Iyb`38nyX0}Ju6;qx(PJKSV;S;xwo{GRZMCHq_FTZev@{#nq zIyTH))a18CADgiHMCWhHZm)G-QKgT?axKzuoi~(SwZ8T*`>Ps#tcJWByZ!oDiZ#dV z->0}kR+~RxR*YiUmrC+>+4pDkv3lz~pkY$kCEDfpJymy8thP09BkxeOI9Rv(hd5 zw>nm5oi|qhpE@?*>Ld2*V|m|n&((ZW%1)+Z%Bu7~>R1N#^x%L8j+1cM^=gb~j55dS zKcSA*Th|lkeM%jhI8V)YhxWMbZN467WdGvRcFn{{_Qm@xJ1^Hh4?akG#Cdyy(yOtq zf!6C|x8pdVQ?oMXPP;WA$8HGG&^Vq`0G;pBw-79;c2uj6JfSoOsDCt1&&NmVJ)@ zcx6|q>uKPgT(Ua0Tb~Qbalcs~ljSDU4fOXBj>Vm(=5=FS&yjZHzq(rVeM{@<^BH+8 z;oIt1obK1;u>pOoTF;;5vH9Ooc9VL3;Nzacpgy*WxXLu7e<>--uJSMLu_k@Y_*^N| zJwe&o$6EBUMm-;rcFu`2?FJ$on}3qBYxtpiuCY@etEIlkvafvEE&E}vL7EutJlRb{ z+BI8t(m!M8J1x|1z_Qz;+p3J)&hNQ)k}p38t3OU)?ekvV$Hx73vt~M#`|Sz(_wYY! z*Q{ZY!Nv`1_`zsQuH(Kx8n;>+Cup{w}?4K-waxqJr6XvCp0?-kzBhDM;S^4lp|Bhnh`it5#yF0}ZG@N?kb4qx7*f$|c7^-&09@1dY4Ukn1y~#&@+wr1jHi z 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%0AYN5mJ60*DH#1 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%0DHj9$I%0e!4a?)oB%t)X>b@!lY2H# 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

    9@Iu+X`hdrPFWb%WTUVn$orC^fwr|g! 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 literal 0 HcmV?d00001 diff --git a/Debug/tif_aux.obj b/Debug/tif_aux.obj new file mode 100755 index 0000000000000000000000000000000000000000..f66dc92c38e09f195390e3a646b321339c86c980 GIT binary patch literal 17492 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

  • y%a^B)oApMkj60LZx4Trax zCmL{atEwk2RZkopeoj64oOp~=1;Fae&GK58~P7?^#1$ruO@$sL*{Y2%nCl= zPNe4%gRsPL?@!lmv{v)VPgasktI3naSq2G@NNS@8a=Onkw0^;p2Y#XkitS*l zPa%GLr6PRxpoH+}ZgfJr`5MFr1;>j>$AP4v-%w#7vx6D6 zX9hF&eBv``O&CLt36mQoE;q`fkC6#$qg=Pf*#t@N>}@~B$W!Vmw9@@gN%ucBbM#cx z(J(yjnPb(Yw|bAn^4v}=+^Nhz&tkt|pUlO6cJJ+;*FG=(E$;F+h78jy{sKMI7luey z+M-E@TD$NX2GlH7Tg9E|dr`E^wIP4%M;mg~Wy3Wt8)gc{@c78+^+N~n$G0?K9Ju{> zd+~lp12U0RfY?y7RZnJ3)w5^CqXpFbK{YrFog`1zT|^;5A>LpzkD_%7Vy>aJR^Zp1 zwt|?eOhG*|UN@t*qiVR(S_M7bi`s5(O{7~hII7p&dnHw~U`e#NUfxXtwiVS_zMig5 z-?s9xtvCu{DvmuLd|8NYg#3;8*(|o8IQQ@(KS-26pWJKz3hedHA}-p2zXb0;zJ+43 zX|Z4C*}rJ4{n!jsoLB!Sewx@>8hd%2PrL;>P52>h?FYN$sHt(EgS~ji{c~H&)YQly z@V?W_{bOF#-k8NAmOtU$ng03j;BbIlc;&IZbLrT!6Kcx7n9|-}cFy;(!K+DxL}SCn z=#c~dkeKlU1qln-?j5r5CWkE&f_h9A^DYQ}E6n2GgmC6sHu43^=B%!5@+eW8)wiQd z9y(l*t>)py1?laPM;jNUyGtI0T#zl@@}T5`boI((R1LCy$2NJ$azXm~5>OD z7i4?4JifUg+j?a=gp0a$~usq9Xoc2 z(mY6?JaD^lwu>_z94edzt@)zn`RX$t(Gp_dYqaYNQ-@3-A)Wh*4hAU~=y*8VnJ-O# zbdH-ij1Uq>bQVkqJ*GD6Yt}6D!@V!)YfX(j=rZE-)r5n!5HEen&$}+y%e^m%(bUL1 z&7Y$0Il3Brlf8eu<&mgsiq#EUpUsf8seznxCV$9o<`)hd7LKKj;&{0{X@jITTt8ul zVzD~21Ygg*z_e-V)P&4!$E`=sf>vF0pduHY;&VTJ>h0*f-=f1=u-BpTVGDqd&^*fI zt;XT4Pygh>x1;>9MToQL3B^j;X4<6e@&sz$^n~-QS-a(@?Fk)tk~oehP}j9tP`c~o z_5}X;91#+&9eV6B|`mkoPhL-uesj(KH z=3=^^paLO(E>eG&13zX#b8uvQygWJ&i9SAFnVu?)nFEUy^)`vZ!O=rE;bF2cGTz_U k--92n_8~62U$s$0>_QQ*g-0>BSU-2MqSWNBt|k-z3x2|&EdT%j literal 0 HcmV?d00001 diff --git a/Debug/tif_close.obj b/Debug/tif_close.obj new file mode 100755 index 0000000000000000000000000000000000000000..69f622b5f61d4a9d3d38126e5ad563006ae26802 GIT binary patch literal 11058 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 SqR|rW(k@Lrw6VK$L;4>9)ehtU literal 0 HcmV?d00001 diff --git a/Debug/tif_codec.obj b/Debug/tif_codec.obj new file mode 100755 index 0000000000000000000000000000000000000000..7c95900abd1947ad2bd958cfe9413439d447ff84 GIT binary patch literal 15198 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 literal 0 HcmV?d00001 diff --git a/Debug/tif_compress.obj b/Debug/tif_compress.obj new file mode 100755 index 0000000000000000000000000000000000000000..e030581c4965da0e87bc0d8811315977ba4f5298 GIT binary patch literal 24575 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 aVx^+$sTIfNV=K?7wu{=MPs~;-;@<$2z8iA@ literal 0 HcmV?d00001 diff --git a/Debug/tif_dir.obj b/Debug/tif_dir.obj new file mode 100755 index 0000000000000000000000000000000000000000..815914326fde7952af4d3d0f3233fb8c1b65d170 GIT binary patch literal 58920 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 ?nVFnq}_` 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 L%h*D!ZXx~!G;}@o literal 0 HcmV?d00001 diff --git a/Debug/tif_dirinfo.obj b/Debug/tif_dirinfo.obj new file mode 100755 index 0000000000000000000000000000000000000000..04762f4e29d00e88bb03413049cea1ddacbc2737 GIT binary patch literal 33178 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 literal 0 HcmV?d00001 diff --git a/Debug/tif_dirread.obj b/Debug/tif_dirread.obj new file mode 100755 index 0000000000000000000000000000000000000000..798c37c9ad5fcb47b6b6ebdab5d08052143239cf GIT binary patch literal 55110 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≫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 Vt~-CN^Q$lMK%pO7l`e4}x&f$q#|{7h literal 0 HcmV?d00001 diff --git a/Debug/tif_dirwrite.obj b/Debug/tif_dirwrite.obj new file mode 100755 index 0000000000000000000000000000000000000000..797a565420a9afc63dffe114d93e8d495f7a1554 GIT binary patch literal 42157 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

    c1$Hh%bJRLux+MFo(9Z!o zTSC8Nh5pzI{RJ@I7s*ivt``XA^MUc^h*$Z6>CjbH=oP>giM$QK zN(E~HRxH?6z)A#b2Ua9lCotX!$x&N@T`1V~z?KMhBe07FyBXL;f_)0uLcwkWHczn6 z0Glt^UBE67>>q$l5^N$M@6}+AC?!=O@yCn(c~unj2@02-)ER0A;3V~Fz%$kTfIjsU z;7s)&fM+YZo!RO=z;l!fb$PDhsOvn%o_&s*3piI@3^-45I8dyX1D2=_fTeOvcagdq z_(ke|z{TntfJ@YO0GF!g054Jh0T@t+0V~uW04tRf)?cN@16Hf^07I%CaJjk~aD}=C zFsgb10k^6*0Jo`k0IyX?0Iye5&|W^NrUTxfW&z%$$^dt$AYiZB2zZNX z1H4sT1GrP&2Y8!$5-_En2KGY6HAi{Rr@%)PDfpulfNW zQ11eMS-lVV6*UFz=c{Tu;BGYw@NxACz;CJm;I~vY;1g;+;CEF6;FGEa@F{gY;M3|R z!0)SD0H0C!0Y0l90DM7x4e%$5H*bHcegya*>Se$e)!TqCsY8Ijz~mYC|C9sp*J=vj zYic^+o9aBk->9nr52`JIht#!zzg0bezf*St{+Ie5;Ct$M!1vX!0gtKI0Y6ZO0RLMZ z1^kmb0r;Vsg*Nw*ssa47Y5+W;S^)p5?gBii9s*QZUjuYx@ou*>>m5K>RzF}))(3#O zSy{0AysSdNQCV{U$7GcP7G_-nI4-LiaD3KsKyQ|umi6(D6K^SD0YUFp`r0s^S0e?= zt&R3%*C`mf+mkAQlkFWz5#F2@eSr@LLwp@AzOF3|jm?ILmbUJ$O_Bo~hw^P`Zt3W> zMbRP*R_ui)=QX!Cb~KTH1lGkWzYxV_J-m?4#!scsutKuNapgizn_5d3Q`NY_o!~6P zuNptz@=8AiD%Xk)>X6q_Xk_v@H#9VjRn}|ntZ-@ZMMVpTl1hh?aF}gS#Nq`*NjRf6 zn5%dwsbnbWq9LS`q2f!1iZ2-|s{|+M24$jT@eooe_B?Y6VVJ5Ah3CXk#c_B)in-}b z&~n>bxEtO@okJ}@t%h`j${*qpTjHH(42_E_hW_#C-yMM;{CYso`dK( z4Kp636Clk%lsu3cJ7AR*`+_0I(Sn1!IfXCcbre#`(HUXpj(~)Gs9Z$jg5em@4ui%8 zG#58tJRrOd0yW6mFhS*-6|Zgr3q39#=5arm%BWIH>lR+el`FXjV~3QlW*L}UT?vds zn|#$|U~a{0;vD4UE8LkC%njFzRa~LnXkc#D2aH{0zT)BlF}LEtj2&n`9H_?J>Knk= z(dNTRYRnBMs5{ks^+N-5)6q#6jx|05bF0I^*qP_6BL?P%d(xeGKHQSV+-fvBEq3+! za5Nfos~NzGgf`p2+^Pf^yYPIq*udPX3K+Zpe6_;B+-e;#cI)}-3IlVi&A`~{=c{WB z%&m3+W2c|5ZZR;ox(U^w%b6V{G55!=Ocr95C`V6qN|ZhtC&%%?dlOhukDS8U8ky&q-Wcta|9Vm2pSmlAYO z-4!{ua##EWCLx8GpV;OUg##0JVV#CaWX`=)h+*Xe@woJ%c?wh286r6U&&4|4wdgtf zZ$}yI3LdqXt;vT6^Aj#X-C2#&>-i`WLAI7)QYpDiMLe=Rg}Go}s&5TA&UW32GLa=M zPI^;!#XwAXZhQG)U+~ER-zg)4L(22XzVf{OH_%!z6YY761=0Iq){UREwCefDC>*R+ z>Um;e=HdbiCw^pTp`oshKtn?)ipgW~6k`64AZre27S3hJ#=vB7_CAwmFLOCNgtHCN+<`OfyRD4kGu|UartF{9~^H?l2CxloM%uGIk zk=MYAU9u!HSlBLE(fb>OwL(~b0>IK_q|)cIDrf0~l9bXvI80%sun=nrJ+0Dz1Fdr) zyet0tFw%AfU;i7WeHPOCZw0U{iB0Z0v#6~m_sS`n+$%%t5iR5uXk#>e;GbYU_^_*b@mO*nNj4tW7@J0iryCVC+Fvz+*yJYo_ zWo$K8Guqb?t^Yv)tNaXCF?UyR?+C_fv1*?^5VmsP^Wk6UgJIxN(KpDwb#N1fbGN2EA!DN!G3_s z)fiV*G?oXG)N3U3foU3Nk{V+-sj)|a=~a*yE!syGEdalv`7X0C&LB~c$N|4*p+kRe z(av<4v|jM&V>}E@$9NQ&j`29K2I2b-uqy>y2dJkjS+e@$l7UyYthD5)I)vq69?qf8rvM8u zbLLQ!gS#=931gJ44gikDtP-<5#g(`5m@9IHV-nyQ>N9|o)#m`Gss{k4sc!;KS1$ni z)K39ts6&7=W!2$qH3juPOHBnlN0kDer!EGZtEvF!sWpJ}RVUzuDhaqi-3GW&JqcK( z{vEJb?E@@TzXDvOvSAY!DG%ThH5PEGnhtoWS^)S7wH$Dn3Imp@4S;@iCt$g{2QZ-S z1q`ak04vpR0ISsR07Gg3aE1C1FrxBcBQ=VL-fLxLBC0M1zEZUU)+r9)>s2RUTjDy|>i zq%Hy6A!{2wDhB*!)dtwBwgBFyx&c!d(7WwZQdz;^RF|Q5atYrNfYh%#{}}D&-u@KDFdK=j`S*lJ6`Z za}LILbDrqj)`%Mp=}DqvTcdp@hYtZs3&Vfp;%svUjKZ-^CUSO84y)P13{FmMXOPsj zmD4>t=XD^n&EcU;&NFGMj+rNowphcaIQr=R(38j?@SWXm%+IqmiXcQg&j=W>wQ z7V%If=j&{^j>aJ}uK^2Nq`}D*f)O}5d1YHPI5{uh0^HF!B=rYDX6wYm)c0n}G$-)% z(s}|l>%`pZ4ZzEV_LhOU)lp#Vk@B(fs4=%pskI(lq1Jlr zG_ZViyG3LFp!v9GqxpE4Mbi#iv>aHWrnwEwtrl3c5{tIZqFrIpZn0=PEgEvUhSXs=r|2kcMtI7`~SrJh$z!uYrXdx;8gmEq^Y zkIpsyjO2cqKQ7Ce?$>n3TsQL~jNw_*@_fLknQlwOWRa%#$R??id-hBL$*7ZE!6UM1 zF6FzjrZ4_V@Ag;R*qaZ&^3p+T9~CTm#?5(udeU(qco350Bo&TY;4sfYoSax1e`PyL z`Jin2#}BvkdHn;w;Rd*#?G?&A4<}I4vk;ukdL0J=kd>t`CNcCsWX-x#!Pik!z56%W zwrVdziskruWlTxW;Kd$?IacSGEg-aK0QIQzCSba59I|BXl)b=g*M3xwqgKXto=>k zEyM3T{Qh^f&(&6TB}qui=}I;vySr!*?1xCoYULaIFZQ!p+qe?T{)Az<`Vz44voD-M z{;f1G_Msh6#fdw^rgLT?YJ(zXtom`@BcL%+-JGiqva9v8(%2@%xv?@7a#S7Wbzj52oU~`@H*7@kjb% z`&Sk~%PTJhgz7w{W`HPDpZEwCj3rqUtESK2Mxl- z8u9NbOj8xxdPb}OLqa$hStu%e;059MM$$rcLB_`EN0ai;F z@Z=tv(Qw^z%Ykxq{c!SfxUsBo@gQJBctRYHZ@gV+|YHnpug}U@OBf4?hon>F0mdkK+bLP9d|wyFJ-Srbb83N@l~% zlFho~#+ws6bEcbSvFJ)CW>k8aRQg_Crb}142Z!)nTc@EaMp|i`F))P-bt_$_SMA-G zUO7zHRGF=&<|74NQ+2>D#m_6XpzG}0c-N(yg#{4~x0V1ph0ldW3bv`WfH|@_l{=(; zbs&s|as__(rt2oX=Uk2tG5I??8?Iy3l!1#sKBreTrjO$sg=J-%_xSM2?CY{6cB-=V zVw_tj<6K}tjCjkj(c?|UCt=C6cl#vAm`~pV2}Ud1DH}u|$_5b*p-<(BM902^g^1DT z&m(*HRD)dZFm{i;*wDzwQEP8sG;g3J6`9K2q_O(Qp{7ba)SrZ`bnJT@V=^x`vhs20 z(c8CNx3mGYzp3aiy)c3Fa<+I!d#%2N%<5Ww3z)9UeZb7Rq)9qt|IjI2o=eI-Tg5=n zk)^s^nYiW2A)ryx7TxNL2+fz_vPU}A(b5SPs#icCJEUFqgUY&R=zZzBAJi`Y2bKRf z_ke7O%!xF_cD_x;n~bll;WtZ1n+mc2g{fq9W6b15HKxX*s-@ALW~E(*gmtBH&a5l# zr@%(8v`Y|X&UeV4Co8I>hBQNNowEQo;P<6;Riv9CCprIjHNn-NbT3Gibxja6YGREz z#NB%)f@JlAr)sq5(Ox>Z@1S*B7FRrMU0~#dj8b{(cWHdmnBLz*Ec!*(nzyGfe)K@_ zNES%129LgS7XDYiIr!iEvywHv+dbLcOF->ClJ~~cS$gPddDy&Ev=C?R@o=VVk-f$( zmVq&d`0Bw|FQ;^L1Sby!4-ZMi-@RZ^qP`wnOu>S7*BJ~bpm>PD#_7Jdoqh4c124W7 zJc5wdvl;T{^W??s`@~CcalgiO8?<@}GrQwF{2c3X^=BdBlx*>2x)9!J09m5rXfAF> zh*Mc(>nh41xg0;Q+5z|;emUX{-W3|>aeojRJ7hL~FHV1%d>;U#>>N29aY(T9p#4F? zE(G>IFt17g(`}#~n4TB*0Hbw#Wj97!a<(+)9C2Z};==N99*~2FO@MA09p__JnF9un z-N(rK(m2^48ZT#Zy|QXFL5_EvA^Dgj>qC=qUW{iueSlNdCjifq98FVoz^AKLK%eRc zoT07-q*LK@kiDT_sU4A-v%6+q?Bk~`u*jTj?P&MmKAb)S#^YM}0wX@cectSib9@b5 zzVo`L|CHMCjHcn!GA@MEk~ z_oja*hstGCToQnL46aauMC99j<3U{j}6gWSbcbyB{mXDaj}3nIOCj` z#qDfrZfB3rHRdwB8!NKrh>Ei>?LdgR)p0;g;|N&OWW{UPQP!!P3cBdOuX{g<4Cxv& zm$T;KUH8e^auzB_ma}rD0gMs{?jF+9+TFX&Hqt$9Wm`u>(lU%PB*7n_|Br@YRu6U7 z)kExm+S8uaFo^y`dy{%#+J|`1fJQEI`j8wPAIoffml-h_`sH-v^IB7kijHm!`2X)p zSf=jQScWR<5+)`k+;ik9;`ht(}&_n!|RPYu#@^wq^_FHh|Yoe1>Lp9erII&&a8o7VaSVdI7Z|ghU2ykM&v7TDF@@K zNqyBWEG}V&SguCqAxqp_51?>mzv`DoqoFaoo2fC4WI7$Om~`@?mZ)>J7uuG zyHoLdTKZhe2Y!KtHt54Ecf+rVVJ@EC{|xH0pZgD~;3Iv(&!^Lg?3Muy#O=m_W;-ek zMT~OYr^^+k9Qi!bS&4MwpN9^Uj5&l}+_jY>4_amS^Tc6)4bx#c-jPmcQ2pV!SZ4hp z19xE5G4RV&@Q#mHhkbtkJFIxBb9*|OLF!B%MxERHTz4Xw`0XFB&FxHP2a};TJJZPw z(gyQALmQZ9D!%j8skaThmJ06tI7J)-^9C>&(QenKM)=;3T;pHCcs#Pf-nkXQ~#!v((jq)8&w_Po;p*klSN3 z)$_p5mXj*8)yu%oRj&e`r``vgqY6;o=c|Q)bJZfid1@)(g~|`OKwSp7P)@28se6DI z%e|RWMfZ7;+6}l^Jp;Hzy#{!(ItjQ`xll%zs!@Q;)EK}rH3!hIE(I)C4S)gF2pCk& zfK}?#fHkTQFskkVtdrgJdi53HF*zX>M{1cpE&tjQSI!^C|F)i1K1n5)6tG}!b+c?K zW%%8IU*&qQPhQOBN2fB2cohbnvZ#l7)+gAq~FG zP_po%p`^u&2QNVWoyO&QaKLdnSNR8x%ekyilHLY*1aDkJ%i6}gaFPEr818Ua$v#f+ z0zaDo9uC8~li))n$A%$C6Ua%YfQOvihL9z?p`49ip{X03+=1W%%`h^_NrN{yKM&5a z!*gx`3(el(yaSwa&}3-p-0(8jfrU-L;M@sL&U=h}nqypUJn0b_F}EB} zpxe!tV-LjKI69>rT)tc?rK@w}=o2QL!q;P9Zn;cJx0a8qV%ovE)jtEHBh;&L#N4?0 zrCnXVY<|+|xz!IqqnpfE&l{Lq*5l|1^VRF15p$~nV047}>W>EI#$_w*67%I)51pf1 z?E%!fJ#Aoa^`92)9g9Zyqxr@fm|Inyu*>TUM-c&^A(#h>Z4~B}#g~|E7;qC}@V*Ex4_nwTfpOEoiwkyUw^>Bd zGUqo}>=)zRsVV?Ha=o)aeGd3&+5R4*_5vR#hh@gYt!Fx8c3WIMcmuzi)6<^G*0d+q z+0fpFzu8jR-QLKB4ld%yz+8r(7r#uWJlMVQogC&OzPT{Kl(J-k&vgXur#O=MaFd?z z(^qBV=384A9ST4ThG&@YoWP}h zB*m>RtPAcu1{}4Ov0>?vO0sWCQulA;=asEVJ&q|GR3T2|JZlm7veA2T%)$9(?vTE) z4OA9CLv6*M?h8ZhSJyObZk7#X)^8bp@I`-Pv5!!W%(pH_Vn#U*yBW!kM_6B3xDJIR zP0Arn?Ram$voCVIcl+^C+pa+KI63QXWKfD&8cCr!{LLF!#&RD_JYN%EdJBbb;~hT? zuT-14-xR z-)DTw;W!E={h5ZP!4uuHU^tkF^}h92Im*-q2IoG+>gypYUT9#xQ9>CX2^nGS7)2>Y zX5U+7`JK)a0@GTgnj<@ObMdA>UvR!)oXl(NUSK?iRu8v7zJ9peFDI>tl5bc}~B z+M~eY_~po=j&2-IIg;a&k22({E0Gty3F1-Rzzbx;Qz(7tSX{W~G4KZf&rpv6PLd_y zDWdb4a#?+#86PzOD+=qK|XK^at>{=3c7l9_W=Fjg6+8<+7S~ z55(N!q-bsVGS(sHmII)y*L)f45Od3CGg!mwo&J;EWTM>wo&J;EVoxS*)? z_>b-JB0px2kFThpNoRilB(p7J)oIpW*%19WtH@7viFeZ9TiXFi_&}D2H(zAAg!>=- zunoV(=405HTV4Q<_zfnKL~h`ZGCtXonH*S8?~5wa^;Xd)h}TQsMh4LE`yawk2dUtT zU;GG9%RKXoUwi|dURFXd1UW-I6Z6&k3_2`)evJ6Q7_G*R-{CkPKf&@Oh^jwAxskly zJz>6%xpfC1wSj8Yg?+b?N>%aQs=teh#<%J0TVnjC+5se^^TVN}B*m01|2*WQIGH6( zZ+kwn>DVPhsEkkF9D|&+U*_j?CJ!lKW}$)!Q|om1g*#VA%`S;w@xceB^!?AP@v$f= zWRBf1W*hEPKKKOCkX#SWi))0uJZV${J~zhtK%IIh&9ukf?I%!EZ}U@Q$P|qIR8_;h zJoy08vEJYFC`d-(WELa%T>8e>DS9@3`e)*BC78b2)w@4x8?5rgr|t}zfSre*7hkL} zX+O5G*MQO0;=3!rM&p+wdxpA8VMn5+eBHumF`W|QSwPLl`&^o@$iglG#vMc)F9N0| zR|3;9T7k_$YF_mPU^?#iE$lg9S4rHT0Ml`Q22980N|x4W76$z~Zmos!uhDB7SGT5% zM!mqal%2q|lm{%nW~8LMi)`HJVUBA7bH$D3$sr6};s(V$+4^(fW8?yQp-ipMkhQT% zY60X-mT&7!QGVcO$_4Ui>N4OnMW0#HA0=r*FkFVJ=bh z5v3{yc#&!XT&ys+$4U^tud-Af0K7y#etD@n2z;6PBVd{OGoW8?H5Z15q4E)fLH#o4B)(1ZXAIQru8Vz{-|eXH z-Vmy+NPmDsf7@g5;u9C0*l+WqmF)`|GT_emwkP}UC>YD|V^?|Vc@9@z%#&ZnXBpTB zb8<5ik$D(wJie*%S!;%sv$>B)sLr%l^NGvsVtLJ%!8>?n?mqy&P(zDOExzfE>ZsXHe`V zmW>dnL(b0tTRQqDSW(h(tSC05!@wEKkx}wY+3A>JgiqVsx$IPO{>9*9tV}sj4RW}; z%;%M#G$N^y^Ybgs22X5qd9n9&3SoLCQuczDT|=Wv7%VetpVLDV8r(*(pWx6)QVsfqd!8 zMk!h%w@vMoQu%t8ow88Axn)sGic5+Wzn5mG6sdbH3d@|mv3`7m>NF2zr(?De`jubB zfsI_J+YC93rMWn=&<`c^`CbOaZqLXP(&9v#Pvy+6Q`*lD4LOXZCI2}?GG*jjS!L?> zwA=_yrxktd>2I1+7;o@1(U8Mf4wb-n?5}R_+M>Bc@`e^G3d@{~HO^{5H*V z3vl64^P4q=o+2HKvyb#+_pA9JI~`v_Ud}NXTv*}4*TR~gN~L2Ev-?B#olXb8Ikph@ z^*p{W9@GA?>!~NM$c)9e6^5oB<-=FMm~+Pb^$LA|O8YU~h?TpGl$;};ZEzwVnHPI~72w_J z;D~iTgYbByzAot6GgZHv&|Y60D>xlrlOVUcmThdq%bQLIx7Q;uq!4$j7? zY1x&dzpphdx?$mND}sgmlOcMXXv&;3=EZCH%|i3}mYF zrn~T1x>I^O)+$Rf)3V$1c)U9uj;yrq<3#uK*H$se_Skjzg6?#%6*=MMesRxxC_IQz zbAR9XqAiMnK5eA#72WRxl`$t{SMaOCVb_$BwWg*Acv$lon$o8VkEJPPrDJj4m457+ zP5?R6p1q>!{;z*@ARU94T~nT&b~^qI(1DizZdTJ_t?8$d5~uIU*dW3&utvP=|BKYzs)KTO9U zX4jOHIH!XnN+*_sJ^iDf*P4FkKT{Yx4t{=Th@K>xGUtrhfXdh>toAykWUXnh5$jpa zW7H`}7Q$m`N?GYx{4PlPv1>XRWT%52rO7f$G<|*QAM4UFh}kurf_JB*AJ75+@SleV zp3<6r@b5o6Lf*`WU$5bV)6M8TnRCXRm(b^RGV7F*wWgmlV(I2!)+xP_@K~BsRyx*$ zrW&9^vdu@GiFeZuB@nSVPPqSx31{nf6WTRpm*jMG0XlH@=BoDd=W9*F72b{cu@_1TzuRX#X!$CG@T}zGUtqWv{9e3f)=(p z>~w@W9kfwCFTFVl9>C0*rrF_ALo#D!j!u1`I34s~d~&Yg`q9X8)*5nr;LVgX1C+F! zmWSRgK9!tph8)JysoiZ*^eE1*=}eLA2jt_5@A_9Wj;3V7FB@_gOH1Y%G5z=k<@s!o z(|OiBI*t(`)|#5WceLiQwK(CiG^MO`tfM1pdJgz9eamdowD$dlcOuC4*fl*Dbf*Jd z8|o-W#oj*orfzYK!5dk0gPwB@P0tlgnRCW0*`yDvWNJ#uTGJ1VJfEAPDTeA;g$0kL zDP^T&aYZ%#*z5E>ke!b20h%o5il(6{2X9EnAZFKe4&I#(p0e}dEZ@T~*DlqXzR~vb z8=0~AcB!H19MP0HXUteT)&xZh%w!hy1Nf$a{wS%9l487(`4f3QZV~+1ua^6&P-)iYT*dsA5 ztvkX9dw`$ ztjnc}?nlqh3{^by!M9ER^#6Amdd*WlcqHbWF(2Hj?}TKwQ%csF-eBaJN8r=7oC{od zEKMmZ9gBNB>BnBn^FekxZUZzmohO>U@$ajiPRAf-*YrZXI~_boFcEW~&HcaouGUmN z{3)xp(y<>hXcvm6%sFFzc%7*e+h9@AMd|@Wq2!#5QNaR9Yo;M?`agcOBAr)*X#4Nm zMp}%eH9BhL$Onp~RlGyZ)bYawDf9Y+B@`0=?=>g%lC6MvxJO=z#LA`qPpZXiv= zv6>%#{|~R|`r0w@4Wv8x$<5Z3BISc+GUtrBe}~CuAIV@y1j+2>`7C%R=K-_aH6;^H zF(flq=2)u)6sLn@IX-)S^X^@zl2dEQVXRC!rJy(+9Ov^{_tlHnok|Y>Y6u_3%9OJR z6sLo|7@zu{?N^*i&J%_l#>({1EO~7S-_ER4V=O^0D?FAZu&mRu{*oEXHc#O$w$t$r zpzhZgi`lqx&Hy`U+her%7)guqb2Y~W3FoqN8?r#sTGa`L~nC6mV>8mwB7e7z~wfe$>!@P!ROZxz5t5 zvaGy1TvZm3ztEryqS;;y3zn7QVgNwPveK?HQ$|BuTSueu(t`4}#D&YsD^`R|bYipzV%_F38U1Y zjc9$1z(&is-i&;}-rLF+mle0PG%sF|`Iw<4WhDz16rCz`;fA51(%2e0+i_LftczfI zS(QJ!ylmO5KmfnWE*u2HYXC5uKktohAkwBm< zQoB52T4&mch_T~%`Nk_-=5zM?GZudXm-SqiammX+#rB^eO{p|Tax>JV)L_5fQL>`(QP K6DzM}>i+@2S|RlS literal 0 HcmV?d00001 diff --git a/Debug/tif_dumpmode.obj b/Debug/tif_dumpmode.obj new file mode 100755 index 0000000000000000000000000000000000000000..d1564e630819a924f667074735fc3579ae0726ce GIT binary patch literal 14179 zcmbVT4R9P+eSf}_bo$oGwrt07;XX>WJ$ZqeS|W^Yd?8HGhUo$Mo$ zPDrQNp-n?#Xk%1LTF8X9OvALarF=9{m<|jrgn<^Ap`~To4jmYVVafna`a$V1ZO6s^ z{oa1u>dPstN9%p>{onunKYs83{_pLcxhE-Jx$lYW@7*oL>xFlX%&*p}%|~i}QOx1t z-LatL|KFVyBlESn^$RCTLCe=p2=U`BbUBesk2GtSn*kC2e;j{bdW8_#JB4@${t}{F zq>|Pfw(@%nbYDh$<}R-@S?7}5`5oOO#Cgy>`g1~j7Jmsb=fpKZ>1eR=P|-|Z(` zWj>83PmPakp@S*J$(`snvlEo({C2t*w(9Zcpql~RO|QfQt~UJbq{s89S3vXc_&YRA zI^Ql^aoQi&w${qpu1_rqukAY3uqqpY2GFOZ{N`$mqGV2wBJPo;R^X} z8TT;SejYTHo#`Ce8Mk}!_pnbB)DbVk^R9#St`X&Px&+eB70 zwStn@OR3@7e7!llJYQ`rH|xvmwG<^kE4t*MBbEDSF4dRMjLu+~wbd&BYt|PQW;CLE z29NIi`qIi$W4<=hn0w>Xv3*Gaz_p8BbpQTQ?>>^RS63TrjfH0FPW!IZnbG07dNZZo zt)4uYDy}r^OZ7L`moKE$#?nfCv9?;hG%t1;R#X>-cK?jE+PJVfyR=lBX>p#cudUB6 zrb^BA`Fdk!QoZlqnY2-usV~d{! z&E;c#nM%SS(yT$>)UczbhNlD&wVSI$q;0}jRjkasDXvaVe$ zJ4QiwEyb`8gX(rr?Q_*)KJR9fvgx?ROs1qer2({ka!`m)v=tnE$~l0FZ=hnp%^RBO zmYi}L$SSFOQU3$f_dGJY=yL918Mw)3ymvd_V`#b!V;*)hWz%#m$9A2fYwH<9b9E|J zkRv_Ak*v)l-GQ!0(DkTWF6p+LSL{+wF++_WEGwE_woJVrbQC?|OHMTpNj39|X%Kg&xQ>!G_0oQ{z7wr|aB5z66kAt|wl;*?KR|82RnTnLGAvyh`ZiS4r$=t&(%V5q z8{K+i6A?7eVTfLiQ1b26i^?SWw!7J~p%HMO2T4*|MuBEf&ruw`+b4?~h8A{F&61%J z3ZFoi9?i@;dftMf`XK5KgK4*7+sd?S6f#BX_Xg?*8)v4~Id#=(*xB^0sQw|U54ux% z!-=@nC^&R00cfIqz_irJ02P9b?%liHySsEzXm?JgzD+ZUkpCzK=*0ArkUxZqeIOfj z^(j@i984@Al`iT*3r*EVOVP)DC=40)N>#l$yNsZbUSC+Ktxh)Q7OCxjP+QZANUacf z)b_y6%5vy`L-XJ^p1Ze@<%?wLZkzQqJH7K5ntQBC#q>3#aI`6ei`tYLJ&Wq07VIOa zC3t=XtzN{5grPfFX<98LbI4C8F{E2WU@{fU(lyS;Z-H>1n=y+DVo}yDDU-Sj@GBID zF{Xd>#3#!B6>Qpbn(De_@F$W%%PUq9AVKIOXxGq|v^X0hpiQEIzU_jdo^y8sD_MU8 z1MRc6vnDz|3=W-`t8zHv?t`e<8wrTMF$j9j>+Y5*$of}Nwa+s0h}y1WmRuF#D6Oay zRQoF0`VrP(rvUl{*)atFHpMCCX#*D8D{4-$kNc&YOS)RN4QE0D$soNBI1$l3qh2TnirBLW>)|pYeO}27_(3UP1O{&vGYrAQ| zbA2csM^neTyVzL1Krj9RxF;DP^wrhIY7TiFGAjBk1-c%OCs&*%u}Zc>ifYR6V&{P> z%v9A>N+qrZG#l0evuK|_cNfYZhnB}T#m92NUrfx%5=nUzkfMzW6F-+x=yDs&wafLU z+oTH~LCwup22sIM3q>v&syDX3%92IgGl-$xi~=MP`w2}W6MEmx6vpr6-2ERkA22N^ zhnb);*4kkdB%lysM0aM&az?eHbLJFzr%=^4_h_?515(Wn9@GMO znT%bVov*Ccn>FORRfZ#DWC3=$bwu8B0sfvoPh8N<|ds*5R2>@wqYyewVK5s7!CqZ698Rk=!mI2mjdVAf zhJX&Eg#3ZcfngO&e!C|*wnWX<`ieIV=oU_c&H#m!i?HpbXEm&K&Z8?eYC&Hmu}7M4 zB9VmDuc8*D<~qy3NO!$*H%a8gmdj(NShiK^60+{&xkn&wg+9FtEV}cVppIa@4T5#a za6)mJyZ57Oyi`aNkrcZhi-aPByUWQ+gPs7N-3(fx{>OmqPSZjVM&zTRM!;0Yi~Q_L z28SO(w6CJR!>u>w))y!Z*Ql=M+U(NGV$E$5TSU<&MPw23YT^Dv&5mm$)|2+`Lhw1XSQ=^y~8?Wz7Q!0}a=T4ogMGBoiTq*kE+I;?SK5M4cc!a^>scX3Sss zD8K>MHL;&S>f<(Dmm5Ipdn8QyFi(;677Jd|A)_RThS2fIrUZvO-biXgeaWel8+aOk z%Q{7Bhe(D@(f5MKz9u|bs;$hf&NgdyV;#q8H3~+`9z|7g0D;L?nrN+CGBV3l6~=3~ zIG;Gy0GM?KGnQCCj^-guSU-7XkoVIz@*=trrD;5-2%KzfL~kfI!!;J`$q?XjT$0Fe zh3@uRx~bWNOJh2Z7QHk&?_4tdbQ(e>vqDVX(!tu%J7E$ixd%!9+%p$Rpxu zzk${+11nU)*_7fH)34Q42MgGP%V)o45ZW$*%_NP>GJ%`$aZ3x)JDtrn2CN9Xbu8m&Mx}Mhj>XgGXo%Pj zhL8}IOFfowF7*te=qC13VbwICt1Hh^#_wTBp)KODmvk+jhk{Vd4MVvU$wB`YY_Qpk zE(YB9llMXL1`aBUt%czm3o>0wS^7-1lvOYlk>9I1f{cb~Uw5Gj2WI*_v}5+n~PSAM7+ILssXdY7;TtZPJG+s=x_9*{ILAW_$ozc!g9y zB2~VWO&6yEcrk$dGpf4_NI<+mM9NzOeku;1J${VA3_ph?zRFI{Ka#>e&r8UuJqg;a z$)dNjU}=AAMsZ?$+d)EvjYvc^1DIqv1)UOe*ag&PmpP$noE{73X}Y%%5GL%?;f)rO z$jx3+9)xh}v0Il_Dtny>gm*)iICkl5rK(+_rZlBoHS>BtjT1?Y>mbLFM^I|yJmLqm zhvfwXp3)(1vGYC*CYM}J^Kh1wjPuw_)3V<}w{E&6haE?4m2vQ+s5%0$6)i7=j2z=2 zyTp1=TYL{hiAq7H>V#S!$}*m7b-o~LtUk)xzYc0M_1faRvAocr3sR7&U2bJs7Q+Ff zVzNkqI~G>4BU>L9?MxwvYpi9s@Xx`J zMdK94A}GHD+RcGVAw#)Fgqst(k6qnDFvaNzdbyjm-sGq5Tn!PjxEqFtc42vBNZSVjODtYL2xah0&S-1 zt#M3&_sR1&?n+t*FAVRX69YJg!j9fMq(LO2D#UyO2`*PnhI`sT?&z@=`a5?|Rx)9h zHh>ofutboP$$Wh~n&g%n)HpHMbZ%F}(;As?G17HXXYP8a-d8|N|9E4`(_}i6M=E_5 zj$&QrhCC;yxe2{)L~VakQ8MO9TO^aGqJN3{J{mJjB01Wf9F4|w5Fxz~MJB;g332ht zpllIVvjST0!kSv%YZ(GOhXmX6% zyMZDxx^*EFff@aijo(7g9t7#YKA|E_@7$B~QbtM{p?Iue8LC4!rRXM3E4=-foLyY6 zv67^{-nPS=+#K~;jM1f}p)uh?*T|FIt*((VS{|!f+fUP?oZB$~{c-6nJFW%R?@o%h1IT%ZSocNy$Wk9Cw~c0+~6QEZp{G2$5oZ^8F> z7u>Oq-@|UiGl2=qkdQVT#F`5A$|c7wmE|^z)=Ys#84z8lh(sq_#YQ#kxlFDk$0rZq8cv?Sb@~&J!)~J*!k8M+G8t zSj|M|Fi`Pu(d4_-25R~H*=;n5Qj&;d{4D4Z&g(?O3@{g-%T)?KWx$#-G$oR`s`yvy4= zDWS6R-7Athy}a?#m6yg#la+To_5w2&@yV~?`q76r^v*B71I@gqZWV(Zt#mOb*tArpTM-*n}%tv(|5CdWa;KVJNvt9A8@j$|i_NpOhcrD_)Gee(H0hB)`_v$+eUDthS~Ku#-$TWQp1i7GgHtws z{hP35ynGGbdf@55!}Bi?~#REBTE6asAp=y>}y@ zJej|CHJ_wl80PJ4ec&ld_=`iR3wXD^?S=LBD_^?)V)qXQu3x_%;N;2|vR&hzR0;yt)?w(S@HiTg46bPyw+l21fcfEZG>i#u`e zkcdeL2hUyN67B=yZMY}JbGQ$RPvE{+d>QwB;%m6?7vI4BfVhtPLD2^8heQ|dH;I1S z4~ym0Yf`7grCq)g489lK@)g&e;vUf*0uP)8zf&b7$@G@6Wlw(qMSZ#I15yLkIQ|e9 zUIvhTJ|LOn#8y^VBxiy#R;~7;xF3(l@V94eNF-u-kk@x`r@?TM=ojU}0jdE{D8`j1p47b4cq+iK#Td*6C!0t3gPvfsc2C3KJX}_F5w8eh$hq!ydVh9U> zbqAi>g^GKJ$l~5B7{>Yp16RLzEA9j0H*rsj-@$!Q1pd@&^ymGlLZg|gEjQLLTud?V zPc1Z7Q)|`PlrB z@c-qm=#K#SQaT=c9Cv>DfA0S0K8whM(mP*w_G6p*1iG`<(|tFi-B@?_2lC|=7by|j z!>~vR_ydHavVLTaSn@7PSffZ{(W?*)972pNdNkd5mNa6d=GBl_tJfnW4zH-iC`CNR zpEl5Tyy6HhLVWzKm#@fTc#B$$6!91r5dOH~1Ap~Z{M>=!4TxXv2|I)j2mB{|#xLS~ zC^>ubrx9LQWAhz84MKu1$+=B6t~8Z;({9f#kzr>eq0-#bbd4AN=EokX{5OpCt0%vyomg z;bJ5GaBXeHt4vYC2oh*{4+#K@ygY3JBn+ZX(u7E$ty{g)elPF8C=&SdgLsTT4hfLi zF8jS}oqmN%2J2N&af2=b$ihz&bR>=SPNmS$k-6Biz_}J;OvCRUFkKc!XXREc@ zS5-$xTjF|&l_#$JxHK4FQ^qH}~FDFMD&glM+D_2?%al34tmhq=brAs0C3$gjzuSK}(@k1wu$j6(~h5r75JK(*A*p z!Tf&jeC*tp1FW>WGw=Jn&-;8o&-=_6hqBTmQy(pzeOQuarSLP`=rmV?>&@s^TE@jA zhvK{Fe<&x-Hk!-ZSI@Zd%s0?y6RN$OKecBg%{Q(s?iE_E@_x3;$HYk4==ZnWA<^U9M? zEERNfX=QD;d9x|4tT&{YjrLmmYCAtudUt-NVl?tIwTrk}$9Ew=b4Ab3SQt}lx_R*e z{(V&|R7}IUS_x#LT(|wjymdmJfsv&GGumrN?FoCP{DJI4KR}J~AP!7(Wxfrx%OD zR?9GUSlT^OZ|=yXB;|toRmWB=LxVTCa!H%Q#Dka^@iFYrYmTd1<{1p0#NfO9l4fd- zuJ|x8RX0n%V^uxf)O=gkonwGH3#chyu__h6C|3>7w~9qq^W1UFeF5|gV9xZk1@8z3 z{tg4sL4^#JJ&trbEY8bxlIlgE4 zj#kuFUn5hd*y&fflf84N2e9-6mY(vfuIBg^*>TIVk#O{MRaTv4TuS_&EDrAeioQzhKCo@5u#2a}Q(o6PO)^jw_lcJDOrS>NG|_gV8bD zR2|>eZB5AiehgE^C+?=y2iI#_|TR468=T(<(N2*9dkD`wYpB zBQN^8S+vOVhsZKlE-K4P$7?&K0_8Ibgrgi*TgV&P-Pv4GuGKdX$O_x5tIf`Qu)IbQ z{yRlz*eUj8+B?N^WPhn}>wm-a#2%an&k*Im5T(B-*ie^L`HPqyw&!Id;*i8q_#iGV zd~)b?*R@PcGqLLHXY+sDB3=P1$=<(^P&N7zPj^#CEjS&thOQ6_g{%&?*^BhPrYg z>W^V)%GN8$9KL6`zJicgkd-;g;1$e`A+$nhvBOXX_aPx=WY4Nl2E6I3DP`F?9o-#w zHKpq4-l7Ogj&6IFBa((=8MK-YfSCzTuV}@J=WAxQVmp>1Q=1O<8xc~9XeJT&16=sM z+iX5tX$IHY4f@T?fE`sGxh8@RQE>FOtKPILop+Q?M+9>;#zYGi+#%q5d?c`nUbH_Qq9ek@+~sSfjCMj1n<*mIvH$h?7|_ zpy3kjw5%8+fH@VI7~EDdWY=XrqS%m+49hux>0#XeKDa!+BPdtRD4`jtG);Q5pdv$t zX+Jk{Gw8QBnm1d4A5aC?F>>54B1G7VX@Oc@3HOdNJyG6f5vq+hyLa9=3lhm7SSZ0Z4 z@WSrpH5%UI7=_^#iw<&6t(bncrMkV@05f-D^BnsY8!fl{9Y(OWnszPzLTh=tshQ~33*q9vmcMR8v@xvI; zmUTo1-zQHk+>a707D|JkPU+A1QVwV6jZXlUccIPTmwd+iz34SSs9+3 z6FG|51zFNX{u;9*x`J9g4CXajNiQfG$JMA4L+*10KixKg&PIeOPA3|<2CQNw2T)D;bf6WvS{CNr2_0KlZC>K@&y zfbc4o3L!m;scBe;?xKF+bSzkzl%EYL$FVHvv^GOGpjzk#1F;p7F521%{Y6Et^Pb;q zk_+l8hjZGTmx?5Weh;}IH1jM2Bh~fDL6iu`7U{8QRUJjBgs4Z^m5Ir%QKt_B#ZaXf zkI`7~2VsLEoRC}|7{;))*EI{YNRmB1pH}?ips-oZ$;roEC(Tjv=E27 zW&k3^S$EN8GN6o!Znum@1Y&T3ibP10laQS9WTr?+yWeSfq0lh0jb4|!*d`5PjPb^yOOAryCuzb{x z=<|^4Od`EZq_#M5&`?G|QjUdz?b>m;7e3CAf|IC?4DQ7w(_UEnWs9<~JeoM=H{Lx~ zASIdJj+)LYykAp1WUQxI(w)CR2g?A-7;-DSI5-TT8`SmY0ONijWC_&$L3?#Iyk&yv zcP(X3^GFC~m&H+%!sR^;Hyhb4B}DBE1Y3+yDRkS&+ZQhg=@K1p&tIY-diD{7Fj0}) zk+YfG88xv?nk2)Dp@UanG;l6I&KN>j^g>=jwYZ*+V=qq#RX0_1{uj{TsF{xbY!49k zJ;V(=sL76+#A{?=s+6>h8j4$z;fg5el`@Ttg6Z4#!3sBKy*#~dxy)*sBp%@oI|_5U zpUd3yA6Ps=b642Rz8V=j#mSI0aAPGv5cdP>Fi#d3t>@dVM%UwGqlH!o^+Q5c+)}|> zh|P-ul<`v3TN0x6Hf~xKh1<|`orB45OKP*L>q*z z$7O@ITMZY{5Pk)`^x{~~S+Y8qa7s~%G+EIq1++m`CO+;V8eK}N8}U8L!wv%iTZ4#O zTs(!%M2@AKCtl*}S8#Y{(EB`=oq%Ooc32;#IyR^skCc{?*O)mLG5}4I#VjZ(VD50uui|;0m*L>jjbEh!D;s^|@t~OT_RUfb^HK zpYKzK|A^b+vTnjFOcW-5vZo=`$XlM55&AsvE$G8-pIun=GRW)_8EIr96hS^YPEh__>YK5T(nhJKA&!RLOWv8z5OYL6Bbhv=^{ZAD ztx|dqL(l|QXts!VT_fEV3{(*t7;F9>aO|3EX1Uu6A+_Hiwe%@{qZQ?QMt)M8F_bVP zu|k~^y)qsex_uD_W57w{Xc^(a9rjQVH%K=vG>iI^IgY`Z42uIdGFNo44rwJ47E$AP z-~hJcl1cO+pTjuX=c>kYW70Meg%2ap0J-DwgN%F~uoQcURrHdnBlb2%Z8Tzi7HMpn zQ_!@iAw<*2*hvHHmt8c-MDP`ik5X(&HOJi^;%*e1hsYI%A|i=X7|6x*gQ`tyA@>yL z;r)^>Wldr-%qfiZY!vNfS>(q*A%)a+0geK>mXO`(4!@3Zl;Yhs9}VL?2F1C*y0PA^ z1W6-l8P^t20f_DlO--X^iGF|~OrBt0lvK5{otGogEP@CO9?Fz7$NzP0f5pm@Vg^#L`M*0^#=jM4pM$cy|qvO zh%zFsk#viU9RDna;qnSxo=qgivEz3MW64PgrY=syiLDYD{SC-yk_?JWN+<|qicB&GkS$+yIhgpfm{h8Q_`IPB3OrA=c6(5k{p@FcPNDU;3L2D2d0>l`# z7=8^ahY@>Y`6P@4VFQwGB?6#`MeHxwy5dnyd8&zSg>(6QeQmqRL4uBi$AQqfx$7sf z$DmvQ$21qJMzmOWt44%g(ciRr2xcz$Wl{$PYN{%8Ew_kHvqdKk@6;&IXV7RNDuzW! zEbA2|G54}~0BKff#Ge3g>@Ji8F_Z6K!Z_nMs|5yPHu-XRkiVnP#|d(oqb<-3u0+)a zBLXKx^%p*c76 zK}y(2+)ZM)SjNH4l`Dw~Nilk;Ax$FSf~HZ?@ zN?pc6GMg!@HJjAZ8nRTICX0gv@6nlFxmNEa88tcg&j$iT zH?R&(wD9S3)uaaFhYDOxjrCVW(L#nU8P+hAHEA2DD0rajSfa#X#e=p#Oo4iP78{Pb2rJ@YO>Dl` zFq*})v)EB6mk~a&G?hg(&?;TSyFs=1K`Nj#Y2yidc$gzO)OLmelCf_Um__WPz58?8 zA|CId?FYV0P34^{=uWzw8-TcwzGTN(nSBRg`1Sa1g{QQP41`Aa*k zu@qZlqRg6DN%Nyzv!Xt{^f-@79|W#@Vr9n8m}-epnY(5i4`3Vlc%r$u8Zod>EmJFe8HSb1 z+R$WynC=NNrB43g6B>pLihO7eO>0wR912BXFcdm6bxWb(kiMhGnV53WXhkNl0BXj$ zZyZ>(1#z^c{<7EW{#t8Gm`ZgooSg6{o_nHn)BdUlc?zTrOMeqx4N28oZ@>Ju>dx0* zeesXKIDyG8d>x-3e(pDLDZQfIzEv4`Wt7*qwA=m%KXB_i&wS}#+!0N`bT+x7q;cHC z_mGswZ;yl*+N56T5&UMPC#7K!*!}PgG{SQBH^Zg4IyA+Ug}|16M0P@&%&C~Xj4zlL zFIeF(`byndyM5=*9gbx-JI(7od>;)!+-O)j6I~t5`pZ8F5J?Ko zy{hFXfgjzf+pE(GCtv)#NIVt5|UN;i^~S+jbdA!*8Et;5REhx=Va~;f~_t>}R^-Lt`;|ym)t^ zO+-Qyb=!KovAxzD!_Ww@aj1879c_XvEF}D#!yhTbXEYKm&9A4vNx{a#&0{(gF0Y29 zm+;H0Vd>|it0BPh^|~X{8NBd#2-gqXIN%jK@j~EI{7%ykW>=9306&KBf8UX$tGx%k zX%@eumwtH)i=xlv6})OU+iJXZYDl^RJiT~@viqtfDeCQ6j)Cv;pMFu2JoWbQ)k|J= zKR@-_H$U6G<5l`KOg`Y~?V%g+<;zdq{MsMVaU|)hud8q1FZGFe=TOM|K|;Gb?_5v+ z;ingx={ZD0CIx&2G>`xAL+6e^J<{y*YJ7uLlGG%T!iM?JUOf0(3t{?jEnuYCW;jCZ z-Bs8o^-0T+boKVUgx^?(y^x9|{pVNS{k7B*T&86x_UoZ9@P*TlJoxQzhcbNP(?@=H z=PKSY)bN8>UBNpk=Sse=8h(7#L(ew1Hp4r>?BJbyg}nbn1Rwszy!Yc)z$CmAdw13O zovXqZUR@4yWpB^x_>HyGC)VjdzV@dWOnuU?$!0O$+rt-S-|55XBOcN1imQ^p=e58P JP6S`+e*nWgE#LqE literal 0 HcmV?d00001 diff --git a/Debug/tif_fax3.obj b/Debug/tif_fax3.obj new file mode 100755 index 0000000000000000000000000000000000000000..fd3564882c3453f1b0b72cc0ab40b0e2b9f39a66 GIT binary patch literal 84956 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 z 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 literal 0 HcmV?d00001 diff --git a/Debug/tif_jpeg.obj b/Debug/tif_jpeg.obj new file mode 100755 index 0000000000000000000000000000000000000000..309d4f826ad4268d452308501e95be659d9ac431 GIT binary patch literal 9955 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 azz@eh?63F{85_()7x)?3hy6j(%KrdKkX73N literal 0 HcmV?d00001 diff --git a/Debug/tif_luv.obj b/Debug/tif_luv.obj new file mode 100755 index 0000000000000000000000000000000000000000..104587bb2ed6c303806feb4f78091c15c747e984 GIT binary patch literal 72812 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 literal 0 HcmV?d00001 diff --git a/Debug/tif_next.obj b/Debug/tif_next.obj new file mode 100755 index 0000000000000000000000000000000000000000..44383443eaa6e71016ac43209a7879c13cda8d0b GIT binary patch literal 13100 zcmbVT4R9P+eSgwPr_)KYPO{~M*s;%!^XW*~l5O$9gPN@0P08x&Vp_GAPn4tsH4sB@pNQc5O)3JdeK+~2oOeeIS)X9WmW7C@AcHE9j z`un~8xRY#$wmWlA``-TF|NX!J|MzxfG)2VjjUPyTZ9s?zg?kOmES8GZCrVydOyj1| z);>wVr0 z$My`bU-xD3a2{~q;{;s2_{nu$ehYFC%>(#71-Ug|@Ha%k#^nI3=-Hw9AF>8-Hl>M0tK_a1zTb zEf)EwTArPqOi(+MxOL_s|AET%yFc2zF($xVtLVhk^V{8az$_ORD@&ExYW$wuz44*J z{^@cxuD)5_y*r*=sFshHpDNEEjjNU83+1`eV)4X`xXF^DI42ShOiZ|wn3K1n72r%BCtlWe)PaJ@l`K=I8L+VJp zzZmb=!A@c#pBSCg=Zka8GbIe|{NJ;vXH>&ZXgmLJv&^JA`Tv`#6pY51$wply^MiZ# z>?14I)O=}f$>D8zo=id@Qmp>mcz;2S_fH5|)6G;JSXp3SMX@k5eN%AP7@sH}*fT&d zAv#~aMTBCT;ajol)X|)!W(^Ito>x-ZMm)G14>}zTJ7ZcduV*v6Ft`naw>v2Ex!p*KZd7WP^zgFl$@q!bBR8T{t-quSeZo5v2;t5 zg1!U8)alkYQt6!lqKvk^v506ipTiQJTp{ntsS|@S%x!g2ww|EDeFq>hDH#QvfxUuK z(4rn#NY@j=6xGP<37W#6V@gNDNEI~G0;5_F#%=@BsFKSmhaEkW%#y!%kw3^dd03rR z7YmhKYGfORe}&;&oC#AeG^kb26sT4jpn>PzhNU(vFivBmdV8(o0vrpLN)>hB2}RXHNm0jL==ABig`#?FY90Y&WO;VB zv^Z9so+G#aMs5wOfog?@M{YOYm{~6UuXx;Z9nPCSA0Iaa6g#zZ3XeOiF~#sW zByp4}h-;K7IrzVT^uy5x+QbTZ^f{rlSN=M6wA^Q^v0I~ zxY0=(Sp~5u<>Zwy&4KYNB!@9(!&=9umHi9Qw5AiP;}F5uB!aqDtSpQKp^rwpgl92} z-q>KYF+8Ad+rg--+#4AyQU56x+Gt&mn%40pV2Hq1<#M#UKfyq6LqPO|L8GT%N9&>> z>W^Y*qotdO+D^g9J1WA_h@y^??NvP6fUpKR`KC`J+kxQUq7M7Yh@5T}vN;*Bb6JCi@(wW5Q_xK)l@-8tC34ER^naq@==(Wp9kR9D;k1%T7+Q`5FSLMQ3&EB0ilY;$ zmRVRjRX$~5+cJ{P8f2%6r>%ws&2^!-6OY2n&Rk{wD7E+=V2?3CXp4)L#Wd^jPG+1cZIx*I6xER7C1=8_;Hj#isAwU>w4amcv^y2lhvlkMr3#+F$QCP!s9>p?EK`Q+uI*)6q6oPH(Gy$H0VQG+ zO;b+>+INzf;Roou|Aoh!4XcobCnOkab3qiOK_SA3XmY|T3?{OLp*_SM$56}klhqOh zNH)W$Z9yBU<+|;8)p2!0?cVBZccfC8t84dZ40k2z6uy1XvL6R)y@us!7TGJKQmWKj zFZE^_*-VON@YMS0<21Z|7=_^_leyB=%=lutT0)&$B$>2{uw~PV$$~-_5=ay@%3HCh zYm_-VlgN%|Xhc+Qq;S~MMp429`a}WbqgWscb|~QrP;4@w6D5&=;;ejH(+Ud#t)MY+a8NfCdW zk<;=h6$y6)bJs~!q0;Eh5g2lkisK>^-Xdv@9`9zOUt*Dlg=J2pNH(Xmf|Jw@O+zgP zSjW)DG$T*yiMQRR?Xh$WLfm>;C;{_!&Nz}q39O~0cqm;%+AgUFGSNMb?Bhq`;lVwO zCpL(c^&BOs6x4KJ|D<7=G?=DWYE!+ms}0wi6P)QF-VpE_E1 zTmwd+%eukMH7FH<*vpNn+r%O4uMAgOeg6jrU3*8{% zTOsM9*>+O13FNxMlM5wsL0!eLM;a|OL=r;3gbn1Clt{;x=`oqLbE;Gc zQFrmY!zXu~I=vStqGr+`qp{ur!rEmxA-SyGH(+WgpBbS=lI#sg5{eA&4xN<(-32^1 z6X-bk-vP^x7#4ysA|C}c0HiWrm{SW$9DMlEzKHR#Q?5)e&ypJEsP^j8)bWM6l2fH^ z(TdhEB8$L-7?p*HRax?)kDLy=+G#L3s-E$P47BAB=b0NQa-v%=av6{qYoIY1;gnz| z6wjGtX}1LMY>p9&-rJ$e-H!>!LIA`5ivmW4YwB52KnAv8UY8pwORj-1&@fkoEfp1$ zEQAR)`cid z;ju)Zv$fEA1F{*ek*vo81DER(M20I&@3K7l3P^n!A{{1DOYS*nD4ifF#yY{uTYmJH zF3$*qEvAKpUhqk#y|5H)ODfXxXz`R^cYT+E43#OYDeXgFjIH#D#o3vlqFDytCiVVx66DJ&S%w8tw2I3yEbelDO~nxxNV-@QbN>D zq`Jg_)qrjpX?$o0K@j}*>S&mf9vqL&P-h7MjGd6qJ~k0FJ! z2ti&_wYcx|LoqiDcD|to{coVbX0tIFaNkedw-7h%U|h*1g7A%mOqG(BE9k9ZMSw8pOuzF^3O%gYAg*A0L-7n8nbQP0(XznUcjgNZ9PH{41MNSl} zi0Mw1I*gMAI{a9rJX800-)Nx~Lj9UhWkT)KJSC3*b__R^H>%a|6W zTGH5YlolBWzk;EyFt)7aR*((HIH)d>?14hMQmjs7r7b;6mmFv)s+LoQAW0l1!d4DS~x-~%g zDVZ*b5WXl{^Jx@c#PBnKgwvqSaj1gV(CtX;88}r2WsVc9X-F$zm%DF7&H}_H=|i{G z8aZ6h$O9u=7m{`|{YnXK2ZwUn*r34yy5IHe;64D&~sSvP1LBF!fB*}w3f~3N8H*q znW1x0tZmqiP~$;@!6qZ8WfGd)XM7Pj3X2o}6crd_RM626|Q{49`4UjN#4vn&U-2AeS-P0?puvSJf~g@PVu{{TG(?$j{K*nx+7` zl+33H#9W?1jt(u;&WN2vkR%8#p42cMlJ8UKccxgEdxs~agy)y*Nvs#;*dXQ=Gf*KZ z#?h@ylMJ|^sY{+TS{OAn;B-sGe922b6r+sdCPNHLYQ{n`+mcRG{Twpxc6g>(x?DA%}Mh^Z^q&g{(eKR%Ly%F1=8) z5uWxitC0cp#fC&~%=Zu^Kk4-t4lkizaZ4K7NL!Uvvr}b_J&$=fyK`SS+Zk%mf0x18 z)L7V-)eRXMMz>Y&$7s*!xC!6eU2w-bypPjp&ooR(hJch=4{|Elv-1TfZ_8~Kr5Oi` z78W~{HED~OD&FDdva%LpX@s{8Fa_%EF)Y}XM_7^XhrSlzya_Qt-%#3;% z=XPe@@J>)IPPHMRGil?cy1Qv4In;Iw10-V~PCwk(M|*chwZnLkh|-ovu*ho!F9M>4 z#!au~+zwEm(0HQdzGsyTq{%>o539*WAEs46R7y@Ui3L4i@y;rS_a0blnknBj1I>=h znY2X;xlLA;2ljD)_9$@O;%nCT%!Xq*sJO+=0m_GOLldxvJ@OW(E`HIB#y$#0x{j< zVrn>UaNiO!eo*AmQ5>9SWcr~{BnCsJS5wgx3Qh*roU;aYU7aa=_Amizy1A|&WwZ&o zpQirWo|tmx%1iQHm^|lY^e1ln`bkQ_tbF&1qE54GmsTzf=f}pMJ$0HDi}=QixPJXy zO^dwn{!cey09Vb7yzqfP@H=+og%5tw>wJTMok!nM``J6cvjex=@e2!nljYt$9NbX} z*nZ;IEbc@b5`$=4#6h&JB7ruHkq(j&T>MatGx+qS;7OBAa4fO@KW(u>3FG`U%#PC0z1Sm?=C8&WU5j!AN}U-7!D-U zxvE{QnXy&#O3l7f)2^(XZ(7x^eCWsT?Wvhpzt{A7&Az(w?WR@x>cxM87;8_z1R<@O z*J^g8_QA8f*RDXKwU2+F_xAak285R`_5$T@^ZcqAtJ#-A_W4!&(hAZ`_wW8Kz-rpH zp&vXGSv4=$>}wMFwP4|zd3n|R$;zpph-wGg;p*Eid==z^wukNWr&=%knVf&#s+rdg z0d?*?9*ULkb^>QeJHM)3tC?5i!dEUh1huaXoqneI%()0A4E^|-LrtM?uWGNk6r`Ka zyb^ICMna+QlOFT(%9)l2%_~?bA*Wx?0e0nd3l_W-GG99stY=@wgJ+FcixkG?m2bCz zhuuJa<-$LMq!+Yvq>Q3Dv}@IVsis|$g1&s_Kf^1pgjUV7HT&|)s|Qz!N3MIJ2?TuT z^m|X%>~kxxhF0w#)wFXfr=g8=HS4^f_)u&?@H@iLitn8w*at6y@y>RmN*P-ci z58E&OPV>ckS593K%gq-xS4=ln)P+5ma-r`xmh+Pg$I=)GIq zjrJZfi1uFb7PR+?Luhx4N73Fd=Fs+w$IqQ_?|i}9u6)chRIx8rxt&49pY5Wv8n;5V}jZA5i@ z@T4hPN6Ns)Fg1)H1-v$}b&0lM79Mtqb|8{hXnJaZy+T~vGscXYiDvFhDL#iwyc zC+rZP_3onLIo#15JH(g0yQnw@wp?219xg3(1$XRI!5GChC^m~-`1%}!;;s`n`HoqB zbv@~SI{K@DSybnM-+gu{xw|02h9WJne*GD;&tE&iN^2V zNl~bI+6R7vzl~pylc!KKzk~m6SK~MFeAgXnX0gF9;UC`r)kk5R=-u`CA&S4@@_FZw z%lplQ_Qt$(J{&?`ArTkNP4pO2!0+*?DIo@?XXRfuq_9Mi#7EfRazA??m~&ym7?Chy zpyZCY-1xH?g6mhK#7IS`nVv)0@d}|F6XK_5pQQmdT#XVVM5viDjNkfy;tT(gbS3uY zUw-XG!xZn9?#-(eoQ9f6IcM@e1?tzf;1<#l0}cNd^5&sVPHjE5DC|+4N@__is+L8T3GF`f}fL=VtMqcE? z!A|?J($YeGq*14w`;j#d?jIJrkim8#Y3x=Uxz-Pk6$VOo7xbM{{U}t| z+IQBszgevxEc8$8S(CME7Oz!m2y_Rp(-=1CQO#ZJ#|HaKeKwU+kD~a5MPp+-)rQXX zrNTWW8-eftg3sXfkZYY%EAjEFc`DeP-aVaP6X?cK@4h;l!Ec&;$3SodbpG|4(u1#_ zX2>_K-#>@oD?szaW~JV_MXBr6o>}`Po1fjJdD&35MQ&|M7_f5W2n;C{Avp?nL&0Jz>J-?Q_(6ZHwy zf6b!37{BjYG{3zFzhUsJi6}LS53jlS(H}=FnlH)s?DE|Ox~EWogF$W==NGnU#^rl< zew6P4)c^WT_%XkDqU=$r4e~uZzdfk$Lj7M_w2rAMz}0R#kAO3ZUufl^U*3 z3=fPI$BRRy;MJLHf^D1D^$(YV;Tyu&T^CI4FAeV-zHfMRPcU5Ew|{t~Fg9>tP|eY$ z8W>TLTXv<#ihIWT_U$X|Ds$d8JU-Dk63mt+28WBgwuNuLX;)V)xoco#ec_&h8rV0e z){PcNihGK|b=~d3b&2?3a9wX3Zua4`J-BXXEVwQOT%LDW|;#NgKtU!H+1g|t{Vuhi$R^p_H1P9uGr|n$i!d)sMT*>#aJ>N&qs{a z|Grjq&+Q==oMv*L=l7iD3X=>E8W?eSPD1T?X{f0vjFZ zAKsHg&G_Eoq0+Rfk>Qe4wODzZ7ok;isc%mv9Ztm!44iDJ+gON-t56Xzfi|}pnQSbT zTm$3^ATKw&jiix@g-rxwB$n(pGpT$omNd+CD3)0Ysj@ZlU-&pUNDpI zDpXy8K9`!&d^~QZa~U(2GBZXr7BLMfm6V=7%%0MfJza^W%h7bDna>&-GZD&UdqQzX zqucVKNG6|-8}mR%(d#V9spb+$%k{7qiz-I7K!z;JCeE3b~6@% z6tQT`$WYoB!D?xGPHC5099n7q84OtaD==s+tGhiO%9*)PSKP?9p!Nf(ZG=-3MlO^w z!l_K871+-MJ1?D#WXyCdZHS?-0Gd8seleG>1rcqu;^HP^(0meI1lU8?vQq%aX0)v_ zyYsOK1MXWOX%@?bpc&N5g>r`9BJ;*#5vNHwo{dEq3V)3z4Uu?v&Pb%8s4*Y7rC{n0 zWip{1W-J*^QNP{P4>peO2=|A_a>Yz{*9xFt1A4K!JrT>f+!{;f=vD?`9Q94{blBBF zFN2NlT`<$Tb2JIj?i@^w6(flu|2R7EVR%W%F9Bj9$mW~I_OOx8VPGLr>7oYI&{Wm5 z6n)%?o7Pxn|3G+e-zc(A*Tm3JVQgEee}vlpGqsJUT~db_c+_^$?8>t1-=KQ_44!k> zkmXsjG-r%@nw{P`i0X#)wou&CkiyZX5YBB=YV=W{TgzeZidqKG`%tShjw=maNn|`- zj%0TEH_hnMOd&DFL+P{;;b?pwgbU4RJQYGN>Nc~XZH9^94^bTEn0b{0pHcQ}u&L>Z zgiVtSz9bCFUP-4ABuIS>+Hur1r#Tv3LEDT9`nDd5YUj=ttYrP)(9y#5OxBE!FM@*) zV^z9i-2GP|7Pu0kWef&A$F;v~3bK9(sD8L9d-b%G6Q8y214R*3a zpFy??^F(zhmrBqEys7C8_k=R5t-EDeBb?8~ayukLWMb)DDkBLylZrD?Zih1SbFqXG zP2@}?nNOrMsc?u6%%H!3Sjm!^LRW;jToXw6{3Op>hRo`fzwE?v{w)}zS1yv^Ja;)+^tu4rBZRKQ$lS`JPpq^;%+sn zYA4K*;^-cF@m=8F%miVKjTOgwusFohj6Ms3u0iwUj8kH)l5J}!9GCQxNg%2)Qp533 zHp{tyX2V<%Ph~c4xd!)NhL)=<@?$<}O(t>I6iIpOAVoD5X8hcPn|iZ2TDWJpWR~cH zyMbAjjv_0h!^sqp8BKQH#IgH2su#u6xgLy! z2y<=5$$|_hWEka-ZcpbnMN+x84dfjJs=EK)Qh^4fnzdLcLpDmwe(SSgQ~QSAU1EE; zt5_TlMEs{*O%LoHnw63 za=a7xx}F#^gK1Ky zVca*8%r;3cE&2jBS^NN$!{~Nr={cC#_4PxrcQxn=?piBe85c7I8X=CAX!vN(a>9$JD~u zp3ayC<^hhVW$2>;SuLLGW*GF+Qn!MtiT+EEA)<7!&{E`I7ta`3EEP$&6K$tiG(@Ly zH2V<9Q96#DY_~e;F*xG&Z1hj)#MQCPi8RTgZX;(#V{ya4S`4&i+}LKsvy`5E>+_5~ zE*+f|H{BK?NBMjvzB7d-u+c5%p>^XDyObWxR8uczA3GCwZrZ?nl83Oeo}(p0xp0pY z|CC{ZG9(h#Qk(8&T+N#qRvdzLJ>BtCS13-h7|Bc-72RE-*uK6!<$)VV5X59%5rtvnGdl@BONYqG_z3K`%S+P8kQI}LU#!*b`Fb@2(iqG}r zlUr$yw?n?Bbks0oiF69dhl74r_Pvzk>1mS4v;qz)uq~8{g_1dwiJp8ffD*x!aGTi) z`{JIXv8xN^RxnS_$M9P%nw6IeW&!1~vwfiI60BlY^B8T?0OI8MK%BuR>(| z;%OvdWIh^dJ(xJNL_L1h0tDXUqq3fBCs6btIN0xH~O-^>xO)d$ExdtAS3>R`*!trcLm97&4 zE9RK7IC>jmvinJ3U?G8F|3w31g`0?_C;=5%hIWlQQxarQ>@*) z%s6ys9kPy{9y#+ha5H92d=y|2aV6|0u=FuYrpXN;^JIiCWQc zdBp;UJ6_k)hWe6|j~jRzfYUlfs)0x`S)wlhkA)?8GF#Z+H`Z4wWQr3wn=4Q-QZ|Ib zVH`kUuw}QF=Pk+1vQ&lfYSJ7}?5hdPeD;WCtgl9OD+a8!cx95emTlz4=t7pJ@wi0b zV5?^II$|?jW3t}n1i17|5=mER-k7%J%VFwEl4&QIre)8;KnXykX08*`*|eSgWymwb zV2hc?gr2iSX1s7ISQiaR8{lB3Jh)51nZ`&l+B|F}3+(JWmW-)|>s7&>k!a3D5iK3ZWK!wBc7<4t|ETwZZQwnY2 zg}ubJD7V_Fm>Y(C*0l!x|6qg7rh78rzMs4olQ-g^HjGDh?FaAe&OPv zl|h(;nSPc?eC2aJ){zwUd3r%k?MYCR-j>ok3*NPqM-&IP-VQQESc!#5B!-yeeGod; z^QS5iKBVR{FhYQixTcJ%s? z2APPeFy`y9z~!vTbWa<|jvjNNwR6|9k_lI7O?dJEOW12NS+CEGCfRa>8YkuvgWFZ- zv_{rj%yd5L%v}%F`yOcNAKjOnCexWbQfW-%DAwfKkmuwyH$%^ltZfY{O2&24G|A*t z^zVRgq%oaEBzwD>z0sICWJsOz$i$v1Aub*nF0Skjq*oBYNFuuguu~tFHDmJ=-%0vith2 zA%tNPr*tl(IR+yoA2WbZErq@n^OLpn!Rp~EknrFtSh22~<=BcgBCmk^WR4o&4>WQ^ z7`cIGS4@t}E|MFa4H^c3Y{H!gCNqvgFk?tE({l1#KHKbLA4Ud2^eB3~j2=yN<1{ja zX)TqB?bK`6Xp)1AX05|^gdTS$7;G{!Mlxc^KI04EAzM_OVAxw!YV!!SsW1&@2G@$0 zVfh)*v~a~|9}C$-n-7*giOQAku;Mc@Jav$$vD`qBnBD5J5`h`5la2q3mJLYKwtXB$ zO8VTB<5DuEWGEhMq+{V6-4vvoIIQsWV_V2K2T=4{rAQQS?zC>Vn1$7rI7H zcBi{Wa`LZSBw}{YB*y_Q(@s}DiX=%AMm(kAbV$7q;y%#Lb-8tTLP>ajIbFo^ zq8uB>iI^=|lMl@(Sv`p&$&L`gBUJGnc}8T1?_OZ* z@RZITD6~s}Pcf6>9XPj3lmqVo-C~wp37wNR9;)k2BgLV&tC=8~`*8Z9b06c~+-mH= zgG4NCc?64jjpPHMsAh0;)Us^@q>mUp(bCUZMS&hF;2Oi>sCx`EDqyNmCX^r-+<}XA zR?)d}OJ!(w+o9=rwpUs*7HQ-CIrz-zJXS$kxe< zg=*##a-?W=B^^7AMdq*Ru_)$pKbC1U=d$^Bb#aGsRuhei<&@i0d<9ZjR)WT4`l)rsrU z;II`B+aXO8`?a%-v0e7l^k3cGedfsUxI7D!b6#eD^3Km}6mpc6XRlb)8P9kS`;fCi z{lF^u)k`R$F>t4?l3%@n5?^wK7jQJpk{=(ufX9zq_BU=EybGs^Sf%*#C@=P5U&Qg_ z#@Th3@=Ys*M}`Zdr4-)eQu(P@j=s{9-PZf32fzLVm8r2x!JjFO|R+E4W z)kA^Q~t(gTyPH*Nv(I@}OZ4200onR|}eZP~VA< z4}|7OGY3jMhXF-Xnl%Twa)`(f+$hl2DQd2`L*YEi|0P| z1ckCZw--e_%iTv@V=Fv=>EQs6KUgQ1Gb9UpRGSmwjWPZS&-@S8BfZlSf|Bd>nhQEN> zIP}ahR7~C)IAySbYI@Rm<@Y~XcA|6AI5(9DOeS7ETR)Y5_2|i}$^5HR#;Z+F`W|?? z={=W8N4P`KpPovbK6<8W67b;Z>zdwoo+=xs+n#;!gD9yt)-b9e?)k&N;5(HMJY8xz zdhnc@m`9Df0)azfzQCCiq{^Q^{Gw1jTWTd$$(Hl!Lt4%=A0wH_e)Ja?jy_#wp^sFe zJsN#>bSCN9os|Zl<6wZZ;R^K2zqioWSD>G<#5fD-TvmMfeoKtM|5v#9+?@!F3pG8^ zR^sJh`ZojA8y}>1kr3W?PDkE(U(X*#v6xECK5_b=3hG7GG&~j^VU{lil~XjfHhtM>!GRqOGA?n zQyvI0bn4KpC|xTNbX(x?i^BEU(tOIy8aw){(e%{eI550KtNew-C&`A&Oi9?@2F2ev z&OohDt7K_{5#wmGUZVCKTeO`RnmS_J#}3f|Dr~*0A2@+AEisRw)G3JyeV(~YcwA_E zc4$iUIs7`6FGWz-_Vm!yG4ee82dZA$FufnAkxl>{&6aGlO^Z>`@JKlV-?tHm5BOtw9=C< zdp!DdGq4zSXmPgZ>|%V`zM$tlXKPq-12qmoG*Q>FYugD-v*)Ia=JXr+;L)e5t-;iG zLgv`rt~r)1-_li8kIRFPx0ifY8WL=H-(a>`yxu3^OGpu zC@o$?3BON5i`P-oEk0jk_j?khO+xoCDCs^H)#9fFg4=*nP)Z$6sT-v@aJ6bHO5IXQ zp+sxesw_%drPPZOhBk1wqr_EEtuj%HN@)NkBm>~~pwuI!yHHv$rRxFp0;d)~tm68K zGWtZLdX+=juXX}9sQrKe#dZ8VbqugceFU&seF1R3`fI=i>IC3I^$cK(dJeEv{R(iA z`YqsMSsyP^4ONVf#ehrI6@bgs4S>tl+W;?D-GD1p7I2Na18}Vx0K7_#0bZ{j0DOn~ z9H6P51?*EV1NN)m0uCsq+k$F991N+YfP2(Rz&q7Oz`N8Iz){r$SX8$Hj;URM%0z9sE0REXO0DeeK0Df4#7w{wM&j3HFz6JQ7)Q2A4`GBX@<$!0@D!{X9GvF&~3*bMgWU&oJasEspGZ8K5rGf_7-mf3qDdc}@sv~OR52%5s#0<{7` zQ(Oz+ACSE%k8>9S-2yb#U z0UlS_q-%iXGeIBENQhj3_E!VB9>_X8)v%j03G#VI{RE$N5X-&Ud1r4%Y0g=9_4suO z9$O6ejm`s>`!_1(#oJ{I;pty504up_^(LmM_$8^u(Y^|)2?tG`8wGfx9@iZ1!pvnX+1YCzu5CBJ$Z zCC*C?$OpRQSKJ114r)*rtdd`51kP>^stG1w$*)$R6cyZRtK?T3QQ9cDcB|x9QJ9dc zhz7~&Ecw+KaN1UPTP17j+$me<6MPzFZ=JE+J#}b1*zr1iFu-;5#1%NMICVH@VUOZq zo7*yRIcuw1^%X=VSH3 zOEWdQ)}pg?anTR){K^vf^PsjxW&-fcSWj^7VQ{c^=K=t^s`PqdVr&ejwVC39OOu+t zYpGefsMJGKhjy36{;~)`v8rSr=TWyzvotNt`qlXCD2v^~APH-+oi}?fO?b+ng=gua z!cQII`JrX<6QHg%`Ic$2&tY=;9gHQryoh{hahn)|i&+z*1j6`y~71N(OGTtBh5|C_+|t8uikug(Gd$H4mG!P6`8j1GLf_)DDf zU*}LFuczN8zR0)xk7}rs*TcWksjX;{`;)6O6$s`28ysxj(dto);K#ps_h&0?G#!&8ZtNU~#3%X;Y z7C5ix7@#d_HJ(KxQvAge_;Out@6-YB_3$`>e`Iv(E9pkbz`>3NvRvNSx!^Sm>VG> zPoLeGEvo2XsP}Uf_AzmEHn9I*R^SR+_V{B3jXOgIK;`vZA=FC!=?9~~x|j`pmU-Dq z7Y)bY?2El)KV@+vX1yx|Pz#*_I97S>5ol)s-U*G90XW9WttK2T*vy>)Fm#~>|FA2_ zDqMAv0g5|!GoiaKcLrd_@p_n7_?KPh-c$do&H&>t&%4Rh#42ViP4Q=I%3DQQ*^+O3s%2D>CkLVR@HN$ysZ9$nwr%O=D$s z&Wb|gXi8q?R!6K>(x}3xJgf0~h5&6%n?=(|U$CgDZRpl?fwWpHRbF+&@!LPCHNEGn zmw&~kFMk&;)(b>aO3s%2leC9~$gL?kYfUFDncuHzT$&1vqbYfnTTRWW=|a$XJ%fO@ zrVB*V_ovi1r3(kRHEoerwx+w^ckVk{)9+`lEI19E0-vJrYEkqlC1=Z>oqW>4%dIIn zYfX<^GXJ@zacL?v6`Gb?eP~Wixw7qVj|C1*?ivE1i{#;qwiYfbH0<_ns}rK!+3nvz$!)hFiEbTQ~E zHC-f{z7neLmM$FN)|7LZ*K@VhdDZbpZbbTE7gyae@;{vhPT|9rrb|RqO3s$wfu`KC zSNfEkwWg0)GV9@BXC#hOp>Z@NuX3xuuv!6$%bk%f!@bwD7tr?U64CUVXMb}DNY~}o zbSdy&4>zj#R(o#v8W^yP$3F7p&4R1|k65giDn>6QXG{JW-wB~}`;?rurjJ=NpVTxi zp9+nmDS4G!JwB(Ve3I<-i~`!4E)`9SH;i8-_b!)Kv?ewEZqp~etu^g^;v*jwWCi#e zi}iBRl#;V0|0a;f0+l``XRYbiESdk8rg3R1G>)d^Rc`gfoSI$^Ij=yr5e(^0&UMoaXN>1tc2ZqlPU6GNmU4XWxLD6*NkxxBH+VbVrbT!arP1iL}V4$#zXHUL%wA{ijy=Jjqt%4Y*l$_G> zPan?-iCa^0)|&DS0$#rp=+;zdDl{#(`jOR28dYd|1yGefT`iiXfBCz(rnaG5Q?5(w zy_HwpezNCzt?A2GolM#E=T~d^gnkVk%5UCi*WqcipozWd zMvdkF^El_>c9-E)XEL1V>ckrn9qoM`?G&)1orho@8#>y-xTD>AFQTIzFGg6M`+h&)Ql%fZy#{g79xa#|q{~%cY!dn^R1&4V! z(iw}!x6(;)5S)W|H#*vjLvWD1z0uK*8vOMN&1k>E0ez*beSIS%#R2UN=kce$wI3Rm z??#KdY(4I>TImN!`o=nM$D^5w`?5WyQ}@$^3Ob(C+gx2I-!{rQOSTc#`KGSry)HFw1xB$oRB7jLmOV@gc4}NF$X(V!8ATar6%t8 z-I>{))x#84XYby*^WXpe@BhDdG_XF-I?w`e%pQZ4HtA&^Y%8Ucyux!BIP?o zom{k|_qId#4UcZ?JcMN?#s~OQ93C1v6rr~qLf0JY8#vlOT%71A^xyqK&$6I^U~8oM z&#k2qoLk$G7#+VC{@#LX_k&gWF zycjq(DB4F0BZb3-PSBoMIW}y#qV9bPx@m}+TsEH6OhbvMR{`oqKrJ)X zR3c$Um7Jb6Q_*Nf%VwH!?<*|`v$&VcYWuS*Fz`bRG@FTdL^m_pTsJH$qqbuFJjUzq z?He)adq^wS+K5{h;$4SZ>#^o4Gn&(N)5xaHY|2b)(Rjqv$W&6U^bxLPRIYRrrmn%% zwPr4(rOkwr&cqbG#L?cI5=rL_U26gyN%z~7lg(=+n+ZkNQ>qzFYZ@3x=hWF7?xA~3lQ+`&wyZgnce-mk~OnRx2|Q{ zaQ6ea+X$s5w5*cW)KogM9HXDZXp@nQq)j7kXj0JYF-)DVxtdCE1Q2C({nbT8qxlq; zXy6JNTTTra3}SAL*^`S$XmDQxNKi^f0cT(@t7Nr+4d#u+y-0FslYK4YJZdWYM zESLTTZnrGJx%3^Pyg-!Z0P&dk!%q9OJh$YPw0+X&7h8CeW{uqGE%&4AH5Q}=ujIvKNVf+foVT@_2 zbbMOb&w-{U7Ew);2)-y0l(k}{U?d2AG};N=3mWuBm(d1sgSxE)qn2_PGghL00t+oO z7NVwgd;u70;j3~v+TCAapw$%+ZDG*p>DPg>D2V!xFtp5wClIyGte!Ddgrjan-9xsg zajyws4RUf!pGLM0!M|F`rV^9^FKT+#n3BH1zFM8p)Lc5AJs=}QI&NfBX&JE7DV>J$ zE-=%QjVH8dB5P{NT*64FRD}vmW4#6`C7Wgvu^!;kD>M20(L}y@q%cTVnF4HMB(3yH z|0fELKFm>LZ%#`eh$+d4uBA!v7|Qf&1HqN@3gM!*ILr#zEb?xV>~yD6I@u}WZjEk0 zbB(yV0k?dU=15`mFtzv|U=K1tXyfCB@fhklR8-Vi2ypclPG+1UZIx)3E2=KTOF99o zf~TswlF2X^P;AHrdMdqj=gqkO61cpfB0lDlb~4djDU$U1K}9tgru`hpMV(m~%^x2w znnkMMUW}|ZqKFEHnoKcesMgwcmL&?WC6IVzH7-DjXrpPyqb2Q|(PVfxefQV6y+Sv# zF?d3Ru{K?bf;1>Z7!io>H?p0PRCe1I;tpY`y8r%So&qGBKGe9Njns18x{PXCx}kQj zakSfAD2$Y~dkVviQ96ZVAGGXyz*?(r*qTN5N~)A9_0~$g8G0(&Lo;|_{`6iN-gb<_ z@S@RlzHhL1e7KlLtvf(6X%jvpM=K@^3R#FCQP3!_!J?K?rgOE--Mj*{m4uCC0lk?vKS08BCKr z4dc3zV2((7Dbd%!lZ+q8+}X6`g(A0XkpdpVw5A@UIoyUJId(IE;kpBHO(#Jr0T;=B z)G#>>fRSX6D2 znfgAN()Jr^Q$t#ygRRCI^$2o$s)tt5OTpa%sAj6u7>9vbwnM=Yzh6&l8B~shJBYdS z1gubpbnaT%b(DJKBKz${Vj2U0m7M+)i?|k+DUu>t(W7O}Xk6DclxBc6b#0%fXGlHq z*5zo5tRzbjZ@w&)67#vVelUfKSnHAEp>%a=%A_91L~}2akrSB1om&`Qav)Zgca)@( zRbwT0APtkGA(5~vZ>pDO*0j*d=#lxhd>eNg;ws8!E4KI2N_g7S$RVc)Q%XUyoY%-pDifzuQ#!PRfGp~> zv0QQw#c@06Yc`^q8BZ7~#3IIkMbYqOF`Ng>(yUEr)f)Gbkr`+Yzin%5StN#}27DK0Ic*0o6h`sCBH6bkS@Z zsM!coU-tg7Jh`B*g4iWtA?*MqP+8BRzpOZg^D^=6XYv`CWOgq)$sSZ~r1_ltj4@XD^lhy17VhKvV3Mg3@F~mBn z%LGJq`Vn=U@W@11&%K$Q2T8yRjuo-JKqX`rO_TdU^1G%~1Hw;H1E-Q!4I-l?ftF+9 znu>ad8(>$ZLw<>=miu`MfLWd-)qte9tk_$DV_6ZJ%;d-V#`}u-bYT*wYpp0Z@}&4a9F#RWstY4IO3vpAxcwttQhEQ z)wJFc*$mgn-TO)gF4rZ93|E-mXxQ{+k@}KE%Hw38A-5njlm?I#WZ7V33@7?amuG~* zj?+Lw&pIU2URW9Wql&aVT0G^~T;6mbLnX5n6<@0R4o%G>f$e3%x3!c0Rt+RgNVPm) z!Bzq1G-c;5V%#iBSpv1MSQr|zE}3t9nUuOm%aRbv&X2t%h0ALiuHUv>N{HI2Elx0C zxzJ4_jc@Ce(j_`xZrw>icoq?aG*OxAk;0kk8ALHnw31;}kAqiJ9<7A8Go(-!UdT(T z7X9T;DCYhlmvNP(zX2NTJ>AKG#{k5=lDJ_9y-GS#3g1Y`R4Hj`)YVLn0#`)2uf}L( z6im&e30Al;tLf#77SpV?N#Y8wP*Jwi{W45NbC}#hb60toeAqU2ijyI$_P&84V!BzR z4nt&t4!^H3JXrR4$7rDyLcK|-M5d=Zwcjx>29P%}97v)7u>uhxuXpgNg+V)lFa|UH zTqEr(myOvcRM_@e^*OmGK#j34WoI<~btq>1n*3Xw=0Hp%M{c=GpSQ;_c) zr9)FV^#+dDG%FF%OgP79tyTh&d%u)C7oqEMTAh)}S(9i89|kX8Y}$F3tk#t{r6^_A zOlXO298gA>2f2nkky2g96Xz)p!wLvIv_stD zkk!ZoBU>Yqb~Ne4HI6b|*vDe1qH!o=&?tWb*vdeq5TVQwrOgS|$Ejx0ad9ewS`Kj3 za(?p8Y>1F0)8QhzBIVo``XZ?uPD$yH3~DVzq8T!Rmd$=r@{~igVf18+nUXB4L%*jOPcCgj18rdVQfa$sIVLaeyAtxO*)f-pG23k*=0J zbJs)mz6n_B$68AsE>oF2VQDmQGHbFnzJT#Y3bRy1 za2);=CT!o^7J7$daPW4l19?ftnEjoAZWh|ahOXePvk06sd8u14J?6?c% zK+NR(G{za|S(Pw6^QbY12lf@Gjl4lFgR}*j!9lyKVMO2!S!FuUFUygip|>VR0dgss zPZ5Z@JcAq^TBe=uTogf)AhdW=!*oc#PvE+thjqDqctT2eoH?Jwa#4;AVn#`nR7i?( zl55c<11@N4ln2i^CyJ34Mhy)(tr9Vlx04UWD5H3SAqFKiV~M$iYRS)1dF^z@Bu(n z)41uioLdj-BN|V%tjDgBffyNZ`LG&w`!KBnqEgaIf>>|`EcRJNc*C z_>5Nj;=_Mhg#mnK616X${IqkCt9|j2&pQ_c`=E0{uunP{1p77 z`RScsTZitQ`1(XgsrQajFNWS)c{hia{~hO(|FfvdUIDGuqk^%u#n&TlMC%ouXsbmR z+8Uvw^@#&${bC4ht^9w;I&mERfY>SO$#&_(|6wF1-hHKXr%FCYWZ`e%U%a~UFJ5az zYcLELe)-|Qca=X)!WXQ?We^y=IC*cuH6ds+zKMY&`D1wxhzjA7#Mg@rb}t~VqLGwv^ZTcK$iK*wSp`huL&qJ;kmM=Q&h&v5u=Tmq ziL;(^;0tRfE&OA6< zd>0OqtjQQAZTrsYy>FfT^%bl+xf|w8Z<_j_2T#1+;uabzbGz*&@Z0>6XQvadVIk5U zyK?G|w=Pfuw374BUA}VVyopA-#@tn10~n^I>6U}wpeqOhUBzb(S3B`-6UU)?tM>$Y zJ22)Gn-F}h@VEuN?Q(28di+OmpV*BaGmlT)j^0+;W7e|5VU@TZy;{M4Qm>O?G$5kr z*NX(&2GNT)C>}uDB0i0_RXmQiP5eFD)#4jy*NE?;y-vJ|76k~XS}W?&hQvy=>%>O1 zHwX>wda)Pn29ZH~qnJQ@lbAxgQOuy-BtC|Avv>+^yZAEN4)F}yTf~cKw}|hf-70>D zwo|-`cAJ<(yF)ZV_&dc~w7bMQw7bPdw6}_#Xm1leXx|}{X#YTD&~}LfXv5+zw2Bx; z+bxcxRmC*gi1-LvO?(1vk9ZPoOgxJ=F208L4)H^@d&E!B>f%kbNim1k5O1N~EBtW9 zv{->QBQ~PVicYjSu?ualNTA&>-i`KvxC`w;F@*MAViN5k@rP*d6px`b#Rt$H5l^AL zTfB_+sQ4k;5%D9m$HZB*qvAZ;G4XS>_lPFwbzH1MJ0aGhEy4yWlV2F4On$t3T{-zR zImxe_`33f)6vR|s4`(l>$s#4qN@ z`$jkk-YLgD{bQUoi%a6D8f_Dv;Eg!S_VN?~N9O$h+Z^_%zThQiN`9=-24cOhWU%|S z=2T(#ZOsV+{x!g}qNx~}=F%W+#wJ?Bjy zVMjK0Hg1sR$IhXdMB84JBbYiKI zRijT7(DzGm){2wp*NG{#0dWd#y%;at$NgUDouMt_z9rtqaNf$8_rLPbAWl_!>c@eS zo=Vg%PhD2&sp^r*(W5L>BLEBI3saxxuJc`phUmBute=-ldQdBF(o<-cew#hV7%4By z7}>Lp!jMMssOv>h&i8q#ZQB{}uFR5|^8wX_?MlLQN`j zH%j6;S+vfbJaOq^K)knMCU@!N8-h4;m!?i!5+@F!eR$Gy;jd@3OTT(WPP>F!cXQ&B zRqHlC%0t0ZE!X=u*U|kc4=B`a4+Z0U6SSZ+-BaIJKqNR$r|;tmFQWcqDnbMF-Q+sC#7-- zmxgo?0=Jab*mmYZP1)EDm$A=69E13_$(%ZXo=+ISLgQ`|!|1J-J?>yFTk^|jUW*(` z)1}D-By_X%%b?u}MiGjY+5&SUWw6g*4R6+*grlsPKe8=sO^Wx1fJBDzW33$Fk z_!g?)!``Ldh*~0WVIDu>0lX5{F+6x~Z9rTB9E)p_T9s9k=%A|yOjjDDnm zZ<(%@;~o7x+p#{RFi(=iudM;;mEdB;f(c+$!ibK%H9}nFS=Dl`Jr!~;zYR+&yq*(i zDLa0=NL{EK&pdL5SLKgeVubK|cr3ymcNdC{J4@ZCHato@~o}) zEbGTDA0LLip8L@{@~M&YKK|MN?W&kmVNqPq>j^`+d?WW0|MdC`mVBPuc)O+CimAGN z<(Kjy<($d)c~yBwR>V8E$l9KmeL{}x*e-Vvu95A#g z1qSXU9_BWCgp_za4h1`>qS$CVS2l?2=e%nc=yAms%Fxp3Gd4_K{yIA4$`YoeQ%bEo z>m_@Z_2bqlRp9kJf!3j`PU`f}I=}v{ib)l|L;ZU_OwW94`%^E!6PpcOh<~1)`$gp} zUa?}}r%8kmTSz%)@}2MU=j}GkLY+1P$m?;uf3$;1(xJ6H-|6kL@o<&}b*vJzORD6; zlIp)W)8(%t)z!F?FeRyy?((evuAJqH*g@R!dR|8BP}(G=dib4B@nFUEaqFT5<6h4y zw9c#sIqN?r-t%GC6m;!bS&p*&@OrFR%Il>+4}g04Z~N{?3c_^Cw9*N=1(dNXvkdk= z)(HP=CSADC8gOP=M++7}bYybk2>)|@tJomV3^w4HpmSGw2@6>6ZbVm?sfNuhiLiP{ zDjBwSAzeGVHbhcgJGOLfP?WF(qZ(lq|HBl%uWMUZr+gc}s}so^FE7hqzGUF)V4AC} z3U_Vo>Z&AGt{)EHioby!ySDG>&u=S}Xw{S!Kk^kWhlogbc#qoC6LxS}fS_mx>e{Xy aR$<$tXEJVSAvQ^G!lr2ArORspokX;Mnn<(BMO2D{t-l3Bq&J?MxuX2)c8E# zxl~nOcGZF1uJc{q@4Y_n`@QE_FO4Yo7k{Su-B%T5R!RP?wtDSm{H&cmDm(b`#q1&b zJ2kJYw%R)FQ@CmZ0b$?_y*1!{Ks`Gt@du?WIx{T?7Vey z(rK;YN9jWcEwilYL(5!CcU0R5N-OPFCvF_Jn%%>=b9mA&UBZ!{R3_!YtM#|GpLY%) ztZn0%<6e`0;?C~wwoa+G@lzaiUNn09-M!WB&S!t|(&D`GlA??$GuZy^+sXe|?M}1T zJ?`$trH}ismmaLG>~!Li_6hBcH%jhN+&SpH*E!rPY2AaP&VIYseBM$nI96%yEBag8 zUaz~?YaAT3xBHYgI>#rC{ZbI0v^w4G4ee8JZkJ7GyScyGe$iH%2Q6jgunRW3rIqR@ zODne3Dy`HX;NbxOZI)J^n57jLV|v|m9<1T7(2a6b>IC8r)eK zv_&OYyLay)Me!Pk?fqlHpPfSr357_tW_wF3p;lViRNzq;nL78hAs=fhN3ER;w7&Rq=N!r(_m z)o={o)C7D;H=U~R-6%92LwKs`U&pFfv1(Chu5F8o8d;%mE0w?qgE`Fo!DU66z?>5r zo8dAB{uTps!ZvkF1YuN$X9d~<#=nE{>1U07!PslRh(D4NUN}qlWlX(-Gp~zEWLd%s zeG$6CH!7ws3<~AQlfKN8yy25x!`7SFdRs(+;R{>!gPLmP61^R%x*vI#F^hF%y^wNF zF|SE6ZPl_|O;mitfB=4^g&)P-%a~i1+6%UvP~8-!4lc}!Y4}A8McCLjLe)1k*VmUY`s)~- z^&H(7p6MA<@2_B(CcgPW7Je0rsIprhtTFn~*KouPPY6=A&0ugId&fjIGIjdjpJ2(n zRFn$IAYQ13##FjDDMi)IC;ei<|GLwQrsWu?|`wAwv7%kP28v~E>H!}cJ%!DZKR z&Xnr=>XtB_ic67yf+BP0mbRny!meK}Q$IxzEOJ=yFmH8x?{f4nv(ZYYz27nqce}SR z`hAeNDmHC19B>lT3F#zsXAARlmZuFcQ>W|FSr*Rv$^~20bL1pXjMm~%sGiR$Bkk+p zWCBqwBkdXn7P0xVFg7*A3lYx<5W2!NW@wU8T77#E6lcJOwxr2FkLhV|L$y)~$sCmr z<_48diN1p2rG9t~LUoAv5O^O87e&Q# zRX|`>1nPz%5M(OZA+*g7;|;aV;2*7+mOYKC4(Fq!J> zg`~fTp+(QMkvT+Y1wsQPmQ`(?I`{(SW&y2GS{5+W!OKWMqiX2d)BzvH>RL_p@1##R z0z->@Gu)D}iDU40e7Y337BkBgumXy$htrZANkf37iG9nmFl5(E$O@D9>kQnI#N-F#E;kR5lk{tB}*riNNQ0rNV&WCR=)Ih56PYL1HiL`GTMz+@ED_vi;x@+J}1B4?fI z_%!&N^D2fgZO;YxFzC-EUneJjeu@*BRzN|S*-(8`bwWX)C*A+VN;s1}sOH>_PiLn( z(f?DRGoOP`il#iY!9$V5wVLa$GrDeL@DWyDvpi-`Q!{WmF`e9CD#2_G3lj8s zz^mLUmGlWrEx|j?0QCc>GsUXp{MCeWT+8BK=O_sSnuTF7k$EBcqOZ-+vO02I`0i1g zQqWfOxTmd$14zQvKTIjOnt7JMNOS$rMV!dMmg%wLM!qIZLefR{UNUy;wCU?0F=bb> zF*@rjU~E#t3EAa^VHR6Q0;f!mB-^t{5~>7u!C<9A?}E-n3awNAm*LqHmIn|9@=;N% zAS&^~ZX8w6fT2)4o=IskK5iTw?YBitXQJB-aV|^1AHk@sJiP943O8~)7@4Gp__Q?v zh#VJ!t$@jZIwrZ(I+h4TaDj;=q^bE%SeiR2!y9rz>STl{hU>H`?^re>35bPT9yN;k z);3*oKml%GpS%Tmy>{XeL>4B8aZf{uBr6|cYIeFzF|=O+Fq7dSQ{6PLd}*d51IrwX zahpJ`BVr+V&7{0H^C}O4i7MB1k}5;OA{Q-TihSsDXN zrYz7GKw~k6>4NrAqt}Sre)j~uyfzu*%4t>8(Dguc1?&ApC81c>rcmCP#{lA4b09X6 zg(#i-4yKn7p=q^BR8Q+P(xN*7mZ?0}1dOgxx@*oh@fq29Bll=|E|*Ar!uFz<@)si4 zIVAd+L_K-qprg!yrFj+xUf^YLFJqjLf}5y^3?61I(_dKo6)LLqJi0jbH`l*bASF5B zP)+BSKVxViGS=HH>F%#Fz(zr27P*yO99#y_4eCd8jByc5U4ry@+}+(x9+_aq16Nx& zLNY?#6>ycLa`{ZhEu?-+4beIi@i7r(hH(w z6CL4~Ai#J0hD?@NZ#Jq3*~+oH{Il=$O2G^hHKnQnmQV z6UTRty2m2sUOGbIL>xcu_F^*sY0yftcIQ2r;7Aa`q>KeMluM-Wk61EZ!+AnbhyQ@b z>6+;vDjXChB0tlTX5=I9%YeQRa!da3IOdhNLW5C2XeuJjR-6o&ILdfWn_H-R(M0j+ zRo}$gVWd$>P=b7ZouK}?RXACU(no2gDUK%5OWB#ufH^XskxgFH#&tJBtCZ102)fK2 zh9~i^@1!SEfC$(?tob{vW7phpYW-FSx&0e*%a}3`J88Zr@{`+9OG`2mE7V2VE90f1 z-xnbmW1TXGmJu%8Ne>0MLB8ps1=OF+aRg@yEHB*1TsWrCfS30 z2jgg;>jv+QdD}!5K184iO2_L51^ElCrP>p!vX@L7vA0q5(1;Z*(%3YoqUljnK-1LO z$ph<`Q#`07@Mjn=Qf+xP$J0K})2Ox($dy15iDW4Z?Be}F{pvJVt@Kx-b2KHw9 z$pwj%1|-8u0-(eq_7^-;3u&ej&BU<6i;j)P{z;pITso6n2a@3Csb9evlWG|f(_Ls9 z*Fb~xj&ERnJVk$w2MJb*hoChV!v3% z#Vt_n+=S#9J=BCJ3Ao^?C|ka0*wn}iQNsYuq;w0~X_}!LC5qdG7?iriLJB)t)9W6& zr8g94Hba#c2|lAU-F({UJ~P@5&N~6%X3}a0S}!b2zXV09NG7n#_HlVzhvFXIY?7FEe~$ z>1bPMpxJ%Ldrq^6cmU9uwDE>Lxy+FrT6>fLN$lGNWr=44;q@L$PWD2P*BGc= zJ`IL-gWaU$#j51FMxF=4R;vt#Egb>cQGL}W6+D4T+BSH6|Ix5FRx@wRjaipF>3-B} zLDq+l9`dU6z z&=4}H@~L$+tsR+hs1!-T(iq6JEtP^x`cRKEcjdU%NnKzQ+|2RZ3|Nd!d9|he3eOs1 zzjG{IB|5uK&E=EtJyE(Dm%!GVvaH<2XIuRJ+VcxOWRjm}ZD-$%e1CNpk%;yD_uoHI zl)aIQKIX~3ggW(oO0rdX+{D*RtDV-jZ%-*d0G$zh2-g2#>?N!kxwMn6{h&XCpN~^LMcfpB@Jn8>^3I&-m1N(^#9jB z=ggVW$TrRGJ^Id`{aAaQwbx#2?X}n0qls0utF`m*?EY=PQa4s9xz-Gf4fYpq9n>YI zb|Z7vYn9ATUz1uhFt~es&x(xI(za5mx7I23;WfI(g^wQ9)VXGCps&zpK`GUY>=yv@ zunEV<230Uv4(CJt4^0@Wcd)57xTY|8s9;s#^AzsCBEGAYs%urstLCaeQ|hL2`fdl@ z2-;8J<|Xtsfxa?)8$r-(fN5K&)P1=9YC%PO?+1=$ZAyI^H?P_7T?~9b0L(AeD;3zF zRIQq)@s;tV3pn17cIPGIErVMQfS*=^E1Qq^0`7kU?j0L7#@Xnr27UJe<|CVw`W5ck z_{Z@^H!JnmxOvTnuYiUVfVuHnrT!SVM=h(!zu(}wnd_9g=6a2fa?w*^KHdp9SBFw} z1eN*;Zm+7Zh;J9*7KW4>>(uy~X2D0ed10mYN0j;!ZjbU+#1{qJKcf9=P7JQu@cj;L z{|hjWbSu@{qg11XuWa7t0q!GccV3m|SM=io;QT=J@CCq8g&wN}SE`mWpTC<4cdT5G zz65+{0QZ@w9?5KSa2@#fb-?`d7Ns8Cs?>aNQ1r5lFZDoEAJe$3v=UzypmA{}xC-M~ zJri!mIDP?qR|BptuAf?sk4p0QWejjFV4hFn`Kj6Ec^lwmqW|8NefO`S$n|d{Uv&rAD(fl`n`R)#-(mN@CUQ?b+%&yGuU1)b+;PVW=d=UWe z0bI)s8gjPz-30nN0CVeGlv=;bF~1e&U!KROW(@u-zNcgJKCG`=f-z8npXklE4UxQ?Xvk-y1o(LD`=m(>D>5!hUU)#W~@)C zXL0+mf>e@w>hI#+8kdz;lKYF$xcma(Jb=6I0^sHVuCo$c8UH>7xD?<{ny@aEML){m zmZ1K1z+40$g4em=Rs*K{0^r^PnDGmMn*_|~E5l_qHA->0`nCyU)zL3mJuo=bH@>g1 zZ+Q1LfUR19UR`@wr&?5b6~8WABEwepJ=yHaB#d&c^1xn*!y5%c!p1LJ-B0-3`2!0^bf?cw&#yE>zZUH$vk3?3R( z{kIIL)%!>GjqDi-tnS_rSRIcI1XlO9p>PZC9f8$1L<6gnsEhPQ6K(78nU5Hqxo&3S zonde(k_Qh1tGh;Kq0Qt7AO_A0ftl#OA+WkXusVw2M0R8%TX#kG_wO4Y7(~_O7e2&j zA{@&_jLY9xuXtB@*MF{OC>wM3>~hXUS7u#n>v|3))wh3e-+?@{!}~c%FhtmD^$o1f zh6Ag2C($R1p z5*CRjy7TE|E*ni4`BW&HUIM6M)M?lX4Dou?#aFip7%Qd{^2qFo1L}oV^5Xm!WN;a4)knkqzz0Ma+p!QEt zJ13Qhr1Pn0$`D2`M>Xek>A9wKC4k7IOV77-EsnzsUBSv&swl~P z4}8% zc_R3_ASljCDhVNh>7&pdKwDFa+UOA4CNywv>o8C~xs`;KsK0^-%}>olP3d?L7`)I` zc^u{LOQ@LVFo-5IDD>28Uy&6={eD!oQ~YI?&xq4ecu>EetL&ZVQ-onj%<(Ns2>7K5Em#waLn!C>ZQqj94v zp3NJHTs)OdhC`gdG@e&4Trz1U5z7HCTA3Lfd|Q05uySzdS_245s4XT5CV`C#@J#hNqZ*k57fb(mdTyYANRia%G3dh8}q~nk(XlghX z%4E0}kZo8CV#)N{jaQ=l4UF>g68o4-n2Slwu|$&IT2N8V0aJbsp-`6}**|z_xR5V! z3T{Qs#i=e>g;Y3^fddTMNG+dRmkH*hz3fgQ@kFATR5W5gAez{o+$s;? zD4yjgj2)?T-oQFQjk*}m@WZOblHC-8UUF&+pc*-UsWC{D78Y`f_-kWnBLi2Fa5tcD z8An5$G-|UKg51T4<3o0s59u+e@p?7-Cp^UQU|AE%l7-zyHs2ME83ueYz~*Ddb|aP{ z^~773qwLXjv`t(&FGBX zlc8+5$CiK6Fislcansf2^iri)IvPr3^EC9tdlrxo zrnr;MwiuVMPQA4L?ZDGy8z0k}@}YfvDAw?BPcpfc+O-Uo8v(sImg4Fe4I9`PL=*Oe zg=oyy0brgHiDs!*oiMM`RhV=&nifDhq8a!PY_=F1BIPSJ<=7Gx#)e0=8gN>u23|`F zNf*Voo--T4T9>_TbdaOqTs2{jv^DFnB!u3?Q4pHzEDa;4>&>%KB8n}`V^=bl4$G7f zbpwMU7P-Bg(<_0(7w@v_D6GptSe=*?l1txx4!XKCiB3u+$)1BnA|%E=Ph}-TR{+m! z4DIFkFN0)zV<{M6SUxgp4Umexi1&?lAv9uH`+n4W^1~y$$A?G_*QmO}fxcTt_YLL? zlr2h8$w0&j>_DwJBB_xBruC8TpsS7oljhXZ9&rG*nVlJ~4P-gdm9tz75^W7;Oe|c; z?um(KPY$U?08E*q#iI85qq6&nL$P4Mu>T^1;o-)kNm9T8T#SAV+ENZ`0imJcTH#5B z;W3FLL=$U0T~-`UXDzIbWgfZm`MDW07d{fOkaY#@C*buwL8L(IBXn&>B_ zGAYaYi^|i&V2hc;f}XWVro7MP0trNhXD?O3cr11c%Z29me68W2=ywV;+gKw@wJ!k&L>nSP zUTWbBj|`X=gf^JwXR*jvF56>$gy~aMn?|h z3nYOeRy&?Quy@zOjgPY(@4s>Mf60HIYdmUsNy*5%hA*+z@eiPXdZxG928@X6qmKAlt@Hw|1Cw| zlr)l-Mq>w@5Q!I2CJoA)L?~jS8w7ipPvab6DdaAVjvq&EuLH)R!r=Y^dc3q#oOQ3| zw6XuU9R109_NRU1Ve*!kAW|#O13H z(IStCtKJ#37!))4nHz_5^*B4WrE{}(w>mf} zV51rI_#}GzVWcho*aIo(kSO(1ETvc|Mm$o{aF){);51RK@M2_p-@frdRuZ&c??|+A z^QoV}GwMQ}7%|0#QzJp&@~IIUEfLogx8+2L__sHwWM2jD>Xr38%Y{HxUlE@<)ILao< z0>$74)8U~-V1qcI*1OE2<)`Vb=^+F8C|OToi1~OLIV!X)JDs^M7)gRq;z8=ANYG1d zgKN53`D_}m9jF6wtSKBS7nmmTPaMmO?RLm!fn<`;UWSFZ#&I|(t2vSMc1vHd6p9T% zwdVl57wzCsVrmO?uk!^u86;1PXr_f=VFD$U~`#lK9iIE7~s#>05on@);nL`Mm) zB_J4_#kb*s4H+02d6{Gh^Ip`};&q;-Hsnh^Uw0At* zmn4UCUrlpKONcOuwuF@a{8nQp-Z;VsW~>&g9KrhmQB6^&4zsTx)JF`4zVr)O89)yQ z;LzxBms6uDBVbi19f}hRO2A?UHG*q5mI`XOC8+ky_DWAmCYf9-KIX>t+{nEZxE5J6 zYw4*Ye#fb;C-LyfyJDg43`fKzqMFu)7)e@fLCX#$lh&+UGR2sQoa5bfM0A`p;FHb1 zM6sMpL@vefFemdG;1b_Hyl>=y9iyTIcrcTQnR5ulv`Axe#3l6WBw7=)+_x1G_Jk}( zWQt&jg{kA5Xfg#Mgpz=)E!TyCVN)JsadDw5gW`+>vXeRwV!A9@nkt6!cnyi-RW1Cq)3*_*5OqCrjNyy@f2OgvUU zWt^Rgd#66U7!RCGEd})B?`EFYRQxPJr|xQITPOgy$M0lb+Hz+F^HR2LSpm4m?_yrs zOq}oGQ&X!1C-c%~;(R~bLT?tF%u8GD?Bg!xLDb_xp88S`v6z4BTP7ZhTzg7rp8EBT zKYSA^$tRC$MYjQbp@b3>TSqfB)Rt?*Cx5oBX=ckkNN>p!g|z8NH4+NtaykI zJ9^wzY6a3-g_Gbo2+6b0bt;3@Ctn2cs}bbu)g4G1)D+T2#eQG3V3r5)*m(=EL0dR*)CW>cpdq zCv($NXE2E=$iwT~R!uxseeD^Uio1^$njErJefP2P+O}gS9tSea;KXKEjA6eoAV=Z_^*N`q#b$DJt%}08f3LssnRwBJZU88)qR02@(t09zEwl1<;s+w(Ch1WDb z8X4?Itc)T{4h3Z_8-PD5n9!0IXt%p$?$hL&LF-lzmqAgjiGGOZ{65(ppz z6YZ`-fa2y#?ImTjgmZ1v2vMflm@=l@el#@IvufgBy@ji%a?@?chNe1KO-wfxF0(~D zt^32)dbf#gz_hj}03+M5qI^g%Ry`wQ!?z>8i^I1Ac)vP0Hn_i^$9XTerR(y*{*gl9!1(AWLUDrw zfrG<^y@8bjatc_#wK|}j&^UpDQ^+d^O1t4ma;a4F3rdt~lHri*Irei!s{bqGne5f_ z%-kE5=b}Y^^LZ`u$AI6m$g~ue9KKPD{AuvWvdGNy67hutaX;Hki_E;VnHKp$wwV^0 zd0v$TcQ*U_Gaoqi= zpgVIYMIOFzp!WjseT&k366j%;%at@oUuZ-)hB(s*j(@Ker#7mhTcIPnOk z0TXw|4TlYM`&{HO3P*e>P8`D%IOucWJ|E_$mfSR0$gwrvyAlgFJahWv98dZ6A-SG29V23-CpEwlH5Mz`XmQeRlIDEcvF?MwheIB!qbDiPoaUPCtLKp}P`^gHQ2iF^BK5CG5tsnYOVk3S7poSe zOH~-@CF(6mFI5MSE>pK54X8ViUaq=8@p6?!xn=|0rTd9&RzfN;ql#{c};I&&HyMZ?p$+V5(&2!QvS}aL?@OA6=koE%Mbn z(1}xri%_Qk#jU%me-DeN?cx}V$L->7Zf2Z#{u?@RGI0^|MH^D^ykr*z&+~S1H-VqC zi+$y2=@NYuGmNVqkk0^;k%y{b0$LlYU8vDUmN^(%q!f6+_*~5SM8tPX-2hVNeChzw zKB+rs=6veC$lWA$+)Oa%6EBU*;#V9cb3XMTQmT?)ea+1IL{K#?SA%3t3q@7e9klCy zY}ft7u9Kj_4p|r;cz7XDUcka&H2rbQqff)6orXP^HKGCdri|0rAD*#1R@!KYe&P`qOx(#Q zbtNi>rkYbjZdgIu!=cIMkl0C=EIF(~acHVKG~|XMCElUQ>Mddnu};Alp7&7~^q|wS zI-Z_5d>Ur49>O94iye+_BRD(b%Akf4(5xu>x8jDW1ShrQvKP6xOWi)?#w0h29Hqyj z3dm6+J?ap0?C%l7H`8dk6^&-K>G^L#zE<6U)GM;;QxWv{t2okn)r)kFT32Sm-icb8 zFt$2OSp9*6eY@ec!;G!nNISLzFhSgeePecP<4mKqai)dZxM_yb+PHaURr?#XW0t`Y zvv%+em^DU5T?b3d8ok%saO0xgpjn$~H%8E^?FMr`nGMdqUo@LJpDbmZRlgcW%A8Lf zLP~6Y^-eSAlMoao!msW{%A8Mq1}WvmuRdqyeCmH9M``k_KQ(hc)q(lcv~ZErw1_>( ziamJn;ROIKw+B<(;6owuS5HULwghx5u8p5<{NQWo0xfI7c9lAOb`rXM_>^e=DO>Z; zir;gZntxg}Uo?lBk8mTfPTQJ~2Tg0upBBxZrslH}nrmx5cFzE!=1)&N3e5)wR-tHX zKJjYJpPo1d%}4+9KI(!Vbf$%4WK^rD`Lj7hwBWSv9@PVW-z~WqaJ-17?o%P8^=eI-KJP*;b(F0R zefDaXMC)=E?LpklxZjvAx6kx8+Gi?m`%J}c$GPHCpJa0@j&793HqYaeP?za(ICPnj zP!=673cZ$Dl(!#{xTw5zLS`y2CqgSPb3U~lDJRu0YRsHZ7I#jYU(}d6pC~RT)h}wy zoKL2kQ|=cvX3i(EI|_tf)R;M+`U+Bti(k~3IiGqnCQsASYUa#c-g({tOdLL|#xH67 z0d-qpZ>Hl`ds#XzRd^$SxY%t?PN?eHpz57aHI<;S`o^2LVe^%S&A86Rt znul?*R8p|u{ZUO=9GJynkYnh7D1f|IVcV>8|ZtOm(+i9Bi}(g!4WEz)Z)i&45k`5j20HTWg&OYGf7)jT`=rQ^Bjk%L_0 zX=#GEt8v%kE?(!<)REEFMyQmvd#E1i?{B4!(Y#!SyXpWnx57&cvQn!XbEb&*$ollq z!&K|?^$9PzE>y%9JB7ERh|eOti=D#T_?{1g3@$l62trIFE}`C4)UVn~Izjy^(Hw6D zDDJWESO>+3PeUo{p%mu(7l&d%ty*M54&6dTVA7~R`9!I*^f-J_D$Aeaz7S>6aHY!f zi1aNg3)Ml3{+Ddb-#|{Q%|pn254T6sqsTQ&99U!iIm#OD1?04P{R+9GxSJ&ut1+*y zvYtVFvn$mfq0OW2Lt3jIL+X`aV4XURyid&m7Qb4Av|e6tG^opwpQEls+9dm@xeDsV z_u7H$1Fg2o@lb@VXtnrfVWp~b9lBF>7%6b5&ipdf;o&>#P7gqXxV^alD|N@YKc;Mw zH@N0O!>s*!tvOofc9sm*s>Ym8eH*E+`;M6t^}F*F=bak(y#iLqhnKT)=9^}EPZgqx zTV2$Zl4v4dOTc}UXyQxQn(1ibi|`_KH1T<9+=eJ3wvyOsF;aIV{8godw~%sqoBUyJlV z5~`WXJu{hmOk?m&#-EzXJ=G!@kEA>Z5l+UBX`Ho_#*y7ZF@y&_D-xN3eo37Jq zpF)lcwnu#yxxbd&=aG9>a$iL5ZzT6LQU?5Z9N;RXF4;r7<^5QVGEn1De8c8bJCN3k z!`C3k4(7;Stw~Yu=8EGsPyGn_`SS9$SytHvVwIdB$BPsrC`-gbEtLZcm#8FaE>&+s zx=g(fX+SZcdYSq>(#zEYNSCWWMY>WQ2HjVv46yoZjmd@TEZADWdY2W8NfuWL!z2^hy*fP%0igOXNE9a z%A%zw7%fHY1BUgSkGh}-oo_ggOTA(QWsbVK%w6Mu9$btbY<1Ye zI>bF_3xCfbW_#OA%hxv3%&l)Nk8-rHUpupE-8r{YGhfEgp3o3+OXPYZLCm?>$yEqq z-U>XpW)EV%gjQ`6nDfbrBu=<~7ss4FF~=$O%MP14pDd4@aKG%ene$1oi{jvy9X4}5 z*%DA#{IW-9&ZoYLl%nL9{Wo(yMIT(#5;SxFZ{r{(`?QLi#2L|&%5f096Q6w_2L;bH zV~bZ7193!2DuzDJf&~|{o6~TmyE(n*D(>bOw$^ZWA@_h_X6QqQNa!OR#oa7EjozC* zg|g25ot^s^zRh&) z9%a!AN8n}V1qCBGI4$$cnR1qrV8quRZbntbeNdA`q!BNN<nzBqkxzX-7<=u41%d+Ke`wfs~$}CE76Ek~<@#Iqf#i zU_d9Im^y!mL?k!mh(okvsPuO|suMXaY2C=(kJ}?&=uzaF<&CF?Ba1ZLEy!ufH5|8+8tx;=J%ZaKyWgY8HH+M7I0oM|+z*iZ9&V3B4UQt$EbEq*Yeorlj&D|V zjt7jK67G^6f?M9+*GQnzBc`oZG{-B?sZ%^}=rf&?-y&Zx=j|F)6|mu8J<>)wyxgSr z&ImIwmd|yIhnpQ5Q4BL^jj+NDDS!rXQ@Tst`E#x*yGO+Vw{*f?F+#^B#-Tt~H~|Vo zeR9O_7;LZt@y=jF07Q|4T8)@9)#yAiJw(7Dcy}J2=4tqX>tqXTrJUlyKDS8@7vrta z*-4bVQ`?r_`C~jLh=>^uw4V$xhE`^K1I6I-$@%)&WxW@DCqwlTKNFdC#?EdBLOuVV zwsSmU?vw<#+JJJ6NU%rV<<+X2P*bPgjnpsaFY6`z+b|;vOWEffQ*I-i1GyYg*zGul zC|_^>&qb0h2R=8xcWRkEIg-&QR?snP*2xBrOwSN=|G61j;+&zWZJeH=DeusvPbQ@N zeZW%3gw#}?f?*6nPr+e3N0q2F1##4R2k0wKCiB{hI%8Z0Be+ z+nKviw&Tq3(v_e;h%>``X(DI(ebk2gK5|+pXkm4(4KPljsFvuB^_KJowAIS17_WSdL%W*w zvidZrN6|V*tsD=mYCW{_(3L)g%|XRu$!b6T*IYma0(P+XngG5IP#PfqnMnt+MvGcK z*X|?#zzhG&;EgG@<;rverE6%Q$>GY>4DIXNGuz7)GDgc6b3Paxp0~Fye;)st82@}W zzrAnFi^>Oa`(*`T?tIXHZbLJ7K4?0c8aH$2gXW^Gp_%h37y7Kj$-Nc$=?>TAfO2=i*1*`O2%r=SVo(uM0#{^f63Mf|FX;r?DE=dT531ZQ zIujOmYoy-?KmPMyX=p2Ta0UUWWwQN}OY-O>w*4kJK7_t&Dx) zJ3jJt3toRZ$6hDB_#F-YaLk`RwZ21-{pQ7=e5kY+OA}^Q9meIZBIWEEfM1q0TeOR% z3miMIFX$pt;fCV}I;atDSC`rT?VJD4$BWe4o$SoF%p7}Z%#;g#m1Fj!+U;6ywk}(+ zI&AeZt4cofwwm)#D5tEFKYG5}%pTk1)0(e&C<%-`U*t%!7hhu(FXw#KquT9yFH&p1 z>SVrtmHFLpu?KU``Qm=m?c(K3TPy#YP$F0CMcf9|+>XJDeYv^W2-{L^&~g%$kjA z72upT8l!ClS);jnAIZR_HQ3_nGSmo+%~jG} z?Dd57u@Wa&n^5U?{RVV!ed5(9Tz&4NpD7i(68WKRb-Uh)Ui_h>KT=))S98_%XI1wK zl9FUA;CRhd0mu(2XV0GmElVI=-PkUNT#4D_>c-9LGQc@&HmQFXJVls|^1WOq%zAkr zZr6aT?bxncc+g$#L`h$w?~XNvy)>VnG$E$s)8aF=O<-(3b0o!Hzc7304=10g;cnM1 zK$GLV<_e#G^5hQ>=(3eMrFT9mbuaz^)T7_O`$L+~uReIqcP#kgCqw7F<}31&f9mVmA5Q-md(BbJlE@z`wI*lN?HM)@+c2t9H%$wd>Z&kx5tK60%LQPbQgQQEYMcs?c$GMSzMhjT)pqd8&_KJ`qRl(u8wZk z?~w9mu-?7CaG&PtviB}AN_(+%8?f_QpvYBH&Yt`cExoikJw5tdZWrg8*S@+@_?=M1 zS*{P5nAr>Kg=0lqgc|KJvg?JCV=w$R z^;}7(5(~LhdR+(p@h8Pz{bkd?X&I~g>WgJ|l{oG)Q7=^i$QUVSPyQg;(`+u04Q`*^ zE?Od9uMOP@U(2FQ*Ev%jtKh|6r87tm-0dO3XDxE>DJ;fQ^_9tDN z&xPl-iHE&PXOJAzGgxa%-Oo`|^c<++0%Ol0c~tDR*z6^pO8of%s@yKx=4#!DUfc&H zcYnC(R7#7}N?e8-w~I$J=sDc@)_JDw{l-sM{KiD%_*m}Nh09a`Gf2wWb8$+)_tLf( zrzhkX2r+Bhiz5~)4>)JdW)&){*`$`2)of5T&YJaW+cwGp8jZ(kds(Boy0l7DcuGDj zz2H0ujLlWjUF>C;y>wrvUR;hUw`&`qEzjXH;i`J?$?s`sD|K>}PM6!om5M(pH_$!- z6T(OAU)&kQN7=R7p?XLS~59SL~KFbv|F|${xc9TNQF@8&v7ms@uwVV4+fw4J8nu@&! z%wFt+UXI=Rn^1PUzKGPKYo&1P)U%&}{d8VVj;%t2+r^hQw9j1+OpI%ez4Dz+H#__2 z{2k`FRw;6fl(Q#)P>`W_(u4n5Zg#s8pGA(fKfN4=$D+&xaeREl#LQl$93zFAWAt8m zaZgy}80AA?Y>ttpVy{DHFZLmGl{Lxe3}PL8#p+U>d@DSyoH zU%TFOyXM%BzWf3mkFx78%yG3Sa*UL-Cw~f2zYTC|6EW+NzQ?3_m3&&-M8Ovrd!)ow z?Db)@7bTsW4G#&25(+g zK{kG2j&!x+NJ%++@<$pOzXd&x{RJ`Wk$%jixl6;CyJIif1;!pJaTR+VHG82Fmvf}_ z#7alHT1I-q?%JOTu$?$ZdbRW-0Dk~7vhfVIjC{lw9`3N5Si2v7B-I@0)run}_mJgZGS>{W_q z9ctVz50T*d?ef>4aI@31%f!Q8@TiAI`4b*P(iLMb#oUH!w`-1WRDb`ff7`h*^Iv=N zVy{wt=UiynxF4J?UX~X4Q6(_8Y>@lKUSBWm<*<ERX|H9{>&fM>VAXbB&R&~l^twWNom~-QljCys zA{nL6x>9% zBkEWY3I&z?GKpQse+q`}82`Ckd~j^fU=c^&hH?BeCKEI{#2;VYA8}W-!=}zujy5H?3>iJurh2oM(#@@nCpMG7&VtBSJzW$&L-JrDN|3 z;=kk@C1WoD$1KA-4}E-kIf0lnIifDJrw?d4sJ2gmon!1aOgUrHN zI>SNXcI)VXqt1HYYjHXj3>(QP6`^ZfI2Ua_!~&Bo9UDtIz9racB;!Hw#e5?@Q|)Le iOyS%Ri5k%$-%=B?qahjG(i4aBZRprw(+@E-f&K%;he{{_ literal 0 HcmV?d00001 diff --git a/Debug/tif_print.obj b/Debug/tif_print.obj new file mode 100755 index 0000000000000000000000000000000000000000..4bee36525d1b1773234d91c05513fe60e67d3a39 GIT binary patch literal 45979 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 Q3w$`TG`8M*JX${g4_lF;j{pDw literal 0 HcmV?d00001 diff --git a/Debug/tif_read.obj b/Debug/tif_read.obj new file mode 100755 index 0000000000000000000000000000000000000000..750f87017b7de1853d6c421bdcceb10594133b79 GIT binary patch literal 35263 zcmc(I3w)eanfK{T?wK@6JH1d!J1s2~dZBGdX(^DI%uJGL=GM71EmVgznYMv63CV;O z1f{JgC8!kF_4=s`%KC}RMbHnvb+srfc;izP7nSuxyit*LUAt>{?b`kSpYz^kGD+KY z_xs-b-jnm5_c_mb&T~7@dER$sqBA0D-Ry&%bNZEf{|qI^n*PyzU*YDwzEWxzD!0{} zSH}OkCbgzNziWKYvb1^U>&uk-aS2?PYHD9I+TUB~HKCN+j_Rk@+Sjc4)ms0WLjFL( z(flgw>y&yGr+2+lm8wqpnv&O-j{6Y6lDPi|oIG4OyP7a=3BH4vUt^0>_g=2lD>!S^ ze2uS!zNP3t(n?JB;co(cC2)&z`@V8;C46}haE}45XM@H!6@3}dcOziFbOq?#Ncv`% zrEdw)9K?O+A@r4u`w{@|2i&cjG~`s{9>?u>17`n~NJxD{FREx^aV-?VB3u#1{t>VmTTTM0A`8I8*<%gy6r+}v0Wu7tkF z0G9(?Q&wY}ioWx}=Z%2bx(#!|Sv7^9BwtSBzVj$2-}?cusz<5kaq^gI+&6IVUjXyd z?aePgak^DQS$lgYa2&?{x}AbS6=t8u{-k%a^+Ww*~jVcLsb6WL^VIET_~FoK=vp__dPtd?w)j0{5LqIlfTuA1Mb{ z9Oj6eemEKKSZVw+0emk5ZqN04i+!h-toc0;J~gc$Hxcy*P!A%V`DVZ z9t;(MC8D8tAQn#hR_FT%3cW-9eZxbAfuZrdkDOQsFTmr{o-23m9~f#`zZ1iZjrQ?h zVPN;}ogqf?J5kMz=6n0s4DY((9@p$9HG=_w2OVEqtjjgAfxgkRUGed)q@|G@ChZNW_&ceY33JNpLL+6;C8qW_E# z5JTs+zSVuc)e%f5v^^c_-WeI{8yxS?qiN~cPcae?Mzf*t(sSz->j>`r&-DysqRyTj zPFZxM*RNfBIj55B9m)@mlH_t=_JnO;d^5(lSfG`qW7Ot|`H_ zGTz*`VeJ}%A^7<5JmqehI}2e!p?6Oz8B9dO(DihnGdvqNF2)T{4$Zl3;Z!=3h%ZCq zA~ar*>kP-ksYoyf{Ru_low-yZn~B83xnv-cS^%i!fSR2PCStK%M<5%`2N09 zhFh`ri_Vqji@vO;s zm*Ccg7;{0cBO8t8l9^O4lgOpQ9g$Ej%t^&%r1x>8WbsHBq3c3)U7X9N!>L>>kV}i1RP1PHYn#b=gTx>foL=l%yp!~VN4*E4Q4LDy(PFeSGbqn5zhp+ z=OQ6c5$TA8Q>6A)pjwcelG=p^hB;*aBm}(sOCXqIPj`DXkjZ5N?a^@Bi@Wc^-3ACX z7S04x;b0;anuFE{(K<6352bR+NHQ#pz7Wln>B8wmx*R~{(W2>DM5Xx{hVXENw81A2 z8k^9!GS``ngs5;|0Z5Z@CV-h?dYM2bTxWo}Bax8RB^XUdLR5t((4{^U?aYK@NlY}{ zjJ5?pS{F#A0y}b%ct?WsyPop{k2`h*cLhf?!>P{pMQHvln&;)V$08YrSR?Ta#YzQ? z;(lW^8FUQLLuI3QXHAyw6kP)3JB_KK$dah?k79rtn3t&hd^F4kSaUACJs3`AU|7&p zil`oU$f^o*iZX7%#hgfLq%XL)cL)xneSG)s{OGpAu0hWBpE%oS(m{2AipSZ`Ek9Wf z{TtkFo`iGiJ4E?9QRXIDJ=sp_+>YDz$!&qCF+&nZo`N_hPdTIaqj`?4_71J3^1Ksw zwa0O|p^MlUP1>5wA^*AwL*^22Owm9x84l4Je+!vVQ=Y%C1l_mm`AD3Ibay$pn-Hu8&GPhI>s(TBAd0n{b1&t;IyOaLXwxQU4VN znw^}Cn%eOhV5otu%5c=XPorU$!yy{XpwiQ>>ugpK^*v~sos7ibwR4$hIv0dHY7Ydv zIqf63Hxq6Rd@@y^O11>fzao%H#K;3)RQ3eB0;#3O)%odgFq?{Gc8G^aMUt6BN*s17 z5v8JBhsiW&BC&8sERzezv$13<5e!g(DU9b4E*UhFhzkKOR+-M{Z;a&&dx!gJDu)5v z5K0Al#Quqbt#`0BxiuS3?dS@`L(y=G1dm|fSdoNtCBJ;Qs3{C^N02ME}A) z{*AQVf5Yv$(PX9zmJp(^O<7)$3Iz|N>N>V3GwVZ%Ov_s0_Mxd_*DZxS8OUi?A+`l= zq?Y5>rh_>x8%lS+Dc$zr;XzxvccHnVgGOQM2Q~X9Ol?*)X-F2US3F3rQf{*-w`4RC z@1z>sTH3vbig!6$p?Dn~DMZsfqXUIJ;@m!xNu8)lW~s%TLV!~UVWFT>&c~oyDO1^a zDA5zA5>dD{nH|Y+H$oUoo(O)Q(FMlNckm4p;1~{$SLBl zj;6wCgo=c_7JW-N8lcc<%{5Tu4hoKgY&Qn!3e)2CYV-yMaSSYLB3UxGGn~nFM55s^ zVllwxqTy}fXqwa$Z*7*k$I#JoaizQnSd-7DqSq!60*5<=J>+gwbeGfvnQH98>SKCh z|N6D`Cs`0H@fzZ_CS0bVPm|?*3~$OodpRi9@L*RW(M{`GjK&Rso*zwe z^^63=*ce3OmcRmZX6pekD;$bsXjbiTuhLbRbQx~Vfp$dFh#z>{WNd(xFV~b~OH>#g z7|~`xvCs@^Of4i`R9g=v8^T(bxn(5JSx{C@*dujk9G-;GS8x`D<~mEqNO7&2iV`tw zSsptQ*;G(OLeve+cbMe%P^OmvMP01JY@@PX2*PT`ose9{?laNVosPFtBT4p5ED`~6 z?l~GO8M+L3rebIh=f4D+T@y{h3B&V|QEPxy{6(yHqyvc$)7$r5n*p>hz8@*9Nkj=t@~G z4vD@75)%&>uzEu9?8zyu6aYi#=&@+M^%2?q#9&x(VAy|=!H95UkpwB=1kOjl2JI>H zT0!V&xK>mpgNT?U5Tc7UN0$|c;;e?(G2J6qzItxPjD?Q`%w<~v`w4_Txk4_-4It;c z&&707<6v zBfX=&g?wsw9O<+?2_s~EAQ(gf0>+l^w%0B3%o3`Cd6h}p6US-L7hjPTa2r@d7G$xJM@OsHUQfW(Y#+y%7f3c^dEt||=g-mNdW-c+R%!R~N|gphaD z*i4eSyr$w-8+uC)Q93n+F*+;T^t2%nd^}?TA7D9cZxGbS?(m_Y?O#;)Wjd1X3Z( zePcnUNJ&dWG??xTz!VYR2fL_bWK89F4pZU444>zejh-1?lf=0kp(swL`K7rOokZtm zs(X-G<2{D5lbv)~HT(Mt@aee%W$5D+Xz<&H2l{P`H;m$=Lo{eIr#^{%T39axR1@~8(xX`*ve`>WB7~;LZnepD zR(GNz{2Aur#x9+AIn`Qgrevk8nz3-K9T~|G*FlaUDX5?$A90-gNNR_`EFJt7JI}^o zvgFdtEh|Y!uEk!Ooc%Gn)ln>6*m2}X=?5Q0(?Td)BB>)tM;ZswCDwcL;+Fub?ukpN zPE~8bwfOVU0ABza9=(OF&zr3s1Np)J$k6U#ioge&DrGBUa|{W_K$MpxxN7&v@K~r% zggH5D%&2GqFS+}M=gfd@LLV+GlkGb)Va|b`tpSU6N8I#lY^A#}@?eOfk%dW8DPIL_ zv7-tQp{xggtNpmlDGP5y@AWd^m=X`iyX;&GC-4JKfa(w#8ZaUVt|gp6MKq|_IEKKpCI7}< ziJf?%dk36qL>dY^dYzI4!YHi~4-3EvGbWRG zeX=&mmK)H>n1{mLu3Fg|iMQzKYB*=^dN{pr0+#a8V@Wod!emONA&FFMj2}P>QIy6eUAv?6s4nRpG zX=w~^N2DQ1A?jq9`X*_JsMrRJ8ByvrW@N_x zpLg^p>)D@9ki*w@2cU*=Wa%7CvlvE5K4t)*T7dZ$txv|z2hqdD0Ab?FR}|NkNn4Re z#N}~j<~ZZGp&7m*2;acm6`kYx)A&Yfg9ZbTO}M4OL`EwFGO8p!Ef>FqR>!U#aT*udT8-@pC2lP+*kq)_@laUy8J_|U*`gwYVQx`5 zn@@5!MXbTf;D~ssmiGh3%ZSfR3z??P2TLEr&Bac&;xjQkbr7vF#6Xhh-D(kufQ?3G z<3s3K4<~K%$C^k%=RIkc;wi;LF|Cn|1Tz$qk7A-(;pxY=-of!a8wu*s+YW8q9QFMe zqc+fv8B<*-8p-UIibj02q*asLdvnpakJLec;ZP{Rz8u2XM0cdjb$}A(wh$6+H-c_) zlwFZn&{Fp154ZU)Ad$%k%1ga)>AlQ4o@dXgO+8dJ=*~%Nf2s0so`?SdEbs}PbcGY zBY8qfn7=F~(GJS7K}-i?mIz5PQn#8Wak!wVK{CzA6LpamdW|q}>JTxVHx?hVQM`DJ zE(RereIX}X(G}`Rl3Hp*HN_SV$cBa2NQn3C?H#q2UTc3vHLR47o=^M;y2x_4Ml6-f zr0{HkHW0&_!l~ZGsY-lOvb>P9HO%&KRpSJ3t!9Q&+e{0=;wM&*=BhEoD>|g1j#L*I zHRlS9v4_wPxjX&9IUA=0&1V_xO^H=yCA#5+{J5-?{TTHb7ka@rb{E{S`Y&fU>N6D+ zoFO22){He3)61qaxpY>xS>&bpU?6?BmFeaL=j z-$#AVb%%H0K_Wt1reLwI5xfr&6;y6oE&JAk`cRk|E&ZHTCeXzRIBYoB;k03D1y~hG z1!Ba4D_}8l75;S_idD1IR832=J<^l9NG4ZHRJq}D?$6!~T=PuHnwIHE%Tcr*5|2>3 zBO2&Tb4FYgD(Fv$k)%}@wC+$B>Ay;KQQVhkHXccb#HuNQI@!ZZa>}_VWRuMLQkYi) zmxS!W!QnA0^+XM*f+Ud&=M;!(p2p-zH|VEC^dDq-T{jZvaan%I6u}S;(yA$FG6k7| zqCBgm*MHUd2JGoQ9nyfr~MNo&u zNIy_X_3oF1BuG|lL&j~;Y;eFZTC?uUg#pipGWrQM{L}b|%1-?H@UKJZZ9VV0{R>Yu z1L(inlO_FcSs>9FJ+<9!g=J0c;kADo8yC-7atrOX%lmozXBz)@d?Wa`X zril~A{hEnG&&|NQa1${Pplb+y`rZ$qvb$e3P(w%&R;SgWOVr`Xr)ZCcIzTpukIff>otnscHg9bjT|NQvbu~dIp447I zQeh@)whG@NEKUJpSGJfY<}*x)f2H(Eidez z*t!97Zd%UUNsSQ7(VTK1e4e8?P&7Vr_h;BNehLcG^1|Q^sfk|Y1)gf0UX@0vwfYvTwgNC(180afRH#+Bu2OslzglfYS*vm=>lD3U zgZePand*L&P3mt^Hmhe*&QdR;oUML}(yM-ta*p}~%DJi@BP~{xv`<}#a;aK}@*;H| z%8OMF%N8tyoKZVe^|D}p|6KJ+MVjb1|S zKFX^2#l3{5V%erbS51dQ3%!eghmX(L6!VPFBOY{aZ-TMFG_ofT-+oe!*Rr`?ETzOY zj)YGfzTJCz9QJeKNZ3om@@|fucx%-}_Qa8_*L2G^$%Shz(|b%z^F(qY>!n@W{`=#Y zki7`pd8}{|Tz%LJ06G(6r6_jtxc#~tvl4TOI?RQfT>^Yw`A{7lXqDIIbNsRbBgf!d7neC0=ZfeNBr1a=sR^j{Al_e_*KP5+n zXZKcH;l1YSA0FyMHo0F=Qu(8R_2cvyC;k~nsq#~^31w@xxvrS&Od}w;u5e|jU_@7< z`bD-egoS9#iykLnE$mS%*1~S4iICmeL|8kE<)^%f{10?4GLehU#zbBp5c_yiI(sH6 zj$)~xJ-p4QW0sTUmNh8h>+5I}g_%(7&DoQ;S3x<^(=bD>EewrxykZ!Jcaobg)?0o~ z#;LdW;yNpBbjMnksaIrTm4p)fNQYPb1f|yHBx+hMT;i*y*4tsgdDKCa4T>MEX%c7O zto{=9+3IsBz3Q(~&QUL+oU7e&WC$-@4fOj&fIhx<q1*J~TRjI~Fz%hH>MDaKkzBVDDJ6s(lO4RYWW-~ckW=g?NJHHL9|0657$cY#Q4S@)nehOaL%h2aWX=A{t+wMbc58Axylc?#wv|;C3<5sP>u2TC^)~S!6 ztXH2v*`S_BIa7TfrB@+3hHWz7o2NV|=c`LlE|wt6CsEK+^+B{OQy)ROTrD5F(#MU4 zFVD9reZ2+Wn6c$xwB<11&AvUu1-6NOkFE0M4~*a`SiYZaXFzl2z6{0ANP@beB)H=z zpXnkvl`AZhoMF9QXu61X|Ls14J1SBlsdViUO4dFI#RUL4UO-7<;vkgiI9z>w^cbes zpaN*G!CIY!3%c#wxYlj5KR?rk?C6t#rop$GQ`#!xsSN$lWCOID1k|B z4bGWa6Jv7T&Eb;;?ozwqIa|KAd!lPSr`GPd@M$1Hv}3FsAQ}Rjt9gi3g3~fRF#Raq zwCVS1CON%!%s-2>O2trW$Mr?j_&HOr;-`+e6RlEG4jQVLH`PM4a!T^7L+T+ajp`_*`nTxmdn)y%2xGZlpEFm zLb*wO5#?2i>&MlKy69IP&=*imD1)jMWk_|S>`>RC>=bXw*8zRV&EUfzzQXXZZ){)h z;2>(gy~BfMBvr<<4iDKe)%0$)rNmkC>lNstNW#)4ROFZ;=}{|9_@_F`5~s&l=}U}s z;_2}&XgQQlX?~Hc-R5#vlLTGUP;}}!Tt{U z2ddW;>4!}vnz|5usVhwUId*NcOVSUf!gc}FkFy5n^a{(|0wJh`cnN+mf3C@g*+5`M zTKMSEVBVQ&ATzc4vUV2g3zc=Om8K`z|DQ-R1VyW##IVpzGtD3g1SZp%K*)MwBYOdW z@PpBhPO3W`(&P=w3IJ;rqY7}tUZt)_sa5Q~sL|M~)TdB#yW&+OKr7bgQPV;!UQsuq zwHj*}m5G~`I&pCxQLF~>(=*k5Xm3=HplpKbAeTF(>WpIzEp~Fp(2J_W-VW7~m&dt9 zK{WsWMQy5^-Z-}FNSyZ+JWeEPo08-F}W3405hHM~3`Im^Mg zEte;V$KTJX+Tl3&EpGa4a}%(2(%!w?Cg2dKC=-+CDN`f^eE*fnfIkP}j47+s$53ip z`wnW_uIOC9EqBRMeV0#SzA0^otTx8Qv@fsv3TnD9ZPe-Poyh=?dJy*-M9mr{UDl*t zLCZWf8~x|2^HDBPK9uLHt5II4j-Xto-i`7iiC|Z#|Bd=3Wp?q%(PDq!zY6)hL0zHe zWNrH3b8=dt6w{ge7v}^@`>*nulpu3h{LJSYm<$~WC*?>BI5UTIB!#n z0L861aZHmGpdx7B!djjBI!fL4yiq$V-+~P^9sW5b1-=S)TAN&YCG7Q|Ba*X83eX_* zp7g&yDZmWGvv=GE@{GMbgAjT&#D7O+Z*S)lk$aFlU)JNUI0~2}2e}D8&QOcw@j0;U z?en_HP}5#`w0Pn~D5w)U};2cMR${qee|e^R#)f{Jle|`$ z9r~l^7T&x90<{Zbtxh%*6nnjTH%itF7gT144of}!Bz032E~ACY0}V{}&KHmvWD?$~ zw-qp%XC+k#cvZ5^zmNBmpM|>p3D28kv z9FoYq<6ADaY(e7Rq;BwKgc&y)f554q z)BPK2Rf=oCOsO&4)AmJu*49ER)B53-cXBF_jN)F8A$gTbqpVRoP}UmB;hRvemyCi( z9YVdqcp>R?s5dHZubU+x@v479eU3akz$<4MZ@%mS&l8Q0BR4hD+n4w4#`6KbxNK&v zik}tq!(@u%d1eHu%-l|Hwv!gtR?zXD*}3H|sKRFM!nJFJD$eklS}aeUnRRL})oC+P zK_+VLWvxyzwL+HH%L5$N4DBuR)*Cg#c+H8bd-zo!(y8nDdO{5Y&C^HeQ4T*-VZYW> zjZ81a4edZW*5d=zk${I+VJL1tz!~Vu+e!L`i14Y#N0J)}Ch8`ThFKiB`z6BTWsF0z zc5{KlhVkAb2Vb6yhc8wb?@HVyM49gziSKv502c&#TEAYhYV`KHjpKZ`*{#rUfv8RDDSQFx##clyergv8rOW=X8y!; zS`B`STTp?84i&)LH@HN%rgw#0W`~6(9r%Fb$WiWj{-5d$LoKZ-e9owAT;ZUO}*j7wBE2b zz1|$CnK3?3RtN~je)*~fOGA{4m_%*R>EHk0{IC7~2e9Op?_d#JC97QRv*A;ip?baA zs6Z!-ExNJX5RGGnaoY1zbX)`Ssw5w%*N~lP;{%Q=Ss5;pT7hsly^0xAEjgx)oRV|N z3ggCu4z4qLg?S6=wZ?0%Z%5sug1tk&Av_!&<#S~7@$r~%_vr9GU$1P_`h5fZPK#nl zMnM*oygD+1r^yx&aljXa`S6b|JA*?K39Tx*R)tKisHr>tgEge!W2m zZ;|x>C-eF~sFoX#m*@e_#nE`a?8AtpOizThsV9Or^A5i<15Z*eX#7$G`l-WDyY$N& z&fo{3Qqu=le)&5{PU1O=siKpfk}OC6Z5Xaf^p5d(mApR}ml}19kKDZScrhZiH=#{y zW+$#Svs{wlcFUu^3bmrI&v%h;-6g)OulB9QSG1S^4o~yDJRRS%c&%$=iA3_o02%yu zNMx2sB)z|P*SZbu0|h>}JGXGfeAIFVk#L4uB&?l5B<`~k$>CSs?k_)m(sgFBaEn(e zmc7zui)AbL!idGIdQsD2*@f$3v24e+DV7#PEW0N0dcf#K=(4s!(0{z3t$V7k!Y$)>(8oOdefTcmH3R*xEv`f6 zN@8orPm6#=<#z2dfv5TJ{K9O`!|mcvjhyLl{#=J!deInp1aA93T@%PgtH}rD-vPD@SQhrQOg9bcxV{s&yjEhx9e4u{85vSZ+ZDeJZr|)jq|dPZV-y)4-OVHP+llux;4T!0!W;7_ZpV6)2MBbPVk$42CWFlx=N-TDG0Y0i^K zbv+9lEmE!-)G&3p5*W26uUm-S?#11@eK=)WiDtL!A(WIZj|%Wbso!n+$u_yP3MUV% z(CT&_1V#KIm(Tpg{omC*d~nNK>a7k|<(N^c!o1uwNI84H0-^HNYeb5UFN3efwcE8+ z+7U|p&4Wl|n3Nffj(=Y_>g=VVm=Ms1@X&#o9>DElXvE`#*Mwg+`{meQ2Pd|U~PB@52h?!|c7KAf_sMYG%WAWCz_RU(Vk`=9Bwd$8t|1!eDc zWiSSRwB{EpUdQ&A#E*S-&n1K{J_yI7PJur&NI6^hlQ&6eXK{l8gMAR^?%*MX>vkE#+ATWJS3HNFFwVy4<`>LcjI~q zH%%Va2@kt3e*ahP9;`We$newcI*yV*z;o*#79Y|)eDBy6Mr+ev~@9=04&VORT2GjZJ<|58Fqs{H& z%eMTyV_wbRyn6;IXHWhx(c3J@?G}4|B|K!>&h0WyY5t5A zpPi0}_@sy&>{ToaYNy+EmA=JU=(^uvf86 z$wMvEj~KWnuIBx{^ykG95lIIzd~usv{_{Og z+%CQo$e&sI#v^}>Ynk47!{^&gc>Dh{F3~vVicCp4d)^{ToadTqCh&xUwBu<%F!b2>b4Gw`sN7R#|>3LR@VxuK==OQOc{ zAt_DiEW(w*SkmGA?Ox2c*oRX(=b_o{dK{%Gow*{NyZTOi%kIINQ#w#q^g4=?KQcA& z-lrjC4)JWwngITl9N#eJwE)s_%^>CM$)BkDqy_ndqPesAS4Az(NQR?pZd_%|OPjgL zjY`}X7>gSm&+Zj4dZ7`AlN;yb+U=sN(Gp=VVw?4zAN>~p9EXz|+-kaA%rx>RvR1wG zFR*lQh)2G@_4AG{M)hBfc`a1r1}SGx{=k+7c6xrscy5=^==t1u-xixPqtWqirXfQ1 zDzG1&=RCX>zO?R{~>kj5OK3-fZ-ePDLD}=DA&8L1}Vqp>XW-mu_RD<8X3} z5tQ3?3?+Zu>#ligPH2w(`mg@|E=L!mnl$FMSdn9-{1{IDG}yBO;pCVPEjGtqIIxYs~#c>1lF|F@nHY96M&V2>b(6a%>6U+%94>1_vJM*rFe9 z9l}4y;pEs-w7Xqg+quR)@c5TcYmVK%xcj}1E=KhM1NBnn!y3o2*pokM_KH9_Id&mh z+%7Ov4(~Jn`pk43`<#K9y^6ixGPJl|ev~|J|KmttIy@&0JnU7BXE|EjuGK_>WAUkv z!a!Zk{Pu0V_1wbJPPMB=sQr{mZ?24?mu<~$=zw~KW0xGwVmgo8n+IG#1|uvanX zi9vJzGX@V&2@aF<^iKj~ah`LtdmW#W^OvHh+w~Yqlk*n~=YLoGf8Q)aScQ}G@G>5nz%_x|hYzqdMA6<3w6t_0^@Ge|jm@`viGg)S%O88g_r+U@#! z&%n%Hny+c2#fV89D?Vw~Jp30K70)#E=!W((5)>GVhosW()mS7r=Nd=La=Y$FY4UKT z@bKBDeHk=54kr)Spxy0ygC+F$p~3JwG!Osbsx)5`C^@b-=CwxopuMD=J^7=1UOfxP zOo>^~be=);Tn%H)l%7^#teFy*-D~-jGrbIOZr2f%Cde9@>BhhO0p#R7oHJdE8*Ue$ z;_(Ole)GL|F3~gH)9^R1IQ!`Oh%wW(iZdnU?8%=4T!R0g(=k(G)-zpg5OkS_F=pC; z`vPOll(_6(esdZ`T;!3~;o9wbCrT4!t<3bImw#{@VeP{?)AeX}yWWSAKQ;KN5B&y= zB|+c)%r|~&_b_X3GiJJ8ai*l4J^4e0d_)6!9DDp0T)SPgRv!1Pd25|bnQn8I?=~>A zSFuOB94+?F_ly7dtC8vO{H=k9y^8U)3LZv)JU%zL7D{DuO1C-7QwARPD)wyTn3fK)-78r%sM9Jp0M6}VCc^|-FA^+_yyH!1bR13zUV(NqALUZl zJiP~7ZxVFL!BXeec?br^EB2frq_{ z^_g7NQohzewomwDuGCy11jdpw`Dpigvq=J4i=})uuHCK)lqSd~k@91USG|j{_TiNB zHE4Fb22fJUuPyrUkd|^q+ah?>(&LZDysl9`NSTzgrw>fhkD>@atH$gFm?D|B;f5{K zA2xsgi#DxhAN&8s1|Ie*mW3ZJZkIXB+P#1K)O2{RGw`riu`D=uEsI?Svcr>PAuyIK zI9t2dZj%JG7Rw@l>tb14BeG~-`OtO&whE^#+NGB%i}zjsIrvNx37g@O14&Ez7S%q_T z=#XAqzf8neNw1@iz2~2;4pMRU>YUWeFTFnWons6X9fz}57uww}=U5@>wd?m+e8kZO zRil?gjS=ZZ-+rdUQ;U5}oBj?0f7`mYHuIx*j`uD7{!RW(lcCI4jHkHm_z>0<5JVs^ z?oDyuz~BTisWZRn4nJ{id^MM9Ys&@wxwXNdzjI5MzinBtV{p8!rL9$eKUiBUz90<6 z?zUF>im`o}@?E zCX-3yTZ_zLg6;lzBw`HHF9h@Zo2DPA-!X{!wG|e^E&gaM?&N^+W_eqyyf)R=%9qRA zTID-u$c8b$)wSIpNhI1GQxi#Y**C>V)5RO`$rOU=nZxz5BH?)GO8rzN zd@N00T8s||{P=$1>2&IhD1vc+cXxY-E%r%TH8l!Lvx>MM^@rn;ppEeC^(ffok0m;s zKFhNGf=IB$^a}$H<8^p^lfyE%P{1Z7P95g^{cWvy!N0AQQLwGzG+|REsp!LfTI=jr zv>n$nWnqBz;-xigx4&ykpxcjEMcZ2Ot|)xAcnZ@!jA3-VE()IkQ^FKXwT0(vk4GkT zM)5+_}gPq;b^3H*D(Mg576?x=r1oaTD@+3~jZ zctHif6fOVxBX5ohCgyleN)~mYyNF0*$+d1+Z_rJmK8jz`w22S5Z;4VJ9K^RwMf{Xh mSc8>PVZB>6iHgwh_%1jxgCPlj5^G!u9ao$)9oBG~j{g9vTXul} literal 0 HcmV?d00001 diff --git a/Debug/tif_strip.obj b/Debug/tif_strip.obj new file mode 100755 index 0000000000000000000000000000000000000000..829c4cc4b390cac8ebd3427667d3d52d7a5cb4cc GIT binary patch literal 16052 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 literal 0 HcmV?d00001 diff --git a/Debug/tif_thunder.obj b/Debug/tif_thunder.obj new file mode 100755 index 0000000000000000000000000000000000000000..eaeaf62b84eb9d86a26780220e99b0605d7f1093 GIT binary patch literal 14821 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 E1ijHLZj2HhYy?arLut^ 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 literal 0 HcmV?d00001 diff --git a/Debug/tif_win32.obj b/Debug/tif_win32.obj new file mode 100755 index 0000000000000000000000000000000000000000..b439d510dce3af3edcf0049da86c127cdb4b34b6 GIT binary patch literal 25961 zcmd^ndz@TVo#*MQ?&|7ycha4NBqS9Q5QH>I2f|ZQ)m68;i`0vHq!SEt=|^?a&@a2I z6F~C;Ca^o9K^#{_cTiWDamELN$haWNqA&`sx~ub<9Z^4wFuE9m2u_sfWS9MZf9Jlc zyDQ-C%pbdZ`g2d8d(Q9t&iOsh@0@$tL~A~(A>UFdAnupnM!>Ra4(;yYijYYU$yskj|`RvZ6N#);##&@snxic ze7M4D%ah$Rm4FSX@3vqF#{{@=ce!*!S>H?Es16+PpwhgK(h_) ze}{{y+WbC(wxfW#xkssw$pzT8z%wNm@rRVp4zf{P!)1kMnyF?eDsT*s9~Z z9Bo$t<}O^H!&OZlM*#OVw8t+cw(9uS!LF|c%ng@8pK&#)PCdT`_SOy@S8{Mq3b(`F z7TEb?Xule8%ipB|#m<+oBkI9rfVmOZJ-DjTF$}oRpuL$LkgDkcrxpUtUR*cfs)mog z=1#Q#5*Jf7eD|ZRW`|OLjw={es#I@f3c%cMD0O`tb5zYs>J|O{m(cD_qE`#_uL%H;F9o+i|BeFgn}B<;Ph+e` zFX#6ZU>Xzf)3~b5uK{Q-zEb0|^QH9uB{W6=cQ)2aCTCndzk;p>E)*`eVC*`sgPTW6 zql0tfRPy^4R2DDa0A| zz`mKz9k_Jw!LiA0J$o_C?94F#mB&U$_r|zt??us+=I*JX>+bR`Z&%<}9VDpKFV^e4 zJ2f^uGc`LkS`M9^J14ZQXYd)Wr1Icxh(%;E1X+ zrWzhsu}k-6XQuYe3{Fgx_PUsNjm^#tj)(H)xskD{y}P29T)ek8k={Ez-d(z(q=qL( z)aJ>l@u_`Nq0N04hBl{?BcaU$+i)|1Yj8u+qpL}IXpf$QbN@kZ=b|OI+`rT zj5GeQUa5F=@Bd!UNFnL%8TZN}p6}VRTK27uC*|9k^PGhu=OP%=yJ*3os1OBLZmlomJLZ=Km! zOvI>gPXVM|I1>S7Ag>T97>yQ~Kaq$zU82c+B1Tns1YMe9$-aV-%7Rd%19hu`v@w#) zMfRA9bUZ`)t|fi6f<4ip=uBZM*Vnra)vu#^rMWwmD0sx0NEawpDqs@rZOLrZGr$0q zjpALlSh`iZM96m`)g90%z9=Wq2iI+6-yJ#p?`(ujzu`Dw-Dtq zqBIv-J=sp_971zbc2^{6QOL=Wr*@6lQ+&%Z^h_Bb9lbQUX){d{Lj7kL)r`D1U_0p^s^;G<<5=t3XrNAB&nM z5j-piT&ZL;P!hO4D(x)V+OxDqkJ7fIfwFA?p<1|0DJxMwfPt207o($BruvHn3 zdiPmWEb}--iy2gU+I6GL3ZlLfRm-!96uh=sNaoEb+)-~Nx|3udL0c=_8u(+HikZo8Cl9}Ar z?dRbBOQ783vqW;f^_WF138wzsfSU$$YO-|0SlKL71P4&FCL4!W$VSr{ zE*VihwzbLB%tUokH4|}1`er;GzL>WAdo-^|W()nWgcyBo&hdg&D0mpv z7~h>O^u#iSZCi*tgsR%18_Oj!kYolB0Ap^PEyr!hM@=moN_Ukl-QKCGaaX#3g6fty zjl$LsYW90T+OlNUk}OuQbd+4B+?G*p*<>c&M>V)F{+(%{Iz%viaE zP(OB778lmDh#TXGFME;G6QKU5rrEp?8zEC5yCj~L;z%?m?jF| zki%0z(V2uyBC!|*m(BMZMj;D}<64kKW1Cq~JwS}tp}xL90ncEXq-hNIEd;Y!GC+?0 z6f}wdz{*|7k)xx4Ywg3jhI?p^tti8&ZrGDBlAJ-5fJ-cQ6e&q-#LUxuLY$a^uqQTv zMTRrEX5maCK;Q!$Hgt=MZ_V# zm`h%rK?rR0346%hr06bZ4`ixs0IQGfiNifx=ue86ti*HVWTX)7cl4ignByE$DJ#^b zc&S&di`9xISl{25%=AW*1WOQ1B71~8k;KH{KG$%QP=Z9vVV$@uu#YB^#5`-c(WQxe zA2-d3DB@)8%m=6?e$1$aRd&=BalE3tkdc;5K0zxccc=%A62%w#i|L(Y$K{w`TQ+W( ziBvWN=R>1k68!*Y^6Y|{$g%>spV>?SNjD%yRWiL=9{V5@|OnZr8tt;F(T_P2f zRXg@bI}099LgRM=<3g>d#RC}b}JT%h&XqX#!7~60-kCN9U%Q1pxMD>7ETzRkBsUD zQt=n5!Ra{8PHb;KjQW5%HZ?Ri%Gq#@YADYRPE3!N%rbS0T2w)Z1c5tHD}hLMYS!{T z(jD_^pu*%Rdio<0P@mtE=h{G)6Wv0Vi$kKXfyBhaMVy`xJbRL)a|OWCIeIKwZ&N~c zKPea%92oXrWH2J!R3gI}kbpJl*P=aTNh=5)4cCf5Hj0Qz0wKCsdvsZGD9(C#9os!} zBeT-U{1@i`oS*P3F=6(b#IKz0S1huCZ9} zaui&~C5X5ybZ^O8^DAKKOA~3BNVBr%prSNmO6`mjviYp-{l(MN! z6s(U&MDwWewhgncgdnXaNh@RgCbq_R!vHfut2nEe}+%H^9M+Yushj zn`Pl8PzTCWqoewk>rEh^iS9HCoCtYWkIf{R%X=zry`{J05Tz3=&(dLe(9K~P-_|4C zB|6@2-A+dMmSBXas4VqZ!nxGbiK3fYMuMZs1ZXwoEG2vaT?%>O2fswLD0kVem>Y&- z-V=lV51_$j)4LdO-%s2ti5q$_5Xr?H_l*UaBIR6KlF@u$1g41iKH5(uBV+33OpwBX z89sL{89g(&<`h?Ogo-$w=9lMEbON0_sP0joJnyrVo$RE`3LYFT!>5~N$}mI{Xz;tH z#ztI=x0M!BA=Ez+DwXf+&Fr?-iw@*vR5zv(fM`cV$aOZp=+ubiLFj|&epZQo6$|~= zkreiMIv^+Y1gOjI%IKX1?>b$JqG9XpAXS8o2t;BD=p^q$ps9WcyMWT*Bn_I(Y0Ba} z&Cm-0)r5TldNc<_HhUR42%+h*TSGQq)SajZ9|A3Y?9$mvQX3pf$x2x@Q%0&6Cz3I) zgB(MSprW4hh@<33Ryzcq(!p=B^KuL(OD@gav66h^YV4)y^d3UDwa~0gR)>q8GaH1G zSlmhYO8}}LNK0H!aXgRvM#{1u+mzA_Rjmb8;?HAad}&~6=0?_j&#sM+mBvRBlcQ4< zK?rlIldX))F&r>Pk{pYQQ$J_U?w^_wt0n<~(dnsKvrO7A2SyzOjNK&5B@x0FRb9Rx z!50z!93X*yOxH9if}i2GsXvj1QKb>)n9i6<(E{Fb_YKck0NZ4KxUI|f?kO0gfu5}e zi*`J1`!&|mU0CN}h@x={lciF=2-r$T6(K@dBb?0%#mBB@+BR|Wlu~YFtu}tLf~z51 zmMn)$u$?pKJ}?l=6mcv{d!$qAAQB@h9@JI)IiaZtZ$t0(6TtCE+(`GkXDuY)ITAq0 zCML(M2!d+~38+m*^%} zvZKdZXzkqfT#1BHS{t4>fD?91Ch_`WZIUfFpmAazGq_!KPHQCIqNfXzX6|}O-gf{? z`RK9aG?~KWkxEMzN3kYjL!Oh9-PFWJcx}t5I5Wmc3uY##qTfV)3z_KzksR%8jz(q{ z;32ikBNBV5#B}k)`q6say-Q7Oj_#mNab0OcGxmo{TJA`LkdqD~srH#vq#ifs_=F^)zVVZGy4 zjL{t_cbvU(L%B3L!myUkh*A&Qks14c+0&n_XMZ|D4&Sgd0yRwIl+MF6hhc=|V+H`K z)u6XxeX@2wh#uYn5FT8GD&o2&j;+We;%fGu%#q@oQ4QY^g>T^575(L!Q@BfKg9ZbT zO}L}ML`EwFGO8qZB?eB3-mL+V2-s+yZ2WulY=V=v`9nJt&nO;=#~9f}R3bMaudGi) zDW(v`M6<$iz^=jZxe_Z0)U3B1+PFFDJs6`Q(hG{IE)@F0I_-Hv+&2sO}MdO2< z9Rz5^ViES`5Y{F-p0n2hN|f6|NVL}qy2VlUCsI*I-TUR4W4cHsz8k={xsVUUOab13 zdOCVWC3Md`TWrVE{fgs7Hjv78>H^i^YAdRtM__|Qnf3!q*Ynf$*7cL297>i~IARV@ zCr5*pWv90ohm#}-HJ-EKa!9%l;l8<#ak+JP!kO^=a^V!+pd1^-d?e+FlrzTBt)7!O zT+FFOPMUE})X%xlYZ$<(L&SW^T71Yx@!~1E7=+aHg(SANKQ@r%Y^e?P6q^x|4GZsa zAU?c*aK>4Bo&6QnuuejHKJg>yI>+H!v6NZJ;n@OhAcZxBD5lv7v2!Fx!rw!}C0bdq z*pSabp8ar*BRRNNt+CuL+g`8~iVr|_U>4DfS?2tyG4*A}&}Nwt_ayq^Bu_tnE~Y6@ z`^g4-Q+|P>#5$Z?7`Jt@JEL~vMlb)?UW5DB@CEEf?WUT7PXr_fJFvon*kZn5=8LlF zB5y-LQOnSWoafwvsVJW4<}wl)F;K#@2Pg)mcs&Me$-~LW6C+!h_oKER&+KfoAzzyL zOfwzbgHybetA+tk3~o0UW=xVfK`!PBto{aS6NfDQbT6z~^V9LD8gb{Qwi>WOVQh7-lsIB$x-_YZ^RFC!rI6n>aMz*FKh}lzN56ygPoJAN+S{J! zuQ~j?xpLQh5#?Ur;S+P^hHn|iiS<}L3c#f1Q^${_P8>dTLb2^NyG;sq?JIVz6y}Ss z<>rl7vin)PR5qUqUWFk6)SUeVfet@?_7UUc;X@}e#(e7Jd@*?Bs@i$ur1?khKKyjy zvR4FX{^!>`l>zXbxB_Z7@{dW0FMm%8ZbX=Y4Z;-E((i-I0tK;%X&j$5blpEDU$eR@3Ep1j`Mc$&esHS!loW%FM z*^jNexj&RtBRkUg2<5U?EogS5VvJq{;|=KHrx|}3t#Qz;6#ZP z98oGJaK6AEC*OSYP1gGHOkpMNPvD*ynn&|<)6+Ah*;yRo`apIFl_ai7ZL&&@T2Er4 zCtrQ61J$;k9KTN8Wt_~;r`jR3W(X~qeUo~mE;}xAx&6tx+HFrB^V{-@dF0g%u=8*Q z)P=}3S5r=joVWSQH%R>|g1lD6kk_egs$A;j%ju^)eA3Cnet;lQ29msv<&SPu7Wt>D0b?h`0=)R7%qu^r! z4o#ZAWt?6uL=VNQr?uaSDX9HnK=5KZB?E10Ik={lrBhLR zomxciB0|a15nKUv4suQCcBeFil1(UnN(4d|dde%TcD7#T5~@8VotW(@!vNsL^tR~a z*qTn3s?)jcNf5;adzz?)>osaMN;W#RqCdieN=`0hLEyul67hs%wxpNZ8e=K7ewQ`Y7^dbuaQ3_2!4h>0AEfw94Vipm@*=b@}s!j}D za&x6>E^<*JVE8j!USE6x?zL7iFt_<|E=r4i@#R)KTRq&+zW8685uBc81WOhpvSRQL zJ=TdT%i#B;2zTvlQi8DL`P7Lcsn>2j^qLPAc=JlDP`=>sq1RM-EplIZ{jmtEeOO1& zVgWDll+QZ08T%=e)UmTsfUMN9^>$$e3V>F}TI>P?>I33diYMOq(V8C|e(~nR->5;P zay$#?QG-dm@!XncZ+!us!nb}M`7Mae7r7nosNS4g%>_qDk?a?M#)hjIBXq*!NI!(` zwr6V=QD;3)RkNBx-l`5DZ&NoQ?-1v;Ov0~D^(Uz5lAYX2^`|JW zQvVM5YIP6tb?Q0f>(xIX52@cE-=Kbne4}c?*qhXuvzLaVc$<5w9Gc=5xqHFxjlV*q znG$*r36WG2wD;5u5wfTYp(A4ks8sVzMSjjC8~7TG$*{xw`n zha-=p#kO^>5k9ODm7C!!tai4(+o7taNnV(n7#ttxYf`5Qy2vkblxuO#tW7uv)`YY4 zRz#kf#1Jr0r`yG`|ZC@rS? zT~<3=2bZ9Fc>2aafa(!j>brodW_D?+IVnvwOBU5jL>O3_VTKI+QzvjDdZc*VK4Lu+ z=C$qFJA&8^YcFyp`0F(SdJ^Hlk>W`N1UR2Pd=!<(Z-25JWE3*zJNDGP z@fuWy8!(0`HhZWhJ~{I9%c*CbnnX=NPEYIAEXu(}&if{-H(Q67V&23wnOA)|w9nkg zF5mQ4-qL3DZBHfpcp%5%oNo&Gr-ypDl)i?0Dp>6pEXqFRv;gpSfV+0qjU4pY9O>2) zV9Aoe635_(xPV+)Y(IP`sOEy;-Vx)KV*xnSBdJ&Bi?19ho}dFZb zA9X9G#8WNpi>`6%Mx44Cr|w3ljt-syVL)8A?)wPpx}@$22kzS_=`p_V)cp#jPJ#Qa zQ`d<5K{?Q4%tfoCQA5r-Rr&n9n#pbrz zn_~JW|A;>kY_6~ji)~G_HxGU z8{K0gzgXX>-UJ@M@_xCCg7*7{Y~WM;_kQ1pbohPzk{9E2H`RQ(EGw~Fh zI!g9;)AOJE8V@TLBx2^pUK*a9VA3_-?|=!MuR%Af{o($9w2DjqV=&63v3tMkRfk%? z@4LwPb+EqZIvli+Lm&7Me!^CfZ0WF4OQ)JxPc0qx?_-99?}sU04HrGmfZr(7Pifhf zXC?_S%ETK?*Oz9e-J0&9QLCMJlqzxBav;I~-2US$Y2zBE9%X@1-6dVa@!VdYCa{yd zau1-^@8da?Ex|hJcki0D38#Y;yj5WU<#g;p1 z7nlm#-CjKoW){4(H{#y!yAQcddxOyak6lB02zHR!a&O)H z2xHU*=`+@Slh97I?8z_JG4RsqQM&+`O1X0^P5X8WWw?s-R;Hj*-c*B z8S43ck0G~dZxY(S5ed_Qc#@a)7S#KFQRevj-Hi{tZqfew(LPTXtH{8b3166l&U5DM z$*=4Uv0Bm#c3~0i981$~dx?_3+O$(W1;(MB*xg>#F*kW>C)fPGeaLOvTZHzPYi_;J z?ZJ|l_BP!6eOEBY-{<#UJE&>D@{s>4gsn`!wQk#lcFvqV`9(m>z2UB|#sXSIJIB(r z@3BC%Z}8GCFb?g+?)G}OjadGBX-D)8Dn^mpw6_WEFRcIQvWiX>v~wHb_iYdWzxrb2 zBDhRW{`&v^itE0d?yD`jIzX4dhBIeRe!cLJz<50yF>6X~ow!xQSYDk{78r+8;&OY9 z2(+DfDJ406-}{l0%XcwIqGId^H9NLN9?ezg?3>Lh!ufo0GM~>P$zfx#_??n6s!n(;z`)R25`}mBC zU&m~!{q>(}+Wnt;!FFSANA(4ZuG19sx#l6XuqVH*`M3imFB8Zeb>17(u12ljM=!+m z!SCMvsykO*=gpt8#$qo`(J!qU*P8q`shm$m)I_>8pC7Q0J|X{YFG`yb7>CcK#O?Kc ztC#-gDAL-EKd_Y-}>N-@2%)m;YHU6nX~7Hh?3{>c!vr6!DA<@7ho!U z0>{#{|H^`RL;l;e`*9~Q4(-J5_IlmwrT=+p--s%|?`GuI1ksColP{aUB~nlF(!L4x zejgM9z5MF*6?a3y$>hJ-@gKRYFGwG=P;V02Idk@u@8hyl1*OESDg6zbkZLuIC$bV4 zhf?BlduhH%M`T_~&%}KtrJID($#0+iMH^oK_fmS6^twqJg6el)`s=W!w7vUKLPLA= zPg|6pC6sdJ?8z_p>Z5e8J`=O1^q(yhp$ba5#}ycdQsQ!Z`32hQT0!YMQ0ezQjog;$ zSwiXTtM9wPhS&eSl%6fUco@j9?w)y1_}7}!f3xlSt1El)?n@TxvsDOD6KBqz{HCxz zuO!Sf_V9qw#UC%K;qN(gvSIv=-q|&)7S)`ysODW2HQu!wW(jVPn@rK)%n!MI(RJQD zW8q=1${66CsPX%_OJxfDtXMb|o-qp#dsW&p`K;w$4~{WymH)OabB`-9j@-#vw-;A? zH+ePuTvYpgN0Hl1JzM0y``+U@w+BmJxu1u7zt5KY-4j0rt2o5S(eM&+)VxL4c`5|C zbLQ;HZ#C=W<@{z;`JI!%mj86os5>(o-u?dx3p0CFa*Q+79NWl=Imyd0fvMn_+v}3b zUi#b5d7|mY<@a%gvN?91aP0BEerYF+P8OdbbA`8F*lUR`qz3imUjt31yjJ1;)U8!j z`F&hv?$GZyg?DV-vBQ4FDjdEfe2Eea`u8%r933AkO_t?%O{Tm!Y5(p6sK+LzO_TS0 zqZ7YmL=}G-;{2?^29b(N82jaU8w5Y@BtUiwKg2A};3st!F6Sk28&E3r*Hrk-Tkq5j z5v?D3aL9UUcy2aK?UR~=2WF@FrM*#raW1;juCps-0GAU2G>$L*jF%=OAl{P2Mfd@6 qCQNGZP+9ZdYDtFs`ub9qkS??y8(Y#@^f=2#cX4mV?IS|hJ^mLXOK^e! literal 0 HcmV?d00001 diff --git a/Debug/tif_write.obj b/Debug/tif_write.obj new file mode 100755 index 0000000000000000000000000000000000000000..801f8d41ec4e1c365c67f516ed8a19a7048b3039 GIT binary patch literal 30153 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 F@c%&&+ywvt literal 0 HcmV?d00001 diff --git a/Debug/vc60.pdb b/Debug/vc60.pdb new file mode 100755 index 0000000000000000000000000000000000000000..31bfb30057e7f3bf2ae6713aef008d2182c54132 GIT binary patch literal 77824 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 p{Nrq3$W dist/idb + ${GENDIST} -v -dist dist -idb dist/idb \ + -sbase `pwd` -spec ${SRCDIR}/dist/tiff.spec + +# +# These rules are used to create the source distribution images +# + +HOST = sgi +COMPRESS= gzip +ZIPSUF = gz + +TIFFFILES=\ + configure \ + config.guess \ + config.sub \ + config.site \ + Makefile.in \ + README \ + VERSION \ + COPYRIGHT \ + TODO \ + test_pics.sh \ + dist/tiff.spec \ + dist/newalpha \ + dist/newversion \ + libtiff/Makefile.in \ + libtiff/Makefile.lcc \ + libtiff/makefile.vc \ + libtiff/libtiff.def \ + libtiff/t4.h \ + libtiff/tiff.h \ + libtiff/tiffcomp.h \ + libtiff/tiffconf.h \ + libtiff/tiffio.h \ + libtiff/tiffiop.h \ + libtiff/uvcode.h \ + libtiff/mkg3states.c \ + libtiff/mkspans.c \ + libtiff/mkversion.c \ + libtiff/tif_acorn.c \ + libtiff/tif_apple.c \ + libtiff/tif_atari.c \ + libtiff/tif_aux.c \ + libtiff/tif_close.c \ + libtiff/tif_codec.c \ + libtiff/tif_compress.c \ + libtiff/tif_dir.h \ + libtiff/tif_dir.c \ + libtiff/tif_dirinfo.c \ + libtiff/tif_dirread.c \ + libtiff/tif_dirwrite.c \ + libtiff/tif_dumpmode.c \ + libtiff/tif_error.c \ + libtiff/tif_fax3.c \ + libtiff/fax3sm_winnt.c \ + libtiff/tif_fax3.h \ + libtiff/tif_flush.c \ + libtiff/tif_getimage.c \ + libtiff/tif_jpeg.c \ + libtiff/tif_luv.c \ + libtiff/tif_lzw.c \ + libtiff/tif_msdos.c \ + libtiff/tif_next.c \ + libtiff/tif_open.c \ + libtiff/tif_packbits.c \ + libtiff/tif_pixarlog.c \ + libtiff/tif_predict.h \ + libtiff/tif_predict.c \ + libtiff/tif_print.c \ + libtiff/tif_read.c \ + libtiff/tif_strip.c \ + libtiff/tif_swab.c \ + libtiff/tif_thunder.c \ + libtiff/tif_tile.c \ + libtiff/tif_unix.c \ + libtiff/tif_version.c \ + libtiff/tif_vms.c \ + libtiff/tif_warning.c \ + libtiff/tif_win3.c \ + libtiff/tif_win32.c \ + libtiff/tif_write.c \ + libtiff/tif_zip.c \ + port/Makefile.in \ + port/getopt.c \ + port/install.sh.in \ + port/irix/so_locations \ + port/strcasecmp.c \ + port/strtoul.c \ + tools/Makefile.in \ + tools/Makefile.vc \ + tools/Makefile.lcc \ + tools/fax2tiff.c \ + tools/fax2ps.c \ + tools/gif2tiff.c \ + tools/pal2rgb.c \ + tools/ppm2tiff.c \ + tools/ras2tiff.c \ + tools/rasterfile.h \ + tools/rgb2ycbcr.c \ + tools/sgi2tiff.c \ + tools/sgigt.c \ + tools/sgisv.c \ + tools/thumbnail.c \ + tools/tiff2bw.c \ + tools/tiff2rgba.c \ + tools/tiff2ps.c \ + tools/tiffcmp.c \ + tools/tiffcp.c \ + tools/tiffdither.c \ + tools/tiffdump.c \ + tools/tiffinfo.c \ + tools/tiffmedian.c \ + tools/tiffsplit.c \ + tools/ycbcr.c \ + man/Makefile.in \ + man/fax2tiff.1 \ + man/fax2ps.1 \ + man/gif2tiff.1 \ + man/pal2rgb.1 \ + man/ppm2tiff.1 \ + man/ras2tiff.1 \ + man/rgb2ycbcr.1 \ + man/sgi2tiff.1 \ + man/thumbnail.1 \ + man/tiff2bw.1 \ + man/tiff2ps.1 \ + man/tiffcmp.1 \ + man/tiffcp.1 \ + man/tiffdither.1 \ + man/tiffdump.1 \ + man/tiffgt.1 \ + man/tiffinfo.1 \ + man/tiffmedian.1 \ + man/tiffsplit.1 \ + man/tiffsv.1 \ + man/TIFFClose.3t \ + man/TIFFError.3t \ + man/TIFFFlush.3t \ + man/TIFFGetField.3t \ + man/TIFFOpen.3t \ + man/TIFFPrintDirectory.3t \ + man/TIFFReadDirectory.3t \ + man/TIFFReadEncodedStrip.3t \ + man/TIFFReadEncodedTile.3t \ + man/TIFFReadRGBAImage.3t \ + man/TIFFReadRGBAStrip.3t \ + man/TIFFReadRGBATile.3t \ + man/TIFFReadRawStrip.3t \ + man/TIFFReadRawTile.3t \ + man/TIFFReadScanline.3t \ + man/TIFFReadTile.3t \ + man/TIFFRGBAImage.3t \ + man/TIFFSetDirectory.3t \ + man/TIFFSetField.3t \ + man/TIFFWarning.3t \ + man/TIFFWriteDirectory.3t \ + man/TIFFWriteEncodedStrip.3t \ + man/TIFFWriteEncodedTile.3t \ + man/TIFFWriteTile.3t \ + man/TIFFWriteRawStrip.3t \ + man/TIFFWriteRawTile.3t \ + man/TIFFWriteScanline.3t \ + man/libtiff.3t \ + man/TIFFbuffer.3t \ + man/TIFFcodec.3t \ + man/TIFFmemory.3t \ + man/TIFFquery.3t \ + man/TIFFsize.3t \ + man/TIFFstrip.3t \ + man/TIFFswab.3t \ + man/TIFFtile.3t \ + html/images \ + html/images/back.gif \ + html/images/bali.jpg \ + html/images/cat.gif \ + html/images/cover.jpg \ + html/images/cramps.gif \ + html/images/dave.gif \ + html/images/info.gif \ + html/images/jello.jpg \ + html/images/jim.gif \ + html/images/note.gif \ + html/images/oxford.gif \ + html/images/quad.jpg \ + html/images/ring.gif \ + html/images/smallliz.jpg \ + html/images/strike.gif \ + html/images/warning.gif \ + html/Makefile.in \ + html/bugs.html \ + html/build.html \ + html/contrib.html \ + html/document.html \ + html/images.html \ + html/index.html \ + html/internals.html \ + html/intro.html \ + html/libtiff.html \ + html/misc.html \ + html/support.html \ + html/tools.html \ + html/v3.4beta007.html \ + html/v3.4beta016.html \ + html/v3.4beta018.html \ + html/v3.4beta024.html \ + html/v3.4beta028.html \ + html/v3.4beta029.html \ + html/v3.4beta031.html \ + html/v3.4beta032.html \ + html/v3.4beta033.html \ + html/v3.4beta034.html \ + html/v3.4beta035.html \ + html/v3.4beta036.html \ + html/v3.5.1.html \ + html/v3.5.2.html \ + html/v3.5.3.html \ + html/man \ + html/man/TIFFClose.3t.html \ + html/man/TIFFError.3t.html \ + html/man/TIFFFlush.3t.html \ + html/man/TIFFGetField.3t.html \ + html/man/TIFFOpen.3t.html \ + html/man/TIFFPrintDirectory.3t.html \ + html/man/TIFFRGBAImage.3t.html \ + html/man/TIFFReadDirectory.3t.html \ + html/man/TIFFReadEncodedStrip.3t.html \ + html/man/TIFFReadEncodedTile.3t.html \ + html/man/TIFFReadRGBAImage.3t.html \ + html/man/TIFFReadRGBAStrip.3t.html \ + html/man/TIFFReadRGBATile.3t.html \ + html/man/TIFFReadRawStrip.3t.html \ + html/man/TIFFReadRawTile.3t.html \ + html/man/TIFFReadScanline.3t.html \ + html/man/TIFFReadTile.3t.html \ + html/man/TIFFSetDirectory.3t.html \ + html/man/TIFFSetField.3t.html \ + html/man/TIFFWarning.3t.html \ + html/man/TIFFWriteDirectory.3t.html \ + html/man/TIFFWriteEncodedStrip.3t.html \ + html/man/TIFFWriteEncodedTile.3t.html \ + html/man/TIFFWriteRawStrip.3t.html \ + html/man/TIFFWriteRawTile.3t.html \ + html/man/TIFFWriteScanline.3t.html \ + html/man/TIFFbuffer.3t.html \ + html/man/TIFFcodec.3t.html \ + html/man/TIFFmemory.3t.html \ + html/man/TIFFquery.3t.html \ + html/man/TIFFsize.3t.html \ + html/man/TIFFstrip.3t.html \ + html/man/TIFFswab.3t.html \ + html/man/TIFFtile.3t.html \ + html/man/fax2ps.1.html \ + html/man/fax2tiff.1.html \ + html/man/gif2tiff.1.html \ + html/man/libtiff.3t.html \ + html/man/pal2rgb.1.html \ + html/man/ppm2tiff.1.html \ + html/man/ras2tiff.1.html \ + html/man/rgb2ycbcr.1.html \ + html/man/sgi2tiff.1.html \ + html/man/thumbnail.1.html \ + html/man/tiff2bw.1.html \ + html/man/tiff2ps.1.html \ + html/man/tiffcmp.1.html \ + html/man/tiffcp.1.html \ + html/man/tiffdither.1.html \ + html/man/tiffdump.1.html \ + html/man/tiffgt.1.html \ + html/man/tiffinfo.1.html \ + html/man/tiffmedian.1.html \ + html/man/tiffsplit.1.html \ + html/man/tiffsv.1.html \ + html/man/index.html \ + html/man/TIFFWriteTile.3t.html \ + ${NULL} +OTHERFILES=\ + ${NULL} +CONTRIBFILES=\ + contrib/dbs/README \ + contrib/dbs/Imakefile \ + contrib/dbs/tiff-bi.c \ + contrib/dbs/tiff-grayscale.c \ + contrib/dbs/tiff-palette.c \ + contrib/dbs/tiff-rgb.c \ + contrib/dbs/xtiff/README \ + contrib/dbs/xtiff/Imakefile \ + contrib/dbs/xtiff/patchlevel.h \ + contrib/dbs/xtiff/xtiff.c \ + contrib/dbs/xtiff/xtifficon.h \ + contrib/ras/README \ + contrib/ras/ras2tif.c \ + contrib/ras/tif2ras.c \ + contrib/vms/libtiff/makevms.com \ + contrib/vms/libtiff/tiff.opt \ + contrib/vms/libtiff/tiffshraxp.opt \ + contrib/vms/libtiff/tiffshrvax.opt \ + contrib/vms/libtiff/tiffvec.mar \ + contrib/vms/tools/makevms.com \ + contrib/tags/README \ + contrib/tags/Makefile.gcc \ + contrib/tags/Makefile.mpw \ + contrib/tags/listtif.c \ + contrib/tags/maketif.c \ + contrib/tags/xtif_dir.c \ + contrib/tags/xtiffio.h \ + contrib/tags/xtiffiop.h \ + contrib/mac-mpw/README \ + contrib/mac-mpw/BUILD.mpw \ + contrib/mac-mpw/libtiff.make \ + contrib/mac-mpw/mactrans.c \ + contrib/mac-mpw/port.make \ + contrib/mac-mpw/tools.make \ + contrib/mac-mpw/top.make \ + contrib/acorn/ReadMe \ + contrib/acorn/Makefile \ + contrib/acorn/SetVars \ + contrib/acorn/cleanlib \ + contrib/acorn/convert \ + contrib/acorn/install \ + contrib/win32/README \ + contrib/win32/dllshell.c \ + contrib/win32/libtiff.def \ + contrib/win95/README \ + contrib/win95/Makefile.w95 \ + contrib/win95/tiff2dib.c \ + contrib/winnt/README \ + contrib/winnt/README.console \ + contrib/winnt/fax3sm.c \ + contrib/winnt/libtiff.def \ + contrib/winnt/libtiff.mak \ + contrib/winnt/libtiff.vcp \ + contrib/winnt/version.h \ + contrib/mac-cw/README \ + contrib/mac-cw/Makefile.script \ + contrib/mac-cw/mac_main.c \ + contrib/mac-cw/mac_main.h \ + contrib/mac-cw/metrowerks.note \ + contrib/mac-cw/mkg3_main.c \ + contrib/mac-cw/version.h \ + contrib/dosdjgpp/README \ + contrib/dosdjgpp/Makefile.lib \ + contrib/dosdjgpp/Makefile.tools \ + contrib/dosdjgpp/Makefile.top \ + contrib/dosdjgpp/conf.bat \ + contrib/dosdjgpp/port.h \ + contrib/mfs/README \ + contrib/mfs/mfs_file.c \ + contrib/pds/README \ + contrib/pds/tif_imageiter.c \ + contrib/pds/tif_imageiter.h \ + contrib/pds/tif_pdsdirread.c \ + contrib/pds/tif_pdsdirwrite.c \ + contrib/addtiffo/README \ + contrib/addtiffo/Makefile \ + contrib/addtiffo/Makefile.vc \ + contrib/addtiffo/addtiffo.c \ + contrib/addtiffo/tif_overview.cpp \ + contrib/addtiffo/rawblockedimage.cpp \ + contrib/addtiffo/rawblockedimage.h \ + contrib/iptcutil/Makefile \ + contrib/iptcutil/iptcutil.c \ + contrib/iptcutil/test.iptc \ + contrib/iptcutil/text.txt \ + ${NULL} + +DISTFILES=\ + ${TIFFFILES} \ + dist/tiff.alpha \ + dist/tiff.version \ + ${OTHERFILES} \ + ${CONTRIBFILES} \ + ${NULL} + +CONFIG=\ + -with-CC=cc \ + -with-GCOPTS=" " \ + -with-JPEG=yes \ + -with-DIR_JPEG=../src/jpeg-5a \ + -with-ZIP=yes \ + -with-DIR_LIBGZ=../src/zlib \ + ${NULL} + +rcsclean: + rcsclean ${TIFFFILES} && co ${TIFFFILES} + +release: + (cd ${SRCDIR}/dist; sh newversion) + ${MAKE} release.stamp +# ${SRCDIR}/configure ${CONFIG} +# ${MAKE} product + ${MAKE} release.tar.zip + + +# stamp relevant files according to current alpha +release.stamp: + VERSION=`echo @VERSION@ | tr "." "-"`; \ +# cvs tag -R Release-$$VERSION ; + date "+%m/%d/%Y" > RELEASE-DATE + +#diffs since last release +releasediff: + -@for i in ${TIFFFILES}; do \ + cvs diff -D`cat RELEASE-DATE` ${SRCDIR}/$$i; \ + done + +# create release distribution archive +release.tar.zip: + VERSION="@VERSION@"; \ + rm -f ../tiff-$$VERSION $$VERSION $$VERSION-tar; \ + ln -s ${SRCDIR} tiff-$$VERSION; \ + (for i in ${DISTFILES}; do \ + echo $$i; \ + done) | sed "s;.*;tiff-$$VERSION/&;" >$$VERSION; \ + tar cvf $$VERSION-tar `cat $$VERSION`; \ + zip ../tiff-$$VERSION.zip `cat $$VERSION`; \ + rm -f tiff-$$VERSION-tar.${ZIPSUF}; \ + cat $$VERSION-tar | ${COMPRESS} >../tiff-$$VERSION.tar.${ZIPSUF}; \ + rm -f tiff-$$VERSION $$VERSION $$VERSION-tar; + +# +# Simple rule to run test suite assuming that pics directory is +# just below this one, and that .rpt files are available. +# +test: + test_pics.sh pics/*.tif + +# +# Create a package of the test images. +# + +PICS=\ + pics/README \ + pics/cramps.tif \ + pics/cramps-tile.tif \ + pics/fax2d.tif \ + pics/g3test.tif \ + pics/jello.tif \ + pics/jim___cg.tif \ + pics/jim___dg.tif \ + pics/jim___gg.tif \ + pics/jim___ah.tif \ + pics/strike.tif \ + pics/oxford.tif \ + pics/quad-lzw.tif \ + pics/quad-tile.tif \ + pics/text.tif \ + pics/ycbcr-cat.tif \ + pics/smallliz.tif \ + pics/zackthecat.tif \ + pics/fax2d.g3 \ + pics/g3test.g3 \ + ${NULL} + +pics.tar: + tar cvf - ${PICS} | ${COMPRESS} > tiffpics.tar.${ZIPSUF} diff --git a/Release/fax3sm.obj b/Release/fax3sm.obj new file mode 100755 index 0000000000000000000000000000000000000000..1b14affc5f49041029553547fbbca4a138af2ef3 GIT binary patch literal 99742 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 s@}Dk2pMDj*gL!Jt%VW1xW}#w{yK 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

    ;JpbQ5mMkST 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

    tr2@!kgA4!L7 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%0Ds~c{4c||5C6=|*5a@CclcihOR603ZK?QQ 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

      w29w2YFSxPK2B`SZM<7 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

      ImTS_>0+-iNEB5 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

      %(9PgwS%hzd$5RWFYH5HCk1eM>dhn* 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%0D? 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 literal 0 HcmV?d00001 diff --git a/Release/tif_aux.obj b/Release/tif_aux.obj new file mode 100755 index 0000000000000000000000000000000000000000..7d4acdc98b06d3c41f084e7915f508e5d63fd3a6 GIT binary patch literal 4129 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 literal 0 HcmV?d00001 diff --git a/Release/tif_compress.obj b/Release/tif_compress.obj new file mode 100755 index 0000000000000000000000000000000000000000..836d892b7dd4b07e259255a196d4fb8ef7cf062f GIT binary patch literal 8275 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 literal 0 HcmV?d00001 diff --git a/Release/tif_dir.obj b/Release/tif_dir.obj new file mode 100755 index 0000000000000000000000000000000000000000..6502137bae7eaf1a3b4740856340a4f1f630b67a GIT binary patch literal 25762 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 M`YIuguv`NCPi&{O)&Kwi literal 0 HcmV?d00001 diff --git a/Release/tif_dirinfo.obj b/Release/tif_dirinfo.obj new file mode 100755 index 0000000000000000000000000000000000000000..2bcee8348b82a30bf3b99ee0bcec427220ef9122 GIT binary patch literal 17766 zcma)C3wT^rfxhX4^xdXy3Z+m;OG=9^p>0Up&_ZrzCi6(qIL0jF;zrFgUr+Fd8ci5$gN$sovuIQr0iSNB}%ETm6#X)2fa7orQvv zt#tm7_(o&ZvHE;pvY50Z`z9MkWwl`poMUm@@nssOS+C2C8b+UIY1GlIMtT$IYFy~% zAd%%RbxkgGvyfh!3mvLzY;~by6A!r1O@VH&3*8Lp_PfwcgRbO4Hxs%;E_6)q^DcDL zp*!M2Hx;^vUFwdx&~aRya-rjRdBLUbRTsLsNN>!Aj^ky{`8YVjMB|>i#V&O0x799n zSGmw}+_$^XvER12(6M|wUFeuz&V>%ki!tI-x8H@1^YUgFI?lI4E_59CpL3z(JUZe+ z$Nu;?7dp1z2^YGvq5HlI9qaLH7drOut1fixx3^vBSdU4IaBzf)<_C4tUFbN^Yh36! zf0w$@v0c`=&~aROUFeu^hYKC+(d$CTe2Xr09M7XJbR4I5y3~Ejg^vApj|&~w@gpvD ztj95zx~E*|*nZEs)V<_F$94P-7dp zv!L_3&~ZEmUFcZ8tuAyNrzsaY&flC19n*Wi3mwX>6wV@ti{0*&XnHAYH@9h z55t+#JB+v^wT2N{41mDveJeffHp*B7{f349z1_cc%2Nh5tLyEWHQ-VG=%PO0Nl;u+*I? zJrn*eXg)4=_IT0zgX`5JQUfT$ME!xP8c$8AJH7q>2fBBpR+aD4zEpp5I8)4|cV00( zobIa!sQrJ*NZ9MsRPl&E))H;)s(lybslXrWbr!xE6z6epW5CooIm(sSatcvdr??7D zXR(T7dQ5|1628U|$Z?!8cm!wV%WFi2DsZYSoF5F69o$rz-V_H%2gB3}xM>cK>pH_s za4ZYQ&vfaX<=|#WZnlG)DYml+@^j`daCTo8u2U# z-;2PhHk~iiyTIYCl-z|AaJACQ`l_&a0&a=)T4lozgo~uk$t`#2c+bOd3Ajo4qwXA8 zmX!{j8bg;l(pxEYt0l+ra)IR5fUChDx$`Br!J#`(avL4oBFS9^j%8sxzejS-;HvOP zZiVDb>1CN0O0GqE$t{(f7o3`_EDwX?s8gJ80-fTVI={%*S~t|#ZFO*JTq%xT#kC3D z*ckhAwZWAD=Q|wLxWAMHLR9KlwtA_HIdp4e-4ftbzg;Grcy1{M-Czz;S4R!MKC z0l_1Ud44ebhY3ay1{YI5HFVLZE|o+BsT{Y@ZgXAb}_{WbHS-HFS96P9yrwo z%OzI>PWAaEGCjqy{S^1>8*Q&D^KZbZIbCa5;kV$_IJjsW$2L&he>rq@Ql~iT6!*xe z)ut>uK%6Vz7pM>D34um{P73sqGCB;z9IK3nfQ}3FJ)mz1^z$-$ z9q19kRicS3v;gR+;8p^CO&}BKs{(ZcJs{8k&=G;I2f9z7gFs&t=w6_E1Ud?ISfHnX z?iT2mK%W-q&p@9PXbJ}FCj>el=%WIy0=h#WKTt`atw3z+DkB4QK%g6eJ|xg5fc6XY zC7|mC`XI1a7HCj#mzPlpXt&_D1ML!MsElp`>J!{Q z03`)F0<=S*V?b96^eoU;fnF}7zX5F$Ts0P+PJ!ymXgyF|a1kJm!7Afgps+wipnyOh z2J#8?Ss+uO2Z62>=tLPk2XuwtUIAJs5R&9v$5%}mEeBdHxQ%6$0IC;UAJ7VcM#|_T zK+6Sp7-*?L4*@L^=zBn1@2ZTS1MvZ3mGL?d&q-BAC6*wb-K&fRK=TAz2~;gmG+E52 zN4DhhnZE9vFFBaXCk>73>dmK8StF26W%}a%o71VizFaYxHM((+I-E~!$tQ=RxxQ3E z5rJHOFj+LhgUMZ~z;GrLNo98x2khTl(tY^ZRm{cG#exy``DzpSTz@)~G7px_8HxX^QVSX8W!~9&ZB$ZP>N+OrqbD6MrW!&l}}}RQ{GInch8oA zbTMUY^X>HI6S+dVn9gM>5=7VV&O&lb=Nri9&O@R1pWLUUzTrIHqB5HN5?)LN5{!=RH@gS&slvcOF4M;$DW<_-3PtG+b0iJrQ!;b*9Fzst+l$%5 z5{uDjW$&D6R>JX29|jmFmzXO~yt!1Yn^L-Y22K(Ojuq!6cvdw=PgI_~xf&G1?(GBo z+AL#c?0Ed3BkhT*VLi`)XU-6l2hpiJT4` zyWt$q$>YDAl&}h;3Nq#Q)wj=hl)esCw9;KH+O1ZZ$8Mi-@P;`he_eIyC%0CN9;+EW zUfDMMmvW*@N_Vhso|B>yyDJkNw~G8^V%0r69`~H=u{dYVmM}|{w?>qI3_og&JdS69 zt1>CcUwxwwRSytkcqC5DI;0YcFcXU(N)@BH)As!uevljAu84- z>QlOfEi-yzM#CFu&(x;Uoviyem`JJeE4PJa-*jsDEb;TU(5#zIeVq}*XNj-UK=r21 zhG#nZONkk!(3H-O+22l7&Hi?%va?j((YbkoOjZUqyng-N*YxbTdR)N|&PKAludXuY z1MzyR##jY3PjJmZ)dKPSYH^7&$E!U)Z>Tcf4`g}!dCs|d>6*T4YL_-L*k5%Nr&Z(ehG$0KoHYBN9vgjZ zO6f5ffkY7j2O{9`z;P63S>y5BSzSGF9`S_Dn|EAn0r3$)mAFLWjenKF=BO2D1c(m} zn6Y))#cvQI@Damg<8#FJ=vaUmJ+o=S@YDli#mhI0OetQ*dD3vI^dN`Hfj4egR6583 zQko=1^O_)<)iU~6<%XxP|L=xl?Ax9l_b^q_$;@pkK2^q+G6FEJ;Q;~HdAzPLE*7QX z1h7WwZexozpG&V}a2|MLc-|HP` z4~ULlCfk}c`tKzDK%POexkv&l?tDxc5gSJn<^_hfT>v$e(KuG&>2OWBh4vV{8M zAD3E4YqC)R04TM>Ey zE^aK^4zzgYy+gKr8Q?0!P$Q~bzNr*0l+b>R%N#rv*7Al+_Mfi6U6kc9j8>T>HIp(T{xUgSP8Mixju8x{G7pQ&BDBU;FeIF0ox|3R0uHxaxQ+xEM0Lcky*- zFx7^9497r??&3|ir-J2VxNYhRM{Do_5(725YX%rk1&<6>&laDw^Xic<#_BGfu00jj z>WCYkSHJdY+qGZ1sL@?)Jx>LBhQkl=Rh_EWXQYc7-NkmW^BR3)X3TayB3;zzF1ER+ zg7szC^xf@P#8qBDkuGX<7sryPf<3|z_;L<+`O5Vd>7qt=%>`q-`tGebVY}4D5H-4s z3!XhwrmoqJyE2v63JIvuU7T6==uLiM-=A$)mvm91yLdXaU58c=;7(iRH6j5ux{Eh` zo(h(nVf!`zf$6SXcS}Hx?m7pIJ?1^j+8b=wA007Jqr2+B*sIO{FQ0IiIbj*m-58iyGZ^v2dx?CiTw6Ke1hRN*6V{YngCy-Z9MCeHSihCRsm>`=yH--NmaO zyEUGUHa%gx_~46y8r_A{6CEewNi7Pdf(Ovx@)y?sTF(w zT`i8h_(+j~8r`)9jD2=^qhrxpyM%MC+Xit%sk=}hxKs(}$FDnPyVgk;HM;9^;X>Dn z@UO=S0fmERt~?r`zqVThnx)5=q^;l;c7qhCC6O;gmh7(yVePpnw7J@ z`I6tx>p|(FMt7|jE}nTA-jlhoWV@b}E^2gF6BzsIYvGiuKW@AJC|%U(t}8Uxu>W0L z^r@LLM@~Cxbk_#qQvG%4>gS)aU6)B0HM(n~=DK%d(s8crkS=O;*OkJ>>nnz5jbrV0 zUIpo*Mt7l8(Hd&CIq&U%4BDwl$-8r|g;F4>*N!iOIEjO{uXeaAqJ?(%{0RLDtdJo@k- z_S>%2(nXE#!eE6CEe)hb-7UROSx`ljs~lrCy?S3tP1#E5X?{U5+W zqQ>Fv(nXE#3WBlEL_he^6Th@w_emEux+^4HDz8g!S-8t~os=$WbXQoo)Oq>U_zy5G zR0)4AUDW8VHsRtGAj6A`;zir#kqZMgx(h=b^-?41)=TcZ-*&B*E^2gFM7UH5pI-iw z!oPpV#%t`4JCmb!8pL?V!J zZf5KRYu$rX06mpk*3u!KA2{>s5}Ly}R^s#CUB{2udCit7cZs}ut}Ep77z0*Nxz}mA zGj6rUILp(GSi3ybcAZw9O+sTb65+8Y58Ppwr&*@F3FYAvA$yzKW@zn{>l?nlV$*3U zZxNcqIC99hbkvmWl-p&>TSQHrPja>j7pAlbXJ-!{XKz{ITIr%j@AqwBJQZrKySMvZ z)IzzwDqYm*uJ;O;TI-tLdKD8zxt@?NY9<*y{X={|){h?uwd2yc8l0Vb0DyM0x5WjScJ8t~Yw2qYE1r z1hdX)8^^2_*J4ghqqrlnnWok2#M51iarXNTq-FOzejqQF%sIk)gyvct*_L~K%P}2Q z4d=^cphvc$J))?$Q+~Vp$efaTkQS{N*6WyXkp8GDi-6&u*m=NGTW7rE^72%?gL}ji_WB|*B9XEY0e}IMYDNz zb90aNR5;rwo(zZabk;PR%qF9U4{!O_*m^T2ewHN$d_J>hmABROM*V&hFO|o?6mPC; zX)ztTa9b>(>#P^$y3T7x6XB34GIG2;A20F;6A^R#3w2EtHv|5*kkVLhpEZHE#q_tf znB!i%Ym$T+2`0R@M6`saSQl;c22A;GUW zX>SR6q0x3FXquRr2*r_%W23^jcwcKGWIFdQXz_6~9*knFIkz)tg7pc%&u^*?4q6oQ z_J&R8mIp0*eLN8Hn`#q;7PU6wYrz1^?!mSQJtFK2L``d>gcgx7Zlp(WqhYta$2t<~!l30UvWwb-V3$loR+PoF4pvo#!!o7y%E&AdJw!BkTlGqfmg z(2Tc6Bj$vgH8f?!^e50J_WlhmHfFZPFj|~jI<)w;V#TmFd1w*qgNb;8vqo(D(4!*p zaI2{{f@o1_sGzqsV2(HLq9#jwtl zx2Clg6J{Xl590*p-0L(>5e$S|%)hhF;FJ?;Ym4E0p>3woQi++NXdrGn_t$9gNFxyn zh2>(!9W7$dji!m35pOtbI=10x(Kx-teO4hR>Y&Dm-;dKUx9VuN%L6fVD>v_GG={k^ z6lk~3l8y~MnkZ%lT3RqW9eaGV_@+oWz_Y&G^`pf_%y1B^r@awKi*1Spd{GfO(V`O! zCroX#kmmKan_h1W3k&zrO|*eXQ)67mG0hx%inM4fZiyI9Th47pnjp%v3@XEYeiN*o z5z`yv1p}i`uL_1=q!s5GZGY0Za{DsW{Yy<9lv%F#hpY4^GhJK%ki=&{~&pj#4b%988oiDJ4DAwFa zj14Nyt1JlmG*qU_7mx*gqX}gFeI4F1hj~x zlc3?}fbJ^lZrjy9wzl1Bx7&xUuY{mNYkgpCQR<2mw~3KfS1V}6?Dw4ed(BLu{6C-l z-%ozOIlptyIrrRi&pr3?yT4Res>RT>?p5E*6T)v1oR&0qgqk8=sKpnj0gH20jy@bBggyP(Wk^mPA6^A|~|CbASh3f4W3&#E;hVCV_6_S@Ukc|0Y77vOZJ;PTheIv@yg8uU6o1;@nhE43;Z>pxkaV3;(4rcmjEAE zX#jE>uiPg<_ZyYg0?M)MOmXNn(99#pK^o7_`N%6&X_yeV@yhK1-MuR9xaA__o1pp2 zTq%wE-&pmf?4Of!nbLUWz7D!!m3F*xAA+0@LGw@Zq(Jf?S#GMooHHMN4i}~IROX&gi~#IQ=k1>*)k z2rOw%E%zko&ZxBGm3ue%CuRt7KQ2n+`8|pGnM%WixQ*w3CqVa+N;_V;TfqN$lDzTS zqiv}WJ8)4NPhJ3dcY@}iiEcc3he31PL^qbdJOp{~f#$Ad0Fdmsq`ZV_iJQM@st4(xc)x!(^8$t6m6Ww_7?gGu%O>|?)dl~Zn z4K!UeAw!yoYb?900RBmphUh4bXP3W$ZbFu%8P6`qknIA^UsXE2+@$&6kF7#vWef36 zj+8eYKV#`fVPJriG^O$MI|;foD(!gskzFQUA;ceWQF7oKtK9Q|Uyw@_Mv~F$B>r+8uv<~5`yNndGHHX5D z(bh<7%Z*n=qbL?Sy5I{m_SukQB;|~rnuG{Y4?Uhk*1B_NaF@?S7U1wE1+-htwKatbS{s{gs^8cW3C-~~c62n}B4Y1(YuD8&5nqP?XuVS6>ATM7%N^`1 zal3l1gr0Sy`yR)SQsRsqu!To=kqJSP{_z2atM~7yzf$5>_Ph^lZLoTD-)BTy>5d(6 z<_<(IQl@Vt^VJN|J$At1?{B!_`fFncyn~V@UgXQ%WF@|jzz3$-X{)REXCVH##JMvv zh4Ot(iecLs7)jt{!wr-(=Ht9sU$ba@9{jYY6m! za|~pgtZ4`1YkfJ@(jdFZrp`zHZ|bS+Aw^_uZGnMf*0?7p_m!?`ik)pHtvGxqBAUXw z1k+xsUMG!LiQ}@eRWQjFPmtSW#bGesJ2&;uT(iht>)=|hs?jDh{a9cWUXhOc)e|tRdXA6xI6EB zOZ5DD$qYa0?RWL`W3UYO%~}(C9xZ=+KY53;-RJQiWg9#-iqu!+bG!EZ0KwYdA66y? zH(6LX3y4ezKM!L79VTg;K&0$(;?C@f=fPZS=Nt(2_4Y^86O0J<=YdCMg#W0r&kdg3 zH*TAy>>_Uep|IkL+a6FBu2>^F9fh%eTkad%KgfN<)iVqZS%k9qL8b$VtM@R_;n;0X z5xFg_tg?o4iye{KvD+LXa&hcgPhsvG=xsA13qTv4LzxO5qi=jh(*0bq56o|DoM?B2SF^;`9@{-DZhi6YhSx6nSgbMCT}b)&f#i zIs7NXO1pL79joHJ8FPk!`Mglk{@qHV4vO@QOx%<-^lzDqW5|e z(wn%~IF(moZ_gTdcS5{qU;3{=D_%W5$vtwlUZ8`8jjZba^qrkp%I9@|`rr7yeYrtE zrCz3$IxfR z9K?60!Ytv~jt*G=8*bcn zNnSY?tczcFnUJQZVW;;bToDxObYFl6MixUjcvN4?-5<63kH(9x$FQ}?e>jN#RlQF4 zbdQX~XqVwG2r_DI>O*LjdMidR#d)sLht5SG+C|+7U56U39^L5fxdX8wYs6a$6C&qv zm{9~bevZ4|v4-80fh#5B6mZ?2u0xhv58qbXz5hw>HZIp4cLI$Dqg<`)OGk?D zdjY7L;K)>E-$6j}Jv3XbHf-spE;1SNhVQ2ABHzM<2;}Pd3(y!p7AtFg3;q4o@THod zRC;8f``u}%Nu(gql&N#7ZD)ox7F^@gRTA)+%`p>%|!d7?*%m0~Bt z$Ry1Kwz|GYuLD=#qs@HZ#`o>Gb8YMTcJ0()jJt?ocv1$nStJ=GF{N43%*jd*g8IPO zC%fHZPe@jNO0y)P?Ka>iBvA6h1O-8FjAXIt$!fEu-L0kukT&A73ryC<4Y)kwTex4( z(4)9ths!Sdao>Q;BhG^ju3_ATfFwsHpgP7;kCiwICbi758<3Q@50I4i2p}o%I3Ou+ z2$1AG14!~Nh4my<1gM7PT@R?5p(a2Dt*1c>JK9`P4I6$~xF z7_u6WU0epJlyOG^tzz8UI_?ahZqB_D<6aTx76K|{=pO;eavufs3Df;r$Ne2pKGV&@ zVssX2H@XgeUu+Y4wu<3@Cx z&7tKk2jpWZR{@&KP!k{z*Y|cn7KR=IB;`E~NZQ~9K+-(8UZz0o}s6Ujrod`)5GujQcJidZS?%KLk|DI185CGS>+R@{v0Ykj$M4XbaOV z03_wr0FpXy14Lt*M?47VT&DXjAU8u#0?K1~{eTJ>IshoZ&_O^hhEC{oLpt=HPWQeJ zeFSJ8bDRdWh@sB_&0&bPo@X;;12l^v2cSzCasryl&{{x}<7z;X<2pc+V?7`*(=`K< z90lzgqMhD3^E&5v!!4oK=EdHY4Q=fmEo~dTjcv`|rpDH$XlrAHp2HpOo4qZY8#jbn zLv0%(8^zkPk`ixo3%&eo@3_U=(&^pY(%DI*9if|}z&9rd{z6%`k&c!v1-C>(h3(O{ zNT(=lZ*A|`+_*(xlc6Kj2uW)@8rwRtuTT1AwVPhLpaBUN1c$>&5UqqpsDUngshC(-aLmeI1m1%5h3dz<< zqJc+#w1P%<>?&^&o5sFo2V*pm3yJ1ip zWz=894sjDM4|nBFfb87OWYDi{_jYb+Y=T8Qk%LzmeCO?Ys3F7CL_vE+4msh#M0b)_ zoJ~$i*448b*nm*yZcqdhs3J=rPf=VwFG5f)En?-4jPm#HKhr8974SijSL8}1_YWN>lzo)fJ-{m$-WtNbkTT=k zxb0jyjZ&PGl~>YUy*Br?uJT30eG5m5)S22I7Ij)FS?E7}>gNX_1?u|`_a5q+qa1WS z_L9F}mRr#0yhAN_Kd;qupYM1_sZ4L^J_H`i^~ykBW%~EA>=IEsg!PpK6Pu9&pA3x@ zP9nJM9G*4+@`zsCZ)O}#6J%)Q-jURwwe3HUiU_wZw=+d#4#DuX3LovcIppk9Iaiyg zI#s7aEEL;uA%Np9Jt)zUza#*GONfj3PPLVZh7&HECdW=C-+DIjKSCoAxz!-O?=l;5D z0q@+X>&lds12)^_5@S%=cMLovIPK-y8g2C{cl6dvEo1#>Vy7o@gxhqik)72lMmY@^>K%>v z(8s2tk2_`jqh;z;b^EYd@?y_QdA{KWY^OU0$%c$guI zQ|g2c&_Cm{a~ye)p`Ez@3q#aPCGJigBI8L8Qby+93rKPR5D(y@Sb_^ilh1P8R7!2J zPi(F`s8LXFTe$mIr7-WBHSy}v=vA~QxCJ54sqPEz4mw~IkcRuJ?f%2NgOdOtobL`! z24GbJj)9@{aGym68{%GO;#Pu=fp?KDS&4&LNrrWIz%fq>R+)*96sittVa$2z$i@Aq zj-0*4mq5`U;kSOM!+nznCBc-^=()%r7y_=q8U_vWq>+gL&T6Zv*5(|#oixvDffm$9xU-0@fGDve z;Fmm+dykCD=@gZ*K|~wW6SZOG2zKq@?6K1p?7MqiyAHucs9#iB%VM9LKc%2r($yp0i!Zdw8|G3-G=taz2`dn!;sl_Pa-1<}nY( zQHFYtx_XYl5Ly7UDbLFNBFEq+OG4B1{0GSR?Sr~i9WNi{Mt%@@wUL!V_<}7`i_tJr zX>842q;E(o&U>^S+3;N3JtI@pEm_;$;km0EyH~rgJMQf{6tUALW#=ga&42A;E$%d;d3gKoVTNwUUFPo6bMFTvN5cQmb15!M z-a~+n$!i?b7@><~p?3kvl?Dx`-As2WpeF#?1--eun-C=oyBN0g@ai07;G^K$7D!InyZx1+TMW};`}(Dk3?V))TRkGrNlYP@sNGCjzgj6jp#a0AUFU!OoCC9DnH{7aL2sROOe zUc==PWw_HE#Exrc9&W6!YBTy_&*K>$USA@TVa=3HMnUyGG(~oYmC4$G!D}L@V1A*3 z87>x$q!)38W4Br-L>B?{^kMyrtqAc}t53lGf}SCC#v2izcs-qsOk77%4$M4*5y(q_ z{X#;|hGyxwJmPZPkKnTN7P4HP%()?5ySF*i*1ox=tr5F--i2+^ z&EA!~*aWj&!%%%;JZ=&)52|gR$VQh^d;9zAl%LRB0L-(j^~x;{%pnw~{nfuJyRQaz z?v<9l?LKz{+5`T83OSU2Bs`6*r6Ammx$E3tqp}WAVA7wMNRvjoAwe5%015(fiXGdA zLjW!);l%t{n;Sz#CypbaxN)a#RK`3=F&xlO1t7rzIUUD+qNv8ijT~s zt5yb`>!A%9oPW}Sk1_YAS{p4l6Hk=1mZQ*5p~J(Qe(SL7;H&e099B9j>+AfZ>uTYQ znM1_DLB!Q_FM*#=j>AX0rp9gAn$y^n)Aj4jtysl9F8BQ%=V5Xaud;?$oEyC;5F4=O zKDYft=$gTE#iz+;eUnG#(bF1u5SOLkeP^2aeJ5HQZMqQQ&7FH1ZOk2rC2`f&d|CjYg4FbBIp>PZaBv_hKhb$KG436gz8` z>m9IlJsI0SS{Ec+r<-m4FjzEOPm4SMhDV_d7O=On&RJh$HhJAI$(p$z?3f;}cf4u+ zebD5)i?1+AF&K&mWIRk4vO%TdD@VQ03=FW4$d4yx#c?>S;aHjJhYt(yOB zswUWIimbC86(H6K|Hnkg_DF4-Z-E)*S8iLYi+G(xym=uBiGG+YA=#plX6By$<=i+0 zNv=_2xQ3j{P=J|AE~V`UB%i5>9q=@$Qw=El|CDBc+66P)`K9v1c=GTpQihuX_xUqq{^WQ0yK=<9K6NiRkROje>&QiwWv< zeRiEP9Q!JIR(7;OS*@P?db?WE@hY|Vq$*J>McYuFg`PS?c~*I)toQJaY5D%cvFB`I z#U1On_SJn>7X7QXhi;Rj$zYwKrE;2e)TUcB#&_fL@T~D7w$zn)mQx9upVJ{ByJ*&N zw*r#>@CYCo=V%Rc9G7W&(Mj)h`AseDH_In^5*&2AD5GDjOGpDgK_EwOIrCZ^$IOSe z$WBl0nv&LU49@Sv^b5nW+pU(m`gMsL5{kObH68OP-mR&t)?X30l_MPa-;Wqag5(cc`-DRp`PZ250hTv3fyIN*8-|y92rMe9Dvw{iv~z|3D<>AfAAuP13v}N3DNV= zmEC$zcF1)=rLC4cDZPFpiJ@cWvfb2HMkJdNan;vpjY$q>^B)~)!#q-Q&?$2sXPLu) zw0G2X-ypUIOR-?XOUV8%S}M&@o?r9_Wrh`piCI1DH@fo?9^oyv*RTF8x6;<}w!a_a zlU;rFQm-6gp;)m{5XAnyF;8irmny9Nbg29@Tpm7&G6|4fEXQ3sP6Z(85DkE2Zi}8v zOIc~jrvXVzzNA9{#4%jd>olACRGYfhnYj;JY|37mnkaX?O!sq@bb6mFt#J@5qwY_H z7YDwb$_Lsh>XCCFC)9(dK2hGs^xEfo>;trlPpJy#4!C0PK}x)6<|tmOe$3XT8F+kg zFVHx1$#NOJt{xe3CJEza#tx+S9#)22J^uzB z+Fj8tp9p5a`Y#?DaF&I} zg(Xdr5%)k-`{pf6TAGJuO~!F_8U@TB`=cn4W(lg)M}PnDBN8-!=uhsOX311(s&bZ5 zBvBLTO-eHj;})qo5@Y^w8siV-(7ys8|NGldyD{CQ@+noyA86-=EMG;IKWD`<@q~l) zrG_HR@|+A2L41-JVrW#k1ar}YT>242a?JlWfHY0B(1<{(c*8GIBByv$W zOtVy|`IlMBs|~IJ6-zWy(#I+$wRAgj(kyN@|97H)wZy>l&KdovfE;nL>piE%@Dp-x#IuRZAzDM9b5jahksLNa%BK$o`8QZy-;b*fxMlc*1AV(9bXn-`-(nm!k+ z0MR6JQLWP~m*7t6(2sHukTtF=RDfty%P(6hR_gtW`ykqV6dlKG=WIa-0(Fc(XX!Gr zDv2gb(BVRz2Cb7RUeGaSYfMGyhKBtse{!Fp;dWI+qLJW!O?lx>s;P_RHfEG2B5O0;cryQ>8v5L#RhxWH4PV$(nuGxhGu<8lQhc` z&c$l=)H|PP_7dVsm5XQ+^`UKE!(!ifqW5J-}l}3PuBW-2|VkWKrB@J^e&EVY!6DA`^90j)-lP#W4z+`7; z2s(TvY0RxN2Xtwcxwuo>b$8El!x}@XK17pf4Wc)!L7cNwtl?vthj6Fy=9~2nlRx`p zg>kgri?*YBEzQgnZJ;AAp2Y#<=X0`V%rZXSZD6v&MT=31G5hm8U=ua;rD!;xX^!De zLy!z`KR42hB#rbxb&Y3N_LTnXs5`4dcbZd4^-s@vJ`&k}c`Llc*@v)>O- zNWv@?FQC(!XqIJ)z9h^tu_OVLjTWSL(k8B@O9g$jYr>#6RV87v#Dz(iW#TPpXK*cp zd5JMwbrEDGTJ_Qtt1f1m^>oMe#)6+>X8~$*imFy! zEWF4yOTG;GhU9E}v3GHbWQx^kmi2VUwfaBbM#t17(}y^emPpB_e{XX+uxS=FGN-Pe zy%RSg$%85v(IiHa3}6g>Mzh!b`;ruWmNL!VbjP*nwtuNN^!bG|taPm*dA2G!C&h*< zm}>^^l+OHg|F;Yqu28v%Ceenp>`$~|PKrLcOcTI8wWga@$+;;trTCF3IX6Y}N~ZCu zl0O>W`zNEOUsENoOp$z5g5>a@PS&kVk&G!LN`D!564QUUb%!DO0abEdiVXwIMOLEJ z^xBI|0lC<;-!u&lDqsMj=FrXvxJoXIR(?ichL zP|9J+*;#@W7wacrAn?;B^x%ZVy@Y^Q~J}C`*s^P{9NTCnncT^d0=@Tu^?TP`yGT9xD2P|R52u? zk+_>xj6ms$Z2{*nc@%L~a=mtfqakl|sB=RgZ)sj0eZEsd|3C=;FUa^$L4m-Ez=|=+ zD(Q>B*0qfrR1)H^!G3L#_6eeBAXIHrV_R!WTd20>){w-|cY*wrm)B4jXvip96DTcP zwJN|LKjvlS`3ehhm2@(Y#V-K!GV-#tFCp`?aAG1at0^E<{^B)(imI}T0F{=PrGEhl zj?TO+^&7~%Ecp>+Ks2ycCG>S=Jw7vp{+gVE{6J}Wd1WB!W2rn}e!gB-&YJSV;(+!! zq|A~M!yTcJE-4r&DJ%~LBJEUeBebQuB!4m~>xa)K6H2HIR8|#A9n_B}6S85e%3{>j z__k72f@)tG-F#!Hqbf|fozmDEiYwKrD_9(;C@Bey@l|G0VZqX>ih$`u&4ld2@<3T- zVL?Fscr#CJt1S9_GcSuOM)fX{)i2A~Mh|o=*UbsAse2?Xb|bzZRk5K6dzE}DlK@hf)vfQ z*&N#3wB;79GKGbKva(=lps=wmFAJxIGSO`yE0YSou=nH{^JG*DiE zo8hv_WiYku(ooq{asHf1*BHH{tfV49pStE{@wcupbd&nAYhrUyXAHMSqMi6$x1n%j zsOhFPjjgTiO`5DVf#Sk7<$+4{BK|a0ItAhabx7Ik5P^uHp|~@GZ=oZhq`oT}=&e!_ z+^W8%IkHg`3gM zfmOw;3j*9+kV~N+{YL9`V-;pDfg3#7*wP`3;Zo@xAomUvj_Hz-`dDEm#90KbN6B$V zJrj$jMbK;wWCr}WuQB&=R zt+`?)t?i9!7iKl6GbZb=iIaHMpzxx?ir{MQGHgwXC3}Idt4iV<9pi_kAn(E^6+ip>Z z2i6FW2^A~EAX8LSrOTH?7*&9d=cEQ`a~a%|){`%p8h ysA-4ctDve_7OB1gm*Wjn=_4?vB(ib!Ad6{0#hT!%@i>jw<61CLtyHH^fBqM)P|{Zb literal 0 HcmV?d00001 diff --git a/Release/tif_dirwrite.obj b/Release/tif_dirwrite.obj new file mode 100755 index 0000000000000000000000000000000000000000..bf45268807d81e589184ba307efb664b5e924abd GIT binary patch literal 16307 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 Bkjel6 literal 0 HcmV?d00001 diff --git a/Release/tif_dumpmode.obj b/Release/tif_dumpmode.obj new file mode 100755 index 0000000000000000000000000000000000000000..6fd0c80f66f2db547e94e1fd6f138023e3a70618 GIT binary patch literal 1904 zcmah~O=weD6u#+;Nv&El5(mYiZzQ^~7^0;zHjBKrX|+zOk&f-c+Gm^h(gyQW(-;4! zI)gMcJS-7ZX5pd?UAPe3xNuwy?Nq5d6@(ESn1!1z1UD`O#rmCl-|I`G#RKo$bI<+m zch0$gFXpOai<^EwH11~XCnhAQ<@JPdPPe)&4r9h;_pG+g$AX4_!KiQ(?mckP8sU`C z$iDdLpr#KMh69~8)CXe-n7oA}>cc)?TQ%P_{Nunh5D|pntMP?^Q7qhQe506u1eiw_ zjvB!?Xbi%(B?RM@g|U5#FEsnDI%=_QTkw&r7FWU8P76aglGW-M0xn<0w^!4XgN3w_ zP7Spb3MnlJL;kKa*45U&0(C4FJ=)sc(IcDDfcq~>qBQvjaxP6ybA1=ua^K+&+Vj%n zJ?Mqs9zc^kq;|f%Le{{w8J~wWK-Y8YXXx$Rf?{o?Al8PnwXnUc$LtUIPV`Q^?z=K( z8UeqV4s0=}{zC+__>%O;>;A3b=U3c~bLI!L_zJG@6JuT9iTEOsU3Bfh_z0nn+etUgssr;@=COb; zJcp9v%cJHL)oB)qLVDJ?P~!a(@2foD0g)%I^;UcywiEhCe14`ti;Sa%%xHH`)1!I< zx{|UaP}Qdq(00 zvv_WH3kNjCB00b{sp{wy$%(%C?VTC-SJ6EjL#LPc_gp^v$cf$#4~b_vdXI2Gi&)O9 z=!H*mg{<-N+fP_ddoKqpFJV@$Pc5HiuMfdIUu8%yf#gzX5K=QE7o7}m3MXC*neVCd z7pcRDQ#--da^^o_slRr0c6Mb`hJ6K?YFiyyx(ou*nJ$ctL{Z{Crt&EnJ(C!{=zzt| z5#Ww|K9^^ah}y2Gp=hh}%b{qSVzUZhq$$#jOBQJsw=B|3*DTVkID|dAeujMkL_cYR literal 0 HcmV?d00001 diff --git a/Release/tif_error.obj b/Release/tif_error.obj new file mode 100755 index 0000000000000000000000000000000000000000..1d478131c1b8e55f95882f0caa7b5892bd75456a GIT binary patch literal 809 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 literal 0 HcmV?d00001 diff --git a/Release/tif_flush.obj b/Release/tif_flush.obj new file mode 100755 index 0000000000000000000000000000000000000000..f9ee3eb156c3be09c31b734fce650ad0b0cf7e10 GIT binary patch literal 918 zcmeZaWMz0E)ad??k%2*&0Rr?=ic*tH%2J_Rh5#Vr4vYh%xda&WN>VFIV0<9$0K_^# zb8>(f1ekzWK_DPOFC{gpG+o6FEC?h7fVcsuW&%_li1H8+aKdKZETH5qBz3sVdjeGR z1xX#qJl&Mkw8YY!lAO#WtJ2cU6g?nAfuNv|r;{^^Dt{jrKSy8JV1=;m5*3baH;&c= zB`RSrK)z`{!qR%6lqv4;H#Z)R5`Hwn9U%9_9i9LKd_XQg5Q{J<14%A03rH}Sg9so1 zDhK<36Ub&~fZE2h!l9JK_yEv~BLXF24Nu;Ob-MBVpEd=k5^g)(UL?yV=mJdvg|r9| zGccHeNrW9Bcd#?)rDf*8qWRx{28MLzaI2W|%sgYG7+_cx7bSzJlFYO;I1S{)r{$Cu zXXqtEO$1R6$@#ejdYLIN7yCu#n>$lvbD-9e^Z= z^*XHdC^RsDJQg4Z0VW0ouq-4LAz~mAy|MM3Qz%EJ;M;8ZrO?L&C9( literal 0 HcmV?d00001 diff --git a/Release/tif_getimage.obj b/Release/tif_getimage.obj new file mode 100755 index 0000000000000000000000000000000000000000..ad2979e672a473dee8adaaff715df1a5e4f43e4d GIT binary patch literal 50189 zcmeHw3w%`7wf9NRFhmlaU`LIZ;;5sICc=c7gh4`?JjjEDJP08u3Iv!T!H}fM4B#6W z2Av$|N?ZHzRxR!4t+uvB+uL4iA0`BO=v4t*MX?sODi5vr1d*EWzt%pl$z&k)>i7M= ze%-&ElXdo9d+oK>UVH7w+51dQ%0}tHnQJRf`-UW)n<{abu(aF1B)HNqo+POrz@2An zPwM|MnbL&rr7gi0BYqsfzYf9kNiN@npnrAHK$9LqIiCXW=jV#Z3Hay8tY0)Co}84A z`0LLzWd!KUboC9zn~3-aM}T)J@Ln7N-dBJpXX9oH!>TnoG#RNNFiS7v6G47JlWh>rkg)OY|0q<3MbiS(+0Ghf9^MsMRNN%8~d z!;6@lRISsCYeo{;>1&q=9PK`wUK~iwAY(O!WO#YQ;w8#a1H7wM++=e2P+kByKQiGZ z)5}A^=`-OCr)TmnPXK3Jju6Cxf5Z8MuOhxg#Sxgp`-5|kxMojI#Y;wS7ZUCP&I)Rv2xD*!Coj3j-6{^@Q4sZ;D90h-9anLa zmAeM{EqRi(9v1~__rsM-E^^%Egkgl??2632U|76F{u+U|M8!?U-!AkED}Xc2CCWV= z|B~6&W59Vv#Y;wSBNAQ!PTM3wFI}e>-`=R-dS1m5n9240F7Q&^0xMa$YamBDaFhap zHx~br$x%=!Ni%R!NJg(7^y+}~eXqbHH729ia)l&)4Ht!E^hhr^04JRsFhUxxWc20( z=UNpn8NE%&A5w7ua!5w+tZ9;TF)j+p=9-!(o-`dKlfowPpw4xH0V1YR?R|>q7)kpqSl2nX~LNa>P-l|m`ftj4Y@6E^D0vCm3^cErESHL;z8i7aS z4{y|-3K(g|D?lF?g) z1Z#)D(eBCYG|(wYD{)asMsGjT)~GmyM*J;Hl&IJ~8acJ(sw{-)w4l>_vS0q46tg1cnn z&MYKPFfSC~IoWu(9C&k8++^kMNB%{?@r3{&SaA*4E-yp;jVcb|QAk$qkAU}U6*pPA z)W7usr*E~ObvphHSMK?UFS$CLzvb8lP}lJS>`iPJ*hblxKHlIi6lB)_ZT2+ZX5VP7LjPFxg{mAfBl6V^!58EXL` zoUH#?0GtjLFBv_m-_^ibz5dknb^vFuikFODAIQ9_;s}bGy(G4`A4VkU7q}=SqqiS^ z@^`?w`!<1hGI`$u&IuJS89ge<8Wps(dosJS_Da&(xF{r}w-IR$6^9Y&nb-dk<$VZv zeW#%J5b{4ULVDLLlGKZfLNfjwNVrqQ5tzyO`_J1YX)7)YC!_Z?aQ+q(c**RZrchn~ zCUCU-aP#hoNc`!rc!~Pk2fV{7ZZiHP*vp5&`H(6GAsK%(Y+m(sM$vD>@ki^Je;5`o zk-v9l!j{9V4(A7}}+2iw~gUl9tmEu8?samvV=s*=(;th$=A+TvL=8Xfhmox#o( z{$O|8lB$lNzq_m3A8ZM>b#_Q|m7p`t-PasY%6+lQ!SKg6+pQJQhI>yh^EBxE7D*bb zab~#t0?Gzbkb5wo++5qxY6ZJSo)}0gLRoZydY*GX@7mUX9S>{Ypxkr0pn6ctW=K39AQr+~v$$O3>gHVYkxQv@W}0&{ zeuIji$@t+x*%q5fxDck95%{J_Be0+vvi`u-{@{fy2k~GxuEw=T~fwK`X z5m(A{tLw z(}mrvyWmB{LxSGoHL_6YUoc?speX=mgvwXj8Ki;MQd0QBKWOkIVIx8|(r4hZO4LV| zF+}$gTy|**?x%4asil~q4&1Tyfz+SlPKzp5X*cdu8QO=t$gv*~EiYN6H*gm@(!r32 z<1zu|Gjui}k(v+aa*itmbQwcMdg?+zw1jPymI5MftaNON`+$KQeORds2b1KRT~U&lqqMUf{4astI{fX)v~y+Y;?nM6lvCf{($Uhr zq_ZQ?wk!melJg9lAaFWEJwj?xGo+C`2dYeHQfd@+G_k8~wZC1O)dnqeEOT`D{YxS2 z#XXK-%Q93tx@}ZH1^id<5znyEvyb|LTrIz;nb5eGohW(#PK zEFa|^Ers98cK0}ZgcF0tY~Rjw6ro>>WG#)qoq0MFTBmIsmRw9&5f2? zxWjPwp<@jwqhnoz;ZM;uzhgo7yR-M-sH8z>jQ+)X#%(VpEu!-~i*j?u*c_)LhF)-X zed}yJ5=G>Nw`K>XrAVQ(;KJ?hodIP`WarIk;g3^qk)zca?w#Cu1(Y*#cObi~zEx(1 zYMf<)Y>m^`(3-7NjP;D4%j1BiXwX^1DB-P63<745IF-T6X&7(;iYjU)4*8~a6WkMA zGan2M1h!jKrNd(d>*1}IqkGTm^97<-8gf|G5y5Rxr)~Wd+<8Q>27o#u0HaO}P#pCT zI=f+Zt50Vyywwg~#&EF*UjqZZwnvaCJ-a{Vk>-MB2eUjEm7oDm29!nz6d&1xdaoUpd}?F!lZaP9@$aSr7Mr?NxYEux>$ zqMgbOIm(V9xH*CFjZROBEpjE~2`HuGsB&!UtMNoyEMH?dNIPfkVZGB&>t{dJkHAJaaJyA=al2Dp_Qdu zf=RC<<2O|bY#*H_#Y!{XA0acTJlf-l_IRT`MbRGL0mvf7s_hM}H1ra+5o^qz-Fl|} zh~~^Dni@)nEqGIIwz&HakK$G|bz8JFttmK>si4(H`W_*Ap;7#=Fa%5nb=sD<(Vmk#|@hsxj+#E@|& zAW>Q!ATeld0whXX252GETLI{5rneH%e1>RnCI)~%03?RA_X84np8|9xL&pI9ic?P?rQw|e==+>H9uO_iSf#H3dJ6Svmx=*3aa;u; z!Rb6eG)A&YR|A^OP#2&@3JS+Z5S4bW8#4H=8_2z%H8 zc3mjw=nObk_*ZmxU*`zW=#s{mD_Xh$bX}(p>$?443$=A)V0R&pL6Lr;KES&j#g0a? z&!OH z*UZ_*t$uKKcxxsKrMb@axUACoxUXX9V%$ZOqPdP}Qnj6q3%f$W3mx5^pIlr^`lAwY8)f;xy+|B8cT*b}9FuL#> z8f7*@ki5AKttBWxU_tu4*{!AeGX`&S=Bk5|V*zDGc6h6Uh9xKD(Py=JFo4M(2RY6Yh^9 z`)nIF0~KhKl?hPr_1idoK>Imu3@c zrMwMD_O-K{1`&^lIq3D}cc;E@Teom7CLsWg1#(hCsYhRsKL%ovyk%-X%f0Rl z!bF4CYQ@5Bcfow2d(}41g~U-@c5YHF3{AxSHe6O-77(^U9#Pl^-9^K{R)fv+3W%Dez`Ie0LOg{J zc6MFf?hl}2=x+0OsLRG8X>n%|%gTwVpdhWG8$znuo~gd5J?GIZ*wZvuaVw>+X61$q znugh7LN2sz?*Yo99EfH7i~vpVY1G1C`4_OVhx0^YY?(J8KMqu<{CH$AX3qiWKy%B+ zT=yyExUxIEV~}QF4=Ow*`w4qHb_RkXyhBj~I|K2I=DT!mqu>b6pw#3HyrI+Kl`7FN z>@mw_><#P`k^4A%gB;ZxRN6N5!`^`AVsB6r?+twH4Sehk-nMO64OI39l}aOdgDiN1 zQj<5xj`s%XN-4a7EmA-wl$N28N~OATd5XLRU=Cc!)71VkAJ!TqxezTA`BV9kzXGPUgmK>6iArC?IvzMb2RGvY~QrqUI zm0d0!PIdQjOQ1EVtol}3GZ$3F9mVBA z^*)TVrXJ`?%cWN9J)E{3cjBKqPPGZSY#aWAVo(Ez(~!l*ovJ-;>T@eCxknDCD(_+$ z2A!a7Gt9O@sVgI^$d-33m-MbPgKb0;HIqBi3hGGfKs6KSjt1pPkS>D7Q0}7oxlN5Q z8<n_{67V7;#F5XP8nZIxW>5Y3o8W%l?%Pw7v zdkaGaxc>x~m1jx9R?6@!Y=xeMU3?von2CG`(EYgV5-k<}h#`78L0Ym)s{jeRi0cJ= z@aC_}+zl$gGk1gcAvakJYM0&!mNhHmm2#I-o2lHK(Fh5B7`)_|9kiVtv^Lr#`=OOK z;h=@j#DajPbA1KMBOJ8DaM0Os&{;_wGz@G`lWs6B>YWWs^My`>ZP&*v(+^t-Pz}xt zgUb^JC)f~o5&_kQWv0xj$6#>V5#eNmb3$@-B-P+AXTXpv!5PBIb>|jvzMnN zMJIPuX~9ZkWEY{srkfj&$7RB9YP@|}N14rkuIPlCV>bVWT{edlDxx_Or(?;6A0gum1c_^ z1&^YbVOUGdB}Apswe8m5A*-r^M8wY)V~}6f@;Q@cc|+-Xl`2QL79t-lT!3mg_3)l5 z^RtFA$oLJ^uwBXpv<;V4s=%FgBw(cokcS~!o|wWAjWE8<&}KlFG1L!;US?aRX8~m~ zMAi3IhEBu1nxV^a--39nGzrj?43z=e%g|gve`cr^(5npH28e3YD#ZZ3!_fBu(dH1V z^f2zUv}~0IaQ}c){|u-emtFb*_uq5eF&#Pq=y8stslxz67C^sdC=Jk7hG_4|e=(E^ zh)l*R*#SMqP!=GOBO6d3$2s&krw--lP#&Ou#&ZFBgdq>0-!SCW@rnRF%5gqDj#g$x zX_Y!u1L(JmhnrN7Ckhabp& zaiaPl@~aOYm{X4N!z?xFge|fXqn^m%%3EU1gW==WRjbt9LK<@#;urml{>BBbnP!KuXkEz0iQ$Er}@j>w*s zUu!I;VHoDeH#(gddf8zTS>eG{uH+-JjIZl@3jJu|g8A2|U9hSO;`p0%L(n)U zA0Rky0z26n=iygnOgVS=A4^raw{4)AO)(oVO925gk%NrbqI}X_+)vX37J($_x0I6z z1ioWYQo~y;(c&ZO{|~Cof<3{4;T<|m?s68aj>HO%s|%i97dlV5B07brY_XW2Goxb> zmngI?(h1v56nrB|OtnWrlbn3su#%4!lFPc})WCWWsnzVGKp{4Mkb=Ay4C%Ie6q@Uq*cJjF78a+qTs6u1iq(N(K)R!H? zWtH-vwbvMO0s1RL)T_PDkQdM!3>5)-lOZ1YWZUgqu`}Ckk54y$V>=T(h#8 z7H@^0UFm~GILXh7`HnNznu5fv$VV&BaqlC~dTw#8lKp+hi^3Y+of1+04fbkj1(dFF)Y_E4DLZVN@%pGTiW?2DevZ)>nm)~UGkvtML8B{IbNG0gavW=YprRb& z(Up5&Z+&X-yp*+1NbqX#$o;RTr9X?qB8{o#y0Th^{Kd@6!!xYu0R})qQC;V z4+x+EB)4K@+yf4w~S%W8?wP8X2^0xD?8) zL$71I^?X2T&jaTQZOuznJ^=&J?lYv_{x{Ro={bu5d0X_l6aT;AVYud!ACG1H27tW| z3vC#^F8ezMDDxL!WJX>pSt&^JqCl6`joX#k|`*M+=mkTQW2QeRm0e8u;Y4Qcz zOzvX4<}T){?gBD*$s~DFMAcU?BCw41X3$a{1xg$~UG)-4(^VG{pDz5v+4A-gNOQJu z4rXEAHhBiYX;pMCJi~tS3{+7y@Cc zKgmvk0C{_~_QXFQ3TXsp%;tM90DCnx4qIdsnm!LQPd$>R+2+N#tkNbJ>Uf6k14K^O zDm?(m!O%|uUBJ*ofG%X{KLK6D&?A7H3{eZAw@VbXmO`sZqa}J7hn4(*Qalb&Hrjz? z+f2Re?ka4QrS`vp-XM#Gi(*~}&BoL(3&>uy`&M@!T6D48+mNapd1URHHEV2}pF8?$ z|Dn;;#Csc3lx>LU-=CI#fK!jYimB3eOK(d5>uEqrKcryq%5!Rx9*0*y(asa{6V;(j z&>wB0cEQv<@{U;1cK~FOugD6mq4#xHnjHeXB}upi7lhL#rPZ<_-i=nqkAiNVZ8J>+ zSXclnmxFwEaicc5ZNjwO7xPSa?{mK$Q07?zN^9zx*QB+tlUsvx!#{L=@NMaTCWIUe zBi;r)GkWET(39|#+;5UC#4KI0jJtGW2;D!_mkG{?&dzB)aD<$P5;?CnIJbgxi_W>u za4U^)@FWBpMu>HY{Xfs@4J6Hv9lN zxld^-rqvO)Fj&{u;2dC@wcx(o(tpsR?0V#aM-HvVZYMG^8<|)@nVYKgBSzR5C95`u zP3CM+HeqDDIqT6^QR$glyxd1-cBDG=9o@|EdL-s4j}_ek1J9}=OSeV3QQ5TObR{iZ z^2!i|(!Z}X#wH)>gqm9>hN)!EwslXB0>YO5 z12SUs0=8c_$iJm2x4W;mI5qdh-xIv{H98NME83E6^Wmd!%YUMN>G){Mcs}+Ph*r1u zb;47&JW82zcc~5YS(M{FdI&su*FHrSEblUMG7c28_EpN7PISh~&maPQua^tYJ*1Y% zY;jJG7X=ehk#$S7`~<3v1YpiJrjc7TbTDm{s~i%{3XV{oa2v^4hr9`V|DR`?x%`~e zJgkygL#P0*Rb9EP`t&WVcRop>YdQCT(6gpxsOg`;Iv~aWizfY9t;5v*L`xW}w?1w< zxrgLuM$`zQxAarBL)AjeP4Tnx{h6G{5YuLU*=yv!C`_3>ADcQ@jdyzghnY4Nr#HoP z+LDz8Uk87h7e16ma|@bBJ}g$nTJeMjePmDjDD*i@BhO#1^e8*PFD5WF z$;aRxGX$ryt1`03w!sc`nuK9&Pm>rg^#wr5rnDD8mOKXhXNCM58kM7~ZBEVI@dtv} zzQV)$_f+5V?$N)=&vAm`iQRodlf9O4lru#+kedWu9Z1u-QOg7`FY=v}J|vrar%?p) zDhk27GRl%M4&r2{AEc>JwDp91oZg7?+{_kn)4CpxEKt2-CgYJmj#(a}Xhlcr$Rdw(`Z(diDTc`<#a`>1N&a-eIUN_VTp2_L$S6}gudTQ1F(dF zJ(+0(${7vyhuw-5XFxJ%w~obE&Q{xZl29I~fzE;}=1jVnv$1GdfK<16k9s z-_U|X)@LHW*!zjhv_7bsGoMQBf7Oz{E4(!`R`O2xnA>*i^^g{)xNjr=)KlEF;Y4D- z{&DCOyBj2Hd`L-+e;)cITdbqb0yizV?0mNG8t5Ev-0)2MjqFkZ?qdI4Ga#|+j_y|h z&o12rXbnT((NnhpqOFxy-b*o$A$rTcn4y;dEo0~nK(zP5DjfmzHHPS&9qrY#N*3I2 zV2IYNXEQ`isgWUC&z-|iHttOfIdG?4OIBXpYGx=0_XdXI_Q>*w5-$HLeQ5z-JXq=P zrq4JydT`*u4+bP@5wg&_82;f;Y+>R}*3`Di7=6u(&xh8Wr_`rm6DQhmhEku&>qC_p zc*=ogc=4E~U<>7>{#R1vk7-A({4s`0H#*CZVvl9aj%7Ry$bkk^6#m#^TX!EE4v1DZ z_8&^c>4hc`B2Q9=lL7>Rq^@5Q6V}Y@MXXb-z|(@yVGzthvsSWyDbq5%U8WMSID(b6=w-sG zd~pRVw@?YGLq%W#ups<7h_IYi4w~hmC47!bTAo2AU_$!&Rs&aok19h{!>G@@0KJ}l zQBe)nFR}!#1}y)^D=EIBg_R!GDt=^E3hucA(uUIh+^V=nRKRJUcLC|7j2bAPYJzNN z%;#N#Ud1SdD$2=N&gQ#UAEc+&iK4bNT(_WbymKOsza0z z-hSqA&RWUnb?=d%>b0lP;L6w+@S~oKY4nSgqN~XsQNNfc%rS+l@{1|J z+%K9+hjp^dgJ=VFQ^1lznC+e zox&x^PhsQH_A#gM3hWKM!U^Ps`!mA>G#>R*6RU!yvu&7Tecc{LY+bKvGi zPq;`0J{tV@fG--n-SkS8TK;orlUTsiTRsiyspaz?cG_y`!yp-BUA^sRQQH^WgFR@y zb_|#mn*BP_s1fhs*6ab4r?uu$G|IK8qujh-;#@DV-TN?tMw7;XmYT!!@-cOosN}(U z_Sz?+P}OxRMgK+H99~4WY`D%?UaE#r#*sPEaa7sV^`q+{zCBehAfA0~uw$2x zeHH<(O4B5e^#TmHW`~B9_Lw9;4^3vL#_Xe^t&Gc{kF2#j=~Z7pHe9@*Wc-5kLI>D# zsK#JCG&3Nz<>8fec)N8bYK4vjmZ7>ZgTGpA^6-hB<>Y{Kkk?B+hM3%-pK;NCe9ZDO z6*d_T_ZeqlYJ~-F-EwFWc#=NDF8Yj2F~LeBg9aNJ;4XQe;jpcHA5v%iY#GQOAs z%w2}5gt#t46#+FW#$oNwe@KcP;c@@Y9be{fDvBGxWG5TIu&c_6UP+Aut|~1&Kw|^4 zA+xKRFRYBuDki!rwl?9aa*!DocM@L6PFSRjI7kr&E_ z*}*@F0~uwz4u!Cyg{cODrCty8J_EeeF7+6UUie6QBRar_N zw>WZD*%-+=bww#fo4MVUp#jRfU~pyRAFe>DWx&lze^&W3@a@raV66>*7sXH!bMBE4 zp9Sj-{z_uED4M%QVG{g(8K{^BIPXLGPBtWd=X8#5L(cp_$IOL~k&kc0{y1BKJ<`+WK<~B}?ItiNRQK3TBN6H2z zssb#rQ2V4)B%a*|5oyPhliMvFkI4hu*iwkCaByjrDXI$IMI*L9+MCA9AK^ZkRIs}@ zn?0T4fwJXyd+if+HS1jhGReC^h<#$7YM1AtPKC!qMThQyS`s|n7TN;>xtFPHnW~o~ z$>{)zS#ny$V#&qv14lD|nl09Wk0^+*&#Zl%7MXCII6A@Icbg^0H;tZe{IHdlpkfhv zXr<*~b;**3#%L%Fyo{-S%?AhCmuJLk?dpOhOodLezcBixzP*k|urMvaiAL^<1 z>#1~rP*B;T8S_wQ~(J3r%TeB3IINO`aVi0>q{jj5Z2(?{LLFW zl)TEXy=xBNoRt=A*1rLP<@K2h2J}Z9QVyl-PlwM6PI;(6tD(Ivx5a07!FhE=+ z3)*X&F9Cr*h-Z}?fJg?rG!YPe=*P}q0DF|7D#U#okX5P!Bo?UW0ivm_oj(Ki7~|cD z=kGG!8XZ~>=q`?<`uYw-w*#V6*H-?Pj!3;z$1CpX39X_4<=MN_g;P~-)sWEhkduQaM z8>cHTqaVn9Ss7S+m^{E;M?Y1XJ;hU>zO8J`;LQgQpU+t5!s`#L9T*0I&oa+nHHi+R z^A|Tq1yD5?>1UhqAY<<|&UI@{ShiPqh`WW4kPLC#s;REdMq~>vJAdE#hrqG&hXX}T z6e2~uDtG|U{YbU*vDj+P5w`%}WqhRGyaFG@7u3WGJRPs303vWA!X`#b^nI|jxy_HH zA%-@j-;||0GVD=|ePo2#7RLTygxE4;9~&WdDr27*2Ac%tJ^KJyOjXw1$Nzx>aJ&xK zpnmXAq&lHrD<~og_mSud(#z3#Bb6TV0DEN8GjlRHIXqS6jMzFgPn^$2`H(sPRQS;> z2wIE|2xe`&J&c{-SWDxkcFjrsBv~-Ezw!9rg3B(saDNC?tP-_4(f-g8sO@hVpr3In z9SQjpzh;jCC^+vL3uJ} zY0iBn_h{^T9PjF#ladmM+6k%$Kq~`ttQ2F#x2@|!FXIfcSoWmuhk{lTNhV4Pzm?I5 z({wpF>+f*y!|w1bl9IW->*yzjqk>y-!YM`iq9sM4iBB!~iA-)Qe=nTzY(WwFY zJQD68;ZSB5g+CF_s~-Mr(0LEhQFhaeV>HY$69xx7`X`(afZeas&?}&1U)F2CLbPj< zCR#Pp0KlY0B*x0*)7Fqr`+z8-yP;7VJHXFEY7~4ey1Ps8`dp^x0Yrabo+doE)A=Y<#wY zH65uslj%6vB6%LM@5WAb?S9DWh~QzsQvk#<811V!1BgdMp`&6s zbhyVU4!wBkWr2^D6llX49nwBzTUUkL{fA_DCM>vNCG4Eu@nQ`J9!EPVd9DUmMC<9J zHRqHI6rhhU{=bF9<$|FT<;BDj@nS4K(a~}<*C$58^~jK**u3)M@Y`v$E{AoyZM24p zZIy`6q2rjBK%wF|CheQjj$`uog|PSyKF-z;+=#P2Sk6vARDo@NBnUK3YvljLXrw0y zTTxz&nWjg6Qhs0lBxZR451Dk@7#mU-(@AaKy?BbPc%qGoJFRWJh)W#SewHB`ng5X? z8kzrzAsU%K#}JLopJ#|h=6e~Uk@*V@Q46EdIUb}8)n`#_6hlxtq>W99>i*MBz=2rV z)Yh^@TjOsH(MD8p6k*@W`508%kzOR~_)9QQKB|3=7#&iT^Uy||)IQt%4AMpDo=RYE zMS$%UwaACHcMQ_clqI^Pm>0 z!NtOn&&3Fb9sU)ORn@*ZPO5+AJx)~L{`OHV}`Anc( ze6(hS+>VG9XetlB3K}gdo>5UAJ`DFkQFyjRo)NEM=nLq1^dWOP(On(>L_g8Z6OJSr z)k;4Bs{dptP?if)K`S0u_i_19%<^44WXey_3=NLrCf!k-`d~MC30i%83zwCTWWUZ( zAME@MhPDEFlc61e4lwlJfDSUW3(z5k{s`zWL)3!k(-3&jTN3r+@h$01q>^XIq*mm@ z7In4tTt4?0ZlKKH}S(ij%nFus2TP z@|&5W{=bc$;qL2yXSC)Zd_%DC`B9wsruWcK_~`x&2-D|V^XTE}%4qco;=mSJO>dy+ z#5Z0)p*SC!ewlngJ|gducOc#qMLZ0aK3-cE%MK$-J3=r)eMh6835QhtnIN-fXjH@A zlg1@Z6o3glwjMPr$13p!vL5}@7A_FB)2A(b^jQ-+-90{_T&5qPhQFl4-(r=F4}V{Z zwF^G|9o~{ki$(odN7x31JK?JG|i(w7+&!a{PWNUK|G;*#Tjbi^bWcqXx@;< zX)32!LZG_C;R9y2lH8w{zGKk~d>_@Q6Uw6x`(#DlUfB%)>p?Yw=k$Owam_30fpt>! zQxrRa_CE= z{$ckSZlTCEv}!^UJVZAHO%fVsLK1qXhpq_7^adE8B0}GQqxayPx+f2vlXwfc*h=xK z0Tquw@k71`&qeN?;m1=0N?N!tmCT36=QBQqwGKHP&W7rtRI*h4%s5*r359Vv-manY zz5Valh9W_cI9yK3dIH7Je==24E{vSxHEX4>{Q1PYK^6`b3S07mt_ylP2ra!U_alXN zRCs8Mo;Q~LO%e<5u-R7QzR*V+JDW@uLDL+Ktw&31-=ZZSY_j_u|LlipSwDCoFDL0S z+PV@ieXre0*#>Z!Ax(TdS)k!}McNUM7u(yg+;kK_6&u+zB0BhNJO8rCa;aJSMl`;M z9BhPyY0!iN0@iOYbIu_FV)p#0yYO-4ZTOa9zj8bOG)X-n(a8+$oA>d z;zs&Pch05aM=BTN_bb}E@oSZB9gY?pLqO65skEizD?vx7$3JX7{$WP?!HcEH+U}nK z7KEA583{~fAq2KQsAjSV^@_L8WGF#^x&kr5RDUmzmWW{x_ImRVrr@=__>BbJKsM?I zk_7{?qiIG~AgA(E=Z#2F9!F#*Mb0B~_--^vI`NtQX00w^7ojnDd)?J=@CwRDv%RZf z{`Q=y&#p|%{WE&bEc{Rc4PN)cm+`lEVi}XC?jVyTdY8GI>wPE1nY z#=|qBWLJ1=Ryq4a`_v;OY4?vIYu41g%KJTeyq&>L#n9wh6ayM%5$!EM&4IUOlutd< z{T%W-OpKqTW$VHjZ2%CxToujWd_ZTjd3yi}lP}Yu2q0nJuL2V0{T?7;-j%2?@d})_ zYl#=+^a4Uay8wNODbw^tGy@v8>&;*y-kv6D3Ugq;rj~%;AmN`NS<>0v;qRuOsA_SL zp(kq*YIbfA+;qC)+5~L_%ff{^w?h~yliS1uYBcnS@aZ564b^T(jyrLIEutxgJ6Swfsvy zoa__>JxV)+ZV0mEfE#eu6u2k5@}+%XhH~L_6k-YsUD8727BLeHcDPJAC7&r^()v=* z2dXnc4A~C_;wu%B>O$})D>-E%r^0r|r@dq3BHN=d3RiqCI$tTLTuO-uckcS>^F}Ui z7liO+>&rpQH{Q~2@etMLw8 z0BuVdGe9J`!9qNK95KesQRIZ%D4HVFO_8ZELTqSBQ z!cj|~JVheUlvsKu(<#E8!rk{eo-ybwSLqN=eCae$kW;jF6WTcDAtTo&H5cJ%r58xQ zpd7fkH5E=Om@I7so`_l4)79P95ey(1!7-$)GZ81JoXu&Hv@WgbM@CuwYFUIMK>B4y z5r_`A+=3~*`NCX!p|n~r9XQ~pKw6{6Ojzn)99rgtM&YAz$tk1(s?zHZOnY4Bc4_u4 zR10#-8r;biQywQ%QVl>FRQa*9Tu7G25+fXhq()h1A=W6%dGR-Q+Y`znJ;*5=;Toy| zO;a|Z>a?=5Rmx{`S?tHA6!Nxn$|d~RWKW?q6}d%>*(1@0F2lFXd|>PynocFjrBWsw zA<(sPQgB&lU#BD1RF=0udKu^<23e)m!{nMI-5Q6pAr6OfeLXJ5%ySk}Xkn4(fX50t4FHtaAPsRrd~S@T~!FM;xx8K)k1BJ+)%ccLTFD9=(Ue;JhH{RVBv zkW;>jJB87g{OuJ(s|(d!gcF~OdQmxrY>&c*dz{ORTz9Lv2#0bRQaBJ}NP!1TYM|P< zQNaa_vk7-f$-1-=Vrf$BQYl}cN?}mGkaKB1;gz<(JaIt+<%<}HMtRh4P5ihL%~hlP zno9X1P!^{2t{Nk$Wf|iHC(|KIqtJ6?+ag2uK{XfQ2&PjI#!J>N$S=!{Zwbo~NmlFJYd^p1lS6{JTt)OZXOVft!DORm7Ov=~sXwr;s&L z_)XSBw`&~Z?TSj7a71hJ7PzFzcoK9d$1OwTGW3&!R5^ughQdQLzH)&2b=c5YzgqfbtTD4? z(n!OgyzZ{w=UkRRIgfERric+tOZQ*?YEa&-QqE(_K$P~YF~WW*=A(p|G%LkZaIkF{ zI=mcl#)vvRC-Z=z!*OaZ!VxxBGlY(zF&e`da^V4AMIbiJ8k@*CYe0&|2h&>iK4!=@ zU!^=TL1S>fLnu#7pq$S*^`K0=uIafG)eiM>XjducGi6wBp=+|27m6vD7?ZdrPv+N4 z=9of$dv1;?;7w%a7>{%>iZREyrQ73T+>;9=7x*&apue~-4#!nEnZNR2#wq0QG?-%w z_{%Hi7>|@6N5?(c!!tG$4#q#@;&5CT?ZBMO{J6cmeb~t5p6updpb;@<>z#z0@wJ?v zP#12-A?r;8^!`Pgj~I2aMy(6CU3gq*?_S_iF0KoY%QHpF84}~=S*aOkvXnLi zr;xvEZ^kL$&HLsU5C2||9#iP{y7{XbBE~GKCqYtof}{nEvk7+!hbDcv%8>Nys-y)h zshM&iaN~7YkU*I{pq#QFcM6Z*J-F4N{6m%UVu z|5Bwqg(*|*gYs^b@-$tCliUTYL&_y|ILYl{9hzg@tV46mB-WuhCZBa^j&ZRLO)-?q|*{4oz6J>ai{RG?eI}U(*3HW(-U;)18zL!=?RpJ8D|sj6wdrc zGa6Hhc#z&vDHkVDE&)b7<>Ca&rHn&^E3)t#uJxH}=Tnt(DN`m3hr5x!0sl<7MD4hz zOp$2zYmV_qG_N+rc;Q!v#CW9lAb<%6OKykL(kNf9Qm$ai zq{9OD6zMA9QZAvx0$BLu_!wBGeMpRlw?~$ zn{>)%9abhtT9F`W7307}INY{6<3&T#8KXsPRe}y@A|YOfRSA@7jxMKc5+tNcpRKsx zpnQ!=xjKPzO#s8XJlK)E)7@~i~Pb&R8Fk=q8Fiuyxu&Dlzer56`KT;_-FlDl+$yiV5!sLl^35%NSoh1DhGgwm$#%$Ih zF_WYQ7_12gBdfbX-5fJXdJ|s26od7sN#>Zs0@xUR5l`TlEoydxqzws@HZl(N4ix_K z9*tAf2dPh$w2>t>Q=S7{!=eJ~FCW*KK)H!=7J=9~fNBqo+G9}uvr4&%DMN<^lPBl% z&!ST<)*)i1pbYVgOj?YWU&WbmCi8Cz|8MV?FBJ1!FPULKEjOsOBP^_*s85VhkM;a#Mm1=LsB@ zM(5IJe{JZ{OU@2q9_!FtJ69q$p7Oi|%2zSYewirX2-aKUUot4qRw-YVKzTlJ<0)U2 zK>2FMai|J-_|W|rCP9%L+EvO|Cs4kIb7kVL;a;6Uc>&|lyotiDS3V3G*c(*J3lbu(KTmI8ZKgD`-Wmp~K7tckNx8pu;xC*@Qc-BmL~F8*Vmq7*NYtz(*aGsvlN1+0HW}+O1V?he8J=? zUg>cd1?3WbffsYVd*WlTR^X41!CJwSAZp6xDv(H9dQ4#f#>TW=SHzfC0=s}Gr_gFG zh3{OrQ!!*esB%a+@v?snF^24vvok^VZpK+ei3oM)?tR3N-8n|YcB^$^tXcISA)az~ z0_7m%&(fiZlMS9H zsywgM>uZW9U)qC)Pr10h3SF+r(l^a91yfL`8SycA6Y&P>LeEt&1*@P@(9mP>a@!-( zNfHrbuCGLwhGX)-r z4mO)(+|m{CG5KEJzhT13ck^~sQ;ZAk3v8NW+`L+-#}pRk7x3&)#F+gLd8K$A-jE>a zO^nlrJB104-ZsOK^d42xn-X*gcRYmhO$n55VVwPtnRJ*v`oG^aC_kc7zD3hvfeUZe zI)O{MgeP%f&9i1mj7z#SKBf?>B12+a(reI|i4Ocv-;fxWbdNcv5R3S{1z6-V>u?QA zVYZfA5+q&AIGQST$I^EH^a9?|)ib>S8_0ZGw$gfEeQDW@lVz*vTviiW$=Qu; zGkx`yGfkywNMr%i3s!`BxZIT}b-J^(yl1+ztk%d}=_{+BS$ncFnN{Yr)yP)jn^{#h z%g9D$PA@n~iB$AbJ^w7zEbRC>-P81cd(~Bi;MMSC~!tul}V&T1@`#6TDtM& z?4{ES^lXJSrNyPbs*YY_@lHqZUzl z9sYJG(8OwK9V%^R)yYWncfSR3oz;>VzS4@iDqnqjOGisLJ_jCXTNZ*m37VMYE2*kC zDLRpJWDX*8XQ)S~UgxW;t@kyytiYzmp6U5rZL9t5aa@;F_+}K>6#HhiLHQlaV4Qyc zQqrZckb+>#GJ($~Uf~axxB1(b4l(!{9f)CsK)2sNB(cQ5tgS=0?3upuiki~llw`6l zQTo#9Qx;RBV8T^Bw9!&67`19*V@7v(XScvA2TpCv3cp@lv2Vt#;&NYI2$tU&KpXI{ z=tN5_2yiu0ZDPcU3hnH=P8E|&ThY?q-nqm?rMj%jq@!;C*FtUGs+LOGD2R-+v~+qB zg_ZdOEunT8skE@Ir?j+c&K#4)4^bGDtd(3==c_C(^VN2;MoPON1{c!Z849*_pdI)4 zgP|_eXc^jES9j-Pe85Jp`;toE%(~(VJvX+G4wu_hz1r?@_F~e)WkJ$;DO;7wBesuI zoW@_tOkZ_%Etk;K)v^Q(v0{TjnO?9s6bSgcP2?$OW83vG5U}0Z-RAGW7w=)`I<*>K zU0q4FFC;7xJ8`E^p}n}MIs@56ueqhW12(H?M+2-aE!VOy?hFPyS0tw(q-#{Y2T9AD z;)jYmqhm=Y8U&{aB~ZBidp+>Vt(-T|eZQiIAWh-XlDWa+sXZj>?I_T36eW zYmKTXZRvpu!GagfgJw*mZjSH_jhHkvB7bPavTpx%dVWe>yh?wh+@?pOZhC~D6b^^j z(DTH_&NA^vrw)pT&(M@4USQ`J4xz7+Nl4J>BqSKcmd?7edU#$bMd!DzqbWyp z2GzmAfh<|krI}pmOkYVwb!9>&3r9Z%?Xr%$6EMKP@&IRsdNbHzJda1`XlTl$q$&By zQYIzMGbw4Fd^LqeG0f7OPOx1CB|z$Ke@na1>vN+qdtLECOZE6XE?3~BshHEm2a`U# zt}`Cs8SoHj58~troaN$BTl-Q}i>B}rbd>egGkn^&(WV!8xtAapt~zt>lgYz`x=a~M z(Hx7*5^KuzB`~7F)r4AF(Q>VS@v0T3g6n;CGiL}_Y<6`eaH$o|=vc&eh{*rr8)B-H zTGHxYaxJfEFhPb?_fT5qt1H3CkX*Z&p8Ao9c!Fd$steGZg6;%RQQ8P-XhSr|LlwHk za8ooVnp2vJlci|!3C*im&ytX2P%|YZ97NJ;7vspmo}pkL#Db)<{=+Om7I||AY+X4 TXBL;#C+C1lAf7b_Fs%9C<)W`t literal 0 HcmV?d00001 diff --git a/Release/tif_jpeg.obj b/Release/tif_jpeg.obj new file mode 100755 index 0000000000000000000000000000000000000000..035767376e32e4db90261788c8426c7a709c17dd GIT binary patch literal 270 zcmeZaWMp_D)ac&Bz`(!`#2}!TQk0rpQkDwgF)#!G88$EujOG$x&`n8AODxSP$;nKz zDlN@S(E~CR2nzamIys}L^7nD^bM$o$R?th!%z;_@?>_@WI&-*HOnGLWu~7`r@a z5LJ?ymIkMRocOGQ)O5XMn6p5%Lvns@fnH|H3wbVv|3Gt?QGCP*RKd&$@)Igx0dfJR CaX@1L literal 0 HcmV?d00001 diff --git a/Release/tif_luv.obj b/Release/tif_luv.obj new file mode 100755 index 0000000000000000000000000000000000000000..8c3a2d462ec242124b94a63ee554e9867ce6a2cb GIT binary patch literal 30376 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 literal 0 HcmV?d00001 diff --git a/Release/tif_next.obj b/Release/tif_next.obj new file mode 100755 index 0000000000000000000000000000000000000000..720fafd86a13c4d9abaacebaaa11dd7e6c64dd93 GIT binary patch literal 1612 zcmah}VQ5=b6u$4>w=~wVJZ9${4)=s7SV}|OBNp2qFKfG`#Vl=YTnl!~y5yw`q{&EM zoXQ-G*I<%orhkM9GDHN&_D7sQw*5-zlurN11eqvU6|@>fbTB)WKF_%~Y0@Hi;NJV) zbIv{Iyz|aEVZlXy+<7*1j}r1Q;p9!^jJWx{(YTUv0FuzWHO@|%cunI4vyJTo90k3_ zhAtk8JbuiZFplTv)L>Ip25=697uxhjWO;C_z4t+W5!N)shIAh+Zg19{WgNcs!tp^v zr^yb;zUqJZ{RZ@YYv`hT^xK;-lC$}=nNA(=&*xJKF979#nc>mFp-oz2;o-=ELkA}n zdsvmOVIZaAdGJvxzRh<0l&k1->GjRD4R||XxnL3UDBB4U8z+8s2eE!}+fh}XeD<(y zs!HMR)R|qC9oDjAe`)_!`$@cW+5Xh}mfpDpzW0`*s9~R9250uw+qhr+8urqR+T}U7 z9gtQncZ3cVs-DGvhvPpI%(23Lx`Y^~_EdoD0*-ySJ^b*8^EE!ZDh zD>P`W(No=yTEGa)wd#tiDAxBNklbQjMj!&{D2tu7qB!_;{^o$G$}i^%zj_wmgD2d3 z{epH=yHy?&%Tv_;z4n8f{!s}^1FN1_E!4SH8I#Jp4^Kc`kJr9)YgPJ5IV8~9_$qq6 z{*U80){X5wUsO)_N%ZIXo`L%5$mG;BObP<}cTc@8+3>}X5f#6uXNi7ZsFvV{`SHBA zw(dAATP#Dd5=+t1BkT`7XWeiwq0lbQVEW{V6Xk)HJ;Icb-A>Iv`vx!{g5@Ij zgMkMCb&>83bQaJ~CVd5vhe@$ib~D~vfF5KB3uhNY?*i&#C}K=UhmCkPVe~7Jtf?58 zY<}*9l7OC2lG&WH5TDJYQyD{fES-P{yoIosByNF~S_knaQ|V@huRDay(W(BKQ>l!$ ze+J5bAs5HPOeK>WCtP9~=y-3OnQd%=cy|7zHC@)ph$P~fDT4I4=WZO4F*RuDHAJ)#9H;k zB?oi4Y>w!9Y$y=(4MhT>q0oUqOG(#sKa`p7=XIw0vCwosRGRJ&kQg&QZ_LL}zDWKB Dd{|}w literal 0 HcmV?d00001 diff --git a/Release/tif_open.obj b/Release/tif_open.obj new file mode 100755 index 0000000000000000000000000000000000000000..3b76598a699f843c34634b20ab3e009f44039e44 GIT binary patch literal 7109 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 A>;M1& literal 0 HcmV?d00001 diff --git a/Release/tif_pixarlog.obj b/Release/tif_pixarlog.obj new file mode 100755 index 0000000000000000000000000000000000000000..10b0541de994c464dde566c9b3f8c75077517e16 GIT binary patch literal 270 zcmeZaWMp_N)ac&Bz`(!`#2}!TQk0rpQkDwgF)#!G88$EujOG$x&`n8AODxSP$;nKz zDlN@S(E~CR2nzamIys}L^7nD^bM$o$R?th!%z;_@?>_@WI&-*HOnGLWu~7`r@a z5LJ?ymIkMRocMywio~Lv{B*r!nA04R^K%RIGE-j2b20n}n!}9ZBSxSyW=4>oPyq{& F3jie&LMQ+L literal 0 HcmV?d00001 diff --git a/Release/tif_predict.obj b/Release/tif_predict.obj new file mode 100755 index 0000000000000000000000000000000000000000..3c19d1c669847991a5ba8dedc536f129641213a3 GIT binary patch literal 8663 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 ZCS*elFJQ%%CYI~($ONp6CH7#G|1V>zz&ro| literal 0 HcmV?d00001 diff --git a/Release/tif_strip.obj b/Release/tif_strip.obj new file mode 100755 index 0000000000000000000000000000000000000000..d1f49022e4269b1b5836adb71a280e71b8dcc114 GIT binary patch literal 2809 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 Z-BLqCzR&0B*ye5ZV8gpz+K$({{|1ueM)?2$ literal 0 HcmV?d00001 diff --git a/Release/tif_tile.obj b/Release/tif_tile.obj new file mode 100755 index 0000000000000000000000000000000000000000..595e582d3f0bed5eb58153469c4d8953c4fe9901 GIT binary patch literal 3788 zcmb7GZERCz6n^{RRz~60ZO8xvRqv81qYS&nF*I#y8JjDkUFXK!SU1*oG_ld)NvjR0iXIf9lc_=7gMp{g!?F;$Ng8mXl1Y9H%-=HwaG*Yzz zny+PyqPCmrl9oUr&J2^kECIJ3aQ`k5S5cyTQEH{{7O!^;;2bh`vGu+O6m1Lm7K`5x zfV=h>K0EOJwnV<_QbHP_pe*L!7cgf7%-?yq#r*pZFw5|Vfh@*nhPevBSo3g;@x2C^ zU3s{N+&>HWHU)yAK`|mk!uy&;F&wZ!$NX5O zyLG#>0JYogYIp3~;WK-wn>YC0_y*%iy|uKbu8SUQ?54-+xBWEH$(uyOWf#xmvSasi zqK@|Pu^hI?YGMy^qL$u`U*pCTFdffv7*b!)2e3uxr;-`m@hnwkPn$pa|3e%PLsI9>*& zlmMw7yfV-he%sH{Rg`!;_T#K)4(r$jlQo&5Ej0i!;=Gp{q=%o~mhkTU%tJD;_x(-SSSqpU)luA+$^=hVTn%8x* z8N|IgubY70(@;vthx0n$;K+eU&|DobkBNeLEM$%jjt&QF%_DwR62j&-!B9uiYdK3+~nmV`Qbur{6( ztnq8Y=6FWfNFBBFSp}JQXVSG6Gw+@?%_Z(YT28tebC^$eZfmU>mX6{IYtkR0j&?3_ zslPWxFZrRKLP3v?V+8^!!Y(2+^d--zqduM#UZmc-cv^Vgngj|vm-r4jHR5t>Iz+wg z^a_`li6u*C=5#5@7{;nFzk;+Nn0zSJP)do9_CeM;ftnlt2sG4Lhuu@yZEK8w&yBwi z-B9c}d}J7!<`Qv$wiz=Q?c$!UZY!)cM8CZb5Lg}k>Lzq1U8S&M%rH8OUOK_c*-6(k z7?uo|_%Sw9YE94F(!uh%1Vje+M>f+xX>?F$Be>t2^0B0a-GyT}Z;D;eGrcw0n>r0& zK+oCUA$XvpXys_V1bulkwbXl+&0|ml!6H%yC`3ve<;<6d~jKhehl?QgF!RyIQ zC1E~x!KhH7#Tu+YlotbT2==cGv8|dDC6_hGiCZ?-ghMSGYChwH<*_6;GpC=quAk6Q zZJ|P|d_nnn_yq@6Aj+4vLcf$)Lg7e|>ET#`O+2jYZt6P{9<{#Q2M6_`=nytSI24+1 zVc-|Q$TB3GvBo|$Hgdoc4$N&RBkaf``41?Ji%x@ANulIFb|C(MQ9@W1nLeS$Q+^}C zKQcqfe@fwMbQ%-X_>DEc3l&^)CD~p&h-=x2cGz0IP`CMflkeN+I%y@wn`fMs<#*;+NpXtNvUQn4w zW#;lC=87Wb@*-wDsnk7q?pzC`zD!7Ba;LJ08TUt_&y|e%3|RO(TbrAmui2jT-s2DYz^$%w$<4h;Nq5MMH}yM z*okcKblBV4+;(=KOY@OOn@0-mx9_%lT3XxeaN$3ZIa|$+Xml*9cmhm2cJA6~hsVK_ qGqsB&`-0KkAq>qSDOA`6uYBRR<=AzhMjaN8T+%~YRWb(`YX1ku_Y~Uz literal 0 HcmV?d00001 diff --git a/Release/tif_version.obj b/Release/tif_version.obj new file mode 100755 index 0000000000000000000000000000000000000000..7867297e3a6b7317c1d4fed60df930ceb4f7c2e6 GIT binary patch literal 726 zcmah{%}T>S5T2N-SOlXl;0hj8+NFO&+f!||wNSNC(MzGG$);UNe@M4gkK$SI1w0F$ zJcxMr?sItY6|A#OQX?K5*qQlezMW+FwxWdKbLG19pa3j^Yt(d@Ax6xDP{rig2Yw7| zKpj&Tx?ce3VH(0YLCZlbM+LhSfue@_0C_haR|cY0|o!`6Dyr%K)}Htz$xeND?p zO=jssTiCpr9S*rkF(LmJE9HFQ7wf39d$@D3S0mUtE*Fata>ASe?{!I%rkYIXu|z6d z==HB0-f9c7VQi9kCY_GPGns8t(>tWXEX!ujA5JFjak$M599MGmew!PE2q||B3a@g% zx4Wsy?H2IN$-3t!>BKFfp9gAj+t=f34A4?fv-Jz!O(yEN{J=3}5Ztn+5kX_*?n8~~ zxSY}J^eHz#R>LsHIVuFjmVcruQf_H=vGwj|L7```q$*NsX|1P6|J5K0O=(~y#Rg1Ml?gpa=gKRS(2 literal 0 HcmV?d00001 diff --git a/Release/tif_warning.obj b/Release/tif_warning.obj new file mode 100755 index 0000000000000000000000000000000000000000..08a35e0075bc4d1a078f267d033b23be855532d6 GIT binary patch literal 815 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 literal 0 HcmV?d00001 diff --git a/Release/tif_zip.obj b/Release/tif_zip.obj new file mode 100755 index 0000000000000000000000000000000000000000..6573e1dd95ced35cb26ceeb82027da13bbe704c5 GIT binary patch literal 270 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 Os0363DuGEYf&T;RdwjV7 literal 0 HcmV?d00001 diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..b8f4a73 --- /dev/null +++ b/config.guess @@ -0,0 +1,476 @@ +#!/bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner . +# The master version of this file is at the FSF in /home/gd/gnu/lib. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit system type (host/target name). +# +# Only a few systems have been added to this list; please add others +# (but try to keep the structure clean). +# + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 8/24/94.) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + alpha:OSF1:V*:*) + # After 1.2, OSF1 uses "V1.3" for uname -r. + echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'` + exit 0 ;; + alpha:OSF1:*:*) + # 1.2 uses "1.2" for uname -r. + echo alpha-dec-osf${UNAME_RELEASE} + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + Pyramid*:OSx*:*:*) + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + sun4*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + mips:*:5*:RISCos) + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ + -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix${UNAME_RELEASE} + exit 0 ;; + i[34]86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:4) + if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if grep bos410 /usr/include/stdio.h >/dev/null 2>&1; then + IBM_REV=4.1 + elif grep bos411 /usr/include/stdio.h >/dev/null 2>&1; then + IBM_REV=4.1.1 + else + IBM_REV=4.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[3478]??:HP-UX:*:*) + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/7?? | 9000/8?7 ) HP_ARCH=hppa1.1 ;; + 9000/8?? ) HP_ARCH=hppa1.0 ;; + esac + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + sed 's/^ //' << EOF >dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?7:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + hp7??:OSF1:*:* | hp8?7:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:UNICOS:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:UNICOS:*:*) + echo ymp-cray-unicos + exit 0 ;; + CRAY-2:UNICOS:*:*) + echo cray2-cray-unicos + exit 0 ;; + hp3[0-9][05]:NetBSD:*:*) + echo m68k-hp-netbsd${UNAME_RELEASE} + exit 0 ;; + i[345]86:CYGWIN*:*:*) + echo ${UNAME_MACHINE}-unknown-Cygwin${UNAME_RELEASE} + exit 0 ;; + i[34]86:BSD/386:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:NetBSD:*:*) + echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux + exit 0 ;; +# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions +# are messed up and put the nodename in both sysname and nodename. + i[34]86:DYNIX/ptx:4*:*) + echo i386-sequent-sysv4 + exit 0 ;; + i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*) + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + else + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + i[34]86:*:3.2:*) + if test -d /etc/conf/cf.d -a -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-unknown-sysv32 + fi + exit 0 ;; + Intel:Mach:3*:*) + echo i386-unknown-mach3 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M680[234]0:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0) + uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3 && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m680[234]0:LynxOS:2.2*:*) + echo m68k-lynx-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i[34]86:LynxOS:2.2*:*) + echo i386-lynx-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.2*:*) + echo sparc-lynx-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.2*:*) + echo rs6000-lynx-lynxos${UNAME_RELEASE} + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +cat >dummy.c </dev/null`; + printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3"); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-unknown-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) + printf ("vax-dec-bsd\n"); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 +rm -f dummy.c dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +#echo '(Unable to guess system type)' 1>&2 + +exit 1 diff --git a/config.site b/config.site new file mode 100755 index 0000000..d136ff3 --- /dev/null +++ b/config.site @@ -0,0 +1,160 @@ +# $Header: /home/cvsroot/libtiff/config.site,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# TIFF Software +# +# Copyright (c) 1990-1997 Sam Leffler +# Copyright (c) 1991-1997 Silicon Graphics, Inc. +# +# 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. +# + +# +# This file holds site-specific configuration parameters. +# +# Nothing is defined in here by default, the definitions +# commented out below serve as documentation for what you +# can set in this file or a config.local file. +# +# Note that you do not need to set anything here unless you +# want to override the auto-configuration behaviour and/or +# interactive prompting done by the configure script. +# + +# +# Package controls. +# +#DSO="auto" # auto|IRIX|IRIX52 enable DSO support for system +#JPEG="no" # yes|no configure JPEG support (see below) +#ZIP="no" # yes|no configure Deflate support (see below) +#LIBGL="auto" # yes|no|auto configure IRIS GL-based tools +#LIBIMAGE="auto" # yes|no|auto configure SGI RGB image tools +#HTML="no" # yes|no install HTML documentation + +# +# Directory parameters. +# +#DIR_BIN="/usr/local/bin" # directory for tools +#DIR_LIB="/usr/local/lib" # directory for libraries +#DIR_INC="/usr/local/include" # directory for include files +#DIR_MAN="/usr/local/man" # directory for manual pages +#DIR_HTML="/var/httpd/htdocs/tiff" # directory for HTML documentation + +# +# Configuring supporting libraries. +# +# The TIFF software makes use of two ancillary packages: the IJG +# distribution to support the JPEG codec and the zlib distribution +# to support the Deflate codec. To setup use of these packages you +# need to specify where each package's include files are located and +# where the pre-built library (static archive or DSO) is located. +# These may be different or the same (as when the package is compiled +# and referenced directly from the place where the software was +# loaded and compiled). +# +# DIRS_LIBINC is a space-separated list of directories to use for +# locating include files in these packages. Note that it should not +# include -I options as might be passed to the C preprocessor; these +# are automatically added by the configure script when the Makefiles +# are generated. +# +# DIR_LIB is the pathname of the directory where 's +# pre-built library may be found; this is used when building a TIFF +# DSO (on systems where support is present) and when building the +# programs in the tools directory. By default the configure script +# will load the associated library using +# +# -L${DIR_LIB} -l +# +# e.g. -L${DIR_JPEGLIB} -ljpeg. If this is wrong for your system +# (e.g. your compiler/loader does not support the -L option), then +# the LIB parameter can be set explicitly to specify the +# library to use. +# + +# +# JPEG-specific parameters; used when JPEG support is enabled (see above). +# +# JPEG support requires release 5 or later of the IJG code, +# which you can find on the Internet at ftp.uu.net:/graphics/jpeg/. +# +#DIRS_LIBINC="$DIRS_LIBINC ../src/jpeg-6b" # directory for jpeg include files +#DIR_JPEGLIB=../src/jpeg-6b # directory for libjpeg + +# +# Deflate-specific parameters; used when Deflate support is enabled (see above). +# +# NB: Deflate support requires version 0.92 or later of the zlib +# library written by Jean-loup Gailly and Mark Adler. Starting +# with about 0.95 the library is called libz.a (previously it was +# libgz.a). The library was last found at +# +# ftp://ftp.uu.net/graphics/png/code/zlib-0.93.tar.gz +# +# Look for it also at ftp://ftp.uu.net/pub/archiving/zip/zlib. +# +#DIRS_LIBINC="$DIRS_LIBINC ../zlib" # directory for zlib include files +#DIR_GZLIB="../zlib" # directory for libz + +# +# Miscellaneous parameters. +# +#FILLORDER="MS2LSB" # bit order of cpu (MSB2LSB/LSB2MSB) +#MANSCHEME="sysv-source-cat-strip" # manual page installation scheme + +# +# Parameters used when building the software. +# +# Note that configure has several ENVOPTS built into it that are +# set according to the target. This is done to help naive folks. +# +# Beware of changing the INSTALL definition; you *must* have an +# install script that emulates the Silicon Graphics install program! +# +#AR="/bin/ar" # pathname of suitable ar program +#AROPTS="rc" # options to ar for creating archive +#CC="gcc" # name/pathname of C compiler +#ENVOPTS="-Aa" # options for getting ANSI C +#GCOPTS="-g" # options to pass C compiler +#LIBPORT='${PORT}/libport.a' # library with emulation code +#MACHDEPLIBS="" # extra libraries for linking +#PORTFUNCS="" # non-standard functions to emulate +#RANLIB=":" # pathname of suitable ranlib program +#DSOSUF="so" # DSO filename suffix +#LIBCOPTS="-K PIC" # compiler options for building library + +# +# Makefile construction parameters. +# +# These should not normally be set; configure will +# deduce the appropriate syntax to use for includes. +# +#SETMAKE='MAKE = ${MAKE}' # define if make does not setup $MAKE + +# +# General system stuff used by the distribution. +# +#CHMOD="/etc/chmod" # pathname of suitable chmod program +#INSTALL='${SHELL} ${PORT}/install.sh' # SGI install program/emulator +#LN="/bin/ln" # pathname of suitable ln program +#LN_S="-s" # option to ${LN} to create symlink +#MV_F="-f" # option to ${MV} to force operation +#SED="/bin/sed" # pathname of suitable sed program +#SCRIPT_SH="/bin/sh" # pathname of suitable shell +#STRIP="/bin/strip" # strip program used by install.sh diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..d76d5bb --- /dev/null +++ b/config.sub @@ -0,0 +1,793 @@ +#!/bin/sh +# Configuration validation subroutine script, version 1.1. +# Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +# First pass through any local machine types. +case $1 in + *local*) + echo $1 + exit 0 + ;; + *) + ;; +esac + +# Separate what the user gave into CPU-COMPANY and OS (if any). +basic_machine=`echo $1 | sed 's/-[^-]*$//'` +if [ $basic_machine != $1 ] +then os=`echo $1 | sed 's/.*-/-/'` +else os=; fi + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp ) + os= + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` + ;; + -lynx) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm | pyramid \ + | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \ + | alpha | we32k | ns16k | clipper | sparclite | i370 | sh \ + | powerpc | sparc64 | 1750a | dsp16xx | mips64 | mipsel \ + | pdp11 | mips64el | mips64orion | mips64orionel ) + basic_machine=$basic_machine-unknown + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \ + | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \ + | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \ + | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ + | pdp11-* | sh-* | powerpc-* | sparc64-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* ) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-cbm + ;; + amigados) + basic_machine=m68k-cbm + os=-amigados + ;; + amigaunix | amix) + basic_machine=m68k-cbm + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + os=-mvs + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i[345]86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + os=-sysv32 + ;; + i[345]86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + os=-sysv4 + ;; + i[345]86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + os=-sysv + ;; + i[345]86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` + os=-solaris2 + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + miniframe) + basic_machine=m68000-convergent + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + np1) + basic_machine=np1-gould + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium-*) + # We will change tis to say i586 once there has been + # time for various packages to start to recognize that. + basic_machine=i486-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + ps2) + basic_machine=i386-ibm + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + mips) + basic_machine=mips-mips + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sparc) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative must end in a *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[345]* \ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \ + | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ + | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ + | -ptx* | -coff* | -winnt*) + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -ctix* | -uts*) + os=-sysv + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -xenix) + os=-xenix + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-ibm) + os=-aix + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigados + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-masscomp) + os=-rtu + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -lynxos*) + vendor=lynx + ;; + -aix*) + vendor=ibm + ;; + -hpux*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os diff --git a/configure b/configure new file mode 100755 index 0000000..0755197 --- /dev/null +++ b/configure @@ -0,0 +1,1837 @@ +#!/bin/sh +# $Header: /home/cvsroot/libtiff/configure,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# Tag Image File Format (TIFF) Software +# +# Copyright (c) 1988-1997 Sam Leffler +# Copyright (c) 1991-1997 Silicon Graphics, Inc. +# +# 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. +# + +# Configuration script for the TIFF Software + +# +# Shell script to setup machine-dependent files in +# preparation for building TIFF source. +# + +POSIXLY_CORRECT=1; export POSIXLY_CORRECT # disable GNU extensions + +QUIET=no # suppress messages to tty +NONINTERACTIVE=no # control prompting of config params +SITE= # dir where config.site is located +TARGET= # target system identity +SRCDIR= # dir where source is located + +# +# Setup general configuration parameters. +# +DIR_BIN=/usr/local/bin # destination for applications +DIR_LIB=/usr/local/lib # destination for library +DIR_INC=/usr/local/include # destination for include files +DIR_HTML=/var/httpd/htdocs/tiff # destination for HTML files +DIRS_LIBINC= # dirs to search for ancillary includes +DIR_JPEGLIB= # dir for IJG -ljpeg +DIR_GZLIB= # dir for zlib -lgz +DSO=auto # auto-enable DSO support +LIBCOPTS= # library-specific C-compiler options +JPEG=no # configure JPEG support +ZIP=no # configure ZIP/Deflate support +PORT=auto # enable portability emulations +HTML=no # install HTML documentation +LIBGL=auto # auto-enable build of SGI -lgl apps +LIBIMAGE=auto # auto-enable build of SGI -limage apps +MACHDEPLIBS=-lm # machine-dependent libraries for apps +: ${CC=} # name of C compiler to use +: ${CCOMPILER=} # full pathname of C compiler +: ${ENVOPTS=} # CC opts for ANSI C compilation +: ${MAKE=make} # make to use + +# screws up the test of `-f -' +: ${MAKEFLAGS=} # unset MAKEFLAGS +RM="rm -f" + +# +# Error diagnostics that should go to the terminal are +# done with this interface (or cat). +# +bitch() +{ + echo "configure: $@" 1>&2 +} + +# +# This is the preferred interface for +# configure to terminate abnormally. +# +boom() +{ + bitch "" + bitch "Unrecoverable error! Once you've corrected the problem rerun this script." + kill -1 $$ # use kill so trap handler is called +} + +usage() +{ + cat<<'EOF' +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] + --help print this message + --quiet do not print `Using ...' messages + --verbose opposite of --quiet + --noninteractive don't ask any questions + --version print the version of autoconf that created configure + --target=TARGET configure for TARGET [TARGET=HOST] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --with-PARAM[=ARG] set configuration PARAM [ARG=yes] +EOF +} + +# +# Crack command line arguments. We purposely +# use syntax and options that are compatible +# with GNU autoconf. +# +ac_prev= +for ac_option +do + if [ -n "$ac_prev" ]; then # assign the argument to previous option + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + case "$ac_option" in # collect optional argument + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'`;; + *) ac_optarg=;; + esac + case "$ac_option" in + -with-*|--with-*) + ac_with=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if [ -n "`echo $ac_with| sed 's/[-_a-zA-Z0-9]//g'`" ]; then + bitch "configure: $ac_with: invalid parameter name." + kill -1 $$ + fi + ac_with=`echo $ac_with| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes;; + esac + eval "${ac_with}='$ac_optarg'" + ;; + -quiet|--quiet) QUIET=yes;; + -verbose|--verbose) QUIET=no;; + -noninteractive|--noninteractive) NONINTERACTIVE=yes;; + -site|--site) ac_prev=SITE;; + -site=*|--site=*) SITE="$ac_optarg";; + -srcdir|--srcdir) ac_prev=SRCDIR;; + -srcdir=*|--srcdir=*) SRCDIR="$ac_optarg";; + -target|--target) ac_prev=TARGET;; + -target=*|--target=*) TARGET="$ac_optarg" ;; + -version|--version) + echo "This is TIFF configure $Revision: 1.1.1.1 $" + exit 0 + ;; + -help|--help) usage; exit 0;; + -*) + bitch "configure: $ac_option: invalid option; use -help for usage." + kill -1 $$ + ;; + *) + if [ x"$TARGET" != x ]; then + bitch "configure: Can only configure for one target at a time." + kill -1 $$ + fi + TARGET="$ac_option" + ;; + esac +done + +if [ -n "$ac_prev" ]; then + bitch "configure: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" + kill -1 $$ +fi + +# +# Locate source directory by looking for the VERSION file. +# The directory must either be specified through the +# environment or be located in the current directory or a +# parent of the current directory. +# +test "$SRCDIR" || { + configure=$0 + # NB: don't use dirname since it may not exist + SRCDIR=`echo $configure | sed 's;/[^/][^/]*$;;'` + if [ @"$SRCDIR" = @"$configure" ]; then + SRCDIR=. + fi + while [ ! -r $SRCDIR/VERSION ]; do + # strip last directory from pathname + newdir=`echo $SRCDIR | sed 's;/[^/]*$;;'` + if [ -z "$newdir" ] || [ "$newdir" = $SRCDIR ]; then + break; + fi + SRCDIR=$newdir + done +} +if [ ! -r $SRCDIR/VERSION ]; then + bitch "Cannot locate sources in $SRCDIR." + kill -1 $$ +fi +SRCDIR=`echo "$SRCDIR" | sed 's;\([^/]\)/*$;\1;'` + +if [ -r ${SRCDIR}/tif_version.c ] ; then + SRCDIR_IS_LIBTIFF=yes + PORTDOTH=port.h +else + SRCDIR_IS_LIBTIFF=no + PORTDOTH=libtiff/port.h +fi + +# +# Descriptor usage: +# 1: ??? +# 2: errors that should be seen even if we're in the background. +# 3: [stdout from test runs] +# 4: verbose-style messages (Using ...) +# 5: compiler stderr when running tests +# +if [ $QUIET = yes ]; then + exec 4>/dev/null # chuck messages +else + exec 4>&1 # messages got to stdout +fi +exec 5>./config.log # compiler messages and the like + +capture() +{ + (eval "set -x; $*") >&5 2>&1 + return +} +captureX() +{ + (eval "set -x; $*") 2>&5 + return +} + +date >&5 +echo Running "$0" with arguments: "$@" >&5 + +cat 1>&5 <<'EOF' + +This file contains information that is captured from running the configure +script. Lines that begin with a "+" are command lines echoed by the +shell. Other lines are the output of commands; usually the contents of +test case files or the output from compilers. If configure does the +wrong thing, you can use the information captured here to aid in debugging. + +EOF + +if [ -r $SRCDIR/tiff.alpha ] ; then + VERSIONFILE=$SRCDIR/VERSION + ALPHAFILE=$SRCDIR/tiff.alpha +else + VERSIONFILE=$SRCDIR/VERSION + ALPHAFILE=$SRCDIR/dist/tiff.alpha +fi +DATE=`date` + +eval `cat $VERSIONFILE | sed 's/\([0-9][0-9]*\)\.\([0-9][0-9]*\)\(.*\)/DIST_MAJOR=\1; DIST_MINOR=\2; DIST_TYPE=\3/'` +DIST_ALPHA=`awk '{print $3}' $ALPHAFILE` +VERSION="v${DIST_MAJOR}.${DIST_MINOR}${DIST_TYPE}" +if [ $DIST_TYPE = beta ]; then + VERSION="${VERSION}${DIST_ALPHA}" +fi + +Note() +{ + echo "$@" 1>&4 +} + +Note "" +if [ $SRCDIR_IS_LIBTIFF = yes ] ; then + Note "Configuring TIFF Software (library only) $VERSION." +else + Note "Configuring TIFF Software $VERSION." +fi + +Note "" +Note "If configure does the wrong thing, check the file config.log for" +Note "information that may help you understand what went wrong." +Note "" + +# +# Read site and local configuration parameters. +# +if [ -f $SITE/config.site ]; then + Note "Reading site-wide parameters from $SITE/config.site." + . $SITE/config.site + capture . $SITE/config.site +elif [ -f $SRCDIR/config.site ]; then + Note "Reading site-wide parameters from $SRCDIR/config.site." + . $SRCDIR/config.site + capture . $SRCDIR/config.site +fi +if [ -f config.local ]; then + Note "Reading local parameters from config.local." + . ./config.local + capture . ./config.local +elif [ -f $SRCDIR/config.local ]; then + Note "Reading local parameters from $SRCDIR/config.local." + . $SRCDIR/config.local + capture . $SRCDIR/config.local +fi + +# +# Emulate old-style settups... +# +test -z "${DIR_JPEG-}" || { + DIRS_LIBINC="${DIRS_LIBINC} ${DIR_JPEG}" + DIR_JPEGLIB="${DIR_JPEG}" +} +test -z "${DIR_LIBGZ-}" || { + DIRS_LIBINC="${DIRS_LIBINC} ${DIR_LIBGZ}" + DIR_GZLIB="${DIR_LIBGZ}" +} + +identifyTarget() +{ + random=`date | awk '{print $4}' | sed -e 's/.*://'` 2>/dev/null + case "$random" in + *0) Note "Wow, you've got a $1 system!";; + *1) Note "Hmm, looks like a $1 system.";; + *2) Note "Oh no, not another $1 system...";; + *3) Note "Well I'll be, a $1 system.";; + *4) Note "Fee, fie, foe, this smells like a $1 system.";; + *5) Note "Gosh, aren't you lucky to have a $1 system!";; + *6) Note "YOW!! Did something bad happen or am I on a $1 system?";; + *7) Note "Do they really still make $1 systems?!";; + *8) Note "I'm always happy to encounter another $1 system.";; + *9) Note "Here we are again, this time on a $1 system.";; +esac +} + +# +# If no target is specified, try to deduce the system. +# We use the GNU scripts for guessing and canonicalizing +# the system identification, if available. +# +if [ -z "$TARGET" ]; then + test -f $SRCDIR/config.guess && TARGET=`sh $SRCDIR/config.guess` 2>/dev/null + if [ -z "$TARGET" ]; then + bitch "Sorry, no target specified on the command line and I don't seem" + bitch "to have the GNU config.guess script that is used to deduce your" + bitch "system type." + kill -1 $$ + fi + identifyTarget $TARGET +elif [ -f $SRCDIR/config.sub ]; then + TARGET=`sh $SRCDIR/config.sub "$TARGET"` +else + Note "Warning, I don't seem to have the GNU config.sub script to canonicalize" + Note "your target specification; this may cause problems later on..." +fi +if [ -z "${FILLORDER-}" ]; then + # + # Host bit order within a word. + # + case $TARGET in + mips-dec-*) FILLORDER=LSB2MSB;; + i[345]86-*) FILLORDER=LSB2MSB;; + *) FILLORDER=MSB2LSB;; + esac +fi + +# +# Find the full pathname of a file +# using the specified test operation. +# +findThing() +{ + t="$1"; app="$2"; path="$3"; + case "$app" in + /*) eval "$t" "$app" && { echo "$app"; return; };; + esac + (IFS=: + for i in $path; do + eval "$t" "$i/$app" && { echo "$i/$app"; return 0; } + done + return 1 + ) +} + +# +# Find the full pathname of a plain file. +# +findFile() +{ + findThing "test -f" "$1" "$2" +} + +# +# Find the full pathname of an executable. +# +findApp() +{ + findThing "test -x" $1 $2 +} + +# +# Find the full pathname of an executable; +# supply a default if nothing is found. +# +findAppDef() +{ + app=$1; path=$2; def=$3 + case $app in + /*) test -x $app && { echo $app; return; };; + esac + IFS=: + for i in $path; do + test -x $i/$app && { echo $i/$app; return; } + done + echo $def +} + +# +# Find the full pathname of a header file; in search-path $DIRS_LIBINC +# +findHeader() +{ + case "$1" in + /*) echo "$1"; return ;; + esac + for i in ${DIRS_LIBINC} /usr/include; do + test -r $i/$1 && { + case "$i" in + /*) echo "$i/$1"; return ;; + esac + if [ $SRCDIR_IS_LIBTIFF = yes ]; then + echo "$i/$1"; + else + echo "../$i/$1"; + fi + return; + } + done +} + +# +# Locate a C compiler that satisfies our needs (using assorted heuristics). +# +JUNK=" + a.out + confsed + conftestmmap + confx confy + confMakefile + core + dummy + dummy.a + dummy.c + dummy.o + foo + so_locations + t.c + t.o + t + xMakedepend + xdefs + xgnu.c + xmakeinc + xport.h +" +trap "$RM \$JUNK; exit 1" 1 2 15 + +$RM $JUNK + +cat>xgnu.c<&5 | egrep yes)" +} + +# +# NB: use ANSI C prototype to weed out non-ANSI compilers. +# +cat>dummy.c< + +If command line options are required for ANSI C compilation, set the +ENVOPTS parameter to these options in a similar way (either through +an environment variable or config.local/config.site) and then rerun +this script. +EOF + boom +fi +Note "Using $CCOMPILER for a C compiler (use -with-CC=compilername to override)." + +test "$ENVOPTS" && { + Note "Using $ENVOPTS to get the appropriate compilation environment." +} + +if [ ${ISGCC} = yes ] ; then + GCCversion="`${CCOMPILER} -v 2>&1 | \ + sed -n -e '/version/s/.* \([0-9]*\)\.\([0-9]*\).\([0-9]*\)/\1.\2.\3/p'`" +fi + + +CheckForGandO() +{ + f=$1 + if test -s $f; then + capture grep -i \(error\|warning\) $f || return 1 + fi + return 0 +} + +if [ -z "${GCOPTS-}" ]; then + if capture $CCOMPILER $ENVOPTS -g -c dummy.c; then + Note "Looks like $CCOMPILER supports the -g option." + # NB: cannot use captureX here 'cuz we lose stderr + if $CCOMPILER $ENVOPTS -c -g -O dummy.c >t 2>&1 && CheckForGandO t; then + GCOPTS="-g" + else + Note "... but not together with the -O option, not using it." + GCOPTS= + fi + else + GCOPTS= + fi +fi +if [ ! -z "${GCOPTS}" ]; then + Note "Using \"$GCOPTS\" for C compiler options." +fi + +# +# Verify that $MAKE is accessible +# +PATHMAKE=`findApp ${MAKE} $PATH` +if [ "$PATHMAKE" ]; then + Note "Using $PATHMAKE to configure the software." + (echo 'all:') | ${MAKE} -f - all >/dev/null 2>&5 || { + cat< /dev/null ; then + SETMAKE= + else + Note "Looks like $MAKE does not setup MAKE in Makefiles, will compensate." + SETMAKE="MAKE = ${MAKE}" + fi +fi + +test -z "${AR-}" && AR=`findApp ar $PATH` +if [ -z "$AR" ]; then + Note "*** Warning, could not locate a suitable ar command; using a default." + AR=ar +fi +test -z "${AROPTS-}" && AROPTS=rc +test -z "${RANLIB-}" && RANLIB=`findApp ranlib $PATH` +if [ -z "$RANLIB" ]; then + Note "Warning, no ranlib, assuming it's not needed." + RANLIB=":" + $RM dummy.a + if $AR rcs dummy.a >/dev/null 2>&1; then + AROPTS=crs + Note "Looks like ar has an s option to build symbol tables." + fi +fi + +# +# runMake target rules ... +# +runMakeX() +{ + target="$1"; shift + $RM $target + (echo SRCDIR=. + for i in "$@"; do + echo "$i"; + done + )>confMakefile + captureX ${MAKE} -f confMakefile $target + return +} +runMake() +{ + runMakeX "$@" >&5 + return +} + +# +# Look for a library using a known (unique) function. +# +CheckForLibrary() +{ + f=$1; shift + libs="$@"; + cat>t.c<t.c + runMake t "t:; ${CCOMPILER} ${ENVOPTS} -E t.c" +} + +# +# Figure out if certain system-specific interfaces are +# supported. We craft a port.h file that has external +# declarations for missing routines that are required by +# the system and modify defs to reflect which optional +# interfaces are supported. +# + +EmitCPlusPlusPrologue() +{ + echo '/*' + echo ' * Warning, this file was automatically created by the TIFF configure script' + echo ' * VERSION: ' $VERSION + echo ' * DATE: ' $DATE + echo ' * TARGET: ' $TARGET + if [ $ISGCC = yes ]; then + echo ' * CCOMPILER: ' ${CCOMPILER}-${GCCversion} + else + echo ' * CCOMPILER: ' $CCOMPILER + fi + echo ' */' + echo "#ifndef $1" + echo "#define $1 1" + echo '#ifdef __cplusplus' + echo 'extern "C" {' + echo '#endif' +} + +EmitCPlusPlusEpilogue() +{ + echo '#ifdef __cplusplus' + echo '}' + echo '#endif' + echo '#endif' +} + +# +# Look for a function in one of the standard libraries +# or one of the machine-dependent libraries selected above. +# +CheckForFunc() +{ + echo "extern int $1(); main(){$1();exit(0);}" >t.c + runMake t "t:; ${CCOMPILER} ${ENVOPTS} t.c ${MACHDEPLIBS}" +} + +# +# Look for a function declaration in system include files. +# +AddFuncDecl() +{ + echo "$2"; + Note "... add function prototype for $1" +} +CheckForFuncDecl() +{ + f=$1; shift + (for i do + echo "#include \"$i\"" + done)>t.c + capture cat t.c + runMakeX t "t:; ${CCOMPILER} ${ENVOPTS} -E t.c" |\ + awk '{while($0~/[,(][ \t]*$/){printf"%s",$0;getline}print}' |\ + grep "$f[ ]*(.*)" >&5 + return +} +CheckFuncDecl() +{ + f=$1; shift + decl=$1; shift + CheckForFuncDecl "$f" "$@" || AddFuncDecl "$f" "$decl" +} + +# +# Look for a variable declaration in system include files. +# +CheckForVarDecl() +{ + v="$1"; shift + (for i do + echo "#include \"$i\"" + done)>t.c + capture cat t.c + runMakeX t "t:; ${CCOMPILER} ${ENVOPTS} -E t.c" | grep "$v" >&5 + return +} +CheckVarDecl() +{ + v="$1"; shift + decl="$1"; shift + CheckForVarDecl "$v" "$@" || \ + (echo "$decl"; Note "... add declaration $decl") +} + +# +# Look for a #define in system include files. +# +AddDefine() +{ + echo '#ifndef' $1 + echo '#define' "$2" + echo '#endif' + Note '... add #define for' "$1" +} +CheckForDefine() +{ + def=$1; shift + (for i do + echo "#include \"$i\"" + done + echo "#ifdef $def" + echo "FOUND();" + echo "#endif" + )>t.c + capture cat t.c + runMakeX t "t:; ${CCOMPILER} ${ENVOPTS} -E t.c" | grep FOUND >&5 +} +CheckDefine() +{ + def=$1; shift + decl=$1; shift + CheckForDefine "$def" "$@" || AddDefine "$def" "$decl" +} + +CheckForMMAP() +{ + if CheckForFunc getpagesize; then + cat>t.c<<'EOF' +/* this was lifted from GNU autoconf */ +/* Thanks to Mike Haertel and Jim Avera for this test. */ +#include +#include +#include +EOF + else + cat>t.c<<'EOF' +/* this was lifted from GNU autoconf */ +/* Thanks to Mike Haertel and Jim Avera for this test. */ +#include +#include +#include + +#ifdef BSD +# ifndef BSD4_1 +# define HAVE_GETPAGESIZE +# endif +#endif + +#ifndef HAVE_GETPAGESIZE +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif +# else +# ifdef NBPC +# define getpagesize() NBPC +# else +# define getpagesize() PAGESIZE /* SVR4 */ +# endif +# endif +# endif +#endif +EOF + fi +cat>>t.c<<'EOF' +#if defined(__osf__) || defined(_AIX) +# define valloc malloc +#endif +char *valloc(), *malloc(); + +int +main() +{ + char *buf1, *buf2, *buf3; + int i = getpagesize(), j; + int i2 = getpagesize()*2; + int fd; + + buf1 = (char *)valloc(i2); + buf2 = (char *)valloc(i); + buf3 = (char *)malloc(i2); + for (j = 0; j < i2; ++j) + *(buf1 + j) = rand(); + fd = open("conftestmmap", O_CREAT | O_RDWR, 0666); + write(fd, buf1, i2); + mmap(buf2, i, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_PRIVATE, fd, 0); + for (j = 0; j < i; ++j) + if (*(buf1 + j) != *(buf2 + j)) + exit(1); + lseek(fd, (long)i, 0); + read(fd, buf2, i); /* read into mapped memory -- file should not change */ + /* (it does in i386 SVR4.0 - Jim Avera, jima@netcom.com) */ + lseek(fd, (long)0, 0); + read(fd, buf3, i2); + for (j = 0; j < i2; ++j) + if (*(buf1 + j) != *(buf3 + j)) + exit(1); + exit(0); +} +EOF + capture cat t.c + runMake t "t:; ${CCOMPILER} ${ENVOPTS} t.c ${MACHDEPLIBS}" && ./a.out +} + +CheckForBigEndian() +{ + echo 'main() { int one = 1; char* cp = (char*)&one; exit(*cp!=0); }'>t.c + capture cat t.c + runMake t "t:; ${CCOMPILER} ${ENVOPTS} t.c" && ./a.out +} + +# +# Check an existing port.h to see if it was created +# for the target and compiler we are using. +# +CheckPortDotH() +{ + getConfigTag() + { + param=`grep "$1:" $2 | sed -e 's/.*:[ ]*\([^ ]*\).*/\1/'` + } + getConfigTag TARGET $PORTDOTH; target="$param" + getConfigTag CCOMPILER $PORTDOTH; ccompiler="$param" + CCOMP=$CCOMPILER + if [ $ISGCC = yes ]; then + CCOMP="${CCOMP}-${GCCversion}" + fi + test "$target" = "$TARGET" && test "$ccompiler" = "$CCOMP" +} + +# +# Built port.h based on the system and compiler setup. +# +BuildPortDotH() +{ + Note "" + Note "Creating $PORTDOTH with necessary definitions." + + (EmitCPlusPlusPrologue _PORT_ + + CheckForIncludeFile sys/types.h && echo '#include ' + CheckVarDecl off_t 'typedef long off_t;' sys/types.h stdlib.h + CheckVarDecl size_t 'typedef unsigned size_t;' sys/types.h stdlib.h + CheckVarDecl u_char 'typedef unsigned char u_char;' sys/types.h + CheckVarDecl u_short 'typedef unsigned short u_short;' sys/types.h + CheckVarDecl u_int 'typedef unsigned int u_int;' sys/types.h + CheckVarDecl u_long 'typedef unsigned long u_long;' sys/types.h + + echo "#define HOST_FILLORDER FILLORDER_${FILLORDER}" + CPU=`echo $TARGET | sed 's/-.*//'` + Note "... using $FILLORDER bit order for your $CPU cpu" + if CheckForBigEndian; then + echo "#define HOST_BIGENDIAN 1" + Note "... using big-endian byte order for your $CPU cpu" + else + echo "#define HOST_BIGENDIAN 0" + Note "... using little-endian byte order for your $CPU cpu" + fi + + CheckForMMAP && { + echo '#define HAVE_MMAP 1' + Note "... configure use of mmap for memory-mapped files" + CheckFuncDecl mmap \ + 'extern void* mmap(void*, size_t, int, int, int, off_t);' sys/mman.h + } + + CheckForIncludeFile stdio.h && echo '#include ' + CheckForIncludeFile unistd.h && echo '#include ' + CheckForIncludeFile string.h && echo '#include ' + CheckForIncludeFile stdlib.h && echo '#include ' + if CheckForDefine O_RDONLY fcntl.h; then + echo '#include ' + Note "... O_RDONLY is in " + elif CheckForDefine O_RDONLY sys/file.h; then + echo '#include ' + Note "... O_RDONLY is in " + else + AddDefine O_RDONLY "O_RDONLY 0" + AddDefine O_WRONLY "O_WRONLY 1" + AddDefine O_RDWR "O_RDWR 2" + fi + + echo 'typedef double dblparam_t;' + Note "... using double for promoted floating point parameters" + + if [ -z "${INLINE-}" ]; then + if [ $ISGCC = yes ]; then + echo '#ifdef __STRICT_ANSI__' + echo '#define INLINE __inline__' + echo '#else' + echo '#define INLINE inline' + echo '#endif' + Note "... enabling use of inline functions" + else + echo '#define INLINE' + Note "... disabling use of inline functions" + fi + else + echo "#define INLINE $INLINE" + Note "... using \"$INLINE\" to control inline function usage" + fi + + echo '#define GLOBALDATA(TYPE,NAME) extern TYPE NAME' + + CheckFuncDecl memset 'extern void* memset(void*, int, size_t);' string.h + CheckFuncDecl floor 'extern double floor(double);' math.h + CheckFuncDecl ceil 'extern double ceil(double);' math.h + CheckFuncDecl exp 'extern double exp(double);' math.h + CheckFuncDecl pow 'extern double pow(double, double);' math.h + CheckFuncDecl read 'extern int read(int, const void*, unsigned int);' unistd.h + CheckFuncDecl malloc 'extern void* malloc(size_t);' stdlib.h + CheckFuncDecl realloc 'extern void* realloc(void*, size_t);' stdlib.h + CheckFuncDecl free 'extern void free(void*);' stdlib.h + EmitCPlusPlusEpilogue + )>xport.h + if [ $SRCDIR_IS_LIBTIFF = no -a ! -d libtiff ]; then + Note "Creating libtiff directory" + mkdir libtiff + fi + mv xport.h $PORTDOTH; chmod 444 $PORTDOTH + Note "Done creating $PORTDOTH." +} + +if [ "$PORT" != no ] && test -f $PORTDOTH && CheckPortDotH; then + Note "" + Note "Using previously created $PORTDOTH." +else + $RM xport.h t.c a.out $PORTDOTH + BuildPortDotH +fi + +if [ "$PORT" = auto ]; then + Note "" + Note "Checking system libraries for functionality to emulate." + + FUNCS=" + strcasecmp + strtoul + getopt + " + + for i in $FUNCS; do + CheckForFunc $i || { + Note "... emulate $i" + PORTFUNCS="${PORTFUNCS-} $i.c" + } + done + if [ "${PORTFUNCS-}" ]; then + LIBPORT='../port/libport.a' + PORT=yes + else + PORT=no + fi +fi +if [ $PORT != yes ] ; then + LIBPORT= + PORTFUNCS= +fi +Note "Done checking system libraries." + +Note "" +Note "Checking for Dynamic Shared Object (DSO) support." +if [ "$DSO" = auto ]; then + DSO=no + DSOSUF_VERSION= + DSOLD='${LD}' + TIFFLIBREF= + case $TARGET-$CC-$ISGCC in + *-irix5.2*) + if (findApp rld /lib:/usr/lib:$PATH) >/dev/null 2>&1; then + DSOSUF=so + DSOOPTS='-elf -shared -no_unresolved -all' + DSO=IRIX52 + TIFFLIBREF='-L${DEPTH}/libtiff -rpath '${DIR_LIB}' -ltiff' + fi + ;; + *-irix*) + if (findApp rld /lib:/usr/lib:$PATH) >/dev/null 2>&1; then + DSOSUF=so + DSOLD="${CCOMPILER} ${ENVOPTS}" + if [ $ISGCC = yes ]; then + LIBCOPTS="-fpic" + DSOOPTS='-shared -rdata_shared' + else + LIBCOPTS="-KPIC" + DSOOPTS='-shared -rdata_shared -check_registry ${SRCDIR}/port/irix/so_locations -quickstart_info' + fi + DSO=IRIX + TIFFLIBREF='-L${DEPTH}/libtiff -rpath '${DIR_LIB}' -ltiff' + fi + ;; + *-aix*) + DSOSUF=a + DSOOPTS='-r' + LIBCOPTS="-bM\:SRE" + DSO=AIX + ;; + *-hpux*yes) + DSOSUF=sl + DSOLD=gcc + DSOOPTS='-fpic -shared' + LIBCOPTS=-fpic + DSO=HPUX + TIFFLIBREF="-Wl,+s,+b${DIR_LIB}"' -L${DEPTH}/libtiff -ltiff' + ;; + *-hpux*) + DSOSUF=sl + DSOOPTS='-b' + LIBCOPTS="+Z" + DSO=HPUX + TIFFLIBREF="-Wl,+s,+b${DIR_LIB}"' -L${DEPTH}/libtiff -ltiff' + ;; + *-solaris*) + DSOSUF=so + DSOOPTS='-G' + if [ $ISGCC = yes ]; then + LIBCOPTS="-fpic" + else + LIBCOPTS="-K PIC" + fi + DSO=SOLARIS + TIFFLIBREF='-L${DEPTH}/libtiff -R'${DIR_LIB}' -ltiff' + ;; + *-netbsd*) + DSOSUF=so.${DIST_MAJOR}.0 + LIBCOPTS='-fPIC' + DSO=NETBSD + TIFFLIBREF='-L${DEPTH}/libtiff -ltiff' + ;; + *-freebsd*) + DSOSUF=so.${DIST_MAJOR}.0 + LIBCOPTS='-fpic -fPIC' + DSO=FREEBSD + TIFFLIBREF='-L${DEPTH}/libtiff -ltiff' + ;; + *-linux*) + if [ -r /lib/libc.so.6 || -r /lib/libc.so.5 ]; then + DSOSUF=so.${DIST_MAJOR} + DSOSUF_VERSION=${DSOSUF}.${DIST_MINOR}.${DIST_ALPHA} + LIBCOPTS='-fPIC' + DSOOPTS='-shared' + DSO=LINUX + fi + ;; + *-osf3*|*-osf4*) + DSOSUF=so + DSOOPTS='-shared' + DSO=OSF + ;; + esac +fi +if [ "$DSO" != no ]; then + JUNK="$JUNK t.${DSOSUF}" + # + # Check to make sure the compilers process + # the DSO options in the expected way. + # + CheckCCDSO() + { + $RM t.c t.o t.${DSOSUF} + cat>t.c<&4 <t.c + if mv -f t.c t.o; then + Note "Looks like mv supports the -f option to force a move." + MV_F=-f + else + Note "Warning, looks like mv has no -f option to force move operations;" + Note "... this may cause problems during installation." + MV_F= + fi +fi + +# +# Check if ln -s creates a symbolic link. +# +if [ -z "${LN_S-}" ]; then + $RM t.c; $LN -s foo t.c && LN_S=-s +fi +if [ -n "$LN_S" ]; then + Note "Looks like $LN supports the -s option to create a symbolic link." +else + Note "Warning, looks like $LN has no -s option to create symbolic links;" + Note "... this may cause problems during installation." +fi + +# +# Pick install mechanism. +# +if [ -z "${INSTALL-}" ]; then + case $TARGET in + *-irix*) INSTALL=`findApp install /sbin:$PATH`;; + *) INSTALL='${SHELL} ../port/install.sh';; + esac +fi + +Note "Done selecting programs." + +# +# User-changable configuration parameters section. +# Anything selected here is presented to the user +# and may be interactively changed. +# + +Note "" +Note "Selecting default TIFF configuration parameters." +Note "" + +# +# Fill in any other configuration parameters not +# setup in the site and local files. +# + +bitchExecutable() +{ + echo "" + echo "Warning, $1 does not seem to be an executable program;" + echo "you'll need to correct this before starting up the fax server." + echo "" +} + +# +# Setup manual page-related stuff. +# +# Manual pages are processed according to: +# 1. Section organization (BSD or System V) +# 2. Pre-formatted (w/ nroff) or source. +# 3. Compressed (compress, gzip, pack) or uncompressed. +# 4. Whether or not the FlexFAX ``F'' suffix must be +# stripped for pages to be found (only for 4F pages). +# +if [ -z "${DIR_MAN-}" ]; then + MANPATH=" + $MANPATH + /usr/local/man + /usr/contrib/man + /usr/catman/local + " + DIR_MAN= + for i in $MANPATH; do + test -d $i && { DIR_MAN=$i; break; } + done + test -z "$DIR_MAN" && DIR_MAN=/usr/local/man +fi +Note "Looks like manual pages go in $DIR_MAN." +if [ -z "${MANSCHEME-}" ]; then + case $TARGET in + *-bsdi*|*-netbsd*) MANSCHEME=bsd-nroff-gzip-0.gz;; + *-freebsd*) MANSCHEME=bsd-source-cat;; + *-linux*) MANSCHEME=bsd-source-cat;; + *-ultrix*) MANSCHEME=bsd-source-cat;; + *-sunos*) MANSCHEME=bsd-source-cat-strip;; + *-sysv[234]*) MANSCHEME=sysv-source-cat-strip;; + *-hpux*) MANSCHEME=sysv-source-cat-strip;; + *-solaris*) MANSCHEME=sysv-source-cat-strip;; + *-aix*) MANSCHEME=sysv-source-strip;; + *-isc*|*-sco*) MANSCHEME=sysv-source-cat;; + *-irix*) MANSCHEME=sysv-nroff-compress-Z;; + *) + # + # Try to deduce the setup from existing manual pages. + # XXX needs more work XXX + # + MANSCHEME=sysv-source-cat + if [ -d /usr/share/man ]; then + if [ -d /usr/share/man/u_man ]; then + MANSCHEME=sysv-source-cat + elif [ -d /usr/share/man/man8 ]; then + MANSCHEME=bsd-source-cat + fi + elif [ -d /usr/share/catman ]; then + if [ -d /usr/share/catman/u_man ]; then + MANSCHEME=sysv-nroff-cat + elif [ -d /usr/share/catman/man8 ]; then + MANSCHEME=bsd-nroff-cat + fi + fi + ;; + esac +fi +Note "Looks like manual pages should be installed with $MANSCHEME." + +# +# Figure out which brand of echo we have and define +# prompt and print shell functions accordingly. +# +if [ `echo foo\\\c`@ = "foo@" ]; then + prompt() + { + echo "$* \\c" + } +elif [ "`echo -n foo`@" = "foo@" ]; then + prompt() + { + echo -n "$* " + } +else + prompt() + { + echo "$*" + } +fi + +# +# Prompt the user for a string that can not be null. +# +promptForNonNullStringParameter() +{ + x="" val="$1" desc="$2" + while [ -z "$x" ]; do + prompt "$desc [$val]?"; read x + if [ "$x" ]; then + # strip leading and trailing white space + x=`echo "$x" | sed -e 's/^[ ]*//' -e 's/[ ]*$//'` + else + x="$val" + fi + done + param="$x" +} + +promptForManPageScheme() +{ + x="" + while [ -z "$x" ]; do + prompt "Manual page installation scheme [$MANSCHEME]?"; read x + if [ "$x" ]; then + # strip leading and trailing white space + x=`echo "$x" | sed -e 's/^[ ]*//' -e 's/[ ]*$//'` + # XXX do a better job of validating... + case "$x" in + bsd-nroff-cat*|sysv-nroff-cat*) ;; + bsd-nroff-gzip*|sysv-nroff-gzip*) ;; + bsd-nroff-comp*|sysv-nroff-comp*) ;; + bsd-nroff-pack*|sysv-nroff-pack*) ;; + bsd-source-cat*|sysv-source-cat*) ;; + bsd-source-gzip*|sysv-source-gzip*) ;; + bsd-source-comp*|sysv-source-comp*) ;; + bsd-source-pack*|sysv-source-pack*) ;; + *) +cat <--[-] + +where: + + is either "bsd" for BSD-style section organization (e.g. + file formats in section 5) or "sysv" for System V-style + organization (e.g. file formats in section 4). + + is either "nroff" to force installation of formatted + materials (using nroff) or "source" to get the nroff + source installed. + + is either the name of a program to compress the manual + pages (gipz, compress, pack) or "cat" for uncompressed data. + + is either the file suffix to convert installed pages to + (e.g. 0.gz for gzip-compressed pages under BSD) or "strip" + to force the normal ".4f" suffix to be converted to ".4" + (or ".5" if using the BSD organization). If no - + is specified then filenames are not converted when they + are installed. + +Common schemes are: + +bsd-nroff-gzip-0.gz compressed formatted pages for BSD +bsd-source-cat nroff source w/ BSD organization +sysv-source-cat-strip nroff source for SysV w/o .4f suffix +sysv-source-cat nroff source for SysV as-is + +EOF + x="";; + esac + else + x="$MANSCHEME" + fi + done + MANSCHEME="$x" +} + +printConfig() +{ + cat< accepts the displayed parameters." + echo "A number lets you change the numbered parameter." + echo "" + ;; + esac + ok=skip + done + checkJPEG + checkZIP +else + checkJPEG + checkZIP +fi + +case $MANSCHEME in +*-source-*) MANAPPS=man1 MANLIB=man3;; +*-nroff-*) MANAPPS=cat1 MANLIB=cat3;; +esac +case $MANSCHEME in +*-strip) MANSEDLOCAL="-e s/3T/3/g";; +*) MANSEDLOCAL="";; +esac +case $MANSCHEME in +*-source-*) MANCVT='${MANSED} $? >$@';; +*-nroff-gzip-*) MANCVT='${MANSED} $? | nroff -man | gzip > $@';; +*-nroff-pack-*) MANCVT='${MANSED} $? | nroff -man | pack > $@';; +*-nroff-com*-*) MANCVT='${MANSED} $? | nroff -man | compress > $@';; +*-nroff-cat-*) MANCVT='${MANSED} $? | nroff -man > $@';; +esac +case $MANSCHEME in +*-0|*-0.gz|*-0.Z|*-gz|*-Z|*-z) + suf=`echo $MANSCHEME | sed 's/.*-/./'` + A='`echo $$i | sed' B='`' # workaround shell bugs + MANAPPNAME="$A s/\\\\.1\$\$/$suf/$B" + MANLIBNAME="$A s/\\\\.3t\$\$/$suf/$B" + ;; +*-strip) + MANAPPNAME='$$i' + MANLIBNAME='`echo $$i | sed s/\\.3t$$/.3/`' + ;; +*) + MANAPPNAME='$$i' MANLIBNAME='$$i' + ;; +esac + +if [ "${JPEG}" = yes ]; then + test -z "${CONF_JPEG-}" && CONF_JPEG="-DJPEG_SUPPORT" + if test -z "${LIBJPEG-}" ; then + LIBJPEG="-ljpeg" + test -z "${DIR_JPEGLIB-}" || LIBJPEG="-L${DIR_JPEGLIB} ${LIBJPEG}" + fi +else + CONF_JPEG= + LIBJPEG= +fi +if [ "${ZIP}" = yes ]; then + test -z "${CONF_ZIP-}" && CONF_ZIP="-DZIP_SUPPORT" + if test -z "${LIBGZ-}" ; then + LIBGZ="-lz" + test -z "${DIR_GZLIB-}" || LIBGZ="-L${DIR_GZLIB} ${LIBGZ}" + fi +else + CONF_ZIP= + LIBGZ= +fi + +Note "" + +# +# Fixup a list of potentially relative pathnames so +# that they work when used in a subdirectory. The +# string sent to stdout has no extraneous spaces so +# it can be used, for example, in building pathnames. +# +# NB: There's an extra echo done here so we get a +# \n-terminated string passed to sed. +# +relativize() +{ + echo `if [ $SRCDIR_IS_LIBTIFF = no ]; then + (for i do + case "$i" in + /*|-l*) echo "$i" ;; + -[LR]) ;; # XXX??? + -[LR]/*) echo "$i" ;; + -L*) echo "$i" | sed 's;^-L;-L../;' ;; + -R*) echo "$i" | sed 's;^-R;-R../;' ;; + *) echo "../$i" ;; + esac + done) | tr '\012' ' ' + else + echo "$@" + fi` | sed -e 's;[ ][ ]*$;;' -e 's;/[.]$;;' +} +# +# Generate a list of compiler include options, +# prepending ``../'' to any relative pathnames. +# +makeIncArgs() +{ + (for i do + case "$i" in + /*) echo "-I$i" ;; + *) + if [ $SRCDIR_IS_LIBTIFF = yes ]; then + echo "-I$i" + else + echo "-I../$i" + fi ;; + esac + done) | tr '\012' ' ' +} + +# +# Setup parameters needed below. +# +if [ $SRCDIR_IS_LIBTIFF = yes ]; then + CONFIGDIR="." + LIBSRCDIR="${SRCDIR}" +else + CONFIGDIR=".." + LIBSRCDIR=`relativize ${SRCDIR}`/libtiff +fi + +# NB: these should be sorted alphabetically +cat>>confsed< $F.new + $RM confx; $SED '/DATE:/d' $F.new >confx + $RM confy; $SED '/DATE:/d' $F >confy 2>/dev/null + if cmp -s confx confy >/dev/null 2>&1; then + $RM $F.new + else + Note "Creating $F from $SRCDIR/$F.in" + $RM $F; mv $F.new $F; $CHMOD 444 $F + fi + else + Note "Creating $F from $SRCDIR/$F.in" + if $SED -f confsed $SRCDIR/$F.in >$F.new; then + $RM $F; mv $F.new $F; $CHMOD 444 $F + else + cat 1>&2 <$F.new + +failed. Aborting without cleaning up files so you can take a look... +EOF + exit 1 + fi + fi + done +} + +# +# port/install.sh is the SGI install program emulator script. +# +CONF_FILES="Makefile" +if [ $SRCDIR_IS_LIBTIFF != yes ] ; then + CONF_FILES="$CONF_FILES + libtiff/Makefile + man/Makefile + tools/Makefile + port/install.sh + " + test $HTML = yes && CONF_FILES="$CONF_FILES html/Makefile" + test $PORT = yes && CONF_FILES="$CONF_FILES port/Makefile" +fi +SedConfigFiles $CONF_FILES + +Note "Done." + +$RM $JUNK +exit 0 diff --git a/contrib/acorn/Makefile b/contrib/acorn/Makefile new file mode 100755 index 0000000..28ac425 --- /dev/null +++ b/contrib/acorn/Makefile @@ -0,0 +1,165 @@ +# Project: LibTIFF + + +# Toolflags: +CCflags = -c -zo -ffah -depend !Depend -IC: +C++flags = -c -depend !Depend -IC: -throwback +Linkflags = -aif -c++ -o $@ +DrLinkflags = -nounused -aif -c++ -o $@ +ObjAsmflags = -throwback -NoCache -depend !Depend +CMHGflags = +LibFileflags = -c -o $@ +Squeezeflags = -o $@ + + +# Final targets: +@.o.LIBTIFF: \ + @.o.tif_acorn \ + @.o.tif_aux \ + @.o.tif_close \ + @.o.tif_codec \ + @.o.tif_compress \ + @.o.tif_dir \ + @.o.tif_dirinfo \ + @.o.tif_dirread \ + @.o.tif_dirwrite \ + @.o.tif_dumpmode \ + @.o.tif_error \ + @.o.tif_fax3 \ + @.o.tif_flush \ + @.o.tif_getimage \ + @.o.tif_jpeg \ + @.o.tif_lzw \ + @.o.tif_next \ + @.o.tif_open \ + @.o.tif_packbits \ + @.o.tif_predict \ + @.o.tif_print \ + @.o.tif_read \ + @.o.tif_strip \ + @.o.tif_swab \ + @.o.tif_thunder \ + @.o.tif_tile \ + @.o.tif_version \ + @.o.tif_warning \ + @.o.tif_write \ + @.o.tif_zip \ + @.o.tif_fax3sm \ + @.h.version + LibFile $(LibFileflags) \ + @.o.tif_acorn \ + @.o.tif_aux \ + @.o.tif_close \ + @.o.tif_codec \ + @.o.tif_compress \ + @.o.tif_dir \ + @.o.tif_dirinfo \ + @.o.tif_dirread \ + @.o.tif_dirwrite \ + @.o.tif_dumpmode \ + @.o.tif_error \ + @.o.tif_fax3 \ + @.o.tif_flush \ + @.o.tif_getimage \ + @.o.tif_jpeg \ + @.o.tif_lzw \ + @.o.tif_next \ + @.o.tif_open \ + @.o.tif_packbits \ + @.o.tif_predict \ + @.o.tif_print \ + @.o.tif_read \ + @.o.tif_strip \ + @.o.tif_swab \ + @.o.tif_thunder \ + @.o.tif_tile \ + @.o.tif_version \ + @.o.tif_warning \ + @.o.tif_write \ + @.o.tif_zip \ + @.o.tif_fax3sm + + +# User-editable dependencies: +@.mkversion: @.o.mkversion C:o.Stubs + Link $(linkflags) @.o.mkversion C:o.Stubs +@.h.version: @.VERSION @.mkversion + .mkversion -v @.VERSION -a @.tiff/alpha @.h.version +@.mkg3states: @.o.mkg3states @.o.getopt C:o.Stubs + link $(linkflags) @.o.mkg3states C:o.Stubs @.o.getopt +@.c.tif_fax3sm: @.mkg3states + .mkg3states -c const @.c.tif_fax3sm + +# Static dependencies: +@.o.tif_acorn: @.c.tif_acorn + cc $(ccflags) -o @.o.tif_acorn @.c.tif_acorn +@.o.tif_aux: @.c.tif_aux + cc $(ccflags) -o @.o.tif_aux @.c.tif_aux +@.o.tif_close: @.c.tif_close + cc $(ccflags) -o @.o.tif_close @.c.tif_close +@.o.tif_codec: @.c.tif_codec + cc $(ccflags) -o @.o.tif_codec @.c.tif_codec +@.o.tif_compress: @.c.tif_compress + cc $(ccflags) -o @.o.tif_compress @.c.tif_compress +@.o.tif_dir: @.c.tif_dir + cc $(ccflags) -o @.o.tif_dir @.c.tif_dir +@.o.tif_dirinfo: @.c.tif_dirinfo + cc $(ccflags) -o @.o.tif_dirinfo @.c.tif_dirinfo +@.o.tif_dirread: @.c.tif_dirread + cc $(ccflags) -o @.o.tif_dirread @.c.tif_dirread +@.o.tif_dirwrite: @.c.tif_dirwrite + cc $(ccflags) -o @.o.tif_dirwrite @.c.tif_dirwrite +@.o.tif_dumpmode: @.c.tif_dumpmode + cc $(ccflags) -o @.o.tif_dumpmode @.c.tif_dumpmode +@.o.tif_error: @.c.tif_error + cc $(ccflags) -o @.o.tif_error @.c.tif_error +@.o.tif_fax3: @.c.tif_fax3 + cc $(ccflags) -o @.o.tif_fax3 @.c.tif_fax3 +@.o.tif_flush: @.c.tif_flush + cc $(ccflags) -o @.o.tif_flush @.c.tif_flush +@.o.tif_getimage: @.c.tif_getimage + cc $(ccflags) -o @.o.tif_getimage @.c.tif_getimage +@.o.tif_jpeg: @.c.tif_jpeg + cc $(ccflags) -o @.o.tif_jpeg @.c.tif_jpeg +@.o.tif_lzw: @.c.tif_lzw + cc $(ccflags) -o @.o.tif_lzw @.c.tif_lzw +@.o.tif_next: @.c.tif_next + cc $(ccflags) -o @.o.tif_next @.c.tif_next +@.o.tif_open: @.c.tif_open + cc $(ccflags) -o @.o.tif_open @.c.tif_open +@.o.tif_packbits: @.c.tif_packbits + cc $(ccflags) -o @.o.tif_packbits @.c.tif_packbits +@.o.tif_predict: @.c.tif_predict + cc $(ccflags) -o @.o.tif_predict @.c.tif_predict +@.o.tif_print: @.c.tif_print + cc $(ccflags) -o @.o.tif_print @.c.tif_print +@.o.tif_read: @.c.tif_read + cc $(ccflags) -o @.o.tif_read @.c.tif_read +@.o.tif_strip: @.c.tif_strip + cc $(ccflags) -o @.o.tif_strip @.c.tif_strip +@.o.tif_swab: @.c.tif_swab + cc $(ccflags) -o @.o.tif_swab @.c.tif_swab +@.o.tif_thunder: @.c.tif_thunder + cc $(ccflags) -o @.o.tif_thunder @.c.tif_thunder +@.o.tif_tile: @.c.tif_tile + cc $(ccflags) -o @.o.tif_tile @.c.tif_tile +@.o.tif_version: @.c.tif_version + cc $(ccflags) -o @.o.tif_version @.c.tif_version +@.o.tif_warning: @.c.tif_warning + cc $(ccflags) -o @.o.tif_warning @.c.tif_warning +@.o.tif_write: @.c.tif_write + cc $(ccflags) -o @.o.tif_write @.c.tif_write +@.o.tif_zip: @.c.tif_zip + cc $(ccflags) -o @.o.tif_zip @.c.tif_zip +@.o.mkg3states: @.c.mkg3states + cc $(ccflags) -o @.o.mkg3states @.c.mkg3states +@.o.getopt: @.c.getopt + cc $(ccflags) -o @.o.getopt @.c.getopt +@.o.mkspans: @.c.mkspans + cc $(ccflags) -o @.o.mkspans @.c.mkspans +@.o.tif_fax3sm: @.c.tif_fax3sm + cc $(ccflags) -o @.o.tif_fax3sm @.c.tif_fax3sm +@.o.mkversion: @.c.mkversion + cc $(ccflags) -o @.o.mkversion @.c.mkversion + +# Dynamic dependencies: diff --git a/contrib/acorn/ReadMe b/contrib/acorn/ReadMe new file mode 100755 index 0000000..c64b287 --- /dev/null +++ b/contrib/acorn/ReadMe @@ -0,0 +1,79 @@ +Building the Software on an Acorn RISC OS system + +The directory contrib/acorn contains support for compiling the library under +Acorn C/C++ under Acorn's RISC OS 3.10 or above. Subsequent pathnames will +use the Acorn format: The full-stop or period character is a pathname +delimeter, and the slash character is not interpreted; the reverse position +from Unix. Thus "libtiff/tif_acorn.c" becomes "libtiff.tif_acorn/c". + +This support was contributed by Peter Greenham. +(peterg@angmulti.demon.co.uk). + +Installing LibTIFF: + +LIBTIFF uses several files which have names longer than the normal RISC OS +maximum of ten characters. This complicates matters. Maybe one day Acorn will +address the problem and implement long filenames properly. Until then this +gets messy, especially as I'm trying to do this with obeyfiles and not have +to include binaries in this distribution. + +First of all, ensure you have Truncate configured on (type *Configure +Truncate On) Although it is, of course, preferable to have long filenames, +LIBTIFF can be installed with short filenames, and it will compile and link +without problems. However, getting it there is more problematic. +contrib.acorn.install is an installation obeyfile which will create a normal +Acorn-style library from the source (ie: with c, h and o folders etc.), but +needs the distribution library to have been unpacked into a location which is +capable of supporting long filenames, even if only temporarily. + +My recommendation, until Acorn address this problem properly, is to use Jason +Tribbeck's LongFilenames , or any other working system that gives you long +filenames, like a nearby NFS server for instance. + +If you are using Longfilenames, even if only temporarily to install LIBTIFF, +unpack the TAR into a RAMDisc which has been longfilenamed (ie: *addlongfs +ram) and then install from there to the hard disk. Unfortunately +Longfilenames seems a bit unhappy about copying a bunch of long-named files +across the same filing system, but is happy going between systems. You'll +need to create a ramdisk of about 2Mb. + +Now you can run the installation script I've supplied (in contrib.acorn), +which will automate the process of installing LIBTIFF as an Acorn-style +library. The syntax is as follows: + +install + +Install will then create and put the library in there. For +example, having used LongFilenames on the RAMDisk and unpacked the library +into there, you can then type: + +Obey RAM::RamDisc0.$.contrib.acorn.install RAM::RamDisc0.$ ADFS::4.$.LIBTIFF + +It doesn't matter if the destination location can cope with long filenames or +not. The filenames will be truncated if necessary (*Configure Truncate On if +you get errors) and all will be well. + +Compiling LibTIFF: + +Once the LibTIFF folder has been created and the files put inside, making the +library should be just a matter of running 'SetVars' to set the appropriate +system variables, then running 'Makefile'. + +OSLib + +OSLib is a comprehensive API for RISC OS machines, written by Jonathan +Coxhead of Acorn Computers (although OSLib is not an official Acorn product). +Using the OSLib SWI veneers produces code which is more compact and more +efficient than code written using _kernel_swi or _swi. The Acorn port of +LibTIFF can take advantage of this if present. Edit the Makefile and go to +the Static dependencies section. The first entry is: + +# Static dependencies: +@.o.tif_acorn: @.c.tif_acorn + cc $(ccflags) -o @.o.tif_acorn @.c.tif_acorn +Change the cc line to: + + cc $(ccflags) -DINCLUDE_OSLIB -o @.o.tif_acorn @.c.tif_acorn + +Remember, however, that OSLib is only recommended for efficiency's sake. It +is not required. diff --git a/contrib/acorn/SetVars b/contrib/acorn/SetVars new file mode 100755 index 0000000..60059e0 --- /dev/null +++ b/contrib/acorn/SetVars @@ -0,0 +1,3 @@ +Set LibTIFF$Dir +Set LibTIFF$Path . +Set C$Path ,LibTIFF: diff --git a/contrib/acorn/cleanlib b/contrib/acorn/cleanlib new file mode 100755 index 0000000..8bb4215 --- /dev/null +++ b/contrib/acorn/cleanlib @@ -0,0 +1,5 @@ +IfThere LibTIFF:o.* THEN Wipe LibTIFF:o.* ~CFR~V +IfThere LibTIFF:c.tif_fax3sm THEN Delete LibTIFF:c.tif_fax3sm +IfThere LibTIFF:mkg3states THEN Delete LibTIFF:mkg3states +IfThere LibTIFF:h.version THEN Delete LibTIFF:h.version +IfThere LibTIFF:mkversion THEN Delete LibTIFF:mkversion diff --git a/contrib/acorn/convert b/contrib/acorn/convert new file mode 100755 index 0000000..9e709c2 --- /dev/null +++ b/contrib/acorn/convert @@ -0,0 +1,175 @@ +RISC OS Conversion log +====================== + +mkversion.c +~~~~~~~~~~~ +The RISC OS command-line does not allow the direct creation of the version.h +file in the proper manner. To remedy this in such a way that the version +header is made at compiletime, I wrote this small program. It is fully +portable, so should work quite happily for any other platform that might need +it. + +msg3states.c +~~~~~~~~~~~~ +Needed getopt.c from the port folder, then compiled and worked fine. + + +tiff.h +~~~~~~ + +====1==== + +The symbol _MIPS_SZLONG, if not defined, causes a compiler error. Fixed by +ensuring it does exist. This looks to me like this wouldn't be an +Acorn-specific problem. The new code fragment is as follows: + +#ifndef _MIPS_SZLONG +#define _MIPS_SZLONG 32 +#endif +#if defined(__alpha) || _MIPS_SZLONG == 64 + + + +tiffcomp.h +~~~~~~~~~~ + +====1==== + +#if !defined(__MWERKS__) && !defined(THINK_C) +#include +#endif + +Acorn also doesn't have this header so: + +#if !defined(__MWERKS__) && !defined(THINK_C) && !defined(__acorn) +#include +#endif + +====2==== + +#ifdef VMS +#include +#include +#else +#include +#endif + +This seems to indicate that fcntl.h is included on all systems except +VMS. Odd, because I've never heard of it before. Sure it's in the ANSI +definition? Anyway, following change: + +#ifdef VMS +#include +#include +#else +#ifndef __acorn +#include +#endif +#endif + +This will probably change when I find out what it wants from fcntl.h! + +====3==== + +#if defined(__MWERKS__) || defined(THINK_C) || defined(applec) +#include +#define BSDTYPES +#endif + +Added RISC OS to above thus: + +#if defined(__MWERKS__) || defined(THINK_C) || defined(applec) || defined(__acorn) +#include +#define BSDTYPES +#endif + +====4==== + +/* + * The library uses the ANSI C/POSIX SEEK_* + * definitions that should be defined in unistd.h + * (except on VMS where they are in stdio.h and + * there is no unistd.h). + */ +#ifndef SEEK_SET +#if !defined(VMS) && !defined (applec) && !defined(THINK_C) && !defined(__MWERKS__) +#include +#endif + +RISC OS is like VMS and Mac in this regard. So changed to: + +/* + * The library uses the ANSI C/POSIX SEEK_* + * definitions that should be defined in unistd.h + * (except on VMS or the Mac or RISC OS, where they are in stdio.h and + * there is no unistd.h). + */ +#ifndef SEEK_SET +#if !defined(VMS) && !defined (applec) && !defined(THINK_C) && !defined(__MWERKS__) && !defined(__acorn) +#include +#endif +#endif + +====5==== + +NB: HAVE_IEEEFP is defined in tiffconf.h, not tiffcomp.h as mentioned +in libtiff.README. (Note written on original port from 3.4beta004) + +Acorn C/C++ claims to accord with IEEE 754, so no change (yet) to +tiffconf.h. + +====6==== + +Unsure about whether this compiler supports inline functions. Will +leave it on for the time being and see if it works! (Likely if +everything else does.) + +... Seems to be OK ... + +====7==== + +Added to the end: + +/* + * osfcn.h is part of C++Lib on Acorn C/C++, and as such can't be used + * on C alone. For that reason, the relevant functions have been + * implemented by myself in tif_acorn.c, and the elements from the header + * included here. + */ + +#ifdef __acorn +#ifdef __cplusplus +#include +#else +#include "kernel.h" +#define O_RDONLY 0 +#define O_WRONLY 1 +#define O_RDWR 2 +#define O_APPEND 8 +#define O_CREAT 0x200 +#define O_TRUNC 0x400 +typedef long off_t; +extern int open(const char *name, int flags, int mode); +extern int close(int fd); +extern int write(int fd, const char *buf, int nbytes); +extern int read(int fd, char *buf, int nbytes); +extern off_t lseek(int fd, off_t offset, int whence); +#endif +#endif + + +=============================================================================== + +tif_acorn.c +~~~~~~~~~~~ + +Created file tif_acorn.c, copied initially from tif_unix.c + +Documented internally where necessary. + +Note that I have implemented the low-level file-handling functions normally +found in osfcn.h in here, and put the header info at the bottom of +tiffcomp.h. This is further documented from a RISC OS perspective inside the +file. + +=============================================================================== diff --git a/contrib/acorn/install b/contrib/acorn/install new file mode 100755 index 0000000..d446306 --- /dev/null +++ b/contrib/acorn/install @@ -0,0 +1,128 @@ +If "%0" = "" Then Error Syntax: install | | +If "%1" = "" Then Error Syntax: install | | +Set LibTiffInstall$Dir %0 +Set LibTiff$Dir %1 +Set Alias$CPY Copy .%%0 .%%1 ~C~DF~NRV +CDir +CDir .c +CDir .h +CDir .o +CPY COPYRIGHT COPYRIGHT +CPY README README +CPY VERSION VERSION +CPY dist.tiff/alpha tiff/alpha +CPY contrib.acorn.SetVars SetVars +CPY contrib.acorn.Makefile Makefile +CPY contrib.acorn.cleanlib cleanlib +CPY port.getopt/c c.getopt +CPY libtiff.mkg3states/c c.mkg3states +CPY libtiff.mkspans/c c.mkspans +CPY libtiff.mkversion/c c.mkversion +CPY libtiff.tif_acorn/c c.tif_acorn +CPY libtiff.tif_aux/c c.tif_aux +CPY libtiff.tif_close/c c.tif_close +CPY libtiff.tif_codec/c c.tif_codec +CPY libtiff.tif_compress/c c.tif_compre +CPY libtiff.tif_dir/c c.tif_dir +CPY libtiff.tif_dirinfo/c c.tif_dirinf +CPY libtiff.tif_dirread/c c.tif_dirrea +CPY libtiff.tif_dirwrite/c c.tif_dirwri +CPY libtiff.tif_dumpmode/c c.tif_dumpmo +CPY libtiff.tif_error/c c.tif_error +CPY libtiff.tif_fax3/c c.tif_fax3 +CPY libtiff.tif_flush/c c.tif_flush +CPY libtiff.tif_getimage/c c.tif_getima +CPY libtiff.tif_jpeg/c c.tif_jpeg +CPY libtiff.tif_lzw/c c.tif_lzw +CPY libtiff.tif_next/c c.tif_next +CPY libtiff.tif_open/c c.tif_open +CPY libtiff.tif_packbits/c c.tif_packbi +CPY libtiff.tif_predict/c c.tif_predic +CPY libtiff.tif_print/c c.tif_print +CPY libtiff.tif_read/c c.tif_read +CPY libtiff.tif_strip/c c.tif_strip +CPY libtiff.tif_swab/c c.tif_swab +CPY libtiff.tif_thunder/c c.tif_thunde +CPY libtiff.tif_tile/c c.tif_tile +CPY libtiff.tif_version/c c.tif_versio +CPY libtiff.tif_warning/c c.tif_warnin +CPY libtiff.tif_write/c c.tif_write +CPY libtiff.tif_zip/c c.tif_zip +CPY libtiff.t4/h h.t4 +CPY libtiff.tiff/h h.tiff +CPY libtiff.tiffcomp/h h.tiffcomp +CPY libtiff.tiffconf/h h.tiffconf +CPY libtiff.tiffio/h h.tiffio +CPY libtiff.tiffiop/h h.tiffiop +CPY libtiff.tif_dir/h h.tif_dir +CPY libtiff.tif_fax3/h h.tif_fax3 +CPY libtiff.tif_predict/h h.tif_predic +SetType .COPYRIGHT Text +SetType .README Text +SetType .VERSION Text +SetType .tiff/alpha Text +SetType .SetVars Obey +SetType .Makefile fe1 +SetType .cleanlib Obey +SetType .c.getopt Text +SetType .c.mkg3states Text +SetType .c.mkspans Text +SetType .c.mkversion Text +SetType .c.tif_acorn Text +SetType .c.tif_aux Text +SetType .c.tif_close Text +SetType .c.tif_codec Text +SetType .c.tif_compre Text +SetType .c.tif_dir Text +SetType .c.tif_dirinf Text +SetType .c.tif_dirrea Text +SetType .c.tif_dirwri Text +SetType .c.tif_dumpmo Text +SetType .c.tif_error Text +SetType .c.tif_fax3 Text +SetType .c.tif_flush Text +SetType .c.tif_getima Text +SetType .c.tif_jpeg Text +SetType .c.tif_lzw Text +SetType .c.tif_next Text +SetType .c.tif_open Text +SetType .c.tif_packbi Text +SetType .c.tif_predic Text +SetType .c.tif_print Text +SetType .c.tif_read Text +SetType .c.tif_strip Text +SetType .c.tif_swab Text +SetType .c.tif_thunde Text +SetType .c.tif_tile Text +SetType .c.tif_versio Text +SetType .c.tif_warnin Text +SetType .c.tif_write Text +SetType .c.tif_zip Text +SetType .h.t4 Text +SetType .h.tiff Text +SetType .h.tiffcomp Text +SetType .h.tiffconf Text +SetType .h.tiffio Text +SetType .h.tiffiop Text +SetType .h.tif_dir Text +SetType .h.tif_fax3 Text +SetType .h.tif_predic Text +Unset Alias$CPY +Unset LibTiffInstall$Dir +| Now attempt to restore longfilename status. If it causes an error, OK. +Set Alias$RN Rename .%%0 .%%1 +Unset LibTiff$Dir +RN c.tif_compre c.tif_compress +RN c.tif_dirinf c.tif_dirinfo +RN c.tif_dirrea c.tif_dirread +RN c.tif_dirwri c.tif_dirwrite +RN c.tif_dumpmo c.tif_dumpmode +RN c.tif_getima c.tif_getimage +RN c.tif_packbi c.tif_packbits +RN c.tif_predic c.tif_predict +RN c.tif_thunde c.tif_thunder +RN c.tif_versio c.tif_version +RN c.tif_warnin c.tif_warning +RN h.tif_predic h.tif_predict +Unset Alias$RN +Echo All done! diff --git a/contrib/addtiffo/Makefile b/contrib/addtiffo/Makefile new file mode 100755 index 0000000..3b42a7c --- /dev/null +++ b/contrib/addtiffo/Makefile @@ -0,0 +1,26 @@ +# +# If libtiff.a is installed in /usr/lib or /usr/local/lib just point +# LIBTIFF_DIR there. It doesn't need a full libtiff tree. +# +LIBTIFF_DIR = ../../libtiff +# +CC = gcc +CFLAGS = -O -I$(LIBTIFF_DIR) +LIBS = $(LIBTIFF_DIR)/libtiff.a -lm + +addtiffo: addtiffo.o tif_overview.o tif_ovrcache.o + $(CXX) $(CFLAGS) addtiffo.o tif_overview.o tif_ovrcache.o \ + $(LIBS) -o addtiffo + + +addtiffo.o: addtiffo.c + $(CC) -c $(CFLAGS) addtiffo.c + +tif_overview.o: tif_overview.c + $(CC) -c $(CFLAGS) tif_overview.c + +tif_ovrcache.o: tif_ovrcache.c + $(CC) -c $(CFLAGS) tif_ovrcache.c + +clean: + rm *.o addtiffo diff --git a/contrib/addtiffo/Makefile.vc b/contrib/addtiffo/Makefile.vc new file mode 100755 index 0000000..2d3103b --- /dev/null +++ b/contrib/addtiffo/Makefile.vc @@ -0,0 +1,27 @@ +# +# If libtiff.a is installed in /usr/lib or /usr/local/lib just point +# LIBTIFF_DIR there. It doesn't need a full libtiff tree. +# +LIBTIFF_DIR = ..\..\libtiff +# +CC = cl.exe +CPPC = cl.exe +CFLAGS = -O -I$(LIBTIFF_DIR) +LIBS = $(LIBTIFF_DIR)\libtiff.lib + +addtiffo: addtiffo.obj tif_overview.obj tif_ovrcache.obj + $(CC) $(CFLAGS) addtiffo.obj tif_overview.obj tif_ovrcache.obj \ + $(LIBS) /Feaddtiffo.exe + + +addtiffo.obj: addtiffo.c + $(CC) -c $(CFLAGS) addtiffo.c + +tif_overview.obj: tif_overview.c + $(CPPC) -c $(CFLAGS) tif_overview.c + +tif_ovrcache.obj: tif_ovrcache.c + $(CPPC) -c $(CFLAGS) tif_ovrcache.c + +clean: + del *.obj addtiffo.exe diff --git a/contrib/addtiffo/addtiffo.c b/contrib/addtiffo/addtiffo.c new file mode 100755 index 0000000..b394a54 --- /dev/null +++ b/contrib/addtiffo/addtiffo.c @@ -0,0 +1,131 @@ +/****************************************************************************** + * $Id: addtiffo.c,v 1.1.1.1 2000/06/24 19:10:17 tshead Exp $ + * + * Project: GeoTIFF Overview Builder + * Purpose: Mainline for building overviews in a TIFF file. + * Author: Frank Warmerdam, warmerda@home.com + * + ****************************************************************************** + * Copyright (c) 1999, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + ****************************************************************************** + * + * $Log: addtiffo.c,v $ + * Revision 1.1.1.1 2000/06/24 19:10:17 tshead + * * Initial import of libtiff-3.5.5 + * + * Revision 1.2 2000/01/28 15:36:38 warmerda + * pass TIFF handle instead of filename to overview builder + * + * Revision 1.1 1999/08/17 01:47:59 warmerda + * New + * + * Revision 1.1 1999/03/12 17:46:32 warmerda + * New + * + * Revision 1.2 1999/02/11 22:27:12 warmerda + * Added multi-sample support + * + * Revision 1.1 1999/02/11 18:12:30 warmerda + * New + */ + +#include +#include +#include "tiffio.h" + +void TIFFBuildOverviews( TIFF *, int, int *, int ); + +/************************************************************************/ +/* main() */ +/************************************************************************/ + +int main( int argc, char ** argv ) + +{ + int anOverviews[100]; + int nOverviewCount = 0; + int bUseSubIFD = 0; + TIFF *hTIFF; + +/* -------------------------------------------------------------------- */ +/* Usage: */ +/* -------------------------------------------------------------------- */ + if( argc < 2 ) + { + printf( "Usage: addtiffo tiff_filename [resolution_reductions]\n" ); + printf( "\n" ); + printf( "Example:\n" ); + printf( " %% addtifo abc.tif 2 4 8 16\n" ); + exit( 1 ); + } + + if( strcmp(argv[1],"-subifd") == 0 ) + { + bUseSubIFD = 1; + argv++; + } + +/* -------------------------------------------------------------------- */ +/* Collect the user requested reduction factors. */ +/* -------------------------------------------------------------------- */ + while( nOverviewCount < argc - 2 && nOverviewCount < 100 ) + { + anOverviews[nOverviewCount] = atoi(argv[nOverviewCount+2]); + nOverviewCount++; + } + +/* -------------------------------------------------------------------- */ +/* Default to four overview levels. It would be nicer if it */ +/* defaulted based on the size of the source image. */ +/* -------------------------------------------------------------------- */ + if( nOverviewCount == 0 ) + { + nOverviewCount = 4; + + anOverviews[0] = 2; + anOverviews[1] = 4; + anOverviews[2] = 8; + anOverviews[3] = 16; + } + +/* -------------------------------------------------------------------- */ +/* Build the overview. */ +/* -------------------------------------------------------------------- */ + hTIFF = TIFFOpen( argv[1], "r+" ); + if( hTIFF == NULL ) + { + fprintf( stderr, "TIFFOpen(%s) failed.\n", argv[1] ); + exit( 1 ); + } + + TIFFBuildOverviews( hTIFF, nOverviewCount, anOverviews, bUseSubIFD ); + + TIFFClose( hTIFF ); + +/* -------------------------------------------------------------------- */ +/* Optionally test for memory leaks. */ +/* -------------------------------------------------------------------- */ +#ifdef DBMALLOC + malloc_dump(1); +#endif + + exit( 0 ); +} diff --git a/contrib/addtiffo/readme b/contrib/addtiffo/readme new file mode 100755 index 0000000..0e142f7 --- /dev/null +++ b/contrib/addtiffo/readme @@ -0,0 +1,145 @@ + addtiffo 1.0 + ============ + +The addtiffo utility is used to add overview pyramids to an existing +TIFF or GeoTIFF file. Some applications can take advantage of these +overviews to accelerate overview display performance of large rasters. + +This release of addtiffo is primarily intended for compatibility testing +with applications, and to see if there is interest in a cleaner release +of the capability ... perhaps incorporation into the libtiff tools +distribution. + +Please feel free to contact me with questions, or problems. + +warmerda@home.com +http://members.home.com/warmerda + + +Usage +----- + +Usage: addtiffo [-subifd] tiff_filename [resolution_reductions] + +Example: + % addtiffo abc.tif 2 4 8 16 + +The numeric arguments are the list of reduction factors to +generate. In this example a 1/2, 1/4 1/8 and 1/16 + + + +Limitations +----------- + +See tif_overview.cpp for up to date details. + + o RawBlockedImage will create temporary files in the current directory + to cache the overviews so it doesn't have to hold them all in memory. + If the application crashes these will not be deleted (*.rbi). + + o Currently only images with bits_per_sample of a multiple of eight + will work. + + o The downsampler currently just takes the top left pixel from the + source rectangle. Eventually sampling options of averaging, mode, and + ``center pixel'' should be offered. + + o The code will attempt to use the same kind of compression, + photometric interpretation, and organization as the source image, but + it doesn't copy geotiff tags to the reduced resolution images. + + o Reduced resolution overviews for multi-sample files will currently + always be generated as PLANARCONFIG_SEPARATE. This could be fixed + reasonable easily if needed to improve compatibility with other + packages. Many don't properly support PLANARCONFIG_SEPARATE. + + o Overviews are always written as appended IFDs, rather than using the + ``tree of tree's'' approach using the SUBIFD tag. I wanted to implement + both, but it isn't currently easy to add a SUBIFD tag to an existing + main tiff IFD with libtiff. I hope to try this again later. + + +TIFF File Tags +-------------- + +The results of running addtiffo on a 1024x1024 tiled greyscale file +with the arguments ``2 4 8 16'' is to add four additional TIFF directories +appended on the file with the SUBFILETYPE flag to 0x1 indicating the extra +items are reduced resolution images. + +The tiffinfo output of such a file might look like this: + +TIFF Directory at offset 0x118008 + Image Width: 1024 Image Length: 1024 + Tile Width: 256 Tile Length: 112 + Bits/Sample: 8 + Compression Scheme: none + Photometric Interpretation: min-is-black + Samples/Pixel: 1 + Planar Configuration: single image plane +TIFF Directory at offset 0x15e1d2 + Subfile Type: reduced-resolution image (1 = 0x1) + Image Width: 512 Image Length: 512 + Tile Width: 256 Tile Length: 112 + Bits/Sample: 8 + Compression Scheme: none + Photometric Interpretation: min-is-black + Samples/Pixel: 1 + Planar Configuration: separate image planes +TIFF Directory at offset 0x1732b8 + Subfile Type: reduced-resolution image (1 = 0x1) + Image Width: 256 Image Length: 256 + Tile Width: 256 Tile Length: 112 + Bits/Sample: 8 + Compression Scheme: none + Photometric Interpretation: min-is-black + Samples/Pixel: 1 + Planar Configuration: separate image planes +TIFF Directory at offset 0x17a366 + Subfile Type: reduced-resolution image (1 = 0x1) + Image Width: 128 Image Length: 128 + Tile Width: 128 Tile Length: 112 + Bits/Sample: 8 + Compression Scheme: none + Photometric Interpretation: min-is-black + Samples/Pixel: 1 + Planar Configuration: separate image planes +TIFF Directory at offset 0x17b40c + Subfile Type: reduced-resolution image (1 = 0x1) + Image Width: 64 Image Length: 64 + Tile Width: 64 Tile Length: 64 + Bits/Sample: 8 + Compression Scheme: none + Photometric Interpretation: min-is-black + Samples/Pixel: 1 + Planar Configuration: separate image planes + + +Building +-------- + +You will need a C, and C++ compiler. You will need to have libtiff already +built and installed. The provided Makefile should work on most Unix systems. +A similar file will be needed for Windows, but is not provided. + +The CFLAGS and LIBS macros in the Makefile will have to be updated to +point to the correct location of the libtiff include files, and library. + + +Credits +------- + + o Intergraph Corporation for partially funding the work. + + o Global Geomatics for partially funding reorganization of the overview + building ability as a separate utility. + + o Orrin Long, and Ed Grissom of Intergraph for explaining what needed to + be done. + + o Max Martinez of Erdas for his discussion of external overviews. + + o Frank Warmerdam for writing the bulk of the code. + + o Sam Leffler since this only exists because of his libtiff. diff --git a/contrib/dbs/Imakefile b/contrib/dbs/Imakefile new file mode 100755 index 0000000..adbf495 --- /dev/null +++ b/contrib/dbs/Imakefile @@ -0,0 +1,12 @@ +# +# Imakefile -- to generate a Makefile, do xmkmf +# + TIFF = ../../libtiff + EXTRA_LIBRARIES = $(TIFF)/libtiff.a + EXTRA_INCLUDES = -I$(TIFF) + +AllTarget(bi gray pal rgb) +NormalProgramTarget(bi,tiff-bi.o,,,) +NormalProgramTarget(gray,tiff-grayscale.o,,,-lm) +NormalProgramTarget(pal,tiff-palette.o,,,) +NormalProgramTarget(rgb,tiff-rgb.o,,,-lm) diff --git a/contrib/dbs/readme b/contrib/dbs/readme new file mode 100755 index 0000000..c108641 --- /dev/null +++ b/contrib/dbs/readme @@ -0,0 +1,7 @@ +Wed May 9 09:11:35 PDT 1990 + +This directory contains programs from Dan Sears +(dbs@decwrl.dec.com). Contact him directly if +you have questions/problems. + + Sam diff --git a/contrib/dbs/tiff-bi.c b/contrib/dbs/tiff-bi.c new file mode 100755 index 0000000..dc1b4ff --- /dev/null +++ b/contrib/dbs/tiff-bi.c @@ -0,0 +1,85 @@ +/* + * tiff-bi.c -- create a Class B (bilevel) TIFF file + * + * Copyright 1990 by Digital Equipment Corporation, Maynard, Massachusetts. + * + * All Rights Reserved + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of Digital not be + * used in advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * + * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#include +#include + +#define WIDTH 512 +#define HEIGHT WIDTH + +typedef unsigned char u_char; + +void +main(argc, argv) + int argc; + char ** argv; +{ + int i; + u_char * scan_line; + TIFF * tif; + + if (argc != 2) { + fprintf(stderr, "Usage: %s tiff-image\n", argv[0]); + exit(0); + } + + if ((tif = TIFFOpen(argv[1], "w")) == NULL) { + fprintf(stderr, "can't open %s as a TIFF file\n", argv[1]); + exit(0); + } + + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, WIDTH); + TIFFSetField(tif, TIFFTAG_IMAGELENGTH, HEIGHT); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 1); + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1); + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_NONE); + + scan_line = (u_char *) malloc(WIDTH / 8); + + for (i = 0; i < (WIDTH / 8) / 2; i++) + scan_line[i] = 0; + + for (i = (WIDTH / 8) / 2; i < (WIDTH / 8); i++) + scan_line[i] = 255; + + for (i = 0; i < HEIGHT / 2; i++) + TIFFWriteScanline(tif, scan_line, i, 0); + + for (i = 0; i < (WIDTH / 8) / 2; i++) + scan_line[i] = 255; + + for (i = (WIDTH / 8) / 2; i < (WIDTH / 8); i++) + scan_line[i] = 0; + + for (i = HEIGHT / 2; i < HEIGHT; i++) + TIFFWriteScanline(tif, scan_line, i, 0); + + free(scan_line); + TIFFClose(tif); + exit(0); +} diff --git a/contrib/dbs/tiff-grayscale.c b/contrib/dbs/tiff-grayscale.c new file mode 100755 index 0000000..73f406d --- /dev/null +++ b/contrib/dbs/tiff-grayscale.c @@ -0,0 +1,141 @@ +/* + * tiff-grayscale.c -- create a Class G (grayscale) TIFF file + * with a gray response curve in linear optical density + * + * Copyright 1990 by Digital Equipment Corporation, Maynard, Massachusetts. + * + * All Rights Reserved + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of Digital not be + * used in advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * + * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#include +#include +#include + +#define WIDTH 512 +#define HEIGHT WIDTH + +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned long u_long; + +char * programName; +void Usage(); + +void +main(argc, argv) + int argc; + char ** argv; +{ + int bits_per_pixel, cmsize, i, j, k, + gray_index, chunk_size, nchunks; + u_char * scan_line; + u_short * gray; + u_long refblackwhite[2*1]; + TIFF * tif; + + programName = argv[0]; + + if (argc != 4) + Usage(); + + if (!strcmp(argv[1], "-depth")) + bits_per_pixel = atoi(argv[2]); + else + Usage(); + + switch (bits_per_pixel) { + case 8: + nchunks = 16; + chunk_size = 32; + break; + case 4: + nchunks = 4; + chunk_size = 128; + break; + case 2: + nchunks = 2; + chunk_size = 256; + break; + default: + Usage(); + } + + cmsize = nchunks * nchunks; + gray = (u_short *) malloc(cmsize * sizeof(u_short)); + + gray[0] = 3000; + for (i = 1; i < cmsize; i++) + gray[i] = (u_short) (-log10((double) i / (cmsize - 1)) * 1000); + + refblackwhite[0] = 0; + refblackwhite[0] = (1L< +#include + +#define WIDTH 512 +#define HEIGHT WIDTH +#define SCALE(x) ((x) * 257L) + +typedef unsigned char u_char; +typedef unsigned short u_short; + +char * programName; +void Usage(); + +void +main(argc, argv) + int argc; + char ** argv; +{ + int bits_per_pixel, cmsize, i, j, k, + cmap_index, chunk_size, nchunks; + u_char * scan_line; + u_short *red, *green, *blue; + TIFF * tif; + + programName = argv[0]; + + if (argc != 4) + Usage(); + + if (!strcmp(argv[1], "-depth")) + bits_per_pixel = atoi(argv[2]); + else + Usage(); + + switch (bits_per_pixel) { + case 8: + nchunks = 16; + chunk_size = 32; + break; + case 4: + nchunks = 4; + chunk_size = 128; + break; + case 2: + nchunks = 2; + chunk_size = 256; + break; + case 1: + nchunks = 2; + chunk_size = 256; + break; + default: + Usage(); + } + + if (bits_per_pixel != 1) { + cmsize = nchunks * nchunks; + } else { + cmsize = 2; + } + red = (u_short *) malloc(cmsize * sizeof(u_short)); + green = (u_short *) malloc(cmsize * sizeof(u_short)); + blue = (u_short *) malloc(cmsize * sizeof(u_short)); + + switch (bits_per_pixel) { + case 8: + for (i = 0; i < cmsize; i++) { + if (i < 32) + red[i] = 0; + else if (i < 64) + red[i] = SCALE(36); + else if (i < 96) + red[i] = SCALE(73); + else if (i < 128) + red[i] = SCALE(109); + else if (i < 160) + red[i] = SCALE(146); + else if (i < 192) + red[i] = SCALE(182); + else if (i < 224) + red[i] = SCALE(219); + else if (i < 256) + red[i] = SCALE(255); + + if ((i % 32) < 4) + green[i] = 0; + else if (i < 8) + green[i] = SCALE(36); + else if ((i % 32) < 12) + green[i] = SCALE(73); + else if ((i % 32) < 16) + green[i] = SCALE(109); + else if ((i % 32) < 20) + green[i] = SCALE(146); + else if ((i % 32) < 24) + green[i] = SCALE(182); + else if ((i % 32) < 28) + green[i] = SCALE(219); + else if ((i % 32) < 32) + green[i] = SCALE(255); + + if ((i % 4) == 0) + blue[i] = SCALE(0); + else if ((i % 4) == 1) + blue[i] = SCALE(85); + else if ((i % 4) == 2) + blue[i] = SCALE(170); + else if ((i % 4) == 3) + blue[i] = SCALE(255); + } + break; + case 4: + red[0] = SCALE(255); + green[0] = 0; + blue[0] = 0; + + red[1] = 0; + green[1] = SCALE(255); + blue[1] = 0; + + red[2] = 0; + green[2] = 0; + blue[2] = SCALE(255); + + red[3] = SCALE(255); + green[3] = SCALE(255); + blue[3] = SCALE(255); + + red[4] = 0; + green[4] = SCALE(255); + blue[4] = SCALE(255); + + red[5] = SCALE(255); + green[5] = 0; + blue[5] = SCALE(255); + + red[6] = SCALE(255); + green[6] = SCALE(255); + blue[6] = 0; + + red[7] = 0; + green[7] = 0; + blue[7] = 0; + + red[8] = SCALE(176); + green[8] = SCALE(224); + blue[8] = SCALE(230); + red[9] = SCALE(100); + green[9] = SCALE(149); + blue[9] = SCALE(237); + red[10] = SCALE(46); + green[10] = SCALE(139); + blue[10] = SCALE(87); + red[11] = SCALE(160); + green[11] = SCALE(82); + blue[11] = SCALE(45); + red[12] = SCALE(238); + green[12] = SCALE(130); + blue[12] = SCALE(238); + red[13] = SCALE(176); + green[13] = SCALE(48); + blue[13] = SCALE(96); + red[14] = SCALE(50); + green[14] = SCALE(205); + blue[14] = SCALE(50); + red[15] = SCALE(240); + green[15] = SCALE(152); + blue[15] = SCALE(35); + break; + case 2: + red[0] = SCALE(255); + green[0] = 0; + blue[0] = 0; + + red[1] = 0; + green[1] = SCALE(255); + blue[1] = 0; + + red[2] = 0; + green[2] = 0; + blue[2] = SCALE(255); + red[3] = SCALE(255); + green[3] = SCALE(255); + blue[3] = SCALE(255); + break; + case 1: + red[0] = 0; + green[0] = 0; + blue[0] = 0; + + red[1] = SCALE(255); + green[1] = SCALE(255); + blue[1] = SCALE(255); + break; + } + + if ((tif = TIFFOpen(argv[3], "w")) == NULL) { + fprintf(stderr, "can't open %s as a TIFF file\n", argv[3]); + exit(0); + } + + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, WIDTH); + TIFFSetField(tif, TIFFTAG_IMAGELENGTH, HEIGHT); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bits_per_pixel); + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_PALETTE); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1); + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_NONE); + TIFFSetField(tif, TIFFTAG_COLORMAP, red, green, blue); + + scan_line = (u_char *) malloc(WIDTH / (8 / bits_per_pixel)); + + for (i = 0; i < HEIGHT; i++) { + for (j = 0, k = 0; j < WIDTH;) { + cmap_index = (j / chunk_size) + ((i / chunk_size) * nchunks); + + switch (bits_per_pixel) { + case 8: + scan_line[k++] = cmap_index; + j++; + break; + case 4: + scan_line[k++] = (cmap_index << 4) + cmap_index; + j += 2; + break; + case 2: + scan_line[k++] = (cmap_index << 6) + (cmap_index << 4) + + (cmap_index << 2) + cmap_index; + j += 4; + break; + case 1: + scan_line[k++] = + ((j / chunk_size) == (i / chunk_size)) ? 0x00 : 0xff; + j += 8; + break; + } + } + TIFFWriteScanline(tif, scan_line, i, 0); + } + + free(scan_line); + TIFFClose(tif); + exit(0); +} + +void +Usage() +{ + fprintf(stderr, "Usage: %s -depth (8 | 4 | 2 | 1) tiff-image\n", programName); + exit(0); +} diff --git a/contrib/dbs/tiff-rgb.c b/contrib/dbs/tiff-rgb.c new file mode 100755 index 0000000..fd12c07 --- /dev/null +++ b/contrib/dbs/tiff-rgb.c @@ -0,0 +1,196 @@ +/* + * tiff-rgb.c -- create a 24-bit Class R (rgb) TIFF file + * + * Copyright 1990 by Digital Equipment Corporation, Maynard, Massachusetts. + * + * All Rights Reserved + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of Digital not be + * used in advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * + * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#include +#include +#include + +#define ROUND(x) (u_short) ((x) + 0.5) +#define CMSIZE 256 +#define WIDTH 525 +#define HEIGHT 512 +#define TIFF_GAMMA 2.2 + +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned long u_long; + +void Usage(); +char * programName; + +void +main(argc, argv) + int argc; + char ** argv; +{ + char * input_file; + double image_gamma; + int i, j; + TIFF * tif; + u_char * scan_line; + u_short red[CMSIZE], green[CMSIZE], blue[CMSIZE]; + u_long refblackwhite[2*3]; + + programName = argv[0]; + + switch (argc) { + case 2: + image_gamma = TIFF_GAMMA; + input_file = argv[1]; + break; + case 4: + if (!strcmp(argv[1], "-gamma")) { + image_gamma = atof(argv[2]); + input_file = argv[3]; + } else + Usage(); + break; + default: + Usage(); + } + + for (i = 0; i < CMSIZE; i++) { + if (i == 0) + red[i] = green[i] = blue[i] = 0; + else { + red[i] = ROUND((pow(i / 255.0, 1.0 / image_gamma) * 65535.0)); + green[i] = ROUND((pow(i / 255.0, 1.0 / image_gamma) * 65535.0)); + blue[i] = ROUND((pow(i / 255.0, 1.0 / image_gamma) * 65535.0)); + } + } + refblackwhite[0] = 0; refblackwhite[1] = 255; + refblackwhite[2] = 0; refblackwhite[3] = 255; + refblackwhite[4] = 0; refblackwhite[5] = 255; + + if ((tif = TIFFOpen(input_file, "w")) == NULL) { + fprintf(stderr, "can't open %s as a TIFF file\n", input_file); + exit(0); + } + + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, WIDTH); + TIFFSetField(tif, TIFFTAG_IMAGELENGTH, HEIGHT); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3); + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1); + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_NONE); +#ifdef notdef + TIFFSetField(tif, TIFFTAG_WHITEPOINT, whitex, whitey); + TIFFSetField(tif, TIFFTAG_PRIMARYCHROMATICITIES, primaries); +#endif + TIFFSetField(tif, TIFFTAG_REFERENCEBLACKWHITE, refblackwhite); + TIFFSetField(tif, TIFFTAG_TRANSFERFUNCTION, red, green, blue); + + scan_line = (u_char *) malloc(WIDTH * 3); + + for (i = 0; i < 255; i++) { + for (j = 0; j < 75; j++) { + scan_line[j * 3] = 255; + scan_line[(j * 3) + 1] = 255 - i; + scan_line[(j * 3) + 2] = 255 - i; + } + for (j = 75; j < 150; j++) { + scan_line[j * 3] = 255 - i; + scan_line[(j * 3) + 1] = 255; + scan_line[(j * 3) + 2] = 255 - i; + } + for (j = 150; j < 225; j++) { + scan_line[j * 3] = 255 - i; + scan_line[(j * 3) + 1] = 255 - i; + scan_line[(j * 3) + 2] = 255; + } + for (j = 225; j < 300; j++) { + scan_line[j * 3] = (i - 1) / 2; + scan_line[(j * 3) + 1] = (i - 1) / 2; + scan_line[(j * 3) + 2] = (i - 1) / 2; + } + for (j = 300; j < 375; j++) { + scan_line[j * 3] = 255 - i; + scan_line[(j * 3) + 1] = 255; + scan_line[(j * 3) + 2] = 255; + } + for (j = 375; j < 450; j++) { + scan_line[j * 3] = 255; + scan_line[(j * 3) + 1] = 255 - i; + scan_line[(j * 3) + 2] = 255; + } + for (j = 450; j < 525; j++) { + scan_line[j * 3] = 255; + scan_line[(j * 3) + 1] = 255; + scan_line[(j * 3) + 2] = 255 - i; + } + TIFFWriteScanline(tif, scan_line, i, 0); + } + for (i = 255; i < 512; i++) { + for (j = 0; j < 75; j++) { + scan_line[j * 3] = i; + scan_line[(j * 3) + 1] = 0; + scan_line[(j * 3) + 2] = 0; + } + for (j = 75; j < 150; j++) { + scan_line[j * 3] = 0; + scan_line[(j * 3) + 1] = i; + scan_line[(j * 3) + 2] = 0; + } + for (j = 150; j < 225; j++) { + scan_line[j * 3] = 0; + scan_line[(j * 3) + 1] = 0; + scan_line[(j * 3) + 2] = i; + } + for (j = 225; j < 300; j++) { + scan_line[j * 3] = (i - 1) / 2; + scan_line[(j * 3) + 1] = (i - 1) / 2; + scan_line[(j * 3) + 2] = (i - 1) / 2; + } + for (j = 300; j < 375; j++) { + scan_line[j * 3] = 0; + scan_line[(j * 3) + 1] = i; + scan_line[(j * 3) + 2] = i; + } + for (j = 375; j < 450; j++) { + scan_line[j * 3] = i; + scan_line[(j * 3) + 1] = 0; + scan_line[(j * 3) + 2] = i; + } + for (j = 450; j < 525; j++) { + scan_line[j * 3] = i; + scan_line[(j * 3) + 1] = i; + scan_line[(j * 3) + 2] = 0; + } + TIFFWriteScanline(tif, scan_line, i, 0); + } + + free(scan_line); + TIFFClose(tif); + exit(0); +} + +void +Usage() +{ + fprintf(stderr, "Usage: %s -gamma gamma tiff-image\n", programName); + exit(0); +} diff --git a/contrib/dbs/xtiff/Imakefile b/contrib/dbs/xtiff/Imakefile new file mode 100755 index 0000000..975833b --- /dev/null +++ b/contrib/dbs/xtiff/Imakefile @@ -0,0 +1,17 @@ +# +# Imakefile -- to generate a Makefile for xtiff, use: +# /usr/local/X11/mit/config/imake \ +# -I/usr/local/X11/mit/config \ +# -DTOPDIR=/usr/local/X11/mit \ +# -DCURDIR=/usr/local/X11/mit \ +# -DDESTDIR=/usr/local/X11/mit +# + + SYS_LIBRARIES = -lm + LOCAL_LIBRARIES = XawClientLibs + DEPLIBS = XawClientDepLibs + TIFF = ../../../libtiff + EXTRA_LIBRARIES = $(TIFF)/libtiff.so -lm + EXTRA_INCLUDES = -I$(TIFF) + +SimpleProgramTarget(xtiff) diff --git a/contrib/dbs/xtiff/patchlevel.h b/contrib/dbs/xtiff/patchlevel.h new file mode 100755 index 0000000..1ef9ed3 --- /dev/null +++ b/contrib/dbs/xtiff/patchlevel.h @@ -0,0 +1 @@ +#define PATCHLEVEL 0 diff --git a/contrib/dbs/xtiff/readme b/contrib/dbs/xtiff/readme new file mode 100755 index 0000000..9e0c3fd --- /dev/null +++ b/contrib/dbs/xtiff/readme @@ -0,0 +1,6 @@ +xtiff 2.0 + +xtiff is a tool for viewing a TIFF file in an X window. It was written to +handle as many different kinds of TIFF files as possible while remaining +simple, portable and efficient. xtiff requires X11 R4, the Athena Widgets +and Sam Leffler's libtiff package (which can be found on ucbvax.berkeley.edu). diff --git a/contrib/dbs/xtiff/xtiff.c b/contrib/dbs/xtiff/xtiff.c new file mode 100755 index 0000000..8fd1f39 --- /dev/null +++ b/contrib/dbs/xtiff/xtiff.c @@ -0,0 +1,1275 @@ +/* + * xtiff - view a TIFF file in an X window + * + * Dan Sears + * Chris Sears + * + * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts. + * + * All Rights Reserved + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of Digital not be + * used in advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * + * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + * + * Revision 1.0 90/05/07 + * Initial release. + * Revision 2.0 90/12/20 + * Converted to use the Athena Widgets and the Xt Intrinsics. + * + * Notes: + * + * According to the TIFF 5.0 Specification, it is possible to have + * both a TIFFTAG_COLORMAP and a TIFFTAG_COLORRESPONSECURVE. This + * doesn't make sense since a TIFFTAG_COLORMAP is 16 bits wide and + * a TIFFTAG_COLORRESPONSECURVE is tfBitsPerSample bits wide for each + * channel. This is probably a bug in the specification. + * In this case, TIFFTAG_COLORRESPONSECURVE is ignored. + * This might make sense if TIFFTAG_COLORMAP was 8 bits wide. + * + * TIFFTAG_COLORMAP is often incorrectly written as ranging from + * 0 to 255 rather than from 0 to 65535. CheckAndCorrectColormap() + * takes care of this. + * + * Only ORIENTATION_TOPLEFT is supported correctly. This is the + * default TIFF and X orientation. Other orientations will be + * displayed incorrectly. + * + * There is no support for or use of 3/3/2 DirectColor visuals. + * TIFFTAG_MINSAMPLEVALUE and TIFFTAG_MAXSAMPLEVALUE are not supported. + * + * Only TIFFTAG_BITSPERSAMPLE values that are 1, 2, 4 or 8 are supported. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define XK_MISCELLANY +#include +#include "xtifficon.h" + +#define TIFF_GAMMA "2.2" /* default gamma from the TIFF 5.0 spec */ +#define ROUND(x) (u_short) ((x) + 0.5) +#define SCALE(x, s) (((x) * 65535L) / (s)) +#define MCHECK(m) if (!m) { fprintf(stderr, "malloc failed\n"); exit(0); } +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#define VIEWPORT_WIDTH 700 +#define VIEWPORT_HEIGHT 500 +#define KEY_TRANSLATE 20 + +#ifdef __STDC__ +#define PP(args) args +#else +#define PP(args) () +#endif + +void main PP((int argc, char **argv)); +void OpenTIFFFile PP((void)); +void GetTIFFHeader PP((void)); +void SetNameLabel PP((void)); +void CheckAndCorrectColormap PP((void)); +void SimpleGammaCorrection PP((void)); +void GetVisual PP((void)); +Boolean SearchVisualList PP((int image_depth, + int visual_class, Visual **visual)); +void GetTIFFImage PP((void)); +void CreateXImage PP((void)); +XtCallbackProc SelectProc PP((Widget w, caddr_t unused_1, caddr_t unused_2)); +void QuitProc PP((void)); +void NextProc PP((void)); +void PreviousProc PP((void)); +void PageProc PP((int direction)); +void EventProc PP((Widget widget, caddr_t unused, XEvent *event)); +void ResizeProc PP((void)); +int XTiffErrorHandler PP((Display *display, XErrorEvent *error_event)); +void Usage PP((void)); + +int xtVersion = XtSpecificationRelease; /* xtiff depends on R4 or higher */ + +/* + * Xt data structures + */ +Widget shellWidget, formWidget, listWidget, labelWidget, imageWidget; + +enum { ButtonQuit = 0, ButtonPreviousPage = 1, ButtonNextPage = 2 }; + +String buttonStrings[] = { "Quit", "Previous", "Next" }; + +static XrmOptionDescRec shellOptions[] = { + { "-help", "*help", XrmoptionNoArg, (caddr_t) "True" }, + { "-gamma", "*gamma", XrmoptionSepArg, NULL }, + { "-usePixmap", "*usePixmap", XrmoptionSepArg, NULL }, + { "-viewportWidth", "*viewportWidth", XrmoptionSepArg, NULL }, + { "-viewportHeight", "*viewportHeight", XrmoptionSepArg, NULL }, + { "-translate", "*translate", XrmoptionSepArg, NULL }, + { "-verbose", "*verbose", XrmoptionSepArg, NULL } +}; + +typedef struct { + Boolean help; + float gamma; + Boolean usePixmap; + int viewportWidth; + int viewportHeight; + int translate; + Boolean verbose; +} AppData, *AppDataPtr; + +AppData appData; + +XtResource clientResources[] = { + { + "help", XtCBoolean, XtRBoolean, sizeof(Boolean), + XtOffset(AppDataPtr, help), XtRImmediate, (XtPointer) False + }, { + "gamma", "Gamma", XtRFloat, sizeof(float), + XtOffset(AppDataPtr, gamma), XtRString, (XtPointer) TIFF_GAMMA + }, { + "usePixmap", "UsePixmap", XtRBoolean, sizeof(Boolean), + XtOffset(AppDataPtr, usePixmap), XtRImmediate, (XtPointer) True + }, { + "viewportWidth", "ViewportWidth", XtRInt, sizeof(int), + XtOffset(AppDataPtr, viewportWidth), XtRImmediate, + (XtPointer) VIEWPORT_WIDTH + }, { + "viewportHeight", "ViewportHeight", XtRInt, sizeof(int), + XtOffset(AppDataPtr, viewportHeight), XtRImmediate, + (XtPointer) VIEWPORT_HEIGHT + }, { + "translate", "Translate", XtRInt, sizeof(int), + XtOffset(AppDataPtr, translate), XtRImmediate, (XtPointer) KEY_TRANSLATE + }, { + "verbose", "Verbose", XtRBoolean, sizeof(Boolean), + XtOffset(AppDataPtr, verbose), XtRImmediate, (XtPointer) True + } +}; + +Arg formArgs[] = { + { XtNresizable, True } +}; + +Arg listArgs[] = { + { XtNresizable, False }, + { XtNborderWidth, 0 }, + { XtNdefaultColumns, 3 }, + { XtNforceColumns, True }, + { XtNlist, (int) buttonStrings }, + { XtNnumberStrings, XtNumber(buttonStrings) }, + { XtNtop, XtChainTop }, + { XtNleft, XtChainLeft }, + { XtNbottom, XtChainTop }, + { XtNright, XtChainLeft } +}; + +Arg labelArgs[] = { + { XtNresizable, False }, + { XtNwidth, 200 }, + { XtNborderWidth, 0 }, + { XtNjustify, XtJustifyLeft }, + { XtNtop, XtChainTop }, + { XtNleft, XtChainLeft }, + { XtNbottom, XtChainTop }, + { XtNright, XtChainLeft } +}; + +Arg imageArgs[] = { + { XtNresizable, True }, + { XtNborderWidth, 0 }, + { XtNtop, XtChainTop }, + { XtNleft, XtChainLeft }, + { XtNbottom, XtChainTop }, + { XtNright, XtChainLeft } +}; + +XtActionsRec actionsTable[] = { + { "quit", QuitProc }, + { "next", NextProc }, + { "previous", PreviousProc }, + { "notifyresize", ResizeProc } +}; + +char translationsTable[] = "q: quit() \n \ + Q: quit() \n \ + WM_PROTOCOLS: quit()\n \ + p: previous() \n \ + P: previous() \n \ + n: next() \n \ + N: next() \n \ + : notifyresize()"; + +/* + * X data structures + */ +Colormap xColormap; +Display * xDisplay; +Pixmap xImagePixmap; +Visual * xVisual; +XImage * xImage; +GC xWinGc; +int xImageDepth, xScreen, xRedMask, xGreenMask, xBlueMask, + xOffset = 0, yOffset = 0, grabX = -1, grabY = -1; +u_char basePixel = 0; + +/* + * TIFF data structures + */ +TIFF * tfFile = NULL; +u_long tfImageWidth, tfImageHeight; +u_short tfBitsPerSample, tfSamplesPerPixel, tfPlanarConfiguration, + tfPhotometricInterpretation, tfGrayResponseUnit, + tfImageDepth, tfBytesPerRow; +int tfDirectory = 0, tfMultiPage = False; +double tfUnitMap, tfGrayResponseUnitMap[] = { + -1, -10, -100, -1000, -10000, -100000 + }; + +/* + * display data structures + */ +double *dRed, *dGreen, *dBlue; + +/* + * shared data structures + */ +u_short * redMap = NULL, *greenMap = NULL, *blueMap = NULL, + *grayMap = NULL, colormapSize; +u_char * imageMemory; +char * fileName; + +void +main(argc, argv) + int argc; + char ** argv; +{ + XSetWindowAttributes window_attributes; + Widget widget_list[3]; + Arg args[5]; + + setbuf(stdout, NULL); setbuf(stderr, NULL); + + shellWidget = XtInitialize(argv[0], "XTiff", shellOptions, + XtNumber(shellOptions), &argc, argv); + + XSetErrorHandler(XTiffErrorHandler); + + XtGetApplicationResources(shellWidget, &appData, + (XtResourceList) clientResources, (Cardinal) XtNumber(clientResources), + (ArgList) NULL, (Cardinal) 0); + + if ((argc <= 1) || (argc > 2) || appData.help) + Usage(); + + if (appData.verbose == False) { + TIFFSetErrorHandler(0); + TIFFSetWarningHandler(0); + } + + fileName = argv[1]; + + xDisplay = XtDisplay(shellWidget); + xScreen = DefaultScreen(xDisplay); + + OpenTIFFFile(); + GetTIFFHeader(); + SimpleGammaCorrection(); + GetVisual(); + GetTIFFImage(); + + /* + * Send visual, colormap, depth and iconPixmap to shellWidget. + * Sending the visual to the shell is only possible with the advent of R4. + */ + XtSetArg(args[0], XtNvisual, xVisual); + XtSetArg(args[1], XtNcolormap, xColormap); + XtSetArg(args[2], XtNdepth, + xImageDepth == 1 ? DefaultDepth(xDisplay, xScreen) : xImageDepth); + XtSetArg(args[3], XtNiconPixmap, + XCreateBitmapFromData(xDisplay, RootWindow(xDisplay, xScreen), + xtifficon_bits, xtifficon_width, xtifficon_height)); + XtSetArg(args[4], XtNallowShellResize, True); + XtSetValues(shellWidget, args, 5); + + /* + * widget instance hierarchy + */ + formWidget = XtCreateManagedWidget("form", formWidgetClass, + shellWidget, formArgs, XtNumber(formArgs)); + + widget_list[0] = listWidget = XtCreateWidget("list", + listWidgetClass, formWidget, listArgs, XtNumber(listArgs)); + + widget_list[1] = labelWidget = XtCreateWidget("label", + labelWidgetClass, formWidget, labelArgs, XtNumber(labelArgs)); + + widget_list[2] = imageWidget = XtCreateWidget("image", + widgetClass, formWidget, imageArgs, XtNumber(imageArgs)); + + XtManageChildren(widget_list, XtNumber(widget_list)); + + /* + * initial widget sizes - for small images let xtiff size itself + */ + if (tfImageWidth >= appData.viewportWidth) { + XtSetArg(args[0], XtNwidth, appData.viewportWidth); + XtSetValues(shellWidget, args, 1); + } + if (tfImageHeight >= appData.viewportHeight) { + XtSetArg(args[0], XtNheight, appData.viewportHeight); + XtSetValues(shellWidget, args, 1); + } + + XtSetArg(args[0], XtNwidth, tfImageWidth); + XtSetArg(args[1], XtNheight, tfImageHeight); + XtSetValues(imageWidget, args, 2); + + /* + * formWidget uses these constraints but they are stored in the children. + */ + XtSetArg(args[0], XtNfromVert, listWidget); + XtSetValues(imageWidget, args, 1); + XtSetArg(args[0], XtNfromHoriz, listWidget); + XtSetValues(labelWidget, args, 1); + + SetNameLabel(); + + XtAddCallback(listWidget, XtNcallback, (XtCallbackProc) SelectProc, + (XtPointer) NULL); + + XtAddActions(actionsTable, XtNumber(actionsTable)); + XtSetArg(args[0], XtNtranslations, + XtParseTranslationTable(translationsTable)); + XtSetValues(formWidget, &args[0], 1); + XtSetValues(imageWidget, &args[0], 1); + + /* + * This is intended to be a little faster than going through + * the translation manager. + */ + XtAddEventHandler(imageWidget, ExposureMask | ButtonPressMask + | ButtonReleaseMask | Button1MotionMask | KeyPressMask, + False, EventProc, NULL); + + XtRealizeWidget(shellWidget); + + window_attributes.cursor = XCreateFontCursor(xDisplay, XC_fleur); + XChangeWindowAttributes(xDisplay, XtWindow(imageWidget), + CWCursor, &window_attributes); + + CreateXImage(); + + XtMainLoop(); +} + +void +OpenTIFFFile() +{ + if (tfFile != NULL) + TIFFClose(tfFile); + + if ((tfFile = TIFFOpen(fileName, "r")) == NULL) { + fprintf(appData.verbose ? stderr : stdout, + "xtiff: can't open %s as a TIFF file\n", fileName); + exit(0); + } + + tfMultiPage = (TIFFLastDirectory(tfFile) ? False : True); +} + +void +GetTIFFHeader() +{ + register int i; + + if (!TIFFSetDirectory(tfFile, tfDirectory)) { + fprintf(stderr, "xtiff: can't seek to directory %d in %s\n", + tfDirectory, fileName); + exit(0); + } + + TIFFGetField(tfFile, TIFFTAG_IMAGEWIDTH, &tfImageWidth); + TIFFGetField(tfFile, TIFFTAG_IMAGELENGTH, &tfImageHeight); + + /* + * If the following tags aren't present then use the TIFF defaults. + */ + TIFFGetFieldDefaulted(tfFile, TIFFTAG_BITSPERSAMPLE, &tfBitsPerSample); + TIFFGetFieldDefaulted(tfFile, TIFFTAG_SAMPLESPERPIXEL, &tfSamplesPerPixel); + TIFFGetFieldDefaulted(tfFile, TIFFTAG_PLANARCONFIG, &tfPlanarConfiguration); + TIFFGetFieldDefaulted(tfFile, TIFFTAG_GRAYRESPONSEUNIT, &tfGrayResponseUnit); + + tfUnitMap = tfGrayResponseUnitMap[tfGrayResponseUnit]; + colormapSize = 1 << tfBitsPerSample; + tfImageDepth = tfBitsPerSample * tfSamplesPerPixel; + + dRed = (double *) malloc(colormapSize * sizeof(double)); + dGreen = (double *) malloc(colormapSize * sizeof(double)); + dBlue = (double *) malloc(colormapSize * sizeof(double)); + MCHECK(dRed); MCHECK(dGreen); MCHECK(dBlue); + + /* + * If TIFFTAG_PHOTOMETRIC is not present then assign a reasonable default. + * The TIFF 5.0 specification doesn't give a default. + */ + if (!TIFFGetField(tfFile, TIFFTAG_PHOTOMETRIC, + &tfPhotometricInterpretation)) { + if (tfSamplesPerPixel != 1) + tfPhotometricInterpretation = PHOTOMETRIC_RGB; + else if (tfBitsPerSample == 1) + tfPhotometricInterpretation = PHOTOMETRIC_MINISBLACK; + else if (TIFFGetField(tfFile, TIFFTAG_COLORMAP, + &redMap, &greenMap, &blueMap)) { + tfPhotometricInterpretation = PHOTOMETRIC_PALETTE; + redMap = greenMap = blueMap = NULL; + } else + tfPhotometricInterpretation = PHOTOMETRIC_MINISBLACK; + } + + /* + * Given TIFFTAG_PHOTOMETRIC extract or create the response curves. + */ + switch (tfPhotometricInterpretation) { + case PHOTOMETRIC_RGB: + redMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + greenMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + blueMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + MCHECK(redMap); MCHECK(greenMap); MCHECK(blueMap); + for (i = 0; i < colormapSize; i++) + dRed[i] = dGreen[i] = dBlue[i] + = (double) SCALE(i, colormapSize - 1); + break; + case PHOTOMETRIC_PALETTE: + if (!TIFFGetField(tfFile, TIFFTAG_COLORMAP, + &redMap, &greenMap, &blueMap)) { + redMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + greenMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + blueMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + MCHECK(redMap); MCHECK(greenMap); MCHECK(blueMap); + for (i = 0; i < colormapSize; i++) + dRed[i] = dGreen[i] = dBlue[i] + = (double) SCALE(i, colormapSize - 1); + } else { + CheckAndCorrectColormap(); + for (i = 0; i < colormapSize; i++) { + dRed[i] = (double) redMap[i]; + dGreen[i] = (double) greenMap[i]; + dBlue[i] = (double) blueMap[i]; + } + } + break; + case PHOTOMETRIC_MINISWHITE: + redMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + greenMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + blueMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + MCHECK(redMap); MCHECK(greenMap); MCHECK(blueMap); + for (i = 0; i < colormapSize; i++) + dRed[i] = dGreen[i] = dBlue[i] = (double) + SCALE(colormapSize-1-i, colormapSize-1); + break; + case PHOTOMETRIC_MINISBLACK: + redMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + greenMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + blueMap = (u_short *) malloc(colormapSize * sizeof(u_short)); + MCHECK(redMap); MCHECK(greenMap); MCHECK(blueMap); + for (i = 0; i < colormapSize; i++) + dRed[i] = dGreen[i] = dBlue[i] = (double) SCALE(i, colormapSize-1); + break; + default: + fprintf(stderr, + "xtiff: can't display photometric interpretation type %d\n", + tfPhotometricInterpretation); + exit(0); + } +} + +void +SetNameLabel() +{ + char buffer[BUFSIZ]; + Arg args[1]; + + if (tfMultiPage) + sprintf(buffer, "%s - page %d", fileName, tfDirectory); + else + strcpy(buffer, fileName); + XtSetArg(args[0], XtNlabel, buffer); + XtSetValues(labelWidget, args, 1); +} + +/* + * Many programs get TIFF colormaps wrong. They use 8-bit colormaps instead of + * 16-bit colormaps. This function is a heuristic to detect and correct this. + */ +void +CheckAndCorrectColormap() +{ + register int i; + + for (i = 0; i < colormapSize; i++) + if ((redMap[i] > 255) || (greenMap[i] > 255) || (blueMap[i] > 255)) + return; + + for (i = 0; i < colormapSize; i++) { + redMap[i] = SCALE(redMap[i], 255); + greenMap[i] = SCALE(greenMap[i], 255); + blueMap[i] = SCALE(blueMap[i], 255); + } + TIFFWarning(fileName, "Assuming 8-bit colormap"); +} + +void +SimpleGammaCorrection() +{ + register int i; + register double i_gamma = 1.0 / appData.gamma; + + for (i = 0; i < colormapSize; i++) { + if (((tfPhotometricInterpretation == PHOTOMETRIC_MINISWHITE) + && (i == colormapSize - 1)) + || ((tfPhotometricInterpretation == PHOTOMETRIC_MINISBLACK) + && (i == 0))) + redMap[i] = greenMap[i] = blueMap[i] = 0; + else { + redMap[i] = ROUND((pow(dRed[i] / 65535.0, i_gamma) * 65535.0)); + greenMap[i] = ROUND((pow(dGreen[i] / 65535.0, i_gamma) * 65535.0)); + blueMap[i] = ROUND((pow(dBlue[i] / 65535.0, i_gamma) * 65535.0)); + } + } + + free(dRed); free(dGreen); free(dBlue); +} + +static char* classNames[] = { + "StaticGray", + "GrayScale", + "StaticColor", + "PseudoColor", + "TrueColor", + "DirectColor" +}; + +/* + * Current limitation: the visual is set initially by the first file. + * It cannot be changed. + */ +void +GetVisual() +{ + register XColor *colors = NULL; + register u_long *pixels = NULL; + register int i; + + switch (tfImageDepth) { + /* + * X really wants a 32-bit image with the fourth channel unused, + * but the visual structure thinks it's 24-bit. bitmap_unit is 32. + */ + case 32: + case 24: + if (SearchVisualList(24, DirectColor, &xVisual) == False) { + fprintf(stderr, "xtiff: 24-bit DirectColor visual not available\n"); + exit(0); + } + + colors = (XColor *) malloc(3 * colormapSize * sizeof(XColor)); + MCHECK(colors); + + for (i = 0; i < colormapSize; i++) { + colors[i].pixel = (u_long) (i << 16) + (i << 8) + i; + colors[i].red = redMap[i]; + colors[i].green = greenMap[i]; + colors[i].blue = blueMap[i]; + colors[i].flags = DoRed | DoGreen | DoBlue; + } + + xColormap = XCreateColormap(xDisplay, RootWindow(xDisplay, xScreen), + xVisual, AllocAll); + XStoreColors(xDisplay, xColormap, colors, colormapSize); + break; + case 8: + case 4: + case 2: + /* + * We assume that systems with 24-bit visuals also have 8-bit visuals. + * We don't promote from 8-bit PseudoColor to 24/32 bit DirectColor. + */ + switch (tfPhotometricInterpretation) { + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + if (SearchVisualList((int) tfImageDepth, GrayScale, &xVisual) == True) + break; + case PHOTOMETRIC_PALETTE: + if (SearchVisualList((int) tfImageDepth, PseudoColor, &xVisual) == True) + break; + default: + fprintf(stderr, "xtiff: Unsupported TIFF/X configuration\n"); + exit(0); + } + + colors = (XColor *) malloc(colormapSize * sizeof(XColor)); + MCHECK(colors); + + for (i = 0; i < colormapSize; i++) { + colors[i].pixel = (u_long) i; + colors[i].red = redMap[i]; + colors[i].green = greenMap[i]; + colors[i].blue = blueMap[i]; + colors[i].flags = DoRed | DoGreen | DoBlue; + } + + /* + * xtiff's colormap allocation is private. It does not attempt + * to detect whether any existing colormap entries are suitable + * for its use. This will cause colormap flashing. Furthermore, + * background and foreground are taken from the environment. + * For example, the foreground color may be red when the visual + * is GrayScale. If the colormap is completely populated, + * Xt will not be able to allocate fg and bg. + */ + if (tfImageDepth == 8) + xColormap = XCreateColormap(xDisplay, RootWindow(xDisplay, xScreen), + xVisual, AllocAll); + else { + xColormap = XCreateColormap(xDisplay, RootWindow(xDisplay, xScreen), + xVisual, AllocNone); + pixels = (u_long *) malloc(colormapSize * sizeof(u_long)); + MCHECK(pixels); + (void) XAllocColorCells(xDisplay, xColormap, True, + NULL, 0, pixels, colormapSize); + basePixel = (u_char) pixels[0]; + free(pixels); + } + XStoreColors(xDisplay, xColormap, colors, colormapSize); + break; + case 1: + xImageDepth = 1; + xVisual = DefaultVisual(xDisplay, xScreen); + xColormap = DefaultColormap(xDisplay, xScreen); + break; + default: + fprintf(stderr, "xtiff: unsupported image depth %d\n", tfImageDepth); + exit(0); + } + + if (appData.verbose == True) + fprintf(stderr, "%s: Using %d-bit %s visual.\n", + fileName, xImageDepth, classNames[xVisual->class]); + + if (colors != NULL) + free(colors); + if (grayMap != NULL) + free(grayMap); + if (redMap != NULL) + free(redMap); + if (greenMap != NULL) + free(greenMap); + if (blueMap != NULL) + free(blueMap); + + colors = NULL; grayMap = redMap = greenMap = blueMap = NULL; +} + +/* + * Search for an appropriate visual. Promote where necessary. + * Check to make sure that ENOUGH colormap entries are writeable. + * basePixel was determined when XAllocColorCells() contiguously + * allocated enough entries. basePixel is used below in GetTIFFImage. + */ +Boolean +SearchVisualList(image_depth, visual_class, visual) + int image_depth, visual_class; + Visual **visual; +{ + XVisualInfo template_visual, *visual_list, *vl; + int i, n_visuals; + + template_visual.screen = xScreen; + vl = visual_list = XGetVisualInfo(xDisplay, VisualScreenMask, + &template_visual, &n_visuals); + + if (n_visuals == 0) { + fprintf(stderr, "xtiff: visual list not available\n"); + exit(0); + } + + for (i = 0; i < n_visuals; vl++, i++) { + if ((vl->class == visual_class) && (vl->depth >= image_depth) + && (vl->visual->map_entries >= (1 << vl->depth))) { + *visual = vl->visual; + xImageDepth = vl->depth; + xRedMask = vl->red_mask; + xGreenMask = vl->green_mask; + xBlueMask = vl->blue_mask; + XFree((char *) visual_list); + return True; + } + } + + XFree((char *) visual_list); + return False; +} + +void +GetTIFFImage() +{ + int pixel_map[3], red_shift, green_shift, blue_shift; + register u_char *scan_line, *output_p, *input_p; + register int i, j, s; + + scan_line = (u_char *) malloc(tfBytesPerRow = TIFFScanlineSize(tfFile)); + MCHECK(scan_line); + + if ((tfImageDepth == 32) || (tfImageDepth == 24)) { + output_p = imageMemory = (u_char *) + malloc(tfImageWidth * tfImageHeight * 4); + MCHECK(imageMemory); + + /* + * Handle different color masks for different frame buffers. + */ + if (ImageByteOrder(xDisplay) == LSBFirst) { /* DECstation 5000 */ + red_shift = pixel_map[0] = xRedMask == 0xFF000000 ? 3 + : (xRedMask == 0xFF0000 ? 2 : (xRedMask == 0xFF00 ? 1 : 0)); + green_shift = pixel_map[1] = xGreenMask == 0xFF000000 ? 3 + : (xGreenMask == 0xFF0000 ? 2 : (xGreenMask == 0xFF00 ? 1 : 0)); + blue_shift = pixel_map[2] = xBlueMask == 0xFF000000 ? 3 + : (xBlueMask == 0xFF0000 ? 2 : (xBlueMask == 0xFF00 ? 1 : 0)); + } else { /* Ardent */ + red_shift = pixel_map[0] = xRedMask == 0xFF000000 ? 0 + : (xRedMask == 0xFF0000 ? 1 : (xRedMask == 0xFF00 ? 2 : 3)); + green_shift = pixel_map[0] = xGreenMask == 0xFF000000 ? 0 + : (xGreenMask == 0xFF0000 ? 1 : (xGreenMask == 0xFF00 ? 2 : 3)); + blue_shift = pixel_map[0] = xBlueMask == 0xFF000000 ? 0 + : (xBlueMask == 0xFF0000 ? 1 : (xBlueMask == 0xFF00 ? 2 : 3)); + } + + if (tfPlanarConfiguration == PLANARCONFIG_CONTIG) { + for (i = 0; i < tfImageHeight; i++) { + if (TIFFReadScanline(tfFile, scan_line, i, 0) < 0) + break; + for (input_p = scan_line, j = 0; j < tfImageWidth; j++) { + *(output_p + red_shift) = *input_p++; + *(output_p + green_shift) = *input_p++; + *(output_p + blue_shift) = *input_p++; + output_p += 4; + if (tfSamplesPerPixel == 4) /* skip the fourth channel */ + input_p++; + } + } + } else { + for (s = 0; s < tfSamplesPerPixel; s++) { + if (s == 3) /* skip the fourth channel */ + continue; + for (i = 0; i < tfImageHeight; i++) { + if (TIFFReadScanline(tfFile, scan_line, i, s) < 0) + break; + input_p = scan_line; + output_p = imageMemory + (i*tfImageWidth*4) + pixel_map[s]; + for (j = 0; j < tfImageWidth; j++, output_p += 4) + *output_p = *input_p++; + } + } + } + } else { + if (xImageDepth == tfImageDepth) { + output_p = imageMemory = (u_char *) + malloc(tfBytesPerRow * tfImageHeight); + MCHECK(imageMemory); + + for (i = 0; i < tfImageHeight; i++, output_p += tfBytesPerRow) + if (TIFFReadScanline(tfFile, output_p, i, 0) < 0) + break; + } else if ((xImageDepth == 8) && (tfImageDepth == 4)) { + output_p = imageMemory = (u_char *) + malloc(tfBytesPerRow * 2 * tfImageHeight + 2); + MCHECK(imageMemory); + + /* + * If a scanline is of odd size the inner loop below will overshoot. + * This is handled very simply by recalculating the start point at + * each scanline and padding imageMemory a little at the end. + */ + for (i = 0; i < tfImageHeight; i++) { + if (TIFFReadScanline(tfFile, scan_line, i, 0) < 0) + break; + output_p = &imageMemory[i * tfImageWidth]; + input_p = scan_line; + for (j = 0; j < tfImageWidth; j += 2, input_p++) { + *output_p++ = (*input_p >> 4) + basePixel; + *output_p++ = (*input_p & 0xf) + basePixel; + } + } + } else if ((xImageDepth == 8) && (tfImageDepth == 2)) { + output_p = imageMemory = (u_char *) + malloc(tfBytesPerRow * 4 * tfImageHeight + 4); + MCHECK(imageMemory); + + for (i = 0; i < tfImageHeight; i++) { + if (TIFFReadScanline(tfFile, scan_line, i, 0) < 0) + break; + output_p = &imageMemory[i * tfImageWidth]; + input_p = scan_line; + for (j = 0; j < tfImageWidth; j += 4, input_p++) { + *output_p++ = (*input_p >> 6) + basePixel; + *output_p++ = ((*input_p >> 4) & 3) + basePixel; + *output_p++ = ((*input_p >> 2) & 3) + basePixel; + *output_p++ = (*input_p & 3) + basePixel; + } + } + } else if ((xImageDepth == 4) && (tfImageDepth == 2)) { + output_p = imageMemory = (u_char *) + malloc(tfBytesPerRow * 2 * tfImageHeight + 2); + MCHECK(imageMemory); + + for (i = 0; i < tfImageHeight; i++) { + if (TIFFReadScanline(tfFile, scan_line, i, 0) < 0) + break; + output_p = &imageMemory[i * tfBytesPerRow * 2]; + input_p = scan_line; + for (j = 0; j < tfImageWidth; j += 4, input_p++) { + *output_p++ = (((*input_p>>6) << 4) + | ((*input_p >> 4) & 3)) + basePixel; + *output_p++ = ((((*input_p>>2) & 3) << 4) + | (*input_p & 3)) + basePixel; + } + } + } else { + fprintf(stderr, + "xtiff: can't handle %d-bit TIFF file on an %d-bit display\n", + tfImageDepth, xImageDepth); + exit(0); + } + } + + free(scan_line); +} + +void +CreateXImage() +{ + XGCValues gc_values; + GC bitmap_gc; + + xOffset = yOffset = 0; + grabX = grabY = -1; + + xImage = XCreateImage(xDisplay, xVisual, xImageDepth, + xImageDepth == 1 ? XYBitmap : ZPixmap, /* offset */ 0, + (char *) imageMemory, tfImageWidth, tfImageHeight, + /* bitmap_pad */ 8, /* bytes_per_line */ 0); + + /* + * libtiff converts LSB data into MSB but doesn't change the FillOrder tag. + */ + if (xImageDepth == 1) + xImage->bitmap_bit_order = MSBFirst; + if (xImageDepth <= 8) + xImage->byte_order = MSBFirst; + + /* + * create an appropriate GC + */ + gc_values.function = GXcopy; + gc_values.plane_mask = AllPlanes; + if (tfPhotometricInterpretation == PHOTOMETRIC_MINISBLACK) { + gc_values.foreground = XWhitePixel(xDisplay, xScreen); + gc_values.background = XBlackPixel(xDisplay, xScreen); + } else { + gc_values.foreground = XBlackPixel(xDisplay, xScreen); + gc_values.background = XWhitePixel(xDisplay, xScreen); + } + xWinGc = XCreateGC(xDisplay, XtWindow(shellWidget), + GCFunction | GCPlaneMask | GCForeground | GCBackground, &gc_values); + + /* + * create the pixmap and load the image + */ + if (appData.usePixmap == True) { + xImagePixmap = XCreatePixmap(xDisplay, RootWindow(xDisplay, xScreen), + xImage->width, xImage->height, xImageDepth); + + /* + * According to the O'Reilly X Protocol Reference Manual, page 53, + * "A pixmap depth of one is always supported and listed, but windows + * of depth one might not be supported." Therefore we create a pixmap + * of depth one and use XCopyPlane(). This is idiomatic. + */ + if (xImageDepth == 1) { /* just pass the bits through */ + gc_values.foreground = 1; /* foreground describes set bits */ + gc_values.background = 0; /* background describes clear bits */ + bitmap_gc = XCreateGC(xDisplay, xImagePixmap, + GCForeground | GCBackground, &gc_values); + XPutImage(xDisplay, xImagePixmap, bitmap_gc, xImage, + 0, 0, 0, 0, xImage->width, xImage->height); + } else + XPutImage(xDisplay, xImagePixmap, xWinGc, xImage, + 0, 0, 0, 0, xImage->width, xImage->height); + XDestroyImage(xImage); + free(imageMemory); + } +} + +XtCallbackProc +SelectProc(w, unused_1, unused_2) + Widget w; + caddr_t unused_1; + caddr_t unused_2; +{ + XawListReturnStruct *list_return; + + list_return = XawListShowCurrent(w); + + switch (list_return->list_index) { + case ButtonQuit: + QuitProc(); + break; + case ButtonPreviousPage: + PreviousProc(); + break; + case ButtonNextPage: + NextProc(); + break; + default: + fprintf(stderr, "error in SelectProc\n"); + exit(0); + } + XawListUnhighlight(w); +} + +void +QuitProc(void) +{ + exit(0); +} + +void +NextProc() +{ + PageProc(ButtonNextPage); +} + +void +PreviousProc() +{ + PageProc(ButtonPreviousPage); +} + +void +PageProc(direction) + int direction; +{ + XEvent fake_event; + Arg args[4]; + + switch (direction) { + case ButtonPreviousPage: + if (tfDirectory > 0) + TIFFSetDirectory(tfFile, --tfDirectory); + else + return; + break; + case ButtonNextPage: + if (TIFFReadDirectory(tfFile) == True) + tfDirectory++; + else + return; + break; + default: + fprintf(stderr, "error in PageProc\n"); + exit(0); + } + + xOffset = yOffset = 0; + grabX = grabY = -1; + + GetTIFFHeader(); + SetNameLabel(); + GetTIFFImage(); + + if (appData.usePixmap == True) + XFreePixmap(xDisplay, xImagePixmap); + else + XDestroyImage(xImage); + + CreateXImage(); + + /* + * Using XtSetValues() to set the widget size causes a resize. + * This resize gets propagated up to the parent shell. + * In order to disable this visually disconcerting effect, + * shell resizing is temporarily disabled. + */ + XtSetArg(args[0], XtNallowShellResize, False); + XtSetValues(shellWidget, args, 1); + + XtSetArg(args[0], XtNwidth, tfImageWidth); + XtSetArg(args[1], XtNheight, tfImageHeight); + XtSetValues(imageWidget, args, 2); + + XtSetArg(args[0], XtNallowShellResize, True); + XtSetValues(shellWidget, args, 1); + + XClearWindow(xDisplay, XtWindow(imageWidget)); + + fake_event.type = Expose; + fake_event.xexpose.x = fake_event.xexpose.y = 0; + fake_event.xexpose.width = tfImageWidth; /* the window will clip */ + fake_event.xexpose.height = tfImageHeight; + EventProc(imageWidget, NULL, &fake_event); +} + +void +EventProc(widget, unused, event) + Widget widget; + caddr_t unused; + XEvent *event; +{ + int ih, iw, ww, wh, sx, sy, w, h, dx, dy; + Dimension w_width, w_height; + XEvent next_event; + Arg args[2]; + + if (event->type == MappingNotify) { + XRefreshKeyboardMapping((XMappingEvent *) event); + return; + } + + if (!XtIsRealized(widget)) + return; + + if ((event->type == ButtonPress) || (event->type == ButtonRelease)) + if (event->xbutton.button != Button1) + return; + + iw = tfImageWidth; /* avoid sign problems */ + ih = tfImageHeight; + + /* + * The grabX and grabY variables record where the user grabbed the image. + * They also record whether the mouse button is down or not. + */ + if (event->type == ButtonPress) { + grabX = event->xbutton.x; + grabY = event->xbutton.y; + return; + } + + /* + * imageWidget is a Core widget and doesn't get resized. + * So we calculate the size of its viewport here. + */ + XtSetArg(args[0], XtNwidth, &w_width); + XtSetArg(args[1], XtNheight, &w_height); + XtGetValues(shellWidget, args, 2); + ww = w_width; + wh = w_height; + XtGetValues(listWidget, args, 2); + wh -= w_height; + + switch (event->type) { + case Expose: + dx = event->xexpose.x; + dy = event->xexpose.y; + sx = dx + xOffset; + sy = dy + yOffset; + w = MIN(event->xexpose.width, iw); + h = MIN(event->xexpose.height, ih); + break; + case KeyPress: + if ((grabX >= 0) || (grabY >= 0)) /* Mouse button is still down */ + return; + switch (XLookupKeysym((XKeyEvent *) event, /* KeySyms index */ 0)) { + case XK_Up: + if (ih < wh) /* Don't scroll if the window fits the image. */ + return; + sy = yOffset + appData.translate; + sy = MIN(ih - wh, sy); + if (sy == yOffset) /* Filter redundant stationary refreshes. */ + return; + yOffset = sy; + sx = xOffset; + dx = dy = 0; + w = ww; h = wh; + break; + case XK_Down: + if (ih < wh) + return; + sy = yOffset - appData.translate; + sy = MAX(sy, 0); + if (sy == yOffset) + return; + yOffset = sy; + sx = xOffset; + dx = dy = 0; + w = ww; h = wh; + break; + case XK_Left: + if (iw < ww) + return; + sx = xOffset + appData.translate; + sx = MIN(iw - ww, sx); + if (sx == xOffset) + return; + xOffset = sx; + sy = yOffset; + dx = dy = 0; + w = ww; h = wh; + break; + case XK_Right: + if (iw < ww) + return; + sx = xOffset - appData.translate; + sx = MAX(sx, 0); + if (sx == xOffset) + return; + xOffset = sx; + sy = yOffset; + dx = dy = 0; + w = ww; h = wh; + break; + default: + return; + } + break; + case MotionNotify: + /* + * MotionEvent compression. Ignore multiple motion events. + * Ignore motion events if the mouse button is up. + */ + if (XPending(xDisplay)) /* Xlib doesn't flush the output buffer */ + if (XtPeekEvent(&next_event)) + if (next_event.type == MotionNotify) + return; + if ((grabX < 0) || (grabY < 0)) + return; + sx = xOffset + grabX - (int) event->xmotion.x; + if (sx >= (iw - ww)) /* clamp x motion but allow y motion */ + sx = iw - ww; + sx = MAX(sx, 0); + sy = yOffset + grabY - (int) event->xmotion.y; + if (sy >= (ih - wh)) /* clamp y motion but allow x motion */ + sy = ih - wh; + sy = MAX(sy, 0); + if ((sx == xOffset) && (sy == yOffset)) + return; + dx = dy = 0; + w = ww; h = wh; + break; + case ButtonRelease: + xOffset = xOffset + grabX - (int) event->xbutton.x; + xOffset = MIN(iw - ww, xOffset); + xOffset = MAX(xOffset, 0); + yOffset = yOffset + grabY - (int) event->xbutton.y; + yOffset = MIN(ih - wh, yOffset); + yOffset = MAX(yOffset, 0); + grabX = grabY = -1; + default: + return; + } + + if (appData.usePixmap == True) { + if (xImageDepth == 1) + XCopyPlane(xDisplay, xImagePixmap, XtWindow(widget), + xWinGc, sx, sy, w, h, dx, dy, 1); + else + XCopyArea(xDisplay, xImagePixmap, XtWindow(widget), + xWinGc, sx, sy, w, h, dx, dy); + } else + XPutImage(xDisplay, XtWindow(widget), xWinGc, xImage, + sx, sy, dx, dy, w, h); +} + +void +ResizeProc() +{ + Dimension w_width, w_height; + int xo, yo, ww, wh; + XEvent fake_event; + Arg args[2]; + + if ((xOffset == 0) && (yOffset == 0)) + return; + + XtSetArg(args[0], XtNwidth, &w_width); + XtSetArg(args[1], XtNheight, &w_height); + XtGetValues(shellWidget, args, 2); + ww = w_width; + wh = w_height; + XtGetValues(listWidget, args, 2); + wh -= w_height; + + xo = xOffset; yo = yOffset; + + if ((xOffset + ww) >= tfImageWidth) + xOffset = MAX((int) tfImageWidth - ww, 0); + if ((yOffset + wh) >= tfImageHeight) + yOffset = MAX((int) tfImageHeight - wh, 0); + + /* + * Send an ExposeEvent if the origin changed. + * We have to do this because of the use and semantics of bit gravity. + */ + if ((xo != xOffset) || (yo != yOffset)) { + fake_event.type = Expose; + fake_event.xexpose.x = fake_event.xexpose.y = 0; + fake_event.xexpose.width = tfImageWidth; + fake_event.xexpose.height = tfImageHeight; + EventProc(imageWidget, NULL, &fake_event); + } +} + +int +XTiffErrorHandler(display, error_event) + Display *display; + XErrorEvent *error_event; +{ + char message[80]; + + /* + * Some X servers limit the size of pixmaps. + */ + if ((error_event->error_code == BadAlloc) + && (error_event->request_code == X_CreatePixmap)) + fprintf(stderr, "xtiff: requested pixmap too big for display\n"); + else { + XGetErrorText(display, error_event->error_code, message, 80); + fprintf(stderr, "xtiff: error code %s\n", message); + } + + exit(0); +} + +void +Usage() +{ + fprintf(stderr, "Usage xtiff: [options] tiff-file\n"); + fprintf(stderr, "\tstandard Xt options\n"); + fprintf(stderr, "\t[-help]\n"); + fprintf(stderr, "\t[-gamma gamma]\n"); + fprintf(stderr, "\t[-usePixmap (True | False)]\n"); + fprintf(stderr, "\t[-viewportWidth pixels]\n"); + fprintf(stderr, "\t[-viewportHeight pixels]\n"); + fprintf(stderr, "\t[-translate pixels]\n"); + fprintf(stderr, "\t[-verbose (True | False)]\n"); + exit(0); +} diff --git a/contrib/dbs/xtiff/xtifficon.h b/contrib/dbs/xtiff/xtifficon.h new file mode 100755 index 0000000..9a42188 --- /dev/null +++ b/contrib/dbs/xtiff/xtifficon.h @@ -0,0 +1,14 @@ +#define xtifficon_width 32 +#define xtifficon_height 32 +static char xtifficon_bits[] = { + 0xff, 0x00, 0x00, 0xc0, 0xfe, 0x01, 0x7e, 0xc0, 0xfc, 0x03, 0x7e, 0x60, + 0xf8, 0x07, 0x06, 0x30, 0xf8, 0x07, 0x1e, 0x18, 0xf0, 0x0f, 0x1e, 0x0c, + 0xe0, 0x1f, 0x06, 0x06, 0xc0, 0x3f, 0x06, 0x06, 0xc0, 0x3f, 0x06, 0x03, + 0x80, 0x7f, 0x80, 0x01, 0x00, 0xff, 0xc0, 0x00, 0x00, 0xfe, 0x61, 0x00, + 0x00, 0xfe, 0x31, 0x7e, 0x7e, 0xfc, 0x33, 0x7e, 0x7e, 0xf8, 0x1b, 0x06, + 0x18, 0xf0, 0x0d, 0x1e, 0x18, 0xf0, 0x0e, 0x1e, 0x18, 0x60, 0x1f, 0x06, + 0x18, 0xb0, 0x3f, 0x06, 0x18, 0x98, 0x7f, 0x06, 0x18, 0x98, 0x7f, 0x00, + 0x00, 0x0c, 0xff, 0x00, 0x00, 0x06, 0xfe, 0x01, 0x00, 0x63, 0xfc, 0x03, + 0x80, 0x61, 0xfc, 0x03, 0xc0, 0x60, 0xf8, 0x07, 0xc0, 0x60, 0xf0, 0x0f, + 0x60, 0x60, 0xe0, 0x1f, 0x30, 0x60, 0xe0, 0x1f, 0x18, 0x60, 0xc0, 0x3f, + 0x0c, 0x60, 0x80, 0x7f, 0x06, 0x00, 0x00, 0xff}; diff --git a/contrib/dosdjgpp/Makefile.lib b/contrib/dosdjgpp/Makefile.lib new file mode 100755 index 0000000..be055ab --- /dev/null +++ b/contrib/dosdjgpp/Makefile.lib @@ -0,0 +1,249 @@ +# $Header: /home/cvsroot/libtiff/contrib/dosdjgpp/Makefile.lib,v 1.1.1.1 2000/06/24 19:10:17 tshead Exp $ +# +# manually derived from Makefile.in for DJGPP v2.x (GNU C for DOS/386). +# +# Tag Image File Format Library +# +# Copyright (c) 1988-1996 Sam Leffler +# Copyright (c) 1991-1996 Silicon Graphics, Inc. +# +# 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. +# + +SRCDIR = . + +NULL = +CC = gcc +AR = ar +AROPTS = rc +RANLIB = ranlib + +# +# If JPEG support is to be included and the Independent JPEG +# Software distribution is not installed then DIR_JPEG must +# refer to the directory where the include files reside. +# +# Similarly, if the libgz distribution is not installed, then +# DIR_LIBGZ must refer to the directory where the include files +# are located. Note that recent versions +# +IPATH = -I. -I${SRCDIR} +# @COPT_LIBINC@ +# +# To enable JPEG support include -DJPEG_SUPPORT here. +# To enable Deflate support add a -DZIP_SUPPORT here. +# Note that where the configure script is used these defines +# are automatically setup when JPEG/ZIP is set to "yes". +# +# Otherwise, consult tiffconf.h for information on controlling +# the configuration of optional library support. +# +CONF_LIBRARY=#@CONF_JPEG@ @CONF_ZIP@ +COPTS = +OPTIMIZER=-O +CFLAGS = ${COPTS} ${OPTIMIZER} ${IPATH} ${CONF_LIBRARY} +# +SRCS = \ + tif_aux.c \ + tif_close.c \ + tif_codec.c \ + tif_compress.c \ + tif_dir.c \ + tif_dirinfo.c \ + tif_dirread.c \ + tif_dirwrite.c \ + tif_dumpmode.c \ + tif_error.c \ + tif_fax3.c \ + tif_fx3s.c \ + tif_getimage.c \ + tif_jpeg.c \ + tif_flush.c \ + tif_lzw.c \ + tif_next.c \ + tif_open.c \ + tif_packbits.c \ + tif_predict.c \ + tif_print.c \ + tif_read.c \ + tif_swab.c \ + tif_strip.c \ + tif_thunder.c \ + tif_tile.c \ + tif_msdos.c \ + tif_version.c \ + tif_warning.c \ + tif_write.c \ + tif_zip.c \ + tif_luv.c \ + ${NULL} +OBJS = \ + tif_aux.o \ + tif_close.o \ + tif_codec.o \ + tif_compress.o \ + tif_dir.o \ + tif_dirinfo.o \ + tif_dirread.o \ + tif_dirwrite.o \ + tif_dumpmode.o \ + tif_error.o \ + tif_fax3.o \ + tif_fx3s.o \ + tif_getimage.o \ + tif_jpeg.o \ + tif_flush.o \ + tif_lzw.o \ + tif_next.o \ + tif_open.o \ + tif_packbits.o \ + tif_predict.o \ + tif_print.o \ + tif_read.o \ + tif_swab.o \ + tif_strip.o \ + tif_thunder.o \ + tif_tile.o \ + tif_msdos.o \ + tif_version.o \ + tif_warning.o \ + tif_write.o \ + tif_zip.o \ + tif_luv.o \ + ${NULL} +TARGETS = libtiff.a + +all: ${TARGETS} + +libtiff.a: ${OBJS} + ${AR} ${AROPTS} libtiff.a $? + ${RANLIB} libtiff.a + +${OBJS}: ${SRCDIR}/tiffio.h ${SRCDIR}/tiff.h ${SRCDIR}/tif_dir.h +${OBJS}: ${SRCDIR}/tiffcomp.h ${SRCDIR}/tiffiop.h ${SRCDIR}/tiffconf.h + +ALPHA = ../dist/tiff.alpha +VERSION = ../VERSION + +version.h: ${VERSION} ${ALPHA} ${SRCDIR}/mkversion.c + ${CC} -o mkversion ${CFLAGS} ${SRCDIR}/mkversion.c + del version.h + mkversion -v ${VERSION} -a ${ALPHA} version.h + +tif_version.o: version.h + +# +# The finite state machine tables used by the G3/G4 decoders +# are generated by the mkg3states program. On systems without +# make these rules have to be manually carried out. +# +# The file is called tif_fax3sm.c is the normal (unix) Makefile, but this +# may cause problems when compiling without support for LFN, then the file +# tif_fax3.o is considered the same name as tif_fax3sm.o, since only 8 chars +# are significant. +# +tif_fx3s.c: ${SRCDIR}/mkg3states.c ${SRCDIR}/tif_fax3.h + ${CC} -o mkg3states ${CFLAGS} ${SRCDIR}/mkg3states.c + del tif_fx3s.c + mkg3states -c const tif_fx3s.c + +tif_fx3s.o: tif_fx3s.c + @echo If the following gcc command fails due to lack of virtual memory, try + @echo compiling it in a non-DPMI environment with the cwsdpmi swapfile on a + @echo drive that has plenty of space. + ${CC} -c ${CFLAGS} tif_fx3s.c + +tif_aux.o: ${SRCDIR}/tif_aux.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_aux.c +tif_close.o: ${SRCDIR}/tif_close.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_close.c +tif_codec.o: ${SRCDIR}/tif_codec.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_codec.c +tif_compress.o: ${SRCDIR}/tif_compress.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_compress.c +tif_dir.o: ${SRCDIR}/tif_dir.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_dir.c +tif_dirinfo.o: ${SRCDIR}/tif_dirinfo.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_dirinfo.c +tif_dirread.o: ${SRCDIR}/tif_dirread.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_dirread.c +tif_dirwrite.o: ${SRCDIR}/tif_dirwrite.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_dirwrite.c +tif_dumpmode.o: ${SRCDIR}/tif_dumpmode.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_dumpmode.c +tif_error.o: ${SRCDIR}/tif_error.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_error.c +tif_fax3.o: ${SRCDIR}/tif_fax3.c ${SRCDIR}/t4.h ${SRCDIR}/tif_fax3.h + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_fax3.c +tif_getimage.o: ${SRCDIR}/tif_getimage.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_getimage.c +tif_jpeg.o: ${SRCDIR}/tif_jpeg.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_jpeg.c +tif_flush.o: ${SRCDIR}/tif_flush.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_flush.c +tif_lzw.o: ${SRCDIR}/tif_lzw.c ${SRCDIR}/tif_predict.h + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_lzw.c +tif_next.o: ${SRCDIR}/tif_next.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_next.c +tif_open.o: ${SRCDIR}/tif_open.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_open.c +tif_packbits.o: ${SRCDIR}/tif_packbits.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_packbits.c +tif_predict.o: ${SRCDIR}/tif_predict.c ${SRCDIR}/tif_predict.h + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_predict.c +tif_print.o: ${SRCDIR}/tif_print.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_print.c +tif_read.o: ${SRCDIR}/tif_read.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_read.c +tif_swab.o: ${SRCDIR}/tif_swab.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_swab.c +tif_strip.o: ${SRCDIR}/tif_strip.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_strip.c +tif_thunder.o: ${SRCDIR}/tif_thunder.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_thunder.c +tif_tile.o: ${SRCDIR}/tif_tile.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_tile.c +tif_unix.o: ${SRCDIR}/tif_unix.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_unix.c +tif_version.o: ${SRCDIR}/tif_version.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_version.c +tif_warning.o: ${SRCDIR}/tif_warning.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_warning.c +tif_write.o: ${SRCDIR}/tif_write.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_write.c +tif_zip.o: ${SRCDIR}/tif_zip.c ${SRCDIR}/tif_predict.h + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_zip.c + +tif_apple.o: ${SRCDIR}/tif_apple.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_apple.c +tif_atari.o: ${SRCDIR}/tif_atari.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_atari.c +tif_msdos.o: ${SRCDIR}/tif_msdos.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_msdos.c +tif_vms.o: ${SRCDIR}/tif_vms.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_vms.c +tif_win3.o: ${SRCDIR}/tif_win3.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_win3.c + +INCS = ${SRCDIR}/tiff.h ${SRCDIR}/tiffio.h + +clean: + rm -f ${TARGETS} ${OBJS} mkg3states mkg3states.exe tif_fx3s.c + rm -f version.h libtiff.a mkversion mkversion.exe diff --git a/contrib/dosdjgpp/Makefile.tools b/contrib/dosdjgpp/Makefile.tools new file mode 100755 index 0000000..9573428 --- /dev/null +++ b/contrib/dosdjgpp/Makefile.tools @@ -0,0 +1,217 @@ +# $Header: /home/cvsroot/libtiff/contrib/dosdjgpp/Makefile.tools,v 1.1.1.1 2000/06/24 19:10:17 tshead Exp $ +# +# manually derived from Makefile.in for DJGPP v2.x (GNU C for DOS/386). +# +# TIFF Library Tools +# +# Copyright (c) 1988-1996 Sam Leffler +# Copyright (c) 1991-1996 Silicon Graphics, Inc. +# +# 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 Stanford 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. +# +DEPTH = .. +SRCDIR = . +LIBDIR = ${DEPTH}/libtiff + +NULL = +CC = gcc +# +COPTS = +OPTIMIZER=-O +IPATH = -I. -I${SRCDIR} -I${LIBDIR} +CFLAGS = ${COPTS} ${OPTIMIZER} ${IPATH} +# +LIBTIFF = ${DEPTH}/libtiff/libtiff.a +LIBJPEG = #@LIBJPEG@ +LIBGZ = #@LIBGZ@ +LIBS = ${LIBTIFF} ${LIBJPEG} ${LIBGZ} +# +OBJS= \ + fax2tiff.o \ + fax2ps.o \ + gif2tiff.o \ + pal2rgb.o \ + ppm2tiff.o \ + rgb2ycbcr.o \ + ras2tiff.o \ + thumbnail.o \ + tiff2bw.o \ + tiff2ps.o \ + tiffcmp.o \ + tiffcp.o \ + tiffdither.o \ + tiffdump.o \ + tiffinfo.o \ + tiffmedian.o \ + tiffsplit.o \ + ${NULL} +TARGETS =\ + fax2tiff \ + fax2ps \ + gif2tiff \ + pal2rgb \ + ppm2tiff \ + rgb2ycbcr \ + thumbnail \ + ras2tiff \ + tiff2bw \ + tiff2ps \ + tiffcmp \ + tiffcp \ + tiffdither \ + tiffdump \ + tiffinfo \ + tiffmedian \ + tiffsplit \ + ${NULL} + +all: ${TARGETS} + +clean: + rm -f ${TARGETS} ${addsuffix .exe, ${TARGETS}} ${OBJS} + rm -f sgigt.o tiffgt sgisv.o tiffsv sgi2tiff.o sgi2tiff ycbcr + +# +# System-independent tools +# + +tiffinfo: tiffinfo.o ${LIBTIFF} + ${CC} -o tiffinfo ${CFLAGS} tiffinfo.o ${LIBS} +tiffinfo.o: ${SRCDIR}/tiffinfo.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffinfo.c + +tiffcmp:tiffcmp.o ${LIBTIFF} + ${CC} -o tiffcmp ${CFLAGS} tiffcmp.o ${LIBS} +tiffcmp.o: ${SRCDIR}/tiffcmp.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffcmp.c + +tiffcp: tiffcp.o ${LIBTIFF} + ${CC} -o tiffcp ${CFLAGS} tiffcp.o ${LIBS} +tiffcp.o: ${SRCDIR}/tiffcp.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffcp.c + +tiffdump: tiffdump.o + ${CC} -o tiffdump ${CFLAGS} tiffdump.o ${LIBS} +tiffdump.o: ${SRCDIR}/tiffdump.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffdump.c + +tiffmedian: tiffmedian.o ${LIBTIFF} + ${CC} -o tiffmedian ${CFLAGS} tiffmedian.o ${LIBS} +tiffmedian.o: ${SRCDIR}/tiffmedian.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffmedian.c + +tiffsplit: tiffsplit.o ${LIBTIFF} + ${CC} -o tiffsplit ${CFLAGS} tiffsplit.o ${LIBS} +tiffsplit.o: ${SRCDIR}/tiffsplit.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffsplit.c + +tiff2ps: tiff2ps.o ${LIBTIFF} + ${CC} -o tiff2ps ${CFLAGS} tiff2ps.o ${LIBS} +tiff2ps.o: ${SRCDIR}/tiff2ps.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiff2ps.c + +# +# Junky stuff... programs that are more examples of how +# to use the library than full-blown useful tools. +# + +# convert RGB image to B&W +tiff2bw: tiff2bw.o ${LIBTIFF} + ${CC} -o tiff2bw ${CFLAGS} tiff2bw.o ${LIBS} +tiff2bw.o: ${SRCDIR}/tiff2bw.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiff2bw.c + +# convert B&W image to bilevel w/ FS dithering +tiffdither: tiffdither.o ${LIBTIFF} + ${CC} -o tiffdither ${CFLAGS} tiffdither.o ${LIBS} +tiffdither.o: ${SRCDIR}/tiffdither.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffdither.c + +# simple Sun rasterfile converter +ras2tiff: ras2tiff.o ${LIBTIFF} + ${CC} -o ras2tiff ${CFLAGS} ras2tiff.o ${LIBS} +ras2tiff.o: ${SRCDIR}/ras2tiff.c + ${CC} -c ${CFLAGS} ${SRCDIR}/ras2tiff.c + +# simple GIF converter +gif2tiff: gif2tiff.o ${LIBTIFF} + ${CC} -o gif2tiff ${CFLAGS} gif2tiff.o ${LIBS} +gif2tiff.o: ${SRCDIR}/gif2tiff.c + ${CC} -c ${CFLAGS} ${SRCDIR}/gif2tiff.c + +# very limited PBM converter +ppm2tiff: ppm2tiff.o ${LIBTIFF} + ${CC} -o ppm2tiff ${CFLAGS} ppm2tiff.o ${LIBS} +ppm2tiff.o: ${SRCDIR}/ppm2tiff.c + ${CC} -c ${CFLAGS} ${SRCDIR}/ppm2tiff.c + +# Group 3/4 FAX file converter +fax2tiff: fax2tiff.o ${LIBTIFF} + ${CC} -o fax2tiff ${CFLAGS} fax2tiff.o ${LIBS} +fax2tiff.o: ${SRCDIR}/fax2tiff.c + ${CC} -c -I${LIBDIR} -I${DEPTH}/libtiff ${CFLAGS} ${SRCDIR}/fax2tiff.c + +# Group 3/4 FAX to encoded PS converter +fax2ps: fax2ps.o ${LIBTIFF} + ${CC} -o fax2ps ${CFLAGS} fax2ps.o ${LIBS} +fax2ps.o: ${SRCDIR}/fax2ps.c + ${CC} -c ${CFLAGS} ${SRCDIR}/fax2ps.c + +# convert Palette image to RGB +pal2rgb: pal2rgb.o ${LIBTIFF} + ${CC} -o pal2rgb ${CFLAGS} pal2rgb.o ${LIBS} +pal2rgb.o: ${SRCDIR}/pal2rgb.c + ${CC} -c ${CFLAGS} ${SRCDIR}/pal2rgb.c + +# convert RGB image to YCbCr +rgb2ycbcr: rgb2ycbcr.o ${LIBTIFF} + ${CC} -o rgb2ycbcr ${CFLAGS} rgb2ycbcr.o ${LIBS} +rgb2ycbcr.o: ${SRCDIR}/rgb2ycbcr.c + ${CC} -c ${CFLAGS} ${SRCDIR}/rgb2ycbcr.c + +# generate thumbnail images from fax (example of SubIFD usage) +thumbnail: thumbnail.o ${LIBTIFF} + ${CC} -o thumbnail ${CFLAGS} thumbnail.o ${LIBS} +thumbnail.o: ${SRCDIR}/thumbnail.c + ${CC} -c ${CFLAGS} ${SRCDIR}/thumbnail.c + +# +# System-specific tools. +# + +# +# sgi2tiff converts SGI RGB images to TIFF; it requires +# the SGI image library -limage. +# +sgi2tiff: sgi2tiff.o ${LIBTIFF} + ${CC} -o sgi2tiff ${CFLAGS} sgi2tiff.o -limage ${LIBS} +sgi2tiff.o: ${SRCDIR}/sgi2tiff.c + ${CC} -c ${CFLAGS} ${SRCDIR}/sgi2tiff.c + +# SGI versions of tiffgt & tiffsv that require -lgl +tiffgt: sgigt.o ${LIBTIFF} + ${CC} -o tiffgt ${CFLAGS} sgigt.o ${LIBS} -lgutil -lgl_s +sgigt.o: ${SRCDIR}/sgigt.c + ${CC} -c ${CFLAGS} ${SRCDIR}/sgigt.c + +tiffsv: sgisv.o ${LIBTIFF} + ${CC} -o tiffsv ${CFLAGS} sgisv.o ${LIBS} -lgutil -lgl_s +sgisv.o: ${SRCDIR}/sgisv.c + ${CC} -c ${CFLAGS} ${SRCDIR}/sgisv.c diff --git a/contrib/dosdjgpp/Makefile.top b/contrib/dosdjgpp/Makefile.top new file mode 100755 index 0000000..1943c72 --- /dev/null +++ b/contrib/dosdjgpp/Makefile.top @@ -0,0 +1,54 @@ +#! smake +# $Header: /home/cvsroot/libtiff/contrib/dosdjgpp/Makefile.top,v 1.1.1.1 2000/06/24 19:10:17 tshead Exp $ +# +# manually derived from Makefile.in (though basically nothing remains) +# for DJGPP v2.x (GNU C for DOS/386). +# +# A warning about the filename structure: +# +# Some of the filenames used in the Makefiles are longer than 8 characters +# this will work with the normal 8.3 file system since all files are unique +# in the first 8 chars. To compile under the long filename support in Win95 +# you can either extract the files with a program that truncates filenames +# (e.g. the DOS pkunzip) and disable LFN support with set LFN=n or with a +# program that supports long filenames (e.g. WinZip 6.0) and set LFN=y. +# The default environment in djgpp 2 is supposed to have LFN disabled, but +# due to a bug in the init code it doesn't work properly. Setting the LFN +# variable explicitly should fix that. +# +# Tag Image File Format Library +# +# Copyright (c) 1988-1996 Sam Leffler +# Copyright (c) 1991-1996 Silicon Graphics, Inc. +# +# 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. +# + +SRCDIR = . + +all default: + @${MAKE} -C libtiff + @${MAKE} -C tools + +clean: + @${MAKE} -C libtiff clean + @${MAKE} -C tools clean + + diff --git a/contrib/dosdjgpp/conf.bat b/contrib/dosdjgpp/conf.bat new file mode 100755 index 0000000..b8113f7 --- /dev/null +++ b/contrib/dosdjgpp/conf.bat @@ -0,0 +1,11 @@ +@echo off +rem copy the Makefiles for libtiff for DJGPP2 into proper locations +rem we assume to be in $(top)/contrib/dosdjgpp/ + +copy Makefile.top ..\..\Makefile +copy Makefile.lib ..\..\libtiff\Makefile +copy port.h ..\..\libtiff\port.h +copy Makefile.too* ..\..\tools\Makefile + +echo all set for building the library. Now just do make +cd ..\.. diff --git a/contrib/dosdjgpp/port.h b/contrib/dosdjgpp/port.h new file mode 100755 index 0000000..3b1e693 --- /dev/null +++ b/contrib/dosdjgpp/port.h @@ -0,0 +1,29 @@ +#ifndef _PORT_ +#define _PORT_ 1 +#ifdef __cplusplus +extern "C" { +#endif +#include +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; + +#define HOST_FILLORDER FILLORDER_LSB2MSB +#define HOST_BIGENDIAN 0 +#include +#include +#include +#include +#include +typedef double dblparam_t; +#ifdef __STRICT_ANSI__ +#define INLINE __inline__ +#else +#define INLINE inline +#endif +#define GLOBALDATA(TYPE,NAME) extern TYPE NAME +#ifdef __cplusplus +} +#endif +#endif diff --git a/contrib/dosdjgpp/readme b/contrib/dosdjgpp/readme new file mode 100755 index 0000000..938f418 --- /dev/null +++ b/contrib/dosdjgpp/readme @@ -0,0 +1,30 @@ + +This directory contains the files necessary to build the free TIFF library +with the DJGPP v2 compiler under MSDOS. Since DJGPP defines the unix flag, +I have created a port.h instead of putting the necessary defines into +tiffcomp.h. Makefiles are included for the top level and the libtiff and +tools directories. + +All you have to do is copy the files into the respective directories and run +make. If you want, you can use the conf.bat to do that for you, make sure that +the file is stored with MSDOS text EOL-convention (CR/LF), otherwise the +command.com will not do anything (if you used unzip, use the -a option, +otherwise edit the file and save it again). + +Note that you probably will not be able to built the library with the v1.x +versions of djgpp, due to two problems. First, the top makefile calls a +sub-make for each directory and you are likely to run out of memory, since +each recursive invocation of a djgpp v1.x program requires about 130k, to +avoid that, you can enter the directories manually and call make (well, there +are only two dirs). The 2nd problem is that djgpp 1.x doesn't call the +coff2exe (stubify) program when creating an executable. This means that all +programs compiled are not converted to exe and consequently are not available +for calling directly. For the tools directory, you can just call coff2exe for +each program after make finishes, but in the libtiff directory, a few programs +are created during the make process that have to be called for make to +continue (e.g. mkg3states). Make will probably report an error at each +such stage. To fix that, either add a coff2exe call before each program is +called or call coff2exe manually and rerun make (there 2-3 such programs). + +Alexander Lehmann + diff --git a/contrib/iptcutil/Makefile b/contrib/iptcutil/Makefile new file mode 100755 index 0000000..54befc9 --- /dev/null +++ b/contrib/iptcutil/Makefile @@ -0,0 +1,12 @@ +CC=gcc +CFLAGS= +iptcutil: iptcutil.c + $(CC) $(CFLAGS) -o iptcutil iptcutil.c + +clean: + rm iptcutil *~ + +all: iptcutil + + + diff --git a/contrib/iptcutil/iptcutil.c b/contrib/iptcutil/iptcutil.c new file mode 100755 index 0000000..f25ada7 --- /dev/null +++ b/contrib/iptcutil/iptcutil.c @@ -0,0 +1,920 @@ +#include +#include +#include +#ifdef WIN32 +#include +#endif +#include +#include +#include + +#ifdef WIN32 +#define STRNICMP strnicmp +#else +#define STRNICMP strncasecmp +#endif + +typedef struct _tag_spec +{ + short + id; + + char + *name; +} tag_spec; + +static tag_spec tags[] = { + 5,"Image Name", + 7,"Edit Status", + 10,"Priority", + 15,"Category", + 20,"Supplemental Category", + 22,"Fixture Identifier", + 25,"Keyword", + 30,"Release Date", + 35,"Release Time", + 40,"Special Instructions", + 45,"Reference Service", + 47,"Reference Date", + 50,"Reference Number", + 55,"Created Date", + 60,"Created Time", + 65,"Originating Program", + 70,"Program Version", + 75,"Object Cycle", + 80,"Byline", + 85,"Byline Title", + 90,"City", + 95,"Province State", + 100,"Country Code", + 101,"Country", + 103,"Original Transmission Reference", + 105,"Headline", + 110,"Credit", + 115,"Source", + 116,"Copyright String", + 120,"Caption", + 121,"Local Caption", + 122,"Caption Writer", + 200,"Custom Field 1", + 201,"Custom Field 2", + 202,"Custom Field 3", + 203,"Custom Field 4", + 204,"Custom Field 5", + 205,"Custom Field 6", + 206,"Custom Field 7", + 207,"Custom Field 8", + 208,"Custom Field 9", + 209,"Custom Field 10", + 210,"Custom Field 11", + 211,"Custom Field 12", + 212,"Custom Field 13", + 213,"Custom Field 14", + 214,"Custom Field 15", + 215,"Custom Field 16", + 216,"Custom Field 17", + 217,"Custom Field 18", + 218,"Custom Field 19", + 219,"Custom Field 20" +}; + +/* + * We format the output using HTML conventions + * to preserve control characters and such. + */ +void formatString(FILE *ofile, const char *s, int len) +{ + putc('"', ofile); + for (; len > 0; --len, ++s) { + char c = *s; + switch (c) { + case '&': + fputs("&", ofile); + break; +#ifdef HANDLE_GT_LT + case '<': + fputs("<", ofile); + break; + case '>': + fputs(">", ofile); + break; +#endif + case '"': + fputs(""", ofile); + break; + default: + if (iscntrl(c)) + fprintf(ofile, "&#%d;", c); + else + putc(*s, ofile); + break; + } + } + fputs("\"\n", ofile); +} + +typedef struct _html_code +{ + short + len; + const char + *code, + val; +} html_code; + +static html_code html_codes[] = { +#ifdef HANDLE_GT_LT + 4,"<",'<', + 4,">",'>', +#endif + 5,"&",'&', + 6,""",'"' +}; + +/* + * This routine converts HTML escape sequence + * back to the original ASCII representation. + * - returns the number of characters dropped. + */ +int convertHTMLcodes(char *s, int len) +{ + if (len <=0 || s==(char*)NULL || *s=='\0') + return 0; + + if (s[1] == '#') + { + int val, o; + + if (sscanf(s,"&#%d;",&val) == 1) + { + o = 3; + while (s[o] != ';') + { + o++; + if (o > 5) + break; + } + if (o < 5) + strcpy(s+1, s+1+o); + *s = val; + return o; + } + } + else + { + int + i, + codes = sizeof(html_codes) / sizeof(html_code); + + for (i=0; i < codes; i++) + { + if (html_codes[i].len <= len) + if (STRNICMP(s, html_codes[i].code, html_codes[i].len) == 0) + { + strcpy(s+1, s+html_codes[i].len); + *s = html_codes[i].val; + return html_codes[i].len-1; + } + } + } +} + +int formatIPTC(FILE *ifile, FILE *ofile) +{ + unsigned int + foundiptc, + tagsfound; + + unsigned char + recnum, + dataset; + + unsigned char + *readable, + *str; + + long + tagindx, + taglen; + + int + i, + tagcount = sizeof(tags) / sizeof(tag_spec); + + char + c; + + foundiptc = 0; /* found the IPTC-Header */ + tagsfound = 0; /* number of tags found */ + + c = getc(ifile); + while (c != EOF) + { + if (c == 0x1c) + foundiptc = 1; + else + { + if (foundiptc) + return -1; + else + continue; + } + + /* we found the 0x1c tag and now grab the dataset and record number tags */ + dataset = getc(ifile); + if ((char) dataset == EOF) + return -1; + recnum = getc(ifile); + if ((char) recnum == EOF) + return -1; + /* try to match this record to one of the ones in our named table */ + for (i=0; i< tagcount; i++) + { + if (tags[i].id == recnum) + break; + } + if (i < tagcount) + readable = tags[i].name; + else + readable = ""; + + /* then we decode the length of the block that follows - long or short fmt */ + c = getc(ifile); + if (c == EOF) + return 0; + if (c & (unsigned char) 0x80) + { + unsigned char + buffer[4]; + + for (i=0; i<4; i++) + { + c = buffer[i] = getc(ifile); + if (c == EOF) + return -1; + } + taglen = (((long) buffer[ 0 ]) << 24) | + (((long) buffer[ 1 ]) << 16) | + (((long) buffer[ 2 ]) << 8) | + (((long) buffer[ 3 ])); + } + else + { + unsigned char + x = c; + + taglen = ((long) x) << 8; + x = getc(ifile); + if ((char)x == EOF) + return -1; + taglen |= (long) x; + } + /* make a buffer to hold the tag data and snag it from the input stream */ + str=(unsigned char *) malloc((unsigned int) (taglen+1)); + if (str == (unsigned char *) NULL) + { + printf("Memory allocation failed"); + return 0; + } + for (tagindx=0; tagindx 0) + fprintf(ofile, "%d#%d#%s=",(unsigned int)dataset, (unsigned int) recnum, readable); + else + fprintf(ofile, "%d#%d=",(unsigned int)dataset, (unsigned int) recnum); + formatString( ofile, str, taglen ); + free(str); + + tagsfound++; + + c = getc(ifile); + } + return tagsfound; +} + +int tokenizer(unsigned inflag,char *token,int tokmax,char *line, +char *white,char *brkchar,char *quote,char eschar,char *brkused, +int *next,char *quoted); + +char *super_fgets(char *b, int *blen, FILE *file) +{ + int + c, + len; + + unsigned char + *q; + + len=*blen; + for (q=b; ; q++) + { + c=fgetc(file); + if (c == EOF || c == '\n') + break; + if (((int)q - (int)b + 1 ) >= (int) len) + { + int + tlen; + + tlen=(int)q-(int)b; + len<<=1; + b=(unsigned char *) realloc((char *) b,(len+2)); + if ((unsigned char *) b == (unsigned char *) NULL) + break; + q=b+tlen; + } + *q=(unsigned char) c; + } + *blen=0; + if ((unsigned char *)b != (unsigned char *) NULL) + { + int + tlen; + + tlen=(int)q - (int)b; + if (tlen == 0) + return (char *) NULL; + b[tlen] = '\0'; + *blen=++tlen; + } + return b; +} + +#define BUFFER_SZ 4096 + +int main(int argc, char *argv[]) +{ + unsigned int + length; + + unsigned char + *buffer; + + int + i, + mode; /* iptc binary, or iptc text */ + + FILE + *ifile = stdin, + *ofile = stdout; + + char + c, + *usage = "usage: iptcutil -t | -b [-i file] [-o file] output"; + + if( argc < 2 ) + { + printf(usage); + return 1; + } + + mode = 0; + length = -1; + buffer = (unsigned char *)NULL; + + for (i=1; i 0) + { + char + *s = &token[next-1]; + + len -= convertHTMLcodes(s, strlen(s)); + } + } + + fputc(0x1c, ofile); + fputc(dataset, ofile); + fputc(recnum, ofile); + if (len < 0x10000) + { + fputc((len >> 8) & 255, ofile); + fputc(len & 255, ofile); + } + else + { + fputc(((len >> 24) & 255) | 0x80, ofile); + fputc((len >> 16) & 255, ofile); + fputc((len >> 8) & 255, ofile); + fputc(len & 255, ofile); + } + next=0; + while (len--) + fputc(token[next++], ofile); + } + state++; + } + free(token); + token = (char *)NULL; + free(newstr); + newstr = (char *)NULL; + } + free(line); + + fclose( ifile ); + fclose( ofile ); + } + + return 0; +} + +/* + This routine is a generalized, finite state token parser. It allows + you extract tokens one at a time from a string of characters. The + characters used for white space, for break characters, and for quotes + can be specified. Also, characters in the string can be preceded by + a specifiable escape character which removes any special meaning the + character may have. + + There are a lot of formal parameters in this subroutine call, but + once you get familiar with them, this routine is fairly easy to use. + "#define" macros can be used to generate simpler looking calls for + commonly used applications of this routine. + + First, some terminology: + + token: used here, a single unit of information in + the form of a group of characters. + + white space: space that gets ignored (except within quotes + or when escaped), like blanks and tabs. in + addition, white space terminates a non-quoted + token. + + break character: a character that separates non-quoted tokens. + commas are a common break character. the + usage of break characters to signal the end + of a token is the same as that of white space, + except multiple break characters with nothing + or only white space between generate a null + token for each two break characters together. + + for example, if blank is set to be the white + space and comma is set to be the break + character, the line ... + + A, B, C , , DEF + + ... consists of 5 tokens: + + 1) "A" + 2) "B" + 3) "C" + 4) "" (the null string) + 5) "DEF" + + quote character: a character that, when surrounding a group + of other characters, causes the group of + characters to be treated as a single token, + no matter how many white spaces or break + characters exist in the group. also, a + token always terminates after the closing + quote. for example, if ' is the quote + character, blank is white space, and comma + is the break character, the following + string ... + + A, ' B, CD'EF GHI + + ... consists of 4 tokens: + + 1) "A" + 2) " B, CD" (note the blanks & comma) + 3) "EF" + 4) "GHI" + + the quote characters themselves do + not appear in the resultant tokens. the + double quotes are delimiters i use here for + documentation purposes only. + + escape character: a character which itself is ignored but + which causes the next character to be + used as is. ^ and \ are often used as + escape characters. an escape in the last + position of the string gets treated as a + "normal" (i.e., non-quote, non-white, + non-break, and non-escape) character. + for example, assume white space, break + character, and quote are the same as in the + above examples, and further, assume that + ^ is the escape character. then, in the + string ... + + ABC, ' DEF ^' GH' I ^ J K^ L ^ + + ... there are 7 tokens: + + 1) "ABC" + 2) " DEF ' GH" + 3) "I" + 4) " " (a lone blank) + 5) "J" + 6) "K L" + 7) "^" (passed as is at end of line) + + + OK, now that you have this background, here's how to call "tokenizer": + + result=tokenizer(flag,token,maxtok,string,white,break,quote,escape, + brkused,next,quoted) + + result: 0 if we haven't reached EOS (end of string), and + 1 if we have (this is an "int"). + + flag: right now, only the low order 3 bits are used. + 1 => convert non-quoted tokens to upper case + 2 => convert non-quoted tokens to lower case + 0 => do not convert non-quoted tokens + (this is a "char"). + + token: a character string containing the returned next token + (this is a "char[]"). + + maxtok: the maximum size of "token". characters beyond + "maxtok" are truncated (this is an "int"). + + string: the string to be parsed (this is a "char[]"). + + white: a string of the valid white spaces. example: + + char whitesp[]={" \t"}; + + blank and tab will be valid white space (this is + a "char[]"). + + break: a string of the valid break characters. example: + + char breakch[]={";,"}; + + semicolon and comma will be valid break characters + (this is a "char[]"). + + IMPORTANT: do not use the name "break" as a C + variable, as this is a reserved word in C. + + quote: a string of the valid quote characters. an example + would be + + char whitesp[]={"'\""); + + (this causes single and double quotes to be valid) + note that a token starting with one of these characters + needs the same quote character to terminate it. + + for example, + + "ABC ' + + is unterminated, but + + "DEF" and 'GHI' + + are properly terminated. note that different quote + characters can appear on the same line; only for + a given token do the quote characters have to be + the same (this is a "char[]"). + + escape: the escape character (NOT a string ... only one + allowed). use zero if none is desired (this is + a "char"). + + brkused: the break character used to terminate the current + token. if the token was quoted, this will be the + quote used. if the token is the last one on the + line, this will be zero (this is a pointer to a + "char"). + + next: this variable points to the first character of the + next token. it gets reset by "tokenizer" as it steps + through the string. set it to 0 upon initialization, + and leave it alone after that. you can change it + if you want to jump around in the string or re-parse + from the beginning, but be careful (this is a + pointer to an "int"). + + quoted: set to 1 (true) if the token was quoted and 0 (false) + if not. you may need this information (for example: + in C, a string with quotes around it is a character + string, while one without is an identifier). + + (this is a pointer to a "char"). +*/ + +/* states */ + +#define IN_WHITE 0 +#define IN_TOKEN 1 +#define IN_QUOTE 2 +#define IN_OZONE 3 + +int _p_state; /* current state */ +unsigned _p_flag; /* option flag */ +char _p_curquote; /* current quote char */ +int _p_tokpos; /* current token pos */ + +/* routine to find character in string ... used only by "tokenizer" */ + +int sindex(char ch,char *string) +{ + char *cp; + for(cp=string;*cp;++cp) + if(ch==*cp) + return (int)(cp-string); /* return postion of character */ + return -1; /* eol ... no match found */ +} + +/* routine to store a character in a string ... used only by "tokenizer" */ + +void chstore(char *string,int max,char ch) +{ + char c; + if(_p_tokpos>=0&&_p_tokpos=0) /* break */ + { + switch(_p_state) + { + case IN_WHITE: /* these are the same here ... */ + case IN_TOKEN: /* ... just get out */ + case IN_OZONE: /* ditto */ + ++(*next); + *brkused=brkchar[qp]; + goto byebye; + + case IN_QUOTE: /* just keep going */ + chstore(token,tokmax,c); + break; + } + } + else if((qp=sindex(c,quote))>=0) /* quote */ + { + switch(_p_state) + { + case IN_WHITE: /* these are identical, */ + _p_state=IN_QUOTE; /* change states */ + _p_curquote=quote[qp]; /* save quote char */ + *quoted=1; /* set to true as long as something is in quotes */ + break; + + case IN_QUOTE: + if(quote[qp]==_p_curquote) /* same as the beginning quote? */ + { + _p_state=IN_OZONE; + _p_curquote=0; + } + else + chstore(token,tokmax,c); /* treat as regular char */ + break; + + case IN_TOKEN: + case IN_OZONE: + *brkused=c; /* uses quote as break char */ + goto byebye; + } + } + else if((qp=sindex(c,white))>=0) /* white */ + { + switch(_p_state) + { + case IN_WHITE: + case IN_OZONE: + break; /* keep going */ + + case IN_TOKEN: + _p_state=IN_OZONE; + break; + + case IN_QUOTE: + chstore(token,tokmax,c); /* it's valid here */ + break; + } + } + else if(c==eschar) /* escape */ + { + nc=line[(*next)+1]; + if(nc==0) /* end of line */ + { + *brkused=0; + chstore(token,tokmax,c); + ++(*next); + goto byebye; + } + switch(_p_state) + { + case IN_WHITE: + --(*next); + _p_state=IN_TOKEN; + break; + + case IN_TOKEN: + case IN_QUOTE: + ++(*next); + chstore(token,tokmax,nc); + break; + + case IN_OZONE: + goto byebye; + } + } + else /* anything else is just a real character */ + { + switch(_p_state) + { + case IN_WHITE: + _p_state=IN_TOKEN; /* switch states */ + + case IN_TOKEN: /* these 2 are */ + case IN_QUOTE: /* identical here */ + chstore(token,tokmax,c); + break; + + case IN_OZONE: + goto byebye; + } + } + } /* end of main loop */ + +byebye: + token[_p_tokpos]=0; /* make sure token ends with EOS */ + + return 0; +} diff --git a/contrib/iptcutil/test.iptc b/contrib/iptcutil/test.iptc new file mode 100755 index 0000000000000000000000000000000000000000..a2605622ecf1e8eb7906378b3f7ae7196244d538 GIT binary patch literal 1107 zcmdT@&2G~`5Z-L43Plw?a6wwZNL-Le)1*ylQ*m+aBzArr6FV)fDxrv;ZE1Oc+dku=zqT=r5u) zOli3UljnIVC1W+PS)l^9f|<7T^k+}v+A34V>9Hdg1YeiQr#^#grj>Y*T+kXqh*pBI|kI%u4l zR;Syuo&I1ra>w3>i62bQ&OcsULUaG1b@=Y+xUJfGXvZ_A!-u>Ho}#KBbO|m{RgFim zfp$hTw3xVo37hj$vXWr2{<(oRr~a;eVRZ;TddU0|ZJisw?YO;Q>=OJ5Vap_#q3x;b z1RV?fzz8}%!PjWRGL6Oo!Ou|D8xIM7j<$N^v(CgFb=-j9EmS!q_yu~TRnx|kzshN^ z%Cks+H`fXhJU|sn@cVz1>!OYQdZVszz9W2~fPWy|J0Bqy6USn!AanfpmHv+Xv^CbivPQYgw3#EWvxVjoR?uFqxSL+!156^G&1qdGi literal 0 HcmV?d00001 diff --git a/contrib/mac-cw/Makefile.script b/contrib/mac-cw/Makefile.script new file mode 100755 index 0000000..bcbf1f8 --- /dev/null +++ b/contrib/mac-cw/Makefile.script @@ -0,0 +1,72 @@ + +(* You must manually set the top-level PATHNAME here; everything else is automatic *) + +set PATHNAME to "ritter:tiff-v3.4beta028:" +set PRINTING to "NO" + +set MKG3STATES to PATHNAME & "mkg3states.mw" +set LIBTIFF to PATHNAME & "libtiff-68K.mw" +set TIFFINFO to PATHNAME & "tiffinfo.mw" + +with timeout of 60000 seconds + tell application "MW C/C++ 68K 1.2.2" + + activate + + + (* Create tif_fax3sm.c file *) + Create Project {file MKG3STATES} + Add Files {"mkg3states.c", "mkg3_main.c", "getopt.c"} + Add Files {"MacOS.lib"} To Segment 2 + Add Files {"ANSI (4i/8d) C.68K.Lib"} To Segment 3 + Add Files {"SIOUX.68K.Lib"} To Segment 4 + Add Files {"MathLib68K (4i/8d).Lib"} To Segment 5 + + Set Preferences To {Activate CPlusPlus:false, ARM Conformance:false, ANSI Keywords Only:false, Require Function Prototypes:false, Expand Trigraph Sequences:false, Enums Always Ints:false, MPW Pointer Type Rules:false, Prefix File:"mac_main.h"} + Set Preferences To {Illegal Pragmas:false, Empty Declarations:false, Possible Errors:false, Unused Variables:false, Unused Arguments:false, Extra Commas:false, Extended Error Checking:false} + Set Preferences To {Code Model:2, Struct Alignment:0, MC68020 CodeGen:false, MC68881 CodeGen:false, Four Bytes Ints:true, Eight Byte Double:true, Peephole Optimizer:true, CSE Optimizer:true, Optimize For Size:true, Far Data:true, Use Profiler:false, Far Virtual Function Tables:false, Far String Constants:true} + Set Preferences To {MacsBug Symbols:2, Generate SYM File:false, Full Path In Sym Files:true, Generate Link Map:false, Generate A6 Stack Frames:true, The Debugger Aware:false, Link Single Segment:false, Fast Link:true} + Set Preferences To {Project Type:0, File Name:"mkg3states", File Creator:"????", File Type:"APPL"} + + Make Project + Run Project + Remove Binaries + Close Project + + + (* Create LIBTIFF *) + Create Project {file LIBTIFF} + Add Files {"tif_apple.c", "tif_aux.c", "tif_close.c", "tif_codec.c", "tif_compress.c", "tif_dumpmode.c", "tif_error.c", "tif_flush.c", "tif_lzw.c", "tif_next.c", "tif_open.c", "tif_packbits.c"} + Add Files {"tif_fax3.c"} To Segment 2 + Add Files {"tif_dirinfo.c", "tif_dir.c", "tif_dirwrite.c", "tif_dirread.c"} To Segment 3 + Add Files {"tif_predict.c", "tif_print.c", "tif_read.c", "tif_strip.c", "tif_swab.c", "tif_thunder.c", "tif_tile.c", "tif_version.c", "tif_zip.c", "tif_jpeg.c", "tif_warning.c", "tif_write.c"} To Segment 4 + Add Files {"tif_fax3sm.c"} To Segment 5 + Add Files {"tif_getimage.c"} To Segment 6 + + Set Preferences To {Activate CPlusPlus:false, ARM Conformance:false, ANSI Keywords Only:false, Require Function Prototypes:false, Expand Trigraph Sequences:false, Enums Always Ints:false, MPW Pointer Type Rules:false, Prefix File:"MacHeaders68K"} + Set Preferences To {Illegal Pragmas:false, Empty Declarations:false, Possible Errors:false, Unused Variables:false, Unused Arguments:false, Extra Commas:false, Extended Error Checking:false} + Set Preferences To {Code Model:2, Struct Alignment:0, MC68020 CodeGen:false, MC68881 CodeGen:false, Four Bytes Ints:true, Eight Byte Double:true, Peephole Optimizer:true, CSE Optimizer:true, Optimize For Size:true, Far Data:true, Use Profiler:false, Far Virtual Function Tables:false, Far String Constants:true} + Set Preferences To {MacsBug Symbols:2, Generate SYM File:true, Full Path In Sym Files:true, Generate Link Map:false, Generate A6 Stack Frames:true, The Debugger Aware:false, Link Single Segment:false, Fast Link:true} + Set Preferences To {Project Type:2, File Name:"libtiff-68K", File Creator:"????", File Type:"APPL"} + Make Project + Close Project + + Create Project {file TIFFINFO} + Add Files {"tiffinfo.c", "mac_main.c", "getopt.c"} + Add Files {"MacOS.lib"} To Segment 2 + Add Files {"ANSI (4i/8d) C.68K.Lib"} To Segment 3 + Add Files {"SIOUX.68K.Lib"} To Segment 4 + Add Files {"MathLib68K (4i/8d).Lib"} To Segment 5 + Add Files {"libtiff-68K"} To Segment 6 + + Set Preferences To {Activate CPlusPlus:false, ARM Conformance:false, ANSI Keywords Only:false, Require Function Prototypes:false, Expand Trigraph Sequences:false, Enums Always Ints:false, MPW Pointer Type Rules:false, Prefix File:"mac_main.h"} + Set Preferences To {Illegal Pragmas:false, Empty Declarations:false, Possible Errors:false, Unused Variables:false, Unused Arguments:false, Extra Commas:false, Extended Error Checking:false} + Set Preferences To {Code Model:2, Struct Alignment:0, MC68020 CodeGen:false, MC68881 CodeGen:false, Four Bytes Ints:true, Eight Byte Double:true, Peephole Optimizer:true, CSE Optimizer:true, Optimize For Size:true, Far Data:true, Use Profiler:false, Far Virtual Function Tables:false, Far String Constants:true} + Set Preferences To {MacsBug Symbols:2, Generate SYM File:false, Full Path In Sym Files:true, Generate Link Map:false, Generate A6 Stack Frames:true, The Debugger Aware:false, Link Single Segment:false, Fast Link:true} + Set Preferences To {Project Type:0, File Name:"tiffinfo", File Creator:"????", File Type:"APPL"} + + Make Project + Close Project + + end tell +end timeout diff --git a/contrib/mac-cw/mac_main.c b/contrib/mac-cw/mac_main.c new file mode 100755 index 0000000..86d549d --- /dev/null +++ b/contrib/mac-cw/mac_main.c @@ -0,0 +1,20 @@ +/* + * mac_main.c -- The REAL entry point which + * calls the tools main code. For the tools + * the symbol "main" has been #defined to "tool_main" + * so that this entry point may be used to access + * the user-input first. + */ + +#undef main + +int +main() +{ + int argc; + char **argv; + + argc=ccommand(&argv); + + return tool_main(argc,argv); // Call the tool "main()" routine +} diff --git a/contrib/mac-cw/mac_main.h b/contrib/mac-cw/mac_main.h new file mode 100755 index 0000000..5e75f08 --- /dev/null +++ b/contrib/mac-cw/mac_main.h @@ -0,0 +1,12 @@ +/* + * mac_main.h -- redefines main entry point + */ + +#ifndef _mac_main_h +#define _mac_main_h + +#undef main +#define main tool_main + +#endif /* _mac_main_h */ + diff --git a/contrib/mac-cw/metrowerks.note b/contrib/mac-cw/metrowerks.note new file mode 100755 index 0000000..5833857 --- /dev/null +++ b/contrib/mac-cw/metrowerks.note @@ -0,0 +1,84 @@ +---------------------------------------------------- +Build instructions for LIBTIFF - CodeWarrior (6.1): +---------------------------------------------------- + +Note: there is a bug in CW earlier than 6.1 which will generate +16-bit offset link errors for any projects using libtiff; you must +download the CodeWarrior 6.1 patch located at: + + ftp://ftp.metrowerks.com/pub/updates/metro-patches-61.hqx + +unpack the archive, insert the files and recompile the libraries +using the AppleScript provided. + + +1. Make sure that the directory containing these files is under + the "contrib" directory of the tiff folder; otherwise, some + access path preferences will need to be updated. + +2. The instructions below are for the 68k platform build. + A similar script can be put together for the PPC version, + or you can just directly convert the projects. Be sure to + use the native libraries as well. NOTE: if anyone cooks + up an equivalent script for PPC, send it to me and I'll include + it with the rest of the package. + +3. Open the file Makefile.script with an AppleScript Editor + and change the PATHNAME variable to point to your + top-level TIFF directory + +4. Run the Script. It will do the following things: + + 4a. Prompt you for the current location of the CodeWarrior 68K + program. + + 4b. Create the source file "tif_fax3sm.c": + + i) Build the project CW project mkg3states.cw. It will + produce a small program called mkg3states. Only a + 68k version is provided, since you only have to run + this code once, and it only takes a few seconds. + + ii) Run the built mkg3states program: + + The program will temporarily take over ALL of the CPU, so + don't panic. After a few seconds it will produce a file called + "tif_fax3sm.c". + + 4c. Build the library project libtiff-68K.mw, producing library + called libtiff-68K. + + 4d. Build program project tiffinfo.mw; it will produce a + program called tiffinfo, which can dump the tiff tags of + a named file. Passing in no arguments will dump a help file + for the program. It is unix-flavored, but hey, it works. + +5 When the script finishes, you will have a usable libtiff-68K + library, a passable "tiffinfo" program, and the projects used + to build them. Note that to get tiffinfo to work I have put + an include file in the project that redefines main(), and + then have a mac_main.c program that calls ccommand() first + and passes that to the actual main code. A real mac app, + of course, would never use this stuff at all... + + . The tiffinfo.mw project may be used as a template to build + most of the other libtiff tools, or your own code. When + modifying a copy of the project, you will most likely need + to update the "Access Paths" directory if it is moved out of + the contrib folder. + +6. If you are going to create a project from scratch, be sure + to set up the preferences with + + 4-byte ints + 8-byte doubles + Far Code/Far Data + Large Linking model + + and everything should work fine. If the console-style error + reports bother you, you can always override the error and + warning mechanism with TIFFSetErrorHandler to do something + more Mac-like. + +Questions, comments to Niles Ritter (ndr@tazboy.jpl.nasa.gov). + diff --git a/contrib/mac-cw/mkg3_main.c b/contrib/mac-cw/mkg3_main.c new file mode 100755 index 0000000..d580b37 --- /dev/null +++ b/contrib/mac-cw/mkg3_main.c @@ -0,0 +1,14 @@ +/* + * mkg3_main.c -- passes fake arguments into main + */ + +#undef main + +int +main() +{ + static char *argv[4] = { + "mkg3states", "-c", "const", "tif_fax3sm.c" }; + + return tool_main(4,argv); // Call the tool "main()" routine +} diff --git a/contrib/mac-cw/readme b/contrib/mac-cw/readme new file mode 100755 index 0000000..393728d --- /dev/null +++ b/contrib/mac-cw/readme @@ -0,0 +1,18 @@ +---------------------------------------------------- +Build instructions for LIBTIFF - CodeWarrior (6.1): +---------------------------------------------------- + +In this directory you will find a Makefile.script Applescript +file, which should be run in order to build the libtiff code +using MetroWerks CodeWarrior. + +Refer to the "metrowerks.note" instructions on building the +library for 68k and PowerPC native code, as well as building +some of the libtiff tools, which are rather unix-like, but +at least give an example of how to link everything together. + + Questions, comments, bug reports to Niles Ritter + (ndr@tazboy.jpl.nasa.gov). Sam Leffler takes no responsibility + for the viability of this stuff. + + -Niles. diff --git a/contrib/mac-cw/version.h b/contrib/mac-cw/version.h new file mode 100755 index 0000000..3230da5 --- /dev/null +++ b/contrib/mac-cw/version.h @@ -0,0 +1,4 @@ +#define VERSION \ +"LIBTIFF, Version 3.4beta028 \n"\ +"Copyright (c) 1988-1995 Sam Leffler\n"\ +"Copyright (c) 1991-1996 Silicon Graphics, Inc." diff --git a/contrib/mac-mpw/build.mpw b/contrib/mac-mpw/build.mpw new file mode 100755 index 0000000..edfe0e1 --- /dev/null +++ b/contrib/mac-mpw/build.mpw @@ -0,0 +1,47 @@ +# BUILD.mpw: +# +# Full build for Apple Macintosh Programmer's Workshop (MPW). +# +# This is an executable MPW script which creates various +# utilities, sets up the MPW makefiles and runs the builds. +# This script should be run at the top level TIFF directory with: +# +# directory ::: +# :contrib:mac-mpw:BUILD.mpw +# +# NOTE: The full build requires that MPW have at least 6 MB +# allocated to it to compile the CCITT Fax codec tables. To +# deactivate CCITT compression edit the file :contrib:mac:libtiff.make +# first and follow the directions for disabling Fax decoding. +# +# All TIFF tools are built as MPW tools, executable from the +# MPW shell or other compatible tool server. +# +# Written by: Niles Ritter (ndr@tazboy.jpl.nasa.gov). +# + +echo "############# Full Scratch Build for MPW #############" + +# Create the ascii->mpw translation tool; this is used to +# convert standard ASCII files into ones using the special +# MPW characters, which don't live comfortably in unix tar files. +# +echo "######## Creating ASCII->MPW translator ########" +set contrib ':contrib:mac-mpw:' +directory {contrib} +createmake -tool mactrans mactrans.c > dev:null +make -f mactrans.make | streamedit -e "/CSANELib/||/Math/||/ToolLibs/ del" > mactrans.bld +execute mactrans.bld > dev:null +delete -y mactrans.make mactrans.bld mactrans.c.o || set status 0 +directory ::: #An mpw trick for going up two levels + +# Create the top-level Makefile and run it +echo "######## Creating Makefile ########" +catenate {contrib}top.make | {contrib}mactrans > Makefile + +echo "######## Running Makefile ########" +make > build.mpw +execute build.mpw +echo "############# MPW Build Complete #############" +exit 0 + diff --git a/contrib/mac-mpw/libtiff.make b/contrib/mac-mpw/libtiff.make new file mode 100755 index 0000000..e0a9d52 --- /dev/null +++ b/contrib/mac-mpw/libtiff.make @@ -0,0 +1,202 @@ +# +# Tag Image File Format Library +# +# Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994 Sam Leffler +# Copyright (c) 1991, 1992, 1993, 1994 Silicon Graphics, Inc. +# +# 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. +# + +# +# Makefile for Mac using MPW 3.3.1 and MPW C 3.2.4 +# +# Note: This file must be run through "mactrans" before it can +# be recognized by MPW as a valid makefile. The problem is that MPW +# uses special non-ASCII characters, which tend to get mangled when stored +# in unix tar files, etc. "mactrans" is built as part of the TIFF MPW build. +# +# + +DEPTH = :: + +# FAX Options: If you do not wish to include the FAX options, uncomment +# the first four definitions and comment out the next four +# definitions. Note that to build programs with the FAX libraries you +# have to include "-model far" in your compile and link statements. +# +# Also, to build the fax code (including the tif_fax3sm.c file, which is +# created by the MPW tool "mkg3states", also built below), you will +# need to size the MPW program up to about 6 megabytes or so. + +#FAX_OPTIONS = +#FAX_OBJECTS = +#FAX_SOURCES = tif_fax3.c +#FAX_CONFIG = + +FAX_OPTIONS = -model far +FAX_OBJECTS = tif_fax3.c.o tif_fax3sm.c.o +FAX_SOURCES = tif_fax3.c tif_fax3sm.c +FAX_CONFIG = -d CCITT_SUPPORT + +NULL= + +RM = delete -y -i +COPTS = + +LIBPORT=::port:libport.o + +# +.c.o %c4 .c + {C} -model far {CFLAGS} -s {Default} {DepDir}{Default}.c -o {TargDir}{Default}.c.o + + +CONF_LIBRARY= %b6 + -d HAVE_IEEEFP=1 %b6 + -d BSDTYPES + +CONF_COMPRESSION= %b6 + {FAX_CONFIG} %b6 + -d COMPRESSION_SUPPORT %b6 + -d PACKBITS_SUPPORT %b6 + -d LZW_SUPPORT %b6 + -d THUNDER_SUPPORT %b6 + -d NEXT_SUPPORT + +CFLAGS= {FAX_OPTIONS} {IPATH} {CONF_LIBRARY} {CONF_COMPRESSION} + +INCS= tiff.h tiffio.h + +SRCS= %b6 + {FAX_SOURCES} %b6 + tif_apple.c %b6 + tif_aux.c %b6 + tif_close.c %b6 + tif_codec.c %b6 + tif_compress.c %b6 + tif_dir.c %b6 + tif_dirinfo.c %b6 + tif_dirread.c %b6 + tif_dirwrite.c %b6 + tif_dumpmode.c %b6 + tif_error.c %b6 + tif_getimage.c %b6 + tif_jpeg.c %b6 + tif_flush.c %b6 + tif_lzw.c %b6 + tif_next.c %b6 + tif_open.c %b6 + tif_packbits.c %b6 + tif_predict.c %b6 + tif_print.c %b6 + tif_read.c %b6 + tif_swab.c %b6 + tif_strip.c %b6 + tif_thunder.c %b6 + tif_tile.c %b6 + tif_version.c %b6 + tif_warning.c %b6 + tif_write.c %b6 + tif_zip.c %b6 + {NULL} + +OBJS= %b6 + {FAX_OBJECTS} %b6 + tif_apple.c.o %b6 + tif_aux.c.o %b6 + tif_close.c.o %b6 + tif_codec.c.o %b6 + tif_compress.c.o %b6 + tif_dir.c.o %b6 + tif_dirinfo.c.o %b6 + tif_dirread.c.o %b6 + tif_dirwrite.c.o %b6 + tif_dumpmode.c.o %b6 + tif_error.c.o %b6 + tif_getimage.c.o %b6 + tif_jpeg.c.o %b6 + tif_flush.c.o %b6 + tif_lzw.c.o %b6 + tif_next.c.o %b6 + tif_open.c.o %b6 + tif_packbits.c.o %b6 + tif_predict.c.o %b6 + tif_print.c.o %b6 + tif_read.c.o %b6 + tif_swab.c.o %b6 + tif_strip.c.o %b6 + tif_thunder.c.o %b6 + tif_tile.c.o %b6 + tif_version.c.o %b6 + tif_warning.c.o %b6 + tif_write.c.o %b6 + tif_zip.c.o %b6 + {NULL} + +ALL=libtiff.o + +all %c4 {ALL} + +libtiff.o %c4 {OBJS} + Lib {OBJS} -o libtiff.o + + +{OBJS} %c4 tiffio.h tiff.h tiffcomp.h tiffiop.h tiffconf.h + +# +# The finite state machine tables used by the G3/G4 decoders +# are generated by the mkg3states program. On systems without +# make these rules have to be manually carried out. +# +tif_fax3sm.c %c4 mkg3states tif_fax3.h + {RM} tif_fax3sm.c || set status 0 + :mkg3states -c const tif_fax3sm.c + +mkg3states.c.o %c4 mkg3states.c + C -model far mkg3states.c -o mkg3states.c.o + +mkg3states %c4%c4 mkg3states.c.o + Link -model far -d -c 'MPS ' -t MPST %b6 + mkg3states.c.o %b6 + {LIBPORT} %b6 + "{CLibraries}"StdClib.o %b6 + "{Libraries}"Stubs.o %b6 + "{Libraries}"Runtime.o %b6 + "{Libraries}"Interface.o %b6 + -o mkg3states + +ALPHA = "{DEPTH}dist:tiff.alpha" +VERSION = "{DEPTH}VERSION" + +version.h %c4 {VERSION} {ALPHA} + Set VERSION1 `catenate {VERSION}` + Set VERSION2 "{VERSION1}`streamedit -e "1 rep /%a5%c5 %c5 (%c5)%a81/ %a81" {ALPHA}`" + delete -y -i version.h || set status 0 + echo '#define VERSION "LIBTIFF, Version' {VERSION2} '\nCopyright (c) 1988-1995 Sam Leffler\nCopyright (c) 1991-1995 Silicon Graphics, Inc."' >version.h + +tif_version.c.o %c4 version.h + +clean %c4 + {RM} {ALL} || set status 0 + {RM} {OBJS} || set status 0 + {RM} mkg3states || set status 0 + {RM} mkg3states.c.o || set status 0 + {RM} tif_fax3sm.c%c5 || set status 0 + {RM} version.h || set status 0 + diff --git a/contrib/mac-mpw/mactrans.c b/contrib/mac-mpw/mactrans.c new file mode 100755 index 0000000..e0e508d --- /dev/null +++ b/contrib/mac-mpw/mactrans.c @@ -0,0 +1,56 @@ +/* + * mactrans.c -- Hack filter used to generate MPW files + * with special characters from pure ASCII, denoted "%nn" + * where nn is hex. (except for "%%", which is literal '%'). + * + * calling sequence: + * + * catenate file | mactrans [-toascii | -fromascii] > output + * + * Written by: Niles Ritter. + */ +#include +#include +#include + +void to_ascii(void); +void from_ascii(void); + +main(int argc, char *argv[]) +{ + if (argc<2 || argv[1][1]=='f') from_ascii(); + else to_ascii(); + exit (0); +} + +void from_ascii(void) +{ + char c; + int d; + while ((c=getchar())!=EOF) + { + if (c!='%' || (c=getchar())=='%') putchar(c); + else + { + ungetc(c,stdin); + scanf("%2x",&d); + *((unsigned char *)&c) = d; + putchar(c); + } + } +} + +void to_ascii(void) +{ + char c; + int d; + while ((c=getchar())!=EOF) + { + if (isascii(c)) putchar (c); + else + { + d = *((unsigned char *)&c); + printf("%%%2x",d); + } + } +} diff --git a/contrib/mac-mpw/port.make b/contrib/mac-mpw/port.make new file mode 100755 index 0000000..9d31cf9 --- /dev/null +++ b/contrib/mac-mpw/port.make @@ -0,0 +1,53 @@ +# +# Tag Image File Format Library +# +# Copyright (c) 1995 Sam Leffler +# Copyright (c) 1995 Silicon Graphics, Inc. +# +# 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. +# +DEPTH= :: +SRCDIR= : + +NULL = +CC = C +AR = Lib +AROPTS = +RM= delete -y + +IPATH = -I {DEPTH} -I {SRCDIR} +COPTS = +OPTIMIZER= +CFLAGS = {COPTS} {OPTIMIZER} {IPATH} + +CFILES = +OBJECTS = getopt.c.o +TARGETS = libport.o + +.c.o %c4 .c + {CC} -model far {COptions} {CFLAGS} -s {Default} {DepDir}{Default}.c -o {TargDir}{Default}.c.o + +all %c4 {TARGETS} + +libport.o %c4 {OBJECTS} + {AR} {OBJECTS} -o libport.o + +clean %c4 + {RM} {TARGETS} {OBJECTS} || set status 0 diff --git a/contrib/mac-mpw/readme b/contrib/mac-mpw/readme new file mode 100755 index 0000000..23a05a5 --- /dev/null +++ b/contrib/mac-mpw/readme @@ -0,0 +1,20 @@ +###################### +About contrib:mac-mpw: +###################### + +This directory contains all of the utilities and makefile source +to build the LIBTIFF library and tools from the MPW Shell. The +file BUILD.mpw in this directory is an executable script +which uses all of these files to create the MPW makefiles and +run them. + +The .make files are not MPW makefiles as such, +but are when run through the "mactrans" program, which turns +the ascii "%nn" metacharacters into the standard weird MPW +make characters. + +This translation trick is necessary to protect the files when +they are put into unix tarfiles, which tend to mangle the +special characters. + + --Niles Ritter (ndr@tazboy.jpl.nasa.gov) diff --git a/contrib/mac-mpw/tools.make b/contrib/mac-mpw/tools.make new file mode 100755 index 0000000..053dbf0 --- /dev/null +++ b/contrib/mac-mpw/tools.make @@ -0,0 +1,138 @@ +# +# Tag Image File Format Library +# +# Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994 Sam Leffler +# Copyright (c) 1991, 1992, 1993, 1994 Silicon Graphics, Inc. +# +# 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 Stanford 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. +# + +# +# Makefile for Mac using MPW 3.2.3 and MPW C 3.2.4 +# +COPTS = -model far + +.c.o %c4 .c + {C} {COPTS} {CFLAGS} -s {Default} {DepDir}{Default}.c -o {TargDir}{Default}.c.o + +RM = delete -y -i + +CONF_LIBRARY= %b6 + -d USE_CONST=0 %b6 + -d BSDTYPES +NULL= + +IPATH= -I ::libtiff + +CFLAGS= -w -m {IPATH} {CONF_LIBRARY} + +LIBPORT= ::port:libport.o + +LOptions= -model far -w -srt -d -c 'MPS ' -t MPST + +LIBTIFF= ::libtiff:libtiff.o + +LIBS= {LIBTIFF} %b6 + {LIBPORT} %b6 + "{CLibraries}"CSANELib.o %b6 + "{CLibraries}"Math.o %b6 + "{CLibraries}"StdClib.o %b6 + "{Libraries}"Stubs.o %b6 + "{Libraries}"Runtime.o %b6 + "{Libraries}"Interface.o %b6 + "{Libraries}"ToolLibs.o %b6 + {NULL} + +SRCS= %b6 + pal2rgb.c %b6 + ras2tiff.c %b6 + thumbnail.c %b6 + tiff2bw.c %b6 + tiff2ps.c %b6 + tiffcmp.c %b6 + tiffcp.c %b6 + tiffdither.c %b6 + tiffdump.c %b6 + tiffinfo.c %b6 + tiffmedian.c %b6 + {NULL} + +MACHALL=ras2tiff + +ALL= %b6 + tiffinfo %b6 + tiffcmp %b6 + tiffcp %b6 + tiffdump %b6 + tiffmedian %b6 + tiff2bw %b6 + tiffdither %b6 + tiff2ps %b6 + pal2rgb %b6 + gif2tiff %b6 + {MACHALL} + +all %c4 {ALL} + +tiffinfo %c4 tiffinfo.c.o {LIBTIFF} + Link {LOptions} tiffinfo.c.o {LIBS} -o tiffinfo + +tiffcmp %c4 tiffcmp.c.o {LIBTIFF} + Link {LOptions} tiffcmp.c.o {LIBS} -o tiffcmp + +tiffcp %c4 tiffcp.c.o {LIBTIFF} + Link {LOptions} tiffcp.c.o {LIBS} -o tiffcp + +tiffdump %c4 tiffdump.c.o {LIBTIFF} + Link {LOptions} tiffdump.c.o {LIBS} -o tiffdump + +tiffmedian %c4 tiffmedian.c.o {LIBTIFF} + Link {LOptions} tiffmedian.c.o {LIBS} -o tiffmedian + +tiff2ps %c4 tiff2ps.c.o {LIBTIFF} + Link {LOptions} tiff2ps.c.o {LIBS} -o tiff2ps + +# junky stuff... +# convert RGB image to B&W +tiff2bw %c4 tiff2bw.c.o {LIBTIFF} + Link {LOptions} tiff2bw.c.o {LIBS} -o tiff2bw + +# convert B&W image to bilevel w/ FS dithering +tiffdither %c4 tiffdither.c.o {LIBTIFF} + Link {LOptions} tiffdither.c.o {LIBS} -o tiffdither + +# GIF converter +gif2tiff %c4 gif2tiff.c.o {LIBTIFF} + Link {LOptions} gif2tiff.c.o {LIBS} -o gif2tiff + +# convert Palette image to RGB +pal2rgb %c4 pal2rgb.c.o {LIBTIFF} + Link {LOptions} pal2rgb.c.o {LIBS} -o pal2rgb + +# Sun rasterfile converter +ras2tiff %c4 ras2tiff.c.o {LIBTIFF} + Link {LOptions} ras2tiff.c.o {LIBS} -o ras2tiff + +# generate thumbnail images from fax +thumbnail %c4 thumbnail.c.o {LIBTIFF} + Link {LOptions} thumbnail.c.o {LIBS} -o thumbnail + +clean %c4 + {RM} {ALL} %c5.c.o ycbcr diff --git a/contrib/mac-mpw/top.make b/contrib/mac-mpw/top.make new file mode 100755 index 0000000..27ab5ec --- /dev/null +++ b/contrib/mac-mpw/top.make @@ -0,0 +1,133 @@ +# +# Tag Image File Format Library +# +# Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994 Sam Leffler +# Copyright (c) 1991, 1992, 1993, 1994 Silicon Graphics, Inc. +# +# 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 Stanford 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. +# + +# +# Makefile for Mac using MPW 3.2.3 and MPW C 3.2.4 +# +# +# Written by: Niles D. Ritter +# + +RM= delete -y -i +PORT=:port: +LIBTIFF=:libtiff: +TOOLS=:tools: +CONTRIB=:contrib:mac-mpw: + +MACTRANS="{CONTRIB}mactrans" + +NULL= + +MAKEFILES = %b6 + {PORT}Makefile %b6 + {LIBTIFF}Makefile %b6 + {TOOLS}Makefile %b6 + {NULL} + +all %c4 PORT LIBTIFF TOOLS + +MAKEFILES %c4 {MAKEFILES} +TOOLS %c4 LIBTIFF + +LIBTIFF %c4 PORT + +# Create the port routines +PORT %c4 {PORT}Makefile + directory {PORT} + (make || set status 0) > build.mpw + set echo 1 + execute build.mpw + set echo 0 + {RM} build.mpw || set status 0 + directory :: + +# Create the port routines +LIBTIFF %c4 {LIBTIFF}Makefile + directory {LIBTIFF} + (make || set status 0) > build.mpw + set echo 1 + execute build.mpw + set echo 0 + {RM} build.mpw || set status 0 + directory :: + +# Create the tools +TOOLS %c4 {TOOLS}Makefile + directory {TOOLS} + (make || set status 0) > build.mpw + set echo 1 + execute build.mpw + set echo 0 + {RM} build.mpw || set status 0 + directory :: + +# Makefile dependencies +{PORT}Makefile %c4 {CONTRIB}port.make + catenate {CONTRIB}port.make | {MACTRANS} > {PORT}Makefile + +{LIBTIFF}Makefile %c4 {CONTRIB}libtiff.make + catenate {CONTRIB}libtiff.make | {MACTRANS} > {LIBTIFF}Makefile + +{TOOLS}Makefile %c4 {CONTRIB}tools.make + catenate {CONTRIB}tools.make | {MACTRANS} > {TOOLS}Makefile + + +clean %c4 clean.port clean.contrib clean.libtiff clean.tools clean.make + +clean.port %c4 + directory {PORT} + (make clean || set status 0) > purge + purge + {RM} purge || set status 0 + {RM} Makefile || set status 0 + {RM} build.mpw || set status 0 + cd :: + +clean.contrib %c4 + {RM} {MACTRANS} || set status 0 + +clean.libtiff %c4 + directory {LIBTIFF} + (make clean || set status 0) > purge + purge + {RM} purge || set status 0 + {RM} Makefile || set status 0 + {RM} build.mpw || set status 0 + cd :: + +clean.tools %c4 + directory {TOOLS} + (make clean || set status 0) > purge + purge + {RM} purge || set status 0 + {RM} Makefile || set status 0 + {RM} build.mpw || set status 0 + cd :: + +clean.make %c4 + {RM} {MAKEFILES} || set status 0 + {RM} build.mpw || set status 0 + diff --git a/contrib/mfs/mfs_file.c b/contrib/mfs/mfs_file.c new file mode 100755 index 0000000..1723de1 --- /dev/null +++ b/contrib/mfs/mfs_file.c @@ -0,0 +1,579 @@ +/* +-------------------------------------------------------------------------------- +- Module : mem_file.c +- Description : A general purpose library for manipulating a memory area +- as if it were a file. +- mfs_ stands for memory file system. +- Author : Mike Johnson - Banctec AB 03/07/96 +- +-------------------------------------------------------------------------------- +*/ + +/* + +Copyright (c) 1996 Mike Johnson +Copyright (c) 1996 BancTec AB + +Permission to use, copy, modify, distribute, and sell this software +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 +Mike Johnson and BancTec may not be used in any advertising or +publicity relating to the software. + +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 MIKE JOHNSON OR BANCTEC 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. + +*/ + + +/* +-------------------------------------------------------------------------------- +- Includes +-------------------------------------------------------------------------------- +*/ + +#include +#include +#include + +/* +-------------------------------------------------------------------------------- +- Definitions +-------------------------------------------------------------------------------- +*/ + +#define MAX_BUFFS 20 +#define FALSE 0 +#define TRUE 1 + +/* +-------------------------------------------------------------------------------- +- Globals +-------------------------------------------------------------------------------- +*/ + +static char *buf[MAX_BUFFS]; /* Memory for each open buf */ +static long buf_off[MAX_BUFFS]; /* File pointer for each buf */ +static long buf_size[MAX_BUFFS]; /* Count of bytes allocated for each buf */ +static long fds[MAX_BUFFS]; /* File descriptor status */ +static int buf_mode[MAX_BUFFS]; /* Mode of buffer (r, w, a) */ + +static int library_init_done = FALSE; + + +/* +-------------------------------------------------------------------------------- +- Function prototypes +-------------------------------------------------------------------------------- +*/ + +int mfs_open (void *ptr, int size, char *mode); +int mfs_lseek (int fd, int offset, int whence); +int mfs_read (int fd, void *buf, int size); +int mfs_write (int fd, void *buf, int size); +int mfs_size (int fd); +int mfs_map (int fd, char **addr, size_t *len); +int mfs_unmap (int fd); +int mfs_close (int fd); +static int extend_mem_file (int fd, int size); +static void mem_init (); + +/* +-------------------------------------------------------------------------------- +- Function code +-------------------------------------------------------------------------------- +*/ + +/* +-------------------------------------------------------------------------------- +- Function : mfs_open () +- +- Arguments : Pointer to allocated buffer, initial size of buffer, +- mode spec (r, w, a) +- +- Returns : File descriptor or -1 if error. +- +- Description : Register this area of memory (which has been allocated +- and has a file read into it) under the mem_file library. +- A file descriptor is returned which can the be passed +- back to TIFFClientOpen and used as if it was a disk +- based fd. +- If the call is for mode 'w' then pass (void *)NULL as +- the buffer and zero size and the library will +- allocate memory for you. +- If the mode is append then pass (void *)NULL and size +- zero or with a valid address. +- +-------------------------------------------------------------------------------- +*/ + +int mfs_open (void *buffer, int size, char *mode) +{ + int ret, i; + void *tmp; + + if (library_init_done == FALSE) + { + mem_init (); + library_init_done = TRUE; + } + + ret = -1; + + /* Find a free fd */ + + for (i = 0; i < MAX_BUFFS; i++) + { + if (fds[i] == -1) + { + ret = i; + break; + } + } + + if (i == MAX_BUFFS) /* No more free descriptors */ + { + ret = -1; + errno = EMFILE; + } + + if (ret >= 0 && *mode == 'r') + { + if (buffer == (void *)NULL) + { + ret = -1; + errno = EINVAL; + } + else + { + buf[ret] = (char *)buffer; + buf_size[ret] = size; + buf_off[ret] = 0; + } + } + else if (ret >= 0 && *mode == 'w') + { + + if (buffer != (void *)NULL) + { + ret = -1; + errno = EINVAL; + } + + else + { + tmp = malloc (0); /* Get a pointer */ + if (tmp == (void *)NULL) + { + ret = -1; + errno = EDQUOT; + } + else + { + buf[ret] = (char *)tmp; + buf_size[ret] = 0; + buf_off[ret] = 0; + } + } + } + else if (ret >= 0 && *mode == 'a') + { + if (buffer == (void *) NULL) /* Create space for client */ + { + tmp = malloc (0); /* Get a pointer */ + if (tmp == (void *)NULL) + { + ret = -1; + errno = EDQUOT; + } + else + { + buf[ret] = (char *)tmp; + buf_size[ret] = 0; + buf_off[ret] = 0; + } + } + else /* Client has file read in already */ + { + buf[ret] = (char *)buffer; + buf_size[ret] = size; + buf_off[ret] = 0; + } + } + else /* Some other invalid combination of parameters */ + { + ret = -1; + errno = EINVAL; + } + + if (ret != -1) + { + fds[ret] = 0; + buf_mode[ret] = *mode; + } + + return (ret); +} + +/* +-------------------------------------------------------------------------------- +- Function : mfs_lseek () +- +- Arguments : File descriptor, offset, whence +- +- Returns : as per man lseek (2) +- +- Description : Does the same as lseek (2) except on a memory based file. +- Note: the memory area will be extended if the caller +- attempts to seek past the current end of file (memory). +- +-------------------------------------------------------------------------------- +*/ + +int mfs_lseek (int fd, int offset, int whence) +{ + int ret; + long test_off; + + if (fds[fd] == -1) /* Not open */ + { + ret = -1; + errno = EBADF; + } + else if (offset < 0 && whence == SEEK_SET) + { + ret = -1; + errno = EINVAL; + } + else + { + switch (whence) + { + case SEEK_SET: + if (offset > buf_size[fd]) + extend_mem_file (fd, offset); + buf_off[fd] = offset; + ret = offset; + break; + + case SEEK_CUR: + test_off = buf_off[fd] + offset; + + if (test_off < 0) + { + ret = -1; + errno = EINVAL; + } + else + { + if (test_off > buf_size[fd]) + extend_mem_file (fd, test_off); + buf_off[fd] = test_off; + ret = test_off; + } + break; + + case SEEK_END: + test_off = buf_size[fd] + offset; + + if (test_off < 0) + { + ret = -1; + errno = EINVAL; + } + else + { + if (test_off > buf_size[fd]) + extend_mem_file (fd, test_off); + buf_off[fd] = test_off; + ret = test_off; + } + break; + + default: + errno = EINVAL; + ret = -1; + break; + } + } + + return (ret); +} + +/* +-------------------------------------------------------------------------------- +- Function : mfs_read () +- +- Arguments : File descriptor, buffer, size +- +- Returns : as per man read (2) +- +- Description : Does the same as read (2) except on a memory based file. +- Note: An attempt to read past the end of memory currently +- allocated to the file will return 0 (End Of File) +- +-------------------------------------------------------------------------------- +*/ + +int mfs_read (int fd, void *clnt_buf, int size) +{ + int ret; + + if (fds[fd] == -1 || buf_mode[fd] != 'r') + { + /* File is either not open, or not opened for read */ + + ret = -1; + errno = EBADF; + } + else if (buf_off[fd] + size > buf_size[fd]) + { + ret = 0; /* EOF */ + } + else + { + memcpy (clnt_buf, (void *) (buf[fd] + buf_off[fd]), size); + buf_off[fd] = buf_off[fd] + size; + ret = size; + } + + return (ret); +} + +/* +-------------------------------------------------------------------------------- +- Function : mfs_write () +- +- Arguments : File descriptor, buffer, size +- +- Returns : as per man write (2) +- +- Description : Does the same as write (2) except on a memory based file. +- Note: the memory area will be extended if the caller +- attempts to write past the current end of file (memory). +- +-------------------------------------------------------------------------------- +*/ + +int mfs_write (int fd, void *clnt_buf, int size) +{ + int ret; + + if (fds[fd] == -1 || buf_mode[fd] == 'r') + { + /* Either the file is not open or it is opened for reading only */ + + ret = -1; + errno = EBADF; + } + else if (buf_mode[fd] == 'w') + { + /* Write */ + + if (buf_off[fd] + size > buf_size[fd]) + { + extend_mem_file (fd, buf_off[fd] + size); + buf_size[fd] = (buf_off[fd] + size); + } + + memcpy ((buf[fd] + buf_off[fd]), clnt_buf, size); + buf_off[fd] = buf_off[fd] + size; + + ret = size; + } + else + { + /* Append */ + + if (buf_off[fd] != buf_size[fd]) + buf_off[fd] = buf_size[fd]; + + extend_mem_file (fd, buf_off[fd] + size); + buf_size[fd] += size; + + memcpy ((buf[fd] + buf_off[fd]), clnt_buf, size); + buf_off[fd] = buf_off[fd] + size; + + ret = size; + } + + return (ret); +} + +/* +-------------------------------------------------------------------------------- +- Function : mfs_size () +- +- Arguments : File descriptor +- +- Returns : integer file size +- +- Description : This function returns the current size of the file in bytes. +- +-------------------------------------------------------------------------------- +*/ + +int mfs_size (int fd) +{ + int ret; + + if (fds[fd] == -1) /* Not open */ + { + ret = -1; + errno = EBADF; + } + else + ret = buf_size[fd]; + + return (ret); +} + +/* +-------------------------------------------------------------------------------- +- Function : mfs_map () +- +- Arguments : File descriptor, ptr to address, ptr to length +- +- Returns : Map status (succeeded or otherwise) +- +- Description : This function tells the client where the file is mapped +- in memory and what size the mapped area is. It is provided +- to satisfy the MapProc function in libtiff. It pretends +- that the file has been mmap (2)ped. +- +-------------------------------------------------------------------------------- +*/ + +int mfs_map (int fd, char **addr, size_t *len) +{ + int ret; + + if (fds[fd] == -1) /* Not open */ + { + ret = -1; + errno = EBADF; + } + else + { + *addr = buf[fd]; + *len = buf_size[fd]; + ret = 0; + } + + return (ret); +} + +/* +-------------------------------------------------------------------------------- +- Function : mfs_unmap () +- +- Arguments : File descriptor +- +- Returns : UnMap status (succeeded or otherwise) +- +- Description : This function does nothing as the file is always +- in memory. +- +-------------------------------------------------------------------------------- +*/ + +int mfs_unmap (int fd) +{ + return (0); +} + +/* +-------------------------------------------------------------------------------- +- Function : mfs_close () +- +- Arguments : File descriptor +- +- Returns : close status (succeeded or otherwise) +- +- Description : Close the open memory file. (Make fd available again.) +- +-------------------------------------------------------------------------------- +*/ + +int mfs_close (int fd) +{ + int ret; + + if (fds[fd] == -1) /* Not open */ + { + ret = -1; + errno = EBADF; + } + else + { + fds[fd] = -1; + ret = 0; + } + + return (ret); +} + +/* +-------------------------------------------------------------------------------- +- Function : extend_mem_file () +- +- Arguments : File descriptor, length to extend to. +- +- Returns : 0 - All OK, -1 - realloc () failed. +- +- Description : Increase the amount of memory allocated to a file. +- +-------------------------------------------------------------------------------- +*/ + +static int extend_mem_file (int fd, int size) +{ + void *new_mem; + int ret; + + if ((new_mem = realloc (buf[fd], size)) == (void *) NULL) + ret = -1; + else + { + buf[fd] = (char *) new_mem; + ret = 0; + } + + return (ret); +} + +/* +-------------------------------------------------------------------------------- +- Function : mem_init () +- +- Arguments : None +- +- Returns : void +- +- Description : Initialise the library. +- +-------------------------------------------------------------------------------- +*/ + +static void mem_init () +{ + int i; + + for (i = 0; i < MAX_BUFFS; i++) + { + fds[i] = -1; + buf[i] = (char *)NULL; + buf_size[i] = 0; + buf_off[i] = 0; + } +} + diff --git a/contrib/mfs/readme b/contrib/mfs/readme new file mode 100755 index 0000000..827e047 --- /dev/null +++ b/contrib/mfs/readme @@ -0,0 +1,37 @@ +Date: Mon, 23 Jun 1997 13:30:48 +0200 +To: + +From: "Mike Johnson" +Subject: libtiff - Thanks + +Return-Path: mikehunt@swipnet.se +Delivery-Date: Mon, 23 Jun 1997 06:53:39 -0700 + +Hi Sam, + +I noticed in the README from libtiff that you would like to know about +what people have done with libtiff, so I thought I would drop you a +line. + +We have used libtiff to create and convert TIFF images of financial +documents which are sent from and to major document processing systems +in Sweden and Denmark. + +I would like to express my deep gratitude to yourself and Sillicon +Graphics for making this excellent library available for public use. +There is obviously a lot of work that has gone in to libtiff and the +quality of the code and documentation is an example to others. + +One thing that libtiff did not do was work on a memory area rather than +files. In my applications I had already read a TIFF or other format +file in to memory and did not want to waste I/O writing it out again +for libtiff's benefit. I therefore constructed a set of functions to +pass up to TIFFClientOpen to simulate a file in memory. I have attached +my mfs (memory file system) source code for you to use or junk, as you +see fit. :-) + +Once again, thanks very much for making my life simpler. + +Best Regards, + +Mike Johnson. diff --git a/contrib/pds/readme b/contrib/pds/readme new file mode 100755 index 0000000..47db5f3 --- /dev/null +++ b/contrib/pds/readme @@ -0,0 +1,90 @@ +Date: Fri, 01 Aug 1997 20:14:52 MDT +To: Sam Leffler + +From: "Conrad J. Poelman (WSAT)" +Subject: Potential TIFF library additions + +Delivery-Date: Fri, 01 Aug 1997 19:21:06 -0700 + +Sam, + +You probably don't remember me, but I sent in a couple of bug fixes +regarding the TIFF library about a 16 months ago or so... + +I just wanted to send you two other additions that I have made to our +local version of the TIFF library in hopes that you will want to +incorporate them into your next major release of the TIFF library. +(These additions are based on TIFF version 3.4beta31, but they sit on +top of the library so they shouldn't be much trouble to incorporate them +into any more recent version.) They are internally documented to a +reasonable extent and we've been successfully using them in our code +here for over a year. If you think they would make good additions to the +TIFF library, I'd be happy to clean them up more, document them more, +and/or integrate them with the latest version of the TIFF library, but I +figured I'd see if you were interested in using them before I went to +all that trouble. + +TIFF Image Iterator +------------------- +Your ReadRGBA() routine works well for reading many different formats +(TILED, STIP, compressed or not, etc.) of the most basic types of data +(RGB, 8-bit greyscale, 8-bit colormapped) into an SGI-style data array, +and serves as a good template for users with other needs. I used it as +an exmaple of how to make an iterator which, rather than fill a data +array, calls an arbitrary user-supplied callback function for each +"chunk" of data - that "chunk" might be a strip or a tile, and might +have one sample-per-pixel or two, and might be 8-bit data or 16-bit or +24-bit. The callback function can do whatever it wants with the data - +store it in a big array, convert it to RGBA, or draw it directly to the +screen. I was able to use this iterator to read 16-bit greyscale and 32- +and 64-bit floating point data, which wasn't possible with ReadRGBA(). + +I have tested this routine with 8- and 16-bit greyscale data as well as +with 32- and 64-bit floating point data. I believe nearly all of our +data is organized in strips, so actually I'd appreciate it if you had +some tiled images that I could test it with. + +It should certainly be possible and would be cleanest to reimplement +ReadRGBA() in terms of the image iterator, but I haven't done that. + + +Private Sub-Directory Read/Write +-------------------------------- +TIFF-PL is a Phillips Laboratory extension to the TIFF tags that allows +us to store satellite imaging-specific information in a TIFF format, +such as the satellite's trajectory, the imaging time, etc. In order to +give us the flexibility to modify the tag definitions without getting +approval from the TIFF committee every time, we were given only three +TIFF tags - a PL signature, a PL version number, and PL directory +offset, which lists the position in the file at which to find a private +sub-directory of tags-value pairs. So I wrote two routines: +TIFFWritePrivateDataSubDirectory(), which takes a list of tags and a +"get" function and writes the tag values into the TIFF file, returning +the offset within the file at which it wrote the directory; and +TIFFReadPrivateDataSubDirectory(), which takes an offset, a list of +tags, and a "set" function and reads all the data from the private +directory. The functions themselves are pretty simple. (The files are +huge because I had to basically copy all of the tif_dirread.c and +tif_dirwrite.c files in order to access the various fetching routines +which were all declared static and therefore inaccessible in the TIFF +library.) + + +I'm including the four source files (tif_imgiter.h, tif_imgiter.c, +tif_pdsdirread.c, tif_pdsdirwrite.c) in case you want to take a look at +them. I can also send you some sample code that uses them if you like. +If you're interested in having them incorporated into the standard TIFF +library, I'd be happy to do that integration and clean up and document +the routines. (For example, I've already realized that instead of +limiting the SEP callback function to three bands (R,G,B) it should take +an array to enable the handling of n-banded multi-spectral data...) If +not, I'll just leave them as they are, since they work fine for us now. + +Holler if you have any questions. + +-- Conrad +__________________________________________________________________ + Capt Conrad J. Poelman PL/WSAT (Phillips Laboratory) + 505-846-4347 3550 Aberdeen Ave SE + (FAX) 505-846-4374 Kirtland AFB, NM 87117-5776 + diff --git a/contrib/pds/tif_imageiter.c b/contrib/pds/tif_imageiter.c new file mode 100755 index 0000000..50242b4 --- /dev/null +++ b/contrib/pds/tif_imageiter.c @@ -0,0 +1,518 @@ +/* $Header: /home/cvsroot/libtiff/contrib/pds/tif_imageiter.c,v 1.1.1.1 2000/06/24 19:10:17 tshead Exp $ */ + +/* + * Copyright (c) 1991-1996 Sam Leffler + * Copyright (c) 1991-1996 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library + * + * Written by Conrad J. Poelman, PL/WSAT, Kirtland AFB, NM on 26 Mar 96. + * + * This file contains code to allow a calling program to "iterate" over each + * pixels in an image as it is read from the file. The iterator takes care of + * reading strips versus (possibly clipped) tiles, decoding the information + * according to the decoding method, and so on, so that calling program can + * ignore those details. The calling program does, however, need to be + * conscious of the type of the pixel data that it is receiving. + * + * For reasons of efficiency, the callback function actually gets called for + * "blocks" of pixels rather than for individual pixels. The format of the + * callback arguments is given below. + * + * This code was taken from TIFFReadRGBAImage() in tif_getimage.c of the original + * TIFF distribution, and simplified and generalized to provide this general + * iteration capability. Those routines could certainly be re-implemented in terms + * of a TIFFImageIter if desired. + * + */ +#include "tiffiop.h" +#include "tif_imgiter.h" +#include +#include + +static int gtTileContig(TIFFImageIter*, void *udata, uint32, uint32); +static int gtTileSeparate(TIFFImageIter*, void *udata, uint32, uint32); +static int gtStripContig(TIFFImageIter*, void *udata, uint32, uint32); +static int gtStripSeparate(TIFFImageIter*, void *udata, uint32, uint32); + +static const char photoTag[] = "PhotometricInterpretation"; + +static int +isCCITTCompression(TIFF* tif) +{ + uint16 compress; + TIFFGetField(tif, TIFFTAG_COMPRESSION, &compress); + return (compress == COMPRESSION_CCITTFAX3 || + compress == COMPRESSION_CCITTFAX4 || + compress == COMPRESSION_CCITTRLE || + compress == COMPRESSION_CCITTRLEW); +} + +int +TIFFImageIterBegin(TIFFImageIter* img, TIFF* tif, int stop, char emsg[1024]) +{ + uint16* sampleinfo; + uint16 extrasamples; + uint16 planarconfig; + int colorchannels; + + img->tif = tif; + img->stoponerr = stop; + TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &img->bitspersample); + img->alpha = 0; + TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &img->samplesperpixel); + TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES, + &extrasamples, &sampleinfo); + if (extrasamples == 1) + switch (sampleinfo[0]) { + case EXTRASAMPLE_ASSOCALPHA: /* data is pre-multiplied */ + case EXTRASAMPLE_UNASSALPHA: /* data is not pre-multiplied */ + img->alpha = sampleinfo[0]; + break; + } + colorchannels = img->samplesperpixel - extrasamples; + TIFFGetFieldDefaulted(tif, TIFFTAG_PLANARCONFIG, &planarconfig); + if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &img->photometric)) { + switch (colorchannels) { + case 1: + if (isCCITTCompression(tif)) + img->photometric = PHOTOMETRIC_MINISWHITE; + else + img->photometric = PHOTOMETRIC_MINISBLACK; + break; + case 3: + img->photometric = PHOTOMETRIC_RGB; + break; + default: + sprintf(emsg, "Missing needed %s tag", photoTag); + return (0); + } + } + switch (img->photometric) { + case PHOTOMETRIC_PALETTE: + if (!TIFFGetField(tif, TIFFTAG_COLORMAP, + &img->redcmap, &img->greencmap, &img->bluecmap)) { + TIFFError(TIFFFileName(tif), "Missing required \"Colormap\" tag"); + return (0); + } + /* fall thru... */ + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: +/* This should work now so skip the check - BSR + if (planarconfig == PLANARCONFIG_CONTIG && img->samplesperpixel != 1) { + sprintf(emsg, + "Sorry, can not handle contiguous data with %s=%d, and %s=%d", + photoTag, img->photometric, + "Samples/pixel", img->samplesperpixel); + return (0); + } + */ + break; + case PHOTOMETRIC_YCBCR: + if (planarconfig != PLANARCONFIG_CONTIG) { + sprintf(emsg, "Sorry, can not handle YCbCr images with %s=%d", + "Planarconfiguration", planarconfig); + return (0); + } + /* It would probably be nice to have a reality check here. */ + { uint16 compress; + TIFFGetField(tif, TIFFTAG_COMPRESSION, &compress); + if (compress == COMPRESSION_JPEG && planarconfig == PLANARCONFIG_CONTIG) { + /* can rely on libjpeg to convert to RGB */ + /* XXX should restore current state on exit */ + TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB); + img->photometric = PHOTOMETRIC_RGB; + } + } + break; + case PHOTOMETRIC_RGB: + if (colorchannels < 3) { + sprintf(emsg, "Sorry, can not handle RGB image with %s=%d", + "Color channels", colorchannels); + return (0); + } + break; + case PHOTOMETRIC_SEPARATED: { + uint16 inkset; + TIFFGetFieldDefaulted(tif, TIFFTAG_INKSET, &inkset); + if (inkset != INKSET_CMYK) { + sprintf(emsg, "Sorry, can not handle separated image with %s=%d", + "InkSet", inkset); + return (0); + } + if (img->samplesperpixel != 4) { + sprintf(emsg, "Sorry, can not handle separated image with %s=%d", + "Samples/pixel", img->samplesperpixel); + return (0); + } + break; + } + default: + sprintf(emsg, "Sorry, can not handle image with %s=%d", + photoTag, img->photometric); + return (0); + } + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &img->width); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &img->height); + + TIFFGetFieldDefaulted(tif, TIFFTAG_ORIENTATION, &img->orientation); + switch (img->orientation) { + case ORIENTATION_BOTRIGHT: + case ORIENTATION_RIGHTBOT: /* XXX */ + case ORIENTATION_LEFTBOT: /* XXX */ + TIFFWarning(TIFFFileName(tif), "using bottom-left orientation"); + img->orientation = ORIENTATION_BOTLEFT; + /* fall thru... */ + case ORIENTATION_BOTLEFT: + break; + case ORIENTATION_TOPRIGHT: + case ORIENTATION_RIGHTTOP: /* XXX */ + case ORIENTATION_LEFTTOP: /* XXX */ + default: + TIFFWarning(TIFFFileName(tif), "using top-left orientation"); + img->orientation = ORIENTATION_TOPLEFT; + /* fall thru... */ + case ORIENTATION_TOPLEFT: + break; + } + + img->isContig = + !(planarconfig == PLANARCONFIG_SEPARATE && colorchannels > 1); + if (img->isContig) { + img->get = TIFFIsTiled(tif) ? gtTileContig : gtStripContig; + } else { + img->get = TIFFIsTiled(tif) ? gtTileSeparate : gtStripSeparate; + } + return (1); +} + +int +TIFFImageIterGet(TIFFImageIter* img, void *udata, uint32 w, uint32 h) +{ + if (img->get == NULL) { + TIFFError(TIFFFileName(img->tif), "No \"get\" routine setup"); + return (0); + } + if (img->callback.any == NULL) { + TIFFError(TIFFFileName(img->tif), + "No \"put\" routine setupl; probably can not handle image format"); + return (0); + } + return (*img->get)(img, udata, w, h); +} + +TIFFImageIterEnd(TIFFImageIter* img) +{ + /* Nothing to free... ? */ +} + +/* + * Read the specified image into an ABGR-format raster. + */ +int +TIFFReadImageIter(TIFF* tif, + uint32 rwidth, uint32 rheight, uint8* raster, int stop) +{ + char emsg[1024]; + TIFFImageIter img; + int ok; + + if (TIFFImageIterBegin(&img, tif, stop, emsg)) { + /* XXX verify rwidth and rheight against width and height */ + ok = TIFFImageIterGet(&img, raster, rwidth, img.height); + TIFFImageIterEnd(&img); + } else { + TIFFError(TIFFFileName(tif), emsg); + ok = 0; + } + return (ok); +} + + +/* + * Get an tile-organized image that has + * PlanarConfiguration contiguous if SamplesPerPixel > 1 + * or + * SamplesPerPixel == 1 + */ +static int +gtTileContig(TIFFImageIter* img, void *udata, uint32 w, uint32 h) +{ + TIFF* tif = img->tif; + ImageIterTileContigRoutine callback = img->callback.contig; + uint16 orientation; + uint32 col, row; + uint32 tw, th; + u_char* buf; + int32 fromskew; + uint32 nrow; + + buf = (u_char*) _TIFFmalloc(TIFFTileSize(tif)); + if (buf == 0) { + TIFFError(TIFFFileName(tif), "No space for tile buffer"); + return (0); + } + TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw); + TIFFGetField(tif, TIFFTAG_TILELENGTH, &th); + orientation = img->orientation; + for (row = 0; row < h; row += th) { + nrow = (row + th > h ? h - row : th); + for (col = 0; col < w; col += tw) { + if (TIFFReadTile(tif, buf, col, row, 0, 0) < 0 && img->stoponerr) + break; + if (col + tw > w) { + /* + * Tile is clipped horizontally. Calculate + * visible portion and skewing factors. + */ + uint32 npix = w - col; + fromskew = tw - npix; + (*callback)(img, udata, col, row, npix, nrow, fromskew, buf); + } else { + (*callback)(img, udata, col, row, tw, nrow, 0, buf); + } + } + } + _TIFFfree(buf); + return (1); +} + +/* + * Get an tile-organized image that has + * SamplesPerPixel > 1 + * PlanarConfiguration separated + * We assume that all such images are RGB. + */ +static int +gtTileSeparate(TIFFImageIter* img, void *udata, uint32 w, uint32 h) +{ + TIFF* tif = img->tif; + ImageIterTileSeparateRoutine callback = img->callback.separate; + uint16 orientation; + uint32 col, row; + uint32 tw, th; + u_char* buf; + u_char* r; + u_char* g; + u_char* b; + u_char* a; + tsize_t tilesize; + int32 fromskew; + int alpha = img->alpha; + uint32 nrow; + + tilesize = TIFFTileSize(tif); + buf = (u_char*) _TIFFmalloc(4*tilesize); + if (buf == 0) { + TIFFError(TIFFFileName(tif), "No space for tile buffer"); + return (0); + } + r = buf; + g = r + tilesize; + b = g + tilesize; + a = b + tilesize; + if (!alpha) + memset(a, 0xff, tilesize); + TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw); + TIFFGetField(tif, TIFFTAG_TILELENGTH, &th); + orientation = img->orientation; + for (row = 0; row < h; row += th) { + nrow = (row + th > h ? h - row : th); + for (col = 0; col < w; col += tw) { + if (TIFFReadTile(tif, r, col, row,0,0) < 0 && img->stoponerr) + break; + if (TIFFReadTile(tif, g, col, row,0,1) < 0 && img->stoponerr) + break; + if (TIFFReadTile(tif, b, col, row,0,2) < 0 && img->stoponerr) + break; + if (alpha && TIFFReadTile(tif,a,col,row,0,3) < 0 && img->stoponerr) + break; + if (col + tw > w) { + /* + * Tile is clipped horizontally. Calculate + * visible portion and skewing factors. + */ + uint32 npix = w - col; + fromskew = tw - npix; + (*callback)(img, udata, col, row, npix, nrow, fromskew, r, g, b, a); + } else { + (*callback)(img, udata, col, row, tw, nrow, 0, r, g, b, a); + } + } + } + _TIFFfree(buf); + return (1); +} + +/* + * Get a strip-organized image that has + * PlanarConfiguration contiguous if SamplesPerPixel > 1 + * or + * SamplesPerPixel == 1 + */ +static int +gtStripContig(TIFFImageIter* img, void *udata, uint32 w, uint32 h) +{ + TIFF* tif = img->tif; + ImageIterTileContigRoutine callback = img->callback.contig; + uint16 orientation; + uint32 row, nrow; + u_char* buf; + uint32 rowsperstrip; + uint32 imagewidth = img->width; + tsize_t scanline; + int32 fromskew; + + buf = (u_char*) _TIFFmalloc(TIFFStripSize(tif)); + if (buf == 0) { + TIFFError(TIFFFileName(tif), "No space for strip buffer"); + return (0); + } + orientation = img->orientation; + TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + scanline = TIFFScanlineSize(tif); + fromskew = (w < imagewidth ? imagewidth - w : 0); + for (row = 0; row < h; row += rowsperstrip) { + nrow = (row + rowsperstrip > h ? h - row : rowsperstrip); + if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, row, 0), + buf, nrow*scanline) < 0 && img->stoponerr) + break; + (*callback)(img, udata, 0, row, w, nrow, fromskew, buf); + } + _TIFFfree(buf); + return (1); +} + +/* + * Get a strip-organized image with + * SamplesPerPixel > 1 + * PlanarConfiguration separated + * We assume that all such images are RGB. + */ +static int +gtStripSeparate(TIFFImageIter* img, void *udata, uint32 w, uint32 h) +{ + TIFF* tif = img->tif; + ImageIterTileSeparateRoutine callback = img->callback.separate; + uint16 orientation; + u_char *buf; + u_char *r, *g, *b, *a; + uint32 row, nrow; + tsize_t scanline; + uint32 rowsperstrip; + uint32 imagewidth = img->width; + tsize_t stripsize; + int32 fromskew; + int alpha = img->alpha; + + stripsize = TIFFStripSize(tif); + r = buf = (u_char *)_TIFFmalloc(4*stripsize); + if (buf == 0) { + TIFFError(TIFFFileName(tif), "No space for tile buffer"); + return (0); + } + g = r + stripsize; + b = g + stripsize; + a = b + stripsize; + if (!alpha) + memset(a, 0xff, stripsize); + orientation = img->orientation; + TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + scanline = TIFFScanlineSize(tif); + fromskew = (w < imagewidth ? imagewidth - w : 0); + for (row = 0; row < h; row += rowsperstrip) { + nrow = (row + rowsperstrip > h ? h - row : rowsperstrip); + if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, row, 0), + r, nrow*scanline) < 0 && img->stoponerr) + break; + if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, row, 1), + g, nrow*scanline) < 0 && img->stoponerr) + break; + if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, row, 2), + b, nrow*scanline) < 0 && img->stoponerr) + break; + if (alpha && + (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, row, 3), + a, nrow*scanline) < 0 && img->stoponerr)) + break; + (*callback)(img, udata, 0, row, w, nrow, fromskew, r, g, b, a); + } + _TIFFfree(buf); + return (1); +} + +DECLAREContigCallbackFunc(TestContigCallback) +{ + printf("Contig Callback called with x = %d, y = %d, w = %d, h = %d, fromskew = %d\n", + x, y, w, h, fromskew); +} + + +DECLARESepCallbackFunc(TestSepCallback) +{ + printf("Sep Callback called with x = %d, y = %d, w = %d, h = %d, fromskew = %d\n", + x, y, w, h, fromskew); +} + + +#ifdef MAIN +main(int argc, char **argv) +{ + char emsg[1024]; + TIFFImageIter img; + int ok; + int stop = 1; + + TIFF *tif; + unsigned long nx, ny; + unsigned short BitsPerSample, SamplesPerPixel; + int isColorMapped, isPliFile; + unsigned char *ColorMap; + unsigned char *data; + + if (argc < 2) { + fprintf(stderr,"usage: %s tiff_file\n",argv[0]); + exit(1); + } + tif = (TIFF *)PLIGetImage(argv[1], (void *) &data, &ColorMap, + &nx, &ny, &BitsPerSample, &SamplesPerPixel, + &isColorMapped, &isPliFile); + if (tif != NULL) { + + if (TIFFImageIterBegin(&img, tif, stop, emsg)) { + /* Here need to set data and callback function! */ + if (img.isContig) { + img.callback = TestContigCallback; + } else { + img.callback = TestSepCallback; + } + ok = TIFFImageIterGet(&img, NULL, img.width, img.height); + TIFFImageIterEnd(&img); + } else { + TIFFError(TIFFFileName(tif), emsg); + } + } + +} +#endif diff --git a/contrib/pds/tif_imageiter.h b/contrib/pds/tif_imageiter.h new file mode 100755 index 0000000..4056889 --- /dev/null +++ b/contrib/pds/tif_imageiter.h @@ -0,0 +1,57 @@ +typedef struct _TIFFImageIter TIFFImageIter; + +/* The callback function is called for each "block" of image pixel data after + it has been read from the file and decoded. This image pixel data is in the + buffer pp, and this data represents the image pixels from (x,y) to + (x+w,y+h). It is stored in pixel format, so each pixel contains + img->samplesperpixel consecutive samples each containing img->bitspersample + bits of data. The array pp is ordered in h consecutive rows of w+fromskew + pixels each. */ +typedef void (*ImageIterTileContigRoutine) + (TIFFImageIter*, void *, uint32, uint32, uint32, uint32, int32, + unsigned char*); +#define DECLAREContigCallbackFunc(name) \ +static void name(\ + TIFFImageIter* img, \ + void* user_data, \ + uint32 x, uint32 y, \ + uint32 w, uint32 h, \ + int32 fromskew, \ + u_char* pp \ +) + +typedef void (*ImageIterTileSeparateRoutine) + (TIFFImageIter*, void *, uint32, uint32, uint32, uint32, int32, + unsigned char*, unsigned char*, unsigned char*, unsigned char*); +#define DECLARESepCallbackFunc(name) \ +static void name(\ + TIFFImageIter* img, \ + void* user_data, \ + uint32 x, uint32 y, \ + uint32 w, uint32 h,\ + int32 fromskew, \ + u_char* r, u_char* g, u_char* b, u_char* a\ +) + +struct _TIFFImageIter { + TIFF* tif; /* image handle */ + int stoponerr; /* stop on read error */ + int isContig; /* data is packed/separate */ + int alpha; /* type of alpha data present */ + uint32 width; /* image width */ + uint32 height; /* image height */ + uint16 bitspersample; /* image bits/sample */ + uint16 samplesperpixel; /* image samples/pixel */ + uint16 orientation; /* image orientation */ + uint16 photometric; /* image photometric interp */ + uint16* redcmap; /* colormap pallete */ + uint16* greencmap; + uint16* bluecmap; + /* get image data routine */ + int (*get)(TIFFImageIter*, void *udata, uint32, uint32); + union { + void (*any)(TIFFImageIter*); + ImageIterTileContigRoutine contig; + ImageIterTileSeparateRoutine separate; + } callback; /* fn to exec for each block */ +}; diff --git a/contrib/pds/tif_pdsdirread.c b/contrib/pds/tif_pdsdirread.c new file mode 100755 index 0000000..6c6a7c3 --- /dev/null +++ b/contrib/pds/tif_pdsdirread.c @@ -0,0 +1,1124 @@ +/* $Header: /home/cvsroot/libtiff/contrib/pds/tif_pdsdirread.c,v 1.1.1.1 2000/06/24 19:10:17 tshead Exp $ */ + +/* + * Copyright (c) 1988-1996 Sam Leffler + * Copyright (c) 1991-1996 Silicon Graphics, Inc. + * Copyright (c( 1996 USAF Phillips Laboratory + * + * 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. + */ + +/* + * TIFF Library. + * + * These routines written by Conrad J. Poelman on a single late-night of + * March 20-21, 1996. + * + * The entire purpose of this file is to provide a single external function, + * TIFFReadPrivateDataSubDirectory(). This function is intended for use in reading a + * private subdirectory from a TIFF file into a private structure. The + * actual writing of data into the structure is handled by the setFieldFn(), + * which is passed to TIFFReadPrivateDataSubDirectory() as a parameter. The idea is to + * enable any application wishing to store private subdirectories to do so + * easily using this function, without modifying the TIFF library. + * + * The astute observer will notice that only two functions are at all different + * from the original tif_dirread.c file: TIFFReadPrivateDataSubDirectory() and + * TIFFFetchNormalSubTag(). All the other stuff that makes this file so huge + * is only necessary because all of those functions are declared static in + * tif_dirread.c, so we have to totally duplicate them in order to use them. + * + * Oh, also note the bug fix in TIFFFetchFloat(). + * + */ + +#include "tiffiop.h" + +#define IGNORE 0 /* tag placeholder used below */ + +#if HAVE_IEEEFP +#define TIFFCvtIEEEFloatToNative(tif, n, fp) +#define TIFFCvtIEEEDoubleToNative(tif, n, dp) +#else +extern void TIFFCvtIEEEFloatToNative(TIFF*, uint32, float*); +extern void TIFFCvtIEEEDoubleToNative(TIFF*, uint32, double*); +#endif + +static void EstimateStripByteCounts(TIFF*, TIFFDirEntry*, uint16); +static void MissingRequired(TIFF*, const char*); +static int CheckDirCount(TIFF*, TIFFDirEntry*, uint32); +static tsize_t TIFFFetchData(TIFF*, TIFFDirEntry*, char*); +static tsize_t TIFFFetchString(TIFF*, TIFFDirEntry*, char*); +static float TIFFFetchRational(TIFF*, TIFFDirEntry*); +static int TIFFFetchNormalSubTag(TIFF*, TIFFDirEntry*, const TIFFFieldInfo*, + int (*getFieldFn)(TIFF *tif,ttag_t tag,...)); +static int TIFFFetchPerSampleShorts(TIFF*, TIFFDirEntry*, int*); +static int TIFFFetchPerSampleAnys(TIFF*, TIFFDirEntry*, double*); +static int TIFFFetchShortArray(TIFF*, TIFFDirEntry*, uint16*); +static int TIFFFetchStripThing(TIFF*, TIFFDirEntry*, long, uint32**); +static int TIFFFetchExtraSamples(TIFF*, TIFFDirEntry*); +static int TIFFFetchRefBlackWhite(TIFF*, TIFFDirEntry*); +static float TIFFFetchFloat(TIFF*, TIFFDirEntry*); +static int TIFFFetchFloatArray(TIFF*, TIFFDirEntry*, float*); +static int TIFFFetchDoubleArray(TIFF*, TIFFDirEntry*, double*); +static int TIFFFetchAnyArray(TIFF*, TIFFDirEntry*, double*); +static int TIFFFetchShortPair(TIFF*, TIFFDirEntry*); +#if STRIPCHOP_SUPPORT +static void ChopUpSingleUncompressedStrip(TIFF*); +#endif + +static char * +CheckMalloc(TIFF* tif, tsize_t n, const char* what) +{ + char *cp = (char*)_TIFFmalloc(n); + if (cp == NULL) + TIFFError(tif->tif_name, "No space %s", what); + return (cp); +} + +/* Just as was done with TIFFWritePrivateDataSubDirectory(), here we implement + TIFFReadPrivateDataSubDirectory() which takes an offset into the TIFF file, + a TIFFFieldInfo structure specifying the types of the various tags, + and a function to use to set individual tags when they are encountered. + The data is read from the file, translated using the TIFF library's + built-in machine-independent conversion functions, and filled into + private subdirectory structure. + + This code was written by copying the original TIFFReadDirectory() function + from tif_dirread.c and paring it down to what is needed for this. + + It is the caller's responsibility to allocate and initialize the internal + structure that setFieldFn() will be writing into. If this function is being + called more than once before closing the file, the caller also must be + careful to free data in the structure before re-initializing. + + It is also the caller's responsibility to verify the presence of + any required fields after reading the directory in. +*/ + + +int +TIFFReadPrivateDataSubDirectory(TIFF* tif, toff_t pdir_offset, + TIFFFieldInfo *field_info, + int (*setFieldFn)(TIFF *tif, ttag_t tag, ...)) +{ + register TIFFDirEntry* dp; + register int n; + register TIFFDirectory* td; + TIFFDirEntry* dir; + int iv; + long v; + double dv; + const TIFFFieldInfo* fip; + int fix; + uint16 dircount; + uint32 nextdiroff; + char* cp; + int diroutoforderwarning = 0; + + /* Skipped part about checking for directories or compression data. */ + + if (!isMapped(tif)) { + if (!SeekOK(tif, pdir_offset)) { + TIFFError(tif->tif_name, + "Seek error accessing TIFF private subdirectory"); + return (0); + } + if (!ReadOK(tif, &dircount, sizeof (uint16))) { + TIFFError(tif->tif_name, + "Can not read TIFF private subdirectory count"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + dir = (TIFFDirEntry *)CheckMalloc(tif, + dircount * sizeof (TIFFDirEntry), "to read TIFF private subdirectory"); + if (dir == NULL) + return (0); + if (!ReadOK(tif, dir, dircount*sizeof (TIFFDirEntry))) { + TIFFError(tif->tif_name, "Can not read TIFF private subdirectory"); + goto bad; + } + /* + * Read offset to next directory for sequential scans. + */ + (void) ReadOK(tif, &nextdiroff, sizeof (uint32)); + } else { + toff_t off = pdir_offset; + + if (off + sizeof (short) > tif->tif_size) { + TIFFError(tif->tif_name, + "Can not read TIFF private subdirectory count"); + return (0); + } else + _TIFFmemcpy(&dircount, tif->tif_base + off, sizeof (uint16)); + off += sizeof (uint16); + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + dir = (TIFFDirEntry *)CheckMalloc(tif, + dircount * sizeof (TIFFDirEntry), "to read TIFF private subdirectory"); + if (dir == NULL) + return (0); + if (off + dircount*sizeof (TIFFDirEntry) > tif->tif_size) { + TIFFError(tif->tif_name, "Can not read TIFF private subdirectory"); + goto bad; + } else + _TIFFmemcpy(dir, tif->tif_base + off, + dircount*sizeof (TIFFDirEntry)); + off += dircount* sizeof (TIFFDirEntry); + if (off + sizeof (uint32) < tif->tif_size) + _TIFFmemcpy(&nextdiroff, tif->tif_base+off, sizeof (uint32)); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&nextdiroff); + + /* + * Setup default value and then make a pass over + * the fields to check type and tag information, + * and to extract info required to size data + * structures. A second pass is made afterwards + * to read in everthing not taken in the first pass. + */ + td = &tif->tif_dir; + + for (fip = field_info, dp = dir, n = dircount; + n > 0; n--, dp++) { + if (tif->tif_flags & TIFF_SWAB) { + TIFFSwabArrayOfShort(&dp->tdir_tag, 2); + TIFFSwabArrayOfLong(&dp->tdir_count, 2); + } + /* + * Find the field information entry for this tag. + */ + /* + * Silicon Beach (at least) writes unordered + * directory tags (violating the spec). Handle + * it here, but be obnoxious (maybe they'll fix it?). + */ + if (dp->tdir_tag < fip->field_tag) { + if (!diroutoforderwarning) { + TIFFWarning(tif->tif_name, + "invalid TIFF private subdirectory; tags are not sorted in ascending order"); + diroutoforderwarning = 1; + } + fip = field_info; /* O(n^2) */ + } + + while (fip->field_tag && fip->field_tag < dp->tdir_tag) + fip++; + if (!fip->field_tag || fip->field_tag != dp->tdir_tag) { + TIFFWarning(tif->tif_name, + "unknown field with tag %d (0x%x) in private subdirectory ignored", + dp->tdir_tag, dp->tdir_tag); + dp->tdir_tag = IGNORE; + fip = field_info;/* restart search */ + continue; + } + /* + * Null out old tags that we ignore. + */ + + /* Not implemented yet, since FIELD_IGNORE is specific to + the main directories. Could pass this in too... */ + if (0 /* && fip->field_bit == FIELD_IGNORE */) { + ignore: + dp->tdir_tag = IGNORE; + continue; + } + + /* + * Check data type. + */ + + while (dp->tdir_type != (u_short)fip->field_type) { + if (fip->field_type == TIFF_ANY) /* wildcard */ + break; + fip++; + if (!fip->field_tag || fip->field_tag != dp->tdir_tag) { + TIFFWarning(tif->tif_name, + "wrong data type %d for \"%s\"; tag ignored", + dp->tdir_type, fip[-1].field_name); + goto ignore; + } + } + /* + * Check count if known in advance. + */ + if (fip->field_readcount != TIFF_VARIABLE) { + uint32 expected = (fip->field_readcount == TIFF_SPP) ? + (uint32) td->td_samplesperpixel : + (uint32) fip->field_readcount; + if (!CheckDirCount(tif, dp, expected)) + goto ignore; + } + + /* Now read in and process data from field. */ + if (!TIFFFetchNormalSubTag(tif, dp, fip, setFieldFn)) + goto bad; + + } + + if (dir) + _TIFFfree(dir); + return (1); +bad: + if (dir) + _TIFFfree(dir); + return (0); +} + +static void +EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) +{ + register TIFFDirEntry *dp; + register TIFFDirectory *td = &tif->tif_dir; + uint16 i; + + if (td->td_stripbytecount) + _TIFFfree(td->td_stripbytecount); + td->td_stripbytecount = (uint32*) + CheckMalloc(tif, td->td_nstrips * sizeof (uint32), + "for \"StripByteCounts\" array"); + if (td->td_compression != COMPRESSION_NONE) { + uint32 space = (uint32)(sizeof (TIFFHeader) + + sizeof (uint16) + + (dircount * sizeof (TIFFDirEntry)) + + sizeof (uint32)); + toff_t filesize = TIFFGetFileSize(tif); + uint16 n; + + /* calculate amount of space used by indirect values */ + for (dp = dir, n = dircount; n > 0; n--, dp++) { + uint32 cc = dp->tdir_count*tiffDataWidth[dp->tdir_type]; + if (cc > sizeof (uint32)) + space += cc; + } + space = (filesize - space) / td->td_samplesperpixel; + for (i = 0; i < td->td_nstrips; i++) + td->td_stripbytecount[i] = space; + /* + * This gross hack handles the case were the offset to + * the last strip is past the place where we think the strip + * should begin. Since a strip of data must be contiguous, + * it's safe to assume that we've overestimated the amount + * of data in the strip and trim this number back accordingly. + */ + i--; + if (td->td_stripoffset[i] + td->td_stripbytecount[i] > filesize) + td->td_stripbytecount[i] = + filesize - td->td_stripoffset[i]; + } else { + uint32 rowbytes = TIFFScanlineSize(tif); + uint32 rowsperstrip = td->td_imagelength / td->td_nstrips; + for (i = 0; i < td->td_nstrips; i++) + td->td_stripbytecount[i] = rowbytes*rowsperstrip; + } + TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS); + if (!TIFFFieldSet(tif, FIELD_ROWSPERSTRIP)) + td->td_rowsperstrip = td->td_imagelength; +} + +static void +MissingRequired(TIFF* tif, const char* tagname) +{ + TIFFError(tif->tif_name, + "TIFF directory is missing required \"%s\" field", tagname); +} + +/* + * Check the count field of a directory + * entry against a known value. The caller + * is expected to skip/ignore the tag if + * there is a mismatch. + */ +static int +CheckDirCount(TIFF* tif, TIFFDirEntry* dir, uint32 count) +{ + if (count != dir->tdir_count) { + TIFFWarning(tif->tif_name, + "incorrect count for field \"%s\" (%lu, expecting %lu); tag ignored", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, + dir->tdir_count, count); + return (0); + } + return (1); +} + +/* + * Fetch a contiguous directory item. + */ +static tsize_t +TIFFFetchData(TIFF* tif, TIFFDirEntry* dir, char* cp) +{ + int w = tiffDataWidth[dir->tdir_type]; + tsize_t cc = dir->tdir_count * w; + + if (!isMapped(tif)) { + if (!SeekOK(tif, dir->tdir_offset)) + goto bad; + if (!ReadOK(tif, cp, cc)) + goto bad; + } else { + if (dir->tdir_offset + cc > tif->tif_size) + goto bad; + _TIFFmemcpy(cp, tif->tif_base + dir->tdir_offset, cc); + } + if (tif->tif_flags & TIFF_SWAB) { + switch (dir->tdir_type) { + case TIFF_SHORT: + case TIFF_SSHORT: + TIFFSwabArrayOfShort((uint16*) cp, dir->tdir_count); + break; + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_FLOAT: + TIFFSwabArrayOfLong((uint32*) cp, dir->tdir_count); + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + TIFFSwabArrayOfLong((uint32*) cp, 2*dir->tdir_count); + break; + case TIFF_DOUBLE: + TIFFSwabArrayOfDouble((double*) cp, dir->tdir_count); + break; + } + } + return (cc); +bad: + TIFFError(tif->tif_name, "Error fetching data for field \"%s\"", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); + return ((tsize_t) 0); +} + +/* + * Fetch an ASCII item from the file. + */ +static tsize_t +TIFFFetchString(TIFF* tif, TIFFDirEntry* dir, char* cp) +{ + if (dir->tdir_count <= 4) { + uint32 l = dir->tdir_offset; + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&l); + _TIFFmemcpy(cp, &l, dir->tdir_count); + return (1); + } + return (TIFFFetchData(tif, dir, cp)); +} + +/* + * Convert numerator+denominator to float. + */ +static int +cvtRational(TIFF* tif, TIFFDirEntry* dir, uint32 num, uint32 denom, float* rv) +{ + if (denom == 0) { + TIFFError(tif->tif_name, + "%s: Rational with zero denominator (num = %lu)", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, num); + return (0); + } else { + if (dir->tdir_type == TIFF_RATIONAL) + *rv = ((float)num / (float)denom); + else + *rv = ((float)(int32)num / (float)(int32)denom); + return (1); + } +} + +/* + * Fetch a rational item from the file + * at offset off and return the value + * as a floating point number. + */ +static float +TIFFFetchRational(TIFF* tif, TIFFDirEntry* dir) +{ + uint32 l[2]; + float v; + + return (!TIFFFetchData(tif, dir, (char *)l) || + !cvtRational(tif, dir, l[0], l[1], &v) ? 1.0f : v); +} + +/* + * Fetch a single floating point value + * from the offset field and return it + * as a native float. + */ +static float +TIFFFetchFloat(TIFF* tif, TIFFDirEntry* dir) +{ + /* This appears to be a flagrant bug in the TIFF library, yet I + actually don't understand how it could have ever worked the old + way. Look at the comments in my new code and you'll understand. */ +#if (0) + float v = (float) + TIFFExtractData(tif, dir->tdir_type, dir->tdir_offset); + TIFFCvtIEEEFloatToNative(tif, 1, &v); +#else + float v; + /* This is a little bit tricky - if we just cast the uint32 to a float, + C will perform a numerical conversion, which is not what we want. + We want to take the actual bit pattern in the uint32 and interpret + it as a float. Thus we cast a uint32 * into a float * and then + dereference to get v. */ + uint32 l = (uint32) + TIFFExtractData(tif, dir->tdir_type, dir->tdir_offset); + v = * (float *) &l; + TIFFCvtIEEEFloatToNative(tif, 1, &v); +#endif + return (v); + +} + +/* + * Fetch an array of BYTE or SBYTE values. + */ +static int +TIFFFetchByteArray(TIFF* tif, TIFFDirEntry* dir, uint16* v) +{ + if (dir->tdir_count <= 4) { + /* + * Extract data from offset field. + */ + if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { + switch (dir->tdir_count) { + case 4: v[3] = dir->tdir_offset & 0xff; + case 3: v[2] = (dir->tdir_offset >> 8) & 0xff; + case 2: v[1] = (dir->tdir_offset >> 16) & 0xff; + case 1: v[0] = dir->tdir_offset >> 24; + } + } else { + switch (dir->tdir_count) { + case 4: v[3] = dir->tdir_offset >> 24; + case 3: v[2] = (dir->tdir_offset >> 16) & 0xff; + case 2: v[1] = (dir->tdir_offset >> 8) & 0xff; + case 1: v[0] = dir->tdir_offset & 0xff; + } + } + return (1); + } else + return (TIFFFetchData(tif, dir, (char*) v) != 0); /* XXX */ +} + +/* + * Fetch an array of SHORT or SSHORT values. + */ +static int +TIFFFetchShortArray(TIFF* tif, TIFFDirEntry* dir, uint16* v) +{ + if (dir->tdir_count <= 2) { + if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { + switch (dir->tdir_count) { + case 2: v[1] = dir->tdir_offset & 0xffff; + case 1: v[0] = dir->tdir_offset >> 16; + } + } else { + switch (dir->tdir_count) { + case 2: v[1] = dir->tdir_offset >> 16; + case 1: v[0] = dir->tdir_offset & 0xffff; + } + } + return (1); + } else + return (TIFFFetchData(tif, dir, (char *)v) != 0); +} + +/* + * Fetch a pair of SHORT or BYTE values. + */ +static int +TIFFFetchShortPair(TIFF* tif, TIFFDirEntry* dir) +{ + uint16 v[2]; + int ok = 0; + + switch (dir->tdir_type) { + case TIFF_SHORT: + case TIFF_SSHORT: + ok = TIFFFetchShortArray(tif, dir, v); + break; + case TIFF_BYTE: + case TIFF_SBYTE: + ok = TIFFFetchByteArray(tif, dir, v); + break; + } + if (ok) + TIFFSetField(tif, dir->tdir_tag, v[0], v[1]); + return (ok); +} + +/* + * Fetch an array of LONG or SLONG values. + */ +static int +TIFFFetchLongArray(TIFF* tif, TIFFDirEntry* dir, uint32* v) +{ + if (dir->tdir_count == 1) { + v[0] = dir->tdir_offset; + return (1); + } else + return (TIFFFetchData(tif, dir, (char*) v) != 0); +} + +/* + * Fetch an array of RATIONAL or SRATIONAL values. + */ +static int +TIFFFetchRationalArray(TIFF* tif, TIFFDirEntry* dir, float* v) +{ + int ok = 0; + uint32* l; + + l = (uint32*)CheckMalloc(tif, + dir->tdir_count*tiffDataWidth[dir->tdir_type], + "to fetch array of rationals"); + if (l) { + if (TIFFFetchData(tif, dir, (char *)l)) { + uint32 i; + for (i = 0; i < dir->tdir_count; i++) { + ok = cvtRational(tif, dir, + l[2*i+0], l[2*i+1], &v[i]); + if (!ok) + break; + } + } + _TIFFfree((char *)l); + } + return (ok); +} + +/* + * Fetch an array of FLOAT values. + */ +static int +TIFFFetchFloatArray(TIFF* tif, TIFFDirEntry* dir, float* v) +{ + + if (dir->tdir_count == 1) { + v[0] = *(float*) &dir->tdir_offset; + TIFFCvtIEEEFloatToNative(tif, dir->tdir_count, v); + return (1); + } else if (TIFFFetchData(tif, dir, (char*) v)) { + TIFFCvtIEEEFloatToNative(tif, dir->tdir_count, v); + return (1); + } else + return (0); +} + +/* + * Fetch an array of DOUBLE values. + */ +static int +TIFFFetchDoubleArray(TIFF* tif, TIFFDirEntry* dir, double* v) +{ + if (TIFFFetchData(tif, dir, (char*) v)) { + TIFFCvtIEEEDoubleToNative(tif, dir->tdir_count, v); + return (1); + } else + return (0); +} + +/* + * Fetch an array of ANY values. The actual values are + * returned as doubles which should be able hold all the + * types. Yes, there really should be an tany_t to avoid + * this potential non-portability ... Note in particular + * that we assume that the double return value vector is + * large enough to read in any fundamental type. We use + * that vector as a buffer to read in the base type vector + * and then convert it in place to double (from end + * to front of course). + */ +static int +TIFFFetchAnyArray(TIFF* tif, TIFFDirEntry* dir, double* v) +{ + int i; + + switch (dir->tdir_type) { + case TIFF_BYTE: + case TIFF_SBYTE: + if (!TIFFFetchByteArray(tif, dir, (uint16*) v)) + return (0); + if (dir->tdir_type == TIFF_BYTE) { + uint16* vp = (uint16*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } else { + int16* vp = (int16*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } + break; + case TIFF_SHORT: + case TIFF_SSHORT: + if (!TIFFFetchShortArray(tif, dir, (uint16*) v)) + return (0); + if (dir->tdir_type == TIFF_SHORT) { + uint16* vp = (uint16*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } else { + int16* vp = (int16*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } + break; + case TIFF_LONG: + case TIFF_SLONG: + if (!TIFFFetchLongArray(tif, dir, (uint32*) v)) + return (0); + if (dir->tdir_type == TIFF_LONG) { + uint32* vp = (uint32*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } else { + int32* vp = (int32*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + if (!TIFFFetchRationalArray(tif, dir, (float*) v)) + return (0); + { float* vp = (float*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } + break; + case TIFF_FLOAT: + if (!TIFFFetchFloatArray(tif, dir, (float*) v)) + return (0); + { float* vp = (float*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } + break; + case TIFF_DOUBLE: + return (TIFFFetchDoubleArray(tif, dir, (double*) v)); + default: + /* TIFF_NOTYPE */ + /* TIFF_ASCII */ + /* TIFF_UNDEFINED */ + TIFFError(tif->tif_name, + "Cannot read TIFF_ANY type %d for field \"%s\"", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); + return (0); + } + return (1); +} + + +/* + * Fetch a tag that is not handled by special case code. + */ +/* The standard function TIFFFetchNormalTag() could definitely be replaced + with a simple call to this function, just adding TIFFSetField() as the + last argument. */ +static int +TIFFFetchNormalSubTag(TIFF* tif, TIFFDirEntry* dp, const TIFFFieldInfo* fip, + int (*setFieldFn)(TIFF *tif, ttag_t tag, ...)) +{ + static char mesg[] = "to fetch tag value"; + int ok = 0; + + if (dp->tdir_count > 1) { /* array of values */ + char* cp = NULL; + + switch (dp->tdir_type) { + case TIFF_BYTE: + case TIFF_SBYTE: + /* NB: always expand BYTE values to shorts */ + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (uint16), mesg); + ok = cp && TIFFFetchByteArray(tif, dp, (uint16*) cp); + break; + case TIFF_SHORT: + case TIFF_SSHORT: + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (uint16), mesg); + ok = cp && TIFFFetchShortArray(tif, dp, (uint16*) cp); + break; + case TIFF_LONG: + case TIFF_SLONG: + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (uint32), mesg); + ok = cp && TIFFFetchLongArray(tif, dp, (uint32*) cp); + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (float), mesg); + ok = cp && TIFFFetchRationalArray(tif, dp, (float*) cp); + break; + case TIFF_FLOAT: + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (float), mesg); + ok = cp && TIFFFetchFloatArray(tif, dp, (float*) cp); + break; + case TIFF_DOUBLE: + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (double), mesg); + ok = cp && TIFFFetchDoubleArray(tif, dp, (double*) cp); + break; + case TIFF_ASCII: + case TIFF_UNDEFINED: /* bit of a cheat... */ + /* + * Some vendors write strings w/o the trailing + * NULL byte, so always append one just in case. + */ + cp = CheckMalloc(tif, dp->tdir_count+1, mesg); + if (ok = (cp && TIFFFetchString(tif, dp, cp))) + cp[dp->tdir_count] = '\0'; /* XXX */ + break; + } + if (ok) { + ok = (fip->field_passcount ? + (*setFieldFn)(tif, dp->tdir_tag, dp->tdir_count, cp) + : (*setFieldFn)(tif, dp->tdir_tag, cp)); + } + if (cp != NULL) + _TIFFfree(cp); + } else if (CheckDirCount(tif, dp, 1)) { /* singleton value */ + switch (dp->tdir_type) { + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + /* + * If the tag is also acceptable as a LONG or SLONG + * then (*setFieldFn) will expect an uint32 parameter + * passed to it (through varargs). Thus, for machines + * where sizeof (int) != sizeof (uint32) we must do + * a careful check here. It's hard to say if this + * is worth optimizing. + * + * NB: We use TIFFFieldWithTag here knowing that + * it returns us the first entry in the table + * for the tag and that that entry is for the + * widest potential data type the tag may have. + */ + { TIFFDataType type = fip->field_type; + if (type != TIFF_LONG && type != TIFF_SLONG) { + uint16 v = (uint16) + TIFFExtractData(tif, dp->tdir_type, dp->tdir_offset); + ok = (fip->field_passcount ? + (*setFieldFn)(tif, dp->tdir_tag, 1, &v) + : (*setFieldFn)(tif, dp->tdir_tag, v)); + break; + } + } + /* fall thru... */ + case TIFF_LONG: + case TIFF_SLONG: + { uint32 v32 = + TIFFExtractData(tif, dp->tdir_type, dp->tdir_offset); + ok = (fip->field_passcount ? + (*setFieldFn)(tif, dp->tdir_tag, 1, &v32) + : (*setFieldFn)(tif, dp->tdir_tag, v32)); + } + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_FLOAT: + { float v = (dp->tdir_type == TIFF_FLOAT ? + TIFFFetchFloat(tif, dp) + : TIFFFetchRational(tif, dp)); + ok = (fip->field_passcount ? + (*setFieldFn)(tif, dp->tdir_tag, 1, &v) + : (*setFieldFn)(tif, dp->tdir_tag, v)); + } + break; + case TIFF_DOUBLE: + { double v; + ok = (TIFFFetchDoubleArray(tif, dp, &v) && + (fip->field_passcount ? + (*setFieldFn)(tif, dp->tdir_tag, 1, &v) + : (*setFieldFn)(tif, dp->tdir_tag, v)) + ); + } + break; + case TIFF_ASCII: + case TIFF_UNDEFINED: /* bit of a cheat... */ + { char c[2]; + if (ok = (TIFFFetchString(tif, dp, c) != 0)) { + c[1] = '\0'; /* XXX paranoid */ + ok = (*setFieldFn)(tif, dp->tdir_tag, c); + } + } + break; + } + } + return (ok); +} + +/* Everything after this is exactly duplicated from the standard tif_dirread.c + file, necessitated by the fact that they are declared static there so + we can't call them! +*/ +#define NITEMS(x) (sizeof (x) / sizeof (x[0])) +/* + * Fetch samples/pixel short values for + * the specified tag and verify that + * all values are the same. + */ +static int +TIFFFetchPerSampleShorts(TIFF* tif, TIFFDirEntry* dir, int* pl) +{ + int samples = tif->tif_dir.td_samplesperpixel; + int status = 0; + + if (CheckDirCount(tif, dir, (uint32) samples)) { + uint16 buf[10]; + uint16* v = buf; + + if (samples > NITEMS(buf)) + v = (uint16*) _TIFFmalloc(samples * sizeof (uint16)); + if (TIFFFetchShortArray(tif, dir, v)) { + int i; + for (i = 1; i < samples; i++) + if (v[i] != v[0]) { + TIFFError(tif->tif_name, + "Cannot handle different per-sample values for field \"%s\"", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); + goto bad; + } + *pl = v[0]; + status = 1; + } + bad: + if (v != buf) + _TIFFfree((char*) v); + } + return (status); +} + +/* + * Fetch samples/pixel ANY values for + * the specified tag and verify that + * all values are the same. + */ +static int +TIFFFetchPerSampleAnys(TIFF* tif, TIFFDirEntry* dir, double* pl) +{ + int samples = (int) tif->tif_dir.td_samplesperpixel; + int status = 0; + + if (CheckDirCount(tif, dir, (uint32) samples)) { + double buf[10]; + double* v = buf; + + if (samples > NITEMS(buf)) + v = (double*) _TIFFmalloc(samples * sizeof (double)); + if (TIFFFetchAnyArray(tif, dir, v)) { + int i; + for (i = 1; i < samples; i++) + if (v[i] != v[0]) { + TIFFError(tif->tif_name, + "Cannot handle different per-sample values for field \"%s\"", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); + goto bad; + } + *pl = v[0]; + status = 1; + } + bad: + if (v != buf) + _TIFFfree(v); + } + return (status); +} +#undef NITEMS + +/* + * Fetch a set of offsets or lengths. + * While this routine says "strips", + * in fact it's also used for tiles. + */ +static int +TIFFFetchStripThing(TIFF* tif, TIFFDirEntry* dir, long nstrips, uint32** lpp) +{ + register uint32* lp; + int status; + + if (!CheckDirCount(tif, dir, (uint32) nstrips)) + return (0); + /* + * Allocate space for strip information. + */ + if (*lpp == NULL && + (*lpp = (uint32 *)CheckMalloc(tif, + nstrips * sizeof (uint32), "for strip array")) == NULL) + return (0); + lp = *lpp; + if (dir->tdir_type == (int)TIFF_SHORT) { + /* + * Handle uint16->uint32 expansion. + */ + uint16* dp = (uint16*) CheckMalloc(tif, + dir->tdir_count* sizeof (uint16), "to fetch strip tag"); + if (dp == NULL) + return (0); + if (status = TIFFFetchShortArray(tif, dir, dp)) { + register uint16* wp = dp; + while (nstrips-- > 0) + *lp++ = *wp++; + } + _TIFFfree((char*) dp); + } else + status = TIFFFetchLongArray(tif, dir, lp); + return (status); +} + +#define NITEMS(x) (sizeof (x) / sizeof (x[0])) +/* + * Fetch and set the ExtraSamples tag. + */ +static int +TIFFFetchExtraSamples(TIFF* tif, TIFFDirEntry* dir) +{ + uint16 buf[10]; + uint16* v = buf; + int status; + + if (dir->tdir_count > NITEMS(buf)) + v = (uint16*) _TIFFmalloc(dir->tdir_count * sizeof (uint16)); + if (dir->tdir_type == TIFF_BYTE) + status = TIFFFetchByteArray(tif, dir, v); + else + status = TIFFFetchShortArray(tif, dir, v); + if (status) + status = TIFFSetField(tif, dir->tdir_tag, dir->tdir_count, v); + if (v != buf) + _TIFFfree((char*) v); + return (status); +} +#undef NITEMS + +#ifdef COLORIMETRY_SUPPORT +/* + * Fetch and set the RefBlackWhite tag. + */ +static int +TIFFFetchRefBlackWhite(TIFF* tif, TIFFDirEntry* dir) +{ + static char mesg[] = "for \"ReferenceBlackWhite\" array"; + char* cp; + int ok; + + if (dir->tdir_type == TIFF_RATIONAL) + return (1/*TIFFFetchNormalTag(tif, dir) just so linker won't complain - this part of the code is never used anyway */); + /* + * Handle LONG's for backward compatibility. + */ + cp = CheckMalloc(tif, dir->tdir_count * sizeof (uint32), mesg); + if (ok = (cp && TIFFFetchLongArray(tif, dir, (uint32*) cp))) { + float* fp = (float*) + CheckMalloc(tif, dir->tdir_count * sizeof (float), mesg); + if (ok = (fp != NULL)) { + uint32 i; + for (i = 0; i < dir->tdir_count; i++) + fp[i] = (float)((uint32*) cp)[i]; + ok = TIFFSetField(tif, dir->tdir_tag, fp); + _TIFFfree((char*) fp); + } + } + if (cp) + _TIFFfree(cp); + return (ok); +} +#endif + +#if STRIPCHOP_SUPPORT +/* + * Replace a single strip (tile) of uncompressed data by + * multiple strips (tiles), each approximately 8Kbytes. + * This is useful for dealing with large images or + * for dealing with machines with a limited amount + * memory. + */ +static void +ChopUpSingleUncompressedStrip(TIFF* tif) +{ + register TIFFDirectory *td = &tif->tif_dir; + uint32 bytecount = td->td_stripbytecount[0]; + uint32 offset = td->td_stripoffset[0]; + tsize_t rowbytes = TIFFVTileSize(tif, 1), stripbytes; + tstrip_t strip, nstrips, rowsperstrip; + uint32* newcounts; + uint32* newoffsets; + + /* + * Make the rows hold at least one + * scanline, but fill 8k if possible. + */ + if (rowbytes > 8192) { + stripbytes = rowbytes; + rowsperstrip = 1; + } else { + rowsperstrip = 8192 / rowbytes; + stripbytes = rowbytes * rowsperstrip; + } + /* never increase the number of strips in an image */ + if (rowsperstrip >= td->td_rowsperstrip) + return; + nstrips = (tstrip_t) TIFFhowmany(bytecount, stripbytes); + newcounts = (uint32*) CheckMalloc(tif, nstrips * sizeof (uint32), + "for chopped \"StripByteCounts\" array"); + newoffsets = (uint32*) CheckMalloc(tif, nstrips * sizeof (uint32), + "for chopped \"StripOffsets\" array"); + if (newcounts == NULL || newoffsets == NULL) { + /* + * Unable to allocate new strip information, give + * up and use the original one strip information. + */ + if (newcounts != NULL) + _TIFFfree(newcounts); + if (newoffsets != NULL) + _TIFFfree(newoffsets); + return; + } + /* + * Fill the strip information arrays with + * new bytecounts and offsets that reflect + * the broken-up format. + */ + for (strip = 0; strip < nstrips; strip++) { + if (stripbytes > bytecount) + stripbytes = bytecount; + newcounts[strip] = stripbytes; + newoffsets[strip] = offset; + offset += stripbytes; + bytecount -= stripbytes; + } + /* + * Replace old single strip info with multi-strip info. + */ + td->td_stripsperimage = td->td_nstrips = nstrips; + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip); + + _TIFFfree(td->td_stripbytecount); + _TIFFfree(td->td_stripoffset); + td->td_stripbytecount = newcounts; + td->td_stripoffset = newoffsets; +} +#endif /* STRIPCHOP_SUPPORT */ diff --git a/contrib/pds/tif_pdsdirwrite.c b/contrib/pds/tif_pdsdirwrite.c new file mode 100755 index 0000000..647a04a --- /dev/null +++ b/contrib/pds/tif_pdsdirwrite.c @@ -0,0 +1,964 @@ +/* $Header: /home/cvsroot/libtiff/contrib/pds/tif_pdsdirwrite.c,v 1.1.1.1 2000/06/24 19:10:17 tshead Exp $ */ + +/* When writing data to TIFF files, it is often useful to store application- + specific data in a private TIFF directory so that the tags don't need to + be registered and won't conflict with other people's user-defined tags. + One needs to have a registered public tag which contains some amount of + raw data. That raw data, however, is interpreted at an independent, + separate, private tiff directory. This file provides some routines which + will be useful for converting that data from its raw binary form into + the proper form for your application. +*/ + +/* + * Copyright (c) 1988-1996 Sam Leffler + * Copyright (c) 1991-1996 Silicon Graphics, Inc. + * Copyright (c( 1996 USAF Phillips Laboratory + * + * 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. + */ + +/* + * TIFF Library. + * + * These routines written by Conrad J. Poelman on a single late-night of + * March 20-21, 1996. + * + * The entire purpose of this file is to provide a single external function, + * TIFFWritePrivateDataSubDirectory(). This function is intended for use + * in writing a private subdirectory structure into a TIFF file. The + * actual reading of data from the structure is handled by the getFieldFn(), + * which is passed to TIFFWritePrivateDataSubDirectory() as a parameter. The + * idea is to enable any application wishing to read private subdirectories to + * do so easily using this function, without modifying the TIFF library. + * + * The astute observer will notice that only two functions are at all different + * from the original tif_dirwrite.c file: TIFFWritePrivateDataSubDirectory()and + * TIFFWriteNormalSubTag(). All the other stuff that makes this file so huge + * is only necessary because all of those functions are declared static in + * tif_dirwrite.c, so we have to totally duplicate them in order to use them. + * + * Oh, also please note the bug-fix in the routine TIFFWriteNormalSubTag(), + * which equally should be applied to TIFFWriteNormalTag(). + * + */ +#include "tiffiop.h" + +#if HAVE_IEEEFP +#define TIFFCvtNativeToIEEEFloat(tif, n, fp) +#define TIFFCvtNativeToIEEEDouble(tif, n, dp) +#else +extern void TIFFCvtNativeToIEEEFloat(TIFF*, uint32, float*); +extern void TIFFCvtNativeToIEEEDouble(TIFF*, uint32, double*); +#endif + +static int TIFFWriteNormalTag(TIFF*, TIFFDirEntry*, const TIFFFieldInfo*); +static int TIFFWriteNormalSubTag(TIFF*, TIFFDirEntry*, const TIFFFieldInfo*, + int (*getFieldFn)(TIFF *tif,ttag_t tag,...)); +static void TIFFSetupShortLong(TIFF*, ttag_t, TIFFDirEntry*, uint32); +static int TIFFSetupShortPair(TIFF*, ttag_t, TIFFDirEntry*); +static int TIFFWritePerSampleShorts(TIFF*, ttag_t, TIFFDirEntry*); +static int TIFFWritePerSampleAnys(TIFF*, TIFFDataType, ttag_t, TIFFDirEntry*); +static int TIFFWriteShortTable(TIFF*, ttag_t, TIFFDirEntry*, uint32, uint16**); +static int TIFFWriteShortArray(TIFF*, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, uint16*); +static int TIFFWriteLongArray(TIFF *, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, uint32*); +static int TIFFWriteRationalArray(TIFF *, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, float*); +static int TIFFWriteFloatArray(TIFF *, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, float*); +static int TIFFWriteDoubleArray(TIFF *, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, double*); +static int TIFFWriteByteArray(TIFF*, TIFFDirEntry*, char*); +static int TIFFWriteAnyArray(TIFF*, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, double*); +#ifdef COLORIMETRY_SUPPORT +static int TIFFWriteTransferFunction(TIFF*, TIFFDirEntry*); +#endif +static int TIFFWriteData(TIFF*, TIFFDirEntry*, char*); +static int TIFFLinkDirectory(TIFF*); + +#define WriteRationalPair(type, tag1, v1, tag2, v2) { \ + if (!TIFFWriteRational(tif, type, tag1, dir, v1)) \ + goto bad; \ + if (!TIFFWriteRational(tif, type, tag2, dir+1, v2)) \ + goto bad; \ + dir++; \ +} +#define TIFFWriteRational(tif, type, tag, dir, v) \ + TIFFWriteRationalArray((tif), (type), (tag), (dir), 1, &(v)) +#ifndef TIFFWriteRational +static int TIFFWriteRational(TIFF*, + TIFFDataType, ttag_t, TIFFDirEntry*, float); +#endif + +/* This function will write an entire directory to the disk, and return the + offset value indicating where in the file it wrote the beginning of the + directory structure. This is NOT the same as the offset value before + calling this function, because some of the fields may have caused various + data items to be written out BEFORE writing the directory structure. + + This code was basically written by ripping of the TIFFWriteDirectory() + code and generalizing it, using RPS's TIFFWritePliIfd() code for + inspiration. My original goal was to make this code general enough that + the original TIFFWriteDirectory() could be rewritten to just call this + function with the appropriate field and field-accessing arguments. + + However, now I realize that there's a lot of code that gets executed for + the main, standard TIFF directories that does not apply to special + private subdirectories, so such a reimplementation for the sake of + eliminating redundant or duplicate code is probably not possible, + unless we also pass in a Main flag to indiciate which type of handling + to do, which would be kind of a hack. I've marked those places where I + changed or ripped out code which would have to be re-inserted to + generalize this function. If it can be done in a clean and graceful way, + it would be a great way to generalize the TIFF library. Otherwise, I'll + just leave this code here where it duplicates but remains on top of and + hopefully mostly independent of the main TIFF library. + + The caller will probably want to free the sub directory structure after + returning from this call, since otherwise once written out, the user + is likely to forget about it and leave data lying around. +*/ +toff_t +TIFFWritePrivateDataSubDirectory(TIFF* tif, + uint32 pdir_fieldsset[], int pdir_fields_last, + TIFFFieldInfo *field_info, + int (*getFieldFn)(TIFF *tif, ttag_t tag, ...)) +{ + uint16 dircount; + uint32 diroff, nextdiroff; + ttag_t tag; + uint32 nfields; + tsize_t dirsize; + char* data; + TIFFDirEntry* dir; + u_long b, *fields, fields_size; + toff_t directory_offset; + TIFFFieldInfo* fip; + + /* + * Deleted out all of the encoder flushing and such code from here - + * not necessary for subdirectories. + */ + + /* Finish writing out any image data. */ + TIFFFlushData(tif); + + /* + * Size the directory so that we can calculate + * offsets for the data items that aren't kept + * in-place in each field. + */ + nfields = 0; + for (b = 0; b <= pdir_fields_last; b++) + if (FieldSet(pdir_fieldsset, b)) + /* Deleted code to make size of first 4 tags 2 + instead of 1. */ + nfields += 1; + dirsize = nfields * sizeof (TIFFDirEntry); + data = (char*) _TIFFmalloc(dirsize); + if (data == NULL) { + TIFFError(tif->tif_name, + "Cannot write private subdirectory, out of space"); + return (0); + } + /* + * Place directory in data section of the file. If there isn't one + * yet, place it at the end of the file. The directory is treated as + * data, so we don't link it into the directory structure at all. + */ + if (tif->tif_dataoff == 0) + tif->tif_dataoff =(TIFFSeekFile(tif, (toff_t) 0, SEEK_END)+1) &~ 1; + diroff = tif->tif_dataoff; + tif->tif_dataoff = (toff_t)( + diroff + sizeof (uint16) + dirsize + sizeof (toff_t)); + if (tif->tif_dataoff & 1) + tif->tif_dataoff++; + (void) TIFFSeekFile(tif, tif->tif_dataoff, SEEK_SET); + /*tif->tif_curdir++;*/ + dir = (TIFFDirEntry*) data; + /* + * Setup external form of directory + * entries and write data items. + */ + /* + * We make a local copy of the fieldsset here so that we don't mess + * up the original one when we call ResetFieldBit(). But I'm not sure + * why the original code calls ResetFieldBit(), since we're already + * going through the fields in order... + * + * fields_size is the number of uint32's we will need to hold the + * bit-mask for all of the fields. If our highest field number is + * 100, then we'll need 100 / (8*4)+1 == 4 uint32's to hold the + * fieldset. + * + * Unlike the original code, we allocate fields dynamically based + * on the requested pdir_fields_last value, allowing private + * data subdirectories to contain more than the built-in code's limit + * of 95 tags in a directory. + */ + fields_size = pdir_fields_last / (8*sizeof(uint32)) + 1; + fields = _TIFFmalloc(fields_size*sizeof(uint32)); + _TIFFmemcpy(fields, pdir_fieldsset, fields_size * sizeof(uint32)); + + /* Deleted "write out extra samples tag" code here. */ + + /* Deleted code for checking a billion little special cases for the + * standard TIFF tags. Should add a general mechanism for overloading + * write function for each field, just like Brian kept telling me!!! + */ + for (fip = field_info; fip->field_tag; fip++) { + /* Deleted code to check for FIELD_IGNORE!! */ + if (/* fip->field_bit == FIELD_IGNORE || */ + !FieldSet(fields, fip->field_bit)) + continue; + if (!TIFFWriteNormalSubTag(tif, dir, fip, getFieldFn)) + goto bad; + dir++; + ResetFieldBit(fields, fip->field_bit); + } + + /* Now we've written all of the referenced data, and are about to + write the main directory structure, so grab the tif_dataoff value + now so we can remember where we wrote the directory. */ + directory_offset = tif->tif_dataoff; + + /* + * Write directory. + */ + dircount = (uint16) nfields; + /* Deleted code to link to the next directory - we set it to zero! */ + nextdiroff = 0; + if (tif->tif_flags & TIFF_SWAB) { + /* + * The file's byte order is opposite to the + * native machine architecture. We overwrite + * the directory information with impunity + * because it'll be released below after we + * write it to the file. Note that all the + * other tag construction routines assume that + * we do this byte-swapping; i.e. they only + * byte-swap indirect data. + */ + for (dir = (TIFFDirEntry*) data; dircount; dir++, dircount--) { + TIFFSwabArrayOfShort(&dir->tdir_tag, 2); + TIFFSwabArrayOfLong(&dir->tdir_count, 2); + } + dircount = (uint16) nfields; + TIFFSwabShort(&dircount); + TIFFSwabLong(&nextdiroff); + } + + (void) TIFFSeekFile(tif, tif->tif_dataoff, SEEK_SET); + if (!WriteOK(tif, &dircount, sizeof (dircount))) { + TIFFError(tif->tif_name, "Error writing private subdirectory count"); + goto bad; + } + if (!WriteOK(tif, data, dirsize)) { + TIFFError(tif->tif_name, "Error writing private subdirectory contents"); + goto bad; + } + if (!WriteOK(tif, &nextdiroff, sizeof (nextdiroff))) { + TIFFError(tif->tif_name, "Error writing private subdirectory link"); + goto bad; + } + tif->tif_dataoff += sizeof(dircount) + dirsize + sizeof(nextdiroff); + + _TIFFfree(data); + _TIFFfree(fields); + tif->tif_flags &= ~TIFF_DIRTYDIRECT; + +#if (0) + /* This stuff commented out because I don't think we want it for + subdirectories, but I could be wrong. */ + (*tif->tif_cleanup)(tif); + + /* + * Reset directory-related state for subsequent + * directories. + */ + TIFFDefaultDirectory(tif); + tif->tif_curoff = 0; + tif->tif_row = (uint32) -1; + tif->tif_curstrip = (tstrip_t) -1; +#endif + + return (directory_offset); +bad: + _TIFFfree(data); + _TIFFfree(fields); + return (0); +} +#undef WriteRationalPair + +/* + * Process tags that are not special cased. + */ +/* The standard function TIFFWriteNormalTag() could definitely be replaced + with a simple call to this function, just adding TIFFGetField() as the + last argument. */ +static int +TIFFWriteNormalSubTag(TIFF* tif, TIFFDirEntry* dir, const TIFFFieldInfo* fip, + int (*getFieldFn)(TIFF *tif, ttag_t tag, ...)) +{ + u_short wc = (u_short) fip->field_writecount; + + dir->tdir_tag = fip->field_tag; + dir->tdir_type = (u_short) fip->field_type; + dir->tdir_count = wc; +#define WRITEF(x,y) x(tif, fip->field_type, fip->field_tag, dir, wc, y) + switch (fip->field_type) { + case TIFF_SHORT: + case TIFF_SSHORT: + if (wc > 1) { + uint16* wp; + if (wc == (u_short) TIFF_VARIABLE) { + (*getFieldFn)(tif, fip->field_tag, &wc, &wp); + dir->tdir_count = wc; + } else + (*getFieldFn)(tif, fip->field_tag, &wp); + if (!WRITEF(TIFFWriteShortArray, wp)) + return (0); + } else { + uint16 sv; + (*getFieldFn)(tif, fip->field_tag, &sv); + dir->tdir_offset = + TIFFInsertData(tif, dir->tdir_type, sv); + } + break; + case TIFF_LONG: + case TIFF_SLONG: + if (wc > 1) { + uint32* lp; + if (wc == (u_short) TIFF_VARIABLE) { + (*getFieldFn)(tif, fip->field_tag, &wc, &lp); + dir->tdir_count = wc; + } else + (*getFieldFn)(tif, fip->field_tag, &lp); + if (!WRITEF(TIFFWriteLongArray, lp)) + return (0); + } else { + /* XXX handle LONG->SHORT conversion */ + (*getFieldFn)(tif, fip->field_tag, &dir->tdir_offset); + } + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + if (wc > 1) { + float* fp; + if (wc == (u_short) TIFF_VARIABLE) { + (*getFieldFn)(tif, fip->field_tag, &wc, &fp); + dir->tdir_count = wc; + } else + (*getFieldFn)(tif, fip->field_tag, &fp); + if (!WRITEF(TIFFWriteRationalArray, fp)) + return (0); + } else { + float fv; + (*getFieldFn)(tif, fip->field_tag, &fv); + if (!WRITEF(TIFFWriteRationalArray, &fv)) + return (0); + } + break; + case TIFF_FLOAT: + if (wc > 1) { + float* fp; + if (wc == (u_short) TIFF_VARIABLE) { + (*getFieldFn)(tif, fip->field_tag, &wc, &fp); + dir->tdir_count = wc; + } else + (*getFieldFn)(tif, fip->field_tag, &fp); + if (!WRITEF(TIFFWriteFloatArray, fp)) + return (0); + } else { + float fv; + (*getFieldFn)(tif, fip->field_tag, &fv); + if (!WRITEF(TIFFWriteFloatArray, &fv)) + return (0); + } + break; + case TIFF_DOUBLE: + /* Hey - I think this is a bug, or at least a "gross + inconsistency", in the TIFF library. Look at the original + TIFF library code below within the "#if (0) ... #else". + Just from the type of *dp, you can see that this code + expects TIFFGetField() to be handed a double ** for + any TIFF_DOUBLE tag, even for the constant wc==1 case. + This is totally inconsistent with other fields (like + TIFF_FLOAT, above) and is also inconsistent with the + TIFFSetField() function for TIFF_DOUBLEs, which expects + to be passed a single double by value for the wc==1 case. + (See the handling of TIFFFetchNormalTag() in tif_dirread.c + for an example.) Maybe this function was written before + TIFFWriteDoubleArray() was written, not that that's an + excuse. Anyway, the new code below is a trivial modification + of the TIFF_FLOAT code above. The fact that even single + doubles get written out in the data segment and get an + offset value stored is irrelevant here - that is all + handled by TIFFWriteDoubleArray(). */ +#if (0) + { double* dp; + if (wc == (u_short) TIFF_VARIABLE) { + (*getFieldFn)(tif, fip->field_tag, &wc, &dp); + dir->tdir_count = wc; + } else + (*getFieldFn)(tif, fip->field_tag, &dp); + TIFFCvtNativeToIEEEDouble(tif, wc, dp); + if (!TIFFWriteData(tif, dir, (char*) dp)) + return (0); + } +#else + if (wc > 1) { + double* dp; + if (wc == (u_short) TIFF_VARIABLE) { + (*getFieldFn)(tif, fip->field_tag, &wc, &dp); + dir->tdir_count = wc; + } else + (*getFieldFn)(tif, fip->field_tag, &dp); + if (!WRITEF(TIFFWriteDoubleArray, dp)) + return (0); + } else { + double dv; + (*getFieldFn)(tif, fip->field_tag, &dv); + if (!WRITEF(TIFFWriteDoubleArray, &dv)) + return (0); + } +#endif + break; + case TIFF_ASCII: + { char* cp; + (*getFieldFn)(tif, fip->field_tag, &cp); + dir->tdir_count = (uint32) (strlen(cp) + 1); + if (!TIFFWriteByteArray(tif, dir, cp)) + return (0); + } + break; + case TIFF_UNDEFINED: + { char* cp; + if (wc == (u_short) TIFF_VARIABLE) { + (*getFieldFn)(tif, fip->field_tag, &wc, &cp); + dir->tdir_count = wc; + } else + (*getFieldFn)(tif, fip->field_tag, &cp); + if (!TIFFWriteByteArray(tif, dir, cp)) + return (0); + } + break; + } + return (1); +} +#undef WRITEF + +/* Everything after this is exactly duplicated from the standard tif_dirwrite.c + file, necessitated by the fact that they are declared static there so + we can't call them! +*/ +/* + * Setup a directory entry with either a SHORT + * or LONG type according to the value. + */ +static void +TIFFSetupShortLong(TIFF* tif, ttag_t tag, TIFFDirEntry* dir, uint32 v) +{ + dir->tdir_tag = tag; + dir->tdir_count = 1; + if (v > 0xffffL) { + dir->tdir_type = (short) TIFF_LONG; + dir->tdir_offset = v; + } else { + dir->tdir_type = (short) TIFF_SHORT; + dir->tdir_offset = TIFFInsertData(tif, (int) TIFF_SHORT, v); + } +} +#undef MakeShortDirent + +#ifndef TIFFWriteRational +/* + * Setup a RATIONAL directory entry and + * write the associated indirect value. + */ +static int +TIFFWriteRational(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, float v) +{ + return (TIFFWriteRationalArray(tif, type, tag, dir, 1, &v)); +} +#endif + +#define NITEMS(x) (sizeof (x) / sizeof (x[0])) +/* + * Setup a directory entry that references a + * samples/pixel array of SHORT values and + * (potentially) write the associated indirect + * values. + */ +static int +TIFFWritePerSampleShorts(TIFF* tif, ttag_t tag, TIFFDirEntry* dir) +{ + uint16 buf[10], v; + uint16* w = buf; + int i, status, samples = tif->tif_dir.td_samplesperpixel; + + if (samples > NITEMS(buf)) + w = (uint16*) _TIFFmalloc(samples * sizeof (uint16)); + TIFFGetField(tif, tag, &v); + for (i = 0; i < samples; i++) + w[i] = v; + status = TIFFWriteShortArray(tif, TIFF_SHORT, tag, dir, samples, w); + if (w != buf) + _TIFFfree((char*) w); + return (status); +} + +/* + * Setup a directory entry that references a samples/pixel array of ``type'' + * values and (potentially) write the associated indirect values. The source + * data from TIFFGetField() for the specified tag must be returned as double. + */ +static int +TIFFWritePerSampleAnys(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir) +{ + double buf[10], v; + double* w = buf; + int i, status; + int samples = (int) tif->tif_dir.td_samplesperpixel; + + if (samples > NITEMS(buf)) + w = (double*) _TIFFmalloc(samples * sizeof (double)); + TIFFGetField(tif, tag, &v); + for (i = 0; i < samples; i++) + w[i] = v; + status = TIFFWriteAnyArray(tif, type, tag, dir, samples, w); + if (w != buf) + _TIFFfree(w); + return (status); +} +#undef NITEMS + +/* + * Setup a pair of shorts that are returned by + * value, rather than as a reference to an array. + */ +static int +TIFFSetupShortPair(TIFF* tif, ttag_t tag, TIFFDirEntry* dir) +{ + uint16 v[2]; + + TIFFGetField(tif, tag, &v[0], &v[1]); + return (TIFFWriteShortArray(tif, TIFF_SHORT, tag, dir, 2, v)); +} + +/* + * Setup a directory entry for an NxM table of shorts, + * where M is known to be 2**bitspersample, and write + * the associated indirect data. + */ +static int +TIFFWriteShortTable(TIFF* tif, + ttag_t tag, TIFFDirEntry* dir, uint32 n, uint16** table) +{ + uint32 i, off; + + dir->tdir_tag = tag; + dir->tdir_type = (short) TIFF_SHORT; + /* XXX -- yech, fool TIFFWriteData */ + dir->tdir_count = (uint32) (1L<tif_dir.td_bitspersample); + off = tif->tif_dataoff; + for (i = 0; i < n; i++) + if (!TIFFWriteData(tif, dir, (char *)table[i])) + return (0); + dir->tdir_count *= n; + dir->tdir_offset = off; + return (1); +} + +/* + * Write/copy data associated with an ASCII or opaque tag value. + */ +static int +TIFFWriteByteArray(TIFF* tif, TIFFDirEntry* dir, char* cp) +{ + if (dir->tdir_count > 4) { + if (!TIFFWriteData(tif, dir, cp)) + return (0); + } else + _TIFFmemcpy(&dir->tdir_offset, cp, dir->tdir_count); + return (1); +} + +/* + * Setup a directory entry of an array of SHORT + * or SSHORT and write the associated indirect values. + */ +static int +TIFFWriteShortArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, uint16* v) +{ + dir->tdir_tag = tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + if (n <= 2) { + if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { + dir->tdir_offset = (uint32) ((long) v[0] << 16); + if (n == 2) + dir->tdir_offset |= v[1] & 0xffff; + } else { + dir->tdir_offset = v[0] & 0xffff; + if (n == 2) + dir->tdir_offset |= (long) v[1] << 16; + } + return (1); + } else + return (TIFFWriteData(tif, dir, (char*) v)); +} + +/* + * Setup a directory entry of an array of LONG + * or SLONG and write the associated indirect values. + */ +static int +TIFFWriteLongArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, uint32* v) +{ + dir->tdir_tag = tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + if (n == 1) { + dir->tdir_offset = v[0]; + return (1); + } else + return (TIFFWriteData(tif, dir, (char*) v)); +} + +/* + * Setup a directory entry of an array of RATIONAL + * or SRATIONAL and write the associated indirect values. + */ +static int +TIFFWriteRationalArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, float* v) +{ + uint32 i; + uint32* t; + int status; + + dir->tdir_tag = tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + t = (uint32*) _TIFFmalloc(2*n * sizeof (uint32)); + for (i = 0; i < n; i++) { + float fv = v[i]; + int sign = 1; + uint32 den; + + if (fv < 0) { + if (type == TIFF_RATIONAL) { + TIFFWarning(tif->tif_name, + "\"%s\": Information lost writing value (%g) as (unsigned) RATIONAL", + _TIFFFieldWithTag(tif,tag)->field_name, v); + fv = 0; + } else + fv = -fv, sign = -1; + } + den = 1L; + if (fv > 0) { + while (fv < 1L<<(31-3) && den < 1L<<(31-3)) + fv *= 1<<3, den *= 1L<<3; + } + t[2*i+0] = sign * (fv + 0.5); + t[2*i+1] = den; + } + status = TIFFWriteData(tif, dir, (char *)t); + _TIFFfree((char*) t); + return (status); +} + +static int +TIFFWriteFloatArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, float* v) +{ + dir->tdir_tag = tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + TIFFCvtNativeToIEEEFloat(tif, n, v); + if (n == 1) { + dir->tdir_offset = *(uint32*) &v[0]; + return (1); + } else + return (TIFFWriteData(tif, dir, (char*) v)); +} + +static int +TIFFWriteDoubleArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, double* v) +{ + dir->tdir_tag = tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + TIFFCvtNativeToIEEEDouble(tif, n, v); + return (TIFFWriteData(tif, dir, (char*) v)); +} + +/* + * Write an array of ``type'' values for a specified tag (i.e. this is a tag + * which is allowed to have different types, e.g. SMaxSampleType). + * Internally the data values are represented as double since a double can + * hold any of the TIFF tag types (yes, this should really be an abstract + * type tany_t for portability). The data is converted into the specified + * type in a temporary buffer and then handed off to the appropriate array + * writer. + */ +static int +TIFFWriteAnyArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, double* v) +{ + char buf[10 * sizeof(double)]; + char* w = buf; + int i, status = 0; + + if (n * tiffDataWidth[type] > sizeof buf) + w = (char*) _TIFFmalloc(n * tiffDataWidth[type]); + switch (type) { + case TIFF_BYTE: + { unsigned char* bp = (unsigned char*) w; + for (i = 0; i < n; i++) + bp[i] = (unsigned char) v[i]; + dir->tdir_tag = tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + if (!TIFFWriteByteArray(tif, dir, (char*) bp)) + goto out; + } + break; + case TIFF_SBYTE: + { signed char* bp = (signed char*) w; + for (i = 0; i < n; i++) + bp[i] = (signed char) v[i]; + dir->tdir_tag = tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + if (!TIFFWriteByteArray(tif, dir, (char*) bp)) + goto out; + } + break; + case TIFF_SHORT: + { uint16* bp = (uint16*) w; + for (i = 0; i < n; i++) + bp[i] = (uint16) v[i]; + if (!TIFFWriteShortArray(tif, type, tag, dir, n, (uint16*)bp)) + goto out; + } + break; + case TIFF_SSHORT: + { int16* bp = (int16*) w; + for (i = 0; i < n; i++) + bp[i] = (int16) v[i]; + if (!TIFFWriteShortArray(tif, type, tag, dir, n, (uint16*)bp)) + goto out; + } + break; + case TIFF_LONG: + { uint32* bp = (uint32*) w; + for (i = 0; i < n; i++) + bp[i] = (uint32) v[i]; + if (!TIFFWriteLongArray(tif, type, tag, dir, n, bp)) + goto out; + } + break; + case TIFF_SLONG: + { int32* bp = (int32*) w; + for (i = 0; i < n; i++) + bp[i] = (int32) v[i]; + if (!TIFFWriteLongArray(tif, type, tag, dir, n, (uint32*) bp)) + goto out; + } + break; + case TIFF_FLOAT: + { float* bp = (float*) w; + for (i = 0; i < n; i++) + bp[i] = (float) v[i]; + if (!TIFFWriteFloatArray(tif, type, tag, dir, n, bp)) + goto out; + } + break; + case TIFF_DOUBLE: + return (TIFFWriteDoubleArray(tif, type, tag, dir, n, v)); + default: + /* TIFF_NOTYPE */ + /* TIFF_ASCII */ + /* TIFF_UNDEFINED */ + /* TIFF_RATIONAL */ + /* TIFF_SRATIONAL */ + goto out; + } + status = 1; + out: + if (w != buf) + _TIFFfree(w); + return (status); +} + +#ifdef COLORIMETRY_SUPPORT +static int +TIFFWriteTransferFunction(TIFF* tif, TIFFDirEntry* dir) +{ + TIFFDirectory* td = &tif->tif_dir; + tsize_t n = (1L<td_bitspersample) * sizeof (uint16); + uint16** tf = td->td_transferfunction; + int ncols; + + /* + * Check if the table can be written as a single column, + * or if it must be written as 3 columns. Note that we + * write a 3-column tag if there are 2 samples/pixel and + * a single column of data won't suffice--hmm. + */ + switch (td->td_samplesperpixel - td->td_extrasamples) { + default: if (_TIFFmemcmp(tf[0], tf[2], n)) { ncols = 3; break; } + case 2: if (_TIFFmemcmp(tf[0], tf[1], n)) { ncols = 3; break; } + case 1: case 0: ncols = 1; + } + return (TIFFWriteShortTable(tif, + TIFFTAG_TRANSFERFUNCTION, dir, ncols, tf)); +} +#endif + +/* + * Write a contiguous directory item. + */ +static int +TIFFWriteData(TIFF* tif, TIFFDirEntry* dir, char* cp) +{ + tsize_t cc; + + if (tif->tif_flags & TIFF_SWAB) { + switch (dir->tdir_type) { + case TIFF_SHORT: + case TIFF_SSHORT: + TIFFSwabArrayOfShort((uint16*) cp, dir->tdir_count); + break; + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_FLOAT: + TIFFSwabArrayOfLong((uint32*) cp, dir->tdir_count); + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + TIFFSwabArrayOfLong((uint32*) cp, 2*dir->tdir_count); + break; + case TIFF_DOUBLE: + TIFFSwabArrayOfDouble((double*) cp, dir->tdir_count); + break; + } + } + dir->tdir_offset = tif->tif_dataoff; + cc = dir->tdir_count * tiffDataWidth[dir->tdir_type]; + if (SeekOK(tif, dir->tdir_offset) && + WriteOK(tif, cp, cc)) { + tif->tif_dataoff += (cc + 1) & ~1; + return (1); + } + TIFFError(tif->tif_name, "Error writing data for field \"%s\"", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); + return (0); +} + +/* + * Link the current directory into the + * directory chain for the file. + */ +static int +TIFFLinkDirectory(TIFF* tif) +{ + static const char module[] = "TIFFLinkDirectory"; + uint32 nextdir; + uint32 diroff; + + tif->tif_diroff = (TIFFSeekFile(tif, (toff_t) 0, SEEK_END)+1) &~ 1; + diroff = (uint32) tif->tif_diroff; + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&diroff); +#if SUBIFD_SUPPORT + if (tif->tif_flags & TIFF_INSUBIFD) { + (void) TIFFSeekFile(tif, tif->tif_subifdoff, SEEK_SET); + if (!WriteOK(tif, &diroff, sizeof (diroff))) { + TIFFError(module, + "%s: Error writing SubIFD directory link", + tif->tif_name); + return (0); + } + /* + * Advance to the next SubIFD or, if this is + * the last one configured, revert back to the + * normal directory linkage. + */ + if (--tif->tif_nsubifd) + tif->tif_subifdoff += sizeof (diroff); + else + tif->tif_flags &= ~TIFF_INSUBIFD; + return (1); + } +#endif + if (tif->tif_header.tiff_diroff == 0) { + /* + * First directory, overwrite offset in header. + */ + tif->tif_header.tiff_diroff = (uint32) tif->tif_diroff; +#define HDROFF(f) ((toff_t) &(((TIFFHeader*) 0)->f)) + (void) TIFFSeekFile(tif, HDROFF(tiff_diroff), SEEK_SET); + if (!WriteOK(tif, &diroff, sizeof (diroff))) { + TIFFError(tif->tif_name, "Error writing TIFF header"); + return (0); + } + return (1); + } + /* + * Not the first directory, search to the last and append. + */ + nextdir = tif->tif_header.tiff_diroff; + do { + uint16 dircount; + + if (!SeekOK(tif, nextdir) || + !ReadOK(tif, &dircount, sizeof (dircount))) { + TIFFError(module, "Error fetching directory count"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + (void) TIFFSeekFile(tif, + dircount * sizeof (TIFFDirEntry), SEEK_CUR); + if (!ReadOK(tif, &nextdir, sizeof (nextdir))) { + TIFFError(module, "Error fetching directory link"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&nextdir); + } while (nextdir != 0); + (void) TIFFSeekFile(tif, -(toff_t) sizeof (nextdir), SEEK_CUR); + if (!WriteOK(tif, &diroff, sizeof (diroff))) { + TIFFError(module, "Error writing directory link"); + return (0); + } + return (1); +} diff --git a/contrib/ras/ras2tif.c b/contrib/ras/ras2tif.c new file mode 100755 index 0000000..e314d38 --- /dev/null +++ b/contrib/ras/ras2tif.c @@ -0,0 +1,247 @@ +#ifndef lint +static char sccsid[] = "@(#)ras2tif.c 1.2 90/03/06"; +#endif +/*- + * ras2tif.c - Converts from a Sun Rasterfile to a Tagged Image File. + * + * Copyright (c) 1990 by Sun Microsystems, Inc. + * + * Author: Patrick J. Naughton + * naughton@wind.sun.com + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation. + * + * This file is provided AS IS with no warranties of any kind. The author + * shall have no liability with respect to the infringement of copyrights, + * trade secrets or any patents by this file or any part thereof. In no + * event will the author be liable for any lost revenue or profits or + * other special, indirect and consequential damages. + * + * Comments and additions should be sent to the author: + * + * Patrick J. Naughton + * Sun Microsystems + * 2550 Garcia Ave, MS 14-40 + * Mountain View, CA 94043 + * (415) 336-1080 + * + * Revision History: + * 11-Jan-89: Created. + * 06-Mar-90: fix bug in SCALE() macro. + * got rid of xres and yres, (they weren't working anyways). + * fixed bpsl calculation. + * 25-Nov-99: y2k fix (year as 1900 + tm_year) + * + * Description: + * This program takes a Sun Rasterfile [see rasterfile(5)] as input and + * writes a MicroSoft/Aldus "Tagged Image File Format" image or "TIFF" file. + * The input file may be standard input, but the output TIFF file must be a + * real file since seek(2) is used. + */ + +#include +#include +#include +#include "tiffio.h" + +typedef int boolean; +#define True (1) +#define False (0) +#define SCALE(x) (((x)*((1L<<16)-1))/255) + +boolean Verbose = False; +boolean dummyinput = False; +char *pname; /* program name (used for error messages) */ + +void +error(s1, s2) + char *s1, + *s2; +{ + fprintf(stderr, s1, pname, s2); + exit(1); +} + +void +usage() +{ + error("usage: %s -[vq] [-|rasterfile] TIFFfile\n", NULL); +} + + +main(argc, argv) + int argc; + char *argv[]; +{ + char *inf = NULL; + char *outf = NULL; + FILE *fp; + int depth, + i; + long row; + TIFF *tif; + Pixrect *pix; /* The Sun Pixrect */ + colormap_t Colormap; /* The Pixrect Colormap */ + u_short red[256], + green[256], + blue[256]; + struct tm *ct; + struct timeval tv; + long width, + height; + long rowsperstrip; + int year; + short photometric; + short samplesperpixel; + short bitspersample; + int bpsl; + static char *version = "ras2tif 1.0"; + static char *datetime = "1990:01:01 12:00:00"; + + gettimeofday(&tv, (struct timezone *) NULL); + ct = localtime(&tv.tv_sec); + year=1900 + ct->tm_year; + sprintf(datetime, "%04d:%02d:%02d %02d:%02d:%02d", + year, ct->tm_mon + 1, ct->tm_mday, + ct->tm_hour, ct->tm_min, ct->tm_sec); + + setbuf(stderr, NULL); + pname = argv[0]; + + while (--argc) { + if ((++argv)[0][0] == '-') { + switch (argv[0][1]) { + case 'v': + Verbose = True; + break; + case 'q': + usage(); + break; + case '\0': + if (inf == NULL) + dummyinput = True; + else + usage(); + break; + default: + fprintf(stderr, "%s: illegal option -%c.\n", pname, + argv[0][1]); + exit(1); + } + } else if (inf == NULL && !dummyinput) { + inf = argv[0]; + } else if (outf == NULL) + outf = argv[0]; + else + usage(); + } + + if (outf == NULL) + error("%s: can't write output file to a stream.\n", NULL); + + if (dummyinput || inf == NULL) { + inf = "Standard Input"; + fp = stdin; + } else if ((fp = fopen(inf, "r")) == NULL) + error("%s: %s couldn't be opened.\n", inf); + + if (Verbose) + fprintf(stderr, "Reading rasterfile from %s...", inf); + + pix = pr_load(fp, &Colormap); + if (pix == NULL) + error("%s: %s is not a raster file.\n", inf); + + if (Verbose) + fprintf(stderr, "done.\n"); + + if (Verbose) + fprintf(stderr, "Writing %s...", outf); + + tif = TIFFOpen(outf, "w"); + + if (tif == NULL) + error("%s: error opening TIFF file %s", outf); + + width = pix->pr_width; + height = pix->pr_height; + depth = pix->pr_depth; + + switch (depth) { + case 1: + samplesperpixel = 1; + bitspersample = 1; + photometric = PHOTOMETRIC_MINISBLACK; + break; + case 8: + samplesperpixel = 1; + bitspersample = 8; + photometric = PHOTOMETRIC_PALETTE; + break; + case 24: + samplesperpixel = 3; + bitspersample = 8; + photometric = PHOTOMETRIC_RGB; + break; + case 32: + samplesperpixel = 4; + bitspersample = 8; + photometric = PHOTOMETRIC_RGB; + break; + default: + error("%s: bogus depth: %d\n", depth); + } + + bpsl = ((depth * width + 15) >> 3) & ~1; + rowsperstrip = (8 * 1024) / bpsl; + + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width); + TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bitspersample); + TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_LZW); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, photometric); + TIFFSetField(tif, TIFFTAG_DOCUMENTNAME, inf); + TIFFSetField(tif, TIFFTAG_IMAGEDESCRIPTION, "converted Sun rasterfile"); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, samplesperpixel); + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip); + TIFFSetField(tif, TIFFTAG_STRIPBYTECOUNTS, height / rowsperstrip); + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(tif, TIFFTAG_SOFTWARE, version); + TIFFSetField(tif, TIFFTAG_DATETIME, datetime); + + memset(red, 0, sizeof(red)); + memset(green, 0, sizeof(green)); + memset(blue, 0, sizeof(blue)); + if (depth == 8) { + TIFFSetField(tif, TIFFTAG_COLORMAP, red, green, blue); + for (i = 0; i < Colormap.length; i++) { + red[i] = SCALE(Colormap.map[0][i]); + green[i] = SCALE(Colormap.map[1][i]); + blue[i] = SCALE(Colormap.map[2][i]); + } + } + if (Verbose) + fprintf(stderr, "%dx%dx%d image, ", width, height, depth); + + for (row = 0; row < height; row++) + if (TIFFWriteScanline(tif, + (u_char *) mprd_addr(mpr_d(pix), 0, row), + row, 0) < 0) { + fprintf("failed a scanline write (%d)\n", row); + break; + } + TIFFFlushData(tif); + TIFFClose(tif); + + if (Verbose) + fprintf(stderr, "done.\n"); + + pr_destroy(pix); + + exit(0); +} diff --git a/contrib/ras/readme b/contrib/ras/readme new file mode 100755 index 0000000..6d74b28 --- /dev/null +++ b/contrib/ras/readme @@ -0,0 +1,10 @@ +Sun May 19 22:28:16 PDT 1991 + +These programs are from Patrick Naughton (naughton@wind.sun.com). +I've tried to update them to reflect changes to the library, but +I am unable to verify that they operate properly, because they +require the Sun pixrect library. + +Please contact Patrick directly if you have questions/problems. + + Sam diff --git a/contrib/ras/tif2ras.c b/contrib/ras/tif2ras.c new file mode 100755 index 0000000..20c4bf7 --- /dev/null +++ b/contrib/ras/tif2ras.c @@ -0,0 +1,337 @@ +#ifndef lint +static char id[] = "$Id: tif2ras.c,v 1.1.1.1 2000/06/24 19:10:17 tshead Exp $"; +#endif +/*- + * tif2ras.c - Converts from a Tagged Image File Format image to a Sun Raster. + * + * Copyright (c) 1990 by Sun Microsystems, Inc. + * + * Author: Patrick J. Naughton + * naughton@wind.sun.com + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation. + * + * This file is provided AS IS with no warranties of any kind. The author + * shall have no liability with respect to the infringement of copyrights, + * trade secrets or any patents by this file or any part thereof. In no + * event will the author be liable for any lost revenue or profits or + * other special, indirect and consequential damages. + * + * Comments and additions should be sent to the author: + * + * Patrick J. Naughton + * Sun Microsystems + * 2550 Garcia Ave, MS 14-40 + * Mountain View, CA 94043 + * (415) 336-1080 + * + * Revision History: + * 10-Jan-89: Created. + * 06-Mar-90: Change to byte encoded rasterfiles. + * fix bug in call to ReadScanline(). + * fix bug in CVT() macro. + * fix assignment of td, (missing &). + * + * Description: + * This program takes a MicroSoft/Aldus "Tagged Image File Format" image or + * "TIFF" file as input and writes a Sun Rasterfile [see rasterfile(5)]. The + * output file may be standard output, but the input TIFF file must be a real + * file since seek(2) is used. + */ + +#include +#include +#include "tiffio.h" + +typedef int boolean; +#define True (1) +#define False (0) +#define CVT(x) (((x) * 255) / ((1L<<16)-1)) + +boolean Verbose = False; +char *pname; /* program name (used for error messages) */ + +void +error(s1, s2) + char *s1, + *s2; +{ + fprintf(stderr, s1, pname, s2); + exit(1); +} + +void +usage() +{ + error("usage: %s -[vq] TIFFfile [rasterfile]\n", NULL); +} + + +main(argc, argv) + int argc; + char *argv[]; +{ + char *inf = NULL; + char *outf = NULL; + FILE *fp; + long width, + height; + int depth, + numcolors; + register TIFF *tif; + TIFFDirectory *td; + register u_char *inp, + *outp; + register int col, + i; + register long row; + u_char *Map = NULL; + u_char *buf; + short bitspersample; + short samplesperpixel; + short photometric; + u_short *redcolormap, + *bluecolormap, + *greencolormap; + + Pixrect *pix; /* The Sun Pixrect */ + colormap_t Colormap; /* The Pixrect Colormap */ + u_char red[256], + green[256], + blue[256]; + + setbuf(stderr, NULL); + pname = argv[0]; + + while (--argc) { + if ((++argv)[0][0] == '-') + switch (argv[0][1]) { + case 'v': + Verbose = True; + break; + case 'q': + usage(); + break; + default: + fprintf(stderr, "%s: illegal option -%c.\n", pname, + argv[0][1]); + exit(1); + } + else if (inf == NULL) + inf = argv[0]; + else if (outf == NULL) + outf = argv[0]; + else + usage(); + + } + + if (inf == NULL) + error("%s: can't read input file from a stream.\n", NULL); + + if (Verbose) + fprintf(stderr, "Reading %s...", inf); + + tif = TIFFOpen(inf, "r"); + + if (tif == NULL) + error("%s: error opening TIFF file %s", inf); + + if (Verbose) + TIFFPrintDirectory(tif, stderr, True, False, False); + TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &bitspersample); + if (bitspersample > 8) + error("%s: can't handle more than 8-bits per sample\n", NULL); + + TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel); + switch (samplesperpixel) { + case 1: + if (bitspersample == 1) + depth = 1; + else + depth = 8; + break; + case 3: + case 4: + depth = 24; + break; + default: + error("%s: only handle 1-channel gray scale or 3-channel color\n"); + } + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); + + if (Verbose) + fprintf(stderr, "%dx%dx%d image, ", width, height, depth); + if (Verbose) + fprintf(stderr, "%d bits/sample, %d samples/pixel, ", + bitspersample, samplesperpixel); + + pix = mem_create(width, height, depth); + if (pix == (Pixrect *) NULL) + error("%s: can't allocate memory for output pixrect...\n", NULL); + + numcolors = (1 << bitspersample); + + TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometric); + if (numcolors == 2) { + if (Verbose) + fprintf(stderr, "monochrome "); + Colormap.type = RMT_NONE; + Colormap.length = 0; + Colormap.map[0] = Colormap.map[1] = Colormap.map[2] = NULL; + } else { + switch (photometric) { + case PHOTOMETRIC_MINISBLACK: + if (Verbose) + fprintf(stderr, "%d graylevels (min=black), ", numcolors); + Map = (u_char *) malloc(numcolors * sizeof(u_char)); + for (i = 0; i < numcolors; i++) + Map[i] = (255 * i) / numcolors; + Colormap.type = RMT_EQUAL_RGB; + Colormap.length = numcolors; + Colormap.map[0] = Colormap.map[1] = Colormap.map[2] = Map; + break; + case PHOTOMETRIC_MINISWHITE: + if (Verbose) + fprintf(stderr, "%d graylevels (min=white), ", numcolors); + Map = (u_char *) malloc(numcolors * sizeof(u_char)); + for (i = 0; i < numcolors; i++) + Map[i] = 255 - ((255 * i) / numcolors); + Colormap.type = RMT_EQUAL_RGB; + Colormap.length = numcolors; + Colormap.map[0] = Colormap.map[1] = Colormap.map[2] = Map; + break; + case PHOTOMETRIC_RGB: + if (Verbose) + fprintf(stderr, "truecolor "); + Colormap.type = RMT_NONE; + Colormap.length = 0; + Colormap.map[0] = Colormap.map[1] = Colormap.map[2] = NULL; + break; + case PHOTOMETRIC_PALETTE: + if (Verbose) + fprintf(stderr, "colormapped "); + Colormap.type = RMT_EQUAL_RGB; + Colormap.length = numcolors; + memset(red, 0, sizeof(red)); + memset(green, 0, sizeof(green)); + memset(blue, 0, sizeof(blue)); + TIFFGetField(tif, TIFFTAG_COLORMAP, + &redcolormap, &greencolormap, &bluecolormap); + for (i = 0; i < numcolors; i++) { + red[i] = (u_char) CVT(redcolormap[i]); + green[i] = (u_char) CVT(greencolormap[i]); + blue[i] = (u_char) CVT(bluecolormap[i]); + } + Colormap.map[0] = red; + Colormap.map[1] = green; + Colormap.map[2] = blue; + break; + case PHOTOMETRIC_MASK: + error("%s: Don't know how to handle PHOTOMETRIC_MASK\n"); + break; + case PHOTOMETRIC_DEPTH: + error("%s: Don't know how to handle PHOTOMETRIC_DEPTH\n"); + break; + default: + error("%s: unknown photometric (cmap): %d\n", photometric); + } + } + + buf = (u_char *) malloc(TIFFScanlineSize(tif)); + if (buf == NULL) + error("%s: can't allocate memory for scanline buffer...\n", NULL); + + for (row = 0; row < height; row++) { + if (TIFFReadScanline(tif, buf, row, 0) < 0) + error("%s: bad data read on line: %d\n", row); + inp = buf; + outp = (u_char *) mprd_addr(mpr_d(pix), 0, row); + switch (photometric) { + case PHOTOMETRIC_RGB: + if (samplesperpixel == 4) + for (col = 0; col < width; col++) { + *outp++ = *inp++; /* Blue */ + *outp++ = *inp++; /* Green */ + *outp++ = *inp++; /* Red */ + inp++; /* skip alpha channel */ + } + else + for (col = 0; col < width; col++) { + *outp++ = *inp++; /* Blue */ + *outp++ = *inp++; /* Green */ + *outp++ = *inp++; /* Red */ + } + break; + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + switch (bitspersample) { + case 1: + for (col = 0; col < ((width + 7) / 8); col++) + *outp++ = *inp++; + break; + case 2: + for (col = 0; col < ((width + 3) / 4); col++) { + *outp++ = (*inp >> 6) & 3; + *outp++ = (*inp >> 4) & 3; + *outp++ = (*inp >> 2) & 3; + *outp++ = *inp++ & 3; + } + break; + case 4: + for (col = 0; col < width / 2; col++) { + *outp++ = *inp >> 4; + *outp++ = *inp++ & 0xf; + } + break; + case 8: + for (col = 0; col < width; col++) + *outp++ = *inp++; + break; + default: + error("%s: bad bits/sample: %d\n", bitspersample); + } + break; + case PHOTOMETRIC_PALETTE: + memcpy(outp, inp, width); + break; + default: + error("%s: unknown photometric (write): %d\n", photometric); + } + } + + free((char *) buf); + + if (Verbose) + fprintf(stderr, "done.\n"); + + if (outf == NULL || strcmp(outf, "Standard Output") == 0) { + outf = "Standard Output"; + fp = stdout; + } else { + if (!(fp = fopen(outf, "w"))) + error("%s: %s couldn't be opened for writing.\n", outf); + } + + if (Verbose) + fprintf(stderr, "Writing rasterfile in %s...", outf); + + if (pr_dump(pix, fp, &Colormap, RT_BYTE_ENCODED, 0) == PIX_ERR) + error("%s: error writing Sun Rasterfile: %s\n", outf); + + if (Verbose) + fprintf(stderr, "done.\n"); + + pr_destroy(pix); + + if (fp != stdout) + fclose(fp); + + exit(0); +} diff --git a/contrib/vms/libtiff/makevms.com b/contrib/vms/libtiff/makevms.com new file mode 100755 index 0000000..33e62fc --- /dev/null +++ b/contrib/vms/libtiff/makevms.com @@ -0,0 +1,229 @@ +$!======================================================================== +$! +$! Name : MAKEVMS +$! +$! Purpose : Compile TIFF library +$! +$! Arguments : If P1 is DEBUG, compile with debug +$! +$! Created 1-DEC-1994 Karsten Spang +$! +$!======================================================================== +$ CURRENT_DIR=F$ENVIRONMENT("DEFAULT") +$ ON CONTROL_Y THEN GOTO EXIT +$ ON ERROR THEN GOTO EXIT +$! +$! Get hold on definitions +$! +$! Older versions of VMS may not recoqnize the "ARCH_NAME" keyword +$! This happens only on VAX +$! +$ SAVE_MESS=F$ENVIRONMENT("MESSAGE") +$ SET MESSAGE/NOID/NOFAC/NOSEV/NOTEXT +$ ARCH=F$GETSYI("ARCH_NAME") +$ SET MESSAGE 'SAVE_MESS' +$ IF F$TYPE(ARCH).EQS."" THEN ARCH="VAX" +$ ARCH=F$EDIT(ARCH,"UPCASE") +$! +$ DEFINE/NOLOG SYS SYS$LIBRARY +$ THIS_FILE=F$ENVIRONMENT("PROCEDURE") +$ PROC_NAME=F$PARSE(THIS_FILE,,,"NAME","SYNTAX_ONLY") +$ THIS_DIR=F$PARSE(THIS_FILE,,,"DEVICE","SYNTAX_ONLY")+ - + F$PARSE(THIS_FILE,,,"DIRECTORY","SYNTAX_ONLY") +$ SET DEFAULT 'THIS_DIR' +$ IF ARCH.EQS."ALPHA" +$ THEN +$ CONF_FP="HAVE_IEEEFP=1" +$ ELSE +$ CONF_FP="HAVE_IEEEFP=0" +$ ENDIF +$ CONF_LIBRARY="BSDTYPES,HAVE_MMAP" +$ IF P1.EQS."DEBUG" +$ THEN +$ DEBUG_OPTIONS="/DEBUG/NOOPTIMIZE" +$ CONF_LIBRARY=CONF_LIBRARY+",DEBUG" +$ LINK_OPTIONS="/DEBUG" +$ ELSE +$ DEBUG_OPTIONS="" +$ LINK_OPTIONS="" +$ ENDIF +$ DEFINES="/DEFINE=("+CONF_FP+","+CONF_LIBRARY+")" +$ C_COMPILE="CC"+DEBUG_OPTIONS+DEFINES +$ IF ARCH.EQS."ALPHA" +$ THEN +$! +$! You may want a different floating point option +$! +$ C_COMPILE=C_COMPILE+ - + "/FLOAT=IEEE_FLOAT/PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES" +$ ENDIF +$! +$ SOURCES="TIF_AUX,TIF_CLOSE,TIF_CODEC,TIF_COMPRESS,"+ - + "TIF_DIR,TIF_DIRINFO,TIF_DIRREAD,TIF_DIRWRITE,"+ - + "TIF_DUMPMODE,TIF_ERROR,TIF_FAX3,TIF_FAX3SM,TIF_FLUSH,TIF_GETIMAGE,"+ - +-! "TIF_JPEG,"+ - + "TIF_LZW,TIF_NEXT,TIF_OPEN,TIF_PACKBITS,TIF_PIXARLOG,TIF_PREDICT,"+ - + "TIF_PRINT,TIF_READ,TIF_STRIP,TIF_SWAB,TIF_THUNDER,TIF_TILE,"+ - + "TIF_VERSION,TIF_VMS,TIF_WARNING,TIF_WRITE" +! ",TIF_ZIP" +$ LIBFILE="TIFF" +$ IF F$SEARCH(LIBFILE+".OLB").EQS."" THEN - + LIBRARY/CREATE 'LIBFILE' +$! +$! Create the port library +$! +$ LIBPORT="[-.PORT]PORT" +$ IF F$SEARCH(LIBPORT+".OLB") .EQS "" +$ THEN +$ WRITE SYS$OUTPUT "Creating PORT.OLB" +$ LIBRARY/CREATE 'LIBPORT' +$ CREATE DUM.C +main(){getopt();strtoul();strcasecmp();} +$ C_COMPILE DUM +$ SET MESSAGE/ID/FAC/SEV/TEXT +$ DEFINE/USER SYS$OUTPUT LINK.WARNINGS +$ DEFINE/USER SYS$ERROR NLA0: +$ IF ARCH.EQS."ALPHA" +$ THEN +$ LINK DUM +$ ELSE +$ LINK DUM,SYS$INPUT:/OPTIONS +SYS$SHARE:VAXCRTL/SHARE +$ ENDIF +$ DELETE DUM.C;,DUM.OBJ;,DUM.EXE; +$ SEARCH/OUT=MISSING.OBJECTS LINK.WARNINGS LINK-I-UDFSYM +$ DELETE LINK.WARNINGS; +$ OPEN/READ MISSING MISSING.OBJECTS +$NEXTMIS: +$ READ/END=NOMOREMIS MISSING LINE +$ LINE=F$EDIT(LINE,"TRIM,COMPRESS,UPCASE") +$ LINE=F$ELEMENT(1," ",LINE) +$ IF LINE .EQS. " " THEN GOTO NEXTMIS +$ WRITE SYS$OUTPUT " "+LINE +$ C_COMPILE/OBJECT=[-.PORT]'LINE' [-.PORT]'LINE' +$ LIBRARY 'LIBPORT' [-.PORT]'LINE' +$ DELETE [-.PORT]'LINE'.OBJ; +$ GOTO NEXTMIS +$NOMOREMIS: +$ CLOSE MISSING +$ DELETE MISSING.OBJECTS; +$ ENDIF +$! +$! Create VERSION.H +$! +$ IF F$SEARCH("VERSION.H").EQS."" +$ THEN +$ WRITE SYS$OUTPUT "Creating VERSION.H" +$ IF F$SEARCH("MKVERSION.EXE").EQS."" +$ THEN +$ IF F$SEARCH("MKVERSION.OBJ").EQS."" +$ THEN +$ C_COMPILE MKVERSION +$ ENDIF +$ IF ARCH.EQS."ALPHA" +$ THEN +$ LINK MKVERSION,'LIBPORT'/LIBRARY +$ ELSE +$ LINK MKVERSION,'LIBPORT'/LIBRARY,SYS$INPUT:/OPTIONS +SYS$SHARE:VAXCRTL/SHARE +$ ENDIF +$ DELETE MKVERSION.OBJ;* +$ ENDIF +$ MKVERSION:=$'THIS_DIR'MKVERSION +$ MKVERSION -V [-]VERSION -A [-.DIST]TIFF.ALPHA VERSION.H +$ DELETE MKVERSION.EXE;* +$ ENDIF +$! +$! Create TIF_FAX3SM.C +$! +$ IF F$SEARCH("TIF_FAX3SM.C").EQS."" +$ THEN +$ WRITE SYS$OUTPUT "Creating FAX3SM.C" +$ IF F$SEARCH("MKG3STATES.EXE").EQS."" +$ THEN +$ IF F$SEARCH("MKG3STATES.OBJ").EQS."" +$ THEN +$ C_COMPILE MKG3STATES +$ ENDIF +$ IF ARCH.EQS."ALPHA" +$ THEN +$ LINK MKG3STATES,'LIBPORT'/LIBRARY +$ ELSE +$ LINK MKG3STATES,'LIBPORT'/LIBRARY,SYS$INPUT:/OPTIONS +SYS$SHARE:VAXCRTL/SHARE +$ ENDIF +$ DELETE MKG3STATES.OBJ;* +$ ENDIF +$ MKG3STATES:=$'THIS_DIR'MKG3STATES +$ MKG3STATES -c const TIF_FAX3SM.C +$ DELETE MKG3STATES.EXE;* +$ ENDIF +$! +$! Loop over modules +$! +$ NUMBER=0 +$COMPILE_LOOP: +$ FILE=F$ELEMENT(NUMBER,",",SOURCES) +$ IF FILE.EQS."," THEN GOTO END_COMPILE +$ C_FILE=F$PARSE(FILE,".C",,,"SYNTAX_ONLY") +$ C_FILE=F$SEARCH(C_FILE) +$ IF C_FILE.EQS."" +$ THEN +$ WRITE SYS$OUTPUT "Source file "+FILE+" not found" +$ GOTO EXIT +$ ENDIF +$ C_DATE=F$CVTIME(F$FILE_ATTRIBUTES(C_FILE,"RDT")) +$ OBJ_FILE=F$PARSE("",".OBJ",C_FILE,,"SYNTAX_ONLY") +$ OBJ_FILE=F$EXTRACT(0,F$LOCATE(";",OBJ_FILE),OBJ_FILE) +$ FOUND_OBJ_FILE=F$SEARCH(OBJ_FILE) +$ IF FOUND_OBJ_FILE.EQS."" +$ THEN +$ OBJ_DATE="" +$ ELSE +$ OBJ_DATE=F$CVTIME(F$FILE_ATTRIBUTES(FOUND_OBJ_FILE,"CDT")) +$ ENDIF +$ IF OBJ_DATE.LTS.C_DATE +$ THEN +$ WRITE SYS$OUTPUT "Compiling "+FILE +$ ON ERROR THEN CONTINUE +$ C_COMPILE/OBJECT='OBJ_FILE' 'C_FILE' +$ ON ERROR THEN GOTO EXIT +$ LIBRARY 'LIBFILE' 'OBJ_FILE' +$ +$ ENDIF +$ NUMBER=NUMBER+1 +$ GOTO COMPILE_LOOP +$END_COMPILE: +$ IF ARCH.EQS."ALPHA" +$ THEN +$ OPT_FILE="TIFFSHRAXP" +$ ELSE +$ OPT_FILE="TIFFSHRVAX" +$ FILE="TIFFVEC" +$ MAR_FILE=F$PARSE(FILE,".MAR",,,"SYNTAX_ONLY") +$ MAR_FILE=F$SEARCH(MAR_FILE) +$ MAR_FILE=F$SEARCH("TIFFVEC.MAR") +$ MAR_DATE=F$CVTIME(F$FILE_ATTRIBUTES(MAR_FILE,"RDT")) +$ OBJ_FILE=F$PARSE("",".OBJ",MAR_FILE,,"SYNTAX_ONLY") +$ OBJ_FILE=F$EXTRACT(0,F$LOCATE(";",OBJ_FILE),OBJ_FILE) +$ FOUND_OBJ_FILE=F$SEARCH(OBJ_FILE) +$ IF FOUND_OBJ_FILE.EQS."" +$ THEN +$ OBJ_DATE="" +$ ELSE +$ OBJ_DATE=F$CVTIME(F$FILE_ATTRIBUTES(FOUND_OBJ_FILE,"CDT")) +$ ENDIF +$ IF OBJ_DATE.LTS.MAR_DATE +$ THEN +$ WRITE SYS$OUTPUT "Compiling "+FILE +$ MACRO 'MAR_FILE' +$ LIBRARY 'LIBFILE' 'OBJ_FILE' +$ PURGE 'OBJ_FILE' +$ ENDIF +$ ENDIF +$ WRITE SYS$OUTPUT "Creating shareable library" +$ LINK/SHAREABLE='THIS_DIR'TIFFSHR'LINK_OPTIONS' 'OPT_FILE'/OPTIONS +$ PURGE/LOG TIFFSHR.EXE +$EXIT: +$ SET DEFAULT 'CURRENT_DIR' +$ EXIT diff --git a/contrib/vms/libtiff/tiffvec.mar b/contrib/vms/libtiff/tiffvec.mar new file mode 100755 index 0000000..c711d16 --- /dev/null +++ b/contrib/vms/libtiff/tiffvec.mar @@ -0,0 +1,131 @@ + .TITLE TIFFVEC - Transfer vector for TIFF library + .IDENT /LIBTIFF 3.4-002/ +; + .PSECT TIFFVEC,EXE,NOWRT,PIC,SHR,GBL,QUAD +; +; Macro that defines one entry in the transfer vector +; + .MACRO VECTOR,NAME + .ALIGN QUAD + .TRANSFER NAME + .MASK NAME + JMP L^NAME+2 + .ENDM +; +; Here goes the definitions of all public functions in the library, plus +; a few extra that are called by the tools. +; The sequence MUST NOT be changed, otherwise you will have to relink +; all applications. Add new functions at the end. +; + VECTOR TIFFCheckTile + VECTOR TIFFClose + VECTOR TIFFComputeStrip + VECTOR TIFFComputeTile + VECTOR TIFFCurrentDirectory + VECTOR TIFFCurrentRow + VECTOR TIFFCurrentStrip + VECTOR TIFFCurrentTile + VECTOR TIFFError + VECTOR TIFFFdOpen + VECTOR TIFFFileName + VECTOR TIFFFileno + VECTOR TIFFFlush + VECTOR TIFFFlushData + VECTOR TIFFGetField + VECTOR TIFFGetFieldDefaulted +; +; TIFFGetFileSize was removed in version 3.2. It has been replaced by a +; dummy value that makes the program abort with a privileged instruction +; fault, in case an old program calls TIFFGetFileSize. +; +; VECTOR TIFFGetFileSize + .QUAD 0 +; + VECTOR TIFFGetMode + VECTOR TIFFIsTiled +; +; TIFFModeCCITTFax3 gone in 3.3 beta 024 +; VECTOR TIFFModeCCITTFax3 + .QUAD 0 + VECTOR TIFFNumberOfStrips + VECTOR TIFFNumberOfTiles + VECTOR TIFFOpen + VECTOR TIFFPrintDirectory + VECTOR TIFFReadBufferSetup + VECTOR TIFFReadDirectory + VECTOR TIFFReadEncodedStrip + VECTOR TIFFReadEncodedTile + VECTOR TIFFReadRawStrip + VECTOR TIFFReadRawTile + VECTOR TIFFReadRGBAImage + VECTOR TIFFReadScanline + VECTOR TIFFReadTile + VECTOR TIFFReverseBits + VECTOR TIFFScanlineSize + VECTOR TIFFSetDirectory + VECTOR TIFFSetErrorHandler + VECTOR TIFFSetField + VECTOR TIFFSetWarningHandler + VECTOR TIFFStripSize + VECTOR TIFFSwabShort + VECTOR TIFFSwabLong + VECTOR TIFFSwabArrayOfShort + VECTOR TIFFSwabArrayOfLong + VECTOR TIFFTileRowSize + VECTOR TIFFTileSize + VECTOR TIFFVGetField + VECTOR TIFFVGetFieldDefaulted + VECTOR TIFFVSetField + VECTOR TIFFWarning + VECTOR TIFFWriteDirectory + VECTOR TIFFWriteEncodedStrip + VECTOR TIFFWriteEncodedTile + VECTOR TIFFWriteRawStrip + VECTOR TIFFWriteRawTile + VECTOR TIFFWriteScanline + VECTOR TIFFWriteTile +; +; New entries in version 3.1 +; + VECTOR TIFFClientOpen + VECTOR TIFFVStripSize ; For tiffcp +; +; New entries in version 3.2 +; + VECTOR TIFFGetVersion + VECTOR TIFFGetBitRevTable + VECTOR _TIFFmalloc ; For fax2tiff +; +; New entries in version 3.3 +; + VECTOR TIFFIsByteSwapped + VECTOR TIFFSetWriteOffset +; +; New entries in version 3.3 beta 020 +; + VECTOR TIFFSetSubDirectory + VECTOR TIFFUnlinkDirectory +; +; New entries in version 3.3 beta 026 (for the tools) +; + VECTOR _TIFFfree + VECTOR _TIFFrealloc + VECTOR _TIFFmemset + VECTOR _TIFFmemcpy + VECTOR _TIFFmemcmp +; +; New entries in version 3.4 beta 002 +; + VECTOR TIFFRasterScanlineSize + VECTOR TIFFDefaultStripSize + VECTOR TIFFDefaultTileSize + VECTOR TIFFVTileSize ; not new, but omitted previously + VECTOR TIFFSwabDouble + VECTOR TIFFSwabArrayOfDouble + VECTOR TIFFLastDirectory ; not new either +; +; New entries in version 3.4 beta 007 through 032 +; + VECTOR TIFFCurrentDirOffset + VECTOR TIFFWriteBufferSetup + .END diff --git a/contrib/vms/tools/makevms.com b/contrib/vms/tools/makevms.com new file mode 100755 index 0000000..f3a1704 --- /dev/null +++ b/contrib/vms/tools/makevms.com @@ -0,0 +1,113 @@ +$!======================================================================== +$! +$! Name : MAKEVMS +$! +$! Purpose : Compile TIFF tools +$! +$! Arguments : +$! +$! Created 6-DEC-1991 Karsten Spang +$! +$!======================================================================== +$ CURRENT_DIR=F$ENVIRONMENT("DEFAULT") +$ ON CONTROL_Y THEN GOTO EXIT +$ ON ERROR THEN GOTO EXIT +$! +$! Get hold on definitions +$! +$! Older versions of VMS may not recoqnize the "ARCH_NAME" keyword +$! This happens only on VAX +$! +$ SAVE_MESS=F$ENVIRONMENT("MESSAGE") +$ SET MESSAGE/NOID/NOFAC/NOSEV/NOTEXT +$ ARCH=F$GETSYI("ARCH_NAME") +$ SET MESSAGE 'SAVE_MESS' +$ IF F$TYPE(ARCH).EQS."" THEN ARCH="VAX" +$ ARCH=F$EDIT(ARCH,"UPCASE") +$! +$ DEFINE SYS SYS$LIBRARY +$ THIS_FILE=F$ENVIRONMENT("PROCEDURE") +$ PROC_NAME=F$PARSE(THIS_FILE,,,"NAME","SYNTAX_ONLY") +$ THIS_DIR=F$PARSE(THIS_FILE,,,"DEVICE","SYNTAX_ONLY")+ - + F$PARSE(THIS_FILE,,,"DIRECTORY","SYNTAX_ONLY") +$ SET DEFAULT 'THIS_DIR' +$ LIB_DIR=F$PARSE("[-.LIBTIFF]") +$ LIB_DIR=F$PARSE(LIB_DIR,,,"DEVICE","SYNTAX_ONLY")+ - + F$PARSE(LIB_DIR,,,"DIRECTORY","SYNTAX_ONLY") +$ DEFINE TIFFSHR 'LIB_DIR'TIFFSHR +$ CONF_LIBRARY="USE_VARARGS=0,USE_PROTOTYPES=1,USE_CONST=1,"+ - + "BSDTYPES,MMAP_SUPPORT" +$ IF ARCH.EQS."ALPHA" +$ THEN +$! +$! You may want a different floating point option +$! +$ CONF_FP="HAVE_IEEEFP=1" +$ ALPHA_OPT="/PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES/FLOAT=IEEE_FLOAT" +$ ELSE +$ CONF_FP="HAVE_IEEEFP=0" +$ ALPHA_OPT="" +$ ENDIF +$ DEFINES="/DEFINE=("+CONF_LIBRARY+","+CONF_FP+")" +$ INCLUDES="/INCLUDE="+LIB_DIR +$ IF P1.EQS."DEBUG" +$ THEN +$ DEBUG_OPTIONS="/DEBUG/NOOPTIMIZE" +$ LINK_OPTIONS="/DEBUG" +$ ELSE +$ DEBUG_OPTIONS="" +$ LINK_OPTIONS="" +$ ENDIF +$ C_COMPILE="CC"+DEBUG_OPTIONS+DEFINES+INCLUDES+ALPHA_OPT +$ LIBPORT="[-.PORT]PORT" +$! +$ SOURCES="FAX2PS,FAX2TIFF,GIF2TIFF,PAL2RGB," + - + "PPM2TIFF,RAS2TIFF,RGB2YCBCR," + - + "THUMBNAIL,TIFF2BW," + - + "TIFF2PS,TIFFCMP,TIFFCP,TIFFDITHER," + - + "TIFFDUMP,TIFFINFO,TIFFMEDIAN,TIFFSPLIT,YCBCR" +$! +$! Loop over programs +$! +$ NUMBER=0 +$COMPILE_LOOP: +$ FILE=F$ELEMENT(NUMBER,",",SOURCES) +$ IF FILE.EQS."," THEN GOTO END_COMPILE +$ C_FILE=F$PARSE(FILE,".C",,,"SYNTAX_ONLY") +$ C_FILE=F$SEARCH(C_FILE) +$ IF C_FILE.EQS."" +$ THEN +$ WRITE SYS$OUTPUT "Source file "+FILE+" not found" +$ GOTO EXIT +$ ENDIF +$ C_DATE=F$CVTIME(F$FILE_ATTRIBUTES(C_FILE,"RDT")) +$ EXE_FILE=F$PARSE("",".EXE",C_FILE,,"SYNTAX_ONLY") +$ EXE_FILE=F$EXTRACT(0,F$LOCATE(";",EXE_FILE),EXE_FILE) +$ FOUND_EXE_FILE=F$SEARCH(EXE_FILE) +$ IF FOUND_EXE_FILE.EQS."" +$ THEN +$ EXE_DATE="" +$ ELSE +$ EXE_DATE=F$CVTIME(F$FILE_ATTRIBUTES(FOUND_EXE_FILE,"CDT")) +$ ENDIF +$ IF EXE_DATE.LTS.C_DATE +$ THEN +$ WRITE SYS$OUTPUT "Compiling "+FILE +$ C_COMPILE 'FILE' +$ IF ARCH.EQS."ALPHA" +$ THEN +$ LINK'LINK_OPTIONS' 'FILE','LIBPORT'/LIB,'LIB_DIR'TIFF/OPTIONS +$ ELSE +$ LINK'LINK_OPTIONS' 'FILE','LIBPORT'/LIB, - + 'LIB_DIR'TIFF/OPTIONS,SYS$INPUT:/OPTIONS +SYS$SHARE:VAXCRTL/SHAREABLE +$ ENDIF +$ DELETE 'FILE'.OBJ;* +$ PURGE 'EXE_FILE' +$ ENDIF +$ NUMBER=NUMBER+1 +$ GOTO COMPILE_LOOP +$END_COMPILE: +$EXIT: +$ SET DEFAULT 'CURRENT_DIR' +$ EXIT diff --git a/contrib/win32/dllshell.c b/contrib/win32/dllshell.c new file mode 100755 index 0000000..d167779 --- /dev/null +++ b/contrib/win32/dllshell.c @@ -0,0 +1,38 @@ +dllshell.c --------------------------------------------------------------- +#define STRICT +#include +#pragma hdrstop + +#pragma argsused + +/* DLL has an entry point LibMain || DllEntryPoint and an exit point WEP. */ + +#if defined(__FLAT__) + +BOOL WINAPI DllEntryPoint(HINSTANCE hinstDll, DWORD fdwRreason, + LPVOID plvReserved) +{ + return 1; /* Indicate that the DLL was initialized successfully. */ +} + +#else /* not flat model */ + +int FAR PASCAL LibMain(HINSTANCE hInstance, WORD wDataSegment, WORD wHeapSize, + LPSTR lpszCmdLine) +{ +/* The startup code for the DLL initializes the local heap(if there is one) + with a call to LocalInit which locks the data segment. */ + + if ( wHeapSize != 0 ) + UnlockData( 0 ); + return 1; /* Indicate that the DLL was initialized successfully. */ +} + +#endif /* __FLAT */ + +#pragma argsused + +int FAR PASCAL WEP ( int bSystemExit ) +{ + return 1; +} diff --git a/contrib/win32/libtiff.def b/contrib/win32/libtiff.def new file mode 100755 index 0000000..55bc8c6 --- /dev/null +++ b/contrib/win32/libtiff.def @@ -0,0 +1,72 @@ +LIBRARY LIBTIFF +EXETYPE WINDOWS +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD MOVEABLE MULTIPLE +HEAPSIZE 4096 +STACKSIZE 8192 +EXPORTS +_TIFFGetVersion @1 +_TIFFClose @2 +_TIFFFlush @3 +_TIFFFlushData @4 +_TIFFGetField @5 +_TIFFVGetField @6 +_TIFFGetFieldDefaulted @7 +_TIFFVGetFieldDefaulted @8 +_TIFFReadDirectory @9 +_TIFFScanlineSize @10 +_TIFFStripSize @11 +_TIFFVStripSize @12 +_TIFFTileRowSize @13 +_TIFFTileSize @14 +_TIFFVTileSize @15 +_TIFFFileno @16 +_TIFFGetMode @17 +_TIFFIsTiled @18 +_TIFFIsByteSwapped @19 +_TIFFCurrentRow @20 +_TIFFCurrentDirectory @21 +_TIFFCurrentStrip @22 +_TIFFCurrentTile @23 +_TIFFReadBufferSetup @24 +_TIFFLastDirectory @25 +_TIFFSetDirectory @26 +_TIFFSetSubDirectory @27 +_TIFFUnlinkDirectory @28 +_TIFFSetField @29 +_TIFFVSetField @30 +_TIFFWriteDirectory @31 +_TIFFReadScanline @32 +_TIFFWriteScanline @33 +_TIFFReadRGBAImage @34 +_TIFFOpen @35 +_TIFFFdOpen @36 +_TIFFClientOpen @37 +_TIFFFileName @38 +_TIFFError @39 +_TIFFWarning @40 +_TIFFSetErrorHandler @41 +_TIFFSetWarningHandler @42 +_TIFFComputeTile @43 +_TIFFCheckTile @44 +_TIFFNumberOfTiles @45 +_TIFFReadTile @46 +_TIFFWriteTile @47 +_TIFFComputeStrip @48 +_TIFFNumberOfStrips @49 +_TIFFReadEncodedStrip @50 +_TIFFReadRawStrip @51 +_TIFFReadEncodedTile @52 +_TIFFReadRawTile @53 +_TIFFWriteEncodedStrip @54 +_TIFFWriteRawStrip @55 +_TIFFWriteEncodedTile @56 +_TIFFWriteRawTile @57 +_TIFFSetWriteOffset @58 +_TIFFSwabShort @59 +_TIFFSwabLong @60 +_TIFFSwabArrayOfShort @61 +_TIFFSwabArrayOfLong @62 +_TIFFReverseBits @63 +_TIFFGetBitRevTable @64 +_TIFFModeCCITTFax3 @65 diff --git a/contrib/win32/readme b/contrib/win32/readme new file mode 100755 index 0000000..3706fcc --- /dev/null +++ b/contrib/win32/readme @@ -0,0 +1,111 @@ +This mail from Scott describes changes to the library that I have +not made because I couldn't figure out exactly where they went. +Anything not in this file has either been placed in the appropriate +directory (e.g. libtiff/tif_win32.c) or applied to the current +source code (e.g. libtiff/tiffiop.h). + +Note that the Window NT/Window 95 support is untested; Scott's work +was done with an earlier version of the library. Hopefully this'll +get cleaned up soon. + + Sam + +Date: Fri, 14 Apr 95 17:01:42 EDT +From: wagner@itek.com (scott wagner) +Message-Id: <9504142101.AA00764@cyan.> +To: sam@cthulhu.engr.sgi.com +Subject: Re: Libtiff for Win32 (Windows NT / Windows 95) + +Hi, Sam! + +Enclosed are my libtiff for win32 pieces. They are in the form of 3 files +(tif_w32.c, dllshell.c, and libtiff.def), and 2 diffs (for tiffiop.h and +tiffio.h). + +Hope this is not too difficult to separate! + +Regards, +Scott Wagner (wagner@itek.com) + +tif_w32.c --------------------------------------------------------------- + +tiffiop.h --------------------------------------------------------------- + +tiffio.h --------------------------------------------------------------- +38a39 +> #ifdef _TIFFIOP_ +39a41,43 +> #else +> typedef void TIFF; /* Avoid ANSI undefined structure warning */ +> #endif +66a71,75 +> #ifdef WIN32 /* WIN32 identifies Win32 compiles */ +> #pragma warn -sig /* Turn off Borland warn of long to short int convert */ +> #pragma warn -par /* Turn off Borland warn "Parameter x is never used" */ +> DECLARE_HANDLE(thandle_t); /* Win32 file handle */ +> #else /* if not WIN32_ */ +67a77 +> #endif /* defined WIN32 */ + +(Message tiff:1396) + -- using template mhl.format -- +Date: Mon, 17 Apr 1995 07:51:03 EDT +To: sam@cthulhu.engr.sgi.com + +From: wagner@itek.com (scott wagner) +Subject: Libtiff for Win32 + +Return-Path: sam@flake.asd.sgi.com +Delivery-Date: Mon, 17 Apr 1995 05:36:50 PDT +Return-Path: sam@flake.asd.sgi.com + +Hello, Sam! + +> ... libtiff for win32 pieces. They are in the form of 3 files +> (tif_w32.c, dllshell.c, and libtiff.def), and 2 diffs (for tiffiop.h and +> tiffio.h). +> +> I don't understand how these pieces fit together. Can you please explain +> what dllshell.c and libtiff.def are for? + +Sorry I was short on documentation here ... I was rushing to get home to +dinner on Friday and the material for you was the last loose end I had to +deal with. Excuses aside ... + +The goal of the adaptation of libtiff to Win32 was to replace only one +environment-specific code module and to make minimal changes to header +files. tif_win32.c required one addition to tiffio.h (the +DECLARE_HANDLE line, which is probably a better way to typedef thandle-t +under Windows 3.1 as well); it also required the addition of pv_map_handle +to the tiff structure and the conditional definition of the +TIFFUnmapFileContents macro in tiffiop.h (this because Win32 uses a handle +and a pointer in mapping memory, and I needed to save both). + +Additionally, I made a general style change to tiffio.h. If tiffio.h is +included by a client, which does not include tiffiop.h, then ANSI compilers +warn about the typedef of TIFF to a non-existent structure. To avoid this, +I changed the typedef of TIFF in this case to void. + +I also made a style change in the tiff structure. All references to tif_fd +in the library treat it as int, yet the tif_fd member itself is short. I +changed this member to int and added the reserved member to maintain +32-bit structure member alignment in a 32 bit environment. [ At cost of +4 more bytes in an already bloated structure! :-) ] As long as fd's are +less than 64k, the old member works; this is not the case in Win32, and is +not generally a safe assumption. + +The module dllshell.c and the file libtiff.def are not specific to the +functionality of libtiff; they are used to make a Win32 dynamic link +library, and would be best packaged with a Win32 makefile, which I have +not yet perfected. I will, however, commit to a Borland and Microsoft C +makefile for libtiff; perhaps these two could be combined with the +makefile for the _next_ (!) release of libtiff when it is ready. + +Once again, sorry for the confused message on Friday. I hope that at +least tif_w32 and the tiffio.h and tiffiop.h diffs will be useful for +this release. + +Regards, +Scott Wagner (wagner@itek.com) +Itek Graphix +Rochester, NY diff --git a/contrib/win95/Makefile.w95 b/contrib/win95/Makefile.w95 new file mode 100755 index 0000000..3e81fc2 --- /dev/null +++ b/contrib/win95/Makefile.w95 @@ -0,0 +1,134 @@ +# $Header: /usr/people/sam/tiff/libtiff/RCS/Makefile.w95,v 1.2 1994/11/28 +06:13:31 sam Exp $ +# +# Tag Image File Format Library +# +# Copyright (c) 1988, 1989, 1990, 1991, 1992 Sam Leffler +# Copyright (c) 1991, 1992 Silicon Graphics, Inc. +# +# 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. +# +# This Makefile is for use with microsoft nmake version 1.50 and +# Microsoft 32-bit C/C++ Compiler 9.00 +# +DESTDIR=. +# +IPATH= -I. +CONF_LIBRARY=$(NULL) +COPTS= -Oxa -DBSDTYPES -Zd +CFLAGS= $(COPTS) $(CONF_LIBRARY) +# +INCS= tiff.h tiffio.h +SRCS= tif_aux.c \ + tif_close.c \ + tif_codec.c \ + tif_compress.c \ + tif_dir.c \ + tif_dirinfo.c \ + tif_dirread.c \ + tif_dirwrite.c \ + tif_dumpmode.c \ + tif_error.c \ + tif_getimage.c \ + tif_jpeg.c \ + tif_flush.c \ + tif_lzw.c \ + tif_next.c \ + tif_open.c \ + tif_packbits.c \ + tif_predict \ + tif_print.c \ + tif_read.c \ + tif_swab.c \ + tif_strip.c \ + tif_thunder.c \ + tif_tile.c \ + tif_version.c \ + tif_warning.c \ + tif_write.c \ + tif_win32.c + + +OBJS= tif_aux.obj \ + tif_close.obj \ + tif_codec.obj \ + tif_compress.obj \ + tif_dir.obj \ + tif_dirinfo.obj \ + tif_dirread.obj \ + tif_dirwrite.obj \ + tif_dumpmode.obj \ + tif_error.obj \ + tif_getimage.obj \ + tif_jpeg.obj \ + tif_flush.obj \ + tif_lzw.obj \ + tif_next.obj \ + tif_open.obj \ + tif_packbits.obj \ + tif_predict.obj \ + tif_print.obj \ + tif_read.obj \ + tif_swab.obj \ + tif_strip.obj \ + tif_thunder.obj \ + tif_tile.obj \ + tif_version.obj \ + tif_warning.obj \ + tif_write.obj \ + tif_win32.obj + + + +ALL= libtiff.lib + +all: $(ALL) + +%.obj : %.c + $(CC) $(CFLAGS) -c $*.c + + +#.INCLUDE .IGNORE : depend + +libtiff.lib: $(OBJS) + - del libtiff.lib + lib /OUT:libtiff.lib $(OBJS) + + +#To include fax3 support, you need to modify mkg3states.c so it could run +#under windows 95 or NT. This application make the file g3state.h. +#after that, you have to add to the build script : tif_fax3.c and tif_fax3.obj +#and define CCITT_SUPPORT in the file tifconf.h + +#$(OBJS): tiffio.h tiff.h tiffcomp.h tiffiop.h tiffconf.h +#tif_fax3.obj: tif_fax3.c g3states.h t4.h tif_fax3.h + +#g3states.h: mkg3states.c t4.h +# $(CC) $(CFLAGS) mkg3states.c +# mkg3states -c > g3states.h + + +clean: + del *.obj + del mkg3stat + del g3states.h + +tags: $(SRCS) + $(CTAGS) $(SRCS) diff --git a/contrib/win95/readme b/contrib/win95/readme new file mode 100755 index 0000000..71cc634 --- /dev/null +++ b/contrib/win95/readme @@ -0,0 +1,50 @@ +Date: 04 Dec 95 10:34:23 EST +From: Philippe <100423.3705@compuserve.com> +To: TIFF/sam Leffler +Subject: TIFF library and Windows 95 +Message-Id: <951204153422_100423.3705_BHG101-1@CompuServe.COM> + +Sam, + +First, let me thanks all of you how have worked +on that great TIFF library ! + +Here is some information that may help someone. + +I build the library under Windows 95 as a 32-bit library. +The contribution of Scott Wagner (tif_win32.c) worked fine, but +the makefile "makefile.msc" was unsable because it was +written for DOS or Windows 3.1 and all the files names +are limited to 8 characters. + +Here is the makefile I used : makefile.w95 + +Also, I had to disable fax3 support because I wasn't able +to build (as it is) the tool "mkg3states" to generate the include +file "g3states.h". +This source file must be modify to be build under Windows 95. + +To build the library under Windows 95 with Visual C++ 2.0, +I had to : + +- undefine CCITT_SUPPORT in "tiffconf.h" + +- create the file version.h with this line : + #define VERSION "3.4beta024" + +- build the makefile "makefile.w95" + +I also join the source file "tif2dib.c" that I created, +it contain the function LoadTIFFinDIB that load +a TIFF file and build a memory DIB with it and return the +HANDLE (HDIB) of the memory bloc containing this DIB. +Since DIB is the "natural" bitmap format for Windows 3.1, 95 and NT, +this function sould be usefull for some Windows 95 (or NT) developer. + + +Sorry for my approximate english ... + +Regards, + +Philippe Tenenhaus 100423.3705@compuserve.com +Paris diff --git a/contrib/win95/tiff2dib.c b/contrib/win95/tiff2dib.c new file mode 100755 index 0000000..9b8f89a --- /dev/null +++ b/contrib/win95/tiff2dib.c @@ -0,0 +1,372 @@ +/************************************************************************* + * + * Source file for Windows 95/Win32. + * + * The function LoadTIFFinDIB in this source file let you load + * a TIFF file and build a memory DIB with it and return the + * HANDLE (HDIB) of the memory bloc containing the DIB. + * + * Example : + * + * HDIB hDIB; + * hDIB = LoadTIFFinDIB("sample.tif"); + * + * + * To build this source file you must include the TIFF library + * in your project. + * + * 4/12/95 Philippe Tenenhaus 100423.3705@compuserve.com + * + ************************************************************************/ + + +#include "tiffio.h" + +#define HDIB HANDLE +#define IS_WIN30_DIB(lpbi) ((*(LPDWORD)(lpbi)) == sizeof(BITMAPINFOHEADER)) +#define CVT(x) (((x) * 255L) / ((1L<<16)-1)) + +static HDIB CreateDIB(DWORD dwWidth, DWORD dwHeight, WORD wBitCount); +static LPSTR FindDIBBits(LPSTR lpDIB); +static WORD PaletteSize(LPSTR lpDIB); +static WORD DIBNumColors(LPSTR lpDIB); +static int checkcmap(int n, uint16* r, uint16* g, uint16* b); + + + +/************************************************************************* + * + * HDIB LoadTIFFinDIB(LPSTR lpFileName) + * + * Parameter: + * + * LPSTR lpDIB - File name of a tiff imag + * + * Return Value: + * + * LPSTR - HANDLE of a DIB + * + * Description: + * + * This function load a TIFF file and build a memory DIB with it + * and return the HANDLE (HDIB) of the memory bloc containing + * the DIB. + * + * 4/12/95 Philippe Tenenhaus 100423.3705@compuserve.com + * + ************************************************************************/ + +HDIB LoadTIFFinDIB(LPSTR lpFileName) +{ + TIFF *tif; + unsigned long imageLength; + unsigned long imageWidth; + unsigned int BitsPerSample; + unsigned long LineSize; + unsigned int SamplePerPixel; + unsigned long RowsPerStrip; + int PhotometricInterpretation; + long nrow; + unsigned long row; + char *buf; + LPBITMAPINFOHEADER lpDIB; + HDIB hDIB; + char *lpBits; + HGLOBAL hStrip; + int i,l; + int Align; + + tif = TIFFOpen(lpFileName, "r"); + + if (!tif) + goto TiffOpenError; + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &imageWidth); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imageLength); + TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &BitsPerSample); + TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &RowsPerStrip); + TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &RowsPerStrip); + TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &PhotometricInterpretation); + + LineSize = TIFFScanlineSize(tif); //Number of byte in ine line + + SamplePerPixel = (int) (LineSize/imageWidth); + + //Align = Number of byte to add at the end of each line of the DIB + Align = 4 - (LineSize % 4); + if (Align == 4) Align = 0; + + + //Create a new DIB + hDIB = CreateDIB((DWORD) imageWidth, (DWORD) imageLength, (WORD) +(BitsPerSample*SamplePerPixel)); + lpDIB = (LPBITMAPINFOHEADER) GlobalLock(hDIB); + if (!lpDIB) + goto OutOfDIBMemory; + + if (lpDIB) + lpBits = FindDIBBits((LPSTR) lpDIB); + + //In the tiff file the lines are save from up to down + //In a DIB the lines must be save from down to up + if (lpBits) + { + lpBits = FindDIBBits((LPSTR) lpDIB); + lpBits+=((imageWidth*SamplePerPixel)+Align)*(imageLength-1); + //now lpBits pointe on the bottom line + + hStrip = GlobalAlloc(GHND,TIFFStripSize(tif)); + buf = GlobalLock(hStrip); + + if (!buf) + goto OutOfBufMemory; + + //PhotometricInterpretation = 2 image is RGB + //PhotometricInterpretation = 3 image have a color palette + if (PhotometricInterpretation == 3) + { + uint16* red; + uint16* green; + uint16* blue; + int16 i; + LPBITMAPINFO lpbmi; + int Palette16Bits; + + TIFFGetField(tif, TIFFTAG_COLORMAP, &red, &green, &blue); + + //Is the palette 16 or 8 bits ? + if (checkcmap(1<= 0; i--) + { + if (Palette16Bits) + { + lpbmi->bmiColors[i].rgbRed =(BYTE) CVT(red[i]); + lpbmi->bmiColors[i].rgbGreen = (BYTE) CVT(green[i]); + lpbmi->bmiColors[i].rgbBlue = (BYTE) CVT(blue[i]); + } + else + { + lpbmi->bmiColors[i].rgbRed = (BYTE) red[i]; + lpbmi->bmiColors[i].rgbGreen = (BYTE) green[i]; + lpbmi->bmiColors[i].rgbBlue = (BYTE) blue[i]; + } + } + + } + + //read the tiff lines and save them in the DIB + //with RGB mode, we have to change the order of the 3 samples RGB +<=> BGR + for (row = 0; row < imageLength; row += RowsPerStrip) + { + nrow = (row + RowsPerStrip > imageLength ? imageLength - row : +RowsPerStrip); + if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, row, 0), + buf, nrow*LineSize)==-1) + { + goto TiffReadError; + } + else + { + for (l = 0; l < nrow; l++) + { + if (SamplePerPixel == 3) + for (i=0;i< (int) (imageWidth);i++) + { + lpBits[i*SamplePerPixel+0]=buf[l*LineSize+i*Sample +PerPixel+2]; + lpBits[i*SamplePerPixel+1]=buf[l*LineSize+i*Sample +PerPixel+1]; + lpBits[i*SamplePerPixel+2]=buf[l*LineSize+i*Sample +PerPixel+0]; + } + else + memcpy(lpBits, &buf[(int) (l*LineSize)], (int) +imageWidth*SamplePerPixel); + + lpBits-=imageWidth*SamplePerPixel+Align; + + } + } + } + GlobalUnlock(hStrip); + GlobalFree(hStrip); + GlobalUnlock(hDIB); + TIFFClose(tif); + } + + return hDIB; + + OutOfBufMemory: + + TiffReadError: + GlobalUnlock(hDIB); + GlobalFree(hStrip); + OutOfDIBMemory: + TIFFClose(tif); + TiffOpenError: + return (HANDLE) 0; + + +} + + +static int checkcmap(int n, uint16* r, uint16* g, uint16* b) +{ + while (n-- > 0) + if (*r++ >= 256 || *g++ >= 256 || *b++ >= 256) + return (16); + + return (8); +} + + + +/************************************************************************* + * All the following functions were created by microsoft, they are + * parts of the sample project "wincap" given with the SDK Win32. + * + * Microsoft says that : + * + * You have a royalty-free right to use, modify, reproduce and + * distribute the Sample Files (and/or any modified version) in + * any way you find useful, provided that you agree that + * Microsoft has no warranty obligations or liability for any + * Sample Application Files which are modified. + * + ************************************************************************/ + +HDIB CreateDIB(DWORD dwWidth, DWORD dwHeight, WORD wBitCount) +{ + BITMAPINFOHEADER bi; // bitmap header + LPBITMAPINFOHEADER lpbi; // pointer to BITMAPINFOHEADER + DWORD dwLen; // size of memory block + HDIB hDIB; + DWORD dwBytesPerLine; // Number of bytes per scanline + + + // Make sure bits per pixel is valid + if (wBitCount <= 1) + wBitCount = 1; + else if (wBitCount <= 4) + wBitCount = 4; + else if (wBitCount <= 8) + wBitCount = 8; + else if (wBitCount <= 24) + wBitCount = 24; + else + wBitCount = 4; // set default value to 4 if parameter is bogus + + // initialize BITMAPINFOHEADER + bi.biSize = sizeof(BITMAPINFOHEADER); + bi.biWidth = dwWidth; // fill in width from parameter + bi.biHeight = dwHeight; // fill in height from parameter + bi.biPlanes = 1; // must be 1 + bi.biBitCount = wBitCount; // from parameter + bi.biCompression = BI_RGB; + bi.biSizeImage = (dwWidth*dwHeight*wBitCount)/8; //0; // 0's here +mean "default" + bi.biXPelsPerMeter = 2834; //0; + bi.biYPelsPerMeter = 2834; //0; + bi.biClrUsed = 0; + bi.biClrImportant = 0; + + // calculate size of memory block required to store the DIB. This + // block should be big enough to hold the BITMAPINFOHEADER, the color + // table, and the bits + + dwBytesPerLine = (((wBitCount * dwWidth) + 31) / 32 * 4); + dwLen = bi.biSize + PaletteSize((LPSTR)&bi) + (dwBytesPerLine * dwHeight); + + // alloc memory block to store our bitmap + hDIB = GlobalAlloc(GHND, dwLen); + + // major bummer if we couldn't get memory block + if (!hDIB) + { + return NULL; + } + + // lock memory and get pointer to it + lpbi = (VOID FAR *)GlobalLock(hDIB); + + // use our bitmap info structure to fill in first part of + // our DIB with the BITMAPINFOHEADER + *lpbi = bi; + + // Since we don't know what the colortable and bits should contain, + // just leave these blank. Unlock the DIB and return the HDIB. + + GlobalUnlock(hDIB); + + /* return handle to the DIB */ + return hDIB; +} + + +LPSTR FAR FindDIBBits(LPSTR lpDIB) +{ + return (lpDIB + *(LPDWORD)lpDIB + PaletteSize(lpDIB)); +} + + +WORD FAR PaletteSize(LPSTR lpDIB) +{ + /* calculate the size required by the palette */ + if (IS_WIN30_DIB (lpDIB)) + return (DIBNumColors(lpDIB) * sizeof(RGBQUAD)); + else + return (DIBNumColors(lpDIB) * sizeof(RGBTRIPLE)); +} + + +WORD DIBNumColors(LPSTR lpDIB) +{ + WORD wBitCount; // DIB bit count + + /* If this is a Windows-style DIB, the number of colors in the + * color table can be less than the number of bits per pixel + * allows for (i.e. lpbi->biClrUsed can be set to some value). + * If this is the case, return the appropriate value. + */ + + if (IS_WIN30_DIB(lpDIB)) + { + DWORD dwClrUsed; + + dwClrUsed = ((LPBITMAPINFOHEADER)lpDIB)->biClrUsed; + if (dwClrUsed) + return (WORD)dwClrUsed; + } + + /* Calculate the number of colors in the color table based on + * the number of bits per pixel for the DIB. + */ + if (IS_WIN30_DIB(lpDIB)) + wBitCount = ((LPBITMAPINFOHEADER)lpDIB)->biBitCount; + else + wBitCount = ((LPBITMAPCOREHEADER)lpDIB)->bcBitCount; + + /* return number of colors based on bits per pixel */ + switch (wBitCount) + { + case 1: + return 2; + + case 4: + return 16; + + case 8: + return 256; + + default: + return 0; + } +} diff --git a/contrib/winnt/README.console b/contrib/winnt/README.console new file mode 100755 index 0000000..782614f --- /dev/null +++ b/contrib/winnt/README.console @@ -0,0 +1,182 @@ +Date: Fri, 18 Apr 1997 09:25:09 EDT +To: "'sam@cthulhu.engr.sgi.com'" +cc: "'tiff@sgi.engr.sgi.com'" + +From: xingong chang +Subject: Contribution: libtiff for Windows-nt console applications + +Return-Path: xingong@feith1.FEITH.COM +Delivery-Date: Fri, 18 Apr 1997 06:37:38 -0700 +Return-Path: xingong@feith1.FEITH.COM +MIME-Version: 1.0 + +Hi, +I built the libtiff under WINNT 4.0 as a 32-bit library for pure +console applications. I made the makefile.nt based on Philippe +Tenenhaus' makefile.w95 file. Since I want my stuff to be a pure +console application running on WinNT, Dave Dyer's makefile for WINNT is +not good for me since it is for Windows applications. + +I used the tif_msdos.c file instead of the tif_win32.c in the $(OBJS) +list because tif_win32.c is not a pure console program, it includes +some function calls such as MessageBox etc which requires windows +application library ($winslib as defined in ). + +unlike Philippe Tenenhaus' makefile.w95 file, this makefile.nt does +support fax3 stuff. And to make the mkg3states.exe,the getopt.obj is +needed. "getopt" package is ATT public domain source for getopt(3). +Also you need to inlcude the g3states.h in tif_fax.c fileand modify the +tif_fax3.h to delete the external declaration of FFFaxMainTable, +TIFFFaxWhileTable and TIFFFaxBlackTable + + +libtiff version: TIFFLIB_VERSION 19960307 + +Hardware you are using: i386 + +Operating system you are using: Windows NT 4.0 + +C compiler : Microsoft Visual C++ 4.1 + +NMAKE : Microsoft nmake 1.61 + + +Here is the makefile.nt I used: +--------------------------------------------------------- + +# makefile.nt for the tiff library +# Tag Image File Format Library +# +# Copyright (c) 1988, 1989, 1990, 1991, 1992 Sam Leffler +# Copyright (c) 1991, 1992 Silicon Graphics, Inc. +# +# 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. +# +# This Makefile is for use with microsoft nmake version 1.61 +# + +!include + +DEFS = -DBSDTYPES -DO_RDONLY=S_IREAD -DO_RDWR=S_IWRITE + +INCS= tiff.h tiffio.h +SRCS= tif_aux.c \ + tif_close.c \ + tif_codec.c \ + tif_compress.c \ + tif_dir.c \ + tif_dirinfo.c \ + tif_dirread.c \ + tif_dirwrite.c \ + tif_dumpmode.c \ + tif_error.c \ + tif_getimage.c \ + tif_jpeg.c \ + tif_flush.c \ + tif_lzw.c \ + tif_next.c \ + tif_open.c \ + tif_packbits.c \ + tif_predict \ + tif_print.c \ + tif_read.c \ + tif_swab.c \ + tif_strip.c \ + tif_thunder.c \ + tif_tile.c \ + tif_version.c \ + tif_warning.c \ + tif_write.c \ + tif_msdos.c \ + tif_fax3.c + + +OBJS= tif_aux.obj \ + tif_close.obj \ + tif_codec.obj \ + tif_compress.obj \ + tif_dir.obj \ + tif_dirinfo.obj \ + tif_dirread.obj \ + tif_dirwrite.obj \ + tif_dumpmode.obj \ + tif_error.obj \ + tif_getimage.obj \ + tif_jpeg.obj \ + tif_flush.obj \ + tif_lzw.obj \ + tif_next.obj \ + tif_open.obj \ + tif_packbits.obj \ + tif_predict.obj \ + tif_print.obj \ + tif_read.obj \ + tif_swab.obj \ + tif_strip.obj \ + tif_thunder.obj \ + tif_tile.obj \ + tif_version.obj \ + tif_warning.obj \ + tif_write.obj \ + tif_msdos.obj \ + tif_fax3.obj + +#To make the mkg3states.exe,the getopt.obj is needed. getopt package is +# ATT public domain source for getopt(3). +EXTRA_OBJS = getopt.obj + +all: libtiff.lib + +libtiff.lib: $(OBJS) + del libtiff.lib + lib -out:libtiff.lib $(OBJS) + +.c.obj: + $(cc) $(DEFS) $(cdebug) $(cflags) $(cvarsmt) $*.c + + +#To include fax3 support, we did this modification +#add to the build script : tif_fax3.c and tif_fax3.obj +#define CCITT_SUPPORT in the file tifconf.h +#inlcude the g3states.h in tif_fax.c file +#modify the tif_fax3.h to delete the TIFFFaxMainTable,TIFFFaxWhileTable +# TIFFFaxBlackTable etc external declaration +#mkg3states.exe without any command line options will produce the g3states.h + +$(OBJS): tiffio.h tiff.h tiffcomp.h tiffiop.h tiffconf.h +tif_fax3.obj: tif_fax3.c g3states.h t4.h tif_fax3.h + +g3states.h: mkg3states.obj t4.h + $(link) $(ldebug) $(conslflags) -out:mkg3states.exe mkg3states.obj \ + $(EXTRA_OBJS) + mkg3states.exe + +clean: + del *.obj + del g3states.h + +clobber: + del libtiff.lib + del *.obj + del g3states.h + + + + diff --git a/contrib/winnt/fax3sm.c b/contrib/winnt/fax3sm.c new file mode 100755 index 0000000..1d0f34a --- /dev/null +++ b/contrib/winnt/fax3sm.c @@ -0,0 +1,1046 @@ +/* WARNING, this file was automatically generated by the + mkg3states program */ +#include "tiff.h" +#include "tif_fax3.h" + const TIFFFaxTabEnt TIFFFaxMainTable[128] = { +12,7,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,5,6,2,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,5,7,3,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +4,6,2,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,6,7,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,5,6,2,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +4,7,3,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,4,6,2,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0 +}; +const TIFFFaxTabEnt TIFFFaxWhiteTable[4096] = { +12,11,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,11,1792,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5, +7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,11,1856,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5, +7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,12,2112,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2368,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5, +7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,12,1984,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5, +7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,11,1920,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2240,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5, +7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,12,2496,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,12,11,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5, +7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,11,1792,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,11,1856,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5, +7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,12,2176,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5, +7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,12,2432,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2048,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5, +7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,11,1920,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5, +7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,12,2304,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2560,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5, +7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7 +}; +const TIFFFaxTabEnt TIFFFaxBlackTable[8192] = { +12,11,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1792,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,23,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,20,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,25,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,128,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,56,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,30,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1856,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,57,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,21,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,54,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,52,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,48,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2112,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,44,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,36,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,384,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,28,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,60,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,40,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2368,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,1984,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,50,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,34,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1664,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,26,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,1408,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,32,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1920,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,61,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,42,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1024,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,768,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,62,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2240,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,46,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,38,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,512,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,19,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,24,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,22,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2496,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,12,11,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1792,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,23,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,20,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,25,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,192,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1280,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,31,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1856,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,58,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,21,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,896,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,640,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,49,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2176,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,45,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,37,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,448,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,29,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,1536,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,41,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2432,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2048,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,51,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,35,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,320,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,27,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,59,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,33,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1920,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,256,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,43,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1152,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,55,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,63,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2304,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,47,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,39,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,53,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,19,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,24,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,22,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2560,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,12,11,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1792,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,23,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,20,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,25,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,128,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,56,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,30,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1856,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,57,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,21,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,54,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,52,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,48,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2112,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,44,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,36,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,384,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,28,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,60,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,40,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2368,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,1984,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,50,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,34,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1728,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,26,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1472,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,32,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1920,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,61,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,42,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,1088,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,832,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,62,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2240,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,46,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,38,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,576,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,19,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,24,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,22,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2496,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +12,11,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1792,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,23,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,20,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,25,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,192,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1344,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,31,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1856,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,58,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,21,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,960,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,704,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,49,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2176,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,45,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,37,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,448,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,29,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1600,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,41,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2432,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2048,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,51,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,35,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,320,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,27,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,59,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,33,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1920,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,256,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,43,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1216,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,55,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,63,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2304,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,47,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,39,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,53,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,19,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,24,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,22,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2560,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2 +}; diff --git a/contrib/winnt/libtiff.def b/contrib/winnt/libtiff.def new file mode 100755 index 0000000..7ed4e7b --- /dev/null +++ b/contrib/winnt/libtiff.def @@ -0,0 +1,72 @@ +LIBRARY libtiff +EXPORTS TIFFOpen + TIFFGetVersion + TIFFClose + TIFFFlush + TIFFFlushData + TIFFFlushdata1 + TIFFGetField + TIFFVGetField + TIFFGetFieldDefaulted + TIFFVGetFieldDefaulted + TIFFReadDirectory + TIFFScanlineSize + TIFFStripSize + TIFFVStripSize + TIFFTileRowSize + TIFFTileSize + TIFFVTileSize + TIFFFileno + TIFFGetMode + TIFFIsTiled + TIFFIsByteSwapped + TIFFCurrentRow + TIFFCurrentDirectory + TIFFCurrentStrip + TIFFCurrentTile + TIFFReadBufferSetup + TIFFLastDirectory + TIFFSetDirectory + TIFFSetSubDirectory + TIFFUnlinkDirectory + TIFFSetField + TIFFVSetField + TIFFWriteDirectory + TIFFPrintDirectory + TIFFReadScanline + TIFFWriteScanline + TIFFReadRGBAImage + TIFFPrintDirectory + TIFFReadScanline + TIFFWriteScanline + TIFFReadRGBAImage + TIFFFdOpen + TIFFClientOpen + TIFFFileName + TIFFError + TIFFWarning + TIFFSetErrorHandler + TIFFSetWarningHandler + TIFFComputeTile + TIFFCheckTile + TIFFNumberOfTiles + TIFFReadTile + TIFFWriteTile + TIFFComputeStrip + TIFFNumberOfStrips + TIFFReadEncodedStrip + TIFFReadRawStrip + TIFFReadEncodedTile + TIFFReadRawTile + TIFFWriteEncodedStrip + TIFFWriteRawStrip + TIFFWriteEncodedTile + TIFFWriteRawTile + TIFFSetWriteOffset + TIFFSwabShort + TIFFSwabLong + TIFFSwabArrayOfShort + TIFFSwabArrayOfLong + TIFFReverseBits + TIFFGetBitRevTable + TIFFModeCCITTFax3 diff --git a/contrib/winnt/libtiff.mak b/contrib/winnt/libtiff.mak new file mode 100755 index 0000000..c5a351e --- /dev/null +++ b/contrib/winnt/libtiff.mak @@ -0,0 +1,1947 @@ +# Microsoft Visual C++ Generated NMAKE File, Format Version 2.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (ALPHA) Static Library" 0x0604 +# TARGTYPE "Macintosh Static Library" 0x0304 +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=Win32 Debug +!MESSAGE No configuration specified. Defaulting to Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "Win32 Release" && "$(CFG)" != "Win32 Debug" && "$(CFG)" !=\ + "Macintosh Release" && "$(CFG)" != "Macintosh Debug" && "$(CFG)" != "APXrel" &&\ + "$(CFG)" != "APXdeb" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "libtiff.mak" CFG="Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE "Macintosh Release" (based on "Macintosh Static Library") +!MESSAGE "Macintosh Debug" (based on "Macintosh Static Library") +!MESSAGE "APXrel" (based on "Win32 (ALPHA) Static Library") +!MESSAGE "APXdeb" (based on "Win32 (ALPHA) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "Win32 Release" + +!IF "$(CFG)" == "Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "WinRel" +# PROP BASE Intermediate_Dir "WinRel" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "WinRel" +# PROP Intermediate_Dir "WinRel" +OUTDIR=.\WinRel +INTDIR=.\WinRel + +ALL : $(OUTDIR)/""libtiff.lib"" $(OUTDIR)/""libtiff.bsc"" + +$(OUTDIR) : + if not exist $(OUTDIR)/nul mkdir $(OUTDIR) + +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /GX /YX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR /c +# ADD CPP /nologo /MT /W3 /GX /YX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR /c +CPP_PROJ=/nologo /MT /W3 /GX /YX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D\ + "_WINDOWS" /FR$(INTDIR)/ /Fp$(OUTDIR)/"libtiff.pch" /Fo$(INTDIR)/ /c +CPP_OBJS=.\WinRel/ + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o$(OUTDIR)/"libtiff.bsc" +BSC32_SBRS= \ + $(INTDIR)/"tif_jpeg.sbr" \ + $(INTDIR)/"tif_dirinfo.sbr" \ + $(INTDIR)/"tif_win32.sbr" \ + $(INTDIR)/"tif_flush.sbr" \ + $(INTDIR)/"tif_thunder.sbr" \ + $(INTDIR)/"tif_compress.sbr" \ + $(INTDIR)/"tif_print.sbr" \ + $(INTDIR)/"tif_dirread.sbr" \ + $(INTDIR)/"tif_getimage.sbr" \ + $(INTDIR)/"tif_fax3.sbr" \ + $(INTDIR)/"tif_version.sbr" \ + $(INTDIR)/"tif_codec.sbr" \ + $(INTDIR)/"tif_dir.sbr" \ + $(INTDIR)/"tif_predict.sbr" \ + $(INTDIR)/"tif_close.sbr" \ + $(INTDIR)/"tif_dumpmode.sbr" \ + $(INTDIR)/"tif_aux.sbr" \ + $(INTDIR)/"tif_error.sbr" \ + $(INTDIR)/"tif_lzw.sbr" \ + $(INTDIR)/"tif_zip.sbr" \ + $(INTDIR)/"tif_read.sbr" \ + $(INTDIR)/"tif_packbits.sbr" \ + $(INTDIR)/"tif_swab.sbr" \ + $(INTDIR)/"tif_dirwrite.sbr" \ + $(INTDIR)/"tif_open.sbr" \ + $(INTDIR)/"tif_warning.sbr" \ + $(INTDIR)/"tif_tile.sbr" \ + $(INTDIR)/"tif_strip.sbr" \ + $(INTDIR)/"tif_next.sbr" \ + $(INTDIR)/"tif_write.sbr" \ + $(INTDIR)/"fax3sm.sbr" + +$(OUTDIR)/"libtiff.bsc" : $(OUTDIR) $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LIB32=lib.exe +# ADD BASE LIB32 /NOLOGO +# ADD LIB32 /NOLOGO +LIB32_FLAGS=/NOLOGO /OUT:$(OUTDIR)\"libtiff.lib" +DEF_FLAGS= +DEF_FILE= +LIB32_OBJS= \ + $(INTDIR)/"tif_jpeg.obj" \ + $(INTDIR)/"tif_dirinfo.obj" \ + $(INTDIR)/"tif_win32.obj" \ + $(INTDIR)/"tif_flush.obj" \ + $(INTDIR)/"tif_thunder.obj" \ + $(INTDIR)/"tif_compress.obj" \ + $(INTDIR)/"tif_print.obj" \ + $(INTDIR)/"tif_dirread.obj" \ + $(INTDIR)/"tif_getimage.obj" \ + $(INTDIR)/"tif_fax3.obj" \ + $(INTDIR)/"tif_version.obj" \ + $(INTDIR)/"tif_codec.obj" \ + $(INTDIR)/"tif_dir.obj" \ + $(INTDIR)/"tif_predict.obj" \ + $(INTDIR)/"tif_close.obj" \ + $(INTDIR)/"tif_dumpmode.obj" \ + $(INTDIR)/"tif_aux.obj" \ + $(INTDIR)/"tif_error.obj" \ + $(INTDIR)/"tif_lzw.obj" \ + $(INTDIR)/"tif_zip.obj" \ + $(INTDIR)/"tif_read.obj" \ + $(INTDIR)/"tif_packbits.obj" \ + $(INTDIR)/"tif_swab.obj" \ + $(INTDIR)/"tif_dirwrite.obj" \ + $(INTDIR)/"tif_open.obj" \ + $(INTDIR)/"tif_warning.obj" \ + $(INTDIR)/"tif_tile.obj" \ + $(INTDIR)/"tif_strip.obj" \ + $(INTDIR)/"tif_next.obj" \ + $(INTDIR)/"tif_write.obj" \ + $(INTDIR)/"fax3sm.obj" + +$(OUTDIR)/"libtiff.lib" : $(OUTDIR) $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "WinDebug" +# PROP BASE Intermediate_Dir "WinDebug" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "WinDebug" +# PROP Intermediate_Dir "WinDebug" +OUTDIR=.\WinDebug +INTDIR=.\WinDebug + +ALL : $(OUTDIR)/""dlibtiff.lib"" $(OUTDIR)/""libtiff.bsc"" + +$(OUTDIR) : + if not exist $(OUTDIR)/nul mkdir $(OUTDIR) + +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /GX /Z7 /YX /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /c +# ADD CPP /nologo /MT /W3 /GX /Z7 /YX /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FAs /FR /c +CPP_PROJ=/nologo /MT /W3 /GX /Z7 /YX /Od /I "." /I ".." /D "WIN32" /D "_DEBUG"\ + /D "_WINDOWS" /FAs /Fa$(INTDIR)/ /FR$(INTDIR)/ /Fp$(OUTDIR)/"libtiff.pch"\ + /Fo$(INTDIR)/ /c +CPP_OBJS=.\WinDebug/ + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o$(OUTDIR)/"libtiff.bsc" +BSC32_SBRS= \ + $(INTDIR)/"tif_jpeg.sbr" \ + $(INTDIR)/"tif_dirinfo.sbr" \ + $(INTDIR)/"tif_win32.sbr" \ + $(INTDIR)/"tif_flush.sbr" \ + $(INTDIR)/"tif_thunder.sbr" \ + $(INTDIR)/"tif_compress.sbr" \ + $(INTDIR)/"tif_print.sbr" \ + $(INTDIR)/"tif_dirread.sbr" \ + $(INTDIR)/"tif_getimage.sbr" \ + $(INTDIR)/"tif_fax3.sbr" \ + $(INTDIR)/"tif_version.sbr" \ + $(INTDIR)/"tif_codec.sbr" \ + $(INTDIR)/"tif_dir.sbr" \ + $(INTDIR)/"tif_predict.sbr" \ + $(INTDIR)/"tif_close.sbr" \ + $(INTDIR)/"tif_dumpmode.sbr" \ + $(INTDIR)/"tif_aux.sbr" \ + $(INTDIR)/"tif_error.sbr" \ + $(INTDIR)/"tif_lzw.sbr" \ + $(INTDIR)/"tif_zip.sbr" \ + $(INTDIR)/"tif_read.sbr" \ + $(INTDIR)/"tif_packbits.sbr" \ + $(INTDIR)/"tif_swab.sbr" \ + $(INTDIR)/"tif_dirwrite.sbr" \ + $(INTDIR)/"tif_open.sbr" \ + $(INTDIR)/"tif_warning.sbr" \ + $(INTDIR)/"tif_tile.sbr" \ + $(INTDIR)/"tif_strip.sbr" \ + $(INTDIR)/"tif_next.sbr" \ + $(INTDIR)/"tif_write.sbr" \ + $(INTDIR)/"fax3sm.sbr" + +$(OUTDIR)/"libtiff.bsc" : $(OUTDIR) $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LIB32=lib.exe +# ADD BASE LIB32 /NOLOGO +# ADD LIB32 /NOLOGO /OUT:"WinDebug\dlibtiff.lib" +LIB32_FLAGS=/NOLOGO /OUT:"WinDebug\dlibtiff.lib" +DEF_FLAGS= +DEF_FILE= +LIB32_OBJS= \ + $(INTDIR)/"tif_jpeg.obj" \ + $(INTDIR)/"tif_dirinfo.obj" \ + $(INTDIR)/"tif_win32.obj" \ + $(INTDIR)/"tif_flush.obj" \ + $(INTDIR)/"tif_thunder.obj" \ + $(INTDIR)/"tif_compress.obj" \ + $(INTDIR)/"tif_print.obj" \ + $(INTDIR)/"tif_dirread.obj" \ + $(INTDIR)/"tif_getimage.obj" \ + $(INTDIR)/"tif_fax3.obj" \ + $(INTDIR)/"tif_version.obj" \ + $(INTDIR)/"tif_codec.obj" \ + $(INTDIR)/"tif_dir.obj" \ + $(INTDIR)/"tif_predict.obj" \ + $(INTDIR)/"tif_close.obj" \ + $(INTDIR)/"tif_dumpmode.obj" \ + $(INTDIR)/"tif_aux.obj" \ + $(INTDIR)/"tif_error.obj" \ + $(INTDIR)/"tif_lzw.obj" \ + $(INTDIR)/"tif_zip.obj" \ + $(INTDIR)/"tif_read.obj" \ + $(INTDIR)/"tif_packbits.obj" \ + $(INTDIR)/"tif_swab.obj" \ + $(INTDIR)/"tif_dirwrite.obj" \ + $(INTDIR)/"tif_open.obj" \ + $(INTDIR)/"tif_warning.obj" \ + $(INTDIR)/"tif_tile.obj" \ + $(INTDIR)/"tif_strip.obj" \ + $(INTDIR)/"tif_next.obj" \ + $(INTDIR)/"tif_write.obj" \ + $(INTDIR)/"fax3sm.obj" + +$(OUTDIR)/"dlibtiff.lib" : $(OUTDIR) $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "Macintosh Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "MacRel" +# PROP BASE Intermediate_Dir "MacRel" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "MacRel" +# PROP Intermediate_Dir "MacRel" +OUTDIR=.\MacRel +INTDIR=.\MacRel + +ALL : $(OUTDIR)/""libtiff.lib"" $(OUTDIR)/""libtiff.bsc"" + +$(OUTDIR) : + if not exist $(OUTDIR)/nul mkdir $(OUTDIR) + +CPP=cl.exe +# ADD BASE CPP /nologo /AL /W3 /GX /YX /O2 /D "_WINDOWS" /D "_MAC" /D "_68K_" /D "NDEBUG" /FR /c +# ADD CPP /nologo /AL /W3 /GX /YX /O2 /D "_WINDOWS" /D "_MAC" /D "_68K_" /D "NDEBUG" /FR /c +CPP_PROJ=/nologo /AL /W3 /GX /YX /O2 /D "_WINDOWS" /D "_MAC" /D "_68K_" /D\ + "NDEBUG" /FR$(INTDIR)/ /Fp$(OUTDIR)/"libtiff.pch" /Fo$(INTDIR)/ /c +CPP_OBJS=.\MacRel/ + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o$(OUTDIR)/"libtiff.bsc" +BSC32_SBRS= \ + $(INTDIR)/"tif_jpeg.sbr" \ + $(INTDIR)/"tif_dirinfo.sbr" \ + $(INTDIR)/"tif_win32.sbr" \ + $(INTDIR)/"tif_flush.sbr" \ + $(INTDIR)/"tif_thunder.sbr" \ + $(INTDIR)/"tif_compress.sbr" \ + $(INTDIR)/"tif_print.sbr" \ + $(INTDIR)/"tif_dirread.sbr" \ + $(INTDIR)/"tif_getimage.sbr" \ + $(INTDIR)/"tif_fax3.sbr" \ + $(INTDIR)/"tif_version.sbr" \ + $(INTDIR)/"tif_codec.sbr" \ + $(INTDIR)/"tif_dir.sbr" \ + $(INTDIR)/"tif_predict.sbr" \ + $(INTDIR)/"tif_close.sbr" \ + $(INTDIR)/"tif_dumpmode.sbr" \ + $(INTDIR)/"tif_aux.sbr" \ + $(INTDIR)/"tif_error.sbr" \ + $(INTDIR)/"tif_lzw.sbr" \ + $(INTDIR)/"tif_zip.sbr" \ + $(INTDIR)/"tif_read.sbr" \ + $(INTDIR)/"tif_packbits.sbr" \ + $(INTDIR)/"tif_swab.sbr" \ + $(INTDIR)/"tif_dirwrite.sbr" \ + $(INTDIR)/"tif_open.sbr" \ + $(INTDIR)/"tif_warning.sbr" \ + $(INTDIR)/"tif_tile.sbr" \ + $(INTDIR)/"tif_strip.sbr" \ + $(INTDIR)/"tif_next.sbr" \ + $(INTDIR)/"tif_write.sbr" \ + $(INTDIR)/"fax3sm.sbr" + +$(OUTDIR)/"libtiff.bsc" : $(OUTDIR) $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LIB32=lib.exe +# ADD BASE LIB32 /NOLOGO +# ADD LIB32 /NOLOGO +LIB32_FLAGS=/NOLOGO /OUT:$(OUTDIR)\"libtiff.lib" +DEF_FLAGS= +DEF_FILE= +LIB32_OBJS= \ + $(INTDIR)/"tif_jpeg.obj" \ + $(INTDIR)/"tif_dirinfo.obj" \ + $(INTDIR)/"tif_win32.obj" \ + $(INTDIR)/"tif_flush.obj" \ + $(INTDIR)/"tif_thunder.obj" \ + $(INTDIR)/"tif_compress.obj" \ + $(INTDIR)/"tif_print.obj" \ + $(INTDIR)/"tif_dirread.obj" \ + $(INTDIR)/"tif_getimage.obj" \ + $(INTDIR)/"tif_fax3.obj" \ + $(INTDIR)/"tif_version.obj" \ + $(INTDIR)/"tif_codec.obj" \ + $(INTDIR)/"tif_dir.obj" \ + $(INTDIR)/"tif_predict.obj" \ + $(INTDIR)/"tif_close.obj" \ + $(INTDIR)/"tif_dumpmode.obj" \ + $(INTDIR)/"tif_aux.obj" \ + $(INTDIR)/"tif_error.obj" \ + $(INTDIR)/"tif_lzw.obj" \ + $(INTDIR)/"tif_zip.obj" \ + $(INTDIR)/"tif_read.obj" \ + $(INTDIR)/"tif_packbits.obj" \ + $(INTDIR)/"tif_swab.obj" \ + $(INTDIR)/"tif_dirwrite.obj" \ + $(INTDIR)/"tif_open.obj" \ + $(INTDIR)/"tif_warning.obj" \ + $(INTDIR)/"tif_tile.obj" \ + $(INTDIR)/"tif_strip.obj" \ + $(INTDIR)/"tif_next.obj" \ + $(INTDIR)/"tif_write.obj" \ + $(INTDIR)/"fax3sm.obj" + +$(OUTDIR)/"libtiff.lib" : $(OUTDIR) $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "MacDebug" +# PROP BASE Intermediate_Dir "MacDebug" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "MacDebug" +# PROP Intermediate_Dir "MacDebug" +OUTDIR=.\MacDebug +INTDIR=.\MacDebug + +ALL : $(OUTDIR)/""libtiff.lib"" $(OUTDIR)/""libtiff.bsc"" + +$(OUTDIR) : + if not exist $(OUTDIR)/nul mkdir $(OUTDIR) + +CPP=cl.exe +# ADD BASE CPP /nologo /AL /Q68m /W3 /GX /Z7 /YX /Od /D "_WINDOWS" /D "_MAC" /D "_68K_" /D "_DEBUG" /FR /c +# ADD CPP /nologo /AL /Q68m /W3 /GX /Z7 /YX /Od /D "_WINDOWS" /D "_MAC" /D "_68K_" /D "_DEBUG" /FR /c +CPP_PROJ=/nologo /AL /Q68m /W3 /GX /Z7 /YX /Od /D "_WINDOWS" /D "_MAC" /D\ + "_68K_" /D "_DEBUG" /FR$(INTDIR)/ /Fp$(OUTDIR)/"libtiff.pch" /Fo$(INTDIR)/ /c +CPP_OBJS=.\MacDebug/ + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o$(OUTDIR)/"libtiff.bsc" +BSC32_SBRS= \ + $(INTDIR)/"tif_jpeg.sbr" \ + $(INTDIR)/"tif_dirinfo.sbr" \ + $(INTDIR)/"tif_win32.sbr" \ + $(INTDIR)/"tif_flush.sbr" \ + $(INTDIR)/"tif_thunder.sbr" \ + $(INTDIR)/"tif_compress.sbr" \ + $(INTDIR)/"tif_print.sbr" \ + $(INTDIR)/"tif_dirread.sbr" \ + $(INTDIR)/"tif_getimage.sbr" \ + $(INTDIR)/"tif_fax3.sbr" \ + $(INTDIR)/"tif_version.sbr" \ + $(INTDIR)/"tif_codec.sbr" \ + $(INTDIR)/"tif_dir.sbr" \ + $(INTDIR)/"tif_predict.sbr" \ + $(INTDIR)/"tif_close.sbr" \ + $(INTDIR)/"tif_dumpmode.sbr" \ + $(INTDIR)/"tif_aux.sbr" \ + $(INTDIR)/"tif_error.sbr" \ + $(INTDIR)/"tif_lzw.sbr" \ + $(INTDIR)/"tif_zip.sbr" \ + $(INTDIR)/"tif_read.sbr" \ + $(INTDIR)/"tif_packbits.sbr" \ + $(INTDIR)/"tif_swab.sbr" \ + $(INTDIR)/"tif_dirwrite.sbr" \ + $(INTDIR)/"tif_open.sbr" \ + $(INTDIR)/"tif_warning.sbr" \ + $(INTDIR)/"tif_tile.sbr" \ + $(INTDIR)/"tif_strip.sbr" \ + $(INTDIR)/"tif_next.sbr" \ + $(INTDIR)/"tif_write.sbr" \ + $(INTDIR)/"fax3sm.sbr" + +$(OUTDIR)/"libtiff.bsc" : $(OUTDIR) $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LIB32=lib.exe +# ADD BASE LIB32 /NOLOGO +# ADD LIB32 /NOLOGO +LIB32_FLAGS=/NOLOGO /OUT:$(OUTDIR)\"libtiff.lib" +DEF_FLAGS= +DEF_FILE= +LIB32_OBJS= \ + $(INTDIR)/"tif_jpeg.obj" \ + $(INTDIR)/"tif_dirinfo.obj" \ + $(INTDIR)/"tif_win32.obj" \ + $(INTDIR)/"tif_flush.obj" \ + $(INTDIR)/"tif_thunder.obj" \ + $(INTDIR)/"tif_compress.obj" \ + $(INTDIR)/"tif_print.obj" \ + $(INTDIR)/"tif_dirread.obj" \ + $(INTDIR)/"tif_getimage.obj" \ + $(INTDIR)/"tif_fax3.obj" \ + $(INTDIR)/"tif_version.obj" \ + $(INTDIR)/"tif_codec.obj" \ + $(INTDIR)/"tif_dir.obj" \ + $(INTDIR)/"tif_predict.obj" \ + $(INTDIR)/"tif_close.obj" \ + $(INTDIR)/"tif_dumpmode.obj" \ + $(INTDIR)/"tif_aux.obj" \ + $(INTDIR)/"tif_error.obj" \ + $(INTDIR)/"tif_lzw.obj" \ + $(INTDIR)/"tif_zip.obj" \ + $(INTDIR)/"tif_read.obj" \ + $(INTDIR)/"tif_packbits.obj" \ + $(INTDIR)/"tif_swab.obj" \ + $(INTDIR)/"tif_dirwrite.obj" \ + $(INTDIR)/"tif_open.obj" \ + $(INTDIR)/"tif_warning.obj" \ + $(INTDIR)/"tif_tile.obj" \ + $(INTDIR)/"tif_strip.obj" \ + $(INTDIR)/"tif_next.obj" \ + $(INTDIR)/"tif_write.obj" \ + $(INTDIR)/"fax3sm.obj" + +$(OUTDIR)/"libtiff.lib" : $(OUTDIR) $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "APXrel" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "APXrel" +# PROP BASE Intermediate_Dir "APXrel" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "APXrel" +# PROP Intermediate_Dir "APXrel" +OUTDIR=.\APXrel +INTDIR=.\APXrel + +ALL : $(OUTDIR)/"libtiff.lib" $(OUTDIR)/"libtiff.bsc" + +$(OUTDIR) : + if not exist $(OUTDIR)/nul mkdir $(OUTDIR) + +CPP=cl.exe +# ADD BASE CPP /nologo /ML /Gt0 /W3 /GX /YX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR /c +# ADD CPP /nologo /MT /Gt0 /W3 /GX /YX /O2 /I ".." /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR /c +CPP_PROJ=/nologo /MT /Gt0 /W3 /GX /YX /O2 /I ".." /I "." /D "WIN32" /D "NDEBUG"\ + /D "_WINDOWS" /FR$(INTDIR)/ /Fp$(OUTDIR)/"libtiff.pch" /Fo$(INTDIR)/ /c +CPP_OBJS=.\APXrel/ + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o$(OUTDIR)/"libtiff.bsc" +BSC32_SBRS= \ + $(INTDIR)/"tif_jpeg.sbr" \ + $(INTDIR)/"tif_dirinfo.sbr" \ + $(INTDIR)/"tif_win32.sbr" \ + $(INTDIR)/"tif_flush.sbr" \ + $(INTDIR)/"tif_thunder.sbr" \ + $(INTDIR)/"tif_compress.sbr" \ + $(INTDIR)/"tif_print.sbr" \ + $(INTDIR)/"tif_dirread.sbr" \ + $(INTDIR)/"tif_getimage.sbr" \ + $(INTDIR)/"tif_fax3.sbr" \ + $(INTDIR)/"tif_version.sbr" \ + $(INTDIR)/"tif_codec.sbr" \ + $(INTDIR)/"tif_dir.sbr" \ + $(INTDIR)/"tif_predict.sbr" \ + $(INTDIR)/"tif_close.sbr" \ + $(INTDIR)/"tif_dumpmode.sbr" \ + $(INTDIR)/"tif_aux.sbr" \ + $(INTDIR)/"tif_error.sbr" \ + $(INTDIR)/"tif_lzw.sbr" \ + $(INTDIR)/"tif_zip.sbr" \ + $(INTDIR)/"tif_read.sbr" \ + $(INTDIR)/"tif_packbits.sbr" \ + $(INTDIR)/"tif_swab.sbr" \ + $(INTDIR)/"tif_dirwrite.sbr" \ + $(INTDIR)/"tif_open.sbr" \ + $(INTDIR)/"tif_warning.sbr" \ + $(INTDIR)/"tif_tile.sbr" \ + $(INTDIR)/"tif_strip.sbr" \ + $(INTDIR)/"tif_next.sbr" \ + $(INTDIR)/"tif_write.sbr" \ + $(INTDIR)/"fax3sm.sbr" + +$(OUTDIR)/"libtiff.bsc" : $(OUTDIR) $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LIB32=lib.exe +# ADD BASE LIB32 /NOLOGO +# ADD LIB32 /NOLOGO +LIB32_FLAGS=/NOLOGO /OUT:$(OUTDIR)\"libtiff.lib" +DEF_FLAGS= +DEF_FILE= +LIB32_OBJS= \ + $(INTDIR)/"tif_jpeg.obj" \ + $(INTDIR)/"tif_dirinfo.obj" \ + $(INTDIR)/"tif_win32.obj" \ + $(INTDIR)/"tif_flush.obj" \ + $(INTDIR)/"tif_thunder.obj" \ + $(INTDIR)/"tif_compress.obj" \ + $(INTDIR)/"tif_print.obj" \ + $(INTDIR)/"tif_dirread.obj" \ + $(INTDIR)/"tif_getimage.obj" \ + $(INTDIR)/"tif_fax3.obj" \ + $(INTDIR)/"tif_version.obj" \ + $(INTDIR)/"tif_codec.obj" \ + $(INTDIR)/"tif_dir.obj" \ + $(INTDIR)/"tif_predict.obj" \ + $(INTDIR)/"tif_close.obj" \ + $(INTDIR)/"tif_dumpmode.obj" \ + $(INTDIR)/"tif_aux.obj" \ + $(INTDIR)/"tif_error.obj" \ + $(INTDIR)/"tif_lzw.obj" \ + $(INTDIR)/"tif_zip.obj" \ + $(INTDIR)/"tif_read.obj" \ + $(INTDIR)/"tif_packbits.obj" \ + $(INTDIR)/"tif_swab.obj" \ + $(INTDIR)/"tif_dirwrite.obj" \ + $(INTDIR)/"tif_open.obj" \ + $(INTDIR)/"tif_warning.obj" \ + $(INTDIR)/"tif_tile.obj" \ + $(INTDIR)/"tif_strip.obj" \ + $(INTDIR)/"tif_next.obj" \ + $(INTDIR)/"tif_write.obj" \ + $(INTDIR)/"fax3sm.obj" + +$(OUTDIR)/"libtiff.lib" : $(OUTDIR) $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "APXdeb" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "APXdeb" +# PROP BASE Intermediate_Dir "APXdeb" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "APXdeb" +# PROP Intermediate_Dir "APXdeb" +OUTDIR=.\APXdeb +INTDIR=.\APXdeb + +ALL : $(OUTDIR)/"dlibtiff.lib" $(OUTDIR)/"libtiff.bsc" + +$(OUTDIR) : + if not exist $(OUTDIR)/nul mkdir $(OUTDIR) + +CPP=cl.exe +# ADD BASE CPP /nologo /ML /Gt0 /W3 /GX /Z7 /YX /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /c +# ADD CPP /nologo /MT /Gt0 /W3 /GX /Z7 /YX /Od /I ".." /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /c +CPP_PROJ=/nologo /MT /Gt0 /W3 /GX /Z7 /YX /Od /I ".." /I "." /D "WIN32" /D\ + "_DEBUG" /D "_WINDOWS" /FR$(INTDIR)/ /Fp$(OUTDIR)/"libtiff.pch" /Fo$(INTDIR)/\ + /c +CPP_OBJS=.\APXdeb/ + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o$(OUTDIR)/"libtiff.bsc" +BSC32_SBRS= \ + $(INTDIR)/"tif_jpeg.sbr" \ + $(INTDIR)/"tif_dirinfo.sbr" \ + $(INTDIR)/"tif_win32.sbr" \ + $(INTDIR)/"tif_flush.sbr" \ + $(INTDIR)/"tif_thunder.sbr" \ + $(INTDIR)/"tif_compress.sbr" \ + $(INTDIR)/"tif_print.sbr" \ + $(INTDIR)/"tif_dirread.sbr" \ + $(INTDIR)/"tif_getimage.sbr" \ + $(INTDIR)/"tif_fax3.sbr" \ + $(INTDIR)/"tif_version.sbr" \ + $(INTDIR)/"tif_codec.sbr" \ + $(INTDIR)/"tif_dir.sbr" \ + $(INTDIR)/"tif_predict.sbr" \ + $(INTDIR)/"tif_close.sbr" \ + $(INTDIR)/"tif_dumpmode.sbr" \ + $(INTDIR)/"tif_aux.sbr" \ + $(INTDIR)/"tif_error.sbr" \ + $(INTDIR)/"tif_lzw.sbr" \ + $(INTDIR)/"tif_zip.sbr" \ + $(INTDIR)/"tif_read.sbr" \ + $(INTDIR)/"tif_packbits.sbr" \ + $(INTDIR)/"tif_swab.sbr" \ + $(INTDIR)/"tif_dirwrite.sbr" \ + $(INTDIR)/"tif_open.sbr" \ + $(INTDIR)/"tif_warning.sbr" \ + $(INTDIR)/"tif_tile.sbr" \ + $(INTDIR)/"tif_strip.sbr" \ + $(INTDIR)/"tif_next.sbr" \ + $(INTDIR)/"tif_write.sbr" \ + $(INTDIR)/"fax3sm.sbr" + +$(OUTDIR)/"libtiff.bsc" : $(OUTDIR) $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LIB32=lib.exe +# ADD BASE LIB32 /NOLOGO +# ADD LIB32 /NOLOGO /OUT:"APXdeb\dlibtiff.lib" +LIB32_FLAGS=/NOLOGO /OUT:"APXdeb\dlibtiff.lib" +DEF_FLAGS= +DEF_FILE= +LIB32_OBJS= \ + $(INTDIR)/"tif_jpeg.obj" \ + $(INTDIR)/"tif_dirinfo.obj" \ + $(INTDIR)/"tif_win32.obj" \ + $(INTDIR)/"tif_flush.obj" \ + $(INTDIR)/"tif_thunder.obj" \ + $(INTDIR)/"tif_compress.obj" \ + $(INTDIR)/"tif_print.obj" \ + $(INTDIR)/"tif_dirread.obj" \ + $(INTDIR)/"tif_getimage.obj" \ + $(INTDIR)/"tif_fax3.obj" \ + $(INTDIR)/"tif_version.obj" \ + $(INTDIR)/"tif_codec.obj" \ + $(INTDIR)/"tif_dir.obj" \ + $(INTDIR)/"tif_predict.obj" \ + $(INTDIR)/"tif_close.obj" \ + $(INTDIR)/"tif_dumpmode.obj" \ + $(INTDIR)/"tif_aux.obj" \ + $(INTDIR)/"tif_error.obj" \ + $(INTDIR)/"tif_lzw.obj" \ + $(INTDIR)/"tif_zip.obj" \ + $(INTDIR)/"tif_read.obj" \ + $(INTDIR)/"tif_packbits.obj" \ + $(INTDIR)/"tif_swab.obj" \ + $(INTDIR)/"tif_dirwrite.obj" \ + $(INTDIR)/"tif_open.obj" \ + $(INTDIR)/"tif_warning.obj" \ + $(INTDIR)/"tif_tile.obj" \ + $(INTDIR)/"tif_strip.obj" \ + $(INTDIR)/"tif_next.obj" \ + $(INTDIR)/"tif_write.obj" \ + $(INTDIR)/"fax3sm.obj" + +$(OUTDIR)/"dlibtiff.lib" : $(OUTDIR) $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +################################################################################ +# Begin Group "Source Files" + +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_jpeg.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_jpeg.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_jpeg.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_jpeg.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_jpeg.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_jpeg.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_jpeg.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_dirinfo.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_dirinfo.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_dirinfo.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_dirinfo.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_dirinfo.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_dirinfo.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_dirinfo.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_win32.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_win32.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_win32.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_win32.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_win32.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_win32.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_win32.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_flush.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_flush.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_flush.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_flush.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_flush.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_flush.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_flush.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_thunder.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_thunder.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_thunder.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_thunder.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_thunder.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_thunder.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_thunder.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_compress.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_compress.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_compress.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_compress.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_compress.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_compress.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_compress.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_print.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_print.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_print.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_print.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_print.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_print.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_print.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_dirread.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_dirread.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_dirread.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_dirread.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_dirread.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_dirread.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_dirread.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_getimage.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_getimage.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_getimage.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_getimage.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_getimage.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_getimage.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_getimage.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_fax3.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_fax3.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_fax3.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_fax3.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_fax3.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_fax3.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_fax3.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_version.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_version.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_version.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_version.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_version.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_version.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_version.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_codec.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_codec.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_codec.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_codec.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_codec.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_codec.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_codec.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_dir.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_dir.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_dir.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_dir.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_dir.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_dir.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_dir.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_predict.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_predict.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_predict.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_predict.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_predict.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_predict.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_predict.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_close.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_close.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_close.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_close.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_close.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_close.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_close.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_dumpmode.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_dumpmode.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_dumpmode.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_dumpmode.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_dumpmode.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_dumpmode.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_dumpmode.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_aux.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_aux.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_aux.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_aux.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_aux.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_aux.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_aux.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_error.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_error.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_error.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_error.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_error.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_error.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_error.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_lzw.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_lzw.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_lzw.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_lzw.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_lzw.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_lzw.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_lzw.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_zip.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_zip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_zip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_zip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_zip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_zip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_zip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_read.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_read.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_read.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_read.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_read.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_read.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_read.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_packbits.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_packbits.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_packbits.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_packbits.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_packbits.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_packbits.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_packbits.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_swab.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_swab.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_swab.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_swab.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_swab.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_swab.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_swab.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_dirwrite.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_dirwrite.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_dirwrite.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_dirwrite.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_dirwrite.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_dirwrite.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_dirwrite.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_open.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_open.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_open.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_open.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_open.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_open.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_open.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_warning.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_warning.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_warning.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_warning.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_warning.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_warning.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_warning.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\libtiff.def +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_tile.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_tile.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_tile.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_tile.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_tile.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_tile.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_tile.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_strip.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_strip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_strip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_strip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_strip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_strip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_strip.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_next.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_next.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_next.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_next.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_next.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_next.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_next.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\tiff\tiff-v3.4beta024\libtiff\tif_write.c" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"tif_write.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"tif_write.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"tif_write.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"tif_write.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"tif_write.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"tif_write.obj" : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\fax3sm.c +DEP_FAX3S=\ + "\tiff\tiff-v3.4beta024\libtiff\tiff.h"\ + "\tiff\tiff-v3.4beta024\libtiff\tif_fax3.h" + +!IF "$(CFG)" == "Win32 Release" + +$(INTDIR)/"fax3sm.obj" : $(SOURCE) $(DEP_FAX3S) $(INTDIR) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +$(INTDIR)/"fax3sm.obj" : $(SOURCE) $(DEP_FAX3S) $(INTDIR) + +!ELSEIF "$(CFG)" == "Macintosh Release" + +$(INTDIR)/"fax3sm.obj" : $(SOURCE) $(DEP_FAX3S) $(INTDIR) + +!ELSEIF "$(CFG)" == "Macintosh Debug" + +$(INTDIR)/"fax3sm.obj" : $(SOURCE) $(DEP_FAX3S) $(INTDIR) + +!ELSEIF "$(CFG)" == "APXrel" + +$(INTDIR)/"fax3sm.obj" : $(SOURCE) $(DEP_FAX3S) $(INTDIR) + +!ELSEIF "$(CFG)" == "APXdeb" + +$(INTDIR)/"fax3sm.obj" : $(SOURCE) $(DEP_FAX3S) $(INTDIR) + +!ENDIF + +# End Source File +# End Group +# End Project +################################################################################ diff --git a/contrib/winnt/libtiff.vcp b/contrib/winnt/libtiff.vcp new file mode 100755 index 0000000000000000000000000000000000000000..4c63936d895a9a7dc1299c4db02156f4649b0ae7 GIT binary patch literal 17408 zcmeHOO-x(a6+SS)I3@-rq#34@N#3|o3sqtaMy*L^qyXl}DZ!Qv4XP}Gf1a_4v0c9h z7&4VuwJf?|HWiC5GP`NjN>N*>v+SaaEV{@ti!NAn!KPBAb}@^#>38mZ4-A2DL7K$_ zKk5D4d(XM|oOAE}&VA>;_aHv*e}|gLOVmj9P>AXJLV6^nU|UGnRmKg>)0o2Nr@JU!sstnfYwix0HPR`gJFbL@T95 zJ#B_c>1lnbTu7Qa(dW#EgKvi|yNJ9X&P5cCGQng%RlyCIBaat1gS7eiAZ`8JPk+br zUvX;wKH9~d%U=GWkN%B2m;GhFpGXUeviX1X(`7t!+0JJH>cTUZb-M@X7Vccu@p6Ft zxO3T;fA&+;--4oSpK7Kbb9UdDKmpeZW_y&eYr-%Ig1BuD-uqb#G zo=OZwXG5dIOfwe>$HG%%5np8Zf#84ESf$cJNjqyj@!^=1ykHj6Nm!sd6;%InKX^gQPSU+GNN5ou0O3pp8(}n=Q?T8hf4NkInjx|+)1{OT8n{N zvOcBuBtQ4z9{*O&c97h%uIzwV*=s1L(83O!hn$fRDRN~ zhY_CL(H8vK#=Sj!AK$pTF7hpv;g42{-BgVU%-nJ@qgT*VK(nCx39(mGu_J?Y*Uc4r zh4xhF6YM{)VLkAPBK?s7668#%OPKUNxK6Lmg_{Dl(D(P`Q1^;k-B*6GD^SU|N|0VL{Js!8f ze>Ww!+At2V?mulit#nz;%lhRaT7b9wO&w)lj9)w!y>rp4tSyK7Au!K%e_7?!zdn@D_T{o4oG-zwvCExuEehzoH0NAh#I zC^!_~8jZywa`jKbUOC9Y@s;E1Iqp3|*273Io$4;^!TlvoMf3`34oX?3qpy+HGx>B4 zl|CIeD;ybpG8)y&HXiBL)sieSr zn|}-Z9Is=%xAV}Sfo{A}FsOJ&KWVM)H(36JFt^BjuiXl;}EDPzW z<%NSK?>$VW^F^~{_K+UM7Z@(rt4}P=yN$Ka0rQug78IFQK64Qr8{R8s51VnaFKJAQt79{`s#Tbdc57{pci|UMbdd((3X?w$Em#O zsFy00zA{#^G47!8r{tybmDNh#bd;A;=_`DY;HXu)%IeSBxOdVJtoaB&qi0X$U=j7+ z;5g}QOZcG%D^!ZGIo-MRn|9#Svh~6v#3|k-HVXppxEt8aG1wf za?+G}C!?1e@JaSaNQalm=*9HfNU3Nh^F>{Jwa2K#M~g&_7T$95r(T7^*hHT(n8wBF?{Zr5zsu?GaeD0Tb=1rJIq2U^Qh(m9+%fy` zP34R+iE^gz@bx1t`T5g!*1y@Rpa0f)J{Umx^xaQD&+X-)KlAHz568-u+#dJaET-Mn zv|HWr$V`ms@fhCkaF}`|8fE=)n~TOG4|;6kkrtn>}-!) z;}ja`k+);p*<$(df0pJ2`Pg`mSNrr+&3j;b*$Z)K19ZhIw+})bpqr$zY3s+iwLk~`AJ< +To: tiff@sgi.engr.sgi.com +Subject: Contribution: libtiff for Windows-nt +Reply-To: Dave Dyer +Sender: owner-tiff@sgi.engr.sgi.com +Precedence: bulk + + +Since I needed it, and the support for windows-nt versions of libtiff +is sketchy at best, I packaged up my port of libtiff v3.4beta024 +to windows-nt. + + ftp://torii.triple-i.com/pub/ddyer/libtiff.tar.gz + +this contains "libtiff.mak", a makefile for microsoft visual c++, +a couple of hand-built .h and .c files (corresponding to those which +are automatically constructed by unix makefiles) and static libraries +compiled for intel and dec alpha. + +As customary, I make no claims regarding the completeness or +correctness of these libraries, and accept no responsibily for any +mishaps you may have as a result of using them. They work for me. + +I hope Sam will copy and incorporate this into the "contrib" section +of the next libtiff release. diff --git a/contrib/winnt/version.h b/contrib/winnt/version.h new file mode 100755 index 0000000..11b9435 --- /dev/null +++ b/contrib/winnt/version.h @@ -0,0 +1 @@ +#define VERSION "LIBTIFF, Version 3.4beta024\nCopyright (c) 1988-1995 Sam Leffler\nCopyright (c) 1991-1995 Silicon Graphics, Inc." diff --git a/dist/newalpha b/dist/newalpha new file mode 100755 index 0000000..6995777 --- /dev/null +++ b/dist/newalpha @@ -0,0 +1,8 @@ +#! /bin/sh +# $Header: /home/cvsroot/libtiff/dist/newalpha,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +if test -r tiff.alpha; then + ALPHA=`cat tiff.alpha`; rm -f tiff.alpha + echo "$ALPHA" | awk '{ printf "define ALPHA %1d\n", $3+1}' > tiff.alpha +else + echo "define ALPHA 001" >tiff.alpha +fi diff --git a/dist/newversion b/dist/newversion new file mode 100755 index 0000000..ddf3821 --- /dev/null +++ b/dist/newversion @@ -0,0 +1,32 @@ +#! /bin/sh +# $Header: /home/cvsroot/libtiff/dist/newversion,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# TIFF Software +# +# Copyright (c) 1994-1996 Sam Leffler +# Copyright (c) 1994-1996 Silicon Graphics, Inc. +# +# 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. +# +rm -f tiff.version +awk ' +$1 ~ /.*beta/ { print "define TIFF_VNUM " $0 } +$1 !~ /.*beta/{ print "define TIFF_VNUM \"" $0 " (release)\"" } +' ../VERSION > tiff.version diff --git a/dist/tiff.alpha b/dist/tiff.alpha new file mode 100755 index 0000000..58b5ddb --- /dev/null +++ b/dist/tiff.alpha @@ -0,0 +1 @@ +define ALPHA diff --git a/dist/tiff.spec b/dist/tiff.spec new file mode 100755 index 0000000..38ff379 --- /dev/null +++ b/dist/tiff.spec @@ -0,0 +1,68 @@ +# $Header: /home/cvsroot/libtiff/dist/tiff.spec,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# TIFF Software +# +# Copyright (c) 1994-1997 Sam Leffler +# Copyright (c) 1994-1997 Silicon Graphics, Inc. +# +# 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. +# +define CUR_MAJ_VERS 1006 # Major Version number +define CUR_MIN_VERS 001 # Minor Version number +define CUR_VERS ${CUR_MAJ_VERS}${CUR_MIN_VERS}${ALPHA} +define TIFF_NAME "TIFF" + +include tiff.version +include tiff.alpha + +product tiff + id "${TIFF_NAME} Tools, Version ${TIFF_VNUM}" + inplace + + image sw + id "${TIFF_NAME} Software" + version "${CUR_VERS}" + subsys tools default + id "${TIFF_NAME} Tools & Library DSO" + exp "tiff.sw.tools" + endsubsys + subsys dev + id "${TIFF_NAME} Developement Software" + exp "tiff.sw.dev" + endsubsys + endimage + + image man + id "${TIFF_NAME} Documentation" + version "${CUR_VERS}" + subsys tools default + id "${TIFF_NAME} Tools Manual Pages" + exp "tiff.man.tools" + endsubsys + subsys dev + id "${TIFF_NAME} Library Manual Pages" + exp "tiff.man.dev" + endsubsys + subsys html + id "${TIFF_NAME} HTML Materials" + exp "tiff.man.html" + endsubsys + endimage +endproduct diff --git a/dist/tiff.version b/dist/tiff.version new file mode 100755 index 0000000..3c928d5 --- /dev/null +++ b/dist/tiff.version @@ -0,0 +1 @@ +define TIFF_VNUM "3.5.5 (release)" diff --git a/html/Makefile.in b/html/Makefile.in new file mode 100755 index 0000000..9fb77bb --- /dev/null +++ b/html/Makefile.in @@ -0,0 +1,109 @@ +# $Header: /home/cvsroot/libtiff/html/Makefile.in,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# @WARNING@ +# +# Tag Image File Format Library Manual Pages +# +# Copyright (c) 1991-1997 Sam Leffler +# Copyright (c) 1991-1997 Silicon Graphics, Inc. +# +# 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 Stanford 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. +# +DEPTH = .. + +SRCDIR = ${DEPTH}/@SRCDIR@/html +VPATH = ../@SRCDIR@/html + +PORT = ${DEPTH}/port + +# +# VERSION: @VERSION@ +# DATE: @DATE@ +# TARGET: @TARGET@ +# CCOMPILER: @CCOMPILER@ +# +SHELL = @SCRIPT_SH@ +NULL = +ECHO = echo +MV = mv +RM = rm -f +INSTALL = @INSTALL@ + +HTML = @DIR_HTML@ + +HTMLFILES=\ + bugs.html \ + build.html \ + contrib.html \ + document.html \ + images.html \ + index.html \ + internals.html \ + intro.html \ + libtiff.html \ + misc.html \ + support.html \ + tools.html \ + v3.4beta007.html \ + v3.4beta016.html \ + v3.4beta018.html \ + v3.4beta024.html \ + v3.4beta028.html \ + v3.4beta029.html \ + v3.4beta031.html \ + v3.4beta032.html \ + v3.4beta033.html \ + v3.4beta034.html \ + v3.4beta035.html \ + v3.4beta036.html \ + v3.5.1.html \ + v3.5.2.html \ + v3.5.3.html \ + v3.5.4.html \ + v3.5.5.html \ + ${NULL} +IMAGES=\ + images/back.gif \ + images/bali.jpg \ + images/cat.gif \ + images/cover.jpg \ + images/cramps.gif \ + images/jello.jpg \ + images/jim.gif \ + images/note.gif \ + images/oxford.gif \ + images/quad.jpg \ + images/ring.gif \ + images/smallliz.jpg \ + images/strike.gif \ + images/warning.gif \ + ${NULL} +TARGETS= + +all: ${TARGETS} + +install: all + ${INSTALL} -m 755 -dir -idb tiff.man.html ${HTML} ${HTML}/images + for i in ${HTMLFILES} ${IMAGES}; do \ + ${INSTALL} -idb tiff.man.html -m 444 -F ${HTML} \ + -src ${SRCDIR}/$$i -O $$i; \ + done + +clean:; diff --git a/html/bugs.html b/html/bugs.html new file mode 100755 index 0000000..0f7bd2a --- /dev/null +++ b/html/bugs.html @@ -0,0 +1,46 @@ + + + +Bugs and the TIFF Mailing List + + + + +

      + +Bugs and the TIFF Mailing List +

      + +

      +This software is free. Please let us know when you find a problem or +fix a bug. + +

      +A mailing list for users of this software is located at olympiakos.com +If you want to join this mailing list or have a list-related request +such as getting your name removed from it, send a request to +

      +For example, to subscribe, send the line +
        +subscribe
        +
      +in the body of your message. The line help will return a list of +the commands understood by the mailing list management software. + +

      +Submissions (including bug reports) should be directed to: +

      +When corresponding about this software please always specify what +version you have and what system you are running on. + +

      + +


      + +Last updated: $Date: 2000/06/24 19:10:16 $ + + diff --git a/html/build.html b/html/build.html new file mode 100755 index 0000000..cc99b44 --- /dev/null +++ b/html/build.html @@ -0,0 +1,1167 @@ + + + +Building the TIFF Software Distribution + + + + +

      + +Building the Software Distribution +

      + + + +
      + +This chapter contains step-by-step instructions on how to configure +and build the TIFF software distribution. +The software is most easily built on a UNIX system, but with a little +bit of work it can easily be built and used on other non-UNIX platforms. + +

      Building on a UNIX System

      + +To build the software on a UNIX system +you need to first run the configure shell script +that is located in the top level of the source directory. +This script probes the target system for necessary tools and functions +and constructs a build environment in which the software may be +compiled. +Once configuration is done, you simply run make + to build the software +and then make install to do the installation; for example: + +
        +hyla% cd tiff-v3.4beta099
        +hyla% ./configure
        +    ...lots of messages...
        +hyla% make
        +    ...lots of messages...
        +hyla# make install
        +
      + +In general, the software is designed such that the following should +be ``make-able'' in each directory: + +
        +make [all]	build stuff
        +make install	build&install stuff
        +make clean	remove .o files and cruft, but not executables
        +make clobber	remove everything that can be recreated
        +make distclean	remove absolutely everything that can be recreated
        +
      + +Note that after running "make clobber" or +"make distclean" the configure script must +be run again to create the Makefiles and other make-related files. + +


      Build Trees

      + +There are two schemes for configuring and building the software. +If you intend to build the software for only one target system, you +can configure the software so that it is built in the same directories +as the source code. + +
        +hyla% cd tiff-v3.4beta099
        +hyla% ls
        +COPYRIGHT       VERSION         config.sub      dist            man
        +Makefile.in     config.guess    configure       html            port
        +README          config.site     contrib         libtiff         tools
        +hyla% ./configure
        +
      + +

      +Otherwise, you can configure a build tree that +is parallel to the source tree hierarchy but which contains only +configured files and files created during the build procedure. + +

        +hyla% cd tiff-v3.4beta099
        +hyla% mkdir obj obj/mycpu
        +hyla% cd obj/mycpu
        +hyla% ../../configure
        +
      + +This second scheme is useful for: + +
        +
      • building multiple targets from a single source tree +
      • building from a read-only source tree (e.g. if you receive + the distribution on CD-ROM) +
      + +


      Configuration Files

      + +The configuration process is critical to the proper compilation, +installation, and operation of the software. +The configure script runs a series of tests to +decide whether or not the target system +supports required functionality and, if it does not, whether it +can emulate or workaround the missing functions. +This procedure is fairly complicated and, due to the nonstandard +nature of most UNIX systems, prone to error. +The first time that you configure the software for use you should +check the output from the configure script and look for anything +that does not make sense for your system. +A sample configure run is shown below together with an explanation +of some of the work that is done. + +

      +A second function of the configure script is to set the default +configuration parameters for the software. +Of particular note are the directories where the software is to be +installed. +By default the software is installed in the /usr/local hierarchy. +To change this behaviour the appropriate parameters can be +specified either: +

        +
      • on the command line to configure, +
      • in a site-wide configuration file, or +
      • in a target-specific configuration file. +
      +configure reads any site-wide configure file first, and +then any target-specific configuration file. +This permits target-specific definitions to override +site-wide definitions. + +

      +Site-wide configuration files are named +config.site and are automatically searched for first +in any directory specified on the command line to configure +(using the -site option), or if that fails, in +the directory in in which the configure script is located. + +

      +Target-specific configuration files are named config.local +and are looked for first in the top-level configuration directory, +or, if that fails, in the directory in which the configure script +is located. + +

      +Configuration files are just shell scripts that define +shell variables that control the configuration process. +For example, the following file might be used on a BSDI system to +configure the software for installation in the /usr/contrib area. + +

      +#
      +# Parameters suitable for BSDI 1.1
      +#
      +DIR_BIN="/usr/contrib/bin"		# directory for client apps
      +DIR_LIB="/usr/contrib/lib"		# directory for libraries
      +DIR_MAN="/usr/contrib/man"		# directory for manual pages
      +
      + +

      +For a complete list of the possible configuration parameters look +at the sample config.site file provided in the distribution; the +section below describes some of the more important parameters. + +


      Configuring Optional Packages/Support

      + +The TIFF software comes with several packages that are installed only +as needed, or only if specifically configured at the time +the configure script is run. Packages can be configured in a +config.site or config.local file, or by using a +-with-<PACKAGE> option when invoking configure; +e.g. configure -with-AFM. + +
      +
      DSO Support +
      The DSO support controls whether or not to +configure the software +to build a Dynamic Shared Object for the TIFF library. +Use of DSOs can significantly reduce the disk space needed for +users of the TIFF software. +If DSOs are not used then the code is statically linked into +each application that uses it. +By default this support is configured only if the system appears +to suport DSOs in a way that fits into the normal build scheme +(auto). +If DSO support is explicitly enabled and there is no +support for using DSOs in the expected way then DSOs are not used. + +

      +

      JPEG Support +
      The JPEG package enables support for the handling +of TIFF images with JPEG-encoded data. +Support for JPEG-encoded data requires the Independent JPEG Group (IJG) +libjpeg distribution; this software is available at +ftp.uu.net:/graphics/jpeg/. +If JPEG support is enabled the DIRS_LIBINC and DIR_JPEGLIB +parameters should also be set (see below). +By default JPEG support is not configured. + +

      +

      ZIP Support +
      The ZIP support enables support for the handling +of TIFF images with deflate-encoded data. +Support for deflate-encoded data requires the freely available +zlib distribution written by Jean-loup Gailly and Mark Adler; +this software is available at +ftp.uu.net:/pub/archiving/zip/zlib/ +(or try quest.jpl.nasa.gov:/beta/zlib/). +If ZIP support is enabled the DIRS_LIBINC and DIR_GZLIB +parameters should also be set (see below). +By default this package is not configured. + +
      + +


      A Sample Configuration Session

      + +This section shows a sample configuration session and describes +the work done. The session is shown indented in a fixed width +font with user-supplied input in a bold font. +Comments are shown in a normal or italic font. +This session was collected on a 486 machine running BSDI 1.1. + +
        
        +wullbrandt% mkdir tiff
        +wullbrandt% cd tiff
        +wullbrandt% ln -s /hosts/oxford/usr/people/sam/tiff src
        +
      + +A build tree separate from the source tree is used here. +In fact, in this case the distribution is accessed from +a read-only NFS-mounted filesystem. + +
        
        +wullbrandt% src/configure
        +Configuring TIFF Software v3.4beta015.
        +
        +Reading site-wide parameters from ../tiff-v3.4beta015/config.site.
        +Reading local parameters from config.local.
        +Gosh, aren't you lucky to have a i386-unknown-bsdi1.1 system!
        +
      + +Note that configure announces the distribution version and the +deduced target configuration (i386-unknown-bsdi1.1 here). + +
        
        +Using /usr/local/bin/gcc for a C compiler (set CC to override).
        +Looks like /usr/local/bin/gcc supports the -g option.
        +Using " -g" for C compiler options.
        +
      + +configure checked the normal shell search path for potential +ANSI C compilers. The compiler is selected according to it properly +compiling a small ANSI C test program. A specific compiler may be requested +by setting the CC environment variable to the appropriate +pathname, by supplying the parameter on the command line, e.g. +-with-CC=gcc, or by setting CC in a configuration +file. + +

      + +Note that an ANSI C compiler is required to build the software. +If a C compiler requires options to enable ANSI C compilation, they +can be specified with the ENVOPTS parameter. + +

      +Once a compiler is selected configure checks to see +if the compiler accepts a -g option to enable the generation + of debugging symbols, and +if the compiler includes an ANSI C preprocessor. + +

        
        +Using /usr/ucb/make to configure the software.
        +
      + +Next various system-specific libraries that may or may not be needed +are checked for (none are needed in this case). +If your system requires a library that is not +automatically included it can be specified by setting the +MACHDEPLIBS parameter. + +

      Creating port.h. +The port.h file is included by all the C code +in the library (but not the tools). +It includes definitions for functions and type +definitions that are missing from system include files, #defines +to enable or disable system-specific functionality, and other +odds and ends. + +

        
        +Creating libtiff/port.h with necessary definitions.
        +... using LSB2MSB bit order for your i386 cpu
        +... using big-endian byte order for your i386 cpu
        +... configure use of mmap for memory-mapped files
        +... O_RDONLY is in <fcntl.h>
        +... using double for promoted floating point parameters
        +... enabling use of inline functions
        +Done creating libtiff/port.h.
        +
      + +This file can take a long time to create so configure +generates the file only when it is needed, either because the +file does not exist or because a different target or compiler +is to be used. +Note that running "make distclean" in the top-level directory +of the build tree will remove the port.h file (along +with all the other files generated by configure). + +

      Selecting emulated library functions. +Certain library functions used by the tools are not present on all systems +and can be emulated using other system functionality. +configure checks for the presence of such functions and if they are +missing, will configure emulation code from the port directory +to use instead. Building the TIFF +software on unsupported systems may require +adding to the code to the port directory. + +

        
        +Checking system libraries for functionality to emulate.
        +Done checking system libraries.
        +
      + +If a routine must be emulated and configure does not automatically +check for it, the routine name can be specified using the PORTFUNCS +parameter. To add emulation support for a new function foo, +create a file port/foo.c that contains the emulation code +and then set PORTFUNCS=foo in a configuration file or modify +the configure script to automatically check for the missing function. + +
        
        +Checking for Dynamic Shared Object (DSO) support.
        +Done checking for DSO support.
        +
      + +If the DSO package is enabled (DSO=auto or +DSO=yes), then +configure will verify the system and compiler are capable of +constructing SVR4-style DSO's in the expected way. Note that +while a system may support DSO's the compiler may not be +capable of generating the required position-independent +code and/or the compiler may not pass the needed options +through to the loader. + +

      Selecting utility programs. +configure locates various system utility programs that are +used during installation of the software. + +

        
        +Selecting programs used during installation.
        +Looks like mv supports the -f option to force a move.
        +Looks like /bin/ln supports the -s option to create a symbolic link.
        +Done selecting programs.
        +
      + +

      Selecting default configuration parameters. +The remainder of the work done by configure involves setting up +configuration parameters that control the placement and +setup of files during the installation procedure. + +

        
        +Selecting default TIFF configuration parameters.
        +
        +Looks like manual pages go in /usr/contrib/man.
        +Looks like manual pages should be installed with bsd-nroff-gzip-0.gz.
        +
        +TIFF configuration parameters are:
        +
        +[ 1] Directory for tools:               /usr/contrib/bin
        +[ 2] Directory for libraries:           /usr/contrib/lib
        +[ 3] Directory for include files:       /usr/contrib/include
        +[ 4] Directory for manual pages:        /usr/contrib/man
        +[ 5] Manual page installation scheme:   bsd-nroff-gzip-0.gz
        +
        +Are these ok [yes]? 
        +
      + + + +At this point you can interactively modify any of the +displayed parameters. Hitting a carriage return or typing +yes will accept the current parameters. Typing one +of the number displayed along the left hand side causes +configure to prompt for a new value of the specified parameter. +Typing anything else causes configure to prompt for a new +value for each parameter. +In general hitting carriage return will accept the current +value and typing anything that is unacceptable will cause a +help message to be displayed. +A description of each of the configuration parameters is given below. + +

      +Once acceptable parameters are setup configure will generate +all the files that depend on these parameters. Note that certain +files may or may not be created based on the configuration of +optional packages and/or the functions supported by target system. + +

        
        +Creating Makefile from ../tiff-v3.4beta015/Makefile.in
        +Creating libtiff/Makefile from ../tiff-v3.4beta015/libtiff/Makefile.in
        +Creating man/Makefile from ../tiff-v3.4beta015/man/Makefile.in
        +Creating tools/Makefile from ../tiff-v3.4beta015/tools/Makefile.in
        +Creating port/install.sh from ../tiff-v3.4beta015/port/install.sh.in
        +Done.
        +
      + +


      Shared Library Support

      + +It is desirable to make the TIFF library be a shared object +on systems that have support for shared libraries. +Unfortunately the rules to use to build a shared library +vary between operating systems and even compilers. +The distributed software includes support for building a shared +version of the library on a number of different systems. +This support is split between rules in the file +libtiff/Makefile.in that construct the shared library +and checks done by the configure script to verify that +the expected rules are supported by compilation tools for +the target system. + +

      +To add new support for building a shared library both these files +must be updated. +In the configure script search for the section where the autoconfiguration +setting of the DSO parameter is handled and +add a new case for the target system that sets the +DSOSUF, +DSOLD, +DSOOPTS, +and +LIBCOPTS +options as appropriate for the system. +DSOSUF specifies the filename suffix used for the shared +library (e.g. ``.so'' for Dynamic Shared Objects on most SVR4-based +systems). +DSOLD specifies the program to use to build the shared library +from a compiled object file; typically ``${LD}'' though on some systems +it is better to use the C compiler directly so system-dependent options and +libraries are automatically supplied. +DSOOPTS are options that must be specified to DSOLD +when building the shared library. +LIBCOPTS are options to pass to the C compiler when constructing +a relocatable object file to include in a shared library; e.g. ``-K PIC'' +on a Sun system. +The DSO parameter must also be set to a unique label that identifies +the target system and compilation tools. +This label is used to select +a target in libtiff/Makefile.in to do the actual work in building +the shared library. +Finally, to complete support for the shared library added the appropriate +rules to libtiff/Makefile.in under the target specified in the +configure script. + + + + +


      Configuration Parameters

      + +This section gives a brief description of the less obvious +configuration parameters. Consult the distributed config.site +for a complete list of parameters. +The list here is sorted alphabetically. + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      AROPTSThe options passed to ar when creating an archive. +Note that configure will automatically check to see if ar +supports an s to create a symbol table instead of +using ranlib.
      DIR_BINThe directory where client applications should be installed; by +default this is /usr/local/bin.
      DIR_GZLIBThe pathname of the directory containing the zlib library +(when ZIP or PixarLog compression support is enabled); +e.g. ``../src/zlib''.
      DIR_JPEGLIBThe pathname of the directory containing the JPEG library +(when JPEG support is enabled); e.g. ``/usr/local/lib''.
      DIR_LIBThe directory to install libraries and DSO's; by default +this is /usr/local/lib.
      DIR_MANThe top-most directory of the manual area where manual +pages should be installed.
      DIRS_LIBINCA space-separated list of directories in which to search for +include files when building the library and tools. +If JPEG or ZIP support is configured this parameter should include +the directories where the associated include files are located.
      DIST_ALPHAThe alpha version number for the distribution; e.g. if this +is version 3.4beta031 then the the major number is 31.
      DIST_MAJORThe major version number for the distribution; e.g. if this +is version 3.4beta031 then the the major number is 3.
      DIST_MINORThe minor version number for the distribution; e.g. if this +is version 3.4beta031 then the the major number is 4.
      DSOSUFWhen DSO's are built, the filename suffix for a DSO. +If this is set to "a" then statically linked archives are used.
      DSOSUF_VERSIONWhen DSO's are built, a version-specific filename suffix for a DSO. +If this is set to something other than the value of DSO then +the file libtiff.DSOSUF_VERSION will be installed and +a link to it named libtiff.DSOSUF will automatically +be created. (Note that this means that rule for building the target +DSO must generate a file named libtiff.DSOSUF_VERSION.)
      ENVOPTSOptions to pass to CC to force ANSI C compilation.
      FILLORDERThe order of bits in a byte on the server machine; +either LSB2MSB or MSB2LSB. +This is normally selected according to the target system.
      GCOPTSSpecial options to pass the C compiler. If this parameter +is set, then configure may append other options to this list.
      INSTALLThe pathname of the install program to use. Note that this program +must emulate the command line interface used by the IRIX install program.
      LIBPORTThe pathname of the library that holds code to emulate missing +system functionality. +Normally this parameter is set by configure based on whether or +not emulation code is required for the target. +
      LLDOPTS +Extra command line options passed to CC +when linking an executable. +This option is usually set only when DSO support is enabled +(to force the executable to search for the TIFF DSO +in non-standard locations in the filesystem.)
      MACHDEPLIBSTarget-dependent libraries that should be used when linking +tools. +Note that if this parameter is specified configure will append to +the list of libraries.
      MANSCHEMEThe scheme to use when preparing and installing manual pages. +Schemes are constructed according to: +
        +<organization>-<formatting>-<compression>[-<suffix>] +
      +where: +<organization> is either bsd +for BSD-style section organization (e.g. file formats in +section 5) or sysv for System V-style +organization (e.g. file formats in section 4). +<formatting> is either nroff to force +installation of formatted materials (using nroff) or +source to get the nroff source installed. +<compression> is either the name of a program +to compress the manual pages (gipz, compress, pack) or +cat for uncompressed data. +<suffix> is either the file suffix to convert +installed pages to (e.g. 0.gz for gzip-compressed pages under BSD) +or strip to force the normal ".4f" suffix to be converted to ".4" +(or ".5" if using the BSD organization). If no -<suffix> +is specified then filenames are not converted when they are installed.
      PORTFUNCSA list of non-standard functions that should be emulated. +Normally this list is constructed by configure based on checks it does. +If this parameter is set, configure will append to the specified list.
      SETMAKEIf make does not automatically set $MAKE to +the name of the make program to invoke for subdirectories, then +configure will create an explicit definition. +If this parameter is set, then it will be used instead. +by default bin is used.
      + + +


      Building the Software under Windows 95/98/NT/2000 with MS VC++

      + +With Microsoft Visual C++ installed, and properly configured for commandline +use (you will likely need to source VCVARS32.BAT in AUTOEXEC.bAT or somewhere +similar) you should be able to use the provided makefile.vc.

      + +

      +C:\LIBTIFF\LIBTIFF> nmake /f makefile.vc
      +C:\LIBTIFF\LIBTIFF> cd ..\tools
      +C:\LIBTIFF\TOOLS> nmake /f makefile.vc
      +
      + +This will build the library file LIBTIFF\LIBTIFF\LIBTIFF.LIB. This +can be used in Win32 programs. If used in a project using the /MD compiler +switch (using the runtime C library), it may be necessary to modify the +CFLAGS macro in makefile.vc to correspond.

      + +The makefile also builds a DLL (libtiff.dll) with an associated import +library (libtiff_i.lib). Any builds using libtiff will need to include +the LIBTIFF\LIBTIFF directory in the include path.

      + +The libtiff\tools\makefile.vc should build .exe's for all the +standard TIFF tool programs.

      + +NOTE: The contents of the contrib/win32 directory should no longer be +needed, and are kept in the distribution temporarily.

      + +


      Building the Software under MS/DOS with the DJGPP v2 compiler

      + +[From the file contrib/dosdjgpp/README.] + +

      +The directory contrib/dosdjgpp +contains the files necessary to build the library and tools +with the DJGPP v2 compiler under MSDOS. + +

      +All you have to do is copy the files in the directory +into the respective directories and run +make. If you want, you can use the conf.bat script +to do that for you, make sure that +the file is stored with MSDOS text EOL-convention (CR/LF), otherwise the +command.com will not do anything. + +

      +Note that you probably will not be able to build the library with the v1.x +versions of djgpp, due to two problems. First, the top makefile calls a +sub-make for each directory and you are likely to run out of memory, since +each recursive invocation of a djgpp v1.x program requires about 130k, to +avoid that, you can enter the directories manually and call make (well, there +are only two dirs). The 2nd problem is that djgpp 1.x doesn't call the +coff2exe (stubify) program when creating an executable. This means that all +programs compiled are not converted to exe and consequently are not available +for calling directly. For the tools directory, you can just call coff2exe for +each program after make finishes, but in the libtiff directory, a few programs +are created during the make process that have to be called for make to +continue (e.g. mkg3states). Make will probably report an error at each +such stage. To fix that, either add a coff2exe call before each program is +called or call coff2exe manually and rerun make (there 2-3 such programs). + + +


      Building the Software on a Macintosh with MPW

      + +The directory contrib/mac-mpw contains support for +compiling the library and tools under the MPW Shell on a +Macintosh system. +This support was contributed by Niles Ritter +(ndr@tazboy.jpl.nasa.gov). + +

      +[From the file contrib/mac-mpw/README.] + +

      +This directory contains all of the utilities and makefile source +to build the LIBTIFF library and tools from the MPW Shell. The +file BUILD.mpw in this directory is an executable script +which uses all of these files to create the MPW makefiles and +run them. + +

      +The .make files are not MPW makefiles as such, +but are when run through the "mactrans" program, which turns +the ascii "%nn" metacharacters into the standard weird MPW +make characters. + +

      +This translation trick is necessary to protect the files when +they are put into unix tarfiles, which tend to mangle the +special characters. + + + +


      Building the Software on a Macintosh with CodeWarrior

      + +The directory contrib/mac-cw contains support for +compiling the library and tools with MetroWerks CodeWarrior 6.1 +on a Macintosh system. +This support was contributed by Niles Ritter +(ndr@tazboy.jpl.nasa.gov). + +

      +[From the file contrib/mac-cw/README.] + +In this directory you will find a Makefile.script Applescript +file, which should be run in order to build the libtiff code +using MetroWerks CodeWarrior. + +Refer to the "metrowerks.note" instructions on building the +library for 68k and PowerPC native code, as well as building +some of the libtiff tools, which are rather unix-like, but +at least give an example of how to link everything together. + + + +


      Building the Software on a VMS System

      + +The VMS port was done by Karsten Spang +(krs@kampsax.dk), who also +"sort of" maintains it. +The VMS specific files are not in the main directories. Instead they +are placed under [.CONTRIB.VMS...] in the distribution tree. + +Installation: + +It is assumed that you have unpacked the tar file into a VMS directory +tree, in this text called DISK:[TIFF]. + +
        +
      1. Move the VMS specific files to their proper directories. +
        +$ SET DEFAULT DISK:[TIFF.CONTRIB.VMS]
        +$ RENAME [.LIBTIFF]*.* [-.-.LIBTIFF]
        +$ RENAME [.TOOLS]*.* [-.-.TOOLS]
        +
        +
      2. Compile the library. +
        +$ SET DEFAULT DISK:[TIFF.LIBTIFF]
        +$ @MAKEVMS
        +
        +
      3. Compile the tools. +
        +$ SET DEFAULT DISK:[TIFF.TOOLS]
        +$ @MAKEVMS
        +
        +
      4. Define the programs. +
        +$ DEFINE TIFFSHR DISK:[TIFF.LIBTIFF]TIFFSHR
        +$ FAX2PS    :==$DISK:[TIFF.TOOLS]FAX2PS
        +$ FAX2TIFF  :==$DISK:[TIFF.TOOLS]FAX2TIFF
        +$ GIF2TIFF  :==$DISK:[TIFF.TOOLS]GIF2TIFF
        +$ PAL2RGB   :==$DISK:[TIFF.TOOLS]PAL2RGB
        +$ PPM2TIFF  :==$DISK:[TIFF.TOOLS]PPM2TIFF
        +$ RAS2TIFF  :==$DISK:[TIFF.TOOLS]RAS2TIFF
        +$ RGB2YCBCR :==$DISK:[TIFF.TOOLS]RGB2YCBCR
        +$ THUMBNAIL :==$DISK:[TIFF.TOOLS]THUMBNAIL
        +$ TIFF2BW   :==$DISK:[TIFF.TOOLS]TIFF2BW
        +$ TIFF2PS   :==$DISK:[TIFF.TOOLS]TIFF2PS
        +$ TIFFCMP   :==$DISK:[TIFF.TOOLS]TIFFCMP
        +$ TIFFCP    :==$DISK:[TIFF.TOOLS]TIFFCP
        +$ TIFFDITHER:==$DISK:[TIFF.TOOLS]TIFFDITHER
        +$ TIFFDUMP  :==$DISK:[TIFF.TOOLS]TIFFDUMP
        +$ TIFFINFO  :==$DISK:[TIFF.TOOLS]TIFFINFO
        +$ TIFFMEDIAN:==$DISK:[TIFF.TOOLS]TIFFMEDIAN
        +$ TIFFSPLIT :==$DISK:[TIFF.TOOLS]TIFFSPLIT
        +$ YCBCR     :==$DISK:[TIFF.TOOLS]YCBCR
        +
        +
      + +You will want to add these lines to your LOGIN.COM +file, after changing +the name of the directory that you have used on your machine. + +

      +This release has been tested on OpenVMS/VAX 5.5-2, using VAX C 3.2. +A previous release was tested under OpenVMS/AXP ?.? using DEC C ?.?, it is +believed that this release as well works on AXP. +The code contains some GNU C specific things. This does *not* imply, +however, that the VAX/GCC configuration has been tested, *it has not*. + +

      +The command procedures (MAKEVMS.COM) for building the +library and tools, +is believed to choose the correct options for the VAX and AXP cases +automatically. + +

      +On the AXP, IEEE floating point is used by default. If you want VAX +floating point, remove the /FLOAT=IEEE_FLOAT qualifier, and change +HAVE_IEEEFP=1 to HAVE_IEEEFP=0 in the MAKEVMS.COM +files in both the libtiff and tools directories. + + +

      Compiling your own program on a VMS system:

      + +When compiling a source file in which you +"#include ", use the +following command +
      +    $ CC/INCLUDE=DISK:[TIFF.LIBTIFF]
      +
      +This ensures that the header file is found. +On the AXP, also add /FLOAT=IEEE_FLOAT +(if used when building the library). + + +

      Linking your own program to the TIFF library on a VMS system:

      + +You can link to the library in two ways: Either using the shareable +library, or using the object library. +On the VAX these possibilities are: + +
        +
      1. Using the shareable TIFF library. +
        +$ LINK MY_PROGRAM,DISK:[TIFF.LIBTIFF]TIFF/OPTIONS,SYS$INPUT:/OPTIONS
        +    SYS$SHARE:VAXCRTL/SHAREABLE
        +
        +
      2. Using the TIFF object library. +
        +$ LINK MY_PROGRAM, -
        +    DISK:[TIFF.LIBTIFF]TIFF/LIBRARY/INCLUDE=(TIF_FAX3SM,TIF_CODEC), -
        +    SYS$INPUT:/OPTIONS
        +    SYS$SHARE:VAXCRTL/SHAREABLE
        +
        +
      + +On AXP (and possibly also using DEC C on VAX) the corresponding commands are +
        +
      1. Using the shareable TIFF library. +
        +$ LINK MY_PROGRAM,DISK:[TIFF.LIBTIFF]TIFF/OPTIONS
        +
        +
      2. Using the TIFF object library. +
        +$ LINK MY_PROGRAM,DISK:[TIFF.LIBTIFF]TIFF/LIBRARY
        +
        +
      + +Method 1 uses the shortest link time and smallest .EXE +files, but it +requires that TIFFSHR is defined as above at link time and +at run time. +Using the compilation procedure above, the tools are linked in this way. + +

      +Method 2 gives somewhat longer link time and larger .EXE +files, but does +not require TIFFSHR to be defined. This method is recommended if you +want to run your program on another machine, and for some reason don't +want to have the library on that machine. If you plan to have more than +one program (including the tools) on the machine, it is recommended that +you copy the library to the other machine and use method 1. + + + +


      Building the Software on an Acorn RISC OS system

      + +The directory contrib/acorn contains support for compiling the library +under Acorn C/C++ under Acorn's RISC OS 3.10 or above. Subsequent pathnames +will use the Acorn format: The full-stop or period character is a pathname +delimeter, and the slash character is not interpreted; the reverse position +from Unix. Thus "libtiff/tif_acorn.c" becomes "libtiff.tif_acorn/c". + +

      +This support was contributed by Peter Greenham. (peter@enlarion.demon.co.uk). + +

      +

      Installing LibTIFF:

      + +

      +LIBTIFF uses several files which have names longer than the normal RISC OS +maximum of ten characters. This complicates matters. Maybe one day Acorn will +address the problem and implement long filenames properly. Until then this +gets messy, especially as I'm trying to do this with obeyfiles and not have +to include binaries in this distribution. + +

      +First of all, ensure you have Truncate configured on (type *Configure +Truncate On) + +

      +Although it is, of course, preferable to have long filenames, LIBTIFF can be +installed with short filenames, and it will compile and link without +problems. However, getting it there is more problematic. +contrib.acorn.install is an installation obeyfile which will create a normal +Acorn-style library from the source (ie: with c, h and o folders etc.), but +needs the distribution library to have been unpacked into a location which is +capable of supporting long filenames, even if only temporarily. + +

      +My recommendation, until Acorn address this problem properly, is to use Jason +Tribbeck's LongFilenames, or any other +working system that gives you long filenames, like a nearby NFS server for +instance. + +

      +If you are using Longfilenames, even if only temporarily to install LIBTIFF, +unpack the TAR into a RAMDisc which has been longfilenamed (ie: *addlongfs +ram) and then install from there to the hard disk. Unfortunately +Longfilenames seems a bit unhappy about copying a bunch of long-named files +across the same filing system, but is happy going between systems. You'll +need to create a ramdisk of about 2Mb. + +

      +Now you can run the installation script I've supplied (in contrib.acorn), +which will automate the process of installing LIBTIFF as an Acorn-style +library. The syntax is as follows: + +

      +install <source_dir> <dest_dir> + +

      +Install will then create <dest_dir> and put the library in there. For +example, having used LongFilenames on the RAMDisk and unpacked the library +into there, you can then type: + +

      +Obey RAM::RamDisc0.$.contrib.acorn.install RAM::RamDisc0.$ ADFS::4.$.LIBTIFF +

      + +It doesn't matter if the destination location can cope with long filenames or +not. The filenames will be truncated if necessary (*Configure Truncate On if +you get errors) and all will be well. + +

      +

      Compiling LibTIFF:

      + +

      +Once the LibTIFF folder has been created and the files put inside, making the +library should be just a matter of running 'SetVars' to set the +appropriate system variables, then running 'Makefile'. + +

      +OSLib + +

      +OSLib +is a comprehensive API for RISC OS machines, written by Jonathan Coxhead of +Acorn Computers (although OSLib is not an official Acorn product). Using the +OSLib SWI veneers produces code which is more compact and more efficient than +code written using _kernel_swi or _swi. The Acorn port of LibTIFF can take +advantage of this if present. Edit the Makefile and go to the Static +dependencies section. The first entry is: + +

      +# Static dependencies:
      +@.o.tif_acorn:   @.c.tif_acorn
      +	cc $(ccflags) -o @.o.tif_acorn @.c.tif_acorn 
      +
      +

      +Change the cc line to: +

      +	cc $(ccflags) -DINCLUDE_OSLIB -o @.o.tif_acorn @.c.tif_acorn 
      +
      +

      +Remember, however, that OSLib is only recommended for efficiency's +sake. It is not required. + + + +


      Building the Software on Other Systems

      + +This section contains information that might be useful +if you are working on a non-UNIX system that is not directly supported. +All library-related files described below are located in the libtiff +directory. + +

      +The library requires two files that are generated on-the-fly. +The file tif_fax3sm.c has the state tables for the +Group 3 and Group 4 decoders. +This file is generated by the mkg3states program +on a UNIX system; for example, + +

        
        +cd libtiff
        +cc -o mkg3states mkg3states.c
        +rm -f tif_fax3sm.c
        +./mkg3states -c const tif_fax3sm.c
        +
      + +The -c option can be used to control whether or not the +resutling tables are generated with a const declaration. +The -s option can be used to specify a C storage class +for the table declarations. +The -b option can be used to force data values to be +explicitly bracketed with ``{}'' (apparently needed for some +MS-Windows compilers); otherwise the structures are emitted in +as compact a format as possible. +Consult the source code for this program if you have questions. + +

      +The second file required to build the library, version.h, +contains the version +information returned by the TIFFGetVersion routine. +This file is built on most systems using the +mkversion program and the contents of the +VERSION and tiff.alpha files; for example, + +

        +cd libtiff
        +cc -o mkversion mkversion.c
        +rm -f version.h
        +./mkversion -v ../VERSION -a ../dist/tiff.alpha version.h
        +
      + +

      +Otherwise, when building the library on a non-UNIX system be sure to +consult the files tiffcomp.h and tiffconf.h. +The former contains system compatibility definitions while the latter +is provided so that the software configuration can be controlled +on systems that do not support the make facility for building +the software. + +

      +Systems without a 32-bit compiler may not be able to handle some +of the codecs in the library; especially the Group 3 and 4 decoder. +If you encounter problems try disabling support for a particular +codec; consult the documentation. + +

      +Programs in the tools directory are written to assume an ANSI C +compilation environment. +There may be a few POSIX'isms as well. +The code in the port directory is provided to emulate routines +that may be missing on some systems. +On UNIX systems the configure script automatically figures +out which routines are not present on a system and enables the use +of the equivalent emulation routines from the port directory. +It may be necessary to manually do this work on a non-UNIX system. + + +


      Checking out the Software

      + +

      +Assuming you have working versions of tiffgt and tiffsv, +you can just +use them to view any of the sample images available for testing +(see the section on obtaining the test images). +Otherwise, you can do a cursory check of the library with +the tiffcp and tiffcmp programs. For example, + +

        +tiffcp -lzw cramps.tif x.tif
        +tiffcmp cramps.tif x.tif
        +
      + +

      +(tiffcmp should be silent if the files compare correctly). + + + +


      Table of Contents

      + +The following files makup the core library: + +
      +libtiff/tiff.h			TIFF spec definitions
      +libtiff/tiffcomp.h		non-UNIX OS-compatibility definitions
      +libtiff/tiffconf.h		non-UNIX configuration definitions
      +libtiff/tiffio.h		public TIFF library definitions
      +libtiff/tiffiop.h		private TIFF library definitions
      +libtiff/t4.h			CCITT Group 3/4 code tables+definitions
      +libtiff/tif_dir.h		private defs for TIFF directory handling
      +libtiff/tif_fax3.h		CCITT Group 3/4-related definitions
      +libtiff/tif_predict.h		private defs for Predictor tag support
      +libtiff/uvcode.h		LogL/LogLuv codec-specific definitions
      +libtiff/version.h		version string (generated by Makefile)
      +
      +libtiff/tif_acorn.c		Acorn-related OS support
      +libtiff/tif_apple.c		Apple-related OS support
      +libtiff/tif_atari.c		Atari-related OS support
      +libtiff/tif_aux.c		auxilary directory-related functions
      +libtiff/tif_close.c		close an open TIFF file
      +libtiff/tif_codec.c		configuration table of builtin codecs
      +libtiff/tif_compress.c		compression scheme support
      +libtiff/tif_dir.c		directory tag interface code
      +libtiff/tif_dirinfo.c		directory known tag support code
      +libtiff/tif_dirread.c		directory reading code
      +libtiff/tif_dirwrite.c		directory writing code
      +libtiff/tif_dumpmode.c		"no" compression codec
      +libtiff/tif_error.c		library error handler
      +libtiff/tif_fax3.c		CCITT Group 3 and 4 codec
      +libtiff/tif_fax3sm.c		G3/G4 state tables (generated by mkg3states)
      +libtiff/tif_flush.c		i/o and directory state flushing
      +libtiff/tif_getimage.c		TIFFRGBAImage support
      +libtiff/tif_jpeg.c		JPEG codec (interface to the IJG distribution)
      +libtiff/tif_luv.c		SGI LogL/LogLuv codec
      +libtiff/tif_lzw.c		LZW codec
      +libtiff/tif_msdos.c		MSDOS-related OS support
      +libtiff/tif_next.c		NeXT 2-bit scheme codec (decoding only)
      +libtiff/tif_open.c		open and simply query code
      +libtiff/tif_packbits.c		Packbits codec
      +libtiff/tif_pixarlog.c		Pixar codec
      +libtiff/tif_predict.c		Predictor tag support
      +libtiff/tif_print.c		directory printing support
      +libtiff/tif_read.c		image data reading support
      +libtiff/tif_strip.c		some strip-related code
      +libtiff/tif_swab.c		byte and bit swapping support
      +libtiff/tif_thunder.c		Thunderscan codec (decoding only)
      +libtiff/tif_tile.c		some tile-related code
      +libtiff/tif_unix.c		UNIX-related OS support
      +libtiff/tif_version.c		library version support
      +libtiff/tif_vms.c		VMS-related OS support
      +libtiff/tif_warning.c		library warning handler
      +libtiff/tif_win3.c		Windows-3.1-related OS support
      +libtiff/tif_win32.c		Win32 (95/98/NT) related OS support
      +libtiff/tif_write.c		image data writing support
      +libtiff/tif_zip.c		Deflate codec
      +
      +libtiff/mkg3states.c		program to generate G3/G4 decoder state tables
      +libtiff/mkspans.c		program to generate black-white span tables
      +libtiff/mkversion.c		program to generate libtiff/version.h.
      +
      + +

      +


      + +Last updated: $Date: 2000/06/24 19:10:16 $ + + + diff --git a/html/contrib.html b/html/contrib.html new file mode 100755 index 0000000..070cb8b --- /dev/null +++ b/html/contrib.html @@ -0,0 +1,158 @@ + + + +Contributed TIFF Software + + + + + +

      + +Contributed TIFF Software +

      + + +

      +The contrib directory has contributed software that +uses the TIFF library or which is associated with the library +(typically glue and guidance for ports to non-UNIX platforms, or tools that +aren't directly TIFF related). + +
      + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +contrib/vms + +scripts and files from Karsten Spang for building + the library and tools under VMS +
      +contrib/dbs + +various tools from Dan & Chris Sears, including a simple X-based viewer +
      +contrib/ras + +two programs by Patrick Naughton for converting + between Sun rasterfile format and TIFF (these + require libpixrect.a, as opposed to the one in + tools that doesn't) +
      +contrib/mac-mpw + +scripts and files from Niles Ritter for building + the library and tools under Macintosh/MPW C. +
      +contrib/acorn + +scripts and files from Peter Greenham for building + the library and tools on an Acorn RISC OS system. +
      +contrib/win32 + +scripts and files from Scott Wagner for building + the library under Windows NT and Windows 95. +
      +contrib/dosdjgpp + +scripts and files from Alexander Lehmann for building + the library under MSDOS with the DJGPP v2 compiler. +
      +contrib/tags + +scripts and files from Niles Ritter for adding private + tag support at runtime, without changing libtiff. +
      +contrib/mfs + +code from Mike Johnson to read+write images in memory +without modifying the library +
      +contrib/pds + +various routines from Conrad Poelman; a TIFF image iterator and + code to support ``private sub-directories'' +
      +contrib/iptcutil + + +A utility by Bill Radcliffe to +convert an extracted IPTC Newsphoto caption from a binary blob to +ASCII text, and vice versa. IPTC binary blobs can be extracted from +images via the ImageMagick convert(1) +utility. + + +
      + +

      +Questions regarding these packages are usually best directed toward +their authors. + +

      +


      + +Last updated: $Date: 2000/06/24 19:10:16 $ + + + diff --git a/html/document.html b/html/document.html new file mode 100755 index 0000000..a232a47 --- /dev/null +++ b/html/document.html @@ -0,0 +1,50 @@ + + + +TIFF Documentation + + + + +

      + +TIFF Documentation +

      + +

      +A copy of the 6.0 specification is available by public ftp at + +

      + +This is a PostScript version of the final 6.0 specification compressed +with the standard UNIX compress(1) program. +An uncompressed PostScript file is also available as TIFF6.ps in +the same directory. + +
      + +

      +Adobe provides the 6.0 spec online in +Acrobat format (PDF); this can be found at + +

      + +TIFF Technical Notes can be retrieved from + + + +

      +


      + +
      +Last updated: $Date: 2000/06/24 19:10:16 $ +
      + + + diff --git a/html/images.html b/html/images.html new file mode 100755 index 0000000..93998a4 --- /dev/null +++ b/html/images.html @@ -0,0 +1,40 @@ + + + +TIFF Test Images + + + + +

      + +TIFF Test Images +

      + +

      +Test images are available for most formats supported by the library. +Most of the images included in the test kit are also part of this +documentation (albeit in TIFF rather than GIF or JFIF). +The images are kept in a separate archive that should be located in +the same directory as this software. + +
      + +

      +The latest archive of test images is located at +ftp://ftp.onshore.com/pub/libtiff/v3.4pics.tar.Z + +

      +There are two other good sources for TIFF test images: +the contributed software contrib/dbs includes several +programs that generate test images suitable for debugging, and +the tiffcp program can be used to generate a variety +of images with different storage characteristics. + +

      +


      + +Last updated: $Date: 2000/06/24 19:10:16 $ + + + diff --git a/html/images/back.gif b/html/images/back.gif new file mode 100755 index 0000000000000000000000000000000000000000..11d0c35f4671f6086d992776c7521efef880e914 GIT binary patch literal 1000 zcmW-gKWN_t5XGNTq-cg9Ar)LgJSnMm(7^~n2LtBPLMf#uf;dDfV&p`m?p24{>frr~ zj#5jgaPU*9dUG`BP%BCY|D16tMMZQGTts+&^S$x7d+*@$Zf*VXhnF|zFo)l;R{|*D zKmY|az_BX=6}TV-C1?T1QBkPE6`?3aD>&|pLmlo2M>*QTQB(pN@IVAA&;gE4QqY1I zqELk{aI}|(HoOsyYIK9+O+qN)L=Z(Z!M#IGU@LiP$p$s=4DY6KAgm0ih7bV{dodS`T2XLqs_Okpb1nZYb( zGszsnGUQ^2z(9KdJ1`t@4P+n`p$c6X!Vi zYS4obtY8N@CP0c>^kNjN*hP-9kft`h8O>^TlVer}|G{cd9R!Bip*__7dmpg(3)ue+ z{`%?P<&PIWfBm*QCRcvQ_jk_D-re{7^Y*1LpE$5IdH%T<-kiQMyY%RPYggxYE=-Tt zV;7%2x^lkeUpuY0-@1Qh@!;j%bCZqx7M34)dH2SJUv~~~UpzCre*NaL6DN*MCi`aY z+V|G&fhqGaP`COGkWCYXVa~7tKVMnqX(W`jHzDUmFbH=%iJrQ z1LZ>t>ys`0;;DyTI`ZK5rN3{kZ~ne^_SDw3(?5Rt!L|36Hm>f@T>tabcaN-07FRdF R{^R?Pp8n+BUk)u`<$t1E;KBd^ literal 0 HcmV?d00001 diff --git a/html/images/bali.jpg b/html/images/bali.jpg new file mode 100755 index 0000000000000000000000000000000000000000..1f5c146dd5ed78b6f0f227773214b78aecd57c81 GIT binary patch literal 26152 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 MpU}Qe9|!pSAJtj5%m4rY literal 0 HcmV?d00001 diff --git a/html/images/cover.jpg b/html/images/cover.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8698cfb064736d498501de801fcd727b8952bd3c GIT binary patch literal 20189 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 literal 0 HcmV?d00001 diff --git a/html/images/dave.gif b/html/images/dave.gif new file mode 100755 index 0000000000000000000000000000000000000000..c36d447772a630e171de8e8fad5e7ce2cc1cf98e GIT binary patch literal 8220 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 HK=1zmtoJ7? literal 0 HcmV?d00001 diff --git a/html/images/info.gif b/html/images/info.gif new file mode 100755 index 0000000000000000000000000000000000000000..783d63153ec9268f7e17f3887a844c2a8741e3ce GIT binary patch literal 131 zcmZ?wbhEHbRA5kG_{hMJl$4Z^knsQie+GtUia%Kx8Gt|sM1bTOnL=9nSDt>$zj%&F zZ+E`$&d0nJj~sf{IOnFX>g(4$lFfWt?d~d{b^7T#FEq2Z&FGFqlI!W hi^EyjTy^5q9{u&HSRnS|fz|5kZ?^q@tHHov4FK7YGsge` literal 0 HcmV?d00001 diff --git a/html/images/jello.jpg b/html/images/jello.jpg new file mode 100755 index 0000000000000000000000000000000000000000..df99e663ef3b35d30b6031435bb3e3d6d57faeab GIT binary patch literal 13744 zcmbVzdpy&9`1f}vL$VIK+iEsN>6}A{jm@Y#r^=-h0&m8Ao^ zb4)^Nql3v5g{Vz4bKZu{%=7K{9Dl#Rp6B^``Qtk~e6G)R?YiEFkJ*mdUSPhbtA{H9 zfdBvm`~hZlfa?yQoi2VP9|wzr`z`h#kD`V}gj?8ew82?e_#BUQu)uDzwcmu>Y+LL`0tq3l9bFZH#9-fgOOMfdR~5jv)*NGcqzXHZhxLGIy>C za^WJlnfX!-+I%SrWns0^+G53eOB8DLwl(W*Y&UP-jIqWMuy**3_M7egya~j}$jD@_ z31Z$ngxzw~a=ZWMYqkzpUzPV3t+%_=Rp4B0{+JZ(Sz#GF@PBw z8P5fuP&OaXgFvBr`p`LZ^!34KCxU+m^cT!oxZKvoVA0;AuoVx>i<_{|0}Tn9oKij1PTF@2VDRVfzesu-$+&#<(3T#4a1uWR=?vEM#PAk+wpKj`SfGQE%G zHfrlUs8+*jE`9a-&fYQ?%qIGA#E7V8?9-gX8*LuGT-1?}6fZ1tpM>9;1%ldD>S`o6 zMC=rbXmlhIrCPIh;AdiGKeEX0)4d-X)}hn# zbi8&h4R`zCr)i`Bt`rv+|7?`@jO7oWp9P+3w6#+0^!_Z@#xtvB70k4XaQ32(kk5VO zzD`jZClemn0b?mXp+35ve6fMy||vd^=N-5PUg)Y}bFJZIUj; zvxM@i%a`fFp;f0&MIiu$}J8~BAa?t2d%*0t> zsnh>XWSH5R;Wy0mxFJ4(khYhsVy(k$Y>6H9axsPnQkaP~Cx0J%es}!`GCZ3G5QUGl zGN&f~`DWW|u^hTkEzNA}5Lg2_?aXigYvaxs;^*-msbu{G2a`z0&mZ6LBmPsK;s0eV ztqV~4#%9q_REkK$O-eYCdi7ezUQvWOEW8_QUDA|)hxz9XW`RR0HTa1Wd53QDF;+@| z&fTm2dg})3R)m)+Z8aew7)=yzzK>9(TdBl(&7_|lGhVb5H+x-ev0Sm=PWPV{9rRpr zRXYn*>*6Iz^nftK_r0TA#n)&HVI>m?^pDd2=MB90hIucp-!WEJPq?@Tz2E6b4Hnm* zry5F*1GDw{4jz2dc&dD+`PLDC<3`!sm~DYgBTn9wl=2|6-uEeH*Bq42gVr? z&H{(6bbe;~XRXd!XECHaZ{m8IE_$fNP;ZS7WD`3WS}#kDbJCs@ZhngEtTwKFZo7Sohdi1+x0nJ zO35ssx=MQfug5WX0ILCk7)p_eHm65z%^L6Rqh>MH(gJKV{h@`$+&63+Ar=Zy*l=M> zG`h5Uu|q1rk91avIW9=ywd=-2XE> zZ1KV^@#f`^i(?5XIO`H&`&aHgy~>>%CYkni!jE(aSO8Dq{?2(r4X7M`i;Yv75?Uw- zKGpSgynZ?Jo0OnC3NlIf`)nxZ#8>h1uzrC*EwB?u|Nr zSygXcLBJ7b$Y7+{qnt)&TxLr84!*Wlr7 zGIj!1Z1CWCmw=jDRcDnb?qWqK>YGUie(pF&aMy@CXMr!y^9PS`qlcvU30Wz*C_&u* zY-3BMey|iPpnh{!);CQ!u{|5>a=UCG@#chNaIWWWY+ZIL_x5`!eg=lQGa+-G1=_*d zSlPJseDeH+)$fz@RMsLUcZTBWXYxFNT+nL=8`o!#F-GI$KE06#aw?4N->?Qigs>_( zKXTu(4y&7i_QQz;*jG-TtM@pn+yJ2>bEM|Ykp}eQjhR0@c3JHo{0RGa>EUzHBV^Oe zoS2EgWu<8!!kTV6Z(D3F>6VK)HPfcI<;AGI+pnP93ztfb^8owoI4Db38#phnOmWH0 z(^GmS2zMd6p!l~ksJ$y{Ym(WQO~YU3{GFWaC9~3xA@Jiz>V}m3v8hvECr)o^e)MFO zQ%L3tF;e{7Y5~VCmO;)OEIqs@zxi4)=Pj2+daJvBnySs>&2j6=>lQD{%Ok%|e0J?U`{U9QXc~h>A1iz%=9{__NQC4W zr(C+x(r%VME2-AEr(K=ozM-jUgCdl}OX=haK)joF=>0?08UDVa;cuVfIB?seRSRGt z=)>dGG!bryE#(ota5={8aLak@oE9mE!?`1GU)(?Ge=6X+hd!&J*hSz}1;*KYnqAg< zv@37NYaiExD z8;Jh32AA#KU&k+iDi-8^Vj5vltN8|00ZJh}V|iuI3)}ndA53FSO<{RMofRbE>IlxU zCsp6>6;K&;JVxSF_6469`j6vj@~Pq&f*0LKbid-orG{lk4`$3U4Nx|j!@L|!<0hLd zt)72~a*apUNkYVh@)Qx%G3MN7OoPPM)dKrM-g}(7R`6Lpb!aQ6xK)*?lzZzO$#JX_~ZECal94acl-+(r)GrRAC zBVTB25)?!xPW8i7pFGW;TS$}}J;cSnI!wBSM6Wu^UudLLs z4Mv%=rIyJCG~MgGBX7^{JCoRAYG%?KqDkV_?)JM7&Pb-mChe`RJNa1*p<()a%baa=`&_4AgtZ#iiVX98n&dF6Y@ATXi zbE1pn<7M9o#5NJrmw8sKHyhm*Eae5nA~w@O5;Fy{*qc+=?4imJvtS29>d#1dQm}a! z+K#-_N2iSzKmp^<+Dp_d4#82OOS+z-$4T2TV`jC07kKBNI#;tb0V~F` z?WZ)Vrdfcn+K6FF>Efv6V1p_IEZ9lde1nV7tz(miQRghTY)BK<7rhjrKp1-MQ*_#GRLu;5yd*T8<7Si~D_~+^qP0 z!D+x5XQN4hT37aQz&BoT(;SXsBoc!pPB+RPA6Xw+>gg;z%A}~1UTb5D&SZZ)oNp_i z5<|h{dv!-Y)>xkL69rs4Dki7}Z3?w%*uJ@y0g~(`);(I?>$cEjXRHoGYS2zhyxVgk ze~4nBTU6a{MU`t5qS`H4{HzyCJ72ARaK_T{Hfj;bH~ov(?|xPaz;>H3=$cw#_3x|X z<)2yB#MM&FAI$U^ZnvG6(=?M*b|n$HWogCwn-Ai8b6=4w)DvJ>w@#z=#z_dw2PJre zMjD~EVx6W0qGFP+#xouE(LUQjiTFbU@7_c3ja10R)t;_P7)mr(s#U(j4gD;+>1R0i zc@q%K&XK9Y>5H1z`F+eP1ek0(3*@ywO3GT_^#)HVAl+=GIaW(K;TdhC5&^xkgn%&wIaxP7rY!PbJ{_LisLR;(GTKCD5T5)T@X5%trBe6B0q3RN; zs{4K!SnF6yR?`e!804Qsh}W*}RMZ)l;FbsPwb$-{UZgs~IiK3sgQ`3s;5^z{N`TmP(q7~r6To2@s+bKQ7We+?>Cd* zSFEV6I(=D@?J+Oxz!vayQYC;O8NUsv0ku7WSs+p*r%aM&u)_EU7 z#ssP%nLP7DVf`w}FkdBoZ9kAmgiDo$%L8`jn@0hb=2f~NsaaRZSR+c+JCj)0az1BO z-Q0yh9nPA`y*Yqs3qaPpH`PC>7`*xIS~gI42ndw2DACJCUK#A2k%Mmr?WJ(%ltvgQdlmmc*Gev%sdjf&~>*k@0vY*o&U%m6aE@ z8h%Jfsgr6ow3x?=9ar;$sdZKqVIWAGRT$3-uMay8{d`)KnYH|w*ET&`RvQR1#@8Nx zwr!}yYWK2>Ci@P6#2HMneBY(u-t4YeaWN`7pFfUQYM=Pql;(u) zU&vbLQd5LKMa+p(!l9jqI_fIlyKHUs`&mL|DO4)qPoX## zsK?fU%cpUOjYU`XevEXl)2tDCk(_#(OPrTGt7~-OB&5^p+9EH91I0HtbvJ=a4!ZN@ z*3L&BYKFxk7WhSOSJOEc=Te!rpIx-IL0`Ekb;yyHYffp5Y*(VtlBWrS+B+XT z3`Xa#&Bw0Ki;CwHsuRv>3+ve7P11QO?VT-f-CLi$IcDcOzC#3F$vQ$tABSCCyn`7P zNoBR0zm&FrziralL9K6UhT+*s&{Cc=v*5Wj9}G@UB2d@7PEqB|oE=ay_V5_l0If+8C23qy=o z4l&51Lya;{9qr4!znnGxYq?c7EYJ?piiq2E&S__c9?g`;3YrD>oex}vzrn+7Q*+HP zvo?eYUL1oLBb%gJ!i)Bb2)~BK{qe|prBnX+h^lZQ(S}2VHc6x^jqb?W!PqLFawaQ6jYs5^*EP&0wPE9*}*VywB{-O{yDNsxfWiIJ!SkOihxX1?`#M(YcPg)x% z4O2jLS`*j&>zuY*7$ndr0t7}plY7@geo}I#=xlnr#|z3F7M?2-DIcwGFkAV8Xs}9jy<#PGg6( zMJ;&6cmXQNRYa-cnSY<_P*ncitDdW@=6D8g!`2VmPN8dXsulUU=R&r5MdrGp1@aNr zv2RaSR(!%IC*%1I3kmT~9lbNutRMGpFMP(BZ)2NnN4aL(*%hM0VP*X>*2C>6DhUQ;jZCLr+#sGiKjyBd_B^N~Gp_R8GZeu`Rc09U^+@U)^$xG%{ zF3)fh%hm7?jLd*=i4@zbl1ySa_Bxz-sC!*yos~%>P9})(9brm~%~GQB*YWL^6yMiC zM8#s64}|lnISwhb2Dum^@r7#_$2E%D1JV?ocz)P8E1Dr)#8#{P{7}%g4_XW-(WJ0VwInjwdtvPWe8ZzMY_t1Eehq8_+ z)@WK>4dAayUWqi#R<}=>_9)b<0w!n_^)lYWNtH`=O<6qI~eZy?TLah^<>3lN5CQCS{PComhKk7FfjcTx@+- z=!Eq=P1gI>^t{c~F(kA~W7=~yi~G#!LUG`6hpECn)*A>* z)ab3RV&2?AnqFfWWAkv@)&LI7E(Hno<%iNz?@x%M>7c-Pcvccgs zAevPO)bEZT={pWxPYQ?@qh^5&u!ruik^hXBmI!{+dFrMj+EB@1Snci@rH(5t!e)+V zc1fR(RB>%K#4q1aRg!6htiviTU#3l={1%n?HA~kosfMJ|_k0sTnY!z0?(xq}&DzB- z+P@hg(ww>psO1*dVJXw_1kOTAaKU6G0oo@8i@E>$MBMM*vvFrX)xUbjglztg2PbUI zR{1HI;zF$#MZMqb<<+-Q|1N;0H_kB%ewz&V7&S-YCW*`o-*=V`eH^cOTckS;Z3N*A zPL>P;t;hFf(nAc+y@$EnMAiu-KGarh`F7!B_mWfDXOrB%CVFPxU%X_*>g7rABge}Z z9_w;FlvxGPl87x6gJVyYuk?qqPBbZHy2Qu1-4DtSEJLwP;?Ka2f^<27p7Qv;q2ZHK zG;2_t&S&>Zq$hDILSk*RsrSIwsafE_Mz6T< zcA%B>DJ07D0J^&w2F>Xlm9sou(qSi?5AcfHp`E(>|c^O zDNi;cs`bC>7X8=ODdQ-=bJm43B!!^8Y*Q_-mZXsD#>{$6iI=8t4hacyVwvC>Vh|7# zSUk|lP&%bn%vYH^NX;{FLrT?5Vt?ngIIHM7oRB2q1vU(X{q)#}upk!)JAk;f;YVs! z--~vfB@h4SuFUw&j;$)GT%aDNJ9YVpu~tgH4TW$2&M^#ICqN2$ykfPqGA|l|iiPF~ z)WqAW%?HW040MJ$ePb?I+)h>RR-@mhbeN23Uyl7?n=x}UEa<-N?d^|L52guUJ|Lbg z&kh4V7`8o!@<4}cBr+oQp(FKKW5-hK588`dayRXdzr_h$Z&4lB)tW=^>I z!d1{dNvel1Ajdy4Zr#rG@n7-dwwG7dVI~{Vvp_C|`aLeQPcOiw@MH4u+!fU(;-Yzf zzg+e7AZxJmepbpQ#5C=I6kFB)?#qos?PZz`*+W&DRg2ce`LDf!-+Akn7T1%D@em+L_SjpU95(?(aVQ)wH2fF$?Gw+-%ywR!OZ{ zo?g9V-kE4=O?=GbX%AF3`{9#w^KW+6nLCaWXXs*|H}8V5;tE`E61qqC)Gv4vC2rBs zv)p6F^HL4#N4OCRnJ;p@y5mCl;jSW=URrdWl6VaRiWT%}&%gKl6T2@U7|KXO{uxU} zhmJ?u#Sc?DJ5?jTb1y=FBM7D>49Q=4|H{>;pUg_zI$wSXM_miBkwikwDJ)TES;(#= zHF2%_{9kfmMXg$EX@A_k9z^s`H;zd3nL0^~xJ21c6e5nTbv^agV@>p$Q?!Qqn6hV+ zPz?5rDesY>b{2TF|GcJaVfM$B#vYPn+cvghsHgRxcK2!j5c&rTJ9pift}OM8q;18D z@9uix4dKlPloKfy4!&^Gv|a` zL5~L_dvn+A#!d^qtxEHyc*<>fYu4}Wd7Pv(thwDF&i{bLN(RD3_t^qd|-|@j(<-X@v zv$^*o@RRtMK~S}^jD7QAuyMNl)z!8_D+q_{#isO>`Ct5wwH*JomwAEntOxW}ZxPuS zLa0m^^~(u)J4UE6trV62Ub2iqwuZJTgsMr^y3(9 zSROj{Ug>lU|8%eYL;U;KIi;5WR)`f^cuNUt(_ol2?mH=Q>v+%oLHkqXe~AzUHRVii z=e4cLZf&toyQ6fwYX0(Tg?;~V!uGE;sj;mhL^%u-2cF2fbAq`#(3WgUHdSOrsr%2s3}~Rp-gp`>tCEjHxIn3j&2bxNqd+q$yGm0V+-bj)fOiL3o4ltqC5yrZ}xij|EuuL|k*if<6ZS}i2OiB@NkLY1r zbjL>V8q8gz)!)=f$B3BLO1aDD1Ds3aw&!i{9$m7{IF zKG#xk@8aD(-#joUVj0pb!46&gwx3f8Pxwv=&QikpHmLk-8TE~C(5o<~Ph5{3n|M|= z|MW$ub8CwaqqObwPu*JWZ;*bOKc&`!!X>lp>!I_TU$Wh-ZZ+w82mto5uCu zH+tgVWc}wmy&cv!5}(D=@JnCccxYCu*GFa`zOL$CI}1E-h6vg#kiRM^ag&IZ7qhj< zFPGkk9_~q4TKF1NQ8Kh2v9FO~WAol<_7fAR7I+P~!NjW`iM{HxLw64++^mY8{`_xn z))2@u#kH~naHjGh`SvFJk)>cIvwXPbVF`Y>!&&Fmr$=<{icYhA7&8i;GeF`cx zuNoHL`ZebF#i8W$*?(HZ%}!&&Uqm5sCh1j+nIzl2*}#>Ak#awLFI8PVu(P_GP`YIP z5&LY(qwl(^WtDP{gF=3{xem|3P;~TWqVbI7CPBlpUEi&KX?QPZfs}8vKm*3|>WAlu zH7otMl0v(}ySoz@0;j=i2L?QisZpH8K_SFTpY4Ry@v4Zz+$-INz62r$I-}VA_9wP#o zZcE3(sr`aMN>P5q?=JR>q_N5gu{n|Z^N_#U%d^*0#|L^ZC%;+o&^w;84%i$em$Y*eiZ(7#9!vLr<|+5wPN?S(iZ;W&#uluN)P8k z^kmV&)BgER2Kmt*s@$rXQ|}}Onu&xvMW|O7Ud-`!o@feB%e)ZQnBjCj6AqJrO8kk5 z;skh3`@=o1e#2Vf{Wrhw99ipW_xRqxce-TrX@AZeuluni#LRTe6aOQ>pA?>oEl=~U zS>XnG9=T%<>N#oxseSxNw1n|~N*Gr+qD~vYh^IR?9{#ZU{>9b@S&jTeL+zf^ z_$Lc{zc~1J?ztsB_8j^9fU!^H-G~Afy;AwAoF;~5LWG1DU#mz{ySUhCRNyR7gO%!_ zZrYXO^NB6_7D{y3EMUs@AFchu5a|->lFy)6BY9nWQ5R7^3uJxiV`6*Z{^LE1NhqCF zwQY7M(oYitzz5dxB9>HGeY=kkEJV}Ce%$!*qhU^8_dC(W19x4|!x{rP^o)wHH72zg zFO0XK9{ZN(igls98&U*{aLDU{CYCNa_E=g#UmGh*WBer^o_OXG7XIk*=O-oN+;6Hu zy3njPqyjaQYv*Q+WYU8an)ZsBtjyP!6QxB{6`ORE;7LgRu2KERt7XFeCCp@Dwp4{M)tfsyGk~^A^4Kxa@P}Gu6A}bO^Wu3uWn)P-}7Gw zK&r3uSjA4WfOLzPj3s0CzbMo%tMHXlQJqGYi`VccV!LA>kc+f&F{_j?v-91lIbDQB|KdOT=UYX3CQ<7r~<#xH({m#kiaXdcRw;&lCw z!^|Qd8KJvOP%%XpNj>f-Zdk@!;ntHewge4G;n}{ih0saw6nWn!bWQb%n!fB`Lnp+O zwc}3r=DxiX_?NNS$;x7@+K+tKlgB+Q6^m2m9P$!zy-$CMo_BQ1GhFD$(+=!COUq-q z0cZgd^YK@u#bvI_HiSWb@5>Sut3lTz`|!?nCdG#M8?Ni7xQb4BKu6J%Czn~ZR(Ctk z>0FVw79O?r_T1bT^QBY!O;#lZvg3MvVq`fv%rYr4;uQdmC+_ZjFJ)3xa*ql5M@F}h zZ-f6j6ED|L1K_E0y70@S{X1P-#`p^oAC1nsG7uYCWOH7*S6B`9OR1b`m2nL4y(tEw zPUkO~ydwNAMa3u%Vj8%LA@A}D{x2`b=hm3r;5mqOU*C+XPI-G5?%ndEXOt8=_g&G| zjUK+g%fELjPmnr>Z9y5PHLHKVg7xNM>bj1gc@g%@>yMV`?u;CGqv!VCHmlhl8#ikMC;kumc(KUj<)CbV$4K|-E1aNwms*J6l%?&w}hssUIjp<2nz9w3-Jsu6=~ zuR|ot6xKJ=)2Y@)S9T}QMfI9W7*e7%g{&IP35zu7bphDuu27Dn$~-I&S&HIBdd`pE&E5MNPyEwN#Ir>U9us zLqP9KSqhe~D;(k$m{vfyeUllOw+$&-ZCO!EZ_Q;WSQ8~g(8UbPd zinUaLK1cz@-JqAjo=*$CPXPCRRPJiDt{#-#$2i?dwLdchVx-n=rDRel)6A^#GVmbS zHw}=e1H_F^rFFq5GP1E3J~~4;J!z5b<>lUVCfh3x6bM*milTQ-Mk`Pos`WD>eHE3djvZjor*@vH7efOWtaGgER~d3?9@GFV>kf+b7u4|5PBa9 z#iJy2uGHBZ2rzAcauqXSy;L?^43$kK=%OKPli(1Dkm$nHRhsuhDpyvSyyZCKnzUKA88vQ7K|Sa;Y7X2}>Y0V7N8Q?6pqc zK<~xN{vGiVD5;BTrHxYcuN)-y{aD91cnnIeW+$#0fX3mlDD>@S(D@4gomz#EWN~nK zDX-S6ZLA5gLEuHBXQ0^(Z6 z#gCJ#1avZ(MQvd`UNUS&ZNgcCmI3%c{-0wjQ$Wju(7BvgjYNtO-G66+oU; zgD7+OC|l9N;LucJ1X!u7nEBRh#<-iWPz`Q;9{ArEQ3lS_c_AtNpj@x^IjdU;JHr^8 z5_i!=mk{gHgjmfqStkE}kr0n;0`!t{U)R*a$&aF!F~%WQVvvGv>JvPKAuLmbE}hI= zjY*Pq?YW8%*$q5AgE9qH;HJ-p-}CgM4D8~hW4(zzv%p?HVxC3ts9|$FSje!SLYkpu zk{~>v7)fL6kUX)z7;h^rz{x;kRQAq7fMVXB=!a8fpifo261Z*6w4b7|XDIwclKjH= zWhp(CNHHO9gstK7+4S#NOx#7KJV&j|oysq?kZ_C;P0D($ur_dxO(i=t2Mqo+rdX|^ z6#|(d?UUavK}9UW+#|H z?ryJ~?x>r7S3}W3c?6Ab6(8cuh?cSF{j2Nt@_%*&(>I+Tle0OiAvPX3As#hON6(N* zd3jXE`6`{9Iz{eZ<1VkaHn(p{V2|}^8K18ieb{t9OW@@`GNegbnS2tO!l3_4gvdwQ zWk0S~A+hxmwl0*&1xI^MYK1XGxF^34Di>7g0)DfubJAc4t0>nvK`;EFV>G1Z1)pRc z4j`o(l@jCWQ)Pt-juW70I^t#7-M|O*1@bf%$Zc06?Ann!#9r+!{9W+rh1;{;Bnz=fksKUGs* z(@@VCwB%P#n8ljrIP@#7fzjVEy>hbHXJX_8F4pAHu{bm1aZQ8 zOrJC4c?z3@)jua}uORJ?=0*8|jzY+20-X)_#}43>Sd>^)?hvhYIB^>@`|ZC0&ugv6 literal 0 HcmV?d00001 diff --git a/html/images/jim.gif b/html/images/jim.gif new file mode 100755 index 0000000000000000000000000000000000000000..9a18a031fac72973e00b7fee7055774cbc6a43f9 GIT binary patch literal 14493 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≥o<2q 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 literal 0 HcmV?d00001 diff --git a/html/images/note.gif b/html/images/note.gif new file mode 100755 index 0000000000000000000000000000000000000000..7177d68a19ff69dadbbc166fe9386fdff45bcba4 GIT binary patch literal 264 zcmZ?wbh9u|RA5kG_{`4$1Px%^0Hzv%yao_BaNxjyp!k1=|6mG816e?z0~7@6RA69c z*(-3;b2Y2P?X%hj3LGU%#OEbPGM&?0HAPI?FIHNU$EI7SR^tZCh6lDalJnP{c%tfj zYU;+Dhqo43+$}k^sVh!<)yD3_4u_+kJ(tRQYGGX{n6Z1R^~WzaRIPXx*%w87O4c#g zi#Ihf)b)0VS9LKk_w^f2oH1qAG{df$ZF3rD%yV7H;j(yTyQSokmE3bG*LAIyTfZvb ynPYR+R%wYnAx)@c*dw)d`I6$C1UaA#rTRf8E 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 literal 0 HcmV?d00001 diff --git a/html/images/quad.jpg b/html/images/quad.jpg new file mode 100755 index 0000000000000000000000000000000000000000..4b7df170beb5da5b9be8b5d00efe19c9d9f4435c GIT binary patch literal 23904 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 literal 0 HcmV?d00001 diff --git a/html/images/ring.gif b/html/images/ring.gif new file mode 100755 index 0000000000000000000000000000000000000000..2a614f4929e4cfbc14e656f576e320e1ee601e45 GIT binary patch literal 4275 zcmWO2i9geg1Hkd`cQ>1v``9qUa>d5xJ~rnhn)^u1eLgiRMJo4w-=vx=x+7Vb`3Hu8@s6# zu?;@C1AWnKY`14)`iBoZcnr2P|5#f5u?kS#VN-tp3?=RyAya>|jrQ!{A!-(cif>JV zjW3~V36fh!<;&lrvX({u*qV6lYC7y0d``y>-vhcwf%pxnux;Y&OE85WQTu)!mRvs_ zC;JV&{p2~cdB4Z5_J4%`BuRiRVvkYGWogS7jWxxM$CzB6YCUn_rtj_9;_;@L#rVFA z)8OREZsi+^_c6=T_w%y_*3C(ZDN9+*%|uWhkHv~+W@TaV^5A)ttR)GeXrZBQ0VBzo z3!B7Twj-k@RA3q!ie|Fn09H6`ACYQkpsS;!rKw4$(;f`qa03JVn!Vk+1_o53uQ3`A zh{q|l$S6pl$vjsR&=M98w-lGZP1d7!_THz786lDS+WWWmtE#H)s9}EXsco-44`!|< zg9Nek=j_;Mxoinz$%x{$#$*MECFJycyz0Y3A+r^~?djlQtb%gTtnV}$(huGAU5)1R znD7fyaVu}e@9x{nxJ>&6YM%zOhNN@|59S!_Lkfx#@lEehR`x|=N^EZdd!s2I-{U^T z)hP0}I45#$BYm*z=Id^5;ARX?l7p7k&$SYC&W{vaLlam64mgs9HIL(NW)oF~L0Q0T zEYM2fmcJNgqS{3_z=;?AA-C}H4Ee~}Q-*l<7`G-zK{SzbX9>E3y+({<@pI=PUS*e_ z-Q+A!CihS7%CcG4<3BBRTP(ZIW{Dn~M$w{(Tb~iHIHH;Mn>_`G$8z8WS_yn<&W3?+ z;Mx0HcnQvi_=(6pze@v_PY};a7&!Dgv7;(pXB(a>BnDELNJX;@KE$o!R5}*Vp)k~x z_STA-#-eqSc_v!R5DZp*v@yu+!uZ{JCZgTIFV*l3F9U08gyYlj@2CI*9~1mu^0o_& zK|du)u|h}y#B2z9frF5@8Y_0jcm-*s;e5I484zLZr^7J0a#sgoB@E*!)(RULSY-@Z zLm^3PY(88uX)Q%G>HFL#q@o|252$dHnPu2Inn%V_gO#PmVmr;{rgG1y<>qRO>5B*n z&Q!`p>D8Q})+T?~m8(@r942UXg4>EfFX0@oxL5P|Y4Ey8P}FjJy{X)!8s}JPFx4>8 z_UPGZYmB$ShefRL(kv7rx5oA^oi&>ZyV6A>TG1^qYk_A-SKJ)E_r5UJ3S+g8X38*6 zy{8xDAqbLS{G41Fr%kU1yg-xN+)hEE)bIS&NR9v|)hxS)!VY}SUYvAXn{Pbi^xK1x zGHUqOjk3rSRAM>9M!Ec0z~gOvLFP$LQ;JZ2+;DX;JVu;kB32~D^!ahxu4+`#^oQSJ zi{I{UmZ~!9`PA{TwOS|;!oZ74jP~21mj2rIhLpO5`RLFDoI0N!)=NKU>z4gh&iEGk z#t}qd_Y_*!=;AOG;1Gdf6lXTHx86Q z;&R#cOF*%OYVbc66$}TL2Iyrp*?Hn?@^@Is`uA65Trc$g(c}O6-y?dgri%SVJj{v^ z?;pNV5pSC67Lho+fKW!DhrBvwQy+8t)H8vEHe4_fE;kY-EyHUDk-w9Xtab)cIG*CG z0FvqwdGHlZj;J34$autn;3%NyCIF}(R0as^*_aayaT$R?O^2@qiy1<_`@`B zrz{4h0hh&kNRnUAW*ux0r*|@t2N%RFm-wiahiRa9EMO)`K?#o_VJsq$Bm6?Nsui|h zn+Tu;fT&J!h09Nd$BkDcp^R-XN!< zXF+%Z_c;tmu~h#8cn_KkN*nZ!>##I1=+k_J{Pa~UVYx&G#|)Vbv5_zn9Dl#&ayyX+ zB5fSTjO~_ii;;_@N`Pcqq>vx3uudJsFs8&m0Lek~-6@#W{cvecm{xlY_8vGTvyv!u zHt4C`zjDtMzZX|A*{T@%r3Pg~+&h_u6aeL81<1)BY3d&Y?K7h#GSM%zCA*DgM{b3O zJ77nx_C6{BLK&x^%Ir5u>+FGt0+?gYFt94X7pQJXkh%Pr74}_4)hK*Gw9u-2cw3_b zGNR;z?CaSsLdkMkNCK5%MTmMZxu}lq&;Sqw_J8qwO6!GWV=jv{pI#6yJuG_sXiHhA z!{jZ~xxXVhxm9V}Pm-vdVw--Cf}8yqL-H(NlweGORYTP(=WJtxUb^44JsCGOt_3ed z%=8l&M{o8<+Rz01OLmE@yq~BidQ+W`7GkcBO&>Z$F|Fmo#TPW#Qsnsp|b=? zV5HDt5h8jwomLJTf9Uz&oN8Q0hNJ(tV2>M$A>HGs)wdg6-Q2A&EgoY`(FYlOko-+S z*v&Iw?8lj&8nez@(-k_eTcc(EiG2$&?+_3nHeVW8_v zF#Uqp_v?Y-(BJ9yjF zO~V>B|M%^gL(?adaYTpzMm4e@w_~0-5v+g7)}_2zdm>DrE-&G|s?k+iz2~^z3%wHY zk0!ycrd;;(`Fm?&l&@RZxNBOTm0AlBCB~(WNw);Z6>606keY=a4qTY#c=Wn&IcRw2a-8*?| z^7y46Yo7#P62t}NjV|Ab3#5I zs(SI+S;;9fyCukO0F->k&6G(7q{rM8ShlfwP@Y8KAHy{MZ@#R>(=D_d&?#b_x&T12_HKnrqxubp%I%a zy81fP$h|@R`hXs2R1LFS>9@&4)!+fE^Rt#R*W8XUb|j{% zrk#n@SV=O{Lo0P6gz|R>^sKbwRgTjaG4o$DmfeiK^ZYweH#2dlHjj@BY|&0#u|-U* zo(PE-{nSt~;fH$8h~A+#;RTXbpeITEn^SfdDd(e)rmHTM6#Xkz4V`Wn%eQzBQ7!*L zo?i@aNft{bYyFm#7C#>GCDj~8$5G*th(O&NgE)s2H6y8g5`3_p%)Cg}7y6=PNE2v@Ys65?U$}QZb(}lwPA7W%AYnBHR5lS3=>ZS`j^sZ}XnUdkO z(!O|)ch)#va`=%93-NWLm}?HYILmAAo0xf5&ewIRT>X$*7pg@W)p*_Sajb;G40X38 z_Ym35E>>?)#kluB7ZGORCNWwaq&Z5MsL!WvWumE}@%rAq z)n?M-?ykd>5~`dDKku1-HuogeGEGABMbUd!K#!EJZM`v8Etpnm=&Rz{nt?YZf=`Ac z`C?&K20jNX2*=e5Bi)P{ZZg+dM6yKifi~ztrtFsw0aYwjLcEX}&*ba0=YD2TyS1sK z!Ql=M8ZFiX5~&y4dgNglAY|-m&Vs+=nw<4EYAY3A=`;!o4%_Kbsuv45z2#@W7U66adQuQRuY`VbEzsY(k}eP* znDrY%1;qHsx2$un#vVb<%NqmqM14&tCr2;1rifZplOR{7W*Sivl;uEc_-OzOs_n0+ zeKTSx%q?Z#3BJBn)uB<{Rv}HRxo~_ss5gVuS0O1WP3Mn5hivQE9I4Zzk%5vyoM9u> zcR5#h?RvA1a$4E<5t_F{R;q;JVH78K#2a?k6Q^JDNY1NrtDLS;TV-9LFBPmy^c7CF zTcC@hHTLvPIeryv_oWJ>%RS{?HI+R%KHW1R-co@WF*74^ysL`xvoR5ZhipNo=e{-i zfw`IpvYxPKefF|+&t1afLDA}OLFa8RPI>zltC}z);Yo9N)j-EVu)2?5LrEbBd792I z72y-)kB(L+4$8P?yS z!tk2p3E3h;METKDO6^DJ*hzQXH^_5+rE)2+hicPJWr z6zn1wn-UT6Sv*($WcHsmS8zJLsOPZyFy=m8On^IUDX6&Pd+0}pqCb+Lye1Vg*K%$} z$1#FE5XIi)=av{mE^W&AaidQebWuZyIo!Yfe5<4K48jc6@~~YvX7qSo%!sE;14+@J%;MmtE}wJODt9*&#xU9j1QWw{Cf``uf4w RUk}#s0~@9TMlvwK^#83(8SVf8 literal 0 HcmV?d00001 diff --git a/html/images/smallliz.jpg b/html/images/smallliz.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8eb827f8ad56ff57e9324c5e2fcd07947aca0c49 GIT binary patch literal 16463 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 V9|w>FnA)HW1c~_VCk_EP{x9Pz_gw%0 literal 0 HcmV?d00001 diff --git a/html/images/warning.gif b/html/images/warning.gif new file mode 100755 index 0000000000000000000000000000000000000000..f51eb4b1a7b7f392b183e183ec2d93aab7d3090b GIT binary patch literal 287 zcmV+)0pR{eNk%w1VJHA70P+9;=jZ2cZf?H5zWe|H{{R300000000000A^8LW00062 zEC2ui04M+`000Bz2)f+N_DFSAmXsV{#*oJWIwOJ|OFii%yF#J7% z?sfYSfViQp$QksMJQ>pGyg`|rs_Ys=7BN zq^_xzt7fP!iL*hxLbX0Icy*7uWw0Hxn;d(N$#=tpw8qOJ%GF%XpIE=t$i1gmKjY-( l=I2P+= + + +TIFF Software + + + + +

      + +TIFF Software +
      +

      +Home Page:
      + http://www.libtiff.org
      +FAQ Page: forthcoming
      +Latest Release: v3.5.5
      +Latest Software: v3.5.5
      +Master FTP Site: ftp.onshore.com , directory pub/libtiff (Active mode FTP only!)
      +HTTP Download: http://www.libtiff.org/tiff-v3.5.5.tar.gz, http://www.libtiff.org/tiff-v3.5.5.zip
      +LZW Compression Kit: libtiff-lzw-compression-kit
      +Mailing List: tiff@olympiakos.com
      +Mailing List Subscription: tiff-request@olympiakos.com ("subscribe tiff" in body of message).
      +Mailing List Archive: http://www.remotesensing.org/lists/libtiff_archive/maillist.html
      +Anonymous CVS:
      +        export CVSROOT=:pserver:anonymous@remotesensing.org:/cvsroot
      +        cvs login # use password "anonymous" 
      +        cvs checkout libtiff
      +        cvs checkout libtiff-lzw-compression-kit
      +
      +
      + +

      +This software provides support for the Tag Image File Format (TIFF), +a widely used format for storing image data. The latest version of +the TIFF specification is available on-line +in several different formats, +as are a number of Technical Notes (TTN's). + +

      +Included in this software distribution is a library, libtiff, for +reading and writing TIFF, a small collection of tools for doing simple +manipulations of TIFF images on UNIX systems, +and documentation on the library and +tools. A small assortment of TIFF-related software for UNIX +that has been contributed by others is also included. + +

      +The library, along with associated tool programs, should handle most of +your needs for reading and writing TIFF images on 32- and 64-bit +machines. This software can also be used on older 16-bit systems +though it may require some effort and you may need to leave out some of +the compression support. + +

      The software was orginally authored and maintained by Sam Leffler. +While he keeps a fatherly eye on the mailing list, he is no longer +responsible for day to day maintenance. + +

      Questions should be sent to +the TIFF mailing list: tiff@olympiakos.com. + +

      The persons responsible for putting up this site and putting together versions >= 3.5.1 are +Frank Warmerdam and Mike Welles. + +

      + +The following sections are included in this documentation: + +

      + +

      +


      + +$Id: index.html,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ + + + + + + + + + + diff --git a/html/internals.html b/html/internals.html new file mode 100755 index 0000000..39af89a --- /dev/null +++ b/html/internals.html @@ -0,0 +1,654 @@ + + + +Modifying The TIFF Library + + + + +

      + +Modifying The TIFF Library +

      + + +

      +This chapter provides information about the internal structure of +the library, how to control the configuration when building it, and +how to add new support to the library. +The following sections are found in this chapter: + +

      + + +


      Library Configuration

      + +Information on compiling the library is given +elsewhere in this documentation. +This section describes the low-level mechanisms used to control +the optional parts of the library that are configured at build +time. Control is based on +a collection of C defines that are specified either on the compiler +command line or in a configuration file such as port.h +(as generated by the configure script for UNIX systems) +or tiffconf.h. + +

      +Configuration defines are split into three areas: +

        +
      • those that control which compression schemes are + configured as part of the builtin codecs, +
      • those that control support for groups of tags that + are considered optional, and +
      • those that control operating system or machine-specific support. +
      + +

      +If the define COMPRESSION_SUPPORT is not defined +then a default set of compression schemes is automatically +configured: +

        +
      • CCITT Group 3 and 4 algorithms (compression codes 2, 3, 4, and 32771), +
      • the Macintosh PackBits algorithm (compression 32773), +
      • a Lempel-Ziv & Welch (LZW) algorithm (compression 5), +
      • a 4-bit run-length encoding scheme from ThunderScan (compression 32809), +
      • a 2-bit encoding scheme used by NeXT (compression 32766), and +
      • two experimental schemes intended for images with high dynamic range +(compression 34676 and 34677). +
      + +To override this behaviour define COMPRESSION_SUPPORT +and then one or more additional defines to enable configuration of +the appropriate codecs (see the table below); e.g. + +
        +#define	COMPRESSION_SUPPORT
        +#define	CCITT_SUPPORT
        +#define	PACKBITS_SUPPORT
        +
      + +Several other compression schemes are configured separately from +the default set because they depend on ancillary software +packages that are not distributed with libtiff. + +

      +Support for JPEG compression is controlled by JPEG_SUPPORT. +The JPEG codec that comes with libtiff is designed for +use with release 5 or later of the Independent JPEG Group's freely +available software distribution. +This software can be retrieved from the directory +ftp.uu.net:/graphics/jpeg/. + + +

      +NOTE: +Enabling JPEG support automatically enables support for +the TIFF 6.0 colorimetry and YCbCr-related tags. + +

      +Experimental support for the deflate algorithm is controlled by +DEFLATE_SUPPORT. +The deflate codec that comes with libtiff is designed +for use with version 0.99 or later of the freely available +libz library written by Jean-loup Gailly and Mark Adler. +The data format used by this library is described +in the files +zlib-3.1.doc, +and +deflate-1.1.doc, +available in the directory +ftp.uu.net:/pub/archiving/zip/doc. +The library can be retried from the directory +ftp.uu.net:/pub/archiving/zip/zlib/ +(or try quest.jpl.nasa.gov:/beta/zlib/). + +

      +NOTE: +The deflate algorithm is experimental. Do not expect +to exchange files using this compression scheme; +it is included only because the similar, and more common, +LZW algorithm is claimed to be governed by licensing restrictions. + + +

      +By default tiffconf.h defines +COLORIMETRY_SUPPORT, +YCBCR_SUPPORT, +and +CMYK_SUPPORT. + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      DefineDescription
      CCITT_SUPPORTCCITT Group 3 and 4 algorithms (compression codes 2, 3, 4, + and 32771)
      PACKBITS_SUPPORTMacintosh PackBits algorithm (compression 32773)
      LZW_SUPPORTLempel-Ziv & Welch (LZW) algorithm (compression 5)
      THUNDER_SUPPORT4-bit +run-length encoding scheme from ThunderScan (compression 32809)
      NEXT_SUPPORT2-bit encoding scheme used by NeXT (compression 32766)
      OJPEG_SUPPORTobsolete JPEG scheme defined in the 6.0 spec (compression 6)
      JPEG_SUPPORTcurrent JPEG scheme defined in TTN2 (compression 7)
      ZIP_SUPPORTexperimental Deflate scheme (compression 32946)
      PIXARLOG_SUPPORTPixar's compression scheme for high-resolution color images (compression 32909)
      SGILOG_SUPPORTSGI's compression scheme for high-resolution color images (compression 34676 and 34677)
      COLORIMETRY_SUPPORTsupport for the TIFF 6.0 colorimetry tags
      YCBCR_SUPPORTsupport for the TIFF 6.0 YCbCr-related tags
      CMYK_SUPPORTsupport for the TIFF 6.0 CMYK-related tags
      ICC_SUPPORTsupport for the ICC Profile tag; see +The ICC Profile Format Specification, +Annex B.3 "Embedding ICC Profiles in TIFF Files"; +available at +http://www.color.org +
      + + +


      General Portability Comments

      + +This software is developed on Silicon Graphics UNIX +systems (big-endian, MIPS CPU, 32-bit ints, +IEEE floating point). +The configure shell script generates the appropriate +include files and make files for UNIX systems. +Makefiles exist for non-UNIX platforms that the +code runs on -- this work has mostly been done by other people. + +

      +In general, the code is guaranteed to work only on SGI machines. +In practice it is highly portable to any 32-bit or 64-bit system and much +work has been done to insure portability to 16-bit systems. +If you encounter portability problems please return fixes so +that future distributions can be improved. + +

      +The software is written to assume an ANSI C compilation environment. +If your compiler does not support ANSI function prototypes, const, +and <stdarg.h> then you will have to make modifications to the +software. In the past I have tried to support compilers without const +and systems without <stdarg.h>, but I am +no longer interested in these +antiquated environments. With the general availability of +the freely available GCC compiler, I +see no reason to incorporate modifications to the software for these +purposes. + +

      +An effort has been made to isolate as many of the +operating system-dependencies +as possible in two files: tiffcomp.h and +libtiff/tif_<os>.c. The latter file contains +operating system-specific routines to do I/O and I/O-related operations. +The UNIX (tif_unix.c), +Macintosh (tif_apple.c), +and VMS (tif_vms.c) +code has had the most use; +the MS/DOS support (tif_msdos.c) assumes +some level of UNIX system call emulation (i.e. +open, +read, +write, +fstat, +malloc, +free). + +

      +Native CPU byte order is determined on the fly by +the library and does not need to be specified. +The HOST_FILLORDER and HOST_BIGENDIAN +definitions are not currently used, but may be employed by +codecs for optimization purposes. + +

      +The following defines control general portability: + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      BSDTYPESDefine this if your system does NOT define the + usual BSD typedefs: u_char, + u_short, u_int, u_long.
      HAVE_IEEEFPDefine this as 0 or 1 according to the floating point + format suported by the machine. If your machine does + not support IEEE floating point then you will need to + add support to tif_machdep.c to convert between the + native format and IEEE format.
      HAVE_MMAPDefine this if there is mmap-style support for +mapping files into memory (used only to read data).
      HOST_FILLORDERDefine the native CPU bit order: one of FILLORDER_MSB2LSB + or FILLORDER_LSB2MSB
      HOST_BIGENDIANDefine the native CPU byte order: 1 if big-endian (Motorola) + or 0 if little-endian (Intel); this may be used + in codecs to optimize code
      + +

      +On UNIX systems HAVE_MMAP is defined through the running of +the configure script; otherwise support for memory-mapped +files is disabled. +Note that tiffcomp.h defines HAVE_IEEEFP to be +1 (BSDTYPES is not defined). + + +


      Types and Portability

      + +The software makes extensive use of C typedefs to promote portability. +Two sets of typedefs are used, one for communication with clients +of the library and one for internal data structures and parsing of the +TIFF format. There are interactions between these two to be careful +of, but for the most part you should be able to deal with portability +purely by fiddling with the following machine-dependent typedefs: + + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      uint88-bit unsigned integertiff.h
      int88-bit signed integertiff.h
      uint1616-bit unsigned integertiff.h
      int1616-bit signed integertiff.h
      uint3232-bit unsigned integertiff.h
      int3232-bit signed integertiff.h
      dblparam_tpromoted type for floatstiffcomp.h
      + +

      +(to clarify dblparam_t, it is the type that float parameters are +promoted to when passed by value in a function call.) + +

      +The following typedefs are used throughout the library and interfaces +to refer to certain objects whose size is dependent on the TIFF image +structure: + + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      typedef unsigned int ttag_t; directory tag
      typedef uint16 tdir_t; directory index
      typedef uint16 tsample_t; sample number
      typedef uint32 tstrip_t; strip number
      typedef uint32 ttile_t; tile number
      typedef int32 tsize_t; i/o size in bytes
      typedef void* tdata_t; image data ref
      typedef void* thandle_t; client data handle
      typedef int32 toff_t; file offset (should be off_t)
      typedef unsigned char* tidata_t; internal image data
      + +

      +Note that tstrip_t, ttile_t, and tsize_t +are constrained to be +no more than 32-bit quantities by 32-bit fields they are stored +in in the TIFF image. Likewise tsample_t is limited by the 16-bit +field used to store the SamplesPerPixel tag. tdir_t +constrains +the maximum number of IFDs that may appear in an image and may +be an arbitrary size (without penalty). ttag_t must be either +int, unsigned int, pointer, or double +because the library uses a varargs +interface and ANSI C restricts the type of the parameter before an +ellipsis to be a promoted type. toff_t is defined as +int32 because +TIFF file offsets are (unsigned) 32-bit quantities. A signed +value is used because some interfaces return -1 on error (sigh). +Finally, note that tidata_t is used internally to the library to +manipulate internal data. User-specified data references are +passed as opaque handles and only cast at the lowest layers where +their type is presumed. + + +


      General Comments

      + +The library is designed to hide as much of the details of TIFF from +applications as +possible. In particular, TIFF directories are read in their entirety +into an internal format. Only the tags known by the library are +available to a user and certain tag data may be maintained that a user +does not care about (e.g. transfer function tables). + +


      Adding New Tags

      + +To add support for a new directory tag you have three options. If your +tag is specific to a compression algorithm, see below. If you have a lot +of tags you may want to try using Niles Ritter's runtime tag-extension +scheme in the "contrib/tags" directory, which makes the changes +orthogonal to the main libtiff code. Otherwise use +the following guidelines to add support to the ``core library''. + +
        +
      1. Define the tag in tiff.h. +
      2. Add a field to the directory structure in tif_dir.h + and define a FIELD_* bit (also update the definition of + FIELD_CODEC to reflect your addition). +
      3. Add an entry in the TIFFFieldInfo array defined at the top of + tif_dirinfo.c. + Note that you must keep this array sorted by tag + number and that the widest variant entry for a tag should come + first (e.g. LONG before SHORT). +
      4. Add entries in _TIFFVSetField() and _TIFFVGetField() + for the new tag. +
      5. (optional) If the value associated with the tag is not a scalar value + (e.g. the array for TransferFunction) and requires + special processing, + then add the appropriate code to TIFFReadDirectory() and + TIFFWriteDirectory(). You're best off finding a similar tag and + cribbing code. +
      6. Add support to TIFFPrintDirectory() in tif_print.c + to print the tag's value. +
      + +

      +If you want to maintain portability, beware of making assumptions +about data types. Use the typedefs (uint16, etc. when dealing with +data on disk and t*_t when stuff is in memory) and be careful about +passing items through printf or similar vararg interfaces. + +


      Adding New Builtin Codecs

      + +To add builtin support for a new compression algorithm, you can either +use the "tag-extension" trick to override the handling of the +TIFF Compression tag (see Adding New Tags, above), +or do the following to add support directly to the core library: + +
        +
      1. Define the tag value in tiff.h. +
      2. Edit the file tif_codec.c to add an entry to the + _TIFFBuiltinCODECS array (see how other algorithms are handled). +
      3. Add the appropriate function prototype declaration to + tiffiop.h (close to the bottom). +
      4. Create a file with the compression scheme code, by convention files + are named tif_*.c (except perhaps on some systems where the + tif_ prefix pushes some filenames over 14 chars. +
      5. Edit Makefile.in (and any other Makefiles) + to include the new source file. +
      + +

      +A codec, say foo, can have many different entry points: + +

      +TIFFInitfoo(tif, scheme)/* initialize scheme and setup entry points in tif */
      +fooSetupDecode(tif)	/* called once per IFD after tags has been frozen */
      +fooPreDecode(tif, sample)/* called once per strip/tile, after data is read,
      +			    but before the first row is decoded */
      +fooDecode*(tif, bp, cc, sample)/* decode cc bytes of data into the buffer */
      +    fooDecodeRow(...)	/* called to decode a single scanline */
      +    fooDecodeStrip(...)	/* called to decode an entire strip */
      +    fooDecodeTile(...)	/* called to decode an entire tile */
      +fooSetupEncode(tif)	/* called once per IFD after tags has been frozen */
      +fooPreEncode(tif, sample)/* called once per strip/tile, before the first row in
      +			    a strip/tile is encoded */
      +fooEncode*(tif, bp, cc, sample)/* encode cc bytes of user data (bp) */
      +    fooEncodeRow(...)	/* called to decode a single scanline */
      +    fooEncodeStrip(...)	/* called to decode an entire strip */
      +    fooEncodeTile(...)	/* called to decode an entire tile */
      +fooPostEncode(tif)	/* called once per strip/tile, just before data is written */
      +fooSeek(tif, row)	/* seek forwards row scanlines from the beginning
      +			   of a strip (row will always be >0 and <rows/strip */
      +fooCleanup(tif)		/* called when compression scheme is replaced by user */
      +
      + +

      +Note that the encoding and decoding variants are only needed when +a compression algorithm is dependent on the structure of the data. +For example, Group 3 2D encoding and decoding maintains a reference +scanline. The sample parameter identifies which sample is to be +encoded or decoded if the image is organized with PlanarConfig=2 +(separate planes). This is important for algorithms such as JPEG. +If PlanarConfig=1 (interleaved), then sample will always be 0. + + +


      Adding New Codec-private Tags

      + +To add tags that are meaningful only when a particular compression +algorithm is used follow these steps: + +
        +
      1. Define the tag in tiff.h. +
      2. Allocate storage for the tag values in the private state block of + the codec. +
      3. Insure the state block is created when the codec is initialized. +
      4. At TIFFInitfoo time override the method pointers in the + TIFF structure + for getting, setting and printing tag values. For example, +
        +    sp->vgetparent = tif->tif_vgetfield;
        +    tif->tif_vgetfield = fooVGetField;	/* hook for codec tags */
        +    sp->vsetparent = tif->tif_vsetfield;
        +    tif->tif_vsetfield = fooVSetField;	/* hook for codec tags */
        +    tif->tif_printdir = fooPrintDir;	/* hook for codec tags */
        +
        + (Actually you may decide not to override the + tif_printdir method, but rather just specify it). +
      5. Create a private TIFFFieldInfo array for your tags and + merge them into the core tags at initialization time using + _TIFFMergeFieldInfo; e.g. +
        +    _TIFFMergeFieldInfo(tif, fooFieldInfo, N(fooFieldInfo));
        +
        + (where N is a macro used liberaly throughout the distributed code). +
      6. Fill in the get and set routines. Be sure to call the parent method + for tags that you are not handled directly. Also be sure to set the + FIELD_* bits for tags that are to be written to the file. Note that + you can create ``pseudo-tags'' by defining tags that are processed + exclusively in the get/set routines and never written to file (see + the handling of TIFFTAG_FAXMODE in tif_fax3.c + for an example of this). +
      7. Fill in the print routine, if appropriate. +
      + +Note that space has been allocated in the FIELD_* bit space for +codec-private tags. Define your bits as FIELD_CODEC+<offset> to +keep them away from the core tags. If you need more tags than there +is room for, just increase FIELD_SETLONGS at the top of +tiffiop.h. + + +


      Other Comments

      + +The library handles most I/O buffering. There are two data buffers +when decoding data: a raw data buffer that holds all the data in a +strip, and a user-supplied scanline buffer that compression schemes +place decoded data into. When encoding data the data in the +user-supplied scanline buffer is encoded into the raw data buffer (from +where it is written). Decoding routines should never have to explicitly +read data -- a full strip/tile's worth of raw data is read and scanlines +never cross strip boundaries. Encoding routines must be cognizant of +the raw data buffer size and call TIFFFlushData1() when necessary. +Note that any pending data is automatically flushed when a new strip/tile is +started, so there's no need do that in the tif_postencode routine (if +one exists). Bit order is automatically handled by the library when +a raw strip or tile is filled. If the decoded samples are interpreted +by the decoding routine before they are passed back to the user, then +the decoding logic must handle byte-swapping by overriding the +tif_postdecode +routine (set it to TIFFNoPostDecode) and doing the required work +internally. For an example of doing this look at the horizontal +differencing code in the routines in tif_predict.c. + +

      +The variables tif_rawcc, tif_rawdata, and +tif_rawcp in a TIFF structure +are associated with the raw data buffer. tif_rawcc must be non-zero +for the library to automatically flush data. The variable +tif_scanlinesize is the size a user's scanline buffer should be. The +variable tif_tilesize is the size of a tile for tiled images. This +should not normally be used by compression routines, except where it +relates to the compression algorithm. That is, the cc parameter to the +tif_decode* and tif_encode* +routines should be used in terminating +decompression/compression. This ensures these routines can be used, +for example, to decode/encode entire strips of data. + +

      +In general, if you have a new compression algorithm to add, work from +the code for an existing routine. In particular, +tif_dumpmode.c +has the trivial code for the "nil" compression scheme, +tif_packbits.c is a +simple byte-oriented scheme that has to watch out for buffer +boundaries, and tif_lzw.c has the LZW scheme that has the most +complexity -- it tracks the buffer boundary at a bit level. +Of course, using a private compression scheme (or private tags) limits +the portability of your TIFF files. + +

      +


      + +Last updated: $Date: 2000/06/24 19:10:16 $ + + + + diff --git a/html/intro.html b/html/intro.html new file mode 100755 index 0000000..baa17b1 --- /dev/null +++ b/html/intro.html @@ -0,0 +1,68 @@ + + + +Introduction to the TIFF Documentation + + + + +

      + +Introduction to the TIFF Documentation +

      + + +

      +The following definitions are used throughout this documentation. +They are consistent with the terminology used in the TIFF 6.0 specification. + +

      +
      Sample +
      The unit of information stored in an image; often called a + channel elsewhere. Sample values are numbers, usually unsigned + integers, but possibly in some other format if the SampleFormat + tag is specified in a TIFF +
      Pixel +
      A collection of one or more samples that go together. +
      Row +
      An Nx1 rectangular collection of pixels. +
      Tile +
      An NxM rectangular organization of data (or pixels). +
      Strip +
      A tile whose width is the full image width. +
      Compression +
      A scheme by which pixel or sample data are stored in + an encoded form, specifically with the intent of reducing the + storage cost. +
      Codec +
      Software that implements the decoding and encoding algorithms + of a compression scheme. + + +

      +In order to better understand how TIFF works (and consequently this +software) it is important to recognize the distinction between the +physical organization of image data as it is stored in a TIFF and how +the data is interpreted and manipulated as pixels in an image. TIFF +supports a wide variety of storage and data compression schemes that +can be used to optimize retrieval time and/or minimize storage space. +These on-disk formats are independent of the image characteristics; it +is the responsibility of the TIFF reader to process the on-disk storage +into an in-memory format suitable for an application. Furthermore, it +is the responsibility of the application to properly interpret the +visual characteristics of the image data. TIFF defines a framework for +specifying the on-disk storage format and image characteristics with +few restrictions. This permits significant complexity that can be +daunting. Good applications that handle TIFF work by handling as wide +a range of storage formats as possible, while constraining the +acceptable image characteristics to those that make sense for the +application. + + +

      +


      + +Last updated: $Date: 2000/06/24 19:10:16 $ + + + diff --git a/html/libtiff.html b/html/libtiff.html new file mode 100755 index 0000000..b5154f0 --- /dev/null +++ b/html/libtiff.html @@ -0,0 +1,728 @@ + + + +Using The TIFF Library + + + + +

      + +Using The TIFF Library +

      + +

      +libtiff is a set of C functions (a library) that support +the manipulation of TIFF image files. +The library requires an ANSI C compilation environment for building +and presumes an ANSI C environment for use. + +

      +libtiff +provides interfaces to image data at several layers of abstraction (and cost). +At the highest level image data can be read into an 8-bit/sample, +ABGR pixel raster format without regard for the underlying data organization, +colorspace, or compression scheme. Below this high-level interface +the library provides scanline-, strip-, and tile-oriented interfaces that +return data decompressed but otherwise untransformed. These interfaces +require that the application first identify the organization of stored +data and select either a strip-based or tile-based API for manipulating +data. At the lowest level the library +provides access to the raw uncompressed strips or tiles, +returning the data exactly as it appears in the file. + +

      +The material presented in this chapter is a basic introduction +to the capabilities of the library; it is not an attempt to describe +everything a developer needs to know about the library or about TIFF. +Detailed information on the interfaces to the library are given in +the +UNIX manual pages that accompany this software. + +

      +The following sections are found in this chapter: + +

      + + +


      How to tell which version you have

      + +The software version can be found by looking at the file named +VERSION +that is located at the top of the source tree; the precise alpha number +is given in the file dist/tiff.alpha. +If you have need to refer to this +specific software, you should identify it as: + +
      +    TIFF <version> <alpha>
      +
      + +where <version> is whatever you get from +"cat VERSION" and <alpha> is +what you get from "cat dist/tiff.alpha". + +

      +Within an application that uses libtiff the TIFFGetVersion +routine will return a pointer to a string that contains software version +information. +The library include file <tiffio.h> contains a C pre-processor +define TIFFLIB_VERSION that can be used to check library +version compatiblity at compile time. + +


      Library Datatypes

      + +libtiff defines a portable programming interface through the +use of a set of C type definitions. +These definitions, defined in in the files tiff.h and +tiffio.h, +isolate the libtiff API from the characteristics +of the underlying machine. +To insure portable code and correct operation, applications that use +libtiff should use the typedefs and follow the function +prototypes for the library API. + +


      Memory Management

      + +libtiff uses a machine-specific set of routines for managing +dynamically allocated memory. +_TIFFmalloc, _TIFFrealloc, and _TIFFfree +mimic the normal ANSI C routines. +Any dynamically allocated memory that is to be passed into the library +should be allocated using these interfaces in order to insure pointer +compatibility on machines with a segmented architecture. +(On 32-bit UNIX systems these routines just call the normal malloc, +realloc, and free routines in the C library.) + +

      +To deal with segmented pointer issues libtiff also provides +_TIFFmemcpy, _TIFFmemset, and _TIFFmemmove +routines that mimic the equivalent ANSI C routines, but that are +intended for use with memory allocated through _TIFFmalloc +and _TIFFrealloc. + +


      Error Handling

      + +libtiff handles most errors by returning an invalid/erroneous +value when returning from a function call. +Various diagnostic messages may also be generated by the library. +All error messages are directed to a single global error handler +routine that can be specified with a call to TIFFSetErrorHandler. +Likewise warning messages are directed to a single handler routine +that can be specified with a call to TIFFSetWarningHandler + +


      Basic File Handling

      + +The library is modeled after the normal UNIX stdio library. +For example, to read from an existing TIFF image the +file must first be opened: + +
        +#include "tiffio.h" +main() +{ + TIFF* tif = TIFFOpen("foo.tif", "r"); + ... do stuff ... + TIFFClose(tif); +} +
      + +The handle returned by TIFFOpen is opaque, that is +the application is not permitted to know about its contents. +All subsequent library calls for this file must pass the handle +as an argument. + +

      +To create or overwrite a TIFF image the file is also opened, but with +a "w" argument: + +

        +#include "tiffio.h" +main() +{ + TIFF* tif = TIFFOpen("foo.tif", "w"); + ... do stuff ... + TIFFClose(tif); +} +
      + +If the file already exists it is first truncated to zero length. + +

      + +Note that unlike the stdio library TIFF image files may not be +opened for both reading and writing; +there is no support for altering the contents of a TIFF file. + + +

      +libtiff buffers much information associated with writing a +valid TIFF image. Consequently, when writing a TIFF image it is necessary +to always call TIFFClose or TIFFFlush to flush any +buffered information to a file. Note that if you call TIFFClose +you do not need to call TIFFFlush. + +


      TIFF Directories

      + +TIFF supports the storage of multiple images in a single file. +Each image has an associated data structure termed a directory +that houses all the information about the format and content of the +image data. +Images in a file are usually related but they do not need to be; it +is perfectly alright to store a color image together with a black and +white image. +Note however that while images may be related their directories are +not. +That is, each directory stands on its own; their is no need to read +an unrelated directory in order to properly interpret the contents +of an image. + +

      +libtiff provides several routines for reading and writing +directories. In normal use there is no need to explicitly +read or write a directory: the library automatically reads the first +directory in a file when opened for reading, and directory information +to be written is automatically accumulated and written when writing +(assuming TIFFClose or TIFFFlush are called). + +

      +For a file open for reading the TIFFSetDirectory routine can +be used to select an arbitrary directory; directories are referenced by +number with the numbering starting at 0. Otherwise the +TIFFReadDirectory and TIFFWriteDirectory routines can +be used for sequential access to directories. +For example, to count the number of directories in a file the following +code might be used: + +

        +#include "tiffio.h" +main(int argc, char* argv[]) +{ + TIFF* tif = TIFFOpen(argv[1], "r"); + if (tif) { + int dircount = 0; + do { + dircount++; + } while (TIFFReadDirectory(tif)); + printf("%d directories in %s\n", dircount, argv[1]); + TIFFClose(tif); + } + exit(0); +} +
      + +

      +Finally, note that there are several routines for querying the +directory status of an open file: +TIFFCurrentDirectory returns the index of the current +directory and +TIFFLastDirectory returns an indication of whether the +current directory is the last directory in a file. +There is also a routine, TIFFPrintDirectory, that can +be called to print a formatted description of the contents of +the current directory; consult the manual page for complete details. + +


      TIFF Tags

      + +Image-related information such as the image width and height, number +of samples, orientation, colorimetric information, etc. +are stored in each image +directory in fields or tags. +Tags are identified by a number that is usually a value registered +with the Aldus (now Adobe) Corporation. +Beware however that some vendors write +TIFF images with tags that are unregistered; in this case interpreting +their contents is usually a waste of time. + +

      +libtiff reads the contents of a directory all at once +and converts the on-disk information to an appropriate in-memory +form. While the TIFF specification permits an arbitrary set of +tags to be defined and used in a file, the library only understands +a limited set of tags. +Any unknown tags that are encountered in a file are ignored. +There is a mechanism to extend the set of tags the library handles +without modifying the library itself; +this is described elsewhere. + +

      +libtiff provides two interfaces for getting and setting tag +values: TIFFGetField and TIFFSetField. +These routines use a variable argument list-style interface to pass +parameters of different type through a single function interface. +The get interface takes one or more pointers to memory locations +where the tag values are to be returned and also returns one or +zero according to whether the requested tag is defined in the directory. +The set interface takes the tag values either by-reference or +by-value. +The TIFF specification defines +default values for some tags. +To get the value of a tag, or its default value if it is undefined, +the TIFFGetFieldDefaulted interface may be used. + +

      +The manual pages for the tag get and set routines specifiy the exact data types +and calling conventions required for each tag supported by the library. + +


      TIFF Compression Schemes

      + +libtiff includes support for a wide variety of +data compression schemes. +In normal operation a compression scheme is automatically used when +the TIFF Compression tag is set, either by opening a file +for reading, or by setting the tag when writing. + +

      +Compression schemes are implemented by software modules termed codecs +that implement decoder and encoder routines that hook into the +core library i/o support. +Codecs other than those bundled with the library can be registered +for use with the TIFFRegisterCODEC routine. +This interface can also be used to override the core-library +implementation for a compression scheme. + +


      Byte Order

      + +The TIFF specification says, and has always said, that +a correct TIFF +reader must handle images in big-endian and little-endian byte order. +libtiff conforms in this respect. +Consequently there is no means to force a specific +byte order for the data written to a TIFF image file (data is +written in the native order of the host CPU unless appending to +an existing file, in which case it is written in the byte order +specified in the file). + + +


      Data Placement

      + +The TIFF specification requires that all information except an +8-byte header can be placed anywhere in a file. +In particular, it is perfectly legitimate for directory information +to be written after the image data itself. +Consequently TIFF is inherently not suitable for passing through a +stream-oriented mechanism such as UNIX pipes. +Software that require that data be organized in a file in a particular +order (e.g. directory information before image data) does not +correctly support TIFF. +libtiff provides no mechanism for controlling the placement +of data in a file; image data is typically written before directory +information. + +


      TIFFRGBAImage Support

      + +libtiff provides a high-level interface for reading image +data from a TIFF file. This interface handles the details of +data organization and format for a wide variety of TIFF files; +at least the large majority of those files that one would normally +encounter. Image data is, by default, returned as ABGR +pixels packed into 32-bit words (8 bits per sample). Rectangular +rasters can be read or data can be intercepted at an intermediate +level and packed into memory in a format more suitable to the +application. +The library handles all the details of the format of data stored on +disk and, in most cases, if any colorspace conversions are required: +bilevel to RGB, greyscale to RGB, CMYK to RGB, YCbCr to RGB, 16-bit +samples to 8-bit samples, associated/unassociated alpha, etc. + +

      +There are two ways to read image data using this interface. If +all the data is to be stored in memory and manipulated at once, +then the routine TIFFReadRGBAImage can be used: + +

        +#include "tiffio.h" +main(int argc, char* argv[]) +{ + TIFF* tif = TIFFOpen(argv[1], "r"); + if (tif) { + uint32 w, h; + size_t npixels; + uint32* raster; + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); + npixels = w * h; + raster = (uint32*) _TIFFmalloc(npixels * sizeof (uint32)); + if (raster != NULL) { + if (TIFFReadRGBAImage(tif, w, h, raster, 0)) { + ...process raster data... + } + _TIFFfree(raster); + } + TIFFClose(tif); + } + exit(0); +} +
      + +Note above that _TIFFmalloc is used to allocate memory for +the raster passed to TIFFReadRGBAImage; this is important +to insure the ``appropriate type of memory'' is passed on machines +with segmented architectures. + +

      +Alternatively, TIFFReadRGBAImage can be replaced with a +more low-level interface that permits an application to have more +control over this reading procedure. The equivalent to the above +is: + +

        +#include "tiffio.h" +main(int argc, char* argv[]) +{ + TIFF* tif = TIFFOpen(argv[1], "r"); + if (tif) { + TIFFRGBAImage img; + char emsg[1024]; + + if (TIFFRGBAImageBegin(&img, tif, 0, emsg)) { + size_t npixels; + uint32* raster; + + npixels = img.width * img.height; + raster = (uint32*) _TIFFmalloc(npixels * sizeof (uint32)); + if (raster != NULL) { + if (TIFFRGBAImageGet(&img, raster, img.width, img.width)) { + ...process raster data... + } + _TIFFfree(raster); + } + TIFFRGBAImageEnd(&img); + } else + TIFFError(argv[1], emsg); + TIFFClose(tif); + } + exit(0); +} +
      + +However this usage does not take advantage of the more fine-grained +control that's possible. That is, by using this interface it is +possible to: + +
        +
      • repeatedly fetch (and manipulate) an image without opening + and closing the file +
      • interpose a method for packing raster pixel data according to + application-specific needs (or write the data at all) +
      • interpose methods that handle TIFF formats that are not already + handled by the core library +
      + +The first item means that, for example, image viewers that want to +handle multiple files can cache decoding information in order to +speedup the work required to display a TIFF image. + +

      +The second item is the main reason for this interface. By interposing +a ``put method'' (the routine that is called to pack pixel data in +the raster) it is possible share the core logic that understands how +to deal with TIFF while packing the resultant pixels in a format that +is optimized for the application. This alternate format might be very +different than the 8-bit per sample ABGR format the library writes by +default. For example, if the application is going to display the image +on an 8-bit colormap display the put routine might take the data and +convert it on-the-fly to the best colormap indices for display. + +

      +The last item permits an application to extend the library +without modifying the core code. +By overriding the code provided an application might add support +for some esoteric flavor of TIFF that it needs, or it might +substitute a packing routine that is able to do optimizations +using application/environment-specific information. + +

      +The TIFF image viewer found in tools/sgigt.c is an example +of an application that makes use of the TIFFRGBAImage +support. + +


      Scanline-based Image I/O

      + +The simplest interface provided by libtiff is a +scanline-oriented interface that can be used to read TIFF +images that have their image data organized in strips +(trying to use this interface to read data written in tiles +will produce errors.) +A scanline is a one pixel high row of image data whose width +is the width of the image. +Data is returned packed if the image data is stored with samples +packed together, or as arrays of separate samples if the data +is stored with samples separated. +The major limitation of the scanline-oriented interface, other +than the need to first identify an existing file as having a +suitable organization, is that random access to individual +scanlines can only be provided when data is not stored in a +compressed format, or when the number of rows in a strip +of image data is set to one (RowsPerStrip is one). + +

      +Two routines are provided for scanline-based i/o: +TIFFReadScanline +and +TIFFWriteScanline. +For example, to read the contents of a file that +is assumed to be organized in strips, the following might be used: + +

        +#include "tiffio.h" +main() +{ + TIFF* tif = TIFFOpen("myfile.tif", "r"); + if (tif) { + uint32 imagelength; + tdata_t buf; + uint32 row; + + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imagelength); + buf = _TIFFmalloc(TIFFScanlineSize(tif)); + for (row = 0; row < imagelength; row++) + TIFFReadScanline(tif, buf, row); + _TIFFfree(buf); + TIFFClose(tif); + } +} +
      + +TIFFScanlineSize returns the number of bytes in +a decoded scanline, as returned by TIFFReadScanline. +Note however that if the file had been create with samples +written in separate planes, then the above code would only +read data that contained the first sample of each pixel; +to handle either case one might use the following instead: + +
        +#include "tiffio.h" +main() +{ + TIFF* tif = TIFFOpen("myfile.tif", "r"); + if (tif) { + uint32 imagelength; + tdata_t buf; + uint32 row; + + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imagelength); + TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &config); + buf = _TIFFmalloc(TIFFScanlineSize(tif)); + if (config == PLANARCONFIG_CONTIG) { + for (row = 0; row < imagelength; row++) + TIFFReadScanline(tif, buf, row); + } else if (config == PLANARCONFIG_SEPARATE) { + uint16 s, nsamples; + + TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &nsamples); + for (s = 0; s < nsamples; s++) + for (row = 0; row < imagelength; row++) + TIFFReadScanline(tif, buf, row, s); + } + _TIFFfree(buf); + TIFFClose(tif); + } +} +
      + +Beware however that if the following code were used instead to +read data in the case PLANARCONFIG_SEPARATE, + +
        + for (row = 0; row < imagelength; row++) + for (s = 0; s < nsamples; s++) + TIFFReadScanline(tif, buf, row, s); +
      + +then problems would arise if RowsPerStrip was not one +because the order in which scanlines are requested would require +random access to data within strips (something that is not supported +by the library when strips are compressed). + +


      Strip-oriented Image I/O

      + +The strip-oriented interfaces provided by the library provide +access to entire strips of data. Unlike the scanline-oriented +calls, data can be read or written compressed or uncompressed. +Accessing data at a strip (or tile) level is often desirable +because there are no complications with regard to random access +to data within strips. + +

      +A simple example of reading an image by strips is: + +

        +#include "tiffio.h" +main() +{ + TIFF* tif = TIFFOpen("myfile.tif", "r"); + if (tif) { + tdata_t buf; + tstrip_t strip; + + buf = _TIFFmalloc(TIFFStripSize(tif)); + for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) + TIFFReadEncodedStrip(tif, strip, buf, (tsize_t) -1); + _TIFFfree(buf); + TIFFClose(tif); + } +} +
      + +Notice how a strip size of -1 is used; TIFFReadEncodedStrip +will calculate the appropriate size in this case. + +

      +The above code reads strips in the order in which the +data is physically stored in the file. If multiple samples +are present and data is stored with PLANARCONFIG_SEPARATE +then all the strips of data holding the first sample will be +read, followed by strips for the second sample, etc. + +

      +Finally, note that the last strip of data in an image may have fewer +rows in it than specified by the RowsPerStrip tag. A +reader should not assume that each decoded strip contains a full +set of rows in it. + +

      +The following is an example of how to read raw strips of data from +a file: + +

        +#include "tiffio.h" +main() +{ + TIFF* tif = TIFFOpen("myfile.tif", "r"); + if (tif) { + tdata_t buf; + tstrip_t strip; + uint32* bc; + uint32 stripsize; + + TIFFGetField(tif, TIFFTAG_STRIPBYTECOUNTS, &bc); + stripsize = bc[0]; + buf = _TIFFmalloc(stripsize); + for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) { + if (bc[strip] > stripsize) { + buf = _TIFFrealloc(buf, bc[strip]); + stripsize = bc[strip]; + } + TIFFReadRawStrip(tif, strip, buf, bc[strip]); + } + _TIFFfree(buf); + TIFFClose(tif); + } +} +
      + +As above the strips are read in the order in which they are +physically stored in the file; this may be different from the +logical ordering expected by an application. + +


      Tile-oriented Image I/O

      + +Tiles of data may be read and written in a manner similar to strips. +With this interface, an image is +broken up into a set of rectangular areas that may have dimensions +less than the image width and height. All the tiles +in an image have the same size, and the tile width and length must each +be a multiple of 16 pixels. Tiles are ordered left-to-right and +top-to-bottom in an image. As for scanlines, samples can be packed +contiguously or separately. When separated, all the tiles for a sample +are colocated in the file. That is, all the tiles for sample 0 appear +before the tiles for sample 1, etc. + +

      +Tiles and strips may also be extended in a z dimension to form +volumes. Data volumes are organized as "slices". That is, all the +data for a slice is colocated. Volumes whose data is organized in +tiles can also have a tile depth so that data can be organized in +cubes. + +

      +There are actually two interfaces for tiles. +One interface is similar to scanlines, to read a tiled image, +code of the following sort might be used: + +

        +main() +{ + TIFF* tif = TIFFOpen("myfile.tif", "r"); + if (tif) { + uint32 imageWidth, imageLength; + uint32 tileWidth, tileLength; + uint32 x, y; + tdata_t buf; + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &imageWidth); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imageLength); + TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tileWidth); + TIFFGetField(tif, TIFFTAG_TILELENGTH, &tileLength); + buf = _TIFFmalloc(TIFFTileSize(tif)); + for (y = 0; y < imageLength; y += tileLength) + for (x = 0; x < imageWidth; x += tileWidth) + TIFFReadTile(tif, buf, x, y, 0); + _TIFFfree(buf); + TIFFClose(tif); + } +} +
      + +(once again, we assume samples are packed contiguously.) + +

      +Alternatively a direct interface to the low-level data is provided +a la strips. Tiles can be read with +TIFFReadEncodedTile or +TIFFReadRawTile, +and written with +TIFFWriteEncodedTile or +TIFFWriteRawTile. +For example, to read all the tiles in an image: + +

        +#include "tiffio.h" +main() +{ + TIFF* tif = TIFFOpen("myfile.tif", "r"); + if (tif) { + tdata_t buf; + ttile_t tile; + + buf = _TIFFmalloc(TIFFTileSize(tif)); + for (tile = 0; tile < TIFFNumberOfTiles(tif); tile++) + TIFFReadEncodedTile(tif, tile, buf, (tsize_t) -1); + _TIFFfree(buf); + TIFFClose(tif); + } +} +
      + + + +


      Other Stuff

      + +

      +Some other stuff will almost certainly go here... + +

      +


      + +Last updated: $Date: 2000/06/24 19:10:16 $ + + + diff --git a/html/man/TIFFClose.3t.html b/html/man/TIFFClose.3t.html new file mode 100755 index 0000000..5dfbe91 --- /dev/null +++ b/html/man/TIFFClose.3t.html @@ -0,0 +1,69 @@ + +Manpage of TIFFClose + +

      TIFFClose

      +Section: Misc. Reference Manual Pages (3T)
      Updated: May 2, 1990
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFClose - close a previously opened +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +void TIFFClose(TIFF* tif) + +  +

      DESCRIPTION

      + +TIFFClose + +closes a file that was previously opened with +TIFFOpen(3T). + +Any buffered data are flushed to the file, including the contents of +the current directory (if modified); and all resources +are reclaimed. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +Likewise, warning messages are directed to the +TIFFWarning(3T) + +routine. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:37 GMT, November 23, 1999 + + diff --git a/html/man/TIFFError.3t.html b/html/man/TIFFError.3t.html new file mode 100755 index 0000000..9668fb6 --- /dev/null +++ b/html/man/TIFFError.3t.html @@ -0,0 +1,97 @@ + +Manpage of TIFFError + +

      TIFFError

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFError, TIFFSetErrorHandler - library error handling interface +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +void TIFFError(const char* module, const char* fmt, ...) + +

      +#include <stdarg.h> + +
      + +typedef void (*TIFFErrorHandler)(const char* module, const char* fmt, va_list ap); + +
      + +TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler handler); + +  +

      DESCRIPTION

      + +TIFFError + +invokes the library-wide error handling function +to (normally) write an error message to the +stderr. + +The +fmt + +parameter is a +printf(3S) + +format string, and any number arguments can be supplied. +The +module + +parameter, if non-zero, is printed before the message; it typically +is used to identify the software module in which an error +is detected. +

      + +Applications that desire to capture control in the event of an error +should use +TIFFSetErrorHandler + +to override the default error handler. +A +NULL +(0) error handling function may be installed to +suppress error messages. +  +

      RETURN VALUES

      + +TIFFSetErrorHandler + +returns a reference to the previous error handling function. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFWarning(3T), + +printf(3S) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:37 GMT, November 23, 1999 + + diff --git a/html/man/TIFFFlush.3t.html b/html/man/TIFFFlush.3t.html new file mode 100755 index 0000000..14e32e9 --- /dev/null +++ b/html/man/TIFFFlush.3t.html @@ -0,0 +1,93 @@ + +Manpage of TIFFFlush + +

      TIFFFlush

      +Section: Misc. Reference Manual Pages (3T)
      Updated: December 16, 1991
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFFlush, TIFFFlushData - flush pending writes to an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +int TIFFFlush(TIFF* tif) + +
      + +int TIFFFlushData(TIFF* tif) + +  +

      DESCRIPTION

      + +TIFFFlush + +causes any pending writes for the specified file (including writes +for the current directory) +to be done. +In normal operation this call is never needed- the library +automatically does any flushing required. +

      + +TIFFFlushData + +flushes any pending image data for the specified file to be written out; +directory-related data are not flushed. +In normal operation this call is never needed- the library +automatically does any flushing required. +  +

      RETURN VALUES

      + +0 is returned if an error is encountered, otherwise 1 is returned. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFWriteEncodedStrip(3T), + +TIFFWriteEncodedTile(3T), + +TIFFWriteRawStrip(3T), + +TIFFWriteRawTile(3T), + +TIFFWriteScanline(3T), + +TIFFWriteTile(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:37 GMT, November 23, 1999 + + diff --git a/html/man/TIFFGetField.3t.html b/html/man/TIFFGetField.3t.html new file mode 100755 index 0000000..d0f8fa3 --- /dev/null +++ b/html/man/TIFFGetField.3t.html @@ -0,0 +1,266 @@ + +Manpage of TIFFGetField + +

      TIFFGetField

      +Section: Misc. Reference Manual Pages (3T)
      Updated: August 22, 1997
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFGetField, TIFFVGetField - get the value(s) of a tag in an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +int TIFFGetField(TIFF* tif, ttag_t tag, ...) + +

      +#include <stdarg.h> + +
      + +int TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap) + +

      +int TIFFGetFieldDefaulted(TIFF* tif, ttag_t tag, ...) + +
      + +int TIFFVGetFieldDefaulted(TIFF* tif, ttag_t tag, va_list ap) + +  +

      DESCRIPTION

      + +TIFFGetField + +returns the value of a tag or pseudo-tag associated with the +the current directory of the open +TIFF +file +tif. + +(A +pseudo-tag + +is a parameter that is used to control the operation of the +TIFF +library but whose value is not read or written to the underlying file.) +The file must have been previously opened with +TIFFOpen(3T). + +The tag is identified by +tag, + +one of the values defined in the include file +tiff.h + +(see also the table below). +The type and number of values returned is dependent +on the tag being requested. +The programming interface uses a variable argument list +as prescribed by the +stdarg(3) + +interface. +The returned values should only be interpreted if +TIFFGetField + +returns 1. +

      + +TIFFVGetField + +is functionally equivalent to +TIFFGetField + +except that it takes a pointer to a variable +argument list. +TIFFVGetField + +is useful for layering interfaces on top of +the functionality provided by +TIFFGetField. + +

      + +TIFFGetFieldDefaulted + +and +TIFFVGetFieldDefaulted + +are identical to +TIFFGetField + +and +TIFFVGetField, + +except that if a tag is not defined in the current directory +and it has a default value, then the default value is returned. +

      + +The tags understood by +libtiff, + +the number of parameter values, and the +types for the returned values are shown below. +The data types are specified as in C and correspond +to the types used to specify tag values to +TIFFSetField(3T). + +Remember that +TIFFGetField + +returns parameter values, so all the listed +data types are pointers to storage where values +should be returned. +Consult the +TIFF +specification for information on the meaning of +each tag and their possible values. +

      + +

      +
      +Tag Name                        Count  Types             Notes
      +
      +TIFFTAG_ARTIST                  1      char**
      +TIFFTAG_BADFAXLINES             1      uint32*
      +TIFFTAG_BITSPERSAMPLE           1      uint16*
      +TIFFTAG_CLEANFAXDATA            1      uint16*
      +TIFFTAG_COLORMAP                3      uint16**          1<<BitsPerSample arrays
      +TIFFTAG_COMPRESSION             1      uint16*
      +TIFFTAG_CONSECUTIVEBADFAXLINES  1      uint32*
      +TIFFTAG_DATATYPE                1      uint16*
      +TIFFTAG_DATETIME                1      char**
      +TIFFTAG_DOCUMENTNAME            1      char**
      +TIFFTAG_DOTRANGE                2      uint16*
      +TIFFTAG_EXTRASAMPLES            2      uint16*,uint16**  count & types array
      +TIFFTAG_FAXMODE                 1      int*              G3/G4 compression pseudo-tag
      +TIFFTAG_FAXFILLFUNC             1      TIFFFaxFillFunc*  G3/G4 compression pseudo-tag
      +TIFFTAG_FILLORDER               1      uint16*
      +TIFFTAG_GROUP3OPTIONS           1      uint32*
      +TIFFTAG_GROUP4OPTIONS           1      uint32*
      +TIFFTAG_HALFTONEHINTS           2      uint16*
      +TIFFTAG_HOSTCOMPUTER            1      char**
      +TIFFTAG_IMAGEDEPTH              1      uint32*
      +TIFFTAG_IMAGEDESCRIPTION        1      char**
      +TIFFTAG_IMAGELENGTH             1      uint32*
      +TIFFTAG_IMAGEWIDTH              1      uint32*
      +TIFFTAG_INKNAMES                1      char**
      +TIFFTAG_INKSET                  1      uint16*
      +TIFFTAG_JPEGTABLES              2      u_short*,void**   count & tables
      +TIFFTAG_JPEGQUALITY             1      int*              JPEG pseudo-tag
      +TIFFTAG_JPEGCOLORMODE           1      int*              JPEG pseudo-tag
      +TIFFTAG_JPEGTABLESMODE          1      int*              JPEG pseudo-tag
      +TIFFTAG_MAKE                    1      char**
      +TIFFTAG_MATTEING                1      uint16*
      +TIFFTAG_MAXSAMPLEVALUE          1      uint16*
      +TIFFTAG_MINSAMPLEVALUE          1      uint16*
      +TIFFTAG_MODEL                   1      char**
      +TIFFTAG_ORIENTATION             1      uint16*
      +TIFFTAG_PAGENAME                1      char**
      +TIFFTAG_PAGENUMBER              2      uint16*
      +TIFFTAG_PHOTOMETRIC             1      uint16*
      +TIFFTAG_PLANARCONFIG            1      uint16*
      +TIFFTAG_PREDICTOR               1      uint16*
      +TIFFTAG_PRIMARYCHROMATICITIES   1      float**           6-entry array
      +TIFFTAG_REFERENCEBLACKWHITE     1      float**           2*SamplesPerPixel array
      +TIFFTAG_RESOLUTIONUNIT          1      uint16*
      +TIFFTAG_ROWSPERSTRIP            1      uint32*
      +TIFFTAG_SAMPLEFORMAT            1      uint16*
      +TIFFTAG_SAMPLESPERPIXEL         1      uint16*
      +TIFFTAG_SMAXSAMPLEVALUE         1      double*
      +TIFFTAG_SMINSAMPLEVALUE         1      double*
      +TIFFTAG_SOFTWARE                1      char**
      +TIFFTAG_STONITS                 1      double**
      +TIFFTAG_STRIPBYTECOUNTS         1      uint32**
      +TIFFTAG_STRIPOFFSETS            1      uint32**
      +TIFFTAG_SUBFILETYPE             1      uint32*
      +TIFFTAG_SUBIFD                  2      uint16*,uint32**  count & offsets array
      +TIFFTAG_TARGETPRINTER           1      char**
      +TIFFTAG_THRESHHOLDING           1      uint16*
      +TIFFTAG_TILEBYTECOUNTS          1      uint32**
      +TIFFTAG_TILEDEPTH               1      uint32*
      +TIFFTAG_TILELENGTH              1      uint32*
      +TIFFTAG_TILEOFFSETS             1      uint32**
      +TIFFTAG_TILEWIDTH               1      uint32*
      +TIFFTAG_TRANSFERFUNCTION        1 or 3+                  uint16**1<<BitsPerSample entry arrays
      +TIFFTAG_WHITEPOINT              1      float**           2-entry array
      +TIFFTAG_XPOSITION               1      float*
      +TIFFTAG_XRESOLUTION             1      float*
      +TIFFTAG_YCBCRCOEFFICIENTS       1      float**           3-entry array
      +TIFFTAG_YCBCRPOSITIONING        1      uint16*
      +TIFFTAG_YCBCRSUBSAMPLING        2      uint16*
      +TIFFTAG_YPOSITION               1      float*
      +TIFFTAG_YRESOLUTION             1      float*
      +TIFFTAG_ICCPROFILE              2      uint32*,void**    count, profile datadd
      +
      + ++ If +SamplesPerPixel + +is one, then a single array is returned; otherwise three arrays are +returned. + +dd The contents of this field are quite complex. See +The ICC Profile Format Specification, + +Annex B.3 "Embedding ICC Profiles in TIFF Files" +(available at http://www.color.org) for an explanation. +  +

      RETURN VALUES

      + +1 is returned if the tag is defined in the current +directory; otherwise a 0 is returned. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +Unknown field, tag 0x%x. + +An unknown tag was supplied. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFSetField(3T), + +TIFFSetDirectory(3T), + +TIFFReadDirectory(3T), + +TIFFWriteDirectory(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:37 GMT, November 23, 1999 + + diff --git a/html/man/TIFFOpen.3t.html b/html/man/TIFFOpen.3t.html new file mode 100755 index 0000000..6c94a15 --- /dev/null +++ b/html/man/TIFFOpen.3t.html @@ -0,0 +1,361 @@ + +Manpage of TIFFOpen + +

      TIFFOpen

      +Section: Misc. Reference Manual Pages (3T)
      Updated: January 9, 1996
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFOpen, TIFFFdOpen, TIFFClientOpen - open a +TIFF +file for reading or writing +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +TIFF* TIFFOpen(const char* filename, const char* mode)
      +
      +TIFF* TIFFFdOpen(const int fd, const char* filename, const char* mode)
      +
      +typedef tsize_t (*TIFFReadWriteProc)(thandle_t, tdata_t, tsize_t);
      +typedef toff_t (*TIFFSeekProc)(thandle_t, toff_t, int);
      +typedef int (*TIFFCloseProc)(thandle_t);
      +typedef toff_t (*TIFFSizeProc)(thandle_t);
      +typedef int (*TIFFMapFileProc)(thandle_t, tdata_t*, toff_t*);
      +typedef void (*TIFFUnmapFileProc)(thandle_t, tdata_t, toff_t);
      +
      +TIFF* TIFFClientOpen(const char* filename, const char* mode, thandle_t clientdata,
      +    TIFFReadWriteProc readproc, TIFFReadWriteProc writeproc, TIFFSeekProc seekproc,
      +    TIFFCloseProc closeproc, TIFFSizeProc sizeproc, TIFFMapFileProc mapproc,
      +    TIFFUnmapFileProc unmapproc)
      +
      + +  +

      DESCRIPTION

      + +TIFFOpen + +opens a +TIFF +file whose name is +filename + +and returns a handle to be used in subsequent calls to routines in +libtiff. + +If the open operation fails, then zero is returned. +The +mode + +parameter specifies if the file is to be opened for reading (``r''), +writing (``w''), or appending (``a'') and, optionally, whether +to override certain default aspects of library operation (see below). +When a file is opened for appending, existing data will not +be touched; instead new data will be written as additional subfiles. +If an existing file is opened for writing, all previous data is +overwritten. +

      + +If a file is opened for reading, the first +TIFF +directory in the file is automatically read +(also see +TIFFSetDirectory(3T) + +for reading directories other than the first). +If a file is opened for writing or appending, a default directory +is automatically created for writing subsequent data. +This directory has all the default values specified in +TIFF +Revision 6.0: +BitsPerSample=1, + +ThreshHolding=bilevel art scan, + +FillOrder=1 + +(most significant bit of each data byte is filled first), +Orientation=1 + +(the 0th row represents the visual top of the image, and the 0th +column represents the visual left hand side), +SamplesPerPixel=1, + +RowsPerStrip=infinity, + +ResolutionUnit=2 + +(inches), and +Compression=1 + +(no compression). +To alter these values, or to define values for additional fields, +TIFFSetField(3T) + +must be used. +

      + +TIFFFdOpen + +is like +TIFFOpen + +except that it opens a +TIFF +file given an open file descriptor +fd. + +The file's name and mode must reflect that of the open descriptor. +The object associated with the file descriptor +must support random access. + +

      + +TIFFClientOpen + +is like +TIFFOpen + +except that the caller supplies a collection of functions that the +library will use to do UNIX-like I/O operations. +The +readproc + +and +writeproc + +are called to read and write data at the current file position. +seekproc + +is called to change the current file position a la +lseek(2). + +closeproc + +is invoked to release any resources associated with an open file. +sizeproc + +is invoked to obtain the size in bytes of a file. +mapproc + +and +unmapproc + +are called to map and unmap a file's contents in memory; c.f. +mmap(2) + +and +munmap(2). + +The +clientdata + +parameter is an opaque ``handle'' passed to the client-specified +routines passed as parameters to +TIFFClientOpen. + +  +

      OPTIONS

      + +The open mode parameter can include the following flags in +addition to the ``r'', ``w'', and ``a'' flags. +Note however that option flags must follow the read-write-append +specification. +
      +
      l + +
      +When creating a new file force information be written with +Little-Endian byte order (but see below). +By default the library will create new files using the native +CPU +byte order. +
      b + +
      +When creating a new file force information be written with +Big-Endian byte order (but see below). +By default the library will create new files using the native +CPU +byte order. +
      L + +
      +Force image data that is read or written to be treated with +bits filled from Least Significant Bit (LSB) to +Most Significant Bit (MSB). +Note that this is the opposite to the way the library has +worked from its inception. +
      B + +
      +Force image data that is read or written to be treated with +bits filled from Most Significant Bit (MSB) to +Least Significant Bit (LSB); this is the default. +
      H + +
      +Force image data that is read or written to be treated with +bits filled in the same order as the native +CPU. +
      M + +
      +Enable the use of memory-mapped files for images opened read-only. +If the underlying system does not support memory-mapped files +or if the specific image being opened cannot be memory-mapped +then the library will fallback to using the normal system interface +for reading information. +By default the library will attempt to use memory-mapped files. +
      m + +
      +Disable the use of memory-mapped files. +
      C + +
      +Enable the use of ``strip chopping'' when reading images +that are comprised of a single strip or tile of uncompressed data. +Strip chopping is a mechanism by which the library will automatically +convert the single-strip image to multiple strips, +each of which has about 8 Kilobytes of data. +This facility can be useful in reducing the amount of memory used +to read an image because the library normally reads each strip +in its entirety. +Strip chopping does however alter the apparent contents of the +image because when an image is divided into multiple strips it +looks as though the underlying file contains multiple separate +strips. +Finally, note that default handling of strip chopping is a compile-time +configuration parameter. +The default behaviour, for backwards compatibility, is to enable +strip chopping. +
      c + +
      +Disable the use of strip chopping when reading images. +
      +  +

      BYTE ORDER

      + +The +TIFF +specification (all versions) states that compliant readers +must be capable of reading images written in either byte order. + +Nonetheless some software that claims to support the reading of +TIFF +images is incapable of reading images in anything but the native +CPU +byte order on which the software was written. +(Especially notorious +are applications written to run on Intel-based machines.) +By default the library will create new files with the native +byte-order of the +CPU +on which the application is run. +This ensures optimal performance and is portable to any application +that conforms to the TIFF specification. +To force the library to use a specific byte-order when creating +a new file the ``b'' and ``l'' option flags may be included in +the call to open a file; for example, ``wb'' or ``wl''. +  +

      RETURN VALUES

      + +Upon successful completion +TIFFOpen, + +TIFFFdOpen, + +and +TIFFClientOpen + +return a +TIFF +pointer. +Otherwise, NULL is returned. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +Likewise, warning messages are directed to the +TIFFWarning(3T) + +routine. +

      + +"%s": Bad mode. +The specified +mode + +parameter was not one of ``r'' (read), ``w'' (write), or ``a'' (append). +

      + +%s: Cannot open. + +TIFFOpen() + +was unable to open the specified filename for read/writing. +

      + +Cannot read TIFF header. + +An error occurred while attempting to read the header information. +

      + +Error writing TIFF header. + +An error occurred while writing the default header information +for a new file. +

      + +Not a TIFF file, bad magic number %d (0x%x). + +The magic number in the header was not (hex) +0x4d4d or (hex) 0x4949. +

      + +Not a TIFF file, bad version number %d (0x%x). + +The version field in the header was not 42 (decimal). +

      + +Cannot append to file that has opposite byte ordering. + +A file with a byte ordering opposite to the native byte +ordering of the current machine was opened for appending (``a''). +This is a limitation of the library. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFClose(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      BYTE ORDER
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:37 GMT, November 23, 1999 + + diff --git a/html/man/TIFFPrintDirectory.3t.html b/html/man/TIFFPrintDirectory.3t.html new file mode 100755 index 0000000..0bf764b --- /dev/null +++ b/html/man/TIFFPrintDirectory.3t.html @@ -0,0 +1,100 @@ + +Manpage of TIFFPrintDirectory + +

      TIFFPrintDirectory

      +Section: Misc. Reference Manual Pages (3T)
      Updated: December 12, 1991
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFPrintDirectory - print a description of a +TIFF +directory +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +void TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) + +  +

      DESCRIPTION

      + +TIFFPrintDirectory + +prints a description of the current directory in the specified +TIFF +file to the standard I/O output stream +fd. + +The +flags + +parameter is used to control the +level of detail + +of the printed information; it is a bit-or of the flags +defined in +tiffio.h: + +

      +

      +
      +#define TIFFPRINT_NONE          0x0     /* no extra info */
      +#define TIFFPRINT_STRIPS        0x1     /* strips/tiles info */
      +#define TIFFPRINT_CURVES        0x2     /* color/gray response curves */
      +#define TIFFPRINT_COLORMAP      0x4     /* colormap */
      +#define TIFFPRINT_JPEGQTABLES   0x100   /* JPEG Q matrices */
      +#define TIFFPRINT_JPEGACTABLES  0x200   /* JPEG AC tables */
      +#define TIFFPRINT_JPEGDCTABLES  0x200   /* JPEG DC tables */
      +
      + +  +

      NOTES

      + +In C++ the +flags + +parameter defaults to 0. +  +

      RETURN VALUES

      + +None. +  +

      DIAGNOSTICS

      + +None. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFReadDirectory(3T), + +TIFFSetDirectory(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:37 GMT, November 23, 1999 + + diff --git a/html/man/TIFFRGBAImage.3t.html b/html/man/TIFFRGBAImage.3t.html new file mode 100755 index 0000000..bec5ef7 --- /dev/null +++ b/html/man/TIFFRGBAImage.3t.html @@ -0,0 +1,370 @@ + +Manpage of TIFFRGBAImage + +

      TIFFRGBAImage

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFRGBAImage - read and decode an image into a raster +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +typedef unsigned char TIFFRGBValue;
      +typedef struct _TIFFRGBAImage TIFFRGBAImage;
      +int TIFFRGBAImageOK(TIFF* tif, char emsg[1024]);
      +int TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stopOnError, char emsg[1024]);
      +int TIFFRGBAImageGet(TIFFRGBAImage* img, uint32* raster, uint32 width, uint32 height);
      +void TIFFRGBAImageEnd(TIFFRGBAImage* img);
      +
        +

      DESCRIPTION

      + +The routines described here provide a high-level interface +through which +TIFF +images may be read into memory. +Images may be strip- or tile-based and have a variety of different +characteristics: bits/sample, samples/pixel, photometric, etc. +Decoding state is encapsulated in a +TIFFRGBAImage + +structure making it possible to capture state for multiple images +and quickly switch between them. +The target raster format can be customized to a particular application's +needs by installing custom routines that manipulate image data +according to application requirements. +

      + +The default usage for these routines is: check if an image can +be processed using +TIFFRGBAImageOK, + +construct a decoder state block using +TIFFRGBAImageBegin, + +read and decode an image into a target raster using +TIFFRGBAImageGet, + +and then +release resources using +TIFFRGBAImageEnd. + +TIFFRGBAImageGet + +can be called multiple times to decode an image using different +state parameters. +If multiple images are to be displayed and there is not enough +space for each of the decoded rasters, multiple state blocks can +be managed and then calls can be made to +TIFFRGBAImageGet + +as needed to display an image. +

      + +The generated raster is assumed to be an array of +width + +times +height + +32-bit entries, where +width + +must be less than or equal to the width of the image (height + +may be any non-zero size). +If the raster dimensions are smaller than the image, the image data +is cropped to the raster bounds. +If the raster height is greater than that of the image, then the +image data are placed in the lower part of the raster. +(Note that the raster is assume to be organized such that the pixel +at location (x,y) is raster[y*width+x]; +with the raster origin in the lower-left hand corner.) +

      + +Raster pixels are 8-bit packed red, green, blue, alpha samples. +The macros +TIFFGetR, + +TIFFGetG, + +TIFFGetB, + +and +TIFFGetA + +should be used to access individual samples. +Images without Associated Alpha matting information have a constant +Alpha of 1.0 (255). +

      + +TIFFRGBAImageGet + +converts non-8-bit images by scaling sample values. +Palette, grayscale, bilevel, +CMYK, and YCbCr images are converted to +RGB +transparently. +Raster pixels are returned uncorrected by any colorimetry information +present in the directory. +

      + +The paramater +stopOnError + +specifies how to act if an error is encountered while reading +the image. +If +stopOnError + +is non-zero, then an error will terminate the operation; otherwise +TIFFRGBAImageGet + +will continue processing data until all the possible data in the +image have been requested. +  +

      ALTERNATE RASTER FORMATS

      + +To use the core support for reading and processing +TIFF +images, but write the resulting raster data in a different format +one need only override the ``put methods'' used to store raster data. +These methods are are defined in the +TIFFRGBAImage + +structure and initially setup by +TIFFRGBAImageBegin + +to point to routines that pack raster data in the default +ABGR +pixel format. +Two different routines are used according to the physical organization +of the image data in the file: +PlanarConfiguration=1 + +(packed samples), +and +PlanarConfiguration=2 + +(separated samples). +Note that this mechanism can be used to transform the data before +storing it in the raster. +For example one can convert data +to colormap indices for display on a colormap display. +  +

      SIMULTANEOUS RASTER STORE AND DISPLAY

      + +It is simple to display an image as it is being read into memory +by overriding the put methods as described above for supporting +alternate raster formats. +Simply keep a reference to the default put methods setup by +TIFFRGBAImageBegin + +and then invoke them before or after each display operation. +For example, the +tiffgt(1) + +utility uses the following put method to update the display as +the raster is being filled: +

      +

      +static void
      +putContigAndDraw(TIFFRGBAImage* img, uint32* raster,
      +    uint32 x, uint32 y, uint32 w, uint32 h,
      +    int32 fromskew, int32 toskew,
      +    unsigned char* cp)
      +{
      +    (*putContig)(img, raster, x, y, w, h, fromskew, toskew, cp);
      +    if (x+w == width) {
      +        w = width;
      +        if (img->orientation == ORIENTATION_TOPLEFT)
      +            lrectwrite(0, y-(h-1), w-1, y, raster-x-(h-1)*w);
      +        else
      +            lrectwrite(0, y, w-1, y+h-1, raster);
      +    }
      +}
      +
      + +

      +(the original routine provided by the library is saved in the +variable +putContig.) + +  +

      SUPPORTING ADDITIONAL TIFF FORMATS

      + +The +TIFFRGBAImage + +routines support the most commonly encountered flavors of +TIFF. +It is possible to extend this support by overriding the ``get method'' +invoked by +TIFFRGBAImageGet + +to read +TIFF +image data. +Details of doing this are a bit involved, it is best to make a copy +of an existing get method and modify it to suit the needs of an +application. +  +

      NOTES

      + +Samples must be either 1, 2, 4, 8, or 16 bits. +Colorimetric samples/pixel must be either 1, 3, or 4 (i.e. +SamplesPerPixel + +minus +ExtraSamples). + +

      + +Palettte image colormaps that appear to be incorrectly written +as 8-bit values are automatically scaled to 16-bits. +  +

      RETURN VALUES

      + +All routines return +1 if the operation was successful. +Otherwise, 0 is returned if an error was encountered and +stopOnError + +is zero. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +Sorry, can not handle %d-bit pictures. + +The image had +BitsPerSample + +other than 1, 2, 4, 8, or 16. +

      + +Sorry, can not handle %d-channel images. + +The image had +SamplesPerPixel + +other than 1, 3, or 4. +

      + +Missing needed "PhotometricInterpretation" tag. +The image did not have a tag that describes how to display +the data. +

      + +No "PhotometricInterpretation" tag, assuming RGB. +The image was missing a tag that describes how to display it, +but because it has 3 or 4 samples/pixel, it is assumed to be +RGB. +

      + +No "PhotometricInterpretation" tag, assuming min-is-black. +The image was missing a tag that describes how to display it, +but because it has 1 sample/pixel, it is assumed to be a grayscale +or bilevel image. +

      + +No space for photometric conversion table. + +There was insufficient memory for a table used to convert +image samples to 8-bit +RGB. +

      + +Missing required "Colormap" tag. +A Palette image did not have a required +Colormap + +tag. +

      + +No space for tile buffer. + +There was insufficient memory to allocate an i/o buffer. +

      + +No space for strip buffer. + +There was insufficient memory to allocate an i/o buffer. +

      + +Can not handle format. + +The image has a format (combination of +BitsPerSample, + +SamplesPerPixel, + +and +PhotometricInterpretation) + +that can not be handled. +

      + +No space for B&W mapping table. + +There was insufficient memory to allocate a table used to map +grayscale data to +RGB. +

      + +No space for Palette mapping table. + +There was insufficient memory to allocate a table used to map +data to 8-bit +RGB. +  +

      BUGS

      + +Orientations other than bottom-left, or top-left are +not handled correctly. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFReadRGBAImage(3T), + +TIFFReadRGBAStrip(3T), + +TIFFReadRGBATile(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      ALTERNATE RASTER FORMATS
      +
      SIMULTANEOUS RASTER STORE AND DISPLAY
      +
      SUPPORTING ADDITIONAL TIFF FORMATS
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFReadDirectory.3t.html b/html/man/TIFFReadDirectory.3t.html new file mode 100755 index 0000000..6ee870b --- /dev/null +++ b/html/man/TIFFReadDirectory.3t.html @@ -0,0 +1,212 @@ + +Manpage of TIFFReadDirectory + +

      TIFFReadDirectory

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadDirectory - get the contents of the next directory in an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +int TIFFReadDirectory(TIFF* tif) + +  +

      DESCRIPTION

      + +Read the next directory in the specified file and make it the +current directory. +Applications only need to call +TIFFReadDirectory + +to read multiple subfiles in a single +TIFF +file- +the first directory in a file is automatically read when +TIFFOpen + +is called. +  +

      NOTES

      + +If the library is compiled with +STRIPCHOP_SUPPORT +enabled, then images that have a single uncompressed strip or +tile of data are automatically treated as if they were made +up of multiple strips or tiles of approximately 8 kilobytes each. +This operation is done only in-memory; it does not alter the +contents of the file. +However, the construction of the ``chopped strips'' is visible +to the application through the number of strips [tiles] +returned by +TIFFNumberOfStrips + +[TIFFNumberOfTiles]. + +  +

      RETURN VALUES

      + +If the next directory was successfully read, 1 is returned. +Otherwise, 0 is returned if an error was encountered, +or if there are no more directories to be read. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +All warning messages are directed to the +TIFFWarning(3T) + +routine. +

      + +Seek error accessing TIFF directory. +An error occurred while positioning to the location of the +directory. +

      + +Wrong data type %d for field "%s". +The tag entry in the directory had an incorrect data type. +For example, an +ImageDescription + +tag with a +SHORT +data type. +

      + +TIFF directory is missing required "%s" field. +The specified tag is required to be present by the +TIFF +5.0 specification, but is missing. +The directory is (usually) unusable. +

      + +%s: Rational with zero denominator. +A directory tag has a +RATIONAL +value whose denominator is zero. +

      + +Incorrect count %d for field "%s" (%lu, expecting %lu); tag ignored. +The specified tag's count field is bad. +For example, a count other than 1 for a +SubFileType + +tag. +

      + +Cannot handle different per-sample values for field "%s". +The tag has +SamplesPerPixel + +values and they are not all the same; e.g. +BitsPerSample. + +The library is unable to handle images of this sort. +

      + +Count mismatch for field "%s"; expecting %d, got %d. +The count field in a +tag does not agree with the number expected by the library. +This should never happen, so if it does, the library refuses to +read the directory. +

      + +Invalid TIFF directory; tags are not sorted in ascending order. +The directory tags are not properly sorted as specified +in the +TIFF +5.0 specification. +This error is not fatal. +

      + +Ignoring unknown field with tag %d (0x%x). +An unknown tag was encountered in the directory; +the library ignores all such tags. +

      + +TIFF directory is missing requred "ImageLength" field. +The image violates the specification by not having a necessary field. +There is no way for the library to recover from this error. +

      + +TIFF directory is missing requred "PlanarConfig" field. +The image violates the specification by not having a necessary field. +There is no way for the library to recover from this error. +

      + +TIFF directory is missing requred "StripOffsets" field. +The image has multiple strips, but is missing the tag that +specifies the file offset to each strip of data. +There is no way for the library to recover from this error. +

      + +TIFF directory is missing requred "TileOffsets" field. +The image has multiple tiles, but is missing the tag that +specifies the file offset to each tile of data. +There is no way for the library to recover from this error. +

      + +TIFF directory is missing required "StripByteCounts" field. +The image has multiple strips, but is missing the tag that +specifies the size of each strip of data. +There is no way for the library to recover from this error. +

      + +TIFF directory is missing required "StripByteCounts" field, calculating from imagelength. +The image violates the specification by not having a necessary field. +However, when the image is comprised of only one strip or tile, the +library will estimate the missing value based on the file size. +

      + +Bogus "StripByteCounts" field, ignoring and calculating from imagelength. +Certain vendors violate the specification by writing zero for +the StripByteCounts tag when they want to leave the value +unspecified. +If the image has a single strip, the library will estimate +the missing value based on the file size. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFWriteDirectory(3T), + +TIFFSetDirectory(3T), + +TIFFSetSubDirectory(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFReadEncodedStrip.3t.html b/html/man/TIFFReadEncodedStrip.3t.html new file mode 100755 index 0000000..1e3e8f9 --- /dev/null +++ b/html/man/TIFFReadEncodedStrip.3t.html @@ -0,0 +1,103 @@ + +Manpage of TIFFReadEncodedStrip + +

      TIFFReadEncodedStrip

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadEncodedStrip - read and decode a strip of data from an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +tsize_t TIFFReadEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) + +  +

      DESCRIPTION

      + +Read the specified strip of data and place up to +size + +bytes of decompressed information in the (user supplied) data buffer. +  +

      NOTES

      + +The value of +strip + +is a ``raw strip number.'' +That is, the caller must take into account whether or not the +data are organized in separate planes (PlanarConfiguration=2). + +To read a full strip of data the data buffer should typically be +at least as large as the number returned by +TIFFStripSize(3T). + +

      + +The library attempts to hide bit- and byte-ordering differences +between the image and the native machine by converting data +to the native machine order. +Bit reversal is done if the +FillOrder + +tag is opposite to the native machine bit order. +16- and 32-bit samples are automatically byte-swapped if the +file was written with a byte order opposite to the native +machine byte order, +  +

      RETURN VALUES

      + +The actual number of bytes of data that were placed in +buf + +is returned; +TIFFReadEncodedStrip + +returns -1 if an error was encountered. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFReadRawStrip(3T), + +TIFFReadScanline(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFReadEncodedTile.3t.html b/html/man/TIFFReadEncodedTile.3t.html new file mode 100755 index 0000000..de57a77 --- /dev/null +++ b/html/man/TIFFReadEncodedTile.3t.html @@ -0,0 +1,107 @@ + +Manpage of TIFFReadEncodedTile + +

      TIFFReadEncodedTile

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadEncodedTile - read and decode a tile of data from an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +int TIFFReadEncodedTile(TIFF* tif, u_long tile, u_char* buf, u_long size) + +  +

      DESCRIPTION

      + +Read the specified tile of data and place up to +size + +bytes of decompressed information in the (user supplied) data buffer. +  +

      NOTES

      + +The value of +tile + +is a ``raw tile number.'' +That is, the caller must take into account whether or not the +data are organized in separate planes (PlanarConfiguration=2). + +TIFFComputeTile + +automatically does this when converting an (x,y,z,sample) +coordinate quadruple to a tile number. +To read a full tile of data the data buffer should be +at least as large as the value returned by +TIFFTileSize. + +

      + +The library attempts to hide bit- and byte-ordering differences +between the image and the native machine by converting data +to the native machine order. +Bit reversal is done if the +FillOrder + +tag is opposite to the native machine bit order. +16- and 32-bit samples are automatically byte-swapped if the +file was written with a byte order opposite to the native +machine byte order, +  +

      RETURN VALUES

      + +The actual number of bytes of data that were placed in +buf + +is returned; +TIFFReadEncodedTile + +returns -1 if an error was encountered. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFReadRawTile(3T), + +TIFFReadTile(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFReadRGBAImage.3t.html b/html/man/TIFFReadRGBAImage.3t.html new file mode 100755 index 0000000..9d1440e --- /dev/null +++ b/html/man/TIFFReadRGBAImage.3t.html @@ -0,0 +1,262 @@ + +Manpage of TIFFReadRGBAImage + +

      TIFFReadRGBAImage

      +Section: Misc. Reference Manual Pages (3T)
      Updated: February 14, 1992
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadRGBAImage - read and decode an image into a fixed-format raster +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +
      +#define TIFFGetR(abgr)      ((abgr) & 0xff)
      +#define TIFFGetG(abgr)      (((abgr) >> 8) & 0xff)
      +#define TIFFGetB(abgr)      (((abgr) >> 16) & 0xff)
      +#define TIFFGetA(abgr)      (((abgr) >> 24) & 0xff)
      +
      +int TIFFReadRGBAImage(TIFF* tif, u_long width, u_long height, u_long* raster, int stopOnError)
      +
        +

      DESCRIPTION

      + +TIFFReadRGBAImage + +reads a strip- or tile-based image into memory, storing the
      +result in the user supplied +raster. + +The raster is assumed to be an array of +width + +times +height + +32-bit entries, where +width + +must be less than or equal to the width of the image (height + +may be any non-zero size). +If the raster dimensions are smaller than the image, the image data +is cropped to the raster bounds. +If the raster height is greater than that of the image, then the +image data are placed in the lower part of the raster. +(Note that the raster is assume to be organized such that the pixel +at location (x,y) is raster[y*width+x]; +with the raster origin in the lower-left hand corner.) +

      + +Raster pixels are 8-bit packed red, green, blue, alpha samples. +The macros +TIFFGetR, + +TIFFGetG, + +TIFFGetB, + +and +TIFFGetA + +should be used to access individual samples. +Images without Associated Alpha matting information have a constant +Alpha of 1.0 (255). +

      + +TIFFReadRGBAImage + +converts non-8-bit images by scaling sample values. +Palette, grayscale, bilevel, +CMYK, and YCbCr images are converted to +RGB +transparently. +Raster pixels are returned uncorrected by any colorimetry information +present in the directory. +

      + +The paramater +stopOnError + +specifies how to act if an error is encountered while reading +the image. +If +stopOnError + +is non-zero, then an error will terminate the operation; otherwise +TIFFReadRGBAImage + +will continue processing data until all the possible data in the +image have been requested. +  +

      NOTES

      + +In C++ the +stopOnError + +parameter defaults to 0. +

      + +Samples must be either 1, 2, 4, 8, or 16 bits. +Colorimetric samples/pixel must be either 1, 3, or 4 (i.e. +SamplesPerPixel + +minus +ExtraSamples). + +

      + +Palettte image colormaps that appear to be incorrectly written +as 8-bit values are automatically scaled to 16-bits. +

      + +TIFFReadRGBAImage + +is just a wrapper around the more general +TIFFRGBAImage(3T) + +facilities. +  +

      RETURN VALUES

      + +1 is returned if the image was successfully read and converted. +Otherwise, 0 is returned if an error was encountered and +stopOnError + +is zero. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +Sorry, can not handle %d-bit pictures. + +The image had +BitsPerSample + +other than 1, 2, 4, 8, or 16. +

      + +Sorry, can not handle %d-channel images. + +The image had +SamplesPerPixel + +other than 1, 3, or 4. +

      + +Missing needed "PhotometricInterpretation" tag. +The image did not have a tag that describes how to display +the data. +

      + +No "PhotometricInterpretation" tag, assuming RGB. +The image was missing a tag that describes how to display it, +but because it has 3 or 4 samples/pixel, it is assumed to be +RGB. +

      + +No "PhotometricInterpretation" tag, assuming min-is-black. +The image was missing a tag that describes how to display it, +but because it has 1 sample/pixel, it is assumed to be a grayscale +or bilevel image. +

      + +No space for photometric conversion table. + +There was insufficient memory for a table used to convert +image samples to 8-bit +RGB. +

      + +Missing required "Colormap" tag. +A Palette image did not have a required +Colormap + +tag. +

      + +No space for tile buffer. + +There was insufficient memory to allocate an i/o buffer. +

      + +No space for strip buffer. + +There was insufficient memory to allocate an i/o buffer. +

      + +Can not handle format. + +The image has a format (combination of +BitsPerSample, + +SamplesPerPixel, + +and +PhotometricInterpretation) + +that +TIFFReadRGBAImage + +can not handle. +

      + +No space for B&W mapping table. + +There was insufficient memory to allocate a table used to map +grayscale data to +RGB. +

      + +No space for Palette mapping table. + +There was insufficient memory to allocate a table used to map +data to 8-bit +RGB. +  +

      BUGS

      + +Orientations other than bottom-left, or top-left are +not handled correctly. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFRGBAImage(3T), + +TIFFReadRGBAStrip(3T), + +TIFFReadRGBATile(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFReadRGBAStrip.3t.html b/html/man/TIFFReadRGBAStrip.3t.html new file mode 100755 index 0000000..713a6b2 --- /dev/null +++ b/html/man/TIFFReadRGBAStrip.3t.html @@ -0,0 +1,249 @@ + +Manpage of TIFFReadRGBAStrip + +

      TIFFReadRGBAStrip

      +Section: Misc. Reference Manual Pages (3T)
      Updated: December 10, 1998
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadRGBAStrip - read and decode an image strip into a fixed-format raster +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +
      +#define TIFFGetR(abgr)      ((abgr) & 0xff)
      +#define TIFFGetG(abgr)      (((abgr) >> 8) & 0xff)
      +#define TIFFGetB(abgr)      (((abgr) >> 16) & 0xff)
      +#define TIFFGetA(abgr)      (((abgr) >> 24) & 0xff)
      +
      +int TIFFReadRGBAStrip(TIFF* tif, tstrip_t strip, uint32 * raster )
      +
        +

      DESCRIPTION

      + +TIFFReadRGBAStrip + +reads a single strip of a strip-based image into memory,
      +storing the result in the user supplied RGBA +raster. + +The raster is assumed to be an array of +width times rowsperstrip 32-bit entries, where width +is the width of the image (TIFFTAG_IMAGEWIDTH) and +rowsperstrip is the maximum lines in a strip (TIFFTAG_ROWSPERSTRIP). +

      +

      + +The +strip + +value should be the strip number (strip zero is the first) as returned by the +TIFFComputeStrip + +function, but always for sample 0. +

      +

      + +Note that the raster is assume to be organized such that the pixel +at location (x,y) is raster[y*width+x]; +with the raster origin in the +lower-left hand corner + +of the strip. That is bottom to top organization. When reading a partial +last strip in the file the last line of the image will begin at the +beginning of the buffer. +

      +

      + +Raster pixels are 8-bit packed red, green, blue, alpha samples. +The macros +TIFFGetR, + +TIFFGetG, + +TIFFGetB, + +and +TIFFGetA + +should be used to access individual samples. +Images without Associated Alpha matting information have a constant +Alpha of 1.0 (255). +

      + +See the +TIFFRGBAImage(3T) + +page for more details on how various image types are converted to RGBA +values. +  +

      NOTES

      + +Samples must be either 1, 2, 4, 8, or 16 bits. +Colorimetric samples/pixel must be either 1, 3, or 4 (i.e. +SamplesPerPixel + +minus +ExtraSamples). + +

      + +Palette image colormaps that appear to be incorrectly written +as 8-bit values are automatically scaled to 16-bits. +

      + +TIFFReadRGBAStrip + +is just a wrapper around the more general +TIFFRGBAImage(3T) + +facilities. It's main advantage over the similar +TIFFReadRGBAImage() + +function is that for large images a single +buffer capable of holding the whole image doesn't need to be allocated, +only enough for one strip. The +TIFFReadRGBATile() + +function does a similar operation for tiled images. +  +

      RETURN VALUES

      + +1 is returned if the image was successfully read and converted. +Otherwise, 0 is returned if an error was encountered. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +Sorry, can not handle %d-bit pictures. + +The image had +BitsPerSample + +other than 1, 2, 4, 8, or 16. +

      + +Sorry, can not handle %d-channel images. + +The image had +SamplesPerPixel + +other than 1, 3, or 4. +

      + +Missing needed "PhotometricInterpretation" tag. +The image did not have a tag that describes how to display +the data. +

      + +No "PhotometricInterpretation" tag, assuming RGB. +The image was missing a tag that describes how to display it, +but because it has 3 or 4 samples/pixel, it is assumed to be +RGB. +

      + +No "PhotometricInterpretation" tag, assuming min-is-black. +The image was missing a tag that describes how to display it, +but because it has 1 sample/pixel, it is assumed to be a grayscale +or bilevel image. +

      + +No space for photometric conversion table. + +There was insufficient memory for a table used to convert +image samples to 8-bit +RGB. +

      + +Missing required "Colormap" tag. +A Palette image did not have a required +Colormap + +tag. +

      + +No space for tile buffer. + +There was insufficient memory to allocate an i/o buffer. +

      + +No space for strip buffer. + +There was insufficient memory to allocate an i/o buffer. +

      + +Can not handle format. + +The image has a format (combination of +BitsPerSample, + +SamplesPerPixel, + +and +PhotometricInterpretation) + +that +TIFFReadRGBAImage + +can not handle. +

      + +No space for B&W mapping table. + +There was insufficient memory to allocate a table used to map +grayscale data to +RGB. +

      + +No space for Palette mapping table. + +There was insufficient memory to allocate a table used to map +data to 8-bit +RGB. +  +

      BUGS

      + +Orientations other than bottom-left, or top-left are +not handled correctly. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFRGBAImage(3T), + +TIFFReadRGBAImage(3T), + +TIFFReadRGBATile(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFReadRGBATile.3t.html b/html/man/TIFFReadRGBATile.3t.html new file mode 100755 index 0000000..ef5eebe --- /dev/null +++ b/html/man/TIFFReadRGBATile.3t.html @@ -0,0 +1,251 @@ + +Manpage of TIFFReadRGBATile + +

      TIFFReadRGBATile

      +Section: Misc. Reference Manual Pages (3T)
      Updated: December 10, 1998
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadRGBATile - read and decode an image tile into a fixed-format raster +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +
      +#define TIFFGetR(abgr)      ((abgr) & 0xff)
      +#define TIFFGetG(abgr)      (((abgr) >> 8) & 0xff)
      +#define TIFFGetB(abgr)      (((abgr) >> 16) & 0xff)
      +#define TIFFGetA(abgr)      (((abgr) >> 24) & 0xff)
      +
      +int TIFFReadRGBATile(TIFF* tif, uint32 x, uint32 y, uint32 * raster )
      +
        +

      DESCRIPTION

      + +TIFFReadRGBATile + +reads a single tile of a tile-based image into memory,
      +storing the result in the user supplied RGBA +raster. + +The raster is assumed to be an array of +width times length 32-bit entries, where width +is the width of a tile (TIFFTAG_TILEWIDTH) and +length is the height of a tile (TIFFTAG_TILELENGTH). +

      +

      + +The +x + +and +y + +values are the offsets from the top left corner to the top left corner +of the tile to be read. They must be an exact multiple of the tile +width and length. +

      +

      + +Note that the raster is assume to be organized such that the pixel +at location (x,y) is raster[y*width+x]; +with the raster origin in the +lower-left hand corner + +of the tile. That is bottom to top organization. Edge tiles which +partly fall off the image will be filled out with appropriate zeroed +areas. +

      +

      + +Raster pixels are 8-bit packed red, green, blue, alpha samples. +The macros +TIFFGetR, + +TIFFGetG, + +TIFFGetB, + +and +TIFFGetA + +should be used to access individual samples. +Images without Associated Alpha matting information have a constant +Alpha of 1.0 (255). +

      + +See the +TIFFRGBAImage(3T) + +page for more details on how various image types are converted to RGBA +values. +  +

      NOTES

      + +Samples must be either 1, 2, 4, 8, or 16 bits. +Colorimetric samples/pixel must be either 1, 3, or 4 (i.e. +SamplesPerPixel + +minus +ExtraSamples). + +

      + +Palette image colormaps that appear to be incorrectly written +as 8-bit values are automatically scaled to 16-bits. +

      + +TIFFReadRGBATile + +is just a wrapper around the more general +TIFFRGBAImage(3T) + +facilities. It's main advantage over the similar +TIFFReadRGBAImage() + +function is that for large images a single +buffer capable of holding the whole image doesn't need to be allocated, +only enough for one tile. The +TIFFReadRGBAStrip() + +function does a similar operation for stripped images. +  +

      RETURN VALUES

      + +1 is returned if the image was successfully read and converted. +Otherwise, 0 is returned if an error was encountered. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +Sorry, can not handle %d-bit pictures. + +The image had +BitsPerSample + +other than 1, 2, 4, 8, or 16. +

      + +Sorry, can not handle %d-channel images. + +The image had +SamplesPerPixel + +other than 1, 3, or 4. +

      + +Missing needed "PhotometricInterpretation" tag. +The image did not have a tag that describes how to display +the data. +

      + +No "PhotometricInterpretation" tag, assuming RGB. +The image was missing a tag that describes how to display it, +but because it has 3 or 4 samples/pixel, it is assumed to be +RGB. +

      + +No "PhotometricInterpretation" tag, assuming min-is-black. +The image was missing a tag that describes how to display it, +but because it has 1 sample/pixel, it is assumed to be a grayscale +or bilevel image. +

      + +No space for photometric conversion table. + +There was insufficient memory for a table used to convert +image samples to 8-bit +RGB. +

      + +Missing required "Colormap" tag. +A Palette image did not have a required +Colormap + +tag. +

      + +No space for tile buffer. + +There was insufficient memory to allocate an i/o buffer. +

      + +No space for strip buffer. + +There was insufficient memory to allocate an i/o buffer. +

      + +Can not handle format. + +The image has a format (combination of +BitsPerSample, + +SamplesPerPixel, + +and +PhotometricInterpretation) + +that +TIFFReadRGBAImage + +can not handle. +

      + +No space for B&W mapping table. + +There was insufficient memory to allocate a table used to map +grayscale data to +RGB. +

      + +No space for Palette mapping table. + +There was insufficient memory to allocate a table used to map +data to 8-bit +RGB. +  +

      BUGS

      + +Orientations other than bottom-left, or top-left are +not handled correctly. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFRGBAImage(3T), + +TIFFReadRGBAImage(3T), + +TIFFReadRGBAStrip(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFReadRawStrip.3t.html b/html/man/TIFFReadRawStrip.3t.html new file mode 100755 index 0000000..f34c90f --- /dev/null +++ b/html/man/TIFFReadRawStrip.3t.html @@ -0,0 +1,88 @@ + +Manpage of TIFFReadRawStrip + +

      TIFFReadRawStrip

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadRawStrip - return the undecoded contents +of a strip of data from an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +tsize_t TIFFReadRawStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) + +  +

      DESCRIPTION

      + +Read the contents of the specified strip into the +(user supplied) data buffer. +Note that the value of +strip + +is a ``raw strip number.'' +That is, the caller must take into account whether or not the +data is organized in separate planes (PlanarConfiguration=2). + +To read a full strip of data the data buffer should typically be +at least as large as the number returned by +TIFFStripSize. + +  +

      RETURN VALUES

      + +The actual number of bytes of data that were placed in +buf + +is returned; +TIFFReadEncodedStrip + +returns -1 if an error was encountered. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFReadEncodedStrip(3T), + +TIFFReadScanline(3T), + +TIFFStripSize(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFReadRawTile.3t.html b/html/man/TIFFReadRawTile.3t.html new file mode 100755 index 0000000..d4fc935 --- /dev/null +++ b/html/man/TIFFReadRawTile.3t.html @@ -0,0 +1,91 @@ + +Manpage of TIFFReadRawTile + +

      TIFFReadRawTile

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadRawTile - return an undecoded tile of data from an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +tsize_t TIFFReadRawTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size) + +  +

      DESCRIPTION

      + +Read the contents of the specified tile into the +(user supplied) data buffer. +Note that the value of +tile + +is a ``raw tile number.'' +That is, the caller must take into account whether or not the +data is organized in separate planes (PlanarConfiguration=2). + +TIFFComputeTile + +automatically does this when converting an (x,y,z,sample) +coordinate quadruple to a tile number. +To read a full tile of data the data buffer should typically be +at least as large as the value returned by +TIFFTileSize. + +  +

      RETURN VALUES

      + +The actual number of bytes of data that were placed in +buf + +is returned; +TIFFReadEncodedTile + +returns -1 if an error was encountered. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFReadEncodedTile(3T), + +TIFFReadTile(3T), + +TIFFTileSize(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFReadScanline.3t.html b/html/man/TIFFReadScanline.3t.html new file mode 100755 index 0000000..e99b4bf --- /dev/null +++ b/html/man/TIFFReadScanline.3t.html @@ -0,0 +1,139 @@ + +Manpage of TIFFReadScanline + +

      TIFFReadScanline

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadScanline - read and decode a scanline of data from an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +int TIFFReadScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) + +  +

      DESCRIPTION

      + +Read the data for the specified row into the (user supplied) +data buffer +buf. + +The data are returned decompressed and, in the native byte- +and bit-ordering, but are otherwise packed (see further below). +The buffer must be large enough to hold an entire scanline of data. +Applications should call the routine +TIFFScanlineSize + +to find out the size (in bytes) of a scanline buffer. +The +row + +parameter is always used by +TIFFReadScanline; + +the +sample + +parameter is used only if data are organized in separate planes (PlanarConfiguration=2). + +  +

      NOTES

      + +The library attempts to hide bit- and byte-ordering differences +between the image and the native machine by converting data +to the native machine order. +Bit reversal is done if the +FillOrder + +tag is opposite to the native machine bit order. +16- and 32-bit samples are automatically byte-swapped if the +file was written with a byte order opposite to the native +machine byte order, +

      + +In C++ the +sample + +parameter defaults to 0. +  +

      RETURN VALUES

      + +TIFFReadScanline + +returns -1 if it detects an error; otherwise 1 is returned. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +Compression algorithm does not support random access. + +Data was requested in a non-sequential order from a file that +uses a compression algorithm and that has +RowsPerStrip + +greater than one. +That is, data in the image is stored in a compressed form, +and with multiple rows packed into a strip. +In this case, the library does not support random access to the data. +The data should either be accessed sequentially, or the file +should be converted so that each strip is made up of one row +of data. +  +

      BUGS

      + +Reading subsampled YCbCR data does not work correctly +because, for +PlanarConfiguration=2 + +the size of a scanline is not calculated on a per-sample basis, +and for +PlanarConfiguration=1 + +the library does not unpack the block-interleaved samples; use +the strip- and tile-based interfaces to read these formats. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFReadEncodedStrip(3T), + +TIFFReadRawStrip(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFReadTile.3t.html b/html/man/TIFFReadTile.3t.html new file mode 100755 index 0000000..12eddab --- /dev/null +++ b/html/man/TIFFReadTile.3t.html @@ -0,0 +1,120 @@ + +Manpage of TIFFReadTile + +

      TIFFReadTile

      +Section: Misc. Reference Manual Pages (3T)
      Updated: December 16, 1991
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadTile - read and decode a tile of data from an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +tsize_t TIFFReadTile(TIFF* tif, tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t sample) + +  +

      DESCRIPTION

      + +Return the data for the tile +containing + +the specified coordinates. +The data placed in +buf + +are returned decompressed and, typically, in the native byte- +and bit-ordering, but are otherwise packed (see further below). +The buffer must be large enough to hold an entire tile of data. +Applications should call the routine +TIFFTileSize + +to find out the size (in bytes) of a tile buffer. +The +x + +and +y + +parameters are always used by +TIFFReadTile. + +The +z + +parameter is used if the image is deeper than 1 slice (ImageDepth>1). + +The +sample + +parameter is used only if data are organized in separate planes (PlanarConfiguration=2). + +  +

      NOTES

      + +The library attempts to hide bit- and byte-ordering differences +between the image and the native machine by converting data +to the native machine order. +Bit reversal is done if the +FillOrder + +tag is opposite to the native machine bit order. +16- and 32-bit samples are automatically byte-swapped if the +file was written with a byte order opposite to the native +machine byte order, +  +

      RETURN VALUES

      + +TIFFReadTile + +returns -1 if it detects an error; otherwise the number of +bytes in the decoded tile is returned. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFCheckTile(3T), + +TIFFComputeTile(3T), + +TIFFOpen(3T), + +TIFFReadEncodedTile(3T), + +TIFFReadRawTile(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFSetDirectory.3t.html b/html/man/TIFFSetDirectory.3t.html new file mode 100755 index 0000000..3f5732d --- /dev/null +++ b/html/man/TIFFSetDirectory.3t.html @@ -0,0 +1,114 @@ + +Manpage of TIFFSetDirectory + +

      TIFFSetDirectory

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFSetDirectory, TIFFSetSubDirectory - set the current directory for an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +int TIFFSetDirectory(TIFF* tif, tdir_t dirnum) + +
      + +int TIFFSetSubDirectory(TIFF* tif, uint32 diroff) + +  +

      DESCRIPTION

      + +TIFFSetDirectory + +changes the current directory and reads its contents with +TIFFReadDirectory. + +The parameter +dirnum + +specifies the subfile/directory as an integer number, with +the first directory numbered zero. +

      + +TIFFSetSubDirectory + +acts like +TIFFSetDirectory, + +except the directory is specified as a +file offset instead of an index; this is required for accessing +subdirectories linked through a +SubIFD + +tag. +  +

      RETURN VALUES

      + +On successful return 1 is returned. +Otherwise, 0 is returned if +dirnum + +or +diroff + +specifies a non-existent directory, or if an error was +encountered while reading the directory's contents. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +%s: Error fetching directory count. + +An error was encountered while reading the ``directory count'' field. +

      + +%s: Error fetching directory link. + +An error was encountered while reading the ``link value'' that +points to the next directory in a file. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFCurrentDirectory(3T), + +TIFFOpen(3T), + +TIFFReadDirectory(3T), + +TIFFWriteDirectory(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFSetField.3t.html b/html/man/TIFFSetField.3t.html new file mode 100755 index 0000000..aae8ec9 --- /dev/null +++ b/html/man/TIFFSetField.3t.html @@ -0,0 +1,269 @@ + +Manpage of TIFFSetField + +

      TIFFSetField

      +Section: Misc. Reference Manual Pages (3T)
      Updated: August 28, 1997
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFSetField - set the value(s) of a tag in a +TIFF +file open for writing +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +int TIFFSetField(TIFF* tif, ttag_t tag, ...) + +
      + +#include <stdarg.h> + +
      + +int TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) + +  +

      DESCRIPTION

      + +TIFFSetField + +sets the value of a field +or pseudo-tag in the current directory associated with +the open +TIFF +file +tif. + +(A +pseudo-tag + +is a parameter that is used to control the operation of the +TIFF +library but whose value is not read or written to the underlying file.) +To set the value of a field +the file must have been previously opened for writing with +TIFFOpen(3T); + +pseudo-tags can be set whether the file was opened for reading +or writing. +The field is identified by +tag, + +one of the values defined in the include file +tiff.h + +(see also the table below). +The actual value is specified using a variable argument list, +as prescribed by the +stdarg(3) + +interface (or, on some machines, the +varargs(3) + +interface.) +

      + +TIFFVSetField + +is functionally equivalent to +TIFFSetField + +except that it takes a pointer to a variable +argument list. +TIFFVSetField + +is useful for writing routines that are layered +on top of the functionality provided by +TIFFSetField. + +

      + +The tags understood by +libtiff, + +the number of parameter values, and the +expected types for the parameter values are shown below. +The data types are: +char* + +is null-terminated string and corresponds to the +ASCII +data type; +uint16 + +is an unsigned 16-bit value; +uint32 + +is an unsigned 32-bit value; +uint16* + +is an array of unsigned 16-bit values. +void* + +is an array of data values of unspecified type. +

      +Consult the +TIFF +specification for information on the meaning of each tag. +

      + +

      +
      +Tag Name                        Count  Types              Notes
      +
      +TIFFTAG_ARTIST                  1      char*
      +TIFFTAG_BADFAXLINES             1      uint32
      +TIFFTAG_BITSPERSAMPLE           1      uint16             +
      +TIFFTAG_CLEANFAXDATA            1      uint16
      +TIFFTAG_COLORMAP                3      uint16*            1<<BitsPerSample arrays
      +TIFFTAG_COMPRESSION             1      uint16             +
      +TIFFTAG_CONSECUTIVEBADFAXLINES  1      uint32
      +TIFFTAG_DATETIME                1      char*
      +TIFFTAG_DOCUMENTNAME            1      char*
      +TIFFTAG_DOTRANGE                2      uint16
      +TIFFTAG_EXTRASAMPLES            2      uint16,uint16*     + count & types array
      +TIFFTAG_FAXMODE                 1      int                + G3/G4 compression pseudo-tag
      +TIFFTAG_FAXFILLFUNC             1      TIFFFaxFillFunc    G3/G4 compression pseudo-tag
      +TIFFTAG_FILLORDER               1      uint16             +
      +TIFFTAG_GROUP3OPTIONS           1      uint32             +
      +TIFFTAG_GROUP4OPTIONS           1      uint32             +
      +TIFFTAG_HALFTONEHINTS           2      uint16
      +TIFFTAG_HOSTCOMPUTER            1      char*
      +TIFFTAG_IMAGEDESCRIPTION        1      char*
      +TIFFTAG_IMAGEDEPTH              1      uint32             +
      +TIFFTAG_IMAGELENGTH             1      uint32
      +TIFFTAG_IMAGEWIDTH              1      uint32             +
      +TIFFTAG_INKNAMES                1      char*
      +TIFFTAG_INKSET                  1      uint16             +
      +TIFFTAG_JPEGTABLES              2      uint32*,void*      + count & tables
      +TIFFTAG_JPEGQUALITY             1      int                JPEG pseudo-tag
      +TIFFTAG_JPEGCOLORMODE           1      int                + JPEG pseudo-tag
      +TIFFTAG_JPEGTABLESMODE          1      int                + JPEG pseudo-tag
      +TIFFTAG_MAKE                    1      char*
      +TIFFTAG_MATTEING                1      uint16             +
      +TIFFTAG_MAXSAMPLEVALUE          1      uint16
      +TIFFTAG_MINSAMPLEVALUE          1      uint16
      +TIFFTAG_MODEL                   1      char*
      +TIFFTAG_ORIENTATION             1      uint16
      +TIFFTAG_PAGENAME                1      char*
      +TIFFTAG_PAGENUMBER              2      uint16
      +TIFFTAG_PHOTOMETRIC             1      uint16
      +TIFFTAG_PLANARCONFIG            1      uint16             +
      +TIFFTAG_PREDICTOR               1      uint16             +
      +TIFFTAG_PRIMARYCHROMATICITIES   1      float*             6-entry array
      +TIFFTAG_REFERENCEBLACKWHITE     1      float*             + 2*SamplesPerPixel array
      +TIFFTAG_RESOLUTIONUNIT          1      uint16
      +TIFFTAG_ROWSPERSTRIP            1      uint32             + must be > 0
      +TIFFTAG_SAMPLEFORMAT            1      uint16             +
      +TIFFTAG_SAMPLESPERPIXEL         1      uint16             + value must be <= 4
      +TIFFTAG_SMAXSAMPLEVALUE         1      double
      +TIFFTAG_SMINSAMPLEVALUE         1      double
      +TIFFTAG_SOFTWARE                1      char*
      +TIFFTAG_STONITS                 1      double             +
      +TIFFTAG_SUBFILETYPE             1      uint32
      +TIFFTAG_SUBIFD                  2      uint16,uint32*     count & offsets array
      +TIFFTAG_TARGETPRINTER           1      char*
      +TIFFTAG_THRESHHOLDING           1      uint16
      +TIFFTAG_TILEDEPTH               1      uint32             +
      +TIFFTAG_TILELENGTH              1      uint32             + must be a multiple of 8
      +TIFFTAG_TILEWIDTH               1      uint32             + must be a multiple of 8
      +TIFFTAG_TRANSFERFUNCTION        1 or 3 dd                 uint16*1<<BitsPerSample entry arrays
      +TIFFTAG_XPOSITION               1      float
      +TIFFTAG_XRESOLUTION             1      float
      +TIFFTAG_WHITEPOINT              1      float*             2-entry array
      +TIFFTAG_YCBCRCOEFFICIENTS       1      float*             + 3-entry array
      +TIFFTAG_YCBCRPOSITIONING        1      uint16             +
      +TIFFTAG_YCBCRSAMPLING           2      uint16             +
      +TIFFTAG_YPOSITION               1      float
      +TIFFTAG_YRESOLUTION             1      float
      +TIFFTAG_ICCPROFILE              2      uint32,void*       count, profile data*
      +
      + +

      ++ Tag may not have its values changed once data is written. +
      + + +dd +If +SamplesPerPixel + +is one, then a single array is passed; otherwise three arrays should be +passed. + +* The contents of this field are quite complex. See +The ICC Profile Format Specification, + +Annex B.3 "Embedding ICC Profiles in TIFF Files" +(available at http://www.color.org) for an explanation. +
      + +  +

      RETURN VALUES

      + +1 is returned if the tag is defined in the current +directory; otherwise a 0 is returned. +  +

      RETURN VALUES

      + +1 is returned if the operation was successful. +Otherwise, 0 is returned if an error was detected. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +%s: Cannot modify tag "%s" while writing. +Data has already been written to the file, so the +specified tag's value can not be changed. +This restriction is applied to all tags that affect +the format of written data. +

      + +%d: Bad value for "%s". +An invalid value was supplied for the named tag. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFGetField(3T), + +TIFFSetDirectory(3T), + +TIFFWriteDirectory(3T), + +TIFFReadDirectory(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFWarning.3t.html b/html/man/TIFFWarning.3t.html new file mode 100755 index 0000000..f7fbbca --- /dev/null +++ b/html/man/TIFFWarning.3t.html @@ -0,0 +1,98 @@ + +Manpage of TIFFWarning + +

      TIFFWarning

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFWarning, TIFFSetWarningHandler - library warning interface +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +void TIFFWarning(const char* module, const char* fmt, ...) + +

      +#include <stdargh.h> + +
      + +typedef void (*TIFFWarningHandler)(const char* module, const char* fmt, va_list ap); + +
      + +TIFFWarningHandler TIFFSetWarningHandler(TIFFWarningHandler handler); + +  +

      DESCRIPTION

      + +TIFFWarning + +invokes the library-wide warning handler function +to (normally) write a warning message to the +stderr. + +The +fmt + +parameter is a +printf(3S) + +format string, and any number arguments can be supplied. +The +module + +parameter is interpreted as a string that, if non-zero, +should be printed before the message; it typically +is used to identify the software module in which a warning +is detected. +

      + +Applications that desire to capture control in the event of a warning +should use +TIFFSetWarningHandler + +to override the default warning handler. +A +NULL +(0) warning handler function may be installed to +suppress error messages. +  +

      RETURN VALUES

      + +TIFFSetWarningHandler + +returns a reference to the previous error handling function. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFError(3T), + +printf(3S) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFWriteDirectory.3t.html b/html/man/TIFFWriteDirectory.3t.html new file mode 100755 index 0000000..86e6ffa --- /dev/null +++ b/html/man/TIFFWriteDirectory.3t.html @@ -0,0 +1,148 @@ + +Manpage of TIFFWriteDirectory + +

      TIFFWriteDirectory

      +Section: Misc. Reference Manual Pages (3T)
      Updated: December 16, 1991
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFWriteDirectory - write the current directory in an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +int TIFFWriteDirectory(TIFF* tif) + +  +

      DESCRIPTION

      + +Write the contents of the current directory to the file and setup +to create a new subfile in the same file. +Applications only need to call +TIFFWriteDirectory + +when writing multiple subfiles to a single +TIFF +file. +TIFFWriteDirectory + +is automatically called by +TIFFClose + +and +TIFFFlush + +to write a modified directory if the file is open for writing. +  +

      RETURN VALUES

      + +1 is returned when the contents are successfully +written to the file. +Otherwise, 0 is returned if an error was encountered when writing +the directory contents. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +Error post-encoding before directory write. + +Before writing the contents of the current directory, any pending +data are flushed. +This message indicates that an error occurred while doing this. +

      + +Error flushing data before directory write. + +Before writing the contents of the current directory, any pending +data are flushed. +This message indicates that an error occurred while doing this. +

      + +Cannot write directory, out of space. + +There was not enough space to allocate a temporary area for +the directory that was to be written. +

      + +Error writing directory count. + +A write error occurred when writing the count of fields in the directory. +

      + +Error writing directory contents. + +A write error occurred when writing the directory fields. +

      + +Error writing directory link. + +A write error occurred when writing the link to the next directory. +

      + +Error writing data for field "%s". +A write error occurred when writing indirect data for the specified field. +

      + +Error writing TIFF header. + +A write error occurred when re-writing header at the front of the file. +

      + +Error fetching directory count. + +A read error occurred when fetching the directory count field for +a previous directory. +This can occur when setting up a link to the directory that is being +written. +

      + +Error fetching directory link. + +A read error occurred when fetching the directory link field for +a previous directory. +This can occur when setting up a link to the directory that is being +written. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFError(3T), + +TIFFReadDirectory(3T), + +TIFFSetDirectory(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFWriteEncodedStrip.3t.html b/html/man/TIFFWriteEncodedStrip.3t.html new file mode 100755 index 0000000..d56a668 --- /dev/null +++ b/html/man/TIFFWriteEncodedStrip.3t.html @@ -0,0 +1,147 @@ + +Manpage of TIFFWriteEncodedStrip + +

      TIFFWriteEncodedStrip

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFWritedEncodedStrip - compress and write a strip of data to an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +tsize_t TIFFWriteEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) + +  +

      DESCRIPTION

      + +Compress +size + +bytes of raw data from +buf + +and write the result to the specified strip; replacing +any previously written data. +Note that the value of +strip + +is a ``raw strip number.'' +That is, the caller must take into account whether or not the +data are organized in separate places (PlanarConfiguration=2). + +  +

      NOTES

      + +The library writes encoded data using the native machine byte order. +Correctly implemented +TIFF +readers are expected to do any necessary byte-swapping to +correctly process image data with BitsPerSample greater than 8. +

      + +The strip number must be valid according to the current settings +of the +ImageLength + +and +RowsPerStrip + +tags. +An image may be dynamically grown by increasing the value of +ImageLength + +prior to each call to +TIFFWriteEncodedStrip. + +  +

      RETURN VALUES

      + +-1 is returned if an error was encountered. +Otherwise, the value of +size + +is returned. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +%s: File not open for writing. +The file was opened for reading, not writing. +

      + +Can not write scanlines to a tiled image. +The image is assumed to be organized in tiles because the +TileWidth + +and +TileLength + +tags have been set with +TIFFSetField(3T). + +

      + +%s: Must set "ImageWidth" before writing data. +The image's width has not be set before the first write. +See +TIFFSetField(3T) + +for information on how to do this. +

      + +%s: Must set "PlanarConfiguration" before writing data. +The organization of data has not be defined before the first write. +See +TIFFSetField(3T) + +for information on how to do this. +

      + +%s: No space for strip arrays". +There was not enough space for the arrays that hold strip +offsets and byte counts. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFWriteScanline(3T), + +TIFFWriteRawStrip(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFWriteEncodedTile.3t.html b/html/man/TIFFWriteEncodedTile.3t.html new file mode 100755 index 0000000..556b55e --- /dev/null +++ b/html/man/TIFFWriteEncodedTile.3t.html @@ -0,0 +1,137 @@ + +Manpage of TIFFWriteEncodedTile + +

      TIFFWriteEncodedTile

      +Section: Misc. Reference Manual Pages (3T)
      Updated: December 16, 1991
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFWritedEncodedTile - compress and write a tile of data to an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +tsize_t TIFFWriteEncodedTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size) + +  +

      DESCRIPTION

      + +Compress +size + +bytes of raw data from +buf + +and +append + +the result to the end of the specified tile. +Note that the value of +tile + +is a ``raw tile number.'' +That is, the caller must take into account whether or not the +data are organized in separate places (PlanarConfiguration=2). + +TIFFComputeTile + +automatically does this when converting an (x,y,z,sample) +coordinate quadruple to a tile number. +  +

      NOTES

      + +The library writes encoded data using the native machine byte order. +Correctly implemented +TIFF +readers are expected to do any necessary byte-swapping to +correctly process image data with BitsPerSample greater than 8. +  +

      RETURN VALUES

      + +-1 is returned if an error was encountered. +Otherwise, the value of +size + +is returned. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +%s: File not open for writing. +The file was opened for reading, not writing. +

      + +Can not write tiles to a stripped image. +The image is assumed to be organized in strips because neither of the +TileWidth + +or +TileLength + +tags have been set with +TIFFSetField(3T). + +

      + +%s: Must set "ImageWidth" before writing data. +The image's width has not be set before the first write. +See +TIFFSetField(3T) + +for information on how to do this. +

      + +%s: Must set "PlanarConfiguration" before writing data. +The organization of data has not be defined before the first write. +See +TIFFSetField(3T) + +for information on how to do this. +

      + +%s: No space for tile arrays". +There was not enough space for the arrays that hold tile +offsets and byte counts. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFWriteTile(3T), + +TIFFWriteRawTile(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFWriteRawStrip.3t.html b/html/man/TIFFWriteRawStrip.3t.html new file mode 100755 index 0000000..a5dbf8a --- /dev/null +++ b/html/man/TIFFWriteRawStrip.3t.html @@ -0,0 +1,134 @@ + +Manpage of TIFFWriteRawstrip + +

      TIFFWriteRawstrip

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFWriteRawStrip - write a strip of raw data to an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +tsize_t TIFFWriteRawStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) + +  +

      DESCRIPTION

      + +Append +size + +bytes of raw data to the specified strip. +  +

      NOTES

      + +The strip number must be valid according to the current settings +of the +ImageLength + +and +RowsPerStrip + +tags. +An image may be dynamically grown by increasing the value of +ImageLength + +prior to each call to +TIFFWriteRawStrip. + +  +

      RETURN VALUES

      + +-1 is returned if an error occurred. +Otherwise, the value of +size + +is returned. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +%s: File not open for writing. +The file was opened for reading, not writing. +

      + +Can not write scanlines to a tiled image. +The image is assumed to be organized in tiles because the +TileWidth + +and +TileLength + +tags have been set with +TIFFSetField(3T). + +

      + +%s: Must set "ImageWidth" before writing data. +The image's width has not be set before the first write. +See +TIFFSetField(3T) + +for information on how to do this. +

      + +%s: Must set "PlanarConfiguration" before writing data. +The organization of data has not be defined before the first write. +See +TIFFSetField(3T) + +for information on how to do this. +

      + +%s: No space for strip arrays". +There was not enough space for the arrays that hold strip +offsets and byte counts. +

      + +%s: Strip %d out of range, max %d. +The specified strip is not a valid strip according to the +currently specified image dimensions. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFWriteEncodedStrip(3T), + +TIFFWriteScanline(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFWriteRawTile.3t.html b/html/man/TIFFWriteRawTile.3t.html new file mode 100755 index 0000000..09d9101 --- /dev/null +++ b/html/man/TIFFWriteRawTile.3t.html @@ -0,0 +1,116 @@ + +Manpage of TIFFWriteRawtile + +

      TIFFWriteRawtile

      +Section: Misc. Reference Manual Pages (3T)
      Updated: December 16, 1991
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFWriteRawTile - write a tile of raw data to an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +tsize_t TIFFWriteRawTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size) + +  +

      DESCRIPTION

      + +Append +size + +bytes of raw data to the specified tile. +  +

      RETURN VALUES

      + +-1 is returned if an error occurred. +Otherwise, the value of +size + +is returned. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +%s: File not open for writing. +The file was opened for reading, not writing. +

      + +Can not write tiles to a stripped image. +The image is assumed to be organized in strips because neither of the +TileWidth + +or +TileLength + +tags have been set with +TIFFSetField(3T). + +

      + +%s: Must set "ImageWidth" before writing data. +The image's width has not be set before the first write. +See +TIFFSetField(3T) + +for information on how to do this. +

      + +%s: Must set "PlanarConfiguration" before writing data. +The organization of data has not be defined before the first write. +See +TIFFSetField(3T) + +for information on how to do this. +

      + +%s: No space for tile arrays". +There was not enough space for the arrays that hold tile +offsets and byte counts. +

      + +%s: Specified tile %d out of range, max %d. +The specified tile is not valid according to the currently +specified image dimensions. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFWriteEncodedTile(3T), + +TIFFWriteScanline(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:38 GMT, November 23, 1999 + + diff --git a/html/man/TIFFWriteScanline.3t.html b/html/man/TIFFWriteScanline.3t.html new file mode 100755 index 0000000..75f5c78 --- /dev/null +++ b/html/man/TIFFWriteScanline.3t.html @@ -0,0 +1,225 @@ + +Manpage of TIFFWriteScanline + +

      TIFFWriteScanline

      +Section: Misc. Reference Manual Pages (3T)
      Updated: December 16, 1991
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFWriteScanline - write a scanline to an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +int TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) + +  +

      DESCRIPTION

      + +Write data to a file at the specified row. +The +sample + +parameter is used only if data are organized in separate planes (PlanarConfiguration=2). + +The data are assumed to be uncompressed and in the native +bit- and byte-order of the host machine. +The data written to the file is +compressed according to the compression scheme +of the current +TIFF +directory (see further below). +If the current scanline is past the end of the current subfile, the +ImageLength + +field is automatically increased to include the scanline (except +for +PlanarConfiguration=2, + +where the +ImageLength + +cannot be changed once the first data are written). +If the +ImageLength + +is increased, the +StripOffsets + +and +StripByteCounts + +fields are similarly enlarged to reflect data written past the +previous end of image. +  +

      NOTES

      + +The library writes encoded data using the native machine byte order. +Correctly implemented +TIFF +readers are expected to do any necessary byte-swapping to +correctly process image data with BitsPerSample greater than 8. +The library attempts to hide bit-ordering differences +between the image and the native machine by converting data +from the native machine order. +

      + +In C++ the +sample + +parameter defaults to 0. +

      + +Once data are written to a file for the current directory, +the values of certain tags may not be altered; see +TIFFSetField(3T) + +for more information. +

      + +It is not possible to write scanlines to a file that +uses a tiled organization. The routine +TIFFIsTiled + +can be used to determine if the file is organized +as tiles or strips. +  +

      RETURN VALUES

      + +TIFFWriteScanline + +returns -1 if it immediately detects an error +and 1 for a successful write. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +

      + +%s: File not open for writing . + +The file was opened for reading, not writing. +

      + +Can not write scanlines to a tiled image. + +An attempt was made to write a scanline to a tiled image. +The image is assumed to be organized in tiles because the +TileWidth + +and +TileLength + +tags have been set with +TIFFSetField(3T). + +

      + +Compression algorithm does not support random access. + +Data was written in a non-sequential order to a file that +uses a compression algorithm and that has +RowsPerStrip + +greater than one. +That is, data in the image is to be stored in a compressed form, +and with multiple rows packed into a strip. +In this case, the library does not support random access to the data. +The data should either be written as entire strips, +sequentially by rows, or the value of +RowsPerStrip + +should be set to one. +

      + +%s: Must set "ImageWidth" before writing data. +The image's width has not be set before the first write. +See +TIFFSetField(3T) + +for information on how to do this. +

      + +%s: Must set "PlanarConfiguration" before writing data. +The organization of data has not be defined before the first write. +See +TIFFSetField(3T) + +for information on how to do this. +

      + +Can not change "ImageLength" when using separate planes. +Separate image planes are being used (PlanarConfiguration=2), + +but the number of rows has not been specified before the first write. +The library supports the dynamic growth of an image only when data +are organized in a contiguous manner (PlanarConfiguration=1). + +

      + +%d: Sample out of range, max %d. + +The +sample + +parameter was greater than the value of the SamplesPerPixel tag. +

      + +%s: No space for strip arrays . + +There was not enough space for the arrays that hold strip +offsets and byte counts. +  +

      BUGS

      + +Writing subsampled YCbCR data does not work correctly +because, for +PlanarConfiguration=2 + +the size of a scanline is not calculated on a per-sample basis, +and for +PlanarConfiguration=1 + +the library does not pack the block-interleaved samples. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFWriteEncodedStrip(3T), + +TIFFWriteRawStrip(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      NOTES
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:39 GMT, November 23, 1999 + + diff --git a/html/man/TIFFWriteTile.3t.html b/html/man/TIFFWriteTile.3t.html new file mode 100755 index 0000000..b8d676c --- /dev/null +++ b/html/man/TIFFWriteTile.3t.html @@ -0,0 +1,109 @@ +Content-type: text/html + + +Manpage of TIFFWriteTile + +

      TIFFWriteTile

      +Section: Misc. Reference Manual Pages (3T)
      Updated: November 29, 1999
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFWriteTile - encode and write a tile of data to an open +TIFF +file +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +tsize_t TIFFWriteTile(TIFF* tif, tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t sample) + +  +

      DESCRIPTION

      + +Write the data for the tile +containing + +the specified coordinates. +The data in +buf + +are is (potentially) compressed, and written to the indicated file, normally +being appended to the end of the file. +The buffer must be contain an entire tile of data. +Applications should call the routine +TIFFTileSize + +to find out the size (in bytes) of a tile buffer. +The +x + +and +y + +parameters are always used by +TIFFWriteTile. + +The +z + +parameter is used if the image is deeper than 1 slice (ImageDepth>1). + +The +sample + +parameter is used only if data are organized in separate planes (PlanarConfiguration=2). + +  +

      RETURN VALUES

      + +TIFFWriteTile + +returns -1 if it detects an error; otherwise the number of +bytes in the tile is returned. +  +

      DIAGNOSTICS

      + +All error messages are directed to the +TIFFError(3T) + +routine. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFCheckTile(3T), + +TIFFComputeTile(3T), + +TIFFOpen(3T), + +TIFFReadTile(3T), + +TIFFWriteScanline(3T), + +TIFFWriteEncodedTile(3T), + +TIFFWriteRawTile(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      RETURN VALUES
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +Time: 18:38:00 GMT, November 30, 1999 + + diff --git a/html/man/TIFFbuffer.3t.html b/html/man/TIFFbuffer.3t.html new file mode 100755 index 0000000..00fdb2e --- /dev/null +++ b/html/man/TIFFbuffer.3t.html @@ -0,0 +1,101 @@ + +Manpage of TIFFBUFFER + +

      TIFFBUFFER

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReadBufferSetup, +TIFFWriteBufferSetup +- I/O buffering control routines +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +int TIFFReadBufferSetup(TIFF*, tdata_t buffer, tsize_t size);
      +int TIFFWriteBufferSetup(TIFF*, tdata_t buffer, tsize_t size);
      +
      + +  +

      DESCRIPTION

      + +The following routines are provided for client-control of the +I/O buffers used by the library. +Applications need never use these routines; they are provided only +for ``intelligent clients'' that wish to optimize memory usage and/or +eliminate potential copy operations that can occur when working with +images that have data stored without compression. +

      + +TIFFReadBufferSetup + +sets up the data buffer used to read raw (encoded) data from a file. +If the specified pointer is +NULL +(zero), then a buffer of the appropriate size is allocated. +Otherwise the caller must guarantee that the buffer is large +enough to hold any individual strip of raw data. +TIFFReadBufferSetup + +returns a non-zero value if the setup was successful and zero otherwise. +

      + +TIFFWriteBufferSetup + +sets up the data buffer used to write raw (encoded) data to a file. +If the specified +size + +is -1 then the buffer size is selected to hold a complete +tile or strip, or at least 8 kilobytes, whichever is greater. +If the specified +buffer + +is +NULL +(zero), then a buffer of the appropriate size is dynamically allocated. +TIFFWriteBufferSetup + +returns a non-zero value if the setup was successful and zero otherwise. +  +

      DIAGNOSTICS

      + +%s: No space for data buffer at scanline %ld. + +TIFFReadBufferSetup + +was unable to dynamically allocate space for a data buffer. +

      + +%s: No space for output buffer. + +TIFFWriteBufferSetup + +was unable to dynamically allocate space for a data buffer. +  +

      SEE ALSO

      + +libtiff(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:39 GMT, November 23, 1999 + + diff --git a/html/man/TIFFcodec.3t.html b/html/man/TIFFcodec.3t.html new file mode 100755 index 0000000..cda02c8 --- /dev/null +++ b/html/man/TIFFcodec.3t.html @@ -0,0 +1,102 @@ + +Manpage of CODEC + +

      CODEC

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFFindCODEC, TIFFRegisterCODEC, TIFFUnRegisterCODEC - codec-related utility routines +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +const TIFFCodec* TIFFFindCODEC(uint16 scheme); + +
      + +TIFFCodec* TIFFRegisterCODEC(uint16 scheme, const char* method, TIFFInitMethod init); + +
      + +void TIFFUnRegisterCODEC(TIFFCodec* codec); + +  +

      DESCRIPTION

      + +libtiff + +supports a variety of compression schemes implemented by software +codecs. + +Each codec adheres to a modular interface that provides for +the decoding and encoding of image data; as well as some other +methods for initialization, setup, cleanup, and the control +of default strip and tile sizes. +Codecs are identified by the associated value of the +TIFF +Compression + +tag; e.g. 5 for +LZW +compression. +

      + +The +TIFFRegisterCODEC + +routine can be used to +augment or override the set of codecs available to an application. +If the specified +scheme + +already has a registered codec then it is +overridden + +and any images with data encoded with this +compression scheme will be decoded using the supplied coded. +  +

      DIAGNOSTICS

      + +No space to register compression scheme %s. + +TIFFRegisterCODEC + +was unable to allocate memory for the data structures needed +to register a codec. +

      + +Cannot remove compression scheme %s; not registered. + +TIFFUnRegisterCODEC + +did not locate the specified codec in the table of registered +compression schemes. +  +

      SEE ALSO

      + +libtiff(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:39 GMT, November 23, 1999 + + diff --git a/html/man/TIFFmemory.3t.html b/html/man/TIFFmemory.3t.html new file mode 100755 index 0000000..bf92beb --- /dev/null +++ b/html/man/TIFFmemory.3t.html @@ -0,0 +1,104 @@ + +Manpage of MEMORY + +

      MEMORY

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +_TIFFmalloc, _TIFFrealloc, _TIFFfree, _TIFFmemset, _TIFFmemcpy, _TIFFmemcmp, - memory management-related functions for use with +TIFF +files +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +tdata_t _TIFFmalloc(tsize_t);
      +tdata_t _TIFFrealloc(tdata_t, tsize_t);
      +void _TIFFfree(tdata_t);
      +void _TIFFmemset(tdata_t, int, tsize_t);
      +void _TIFFmemcpy(tdata_t, const tdata_t, tsize_t);
      +int _TIFFmemcmp(const tdata_t, const tdata_t, tsize_t);
      +
      + +  +

      DESCRIPTION

      + +These routines are provided for writing portable software that uses +libtiff; + +they hide any memory-management related issues, such as dealing with +segmented architectures found on 16-bit machines. +

      + +_TIFFmalloc + +and +_TIFFrealloc + +are used to dynamically allocate and reallocate memory used by +libtiff; + +such as memory passed into the I/O routines. +Memory allocated through these interfaces is released back to the +system using the +_TIFFfree + +routine. +

      + +Memory allocated through one of the above interfaces can be set to +a known value using +_TIFFmemset, + +copied to another memory location using +_TIFFmemcpy, + +or compared for equality using +_TIFFmemcmp. + +These routines conform to the equivalent +ANSI +C routines: +memset, + +memcpy, + +and +memcmp, + +repsectively. +  +

      DIAGNOSTICS

      + +None. +  +

      SEE ALSO

      + +libtiff(3T), + +malloc(3C), + +memory(3C) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:39 GMT, November 23, 1999 + + diff --git a/html/man/TIFFquery.3t.html b/html/man/TIFFquery.3t.html new file mode 100755 index 0000000..5a364d9 --- /dev/null +++ b/html/man/TIFFquery.3t.html @@ -0,0 +1,178 @@ + +Manpage of QUERY + +

      QUERY

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFCurrentRow, +TIFFCurrentStrip, +TIFFCurrentTile, +TIFFCurrentDirectory, +TIFFLastDirectory, +TIFFFileno, +TIFFFileName, +TIFFGetMode, +TIFFIsTiled, +TIFFIsByteSwapped, +TIFFIsUpSampled, +TIFFIsMSB2LSB +- query routines +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +uint32 TIFFCurrentRow(TIFF* tif)
      +tstrip_t TIFFCurrentStrip(TIFF* tif)
      +ttile_t TIFFCurrentTile(TIFF* tif)
      +tdir_t TIFFCurrentDirectory(TIFF* tif)
      +int TIFFLastDirectory(TIFF* tif)
      +int TIFFFileno(TIFF* tif)
      +char* TIFFFileName(TIFF* tif)
      +int TIFFGetMode(TIFF* tif)
      +int TIFFIsTiled(TIFF* tif)
      +int TIFFIsByteSwapped(TIFF* tif)
      +int TIFFIsUpSampled(TIFF* tif)
      +int TIFFIsMSB2LSB(TIFF* tif)
      +const char* TIFFGetVersion(void)
      +
      + +  +

      DESCRIPTION

      + +The following routines return status information about an open +TIFF +file. +

      + +TIFFCurrentDirectory + +returns the index of the current directory (directories +are numbered starting at 0). +This number is suitable for use with the +TIFFSetDirectory + +routine. +

      + +TIFFLastDirectory + +returns a non-zero value if the current directory is the +last directory in the file; +otherwise zero is returned. +

      + +TIFFCurrentRow, + +TIFFCurrentStrip, + +and +TIFFCurrentTile, + +return the current row, strip, and tile, respectively, +that is being read or written. +These values are updated each time a read or write is done. +

      + +TIFFFileno + +returns the underlying file descriptor used to access the +TIFF +image in the filesystem. +

      + +TIFFFileName + +returns the pathname argument passed to +TIFFOpen + +or +TIFFFdOpen. + +

      + +TIFFGetMode + +returns the mode with which the underlying file was opened. +On +UNIX +systems, this is the value passed to the +open(2) + +system call. +

      + +TIFFIsTiled + +returns a non-zero value if the image data has +a tiled organization. +Zero is returned if the image data is organized in strips. +

      + +TIFFIsByteSwapped + +returns a non-zero value if the image data was in a different +byte-order than the host machine. +Zero is returned if the image data and local host byte-orders +are the same. +Data samples that are more than 8 bits wide must be byte-swapped +by the application. +

      + +TIFFIsUpSampled + +returns a non-zero value if image data returned through the +read interface routines is being up-sampled. +This can be useful to applications that want to calculate +I/O buffer sizes to reflect this usage (though the usual +strip and tile size routines already do this). +

      + +TIFFIsMSB2LSB + +returns a non-zero value if the image data is being returned with +bit 0 as the most significant bit. +

      + +TIFFGetVersion + +returns an +ASCII +string that has a version stamp for the +TIFF +library software. +  +

      DIAGNOSTICS

      + +None. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFFdOpen(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:39 GMT, November 23, 1999 + + diff --git a/html/man/TIFFsize.3t.html b/html/man/TIFFsize.3t.html new file mode 100755 index 0000000..d88d332 --- /dev/null +++ b/html/man/TIFFsize.3t.html @@ -0,0 +1,75 @@ + +Manpage of TIFFSIZE + +

      TIFFSIZE

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFScanlineSize, +TIFFRasterScanlineSize, +- return the size of various items associated with an open +TIFF +file +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +tsize_t TIFFRasterScanlineSize(TIFF* tif)
      +tsize_t TIFFScanlineSize(TIFF* tif)
      +
        +

      DESCRIPTION

      + +TIFFScanlineSize + +returns the size in bytes of a row of data as it would be +returned in a call to +TIFFReadScanline, + +or as it would be expected in a call to +TIFFWriteScanline. + +

      + +TIFFRasterScanlineSize + +returns the size in bytes of a complete decoded and packed +raster scanline. +Note that this value may be different from the value returned by +TIFFScanlineSize + +if data is stored as separate planes. +  +

      DIAGNOSTICS

      + +None. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFOpen(3T), + +TIFFReadScanline(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:39 GMT, November 23, 1999 + + diff --git a/html/man/TIFFstrip.3t.html b/html/man/TIFFstrip.3t.html new file mode 100755 index 0000000..788c54f --- /dev/null +++ b/html/man/TIFFstrip.3t.html @@ -0,0 +1,131 @@ + +Manpage of TIFFSTRIP + +

      TIFFSTRIP

      +Section: Misc. Reference Manual Pages (3T)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFDefaultStripSize, +TIFFStripSize, +TIFFVStripSize, +TIFFComputeStrip, +TIFFNumberOfStrips +- strip-related utility routines +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +uint32 TIFFDefaultStripSize(TIFF* tif, uint32 estimate)
      +tsize_t TIFFStripSize(TIFF* tif)
      +tsize_t TIFFVStripSize(TIFF* tif, uint32 nrows)
      +tstrip_t TIFFComputeStrip(TIFF* tif, uint32 row, tsample_t sample)
      +tstrip_t TIFFNumberOfStrips(TIFF* tif)
      +
      + +  +

      DESCRIPTION

      + +TIFFDefaultStripSize + +returns the number of rows for a reasonable-sized strip according +to the current settings of the +ImageWidth, + +BitsPerSample, + +SamplesPerPixel, + +tags and any compression-specific requirements. +If the +estimate + +parameter, if non-zero, then it is taken as an estimate of the desired +strip size and adjusted according to any compression-specific requirements. +The value returned by this function is typically used to define the +RowsPerStrip + +tag. +In lieu of any unusual requirements +TIFFDefaultStripSize + +tries to create strips that have approximately +8 kilobytes of uncompressed data. +

      + +TIFFStripSize + +returns the equivalent size for a strip of data as it would +be returned in a call to +TIFFReadEncodedStrip + +or as it would be expected in a call to +TIFFWriteEncodedStrip. + +

      + +TIFFVStripSize + +returns the number of bytes in a strip with +nrows + +rows of data. +

      + +TIFFComputeStrip + +returns the strip that contains the specified coordinates. +A valid strip is always returned; +out-of-range coordinate values are clamped to the bounds of the image. +The +row + +parameter is always used in calculating a strip. +The +sample + +parameter is used only if data are organized in separate planes (PlanarConfiguration=2). + +

      + +TIFFNumberOfStrips + +returns the number of strips in the image. +  +

      DIAGNOSTICS

      + +None. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFReadEncodedStrip(3T), + +TIFFReadRawStrip(3T), + +TIFFWriteEncodedStrip(3T), + +TIFFWriteRawStrip(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:39 GMT, November 23, 1999 + + diff --git a/html/man/TIFFswab.3t.html b/html/man/TIFFswab.3t.html new file mode 100755 index 0000000..268b0ce --- /dev/null +++ b/html/man/TIFFswab.3t.html @@ -0,0 +1,108 @@ + +Manpage of SWAB + +

      SWAB

      +Section: Misc. Reference Manual Pages (3T)
      Updated: December 16, 1991
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFReverseBits, TIFFSwabShort, TIFFSwabLong, TIFFSwabArrayOfShort, TIFFSwabArrayOfLong - byte- and bit-swapping routines +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +const unsigned char* TIFFGetBitRevTable(int reversed); + +
      + +void TIFFReverseBits(u_char* data, unsigned long nbytes) + +
      + +void TIFFSwabShort(uint16* data) + +
      + +void TIFFSwabLong(uint32* data) + +
      + +void TIFFSwabArrayOfShort(uint16* data, unsigned long nshorts) + +
      + +void TIFFSwabArrayOfLong(uint32* data, unsigned long nlongs) + +  +

      DESCRIPTION

      + +The following routines are used by the library to swap +16- and 32-bit data and to reverse the order of bits in bytes. +

      + +TIFFSwabShort + +and +TIFFSwabLong + +swap the bytes in a single 16-bit and 32-bit item, respectively. +TIFFSwabArrayOfShort + +and +TIFFSwabArrayOfLong + +swap the bytes in an array of 16-bit and 32-bit items, respectively. +

      + +TIFFReverseBits + +replaces each byte in +data + +with the equivalent bit-reversed value. +This operation is done with a lookup table, +TIFFBitRevTable + +which is declared public. +A second table, +TIFFNoBitRevTable + +is also declared public; it is a lookup table that +can be used as an +identity function; + +i.e. +TIFFNoBitRevTable[n] == n. + +  +

      DIAGNOSTICS

      + +None. +  +

      SEE ALSO

      + +libtiff(3T), + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:39 GMT, November 23, 1999 + + diff --git a/html/man/TIFFtile.3t.html b/html/man/TIFFtile.3t.html new file mode 100755 index 0000000..5baaf5c --- /dev/null +++ b/html/man/TIFFtile.3t.html @@ -0,0 +1,183 @@ + +Manpage of TIFFTILE + +

      TIFFTILE

      +Section: Misc. Reference Manual Pages (3T)
      Updated: February 14, 1992
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +TIFFTileSize, +TIFFTileRowSize, +TIFFVTileSize, +TIFFDefaultTileSize, +TIFFComputeTile, +TIFFCheckTile, +TIFFNumberOfTiles +- tile-related utility routines +  +

      SYNOPSIS

      + +
      +#include <tiffio.h>
      +void TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th)
      +tsize_t TIFFTileSize(TIFF* tif)
      +tsize_t TIFFTileRowSize(TIFF* tif)
      +tsize_t TIFFVTileSize(TIFF* tif, uint32 nrows)
      +ttile_t TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t sample)
      +int TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t sample)
      +ttile_t TIFFNumberOfTiles(TIFF* tif)
      +
      + +  +

      DESCRIPTION

      + +TIFFDefaultTileSize + +returns the pixel width and height of a reasonable-sized tile; +suitable for setting up the +TileWidth + +and +TileLength + +tags. +If the +tw + +and +th + +values passed in are non-zero, then they are adjusted to reflect +any compression-specific requirements. +The returned width and height are constrained to be a multiple +of 16 pixels to conform with the +TIFF +specification. +

      + +TIFFTileSize + +returns the equivalent size for a tile of data as it would +be returned in a call to +TIFFReadTile + +or as it would be expected in a call to +TIFFWriteTile. + +

      + +TIFFVTileSize + +returns the number of bytes in a row-aligned tile with +nrows + +of data. +

      + +TIFFTileRowSize + +returns the number of bytes of a row of data in a tile. +

      + +TIFFComputeTile + +returns the tile that contains the specified coordinates. +A valid tile is always returned; +out-of-range coordinate values are clamped to the bounds of the image. +The +x + +and +y + +parameters are always used in calculating a tile. +The +z + +parameter is used if the image is deeper than 1 slice (ImageDepth>1). + +The +sample + +parameter is used only if data are organized in separate planes (PlanarConfiguration=2). + +

      + +TIFFCheckTile + +returns a non-zero value if the supplied coordinates are +within the bounds of the image and zero otherwise. +The +x + +parameter is checked against the value of the +ImageWidth + +tag. +The +y + +parameter is checked against the value of the +ImageLength + +tag. +The +z + +parameter is checked against the value of the +ImageDepth + +tag (if defined). +The +sample + +parameter is checked against the value of the +SamplesPerPixel + +parameter if the data are organized in separate planes. +

      + +TIFFNumberOfTiles + +returns the number of tiles in the image. +  +

      DIAGNOSTICS

      + +None. +  +

      SEE ALSO

      + +libtiff(3T), + +TIFFReadEncodedTile(3T), + +TIFFReadRawTile(3T), + +TIFFReadTile(3T), + +TIFFWriteEncodedTile(3T), + +TIFFWriteRawTile(3T), + +TIFFWriteTile(3T) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:39 GMT, November 23, 1999 + + diff --git a/html/man/fax2ps.1.html b/html/man/fax2ps.1.html new file mode 100755 index 0000000..15ec9d0 --- /dev/null +++ b/html/man/fax2ps.1.html @@ -0,0 +1,210 @@ + +Manpage of FAX2PS + +

      FAX2PS

      +Section: User Commands (1)
      Updated: March 16, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +fax2ps - convert a +TIFF +facsimile to compressed POSTSCRIPTtm +  +

      SYNOPSIS

      + +fax2ps + +[ +options + +] [ +file... + +] +  +

      DESCRIPTION

      + +fax2ps + +reads one or more +TIFF +facsimile image files and prints a compressed form of +POSTSCRIPT on the standard output that is suitable for printing. +

      + +By default, each page is scaled to reflect the +image dimensions and resolutions stored in the file. +The +-x + +and +-y + +options can be used to specify the horizontal and vertical +image resolutions (lines/inch), respectively. +If the +-S + +option is specified, each page is scaled to fill an output page. +The default output page is 8.5 by 11 inches. +Alternate page dimensions can be specified in inches with the +-W + +and +-H + +options. +

      + +By default +fax2ps + +generates POSTSCRIPT for all pages in the file. +The +-p + +option can be used to select one or more pages from +a multi-page document. +

      + +fax2ps + +generates a compressed form of POSTSCRIPT that is +optimized for sending pages of text to a POSTSCRIPT +printer attached to a host through a low-speed link (such +as a serial line). +Each output page is filled with white and then only +the black areas are drawn. +The POSTSCRIPT specification of the black drawing operations +is optimized by using a special font that encodes the +move-draw operations required to fill +the black regions on the page. +This compression scheme typically results in a substantially +reduced POSTSCRIPT description, relative to the straightforward +imaging of the page with a POSTSCRIPT +image + +operator. +This algorithm can, however, be ineffective +for continuous-tone and white-on-black images. +For these images, it sometimes is more efficient to send +the raster bitmap image directly; see +tiff2ps(1). + +  +

      OPTIONS

      + +
      +
      -p number + +
      +Print only the indicated page. +Multiple pages may be printed by specifying +this option more than once. +
      -x resolution + +
      +Use +resolution + +as the horizontal resolution, in dots/inch, of the image data. +By default this value is taken from the file. +
      -y resolution + +
      +Use +resolution + +as the vertical resolution, in lines/inch, of the image data. +By default this value is taken from the file. +
      -S + +
      +Scale each page of image data to fill the output page dimensions. +By default images are presented according to the dimension +information recorded in the +TIFF +file. +
      -W width + +
      +Use +width + +as the width, in inches, of the output page. +The default page width is 8.5 inches. +
      -H height + +
      +Use +height + +as the height, in inches, of the output page. +The default page height is 11 inches. +
      +  +

      DIAGNOSTICS

      + +Some messages about malformed +TIFF +images come from the +TIFF +library. +

      + +Various messages about badly formatted facsimile images +may be generated due to transmission errors in received +facsimile. +fax2ps + +attempts to recover from such data errors by resynchronizing +decoding at the end of the current scanline. +This can result in long horizontal black lines in the resultant +POSTSCRIPT image. +  +

      NOTES

      + +If the destination printer supports POSTSCRIPT Level II then +it is always faster to just send the encoded bitmap generated +by the +tiff2ps(1) + +program. +  +

      BUGS

      + +fax2ps + +should probably figure out when it is doing a poor +job of compressing the output and just generate +POSTSCRIPT to image the bitmap raster instead. +  +

      SEE ALSO

      + +tiff2ps(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      DIAGNOSTICS
      +
      NOTES
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/fax2tiff.1.html b/html/man/fax2tiff.1.html new file mode 100755 index 0000000..aa38b0b --- /dev/null +++ b/html/man/fax2tiff.1.html @@ -0,0 +1,257 @@ + +Manpage of FAX2TIFF + +

      FAX2TIFF

      +Section: User Commands (1)
      Updated: September 24, 1994
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +fax2tiff - create a +TIFF +Class F fax file from raw fax data +  +

      SYNOPSIS

      + +fax2tiff + +[ +options + +] [ +-o + +output.tif + +] +input.g3 + +  +

      DESCRIPTION

      + +Fax2tiff + +creates a +TIFF +file containing +CCITT +Group 3 or Group 4 encoded data from one or more files containing ``raw'' +Group 3 encoded data (typically obtained directly from a fax modem). +By default, each row of data in the resultant +TIFF +file is 2-dimensionally encoded and +padded or truncated to 1728 pixels, as needed. +The resultant image is a set of low resolution (98 lines/inch) +or medium resolution (196 lines/inch) +pages, each of which is a single strip of data. +The generated file conforms to the +TIFF +Class F (FAX) specification for storing facsimile data. +This means, in particular, that each page of the data does +not + +include the trailing +return to control + +(RTC) code; as required +for transmission by the +CCITT +Group 3 specifications. +The old, ``classic'', format is created if the +-c + +option is used. +(The Class F format can also be requested with the +-f + +option.) +

      + +The default name of the output image is +fax.tif; + +this can be changed with the +-o + +option. +Each input file is assumed to be a separate page of facsimile data +from the same document. +The order in which input files are specified on the command +line is the order in which the resultant pages appear in the +output file. +  +

      OPTIONS

      + +Options that affect the interpretation of input data are: +
      +
      -2 + +
      +Assume input data is 2-d Huffman encoded. +
      -B + +
      +Assume input data was encoded with +black as 0 and white as 1. +
      -L + +
      +Treat input data as having bits filled from least +significant bit (LSB) to most significant bit (MSB). +(This is the default.) +
      -M + +
      +Treat input data as having bits filled from most +significant bit (MSB) to most least bit (LSB). +
      -R + +
      +Specify the vertical resolution, in lines/inch, of the +input images. +By default input are assumed to have a vertical +resolution of 196 lines/inch. +If images are low resolution facsimile, a value of +98 lines/inch should be specified. +
      -W + +
      +Assume input data was encoded with +black as 1 and white as 0. +(This is the default.) +
      +

      + +Options that affect the output file format are: +

      +
      -1 + +
      +Force output to be compressed with the 1-dimensional +version of the +CCITT +Group 3 Huffman encoding algorithm. +
      -4 + +
      +Force output to be compressed with the +CCITT +Group 4 Huffman encoding. +
      -o + +
      +Specify the name of the output file. +
      -p + +
      +Force the last bit of each +End Of Line + +(EOL) code to land on a byte boundary. +This ``zero padding'' will be reflected in the contents of the +Group3Options + +tag of the resultant +TIFF +file. +
      -s + +
      +Stretch the input image vertically by writing each input row of +data twice to the output file. +
      -v + +
      +Force +fax2tiff + +to print the number of rows of data it retrieved from the input file. +
      +  +

      DIAGNOSTICS

      + +The following warnings and errors come from the decoding +routines in the library. +

      + +Warning, %s: Premature EOL at scanline %d (x %d).\n. + +The input data had a row that was shorter than the expected value of 1728. +The row is padded with white. +

      + +%s: Premature EOF at scanline %d (x %d).\n. + +The decoder ran out of data in the middle of a scanline. +The resultant row is padded with white. +

      + +%s: Bad code word at row %d, x %d\n. + +An invalid Group 3 +code + +was encountered while decoding the input file. +The row number and horizontal position is given. +The remainder of the input row is discarded, while +the corresponding output row is padded with white. +

      + +%s: Bad 2D code word at scanline %d.\n. + +An invalid Group 4 or 2D Group 3 +code + +was encountered while decoding the input file. +The row number and horizontal position is given. +The remainder of the input row is discarded, while +the corresponding output row is padded with white. +  +

      BUGS

      + +Should not have the constant width 1728 built into it. +Input data are assumed to have a a ``top left'' orientation; +it should be possible to override this assumption +from the command line. +  +

      SEE ALSO

      + +CCITT Recommendation T.4 + +(Standardization of Group 3 Facsimile Apparatus for Document Transmission). +

      + +The Spirit of TIFF Class F, + +an appendix to the TIFF 5.0 specification prepared by Cygnet Technologies. +

      + +tiffinfo(1), + +tiffdither(1), + +tiffgt(1), + +libtiff(3). + + +


      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      DIAGNOSTICS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/gif2tiff.1.html b/html/man/gif2tiff.1.html new file mode 100755 index 0000000..d0c3ff9 --- /dev/null +++ b/html/man/gif2tiff.1.html @@ -0,0 +1,112 @@ + +Manpage of GIF2TIFF + +

      GIF2TIFF

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +gif2tiff - create a +TIFF +file from a GIF87 format image file +  +

      SYNOPSIS

      + +gif2tiff + +[ +options + +] +input.gif + +output.tif + +  +

      DESCRIPTION

      + +Gif2tiff + +converts a file in the GIF87 format to +TIFF. +The +TIFF +image is created as a palette image, with samples +compressed with the Lempel-Ziv & Welch algorithm (Compression=5). + +These characteristics can overriden, or explicitly specified +with the options described below. +  +

      OPTIONS

      + +
      +
      -c + +
      +Specify a compression scheme to use when writing image data: +-c none + +for no compression, +-c packbits + +for the PackBits compression algorithm, +-c zip + +for the Deflate compression algorithm, +and +-c lzw + +for Lempel-Ziv & Welch (the default). +
      -r + +
      +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +
      +  +

      NOTES

      + +The program is based on Paul Haeberli's +fromgif + +program which, in turn, is based on Marcel J.E. Mol's GIF reader. +  +

      BUGS

      + +Should have more options to control output format. +  +

      SEE ALSO

      + +pal2rgb(1), + +tiffinfo(1), + +tiffcp(1), + +tiffmedian(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      NOTES
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/index.html b/html/man/index.html new file mode 100755 index 0000000..ae6030c --- /dev/null +++ b/html/man/index.html @@ -0,0 +1,69 @@ + + +Libtiff HTML manpage index + + + + + + \ No newline at end of file diff --git a/html/man/libtiff.3t.html b/html/man/libtiff.3t.html new file mode 100755 index 0000000..a91c13d --- /dev/null +++ b/html/man/libtiff.3t.html @@ -0,0 +1,612 @@ + +Manpage of INTRO + +

      INTRO

      +Section: Misc. Reference Manual Pages (3T)
      Updated: August 21, 1997
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +libtiff - introduction to +libtiff, + +a library for reading and writing +TIFF +files +  +

      SYNOPSIS

      + +#include <tiffio.h> + +
      + +cc file.c +-ltiff + +  +

      DESCRIPTION

      + +libtiff + +is a library for reading and writing data files encoded with the +Tag Image File + +format, Revision 6.0 (or revision 5.0 or revision 4.0). +This file format is suitable for archiving multi-color and +monochromatic image data. +

      + +The library supports several compression algorithms, as indicated +by the +Compression + +field, including: +no compression (1), +CCITT +1D Huffman compression (2), +CCITT +Group 3 Facsimile compression (3), +CCITT +Group 4 Facsimile compression (4), +Lempel-Ziv & Welch compression (5), +baseline JPEG compression (7), +word-aligned 1D Huffman compression (32771), +and +PackBits compression (32773). +In addition, several nonstandard compression algorithms are supported: +the 4-bit compression algorithm used +by the +ThunderScan + +program (32809) (decompression only), +NeXT's 2-bit compression algorithm (32766) (decompression only), +an experimental LZ-style algorithm known as Deflate (32946), and +an experimental CIE LogLuv compression scheme designed for images +with high dynamic range (32845 for LogL and 32845 for LogLuv). +Directory information may be in either little- or big-endian byte +order-byte swapping is automatically done by the library. +Data bit ordering may be either Most Significant Bit (MSB) to Least Significant Bit (LSB) or +LSB +to +MSB. +Finally, the library does not support files in which the +BitsPerSample, + +Compression, + +MinSampleValue, + +or +MaxSampleValue + +fields are defined differently on a per-sample basis +(in Rev. 6.0 the +Compression + +tag is not defined on a per-sample basis, so this is immaterial). +  +

      DATA TYPES

      + +The library makes extensive use of C typedefs to promote portability. +Two sets of typedefs are used, one for communication with clients +of the library and one for internal data structures and parsing of the +TIFF +format. +The following typedefs are exposed to users either through +function definitions or through parameters passed through the +varargs interfaces. + +

      + + +

      +typedef unsigned short uint16;        16-bit unsigned integer
      +typedef unsigned <thing> uint32;      32-bit unsigned integer
      +
      +typedef unsigned int ttag_t;          directory tag
      +typedef uint16 tdir_t;                directory index
      +typedef uint16 tsample_t;             sample number
      +typedef uint32 tstrip_t;              strip number
      +typedef uint32 ttile_t;               tile number
      +typedef int32 tsize_t;                i/o size in bytes
      +typedef void* tdata_t;                image data ref
      +typedef void* thandle_t;              client data handle
      +typedef int32 toff_t;                 file offset
      +
      + +

      + +Note that +tstrip_t, + +ttile_t, + +and +tsize_t + +are constrained to be no more than 32-bit quantities by +32-bit fields they are stored in in the +TIFF +image. +Likewise +tsample_t + +is limited by the 16-bit field used to store the +SamplesPerPixel + +tag. +tdir_t + +constrains the maximum number of +IFDs +that may appear in an image and may be an arbitrary size (w/o penalty). +ttag_t + +must be either int, unsigned int, pointer, or double because +the library uses a varargs interface and +ANSI C +restricts the type of the parameter before an ellipsis to be a +promoted type. +toff_t + +is defined as int32 because TIFF file offsets are (unsigned) 32-bit +quantities. +A signed value is used because some interfaces return -1 on error. +Finally, note that user-specified data references are +passed as opaque handles and only cast at the lowest layers where +their type is presumed. +  +

      LIST OF ROUTINES

      + +The following routines are part of the library. +Consult specific manual pages for details on their operation. +The manual page names listed below are for systems +where the full function names can not be encoded in the filesystem; +on most systems doing ``man function-name'' will work. +

      +

      +
      +Name                   Appears on Page  Description
      +
      +TIFFCheckTile          tile.3t          very x,y,z,sample is within image
      +TIFFClientOpen         open.3t          open a file for reading or writing
      +TIFFClose              close.3t         close an open file
      +TIFFComputeStrip       strip.3t         return strip containing y,sample
      +TIFFComputeTile        tile.3t          return tile containing x,y,z,sample
      +TIFFCurrentDirectory   query.3t         return index of current directory
      +TIFFCurrentRow         query.3t         return index of current scanline
      +TIFFCurrentStrip       query.3t         return index of current strip
      +TIFFCurrentTile        query.3t         return index of current tile
      +TIFFError              error.3t         library error handler
      +TIFFFdOpen             open.3t          open a file for reading or writing
      +TIFFFileName           query.3t         return name of open file
      +TIFFFileno             query.3t         return open file descriptor
      +TIFFFlush              flush.3t         flush all pending writes
      +TIFFFlushData          flush.3t         flush pending data writes
      +TIFFGetBitRevTable     swab.3t          return bit reversal table
      +TIFFGetField           getfield.3t      return tag value in current directory
      +TIFFGetFieldDefaulted  getfield.3t      return tag value in current directory
      +TIFFGetMode            query.3t         return open file mode
      +TIFFGetVersion         query.3t         return library version string
      +TIFFIsTiled            query.3t         return true if image data is tiled
      +TIFFIsByteSwapped      query.3t         return true if image data is byte-swapped
      +TIFFNumberOfStrips     strip.3t         return number of strips in an image
      +TIFFNumberOfTiles      tile.3t          return number of tiles in an image
      +TIFFOpen               open.3t          open a file for reading or writing
      +TIFFPrintDirectory     print.3t         print description of the current directory
      +TIFFReadBufferSetup    rdbuf.3t         specify i/o buffer for reading
      +TIFFReadDirectory      readdir.3t       read the next directory
      +TIFFReadEncodedStrip   rdestrip.3t      read and decode a strip of data
      +TIFFReadEncodedTile    rdetile.3t       read and decode a tile of data
      +TIFFReadRawStrip       rdrstrip.3t      read a raw strip of data
      +TIFFReadRawTile        rdrtile.3t       read a raw tile of data
      +TIFFReadRGBAImage      rdimage.3t       read an image into a fixed format raster
      +TIFFReadScanline       readline.3t      read and decode a row of data
      +TIFFReadTile           readtile.3t      read and decode a tile of data
      +TIFFReverseBits        swab.3t          reverse bits in an array of bytes
      +TIFFRGBAImageBegin     rgbaimage.3t     setup decoder state for TIFFRGBAImageGet
      +TIFFRGBAImageEnd       rgbaimage.3t     release TIFFRGBAImage decoder state
      +TIFFRGBAImageGet       rgbaimage.3t     read and decode an image
      +TIFFRGBAImageOK        rgbaimage.3t     is image readable by TIFFRGBAImageGet
      +TIFFScanlineSize       size.3t          return size of a scanline
      +TIFFSetDirectory       setdir.3t        set the current directory
      +TIFFSetSubDirectory    setdir.3t        set the current directory
      +TIFFSetErrorHandler    error.3t         set error handler function
      +TIFFSetField           setfield.3t      set a tag's value in the current directory
      +TIFFSetWarningHandler  error.3t         set warning handler function
      +TIFFStripSize          size.3t          return size of a strip
      +TIFFSwabShort          swab.3t          swap bytes of short
      +TIFFSwabLong           swab.3t          swap bytes of long
      +TIFFSwabArrayOfShort   swab.3t          swap bytes of an array of shorts
      +TIFFSwabArrayOfLong    swab.3t          swap bytes of an array of longs
      +TIFFTileRowSize        size.3t          return size of a row in a tile
      +TIFFTileSize           size.3t          return size of a tile
      +TIFFVGetField          getfield.3t      return tag value in current directory
      +TIFFVGetFieldDefaulted getfield.3t      return tag value in current directory
      +TIFFVSetField          setfield.3t      set a tag's value in the current directory
      +TIFFWarning            warning.3t       library warning handler
      +TIFFWriteDirectory     writedir.3t      write the current directory
      +TIFFWriteEncodedStrip  wrestrip.3t      compress and write a strip of data
      +TIFFWriteEncodedTile   wretile.3t       compress and write a tile of data
      +TIFFWriteRawStrip      wrrstrip.3t      write a raw strip of data
      +TIFFWriteRawTile       wrrtile.3t       write a raw tile of data
      +TIFFWriteScanline      writeline.3t     write a scanline of data
      +TIFFWriteTile          wrrtile.3t       compress and write a tile of data
      +
      + +  +

      TAG USAGE

      + +The table below lists the +TIFF +tags that are recognized and handled by the library. +If no use is indicated in the table, then the library +reads and writes the tag, but does not use it internally. +Note that some tags are meaningful only when a particular +compression scheme is being used; e.g. +Group3Options + +is only useful if +Compression + +is set to +CCITT +Group 3 encoding. +Tags of this sort are considered +codec-specific + +tags and the library does not recognize them except when the +Compression + +tag has been previously set to the relevant compression scheme. +

      +

      +
      +Tag Name                Value  R/W  Library Use/Notes
      +
      +Artist                  315    R/W
      +BadFaxLines             326    R/W
      +BitsPerSample           258    R/W  lots
      +CellLength              265         parsed but ignored
      +CellWidth               264         parsed but ignored
      +CleanFaxData            327    R/W
      +ColorMap                320    R/W
      +ColorResponseUnit       300         parsed but ignored
      +Compression             259    R/W  choosing codec
      +ConsecutiveBadFaxLines  328    R/W
      +DataType                32996  R    obsoleted by SampleFormat tag
      +DateTime                306    R/W
      +DocumentName            269    R/W
      +DotRange                336    R/W
      +ExtraSamples            338    R/W  lots
      +FaxRecvParams           34908  R/W
      +FaxSubAddress           34909  R/W
      +FaxRecvTime             34910  R/W
      +FillOrder               266    R/W  control bit order
      +FreeByteCounts          289         parsed but ignored
      +FreeOffsets             288         parsed but ignored
      +GrayResponseCurve       291         parsed but ignored
      +GrayResponseUnit        290         parsed but ignored
      +Group3Options           292    R/W  used by Group 3 codec
      +Group4Options           293    R/W
      +HostComputer            316    R/W
      +ImageDepth              32997  R/W  tile/strip calculations
      +ImageDescription        270    R/W
      +ImageLength             257    R/W  lots
      +ImageWidth              256    R/W  lots
      +InkNames                333    R/W
      +InkSet                  332    R/W
      +JPEGTables              347    R/W  used by JPEG codec
      +Make                    271    R/W
      +Matteing                32995  R    obsoleted by ExtraSamples tag
      +MaxSampleValue          281    R/W
      +MinSampleValue          280    R/W
      +Model                   272    R/W
      +NewSubFileType          254    R/W  called SubFileType in spec
      +NumberOfInks            334    R/W
      +Orientation             274    R/W
      +PageName                285    R/W
      +PageNumber              297    R/W
      +PhotometricInterpretation      262  R/Wused by Group 3 and JPEG codecs
      +PlanarConfiguration     284    R/W  data i/o
      +Predictor               317    R/W  used by LZW and Deflate codecs
      +PrimaryChromacities     319    R/W
      +ReferenceBlackWhite     532    R/W
      +ResolutionUnit          296    R/W  used by Group 3 codec
      +RowsPerStrip            278    R/W  data i/o
      +SampleFormat            339    R/W
      +SamplesPerPixel         277    R/W  lots
      +SMinSampleValue         340    R/W
      +SMaxSampleValue         341    R/W
      +Software                305    R/W
      +StoNits                 37439  R/W
      +StripByteCounts         279    R/W  data i/o
      +StripOffsets            273    R/W  data i/o
      +SubFileType             255    R/W  called OSubFileType in spec
      +TargetPrinter           337    R/W
      +Thresholding            263    R/W  
      +TileByteCounts          324    R/W  data i/o
      +TileDepth               32998  R/W  tile/strip calculations
      +TileLength              323    R/W  data i/o
      +TileOffsets             324    R/W  data i/o
      +TileWidth               322    R/W  data i/o
      +TransferFunction        301    R/W
      +WhitePoint              318    R/W
      +XPosition               286    R/W
      +XResolution             282    R/W
      +YCbCrCoefficients       529    R/W  used by TIFFRGBAImage support
      +YCbCrPositioning        531    R/W  tile/strip size calulcations
      +YCbCrSubsampling        530    R/W
      +YPosition               286    R/W
      +YResolution             283    R/W  used by Group 3 codec
      +
        +

      PSEUDO TAGS

      + +In addition to the normal +TIFF +tags the library supports a collection of +tags whose values lie in a range outside the valid range of +TIFF +tags. +These tags are termed +pseud-tags + +and are used to control various codec-specific functions within the library. +The table below summarizes the defined pseudo-tags. +

      +

      +
      +Tag Name                Codec  R/W  Library Use/Notes
      +
      +TIFFTAG_FAXMODE         G3     R/W  general codec operation
      +TIFFTAG_FAXFILLFUNC     G3/G4  R/W  bitmap fill function
      +TIFFTAG_JPEGQUALITY     JPEG   R/W  compression quality control
      +TIFFTAG_JPEGCOLORMODE   JPEG   R/W  control colorspace conversions
      +TIFFTAG_JPEGTABLESMODE  JPEG   R/W  control contents of JPEGTables tag
      +TIFFTAG_ZIPQUALITY      Deflate     R/Wcompression quality level
      +TIFFTAG_PIXARLOGDATAFMT PixarLog    R/Wuser data format
      +TIFFTAG_PIXARLOGQUALITY PixarLog    R/Wcompression quality level
      +TIFFTAG_SGILOGDATAFMT   SGILog R/W  user data format
      +
      + +
      +
      TIFFTAG_FAXMODE + +
      +Control the operation of the Group 3 codec. +Possible values (independent bits that can be combined by +or'ing them together) are: +FAXMODE_CLASSIC +(enable old-style format in which the +RTC +is written at the end of the last strip), +FAXMODE_NORTC +(opposite of +FAXMODE_CLASSIC; +also called +FAXMODE_CLASSF), +FAXMODE_NOEOL +(do not write +EOL +codes at the start of each row of data), +FAXMODE_BYTEALIGN +(align each encoded row to an 8-bit boundary), +FAXMODE_WORDALIGN +(align each encoded row to an 16-bit boundary), +The default value is dependent on the compression scheme; this +pseudo-tag is used by the various G3 and G4 codecs to share code. +
      TIFFTAG_FAXFILLFUNC + +
      +Control the function used to convert arrays of black and white +runs to packed bit arrays. +This hook can be used to image decoded scanlines in multi-bit +depth rasters (e.g. for display in colormap mode) +or for other purposes. +The default value is a pointer to a builtin function that images +packed bilevel data. +
      TIFFTAG_IPTCNEWSPHOTO + +
      +Tag contaings image metadata per the IPTC newsphoto spec: Headline, +captioning, credit, etc... Used by most wire services. +
      TIFFTAG_PHOTOSHOP + +
      +Tag contains Photoshop captioning information and metadata. Photoshop +uses in parallel and redundantly alongside IPTCNEWSPHOTO information. +
      TIFFTAG_JPEGQUALITY + +
      +Control the compression quality level used in the baseline algorithm. +Note that quality levels are in the range 0-100 with a default value of 75. +
      TIFFTAG_JPEGCOLORMODE + +
      +Control whether or not conversion is done between +RGB and YCbCr colorspaces. +Possible values are: +JPEGCOLORMODE_RAW +(do not convert), and +JPEGCOLORMODE_RGB +(convert to/from RGB) +The default value is JPEGCOLORMODE_RAW. +
      TIFFTAG_JPEGTABLESMODE + +
      +Control the information written in the +JPEGTables + +tag. +Possible values (independent bits that can be combined by +or'ing them together) are: +JPEGTABLESMODE_QUANT +(include quantization tables), +and +JPEGTABLESMODE_HUFF +(include Huffman encoding tables). +The default value is JPEGTABLESMODE_QUANT|JPEGTABLESMODE_HUFF. +
      TIFFTAG_ZIPQUALITY + +
      +Control the compression technique used by the Deflate codec. +Quality levels are in the range 1-9 with larger numbers yielding better +compression at the cost of more computation. +The default quality level is 6 which yields a good time-space tradeoff. +
      TIFFTAG_PIXARLOGDATAFMT + +
      +Control the format of user data passed +in + +to the PixarLog codec when encoding and passed +out + +from when decoding. +Possible values are: +PIXARLOGDATAFMT_8BIT +for 8-bit unsigned pixels, +PIXARLOGDATAFMT_8BITABGR +for 8-bit unsigned ABGR-ordered pixels, +PIXARLOGDATAFMT_11BITLOG +for 11-bit log-encoded raw data, +PIXARLOGDATAFMT_12BITPICIO +for 12-bit PICIO-compatible data, +PIXARLOGDATAFMT_16BIT +for 16-bit signed samples, +and +PIXARLOGDATAFMT_FLOAT +for 32-bit IEEE floating point samples. +
      TIFFTAG_PIXARLOGQUALITY + +
      +Control the compression technique used by the PixarLog codec. +This value is treated identically to TIFFTAG_ZIPQUALITY; see the +above description. +
      TIFFTAG_SGILOGDATAFMT + +
      +Control the format of client data passed +in + +to the SGILog codec when encoding and passed +out + +from when decoding. +Possible values are: +SGILOGDATAFMT_FLTXYZ +for converting between LogLuv and 32-bit IEEE floating valued XYZ pixels, +SGILOGDATAFMT_16BITLUV +for 16-bit encoded Luv pixels, +SGILOGDATAFMT_32BITRAW and SGILOGDATAFMT_24BITRAW +for no conversion of data, +SGILOGDATAFMT_8BITRGB +for returning 8-bit RGB data (valid only when decoding LogLuv-encoded data), +SGILOGDATAFMT_FLTY +for converting between LogL and 32-bit IEEE floating valued Y pixels, +SGILOGDATAFMT_16BITL +for 16-bit encoded L pixels, +and +SGILOGDATAFMT_8BITGRY +for returning 8-bit greyscale data +(valid only when decoding LogL-encoded data). +
      +  +

      DIAGNOSTICS

      + +All error messages are directed through the +TIFFError + +routine. +By default messages are directed to +stderr + +in the form: +module: message\n. + +Warning messages are likewise directed through the +TIFFWarning + +routine. +  +

      SEE ALSO

      + +fax2tiff(1), + +gif2tiff(1), + +pal2rgb(1), + +ppm2tiff(1), + +rgb2ycbcr(1), + +ras2tiff(1), + +sgi2tiff(1), + +tiff2bw(1), + +tiffdither(1), + +tiffdump(1), + +tiffcp(1), + +tiffcmp(1), + +tiffgt(1), + +tiffinfo(1), + +tiffmedian(1), + +tiffsplit(1), + +tiffsv(1), + +

      + +Tag Image File Format Specification - Revision 6.0, + +an Aldus Technical Memorandum. +

      + +The Spirit of TIFF Class F, + +an appendix to the TIFF 5.0 specification prepared by Cygnet Technologies. +  +

      BUGS

      + +The library does not support multi-sample images +where some samples have different bits/sample. +

      + +The library does not support random access to compressed data +that is organized with more than one row per tile or strip. +The library discards unknown tags. +The library should do more validity checking of a directory's contents. + +


      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      DATA TYPES
      +
      LIST OF ROUTINES
      +
      TAG USAGE
      +
      PSEUDO TAGS
      +
      DIAGNOSTICS
      +
      SEE ALSO
      +
      BUGS
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:39 GMT, November 23, 1999 + + diff --git a/html/man/pal2rgb.1.html b/html/man/pal2rgb.1.html new file mode 100755 index 0000000..ebf9e1f --- /dev/null +++ b/html/man/pal2rgb.1.html @@ -0,0 +1,149 @@ + +Manpage of PAL2RGB + +

      PAL2RGB

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +pal2rgb - convert a palette color +TIFF +image to a full color image +  +

      SYNOPSIS

      + +pal2rgb + +[ +options + +] +input.tif + +output.tif + +  +

      DESCRIPTION

      + +Pal2rgb + +converts a palette color +TIFF +image to a full color image by +applying the colormap of the palette image to each sample +to generate a full color +RGB +image. +  +

      OPTIONS

      + +Options that affect the interpretation of input data are: +
      +
      -C + +
      +This option overrides the default behaviour of +pal2rgb + +in determining whether or not +colormap entries contain 16-bit or 8-bit values. +By default the colormap is inspected and +if no colormap entry greater than 255 is found, +the colormap is assumed to have only 8-bit values; otherwise +16-bit values (as required by the +TIFF +specification) are assumed. +The +-C + +option can be used to explicitly specify the number of +bits for colormap entries: +-C 8 + +for 8-bit values, +-C 16 + +for 16-bit values. +
      +

      + +Options that affect the output file format are: +

      +
      -p + +
      +Explicitly select the planar configuration used in organizing +data samples in the output image: +-p contig + +for samples packed contiguously, and +-p separate + +for samples stored separately. +By default samples are packed. +
      -c + +
      +Use the specific compression algorithm to encoded image data +in the output file: +-c packbits + +for Macintosh Packbits, +-c lzw + +for Lempel-Ziv & Welch, +-c zip + +for Deflate, +-c none + +for no compression. +If no compression-related option is specified, the input +file's compression algorithm is used. +
      -r + +
      +Explicitly specify the number of rows in each strip of the +output file. +If the +-r + +option is not specified, a number is selected such that each +output strip has approximately 8 kilobytes of data in it. +
      +  +

      BUGS

      + +Only 8-bit images are handled. +  +

      SEE ALSO

      + +tiffinfo(1), + +tiffcp(1), + +tiffmedian(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/ppm2tiff.1.html b/html/man/ppm2tiff.1.html new file mode 100755 index 0000000..4c9b362 --- /dev/null +++ b/html/man/ppm2tiff.1.html @@ -0,0 +1,129 @@ + +Manpage of PPM2TIFF + +

      PPM2TIFF

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +ppm2tiff - create a +TIFF +file from a +PPM +image file +  +

      SYNOPSIS

      + +ppm2tiff + +[ +options + +] [ +input.ppm + +] +output.tif + +  +

      DESCRIPTION

      + +ppm2tiff + +converts a file in the +PPM +image format to +TIFF. +By default, the +TIFF +image is created with data samples packed (PlanarConfiguration=1), + +compressed with the Lempel-Ziv & Welch algorithm (Compression=5), + +and with each strip no more than 8 kilobytes. +These characteristics can be overriden, or explicitly specified +with the options described below +

      + +If the +PPM +file contains greyscale data, then the +PhotometricInterpretation + +tag is set to 1 (min-is-black), +otherwise it is set to 2 (RGB). +

      + +If no +PPM +file is specified on the command line, +ppm2tiff + +will read from the standard input. +  +

      OPTIONS

      + +
      +
      -c + +
      +Specify a compression scheme to use when writing image data: +-c none + +for no compression, +-c packbits + +for the PackBits compression algorithm, +-c jpeg + +for the baseline JPEG compression algorithm, +-c zip + +for the Deflate compression algorithm, +and +-c lzw + +for Lempel-Ziv & Welch compression (the default). +
      -r + +
      +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +
      -R + +
      +Mark the resultant image to have the specified +X and Y resolution (in dots/inch). +
      +  +

      SEE ALSO

      + +tiffinfo(1), + +tiffcp(1), + +tiffmedian(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/ras2tiff.1.html b/html/man/ras2tiff.1.html new file mode 100755 index 0000000..fd49f56 --- /dev/null +++ b/html/man/ras2tiff.1.html @@ -0,0 +1,127 @@ + +Manpage of RAS2TIFF + +

      RAS2TIFF

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +ras2tiff - create a +TIFF +file from a Sun rasterfile +  +

      SYNOPSIS

      + +ras2tiff + +[ +options + +] +input.ras + +output.tif + +  +

      DESCRIPTION

      + +ras2tiff + +converts a file in the Sun rasterfile format to +TIFF. +By default, the +TIFF +image is created with data samples packed (PlanarConfiguration=1), + +compressed with the Lempel-Ziv & Welch algorithm (Compression=5), + +and with each strip no more than 8 kilobytes. +These characteristics can overriden, or explicitly specified +with the options described below. +

      + +Any colormap information in the rasterfile is carried over to the +TIFF +file by including a +Colormap + +tag in the output file. +If the rasterfile has a colormap, the +PhotometricInterpretation + +tag is set to 3 (palette); +otherwise it is set to 2 (RGB) if the depth +is 24 or 1 (min-is-black) if the depth is not 24. +  +

      OPTIONS

      + +
      +
      -c + +
      +Specify a compression scheme to use when writing image data: +-c none + +for no compression, +-c packbits + +for the PackBits compression algorithm, +-c jpeg + +for the baseline JPEG compression algorithm, +-c zip + +for the Deflate compression algorithm, +and +-c lzw + +for Lempel-Ziv & Welch (the default). +
      -r + +
      +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +
      +  +

      BUGS

      + +Does not handle all possible rasterfiles. +In particular, +ras2tiff + +does not handle run-length encoded images. +  +

      SEE ALSO

      + +pal2rgb(1), + +tiffinfo(1), + +tiffcp(1), + +tiffmedian(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/rgb2ycbcr.1.html b/html/man/rgb2ycbcr.1.html new file mode 100755 index 0000000..3ecdcae --- /dev/null +++ b/html/man/rgb2ycbcr.1.html @@ -0,0 +1,129 @@ + +Manpage of RGB2YCBCR + +

      RGB2YCBCR

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +rgb2ycbcr - convert non-YCbCr +TIFF +images to a YCbCr +TIFF +image +  +

      SYNOPSIS

      + +rgb2ycbcr + +[ +options + +] +src1.tif src2.tif ... dst.tif + +  +

      DESCRIPTION

      + +rgb2ycbcr + +converts +RGB +color, greyscale, or bi-level +TIFF +images to YCbCr images by +transforming and sampling pixel data. +If multiple files are specified on the command line +each source file is converted to a separate directory +in the destination file. +

      + +By default, chrominance samples are created by sampling +2 by 2 blocks of luminance values; this can be changed with +the +-h + +and +-v + +options. +Output data are compressed with the +LZW +compression scheme, by default; an alternate scheme can be +selected with the +-c + +option. +By default, output data are compressed in strips with +the number of rows in each strip selected so that the +size of a strip is never more than 8 kilobytes; +the +-r + +option can be used to explicitly set the number of +rows per strip. +  +

      OPTIONS

      + +
      +
      -c + +
      +Specify a compression scheme to use when writing image data: +-c none + +for no compression, +-c packbits + +for the PackBits compression algorithm, +-c jpeg + +for the JPEG compression algorithm, +and +-c lzw + +for Lempel-Ziv & Welch (the default). +
      -h + +
      +Set the horizontal sampling dimension to one of: 1, 2 (default), or 4. +
      -r + +
      +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +
      -v + +
      +Set the vertical sampling dimension to one of: 1, 2 (default), or 4. +
      +  +

      SEE ALSO

      + +tiffinfo(1), + +tiffcp(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/sgi2tiff.1.html b/html/man/sgi2tiff.1.html new file mode 100755 index 0000000..647af05 --- /dev/null +++ b/html/man/sgi2tiff.1.html @@ -0,0 +1,123 @@ + +Manpage of SGI2TIFF + +

      SGI2TIFF

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +sgi2tiff - create a +TIFF +file from an +SGI +image file +  +

      SYNOPSIS

      + +sgi2tiff + +[ +options + +] +input.rgb + +output.tif + +  +

      DESCRIPTION

      + +sgi2tiff + +converts a file in the +SGI +image format to +TIFF. +By default, the +TIFF +image is created with data samples packed (PlanarConfiguration=1), + +compressed with the Lempel-Ziv & Welch algorithm (Compression=5), + +and with each strip no more than 8 kilobytes. +These characteristics can overriden, or explicitly specified +with the options described below. +  +

      OPTIONS

      + +
      +
      -c + +
      +Specify a compression scheme to use when writing image data: +-c none + +for no compression, +-c packbits + +for the PackBits compression algorithm), +-c jpeg + +for the baseline JPEG compression algorithm, +-c zip + +for the Deflate compression algorithm, +and +-c lzw + +for Lempel-Ziv & Welch (the default). +
      -p + +
      +Explicitly select the planar configuration used in organizing +data samples in the output image: +-p contig + +for samples packed contiguously, and +-p separate + +for samples stored separately. +By default samples are packed. +
      -r + +
      +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +
      +  +

      BUGS

      + +Does not record colormap information. +  +

      SEE ALSO

      + +tiffinfo(1), + +tiffcp(1), + +tiffmedian(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/thumbnail.1.html b/html/man/thumbnail.1.html new file mode 100755 index 0000000..0b5c2f3 --- /dev/null +++ b/html/man/thumbnail.1.html @@ -0,0 +1,123 @@ + +Manpage of THUMBNAIL + +

      THUMBNAIL

      +Section: User Commands (1)
      Updated: September 26, 1994
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +thumbnail - create a +TIFF +file with thumbnail images +  +

      SYNOPSIS

      + +thumbnail + +[ +options + +] +input.tif + +output.tif + +  +

      DESCRIPTION

      + +thumbnail + +is a program written to show how one might use the +SubIFD tag (#330) to store thumbnail images. +thumbnail + +copies a +TIFF +Class F facsimile file to the output file +and for each image an 8-bit greyscale +thumbnail sketch. + +The output file contains the thumbnail image with the associated +full-resolution page linked below with the SubIFD tag. +

      + +By default, thumbnail images are 216 pixels wide by 274 pixels high. +Pixels are calculated by sampling and filtering the input image +with each pixel value passed through a contrast curve. +  +

      OPTIONS

      + +
      +
      -w + +
      +Specify the width of thumbnail images in pixels. +
      -h + +
      +Specify the height of thumbnail images in pixels. +
      -c + +
      +Specify a contrast curve to apply in generating the thumbnail images. +By default pixels values are passed through a linear contrast curve +that simply maps the pixel value ranges. +Alternative curves are: +exp50 + +for a 50% exponential curve, +exp60 + +for a 60% exponential curve, +exp70 + +for a 70% exponential curve, +exp80 + +for a 80% exponential curve, +exp90 + +for a 90% exponential curve, +exp + +for a pure exponential curve, +linear + +for a linear curve. +
      +  +

      BUGS

      + +There are no options to control the format of the saved thumbnail images. +  +

      SEE ALSO

      + +tiffdump(1), + +tiffgt(1), + +tiffinfo(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/tiff2bw.1.html b/html/man/tiff2bw.1.html new file mode 100755 index 0000000..9e516ee --- /dev/null +++ b/html/man/tiff2bw.1.html @@ -0,0 +1,125 @@ + +Manpage of TIFF2BW + +

      TIFF2BW

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiff2bw - convert a color +TIFF +image to greyscale +  +

      SYNOPSIS

      + +tiff2bw + +[ +options +] +input.tif + +output.tif + +  +

      DESCRIPTION

      + +Tiff2bw + +converts an +RGB +or Palette color +TIFF +image to a greyscale image by +combining percentages of the red, green, and blue channels. +By default, output samples are created by taking +28% of the red channel, 59% of the green channel, and 11% of +the blue channel. +To alter these percentages, the +-R, + +-G, + +and +-B + +options may be used. +  +

      OPTIONS

      + +
      +
      -c + +
      +Specify a compression scheme to use when writing image data: +-c none + +for no compression, +-c packbits + +for the PackBits compression algorithm, +-c zip + +for the Deflate compression algorithm, +-c g3 + +for the CCITT Group 3 compression algorithm, +-c g4 + +for the CCITT Group 4 compression algorithm, +and +-c lzw + +for Lempel-Ziv & Welch (the default). +
      -r + +
      +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +
      -R + +
      +Specify the percentage of the red channel to use (default 28). +
      -G + +
      +Specify the percentage of the green channel to use (default 59). +
      -B + +
      +Specify the percentage of the blue channel to use (default 11). +
      +  +

      SEE ALSO

      + +pal2rgb(1), + +tiffinfo(1), + +tiffcp(1), + +tiffmedian(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/tiff2ps.1.html b/html/man/tiff2ps.1.html new file mode 100755 index 0000000..34e3706 --- /dev/null +++ b/html/man/tiff2ps.1.html @@ -0,0 +1,237 @@ + +Manpage of TIFF2PS + +

      TIFF2PS

      +Section: User Commands (1)
      Updated: January 27, 1997
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiff2ps - convert a +TIFF +image to POSTSCRIPTtm +  +

      SYNOPSIS

      + +tiff2ps + +[ +options + +] +input.tif ... + +  +

      DESCRIPTION

      + +tiff2ps + +reads +TIFF +images and writes POSTSCRIPT or Encapsulated POSTSCRIPT (EPS) +on the standard output. +By default, +tiff2ps + +writes Encapsulated POSTSCRIPT for the first image in the specified +TIFF +image file. +

      + +By default, +tiff2ps + +will generate POSTSCRIPT that fills a printed area specified +by the +TIFF +tags in the input file. +If the file does not contain +XResolution + +or +YResolution + +tags, then the printed area is set according to the image dimensions. +The +-w + +and +-h + +options (see below) +can be used to set the dimensions of the printed area in inches; +overriding any relevant +TIFF +tags. +

      + +The POSTSCRIPT generated for +RGB, +palette, and +CMYK +images uses the +colorimage + +operator. +The POSTSCRIPT generated for +greyscale and bilevel images +uses the +image + +operator. +When the +colorimage + +operator is used, POSTSCRIPT code to emulate this operator +on older POSTSCRIPT printers is also generated. +Note that this emulation code can be very slow. +

      + +Color images with associated alpha data are composited over +a white background. +  +

      OPTIONS

      + +
      +
      -1 + +
      +Generate POSTSCRIPT Level I (the default). +
      -2 + +
      +Generate POSTSCRIPT Level II. +
      -a + +
      +Generate output for all IFDs (pages) in the input file. +
      -d + +
      +Set the initial +TIFF +directory to the specified directory number. +(NB: directories are numbered starting at zero.) +This option is useful for selecting individual pages in a +multi-page (e.g. facsimile) file. +
      -e + +
      +Force the generation of Encapsulated POSTSCRIPT. +
      -h + +
      +Specify the vertical size of the printed area (in inches). +
      -o + +
      +Set the initial +TIFF +directory to the +IFD +at the specified file offset. +This option is useful for selecting thumbnail images and the +like which are hidden using the SubIFD tag. +
      -p + +
      +Force the generation of (non-Encapsulated) POSTSCRIPT. +
      -s + +
      +Generate output for a single IFD (page) in the input file. +
      -w + +
      +Specify the horizontal size of the printed area (in inches). +
      -z + +
      +When generating POSTSCRIPT Level II, data is scaled so that it does not +image into the +deadzone + +on a page (the outer margin that the printing device is unable to mark). +This option suppresses this behaviour. +When POSTSCRIPT Level I is generated, data is imaged to the entire printed +page and this option has no affect. +
      +  +

      EXAMPLES

      + +The following generates POSTSCRIPT Level II for all pages of a facsimile: +
      +
      +tiff2ps -a2 fax.tif | lpr
      +
      + +
      + +Note also that if you have version 2.6.1 or newer of Ghostscript then you +can efficiently preview facsimile generated with the above command. +

      + +To generate Encapsulated POSTSCRIPT for a the image at directory 2 +of an image use: +

      +
      +tiff2ps -d 1 foo.tif
      +
      + +
      + +(notice that directories are numbered starting at zero.) +  +

      BUGS

      + +Because POSTSCRIPT does not support the notion of a colormap, +8-bit palette images produce 24-bit POSTSCRIPT images. +This conversion results in output that is six times +bigger than the original image and which takes a long time +to send to a printer over a serial line. +Matters are even worse for 4-, 2-, and 1-bit palette images. +  +

      BUGS

      + +Does not handle tiled images when generating PS Level I output. +  +

      SEE ALSO

      + +pal2rgb(1), + +tiffinfo(1), + +tiffcp(1), + +tiffgt(1), + +tiffmedian(1), + +tiff2bw(1), + +tiffsv(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      EXAMPLES
      +
      BUGS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/tiffcmp.1.html b/html/man/tiffcmp.1.html new file mode 100755 index 0000000..6acd87d --- /dev/null +++ b/html/man/tiffcmp.1.html @@ -0,0 +1,106 @@ + +Manpage of TIFFCMP + +

      TIFFCMP

      +Section: User Commands (1)
      Updated: September 26, 1994
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiffcmp - compare two +TIFF +files +  +

      SYNOPSIS

      + +tiffcmp + +[ +options + +] +file1.tif file2.tif + +  +

      DESCRIPTION

      + +Tiffcmp + +compares the tags and data in two files created according +to the Tagged Image File Format, Revision 6.0. +The schemes used for compressing data in each file +are immaterial when data are compared-data are compared on +a scanline-by-scanline basis after decompression. +Most directory tags are checked; notable exceptions are: +GrayResponseCurve, + +ColorResponseCurve, + +and +ColorMap + +tags. +Data will not be compared if any of the +BitsPerSample, + +SamplesPerPixel, + +or +ImageWidth + +values are not equal. +By default, +tiffcmp + +will terminate if it encounters any difference. +  +

      OPTIONS

      + +
      +
      -l + +
      +List each byte of image data that differs between the files. +
      -t + +
      +Ignore any differences in directory tags. +
      +  +

      BUGS

      + +Tags that are not recognized by the library are not +compared; they may also generate spurious diagnostics. +  +

      SEE ALSO

      + +pal2rgb(1), + +tiffinfo(1), + +tiffcp(1), + +tiffmedian(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:47 GMT, November 23, 1999 + + diff --git a/html/man/tiffcp.1.html b/html/man/tiffcp.1.html new file mode 100755 index 0000000..ca6f441 --- /dev/null +++ b/html/man/tiffcp.1.html @@ -0,0 +1,291 @@ + +Manpage of TIFFCP + +

      TIFFCP

      +Section: User Commands (1)
      Updated: January 9, 1996
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiffcp - copy (and possibly convert) a +TIFF +file +  +

      SYNOPSIS

      + +tiffcp + +[ +options + +] +src1.tif ... srcN.tif dst.tif + +  +

      DESCRIPTION

      + +tiffcp + +combines one or more files created according +to the Tag Image File Format, Revision 6.0 +into a single +TIFF +file. +Because the output file may be compressed using a different +algorithm than the input files, +tiffcp + +is most often used to convert between different compression +schemes. +

      + +By default, +tiffcp + +will copy all the understood tags in a +TIFF +directory of an input +file to the associated directory in the output file. +

      + +tiffcp + +can be used to reorganize the storage characteristics of data +in a file, but it is explicitly intended to not alter or convert +the image data content in any way. +  +

      OPTIONS

      + +
      +
      -B + +
      +Force output to be written with Big-Endian byte order. +This option only has an effect when the output file is created or +overwritten and not when it is appended to. +
      -C + +
      +Suppress the use of ``strip chopping'' when reading images +that have a single strip/tile of uncompressed data. +
      -c + +
      +Specify the compression to use for data written to the output file: +none + +for no compression, +packbits + +for PackBits compression, +lzw + +for Lempel-Ziv & Welch compression, +jpeg + +for baseline JPEG compression, +zip + +for Deflate compression, +g3 + +for CCITT Group 3 (T.4) compression, +and +g4 + +for CCITT Group 4 (T.6) compression. +By default +tiffcp + +will compress data according to the value of the +Compression + +tag found in the source file. +
      +The +CCITT +Group 3 and Group 4 compression algorithms can only +be used with bilevel data. +
      +Group 3 compression can be specified together with several +T.4-specific options: +1d + +for 1-dimensional encoding, +2d + +for 2-dimensional encoding, +and +fill + +to force each encoded scanline to be zero-filled so that the +terminating EOL code lies on a byte boundary. +Group 3-specific options are specified by appending a ``:''-separated +list to the ``g3'' option; e.g. +-c g3:2d:fill + +to get 2D-encoded data with byte-aligned EOL codes. +
      +LZW +compression can be specified together with a +predictor + +value. +A predictor value of 2 causes +each scanline of the output image to undergo horizontal +differencing before it is encoded; a value +of 1 forces each scanline to be encoded without differencing. +LZW-specific options are specified by appending a ``:''-separated +list to the ``lzw'' option; e.g. +-c lzw:2 + +for +LZW +compression with horizontal differencing. +
      -f + +
      +Specify the bit fill order to use in writing output data. +By default, +tiffcp + +will create a new file with the same fill order as the original. +Specifying +-f lsb2msb + +will force data to be written with the FillOrder tag set to +LSB2MSB, +while +-f msb2lsb + +will force data to be written with the FillOrder tag set to +MSB2LSB. +
      -l + +
      +Specify the length of a tile (in pixels). +tiffcp + +attempts to set the tile dimensions so +that no more than 8 kilobytes of data appear in a tile. +
      -L + +
      +Force output to be written with Little-Endian byte order. +This option only has an effect when the output file is created or +overwritten and not when it is appended to. +
      -M + +
      +Suppress the use of memory-mapped files when reading images. +
      -p + +
      +Specify the planar configuration to use in writing image data +that has one 8-bit sample per pixel. +By default, +tiffcp + +will create a new file with the same planar configuration as +the original. +Specifying +-p contig + +will force data to be written with multi-sample data packed +together, while +-p separate + +will force samples to be written in separate planes. +
      -r + +
      +Specify the number of rows (scanlines) in each strip of data +written to the output file. +By default, +tiffcp + +attempts to set the rows/strip +that no more than 8 kilobytes of data appear in a strip. +
      -s + +
      +Force the output file to be written with data organized in strips +(rather than tiles). +
      -t + +
      +Force the output file to be written wtih data organized in tiles +(rather than strips). +options can be used to force the resultant image to be written +as strips or tiles of data, respectively. +
      -w + +
      +Specify the width of a tile (in pixels). +tiffcp + +attempts to set the tile dimensions so +that no more than 8 kilobytes of data appear in a tile. +
      +  +

      EXAMPLES

      + +The following concatenates two files and writes the result using +LZW +encoding: +
      +
      +tiffcp -c lzw a.tif b.tif result.tif
      +
      + +
      + +

      + +To convert a G3 1d-encoded +TIFF +to a single strip of G4-encoded data the following might be used: +

      +
      +tiffcp -c g4 -r 10000 g3.tif g4.tif
      +
      + +
      + +(1000 is just a number that is larger than the number of rows in +the source file.) +  +

      SEE ALSO

      + +pal2rgb(1), + +tiffinfo(1), + +tiffcmp(1), + +tiffmedian(1), + +tiffsplit(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      EXAMPLES
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:48 GMT, November 23, 1999 + + diff --git a/html/man/tiffdither.1.html b/html/man/tiffdither.1.html new file mode 100755 index 0000000..5a8de6c --- /dev/null +++ b/html/man/tiffdither.1.html @@ -0,0 +1,171 @@ + +Manpage of TIFFDITHER + +

      TIFFDITHER

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiffdither - convert a greyscale image to bilevel using dithering +  +

      SYNOPSIS

      + +tiffdither + +[ +options + +] +input.tif + +output.tif + +  +

      DESCRIPTION

      + +tiffdither + +converts a single channel 8-bit greyscale image to a bilevel image +using Floyd-Steinberg error propagation with threholding. +  +

      OPTIONS

      + +
      +
      -c + +
      +Specify the compression to use for data written to the output file: +none + +for no compression, +packbits + +for PackBits compression, +lzw + +for Lempel-Ziv & Welch compression, +zip + +for Deflate compression, +g3 + +for CCITT Group 3 (T.4) compression, +and +g4 + +for CCITT Group 4 (T.6) compression. +By default +tiffdither + +will compress data according to the value of the +Compression + +tag found in the source file. +
      +The +CCITT +Group 3 and Group 4 compression algorithms can only +be used with bilevel data. +
      +Group 3 compression can be specified together with several +T.4-specific options: +1d + +for 1-dimensional encoding, +2d + +for 2-dimensional encoding, +and +fill + +to force each encoded scanline to be zero-filled so that the +terminating EOL code lies on a byte boundary. +Group 3-specific options are specified by appending a ``:''-separated +list to the ``g3'' option; e.g. +-c g3:2d:fill + +to get 2D-encoded data with byte-aligned EOL codes. +
      +LZW +compression can be specified together with a +predictor + +value. +A predictor value of 2 causes +each scanline of the output image to undergo horizontal +differencing before it is encoded; a value +of 1 forces each scanline to be encoded without differencing. +LZW-specific options are specified by appending a ``:''-separated +list to the ``lzw'' option; e.g. +-c lzw:2 + +for +LZW +compression with horizontal differencing. +
      -f + +
      +Specify the bit fill order to use in writing output data. +By default, +tiffdither + +will create a new file with the same fill order as the original. +Specifying +-f lsb2msb + +will force data to be written with the FillOrder tag set to +LSB2MSB , +while +-f msb2lsb + +will force data to be written with the FillOrder tag set to +MSB2LSB . +
      -t + +
      +Set the threshold value for dithering. +By default the threshold value is 128. +
      +  +

      NOTES

      + +The dither algorithm is taken from the +tiffmedian(1) + +program (written by Paul Heckbert). +  +

      SEE ALSO

      + +pal2rgb(1), + +fax2tiff(1), + +tiffinfo(1), + +tiffcp(1), + +tiff2bw(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      NOTES
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:48 GMT, November 23, 1999 + + diff --git a/html/man/tiffdump.1.html b/html/man/tiffdump.1.html new file mode 100755 index 0000000..15083ee --- /dev/null +++ b/html/man/tiffdump.1.html @@ -0,0 +1,97 @@ + +Manpage of TIFFDUMP + +

      TIFFDUMP

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiffdump - print verbatim information about +TIFF +files +  +

      SYNOPSIS

      + +tiffdump + +[ +options + +] +name ... + +  +

      DESCRIPTION

      + +tiffdump + +displays directory information from files created according +to the Tag Image File Format, Revision 6.0. +The header of each +TIFF +file (magic number, version, and first directory offset) +is displayed, followed by the tag contents of each directory in the file. +For each tag, the name, datatype, count, and value(s) is displayed. +When the symbolic name for a tag or datatype is known, the symbolic +name is displayed followed by it's numeric (decimal) value. +Tag values are displayed enclosed in ``<>'' characters immediately +preceded by the value of the count field. +For example, an +ImageWidth + +tag might be displayed as ``ImageWidth (256) SHORT (3) 1<800>''. +

      + +tiffdump + +is particularly useful for investigating the contents of +TIFF +files that +libtiff + +does not understand. +  +

      OPTIONS

      + +
      +
      -h + +
      +Force numeric data to be printed in hexadecimal rather than the +default decimal. +
      -o + +
      +Dump the contents of the +IFD +at the a particular file offset. +The file offset may be specified using the usual C-style syntax; +i.e. a leading ``0x'' for hexadecimal and a leading ``0'' for octal. +
      +  +

      SEE ALSO

      + +tiffinfo(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:48 GMT, November 23, 1999 + + diff --git a/html/man/tiffgt.1.html b/html/man/tiffgt.1.html new file mode 100755 index 0000000..3b9fa53 --- /dev/null +++ b/html/man/tiffgt.1.html @@ -0,0 +1,325 @@ + +Manpage of TIFFGT + +

      TIFFGT

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiffgt - display an image stored in a +TIFF +file (Silicon Graphics version) +  +

      SYNOPSIS

      + +tiffgt + +[ +options + +] +input.tif ... + +  +

      DESCRIPTION

      + +tiffgt + +displays one or more images stored using the +Tag Image File Format, Revision 6.0. +Each image is placed in a fixed size window that the +user must position on the display (unless configured +otherwise through X defaults). +If the display has fewer than 24 bitplanes, or if the +image does not warrant full color, then +RGB +color values are mapped to the closest values that exist in +the colormap (this is done using the +rgbi + +routine found in the graphics utility library +-lgutil.) + +

      + +tiffgt + +correctly handles files with any of the following characteristics: +

      + + + +

      +BitsPerSample                1, 2, 4, 8, 16
      +SamplesPerPixel              1, 3, 4 (the 4th sample is ignored)
      +PhotometricInterpretation    0 (min-is-white), 1 (min-is-black), 2 (RGB), 3 (palette), 6 (YCbCr)
      +PlanarConfiguration          1 (contiguous), 2 (separate)
      +Orientation                  1 (top-left), 4 (bottom-left)
      +
      + + +

      +Data may be organized as strips or tiles and may be +compressed with any of the compression algorithms supported +by the +libtiff(3) + +library. +

      + +For palette images (PhotomatricInterpretation=3), + +tiffgt + +inspects the colormap values and assumes either 16-bit +or 8-bit values according to the maximum value. +That is, if no colormap entry greater than 255 is found, +tiffgt + +assumes the colormap has only 8-bit values; otherwise +it assumes 16-bit values. +This inspection is done to handle old images written by +previous (incorrect) versions of +libtiff. + +

      + +tiffgt + +can be used to display multiple images one-at-a-time. +The left mouse button switches the display to the first image in the +next + +file in the list of files specified on the command line. +The right mouse button switches to the first image in the +previous + +file in the list. +The middle mouse button causes the first image in the first file +specified on the command line to be displayed. +In addition the following keyboard commands are recognized: +

      +
      b + +
      +Use a +PhotometricIntepretation + +of MinIsBlack in displaying the current image. +
      l + +
      +Use a +FillOrder + +of lsb-to-msb in decoding the current image. +
      m + +
      +Use a +FillOrder + +of msb-tolmsb in decoding the current image. +
      c + +
      +Use a colormap visual to display the current image. +
      r + +
      +Use a true color (24-bit RGB) visual to display the current image. +
      w + +
      +Use a +PhotometricIntepretation + +of MinIsWhite in displaying the current image. +
      W + +
      +Toggle (enable/disable) display of warning messages from the +TIFF +library when decoding images. +
      E + +
      +Toggle (enable/disable) display of error messages from the +TIFF +library when decoding images. +
      z + +
      +Reset all parameters to their default settings (FillOrder, + +PhotometricInterpretation, + +handling of warnings and errors). +
      PageUp + +
      +Display the previous image in the current file or the last +image in the previous file. +
      PageDown + +
      +Display the next image in the current file or the first image +in the next file. +
      Home + +
      +Display the first image in the current file. +
      End + +
      +Display the last image in the current file (unimplemented). +
      +  +

      OPTIONS

      + +
      +
      -c + +
      +Force image display in a colormap window. +
      -d + +
      +Specify an image to display by directory number. +By default the first image in the file is displayed. +Directories are numbered starting at zero. +
      -e + +
      +Enable reporting of error messages from the +TIFF +library. +By default +tiffgt + +silently ignores images that cannot be read. +
      -f + +
      +Force +tiffgt + +to run as a foreground process. +By default +tiffgt + +will place itself in the background once it has opened the +requested image file. +
      -l + +
      +Force the presumed bit ordering to be +LSB +to +MSB. +
      -m + +
      +Force the presumed bit ordering to be +MSB +to +LSB. +
      -o + +
      +Specify an image to display by directory offset. +By default the first image in the file is displayed. +Directories offsets may be specified using C-style syntax; +i.e. a leading ``0x'' for hexadecimal and a leading ``0'' for octal. +
      -p + +
      +Override the value of the +PhotometricInterpretation + +tag; the parameter may be one of: +miniswhite, + +minisblack, + +rgb, + +palette, + +mask, + +separated, + +ycbcr, + +and +cielab. + +
      -r + +
      +Force image display in a full color window. +
      -s + +
      +Stop on the first read error. +By default all errors in the input data are ignored and +tiffgt + +does it's best to display as much of an image as possible. +
      -w + +
      +Enable reporting of warning messages from the +TIFF +library. +By default +tiffgt + +ignores warning messages generated when reading an image. +
      -v + +
      +Place information in the title bar describing +what type of window (full color or colormap) is being +used, the name of the input file, and the directory +index of the image (if non-zero). +By default, the window type is not shown in the title bar. +
      +  +

      BUGS

      + +Images wider and taller than the display are silently truncated to avoid +crashing old versions of the window manager. +  +

      SEE ALSO

      + +tiffdump(1), + +tiffinfo(1), + +tiffcp(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:48 GMT, November 23, 1999 + + diff --git a/html/man/tiffinfo.1.html b/html/man/tiffinfo.1.html new file mode 100755 index 0000000..d4e22ba --- /dev/null +++ b/html/man/tiffinfo.1.html @@ -0,0 +1,114 @@ + +Manpage of TIFFINFO + +

      TIFFINFO

      +Section: User Commands (1)
      Updated: January 27, 1997
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiffinfo - print information about +TIFF +files +  +

      SYNOPSIS

      + +tiffinfo + +[ +options + +] +input.tif ... + +  +

      DESCRIPTION

      + +Tiffinfo + +displays information about files created according +to the Tag Image File Format, Revision 6.0. +By default, the contents of each +TIFF +directory in each file +is displayed, with the value of each tag shown symbolically +(where sensible). +  +

      OPTIONS

      + +
      +
      -c + +
      +Display the colormap and color/gray response curves, if present. +
      -D + +
      +In addition to displaying the directory tags, +read and decompress all the data in each image (but not display it). +
      -d + +
      +In addition to displaying the directory tags, +print each byte of decompressed data in hexadecimal. +
      -j + +
      +Display any JPEG-related tags that are present. +
      -o + +
      +Set the initial +TIFF +directory according to the specified file offset. +The file offset may be specified using the usual C-style syntax; +i.e. a leading ``0x'' for hexadecimal and a leading ``0'' for octal. +
      -s + +
      +Display the offsets and byte counts for each data strip in a directory. +
      -z + +
      +Enable strip chopping when reading image data. +
      -# + +
      +Set the initial +TIFF +directory to +#. + +
      +  +

      SEE ALSO

      + +pal2rgb(1), + +tiffcp(1), + +tiffcmp(1), + +tiffmedian(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:48 GMT, November 23, 1999 + + diff --git a/html/man/tiffmedian.1.html b/html/man/tiffmedian.1.html new file mode 100755 index 0000000..46216a8 --- /dev/null +++ b/html/man/tiffmedian.1.html @@ -0,0 +1,150 @@ + +Manpage of TIFFMEDIAN + +

      TIFFMEDIAN

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiffmedian - apply the median cut algorithm to data in a +TIFF +file +  +

      SYNOPSIS

      + +tiffmedian + +[ +options + +] +input.tif + +output.tif + +  +

      DESCRIPTION

      + +tiffmedian + +applys the median cut algorithm to an +RGB +image in +input.tif + +to generate a palette image that is written to +output.tif. + +The generated colormap has, by default, 256 entries. +The image data is quantized by mapping each +pixel to the closest color values in the colormap. +  +

      OPTIONS

      + +
      +
      -c + +
      +Specify the compression to use for data written to the output file: +none + +for no compression, +packbits + +for PackBits compression, +lzw + +for Lempel-Ziv & Welch compression, +and +zip + +for Deflate compression. +By default +tiffmedian + +will compress data according to the value of the +Compression + +tag found in the source file. +
      +LZW +compression can be specified together with a +predictor + +value. +A predictor value of 2 causes +each scanline of the output image to undergo horizontal +differencing before it is encoded; a value +of 1 forces each scanline to be encoded without differencing. +LZW-specific options are specified by appending a ``:''-separated +list to the ``lzw'' option; e.g. +-c lzw:2 + +for +LZW +compression with horizontal differencing. +
      -C + +
      +Specify the number of entries to use in the generated colormap. +By default all 256 entries/colors are used. +
      -f + +
      +Apply Floyd-Steinberg dithering before selecting a colormap entry. +
      -r + +
      +Specify the number of rows (scanlines) in each strip of data +written to the output file. +By default, +tiffmedian + +attempts to set the rows/strip +that no more than 8 kilobytes of data appear in a strip. +
      +  +

      NOTES

      + +This program is derived from Paul Heckbert's +median + +program. +  +

      SEE ALSO

      + +pal2rgb(1), + +tiffinfo(1), + +tiffcp(1), + +tiffcmp(1), + +libtiff(3) + +

      + +"Color Image Quantization for Frame Buffer Display", Paul +Heckbert, SIGGRAPH proceedings, 1982, pp. 297-307. + +


      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      NOTES
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:48 GMT, November 23, 1999 + + diff --git a/html/man/tiffsplit.1.html b/html/man/tiffsplit.1.html new file mode 100755 index 0000000..8cc7a90 --- /dev/null +++ b/html/man/tiffsplit.1.html @@ -0,0 +1,90 @@ + +Manpage of TIFFCP + +

      TIFFCP

      +Section: User Commands (1)
      Updated: September 26, 1994
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiffsplit - split a multi-image +TIFF +into single-image +TIFF +files +  +

      SYNOPSIS

      + +tiffsplit + +src.tif + +[ +prefix + +] +  +

      DESCRIPTION

      + +tiffsplit + +takes a multi-directory (page) +TIFF +file and creates one or more single-directory (page) +TIFF +files from it. +The output files are given names created by concatenating +a prefix, a lexically ordered +suffix in the range [aa-zz], the suffix +.tif + +(e.g. +xaa.tif, + +xab.tif, + +... +xzz.tif). + +If a prefix is not specified on the command line, +the default prefix of +x + +is used. +  +

      OPTIONS

      + +None. +  +

      BUGS

      + +Only a select set of ``known tags'' is copied when spliting. +  +

      SEE ALSO

      + +tiffcp(1), + +tiffinfo(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:48 GMT, November 23, 1999 + + diff --git a/html/man/tiffsv.1.html b/html/man/tiffsv.1.html new file mode 100755 index 0000000..3725236 --- /dev/null +++ b/html/man/tiffsv.1.html @@ -0,0 +1,192 @@ + +Manpage of TIFFSV + +

      TIFFSV

      +Section: User Commands (1)
      Updated: October 15, 1995
      Index +
      Return to Main Contents +
      + +  +

      NAME

      + +tiffsv - save an image from the framebuffer in a +TIFF +file (Silicon Graphics version) +  +

      SYNOPSIS

      + +tiffsv + +[ +options + +] +output.tif + +[ +x1 x2 y1 y2 + +] +  +

      DESCRIPTION

      + +tiffsv + +saves all or part of the framebuffer in a file using the +Tag Image File Format, Revision 6.0. +By default, the image is saved with data samples packed (PlanarConfiguration=1), + +compressed with the Lempel-Ziv & Welch algorithm (Compression=5), + +and with each strip no more than 8 kilobytes. +These characteristics can be overriden, or explicitly specified +with the options described below. +  +

      OPTIONS

      + +
      +
      -b + +
      +Save the image as a greyscale image +as if it were processed by +tiff2bw(1). + +This option is included for compatibility with the standard +scrsave(6D) + +program. +
      -c + +
      +Specify the compression to use for data written to the output file: +none + +for no compression, +packbits + +for PackBits compression, +jpeg + +for baseline JPEG compression, +zip + +for Deflate compression, +and +lzw + +for Lempel-Ziv & Welch compression (default). +
      +LZW +compression can be specified together with a +predictor + +value. +A predictor value of 2 causes +each scanline of the output image to undergo horizontal +differencing before it is encoded; a value +of 1 forces each scanline to be encoded without differencing. +LZW-specific options are specified by appending a ``:''-separated +list to the ``lzw'' option; e.g. +-c lzw:2 + +for +LZW +compression with horizontal differencing. +
      -p + +
      +Specify the planar configuration to use in writing image data. +By default, +tiffsv + +will create a new file with the data samples packed contiguously. +Specifying +-p contig + +will force data to be written with multi-sample data packed +together, while +-p separate + +will force samples to be written in separate planes. +
      -r + +
      +Specify the number of rows (scanlines) in each strip of data +written to the output file. +By default, +tiffsv + +attempts to set the rows/strip +that no more than 8 kilobytes of data appear in a strip. +
      +  +

      NOTE

      + +Except for the use of +TIFF, +this program is equivalent to the standard +scrsave + +program. +This means, for example, that you can use it in conjunction with +the standard +icut + +program simply by creating a link called +scrsave, + +or by creating a shell script called +scrsave + +that invokes +tiffgt + +with the appropriate options. +  +

      BUGS

      + +If data are saved compressed and in separate planes, then the +rows in each strip is silently set to one to avoid limitations +in the +libtiff(3) + +library. +  +

      SEE ALSO

      + +scrsave(6D) + +pal2rgb(1), + +tiffdump(1), + +tiffgt(1), + +tiffinfo(1), + +tiffcp(1), + +tiffmedian(1), + +libtiff(3) + + +
      + 

      Index

      +
      +
      NAME
      +
      SYNOPSIS
      +
      DESCRIPTION
      +
      OPTIONS
      +
      NOTE
      +
      BUGS
      +
      SEE ALSO
      +
      +
      +This document was created by +man2html, +using the manual pages.
      +Time: 01:31:48 GMT, November 23, 1999 + + diff --git a/html/misc.html b/html/misc.html new file mode 100755 index 0000000..f6d5571 --- /dev/null +++ b/html/misc.html @@ -0,0 +1,93 @@ + + + +Acknowledgments and Other Issues + + + + +

      + +Acknowledgments and Other Issues +

      + +

      +Silicon Graphics has seen fit to allow me to give this work away. It +is free. There is no support or guarantee of any sort as to its +operations, correctness, or whatever. If you do anything useful with +all or parts of it you need to honor the copyright notices. I would +also be interested in knowing about it and, hopefully, be acknowledged. + +
      + + +

      Acknowledgements

      + +The LZW algorithm is derived from the compress program (the proper +attribution is included in the source code). The Group 3 fax stuff +originated as code from Jef Poskanzer, but has since been rewritten +several times. The latest version uses an algorithm from Frank +Cringle -- consult libtiff/mkg3states.c and +libtiff/tif_fax3.h for further information. +The JPEG support was written by Tom Lane and is dependent on the +excellent work of Tom Lane and the Independent JPEG Group (IJG) +who distribute their work under friendly licensing similar to this +software. +Many other people have by now helped with bug fixes and code; a +few of the more persistent contributors have been: + +
      +    Bjorn P. Brox               Dan McCoy
      +    J.T. Conklin                Richard Minner
      +    Frank D. Cringle            Richard Mlynarik
      +    Soren Pingel Dalsgaard      Niles Ritter
      +    Steve Johnson               Karsten Spang
      +    Tom Lane                    Peter Smith
      +
      + +(my apology to anyone that was inadvertently not listed.) + +

      Warning

      + +It appears that Unisys is actively pursuing copyright control on the +LZW compression algorithm. In particular, users of the LZW compression +within the TIFF framework. For this reason the TIFF 6.0 spec states +that LZW compression is not recommended. It is unclear at this time +what compression algorithm will be used in place of it. I have no idea +what this means to you or to this library. I make no warranty or +guarantees with regard to the LZW support in this library. + + +

      Use and Copyright

      + +

      +Copyright (c) 1988-1997 Sam Leffler
      +Copyright (c) 1991-1997 Silicon Graphics, Inc.
      +
      +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.
      +
      + +

      +


      + + +Last updated: $Date: 2000/06/24 19:10:16 $ + + diff --git a/html/support.html b/html/support.html new file mode 100755 index 0000000..4502afa --- /dev/null +++ b/html/support.html @@ -0,0 +1,682 @@ + + + +TIFF 6.0 Specification Coverage + + + + +

      + +TIFF 6.0 Specification Coverage +

      + + +

      +The library is capable of dealing with images that are written to +follow the 5.0 or 6.0 TIFF spec. There is also considerable support +for some of the more esoteric portions of the 6.0 TIFF spec. + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +Core requirements + +Both "MM" and "II" byte orders are handled. +Both packed and separated planar configuration of samples. +Any number of samples per pixel (memory permitting). +Any image width and height (memory permitting). +Multiple subfiles can be read and written. +Editing is not supported in that related subfiles (e.g. +a reduced resolution version of an image) are not automatically +updated. +

      +Tags handled: +ExtraSamples, +ImageWidth, +ImageLength, +NewSubfileType, +ResolutionUnit. +Rowsperstrip, +StripOffsets, +StripByteCounts, +XResolution, +YResolution, +

      Tiled ImagesTileWidth, + TileLength, + TileOffsets, + TileByteCounts +
      Image Colorimetry InformationWhitePoint, + PrimaryChromaticities, + TransferFunction, + ReferenceBlackWhite +
      Class B for bilevel imagesSamplesPerPixel = 1
      + BitsPerSample = 1
      + Compression = 1 (none), 2 (CCITT 1D), or 32773 (PackBits)
      + PhotometricInterpretation = 0 (Min-is-White), 1 (Min-is-Black)
      +
      Class G for grayscale imagesSamplesPerPixel = 1
      + BitsPerSample = 4, 8
      + Compression = 1 (none) 5 (LZW)
      + PhotometricInterpretation = 0 (Min-is-White), 1 (Min-is-Black)
      +
      Class P for palette color imagesSamplesPerPixel = 1
      + BitsPerSample = 1-8
      + Compression = 1 (none) 5 (LZW)
      + PhotometricInterpretation = 3 (Palette RGB)
      + ColorMap +
      Class R for RGB full color imagesSamplesPerPixel = 3
      + BitsPerSample = <8,8,8>
      + PlanarConfiguration = 1, 2
      + Compression = 1 (none) 5 (LZW)
      + PhotometricInterpretation = 2 (RGB)
      +
      Class F for facsimile(Class B tags plus...)
      + Compression = 3 (CCITT Group 3), 4 (CCITT Group 4)
      + FillOrder = 1 (MSB), 2 (LSB)
      + Group3Options = 1 (2d encoding), 4 (zero fill), 5 (2d+fill)
      + ImageWidth = 1728, 2048, 2482
      + NewSubFileType = 2
      + ResolutionUnit = 2 (Inch), 3 (Centimeter)
      + PageNumber, + XResolution, + YResolution, + Software, + BadFaxLines, + CleanFaxData, + ConsecutiveBadFaxLines, + DateTime, + DocumentName, + ImageDescription, + Orientation +
      Class S for separated imagesSamplesPerPixel = 4
      + PlanarConfiguration = 1, 2
      + Compression = 1 (none), 5 (LZW)
      + PhotometricInterpretation = 5 (Separated)
      + InkSet = 1 (CMYK)
      + DotRange, + InkNames, + DotRange, + TargetPrinter +
      Class Y for YCbCr imagesSamplesPerPixel = 3
      + BitsPerSample = <8,8,8>
      + PlanarConfiguration = 1, 2
      + Compression = 1 (none), 5 (LZW), 7 (JPEG)
      + PhotometricInterpretation = 6 (YCbCr)
      + YCbCrCoefficients, + YCbCrSubsampling, + YCbCrPositioning
      + (colorimetry info from Appendix H; see above) +
      Class "JPEG" for JPEG images (per TTN2)PhotometricInterpretation = 1 (grayscale), 2 (RGB), 5 (CMYK), 6 (YCbCr)
      + (Class Y tags if YCbCr)
      + (Class S tags if CMYK)
      + Compression = 7 (JPEG)
      +
      + +

      +In addition, the library supports some optional compression algorithms +that are, in some cases, of dubious value. + +

      +    Compression = 32766	NeXT 2-bit encoding
      +    Compression = 32809	ThunderScan 4-bit encoding
      +    Compression = 32909	Pixar companded 11-bit ZIP encoding
      +    Compression = 32946	PKZIP-style Deflate encoding (experimental)
      +    Compression = 34676	SGI 32-bit Log Luminance encoding (experimental)
      +    Compression = 34677	SGI 24-bit Log Luminance encoding (experimental)
      +
      + +Note that there is no support for the JPEG-related tags defined +in the 6.0 specification; the JPEG support is based on the post-6.0 +proposal given in TIFF Technical Note #2. + +

      + + + + + +
      + +For more information on the experimental Log Luminance encoding +consult the materials available at +http://www.sgi.com/Technology/pixformat. + +
      + +

      +The following table shows the tags that are recognized +and how they are used by the library. If no use is indicated, +then the library +reads and writes the tag, but does not use it internally. + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Tag Name Value R/W Library's Use (Comments)
      NewSubFileType254R/Wnone (called SubFileType in <tiff.h>)
      SubFileType255R/Wnone (called OSubFileType in <tiff.h>)
      ImageWidth256R/Wlots
      ImageLength257R/Wlots
      BitsPerSample258R/Wlots
      Compression259R/Wto select appropriate codec
      PhotometricInterpretation262R/Wlots
      Thresholding263R/W 
      CellWidth264 parsed but ignored
      CellLength265 parsed but ignored
      FillOrder266R/Wcontrol bit order
      DocumentName269R/W 
      ImageDescription270R/W 
      Make271R/W 
      Model272R/W 
      StripOffsets273R/Wdata i/o
      Orientation274R/W 
      SamplesPerPixel277R/Wlots
      RowsPerStrip278R/Wdata i/o
      StripByteCounts279R/Wdata i/o
      MinSampleValue280R/W 
      MaxSampleValue281R/W 
      XResolution282R/W 
      YResolution283R/Wused by Group 3 2d encoder
      PlanarConfiguration284R/Wdata i/o
      PageName285R/W 
      XPosition286R/W 
      YPosition286R/W 
      FreeOffsets288 parsed but ignored
      FreeByteCounts289 parsed but ignored
      GrayResponseUnit290 parsed but ignored
      GrayResponseCurve291 parsed but ignored
      Group3Options292R/Wused by Group 3 codec
      Group4Options293R/W 
      ResolutionUnit296R/Wused by Group 3 2d encoder
      PageNumber297R/W 
      ColorResponseUnit300 parsed but ignored
      TransferFunction301R/W 
      Software305R/W 
      DateTime306R/W 
      Artist315R/W 
      HostComputer316R/W 
      Predictor317R/Wused by LZW codec
      WhitePoint318R/W 
      PrimaryChromacities319R/W 
      ColorMap320R/W 
      TileWidth322R/Wdata i/o
      TileLength323R/Wdata i/o
      TileOffsets324R/Wdata i/o
      TileByteCounts324R/Wdata i/o
      BadFaxLines326R/W 
      CleanFaxData327R/W 
      ConsecutiveBadFaxLines328R/W 
      SubIFD330R/Wsubimage descriptor support
      InkSet332R/W 
      InkNames333R/W 
      DotRange336R/W 
      TargetPrinter337R/W 
      ExtraSamples338R/Wlots
      SampleFormat339R/W 
      SMinSampleValue340R/W 
      SMaxSampleValue341R/W 
      JPEGTables347R/Wused by JPEG codec
      YCbCrCoefficients529R/Wused by TIFFReadRGBAImage support
      YCbCrSubsampling530R/Wtile/strip size calculations
      YCbCrPositioning531R/W 
      ReferenceBlackWhite532R/W 
      Matteing32995Rnone (obsoleted by ExtraSamples tag)
      DataType32996Rnone (obsoleted by SampleFormat tag)
      ImageDepth32997R/Wtile/strip calculations
      TileDepth32998R/Wtile/strip calculations
      StoNits37439R/W 
      + +

      +The Matteing and DataType +tags have been obsoleted by the 6.0 +ExtraSamples and SampleFormat tags. +Consult the documentation on the +ExtraSamples tag and Associated Alpha for elaboration. Note however +that if you use Associated Alpha, you are expected to save data that is +pre-multipled by Alpha. If this means nothing to you, check out +Porter & Duff's paper in the '84 SIGGRAPH proceedings: "Compositing Digital +Images". + +

      +The ImageDepth +tag is a non-standard, but registered tag that specifies +the Z-dimension of volumetric data. The combination of ImageWidth, +ImageLength, and ImageDepth, +defines a 3D volume of pixels that are +further specified by BitsPerSample and +SamplesPerPixel. The TileDepth +tag (also non-standard, but registered) can be used to specified a +subvolume "tiling" of a volume of data. + +

      +The Colorimetry, and CMYK tags are additions that appear in TIFF 6.0. +Consult the TIFF 6.0 specification included in the doc directory +and online. + +

      +The JPEG-related tag is specified in +TIFF Technical Note #2 which defines +a revised JPEG-in-TIFF scheme (revised over that appendix that was +part of the TIFF 6.0 specification). + + + +

      +


      + +Last updated: $Date: 2000/06/24 19:10:16 $ + + + diff --git a/html/tools.html b/html/tools.html new file mode 100755 index 0000000..4d3faf2 --- /dev/null +++ b/html/tools.html @@ -0,0 +1,178 @@ + + + +TIFF Tools Overview + + + + +

      + +TIFF Tools Overview +

      + +

      +This software distribution comes with a small collection of programs +for converting non-TIFF format images to TIFF and for manipulating +and interogating the contents of TIFF images. +Several of these tools are useful in their own right. +Many of them however are more intended to serve as programming +examples for using the TIFF library. + +

      Device-dependent Programs

      + +There are two device-dependent programs that serve as simple examples +for writing programs to display and save TIFF images. + + +

      + + + + + + + + + + + + +
      tiffgt    Display the contents of one or +more TIFF images on a Silicon Graphics system using +the Silicon Graphics IRIS GL. +The software makes extensive use of the TIFFRGBAImage +facilities described elsewhere.
      tiffsvA program to save all or part of a screen dump on a Silicon +Graphics system. +As for tiffgt this code, while written to use the IRIS GL, +can be easily tailored to other devices.
      + +

      Device-independent Programs

      + +The remaining programs should be device-independent: + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      tiffinfoDisplay information about one or more TIFF files.
      tiffdumpDisplay the verbatim contents of the TIFF directory in a + file (it's very useful for debugging bogus files that you may get from + someone that claims they support TIFF)
      tiffcpCopy, concatenate, and convert TIFF images (e.g. + switching from Compression=5 to Compression=1)
      tiff2psConvert TIFF images to PostScript
      tiffcmpCompare the contents of two TIFF files (it does + not check all the directory information, but does check all the data)
      tiff2bwA simple program to convert a color image to grayscale
      ras2tiffA quick hack that converts Sun rasterfile format images to + TIFF -- it's less than complete
      rgb2ycbcrConvert an RGB, grayscale, or bilevel TIFF image to a + YCbCr TIFF image; it's mainly provided for testing
      gif2tiffA quick hack that converts GIF 87a format images to TIFF
      ppm2tiffA quick hack that converts PPM format images to TIFF
      fax2tiffConvert raw Group 3 or Group 4 facsimile data to TIFF
      pal2rgbConvert a Palette-style image to a full color RGB image by + applying the colormap
      tiffditherDither a b&w image into a bilevel image (suitable for + use in creating fax files)
      tiffsplitCreate one or more single-image files from a (possibly) + multi-image file
      fax2psConvert a Group 3- or Group 4- compressed TIFF to PostScript + that is significantly more compressed than is generated by tiff2ps + (unless tiff2ps writes PS Level II)
      thumbnailCopy a bilevel TIFF to one that includes 8-bit greyscale + "thumbnail images" for each page; it is provided as an example of + how one might use the SubIFD tag + (and the library support for it)
      tiffmedianA version of Paul Heckbert's median cut program + that reads an RGB TIFF image, and creates a TIFF palette file as a + result; it's useful for converting full-color RGB images to 8-bit + color for your friends that have cheapo 8-bit framebuffers.
      sgi2tiffA program to convert SGI image files to TIFF. This + program is only useful on SGI machines as it uses -limage.
      + +

      +Check out the manual pages for details about the above programs. + + +

      +


      + + +Last updated: $Date: 2000/06/24 19:10:16 $ + + + + diff --git a/html/v3.4beta007.html b/html/v3.4beta007.html new file mode 100755 index 0000000..ac12eed --- /dev/null +++ b/html/v3.4beta007.html @@ -0,0 +1,112 @@ + + + +Changes in TIFF v3.4beta007 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • bit order was corrected for Pentium systems +
      • a new define, HOST_BIGENDIAN, was added for code that + wants to statically use information about native cpu byte order +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • the G3/G4 decoder was replaced by a new one that is faster and + has smaller state tables +
      • Niles Ritter's client tag extension hooks were added +
      • a new routine TIFFCurrentDirOffset was added for + applications that want to find out the file offset of a TIFF directory +
      • the calculation of the number of strips in an image was corected + for images with certain esoteric configurations +
      • a potential memory leak (very unlikely) was plugged +
      • the TIFFReadRGBAImage support was completely rewritten + and new, more flexible support was added for reading images into + a fixed-format raster +
      • YCbCr to RGB conversion done in the TIFFReadRGBAImage support + was optimized +
      • a bug in JPEG support calculation of strip size was corrected +
      • the LZW decoder was changed to initialize the code table to zero + to lessen potential problems that arise when invalid data is decoded +
      • tiffcomp.h is now aware of OS/2 +
      • some function prototypes in tiffio.h and tiffiop.h + that contained parameter + names have been changed to avoid complaints from certain compilers +
      + +


      + +CHANGES IN THE PORTABILITY SUPPORT: + +
        +
      • Makefile.in has been corrected to use the parameters + chosen by the configure script +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • fax2ps has been rewritten and moved over from the user + contributed software +
      • an uninitialized variable in pal2rgb has been fixed +
      • ras2tiff now converts 24-bit RGB raster data so that + samples are written in the proper order +
      • tiff2ps has been updated to include fixes + and enhancements from Alberto Accomazzi +
      • tiffcp now has a -o option to select a directory + by file offset +
      • tiffinfo is now capable of displaying the raw undecoded + image data in a file +
      • tiffgt has been rewritten to use the new TIFFRGBAImage + support and to handle multiple files +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta016.html b/html/v3.4beta016.html new file mode 100755 index 0000000..fa1b522 --- /dev/null +++ b/html/v3.4beta016.html @@ -0,0 +1,122 @@ + + + +Changes in TIFF v3.4beta016 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • support was added for configuring the Deflate codec +
      • support was added for the HTML documentation +
      • codecs that are not configured for inclusion in the library + are no longer compiled +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • support was added for registering new codecs external to the library + and for overriding the codecs that are builtin to the library +
      • emulation support for the old DataType tag was improved +
      • suppport was added for the SMinSampleValue + and SMaxSampleValue tags +
      • the library no longer ignores TileWidth and TileLength + tags whose values are not a multiple of 16 (per the spec); this + permits old, improperly written, images to be read +
      • the support for the Predictor tag was placed in a reusable + module so that it can be shared by multiple codecs +
      • experimental compression support was added for the Deflate algorithm + (using the freely available zlib package) +
      • a new routine, TIFFWriteBufferSetup was added a la the + routine TIFFReadBufferSetup +
      • the DSO version of the library is now statically linked with the + JPEG and Deflate libraries; this means applications that link against + the DSO do not also need to link against these ancillary libraries +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • all the tools now use common code to process compress-oriented arguments +
      • tiffdump should now compile on a Macintosh with MPW +
      + +


      + +CHANGES IN THE MANUAL PAGES: + +
        +
      • everything was updated +
      + +


      + +CHANGES IN THE DOCUMENTATION: + +
        +
      • everything was updated +
      + +


      + +CHANGES IN CONTRIBUTED SOFTWARE: + +
        +
      • contrib/dbs/xtiff was made to compile +
      • contrib/mac-mpw is new support for compiling the software on + a Macintosh under MPW; consult the documentation + for details +
      • contrib/tags is information on how to use the tag extenion + facilities; consult + contrib/tags/README for details +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta018.html b/html/v3.4beta018.html new file mode 100755 index 0000000..f48b833 --- /dev/null +++ b/html/v3.4beta018.html @@ -0,0 +1,84 @@ + + + +Changes in TIFF v3.4beta018 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • configure now recognizes IRIX 6.x systems +
      • configure now uses ENVOPTS when searching for an ANSI + C compiler; this fixes a problem configuring the software under + HP/UX with the native C compiler +
      • configure now correctly recognizes memory-mapped files are supported + under AIX +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • make install now properly installs the include files +
      • some portability fixes from Bjorn Brox +
      • the G3/G4 codec now warns about decoded rows that are longer than + the image/tile width +
      • changes from Frank Cringle to make the library work with the + gcc-specific bounds checking software +
      • miscellaneous fixes to TIFFPrintDirectory +
      • bug fix to correct a problem where TIFFWriteRawStrip + could not be used to automatically grow an image's length +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • fixes from Frank Cringle to update fax2tiff +
      • portability fixes to tiff2bw and tiffcmp +
      • tiffdump now uses the byte swapping routines in the library +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta024.html b/html/v3.4beta024.html new file mode 100755 index 0000000..340e9c9 --- /dev/null +++ b/html/v3.4beta024.html @@ -0,0 +1,139 @@ + + + +Changes in TIFF v3.4beta024 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • It is now possible to setup the software to build only the + library; configure reconizes this is the intent when the + VERSION, tiff.alpha, and tif_version.c + files are in the local directory (i.e. ``.'') +
      • configure no longer tries to setup HTML materials +
      • include file directories needed in building the library are now + specified with a DIRS_LIBINC config parameter +
      • configure no longer checks for alternate compilers if CC + is set; if the specified compiler is not found or is not appropriate + the configuration procedure aborts +
      • the port.h file generated by configure is now used only by + the library and as such as have been moved to the libtiff + directory +
      • there is beginning support for building DSO's on systems other than IRIX +
      • configure now verifies the JPEG and zlib directory pathnames by + checking for well-known include files in these directories +
      • configure no longer creates the dist directory needed only + on SGI machines (for building SGI binary distributions) +
      • a bug was fixed whereby configure would incorrectly set + ENVOPTS when building the software with gcc under AIX +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • two new typedefs were added to tiff.h: int8 + and uint8 for signed and unsigned 8-bit quantities, + respectively; these are currently used only by + programs in the tools directory +
      • the BadFaxLines, CleanFaxData, and + ConsecutiveBadFaxLines tags are now supported with + Group 4 compression +
      • byte order is now correctly identified on 64-bit machines +
      • a bug was fixed in the PackBits decoder where input data would + appear short when a no-op run was present +
      • a bug was fixed in calculations with very wide strips +
      • TIFFWriteEncodedStrip and TIFFWriteRawStrip + were extended to support dynamically growing the number of + strips in an image (must set ImageLength prior to + making calls though) +
      • TIFFDefaultTileSize now rounds tile width and height + up to a multiple of 16 pixels, as required by the TIFF 6.0 specification +
      • the file version.h is now built by a new mkversion + program; this was done for portability to non-UNIX systems +
      • support was added for the Acorn RISC OS (from Peter Greenham) +
      • the builtin codec table is now made const when compiling + under VMS so that libtiff can be built as a shared library +
      • support for the PowerPC Mac (from Ruedi Boesch) +
      • support for Window NT/Window 95 (from Scott Wagner) +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • the tools no longer include port.h +
      • various portability fixes; mostly to eliminate implicit assumptions + about how long int32 data types are +
      • PostScript Level II additions to tiff2ps from Bjorn Brox +
      • sgi2tiff now handles RGBA images +
      + +


      + +CHANGES IN THE MANUAL PAGES: + +
        +
      • the documentation has been updated to reflect the current state of + the software +
      • some routines have been moved to different manual pages + to group like-routines together +
      + +


      + +CHANGES IN THE CONTRIBUTED SOFTWARE: + +
        +
      • support was added for the Acorn RISC OS (from Peter Greenham) +
      • support for Windows NT/Windows 95 contributed for a previous + version of this software was sort of incorporated (it's broken + right now) (from Scott Wagner) +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta028.html b/html/v3.4beta028.html new file mode 100755 index 0000000..9c9578e --- /dev/null +++ b/html/v3.4beta028.html @@ -0,0 +1,146 @@ + + + +Changes in TIFF v3.4beta028 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • a -noninteractive flag was added to configure to + control whether or not it prints and prompts for configuration information +
      • various typos and fixes were made in configure for the the + library-only build support (this and other configure fixes from + Richard Mlynarik <mly@adoc.xerox.com>) +
      • bugs were fixed in the handling of pathnames supplied for external + packages; e.g. DIR_JPEG +
      • the handling of SETMAKE is now done properly +
      • the default prototype function declaration for pow was corrected +
      • a bug was fixed in libtiff/Makefile.in that caused installation + to fail on systems without DSO support +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • Acorn RISC O/S support that was accidentally left out of the + left out of the previous distribution is present (from Peter Greenham) +
      • complaints about unknown and/or unsupported codecs have been + delayed until they are invoked; this permits applications to open + images and look at tags even if the image data is compressed with + an unknown/unsupported compression scheme +
      • bugs in handling unknown tags have been corrected; applications + that use multiple codecs, each with codec-specific tags, no longer + generate confusing error messages +
      • a missing pseudo-tag definition in the CCITT G3 codec was fixed + (this problem caused core dumps in the tiffcp program) +
      • pseudo-tags are now treated specially; they are always considered + to be set (i.e. they do not use bits in the FIELD_* bit-vectors). +
      • the use of strip chopping can now be controlled on a per-file basis + through a mode parameter supplied when opening a file (``C'' to + enable strip chopping and ``c'' to disable) +
      • two bugs were fixed in the writing of opposite-endian byte-order + files +
      • support was added for three new fax-related tags registered to + SGI: FaxRecvParams, FaxRecvTime, and FaxSubAddress +
      • the bit order of image data read and written can now be controlled + on a per-file basis through a mode parameter supplied when opening + a file (``B'' to force MSB2LSB bit order, ``L'' for LSB2MSB bit + order, and ``H'' for the bit order of the native CPU) +
      • the byte order of image and tag data written to newly-created files + can now be controlled on a per-file basis through a mode parameter + supplied when openening a file (``b'' to force Big-Endian byte order + and ``l'' to force Little-Endian byte order) +
      • the use memory-mapped files for images opened read-only can now + be controlled on a per-file basis through a mode parameter supplied + when opening a file (``M'' to enable use of memory-mapped files + and ``m'' to disable use) +
      • the use of the WIN32 define in tiffiop.h has + been replaced by __WIN32__ +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • fax2ps now does a save and restore + around each page of PostScript; this fixes a problem with VM + overflow when printing a many-page document on some printers +
      • a bug in the handling of 3-channel images by ras2tiff + was fixed +
      • tiffcp has new options to control the byte order of + newly created files: -B for Big-Endian byte order, -L + for Little-Endian byte order; a -M option to disable the + use of memory-mapped files, and a -C option to disable the + use of strip chopping +
      • bugs were fixed in tiffcp's handling of codec-specific tags +
      + +


      + +CHANGES IN THE MANUAL PAGES: + +
        +
      • the TIFFOpen page has been updated to reflect the new + optional open mode parameters +
      + +


      + +CHANGES IN THE CONTRIBUTED SOFTWARE: + +
        +
      • contrib/win95 contains information and code from Philippe Tenenhaus + <100423.3705@compuserve.com> + about using the software under Windows 95 +
      • contrib/winnt contains information and code from Dave Dyer + <ddyer@triple-i.com> + about using the software under Windows NT +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta029.html b/html/v3.4beta029.html new file mode 100755 index 0000000..1725211 --- /dev/null +++ b/html/v3.4beta029.html @@ -0,0 +1,86 @@ + + + +Changes in TIFF v3.4beta029 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • configure now relativizes pathname references given in + -L options (as frequently specified when configuring + ancillary packages) +
      • problems related to configuring the software on Ultrix 4.4 have + been corrected +
      • the shell to use in Makefiles and scripts can now be set with the + SCRIPT_SH configuration parameter +
      • comments in config.site now correctly indicate how to setup the + use of ancillary packages +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • mods for building the software on a Mac using the + MetroWerks CodeWarrior compilers +
      • a bug in the CCITT T.4/T.6 decoder was fixed where the last codeword in + a strip/tile might not be decoded; this was seen only when decoding + multi-strip images +
      • a bug in the CCITT RLE codecs was fixed whereby the pseudo tags were not + being properly registered +
      + +


      + +CHANGES IN THE CONTRIBUTED SOFTWARE: + +
        +
      • contrib/mac-cw contains information and code from Niles Ritter + <ndr@tazboy.jpl.nasa.gov> + about building the software with the MetroWerks CodeWarrior compilers + on Macintosh systems +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta031.html b/html/v3.4beta031.html new file mode 100755 index 0000000..f47f151 --- /dev/null +++ b/html/v3.4beta031.html @@ -0,0 +1,94 @@ + + + +Changes in TIFF v3.4beta031 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • configure now captures significantly more information + in the config.log file and provides more information when + it is unable to setup a configuration +
      • support was added for building shared libraries on more systems: + AIX, HPUX, Solaris, and Linux. +
      • a new configuration parameter LIBCOPTS was added for + passing arguments to the C compiler to use when building only + the library; this is part of the enhanced support for building + shared libraries +
      • include files for optional packages that reside in /usr/include + are now handled correctly +
      • build trees may now be configured using either relative or absolute + pathnames to the source distribution +
      • several new configuration parameters were added, mainly for building + shared libraries: DIST_MAJOR, DIST_MINOR, + DIST_ALPHA, and DSOSUF_VERSION +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • the Deflate support has been revised: it requires version 0.99 of + the zlib software distribution, the output format has changed and + is incompatible with previous versions of this library (each + strip now includes a header read and written by the zlib library) +
      • the codec name printed by the TIFFPrintDirectory routine is now + taken from the codec table instead of from a builtin table; this means + that application-defined codecs are handled correctly +
      • a new symbol was added that contains the library version number; + this can be used to do a compile-time compatibility check of the + library version +
      + +


      + +CHANGES IN THE MANUAL PAGES: + +
        +
      • the creation and installation of manual pages was redone; it now + implements the documented ``configuration scheme'' +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta032.html b/html/v3.4beta032.html new file mode 100755 index 0000000..4f7e1a4 --- /dev/null +++ b/html/v3.4beta032.html @@ -0,0 +1,90 @@ + + + +Changes in TIFF v3.4beta032 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • various fixups and subtle improvements to configure + from Richard Mlynarik +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • a new codec from Pixar designed for high-resolution color images; + note that this codec is not configured by default +
      • a bug fix for reading tags with a single FLOAT value +
      • change to the TIFFGetField calling convention: + a tag that has a single value of + type DOUBLE is now retrieved by passing a + ``double*'' instead of a + ``double**'' (this change makes the handling of tags with + DOUBLE values identical to the handling of tags with + FLOAT values) +
      • fix to VMS support for the handling of floating point values +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • tiffdump now handles tags with FLOAT and DOUBLE + values +
      + +


      + +CHANGES IN THE CONTRIBUTED SOFTWARE: + +
        +
      • updates to the Acorn OS support from Peter Greenham +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta033.html b/html/v3.4beta033.html new file mode 100755 index 0000000..518e337 --- /dev/null +++ b/html/v3.4beta033.html @@ -0,0 +1,82 @@ + + + +Changes in TIFF v3.4beta033 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • support was added for building the library as a DSO under OSF/1 +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • fixes to the Pixar codec +
      • portability mods for VMS +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • fixes to gif2tiff and ppm2tiff for building under MS/DOS +
      • portability mods to fax2ps and ycbcr for VMS +
      + +


      + +CHANGES IN THE CONTRIBUTED SOFTWARE: + +
        +
      • a new package from Alexander Lehmann + for building the library and tools under MS/DOS with DJGPP v2 +
      • updated VMS support from Karsten Spang +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta034.html b/html/v3.4beta034.html new file mode 100755 index 0000000..72ab4b6 --- /dev/null +++ b/html/v3.4beta034.html @@ -0,0 +1,68 @@ + + + +Changes in TIFF v3.4beta034 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • support was added for building the library as a DSO under NetBSD +
      • a bug was fixed in the DSO support for Linux +
      • the handling of version strings has changed slightly to simplify parsing +
      • a new parameter, TIFFLIBREF, was added to control how the + library is referenced when linking programs in the tools directory +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • DSO creation under Solaris now forces the DSO name with a -h option +
      • the interface to the mkversion program was changed + to eliminate the need to parse files +
      • a bug was fixed in the EOL-detection logic of the T.4/T.6 decoder +
      • ANSI IT8 TIFF/IT tag definitions were added to tiff.h +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta035.html b/html/v3.4beta035.html new file mode 100755 index 0000000..804ee06 --- /dev/null +++ b/html/v3.4beta035.html @@ -0,0 +1,63 @@ + + + +Changes in TIFF v3.4beta035 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • support was added installing the HTML documentation +
      • support was added for building the library as a DSO under FreeBSD +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • the interface to the mkversion program was restored to + the form used prior to v3.4beta034 +
      • several portability problems for 16-bit systems were fixed +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.4beta036.html b/html/v3.4beta036.html new file mode 100755 index 0000000..e9ed2b8 --- /dev/null +++ b/html/v3.4beta036.html @@ -0,0 +1,117 @@ + + + +Changes in TIFF v3.4beta036 + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • support was added for building the library as a DSO under HP-UX with + the native C compiler +
      • tools are now built with explicit pathnames for the DSO under IRIX, + Solaris, and Linux +
      • DSO configuration support for Linux was changed to require that + libc.so only be readable (not executable) +
      + +


      + +CHANGES IN LIBTIFF: + +
        +
      • support was add for ICC: NumberOfInks, and ICCProfile +
      • a memory leak caused by doing TIFFSetDirectory(0) was fixed +
      • a bug was fixed whereby certain multi-directory files were not + properly handled when accessed by mapping the data into memory +
      • the strip chopping support is now always compiled + into the library with the default usage controlled by a + STRIPCHOP_DEFAULT configuration parameter +
      • the strip chopping support no longer chops tiled images +
      • all static strings are now const--for shared libraries +
      • the logic for estimating the strip size of images without + a StripByteCounts tag was improved by handling + PlanarContig images differently from PlanarSeparate +
      • a bug was fixed in the G3 codec when converting the Y resolution + of data specified in metric units +
      • a bug was fixed in the G3/G4 decoder for data where lines terminate + with a v0 code +
      • the TIFFRGBAImage support was changed to scale 16-bit colormap + entries more conservatively to avoid problems with applications + that do not generate fully saturated pixel values +
      • the LZW decoder was changed to use a more conservative scheme when + bounds checking the hash table array; this avoids pitfalls with + systems that load objects into memory in unusual locations +
      • a bug was fixed in TIFFPrintDirectory's handling of the + InkNames tag +
      • TIFFPrintDirectory now understands NumberOfInks + and ICC-related tags +
      • the routines for reading image data now provide more useful information + when a read error is encountered +
      • support was added for compiling with Microsoft Visual C++ 4.0 +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • a bug was fixed in pal2rgb's colormap handling +
      • tiff2ps now includes John Wehle's changes for maintaining + the aspect ratio + of images when scaling and for honoring the deadzone on a page when + generating PostScript Level II +
      • tiff2ps does a better job guarding against the mishandling + of greyscale images +
      • tiff2ps now correctly converts X- and Y-resolution values + specified in metric units +
      • tiffdump has a new -m option to control the maximum + number of indirect + data values printed for a tag (by default 24) +
      • tiffdump understands several new tags +
      • tiffdump now shows any terminating null in ASCII strings +
      • tiffinfo now suppresses strip chopping when interpreting an image; + a new -z option has been added to enable strip chopping +
      + + TIFF home page.
      + +
      + +
      +Sam Leffler / sam@engr.sgi.com +Last updated $Date: 2000/06/24 19:10:16 $. +
      + + + diff --git a/html/v3.5.1.html b/html/v3.5.1.html new file mode 100755 index 0000000..e91f95d --- /dev/null +++ b/html/v3.5.1.html @@ -0,0 +1,75 @@ + + + +Changes in TIFF v3.5.1 + + + + + + + + +TIFF CHANGE INFORMATION + + + + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • None of consequence +
      + +


      + +CHANGES IN LIBTIFF: + + +
        +
      • Support was added for IPTC Newsphoto metadata (TIFFTAGE_IPTCNEWSPHOTO) +
      • Support was added for photoshop caption handling (TIFFTAG_PHOTOSHOP) +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • Bill Radcliffe's iptcutil was +added to the "contrib" subdirectory . It can convert an IPTC binary +blob to ASCII text and vice-versa. The blob itself can be extracted +from or added to an image with the ImageMagick convert(1) +utility. +
      + + TIFF home page.
      + +
      + +Last updated $Date: 2000/06/24 19:10:16 $. + + + diff --git a/html/v3.5.2.html b/html/v3.5.2.html new file mode 100755 index 0000000..b0ccd90 --- /dev/null +++ b/html/v3.5.2.html @@ -0,0 +1,108 @@ + + + +Changes in TIFF v3.5.2 + + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      + +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • Corrected alpha versioning. + +
      • Removed distinction between alpha and release targets in Makefile.in. + +
      • Added release.stamp target, which tags cvs tree, and updates + "RELEASE-DATE" + +
      • Added releasediff target, which diffs tree with source as of + date in "RELEASE-DATE" + +
      • Ticked up version to 3.5.2 (alpha 01 -- but I think we'll moving + away from alpha/non-alpha distinctions). + +
      + +


      + +CHANGES IN LIBTIFF: + + +
        +
      • Added IRIX/gcc, and OSF/1 4.x support on behalf of + Albert Chin-A-Young + +
      • Added TIFFReassignTagToIgnore() API on behalf of + Bruce Cameron . Man page still pending. + +
      • pre-remove so link before softlink in LINUXdso action in + libtiff/Makefile.in to avoid failure on LINUXdso builds other than + the first. + +
      • Fixed problem with cvtcmap() in tif_getimage.c modifying the + colormaps owned by the TIFF handle itself when trying to fixup wrong + (eight bit) colormaps. Corrected by maintaining a private copy of + the colormap. + +
      • Added TIFFReadRGBATile()/TIFFReadRGBAStrip() support in + tif_getimage.c. + +
      • Applied "a" mode fix to tif_win32.c/TIFFOpen() as suggested + by Christopher Lawton + +
      • Set O_BINARY for tif_unix.c open() ... used on cygwin for instance. + +
      • Added CYGWIN case in configure. + +
      • Applied Francois Dagand's patch to handle fax decompression bug. + (sizes >= 65536 were failing) +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • Added addtiffo (add overviews to a TIFF file) in contrib. Didn't + put it in tools since part of it is in C++. +
      + + TIFF home page.
      + +
      + +Last updated $Date: 2000/06/24 19:10:16 $. + + + diff --git a/html/v3.5.3.html b/html/v3.5.3.html new file mode 100755 index 0000000..bd2395b --- /dev/null +++ b/html/v3.5.3.html @@ -0,0 +1,132 @@ + + + +Changes in TIFF v3.5.3 + + + + + + + + +TIFF CHANGE INFORMATION + + + + +

      +This document describes the changes made to the software between the +previous and current versions (see above). +If you don't find something listed here, then it was not done in this +timeframe, or it was not considered important enough to be mentioned. +The following information is located here: +

      +

      +The ChangeLog will follow, but please note the most important change: +LZW compression has been removed. +

      +Unisys has the patent on LZW compression and have been very active in +their enforcement of late, demanding payments of $5000 or more from +websites using unlicensed software to create GIF's. They could well +do the same do persons using libtiff to create LZW compressed TIFF +images. +

      +From Burn All GIF's Day: +
      +The catch is that it appears to be difficult or impossible to get a +Unisys license to use LZW in free software that complies with the Open +Source Definition +

      +Unfortunatly, the removal of LZW compression means that saved image size has +grown dramatically. Without a change in the TIFF spec to support +another lossless compression format, this is unavoidable. +

      +The library can use zip for lossless compression, but as this is not +part of the spec, TIFFs using zip compression may not work with other +software +

      +We will be making a patch available that will contain the LZW +compression code for users who have either obtained a license from +Unisys or are willing to risk it. +

      +LZW decompression is unchanged. +

      +


      + +CHANGES IN THE SOFTWARE CONFIGURATION: + +
        +
      • Added zip creation to release makefile target + + +
      + +


      + +CHANGES IN LIBTIFF: + + +
        + +
      • Added html for TIFFWriteTile.3t man page. + +
      • Added some changes to tif_write.c to support rewriting existing + fixed sized tiles and strips. Code mods disabled by default, only + enabled if REWRITE_HACK is defined for now. + +
      • Added TIFFWriteTile.3t man page. + +
      • Added notes on use of makefile.vc in build.html, and fixed + email subscription address. + +
      • Fixed apocalypse-inducing y2k bug in contrib/ras/ras2tiff.c + +
      • Did some casts cleaning up to reduce compiler warnings in tif_fax3.c, + from Bruce Carmeron -- modifications of + changes made by Frank (sun cc still complained on cast). + +
      • fixed various VC++ warnings as suggested by Gilles Vollant + . + +
      • Modified TIFFquery.3t man pages info on TIFFIsByteSwapped() to + not imply applications are responsible for image data swapping. + +
      • HTML-ized the man pages, added to html/man + +
      • Removed LZW Compression to comply with Unisys patent extortion. + +
      • Corrected one remaining 16 -> 32 bit value in tif_fax3.c, + From Ivo Penzar Added patch from Ivo Penzar to have TiffAdvanceDirectory handle + memory mapped files. +
      + +


      + +CHANGES IN THE TOOLS: + +
        +
      • Fixed apocalypse-inducing y2k bug in contrib/ras/ras2tiff.c +
      + + TIFF home page.
      + +
      + +Last updated $Date: 2000/06/24 19:10:16 $. + + + diff --git a/libtiff.dsp b/libtiff.dsp new file mode 100755 index 0000000..9aa527c --- /dev/null +++ b/libtiff.dsp @@ -0,0 +1,266 @@ +# Microsoft Developer Studio Project File - Name="libtiff" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=libtiff - Win32 Debug +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "libtiff.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "libtiff.mak" CFG="libtiff - Win32 Debug" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "libtiff - Win32 Release" (basierend auf "Win32 (x86) Static Library") +!MESSAGE "libtiff - Win32 Debug" (basierend auf "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "libtiff - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /G5 /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c +# SUBTRACT CPP /u /YX +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\..\lib\release\libtiff.lib" + +!ELSEIF "$(CFG)" == "libtiff - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /G5 /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\..\lib\debug\libtiff.lib" + +!ENDIF + +# Begin Target + +# Name "libtiff - Win32 Release" +# Name "libtiff - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\libtiff\fax3sm.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_aux.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_close.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_codec.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_compress.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_dir.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_dirinfo.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_dirread.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_dirwrite.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_dumpmode.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_error.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_fax3.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_flush.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_getimage.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_jpeg.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_luv.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_lzw.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_next.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_open.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_packbits.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_pixarlog.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_predict.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_print.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_read.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_strip.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_swab.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_thunder.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_tile.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_version.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_warning.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_win32.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_write.c +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_zip.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\libtiff\t4.h +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_dir.h +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_fax3.h +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tif_predict.h +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tiff.h +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tiffcomp.h +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tiffconf.h +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tiffio.h +# End Source File +# Begin Source File + +SOURCE=.\libtiff\tiffiop.h +# End Source File +# Begin Source File + +SOURCE=.\libtiff\uvcode.h +# End Source File +# End Group +# End Target +# End Project diff --git a/libtiff.dsw b/libtiff.dsw new file mode 100755 index 0000000..e6d08b7 --- /dev/null +++ b/libtiff.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN! + +############################################################################### + +Project: "libtiff"=.\libtiff.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libtiff.ncb b/libtiff.ncb new file mode 100755 index 0000000000000000000000000000000000000000..fb374a2284bbdb1a23fef91bce45229d0ec50790 GIT binary patch literal 451584 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≠l$JfC3X>0vy&nk%a!&}I6>#jwBPkO{)BnrUHgG( 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 literal 0 HcmV?d00001 diff --git a/libtiff.opt b/libtiff.opt new file mode 100755 index 0000000000000000000000000000000000000000..d5b68bf938624c76f91a819fa50052c7d899a600 GIT binary patch literal 48640 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 literal 0 HcmV?d00001 diff --git a/libtiff.plg b/libtiff.plg new file mode 100755 index 0000000..2f9513c --- /dev/null +++ b/libtiff.plg @@ -0,0 +1,139 @@ + + +
      +

      Erstellungsprotokoll

      +

      +--------------------Konfiguration: libtiff - Win32 Debug-------------------- +

      +

      Befehlszeilen

      +Erstellen der temporären Datei "D:\DOKUME~1\jens\LOKALE~1\Temp\RSP1BE.tmp" mit Inhalten +[ +/nologo /G5 /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"W:\win32\libsrc\libtiff\libtiff\fax3sm.c" +"W:\win32\libsrc\libtiff\libtiff\tif_aux.c" +"W:\win32\libsrc\libtiff\libtiff\tif_close.c" +"W:\win32\libsrc\libtiff\libtiff\tif_codec.c" +"W:\win32\libsrc\libtiff\libtiff\tif_compress.c" +"W:\win32\libsrc\libtiff\libtiff\tif_dir.c" +"W:\win32\libsrc\libtiff\libtiff\tif_dirinfo.c" +"W:\win32\libsrc\libtiff\libtiff\tif_dirread.c" +"W:\win32\libsrc\libtiff\libtiff\tif_dirwrite.c" +"W:\win32\libsrc\libtiff\libtiff\tif_dumpmode.c" +"W:\win32\libsrc\libtiff\libtiff\tif_error.c" +"W:\win32\libsrc\libtiff\libtiff\tif_fax3.c" +"W:\win32\libsrc\libtiff\libtiff\tif_flush.c" +"W:\win32\libsrc\libtiff\libtiff\tif_getimage.c" +"W:\win32\libsrc\libtiff\libtiff\tif_jpeg.c" +"W:\win32\libsrc\libtiff\libtiff\tif_luv.c" +"W:\win32\libsrc\libtiff\libtiff\tif_lzw.c" +"W:\win32\libsrc\libtiff\libtiff\tif_next.c" +"W:\win32\libsrc\libtiff\libtiff\tif_open.c" +"W:\win32\libsrc\libtiff\libtiff\tif_packbits.c" +"W:\win32\libsrc\libtiff\libtiff\tif_pixarlog.c" +"W:\win32\libsrc\libtiff\libtiff\tif_predict.c" +"W:\win32\libsrc\libtiff\libtiff\tif_print.c" +"W:\win32\libsrc\libtiff\libtiff\tif_read.c" +"W:\win32\libsrc\libtiff\libtiff\tif_strip.c" +"W:\win32\libsrc\libtiff\libtiff\tif_swab.c" +"W:\win32\libsrc\libtiff\libtiff\tif_thunder.c" +"W:\win32\libsrc\libtiff\libtiff\tif_tile.c" +"W:\win32\libsrc\libtiff\libtiff\tif_version.c" +"W:\win32\libsrc\libtiff\libtiff\tif_warning.c" +"W:\win32\libsrc\libtiff\libtiff\tif_win32.c" +"W:\win32\libsrc\libtiff\libtiff\tif_write.c" +"W:\win32\libsrc\libtiff\libtiff\tif_zip.c" +] +Creating command line "cl.exe @D:\DOKUME~1\jens\LOKALE~1\Temp\RSP1BE.tmp" +Erstellen der temporären Datei "D:\DOKUME~1\jens\LOKALE~1\Temp\RSP1BF.tmp" mit Inhalten +[ +/nologo /out:"..\..\lib\debug\libtiff.lib" +.\Debug\fax3sm.obj +.\Debug\tif_aux.obj +.\Debug\tif_close.obj +.\Debug\tif_codec.obj +.\Debug\tif_compress.obj +.\Debug\tif_dir.obj +.\Debug\tif_dirinfo.obj +.\Debug\tif_dirread.obj +.\Debug\tif_dirwrite.obj +.\Debug\tif_dumpmode.obj +.\Debug\tif_error.obj +.\Debug\tif_fax3.obj +.\Debug\tif_flush.obj +.\Debug\tif_getimage.obj +.\Debug\tif_jpeg.obj +.\Debug\tif_luv.obj +.\Debug\tif_lzw.obj +.\Debug\tif_next.obj +.\Debug\tif_open.obj +.\Debug\tif_packbits.obj +.\Debug\tif_pixarlog.obj +.\Debug\tif_predict.obj +.\Debug\tif_print.obj +.\Debug\tif_read.obj +.\Debug\tif_strip.obj +.\Debug\tif_swab.obj +.\Debug\tif_thunder.obj +.\Debug\tif_tile.obj +.\Debug\tif_version.obj +.\Debug\tif_warning.obj +.\Debug\tif_win32.obj +.\Debug\tif_write.obj +.\Debug\tif_zip.obj +] +Erstellen der Befehlzeile "link.exe -lib @D:\DOKUME~1\jens\LOKALE~1\Temp\RSP1BF.tmp" +

      Ausgabefenster

      +Kompilierung läuft... +fax3sm.c +tif_aux.c +tif_close.c +tif_codec.c +tif_compress.c +tif_dir.c +tif_dirinfo.c +tif_dirread.c +tif_dirwrite.c +tif_dumpmode.c +tif_error.c +tif_fax3.c +tif_flush.c +tif_getimage.c +w:\win32\libsrc\libtiff\libtiff\tif_getimage.c(1545) : warning C4550: Ausdruck wird als Funktion ausgewertet, der eine Argumentliste fehlt +w:\win32\libsrc\libtiff\libtiff\tif_getimage.c(1546) : warning C4550: Ausdruck wird als Funktion ausgewertet, der eine Argumentliste fehlt +w:\win32\libsrc\libtiff\libtiff\tif_getimage.c(1547) : warning C4550: Ausdruck wird als Funktion ausgewertet, der eine Argumentliste fehlt +w:\win32\libsrc\libtiff\libtiff\tif_getimage.c(1548) : warning C4550: Ausdruck wird als Funktion ausgewertet, der eine Argumentliste fehlt +w:\win32\libsrc\libtiff\libtiff\tif_getimage.c(1549) : warning C4550: Ausdruck wird als Funktion ausgewertet, der eine Argumentliste fehlt +w:\win32\libsrc\libtiff\libtiff\tif_getimage.c(1550) : warning C4550: Ausdruck wird als Funktion ausgewertet, der eine Argumentliste fehlt +tif_jpeg.c +tif_luv.c +tif_lzw.c +w:\win32\libsrc\libtiff\libtiff\tif_lzw.c(390) : warning C4244: '=' : Konvertierung von 'unsigned short ' in 'char ', moeglicher Datenverlust +w:\win32\libsrc\libtiff\libtiff\tif_lzw.c(455) : warning C4244: '=' : Konvertierung von 'unsigned short ' in 'char ', moeglicher Datenverlust +tif_next.c +tif_open.c +tif_packbits.c +Generieren von Code... +Kompilieren... +tif_pixarlog.c +tif_predict.c +tif_print.c +tif_read.c +tif_strip.c +tif_swab.c +tif_thunder.c +tif_tile.c +tif_version.c +tif_warning.c +tif_win32.c +tif_write.c +tif_zip.c +Generieren von Code... +Bibliothek wird erstellt... + + + +

      Ergebnisse

      +libtiff.lib - 0 Fehler, 8 Warnung(en) +
      + + diff --git a/libtiff/Makefile.in b/libtiff/Makefile.in new file mode 100755 index 0000000..7dfb198 --- /dev/null +++ b/libtiff/Makefile.in @@ -0,0 +1,348 @@ +# $Header: /home/cvsroot/libtiff/libtiff/Makefile.in,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# Tag Image File Format Library +# +# Copyright (c) 1988-1997 Sam Leffler +# Copyright (c) 1991-1997 Silicon Graphics, Inc. +# +# 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. +# + +SRCDIR = @LIBSRCDIR@ + +# +# VERSION: @VERSION@ +# DATE: @DATE@ +# TARGET: @TARGET@ +# CCOMPILER: @CCOMPILER@ +# +SHELL = @SCRIPT_SH@ +NULL = +CC = @CCOMPILER@ +AR = @AR@ +AROPTS = @AROPTS@ +RANLIB = @RANLIB@ +INSTALL = @INSTALL@ + +# +# If JPEG support is to be included and the Independent JPEG +# Software distribution is not installed then DIR_JPEG must +# refer to the directory where the include files reside. +# +# Similarly, if the libgz distribution is not installed, then +# DIR_LIBGZ must refer to the directory where the include files +# are located. Note that recent versions +# +IPATH = -I. -I${SRCDIR} @COPT_LIBINC@ +# +# To enable JPEG support include -DJPEG_SUPPORT here. +# To enable Deflate support add a -DZIP_SUPPORT here. +# Note that where the configure script is used these defines +# are automatically setup when JPEG/ZIP is set to "yes". +# +# Otherwise, consult tiffconf.h for information on controlling +# the configuration of optional library support. +# +CONF_LIBRARY=@CONF_JPEG@ @CONF_ZIP@ +COPTS = @GCOPTS@ +OPTIMIZER=-O +CFLAGS = @ENVOPTS@ @LIBCOPTS@ ${COPTS} ${OPTIMIZER} ${IPATH} ${CONF_LIBRARY} +# +SRCS = \ + tif_aux.c \ + tif_close.c \ + tif_codec.c \ + tif_compress.c \ + tif_dir.c \ + tif_dirinfo.c \ + tif_dirread.c \ + tif_dirwrite.c \ + tif_dumpmode.c \ + tif_error.c \ + tif_fax3.c \ + tif_fax3sm.c \ + tif_getimage.c \ + tif_jpeg.c \ + tif_flush.c \ + tif_luv.c \ + tif_lzw.c \ + tif_next.c \ + tif_open.c \ + tif_packbits.c \ + tif_pixarlog.c \ + tif_predict.c \ + tif_print.c \ + tif_read.c \ + tif_swab.c \ + tif_strip.c \ + tif_thunder.c \ + tif_tile.c \ + tif_unix.c \ + tif_version.c \ + tif_warning.c \ + tif_write.c \ + tif_zip.c \ + ${NULL} +OBJS = \ + tif_aux.o \ + tif_close.o \ + tif_codec.o \ + tif_compress.o \ + tif_dir.o \ + tif_dirinfo.o \ + tif_dirread.o \ + tif_dirwrite.o \ + tif_dumpmode.o \ + tif_error.o \ + tif_fax3.o \ + tif_fax3sm.o \ + tif_getimage.o \ + tif_jpeg.o \ + tif_flush.o \ + tif_luv.o \ + tif_lzw.o \ + tif_next.o \ + tif_open.o \ + tif_packbits.o \ + tif_pixarlog.o \ + tif_predict.o \ + tif_print.o \ + tif_read.o \ + tif_swab.o \ + tif_strip.o \ + tif_thunder.o \ + tif_tile.o \ + tif_unix.o \ + tif_version.o \ + tif_warning.o \ + tif_write.o \ + tif_zip.o \ + ${NULL} +TARGETS = libtiff.a + +all: ${TARGETS} + if [ @DSO@dso != nodso ]; then \ + ${MAKE} @DSO@dso; \ + else \ + true; \ + fi + +libtiff.a: ${OBJS} + ${AR} ${AROPTS} libtiff.a $? + ${RANLIB} libtiff.a + +# +# NB: The configure script verifies that the configured +# tools are capable of producing a DSO before enabling +# their creation/use. The following rules are effectively +# duplicated in the configure script to do this verification. +# This means that if you want to add support for building a +# DSO on another system you'll need to modify this file *and* +# configure if you want the right thing to happen automatically +# (should probably be fixed up). +# + +# default IRIX DSO building rule +IRIXdso: ${OBJS} + @if [ "`basename ${CC}`" = "gcc" ]; then \ + ${LD} -n32 @ENVOPTS@ -o libtiff.@DSOSUF@ -shared -rdata_shared \ + ${OBJS}; \ + else \ + ${CC} @ENVOPTS@ -o libtiff.@DSOSUF@ -shared -rdata_shared \ + -check_registry ${SRCDIR}/../port/irix/so_locations \ + -quickstart_info \ + ${OBJS} @LIBJPEG@ @LIBGZ@; \ + fi + touch $@ +# special rule for IRIX 5.2 +IRIX52dso: ${OBJS} + ${LD} -elf -o libtiff.@DSOSUF@ -shared -no_unresolved -all ${OBJS} \ + @LIBJPEG@ @LIBGZ@ -lc -lm + touch $@ +# Solaris 2.x +SOLARISdso: ${OBJS} + ${LD} -L@DIR_LIB@ -G -h libtiff.@DSOSUF@ -o libtiff.@DSOSUF@ ${OBJS} + touch $@ +# HP-UX A.09.03 +HPUXdso: ${OBJS} + ${LD} +b@DIR_LIB@ -b -o libtiff.@DSOSUF@ ${OBJS} + touch $@ +# AIX 2.3.5 and 4.1.1 +AIXdso: ${OBJS} + rm -f libtiff.syms shr.o + echo "#!" > libtiff.syms + /bin/dump -g libtiff.a | sed -n -e \ + 's/^[ ]*[0-9][0-9]*[ ]*\([^ .][^ ]*\)$$/\1/p' \ + >> libtiff.syms + ${LD} -o shr.o libtiff.a -H512 -T512 -bM\:SRE \ + -bE\:libtiff.syms @LIBJPEG@ @LIBGZ@ -lc -lm -L@DIR_LIB@ + rm -f libtiff.syms libtiff.@DSOSUF@ + ${AR} ${AROPTS} libtiff.@DSOSUF@ shr.o + rm -f shr.o + touch $@ +# NetBSD 1.1 or FreeBSD +NETBSDdso FREEBSDdso: ${OBJS} + @rm -f libtiff_pic.a + @${AR} cq libtiff_pic.a `lorder ${OBJS} | tsort -q` + ${RANLIB} libtiff_pic.a + ${LD} -x -Bshareable -Bforcearchive -o libtiff.@DSOSUF@ libtiff_pic.a + rm -f libtiff_pic.a + touch $@ +# linux ELF shared lib rule +LINUXdso: ${OBJS} + ${CC} -shared -Wl,-soname,libtiff.@DSOSUF@ \ + -o libtiff.@DSOSUF_VERSION@ ${OBJS} @LIBJPEG@ @LIBGZ@ + rm -f libtiff.@DSOSUF@ + @LN@ @LN_S@ libtiff.@DSOSUF_VERSION@ libtiff.@DSOSUF@ + touch $@ +# OSF/1 3.2 shared lib rule +OSFdso: ${OBJS} + ${LD} -o libtiff.@DSOSUF@ -shared -error_unresolved ${OBJS} @LIBJPEG@ @LIBGZ@ -lc -lm + + +${OBJS}: ${SRCDIR}/tiffio.h ${SRCDIR}/tiff.h ${SRCDIR}/tif_dir.h +${OBJS}: ${SRCDIR}/tiffcomp.h ${SRCDIR}/tiffiop.h ${SRCDIR}/tiffconf.h + +ALPHA = @ALPHAFILE@ +VERSION = @VERSIONFILE@ + +version.h: ${VERSION} ${ALPHA} ${SRCDIR}/mkversion.c + ${CC} -o mkversion ${CFLAGS} ${SRCDIR}/mkversion.c + rm -f version.h; ./mkversion -v ${VERSION} -a ${ALPHA} version.h +tif_version.o: version.h + +# +# The finite state machine tables used by the G3/G4 decoders +# are generated by the mkg3states program. On systems without +# make these rules have to be manually carried out. +# +tif_fax3sm.c: ${SRCDIR}/mkg3states.c ${SRCDIR}/tif_fax3.h + ${CC} -o mkg3states ${CFLAGS} ${SRCDIR}/mkg3states.c + rm -f tif_fax3sm.c; ./mkg3states -c const tif_fax3sm.c + +tif_aux.o: ${SRCDIR}/tif_aux.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_aux.c +tif_close.o: ${SRCDIR}/tif_close.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_close.c +tif_codec.o: ${SRCDIR}/tif_codec.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_codec.c +tif_compress.o: ${SRCDIR}/tif_compress.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_compress.c +tif_dir.o: ${SRCDIR}/tif_dir.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_dir.c +tif_dirinfo.o: ${SRCDIR}/tif_dirinfo.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_dirinfo.c +tif_dirread.o: ${SRCDIR}/tif_dirread.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_dirread.c +tif_dirwrite.o: ${SRCDIR}/tif_dirwrite.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_dirwrite.c +tif_dumpmode.o: ${SRCDIR}/tif_dumpmode.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_dumpmode.c +tif_error.o: ${SRCDIR}/tif_error.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_error.c +tif_fax3.o: ${SRCDIR}/tif_fax3.c ${SRCDIR}/t4.h ${SRCDIR}/tif_fax3.h + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_fax3.c +tif_getimage.o: ${SRCDIR}/tif_getimage.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_getimage.c +tif_jpeg.o: ${SRCDIR}/tif_jpeg.c @DEPEND_JPEGLIB@ + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_jpeg.c +tif_flush.o: ${SRCDIR}/tif_flush.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_flush.c +tif_luv.o: ${SRCDIR}/tif_luv.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_luv.c +tif_lzw.o: ${SRCDIR}/tif_lzw.c ${SRCDIR}/tif_predict.h + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_lzw.c +tif_next.o: ${SRCDIR}/tif_next.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_next.c +tif_open.o: ${SRCDIR}/tif_open.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_open.c +tif_packbits.o: ${SRCDIR}/tif_packbits.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_packbits.c +tif_pixarlog.o: ${SRCDIR}/tif_pixarlog.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_pixarlog.c +tif_predict.o: ${SRCDIR}/tif_predict.c ${SRCDIR}/tif_predict.h + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_predict.c +tif_print.o: ${SRCDIR}/tif_print.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_print.c +tif_read.o: ${SRCDIR}/tif_read.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_read.c +tif_swab.o: ${SRCDIR}/tif_swab.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_swab.c +tif_strip.o: ${SRCDIR}/tif_strip.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_strip.c +tif_thunder.o: ${SRCDIR}/tif_thunder.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_thunder.c +tif_tile.o: ${SRCDIR}/tif_tile.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_tile.c +tif_unix.o: ${SRCDIR}/tif_unix.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_unix.c +tif_version.o: ${SRCDIR}/tif_version.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_version.c +tif_warning.o: ${SRCDIR}/tif_warning.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_warning.c +tif_write.o: ${SRCDIR}/tif_write.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_write.c +tif_zip.o: ${SRCDIR}/tif_zip.c ${SRCDIR}/tif_predict.h @DEPEND_ZLIB@ + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_zip.c + +tif_apple.o: ${SRCDIR}/tif_apple.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_apple.c +tif_atari.o: ${SRCDIR}/tif_atari.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_atari.c +tif_msdos.o: ${SRCDIR}/tif_msdos.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_msdos.c +tif_vms.o: ${SRCDIR}/tif_vms.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_vms.c +tif_win3.o: ${SRCDIR}/tif_win3.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tif_win3.c + +INCS = ${SRCDIR}/tiff.h ${SRCDIR}/tiffio.h ${SRCDIR}/tiffconf.h + +installHdrs: ${INCS} + ${INSTALL} -idb tiff.sw.dev -m 755 -dir @DIR_INC@ + for i in ${INCS}; do \ + f=`basename $$i`; \ + ${INSTALL} -idb tiff.sw.dev -m 444 -F @DIR_INC@ \ + -src $$i -O $$f; \ + done +installDSO: @DSO@dso + if [ @DSOSUF_VERSION@ != @DSOSUF@ ]; then \ + ${INSTALL} -idb tiff.sw.tools -m 555 -F @DIR_LIB@ \ + -O libtiff.@DSOSUF_VERSION@; \ + ${INSTALL} -idb tiff.sw.tools -F @DIR_LIB@ \ + -ln libtiff.@DSOSUF_VERSION@ -O libtiff.@DSOSUF@; \ + else \ + ${INSTALL} -idb tiff.sw.tools -m 555 -F @DIR_LIB@ \ + -O libtiff.@DSOSUF@; \ + fi +install: all installHdrs + ${INSTALL} -idb tiff.sw.dev -m 755 -dir @DIR_LIB@ + ${INSTALL} -idb tiff.sw.dev -m 444 -F @DIR_LIB@ -O libtiff.a + if [ @DSO@dso != nodso ]; then \ + ${MAKE} installDSO; \ + else \ + true; \ + fi + +clean: + rm -f ${TARGETS} ${OBJS} core a.out \ + mkg3states tif_fax3sm.c \ + mkversion version.h \ + libtiff.a libtiff.@DSOSUF@ libtiff.@DSOSUF_VERSION@ *dso diff --git a/libtiff/Makefile.lcc b/libtiff/Makefile.lcc new file mode 100755 index 0000000..02d6a49 --- /dev/null +++ b/libtiff/Makefile.lcc @@ -0,0 +1,129 @@ +# $Header: /home/cvsroot/libtiff/libtiff/Makefile.lcc,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# Tag Image File Format Library +# +# Copyright (c) 1988-1997 Sam Leffler +# Copyright (c) 1991-1997 Silicon Graphics, Inc. +# +# 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 Stanford 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. +# +DESTDIR=. +# +INSTALL=install +NULL= + +IPATH= -I. -I../jpeg +CONF_LIBRARY=\ + ${NULL} +COPTS= -Oloop -cwagshf -d1 -b0 -v -DNDEBUG -rr -j135i +CFLAGS= ${COPTS} ${IPATH} ${CONF_LIBRARY} +# +INCS= tiff.h tiffio.h +SRCS= tif_fax3.c \ + tif_fax4.c \ + tif_aux.c \ + tif_atari.c \ + tif_ccittrle.c \ + tif_close.c \ + tif_compress.c \ + tif_dir.c \ + tif_dirinfo.c \ + tif_dirread.c \ + tif_dirwrite.c \ + tif_dumpmode.c \ + tif_error.c \ + tif_getimage.c \ + tif_jpeg.c \ + tif_flush.c \ + tif_lzw.c \ + tif_next.c \ + tif_open.c \ + tif_packbits.c \ + tif_print.c \ + tif_read.c \ + tif_swab.c \ + tif_strip.c \ + tif_thunder.c \ + tif_tile.c \ + tif_version.c \ + tif_warning.c \ + tif_write.c \ + ${NULL} +OBJS= tif_fax3.o \ + tif_fax4.o \ + tif_aux.o \ + tif_atari.o \ + tif_ccittrle.o \ + tif_close.o \ + tif_compress.o \ + tif_dir.o \ + tif_dirinfo.o \ + tif_dirread.o \ + tif_dirwrite.o \ + tif_dumpmode.o \ + tif_error.o \ + tif_getimage.o \ + tif_jpeg.o \ + tif_flush.o \ + tif_lzw.o \ + tif_next.o \ + tif_open.o \ + tif_packbits.o \ + tif_print.o \ + tif_read.o \ + tif_swab.o \ + tif_strip.o \ + tif_thunder.o \ + tif_tile.o \ + tif_version.o \ + tif_warning.o \ + tif_write.o \ + ${NULL} +ALL= tiffrnb.lib + +all: ${ALL} + +${ALL}: ${OBJS} + ${AR} ${ARFLAGS} $@ r $< + +${OBJS}: tiffio.h tiff.h tiffcomp.h tiffiop.h tiffconf.h +tif_fax3.o: tif_fax3.c g3states.h t4.h tif_fax3.h + +g3states.h: mkg3states.c t4.h + ${CC} -o mkg3states.ttp ${CFLAGS} mkg3states.c + ./mkg3states -c > g3states.h + +install: all installh + -for i in ${ALL}; do \ + ${INSTALL} -c -m 644 $$i ${DESTDIR}/lib/$$i; \ + done + +installh: ${INCS} + -for i in ${INCS}; do \ + h=`basename $$i`; \ + cmp -s $$i ${DESTDIR}/include/$$h || \ + ${INSTALL} -c -m 444 $$i ${DESTDIR}/include/$$h; \ + done + +clean: + rm -f ${ALL} ${OBJS} mkg3states.ttp mkg3states.o g3states.h + +tags: ${SRCS} + ${CTAGS} ${SRCS} diff --git a/libtiff/fax3sm.c b/libtiff/fax3sm.c new file mode 100755 index 0000000..1d0f34a --- /dev/null +++ b/libtiff/fax3sm.c @@ -0,0 +1,1046 @@ +/* WARNING, this file was automatically generated by the + mkg3states program */ +#include "tiff.h" +#include "tif_fax3.h" + const TIFFFaxTabEnt TIFFFaxMainTable[128] = { +12,7,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,5,6,2,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,5,7,3,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +4,6,2,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,6,7,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,5,6,2,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +4,7,3,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,4,6,2,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0 +}; +const TIFFFaxTabEnt TIFFFaxWhiteTable[4096] = { +12,11,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,11,1792,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5, +7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,11,1856,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5, +7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,12,2112,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2368,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5, +7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,12,1984,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5, +7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,11,1920,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2240,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5, +7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,12,2496,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,12,11,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5, +7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,11,1792,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,11,1856,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5, +7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,12,2176,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5, +7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,12,2432,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2048,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5, +7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,11,1920,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5, +7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,12,2304,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2560,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5, +7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7 +}; +const TIFFFaxTabEnt TIFFFaxBlackTable[8192] = { +12,11,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1792,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,23,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,20,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,25,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,128,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,56,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,30,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1856,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,57,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,21,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,54,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,52,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,48,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2112,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,44,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,36,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,384,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,28,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,60,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,40,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2368,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,1984,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,50,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,34,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1664,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,26,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,1408,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,32,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1920,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,61,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,42,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1024,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,768,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,62,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2240,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,46,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,38,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,512,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,19,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,24,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,22,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2496,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,12,11,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1792,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,23,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,20,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,25,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,192,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1280,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,31,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1856,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,58,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,21,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,896,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,640,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,49,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2176,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,45,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,37,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,448,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,29,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,1536,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,41,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2432,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2048,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,51,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,35,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,320,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,27,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,59,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,33,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1920,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,256,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,43,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1152,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,55,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,63,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2304,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,47,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,39,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,53,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,19,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,24,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,22,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2560,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,12,11,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1792,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,23,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,20,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,25,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,128,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,56,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,30,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1856,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,57,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,21,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,54,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,52,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,48,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2112,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,44,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,36,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,384,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,28,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,60,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,40,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2368,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,1984,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,50,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,34,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1728,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,26,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1472,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,32,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1920,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,61,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,42,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,1088,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,832,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,62,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2240,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,46,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,38,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,576,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,19,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,24,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,22,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2496,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +12,11,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1792,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,23,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,20,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,25,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,192,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1344,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,31,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1856,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,58,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,21,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,960,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,704,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,49,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2176,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,45,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,37,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,448,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,29,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1600,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,41,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2432,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2048,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,51,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,35,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,320,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,27,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,59,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,33,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1920,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,256,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,43,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1216,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,55,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,63,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2304,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,47,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,39,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,53,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,19,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,24,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,22,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2560,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2 +}; diff --git a/libtiff/fax3sm_winnt.c b/libtiff/fax3sm_winnt.c new file mode 100755 index 0000000..1d0f34a --- /dev/null +++ b/libtiff/fax3sm_winnt.c @@ -0,0 +1,1046 @@ +/* WARNING, this file was automatically generated by the + mkg3states program */ +#include "tiff.h" +#include "tif_fax3.h" + const TIFFFaxTabEnt TIFFFaxMainTable[128] = { +12,7,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,5,6,2,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,5,7,3,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +4,6,2,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,6,7,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,5,6,2,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +4,7,3,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0,1,4,0,3,1,0,5,3,1,3,1,0, +2,3,0,3,1,0,4,3,1,3,1,0,4,6,2,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0, +1,4,0,3,1,0,5,3,1,3,1,0,2,3,0,3,1,0,4,3,1,3,1,0 +}; +const TIFFFaxTabEnt TIFFFaxWhiteTable[4096] = { +12,11,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,11,1792,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5, +7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,11,1856,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5, +7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,12,2112,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2368,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5, +7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,12,1984,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5, +7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,11,1920,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2240,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5, +7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,12,2496,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,12,11,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5, +7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,11,1792,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,11,1856,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5, +7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,12,2176,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5, +7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,12,2432,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1472,7,4,5,7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,960,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2048,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5, +7,8,44,7,6,17,9,9,1344,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15, +7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7, +7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6, +7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +11,11,1920,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6, +7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5, +7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1728,7,4,5,7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5, +7,8,42,7,6,16,9,9,1152,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15, +9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,0,0,0,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6,7,7,19,7,5,8,7,8,55,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5,7,8,53,7,5,9,9,8,448,7,4,6, +7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1472,7,4,5, +7,8,43,7,6,17,9,9,1216,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,33,9,5,128,7,8,49,7,6,14, +7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5,7,8,41,7,6,16,9,9,960,7,4,6, +7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,9,704,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15,9,8,320,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,11,12,2304,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5, +7,8,40,7,6,16,9,9,832,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6,7,8,36,9,5,128,7,8,52,7,6,15, +7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1600,7,4,5,7,8,44,7,6,17,9,9,1344,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,30,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14,7,8,62,7,4,4,7,4,2,7,4,7, +7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1088,7,4,6,7,8,32,7,5,8,7,8,58,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,8,640,7,4,6, +7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5, +7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +0,0,0,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14, +7,7,28,7,4,4,7,4,2,7,4,7,7,7,23,7,4,3,7,7,27,7,4,5,7,8,39,7,6,16,9,8,576,7,4,6, +7,7,19,7,5,8,7,8,55,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,8,45,7,4,3,7,5,11,7,4,5, +7,8,53,7,5,9,9,8,448,7,4,6,7,8,35,9,5,128,7,8,51,7,6,15,7,8,63,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,9,9,1536,7,4,5,7,8,43,7,6,17,9,9,1280,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,29,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6, +7,8,33,9,5,128,7,8,49,7,6,14,7,8,61,7,4,4,7,4,2,7,4,7,7,8,47,7,4,3,7,8,59,7,4,5, +7,8,41,7,6,16,9,9,1024,7,4,6,7,8,31,7,5,8,7,8,57,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,7,22,7,4,3,7,5,11,7,4,5,7,7,26,7,5,9,9,9,768,7,4,6,7,8,37,9,5,128,7,7,25,7,6,15, +9,8,320,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6, +7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,11,12,2560,7,4,3,7,5,11,7,4,5, +7,6,12,7,5,9,9,6,1664,7,4,6,7,7,20,9,5,128,7,7,24,7,6,14,7,7,28,7,4,4,7,4,2,7,4,7, +7,7,23,7,4,3,7,7,27,7,4,5,7,8,40,7,6,16,9,9,896,7,4,6,7,7,19,7,5,8,7,8,56,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7,7,8,46,7,4,3,7,5,11,7,4,5,7,8,54,7,5,9,9,8,512,7,4,6, +7,8,36,9,5,128,7,8,52,7,6,15,7,8,0,7,4,4,7,4,2,7,4,7,7,6,13,7,4,3,9,9,1728,7,4,5, +7,8,44,7,6,17,9,9,1408,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7, +7,8,30,7,4,3,7,5,11,7,4,5,7,6,12,7,5,9,9,6,1664,7,4,6,7,8,34,9,5,128,7,8,50,7,6,14, +7,8,62,7,4,4,7,4,2,7,4,7,7,8,48,7,4,3,7,8,60,7,4,5,7,8,42,7,6,16,9,9,1152,7,4,6, +7,8,32,7,5,8,7,8,58,9,5,64,7,5,10,7,4,4,7,4,2,7,4,7,7,7,22,7,4,3,7,5,11,7,4,5, +7,7,26,7,5,9,9,8,640,7,4,6,7,8,38,9,5,128,7,7,25,7,6,15,9,8,384,7,4,4,7,4,2,7,4,7, +7,6,13,7,4,3,7,7,18,7,4,5,7,7,21,7,6,17,9,7,256,7,4,6,7,6,1,7,5,8,9,6,192,9,5,64, +7,5,10,7,4,4,7,4,2,7,4,7 +}; +const TIFFFaxTabEnt TIFFFaxBlackTable[8192] = { +12,11,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1792,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,23,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,20,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,25,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,128,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,56,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,30,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1856,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,57,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,21,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,54,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,52,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,48,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2112,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,44,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,36,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,384,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,28,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,60,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,40,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2368,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,1984,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,50,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,34,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1664,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,26,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,1408,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,32,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1920,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,61,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,42,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1024,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,768,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,62,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2240,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,46,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,38,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,512,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,19,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,24,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,22,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2496,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,12,11,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1792,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,23,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,20,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,25,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,192,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1280,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,31,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1856,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,58,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,21,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,896,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,640,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,49,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2176,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,45,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,37,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,448,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,29,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,1536,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,41,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2432,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2048,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,51,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,35,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,320,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,27,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,59,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,33,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1920,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,256,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,43,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1152,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,55,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,63,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2304,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,47,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,39,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,53,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,19,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,24,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,22,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2560,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,12,11,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1792,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,23,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,20,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,25,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,128,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,56,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,30,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1856,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,57,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,21,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,54,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,52,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,48,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2112,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,44,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,36,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,384,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,28,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,60,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,40,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2368,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,1984,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,50,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,34,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1728,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,26,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1472,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,32,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1920,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,61,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,42,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,1088,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,832,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,62,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2240,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,46,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,38,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,576,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,19,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,24,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,22,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2496,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +12,11,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,11,1792,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,23,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,20,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,25,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,192,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1344,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,31,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,11,1856,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,58,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,11,21,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,960,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,13,704,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,49,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,12,2176,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,45,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,37,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,12,448,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,29,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,13,1600,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,41,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2432,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,18,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,10,17,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2048,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,51,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,35,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,12,320,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,27,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,59,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,33,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,11,11,1920,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +10,12,256,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,43,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,10,13,1216,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,13,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,9,15,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,55,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,63,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,11,12,2304,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,12,47,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,12,39,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,12,53,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,8,14,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,0,0,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,13,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,19,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,11,24,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,7,11,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,11,22,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +11,12,2560,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,9,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,10,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,10,16,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,10,0,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,10,10,64,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,6,9,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2,8,7,11,8,2,3,8,3,1,8,2,2, +8,4,6,8,2,3,8,3,4,8,2,2,8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2, +8,8,14,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2,8,6,8,8,2,3,8,3,1,8,2,2, +8,4,5,8,2,3,8,3,4,8,2,2,8,7,12,8,2,3,8,3,1,8,2,2,8,4,6,8,2,3,8,3,4,8,2,2, +8,5,7,8,2,3,8,3,1,8,2,2,8,4,5,8,2,3,8,3,4,8,2,2 +}; diff --git a/libtiff/libtiff.def b/libtiff/libtiff.def new file mode 100755 index 0000000..2be223a --- /dev/null +++ b/libtiff/libtiff.def @@ -0,0 +1,77 @@ +LIBRARY libtiff +EXPORTS TIFFOpen + TIFFGetVersion + TIFFClose + TIFFFlush + TIFFFlushData + TIFFGetField + TIFFVGetField + TIFFGetFieldDefaulted + TIFFVGetFieldDefaulted + TIFFReadDirectory + TIFFScanlineSize + TIFFStripSize + TIFFVStripSize + TIFFTileRowSize + TIFFTileSize + TIFFVTileSize + TIFFFileno + TIFFGetMode + TIFFIsTiled + TIFFIsByteSwapped + TIFFCurrentRow + TIFFCurrentDirectory + TIFFCurrentStrip + TIFFCurrentTile + TIFFReadBufferSetup + TIFFLastDirectory + TIFFSetDirectory + TIFFSetSubDirectory + TIFFUnlinkDirectory + TIFFSetField + TIFFVSetField + TIFFWriteDirectory + TIFFPrintDirectory + TIFFReadScanline + TIFFWriteScanline + TIFFReadRGBAImage + TIFFPrintDirectory + TIFFReadScanline + TIFFWriteScanline + TIFFReadRGBAImage + TIFFFdOpen + TIFFClientOpen + TIFFFileName + TIFFError + TIFFWarning + TIFFSetErrorHandler + TIFFSetWarningHandler + TIFFComputeTile + TIFFCheckTile + TIFFNumberOfTiles + TIFFReadTile + TIFFWriteTile + TIFFComputeStrip + TIFFNumberOfStrips + TIFFReadEncodedStrip + TIFFReadRawStrip + TIFFReadEncodedTile + TIFFReadRawTile + TIFFWriteEncodedStrip + TIFFWriteRawStrip + TIFFWriteEncodedTile + TIFFWriteRawTile + TIFFSetWriteOffset + TIFFSwabShort + TIFFSwabLong + TIFFSwabArrayOfShort + TIFFSwabArrayOfLong + TIFFReverseBits + TIFFGetBitRevTable + _TIFFmalloc + _TIFFrealloc + _TIFFfree + _TIFFmemset + _TIFFmemcpy + _TIFFmemcmp + diff --git a/libtiff/makefile.vc b/libtiff/makefile.vc new file mode 100755 index 0000000..c6fe716 --- /dev/null +++ b/libtiff/makefile.vc @@ -0,0 +1,79 @@ +# +# Simple MS VC++ Makefile +# +# To build: +# C:\libtiff\libtiff> nmake /f makefile.vc all +# + +# +# Select _CONSOLE to build a library which reports errors to stderr, or +# _WINDOWED to build such that errors are reported via MessageBox(). +# +WINMODE = -DTIF_PLATFORM_CONSOLE +#WINMODE = -DTIF_PLATFORM_WINDOWED + +CC = cl +INCL = -I. +LIBS = +CFLAGS = /nologo /W3 $(INCL) $(WINMODE) + +OBJ = \ + tif_aux.obj \ + tif_close.obj \ + tif_codec.obj \ + tif_compress.obj \ + tif_dir.obj \ + tif_dirinfo.obj \ + tif_dirread.obj \ + tif_dirwrite.obj \ + tif_dumpmode.obj \ + tif_error.obj \ + tif_fax3.obj \ + fax3sm_winnt.obj \ + tif_getimage.obj \ + tif_jpeg.obj \ + tif_flush.obj \ + tif_luv.obj \ + tif_lzw.obj \ + tif_next.obj \ + tif_open.obj \ + tif_packbits.obj \ + tif_pixarlog.obj \ + tif_predict.obj \ + tif_print.obj \ + tif_read.obj \ + tif_swab.obj \ + tif_strip.obj \ + tif_thunder.obj \ + tif_tile.obj \ + tif_win32.obj \ + tif_version.obj \ + tif_warning.obj \ + tif_write.obj \ + tif_zip.obj + +VERSION = ..\VERSION +ALPHA = ..\dist\tiff.alpha + +default: libtiff.lib + +all: libtiff.lib libtiff.dll + +libtiff.lib: $(OBJ) + lib /out:libtiff.lib $(OBJ) + +libtiff.dll: $(OBJ) + link /dll /def:libtiff.def /out:libtiff.dll /implib:libtiff_i.lib \ + $(OBJ) $(LIBS) + +version.h: $(VERSION) $(ALPHA) mkversion.c + $(CC) mkversion.c + del version.h + .\mkversion.exe -v $(VERSION) -a $(ALPHA) version.h + +clean: + del *.obj *.lib libtiff.dll + +tif_version.obj: version.h + + diff --git a/libtiff/mkg3states.c b/libtiff/mkg3states.c new file mode 100755 index 0000000..a3ce1a5 --- /dev/null +++ b/libtiff/mkg3states.c @@ -0,0 +1,436 @@ +/* "$Header: /home/cvsroot/libtiff/libtiff/mkg3states.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* Initialise fax decoder tables + * Decoder support is derived, with permission, from the code + * in Frank Cringle's viewfax program; + * Copyright (C) 1990, 1995 Frank D. Cringle. + */ +#if defined(unix) || defined(__unix) +#include "port.h" +#else +#include +#include +#include +#endif + +#include "tif_fax3.h" + +#define streq(a,b) (strcmp(a,b) == 0) + +/* NB: can't use names in tif_fax3.h 'cuz they are declared const */ +TIFFFaxTabEnt MainTable[128]; +TIFFFaxTabEnt WhiteTable[4096]; +TIFFFaxTabEnt BlackTable[8192]; + +struct proto { + uint16 code; /* right justified, lsb-first, zero filled */ + uint16 val; /* (pixel count)<<4 + code width */ +}; + +static struct proto Pass[] = { +{ 0x0008, 4 }, +{ 0, 0 } +}; + +static struct proto Horiz[] = { +{ 0x0004, 3 }, +{ 0, 0 } +}; + +static struct proto V0[] = { +{ 0x0001, 1 }, +{ 0, 0 } +}; + +static struct proto VR[] = { +{ 0x0006, (1<<4)+3 }, +{ 0x0030, (2<<4)+6 }, +{ 0x0060, (3<<4)+7 }, +{ 0, 0 } +}; + +static struct proto VL[] = { +{ 0x0002, (1<<4)+3 }, +{ 0x0010, (2<<4)+6 }, +{ 0x0020, (3<<4)+7 }, +{ 0, 0 } +}; + +static struct proto Ext[] = { +{ 0x0040, 7 }, +{ 0, 0 } +}; + +static struct proto EOLV[] = { +{ 0x0000, 7 }, +{ 0, 0 } +}; + +static struct proto MakeUpW[] = { +{ 0x001b, 1029 }, +{ 0x0009, 2053 }, +{ 0x003a, 3078 }, +{ 0x0076, 4103 }, +{ 0x006c, 5128 }, +{ 0x00ec, 6152 }, +{ 0x0026, 7176 }, +{ 0x00a6, 8200 }, +{ 0x0016, 9224 }, +{ 0x00e6, 10248 }, +{ 0x0066, 11273 }, +{ 0x0166, 12297 }, +{ 0x0096, 13321 }, +{ 0x0196, 14345 }, +{ 0x0056, 15369 }, +{ 0x0156, 16393 }, +{ 0x00d6, 17417 }, +{ 0x01d6, 18441 }, +{ 0x0036, 19465 }, +{ 0x0136, 20489 }, +{ 0x00b6, 21513 }, +{ 0x01b6, 22537 }, +{ 0x0032, 23561 }, +{ 0x0132, 24585 }, +{ 0x00b2, 25609 }, +{ 0x0006, 26630 }, +{ 0x01b2, 27657 }, +{ 0, 0 } +}; + +static struct proto MakeUpB[] = { +{ 0x03c0, 1034 }, +{ 0x0130, 2060 }, +{ 0x0930, 3084 }, +{ 0x0da0, 4108 }, +{ 0x0cc0, 5132 }, +{ 0x02c0, 6156 }, +{ 0x0ac0, 7180 }, +{ 0x06c0, 8205 }, +{ 0x16c0, 9229 }, +{ 0x0a40, 10253 }, +{ 0x1a40, 11277 }, +{ 0x0640, 12301 }, +{ 0x1640, 13325 }, +{ 0x09c0, 14349 }, +{ 0x19c0, 15373 }, +{ 0x05c0, 16397 }, +{ 0x15c0, 17421 }, +{ 0x0dc0, 18445 }, +{ 0x1dc0, 19469 }, +{ 0x0940, 20493 }, +{ 0x1940, 21517 }, +{ 0x0540, 22541 }, +{ 0x1540, 23565 }, +{ 0x0b40, 24589 }, +{ 0x1b40, 25613 }, +{ 0x04c0, 26637 }, +{ 0x14c0, 27661 }, +{ 0, 0 } +}; + +static struct proto MakeUp[] = { +{ 0x0080, 28683 }, +{ 0x0180, 29707 }, +{ 0x0580, 30731 }, +{ 0x0480, 31756 }, +{ 0x0c80, 32780 }, +{ 0x0280, 33804 }, +{ 0x0a80, 34828 }, +{ 0x0680, 35852 }, +{ 0x0e80, 36876 }, +{ 0x0380, 37900 }, +{ 0x0b80, 38924 }, +{ 0x0780, 39948 }, +{ 0x0f80, 40972 }, +{ 0, 0 } +}; + +static struct proto TermW[] = { +{ 0x00ac, 8 }, +{ 0x0038, 22 }, +{ 0x000e, 36 }, +{ 0x0001, 52 }, +{ 0x000d, 68 }, +{ 0x0003, 84 }, +{ 0x0007, 100 }, +{ 0x000f, 116 }, +{ 0x0019, 133 }, +{ 0x0005, 149 }, +{ 0x001c, 165 }, +{ 0x0002, 181 }, +{ 0x0004, 198 }, +{ 0x0030, 214 }, +{ 0x000b, 230 }, +{ 0x002b, 246 }, +{ 0x0015, 262 }, +{ 0x0035, 278 }, +{ 0x0072, 295 }, +{ 0x0018, 311 }, +{ 0x0008, 327 }, +{ 0x0074, 343 }, +{ 0x0060, 359 }, +{ 0x0010, 375 }, +{ 0x000a, 391 }, +{ 0x006a, 407 }, +{ 0x0064, 423 }, +{ 0x0012, 439 }, +{ 0x000c, 455 }, +{ 0x0040, 472 }, +{ 0x00c0, 488 }, +{ 0x0058, 504 }, +{ 0x00d8, 520 }, +{ 0x0048, 536 }, +{ 0x00c8, 552 }, +{ 0x0028, 568 }, +{ 0x00a8, 584 }, +{ 0x0068, 600 }, +{ 0x00e8, 616 }, +{ 0x0014, 632 }, +{ 0x0094, 648 }, +{ 0x0054, 664 }, +{ 0x00d4, 680 }, +{ 0x0034, 696 }, +{ 0x00b4, 712 }, +{ 0x0020, 728 }, +{ 0x00a0, 744 }, +{ 0x0050, 760 }, +{ 0x00d0, 776 }, +{ 0x004a, 792 }, +{ 0x00ca, 808 }, +{ 0x002a, 824 }, +{ 0x00aa, 840 }, +{ 0x0024, 856 }, +{ 0x00a4, 872 }, +{ 0x001a, 888 }, +{ 0x009a, 904 }, +{ 0x005a, 920 }, +{ 0x00da, 936 }, +{ 0x0052, 952 }, +{ 0x00d2, 968 }, +{ 0x004c, 984 }, +{ 0x00cc, 1000 }, +{ 0x002c, 1016 }, +{ 0, 0 } +}; + +static struct proto TermB[] = { +{ 0x03b0, 10 }, +{ 0x0002, 19 }, +{ 0x0003, 34 }, +{ 0x0001, 50 }, +{ 0x0006, 67 }, +{ 0x000c, 84 }, +{ 0x0004, 100 }, +{ 0x0018, 117 }, +{ 0x0028, 134 }, +{ 0x0008, 150 }, +{ 0x0010, 167 }, +{ 0x0050, 183 }, +{ 0x0070, 199 }, +{ 0x0020, 216 }, +{ 0x00e0, 232 }, +{ 0x0030, 249 }, +{ 0x03a0, 266 }, +{ 0x0060, 282 }, +{ 0x0040, 298 }, +{ 0x0730, 315 }, +{ 0x00b0, 331 }, +{ 0x01b0, 347 }, +{ 0x0760, 363 }, +{ 0x00a0, 379 }, +{ 0x0740, 395 }, +{ 0x00c0, 411 }, +{ 0x0530, 428 }, +{ 0x0d30, 444 }, +{ 0x0330, 460 }, +{ 0x0b30, 476 }, +{ 0x0160, 492 }, +{ 0x0960, 508 }, +{ 0x0560, 524 }, +{ 0x0d60, 540 }, +{ 0x04b0, 556 }, +{ 0x0cb0, 572 }, +{ 0x02b0, 588 }, +{ 0x0ab0, 604 }, +{ 0x06b0, 620 }, +{ 0x0eb0, 636 }, +{ 0x0360, 652 }, +{ 0x0b60, 668 }, +{ 0x05b0, 684 }, +{ 0x0db0, 700 }, +{ 0x02a0, 716 }, +{ 0x0aa0, 732 }, +{ 0x06a0, 748 }, +{ 0x0ea0, 764 }, +{ 0x0260, 780 }, +{ 0x0a60, 796 }, +{ 0x04a0, 812 }, +{ 0x0ca0, 828 }, +{ 0x0240, 844 }, +{ 0x0ec0, 860 }, +{ 0x01c0, 876 }, +{ 0x0e40, 892 }, +{ 0x0140, 908 }, +{ 0x01a0, 924 }, +{ 0x09a0, 940 }, +{ 0x0d40, 956 }, +{ 0x0340, 972 }, +{ 0x05a0, 988 }, +{ 0x0660, 1004 }, +{ 0x0e60, 1020 }, +{ 0, 0 } +}; + +static struct proto EOLH[] = { +{ 0x0000, 11 }, +{ 0, 0 } +}; + +static void +FillTable(TIFFFaxTabEnt *T, int Size, struct proto *P, int State) +{ + int limit = 1 << Size; + + while (P->val) { + int width = P->val & 15; + int param = P->val >> 4; + int incr = 1 << width; + int code; + for (code = P->code; code < limit; code += incr) { + TIFFFaxTabEnt *E = T+code; + E->State = State; + E->Width = width; + E->Param = param; + } + P++; + } +} + +static char* storage_class = ""; +static char* const_class = ""; +static int packoutput = 1; +static char* prebrace = ""; +static char* postbrace = ""; + +void +WriteTable(FILE* fd, const TIFFFaxTabEnt* T, int Size, const char* name) +{ + int i; + char* sep; + + fprintf(fd, "%s %s TIFFFaxTabEnt %s[%d] = {", + storage_class, const_class, name, Size); + if (packoutput) { + sep = "\n"; + for (i = 0; i < Size; i++) { + fprintf(fd, "%s%s%d,%d,%d%s", + sep, prebrace, T->State, T->Width, (int) T->Param, postbrace); + if (((i+1) % 12) == 0) + sep = ",\n"; + else + sep = ","; + T++; + } + } else { + sep = "\n "; + for (i = 0; i < Size; i++) { + fprintf(fd, "%s%s%3d,%3d,%4d%s", + sep, prebrace, T->State, T->Width, (int) T->Param, postbrace); + if (((i+1) % 6) == 0) + sep = ",\n "; + else + sep = ","; + T++; + } + } + fprintf(fd, "\n};\n"); +} + +/* initialise the huffman code tables */ +int +main(int argc, char* argv[]) +{ + FILE* fd; + char* outputfile; + int c; + extern int optind; + extern char* optarg; + + while ((c = getopt(argc, argv, "c:s:bp")) != -1) + switch (c) { + case 'c': + const_class = optarg; + break; + case 's': + storage_class = optarg; + break; + case 'p': + packoutput = 0; + break; + case 'b': + prebrace = "{"; + postbrace = "}"; + break; + case '?': + fprintf(stderr, + "usage: %s [-c const] [-s storage] [-p] [-b] file\n", + argv[0]); + return (-1); + } + outputfile = optind < argc ? argv[optind] : "g3states.h"; + fd = fopen(outputfile, "w"); + if (fd == NULL) { + fprintf(stderr, "%s: %s: Cannot create output file.\n", + argv[0], outputfile); + return (-2); + } + FillTable(MainTable, 7, Pass, S_Pass); + FillTable(MainTable, 7, Horiz, S_Horiz); + FillTable(MainTable, 7, V0, S_V0); + FillTable(MainTable, 7, VR, S_VR); + FillTable(MainTable, 7, VL, S_VL); + FillTable(MainTable, 7, Ext, S_Ext); + FillTable(MainTable, 7, EOLV, S_EOL); + FillTable(WhiteTable, 12, MakeUpW, S_MakeUpW); + FillTable(WhiteTable, 12, MakeUp, S_MakeUp); + FillTable(WhiteTable, 12, TermW, S_TermW); + FillTable(WhiteTable, 12, EOLH, S_EOL); + FillTable(BlackTable, 13, MakeUpB, S_MakeUpB); + FillTable(BlackTable, 13, MakeUp, S_MakeUp); + FillTable(BlackTable, 13, TermB, S_TermB); + FillTable(BlackTable, 13, EOLH, S_EOL); + + fprintf(fd, "/* WARNING, this file was automatically generated by the\n"); + fprintf(fd, " mkg3states program */\n"); + fprintf(fd, "#include \"tiff.h\"\n"); + fprintf(fd, "#include \"tif_fax3.h\"\n"); + WriteTable(fd, MainTable, 128, "TIFFFaxMainTable"); + WriteTable(fd, WhiteTable, 4096, "TIFFFaxWhiteTable"); + WriteTable(fd, BlackTable, 8192, "TIFFFaxBlackTable"); + fclose(fd); + return (0); +} diff --git a/libtiff/mkspans.c b/libtiff/mkspans.c new file mode 100755 index 0000000..f14d34a --- /dev/null +++ b/libtiff/mkspans.c @@ -0,0 +1,72 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/mkspans.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include "tiffcomp.h" + +/* + * Hack program to construct tables used to find + * runs of zeros and ones in Group 3 Fax encoding. + */ + +dumparray(name, runs) + char *name; + unsigned char runs[256]; +{ + register int i; + register char *sep; + printf("static u_char %s[256] = {\n", name); + sep = " "; + for (i = 0; i < 256; i++) { + printf("%s%d", sep, runs[i]); + if (((i + 1) % 16) == 0) { + printf(", /* 0x%02x - 0x%02x */\n", i-15, i); + sep = " "; + } else + sep = ", "; + } + printf("\n};\n"); +} + +main() +{ + unsigned char runs[2][256]; + + memset(runs[0], 0, 256*sizeof (char)); + memset(runs[1], 0, 256*sizeof (char)); + { register int run, runlen, i; + runlen = 1; + for (run = 0x80; run != 0xff; run = (run>>1)|0x80) { + for (i = run-1; i >= 0; i--) { + runs[1][run|i] = runlen; + runs[0][(~(run|i)) & 0xff] = runlen; + } + runlen++; + } + runs[1][0xff] = runs[0][0] = 8; + } + dumparray("bruns", runs[0]); + dumparray("wruns", runs[1]); +} diff --git a/libtiff/mkversion.c b/libtiff/mkversion.c new file mode 100755 index 0000000..ab19ed3 --- /dev/null +++ b/libtiff/mkversion.c @@ -0,0 +1,132 @@ +/* "$Header: /home/cvsroot/libtiff/libtiff/mkversion.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1995-1997 Sam Leffler + * Copyright (c) 1995-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * Generate a library version string for systems that + * do not have a shell (by default this is done with + * awk and echo from the Makefile). + * + * This was written by Peter Greenham for Acorn systems. + * + * Syntax: mkversion [-v version-file] [-a alpha-file] [] + */ +#include +#include +#include + +static void +usage(void) +{ + fprintf(stderr, + "usage: mkversion [-v version-file] [-a alpha-file] [outfile]\n"); + exit(-1); +} + +static FILE* +openFile(char* filename) +{ + FILE* fd = fopen(filename, "r"); + if (fd == NULL) { + fprintf(stderr, "mkversion: %s: Could not open for reading.\n", + filename); + exit(-1); + } + return (fd); +} + +int +main(int argc, char* argv[]) +{ + char* versionFile = "../VERSION"; + char* alphaFile = "../dist/tiff.alpha"; + char version[128]; + char alpha[128]; + FILE* fd; + char* cp; + + argc--, argv++; + while (argc > 0 && argv[0][0] == '-') { + if (strcmp(argv[0], "-v") == 0) { + if (argc < 1) + usage(); + argc--, argv++; + versionFile = argv[0]; + } else if (strcmp(argv[0], "-a") == 0) { + if (argc < 1) + usage(); + argc--, argv++; + alphaFile = argv[0]; + } else + usage(); + argc--, argv++; + } + fd = openFile(versionFile); + if (fgets(version, sizeof (version)-1, fd) == NULL) { + fprintf(stderr, "mkversion: No version information in %s.\n", + versionFile); + exit(-1); + } + cp = strchr(version, '\n'); + if (cp) + *cp = '\0'; + fclose(fd); + fd = openFile(alphaFile); + if (fgets(alpha, sizeof (alpha)-1, fd) == NULL) { + fprintf(stderr, "mkversion: No alpha information in %s.\n", alphaFile); + exit(-1); + } + fclose(fd); + cp = strchr(alpha, ' '); /* skip to 3rd blank-separated field */ + if (cp) + cp = strchr(cp+1, ' '); + if (cp) { /* append alpha to version */ + char* tp; + for (tp = strchr(version, '\0'), cp++; (*tp = *cp) != 0; tp++, cp++) + ; + if (tp[-1] == '\n') + tp[-1] = '\0'; + } else { + fprintf(stderr, "mkversion: Malformed alpha information in %s.\n", + alphaFile); + exit(-1); + } + if (argc > 0) { + fd = fopen(argv[0], "w"); + if (fd == NULL) { + fprintf(stderr, "mkversion: %s: Could not open for writing.\n", + argv[0]); + exit(-1); + } + } else + fd = stdout; + fprintf(fd, "#define VERSION \"LIBTIFF, Version %s\\n", version); + fprintf(fd, "Copyright (c) 1988-1996 Sam Leffler\\n"); + fprintf(fd, "Copyright (c) 1991-1996 Silicon Graphics, Inc.\"\n"); + + if (fd != stdout) + fclose(fd); + return (0); +} diff --git a/libtiff/t4.h b/libtiff/t4.h new file mode 100755 index 0000000..906d1de --- /dev/null +++ b/libtiff/t4.h @@ -0,0 +1,285 @@ +/* $Id: t4.h,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#ifndef _T4_ +#define _T4_ +/* + * CCITT T.4 1D Huffman runlength codes and + * related definitions. Given the small sizes + * of these tables it does not seem + * worthwhile to make code & length 8 bits. + */ +typedef struct tableentry { + unsigned short length; /* bit length of g3 code */ + unsigned short code; /* g3 code */ + short runlen; /* run length in bits */ +} tableentry; + +#define EOL 0x001 /* EOL code value - 0000 0000 0000 1 */ + +/* status values returned instead of a run length */ +#define G3CODE_EOL -1 /* NB: ACT_EOL - ACT_WRUNT */ +#define G3CODE_INVALID -2 /* NB: ACT_INVALID - ACT_WRUNT */ +#define G3CODE_EOF -3 /* end of input data */ +#define G3CODE_INCOMP -4 /* incomplete run code */ + +/* + * Note that these tables are ordered such that the + * index into the table is known to be either the + * run length, or (run length / 64) + a fixed offset. + * + * NB: The G3CODE_INVALID entries are only used + * during state generation (see mkg3states.c). + */ +#ifdef G3CODES +const tableentry TIFFFaxWhiteCodes[] = { + { 8, 0x35, 0 }, /* 0011 0101 */ + { 6, 0x7, 1 }, /* 0001 11 */ + { 4, 0x7, 2 }, /* 0111 */ + { 4, 0x8, 3 }, /* 1000 */ + { 4, 0xB, 4 }, /* 1011 */ + { 4, 0xC, 5 }, /* 1100 */ + { 4, 0xE, 6 }, /* 1110 */ + { 4, 0xF, 7 }, /* 1111 */ + { 5, 0x13, 8 }, /* 1001 1 */ + { 5, 0x14, 9 }, /* 1010 0 */ + { 5, 0x7, 10 }, /* 0011 1 */ + { 5, 0x8, 11 }, /* 0100 0 */ + { 6, 0x8, 12 }, /* 0010 00 */ + { 6, 0x3, 13 }, /* 0000 11 */ + { 6, 0x34, 14 }, /* 1101 00 */ + { 6, 0x35, 15 }, /* 1101 01 */ + { 6, 0x2A, 16 }, /* 1010 10 */ + { 6, 0x2B, 17 }, /* 1010 11 */ + { 7, 0x27, 18 }, /* 0100 111 */ + { 7, 0xC, 19 }, /* 0001 100 */ + { 7, 0x8, 20 }, /* 0001 000 */ + { 7, 0x17, 21 }, /* 0010 111 */ + { 7, 0x3, 22 }, /* 0000 011 */ + { 7, 0x4, 23 }, /* 0000 100 */ + { 7, 0x28, 24 }, /* 0101 000 */ + { 7, 0x2B, 25 }, /* 0101 011 */ + { 7, 0x13, 26 }, /* 0010 011 */ + { 7, 0x24, 27 }, /* 0100 100 */ + { 7, 0x18, 28 }, /* 0011 000 */ + { 8, 0x2, 29 }, /* 0000 0010 */ + { 8, 0x3, 30 }, /* 0000 0011 */ + { 8, 0x1A, 31 }, /* 0001 1010 */ + { 8, 0x1B, 32 }, /* 0001 1011 */ + { 8, 0x12, 33 }, /* 0001 0010 */ + { 8, 0x13, 34 }, /* 0001 0011 */ + { 8, 0x14, 35 }, /* 0001 0100 */ + { 8, 0x15, 36 }, /* 0001 0101 */ + { 8, 0x16, 37 }, /* 0001 0110 */ + { 8, 0x17, 38 }, /* 0001 0111 */ + { 8, 0x28, 39 }, /* 0010 1000 */ + { 8, 0x29, 40 }, /* 0010 1001 */ + { 8, 0x2A, 41 }, /* 0010 1010 */ + { 8, 0x2B, 42 }, /* 0010 1011 */ + { 8, 0x2C, 43 }, /* 0010 1100 */ + { 8, 0x2D, 44 }, /* 0010 1101 */ + { 8, 0x4, 45 }, /* 0000 0100 */ + { 8, 0x5, 46 }, /* 0000 0101 */ + { 8, 0xA, 47 }, /* 0000 1010 */ + { 8, 0xB, 48 }, /* 0000 1011 */ + { 8, 0x52, 49 }, /* 0101 0010 */ + { 8, 0x53, 50 }, /* 0101 0011 */ + { 8, 0x54, 51 }, /* 0101 0100 */ + { 8, 0x55, 52 }, /* 0101 0101 */ + { 8, 0x24, 53 }, /* 0010 0100 */ + { 8, 0x25, 54 }, /* 0010 0101 */ + { 8, 0x58, 55 }, /* 0101 1000 */ + { 8, 0x59, 56 }, /* 0101 1001 */ + { 8, 0x5A, 57 }, /* 0101 1010 */ + { 8, 0x5B, 58 }, /* 0101 1011 */ + { 8, 0x4A, 59 }, /* 0100 1010 */ + { 8, 0x4B, 60 }, /* 0100 1011 */ + { 8, 0x32, 61 }, /* 0011 0010 */ + { 8, 0x33, 62 }, /* 0011 0011 */ + { 8, 0x34, 63 }, /* 0011 0100 */ + { 5, 0x1B, 64 }, /* 1101 1 */ + { 5, 0x12, 128 }, /* 1001 0 */ + { 6, 0x17, 192 }, /* 0101 11 */ + { 7, 0x37, 256 }, /* 0110 111 */ + { 8, 0x36, 320 }, /* 0011 0110 */ + { 8, 0x37, 384 }, /* 0011 0111 */ + { 8, 0x64, 448 }, /* 0110 0100 */ + { 8, 0x65, 512 }, /* 0110 0101 */ + { 8, 0x68, 576 }, /* 0110 1000 */ + { 8, 0x67, 640 }, /* 0110 0111 */ + { 9, 0xCC, 704 }, /* 0110 0110 0 */ + { 9, 0xCD, 768 }, /* 0110 0110 1 */ + { 9, 0xD2, 832 }, /* 0110 1001 0 */ + { 9, 0xD3, 896 }, /* 0110 1001 1 */ + { 9, 0xD4, 960 }, /* 0110 1010 0 */ + { 9, 0xD5, 1024 }, /* 0110 1010 1 */ + { 9, 0xD6, 1088 }, /* 0110 1011 0 */ + { 9, 0xD7, 1152 }, /* 0110 1011 1 */ + { 9, 0xD8, 1216 }, /* 0110 1100 0 */ + { 9, 0xD9, 1280 }, /* 0110 1100 1 */ + { 9, 0xDA, 1344 }, /* 0110 1101 0 */ + { 9, 0xDB, 1408 }, /* 0110 1101 1 */ + { 9, 0x98, 1472 }, /* 0100 1100 0 */ + { 9, 0x99, 1536 }, /* 0100 1100 1 */ + { 9, 0x9A, 1600 }, /* 0100 1101 0 */ + { 6, 0x18, 1664 }, /* 0110 00 */ + { 9, 0x9B, 1728 }, /* 0100 1101 1 */ + { 11, 0x8, 1792 }, /* 0000 0001 000 */ + { 11, 0xC, 1856 }, /* 0000 0001 100 */ + { 11, 0xD, 1920 }, /* 0000 0001 101 */ + { 12, 0x12, 1984 }, /* 0000 0001 0010 */ + { 12, 0x13, 2048 }, /* 0000 0001 0011 */ + { 12, 0x14, 2112 }, /* 0000 0001 0100 */ + { 12, 0x15, 2176 }, /* 0000 0001 0101 */ + { 12, 0x16, 2240 }, /* 0000 0001 0110 */ + { 12, 0x17, 2304 }, /* 0000 0001 0111 */ + { 12, 0x1C, 2368 }, /* 0000 0001 1100 */ + { 12, 0x1D, 2432 }, /* 0000 0001 1101 */ + { 12, 0x1E, 2496 }, /* 0000 0001 1110 */ + { 12, 0x1F, 2560 }, /* 0000 0001 1111 */ + { 12, 0x1, G3CODE_EOL }, /* 0000 0000 0001 */ + { 9, 0x1, G3CODE_INVALID }, /* 0000 0000 1 */ + { 10, 0x1, G3CODE_INVALID }, /* 0000 0000 01 */ + { 11, 0x1, G3CODE_INVALID }, /* 0000 0000 001 */ + { 12, 0x0, G3CODE_INVALID }, /* 0000 0000 0000 */ +}; + +const tableentry TIFFFaxBlackCodes[] = { + { 10, 0x37, 0 }, /* 0000 1101 11 */ + { 3, 0x2, 1 }, /* 010 */ + { 2, 0x3, 2 }, /* 11 */ + { 2, 0x2, 3 }, /* 10 */ + { 3, 0x3, 4 }, /* 011 */ + { 4, 0x3, 5 }, /* 0011 */ + { 4, 0x2, 6 }, /* 0010 */ + { 5, 0x3, 7 }, /* 0001 1 */ + { 6, 0x5, 8 }, /* 0001 01 */ + { 6, 0x4, 9 }, /* 0001 00 */ + { 7, 0x4, 10 }, /* 0000 100 */ + { 7, 0x5, 11 }, /* 0000 101 */ + { 7, 0x7, 12 }, /* 0000 111 */ + { 8, 0x4, 13 }, /* 0000 0100 */ + { 8, 0x7, 14 }, /* 0000 0111 */ + { 9, 0x18, 15 }, /* 0000 1100 0 */ + { 10, 0x17, 16 }, /* 0000 0101 11 */ + { 10, 0x18, 17 }, /* 0000 0110 00 */ + { 10, 0x8, 18 }, /* 0000 0010 00 */ + { 11, 0x67, 19 }, /* 0000 1100 111 */ + { 11, 0x68, 20 }, /* 0000 1101 000 */ + { 11, 0x6C, 21 }, /* 0000 1101 100 */ + { 11, 0x37, 22 }, /* 0000 0110 111 */ + { 11, 0x28, 23 }, /* 0000 0101 000 */ + { 11, 0x17, 24 }, /* 0000 0010 111 */ + { 11, 0x18, 25 }, /* 0000 0011 000 */ + { 12, 0xCA, 26 }, /* 0000 1100 1010 */ + { 12, 0xCB, 27 }, /* 0000 1100 1011 */ + { 12, 0xCC, 28 }, /* 0000 1100 1100 */ + { 12, 0xCD, 29 }, /* 0000 1100 1101 */ + { 12, 0x68, 30 }, /* 0000 0110 1000 */ + { 12, 0x69, 31 }, /* 0000 0110 1001 */ + { 12, 0x6A, 32 }, /* 0000 0110 1010 */ + { 12, 0x6B, 33 }, /* 0000 0110 1011 */ + { 12, 0xD2, 34 }, /* 0000 1101 0010 */ + { 12, 0xD3, 35 }, /* 0000 1101 0011 */ + { 12, 0xD4, 36 }, /* 0000 1101 0100 */ + { 12, 0xD5, 37 }, /* 0000 1101 0101 */ + { 12, 0xD6, 38 }, /* 0000 1101 0110 */ + { 12, 0xD7, 39 }, /* 0000 1101 0111 */ + { 12, 0x6C, 40 }, /* 0000 0110 1100 */ + { 12, 0x6D, 41 }, /* 0000 0110 1101 */ + { 12, 0xDA, 42 }, /* 0000 1101 1010 */ + { 12, 0xDB, 43 }, /* 0000 1101 1011 */ + { 12, 0x54, 44 }, /* 0000 0101 0100 */ + { 12, 0x55, 45 }, /* 0000 0101 0101 */ + { 12, 0x56, 46 }, /* 0000 0101 0110 */ + { 12, 0x57, 47 }, /* 0000 0101 0111 */ + { 12, 0x64, 48 }, /* 0000 0110 0100 */ + { 12, 0x65, 49 }, /* 0000 0110 0101 */ + { 12, 0x52, 50 }, /* 0000 0101 0010 */ + { 12, 0x53, 51 }, /* 0000 0101 0011 */ + { 12, 0x24, 52 }, /* 0000 0010 0100 */ + { 12, 0x37, 53 }, /* 0000 0011 0111 */ + { 12, 0x38, 54 }, /* 0000 0011 1000 */ + { 12, 0x27, 55 }, /* 0000 0010 0111 */ + { 12, 0x28, 56 }, /* 0000 0010 1000 */ + { 12, 0x58, 57 }, /* 0000 0101 1000 */ + { 12, 0x59, 58 }, /* 0000 0101 1001 */ + { 12, 0x2B, 59 }, /* 0000 0010 1011 */ + { 12, 0x2C, 60 }, /* 0000 0010 1100 */ + { 12, 0x5A, 61 }, /* 0000 0101 1010 */ + { 12, 0x66, 62 }, /* 0000 0110 0110 */ + { 12, 0x67, 63 }, /* 0000 0110 0111 */ + { 10, 0xF, 64 }, /* 0000 0011 11 */ + { 12, 0xC8, 128 }, /* 0000 1100 1000 */ + { 12, 0xC9, 192 }, /* 0000 1100 1001 */ + { 12, 0x5B, 256 }, /* 0000 0101 1011 */ + { 12, 0x33, 320 }, /* 0000 0011 0011 */ + { 12, 0x34, 384 }, /* 0000 0011 0100 */ + { 12, 0x35, 448 }, /* 0000 0011 0101 */ + { 13, 0x6C, 512 }, /* 0000 0011 0110 0 */ + { 13, 0x6D, 576 }, /* 0000 0011 0110 1 */ + { 13, 0x4A, 640 }, /* 0000 0010 0101 0 */ + { 13, 0x4B, 704 }, /* 0000 0010 0101 1 */ + { 13, 0x4C, 768 }, /* 0000 0010 0110 0 */ + { 13, 0x4D, 832 }, /* 0000 0010 0110 1 */ + { 13, 0x72, 896 }, /* 0000 0011 1001 0 */ + { 13, 0x73, 960 }, /* 0000 0011 1001 1 */ + { 13, 0x74, 1024 }, /* 0000 0011 1010 0 */ + { 13, 0x75, 1088 }, /* 0000 0011 1010 1 */ + { 13, 0x76, 1152 }, /* 0000 0011 1011 0 */ + { 13, 0x77, 1216 }, /* 0000 0011 1011 1 */ + { 13, 0x52, 1280 }, /* 0000 0010 1001 0 */ + { 13, 0x53, 1344 }, /* 0000 0010 1001 1 */ + { 13, 0x54, 1408 }, /* 0000 0010 1010 0 */ + { 13, 0x55, 1472 }, /* 0000 0010 1010 1 */ + { 13, 0x5A, 1536 }, /* 0000 0010 1101 0 */ + { 13, 0x5B, 1600 }, /* 0000 0010 1101 1 */ + { 13, 0x64, 1664 }, /* 0000 0011 0010 0 */ + { 13, 0x65, 1728 }, /* 0000 0011 0010 1 */ + { 11, 0x8, 1792 }, /* 0000 0001 000 */ + { 11, 0xC, 1856 }, /* 0000 0001 100 */ + { 11, 0xD, 1920 }, /* 0000 0001 101 */ + { 12, 0x12, 1984 }, /* 0000 0001 0010 */ + { 12, 0x13, 2048 }, /* 0000 0001 0011 */ + { 12, 0x14, 2112 }, /* 0000 0001 0100 */ + { 12, 0x15, 2176 }, /* 0000 0001 0101 */ + { 12, 0x16, 2240 }, /* 0000 0001 0110 */ + { 12, 0x17, 2304 }, /* 0000 0001 0111 */ + { 12, 0x1C, 2368 }, /* 0000 0001 1100 */ + { 12, 0x1D, 2432 }, /* 0000 0001 1101 */ + { 12, 0x1E, 2496 }, /* 0000 0001 1110 */ + { 12, 0x1F, 2560 }, /* 0000 0001 1111 */ + { 12, 0x1, G3CODE_EOL }, /* 0000 0000 0001 */ + { 9, 0x1, G3CODE_INVALID }, /* 0000 0000 1 */ + { 10, 0x1, G3CODE_INVALID }, /* 0000 0000 01 */ + { 11, 0x1, G3CODE_INVALID }, /* 0000 0000 001 */ + { 12, 0x0, G3CODE_INVALID }, /* 0000 0000 0000 */ +}; +#else +extern const tableentry TIFFFaxWhiteCodes[]; +extern const tableentry TIFFFaxBlackCodes[]; +#endif +#endif /* _T4_ */ diff --git a/libtiff/tif_acorn.c b/libtiff/tif_acorn.c new file mode 100755 index 0000000..66c6e87 --- /dev/null +++ b/libtiff/tif_acorn.c @@ -0,0 +1,519 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_acorn.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library RISC OS specific Routines. + * Developed out of the Unix version. + * Peter Greenham, May 1995 + */ +#include "tiffiop.h" +#include +#include + +/* +Low-level file handling +~~~~~~~~~~~~~~~~~~~~~~~ +The functions in osfcn.h are unavailable when compiling under C, as it's a +C++ header. Therefore they have been implemented here. + +Now, why have I done it this way? + +The definitive API library for RISC OS is Jonathan Coxhead's OSLib, which +uses heavily optimised ARM assembler or even plain inline SWI calls for +maximum performance and minimum runtime size. However, I don't want to make +LIBTIFF need that to survive. Therefore I have also emulated the functions +using macros to _swi() and _swix() defined in the swis.h header, and +borrowing types from kernel.h, which is less efficient but doesn't need any +third-party libraries. + */ + +#ifdef INCLUDE_OSLIB + +#include "osfile.h" +#include "osgbpb.h" +#include "osargs.h" +#include "osfind.h" + +#else + +/* OSLIB EMULATION STARTS */ + +#include "kernel.h" +#include "swis.h" + +/* From oslib:types.h */ +typedef unsigned int bits; +typedef unsigned char byte; +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef NULL +#define NULL 0 +#endif +#ifndef SKIP +#define SKIP 0 +#endif + +/* From oslib:os.h */ +typedef _kernel_oserror os_error; +typedef byte os_f; + +/* From oslib:osfile.h */ +#undef OS_File +#define OS_File 0x8 + +/* From oslib:osgbpb.h */ +#undef OS_GBPB +#define OS_GBPB 0xC +#undef OSGBPB_Write +#define OSGBPB_Write 0x2 +#undef OSGBPB_Read +#define OSGBPB_Read 0x4 + +extern os_error *xosgbpb_write (os_f file, + byte *data, + int size, + int *unwritten); +extern int osgbpb_write (os_f file, + byte *data, + int size); + +#define xosgbpb_write(file, data, size, unwritten) \ + (os_error*) _swix(OS_GBPB, _IN(0)|_IN(1)|_IN(2)|_IN(3)|_IN(4)|_OUT(3), \ + OSGBPB_WriteAt, \ + file, \ + data, \ + size, \ + unwritten) + +#define osgbpb_write(file, data, size) \ + _swi(OS_GBPB, _IN(0)|_IN(1)|_IN(2)|_IN(3)|_RETURN(3), \ + OSGBPB_Write, \ + file, \ + data, \ + size) + +extern os_error *xosgbpb_read (os_f file, + byte *buffer, + int size, + int *unread); +extern int osgbpb_read (os_f file, + byte *buffer, + int size); + +#define xosgbpb_read(file, buffer, size, unread) \ + (os_error*) _swix(OS_GBPB, _IN(0)|_IN(1)|_IN(2)|_IN(3)|_OUT(3), \ + OSGBPB_Read, \ + file, \ + buffer, \ + size, \ + unread) + +#define osgbpb_read(file, buffer, size) \ + _swi(OS_GBPB, _IN(0)|_IN(1)|_IN(2)|_IN(3)|_RETURN(3), \ + OSGBPB_Read, \ + file, \ + buffer, \ + size) + +/* From oslib:osfind.h */ +#undef OS_Find +#define OS_Find 0xD +#undef OSFind_Openin +#define OSFind_Openin 0x40 +#undef OSFind_Openout +#define OSFind_Openout 0x80 +#undef OSFind_Openup +#define OSFind_Openup 0xC0 +#undef OSFind_Close +#define OSFind_Close 0x0 + +#define xosfind_open(reason, file_name, path, file) \ + (os_error*) _swix(OS_Find, _IN(0)|_IN(1)|_IN(2)|_OUT(0), \ + reason, file_name, path, file) + +#define osfind_open(reason, file_name, path) \ + (os_f) _swi(OS_Find, _IN(0)|_IN(1)|_IN(2)|_RETURN(0), \ + reason, file_name, path) + +extern os_error *xosfind_openin (bits flags, + char *file_name, + char *path, + os_f *file); +extern os_f osfind_openin (bits flags, + char *file_name, + char *path); + +#define xosfind_openin(flags, file_name, path, file) \ + xosfind_open(flags | OSFind_Openin, file_name, path, file) + +#define osfind_openin(flags, file_name, path) \ + osfind_open(flags | OSFind_Openin, file_name, path) + +extern os_error *xosfind_openout (bits flags, + char *file_name, + char *path, + os_f *file); +extern os_f osfind_openout (bits flags, + char *file_name, + char *path); + +#define xosfind_openout(flags, file_name, path, file) \ + xosfind_open(flags | OSFind_Openout, file_name, path, file) + +#define osfind_openout(flags, file_name, path) \ + osfind_open(flags | OSFind_Openout, file_name, path) + +extern os_error *xosfind_openup (bits flags, + char *file_name, + char *path, + os_f *file); +extern os_f osfind_openup (bits flags, + char *file_name, + char *path); + +#define xosfind_openup(flags, file_name, path, file) \ + xosfind_open(flags | OSFind_Openup, file_name, path, file) + +#define osfind_openup(flags, file_name, path) \ + osfind_open(flags | OSFind_Openup, file_name, path) + +extern os_error *xosfind_close (os_f file); +extern void osfind_close (os_f file); + +#define xosfind_close(file) \ + (os_error*) _swix(OS_Find, _IN(0)|_IN(1), \ + OSFind_Close, \ + file) + +#define osfind_close(file) \ + (void) _swi(OS_Find, _IN(0)|_IN(1), \ + OSFind_Close, \ + file) + +/* From oslib:osargs.h */ +#undef OS_Args +#define OS_Args 0x9 +#undef OSArgs_ReadPtr +#define OSArgs_ReadPtr 0x0 +#undef OSArgs_SetPtr +#define OSArgs_SetPtr 0x1 +#undef OSArgs_ReadExt +#define OSArgs_ReadExt 0x2 + +extern os_error *xosargs_read_ptr (os_f file, + int *ptr); +extern int osargs_read_ptr (os_f file); + +#define xosargs_read_ptr(file, ptr) \ + (os_error*) _swix(OS_Args, _IN(0)|_IN(1)|_OUT(2), \ + OSArgs_ReadPtr, \ + file, \ + ptr) + +#define osargs_read_ptr(file) \ + _swi(OS_Args, _IN(0)|_IN(1)|_RETURN(2), \ + OSArgs_ReadPtr, \ + file) + +extern os_error *xosargs_set_ptr (os_f file, + int ptr); +extern void osargs_set_ptr (os_f file, + int ptr); + +#define xosargs_set_ptr(file, ptr) \ + (os_error*) _swix(OS_Args, _IN(0)|_IN(1)|_IN(2), \ + OSArgs_SetPtr, \ + file, \ + ptr) + +#define osargs_set_ptr(file, ptr) \ + (void) _swi(OS_Args, _IN(0)|_IN(1)|_IN(2), \ + OSArgs_SetPtr, \ + file, \ + ptr) + +extern os_error *xosargs_read_ext (os_f file, + int *ext); +extern int osargs_read_ext (os_f file); + +#define xosargs_read_ext(file, ext) \ + (os_error*) _swix(OS_Args, _IN(0)|_IN(1)|_OUT(2), \ + OSArgs_ReadExt, \ + file, \ + ext) + +#define osargs_read_ext(file) \ + _swi(OS_Args, _IN(0)|_IN(1)|_RETURN(2), \ + OSArgs_ReadExt, \ + file) + +/* OSLIB EMULATION ENDS */ + +#endif + +#ifndef __osfcn_h +/* Will be set or not during tiffcomp.h */ +/* You get this to compile under C++? Please say how! */ + +extern int open(const char* name, int flags, int mode) +{ + /* From what I can tell, should return <0 for failure */ + os_error* e = (os_error*) 1; /* Cheeky way to use a pointer eh? :-) */ + os_f file = (os_f) -1; + + flags = flags; + + switch(mode) + { + case O_RDONLY: + { + e = xosfind_openin(SKIP, name, SKIP, &file); + break; + } + case O_WRONLY: + case O_RDWR|O_CREAT: + case O_RDWR|O_CREAT|O_TRUNC: + { + e = xosfind_openout(SKIP, name, SKIP, &file); + break; + } + case O_RDWR: + { + e = xosfind_openup(SKIP, name, SKIP, &file); + break; + } + } + if (e) + { + file = (os_f) -1; + } + return (file); +} + +extern int close(int fd) +{ + return ((int) xosfind_close((os_f) fd)); +} + +extern int write(int fd, const char *buf, int nbytes) +{ + /* Returns number of bytes written */ + return (nbytes - osgbpb_write((os_f) fd, (const byte*) buf, nbytes)); +} + +extern int read(int fd, char *buf, int nbytes) +{ + /* Returns number of bytes read */ + return (nbytes - osgbpb_read((os_f) fd, (byte*) buf, nbytes)); +} + +extern off_t lseek(int fd, off_t offset, int whence) +{ + int absolute = 0; + + switch (whence) + { + case SEEK_SET: + { + absolute = (int) offset; + break; + } + case SEEK_CUR: + { + absolute = osargs_read_ptr((os_f) fd) + (int) offset; + break; + } + case SEEK_END: + { + absolute = osargs_read_ext((os_f) fd) + (int) offset; + break; + } + } + + osargs_set_ptr((os_f) fd, absolute); + + return ((off_t) osargs_read_ptr((os_f) fd)); +} +#endif + +static tsize_t +_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return ((tsize_t) read((int) fd, buf, (size_t) size)); +} + +static tsize_t +_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return ((tsize_t) write((int) fd, buf, (size_t) size)); +} + +static toff_t +_tiffSeekProc(thandle_t fd, toff_t off, int whence) +{ + return ((toff_t) lseek((int) fd, (off_t) off, whence)); +} + +static int +_tiffCloseProc(thandle_t fd) +{ + return (close((int) fd)); +} + +static toff_t +_tiffSizeProc(thandle_t fd) +{ + return (lseek((int) fd, SEEK_END, SEEK_SET)); +} + +#ifdef HAVE_MMAP +#error "I didn't know Acorn had that!" +#endif + +/* !HAVE_MMAP */ +static int +_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + (void) fd; (void) pbase; (void) psize; + return (0); +} + +static void +_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ + (void) fd; (void) base; (void) size; +} + +/* + * Open a TIFF file descriptor for read/writing. + */ +TIFF* +TIFFFdOpen(int fd, const char* name, const char* mode) +{ + TIFF* tif; + + tif = TIFFClientOpen(name, mode, + (thandle_t) fd, + _tiffReadProc, _tiffWriteProc, + _tiffSeekProc, _tiffCloseProc, _tiffSizeProc, + _tiffMapProc, _tiffUnmapProc); + if (tif) + { + tif->tif_fd = fd; + } + return (tif); +} + +/* + * Open a TIFF file for read/writing. + */ +TIFF* +TIFFOpen(const char* name, const char* mode) +{ + static const char module[] = "TIFFOpen"; + int m, fd; + + m = _TIFFgetMode(mode, module); + + if (m == -1) + { + return ((TIFF*) 0); + } + + fd = open(name, 0, m); + + if (fd < 0) + { + TIFFError(module, "%s: Cannot open", name); + return ((TIFF *)0); + } + return (TIFFFdOpen(fd, name, mode)); +} + +void* +_TIFFmalloc(tsize_t s) +{ + return (malloc((size_t) s)); +} + +void +_TIFFfree(tdata_t p) +{ + free(p); +} + +void* +_TIFFrealloc(tdata_t p, tsize_t s) +{ + return (realloc(p, (size_t) s)); +} + +void +_TIFFmemset(tdata_t p, int v, tsize_t c) +{ + memset(p, v, (size_t) c); +} + +void +_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c) +{ + memcpy(d, s, (size_t) c); +} + +int +_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c) +{ + return (memcmp(p1, p2, (size_t) c)); +} + +static void +acornWarningHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + { + fprintf(stderr, "%s: ", module); + } + fprintf(stderr, "Warning, "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFwarningHandler = acornWarningHandler; + +static void +acornErrorHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + { + fprintf(stderr, "%s: ", module); + } + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFerrorHandler = acornErrorHandler; diff --git a/libtiff/tif_apple.c b/libtiff/tif_apple.c new file mode 100755 index 0000000..73a19a9 --- /dev/null +++ b/libtiff/tif_apple.c @@ -0,0 +1,256 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_apple.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library Macintosh-specific routines. + * + * These routines use only Toolbox and high-level File Manager traps. + * They make no calls to the THINK C "unix" compatibility library. Also, + * malloc is not used directly but it is still referenced internally by + * the ANSI library in rare cases. Heap fragmentation by the malloc ring + * buffer is therefore minimized. + * + * O_RDONLY and O_RDWR are treated identically here. The tif_mode flag is + * checked in TIFFWriteCheck(). + * + * Create below fills in a blank creator signature and sets the file type + * to 'TIFF'. It is much better for the application to do this by Create'ing + * the file first and TIFFOpen'ing it later. + */ + +#include "tiffiop.h" +#include +#include +#include + +#if defined(__PPCC__) || defined(__SC__) || defined(__MRC__) || defined(applec) +#define CtoPstr c2pstr +#endif + +static tsize_t +_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return (FSRead((short) fd, (long*) &size, (char*) buf) == noErr ? + size : (tsize_t) -1); +} + +static tsize_t +_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return (FSWrite((short) fd, (long*) &size, (char*) buf) == noErr ? + size : (tsize_t) -1); +} + +static toff_t +_tiffSeekProc(thandle_t fd, toff_t off, int whence) +{ + long fpos, size; + + if (GetEOF((short) fd, &size) != noErr) + return EOF; + (void) GetFPos((short) fd, &fpos); + + switch (whence) { + case SEEK_CUR: + if (off + fpos > size) + SetEOF((short) fd, off + fpos); + if (SetFPos((short) fd, fsFromMark, off) != noErr) + return EOF; + break; + case SEEK_END: + if (off > 0) + SetEOF((short) fd, off + size); + if (SetFPos((short) fd, fsFromStart, off + size) != noErr) + return EOF; + break; + case SEEK_SET: + if (off > size) + SetEOF((short) fd, off); + if (SetFPos((short) fd, fsFromStart, off) != noErr) + return EOF; + break; + } + + return (toff_t)(GetFPos((short) fd, &fpos) == noErr ? fpos : EOF); +} + +static int +_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + return (0); +} + +static void +_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ +} + +static int +_tiffCloseProc(thandle_t fd) +{ + return (FSClose((short) fd)); +} + +static toff_t +_tiffSizeProc(thandle_t fd) +{ + long size; + + if (GetEOF((short) fd, &size) != noErr) { + TIFFError("_tiffSizeProc", "%s: Cannot get file size"); + return (-1L); + } + return ((toff_t) size); +} + +/* + * Open a TIFF file descriptor for read/writing. + */ +TIFF* +TIFFFdOpen(int fd, const char* name, const char* mode) +{ + TIFF* tif; + + tif = TIFFClientOpen(name, mode, (thandle_t) fd, + _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc, + _tiffSizeProc, _tiffMapProc, _tiffUnmapProc); + if (tif) + tif->tif_fd = fd; + return (tif); +} + +/* + * Open a TIFF file for read/writing. + */ +TIFF* +TIFFOpen(const char* name, const char* mode) +{ + static const char module[] = "TIFFOpen"; + Str255 pname; + FInfo finfo; + short fref; + OSErr err; + + strcpy((char*) pname, name); + CtoPstr((char*) pname); + + switch (_TIFFgetMode(mode, module)) { + default: + return ((TIFF*) 0); + case O_RDWR | O_CREAT | O_TRUNC: + if (GetFInfo(pname, 0, &finfo) == noErr) + FSDelete(pname, 0); + /* fall through */ + case O_RDWR | O_CREAT: + if ((err = GetFInfo(pname, 0, &finfo)) == fnfErr) { + if (Create(pname, 0, ' ', 'TIFF') != noErr) + goto badCreate; + if (FSOpen(pname, 0, &fref) != noErr) + goto badOpen; + } else if (err == noErr) { + if (FSOpen(pname, 0, &fref) != noErr) + goto badOpen; + } else + goto badOpen; + break; + case O_RDONLY: + case O_RDWR: + if (FSOpen(pname, 0, &fref) != noErr) + goto badOpen; + break; + } + return (TIFFFdOpen((int) fref, name, mode)); +badCreate: + TIFFError(module, "%s: Cannot create", name); + return ((TIFF*) 0); +badOpen: + TIFFError(module, "%s: Cannot open", name); + return ((TIFF*) 0); +} + +void +_TIFFmemset(tdata_t p, int v, tsize_t c) +{ + memset(p, v, (size_t) c); +} + +void +_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c) +{ + memcpy(d, s, (size_t) c); +} + +int +_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c) +{ + return (memcmp(p1, p2, (size_t) c)); +} + +tdata_t +_TIFFmalloc(tsize_t s) +{ + return (NewPtr((size_t) s)); +} + +void +_TIFFfree(tdata_t p) +{ + DisposePtr(p); +} + +tdata_t +_TIFFrealloc(tdata_t p, tsize_t s) +{ + Ptr n = p; + + SetPtrSize(p, (size_t) s); + if (MemError() && (n = NewPtr((size_t) s)) != NULL) { + BlockMove(p, n, GetPtrSize(p)); + DisposePtr(p); + } + return ((tdata_t) n); +} + +static void +appleWarningHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + fprintf(stderr, "Warning, "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFwarningHandler = appleWarningHandler; + +static void +appleErrorHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFerrorHandler = appleErrorHandler; diff --git a/libtiff/tif_atari.c b/libtiff/tif_atari.c new file mode 100755 index 0000000..25fd3b1 --- /dev/null +++ b/libtiff/tif_atari.c @@ -0,0 +1,243 @@ +/* "$Header: /home/cvsroot/libtiff/libtiff/tif_atari.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $" */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library ATARI-specific Routines. + */ +#include "tiffiop.h" +#if defined(__TURBOC__) +#include +#include +#else +#include +#include +#endif + +#ifndef O_ACCMODE +#define O_ACCMODE 3 +#endif + +#include + +#define AEFILNF -33 + +static tsize_t +_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + long r; + + r = Fread((int) fd, size, buf); + if (r < 0) { + errno = (int)-r; + r = -1; + } + return r; +} + +static tsize_t +_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + long r; + + r = Fwrite((int) fd, size, buf); + if (r < 0) { + errno = (int)-r; + r = -1; + } + return r; +} + +static toff_t +_tiffSeekProc(thandle_t fd, off_t off, int whence) +{ + char buf[256]; + long current_off, expected_off, new_off; + + if (whence == SEEK_END || off <= 0) + return Fseek(off, (int) fd, whence); + current_off = Fseek(0, (int) fd, SEEK_CUR); /* find out where we are */ + if (whence == SEEK_SET) + expected_off = off; + else + expected_off = off + current_off; + new_off = Fseek(off, (int) fd, whence); + if (new_off == expected_off) + return new_off; + /* otherwise extend file -- zero filling the hole */ + if (new_off < 0) /* error? */ + new_off = Fseek(0, (int) fd, SEEK_END); /* go to eof */ + _TIFFmemset(buf, 0, sizeof(buf)); + while (expected_off > new_off) { + off = expected_off - new_off; + if (off > sizeof(buf)) + off = sizeof(buf); + if ((current_off = Fwrite((int) fd, off, buf)) != off) + return (current_off > 0) ? + new_off + current_off : new_off; + new_off += off; + } + return new_off; +} + +static int +_tiffCloseProc(thandle_t fd) +{ + long r; + + r = Fclose((int) fd); + if (r < 0) { + errno = (int)-r; + r = -1; + } + return (int)r; +} + +static toff_t +_tiffSizeProc(thandle_t fd) +{ + long pos, eof; + + pos = Fseek(0, (int) fd, SEEK_CUR); + eof = Fseek(0, (int) fd, SEEK_END); + Fseek(pos, (int) fd, SEEK_SET); + return eof; +} + +static int +_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + return (0); +} + +static void +_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ +} + +/* +* Open a TIFF file descriptor for read/writing. +*/ +TIFF* +TIFFFdOpen(int fd, const char* name, const char* mode) +{ + TIFF* tif; + + tif = TIFFClientOpen(name, mode, + (thandle_t) fd, + _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc, + _tiffSizeProc, _tiffMapProc, _tiffUnmapProc); + if (tif) + tif->tif_fd = fd; + return (tif); +} + +/* +* Open a TIFF file for read/writing. +*/ +TIFF* +TIFFOpen(const char* name, const char* mode) +{ + static const char module[] = "TIFFOpen"; + int m; + long fd; + + m = _TIFFgetMode(mode, module); + if (m == -1) + return ((TIFF*)0); + if (m & O_TRUNC) { + fd = Fcreate(name, 0); + } else { + fd = Fopen(name, m & O_ACCMODE); + if (fd == AEFILNF && m & O_CREAT) + fd = Fcreate(name, 0); + } + if (fd < 0) + errno = (int)fd; + if (fd < 0) { + TIFFError(module, "%s: Cannot open", name); + return ((TIFF*)0); + } + return (TIFFFdOpen(fd, name, mode)); +} + +#include + +tdata_t +_TIFFmalloc(tsize_t s) +{ + return (malloc((size_t) s)); +} + +void +_TIFFfree(tdata_t p) +{ + free(p); +} + +tdata_t +_TIFFrealloc(tdata_t p, tsize_t s) +{ + return (realloc(p, (size_t) s)); +} + +void +_TIFFmemset(tdata_t p, int v, size_t c) +{ + memset(p, v, (size_t) c); +} + +void +_TIFFmemcpy(tdata_t d, const tdata_t s, size_t c) +{ + memcpy(d, s, (size_t) c); +} + +int +_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c) +{ + return (memcmp(p1, p2, (size_t) c)); +} + +static void +atariWarningHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + fprintf(stderr, "Warning, "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFwarningHandler = atariWarningHandler; + +static void +atariErrorHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFerrorHandler = atariErrorHandler; diff --git a/libtiff/tif_aux.c b/libtiff/tif_aux.c new file mode 100755 index 0000000..811aebb --- /dev/null +++ b/libtiff/tif_aux.c @@ -0,0 +1,206 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_aux.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * Auxiliary Support Routines. + */ +#include "tiffiop.h" + +#ifdef COLORIMETRY_SUPPORT +#include + +static void +TIFFDefaultTransferFunction(TIFFDirectory* td) +{ + uint16 **tf = td->td_transferfunction; + long i, n = 1<td_bitspersample; + + tf[0] = (uint16 *)_TIFFmalloc(n * sizeof (uint16)); + tf[0][0] = 0; + for (i = 1; i < n; i++) { + double t = (double)i/((double) n-1.); + tf[0][i] = (uint16)floor(65535.*pow(t, 2.2) + .5); + } + if (td->td_samplesperpixel - td->td_extrasamples > 1) { + tf[1] = (uint16 *)_TIFFmalloc(n * sizeof (uint16)); + _TIFFmemcpy(tf[1], tf[0], n * sizeof (uint16)); + tf[2] = (uint16 *)_TIFFmalloc(n * sizeof (uint16)); + _TIFFmemcpy(tf[2], tf[0], n * sizeof (uint16)); + } +} + +static void +TIFFDefaultRefBlackWhite(TIFFDirectory* td) +{ + int i; + + td->td_refblackwhite = (float *)_TIFFmalloc(6*sizeof (float)); + for (i = 0; i < 3; i++) { + td->td_refblackwhite[2*i+0] = 0; + td->td_refblackwhite[2*i+1] = (float)((1L<td_bitspersample)-1L); + } +} +#endif + +/* + * Like TIFFGetField, but return any default + * value if the tag is not present in the directory. + * + * NB: We use the value in the directory, rather than + * explcit values so that defaults exist only one + * place in the library -- in TIFFDefaultDirectory. + */ +int +TIFFVGetFieldDefaulted(TIFF* tif, ttag_t tag, va_list ap) +{ + TIFFDirectory *td = &tif->tif_dir; + + if (TIFFVGetField(tif, tag, ap)) + return (1); + switch (tag) { + case TIFFTAG_SUBFILETYPE: + *va_arg(ap, uint32 *) = td->td_subfiletype; + return (1); + case TIFFTAG_BITSPERSAMPLE: + *va_arg(ap, uint16 *) = td->td_bitspersample; + return (1); + case TIFFTAG_THRESHHOLDING: + *va_arg(ap, uint16 *) = td->td_threshholding; + return (1); + case TIFFTAG_FILLORDER: + *va_arg(ap, uint16 *) = td->td_fillorder; + return (1); + case TIFFTAG_ORIENTATION: + *va_arg(ap, uint16 *) = td->td_orientation; + return (1); + case TIFFTAG_SAMPLESPERPIXEL: + *va_arg(ap, uint16 *) = td->td_samplesperpixel; + return (1); + case TIFFTAG_ROWSPERSTRIP: + *va_arg(ap, uint32 *) = td->td_rowsperstrip; + return (1); + case TIFFTAG_MINSAMPLEVALUE: + *va_arg(ap, uint16 *) = td->td_minsamplevalue; + return (1); + case TIFFTAG_MAXSAMPLEVALUE: + *va_arg(ap, uint16 *) = td->td_maxsamplevalue; + return (1); + case TIFFTAG_PLANARCONFIG: + *va_arg(ap, uint16 *) = td->td_planarconfig; + return (1); + case TIFFTAG_RESOLUTIONUNIT: + *va_arg(ap, uint16 *) = td->td_resolutionunit; + return (1); +#ifdef CMYK_SUPPORT + case TIFFTAG_DOTRANGE: + *va_arg(ap, uint16 *) = 0; + *va_arg(ap, uint16 *) = (1<td_bitspersample)-1; + return (1); + case TIFFTAG_INKSET: + *va_arg(ap, uint16 *) = td->td_inkset; + return (1); + case TIFFTAG_NUMBEROFINKS: + *va_arg(ap, uint16 *) = td->td_ninks; + return (1); +#endif + case TIFFTAG_EXTRASAMPLES: + *va_arg(ap, uint16 *) = td->td_extrasamples; + *va_arg(ap, uint16 **) = td->td_sampleinfo; + return (1); + case TIFFTAG_MATTEING: + *va_arg(ap, uint16 *) = + (td->td_extrasamples == 1 && + td->td_sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA); + return (1); + case TIFFTAG_TILEDEPTH: + *va_arg(ap, uint32 *) = td->td_tiledepth; + return (1); + case TIFFTAG_DATATYPE: + *va_arg(ap, uint16 *) = td->td_sampleformat-1; + return (1); + case TIFFTAG_SAMPLEFORMAT: + *va_arg(ap, uint16 *) = td->td_sampleformat; + return(1); + case TIFFTAG_IMAGEDEPTH: + *va_arg(ap, uint32 *) = td->td_imagedepth; + return (1); +#ifdef YCBCR_SUPPORT + case TIFFTAG_YCBCRCOEFFICIENTS: + if (!td->td_ycbcrcoeffs) { + td->td_ycbcrcoeffs = (float *) + _TIFFmalloc(3*sizeof (float)); + /* defaults are from CCIR Recommendation 601-1 */ + td->td_ycbcrcoeffs[0] = 0.299f; + td->td_ycbcrcoeffs[1] = 0.587f; + td->td_ycbcrcoeffs[2] = 0.114f; + } + *va_arg(ap, float **) = td->td_ycbcrcoeffs; + return (1); + case TIFFTAG_YCBCRSUBSAMPLING: + *va_arg(ap, uint16 *) = td->td_ycbcrsubsampling[0]; + *va_arg(ap, uint16 *) = td->td_ycbcrsubsampling[1]; + return (1); + case TIFFTAG_YCBCRPOSITIONING: + *va_arg(ap, uint16 *) = td->td_ycbcrpositioning; + return (1); +#endif +#ifdef COLORIMETRY_SUPPORT + case TIFFTAG_TRANSFERFUNCTION: + if (!td->td_transferfunction[0]) + TIFFDefaultTransferFunction(td); + *va_arg(ap, uint16 **) = td->td_transferfunction[0]; + if (td->td_samplesperpixel - td->td_extrasamples > 1) { + *va_arg(ap, uint16 **) = td->td_transferfunction[1]; + *va_arg(ap, uint16 **) = td->td_transferfunction[2]; + } + return (1); + case TIFFTAG_REFERENCEBLACKWHITE: + if (!td->td_refblackwhite) + TIFFDefaultRefBlackWhite(td); + *va_arg(ap, float **) = td->td_refblackwhite; + return (1); +#endif + } + return (0); +} + +/* + * Like TIFFGetField, but return any default + * value if the tag is not present in the directory. + */ +int +TIFFGetFieldDefaulted(TIFF* tif, ttag_t tag, ...) +{ + int ok; + va_list ap; + + va_start(ap, tag); + ok = TIFFVGetFieldDefaulted(tif, tag, ap); + va_end(ap); + return (ok); +} diff --git a/libtiff/tif_close.c b/libtiff/tif_close.c new file mode 100755 index 0000000..e60f16a --- /dev/null +++ b/libtiff/tif_close.c @@ -0,0 +1,50 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_close.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + */ +#include "tiffiop.h" + +void +TIFFClose(TIFF* tif) +{ + if (tif->tif_mode != O_RDONLY) + /* + * Flush buffered data and directory (if dirty). + */ + TIFFFlush(tif); + (*tif->tif_cleanup)(tif); + TIFFFreeDirectory(tif); + if (tif->tif_rawdata && (tif->tif_flags&TIFF_MYBUFFER)) + _TIFFfree(tif->tif_rawdata); + if (isMapped(tif)) + TIFFUnmapFileContents(tif, tif->tif_base, tif->tif_size); + (void) TIFFCloseFile(tif); + if (tif->tif_fieldinfo) + _TIFFfree(tif->tif_fieldinfo); + _TIFFfree(tif); +} diff --git a/libtiff/tif_codec.c b/libtiff/tif_codec.c new file mode 100755 index 0000000..6ea84f5 --- /dev/null +++ b/libtiff/tif_codec.c @@ -0,0 +1,117 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_codec.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library + * + * Builtin Compression Scheme Configuration Support. + */ +#include "tiffiop.h" + +static int NotConfigured(TIFF*, int); + +#ifndef LZW_SUPPORT +#define TIFFInitLZW NotConfigured +#endif +#ifndef PACKBITS_SUPPORT +#define TIFFInitPackbits NotConfigured +#endif +#ifndef THUNDER_SUPPORT +#define TIFFInitThunderScan NotConfigured +#endif +#ifndef NEXT_SUPPORT +#define TIFFInitNeXT NotConfigured +#endif +#ifndef JPEG_SUPPORT +#define TIFFInitJPEG NotConfigured +#endif +#ifndef OJPEG_SUPPORT +#define TIFFInitOJPEG NotConfigured +#endif +#ifndef CCITT_SUPPORT +#define TIFFInitCCITTRLE NotConfigured +#define TIFFInitCCITTRLEW NotConfigured +#define TIFFInitCCITTFax3 NotConfigured +#define TIFFInitCCITTFax4 NotConfigured +#endif +#ifndef JBIG_SUPPORT +#define TIFFInitJBIG NotConfigured +#endif +#ifndef ZIP_SUPPORT +#define TIFFInitZIP NotConfigured +#endif +#ifndef PIXARLOG_SUPPORT +#define TIFFInitPixarLog NotConfigured +#endif +#ifndef LOGLUV_SUPPORT +#define TIFFInitSGILog NotConfigured +#endif + +/* + * Compression schemes statically built into the library. + */ +#ifdef VMS +const TIFFCodec _TIFFBuiltinCODECS[] = { +#else +TIFFCodec _TIFFBuiltinCODECS[] = { +#endif + { "None", COMPRESSION_NONE, TIFFInitDumpMode }, + { "LZW", COMPRESSION_LZW, TIFFInitLZW }, + { "PackBits", COMPRESSION_PACKBITS, TIFFInitPackBits }, + { "ThunderScan", COMPRESSION_THUNDERSCAN,TIFFInitThunderScan }, + { "NeXT", COMPRESSION_NEXT, TIFFInitNeXT }, + { "JPEG", COMPRESSION_JPEG, TIFFInitJPEG }, + { "Old-style JPEG", COMPRESSION_OJPEG, TIFFInitOJPEG }, + { "CCITT RLE", COMPRESSION_CCITTRLE, TIFFInitCCITTRLE }, + { "CCITT RLE/W", COMPRESSION_CCITTRLEW, TIFFInitCCITTRLEW }, + { "CCITT Group 3", COMPRESSION_CCITTFAX3, TIFFInitCCITTFax3 }, + { "CCITT Group 4", COMPRESSION_CCITTFAX4, TIFFInitCCITTFax4 }, + { "ISO JBIG", COMPRESSION_JBIG, TIFFInitJBIG }, + { "Deflate", COMPRESSION_DEFLATE, TIFFInitZIP }, + { "AdobeDeflate", COMPRESSION_ADOBE_DEFLATE , TIFFInitZIP }, + { "PixarLog", COMPRESSION_PIXARLOG, TIFFInitPixarLog }, + { "SGILog", COMPRESSION_SGILOG, TIFFInitSGILog }, + { "SGILog24", COMPRESSION_SGILOG24, TIFFInitSGILog }, + { NULL } +}; + +static int +_notConfigured(TIFF* tif) +{ + const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression); + + TIFFError(tif->tif_name, + "%s compression support is not configured", c->name); + return (0); +} + +static int +NotConfigured(TIFF* tif, int scheme) +{ + tif->tif_setupdecode = _notConfigured; + tif->tif_setupencode = _notConfigured; + return (1); +} diff --git a/libtiff/tif_compress.c b/libtiff/tif_compress.c new file mode 100755 index 0000000..57a2b52 --- /dev/null +++ b/libtiff/tif_compress.c @@ -0,0 +1,231 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_compress.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library + * + * Compression Scheme Configuration Support. + */ +#include "tiffiop.h" + +static int +TIFFNoEncode(TIFF* tif, char* method) +{ + const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression); + + if (c) { + if (! strncmp(c->name, "LZW", 3) ){ + TIFFError(tif->tif_name, + "%s %s encoding is no longer implemented due to Unisys patent enforcement", + c->name, method); + } else { + TIFFError(tif->tif_name, "%s %s encoding is not implemented", + c->name, method); + } + } + else { + TIFFError(tif->tif_name, + "Compression scheme %u %s encoding is not implemented", + tif->tif_dir.td_compression, method); + } + return (-1); +} + +int +_TIFFNoRowEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +{ + (void) pp; (void) cc; (void) s; + return (TIFFNoEncode(tif, "scanline")); +} + +int +_TIFFNoStripEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +{ + (void) pp; (void) cc; (void) s; + return (TIFFNoEncode(tif, "strip")); +} + +int +_TIFFNoTileEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +{ + (void) pp; (void) cc; (void) s; + return (TIFFNoEncode(tif, "tile")); +} + +static int +TIFFNoDecode(TIFF* tif, char* method) +{ + const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression); + + if (c) + TIFFError(tif->tif_name, "%s %s decoding is not implemented", + c->name, method); + else + TIFFError(tif->tif_name, + "Compression scheme %u %s decoding is not implemented", + tif->tif_dir.td_compression, method); + return (-1); +} + +int +_TIFFNoRowDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +{ + (void) pp; (void) cc; (void) s; + return (TIFFNoDecode(tif, "scanline")); +} + +int +_TIFFNoStripDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +{ + (void) pp; (void) cc; (void) s; + return (TIFFNoDecode(tif, "strip")); +} + +int +_TIFFNoTileDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +{ + (void) pp; (void) cc; (void) s; + return (TIFFNoDecode(tif, "tile")); +} + +int +_TIFFNoSeek(TIFF* tif, uint32 off) +{ + (void) off; + TIFFError(tif->tif_name, + "Compression algorithm does not support random access"); + return (0); +} + +int +_TIFFNoPreCode(TIFF* tif, tsample_t s) +{ + (void) tif; (void) s; + return (1); +} + +static int _TIFFtrue(TIFF* tif) { (void) tif; return (1); } +static void _TIFFvoid(TIFF* tif) { (void) tif; } + +void +_TIFFSetDefaultCompressionState(TIFF* tif) +{ + tif->tif_setupdecode = _TIFFtrue; + tif->tif_predecode = _TIFFNoPreCode; + tif->tif_decoderow = _TIFFNoRowDecode; + tif->tif_decodestrip = _TIFFNoStripDecode; + tif->tif_decodetile = _TIFFNoTileDecode; + tif->tif_setupencode = _TIFFtrue; + tif->tif_preencode = _TIFFNoPreCode; + tif->tif_postencode = _TIFFtrue; + tif->tif_encoderow = _TIFFNoRowEncode; + tif->tif_encodestrip = _TIFFNoStripEncode; + tif->tif_encodetile = _TIFFNoTileEncode; + tif->tif_close = _TIFFvoid; + tif->tif_seek = _TIFFNoSeek; + tif->tif_cleanup = _TIFFvoid; + tif->tif_defstripsize = _TIFFDefaultStripSize; + tif->tif_deftilesize = _TIFFDefaultTileSize; + tif->tif_flags &= ~TIFF_NOBITREV; +} + +int +TIFFSetCompressionScheme(TIFF* tif, int scheme) +{ + const TIFFCodec *c = TIFFFindCODEC((uint16) scheme); + + _TIFFSetDefaultCompressionState(tif); + /* + * Don't treat an unknown compression scheme as an error. + * This permits applications to open files with data that + * the library does not have builtin support for, but which + * may still be meaningful. + */ + return (c ? (*c->init)(tif, scheme) : 1); +} + +/* + * Other compression schemes may be registered. Registered + * schemes can also override the builtin versions provided + * by this library. + */ +typedef struct _codec { + struct _codec* next; + TIFFCodec* info; +} codec_t; +static codec_t* registeredCODECS = NULL; + +const TIFFCodec* +TIFFFindCODEC(uint16 scheme) +{ + const TIFFCodec* c; + codec_t* cd; + + for (cd = registeredCODECS; cd; cd = cd->next) + if (cd->info->scheme == scheme) + return ((const TIFFCodec*) cd->info); + for (c = _TIFFBuiltinCODECS; c->name; c++) + if (c->scheme == scheme) + return (c); + return ((const TIFFCodec*) 0); +} + +TIFFCodec* +TIFFRegisterCODEC(uint16 scheme, const char* name, TIFFInitMethod init) +{ + codec_t* cd = (codec_t*) + _TIFFmalloc(sizeof (codec_t) + sizeof (TIFFCodec) + strlen(name)+1); + + if (cd != NULL) { + cd->info = (TIFFCodec*) ((tidata_t) cd + sizeof (codec_t)); + cd->info->name = (char*) + ((tidata_t) cd->info + sizeof (TIFFCodec)); + strcpy(cd->info->name, name); + cd->info->scheme = scheme; + cd->info->init = init; + cd->next = registeredCODECS; + registeredCODECS = cd; + } else + TIFFError("TIFFRegisterCODEC", + "No space to register compression scheme %s", name); + return (cd->info); +} + +void +TIFFUnRegisterCODEC(TIFFCodec* c) +{ + codec_t* cd; + codec_t** pcd; + + for (pcd = ®isteredCODECS; (cd = *pcd); pcd = &cd->next) + if (cd->info == c) { + *pcd = cd->next; + _TIFFfree(cd); + return; + } + TIFFError("TIFFUnRegisterCODEC", + "Cannot remove compression scheme %s; not registered", c->name); +} diff --git a/libtiff/tif_dir.c b/libtiff/tif_dir.c new file mode 100755 index 0000000..f276457 --- /dev/null +++ b/libtiff/tif_dir.c @@ -0,0 +1,1295 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_dir.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * Directory Tag Get & Set Routines. + * (and also some miscellaneous stuff) + */ +#include "tiffiop.h" + +/* + * These are used in the backwards compatibility code... + */ +#define DATATYPE_VOID 0 /* !untyped data */ +#define DATATYPE_INT 1 /* !signed integer data */ +#define DATATYPE_UINT 2 /* !unsigned integer data */ +#define DATATYPE_IEEEFP 3 /* !IEEE floating point data */ + +void +_TIFFsetByteArray(void** vpp, void* vp, long n) +{ + if (*vpp) + _TIFFfree(*vpp), *vpp = 0; + if (vp && (*vpp = (void*) _TIFFmalloc(n))) + _TIFFmemcpy(*vpp, vp, n); +} +void _TIFFsetString(char** cpp, char* cp) + { _TIFFsetByteArray((void**) cpp, (void*) cp, (long) (strlen(cp)+1)); } +void _TIFFsetNString(char** cpp, char* cp, long n) + { _TIFFsetByteArray((void**) cpp, (void*) cp, n); } +void _TIFFsetShortArray(uint16** wpp, uint16* wp, long n) + { _TIFFsetByteArray((void**) wpp, (void*) wp, n*sizeof (uint16)); } +void _TIFFsetLongArray(uint32** lpp, uint32* lp, long n) + { _TIFFsetByteArray((void**) lpp, (void*) lp, n*sizeof (uint32)); } +void _TIFFsetFloatArray(float** fpp, float* fp, long n) + { _TIFFsetByteArray((void**) fpp, (void*) fp, n*sizeof (float)); } +void _TIFFsetDoubleArray(double** dpp, double* dp, long n) + { _TIFFsetByteArray((void**) dpp, (void*) dp, n*sizeof (double)); } + +/* + * Install extra samples information. + */ +static int +setExtraSamples(TIFFDirectory* td, va_list ap, int* v) +{ + uint16* va; + int i; + + *v = va_arg(ap, int); + if ((uint16) *v > td->td_samplesperpixel) + return (0); + va = va_arg(ap, uint16*); + if (*v > 0 && va == NULL) /* typically missing param */ + return (0); + for (i = 0; i < *v; i++) + if (va[i] > EXTRASAMPLE_UNASSALPHA) + return (0); + td->td_extrasamples = (uint16) *v; + _TIFFsetShortArray(&td->td_sampleinfo, va, td->td_extrasamples); + return (1); +} + +#ifdef CMYK_SUPPORT +static int +checkInkNamesString(TIFF* tif, int slen, const char* s) +{ + TIFFDirectory* td = &tif->tif_dir; + int i = td->td_samplesperpixel; + + if (slen > 0) { + const char* ep = s+slen; + const char* cp = s; + for (; i > 0; i--) { + for (; *cp != '\0'; cp++) + if (cp >= ep) + goto bad; + cp++; /* skip \0 */ + } + return (cp-s); + } +bad: + TIFFError("TIFFSetField", + "%s: Invalid InkNames value; expecting %d names, found %d", + tif->tif_name, + td->td_samplesperpixel, + td->td_samplesperpixel-i); + return (0); +} +#endif + +static int +_TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) +{ + TIFFDirectory* td = &tif->tif_dir; + int status = 1; + uint32 v32; + int i, v; + double d; + char* s; + + switch (tag) { + case TIFFTAG_SUBFILETYPE: + td->td_subfiletype = va_arg(ap, uint32); + break; + case TIFFTAG_IMAGEWIDTH: + td->td_imagewidth = va_arg(ap, uint32); + break; + case TIFFTAG_IMAGELENGTH: + td->td_imagelength = va_arg(ap, uint32); + break; + case TIFFTAG_BITSPERSAMPLE: + td->td_bitspersample = (uint16) va_arg(ap, int); + /* + * If the data require post-decoding processing + * to byte-swap samples, set it up here. Note + * that since tags are required to be ordered, + * compression code can override this behaviour + * in the setup method if it wants to roll the + * post decoding work in with its normal work. + */ + if (tif->tif_flags & TIFF_SWAB) { + if (td->td_bitspersample == 16) + tif->tif_postdecode = _TIFFSwab16BitData; + else if (td->td_bitspersample == 32) + tif->tif_postdecode = _TIFFSwab32BitData; + else if (td->td_bitspersample == 64) + tif->tif_postdecode = _TIFFSwab64BitData; + } + break; + case TIFFTAG_COMPRESSION: + v = va_arg(ap, int) & 0xffff; + /* + * If we're changing the compression scheme, + * the notify the previous module so that it + * can cleanup any state it's setup. + */ + if (TIFFFieldSet(tif, FIELD_COMPRESSION)) { + if (td->td_compression == v) + break; + (*tif->tif_cleanup)(tif); + tif->tif_flags &= ~TIFF_CODERSETUP; + } + /* + * Setup new compression routine state. + */ + if ( ! tif->tif_mode == O_RDONLY ) { + /* Handle removal of LZW compression */ + if ( v == COMPRESSION_LZW ) { + TIFFError(tif->tif_name, + "LZW compression no longer supported due to Unisys patent enforcement"); + v=COMPRESSION_NONE; + } + } + if( (status = TIFFSetCompressionScheme(tif, v)) != 0 ) + td->td_compression = v; + break; + case TIFFTAG_PHOTOMETRIC: + td->td_photometric = (uint16) va_arg(ap, int); + break; + case TIFFTAG_THRESHHOLDING: + td->td_threshholding = (uint16) va_arg(ap, int); + break; + case TIFFTAG_FILLORDER: + v = va_arg(ap, int); + if (v != FILLORDER_LSB2MSB && v != FILLORDER_MSB2LSB) + goto badvalue; + td->td_fillorder = (uint16) v; + break; + case TIFFTAG_DOCUMENTNAME: + _TIFFsetString(&td->td_documentname, va_arg(ap, char*)); + break; + case TIFFTAG_ARTIST: + _TIFFsetString(&td->td_artist, va_arg(ap, char*)); + break; + case TIFFTAG_DATETIME: + _TIFFsetString(&td->td_datetime, va_arg(ap, char*)); + break; + case TIFFTAG_HOSTCOMPUTER: + _TIFFsetString(&td->td_hostcomputer, va_arg(ap, char*)); + break; + case TIFFTAG_IMAGEDESCRIPTION: + _TIFFsetString(&td->td_imagedescription, va_arg(ap, char*)); + break; + case TIFFTAG_MAKE: + _TIFFsetString(&td->td_make, va_arg(ap, char*)); + break; + case TIFFTAG_MODEL: + _TIFFsetString(&td->td_model, va_arg(ap, char*)); + break; + case TIFFTAG_SOFTWARE: + _TIFFsetString(&td->td_software, va_arg(ap, char*)); + break; + case TIFFTAG_ORIENTATION: + v = va_arg(ap, int); + if (v < ORIENTATION_TOPLEFT || ORIENTATION_LEFTBOT < v) { + TIFFWarning(tif->tif_name, + "Bad value %ld for \"%s\" tag ignored", + v, _TIFFFieldWithTag(tif, tag)->field_name); + } else + td->td_orientation = (uint16) v; + break; + case TIFFTAG_SAMPLESPERPIXEL: + /* XXX should cross check -- e.g. if pallette, then 1 */ + v = va_arg(ap, int); + if (v == 0) + goto badvalue; + td->td_samplesperpixel = (uint16) v; + break; + case TIFFTAG_ROWSPERSTRIP: + v32 = va_arg(ap, uint32); + if (v32 == 0) + goto badvalue32; + td->td_rowsperstrip = v32; + if (!TIFFFieldSet(tif, FIELD_TILEDIMENSIONS)) { + td->td_tilelength = v32; + td->td_tilewidth = td->td_imagewidth; + } + break; + case TIFFTAG_MINSAMPLEVALUE: + td->td_minsamplevalue = (uint16) va_arg(ap, int); + break; + case TIFFTAG_MAXSAMPLEVALUE: + td->td_maxsamplevalue = (uint16) va_arg(ap, int); + break; + case TIFFTAG_SMINSAMPLEVALUE: + td->td_sminsamplevalue = (double) va_arg(ap, dblparam_t); + break; + case TIFFTAG_SMAXSAMPLEVALUE: + td->td_smaxsamplevalue = (double) va_arg(ap, dblparam_t); + break; + case TIFFTAG_XRESOLUTION: + td->td_xresolution = (float) va_arg(ap, dblparam_t); + break; + case TIFFTAG_YRESOLUTION: + td->td_yresolution = (float) va_arg(ap, dblparam_t); + break; + case TIFFTAG_PLANARCONFIG: + v = va_arg(ap, int); + if (v != PLANARCONFIG_CONTIG && v != PLANARCONFIG_SEPARATE) + goto badvalue; + td->td_planarconfig = (uint16) v; + break; + case TIFFTAG_PAGENAME: + _TIFFsetString(&td->td_pagename, va_arg(ap, char*)); + break; + case TIFFTAG_XPOSITION: + td->td_xposition = (float) va_arg(ap, dblparam_t); + break; + case TIFFTAG_YPOSITION: + td->td_yposition = (float) va_arg(ap, dblparam_t); + break; + case TIFFTAG_RESOLUTIONUNIT: + v = va_arg(ap, int); + if (v < RESUNIT_NONE || RESUNIT_CENTIMETER < v) + goto badvalue; + td->td_resolutionunit = (uint16) v; + break; + case TIFFTAG_PAGENUMBER: + td->td_pagenumber[0] = (uint16) va_arg(ap, int); + td->td_pagenumber[1] = (uint16) va_arg(ap, int); + break; + case TIFFTAG_HALFTONEHINTS: + td->td_halftonehints[0] = (uint16) va_arg(ap, int); + td->td_halftonehints[1] = (uint16) va_arg(ap, int); + break; + case TIFFTAG_COLORMAP: + v32 = (uint32)(1L<td_bitspersample); + _TIFFsetShortArray(&td->td_colormap[0], va_arg(ap, uint16*), v32); + _TIFFsetShortArray(&td->td_colormap[1], va_arg(ap, uint16*), v32); + _TIFFsetShortArray(&td->td_colormap[2], va_arg(ap, uint16*), v32); + break; + case TIFFTAG_EXTRASAMPLES: + if (!setExtraSamples(td, ap, &v)) + goto badvalue; + break; + case TIFFTAG_MATTEING: + td->td_extrasamples = (uint16) (va_arg(ap, int) != 0); + if (td->td_extrasamples) { + uint16 sv = EXTRASAMPLE_ASSOCALPHA; + _TIFFsetShortArray(&td->td_sampleinfo, &sv, 1); + } + break; + case TIFFTAG_TILEWIDTH: + v32 = va_arg(ap, uint32); + if (v32 % 16) { + if (tif->tif_mode != O_RDONLY) + goto badvalue32; + TIFFWarning(tif->tif_name, + "Nonstandard tile width %d, convert file", v32); + } + td->td_tilewidth = v32; + tif->tif_flags |= TIFF_ISTILED; + break; + case TIFFTAG_TILELENGTH: + v32 = va_arg(ap, uint32); + if (v32 % 16) { + if (tif->tif_mode != O_RDONLY) + goto badvalue32; + TIFFWarning(tif->tif_name, + "Nonstandard tile length %d, convert file", v32); + } + td->td_tilelength = v32; + tif->tif_flags |= TIFF_ISTILED; + break; + case TIFFTAG_TILEDEPTH: + v32 = va_arg(ap, uint32); + if (v32 == 0) + goto badvalue32; + td->td_tiledepth = v32; + break; + case TIFFTAG_DATATYPE: + v = va_arg(ap, int); + switch (v) { + case DATATYPE_VOID: v = SAMPLEFORMAT_VOID; break; + case DATATYPE_INT: v = SAMPLEFORMAT_INT; break; + case DATATYPE_UINT: v = SAMPLEFORMAT_UINT; break; + case DATATYPE_IEEEFP: v = SAMPLEFORMAT_IEEEFP;break; + default: goto badvalue; + } + td->td_sampleformat = (uint16) v; + break; + case TIFFTAG_SAMPLEFORMAT: + v = va_arg(ap, int); + if (v < SAMPLEFORMAT_UINT || SAMPLEFORMAT_VOID < v) + goto badvalue; + td->td_sampleformat = (uint16) v; + break; + case TIFFTAG_IMAGEDEPTH: + td->td_imagedepth = va_arg(ap, uint32); + break; + case TIFFTAG_STONITS: + d = va_arg(ap, dblparam_t); + if (d <= 0.) + goto badvaluedbl; + td->td_stonits = d; + break; + + /* Begin Pixar Tags */ + case TIFFTAG_PIXAR_IMAGEFULLWIDTH: + td->td_imagefullwidth = va_arg(ap, uint32); + break; + case TIFFTAG_PIXAR_IMAGEFULLLENGTH: + td->td_imagefulllength = va_arg(ap, uint32); + break; + case TIFFTAG_PIXAR_TEXTUREFORMAT: + _TIFFsetString(&td->td_textureformat, va_arg(ap, char*)); + break; + case TIFFTAG_PIXAR_WRAPMODES: + _TIFFsetString(&td->td_wrapmodes, va_arg(ap, char*)); + break; + case TIFFTAG_PIXAR_FOVCOT: + td->td_fovcot = (float) va_arg(ap, dblparam_t); + break; + case TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN: + _TIFFsetFloatArray(&td->td_matrixWorldToScreen, + va_arg(ap, float*), 16); + break; + case TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA: + _TIFFsetFloatArray(&td->td_matrixWorldToCamera, + va_arg(ap, float*), 16); + break; + /* End Pixar Tags */ + +#if SUBIFD_SUPPORT + case TIFFTAG_SUBIFD: + if ((tif->tif_flags & TIFF_INSUBIFD) == 0) { + td->td_nsubifd = (uint16) va_arg(ap, int); + _TIFFsetLongArray(&td->td_subifd, va_arg(ap, uint32*), + (long) td->td_nsubifd); + } else { + TIFFError(tif->tif_name, "Sorry, cannot nest SubIFDs"); + status = 0; + } + break; +#endif +#ifdef YCBCR_SUPPORT + case TIFFTAG_YCBCRCOEFFICIENTS: + _TIFFsetFloatArray(&td->td_ycbcrcoeffs, va_arg(ap, float*), 3); + break; + case TIFFTAG_YCBCRPOSITIONING: + td->td_ycbcrpositioning = (uint16) va_arg(ap, int); + break; + case TIFFTAG_YCBCRSUBSAMPLING: + td->td_ycbcrsubsampling[0] = (uint16) va_arg(ap, int); + td->td_ycbcrsubsampling[1] = (uint16) va_arg(ap, int); + break; +#endif +#ifdef COLORIMETRY_SUPPORT + case TIFFTAG_WHITEPOINT: + _TIFFsetFloatArray(&td->td_whitepoint, va_arg(ap, float*), 2); + break; + case TIFFTAG_PRIMARYCHROMATICITIES: + _TIFFsetFloatArray(&td->td_primarychromas, va_arg(ap, float*), 6); + break; + case TIFFTAG_TRANSFERFUNCTION: + v = (td->td_samplesperpixel - td->td_extrasamples) > 1 ? 3 : 1; + for (i = 0; i < v; i++) + _TIFFsetShortArray(&td->td_transferfunction[i], + va_arg(ap, uint16*), 1L<td_bitspersample); + break; + case TIFFTAG_REFERENCEBLACKWHITE: + /* XXX should check for null range */ + _TIFFsetFloatArray(&td->td_refblackwhite, va_arg(ap, float*), 6); + break; +#endif +#ifdef CMYK_SUPPORT + case TIFFTAG_INKSET: + td->td_inkset = (uint16) va_arg(ap, int); + break; + case TIFFTAG_DOTRANGE: + /* XXX should check for null range */ + td->td_dotrange[0] = (uint16) va_arg(ap, int); + td->td_dotrange[1] = (uint16) va_arg(ap, int); + break; + case TIFFTAG_INKNAMES: + i = va_arg(ap, int); + s = va_arg(ap, char*); + i = checkInkNamesString(tif, i, s); + status = i > 0; + if( i > 0 ) { + _TIFFsetNString(&td->td_inknames, s, i); + td->td_inknameslen = i; + } + break; + case TIFFTAG_NUMBEROFINKS: + td->td_ninks = (uint16) va_arg(ap, int); + break; + case TIFFTAG_TARGETPRINTER: + _TIFFsetString(&td->td_targetprinter, va_arg(ap, char*)); + break; +#endif +#ifdef ICC_SUPPORT + case TIFFTAG_ICCPROFILE: + td->td_profileLength = (uint32) va_arg(ap, uint32); + _TIFFsetByteArray(&td->td_profileData, va_arg(ap, void*), + td->td_profileLength); + break; +#endif +#ifdef PHOTOSHOP_SUPPORT + case TIFFTAG_PHOTOSHOP: + td->td_photoshopLength = (uint32) va_arg(ap, uint32); + _TIFFsetByteArray (&td->td_photoshopData, va_arg(ap, void*), + td->td_photoshopLength); + break; +#endif +#ifdef IPTC_SUPPORT + case TIFFTAG_RICHTIFFIPTC: + td->td_richtiffiptcLength = (uint32) va_arg(ap, uint32); +#ifdef PHOTOSHOP_SUPPORT + _TIFFsetLongArray ((uint32**)&td->td_richtiffiptcData, va_arg(ap, uint32*), + td->td_richtiffiptcLength); +#else + _TIFFsetByteArray (&td->td_photoshopData, va_arg(ap, void*), + td->td_photoshopLength); +#endif + break; +#endif + default: + /* + * This can happen if multiple images are open with + * different codecs which have private tags. The + * global tag information table may then have tags + * that are valid for one file but not the other. + * If the client tries to set a tag that is not valid + * for the image's codec then we'll arrive here. This + * happens, for example, when tiffcp is used to convert + * between compression schemes and codec-specific tags + * are blindly copied. + */ + TIFFError("TIFFSetField", + "%s: Invalid %stag \"%s\" (not supported by codec)", + tif->tif_name, isPseudoTag(tag) ? "pseduo-" : "", + _TIFFFieldWithTag(tif, tag)->field_name); + status = 0; + break; + } + if (status) { + TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit); + tif->tif_flags |= TIFF_DIRTYDIRECT; + } + va_end(ap); + return (status); +badvalue: + TIFFError(tif->tif_name, "%d: Bad value for \"%s\"", v, + _TIFFFieldWithTag(tif, tag)->field_name); + va_end(ap); + return (0); +badvalue32: + TIFFError(tif->tif_name, "%ld: Bad value for \"%s\"", v32, + _TIFFFieldWithTag(tif, tag)->field_name); + va_end(ap); + return (0); +badvaluedbl: + TIFFError(tif->tif_name, "%f: Bad value for \"%s\"", d, + _TIFFFieldWithTag(tif, tag)->field_name); + va_end(ap); + return (0); +} + +/* + * Return 1/0 according to whether or not + * it is permissible to set the tag's value. + * Note that we allow ImageLength to be changed + * so that we can append and extend to images. + * Any other tag may not be altered once writing + * has commenced, unless its value has no effect + * on the format of the data that is written. + */ +static int +OkToChangeTag(TIFF* tif, ttag_t tag) +{ + const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); + if (!fip) { /* unknown tag */ + TIFFError("TIFFSetField", "%s: Unknown %stag %u", + tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "", tag); + return (0); + } + if (tag != TIFFTAG_IMAGELENGTH && (tif->tif_flags & TIFF_BEENWRITING) && + !fip->field_oktochange) { + /* + * Consult info table to see if tag can be changed + * after we've started writing. We only allow changes + * to those tags that don't/shouldn't affect the + * compression and/or format of the data. + */ + TIFFError("TIFFSetField", + "%s: Cannot modify tag \"%s\" while writing", + tif->tif_name, fip->field_name); + return (0); + } + return (1); +} + +/* + * Record the value of a field in the + * internal directory structure. The + * field will be written to the file + * when/if the directory structure is + * updated. + */ +int +TIFFSetField(TIFF* tif, ttag_t tag, ...) +{ + va_list ap; + int status; + + va_start(ap, tag); + status = TIFFVSetField(tif, tag, ap); + va_end(ap); + return (status); +} + +/* + * Like TIFFSetField, but taking a varargs + * parameter list. This routine is useful + * for building higher-level interfaces on + * top of the library. + */ +int +TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) +{ + return OkToChangeTag(tif, tag) ? + (*tif->tif_vsetfield)(tif, tag, ap) : 0; +} + +static int +_TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap) +{ + TIFFDirectory* td = &tif->tif_dir; + + switch (tag) { + case TIFFTAG_SUBFILETYPE: + *va_arg(ap, uint32*) = td->td_subfiletype; + break; + case TIFFTAG_IMAGEWIDTH: + *va_arg(ap, uint32*) = td->td_imagewidth; + break; + case TIFFTAG_IMAGELENGTH: + *va_arg(ap, uint32*) = td->td_imagelength; + break; + case TIFFTAG_BITSPERSAMPLE: + *va_arg(ap, uint16*) = td->td_bitspersample; + break; + case TIFFTAG_COMPRESSION: + *va_arg(ap, uint16*) = td->td_compression; + break; + case TIFFTAG_PHOTOMETRIC: + *va_arg(ap, uint16*) = td->td_photometric; + break; + case TIFFTAG_THRESHHOLDING: + *va_arg(ap, uint16*) = td->td_threshholding; + break; + case TIFFTAG_FILLORDER: + *va_arg(ap, uint16*) = td->td_fillorder; + break; + case TIFFTAG_DOCUMENTNAME: + *va_arg(ap, char**) = td->td_documentname; + break; + case TIFFTAG_ARTIST: + *va_arg(ap, char**) = td->td_artist; + break; + case TIFFTAG_DATETIME: + *va_arg(ap, char**) = td->td_datetime; + break; + case TIFFTAG_HOSTCOMPUTER: + *va_arg(ap, char**) = td->td_hostcomputer; + break; + case TIFFTAG_IMAGEDESCRIPTION: + *va_arg(ap, char**) = td->td_imagedescription; + break; + case TIFFTAG_MAKE: + *va_arg(ap, char**) = td->td_make; + break; + case TIFFTAG_MODEL: + *va_arg(ap, char**) = td->td_model; + break; + case TIFFTAG_SOFTWARE: + *va_arg(ap, char**) = td->td_software; + break; + case TIFFTAG_ORIENTATION: + *va_arg(ap, uint16*) = td->td_orientation; + break; + case TIFFTAG_SAMPLESPERPIXEL: + *va_arg(ap, uint16*) = td->td_samplesperpixel; + break; + case TIFFTAG_ROWSPERSTRIP: + *va_arg(ap, uint32*) = td->td_rowsperstrip; + break; + case TIFFTAG_MINSAMPLEVALUE: + *va_arg(ap, uint16*) = td->td_minsamplevalue; + break; + case TIFFTAG_MAXSAMPLEVALUE: + *va_arg(ap, uint16*) = td->td_maxsamplevalue; + break; + case TIFFTAG_SMINSAMPLEVALUE: + *va_arg(ap, double*) = td->td_sminsamplevalue; + break; + case TIFFTAG_SMAXSAMPLEVALUE: + *va_arg(ap, double*) = td->td_smaxsamplevalue; + break; + case TIFFTAG_XRESOLUTION: + *va_arg(ap, float*) = td->td_xresolution; + break; + case TIFFTAG_YRESOLUTION: + *va_arg(ap, float*) = td->td_yresolution; + break; + case TIFFTAG_PLANARCONFIG: + *va_arg(ap, uint16*) = td->td_planarconfig; + break; + case TIFFTAG_XPOSITION: + *va_arg(ap, float*) = td->td_xposition; + break; + case TIFFTAG_YPOSITION: + *va_arg(ap, float*) = td->td_yposition; + break; + case TIFFTAG_PAGENAME: + *va_arg(ap, char**) = td->td_pagename; + break; + case TIFFTAG_RESOLUTIONUNIT: + *va_arg(ap, uint16*) = td->td_resolutionunit; + break; + case TIFFTAG_PAGENUMBER: + *va_arg(ap, uint16*) = td->td_pagenumber[0]; + *va_arg(ap, uint16*) = td->td_pagenumber[1]; + break; + case TIFFTAG_HALFTONEHINTS: + *va_arg(ap, uint16*) = td->td_halftonehints[0]; + *va_arg(ap, uint16*) = td->td_halftonehints[1]; + break; + case TIFFTAG_COLORMAP: + *va_arg(ap, uint16**) = td->td_colormap[0]; + *va_arg(ap, uint16**) = td->td_colormap[1]; + *va_arg(ap, uint16**) = td->td_colormap[2]; + break; + case TIFFTAG_STRIPOFFSETS: + case TIFFTAG_TILEOFFSETS: + *va_arg(ap, uint32**) = td->td_stripoffset; + break; + case TIFFTAG_STRIPBYTECOUNTS: + case TIFFTAG_TILEBYTECOUNTS: + *va_arg(ap, uint32**) = td->td_stripbytecount; + break; + case TIFFTAG_MATTEING: + *va_arg(ap, uint16*) = + (td->td_extrasamples == 1 && + td->td_sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA); + break; + case TIFFTAG_EXTRASAMPLES: + *va_arg(ap, uint16*) = td->td_extrasamples; + *va_arg(ap, uint16**) = td->td_sampleinfo; + break; + case TIFFTAG_TILEWIDTH: + *va_arg(ap, uint32*) = td->td_tilewidth; + break; + case TIFFTAG_TILELENGTH: + *va_arg(ap, uint32*) = td->td_tilelength; + break; + case TIFFTAG_TILEDEPTH: + *va_arg(ap, uint32*) = td->td_tiledepth; + break; + case TIFFTAG_DATATYPE: + switch (td->td_sampleformat) { + case SAMPLEFORMAT_UINT: + *va_arg(ap, uint16*) = DATATYPE_UINT; + break; + case SAMPLEFORMAT_INT: + *va_arg(ap, uint16*) = DATATYPE_INT; + break; + case SAMPLEFORMAT_IEEEFP: + *va_arg(ap, uint16*) = DATATYPE_IEEEFP; + break; + case SAMPLEFORMAT_VOID: + *va_arg(ap, uint16*) = DATATYPE_VOID; + break; + } + break; + case TIFFTAG_SAMPLEFORMAT: + *va_arg(ap, uint16*) = td->td_sampleformat; + break; + case TIFFTAG_IMAGEDEPTH: + *va_arg(ap, uint32*) = td->td_imagedepth; + break; + case TIFFTAG_STONITS: + *va_arg(ap, double*) = td->td_stonits; + break; +#if SUBIFD_SUPPORT + case TIFFTAG_SUBIFD: + *va_arg(ap, uint16*) = td->td_nsubifd; + *va_arg(ap, uint32**) = td->td_subifd; + break; +#endif +#ifdef YCBCR_SUPPORT + case TIFFTAG_YCBCRCOEFFICIENTS: + *va_arg(ap, float**) = td->td_ycbcrcoeffs; + break; + case TIFFTAG_YCBCRPOSITIONING: + *va_arg(ap, uint16*) = td->td_ycbcrpositioning; + break; + case TIFFTAG_YCBCRSUBSAMPLING: + *va_arg(ap, uint16*) = td->td_ycbcrsubsampling[0]; + *va_arg(ap, uint16*) = td->td_ycbcrsubsampling[1]; + break; +#endif +#ifdef COLORIMETRY_SUPPORT + case TIFFTAG_WHITEPOINT: + *va_arg(ap, float**) = td->td_whitepoint; + break; + case TIFFTAG_PRIMARYCHROMATICITIES: + *va_arg(ap, float**) = td->td_primarychromas; + break; + case TIFFTAG_TRANSFERFUNCTION: + *va_arg(ap, uint16**) = td->td_transferfunction[0]; + if (td->td_samplesperpixel - td->td_extrasamples > 1) { + *va_arg(ap, uint16**) = td->td_transferfunction[1]; + *va_arg(ap, uint16**) = td->td_transferfunction[2]; + } + break; + case TIFFTAG_REFERENCEBLACKWHITE: + *va_arg(ap, float**) = td->td_refblackwhite; + break; +#endif +#ifdef CMYK_SUPPORT + case TIFFTAG_INKSET: + *va_arg(ap, uint16*) = td->td_inkset; + break; + case TIFFTAG_DOTRANGE: + *va_arg(ap, uint16*) = td->td_dotrange[0]; + *va_arg(ap, uint16*) = td->td_dotrange[1]; + break; + case TIFFTAG_INKNAMES: + *va_arg(ap, char**) = td->td_inknames; + break; + case TIFFTAG_NUMBEROFINKS: + *va_arg(ap, uint16*) = td->td_ninks; + break; + case TIFFTAG_TARGETPRINTER: + *va_arg(ap, char**) = td->td_targetprinter; + break; +#endif +#ifdef ICC_SUPPORT + case TIFFTAG_ICCPROFILE: + *va_arg(ap, uint32*) = td->td_profileLength; + *va_arg(ap, void**) = td->td_profileData; + break; +#endif +#ifdef PHOTOSHOP_SUPPORT + case TIFFTAG_PHOTOSHOP: + *va_arg(ap, uint32*) = td->td_photoshopLength; + *va_arg(ap, void**) = td->td_photoshopData; + break; +#endif +#ifdef IPTC_SUPPORT + case TIFFTAG_RICHTIFFIPTC: + *va_arg(ap, uint32*) = td->td_richtiffiptcLength; + *va_arg(ap, void**) = td->td_richtiffiptcData; + break; +#endif + /* Begin Pixar Tags */ + case TIFFTAG_PIXAR_IMAGEFULLWIDTH: + *va_arg(ap, uint32*) = td->td_imagefullwidth; + break; + case TIFFTAG_PIXAR_IMAGEFULLLENGTH: + *va_arg(ap, uint32*) = td->td_imagefulllength; + break; + case TIFFTAG_PIXAR_TEXTUREFORMAT: + *va_arg(ap, char**) = td->td_textureformat; + break; + case TIFFTAG_PIXAR_WRAPMODES: + *va_arg(ap, char**) = td->td_wrapmodes; + break; + case TIFFTAG_PIXAR_FOVCOT: + *va_arg(ap, float*) = td->td_fovcot; + break; + case TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN: + *va_arg(ap, float**) = td->td_matrixWorldToScreen; + break; + case TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA: + *va_arg(ap, float**) = td->td_matrixWorldToCamera; + break; + /* End Pixar Tags */ + + default: + /* + * This can happen if multiple images are open with + * different codecs which have private tags. The + * global tag information table may then have tags + * that are valid for one file but not the other. + * If the client tries to get a tag that is not valid + * for the image's codec then we'll arrive here. + */ + TIFFError("TIFFGetField", + "%s: Invalid %stag \"%s\" (not supported by codec)", + tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "", + _TIFFFieldWithTag(tif, tag)->field_name); + break; + } + return (1); +} + +/* + * Return the value of a field in the + * internal directory structure. + */ +int +TIFFGetField(TIFF* tif, ttag_t tag, ...) +{ + int status; + va_list ap; + + va_start(ap, tag); + status = TIFFVGetField(tif, tag, ap); + va_end(ap); + return (status); +} + +/* + * Like TIFFGetField, but taking a varargs + * parameter list. This routine is useful + * for building higher-level interfaces on + * top of the library. + */ +int +TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap) +{ + const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); + return (fip && (isPseudoTag(tag) || TIFFFieldSet(tif, fip->field_bit)) ? + (*tif->tif_vgetfield)(tif, tag, ap) : 0); +} + +#define CleanupField(member) { \ + if (td->member) { \ + _TIFFfree(td->member); \ + td->member = 0; \ + } \ +} + +/* + * Release storage associated with a directory. + */ +void +TIFFFreeDirectory(TIFF* tif) +{ + register TIFFDirectory *td = &tif->tif_dir; + + CleanupField(td_colormap[0]); + CleanupField(td_colormap[1]); + CleanupField(td_colormap[2]); + CleanupField(td_documentname); + CleanupField(td_artist); + CleanupField(td_datetime); + CleanupField(td_hostcomputer); + CleanupField(td_imagedescription); + CleanupField(td_make); + CleanupField(td_model); + CleanupField(td_software); + CleanupField(td_pagename); + CleanupField(td_sampleinfo); +#if SUBIFD_SUPPORT + CleanupField(td_subifd); +#endif +#ifdef YCBCR_SUPPORT + CleanupField(td_ycbcrcoeffs); +#endif +#ifdef CMYK_SUPPORT + CleanupField(td_inknames); + CleanupField(td_targetprinter); +#endif +#ifdef COLORIMETRY_SUPPORT + CleanupField(td_whitepoint); + CleanupField(td_primarychromas); + CleanupField(td_refblackwhite); + CleanupField(td_transferfunction[0]); + CleanupField(td_transferfunction[1]); + CleanupField(td_transferfunction[2]); +#endif +#ifdef ICC_SUPPORT + CleanupField(td_profileData); +#endif +#ifdef PHOTOSHOP_SUPPORT + CleanupField(td_photoshopData); +#endif +#ifdef IPTC_SUPPORT + CleanupField(td_richtiffiptcData); +#endif + CleanupField(td_stripoffset); + CleanupField(td_stripbytecount); + /* Begin Pixar Tags */ + CleanupField(td_textureformat); + CleanupField(td_wrapmodes); + CleanupField(td_matrixWorldToScreen); + CleanupField(td_matrixWorldToCamera); + /* End Pixar Tags */ +} +#undef CleanupField + +/* + * Client Tag extension support (from Niles Ritter). + */ +static TIFFExtendProc _TIFFextender = (TIFFExtendProc) NULL; + +TIFFExtendProc +TIFFSetTagExtender(TIFFExtendProc extender) +{ + TIFFExtendProc prev = _TIFFextender; + _TIFFextender = extender; + return (prev); +} + +/* + * Setup for a new directory. Should we automatically call + * TIFFWriteDirectory() if the current one is dirty? + * + * The newly created directory will not exist on the file till + * TIFFWriteDirectory(), TIFFFlush() or TIFFClose() is called. + */ +int +TIFFCreateDirectory(TIFF* tif) +{ + TIFFDefaultDirectory(tif); + tif->tif_diroff = 0; + tif->tif_nextdiroff = 0; + tif->tif_curoff = 0; + tif->tif_row = (uint32) -1; + tif->tif_curstrip = (tstrip_t) -1; + + return 0; +} + +/* + * Setup a default directory structure. + */ +int +TIFFDefaultDirectory(TIFF* tif) +{ + register TIFFDirectory* td = &tif->tif_dir; + + _TIFFSetupFieldInfo(tif); + _TIFFmemset(td, 0, sizeof (*td)); + td->td_fillorder = FILLORDER_MSB2LSB; + td->td_bitspersample = 1; + td->td_threshholding = THRESHHOLD_BILEVEL; + td->td_orientation = ORIENTATION_TOPLEFT; + td->td_samplesperpixel = 1; + td->td_rowsperstrip = (uint32) -1; + td->td_tilewidth = (uint32) -1; + td->td_tilelength = (uint32) -1; + td->td_tiledepth = 1; + td->td_resolutionunit = RESUNIT_INCH; + td->td_sampleformat = SAMPLEFORMAT_UINT; + td->td_imagedepth = 1; +#ifdef YCBCR_SUPPORT + td->td_ycbcrsubsampling[0] = 2; + td->td_ycbcrsubsampling[1] = 2; + td->td_ycbcrpositioning = YCBCRPOSITION_CENTERED; +#endif +#ifdef CMYK_SUPPORT + td->td_inkset = INKSET_CMYK; + td->td_ninks = 4; +#endif + tif->tif_postdecode = _TIFFNoPostDecode; + tif->tif_vsetfield = _TIFFVSetField; + tif->tif_vgetfield = _TIFFVGetField; + tif->tif_printdir = NULL; + /* + * Give client code a chance to install their own + * tag extensions & methods, prior to compression overloads. + */ + if (_TIFFextender) + (*_TIFFextender)(tif); + (void) TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + /* + * NB: The directory is marked dirty as a result of setting + * up the default compression scheme. However, this really + * isn't correct -- we want TIFF_DIRTYDIRECT to be set only + * if the user does something. We could just do the setup + * by hand, but it seems better to use the normal mechanism + * (i.e. TIFFSetField). + */ + tif->tif_flags &= ~TIFF_DIRTYDIRECT; + return (1); +} + +static int +TIFFAdvanceDirectory(TIFF* tif, uint32* nextdir, toff_t* off) +{ + static const char module[] = "TIFFAdvanceDirectory"; + uint16 dircount; + if (isMapped(tif)) + { + toff_t poff=*nextdir; + if (poff+sizeof(uint16) > tif->tif_size) + { + TIFFError(module, "%s: Error fetching directory count", + tif->tif_name); + return (0); + } + _TIFFmemcpy(&dircount, tif->tif_base+poff, sizeof (uint16)); + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + poff+=sizeof (uint16)+dircount*sizeof (TIFFDirEntry); + if (off != NULL) + *off = poff; + if (((toff_t) (poff+sizeof (uint32))) > tif->tif_size) + { + TIFFError(module, "%s: Error fetching directory link", + tif->tif_name); + return (0); + } + _TIFFmemcpy(nextdir, tif->tif_base+poff, sizeof (uint32)); + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(nextdir); + return (1); + } + else + { + if (!SeekOK(tif, *nextdir) || + !ReadOK(tif, &dircount, sizeof (uint16))) { + TIFFError(module, "%s: Error fetching directory count", + tif->tif_name); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + if (off != NULL) + *off = TIFFSeekFile(tif, + dircount*sizeof (TIFFDirEntry), SEEK_CUR); + else + (void) TIFFSeekFile(tif, + dircount*sizeof (TIFFDirEntry), SEEK_CUR); + if (!ReadOK(tif, nextdir, sizeof (uint32))) { + TIFFError(module, "%s: Error fetching directory link", + tif->tif_name); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(nextdir); + return (1); + } +} + +/* + * Count the number of directories in a file. + */ +tdir_t +TIFFNumberOfDirectories(TIFF* tif) +{ + toff_t nextdir = tif->tif_header.tiff_diroff; + tdir_t n = 0; + + while (nextdir != 0 && TIFFAdvanceDirectory(tif, &nextdir, NULL)) + n++; + return (n); +} + +/* + * Set the n-th directory as the current directory. + * NB: Directories are numbered starting at 0. + */ +int +TIFFSetDirectory(TIFF* tif, tdir_t dirn) +{ + toff_t nextdir; + tdir_t n; + + nextdir = tif->tif_header.tiff_diroff; + for (n = dirn; n > 0 && nextdir != 0; n--) + if (!TIFFAdvanceDirectory(tif, &nextdir, NULL)) + return (0); + tif->tif_nextdiroff = nextdir; + /* + * Set curdir to the actual directory index. The + * -1 is because TIFFReadDirectory will increment + * tif_curdir after successfully reading the directory. + */ + tif->tif_curdir = (dirn - n) - 1; + return (TIFFReadDirectory(tif)); +} + +/* + * Set the current directory to be the directory + * located at the specified file offset. This interface + * is used mainly to access directories linked with + * the SubIFD tag (e.g. thumbnail images). + */ +int +TIFFSetSubDirectory(TIFF* tif, uint32 diroff) +{ + tif->tif_nextdiroff = diroff; + return (TIFFReadDirectory(tif)); +} + +/* + * Return file offset of the current directory. + */ +uint32 +TIFFCurrentDirOffset(TIFF* tif) +{ + return (tif->tif_diroff); +} + +/* + * Return an indication of whether or not we are + * at the last directory in the file. + */ +int +TIFFLastDirectory(TIFF* tif) +{ + return (tif->tif_nextdiroff == 0); +} + +/* + * Unlink the specified directory from the directory chain. + */ +int +TIFFUnlinkDirectory(TIFF* tif, tdir_t dirn) +{ + static const char module[] = "TIFFUnlinkDirectory"; + toff_t nextdir; + toff_t off; + tdir_t n; + + if (tif->tif_mode == O_RDONLY) { + TIFFError(module, "Can not unlink directory in read-only file"); + return (0); + } + /* + * Go to the directory before the one we want + * to unlink and nab the offset of the link + * field we'll need to patch. + */ + nextdir = tif->tif_header.tiff_diroff; + off = sizeof (uint16) + sizeof (uint16); + for (n = dirn-1; n > 0; n--) { + if (nextdir == 0) { + TIFFError(module, "Directory %d does not exist", dirn); + return (0); + } + if (!TIFFAdvanceDirectory(tif, &nextdir, &off)) + return (0); + } + /* + * Advance to the directory to be unlinked and fetch + * the offset of the directory that follows. + */ + if (!TIFFAdvanceDirectory(tif, &nextdir, NULL)) + return (0); + /* + * Go back and patch the link field of the preceding + * directory to point to the offset of the directory + * that follows. + */ + (void) TIFFSeekFile(tif, off, SEEK_SET); + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&nextdir); + if (!WriteOK(tif, &nextdir, sizeof (uint32))) { + TIFFError(module, "Error writing directory link"); + return (0); + } + /* + * Leave directory state setup safely. We don't have + * facilities for doing inserting and removing directories, + * so it's safest to just invalidate everything. This + * means that the caller can only append to the directory + * chain. + */ + (*tif->tif_cleanup)(tif); + if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) { + _TIFFfree(tif->tif_rawdata); + tif->tif_rawdata = NULL; + tif->tif_rawcc = 0; + } + tif->tif_flags &= ~(TIFF_BEENWRITING|TIFF_BUFFERSETUP|TIFF_POSTENCODE); + TIFFFreeDirectory(tif); + TIFFDefaultDirectory(tif); + tif->tif_diroff = 0; /* force link on next write */ + tif->tif_nextdiroff = 0; /* next write must be at end */ + tif->tif_curoff = 0; + tif->tif_row = (uint32) -1; + tif->tif_curstrip = (tstrip_t) -1; + return (1); +} + +/* [BFC] + * + * Author: Bruce Cameron + * + * Set a table of tags that are to be replaced during directory process by the + * 'IGNORE' state - or return TRUE/FALSE for the requested tag such that + * 'ReadDirectory' can use the stored information. + */ +int +TIFFReassignTagToIgnore (enum TIFFIgnoreSense task, int TIFFtagID) +{ + static int TIFFignoretags [FIELD_LAST]; + static int tagcount = 0 ; + int i; /* Loop index */ + int j; /* Loop index */ + + switch (task) + { + case TIS_STORE: + if ( tagcount < (FIELD_LAST - 1) ) + { + for ( j = 0 ; j < tagcount ; ++j ) + { /* Do not add duplicate tag */ + if ( TIFFignoretags [j] == TIFFtagID ) + return (TRUE) ; + } + TIFFignoretags [tagcount++] = TIFFtagID ; + return (TRUE) ; + } + break ; + + case TIS_EXTRACT: + for ( i = 0 ; i < tagcount ; ++i ) + { + if ( TIFFignoretags [i] == TIFFtagID ) + return (TRUE) ; + } + break; + + case TIS_EMPTY: + tagcount = 0 ; /* Clear the list */ + return (TRUE) ; + + default: + break; + } + + return (FALSE); +} diff --git a/libtiff/tif_dir.h b/libtiff/tif_dir.h new file mode 100755 index 0000000..4dee09a --- /dev/null +++ b/libtiff/tif_dir.h @@ -0,0 +1,268 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_dir.h,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#ifndef _TIFFDIR_ +#define _TIFFDIR_ +/* + * ``Library-private'' Directory-related Definitions. + */ + +/* + * Internal format of a TIFF directory entry. + */ +typedef struct { +#define FIELD_SETLONGS 3 + /* bit vector of fields that are set */ + u_long td_fieldsset[FIELD_SETLONGS]; + + uint32 td_imagewidth, td_imagelength, td_imagedepth; + uint32 td_tilewidth, td_tilelength, td_tiledepth; + uint32 td_subfiletype; + uint16 td_bitspersample; + uint16 td_sampleformat; + uint16 td_compression; + uint16 td_photometric; + uint16 td_threshholding; + uint16 td_fillorder; + uint16 td_orientation; + uint16 td_samplesperpixel; + uint32 td_rowsperstrip; + uint16 td_minsamplevalue, td_maxsamplevalue; + double td_sminsamplevalue, td_smaxsamplevalue; + float td_xresolution, td_yresolution; + uint16 td_resolutionunit; + uint16 td_planarconfig; + float td_xposition, td_yposition; + uint16 td_pagenumber[2]; + uint16* td_colormap[3]; + uint16 td_halftonehints[2]; + uint16 td_extrasamples; + uint16* td_sampleinfo; + double td_stonits; + char* td_documentname; + char* td_artist; + char* td_datetime; + char* td_hostcomputer; + char* td_imagedescription; + char* td_make; + char* td_model; + char* td_software; + char* td_pagename; + tstrip_t td_stripsperimage; + tstrip_t td_nstrips; /* size of offset & bytecount arrays */ + uint32* td_stripoffset; + uint32* td_stripbytecount; +#if SUBIFD_SUPPORT + uint16 td_nsubifd; + uint32* td_subifd; +#endif +#ifdef YCBCR_SUPPORT + float* td_ycbcrcoeffs; + uint16 td_ycbcrsubsampling[2]; + uint16 td_ycbcrpositioning; +#endif +#ifdef COLORIMETRY_SUPPORT + float* td_whitepoint; + float* td_primarychromas; + float* td_refblackwhite; + uint16* td_transferfunction[3]; +#endif +#ifdef CMYK_SUPPORT + uint16 td_inkset; + uint16 td_ninks; + uint16 td_dotrange[2]; + int td_inknameslen; + char* td_inknames; + char* td_targetprinter; +#endif +#ifdef ICC_SUPPORT + uint32 td_profileLength; + void *td_profileData; +#endif +#ifdef PHOTOSHOP_SUPPORT + uint32 td_photoshopLength; + void *td_photoshopData; +#endif +#ifdef IPTC_SUPPORT + uint32 td_richtiffiptcLength; + void *td_richtiffiptcData; +#endif + /* Begin Pixar Tag values. */ + uint32 td_imagefullwidth, td_imagefulllength; + char* td_textureformat; + char* td_wrapmodes; + float td_fovcot; + float* td_matrixWorldToScreen; + float* td_matrixWorldToCamera; + /* End Pixar Tag Values. */ +} TIFFDirectory; + +/* + * Field flags used to indicate fields that have + * been set in a directory, and to reference fields + * when manipulating a directory. + */ + +/* + * FIELD_IGNORE is used to signify tags that are to + * be processed but otherwise ignored. This permits + * antiquated tags to be quietly read and discarded. + * Note that a bit *is* allocated for ignored tags; + * this is understood by the directory reading logic + * which uses this fact to avoid special-case handling + */ +#define FIELD_IGNORE 0 + +/* multi-item fields */ +#define FIELD_IMAGEDIMENSIONS 1 +#define FIELD_TILEDIMENSIONS 2 +#define FIELD_RESOLUTION 3 +#define FIELD_POSITION 4 + +/* single-item fields */ +#define FIELD_SUBFILETYPE 5 +#define FIELD_BITSPERSAMPLE 6 +#define FIELD_COMPRESSION 7 +#define FIELD_PHOTOMETRIC 8 +#define FIELD_THRESHHOLDING 9 +#define FIELD_FILLORDER 10 +#define FIELD_DOCUMENTNAME 11 +#define FIELD_IMAGEDESCRIPTION 12 +#define FIELD_MAKE 13 +#define FIELD_MODEL 14 +#define FIELD_ORIENTATION 15 +#define FIELD_SAMPLESPERPIXEL 16 +#define FIELD_ROWSPERSTRIP 17 +#define FIELD_MINSAMPLEVALUE 18 +#define FIELD_MAXSAMPLEVALUE 19 +#define FIELD_PLANARCONFIG 20 +#define FIELD_PAGENAME 21 +#define FIELD_RESOLUTIONUNIT 22 +#define FIELD_PAGENUMBER 23 +#define FIELD_STRIPBYTECOUNTS 24 +#define FIELD_STRIPOFFSETS 25 +#define FIELD_COLORMAP 26 +#define FIELD_ARTIST 27 +#define FIELD_DATETIME 28 +#define FIELD_HOSTCOMPUTER 29 +#define FIELD_SOFTWARE 30 +#define FIELD_EXTRASAMPLES 31 +#define FIELD_SAMPLEFORMAT 32 +#define FIELD_SMINSAMPLEVALUE 33 +#define FIELD_SMAXSAMPLEVALUE 34 +#define FIELD_IMAGEDEPTH 35 +#define FIELD_TILEDEPTH 36 +#define FIELD_HALFTONEHINTS 37 +#define FIELD_YCBCRCOEFFICIENTS 38 +#define FIELD_YCBCRSUBSAMPLING 39 +#define FIELD_YCBCRPOSITIONING 40 +#define FIELD_REFBLACKWHITE 41 +#define FIELD_WHITEPOINT 42 +#define FIELD_PRIMARYCHROMAS 43 +#define FIELD_TRANSFERFUNCTION 44 +#define FIELD_INKSET 45 +#define FIELD_INKNAMES 46 +#define FIELD_DOTRANGE 47 +#define FIELD_TARGETPRINTER 48 +#define FIELD_SUBIFD 49 +#define FIELD_NUMBEROFINKS 50 +#define FIELD_ICCPROFILE 51 +#define FIELD_PHOTOSHOP 52 +#define FIELD_RICHTIFFIPTC 53 +#define FIELD_STONITS 54 +/* Begin PIXAR */ +#define FIELD_IMAGEFULLWIDTH 55 +#define FIELD_IMAGEFULLLENGTH 56 +#define FIELD_TEXTUREFORMAT 57 +#define FIELD_WRAPMODES 58 +#define FIELD_FOVCOT 59 +#define FIELD_MATRIX_WORLDTOSCREEN 60 +#define FIELD_MATRIX_WORLDTOCAMERA 61 +/* end of support for well-known tags; codec-private tags follow */ +#define FIELD_CODEC 62 /* base of codec-private tags */ +/* + * Pseudo-tags don't normally need field bits since they + * are not written to an output file (by definition). + * The library also has express logic to always query a + * codec for a pseudo-tag so allocating a field bit for + * one is a waste. If codec wants to promote the notion + * of a pseudo-tag being ``set'' or ``unset'' then it can + * do using internal state flags without polluting the + * field bit space defined for real tags. + */ +#define FIELD_PSEUDO 0 + +#define FIELD_LAST (32*FIELD_SETLONGS-1) + +#define TIFFExtractData(tif, type, v) \ + ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ + ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : \ + (v) & (tif)->tif_typemask[type])) +#define TIFFInsertData(tif, type, v) \ + ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ + ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : \ + (v) & (tif)->tif_typemask[type])) + +typedef struct { + ttag_t field_tag; /* field's tag */ + short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */ + short field_writecount; /* write count/TIFF_VARIABLE */ + TIFFDataType field_type; /* type of associated data */ + u_short field_bit; /* bit in fieldsset bit vector */ + u_char field_oktochange; /* if true, can change while writing */ + u_char field_passcount; /* if true, pass dir count on set */ + char *field_name; /* ASCII name */ +} TIFFFieldInfo; + +#define TIFF_ANY TIFF_NOTYPE /* for field descriptor searching */ +#define TIFF_VARIABLE -1 /* marker for variable length tags */ +#define TIFF_SPP -2 /* marker for SamplesPerPixel tags */ +#define TIFF_VARIABLE2 -3 /* marker for uint32 var-length tags */ + +extern const int tiffDataWidth[]; /* table of tag datatype widths */ + +#define BITn(n) (((u_long)1L)<<((n)&0x1f)) +#define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n)/32]) +#define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field)) +#define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field)) +#define TIFFClrFieldBit(tif, field) (BITFIELDn(tif, field) &= ~BITn(field)) + +#define FieldSet(fields, f) (fields[(f)/32] & BITn(f)) +#define ResetFieldBit(fields, f) (fields[(f)/32] &= ~BITn(f)) + +#if defined(__cplusplus) +extern "C" { +#endif +extern void _TIFFSetupFieldInfo(TIFF*); +extern void _TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], int); +extern void _TIFFPrintFieldInfo(TIFF*, FILE*); +extern const TIFFFieldInfo* _TIFFFindFieldInfo(TIFF*, ttag_t, TIFFDataType); +extern const TIFFFieldInfo* _TIFFFieldWithTag(TIFF*, ttag_t); +extern TIFFDataType _TIFFSampleToTagType(TIFF*); +#if defined(__cplusplus) +} +#endif +#endif /* _TIFFDIR_ */ diff --git a/libtiff/tif_dirinfo.c b/libtiff/tif_dirinfo.c new file mode 100755 index 0000000..82091bd --- /dev/null +++ b/libtiff/tif_dirinfo.c @@ -0,0 +1,402 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_dirinfo.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * Core Directory Tag Support. + */ +#include "tiffiop.h" +#include + +/* + * NB: NB: THIS ARRAY IS ASSUMED TO BE SORTED BY TAG. + * If a tag can have both LONG and SHORT types + * then the LONG must be placed before the SHORT for + * writing to work properly. + */ +static const TIFFFieldInfo tiffFieldInfo[] = { + { TIFFTAG_SUBFILETYPE, 1, 1, TIFF_LONG, FIELD_SUBFILETYPE, + TRUE, FALSE, "SubfileType" }, +/* XXX SHORT for compatibility w/ old versions of the library */ + { TIFFTAG_SUBFILETYPE, 1, 1, TIFF_SHORT, FIELD_SUBFILETYPE, + TRUE, FALSE, "SubfileType" }, + { TIFFTAG_OSUBFILETYPE, 1, 1, TIFF_SHORT, FIELD_SUBFILETYPE, + TRUE, FALSE, "OldSubfileType" }, + { TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_LONG, FIELD_IMAGEDIMENSIONS, + FALSE, FALSE, "ImageWidth" }, + { TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_SHORT, FIELD_IMAGEDIMENSIONS, + FALSE, FALSE, "ImageWidth" }, + { TIFFTAG_IMAGELENGTH, 1, 1, TIFF_LONG, FIELD_IMAGEDIMENSIONS, + TRUE, FALSE, "ImageLength" }, + { TIFFTAG_IMAGELENGTH, 1, 1, TIFF_SHORT, FIELD_IMAGEDIMENSIONS, + TRUE, FALSE, "ImageLength" }, + { TIFFTAG_BITSPERSAMPLE, -1,-1, TIFF_SHORT, FIELD_BITSPERSAMPLE, + FALSE, FALSE, "BitsPerSample" }, + { TIFFTAG_COMPRESSION, -1, 1, TIFF_SHORT, FIELD_COMPRESSION, + FALSE, FALSE, "Compression" }, + { TIFFTAG_PHOTOMETRIC, 1, 1, TIFF_SHORT, FIELD_PHOTOMETRIC, + FALSE, FALSE, "PhotometricInterpretation" }, + { TIFFTAG_THRESHHOLDING, 1, 1, TIFF_SHORT, FIELD_THRESHHOLDING, + TRUE, FALSE, "Threshholding" }, + { TIFFTAG_CELLWIDTH, 1, 1, TIFF_SHORT, FIELD_IGNORE, + TRUE, FALSE, "CellWidth" }, + { TIFFTAG_CELLLENGTH, 1, 1, TIFF_SHORT, FIELD_IGNORE, + TRUE, FALSE, "CellLength" }, + { TIFFTAG_FILLORDER, 1, 1, TIFF_SHORT, FIELD_FILLORDER, + FALSE, FALSE, "FillOrder" }, + { TIFFTAG_DOCUMENTNAME, -1,-1, TIFF_ASCII, FIELD_DOCUMENTNAME, + TRUE, FALSE, "DocumentName" }, + { TIFFTAG_IMAGEDESCRIPTION, -1,-1, TIFF_ASCII, FIELD_IMAGEDESCRIPTION, + TRUE, FALSE, "ImageDescription" }, + { TIFFTAG_MAKE, -1,-1, TIFF_ASCII, FIELD_MAKE, + TRUE, FALSE, "Make" }, + { TIFFTAG_MODEL, -1,-1, TIFF_ASCII, FIELD_MODEL, + TRUE, FALSE, "Model" }, + { TIFFTAG_STRIPOFFSETS, -1,-1, TIFF_LONG, FIELD_STRIPOFFSETS, + FALSE, FALSE, "StripOffsets" }, + { TIFFTAG_STRIPOFFSETS, -1,-1, TIFF_SHORT, FIELD_STRIPOFFSETS, + FALSE, FALSE, "StripOffsets" }, + { TIFFTAG_ORIENTATION, 1, 1, TIFF_SHORT, FIELD_ORIENTATION, + FALSE, FALSE, "Orientation" }, + { TIFFTAG_SAMPLESPERPIXEL, 1, 1, TIFF_SHORT, FIELD_SAMPLESPERPIXEL, + FALSE, FALSE, "SamplesPerPixel" }, + { TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_LONG, FIELD_ROWSPERSTRIP, + FALSE, FALSE, "RowsPerStrip" }, + { TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_SHORT, FIELD_ROWSPERSTRIP, + FALSE, FALSE, "RowsPerStrip" }, + { TIFFTAG_STRIPBYTECOUNTS, -1,-1, TIFF_LONG, FIELD_STRIPBYTECOUNTS, + FALSE, FALSE, "StripByteCounts" }, + { TIFFTAG_STRIPBYTECOUNTS, -1,-1, TIFF_SHORT, FIELD_STRIPBYTECOUNTS, + FALSE, FALSE, "StripByteCounts" }, + { TIFFTAG_MINSAMPLEVALUE, -2,-1, TIFF_SHORT, FIELD_MINSAMPLEVALUE, + TRUE, FALSE, "MinSampleValue" }, + { TIFFTAG_MAXSAMPLEVALUE, -2,-1, TIFF_SHORT, FIELD_MAXSAMPLEVALUE, + TRUE, FALSE, "MaxSampleValue" }, + { TIFFTAG_XRESOLUTION, 1, 1, TIFF_RATIONAL, FIELD_RESOLUTION, + FALSE, FALSE, "XResolution" }, + { TIFFTAG_YRESOLUTION, 1, 1, TIFF_RATIONAL, FIELD_RESOLUTION, + FALSE, FALSE, "YResolution" }, + { TIFFTAG_PLANARCONFIG, 1, 1, TIFF_SHORT, FIELD_PLANARCONFIG, + FALSE, FALSE, "PlanarConfiguration" }, + { TIFFTAG_PAGENAME, -1,-1, TIFF_ASCII, FIELD_PAGENAME, + TRUE, FALSE, "PageName" }, + { TIFFTAG_XPOSITION, 1, 1, TIFF_RATIONAL, FIELD_POSITION, + TRUE, FALSE, "XPosition" }, + { TIFFTAG_YPOSITION, 1, 1, TIFF_RATIONAL, FIELD_POSITION, + TRUE, FALSE, "YPosition" }, + { TIFFTAG_FREEOFFSETS, -1,-1, TIFF_LONG, FIELD_IGNORE, + FALSE, FALSE, "FreeOffsets" }, + { TIFFTAG_FREEBYTECOUNTS, -1,-1, TIFF_LONG, FIELD_IGNORE, + FALSE, FALSE, "FreeByteCounts" }, + { TIFFTAG_GRAYRESPONSEUNIT, 1, 1, TIFF_SHORT, FIELD_IGNORE, + TRUE, FALSE, "GrayResponseUnit" }, + { TIFFTAG_GRAYRESPONSECURVE,-1,-1, TIFF_SHORT, FIELD_IGNORE, + TRUE, FALSE, "GrayResponseCurve" }, + { TIFFTAG_RESOLUTIONUNIT, 1, 1, TIFF_SHORT, FIELD_RESOLUTIONUNIT, + FALSE, FALSE, "ResolutionUnit" }, + { TIFFTAG_PAGENUMBER, 2, 2, TIFF_SHORT, FIELD_PAGENUMBER, + TRUE, FALSE, "PageNumber" }, + { TIFFTAG_COLORRESPONSEUNIT, 1, 1, TIFF_SHORT, FIELD_IGNORE, + TRUE, FALSE, "ColorResponseUnit" }, +#ifdef COLORIMETRY_SUPPORT + { TIFFTAG_TRANSFERFUNCTION, -1,-1, TIFF_SHORT, FIELD_TRANSFERFUNCTION, + TRUE, FALSE, "TransferFunction" }, +#endif + { TIFFTAG_SOFTWARE, -1,-1, TIFF_ASCII, FIELD_SOFTWARE, + TRUE, FALSE, "Software" }, + { TIFFTAG_DATETIME, 20,20, TIFF_ASCII, FIELD_DATETIME, + TRUE, FALSE, "DateTime" }, + { TIFFTAG_ARTIST, -1,-1, TIFF_ASCII, FIELD_ARTIST, + TRUE, FALSE, "Artist" }, + { TIFFTAG_HOSTCOMPUTER, -1,-1, TIFF_ASCII, FIELD_HOSTCOMPUTER, + TRUE, FALSE, "HostComputer" }, +#ifdef COLORIMETRY_SUPPORT + { TIFFTAG_WHITEPOINT, 2, 2, TIFF_RATIONAL,FIELD_WHITEPOINT, + TRUE, FALSE, "WhitePoint" }, + { TIFFTAG_PRIMARYCHROMATICITIES,6,6,TIFF_RATIONAL,FIELD_PRIMARYCHROMAS, + TRUE, FALSE, "PrimaryChromaticities" }, +#endif + { TIFFTAG_COLORMAP, -1,-1, TIFF_SHORT, FIELD_COLORMAP, + TRUE, FALSE, "ColorMap" }, + { TIFFTAG_HALFTONEHINTS, 2, 2, TIFF_SHORT, FIELD_HALFTONEHINTS, + TRUE, FALSE, "HalftoneHints" }, + { TIFFTAG_TILEWIDTH, 1, 1, TIFF_LONG, FIELD_TILEDIMENSIONS, + FALSE, FALSE, "TileWidth" }, + { TIFFTAG_TILEWIDTH, 1, 1, TIFF_SHORT, FIELD_TILEDIMENSIONS, + FALSE, FALSE, "TileWidth" }, + { TIFFTAG_TILELENGTH, 1, 1, TIFF_LONG, FIELD_TILEDIMENSIONS, + FALSE, FALSE, "TileLength" }, + { TIFFTAG_TILELENGTH, 1, 1, TIFF_SHORT, FIELD_TILEDIMENSIONS, + FALSE, FALSE, "TileLength" }, + { TIFFTAG_TILEOFFSETS, -1, 1, TIFF_LONG, FIELD_STRIPOFFSETS, + FALSE, FALSE, "TileOffsets" }, + { TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_LONG, FIELD_STRIPBYTECOUNTS, + FALSE, FALSE, "TileByteCounts" }, + { TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_SHORT, FIELD_STRIPBYTECOUNTS, + FALSE, FALSE, "TileByteCounts" }, +#ifdef TIFFTAG_SUBIFD + { TIFFTAG_SUBIFD, -1,-1, TIFF_LONG, FIELD_SUBIFD, + TRUE, TRUE, "SubIFD" }, +#endif +#ifdef CMYK_SUPPORT /* 6.0 CMYK tags */ + { TIFFTAG_INKSET, 1, 1, TIFF_SHORT, FIELD_INKSET, + FALSE, FALSE, "InkSet" }, + { TIFFTAG_INKNAMES, -1,-1, TIFF_ASCII, FIELD_INKNAMES, + TRUE, TRUE, "InkNames" }, + { TIFFTAG_NUMBEROFINKS, 1, 1, TIFF_SHORT, FIELD_NUMBEROFINKS, + TRUE, FALSE, "NumberOfInks" }, + { TIFFTAG_DOTRANGE, 2, 2, TIFF_SHORT, FIELD_DOTRANGE, + FALSE, FALSE, "DotRange" }, + { TIFFTAG_DOTRANGE, 2, 2, TIFF_BYTE, FIELD_DOTRANGE, + FALSE, FALSE, "DotRange" }, + { TIFFTAG_TARGETPRINTER, -1,-1, TIFF_ASCII, FIELD_TARGETPRINTER, + TRUE, FALSE, "TargetPrinter" }, +#endif + { TIFFTAG_EXTRASAMPLES, -1,-1, TIFF_SHORT, FIELD_EXTRASAMPLES, + FALSE, FALSE, "ExtraSamples" }, +/* XXX for bogus Adobe Photoshop v2.5 files */ + { TIFFTAG_EXTRASAMPLES, -1,-1, TIFF_BYTE, FIELD_EXTRASAMPLES, + FALSE, FALSE, "ExtraSamples" }, + { TIFFTAG_SAMPLEFORMAT, -1,-1, TIFF_SHORT, FIELD_SAMPLEFORMAT, + FALSE, FALSE, "SampleFormat" }, + { TIFFTAG_SMINSAMPLEVALUE, -2,-1, TIFF_ANY, FIELD_SMINSAMPLEVALUE, + TRUE, FALSE, "SMinSampleValue" }, + { TIFFTAG_SMAXSAMPLEVALUE, -2,-1, TIFF_ANY, FIELD_SMAXSAMPLEVALUE, + TRUE, FALSE, "SMaxSampleValue" }, +#ifdef YCBCR_SUPPORT /* 6.0 YCbCr tags */ + { TIFFTAG_YCBCRCOEFFICIENTS, 3, 3, TIFF_RATIONAL, FIELD_YCBCRCOEFFICIENTS, + FALSE, FALSE, "YCbCrCoefficients" }, + { TIFFTAG_YCBCRSUBSAMPLING, 2, 2, TIFF_SHORT, FIELD_YCBCRSUBSAMPLING, + FALSE, FALSE, "YCbCrSubsampling" }, + { TIFFTAG_YCBCRPOSITIONING, 1, 1, TIFF_SHORT, FIELD_YCBCRPOSITIONING, + FALSE, FALSE, "YCbCrPositioning" }, +#endif +#ifdef COLORIMETRY_SUPPORT + { TIFFTAG_REFERENCEBLACKWHITE,6,6,TIFF_RATIONAL, FIELD_REFBLACKWHITE, + TRUE, FALSE, "ReferenceBlackWhite" }, +/* XXX temporarily accept LONG for backwards compatibility */ + { TIFFTAG_REFERENCEBLACKWHITE,6,6,TIFF_LONG, FIELD_REFBLACKWHITE, + TRUE, FALSE, "ReferenceBlackWhite" }, +#endif +/* begin SGI tags */ + { TIFFTAG_MATTEING, 1, 1, TIFF_SHORT, FIELD_EXTRASAMPLES, + FALSE, FALSE, "Matteing" }, + { TIFFTAG_DATATYPE, -2,-1, TIFF_SHORT, FIELD_SAMPLEFORMAT, + FALSE, FALSE, "DataType" }, + { TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_LONG, FIELD_IMAGEDEPTH, + FALSE, FALSE, "ImageDepth" }, + { TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_SHORT, FIELD_IMAGEDEPTH, + FALSE, FALSE, "ImageDepth" }, + { TIFFTAG_TILEDEPTH, 1, 1, TIFF_LONG, FIELD_TILEDEPTH, + FALSE, FALSE, "TileDepth" }, + { TIFFTAG_TILEDEPTH, 1, 1, TIFF_SHORT, FIELD_TILEDEPTH, + FALSE, FALSE, "TileDepth" }, +/* end SGI tags */ +#ifdef IPTC_SUPPORT +#ifdef PHOTOSHOP_SUPPORT + { TIFFTAG_RICHTIFFIPTC, -1,-1, TIFF_LONG, FIELD_RICHTIFFIPTC, + FALSE, TRUE, "RichTIFFIPTC" }, +#else + { TIFFTAG_RICHTIFFIPTC, -1,-3, TIFF_UNDEFINED, FIELD_RICHTIFFIPTC, + FALSE, TRUE, "RichTIFFIPTC" }, +#endif +#endif +#ifdef PHOTOSHOP_SUPPORT + { TIFFTAG_PHOTOSHOP, -1,-3, TIFF_UNDEFINED, FIELD_PHOTOSHOP, + FALSE, TRUE, "Photoshop" }, + { TIFFTAG_PHOTOSHOP, -1,-1, TIFF_BYTE, FIELD_PHOTOSHOP, + FALSE, TRUE, "Photoshop" }, +#endif +#ifdef ICC_SUPPORT + { TIFFTAG_ICCPROFILE, -1,-3, TIFF_UNDEFINED, FIELD_ICCPROFILE, + FALSE, TRUE, "ICC Profile" }, +#endif + { TIFFTAG_STONITS, 1, 1, TIFF_DOUBLE, FIELD_STONITS, + FALSE, FALSE, "StoNits" }, +/* begin Pixar tags */ + { TIFFTAG_PIXAR_IMAGEFULLWIDTH, 1, 1, TIFF_LONG, FIELD_IMAGEFULLWIDTH, + TRUE, FALSE, "ImageFullWidth" }, + { TIFFTAG_PIXAR_IMAGEFULLLENGTH, 1, 1, TIFF_LONG, FIELD_IMAGEFULLLENGTH, + TRUE, FALSE, "ImageFullLength" }, + { TIFFTAG_PIXAR_TEXTUREFORMAT, -1,-1, TIFF_ASCII, FIELD_TEXTUREFORMAT, + TRUE, FALSE, "TextureFormat" }, + { TIFFTAG_PIXAR_WRAPMODES, -1,-1, TIFF_ASCII, FIELD_WRAPMODES, + TRUE, FALSE, "TextureWrapModes" }, + { TIFFTAG_PIXAR_FOVCOT, 1, 1, TIFF_FLOAT, FIELD_FOVCOT, + TRUE, FALSE, "FieldOfViewCotan" }, + { TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN, 16,16, TIFF_FLOAT, + FIELD_MATRIX_WORLDTOSCREEN, TRUE, FALSE, "MatrixWorldToScreen" }, + { TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA, 16,16, TIFF_FLOAT, + FIELD_MATRIX_WORLDTOCAMERA, TRUE, FALSE, "MatrixWorldToCamera" }, +/* end Pixar tags */ +}; +#define N(a) (sizeof (a) / sizeof (a[0])) + +void +_TIFFSetupFieldInfo(TIFF* tif) +{ + if (tif->tif_fieldinfo) { + _TIFFfree(tif->tif_fieldinfo); + tif->tif_nfields = 0; + } + _TIFFMergeFieldInfo(tif, tiffFieldInfo, N(tiffFieldInfo)); +} + +static int +tagCompare(const void* a, const void* b) +{ + const TIFFFieldInfo* ta = *(const TIFFFieldInfo**) a; + const TIFFFieldInfo* tb = *(const TIFFFieldInfo**) b; + /* NB: be careful of return values for 16-bit platforms */ + if (ta->field_tag != tb->field_tag) + return (ta->field_tag < tb->field_tag ? -1 : 1); + else + return (tb->field_type < ta->field_type ? -1 : 1); +} + +void +_TIFFMergeFieldInfo(TIFF* tif, const TIFFFieldInfo info[], int n) +{ + TIFFFieldInfo** tp; + int i; + + if (tif->tif_nfields > 0) { + tif->tif_fieldinfo = (TIFFFieldInfo**) + _TIFFrealloc(tif->tif_fieldinfo, + (tif->tif_nfields+n) * sizeof (TIFFFieldInfo*)); + } else { + tif->tif_fieldinfo = (TIFFFieldInfo**) + _TIFFmalloc(n * sizeof (TIFFFieldInfo*)); + } + tp = &tif->tif_fieldinfo[tif->tif_nfields]; + for (i = 0; i < n; i++) + tp[i] = (TIFFFieldInfo*) &info[i]; /* XXX */ + /* + * NB: the core tags are presumed sorted correctly. + */ + if (tif->tif_nfields > 0) + qsort(tif->tif_fieldinfo, (size_t) (tif->tif_nfields += n), + sizeof (TIFFFieldInfo*), tagCompare); + else + tif->tif_nfields += n; +} + +void +_TIFFPrintFieldInfo(TIFF* tif, FILE* fd) +{ + int i; + + fprintf(fd, "%s: \n", tif->tif_name); + for (i = 0; i < tif->tif_nfields; i++) { + const TIFFFieldInfo* fip = tif->tif_fieldinfo[i]; + fprintf(fd, "field[%2d] %5lu, %2d, %2d, %d, %2d, %5s, %5s, %s\n" + , i + , (unsigned long) fip->field_tag + , fip->field_readcount, fip->field_writecount + , fip->field_type + , fip->field_bit + , fip->field_oktochange ? "TRUE" : "FALSE" + , fip->field_passcount ? "TRUE" : "FALSE" + , fip->field_name + ); + } +} + +const int tiffDataWidth[] = { + 1, /* nothing */ + 1, /* TIFF_BYTE */ + 1, /* TIFF_ASCII */ + 2, /* TIFF_SHORT */ + 4, /* TIFF_LONG */ + 8, /* TIFF_RATIONAL */ + 1, /* TIFF_SBYTE */ + 1, /* TIFF_UNDEFINED */ + 2, /* TIFF_SSHORT */ + 4, /* TIFF_SLONG */ + 8, /* TIFF_SRATIONAL */ + 4, /* TIFF_FLOAT */ + 8, /* TIFF_DOUBLE */ +}; + +/* + * Return nearest TIFFDataType to the sample type of an image. + */ +TIFFDataType +_TIFFSampleToTagType(TIFF* tif) +{ + int bps = (int) TIFFhowmany(tif->tif_dir.td_bitspersample, 8); + + switch (tif->tif_dir.td_sampleformat) { + case SAMPLEFORMAT_IEEEFP: + return (bps == 4 ? TIFF_FLOAT : TIFF_DOUBLE); + case SAMPLEFORMAT_INT: + return (bps <= 1 ? TIFF_SBYTE : + bps <= 2 ? TIFF_SSHORT : TIFF_SLONG); + case SAMPLEFORMAT_UINT: + return (bps <= 1 ? TIFF_BYTE : + bps <= 2 ? TIFF_SHORT : TIFF_LONG); + case SAMPLEFORMAT_VOID: + return (TIFF_UNDEFINED); + } + /*NOTREACHED*/ + return (TIFF_UNDEFINED); +} + +const TIFFFieldInfo* +_TIFFFindFieldInfo(TIFF* tif, ttag_t tag, TIFFDataType dt) +{ + static const TIFFFieldInfo *last = NULL; + int i, n; + + if (last && last->field_tag == tag && + (dt == TIFF_ANY || dt == last->field_type)) + return (last); + /* NB: if table gets big, use sorted search (e.g. binary search) */ + for (i = 0, n = tif->tif_nfields; i < n; i++) { + const TIFFFieldInfo* fip = tif->tif_fieldinfo[i]; + if (fip->field_tag == tag && + (dt == TIFF_ANY || fip->field_type == dt)) + return (last = fip); + } + return ((const TIFFFieldInfo *)0); +} + +#include +#include + +const TIFFFieldInfo* +_TIFFFieldWithTag(TIFF* tif, ttag_t tag) +{ + const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); + if (!fip) { + TIFFError("TIFFFieldWithTag", + "Internal error, unknown tag 0x%x", (u_int) tag); + assert(fip != NULL); + /*NOTREACHED*/ + } + return (fip); +} diff --git a/libtiff/tif_dirread.c b/libtiff/tif_dirread.c new file mode 100755 index 0000000..aa73cc1 --- /dev/null +++ b/libtiff/tif_dirread.c @@ -0,0 +1,1375 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_dirread.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * Directory Read Support Routines. + */ +#include "tiffiop.h" + +#define IGNORE 0 /* tag placeholder used below */ + +#if HAVE_IEEEFP +#define TIFFCvtIEEEFloatToNative(tif, n, fp) +#define TIFFCvtIEEEDoubleToNative(tif, n, dp) +#else +extern void TIFFCvtIEEEFloatToNative(TIFF*, uint32, float*); +extern void TIFFCvtIEEEDoubleToNative(TIFF*, uint32, double*); +#endif + +static void EstimateStripByteCounts(TIFF*, TIFFDirEntry*, uint16); +static void MissingRequired(TIFF*, const char*); +static int CheckDirCount(TIFF*, TIFFDirEntry*, uint32); +static tsize_t TIFFFetchData(TIFF*, TIFFDirEntry*, char*); +static tsize_t TIFFFetchString(TIFF*, TIFFDirEntry*, char*); +static float TIFFFetchRational(TIFF*, TIFFDirEntry*); +static int TIFFFetchNormalTag(TIFF*, TIFFDirEntry*); +static int TIFFFetchPerSampleShorts(TIFF*, TIFFDirEntry*, int*); +static int TIFFFetchPerSampleAnys(TIFF*, TIFFDirEntry*, double*); +static int TIFFFetchShortArray(TIFF*, TIFFDirEntry*, uint16*); +static int TIFFFetchStripThing(TIFF*, TIFFDirEntry*, long, uint32**); +static int TIFFFetchExtraSamples(TIFF*, TIFFDirEntry*); +static int TIFFFetchRefBlackWhite(TIFF*, TIFFDirEntry*); +static float TIFFFetchFloat(TIFF*, TIFFDirEntry*); +static int TIFFFetchFloatArray(TIFF*, TIFFDirEntry*, float*); +static int TIFFFetchDoubleArray(TIFF*, TIFFDirEntry*, double*); +static int TIFFFetchAnyArray(TIFF*, TIFFDirEntry*, double*); +static int TIFFFetchShortPair(TIFF*, TIFFDirEntry*); +static void ChopUpSingleUncompressedStrip(TIFF*); + +static char * +CheckMalloc(TIFF* tif, tsize_t n, const char* what) +{ + char *cp = (char*)_TIFFmalloc(n); + if (cp == NULL) + TIFFError(tif->tif_name, "No space %s", what); + return (cp); +} + +/* + * Read the next TIFF directory from a file + * and convert it to the internal format. + * We read directories sequentially. + */ +int +TIFFReadDirectory(TIFF* tif) +{ + register TIFFDirEntry* dp; + register int n; + register TIFFDirectory* td; + TIFFDirEntry* dir; + int iv; + long v; + double dv; + const TIFFFieldInfo* fip; + int fix; + uint16 dircount; + toff_t nextdiroff; + char* cp; + int diroutoforderwarning = 0; + + tif->tif_diroff = tif->tif_nextdiroff; + if (tif->tif_diroff == 0) /* no more directories */ + return (0); + /* + * Cleanup any previous compression state. + */ + (*tif->tif_cleanup)(tif); + tif->tif_curdir++; + nextdiroff = 0; + if (!isMapped(tif)) { + if (!SeekOK(tif, tif->tif_diroff)) { + TIFFError(tif->tif_name, + "Seek error accessing TIFF directory"); + return (0); + } + if (!ReadOK(tif, &dircount, sizeof (uint16))) { + TIFFError(tif->tif_name, + "Can not read TIFF directory count"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + dir = (TIFFDirEntry *)CheckMalloc(tif, + dircount * sizeof (TIFFDirEntry), "to read TIFF directory"); + if (dir == NULL) + return (0); + if (!ReadOK(tif, dir, dircount*sizeof (TIFFDirEntry))) { + TIFFError(tif->tif_name, "Can not read TIFF directory"); + goto bad; + } + /* + * Read offset to next directory for sequential scans. + */ + (void) ReadOK(tif, &nextdiroff, sizeof (uint32)); + } else { + toff_t off = tif->tif_diroff; + + if (off + sizeof (uint16) > tif->tif_size) { + TIFFError(tif->tif_name, + "Can not read TIFF directory count"); + return (0); + } else + _TIFFmemcpy(&dircount, tif->tif_base + off, sizeof (uint16)); + off += sizeof (uint16); + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + dir = (TIFFDirEntry *)CheckMalloc(tif, + dircount * sizeof (TIFFDirEntry), "to read TIFF directory"); + if (dir == NULL) + return (0); + if (off + dircount*sizeof (TIFFDirEntry) > tif->tif_size) { + TIFFError(tif->tif_name, "Can not read TIFF directory"); + goto bad; + } else + _TIFFmemcpy(dir, tif->tif_base + off, + dircount*sizeof (TIFFDirEntry)); + off += dircount* sizeof (TIFFDirEntry); + if (off + sizeof (uint32) <= tif->tif_size) + _TIFFmemcpy(&nextdiroff, tif->tif_base+off, sizeof (uint32)); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&nextdiroff); + tif->tif_nextdiroff = nextdiroff; + + tif->tif_flags &= ~TIFF_BEENWRITING; /* reset before new dir */ + /* + * Setup default value and then make a pass over + * the fields to check type and tag information, + * and to extract info required to size data + * structures. A second pass is made afterwards + * to read in everthing not taken in the first pass. + */ + td = &tif->tif_dir; + /* free any old stuff and reinit */ + TIFFFreeDirectory(tif); + TIFFDefaultDirectory(tif); + /* + * Electronic Arts writes gray-scale TIFF files + * without a PlanarConfiguration directory entry. + * Thus we setup a default value here, even though + * the TIFF spec says there is no default value. + */ + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + + /* + * Sigh, we must make a separate pass through the + * directory for the following reason: + * + * We must process the Compression tag in the first pass + * in order to merge in codec-private tag definitions (otherwise + * we may get complaints about unknown tags). However, the + * Compression tag may be dependent on the SamplesPerPixel + * tag value because older TIFF specs permited Compression + * to be written as a SamplesPerPixel-count tag entry. + * Thus if we don't first figure out the correct SamplesPerPixel + * tag value then we may end up ignoring the Compression tag + * value because it has an incorrect count value (if the + * true value of SamplesPerPixel is not 1). + * + * It sure would have been nice if Aldus had really thought + * this stuff through carefully. + */ + for (dp = dir, n = dircount; n > 0; n--, dp++) { + if (tif->tif_flags & TIFF_SWAB) { + TIFFSwabArrayOfShort(&dp->tdir_tag, 2); + TIFFSwabArrayOfLong(&dp->tdir_count, 2); + } + if (dp->tdir_tag == TIFFTAG_SAMPLESPERPIXEL) { + if (!TIFFFetchNormalTag(tif, dp)) + goto bad; + dp->tdir_tag = IGNORE; + } + } + /* + * First real pass over the directory. + */ + fix = 0; + for (dp = dir, n = dircount; n > 0; n--, dp++) { + + /* + * Find the field information entry for this tag. + * Added check for tags to ignore ... [BFC] + */ + if( TIFFReassignTagToIgnore(TIS_EXTRACT, dp->tdir_tag) ) + dp->tdir_tag = IGNORE; + + if (dp->tdir_tag == IGNORE) + continue; + + /* + * Silicon Beach (at least) writes unordered + * directory tags (violating the spec). Handle + * it here, but be obnoxious (maybe they'll fix it?). + */ + if (dp->tdir_tag < tif->tif_fieldinfo[fix]->field_tag) { + if (!diroutoforderwarning) { + TIFFWarning(tif->tif_name, + "invalid TIFF directory; tags are not sorted in ascending order"); + diroutoforderwarning = 1; + } + fix = 0; /* O(n^2) */ + } + while (fix < tif->tif_nfields && + tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag) + fix++; + if (fix == tif->tif_nfields || + tif->tif_fieldinfo[fix]->field_tag != dp->tdir_tag) { + TIFFWarning(tif->tif_name, + "unknown field with tag %d (0x%x) ignored", + dp->tdir_tag, dp->tdir_tag); + dp->tdir_tag = IGNORE; + fix = 0; /* restart search */ + continue; + } + /* + * Null out old tags that we ignore. + */ + if (tif->tif_fieldinfo[fix]->field_bit == FIELD_IGNORE) { + ignore: + dp->tdir_tag = IGNORE; + continue; + } + /* + * Check data type. + */ + fip = tif->tif_fieldinfo[fix]; + while (dp->tdir_type != (u_short) fip->field_type) { + if (fip->field_type == TIFF_ANY) /* wildcard */ + break; + fip++, fix++; + if (fix == tif->tif_nfields || + fip->field_tag != dp->tdir_tag) { + TIFFWarning(tif->tif_name, + "wrong data type %d for \"%s\"; tag ignored", + dp->tdir_type, fip[-1].field_name); + goto ignore; + } + } + /* + * Check count if known in advance. + */ + if (fip->field_readcount != TIFF_VARIABLE) { + uint32 expected = (fip->field_readcount == TIFF_SPP) ? + (uint32) td->td_samplesperpixel : + (uint32) fip->field_readcount; + if (!CheckDirCount(tif, dp, expected)) + goto ignore; + } + + switch (dp->tdir_tag) { + case TIFFTAG_COMPRESSION: + /* + * The 5.0 spec says the Compression tag has + * one value, while earlier specs say it has + * one value per sample. Because of this, we + * accept the tag if one value is supplied. + */ + if (dp->tdir_count == 1) { + v = TIFFExtractData(tif, + dp->tdir_type, dp->tdir_offset); + if (!TIFFSetField(tif, dp->tdir_tag, (int)v)) + goto bad; + break; + } + if (!TIFFFetchPerSampleShorts(tif, dp, &iv) || + !TIFFSetField(tif, dp->tdir_tag, iv)) + goto bad; + dp->tdir_tag = IGNORE; + break; + case TIFFTAG_STRIPOFFSETS: + case TIFFTAG_STRIPBYTECOUNTS: + case TIFFTAG_TILEOFFSETS: + case TIFFTAG_TILEBYTECOUNTS: + TIFFSetFieldBit(tif, fip->field_bit); + break; + case TIFFTAG_IMAGEWIDTH: + case TIFFTAG_IMAGELENGTH: + case TIFFTAG_IMAGEDEPTH: + case TIFFTAG_TILELENGTH: + case TIFFTAG_TILEWIDTH: + case TIFFTAG_TILEDEPTH: + case TIFFTAG_PLANARCONFIG: + case TIFFTAG_ROWSPERSTRIP: + if (!TIFFFetchNormalTag(tif, dp)) + goto bad; + dp->tdir_tag = IGNORE; + break; + case TIFFTAG_EXTRASAMPLES: + (void) TIFFFetchExtraSamples(tif, dp); + dp->tdir_tag = IGNORE; + break; + } + } + + /* + * Allocate directory structure and setup defaults. + */ + if (!TIFFFieldSet(tif, FIELD_IMAGEDIMENSIONS)) { + MissingRequired(tif, "ImageLength"); + goto bad; + } + if (!TIFFFieldSet(tif, FIELD_PLANARCONFIG)) { + MissingRequired(tif, "PlanarConfiguration"); + goto bad; + } + /* + * Setup appropriate structures (by strip or by tile) + */ + if (!TIFFFieldSet(tif, FIELD_TILEDIMENSIONS)) { + td->td_nstrips = TIFFNumberOfStrips(tif); + td->td_tilewidth = td->td_imagewidth; + td->td_tilelength = td->td_rowsperstrip; + td->td_tiledepth = td->td_imagedepth; + tif->tif_flags &= ~TIFF_ISTILED; + } else { + td->td_nstrips = TIFFNumberOfTiles(tif); + tif->tif_flags |= TIFF_ISTILED; + } + td->td_stripsperimage = td->td_nstrips; + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) + td->td_stripsperimage /= td->td_samplesperpixel; + if (!TIFFFieldSet(tif, FIELD_STRIPOFFSETS)) { + MissingRequired(tif, + isTiled(tif) ? "TileOffsets" : "StripOffsets"); + goto bad; + } + + /* + * Second pass: extract other information. + */ + for (dp = dir, n = dircount; n > 0; n--, dp++) { + if (dp->tdir_tag == IGNORE) + continue; + switch (dp->tdir_tag) { + case TIFFTAG_MINSAMPLEVALUE: + case TIFFTAG_MAXSAMPLEVALUE: + case TIFFTAG_BITSPERSAMPLE: + /* + * The 5.0 spec says the Compression tag has + * one value, while earlier specs say it has + * one value per sample. Because of this, we + * accept the tag if one value is supplied. + * + * The MinSampleValue, MaxSampleValue and + * BitsPerSample tags are supposed to be written + * as one value/sample, but some vendors incorrectly + * write one value only -- so we accept that + * as well (yech). + */ + if (dp->tdir_count == 1) { + v = TIFFExtractData(tif, + dp->tdir_type, dp->tdir_offset); + if (!TIFFSetField(tif, dp->tdir_tag, (int)v)) + goto bad; + break; + } + /* fall thru... */ + case TIFFTAG_DATATYPE: + case TIFFTAG_SAMPLEFORMAT: + if (!TIFFFetchPerSampleShorts(tif, dp, &iv) || + !TIFFSetField(tif, dp->tdir_tag, iv)) + goto bad; + break; + case TIFFTAG_SMINSAMPLEVALUE: + case TIFFTAG_SMAXSAMPLEVALUE: + if (!TIFFFetchPerSampleAnys(tif, dp, &dv) || + !TIFFSetField(tif, dp->tdir_tag, dv)) + goto bad; + break; + case TIFFTAG_STRIPOFFSETS: + case TIFFTAG_TILEOFFSETS: + if (!TIFFFetchStripThing(tif, dp, + td->td_nstrips, &td->td_stripoffset)) + goto bad; + break; + case TIFFTAG_STRIPBYTECOUNTS: + case TIFFTAG_TILEBYTECOUNTS: + if (!TIFFFetchStripThing(tif, dp, + td->td_nstrips, &td->td_stripbytecount)) + goto bad; + break; + case TIFFTAG_COLORMAP: + case TIFFTAG_TRANSFERFUNCTION: + /* + * TransferFunction can have either 1x or 3x data + * values; Colormap can have only 3x items. + */ + v = 1L<td_bitspersample; + if (dp->tdir_tag == TIFFTAG_COLORMAP || + dp->tdir_count != (uint32) v) { + if (!CheckDirCount(tif, dp, (uint32)(3*v))) + break; + } + v *= sizeof (uint16); + cp = CheckMalloc(tif, dp->tdir_count * sizeof (uint16), + "to read \"TransferFunction\" tag"); + if (cp != NULL) { + if (TIFFFetchData(tif, dp, cp)) { + /* + * This deals with there being only + * one array to apply to all samples. + */ + uint32 c = + (uint32)1 << td->td_bitspersample; + if (dp->tdir_count == c) + v = 0; + TIFFSetField(tif, dp->tdir_tag, + cp, cp+v, cp+2*v); + } + _TIFFfree(cp); + } + break; + case TIFFTAG_PAGENUMBER: + case TIFFTAG_HALFTONEHINTS: + case TIFFTAG_YCBCRSUBSAMPLING: + case TIFFTAG_DOTRANGE: + (void) TIFFFetchShortPair(tif, dp); + break; +#ifdef COLORIMETRY_SUPPORT + case TIFFTAG_REFERENCEBLACKWHITE: + (void) TIFFFetchRefBlackWhite(tif, dp); + break; +#endif +/* BEGIN REV 4.0 COMPATIBILITY */ + case TIFFTAG_OSUBFILETYPE: + v = 0; + switch (TIFFExtractData(tif, dp->tdir_type, + dp->tdir_offset)) { + case OFILETYPE_REDUCEDIMAGE: + v = FILETYPE_REDUCEDIMAGE; + break; + case OFILETYPE_PAGE: + v = FILETYPE_PAGE; + break; + } + if (v) + (void) TIFFSetField(tif, + TIFFTAG_SUBFILETYPE, (int)v); + break; +/* END REV 4.0 COMPATIBILITY */ + default: + (void) TIFFFetchNormalTag(tif, dp); + break; + } + } + /* + * Verify Palette image has a Colormap. + */ + if (td->td_photometric == PHOTOMETRIC_PALETTE && + !TIFFFieldSet(tif, FIELD_COLORMAP)) { + MissingRequired(tif, "Colormap"); + goto bad; + } + /* + * Attempt to deal with a missing StripByteCounts tag. + */ + if (!TIFFFieldSet(tif, FIELD_STRIPBYTECOUNTS)) { + /* + * Some manufacturers violate the spec by not giving + * the size of the strips. In this case, assume there + * is one uncompressed strip of data. + */ + if ((td->td_planarconfig == PLANARCONFIG_CONTIG && + td->td_nstrips > 1) || + (td->td_planarconfig == PLANARCONFIG_SEPARATE && + td->td_nstrips != td->td_samplesperpixel)) { + MissingRequired(tif, "StripByteCounts"); + goto bad; + } + TIFFWarning(tif->tif_name, +"TIFF directory is missing required \"%s\" field, calculating from imagelength", + _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name); + EstimateStripByteCounts(tif, dir, dircount); +#define BYTECOUNTLOOKSBAD \ + (td->td_stripbytecount[0] == 0 || \ + (td->td_compression == COMPRESSION_NONE && \ + td->td_stripbytecount[0] > TIFFGetFileSize(tif) - td->td_stripoffset[0])) + } else if (td->td_nstrips == 1 && BYTECOUNTLOOKSBAD) { + /* + * Plexus (and others) sometimes give a value + * of zero for a tag when they don't know what + * the correct value is! Try and handle the + * simple case of estimating the size of a one + * strip image. + */ + TIFFWarning(tif->tif_name, + "Bogus \"%s\" field, ignoring and calculating from imagelength", + _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name); + EstimateStripByteCounts(tif, dir, dircount); + } + if (dir) + _TIFFfree((char *)dir); + if (!TIFFFieldSet(tif, FIELD_MAXSAMPLEVALUE)) + td->td_maxsamplevalue = (uint16)((1L<td_bitspersample)-1); + /* + * Setup default compression scheme. + */ + if (!TIFFFieldSet(tif, FIELD_COMPRESSION)) + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + /* + * Some manufacturers make life difficult by writing + * large amounts of uncompressed data as a single strip. + * This is contrary to the recommendations of the spec. + * The following makes an attempt at breaking such images + * into strips closer to the recommended 8k bytes. A + * side effect, however, is that the RowsPerStrip tag + * value may be changed. + */ + if (td->td_nstrips == 1 && td->td_compression == COMPRESSION_NONE && + (tif->tif_flags & (TIFF_STRIPCHOP|TIFF_ISTILED)) == TIFF_STRIPCHOP) + ChopUpSingleUncompressedStrip(tif); + /* + * Reinitialize i/o since we are starting on a new directory. + */ + tif->tif_row = (uint32) -1; + tif->tif_curstrip = (tstrip_t) -1; + tif->tif_col = (uint32) -1; + tif->tif_curtile = (ttile_t) -1; + tif->tif_tilesize = TIFFTileSize(tif); + tif->tif_scanlinesize = TIFFScanlineSize(tif); + return (1); +bad: + if (dir) + _TIFFfree(dir); + return (0); +} + +static void +EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) +{ + register TIFFDirEntry *dp; + register TIFFDirectory *td = &tif->tif_dir; + uint16 i; + + if (td->td_stripbytecount) + _TIFFfree(td->td_stripbytecount); + td->td_stripbytecount = (uint32*) + CheckMalloc(tif, td->td_nstrips * sizeof (uint32), + "for \"StripByteCounts\" array"); + if (td->td_compression != COMPRESSION_NONE) { + uint32 space = (uint32)(sizeof (TIFFHeader) + + sizeof (uint16) + + (dircount * sizeof (TIFFDirEntry)) + + sizeof (uint32)); + toff_t filesize = TIFFGetFileSize(tif); + uint16 n; + + /* calculate amount of space used by indirect values */ + for (dp = dir, n = dircount; n > 0; n--, dp++) { + uint32 cc = dp->tdir_count*tiffDataWidth[dp->tdir_type]; + if (cc > sizeof (uint32)) + space += cc; + } + space = filesize - space; + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) + space /= td->td_samplesperpixel; + for (i = 0; i < td->td_nstrips; i++) + td->td_stripbytecount[i] = space; + /* + * This gross hack handles the case were the offset to + * the last strip is past the place where we think the strip + * should begin. Since a strip of data must be contiguous, + * it's safe to assume that we've overestimated the amount + * of data in the strip and trim this number back accordingly. + */ + i--; + if (((toff_t)(td->td_stripoffset[i]+td->td_stripbytecount[i])) + > filesize) + td->td_stripbytecount[i] = + filesize - td->td_stripoffset[i]; + } else { + uint32 rowbytes = TIFFScanlineSize(tif); + uint32 rowsperstrip = td->td_imagelength/td->td_stripsperimage; + for (i = 0; i < td->td_nstrips; i++) + td->td_stripbytecount[i] = rowbytes*rowsperstrip; + } + TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS); + if (!TIFFFieldSet(tif, FIELD_ROWSPERSTRIP)) + td->td_rowsperstrip = td->td_imagelength; +} + +static void +MissingRequired(TIFF* tif, const char* tagname) +{ + TIFFError(tif->tif_name, + "TIFF directory is missing required \"%s\" field", tagname); +} + +/* + * Check the count field of a directory + * entry against a known value. The caller + * is expected to skip/ignore the tag if + * there is a mismatch. + */ +static int +CheckDirCount(TIFF* tif, TIFFDirEntry* dir, uint32 count) +{ + if (count != dir->tdir_count) { + TIFFWarning(tif->tif_name, + "incorrect count for field \"%s\" (%lu, expecting %lu); tag ignored", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, + dir->tdir_count, count); + return (0); + } + return (1); +} + +/* + * Fetch a contiguous directory item. + */ +static tsize_t +TIFFFetchData(TIFF* tif, TIFFDirEntry* dir, char* cp) +{ + int w = tiffDataWidth[dir->tdir_type]; + tsize_t cc = dir->tdir_count * w; + + if (!isMapped(tif)) { + if (!SeekOK(tif, dir->tdir_offset)) + goto bad; + if (!ReadOK(tif, cp, cc)) + goto bad; + } else { + if (dir->tdir_offset + cc > tif->tif_size) + goto bad; + _TIFFmemcpy(cp, tif->tif_base + dir->tdir_offset, cc); + } + if (tif->tif_flags & TIFF_SWAB) { + switch (dir->tdir_type) { + case TIFF_SHORT: + case TIFF_SSHORT: + TIFFSwabArrayOfShort((uint16*) cp, dir->tdir_count); + break; + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_FLOAT: + TIFFSwabArrayOfLong((uint32*) cp, dir->tdir_count); + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + TIFFSwabArrayOfLong((uint32*) cp, 2*dir->tdir_count); + break; + case TIFF_DOUBLE: + TIFFSwabArrayOfDouble((double*) cp, dir->tdir_count); + break; + } + } + return (cc); +bad: + TIFFError(tif->tif_name, "Error fetching data for field \"%s\"", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); + return ((tsize_t) 0); +} + +/* + * Fetch an ASCII item from the file. + */ +static tsize_t +TIFFFetchString(TIFF* tif, TIFFDirEntry* dir, char* cp) +{ + if (dir->tdir_count <= 4) { + uint32 l = dir->tdir_offset; + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&l); + _TIFFmemcpy(cp, &l, dir->tdir_count); + return (1); + } + return (TIFFFetchData(tif, dir, cp)); +} + +/* + * Convert numerator+denominator to float. + */ +static int +cvtRational(TIFF* tif, TIFFDirEntry* dir, uint32 num, uint32 denom, float* rv) +{ + if (denom == 0) { + TIFFError(tif->tif_name, + "%s: Rational with zero denominator (num = %lu)", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, num); + return (0); + } else { + if (dir->tdir_type == TIFF_RATIONAL) + *rv = ((float)num / (float)denom); + else + *rv = ((float)(int32)num / (float)(int32)denom); + return (1); + } +} + +/* + * Fetch a rational item from the file + * at offset off and return the value + * as a floating point number. + */ +static float +TIFFFetchRational(TIFF* tif, TIFFDirEntry* dir) +{ + uint32 l[2]; + float v; + + return (!TIFFFetchData(tif, dir, (char *)l) || + !cvtRational(tif, dir, l[0], l[1], &v) ? 1.0f : v); +} + +/* + * Fetch a single floating point value + * from the offset field and return it + * as a native float. + */ +static float +TIFFFetchFloat(TIFF* tif, TIFFDirEntry* dir) +{ + long l = TIFFExtractData(tif, dir->tdir_type, dir->tdir_offset); + float v = *(float*) &l; + TIFFCvtIEEEFloatToNative(tif, 1, &v); + return (v); +} + +/* + * Fetch an array of BYTE or SBYTE values. + */ +static int +TIFFFetchByteArray(TIFF* tif, TIFFDirEntry* dir, uint16* v) +{ + if (dir->tdir_count <= 4) { + /* + * Extract data from offset field. + */ + if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { + switch (dir->tdir_count) { + case 4: v[3] = (uint16)(dir->tdir_offset & 0xff); + case 3: v[2] = (uint16)((dir->tdir_offset >> 8) & 0xff); + case 2: v[1] = (uint16)((dir->tdir_offset >> 16) & 0xff); + case 1: v[0] = (uint16)(dir->tdir_offset >> 24); + } + } else { + switch (dir->tdir_count) { + case 4: v[3] = (uint16)(dir->tdir_offset >> 24); + case 3: v[2] = (uint16)((dir->tdir_offset >> 16) & 0xff); + case 2: v[1] = (uint16)((dir->tdir_offset >> 8) & 0xff); + case 1: v[0] = (uint16)(dir->tdir_offset & 0xff); + } + } + return (1); + } else + return (TIFFFetchData(tif, dir, (char*) v) != 0); /* XXX */ +} + +/* + * Fetch an array of SHORT or SSHORT values. + */ +static int +TIFFFetchShortArray(TIFF* tif, TIFFDirEntry* dir, uint16* v) +{ + if (dir->tdir_count <= 2) { + if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { + switch (dir->tdir_count) { + case 2: v[1] = (uint16) (dir->tdir_offset & 0xffff); + case 1: v[0] = (uint16) (dir->tdir_offset >> 16); + } + } else { + switch (dir->tdir_count) { + case 2: v[1] = (uint16) (dir->tdir_offset >> 16); + case 1: v[0] = (uint16) (dir->tdir_offset & 0xffff); + } + } + return (1); + } else + return (TIFFFetchData(tif, dir, (char *)v) != 0); +} + +/* + * Fetch a pair of SHORT or BYTE values. + */ +static int +TIFFFetchShortPair(TIFF* tif, TIFFDirEntry* dir) +{ + uint16 v[2]; + int ok = 0; + + switch (dir->tdir_type) { + case TIFF_SHORT: + case TIFF_SSHORT: + ok = TIFFFetchShortArray(tif, dir, v); + break; + case TIFF_BYTE: + case TIFF_SBYTE: + ok = TIFFFetchByteArray(tif, dir, v); + break; + } + if (ok) + TIFFSetField(tif, dir->tdir_tag, v[0], v[1]); + return (ok); +} + +/* + * Fetch an array of LONG or SLONG values. + */ +static int +TIFFFetchLongArray(TIFF* tif, TIFFDirEntry* dir, uint32* v) +{ + if (dir->tdir_count == 1) { + v[0] = dir->tdir_offset; + return (1); + } else + return (TIFFFetchData(tif, dir, (char*) v) != 0); +} + +/* + * Fetch an array of RATIONAL or SRATIONAL values. + */ +static int +TIFFFetchRationalArray(TIFF* tif, TIFFDirEntry* dir, float* v) +{ + int ok = 0; + uint32* l; + + l = (uint32*)CheckMalloc(tif, + dir->tdir_count*tiffDataWidth[dir->tdir_type], + "to fetch array of rationals"); + if (l) { + if (TIFFFetchData(tif, dir, (char *)l)) { + uint32 i; + for (i = 0; i < dir->tdir_count; i++) { + ok = cvtRational(tif, dir, + l[2*i+0], l[2*i+1], &v[i]); + if (!ok) + break; + } + } + _TIFFfree((char *)l); + } + return (ok); +} + +/* + * Fetch an array of FLOAT values. + */ +static int +TIFFFetchFloatArray(TIFF* tif, TIFFDirEntry* dir, float* v) +{ + + if (dir->tdir_count == 1) { + v[0] = *(float*) &dir->tdir_offset; + TIFFCvtIEEEFloatToNative(tif, dir->tdir_count, v); + return (1); + } else if (TIFFFetchData(tif, dir, (char*) v)) { + TIFFCvtIEEEFloatToNative(tif, dir->tdir_count, v); + return (1); + } else + return (0); +} + +/* + * Fetch an array of DOUBLE values. + */ +static int +TIFFFetchDoubleArray(TIFF* tif, TIFFDirEntry* dir, double* v) +{ + if (TIFFFetchData(tif, dir, (char*) v)) { + TIFFCvtIEEEDoubleToNative(tif, dir->tdir_count, v); + return (1); + } else + return (0); +} + +/* + * Fetch an array of ANY values. The actual values are + * returned as doubles which should be able hold all the + * types. Yes, there really should be an tany_t to avoid + * this potential non-portability ... Note in particular + * that we assume that the double return value vector is + * large enough to read in any fundamental type. We use + * that vector as a buffer to read in the base type vector + * and then convert it in place to double (from end + * to front of course). + */ +static int +TIFFFetchAnyArray(TIFF* tif, TIFFDirEntry* dir, double* v) +{ + int i; + + switch (dir->tdir_type) { + case TIFF_BYTE: + case TIFF_SBYTE: + if (!TIFFFetchByteArray(tif, dir, (uint16*) v)) + return (0); + if (dir->tdir_type == TIFF_BYTE) { + uint16* vp = (uint16*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } else { + int16* vp = (int16*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } + break; + case TIFF_SHORT: + case TIFF_SSHORT: + if (!TIFFFetchShortArray(tif, dir, (uint16*) v)) + return (0); + if (dir->tdir_type == TIFF_SHORT) { + uint16* vp = (uint16*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } else { + int16* vp = (int16*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } + break; + case TIFF_LONG: + case TIFF_SLONG: + if (!TIFFFetchLongArray(tif, dir, (uint32*) v)) + return (0); + if (dir->tdir_type == TIFF_LONG) { + uint32* vp = (uint32*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } else { + int32* vp = (int32*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + if (!TIFFFetchRationalArray(tif, dir, (float*) v)) + return (0); + { float* vp = (float*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } + break; + case TIFF_FLOAT: + if (!TIFFFetchFloatArray(tif, dir, (float*) v)) + return (0); + { float* vp = (float*) v; + for (i = dir->tdir_count-1; i >= 0; i--) + v[i] = vp[i]; + } + break; + case TIFF_DOUBLE: + return (TIFFFetchDoubleArray(tif, dir, (double*) v)); + default: + /* TIFF_NOTYPE */ + /* TIFF_ASCII */ + /* TIFF_UNDEFINED */ + TIFFError(tif->tif_name, + "Cannot read TIFF_ANY type %d for field \"%s\"", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); + return (0); + } + return (1); +} + +/* + * Fetch a tag that is not handled by special case code. + */ +static int +TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp) +{ + static const char mesg[] = "to fetch tag value"; + int ok = 0; + const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dp->tdir_tag); + + if (dp->tdir_count > 1) { /* array of values */ + char* cp = NULL; + + switch (dp->tdir_type) { + case TIFF_BYTE: + case TIFF_SBYTE: + /* NB: always expand BYTE values to shorts */ + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (uint16), mesg); + ok = cp && TIFFFetchByteArray(tif, dp, (uint16*) cp); + break; + case TIFF_SHORT: + case TIFF_SSHORT: + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (uint16), mesg); + ok = cp && TIFFFetchShortArray(tif, dp, (uint16*) cp); + break; + case TIFF_LONG: + case TIFF_SLONG: + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (uint32), mesg); + ok = cp && TIFFFetchLongArray(tif, dp, (uint32*) cp); + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (float), mesg); + ok = cp && TIFFFetchRationalArray(tif, dp, (float*) cp); + break; + case TIFF_FLOAT: + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (float), mesg); + ok = cp && TIFFFetchFloatArray(tif, dp, (float*) cp); + break; + case TIFF_DOUBLE: + cp = CheckMalloc(tif, + dp->tdir_count * sizeof (double), mesg); + ok = cp && TIFFFetchDoubleArray(tif, dp, (double*) cp); + break; + case TIFF_ASCII: + case TIFF_UNDEFINED: /* bit of a cheat... */ + /* + * Some vendors write strings w/o the trailing + * NULL byte, so always append one just in case. + */ + cp = CheckMalloc(tif, dp->tdir_count+1, mesg); + if( (ok = (cp && TIFFFetchString(tif, dp, cp))) != 0 ) + cp[dp->tdir_count] = '\0'; /* XXX */ + break; + } + if (ok) { + ok = (fip->field_passcount ? + TIFFSetField(tif, dp->tdir_tag, dp->tdir_count, cp) + : TIFFSetField(tif, dp->tdir_tag, cp)); + } + if (cp != NULL) + _TIFFfree(cp); + } else if (CheckDirCount(tif, dp, 1)) { /* singleton value */ + switch (dp->tdir_type) { + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + /* + * If the tag is also acceptable as a LONG or SLONG + * then TIFFSetField will expect an uint32 parameter + * passed to it (through varargs). Thus, for machines + * where sizeof (int) != sizeof (uint32) we must do + * a careful check here. It's hard to say if this + * is worth optimizing. + * + * NB: We use TIFFFieldWithTag here knowing that + * it returns us the first entry in the table + * for the tag and that that entry is for the + * widest potential data type the tag may have. + */ + { TIFFDataType type = fip->field_type; + if (type != TIFF_LONG && type != TIFF_SLONG) { + uint16 v = (uint16) + TIFFExtractData(tif, dp->tdir_type, dp->tdir_offset); + ok = (fip->field_passcount ? + TIFFSetField(tif, dp->tdir_tag, 1, &v) + : TIFFSetField(tif, dp->tdir_tag, v)); + break; + } + } + /* fall thru... */ + case TIFF_LONG: + case TIFF_SLONG: + { uint32 v32 = + TIFFExtractData(tif, dp->tdir_type, dp->tdir_offset); + ok = (fip->field_passcount ? + TIFFSetField(tif, dp->tdir_tag, 1, &v32) + : TIFFSetField(tif, dp->tdir_tag, v32)); + } + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_FLOAT: + { float v = (dp->tdir_type == TIFF_FLOAT ? + TIFFFetchFloat(tif, dp) + : TIFFFetchRational(tif, dp)); + ok = (fip->field_passcount ? + TIFFSetField(tif, dp->tdir_tag, 1, &v) + : TIFFSetField(tif, dp->tdir_tag, v)); + } + break; + case TIFF_DOUBLE: + { double v; + ok = (TIFFFetchDoubleArray(tif, dp, &v) && + (fip->field_passcount ? + TIFFSetField(tif, dp->tdir_tag, 1, &v) + : TIFFSetField(tif, dp->tdir_tag, v)) + ); + } + break; + case TIFF_ASCII: + case TIFF_UNDEFINED: /* bit of a cheat... */ + { char c[2]; + if( (ok = (TIFFFetchString(tif, dp, c) != 0)) != 0 ){ + c[1] = '\0'; /* XXX paranoid */ + ok = TIFFSetField(tif, dp->tdir_tag, c); + } + } + break; + } + } + return (ok); +} + +#define NITEMS(x) (sizeof (x) / sizeof (x[0])) +/* + * Fetch samples/pixel short values for + * the specified tag and verify that + * all values are the same. + */ +static int +TIFFFetchPerSampleShorts(TIFF* tif, TIFFDirEntry* dir, int* pl) +{ + int samples = tif->tif_dir.td_samplesperpixel; + int status = 0; + + if (CheckDirCount(tif, dir, (uint32) samples)) { + uint16 buf[10]; + uint16* v = buf; + + if (samples > NITEMS(buf)) + v = (uint16*) _TIFFmalloc(samples * sizeof (uint16)); + if (TIFFFetchShortArray(tif, dir, v)) { + int i; + for (i = 1; i < samples; i++) + if (v[i] != v[0]) { + TIFFError(tif->tif_name, + "Cannot handle different per-sample values for field \"%s\"", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); + goto bad; + } + *pl = v[0]; + status = 1; + } + bad: + if (v != buf) + _TIFFfree((char*) v); + } + return (status); +} + +/* + * Fetch samples/pixel ANY values for + * the specified tag and verify that + * all values are the same. + */ +static int +TIFFFetchPerSampleAnys(TIFF* tif, TIFFDirEntry* dir, double* pl) +{ + int samples = (int) tif->tif_dir.td_samplesperpixel; + int status = 0; + + if (CheckDirCount(tif, dir, (uint32) samples)) { + double buf[10]; + double* v = buf; + + if (samples > NITEMS(buf)) + v = (double*) _TIFFmalloc(samples * sizeof (double)); + if (TIFFFetchAnyArray(tif, dir, v)) { + int i; + for (i = 1; i < samples; i++) + if (v[i] != v[0]) { + TIFFError(tif->tif_name, + "Cannot handle different per-sample values for field \"%s\"", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); + goto bad; + } + *pl = v[0]; + status = 1; + } + bad: + if (v != buf) + _TIFFfree(v); + } + return (status); +} +#undef NITEMS + +/* + * Fetch a set of offsets or lengths. + * While this routine says "strips", + * in fact it's also used for tiles. + */ +static int +TIFFFetchStripThing(TIFF* tif, TIFFDirEntry* dir, long nstrips, uint32** lpp) +{ + register uint32* lp; + int status; + + if (!CheckDirCount(tif, dir, (uint32) nstrips)) + return (0); + /* + * Allocate space for strip information. + */ + if (*lpp == NULL && + (*lpp = (uint32 *)CheckMalloc(tif, + nstrips * sizeof (uint32), "for strip array")) == NULL) + return (0); + lp = *lpp; + if (dir->tdir_type == (int)TIFF_SHORT) { + /* + * Handle uint16->uint32 expansion. + */ + uint16* dp = (uint16*) CheckMalloc(tif, + dir->tdir_count* sizeof (uint16), "to fetch strip tag"); + if (dp == NULL) + return (0); + if( (status = TIFFFetchShortArray(tif, dir, dp)) != 0 ) { + register uint16* wp = dp; + while (nstrips-- > 0) + *lp++ = *wp++; + } + _TIFFfree((char*) dp); + } else + status = TIFFFetchLongArray(tif, dir, lp); + return (status); +} + +#define NITEMS(x) (sizeof (x) / sizeof (x[0])) +/* + * Fetch and set the ExtraSamples tag. + */ +static int +TIFFFetchExtraSamples(TIFF* tif, TIFFDirEntry* dir) +{ + uint16 buf[10]; + uint16* v = buf; + int status; + + if (dir->tdir_count > NITEMS(buf)) + v = (uint16*) _TIFFmalloc(dir->tdir_count * sizeof (uint16)); + if (dir->tdir_type == TIFF_BYTE) + status = TIFFFetchByteArray(tif, dir, v); + else + status = TIFFFetchShortArray(tif, dir, v); + if (status) + status = TIFFSetField(tif, dir->tdir_tag, dir->tdir_count, v); + if (v != buf) + _TIFFfree((char*) v); + return (status); +} +#undef NITEMS + +#ifdef COLORIMETRY_SUPPORT +/* + * Fetch and set the RefBlackWhite tag. + */ +static int +TIFFFetchRefBlackWhite(TIFF* tif, TIFFDirEntry* dir) +{ + static const char mesg[] = "for \"ReferenceBlackWhite\" array"; + char* cp; + int ok; + + if (dir->tdir_type == TIFF_RATIONAL) + return (TIFFFetchNormalTag(tif, dir)); + /* + * Handle LONG's for backward compatibility. + */ + cp = CheckMalloc(tif, dir->tdir_count * sizeof (uint32), mesg); + if( (ok = (cp && TIFFFetchLongArray(tif, dir, (uint32*) cp))) != 0) { + float* fp = (float*) + CheckMalloc(tif, dir->tdir_count * sizeof (float), mesg); + if( (ok = (fp != NULL)) != 0 ) { + uint32 i; + for (i = 0; i < dir->tdir_count; i++) + fp[i] = (float)((uint32*) cp)[i]; + ok = TIFFSetField(tif, dir->tdir_tag, fp); + _TIFFfree((char*) fp); + } + } + if (cp) + _TIFFfree(cp); + return (ok); +} +#endif + +/* + * Replace a single strip (tile) of uncompressed data by + * multiple strips (tiles), each approximately 8Kbytes. + * This is useful for dealing with large images or + * for dealing with machines with a limited amount + * memory. + */ +static void +ChopUpSingleUncompressedStrip(TIFF* tif) +{ + register TIFFDirectory *td = &tif->tif_dir; + uint32 bytecount = td->td_stripbytecount[0]; + uint32 offset = td->td_stripoffset[0]; + tsize_t rowbytes = TIFFVTileSize(tif, 1), stripbytes; + tstrip_t strip, nstrips, rowsperstrip; + uint32* newcounts; + uint32* newoffsets; + + /* + * Make the rows hold at least one + * scanline, but fill 8k if possible. + */ + if (rowbytes > 8192) { + stripbytes = rowbytes; + rowsperstrip = 1; + } else { + rowsperstrip = 8192 / rowbytes; + stripbytes = rowbytes * rowsperstrip; + } + /* never increase the number of strips in an image */ + if (rowsperstrip >= td->td_rowsperstrip) + return; + nstrips = (tstrip_t) TIFFhowmany(bytecount, stripbytes); + newcounts = (uint32*) CheckMalloc(tif, nstrips * sizeof (uint32), + "for chopped \"StripByteCounts\" array"); + newoffsets = (uint32*) CheckMalloc(tif, nstrips * sizeof (uint32), + "for chopped \"StripOffsets\" array"); + if (newcounts == NULL || newoffsets == NULL) { + /* + * Unable to allocate new strip information, give + * up and use the original one strip information. + */ + if (newcounts != NULL) + _TIFFfree(newcounts); + if (newoffsets != NULL) + _TIFFfree(newoffsets); + return; + } + /* + * Fill the strip information arrays with + * new bytecounts and offsets that reflect + * the broken-up format. + */ + for (strip = 0; strip < nstrips; strip++) { + if (stripbytes > (tsize_t) bytecount) + stripbytes = bytecount; + newcounts[strip] = stripbytes; + newoffsets[strip] = offset; + offset += stripbytes; + bytecount -= stripbytes; + } + /* + * Replace old single strip info with multi-strip info. + */ + td->td_stripsperimage = td->td_nstrips = nstrips; + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip); + + _TIFFfree(td->td_stripbytecount); + _TIFFfree(td->td_stripoffset); + td->td_stripbytecount = newcounts; + td->td_stripoffset = newoffsets; +} diff --git a/libtiff/tif_dirwrite.c b/libtiff/tif_dirwrite.c new file mode 100755 index 0000000..f422a46 --- /dev/null +++ b/libtiff/tif_dirwrite.c @@ -0,0 +1,1021 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_dirwrite.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * Directory Write Support Routines. + */ +#include "tiffiop.h" + +#if HAVE_IEEEFP +#define TIFFCvtNativeToIEEEFloat(tif, n, fp) +#define TIFFCvtNativeToIEEEDouble(tif, n, dp) +#else +extern void TIFFCvtNativeToIEEEFloat(TIFF*, uint32, float*); +extern void TIFFCvtNativeToIEEEDouble(TIFF*, uint32, double*); +#endif + +static int TIFFWriteNormalTag(TIFF*, TIFFDirEntry*, const TIFFFieldInfo*); +static void TIFFSetupShortLong(TIFF*, ttag_t, TIFFDirEntry*, uint32); +static int TIFFSetupShortPair(TIFF*, ttag_t, TIFFDirEntry*); +static int TIFFWritePerSampleShorts(TIFF*, ttag_t, TIFFDirEntry*); +static int TIFFWritePerSampleAnys(TIFF*, TIFFDataType, ttag_t, TIFFDirEntry*); +static int TIFFWriteShortTable(TIFF*, ttag_t, TIFFDirEntry*, uint32, uint16**); +static int TIFFWriteShortArray(TIFF*, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, uint16*); +static int TIFFWriteLongArray(TIFF *, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, uint32*); +static int TIFFWriteRationalArray(TIFF *, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, float*); +static int TIFFWriteFloatArray(TIFF *, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, float*); +static int TIFFWriteDoubleArray(TIFF *, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, double*); +static int TIFFWriteByteArray(TIFF*, TIFFDirEntry*, char*); +static int TIFFWriteAnyArray(TIFF*, + TIFFDataType, ttag_t, TIFFDirEntry*, uint32, double*); +#ifdef COLORIMETRY_SUPPORT +static int TIFFWriteTransferFunction(TIFF*, TIFFDirEntry*); +#endif +#ifdef CMYK_SUPPORT +static int TIFFWriteInkNames(TIFF*, TIFFDirEntry*); +#endif +static int TIFFWriteData(TIFF*, TIFFDirEntry*, char*); +static int TIFFLinkDirectory(TIFF*); + +#define WriteRationalPair(type, tag1, v1, tag2, v2) { \ + if (!TIFFWriteRational(tif, type, tag1, dir, v1)) \ + goto bad; \ + if (!TIFFWriteRational(tif, type, tag2, dir+1, v2)) \ + goto bad; \ + dir++; \ +} +#define TIFFWriteRational(tif, type, tag, dir, v) \ + TIFFWriteRationalArray((tif), (type), (tag), (dir), 1, &(v)) +#ifndef TIFFWriteRational +static int TIFFWriteRational(TIFF*, + TIFFDataType, ttag_t, TIFFDirEntry*, float); +#endif + +/* + * Write the contents of the current directory + * to the specified file. This routine doesn't + * handle overwriting a directory with auxiliary + * storage that's been changed. + */ +int +TIFFWriteDirectory(TIFF* tif) +{ + uint16 dircount; + toff_t diroff; + ttag_t tag; + uint32 nfields; + tsize_t dirsize; + char* data; + TIFFDirEntry* dir; + TIFFDirectory* td; + u_long b, fields[FIELD_SETLONGS]; + int fi, nfi; + + if (tif->tif_mode == O_RDONLY) + return (1); + /* + * Clear write state so that subsequent images with + * different characteristics get the right buffers + * setup for them. + */ + if (tif->tif_flags & TIFF_POSTENCODE) { + tif->tif_flags &= ~TIFF_POSTENCODE; + if (!(*tif->tif_postencode)(tif)) { + TIFFError(tif->tif_name, + "Error post-encoding before directory write"); + return (0); + } + } + (*tif->tif_close)(tif); /* shutdown encoder */ + /* + * Flush any data that might have been written + * by the compression close+cleanup routines. + */ + if (tif->tif_rawcc > 0 && !TIFFFlushData1(tif)) { + TIFFError(tif->tif_name, + "Error flushing data before directory write"); + return (0); + } + if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) { + _TIFFfree(tif->tif_rawdata); + tif->tif_rawdata = NULL; + tif->tif_rawcc = 0; + tif->tif_rawdatasize = 0; + } + tif->tif_flags &= ~(TIFF_BEENWRITING|TIFF_BUFFERSETUP); + + td = &tif->tif_dir; + /* + * Size the directory so that we can calculate + * offsets for the data items that aren't kept + * in-place in each field. + */ + nfields = 0; + for (b = 0; b <= FIELD_LAST; b++) + if (TIFFFieldSet(tif, b)) + nfields += (b < FIELD_SUBFILETYPE ? 2 : 1); + dirsize = nfields * sizeof (TIFFDirEntry); + data = (char*) _TIFFmalloc(dirsize); + if (data == NULL) { + TIFFError(tif->tif_name, + "Cannot write directory, out of space"); + return (0); + } + /* + * Directory hasn't been placed yet, put + * it at the end of the file and link it + * into the existing directory structure. + */ + if (tif->tif_diroff == 0 && !TIFFLinkDirectory(tif)) + goto bad; + tif->tif_dataoff = (toff_t)( + tif->tif_diroff + sizeof (uint16) + dirsize + sizeof (toff_t)); + if (tif->tif_dataoff & 1) + tif->tif_dataoff++; + (void) TIFFSeekFile(tif, tif->tif_dataoff, SEEK_SET); + tif->tif_curdir++; + dir = (TIFFDirEntry*) data; + /* + * Setup external form of directory + * entries and write data items. + */ + _TIFFmemcpy(fields, td->td_fieldsset, sizeof (fields)); + /* + * Write out ExtraSamples tag only if + * extra samples are present in the data. + */ + if (FieldSet(fields, FIELD_EXTRASAMPLES) && !td->td_extrasamples) { + ResetFieldBit(fields, FIELD_EXTRASAMPLES); + nfields--; + dirsize -= sizeof (TIFFDirEntry); + } /*XXX*/ + for (fi = 0, nfi = tif->tif_nfields; nfi > 0; nfi--, fi++) { + const TIFFFieldInfo* fip = tif->tif_fieldinfo[fi]; + if (!FieldSet(fields, fip->field_bit)) + continue; + switch (fip->field_bit) { + case FIELD_STRIPOFFSETS: + /* + * We use one field bit for both strip and tile + * offsets, and so must be careful in selecting + * the appropriate field descriptor (so that tags + * are written in sorted order). + */ + tag = isTiled(tif) ? + TIFFTAG_TILEOFFSETS : TIFFTAG_STRIPOFFSETS; + if (tag != fip->field_tag) + continue; + if (!TIFFWriteLongArray(tif, TIFF_LONG, tag, dir, + (uint32) td->td_nstrips, td->td_stripoffset)) + goto bad; + break; + case FIELD_STRIPBYTECOUNTS: + /* + * We use one field bit for both strip and tile + * byte counts, and so must be careful in selecting + * the appropriate field descriptor (so that tags + * are written in sorted order). + */ + tag = isTiled(tif) ? + TIFFTAG_TILEBYTECOUNTS : TIFFTAG_STRIPBYTECOUNTS; + if (tag != fip->field_tag) + continue; + if (!TIFFWriteLongArray(tif, TIFF_LONG, tag, dir, + (uint32) td->td_nstrips, td->td_stripbytecount)) + goto bad; + break; + case FIELD_ROWSPERSTRIP: + TIFFSetupShortLong(tif, TIFFTAG_ROWSPERSTRIP, + dir, td->td_rowsperstrip); + break; + case FIELD_COLORMAP: + if (!TIFFWriteShortTable(tif, TIFFTAG_COLORMAP, dir, + 3, td->td_colormap)) + goto bad; + break; + case FIELD_IMAGEDIMENSIONS: + TIFFSetupShortLong(tif, TIFFTAG_IMAGEWIDTH, + dir++, td->td_imagewidth); + TIFFSetupShortLong(tif, TIFFTAG_IMAGELENGTH, + dir, td->td_imagelength); + break; + case FIELD_TILEDIMENSIONS: + TIFFSetupShortLong(tif, TIFFTAG_TILEWIDTH, + dir++, td->td_tilewidth); + TIFFSetupShortLong(tif, TIFFTAG_TILELENGTH, + dir, td->td_tilelength); + break; + case FIELD_POSITION: + WriteRationalPair(TIFF_RATIONAL, + TIFFTAG_XPOSITION, td->td_xposition, + TIFFTAG_YPOSITION, td->td_yposition); + break; + case FIELD_RESOLUTION: + WriteRationalPair(TIFF_RATIONAL, + TIFFTAG_XRESOLUTION, td->td_xresolution, + TIFFTAG_YRESOLUTION, td->td_yresolution); + break; + case FIELD_BITSPERSAMPLE: + case FIELD_MINSAMPLEVALUE: + case FIELD_MAXSAMPLEVALUE: + case FIELD_SAMPLEFORMAT: + if (!TIFFWritePerSampleShorts(tif, fip->field_tag, dir)) + goto bad; + break; + case FIELD_SMINSAMPLEVALUE: + case FIELD_SMAXSAMPLEVALUE: + if (!TIFFWritePerSampleAnys(tif, + _TIFFSampleToTagType(tif), fip->field_tag, dir)) + goto bad; + break; + case FIELD_PAGENUMBER: + case FIELD_HALFTONEHINTS: +#ifdef YCBCR_SUPPORT + case FIELD_YCBCRSUBSAMPLING: +#endif +#ifdef CMYK_SUPPORT + case FIELD_DOTRANGE: +#endif + if (!TIFFSetupShortPair(tif, fip->field_tag, dir)) + goto bad; + break; +#ifdef CMYK_SUPPORT + case FIELD_INKNAMES: + if (!TIFFWriteInkNames(tif, dir)) + goto bad; + break; +#endif +#ifdef COLORIMETRY_SUPPORT + case FIELD_TRANSFERFUNCTION: + if (!TIFFWriteTransferFunction(tif, dir)) + goto bad; + break; +#endif +#if SUBIFD_SUPPORT + case FIELD_SUBIFD: + if (!TIFFWriteNormalTag(tif, dir, fip)) + goto bad; + /* + * Total hack: if this directory includes a SubIFD + * tag then force the next directories to be + * written as ``sub directories'' of this one. This + * is used to write things like thumbnails and + * image masks that one wants to keep out of the + * normal directory linkage access mechanism. + */ + if (dir->tdir_count > 0) { + tif->tif_flags |= TIFF_INSUBIFD; + tif->tif_nsubifd = (uint16) dir->tdir_count; + if (dir->tdir_count > 1) + tif->tif_subifdoff = dir->tdir_offset; + else + tif->tif_subifdoff = (uint32)( + tif->tif_diroff + + sizeof (uint16) + + ((char*)&dir->tdir_offset-data)); + } + break; +#endif + default: + if (!TIFFWriteNormalTag(tif, dir, fip)) + goto bad; + break; + } + dir++; + ResetFieldBit(fields, fip->field_bit); + } + /* + * Write directory. + */ + dircount = (uint16) nfields; + diroff = (uint32) tif->tif_nextdiroff; + if (tif->tif_flags & TIFF_SWAB) { + /* + * The file's byte order is opposite to the + * native machine architecture. We overwrite + * the directory information with impunity + * because it'll be released below after we + * write it to the file. Note that all the + * other tag construction routines assume that + * we do this byte-swapping; i.e. they only + * byte-swap indirect data. + */ + for (dir = (TIFFDirEntry*) data; dircount; dir++, dircount--) { + TIFFSwabArrayOfShort(&dir->tdir_tag, 2); + TIFFSwabArrayOfLong(&dir->tdir_count, 2); + } + dircount = (uint16) nfields; + TIFFSwabShort(&dircount); + TIFFSwabLong(&diroff); + } + (void) TIFFSeekFile(tif, tif->tif_diroff, SEEK_SET); + if (!WriteOK(tif, &dircount, sizeof (dircount))) { + TIFFError(tif->tif_name, "Error writing directory count"); + goto bad; + } + if (!WriteOK(tif, data, dirsize)) { + TIFFError(tif->tif_name, "Error writing directory contents"); + goto bad; + } + if (!WriteOK(tif, &diroff, sizeof (diroff))) { + TIFFError(tif->tif_name, "Error writing directory link"); + goto bad; + } + TIFFFreeDirectory(tif); + _TIFFfree(data); + tif->tif_flags &= ~TIFF_DIRTYDIRECT; + (*tif->tif_cleanup)(tif); + + /* + * Reset directory-related state for subsequent + * directories. + */ + TIFFCreateDirectory(tif); + return (1); +bad: + _TIFFfree(data); + return (0); +} +#undef WriteRationalPair + +/* + * Process tags that are not special cased. + */ +static int +TIFFWriteNormalTag(TIFF* tif, TIFFDirEntry* dir, const TIFFFieldInfo* fip) +{ + u_short wc = (u_short) fip->field_writecount; + uint32 wc2; + + dir->tdir_tag = (uint16) fip->field_tag; + dir->tdir_type = (u_short) fip->field_type; + dir->tdir_count = wc; +#define WRITEF(x,y) x(tif, fip->field_type, fip->field_tag, dir, wc, y) + switch (fip->field_type) { + case TIFF_SHORT: + case TIFF_SSHORT: + if (wc > 1) { + uint16* wp; + if (wc == (u_short) TIFF_VARIABLE) + TIFFGetField(tif, fip->field_tag, &wc, &wp); + else + TIFFGetField(tif, fip->field_tag, &wp); + if (!WRITEF(TIFFWriteShortArray, wp)) + return (0); + } else { + uint16 sv; + TIFFGetField(tif, fip->field_tag, &sv); + dir->tdir_offset = + TIFFInsertData(tif, dir->tdir_type, sv); + } + break; + case TIFF_LONG: + case TIFF_SLONG: + if (wc > 1) { + uint32* lp; + if (wc == (u_short) TIFF_VARIABLE) + TIFFGetField(tif, fip->field_tag, &wc, &lp); + else + TIFFGetField(tif, fip->field_tag, &lp); + if (!WRITEF(TIFFWriteLongArray, lp)) + return (0); + } else { + /* XXX handle LONG->SHORT conversion */ + TIFFGetField(tif, fip->field_tag, &dir->tdir_offset); + } + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + if (wc > 1) { + float* fp; + if (wc == (u_short) TIFF_VARIABLE) + TIFFGetField(tif, fip->field_tag, &wc, &fp); + else + TIFFGetField(tif, fip->field_tag, &fp); + if (!WRITEF(TIFFWriteRationalArray, fp)) + return (0); + } else { + float fv; + TIFFGetField(tif, fip->field_tag, &fv); + if (!WRITEF(TIFFWriteRationalArray, &fv)) + return (0); + } + break; + case TIFF_FLOAT: + if (wc > 1) { + float* fp; + if (wc == (u_short) TIFF_VARIABLE) + TIFFGetField(tif, fip->field_tag, &wc, &fp); + else + TIFFGetField(tif, fip->field_tag, &fp); + if (!WRITEF(TIFFWriteFloatArray, fp)) + return (0); + } else { + float fv; + TIFFGetField(tif, fip->field_tag, &fv); + if (!WRITEF(TIFFWriteFloatArray, &fv)) + return (0); + } + break; + case TIFF_DOUBLE: + if (wc > 1) { + double* dp; + if (wc == (u_short) TIFF_VARIABLE) + TIFFGetField(tif, fip->field_tag, &wc, &dp); + else + TIFFGetField(tif, fip->field_tag, &dp); + if (!WRITEF(TIFFWriteDoubleArray, dp)) + return (0); + } else { + double dv; + TIFFGetField(tif, fip->field_tag, &dv); + if (!WRITEF(TIFFWriteDoubleArray, &dv)) + return (0); + } + break; + case TIFF_ASCII: + { char* cp; + TIFFGetField(tif, fip->field_tag, &cp); + dir->tdir_count = (uint32) (strlen(cp) + 1); + if (!TIFFWriteByteArray(tif, dir, cp)) + return (0); + } + break; + + /* added based on patch request from MARTIN.MCBRIDE.MM@agfa.co.uk, + correctness not verified (FW, 99/08) */ + case TIFF_BYTE: + case TIFF_SBYTE: + if (wc > 1) { + char* cp; + if (wc == (u_short) TIFF_VARIABLE) { + TIFFGetField(tif, fip->field_tag, &wc, &cp); + dir->tdir_count = wc; + } else + TIFFGetField(tif, fip->field_tag, &cp); + if (!TIFFWriteByteArray(tif, dir, cp)) + return (0); + } else { + char cv; + TIFFGetField(tif, fip->field_tag, &cv); + if (!TIFFWriteByteArray(tif, dir, &cv)) + return (0); + } + break; + + case TIFF_UNDEFINED: + { char* cp; + if (wc == (u_short) TIFF_VARIABLE) { + TIFFGetField(tif, fip->field_tag, &wc, &cp); + dir->tdir_count = wc; + } else if (wc == (u_short) TIFF_VARIABLE2) { + TIFFGetField(tif, fip->field_tag, &wc2, &cp); + dir->tdir_count = wc2; + } else + TIFFGetField(tif, fip->field_tag, &cp); + if (!TIFFWriteByteArray(tif, dir, cp)) + return (0); + } + break; + + case TIFF_NOTYPE: + break; + } + return (1); +} +#undef WRITEF + +/* + * Setup a directory entry with either a SHORT + * or LONG type according to the value. + */ +static void +TIFFSetupShortLong(TIFF* tif, ttag_t tag, TIFFDirEntry* dir, uint32 v) +{ + dir->tdir_tag = (uint16) tag; + dir->tdir_count = 1; + if (v > 0xffffL) { + dir->tdir_type = (short) TIFF_LONG; + dir->tdir_offset = v; + } else { + dir->tdir_type = (short) TIFF_SHORT; + dir->tdir_offset = TIFFInsertData(tif, (int) TIFF_SHORT, v); + } +} +#undef MakeShortDirent + +#ifndef TIFFWriteRational +/* + * Setup a RATIONAL directory entry and + * write the associated indirect value. + */ +static int +TIFFWriteRational(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, float v) +{ + return (TIFFWriteRationalArray(tif, type, tag, dir, 1, &v)); +} +#endif + +#define NITEMS(x) (sizeof (x) / sizeof (x[0])) +/* + * Setup a directory entry that references a + * samples/pixel array of SHORT values and + * (potentially) write the associated indirect + * values. + */ +static int +TIFFWritePerSampleShorts(TIFF* tif, ttag_t tag, TIFFDirEntry* dir) +{ + uint16 buf[10], v; + uint16* w = buf; + int i, status, samples = tif->tif_dir.td_samplesperpixel; + + if (samples > NITEMS(buf)) + w = (uint16*) _TIFFmalloc(samples * sizeof (uint16)); + TIFFGetField(tif, tag, &v); + for (i = 0; i < samples; i++) + w[i] = v; + status = TIFFWriteShortArray(tif, TIFF_SHORT, tag, dir, samples, w); + if (w != buf) + _TIFFfree((char*) w); + return (status); +} + +/* + * Setup a directory entry that references a samples/pixel array of ``type'' + * values and (potentially) write the associated indirect values. The source + * data from TIFFGetField() for the specified tag must be returned as double. + */ +static int +TIFFWritePerSampleAnys(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir) +{ + double buf[10], v; + double* w = buf; + int i, status; + int samples = (int) tif->tif_dir.td_samplesperpixel; + + if (samples > NITEMS(buf)) + w = (double*) _TIFFmalloc(samples * sizeof (double)); + TIFFGetField(tif, tag, &v); + for (i = 0; i < samples; i++) + w[i] = v; + status = TIFFWriteAnyArray(tif, type, tag, dir, samples, w); + if (w != buf) + _TIFFfree(w); + return (status); +} +#undef NITEMS + +/* + * Setup a pair of shorts that are returned by + * value, rather than as a reference to an array. + */ +static int +TIFFSetupShortPair(TIFF* tif, ttag_t tag, TIFFDirEntry* dir) +{ + uint16 v[2]; + + TIFFGetField(tif, tag, &v[0], &v[1]); + return (TIFFWriteShortArray(tif, TIFF_SHORT, tag, dir, 2, v)); +} + +/* + * Setup a directory entry for an NxM table of shorts, + * where M is known to be 2**bitspersample, and write + * the associated indirect data. + */ +static int +TIFFWriteShortTable(TIFF* tif, + ttag_t tag, TIFFDirEntry* dir, uint32 n, uint16** table) +{ + uint32 i, off; + + dir->tdir_tag = (uint16) tag; + dir->tdir_type = (short) TIFF_SHORT; + /* XXX -- yech, fool TIFFWriteData */ + dir->tdir_count = (uint32) (1L<tif_dir.td_bitspersample); + off = tif->tif_dataoff; + for (i = 0; i < n; i++) + if (!TIFFWriteData(tif, dir, (char *)table[i])) + return (0); + dir->tdir_count *= n; + dir->tdir_offset = off; + return (1); +} + +/* + * Write/copy data associated with an ASCII or opaque tag value. + */ +static int +TIFFWriteByteArray(TIFF* tif, TIFFDirEntry* dir, char* cp) +{ + if (dir->tdir_count > 4) { + if (!TIFFWriteData(tif, dir, cp)) + return (0); + } else + _TIFFmemcpy(&dir->tdir_offset, cp, dir->tdir_count); + return (1); +} + +/* + * Setup a directory entry of an array of SHORT + * or SSHORT and write the associated indirect values. + */ +static int +TIFFWriteShortArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, uint16* v) +{ + dir->tdir_tag = (uint16) tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + if (n <= 2) { + if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { + dir->tdir_offset = (uint32) ((long) v[0] << 16); + if (n == 2) + dir->tdir_offset |= v[1] & 0xffff; + } else { + dir->tdir_offset = v[0] & 0xffff; + if (n == 2) + dir->tdir_offset |= (long) v[1] << 16; + } + return (1); + } else + return (TIFFWriteData(tif, dir, (char*) v)); +} + +/* + * Setup a directory entry of an array of LONG + * or SLONG and write the associated indirect values. + */ +static int +TIFFWriteLongArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, uint32* v) +{ + dir->tdir_tag = (uint16) tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + if (n == 1) { + dir->tdir_offset = v[0]; + return (1); + } else + return (TIFFWriteData(tif, dir, (char*) v)); +} + +/* + * Setup a directory entry of an array of RATIONAL + * or SRATIONAL and write the associated indirect values. + */ +static int +TIFFWriteRationalArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, float* v) +{ + uint32 i; + uint32* t; + int status; + + dir->tdir_tag = (uint16) tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + t = (uint32*) _TIFFmalloc(2*n * sizeof (uint32)); + for (i = 0; i < n; i++) { + float fv = v[i]; + int sign = 1; + uint32 den; + + if (fv < 0) { + if (type == TIFF_RATIONAL) { + TIFFWarning(tif->tif_name, + "\"%s\": Information lost writing value (%g) as (unsigned) RATIONAL", + _TIFFFieldWithTag(tif,tag)->field_name, fv); + fv = 0; + } else + fv = -fv, sign = -1; + } + den = 1L; + if (fv > 0) { + while (fv < 1L<<(31-3) && den < 1L<<(31-3)) + fv *= 1<<3, den *= 1L<<3; + } + t[2*i+0] = (uint32) (sign * (fv + 0.5)); + t[2*i+1] = den; + } + status = TIFFWriteData(tif, dir, (char *)t); + _TIFFfree((char*) t); + return (status); +} + +static int +TIFFWriteFloatArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, float* v) +{ + dir->tdir_tag = (uint16) tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + TIFFCvtNativeToIEEEFloat(tif, n, v); + if (n == 1) { + dir->tdir_offset = *(uint32*) &v[0]; + return (1); + } else + return (TIFFWriteData(tif, dir, (char*) v)); +} + +static int +TIFFWriteDoubleArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, double* v) +{ + dir->tdir_tag = (uint16) tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + TIFFCvtNativeToIEEEDouble(tif, n, v); + return (TIFFWriteData(tif, dir, (char*) v)); +} + +/* + * Write an array of ``type'' values for a specified tag (i.e. this is a tag + * which is allowed to have different types, e.g. SMaxSampleType). + * Internally the data values are represented as double since a double can + * hold any of the TIFF tag types (yes, this should really be an abstract + * type tany_t for portability). The data is converted into the specified + * type in a temporary buffer and then handed off to the appropriate array + * writer. + */ +static int +TIFFWriteAnyArray(TIFF* tif, + TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, double* v) +{ + char buf[10 * sizeof(double)]; + char* w = buf; + int i, status = 0; + + if (n * tiffDataWidth[type] > sizeof buf) + w = (char*) _TIFFmalloc(n * tiffDataWidth[type]); + switch (type) { + case TIFF_BYTE: + { uint8* bp = (uint8*) w; + for (i = 0; i < (int) n; i++) + bp[i] = (uint8) v[i]; + dir->tdir_tag = (uint16) tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + if (!TIFFWriteByteArray(tif, dir, (char*) bp)) + goto out; + } + break; + case TIFF_SBYTE: + { int8* bp = (int8*) w; + for (i = 0; i < (int) n; i++) + bp[i] = (int8) v[i]; + dir->tdir_tag = (uint16) tag; + dir->tdir_type = (short) type; + dir->tdir_count = n; + if (!TIFFWriteByteArray(tif, dir, (char*) bp)) + goto out; + } + break; + case TIFF_SHORT: + { uint16* bp = (uint16*) w; + for (i = 0; i < (int) n; i++) + bp[i] = (uint16) v[i]; + if (!TIFFWriteShortArray(tif, type, tag, dir, n, (uint16*)bp)) + goto out; + } + break; + case TIFF_SSHORT: + { int16* bp = (int16*) w; + for (i = 0; i < (int) n; i++) + bp[i] = (int16) v[i]; + if (!TIFFWriteShortArray(tif, type, tag, dir, n, (uint16*)bp)) + goto out; + } + break; + case TIFF_LONG: + { uint32* bp = (uint32*) w; + for (i = 0; i < (int) n; i++) + bp[i] = (uint32) v[i]; + if (!TIFFWriteLongArray(tif, type, tag, dir, n, bp)) + goto out; + } + break; + case TIFF_SLONG: + { int32* bp = (int32*) w; + for (i = 0; i < (int) n; i++) + bp[i] = (int32) v[i]; + if (!TIFFWriteLongArray(tif, type, tag, dir, n, (uint32*) bp)) + goto out; + } + break; + case TIFF_FLOAT: + { float* bp = (float*) w; + for (i = 0; i < (int) n; i++) + bp[i] = (float) v[i]; + if (!TIFFWriteFloatArray(tif, type, tag, dir, n, bp)) + goto out; + } + break; + case TIFF_DOUBLE: + return (TIFFWriteDoubleArray(tif, type, tag, dir, n, v)); + default: + /* TIFF_NOTYPE */ + /* TIFF_ASCII */ + /* TIFF_UNDEFINED */ + /* TIFF_RATIONAL */ + /* TIFF_SRATIONAL */ + goto out; + } + status = 1; + out: + if (w != buf) + _TIFFfree(w); + return (status); +} + +#ifdef COLORIMETRY_SUPPORT +static int +TIFFWriteTransferFunction(TIFF* tif, TIFFDirEntry* dir) +{ + TIFFDirectory* td = &tif->tif_dir; + tsize_t n = (1L<td_bitspersample) * sizeof (uint16); + uint16** tf = td->td_transferfunction; + int ncols; + + /* + * Check if the table can be written as a single column, + * or if it must be written as 3 columns. Note that we + * write a 3-column tag if there are 2 samples/pixel and + * a single column of data won't suffice--hmm. + */ + switch (td->td_samplesperpixel - td->td_extrasamples) { + default: if (_TIFFmemcmp(tf[0], tf[2], n)) { ncols = 3; break; } + case 2: if (_TIFFmemcmp(tf[0], tf[1], n)) { ncols = 3; break; } + case 1: case 0: ncols = 1; + } + return (TIFFWriteShortTable(tif, + TIFFTAG_TRANSFERFUNCTION, dir, ncols, tf)); +} +#endif + +#ifdef CMYK_SUPPORT +static int +TIFFWriteInkNames(TIFF* tif, TIFFDirEntry* dir) +{ + TIFFDirectory* td = &tif->tif_dir; + + dir->tdir_tag = TIFFTAG_INKNAMES; + dir->tdir_type = (short) TIFF_ASCII; + dir->tdir_count = td->td_inknameslen; + return (TIFFWriteByteArray(tif, dir, td->td_inknames)); +} +#endif + +/* + * Write a contiguous directory item. + */ +static int +TIFFWriteData(TIFF* tif, TIFFDirEntry* dir, char* cp) +{ + tsize_t cc; + + if (tif->tif_flags & TIFF_SWAB) { + switch (dir->tdir_type) { + case TIFF_SHORT: + case TIFF_SSHORT: + TIFFSwabArrayOfShort((uint16*) cp, dir->tdir_count); + break; + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_FLOAT: + TIFFSwabArrayOfLong((uint32*) cp, dir->tdir_count); + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + TIFFSwabArrayOfLong((uint32*) cp, 2*dir->tdir_count); + break; + case TIFF_DOUBLE: + TIFFSwabArrayOfDouble((double*) cp, dir->tdir_count); + break; + } + } + dir->tdir_offset = tif->tif_dataoff; + cc = dir->tdir_count * tiffDataWidth[dir->tdir_type]; + if (SeekOK(tif, dir->tdir_offset) && + WriteOK(tif, cp, cc)) { + tif->tif_dataoff += (cc + 1) & ~1; + return (1); + } + TIFFError(tif->tif_name, "Error writing data for field \"%s\"", + _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); + return (0); +} + +/* + * Link the current directory into the + * directory chain for the file. + */ +static int +TIFFLinkDirectory(TIFF* tif) +{ + static const char module[] = "TIFFLinkDirectory"; + toff_t nextdir; + toff_t diroff, off; + + tif->tif_diroff = (TIFFSeekFile(tif, (toff_t) 0, SEEK_END)+1) &~ 1; + diroff = tif->tif_diroff; + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&diroff); +#if SUBIFD_SUPPORT + if (tif->tif_flags & TIFF_INSUBIFD) { + (void) TIFFSeekFile(tif, tif->tif_subifdoff, SEEK_SET); + if (!WriteOK(tif, &diroff, sizeof (diroff))) { + TIFFError(module, + "%s: Error writing SubIFD directory link", + tif->tif_name); + return (0); + } + /* + * Advance to the next SubIFD or, if this is + * the last one configured, revert back to the + * normal directory linkage. + */ + if (--tif->tif_nsubifd) + tif->tif_subifdoff += sizeof (diroff); + else + tif->tif_flags &= ~TIFF_INSUBIFD; + return (1); + } +#endif + if (tif->tif_header.tiff_diroff == 0) { + /* + * First directory, overwrite offset in header. + */ + tif->tif_header.tiff_diroff = tif->tif_diroff; +#define HDROFF(f) ((toff_t) &(((TIFFHeader*) 0)->f)) + (void) TIFFSeekFile(tif, HDROFF(tiff_diroff), SEEK_SET); + if (!WriteOK(tif, &diroff, sizeof (diroff))) { + TIFFError(tif->tif_name, "Error writing TIFF header"); + return (0); + } + return (1); + } + /* + * Not the first directory, search to the last and append. + */ + nextdir = tif->tif_header.tiff_diroff; + do { + uint16 dircount; + + if (!SeekOK(tif, nextdir) || + !ReadOK(tif, &dircount, sizeof (dircount))) { + TIFFError(module, "Error fetching directory count"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + (void) TIFFSeekFile(tif, + dircount * sizeof (TIFFDirEntry), SEEK_CUR); + if (!ReadOK(tif, &nextdir, sizeof (nextdir))) { + TIFFError(module, "Error fetching directory link"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&nextdir); + } while (nextdir != 0); + off = TIFFSeekFile(tif, 0, SEEK_CUR); /* get current offset */ + (void) TIFFSeekFile(tif, off - (toff_t)sizeof(nextdir), SEEK_SET); + if (!WriteOK(tif, &diroff, sizeof (diroff))) { + TIFFError(module, "Error writing directory link"); + return (0); + } + return (1); +} diff --git a/libtiff/tif_dumpmode.c b/libtiff/tif_dumpmode.c new file mode 100755 index 0000000..21aff33 --- /dev/null +++ b/libtiff/tif_dumpmode.c @@ -0,0 +1,118 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_dumpmode.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * "Null" Compression Algorithm Support. + */ +#include "tiffiop.h" +#include + +/* + * Encode a hunk of pixels. + */ +static int +DumpModeEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +{ + (void) s; + while (cc > 0) { + tsize_t n; + + n = cc; + if (tif->tif_rawcc + n > tif->tif_rawdatasize) + n = tif->tif_rawdatasize - tif->tif_rawcc; + + assert( n > 0 ); + + /* + * Avoid copy if client has setup raw + * data buffer to avoid extra copy. + */ + if (tif->tif_rawcp != pp) + _TIFFmemcpy(tif->tif_rawcp, pp, n); + tif->tif_rawcp += n; + tif->tif_rawcc += n; + pp += n; + cc -= n; + if (tif->tif_rawcc >= tif->tif_rawdatasize && + !TIFFFlushData1(tif)) + return (-1); + } + return (1); +} + +/* + * Decode a hunk of pixels. + */ +static int +DumpModeDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +{ + (void) s; + if (tif->tif_rawcc < cc) { + TIFFError(tif->tif_name, + "DumpModeDecode: Not enough data for scanline %d", + tif->tif_row); + return (0); + } + /* + * Avoid copy if client has setup raw + * data buffer to avoid extra copy. + */ + if (tif->tif_rawcp != buf) + _TIFFmemcpy(buf, tif->tif_rawcp, cc); + tif->tif_rawcp += cc; + tif->tif_rawcc -= cc; + return (1); +} + +/* + * Seek forwards nrows in the current strip. + */ +static int +DumpModeSeek(TIFF* tif, uint32 nrows) +{ + tif->tif_rawcp += nrows * tif->tif_scanlinesize; + tif->tif_rawcc -= nrows * tif->tif_scanlinesize; + return (1); +} + +/* + * Initialize dump mode. + */ +int +TIFFInitDumpMode(TIFF* tif, int scheme) +{ + (void) scheme; + tif->tif_decoderow = DumpModeDecode; + tif->tif_decodestrip = DumpModeDecode; + tif->tif_decodetile = DumpModeDecode; + tif->tif_encoderow = DumpModeEncode; + tif->tif_encodestrip = DumpModeEncode; + tif->tif_encodetile = DumpModeEncode; + tif->tif_seek = DumpModeSeek; + return (1); +} diff --git a/libtiff/tif_error.c b/libtiff/tif_error.c new file mode 100755 index 0000000..0690f41 --- /dev/null +++ b/libtiff/tif_error.c @@ -0,0 +1,49 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_error.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + */ +#include "tiffiop.h" + +TIFFErrorHandler +TIFFSetErrorHandler(TIFFErrorHandler handler) +{ + TIFFErrorHandler prev = _TIFFerrorHandler; + _TIFFerrorHandler = handler; + return (prev); +} + +void +TIFFError(const char* module, const char* fmt, ...) +{ + if (_TIFFerrorHandler) { + va_list ap; + va_start(ap, fmt); + (*_TIFFerrorHandler)(module, fmt, ap); + va_end(ap); + } +} diff --git a/libtiff/tif_fax3.c b/libtiff/tif_fax3.c new file mode 100755 index 0000000..d4f143e --- /dev/null +++ b/libtiff/tif_fax3.c @@ -0,0 +1,1562 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_fax3.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1990-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include "tiffiop.h" +#ifdef CCITT_SUPPORT +/* + * TIFF Library. + * + * CCITT Group 3 (T.4) and Group 4 (T.6) Compression Support. + * + * This file contains support for decoding and encoding TIFF + * compression algorithms 2, 3, 4, and 32771. + * + * Decoder support is derived, with permission, from the code + * in Frank Cringle's viewfax program; + * Copyright (C) 1990, 1995 Frank D. Cringle. + */ +#include "tif_fax3.h" +#define G3CODES +#include "t4.h" +#include +#include + +/* + * NB: define PURIFY if you're using purify and you want + * to avoid some harmless array bounds complaints that + * can happen in the _TIFFFax3fillruns routine. + */ + +/* + * Compression+decompression state blocks are + * derived from this ``base state'' block. + */ +typedef struct { + int mode; /* operating mode */ + uint32 rowbytes; /* bytes in a decoded scanline */ + uint32 rowpixels; /* pixels in a scanline */ + + uint16 cleanfaxdata; /* CleanFaxData tag */ + uint32 badfaxrun; /* BadFaxRun tag */ + uint32 badfaxlines; /* BadFaxLines tag */ + uint32 groupoptions; /* Group 3/4 options tag */ + uint32 recvparams; /* encoded Class 2 session params */ + char* subaddress; /* subaddress string */ + uint32 recvtime; /* time spent receiving (secs) */ + TIFFVGetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ +} Fax3BaseState; +#define Fax3State(tif) ((Fax3BaseState*) (tif)->tif_data) + +typedef struct { + Fax3BaseState b; + const u_char* bitmap; /* bit reversal table */ + uint32 data; /* current i/o byte/word */ + int bit; /* current i/o bit in byte */ + int EOLcnt; /* count of EOL codes recognized */ + TIFFFaxFillFunc fill; /* fill routine */ + uint32* runs; /* b&w runs for current/previous row */ + uint32* refruns; /* runs for reference line */ + uint32* curruns; /* runs for current line */ +} Fax3DecodeState; +#define DecoderState(tif) ((Fax3DecodeState*) Fax3State(tif)) + +typedef enum { G3_1D, G3_2D } Ttag; +typedef struct { + Fax3BaseState b; + int data; /* current i/o byte */ + int bit; /* current i/o bit in byte */ + Ttag tag; /* encoding state */ + u_char* refline; /* reference line for 2d decoding */ + int k; /* #rows left that can be 2d encoded */ + int maxk; /* max #rows that can be 2d encoded */ +} Fax3EncodeState; +#define EncoderState(tif) ((Fax3EncodeState*) Fax3State(tif)) + +#define is2DEncoding(sp) \ + (sp->b.groupoptions & GROUP3OPT_2DENCODING) +#define isAligned(p,t) ((((u_long)(p)) & (sizeof (t)-1)) == 0) + +/* + * Group 3 and Group 4 Decoding. + */ + +/* + * These macros glue the TIFF library state to + * the state expected by Frank's decoder. + */ +#define DECLARE_STATE(tif, sp, mod) \ + static const char module[] = mod; \ + Fax3DecodeState* sp = DecoderState(tif); \ + int a0; /* reference element */ \ + int lastx = sp->b.rowpixels; /* last element in row */ \ + uint32 BitAcc; /* bit accumulator */ \ + int BitsAvail; /* # valid bits in BitAcc */ \ + int RunLength; /* length of current run */ \ + u_char* cp; /* next byte of input data */ \ + u_char* ep; /* end of input data */ \ + uint32* pa; /* place to stuff next run */ \ + uint32* thisrun; /* current row's run array */ \ + int EOLcnt; /* # EOL codes recognized */ \ + const u_char* bitmap = sp->bitmap; /* input data bit reverser */ \ + const TIFFFaxTabEnt* TabEnt +#define DECLARE_STATE_2D(tif, sp, mod) \ + DECLARE_STATE(tif, sp, mod); \ + int b1; /* next change on prev line */ \ + uint32* pb /* next run in reference line */\ +/* + * Load any state that may be changed during decoding. + */ +#define CACHE_STATE(tif, sp) do { \ + BitAcc = sp->data; \ + BitsAvail = sp->bit; \ + EOLcnt = sp->EOLcnt; \ + cp = (unsigned char*) tif->tif_rawcp; \ + ep = cp + tif->tif_rawcc; \ +} while (0) +/* + * Save state possibly changed during decoding. + */ +#define UNCACHE_STATE(tif, sp) do { \ + sp->bit = BitsAvail; \ + sp->data = BitAcc; \ + sp->EOLcnt = EOLcnt; \ + tif->tif_rawcc -= (tidata_t) cp - tif->tif_rawcp; \ + tif->tif_rawcp = (tidata_t) cp; \ +} while (0) + +/* + * Setup state for decoding a strip. + */ +static int +Fax3PreDecode(TIFF* tif, tsample_t s) +{ + Fax3DecodeState* sp = DecoderState(tif); + + (void) s; + assert(sp != NULL); + sp->bit = 0; /* force initial read */ + sp->data = 0; + sp->EOLcnt = 0; /* force initial scan for EOL */ + /* + * Decoder assumes lsb-to-msb bit order. Note that we select + * this here rather than in Fax3SetupState so that viewers can + * hold the image open, fiddle with the FillOrder tag value, + * and then re-decode the image. Otherwise they'd need to close + * and open the image to get the state reset. + */ + sp->bitmap = + TIFFGetBitRevTable(tif->tif_dir.td_fillorder != FILLORDER_LSB2MSB); + if (sp->refruns) { /* init reference line to white */ + sp->refruns[0] = (uint16) sp->b.rowpixels; + sp->refruns[1] = 0; + } + return (1); +} + +/* + * Routine for handling various errors/conditions. + * Note how they are "glued into the decoder" by + * overriding the definitions used by the decoder. + */ + +static void +Fax3Unexpected(const char* module, TIFF* tif, uint32 a0) +{ + TIFFError(module, "%s: Bad code word at scanline %d (x %lu)", + tif->tif_name, tif->tif_row, (u_long) a0); +} +#define unexpected(table, a0) Fax3Unexpected(module, tif, a0) + +static void +Fax3Extension(const char* module, TIFF* tif, uint32 a0) +{ + TIFFError(module, + "%s: Uncompressed data (not supported) at scanline %d (x %lu)", + tif->tif_name, tif->tif_row, (u_long) a0); +} +#define extension(a0) Fax3Extension(module, tif, a0) + +static void +Fax3BadLength(const char* module, TIFF* tif, uint32 a0, uint32 lastx) +{ + TIFFWarning(module, "%s: %s at scanline %d (got %lu, expected %lu)", + tif->tif_name, + a0 < lastx ? "Premature EOL" : "Line length mismatch", + tif->tif_row, (u_long) a0, (u_long) lastx); +} +#define badlength(a0,lastx) Fax3BadLength(module, tif, a0, lastx) + +static void +Fax3PrematureEOF(const char* module, TIFF* tif, uint32 a0) +{ + TIFFWarning(module, "%s: Premature EOF at scanline %d (x %lu)", + tif->tif_name, tif->tif_row, (u_long) a0); +} +#define prematureEOF(a0) Fax3PrematureEOF(module, tif, a0) + +#define Nop + +/* + * Decode the requested amount of G3 1D-encoded data. + */ +static int +Fax3Decode1D(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +{ + DECLARE_STATE(tif, sp, "Fax3Decode1D"); + + (void) s; + CACHE_STATE(tif, sp); + thisrun = sp->curruns; + while ((long)occ > 0) { + a0 = 0; + RunLength = 0; + pa = thisrun; +#ifdef FAX3_DEBUG + printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail); + printf("-------------------- %d\n", tif->tif_row); + fflush(stdout); +#endif + SYNC_EOL(EOF1D); + EXPAND1D(EOF1Da); + (*sp->fill)(buf, thisrun, pa, lastx); + buf += sp->b.rowbytes; + occ -= sp->b.rowbytes; + if (occ != 0) + tif->tif_row++; + continue; + EOF1D: /* premature EOF */ + CLEANUP_RUNS(); + EOF1Da: /* premature EOF */ + (*sp->fill)(buf, thisrun, pa, lastx); + UNCACHE_STATE(tif, sp); + return (-1); + } + UNCACHE_STATE(tif, sp); + return (1); +} + +#define SWAP(t,a,b) { t x; x = (a); (a) = (b); (b) = x; } +/* + * Decode the requested amount of G3 2D-encoded data. + */ +static int +Fax3Decode2D(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +{ + DECLARE_STATE_2D(tif, sp, "Fax3Decode2D"); + int is1D; /* current line is 1d/2d-encoded */ + + (void) s; + CACHE_STATE(tif, sp); + while ((long)occ > 0) { + a0 = 0; + RunLength = 0; + pa = thisrun = sp->curruns; +#ifdef FAX3_DEBUG + printf("\nBitAcc=%08X, BitsAvail = %d EOLcnt = %d", + BitAcc, BitsAvail, EOLcnt); +#endif + SYNC_EOL(EOF2D); + NeedBits8(1, EOF2D); + is1D = GetBits(1); /* 1D/2D-encoding tag bit */ + ClrBits(1); +#ifdef FAX3_DEBUG + printf(" %s\n-------------------- %d\n", + is1D ? "1D" : "2D", tif->tif_row); + fflush(stdout); +#endif + pb = sp->refruns; + b1 = *pb++; + if (is1D) + EXPAND1D(EOF2Da); + else + EXPAND2D(EOF2Da); + (*sp->fill)(buf, thisrun, pa, lastx); + SETVAL(0); /* imaginary change for reference */ + SWAP(uint32*, sp->curruns, sp->refruns); + buf += sp->b.rowbytes; + occ -= sp->b.rowbytes; + if (occ != 0) + tif->tif_row++; + continue; + EOF2D: /* premature EOF */ + CLEANUP_RUNS(); + EOF2Da: /* premature EOF */ + (*sp->fill)(buf, thisrun, pa, lastx); + UNCACHE_STATE(tif, sp); + return (-1); + } + UNCACHE_STATE(tif, sp); + return (1); +} +#undef SWAP + +/* + * The ZERO & FILL macros must handle spans < 2*sizeof(long) bytes. + * For machines with 64-bit longs this is <16 bytes; otherwise + * this is <8 bytes. We optimize the code here to reflect the + * machine characteristics. + */ +#if defined(__alpha) || _MIPS_SZLONG == 64 +#define FILL(n, cp) \ + switch (n) { \ + case 15:(cp)[14] = 0xff; case 14:(cp)[13] = 0xff; case 13: (cp)[12] = 0xff;\ + case 12:(cp)[11] = 0xff; case 11:(cp)[10] = 0xff; case 10: (cp)[9] = 0xff;\ + case 9: (cp)[8] = 0xff; case 8: (cp)[7] = 0xff; case 7: (cp)[6] = 0xff;\ + case 6: (cp)[5] = 0xff; case 5: (cp)[4] = 0xff; case 4: (cp)[3] = 0xff;\ + case 3: (cp)[2] = 0xff; case 2: (cp)[1] = 0xff; \ + case 1: (cp)[0] = 0xff; (cp) += (n); case 0: ; \ + } +#define ZERO(n, cp) \ + switch (n) { \ + case 15:(cp)[14] = 0; case 14:(cp)[13] = 0; case 13: (cp)[12] = 0; \ + case 12:(cp)[11] = 0; case 11:(cp)[10] = 0; case 10: (cp)[9] = 0; \ + case 9: (cp)[8] = 0; case 8: (cp)[7] = 0; case 7: (cp)[6] = 0; \ + case 6: (cp)[5] = 0; case 5: (cp)[4] = 0; case 4: (cp)[3] = 0; \ + case 3: (cp)[2] = 0; case 2: (cp)[1] = 0; \ + case 1: (cp)[0] = 0; (cp) += (n); case 0: ; \ + } +#else +#define FILL(n, cp) \ + switch (n) { \ + case 7: (cp)[6] = 0xff; case 6: (cp)[5] = 0xff; case 5: (cp)[4] = 0xff; \ + case 4: (cp)[3] = 0xff; case 3: (cp)[2] = 0xff; case 2: (cp)[1] = 0xff; \ + case 1: (cp)[0] = 0xff; (cp) += (n); case 0: ; \ + } +#define ZERO(n, cp) \ + switch (n) { \ + case 7: (cp)[6] = 0; case 6: (cp)[5] = 0; case 5: (cp)[4] = 0; \ + case 4: (cp)[3] = 0; case 3: (cp)[2] = 0; case 2: (cp)[1] = 0; \ + case 1: (cp)[0] = 0; (cp) += (n); case 0: ; \ + } +#endif + +/* + * Bit-fill a row according to the white/black + * runs generated during G3/G4 decoding. + */ +void +_TIFFFax3fillruns(u_char* buf, uint32* runs, uint32* erun, uint32 lastx) +{ + static const unsigned char _fillmasks[] = + { 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff }; + u_char* cp; + uint32 x, bx, run; + int32 n, nw; + long* lp; + + if ((erun-runs)&1) + *erun++ = 0; + x = 0; + for (; runs < erun; runs += 2) { + run = runs[0]; + if (x+run > lastx || run > lastx ) + run = runs[0] = (uint16) (lastx - x); + if (run) { + cp = buf + (x>>3); + bx = x&7; + if (run > 8-bx) { + if (bx) { /* align to byte boundary */ + *cp++ &= 0xff << (8-bx); + run -= 8-bx; + } + if( (n = run >> 3) != 0 ) { /* multiple bytes to fill */ + if ((n/sizeof (long)) > 1) { + /* + * Align to longword boundary and fill. + */ + for (; n && !isAligned(cp, long); n--) + *cp++ = 0x00; + lp = (long*) cp; + nw = (int32)(n / sizeof (long)); + n -= nw * sizeof (long); + do { + *lp++ = 0L; + } while (--nw); + cp = (u_char*) lp; + } + ZERO(n, cp); + run &= 7; + } +#ifdef PURIFY + if (run) + cp[0] &= 0xff >> run; +#else + cp[0] &= 0xff >> run; +#endif + } else + cp[0] &= ~(_fillmasks[run]>>bx); + x += runs[0]; + } + run = runs[1]; + if (x+run > lastx || run > lastx ) + run = runs[1] = lastx - x; + if (run) { + cp = buf + (x>>3); + bx = x&7; + if (run > 8-bx) { + if (bx) { /* align to byte boundary */ + *cp++ |= 0xff >> bx; + run -= 8-bx; + } + if( (n = run>>3) != 0 ) { /* multiple bytes to fill */ + if ((n/sizeof (long)) > 1) { + /* + * Align to longword boundary and fill. + */ + for (; n && !isAligned(cp, long); n--) + *cp++ = 0xff; + lp = (long*) cp; + nw = (int32)(n / sizeof (long)); + n -= nw * sizeof (long); + do { + *lp++ = -1L; + } while (--nw); + cp = (u_char*) lp; + } + FILL(n, cp); + run &= 7; + } +#ifdef PURIFY + if (run) + cp[0] |= 0xff00 >> run; +#else + cp[0] |= 0xff00 >> run; +#endif + } else + cp[0] |= _fillmasks[run]>>bx; + x += runs[1]; + } + } + assert(x == lastx); +} +#undef ZERO +#undef FILL + +/* + * Setup G3/G4-related compression/decompression state + * before data is processed. This routine is called once + * per image -- it sets up different state based on whether + * or not decoding or encoding is being done and whether + * 1D- or 2D-encoded data is involved. + */ +static int +Fax3SetupState(TIFF* tif) +{ + TIFFDirectory* td = &tif->tif_dir; + Fax3BaseState* sp = Fax3State(tif); + long rowbytes, rowpixels; + int needsRefLine; + + if (td->td_bitspersample != 1) { + TIFFError(tif->tif_name, + "Bits/sample must be 1 for Group 3/4 encoding/decoding"); + return (0); + } + /* + * Calculate the scanline/tile widths. + */ + if (isTiled(tif)) { + rowbytes = TIFFTileRowSize(tif); + rowpixels = td->td_tilewidth; + } else { + rowbytes = TIFFScanlineSize(tif); + rowpixels = td->td_imagewidth; + } + sp->rowbytes = (uint32) rowbytes; + sp->rowpixels = (uint32) rowpixels; + /* + * Allocate any additional space required for decoding/encoding. + */ + needsRefLine = ( + (sp->groupoptions & GROUP3OPT_2DENCODING) || + td->td_compression == COMPRESSION_CCITTFAX4 + ); + if (tif->tif_mode == O_RDONLY) { /* 1d/2d decoding */ + Fax3DecodeState* dsp = DecoderState(tif); + uint32 nruns = needsRefLine ? + 2*TIFFroundup(rowpixels,32) : rowpixels; + + /* +Problem +------- + +Decoding the file frle_bug.tif causes a crash (such as with tiff2rgba). + +In particular the array dsp->runs allocated in Fax3SetupState() is overrun +by 4-8 bytes. This occurs when Fax3DecodeRLE() processes the first +scanline. The EXPAND1D() macro advances "pa" to be thisrun+512 (an +alias for dsp->runs), pointing just beyond the end of the array. Then +the call to _TIFFFax3fillruns() does an "*erun++ = 0;" which writes beyond +the end of the array. + +In the short term I have modified the dsp->runs allocation to add eight +extra bytes to the runs buffer; however, I am only doing this because I +don't understand the algorithm well enough to change it without risking +more adverse side effects. + +Frank Warmerdam (warmerda@home.com) + + */ + + dsp->runs = (uint32*) _TIFFmalloc(8+nruns*sizeof (uint32)); + if (dsp->runs == NULL) { + TIFFError("Fax3SetupState", + "%s: No space for Group 3/4 run arrays", + tif->tif_name); + return (0); + } + dsp->curruns = dsp->runs; + if (needsRefLine) + dsp->refruns = dsp->runs + (nruns>>1); + else + dsp->refruns = NULL; + if (is2DEncoding(dsp)) { /* NB: default is 1D routine */ + tif->tif_decoderow = Fax3Decode2D; + tif->tif_decodestrip = Fax3Decode2D; + tif->tif_decodetile = Fax3Decode2D; + } + } else if (needsRefLine) { /* 2d encoding */ + Fax3EncodeState* esp = EncoderState(tif); + /* + * 2d encoding requires a scanline + * buffer for the ``reference line''; the + * scanline against which delta encoding + * is referenced. The reference line must + * be initialized to be ``white'' (done elsewhere). + */ + esp->refline = (u_char*) _TIFFmalloc(rowbytes); + if (esp->refline == NULL) { + TIFFError("Fax3SetupState", + "%s: No space for Group 3/4 reference line", + tif->tif_name); + return (0); + } + } else /* 1d encoding */ + EncoderState(tif)->refline = NULL; + return (1); +} + +/* + * CCITT Group 3 FAX Encoding. + */ + +#define Fax3FlushBits(tif, sp) { \ + if ((tif)->tif_rawcc >= (tif)->tif_rawdatasize) \ + (void) TIFFFlushData1(tif); \ + *(tif)->tif_rawcp++ = (sp)->data; \ + (tif)->tif_rawcc++; \ + (sp)->data = 0, (sp)->bit = 8; \ +} +#define _FlushBits(tif) { \ + if ((tif)->tif_rawcc >= (tif)->tif_rawdatasize) \ + (void) TIFFFlushData1(tif); \ + *(tif)->tif_rawcp++ = data; \ + (tif)->tif_rawcc++; \ + data = 0, bit = 8; \ +} +static const int _msbmask[9] = + { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff }; +#define _PutBits(tif, bits, length) { \ + while (length > bit) { \ + data |= bits >> (length - bit); \ + length -= bit; \ + _FlushBits(tif); \ + } \ + data |= (bits & _msbmask[length]) << (bit - length); \ + bit -= length; \ + if (bit == 0) \ + _FlushBits(tif); \ +} + +/* + * Write a variable-length bit-value to + * the output stream. Values are + * assumed to be at most 16 bits. + */ +static void +Fax3PutBits(TIFF* tif, u_int bits, u_int length) +{ + Fax3EncodeState* sp = EncoderState(tif); + u_int bit = sp->bit; + int data = sp->data; + + _PutBits(tif, bits, length); + + sp->data = data; + sp->bit = bit; +} + +/* + * Write a code to the output stream. + */ +#define putcode(tif, te) Fax3PutBits(tif, (te)->code, (te)->length) + +#ifdef FAX3_DEBUG +#define DEBUG_COLOR(w) (tab == TIFFFaxWhiteCodes ? w "W" : w "B") +#define DEBUG_PRINT(what,len) { \ + int t; \ + printf("%08X/%-2d: %s%5d\t", data, bit, DEBUG_COLOR(what), len); \ + for (t = length-1; t >= 0; t--) \ + putchar(code & (1<bit; + int data = sp->data; + u_int code, length; + + while (span >= 2624) { + const tableentry* te = &tab[63 + (2560>>6)]; + code = te->code, length = te->length; +#ifdef FAX3_DEBUG + DEBUG_PRINT("MakeUp", te->runlen); +#endif + _PutBits(tif, code, length); + span -= te->runlen; + } + if (span >= 64) { + const tableentry* te = &tab[63 + (span>>6)]; + assert(te->runlen == 64*(span>>6)); + code = te->code, length = te->length; +#ifdef FAX3_DEBUG + DEBUG_PRINT("MakeUp", te->runlen); +#endif + _PutBits(tif, code, length); + span -= te->runlen; + } + code = tab[span].code, length = tab[span].length; +#ifdef FAX3_DEBUG + DEBUG_PRINT(" Term", tab[span].runlen); +#endif + _PutBits(tif, code, length); + + sp->data = data; + sp->bit = bit; +} + +/* + * Write an EOL code to the output stream. The zero-fill + * logic for byte-aligning encoded scanlines is handled + * here. We also handle writing the tag bit for the next + * scanline when doing 2d encoding. + */ +static void +Fax3PutEOL(TIFF* tif) +{ + Fax3EncodeState* sp = EncoderState(tif); + u_int bit = sp->bit; + int data = sp->data; + u_int code, length, tparm; + + if (sp->b.groupoptions & GROUP3OPT_FILLBITS) { + /* + * Force bit alignment so EOL will terminate on + * a byte boundary. That is, force the bit alignment + * to 16-12 = 4 before putting out the EOL code. + */ + int align = 8 - 4; + if (align != sp->bit) { + if (align > sp->bit) + align = sp->bit + (8 - align); + else + align = sp->bit - align; + code = 0; + tparm=align; + _PutBits(tif, 0, tparm); + } + } + code = EOL, length = 12; + if (is2DEncoding(sp)) + code = (code<<1) | (sp->tag == G3_1D), length++; + _PutBits(tif, code, length); + + sp->data = data; + sp->bit = bit; +} + +/* + * Reset encoding state at the start of a strip. + */ +static int +Fax3PreEncode(TIFF* tif, tsample_t s) +{ + Fax3EncodeState* sp = EncoderState(tif); + + (void) s; + assert(sp != NULL); + sp->bit = 8; + sp->data = 0; + sp->tag = G3_1D; + /* + * This is necessary for Group 4; otherwise it isn't + * needed because the first scanline of each strip ends + * up being copied into the refline. + */ + if (sp->refline) + _TIFFmemset(sp->refline, 0x00, sp->b.rowbytes); + if (is2DEncoding(sp)) { + float res = tif->tif_dir.td_yresolution; + /* + * The CCITT spec says that when doing 2d encoding, you + * should only do it on K consecutive scanlines, where K + * depends on the resolution of the image being encoded + * (2 for <= 200 lpi, 4 for > 200 lpi). Since the directory + * code initializes td_yresolution to 0, this code will + * select a K of 2 unless the YResolution tag is set + * appropriately. (Note also that we fudge a little here + * and use 150 lpi to avoid problems with units conversion.) + */ + if (tif->tif_dir.td_resolutionunit == RESUNIT_CENTIMETER) + res *= 2.54f; /* convert to inches */ + sp->maxk = (res > 150 ? 4 : 2); + sp->k = sp->maxk-1; + } else + sp->k = sp->maxk = 0; + return (1); +} + +static const u_char zeroruns[256] = { + 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, /* 0x00 - 0x0f */ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0x10 - 0x1f */ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x20 - 0x2f */ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x30 - 0x3f */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x40 - 0x4f */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x50 - 0x5f */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x60 - 0x6f */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x70 - 0x7f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 - 0x8f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 - 0x9f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0 - 0xaf */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0 - 0xbf */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0 - 0xcf */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0 - 0xdf */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0 - 0xef */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xf0 - 0xff */ +}; +static const u_char oneruns[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 - 0x0f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 - 0x1f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 - 0x2f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 - 0x3f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 - 0x4f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 - 0x5f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 - 0x6f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 - 0x7f */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x80 - 0x8f */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x90 - 0x9f */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xa0 - 0xaf */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xb0 - 0xbf */ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0xc0 - 0xcf */ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0xd0 - 0xdf */ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0xe0 - 0xef */ + 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, /* 0xf0 - 0xff */ +}; + +/* + * On certain systems it pays to inline + * the routines that find pixel spans. + */ +#ifdef VAXC +static int32 find0span(u_char*, int32, int32); +static int32 find1span(u_char*, int32, int32); +#pragma inline(find0span,find1span) +#endif + +/* + * Find a span of ones or zeros using the supplied + * table. The ``base'' of the bit string is supplied + * along with the start+end bit indices. + */ +INLINE static int32 +find0span(u_char* bp, int32 bs, int32 be) +{ + int32 bits = be - bs; + int32 n, span; + + bp += bs>>3; + /* + * Check partial byte on lhs. + */ + if (bits > 0 && (n = (bs & 7))) { + span = zeroruns[(*bp << n) & 0xff]; + if (span > 8-n) /* table value too generous */ + span = 8-n; + if (span > bits) /* constrain span to bit range */ + span = bits; + if (n+span < 8) /* doesn't extend to edge of byte */ + return (span); + bits -= span; + bp++; + } else + span = 0; + if (bits >= 2*8*sizeof (long)) { + long* lp; + /* + * Align to longword boundary and check longwords. + */ + while (!isAligned(bp, long)) { + if (*bp != 0x00) + return (span + zeroruns[*bp]); + span += 8, bits -= 8; + bp++; + } + lp = (long*) bp; + while (bits >= 8*sizeof (long) && *lp == 0) { + span += 8*sizeof (long), bits -= 8*sizeof (long); + lp++; + } + bp = (u_char*) lp; + } + /* + * Scan full bytes for all 0's. + */ + while (bits >= 8) { + if (*bp != 0x00) /* end of run */ + return (span + zeroruns[*bp]); + span += 8, bits -= 8; + bp++; + } + /* + * Check partial byte on rhs. + */ + if (bits > 0) { + n = zeroruns[*bp]; + span += (n > bits ? bits : n); + } + return (span); +} + +INLINE static int32 +find1span(u_char* bp, int32 bs, int32 be) +{ + int32 bits = be - bs; + int32 n, span; + + bp += bs>>3; + /* + * Check partial byte on lhs. + */ + if (bits > 0 && (n = (bs & 7))) { + span = oneruns[(*bp << n) & 0xff]; + if (span > 8-n) /* table value too generous */ + span = 8-n; + if (span > bits) /* constrain span to bit range */ + span = bits; + if (n+span < 8) /* doesn't extend to edge of byte */ + return (span); + bits -= span; + bp++; + } else + span = 0; + if (bits >= 2*8*sizeof (long)) { + long* lp; + /* + * Align to longword boundary and check longwords. + */ + while (!isAligned(bp, long)) { + if (*bp != 0xff) + return (span + oneruns[*bp]); + span += 8, bits -= 8; + bp++; + } + lp = (long*) bp; + while (bits >= 8*sizeof (long) && *lp == ~0) { + span += 8*sizeof (long), bits -= 8*sizeof (long); + lp++; + } + bp = (u_char*) lp; + } + /* + * Scan full bytes for all 1's. + */ + while (bits >= 8) { + if (*bp != 0xff) /* end of run */ + return (span + oneruns[*bp]); + span += 8, bits -= 8; + bp++; + } + /* + * Check partial byte on rhs. + */ + if (bits > 0) { + n = oneruns[*bp]; + span += (n > bits ? bits : n); + } + return (span); +} + +/* + * Return the offset of the next bit in the range + * [bs..be] that is different from the specified + * color. The end, be, is returned if no such bit + * exists. + */ +#define finddiff(_cp, _bs, _be, _color) \ + (_bs + (_color ? find1span(_cp,_bs,_be) : find0span(_cp,_bs,_be))) +/* + * Like finddiff, but also check the starting bit + * against the end in case start > end. + */ +#define finddiff2(_cp, _bs, _be, _color) \ + (_bs < _be ? finddiff(_cp,_bs,_be,_color) : _be) + +/* + * 1d-encode a row of pixels. The encoding is + * a sequence of all-white or all-black spans + * of pixels encoded with Huffman codes. + */ +static int +Fax3Encode1DRow(TIFF* tif, u_char* bp, uint32 bits) +{ + Fax3EncodeState* sp = EncoderState(tif); + int32 span; + uint32 bs = 0; + + for (;;) { + span = find0span(bp, bs, bits); /* white span */ + putspan(tif, span, TIFFFaxWhiteCodes); + bs += span; + if (bs >= bits) + break; + span = find1span(bp, bs, bits); /* black span */ + putspan(tif, span, TIFFFaxBlackCodes); + bs += span; + if (bs >= bits) + break; + } + if (sp->b.mode & (FAXMODE_BYTEALIGN|FAXMODE_WORDALIGN)) { + if (sp->bit != 8) /* byte-align */ + Fax3FlushBits(tif, sp); + if ((sp->b.mode&FAXMODE_WORDALIGN) && + !isAligned(tif->tif_rawcp, uint16)) + Fax3FlushBits(tif, sp); + } + return (1); +} + +static const tableentry horizcode = + { 3, 0x1 }; /* 001 */ +static const tableentry passcode = + { 4, 0x1 }; /* 0001 */ +static const tableentry vcodes[7] = { + { 7, 0x03 }, /* 0000 011 */ + { 6, 0x03 }, /* 0000 11 */ + { 3, 0x03 }, /* 011 */ + { 1, 0x1 }, /* 1 */ + { 3, 0x2 }, /* 010 */ + { 6, 0x02 }, /* 0000 10 */ + { 7, 0x02 } /* 0000 010 */ +}; + +/* + * 2d-encode a row of pixels. Consult the CCITT + * documentation for the algorithm. + */ +static int +Fax3Encode2DRow(TIFF* tif, u_char* bp, u_char* rp, uint32 bits) +{ +#define PIXEL(buf,ix) ((((buf)[(ix)>>3]) >> (7-((ix)&7))) & 1) + uint32 a0 = 0; + uint32 a1 = (PIXEL(bp, 0) != 0 ? 0 : finddiff(bp, 0, bits, 0)); + uint32 b1 = (PIXEL(rp, 0) != 0 ? 0 : finddiff(rp, 0, bits, 0)); + uint32 a2, b2; + + for (;;) { + b2 = finddiff2(rp, b1, bits, PIXEL(rp,b1)); + if (b2 >= a1) { + int32 d = b1 - a1; + if (!(-3 <= d && d <= 3)) { /* horizontal mode */ + a2 = finddiff2(bp, a1, bits, PIXEL(bp,a1)); + putcode(tif, &horizcode); + if (a0+a1 == 0 || PIXEL(bp, a0) == 0) { + putspan(tif, a1-a0, TIFFFaxWhiteCodes); + putspan(tif, a2-a1, TIFFFaxBlackCodes); + } else { + putspan(tif, a1-a0, TIFFFaxBlackCodes); + putspan(tif, a2-a1, TIFFFaxWhiteCodes); + } + a0 = a2; + } else { /* vertical mode */ + putcode(tif, &vcodes[d+3]); + a0 = a1; + } + } else { /* pass mode */ + putcode(tif, &passcode); + a0 = b2; + } + if (a0 >= bits) + break; + a1 = finddiff(bp, a0, bits, PIXEL(bp,a0)); + b1 = finddiff(rp, a0, bits, !PIXEL(bp,a0)); + b1 = finddiff(rp, b1, bits, PIXEL(bp,a0)); + } + return (1); +#undef PIXEL +} + +/* + * Encode a buffer of pixels. + */ +static int +Fax3Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + Fax3EncodeState* sp = EncoderState(tif); + + (void) s; + while ((long)cc > 0) { + if ((sp->b.mode & FAXMODE_NOEOL) == 0) + Fax3PutEOL(tif); + if (is2DEncoding(sp)) { + if (sp->tag == G3_1D) { + if (!Fax3Encode1DRow(tif, bp, sp->b.rowpixels)) + return (0); + sp->tag = G3_2D; + } else { + if (!Fax3Encode2DRow(tif, bp, sp->refline, sp->b.rowpixels)) + return (0); + sp->k--; + } + if (sp->k == 0) { + sp->tag = G3_1D; + sp->k = sp->maxk-1; + } else + _TIFFmemcpy(sp->refline, bp, sp->b.rowbytes); + } else { + if (!Fax3Encode1DRow(tif, bp, sp->b.rowpixels)) + return (0); + } + bp += sp->b.rowbytes; + cc -= sp->b.rowbytes; + if (cc != 0) + tif->tif_row++; + } + return (1); +} + +static int +Fax3PostEncode(TIFF* tif) +{ + Fax3EncodeState* sp = EncoderState(tif); + + if (sp->bit != 8) + Fax3FlushBits(tif, sp); + return (1); +} + +static void +Fax3Close(TIFF* tif) +{ + if ((Fax3State(tif)->mode & FAXMODE_NORTC) == 0) { + Fax3EncodeState* sp = EncoderState(tif); + u_int code = EOL; + u_int length = 12; + int i; + + if (is2DEncoding(sp)) + code = (code<<1) | (sp->tag == G3_1D), length++; + for (i = 0; i < 6; i++) + Fax3PutBits(tif, code, length); + Fax3FlushBits(tif, sp); + } +} + +static void +Fax3Cleanup(TIFF* tif) +{ + if (tif->tif_data) { + if (tif->tif_mode == O_RDONLY) { + Fax3DecodeState* sp = DecoderState(tif); + if (sp->runs) + _TIFFfree(sp->runs); + } else { + Fax3EncodeState* sp = EncoderState(tif); + if (sp->refline) + _TIFFfree(sp->refline); + } + if (Fax3State(tif)->subaddress) + _TIFFfree(Fax3State(tif)->subaddress); + _TIFFfree(tif->tif_data); + tif->tif_data = NULL; + } +} + +#define FIELD_BADFAXLINES (FIELD_CODEC+0) +#define FIELD_CLEANFAXDATA (FIELD_CODEC+1) +#define FIELD_BADFAXRUN (FIELD_CODEC+2) +#define FIELD_RECVPARAMS (FIELD_CODEC+3) +#define FIELD_SUBADDRESS (FIELD_CODEC+4) +#define FIELD_RECVTIME (FIELD_CODEC+5) + +#define FIELD_OPTIONS (FIELD_CODEC+6) + +static const TIFFFieldInfo faxFieldInfo[] = { + { TIFFTAG_FAXMODE, 0, 0, TIFF_ANY, FIELD_PSEUDO, + FALSE, FALSE, "FaxMode" }, + { TIFFTAG_FAXFILLFUNC, 0, 0, TIFF_ANY, FIELD_PSEUDO, + FALSE, FALSE, "FaxFillFunc" }, + { TIFFTAG_BADFAXLINES, 1, 1, TIFF_LONG, FIELD_BADFAXLINES, + TRUE, FALSE, "BadFaxLines" }, + { TIFFTAG_BADFAXLINES, 1, 1, TIFF_SHORT, FIELD_BADFAXLINES, + TRUE, FALSE, "BadFaxLines" }, + { TIFFTAG_CLEANFAXDATA, 1, 1, TIFF_SHORT, FIELD_CLEANFAXDATA, + TRUE, FALSE, "CleanFaxData" }, + { TIFFTAG_CONSECUTIVEBADFAXLINES,1,1, TIFF_LONG, FIELD_BADFAXRUN, + TRUE, FALSE, "ConsecutiveBadFaxLines" }, + { TIFFTAG_CONSECUTIVEBADFAXLINES,1,1, TIFF_SHORT, FIELD_BADFAXRUN, + TRUE, FALSE, "ConsecutiveBadFaxLines" }, + { TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, FIELD_RECVPARAMS, + TRUE, FALSE, "FaxRecvParams" }, + { TIFFTAG_FAXSUBADDRESS, -1,-1, TIFF_ASCII, FIELD_SUBADDRESS, + TRUE, FALSE, "FaxSubAddress" }, + { TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, FIELD_RECVTIME, + TRUE, FALSE, "FaxRecvTime" }, +}; +static const TIFFFieldInfo fax3FieldInfo[] = { + { TIFFTAG_GROUP3OPTIONS, 1, 1, TIFF_LONG, FIELD_OPTIONS, + FALSE, FALSE, "Group3Options" }, +}; +static const TIFFFieldInfo fax4FieldInfo[] = { + { TIFFTAG_GROUP4OPTIONS, 1, 1, TIFF_LONG, FIELD_OPTIONS, + FALSE, FALSE, "Group4Options" }, +}; +#define N(a) (sizeof (a) / sizeof (a[0])) + +static int +Fax3VSetField(TIFF* tif, ttag_t tag, va_list ap) +{ + Fax3BaseState* sp = Fax3State(tif); + + switch (tag) { + case TIFFTAG_FAXMODE: + sp->mode = va_arg(ap, int); + return (1); /* NB: pseudo tag */ + case TIFFTAG_FAXFILLFUNC: + if (tif->tif_mode == O_RDONLY) + DecoderState(tif)->fill = va_arg(ap, TIFFFaxFillFunc); + return (1); /* NB: pseudo tag */ + case TIFFTAG_GROUP3OPTIONS: + case TIFFTAG_GROUP4OPTIONS: + sp->groupoptions = va_arg(ap, uint32); + break; + case TIFFTAG_BADFAXLINES: + sp->badfaxlines = va_arg(ap, uint32); + break; + case TIFFTAG_CLEANFAXDATA: + sp->cleanfaxdata = (uint16) va_arg(ap, int); + break; + case TIFFTAG_CONSECUTIVEBADFAXLINES: + sp->badfaxrun = va_arg(ap, uint32); + break; + case TIFFTAG_FAXRECVPARAMS: + sp->recvparams = va_arg(ap, uint32); + break; + case TIFFTAG_FAXSUBADDRESS: + _TIFFsetString(&sp->subaddress, va_arg(ap, char*)); + break; + case TIFFTAG_FAXRECVTIME: + sp->recvtime = va_arg(ap, uint32); + break; + default: + return (*sp->vsetparent)(tif, tag, ap); + } + TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit); + tif->tif_flags |= TIFF_DIRTYDIRECT; + return (1); +} + +static int +Fax3VGetField(TIFF* tif, ttag_t tag, va_list ap) +{ + Fax3BaseState* sp = Fax3State(tif); + + switch (tag) { + case TIFFTAG_FAXMODE: + *va_arg(ap, int*) = sp->mode; + break; + case TIFFTAG_FAXFILLFUNC: + if (tif->tif_mode == O_RDONLY) + *va_arg(ap, TIFFFaxFillFunc*) = DecoderState(tif)->fill; + break; + case TIFFTAG_GROUP3OPTIONS: + case TIFFTAG_GROUP4OPTIONS: + *va_arg(ap, uint32*) = sp->groupoptions; + break; + case TIFFTAG_BADFAXLINES: + *va_arg(ap, uint32*) = sp->badfaxlines; + break; + case TIFFTAG_CLEANFAXDATA: + *va_arg(ap, uint16*) = sp->cleanfaxdata; + break; + case TIFFTAG_CONSECUTIVEBADFAXLINES: + *va_arg(ap, uint32*) = sp->badfaxrun; + break; + case TIFFTAG_FAXRECVPARAMS: + *va_arg(ap, uint32*) = sp->recvparams; + break; + case TIFFTAG_FAXSUBADDRESS: + *va_arg(ap, char**) = sp->subaddress; + break; + case TIFFTAG_FAXRECVTIME: + *va_arg(ap, uint32*) = sp->recvtime; + break; + default: + return (*sp->vgetparent)(tif, tag, ap); + } + return (1); +} + +static void +Fax3PrintDir(TIFF* tif, FILE* fd, long flags) +{ + Fax3BaseState* sp = Fax3State(tif); + + (void) flags; + if (TIFFFieldSet(tif,FIELD_OPTIONS)) { + const char* sep = " "; + if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX4) { + fprintf(fd, " Group 4 Options:"); + if (sp->groupoptions & GROUP4OPT_UNCOMPRESSED) + fprintf(fd, "%suncompressed data", sep); + } else { + + fprintf(fd, " Group 3 Options:"); + if (sp->groupoptions & GROUP3OPT_2DENCODING) + fprintf(fd, "%s2-d encoding", sep), sep = "+"; + if (sp->groupoptions & GROUP3OPT_FILLBITS) + fprintf(fd, "%sEOL padding", sep), sep = "+"; + if (sp->groupoptions & GROUP3OPT_UNCOMPRESSED) + fprintf(fd, "%suncompressed data", sep); + } + fprintf(fd, " (%lu = 0x%lx)\n", + (u_long) sp->groupoptions, (u_long) sp->groupoptions); + } + if (TIFFFieldSet(tif,FIELD_CLEANFAXDATA)) { + fprintf(fd, " Fax Data:"); + switch (sp->cleanfaxdata) { + case CLEANFAXDATA_CLEAN: + fprintf(fd, " clean"); + break; + case CLEANFAXDATA_REGENERATED: + fprintf(fd, " receiver regenerated"); + break; + case CLEANFAXDATA_UNCLEAN: + fprintf(fd, " uncorrected errors"); + break; + } + fprintf(fd, " (%u = 0x%x)\n", + sp->cleanfaxdata, sp->cleanfaxdata); + } + if (TIFFFieldSet(tif,FIELD_BADFAXLINES)) + fprintf(fd, " Bad Fax Lines: %lu\n", (u_long) sp->badfaxlines); + if (TIFFFieldSet(tif,FIELD_BADFAXRUN)) + fprintf(fd, " Consecutive Bad Fax Lines: %lu\n", + (u_long) sp->badfaxrun); + if (TIFFFieldSet(tif,FIELD_RECVPARAMS)) + fprintf(fd, " Fax Receive Parameters: %08lx\n", + (u_long) sp->recvparams); + if (TIFFFieldSet(tif,FIELD_SUBADDRESS)) + fprintf(fd, " Fax SubAddress: %s\n", sp->subaddress); + if (TIFFFieldSet(tif,FIELD_RECVTIME)) + fprintf(fd, " Fax Receive Time: %lu secs\n", + (u_long) sp->recvtime); +} + +static int +InitCCITTFax3(TIFF* tif) +{ + Fax3BaseState* sp; + + /* + * Allocate state block so tag methods have storage to record values. + */ + if (tif->tif_mode == O_RDONLY) + tif->tif_data = (tidata_t) + _TIFFmalloc(sizeof (Fax3DecodeState)); + else + tif->tif_data = (tidata_t) + _TIFFmalloc(sizeof (Fax3EncodeState)); + + if (tif->tif_data == NULL) { + TIFFError("TIFFInitCCITTFax3", + "%s: No space for state block", tif->tif_name); + return (0); + } + sp = Fax3State(tif); + + /* + * Merge codec-specific tag information and + * override parent get/set field methods. + */ + _TIFFMergeFieldInfo(tif, faxFieldInfo, N(faxFieldInfo)); + sp->vgetparent = tif->tif_vgetfield; + tif->tif_vgetfield = Fax3VGetField; /* hook for codec tags */ + sp->vsetparent = tif->tif_vsetfield; + tif->tif_vsetfield = Fax3VSetField; /* hook for codec tags */ + tif->tif_printdir = Fax3PrintDir; /* hook for codec tags */ + sp->groupoptions = 0; + sp->recvparams = 0; + sp->subaddress = NULL; + + if (tif->tif_mode == O_RDONLY) { + tif->tif_flags |= TIFF_NOBITREV;/* decoder does bit reversal */ + DecoderState(tif)->runs = NULL; + TIFFSetField(tif, TIFFTAG_FAXFILLFUNC, _TIFFFax3fillruns); + } else + EncoderState(tif)->refline = NULL; + + /* + * Install codec methods. + */ + tif->tif_setupdecode = Fax3SetupState; + tif->tif_predecode = Fax3PreDecode; + tif->tif_decoderow = Fax3Decode1D; + tif->tif_decodestrip = Fax3Decode1D; + tif->tif_decodetile = Fax3Decode1D; + tif->tif_setupencode = Fax3SetupState; + tif->tif_preencode = Fax3PreEncode; + tif->tif_postencode = Fax3PostEncode; + tif->tif_encoderow = Fax3Encode; + tif->tif_encodestrip = Fax3Encode; + tif->tif_encodetile = Fax3Encode; + tif->tif_close = Fax3Close; + tif->tif_cleanup = Fax3Cleanup; + + return (1); +} + +int +TIFFInitCCITTFax3(TIFF* tif, int scheme) +{ + if (InitCCITTFax3(tif)) { + _TIFFMergeFieldInfo(tif, fax3FieldInfo, N(fax3FieldInfo)); + + /* + * The default format is Class/F-style w/o RTC. + */ + return TIFFSetField(tif, TIFFTAG_FAXMODE, FAXMODE_CLASSF); + } else + return (0); +} + +/* + * CCITT Group 4 (T.6) Facsimile-compatible + * Compression Scheme Support. + */ + +#define SWAP(t,a,b) { t x; x = (a); (a) = (b); (b) = x; } +/* + * Decode the requested amount of G4-encoded data. + */ +static int +Fax4Decode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +{ + DECLARE_STATE_2D(tif, sp, "Fax4Decode"); + + (void) s; + CACHE_STATE(tif, sp); + while ((long)occ > 0) { + a0 = 0; + RunLength = 0; + pa = thisrun = sp->curruns; + pb = sp->refruns; + b1 = *pb++; +#ifdef FAX3_DEBUG + printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail); + printf("-------------------- %d\n", tif->tif_row); + fflush(stdout); +#endif + EXPAND2D(EOFG4); + (*sp->fill)(buf, thisrun, pa, lastx); + SETVAL(0); /* imaginary change for reference */ + SWAP(uint32*, sp->curruns, sp->refruns); + buf += sp->b.rowbytes; + occ -= sp->b.rowbytes; + if (occ != 0) + tif->tif_row++; + continue; + EOFG4: + (*sp->fill)(buf, thisrun, pa, lastx); + UNCACHE_STATE(tif, sp); + return (-1); + } + UNCACHE_STATE(tif, sp); + return (1); +} +#undef SWAP + +/* + * Encode the requested amount of data. + */ +static int +Fax4Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + Fax3EncodeState *sp = EncoderState(tif); + + (void) s; + while ((long)cc > 0) { + if (!Fax3Encode2DRow(tif, bp, sp->refline, sp->b.rowpixels)) + return (0); + _TIFFmemcpy(sp->refline, bp, sp->b.rowbytes); + bp += sp->b.rowbytes; + cc -= sp->b.rowbytes; + if (cc != 0) + tif->tif_row++; + } + return (1); +} + +static int +Fax4PostEncode(TIFF* tif) +{ + Fax3EncodeState *sp = EncoderState(tif); + + /* terminate strip w/ EOFB */ + Fax3PutBits(tif, EOL, 12); + Fax3PutBits(tif, EOL, 12); + if (sp->bit != 8) + Fax3FlushBits(tif, sp); + return (1); +} + +int +TIFFInitCCITTFax4(TIFF* tif, int scheme) +{ + if (InitCCITTFax3(tif)) { /* reuse G3 support */ + _TIFFMergeFieldInfo(tif, fax4FieldInfo, N(fax4FieldInfo)); + + tif->tif_decoderow = Fax4Decode; + tif->tif_decodestrip = Fax4Decode; + tif->tif_decodetile = Fax4Decode; + tif->tif_encoderow = Fax4Encode; + tif->tif_encodestrip = Fax4Encode; + tif->tif_encodetile = Fax4Encode; + tif->tif_postencode = Fax4PostEncode; + /* + * Suppress RTC at the end of each strip. + */ + return TIFFSetField(tif, TIFFTAG_FAXMODE, FAXMODE_NORTC); + } else + return (0); +} + +/* + * CCITT Group 3 1-D Modified Huffman RLE Compression Support. + * (Compression algorithms 2 and 32771) + */ + +/* + * Decode the requested amount of RLE-encoded data. + */ +static int +Fax3DecodeRLE(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +{ + DECLARE_STATE(tif, sp, "Fax3DecodeRLE"); + int mode = sp->b.mode; + + (void) s; + CACHE_STATE(tif, sp); + thisrun = sp->curruns; + while ((long)occ > 0) { + a0 = 0; + RunLength = 0; + pa = thisrun; +#ifdef FAX3_DEBUG + printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail); + printf("-------------------- %d\n", tif->tif_row); + fflush(stdout); +#endif + EXPAND1D(EOFRLE); + (*sp->fill)(buf, thisrun, pa, lastx); + /* + * Cleanup at the end of the row. + */ + if (mode & FAXMODE_BYTEALIGN) { + int n = BitsAvail - (BitsAvail &~ 7); + ClrBits(n); + } else if (mode & FAXMODE_WORDALIGN) { + int n = BitsAvail - (BitsAvail &~ 15); + ClrBits(n); + if (BitsAvail == 0 && !isAligned(cp, uint16)) + cp++; + } + buf += sp->b.rowbytes; + occ -= sp->b.rowbytes; + if (occ != 0) + tif->tif_row++; + continue; + EOFRLE: /* premature EOF */ + (*sp->fill)(buf, thisrun, pa, lastx); + UNCACHE_STATE(tif, sp); + return (-1); + } + UNCACHE_STATE(tif, sp); + return (1); +} + +int +TIFFInitCCITTRLE(TIFF* tif, int scheme) +{ + if (InitCCITTFax3(tif)) { /* reuse G3 support */ + tif->tif_decoderow = Fax3DecodeRLE; + tif->tif_decodestrip = Fax3DecodeRLE; + tif->tif_decodetile = Fax3DecodeRLE; + /* + * Suppress RTC+EOLs when encoding and byte-align data. + */ + return TIFFSetField(tif, TIFFTAG_FAXMODE, + FAXMODE_NORTC|FAXMODE_NOEOL|FAXMODE_BYTEALIGN); + } else + return (0); +} + +int +TIFFInitCCITTRLEW(TIFF* tif, int scheme) +{ + if (InitCCITTFax3(tif)) { /* reuse G3 support */ + tif->tif_decoderow = Fax3DecodeRLE; + tif->tif_decodestrip = Fax3DecodeRLE; + tif->tif_decodetile = Fax3DecodeRLE; + /* + * Suppress RTC+EOLs when encoding and word-align data. + */ + return TIFFSetField(tif, TIFFTAG_FAXMODE, + FAXMODE_NORTC|FAXMODE_NOEOL|FAXMODE_WORDALIGN); + } else + return (0); +} +#endif /* CCITT_SUPPORT */ diff --git a/libtiff/tif_fax3.h b/libtiff/tif_fax3.h new file mode 100755 index 0000000..0fd75f1 --- /dev/null +++ b/libtiff/tif_fax3.h @@ -0,0 +1,522 @@ +/* $Id: tif_fax3.h,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1990-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#ifndef _FAX3_ +#define _FAX3_ +/* + * TIFF Library. + * + * CCITT Group 3 (T.4) and Group 4 (T.6) Decompression Support. + * + * Decoder support is derived, with permission, from the code + * in Frank Cringle's viewfax program; + * Copyright (C) 1990, 1995 Frank D. Cringle. + */ +#include "tiff.h" + +/* + * To override the default routine used to image decoded + * spans one can use the pseduo tag TIFFTAG_FAXFILLFUNC. + * The routine must have the type signature given below; + * for example: + * + * fillruns(unsigned char* buf, uint32* runs, uint32* erun, uint32 lastx) + * + * where buf is place to set the bits, runs is the array of b&w run + * lengths (white then black), erun is the last run in the array, and + * lastx is the width of the row in pixels. Fill routines can assume + * the run array has room for at least lastx runs and can overwrite + * data in the run array as needed (e.g. to append zero runs to bring + * the count up to a nice multiple). + */ +typedef void (*TIFFFaxFillFunc)(unsigned char*, uint32*, uint32*, uint32); + +/* + * The default run filler; made external for other decoders. + */ +#if defined(__cplusplus) +extern "C" { +#endif +extern void _TIFFFax3fillruns(unsigned char*, uint32*, uint32*, uint32); +#if defined(__cplusplus) +} +#endif + + +/* finite state machine codes */ +#define S_Null 0 +#define S_Pass 1 +#define S_Horiz 2 +#define S_V0 3 +#define S_VR 4 +#define S_VL 5 +#define S_Ext 6 +#define S_TermW 7 +#define S_TermB 8 +#define S_MakeUpW 9 +#define S_MakeUpB 10 +#define S_MakeUp 11 +#define S_EOL 12 + +typedef struct { /* state table entry */ + unsigned char State; /* see above */ + unsigned char Width; /* width of code in bits */ + uint32 Param; /* unsigned 32-bit run length in bits */ +} TIFFFaxTabEnt; + +extern const TIFFFaxTabEnt TIFFFaxMainTable[]; +extern const TIFFFaxTabEnt TIFFFaxWhiteTable[]; +extern const TIFFFaxTabEnt TIFFFaxBlackTable[]; + +/* + * The following macros define the majority of the G3/G4 decoder + * algorithm using the state tables defined elsewhere. To build + * a decoder you need some setup code and some glue code. Note + * that you may also need/want to change the way the NeedBits* + * macros get input data if, for example, you know the data to be + * decoded is properly aligned and oriented (doing so before running + * the decoder can be a big performance win). + * + * Consult the decoder in the TIFF library for an idea of what you + * need to define and setup to make use of these definitions. + * + * NB: to enable a debugging version of these macros define FAX3_DEBUG + * before including this file. Trace output goes to stdout. + */ + +#ifndef EndOfData +#define EndOfData() (cp >= ep) +#endif +/* + * Need <=8 or <=16 bits of input data. Unlike viewfax we + * cannot use/assume a word-aligned, properly bit swizzled + * input data set because data may come from an arbitrarily + * aligned, read-only source such as a memory-mapped file. + * Note also that the viewfax decoder does not check for + * running off the end of the input data buffer. This is + * possible for G3-encoded data because it prescans the input + * data to count EOL markers, but can cause problems for G4 + * data. In any event, we don't prescan and must watch for + * running out of data since we can't permit the library to + * scan past the end of the input data buffer. + * + * Finally, note that we must handle remaindered data at the end + * of a strip specially. The coder asks for a fixed number of + * bits when scanning for the next code. This may be more bits + * than are actually present in the data stream. If we appear + * to run out of data but still have some number of valid bits + * remaining then we makeup the requested amount with zeros and + * return successfully. If the returned data is incorrect then + * we should be called again and get a premature EOF error; + * otherwise we should get the right answer. + */ +#ifndef NeedBits8 +#define NeedBits8(n,eoflab) do { \ + if (BitsAvail < (n)) { \ + if (EndOfData()) { \ + if (BitsAvail == 0) /* no valid bits */ \ + goto eoflab; \ + BitsAvail = (n); /* pad with zeros */ \ + } else { \ + BitAcc |= ((uint32) bitmap[*cp++])<>= (n); \ +} while (0) + +#ifdef FAX3_DEBUG +static const char* StateNames[] = { + "Null ", + "Pass ", + "Horiz ", + "V0 ", + "VR ", + "VL ", + "Ext ", + "TermW ", + "TermB ", + "MakeUpW", + "MakeUpB", + "MakeUp ", + "EOL ", +}; +#define DEBUG_SHOW putchar(BitAcc & (1 << t) ? '1' : '0') +#define LOOKUP8(wid,tab,eoflab) do { \ + int t; \ + NeedBits8(wid,eoflab); \ + TabEnt = tab + GetBits(wid); \ + printf("%08lX/%d: %s%5d\t", (long) BitAcc, BitsAvail, \ + StateNames[TabEnt->State], TabEnt->Param); \ + for (t = 0; t < TabEnt->Width; t++) \ + DEBUG_SHOW; \ + putchar('\n'); \ + fflush(stdout); \ + ClrBits(TabEnt->Width); \ +} while (0) +#define LOOKUP16(wid,tab,eoflab) do { \ + int t; \ + NeedBits16(wid,eoflab); \ + TabEnt = tab + GetBits(wid); \ + printf("%08lX/%d: %s%5d\t", (long) BitAcc, BitsAvail, \ + StateNames[TabEnt->State], TabEnt->Param); \ + for (t = 0; t < TabEnt->Width; t++) \ + DEBUG_SHOW; \ + putchar('\n'); \ + fflush(stdout); \ + ClrBits(TabEnt->Width); \ +} while (0) + +#define SETVAL(x) do { \ + *pa++ = RunLength + (x); \ + printf("SETVAL: %d\t%d\n", RunLength + (x), a0); \ + a0 += x; \ + RunLength = 0; \ +} while (0) +#else +#define LOOKUP8(wid,tab,eoflab) do { \ + NeedBits8(wid,eoflab); \ + TabEnt = tab + GetBits(wid); \ + ClrBits(TabEnt->Width); \ +} while (0) +#define LOOKUP16(wid,tab,eoflab) do { \ + NeedBits16(wid,eoflab); \ + TabEnt = tab + GetBits(wid); \ + ClrBits(TabEnt->Width); \ +} while (0) + +/* + * Append a run to the run length array for the + * current row and reset decoding state. + */ +#define SETVAL(x) do { \ + *pa++ = RunLength + (x); \ + a0 += (x); \ + RunLength = 0; \ +} while (0) +#endif + +/* + * Synchronize input decoding at the start of each + * row by scanning for an EOL (if appropriate) and + * skipping any trash data that might be present + * after a decoding error. Note that the decoding + * done elsewhere that recognizes an EOL only consumes + * 11 consecutive zero bits. This means that if EOLcnt + * is non-zero then we still need to scan for the final flag + * bit that is part of the EOL code. + */ +#define SYNC_EOL(eoflab) do { \ + if (EOLcnt == 0) { \ + for (;;) { \ + NeedBits16(11,eoflab); \ + if (GetBits(11) == 0) \ + break; \ + ClrBits(1); \ + } \ + } \ + for (;;) { \ + NeedBits8(8,eoflab); \ + if (GetBits(8)) \ + break; \ + ClrBits(8); \ + } \ + while (GetBits(1) == 0) \ + ClrBits(1); \ + ClrBits(1); /* EOL bit */ \ + EOLcnt = 0; /* reset EOL counter/flag */ \ +} while (0) + +/* + * Cleanup the array of runs after decoding a row. + * We adjust final runs to insure the user buffer is not + * overwritten and/or undecoded area is white filled. + */ +#define CLEANUP_RUNS() do { \ + if (RunLength) \ + SETVAL(0); \ + if (a0 != lastx) { \ + badlength(a0, lastx); \ + while (a0 > lastx && pa > thisrun) \ + a0 -= *--pa; \ + if (a0 < lastx) { \ + if (a0 < 0) \ + a0 = 0; \ + if ((pa-thisrun)&1) \ + SETVAL(0); \ + SETVAL(lastx - a0); \ + } else if (a0 > lastx) { \ + SETVAL(lastx); \ + SETVAL(0); \ + } \ + } \ +} while (0) + +/* + * Decode a line of 1D-encoded data. + * + * The line expanders are written as macros so that they can be reused + * but still have direct access to the local variables of the "calling" + * function. + * + * Note that unlike the original version we have to explicitly test for + * a0 >= lastx after each black/white run is decoded. This is because + * the original code depended on the input data being zero-padded to + * insure the decoder recognized an EOL before running out of data. + */ +#define EXPAND1D(eoflab) do { \ + for (;;) { \ + for (;;) { \ + LOOKUP16(12, TIFFFaxWhiteTable, eof1d); \ + switch (TabEnt->State) { \ + case S_EOL: \ + EOLcnt = 1; \ + goto done1d; \ + case S_TermW: \ + SETVAL(TabEnt->Param); \ + goto doneWhite1d; \ + case S_MakeUpW: \ + case S_MakeUp: \ + a0 += TabEnt->Param; \ + RunLength += TabEnt->Param; \ + break; \ + default: \ + unexpected("WhiteTable", a0); \ + goto done1d; \ + } \ + } \ + doneWhite1d: \ + if (a0 >= lastx) \ + goto done1d; \ + for (;;) { \ + LOOKUP16(13, TIFFFaxBlackTable, eof1d); \ + switch (TabEnt->State) { \ + case S_EOL: \ + EOLcnt = 1; \ + goto done1d; \ + case S_TermB: \ + SETVAL(TabEnt->Param); \ + goto doneBlack1d; \ + case S_MakeUpB: \ + case S_MakeUp: \ + a0 += TabEnt->Param; \ + RunLength += TabEnt->Param; \ + break; \ + default: \ + unexpected("BlackTable", a0); \ + goto done1d; \ + } \ + } \ + doneBlack1d: \ + if (a0 >= lastx) \ + goto done1d; \ + } \ +eof1d: \ + prematureEOF(a0); \ + CLEANUP_RUNS(); \ + goto eoflab; \ +done1d: \ + CLEANUP_RUNS(); \ +} while (0) + +/* + * Update the value of b1 using the array + * of runs for the reference line. + */ +#define CHECK_b1 do { \ + if (pa != thisrun) while (b1 <= a0 && b1 < lastx) { \ + b1 += pb[0] + pb[1]; \ + pb += 2; \ + } \ +} while (0) + +/* + * Expand a row of 2D-encoded data. + */ +#define EXPAND2D(eoflab) do { \ + while (a0 < lastx) { \ + LOOKUP8(7, TIFFFaxMainTable, eof2d); \ + switch (TabEnt->State) { \ + case S_Pass: \ + CHECK_b1; \ + b1 += *pb++; \ + RunLength += b1 - a0; \ + a0 = b1; \ + b1 += *pb++; \ + break; \ + case S_Horiz: \ + if ((pa-thisrun)&1) { \ + for (;;) { /* black first */ \ + LOOKUP16(13, TIFFFaxBlackTable, eof2d); \ + switch (TabEnt->State) { \ + case S_TermB: \ + SETVAL(TabEnt->Param); \ + goto doneWhite2da; \ + case S_MakeUpB: \ + case S_MakeUp: \ + a0 += TabEnt->Param; \ + RunLength += TabEnt->Param; \ + break; \ + default: \ + goto badBlack2d; \ + } \ + } \ + doneWhite2da:; \ + for (;;) { /* then white */ \ + LOOKUP16(12, TIFFFaxWhiteTable, eof2d); \ + switch (TabEnt->State) { \ + case S_TermW: \ + SETVAL(TabEnt->Param); \ + goto doneBlack2da; \ + case S_MakeUpW: \ + case S_MakeUp: \ + a0 += TabEnt->Param; \ + RunLength += TabEnt->Param; \ + break; \ + default: \ + goto badWhite2d; \ + } \ + } \ + doneBlack2da:; \ + } else { \ + for (;;) { /* white first */ \ + LOOKUP16(12, TIFFFaxWhiteTable, eof2d); \ + switch (TabEnt->State) { \ + case S_TermW: \ + SETVAL(TabEnt->Param); \ + goto doneWhite2db; \ + case S_MakeUpW: \ + case S_MakeUp: \ + a0 += TabEnt->Param; \ + RunLength += TabEnt->Param; \ + break; \ + default: \ + goto badWhite2d; \ + } \ + } \ + doneWhite2db:; \ + for (;;) { /* then black */ \ + LOOKUP16(13, TIFFFaxBlackTable, eof2d); \ + switch (TabEnt->State) { \ + case S_TermB: \ + SETVAL(TabEnt->Param); \ + goto doneBlack2db; \ + case S_MakeUpB: \ + case S_MakeUp: \ + a0 += TabEnt->Param; \ + RunLength += TabEnt->Param; \ + break; \ + default: \ + goto badBlack2d; \ + } \ + } \ + doneBlack2db:; \ + } \ + CHECK_b1; \ + break; \ + case S_V0: \ + CHECK_b1; \ + SETVAL(b1 - a0); \ + b1 += *pb++; \ + break; \ + case S_VR: \ + CHECK_b1; \ + SETVAL(b1 - a0 + TabEnt->Param); \ + b1 += *pb++; \ + break; \ + case S_VL: \ + CHECK_b1; \ + SETVAL(b1 - a0 - TabEnt->Param); \ + b1 -= *--pb; \ + break; \ + case S_Ext: \ + *pa++ = lastx - a0; \ + extension(a0); \ + goto eol2d; \ + case S_EOL: \ + *pa++ = lastx - a0; \ + NeedBits8(5,eof2d); \ + if (GetBits(5)) \ + unexpected("EOL", a0); \ + EOLcnt = 1; \ + goto eol2d; \ + default: \ + badMain2d: \ + unexpected("MainTable", a0); \ + goto eol2d; \ + badBlack2d: \ + unexpected("BlackTable", a0); \ + goto eol2d; \ + badWhite2d: \ + unexpected("WhiteTable", a0); \ + goto eol2d; \ + eof2d: \ + prematureEOF(a0); \ + CLEANUP_RUNS(); \ + goto eoflab; \ + } \ + } \ + if (RunLength) { \ + if (RunLength + a0 < lastx) { \ + /* expect a final V0 */ \ + NeedBits8(1,eof2d); \ + if (!GetBits(1)) \ + goto badMain2d; \ + ClrBits(1); \ + } \ + SETVAL(0); \ + } \ +eol2d: \ + CLEANUP_RUNS(); \ +} while (0) +#endif /* _FAX3_ */ diff --git a/libtiff/tif_flush.c b/libtiff/tif_flush.c new file mode 100755 index 0000000..821c631 --- /dev/null +++ b/libtiff/tif_flush.c @@ -0,0 +1,60 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_flush.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + */ +#include "tiffiop.h" + +int +TIFFFlush(TIFF* tif) +{ + + if (tif->tif_mode != O_RDONLY) { + if (!TIFFFlushData(tif)) + return (0); + if ((tif->tif_flags & TIFF_DIRTYDIRECT) && + !TIFFWriteDirectory(tif)) + return (0); + } + return (1); +} + +/* + * Flush buffered data to the file. + */ +int +TIFFFlushData(TIFF* tif) +{ + if ((tif->tif_flags & TIFF_BEENWRITING) == 0) + return (0); + if (tif->tif_flags & TIFF_POSTENCODE) { + tif->tif_flags &= ~TIFF_POSTENCODE; + if (!(*tif->tif_postencode)(tif)) + return (0); + } + return (TIFFFlushData1(tif)); +} diff --git a/libtiff/tif_getimage.c b/libtiff/tif_getimage.c new file mode 100755 index 0000000..3244365 --- /dev/null +++ b/libtiff/tif_getimage.c @@ -0,0 +1,2046 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_getimage.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library + * + * Read and return a packed RGBA image. + */ +#include "tiffiop.h" +#include +#include + +static int gtTileContig(TIFFRGBAImage*, uint32*, uint32, uint32); +static int gtTileSeparate(TIFFRGBAImage*, uint32*, uint32, uint32); +static int gtStripContig(TIFFRGBAImage*, uint32*, uint32, uint32); +static int gtStripSeparate(TIFFRGBAImage*, uint32*, uint32, uint32); +static int pickTileContigCase(TIFFRGBAImage*); +static int pickTileSeparateCase(TIFFRGBAImage*); + +static const char photoTag[] = "PhotometricInterpretation"; + +/* + * Check the image to see if TIFFReadRGBAImage can deal with it. + * 1/0 is returned according to whether or not the image can + * be handled. If 0 is returned, emsg contains the reason + * why it is being rejected. + */ +int +TIFFRGBAImageOK(TIFF* tif, char emsg[1024]) +{ + TIFFDirectory* td = &tif->tif_dir; + uint16 photometric; + int colorchannels; + + switch (td->td_bitspersample) { + case 1: case 2: case 4: + case 8: case 16: + break; + default: + sprintf(emsg, "Sorry, can not handle images with %d-bit samples", + td->td_bitspersample); + return (0); + } + colorchannels = td->td_samplesperpixel - td->td_extrasamples; + if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometric)) { + switch (colorchannels) { + case 1: + photometric = PHOTOMETRIC_MINISBLACK; + break; + case 3: + photometric = PHOTOMETRIC_RGB; + break; + default: + sprintf(emsg, "Missing needed %s tag", photoTag); + return (0); + } + } + switch (photometric) { + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + case PHOTOMETRIC_PALETTE: + if (td->td_planarconfig == PLANARCONFIG_CONTIG && td->td_samplesperpixel != 1) { + sprintf(emsg, + "Sorry, can not handle contiguous data with %s=%d, and %s=%d", + photoTag, photometric, + "Samples/pixel", td->td_samplesperpixel); + return (0); + } + break; + case PHOTOMETRIC_YCBCR: + if (td->td_planarconfig != PLANARCONFIG_CONTIG) { + sprintf(emsg, "Sorry, can not handle YCbCr images with %s=%d", + "Planarconfiguration", td->td_planarconfig); + return (0); + } + break; + case PHOTOMETRIC_RGB: + if (colorchannels < 3) { + sprintf(emsg, "Sorry, can not handle RGB image with %s=%d", + "Color channels", colorchannels); + return (0); + } + break; +#ifdef CMYK_SUPPORT + case PHOTOMETRIC_SEPARATED: + if (td->td_inkset != INKSET_CMYK) { + sprintf(emsg, "Sorry, can not handle separated image with %s=%d", + "InkSet", td->td_inkset); + return (0); + } + if (td->td_samplesperpixel != 4) { + sprintf(emsg, "Sorry, can not handle separated image with %s=%d", + "Samples/pixel", td->td_samplesperpixel); + return (0); + } + break; +#endif + case PHOTOMETRIC_LOGL: + if (td->td_compression != COMPRESSION_SGILOG) { + sprintf(emsg, "Sorry, LogL data must have %s=%d", + "Compression", COMPRESSION_SGILOG); + return (0); + } + break; + case PHOTOMETRIC_LOGLUV: + if (td->td_compression != COMPRESSION_SGILOG && + td->td_compression != COMPRESSION_SGILOG24) { + sprintf(emsg, "Sorry, LogLuv data must have %s=%d or %d", + "Compression", COMPRESSION_SGILOG, COMPRESSION_SGILOG24); + return (0); + } + if (td->td_planarconfig != PLANARCONFIG_CONTIG) { + sprintf(emsg, "Sorry, can not handle LogLuv images with %s=%d", + "Planarconfiguration", td->td_planarconfig); + return (0); + } + break; + default: + sprintf(emsg, "Sorry, can not handle image with %s=%d", + photoTag, photometric); + return (0); + } + return (1); +} + +void +TIFFRGBAImageEnd(TIFFRGBAImage* img) +{ + if (img->Map) + _TIFFfree(img->Map), img->Map = NULL; + if (img->BWmap) + _TIFFfree(img->BWmap), img->BWmap = NULL; + if (img->PALmap) + _TIFFfree(img->PALmap), img->PALmap = NULL; + if (img->ycbcr) + _TIFFfree(img->ycbcr), img->ycbcr = NULL; + + if( img->redcmap ) { + _TIFFfree( img->redcmap ); + _TIFFfree( img->greencmap ); + _TIFFfree( img->bluecmap ); + } +} + +static int +isCCITTCompression(TIFF* tif) +{ + uint16 compress; + TIFFGetField(tif, TIFFTAG_COMPRESSION, &compress); + return (compress == COMPRESSION_CCITTFAX3 || + compress == COMPRESSION_CCITTFAX4 || + compress == COMPRESSION_CCITTRLE || + compress == COMPRESSION_CCITTRLEW); +} + +int +TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) +{ + uint16* sampleinfo; + uint16 extrasamples; + uint16 planarconfig; + uint16 compress; + int colorchannels; + uint16 *red_orig, *green_orig, *blue_orig; + int n_color; + + /* Initialize to normal values */ + img->row_offset = 0; + img->col_offset = 0; + img->redcmap = NULL; + img->greencmap = NULL; + img->bluecmap = NULL; + + img->tif = tif; + img->stoponerr = stop; + TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &img->bitspersample); + switch (img->bitspersample) { + case 1: case 2: case 4: + case 8: case 16: + break; + default: + sprintf(emsg, "Sorry, can not image with %d-bit samples", + img->bitspersample); + return (0); + } + img->alpha = 0; + TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &img->samplesperpixel); + TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES, + &extrasamples, &sampleinfo); + if (extrasamples == 1) + switch (sampleinfo[0]) { + case EXTRASAMPLE_ASSOCALPHA: /* data is pre-multiplied */ + case EXTRASAMPLE_UNASSALPHA: /* data is not pre-multiplied */ + img->alpha = sampleinfo[0]; + break; + } + colorchannels = img->samplesperpixel - extrasamples; + TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &compress); + TIFFGetFieldDefaulted(tif, TIFFTAG_PLANARCONFIG, &planarconfig); + if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &img->photometric)) { + switch (colorchannels) { + case 1: + if (isCCITTCompression(tif)) + img->photometric = PHOTOMETRIC_MINISWHITE; + else + img->photometric = PHOTOMETRIC_MINISBLACK; + break; + case 3: + img->photometric = PHOTOMETRIC_RGB; + break; + default: + sprintf(emsg, "Missing needed %s tag", photoTag); + return (0); + } + } + switch (img->photometric) { + case PHOTOMETRIC_PALETTE: + if (!TIFFGetField(tif, TIFFTAG_COLORMAP, + &red_orig, &green_orig, &blue_orig)) { + TIFFError(TIFFFileName(tif), "Missing required \"Colormap\" tag"); + return (0); + } + + /* copy the colormaps so we can modify them */ + n_color = (1L << img->bitspersample); + img->redcmap = (uint16 *) _TIFFmalloc(sizeof(uint16)*n_color); + img->greencmap = (uint16 *) _TIFFmalloc(sizeof(uint16)*n_color); + img->bluecmap = (uint16 *) _TIFFmalloc(sizeof(uint16)*n_color); + if( !img->redcmap || !img->greencmap || !img->bluecmap ) { + TIFFError(TIFFFileName(tif), "Out of memory for colormap copy"); + return (0); + } + + memcpy( img->redcmap, red_orig, n_color * 2 ); + memcpy( img->greencmap, green_orig, n_color * 2 ); + memcpy( img->bluecmap, blue_orig, n_color * 2 ); + + /* fall thru... */ + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + if (planarconfig == PLANARCONFIG_CONTIG && img->samplesperpixel != 1) { + sprintf(emsg, + "Sorry, can not handle contiguous data with %s=%d, and %s=%d", + photoTag, img->photometric, + "Samples/pixel", img->samplesperpixel); + return (0); + } + break; + case PHOTOMETRIC_YCBCR: + if (planarconfig != PLANARCONFIG_CONTIG) { + sprintf(emsg, "Sorry, can not handle YCbCr images with %s=%d", + "Planarconfiguration", planarconfig); + return (0); + } + /* It would probably be nice to have a reality check here. */ + if (compress == COMPRESSION_JPEG && planarconfig == PLANARCONFIG_CONTIG) { + /* can rely on libjpeg to convert to RGB */ + /* XXX should restore current state on exit */ + TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB); + img->photometric = PHOTOMETRIC_RGB; + } + break; + case PHOTOMETRIC_RGB: + if (colorchannels < 3) { + sprintf(emsg, "Sorry, can not handle RGB image with %s=%d", + "Color channels", colorchannels); + return (0); + } + break; + case PHOTOMETRIC_SEPARATED: { + uint16 inkset; + TIFFGetFieldDefaulted(tif, TIFFTAG_INKSET, &inkset); + if (inkset != INKSET_CMYK) { + sprintf(emsg, "Sorry, can not handle separated image with %s=%d", + "InkSet", inkset); + return (0); + } + if (img->samplesperpixel != 4) { + sprintf(emsg, "Sorry, can not handle separated image with %s=%d", + "Samples/pixel", img->samplesperpixel); + return (0); + } + break; + } + case PHOTOMETRIC_LOGL: + if (compress != COMPRESSION_SGILOG) { + sprintf(emsg, "Sorry, LogL data must have %s=%d", + "Compression", COMPRESSION_SGILOG); + return (0); + } + TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_8BIT); + img->photometric = PHOTOMETRIC_MINISBLACK; /* little white lie */ + img->bitspersample = 8; + break; + case PHOTOMETRIC_LOGLUV: + if (compress != COMPRESSION_SGILOG && compress != COMPRESSION_SGILOG24) { + sprintf(emsg, "Sorry, LogLuv data must have %s=%d or %d", + "Compression", COMPRESSION_SGILOG, COMPRESSION_SGILOG24); + return (0); + } + if (planarconfig != PLANARCONFIG_CONTIG) { + sprintf(emsg, "Sorry, can not handle LogLuv images with %s=%d", + "Planarconfiguration", planarconfig); + return (0); + } + TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_8BIT); + img->photometric = PHOTOMETRIC_RGB; /* little white lie */ + img->bitspersample = 8; + break; + default: + sprintf(emsg, "Sorry, can not handle image with %s=%d", + photoTag, img->photometric); + return (0); + } + img->Map = NULL; + img->BWmap = NULL; + img->PALmap = NULL; + img->ycbcr = NULL; + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &img->width); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &img->height); + TIFFGetFieldDefaulted(tif, TIFFTAG_ORIENTATION, &img->orientation); + img->isContig = + !(planarconfig == PLANARCONFIG_SEPARATE && colorchannels > 1); + if (img->isContig) { + img->get = TIFFIsTiled(tif) ? gtTileContig : gtStripContig; + (void) pickTileContigCase(img); + } else { + img->get = TIFFIsTiled(tif) ? gtTileSeparate : gtStripSeparate; + (void) pickTileSeparateCase(img); + } + return (1); +} + +int +TIFFRGBAImageGet(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) +{ + if (img->get == NULL) { + TIFFError(TIFFFileName(img->tif), "No \"get\" routine setup"); + return (0); + } + if (img->put.any == NULL) { + TIFFError(TIFFFileName(img->tif), + "No \"put\" routine setupl; probably can not handle image format"); + return (0); + } + return (*img->get)(img, raster, w, h); +} + +/* + * Read the specified image into an ABGR-format raster. + */ +int +TIFFReadRGBAImage(TIFF* tif, + uint32 rwidth, uint32 rheight, uint32* raster, int stop) +{ + char emsg[1024]; + TIFFRGBAImage img; + int ok; + + if (TIFFRGBAImageBegin(&img, tif, stop, emsg)) { + /* XXX verify rwidth and rheight against width and height */ + ok = TIFFRGBAImageGet(&img, raster+(rheight-img.height)*rwidth, + rwidth, img.height); + TIFFRGBAImageEnd(&img); + } else { + TIFFError(TIFFFileName(tif), emsg); + ok = 0; + } + return (ok); +} + +static uint32 +setorientation(TIFFRGBAImage* img, uint32 h) +{ + TIFF* tif = img->tif; + uint32 y; + + switch (img->orientation) { + case ORIENTATION_BOTRIGHT: + case ORIENTATION_RIGHTBOT: /* XXX */ + case ORIENTATION_LEFTBOT: /* XXX */ + TIFFWarning(TIFFFileName(tif), "using bottom-left orientation"); + img->orientation = ORIENTATION_BOTLEFT; + /* fall thru... */ + case ORIENTATION_BOTLEFT: + y = 0; + break; + case ORIENTATION_TOPRIGHT: + case ORIENTATION_RIGHTTOP: /* XXX */ + case ORIENTATION_LEFTTOP: /* XXX */ + default: + TIFFWarning(TIFFFileName(tif), "using top-left orientation"); + img->orientation = ORIENTATION_TOPLEFT; + /* fall thru... */ + case ORIENTATION_TOPLEFT: + y = h-1; + break; + } + return (y); +} + +/* + * Get an tile-organized image that has + * PlanarConfiguration contiguous if SamplesPerPixel > 1 + * or + * SamplesPerPixel == 1 + */ +static int +gtTileContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) +{ + TIFF* tif = img->tif; + tileContigRoutine put = img->put.contig; + uint16 orientation; + uint32 col, row, y; + uint32 tw, th; + u_char* buf; + int32 fromskew, toskew; + uint32 nrow; + + buf = (u_char*) _TIFFmalloc(TIFFTileSize(tif)); + if (buf == 0) { + TIFFError(TIFFFileName(tif), "No space for tile buffer"); + return (0); + } + TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw); + TIFFGetField(tif, TIFFTAG_TILELENGTH, &th); + y = setorientation(img, h); + orientation = img->orientation; + toskew = -(int32) (orientation == ORIENTATION_TOPLEFT ? tw+w : tw-w); + for (row = 0; row < h; row += th) { + nrow = (row + th > h ? h - row : th); + for (col = 0; col < w; col += tw) { + if (TIFFReadTile(tif, buf, col+img->col_offset, + row+img->row_offset, 0, 0) < 0 && img->stoponerr) + break; + if (col + tw > w) { + /* + * Tile is clipped horizontally. Calculate + * visible portion and skewing factors. + */ + uint32 npix = w - col; + fromskew = tw - npix; + (*put)(img, raster+y*w+col, col, y, + npix, nrow, fromskew, toskew + fromskew, buf); + } else { + (*put)(img, raster+y*w+col, col, y, tw, nrow, 0, toskew, buf); + } + } + y += (orientation == ORIENTATION_TOPLEFT ? + -(int32) nrow : (int32) nrow); + } + _TIFFfree(buf); + return (1); +} + +/* + * Get an tile-organized image that has + * SamplesPerPixel > 1 + * PlanarConfiguration separated + * We assume that all such images are RGB. + */ +static int +gtTileSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) +{ + TIFF* tif = img->tif; + tileSeparateRoutine put = img->put.separate; + uint16 orientation; + uint32 col, row, y; + uint32 tw, th; + u_char* buf; + u_char* r; + u_char* g; + u_char* b; + u_char* a; + tsize_t tilesize; + int32 fromskew, toskew; + int alpha = img->alpha; + uint32 nrow; + + tilesize = TIFFTileSize(tif); + buf = (u_char*) _TIFFmalloc(4*tilesize); + if (buf == 0) { + TIFFError(TIFFFileName(tif), "No space for tile buffer"); + return (0); + } + r = buf; + g = r + tilesize; + b = g + tilesize; + a = b + tilesize; + if (!alpha) + memset(a, 0xff, tilesize); + TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw); + TIFFGetField(tif, TIFFTAG_TILELENGTH, &th); + y = setorientation(img, h); + orientation = img->orientation; + toskew = -(int32) (orientation == ORIENTATION_TOPLEFT ? tw+w : tw-w); + for (row = 0; row < h; row += th) { + nrow = (row + th > h ? h - row : th); + for (col = 0; col < w; col += tw) { + if (TIFFReadTile(tif, r, col+img->col_offset, + row+img->row_offset,0,0) < 0 && img->stoponerr) + break; + if (TIFFReadTile(tif, g, col+img->col_offset, + row+img->row_offset,0,1) < 0 && img->stoponerr) + break; + if (TIFFReadTile(tif, b, col+img->col_offset, + row+img->row_offset,0,2) < 0 && img->stoponerr) + break; + if (alpha && TIFFReadTile(tif,a,col+img->col_offset, + row+img->row_offset,0,3) < 0 && img->stoponerr) + break; + if (col + tw > w) { + /* + * Tile is clipped horizontally. Calculate + * visible portion and skewing factors. + */ + uint32 npix = w - col; + fromskew = tw - npix; + (*put)(img, raster+y*w+col, col, y, + npix, nrow, fromskew, toskew + fromskew, r, g, b, a); + } else { + (*put)(img, raster+y*w+col, col, y, + tw, nrow, 0, toskew, r, g, b, a); + } + } + y += (orientation == ORIENTATION_TOPLEFT ? + -(int32) nrow : (int32) nrow); + } + _TIFFfree(buf); + return (1); +} + +/* + * Get a strip-organized image that has + * PlanarConfiguration contiguous if SamplesPerPixel > 1 + * or + * SamplesPerPixel == 1 + */ +static int +gtStripContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) +{ + TIFF* tif = img->tif; + tileContigRoutine put = img->put.contig; + uint16 orientation; + uint32 row, y, nrow; + u_char* buf; + uint32 rowsperstrip; + uint32 imagewidth = img->width; + tsize_t scanline; + int32 fromskew, toskew; + + buf = (u_char*) _TIFFmalloc(TIFFStripSize(tif)); + if (buf == 0) { + TIFFError(TIFFFileName(tif), "No space for strip buffer"); + return (0); + } + y = setorientation(img, h); + orientation = img->orientation; + toskew = -(int32) (orientation == ORIENTATION_TOPLEFT ? w+w : w-w); + TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + scanline = TIFFScanlineSize(tif); + fromskew = (w < imagewidth ? imagewidth - w : 0); + for (row = 0; row < h; row += rowsperstrip) { + nrow = (row + rowsperstrip > h ? h - row : rowsperstrip); + if (TIFFReadEncodedStrip(tif, + TIFFComputeStrip(tif,row+img->row_offset, 0), + buf, nrow*scanline) < 0 + && img->stoponerr) + break; + (*put)(img, raster+y*w, 0, y, w, nrow, fromskew, toskew, buf); + y += (orientation == ORIENTATION_TOPLEFT ? + -(int32) nrow : (int32) nrow); + } + _TIFFfree(buf); + return (1); +} + +/* + * Get a strip-organized image with + * SamplesPerPixel > 1 + * PlanarConfiguration separated + * We assume that all such images are RGB. + */ +static int +gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) +{ + TIFF* tif = img->tif; + tileSeparateRoutine put = img->put.separate; + uint16 orientation; + u_char *buf; + u_char *r, *g, *b, *a; + uint32 row, y, nrow; + tsize_t scanline; + uint32 rowsperstrip, offset_row; + uint32 imagewidth = img->width; + tsize_t stripsize; + int32 fromskew, toskew; + int alpha = img->alpha; + + stripsize = TIFFStripSize(tif); + r = buf = (u_char *)_TIFFmalloc(4*stripsize); + if (buf == 0) { + TIFFError(TIFFFileName(tif), "No space for tile buffer"); + return (0); + } + g = r + stripsize; + b = g + stripsize; + a = b + stripsize; + if (!alpha) + memset(a, 0xff, stripsize); + y = setorientation(img, h); + orientation = img->orientation; + toskew = -(int32) (orientation == ORIENTATION_TOPLEFT ? w+w : w-w); + TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + scanline = TIFFScanlineSize(tif); + fromskew = (w < imagewidth ? imagewidth - w : 0); + for (row = 0; row < h; row += rowsperstrip) { + nrow = (row + rowsperstrip > h ? h - row : rowsperstrip); + offset_row = row + img->row_offset; + if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 0), + r, nrow*scanline) < 0 && img->stoponerr) + break; + if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 1), + g, nrow*scanline) < 0 && img->stoponerr) + break; + if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 2), + b, nrow*scanline) < 0 && img->stoponerr) + break; + if (alpha && + (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 3), + a, nrow*scanline) < 0 && img->stoponerr)) + break; + (*put)(img, raster+y*w, 0, y, w, nrow, fromskew, toskew, r, g, b, a); + y += (orientation == ORIENTATION_TOPLEFT ? + -(int32) nrow : (int32) nrow); + } + _TIFFfree(buf); + return (1); +} + +/* + * The following routines move decoded data returned + * from the TIFF library into rasters filled with packed + * ABGR pixels (i.e. suitable for passing to lrecwrite.) + * + * The routines have been created according to the most + * important cases and optimized. pickTileContigCase and + * pickTileSeparateCase analyze the parameters and select + * the appropriate "put" routine to use. + */ +#define REPEAT8(op) REPEAT4(op); REPEAT4(op) +#define REPEAT4(op) REPEAT2(op); REPEAT2(op) +#define REPEAT2(op) op; op +#define CASE8(x,op) \ + switch (x) { \ + case 7: op; case 6: op; case 5: op; \ + case 4: op; case 3: op; case 2: op; \ + case 1: op; \ + } +#define CASE4(x,op) switch (x) { case 3: op; case 2: op; case 1: op; } +#define NOP + +#define UNROLL8(w, op1, op2) { \ + uint32 _x; \ + for (_x = w; _x >= 8; _x -= 8) { \ + op1; \ + REPEAT8(op2); \ + } \ + if (_x > 0) { \ + op1; \ + CASE8(_x,op2); \ + } \ +} +#define UNROLL4(w, op1, op2) { \ + uint32 _x; \ + for (_x = w; _x >= 4; _x -= 4) { \ + op1; \ + REPEAT4(op2); \ + } \ + if (_x > 0) { \ + op1; \ + CASE4(_x,op2); \ + } \ +} +#define UNROLL2(w, op1, op2) { \ + uint32 _x; \ + for (_x = w; _x >= 2; _x -= 2) { \ + op1; \ + REPEAT2(op2); \ + } \ + if (_x) { \ + op1; \ + op2; \ + } \ +} + +#define SKEW(r,g,b,skew) { r += skew; g += skew; b += skew; } +#define SKEW4(r,g,b,a,skew) { r += skew; g += skew; b += skew; a+= skew; } + +#define A1 ((uint32)(0xffL<<24)) +#define PACK(r,g,b) \ + ((uint32)(r)|((uint32)(g)<<8)|((uint32)(b)<<16)|A1) +#define PACK4(r,g,b,a) \ + ((uint32)(r)|((uint32)(g)<<8)|((uint32)(b)<<16)|((uint32)(a)<<24)) +#define W2B(v) (((v)>>8)&0xff) +#define PACKW(r,g,b) \ + ((uint32)W2B(r)|((uint32)W2B(g)<<8)|((uint32)W2B(b)<<16)|A1) +#define PACKW4(r,g,b,a) \ + ((uint32)W2B(r)|((uint32)W2B(g)<<8)|((uint32)W2B(b)<<16)|((uint32)W2B(a)<<24)) + +#define DECLAREContigPutFunc(name) \ +static void name(\ + TIFFRGBAImage* img, \ + uint32* cp, \ + uint32 x, uint32 y, \ + uint32 w, uint32 h, \ + int32 fromskew, int32 toskew, \ + u_char* pp \ +) + +/* + * 8-bit palette => colormap/RGB + */ +DECLAREContigPutFunc(put8bitcmaptile) +{ + uint32** PALmap = img->PALmap; + + (void) x; (void) y; + while (h-- > 0) { + UNROLL8(w, NOP, *cp++ = PALmap[*pp++][0]); + cp += toskew; + pp += fromskew; + } +} + +/* + * 4-bit palette => colormap/RGB + */ +DECLAREContigPutFunc(put4bitcmaptile) +{ + uint32** PALmap = img->PALmap; + + (void) x; (void) y; + fromskew /= 2; + while (h-- > 0) { + uint32* bw; + UNROLL2(w, bw = PALmap[*pp++], *cp++ = *bw++); + cp += toskew; + pp += fromskew; + } +} + +/* + * 2-bit palette => colormap/RGB + */ +DECLAREContigPutFunc(put2bitcmaptile) +{ + uint32** PALmap = img->PALmap; + + (void) x; (void) y; + fromskew /= 4; + while (h-- > 0) { + uint32* bw; + UNROLL4(w, bw = PALmap[*pp++], *cp++ = *bw++); + cp += toskew; + pp += fromskew; + } +} + +/* + * 1-bit palette => colormap/RGB + */ +DECLAREContigPutFunc(put1bitcmaptile) +{ + uint32** PALmap = img->PALmap; + + (void) x; (void) y; + fromskew /= 8; + while (h-- > 0) { + uint32* bw; + UNROLL8(w, bw = PALmap[*pp++], *cp++ = *bw++); + cp += toskew; + pp += fromskew; + } +} + +/* + * 8-bit greyscale => colormap/RGB + */ +DECLAREContigPutFunc(putgreytile) +{ + uint32** BWmap = img->BWmap; + + (void) y; + while (h-- > 0) { + for (x = w; x-- > 0;) + *cp++ = BWmap[*pp++][0]; + cp += toskew; + pp += fromskew; + } +} + +/* + * 1-bit bilevel => colormap/RGB + */ +DECLAREContigPutFunc(put1bitbwtile) +{ + uint32** BWmap = img->BWmap; + + (void) x; (void) y; + fromskew /= 8; + while (h-- > 0) { + uint32* bw; + UNROLL8(w, bw = BWmap[*pp++], *cp++ = *bw++); + cp += toskew; + pp += fromskew; + } +} + +/* + * 2-bit greyscale => colormap/RGB + */ +DECLAREContigPutFunc(put2bitbwtile) +{ + uint32** BWmap = img->BWmap; + + (void) x; (void) y; + fromskew /= 4; + while (h-- > 0) { + uint32* bw; + UNROLL4(w, bw = BWmap[*pp++], *cp++ = *bw++); + cp += toskew; + pp += fromskew; + } +} + +/* + * 4-bit greyscale => colormap/RGB + */ +DECLAREContigPutFunc(put4bitbwtile) +{ + uint32** BWmap = img->BWmap; + + (void) x; (void) y; + fromskew /= 2; + while (h-- > 0) { + uint32* bw; + UNROLL2(w, bw = BWmap[*pp++], *cp++ = *bw++); + cp += toskew; + pp += fromskew; + } +} + +/* + * 8-bit packed samples, no Map => RGB + */ +DECLAREContigPutFunc(putRGBcontig8bittile) +{ + int samplesperpixel = img->samplesperpixel; + + (void) x; (void) y; + fromskew *= samplesperpixel; + while (h-- > 0) { + UNROLL8(w, NOP, + *cp++ = PACK(pp[0], pp[1], pp[2]); + pp += samplesperpixel); + cp += toskew; + pp += fromskew; + } +} + +/* + * 8-bit packed samples, w/ Map => RGB + */ +DECLAREContigPutFunc(putRGBcontig8bitMaptile) +{ + TIFFRGBValue* Map = img->Map; + int samplesperpixel = img->samplesperpixel; + + (void) y; + fromskew *= samplesperpixel; + while (h-- > 0) { + for (x = w; x-- > 0;) { + *cp++ = PACK(Map[pp[0]], Map[pp[1]], Map[pp[2]]); + pp += samplesperpixel; + } + pp += fromskew; + cp += toskew; + } +} + +/* + * 8-bit packed samples => RGBA w/ associated alpha + * (known to have Map == NULL) + */ +DECLAREContigPutFunc(putRGBAAcontig8bittile) +{ + int samplesperpixel = img->samplesperpixel; + + (void) x; (void) y; + fromskew *= samplesperpixel; + while (h-- > 0) { + UNROLL8(w, NOP, + *cp++ = PACK4(pp[0], pp[1], pp[2], pp[3]); + pp += samplesperpixel); + cp += toskew; + pp += fromskew; + } +} + +/* + * 8-bit packed samples => RGBA w/ unassociated alpha + * (known to have Map == NULL) + */ +DECLAREContigPutFunc(putRGBUAcontig8bittile) +{ + int samplesperpixel = img->samplesperpixel; + + (void) y; + fromskew *= samplesperpixel; + while (h-- > 0) { + uint32 r, g, b, a; + for (x = w; x-- > 0;) { + a = pp[3]; + r = (pp[0] * a) / 255; + g = (pp[1] * a) / 255; + b = (pp[2] * a) / 255; + *cp++ = PACK4(r,g,b,a); + pp += samplesperpixel; + } + cp += toskew; + pp += fromskew; + } +} + +/* + * 16-bit packed samples => RGB + */ +DECLAREContigPutFunc(putRGBcontig16bittile) +{ + int samplesperpixel = img->samplesperpixel; + uint16 *wp = (uint16 *)pp; + + (void) y; + fromskew *= samplesperpixel; + while (h-- > 0) { + for (x = w; x-- > 0;) { + *cp++ = PACKW(wp[0], wp[1], wp[2]); + wp += samplesperpixel; + } + cp += toskew; + wp += fromskew; + } +} + +/* + * 16-bit packed samples => RGBA w/ associated alpha + * (known to have Map == NULL) + */ +DECLAREContigPutFunc(putRGBAAcontig16bittile) +{ + int samplesperpixel = img->samplesperpixel; + uint16 *wp = (uint16 *)pp; + + (void) y; + fromskew *= samplesperpixel; + while (h-- > 0) { + for (x = w; x-- > 0;) { + *cp++ = PACKW4(wp[0], wp[1], wp[2], wp[3]); + wp += samplesperpixel; + } + cp += toskew; + wp += fromskew; + } +} + +/* + * 16-bit packed samples => RGBA w/ unassociated alpha + * (known to have Map == NULL) + */ +DECLAREContigPutFunc(putRGBUAcontig16bittile) +{ + int samplesperpixel = img->samplesperpixel; + uint16 *wp = (uint16 *)pp; + + (void) y; + fromskew *= samplesperpixel; + while (h-- > 0) { + uint32 r,g,b,a; + /* + * We shift alpha down four bits just in case unsigned + * arithmetic doesn't handle the full range. + * We still have plenty of accuracy, since the output is 8 bits. + * So we have (r * 0xffff) * (a * 0xfff)) = r*a * (0xffff*0xfff) + * Since we want r*a * 0xff for eight bit output, + * we divide by (0xffff * 0xfff) / 0xff == 0x10eff. + */ + for (x = w; x-- > 0;) { + a = wp[3] >> 4; + r = (wp[0] * a) / 0x10eff; + g = (wp[1] * a) / 0x10eff; + b = (wp[2] * a) / 0x10eff; + *cp++ = PACK4(r,g,b,a); + wp += samplesperpixel; + } + cp += toskew; + wp += fromskew; + } +} + +/* + * 8-bit packed CMYK samples w/o Map => RGB + * + * NB: The conversion of CMYK->RGB is *very* crude. + */ +DECLAREContigPutFunc(putRGBcontig8bitCMYKtile) +{ + int samplesperpixel = img->samplesperpixel; + uint16 r, g, b, k; + + (void) x; (void) y; + fromskew *= samplesperpixel; + while (h-- > 0) { + UNROLL8(w, NOP, + k = 255 - pp[3]; + r = (k*(255-pp[0]))/255; + g = (k*(255-pp[1]))/255; + b = (k*(255-pp[2]))/255; + *cp++ = PACK(r, g, b); + pp += samplesperpixel); + cp += toskew; + pp += fromskew; + } +} + +/* + * 8-bit packed CMYK samples w/Map => RGB + * + * NB: The conversion of CMYK->RGB is *very* crude. + */ +DECLAREContigPutFunc(putRGBcontig8bitCMYKMaptile) +{ + int samplesperpixel = img->samplesperpixel; + TIFFRGBValue* Map = img->Map; + uint16 r, g, b, k; + + (void) y; + fromskew *= samplesperpixel; + while (h-- > 0) { + for (x = w; x-- > 0;) { + k = 255 - pp[3]; + r = (k*(255-pp[0]))/255; + g = (k*(255-pp[1]))/255; + b = (k*(255-pp[2]))/255; + *cp++ = PACK(Map[r], Map[g], Map[b]); + pp += samplesperpixel; + } + pp += fromskew; + cp += toskew; + } +} + +#define DECLARESepPutFunc(name) \ +static void name(\ + TIFFRGBAImage* img,\ + uint32* cp,\ + uint32 x, uint32 y, \ + uint32 w, uint32 h,\ + int32 fromskew, int32 toskew,\ + u_char* r, u_char* g, u_char* b, u_char* a\ +) + +/* + * 8-bit unpacked samples => RGB + */ +DECLARESepPutFunc(putRGBseparate8bittile) +{ + (void) img; (void) x; (void) y; (void) a; + while (h-- > 0) { + UNROLL8(w, NOP, *cp++ = PACK(*r++, *g++, *b++)); + SKEW(r, g, b, fromskew); + cp += toskew; + } +} + +/* + * 8-bit unpacked samples => RGB + */ +DECLARESepPutFunc(putRGBseparate8bitMaptile) +{ + TIFFRGBValue* Map = img->Map; + + (void) y; (void) a; + while (h-- > 0) { + for (x = w; x > 0; x--) + *cp++ = PACK(Map[*r++], Map[*g++], Map[*b++]); + SKEW(r, g, b, fromskew); + cp += toskew; + } +} + +/* + * 8-bit unpacked samples => RGBA w/ associated alpha + */ +DECLARESepPutFunc(putRGBAAseparate8bittile) +{ + (void) img; (void) x; (void) y; + while (h-- > 0) { + UNROLL8(w, NOP, *cp++ = PACK4(*r++, *g++, *b++, *a++)); + SKEW4(r, g, b, a, fromskew); + cp += toskew; + } +} + +/* + * 8-bit unpacked samples => RGBA w/ unassociated alpha + */ +DECLARESepPutFunc(putRGBUAseparate8bittile) +{ + (void) img; (void) y; + while (h-- > 0) { + uint32 rv, gv, bv, av; + for (x = w; x-- > 0;) { + av = *a++; + rv = (*r++ * av) / 255; + gv = (*g++ * av) / 255; + bv = (*b++ * av) / 255; + *cp++ = PACK4(rv,gv,bv,av); + } + SKEW4(r, g, b, a, fromskew); + cp += toskew; + } +} + +/* + * 16-bit unpacked samples => RGB + */ +DECLARESepPutFunc(putRGBseparate16bittile) +{ + uint16 *wr = (uint16*) r; + uint16 *wg = (uint16*) g; + uint16 *wb = (uint16*) b; + + (void) img; (void) y; (void) a; + while (h-- > 0) { + for (x = 0; x < w; x++) + *cp++ = PACKW(*wr++, *wg++, *wb++); + SKEW(wr, wg, wb, fromskew); + cp += toskew; + } +} + +/* + * 16-bit unpacked samples => RGBA w/ associated alpha + */ +DECLARESepPutFunc(putRGBAAseparate16bittile) +{ + uint16 *wr = (uint16*) r; + uint16 *wg = (uint16*) g; + uint16 *wb = (uint16*) b; + uint16 *wa = (uint16*) a; + + (void) img; (void) y; + while (h-- > 0) { + for (x = 0; x < w; x++) + *cp++ = PACKW4(*wr++, *wg++, *wb++, *wa++); + SKEW4(wr, wg, wb, wa, fromskew); + cp += toskew; + } +} + +/* + * 16-bit unpacked samples => RGBA w/ unassociated alpha + */ +DECLARESepPutFunc(putRGBUAseparate16bittile) +{ + uint16 *wr = (uint16*) r; + uint16 *wg = (uint16*) g; + uint16 *wb = (uint16*) b; + uint16 *wa = (uint16*) a; + + (void) img; (void) y; + while (h-- > 0) { + uint32 r,g,b,a; + /* + * We shift alpha down four bits just in case unsigned + * arithmetic doesn't handle the full range. + * We still have plenty of accuracy, since the output is 8 bits. + * So we have (r * 0xffff) * (a * 0xfff)) = r*a * (0xffff*0xfff) + * Since we want r*a * 0xff for eight bit output, + * we divide by (0xffff * 0xfff) / 0xff == 0x10eff. + */ + for (x = w; x-- > 0;) { + a = *wa++ >> 4; + r = (*wr++ * a) / 0x10eff; + g = (*wg++ * a) / 0x10eff; + b = (*wb++ * a) / 0x10eff; + *cp++ = PACK4(r,g,b,a); + } + SKEW4(wr, wg, wb, wa, fromskew); + cp += toskew; + } +} + +/* + * YCbCr -> RGB conversion and packing routines. The colorspace + * conversion algorithm comes from the IJG v5a code; see below + * for more information on how it works. + */ + +#define YCbCrtoRGB(dst, yc) { \ + int Y = (yc); \ + dst = PACK( \ + clamptab[Y+Crrtab[Cr]], \ + clamptab[Y + (int)((Cbgtab[Cb]+Crgtab[Cr])>>16)], \ + clamptab[Y+Cbbtab[Cb]]); \ +} +#define YCbCrSetup \ + TIFFYCbCrToRGB* ycbcr = img->ycbcr; \ + int* Crrtab = ycbcr->Cr_r_tab; \ + int* Cbbtab = ycbcr->Cb_b_tab; \ + int32* Crgtab = ycbcr->Cr_g_tab; \ + int32* Cbgtab = ycbcr->Cb_g_tab; \ + TIFFRGBValue* clamptab = ycbcr->clamptab + +/* + * 8-bit packed YCbCr samples w/ 4,4 subsampling => RGB + */ +DECLAREContigPutFunc(putcontig8bitYCbCr44tile) +{ + YCbCrSetup; + uint32* cp1 = cp+w+toskew; + uint32* cp2 = cp1+w+toskew; + uint32* cp3 = cp2+w+toskew; + int32 incr = 3*w+4*toskew; + + (void) y; + /* XXX adjust fromskew */ + for (; h >= 4; h -= 4) { + x = w>>2; + do { + int Cb = pp[16]; + int Cr = pp[17]; + + YCbCrtoRGB(cp [0], pp[ 0]); + YCbCrtoRGB(cp [1], pp[ 1]); + YCbCrtoRGB(cp [2], pp[ 2]); + YCbCrtoRGB(cp [3], pp[ 3]); + YCbCrtoRGB(cp1[0], pp[ 4]); + YCbCrtoRGB(cp1[1], pp[ 5]); + YCbCrtoRGB(cp1[2], pp[ 6]); + YCbCrtoRGB(cp1[3], pp[ 7]); + YCbCrtoRGB(cp2[0], pp[ 8]); + YCbCrtoRGB(cp2[1], pp[ 9]); + YCbCrtoRGB(cp2[2], pp[10]); + YCbCrtoRGB(cp2[3], pp[11]); + YCbCrtoRGB(cp3[0], pp[12]); + YCbCrtoRGB(cp3[1], pp[13]); + YCbCrtoRGB(cp3[2], pp[14]); + YCbCrtoRGB(cp3[3], pp[15]); + + cp += 4, cp1 += 4, cp2 += 4, cp3 += 4; + pp += 18; + } while (--x); + cp += incr, cp1 += incr, cp2 += incr, cp3 += incr; + pp += fromskew; + } +} + +/* + * 8-bit packed YCbCr samples w/ 4,2 subsampling => RGB + */ +DECLAREContigPutFunc(putcontig8bitYCbCr42tile) +{ + YCbCrSetup; + uint32* cp1 = cp+w+toskew; + int32 incr = 2*toskew+w; + + (void) y; + /* XXX adjust fromskew */ + for (; h >= 2; h -= 2) { + x = w>>2; + do { + int Cb = pp[8]; + int Cr = pp[9]; + + YCbCrtoRGB(cp [0], pp[0]); + YCbCrtoRGB(cp [1], pp[1]); + YCbCrtoRGB(cp [2], pp[2]); + YCbCrtoRGB(cp [3], pp[3]); + YCbCrtoRGB(cp1[0], pp[4]); + YCbCrtoRGB(cp1[1], pp[5]); + YCbCrtoRGB(cp1[2], pp[6]); + YCbCrtoRGB(cp1[3], pp[7]); + + cp += 4, cp1 += 4; + pp += 10; + } while (--x); + cp += incr, cp1 += incr; + pp += fromskew; + } +} + +/* + * 8-bit packed YCbCr samples w/ 4,1 subsampling => RGB + */ +DECLAREContigPutFunc(putcontig8bitYCbCr41tile) +{ + YCbCrSetup; + + (void) y; + /* XXX adjust fromskew */ + do { + x = w>>2; + do { + int Cb = pp[4]; + int Cr = pp[5]; + + YCbCrtoRGB(cp [0], pp[0]); + YCbCrtoRGB(cp [1], pp[1]); + YCbCrtoRGB(cp [2], pp[2]); + YCbCrtoRGB(cp [3], pp[3]); + + cp += 4; + pp += 6; + } while (--x); + cp += toskew; + pp += fromskew; + } while (--h); +} + +/* + * 8-bit packed YCbCr samples w/ 2,2 subsampling => RGB + */ +DECLAREContigPutFunc(putcontig8bitYCbCr22tile) +{ + YCbCrSetup; + uint32* cp1 = cp+w+toskew; + int32 incr = 2*toskew+w; + + (void) y; + /* XXX adjust fromskew */ + for (; h >= 2; h -= 2) { + x = w>>1; + do { + int Cb = pp[4]; + int Cr = pp[5]; + + YCbCrtoRGB(cp [0], pp[0]); + YCbCrtoRGB(cp [1], pp[1]); + YCbCrtoRGB(cp1[0], pp[2]); + YCbCrtoRGB(cp1[1], pp[3]); + + cp += 2, cp1 += 2; + pp += 6; + } while (--x); + cp += incr, cp1 += incr; + pp += fromskew; + } +} + +/* + * 8-bit packed YCbCr samples w/ 2,1 subsampling => RGB + */ +DECLAREContigPutFunc(putcontig8bitYCbCr21tile) +{ + YCbCrSetup; + + (void) y; + /* XXX adjust fromskew */ + do { + x = w>>1; + do { + int Cb = pp[2]; + int Cr = pp[3]; + + YCbCrtoRGB(cp[0], pp[0]); + YCbCrtoRGB(cp[1], pp[1]); + + cp += 2; + pp += 4; + } while (--x); + cp += toskew; + pp += fromskew; + } while (--h); +} + +/* + * 8-bit packed YCbCr samples w/ no subsampling => RGB + */ +DECLAREContigPutFunc(putcontig8bitYCbCr11tile) +{ + YCbCrSetup; + + (void) y; + /* XXX adjust fromskew */ + do { + x = w>>1; + do { + int Cb = pp[1]; + int Cr = pp[2]; + + YCbCrtoRGB(*cp++, pp[0]); + + pp += 3; + } while (--x); + cp += toskew; + pp += fromskew; + } while (--h); +} +#undef YCbCrSetup +#undef YCbCrtoRGB + +#define LumaRed coeffs[0] +#define LumaGreen coeffs[1] +#define LumaBlue coeffs[2] +#define SHIFT 16 +#define FIX(x) ((int32)((x) * (1L<RGB conversion tables. The conversion + * is done according to the 6.0 spec: + * + * R = Y + Cr*(2 - 2*LumaRed) + * B = Y + Cb*(2 - 2*LumaBlue) + * G = Y + * - LumaBlue*Cb*(2-2*LumaBlue)/LumaGreen + * - LumaRed*Cr*(2-2*LumaRed)/LumaGreen + * + * To avoid floating point arithmetic the fractional constants that + * come out of the equations are represented as fixed point values + * in the range 0...2^16. We also eliminate multiplications by + * pre-calculating possible values indexed by Cb and Cr (this code + * assumes conversion is being done for 8-bit samples). + */ +static void +TIFFYCbCrToRGBInit(TIFFYCbCrToRGB* ycbcr, TIFF* tif) +{ + TIFFRGBValue* clamptab; + float* coeffs; + int i; + + clamptab = (TIFFRGBValue*)( + (tidata_t) ycbcr+TIFFroundup(sizeof (TIFFYCbCrToRGB), sizeof (long))); + _TIFFmemset(clamptab, 0, 256); /* v < 0 => 0 */ + ycbcr->clamptab = (clamptab += 256); + for (i = 0; i < 256; i++) + clamptab[i] = i; + _TIFFmemset(clamptab+256, 255, 2*256); /* v > 255 => 255 */ + TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRCOEFFICIENTS, &coeffs); + _TIFFmemcpy(ycbcr->coeffs, coeffs, 3*sizeof (float)); + { float f1 = 2-2*LumaRed; int32 D1 = FIX(f1); + float f2 = LumaRed*f1/LumaGreen; int32 D2 = -FIX(f2); + float f3 = 2-2*LumaBlue; int32 D3 = FIX(f3); + float f4 = LumaBlue*f3/LumaGreen; int32 D4 = -FIX(f4); + int x; + + ycbcr->Cr_r_tab = (int*) (clamptab + 3*256); + ycbcr->Cb_b_tab = ycbcr->Cr_r_tab + 256; + ycbcr->Cr_g_tab = (int32*) (ycbcr->Cb_b_tab + 256); + ycbcr->Cb_g_tab = ycbcr->Cr_g_tab + 256; + /* + * i is the actual input pixel value in the range 0..255 + * Cb and Cr values are in the range -128..127 (actually + * they are in a range defined by the ReferenceBlackWhite + * tag) so there is some range shifting to do here when + * constructing tables indexed by the raw pixel data. + * + * XXX handle ReferenceBlackWhite correctly to calculate + * Cb/Cr values to use in constructing the tables. + */ + for (i = 0, x = -128; i < 256; i++, x++) { + ycbcr->Cr_r_tab[i] = (int)((D1*x + ONE_HALF)>>SHIFT); + ycbcr->Cb_b_tab[i] = (int)((D3*x + ONE_HALF)>>SHIFT); + ycbcr->Cr_g_tab[i] = D2*x; + ycbcr->Cb_g_tab[i] = D4*x + ONE_HALF; + } + } +} +#undef SHIFT +#undef ONE_HALF +#undef FIX +#undef LumaBlue +#undef LumaGreen +#undef LumaRed + +static tileContigRoutine +initYCbCrConversion(TIFFRGBAImage* img) +{ + uint16 hs, vs; + + if (img->ycbcr == NULL) { + img->ycbcr = (TIFFYCbCrToRGB*) _TIFFmalloc( + TIFFroundup(sizeof (TIFFYCbCrToRGB), sizeof (long)) + + 4*256*sizeof (TIFFRGBValue) + + 2*256*sizeof (int) + + 2*256*sizeof (int32) + ); + if (img->ycbcr == NULL) { + TIFFError(TIFFFileName(img->tif), + "No space for YCbCr->RGB conversion state"); + return (NULL); + } + TIFFYCbCrToRGBInit(img->ycbcr, img->tif); + } else { + float* coeffs; + + TIFFGetFieldDefaulted(img->tif, TIFFTAG_YCBCRCOEFFICIENTS, &coeffs); + if (_TIFFmemcmp(coeffs, img->ycbcr->coeffs, 3*sizeof (float)) != 0) + TIFFYCbCrToRGBInit(img->ycbcr, img->tif); + } + /* + * The 6.0 spec says that subsampling must be + * one of 1, 2, or 4, and that vertical subsampling + * must always be <= horizontal subsampling; so + * there are only a few possibilities and we just + * enumerate the cases. + */ + TIFFGetFieldDefaulted(img->tif, TIFFTAG_YCBCRSUBSAMPLING, &hs, &vs); + switch ((hs<<4)|vs) { + case 0x44: return (putcontig8bitYCbCr44tile); + case 0x42: return (putcontig8bitYCbCr42tile); + case 0x41: return (putcontig8bitYCbCr41tile); + case 0x22: return (putcontig8bitYCbCr22tile); + case 0x21: return (putcontig8bitYCbCr21tile); + case 0x11: return (putcontig8bitYCbCr11tile); + } + return (NULL); +} + +/* + * Greyscale images with less than 8 bits/sample are handled + * with a table to avoid lots of shifts and masks. The table + * is setup so that put*bwtile (below) can retrieve 8/bitspersample + * pixel values simply by indexing into the table with one + * number. + */ +static int +makebwmap(TIFFRGBAImage* img) +{ + TIFFRGBValue* Map = img->Map; + int bitspersample = img->bitspersample; + int nsamples = 8 / bitspersample; + int i; + uint32* p; + + img->BWmap = (uint32**) _TIFFmalloc( + 256*sizeof (uint32 *)+(256*nsamples*sizeof(uint32))); + if (img->BWmap == NULL) { + TIFFError(TIFFFileName(img->tif), "No space for B&W mapping table"); + return (0); + } + p = (uint32*)(img->BWmap + 256); + for (i = 0; i < 256; i++) { + TIFFRGBValue c; + img->BWmap[i] = p; + switch (bitspersample) { +#define GREY(x) c = Map[x]; *p++ = PACK(c,c,c); + case 1: + GREY(i>>7); + GREY((i>>6)&1); + GREY((i>>5)&1); + GREY((i>>4)&1); + GREY((i>>3)&1); + GREY((i>>2)&1); + GREY((i>>1)&1); + GREY(i&1); + break; + case 2: + GREY(i>>6); + GREY((i>>4)&3); + GREY((i>>2)&3); + GREY(i&3); + break; + case 4: + GREY(i>>4); + GREY(i&0xf); + break; + case 8: + GREY(i); + break; + } +#undef GREY + } + return (1); +} + +/* + * Construct a mapping table to convert from the range + * of the data samples to [0,255] --for display. This + * process also handles inverting B&W images when needed. + */ +static int +setupMap(TIFFRGBAImage* img) +{ + int32 x, range; + + range = (int32)((1L<bitspersample)-1); + img->Map = (TIFFRGBValue*) _TIFFmalloc((range+1) * sizeof (TIFFRGBValue)); + if (img->Map == NULL) { + TIFFError(TIFFFileName(img->tif), + "No space for photometric conversion table"); + return (0); + } + if (img->photometric == PHOTOMETRIC_MINISWHITE) { + for (x = 0; x <= range; x++) + img->Map[x] = (TIFFRGBValue) (((range - x) * 255) / range); + } else { + for (x = 0; x <= range; x++) + img->Map[x] = (TIFFRGBValue) ((x * 255) / range); + } + if (img->bitspersample <= 8 && + (img->photometric == PHOTOMETRIC_MINISBLACK || + img->photometric == PHOTOMETRIC_MINISWHITE)) { + /* + * Use photometric mapping table to construct + * unpacking tables for samples <= 8 bits. + */ + if (!makebwmap(img)) + return (0); + /* no longer need Map, free it */ + _TIFFfree(img->Map), img->Map = NULL; + } + return (1); +} + +static int +checkcmap(TIFFRGBAImage* img) +{ + uint16* r = img->redcmap; + uint16* g = img->greencmap; + uint16* b = img->bluecmap; + long n = 1L<bitspersample; + + while (n-- > 0) + if (*r++ >= 256 || *g++ >= 256 || *b++ >= 256) + return (16); + return (8); +} + +static void +cvtcmap(TIFFRGBAImage* img) +{ + uint16* r = img->redcmap; + uint16* g = img->greencmap; + uint16* b = img->bluecmap; + long i; + + for (i = (1L<bitspersample)-1; i >= 0; i--) { +#define CVT(x) ((uint16)((x)>>8)) + r[i] = CVT(r[i]); + g[i] = CVT(g[i]); + b[i] = CVT(b[i]); +#undef CVT + } +} + +/* + * Palette images with <= 8 bits/sample are handled + * with a table to avoid lots of shifts and masks. The table + * is setup so that put*cmaptile (below) can retrieve 8/bitspersample + * pixel values simply by indexing into the table with one + * number. + */ +static int +makecmap(TIFFRGBAImage* img) +{ + int bitspersample = img->bitspersample; + int nsamples = 8 / bitspersample; + uint16* r = img->redcmap; + uint16* g = img->greencmap; + uint16* b = img->bluecmap; + uint32 *p; + int i; + + img->PALmap = (uint32**) _TIFFmalloc( + 256*sizeof (uint32 *)+(256*nsamples*sizeof(uint32))); + if (img->PALmap == NULL) { + TIFFError(TIFFFileName(img->tif), "No space for Palette mapping table"); + return (0); + } + p = (uint32*)(img->PALmap + 256); + for (i = 0; i < 256; i++) { + TIFFRGBValue c; + img->PALmap[i] = p; +#define CMAP(x) c = x; *p++ = PACK(r[c]&0xff, g[c]&0xff, b[c]&0xff); + switch (bitspersample) { + case 1: + CMAP(i>>7); + CMAP((i>>6)&1); + CMAP((i>>5)&1); + CMAP((i>>4)&1); + CMAP((i>>3)&1); + CMAP((i>>2)&1); + CMAP((i>>1)&1); + CMAP(i&1); + break; + case 2: + CMAP(i>>6); + CMAP((i>>4)&3); + CMAP((i>>2)&3); + CMAP(i&3); + break; + case 4: + CMAP(i>>4); + CMAP(i&0xf); + break; + case 8: + CMAP(i); + break; + } +#undef CMAP + } + return (1); +} + +/* + * Construct any mapping table used + * by the associated put routine. + */ +static int +buildMap(TIFFRGBAImage* img) +{ + switch (img->photometric) { + case PHOTOMETRIC_RGB: + case PHOTOMETRIC_YCBCR: + case PHOTOMETRIC_SEPARATED: + if (img->bitspersample == 8) + break; + /* fall thru... */ + case PHOTOMETRIC_MINISBLACK: + case PHOTOMETRIC_MINISWHITE: + if (!setupMap(img)) + return (0); + break; + case PHOTOMETRIC_PALETTE: + /* + * Convert 16-bit colormap to 8-bit (unless it looks + * like an old-style 8-bit colormap). + */ + if (checkcmap(img) == 16) + cvtcmap(img); + else + TIFFWarning(TIFFFileName(img->tif), "Assuming 8-bit colormap"); + /* + * Use mapping table and colormap to construct + * unpacking tables for samples < 8 bits. + */ + if (img->bitspersample <= 8 && !makecmap(img)) + return (0); + break; + } + return (1); +} + +/* + * Select the appropriate conversion routine for packed data. + */ +static int +pickTileContigCase(TIFFRGBAImage* img) +{ + tileContigRoutine put = 0; + + if (buildMap(img)) { + switch (img->photometric) { + case PHOTOMETRIC_RGB: + switch (img->bitspersample) { + case 8: + if (!img->Map) { + if (img->alpha == EXTRASAMPLE_ASSOCALPHA) + put = putRGBAAcontig8bittile; + else if (img->alpha == EXTRASAMPLE_UNASSALPHA) + put = putRGBUAcontig8bittile; + else + put = putRGBcontig8bittile; + } else + put = putRGBcontig8bitMaptile; + break; + case 16: + put = putRGBcontig16bittile; + if (!img->Map) { + if (img->alpha == EXTRASAMPLE_ASSOCALPHA) + put = putRGBAAcontig16bittile; + else if (img->alpha == EXTRASAMPLE_UNASSALPHA) + put = putRGBUAcontig16bittile; + } + break; + } + break; + case PHOTOMETRIC_SEPARATED: + if (img->bitspersample == 8) { + if (!img->Map) + put = putRGBcontig8bitCMYKtile; + else + put = putRGBcontig8bitCMYKMaptile; + } + break; + case PHOTOMETRIC_PALETTE: + switch (img->bitspersample) { + case 8: put = put8bitcmaptile; break; + case 4: put = put4bitcmaptile; break; + case 2: put = put2bitcmaptile; break; + case 1: put = put1bitcmaptile; break; + } + break; + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + switch (img->bitspersample) { + case 8: put = putgreytile; break; + case 4: put = put4bitbwtile; break; + case 2: put = put2bitbwtile; break; + case 1: put = put1bitbwtile; break; + } + break; + case PHOTOMETRIC_YCBCR: + if (img->bitspersample == 8) + put = initYCbCrConversion(img); + break; + } + } + return ((img->put.contig = put) != 0); +} + +/* + * Select the appropriate conversion routine for unpacked data. + * + * NB: we assume that unpacked single channel data is directed + * to the "packed routines. + */ +static int +pickTileSeparateCase(TIFFRGBAImage* img) +{ + tileSeparateRoutine put = 0; + + if (buildMap(img)) { + switch (img->photometric) { + case PHOTOMETRIC_RGB: + switch (img->bitspersample) { + case 8: + if (!img->Map) { + if (img->alpha == EXTRASAMPLE_ASSOCALPHA) + put = putRGBAAseparate8bittile; + else if (img->alpha == EXTRASAMPLE_UNASSALPHA) + put = putRGBUAseparate8bittile; + else + put = putRGBseparate8bittile; + } else + put = putRGBseparate8bitMaptile; + break; + case 16: + put = putRGBseparate16bittile; + if (!img->Map) { + if (img->alpha == EXTRASAMPLE_ASSOCALPHA) + put = putRGBAAseparate16bittile; + else if (img->alpha == EXTRASAMPLE_UNASSALPHA) + put = putRGBUAseparate16bittile; + } + break; + } + break; + } + } + return ((img->put.separate = put) != 0); +} + +/* + * Read a whole strip off data from the file, and convert to RGBA form. + * If this is the last strip, then it will only contain the portion of + * the strip that is actually within the image space. The result is + * organized in bottom to top form. + */ + + +int +TIFFReadRGBAStrip(TIFF* tif, uint32 row, uint32 * raster ) + +{ + char emsg[1024]; + TIFFRGBAImage img; + int ok; + uint32 rowsperstrip, rows_to_read; + + if( TIFFIsTiled( tif ) ) + { + TIFFError(TIFFFileName(tif), + "Can't use TIFFReadRGBAStrip() with tiled file."); + return (0); + } + + TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + if( (row % rowsperstrip) != 0 ) + { + TIFFError(TIFFFileName(tif), + "Row passed to TIFFReadRGBAStrip() must be first in a strip."); + return (0); + } + + if (TIFFRGBAImageBegin(&img, tif, 0, emsg)) { + + img.row_offset = row; + img.col_offset = 0; + + if( row + rowsperstrip > img.height ) + rows_to_read = img.height - row; + else + rows_to_read = rowsperstrip; + + ok = TIFFRGBAImageGet(&img, raster, img.width, rows_to_read ); + + TIFFRGBAImageEnd(&img); + } else { + TIFFError(TIFFFileName(tif), emsg); + ok = 0; + } + + return (ok); +} + +/* + * Read a whole tile off data from the file, and convert to RGBA form. + * The returned RGBA data is organized from bottom to top of tile, + * and may include zeroed areas if the tile extends off the image. + */ + +int +TIFFReadRGBATile(TIFF* tif, uint32 col, uint32 row, uint32 * raster) + +{ + char emsg[1024]; + TIFFRGBAImage img; + int ok; + uint32 tile_xsize, tile_ysize; + uint32 read_xsize, read_ysize; + uint32 i_row; + + /* + * Verify that our request is legal - on a tile file, and on a + * tile boundary. + */ + + if( !TIFFIsTiled( tif ) ) + { + TIFFError(TIFFFileName(tif), + "Can't use TIFFReadRGBATile() with stripped file."); + return (0); + } + + TIFFGetFieldDefaulted(tif, TIFFTAG_TILEWIDTH, &tile_xsize); + TIFFGetFieldDefaulted(tif, TIFFTAG_TILELENGTH, &tile_ysize); + if( (col % tile_xsize) != 0 || (row % tile_ysize) != 0 ) + { + TIFFError(TIFFFileName(tif), + "Row/col passed to TIFFReadRGBATile() must be top" + "left corner of a tile."); + return (0); + } + + /* + * Setup the RGBA reader. + */ + + if ( !TIFFRGBAImageBegin(&img, tif, 0, emsg)) { + TIFFError(TIFFFileName(tif), emsg); + return( 0 ); + } + + /* + * The TIFFRGBAImageGet() function doesn't allow us to get off the + * edge of the image, even to fill an otherwise valid tile. So we + * figure out how much we can read, and fix up the tile buffer to + * a full tile configuration afterwards. + */ + + if( row + tile_ysize > img.height ) + read_ysize = img.height - row; + else + read_ysize = tile_ysize; + + if( col + tile_xsize > img.width ) + read_xsize = img.width - col; + else + read_xsize = tile_xsize; + + /* + * Read the chunk of imagery. + */ + + img.row_offset = row; + img.col_offset = col; + + ok = TIFFRGBAImageGet(&img, raster, read_xsize, read_ysize ); + + TIFFRGBAImageEnd(&img); + + /* + * If our read was incomplete we will need to fix up the tile by + * shifting the data around as if a full tile of data is being returned. + * + * This is all the more complicated because the image is organized in + * bottom to top format. + */ + + if( read_xsize == tile_xsize && read_ysize == tile_ysize ) + return( ok ); + + for( i_row = 0; i_row < read_ysize; i_row++ ) + { + _TIFFmemcpy( raster + (tile_ysize - i_row - 1) * tile_xsize, + raster + (read_ysize - i_row - 1) * read_xsize, + read_xsize * sizeof(uint32) ); + _TIFFmemset( raster + (tile_ysize - i_row - 1) * tile_xsize+read_xsize, + 0, sizeof(uint32) * (tile_xsize - read_xsize) ); + } + + for( i_row = read_ysize; i_row < tile_ysize; i_row++ ) + { + _TIFFmemset( raster + (tile_ysize - i_row - 1) * tile_xsize, + 0, sizeof(uint32) * tile_xsize ); + } + + return (ok); +} diff --git a/libtiff/tif_jpeg.c b/libtiff/tif_jpeg.c new file mode 100755 index 0000000..0b7bf59 --- /dev/null +++ b/libtiff/tif_jpeg.c @@ -0,0 +1,1484 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_jpeg.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1994-1997 Sam Leffler + * Copyright (c) 1994-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include "tiffiop.h" +#ifdef JPEG_SUPPORT +/* + * TIFF Library + * + * JPEG Compression support per TIFF Technical Note #2 + * (*not* per the original TIFF 6.0 spec). + * + * This file is simply an interface to the libjpeg library written by + * the Independent JPEG Group. You need release 5 or later of the IJG + * code, which you can find on the Internet at ftp.uu.net:/graphics/jpeg/. + * + * Contributed by Tom Lane . + */ +#include +#include +#include + +/* We undefine FAR to avoid conflict with JPEG definition */ + +#ifdef FAR +#undef FAR +#endif + +#include "jpeglib.h" +#include "jerror.h" + +/* + * On some machines it may be worthwhile to use _setjmp or sigsetjmp + * in place of plain setjmp. These macros will make it easier. + */ +#define SETJMP(jbuf) setjmp(jbuf) +#define LONGJMP(jbuf,code) longjmp(jbuf,code) +#define JMP_BUF jmp_buf + +typedef struct jpeg_destination_mgr jpeg_destination_mgr; +typedef struct jpeg_source_mgr jpeg_source_mgr; +typedef struct jpeg_error_mgr jpeg_error_mgr; + +/* + * State block for each open TIFF file using + * libjpeg to do JPEG compression/decompression. + * + * libjpeg's visible state is either a jpeg_compress_struct + * or jpeg_decompress_struct depending on which way we + * are going. comm can be used to refer to the fields + * which are common to both. + * + * NB: cinfo is required to be the first member of JPEGState, + * so we can safely cast JPEGState* -> jpeg_xxx_struct* + * and vice versa! + */ +typedef struct { + union { + struct jpeg_compress_struct c; + struct jpeg_decompress_struct d; + struct jpeg_common_struct comm; + } cinfo; /* NB: must be first */ + jpeg_error_mgr err; /* libjpeg error manager */ + JMP_BUF exit_jmpbuf; /* for catching libjpeg failures */ + /* + * The following two members could be a union, but + * they're small enough that it's not worth the effort. + */ + jpeg_destination_mgr dest; /* data dest for compression */ + jpeg_source_mgr src; /* data source for decompression */ + /* private state */ + TIFF* tif; /* back link needed by some code */ + uint16 photometric; /* copy of PhotometricInterpretation */ + uint16 h_sampling; /* luminance sampling factors */ + uint16 v_sampling; + tsize_t bytesperline; /* decompressed bytes per scanline */ + /* pointers to intermediate buffers when processing downsampled data */ + JSAMPARRAY ds_buffer[MAX_COMPONENTS]; + int scancount; /* number of "scanlines" accumulated */ + int samplesperclump; + + TIFFVGetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ + TIFFStripMethod defsparent; /* super-class method */ + TIFFTileMethod deftparent; /* super-class method */ + /* pseudo-tag fields */ + void* jpegtables; /* JPEGTables tag value, or NULL */ + uint32 jpegtables_length; /* number of bytes in same */ + int jpegquality; /* Compression quality level */ + int jpegcolormode; /* Auto RGB<=>YCbCr convert? */ + int jpegtablesmode; /* What to put in JPEGTables */ +} JPEGState; + +#define JState(tif) ((JPEGState*)(tif)->tif_data) + +static int JPEGDecode(TIFF*, tidata_t, tsize_t, tsample_t); +static int JPEGDecodeRaw(TIFF*, tidata_t, tsize_t, tsample_t); +static int JPEGEncode(TIFF*, tidata_t, tsize_t, tsample_t); +static int JPEGEncodeRaw(TIFF*, tidata_t, tsize_t, tsample_t); + +#define FIELD_JPEGTABLES (FIELD_CODEC+0) + +static const TIFFFieldInfo jpegFieldInfo[] = { + { TIFFTAG_JPEGTABLES, -1,-1, TIFF_UNDEFINED, FIELD_JPEGTABLES, + FALSE, TRUE, "JPEGTables" }, + { TIFFTAG_JPEGQUALITY, 0, 0, TIFF_ANY, FIELD_PSEUDO, + TRUE, FALSE, "" }, + { TIFFTAG_JPEGCOLORMODE, 0, 0, TIFF_ANY, FIELD_PSEUDO, + FALSE, FALSE, "" }, + { TIFFTAG_JPEGTABLESMODE, 0, 0, TIFF_ANY, FIELD_PSEUDO, + FALSE, FALSE, "" }, +}; +#define N(a) (sizeof (a) / sizeof (a[0])) + +/* + * libjpeg interface layer. + * + * We use setjmp/longjmp to return control to libtiff + * when a fatal error is encountered within the JPEG + * library. We also direct libjpeg error and warning + * messages through the appropriate libtiff handlers. + */ + +/* + * Error handling routines (these replace corresponding + * IJG routines from jerror.c). These are used for both + * compression and decompression. + */ +static void +TIFFjpeg_error_exit(j_common_ptr cinfo) +{ + JPEGState *sp = (JPEGState *) cinfo; /* NB: cinfo assumed first */ + char buffer[JMSG_LENGTH_MAX]; + + (*cinfo->err->format_message) (cinfo, buffer); + TIFFError("JPEGLib", buffer); /* display the error message */ + jpeg_abort(cinfo); /* clean up libjpeg state */ + LONGJMP(sp->exit_jmpbuf, 1); /* return to libtiff caller */ +} + +/* + * This routine is invoked only for warning messages, + * since error_exit does its own thing and trace_level + * is never set > 0. + */ +static void +TIFFjpeg_output_message(j_common_ptr cinfo) +{ + char buffer[JMSG_LENGTH_MAX]; + + (*cinfo->err->format_message) (cinfo, buffer); + TIFFWarning("JPEGLib", buffer); +} + +/* + * Interface routines. This layer of routines exists + * primarily to limit side-effects from using setjmp. + * Also, normal/error returns are converted into return + * values per libtiff practice. + */ +#define CALLJPEG(sp, fail, op) (SETJMP((sp)->exit_jmpbuf) ? (fail) : (op)) +#define CALLVJPEG(sp, op) CALLJPEG(sp, 0, ((op),1)) + +static int +TIFFjpeg_create_compress(JPEGState* sp) +{ + /* initialize JPEG error handling */ + sp->cinfo.c.err = jpeg_std_error(&sp->err); + sp->err.error_exit = TIFFjpeg_error_exit; + sp->err.output_message = TIFFjpeg_output_message; + + return CALLVJPEG(sp, jpeg_create_compress(&sp->cinfo.c)); +} + +static int +TIFFjpeg_create_decompress(JPEGState* sp) +{ + /* initialize JPEG error handling */ + sp->cinfo.d.err = jpeg_std_error(&sp->err); + sp->err.error_exit = TIFFjpeg_error_exit; + sp->err.output_message = TIFFjpeg_output_message; + + return CALLVJPEG(sp, jpeg_create_decompress(&sp->cinfo.d)); +} + +static int +TIFFjpeg_set_defaults(JPEGState* sp) +{ + return CALLVJPEG(sp, jpeg_set_defaults(&sp->cinfo.c)); +} + +static int +TIFFjpeg_set_colorspace(JPEGState* sp, J_COLOR_SPACE colorspace) +{ + return CALLVJPEG(sp, jpeg_set_colorspace(&sp->cinfo.c, colorspace)); +} + +static int +TIFFjpeg_set_quality(JPEGState* sp, int quality, boolean force_baseline) +{ + return CALLVJPEG(sp, + jpeg_set_quality(&sp->cinfo.c, quality, force_baseline)); +} + +static int +TIFFjpeg_suppress_tables(JPEGState* sp, boolean suppress) +{ + return CALLVJPEG(sp, jpeg_suppress_tables(&sp->cinfo.c, suppress)); +} + +static int +TIFFjpeg_start_compress(JPEGState* sp, boolean write_all_tables) +{ + return CALLVJPEG(sp, + jpeg_start_compress(&sp->cinfo.c, write_all_tables)); +} + +static int +TIFFjpeg_write_scanlines(JPEGState* sp, JSAMPARRAY scanlines, int num_lines) +{ + return CALLJPEG(sp, -1, (int) jpeg_write_scanlines(&sp->cinfo.c, + scanlines, (JDIMENSION) num_lines)); +} + +static int +TIFFjpeg_write_raw_data(JPEGState* sp, JSAMPIMAGE data, int num_lines) +{ + return CALLJPEG(sp, -1, (int) jpeg_write_raw_data(&sp->cinfo.c, + data, (JDIMENSION) num_lines)); +} + +static int +TIFFjpeg_finish_compress(JPEGState* sp) +{ + return CALLVJPEG(sp, jpeg_finish_compress(&sp->cinfo.c)); +} + +static int +TIFFjpeg_write_tables(JPEGState* sp) +{ + return CALLVJPEG(sp, jpeg_write_tables(&sp->cinfo.c)); +} + +static int +TIFFjpeg_read_header(JPEGState* sp, boolean require_image) +{ + return CALLJPEG(sp, -1, jpeg_read_header(&sp->cinfo.d, require_image)); +} + +static int +TIFFjpeg_start_decompress(JPEGState* sp) +{ + return CALLVJPEG(sp, jpeg_start_decompress(&sp->cinfo.d)); +} + +static int +TIFFjpeg_read_scanlines(JPEGState* sp, JSAMPARRAY scanlines, int max_lines) +{ + return CALLJPEG(sp, -1, (int) jpeg_read_scanlines(&sp->cinfo.d, + scanlines, (JDIMENSION) max_lines)); +} + +static int +TIFFjpeg_read_raw_data(JPEGState* sp, JSAMPIMAGE data, int max_lines) +{ + return CALLJPEG(sp, -1, (int) jpeg_read_raw_data(&sp->cinfo.d, + data, (JDIMENSION) max_lines)); +} + +static int +TIFFjpeg_finish_decompress(JPEGState* sp) +{ + return CALLJPEG(sp, -1, (int) jpeg_finish_decompress(&sp->cinfo.d)); +} + +static int +TIFFjpeg_abort(JPEGState* sp) +{ + return CALLVJPEG(sp, jpeg_abort(&sp->cinfo.comm)); +} + +static int +TIFFjpeg_destroy(JPEGState* sp) +{ + return CALLVJPEG(sp, jpeg_destroy(&sp->cinfo.comm)); +} + +static JSAMPARRAY +TIFFjpeg_alloc_sarray(JPEGState* sp, int pool_id, + JDIMENSION samplesperrow, JDIMENSION numrows) +{ + return CALLJPEG(sp, (JSAMPARRAY) NULL, + (*sp->cinfo.comm.mem->alloc_sarray) + (&sp->cinfo.comm, pool_id, samplesperrow, numrows)); +} + +/* + * JPEG library destination data manager. + * These routines direct compressed data from libjpeg into the + * libtiff output buffer. + */ + +static void +std_init_destination(j_compress_ptr cinfo) +{ + JPEGState* sp = (JPEGState*) cinfo; + TIFF* tif = sp->tif; + + sp->dest.next_output_byte = (JOCTET*) tif->tif_rawdata; + sp->dest.free_in_buffer = (size_t) tif->tif_rawdatasize; +} + +static boolean +std_empty_output_buffer(j_compress_ptr cinfo) +{ + JPEGState* sp = (JPEGState*) cinfo; + TIFF* tif = sp->tif; + + /* the entire buffer has been filled */ + tif->tif_rawcc = tif->tif_rawdatasize; + TIFFFlushData1(tif); + sp->dest.next_output_byte = (JOCTET*) tif->tif_rawdata; + sp->dest.free_in_buffer = (size_t) tif->tif_rawdatasize; + + return (TRUE); +} + +static void +std_term_destination(j_compress_ptr cinfo) +{ + JPEGState* sp = (JPEGState*) cinfo; + TIFF* tif = sp->tif; + + tif->tif_rawcp = (tidata_t) sp->dest.next_output_byte; + tif->tif_rawcc = + tif->tif_rawdatasize - (tsize_t) sp->dest.free_in_buffer; + /* NB: libtiff does the final buffer flush */ +} + +static void +TIFFjpeg_data_dest(JPEGState* sp, TIFF* tif) +{ + (void) tif; + sp->cinfo.c.dest = &sp->dest; + sp->dest.init_destination = std_init_destination; + sp->dest.empty_output_buffer = std_empty_output_buffer; + sp->dest.term_destination = std_term_destination; +} + +/* + * Alternate destination manager for outputting to JPEGTables field. + */ + +static void +tables_init_destination(j_compress_ptr cinfo) +{ + JPEGState* sp = (JPEGState*) cinfo; + + /* while building, jpegtables_length is allocated buffer size */ + sp->dest.next_output_byte = (JOCTET*) sp->jpegtables; + sp->dest.free_in_buffer = (size_t) sp->jpegtables_length; +} + +static boolean +tables_empty_output_buffer(j_compress_ptr cinfo) +{ + JPEGState* sp = (JPEGState*) cinfo; + void* newbuf; + + /* the entire buffer has been filled; enlarge it by 1000 bytes */ + newbuf = _TIFFrealloc((tdata_t) sp->jpegtables, + (tsize_t) (sp->jpegtables_length + 1000)); + if (newbuf == NULL) + ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 100); + sp->dest.next_output_byte = (JOCTET*) newbuf + sp->jpegtables_length; + sp->dest.free_in_buffer = (size_t) 1000; + sp->jpegtables = newbuf; + sp->jpegtables_length += 1000; + return (TRUE); +} + +static void +tables_term_destination(j_compress_ptr cinfo) +{ + JPEGState* sp = (JPEGState*) cinfo; + + /* set tables length to number of bytes actually emitted */ + sp->jpegtables_length -= sp->dest.free_in_buffer; +} + +static int +TIFFjpeg_tables_dest(JPEGState* sp, TIFF* tif) +{ + (void) tif; + /* + * Allocate a working buffer for building tables. + * Initial size is 1000 bytes, which is usually adequate. + */ + if (sp->jpegtables) + _TIFFfree(sp->jpegtables); + sp->jpegtables_length = 1000; + sp->jpegtables = (void*) _TIFFmalloc((tsize_t) sp->jpegtables_length); + if (sp->jpegtables == NULL) { + sp->jpegtables_length = 0; + TIFFError("TIFFjpeg_tables_dest", "No space for JPEGTables"); + return (0); + } + sp->cinfo.c.dest = &sp->dest; + sp->dest.init_destination = tables_init_destination; + sp->dest.empty_output_buffer = tables_empty_output_buffer; + sp->dest.term_destination = tables_term_destination; + return (1); +} + +/* + * JPEG library source data manager. + * These routines supply compressed data to libjpeg. + */ + +static void +std_init_source(j_decompress_ptr cinfo) +{ + JPEGState* sp = (JPEGState*) cinfo; + TIFF* tif = sp->tif; + + sp->src.next_input_byte = (const JOCTET*) tif->tif_rawdata; + sp->src.bytes_in_buffer = (size_t) tif->tif_rawcc; +} + +static boolean +std_fill_input_buffer(j_decompress_ptr cinfo) +{ + JPEGState* sp = (JPEGState* ) cinfo; + static const JOCTET dummy_EOI[2] = { 0xFF, JPEG_EOI }; + + /* + * Should never get here since entire strip/tile is + * read into memory before the decompressor is called, + * and thus was supplied by init_source. + */ + WARNMS(cinfo, JWRN_JPEG_EOF); + /* insert a fake EOI marker */ + sp->src.next_input_byte = dummy_EOI; + sp->src.bytes_in_buffer = 2; + return (TRUE); +} + +static void +std_skip_input_data(j_decompress_ptr cinfo, long num_bytes) +{ + JPEGState* sp = (JPEGState*) cinfo; + + if (num_bytes > 0) { + if (num_bytes > (long) sp->src.bytes_in_buffer) { + /* oops, buffer overrun */ + (void) std_fill_input_buffer(cinfo); + } else { + sp->src.next_input_byte += (size_t) num_bytes; + sp->src.bytes_in_buffer -= (size_t) num_bytes; + } + } +} + +static void +std_term_source(j_decompress_ptr cinfo) +{ + /* No work necessary here */ + /* Or must we update tif->tif_rawcp, tif->tif_rawcc ??? */ + /* (if so, need empty tables_term_source!) */ + (void) cinfo; +} + +static void +TIFFjpeg_data_src(JPEGState* sp, TIFF* tif) +{ + (void) tif; + sp->cinfo.d.src = &sp->src; + sp->src.init_source = std_init_source; + sp->src.fill_input_buffer = std_fill_input_buffer; + sp->src.skip_input_data = std_skip_input_data; + sp->src.resync_to_restart = jpeg_resync_to_restart; + sp->src.term_source = std_term_source; + sp->src.bytes_in_buffer = 0; /* for safety */ + sp->src.next_input_byte = NULL; +} + +/* + * Alternate source manager for reading from JPEGTables. + * We can share all the code except for the init routine. + */ + +static void +tables_init_source(j_decompress_ptr cinfo) +{ + JPEGState* sp = (JPEGState*) cinfo; + + sp->src.next_input_byte = (const JOCTET*) sp->jpegtables; + sp->src.bytes_in_buffer = (size_t) sp->jpegtables_length; +} + +static void +TIFFjpeg_tables_src(JPEGState* sp, TIFF* tif) +{ + TIFFjpeg_data_src(sp, tif); + sp->src.init_source = tables_init_source; +} + +/* + * Allocate downsampled-data buffers needed for downsampled I/O. + * We use values computed in jpeg_start_compress or jpeg_start_decompress. + * We use libjpeg's allocator so that buffers will be released automatically + * when done with strip/tile. + * This is also a handy place to compute samplesperclump, bytesperline. + */ +static int +alloc_downsampled_buffers(TIFF* tif, jpeg_component_info* comp_info, + int num_components) +{ + JPEGState* sp = JState(tif); + int ci; + jpeg_component_info* compptr; + JSAMPARRAY buf; + int samples_per_clump = 0; + + for (ci = 0, compptr = comp_info; ci < num_components; + ci++, compptr++) { + samples_per_clump += compptr->h_samp_factor * + compptr->v_samp_factor; + buf = TIFFjpeg_alloc_sarray(sp, JPOOL_IMAGE, + compptr->width_in_blocks * DCTSIZE, + (JDIMENSION) (compptr->v_samp_factor*DCTSIZE)); + if (buf == NULL) + return (0); + sp->ds_buffer[ci] = buf; + } + sp->samplesperclump = samples_per_clump; + /* Cb,Cr both have sampling factors 1 */ + /* so downsampled width of Cb is # of clumps per line */ + sp->bytesperline = sizeof(JSAMPLE) * samples_per_clump * + comp_info[1].downsampled_width; + return (1); +} + + +/* + * JPEG Decoding. + */ + +static int +JPEGSetupDecode(TIFF* tif) +{ + JPEGState* sp = JState(tif); + TIFFDirectory *td = &tif->tif_dir; + + assert(sp != NULL); + assert(sp->cinfo.comm.is_decompressor); + + /* Read JPEGTables if it is present */ + if (TIFFFieldSet(tif,FIELD_JPEGTABLES)) { + TIFFjpeg_tables_src(sp, tif); + if(TIFFjpeg_read_header(sp,FALSE) != JPEG_HEADER_TABLES_ONLY) { + TIFFError("JPEGSetupDecode", "Bogus JPEGTables field"); + return (0); + } + } + + /* Grab parameters that are same for all strips/tiles */ + sp->photometric = td->td_photometric; + switch (sp->photometric) { + case PHOTOMETRIC_YCBCR: + sp->h_sampling = td->td_ycbcrsubsampling[0]; + sp->v_sampling = td->td_ycbcrsubsampling[1]; + break; + default: + /* TIFF 6.0 forbids subsampling of all other color spaces */ + sp->h_sampling = 1; + sp->v_sampling = 1; + break; + } + + /* Set up for reading normal data */ + TIFFjpeg_data_src(sp, tif); + tif->tif_postdecode = _TIFFNoPostDecode; /* override byte swapping */ + return (1); +} + +/* + * Set up for decoding a strip or tile. + */ +static int +JPEGPreDecode(TIFF* tif, tsample_t s) +{ + JPEGState *sp = JState(tif); + TIFFDirectory *td = &tif->tif_dir; + static const char module[] = "JPEGPreDecode"; + uint32 segment_width, segment_height; + int downsampled_output; + int ci; + + assert(sp != NULL); + assert(sp->cinfo.comm.is_decompressor); + /* + * Reset decoder state from any previous strip/tile, + * in case application didn't read the whole strip. + */ + if (!TIFFjpeg_abort(sp)) + return (0); + /* + * Read the header for this strip/tile. + */ + if (TIFFjpeg_read_header(sp, TRUE) != JPEG_HEADER_OK) + return (0); + /* + * Check image parameters and set decompression parameters. + */ + if (isTiled(tif)) { + segment_width = td->td_tilewidth; + segment_height = td->td_tilelength; + sp->bytesperline = TIFFTileRowSize(tif); + } else { + segment_width = td->td_imagewidth; + segment_height = td->td_imagelength - tif->tif_row; + if (segment_height > td->td_rowsperstrip) + segment_height = td->td_rowsperstrip; + sp->bytesperline = TIFFScanlineSize(tif); + } + if (td->td_planarconfig == PLANARCONFIG_SEPARATE && s > 0) { + /* + * For PC 2, scale down the expected strip/tile size + * to match a downsampled component + */ + segment_width = TIFFhowmany(segment_width, sp->h_sampling); + segment_height = TIFFhowmany(segment_height, sp->v_sampling); + } + if (sp->cinfo.d.image_width != segment_width || + sp->cinfo.d.image_height != segment_height) { + TIFFError(module, "Improper JPEG strip/tile size"); + return (0); + } + if (sp->cinfo.d.num_components != + (td->td_planarconfig == PLANARCONFIG_CONTIG ? + td->td_samplesperpixel : 1)) { + TIFFError(module, "Improper JPEG component count"); + return (0); + } + if (sp->cinfo.d.data_precision != td->td_bitspersample) { + TIFFError(module, "Improper JPEG data precision"); + return (0); + } + if (td->td_planarconfig == PLANARCONFIG_CONTIG) { + /* Component 0 should have expected sampling factors */ + if (sp->cinfo.d.comp_info[0].h_samp_factor != sp->h_sampling || + sp->cinfo.d.comp_info[0].v_samp_factor != sp->v_sampling) { + TIFFError(module, "Improper JPEG sampling factors"); + return (0); + } + /* Rest should have sampling factors 1,1 */ + for (ci = 1; ci < sp->cinfo.d.num_components; ci++) { + if (sp->cinfo.d.comp_info[ci].h_samp_factor != 1 || + sp->cinfo.d.comp_info[ci].v_samp_factor != 1) { + TIFFError(module, "Improper JPEG sampling factors"); + return (0); + } + } + } else { + /* PC 2's single component should have sampling factors 1,1 */ + if (sp->cinfo.d.comp_info[0].h_samp_factor != 1 || + sp->cinfo.d.comp_info[0].v_samp_factor != 1) { + TIFFError(module, "Improper JPEG sampling factors"); + return (0); + } + } + downsampled_output = FALSE; + if (td->td_planarconfig == PLANARCONFIG_CONTIG && + sp->photometric == PHOTOMETRIC_YCBCR && + sp->jpegcolormode == JPEGCOLORMODE_RGB) { + /* Convert YCbCr to RGB */ + sp->cinfo.d.jpeg_color_space = JCS_YCbCr; + sp->cinfo.d.out_color_space = JCS_RGB; + } else { + /* Suppress colorspace handling */ + sp->cinfo.d.jpeg_color_space = JCS_UNKNOWN; + sp->cinfo.d.out_color_space = JCS_UNKNOWN; + if (td->td_planarconfig == PLANARCONFIG_CONTIG && + (sp->h_sampling != 1 || sp->v_sampling != 1)) + downsampled_output = TRUE; + /* XXX what about up-sampling? */ + } + if (downsampled_output) { + /* Need to use raw-data interface to libjpeg */ + sp->cinfo.d.raw_data_out = TRUE; + tif->tif_decoderow = JPEGDecodeRaw; + tif->tif_decodestrip = JPEGDecodeRaw; + tif->tif_decodetile = JPEGDecodeRaw; + } else { + /* Use normal interface to libjpeg */ + sp->cinfo.d.raw_data_out = FALSE; + tif->tif_decoderow = JPEGDecode; + tif->tif_decodestrip = JPEGDecode; + tif->tif_decodetile = JPEGDecode; + } + /* Start JPEG decompressor */ + if (!TIFFjpeg_start_decompress(sp)) + return (0); + /* Allocate downsampled-data buffers if needed */ + if (downsampled_output) { + if (!alloc_downsampled_buffers(tif, sp->cinfo.d.comp_info, + sp->cinfo.d.num_components)) + return (0); + sp->scancount = DCTSIZE; /* mark buffer empty */ + } + return (1); +} + +/* + * Decode a chunk of pixels. + * "Standard" case: returned data is not downsampled. + */ +static int +JPEGDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +{ + JPEGState *sp = JState(tif); + tsize_t nrows; + JSAMPROW bufptr[1]; + + (void) s; + assert(sp != NULL); + /* data is expected to be read in multiples of a scanline */ + nrows = cc / sp->bytesperline; + if (cc % sp->bytesperline) + TIFFWarning(tif->tif_name, "fractional scanline not read"); + + while (nrows-- > 0) { + bufptr[0] = (JSAMPROW) buf; + if (TIFFjpeg_read_scanlines(sp, bufptr, 1) != 1) + return (0); + if (nrows > 0) + tif->tif_row++; + buf += sp->bytesperline; + } + /* Close down the decompressor if we've finished the strip or tile. */ + if (sp->cinfo.d.output_scanline == sp->cinfo.d.output_height) { + if (TIFFjpeg_finish_decompress(sp) != TRUE) + return (0); + } + return (1); +} + +/* + * Decode a chunk of pixels. + * Returned data is downsampled per sampling factors. + */ +static int +JPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +{ + JPEGState *sp = JState(tif); + JSAMPLE* inptr; + JSAMPLE* outptr; + tsize_t nrows; + JDIMENSION clumps_per_line, nclump; + int clumpoffset, ci, xpos, ypos; + jpeg_component_info* compptr; + int samples_per_clump = sp->samplesperclump; + + (void) s; + assert(sp != NULL); + /* data is expected to be read in multiples of a scanline */ + nrows = cc / sp->bytesperline; + if (cc % sp->bytesperline) + TIFFWarning(tif->tif_name, "fractional scanline not read"); + + /* Cb,Cr both have sampling factors 1, so this is correct */ + clumps_per_line = sp->cinfo.d.comp_info[1].downsampled_width; + + while (nrows-- > 0) { + /* Reload downsampled-data buffer if needed */ + if (sp->scancount >= DCTSIZE) { + int n = sp->cinfo.d.max_v_samp_factor * DCTSIZE; + if (TIFFjpeg_read_raw_data(sp, sp->ds_buffer, n) != n) + return (0); + sp->scancount = 0; + /* Close down the decompressor if done. */ + if (sp->cinfo.d.output_scanline >= + sp->cinfo.d.output_height) { + if (TIFFjpeg_finish_decompress(sp) != TRUE) + return (0); + } + } + /* + * Fastest way to unseparate the data is to make one pass + * over the scanline for each row of each component. + */ + clumpoffset = 0; /* first sample in clump */ + for (ci = 0, compptr = sp->cinfo.d.comp_info; + ci < sp->cinfo.d.num_components; + ci++, compptr++) { + int hsamp = compptr->h_samp_factor; + int vsamp = compptr->v_samp_factor; + for (ypos = 0; ypos < vsamp; ypos++) { + inptr = sp->ds_buffer[ci][sp->scancount*vsamp + ypos]; + outptr = ((JSAMPLE*) buf) + clumpoffset; + if (hsamp == 1) { + /* fast path for at least Cb and Cr */ + for (nclump = clumps_per_line; nclump-- > 0; ) { + outptr[0] = *inptr++; + outptr += samples_per_clump; + } + } else { + /* general case */ + for (nclump = clumps_per_line; nclump-- > 0; ) { + for (xpos = 0; xpos < hsamp; xpos++) + outptr[xpos] = *inptr++; + outptr += samples_per_clump; + } + } + clumpoffset += hsamp; + } + } + sp->scancount++; + if (nrows > 0) + tif->tif_row++; + buf += sp->bytesperline; + } + return (1); +} + + +/* + * JPEG Encoding. + */ + +static void +unsuppress_quant_table (JPEGState* sp, int tblno) +{ + JQUANT_TBL* qtbl; + + if ((qtbl = sp->cinfo.c.quant_tbl_ptrs[tblno]) != NULL) + qtbl->sent_table = FALSE; +} + +static void +unsuppress_huff_table (JPEGState* sp, int tblno) +{ + JHUFF_TBL* htbl; + + if ((htbl = sp->cinfo.c.dc_huff_tbl_ptrs[tblno]) != NULL) + htbl->sent_table = FALSE; + if ((htbl = sp->cinfo.c.ac_huff_tbl_ptrs[tblno]) != NULL) + htbl->sent_table = FALSE; +} + +static int +prepare_JPEGTables(TIFF* tif) +{ + JPEGState* sp = JState(tif); + + /* Initialize quant tables for current quality setting */ + if (!TIFFjpeg_set_quality(sp, sp->jpegquality, FALSE)) + return (0); + /* Mark only the tables we want for output */ + /* NB: chrominance tables are currently used only with YCbCr */ + if (!TIFFjpeg_suppress_tables(sp, TRUE)) + return (0); + if (sp->jpegtablesmode & JPEGTABLESMODE_QUANT) { + unsuppress_quant_table(sp, 0); + if (sp->photometric == PHOTOMETRIC_YCBCR) + unsuppress_quant_table(sp, 1); + } + if (sp->jpegtablesmode & JPEGTABLESMODE_HUFF) { + unsuppress_huff_table(sp, 0); + if (sp->photometric == PHOTOMETRIC_YCBCR) + unsuppress_huff_table(sp, 1); + } + /* Direct libjpeg output into jpegtables */ + if (!TIFFjpeg_tables_dest(sp, tif)) + return (0); + /* Emit tables-only datastream */ + if (!TIFFjpeg_write_tables(sp)) + return (0); + + return (1); +} + +static int +JPEGSetupEncode(TIFF* tif) +{ + JPEGState* sp = JState(tif); + TIFFDirectory *td = &tif->tif_dir; + static const char module[] = "JPEGSetupEncode"; + + assert(sp != NULL); + assert(!sp->cinfo.comm.is_decompressor); + + /* + * Initialize all JPEG parameters to default values. + * Note that jpeg_set_defaults needs legal values for + * in_color_space and input_components. + */ + sp->cinfo.c.in_color_space = JCS_UNKNOWN; + sp->cinfo.c.input_components = 1; + if (!TIFFjpeg_set_defaults(sp)) + return (0); + /* Set per-file parameters */ + sp->photometric = td->td_photometric; + switch (sp->photometric) { + case PHOTOMETRIC_YCBCR: + sp->h_sampling = td->td_ycbcrsubsampling[0]; + sp->v_sampling = td->td_ycbcrsubsampling[1]; + /* + * A ReferenceBlackWhite field *must* be present since the + * default value is inappropriate for YCbCr. Fill in the + * proper value if application didn't set it. + */ +#ifdef COLORIMETRY_SUPPORT + if (!TIFFFieldSet(tif, FIELD_REFBLACKWHITE)) { + float refbw[6]; + long top = 1L << td->td_bitspersample; + refbw[0] = 0; + refbw[1] = (float)(top-1L); + refbw[2] = (float)(top>>1); + refbw[3] = refbw[1]; + refbw[4] = refbw[2]; + refbw[5] = refbw[1]; + TIFFSetField(tif, TIFFTAG_REFERENCEBLACKWHITE, refbw); + } +#endif + break; + case PHOTOMETRIC_PALETTE: /* disallowed by Tech Note */ + case PHOTOMETRIC_MASK: + TIFFError(module, + "PhotometricInterpretation %d not allowed for JPEG", + (int) sp->photometric); + return (0); + default: + /* TIFF 6.0 forbids subsampling of all other color spaces */ + sp->h_sampling = 1; + sp->v_sampling = 1; + break; + } + + /* Verify miscellaneous parameters */ + + /* + * This would need work if libtiff ever supports different + * depths for different components, or if libjpeg ever supports + * run-time selection of depth. Neither is imminent. + */ + if (td->td_bitspersample != BITS_IN_JSAMPLE) { + TIFFError(module, "BitsPerSample %d not allowed for JPEG", + (int) td->td_bitspersample); + return (0); + } + sp->cinfo.c.data_precision = td->td_bitspersample; + if (isTiled(tif)) { + if ((td->td_tilelength % (sp->v_sampling * DCTSIZE)) != 0) { + TIFFError(module, + "JPEG tile height must be multiple of %d", + sp->v_sampling * DCTSIZE); + return (0); + } + if ((td->td_tilewidth % (sp->h_sampling * DCTSIZE)) != 0) { + TIFFError(module, + "JPEG tile width must be multiple of %d", + sp->h_sampling * DCTSIZE); + return (0); + } + } else { + if (td->td_rowsperstrip < td->td_imagelength && + (td->td_rowsperstrip % (sp->v_sampling * DCTSIZE)) != 0) { + TIFFError(module, + "RowsPerStrip must be multiple of %d for JPEG", + sp->v_sampling * DCTSIZE); + return (0); + } + } + + /* Create a JPEGTables field if appropriate */ + if (sp->jpegtablesmode & (JPEGTABLESMODE_QUANT|JPEGTABLESMODE_HUFF)) { + if (!prepare_JPEGTables(tif)) + return (0); + /* Mark the field present */ + /* Can't use TIFFSetField since BEENWRITING is already set! */ + TIFFSetFieldBit(tif, FIELD_JPEGTABLES); + tif->tif_flags |= TIFF_DIRTYDIRECT; + } else { + /* We do not support application-supplied JPEGTables, */ + /* so mark the field not present */ + TIFFClrFieldBit(tif, FIELD_JPEGTABLES); + } + + /* Direct libjpeg output to libtiff's output buffer */ + TIFFjpeg_data_dest(sp, tif); + + return (1); +} + +/* + * Set encoding state at the start of a strip or tile. + */ +static int +JPEGPreEncode(TIFF* tif, tsample_t s) +{ + JPEGState *sp = JState(tif); + TIFFDirectory *td = &tif->tif_dir; + static const char module[] = "JPEGPreEncode"; + uint32 segment_width, segment_height; + int downsampled_input; + + assert(sp != NULL); + assert(!sp->cinfo.comm.is_decompressor); + /* + * Set encoding parameters for this strip/tile. + */ + if (isTiled(tif)) { + segment_width = td->td_tilewidth; + segment_height = td->td_tilelength; + sp->bytesperline = TIFFTileRowSize(tif); + } else { + segment_width = td->td_imagewidth; + segment_height = td->td_imagelength - tif->tif_row; + if (segment_height > td->td_rowsperstrip) + segment_height = td->td_rowsperstrip; + sp->bytesperline = TIFFScanlineSize(tif); + } + if (td->td_planarconfig == PLANARCONFIG_SEPARATE && s > 0) { + /* for PC 2, scale down the strip/tile size + * to match a downsampled component + */ + segment_width = TIFFhowmany(segment_width, sp->h_sampling); + segment_height = TIFFhowmany(segment_height, sp->v_sampling); + } + if (segment_width > 65535 || segment_height > 65535) { + TIFFError(module, "Strip/tile too large for JPEG"); + return (0); + } + sp->cinfo.c.image_width = segment_width; + sp->cinfo.c.image_height = segment_height; + downsampled_input = FALSE; + if (td->td_planarconfig == PLANARCONFIG_CONTIG) { + sp->cinfo.c.input_components = td->td_samplesperpixel; + if (sp->photometric == PHOTOMETRIC_YCBCR) { + if (sp->jpegcolormode == JPEGCOLORMODE_RGB) { + sp->cinfo.c.in_color_space = JCS_RGB; + } else { + sp->cinfo.c.in_color_space = JCS_YCbCr; + if (sp->h_sampling != 1 || sp->v_sampling != 1) + downsampled_input = TRUE; + } + if (!TIFFjpeg_set_colorspace(sp, JCS_YCbCr)) + return (0); + /* + * Set Y sampling factors; + * we assume jpeg_set_colorspace() set the rest to 1 + */ + sp->cinfo.c.comp_info[0].h_samp_factor = sp->h_sampling; + sp->cinfo.c.comp_info[0].v_samp_factor = sp->v_sampling; + } else { + sp->cinfo.c.in_color_space = JCS_UNKNOWN; + if (!TIFFjpeg_set_colorspace(sp, JCS_UNKNOWN)) + return (0); + /* jpeg_set_colorspace set all sampling factors to 1 */ + } + } else { + sp->cinfo.c.input_components = 1; + sp->cinfo.c.in_color_space = JCS_UNKNOWN; + if (!TIFFjpeg_set_colorspace(sp, JCS_UNKNOWN)) + return (0); + sp->cinfo.c.comp_info[0].component_id = s; + /* jpeg_set_colorspace() set sampling factors to 1 */ + if (sp->photometric == PHOTOMETRIC_YCBCR && s > 0) { + sp->cinfo.c.comp_info[0].quant_tbl_no = 1; + sp->cinfo.c.comp_info[0].dc_tbl_no = 1; + sp->cinfo.c.comp_info[0].ac_tbl_no = 1; + } + } + /* ensure libjpeg won't write any extraneous markers */ + sp->cinfo.c.write_JFIF_header = FALSE; + sp->cinfo.c.write_Adobe_marker = FALSE; + /* set up table handling correctly */ + if (! (sp->jpegtablesmode & JPEGTABLESMODE_QUANT)) { + if (!TIFFjpeg_set_quality(sp, sp->jpegquality, FALSE)) + return (0); + unsuppress_quant_table(sp, 0); + unsuppress_quant_table(sp, 1); + } + if (sp->jpegtablesmode & JPEGTABLESMODE_HUFF) + sp->cinfo.c.optimize_coding = FALSE; + else + sp->cinfo.c.optimize_coding = TRUE; + if (downsampled_input) { + /* Need to use raw-data interface to libjpeg */ + sp->cinfo.c.raw_data_in = TRUE; + tif->tif_encoderow = JPEGEncodeRaw; + tif->tif_encodestrip = JPEGEncodeRaw; + tif->tif_encodetile = JPEGEncodeRaw; + } else { + /* Use normal interface to libjpeg */ + sp->cinfo.c.raw_data_in = FALSE; + tif->tif_encoderow = JPEGEncode; + tif->tif_encodestrip = JPEGEncode; + tif->tif_encodetile = JPEGEncode; + } + /* Start JPEG compressor */ + if (!TIFFjpeg_start_compress(sp, FALSE)) + return (0); + /* Allocate downsampled-data buffers if needed */ + if (downsampled_input) { + if (!alloc_downsampled_buffers(tif, sp->cinfo.c.comp_info, + sp->cinfo.c.num_components)) + return (0); + } + sp->scancount = 0; + + return (1); +} + +/* + * Encode a chunk of pixels. + * "Standard" case: incoming data is not downsampled. + */ +static int +JPEGEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +{ + JPEGState *sp = JState(tif); + tsize_t nrows; + JSAMPROW bufptr[1]; + + (void) s; + assert(sp != NULL); + /* data is expected to be supplied in multiples of a scanline */ + nrows = cc / sp->bytesperline; + if (cc % sp->bytesperline) + TIFFWarning(tif->tif_name, "fractional scanline discarded"); + + while (nrows-- > 0) { + bufptr[0] = (JSAMPROW) buf; + if (TIFFjpeg_write_scanlines(sp, bufptr, 1) != 1) + return (0); + if (nrows > 0) + tif->tif_row++; + buf += sp->bytesperline; + } + return (1); +} + +/* + * Encode a chunk of pixels. + * Incoming data is expected to be downsampled per sampling factors. + */ +static int +JPEGEncodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +{ + JPEGState *sp = JState(tif); + JSAMPLE* inptr; + JSAMPLE* outptr; + tsize_t nrows; + JDIMENSION clumps_per_line, nclump; + int clumpoffset, ci, xpos, ypos; + jpeg_component_info* compptr; + int samples_per_clump = sp->samplesperclump; + + (void) s; + assert(sp != NULL); + /* data is expected to be supplied in multiples of a scanline */ + nrows = cc / sp->bytesperline; + if (cc % sp->bytesperline) + TIFFWarning(tif->tif_name, "fractional scanline discarded"); + + /* Cb,Cr both have sampling factors 1, so this is correct */ + clumps_per_line = sp->cinfo.c.comp_info[1].downsampled_width; + + while (nrows-- > 0) { + /* + * Fastest way to separate the data is to make one pass + * over the scanline for each row of each component. + */ + clumpoffset = 0; /* first sample in clump */ + for (ci = 0, compptr = sp->cinfo.c.comp_info; + ci < sp->cinfo.c.num_components; + ci++, compptr++) { + int hsamp = compptr->h_samp_factor; + int vsamp = compptr->v_samp_factor; + int padding = (int) (compptr->width_in_blocks * DCTSIZE - + clumps_per_line * hsamp); + for (ypos = 0; ypos < vsamp; ypos++) { + inptr = ((JSAMPLE*) buf) + clumpoffset; + outptr = sp->ds_buffer[ci][sp->scancount*vsamp + ypos]; + if (hsamp == 1) { + /* fast path for at least Cb and Cr */ + for (nclump = clumps_per_line; nclump-- > 0; ) { + *outptr++ = inptr[0]; + inptr += samples_per_clump; + } + } else { + /* general case */ + for (nclump = clumps_per_line; nclump-- > 0; ) { + for (xpos = 0; xpos < hsamp; xpos++) + *outptr++ = inptr[xpos]; + inptr += samples_per_clump; + } + } + /* pad each scanline as needed */ + for (xpos = 0; xpos < padding; xpos++) { + *outptr = outptr[-1]; + outptr++; + } + clumpoffset += hsamp; + } + } + sp->scancount++; + if (sp->scancount >= DCTSIZE) { + int n = sp->cinfo.c.max_v_samp_factor * DCTSIZE; + if (TIFFjpeg_write_raw_data(sp, sp->ds_buffer, n) != n) + return (0); + sp->scancount = 0; + } + if (nrows > 0) + tif->tif_row++; + buf += sp->bytesperline; + } + return (1); +} + +/* + * Finish up at the end of a strip or tile. + */ +static int +JPEGPostEncode(TIFF* tif) +{ + JPEGState *sp = JState(tif); + + if (sp->scancount > 0) { + /* + * Need to emit a partial bufferload of downsampled data. + * Pad the data vertically. + */ + int ci, ypos, n; + jpeg_component_info* compptr; + + for (ci = 0, compptr = sp->cinfo.c.comp_info; + ci < sp->cinfo.c.num_components; + ci++, compptr++) { + int vsamp = compptr->v_samp_factor; + tsize_t row_width = compptr->width_in_blocks * DCTSIZE + * sizeof(JSAMPLE); + for (ypos = sp->scancount * vsamp; + ypos < DCTSIZE * vsamp; ypos++) { + _TIFFmemcpy((tdata_t)sp->ds_buffer[ci][ypos], + (tdata_t)sp->ds_buffer[ci][ypos-1], + row_width); + + } + } + n = sp->cinfo.c.max_v_samp_factor * DCTSIZE; + if (TIFFjpeg_write_raw_data(sp, sp->ds_buffer, n) != n) + return (0); + } + + return (TIFFjpeg_finish_compress(JState(tif))); +} + +static void +JPEGCleanup(TIFF* tif) +{ + if (tif->tif_data) { + JPEGState *sp = JState(tif); + TIFFjpeg_destroy(sp); /* release libjpeg resources */ + if (sp->jpegtables) /* tag value */ + _TIFFfree(sp->jpegtables); + _TIFFfree(tif->tif_data); /* release local state */ + tif->tif_data = NULL; + } +} + +static int +JPEGVSetField(TIFF* tif, ttag_t tag, va_list ap) +{ + JPEGState* sp = JState(tif); + TIFFDirectory* td = &tif->tif_dir; + uint32 v32; + + switch (tag) { + case TIFFTAG_JPEGTABLES: + v32 = va_arg(ap, uint32); + if (v32 == 0) { + /* XXX */ + return (0); + } + _TIFFsetByteArray(&sp->jpegtables, va_arg(ap, void*), + (long) v32); + sp->jpegtables_length = v32; + TIFFSetFieldBit(tif, FIELD_JPEGTABLES); + break; + case TIFFTAG_JPEGQUALITY: + sp->jpegquality = va_arg(ap, int); + return (1); /* pseudo tag */ + case TIFFTAG_JPEGCOLORMODE: + sp->jpegcolormode = va_arg(ap, int); + /* + * Mark whether returned data is up-sampled or not + * so TIFFStripSize and TIFFTileSize return values + * that reflect the true amount of data. + */ + tif->tif_flags &= ~TIFF_UPSAMPLED; + if (td->td_planarconfig == PLANARCONFIG_CONTIG) { + if (td->td_photometric == PHOTOMETRIC_YCBCR && + sp->jpegcolormode == JPEGCOLORMODE_RGB) { + tif->tif_flags |= TIFF_UPSAMPLED; + } else { + if (td->td_ycbcrsubsampling[0] != 1 || + td->td_ycbcrsubsampling[1] != 1) + ; /* XXX what about up-sampling? */ + } + } + /* + * Must recalculate cached tile size + * in case sampling state changed. + */ + tif->tif_tilesize = TIFFTileSize(tif); + return (1); /* pseudo tag */ + case TIFFTAG_JPEGTABLESMODE: + sp->jpegtablesmode = va_arg(ap, int); + return (1); /* pseudo tag */ + default: + return (*sp->vsetparent)(tif, tag, ap); + } + tif->tif_flags |= TIFF_DIRTYDIRECT; + return (1); +} + +static int +JPEGVGetField(TIFF* tif, ttag_t tag, va_list ap) +{ + JPEGState* sp = JState(tif); + + switch (tag) { + case TIFFTAG_JPEGTABLES: + /* u_short is bogus --- should be uint32 ??? */ + /* TIFFWriteNormalTag needs fixed XXX */ + *va_arg(ap, u_short*) = (u_short) sp->jpegtables_length; + *va_arg(ap, void**) = sp->jpegtables; + break; + case TIFFTAG_JPEGQUALITY: + *va_arg(ap, int*) = sp->jpegquality; + break; + case TIFFTAG_JPEGCOLORMODE: + *va_arg(ap, int*) = sp->jpegcolormode; + break; + case TIFFTAG_JPEGTABLESMODE: + *va_arg(ap, int*) = sp->jpegtablesmode; + break; + default: + return (*sp->vgetparent)(tif, tag, ap); + } + return (1); +} + +static void +JPEGPrintDir(TIFF* tif, FILE* fd, long flags) +{ + JPEGState* sp = JState(tif); + + (void) flags; + if (TIFFFieldSet(tif,FIELD_JPEGTABLES)) + fprintf(fd, " JPEG Tables: (%lu bytes)\n", + (u_long) sp->jpegtables_length); +} + +static uint32 +JPEGDefaultStripSize(TIFF* tif, uint32 s) +{ + JPEGState* sp = JState(tif); + TIFFDirectory *td = &tif->tif_dir; + + s = (*sp->defsparent)(tif, s); + if (s < td->td_imagelength) + s = TIFFroundup(s, td->td_ycbcrsubsampling[1] * DCTSIZE); + return (s); +} + +static void +JPEGDefaultTileSize(TIFF* tif, uint32* tw, uint32* th) +{ + JPEGState* sp = JState(tif); + TIFFDirectory *td = &tif->tif_dir; + + (*sp->deftparent)(tif, tw, th); + *tw = TIFFroundup(*tw, td->td_ycbcrsubsampling[0] * DCTSIZE); + *th = TIFFroundup(*th, td->td_ycbcrsubsampling[1] * DCTSIZE); +} + +int +TIFFInitJPEG(TIFF* tif, int scheme) +{ + JPEGState* sp; + + assert(scheme == COMPRESSION_JPEG); + + /* + * Allocate state block so tag methods have storage to record values. + */ + tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (JPEGState)); + if (tif->tif_data == NULL) { + TIFFError("TIFFInitJPEG", "No space for JPEG state block"); + return (0); + } + sp = JState(tif); + sp->tif = tif; /* back link */ + + /* + * Merge codec-specific tag information and + * override parent get/set field methods. + */ + _TIFFMergeFieldInfo(tif, jpegFieldInfo, N(jpegFieldInfo)); + sp->vgetparent = tif->tif_vgetfield; + tif->tif_vgetfield = JPEGVGetField; /* hook for codec tags */ + sp->vsetparent = tif->tif_vsetfield; + tif->tif_vsetfield = JPEGVSetField; /* hook for codec tags */ + tif->tif_printdir = JPEGPrintDir; /* hook for codec tags */ + + /* Default values for codec-specific fields */ + sp->jpegtables = NULL; + sp->jpegtables_length = 0; + sp->jpegquality = 75; /* Default IJG quality */ + sp->jpegcolormode = JPEGCOLORMODE_RAW; + sp->jpegtablesmode = JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF; + + /* + * Install codec methods. + */ + tif->tif_setupdecode = JPEGSetupDecode; + tif->tif_predecode = JPEGPreDecode; + tif->tif_decoderow = JPEGDecode; + tif->tif_decodestrip = JPEGDecode; + tif->tif_decodetile = JPEGDecode; + tif->tif_setupencode = JPEGSetupEncode; + tif->tif_preencode = JPEGPreEncode; + tif->tif_postencode = JPEGPostEncode; + tif->tif_encoderow = JPEGEncode; + tif->tif_encodestrip = JPEGEncode; + tif->tif_encodetile = JPEGEncode; + tif->tif_cleanup = JPEGCleanup; + sp->defsparent = tif->tif_defstripsize; + tif->tif_defstripsize = JPEGDefaultStripSize; + sp->deftparent = tif->tif_deftilesize; + tif->tif_deftilesize = JPEGDefaultTileSize; + tif->tif_flags |= TIFF_NOBITREV; /* no bit reversal, please */ + + /* + * Initialize libjpeg. + */ + if (tif->tif_mode == O_RDONLY) { + if (!TIFFjpeg_create_decompress(sp)) + return (0); + } else { + if (!TIFFjpeg_create_compress(sp)) + return (0); + } + + return (1); +} +#endif /* JPEG_SUPPORT */ diff --git a/libtiff/tif_luv.c b/libtiff/tif_luv.c new file mode 100755 index 0000000..35d9e50 --- /dev/null +++ b/libtiff/tif_luv.c @@ -0,0 +1,1425 @@ +/* + * Copyright (c) 1997 Greg Ward Larson + * Copyright (c) 1997 Silicon Graphics, Inc. + * + * 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, Greg Larson 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, Greg Larson 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, GREG LARSON 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. + */ + +#include "tiffiop.h" +#ifdef LOGLUV_SUPPORT + +/* + * TIFF Library. + * LogLuv compression support for high dynamic range images. + * + * Contributed by Greg Larson. + * + * LogLuv image support uses the TIFF library to store 16 or 10-bit + * log luminance values with 8 bits each of u and v or a 14-bit index. + * + * The codec can take as input and produce as output 32-bit IEEE float values + * as well as 16-bit integer values. A 16-bit luminance is interpreted + * as a sign bit followed by a 15-bit integer that is converted + * to and from a linear magnitude using the transformation: + * + * L = 2^( (Le+.5)/256 - 64 ) # real from 15-bit + * + * Le = floor( 256*(log2(L) + 64) ) # 15-bit from real + * + * The actual conversion to world luminance units in candelas per sq. meter + * requires an additional multiplier, which is stored in the TIFFTAG_STONITS. + * This value is usually set such that a reasonable exposure comes from + * clamping decoded luminances above 1 to 1 in the displayed image. + * + * The 16-bit values for u and v may be converted to real values by dividing + * each by 32768. (This allows for negative values, which aren't useful as + * far as we know, but are left in case of future improvements in human + * color vision.) + * + * Conversion from (u,v), which is actually the CIE (u',v') system for + * you color scientists, is accomplished by the following transformation: + * + * u = 4*x / (-2*x + 12*y + 3) + * v = 9*y / (-2*x + 12*y + 3) + * + * x = 9*u / (6*u - 16*v + 12) + * y = 4*v / (6*u - 16*v + 12) + * + * This process is greatly simplified by passing 32-bit IEEE floats + * for each of three CIE XYZ coordinates. The codec then takes care + * of conversion to and from LogLuv, though the application is still + * responsible for interpreting the TIFFTAG_STONITS calibration factor. + * + * The information is compressed into one of two basic encodings, depending on + * the setting of the compression tag, which is one of COMPRESSION_SGILOG + * or COMPRESSION_SGILOG24. For COMPRESSION_SGILOG, greyscale data is + * stored as: + * + * 1 15 + * |-+---------------| + * + * COMPRESSION_SGILOG color data is stored as: + * + * 1 15 8 8 + * |-+---------------|--------+--------| + * S Le ue ve + * + * For the 24-bit COMPRESSION_SGILOG24 color format, the data is stored as: + * + * 10 14 + * |----------|--------------| + * Le' Ce + * + * There is no sign bit in the 24-bit case, and the (u,v) chromaticity is + * encoded as an index for optimal color resolution. The 10 log bits are + * defined by the following conversions: + * + * L = 2^((Le'+.5)/64 - 12) # real from 10-bit + * + * Le' = floor( 64*(log2(L) + 12) ) # 10-bit from real + * + * The 10 bits of the smaller format may be converted into the 15 bits of + * the larger format by multiplying by 4 and adding 13314. Obviously, + * a smaller range of magnitudes is covered (about 5 orders of magnitude + * instead of 38), and the lack of a sign bit means that negative luminances + * are not allowed. (Well, they aren't allowed in the real world, either, + * but they are useful for certain types of image processing.) + * + * The desired user format is controlled by the setting the internal + * pseudo tag TIFFTAG_SGILOGDATAFMT to one of: + * SGILOGDATAFMT_FLOAT = IEEE 32-bit float XYZ values + * SGILOGDATAFMT_16BIT = 16-bit integer encodings of logL, u and v + * Raw data i/o is also possible using: + * SGILOGDATAFMT_RAW = 32-bit unsigned integer with encoded pixel + * In addition, the following decoding is provided for ease of display: + * SGILOGDATAFMT_8BIT = 8-bit default RGB gamma-corrected values + * + * For grayscale images, we provide the following data formats: + * SGILOGDATAFMT_FLOAT = IEEE 32-bit float Y values + * SGILOGDATAFMT_16BIT = 16-bit integer w/ encoded luminance + * SGILOGDATAFMT_8BIT = 8-bit gray monitor values + * + * Note that the COMPRESSION_SGILOG applies a simple run-length encoding + * scheme by separating the logL, u and v bytes for each row and applying + * a PackBits type of compression. Since the 24-bit encoding is not + * adaptive, the 32-bit color format takes less space in many cases. + */ + +#include +#include +#include +#include + +/* + * State block for each open TIFF + * file using LogLuv compression/decompression. + */ +typedef struct logLuvState LogLuvState; + +struct logLuvState { + int user_datafmt; /* user data format */ + int pixel_size; /* bytes per pixel */ + + tidata_t* tbuf; /* translation buffer */ + short tbuflen; /* buffer length */ + void (*tfunc)(LogLuvState*, tidata_t, int); + + TIFFVSetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ +}; + +#define DecoderState(tif) ((LogLuvState*) (tif)->tif_data) +#define EncoderState(tif) ((LogLuvState*) (tif)->tif_data) + +#define N(a) (sizeof(a)/sizeof(a[0])) +#define SGILOGDATAFMT_UNKNOWN -1 + +#define MINRUN 4 /* minimum run length */ + +/* + * Decode a string of 16-bit gray pixels. + */ +static int +LogL16Decode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +{ + LogLuvState* sp = DecoderState(tif); + int shft, i, npixels; + u_char* bp; + int16* tp; + int16 b; + int cc, rc; + + assert(s == 0); + assert(sp != NULL); + + npixels = occ / sp->pixel_size; + + if (sp->user_datafmt == SGILOGDATAFMT_16BIT) + tp = (int16*) op; + else { + assert(sp->tbuflen >= npixels); + tp = (int16*) sp->tbuf; + } + _TIFFmemset((tdata_t) tp, 0, npixels*sizeof (tp[0])); + + bp = (u_char*) tif->tif_rawcp; + cc = tif->tif_rawcc; + /* get each byte string */ + for (shft = 2*8; (shft -= 8) >= 0; ) { + for (i = 0; i < npixels && cc > 0; ) + if (*bp >= 128) { /* run */ + rc = *bp++ + (2-128); + b = (int16)*bp++ << shft; + cc -= 2; + while (rc--) + tp[i++] |= b; + } else { /* non-run */ + rc = *bp++; /* nul is noop */ + while (--cc && rc--) + tp[i++] |= (int16)*bp++ << shft; + } + if (i != npixels) { + TIFFError(tif->tif_name, + "LogL16Decode: Not enough data at row %d (short %d pixels)", + tif->tif_row, npixels - i); + tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcc = cc; + return (0); + } + } + (*sp->tfunc)(sp, op, npixels); + tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcc = cc; + return (1); +} + +/* + * Decode a string of 24-bit pixels. + */ +static int +LogLuvDecode24(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +{ + LogLuvState* sp = DecoderState(tif); + int cc, i, npixels; + u_char* bp; + uint32* tp; + + assert(s == 0); + assert(sp != NULL); + + npixels = occ / sp->pixel_size; + + if (sp->user_datafmt == SGILOGDATAFMT_RAW) + tp = (uint32 *)op; + else { + assert(sp->tbuflen >= npixels); + tp = (uint32 *) sp->tbuf; + } + _TIFFmemset((tdata_t) tp, 0, npixels*sizeof (tp[0])); + /* copy to array of uint32 */ + bp = (u_char*) tif->tif_rawcp; + cc = tif->tif_rawcc; + for (i = 0; i < npixels && cc > 0; i++) { + tp[i] = bp[0] << 16 | bp[1] << 8 | bp[2]; + bp += 3; + cc -= 3; + } + tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcc = cc; + if (i != npixels) { + TIFFError(tif->tif_name, + "LogLuvDecode24: Not enough data at row %d (short %d pixels)", + tif->tif_row, npixels - i); + return (0); + } + (*sp->tfunc)(sp, op, npixels); + return (1); +} + +/* + * Decode a string of 32-bit pixels. + */ +static int +LogLuvDecode32(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +{ + LogLuvState* sp; + int shft, i, npixels; + u_char* bp; + uint32* tp; + uint32 b; + int cc, rc; + + assert(s == 0); + sp = DecoderState(tif); + assert(sp != NULL); + + npixels = occ / sp->pixel_size; + + if (sp->user_datafmt == SGILOGDATAFMT_RAW) + tp = (uint32*) op; + else { + assert(sp->tbuflen >= npixels); + tp = (uint32*) sp->tbuf; + } + _TIFFmemset((tdata_t) tp, 0, npixels*sizeof (tp[0])); + + bp = (u_char*) tif->tif_rawcp; + cc = tif->tif_rawcc; + /* get each byte string */ + for (shft = 4*8; (shft -= 8) >= 0; ) { + for (i = 0; i < npixels && cc > 0; ) + if (*bp >= 128) { /* run */ + rc = *bp++ + (2-128); + b = (uint32)*bp++ << shft; + cc -= 2; + while (rc--) + tp[i++] |= b; + } else { /* non-run */ + rc = *bp++; /* nul is noop */ + while (--cc && rc--) + tp[i++] |= (uint32)*bp++ << shft; + } + if (i != npixels) { + TIFFError(tif->tif_name, + "LogLuvDecode32: Not enough data at row %d (short %d pixels)", + tif->tif_row, npixels - i); + tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcc = cc; + return (0); + } + } + (*sp->tfunc)(sp, op, npixels); + tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcc = cc; + return (1); +} + +/* + * Decode a strip of pixels. We break it into rows to + * maintain synchrony with the encode algorithm, which + * is row by row. + */ +static int +LogLuvDecodeStrip(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + tsize_t rowlen = TIFFScanlineSize(tif); + + assert(cc%rowlen == 0); + while (cc && (*tif->tif_decoderow)(tif, bp, rowlen, s)) + bp += rowlen, cc -= rowlen; + return (cc == 0); +} + +/* + * Decode a tile of pixels. We break it into rows to + * maintain synchrony with the encode algorithm, which + * is row by row. + */ +static int +LogLuvDecodeTile(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + tsize_t rowlen = TIFFTileRowSize(tif); + + assert(cc%rowlen == 0); + while (cc && (*tif->tif_decoderow)(tif, bp, rowlen, s)) + bp += rowlen, cc -= rowlen; + return (cc == 0); +} + +/* + * Encode a row of 16-bit pixels. + */ +static int +LogL16Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + LogLuvState* sp = EncoderState(tif); + int shft, i, j, npixels; + tidata_t op; + int16* tp; + int16 b; + int occ, rc=0, mask, beg; + + assert(s == 0); + assert(sp != NULL); + npixels = cc / sp->pixel_size; + + if (sp->user_datafmt == SGILOGDATAFMT_16BIT) + tp = (int16*) bp; + else { + tp = (int16*) sp->tbuf; + assert(sp->tbuflen >= npixels); + (*sp->tfunc)(sp, bp, npixels); + } + /* compress each byte string */ + op = tif->tif_rawcp; + occ = tif->tif_rawdatasize - tif->tif_rawcc; + for (shft = 2*8; (shft -= 8) >= 0; ) + for (i = 0; i < npixels; i += rc) { + if (occ < 4) { + tif->tif_rawcp = op; + tif->tif_rawcc = tif->tif_rawdatasize - occ; + if (!TIFFFlushData1(tif)) + return (-1); + op = tif->tif_rawcp; + occ = tif->tif_rawdatasize - tif->tif_rawcc; + } + mask = 0xff << shft; /* find next run */ + for (beg = i; beg < npixels; beg += rc) { + b = tp[beg] & mask; + rc = 1; + while (rc < 127+2 && beg+rc < npixels && + (tp[beg+rc] & mask) == b) + rc++; + if (rc >= MINRUN) + break; /* long enough */ + } + if (beg-i > 1 && beg-i < MINRUN) { + b = tp[i] & mask; /* check short run */ + j = i+1; + while ((tp[j++] & mask) == b) + if (j == beg) { + *op++ = 128-2+j-i; + *op++ = b >> shft; + occ -= 2; + i = beg; + break; + } + } + while (i < beg) { /* write out non-run */ + if ((j = beg-i) > 127) j = 127; + if (occ < j+3) { + tif->tif_rawcp = op; + tif->tif_rawcc = tif->tif_rawdatasize - occ; + if (!TIFFFlushData1(tif)) + return (-1); + op = tif->tif_rawcp; + occ = tif->tif_rawdatasize - tif->tif_rawcc; + } + *op++ = j; occ--; + while (j--) { + *op++ = tp[i++] >> shft & 0xff; + occ--; + } + } + if (rc >= MINRUN) { /* write out run */ + *op++ = 128-2+rc; + *op++ = tp[beg] >> shft & 0xff; + occ -= 2; + } else + rc = 0; + } + tif->tif_rawcp = op; + tif->tif_rawcc = tif->tif_rawdatasize - occ; + + return (0); +} + +/* + * Encode a row of 24-bit pixels. + */ +static int +LogLuvEncode24(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + LogLuvState* sp = EncoderState(tif); + int i, npixels, occ; + tidata_t op; + uint32* tp; + + assert(s == 0); + assert(sp != NULL); + npixels = cc / sp->pixel_size; + + if (sp->user_datafmt == SGILOGDATAFMT_RAW) + tp = (uint32*) bp; + else { + tp = (uint32*) sp->tbuf; + assert(sp->tbuflen >= npixels); + (*sp->tfunc)(sp, bp, npixels); + } + /* write out encoded pixels */ + op = tif->tif_rawcp; + occ = tif->tif_rawdatasize - tif->tif_rawcc; + for (i = npixels; i--; ) { + if (occ < 3) { + tif->tif_rawcp = op; + tif->tif_rawcc = tif->tif_rawdatasize - occ; + if (!TIFFFlushData1(tif)) + return (-1); + op = tif->tif_rawcp; + occ = tif->tif_rawdatasize - tif->tif_rawcc; + } + *op++ = (tidataval_t)(*tp >> 16); + *op++ = (tidataval_t)(*tp >> 8 & 0xff); + *op++ = (tidataval_t)(*tp++ & 0xff); + occ -= 3; + } + tif->tif_rawcp = op; + tif->tif_rawcc = tif->tif_rawdatasize - occ; + + return (0); +} + +/* + * Encode a row of 32-bit pixels. + */ +static int +LogLuvEncode32(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + LogLuvState* sp = EncoderState(tif); + int shft, i, j, npixels; + tidata_t op; + uint32* tp; + uint32 b; + int occ, rc=0, mask, beg; + + assert(s == 0); + assert(sp != NULL); + + npixels = cc / sp->pixel_size; + + if (sp->user_datafmt == SGILOGDATAFMT_RAW) + tp = (uint32*) bp; + else { + tp = (uint32*) sp->tbuf; + assert(sp->tbuflen >= npixels); + (*sp->tfunc)(sp, bp, npixels); + } + /* compress each byte string */ + op = tif->tif_rawcp; + occ = tif->tif_rawdatasize - tif->tif_rawcc; + for (shft = 4*8; (shft -= 8) >= 0; ) + for (i = 0; i < npixels; i += rc) { + if (occ < 4) { + tif->tif_rawcp = op; + tif->tif_rawcc = tif->tif_rawdatasize - occ; + if (!TIFFFlushData1(tif)) + return (-1); + op = tif->tif_rawcp; + occ = tif->tif_rawdatasize - tif->tif_rawcc; + } + mask = 0xff << shft; /* find next run */ + for (beg = i; beg < npixels; beg += rc) { + b = tp[beg] & mask; + rc = 1; + while (rc < 127+2 && beg+rc < npixels && + (tp[beg+rc] & mask) == b) + rc++; + if (rc >= MINRUN) + break; /* long enough */ + } + if (beg-i > 1 && beg-i < MINRUN) { + b = tp[i] & mask; /* check short run */ + j = i+1; + while ((tp[j++] & mask) == b) + if (j == beg) { + *op++ = (tidataval_t)(128-2+j-i); + *op++ = (tidataval_t)(b >> shft); + occ -= 2; + i = beg; + break; + } + } + while (i < beg) { /* write out non-run */ + if ((j = beg-i) > 127) j = 127; + if (occ < j+3) { + tif->tif_rawcp = op; + tif->tif_rawcc = tif->tif_rawdatasize - occ; + if (!TIFFFlushData1(tif)) + return (-1); + op = tif->tif_rawcp; + occ = tif->tif_rawdatasize - tif->tif_rawcc; + } + *op++ = j; occ--; + while (j--) { + *op++ = (tidataval_t)(tp[i++] >> shft & 0xff); + occ--; + } + } + if (rc >= MINRUN) { /* write out run */ + *op++ = 128-2+rc; + *op++ = (tidataval_t)(tp[beg] >> shft & 0xff); + occ -= 2; + } else + rc = 0; + } + tif->tif_rawcp = op; + tif->tif_rawcc = tif->tif_rawdatasize - occ; + + return (0); +} + +/* + * Encode a strip of pixels. We break it into rows to + * avoid encoding runs across row boundaries. + */ +static int +LogLuvEncodeStrip(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + tsize_t rowlen = TIFFScanlineSize(tif); + + assert(cc%rowlen == 0); + while (cc && (*tif->tif_encoderow)(tif, bp, rowlen, s) == 0) + bp += rowlen, cc -= rowlen; + return (cc == 0); +} + +/* + * Encode a tile of pixels. We break it into rows to + * avoid encoding runs across row boundaries. + */ +static int +LogLuvEncodeTile(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + tsize_t rowlen = TIFFTileRowSize(tif); + + assert(cc%rowlen == 0); + while (cc && (*tif->tif_encoderow)(tif, bp, rowlen, s) == 0) + bp += rowlen, cc -= rowlen; + return (cc == 0); +} + +/* + * Encode/Decode functions for converting to and from user formats. + */ +#include "uvcode.h" + +#define U_NEU 0.210526316 +#define V_NEU 0.473684211 + +#ifdef M_LN2 +#define LOGOF2 M_LN2 +#else +#define LOGOF2 0.69314718055994530942 +#endif +#define log2(x) ((1./LOGOF2)*log(x)) +#define exp2(x) exp(LOGOF2*(x)) + +#define UVSCALE 410. + +static double +pix16toY(int p16) +{ + int Le = p16 & 0x7fff; + double Y; + + if (!Le) + return (0.); + Y = exp(LOGOF2/256.*(Le+.5) - LOGOF2*64.); + if (p16 & 0x8000) + return (-Y); + return (Y); +} + +static int +pix16fromY(double Y) +{ + if (Y >= 1.84467e19) + return (0x7fff); + if (Y <= -1.84467e19) + return (0xffff); + if (Y > 5.43571e-20) + return (int)(256.*(log2(Y) + 64.)); + if (Y < -5.43571e-20) + return (~0x7fff | (int)(256.*(log2(-Y) + 64.))); + return (0); +} + +static void +L16toY(LogLuvState* sp, tidata_t op, int n) +{ + int16* l16 = (int16*) sp->tbuf; + float* yp = (float*) op; + + while (n-- > 0) + *yp++ = (float)pix16toY(*l16++); +} + +static void +L16toGry(LogLuvState* sp, tidata_t op, int n) +{ + int16* l16 = (int16*) sp->tbuf; + uint8* gp = (uint8*) op; + + while (n-- > 0) { + double Y = pix16toY(*l16++); + *gp++ = (Y <= 0.) ? 0 : (Y >= 1.) ? 255 : (int)(256.*sqrt(Y)); + } +} + +static void +L16fromY(LogLuvState* sp, tidata_t op, int n) +{ + int16* l16 = (int16*) sp->tbuf; + float* yp = (float*) op; + + while (n-- > 0) + *l16++ = pix16fromY(*yp++); +} + +static void +XYZtoRGB24(float xyz[3], uint8 rgb[3]) +{ + double r, g, b; + /* assume CCIR-709 primaries */ + r = 2.690*xyz[0] + -1.276*xyz[1] + -0.414*xyz[2]; + g = -1.022*xyz[0] + 1.978*xyz[1] + 0.044*xyz[2]; + b = 0.061*xyz[0] + -0.224*xyz[1] + 1.163*xyz[2]; + /* assume 2.0 gamma for speed */ + /* could use integer sqrt approx., but this is probably faster */ + rgb[0] = (r <= 0.) ? 0 : (r >= 1.) ? 255 : (int)(256.*sqrt(r)); + rgb[1] = (g <= 0.) ? 0 : (g >= 1.) ? 255 : (int)(256.*sqrt(g)); + rgb[2] = (b <= 0.) ? 0 : (b >= 1.) ? 255 : (int)(256.*sqrt(b)); +} + +static int +uv_encode(double u, double v) /* encode (u',v') coordinates */ +{ + register int vi, ui; + + if (v < UV_VSTART) + return(-1); + vi = (int)((v - UV_VSTART)*(1./UV_SQSIZ)); + if (vi >= UV_NVS) + return(-1); + if (u < uv_row[vi].ustart) + return(-1); + ui = (int)((u - uv_row[vi].ustart)*(1./UV_SQSIZ)); + if (ui >= uv_row[vi].nus) + return(-1); + return(uv_row[vi].ncum + ui); +} + +static int +uv_decode(double *up, double *vp, int c) /* decode (u',v') index */ +{ + int upper, lower; + register int ui, vi; + + if (c < 0 || c >= UV_NDIVS) + return(-1); + lower = 0; /* binary search */ + upper = UV_NVS; + do { + vi = (lower + upper) >> 1; + ui = c - uv_row[vi].ncum; + if (ui > 0) + lower = vi; + else if (ui < 0) + upper = vi; + else + break; + } while (upper - lower > 1); + vi = lower; + ui = c - uv_row[vi].ncum; + *up = uv_row[vi].ustart + (ui+.5)*UV_SQSIZ; + *vp = UV_VSTART + (vi+.5)*UV_SQSIZ; + return(0); +} + +static void +pix24toXYZ(uint32 p, float XYZ[3]) +{ + int Le, Ce; + double L, u, v, s, x, y; + /* decode luminance */ + Le = p >> 14 & 0x3ff; + if (Le == 0) { + XYZ[0] = XYZ[1] = XYZ[2] = 0.; + return; + } + L = exp(LOGOF2/64.*(Le+.5) - LOGOF2*12.); + /* decode color */ + Ce = p & 0x3fff; + if (uv_decode(&u, &v, Ce) < 0) { + u = U_NEU; v = V_NEU; + } + s = 1./(6.*u - 16.*v + 12.); + x = 9.*u * s; + y = 4.*v * s; + /* convert to XYZ */ + XYZ[0] = (float)(x/y * L); + XYZ[1] = (float)L; + XYZ[2] = (float)((1.-x-y)/y * L); +} + +static uint32 +pix24fromXYZ(float XYZ[3]) +{ + int Le, Ce; + double L, u, v, s; + /* encode luminance */ + L = XYZ[1]; + if (L >= 16.) + Le = 0x3ff; + else if (L <= 1./4096.) + Le = 0; + else + Le = (int)(64.*(log2(L) + 12.)); + /* encode color */ + s = XYZ[0] + 15.*XYZ[1] + 3.*XYZ[2]; + if (s == 0.) { + u = U_NEU; + v = V_NEU; + } else { + u = 4.*XYZ[0] / s; + v = 9.*XYZ[1] / s; + } + Ce = uv_encode(u, v); + if (Ce < 0) + Ce = uv_encode(U_NEU, V_NEU); + /* combine encodings */ + return (Le << 14 | Ce); +} + +static void +Luv24toXYZ(LogLuvState* sp, tidata_t op, int n) +{ + uint32* luv = (uint32*) sp->tbuf; + float* xyz = (float*) op; + + while (n-- > 0) { + pix24toXYZ(*luv, xyz); + xyz += 3; + luv++; + } +} + +static void +Luv24toLuv48(LogLuvState* sp, tidata_t op, int n) +{ + uint32* luv = (uint32*) sp->tbuf; + int16* luv3 = (int16*) op; + + while (n-- > 0) { + double u, v; + + *luv3++ = (int16)((*luv >> 12 & 0xffd) + 13314); + if (uv_decode(&u, &v, *luv&0x3fff) < 0) { + u = U_NEU; + v = V_NEU; + } + *luv3++ = (int16)(u * (1L<<15)); + *luv3++ = (int16)(v * (1L<<15)); + luv++; + } +} + +static void +Luv24toRGB(LogLuvState* sp, tidata_t op, int n) +{ + uint32* luv = (uint32*) sp->tbuf; + uint8* rgb = (uint8*) op; + + while (n-- > 0) { + float xyz[3]; + + pix24toXYZ(*luv++, xyz); + XYZtoRGB24(xyz, rgb); + rgb += 3; + } +} + +static void +Luv24fromXYZ(LogLuvState* sp, tidata_t op, int n) +{ + uint32* luv = (uint32*) sp->tbuf; + float* xyz = (float*) op; + + while (n-- > 0) { + *luv++ = pix24fromXYZ(xyz); + xyz += 3; + } +} + +static void +Luv24fromLuv48(LogLuvState* sp, tidata_t op, int n) +{ + uint32* luv = (uint32*) sp->tbuf; + int16* luv3 = (int16*) op; + + while (n-- > 0) { + int Le, Ce; + + if (luv3[0] <= 0) + Le = 0; + else if (luv3[0] >= (1<<12)+3314) + Le = (1<<10) - 1; + else + Le = (luv3[0]-3314) >> 2; + Ce = uv_encode((luv[1]+.5)/(1<<15), (luv[2]+.5)/(1<<15)); + if (Ce < 0) + Ce = uv_encode(U_NEU, V_NEU); + *luv++ = (uint32)Le << 14 | Ce; + luv3 += 3; + } +} + +static void +pix32toXYZ(uint32 p, float XYZ[3]) +{ + double L, u, v, s, x, y; + /* decode luminance */ + L = pix16toY((int)p >> 16); + if (L == 0.) { + XYZ[0] = XYZ[1] = XYZ[2] = 0.; + return; + } + /* decode color */ + u = 1./UVSCALE * ((p>>8 & 0xff) + .5); + v = 1./UVSCALE * ((p & 0xff) + .5); + s = 1./(6.*u - 16.*v + 12.); + x = 9.*u * s; + y = 4.*v * s; + /* convert to XYZ */ + XYZ[0] = (float)(x/y * L); + XYZ[1] = (float)L; + XYZ[2] = (float)((1.-x-y)/y * L); +} + +static uint32 +pix32fromXYZ(float XYZ[3]) +{ + unsigned int Le, ue, ve; + double u, v, s; + /* encode luminance */ + Le = (unsigned int)pix16fromY(XYZ[1]); + /* encode color */ + s = XYZ[0] + 15.*XYZ[1] + 3.*XYZ[2]; + if (s == 0.) { + u = U_NEU; + v = V_NEU; + } else { + u = 4.*XYZ[0] / s; + v = 9.*XYZ[1] / s; + } + if (u <= 0.) ue = 0; + else ue = (unsigned int)(UVSCALE * u); + if (ue > 255) ue = 255; + if (v <= 0.) ve = 0; + else ve = (unsigned int)(UVSCALE * v); + if (ve > 255) ve = 255; + /* combine encodings */ + return (Le << 16 | ue << 8 | ve); +} + +static void +Luv32toXYZ(LogLuvState* sp, tidata_t op, int n) +{ + uint32* luv = (uint32*) sp->tbuf; + float* xyz = (float*) op; + + while (n-- > 0) { + pix32toXYZ(*luv++, xyz); + xyz += 3; + } +} + +static void +Luv32toLuv48(LogLuvState* sp, tidata_t op, int n) +{ + uint32* luv = (uint32*) sp->tbuf; + int16* luv3 = (int16*) op; + + while (n-- > 0) { + double u, v; + + *luv3++ = (int16)(*luv >> 16); + u = 1./UVSCALE * ((*luv>>8 & 0xff) + .5); + v = 1./UVSCALE * ((*luv & 0xff) + .5); + *luv3++ = (int16)(u * (1L<<15)); + *luv3++ = (int16)(v * (1L<<15)); + luv++; + } +} + +static void +Luv32toRGB(LogLuvState* sp, tidata_t op, int n) +{ + uint32* luv = (uint32*) sp->tbuf; + uint8* rgb = (uint8*) op; + + while (n-- > 0) { + float xyz[3]; + + pix32toXYZ(*luv++, xyz); + XYZtoRGB24(xyz, rgb); + rgb += 3; + } +} + +static void +Luv32fromXYZ(LogLuvState* sp, tidata_t op, int n) +{ + uint32* luv = (uint32*) sp->tbuf; + float* xyz = (float*) op; + + while (n-- > 0) { + *luv++ = pix32fromXYZ(xyz); + xyz += 3; + } +} + +static void +Luv32fromLuv48(LogLuvState* sp, tidata_t op, int n) +{ + uint32* luv = (uint32*) sp->tbuf; + int16* luv3 = (int16*) op; + + while (n-- > 0) { + *luv++ = (uint32)luv3[0] << 16 | + (luv3[1]*(uint32)(UVSCALE+.5) >> 7 & 0xff00) | + (luv3[2]*(uint32)(UVSCALE+.5) >> 15 & 0xff); + luv3 += 3; + } +} + +static void +_logLuvNop(LogLuvState* sp, tidata_t op, int n) +{ + (void) sp; (void) op; (void) n; +} + +static int +LogL16GuessDataFmt(TIFFDirectory *td) +{ +#define PACK(s,b,f) (((b)<<6)|((s)<<3)|(f)) + switch (PACK(td->td_samplesperpixel, td->td_bitspersample, td->td_sampleformat)) { + case PACK(1, 32, SAMPLEFORMAT_IEEEFP): + return (SGILOGDATAFMT_FLOAT); + case PACK(1, 16, SAMPLEFORMAT_VOID): + case PACK(1, 16, SAMPLEFORMAT_INT): + case PACK(1, 16, SAMPLEFORMAT_UINT): + return (SGILOGDATAFMT_16BIT); + case PACK(1, 8, SAMPLEFORMAT_VOID): + case PACK(1, 8, SAMPLEFORMAT_UINT): + return (SGILOGDATAFMT_8BIT); + } +#undef PACK + return (SGILOGDATAFMT_UNKNOWN); +} + +static int +LogL16InitState(TIFF* tif) +{ + TIFFDirectory *td = &tif->tif_dir; + LogLuvState* sp = DecoderState(tif); + static const char module[] = "LogL16InitState"; + + assert(sp != NULL); + assert(td->td_photometric == PHOTOMETRIC_LOGL); + + /* for some reason, we can't do this in TIFFInitLogL16 */ + if (sp->user_datafmt == SGILOGDATAFMT_UNKNOWN) + sp->user_datafmt = LogL16GuessDataFmt(td); + switch (sp->user_datafmt) { + case SGILOGDATAFMT_FLOAT: + sp->pixel_size = sizeof (float); + break; + case SGILOGDATAFMT_16BIT: + sp->pixel_size = sizeof (int16); + break; + case SGILOGDATAFMT_8BIT: + sp->pixel_size = sizeof (uint8); + break; + default: + TIFFError(tif->tif_name, + "No support for converting user data format to LogL"); + return (0); + } + sp->tbuflen = (short)(td->td_imagewidth * td->td_rowsperstrip); + sp->tbuf = (tidata_t*) _TIFFmalloc(sp->tbuflen * sizeof (int16)); + if (sp->tbuf == NULL) { + TIFFError(module, "%s: No space for SGILog translation buffer", + tif->tif_name); + return (0); + } + return (1); +} + +static int +LogLuvGuessDataFmt(TIFFDirectory *td) +{ + int guess; + + /* + * If the user didn't tell us their datafmt, + * take our best guess from the bitspersample. + */ +#define PACK(a,b) (((a)<<3)|(b)) + switch (PACK(td->td_bitspersample, td->td_sampleformat)) { + case PACK(32, SAMPLEFORMAT_IEEEFP): + guess = SGILOGDATAFMT_FLOAT; + break; + case PACK(32, SAMPLEFORMAT_VOID): + case PACK(32, SAMPLEFORMAT_UINT): + case PACK(32, SAMPLEFORMAT_INT): + guess = SGILOGDATAFMT_RAW; + break; + case PACK(16, SAMPLEFORMAT_VOID): + case PACK(16, SAMPLEFORMAT_INT): + case PACK(16, SAMPLEFORMAT_UINT): + guess = SGILOGDATAFMT_16BIT; + break; + case PACK( 8, SAMPLEFORMAT_VOID): + case PACK( 8, SAMPLEFORMAT_UINT): + guess = SGILOGDATAFMT_8BIT; + break; + default: + guess = SGILOGDATAFMT_UNKNOWN; + break; +#undef PACK + } + /* + * Double-check samples per pixel. + */ + switch (td->td_samplesperpixel) { + case 1: + if (guess != SGILOGDATAFMT_RAW) + guess = SGILOGDATAFMT_UNKNOWN; + break; + case 3: + if (guess == SGILOGDATAFMT_RAW) + guess = SGILOGDATAFMT_UNKNOWN; + break; + default: + guess = SGILOGDATAFMT_UNKNOWN; + break; + } + return (guess); +} + +static int +LogLuvInitState(TIFF* tif) +{ + TIFFDirectory* td = &tif->tif_dir; + LogLuvState* sp = DecoderState(tif); + static const char module[] = "LogLuvInitState"; + + assert(sp != NULL); + assert(td->td_photometric == PHOTOMETRIC_LOGLUV); + + /* for some reason, we can't do this in TIFFInitLogLuv */ + if (td->td_planarconfig != PLANARCONFIG_CONTIG) { + TIFFError(module, + "SGILog compression cannot handle non-contiguous data"); + return (0); + } + if (sp->user_datafmt == SGILOGDATAFMT_UNKNOWN) + sp->user_datafmt = LogLuvGuessDataFmt(td); + switch (sp->user_datafmt) { + case SGILOGDATAFMT_FLOAT: + sp->pixel_size = 3*sizeof (float); + break; + case SGILOGDATAFMT_16BIT: + sp->pixel_size = 3*sizeof (int16); + break; + case SGILOGDATAFMT_RAW: + sp->pixel_size = sizeof (uint32); + break; + case SGILOGDATAFMT_8BIT: + sp->pixel_size = 3*sizeof (uint8); + break; + default: + TIFFError(tif->tif_name, + "No support for converting user data format to LogLuv"); + return (0); + } + sp->tbuflen = (short)(td->td_imagewidth * td->td_rowsperstrip); + sp->tbuf = (tidata_t*) _TIFFmalloc(sp->tbuflen * sizeof (uint32)); + if (sp->tbuf == NULL) { + TIFFError(module, "%s: No space for SGILog translation buffer", + tif->tif_name); + return (0); + } + return (1); +} + +static int +LogLuvSetupDecode(TIFF* tif) +{ + LogLuvState* sp = DecoderState(tif); + TIFFDirectory* td = &tif->tif_dir; + + tif->tif_postdecode = _TIFFNoPostDecode; + switch (td->td_photometric) { + case PHOTOMETRIC_LOGLUV: + if (!LogLuvInitState(tif)) + break; + if (td->td_compression == COMPRESSION_SGILOG24) { + tif->tif_decoderow = LogLuvDecode24; + switch (sp->user_datafmt) { + case SGILOGDATAFMT_FLOAT: + sp->tfunc = Luv24toXYZ; + break; + case SGILOGDATAFMT_16BIT: + sp->tfunc = Luv24toLuv48; + break; + case SGILOGDATAFMT_8BIT: + sp->tfunc = Luv24toRGB; + break; + } + } else { + tif->tif_decoderow = LogLuvDecode32; + switch (sp->user_datafmt) { + case SGILOGDATAFMT_FLOAT: + sp->tfunc = Luv32toXYZ; + break; + case SGILOGDATAFMT_16BIT: + sp->tfunc = Luv32toLuv48; + break; + case SGILOGDATAFMT_8BIT: + sp->tfunc = Luv32toRGB; + break; + } + } + return (1); + case PHOTOMETRIC_LOGL: + if (!LogL16InitState(tif)) + break; + tif->tif_decoderow = LogL16Decode; + switch (sp->user_datafmt) { + case SGILOGDATAFMT_FLOAT: + sp->tfunc = L16toY; + break; + case SGILOGDATAFMT_8BIT: + sp->tfunc = L16toGry; + break; + } + return (1); + default: + TIFFError(tif->tif_name, + "Inappropriate photometric interpretation %d for SGILog compression; %s", + td->td_photometric, "must be either LogLUV or LogL"); + break; + } + return (0); +} + +static int +LogLuvSetupEncode(TIFF* tif) +{ + LogLuvState* sp = EncoderState(tif); + TIFFDirectory* td = &tif->tif_dir; + + switch (td->td_photometric) { + case PHOTOMETRIC_LOGLUV: + if (!LogLuvInitState(tif)) + break; + if (td->td_compression == COMPRESSION_SGILOG24) { + tif->tif_encoderow = LogLuvEncode24; + switch (sp->user_datafmt) { + case SGILOGDATAFMT_FLOAT: + sp->tfunc = Luv24fromXYZ; + break; + case SGILOGDATAFMT_16BIT: + sp->tfunc = Luv24fromLuv48; + break; + case SGILOGDATAFMT_RAW: + break; + default: + goto notsupported; + } + } else { + tif->tif_encoderow = LogLuvEncode32; + switch (sp->user_datafmt) { + case SGILOGDATAFMT_FLOAT: + sp->tfunc = Luv32fromXYZ; + break; + case SGILOGDATAFMT_16BIT: + sp->tfunc = Luv32fromLuv48; + break; + case SGILOGDATAFMT_RAW: + break; + default: + goto notsupported; + } + } + break; + case PHOTOMETRIC_LOGL: + if (!LogL16InitState(tif)) + break; + tif->tif_encoderow = LogL16Encode; + switch (sp->user_datafmt) { + case SGILOGDATAFMT_FLOAT: + sp->tfunc = L16fromY; + break; + case SGILOGDATAFMT_16BIT: + break; + default: + goto notsupported; + } + break; + default: + TIFFError(tif->tif_name, + "Inappropriate photometric interpretation %d for SGILog compression; %s", + td->td_photometric, "must be either LogLUV or LogL"); + break; + } + return (1); +notsupported: + TIFFError(tif->tif_name, + "SGILog compression supported only for %s, or raw data", + td->td_photometric == PHOTOMETRIC_LOGL ? "Y, L" : "XYZ, Luv"); + return (0); +} + +static void +LogLuvClose(TIFF* tif) +{ + TIFFDirectory *td = &tif->tif_dir; + + /* + * For consistency, we always want to write out the same + * bitspersample and sampleformat for our TIFF file, + * regardless of the data format being used by the application. + * Since this routine is called after tags have been set but + * before they have been recorded in the file, we reset them here. + */ + td->td_samplesperpixel = + (td->td_photometric == PHOTOMETRIC_LOGL) ? 1 : 3; + td->td_bitspersample = 16; + td->td_sampleformat = SAMPLEFORMAT_INT; +} + +static void +LogLuvCleanup(TIFF* tif) +{ + LogLuvState* sp = (LogLuvState *)tif->tif_data; + + if (sp) { + if (sp->tbuf) + _TIFFfree(sp->tbuf); + _TIFFfree(sp); + tif->tif_data = NULL; + } +} + +static int +LogLuvVSetField(TIFF* tif, ttag_t tag, va_list ap) +{ + LogLuvState* sp = DecoderState(tif); + int bps, fmt; + + switch (tag) { + case TIFFTAG_SGILOGDATAFMT: + sp->user_datafmt = va_arg(ap, int); + /* + * Tweak the TIFF header so that the rest of libtiff knows what + * size of data will be passed between app and library, and + * assume that the app knows what it is doing and is not + * confused by these header manipulations... + */ + switch (sp->user_datafmt) { + case SGILOGDATAFMT_FLOAT: + bps = 32, fmt = SAMPLEFORMAT_IEEEFP; + break; + case SGILOGDATAFMT_16BIT: + bps = 16, fmt = SAMPLEFORMAT_INT; + break; + case SGILOGDATAFMT_RAW: + bps = 32, fmt = SAMPLEFORMAT_UINT; + break; + case SGILOGDATAFMT_8BIT: + bps = 8, fmt = SAMPLEFORMAT_UINT; + break; + default: + TIFFError(tif->tif_name, + "Unknown data format %d for LogLuv compression", + sp->user_datafmt); + return (0); + } + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps); + TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, fmt); + /* + * Must recalculate sizes should bits/sample change. + */ + tif->tif_tilesize = TIFFTileSize(tif); + tif->tif_scanlinesize = TIFFScanlineSize(tif); + return (1); + default: + return (*sp->vsetparent)(tif, tag, ap); + } +} + +static int +LogLuvVGetField(TIFF* tif, ttag_t tag, va_list ap) +{ + LogLuvState *sp = (LogLuvState *)tif->tif_data; + + switch (tag) { + case TIFFTAG_SGILOGDATAFMT: + *va_arg(ap, int*) = sp->user_datafmt; + return (1); + default: + return (*sp->vgetparent)(tif, tag, ap); + } +} + +static const TIFFFieldInfo LogLuvFieldInfo[] = { + { TIFFTAG_SGILOGDATAFMT, 0, 0, TIFF_SHORT, FIELD_PSEUDO, + TRUE, FALSE, "SGILogDataFmt"} +}; + +int +TIFFInitSGILog(TIFF* tif, int scheme) +{ + static const char module[] = "TIFFInitSGILog"; + LogLuvState* sp; + + assert(scheme == COMPRESSION_SGILOG24 || scheme == COMPRESSION_SGILOG); + + /* + * Allocate state block so tag methods have storage to record values. + */ + tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (LogLuvState)); + if (tif->tif_data == NULL) + goto bad; + sp = (LogLuvState*) tif->tif_data; + memset(sp, 0, sizeof (*sp)); + sp->user_datafmt = SGILOGDATAFMT_UNKNOWN; + sp->tfunc = _logLuvNop; + + /* + * Install codec methods. + * NB: tif_decoderow & tif_encoderow are filled + * in at setup time. + */ + tif->tif_setupdecode = LogLuvSetupDecode; + tif->tif_decodestrip = LogLuvDecodeStrip; + tif->tif_decodetile = LogLuvDecodeTile; + tif->tif_setupencode = LogLuvSetupEncode; + tif->tif_encodestrip = LogLuvEncodeStrip; + tif->tif_encodetile = LogLuvEncodeTile; + tif->tif_close = LogLuvClose; + tif->tif_cleanup = LogLuvCleanup; + + /* override SetField so we can handle our private pseudo-tag */ + _TIFFMergeFieldInfo(tif, LogLuvFieldInfo, N(LogLuvFieldInfo)); + sp->vgetparent = tif->tif_vgetfield; + tif->tif_vgetfield = LogLuvVGetField; /* hook for codec tags */ + sp->vsetparent = tif->tif_vsetfield; + tif->tif_vsetfield = LogLuvVSetField; /* hook for codec tags */ + + return (1); +bad: + TIFFError(module, "%s: No space for LogLuv state block", tif->tif_name); + return (0); +} +#endif /* LOGLUV_SUPPORT */ diff --git a/libtiff/tif_lzw.c b/libtiff/tif_lzw.c new file mode 100755 index 0000000..1d01130 --- /dev/null +++ b/libtiff/tif_lzw.c @@ -0,0 +1,1013 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_lzw.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include "tiffiop.h" +#ifdef LZW_SUPPORT +/* + * TIFF Library. + * Rev 5.0 Lempel-Ziv & Welch Compression Support + * + * This code is derived from the compress program whose code is + * derived from software contributed to Berkeley by James A. Woods, + * derived from original work by Spencer Thomas and Joseph Orost. + * + * The original Berkeley copyright notice appears below in its entirety. + */ +#include "tif_predict.h" + +#include +#include + +/* + * NB: The 5.0 spec describes a different algorithm than Aldus + * implements. Specifically, Aldus does code length transitions + * one code earlier than should be done (for real LZW). + * Earlier versions of this library implemented the correct + * LZW algorithm, but emitted codes in a bit order opposite + * to the TIFF spec. Thus, to maintain compatibility w/ Aldus + * we interpret MSB-LSB ordered codes to be images written w/ + * old versions of this library, but otherwise adhere to the + * Aldus "off by one" algorithm. + * + * Future revisions to the TIFF spec are expected to "clarify this issue". + */ +#define LZW_COMPAT /* include backwards compatibility code */ +/* + * Each strip of data is supposed to be terminated by a CODE_EOI. + * If the following #define is included, the decoder will also + * check for end-of-strip w/o seeing this code. This makes the + * library more robust, but also slower. + */ +#define LZW_CHECKEOS /* include checks for strips w/o EOI code */ + +#define MAXCODE(n) ((1L<<(n))-1) +/* + * The TIFF spec specifies that encoded bit + * strings range from 9 to 12 bits. + */ +#define BITS_MIN 9 /* start with 9 bits */ +#define BITS_MAX 12 /* max of 12 bit strings */ +/* predefined codes */ +#define CODE_CLEAR 256 /* code to clear string table */ +#define CODE_EOI 257 /* end-of-information code */ +#define CODE_FIRST 258 /* first free code entry */ +#define CODE_MAX MAXCODE(BITS_MAX) +#define HSIZE 9001L /* 91% occupancy */ +#define HSHIFT (13-8) +#ifdef LZW_COMPAT +/* NB: +1024 is for compatibility with old files */ +#define CSIZE (MAXCODE(BITS_MAX)+1024L) +#else +#define CSIZE (MAXCODE(BITS_MAX)+1L) +#endif + +/* + * State block for each open TIFF file using LZW + * compression/decompression. Note that the predictor + * state block must be first in this data structure. + */ +typedef struct { + TIFFPredictorState predict; /* predictor super class */ + + u_short nbits; /* # of bits/code */ + u_short maxcode; /* maximum code for lzw_nbits */ + u_short free_ent; /* next free entry in hash table */ + long nextdata; /* next bits of i/o */ + long nextbits; /* # of valid bits in lzw_nextdata */ +} LZWBaseState; + +#define lzw_nbits base.nbits +#define lzw_maxcode base.maxcode +#define lzw_free_ent base.free_ent +#define lzw_nextdata base.nextdata +#define lzw_nextbits base.nextbits + +/* + * Decoding-specific state. + */ +typedef struct code_ent { + struct code_ent *next; + u_short length; /* string len, including this token */ + u_char value; /* data value */ + u_char firstchar; /* first token of string */ +} code_t; + +typedef int (*decodeFunc)(TIFF*, tidata_t, tsize_t, tsample_t); + +typedef struct { + LZWBaseState base; + long dec_nbitsmask; /* lzw_nbits 1 bits, right adjusted */ + long dec_restart; /* restart count */ +#ifdef LZW_CHECKEOS + long dec_bitsleft; /* available bits in raw data */ +#endif + decodeFunc dec_decode; /* regular or backwards compatible */ + code_t* dec_codep; /* current recognized code */ + code_t* dec_oldcodep; /* previously recognized code */ + code_t* dec_free_entp; /* next free entry */ + code_t* dec_maxcodep; /* max available entry */ + code_t* dec_codetab; /* kept separate for small machines */ +} LZWDecodeState; + +/* + * Encoding-specific state. + */ +typedef uint16 hcode_t; /* codes fit in 16 bits */ +typedef struct { + long hash; + hcode_t code; +} hash_t; + +typedef struct { + LZWBaseState base; + int enc_oldcode; /* last code encountered */ + long enc_checkpoint; /* point at which to clear table */ +#define CHECK_GAP 10000 /* enc_ratio check interval */ + long enc_ratio; /* current compression ratio */ + long enc_incount; /* (input) data bytes encoded */ + long enc_outcount; /* encoded (output) bytes */ + tidata_t enc_rawlimit; /* bound on tif_rawdata buffer */ + hash_t* enc_hashtab; /* kept separate for small machines */ +} LZWEncodeState; + +#define LZWState(tif) ((LZWBaseState*) (tif)->tif_data) +#define DecoderState(tif) ((LZWDecodeState*) LZWState(tif)) +#define EncoderState(tif) ((LZWEncodeState*) LZWState(tif)) + +static int LZWDecode(TIFF*, tidata_t, tsize_t, tsample_t); +#ifdef LZW_COMPAT +static int LZWDecodeCompat(TIFF*, tidata_t, tsize_t, tsample_t); +#endif +static void cl_hash(LZWEncodeState*); + +/* + * LZW Decoder. + */ + +#ifdef LZW_CHECKEOS +/* + * This check shouldn't be necessary because each + * strip is suppose to be terminated with CODE_EOI. + */ +#define NextCode(_tif, _sp, _bp, _code, _get) { \ + if ((_sp)->dec_bitsleft < nbits) { \ + TIFFWarning(_tif->tif_name, \ + "LZWDecode: Strip %d not terminated with EOI code", \ + _tif->tif_curstrip); \ + _code = CODE_EOI; \ + } else { \ + _get(_sp,_bp,_code); \ + (_sp)->dec_bitsleft -= nbits; \ + } \ +} +#else +#define NextCode(tif, sp, bp, code, get) get(sp, bp, code) +#endif + +static int +LZWSetupDecode(TIFF* tif) +{ + LZWDecodeState* sp = DecoderState(tif); + static const char module[] = " LZWSetupDecode"; + int code; + + assert(sp != NULL); + if (sp->dec_codetab == NULL) { + sp->dec_codetab = (code_t*)_TIFFmalloc(CSIZE*sizeof (code_t)); + if (sp->dec_codetab == NULL) { + TIFFError(module, "No space for LZW code table"); + return (0); + } + /* + * Pre-load the table. + */ + for (code = 255; code >= 0; code--) { + sp->dec_codetab[code].value = code; + sp->dec_codetab[code].firstchar = code; + sp->dec_codetab[code].length = 1; + sp->dec_codetab[code].next = NULL; + } + } + return (1); +} + +/* + * Setup state for decoding a strip. + */ +static int +LZWPreDecode(TIFF* tif, tsample_t s) +{ + LZWDecodeState *sp = DecoderState(tif); + + (void) s; + assert(sp != NULL); + /* + * Check for old bit-reversed codes. + */ + if (tif->tif_rawdata[0] == 0 && (tif->tif_rawdata[1] & 0x1)) { +#ifdef LZW_COMPAT + if (!sp->dec_decode) { + TIFFWarning(tif->tif_name, + "Old-style LZW codes, convert file"); + /* + * Override default decoding methods with + * ones that deal with the old coding. + * Otherwise the predictor versions set + * above will call the compatibility routines + * through the dec_decode method. + */ + tif->tif_decoderow = LZWDecodeCompat; + tif->tif_decodestrip = LZWDecodeCompat; + tif->tif_decodetile = LZWDecodeCompat; + /* + * If doing horizontal differencing, must + * re-setup the predictor logic since we + * switched the basic decoder methods... + */ + (*tif->tif_setupdecode)(tif); + sp->dec_decode = LZWDecodeCompat; + } + sp->lzw_maxcode = MAXCODE(BITS_MIN); +#else /* !LZW_COMPAT */ + if (!sp->dec_decode) { + TIFFError(tif->tif_name, + "Old-style LZW codes not supported"); + sp->dec_decode = LZWDecode; + } + return (0); +#endif/* !LZW_COMPAT */ + } else { + sp->lzw_maxcode = MAXCODE(BITS_MIN)-1; + sp->dec_decode = LZWDecode; + } + sp->lzw_nbits = BITS_MIN; + sp->lzw_nextbits = 0; + sp->lzw_nextdata = 0; + + sp->dec_restart = 0; + sp->dec_nbitsmask = MAXCODE(BITS_MIN); +#ifdef LZW_CHECKEOS + sp->dec_bitsleft = tif->tif_rawcc << 3; +#endif + sp->dec_free_entp = sp->dec_codetab + CODE_FIRST; + /* + * Zero entries that are not yet filled in. We do + * this to guard against bogus input data that causes + * us to index into undefined entries. If you can + * come up with a way to safely bounds-check input codes + * while decoding then you can remove this operation. + */ + _TIFFmemset(sp->dec_free_entp, 0, (CSIZE-CODE_FIRST)*sizeof (code_t)); + sp->dec_oldcodep = &sp->dec_codetab[-1]; + sp->dec_maxcodep = &sp->dec_codetab[sp->dec_nbitsmask-1]; + return (1); +} + +/* + * Decode a "hunk of data". + */ +#define GetNextCode(sp, bp, code) { \ + nextdata = (nextdata<<8) | *(bp)++; \ + nextbits += 8; \ + if (nextbits < nbits) { \ + nextdata = (nextdata<<8) | *(bp)++; \ + nextbits += 8; \ + } \ + code = (hcode_t)((nextdata >> (nextbits-nbits)) & nbitsmask); \ + nextbits -= nbits; \ +} + +static void +codeLoop(TIFF* tif) +{ + TIFFError(tif->tif_name, + "LZWDecode: Bogus encoding, loop in the code table; scanline %d", + tif->tif_row); +} + +static int +LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) +{ + LZWDecodeState *sp = DecoderState(tif); + char *op = (char*) op0; + long occ = (long) occ0; + char *tp; + u_char *bp; + hcode_t code; + int len; + long nbits, nextbits, nextdata, nbitsmask; + code_t *codep, *free_entp, *maxcodep, *oldcodep; + + (void) s; + assert(sp != NULL); + /* + * Restart interrupted output operation. + */ + if (sp->dec_restart) { + long residue; + + codep = sp->dec_codep; + residue = codep->length - sp->dec_restart; + if (residue > occ) { + /* + * Residue from previous decode is sufficient + * to satisfy decode request. Skip to the + * start of the decoded string, place decoded + * values in the output buffer, and return. + */ + sp->dec_restart += occ; + do { + codep = codep->next; + } while (--residue > occ && codep); + if (codep) { + tp = op + occ; + do { + *--tp = codep->value; + codep = codep->next; + } while (--occ && codep); + } + return (1); + } + /* + * Residue satisfies only part of the decode request. + */ + op += residue, occ -= residue; + tp = op; + do { + int t; + --tp; + t = codep->value; + codep = codep->next; + *tp = t; + } while (--residue && codep); + sp->dec_restart = 0; + } + + bp = (u_char *)tif->tif_rawcp; + nbits = sp->lzw_nbits; + nextdata = sp->lzw_nextdata; + nextbits = sp->lzw_nextbits; + nbitsmask = sp->dec_nbitsmask; + oldcodep = sp->dec_oldcodep; + free_entp = sp->dec_free_entp; + maxcodep = sp->dec_maxcodep; + + while (occ > 0) { + NextCode(tif, sp, bp, code, GetNextCode); + if (code == CODE_EOI) + break; + if (code == CODE_CLEAR) { + free_entp = sp->dec_codetab + CODE_FIRST; + nbits = BITS_MIN; + nbitsmask = MAXCODE(BITS_MIN); + maxcodep = sp->dec_codetab + nbitsmask-1; + NextCode(tif, sp, bp, code, GetNextCode); + if (code == CODE_EOI) + break; + *op++ = code, occ--; + oldcodep = sp->dec_codetab + code; + continue; + } + codep = sp->dec_codetab + code; + + /* + * Add the new entry to the code table. + */ + assert(&sp->dec_codetab[0] <= free_entp && free_entp < &sp->dec_codetab[CSIZE]); + free_entp->next = oldcodep; + free_entp->firstchar = free_entp->next->firstchar; + free_entp->length = free_entp->next->length+1; + free_entp->value = (codep < free_entp) ? + codep->firstchar : free_entp->firstchar; + if (++free_entp > maxcodep) { + if (++nbits > BITS_MAX) /* should not happen */ + nbits = BITS_MAX; + nbitsmask = MAXCODE(nbits); + maxcodep = sp->dec_codetab + nbitsmask-1; + } + oldcodep = codep; + if (code >= 256) { + /* + * Code maps to a string, copy string + * value to output (written in reverse). + */ + if (codep->length > occ) { + /* + * String is too long for decode buffer, + * locate portion that will fit, copy to + * the decode buffer, and setup restart + * logic for the next decoding call. + */ + sp->dec_codep = codep; + do { + codep = codep->next; + } while (codep && codep->length > occ); + if (codep) { + sp->dec_restart = occ; + tp = op + occ; + do { + *--tp = codep->value; + codep = codep->next; + } while (--occ && codep); + if (codep) + codeLoop(tif); + } + break; + } + len = codep->length; + tp = op + len; + do { + int t; + --tp; + t = codep->value; + codep = codep->next; + *tp = t; + } while (codep && tp > op); + if (codep) { + codeLoop(tif); + break; + } + op += len, occ -= len; + } else + *op++ = code, occ--; + } + + tif->tif_rawcp = (tidata_t) bp; + sp->lzw_nbits = (u_short) nbits; + sp->lzw_nextdata = nextdata; + sp->lzw_nextbits = nextbits; + sp->dec_nbitsmask = nbitsmask; + sp->dec_oldcodep = oldcodep; + sp->dec_free_entp = free_entp; + sp->dec_maxcodep = maxcodep; + + if (occ > 0) { + TIFFError(tif->tif_name, + "LZWDecode: Not enough data at scanline %d (short %d bytes)", + tif->tif_row, occ); + return (0); + } + return (1); +} + +#ifdef LZW_COMPAT +/* + * Decode a "hunk of data" for old images. + */ +#define GetNextCodeCompat(sp, bp, code) { \ + nextdata |= (u_long) *(bp)++ << nextbits; \ + nextbits += 8; \ + if (nextbits < nbits) { \ + nextdata |= (u_long) *(bp)++ << nextbits; \ + nextbits += 8; \ + } \ + code = (hcode_t)(nextdata & nbitsmask); \ + nextdata >>= nbits; \ + nextbits -= nbits; \ +} + +static int +LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) +{ + LZWDecodeState *sp = DecoderState(tif); + char *op = (char*) op0; + long occ = (long) occ0; + char *tp; + u_char *bp; + int code, nbits; + long nextbits, nextdata, nbitsmask; + code_t *codep, *free_entp, *maxcodep, *oldcodep; + + (void) s; + assert(sp != NULL); + /* + * Restart interrupted output operation. + */ + if (sp->dec_restart) { + long residue; + + codep = sp->dec_codep; + residue = codep->length - sp->dec_restart; + if (residue > occ) { + /* + * Residue from previous decode is sufficient + * to satisfy decode request. Skip to the + * start of the decoded string, place decoded + * values in the output buffer, and return. + */ + sp->dec_restart += occ; + do { + codep = codep->next; + } while (--residue > occ); + tp = op + occ; + do { + *--tp = codep->value; + codep = codep->next; + } while (--occ); + return (1); + } + /* + * Residue satisfies only part of the decode request. + */ + op += residue, occ -= residue; + tp = op; + do { + *--tp = codep->value; + codep = codep->next; + } while (--residue); + sp->dec_restart = 0; + } + + bp = (u_char *)tif->tif_rawcp; + nbits = sp->lzw_nbits; + nextdata = sp->lzw_nextdata; + nextbits = sp->lzw_nextbits; + nbitsmask = sp->dec_nbitsmask; + oldcodep = sp->dec_oldcodep; + free_entp = sp->dec_free_entp; + maxcodep = sp->dec_maxcodep; + + while (occ > 0) { + NextCode(tif, sp, bp, code, GetNextCodeCompat); + if (code == CODE_EOI) + break; + if (code == CODE_CLEAR) { + free_entp = sp->dec_codetab + CODE_FIRST; + nbits = BITS_MIN; + nbitsmask = MAXCODE(BITS_MIN); + maxcodep = sp->dec_codetab + nbitsmask; + NextCode(tif, sp, bp, code, GetNextCodeCompat); + if (code == CODE_EOI) + break; + *op++ = code, occ--; + oldcodep = sp->dec_codetab + code; + continue; + } + codep = sp->dec_codetab + code; + + /* + * Add the new entry to the code table. + */ + assert(&sp->dec_codetab[0] <= free_entp && free_entp < &sp->dec_codetab[CSIZE]); + free_entp->next = oldcodep; + free_entp->firstchar = free_entp->next->firstchar; + free_entp->length = free_entp->next->length+1; + free_entp->value = (codep < free_entp) ? + codep->firstchar : free_entp->firstchar; + if (++free_entp > maxcodep) { + if (++nbits > BITS_MAX) /* should not happen */ + nbits = BITS_MAX; + nbitsmask = MAXCODE(nbits); + maxcodep = sp->dec_codetab + nbitsmask; + } + oldcodep = codep; + if (code >= 256) { + /* + * Code maps to a string, copy string + * value to output (written in reverse). + */ + if (codep->length > occ) { + /* + * String is too long for decode buffer, + * locate portion that will fit, copy to + * the decode buffer, and setup restart + * logic for the next decoding call. + */ + sp->dec_codep = codep; + do { + codep = codep->next; + } while (codep->length > occ); + sp->dec_restart = occ; + tp = op + occ; + do { + *--tp = codep->value; + codep = codep->next; + } while (--occ); + break; + } + op += codep->length, occ -= codep->length; + tp = op; + do { + *--tp = codep->value; + } while( (codep = codep->next) != NULL); + } else + *op++ = code, occ--; + } + + tif->tif_rawcp = (tidata_t) bp; + sp->lzw_nbits = nbits; + sp->lzw_nextdata = nextdata; + sp->lzw_nextbits = nextbits; + sp->dec_nbitsmask = nbitsmask; + sp->dec_oldcodep = oldcodep; + sp->dec_free_entp = free_entp; + sp->dec_maxcodep = maxcodep; + + if (occ > 0) { + TIFFError(tif->tif_name, + "LZWDecodeCompat: Not enough data at scanline %d (short %d bytes)", + tif->tif_row, occ); + return (0); + } + return (1); +} +#endif /* LZW_COMPAT */ + +/* + * LZW Encoding. + */ + +static int +LZWSetupEncode(TIFF* tif) +{ + LZWEncodeState* sp = EncoderState(tif); + static const char module[] = "LZWSetupEncode"; + + assert(sp != NULL); + sp->enc_hashtab = (hash_t*) _TIFFmalloc(HSIZE*sizeof (hash_t)); + if (sp->enc_hashtab == NULL) { + TIFFError(module, "No space for LZW hash table"); + return (0); + } + return (1); +} + +/* + * Reset encoding state at the start of a strip. + */ +static int +LZWPreEncode(TIFF* tif, tsample_t s) +{ + LZWEncodeState *sp = EncoderState(tif); + + (void) s; + assert(sp != NULL); + sp->lzw_nbits = BITS_MIN; + sp->lzw_maxcode = MAXCODE(BITS_MIN); + sp->lzw_free_ent = CODE_FIRST; + sp->lzw_nextbits = 0; + sp->lzw_nextdata = 0; + sp->enc_checkpoint = CHECK_GAP; + sp->enc_ratio = 0; + sp->enc_incount = 0; + sp->enc_outcount = 0; + /* + * The 4 here insures there is space for 2 max-sized + * codes in LZWEncode and LZWPostDecode. + */ + sp->enc_rawlimit = tif->tif_rawdata + tif->tif_rawdatasize-1 - 4; + cl_hash(sp); /* clear hash table */ + sp->enc_oldcode = (hcode_t) -1; /* generates CODE_CLEAR in LZWEncode */ + return (1); +} + +#define CALCRATIO(sp, rat) { \ + if (incount > 0x007fffff) { /* NB: shift will overflow */\ + rat = outcount >> 8; \ + rat = (rat == 0 ? 0x7fffffff : incount/rat); \ + } else \ + rat = (incount<<8) / outcount; \ +} +#define PutNextCode(op, c) { \ + nextdata = (nextdata << nbits) | c; \ + nextbits += nbits; \ + *op++ = (u_char)(nextdata >> (nextbits-8)); \ + nextbits -= 8; \ + if (nextbits >= 8) { \ + *op++ = (u_char)(nextdata >> (nextbits-8)); \ + nextbits -= 8; \ + } \ + outcount += nbits; \ +} + +/* + * Encode a chunk of pixels. + * + * Uses an open addressing double hashing (no chaining) on the + * prefix code/next character combination. We do a variant of + * Knuth's algorithm D (vol. 3, sec. 6.4) along with G. Knott's + * relatively-prime secondary probe. Here, the modular division + * first probe is gives way to a faster exclusive-or manipulation. + * Also do block compression with an adaptive reset, whereby the + * code table is cleared when the compression ratio decreases, + * but after the table fills. The variable-length output codes + * are re-sized at this point, and a CODE_CLEAR is generated + * for the decoder. + */ +static int +LZWEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + register LZWEncodeState *sp = EncoderState(tif); + register long fcode; + register hash_t *hp; + register int h, c; + hcode_t ent; + long disp; + long incount, outcount, checkpoint; + long nextdata, nextbits; + int free_ent, maxcode, nbits; + tidata_t op, limit; + + (void) s; + if (sp == NULL) + return (0); + /* + * Load local state. + */ + incount = sp->enc_incount; + outcount = sp->enc_outcount; + checkpoint = sp->enc_checkpoint; + nextdata = sp->lzw_nextdata; + nextbits = sp->lzw_nextbits; + free_ent = sp->lzw_free_ent; + maxcode = sp->lzw_maxcode; + nbits = sp->lzw_nbits; + op = tif->tif_rawcp; + limit = sp->enc_rawlimit; + ent = sp->enc_oldcode; + + if (ent == (hcode_t) -1 && cc > 0) { + /* + * NB: This is safe because it can only happen + * at the start of a strip where we know there + * is space in the data buffer. + */ + PutNextCode(op, CODE_CLEAR); + ent = *bp++; cc--; incount++; + } + while (cc > 0) { + c = *bp++; cc--; incount++; + fcode = ((long)c << BITS_MAX) + ent; + h = (c << HSHIFT) ^ ent; /* xor hashing */ +#ifdef _WINDOWS + /* + * Check hash index for an overflow. + */ + if (h >= HSIZE) + h -= HSIZE; +#endif + hp = &sp->enc_hashtab[h]; + if (hp->hash == fcode) { + ent = hp->code; + continue; + } + if (hp->hash >= 0) { + /* + * Primary hash failed, check secondary hash. + */ + disp = HSIZE - h; + if (h == 0) + disp = 1; + do { + /* + * Avoid pointer arithmetic 'cuz of + * wraparound problems with segments. + */ + if ((h -= disp) < 0) + h += HSIZE; + hp = &sp->enc_hashtab[h]; + if (hp->hash == fcode) { + ent = hp->code; + goto hit; + } + } while (hp->hash >= 0); + } + /* + * New entry, emit code and add to table. + */ + /* + * Verify there is space in the buffer for the code + * and any potential Clear code that might be emitted + * below. The value of limit is setup so that there + * are at least 4 bytes free--room for 2 codes. + */ + if (op > limit) { + tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata); + TIFFFlushData1(tif); + op = tif->tif_rawdata; + } + PutNextCode(op, ent); + ent = c; + hp->code = free_ent++; + hp->hash = fcode; + if (free_ent == CODE_MAX-1) { + /* table is full, emit clear code and reset */ + cl_hash(sp); + sp->enc_ratio = 0; + incount = 0; + outcount = 0; + free_ent = CODE_FIRST; + PutNextCode(op, CODE_CLEAR); + nbits = BITS_MIN; + maxcode = MAXCODE(BITS_MIN); + } else { + /* + * If the next entry is going to be too big for + * the code size, then increase it, if possible. + */ + if (free_ent > maxcode) { + nbits++; + assert(nbits <= BITS_MAX); + maxcode = (int) MAXCODE(nbits); + } else if (incount >= checkpoint) { + long rat; + /* + * Check compression ratio and, if things seem + * to be slipping, clear the hash table and + * reset state. The compression ratio is a + * 24+8-bit fractional number. + */ + checkpoint = incount+CHECK_GAP; + CALCRATIO(sp, rat); + if (rat <= sp->enc_ratio) { + cl_hash(sp); + sp->enc_ratio = 0; + incount = 0; + outcount = 0; + free_ent = CODE_FIRST; + PutNextCode(op, CODE_CLEAR); + nbits = BITS_MIN; + maxcode = MAXCODE(BITS_MIN); + } else + sp->enc_ratio = rat; + } + } + hit: + ; + } + + /* + * Restore global state. + */ + sp->enc_incount = incount; + sp->enc_outcount = outcount; + sp->enc_checkpoint = checkpoint; + sp->enc_oldcode = ent; + sp->lzw_nextdata = nextdata; + sp->lzw_nextbits = nextbits; + sp->lzw_free_ent = free_ent; + sp->lzw_maxcode = maxcode; + sp->lzw_nbits = nbits; + tif->tif_rawcp = op; + return (1); +} + +/* + * Finish off an encoded strip by flushing the last + * string and tacking on an End Of Information code. + */ +static int +LZWPostEncode(TIFF* tif) +{ + register LZWEncodeState *sp = EncoderState(tif); + tidata_t op = tif->tif_rawcp; + long nextbits = sp->lzw_nextbits; + long nextdata = sp->lzw_nextdata; + long outcount = sp->enc_outcount; + int nbits = sp->lzw_nbits; + + if (op > sp->enc_rawlimit) { + tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata); + TIFFFlushData1(tif); + op = tif->tif_rawdata; + } + if (sp->enc_oldcode != (hcode_t) -1) { + PutNextCode(op, sp->enc_oldcode); + sp->enc_oldcode = (hcode_t) -1; + } + PutNextCode(op, CODE_EOI); + if (nextbits > 0) + *op++ = (u_char)(nextdata << (8-nextbits)); + tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata); + return (1); +} + +/* + * Reset encoding hash table. + */ +static void +cl_hash(LZWEncodeState* sp) +{ + register hash_t *hp = &sp->enc_hashtab[HSIZE-1]; + register long i = HSIZE-8; + + do { + i -= 8; + hp[-7].hash = -1; + hp[-6].hash = -1; + hp[-5].hash = -1; + hp[-4].hash = -1; + hp[-3].hash = -1; + hp[-2].hash = -1; + hp[-1].hash = -1; + hp[ 0].hash = -1; + hp -= 8; + } while (i >= 0); + for (i += 8; i > 0; i--, hp--) + hp->hash = -1; +} + +static void +LZWCleanup(TIFF* tif) +{ + if (tif->tif_data) { + if (tif->tif_mode == O_RDONLY) { + if (DecoderState(tif)->dec_codetab) + _TIFFfree(DecoderState(tif)->dec_codetab); + } else { + if (EncoderState(tif)->enc_hashtab) + _TIFFfree(EncoderState(tif)->enc_hashtab); + } + _TIFFfree(tif->tif_data); + tif->tif_data = NULL; + } +} + +int +TIFFInitLZW(TIFF* tif, int scheme) +{ + assert(scheme == COMPRESSION_LZW); + /* + * Allocate state block so tag methods have storage to record values. + */ + if (tif->tif_mode == O_RDONLY) { + tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (LZWDecodeState)); + if (tif->tif_data == NULL) + goto bad; + DecoderState(tif)->dec_codetab = NULL; + DecoderState(tif)->dec_decode = NULL; + } else { + tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (LZWEncodeState)); + if (tif->tif_data == NULL) + goto bad; + EncoderState(tif)->enc_hashtab = NULL; + } + /* + * Install codec methods. + */ + tif->tif_setupdecode = LZWSetupDecode; + tif->tif_predecode = LZWPreDecode; + tif->tif_decoderow = LZWDecode; + tif->tif_decodestrip = LZWDecode; + tif->tif_decodetile = LZWDecode; + tif->tif_setupencode = LZWSetupEncode; + tif->tif_preencode = LZWPreEncode; + tif->tif_postencode = LZWPostEncode; + tif->tif_encoderow = LZWEncode; + tif->tif_encodestrip = LZWEncode; + tif->tif_encodetile = LZWEncode; + tif->tif_cleanup = LZWCleanup; + /* + * Setup predictor setup. + */ + (void) TIFFPredictorInit(tif); + return (1); +bad: + TIFFError("TIFFInitLZW", "No space for LZW state block"); + return (0); +} + +/* + * Copyright (c) 1985, 1986 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * James A. Woods, derived from original work by Spencer Thomas + * and Joseph Orost. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#endif /* LZW_SUPPORT */ diff --git a/libtiff/tif_msdos.c b/libtiff/tif_msdos.c new file mode 100755 index 0000000..6135b77 --- /dev/null +++ b/libtiff/tif_msdos.c @@ -0,0 +1,179 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_msdos.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library MSDOS-specific Routines. + */ +#if defined(__WATCOMC__) || defined(__BORLANDC__) || defined(_MSC_VER) +#include /* for open, close, etc. function prototypes */ +#include +#endif +#include "tiffiop.h" + +static tsize_t +_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return (read((int) fd, buf, size)); +} + +static tsize_t +_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return (write((int) fd, buf, size)); +} + +static toff_t +_tiffSeekProc(thandle_t fd, toff_t off, int whence) +{ + return (lseek((int) fd, (off_t) off, whence)); +} + +static int +_tiffCloseProc(thandle_t fd) +{ + return (close((int) fd)); +} + +#include + +static toff_t +_tiffSizeProc(thandle_t fd) +{ + struct stat sb; + return (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size); +} + +static int +_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + return (0); +} + +static void +_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ +} + +/* + * Open a TIFF file descriptor for read/writing. + */ +TIFF* +TIFFFdOpen(int fd, const char* name, const char* mode) +{ + TIFF* tif; + + tif = TIFFClientOpen(name, mode, + (void*) fd, + _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc, + _tiffSizeProc, _tiffMapProc, _tiffUnmapProc); + if (tif) + tif->tif_fd = fd; + return (tif); +} + +/* + * Open a TIFF file for read/writing. + */ +TIFF* +TIFFOpen(const char* name, const char* mode) +{ + static const char module[] = "TIFFOpen"; + int m, fd; + + m = _TIFFgetMode(mode, module); + if (m == -1) + return ((TIFF*)0); + fd = open(name, m|O_BINARY, 0666); + if (fd < 0) { + TIFFError(module, "%s: Cannot open", name); + return ((TIFF*)0); + } + return (TIFFFdOpen(fd, name, mode)); +} + +#ifdef __GNUC__ +extern char* malloc(); +extern char* realloc(); +#else +#include +#endif + +tdata_t +_TIFFmalloc(tsize_t s) +{ + return (malloc((size_t) s)); +} + +void +_TIFFfree(tdata_t p) +{ + free(p); +} + +tdata_t +_TIFFrealloc(tdata_t p, tsize_t s) +{ + return (realloc(p, (size_t) s)); +} + +void +_TIFFmemset(tdata_t p, int v, tsize_t c) +{ + memset(p, v, (size_t) c); +} + +void +_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c) +{ + memcpy(d, s, (size_t) c); +} + +int +_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c) +{ + return (memcmp(p1, p2, (size_t) c)); +} + +static void +msdosWarningHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + fprintf(stderr, "Warning, "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFwarningHandler = msdosWarningHandler; + +static void +msdosErrorHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFerrorHandler = msdosErrorHandler; diff --git a/libtiff/tif_next.c b/libtiff/tif_next.c new file mode 100755 index 0000000..1063c73 --- /dev/null +++ b/libtiff/tif_next.c @@ -0,0 +1,142 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_next.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include "tiffiop.h" +#ifdef NEXT_SUPPORT +/* + * TIFF Library. + * + * NeXT 2-bit Grey Scale Compression Algorithm Support + */ + +#define SETPIXEL(op, v) { \ + switch (npixels++ & 3) { \ + case 0: op[0] = (v) << 6; break; \ + case 1: op[0] |= (v) << 4; break; \ + case 2: op[0] |= (v) << 2; break; \ + case 3: *op++ |= (v); break; \ + } \ +} + +#define LITERALROW 0x00 +#define LITERALSPAN 0x40 +#define WHITE ((1<<2)-1) + +static int +NeXTDecode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +{ + register u_char *bp, *op; + register tsize_t cc; + register int n; + tidata_t row; + tsize_t scanline; + + (void) s; + /* + * Each scanline is assumed to start off as all + * white (we assume a PhotometricInterpretation + * of ``min-is-black''). + */ + for (op = buf, cc = occ; cc-- > 0;) + *op++ = 0xff; + + bp = (u_char *)tif->tif_rawcp; + cc = tif->tif_rawcc; + scanline = tif->tif_scanlinesize; + for (row = buf; (long)occ > 0; occ -= scanline, row += scanline) { + n = *bp++, cc--; + switch (n) { + case LITERALROW: + /* + * The entire scanline is given as literal values. + */ + if (cc < scanline) + goto bad; + _TIFFmemcpy(row, bp, scanline); + bp += scanline; + cc -= scanline; + break; + case LITERALSPAN: { + int off; + /* + * The scanline has a literal span + * that begins at some offset. + */ + off = (bp[0] * 256) + bp[1]; + n = (bp[2] * 256) + bp[3]; + if (cc < 4+n) + goto bad; + _TIFFmemcpy(row+off, bp+4, n); + bp += 4+n; + cc -= 4+n; + break; + } + default: { + register int npixels = 0, grey; + u_long imagewidth = tif->tif_dir.td_imagewidth; + + /* + * The scanline is composed of a sequence + * of constant color ``runs''. We shift + * into ``run mode'' and interpret bytes + * as codes of the form + * until we've filled the scanline. + */ + op = row; + for (;;) { + grey = (n>>6) & 0x3; + n &= 0x3f; + while (n-- > 0) + SETPIXEL(op, grey); + if (npixels >= (int) imagewidth) + break; + if (cc == 0) + goto bad; + n = *bp++, cc--; + } + break; + } + } + } + tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcc = cc; + return (1); +bad: + TIFFError(tif->tif_name, "NeXTDecode: Not enough data for scanline %ld", + (long) tif->tif_row); + return (0); +} + +int +TIFFInitNeXT(TIFF* tif, int scheme) +{ + (void) scheme; + tif->tif_decoderow = NeXTDecode; + tif->tif_decodestrip = NeXTDecode; + tif->tif_decodetile = NeXTDecode; + return (1); +} +#endif /* NEXT_SUPPORT */ diff --git a/libtiff/tif_open.c b/libtiff/tif_open.c new file mode 100755 index 0000000..9ebd69a --- /dev/null +++ b/libtiff/tif_open.c @@ -0,0 +1,477 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_open.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + */ +#include "tiffiop.h" + +void _TIFFSetDefaultCompressionState(TIFF* tif); + +static const long typemask[13] = { + 0L, /* TIFF_NOTYPE */ + 0x000000ffL, /* TIFF_BYTE */ + 0xffffffffL, /* TIFF_ASCII */ + 0x0000ffffL, /* TIFF_SHORT */ + 0xffffffffL, /* TIFF_LONG */ + 0xffffffffL, /* TIFF_RATIONAL */ + 0x000000ffL, /* TIFF_SBYTE */ + 0x000000ffL, /* TIFF_UNDEFINED */ + 0x0000ffffL, /* TIFF_SSHORT */ + 0xffffffffL, /* TIFF_SLONG */ + 0xffffffffL, /* TIFF_SRATIONAL */ + 0xffffffffL, /* TIFF_FLOAT */ + 0xffffffffL, /* TIFF_DOUBLE */ +}; +static const int bigTypeshift[13] = { + 0, /* TIFF_NOTYPE */ + 24, /* TIFF_BYTE */ + 0, /* TIFF_ASCII */ + 16, /* TIFF_SHORT */ + 0, /* TIFF_LONG */ + 0, /* TIFF_RATIONAL */ + 24, /* TIFF_SBYTE */ + 24, /* TIFF_UNDEFINED */ + 16, /* TIFF_SSHORT */ + 0, /* TIFF_SLONG */ + 0, /* TIFF_SRATIONAL */ + 0, /* TIFF_FLOAT */ + 0, /* TIFF_DOUBLE */ +}; +static const int litTypeshift[13] = { + 0, /* TIFF_NOTYPE */ + 0, /* TIFF_BYTE */ + 0, /* TIFF_ASCII */ + 0, /* TIFF_SHORT */ + 0, /* TIFF_LONG */ + 0, /* TIFF_RATIONAL */ + 0, /* TIFF_SBYTE */ + 0, /* TIFF_UNDEFINED */ + 0, /* TIFF_SSHORT */ + 0, /* TIFF_SLONG */ + 0, /* TIFF_SRATIONAL */ + 0, /* TIFF_FLOAT */ + 0, /* TIFF_DOUBLE */ +}; + +/* + * Initialize the shift & mask tables, and the + * byte swapping state according to the file + * contents and the machine architecture. + */ +static void +TIFFInitOrder(TIFF* tif, int magic, int bigendian) +{ + tif->tif_typemask = typemask; + if (magic == TIFF_BIGENDIAN) { + tif->tif_typeshift = bigTypeshift; + if (!bigendian) + tif->tif_flags |= TIFF_SWAB; + } else { + tif->tif_typeshift = litTypeshift; + if (bigendian) + tif->tif_flags |= TIFF_SWAB; + } +} + +int +_TIFFgetMode(const char* mode, const char* module) +{ + int m = -1; + + switch (mode[0]) { + case 'r': + m = O_RDONLY; + if (mode[1] == '+') + m = O_RDWR; + break; + case 'w': + case 'a': + m = O_RDWR|O_CREAT; + if (mode[0] == 'w') + m |= O_TRUNC; + break; + default: + TIFFError(module, "\"%s\": Bad mode", mode); + break; + } + return (m); +} + +TIFF* +TIFFClientOpen( + const char* name, const char* mode, + thandle_t clientdata, + TIFFReadWriteProc readproc, + TIFFReadWriteProc writeproc, + TIFFSeekProc seekproc, + TIFFCloseProc closeproc, + TIFFSizeProc sizeproc, + TIFFMapFileProc mapproc, + TIFFUnmapFileProc unmapproc +) +{ + static const char module[] = "TIFFClientOpen"; + TIFF *tif; + int m, bigendian; + const char* cp; + + m = _TIFFgetMode(mode, module); + if (m == -1) + goto bad2; + tif = (TIFF *)_TIFFmalloc(sizeof (TIFF) + strlen(name) + 1); + if (tif == NULL) { + TIFFError(module, "%s: Out of memory (TIFF structure)", name); + goto bad2; + } + _TIFFmemset(tif, 0, sizeof (*tif)); + tif->tif_name = (char *)tif + sizeof (TIFF); + strcpy(tif->tif_name, name); + tif->tif_mode = m &~ (O_CREAT|O_TRUNC); + tif->tif_curdir = (tdir_t) -1; /* non-existent directory */ + tif->tif_curoff = 0; + tif->tif_curstrip = (tstrip_t) -1; /* invalid strip */ + tif->tif_row = (uint32) -1; /* read/write pre-increment */ + tif->tif_clientdata = clientdata; + tif->tif_readproc = readproc; + tif->tif_writeproc = writeproc; + tif->tif_seekproc = seekproc; + tif->tif_closeproc = closeproc; + tif->tif_sizeproc = sizeproc; + tif->tif_mapproc = mapproc; + tif->tif_unmapproc = unmapproc; + _TIFFSetDefaultCompressionState(tif); /* setup default state */ + /* + * Default is to return data MSB2LSB and enable the + * use of memory-mapped files and strip chopping when + * a file is opened read-only. + */ + tif->tif_flags = FILLORDER_MSB2LSB; + if (m == O_RDONLY) +#ifdef STRIPCHOP_DEFAULT + tif->tif_flags |= TIFF_MAPPED|STRIPCHOP_DEFAULT; +#else + tif->tif_flags |= TIFF_MAPPED; +#endif + + { union { int32 i; char c[4]; } u; u.i = 1; bigendian = u.c[0] == 0; } + /* + * Process library-specific flags in the open mode string. + * The following flags may be used to control intrinsic library + * behaviour that may or may not be desirable (usually for + * compatibility with some application that claims to support + * TIFF but only supports some braindead idea of what the + * vendor thinks TIFF is): + * + * 'l' use little-endian byte order for creating a file + * 'b' use big-endian byte order for creating a file + * 'L' read/write information using LSB2MSB bit order + * 'B' read/write information using MSB2LSB bit order + * 'H' read/write information using host bit order + * 'M' enable use of memory-mapped files when supported + * 'm' disable use of memory-mapped files + * 'C' enable strip chopping support when reading + * 'c' disable strip chopping support + * + * The use of the 'l' and 'b' flags is strongly discouraged. + * These flags are provided solely because numerous vendors, + * typically on the PC, do not correctly support TIFF; they + * only support the Intel little-endian byte order. This + * support is not configured by default because it supports + * the violation of the TIFF spec that says that readers *MUST* + * support both byte orders. It is strongly recommended that + * you not use this feature except to deal with busted apps + * that write invalid TIFF. And even in those cases you should + * bang on the vendors to fix their software. + * + * The 'L', 'B', and 'H' flags are intended for applications + * that can optimize operations on data by using a particular + * bit order. By default the library returns data in MSB2LSB + * bit order for compatibiltiy with older versions of this + * library. Returning data in the bit order of the native cpu + * makes the most sense but also requires applications to check + * the value of the FillOrder tag; something they probabyl do + * not do right now. + * + * The 'M' and 'm' flags are provided because some virtual memory + * systems exhibit poor behaviour when large images are mapped. + * These options permit clients to control the use of memory-mapped + * files on a per-file basis. + * + * The 'C' and 'c' flags are provided because the library support + * for chopping up large strips into multiple smaller strips is not + * application-transparent and as such can cause problems. The 'c' + * option permits applications that only want to look at the tags, + * for example, to get the unadulterated TIFF tag information. + */ + for (cp = mode; *cp; cp++) + switch (*cp) { + case 'b': + if ((m&O_CREAT) && !bigendian) + tif->tif_flags |= TIFF_SWAB; + break; + case 'l': + if ((m&O_CREAT) && bigendian) + tif->tif_flags |= TIFF_SWAB; + break; + case 'B': + tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | + FILLORDER_MSB2LSB; + break; + case 'L': + tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | + FILLORDER_LSB2MSB; + break; + case 'H': + tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | + HOST_FILLORDER; + break; + case 'M': + if (m == O_RDONLY) + tif->tif_flags |= TIFF_MAPPED; + break; + case 'm': + if (m == O_RDONLY) + tif->tif_flags &= ~TIFF_MAPPED; + break; + case 'C': + if (m == O_RDONLY) + tif->tif_flags |= TIFF_STRIPCHOP; + break; + case 'c': + if (m == O_RDONLY) + tif->tif_flags &= ~TIFF_STRIPCHOP; + break; + } + /* + * Read in TIFF header. + */ + if (!ReadOK(tif, &tif->tif_header, sizeof (TIFFHeader))) { + if (tif->tif_mode == O_RDONLY) { + TIFFError(name, "Cannot read TIFF header"); + goto bad; + } + /* + * Setup header and write. + */ + tif->tif_header.tiff_magic = tif->tif_flags & TIFF_SWAB + ? (bigendian ? TIFF_LITTLEENDIAN : TIFF_BIGENDIAN) + : (bigendian ? TIFF_BIGENDIAN : TIFF_LITTLEENDIAN); + tif->tif_header.tiff_version = TIFF_VERSION; + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&tif->tif_header.tiff_version); + tif->tif_header.tiff_diroff = 0; /* filled in later */ + if (!WriteOK(tif, &tif->tif_header, sizeof (TIFFHeader))) { + TIFFError(name, "Error writing TIFF header"); + goto bad; + } + /* + * Setup the byte order handling. + */ + TIFFInitOrder(tif, tif->tif_header.tiff_magic, bigendian); + /* + * Setup default directory. + */ + if (!TIFFDefaultDirectory(tif)) + goto bad; + tif->tif_diroff = 0; + return (tif); + } + /* + * Setup the byte order handling. + */ + if (tif->tif_header.tiff_magic != TIFF_BIGENDIAN && + tif->tif_header.tiff_magic != TIFF_LITTLEENDIAN) { + TIFFError(name, "Not a TIFF file, bad magic number %d (0x%x)", + tif->tif_header.tiff_magic, + tif->tif_header.tiff_magic); + goto bad; + } + TIFFInitOrder(tif, tif->tif_header.tiff_magic, bigendian); + /* + * Swap header if required. + */ + if (tif->tif_flags & TIFF_SWAB) { + TIFFSwabShort(&tif->tif_header.tiff_version); + TIFFSwabLong(&tif->tif_header.tiff_diroff); + } + /* + * Now check version (if needed, it's been byte-swapped). + * Note that this isn't actually a version number, it's a + * magic number that doesn't change (stupid). + */ + if (tif->tif_header.tiff_version != TIFF_VERSION) { + TIFFError(name, + "Not a TIFF file, bad version number %d (0x%x)", + tif->tif_header.tiff_version, + tif->tif_header.tiff_version); + goto bad; + } + tif->tif_flags |= TIFF_MYBUFFER; + tif->tif_rawcp = tif->tif_rawdata = 0; + tif->tif_rawdatasize = 0; + /* + * Setup initial directory. + */ + switch (mode[0]) { + case 'r': + tif->tif_nextdiroff = tif->tif_header.tiff_diroff; + /* + * Try to use a memory-mapped file if the client + * has not explicitly suppressed usage with the + * 'm' flag in the open mode (see above). + */ + if ((tif->tif_flags & TIFF_MAPPED) && + !TIFFMapFileContents(tif, (tdata_t*) &tif->tif_base, &tif->tif_size)) + tif->tif_flags &= ~TIFF_MAPPED; + if (TIFFReadDirectory(tif)) { + tif->tif_rawcc = -1; + tif->tif_flags |= TIFF_BUFFERSETUP; + return (tif); + } + break; + case 'a': + /* + * New directories are automatically append + * to the end of the directory chain when they + * are written out (see TIFFWriteDirectory). + */ + if (!TIFFDefaultDirectory(tif)) + goto bad; + return (tif); + } +bad: + tif->tif_mode = O_RDONLY; /* XXX avoid flush */ + TIFFClose(tif); + return ((TIFF*)0); +bad2: + (void) (*closeproc)(clientdata); + return ((TIFF*)0); +} + +/* + * Query functions to access private data. + */ + +/* + * Return open file's name. + */ +const char * +TIFFFileName(TIFF* tif) +{ + return (tif->tif_name); +} + +/* + * Return open file's I/O descriptor. + */ +int +TIFFFileno(TIFF* tif) +{ + return (tif->tif_fd); +} + +/* + * Return read/write mode. + */ +int +TIFFGetMode(TIFF* tif) +{ + return (tif->tif_mode); +} + +/* + * Return nonzero if file is organized in + * tiles; zero if organized as strips. + */ +int +TIFFIsTiled(TIFF* tif) +{ + return (isTiled(tif)); +} + +/* + * Return current row being read/written. + */ +uint32 +TIFFCurrentRow(TIFF* tif) +{ + return (tif->tif_row); +} + +/* + * Return index of the current directory. + */ +tdir_t +TIFFCurrentDirectory(TIFF* tif) +{ + return (tif->tif_curdir); +} + +/* + * Return current strip. + */ +tstrip_t +TIFFCurrentStrip(TIFF* tif) +{ + return (tif->tif_curstrip); +} + +/* + * Return current tile. + */ +ttile_t +TIFFCurrentTile(TIFF* tif) +{ + return (tif->tif_curtile); +} + +/* + * Return nonzero if the file has byte-swapped data. + */ +int +TIFFIsByteSwapped(TIFF* tif) +{ + return ((tif->tif_flags & TIFF_SWAB) != 0); +} + +/* + * Return nonzero if the data is returned up-sampled. + */ +int +TIFFIsUpSampled(TIFF* tif) +{ + return (isUpSampled(tif)); +} + +/* + * Return nonzero if the data is returned in MSB-to-LSB bit order. + */ +int +TIFFIsMSB2LSB(TIFF* tif) +{ + return (isFillOrder(tif, FILLORDER_MSB2LSB)); +} diff --git a/libtiff/tif_packbits.c b/libtiff/tif_packbits.c new file mode 100755 index 0000000..de21bb0 --- /dev/null +++ b/libtiff/tif_packbits.c @@ -0,0 +1,261 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_packbits.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include "tiffiop.h" +#ifdef PACKBITS_SUPPORT +/* + * TIFF Library. + * + * PackBits Compression Algorithm Support + */ +#include +#include + +static int +PackBitsPreEncode(TIFF* tif, tsample_t s) +{ + (void) s; + /* + * Calculate the scanline/tile-width size in bytes. + */ + if (isTiled(tif)) + tif->tif_data = (tidata_t) TIFFTileRowSize(tif); + else + tif->tif_data = (tidata_t) TIFFScanlineSize(tif); + return (1); +} + +/* + * NB: tidata is the type representing *(tidata_t); + * if tidata_t is made signed then this type must + * be adjusted accordingly. + */ +typedef unsigned char tidata; + +/* + * Encode a run of pixels. + */ +static int +PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +{ + u_char* bp = (u_char*) buf; + tidata_t op, ep, lastliteral; + long n, slop; + int b; + enum { BASE, LITERAL, RUN, LITERAL_RUN } state; + + (void) s; + op = tif->tif_rawcp; + ep = tif->tif_rawdata + tif->tif_rawdatasize; + state = BASE; + lastliteral = 0; + while (cc > 0) { + /* + * Find the longest string of identical bytes. + */ + b = *bp++, cc--, n = 1; + for (; cc > 0 && b == *bp; cc--, bp++) + n++; + again: + if (op + 2 >= ep) { /* insure space for new data */ + /* + * Be careful about writing the last + * literal. Must write up to that point + * and then copy the remainder to the + * front of the buffer. + */ + if (state == LITERAL || state == LITERAL_RUN) { + slop = op - lastliteral; + tif->tif_rawcc += lastliteral - tif->tif_rawcp; + if (!TIFFFlushData1(tif)) + return (-1); + op = tif->tif_rawcp; + while (slop-- > 0) + *op++ = *lastliteral++; + lastliteral = tif->tif_rawcp; + } else { + tif->tif_rawcc += op - tif->tif_rawcp; + if (!TIFFFlushData1(tif)) + return (-1); + op = tif->tif_rawcp; + } + } + switch (state) { + case BASE: /* initial state, set run/literal */ + if (n > 1) { + state = RUN; + if (n > 128) { + *op++ = (tidata) -127; + *op++ = b; + n -= 128; + goto again; + } + *op++ = (tidataval_t)(-(n-1)); + *op++ = b; + } else { + lastliteral = op; + *op++ = 0; + *op++ = b; + state = LITERAL; + } + break; + case LITERAL: /* last object was literal string */ + if (n > 1) { + state = LITERAL_RUN; + if (n > 128) { + *op++ = (tidata) -127; + *op++ = b; + n -= 128; + goto again; + } + *op++ = (tidataval_t)(-(n-1)); /* encode run */ + *op++ = b; + } else { /* extend literal */ + if (++(*lastliteral) == 127) + state = BASE; + *op++ = b; + } + break; + case RUN: /* last object was run */ + if (n > 1) { + if (n > 128) { + *op++ = (tidata) -127; + *op++ = b; + n -= 128; + goto again; + } + *op++ = (tidataval_t)(-(n-1)); + *op++ = b; + } else { + lastliteral = op; + *op++ = 0; + *op++ = b; + state = LITERAL; + } + break; + case LITERAL_RUN: /* literal followed by a run */ + /* + * Check to see if previous run should + * be converted to a literal, in which + * case we convert literal-run-literal + * to a single literal. + */ + if (n == 1 && op[-2] == (tidata) -1 && + *lastliteral < 126) { + state = (((*lastliteral) += 2) == 127 ? + BASE : LITERAL); + op[-2] = op[-1]; /* replicate */ + } else + state = RUN; + goto again; + } + } + tif->tif_rawcc += op - tif->tif_rawcp; + tif->tif_rawcp = op; + return (1); +} + +/* + * Encode a rectangular chunk of pixels. We break it up + * into row-sized pieces to insure that encoded runs do + * not span rows. Otherwise, there can be problems with + * the decoder if data is read, for example, by scanlines + * when it was encoded by strips. + */ +static int +PackBitsEncodeChunk(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + tsize_t rowsize = (tsize_t) tif->tif_data; + + assert(rowsize > 0); + while ((long)cc > 0) { + if (PackBitsEncode(tif, bp, rowsize, s) < 0) + return (-1); + bp += rowsize; + cc -= rowsize; + } + return (1); +} + +static int +PackBitsDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +{ + char *bp; + tsize_t cc; + long n; + int b; + + (void) s; + bp = (char*) tif->tif_rawcp; + cc = tif->tif_rawcc; + while (cc > 0 && (long)occ > 0) { + n = (long) *bp++, cc--; + /* + * Watch out for compilers that + * don't sign extend chars... + */ + if (n >= 128) + n -= 256; + if (n < 0) { /* replicate next byte -n+1 times */ + if (n == -128) /* nop */ + continue; + n = -n + 1; + occ -= n; + b = *bp++, cc--; + while (n-- > 0) + *op++ = b; + } else { /* copy next n+1 bytes literally */ + _TIFFmemcpy(op, bp, ++n); + op += n; occ -= n; + bp += n; cc -= n; + } + } + tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcc = cc; + if (occ > 0) { + TIFFError(tif->tif_name, + "PackBitsDecode: Not enough data for scanline %ld", + (long) tif->tif_row); + return (0); + } + /* check for buffer overruns? */ + return (1); +} + +int +TIFFInitPackBits(TIFF* tif, int scheme) +{ + (void) scheme; + tif->tif_decoderow = PackBitsDecode; + tif->tif_decodestrip = PackBitsDecode; + tif->tif_decodetile = PackBitsDecode; + tif->tif_preencode = PackBitsPreEncode; + tif->tif_encoderow = PackBitsEncode; + tif->tif_encodestrip = PackBitsEncodeChunk; + tif->tif_encodetile = PackBitsEncodeChunk; + return (1); +} +#endif /* PACKBITS_SUPPORT */ diff --git a/libtiff/tif_pixarlog.c b/libtiff/tif_pixarlog.c new file mode 100755 index 0000000..3bc0a28 --- /dev/null +++ b/libtiff/tif_pixarlog.c @@ -0,0 +1,1309 @@ +/* + * Copyright (c) 1996-1997 Sam Leffler + * Copyright (c) 1996 Pixar + * + * 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 + * Pixar, 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 Pixar, 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 PIXAR, 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. + */ + +#include "tiffiop.h" +#ifdef PIXARLOG_SUPPORT + +/* + * TIFF Library. + * PixarLog Compression Support + * + * Contributed by Dan McCoy. + * + * PixarLog film support uses the TIFF library to store companded + * 11 bit values into a tiff file, which are compressed using the + * zip compressor. + * + * The codec can take as input and produce as output 32-bit IEEE float values + * as well as 16-bit or 8-bit unsigned integer values. + * + * On writing any of the above are converted into the internal + * 11-bit log format. In the case of 8 and 16 bit values, the + * input is assumed to be unsigned linear color values that represent + * the range 0-1. In the case of IEEE values, the 0-1 range is assumed to + * be the normal linear color range, in addition over 1 values are + * accepted up to a value of about 25.0 to encode "hot" hightlights and such. + * The encoding is lossless for 8-bit values, slightly lossy for the + * other bit depths. The actual color precision should be better + * than the human eye can perceive with extra room to allow for + * error introduced by further image computation. As with any quantized + * color format, it is possible to perform image calculations which + * expose the quantization error. This format should certainly be less + * susceptable to such errors than standard 8-bit encodings, but more + * susceptable than straight 16-bit or 32-bit encodings. + * + * On reading the internal format is converted to the desired output format. + * The program can request which format it desires by setting the internal + * pseudo tag TIFFTAG_PIXARLOGDATAFMT to one of these possible values: + * PIXARLOGDATAFMT_FLOAT = provide IEEE float values. + * PIXARLOGDATAFMT_16BIT = provide unsigned 16-bit integer values + * PIXARLOGDATAFMT_8BIT = provide unsigned 8-bit integer values + * + * alternately PIXARLOGDATAFMT_8BITABGR provides unsigned 8-bit integer + * values with the difference that if there are exactly three or four channels + * (rgb or rgba) it swaps the channel order (bgr or abgr). + * + * PIXARLOGDATAFMT_11BITLOG provides the internal encoding directly + * packed in 16-bit values. However no tools are supplied for interpreting + * these values. + * + * "hot" (over 1.0) areas written in floating point get clamped to + * 1.0 in the integer data types. + * + * When the file is closed after writing, the bit depth and sample format + * are set always to appear as if 8-bit data has been written into it. + * That way a naive program unaware of the particulars of the encoding + * gets the format it is most likely able to handle. + * + * The codec does it's own horizontal differencing step on the coded + * values so the libraries predictor stuff should be turned off. + * The codec also handle byte swapping the encoded values as necessary + * since the library does not have the information necessary + * to know the bit depth of the raw unencoded buffer. + * + */ + +#include "tif_predict.h" +#include "zlib.h" +#include "zutil.h" + +#include +#include +#include +#include + +/* Tables for converting to/from 11 bit coded values */ + +#define TSIZE 2048 /* decode table size (11-bit tokens) */ +#define TSIZEP1 2049 /* Plus one for slop */ +#define ONE 1250 /* token value of 1.0 exactly */ +#define RATIO 1.004 /* nominal ratio for log part */ + +#define CODE_MASK 0x7ff /* 11 bits. */ + +static float Fltsize; +static float LogK1, LogK2; + +#define REPEAT(n, op) { int i; i=n; do { i--; op; } while (i>0); } + +static void +horizontalAccumulateF(uint16 *wp, int n, int stride, float *op, + float *ToLinearF) +{ + register unsigned int cr, cg, cb, ca, mask; + register float t0, t1, t2, t3; + + if (n >= stride) { + mask = CODE_MASK; + if (stride == 3) { + t0 = ToLinearF[cr = wp[0]]; + t1 = ToLinearF[cg = wp[1]]; + t2 = ToLinearF[cb = wp[2]]; + op[0] = t0; + op[1] = t1; + op[2] = t2; + n -= 3; + while (n > 0) { + wp += 3; + op += 3; + n -= 3; + t0 = ToLinearF[(cr += wp[0]) & mask]; + t1 = ToLinearF[(cg += wp[1]) & mask]; + t2 = ToLinearF[(cb += wp[2]) & mask]; + op[0] = t0; + op[1] = t1; + op[2] = t2; + } + } else if (stride == 4) { + t0 = ToLinearF[cr = wp[0]]; + t1 = ToLinearF[cg = wp[1]]; + t2 = ToLinearF[cb = wp[2]]; + t3 = ToLinearF[ca = wp[3]]; + op[0] = t0; + op[1] = t1; + op[2] = t2; + op[3] = t3; + n -= 4; + while (n > 0) { + wp += 4; + op += 4; + n -= 4; + t0 = ToLinearF[(cr += wp[0]) & mask]; + t1 = ToLinearF[(cg += wp[1]) & mask]; + t2 = ToLinearF[(cb += wp[2]) & mask]; + t3 = ToLinearF[(ca += wp[3]) & mask]; + op[0] = t0; + op[1] = t1; + op[2] = t2; + op[3] = t3; + } + } else { + REPEAT(stride, *op = ToLinearF[*wp&mask]; wp++; op++) + n -= stride; + while (n > 0) { + REPEAT(stride, + wp[stride] += *wp; *op = ToLinearF[*wp&mask]; wp++; op++) + n -= stride; + } + } + } +} + +static void +horizontalAccumulate12(uint16 *wp, int n, int stride, int16 *op, + float *ToLinearF) +{ + register unsigned int cr, cg, cb, ca, mask; + register float t0, t1, t2, t3; + +#define SCALE12 2048.0 +#define CLAMP12(t) (((t) < 3071) ? (uint16) (t) : 3071) + + if (n >= stride) { + mask = CODE_MASK; + if (stride == 3) { + t0 = ToLinearF[cr = wp[0]] * SCALE12; + t1 = ToLinearF[cg = wp[1]] * SCALE12; + t2 = ToLinearF[cb = wp[2]] * SCALE12; + op[0] = CLAMP12(t0); + op[1] = CLAMP12(t1); + op[2] = CLAMP12(t2); + n -= 3; + while (n > 0) { + wp += 3; + op += 3; + n -= 3; + t0 = ToLinearF[(cr += wp[0]) & mask] * SCALE12; + t1 = ToLinearF[(cg += wp[1]) & mask] * SCALE12; + t2 = ToLinearF[(cb += wp[2]) & mask] * SCALE12; + op[0] = CLAMP12(t0); + op[1] = CLAMP12(t1); + op[2] = CLAMP12(t2); + } + } else if (stride == 4) { + t0 = ToLinearF[cr = wp[0]] * SCALE12; + t1 = ToLinearF[cg = wp[1]] * SCALE12; + t2 = ToLinearF[cb = wp[2]] * SCALE12; + t3 = ToLinearF[ca = wp[3]] * SCALE12; + op[0] = CLAMP12(t0); + op[1] = CLAMP12(t1); + op[2] = CLAMP12(t2); + op[3] = CLAMP12(t3); + n -= 4; + while (n > 0) { + wp += 4; + op += 4; + n -= 4; + t0 = ToLinearF[(cr += wp[0]) & mask] * SCALE12; + t1 = ToLinearF[(cg += wp[1]) & mask] * SCALE12; + t2 = ToLinearF[(cb += wp[2]) & mask] * SCALE12; + t3 = ToLinearF[(ca += wp[3]) & mask] * SCALE12; + op[0] = CLAMP12(t0); + op[1] = CLAMP12(t1); + op[2] = CLAMP12(t2); + op[3] = CLAMP12(t3); + } + } else { + REPEAT(stride, t0 = ToLinearF[*wp&mask] * SCALE12; + *op = CLAMP12(t0); wp++; op++) + n -= stride; + while (n > 0) { + REPEAT(stride, + wp[stride] += *wp; t0 = ToLinearF[wp[stride]&mask]*SCALE12; + *op = CLAMP12(t0); wp++; op++) + n -= stride; + } + } + } +} + +static void +horizontalAccumulate16(uint16 *wp, int n, int stride, uint16 *op, + uint16 *ToLinear16) +{ + register unsigned int cr, cg, cb, ca, mask; + + if (n >= stride) { + mask = CODE_MASK; + if (stride == 3) { + op[0] = ToLinear16[cr = wp[0]]; + op[1] = ToLinear16[cg = wp[1]]; + op[2] = ToLinear16[cb = wp[2]]; + n -= 3; + while (n > 0) { + wp += 3; + op += 3; + n -= 3; + op[0] = ToLinear16[(cr += wp[0]) & mask]; + op[1] = ToLinear16[(cg += wp[1]) & mask]; + op[2] = ToLinear16[(cb += wp[2]) & mask]; + } + } else if (stride == 4) { + op[0] = ToLinear16[cr = wp[0]]; + op[1] = ToLinear16[cg = wp[1]]; + op[2] = ToLinear16[cb = wp[2]]; + op[3] = ToLinear16[ca = wp[3]]; + n -= 4; + while (n > 0) { + wp += 4; + op += 4; + n -= 4; + op[0] = ToLinear16[(cr += wp[0]) & mask]; + op[1] = ToLinear16[(cg += wp[1]) & mask]; + op[2] = ToLinear16[(cb += wp[2]) & mask]; + op[3] = ToLinear16[(ca += wp[3]) & mask]; + } + } else { + REPEAT(stride, *op = ToLinear16[*wp&mask]; wp++; op++) + n -= stride; + while (n > 0) { + REPEAT(stride, + wp[stride] += *wp; *op = ToLinear16[*wp&mask]; wp++; op++) + n -= stride; + } + } + } +} + +/* + * Returns the log encoded 11-bit values with the horizontal + * differencing undone. + */ +static void +horizontalAccumulate11(uint16 *wp, int n, int stride, uint16 *op) +{ + register unsigned int cr, cg, cb, ca, mask; + + if (n >= stride) { + mask = CODE_MASK; + if (stride == 3) { + op[0] = cr = wp[0]; op[1] = cg = wp[1]; op[2] = cb = wp[2]; + n -= 3; + while (n > 0) { + wp += 3; + op += 3; + n -= 3; + op[0] = (cr += wp[0]) & mask; + op[1] = (cg += wp[1]) & mask; + op[2] = (cb += wp[2]) & mask; + } + } else if (stride == 4) { + op[0] = cr = wp[0]; op[1] = cg = wp[1]; + op[2] = cb = wp[2]; op[3] = ca = wp[3]; + n -= 4; + while (n > 0) { + wp += 4; + op += 4; + n -= 4; + op[0] = (cr += wp[0]) & mask; + op[1] = (cg += wp[1]) & mask; + op[2] = (cb += wp[2]) & mask; + op[3] = (ca += wp[3]) & mask; + } + } else { + REPEAT(stride, *op = *wp&mask; wp++; op++) + n -= stride; + while (n > 0) { + REPEAT(stride, + wp[stride] += *wp; *op = *wp&mask; wp++; op++) + n -= stride; + } + } + } +} + +static void +horizontalAccumulate8(uint16 *wp, int n, int stride, unsigned char *op, + unsigned char *ToLinear8) +{ + register unsigned int cr, cg, cb, ca, mask; + + if (n >= stride) { + mask = CODE_MASK; + if (stride == 3) { + op[0] = ToLinear8[cr = wp[0]]; + op[1] = ToLinear8[cg = wp[1]]; + op[2] = ToLinear8[cb = wp[2]]; + n -= 3; + while (n > 0) { + n -= 3; + wp += 3; + op += 3; + op[0] = ToLinear8[(cr += wp[0]) & mask]; + op[1] = ToLinear8[(cg += wp[1]) & mask]; + op[2] = ToLinear8[(cb += wp[2]) & mask]; + } + } else if (stride == 4) { + op[0] = ToLinear8[cr = wp[0]]; + op[1] = ToLinear8[cg = wp[1]]; + op[2] = ToLinear8[cb = wp[2]]; + op[3] = ToLinear8[ca = wp[3]]; + n -= 4; + while (n > 0) { + n -= 4; + wp += 4; + op += 4; + op[0] = ToLinear8[(cr += wp[0]) & mask]; + op[1] = ToLinear8[(cg += wp[1]) & mask]; + op[2] = ToLinear8[(cb += wp[2]) & mask]; + op[3] = ToLinear8[(ca += wp[3]) & mask]; + } + } else { + REPEAT(stride, *op = ToLinear8[*wp&mask]; wp++; op++) + n -= stride; + while (n > 0) { + REPEAT(stride, + wp[stride] += *wp; *op = ToLinear8[*wp&mask]; wp++; op++) + n -= stride; + } + } + } +} + + +static void +horizontalAccumulate8abgr(uint16 *wp, int n, int stride, unsigned char *op, + unsigned char *ToLinear8) +{ + register unsigned int cr, cg, cb, ca, mask; + register unsigned char t0, t1, t2, t3; + + if (n >= stride) { + mask = CODE_MASK; + if (stride == 3) { + op[0] = 0; + t1 = ToLinear8[cb = wp[2]]; + t2 = ToLinear8[cg = wp[1]]; + t3 = ToLinear8[cr = wp[0]]; + op[1] = t1; + op[2] = t2; + op[3] = t3; + n -= 3; + while (n > 0) { + n -= 3; + wp += 3; + op += 4; + op[0] = 0; + t1 = ToLinear8[(cb += wp[2]) & mask]; + t2 = ToLinear8[(cg += wp[1]) & mask]; + t3 = ToLinear8[(cr += wp[0]) & mask]; + op[1] = t1; + op[2] = t2; + op[3] = t3; + } + } else if (stride == 4) { + t0 = ToLinear8[ca = wp[3]]; + t1 = ToLinear8[cb = wp[2]]; + t2 = ToLinear8[cg = wp[1]]; + t3 = ToLinear8[cr = wp[0]]; + op[0] = t0; + op[1] = t1; + op[2] = t2; + op[3] = t3; + n -= 4; + while (n > 0) { + n -= 4; + wp += 4; + op += 4; + t0 = ToLinear8[(ca += wp[3]) & mask]; + t1 = ToLinear8[(cb += wp[2]) & mask]; + t2 = ToLinear8[(cg += wp[1]) & mask]; + t3 = ToLinear8[(cr += wp[0]) & mask]; + op[0] = t0; + op[1] = t1; + op[2] = t2; + op[3] = t3; + } + } else { + REPEAT(stride, *op = ToLinear8[*wp&mask]; wp++; op++) + n -= stride; + while (n > 0) { + REPEAT(stride, + wp[stride] += *wp; *op = ToLinear8[*wp&mask]; wp++; op++) + n -= stride; + } + } + } +} + +/* + * State block for each open TIFF + * file using PixarLog compression/decompression. + */ +typedef struct { + TIFFPredictorState predict; + z_stream stream; + uint16 *tbuf; + uint16 stride; + int state; + int user_datafmt; + int quality; +#define PLSTATE_INIT 1 + + TIFFVSetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ + + float *ToLinearF; + uint16 *ToLinear16; + unsigned char *ToLinear8; + uint16 *FromLT2; + uint16 *From14; /* Really for 16-bit data, but we shift down 2 */ + uint16 *From8; + +} PixarLogState; + +static int +PixarLogMakeTables(PixarLogState *sp) +{ + +/* + * We make several tables here to convert between various external + * representations (float, 16-bit, and 8-bit) and the internal + * 11-bit companded representation. The 11-bit representation has two + * distinct regions. A linear bottom end up through .018316 in steps + * of about .000073, and a region of constant ratio up to about 25. + * These floating point numbers are stored in the main table ToLinearF. + * All other tables are derived from this one. The tables (and the + * ratios) are continuous at the internal seam. + */ + + int nlin, lt2size; + int i, j; + double b, c, linstep, max; + double k, v, dv, r, lr2, r2; + float *ToLinearF; + uint16 *ToLinear16; + unsigned char *ToLinear8; + uint16 *FromLT2; + uint16 *From14; /* Really for 16-bit data, but we shift down 2 */ + uint16 *From8; + + c = log(RATIO); + nlin = 1./c; /* nlin must be an integer */ + c = 1./nlin; + b = exp(-c*ONE); /* multiplicative scale factor [b*exp(c*ONE) = 1] */ + linstep = b*c*exp(1.); + + LogK1 = 1./c; /* if (v >= 2) token = k1*log(v*k2) */ + LogK2 = 1./b; + lt2size = (2./linstep)+1; + FromLT2 = (uint16 *)_TIFFmalloc(lt2size*sizeof(uint16)); + From14 = (uint16 *)_TIFFmalloc(16384*sizeof(uint16)); + From8 = (uint16 *)_TIFFmalloc(256*sizeof(uint16)); + ToLinearF = (float *)_TIFFmalloc(TSIZEP1 * sizeof(float)); + ToLinear16 = (uint16 *)_TIFFmalloc(TSIZEP1 * sizeof(uint16)); + ToLinear8 = (unsigned char *)_TIFFmalloc(TSIZEP1 * sizeof(unsigned char)); + if (FromLT2 == NULL || From14 == NULL || From8 == NULL || + ToLinearF == NULL || ToLinear16 == NULL || ToLinear8 == NULL) { + if (FromLT2) _TIFFfree(FromLT2); + if (From14) _TIFFfree(From14); + if (From8) _TIFFfree(From8); + if (ToLinearF) _TIFFfree(ToLinearF); + if (ToLinear16) _TIFFfree(ToLinear16); + if (ToLinear8) _TIFFfree(ToLinear8); + sp->FromLT2 = NULL; + sp->From14 = NULL; + sp->From8 = NULL; + sp->ToLinearF = NULL; + sp->ToLinear16 = NULL; + sp->ToLinear8 = NULL; + return 0; + } + + j = 0; + + for (i = 0; i < nlin; i++) { + v = i * linstep; + ToLinearF[j++] = v; + } + + for (i = nlin; i < TSIZE; i++) + ToLinearF[j++] = b*exp(c*i); + + ToLinearF[2048] = ToLinearF[2047]; + + for (i = 0; i < TSIZEP1; i++) { + v = ToLinearF[i]*65535.0 + 0.5; + ToLinear16[i] = (v > 65535.0) ? 65535 : v; + v = ToLinearF[i]*255.0 + 0.5; + ToLinear8[i] = (v > 255.0) ? 255 : v; + } + + j = 0; + for (i = 0; i < lt2size; i++) { + if ((i*linstep)*(i*linstep) > ToLinearF[j]*ToLinearF[j+1]) + j++; + FromLT2[i] = j; + } + + /* + * Since we lose info anyway on 16-bit data, we set up a 14-bit + * table and shift 16-bit values down two bits on input. + * saves a little table space. + */ + j = 0; + for (i = 0; i < 16384; i++) { + while ((i/16383.)*(i/16383.) > ToLinearF[j]*ToLinearF[j+1]) + j++; + From14[i] = j; + } + + j = 0; + for (i = 0; i < 256; i++) { + while ((i/255.)*(i/255.) > ToLinearF[j]*ToLinearF[j+1]) + j++; + From8[i] = j; + } + + Fltsize = lt2size/2; + + sp->ToLinearF = ToLinearF; + sp->ToLinear16 = ToLinear16; + sp->ToLinear8 = ToLinear8; + sp->FromLT2 = FromLT2; + sp->From14 = From14; + sp->From8 = From8; + + return 1; +} + +#define DecoderState(tif) ((PixarLogState*) (tif)->tif_data) +#define EncoderState(tif) ((PixarLogState*) (tif)->tif_data) + +static int PixarLogEncode(TIFF*, tidata_t, tsize_t, tsample_t); +static int PixarLogDecode(TIFF*, tidata_t, tsize_t, tsample_t); + +#define N(a) (sizeof(a)/sizeof(a[0])) +#define PIXARLOGDATAFMT_UNKNOWN -1 + +static int +PixarLogGuessDataFmt(TIFFDirectory *td) +{ + int guess = PIXARLOGDATAFMT_UNKNOWN; + int format = td->td_sampleformat; + + /* If the user didn't tell us his datafmt, + * take our best guess from the bitspersample. + */ + switch (td->td_bitspersample) { + case 32: + if (format == SAMPLEFORMAT_IEEEFP) + guess = PIXARLOGDATAFMT_FLOAT; + break; + case 16: + if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_UINT) + guess = PIXARLOGDATAFMT_16BIT; + break; + case 12: + if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_INT) + guess = PIXARLOGDATAFMT_12BITPICIO; + break; + case 11: + if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_UINT) + guess = PIXARLOGDATAFMT_11BITLOG; + break; + case 8: + if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_UINT) + guess = PIXARLOGDATAFMT_8BIT; + break; + } + + return guess; +} + +static int +PixarLogSetupDecode(TIFF* tif) +{ + TIFFDirectory *td = &tif->tif_dir; + PixarLogState* sp = DecoderState(tif); + static const char module[] = "PixarLogSetupDecode"; + + assert(sp != NULL); + + /* Make sure no byte swapping happens on the data + * after decompression. */ + tif->tif_postdecode = _TIFFNoPostDecode; + + /* for some reason, we can't do this in TIFFInitPixarLog */ + + sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ? + td->td_samplesperpixel : 1); + sp->tbuf = (uint16 *) _TIFFmalloc(sp->stride * + td->td_imagewidth * td->td_rowsperstrip * sizeof(uint16)); + if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN) + sp->user_datafmt = PixarLogGuessDataFmt(td); + if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN) { + TIFFError(module, + "PixarLog compression can't handle bits depth/data format combination (depth: %d)", + td->td_bitspersample); + return (0); + } + + if (inflateInit(&sp->stream) != Z_OK) { + TIFFError(module, "%s: %s", tif->tif_name, sp->stream.msg); + return (0); + } else { + sp->state |= PLSTATE_INIT; + return (1); + } +} + +/* + * Setup state for decoding a strip. + */ +static int +PixarLogPreDecode(TIFF* tif, tsample_t s) +{ + TIFFDirectory *td = &tif->tif_dir; + PixarLogState* sp = DecoderState(tif); + + (void) s; + assert(sp != NULL); + sp->stream.next_in = tif->tif_rawdata; + sp->stream.avail_in = tif->tif_rawcc; + return (inflateReset(&sp->stream) == Z_OK); +} + +static int +PixarLogDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +{ + TIFFDirectory *td = &tif->tif_dir; + PixarLogState* sp = DecoderState(tif); + static const char module[] = "PixarLogDecode"; + int i, nsamples, llen; + uint16 *up; + + switch (sp->user_datafmt) { + case PIXARLOGDATAFMT_FLOAT: + nsamples = occ / sizeof(float); /* XXX float == 32 bits */ + break; + case PIXARLOGDATAFMT_16BIT: + case PIXARLOGDATAFMT_12BITPICIO: + case PIXARLOGDATAFMT_11BITLOG: + nsamples = occ / sizeof(uint16); /* XXX uint16 == 16 bits */ + break; + case PIXARLOGDATAFMT_8BIT: + case PIXARLOGDATAFMT_8BITABGR: + nsamples = occ; + break; + default: + TIFFError(tif->tif_name, + "%d bit input not supported in PixarLog", + td->td_bitspersample); + return 0; + } + + llen = sp->stride * td->td_imagewidth; + + (void) s; + assert(sp != NULL); + sp->stream.next_out = (unsigned char *) sp->tbuf; + sp->stream.avail_out = nsamples * sizeof(uint16); + do { + int state = inflate(&sp->stream, Z_PARTIAL_FLUSH); + if (state == Z_STREAM_END) { + break; /* XXX */ + } + if (state == Z_DATA_ERROR) { + TIFFError(module, + "%s: Decoding error at scanline %d, %s", + tif->tif_name, tif->tif_row, sp->stream.msg); + if (inflateSync(&sp->stream) != Z_OK) + return (0); + continue; + } + if (state != Z_OK) { + TIFFError(module, "%s: zlib error: %s", + tif->tif_name, sp->stream.msg); + return (0); + } + } while (sp->stream.avail_out > 0); + + /* hopefully, we got all the bytes we needed */ + if (sp->stream.avail_out != 0) { + TIFFError(module, + "%s: Not enough data at scanline %d (short %d bytes)", + tif->tif_name, tif->tif_row, sp->stream.avail_out); + return (0); + } + + up = sp->tbuf; + /* Swap bytes in the data if from a different endian machine. */ + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabArrayOfShort(up, nsamples); + + for (i = 0; i < nsamples; i += llen, up += llen) { + switch (sp->user_datafmt) { + case PIXARLOGDATAFMT_FLOAT: + horizontalAccumulateF(up, llen, sp->stride, + (float *)op, sp->ToLinearF); + op += llen * sizeof(float); + break; + case PIXARLOGDATAFMT_16BIT: + horizontalAccumulate16(up, llen, sp->stride, + (uint16 *)op, sp->ToLinear16); + op += llen * sizeof(uint16); + break; + case PIXARLOGDATAFMT_12BITPICIO: + horizontalAccumulate12(up, llen, sp->stride, + (int16 *)op, sp->ToLinearF); + op += llen * sizeof(int16); + break; + case PIXARLOGDATAFMT_11BITLOG: + horizontalAccumulate11(up, llen, sp->stride, + (uint16 *)op); + op += llen * sizeof(uint16); + break; + case PIXARLOGDATAFMT_8BIT: + horizontalAccumulate8(up, llen, sp->stride, + (unsigned char *)op, sp->ToLinear8); + op += llen * sizeof(unsigned char); + break; + case PIXARLOGDATAFMT_8BITABGR: + horizontalAccumulate8abgr(up, llen, sp->stride, + (unsigned char *)op, sp->ToLinear8); + op += llen * sizeof(unsigned char); + break; + default: + TIFFError(tif->tif_name, + "PixarLogDecode: unsupported bits/sample: %d", + td->td_bitspersample); + return (0); + } + } + + return (1); +} + +static int +PixarLogSetupEncode(TIFF* tif) +{ + TIFFDirectory *td = &tif->tif_dir; + PixarLogState* sp = EncoderState(tif); + static const char module[] = "PixarLogSetupEncode"; + + assert(sp != NULL); + + /* for some reason, we can't do this in TIFFInitPixarLog */ + + sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ? + td->td_samplesperpixel : 1); + sp->tbuf = (uint16 *) _TIFFmalloc(sp->stride * + td->td_imagewidth * td->td_rowsperstrip * sizeof(uint16)); + if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN) + sp->user_datafmt = PixarLogGuessDataFmt(td); + if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN) { + TIFFError(module, "PixarLog compression can't handle %d bit linear encodings", td->td_bitspersample); + return (0); + } + + if (deflateInit(&sp->stream, sp->quality) != Z_OK) { + TIFFError(module, "%s: %s", tif->tif_name, sp->stream.msg); + return (0); + } else { + sp->state |= PLSTATE_INIT; + return (1); + } +} + +/* + * Reset encoding state at the start of a strip. + */ +static int +PixarLogPreEncode(TIFF* tif, tsample_t s) +{ + TIFFDirectory *td = &tif->tif_dir; + PixarLogState *sp = EncoderState(tif); + + (void) s; + assert(sp != NULL); + sp->stream.next_out = tif->tif_rawdata; + sp->stream.avail_out = tif->tif_rawdatasize; + return (deflateReset(&sp->stream) == Z_OK); +} + +static void +horizontalDifferenceF(float *ip, int n, int stride, uint16 *wp, uint16 *FromLT2) +{ + + register int r1, g1, b1, a1, r2, g2, b2, a2, mask; + register float fltsize = Fltsize; + +#define CLAMP(v) ( (v<(float)0.) ? 0 \ + : (v<(float)2.) ? FromLT2[(int)(v*fltsize)] \ + : (v>(float)24.2) ? 2047 \ + : LogK1*log(v*LogK2) + 0.5 ) + + mask = CODE_MASK; + if (n >= stride) { + if (stride == 3) { + r2 = wp[0] = CLAMP(ip[0]); g2 = wp[1] = CLAMP(ip[1]); + b2 = wp[2] = CLAMP(ip[2]); + n -= 3; + while (n > 0) { + n -= 3; + wp += 3; + ip += 3; + r1 = CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1; + g1 = CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1; + b1 = CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1; + } + } else if (stride == 4) { + r2 = wp[0] = CLAMP(ip[0]); g2 = wp[1] = CLAMP(ip[1]); + b2 = wp[2] = CLAMP(ip[2]); a2 = wp[3] = CLAMP(ip[3]); + n -= 4; + while (n > 0) { + n -= 4; + wp += 4; + ip += 4; + r1 = CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1; + g1 = CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1; + b1 = CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1; + a1 = CLAMP(ip[3]); wp[3] = (a1-a2) & mask; a2 = a1; + } + } else { + ip += n - 1; /* point to last one */ + wp += n - 1; /* point to last one */ + n -= stride; + while (n > 0) { + REPEAT(stride, wp[0] = CLAMP(ip[0]); + wp[stride] -= wp[0]; + wp[stride] &= mask; + wp--; ip--) + n -= stride; + } + REPEAT(stride, wp[0] = CLAMP(ip[0]); wp--; ip--) + } + } +} + +static void +horizontalDifference16(unsigned short *ip, int n, int stride, + unsigned short *wp, uint16 *From14) +{ + register int r1, g1, b1, a1, r2, g2, b2, a2, mask; + +/* assumption is unsigned pixel values */ +#undef CLAMP +#define CLAMP(v) From14[(v) >> 2] + + mask = CODE_MASK; + if (n >= stride) { + if (stride == 3) { + r2 = wp[0] = CLAMP(ip[0]); g2 = wp[1] = CLAMP(ip[1]); + b2 = wp[2] = CLAMP(ip[2]); + n -= 3; + while (n > 0) { + n -= 3; + wp += 3; + ip += 3; + r1 = CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1; + g1 = CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1; + b1 = CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1; + } + } else if (stride == 4) { + r2 = wp[0] = CLAMP(ip[0]); g2 = wp[1] = CLAMP(ip[1]); + b2 = wp[2] = CLAMP(ip[2]); a2 = wp[3] = CLAMP(ip[3]); + n -= 4; + while (n > 0) { + n -= 4; + wp += 4; + ip += 4; + r1 = CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1; + g1 = CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1; + b1 = CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1; + a1 = CLAMP(ip[3]); wp[3] = (a1-a2) & mask; a2 = a1; + } + } else { + ip += n - 1; /* point to last one */ + wp += n - 1; /* point to last one */ + n -= stride; + while (n > 0) { + REPEAT(stride, wp[0] = CLAMP(ip[0]); + wp[stride] -= wp[0]; + wp[stride] &= mask; + wp--; ip--) + n -= stride; + } + REPEAT(stride, wp[0] = CLAMP(ip[0]); wp--; ip--) + } + } +} + + +static void +horizontalDifference8(unsigned char *ip, int n, int stride, + unsigned short *wp, uint16 *From8) +{ + register int r1, g1, b1, a1, r2, g2, b2, a2, mask; + +#undef CLAMP +#define CLAMP(v) (From8[(v)]) + + mask = CODE_MASK; + if (n >= stride) { + if (stride == 3) { + r2 = wp[0] = CLAMP(ip[0]); g2 = wp[1] = CLAMP(ip[1]); + b2 = wp[2] = CLAMP(ip[2]); + n -= 3; + while (n > 0) { + n -= 3; + r1 = CLAMP(ip[3]); wp[3] = (r1-r2) & mask; r2 = r1; + g1 = CLAMP(ip[4]); wp[4] = (g1-g2) & mask; g2 = g1; + b1 = CLAMP(ip[5]); wp[5] = (b1-b2) & mask; b2 = b1; + wp += 3; + ip += 3; + } + } else if (stride == 4) { + r2 = wp[0] = CLAMP(ip[0]); g2 = wp[1] = CLAMP(ip[1]); + b2 = wp[2] = CLAMP(ip[2]); a2 = wp[3] = CLAMP(ip[3]); + n -= 4; + while (n > 0) { + n -= 4; + r1 = CLAMP(ip[4]); wp[4] = (r1-r2) & mask; r2 = r1; + g1 = CLAMP(ip[5]); wp[5] = (g1-g2) & mask; g2 = g1; + b1 = CLAMP(ip[6]); wp[6] = (b1-b2) & mask; b2 = b1; + a1 = CLAMP(ip[7]); wp[7] = (a1-a2) & mask; a2 = a1; + wp += 4; + ip += 4; + } + } else { + wp += n + stride - 1; /* point to last one */ + ip += n + stride - 1; /* point to last one */ + n -= stride; + while (n > 0) { + REPEAT(stride, wp[0] = CLAMP(ip[0]); + wp[stride] -= wp[0]; + wp[stride] &= mask; + wp--; ip--) + n -= stride; + } + REPEAT(stride, wp[0] = CLAMP(ip[0]); wp--; ip--) + } + } +} + +/* + * Encode a chunk of pixels. + */ +static int +PixarLogEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + TIFFDirectory *td = &tif->tif_dir; + PixarLogState *sp = EncoderState(tif); + static const char module[] = "PixarLogEncode"; + int i, n, llen; + unsigned short * up; + + (void) s; + + switch (sp->user_datafmt) { + case PIXARLOGDATAFMT_FLOAT: + n = cc / sizeof(float); /* XXX float == 32 bits */ + break; + case PIXARLOGDATAFMT_16BIT: + case PIXARLOGDATAFMT_12BITPICIO: + case PIXARLOGDATAFMT_11BITLOG: + n = cc / sizeof(uint16); /* XXX uint16 == 16 bits */ + break; + case PIXARLOGDATAFMT_8BIT: + case PIXARLOGDATAFMT_8BITABGR: + n = cc; + break; + default: + TIFFError(tif->tif_name, + "%d bit input not supported in PixarLog", + td->td_bitspersample); + return 0; + } + + llen = sp->stride * td->td_imagewidth; + + for (i = 0, up = sp->tbuf; i < n; i += llen, up += llen) { + switch (sp->user_datafmt) { + case PIXARLOGDATAFMT_FLOAT: + horizontalDifferenceF((float *)bp, llen, + sp->stride, up, sp->FromLT2); + bp += llen * sizeof(float); + break; + case PIXARLOGDATAFMT_16BIT: + horizontalDifference16((uint16 *)bp, llen, + sp->stride, up, sp->From14); + bp += llen * sizeof(uint16); + break; + case PIXARLOGDATAFMT_8BIT: + horizontalDifference8((unsigned char *)bp, llen, + sp->stride, up, sp->From8); + bp += llen * sizeof(unsigned char); + break; + default: + TIFFError(tif->tif_name, + "%d bit input not supported in PixarLog", + td->td_bitspersample); + return 0; + } + } + + sp->stream.next_in = (unsigned char *) sp->tbuf; + sp->stream.avail_in = n * sizeof(uint16); + + do { + if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK) { + TIFFError(module, "%s: Encoder error: %s", + tif->tif_name, sp->stream.msg); + return (0); + } + if (sp->stream.avail_out == 0) { + tif->tif_rawcc = tif->tif_rawdatasize; + TIFFFlushData1(tif); + sp->stream.next_out = tif->tif_rawdata; + sp->stream.avail_out = tif->tif_rawdatasize; + } + } while (sp->stream.avail_in > 0); + return (1); +} + +/* + * Finish off an encoded strip by flushing the last + * string and tacking on an End Of Information code. + */ + +static int +PixarLogPostEncode(TIFF* tif) +{ + PixarLogState *sp = EncoderState(tif); + static const char module[] = "PixarLogPostEncode"; + int state; + + sp->stream.avail_in = 0; + + do { + state = deflate(&sp->stream, Z_FINISH); + switch (state) { + case Z_STREAM_END: + case Z_OK: + if (sp->stream.avail_out != tif->tif_rawdatasize) { + tif->tif_rawcc = + tif->tif_rawdatasize - sp->stream.avail_out; + TIFFFlushData1(tif); + sp->stream.next_out = tif->tif_rawdata; + sp->stream.avail_out = tif->tif_rawdatasize; + } + break; + default: + TIFFError(module, "%s: zlib error: %s", + tif->tif_name, sp->stream.msg); + return (0); + } + } while (state != Z_STREAM_END); + return (1); +} + +static void +PixarLogClose(TIFF* tif) +{ + TIFFDirectory *td = &tif->tif_dir; + + /* In a really sneaky maneuver, on close, we covertly modify both + * bitspersample and sampleformat in the directory to indicate + * 8-bit linear. This way, the decode "just works" even for + * readers that don't know about PixarLog, or how to set + * the PIXARLOGDATFMT pseudo-tag. + */ + td->td_bitspersample = 8; + td->td_sampleformat = SAMPLEFORMAT_UINT; +} + +static void +PixarLogCleanup(TIFF* tif) +{ + PixarLogState* sp = (PixarLogState*) tif->tif_data; + + if (sp) { + if (sp->FromLT2) _TIFFfree(sp->FromLT2); + if (sp->From14) _TIFFfree(sp->From14); + if (sp->From8) _TIFFfree(sp->From8); + if (sp->ToLinearF) _TIFFfree(sp->ToLinearF); + if (sp->ToLinear16) _TIFFfree(sp->ToLinear16); + if (sp->ToLinear8) _TIFFfree(sp->ToLinear8); + if (sp->state&PLSTATE_INIT) { + if (tif->tif_mode == O_RDONLY) + inflateEnd(&sp->stream); + else + deflateEnd(&sp->stream); + } + if (sp->tbuf) + _TIFFfree(sp->tbuf); + _TIFFfree(sp); + tif->tif_data = NULL; + } +} + +static int +PixarLogVSetField(TIFF* tif, ttag_t tag, va_list ap) +{ + PixarLogState *sp = (PixarLogState *)tif->tif_data; + int result; + static const char module[] = "PixarLogVSetField"; + + switch (tag) { + case TIFFTAG_PIXARLOGQUALITY: + sp->quality = va_arg(ap, int); + if (tif->tif_mode != O_RDONLY && (sp->state&PLSTATE_INIT)) { + if (deflateParams(&sp->stream, + sp->quality, Z_DEFAULT_STRATEGY) != Z_OK) { + TIFFError(module, "%s: zlib error: %s", + tif->tif_name, sp->stream.msg); + return (0); + } + } + return (1); + case TIFFTAG_PIXARLOGDATAFMT: + sp->user_datafmt = va_arg(ap, int); + /* Tweak the TIFF header so that the rest of libtiff knows what + * size of data will be passed between app and library, and + * assume that the app knows what it is doing and is not + * confused by these header manipulations... + */ + switch (sp->user_datafmt) { + case PIXARLOGDATAFMT_8BIT: + case PIXARLOGDATAFMT_8BITABGR: + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); + TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT); + break; + case PIXARLOGDATAFMT_11BITLOG: + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 16); + TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT); + break; + case PIXARLOGDATAFMT_12BITPICIO: + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 16); + TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_INT); + break; + case PIXARLOGDATAFMT_16BIT: + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 16); + TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT); + break; + case PIXARLOGDATAFMT_FLOAT: + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 32); + TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP); + break; + } + /* + * Must recalculate sizes should bits/sample change. + */ + tif->tif_tilesize = TIFFTileSize(tif); + tif->tif_scanlinesize = TIFFScanlineSize(tif); + result = 1; /* NB: pseudo tag */ + break; + default: + result = (*sp->vsetparent)(tif, tag, ap); + } + return (result); +} + +static int +PixarLogVGetField(TIFF* tif, ttag_t tag, va_list ap) +{ + PixarLogState *sp = (PixarLogState *)tif->tif_data; + + switch (tag) { + case TIFFTAG_PIXARLOGQUALITY: + *va_arg(ap, int*) = sp->quality; + break; + case TIFFTAG_PIXARLOGDATAFMT: + *va_arg(ap, int*) = sp->user_datafmt; + break; + default: + return (*sp->vgetparent)(tif, tag, ap); + } + return (1); +} + +static const TIFFFieldInfo pixarlogFieldInfo[] = { + {TIFFTAG_PIXARLOGDATAFMT,0,0,TIFF_ANY, FIELD_PSEUDO,FALSE,FALSE,""}, + {TIFFTAG_PIXARLOGQUALITY,0,0,TIFF_ANY, FIELD_PSEUDO,FALSE,FALSE,""} +}; + +int +TIFFInitPixarLog(TIFF* tif, int scheme) +{ + PixarLogState* sp; + + assert(scheme == COMPRESSION_PIXARLOG); + + /* + * Allocate state block so tag methods have storage to record values. + */ + tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (PixarLogState)); + if (tif->tif_data == NULL) + goto bad; + sp = (PixarLogState*) tif->tif_data; + memset(sp, 0, sizeof (*sp)); + sp->stream.data_type = Z_BINARY; + sp->user_datafmt = PIXARLOGDATAFMT_UNKNOWN; + + /* + * Install codec methods. + */ + tif->tif_setupdecode = PixarLogSetupDecode; + tif->tif_predecode = PixarLogPreDecode; + tif->tif_decoderow = PixarLogDecode; + tif->tif_decodestrip = PixarLogDecode; + tif->tif_decodetile = PixarLogDecode; + tif->tif_setupencode = PixarLogSetupEncode; + tif->tif_preencode = PixarLogPreEncode; + tif->tif_postencode = PixarLogPostEncode; + tif->tif_encoderow = PixarLogEncode; + tif->tif_encodestrip = PixarLogEncode; + tif->tif_encodetile = PixarLogEncode; + tif->tif_close = PixarLogClose; + tif->tif_cleanup = PixarLogCleanup; + + /* Override SetField so we can handle our private pseudo-tag */ + _TIFFMergeFieldInfo(tif, pixarlogFieldInfo, N(pixarlogFieldInfo)); + sp->vgetparent = tif->tif_vgetfield; + tif->tif_vgetfield = PixarLogVGetField; /* hook for codec tags */ + sp->vsetparent = tif->tif_vsetfield; + tif->tif_vsetfield = PixarLogVSetField; /* hook for codec tags */ + + /* Default values for codec-specific fields */ + sp->quality = Z_DEFAULT_COMPRESSION; /* default comp. level */ + sp->state = 0; + + /* we don't wish to use the predictor, + * the default is none, which predictor value 1 + */ + (void) TIFFPredictorInit(tif); + + /* + * build the companding tables + */ + PixarLogMakeTables(sp); + + return (1); +bad: + TIFFError("TIFFInitPixarLog", "No space for PixarLog state block"); + return (0); +} +#endif /* PIXARLOG_SUPPORT */ diff --git a/libtiff/tif_predict.c b/libtiff/tif_predict.c new file mode 100755 index 0000000..4e6a335 --- /dev/null +++ b/libtiff/tif_predict.c @@ -0,0 +1,461 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_predict.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * Predictor Tag Support (used by multiple codecs). + */ +#include "tiffiop.h" +#include "tif_predict.h" + +#include + +#define PredictorState(tif) ((TIFFPredictorState*) (tif)->tif_data) + +static void horAcc8(TIFF*, tidata_t, tsize_t); +static void horAcc16(TIFF*, tidata_t, tsize_t); +static void swabHorAcc16(TIFF*, tidata_t, tsize_t); +static void horDiff8(TIFF*, tidata_t, tsize_t); +static void horDiff16(TIFF*, tidata_t, tsize_t); +static int PredictorDecodeRow(TIFF*, tidata_t, tsize_t, tsample_t); +static int PredictorDecodeTile(TIFF*, tidata_t, tsize_t, tsample_t); +static int PredictorEncodeRow(TIFF*, tidata_t, tsize_t, tsample_t); +static int PredictorEncodeTile(TIFF*, tidata_t, tsize_t, tsample_t); + +static int +PredictorSetup(TIFF* tif) +{ + TIFFPredictorState* sp = PredictorState(tif); + TIFFDirectory* td = &tif->tif_dir; + + if (sp->predictor == 1) /* no differencing */ + return (1); + if (sp->predictor != 2) { + TIFFError(tif->tif_name, "\"Predictor\" value %d not supported", + sp->predictor); + return (0); + } + if (td->td_bitspersample != 8 && td->td_bitspersample != 16) { + TIFFError(tif->tif_name, + "Horizontal differencing \"Predictor\" not supported with %d-bit samples", + td->td_bitspersample); + return (0); + } + sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ? + td->td_samplesperpixel : 1); + /* + * Calculate the scanline/tile-width size in bytes. + */ + if (isTiled(tif)) + sp->rowsize = TIFFTileRowSize(tif); + else + sp->rowsize = TIFFScanlineSize(tif); + return (1); +} + +static int +PredictorSetupDecode(TIFF* tif) +{ + TIFFPredictorState* sp = PredictorState(tif); + TIFFDirectory* td = &tif->tif_dir; + + if (!(*sp->setupdecode)(tif) || !PredictorSetup(tif)) + return (0); + if (sp->predictor == 2) { + switch (td->td_bitspersample) { + case 8: sp->pfunc = horAcc8; break; + case 16: sp->pfunc = horAcc16; break; + } + /* + * Override default decoding method with + * one that does the predictor stuff. + */ + sp->coderow = tif->tif_decoderow; + tif->tif_decoderow = PredictorDecodeRow; + sp->codestrip = tif->tif_decodestrip; + tif->tif_decodestrip = PredictorDecodeTile; + sp->codetile = tif->tif_decodetile; + tif->tif_decodetile = PredictorDecodeTile; + /* + * If the data is horizontally differenced + * 16-bit data that requires byte-swapping, + * then it must be byte swapped before the + * accumulation step. We do this with a + * special-purpose routine and override the + * normal post decoding logic that the library + * setup when the directory was read. + */ + if (tif->tif_flags&TIFF_SWAB) { + if (sp->pfunc == horAcc16) { + sp->pfunc = swabHorAcc16; + tif->tif_postdecode = _TIFFNoPostDecode; + } /* else handle 32-bit case... */ + } + } + return (1); +} + +static int +PredictorSetupEncode(TIFF* tif) +{ + TIFFPredictorState* sp = PredictorState(tif); + TIFFDirectory* td = &tif->tif_dir; + + if (!(*sp->setupencode)(tif) || !PredictorSetup(tif)) + return (0); + if (sp->predictor == 2) { + switch (td->td_bitspersample) { + case 8: sp->pfunc = horDiff8; break; + case 16: sp->pfunc = horDiff16; break; + } + /* + * Override default encoding method with + * one that does the predictor stuff. + */ + sp->coderow = tif->tif_encoderow; + tif->tif_encoderow = PredictorEncodeRow; + sp->codestrip = tif->tif_encodestrip; + tif->tif_encodestrip = PredictorEncodeTile; + sp->codetile = tif->tif_encodetile; + tif->tif_encodetile = PredictorEncodeTile; + } + return (1); +} + +#define REPEAT4(n, op) \ + switch (n) { \ + default: { int i; for (i = n-4; i > 0; i--) { op; } } \ + case 4: op; \ + case 3: op; \ + case 2: op; \ + case 1: op; \ + case 0: ; \ + } + +static void +horAcc8(TIFF* tif, tidata_t cp0, tsize_t cc) +{ + TIFFPredictorState* sp = PredictorState(tif); + tsize_t stride = sp->stride; + + char* cp = (char*) cp0; + if (cc > stride) { + cc -= stride; + /* + * Pipeline the most common cases. + */ + if (stride == 3) { + u_int cr = cp[0]; + u_int cg = cp[1]; + u_int cb = cp[2]; + do { + cc -= 3, cp += 3; + cp[0] = (cr += cp[0]); + cp[1] = (cg += cp[1]); + cp[2] = (cb += cp[2]); + } while ((int32) cc > 0); + } else if (stride == 4) { + u_int cr = cp[0]; + u_int cg = cp[1]; + u_int cb = cp[2]; + u_int ca = cp[3]; + do { + cc -= 4, cp += 4; + cp[0] = (cr += cp[0]); + cp[1] = (cg += cp[1]); + cp[2] = (cb += cp[2]); + cp[3] = (ca += cp[3]); + } while ((int32) cc > 0); + } else { + do { + REPEAT4(stride, cp[stride] += *cp; cp++) + cc -= stride; + } while ((int32) cc > 0); + } + } +} + +static void +swabHorAcc16(TIFF* tif, tidata_t cp0, tsize_t cc) +{ + TIFFPredictorState* sp = PredictorState(tif); + tsize_t stride = sp->stride; + uint16* wp = (uint16*) cp0; + tsize_t wc = cc / 2; + + if (wc > stride) { + TIFFSwabArrayOfShort(wp, wc); + wc -= stride; + do { + REPEAT4(stride, wp[stride] += wp[0]; wp++) + wc -= stride; + } while ((int32) wc > 0); + } +} + +static void +horAcc16(TIFF* tif, tidata_t cp0, tsize_t cc) +{ + tsize_t stride = PredictorState(tif)->stride; + uint16* wp = (uint16*) cp0; + tsize_t wc = cc / 2; + + if (wc > stride) { + wc -= stride; + do { + REPEAT4(stride, wp[stride] += wp[0]; wp++) + wc -= stride; + } while ((int32) wc > 0); + } +} + +/* + * Decode a scanline and apply the predictor routine. + */ +static int +PredictorDecodeRow(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) +{ + TIFFPredictorState *sp = PredictorState(tif); + + assert(sp != NULL); + assert(sp->coderow != NULL); + assert(sp->pfunc != NULL); + if ((*sp->coderow)(tif, op0, occ0, s)) { + (*sp->pfunc)(tif, op0, occ0); + return (1); + } else + return (0); +} + +/* + * Decode a tile/strip and apply the predictor routine. + * Note that horizontal differencing must be done on a + * row-by-row basis. The width of a "row" has already + * been calculated at pre-decode time according to the + * strip/tile dimensions. + */ +static int +PredictorDecodeTile(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) +{ + TIFFPredictorState *sp = PredictorState(tif); + + assert(sp != NULL); + assert(sp->codetile != NULL); + if ((*sp->codetile)(tif, op0, occ0, s)) { + tsize_t rowsize = sp->rowsize; + assert(rowsize > 0); + assert(sp->pfunc != NULL); + while ((long)occ0 > 0) { + (*sp->pfunc)(tif, op0, (tsize_t) rowsize); + occ0 -= rowsize; + op0 += rowsize; + } + return (1); + } else + return (0); +} + +static void +horDiff8(TIFF* tif, tidata_t cp0, tsize_t cc) +{ + TIFFPredictorState* sp = PredictorState(tif); + tsize_t stride = sp->stride; + char* cp = (char*) cp0; + + if (cc > stride) { + cc -= stride; + /* + * Pipeline the most common cases. + */ + if (stride == 3) { + int r1, g1, b1; + int r2 = cp[0]; + int g2 = cp[1]; + int b2 = cp[2]; + do { + r1 = cp[3]; cp[3] = r1-r2; r2 = r1; + g1 = cp[4]; cp[4] = g1-g2; g2 = g1; + b1 = cp[5]; cp[5] = b1-b2; b2 = b1; + cp += 3; + } while ((int32)(cc -= 3) > 0); + } else if (stride == 4) { + int r1, g1, b1, a1; + int r2 = cp[0]; + int g2 = cp[1]; + int b2 = cp[2]; + int a2 = cp[3]; + do { + r1 = cp[4]; cp[4] = r1-r2; r2 = r1; + g1 = cp[5]; cp[5] = g1-g2; g2 = g1; + b1 = cp[6]; cp[6] = b1-b2; b2 = b1; + a1 = cp[7]; cp[7] = a1-a2; a2 = a1; + cp += 4; + } while ((int32)(cc -= 4) > 0); + } else { + cp += cc - 1; + do { + REPEAT4(stride, cp[stride] -= cp[0]; cp--) + } while ((int32)(cc -= stride) > 0); + } + } +} + +static void +horDiff16(TIFF* tif, tidata_t cp0, tsize_t cc) +{ + TIFFPredictorState* sp = PredictorState(tif); + tsize_t stride = sp->stride; + int16 *wp = (int16*) cp0; + tsize_t wc = cc/2; + + if (wc > stride) { + wc -= stride; + wp += wc - 1; + do { + REPEAT4(stride, wp[stride] -= wp[0]; wp--) + wc -= stride; + } while ((int32) wc > 0); + } +} + +static int +PredictorEncodeRow(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + TIFFPredictorState *sp = PredictorState(tif); + + assert(sp != NULL); + assert(sp->pfunc != NULL); + assert(sp->coderow != NULL); +/* XXX horizontal differencing alters user's data XXX */ + (*sp->pfunc)(tif, bp, cc); + return ((*sp->coderow)(tif, bp, cc, s)); +} + +static int +PredictorEncodeTile(TIFF* tif, tidata_t bp0, tsize_t cc0, tsample_t s) +{ + TIFFPredictorState *sp = PredictorState(tif); + tsize_t cc = cc0, rowsize; + u_char* bp = bp0; + + assert(sp != NULL); + assert(sp->pfunc != NULL); + assert(sp->codetile != NULL); + rowsize = sp->rowsize; + assert(rowsize > 0); + while ((long)cc > 0) { + (*sp->pfunc)(tif, bp, (tsize_t) rowsize); + cc -= rowsize; + bp += rowsize; + } + return ((*sp->codetile)(tif, bp0, cc0, s)); +} + +#define FIELD_PREDICTOR (FIELD_CODEC+0) /* XXX */ + +static const TIFFFieldInfo predictFieldInfo[] = { + { TIFFTAG_PREDICTOR, 1, 1, TIFF_SHORT, FIELD_PREDICTOR, + FALSE, FALSE, "Predictor" }, +}; +#define N(a) (sizeof (a) / sizeof (a[0])) + +static int +PredictorVSetField(TIFF* tif, ttag_t tag, va_list ap) +{ + TIFFPredictorState *sp = PredictorState(tif); + + switch (tag) { + case TIFFTAG_PREDICTOR: + sp->predictor = (uint16) va_arg(ap, int); + TIFFSetFieldBit(tif, FIELD_PREDICTOR); + break; + default: + return (*sp->vsetparent)(tif, tag, ap); + } + tif->tif_flags |= TIFF_DIRTYDIRECT; + return (1); +} + +static int +PredictorVGetField(TIFF* tif, ttag_t tag, va_list ap) +{ + TIFFPredictorState *sp = PredictorState(tif); + + switch (tag) { + case TIFFTAG_PREDICTOR: + *va_arg(ap, uint16*) = sp->predictor; + break; + default: + return (*sp->vgetparent)(tif, tag, ap); + } + return (1); +} + +static void +PredictorPrintDir(TIFF* tif, FILE* fd, long flags) +{ + TIFFPredictorState* sp = PredictorState(tif); + + (void) flags; + if (TIFFFieldSet(tif,FIELD_PREDICTOR)) { + fprintf(fd, " Predictor: "); + switch (sp->predictor) { + case 1: fprintf(fd, "none "); break; + case 2: fprintf(fd, "horizontal differencing "); break; + } + fprintf(fd, "%u (0x%x)\n", sp->predictor, sp->predictor); + } + if (sp->printdir) + (*sp->printdir)(tif, fd, flags); +} + +int +TIFFPredictorInit(TIFF* tif) +{ + TIFFPredictorState* sp = PredictorState(tif); + + /* + * Merge codec-specific tag information and + * override parent get/set field methods. + */ + _TIFFMergeFieldInfo(tif, predictFieldInfo, N(predictFieldInfo)); + sp->vgetparent = tif->tif_vgetfield; + tif->tif_vgetfield = PredictorVGetField;/* hook for predictor tag */ + sp->vsetparent = tif->tif_vsetfield; + tif->tif_vsetfield = PredictorVSetField;/* hook for predictor tag */ + sp->printdir = tif->tif_printdir; + tif->tif_printdir = PredictorPrintDir; /* hook for predictor tag */ + + sp->setupdecode = tif->tif_setupdecode; + tif->tif_setupdecode = PredictorSetupDecode; + sp->setupencode = tif->tif_setupencode; + tif->tif_setupencode = PredictorSetupEncode; + + sp->predictor = 1; /* default value */ + sp->pfunc = NULL; /* no predictor routine */ + return (1); +} diff --git a/libtiff/tif_predict.h b/libtiff/tif_predict.h new file mode 100755 index 0000000..ea6b4e7 --- /dev/null +++ b/libtiff/tif_predict.h @@ -0,0 +1,61 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_predict.h,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1995-1997 Sam Leffler + * Copyright (c) 1995-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#ifndef _TIFFPREDICT_ +#define _TIFFPREDICT_ +/* + * ``Library-private'' Support for the Predictor Tag + */ + +/* + * Codecs that want to support the Predictor tag must place + * this structure first in their private state block so that + * the predictor code can cast tif_data to find its state. + */ +typedef struct { + int predictor; /* predictor tag value */ + int stride; /* sample stride over data */ + tsize_t rowsize; /* tile/strip row size */ + + TIFFPostMethod pfunc; /* horizontal differencer/accumulator */ + TIFFCodeMethod coderow; /* parent codec encode/decode row */ + TIFFCodeMethod codestrip; /* parent codec encode/decode strip */ + TIFFCodeMethod codetile; /* parent codec encode/decode tile */ + TIFFVGetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ + TIFFPrintMethod printdir; /* super-class method */ + TIFFBoolMethod setupdecode; /* super-class method */ + TIFFBoolMethod setupencode; /* super-class method */ +} TIFFPredictorState; + +#if defined(__cplusplus) +extern "C" { +#endif +extern int TIFFPredictorInit(TIFF*); +#if defined(__cplusplus) +} +#endif +#endif /* _TIFFPREDICT_ */ diff --git a/libtiff/tif_print.c b/libtiff/tif_print.c new file mode 100755 index 0000000..c9cc1a0 --- /dev/null +++ b/libtiff/tif_print.c @@ -0,0 +1,519 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_print.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * Directory Printing Support + */ +#include "tiffiop.h" +#include + +#include + +static const char *photoNames[] = { + "min-is-white", /* PHOTOMETRIC_MINISWHITE */ + "min-is-black", /* PHOTOMETRIC_MINISBLACK */ + "RGB color", /* PHOTOMETRIC_RGB */ + "palette color (RGB from colormap)", /* PHOTOMETRIC_PALETTE */ + "transparency mask", /* PHOTOMETRIC_MASK */ + "separated", /* PHOTOMETRIC_SEPARATED */ + "YCbCr", /* PHOTOMETRIC_YCBCR */ + "7 (0x7)", + "CIE L*a*b*", /* PHOTOMETRIC_CIELAB */ +}; +#define NPHOTONAMES (sizeof (photoNames) / sizeof (photoNames[0])) + +static const char *orientNames[] = { + "0 (0x0)", + "row 0 top, col 0 lhs", /* ORIENTATION_TOPLEFT */ + "row 0 top, col 0 rhs", /* ORIENTATION_TOPRIGHT */ + "row 0 bottom, col 0 rhs", /* ORIENTATION_BOTRIGHT */ + "row 0 bottom, col 0 lhs", /* ORIENTATION_BOTLEFT */ + "row 0 lhs, col 0 top", /* ORIENTATION_LEFTTOP */ + "row 0 rhs, col 0 top", /* ORIENTATION_RIGHTTOP */ + "row 0 rhs, col 0 bottom", /* ORIENTATION_RIGHTBOT */ + "row 0 lhs, col 0 bottom", /* ORIENTATION_LEFTBOT */ +}; +#define NORIENTNAMES (sizeof (orientNames) / sizeof (orientNames[0])) + +/* + * Print the contents of the current directory + * to the specified stdio file stream. + */ +void +TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) +{ + register TIFFDirectory *td; + char *sep; + uint16 i; + long l, n; + + fprintf(fd, "TIFF Directory at offset 0x%lx\n", tif->tif_diroff); + td = &tif->tif_dir; + if (TIFFFieldSet(tif,FIELD_SUBFILETYPE)) { + fprintf(fd, " Subfile Type:"); + sep = " "; + if (td->td_subfiletype & FILETYPE_REDUCEDIMAGE) { + fprintf(fd, "%sreduced-resolution image", sep); + sep = "/"; + } + if (td->td_subfiletype & FILETYPE_PAGE) { + fprintf(fd, "%smulti-page document", sep); + sep = "/"; + } + if (td->td_subfiletype & FILETYPE_MASK) + fprintf(fd, "%stransparency mask", sep); + fprintf(fd, " (%lu = 0x%lx)\n", + (long) td->td_subfiletype, (long) td->td_subfiletype); + } + if (TIFFFieldSet(tif,FIELD_IMAGEDIMENSIONS)) { + fprintf(fd, " Image Width: %lu Image Length: %lu", + (u_long) td->td_imagewidth, (u_long) td->td_imagelength); + if (TIFFFieldSet(tif,FIELD_IMAGEDEPTH)) + fprintf(fd, " Image Depth: %lu", + (u_long) td->td_imagedepth); + fprintf(fd, "\n"); + } + + /* Begin Pixar */ + if (TIFFFieldSet(tif,FIELD_IMAGEFULLWIDTH) || + TIFFFieldSet(tif,FIELD_IMAGEFULLLENGTH)) { + fprintf(fd, " Pixar Full Image Width: %lu Full Image Length: %lu\n", + (u_long) td->td_imagefullwidth, + (u_long) td->td_imagefulllength); + } + if (TIFFFieldSet(tif,FIELD_TEXTUREFORMAT)) + _TIFFprintAsciiTag(fd, "Texture Format", td->td_textureformat); + if (TIFFFieldSet(tif,FIELD_WRAPMODES)) + _TIFFprintAsciiTag(fd, "Texture Wrap Modes", td->td_wrapmodes); + if (TIFFFieldSet(tif,FIELD_FOVCOT)) + fprintf(fd, " Field of View Cotangent: %g\n", td->td_fovcot); + if (TIFFFieldSet(tif,FIELD_MATRIX_WORLDTOSCREEN)) { + typedef float Matrix[4][4]; + Matrix* m = (Matrix*)td->td_matrixWorldToScreen; + + fprintf(fd, " Matrix NP:\n\t%g %g %g %g\n\t%g %g %g %g\n\t%g %g %g %g\n\t%g %g %g %g\n", + (*m)[0][0], (*m)[0][1], (*m)[0][2], (*m)[0][3], + (*m)[1][0], (*m)[1][1], (*m)[1][2], (*m)[1][3], + (*m)[2][0], (*m)[2][1], (*m)[2][2], (*m)[2][3], + (*m)[3][0], (*m)[3][1], (*m)[3][2], (*m)[3][3]); + } + if (TIFFFieldSet(tif,FIELD_MATRIX_WORLDTOCAMERA)) { + typedef float Matrix[4][4]; + Matrix* m = (Matrix*)td->td_matrixWorldToCamera; + + fprintf(fd, " Matrix Nl:\n\t%g %g %g %g\n\t%g %g %g %g\n\t%g %g %g %g\n\t%g %g %g %g\n", + (*m)[0][0], (*m)[0][1], (*m)[0][2], (*m)[0][3], + (*m)[1][0], (*m)[1][1], (*m)[1][2], (*m)[1][3], + (*m)[2][0], (*m)[2][1], (*m)[2][2], (*m)[2][3], + (*m)[3][0], (*m)[3][1], (*m)[3][2], (*m)[3][3]); + } + /* End Pixar */ + + if (TIFFFieldSet(tif,FIELD_TILEDIMENSIONS)) { + fprintf(fd, " Tile Width: %lu Tile Length: %lu", + (u_long) td->td_tilewidth, (u_long) td->td_tilelength); + if (TIFFFieldSet(tif,FIELD_TILEDEPTH)) + fprintf(fd, " Tile Depth: %lu", + (u_long) td->td_tiledepth); + fprintf(fd, "\n"); + } + if (TIFFFieldSet(tif,FIELD_RESOLUTION)) { + fprintf(fd, " Resolution: %g, %g", + td->td_xresolution, td->td_yresolution); + if (TIFFFieldSet(tif,FIELD_RESOLUTIONUNIT)) { + switch (td->td_resolutionunit) { + case RESUNIT_NONE: + fprintf(fd, " (unitless)"); + break; + case RESUNIT_INCH: + fprintf(fd, " pixels/inch"); + break; + case RESUNIT_CENTIMETER: + fprintf(fd, " pixels/cm"); + break; + default: + fprintf(fd, " (unit %u = 0x%x)", + td->td_resolutionunit, + td->td_resolutionunit); + break; + } + } + fprintf(fd, "\n"); + } + if (TIFFFieldSet(tif,FIELD_POSITION)) + fprintf(fd, " Position: %g, %g\n", + td->td_xposition, td->td_yposition); + if (TIFFFieldSet(tif,FIELD_BITSPERSAMPLE)) + fprintf(fd, " Bits/Sample: %u\n", td->td_bitspersample); + if (TIFFFieldSet(tif,FIELD_SAMPLEFORMAT)) { + fprintf(fd, " Sample Format: "); + switch (td->td_sampleformat) { + case SAMPLEFORMAT_VOID: + fprintf(fd, "void\n"); + break; + case SAMPLEFORMAT_INT: + fprintf(fd, "signed integer\n"); + break; + case SAMPLEFORMAT_UINT: + fprintf(fd, "unsigned integer\n"); + break; + case SAMPLEFORMAT_IEEEFP: + fprintf(fd, "IEEE floating point\n"); + break; + default: + fprintf(fd, "%u (0x%x)\n", + td->td_sampleformat, td->td_sampleformat); + break; + } + } + if (TIFFFieldSet(tif,FIELD_COMPRESSION)) { + const TIFFCodec* c = TIFFFindCODEC(td->td_compression); + fprintf(fd, " Compression Scheme: "); + if (c) + fprintf(fd, "%s\n", c->name); + else + fprintf(fd, "%u (0x%x)\n", + td->td_compression, td->td_compression); + } + if (TIFFFieldSet(tif,FIELD_PHOTOMETRIC)) { + fprintf(fd, " Photometric Interpretation: "); + if (td->td_photometric < NPHOTONAMES) + fprintf(fd, "%s\n", photoNames[td->td_photometric]); + else { + switch (td->td_photometric) { + case PHOTOMETRIC_LOGL: + fprintf(fd, "CIE Log2(L)\n"); + break; + case PHOTOMETRIC_LOGLUV: + fprintf(fd, "CIE Log2(L) (u',v')\n"); + break; + default: + fprintf(fd, "%u (0x%x)\n", + td->td_photometric, td->td_photometric); + break; + } + } + } + if (TIFFFieldSet(tif,FIELD_EXTRASAMPLES) && td->td_extrasamples) { + fprintf(fd, " Extra Samples: %u<", td->td_extrasamples); + sep = ""; + for (i = 0; i < td->td_extrasamples; i++) { + switch (td->td_sampleinfo[i]) { + case EXTRASAMPLE_UNSPECIFIED: + fprintf(fd, "%sunspecified", sep); + break; + case EXTRASAMPLE_ASSOCALPHA: + fprintf(fd, "%sassoc-alpha", sep); + break; + case EXTRASAMPLE_UNASSALPHA: + fprintf(fd, "%sunassoc-alpha", sep); + break; + default: + fprintf(fd, "%s%u (0x%x)", sep, + td->td_sampleinfo[i], td->td_sampleinfo[i]); + break; + } + sep = ", "; + } + fprintf(fd, ">\n"); + } + if (TIFFFieldSet(tif,FIELD_STONITS)) { + fprintf(fd, " Sample to Nits conversion factor: %.4e\n", + td->td_stonits); + } +#ifdef CMYK_SUPPORT + if (TIFFFieldSet(tif,FIELD_INKSET)) { + fprintf(fd, " Ink Set: "); + switch (td->td_inkset) { + case INKSET_CMYK: + fprintf(fd, "CMYK\n"); + break; + default: + fprintf(fd, "%u (0x%x)\n", + td->td_inkset, td->td_inkset); + break; + } + } + if (TIFFFieldSet(tif,FIELD_INKNAMES)) { + char* cp; + fprintf(fd, " Ink Names: "); + i = td->td_samplesperpixel; + sep = ""; + for (cp = td->td_inknames; i > 0; cp = strchr(cp,'\0')+1, i--) { + fprintf(fd, "%s", sep); + _TIFFprintAscii(fd, cp); + sep = ", "; + } + } + if (TIFFFieldSet(tif,FIELD_NUMBEROFINKS)) + fprintf(fd, " Number of Inks: %u\n", td->td_ninks); + if (TIFFFieldSet(tif,FIELD_DOTRANGE)) + fprintf(fd, " Dot Range: %u-%u\n", + td->td_dotrange[0], td->td_dotrange[1]); + if (TIFFFieldSet(tif,FIELD_TARGETPRINTER)) + _TIFFprintAsciiTag(fd, "Target Printer", td->td_targetprinter); +#endif + if (TIFFFieldSet(tif,FIELD_THRESHHOLDING)) { + fprintf(fd, " Thresholding: "); + switch (td->td_threshholding) { + case THRESHHOLD_BILEVEL: + fprintf(fd, "bilevel art scan\n"); + break; + case THRESHHOLD_HALFTONE: + fprintf(fd, "halftone or dithered scan\n"); + break; + case THRESHHOLD_ERRORDIFFUSE: + fprintf(fd, "error diffused\n"); + break; + default: + fprintf(fd, "%u (0x%x)\n", + td->td_threshholding, td->td_threshholding); + break; + } + } + if (TIFFFieldSet(tif,FIELD_FILLORDER)) { + fprintf(fd, " FillOrder: "); + switch (td->td_fillorder) { + case FILLORDER_MSB2LSB: + fprintf(fd, "msb-to-lsb\n"); + break; + case FILLORDER_LSB2MSB: + fprintf(fd, "lsb-to-msb\n"); + break; + default: + fprintf(fd, "%u (0x%x)\n", + td->td_fillorder, td->td_fillorder); + break; + } + } +#ifdef YCBCR_SUPPORT + if (TIFFFieldSet(tif,FIELD_YCBCRSUBSAMPLING)) + fprintf(fd, " YCbCr Subsampling: %u, %u\n", + td->td_ycbcrsubsampling[0], td->td_ycbcrsubsampling[1]); + if (TIFFFieldSet(tif,FIELD_YCBCRPOSITIONING)) { + fprintf(fd, " YCbCr Positioning: "); + switch (td->td_ycbcrpositioning) { + case YCBCRPOSITION_CENTERED: + fprintf(fd, "centered\n"); + break; + case YCBCRPOSITION_COSITED: + fprintf(fd, "cosited\n"); + break; + default: + fprintf(fd, "%u (0x%x)\n", + td->td_ycbcrpositioning, td->td_ycbcrpositioning); + break; + } + } + if (TIFFFieldSet(tif,FIELD_YCBCRCOEFFICIENTS)) + fprintf(fd, " YCbCr Coefficients: %g, %g, %g\n", + td->td_ycbcrcoeffs[0], + td->td_ycbcrcoeffs[1], + td->td_ycbcrcoeffs[2]); +#endif + if (TIFFFieldSet(tif,FIELD_HALFTONEHINTS)) + fprintf(fd, " Halftone Hints: light %u dark %u\n", + td->td_halftonehints[0], td->td_halftonehints[1]); + if (TIFFFieldSet(tif,FIELD_ARTIST)) + _TIFFprintAsciiTag(fd, "Artist", td->td_artist); + if (TIFFFieldSet(tif,FIELD_DATETIME)) + _TIFFprintAsciiTag(fd, "Date & Time", td->td_datetime); + if (TIFFFieldSet(tif,FIELD_HOSTCOMPUTER)) + _TIFFprintAsciiTag(fd, "Host Computer", td->td_hostcomputer); + if (TIFFFieldSet(tif,FIELD_SOFTWARE)) + _TIFFprintAsciiTag(fd, "Software", td->td_software); + if (TIFFFieldSet(tif,FIELD_DOCUMENTNAME)) + _TIFFprintAsciiTag(fd, "Document Name", td->td_documentname); + if (TIFFFieldSet(tif,FIELD_IMAGEDESCRIPTION)) + _TIFFprintAsciiTag(fd, "Image Description", td->td_imagedescription); + if (TIFFFieldSet(tif,FIELD_MAKE)) + _TIFFprintAsciiTag(fd, "Make", td->td_make); + if (TIFFFieldSet(tif,FIELD_MODEL)) + _TIFFprintAsciiTag(fd, "Model", td->td_model); + if (TIFFFieldSet(tif,FIELD_ORIENTATION)) { + fprintf(fd, " Orientation: "); + if (td->td_orientation < NORIENTNAMES) + fprintf(fd, "%s\n", orientNames[td->td_orientation]); + else + fprintf(fd, "%u (0x%x)\n", + td->td_orientation, td->td_orientation); + } + if (TIFFFieldSet(tif,FIELD_SAMPLESPERPIXEL)) + fprintf(fd, " Samples/Pixel: %u\n", td->td_samplesperpixel); + if (TIFFFieldSet(tif,FIELD_ROWSPERSTRIP)) { + fprintf(fd, " Rows/Strip: "); + if (td->td_rowsperstrip == (uint32) -1) + fprintf(fd, "(infinite)\n"); + else + fprintf(fd, "%lu\n", (u_long) td->td_rowsperstrip); + } + if (TIFFFieldSet(tif,FIELD_MINSAMPLEVALUE)) + fprintf(fd, " Min Sample Value: %u\n", td->td_minsamplevalue); + if (TIFFFieldSet(tif,FIELD_MAXSAMPLEVALUE)) + fprintf(fd, " Max Sample Value: %u\n", td->td_maxsamplevalue); + if (TIFFFieldSet(tif,FIELD_SMINSAMPLEVALUE)) + fprintf(fd, " SMin Sample Value: %g\n", + td->td_sminsamplevalue); + if (TIFFFieldSet(tif,FIELD_SMAXSAMPLEVALUE)) + fprintf(fd, " SMax Sample Value: %g\n", + td->td_smaxsamplevalue); + if (TIFFFieldSet(tif,FIELD_PLANARCONFIG)) { + fprintf(fd, " Planar Configuration: "); + switch (td->td_planarconfig) { + case PLANARCONFIG_CONTIG: + fprintf(fd, "single image plane\n"); + break; + case PLANARCONFIG_SEPARATE: + fprintf(fd, "separate image planes\n"); + break; + default: + fprintf(fd, "%u (0x%x)\n", + td->td_planarconfig, td->td_planarconfig); + break; + } + } + if (TIFFFieldSet(tif,FIELD_PAGENAME)) + _TIFFprintAsciiTag(fd, "Page Name", td->td_pagename); + if (TIFFFieldSet(tif,FIELD_PAGENUMBER)) + fprintf(fd, " Page Number: %u-%u\n", + td->td_pagenumber[0], td->td_pagenumber[1]); + if (TIFFFieldSet(tif,FIELD_COLORMAP)) { + fprintf(fd, " Color Map: "); + if (flags & TIFFPRINT_COLORMAP) { + fprintf(fd, "\n"); + n = 1L<td_bitspersample; + for (l = 0; l < n; l++) + fprintf(fd, " %5lu: %5u %5u %5u\n", + l, + td->td_colormap[0][l], + td->td_colormap[1][l], + td->td_colormap[2][l]); + } else + fprintf(fd, "(present)\n"); + } +#ifdef COLORIMETRY_SUPPORT + if (TIFFFieldSet(tif,FIELD_WHITEPOINT)) + fprintf(fd, " White Point: %g-%g\n", + td->td_whitepoint[0], td->td_whitepoint[1]); + if (TIFFFieldSet(tif,FIELD_PRIMARYCHROMAS)) + fprintf(fd, " Primary Chromaticities: %g,%g %g,%g %g,%g\n", + td->td_primarychromas[0], td->td_primarychromas[1], + td->td_primarychromas[2], td->td_primarychromas[3], + td->td_primarychromas[4], td->td_primarychromas[5]); + if (TIFFFieldSet(tif,FIELD_REFBLACKWHITE)) { + fprintf(fd, " Reference Black/White:\n"); + for (i = 0; i < td->td_samplesperpixel; i++) + fprintf(fd, " %2d: %5g %5g\n", + i, + td->td_refblackwhite[2*i+0], + td->td_refblackwhite[2*i+1]); + } + if (TIFFFieldSet(tif,FIELD_TRANSFERFUNCTION)) { + fprintf(fd, " Transfer Function: "); + if (flags & TIFFPRINT_CURVES) { + fprintf(fd, "\n"); + n = 1L<td_bitspersample; + for (l = 0; l < n; l++) { + fprintf(fd, " %2lu: %5u", + l, td->td_transferfunction[0][l]); + for (i = 1; i < td->td_samplesperpixel; i++) + fprintf(fd, " %5u", + td->td_transferfunction[i][l]); + fputc('\n', fd); + } + } else + fprintf(fd, "(present)\n"); + } +#endif +#ifdef ICC_SUPPORT + if (TIFFFieldSet(tif,FIELD_ICCPROFILE)) + fprintf(fd, " ICC Profile: , %lu bytes\n", + (u_long) td->td_profileLength); +#endif +#ifdef PHOTOSHOP_SUPPORT + if (TIFFFieldSet(tif,FIELD_PHOTOSHOP)) + fprintf(fd, " Photoshop Data: , %lu bytes\n", + (u_long) td->td_photoshopLength); +#endif +#ifdef IPTC_SUPPORT + if (TIFFFieldSet(tif,FIELD_RICHTIFFIPTC)) + fprintf(fd, " RichTIFFIPTC Data: , %lu bytes\n", + (u_long) td->td_richtiffiptcLength); +#endif +#if SUBIFD_SUPPORT + if (TIFFFieldSet(tif, FIELD_SUBIFD)) { + fprintf(fd, " SubIFD Offsets:"); + for (i = 0; i < td->td_nsubifd; i++) + fprintf(fd, " %5lu", (long) td->td_subifd[i]); + fputc('\n', fd); + } +#endif + if (tif->tif_printdir) + (*tif->tif_printdir)(tif, fd, flags); + if ((flags & TIFFPRINT_STRIPS) && + TIFFFieldSet(tif,FIELD_STRIPOFFSETS)) { + tstrip_t s; + + fprintf(fd, " %lu %s:\n", + (long) td->td_nstrips, + isTiled(tif) ? "Tiles" : "Strips"); + for (s = 0; s < td->td_nstrips; s++) + fprintf(fd, " %3lu: [%8lu, %8lu]\n", + (u_long) s, + (u_long) td->td_stripoffset[s], + (u_long) td->td_stripbytecount[s]); + } +} + +void +_TIFFprintAscii(FILE* fd, const char* cp) +{ + for (; *cp != '\0'; cp++) { + const char* tp; + + if (isprint(*cp)) { + fputc(*cp, fd); + continue; + } + for (tp = "\tt\bb\rr\nn\vv"; *tp; tp++) + if (*tp++ == *cp) + break; + if (*tp) + fprintf(fd, "\\%c", *tp); + else + fprintf(fd, "\\%03o", *cp & 0xff); + } +} + +void +_TIFFprintAsciiTag(FILE* fd, const char* name, const char* value) +{ + fprintf(fd, " %s: \"", name); + _TIFFprintAscii(fd, value); + fprintf(fd, "\"\n"); +} diff --git a/libtiff/tif_read.c b/libtiff/tif_read.c new file mode 100755 index 0000000..da336fc --- /dev/null +++ b/libtiff/tif_read.c @@ -0,0 +1,622 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_read.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * Scanline-oriented Read Support + */ +#include "tiffiop.h" +#include +#include + +static int TIFFFillStrip(TIFF*, tstrip_t); +static int TIFFFillTile(TIFF*, ttile_t); +static int TIFFStartStrip(TIFF*, tstrip_t); +static int TIFFStartTile(TIFF*, ttile_t); +static int TIFFCheckRead(TIFF*, int); + +#define NOSTRIP ((tstrip_t) -1) /* undefined state */ +#define NOTILE ((ttile_t) -1) /* undefined state */ + +/* + * Seek to a random row+sample in a file. + */ +static int +TIFFSeek(TIFF* tif, uint32 row, tsample_t sample) +{ + register TIFFDirectory *td = &tif->tif_dir; + tstrip_t strip; + + if (row >= td->td_imagelength) { /* out of range */ + TIFFError(tif->tif_name, "%lu: Row out of range, max %lu", + (u_long) row, (u_long) td->td_imagelength); + return (0); + } + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { + if (sample >= td->td_samplesperpixel) { + TIFFError(tif->tif_name, + "%lu: Sample out of range, max %lu", + (u_long) sample, (u_long) td->td_samplesperpixel); + return (0); + } + strip = sample*td->td_stripsperimage + row/td->td_rowsperstrip; + } else + strip = row / td->td_rowsperstrip; + if (strip != tif->tif_curstrip) { /* different strip, refill */ + if (!TIFFFillStrip(tif, strip)) + return (0); + } else if (row < tif->tif_row) { + /* + * Moving backwards within the same strip: backup + * to the start and then decode forward (below). + * + * NB: If you're planning on lots of random access within a + * strip, it's better to just read and decode the entire + * strip, and then access the decoded data in a random fashion. + */ + if (!TIFFStartStrip(tif, strip)) + return (0); + } + if (row != tif->tif_row) { + /* + * Seek forward to the desired row. + */ + if (!(*tif->tif_seek)(tif, row - tif->tif_row)) + return (0); + tif->tif_row = row; + } + return (1); +} + +int +TIFFReadScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) +{ + int e; + + if (!TIFFCheckRead(tif, 0)) + return (-1); + if( (e = TIFFSeek(tif, row, sample)) != 0) { + /* + * Decompress desired row into user buffer. + */ + e = (*tif->tif_decoderow) + (tif, (tidata_t) buf, tif->tif_scanlinesize, sample); + tif->tif_row++; + if (e) + (*tif->tif_postdecode)(tif, (tidata_t) buf, + tif->tif_scanlinesize); + } + return (e > 0 ? 1 : -1); +} + +/* + * Read a strip of data and decompress the specified + * amount into the user-supplied buffer. + */ +tsize_t +TIFFReadEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) +{ + TIFFDirectory *td = &tif->tif_dir; + uint32 nrows; + tsize_t stripsize; + + if (!TIFFCheckRead(tif, 0)) + return (-1); + if (strip >= td->td_nstrips) { + TIFFError(tif->tif_name, "%ld: Strip out of range, max %ld", + (long) strip, (long) td->td_nstrips); + return (-1); + } + /* + * Calculate the strip size according to the number of + * rows in the strip (check for truncated last strip). + */ + if (strip != td->td_nstrips-1 || + (nrows = td->td_imagelength % td->td_rowsperstrip) == 0) + nrows = td->td_rowsperstrip; + stripsize = TIFFVStripSize(tif, nrows); + if (size == (tsize_t) -1) + size = stripsize; + else if (size > stripsize) + size = stripsize; + if (TIFFFillStrip(tif, strip) && (*tif->tif_decodestrip)(tif, + (tidata_t) buf, size, (tsample_t)(strip / td->td_stripsperimage))) { + (*tif->tif_postdecode)(tif, (tidata_t) buf, size); + return (size); + } else + return ((tsize_t) -1); +} + +static tsize_t +TIFFReadRawStrip1(TIFF* tif, + tstrip_t strip, tdata_t buf, tsize_t size, const char* module) +{ + TIFFDirectory *td = &tif->tif_dir; + + if (!isMapped(tif)) { + tsize_t cc; + + if (!SeekOK(tif, td->td_stripoffset[strip])) { + TIFFError(module, + "%s: Seek error at scanline %lu, strip %lu", + tif->tif_name, + (u_long) tif->tif_row, (u_long) strip); + return (-1); + } + cc = TIFFReadFile(tif, buf, size); + if (cc != size) { + TIFFError(module, + "%s: Read error at scanline %lu; got %lu bytes, expected %lu", + tif->tif_name, + (u_long) tif->tif_row, + (u_long) cc, + (u_long) size); + return (-1); + } + } else { + if (td->td_stripoffset[strip] + size > tif->tif_size) { + TIFFError(module, + "%s: Read error at scanline %lu, strip %lu; got %lu bytes, expected %lu", + tif->tif_name, + (u_long) tif->tif_row, + (u_long) strip, + (u_long) tif->tif_size - td->td_stripoffset[strip], + (u_long) size); + return (-1); + } + _TIFFmemcpy(buf, tif->tif_base + td->td_stripoffset[strip], size); + } + return (size); +} + +/* + * Read a strip of data from the file. + */ +tsize_t +TIFFReadRawStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) +{ + static const char module[] = "TIFFReadRawStrip"; + TIFFDirectory *td = &tif->tif_dir; + tsize_t bytecount; + + if (!TIFFCheckRead(tif, 0)) + return ((tsize_t) -1); + if (strip >= td->td_nstrips) { + TIFFError(tif->tif_name, "%lu: Strip out of range, max %lu", + (u_long) strip, (u_long) td->td_nstrips); + return ((tsize_t) -1); + } + bytecount = td->td_stripbytecount[strip]; + if (bytecount <= 0) { + TIFFError(tif->tif_name, + "%lu: Invalid strip byte count, strip %lu", + (u_long) bytecount, (u_long) strip); + return ((tsize_t) -1); + } + if (size != (tsize_t)-1 && size < bytecount) + bytecount = size; + return (TIFFReadRawStrip1(tif, strip, buf, bytecount, module)); +} + +/* + * Read the specified strip and setup for decoding. + * The data buffer is expanded, as necessary, to + * hold the strip's data. + */ +static int +TIFFFillStrip(TIFF* tif, tstrip_t strip) +{ + static const char module[] = "TIFFFillStrip"; + TIFFDirectory *td = &tif->tif_dir; + tsize_t bytecount; + + bytecount = td->td_stripbytecount[strip]; + if (bytecount <= 0) { + TIFFError(tif->tif_name, + "%lu: Invalid strip byte count, strip %lu", + (u_long) bytecount, (u_long) strip); + return (0); + } + if (isMapped(tif) && + (isFillOrder(tif, td->td_fillorder) || (tif->tif_flags & TIFF_NOBITREV))) { + /* + * The image is mapped into memory and we either don't + * need to flip bits or the compression routine is going + * to handle this operation itself. In this case, avoid + * copying the raw data and instead just reference the + * data from the memory mapped file image. This assumes + * that the decompression routines do not modify the + * contents of the raw data buffer (if they try to, + * the application will get a fault since the file is + * mapped read-only). + */ + if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) + _TIFFfree(tif->tif_rawdata); + tif->tif_flags &= ~TIFF_MYBUFFER; + if ( td->td_stripoffset[strip] + bytecount > tif->tif_size) { + /* + * This error message might seem strange, but it's + * what would happen if a read were done instead. + */ + TIFFError(module, + "%s: Read error on strip %lu; got %lu bytes, expected %lu", + tif->tif_name, + (u_long) strip, + (u_long) tif->tif_size - td->td_stripoffset[strip], + (u_long) bytecount); + tif->tif_curstrip = NOSTRIP; + return (0); + } + tif->tif_rawdatasize = bytecount; + tif->tif_rawdata = tif->tif_base + td->td_stripoffset[strip]; + } else { + /* + * Expand raw data buffer, if needed, to + * hold data strip coming from file + * (perhaps should set upper bound on + * the size of a buffer we'll use?). + */ + if (bytecount > tif->tif_rawdatasize) { + tif->tif_curstrip = NOSTRIP; + if ((tif->tif_flags & TIFF_MYBUFFER) == 0) { + TIFFError(module, + "%s: Data buffer too small to hold strip %lu", + tif->tif_name, (u_long) strip); + return (0); + } + if (!TIFFReadBufferSetup(tif, 0, + TIFFroundup(bytecount, 1024))) + return (0); + } + if (TIFFReadRawStrip1(tif, strip, (u_char *)tif->tif_rawdata, + bytecount, module) != bytecount) + return (0); + if (!isFillOrder(tif, td->td_fillorder) && + (tif->tif_flags & TIFF_NOBITREV) == 0) + TIFFReverseBits(tif->tif_rawdata, bytecount); + } + return (TIFFStartStrip(tif, strip)); +} + +/* + * Tile-oriented Read Support + * Contributed by Nancy Cam (Silicon Graphics). + */ + +/* + * Read and decompress a tile of data. The + * tile is selected by the (x,y,z,s) coordinates. + */ +tsize_t +TIFFReadTile(TIFF* tif, + tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t s) +{ + if (!TIFFCheckRead(tif, 1) || !TIFFCheckTile(tif, x, y, z, s)) + return (-1); + return (TIFFReadEncodedTile(tif, + TIFFComputeTile(tif, x, y, z, s), buf, (tsize_t) -1)); +} + +/* + * Read a tile of data and decompress the specified + * amount into the user-supplied buffer. + */ +tsize_t +TIFFReadEncodedTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size) +{ + TIFFDirectory *td = &tif->tif_dir; + tsize_t tilesize = tif->tif_tilesize; + + if (!TIFFCheckRead(tif, 1)) + return (-1); + if (tile >= td->td_nstrips) { + TIFFError(tif->tif_name, "%ld: Tile out of range, max %ld", + (long) tile, (u_long) td->td_nstrips); + return (-1); + } + if (size == (tsize_t) -1) + size = tilesize; + else if (size > tilesize) + size = tilesize; + if (TIFFFillTile(tif, tile) && (*tif->tif_decodetile)(tif, + (tidata_t) buf, size, (tsample_t)(tile/td->td_stripsperimage))) { + (*tif->tif_postdecode)(tif, (tidata_t) buf, size); + return (size); + } else + return (-1); +} + +static tsize_t +TIFFReadRawTile1(TIFF* tif, + ttile_t tile, tdata_t buf, tsize_t size, const char* module) +{ + TIFFDirectory *td = &tif->tif_dir; + + if (!isMapped(tif)) { + tsize_t cc; + + if (!SeekOK(tif, td->td_stripoffset[tile])) { + TIFFError(module, + "%s: Seek error at row %ld, col %ld, tile %ld", + tif->tif_name, + (long) tif->tif_row, + (long) tif->tif_col, + (long) tile); + return ((tsize_t) -1); + } + cc = TIFFReadFile(tif, buf, size); + if (cc != size) { + TIFFError(module, + "%s: Read error at row %ld, col %ld; got %lu bytes, expected %lu", + tif->tif_name, + (long) tif->tif_row, + (long) tif->tif_col, + (u_long) cc, + (u_long) size); + return ((tsize_t) -1); + } + } else { + if (td->td_stripoffset[tile] + size > tif->tif_size) { + TIFFError(module, + "%s: Read error at row %ld, col %ld, tile %ld; got %lu bytes, expected %lu", + tif->tif_name, + (long) tif->tif_row, + (long) tif->tif_col, + (long) tile, + (u_long) tif->tif_size - td->td_stripoffset[tile], + (u_long) size); + return ((tsize_t) -1); + } + _TIFFmemcpy(buf, tif->tif_base + td->td_stripoffset[tile], size); + } + return (size); +} + +/* + * Read a tile of data from the file. + */ +tsize_t +TIFFReadRawTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size) +{ + static const char module[] = "TIFFReadRawTile"; + TIFFDirectory *td = &tif->tif_dir; + tsize_t bytecount; + + if (!TIFFCheckRead(tif, 1)) + return ((tsize_t) -1); + if (tile >= td->td_nstrips) { + TIFFError(tif->tif_name, "%lu: Tile out of range, max %lu", + (u_long) tile, (u_long) td->td_nstrips); + return ((tsize_t) -1); + } + bytecount = td->td_stripbytecount[tile]; + if (size != (tsize_t) -1 && size < bytecount) + bytecount = size; + return (TIFFReadRawTile1(tif, tile, buf, bytecount, module)); +} + +/* + * Read the specified tile and setup for decoding. + * The data buffer is expanded, as necessary, to + * hold the tile's data. + */ +static int +TIFFFillTile(TIFF* tif, ttile_t tile) +{ + static const char module[] = "TIFFFillTile"; + TIFFDirectory *td = &tif->tif_dir; + tsize_t bytecount; + + bytecount = td->td_stripbytecount[tile]; + if (bytecount <= 0) { + TIFFError(tif->tif_name, + "%lu: Invalid tile byte count, tile %lu", + (u_long) bytecount, (u_long) tile); + return (0); + } + if (isMapped(tif) && + (isFillOrder(tif, td->td_fillorder) || (tif->tif_flags & TIFF_NOBITREV))) { + /* + * The image is mapped into memory and we either don't + * need to flip bits or the compression routine is going + * to handle this operation itself. In this case, avoid + * copying the raw data and instead just reference the + * data from the memory mapped file image. This assumes + * that the decompression routines do not modify the + * contents of the raw data buffer (if they try to, + * the application will get a fault since the file is + * mapped read-only). + */ + if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) + _TIFFfree(tif->tif_rawdata); + tif->tif_flags &= ~TIFF_MYBUFFER; + if ( td->td_stripoffset[tile] + bytecount > tif->tif_size) { + tif->tif_curtile = NOTILE; + return (0); + } + tif->tif_rawdatasize = bytecount; + tif->tif_rawdata = tif->tif_base + td->td_stripoffset[tile]; + } else { + /* + * Expand raw data buffer, if needed, to + * hold data tile coming from file + * (perhaps should set upper bound on + * the size of a buffer we'll use?). + */ + if (bytecount > tif->tif_rawdatasize) { + tif->tif_curtile = NOTILE; + if ((tif->tif_flags & TIFF_MYBUFFER) == 0) { + TIFFError(module, + "%s: Data buffer too small to hold tile %ld", + tif->tif_name, (long) tile); + return (0); + } + if (!TIFFReadBufferSetup(tif, 0, + TIFFroundup(bytecount, 1024))) + return (0); + } + if (TIFFReadRawTile1(tif, tile, (u_char *)tif->tif_rawdata, + bytecount, module) != bytecount) + return (0); + if (!isFillOrder(tif, td->td_fillorder) && + (tif->tif_flags & TIFF_NOBITREV) == 0) + TIFFReverseBits(tif->tif_rawdata, bytecount); + } + return (TIFFStartTile(tif, tile)); +} + +/* + * Setup the raw data buffer in preparation for + * reading a strip of raw data. If the buffer + * is specified as zero, then a buffer of appropriate + * size is allocated by the library. Otherwise, + * the client must guarantee that the buffer is + * large enough to hold any individual strip of + * raw data. + */ +int +TIFFReadBufferSetup(TIFF* tif, tdata_t bp, tsize_t size) +{ + static const char module[] = "TIFFReadBufferSetup"; + + if (tif->tif_rawdata) { + if (tif->tif_flags & TIFF_MYBUFFER) + _TIFFfree(tif->tif_rawdata); + tif->tif_rawdata = NULL; + } + if (bp) { + tif->tif_rawdatasize = size; + tif->tif_rawdata = (tidata_t) bp; + tif->tif_flags &= ~TIFF_MYBUFFER; + } else { + tif->tif_rawdatasize = TIFFroundup(size, 1024); + tif->tif_rawdata = (tidata_t) _TIFFmalloc(tif->tif_rawdatasize); + tif->tif_flags |= TIFF_MYBUFFER; + } + if (tif->tif_rawdata == NULL) { + TIFFError(module, + "%s: No space for data buffer at scanline %ld", + tif->tif_name, (long) tif->tif_row); + tif->tif_rawdatasize = 0; + return (0); + } + return (1); +} + +/* + * Set state to appear as if a + * strip has just been read in. + */ +static int +TIFFStartStrip(TIFF* tif, tstrip_t strip) +{ + TIFFDirectory *td = &tif->tif_dir; + + if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { + if (!(*tif->tif_setupdecode)(tif)) + return (0); + tif->tif_flags |= TIFF_CODERSETUP; + } + tif->tif_curstrip = strip; + tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; + tif->tif_rawcp = tif->tif_rawdata; + tif->tif_rawcc = td->td_stripbytecount[strip]; + return ((*tif->tif_predecode)(tif, + (tsample_t)(strip / td->td_stripsperimage))); +} + +/* + * Set state to appear as if a + * tile has just been read in. + */ +static int +TIFFStartTile(TIFF* tif, ttile_t tile) +{ + TIFFDirectory *td = &tif->tif_dir; + + if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { + if (!(*tif->tif_setupdecode)(tif)) + return (0); + tif->tif_flags |= TIFF_CODERSETUP; + } + tif->tif_curtile = tile; + tif->tif_row = + (tile % TIFFhowmany(td->td_imagewidth, td->td_tilewidth)) * + td->td_tilelength; + tif->tif_col = + (tile % TIFFhowmany(td->td_imagelength, td->td_tilelength)) * + td->td_tilewidth; + tif->tif_rawcp = tif->tif_rawdata; + tif->tif_rawcc = td->td_stripbytecount[tile]; + return ((*tif->tif_predecode)(tif, + (tsample_t)(tile/td->td_stripsperimage))); +} + +static int +TIFFCheckRead(TIFF* tif, int tiles) +{ + if (tif->tif_mode == O_WRONLY) { + TIFFError(tif->tif_name, "File not open for reading"); + return (0); + } + if (tiles ^ isTiled(tif)) { + TIFFError(tif->tif_name, tiles ? + "Can not read tiles from a stripped image" : + "Can not read scanlines from a tiled image"); + return (0); + } + return (1); +} + +void +_TIFFNoPostDecode(TIFF* tif, tidata_t buf, tsize_t cc) +{ + (void) tif; (void) buf; (void) cc; +} + +void +_TIFFSwab16BitData(TIFF* tif, tidata_t buf, tsize_t cc) +{ + (void) tif; + assert((cc & 1) == 0); + TIFFSwabArrayOfShort((uint16*) buf, cc/2); +} + +void +_TIFFSwab32BitData(TIFF* tif, tidata_t buf, tsize_t cc) +{ + (void) tif; + assert((cc & 3) == 0); + TIFFSwabArrayOfLong((uint32*) buf, cc/4); +} + +void +_TIFFSwab64BitData(TIFF* tif, tidata_t buf, tsize_t cc) +{ + (void) tif; + assert((cc & 7) == 0); + TIFFSwabArrayOfDouble((double*) buf, cc/8); +} diff --git a/libtiff/tif_strip.c b/libtiff/tif_strip.c new file mode 100755 index 0000000..0090e80 --- /dev/null +++ b/libtiff/tif_strip.c @@ -0,0 +1,192 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_strip.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * Strip-organized Image Support Routines. + */ +#include "tiffiop.h" + +/* + * Compute which strip a (row,sample) value is in. + */ +tstrip_t +TIFFComputeStrip(TIFF* tif, uint32 row, tsample_t sample) +{ + TIFFDirectory *td = &tif->tif_dir; + tstrip_t strip; + + strip = row / td->td_rowsperstrip; + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { + if (sample >= td->td_samplesperpixel) { + TIFFError(tif->tif_name, + "%u: Sample out of range, max %u", + sample, td->td_samplesperpixel); + return ((tstrip_t) 0); + } + strip += sample*td->td_stripsperimage; + } + return (strip); +} + +/* + * Compute how many strips are in an image. + */ +tstrip_t +TIFFNumberOfStrips(TIFF* tif) +{ + TIFFDirectory *td = &tif->tif_dir; + tstrip_t nstrips; + + nstrips = (td->td_rowsperstrip == (uint32) -1 ? + (td->td_imagelength != 0 ? 1 : 0) : + TIFFhowmany(td->td_imagelength, td->td_rowsperstrip)); + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) + nstrips *= td->td_samplesperpixel; + return (nstrips); +} + +/* + * Compute the # bytes in a variable height, row-aligned strip. + */ +tsize_t +TIFFVStripSize(TIFF* tif, uint32 nrows) +{ + TIFFDirectory *td = &tif->tif_dir; + + if (nrows == (uint32) -1) + nrows = td->td_imagelength; +#ifdef YCBCR_SUPPORT + if (td->td_planarconfig == PLANARCONFIG_CONTIG && + td->td_photometric == PHOTOMETRIC_YCBCR && + !isUpSampled(tif)) { + /* + * Packed YCbCr data contain one Cb+Cr for every + * HorizontalSampling*VerticalSampling Y values. + * Must also roundup width and height when calculating + * since images that are not a multiple of the + * horizontal/vertical subsampling area include + * YCbCr data for the extended image. + */ + tsize_t w = + TIFFroundup(td->td_imagewidth, td->td_ycbcrsubsampling[0]); + tsize_t scanline = TIFFhowmany(w*td->td_bitspersample, 8); + tsize_t samplingarea = + td->td_ycbcrsubsampling[0]*td->td_ycbcrsubsampling[1]; + nrows = TIFFroundup(nrows, td->td_ycbcrsubsampling[1]); + /* NB: don't need TIFFhowmany here 'cuz everything is rounded */ + return ((tsize_t) + (nrows*scanline + 2*(nrows*scanline / samplingarea))); + } else +#endif + return ((tsize_t)(nrows * TIFFScanlineSize(tif))); +} + +/* + * Compute the # bytes in a (row-aligned) strip. + * + * Note that if RowsPerStrip is larger than the + * recorded ImageLength, then the strip size is + * truncated to reflect the actual space required + * to hold the strip. + */ +tsize_t +TIFFStripSize(TIFF* tif) +{ + TIFFDirectory* td = &tif->tif_dir; + uint32 rps = td->td_rowsperstrip; + if (rps > td->td_imagelength) + rps = td->td_imagelength; + return (TIFFVStripSize(tif, rps)); +} + +/* + * Compute a default strip size based on the image + * characteristics and a requested value. If the + * request is <1 then we choose a strip size according + * to certain heuristics. + */ +uint32 +TIFFDefaultStripSize(TIFF* tif, uint32 request) +{ + return (*tif->tif_defstripsize)(tif, request); +} + +uint32 +_TIFFDefaultStripSize(TIFF* tif, uint32 s) +{ + if ((int32) s < 1) { + /* + * If RowsPerStrip is unspecified, try to break the + * image up into strips that are approximately 8Kbytes. + */ + tsize_t scanline = TIFFScanlineSize(tif); + s = (uint32)(8*1024) / (scanline == 0 ? 1 : scanline); + if (s == 0) /* very wide images */ + s = 1; + } + return (s); +} + +/* + * Return the number of bytes to read/write in a call to + * one of the scanline-oriented i/o routines. Note that + * this number may be 1/samples-per-pixel if data is + * stored as separate planes. + */ +tsize_t +TIFFScanlineSize(TIFF* tif) +{ + TIFFDirectory *td = &tif->tif_dir; + tsize_t scanline; + + scanline = td->td_bitspersample * td->td_imagewidth; + if (td->td_planarconfig == PLANARCONFIG_CONTIG) + scanline *= td->td_samplesperpixel; + return ((tsize_t) TIFFhowmany(scanline, 8)); +} + +/* + * Return the number of bytes required to store a complete + * decoded and packed raster scanline (as opposed to the + * I/O size returned by TIFFScanlineSize which may be less + * if data is store as separate planes). + */ +tsize_t +TIFFRasterScanlineSize(TIFF* tif) +{ + TIFFDirectory *td = &tif->tif_dir; + tsize_t scanline; + + scanline = td->td_bitspersample * td->td_imagewidth; + if (td->td_planarconfig == PLANARCONFIG_CONTIG) { + scanline *= td->td_samplesperpixel; + return ((tsize_t) TIFFhowmany(scanline, 8)); + } else + return ((tsize_t) + TIFFhowmany(scanline, 8)*td->td_samplesperpixel); +} diff --git a/libtiff/tif_swab.c b/libtiff/tif_swab.c new file mode 100755 index 0000000..fd72568 --- /dev/null +++ b/libtiff/tif_swab.c @@ -0,0 +1,217 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_swab.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library Bit & Byte Swapping Support. + * + * XXX We assume short = 16-bits and long = 32-bits XXX + */ +#include "tiffiop.h" + +#ifndef TIFFSwabShort +void +TIFFSwabShort(uint16* wp) +{ + register u_char* cp = (u_char*) wp; + int t; + + t = cp[1]; cp[1] = cp[0]; cp[0] = t; +} +#endif + +#ifndef TIFFSwabLong +void +TIFFSwabLong(uint32* lp) +{ + register u_char* cp = (u_char*) lp; + int t; + + t = cp[3]; cp[3] = cp[0]; cp[0] = t; + t = cp[2]; cp[2] = cp[1]; cp[1] = t; +} +#endif + +#ifndef TIFFSwabArrayOfShort +void +TIFFSwabArrayOfShort(uint16* wp, register u_long n) +{ + register u_char* cp; + register int t; + + /* XXX unroll loop some */ + while (n-- > 0) { + cp = (u_char*) wp; + t = cp[1]; cp[1] = cp[0]; cp[0] = t; + wp++; + } +} +#endif + +#ifndef TIFFSwabArrayOfLong +void +TIFFSwabArrayOfLong(register uint32* lp, register u_long n) +{ + register unsigned char *cp; + register int t; + + /* XXX unroll loop some */ + while (n-- > 0) { + cp = (unsigned char *)lp; + t = cp[3]; cp[3] = cp[0]; cp[0] = t; + t = cp[2]; cp[2] = cp[1]; cp[1] = t; + lp++; + } +} +#endif + +#ifndef TIFFSwabDouble +void +TIFFSwabDouble(double *dp) +{ + register uint32* lp = (uint32*) dp; + uint32 t; + + TIFFSwabArrayOfLong(lp, 2); + t = lp[0]; lp[0] = lp[1]; lp[1] = t; +} +#endif + +#ifndef TIFFSwabArrayOfDouble +void +TIFFSwabArrayOfDouble(double* dp, register u_long n) +{ + register uint32* lp = (uint32*) dp; + register uint32 t; + + TIFFSwabArrayOfLong(lp, n + n); + while (n-- > 0) { + t = lp[0]; lp[0] = lp[1]; lp[1] = t; + lp += 2; + } +} +#endif + +/* + * Bit reversal tables. TIFFBitRevTable[] gives + * the bit reversed value of . Used in various + * places in the library when the FillOrder requires + * bit reversal of byte values (e.g. CCITT Fax 3 + * encoding/decoding). TIFFNoBitRevTable is provided + * for algorithms that want an equivalent table that + * do not reverse bit values. + */ +static const unsigned char TIFFBitRevTable[256] = { + 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, + 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, + 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, + 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, + 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, + 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, + 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, + 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, + 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, + 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, + 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, + 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, + 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, + 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, + 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, + 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, + 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, + 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, + 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, + 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, + 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, + 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, + 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, + 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, + 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, + 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, + 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, + 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, + 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, + 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, + 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, + 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff +}; +static const unsigned char TIFFNoBitRevTable[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, +}; + +const unsigned char* +TIFFGetBitRevTable(int reversed) +{ + return (reversed ? TIFFBitRevTable : TIFFNoBitRevTable); +} + +void +TIFFReverseBits(register u_char* cp, register u_long n) +{ + for (; n > 8; n -= 8) { + cp[0] = TIFFBitRevTable[cp[0]]; + cp[1] = TIFFBitRevTable[cp[1]]; + cp[2] = TIFFBitRevTable[cp[2]]; + cp[3] = TIFFBitRevTable[cp[3]]; + cp[4] = TIFFBitRevTable[cp[4]]; + cp[5] = TIFFBitRevTable[cp[5]]; + cp[6] = TIFFBitRevTable[cp[6]]; + cp[7] = TIFFBitRevTable[cp[7]]; + cp += 8; + } + while (n-- > 0) + *cp = TIFFBitRevTable[*cp], cp++; +} diff --git a/libtiff/tif_thunder.c b/libtiff/tif_thunder.c new file mode 100755 index 0000000..d7a2b90 --- /dev/null +++ b/libtiff/tif_thunder.c @@ -0,0 +1,154 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_thunder.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include "tiffiop.h" +#ifdef THUNDER_SUPPORT +/* + * TIFF Library. + * + * ThunderScan 4-bit Compression Algorithm Support + */ + +/* + * ThunderScan uses an encoding scheme designed for + * 4-bit pixel values. Data is encoded in bytes, with + * each byte split into a 2-bit code word and a 6-bit + * data value. The encoding gives raw data, runs of + * pixels, or pixel values encoded as a delta from the + * previous pixel value. For the latter, either 2-bit + * or 3-bit delta values are used, with the deltas packed + * into a single byte. + */ +#define THUNDER_DATA 0x3f /* mask for 6-bit data */ +#define THUNDER_CODE 0xc0 /* mask for 2-bit code word */ +/* code values */ +#define THUNDER_RUN 0x00 /* run of pixels w/ encoded count */ +#define THUNDER_2BITDELTAS 0x40 /* 3 pixels w/ encoded 2-bit deltas */ +#define DELTA2_SKIP 2 /* skip code for 2-bit deltas */ +#define THUNDER_3BITDELTAS 0x80 /* 2 pixels w/ encoded 3-bit deltas */ +#define DELTA3_SKIP 4 /* skip code for 3-bit deltas */ +#define THUNDER_RAW 0xc0 /* raw data encoded */ + +static const int twobitdeltas[4] = { 0, 1, 0, -1 }; +static const int threebitdeltas[8] = { 0, 1, 2, 3, 0, -3, -2, -1 }; + +#define SETPIXEL(op, v) { \ + lastpixel = (v) & 0xf; \ + if (npixels++ & 1) \ + *op++ |= lastpixel; \ + else \ + op[0] = lastpixel << 4; \ +} + +static int +ThunderDecode(TIFF* tif, tidata_t op, tsize_t maxpixels) +{ + register u_char *bp; + register tsize_t cc; + u_int lastpixel; + tsize_t npixels; + + bp = (u_char *)tif->tif_rawcp; + cc = tif->tif_rawcc; + lastpixel = 0; + npixels = 0; + while (cc > 0 && npixels < maxpixels) { + int n, delta; + + n = *bp++, cc--; + switch (n & THUNDER_CODE) { + case THUNDER_RUN: /* pixel run */ + /* + * Replicate the last pixel n times, + * where n is the lower-order 6 bits. + */ + if (npixels & 1) { + op[0] |= lastpixel; + lastpixel = *op++; npixels++; n--; + } else + lastpixel |= lastpixel << 4; + npixels += n; + for (; n > 0; n -= 2) + *op++ = lastpixel; + if (n == -1) + *--op &= 0xf0; + lastpixel &= 0xf; + break; + case THUNDER_2BITDELTAS: /* 2-bit deltas */ + if ((delta = ((n >> 4) & 3)) != DELTA2_SKIP) + SETPIXEL(op, lastpixel + twobitdeltas[delta]); + if ((delta = ((n >> 2) & 3)) != DELTA2_SKIP) + SETPIXEL(op, lastpixel + twobitdeltas[delta]); + if ((delta = (n & 3)) != DELTA2_SKIP) + SETPIXEL(op, lastpixel + twobitdeltas[delta]); + break; + case THUNDER_3BITDELTAS: /* 3-bit deltas */ + if ((delta = ((n >> 3) & 7)) != DELTA3_SKIP) + SETPIXEL(op, lastpixel + threebitdeltas[delta]); + if ((delta = (n & 7)) != DELTA3_SKIP) + SETPIXEL(op, lastpixel + threebitdeltas[delta]); + break; + case THUNDER_RAW: /* raw data */ + SETPIXEL(op, n); + break; + } + } + tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcc = cc; + if (npixels != maxpixels) { + TIFFError(tif->tif_name, + "ThunderDecode: %s data at scanline %ld (%lu != %lu)", + npixels < maxpixels ? "Not enough" : "Too much", + (long) tif->tif_row, (long) npixels, (long) maxpixels); + return (0); + } + return (1); +} + +static int +ThunderDecodeRow(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +{ + tidata_t row = buf; + + (void) s; + while ((long)occ > 0) { + if (!ThunderDecode(tif, row, tif->tif_dir.td_imagewidth)) + return (0); + occ -= tif->tif_scanlinesize; + row += tif->tif_scanlinesize; + } + return (1); +} + +int +TIFFInitThunderScan(TIFF* tif, int scheme) +{ + (void) scheme; + tif->tif_decoderow = ThunderDecodeRow; + tif->tif_decodestrip = ThunderDecodeRow; + return (1); +} +#endif /* THUNDER_SUPPORT */ diff --git a/libtiff/tif_tile.c b/libtiff/tif_tile.c new file mode 100755 index 0000000..713744e --- /dev/null +++ b/libtiff/tif_tile.c @@ -0,0 +1,219 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_tile.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * Tiled Image Support Routines. + */ +#include "tiffiop.h" + +/* + * Compute which tile an (x,y,z,s) value is in. + */ +ttile_t +TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s) +{ + TIFFDirectory *td = &tif->tif_dir; + uint32 dx = td->td_tilewidth; + uint32 dy = td->td_tilelength; + uint32 dz = td->td_tiledepth; + ttile_t tile = 1; + + if (td->td_imagedepth == 1) + z = 0; + if (dx == (uint32) -1) + dx = td->td_imagewidth; + if (dy == (uint32) -1) + dy = td->td_imagelength; + if (dz == (uint32) -1) + dz = td->td_imagedepth; + if (dx != 0 && dy != 0 && dz != 0) { + uint32 xpt = TIFFhowmany(td->td_imagewidth, dx); + uint32 ypt = TIFFhowmany(td->td_imagelength, dy); + uint32 zpt = TIFFhowmany(td->td_imagedepth, dz); + + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) + tile = (xpt*ypt*zpt)*s + + (xpt*ypt)*(z/dz) + + xpt*(y/dy) + + x/dx; + else + tile = (xpt*ypt)*(z/dz) + xpt*(y/dy) + x/dx + s; + } + return (tile); +} + +/* + * Check an (x,y,z,s) coordinate + * against the image bounds. + */ +int +TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s) +{ + TIFFDirectory *td = &tif->tif_dir; + + if (x >= td->td_imagewidth) { + TIFFError(tif->tif_name, "Col %ld out of range, max %lu", + (long) x, (u_long) td->td_imagewidth); + return (0); + } + if (y >= td->td_imagelength) { + TIFFError(tif->tif_name, "Row %ld out of range, max %lu", + (long) y, (u_long) td->td_imagelength); + return (0); + } + if (z >= td->td_imagedepth) { + TIFFError(tif->tif_name, "Depth %ld out of range, max %lu", + (long) z, (u_long) td->td_imagedepth); + return (0); + } + if (td->td_planarconfig == PLANARCONFIG_SEPARATE && + s >= td->td_samplesperpixel) { + TIFFError(tif->tif_name, "Sample %d out of range, max %u", + (int) s, td->td_samplesperpixel); + return (0); + } + return (1); +} + +/* + * Compute how many tiles are in an image. + */ +ttile_t +TIFFNumberOfTiles(TIFF* tif) +{ + TIFFDirectory *td = &tif->tif_dir; + uint32 dx = td->td_tilewidth; + uint32 dy = td->td_tilelength; + uint32 dz = td->td_tiledepth; + ttile_t ntiles; + + if (dx == (uint32) -1) + dx = td->td_imagewidth; + if (dy == (uint32) -1) + dy = td->td_imagelength; + if (dz == (uint32) -1) + dz = td->td_imagedepth; + ntiles = (dx == 0 || dy == 0 || dz == 0) ? 0 : + (TIFFhowmany(td->td_imagewidth, dx) * + TIFFhowmany(td->td_imagelength, dy) * + TIFFhowmany(td->td_imagedepth, dz)); + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) + ntiles *= td->td_samplesperpixel; + return (ntiles); +} + +/* + * Compute the # bytes in each row of a tile. + */ +tsize_t +TIFFTileRowSize(TIFF* tif) +{ + TIFFDirectory *td = &tif->tif_dir; + tsize_t rowsize; + + if (td->td_tilelength == 0 || td->td_tilewidth == 0) + return ((tsize_t) 0); + rowsize = td->td_bitspersample * td->td_tilewidth; + if (td->td_planarconfig == PLANARCONFIG_CONTIG) + rowsize *= td->td_samplesperpixel; + return ((tsize_t) TIFFhowmany(rowsize, 8)); +} + +/* + * Compute the # bytes in a variable length, row-aligned tile. + */ +tsize_t +TIFFVTileSize(TIFF* tif, uint32 nrows) +{ + TIFFDirectory *td = &tif->tif_dir; + tsize_t tilesize; + + if (td->td_tilelength == 0 || td->td_tilewidth == 0 || + td->td_tiledepth == 0) + return ((tsize_t) 0); +#ifdef YCBCR_SUPPORT + if (td->td_planarconfig == PLANARCONFIG_CONTIG && + td->td_photometric == PHOTOMETRIC_YCBCR && + !isUpSampled(tif)) { + /* + * Packed YCbCr data contain one Cb+Cr for every + * HorizontalSampling*VerticalSampling Y values. + * Must also roundup width and height when calculating + * since images that are not a multiple of the + * horizontal/vertical subsampling area include + * YCbCr data for the extended image. + */ + tsize_t w = + TIFFroundup(td->td_tilewidth, td->td_ycbcrsubsampling[0]); + tsize_t rowsize = TIFFhowmany(w*td->td_bitspersample, 8); + tsize_t samplingarea = + td->td_ycbcrsubsampling[0]*td->td_ycbcrsubsampling[1]; + nrows = TIFFroundup(nrows, td->td_ycbcrsubsampling[1]); + /* NB: don't need TIFFhowmany here 'cuz everything is rounded */ + tilesize = nrows*rowsize + 2*(nrows*rowsize / samplingarea); + } else +#endif + tilesize = nrows * TIFFTileRowSize(tif); + return ((tsize_t)(tilesize * td->td_tiledepth)); +} + +/* + * Compute the # bytes in a row-aligned tile. + */ +tsize_t +TIFFTileSize(TIFF* tif) +{ + return (TIFFVTileSize(tif, tif->tif_dir.td_tilelength)); +} + +/* + * Compute a default tile size based on the image + * characteristics and a requested value. If a + * request is <1 then we choose a size according + * to certain heuristics. + */ +void +TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th) +{ + (*tif->tif_deftilesize)(tif, tw, th); +} + +void +_TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th) +{ + (void) tif; + if (*(int32*) tw < 1) + *tw = 256; + if (*(int32*) th < 1) + *th = 256; + /* roundup to a multiple of 16 per the spec */ + if (*tw & 0xf) + *tw = TIFFroundup(*tw, 16); + if (*th & 0xf) + *th = TIFFroundup(*th, 16); +} diff --git a/libtiff/tif_unix.c b/libtiff/tif_unix.c new file mode 100755 index 0000000..e38994b --- /dev/null +++ b/libtiff/tif_unix.c @@ -0,0 +1,224 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_unix.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library UNIX-specific Routines. + */ +#include "tiffiop.h" +#include +#include +#include + +static tsize_t +_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return ((tsize_t) read((int) fd, buf, (size_t) size)); +} + +static tsize_t +_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return ((tsize_t) write((int) fd, buf, (size_t) size)); +} + +static toff_t +_tiffSeekProc(thandle_t fd, toff_t off, int whence) +{ +#if USE_64BIT_API == 1 + return ((toff_t) lseek64((int) fd, (off64_t) off, whence)); +#else + return ((toff_t) lseek((int) fd, (off_t) off, whence)); +#endif +} + +static int +_tiffCloseProc(thandle_t fd) +{ + return (close((int) fd)); +} + +#include + +static toff_t +_tiffSizeProc(thandle_t fd) +{ +#ifdef _AM29K + long fsize; + return ((fsize = lseek((int) fd, 0, SEEK_END)) < 0 ? 0 : fsize); +#else +#if USE_64BIT_API == 1 + struct stat64 sb; + return (toff_t) (fstat64((int) fd, &sb) < 0 ? 0 : sb.st_size); +#else + struct stat sb; + return (toff_t) (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size); +#endif +#endif +} + +#ifdef HAVE_MMAP +#include + +static int +_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + toff_t size = _tiffSizeProc(fd); + if (size != (toff_t) -1) { + *pbase = (tdata_t) + mmap(0, size, PROT_READ, MAP_SHARED, (int) fd, 0); + if (*pbase != (tdata_t) -1) { + *psize = size; + return (1); + } + } + return (0); +} + +static void +_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ + (void) fd; + (void) munmap(base, (off_t) size); +} +#else /* !HAVE_MMAP */ +static int +_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + (void) fd; (void) pbase; (void) psize; + return (0); +} + +static void +_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ + (void) fd; (void) base; (void) size; +} +#endif /* !HAVE_MMAP */ + +/* + * Open a TIFF file descriptor for read/writing. + */ +TIFF* +TIFFFdOpen(int fd, const char* name, const char* mode) +{ + TIFF* tif; + + tif = TIFFClientOpen(name, mode, + (thandle_t) fd, + _tiffReadProc, _tiffWriteProc, + _tiffSeekProc, _tiffCloseProc, _tiffSizeProc, + _tiffMapProc, _tiffUnmapProc); + if (tif) + tif->tif_fd = fd; + return (tif); +} + +/* + * Open a TIFF file for read/writing. + */ +TIFF* +TIFFOpen(const char* name, const char* mode) +{ + static const char module[] = "TIFFOpen"; + int m, fd; + + m = _TIFFgetMode(mode, module); + if (m == -1) + return ((TIFF*)0); + +/* for cygwin */ +#ifdef O_BINARY + m |= O_BINARY; +#endif + +#ifdef _AM29K + fd = open(name, m); +#else + fd = open(name, m, 0666); +#endif + if (fd < 0) { + TIFFError(module, "%s: Cannot open", name); + return ((TIFF *)0); + } + return (TIFFFdOpen(fd, name, mode)); +} + +void* +_TIFFmalloc(tsize_t s) +{ + return (malloc((size_t) s)); +} + +void +_TIFFfree(tdata_t p) +{ + free(p); +} + +void* +_TIFFrealloc(tdata_t p, tsize_t s) +{ + return (realloc(p, (size_t) s)); +} + +void +_TIFFmemset(tdata_t p, int v, tsize_t c) +{ + memset(p, v, (size_t) c); +} + +void +_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c) +{ + memcpy(d, s, (size_t) c); +} + +int +_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c) +{ + return (memcmp(p1, p2, (size_t) c)); +} + +static void +unixWarningHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + fprintf(stderr, "Warning, "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFwarningHandler = unixWarningHandler; + +static void +unixErrorHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFerrorHandler = unixErrorHandler; diff --git a/libtiff/tif_version.c b/libtiff/tif_version.c new file mode 100755 index 0000000..1f2ec77 --- /dev/null +++ b/libtiff/tif_version.c @@ -0,0 +1,34 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_version.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ +/* + * Copyright (c) 1992-1997 Sam Leffler + * Copyright (c) 1992-1997 Silicon Graphics, Inc. + * + * 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. + */ +#include "tiffiop.h" +#include "version.h" + +static const char TIFFVersion[] = VERSION; + +const char* +TIFFGetVersion(void) +{ + return (TIFFVersion); +} diff --git a/libtiff/tif_vms.c b/libtiff/tif_vms.c new file mode 100755 index 0000000..ca0da56 --- /dev/null +++ b/libtiff/tif_vms.c @@ -0,0 +1,588 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_vms.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library VMS-specific Routines. + */ + +#include +#include +#include "tiffiop.h" +#if !HAVE_IEEEFP +#include +#endif + +#ifdef VAXC +#define NOSHARE noshare +#else +#define NOSHARE +#endif + +#ifdef __alpha +/* Dummy entry point for backwards compatibility */ +void TIFFModeCCITTFax3(void){} +#endif + +static tsize_t +_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return (read((int) fd, buf, size)); +} + +static tsize_t +_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return (write((int) fd, buf, size)); +} + +static toff_t +_tiffSeekProc(thandle_t fd, toff_t off, int whence) +{ + return ((toff_t) lseek((int) fd, (off_t) off, whence)); +} + +static int +_tiffCloseProc(thandle_t fd) +{ + return (close((int) fd)); +} + +#include + +static toff_t +_tiffSizeProc(thandle_t fd) +{ + struct stat sb; + return (toff_t) (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size); +} + +#ifdef HAVE_MMAP +#include +#include +#include + +/* + * Table for storing information on current open sections. + * (Should really be a linked list) + */ +#define MAX_MAPPED 100 +static int no_mapped = 0; +static struct { + char *base; + char *top; + unsigned short channel; +} map_table[MAX_MAPPED]; + +/* + * This routine maps a file into a private section. Note that this + * method of accessing a file is by far the fastest under VMS. + * The routine may fail (i.e. return 0) for several reasons, for + * example: + * - There is no more room for storing the info on sections. + * - The process is out of open file quota, channels, ... + * - fd does not describe an opened file. + * - The file is already opened for write access by this process + * or another process + * - There is no free "hole" in virtual memory that fits the + * size of the file + */ +static int +_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + char name[256]; + struct FAB fab; + unsigned short channel; + char *inadr[2], *retadr[2]; + unsigned long status; + long size; + + if (no_mapped >= MAX_MAPPED) + return(0); + /* + * We cannot use a file descriptor, we + * must open the file once more. + */ + if (getname((int)fd, name, 1) == NULL) + return(0); + /* prepare the FAB for a user file open */ + fab = cc$rms_fab; + fab.fab$l_fop |= FAB$V_UFO; + fab.fab$b_fac = FAB$M_GET; + fab.fab$b_shr = FAB$M_SHRGET; + fab.fab$l_fna = name; + fab.fab$b_fns = strlen(name); + status = sys$open(&fab); /* open file & get channel number */ + if ((status&1) == 0) + return(0); + channel = (unsigned short)fab.fab$l_stv; + inadr[0] = inadr[1] = (char *)0; /* just an address in P0 space */ + /* + * Map the blocks of the file up to + * the EOF block into virtual memory. + */ + size = _tiffSizeProc(fd); + status = sys$crmpsc(inadr, retadr, 0, SEC$M_EXPREG, 0,0,0, channel, + TIFFhowmany(size,512), 0,0,0); + if ((status&1) == 0){ + sys$dassgn(channel); + return(0); + } + *pbase = (tdata_t) retadr[0]; /* starting virtual address */ + /* + * Use the size of the file up to the + * EOF mark for UNIX compatibility. + */ + *psize = (toff_t) size; + /* Record the section in the table */ + map_table[no_mapped].base = retadr[0]; + map_table[no_mapped].top = retadr[1]; + map_table[no_mapped].channel = channel; + no_mapped++; + + return(1); +} + +/* + * This routine unmaps a section from the virtual address space of + * the process, but only if the base was the one returned from a + * call to TIFFMapFileContents. + */ +static void +_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ + char *inadr[2]; + int i, j; + + /* Find the section in the table */ + for (i = 0;i < no_mapped; i++) { + if (map_table[i].base == (char *) base) { + /* Unmap the section */ + inadr[0] = (char *) base; + inadr[1] = map_table[i].top; + sys$deltva(inadr, 0, 0); + sys$dassgn(map_table[i].channel); + /* Remove this section from the list */ + for (j = i+1; j < no_mapped; j++) + map_table[j-1] = map_table[j]; + no_mapped--; + return; + } + } +} +#else /* !HAVE_MMAP */ +static int +_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + return (0); +} + +static void +_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ +} +#endif /* !HAVE_MMAP */ + +/* + * Open a TIFF file descriptor for read/writing. + */ +TIFF* +TIFFFdOpen(int fd, const char* name, const char* mode) +{ + TIFF* tif; + + tif = TIFFClientOpen(name, mode, + (thandle_t) fd, + _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc, + _tiffSizeProc, _tiffMapProc, _tiffUnmapProc); + if (tif) + tif->tif_fd = fd; + return (tif); +} + +/* + * Open a TIFF file for read/writing. + */ +TIFF* +TIFFOpen(const char* name, const char* mode) +{ + static const char module[] = "TIFFOpen"; + int m, fd; + + m = _TIFFgetMode(mode, module); + if (m == -1) + return ((TIFF*)0); + if (m&O_TRUNC){ + /* + * There is a bug in open in VAXC. If you use + * open w/ m=O_RDWR|O_CREAT|O_TRUNC the + * wrong thing happens. On the other hand + * creat does the right thing. + */ + fd = creat((char *) /* bug in stdio.h */ name, 0666, + "alq = 128", "deq = 64", "mbc = 32", + "fop = tef"); + } else if (m&O_RDWR) { + fd = open(name, m, 0666, + "deq = 64", "mbc = 32", "fop = tef", "ctx = stm"); + } else + fd = open(name, m, 0666, "mbc = 32", "ctx = stm"); + if (fd < 0) { + TIFFError(module, "%s: Cannot open", name); + return ((TIFF*)0); + } + return (TIFFFdOpen(fd, name, mode)); +} + +tdata_t +_TIFFmalloc(tsize_t s) +{ + return (malloc((size_t) s)); +} + +void +_TIFFfree(tdata_t p) +{ + free(p); +} + +tdata_t +_TIFFrealloc(tdata_t p, tsize_t s) +{ + return (realloc(p, (size_t) s)); +} + +void +_TIFFmemset(tdata_t p, int v, tsize_t c) +{ + memset(p, v, (size_t) c); +} + +void +_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c) +{ + memcpy(d, s, (size_t) c); +} + +int +_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c) +{ + return (memcmp(p1, p2, (size_t) c)); +} + +/* + * On the VAX, we need to make those global, writable pointers + * non-shareable, otherwise they would be made shareable by default. + * On the AXP, this brain damage has been corrected. + * + * I (Karsten Spang, krs@kampsax.dk) have dug around in the GCC + * manual and the GAS code and have come up with the following + * construct, but I don't have GCC on my VAX, so it is untested. + * Please tell me if it does not work. + */ + +static void +vmsWarningHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + fprintf(stderr, "Warning, "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} + +NOSHARE TIFFErrorHandler _TIFFwarningHandler = vmsWarningHandler +#if defined(VAX) && defined(__GNUC__) +asm("_$$PsectAttributes_NOSHR$$_TIFFwarningHandler") +#endif +; + +static void +vmsErrorHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} + +NOSHARE TIFFErrorHandler _TIFFerrorHandler = vmsErrorHandler +#if defined(VAX) && defined(__GNUC__) +asm("_$$PsectAttributes_NOSHR$$_TIFFerrorHandler") +#endif +; + + +#if !HAVE_IEEEFP +/* IEEE floting point handling */ + +typedef struct ieeedouble { + u_long mant2; /* fix NDR: full 8-byte swap */ + u_long mant : 20, + exp : 11, + sign : 1; +} ieeedouble; +typedef struct ieeefloat { + u_long mant : 23, + exp : 8, + sign : 1; +} ieeefloat; + +/* + * NB: These are D_FLOAT's, not G_FLOAT's. A G_FLOAT is + * simply a reverse-IEEE float/double. + */ + +typedef struct { + u_long mant1 : 7, + exp : 8, + sign : 1, + mant2 : 16, + mant3 : 16, + mant4 : 16; +} nativedouble; +typedef struct { + u_long mant1 : 7, + exp : 8, + sign : 1, + mant2 : 16; +} nativefloat; + +typedef union { + ieeedouble ieee; + nativedouble native; + char b[8]; + uint32 l[2]; + double d; +} double_t; + +typedef union { + ieeefloat ieee; + nativefloat native; + char b[4]; + uint32 l; + float f; +} float_t; + +#if defined(VAXC) || defined(DECC) +#pragma inline(ieeetod,dtoieee) +#endif + +/* + * Convert an IEEE double precision number to native double precision. + * The source is contained in two longwords, the second holding the sign, + * exponent and the higher order bits of the mantissa, and the first + * holding the rest of the mantissa as follows: + * (Note: It is assumed that the number has been eight-byte swapped to + * LSB first.) + * + * First longword: + * 32 least significant bits of mantissa + * Second longword: + * 0-19: 20 most significant bits of mantissa + * 20-30: exponent + * 31: sign + * The exponent is stored as excess 1023. + * The most significant bit of the mantissa is implied 1, and not stored. + * If the exponent and mantissa are zero, the number is zero. + * If the exponent is 0 (i.e. -1023) and the mantissa is non-zero, it is an + * unnormalized number with the most significant bit NOT implied. + * If the exponent is 2047, the number is invalid, in case the mantissa is zero, + * this means overflow (+/- depending of the sign bit), otherwise + * it simply means invalid number. + * + * If the number is too large for the machine or was specified as overflow, + * +/-HUGE_VAL is returned. + */ +INLINE static void +ieeetod(double *dp) +{ + double_t source; + long sign,exp,mant; + double dmant; + + source.ieee = ((double_t*)dp)->ieee; + sign = source.ieee.sign; + exp = source.ieee.exp; + mant = source.ieee.mant; + + if (exp == 2047) { + if (mant) /* Not a Number (NAN) */ + *dp = HUGE_VAL; + else /* +/- infinity */ + *dp = (sign ? -HUGE_VAL : HUGE_VAL); + return; + } + if (!exp) { + if (!(mant || source.ieee.mant2)) { /* zero */ + *dp=0; + return; + } else { /* Unnormalized number */ + /* NB: not -1023, the 1 bit is not implied */ + exp= -1022; + } + } else { + mant |= 1<<20; + exp -= 1023; + } + dmant = (((double) mant) + + ((double) source.ieee.mant2) / (((double) (1<<16)) * + ((double) (1<<16)))) / (double) (1<<20); + dmant = ldexp(dmant, exp); + if (sign) + dmant= -dmant; + *dp = dmant; +} + +INLINE static void +dtoieee(double *dp) +{ + double_t num; + double x; + int exp; + + num.d = *dp; + if (!num.d) { /* Zero is just binary all zeros */ + num.l[0] = num.l[1] = 0; + return; + } + + if (num.d < 0) { /* Sign is encoded separately */ + num.d = -num.d; + num.ieee.sign = 1; + } else { + num.ieee.sign = 0; + } + + /* Now separate the absolute value into mantissa and exponent */ + x = frexp(num.d, &exp); + + /* + * Handle cases where the value is outside the + * range for IEEE floating point numbers. + * (Overflow cannot happen on a VAX, but underflow + * can happen for G float.) + */ + if (exp < -1022) { /* Unnormalized number */ + x = ldexp(x, -1023-exp); + exp = 0; + } else if (exp > 1023) { /* +/- infinity */ + x = 0; + exp = 2047; + } else { /* Get rid of most significant bit */ + x *= 2; + x -= 1; + exp += 1022; /* fix NDR: 1.0 -> x=0.5, exp=1 -> ieee.exp = 1023 */ + } + num.ieee.exp = exp; + + x *= (double) (1<<20); + num.ieee.mant = (long) x; + x -= (double) num.ieee.mant; + num.ieee.mant2 = (long) (x*((double) (1<<16)*(double) (1<<16))); + + if (!(num.ieee.mant || num.ieee.exp || num.ieee.mant2)) { + /* Avoid negative zero */ + num.ieee.sign = 0; + } + ((double_t*)dp)->ieee = num.ieee; +} + +/* + * Beware, these do not handle over/under-flow + * during conversion from ieee to native format. + */ +#define NATIVE2IEEEFLOAT(fp) { \ + float_t t; \ + if (t.ieee.exp = (fp)->native.exp) \ + t.ieee.exp += -129 + 127; \ + t.ieee.sign = (fp)->native.sign; \ + t.ieee.mant = ((fp)->native.mant1<<16)|(fp)->native.mant2; \ + *(fp) = t; \ +} +#define IEEEFLOAT2NATIVE(fp) { \ + float_t t; int v = (fp)->ieee.exp; \ + if (v) v += -127 + 129; /* alter bias of exponent */\ + t.native.exp = v; /* implicit truncation of exponent */\ + t.native.sign = (fp)->ieee.sign; \ + v = (fp)->ieee.mant; \ + t.native.mant1 = v >> 16; \ + t.native.mant2 = v;\ + *(fp) = t; \ +} + +#define IEEEDOUBLE2NATIVE(dp) ieeetod(dp) + +#define NATIVE2IEEEDOUBLE(dp) dtoieee(dp) + + +/* + * These unions are used during floating point + * conversions. The above macros define the + * conversion operations. + */ +void +TIFFCvtIEEEFloatToNative(TIFF* tif, u_int n, float* f) +{ + float_t* fp = (float_t*) f; + + while (n-- > 0) { + IEEEFLOAT2NATIVE(fp); + fp++; + } +} + +void +TIFFCvtNativeToIEEEFloat(TIFF* tif, u_int n, float* f) +{ + float_t* fp = (float_t*) f; + + while (n-- > 0) { + NATIVE2IEEEFLOAT(fp); + fp++; + } +} +void +TIFFCvtIEEEDoubleToNative(TIFF* tif, u_int n, double* f) +{ + double_t* fp = (double_t*) f; + + while (n-- > 0) { + IEEEDOUBLE2NATIVE(fp); + fp++; + } +} + +void +TIFFCvtNativeToIEEEDouble(TIFF* tif, u_int n, double* f) +{ + double_t* fp = (double_t*) f; + + while (n-- > 0) { + NATIVE2IEEEDOUBLE(fp); + fp++; + } +} +#endif diff --git a/libtiff/tif_warning.c b/libtiff/tif_warning.c new file mode 100755 index 0000000..7df1a0c --- /dev/null +++ b/libtiff/tif_warning.c @@ -0,0 +1,49 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_warning.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + */ +#include "tiffiop.h" + +TIFFErrorHandler +TIFFSetWarningHandler(TIFFErrorHandler handler) +{ + TIFFErrorHandler prev = _TIFFwarningHandler; + _TIFFwarningHandler = handler; + return (prev); +} + +void +TIFFWarning(const char* module, const char* fmt, ...) +{ + if (_TIFFwarningHandler) { + va_list ap; + va_start(ap, fmt); + (*_TIFFwarningHandler)(module, fmt, ap); + va_end(ap); + } +} diff --git a/libtiff/tif_win3.c b/libtiff/tif_win3.c new file mode 100755 index 0000000..f7ca154 --- /dev/null +++ b/libtiff/tif_win3.c @@ -0,0 +1,225 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_win3.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library Windows 3.x-specific Routines. + */ +#include "tiffiop.h" +#if defined(__WATCOMC__) || defined(__BORLANDC__) || defined(_MSC_VER) +#include /* for open, close, etc. function prototypes */ +#endif + +#include +#include +#include + +static tsize_t +_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return (_hread(fd, buf, size)); +} + +static tsize_t +_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + return (_hwrite(fd, buf, size)); +} + +static toff_t +_tiffSeekProc(thandle_t fd, toff_t off, int whence) +{ + return (_llseek(fd, (off_t) off, whence)); +} + +static int +_tiffCloseProc(thandle_t fd) +{ + return (_lclose(fd)); +} + +#include + +static toff_t +_tiffSizeProc(thandle_t fd) +{ + struct stat sb; + return (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size); +} + +static int +_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + return (0); +} + +static void +_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ +} + +/* + * Open a TIFF file descriptor for read/writing. + */ +TIFF* +TIFFFdOpen(int fd, const char* name, const char* mode) +{ + TIFF* tif; + + tif = TIFFClientOpen(name, mode, + (thandle_t) fd, + _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc, + _tiffSizeProc, _tiffMapProc, _tiffUnmapProc); + if (tif) + tif->tif_fd = fd; + return (tif); +} + +/* + * Open a TIFF file for read/writing. + */ +TIFF* +TIFFOpen(const char* name, const char* mode) +{ + static const char module[] = "TIFFOpen"; + int m, fd; + OFSTRUCT of; + int mm = 0; + + m = _TIFFgetMode(mode, module); + if (m == -1) + return ((TIFF*)0); + if (m & O_CREAT) { + if ((m & O_TRUNC) || OpenFile(name, &of, OF_EXIST) != HFILE_ERROR) + mm |= OF_CREATE; + } + if (m & O_WRONLY) + mm |= OF_WRITE; + if (m & O_RDWR) + mm |= OF_READWRITE; + fd = OpenFile(name, &of, mm); + if (fd < 0) { + TIFFError(module, "%s: Cannot open", name); + return ((TIFF*)0); + } + return (TIFFFdOpen(fd, name, mode)); +} + +tdata_t +_TIFFmalloc(tsize_t s) +{ + return (tdata_t) GlobalAllocPtr(GHND, (DWORD) s); +} + +void +_TIFFfree(tdata_t p) +{ + GlobalFreePtr(p); +} + +tdata_t +_TIFFrealloc(tdata_t p, tsize_t s) +{ + return (tdata_t) GlobalReAllocPtr(p, (DWORD) s, GHND); +} + +void +_TIFFmemset(tdata_t p, int v, tsize_t c) +{ + char* pp = (char*) p; + + while (c > 0) { + tsize_t chunk = 0x10000 - ((uint32) pp & 0xffff);/* What's left in segment */ + if (chunk > 0xff00) /* No more than 0xff00 */ + chunk = 0xff00; + if (chunk > c) /* No more than needed */ + chunk = c; + memset(pp, v, chunk); + pp = (char*) (chunk + (char huge*) pp); + c -= chunk; + } +} + +void +_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c) +{ + if (c > 0xFFFF) + hmemcpy((void _huge*) d, (void _huge*) s, c); + else + (void) memcpy(d, s, (size_t) c); +} + +int +_TIFFmemcmp(const tdata_t d, const tdata_t s, tsize_t c) +{ + char* dd = (char*) d; + char* ss = (char*) s; + tsize_t chunks, chunkd, chunk; + int result; + + while (c > 0) { + chunks = 0x10000 - ((uint32) ss & 0xffff); /* What's left in segment */ + chunkd = 0x10000 - ((uint32) dd & 0xffff); /* What's left in segment */ + chunk = c; /* Get the largest of */ + if (chunk > chunks) /* c, chunks, chunkd, */ + chunk = chunks; /* 0xff00 */ + if (chunk > chunkd) + chunk = chunkd; + if (chunk > 0xff00) + chunk = 0xff00; + result = memcmp(dd, ss, chunk); + if (result != 0) + return (result); + dd = (char*) (chunk + (char huge*) dd); + ss = (char*) (chunk + (char huge*) ss); + c -= chunk; + } + return (0); +} + +static void +win3WarningHandler(const char* module, const char* fmt, va_list ap) +{ + char e[512] = { '\0' }; + if (module != NULL) + strcat(strcpy(e, module), ":"); + vsprintf(e+strlen(e), fmt, ap); + strcat(e, "."); + MessageBox(GetActiveWindow(), e, "LibTIFF Warning", + MB_OK|MB_ICONEXCLAMATION); +} +TIFFErrorHandler _TIFFwarningHandler = win3WarningHandler; + +static void +win3ErrorHandler(const char* module, const char* fmt, va_list ap) +{ + char e[512] = { '\0' }; + if (module != NULL) + strcat(strcpy(e, module), ":"); + vsprintf(e+strlen(e), fmt, ap); + strcat(e, "."); + MessageBox(GetActiveWindow(), e, "LibTIFF Error", MB_OK|MB_ICONSTOP); +} +TIFFErrorHandler _TIFFerrorHandler = win3ErrorHandler; diff --git a/libtiff/tif_win32.c b/libtiff/tif_win32.c new file mode 100755 index 0000000..9f58ebe --- /dev/null +++ b/libtiff/tif_win32.c @@ -0,0 +1,314 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_win32.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library Win32-specific Routines. Adapted from tif_unix.c 4/5/95 by + * Scott Wagner (wagner@itek.com), Itek Graphix, Rochester, NY USA + */ +#include +#include "tiffiop.h" + +static tsize_t +_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + DWORD dwSizeRead; + if (!ReadFile(fd, buf, size, &dwSizeRead, NULL)) + return(0); + return ((tsize_t) dwSizeRead); +} + +static tsize_t +_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + DWORD dwSizeWritten; + if (!WriteFile(fd, buf, size, &dwSizeWritten, NULL)) + return(0); + return ((tsize_t) dwSizeWritten); +} + +static toff_t +_tiffSeekProc(thandle_t fd, toff_t off, int whence) +{ + DWORD dwMoveMethod, dwMoveHigh; + + /* we use this as a special code, so avoid accepting it */ + if( off == 0xFFFFFFFF ) + return 0xFFFFFFFF; + + switch(whence) + { + case SEEK_SET: + dwMoveMethod = FILE_BEGIN; + break; + case SEEK_CUR: + dwMoveMethod = FILE_CURRENT; + break; + case SEEK_END: + dwMoveMethod = FILE_END; + break; + default: + dwMoveMethod = FILE_BEGIN; + break; + } + dwMoveHigh = 0; + return ((toff_t)SetFilePointer(fd, (LONG) off, (PLONG)&dwMoveHigh, + dwMoveMethod)); +} + +static int +_tiffCloseProc(thandle_t fd) +{ + return (CloseHandle(fd) ? 0 : -1); +} + +static toff_t +_tiffSizeProc(thandle_t fd) +{ + return ((toff_t)GetFileSize(fd, NULL)); +} + +#ifdef __BORLANDC__ +#pragma argsused +#endif +static int +_tiffDummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + return (0); +} + +/* + * From "Hermann Josef Hill" : + * + * Windows uses both a handle and a pointer for file mapping, + * but according to the SDK documentation and Richter's book + * "Advanced Windows Programming" it is safe to free the handle + * after obtaining the file mapping pointer + * + * This removes a nasty OS dependency and cures a problem + * with Visual C++ 5.0 + */ +static int +_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +{ + toff_t size; + HANDLE hMapFile; + + if ((size = _tiffSizeProc(fd)) == 0xFFFFFFFF) + return (0); + hMapFile = CreateFileMapping(fd, NULL, PAGE_READONLY, 0, size, NULL); + if (hMapFile == NULL) + return (0); + *pbase = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0); + CloseHandle(hMapFile); + if (*pbase == NULL) + return (0); + *psize = size; + return(1); +} + +#ifdef __BORLANDC__ +#pragma argsused +#endif +static void +_tiffDummyUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ +} + +static void +_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +{ + UnmapViewOfFile(base); +} + +/* + * Open a TIFF file descriptor for read/writing. + * Note that TIFFFdOpen and TIFFOpen recognise the character 'u' in the mode + * string, which forces the file to be opened unmapped. + */ +TIFF* +TIFFFdOpen(int ifd, const char* name, const char* mode) +{ + TIFF* tif; + BOOL fSuppressMap = (mode[1] == 'u' || mode[2] == 'u'); + + tif = TIFFClientOpen(name, mode, + (thandle_t)ifd, + _tiffReadProc, _tiffWriteProc, + _tiffSeekProc, _tiffCloseProc, _tiffSizeProc, + fSuppressMap ? _tiffDummyMapProc : _tiffMapProc, + fSuppressMap ? _tiffDummyUnmapProc : _tiffUnmapProc); + if (tif) + tif->tif_fd = ifd; + return (tif); +} + +/* + * Open a TIFF file for read/writing. + */ +TIFF* +TIFFOpen(const char* name, const char* mode) +{ + static const char module[] = "TIFFOpen"; + thandle_t fd; + int m; + DWORD dwMode; + + m = _TIFFgetMode(mode, module); + + switch(m) + { + case O_RDONLY: + dwMode = OPEN_EXISTING; + break; + case O_RDWR: + dwMode = OPEN_ALWAYS; + break; + case O_RDWR|O_CREAT: + dwMode = OPEN_ALWAYS; + break; + case O_RDWR|O_TRUNC: + dwMode = CREATE_ALWAYS; + break; + case O_RDWR|O_CREAT|O_TRUNC: + dwMode = CREATE_ALWAYS; + break; + default: + return ((TIFF*)0); + } + fd = (thandle_t)CreateFile(name, (m == O_RDONLY) ? GENERIC_READ : + (GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ, NULL, dwMode, + (m == O_RDONLY) ? FILE_ATTRIBUTE_READONLY : FILE_ATTRIBUTE_NORMAL, NULL); + if (fd == INVALID_HANDLE_VALUE) { + TIFFError(module, "%s: Cannot open", name); + return ((TIFF *)0); + } + return (TIFFFdOpen((int)fd, name, mode)); +} + +tdata_t +_TIFFmalloc(tsize_t s) +{ + return ((tdata_t)GlobalAlloc(GMEM_FIXED, s)); +} + +void +_TIFFfree(tdata_t p) +{ + GlobalFree(p); + return; +} + +tdata_t +_TIFFrealloc(tdata_t p, tsize_t s) +{ + void* pvTmp; + if ((pvTmp = GlobalReAlloc(p, s, 0)) == NULL) { + if ((pvTmp = GlobalAlloc(GMEM_FIXED, s)) != NULL) { + CopyMemory(pvTmp, p, GlobalSize(p)); + GlobalFree(p); + } + } + return ((tdata_t)pvTmp); +} + +void +_TIFFmemset(void* p, int v, tsize_t c) +{ + FillMemory(p, c, (BYTE)v); +} + +void +_TIFFmemcpy(void* d, const tdata_t s, tsize_t c) +{ + CopyMemory(d, s, c); +} + +int +_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c) +{ + register const BYTE *pb1 = (const BYTE *) p1; + register const BYTE *pb2 = (const BYTE *) p2; + register DWORD dwTmp = c; + register int iTmp; + for (iTmp = 0; dwTmp-- && !iTmp; iTmp = (int)*pb1++ - (int)*pb2++) + ; + return (iTmp); +} + +static void +Win32WarningHandler(const char* module, const char* fmt, va_list ap) +{ +#ifndef TIF_PLATFORM_CONSOLE + LPTSTR szTitle; + LPTSTR szTmp; + LPCTSTR szTitleText = "%s Warning"; + LPCTSTR szDefaultModule = "TIFFLIB"; + szTmp = (module == NULL) ? (LPTSTR)szDefaultModule : (LPTSTR)module; + if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, (lstrlen(szTmp) + + lstrlen(szTitleText) + lstrlen(fmt) + 128)*sizeof(TCHAR))) == NULL) + return; + wsprintf(szTitle, szTitleText, szTmp); + szTmp = szTitle + (lstrlen(szTitle)+2)*sizeof(TCHAR); + wvsprintf(szTmp, fmt, ap); + MessageBox(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONINFORMATION); + LocalFree(szTitle); + return; +#else + if (module != NULL) + fprintf(stderr, "%s: ", module); + fprintf(stderr, "Warning, "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +#endif +} +TIFFErrorHandler _TIFFwarningHandler = Win32WarningHandler; + +static void +Win32ErrorHandler(const char* module, const char* fmt, va_list ap) +{ +#ifndef TIF_PLATFORM_CONSOLE + LPTSTR szTitle; + LPTSTR szTmp; + LPCTSTR szTitleText = "%s Error"; + LPCTSTR szDefaultModule = "TIFFLIB"; + szTmp = (module == NULL) ? (LPTSTR)szDefaultModule : (LPTSTR)module; + if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, (lstrlen(szTmp) + + lstrlen(szTitleText) + lstrlen(fmt) + 128)*sizeof(TCHAR))) == NULL) + return; + wsprintf(szTitle, szTitleText, szTmp); + szTmp = szTitle + (lstrlen(szTitle)+2)*sizeof(TCHAR); + wvsprintf(szTmp, fmt, ap); + MessageBox(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONEXCLAMATION); + LocalFree(szTitle); + return; +#else + if (module != NULL) + fprintf(stderr, "%s: ", module); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +#endif +} +TIFFErrorHandler _TIFFerrorHandler = Win32ErrorHandler; diff --git a/libtiff/tif_write.c b/libtiff/tif_write.c new file mode 100755 index 0000000..33f4aeb --- /dev/null +++ b/libtiff/tif_write.c @@ -0,0 +1,659 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_write.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * TIFF Library. + * + * Scanline-oriented Write Support + */ +#include "tiffiop.h" +#include +#include + +#define REWRITE_HACK + +#define STRIPINCR 20 /* expansion factor on strip array */ + +#define WRITECHECKSTRIPS(tif, module) \ + (((tif)->tif_flags&TIFF_BEENWRITING) || TIFFWriteCheck((tif),0,module)) +#define WRITECHECKTILES(tif, module) \ + (((tif)->tif_flags&TIFF_BEENWRITING) || TIFFWriteCheck((tif),1,module)) +#define BUFFERCHECK(tif) \ + ((((tif)->tif_flags & TIFF_BUFFERSETUP) && tif->tif_rawdata) || \ + TIFFWriteBufferSetup((tif), NULL, (tsize_t) -1)) + +static int TIFFGrowStrips(TIFF*, int, const char*); +static int TIFFAppendToStrip(TIFF*, tstrip_t, tidata_t, tsize_t); +static int TIFFSetupStrips(TIFF*); + +int +TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) +{ + static const char module[] = "TIFFWriteScanline"; + register TIFFDirectory *td; + int status, imagegrew = 0; + tstrip_t strip; + + if (!WRITECHECKSTRIPS(tif, module)) + return (-1); + /* + * Handle delayed allocation of data buffer. This + * permits it to be sized more intelligently (using + * directory information). + */ + if (!BUFFERCHECK(tif)) + return (-1); + td = &tif->tif_dir; + /* + * Extend image length if needed + * (but only for PlanarConfig=1). + */ + if (row >= td->td_imagelength) { /* extend image */ + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { + TIFFError(tif->tif_name, + "Can not change \"ImageLength\" when using separate planes"); + return (-1); + } + td->td_imagelength = row+1; + imagegrew = 1; + } + /* + * Calculate strip and check for crossings. + */ + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { + if (sample >= td->td_samplesperpixel) { + TIFFError(tif->tif_name, + "%d: Sample out of range, max %d", + sample, td->td_samplesperpixel); + return (-1); + } + strip = sample*td->td_stripsperimage + row/td->td_rowsperstrip; + } else + strip = row / td->td_rowsperstrip; + if (strip != tif->tif_curstrip) { + /* + * Changing strips -- flush any data present. + */ + if (!TIFFFlushData(tif)) + return (-1); + tif->tif_curstrip = strip; + /* + * Watch out for a growing image. The value of + * strips/image will initially be 1 (since it + * can't be deduced until the imagelength is known). + */ + if (strip >= td->td_stripsperimage && imagegrew) + td->td_stripsperimage = + TIFFhowmany(td->td_imagelength,td->td_rowsperstrip); + tif->tif_row = + (strip % td->td_stripsperimage) * td->td_rowsperstrip; + if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { + if (!(*tif->tif_setupencode)(tif)) + return (-1); + tif->tif_flags |= TIFF_CODERSETUP; + } + if (!(*tif->tif_preencode)(tif, sample)) + return (-1); + tif->tif_flags |= TIFF_POSTENCODE; + } + /* + * Check strip array to make sure there's space. + * We don't support dynamically growing files that + * have data organized in separate bitplanes because + * it's too painful. In that case we require that + * the imagelength be set properly before the first + * write (so that the strips array will be fully + * allocated above). + */ + if (strip >= td->td_nstrips && !TIFFGrowStrips(tif, 1, module)) + return (-1); + /* + * Ensure the write is either sequential or at the + * beginning of a strip (or that we can randomly + * access the data -- i.e. no encoding). + */ + if (row != tif->tif_row) { + if (row < tif->tif_row) { + /* + * Moving backwards within the same strip: + * backup to the start and then decode + * forward (below). + */ + tif->tif_row = (strip % td->td_stripsperimage) * + td->td_rowsperstrip; + tif->tif_rawcp = tif->tif_rawdata; + } + /* + * Seek forward to the desired row. + */ + if (!(*tif->tif_seek)(tif, row - tif->tif_row)) + return (-1); + tif->tif_row = row; + } + status = (*tif->tif_encoderow)(tif, (tidata_t) buf, + tif->tif_scanlinesize, sample); + tif->tif_row++; + return (status); +} + +/* + * Encode the supplied data and write it to the + * specified strip. There must be space for the + * data; we don't check if strips overlap! + * + * NB: Image length must be setup before writing. + */ +tsize_t +TIFFWriteEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc) +{ + static const char module[] = "TIFFWriteEncodedStrip"; + TIFFDirectory *td = &tif->tif_dir; + tsample_t sample; + + if (!WRITECHECKSTRIPS(tif, module)) + return ((tsize_t) -1); + /* + * Check strip array to make sure there's space. + * We don't support dynamically growing files that + * have data organized in separate bitplanes because + * it's too painful. In that case we require that + * the imagelength be set properly before the first + * write (so that the strips array will be fully + * allocated above). + */ + if (strip >= td->td_nstrips) { + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { + TIFFError(tif->tif_name, + "Can not grow image by strips when using separate planes"); + return ((tsize_t) -1); + } + if (!TIFFGrowStrips(tif, 1, module)) + return ((tsize_t) -1); + td->td_stripsperimage = + TIFFhowmany(td->td_imagelength, td->td_rowsperstrip); + } + /* + * Handle delayed allocation of data buffer. This + * permits it to be sized according to the directory + * info. + */ + if (!BUFFERCHECK(tif)) + return ((tsize_t) -1); + tif->tif_curstrip = strip; + tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; + if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { + if (!(*tif->tif_setupencode)(tif)) + return ((tsize_t) -1); + tif->tif_flags |= TIFF_CODERSETUP; + } + +#ifdef REWRITE_HACK + tif->tif_rawcc = 0; + tif->tif_rawcp = tif->tif_rawdata; + + if( td->td_stripbytecount[strip] > 0 ) + { + /* if we are writing over existing tiles, zero length. */ + td->td_stripbytecount[strip] = 0; + + /* this forces TIFFAppendToStrip() to do a seek */ + tif->tif_curoff = 0; + } +#endif + + tif->tif_flags &= ~TIFF_POSTENCODE; + sample = (tsample_t)(strip / td->td_stripsperimage); + if (!(*tif->tif_preencode)(tif, sample)) + return ((tsize_t) -1); + if (!(*tif->tif_encodestrip)(tif, (tidata_t) data, cc, sample)) + return ((tsize_t) 0); + if (!(*tif->tif_postencode)(tif)) + return ((tsize_t) -1); + if (!isFillOrder(tif, td->td_fillorder) && + (tif->tif_flags & TIFF_NOBITREV) == 0) + TIFFReverseBits(tif->tif_rawdata, tif->tif_rawcc); + if (tif->tif_rawcc > 0 && + !TIFFAppendToStrip(tif, strip, tif->tif_rawdata, tif->tif_rawcc)) + return ((tsize_t) -1); + tif->tif_rawcc = 0; + tif->tif_rawcp = tif->tif_rawdata; + return (cc); +} + +/* + * Write the supplied data to the specified strip. + * There must be space for the data; we don't check + * if strips overlap! + * + * NB: Image length must be setup before writing. + */ +tsize_t +TIFFWriteRawStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc) +{ + static const char module[] = "TIFFWriteRawStrip"; + TIFFDirectory *td = &tif->tif_dir; + + if (!WRITECHECKSTRIPS(tif, module)) + return ((tsize_t) -1); + /* + * Check strip array to make sure there's space. + * We don't support dynamically growing files that + * have data organized in separate bitplanes because + * it's too painful. In that case we require that + * the imagelength be set properly before the first + * write (so that the strips array will be fully + * allocated above). + */ + if (strip >= td->td_nstrips) { + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { + TIFFError(tif->tif_name, + "Can not grow image by strips when using separate planes"); + return ((tsize_t) -1); + } + /* + * Watch out for a growing image. The value of + * strips/image will initially be 1 (since it + * can't be deduced until the imagelength is known). + */ + if (strip >= td->td_stripsperimage) + td->td_stripsperimage = + TIFFhowmany(td->td_imagelength,td->td_rowsperstrip); + if (!TIFFGrowStrips(tif, 1, module)) + return ((tsize_t) -1); + } + tif->tif_curstrip = strip; + tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; + return (TIFFAppendToStrip(tif, strip, (tidata_t) data, cc) ? + cc : (tsize_t) -1); +} + +/* + * Write and compress a tile of data. The + * tile is selected by the (x,y,z,s) coordinates. + */ +tsize_t +TIFFWriteTile(TIFF* tif, + tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t s) +{ + if (!TIFFCheckTile(tif, x, y, z, s)) + return (-1); + /* + * NB: A tile size of -1 is used instead of tif_tilesize knowing + * that TIFFWriteEncodedTile will clamp this to the tile size. + * This is done because the tile size may not be defined until + * after the output buffer is setup in TIFFWriteBufferSetup. + */ + return (TIFFWriteEncodedTile(tif, + TIFFComputeTile(tif, x, y, z, s), buf, (tsize_t) -1)); +} + +/* + * Encode the supplied data and write it to the + * specified tile. There must be space for the + * data. The function clamps individual writes + * to a tile to the tile size, but does not (and + * can not) check that multiple writes to the same + * tile do not write more than tile size data. + * + * NB: Image length must be setup before writing; this + * interface does not support automatically growing + * the image on each write (as TIFFWriteScanline does). + */ +tsize_t +TIFFWriteEncodedTile(TIFF* tif, ttile_t tile, tdata_t data, tsize_t cc) +{ + static const char module[] = "TIFFWriteEncodedTile"; + TIFFDirectory *td; + tsample_t sample; + + if (!WRITECHECKTILES(tif, module)) + return ((tsize_t) -1); + td = &tif->tif_dir; + if (tile >= td->td_nstrips) { + TIFFError(module, "%s: Tile %lu out of range, max %lu", + tif->tif_name, (u_long) tile, (u_long) td->td_nstrips); + return ((tsize_t) -1); + } + /* + * Handle delayed allocation of data buffer. This + * permits it to be sized more intelligently (using + * directory information). + */ + if (!BUFFERCHECK(tif)) + return ((tsize_t) -1); + tif->tif_curtile = tile; + +#ifdef REWRITE_HACK + tif->tif_rawcc = 0; + tif->tif_rawcp = tif->tif_rawdata; + + if( td->td_stripbytecount[tile] > 0 ) + { + /* if we are writing over existing tiles, zero length. */ + td->td_stripbytecount[tile] = 0; + + /* this forces TIFFAppendToStrip() to do a seek */ + tif->tif_curoff = 0; + } +#endif + + /* + * Compute tiles per row & per column to compute + * current row and column + */ + tif->tif_row = (tile % TIFFhowmany(td->td_imagelength, td->td_tilelength)) + * td->td_tilelength; + tif->tif_col = (tile % TIFFhowmany(td->td_imagewidth, td->td_tilewidth)) + * td->td_tilewidth; + + if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { + if (!(*tif->tif_setupencode)(tif)) + return ((tsize_t) -1); + tif->tif_flags |= TIFF_CODERSETUP; + } + tif->tif_flags &= ~TIFF_POSTENCODE; + sample = (tsample_t)(tile/td->td_stripsperimage); + if (!(*tif->tif_preencode)(tif, sample)) + return ((tsize_t) -1); + /* + * Clamp write amount to the tile size. This is mostly + * done so that callers can pass in some large number + * (e.g. -1) and have the tile size used instead. + */ + if ( cc < 1 || cc > tif->tif_tilesize) + cc = tif->tif_tilesize; + if (!(*tif->tif_encodetile)(tif, (tidata_t) data, cc, sample)) + return ((tsize_t) 0); + if (!(*tif->tif_postencode)(tif)) + return ((tsize_t) -1); + if (!isFillOrder(tif, td->td_fillorder) && + (tif->tif_flags & TIFF_NOBITREV) == 0) + TIFFReverseBits((u_char *)tif->tif_rawdata, tif->tif_rawcc); + if (tif->tif_rawcc > 0 && !TIFFAppendToStrip(tif, tile, + tif->tif_rawdata, tif->tif_rawcc)) + return ((tsize_t) -1); + tif->tif_rawcc = 0; + tif->tif_rawcp = tif->tif_rawdata; + return (cc); +} + +/* + * Write the supplied data to the specified strip. + * There must be space for the data; we don't check + * if strips overlap! + * + * NB: Image length must be setup before writing; this + * interface does not support automatically growing + * the image on each write (as TIFFWriteScanline does). + */ +tsize_t +TIFFWriteRawTile(TIFF* tif, ttile_t tile, tdata_t data, tsize_t cc) +{ + static const char module[] = "TIFFWriteRawTile"; + + if (!WRITECHECKTILES(tif, module)) + return ((tsize_t) -1); + if (tile >= tif->tif_dir.td_nstrips) { + TIFFError(module, "%s: Tile %lu out of range, max %lu", + tif->tif_name, (u_long) tile, + (u_long) tif->tif_dir.td_nstrips); + return ((tsize_t) -1); + } + return (TIFFAppendToStrip(tif, tile, (tidata_t) data, cc) ? + cc : (tsize_t) -1); +} + +#define isUnspecified(tif, f) \ + (TIFFFieldSet(tif,f) && (tif)->tif_dir.td_imagelength == 0) + +static int +TIFFSetupStrips(TIFF* tif) +{ + TIFFDirectory* td = &tif->tif_dir; + + if (isTiled(tif)) + td->td_stripsperimage = + isUnspecified(tif, FIELD_TILEDIMENSIONS) ? + td->td_samplesperpixel : TIFFNumberOfTiles(tif); + else + td->td_stripsperimage = + isUnspecified(tif, FIELD_ROWSPERSTRIP) ? + td->td_samplesperpixel : TIFFNumberOfStrips(tif); + td->td_nstrips = td->td_stripsperimage; + if (td->td_planarconfig == PLANARCONFIG_SEPARATE) + td->td_stripsperimage /= td->td_samplesperpixel; + td->td_stripoffset = (uint32 *) + _TIFFmalloc(td->td_nstrips * sizeof (uint32)); + td->td_stripbytecount = (uint32 *) + _TIFFmalloc(td->td_nstrips * sizeof (uint32)); + if (td->td_stripoffset == NULL || td->td_stripbytecount == NULL) + return (0); + /* + * Place data at the end-of-file + * (by setting offsets to zero). + */ + _TIFFmemset(td->td_stripoffset, 0, td->td_nstrips*sizeof (uint32)); + _TIFFmemset(td->td_stripbytecount, 0, td->td_nstrips*sizeof (uint32)); + TIFFSetFieldBit(tif, FIELD_STRIPOFFSETS); + TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS); + return (1); +} +#undef isUnspecified + +/* + * Verify file is writable and that the directory + * information is setup properly. In doing the latter + * we also "freeze" the state of the directory so + * that important information is not changed. + */ +int +TIFFWriteCheck(TIFF* tif, int tiles, const char* module) +{ + if (tif->tif_mode == O_RDONLY) { + TIFFError(module, "%s: File not open for writing", + tif->tif_name); + return (0); + } + if (tiles ^ isTiled(tif)) { + TIFFError(tif->tif_name, tiles ? + "Can not write tiles to a stripped image" : + "Can not write scanlines to a tiled image"); + return (0); + } + /* + * On the first write verify all the required information + * has been setup and initialize any data structures that + * had to wait until directory information was set. + * Note that a lot of our work is assumed to remain valid + * because we disallow any of the important parameters + * from changing after we start writing (i.e. once + * TIFF_BEENWRITING is set, TIFFSetField will only allow + * the image's length to be changed). + */ + if (!TIFFFieldSet(tif, FIELD_IMAGEDIMENSIONS)) { + TIFFError(module, + "%s: Must set \"ImageWidth\" before writing data", + tif->tif_name); + return (0); + } + if (!TIFFFieldSet(tif, FIELD_PLANARCONFIG)) { + TIFFError(module, + "%s: Must set \"PlanarConfiguration\" before writing data", + tif->tif_name); + return (0); + } + if (tif->tif_dir.td_stripoffset == NULL && !TIFFSetupStrips(tif)) { + tif->tif_dir.td_nstrips = 0; + TIFFError(module, "%s: No space for %s arrays", + tif->tif_name, isTiled(tif) ? "tile" : "strip"); + return (0); + } + tif->tif_tilesize = TIFFTileSize(tif); + tif->tif_scanlinesize = TIFFScanlineSize(tif); + tif->tif_flags |= TIFF_BEENWRITING; + return (1); +} + +/* + * Setup the raw data buffer used for encoding. + */ +int +TIFFWriteBufferSetup(TIFF* tif, tdata_t bp, tsize_t size) +{ + static const char module[] = "TIFFWriteBufferSetup"; + + if (tif->tif_rawdata) { + if (tif->tif_flags & TIFF_MYBUFFER) { + _TIFFfree(tif->tif_rawdata); + tif->tif_flags &= ~TIFF_MYBUFFER; + } + tif->tif_rawdata = NULL; + } + if (size == (tsize_t) -1) { + size = (isTiled(tif) ? + tif->tif_tilesize : tif->tif_scanlinesize); + /* + * Make raw data buffer at least 8K + */ + if (size < 8*1024) + size = 8*1024; + bp = NULL; /* NB: force malloc */ + } + if (bp == NULL) { + bp = _TIFFmalloc(size); + if (bp == NULL) { + TIFFError(module, "%s: No space for output buffer", + tif->tif_name); + return (0); + } + tif->tif_flags |= TIFF_MYBUFFER; + } else + tif->tif_flags &= ~TIFF_MYBUFFER; + tif->tif_rawdata = (tidata_t) bp; + tif->tif_rawdatasize = size; + tif->tif_rawcc = 0; + tif->tif_rawcp = tif->tif_rawdata; + tif->tif_flags |= TIFF_BUFFERSETUP; + return (1); +} + +/* + * Grow the strip data structures by delta strips. + */ +static int +TIFFGrowStrips(TIFF* tif, int delta, const char* module) +{ + TIFFDirectory *td = &tif->tif_dir; + + assert(td->td_planarconfig == PLANARCONFIG_CONTIG); + td->td_stripoffset = (uint32*)_TIFFrealloc(td->td_stripoffset, + (td->td_nstrips + delta) * sizeof (uint32)); + td->td_stripbytecount = (uint32*)_TIFFrealloc(td->td_stripbytecount, + (td->td_nstrips + delta) * sizeof (uint32)); + if (td->td_stripoffset == NULL || td->td_stripbytecount == NULL) { + td->td_nstrips = 0; + TIFFError(module, "%s: No space to expand strip arrays", + tif->tif_name); + return (0); + } + _TIFFmemset(td->td_stripoffset+td->td_nstrips, 0, delta*sizeof (uint32)); + _TIFFmemset(td->td_stripbytecount+td->td_nstrips, 0, delta*sizeof (uint32)); + td->td_nstrips += delta; + return (1); +} + +/* + * Append the data to the specified strip. + * + * NB: We don't check that there's space in the + * file (i.e. that strips do not overlap). + */ +static int +TIFFAppendToStrip(TIFF* tif, tstrip_t strip, tidata_t data, tsize_t cc) +{ + TIFFDirectory *td = &tif->tif_dir; + static const char module[] = "TIFFAppendToStrip"; + + if (td->td_stripoffset[strip] == 0 || tif->tif_curoff == 0) { + /* + * No current offset, set the current strip. + */ + if (td->td_stripoffset[strip] != 0) { + if (!SeekOK(tif, td->td_stripoffset[strip])) { + TIFFError(module, + "%s: Seek error at scanline %lu", + tif->tif_name, (u_long) tif->tif_row); + return (0); + } + } else + td->td_stripoffset[strip] = + TIFFSeekFile(tif, (toff_t) 0, SEEK_END); + tif->tif_curoff = td->td_stripoffset[strip]; + } + if (!WriteOK(tif, data, cc)) { + TIFFError(module, "%s: Write error at scanline %lu", + tif->tif_name, (u_long) tif->tif_row); + return (0); + } + tif->tif_curoff += cc; + td->td_stripbytecount[strip] += cc; + return (1); +} + +/* + * Internal version of TIFFFlushData that can be + * called by ``encodestrip routines'' w/o concern + * for infinite recursion. + */ +int +TIFFFlushData1(TIFF* tif) +{ + if (tif->tif_rawcc > 0) { + if (!isFillOrder(tif, tif->tif_dir.td_fillorder) && + (tif->tif_flags & TIFF_NOBITREV) == 0) + TIFFReverseBits((u_char *)tif->tif_rawdata, + tif->tif_rawcc); + if (!TIFFAppendToStrip(tif, + isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip, + tif->tif_rawdata, tif->tif_rawcc)) + return (0); + tif->tif_rawcc = 0; + tif->tif_rawcp = tif->tif_rawdata; + } + return (1); +} + +/* + * Set the current write offset. This should only be + * used to set the offset to a known previous location + * (very carefully), or to 0 so that the next write gets + * appended to the end of the file. + */ +void +TIFFSetWriteOffset(TIFF* tif, toff_t off) +{ + tif->tif_curoff = off; +} diff --git a/libtiff/tif_zip.c b/libtiff/tif_zip.c new file mode 100755 index 0000000..bc3129c --- /dev/null +++ b/libtiff/tif_zip.c @@ -0,0 +1,367 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tif_zip.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1995-1997 Sam Leffler + * Copyright (c) 1995-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include "tiffiop.h" +#ifdef ZIP_SUPPORT +/* + * TIFF Library. + * + * ZIP (aka Deflate) Compression Support + * + * This file is simply an interface to the zlib library written by + * Jean-loup Gailly and Mark Adler. You must use version 1.0 or later + * of the library: this code assumes the 1.0 API and also depends on + * the ability to write the zlib header multiple times (one per strip) + * which was not possible with versions prior to 0.95. Note also that + * older versions of this codec avoided this bug by supressing the header + * entirely. This means that files written with the old library cannot + * be read; they should be converted to a different compression scheme + * and then reconverted. + * + * The data format used by the zlib library is described in the files + * zlib-3.1.doc, deflate-1.1.doc and gzip-4.1.doc, available in the + * directory ftp://ftp.uu.net/pub/archiving/zip/doc. The library was + * last found at ftp://ftp.uu.net/pub/archiving/zip/zlib/zlib-0.99.tar.gz. + */ +#include "tif_predict.h" +#include "zlib.h" + +#include +#include + +/* + * Sigh, ZLIB_VERSION is defined as a string so there's no + * way to do a proper check here. Instead we guess based + * on the presence of #defines that were added between the + * 0.95 and 1.0 distributions. + */ +#if !defined(Z_NO_COMPRESSION) || !defined(Z_DEFLATED) +#error "Antiquated ZLIB software; you must use version 1.0 or later" +#endif + +/* + * State block for each open TIFF + * file using ZIP compression/decompression. + */ +typedef struct { + TIFFPredictorState predict; + z_stream stream; + int zipquality; /* compression level */ + int state; /* state flags */ +#define ZSTATE_INIT 0x1 /* zlib setup successfully */ + + TIFFVGetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ +} ZIPState; + +#define ZState(tif) ((ZIPState*) (tif)->tif_data) +#define DecoderState(tif) ZState(tif) +#define EncoderState(tif) ZState(tif) + +static int ZIPEncode(TIFF*, tidata_t, tsize_t, tsample_t); +static int ZIPDecode(TIFF*, tidata_t, tsize_t, tsample_t); + +static int +ZIPSetupDecode(TIFF* tif) +{ + ZIPState* sp = DecoderState(tif); + static const char module[] = "ZIPSetupDecode"; + + assert(sp != NULL); + if (inflateInit(&sp->stream) != Z_OK) { + TIFFError(module, "%s: %s", tif->tif_name, sp->stream.msg); + return (0); + } else { + sp->state |= ZSTATE_INIT; + return (1); + } +} + +/* + * Setup state for decoding a strip. + */ +static int +ZIPPreDecode(TIFF* tif, tsample_t s) +{ + ZIPState* sp = DecoderState(tif); + + (void) s; + assert(sp != NULL); + sp->stream.next_in = tif->tif_rawdata; + sp->stream.avail_in = tif->tif_rawcc; + return (inflateReset(&sp->stream) == Z_OK); +} + +static int +ZIPDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +{ + ZIPState* sp = DecoderState(tif); + static const char module[] = "ZIPDecode"; + + (void) s; + assert(sp != NULL); + sp->stream.next_out = op; + sp->stream.avail_out = occ; + do { + int state = inflate(&sp->stream, Z_PARTIAL_FLUSH); + if (state == Z_STREAM_END) + break; + if (state == Z_DATA_ERROR) { + TIFFError(module, + "%s: Decoding error at scanline %d, %s", + tif->tif_name, tif->tif_row, sp->stream.msg); + if (inflateSync(&sp->stream) != Z_OK) + return (0); + continue; + } + if (state != Z_OK) { + TIFFError(module, "%s: zlib error: %s", + tif->tif_name, sp->stream.msg); + return (0); + } + } while (sp->stream.avail_out > 0); + if (sp->stream.avail_out != 0) { + TIFFError(module, + "%s: Not enough data at scanline %d (short %d bytes)", + tif->tif_name, tif->tif_row, sp->stream.avail_out); + return (0); + } + return (1); +} + +static int +ZIPSetupEncode(TIFF* tif) +{ + ZIPState* sp = EncoderState(tif); + static const char module[] = "ZIPSetupEncode"; + + assert(sp != NULL); + if (deflateInit(&sp->stream, sp->zipquality) != Z_OK) { + TIFFError(module, "%s: %s", tif->tif_name, sp->stream.msg); + return (0); + } else { + sp->state |= ZSTATE_INIT; + return (1); + } +} + +/* + * Reset encoding state at the start of a strip. + */ +static int +ZIPPreEncode(TIFF* tif, tsample_t s) +{ + ZIPState *sp = EncoderState(tif); + + (void) s; + assert(sp != NULL); + sp->stream.next_out = tif->tif_rawdata; + sp->stream.avail_out = tif->tif_rawdatasize; + return (deflateReset(&sp->stream) == Z_OK); +} + +/* + * Encode a chunk of pixels. + */ +static int +ZIPEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +{ + ZIPState *sp = EncoderState(tif); + static const char module[] = "ZIPEncode"; + + (void) s; + sp->stream.next_in = bp; + sp->stream.avail_in = cc; + do { + if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK) { + TIFFError(module, "%s: Encoder error: %s", + tif->tif_name, sp->stream.msg); + return (0); + } + if (sp->stream.avail_out == 0) { + tif->tif_rawcc = tif->tif_rawdatasize; + TIFFFlushData1(tif); + sp->stream.next_out = tif->tif_rawdata; + sp->stream.avail_out = tif->tif_rawdatasize; + } + } while (sp->stream.avail_in > 0); + return (1); +} + +/* + * Finish off an encoded strip by flushing the last + * string and tacking on an End Of Information code. + */ +static int +ZIPPostEncode(TIFF* tif) +{ + ZIPState *sp = EncoderState(tif); + static const char module[] = "ZIPPostEncode"; + int state; + + sp->stream.avail_in = 0; + do { + state = deflate(&sp->stream, Z_FINISH); + switch (state) { + case Z_STREAM_END: + case Z_OK: + if (sp->stream.avail_out != tif->tif_rawdatasize) { + tif->tif_rawcc = + tif->tif_rawdatasize - sp->stream.avail_out; + TIFFFlushData1(tif); + sp->stream.next_out = tif->tif_rawdata; + sp->stream.avail_out = tif->tif_rawdatasize; + } + break; + default: + TIFFError(module, "%s: zlib error: %s", + tif->tif_name, sp->stream.msg); + return (0); + } + } while (state != Z_STREAM_END); + return (1); +} + +static void +ZIPCleanup(TIFF* tif) +{ + ZIPState* sp = ZState(tif); + if (sp) { + if (sp->state&ZSTATE_INIT) { + /* NB: avoid problems in the library */ + if (tif->tif_mode == O_RDONLY) + inflateEnd(&sp->stream); + else + deflateEnd(&sp->stream); + } + _TIFFfree(sp); + tif->tif_data = NULL; + } +} + +static int +ZIPVSetField(TIFF* tif, ttag_t tag, va_list ap) +{ + ZIPState* sp = ZState(tif); + static const char module[] = "ZIPVSetField"; + + switch (tag) { + case TIFFTAG_ZIPQUALITY: + sp->zipquality = va_arg(ap, int); + if (tif->tif_mode != O_RDONLY && (sp->state&ZSTATE_INIT)) { + if (deflateParams(&sp->stream, + sp->zipquality, Z_DEFAULT_STRATEGY) != Z_OK) { + TIFFError(module, "%s: zlib error: %s", + tif->tif_name, sp->stream.msg); + return (0); + } + } + return (1); + default: + return (*sp->vsetparent)(tif, tag, ap); + } + /*NOTREACHED*/ +} + +static int +ZIPVGetField(TIFF* tif, ttag_t tag, va_list ap) +{ + ZIPState* sp = ZState(tif); + + switch (tag) { + case TIFFTAG_ZIPQUALITY: + *va_arg(ap, int*) = sp->zipquality; + break; + default: + return (*sp->vgetparent)(tif, tag, ap); + } + return (1); +} + +static const TIFFFieldInfo zipFieldInfo[] = { + { TIFFTAG_ZIPQUALITY, 0, 0, TIFF_ANY, FIELD_PSEUDO, + TRUE, FALSE, "" }, +}; +#define N(a) (sizeof (a) / sizeof (a[0])) + +int +TIFFInitZIP(TIFF* tif, int scheme) +{ + ZIPState* sp; + + assert( (scheme == COMPRESSION_DEFLATE) || (scheme == COMPRESSION_ADOBE_DEFLATE)); + + /* + * Allocate state block so tag methods have storage to record values. + */ + tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (ZIPState)); + if (tif->tif_data == NULL) + goto bad; + sp = ZState(tif); + sp->stream.zalloc = NULL; + sp->stream.zfree = NULL; + sp->stream.opaque = NULL; + sp->stream.data_type = Z_BINARY; + + /* + * Merge codec-specific tag information and + * override parent get/set field methods. + */ + _TIFFMergeFieldInfo(tif, zipFieldInfo, N(zipFieldInfo)); + sp->vgetparent = tif->tif_vgetfield; + tif->tif_vgetfield = ZIPVGetField; /* hook for codec tags */ + sp->vsetparent = tif->tif_vsetfield; + tif->tif_vsetfield = ZIPVSetField; /* hook for codec tags */ + + /* Default values for codec-specific fields */ + sp->zipquality = Z_DEFAULT_COMPRESSION; /* default comp. level */ + sp->state = 0; + + /* + * Install codec methods. + */ + tif->tif_setupdecode = ZIPSetupDecode; + tif->tif_predecode = ZIPPreDecode; + tif->tif_decoderow = ZIPDecode; + tif->tif_decodestrip = ZIPDecode; + tif->tif_decodetile = ZIPDecode; + tif->tif_setupencode = ZIPSetupEncode; + tif->tif_preencode = ZIPPreEncode; + tif->tif_postencode = ZIPPostEncode; + tif->tif_encoderow = ZIPEncode; + tif->tif_encodestrip = ZIPEncode; + tif->tif_encodetile = ZIPEncode; + tif->tif_cleanup = ZIPCleanup; + /* + * Setup predictor setup. + */ + (void) TIFFPredictorInit(tif); + return (1); +bad: + TIFFError("TIFFInitZIP", "No space for ZIP state block"); + return (0); +} +#endif /* ZIP_SUPORT */ diff --git a/libtiff/tiff.h b/libtiff/tiff.h new file mode 100755 index 0000000..9ae8e93 --- /dev/null +++ b/libtiff/tiff.h @@ -0,0 +1,439 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tiff.h,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#ifndef _TIFF_ +#define _TIFF_ +/* + * Tag Image File Format (TIFF) + * + * Based on Rev 6.0 from: + * Developer's Desk + * Aldus Corporation + * 411 First Ave. South + * Suite 200 + * Seattle, WA 98104 + * 206-622-5500 + */ +#define TIFF_VERSION 42 + +#define TIFF_BIGENDIAN 0x4d4d +#define TIFF_LITTLEENDIAN 0x4949 + +#ifndef _TIFF_DATA_TYPEDEFS_ +#define _TIFF_DATA_TYPEDEFS_ +/* + * Intrinsic data types required by the file format: + * + * 8-bit quantities int8/uint8 + * 16-bit quantities int16/uint16 + * 32-bit quantities int32/uint32 + * strings unsigned char* + */ +#ifdef __STDC__ +typedef signed char int8; /* NB: non-ANSI compilers may not grok */ +#else +typedef char int8; +#endif +typedef unsigned char uint8; +typedef short int16; +typedef unsigned short uint16; /* sizeof (uint16) must == 2 */ +#if defined(__alpha) || (defined(_MIPS_SZLONG) && _MIPS_SZLONG == 64) +typedef int int32; +typedef unsigned int uint32; /* sizeof (uint32) must == 4 */ +#else +typedef long int32; +typedef unsigned long uint32; /* sizeof (uint32) must == 4 */ +#endif +#endif /* _TIFF_DATA_TYPEDEFS_ */ + +/* For TIFFReassignTagToIgnore */ +enum TIFFIgnoreSense /* IGNORE tag table */ +{ + TIS_STORE, + TIS_EXTRACT, + TIS_EMPTY +}; + +typedef struct { + uint16 tiff_magic; /* magic number (defines byte order) */ + uint16 tiff_version; /* TIFF version number */ + uint32 tiff_diroff; /* byte offset to first directory */ +} TIFFHeader; + +/* + * TIFF Image File Directories are comprised of + * a table of field descriptors of the form shown + * below. The table is sorted in ascending order + * by tag. The values associated with each entry + * are disjoint and may appear anywhere in the file + * (so long as they are placed on a word boundary). + * + * If the value is 4 bytes or less, then it is placed + * in the offset field to save space. If the value + * is less than 4 bytes, it is left-justified in the + * offset field. + */ +typedef struct { + uint16 tdir_tag; /* see below */ + uint16 tdir_type; /* data type; see below */ + uint32 tdir_count; /* number of items; length in spec */ + uint32 tdir_offset; /* byte offset to field data */ +} TIFFDirEntry; + +/* + * NB: In the comments below, + * - items marked with a + are obsoleted by revision 5.0, + * - items marked with a ! are introduced in revision 6.0. + * - items marked with a % are introduced post revision 6.0. + * - items marked with a $ are obsoleted by revision 6.0. + */ + +/* + * Tag data type information. + * + * Note: RATIONALs are the ratio of two 32-bit integer values. + */ +typedef enum { + TIFF_NOTYPE = 0, /* placeholder */ + TIFF_BYTE = 1, /* 8-bit unsigned integer */ + TIFF_ASCII = 2, /* 8-bit bytes w/ last byte null */ + TIFF_SHORT = 3, /* 16-bit unsigned integer */ + TIFF_LONG = 4, /* 32-bit unsigned integer */ + TIFF_RATIONAL = 5, /* 64-bit unsigned fraction */ + TIFF_SBYTE = 6, /* !8-bit signed integer */ + TIFF_UNDEFINED = 7, /* !8-bit untyped data */ + TIFF_SSHORT = 8, /* !16-bit signed integer */ + TIFF_SLONG = 9, /* !32-bit signed integer */ + TIFF_SRATIONAL = 10, /* !64-bit signed fraction */ + TIFF_FLOAT = 11, /* !32-bit IEEE floating point */ + TIFF_DOUBLE = 12 /* !64-bit IEEE floating point */ +} TIFFDataType; + +/* + * TIFF Tag Definitions. + */ +#define TIFFTAG_SUBFILETYPE 254 /* subfile data descriptor */ +#define FILETYPE_REDUCEDIMAGE 0x1 /* reduced resolution version */ +#define FILETYPE_PAGE 0x2 /* one page of many */ +#define FILETYPE_MASK 0x4 /* transparency mask */ +#define TIFFTAG_OSUBFILETYPE 255 /* +kind of data in subfile */ +#define OFILETYPE_IMAGE 1 /* full resolution image data */ +#define OFILETYPE_REDUCEDIMAGE 2 /* reduced size image data */ +#define OFILETYPE_PAGE 3 /* one page of many */ +#define TIFFTAG_IMAGEWIDTH 256 /* image width in pixels */ +#define TIFFTAG_IMAGELENGTH 257 /* image height in pixels */ +#define TIFFTAG_BITSPERSAMPLE 258 /* bits per channel (sample) */ +#define TIFFTAG_COMPRESSION 259 /* data compression technique */ +#define COMPRESSION_NONE 1 /* dump mode */ +#define COMPRESSION_CCITTRLE 2 /* CCITT modified Huffman RLE */ +#define COMPRESSION_CCITTFAX3 3 /* CCITT Group 3 fax encoding */ +#define COMPRESSION_CCITTFAX4 4 /* CCITT Group 4 fax encoding */ +#define COMPRESSION_LZW 5 /* Lempel-Ziv & Welch */ +#define COMPRESSION_OJPEG 6 /* !6.0 JPEG */ +#define COMPRESSION_JPEG 7 /* %JPEG DCT compression */ +#define COMPRESSION_NEXT 32766 /* NeXT 2-bit RLE */ +#define COMPRESSION_CCITTRLEW 32771 /* #1 w/ word alignment */ +#define COMPRESSION_PACKBITS 32773 /* Macintosh RLE */ +#define COMPRESSION_THUNDERSCAN 32809 /* ThunderScan RLE */ +/* codes 32895-32898 are reserved for ANSI IT8 TIFF/IT */ +#define COMPRESSION_DCS 32947 /* Kodak DCS encoding */ +#define COMPRESSION_JBIG 34661 /* ISO JBIG */ +#define COMPRESSION_SGILOG 34676 /* SGI Log Luminance RLE */ +#define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */ +#define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */ +#define PHOTOMETRIC_MINISWHITE 0 /* min value is white */ +#define PHOTOMETRIC_MINISBLACK 1 /* min value is black */ +#define PHOTOMETRIC_RGB 2 /* RGB color model */ +#define PHOTOMETRIC_PALETTE 3 /* color map indexed */ +#define PHOTOMETRIC_MASK 4 /* $holdout mask */ +#define PHOTOMETRIC_SEPARATED 5 /* !color separations */ +#define PHOTOMETRIC_YCBCR 6 /* !CCIR 601 */ +#define PHOTOMETRIC_CIELAB 8 /* !1976 CIE L*a*b* */ +#define PHOTOMETRIC_LOGL 32844 /* CIE Log2(L) */ +#define PHOTOMETRIC_LOGLUV 32845 /* CIE Log2(L) (u',v') */ +#define TIFFTAG_THRESHHOLDING 263 /* +thresholding used on data */ +#define THRESHHOLD_BILEVEL 1 /* b&w art scan */ +#define THRESHHOLD_HALFTONE 2 /* or dithered scan */ +#define THRESHHOLD_ERRORDIFFUSE 3 /* usually floyd-steinberg */ +#define TIFFTAG_CELLWIDTH 264 /* +dithering matrix width */ +#define TIFFTAG_CELLLENGTH 265 /* +dithering matrix height */ +#define TIFFTAG_FILLORDER 266 /* data order within a byte */ +#define FILLORDER_MSB2LSB 1 /* most significant -> least */ +#define FILLORDER_LSB2MSB 2 /* least significant -> most */ +#define TIFFTAG_DOCUMENTNAME 269 /* name of doc. image is from */ +#define TIFFTAG_IMAGEDESCRIPTION 270 /* info about image */ +#define TIFFTAG_MAKE 271 /* scanner manufacturer name */ +#define TIFFTAG_MODEL 272 /* scanner model name/number */ +#define TIFFTAG_STRIPOFFSETS 273 /* offsets to data strips */ +#define TIFFTAG_ORIENTATION 274 /* +image orientation */ +#define ORIENTATION_TOPLEFT 1 /* row 0 top, col 0 lhs */ +#define ORIENTATION_TOPRIGHT 2 /* row 0 top, col 0 rhs */ +#define ORIENTATION_BOTRIGHT 3 /* row 0 bottom, col 0 rhs */ +#define ORIENTATION_BOTLEFT 4 /* row 0 bottom, col 0 lhs */ +#define ORIENTATION_LEFTTOP 5 /* row 0 lhs, col 0 top */ +#define ORIENTATION_RIGHTTOP 6 /* row 0 rhs, col 0 top */ +#define ORIENTATION_RIGHTBOT 7 /* row 0 rhs, col 0 bottom */ +#define ORIENTATION_LEFTBOT 8 /* row 0 lhs, col 0 bottom */ +#define TIFFTAG_SAMPLESPERPIXEL 277 /* samples per pixel */ +#define TIFFTAG_ROWSPERSTRIP 278 /* rows per strip of data */ +#define TIFFTAG_STRIPBYTECOUNTS 279 /* bytes counts for strips */ +#define TIFFTAG_MINSAMPLEVALUE 280 /* +minimum sample value */ +#define TIFFTAG_MAXSAMPLEVALUE 281 /* +maximum sample value */ +#define TIFFTAG_XRESOLUTION 282 /* pixels/resolution in x */ +#define TIFFTAG_YRESOLUTION 283 /* pixels/resolution in y */ +#define TIFFTAG_PLANARCONFIG 284 /* storage organization */ +#define PLANARCONFIG_CONTIG 1 /* single image plane */ +#define PLANARCONFIG_SEPARATE 2 /* separate planes of data */ +#define TIFFTAG_PAGENAME 285 /* page name image is from */ +#define TIFFTAG_XPOSITION 286 /* x page offset of image lhs */ +#define TIFFTAG_YPOSITION 287 /* y page offset of image lhs */ +#define TIFFTAG_FREEOFFSETS 288 /* +byte offset to free block */ +#define TIFFTAG_FREEBYTECOUNTS 289 /* +sizes of free blocks */ +#define TIFFTAG_GRAYRESPONSEUNIT 290 /* $gray scale curve accuracy */ +#define GRAYRESPONSEUNIT_10S 1 /* tenths of a unit */ +#define GRAYRESPONSEUNIT_100S 2 /* hundredths of a unit */ +#define GRAYRESPONSEUNIT_1000S 3 /* thousandths of a unit */ +#define GRAYRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */ +#define GRAYRESPONSEUNIT_100000S 5 /* hundred-thousandths */ +#define TIFFTAG_GRAYRESPONSECURVE 291 /* $gray scale response curve */ +#define TIFFTAG_GROUP3OPTIONS 292 /* 32 flag bits */ +#define GROUP3OPT_2DENCODING 0x1 /* 2-dimensional coding */ +#define GROUP3OPT_UNCOMPRESSED 0x2 /* data not compressed */ +#define GROUP3OPT_FILLBITS 0x4 /* fill to byte boundary */ +#define TIFFTAG_GROUP4OPTIONS 293 /* 32 flag bits */ +#define GROUP4OPT_UNCOMPRESSED 0x2 /* data not compressed */ +#define TIFFTAG_RESOLUTIONUNIT 296 /* units of resolutions */ +#define RESUNIT_NONE 1 /* no meaningful units */ +#define RESUNIT_INCH 2 /* english */ +#define RESUNIT_CENTIMETER 3 /* metric */ +#define TIFFTAG_PAGENUMBER 297 /* page numbers of multi-page */ +#define TIFFTAG_COLORRESPONSEUNIT 300 /* $color curve accuracy */ +#define COLORRESPONSEUNIT_10S 1 /* tenths of a unit */ +#define COLORRESPONSEUNIT_100S 2 /* hundredths of a unit */ +#define COLORRESPONSEUNIT_1000S 3 /* thousandths of a unit */ +#define COLORRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */ +#define COLORRESPONSEUNIT_100000S 5 /* hundred-thousandths */ +#define TIFFTAG_TRANSFERFUNCTION 301 /* !colorimetry info */ +#define TIFFTAG_SOFTWARE 305 /* name & release */ +#define TIFFTAG_DATETIME 306 /* creation date and time */ +#define TIFFTAG_ARTIST 315 /* creator of image */ +#define TIFFTAG_HOSTCOMPUTER 316 /* machine where created */ +#define TIFFTAG_PREDICTOR 317 /* prediction scheme w/ LZW */ +#define TIFFTAG_WHITEPOINT 318 /* image white point */ +#define TIFFTAG_PRIMARYCHROMATICITIES 319 /* !primary chromaticities */ +#define TIFFTAG_COLORMAP 320 /* RGB map for pallette image */ +#define TIFFTAG_HALFTONEHINTS 321 /* !highlight+shadow info */ +#define TIFFTAG_TILEWIDTH 322 /* !rows/data tile */ +#define TIFFTAG_TILELENGTH 323 /* !cols/data tile */ +#define TIFFTAG_TILEOFFSETS 324 /* !offsets to data tiles */ +#define TIFFTAG_TILEBYTECOUNTS 325 /* !byte counts for tiles */ +#define TIFFTAG_BADFAXLINES 326 /* lines w/ wrong pixel count */ +#define TIFFTAG_CLEANFAXDATA 327 /* regenerated line info */ +#define CLEANFAXDATA_CLEAN 0 /* no errors detected */ +#define CLEANFAXDATA_REGENERATED 1 /* receiver regenerated lines */ +#define CLEANFAXDATA_UNCLEAN 2 /* uncorrected errors exist */ +#define TIFFTAG_CONSECUTIVEBADFAXLINES 328 /* max consecutive bad lines */ +#define TIFFTAG_SUBIFD 330 /* subimage descriptors */ +#define TIFFTAG_INKSET 332 /* !inks in separated image */ +#define INKSET_CMYK 1 /* !cyan-magenta-yellow-black */ +#define TIFFTAG_INKNAMES 333 /* !ascii names of inks */ +#define TIFFTAG_NUMBEROFINKS 334 /* !number of inks */ +#define TIFFTAG_DOTRANGE 336 /* !0% and 100% dot codes */ +#define TIFFTAG_TARGETPRINTER 337 /* !separation target */ +#define TIFFTAG_EXTRASAMPLES 338 /* !info about extra samples */ +#define EXTRASAMPLE_UNSPECIFIED 0 /* !unspecified data */ +#define EXTRASAMPLE_ASSOCALPHA 1 /* !associated alpha data */ +#define EXTRASAMPLE_UNASSALPHA 2 /* !unassociated alpha data */ +#define TIFFTAG_SAMPLEFORMAT 339 /* !data sample format */ +#define SAMPLEFORMAT_UINT 1 /* !unsigned integer data */ +#define SAMPLEFORMAT_INT 2 /* !signed integer data */ +#define SAMPLEFORMAT_IEEEFP 3 /* !IEEE floating point data */ +#define SAMPLEFORMAT_VOID 4 /* !untyped data */ +#define TIFFTAG_SMINSAMPLEVALUE 340 /* !variable MinSampleValue */ +#define TIFFTAG_SMAXSAMPLEVALUE 341 /* !variable MaxSampleValue */ +#define TIFFTAG_JPEGTABLES 347 /* %JPEG table stream */ +/* + * Tags 512-521 are obsoleted by Technical Note #2 + * which specifies a revised JPEG-in-TIFF scheme. + */ +#define TIFFTAG_JPEGPROC 512 /* !JPEG processing algorithm */ +#define JPEGPROC_BASELINE 1 /* !baseline sequential */ +#define JPEGPROC_LOSSLESS 14 /* !Huffman coded lossless */ +#define TIFFTAG_JPEGIFOFFSET 513 /* !pointer to SOI marker */ +#define TIFFTAG_JPEGIFBYTECOUNT 514 /* !JFIF stream length */ +#define TIFFTAG_JPEGRESTARTINTERVAL 515 /* !restart interval length */ +#define TIFFTAG_JPEGLOSSLESSPREDICTORS 517 /* !lossless proc predictor */ +#define TIFFTAG_JPEGPOINTTRANSFORM 518 /* !lossless point transform */ +#define TIFFTAG_JPEGQTABLES 519 /* !Q matrice offsets */ +#define TIFFTAG_JPEGDCTABLES 520 /* !DCT table offsets */ +#define TIFFTAG_JPEGACTABLES 521 /* !AC coefficient offsets */ +#define TIFFTAG_YCBCRCOEFFICIENTS 529 /* !RGB -> YCbCr transform */ +#define TIFFTAG_YCBCRSUBSAMPLING 530 /* !YCbCr subsampling factors */ +#define TIFFTAG_YCBCRPOSITIONING 531 /* !subsample positioning */ +#define YCBCRPOSITION_CENTERED 1 /* !as in PostScript Level 2 */ +#define YCBCRPOSITION_COSITED 2 /* !as in CCIR 601-1 */ +#define TIFFTAG_REFERENCEBLACKWHITE 532 /* !colorimetry info */ +/* tags 32952-32956 are private tags registered to Island Graphics */ +#define TIFFTAG_REFPTS 32953 /* image reference points */ +#define TIFFTAG_REGIONTACKPOINT 32954 /* region-xform tack point */ +#define TIFFTAG_REGIONWARPCORNERS 32955 /* warp quadrilateral */ +#define TIFFTAG_REGIONAFFINE 32956 /* affine transformation mat */ +/* tags 32995-32999 are private tags registered to SGI */ +#define TIFFTAG_MATTEING 32995 /* $use ExtraSamples */ +#define TIFFTAG_DATATYPE 32996 /* $use SampleFormat */ +#define TIFFTAG_IMAGEDEPTH 32997 /* z depth of image */ +#define TIFFTAG_TILEDEPTH 32998 /* z depth/data tile */ +/* tags 33300-33309 are private tags registered to Pixar */ +/* + * TIFFTAG_PIXAR_IMAGEFULLWIDTH and TIFFTAG_PIXAR_IMAGEFULLLENGTH + * are set when an image has been cropped out of a larger image. + * They reflect the size of the original uncropped image. + * The TIFFTAG_XPOSITION and TIFFTAG_YPOSITION can be used + * to determine the position of the smaller image in the larger one. + */ +#define TIFFTAG_PIXAR_IMAGEFULLWIDTH 33300 /* full image size in x */ +#define TIFFTAG_PIXAR_IMAGEFULLLENGTH 33301 /* full image size in y */ + /* Tags 33302-33306 are used to identify special image modes and data + * used by Pixar's texture formats. + */ +#define TIFFTAG_PIXAR_TEXTUREFORMAT 33302 /* texture map format */ +#define TIFFTAG_PIXAR_WRAPMODES 33303 /* s & t wrap modes */ +#define TIFFTAG_PIXAR_FOVCOT 33304 /* cotan(fov) for env. maps */ +#define TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN 33305 +#define TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA 33306 +/* tag 33405 is a private tag registered to Eastman Kodak */ +#define TIFFTAG_WRITERSERIALNUMBER 33405 /* device serial number */ +/* tag 33432 is listed in the 6.0 spec w/ unknown ownership */ +#define TIFFTAG_COPYRIGHT 33432 /* copyright string */ +/* IPTC TAG from RichTIFF specifications */ +#define TIFFTAG_RICHTIFFIPTC 33723 +/* 34016-34029 are reserved for ANSI IT8 TIFF/IT */ +#define TIFFTAG_STONITS 37439 /* Sample value to Nits */ +/* tag 34929 is a private tag registered to FedEx */ +#define TIFFTAG_FEDEX_EDR 34929 /* unknown use */ +/* tag 65535 is an undefined tag used by Eastman Kodak */ +#define TIFFTAG_DCSHUESHIFTVALUES 65535 /* hue shift correction data */ + +/* + * The following are ``pseudo tags'' that can be + * used to control codec-specific functionality. + * These tags are not written to file. Note that + * these values start at 0xffff+1 so that they'll + * never collide with Aldus-assigned tags. + * + * If you want your private pseudo tags ``registered'' + * (i.e. added to this file), send mail to sam@sgi.com + * with the appropriate C definitions to add. + */ +#define TIFFTAG_FAXMODE 65536 /* Group 3/4 format control */ +#define FAXMODE_CLASSIC 0x0000 /* default, include RTC */ +#define FAXMODE_NORTC 0x0001 /* no RTC at end of data */ +#define FAXMODE_NOEOL 0x0002 /* no EOL code at end of row */ +#define FAXMODE_BYTEALIGN 0x0004 /* byte align row */ +#define FAXMODE_WORDALIGN 0x0008 /* word align row */ +#define FAXMODE_CLASSF FAXMODE_NORTC /* TIFF Class F */ +#define TIFFTAG_JPEGQUALITY 65537 /* Compression quality level */ +/* Note: quality level is on the IJG 0-100 scale. Default value is 75 */ +#define TIFFTAG_JPEGCOLORMODE 65538 /* Auto RGB<=>YCbCr convert? */ +#define JPEGCOLORMODE_RAW 0x0000 /* no conversion (default) */ +#define JPEGCOLORMODE_RGB 0x0001 /* do auto conversion */ +#define TIFFTAG_JPEGTABLESMODE 65539 /* What to put in JPEGTables */ +#define JPEGTABLESMODE_QUANT 0x0001 /* include quantization tbls */ +#define JPEGTABLESMODE_HUFF 0x0002 /* include Huffman tbls */ +/* Note: default is JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF */ +#define TIFFTAG_FAXFILLFUNC 65540 /* G3/G4 fill function */ +#define TIFFTAG_PIXARLOGDATAFMT 65549 /* PixarLogCodec I/O data sz */ +#define PIXARLOGDATAFMT_8BIT 0 /* regular u_char samples */ +#define PIXARLOGDATAFMT_8BITABGR 1 /* ABGR-order u_chars */ +#define PIXARLOGDATAFMT_11BITLOG 2 /* 11-bit log-encoded (raw) */ +#define PIXARLOGDATAFMT_12BITPICIO 3 /* as per PICIO (1.0==2048) */ +#define PIXARLOGDATAFMT_16BIT 4 /* signed short samples */ +#define PIXARLOGDATAFMT_FLOAT 5 /* IEEE float samples */ +/* 65550-65556 are allocated to Oceana Matrix */ +#define TIFFTAG_DCSIMAGERTYPE 65550 /* imager model & filter */ +#define DCSIMAGERMODEL_M3 0 /* M3 chip (1280 x 1024) */ +#define DCSIMAGERMODEL_M5 1 /* M5 chip (1536 x 1024) */ +#define DCSIMAGERMODEL_M6 2 /* M6 chip (3072 x 2048) */ +#define DCSIMAGERFILTER_IR 0 /* infrared filter */ +#define DCSIMAGERFILTER_MONO 1 /* monochrome filter */ +#define DCSIMAGERFILTER_CFA 2 /* color filter array */ +#define DCSIMAGERFILTER_OTHER 3 /* other filter */ +#define TIFFTAG_DCSINTERPMODE 65551 /* interpolation mode */ +#define DCSINTERPMODE_NORMAL 0x0 /* whole image, default */ +#define DCSINTERPMODE_PREVIEW 0x1 /* preview of image (384x256) */ +#define TIFFTAG_DCSBALANCEARRAY 65552 /* color balance values */ +#define TIFFTAG_DCSCORRECTMATRIX 65553 /* color correction values */ +#define TIFFTAG_DCSGAMMA 65554 /* gamma value */ +#define TIFFTAG_DCSTOESHOULDERPTS 65555 /* toe & shoulder points */ +#define TIFFTAG_DCSCALIBRATIONFD 65556 /* calibration file desc */ +/* Note: quality level is on the ZLIB 1-9 scale. Default value is -1 */ +#define TIFFTAG_ZIPQUALITY 65557 /* compression quality level */ +#define TIFFTAG_PIXARLOGQUALITY 65558 /* PixarLog uses same scale */ +/* 65559 is allocated to Oceana Matrix */ +#define TIFFTAG_DCSCLIPRECTANGLE 65559 /* area of image to acquire */ +#define TIFFTAG_SGILOGDATAFMT 65560 /* SGILog user data format */ +#define SGILOGDATAFMT_FLOAT 0 /* IEEE float samples */ +#define SGILOGDATAFMT_16BIT 1 /* 16-bit samples */ +#define SGILOGDATAFMT_RAW 2 /* uninterpreted data */ +#define SGILOGDATAFMT_8BIT 3 /* 8-bit RGB monitor values */ +#endif /* _TIFF_ */ diff --git a/libtiff/tiffcomp.h b/libtiff/tiffcomp.h new file mode 100755 index 0000000..428e1e1 --- /dev/null +++ b/libtiff/tiffcomp.h @@ -0,0 +1,214 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tiffcomp.h,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1990-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#ifndef _COMPAT_ +#define _COMPAT_ +/* + * This file contains a hodgepodge of definitions and + * declarations that are needed to provide compatibility + * between the native system and the base implementation + * that the library assumes. + * + * NB: This file is a mess. + */ + +/* + * Setup basic type definitions and function declaratations. + */ + +/* + * Simplify Acorn RISC OS identifier (to avoid confusion with Acorn RISC iX + * and with defunct Unix Risc OS) + * No need to specify __arm - hey, Acorn might port the OS, no problem here! + */ +#ifdef __acornriscos +#undef __acornriscos +#endif +#if defined(__acorn) && defined(__riscos) +#define __acornriscos +#endif + +#if defined(__MWERKS__) || defined(THINK_C) +#include +#include +#endif + +#include + +#if defined(__PPCC__) || defined(__SC__) || defined(__MRC__) +#include +#elif !defined(__MWERKS__) && !defined(THINK_C) && !defined(__acornriscos) && !defined(applec) +#include +#endif + +#if defined(VMS) +#include +#include +#elif !defined(__acornriscos) +#include +#endif + +/* + * This maze of checks controls defines or not the + * target system has BSD-style typdedefs declared in + * an include file and/or whether or not to include + * to get the SEEK_* definitions. Some + * additional includes are also done to pull in the + * appropriate definitions we're looking for. + */ +#if defined(__MWERKS__) || defined(THINK_C) || defined(__PPCC__) || defined(__SC__) || defined(__MRC__) +#include +#define BSDTYPES +#define HAVE_UNISTD_H 0 +#elif defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows) +#define BSDTYPES +#elif defined(OS2_16) || defined(OS2_32) +#define BSDTYPES +#elif defined(__acornriscos) +#include +#define BSDTYPES +#define HAVE_UNISTD_H 0 +#elif defined(VMS) +#define HAVE_UNISTD_H 0 +#else +#define HAVE_UNISTD_H 1 +#endif + +/* + * The library uses the ANSI C/POSIX SEEK_* + * definitions that should be defined in unistd.h + * (except on system where they are in stdio.h and + * there is no unistd.h). + */ +#if !defined(SEEK_SET) && HAVE_UNISTD_H +#include +#endif + +/* + * The library uses memset, memcpy, and memcmp. + * ANSI C and System V define these in string.h. + */ +#include + +/* + * The BSD typedefs are used throughout the library. + * If your system doesn't have them in , + * then define BSDTYPES in your Makefile. + */ +#if defined(BSDTYPES) +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; +#endif + +/* + * dblparam_t is the type that a double precision + * floating point value will have on the parameter + * stack (when coerced by the compiler). + */ +/* Note: on MacPowerPC "extended" is undefined. So only use it for 68K-Macs */ +#if defined(__SC__) || defined(THINK_C) +typedef extended dblparam_t; +#else +typedef double dblparam_t; +#endif + +/* + * If your compiler supports inline functions, then + * set INLINE appropriately to get the known hotspots + * in the library expanded inline. + */ +#if defined(__GNUC__) +#if defined(__STRICT_ANSI__) +#define INLINE __inline__ +#else +#define INLINE inline +#endif +#else /* !__GNUC__ */ +#define INLINE +#endif + +/* + * GLOBALDATA is a macro that is used to define global variables + * private to the library. We use this indirection to hide + * brain-damage in VAXC (and GCC) under VAX/VMS. In these + * environments the macro places the variable in a non-shareable + * program section, which ought to be done by default (sigh!) + * + * Apparently DEC are aware of the problem as this behaviour is the + * default under VMS on AXP. + * + * The GNU C variant is untested. + */ +#if defined(VAX) && defined(VMS) +#if defined(VAXC) +#define GLOBALDATA(TYPE,NAME) extern noshare TYPE NAME +#endif +#if defined(__GNUC__) +#define GLOBALDATA(TYPE,NAME) extern TYPE NAME \ + asm("_$$PsectAttributes_NOSHR$$" #NAME) +#endif +#else /* !VAX/VMS */ +#define GLOBALDATA(TYPE,NAME) extern TYPE NAME +#endif + +#if defined(__acornriscos) +/* + * osfcn.h is part of C++Lib on Acorn C/C++, and as such can't be used + * on C alone. For that reason, the relevant functions are + * implemented in tif_acorn.c, and the elements from the header + * file are included here. + */ +#if defined(__cplusplus) +#include +#else +#define O_RDONLY 0 +#define O_WRONLY 1 +#define O_RDWR 2 +#define O_APPEND 8 +#define O_CREAT 0x200 +#define O_TRUNC 0x400 +typedef long off_t; +extern int open(const char *name, int flags, int mode); +extern int close(int fd); +extern int write(int fd, const char *buf, int nbytes); +extern int read(int fd, char *buf, int nbytes); +extern off_t lseek(int fd, off_t offset, int whence); +extern int creat(const char *path, int mode); +#endif /* __cplusplus */ +#endif /* __acornriscos */ + +/* Bit and byte order, the default is MSB to LSB */ +#ifdef VMS +#undef HOST_FILLORDER +#undef HOST_BIGENDIAN +#define HOST_FILLORDER FILLORDER_LSB2MSB +#define HOST_BIGENDIAN 0 +#endif + + +#endif /* _COMPAT_ */ diff --git a/libtiff/tiffconf.h b/libtiff/tiffconf.h new file mode 100755 index 0000000..1fced65 --- /dev/null +++ b/libtiff/tiffconf.h @@ -0,0 +1,143 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tiffconf.h,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#ifndef _TIFFCONF_ +#define _TIFFCONF_ +/* + * Library Configuration Definitions. + * + * This file defines the default configuration for the library. + * If the target system does not have make or a way to specify + * #defines on the command line, this file can be edited to + * configure the library. Otherwise, one can override portability + * and configuration-related definitions from a Makefile or command + * line by defining FEATURE_SUPPORT and COMPRESSION_SUPPORT (see below). + */ + +/* + * General portability-related defines: + * + * HAVE_IEEEFP define as 0 or 1 according to the floating point + * format suported by the machine + * BSDTYPES define this if your system does NOT define the + * usual 4BSD typedefs u_int et. al. + * HAVE_MMAP enable support for memory mapping read-only files; + * this is typically deduced by the configure script + * HOST_FILLORDER native cpu bit order: one of FILLORDER_MSB2LSB + * or FILLODER_LSB2MSB; this is typically set by the + * configure script + * HOST_BIGENDIAN native cpu byte order: 1 if big-endian (Motorola) + * or 0 if little-endian (Intel); this may be used + * in codecs to optimize code + * USE_64BIT_API set to 1 if tif_unix.c should use lseek64(), + * fstat64() and stat64 allowing 2-4GB files. + */ +#ifndef HAVE_IEEEFP +#define HAVE_IEEEFP 1 +#endif +#ifndef HOST_FILLORDER +#define HOST_FILLORDER FILLORDER_MSB2LSB +#endif +#ifndef HOST_BIGENDIAN +#define HOST_BIGENDIAN 1 +#endif + +#ifndef USE_64BIT_API +# define USE_64BIT_API 0 +#endif + +#ifndef FEATURE_SUPPORT +/* + * Feature support definitions: + * + * COLORIMETRY_SUPPORT enable support for 6.0 colorimetry tags + * YCBCR_SUPPORT enable support for 6.0 YCbCr tags + * CMYK_SUPPORT enable support for 6.0 CMYK tags + * ICC_SUPPORT enable support for ICC profile tag + * PHOTOSHOP_SUPPORT enable support for PHOTOSHOP resource tag + * IPTC_SUPPORT enable support for RichTIFF IPTC tag + */ +#define COLORIMETRY_SUPPORT +#define YCBCR_SUPPORT +#define CMYK_SUPPORT +#define ICC_SUPPORT +#define PHOTOSHOP_SUPPORT +#define IPTC_SUPPORT +#endif /* FEATURE_SUPPORT */ + +#ifndef COMPRESSION_SUPPORT +/* + * Compression support defines: + * + * CCITT_SUPPORT enable support for CCITT Group 3 & 4 algorithms + * PACKBITS_SUPPORT enable support for Macintosh PackBits algorithm + * LZW_SUPPORT enable support for LZW algorithm + * THUNDER_SUPPORT enable support for ThunderScan 4-bit RLE algorithm + * NEXT_SUPPORT enable support for NeXT 2-bit RLE algorithm + * OJPEG_SUPPORT enable support for 6.0-style JPEG DCT algorithms + * (no builtin support, only a codec hook) + * JPEG_SUPPORT enable support for post-6.0-style JPEG DCT algorithms + * (requires freely available IJG software, see tif_jpeg.c) + * ZIP_SUPPORT enable support for Deflate algorithm + * (requires freely available zlib software, see tif_zip.c) + * PIXARLOG_SUPPORT enable support for Pixar log-format algorithm + * LOGLUV_SUPPORT enable support for LogLuv high dynamic range encoding + */ +#define CCITT_SUPPORT +#define PACKBITS_SUPPORT +#define LZW_SUPPORT +#define THUNDER_SUPPORT +#define NEXT_SUPPORT +#define LOGLUV_SUPPORT +#endif /* COMPRESSION_SUPPORT */ + +/* + * If JPEG compression is enabled then we must also include + * support for the colorimetry and YCbCr-related tags. + */ +#ifdef JPEG_SUPPORT +#ifndef YCBCR_SUPPORT +#define YCBCR_SUPPORT +#endif +#ifndef COLORIMETRY_SUPPORT +#define COLORIMETRY_SUPPORT +#endif +#endif /* JPEG_SUPPORT */ + +/* + * ``Orthogonal Features'' + * + * STRIPCHOP_DEFAULT default handling of strip chopping support (whether + * or not to convert single-strip uncompressed images + * to mutiple strips of ~8Kb--to reduce memory use) + * SUBIFD_SUPPORT enable support for SubIFD tag (thumbnails and such) + */ +#ifndef STRIPCHOP_DEFAULT +#define STRIPCHOP_DEFAULT TIFF_STRIPCHOP /* default is to enable */ +#endif +#ifndef SUBIFD_SUPPORT +#define SUBIFD_SUPPORT 1 /* enable SubIFD tag (330) support */ +#endif +#endif /* _TIFFCONF_ */ diff --git a/libtiff/tiffio.h b/libtiff/tiffio.h new file mode 100755 index 0000000..4b404b2 --- /dev/null +++ b/libtiff/tiffio.h @@ -0,0 +1,327 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tiffio.h,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#ifndef _TIFFIO_ +#define _TIFFIO_ + +/* + * TIFF I/O Library Definitions. + */ +#include "tiff.h" + +/* + * This define can be used in code that requires + * compilation-related definitions specific to a + * version or versions of the library. Runtime + * version checking should be done based on the + * string returned by TIFFGetVersion. + */ +#define TIFFLIB_VERSION 19970127 /* January 27, 1997 */ + +/* + * TIFF is defined as an incomplete type to hide the + * library's internal data structures from clients. + */ +typedef struct tiff TIFF; + +/* + * The following typedefs define the intrinsic size of + * data types used in the *exported* interfaces. These + * definitions depend on the proper definition of types + * in tiff.h. Note also that the varargs interface used + * to pass tag types and values uses the types defined in + * tiff.h directly. + * + * NB: ttag_t is unsigned int and not unsigned short because + * ANSI C requires that the type before the ellipsis be a + * promoted type (i.e. one of int, unsigned int, pointer, + * or double) and because we defined pseudo-tags that are + * outside the range of legal Aldus-assigned tags. + * NB: tsize_t is int32 and not uint32 because some functions + * return -1. + * NB: toff_t is not off_t for many reasons; TIFFs max out at + * 32-bit file offsets being the most important, and to ensure + * that it is unsigned, rather than signed. + */ +typedef uint32 ttag_t; /* directory tag */ +typedef uint16 tdir_t; /* directory index */ +typedef uint16 tsample_t; /* sample number */ +typedef uint32 tstrip_t; /* strip number */ +typedef uint32 ttile_t; /* tile number */ +typedef int32 tsize_t; /* i/o size in bytes */ +typedef void* tdata_t; /* image data ref */ +typedef uint32 toff_t; /* file offset */ + +#if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32)) +#define __WIN32__ +#endif +#if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows) +#include +#ifdef __WIN32__ +DECLARE_HANDLE(thandle_t); /* Win32 file handle */ +#else +typedef HFILE thandle_t; /* client data handle */ +#endif +#else +typedef void* thandle_t; /* client data handle */ +#endif + +#ifndef NULL +#define NULL 0 +#endif + +/* + * Flags to pass to TIFFPrintDirectory to control + * printing of data structures that are potentially + * very large. Bit-or these flags to enable printing + * multiple items. + */ +#define TIFFPRINT_NONE 0x0 /* no extra info */ +#define TIFFPRINT_STRIPS 0x1 /* strips/tiles info */ +#define TIFFPRINT_CURVES 0x2 /* color/gray response curves */ +#define TIFFPRINT_COLORMAP 0x4 /* colormap */ +#define TIFFPRINT_JPEGQTABLES 0x100 /* JPEG Q matrices */ +#define TIFFPRINT_JPEGACTABLES 0x200 /* JPEG AC tables */ +#define TIFFPRINT_JPEGDCTABLES 0x200 /* JPEG DC tables */ + +/* + * RGBA-style image support. + */ +typedef unsigned char TIFFRGBValue; /* 8-bit samples */ +typedef struct _TIFFRGBAImage TIFFRGBAImage; +/* + * The image reading and conversion routines invoke + * ``put routines'' to copy/image/whatever tiles of + * raw image data. A default set of routines are + * provided to convert/copy raw image data to 8-bit + * packed ABGR format rasters. Applications can supply + * alternate routines that unpack the data into a + * different format or, for example, unpack the data + * and draw the unpacked raster on the display. + */ +typedef void (*tileContigRoutine) + (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32, + unsigned char*); +typedef void (*tileSeparateRoutine) + (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32, + unsigned char*, unsigned char*, unsigned char*, unsigned char*); +/* + * RGBA-reader state. + */ +typedef struct { /* YCbCr->RGB support */ + TIFFRGBValue* clamptab; /* range clamping table */ + int* Cr_r_tab; + int* Cb_b_tab; + int32* Cr_g_tab; + int32* Cb_g_tab; + float coeffs[3]; /* cached for repeated use */ +} TIFFYCbCrToRGB; + +struct _TIFFRGBAImage { + TIFF* tif; /* image handle */ + int stoponerr; /* stop on read error */ + int isContig; /* data is packed/separate */ + int alpha; /* type of alpha data present */ + uint32 width; /* image width */ + uint32 height; /* image height */ + uint16 bitspersample; /* image bits/sample */ + uint16 samplesperpixel; /* image samples/pixel */ + uint16 orientation; /* image orientation */ + uint16 photometric; /* image photometric interp */ + uint16* redcmap; /* colormap pallete */ + uint16* greencmap; + uint16* bluecmap; + /* get image data routine */ + int (*get)(TIFFRGBAImage*, uint32*, uint32, uint32); + union { + void (*any)(TIFFRGBAImage*); + tileContigRoutine contig; + tileSeparateRoutine separate; + } put; /* put decoded strip/tile */ + TIFFRGBValue* Map; /* sample mapping array */ + uint32** BWmap; /* black&white map */ + uint32** PALmap; /* palette image map */ + TIFFYCbCrToRGB* ycbcr; /* YCbCr conversion state */ + + int row_offset; + int col_offset; +}; + +/* + * Macros for extracting components from the + * packed ABGR form returned by TIFFReadRGBAImage. + */ +#define TIFFGetR(abgr) ((abgr) & 0xff) +#define TIFFGetG(abgr) (((abgr) >> 8) & 0xff) +#define TIFFGetB(abgr) (((abgr) >> 16) & 0xff) +#define TIFFGetA(abgr) (((abgr) >> 24) & 0xff) + +/* + * A CODEC is a software package that implements decoding, + * encoding, or decoding+encoding of a compression algorithm. + * The library provides a collection of builtin codecs. + * More codecs may be registered through calls to the library + * and/or the builtin implementations may be overridden. + */ +typedef int (*TIFFInitMethod)(TIFF*, int); +typedef struct { + char* name; + uint16 scheme; + TIFFInitMethod init; +} TIFFCodec; + +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif +typedef void (*TIFFErrorHandler)(const char*, const char*, va_list); +typedef tsize_t (*TIFFReadWriteProc)(thandle_t, tdata_t, tsize_t); +typedef toff_t (*TIFFSeekProc)(thandle_t, toff_t, int); +typedef int (*TIFFCloseProc)(thandle_t); +typedef toff_t (*TIFFSizeProc)(thandle_t); +typedef int (*TIFFMapFileProc)(thandle_t, tdata_t*, toff_t*); +typedef void (*TIFFUnmapFileProc)(thandle_t, tdata_t, toff_t); +typedef void (*TIFFExtendProc)(TIFF*); + +extern const char* TIFFGetVersion(void); + +extern const TIFFCodec* TIFFFindCODEC(uint16); +extern TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod); +extern void TIFFUnRegisterCODEC(TIFFCodec*); + +extern tdata_t _TIFFmalloc(tsize_t); +extern tdata_t _TIFFrealloc(tdata_t, tsize_t); +extern void _TIFFmemset(tdata_t, int, tsize_t); +extern void _TIFFmemcpy(tdata_t, const tdata_t, tsize_t); +extern int _TIFFmemcmp(const tdata_t, const tdata_t, tsize_t); +extern void _TIFFfree(tdata_t); + +extern void TIFFClose(TIFF*); +extern int TIFFFlush(TIFF*); +extern int TIFFFlushData(TIFF*); +extern int TIFFGetField(TIFF*, ttag_t, ...); +extern int TIFFVGetField(TIFF*, ttag_t, va_list); +extern int TIFFGetFieldDefaulted(TIFF*, ttag_t, ...); +extern int TIFFVGetFieldDefaulted(TIFF*, ttag_t, va_list); +extern int TIFFReadDirectory(TIFF*); +extern tsize_t TIFFScanlineSize(TIFF*); +extern tsize_t TIFFRasterScanlineSize(TIFF*); +extern tsize_t TIFFStripSize(TIFF*); +extern tsize_t TIFFVStripSize(TIFF*, uint32); +extern tsize_t TIFFTileRowSize(TIFF*); +extern tsize_t TIFFTileSize(TIFF*); +extern tsize_t TIFFVTileSize(TIFF*, uint32); +extern uint32 TIFFDefaultStripSize(TIFF*, uint32); +extern void TIFFDefaultTileSize(TIFF*, uint32*, uint32*); +extern int TIFFFileno(TIFF*); +extern int TIFFGetMode(TIFF*); +extern int TIFFIsTiled(TIFF*); +extern int TIFFIsByteSwapped(TIFF*); +extern int TIFFIsUpSampled(TIFF*); +extern int TIFFIsMSB2LSB(TIFF*); +extern uint32 TIFFCurrentRow(TIFF*); +extern tdir_t TIFFCurrentDirectory(TIFF*); +extern tdir_t TIFFNumberOfDirectories(TIFF*); +extern uint32 TIFFCurrentDirOffset(TIFF*); +extern tstrip_t TIFFCurrentStrip(TIFF*); +extern ttile_t TIFFCurrentTile(TIFF*); +extern int TIFFReadBufferSetup(TIFF*, tdata_t, tsize_t); +extern int TIFFWriteBufferSetup(TIFF*, tdata_t, tsize_t); +extern int TIFFWriteCheck(TIFF*, int, const char *); +extern int TIFFCreateDirectory(TIFF*); +extern int TIFFLastDirectory(TIFF*); +extern int TIFFSetDirectory(TIFF*, tdir_t); +extern int TIFFSetSubDirectory(TIFF*, uint32); +extern int TIFFUnlinkDirectory(TIFF*, tdir_t); +extern int TIFFSetField(TIFF*, ttag_t, ...); +extern int TIFFVSetField(TIFF*, ttag_t, va_list); +extern int TIFFWriteDirectory(TIFF *); +extern int TIFFReassignTagToIgnore(enum TIFFIgnoreSense, int); + +#if defined(c_plusplus) || defined(__cplusplus) +extern void TIFFPrintDirectory(TIFF*, FILE*, long = 0); +extern int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t = 0); +extern int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t = 0); +extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0); +#else +extern void TIFFPrintDirectory(TIFF*, FILE*, long); +extern int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t); +extern int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t); +extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int); +#endif + +extern int TIFFReadRGBAStrip(TIFF*, tstrip_t, uint32 * ); +extern int TIFFReadRGBATile(TIFF*, uint32, uint32, uint32 * ); +extern int TIFFRGBAImageOK(TIFF*, char [1024]); +extern int TIFFRGBAImageBegin(TIFFRGBAImage*, TIFF*, int, char [1024]); +extern int TIFFRGBAImageGet(TIFFRGBAImage*, uint32*, uint32, uint32); +extern void TIFFRGBAImageEnd(TIFFRGBAImage*); +extern TIFF* TIFFOpen(const char*, const char*); +extern TIFF* TIFFFdOpen(int, const char*, const char*); +extern TIFF* TIFFClientOpen(const char*, const char*, + thandle_t, + TIFFReadWriteProc, TIFFReadWriteProc, + TIFFSeekProc, TIFFCloseProc, + TIFFSizeProc, + TIFFMapFileProc, TIFFUnmapFileProc); +extern const char* TIFFFileName(TIFF*); +extern void TIFFError(const char*, const char*, ...); +extern void TIFFWarning(const char*, const char*, ...); +extern TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler); +extern TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler); +extern TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc); +extern ttile_t TIFFComputeTile(TIFF*, uint32, uint32, uint32, tsample_t); +extern int TIFFCheckTile(TIFF*, uint32, uint32, uint32, tsample_t); +extern ttile_t TIFFNumberOfTiles(TIFF*); +extern tsize_t TIFFReadTile(TIFF*, + tdata_t, uint32, uint32, uint32, tsample_t); +extern tsize_t TIFFWriteTile(TIFF*, + tdata_t, uint32, uint32, uint32, tsample_t); +extern tstrip_t TIFFComputeStrip(TIFF*, uint32, tsample_t); +extern tstrip_t TIFFNumberOfStrips(TIFF*); +extern tsize_t TIFFReadEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t); +extern tsize_t TIFFReadRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t); +extern tsize_t TIFFReadEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t); +extern tsize_t TIFFReadRawTile(TIFF*, ttile_t, tdata_t, tsize_t); +extern tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t); +extern tsize_t TIFFWriteRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t); +extern tsize_t TIFFWriteEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t); +extern tsize_t TIFFWriteRawTile(TIFF*, ttile_t, tdata_t, tsize_t); +extern void TIFFSetWriteOffset(TIFF*, toff_t); +extern void TIFFSwabShort(uint16*); +extern void TIFFSwabLong(uint32*); +extern void TIFFSwabDouble(double*); +extern void TIFFSwabArrayOfShort(uint16*, unsigned long); +extern void TIFFSwabArrayOfLong(uint32*, unsigned long); +extern void TIFFSwabArrayOfDouble(double*, unsigned long); +extern void TIFFReverseBits(unsigned char *, unsigned long); +extern const unsigned char* TIFFGetBitRevTable(int); +#if defined(__cplusplus) +} +#endif +#endif /* _TIFFIO_ */ diff --git a/libtiff/tiffiop.h b/libtiff/tiffiop.h new file mode 100755 index 0000000..68a7e22 --- /dev/null +++ b/libtiff/tiffiop.h @@ -0,0 +1,279 @@ +/* $Header: /home/cvsroot/libtiff/libtiff/tiffiop.h,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#ifndef _TIFFIOP_ +#define _TIFFIOP_ +/* + * ``Library-private'' definitions. + */ +/* + * UNIX systems should run the configure script to generate + * a port.h file that reflects the system capabilities. + * Doing this obviates all the dreck done in tiffcomp.h. + */ +#if defined(unix) || defined(__unix) +#include "port.h" +#include "tiffconf.h" +#else +#include "tiffconf.h" +#include "tiffcomp.h" +#endif +#include "tiffio.h" +#include "tif_dir.h" + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +/* + * Typedefs for ``method pointers'' used internally. + */ +typedef unsigned char tidataval_t; /* internal image data value type */ +typedef tidataval_t* tidata_t; /* reference to internal image data */ + +typedef void (*TIFFVoidMethod)(TIFF*); +typedef int (*TIFFBoolMethod)(TIFF*); +typedef int (*TIFFPreMethod)(TIFF*, tsample_t); +typedef int (*TIFFCodeMethod)(TIFF*, tidata_t, tsize_t, tsample_t); +typedef int (*TIFFSeekMethod)(TIFF*, uint32); +typedef void (*TIFFPostMethod)(TIFF*, tidata_t, tsize_t); +typedef int (*TIFFVSetMethod)(TIFF*, ttag_t, va_list); +typedef int (*TIFFVGetMethod)(TIFF*, ttag_t, va_list); +typedef void (*TIFFPrintMethod)(TIFF*, FILE*, long); +typedef uint32 (*TIFFStripMethod)(TIFF*, uint32); +typedef void (*TIFFTileMethod)(TIFF*, uint32*, uint32*); + +struct tiff { + char* tif_name; /* name of open file */ + int tif_fd; /* open file descriptor */ + int tif_mode; /* open mode (O_*) */ + uint32 tif_flags; +#define TIFF_FILLORDER 0x0003 /* natural bit fill order for machine */ +#define TIFF_DIRTYHEADER 0x0004 /* header must be written on close */ +#define TIFF_DIRTYDIRECT 0x0008 /* current directory must be written */ +#define TIFF_BUFFERSETUP 0x0010 /* data buffers setup */ +#define TIFF_CODERSETUP 0x0020 /* encoder/decoder setup done */ +#define TIFF_BEENWRITING 0x0040 /* written 1+ scanlines to file */ +#define TIFF_SWAB 0x0080 /* byte swap file information */ +#define TIFF_NOBITREV 0x0100 /* inhibit bit reversal logic */ +#define TIFF_MYBUFFER 0x0200 /* my raw data buffer; free on close */ +#define TIFF_ISTILED 0x0400 /* file is tile, not strip- based */ +#define TIFF_MAPPED 0x0800 /* file is mapped into memory */ +#define TIFF_POSTENCODE 0x1000 /* need call to postencode routine */ +#define TIFF_INSUBIFD 0x2000 /* currently writing a subifd */ +#define TIFF_UPSAMPLED 0x4000 /* library is doing data up-sampling */ +#define TIFF_STRIPCHOP 0x8000 /* enable strip chopping support */ + toff_t tif_diroff; /* file offset of current directory */ + toff_t tif_nextdiroff; /* file offset of following directory */ + TIFFDirectory tif_dir; /* internal rep of current directory */ + TIFFHeader tif_header; /* file's header block */ + tidata_t tif_clientdir; /* client TIFF directory */ + const int* tif_typeshift; /* data type shift counts */ + const long* tif_typemask; /* data type masks */ + uint32 tif_row; /* current scanline */ + tdir_t tif_curdir; /* current directory (index) */ + tstrip_t tif_curstrip; /* current strip for read/write */ + toff_t tif_curoff; /* current offset for read/write */ + toff_t tif_dataoff; /* current offset for writing dir */ +#if SUBIFD_SUPPORT + uint16 tif_nsubifd; /* remaining subifds to write */ + toff_t tif_subifdoff; /* offset for patching SubIFD link */ +#endif +/* tiling support */ + uint32 tif_col; /* current column (offset by row too) */ + ttile_t tif_curtile; /* current tile for read/write */ + tsize_t tif_tilesize; /* # of bytes in a tile */ +/* compression scheme hooks */ + TIFFBoolMethod tif_setupdecode;/* called once before predecode */ + TIFFPreMethod tif_predecode; /* pre- row/strip/tile decoding */ + TIFFBoolMethod tif_setupencode;/* called once before preencode */ + TIFFPreMethod tif_preencode; /* pre- row/strip/tile encoding */ + TIFFBoolMethod tif_postencode; /* post- row/strip/tile encoding */ + TIFFCodeMethod tif_decoderow; /* scanline decoding routine */ + TIFFCodeMethod tif_encoderow; /* scanline encoding routine */ + TIFFCodeMethod tif_decodestrip;/* strip decoding routine */ + TIFFCodeMethod tif_encodestrip;/* strip encoding routine */ + TIFFCodeMethod tif_decodetile; /* tile decoding routine */ + TIFFCodeMethod tif_encodetile; /* tile encoding routine */ + TIFFVoidMethod tif_close; /* cleanup-on-close routine */ + TIFFSeekMethod tif_seek; /* position within a strip routine */ + TIFFVoidMethod tif_cleanup; /* cleanup state routine */ + TIFFStripMethod tif_defstripsize;/* calculate/constrain strip size */ + TIFFTileMethod tif_deftilesize;/* calculate/constrain tile size */ + tidata_t tif_data; /* compression scheme private data */ +/* input/output buffering */ + tsize_t tif_scanlinesize;/* # of bytes in a scanline */ + tsize_t tif_scanlineskew;/* scanline skew for reading strips */ + tidata_t tif_rawdata; /* raw data buffer */ + tsize_t tif_rawdatasize;/* # of bytes in raw data buffer */ + tidata_t tif_rawcp; /* current spot in raw buffer */ + tsize_t tif_rawcc; /* bytes unread from raw buffer */ +/* memory-mapped file support */ + tidata_t tif_base; /* base of mapped file */ + toff_t tif_size; /* size of mapped file region (bytes) */ + TIFFMapFileProc tif_mapproc; /* map file method */ + TIFFUnmapFileProc tif_unmapproc;/* unmap file method */ +/* input/output callback methods */ + thandle_t tif_clientdata; /* callback parameter */ + TIFFReadWriteProc tif_readproc; /* read method */ + TIFFReadWriteProc tif_writeproc;/* write method */ + TIFFSeekProc tif_seekproc; /* lseek method */ + TIFFCloseProc tif_closeproc; /* close method */ + TIFFSizeProc tif_sizeproc; /* filesize method */ +/* post-decoding support */ + TIFFPostMethod tif_postdecode; /* post decoding routine */ +/* tag support */ + TIFFFieldInfo** tif_fieldinfo; /* sorted table of registered tags */ + int tif_nfields; /* # entries in registered tag table */ + TIFFVSetMethod tif_vsetfield; /* tag set routine */ + TIFFVGetMethod tif_vgetfield; /* tag get routine */ + TIFFPrintMethod tif_printdir; /* directory print routine */ +}; + +#define isPseudoTag(t) (t > 0xffff) /* is tag value normal or pseudo */ + +#define isTiled(tif) (((tif)->tif_flags & TIFF_ISTILED) != 0) +#define isMapped(tif) (((tif)->tif_flags & TIFF_MAPPED) != 0) +#define isFillOrder(tif, o) (((tif)->tif_flags & (o)) != 0) +#define isUpSampled(tif) (((tif)->tif_flags & TIFF_UPSAMPLED) != 0) +#define TIFFReadFile(tif, buf, size) \ + ((*(tif)->tif_readproc)((tif)->tif_clientdata,buf,size)) +#define TIFFWriteFile(tif, buf, size) \ + ((*(tif)->tif_writeproc)((tif)->tif_clientdata,buf,size)) +#define TIFFSeekFile(tif, off, whence) \ + ((*(tif)->tif_seekproc)((tif)->tif_clientdata,(toff_t)(off),whence)) +#define TIFFCloseFile(tif) \ + ((*(tif)->tif_closeproc)((tif)->tif_clientdata)) +#define TIFFGetFileSize(tif) \ + ((*(tif)->tif_sizeproc)((tif)->tif_clientdata)) +#define TIFFMapFileContents(tif, paddr, psize) \ + ((*(tif)->tif_mapproc)((tif)->tif_clientdata,paddr,psize)) +#define TIFFUnmapFileContents(tif, addr, size) \ + ((*(tif)->tif_unmapproc)((tif)->tif_clientdata,addr,size)) + +/* + * Default Read/Seek/Write definitions. + */ +#ifndef ReadOK +#define ReadOK(tif, buf, size) \ + (TIFFReadFile(tif, (tdata_t) buf, (tsize_t)(size)) == (tsize_t)(size)) +#endif +#ifndef SeekOK +#define SeekOK(tif, off) \ + (TIFFSeekFile(tif, (toff_t) off, SEEK_SET) == (toff_t) off) +#endif +#ifndef WriteOK +#define WriteOK(tif, buf, size) \ + (TIFFWriteFile(tif, (tdata_t) buf, (tsize_t) size) == (tsize_t) size) +#endif + +/* NB: the uint32 casts are to silence certain ANSI-C compilers */ +#define TIFFhowmany(x, y) ((((uint32)(x))+(((uint32)(y))-1))/((uint32)(y))) +#define TIFFroundup(x, y) (TIFFhowmany(x,y)*((uint32)(y))) + +#if defined(__cplusplus) +extern "C" { +#endif +extern int _TIFFgetMode(const char*, const char*); +extern int _TIFFNoRowEncode(TIFF*, tidata_t, tsize_t, tsample_t); +extern int _TIFFNoStripEncode(TIFF*, tidata_t, tsize_t, tsample_t); +extern int _TIFFNoTileEncode(TIFF*, tidata_t, tsize_t, tsample_t); +extern int _TIFFNoRowDecode(TIFF*, tidata_t, tsize_t, tsample_t); +extern int _TIFFNoStripDecode(TIFF*, tidata_t, tsize_t, tsample_t); +extern int _TIFFNoTileDecode(TIFF*, tidata_t, tsize_t, tsample_t); +extern void _TIFFNoPostDecode(TIFF*, tidata_t, tsize_t); +extern int _TIFFNoPreCode (TIFF*, tsample_t); +extern int _TIFFNoSeek(TIFF*, uint32); +extern void _TIFFSwab16BitData(TIFF*, tidata_t, tsize_t); +extern void _TIFFSwab32BitData(TIFF*, tidata_t, tsize_t); +extern void _TIFFSwab64BitData(TIFF*, tidata_t, tsize_t); +extern int TIFFFlushData1(TIFF*); +extern void TIFFFreeDirectory(TIFF*); +extern int TIFFDefaultDirectory(TIFF*); +extern int TIFFSetCompressionScheme(TIFF*, int); +extern int TIFFSetDefaultCompressionState(TIFF*); +extern uint32 _TIFFDefaultStripSize(TIFF*, uint32); +extern void _TIFFDefaultTileSize(TIFF*, uint32*, uint32*); + +extern void _TIFFsetByteArray(void**, void*, long); +extern void _TIFFsetString(char**, char*); +extern void _TIFFsetShortArray(uint16**, uint16*, long); +extern void _TIFFsetLongArray(uint32**, uint32*, long); +extern void _TIFFsetFloatArray(float**, float*, long); +extern void _TIFFsetDoubleArray(double**, double*, long); + +extern void _TIFFprintAscii(FILE*, const char*); +extern void _TIFFprintAsciiTag(FILE*, const char*, const char*); + +GLOBALDATA(TIFFErrorHandler,_TIFFwarningHandler); +GLOBALDATA(TIFFErrorHandler,_TIFFerrorHandler); + +extern int TIFFInitDumpMode(TIFF*, int); +#ifdef PACKBITS_SUPPORT +extern int TIFFInitPackBits(TIFF*, int); +#endif +#ifdef CCITT_SUPPORT +extern int TIFFInitCCITTRLE(TIFF*, int), TIFFInitCCITTRLEW(TIFF*, int); +extern int TIFFInitCCITTFax3(TIFF*, int), TIFFInitCCITTFax4(TIFF*, int); +#endif +#ifdef THUNDER_SUPPORT +extern int TIFFInitThunderScan(TIFF*, int); +#endif +#ifdef NEXT_SUPPORT +extern int TIFFInitNeXT(TIFF*, int); +#endif +#ifdef LZW_SUPPORT +extern int TIFFInitLZW(TIFF*, int); +#endif +#ifdef OJPEG_SUPPORT +extern int TIFFInitOJPEG(TIFF*, int); +#endif +#ifdef JPEG_SUPPORT +extern int TIFFInitJPEG(TIFF*, int); +#endif +#ifdef JBIG_SUPPORT +extern int TIFFInitJBIG(TIFF*, int); +#endif +#ifdef ZIP_SUPPORT +extern int TIFFInitZIP(TIFF*, int); +#endif +#ifdef PIXARLOG_SUPPORT +extern int TIFFInitPixarLog(TIFF*, int); +#endif +#ifdef LOGLUV_SUPPORT +extern int TIFFInitSGILog(TIFF*, int); +#endif +#ifdef VMS +extern const TIFFCodec _TIFFBuiltinCODECS[]; +#else +extern TIFFCodec _TIFFBuiltinCODECS[]; +#endif + +#if defined(__cplusplus) +} +#endif +#endif /* _TIFFIOP_ */ diff --git a/libtiff/uvcode.h b/libtiff/uvcode.h new file mode 100755 index 0000000..b2900bd --- /dev/null +++ b/libtiff/uvcode.h @@ -0,0 +1,173 @@ +/* Version 1.0 generated April 7, 1997 by Greg Ward Larson, SGI */ +#define UV_SQSIZ (float)0.003500 +#define UV_NDIVS 16289 +#define UV_VSTART (float)0.016940 +#define UV_NVS 163 +static struct { + float ustart; + short nus, ncum; +} uv_row[UV_NVS] = { + (float)0.247663, 4, 0, + (float)0.243779, 6, 4, + (float)0.241684, 7, 10, + (float)0.237874, 9, 17, + (float)0.235906, 10, 26, + (float)0.232153, 12, 36, + (float)0.228352, 14, 48, + (float)0.226259, 15, 62, + (float)0.222371, 17, 77, + (float)0.220410, 18, 94, + (float)0.214710, 21, 112, + (float)0.212714, 22, 133, + (float)0.210721, 23, 155, + (float)0.204976, 26, 178, + (float)0.202986, 27, 204, + (float)0.199245, 29, 231, + (float)0.195525, 31, 260, + (float)0.193560, 32, 291, + (float)0.189878, 34, 323, + (float)0.186216, 36, 357, + (float)0.186216, 36, 393, + (float)0.182592, 38, 429, + (float)0.179003, 40, 467, + (float)0.175466, 42, 507, + (float)0.172001, 44, 549, + (float)0.172001, 44, 593, + (float)0.168612, 46, 637, + (float)0.168612, 46, 683, + (float)0.163575, 49, 729, + (float)0.158642, 52, 778, + (float)0.158642, 52, 830, + (float)0.158642, 52, 882, + (float)0.153815, 55, 934, + (float)0.153815, 55, 989, + (float)0.149097, 58, 1044, + (float)0.149097, 58, 1102, + (float)0.142746, 62, 1160, + (float)0.142746, 62, 1222, + (float)0.142746, 62, 1284, + (float)0.138270, 65, 1346, + (float)0.138270, 65, 1411, + (float)0.138270, 65, 1476, + (float)0.132166, 69, 1541, + (float)0.132166, 69, 1610, + (float)0.126204, 73, 1679, + (float)0.126204, 73, 1752, + (float)0.126204, 73, 1825, + (float)0.120381, 77, 1898, + (float)0.120381, 77, 1975, + (float)0.120381, 77, 2052, + (float)0.120381, 77, 2129, + (float)0.112962, 82, 2206, + (float)0.112962, 82, 2288, + (float)0.112962, 82, 2370, + (float)0.107450, 86, 2452, + (float)0.107450, 86, 2538, + (float)0.107450, 86, 2624, + (float)0.107450, 86, 2710, + (float)0.100343, 91, 2796, + (float)0.100343, 91, 2887, + (float)0.100343, 91, 2978, + (float)0.095126, 95, 3069, + (float)0.095126, 95, 3164, + (float)0.095126, 95, 3259, + (float)0.095126, 95, 3354, + (float)0.088276, 100, 3449, + (float)0.088276, 100, 3549, + (float)0.088276, 100, 3649, + (float)0.088276, 100, 3749, + (float)0.081523, 105, 3849, + (float)0.081523, 105, 3954, + (float)0.081523, 105, 4059, + (float)0.081523, 105, 4164, + (float)0.074861, 110, 4269, + (float)0.074861, 110, 4379, + (float)0.074861, 110, 4489, + (float)0.074861, 110, 4599, + (float)0.068290, 115, 4709, + (float)0.068290, 115, 4824, + (float)0.068290, 115, 4939, + (float)0.068290, 115, 5054, + (float)0.063573, 119, 5169, + (float)0.063573, 119, 5288, + (float)0.063573, 119, 5407, + (float)0.063573, 119, 5526, + (float)0.057219, 124, 5645, + (float)0.057219, 124, 5769, + (float)0.057219, 124, 5893, + (float)0.057219, 124, 6017, + (float)0.050985, 129, 6141, + (float)0.050985, 129, 6270, + (float)0.050985, 129, 6399, + (float)0.050985, 129, 6528, + (float)0.050985, 129, 6657, + (float)0.044859, 134, 6786, + (float)0.044859, 134, 6920, + (float)0.044859, 134, 7054, + (float)0.044859, 134, 7188, + (float)0.040571, 138, 7322, + (float)0.040571, 138, 7460, + (float)0.040571, 138, 7598, + (float)0.040571, 138, 7736, + (float)0.036339, 142, 7874, + (float)0.036339, 142, 8016, + (float)0.036339, 142, 8158, + (float)0.036339, 142, 8300, + (float)0.032139, 146, 8442, + (float)0.032139, 146, 8588, + (float)0.032139, 146, 8734, + (float)0.032139, 146, 8880, + (float)0.027947, 150, 9026, + (float)0.027947, 150, 9176, + (float)0.027947, 150, 9326, + (float)0.023739, 154, 9476, + (float)0.023739, 154, 9630, + (float)0.023739, 154, 9784, + (float)0.023739, 154, 9938, + (float)0.019504, 158, 10092, + (float)0.019504, 158, 10250, + (float)0.019504, 158, 10408, + (float)0.016976, 161, 10566, + (float)0.016976, 161, 10727, + (float)0.016976, 161, 10888, + (float)0.016976, 161, 11049, + (float)0.012639, 165, 11210, + (float)0.012639, 165, 11375, + (float)0.012639, 165, 11540, + (float)0.009991, 168, 11705, + (float)0.009991, 168, 11873, + (float)0.009991, 168, 12041, + (float)0.009016, 170, 12209, + (float)0.009016, 170, 12379, + (float)0.009016, 170, 12549, + (float)0.006217, 173, 12719, + (float)0.006217, 173, 12892, + (float)0.005097, 175, 13065, + (float)0.005097, 175, 13240, + (float)0.005097, 175, 13415, + (float)0.003909, 177, 13590, + (float)0.003909, 177, 13767, + (float)0.002340, 177, 13944, + (float)0.002389, 170, 14121, + (float)0.001068, 164, 14291, + (float)0.001653, 157, 14455, + (float)0.000717, 150, 14612, + (float)0.001614, 143, 14762, + (float)0.000270, 136, 14905, + (float)0.000484, 129, 15041, + (float)0.001103, 123, 15170, + (float)0.001242, 115, 15293, + (float)0.001188, 109, 15408, + (float)0.001011, 103, 15517, + (float)0.000709, 97, 15620, + (float)0.000301, 89, 15717, + (float)0.002416, 82, 15806, + (float)0.003251, 76, 15888, + (float)0.003246, 69, 15964, + (float)0.004141, 62, 16033, + (float)0.005963, 55, 16095, + (float)0.008839, 47, 16150, + (float)0.010490, 40, 16197, + (float)0.016994, 31, 16237, + (float)0.023659, 21, 16268, +}; diff --git a/libtiff/version.h b/libtiff/version.h new file mode 100755 index 0000000..11b9435 --- /dev/null +++ b/libtiff/version.h @@ -0,0 +1 @@ +#define VERSION "LIBTIFF, Version 3.4beta024\nCopyright (c) 1988-1995 Sam Leffler\nCopyright (c) 1991-1995 Silicon Graphics, Inc." diff --git a/man/Makefile.in b/man/Makefile.in new file mode 100755 index 0000000..8485b84 --- /dev/null +++ b/man/Makefile.in @@ -0,0 +1,407 @@ +#! smake +# $Header: /home/cvsroot/libtiff/man/Makefile.in,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# @WARNING@ +# +# Tag Image File Format Library Manual Pages +# +# Copyright (c) 1991-1997 Sam Leffler +# Copyright (c) 1991-1997 Silicon Graphics, Inc. +# +# 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 Stanford 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. +# +SRCDIR = @RELSRCDIR@/man + +# +# VERSION: @VERSION@ +# DATE: @DATE@ +# TARGET: @TARGET@ +# CCOMPILER: @CCOMPILER@ +# +SHELL = @SCRIPT_SH@ +NULL = +ECHO = echo +SED = sed +MV = mv +RM = rm -f +INSTALL = @INSTALL@ + +# +# Manual-related controls: +# +# MAN head of manual tree +# MANAPPS subdirectory for application programs +# MANLIB subdirectory for library functions +# +MAN = @DIR_MAN@ +MANAPPS = @MANAPPS@ +MANLIB = @MANLIB@ +# +# MANSEDLOCAL additional sed commands to use during source transformation +# (might want to transform section names here) +# MANCVT command to convert source to installable target (can use +# $? and $@, but not $<) +MANSEDLOCAL = @MANSEDLOCAL@ +MANCVT = @MANCVT@ +# +# The following macros are used during the install step to generate +# the filenames of the target manual pages. They appear inside a +# shell for loop in a command of the form: +# +# f=${MAN*NAME} +# +# where the variable ``i'' contains the filename of the formatted +# manual page (formatted according to the MANCVT macro). +# +# MANAPPNAME generate installed app man page filename +# MANLIBNAME generate installed library man page filename +# +# +MANAPPNAME = @MANAPPNAME@ +MANLIBNAME = @MANLIBNAME@ + +# +# Set this up if your manual system requires a +# pathname prefix in the .so commands when setting +# up alternate files for multi-function manual pages. +# +#MANDIR = man3/ + +MANTOOLS=\ + apps/fax2tiff.1 \ + apps/fax2ps.1 \ + apps/gif2tiff.1 \ + apps/pal2rgb.1 \ + apps/ppm2tiff.1 \ + apps/ras2tiff.1 \ + apps/rgb2ycbcr.1 \ + apps/sgi2tiff.1 \ + apps/thumbnail.1 \ + apps/tiff2bw.1 \ + apps/tiff2ps.1 \ + apps/tiffcmp.1 \ + apps/tiffcp.1 \ + apps/tiffdither.1 \ + apps/tiffdump.1 \ + apps/tiffgt.1 \ + apps/tiffinfo.1 \ + apps/tiffmedian.1 \ + apps/tiffsplit.1 \ + apps/tiffsv.1 \ + ${NULL} +MANDEV=\ + lib/libtiff.3t \ + \ + lib/TIFFClose.3t \ + lib/TIFFError.3t \ + lib/TIFFFlush.3t \ + lib/TIFFGetField.3t \ + lib/TIFFOpen.3t \ + lib/TIFFPrintDirectory.3t \ + lib/TIFFReadDirectory.3t \ + lib/TIFFReadEncodedStrip.3t \ + lib/TIFFReadEncodedTile.3t \ + lib/TIFFReadRGBAImage.3t \ + lib/TIFFReadRGBAStrip.3t \ + lib/TIFFReadRGBATile.3t \ + lib/TIFFReadRawStrip.3t \ + lib/TIFFReadRawTile.3t \ + lib/TIFFReadScanline.3t \ + lib/TIFFReadTile.3t \ + lib/TIFFRGBAImage.3t \ + lib/TIFFSetDirectory.3t \ + lib/TIFFSetField.3t \ + lib/TIFFWarning.3t \ + lib/TIFFWriteDirectory.3t \ + lib/TIFFWriteEncodedStrip.3t \ + lib/TIFFWriteEncodedTile.3t \ + lib/TIFFWriteTile.3t \ + lib/TIFFWriteRawStrip.3t \ + lib/TIFFWriteRawTile.3t \ + lib/TIFFWriteScanline.3t \ + \ + lib/TIFFbuffer.3t \ + lib/TIFFcodec.3t \ + lib/TIFFmemory.3t \ + lib/TIFFquery.3t \ + lib/TIFFsize.3t \ + lib/TIFFstrip.3t \ + lib/TIFFswab.3t \ + lib/TIFFtile.3t \ + ${NULL} +MANDEVLINKS=\ + lib/TIFFmalloc.3t \ + lib/TIFFrealloc.3t \ + lib/TIFFfree.3t \ + lib/TIFFmemset.3t \ + lib/TIFFmemcpy.3t \ + lib/TIFFmemcmp.3t \ + lib/TIFFComputeTile.3t \ + lib/TIFFCheckTile.3t \ + lib/TIFFNumberOfTiles.3t \ + lib/TIFFComputeStrip.3t \ + lib/TIFFNumberOfStrips.3t \ + lib/TIFFCurrentDirectory.3t \ + lib/TIFFCurrentRow.3t \ + lib/TIFFCurrentStrip.3t \ + lib/TIFFCurrentTile.3t \ + lib/TIFFFdOpen.3t \ + lib/TIFFFileName.3t \ + lib/TIFFFileno.3t \ + lib/TIFFFindCODEC.3t \ + lib/TIFFFlushData.3t \ + lib/TIFFGetMode.3t \ + lib/TIFFIsTiled.3t \ + lib/TIFFIsByteSwapped.3t \ + lib/TIFFIsUpSampled.3t \ + lib/TIFFIsMSB2LSB.3t \ + lib/TIFFLastDirectory.3t \ + lib/TIFFRegisterCODEC.3t \ + lib/TIFFReverseBits.3t \ + lib/TIFFRGBAImageOK.3t \ + lib/TIFFRGBAImageBegin.3t \ + lib/TIFFRGBAImageGet.3t \ + lib/TIFFRGBAImageEnd.3t \ + lib/TIFFSetErrorHandler.3t \ + lib/TIFFSetSubDirectory.3t \ + lib/TIFFSetWarningHandler.3t \ + lib/TIFFSwabArrayOfLong.3t \ + lib/TIFFSwabArrayOfShort.3t \ + lib/TIFFSwabLong.3t \ + lib/TIFFSwabShort.3t \ + lib/TIFFScanlineSize.3t \ + lib/TIFFDefaultStripSize.3t \ + lib/TIFFVStripSize.3t \ + lib/TIFFStripSize.3t \ + lib/TIFFDefaultTileSize.3t \ + lib/TIFFVTileSize.3t \ + lib/TIFFTileSize.3t \ + lib/TIFFTileRowSize.3t \ + lib/TIFFUnRegisterCODEC.3t \ + lib/TIFFVGetField.3t \ + lib/TIFFVSetField.3t \ + lib/TIFFReadBufferSetup.3t \ + lib/TIFFWriteBufferSetup.3t \ + ${NULL} +TARGETS=apps/Makefile lib/Makefile + +# +# System-specific manual page formatting commands should +# apply this sed command to the manual page source before +# handing it to the formatter. This sets any pathnames +# in the man pages to reflect local conventions. +# +MANSED=${SED}\ + -e 's;\$${DIR_BIN};@DIR_BIN@;g' \ + -e 's;\$${DIR_LIB};@DIR_LIB@;g' \ + -e 's;\$${DIR_INC};@DIR_INC@;g' \ + ${MANSEDLOCAL} + +all: ${TARGETS} + +apps/fax2tiff.1:: ${SRCDIR}/fax2tiff.1; ${MANCVT} +apps/fax2ps.1:: ${SRCDIR}/fax2ps.1; ${MANCVT} +apps/gif2tiff.1:: ${SRCDIR}/gif2tiff.1; ${MANCVT} +apps/pal2rgb.1:: ${SRCDIR}/pal2rgb.1; ${MANCVT} +apps/ppm2tiff.1:: ${SRCDIR}/ppm2tiff.1; ${MANCVT} +apps/ras2tiff.1:: ${SRCDIR}/ras2tiff.1; ${MANCVT} +apps/rgb2ycbcr.1:: ${SRCDIR}/rgb2ycbcr.1; ${MANCVT} +apps/sgi2tiff.1:: ${SRCDIR}/sgi2tiff.1; ${MANCVT} +apps/thumbnail.1:: ${SRCDIR}/thumbnail.1; ${MANCVT} +apps/tiff2bw.1:: ${SRCDIR}/tiff2bw.1; ${MANCVT} +apps/tiff2ps.1:: ${SRCDIR}/tiff2ps.1; ${MANCVT} +apps/tiffcmp.1:: ${SRCDIR}/tiffcmp.1; ${MANCVT} +apps/tiffcp.1:: ${SRCDIR}/tiffcp.1; ${MANCVT} +apps/tiffdither.1:: ${SRCDIR}/tiffdither.1; ${MANCVT} +apps/tiffdump.1:: ${SRCDIR}/tiffdump.1; ${MANCVT} +apps/tiffgt.1:: ${SRCDIR}/tiffgt.1; ${MANCVT} +apps/tiffinfo.1:: ${SRCDIR}/tiffinfo.1; ${MANCVT} +apps/tiffmedian.1:: ${SRCDIR}/tiffmedian.1; ${MANCVT} +apps/tiffsplit.1:: ${SRCDIR}/tiffsplit.1; ${MANCVT} +apps/tiffsv.1:: ${SRCDIR}/tiffsv.1; ${MANCVT} + +lib/libtiff.3t:: ${SRCDIR}/libtiff.3t; ${MANCVT} +lib/TIFFClose.3t:: ${SRCDIR}/TIFFClose.3t; ${MANCVT} +lib/TIFFError.3t:: ${SRCDIR}/TIFFError.3t; ${MANCVT} +lib/TIFFFlush.3t:: ${SRCDIR}/TIFFFlush.3t; ${MANCVT} +lib/TIFFGetField.3t:: ${SRCDIR}/TIFFGetField.3t; ${MANCVT} +lib/TIFFOpen.3t:: ${SRCDIR}/TIFFOpen.3t; ${MANCVT} +lib/TIFFPrintDirectory.3t:: ${SRCDIR}/TIFFPrintDirectory.3t; ${MANCVT} +lib/TIFFReadDirectory.3t:: ${SRCDIR}/TIFFReadDirectory.3t; ${MANCVT} +lib/TIFFReadEncodedStrip.3t:: ${SRCDIR}/TIFFReadEncodedStrip.3t;${MANCVT} +lib/TIFFReadEncodedTile.3t:: ${SRCDIR}/TIFFReadEncodedTile.3t; ${MANCVT} +lib/TIFFReadRGBAImage.3t:: ${SRCDIR}/TIFFReadRGBAImage.3t; ${MANCVT} +lib/TIFFReadRGBATile.3t:: ${SRCDIR}/TIFFReadRGBATile.3t; ${MANCVT} +lib/TIFFReadRGBAStrip.3t:: ${SRCDIR}/TIFFReadRGBAStrip.3t; ${MANCVT} +lib/TIFFReadRawStrip.3t:: ${SRCDIR}/TIFFReadRawStrip.3t; ${MANCVT} +lib/TIFFReadRawTile.3t:: ${SRCDIR}/TIFFReadRawTile.3t; ${MANCVT} +lib/TIFFReadScanline.3t:: ${SRCDIR}/TIFFReadScanline.3t; ${MANCVT} +lib/TIFFReadTile.3t:: ${SRCDIR}/TIFFReadTile.3t; ${MANCVT} +lib/TIFFRGBAImage.3t:: ${SRCDIR}/TIFFRGBAImage.3t; ${MANCVT} +lib/TIFFSetDirectory.3t:: ${SRCDIR}/TIFFSetDirectory.3t; ${MANCVT} +lib/TIFFSetField.3t:: ${SRCDIR}/TIFFSetField.3t; ${MANCVT} +lib/TIFFWarning.3t:: ${SRCDIR}/TIFFWarning.3t; ${MANCVT} +lib/TIFFWriteDirectory.3t:: ${SRCDIR}/TIFFWriteDirectory.3t; ${MANCVT} +lib/TIFFWriteEncodedStrip.3t:: ${SRCDIR}/TIFFWriteEncodedStrip.3t; ${MANCVT} +lib/TIFFWriteEncodedTile.3t:: ${SRCDIR}/TIFFWriteEncodedTile.3t; ${MANCVT} +lib/TIFFWriteTile.3t:: ${SRCDIR}/TIFFWriteTile.3t; ${MANCVT} +lib/TIFFWriteRawStrip.3t:: ${SRCDIR}/TIFFWriteRawStrip.3t; ${MANCVT} +lib/TIFFWriteRawTile.3t:: ${SRCDIR}/TIFFWriteRawTile.3t; ${MANCVT} +lib/TIFFWriteScanline.3t:: ${SRCDIR}/TIFFWriteScanline.3t; ${MANCVT} +lib/TIFFbuffer.3t:: ${SRCDIR}/TIFFbuffer.3t; ${MANCVT} +lib/TIFFcodec.3t:: ${SRCDIR}/TIFFcodec.3t; ${MANCVT} +lib/TIFFmemory.3t:: ${SRCDIR}/TIFFmemory.3t; ${MANCVT} +lib/TIFFquery.3t:: ${SRCDIR}/TIFFquery.3t; ${MANCVT} +lib/TIFFsize.3t:: ${SRCDIR}/TIFFsize.3t; ${MANCVT} +lib/TIFFstrip.3t:: ${SRCDIR}/TIFFstrip.3t; ${MANCVT} +lib/TIFFswab.3t:: ${SRCDIR}/TIFFswab.3t; ${MANCVT} +lib/TIFFtile.3t:: ${SRCDIR}/TIFFtile.3t; ${MANCVT} + +lib/TIFFComputeTile.3t:; ${ECHO} ".so ${MANDIR}TIFFtile.3t" > $@ +lib/TIFFCheckTile.3t:; ${ECHO} ".so ${MANDIR}TIFFtile.3t" > $@ +lib/TIFFNumberOfTiles.3t:; ${ECHO} ".so ${MANDIR}TIFFtile.3t" > $@ +lib/TIFFComputeStrip.3t:; ${ECHO} ".so ${MANDIR}TIFFstrip.3t" > $@ +lib/TIFFNumberOfStrips.3t:; ${ECHO} ".so ${MANDIR}TIFFstrip.3t" > $@ +lib/TIFFCurrentDirectory.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFCurrentRow.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFCurrentStrip.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFCurrentTile.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFFdOpen.3t:; ${ECHO} ".so ${MANDIR}TIFFOpen.3t" > $@ +lib/TIFFFileName.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFFileno.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFFlushData.3t:; ${ECHO} ".so ${MANDIR}TIFFFlush.3t" > $@ +lib/TIFFGetMode.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFIsTiled.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFIsByteSwapped.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFIsUpSampled.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFIsMSB2LSB.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFLastDirectory.3t:; ${ECHO} ".so ${MANDIR}TIFFquery.3t" > $@ +lib/TIFFReverseBits.3t:; ${ECHO} ".so ${MANDIR}TIFFswab.3t" > $@ +lib/TIFFRGBAImageOK.3t:; ${ECHO} ".so ${MANDIR}TIFFRGBAImage.3t" > $@ +lib/TIFFRGBAImageBegin.3t:; ${ECHO} ".so ${MANDIR}TIFFRGBAImage.3t" > $@ +lib/TIFFRGBAImageGet.3t:; ${ECHO} ".so ${MANDIR}TIFFRGBAImage.3t" > $@ +lib/TIFFRGBAImageEnd.3t:; ${ECHO} ".so ${MANDIR}TIFFRGBAImage.3t" > $@ +lib/TIFFSetErrorHandler.3t:; ${ECHO} ".so ${MANDIR}TIFFError.3t" > $@ +lib/TIFFSetSubDirectory.3t:; ${ECHO} ".so ${MANDIR}TIFFSetDirectory.3t" > $@ +lib/TIFFSetWarningHandler.3t:; ${ECHO} ".so ${MANDIR}TIFFWarning.3t" > $@ +lib/TIFFSwabArrayOfLong.3t:; ${ECHO} ".so ${MANDIR}TIFFswab.3t" > $@ +lib/TIFFSwabArrayOfShort.3t:; ${ECHO} ".so ${MANDIR}TIFFswab.3t" > $@ +lib/TIFFSwabLong.3t:; ${ECHO} ".so ${MANDIR}TIFFswab.3t" > $@ +lib/TIFFSwabShort.3t:; ${ECHO} ".so ${MANDIR}TIFFswab.3t" > $@ +lib/TIFFScanlineSize.3t:; ${ECHO} ".so ${MANDIR}TIFFsize.3t" > $@ +lib/TIFFRasterScanlineSize.3t:; ${ECHO} ".so ${MANDIR}TIFFsize.3t" > $@ +lib/TIFFDefaultStripSize.3t:; ${ECHO} ".so ${MANDIR}TIFFstrip.3t" > $@ +lib/TIFFStripSize.3t:; ${ECHO} ".so ${MANDIR}TIFFstrip.3t" > $@ +lib/TIFFVStripSize.3t:; ${ECHO} ".so ${MANDIR}TIFFstrip.3t" > $@ +lib/TIFFTileSize.3t:; ${ECHO} ".so ${MANDIR}TIFFtile.3t" > $@ +lib/TIFFVTileSize.3t:; ${ECHO} ".so ${MANDIR}TIFFtile.3t" > $@ +lib/TIFFDefaultTileSize.3t:; ${ECHO} ".so ${MANDIR}TIFFtile.3t" > $@ +lib/TIFFTileRowSize.3t:; ${ECHO} ".so ${MANDIR}TIFFtile.3t" > $@ +lib/TIFFVGetField.3t:; ${ECHO} ".so ${MANDIR}TIFFGetField.3t" > $@ +lib/TIFFVSetField.3t:; ${ECHO} ".so ${MANDIR}TIFFSetField.3t" > $@ +lib/TIFFFindCODEC.3t:; ${ECHO} ".so ${MANDIR}TIFFcodec.3t" > $@ +lib/TIFFRegisterCODEC.3t:; ${ECHO} ".so ${MANDIR}TIFFcodec.3t" > $@ +lib/TIFFUnRegisterCODEC.3t:; ${ECHO} ".so ${MANDIR}TIFFcodec.3t" > $@ +lib/TIFFmalloc.3t:; ${ECHO} ".so ${MANDIR}TIFFmemory.3t" > $@ +lib/TIFFrealloc.3t:; ${ECHO} ".so ${MANDIR}TIFFmemory.3t" > $@ +lib/TIFFfree.3t:; ${ECHO} ".so ${MANDIR}TIFFmemory.3t" > $@ +lib/TIFFmemset.3t:; ${ECHO} ".so ${MANDIR}TIFFmemory.3t" > $@ +lib/TIFFmemcpy.3t:; ${ECHO} ".so ${MANDIR}TIFFmemory.3t" > $@ +lib/TIFFmemcmp.3t:; ${ECHO} ".so ${MANDIR}TIFFmemory.3t" > $@ +lib/TIFFReadBufferSetup.3t:; ${ECHO} ".so ${MANDIR}TIFFbuffer.3t" > $@ +lib/TIFFWriteBufferSetup.3t:; ${ECHO} ".so ${MANDIR}TIFFbuffer.3t" > $@ + +apps/Makefile: + test -d apps || mkdir apps + ${MAKE} ${MANTOOLS} + ${RM} apps/Makefile + (cd apps; \ + ${ECHO} 'install:'; \ + for i in *.1; do \ + f=${MANAPPNAME}; \ + ${ECHO} ' cd ..; ${INSTALL} -m 444 -F ${MAN}/${MANAPPS} \ + -idb tiff.man.tools -src' apps/"$$i" '-O' "$$f"; \ + done \ + )>apps/Makefile +lib/Makefile: + test -d lib || mkdir lib + ${MAKE} ${MANDEV} ${MANDEVLINKS} + ${RM} lib/Makefile + (cd lib; \ + ${ECHO} 'install:'; \ + for i in *.3t; do \ + f=${MANLIBNAME}; \ + ${ECHO} ' cd ..; ${INSTALL} -m 444 -F ${MAN}/${MANLIB} \ + -idb tiff.man.dev -src' lib/"$$i" '-O' "$$f"; \ + done \ + )>lib/Makefile + +install: all + ${INSTALL} -m 755 -dir -idb tiff.man.tools ${MAN} + ${INSTALL} -m 755 -dir -idb tiff.man.tools ${MAN}/${MANAPPS} + cd apps; ${MAKE} install + ${INSTALL} -m 755 -dir -idb tiff.man.dev ${MAN}/${MANLIB} + cd lib; ${MAKE} install + +clean: + rm -rf apps lib + +# +# Miscellaneous junk left over... +# + +links: ${MANDEVLINKS} + +short: + ${MV} TIFFClose.3t close.3t + ${MV} TIFFError.3t error.3t + ${MV} TIFFFlush.3t flush.3t + ${MV} TIFFGetField.3t getfield.3t + ${MV} TIFFOpen.3t open.3t + ${MV} TIFFPrintDirectory.3t print.3t + ${MV} TIFFReadEncodedStrip.3t rdestrip.3t + ${MV} TIFFReadencodedTile.3t rdetile.3t + ${MV} TIFFReadRawStrip.3t rdrstrip.3t + ${MV} TIFFReadRawTile.3t rdrtile.3t + ${MV} TIFFReadDirectory.3t readdir.3t + ${MV} TIFFReadRGBAImage.3t rdimage.3t + ${MV} TIFFReadRGBAStrip.3t rdsimage.3t + ${MV} TIFFReadRGBATile.3t rdtimage.3t + ${MV} TIFFReadScanline.3t readline.3t + ${MV} TIFFReadTile.3t readtile.3t + ${MV} TIFFRGBAImage.3t rgbaimage.3t + ${MV} TIFFSetDirectory.3t setdir.3t + ${MV} TIFFSetField.3t setfield.3t + ${MV} TIFFWarning.3t warning.3t + ${MV} TIFFWriteEncodedStrip.3t wrestrip.3t + ${MV} TIFFWriteEncodedTile.3t wretile.3t + ${MV} TIFFWriteTile.3t wrttile.3t + ${MV} TIFFWriteDirectory.3t writedir.3t + ${MV} TIFFWriteRawStrip.3t wrrstrip.3t + ${MV} TIFFWriteRawTile.3t wrrtile.3t + ${MV} TIFFWriteScanline.3t writeline.3t + ${MV} TIFFtile.3t tile.3t + ${MV} TIFFstrip.3t strip.3t + ${MV} TIFFquery.3t query.3t + ${MV} TIFFswab.3t swab.3t + ${MV} TIFFsize.3t size.3t + ${MV} TIFFcodec.3t codec.3t + ${MV} TIFFmemory.3t memory.3t + ${MV} TIFFbuffer.3t buffer.3t diff --git a/man/TIFFClose.3t b/man/TIFFClose.3t new file mode 100755 index 0000000..c082d49 --- /dev/null +++ b/man/TIFFClose.3t @@ -0,0 +1,51 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFClose.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFClose 3T "May 2, 1990" +.SH NAME +TIFFClose \- close a previously opened +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "void TIFFClose(TIFF* tif)" +.SH DESCRIPTION +.IR TIFFClose +closes a file that was previously opened with +.IR TIFFOpen (3T). +Any buffered data are flushed to the file, including the contents of +the current directory (if modified); and all resources +are reclaimed. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +Likewise, warning messages are directed to the +.IR TIFFWarning (3T) +routine. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T) diff --git a/man/TIFFError.3t b/man/TIFFError.3t new file mode 100755 index 0000000..6e816df --- /dev/null +++ b/man/TIFFError.3t @@ -0,0 +1,69 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFError.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFError 3T "October 15, 1995" +.SH NAME +TIFFError, TIFFSetErrorHandler \- library error handling interface +.SH SYNOPSIS +.B "#include " +.br +.B "void TIFFError(const char* module, const char* fmt, ...)" +.sp .5 +.B "#include " +.br +.B "typedef void (*TIFFErrorHandler)(const char* module, const char* fmt, va_list ap);" +.br +.B "TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler handler);" +.SH DESCRIPTION +.I TIFFError +invokes the library-wide error handling function +to (normally) write an error message to the +.BR stderr . +The +.I fmt +parameter is a +.IR printf (3S) +format string, and any number arguments can be supplied. +The +.I module +parameter, if non-zero, is printed before the message; it typically +is used to identify the software module in which an error +is detected. +.PP +Applications that desire to capture control in the event of an error +should use +.IR TIFFSetErrorHandler +to override the default error handler. +A +.SM NULL +(0) error handling function may be installed to +suppress error messages. +.SH "RETURN VALUES" +.IR TIFFSetErrorHandler +returns a reference to the previous error handling function. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFWarning (3T), +.IR printf (3S) diff --git a/man/TIFFFlush.3t b/man/TIFFFlush.3t new file mode 100755 index 0000000..071ab24 --- /dev/null +++ b/man/TIFFFlush.3t @@ -0,0 +1,64 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFFlush.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFFlush 3T "December 16, 1991" +.SH NAME +TIFFFlush, TIFFFlushData \- flush pending writes to an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "int TIFFFlush(TIFF* tif)" +.br +.B "int TIFFFlushData(TIFF* tif)" +.SH DESCRIPTION +.IR TIFFFlush +causes any pending writes for the specified file (including writes +for the current directory) +to be done. +In normal operation this call is never needed\- the library +automatically does any flushing required. +.PP +.IR TIFFFlushData +flushes any pending image data for the specified file to be written out; +directory-related data are not flushed. +In normal operation this call is never needed\- the library +automatically does any flushing required. +.SH "RETURN VALUES" +0 is returned if an error is encountered, otherwise 1 is returned. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFWriteEncodedStrip (3T), +.IR TIFFWriteEncodedTile (3T), +.IR TIFFWriteRawStrip (3T), +.IR TIFFWriteRawTile (3T), +.IR TIFFWriteScanline (3T), +.IR TIFFWriteTile (3T) diff --git a/man/TIFFGetField.3t b/man/TIFFGetField.3t new file mode 100755 index 0000000..7ec16ba --- /dev/null +++ b/man/TIFFGetField.3t @@ -0,0 +1,210 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFGetField.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFGetField 3T "August 22, 1997" +.SH NAME +TIFFGetField, TIFFVGetField \- get the value(s) of a tag in an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "int TIFFGetField(TIFF* tif, ttag_t tag, ...)" +.sp 5p +.B "#include " +.br +.B "int TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap)" +.sp 5p +.B "int TIFFGetFieldDefaulted(TIFF* tif, ttag_t tag, ...)" +.br +.B "int TIFFVGetFieldDefaulted(TIFF* tif, ttag_t tag, va_list ap)" +.SH DESCRIPTION +.IR TIFFGetField +returns the value of a tag or pseudo-tag associated with the +the current directory of the open +.SM TIFF +file +.IR tif . +(A +.I pseudo-tag +is a parameter that is used to control the operation of the +.SM TIFF +library but whose value is not read or written to the underlying file.) +The file must have been previously opened with +.IR TIFFOpen (3T). +The tag is identified by +.IR tag , +one of the values defined in the include file +.B tiff.h +(see also the table below). +The type and number of values returned is dependent +on the tag being requested. +The programming interface uses a variable argument list +as prescribed by the +.IR stdarg (3) +interface. +The returned values should only be interpreted if +.IR TIFFGetField +returns 1. +.PP +.IR TIFFVGetField +is functionally equivalent to +.IR TIFFGetField +except that it takes a pointer to a variable +argument list. +.I TIFFVGetField +is useful for layering interfaces on top of +the functionality provided by +.IR TIFFGetField . +.PP +.IR TIFFGetFieldDefaulted +and +.IR TIFFVGetFieldDefaulted +are identical to +.IR TIFFGetField +and +.IR TIFFVGetField , +except that if a tag is not defined in the current directory +and it has a default value, then the default value is returned. +.PP +The tags understood by +.IR libtiff , +the number of parameter values, and the +types for the returned values are shown below. +The data types are specified as in C and correspond +to the types used to specify tag values to +.IR TIFFSetField (3T). +Remember that +.IR TIFFGetField +returns parameter values, so all the listed +data types are pointers to storage where values +should be returned. +Consult the +.SM TIFF +specification for information on the meaning of +each tag and their possible values. +.PP +.nf +.ta \w'TIFFTAG_CONSECUTIVEBADFAXLINES'u+2n +\w'Count'u+2n +\w'TIFFFaxFillFunc*'u+2n +\fITag Name\fP \fICount\fP \fITypes\fP \fINotes\fP +.sp 5p +TIFFTAG_ARTIST 1 char** +TIFFTAG_BADFAXLINES 1 uint32* +TIFFTAG_BITSPERSAMPLE 1 uint16* +TIFFTAG_CLEANFAXDATA 1 uint16* +TIFFTAG_COLORMAP 3 uint16** 1<" +.B "TIFF* TIFFOpen(const char* filename, const char* mode)" +.sp 5p +.B "TIFF* TIFFFdOpen(const int fd, const char* filename, const char* mode)" +.sp 5p +.B "typedef tsize_t (*TIFFReadWriteProc)(thandle_t, tdata_t, tsize_t);" +.B "typedef toff_t (*TIFFSeekProc)(thandle_t, toff_t, int);" +.B "typedef int (*TIFFCloseProc)(thandle_t);" +.B "typedef toff_t (*TIFFSizeProc)(thandle_t);" +.B "typedef int (*TIFFMapFileProc)(thandle_t, tdata_t*, toff_t*);" +.B "typedef void (*TIFFUnmapFileProc)(thandle_t, tdata_t, toff_t);" +.sp 5p +.B "TIFF* TIFFClientOpen(const char* filename, const char* mode, thandle_t clientdata," +.B " TIFFReadWriteProc readproc, TIFFReadWriteProc writeproc, TIFFSeekProc seekproc," +.B " TIFFCloseProc closeproc, TIFFSizeProc sizeproc, TIFFMapFileProc mapproc," +.B " TIFFUnmapFileProc unmapproc)" +.fi +.SH DESCRIPTION +.IR TIFFOpen +opens a +.SM TIFF +file whose name is +.I filename +and returns a handle to be used in subsequent calls to routines in +.IR libtiff . +If the open operation fails, then zero is returned. +The +.I mode +parameter specifies if the file is to be opened for reading (``r''), +writing (``w''), or appending (``a'') and, optionally, whether +to override certain default aspects of library operation (see below). +When a file is opened for appending, existing data will not +be touched; instead new data will be written as additional subfiles. +If an existing file is opened for writing, all previous data is +overwritten. +.PP +If a file is opened for reading, the first +.SM TIFF +directory in the file is automatically read +(also see +.IR TIFFSetDirectory (3T) +for reading directories other than the first). +If a file is opened for writing or appending, a default directory +is automatically created for writing subsequent data. +This directory has all the default values specified in +.SM TIFF +Revision 6.0: +.IR BitsPerSample =1, +.IR ThreshHolding "=bilevel art scan," +.IR FillOrder =1 +(most significant bit of each data byte is filled first), +.IR Orientation =1 +(the 0th row represents the visual top of the image, and the 0th +column represents the visual left hand side), +.IR SamplesPerPixel =1, +.IR RowsPerStrip =infinity, +.IR ResolutionUnit =2 +(inches), and +.IR Compression =1 +(no compression). +To alter these values, or to define values for additional fields, +.IR TIFFSetField (3T) +must be used. +.PP +.IR TIFFFdOpen +is like +.IR TIFFOpen +except that it opens a +.SM TIFF +file given an open file descriptor +.IR fd . +The file's name and mode must reflect that of the open descriptor. +The object associated with the file descriptor +.BR "must support random access" . +.PP +.IR TIFFClientOpen +is like +.IR TIFFOpen +except that the caller supplies a collection of functions that the +library will use to do \s-1UNIX\s+1-like I/O operations. +The +.I readproc +and +.I writeproc +are called to read and write data at the current file position. +.I seekproc +is called to change the current file position a la +.IR lseek (2). +.I closeproc +is invoked to release any resources associated with an open file. +.I sizeproc +is invoked to obtain the size in bytes of a file. +.I mapproc +and +.I unmapproc +are called to map and unmap a file's contents in memory; c.f. +.IR mmap (2) +and +.IR munmap (2). +The +.I clientdata +parameter is an opaque ``handle'' passed to the client-specified +routines passed as parameters to +.IR TIFFClientOpen . +.SH OPTIONS +The open mode parameter can include the following flags in +addition to the ``r'', ``w'', and ``a'' flags. +Note however that option flags must follow the read-write-append +specification. +.TP +.B l +When creating a new file force information be written with +Little-Endian byte order (but see below). +By default the library will create new files using the native +.SM CPU +byte order. +.TP +.B b +When creating a new file force information be written with +Big-Endian byte order (but see below). +By default the library will create new files using the native +.SM CPU +byte order. +.TP +.B L +Force image data that is read or written to be treated with +bits filled from Least Significant Bit (\s-1LSB\s+1) to +Most Significant Bit (\s-1MSB\s+1). +Note that this is the opposite to the way the library has +worked from its inception. +.TP +.B B +Force image data that is read or written to be treated with +bits filled from Most Significant Bit (\s-1MSB\s+1) to +Least Significant Bit (\s-1LSB\s+1); this is the default. +.TP +.B H +Force image data that is read or written to be treated with +bits filled in the same order as the native +.SM CPU. +.TP +.B M +Enable the use of memory-mapped files for images opened read-only. +If the underlying system does not support memory-mapped files +or if the specific image being opened cannot be memory-mapped +then the library will fallback to using the normal system interface +for reading information. +By default the library will attempt to use memory-mapped files. +.TP +.B m +Disable the use of memory-mapped files. +.TP +.B C +Enable the use of ``strip chopping'' when reading images +that are comprised of a single strip or tile of uncompressed data. +Strip chopping is a mechanism by which the library will automatically +convert the single-strip image to multiple strips, +each of which has about 8 Kilobytes of data. +This facility can be useful in reducing the amount of memory used +to read an image because the library normally reads each strip +in its entirety. +Strip chopping does however alter the apparent contents of the +image because when an image is divided into multiple strips it +looks as though the underlying file contains multiple separate +strips. +Finally, note that default handling of strip chopping is a compile-time +configuration parameter. +The default behaviour, for backwards compatibility, is to enable +strip chopping. +.TP +.B c +Disable the use of strip chopping when reading images. +.SH "BYTE ORDER" +The +.SM TIFF +specification (\fBall versions\fP) states that compliant readers +.IR "must be capable of reading images written in either byte order" . +Nonetheless some software that claims to support the reading of +.SM TIFF +images is incapable of reading images in anything but the native +.SM CPU +byte order on which the software was written. +(Especially notorious +are applications written to run on Intel-based machines.) +By default the library will create new files with the native +byte-order of the +.SM CPU +on which the application is run. +This ensures optimal performance and is portable to any application +that conforms to the TIFF specification. +To force the library to use a specific byte-order when creating +a new file the ``b'' and ``l'' option flags may be included in +the call to open a file; for example, ``wb'' or ``wl''. +.SH "RETURN VALUES" +Upon successful completion +.IR TIFFOpen , +.IR TIFFFdOpen , +and +.IR TIFFClientOpen +return a +.SM TIFF +pointer. +Otherwise, NULL is returned. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +Likewise, warning messages are directed to the +.IR TIFFWarning (3T) +routine. +.PP +\fB"%s": Bad mode\fP. +The specified +.I mode +parameter was not one of ``r'' (read), ``w'' (write), or ``a'' (append). +.PP +.BR "%s: Cannot open" . +.IR TIFFOpen () +was unable to open the specified filename for read/writing. +.PP +.BR "Cannot read TIFF header" . +An error occurred while attempting to read the header information. +.PP +.BR "Error writing TIFF header" . +An error occurred while writing the default header information +for a new file. +.PP +.BR "Not a TIFF file, bad magic number %d (0x%x)" . +The magic number in the header was not (hex) +0x4d4d or (hex) 0x4949. +.PP +.BR "Not a TIFF file, bad version number %d (0x%x)" . +The version field in the header was not 42 (decimal). +.PP +.BR "Cannot append to file that has opposite byte ordering" . +A file with a byte ordering opposite to the native byte +ordering of the current machine was opened for appending (``a''). +This is a limitation of the library. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFClose (3T) diff --git a/man/TIFFPrintDirectory.3t b/man/TIFFPrintDirectory.3t new file mode 100755 index 0000000..5ccd9e6 --- /dev/null +++ b/man/TIFFPrintDirectory.3t @@ -0,0 +1,71 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFPrintDirectory.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1991-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFPrintDirectory 3T "December 12, 1991" +.SH NAME +TIFFPrintDirectory \- print a description of a +.SM TIFF +directory +.SH SYNOPSIS +.B "#include " +.br +.B "void TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags)" +.SH DESCRIPTION +.I TIFFPrintDirectory +prints a description of the current directory in the specified +.SM TIFF +file to the standard I/O output stream +.IR fd . +The +.I flags +parameter is used to control the +.I "level of detail" +of the printed information; it is a bit-or of the flags +defined in +.BR tiffio.h : +.sp .5 +.nf +.ta \w'#define 'u +\w'TIFFPRINT_JPEGDCTABLES 'u +\w'0x200 'u +#define TIFFPRINT_NONE 0x0 /* no extra info */ +#define TIFFPRINT_STRIPS 0x1 /* strips/tiles info */ +#define TIFFPRINT_CURVES 0x2 /* color/gray response curves */ +#define TIFFPRINT_COLORMAP 0x4 /* colormap */ +#define TIFFPRINT_JPEGQTABLES 0x100 /* JPEG Q matrices */ +#define TIFFPRINT_JPEGACTABLES 0x200 /* JPEG AC tables */ +#define TIFFPRINT_JPEGDCTABLES 0x200 /* JPEG DC tables */ +.fi +.SH NOTES +In C++ the +.I flags +parameter defaults to 0. +.SH "RETURN VALUES" +None. +.SH DIAGNOSTICS +None. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFReadDirectory (3T), +.IR TIFFSetDirectory (3T) diff --git a/man/TIFFRGBAImage.3t b/man/TIFFRGBAImage.3t new file mode 100755 index 0000000..b184aad --- /dev/null +++ b/man/TIFFRGBAImage.3t @@ -0,0 +1,277 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFRGBAImage.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1991-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFRGBAImage 3T "October 15, 1995" +.SH NAME +TIFFRGBAImage \- read and decode an image into a raster +.SH SYNOPSIS +.nf +.B "#include " +.B "typedef unsigned char TIFFRGBValue;" +.B "typedef struct _TIFFRGBAImage TIFFRGBAImage;" +.B "int TIFFRGBAImageOK(TIFF* tif, char emsg[1024]);" +.B "int TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stopOnError, char emsg[1024]);" +.B "int TIFFRGBAImageGet(TIFFRGBAImage* img, uint32* raster, uint32 width, uint32 height);" +.B "void TIFFRGBAImageEnd(TIFFRGBAImage* img);" +.SH DESCRIPTION +The routines described here provide a high-level interface +through which +.SM TIFF +images may be read into memory. +Images may be strip- or tile-based and have a variety of different +characteristics: bits/sample, samples/pixel, photometric, etc. +Decoding state is encapsulated in a +.I TIFFRGBAImage +structure making it possible to capture state for multiple images +and quickly switch between them. +The target raster format can be customized to a particular application's +needs by installing custom routines that manipulate image data +according to application requirements. +.PP +The default usage for these routines is: check if an image can +be processed using +.IR TIFFRGBAImageOK , +construct a decoder state block using +.IR TIFFRGBAImageBegin , +read and decode an image into a target raster using +.IR TIFFRGBAImageGet , +and then +release resources using +.IR TIFFRGBAImageEnd . +.I TIFFRGBAImageGet +can be called multiple times to decode an image using different +state parameters. +If multiple images are to be displayed and there is not enough +space for each of the decoded rasters, multiple state blocks can +be managed and then calls can be made to +.I TIFFRGBAImageGet +as needed to display an image. +.PP +The generated raster is assumed to be an array of +.I width +times +.I height +32-bit entries, where +.I width +must be less than or equal to the width of the image (\c +.I height +may be any non-zero size). +If the raster dimensions are smaller than the image, the image data +is cropped to the raster bounds. +If the raster height is greater than that of the image, then the +image data are placed in the lower part of the raster. +(Note that the raster is assume to be organized such that the pixel +at location (\fIx\fP,\fIy\fP) is \fIraster\fP[\fIy\fP*\fIwidth\fP+\fIx\fP]; +with the raster origin in the lower-left hand corner.) +.PP +Raster pixels are 8-bit packed red, green, blue, alpha samples. +The macros +.IR TIFFGetR , +.IR TIFFGetG , +.IR TIFFGetB , +and +.I TIFFGetA +should be used to access individual samples. +Images without Associated Alpha matting information have a constant +Alpha of 1.0 (255). +.PP +.I TIFFRGBAImageGet +converts non-8-bit images by scaling sample values. +Palette, grayscale, bilevel, +.SM CMYK\c +, and YCbCr images are converted to +.SM RGB +transparently. +Raster pixels are returned uncorrected by any colorimetry information +present in the directory. +.PP +The paramater +.I stopOnError +specifies how to act if an error is encountered while reading +the image. +If +.I stopOnError +is non-zero, then an error will terminate the operation; otherwise +.I TIFFRGBAImageGet +will continue processing data until all the possible data in the +image have been requested. +.SH "ALTERNATE RASTER FORMATS" +To use the core support for reading and processing +.SM TIFF +images, but write the resulting raster data in a different format +one need only override the ``\fIput methods\fP'' used to store raster data. +These methods are are defined in the +.I TIFFRGBAImage +structure and initially setup by +.I TIFFRGBAImageBegin +to point to routines that pack raster data in the default +.SM ABGR +pixel format. +Two different routines are used according to the physical organization +of the image data in the file: +.IR PlanarConfiguration =1 +(packed samples), +and +.IR PlanarConfiguration =2 +(separated samples). +Note that this mechanism can be used to transform the data before +storing it in the raster. +For example one can convert data +to colormap indices for display on a colormap display. +.SH "SIMULTANEOUS RASTER STORE AND DISPLAY" +It is simple to display an image as it is being read into memory +by overriding the put methods as described above for supporting +alternate raster formats. +Simply keep a reference to the default put methods setup by +.I TIFFRGBAImageBegin +and then invoke them before or after each display operation. +For example, the +.IR tiffgt (1) +utility uses the following put method to update the display as +the raster is being filled: +.sp +.nf +.ft C +static void +putContigAndDraw(TIFFRGBAImage* img, uint32* raster, + uint32 x, uint32 y, uint32 w, uint32 h, + int32 fromskew, int32 toskew, + unsigned char* cp) +{ + (*putContig)(img, raster, x, y, w, h, fromskew, toskew, cp); + if (x+w == width) { + w = width; + if (img->orientation == ORIENTATION_TOPLEFT) + lrectwrite(0, y-(h-1), w-1, y, raster-x-(h-1)*w); + else + lrectwrite(0, y, w-1, y+h-1, raster); + } +} +.ft R +.fi +.sp +(the original routine provided by the library is saved in the +variable +.IR putContig .) +.SH "SUPPORTING ADDITIONAL TIFF FORMATS" +The +.I TIFFRGBAImage +routines support the most commonly encountered flavors of +.SM TIFF. +It is possible to extend this support by overriding the ``\fIget method\fP'' +invoked by +.I TIFFRGBAImageGet +to read +.SM TIFF +image data. +Details of doing this are a bit involved, it is best to make a copy +of an existing get method and modify it to suit the needs of an +application. +.SH NOTES +Samples must be either 1, 2, 4, 8, or 16 bits. +Colorimetric samples/pixel must be either 1, 3, or 4 (i.e. +.I SamplesPerPixel +minus +.IR ExtraSamples ). +.PP +Palettte image colormaps that appear to be incorrectly written +as 8-bit values are automatically scaled to 16-bits. +.SH "RETURN VALUES" +All routines return +1 if the operation was successful. +Otherwise, 0 is returned if an error was encountered and +.I stopOnError +is zero. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +.BR "Sorry, can not handle %d-bit pictures" . +The image had +.I BitsPerSample +other than 1, 2, 4, 8, or 16. +.PP +.BR "Sorry, can not handle %d-channel images" . +The image had +.I SamplesPerPixel +other than 1, 3, or 4. +.PP +\fBMissing needed "PhotometricInterpretation" tag\fP. +The image did not have a tag that describes how to display +the data. +.PP +\fBNo "PhotometricInterpretation" tag, assuming RGB\fP. +The image was missing a tag that describes how to display it, +but because it has 3 or 4 samples/pixel, it is assumed to be +.SM RGB. +.PP +\fBNo "PhotometricInterpretation" tag, assuming min-is-black\fP. +The image was missing a tag that describes how to display it, +but because it has 1 sample/pixel, it is assumed to be a grayscale +or bilevel image. +.PP +.BR "No space for photometric conversion table" . +There was insufficient memory for a table used to convert +image samples to 8-bit +.SM RGB. +.PP +\fBMissing required "Colormap" tag\fP. +A Palette image did not have a required +.I Colormap +tag. +.PP +.BR "No space for tile buffer" . +There was insufficient memory to allocate an i/o buffer. +.PP +.BR "No space for strip buffer" . +There was insufficient memory to allocate an i/o buffer. +.PP +.BR "Can not handle format" . +The image has a format (combination of +.IR BitsPerSample , +.IR SamplesPerPixel , +and +.IR PhotometricInterpretation ) +that can not be handled. +.PP +.BR "No space for B&W mapping table" . +There was insufficient memory to allocate a table used to map +grayscale data to +.SM RGB. +.PP +.BR "No space for Palette mapping table" . +There was insufficient memory to allocate a table used to map +data to 8-bit +.SM RGB. +.SH BUGS +Orientations other than bottom-left, or top-left are +not handled correctly. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFReadRGBAImage (3T), +.IR TIFFReadRGBAStrip (3T), +.IR TIFFReadRGBATile (3T) diff --git a/man/TIFFReadDirectory.3t b/man/TIFFReadDirectory.3t new file mode 100755 index 0000000..a6a5368 --- /dev/null +++ b/man/TIFFReadDirectory.3t @@ -0,0 +1,164 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFReadDirectory.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFReadDirectory 3T "October 15, 1995" +.SH NAME +TIFFReadDirectory \- get the contents of the next directory in an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "int TIFFReadDirectory(TIFF* tif)" +.SH DESCRIPTION +Read the next directory in the specified file and make it the +current directory. +Applications only need to call +.I TIFFReadDirectory +to read multiple subfiles in a single +.SM TIFF +file\(em +the first directory in a file is automatically read when +.IR TIFFOpen +is called. +.SH NOTES +If the library is compiled with +.SM STRIPCHOP_SUPPORT +enabled, then images that have a single uncompressed strip or +tile of data are automatically treated as if they were made +up of multiple strips or tiles of approximately 8 kilobytes each. +This operation is done only in-memory; it does not alter the +contents of the file. +However, the construction of the ``chopped strips'' is visible +to the application through the number of strips [tiles] +returned by +.I TIFFNumberOfStrips +[\c +.IR TIFFNumberOfTiles ]. +.SH "RETURN VALUES" +If the next directory was successfully read, 1 is returned. +Otherwise, 0 is returned if an error was encountered, +or if there are no more directories to be read. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +All warning messages are directed to the +.IR TIFFWarning (3T) +routine. +.PP +\fBSeek error accessing TIFF directory\fP. +An error occurred while positioning to the location of the +directory. +.PP +\fBWrong data type %d for field "%s"\fP. +The tag entry in the directory had an incorrect data type. +For example, an +.I ImageDescription +tag with a +.SM SHORT +data type. +.PP +\fBTIFF directory is missing required "%s" field\fP. +The specified tag is required to be present by the +.SM TIFF +5.0 specification, but is missing. +The directory is (usually) unusable. +.PP +\fB%s: Rational with zero denominator\fP. +A directory tag has a +.SM RATIONAL +value whose denominator is zero. +.PP +\fBIncorrect count %d for field "%s" (%lu, expecting %lu); tag ignored\fP. +The specified tag's count field is bad. +For example, a count other than 1 for a +.I SubFileType +tag. +.PP +\fBCannot handle different per-sample values for field "%s"\fP. +The tag has +.I SamplesPerPixel +values and they are not all the same; e.g. +.IR BitsPerSample . +The library is unable to handle images of this sort. +.PP +\fBCount mismatch for field "%s"; expecting %d, got %d\fP. +The count field in a +tag does not agree with the number expected by the library. +This should never happen, so if it does, the library refuses to +read the directory. +.PP +\fBInvalid TIFF directory; tags are not sorted in ascending order\fP. +The directory tags are not properly sorted as specified +in the +.SM TIFF +5.0 specification. +This error is not fatal. +.PP +\fBIgnoring unknown field with tag %d (0x%x)\fP. +An unknown tag was encountered in the directory; +the library ignores all such tags. +.PP +\fBTIFF directory is missing requred "ImageLength" field\fP. +The image violates the specification by not having a necessary field. +There is no way for the library to recover from this error. +.PP +\fBTIFF directory is missing requred "PlanarConfig" field\fP. +The image violates the specification by not having a necessary field. +There is no way for the library to recover from this error. +.PP +\fBTIFF directory is missing requred "StripOffsets" field\fP. +The image has multiple strips, but is missing the tag that +specifies the file offset to each strip of data. +There is no way for the library to recover from this error. +.PP +\fBTIFF directory is missing requred "TileOffsets" field\fP. +The image has multiple tiles, but is missing the tag that +specifies the file offset to each tile of data. +There is no way for the library to recover from this error. +.PP +\fBTIFF directory is missing required "StripByteCounts" field\fP. +The image has multiple strips, but is missing the tag that +specifies the size of each strip of data. +There is no way for the library to recover from this error. +.PP +\fBTIFF directory is missing required "StripByteCounts" field, calculating from imagelength\fP. +The image violates the specification by not having a necessary field. +However, when the image is comprised of only one strip or tile, the +library will estimate the missing value based on the file size. +.PP +\fBBogus "StripByteCounts" field, ignoring and calculating from imagelength\fP. +Certain vendors violate the specification by writing zero for +the StripByteCounts tag when they want to leave the value +unspecified. +If the image has a single strip, the library will estimate +the missing value based on the file size. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFWriteDirectory (3T), +.IR TIFFSetDirectory (3T), +.IR TIFFSetSubDirectory (3T) diff --git a/man/TIFFReadEncodedStrip.3t b/man/TIFFReadEncodedStrip.3t new file mode 100755 index 0000000..214860c --- /dev/null +++ b/man/TIFFReadEncodedStrip.3t @@ -0,0 +1,73 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFReadEncodedStrip.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFReadEncodedStrip 3T "October 15, 1995" +.SH NAME +TIFFReadEncodedStrip \- read and decode a strip of data from an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "tsize_t TIFFReadEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size)" +.SH DESCRIPTION +Read the specified strip of data and place up to +.I size +bytes of decompressed information in the (user supplied) data buffer. +.SH NOTES +The value of +.I strip +is a ``raw strip number.'' +That is, the caller must take into account whether or not the +data are organized in separate planes (\c +.IR PlanarConfiguration =2). +To read a full strip of data the data buffer should typically be +at least as large as the number returned by +.IR TIFFStripSize (3T). +.PP +The library attempts to hide bit- and byte-ordering differences +between the image and the native machine by converting data +to the native machine order. +Bit reversal is done if the +.I FillOrder +tag is opposite to the native machine bit order. +16- and 32-bit samples are automatically byte-swapped if the +file was written with a byte order opposite to the native +machine byte order, +.SH "RETURN VALUES" +The actual number of bytes of data that were placed in +.I buf +is returned; +.IR TIFFReadEncodedStrip +returns \-1 if an error was encountered. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFReadRawStrip (3T), +.IR TIFFReadScanline (3T) diff --git a/man/TIFFReadEncodedTile.3t b/man/TIFFReadEncodedTile.3t new file mode 100755 index 0000000..f5aacf8 --- /dev/null +++ b/man/TIFFReadEncodedTile.3t @@ -0,0 +1,76 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFReadEncodedTile.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFReadEncodedTile 3T "October 15, 1995" +.SH NAME +TIFFReadEncodedTile \- read and decode a tile of data from an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "int TIFFReadEncodedTile(TIFF* tif, u_long tile, u_char* buf, u_long size)" +.SH DESCRIPTION +Read the specified tile of data and place up to +.I size +bytes of decompressed information in the (user supplied) data buffer. +.SH NOTES +The value of +.I tile +is a ``raw tile number.'' +That is, the caller must take into account whether or not the +data are organized in separate planes (\c +.IR PlanarConfiguration =2). +.IR TIFFComputeTile +automatically does this when converting an (x,y,z,sample) +coordinate quadruple to a tile number. +To read a full tile of data the data buffer should be +at least as large as the value returned by +.IR TIFFTileSize . +.PP +The library attempts to hide bit- and byte-ordering differences +between the image and the native machine by converting data +to the native machine order. +Bit reversal is done if the +.I FillOrder +tag is opposite to the native machine bit order. +16- and 32-bit samples are automatically byte-swapped if the +file was written with a byte order opposite to the native +machine byte order, +.SH "RETURN VALUES" +The actual number of bytes of data that were placed in +.I buf +is returned; +.IR TIFFReadEncodedTile +returns \-1 if an error was encountered. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFReadRawTile (3T), +.IR TIFFReadTile (3T) diff --git a/man/TIFFReadRGBAImage.3t b/man/TIFFReadRGBAImage.3t new file mode 100755 index 0000000..792ba5c --- /dev/null +++ b/man/TIFFReadRGBAImage.3t @@ -0,0 +1,187 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFReadRGBAImage.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1991-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFReadRGBAImage 3T "February 14, 1992" +.SH NAME +TIFFReadRGBAImage \- read and decode an image into a fixed-format raster +.SH SYNOPSIS +.nf +.B "#include " +.ta \w'\fB#define \fP'u +\w'\fBTIFFGetR(abgr) \fP'u +.B "#define TIFFGetR(abgr) ((abgr) & 0xff)" +.B "#define TIFFGetG(abgr) (((abgr) >> 8) & 0xff)" +.B "#define TIFFGetB(abgr) (((abgr) >> 16) & 0xff)" +.B "#define TIFFGetA(abgr) (((abgr) >> 24) & 0xff)" +.sp 5p +.B "int TIFFReadRGBAImage(TIFF* tif, u_long width, u_long height, u_long* raster, int stopOnError)" +.SH DESCRIPTION +.IR TIFFReadRGBAImage +reads a strip- or tile-based image into memory, storing the +result in the user supplied +.IR raster . +The raster is assumed to be an array of +.I width +times +.I height +32-bit entries, where +.I width +must be less than or equal to the width of the image (\c +.I height +may be any non-zero size). +If the raster dimensions are smaller than the image, the image data +is cropped to the raster bounds. +If the raster height is greater than that of the image, then the +image data are placed in the lower part of the raster. +(Note that the raster is assume to be organized such that the pixel +at location (\fIx\fP,\fIy\fP) is \fIraster\fP[\fIy\fP*\fIwidth\fP+\fIx\fP]; +with the raster origin in the lower-left hand corner.) +.PP +Raster pixels are 8-bit packed red, green, blue, alpha samples. +The macros +.IR TIFFGetR , +.IR TIFFGetG , +.IR TIFFGetB , +and +.I TIFFGetA +should be used to access individual samples. +Images without Associated Alpha matting information have a constant +Alpha of 1.0 (255). +.PP +.I TIFFReadRGBAImage +converts non-8-bit images by scaling sample values. +Palette, grayscale, bilevel, +.SM CMYK\c +, and YCbCr images are converted to +.SM RGB +transparently. +Raster pixels are returned uncorrected by any colorimetry information +present in the directory. +.PP +The paramater +.I stopOnError +specifies how to act if an error is encountered while reading +the image. +If +.I stopOnError +is non-zero, then an error will terminate the operation; otherwise +.I TIFFReadRGBAImage +will continue processing data until all the possible data in the +image have been requested. +.SH NOTES +In C++ the +.I stopOnError +parameter defaults to 0. +.PP +Samples must be either 1, 2, 4, 8, or 16 bits. +Colorimetric samples/pixel must be either 1, 3, or 4 (i.e. +.I SamplesPerPixel +minus +.IR ExtraSamples ). +.PP +Palettte image colormaps that appear to be incorrectly written +as 8-bit values are automatically scaled to 16-bits. +.PP +.I TIFFReadRGBAImage +is just a wrapper around the more general +.IR TIFFRGBAImage (3T) +facilities. +.SH "RETURN VALUES" +1 is returned if the image was successfully read and converted. +Otherwise, 0 is returned if an error was encountered and +.I stopOnError +is zero. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +.BR "Sorry, can not handle %d-bit pictures" . +The image had +.I BitsPerSample +other than 1, 2, 4, 8, or 16. +.PP +.BR "Sorry, can not handle %d-channel images" . +The image had +.I SamplesPerPixel +other than 1, 3, or 4. +.PP +\fBMissing needed "PhotometricInterpretation" tag\fP. +The image did not have a tag that describes how to display +the data. +.PP +\fBNo "PhotometricInterpretation" tag, assuming RGB\fP. +The image was missing a tag that describes how to display it, +but because it has 3 or 4 samples/pixel, it is assumed to be +.SM RGB. +.PP +\fBNo "PhotometricInterpretation" tag, assuming min-is-black\fP. +The image was missing a tag that describes how to display it, +but because it has 1 sample/pixel, it is assumed to be a grayscale +or bilevel image. +.PP +.BR "No space for photometric conversion table" . +There was insufficient memory for a table used to convert +image samples to 8-bit +.SM RGB. +.PP +\fBMissing required "Colormap" tag\fP. +A Palette image did not have a required +.I Colormap +tag. +.PP +.BR "No space for tile buffer" . +There was insufficient memory to allocate an i/o buffer. +.PP +.BR "No space for strip buffer" . +There was insufficient memory to allocate an i/o buffer. +.PP +.BR "Can not handle format" . +The image has a format (combination of +.IR BitsPerSample , +.IR SamplesPerPixel , +and +.IR PhotometricInterpretation ) +that +.I TIFFReadRGBAImage +can not handle. +.PP +.BR "No space for B&W mapping table" . +There was insufficient memory to allocate a table used to map +grayscale data to +.SM RGB. +.PP +.BR "No space for Palette mapping table" . +There was insufficient memory to allocate a table used to map +data to 8-bit +.SM RGB. +.SH BUGS +Orientations other than bottom-left, or top-left are +not handled correctly. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFRGBAImage (3T), +.IR TIFFReadRGBAStrip (3T), +.IR TIFFReadRGBATile (3T) diff --git a/man/TIFFReadRGBAStrip.3t b/man/TIFFReadRGBAStrip.3t new file mode 100755 index 0000000..67ebc23 --- /dev/null +++ b/man/TIFFReadRGBAStrip.3t @@ -0,0 +1,176 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFReadRGBAStrip.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1991-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFReadRGBAStrip 3T "December 10, 1998" +.SH NAME +TIFFReadRGBAStrip \- read and decode an image strip into a fixed-format raster +.SH SYNOPSIS +.nf +.B "#include " +.ta \w'\fB#define \fP'u +\w'\fBTIFFGetR(abgr) \fP'u +.B "#define TIFFGetR(abgr) ((abgr) & 0xff)" +.B "#define TIFFGetG(abgr) (((abgr) >> 8) & 0xff)" +.B "#define TIFFGetB(abgr) (((abgr) >> 16) & 0xff)" +.B "#define TIFFGetA(abgr) (((abgr) >> 24) & 0xff)" +.sp 5p +.B "int TIFFReadRGBAStrip(TIFF* tif, tstrip_t strip, uint32 * raster )" +.SH DESCRIPTION +.IR TIFFReadRGBAStrip +reads a single strip of a strip-based image into memory, +storing the result in the user supplied RGBA +.IR raster . +The raster is assumed to be an array of +width times rowsperstrip 32-bit entries, where width +is the width of the image (TIFFTAG_IMAGEWIDTH) and +rowsperstrip is the maximum lines in a strip (TIFFTAG_ROWSPERSTRIP). + +.PP +The +.IR strip +value should be the strip number (strip zero is the first) as returned by the +.I TIFFComputeStrip +function, but always for sample 0. + +.PP +Note that the raster is assume to be organized such that the pixel +at location (\fIx\fP,\fIy\fP) is \fIraster\fP[\fIy\fP*\fIwidth\fP+\fIx\fP]; +with the raster origin in the +.I lower-left hand corner +of the strip. That is bottom to top organization. When reading a partial +last strip in the file the last line of the image will begin at the +beginning of the buffer. + +.PP +Raster pixels are 8-bit packed red, green, blue, alpha samples. +The macros +.IR TIFFGetR , +.IR TIFFGetG , +.IR TIFFGetB , +and +.I TIFFGetA +should be used to access individual samples. +Images without Associated Alpha matting information have a constant +Alpha of 1.0 (255). +.PP +See the +.IR TIFFRGBAImage (3T) +page for more details on how various image types are converted to RGBA +values. +.SH NOTES +Samples must be either 1, 2, 4, 8, or 16 bits. +Colorimetric samples/pixel must be either 1, 3, or 4 (i.e. +.I SamplesPerPixel +minus +.IR ExtraSamples ). +.PP +Palette image colormaps that appear to be incorrectly written +as 8-bit values are automatically scaled to 16-bits. +.PP +.I TIFFReadRGBAStrip +is just a wrapper around the more general +.IR TIFFRGBAImage (3T) +facilities. It's main advantage over the similar +.IR TIFFReadRGBAImage() +function is that for large images a single +buffer capable of holding the whole image doesn't need to be allocated, +only enough for one strip. The +.IR TIFFReadRGBATile() +function does a similar operation for tiled images. +.SH "RETURN VALUES" +1 is returned if the image was successfully read and converted. +Otherwise, 0 is returned if an error was encountered. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +.BR "Sorry, can not handle %d-bit pictures" . +The image had +.I BitsPerSample +other than 1, 2, 4, 8, or 16. +.PP +.BR "Sorry, can not handle %d-channel images" . +The image had +.I SamplesPerPixel +other than 1, 3, or 4. +.PP +\fBMissing needed "PhotometricInterpretation" tag\fP. +The image did not have a tag that describes how to display +the data. +.PP +\fBNo "PhotometricInterpretation" tag, assuming RGB\fP. +The image was missing a tag that describes how to display it, +but because it has 3 or 4 samples/pixel, it is assumed to be +.SM RGB. +.PP +\fBNo "PhotometricInterpretation" tag, assuming min-is-black\fP. +The image was missing a tag that describes how to display it, +but because it has 1 sample/pixel, it is assumed to be a grayscale +or bilevel image. +.PP +.BR "No space for photometric conversion table" . +There was insufficient memory for a table used to convert +image samples to 8-bit +.SM RGB. +.PP +\fBMissing required "Colormap" tag\fP. +A Palette image did not have a required +.I Colormap +tag. +.PP +.BR "No space for tile buffer" . +There was insufficient memory to allocate an i/o buffer. +.PP +.BR "No space for strip buffer" . +There was insufficient memory to allocate an i/o buffer. +.PP +.BR "Can not handle format" . +The image has a format (combination of +.IR BitsPerSample , +.IR SamplesPerPixel , +and +.IR PhotometricInterpretation ) +that +.I TIFFReadRGBAImage +can not handle. +.PP +.BR "No space for B&W mapping table" . +There was insufficient memory to allocate a table used to map +grayscale data to +.SM RGB. +.PP +.BR "No space for Palette mapping table" . +There was insufficient memory to allocate a table used to map +data to 8-bit +.SM RGB. +.SH BUGS +Orientations other than bottom-left, or top-left are +not handled correctly. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFRGBAImage (3T), +.IR TIFFReadRGBAImage (3T), +.IR TIFFReadRGBATile (3T) diff --git a/man/TIFFReadRGBATile.3t b/man/TIFFReadRGBATile.3t new file mode 100755 index 0000000..5d0776f --- /dev/null +++ b/man/TIFFReadRGBATile.3t @@ -0,0 +1,178 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFReadRGBATile.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1991-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFReadRGBATile 3T "December 10, 1998" +.SH NAME +TIFFReadRGBATile \- read and decode an image tile into a fixed-format raster +.SH SYNOPSIS +.nf +.B "#include " +.ta \w'\fB#define \fP'u +\w'\fBTIFFGetR(abgr) \fP'u +.B "#define TIFFGetR(abgr) ((abgr) & 0xff)" +.B "#define TIFFGetG(abgr) (((abgr) >> 8) & 0xff)" +.B "#define TIFFGetB(abgr) (((abgr) >> 16) & 0xff)" +.B "#define TIFFGetA(abgr) (((abgr) >> 24) & 0xff)" +.sp 5p +.B "int TIFFReadRGBATile(TIFF* tif, uint32 x, uint32 y, uint32 * raster )" +.SH DESCRIPTION +.IR TIFFReadRGBATile +reads a single tile of a tile-based image into memory, +storing the result in the user supplied RGBA +.IR raster . +The raster is assumed to be an array of +width times length 32-bit entries, where width +is the width of a tile (TIFFTAG_TILEWIDTH) and +length is the height of a tile (TIFFTAG_TILELENGTH). + +.PP +The +.IR x +and +.IR y +values are the offsets from the top left corner to the top left corner +of the tile to be read. They must be an exact multiple of the tile +width and length. + +.PP +Note that the raster is assume to be organized such that the pixel +at location (\fIx\fP,\fIy\fP) is \fIraster\fP[\fIy\fP*\fIwidth\fP+\fIx\fP]; +with the raster origin in the +.I lower-left hand corner +of the tile. That is bottom to top organization. Edge tiles which +partly fall off the image will be filled out with appropriate zeroed +areas. + +.PP +Raster pixels are 8-bit packed red, green, blue, alpha samples. +The macros +.IR TIFFGetR , +.IR TIFFGetG , +.IR TIFFGetB , +and +.I TIFFGetA +should be used to access individual samples. +Images without Associated Alpha matting information have a constant +Alpha of 1.0 (255). +.PP +See the +.IR TIFFRGBAImage (3T) +page for more details on how various image types are converted to RGBA +values. +.SH NOTES +Samples must be either 1, 2, 4, 8, or 16 bits. +Colorimetric samples/pixel must be either 1, 3, or 4 (i.e. +.I SamplesPerPixel +minus +.IR ExtraSamples ). +.PP +Palette image colormaps that appear to be incorrectly written +as 8-bit values are automatically scaled to 16-bits. +.PP +.I TIFFReadRGBATile +is just a wrapper around the more general +.IR TIFFRGBAImage (3T) +facilities. It's main advantage over the similar +.IR TIFFReadRGBAImage() +function is that for large images a single +buffer capable of holding the whole image doesn't need to be allocated, +only enough for one tile. The +.IR TIFFReadRGBAStrip() +function does a similar operation for stripped images. +.SH "RETURN VALUES" +1 is returned if the image was successfully read and converted. +Otherwise, 0 is returned if an error was encountered. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +.BR "Sorry, can not handle %d-bit pictures" . +The image had +.I BitsPerSample +other than 1, 2, 4, 8, or 16. +.PP +.BR "Sorry, can not handle %d-channel images" . +The image had +.I SamplesPerPixel +other than 1, 3, or 4. +.PP +\fBMissing needed "PhotometricInterpretation" tag\fP. +The image did not have a tag that describes how to display +the data. +.PP +\fBNo "PhotometricInterpretation" tag, assuming RGB\fP. +The image was missing a tag that describes how to display it, +but because it has 3 or 4 samples/pixel, it is assumed to be +.SM RGB. +.PP +\fBNo "PhotometricInterpretation" tag, assuming min-is-black\fP. +The image was missing a tag that describes how to display it, +but because it has 1 sample/pixel, it is assumed to be a grayscale +or bilevel image. +.PP +.BR "No space for photometric conversion table" . +There was insufficient memory for a table used to convert +image samples to 8-bit +.SM RGB. +.PP +\fBMissing required "Colormap" tag\fP. +A Palette image did not have a required +.I Colormap +tag. +.PP +.BR "No space for tile buffer" . +There was insufficient memory to allocate an i/o buffer. +.PP +.BR "No space for strip buffer" . +There was insufficient memory to allocate an i/o buffer. +.PP +.BR "Can not handle format" . +The image has a format (combination of +.IR BitsPerSample , +.IR SamplesPerPixel , +and +.IR PhotometricInterpretation ) +that +.I TIFFReadRGBAImage +can not handle. +.PP +.BR "No space for B&W mapping table" . +There was insufficient memory to allocate a table used to map +grayscale data to +.SM RGB. +.PP +.BR "No space for Palette mapping table" . +There was insufficient memory to allocate a table used to map +data to 8-bit +.SM RGB. +.SH BUGS +Orientations other than bottom-left, or top-left are +not handled correctly. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFRGBAImage (3T), +.IR TIFFReadRGBAImage (3T), +.IR TIFFReadRGBAStrip (3T) diff --git a/man/TIFFReadRawStrip.3t b/man/TIFFReadRawStrip.3t new file mode 100755 index 0000000..a727cc5 --- /dev/null +++ b/man/TIFFReadRawStrip.3t @@ -0,0 +1,63 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFReadRawStrip.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFReadRawStrip 3T "October 15, 1995" +.SH NAME +TIFFReadRawStrip \- return the undecoded contents +of a strip of data from an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "tsize_t TIFFReadRawStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size)" +.SH DESCRIPTION +Read the contents of the specified strip into the +(user supplied) data buffer. +Note that the value of +.I strip +is a ``raw strip number.'' +That is, the caller must take into account whether or not the +data is organized in separate planes (\c +.IR PlanarConfiguration =2). +To read a full strip of data the data buffer should typically be +at least as large as the number returned by +.IR TIFFStripSize . +.SH "RETURN VALUES" +The actual number of bytes of data that were placed in +.I buf +is returned; +.IR TIFFReadEncodedStrip +returns \-1 if an error was encountered. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFReadEncodedStrip (3T), +.IR TIFFReadScanline (3T), +.IR TIFFStripSize (3T) diff --git a/man/TIFFReadRawTile.3t b/man/TIFFReadRawTile.3t new file mode 100755 index 0000000..23b876f --- /dev/null +++ b/man/TIFFReadRawTile.3t @@ -0,0 +1,65 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFReadRawTile.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFReadRawTile 3T "October 15, 1995" +.SH NAME +TIFFReadRawTile \- return an undecoded tile of data from an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "tsize_t TIFFReadRawTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size)" +.SH DESCRIPTION +Read the contents of the specified tile into the +(user supplied) data buffer. +Note that the value of +.I tile +is a ``raw tile number.'' +That is, the caller must take into account whether or not the +data is organized in separate planes (\c +.IR PlanarConfiguration =2). +.I TIFFComputeTile +automatically does this when converting an (x,y,z,sample) +coordinate quadruple to a tile number. +To read a full tile of data the data buffer should typically be +at least as large as the value returned by +.IR TIFFTileSize . +.SH "RETURN VALUES" +The actual number of bytes of data that were placed in +.I buf +is returned; +.IR TIFFReadEncodedTile +returns \-1 if an error was encountered. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFReadEncodedTile (3T), +.IR TIFFReadTile (3T), +.IR TIFFTileSize (3T) diff --git a/man/TIFFReadScanline.3t b/man/TIFFReadScanline.3t new file mode 100755 index 0000000..fa11f46 --- /dev/null +++ b/man/TIFFReadScanline.3t @@ -0,0 +1,99 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFReadScanline.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFReadScanline 3T "October 15, 1995" +.SH NAME +TIFFReadScanline \- read and decode a scanline of data from an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "int TIFFReadScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample)" +.SH DESCRIPTION +Read the data for the specified row into the (user supplied) +data buffer +.IR buf . +The data are returned decompressed and, in the native byte- +and bit-ordering, but are otherwise packed (see further below). +The buffer must be large enough to hold an entire scanline of data. +Applications should call the routine +.IR TIFFScanlineSize +to find out the size (in bytes) of a scanline buffer. +The +.I row +parameter is always used by +.IR TIFFReadScanline ; +the +.I sample +parameter is used only if data are organized in separate planes (\c +.IR PlanarConfiguration =2). +.SH NOTES +The library attempts to hide bit- and byte-ordering differences +between the image and the native machine by converting data +to the native machine order. +Bit reversal is done if the +.I FillOrder +tag is opposite to the native machine bit order. +16- and 32-bit samples are automatically byte-swapped if the +file was written with a byte order opposite to the native +machine byte order, +.PP +In C++ the +.I sample +parameter defaults to 0. +.SH "RETURN VALUES" +.IR TIFFReadScanline +returns \-1 if it detects an error; otherwise 1 is returned. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +.BR "Compression algorithm does not support random access" . +Data was requested in a non-sequential order from a file that +uses a compression algorithm and that has +.I RowsPerStrip +greater than one. +That is, data in the image is stored in a compressed form, +and with multiple rows packed into a strip. +In this case, the library does not support random access to the data. +The data should either be accessed sequentially, or the file +should be converted so that each strip is made up of one row +of data. +.SH BUGS +Reading subsampled YCbCR data does not work correctly +because, for +.IR PlanarConfiguration =2 +the size of a scanline is not calculated on a per-sample basis, +and for +.IR PlanarConfiguration =1 +the library does not unpack the block-interleaved samples; use +the strip- and tile-based interfaces to read these formats. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFReadEncodedStrip (3T), +.IR TIFFReadRawStrip (3T) diff --git a/man/TIFFReadTile.3t b/man/TIFFReadTile.3t new file mode 100755 index 0000000..8db6a08 --- /dev/null +++ b/man/TIFFReadTile.3t @@ -0,0 +1,85 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFReadTile.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFReadTile 3T "December 16, 1991" +.SH NAME +TIFFReadTile \- read and decode a tile of data from an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "tsize_t TIFFReadTile(TIFF* tif, tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t sample)" +.SH DESCRIPTION +Return the data for the tile +.I containing +the specified coordinates. +The data placed in +.I buf +are returned decompressed and, typically, in the native byte- +and bit-ordering, but are otherwise packed (see further below). +The buffer must be large enough to hold an entire tile of data. +Applications should call the routine +.IR TIFFTileSize +to find out the size (in bytes) of a tile buffer. +The +.I x +and +.I y +parameters are always used by +.IR TIFFReadTile . +The +.I z +parameter is used if the image is deeper than 1 slice (\c +.IR ImageDepth >1). +The +.I sample +parameter is used only if data are organized in separate planes (\c +.IR PlanarConfiguration =2). +.SH NOTES +The library attempts to hide bit- and byte-ordering differences +between the image and the native machine by converting data +to the native machine order. +Bit reversal is done if the +.I FillOrder +tag is opposite to the native machine bit order. +16- and 32-bit samples are automatically byte-swapped if the +file was written with a byte order opposite to the native +machine byte order, +.SH "RETURN VALUES" +.IR TIFFReadTile +returns \-1 if it detects an error; otherwise the number of +bytes in the decoded tile is returned. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFCheckTile (3T), +.IR TIFFComputeTile (3T), +.IR TIFFOpen (3T), +.IR TIFFReadEncodedTile (3T), +.IR TIFFReadRawTile (3T) diff --git a/man/TIFFSetDirectory.3t b/man/TIFFSetDirectory.3t new file mode 100755 index 0000000..5e3e2c1 --- /dev/null +++ b/man/TIFFSetDirectory.3t @@ -0,0 +1,78 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFSetDirectory.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFSetDirectory 3T "October 15, 1995" +.SH NAME +TIFFSetDirectory, TIFFSetSubDirectory \- set the current directory for an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "int TIFFSetDirectory(TIFF* tif, tdir_t dirnum)" +.br +.B "int TIFFSetSubDirectory(TIFF* tif, uint32 diroff)" +.SH DESCRIPTION +.I TIFFSetDirectory +changes the current directory and reads its contents with +.IR TIFFReadDirectory . +The parameter +.I dirnum +specifies the subfile/directory as an integer number, with +the first directory numbered zero. +.PP +.I TIFFSetSubDirectory +acts like +.IR TIFFSetDirectory , +except the directory is specified as a +file offset instead of an index; this is required for accessing +subdirectories linked through a +.I SubIFD +tag. +.SH "RETURN VALUES" +On successful return 1 is returned. +Otherwise, 0 is returned if +.I dirnum +or +.I diroff +specifies a non-existent directory, or if an error was +encountered while reading the directory's contents. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +.BR "%s: Error fetching directory count" . +An error was encountered while reading the ``directory count'' field. +.PP +.BR "%s: Error fetching directory link" . +An error was encountered while reading the ``link value'' that +points to the next directory in a file. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFCurrentDirectory (3T), +.IR TIFFOpen (3T), +.IR TIFFReadDirectory (3T), +.IR TIFFWriteDirectory (3T) diff --git a/man/TIFFSetField.3t b/man/TIFFSetField.3t new file mode 100755 index 0000000..2e56820 --- /dev/null +++ b/man/TIFFSetField.3t @@ -0,0 +1,213 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFSetField.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFSetField 3T "August 28, 1997" +.SH NAME +TIFFSetField \- set the value(s) of a tag in a +.SM TIFF +file open for writing +.SH SYNOPSIS +.B "#include " +.br +.B "int TIFFSetField(TIFF* tif, ttag_t tag, ...)" +.br +.B "#include " +.br +.B "int TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap)" +.SH DESCRIPTION +.IR TIFFSetField +sets the value of a field +or pseudo-tag in the current directory associated with +the open +.SM TIFF +file +.IR tif . +(A +.I pseudo-tag +is a parameter that is used to control the operation of the +.SM TIFF +library but whose value is not read or written to the underlying file.) +To set the value of a field +the file must have been previously opened for writing with +.IR TIFFOpen (3T); +pseudo-tags can be set whether the file was opened for reading +or writing. +The field is identified by +.IR tag , +one of the values defined in the include file +.B tiff.h +(see also the table below). +The actual value is specified using a variable argument list, +as prescribed by the +.IR stdarg (3) +interface (\c +or, on some machines, the +.IR varargs (3) +interface.) +.PP +.IR TIFFVSetField +is functionally equivalent to +.IR TIFFSetField +except that it takes a pointer to a variable +argument list. +.I TIFFVSetField +is useful for writing routines that are layered +on top of the functionality provided by +.IR TIFFSetField . +.PP +The tags understood by +.IR libtiff , +the number of parameter values, and the +expected types for the parameter values are shown below. +The data types are: +.I char* +is null-terminated string and corresponds to the +.SM ASCII +data type; +.I uint16 +is an unsigned 16-bit value; +.I uint32 +is an unsigned 32-bit value; +.I uint16* +is an array of unsigned 16-bit values. +.I void* +is an array of data values of unspecified type. + +Consult the +.SM TIFF +specification for information on the meaning of each tag. +.PP +.nf +.ta \w'TIFFTAG_CONSECUTIVEBADFAXLINES'u+2n +\w'Count'u+2n +\w'TIFFFaxFillFunc \(dg'u+2n +\fITag Name\fP \fICount\fP \fITypes\fP \fINotes\fP +.sp 5p +TIFFTAG_ARTIST 1 char* +TIFFTAG_BADFAXLINES 1 uint32 +TIFFTAG_BITSPERSAMPLE 1 uint16 \(dg +TIFFTAG_CLEANFAXDATA 1 uint16 +TIFFTAG_COLORMAP 3 uint16* 1< 0 +TIFFTAG_SAMPLEFORMAT 1 uint16 \(dg +TIFFTAG_SAMPLESPERPIXEL 1 uint16 \(dg value must be <= 4 +TIFFTAG_SMAXSAMPLEVALUE 1 double +TIFFTAG_SMINSAMPLEVALUE 1 double +TIFFTAG_SOFTWARE 1 char* +TIFFTAG_STONITS 1 double \(dg +TIFFTAG_SUBFILETYPE 1 uint32 +TIFFTAG_SUBIFD 2 uint16,uint32* count & offsets array +TIFFTAG_TARGETPRINTER 1 char* +TIFFTAG_THRESHHOLDING 1 uint16 +TIFFTAG_TILEDEPTH 1 uint32 \(dg +TIFFTAG_TILELENGTH 1 uint32 \(dg must be a multiple of 8 +TIFFTAG_TILEWIDTH 1 uint32 \(dg must be a multiple of 8 +TIFFTAG_TRANSFERFUNCTION 1 or 3 \(dd uint16* 1<" +.br +.B "void TIFFWarning(const char* module, const char* fmt, ...)" +.sp .5 +.B "#include " +.br +.B "typedef void (*TIFFWarningHandler)(const char* module, const char* fmt, va_list ap);" +.br +.B "TIFFWarningHandler TIFFSetWarningHandler(TIFFWarningHandler handler);" +.SH DESCRIPTION +.I TIFFWarning +invokes the library-wide warning handler function +to (normally) write a warning message to the +.BR stderr . +The +.I fmt +parameter is a +.IR printf (3S) +format string, and any number arguments can be supplied. +The +.I module +parameter is interpreted as a string that, if non-zero, +should be printed before the message; it typically +is used to identify the software module in which a warning +is detected. +.PP +Applications that desire to capture control in the event of a warning +should use +.IR TIFFSetWarningHandler +to override the default warning handler. +A +.SM NULL +(0) warning handler function may be installed to +suppress error messages. +.SH "RETURN VALUES" +.IR TIFFSetWarningHandler +returns a reference to the previous error handling function. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFError (3T), +.IR printf (3S) diff --git a/man/TIFFWriteDirectory.3t b/man/TIFFWriteDirectory.3t new file mode 100755 index 0000000..8736f68 --- /dev/null +++ b/man/TIFFWriteDirectory.3t @@ -0,0 +1,104 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFWriteDirectory.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFWriteDirectory 3T "December 16, 1991" +.SH NAME +TIFFWriteDirectory \- write the current directory in an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "int TIFFWriteDirectory(TIFF* tif)" +.SH DESCRIPTION +Write the contents of the current directory to the file and setup +to create a new subfile in the same file. +Applications only need to call +.IR TIFFWriteDirectory +when writing multiple subfiles to a single +.SM TIFF +file. +.IR TIFFWriteDirectory +is automatically called by +.IR TIFFClose +and +.IR TIFFFlush +to write a modified directory if the file is open for writing. +.SH "RETURN VALUES" +1 is returned when the contents are successfully +written to the file. +Otherwise, 0 is returned if an error was encountered when writing +the directory contents. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +.BR "Error post-encoding before directory write" . +Before writing the contents of the current directory, any pending +data are flushed. +This message indicates that an error occurred while doing this. +.PP +.BR "Error flushing data before directory write" . +Before writing the contents of the current directory, any pending +data are flushed. +This message indicates that an error occurred while doing this. +.PP +.BR "Cannot write directory, out of space" . +There was not enough space to allocate a temporary area for +the directory that was to be written. +.PP +.BR "Error writing directory count" . +A write error occurred when writing the count of fields in the directory. +.PP +.BR "Error writing directory contents" . +A write error occurred when writing the directory fields. +.PP +.BR "Error writing directory link" . +A write error occurred when writing the link to the next directory. +.PP +\fBError writing data for field "%s"\fP. +A write error occurred when writing indirect data for the specified field. +.PP +.BR "Error writing TIFF header" . +A write error occurred when re-writing header at the front of the file. +.PP +.BR "Error fetching directory count" . +A read error occurred when fetching the directory count field for +a previous directory. +This can occur when setting up a link to the directory that is being +written. +.PP +.BR "Error fetching directory link" . +A read error occurred when fetching the directory link field for +a previous directory. +This can occur when setting up a link to the directory that is being +written. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFError (3T), +.IR TIFFReadDirectory (3T), +.IR TIFFSetDirectory (3T) diff --git a/man/TIFFWriteEncodedStrip.3t b/man/TIFFWriteEncodedStrip.3t new file mode 100755 index 0000000..98eca5d --- /dev/null +++ b/man/TIFFWriteEncodedStrip.3t @@ -0,0 +1,105 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFWriteEncodedStrip.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFWriteEncodedStrip 3T "October 15, 1995" +.SH NAME +TIFFWritedEncodedStrip \- compress and write a strip of data to an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "tsize_t TIFFWriteEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size)" +.SH DESCRIPTION +Compress +.I size +bytes of raw data from +.I buf +and write the result to the specified strip; replacing +any previously written data. +Note that the value of +.I strip +is a ``raw strip number.'' +That is, the caller must take into account whether or not the +data are organized in separate places (\c +.IR PlanarConfiguration =2). +.SH NOTES +The library writes encoded data using the native machine byte order. +Correctly implemented +.SM TIFF +readers are expected to do any necessary byte-swapping to +correctly process image data with BitsPerSample greater than 8. +.PP +The strip number must be valid according to the current settings +of the +.I ImageLength +and +.I RowsPerStrip +tags. +An image may be dynamically grown by increasing the value of +.I ImageLength +prior to each call to +.IR TIFFWriteEncodedStrip . +.SH "RETURN VALUES" +\-1 is returned if an error was encountered. +Otherwise, the value of +.IR size +is returned. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +\fB%s: File not open for writing\fP. +The file was opened for reading, not writing. +.PP +\fBCan not write scanlines to a tiled image\fP. +The image is assumed to be organized in tiles because the +.I TileWidth +and +.I TileLength +tags have been set with +.IR TIFFSetField (3T). +.PP +\fB%s: Must set "ImageWidth" before writing data\fP. +The image's width has not be set before the first write. +See +.IR TIFFSetField (3T) +for information on how to do this. +.PP +\fB%s: Must set "PlanarConfiguration" before writing data\fP. +The organization of data has not be defined before the first write. +See +.IR TIFFSetField (3T) +for information on how to do this. +.PP +\fB%s: No space for strip arrays"\fP. +There was not enough space for the arrays that hold strip +offsets and byte counts. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFWriteScanline (3T), +.IR TIFFWriteRawStrip (3T) diff --git a/man/TIFFWriteEncodedTile.3t b/man/TIFFWriteEncodedTile.3t new file mode 100755 index 0000000..20bdbc5 --- /dev/null +++ b/man/TIFFWriteEncodedTile.3t @@ -0,0 +1,98 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFWriteEncodedTile.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFWriteEncodedTile 3T "December 16, 1991" +.SH NAME +TIFFWritedEncodedTile \- compress and write a tile of data to an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "tsize_t TIFFWriteEncodedTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size)" +.SH DESCRIPTION +Compress +.I size +bytes of raw data from +.I buf +and +.B append +the result to the end of the specified tile. +Note that the value of +.I tile +is a ``raw tile number.'' +That is, the caller must take into account whether or not the +data are organized in separate places (\c +.IR PlanarConfiguration =2). +.IR TIFFComputeTile +automatically does this when converting an (x,y,z,sample) +coordinate quadruple to a tile number. +.SH NOTES +The library writes encoded data using the native machine byte order. +Correctly implemented +.SM TIFF +readers are expected to do any necessary byte-swapping to +correctly process image data with BitsPerSample greater than 8. +.SH "RETURN VALUES" +\-1 is returned if an error was encountered. +Otherwise, the value of +.IR size +is returned. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +\fB%s: File not open for writing\fP. +The file was opened for reading, not writing. +.PP +\fBCan not write tiles to a stripped image\fP. +The image is assumed to be organized in strips because neither of the +.I TileWidth +or +.I TileLength +tags have been set with +.IR TIFFSetField (3T). +.PP +\fB%s: Must set "ImageWidth" before writing data\fP. +The image's width has not be set before the first write. +See +.IR TIFFSetField (3T) +for information on how to do this. +.PP +\fB%s: Must set "PlanarConfiguration" before writing data\fP. +The organization of data has not be defined before the first write. +See +.IR TIFFSetField (3T) +for information on how to do this. +.PP +\fB%s: No space for tile arrays"\fP. +There was not enough space for the arrays that hold tile +offsets and byte counts. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFWriteTile (3T), +.IR TIFFWriteRawTile (3T) diff --git a/man/TIFFWriteRawStrip.3t b/man/TIFFWriteRawStrip.3t new file mode 100755 index 0000000..4e497ea --- /dev/null +++ b/man/TIFFWriteRawStrip.3t @@ -0,0 +1,94 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFWriteRawStrip.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFWriteRawstrip 3T "October 15, 1995" +.SH NAME +TIFFWriteRawStrip \- write a strip of raw data to an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "tsize_t TIFFWriteRawStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size)" +.SH DESCRIPTION +Append +.I size +bytes of raw data to the specified strip. +.SH NOTES +The strip number must be valid according to the current settings +of the +.I ImageLength +and +.I RowsPerStrip +tags. +An image may be dynamically grown by increasing the value of +.I ImageLength +prior to each call to +.IR TIFFWriteRawStrip . +.SH "RETURN VALUES" +\-1 is returned if an error occurred. +Otherwise, the value of +.IR size +is returned. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +\fB%s: File not open for writing\fP. +The file was opened for reading, not writing. +.PP +\fBCan not write scanlines to a tiled image\fP. +The image is assumed to be organized in tiles because the +.I TileWidth +and +.I TileLength +tags have been set with +.IR TIFFSetField (3T). +.PP +\fB%s: Must set "ImageWidth" before writing data\fP. +The image's width has not be set before the first write. +See +.IR TIFFSetField (3T) +for information on how to do this. +.PP +\fB%s: Must set "PlanarConfiguration" before writing data\fP. +The organization of data has not be defined before the first write. +See +.IR TIFFSetField (3T) +for information on how to do this. +.PP +\fB%s: No space for strip arrays"\fP. +There was not enough space for the arrays that hold strip +offsets and byte counts. +.PP +\fB%s: Strip %d out of range, max %d\fP. +The specified strip is not a valid strip according to the +currently specified image dimensions. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFWriteEncodedStrip (3T), +.IR TIFFWriteScanline (3T) diff --git a/man/TIFFWriteRawTile.3t b/man/TIFFWriteRawTile.3t new file mode 100755 index 0000000..127a40a --- /dev/null +++ b/man/TIFFWriteRawTile.3t @@ -0,0 +1,83 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFWriteRawTile.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFWriteRawtile 3T "December 16, 1991" +.SH NAME +TIFFWriteRawTile \- write a tile of raw data to an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "tsize_t TIFFWriteRawTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size)" +.SH DESCRIPTION +Append +.I size +bytes of raw data to the specified tile. +.SH "RETURN VALUES" +\-1 is returned if an error occurred. +Otherwise, the value of +.IR size +is returned. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +\fB%s: File not open for writing\fP. +The file was opened for reading, not writing. +.PP +\fBCan not write tiles to a stripped image\fP. +The image is assumed to be organized in strips because neither of the +.I TileWidth +or +.I TileLength +tags have been set with +.IR TIFFSetField (3T). +.PP +\fB%s: Must set "ImageWidth" before writing data\fP. +The image's width has not be set before the first write. +See +.IR TIFFSetField (3T) +for information on how to do this. +.PP +\fB%s: Must set "PlanarConfiguration" before writing data\fP. +The organization of data has not be defined before the first write. +See +.IR TIFFSetField (3T) +for information on how to do this. +.PP +\fB%s: No space for tile arrays"\fP. +There was not enough space for the arrays that hold tile +offsets and byte counts. +.PP +\fB%s: Specified tile %d out of range, max %d\fP. +The specified tile is not valid according to the currently +specified image dimensions. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFWriteEncodedTile (3T), +.IR TIFFWriteScanline (3T) diff --git a/man/TIFFWriteScanline.3t b/man/TIFFWriteScanline.3t new file mode 100755 index 0000000..f3c4cfb --- /dev/null +++ b/man/TIFFWriteScanline.3t @@ -0,0 +1,162 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFWriteScanline.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFWriteScanline 3T "December 16, 1991" +.SH NAME +TIFFWriteScanline \- write a scanline to an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "int TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample)" +.SH DESCRIPTION +Write data to a file at the specified row. +The +.I sample +parameter is used only if data are organized in separate planes (\c +.IR PlanarConfiguration =2). +The data are assumed to be uncompressed and in the native +bit- and byte-order of the host machine. +The data written to the file is +compressed according to the compression scheme +of the current +.SM TIFF +directory (see further below). +If the current scanline is past the end of the current subfile, the +.I ImageLength +field is automatically increased to include the scanline (except +for +.IR PlanarConfiguration =2, +where the +.I ImageLength +cannot be changed once the first data are written). +If the +.I ImageLength +is increased, the +.I StripOffsets +and +.I StripByteCounts +fields are similarly enlarged to reflect data written past the +previous end of image. +.SH NOTES +The library writes encoded data using the native machine byte order. +Correctly implemented +.SM TIFF +readers are expected to do any necessary byte-swapping to +correctly process image data with BitsPerSample greater than 8. +The library attempts to hide bit-ordering differences +between the image and the native machine by converting data +from the native machine order. +.PP +In C++ the +.I sample +parameter defaults to 0. +.PP +Once data are written to a file for the current directory, +the values of certain tags may not be altered; see +.IR TIFFSetField (3T) +for more information. +.PP +It is not possible to write scanlines to a file that +uses a tiled organization. The routine +.IR TIFFIsTiled +can be used to determine if the file is organized +as tiles or strips. +.SH "RETURN VALUES" +.IR TIFFWriteScanline +returns \-1 if it immediately detects an error +and 1 for a successful write. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.PP +.BR "%s: File not open for writing . +The file was opened for reading, not writing. +.PP +.BR "Can not write scanlines to a tiled image" . +An attempt was made to write a scanline to a tiled image. +The image is assumed to be organized in tiles because the +.I TileWidth +and +.I TileLength +tags have been set with +.IR TIFFSetField (3T). +.PP +.BR "Compression algorithm does not support random access" . +Data was written in a non-sequential order to a file that +uses a compression algorithm and that has +.I RowsPerStrip +greater than one. +That is, data in the image is to be stored in a compressed form, +and with multiple rows packed into a strip. +In this case, the library does not support random access to the data. +The data should either be written as entire strips, +sequentially by rows, or the value of +.I RowsPerStrip +should be set to one. +.PP +\fB%s: Must set "ImageWidth" before writing data\fP. +The image's width has not be set before the first write. +See +.IR TIFFSetField (3T) +for information on how to do this. +.PP +\fB%s: Must set "PlanarConfiguration" before writing data\fP. +The organization of data has not be defined before the first write. +See +.IR TIFFSetField (3T) +for information on how to do this. +.PP +\fBCan not change "ImageLength" when using separate planes\fP. +Separate image planes are being used (\c +.IR PlanarConfiguration =2), +but the number of rows has not been specified before the first write. +The library supports the dynamic growth of an image only when data +are organized in a contiguous manner (\c +.IR PlanarConfiguration =1). +.PP +.BR "%d: Sample out of range, max %d" . +The +.I sample +parameter was greater than the value of the SamplesPerPixel tag. +.PP +.BR "%s: No space for strip arrays . +There was not enough space for the arrays that hold strip +offsets and byte counts. +.SH BUGS +Writing subsampled YCbCR data does not work correctly +because, for +.IR PlanarConfiguration =2 +the size of a scanline is not calculated on a per-sample basis, +and for +.IR PlanarConfiguration =1 +the library does not pack the block-interleaved samples. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFWriteEncodedStrip (3T), +.IR TIFFWriteRawStrip (3T) diff --git a/man/TIFFWriteTile.3t b/man/TIFFWriteTile.3t new file mode 100755 index 0000000..4b5dbba --- /dev/null +++ b/man/TIFFWriteTile.3t @@ -0,0 +1,77 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFWriteTile.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFWriteTile 3T "November 29, 1999" +.SH NAME +TIFFWriteTile \- encode and write a tile of data to an open +.SM TIFF +file +.SH SYNOPSIS +.B "#include " +.br +.B "tsize_t TIFFWriteTile(TIFF* tif, tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t sample)" +.SH DESCRIPTION +Write the data for the tile +.I containing +the specified coordinates. +The data in +.I buf +are is (potentially) compressed, and written to the indicated file, normally +being appended to the end of the file. +The buffer must be contain an entire tile of data. +Applications should call the routine +.IR TIFFTileSize +to find out the size (in bytes) of a tile buffer. +The +.I x +and +.I y +parameters are always used by +.IR TIFFWriteTile . +The +.I z +parameter is used if the image is deeper than 1 slice (\c +.IR ImageDepth >1). +The +.I sample +parameter is used only if data are organized in separate planes (\c +.IR PlanarConfiguration =2). +.SH "RETURN VALUES" +.IR TIFFWriteTile +returns \-1 if it detects an error; otherwise the number of +bytes in the tile is returned. +.SH DIAGNOSTICS +All error messages are directed to the +.IR TIFFError (3T) +routine. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFCheckTile (3T), +.IR TIFFComputeTile (3T), +.IR TIFFOpen (3T), +.IR TIFFReadTile (3T), +.IR TIFFWriteScanline (3T), +.IR TIFFWriteEncodedTile (3T), +.IR TIFFWriteRawTile (3T) diff --git a/man/TIFFbuffer.3t b/man/TIFFbuffer.3t new file mode 100755 index 0000000..fe19c08 --- /dev/null +++ b/man/TIFFbuffer.3t @@ -0,0 +1,77 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFbuffer.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1995 Sam Leffler +.\" Copyright (c) 1995 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFBUFFER 3T "October 15, 1995" +.SH NAME +TIFFReadBufferSetup, +TIFFWriteBufferSetup +\- I/O buffering control routines +.SH SYNOPSIS +.nf +.B "#include " +.B "int TIFFReadBufferSetup(TIFF*, tdata_t buffer, tsize_t size);" +.B "int TIFFWriteBufferSetup(TIFF*, tdata_t buffer, tsize_t size);" +.fi +.SH DESCRIPTION +The following routines are provided for client-control of the +I/O buffers used by the library. +Applications need never use these routines; they are provided only +for ``intelligent clients'' that wish to optimize memory usage and/or +eliminate potential copy operations that can occur when working with +images that have data stored without compression. +.PP +.I TIFFReadBufferSetup +sets up the data buffer used to read raw (encoded) data from a file. +If the specified pointer is +.SM NULL +(zero), then a buffer of the appropriate size is allocated. +Otherwise the caller must guarantee that the buffer is large +enough to hold any individual strip of raw data. +.I TIFFReadBufferSetup +returns a non-zero value if the setup was successful and zero otherwise. +.PP +.I TIFFWriteBufferSetup +sets up the data buffer used to write raw (encoded) data to a file. +If the specified +.I size +is \-1 then the buffer size is selected to hold a complete +tile or strip, or at least 8 kilobytes, whichever is greater. +If the specified +.I buffer +is +.SM NULL +(zero), then a buffer of the appropriate size is dynamically allocated. +.I TIFFWriteBufferSetup +returns a non-zero value if the setup was successful and zero otherwise. +.SH DIAGNOSTICS +.BR "%s: No space for data buffer at scanline %ld" . +.I TIFFReadBufferSetup +was unable to dynamically allocate space for a data buffer. +.PP +.BR "%s: No space for output buffer" . +.I TIFFWriteBufferSetup +was unable to dynamically allocate space for a data buffer. +.SH "SEE ALSO" +.IR libtiff (3T) diff --git a/man/TIFFcodec.3t b/man/TIFFcodec.3t new file mode 100755 index 0000000..a0c5d54 --- /dev/null +++ b/man/TIFFcodec.3t @@ -0,0 +1,73 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFcodec.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1995 Sam Leffler +.\" Copyright (c) 1995 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH CODEC 3T "October 15, 1995" +.SH NAME +TIFFFindCODEC, TIFFRegisterCODEC, TIFFUnRegisterCODEC \- codec-related utility routines +.SH SYNOPSIS +.B "#include " +.br +.B "const TIFFCodec* TIFFFindCODEC(uint16 scheme);" +.br +.B "TIFFCodec* TIFFRegisterCODEC(uint16 scheme, const char* method, TIFFInitMethod init);" +.br +.B "void TIFFUnRegisterCODEC(TIFFCodec* codec);" +.SH DESCRIPTION +.I libtiff +supports a variety of compression schemes implemented by software +.IR codecs . +Each codec adheres to a modular interface that provides for +the decoding and encoding of image data; as well as some other +methods for initialization, setup, cleanup, and the control +of default strip and tile sizes. +Codecs are identified by the associated value of the +.SM TIFF +.I Compression +tag; e.g. 5 for +.SM LZW +compression. +.PP +The +.I TIFFRegisterCODEC +routine can be used to +augment or override the set of codecs available to an application. +If the specified +.I scheme +already has a registered codec then it is +.I overridden +and any images with data encoded with this +compression scheme will be decoded using the supplied coded. +.SH DIAGNOSTICS +.BR "No space to register compression scheme %s" . +.I TIFFRegisterCODEC +was unable to allocate memory for the data structures needed +to register a codec. +.PP +.BR "Cannot remove compression scheme %s; not registered" . +.I TIFFUnRegisterCODEC +did not locate the specified codec in the table of registered +compression schemes. +.SH "SEE ALSO" +.IR libtiff (3T) diff --git a/man/TIFFmemory.3t b/man/TIFFmemory.3t new file mode 100755 index 0000000..0588e1c --- /dev/null +++ b/man/TIFFmemory.3t @@ -0,0 +1,84 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFmemory.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1995 Sam Leffler +.\" Copyright (c) 1995 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH MEMORY 3T "October 15, 1995" +.SH NAME +_TIFFmalloc, \c +_TIFFrealloc, \c +_TIFFfree, \c +_TIFFmemset, \c +_TIFFmemcpy, \c +_TIFFmemcmp, \c +\- memory management-related functions for use with +.SM TIFF +files +.SH SYNOPSIS +.nf +.B "#include " +.B "tdata_t _TIFFmalloc(tsize_t);" +.B "tdata_t _TIFFrealloc(tdata_t, tsize_t);" +.B "void _TIFFfree(tdata_t);" +.B "void _TIFFmemset(tdata_t, int, tsize_t);" +.B "void _TIFFmemcpy(tdata_t, const tdata_t, tsize_t);" +.B "int _TIFFmemcmp(const tdata_t, const tdata_t, tsize_t);" +.fi +.SH DESCRIPTION +These routines are provided for writing portable software that uses +.IR libtiff ; +they hide any memory-management related issues, such as dealing with +segmented architectures found on 16-bit machines. +.PP +.I _TIFFmalloc +and +.I _TIFFrealloc +are used to dynamically allocate and reallocate memory used by +.IR libtiff ; +such as memory passed into the I/O routines. +Memory allocated through these interfaces is released back to the +system using the +.I _TIFFfree +routine. +.PP +Memory allocated through one of the above interfaces can be set to +a known value using +.IR _TIFFmemset , +copied to another memory location using +.IR _TIFFmemcpy , +or compared for equality using +.IR _TIFFmemcmp . +These routines conform to the equivalent +.SM ANSI +C routines: +.IR memset , +.IR memcpy , +and +.IR memcmp , +repsectively. +.SH DIAGNOSTICS +None. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR malloc (3C), +.IR memory (3C) diff --git a/man/TIFFquery.3t b/man/TIFFquery.3t new file mode 100755 index 0000000..3c186c7 --- /dev/null +++ b/man/TIFFquery.3t @@ -0,0 +1,137 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFquery.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH QUERY 3T "October 15, 1995" +.SH NAME +TIFFCurrentRow, +TIFFCurrentStrip, +TIFFCurrentTile, +TIFFCurrentDirectory, +TIFFLastDirectory, +TIFFFileno, +TIFFFileName, +TIFFGetMode, +TIFFIsTiled, +TIFFIsByteSwapped, +TIFFIsUpSampled, +TIFFIsMSB2LSB +\- query routines +.SH SYNOPSIS +.nf +.B "#include " +.B "uint32 TIFFCurrentRow(TIFF* tif)" +.B "tstrip_t TIFFCurrentStrip(TIFF* tif)" +.B "ttile_t TIFFCurrentTile(TIFF* tif)" +.B "tdir_t TIFFCurrentDirectory(TIFF* tif)" +.B "int TIFFLastDirectory(TIFF* tif)" +.B "int TIFFFileno(TIFF* tif)" +.B "char* TIFFFileName(TIFF* tif)" +.B "int TIFFGetMode(TIFF* tif)" +.B "int TIFFIsTiled(TIFF* tif)" +.B "int TIFFIsByteSwapped(TIFF* tif)" +.B "int TIFFIsUpSampled(TIFF* tif)" +.B "int TIFFIsMSB2LSB(TIFF* tif)" +.B "const char* TIFFGetVersion(void)" +.fi +.SH DESCRIPTION +The following routines return status information about an open +.SM TIFF +file. +.PP +.IR TIFFCurrentDirectory +returns the index of the current directory (directories +are numbered starting at 0). +This number is suitable for use with the +.IR TIFFSetDirectory +routine. +.PP +.IR TIFFLastDirectory +returns a non-zero value if the current directory is the +last directory in the file; +otherwise zero is returned. +.PP +.IR TIFFCurrentRow , +.IR TIFFCurrentStrip , +and +.IR TIFFCurrentTile , +return the current row, strip, and tile, respectively, +that is being read or written. +These values are updated each time a read or write is done. +.PP +.IR TIFFFileno +returns the underlying file descriptor used to access the +.SM TIFF +image in the filesystem. +.PP +.IR TIFFFileName +returns the pathname argument passed to +.IR TIFFOpen +or +.IR TIFFFdOpen . +.PP +.IR TIFFGetMode +returns the mode with which the underlying file was opened. +On +.SM UNIX +systems, this is the value passed to the +.IR open (2) +system call. +.PP +.IR TIFFIsTiled +returns a non-zero value if the image data has +a tiled organization. +Zero is returned if the image data is organized in strips. +.PP +.IR TIFFIsByteSwapped +returns a non-zero value if the image data was in a different +byte-order than the host machine. +Zero is returned if the TIFF file and local host byte-orders +are the same. Note that TIFFReadTile(), TIFFReadStrip() and +TIFFReadScanline() functions already normally perform byte +swapping to local host order if needed. +.PP +.I TIFFIsUpSampled +returns a non-zero value if image data returned through the +read interface routines is being up-sampled. +This can be useful to applications that want to calculate +I/O buffer sizes to reflect this usage (though the usual +strip and tile size routines already do this). +.PP +.I TIFFIsMSB2LSB +returns a non-zero value if the image data is being returned with +bit 0 as the most significant bit. +.PP +.IR TIFFGetVersion +returns an +.SM ASCII +string that has a version stamp for the +.SM TIFF +library software. +.SH DIAGNOSTICS +None. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFFdOpen (3T) diff --git a/man/TIFFsize.3t b/man/TIFFsize.3t new file mode 100755 index 0000000..efc395a --- /dev/null +++ b/man/TIFFsize.3t @@ -0,0 +1,57 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFsize.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFSIZE 3T "October 15, 1995" +.SH NAME +TIFFScanlineSize, +TIFFRasterScanlineSize, +\- return the size of various items associated with an open +.SM TIFF +file +.SH SYNOPSIS +.nf +.B "#include " +.B "tsize_t TIFFRasterScanlineSize(TIFF* tif)" +.B "tsize_t TIFFScanlineSize(TIFF* tif)" +.SH DESCRIPTION +.I TIFFScanlineSize +returns the size in bytes of a row of data as it would be +returned in a call to +.IR TIFFReadScanline , +or as it would be expected in a call to +.IR TIFFWriteScanline . +.PP +.I TIFFRasterScanlineSize +returns the size in bytes of a complete decoded and packed +raster scanline. +Note that this value may be different from the value returned by +.I TIFFScanlineSize +if data is stored as separate planes. +.SH DIAGNOSTICS +None. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFOpen (3T), +.IR TIFFReadScanline (3T) diff --git a/man/TIFFstrip.3t b/man/TIFFstrip.3t new file mode 100755 index 0000000..5ddb1e1 --- /dev/null +++ b/man/TIFFstrip.3t @@ -0,0 +1,96 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFstrip.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1992-1997 Sam Leffler +.\" Copyright (c) 1992-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFSTRIP 3T "October 15, 1995" +.SH NAME +TIFFDefaultStripSize, +TIFFStripSize, +TIFFVStripSize, +TIFFComputeStrip, +TIFFNumberOfStrips +\- strip-related utility routines +.SH SYNOPSIS +.nf +.B "#include " +.B "uint32 TIFFDefaultStripSize(TIFF* tif, uint32 estimate)" +.B "tsize_t TIFFStripSize(TIFF* tif)" +.B "tsize_t TIFFVStripSize(TIFF* tif, uint32 nrows)" +.B "tstrip_t TIFFComputeStrip(TIFF* tif, uint32 row, tsample_t sample)" +.B "tstrip_t TIFFNumberOfStrips(TIFF* tif)" +.fi +.SH DESCRIPTION +.I TIFFDefaultStripSize +returns the number of rows for a reasonable-sized strip according +to the current settings of the +.IR ImageWidth , +.IR BitsPerSample , +.IR SamplesPerPixel , +tags and any compression-specific requirements. +If the +.I estimate +parameter, if non-zero, then it is taken as an estimate of the desired +strip size and adjusted according to any compression-specific requirements. +The value returned by this function is typically used to define the +.I RowsPerStrip +tag. +In lieu of any unusual requirements +.I TIFFDefaultStripSize +tries to create strips that have approximately +8 kilobytes of uncompressed data. +.PP +.IR TIFFStripSize +returns the equivalent size for a strip of data as it would +be returned in a call to +.IR TIFFReadEncodedStrip +or as it would be expected in a call to +.IR TIFFWriteEncodedStrip . +.PP +.I TIFFVStripSize +returns the number of bytes in a strip with +.I nrows +rows of data. +.PP +.IR TIFFComputeStrip +returns the strip that contains the specified coordinates. +A valid strip is always returned; +out-of-range coordinate values are clamped to the bounds of the image. +The +.I row +parameter is always used in calculating a strip. +The +.I sample +parameter is used only if data are organized in separate planes (\c +.IR PlanarConfiguration =2). +.PP +.IR TIFFNumberOfStrips +returns the number of strips in the image. +.SH DIAGNOSTICS +None. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFReadEncodedStrip (3T), +.IR TIFFReadRawStrip (3T), +.IR TIFFWriteEncodedStrip (3T), +.IR TIFFWriteRawStrip (3T) diff --git a/man/TIFFswab.3t b/man/TIFFswab.3t new file mode 100755 index 0000000..0942836 --- /dev/null +++ b/man/TIFFswab.3t @@ -0,0 +1,73 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFswab.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH SWAB 3T "December 16, 1991" +.SH NAME +TIFFReverseBits, TIFFSwabShort, TIFFSwabLong, TIFFSwabArrayOfShort, TIFFSwabArrayOfLong \- byte- and bit-swapping routines +.SH SYNOPSIS +.B "#include " +.br +.B "const unsigned char* TIFFGetBitRevTable(int reversed);" +.br +.B "void TIFFReverseBits(u_char* data, unsigned long nbytes)" +.br +.B "void TIFFSwabShort(uint16* data)" +.br +.B "void TIFFSwabLong(uint32* data)" +.br +.B "void TIFFSwabArrayOfShort(uint16* data, unsigned long nshorts)" +.br +.B "void TIFFSwabArrayOfLong(uint32* data, unsigned long nlongs)" +.SH DESCRIPTION +The following routines are used by the library to swap +16- and 32-bit data and to reverse the order of bits in bytes. +.PP +.IR TIFFSwabShort +and +.IR TIFFSwabLong +swap the bytes in a single 16-bit and 32-bit item, respectively. +.IR TIFFSwabArrayOfShort +and +.IR TIFFSwabArrayOfLong +swap the bytes in an array of 16-bit and 32-bit items, respectively. +.PP +.IR TIFFReverseBits +replaces each byte in +.I data +with the equivalent bit-reversed value. +This operation is done with a lookup table, +.I TIFFBitRevTable +which is declared public. +A second table, +.I TIFFNoBitRevTable +is also declared public; it is a lookup table that +can be used as an +.IR "identity function" ; +i.e. +.IR "TIFFNoBitRevTable[n] == n" . +.SH DIAGNOSTICS +None. +.SH "SEE ALSO" +.IR libtiff (3T), diff --git a/man/TIFFtile.3t b/man/TIFFtile.3t new file mode 100755 index 0000000..fa0dd8f --- /dev/null +++ b/man/TIFFtile.3t @@ -0,0 +1,134 @@ +.\" $Header: /home/cvsroot/libtiff/man/TIFFtile.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFTILE 3T "February 14, 1992" +.SH NAME +TIFFTileSize, +TIFFTileRowSize, +TIFFVTileSize, +TIFFDefaultTileSize, +TIFFComputeTile, +TIFFCheckTile, +TIFFNumberOfTiles +\- tile-related utility routines +.SH SYNOPSIS +.nf +.B "#include " +.B "void TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th)" +.B "tsize_t TIFFTileSize(TIFF* tif)" +.B "tsize_t TIFFTileRowSize(TIFF* tif)" +.B "tsize_t TIFFVTileSize(TIFF* tif, uint32 nrows)" +.B "ttile_t TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t sample)" +.B "int TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t sample)" +.B "ttile_t TIFFNumberOfTiles(TIFF* tif)" +.fi +.SH DESCRIPTION +.I TIFFDefaultTileSize +returns the pixel width and height of a reasonable-sized tile; +suitable for setting up the +.I TileWidth +and +.I TileLength +tags. +If the +.I tw +and +.I th +values passed in are non-zero, then they are adjusted to reflect +any compression-specific requirements. +The returned width and height are constrained to be a multiple +of 16 pixels to conform with the +.SM TIFF +specification. +.PP +.I TIFFTileSize +returns the equivalent size for a tile of data as it would +be returned in a call to +.I TIFFReadTile +or as it would be expected in a call to +.IR TIFFWriteTile . +.PP +.I TIFFVTileSize +returns the number of bytes in a row-aligned tile with +.I nrows +of data. +.PP +.I TIFFTileRowSize +returns the number of bytes of a row of data in a tile. +.PP +.IR TIFFComputeTile +returns the tile that contains the specified coordinates. +A valid tile is always returned; +out-of-range coordinate values are clamped to the bounds of the image. +The +.I x +and +.I y +parameters are always used in calculating a tile. +The +.I z +parameter is used if the image is deeper than 1 slice (\c +.IR ImageDepth >1). +The +.I sample +parameter is used only if data are organized in separate planes (\c +.IR PlanarConfiguration =2). +.PP +.IR TIFFCheckTile +returns a non-zero value if the supplied coordinates are +within the bounds of the image and zero otherwise. +The +.I x +parameter is checked against the value of the +.I ImageWidth +tag. +The +.I y +parameter is checked against the value of the +.I ImageLength +tag. +The +.I z +parameter is checked against the value of the +.I ImageDepth +tag (if defined). +The +.I sample +parameter is checked against the value of the +.I SamplesPerPixel +parameter if the data are organized in separate planes. +.PP +.IR TIFFNumberOfTiles +returns the number of tiles in the image. +.SH DIAGNOSTICS +None. +.SH "SEE ALSO" +.IR libtiff (3T), +.IR TIFFReadEncodedTile (3T), +.IR TIFFReadRawTile (3T), +.IR TIFFReadTile (3T), +.IR TIFFWriteEncodedTile (3T), +.IR TIFFWriteRawTile (3T), +.IR TIFFWriteTile (3T) diff --git a/man/fax2ps.1 b/man/fax2ps.1 new file mode 100755 index 0000000..512fb93 --- /dev/null +++ b/man/fax2ps.1 @@ -0,0 +1,158 @@ +.\" $Header: /home/cvsroot/libtiff/man/fax2ps.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1991-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2 +.TH FAX2PS 1 "March 16, 1995" +.SH NAME +fax2ps \- convert a +.SM TIFF +facsimile to compressed \*(Ps\(tm +.SH SYNOPSIS +.B fax2ps +[ +.I options +] [ +.IR file ... +] +.SH DESCRIPTION +.I fax2ps +reads one or more +.SM TIFF +facsimile image files and prints a compressed form of +\*(Ps on the standard output that is suitable for printing. +.PP +By default, each page is scaled to reflect the +image dimensions and resolutions stored in the file. +The +.B \-x +and +.B \-y +options can be used to specify the horizontal and vertical +image resolutions (lines/inch), respectively. +If the +.B \-S +option is specified, each page is scaled to fill an output page. +The default output page is 8.5 by 11 inches. +Alternate page dimensions can be specified in inches with the +.B \-W +and +.B \-H +options. +.PP +By default +.I fax2ps +generates \*(Ps for all pages in the file. +The +.B \-p +option can be used to select one or more pages from +a multi-page document. +.PP +.I fax2ps +generates a compressed form of \*(Ps that is +optimized for sending pages of text to a \*(Ps +printer attached to a host through a low-speed link (such +as a serial line). +Each output page is filled with white and then only +the black areas are drawn. +The \*(Ps specification of the black drawing operations +is optimized by using a special font that encodes the +move-draw operations required to fill +the black regions on the page. +This compression scheme typically results in a substantially +reduced \*(Ps description, relative to the straightforward +imaging of the page with a \*(Ps +.I image +operator. +This algorithm can, however, be ineffective +for continuous-tone and white-on-black images. +For these images, it sometimes is more efficient to send +the raster bitmap image directly; see +.IR tiff2ps (1). +.SH OPTIONS +.TP 10 +.BI \-p " number" +Print only the indicated page. +Multiple pages may be printed by specifying +this option more than once. +.TP 10 +.BI \-x " resolution" +Use +.I resolution +as the horizontal resolution, in dots/inch, of the image data. +By default this value is taken from the file. +.TP 10 +.BI \-y " resolution" +Use +.I resolution +as the vertical resolution, in lines/inch, of the image data. +By default this value is taken from the file. +.TP 10 +.B \-S +Scale each page of image data to fill the output page dimensions. +By default images are presented according to the dimension +information recorded in the +.SM TIFF +file. +.TP 10 +.BI \-W " width" +Use +.I width +as the width, in inches, of the output page. +The default page width is 8.5 inches. +.TP 10 +.BI \-H " height" +Use +.I height +as the height, in inches, of the output page. +The default page height is 11 inches. +.SH DIAGNOSTICS +Some messages about malformed +.SM TIFF +images come from the +.SM TIFF +library. +.PP +Various messages about badly formatted facsimile images +may be generated due to transmission errors in received +facsimile. +.I fax2ps +attempts to recover from such data errors by resynchronizing +decoding at the end of the current scanline. +This can result in long horizontal black lines in the resultant +\*(Ps image. +.SH NOTES +If the destination printer supports \*(Ps Level II then +it is always faster to just send the encoded bitmap generated +by the +.IR tiff2ps (1) +program. +.SH BUGS +.I fax2ps +should probably figure out when it is doing a poor +job of compressing the output and just generate +\*(Ps to image the bitmap raster instead. +.SH "SEE ALSO" +.IR tiff2ps (1), +.IR libtiff (3) diff --git a/man/fax2tiff.1 b/man/fax2tiff.1 new file mode 100755 index 0000000..c7a8d51 --- /dev/null +++ b/man/fax2tiff.1 @@ -0,0 +1,205 @@ +.\" $Header: /home/cvsroot/libtiff/man/fax2tiff.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1990-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH FAX2TIFF 1 "September 24, 1994" +.SH NAME +fax2tiff \- create a +.SM TIFF +Class F fax file from raw fax data +.SH SYNOPSIS +.B fax2tiff +[ +.I options +] [ +.B \-o +.I output.tif +] +.I input.g3 +.SH DESCRIPTION +.I Fax2tiff +creates a +.SM TIFF +file containing +.SM CCITT +Group 3 or Group 4 encoded data from one or more files containing ``raw'' +Group 3 encoded data (typically obtained directly from a fax modem). +By default, each row of data in the resultant +.SM TIFF +file is 2-dimensionally encoded and +padded or truncated to 1728 pixels, as needed. +The resultant image is a set of low resolution (98 lines/inch) +or medium resolution (196 lines/inch) +pages, each of which is a single strip of data. +The generated file conforms to the +.SM TIFF +Class F (\c +.SM FAX\c +) specification for storing facsimile data. +This means, in particular, that each page of the data does +.B not +include the trailing +.I "return to control" +(\c +.SM RTC\c +) code; as required +for transmission by the +.SM CCITT +Group 3 specifications. +The old, ``classic'', format is created if the +.B \-c +option is used. +(The Class F format can also be requested with the +.B \-f +option.) +.PP +The default name of the output image is +.IR fax.tif ; +this can be changed with the +.B \-o +option. +Each input file is assumed to be a separate page of facsimile data +from the same document. +The order in which input files are specified on the command +line is the order in which the resultant pages appear in the +output file. +.SH OPTIONS +Options that affect the interpretation of input data are: +.TP +.B \-2 +Assume input data is 2-d Huffman encoded. +.TP +.B \-B +Assume input data was encoded with +black as 0 and white as 1. +.TP +.B \-L +Treat input data as having bits filled from least +significant bit (\c +.SM LSB\c +) to most significant bit (\c +.SM MSB\c +). +(This is the default.) +.TP +.B \-M +Treat input data as having bits filled from most +significant bit (\c +.SM MSB\c +) to most least bit (\c +.SM LSB\c +). +.TP +.B \-R +Specify the vertical resolution, in lines/inch, of the +input images. +By default input are assumed to have a vertical +resolution of 196 lines/inch. +If images are low resolution facsimile, a value of +98 lines/inch should be specified. +.TP +.B \-W +Assume input data was encoded with +black as 1 and white as 0. +(This is the default.) +.PP +Options that affect the output file format are: +.TP +.B \-1 +Force output to be compressed with the 1-dimensional +version of the +.SM CCITT +Group 3 Huffman encoding algorithm. +.TP +.B \-4 +Force output to be compressed with the +.SM CCITT +Group 4 Huffman encoding. +.TP +.B \-o +Specify the name of the output file. +.TP +.B \-p +Force the last bit of each +.I "End Of Line" +(\c +.SM EOL\c +) code to land on a byte boundary. +This ``zero padding'' will be reflected in the contents of the +.I Group3Options +tag of the resultant +.SM TIFF +file. +.TP +.B \-s +Stretch the input image vertically by writing each input row of +data twice to the output file. +.TP +.B \-v +Force +.I fax2tiff +to print the number of rows of data it retrieved from the input file. +.SH DIAGNOSTICS +The following warnings and errors come from the decoding +routines in the library. +.PP +.BR "Warning, %s: Premature EOL at scanline %d (x %d).\en" . +The input data had a row that was shorter than the expected value of 1728. +The row is padded with white. +.PP +.BR "%s: Premature EOF at scanline %d (x %d).\en" . +The decoder ran out of data in the middle of a scanline. +The resultant row is padded with white. +.PP +.BR "%s: Bad code word at row %d, x %d\en" . +An invalid Group 3 +.I code +was encountered while decoding the input file. +The row number and horizontal position is given. +The remainder of the input row is discarded, while +the corresponding output row is padded with white. +.PP +.BR "%s: Bad 2D code word at scanline %d.\en" . +An invalid Group 4 or 2D Group 3 +.I code +was encountered while decoding the input file. +The row number and horizontal position is given. +The remainder of the input row is discarded, while +the corresponding output row is padded with white. +.SH BUGS +Should not have the constant width 1728 built into it. +Input data are assumed to have a a ``top left'' orientation; +it should be possible to override this assumption +from the command line. +.SH "SEE ALSO" +.I "\s-1CCITT\s+1 Recommendation T.4" +(Standardization of Group 3 Facsimile Apparatus for Document Transmission). +.PP +.IR "The Spirit of TIFF Class F" , +an appendix to the TIFF 5.0 specification prepared by Cygnet Technologies. +.PP +.IR tiffinfo (1), +.IR tiffdither (1), +.IR tiffgt (1), +.IR libtiff (3). diff --git a/man/gif2tiff.1 b/man/gif2tiff.1 new file mode 100755 index 0000000..55729fe --- /dev/null +++ b/man/gif2tiff.1 @@ -0,0 +1,78 @@ +.\" $Header: /home/cvsroot/libtiff/man/gif2tiff.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1991-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH GIF2TIFF 1 "October 15, 1995" +.SH NAME +gif2tiff \- create a +.SM TIFF +file from a GIF87 format image file +.SH SYNOPSIS +.B gif2tiff +[ +.I options +] +.I input.gif +.I output.tif +.SH DESCRIPTION +.I Gif2tiff +converts a file in the GIF87 format to +.SM TIFF. +The +.SM TIFF +image is created as a palette image, with samples +compressed with the Lempel-Ziv & Welch algorithm (\c +.IR Compression =5). +These characteristics can overriden, or explicitly specified +with the options described below. +.SH OPTIONS +.TP +.B \-c +Specify a compression scheme to use when writing image data: +.B "\-c none" +for no compression, +.B "-c packbits" +for the PackBits compression algorithm, +.B "-c zip" +for the Deflate compression algorithm, +and +.B "\-c lzw" +for Lempel-Ziv & Welch (the default). +.TP +.B \-r +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +.SH NOTES +The program is based on Paul Haeberli's +.I fromgif +program which, in turn, is based on Marcel J.E. Mol's GIF reader. +.SH BUGS +Should have more options to control output format. +.SH "SEE ALSO" +.IR pal2rgb (1), +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiffmedian (1), +.IR libtiff (3) diff --git a/man/libtiff.3t b/man/libtiff.3t new file mode 100755 index 0000000..3c4c336 --- /dev/null +++ b/man/libtiff.3t @@ -0,0 +1,519 @@ +.\" $Header: /home/cvsroot/libtiff/man/libtiff.3t,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH INTRO 3T "August 21, 1997" +.SH NAME +libtiff \- introduction to +.IR libtiff , +a library for reading and writing +.SM TIFF +files +.SH SYNOPSIS +.B "#include " +.br +cc file.c +.B -ltiff +.SH DESCRIPTION +.I libtiff +is a library for reading and writing data files encoded with the +.I "Tag Image File" +format, Revision 6.0 (or revision 5.0 or revision 4.0). +This file format is suitable for archiving multi-color and +monochromatic image data. +.PP +The library supports several compression algorithms, as indicated +by the +.I Compression +field, including: +no compression (1), +.SM CCITT +1D Huffman compression (2), +.SM CCITT +Group 3 Facsimile compression (3), +.SM CCITT +Group 4 Facsimile compression (4), +Lempel-Ziv & Welch compression (5), +baseline JPEG compression (7), +word-aligned 1D Huffman compression (32771), +and +PackBits compression (32773). +In addition, several nonstandard compression algorithms are supported: +the 4-bit compression algorithm used +by the +.I ThunderScan +program (32809) (decompression only), +NeXT's 2-bit compression algorithm (32766) (decompression only), +an experimental LZ-style algorithm known as Deflate (32946), and +an experimental CIE LogLuv compression scheme designed for images +with high dynamic range (32845 for LogL and 32845 for LogLuv). +Directory information may be in either little- or big-endian byte +order\-byte swapping is automatically done by the library. +Data bit ordering may be either Most Significant Bit (\c +.SM MSB\c +) to Least Significant Bit (\c +.SM LSB\c +) or +.SM LSB +to +.SM MSB. +Finally, the library does not support files in which the +.IR BitsPerSample , +.IR Compression , +.IR MinSampleValue , +or +.IR MaxSampleValue +fields are defined differently on a per-sample basis +(in Rev. 6.0 the +.I Compression +tag is not defined on a per-sample basis, so this is immaterial). +.SH "DATA TYPES" +The library makes extensive use of C typedefs to promote portability. +Two sets of typedefs are used, one for communication with clients +of the library and one for internal data structures and parsing of the +.SM TIFF +format. +The following typedefs are exposed to users either through +function definitions or through parameters passed through the +varargs interfaces. +.in +.5i +.sp 5p +.ta +\w'typedef unsigned <\fIthing\fP> uint32; 'u +.nf +typedef unsigned short uint16; 16-bit unsigned integer +typedef unsigned <\fIthing\fP> uint32; 32-bit unsigned integer +.sp 5p +typedef unsigned int ttag_t; directory tag +typedef uint16 tdir_t; directory index +typedef uint16 tsample_t; sample number +typedef uint32 tstrip_t; strip number +typedef uint32 ttile_t; tile number +typedef int32 tsize_t; i/o size in bytes +typedef void* tdata_t; image data ref +typedef void* thandle_t; client data handle +typedef int32 toff_t; file offset +.fi +.sp 5p +.in -.5i +Note that +.IR tstrip_t , +.IR ttile_t , +and +.I tsize_t +are constrained to be no more than 32-bit quantities by +32-bit fields they are stored in in the +.SM TIFF +image. +Likewise +.I tsample_t +is limited by the 16-bit field used to store the +.I SamplesPerPixel +tag. +.I tdir_t +constrains the maximum number of +.SM IFDs +that may appear in an image and may be an arbitrary size (w/o penalty). +.I ttag_t +must be either int, unsigned int, pointer, or double because +the library uses a varargs interface and +.SM "ANSI C" +restricts the type of the parameter before an ellipsis to be a +promoted type. +.I toff_t +is defined as int32 because TIFF file offsets are (unsigned) 32-bit +quantities. +A signed value is used because some interfaces return \-1 on error. +Finally, note that user-specified data references are +passed as opaque handles and only cast at the lowest layers where +their type is presumed. +.SH "LIST OF ROUTINES" +The following routines are part of the library. +Consult specific manual pages for details on their operation. +The manual page names listed below are for systems +where the full function names can not be encoded in the filesystem; +on most systems doing ``man function-name'' will work. +.sp 5p +.nf +.ta \w'TIFFWriteEncodedStrip'u+2n +\w'Appears on Page'u+2n +\fIName\fP \fIAppears on Page\fP \fIDescription\fP +.sp 5p +TIFFCheckTile tile.3t very x,y,z,sample is within image +TIFFClientOpen open.3t open a file for reading or writing +TIFFClose close.3t close an open file +TIFFComputeStrip strip.3t return strip containing y,sample +TIFFComputeTile tile.3t return tile containing x,y,z,sample +TIFFCurrentDirectory query.3t return index of current directory +TIFFCurrentRow query.3t return index of current scanline +TIFFCurrentStrip query.3t return index of current strip +TIFFCurrentTile query.3t return index of current tile +TIFFError error.3t library error handler +TIFFFdOpen open.3t open a file for reading or writing +TIFFFileName query.3t return name of open file +TIFFFileno query.3t return open file descriptor +TIFFFlush flush.3t flush all pending writes +TIFFFlushData flush.3t flush pending data writes +TIFFGetBitRevTable swab.3t return bit reversal table +TIFFGetField getfield.3t return tag value in current directory +TIFFGetFieldDefaulted getfield.3t return tag value in current directory +TIFFGetMode query.3t return open file mode +TIFFGetVersion query.3t return library version string +TIFFIsTiled query.3t return true if image data is tiled +TIFFIsByteSwapped query.3t return true if image data is byte-swapped +TIFFNumberOfStrips strip.3t return number of strips in an image +TIFFNumberOfTiles tile.3t return number of tiles in an image +TIFFOpen open.3t open a file for reading or writing +TIFFPrintDirectory print.3t print description of the current directory +TIFFReadBufferSetup rdbuf.3t specify i/o buffer for reading +TIFFReadDirectory readdir.3t read the next directory +TIFFReadEncodedStrip rdestrip.3t read and decode a strip of data +TIFFReadEncodedTile rdetile.3t read and decode a tile of data +TIFFReadRawStrip rdrstrip.3t read a raw strip of data +TIFFReadRawTile rdrtile.3t read a raw tile of data +TIFFReadRGBAImage rdimage.3t read an image into a fixed format raster +TIFFReadScanline readline.3t read and decode a row of data +TIFFReadTile readtile.3t read and decode a tile of data +TIFFReverseBits swab.3t reverse bits in an array of bytes +TIFFRGBAImageBegin rgbaimage.3t setup decoder state for TIFFRGBAImageGet +TIFFRGBAImageEnd rgbaimage.3t release TIFFRGBAImage decoder state +TIFFRGBAImageGet rgbaimage.3t read and decode an image +TIFFRGBAImageOK rgbaimage.3t is image readable by TIFFRGBAImageGet +TIFFScanlineSize size.3t return size of a scanline +TIFFSetDirectory setdir.3t set the current directory +TIFFSetSubDirectory setdir.3t set the current directory +TIFFSetErrorHandler error.3t set error handler function +TIFFSetField setfield.3t set a tag's value in the current directory +TIFFSetWarningHandler error.3t set warning handler function +TIFFStripSize size.3t return size of a strip +TIFFSwabShort swab.3t swap bytes of short +TIFFSwabLong swab.3t swap bytes of long +TIFFSwabArrayOfShort swab.3t swap bytes of an array of shorts +TIFFSwabArrayOfLong swab.3t swap bytes of an array of longs +TIFFTileRowSize size.3t return size of a row in a tile +TIFFTileSize size.3t return size of a tile +TIFFVGetField getfield.3t return tag value in current directory +TIFFVGetFieldDefaulted getfield.3t return tag value in current directory +TIFFVSetField setfield.3t set a tag's value in the current directory +TIFFWarning warning.3t library warning handler +TIFFWriteDirectory writedir.3t write the current directory +TIFFWriteEncodedStrip wrestrip.3t compress and write a strip of data +TIFFWriteEncodedTile wretile.3t compress and write a tile of data +TIFFWriteRawStrip wrrstrip.3t write a raw strip of data +TIFFWriteRawTile wrrtile.3t write a raw tile of data +TIFFWriteScanline writeline.3t write a scanline of data +TIFFWriteTile wrrtile.3t compress and write a tile of data +.fi +.SH "TAG USAGE" +The table below lists the +.SM TIFF +tags that are recognized and handled by the library. +If no use is indicated in the table, then the library +reads and writes the tag, but does not use it internally. +Note that some tags are meaningful only when a particular +compression scheme is being used; e.g. +.I Group3Options +is only useful if +.I Compression +is set to +.SM CCITT +Group 3 encoding. +Tags of this sort are considered +.I codec-specific +tags and the library does not recognize them except when the +.I Compression +tag has been previously set to the relevant compression scheme. +.sp 5p +.nf +.ta \w'TIFFTAG_JPEGTABLESMODE'u+2n +\w'Value'u+2n +\w'R/W'u+2n +\fITag Name\fP \fIValue\fP \fIR/W\fP \fILibrary Use/Notes\fP +.sp 5p +.nf +Artist 315 R/W +BadFaxLines 326 R/W +BitsPerSample 258 R/W lots +CellLength 265 parsed but ignored +CellWidth 264 parsed but ignored +CleanFaxData 327 R/W +ColorMap 320 R/W +ColorResponseUnit 300 parsed but ignored +Compression 259 R/W choosing codec +ConsecutiveBadFaxLines 328 R/W +DataType 32996 R obsoleted by SampleFormat tag +DateTime 306 R/W +DocumentName 269 R/W +DotRange 336 R/W +ExtraSamples 338 R/W lots +FaxRecvParams 34908 R/W +FaxSubAddress 34909 R/W +FaxRecvTime 34910 R/W +FillOrder 266 R/W control bit order +FreeByteCounts 289 parsed but ignored +FreeOffsets 288 parsed but ignored +GrayResponseCurve 291 parsed but ignored +GrayResponseUnit 290 parsed but ignored +Group3Options 292 R/W used by Group 3 codec +Group4Options 293 R/W +HostComputer 316 R/W +ImageDepth 32997 R/W tile/strip calculations +ImageDescription 270 R/W +ImageLength 257 R/W lots +ImageWidth 256 R/W lots +InkNames 333 R/W +InkSet 332 R/W +JPEGTables 347 R/W used by JPEG codec +Make 271 R/W +Matteing 32995 R obsoleted by ExtraSamples tag +MaxSampleValue 281 R/W +MinSampleValue 280 R/W +Model 272 R/W +NewSubFileType 254 R/W called SubFileType in spec +NumberOfInks 334 R/W +Orientation 274 R/W +PageName 285 R/W +PageNumber 297 R/W +PhotometricInterpretation 262 R/W used by Group 3 and JPEG codecs +PlanarConfiguration 284 R/W data i/o +Predictor 317 R/W used by LZW and Deflate codecs +PrimaryChromacities 319 R/W +ReferenceBlackWhite 532 R/W +ResolutionUnit 296 R/W used by Group 3 codec +RowsPerStrip 278 R/W data i/o +SampleFormat 339 R/W +SamplesPerPixel 277 R/W lots +SMinSampleValue 340 R/W +SMaxSampleValue 341 R/W +Software 305 R/W +StoNits 37439 R/W +StripByteCounts 279 R/W data i/o +StripOffsets 273 R/W data i/o +SubFileType 255 R/W called OSubFileType in spec +TargetPrinter 337 R/W +Thresholding 263 R/W +TileByteCounts 324 R/W data i/o +TileDepth 32998 R/W tile/strip calculations +TileLength 323 R/W data i/o +TileOffsets 324 R/W data i/o +TileWidth 322 R/W data i/o +TransferFunction 301 R/W +WhitePoint 318 R/W +XPosition 286 R/W +XResolution 282 R/W +YCbCrCoefficients 529 R/W used by TIFFRGBAImage support +YCbCrPositioning 531 R/W tile/strip size calulcations +YCbCrSubsampling 530 R/W +YPosition 286 R/W +YResolution 283 R/W used by Group 3 codec +.SH "PSEUDO TAGS" +In addition to the normal +.SM TIFF +tags the library supports a collection of +tags whose values lie in a range outside the valid range of +.SM TIFF +tags. +These tags are termed +.I pseud-tags +and are used to control various codec-specific functions within the library. +The table below summarizes the defined pseudo-tags. +.sp 5p +.nf +.ta \w'TIFFTAG_JPEGTABLESMODE'u+2n +\w'Codec'u+2n +\w'R/W'u+2n +\fITag Name\fP \fICodec\fP \fIR/W\fP \fILibrary Use/Notes\fP +.sp 5p +.nf +TIFFTAG_FAXMODE G3 R/W general codec operation +TIFFTAG_FAXFILLFUNC G3/G4 R/W bitmap fill function +TIFFTAG_JPEGQUALITY JPEG R/W compression quality control +TIFFTAG_JPEGCOLORMODE JPEG R/W control colorspace conversions +TIFFTAG_JPEGTABLESMODE JPEG R/W control contents of \fIJPEGTables\fP tag +TIFFTAG_ZIPQUALITY Deflate R/W compression quality level +TIFFTAG_PIXARLOGDATAFMT PixarLog R/W user data format +TIFFTAG_PIXARLOGQUALITY PixarLog R/W compression quality level +TIFFTAG_SGILOGDATAFMT SGILog R/W user data format +.fi +.TP +.B TIFFTAG_FAXMODE +Control the operation of the Group 3 codec. +Possible values (independent bits that can be combined by +or'ing them together) are: +FAXMODE_CLASSIC +(enable old-style format in which the +.SM RTC +is written at the end of the last strip), +FAXMODE_NORTC +(opposite of +FAXMODE_CLASSIC; +also called +FAXMODE_CLASSF), +FAXMODE_NOEOL +(do not write +.SM EOL +codes at the start of each row of data), +FAXMODE_BYTEALIGN +(align each encoded row to an 8-bit boundary), +FAXMODE_WORDALIGN +(align each encoded row to an 16-bit boundary), +The default value is dependent on the compression scheme; this +pseudo-tag is used by the various G3 and G4 codecs to share code. +.TP +.B TIFFTAG_FAXFILLFUNC +Control the function used to convert arrays of black and white +runs to packed bit arrays. +This hook can be used to image decoded scanlines in multi-bit +depth rasters (e.g. for display in colormap mode) +or for other purposes. +The default value is a pointer to a builtin function that images +packed bilevel data. +.TP +.B TIFFTAG_IPTCNEWSPHOTO +Tag contaings image metadata per the IPTC newsphoto spec: Headline, +captioning, credit, etc... Used by most wire services. +.TP +.B TIFFTAG_PHOTOSHOP +Tag contains Photoshop captioning information and metadata. Photoshop +uses in parallel and redundantly alongside IPTCNEWSPHOTO information. +.TP +.B TIFFTAG_JPEGQUALITY +Control the compression quality level used in the baseline algorithm. +Note that quality levels are in the range 0-100 with a default value of 75. +.TP +.B TIFFTAG_JPEGCOLORMODE +Control whether or not conversion is done between +RGB and YCbCr colorspaces. +Possible values are: +JPEGCOLORMODE_RAW +(do not convert), and +JPEGCOLORMODE_RGB +(convert to/from RGB) +The default value is JPEGCOLORMODE_RAW. +.TP +.B TIFFTAG_JPEGTABLESMODE +Control the information written in the +.I JPEGTables +tag. +Possible values (independent bits that can be combined by +or'ing them together) are: +JPEGTABLESMODE_QUANT +(include quantization tables), +and +JPEGTABLESMODE_HUFF +(include Huffman encoding tables). +The default value is JPEGTABLESMODE_QUANT|JPEGTABLESMODE_HUFF. +.TP +.B TIFFTAG_ZIPQUALITY +Control the compression technique used by the Deflate codec. +Quality levels are in the range 1-9 with larger numbers yielding better +compression at the cost of more computation. +The default quality level is 6 which yields a good time-space tradeoff. +.TP +.B TIFFTAG_PIXARLOGDATAFMT +Control the format of user data passed +.I in +to the PixarLog codec when encoding and passed +.I out +from when decoding. +Possible values are: +PIXARLOGDATAFMT_8BIT +for 8-bit unsigned pixels, +PIXARLOGDATAFMT_8BITABGR +for 8-bit unsigned ABGR-ordered pixels, +PIXARLOGDATAFMT_11BITLOG +for 11-bit log-encoded raw data, +PIXARLOGDATAFMT_12BITPICIO +for 12-bit PICIO-compatible data, +PIXARLOGDATAFMT_16BIT +for 16-bit signed samples, +and +PIXARLOGDATAFMT_FLOAT +for 32-bit IEEE floating point samples. +.TP +.B TIFFTAG_PIXARLOGQUALITY +Control the compression technique used by the PixarLog codec. +This value is treated identically to TIFFTAG_ZIPQUALITY; see the +above description. +.TP +.B TIFFTAG_SGILOGDATAFMT +Control the format of client data passed +.I in +to the SGILog codec when encoding and passed +.I out +from when decoding. +Possible values are: +SGILOGDATAFMT_FLTXYZ +for converting between LogLuv and 32-bit IEEE floating valued XYZ pixels, +SGILOGDATAFMT_16BITLUV +for 16-bit encoded Luv pixels, +SGILOGDATAFMT_32BITRAW and SGILOGDATAFMT_24BITRAW +for no conversion of data, +SGILOGDATAFMT_8BITRGB +for returning 8-bit RGB data (valid only when decoding LogLuv-encoded data), +SGILOGDATAFMT_FLTY +for converting between LogL and 32-bit IEEE floating valued Y pixels, +SGILOGDATAFMT_16BITL +for 16-bit encoded L pixels, +and +SGILOGDATAFMT_8BITGRY +for returning 8-bit greyscale data +(valid only when decoding LogL-encoded data). +.SH DIAGNOSTICS +All error messages are directed through the +.IR TIFFError +routine. +By default messages are directed to +.B stderr +in the form: +.IR "module: message\en." +Warning messages are likewise directed through the +.IR TIFFWarning +routine. +.SH "SEE ALSO" +.IR fax2tiff (1), +.IR gif2tiff (1), +.IR pal2rgb (1), +.IR ppm2tiff (1), +.IR rgb2ycbcr (1), +.IR ras2tiff (1), +.IR sgi2tiff (1), +.IR tiff2bw (1), +.IR tiffdither (1), +.IR tiffdump (1), +.IR tiffcp (1), +.IR tiffcmp (1), +.IR tiffgt (1), +.IR tiffinfo (1), +.IR tiffmedian (1), +.IR tiffsplit (1), +.IR tiffsv (1), +.PP +.IR "Tag Image File Format Specification \(em Revision 6.0" , +an Aldus Technical Memorandum. +.PP +.IR "The Spirit of TIFF Class F" , +an appendix to the TIFF 5.0 specification prepared by Cygnet Technologies. +.SH BUGS +The library does not support multi-sample images +where some samples have different bits/sample. +.PP +The library does not support random access to compressed data +that is organized with more than one row per tile or strip. +The library discards unknown tags. +The library should do more validity checking of a directory's contents. diff --git a/man/pal2rgb.1 b/man/pal2rgb.1 new file mode 100755 index 0000000..70fa629 --- /dev/null +++ b/man/pal2rgb.1 @@ -0,0 +1,108 @@ +.\" $Header: /home/cvsroot/libtiff/man/pal2rgb.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1990-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH PAL2RGB 1 "October 15, 1995" +.SH NAME +pal2rgb \- convert a palette color +.SM TIFF +image to a full color image +.SH SYNOPSIS +.B pal2rgb +[ +.I options +] +.I input.tif +.I output.tif +.SH DESCRIPTION +.I Pal2rgb +converts a palette color +.SM TIFF +image to a full color image by +applying the colormap of the palette image to each sample +to generate a full color +.SM RGB +image. +.SH OPTIONS +Options that affect the interpretation of input data are: +.TP +.B \-C +This option overrides the default behaviour of +.I pal2rgb +in determining whether or not +colormap entries contain 16-bit or 8-bit values. +By default the colormap is inspected and +if no colormap entry greater than 255 is found, +the colormap is assumed to have only 8-bit values; otherwise +16-bit values (as required by the +.SM TIFF +specification) are assumed. +The +.B \-C +option can be used to explicitly specify the number of +bits for colormap entries: +.B "\-C 8" +for 8-bit values, +.B "\-C 16" +for 16-bit values. +.PP +Options that affect the output file format are: +.TP +.B \-p +Explicitly select the planar configuration used in organizing +data samples in the output image: +.B "\-p contig" +for samples packed contiguously, and +.B "\-p separate" +for samples stored separately. +By default samples are packed. +.TP +.B \-c +Use the specific compression algorithm to encoded image data +in the output file: +.B "\-c packbits" +for Macintosh Packbits, +.B "\-c lzw" +for Lempel-Ziv & Welch, +.B "\-c zip" +for Deflate, +.B "\-c none" +for no compression. +If no compression-related option is specified, the input +file's compression algorithm is used. +.TP +.B \-r +Explicitly specify the number of rows in each strip of the +output file. +If the +.B \-r +option is not specified, a number is selected such that each +output strip has approximately 8 kilobytes of data in it. +.SH BUGS +Only 8-bit images are handled. +.SH "SEE ALSO" +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiffmedian (1), +.IR libtiff (3) diff --git a/man/ppm2tiff.1 b/man/ppm2tiff.1 new file mode 100755 index 0000000..fcb6135 --- /dev/null +++ b/man/ppm2tiff.1 @@ -0,0 +1,97 @@ +.\" $Header: /home/cvsroot/libtiff/man/ppm2tiff.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1991-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH PPM2TIFF 1 "October 15, 1995" +.SH NAME +ppm2tiff \- create a +.SM TIFF +file from a +.SM PPM +image file +.SH SYNOPSIS +.B ppm2tiff +[ +.I options +] [ +.I input.ppm +] +.I output.tif +.SH DESCRIPTION +.I ppm2tiff +converts a file in the +.SM PPM +image format to +.SM TIFF. +By default, the +.SM TIFF +image is created with data samples packed (\c +.IR PlanarConfiguration =1), +compressed with the Lempel-Ziv & Welch algorithm (\c +.IR Compression =5), +and with each strip no more than 8 kilobytes. +These characteristics can be overriden, or explicitly specified +with the options described below +.PP +If the +.SM PPM +file contains greyscale data, then the +.I PhotometricInterpretation +tag is set to 1 (min-is-black), +otherwise it is set to 2 (RGB). +.PP +If no +.SM PPM +file is specified on the command line, +.I ppm2tiff +will read from the standard input. +.SH OPTIONS +.TP +.B \-c +Specify a compression scheme to use when writing image data: +.B "\-c none" +for no compression, +.B "-c packbits" +for the PackBits compression algorithm, +.B "-c jpeg" +for the baseline JPEG compression algorithm, +.B "-c zip +for the Deflate compression algorithm, +and +.B "\-c lzw" +for Lempel-Ziv & Welch compression (the default). +.TP +.B \-r +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +.TP +.B \-R +Mark the resultant image to have the specified +X and Y resolution (in dots/inch). +.SH "SEE ALSO" +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiffmedian (1), +.IR libtiff (3) diff --git a/man/ras2tiff.1 b/man/ras2tiff.1 new file mode 100755 index 0000000..d0b50f0 --- /dev/null +++ b/man/ras2tiff.1 @@ -0,0 +1,92 @@ +.\" $Header: /home/cvsroot/libtiff/man/ras2tiff.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1990-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH RAS2TIFF 1 "October 15, 1995" +.SH NAME +ras2tiff \- create a +.SM TIFF +file from a Sun rasterfile +.SH SYNOPSIS +.B ras2tiff +[ +.I options +] +.I input.ras +.I output.tif +.SH DESCRIPTION +.I ras2tiff +converts a file in the Sun rasterfile format to +.SM TIFF. +By default, the +.SM TIFF +image is created with data samples packed (\c +.IR PlanarConfiguration =1), +compressed with the Lempel-Ziv & Welch algorithm (\c +.IR Compression =5), +and with each strip no more than 8 kilobytes. +These characteristics can overriden, or explicitly specified +with the options described below. +.PP +Any colormap information in the rasterfile is carried over to the +.SM TIFF +file by including a +.I Colormap +tag in the output file. +If the rasterfile has a colormap, the +.I PhotometricInterpretation +tag is set to 3 (palette); +otherwise it is set to 2 (RGB) if the depth +is 24 or 1 (min-is-black) if the depth is not 24. +.SH OPTIONS +.TP +.B \-c +Specify a compression scheme to use when writing image data: +.B "\-c none" +for no compression, +.B "-c packbits" +for the PackBits compression algorithm, +.B "-c jpeg" +for the baseline JPEG compression algorithm, +.B "-c zip +for the Deflate compression algorithm, +and +.B "\-c lzw" +for Lempel-Ziv & Welch (the default). +.TP +.B \-r +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +.SH BUGS +Does not handle all possible rasterfiles. +In particular, +.I ras2tiff +does not handle run-length encoded images. +.SH "SEE ALSO" +.IR pal2rgb (1), +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiffmedian (1), +.IR libtiff (3) diff --git a/man/rgb2ycbcr.1 b/man/rgb2ycbcr.1 new file mode 100755 index 0000000..f7551ae --- /dev/null +++ b/man/rgb2ycbcr.1 @@ -0,0 +1,98 @@ +.\" $Header: /home/cvsroot/libtiff/man/rgb2ycbcr.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1991-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH RGB2YCBCR 1 "October 15, 1995" +.SH NAME +rgb2ycbcr \- convert non-YCbCr +.SM TIFF +images to a YCbCr +.SM TIFF +image +.SH SYNOPSIS +.B rgb2ycbcr +[ +.I options +] +.I "src1.tif src2.tif ... dst.tif" +.SH DESCRIPTION +.I rgb2ycbcr +converts +.SM RGB +color, greyscale, or bi-level +.SM TIFF +images to YCbCr images by +transforming and sampling pixel data. +If multiple files are specified on the command line +each source file is converted to a separate directory +in the destination file. +.PP +By default, chrominance samples are created by sampling +2 by 2 blocks of luminance values; this can be changed with +the +.B \-h +and +.B \-v +options. +Output data are compressed with the +.SM LZW +compression scheme, by default; an alternate scheme can be +selected with the +.B \-c +option. +By default, output data are compressed in strips with +the number of rows in each strip selected so that the +size of a strip is never more than 8 kilobytes; +the +.B \-r +option can be used to explicitly set the number of +rows per strip. +.SH OPTIONS +.TP +.B \-c +Specify a compression scheme to use when writing image data: +.B "\-c none" +for no compression, +.B "-c packbits" +for the PackBits compression algorithm, +.B "-c jpeg" +for the JPEG compression algorithm, +and +.B "\-c lzw" +for Lempel-Ziv & Welch (the default). +.TP +.B \-h +Set the horizontal sampling dimension to one of: 1, 2 (default), or 4. +.TP +.B \-r +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +.TP +.B \-v +Set the vertical sampling dimension to one of: 1, 2 (default), or 4. +.SH "SEE ALSO" +.IR tiffinfo (1), +.IR tiffcp (1), +.IR libtiff (3) diff --git a/man/sgi2tiff.1 b/man/sgi2tiff.1 new file mode 100755 index 0000000..e492eaa --- /dev/null +++ b/man/sgi2tiff.1 @@ -0,0 +1,90 @@ +.\" $Header: /home/cvsroot/libtiff/man/sgi2tiff.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1991-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH SGI2TIFF 1 "October 15, 1995" +.SH NAME +sgi2tiff \- create a +.SM TIFF +file from an +.SM SGI +image file +.SH SYNOPSIS +.B sgi2tiff +[ +.I options +] +.I input.rgb +.I output.tif +.SH DESCRIPTION +.I sgi2tiff +converts a file in the +.SM SGI +image format to +.SM TIFF. +By default, the +.SM TIFF +image is created with data samples packed (\c +.IR PlanarConfiguration =1), +compressed with the Lempel-Ziv & Welch algorithm (\c +.IR Compression =5), +and with each strip no more than 8 kilobytes. +These characteristics can overriden, or explicitly specified +with the options described below. +.SH OPTIONS +.TP +.B \-c +Specify a compression scheme to use when writing image data: +.B "\-c none" +for no compression, +.B "-c packbits" +for the PackBits compression algorithm), +.B "-c jpeg" +for the baseline JPEG compression algorithm, +.B "-c zip +for the Deflate compression algorithm, +and +.B "\-c lzw" +for Lempel-Ziv & Welch (the default). +.TP +.B \-p +Explicitly select the planar configuration used in organizing +data samples in the output image: +.B "\-p contig" +for samples packed contiguously, and +.B "\-p separate" +for samples stored separately. +By default samples are packed. +.TP +.B \-r +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +.SH BUGS +Does not record colormap information. +.SH "SEE ALSO" +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiffmedian (1), +.IR libtiff (3) diff --git a/man/thumbnail.1 b/man/thumbnail.1 new file mode 100755 index 0000000..29a1cce --- /dev/null +++ b/man/thumbnail.1 @@ -0,0 +1,87 @@ +.\" $Header: /home/cvsroot/libtiff/man/thumbnail.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1994-1997 Sam Leffler +.\" Copyright (c) 1994-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH THUMBNAIL 1 "September 26, 1994" +.SH NAME +thumbnail \- create a +.SM TIFF +file with thumbnail images +.SH SYNOPSIS +.B thumbnail +[ +.I options +] +.I input.tif +.I output.tif +.SH DESCRIPTION +.I thumbnail +is a program written to show how one might use the +SubIFD tag (#330) to store thumbnail images. +.I thumbnail +copies a +.SM TIFF +Class F facsimile file to the output file +and for each image an 8-bit greyscale +.IR "thumbnail sketch" . +The output file contains the thumbnail image with the associated +full-resolution page linked below with the SubIFD tag. +.PP +By default, thumbnail images are 216 pixels wide by 274 pixels high. +Pixels are calculated by sampling and filtering the input image +with each pixel value passed through a contrast curve. +.SH OPTIONS +.TP +.B \-w +Specify the width of thumbnail images in pixels. +.TP +.B \-h +Specify the height of thumbnail images in pixels. +.TP +.B \-c +Specify a contrast curve to apply in generating the thumbnail images. +By default pixels values are passed through a linear contrast curve +that simply maps the pixel value ranges. +Alternative curves are: +.B exp50 +for a 50% exponential curve, +.B exp60 +for a 60% exponential curve, +.B exp70 +for a 70% exponential curve, +.B exp80 +for a 80% exponential curve, +.B exp90 +for a 90% exponential curve, +.B exp +for a pure exponential curve, +.B linear +for a linear curve. +.SH BUGS +There are no options to control the format of the saved thumbnail images. +.SH "SEE ALSO" +.IR tiffdump (1), +.IR tiffgt (1), +.IR tiffinfo (1), +.IR libtiff (3) diff --git a/man/tiff2bw.1 b/man/tiff2bw.1 new file mode 100755 index 0000000..fbd8b01 --- /dev/null +++ b/man/tiff2bw.1 @@ -0,0 +1,91 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiff2bw.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFF2BW 1 "October 15, 1995" +.SH NAME +tiff2bw \- convert a color +.SM TIFF +image to greyscale +.SH SYNOPSIS +.B tiff2bw +[ +options +] +.I input.tif +.I output.tif +.SH DESCRIPTION +.I Tiff2bw +converts an +.SM RGB +or Palette color +.SM TIFF +image to a greyscale image by +combining percentages of the red, green, and blue channels. +By default, output samples are created by taking +28% of the red channel, 59% of the green channel, and 11% of +the blue channel. +To alter these percentages, the +.BR \-R , +.BR \-G , +and +.BR \-B +options may be used. +.SH OPTIONS +.TP +.B \-c +Specify a compression scheme to use when writing image data: +.B "\-c none" +for no compression, +.B "-c packbits" +for the PackBits compression algorithm, +.B "-c zip +for the Deflate compression algorithm, +.B "-c g3 +for the CCITT Group 3 compression algorithm, +.B "-c g4 +for the CCITT Group 4 compression algorithm, +and +.B "\-c lzw" +for Lempel-Ziv & Welch (the default). +.TP +.B \-r +Write data with a specified number of rows per strip; +by default the number of rows/strip is selected so that each strip +is approximately 8 kilobytes. +.TP +.B \-R +Specify the percentage of the red channel to use (default 28). +.TP +.B \-G +Specify the percentage of the green channel to use (default 59). +.TP +.B \-B +Specify the percentage of the blue channel to use (default 11). +.SH "SEE ALSO" +.IR pal2rgb (1), +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiffmedian (1), +.IR libtiff (3) diff --git a/man/tiff2ps.1 b/man/tiff2ps.1 new file mode 100755 index 0000000..0cb4d47 --- /dev/null +++ b/man/tiff2ps.1 @@ -0,0 +1,177 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiff2ps.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2 +.TH TIFF2PS 1 "January 27, 1997" +.SH NAME +tiff2ps \- convert a +.SM TIFF +image to \*(Ps\(tm +.SH SYNOPSIS +.B tiff2ps +[ +.I options +] +.I "input.tif ..." +.SH DESCRIPTION +.I tiff2ps +reads +.SM TIFF +images and writes \*(Ps or Encapsulated \*(Ps (EPS) +on the standard output. +By default, +.I tiff2ps +writes Encapsulated \*(Ps for the first image in the specified +.SM TIFF +image file. +.PP +By default, +.I tiff2ps +will generate \*(Ps that fills a printed area specified +by the +.SM TIFF +tags in the input file. +If the file does not contain +.I XResolution +or +.I YResolution +tags, then the printed area is set according to the image dimensions. +The +.B \-w +and +.B \-h +options (see below) +can be used to set the dimensions of the printed area in inches; +overriding any relevant +.SM TIFF +tags. +.PP +The \*(Ps generated for +.SM RGB, +palette, and +.SM CMYK +images uses the +.I colorimage +operator. +The \*(Ps generated for +greyscale and bilevel images +uses the +.I image +operator. +When the +.I colorimage +operator is used, \*(Ps code to emulate this operator +on older \*(Ps printers is also generated. +Note that this emulation code can be very slow. +.PP +Color images with associated alpha data are composited over +a white background. +.SH OPTIONS +.TP +.B \-1 +Generate \*(Ps Level I (the default). +.TP +.B \-2 +Generate \*(Ps Level II. +.TP +.B \-a +Generate output for all IFDs (pages) in the input file. +.TP +.B \-d +Set the initial +.SM TIFF +directory to the specified directory number. +(NB: directories are numbered starting at zero.) +This option is useful for selecting individual pages in a +multi-page (e.g. facsimile) file. +.TP +.B \-e +Force the generation of Encapsulated \*(Ps. +.TP +.B \-h +Specify the vertical size of the printed area (in inches). +.TP +.B \-o +Set the initial +.SM TIFF +directory to the +.SM IFD +at the specified file offset. +This option is useful for selecting thumbnail images and the +like which are hidden using the SubIFD tag. +.TP +.B \-p +Force the generation of (non-Encapsulated) \*(Ps. +.TP +.B \-s +Generate output for a single IFD (page) in the input file. +.TP +.B \-w +Specify the horizontal size of the printed area (in inches). +.TP +.B \-z +When generating \*(Ps Level II, data is scaled so that it does not +image into the +.I deadzone +on a page (the outer margin that the printing device is unable to mark). +This option suppresses this behaviour. +When \*(Ps Level I is generated, data is imaged to the entire printed +page and this option has no affect. +.SH EXAMPLES +The following generates \*(Ps Level II for all pages of a facsimile: +.RS +.nf +tiff2ps -a2 fax.tif | lpr +.fi +.RE +Note also that if you have version 2.6.1 or newer of Ghostscript then you +can efficiently preview facsimile generated with the above command. +.PP +To generate Encapsulated \*(Ps for a the image at directory 2 +of an image use: +.RS +.nf +tiff2ps -d 1 foo.tif +.fi +.RE +(notice that directories are numbered starting at zero.) +.SH BUGS +Because \*(Ps does not support the notion of a colormap, +8-bit palette images produce 24-bit \*(Ps images. +This conversion results in output that is six times +bigger than the original image and which takes a long time +to send to a printer over a serial line. +Matters are even worse for 4-, 2-, and 1-bit palette images. +.SH BUGS +Does not handle tiled images when generating PS Level I output. +.SH "SEE ALSO" +.IR pal2rgb (1), +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiffgt (1), +.IR tiffmedian (1), +.IR tiff2bw (1), +.IR tiffsv (1), +.IR libtiff (3) diff --git a/man/tiffcmp.1 b/man/tiffcmp.1 new file mode 100755 index 0000000..98b941a --- /dev/null +++ b/man/tiffcmp.1 @@ -0,0 +1,74 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiffcmp.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFCMP 1 "September 26, 1994" +.SH NAME +tiffcmp \- compare two +.SM TIFF +files +.SH SYNOPSIS +.B tiffcmp +[ +.I options +] +.I "file1.tif file2.tif" +.SH DESCRIPTION +.I Tiffcmp +compares the tags and data in two files created according +to the Tagged Image File Format, Revision 6.0. +The schemes used for compressing data in each file +are immaterial when data are compared\-data are compared on +a scanline-by-scanline basis after decompression. +Most directory tags are checked; notable exceptions are: +.IR GrayResponseCurve , +.IR ColorResponseCurve , +and +.IR ColorMap +tags. +Data will not be compared if any of the +.IR BitsPerSample , +.IR SamplesPerPixel , +or +.I ImageWidth +values are not equal. +By default, +.I tiffcmp +will terminate if it encounters any difference. +.SH OPTIONS +.TP +.B \-l +List each byte of image data that differs between the files. +.TP +.B \-t +Ignore any differences in directory tags. +.SH BUGS +Tags that are not recognized by the library are not +compared; they may also generate spurious diagnostics. +.SH "SEE ALSO" +.IR pal2rgb (1), +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiffmedian (1), +.IR libtiff (3) diff --git a/man/tiffcp.1 b/man/tiffcp.1 new file mode 100755 index 0000000..156b680 --- /dev/null +++ b/man/tiffcp.1 @@ -0,0 +1,221 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiffcp.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFCP 1 "January 9, 1996" +.SH NAME +tiffcp \- copy (and possibly convert) a +.SM TIFF +file +.SH SYNOPSIS +.B tiffcp +[ +.I options +] +.I "src1.tif ... srcN.tif dst.tif" +.SH DESCRIPTION +.I tiffcp +combines one or more files created according +to the Tag Image File Format, Revision 6.0 +into a single +.SM TIFF +file. +Because the output file may be compressed using a different +algorithm than the input files, +.I tiffcp +is most often used to convert between different compression +schemes. +.PP +By default, +.I tiffcp +will copy all the understood tags in a +.SM TIFF +directory of an input +file to the associated directory in the output file. +.PP +.I tiffcp +can be used to reorganize the storage characteristics of data +in a file, but it is explicitly intended to not alter or convert +the image data content in any way. +.SH OPTIONS +.TP +.B \-B +Force output to be written with Big-Endian byte order. +This option only has an effect when the output file is created or +overwritten and not when it is appended to. +.TP +.B \-C +Suppress the use of ``strip chopping'' when reading images +that have a single strip/tile of uncompressed data. +.TP +.B \-c +Specify the compression to use for data written to the output file: +.B none +for no compression, +.B packbits +for PackBits compression, +.B lzw +for Lempel-Ziv & Welch compression, +.B jpeg +for baseline JPEG compression, +.B zip +for Deflate compression, +.B g3 +for CCITT Group 3 (T.4) compression, +and +.B g4 +for CCITT Group 4 (T.6) compression. +By default +.I tiffcp +will compress data according to the value of the +.I Compression +tag found in the source file. +.IP +The +.SM CCITT +Group 3 and Group 4 compression algorithms can only +be used with bilevel data. +.IP +Group 3 compression can be specified together with several +T.4-specific options: +.B 1d +for 1-dimensional encoding, +.B 2d +for 2-dimensional encoding, +and +.B fill +to force each encoded scanline to be zero-filled so that the +terminating EOL code lies on a byte boundary. +Group 3-specific options are specified by appending a ``:''-separated +list to the ``g3'' option; e.g. +.B "\-c g3:2d:fill" +to get 2D-encoded data with byte-aligned EOL codes. +.IP +.SM LZW +compression can be specified together with a +.I predictor +value. +A predictor value of 2 causes +each scanline of the output image to undergo horizontal +differencing before it is encoded; a value +of 1 forces each scanline to be encoded without differencing. +LZW-specific options are specified by appending a ``:''-separated +list to the ``lzw'' option; e.g. +.B "\-c lzw:2" +for +.SM LZW +compression with horizontal differencing. +.TP +.B \-f +Specify the bit fill order to use in writing output data. +By default, +.I tiffcp +will create a new file with the same fill order as the original. +Specifying +.B "\-f lsb2msb" +will force data to be written with the FillOrder tag set to +.SM LSB2MSB, +while +.B "\-f msb2lsb" +will force data to be written with the FillOrder tag set to +.SM MSB2LSB. +.TP +.B \-l +Specify the length of a tile (in pixels). +.I tiffcp +attempts to set the tile dimensions so +that no more than 8 kilobytes of data appear in a tile. +.TP +.B \-L +Force output to be written with Little-Endian byte order. +This option only has an effect when the output file is created or +overwritten and not when it is appended to. +.TP +.B \-M +Suppress the use of memory-mapped files when reading images. +.TP +.B \-p +Specify the planar configuration to use in writing image data +that has one 8-bit sample per pixel. +By default, +.I tiffcp +will create a new file with the same planar configuration as +the original. +Specifying +.B "\-p contig" +will force data to be written with multi-sample data packed +together, while +.B "\-p separate" +will force samples to be written in separate planes. +.TP +.B \-r +Specify the number of rows (scanlines) in each strip of data +written to the output file. +By default, +.I tiffcp +attempts to set the rows/strip +that no more than 8 kilobytes of data appear in a strip. +.TP +.B \-s +Force the output file to be written with data organized in strips +(rather than tiles). +.TP +.B \-t +Force the output file to be written wtih data organized in tiles +(rather than strips). +options can be used to force the resultant image to be written +as strips or tiles of data, respectively. +.TP +.B \-w +Specify the width of a tile (in pixels). +.I tiffcp +attempts to set the tile dimensions so +that no more than 8 kilobytes of data appear in a tile. +.SH EXAMPLES +The following concatenates two files and writes the result using +.SM LZW +encoding: +.RS +.nf +tiffcp -c lzw a.tif b.tif result.tif +.fi +.RE +.PP +To convert a G3 1d-encoded +.SM TIFF +to a single strip of G4-encoded data the following might be used: +.RS +.nf +tiffcp -c g4 -r 10000 g3.tif g4.tif +.fi +.RE +(1000 is just a number that is larger than the number of rows in +the source file.) +.SH "SEE ALSO" +.IR pal2rgb (1), +.IR tiffinfo (1), +.IR tiffcmp (1), +.IR tiffmedian (1), +.IR tiffsplit (1), +.IR libtiff (3) diff --git a/man/tiffdither.1 b/man/tiffdither.1 new file mode 100755 index 0000000..6b68ae7 --- /dev/null +++ b/man/tiffdither.1 @@ -0,0 +1,125 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiffdither.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1990-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFDITHER 1 "October 15, 1995" +.SH NAME +tiffdither \- convert a greyscale image to bilevel using dithering +.SH SYNOPSIS +.B tiffdither +[ +.I options +] +.I input.tif +.I output.tif +.SH DESCRIPTION +.I tiffdither +converts a single channel 8-bit greyscale image to a bilevel image +using Floyd-Steinberg error propagation with threholding. +.SH OPTIONS +.TP +.B \-c +Specify the compression to use for data written to the output file: +.B none +for no compression, +.B packbits +for PackBits compression, +.B lzw +for Lempel-Ziv & Welch compression, +.B zip +for Deflate compression, +.B g3 +for CCITT Group 3 (T.4) compression, +and +.B g4 +for CCITT Group 4 (T.6) compression. +By default +.I tiffdither +will compress data according to the value of the +.I Compression +tag found in the source file. +.IP +The +.SM CCITT +Group 3 and Group 4 compression algorithms can only +be used with bilevel data. +.IP +Group 3 compression can be specified together with several +T.4-specific options: +.B 1d +for 1-dimensional encoding, +.B 2d +for 2-dimensional encoding, +and +.B fill +to force each encoded scanline to be zero-filled so that the +terminating EOL code lies on a byte boundary. +Group 3-specific options are specified by appending a ``:''-separated +list to the ``g3'' option; e.g. +.B "\-c g3:2d:fill" +to get 2D-encoded data with byte-aligned EOL codes. +.IP +.SM LZW +compression can be specified together with a +.I predictor +value. +A predictor value of 2 causes +each scanline of the output image to undergo horizontal +differencing before it is encoded; a value +of 1 forces each scanline to be encoded without differencing. +LZW-specific options are specified by appending a ``:''-separated +list to the ``lzw'' option; e.g. +.B "\-c lzw:2" +for +.SM LZW +compression with horizontal differencing. +.TP +.B \-f +Specify the bit fill order to use in writing output data. +By default, +.I tiffdither +will create a new file with the same fill order as the original. +Specifying +.B "\-f lsb2msb" +will force data to be written with the FillOrder tag set to +.SM LSB2MSB , +while +.B "\-f msb2lsb" +will force data to be written with the FillOrder tag set to +.SM MSB2LSB . +.TP +.B \-t +Set the threshold value for dithering. +By default the threshold value is 128. +.SH NOTES +The dither algorithm is taken from the +.IR tiffmedian (1) +program (written by Paul Heckbert). +.SH "SEE ALSO" +.IR pal2rgb (1), +.IR fax2tiff (1), +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiff2bw (1), +.IR libtiff (3) diff --git a/man/tiffdump.1 b/man/tiffdump.1 new file mode 100755 index 0000000..d591d9d --- /dev/null +++ b/man/tiffdump.1 @@ -0,0 +1,74 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiffdump.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFDUMP 1 "October 15, 1995" +.SH NAME +tiffdump \- print verbatim information about +.SM TIFF +files +.SH SYNOPSIS +.B tiffdump +[ +.I options +] +.I "name \&..." +.SH DESCRIPTION +.I tiffdump +displays directory information from files created according +to the Tag Image File Format, Revision 6.0. +The header of each +.SM TIFF +file (magic number, version, and first directory offset) +is displayed, followed by the tag contents of each directory in the file. +For each tag, the name, datatype, count, and value(s) is displayed. +When the symbolic name for a tag or datatype is known, the symbolic +name is displayed followed by it's numeric (decimal) value. +Tag values are displayed enclosed in ``<>'' characters immediately +preceded by the value of the count field. +For example, an +.I ImageWidth +tag might be displayed as ``ImageWidth (256) SHORT (3) 1<800>''. +.PP +.I tiffdump +is particularly useful for investigating the contents of +.SM TIFF +files that +.I libtiff +does not understand. +.SH OPTIONS +.TP +.B \-h +Force numeric data to be printed in hexadecimal rather than the +default decimal. +.TP +.B \-o +Dump the contents of the +.SM IFD +at the a particular file offset. +The file offset may be specified using the usual C-style syntax; +i.e. a leading ``0x'' for hexadecimal and a leading ``0'' for octal. +.SH "SEE ALSO" +.IR tiffinfo (1), +.IR libtiff (3) diff --git a/man/tiffgt.1 b/man/tiffgt.1 new file mode 100755 index 0000000..cac81d5 --- /dev/null +++ b/man/tiffgt.1 @@ -0,0 +1,242 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiffgt.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFGT 1 "October 15, 1995" +.SH NAME +tiffgt \- display an image stored in a +.SM TIFF +file (Silicon Graphics version) +.SH SYNOPSIS +.B tiffgt +[ +.I options +] +.I "input.tif ..." +.SH DESCRIPTION +.I tiffgt +displays one or more images stored using the +Tag Image File Format, Revision 6.0. +Each image is placed in a fixed size window that the +user must position on the display (unless configured +otherwise through X defaults). +If the display has fewer than 24 bitplanes, or if the +image does not warrant full color, then +.SM RGB +color values are mapped to the closest values that exist in +the colormap (this is done using the +.I rgbi +routine found in the graphics utility library +.BR \-lgutil .) +.PP +.I tiffgt +correctly handles files with any of the following characteristics: +.sp .5 +.in +0.5i +.ta \w'\fIPhotometricInterpretation\fP 'u +.nf +BitsPerSample 1, 2, 4, 8, 16 +SamplesPerPixel 1, 3, 4 (the 4th sample is ignored) +PhotometricInterpretation 0 (min-is-white), 1 (min-is-black), 2 (RGB), 3 (palette), 6 (YCbCr) +PlanarConfiguration 1 (contiguous), 2 (separate) +Orientation 1 (top-left), 4 (bottom-left) +.fi +.in -0.5i +.sp .5 +Data may be organized as strips or tiles and may be +compressed with any of the compression algorithms supported +by the +.IR libtiff (3) +library. +.PP +For palette images (\c +.IR PhotomatricInterpretation =3), +.I tiffgt +inspects the colormap values and assumes either 16-bit +or 8-bit values according to the maximum value. +That is, if no colormap entry greater than 255 is found, +.I tiffgt +assumes the colormap has only 8-bit values; otherwise +it assumes 16-bit values. +This inspection is done to handle old images written by +previous (incorrect) versions of +.IR libtiff . +.PP +.I tiffgt +can be used to display multiple images one-at-a-time. +The left mouse button switches the display to the first image in the +.I next +file in the list of files specified on the command line. +The right mouse button switches to the first image in the +.I previous +file in the list. +The middle mouse button causes the first image in the first file +specified on the command line to be displayed. +In addition the following keyboard commands are recognized: +.TP +.B b +Use a +.I PhotometricIntepretation +of MinIsBlack in displaying the current image. +.TP +.B l +Use a +.I FillOrder +of lsb-to-msb in decoding the current image. +.TP +.B m +Use a +.I FillOrder +of msb-tolmsb in decoding the current image. +.TP +.B c +Use a colormap visual to display the current image. +.TP +.B r +Use a true color (24-bit RGB) visual to display the current image. +.TP +.B w +Use a +.I PhotometricIntepretation +of MinIsWhite in displaying the current image. +.TP +.B W +Toggle (enable/disable) display of warning messages from the +.SM TIFF +library when decoding images. +.TP +.B E +Toggle (enable/disable) display of error messages from the +.SM TIFF +library when decoding images. +.TP +.B z +Reset all parameters to their default settings (\c +.IR FillOrder , +.IR PhotometricInterpretation , +handling of warnings and errors). +.TP +.B PageUp +Display the previous image in the current file or the last +image in the previous file. +.TP +.B PageDown +Display the next image in the current file or the first image +in the next file. +.TP +.B Home +Display the first image in the current file. +.TP +.B End +Display the last image in the current file (unimplemented). +.SH OPTIONS +.TP +.B \-c +Force image display in a colormap window. +.TP +.B \-d +Specify an image to display by directory number. +By default the first image in the file is displayed. +Directories are numbered starting at zero. +.TP +.B \-e +Enable reporting of error messages from the +.SM TIFF +library. +By default +.I tiffgt +silently ignores images that cannot be read. +.TP +.B \-f +Force +.I tiffgt +to run as a foreground process. +By default +.I tiffgt +will place itself in the background once it has opened the +requested image file. +.TP +.B \-l +Force the presumed bit ordering to be +.SM LSB +to +.SM MSB. +.TP +.B \-m +Force the presumed bit ordering to be +.SM MSB +to +.SM LSB. +.TP +.B \-o +Specify an image to display by directory offset. +By default the first image in the file is displayed. +Directories offsets may be specified using C-style syntax; +i.e. a leading ``0x'' for hexadecimal and a leading ``0'' for octal. +.TP +.B \-p +Override the value of the +.I PhotometricInterpretation +tag; the parameter may be one of: +.IR miniswhite , +.IR minisblack , +.IR rgb , +.IR palette , +.IR mask , +.IR separated , +.IR ycbcr , +and +.IR cielab . +.TP +.B \-r +Force image display in a full color window. +.TP +.B \-s +Stop on the first read error. +By default all errors in the input data are ignored and +.I tiffgt +does it's best to display as much of an image as possible. +.TP +.B \-w +Enable reporting of warning messages from the +.SM TIFF +library. +By default +.I tiffgt +ignores warning messages generated when reading an image. +.TP +.B \-v +Place information in the title bar describing +what type of window (full color or colormap) is being +used, the name of the input file, and the directory +index of the image (if non-zero). +By default, the window type is not shown in the title bar. +.SH BUGS +Images wider and taller than the display are silently truncated to avoid +crashing old versions of the window manager. +.SH "SEE ALSO" +.IR tiffdump (1), +.IR tiffinfo (1), +.IR tiffcp (1), +.IR libtiff (3) diff --git a/man/tiffinfo.1 b/man/tiffinfo.1 new file mode 100755 index 0000000..9e6dc73 --- /dev/null +++ b/man/tiffinfo.1 @@ -0,0 +1,85 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiffinfo.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFINFO 1 "January 27, 1997" +.SH NAME +tiffinfo \- print information about +.SM TIFF +files +.SH SYNOPSIS +.B tiffinfo +[ +.I options +] +.I "input.tif \&..." +.SH DESCRIPTION +.I Tiffinfo +displays information about files created according +to the Tag Image File Format, Revision 6.0. +By default, the contents of each +.SM TIFF +directory in each file +is displayed, with the value of each tag shown symbolically +(where sensible). +.SH OPTIONS +.TP +.B \-c +Display the colormap and color/gray response curves, if present. +.TP +.B \-D +In addition to displaying the directory tags, +read and decompress all the data in each image (but not display it). +.TP +.B \-d +In addition to displaying the directory tags, +print each byte of decompressed data in hexadecimal. +.TP +.B \-j +Display any \s-2JPEG\s0-related tags that are present. +.TP +.B \-o +Set the initial +.SM TIFF +directory according to the specified file offset. +The file offset may be specified using the usual C-style syntax; +i.e. a leading ``0x'' for hexadecimal and a leading ``0'' for octal. +.TP +.B \-s +Display the offsets and byte counts for each data strip in a directory. +.TP +.B \-z +Enable strip chopping when reading image data. +.TP +.B \-# +Set the initial +.SM TIFF +directory to +.IR # . +.SH "SEE ALSO" +.IR pal2rgb (1), +.IR tiffcp (1), +.IR tiffcmp (1), +.IR tiffmedian (1), +.IR libtiff (3) diff --git a/man/tiffmedian.1 b/man/tiffmedian.1 new file mode 100755 index 0000000..9a83e30 --- /dev/null +++ b/man/tiffmedian.1 @@ -0,0 +1,109 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiffmedian.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1990-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFMEDIAN 1 "October 15, 1995" +.SH NAME +tiffmedian \- apply the median cut algorithm to data in a +.SM TIFF +file +.SH SYNOPSIS +.B tiffmedian +[ +.I options +] +.I input.tif +.I output.tif +.SH DESCRIPTION +.I tiffmedian +applys the median cut algorithm to an +.SM RGB +image in +.I input.tif +to generate a palette image that is written to +.IR output.tif . +The generated colormap has, by default, 256 entries. +The image data is quantized by mapping each +pixel to the closest color values in the colormap. +.SH OPTIONS +.TP +.B \-c +Specify the compression to use for data written to the output file: +.B none +for no compression, +.B packbits +for PackBits compression, +.B lzw +for Lempel-Ziv & Welch compression, +and +.B zip +for Deflate compression. +By default +.I tiffmedian +will compress data according to the value of the +.I Compression +tag found in the source file. +.IP +.SM LZW +compression can be specified together with a +.I predictor +value. +A predictor value of 2 causes +each scanline of the output image to undergo horizontal +differencing before it is encoded; a value +of 1 forces each scanline to be encoded without differencing. +LZW-specific options are specified by appending a ``:''-separated +list to the ``lzw'' option; e.g. +.B "\-c lzw:2" +for +.SM LZW +compression with horizontal differencing. +.TP +.B \-C +Specify the number of entries to use in the generated colormap. +By default all 256 entries/colors are used. +.TP +.B \-f +Apply Floyd-Steinberg dithering before selecting a colormap entry. +.TP +.B \-r +Specify the number of rows (scanlines) in each strip of data +written to the output file. +By default, +.I tiffmedian +attempts to set the rows/strip +that no more than 8 kilobytes of data appear in a strip. +.SH NOTES +This program is derived from Paul Heckbert's +.I median +program. +.SH "SEE ALSO" +.IR pal2rgb (1), +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiffcmp (1), +.IR libtiff (3) +.PP +"Color Image Quantization for Frame Buffer Display", Paul +Heckbert, SIGGRAPH proceedings, 1982, pp. 297-307. diff --git a/man/tiffsplit.1 b/man/tiffsplit.1 new file mode 100755 index 0000000..0d7baa5 --- /dev/null +++ b/man/tiffsplit.1 @@ -0,0 +1,66 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiffsplit.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1992-1997 Sam Leffler +.\" Copyright (c) 1992-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFCP 1 "September 26, 1994" +.SH NAME +tiffsplit \- split a multi-image +.SM TIFF +into single-image +.SM TIFF +files +.SH SYNOPSIS +.B tiffsplit +.I src.tif +[ +.I prefix +] +.SH DESCRIPTION +.I tiffsplit +takes a multi-directory (page) +.SM TIFF +file and creates one or more single-directory (page) +.SM TIFF +files from it. +The output files are given names created by concatenating +a prefix, a lexically ordered +suffix in the range [\fIaa\fP-\fIzz\fP], the suffix +.I .tif +(e.g. +.IR xaa.tif , +.IR xab.tif , +\... +.IR xzz.tif ). +If a prefix is not specified on the command line, +the default prefix of +.I x +is used. +.SH OPTIONS +None. +.SH BUGS +Only a select set of ``known tags'' is copied when spliting. +.SH "SEE ALSO" +.IR tiffcp (1), +.IR tiffinfo (1), +.IR libtiff (3) diff --git a/man/tiffsv.1 b/man/tiffsv.1 new file mode 100755 index 0000000..b2853b9 --- /dev/null +++ b/man/tiffsv.1 @@ -0,0 +1,139 @@ +.\" $Header: /home/cvsroot/libtiff/man/tiffsv.1,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +.\" +.\" Copyright (c) 1988-1997 Sam Leffler +.\" Copyright (c) 1991-1997 Silicon Graphics, Inc. +.\" +.\" 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. +.\" +.if n .po 0 +.TH TIFFSV 1 "October 15, 1995" +.SH NAME +tiffsv \- save an image from the framebuffer in a +.SM TIFF +file (Silicon Graphics version) +.SH SYNOPSIS +.B tiffsv +[ +.I options +] +.I output.tif +[ +.I "x1 x2 y1 y2" +] +.SH DESCRIPTION +.I tiffsv +saves all or part of the framebuffer in a file using the +Tag Image File Format, Revision 6.0. +By default, the image is saved with data samples packed (\c +.IR PlanarConfiguration =1), +compressed with the Lempel-Ziv & Welch algorithm (\c +.IR Compression =5), +and with each strip no more than 8 kilobytes. +These characteristics can be overriden, or explicitly specified +with the options described below. +.SH OPTIONS +.TP +.B \-b +Save the image as a greyscale image +as if it were processed by +.IR tiff2bw (1). +This option is included for compatibility with the standard +.IR scrsave (6D) +program. +.TP +.B \-c +Specify the compression to use for data written to the output file: +.B none +for no compression, +.B packbits +for PackBits compression, +.B jpeg +for baseline JPEG compression, +.B zip +for Deflate compression, +and +.B lzw +for Lempel-Ziv & Welch compression (default). +.IP +.SM LZW +compression can be specified together with a +.I predictor +value. +A predictor value of 2 causes +each scanline of the output image to undergo horizontal +differencing before it is encoded; a value +of 1 forces each scanline to be encoded without differencing. +LZW-specific options are specified by appending a ``:''-separated +list to the ``lzw'' option; e.g. +.B "\-c lzw:2" +for +.SM LZW +compression with horizontal differencing. +.TP +.B \-p +Specify the planar configuration to use in writing image data. +By default, +.I tiffsv +will create a new file with the data samples packed contiguously. +Specifying +.B "\-p contig" +will force data to be written with multi-sample data packed +together, while +.B "\-p separate" +will force samples to be written in separate planes. +.TP +.B \-r +Specify the number of rows (scanlines) in each strip of data +written to the output file. +By default, +.I tiffsv +attempts to set the rows/strip +that no more than 8 kilobytes of data appear in a strip. +.SH NOTE +Except for the use of +.SM TIFF, +this program is equivalent to the standard +.I scrsave +program. +This means, for example, that you can use it in conjunction with +the standard +.IR icut +program simply by creating a link called +.IR scrsave , +or by creating a shell script called +.I scrsave +that invokes +.I tiffgt +with the appropriate options. +.SH BUGS +If data are saved compressed and in separate planes, then the +rows in each strip is silently set to one to avoid limitations +in the +.IR libtiff (3) +library. +.SH "SEE ALSO" +.IR scrsave (6D) +.IR pal2rgb (1), +.IR tiffdump (1), +.IR tiffgt (1), +.IR tiffinfo (1), +.IR tiffcp (1), +.IR tiffmedian (1), +.IR libtiff (3) diff --git a/port/Makefile.in b/port/Makefile.in new file mode 100755 index 0000000..5f5d145 --- /dev/null +++ b/port/Makefile.in @@ -0,0 +1,67 @@ +#! smake +# $Header: /home/cvsroot/libtiff/port/Makefile.in,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# @WARNING@ +# +# Tag Image File Format Library +# +# Copyright (c) 1995-1997 Sam Leffler +# Copyright (c) 1995-1997 Silicon Graphics, Inc. +# +# 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. +# +SRCDIR = @RELSRCDIR@/port +VPATH = @RELSRCDIR@/port + +# +# VERSION: @VERSION@ +# DATE: @DATE@ +# TARGET: @TARGET@ +# CCOMPILER: @CCOMPILER@ +# + +SHELL = @SCRIPT_SH@ +NULL = +CC = @CCOMPILER@ +AR = @AR@ +AROPTS = @AROPTS@ +RANLIB = @RANLIB@ + +IPATH = -I. -I${SRCDIR} +COPTS = @GCOPTS@ +OPTIMIZER=-O +CFLAGS = @ENVOPTS@ ${COPTS} ${OPTIMIZER} ${IPATH} + +CFILES = @PORTFUNCS@ +OBJECTS = ${CFILES:.c=.o} +TARGETS = libport.a + +default all: ${TARGETS} + +libport.a: ${OBJECTS} + @rm -f $@; + ${AR} ${AROPTS} $@ ${OBJECTS} + ${RANLIB} $@ +${PORT}/libport.a: libport.a + +install: default + +clean: + rm -f ${TARGETS} ${OBJS} core a.out diff --git a/port/getopt.c b/port/getopt.c new file mode 100755 index 0000000..230d09b --- /dev/null +++ b/port/getopt.c @@ -0,0 +1,116 @@ +/* + * Copyright (c) 1987 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)getopt.c 4.13 (Berkeley) 2/23/91"; +#endif /* LIBC_SCCS and not lint */ + +#include +#include + +/* + * get option letter from argument vector + */ +int opterr = 1, /* if error message should be printed */ + optind = 1, /* index into parent argv vector */ + optopt; /* character checked for validity */ +char *optarg; /* argument associated with option */ + +#define BADCH (int)'?' +#define EMSG "" + +int +getopt(int nargc, char** nargv, char* ostr) +{ + static char *place = EMSG; /* option letter processing */ + register char *oli; /* option letter list index */ + char *p; + + if (!*place) { /* update scanning pointer */ + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return(EOF); + } + if (place[1] && *++place == '-') { /* found "--" */ + ++optind; + place = EMSG; + return(EOF); + } + } /* option letter okay? */ + if ((optopt = (int)*place++) == (int)':' || + !(oli = strchr(ostr, optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means EOF. + */ + if (optopt == (int)'-') + return(EOF); + if (!*place) + ++optind; + if (opterr) { + if (!(p = strrchr(*nargv, '/'))) + p = *nargv; + else + ++p; + (void)fprintf(stderr, "%s: illegal option -- %c\n", + p, optopt); + } + return(BADCH); + } + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } + else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if (!(p = strrchr(*nargv, '/'))) + p = *nargv; + else + ++p; + if (opterr) + (void)fprintf(stderr, + "%s: option requires an argument -- %c\n", + p, optopt); + return(BADCH); + } + else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + return(optopt); /* dump back option letter */ +} diff --git a/port/install.sh.in b/port/install.sh.in new file mode 100755 index 0000000..d285356 --- /dev/null +++ b/port/install.sh.in @@ -0,0 +1,246 @@ +#! @SCRIPT_SH@ +# $Header: /home/cvsroot/libtiff/port/install.sh.in,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# @WARNING@ +# +# HylaFAX Facsimile Software +# +# Copyright (c) 1990-1997 Sam Leffler +# Copyright (c) 1991-1997 Silicon Graphics, Inc. +# HylaFAX is a trademark of Silicon Graphics +# +# 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. +# + +# +# Warning, this file was automatically created by the HylaFAX configure script +# +# VERSION: @VERSION@ +# DATE: @DATE@ +# TARGET: @TARGET@ +# + +# +# Shell script to emulate Silicon Graphics install program. +# We emulate the non-standard interface used by install so +# that we can build SGI inst packages on SGI systems. Note +# that we cannot emulate everything because we don't maintain +# a history of installed software; thus we cannot tell when +# configuration files have been modified and save old copies. +# +# NB: we don't do chown/chmod/chgrp by default; it must be +# explicitly set on the command line. +# + +# +# install [options] files ... +# +# Options are: +# +# -o save existing target foo as OLDfoo +# -O remove existing target foo, if it fails save as OLDfoo +# -m mode set mode of installed target +# -u uid set uid of installed target +# -g gid set gid of installed target +# -root path set ROOT directory for target pathnames +# -dir create directories +# -fifo create FIFO special files +# -ln path create hard link +# -lns path create symbolic link +# -src path source pathname different from target +# -f dir install files in the target directory ROOT/dir +# -F dir like -f, but create directories that do not exist +# -v echo actions +# -idb stuff specify package and, optionally, do special work +# +preopts= +postopts= +SaveFirst=no +HasSource=yes +RemoveFirst=no +NoUpdate=no +Suggested=no +Updated=no + +CMD=cp +SRC= +FILES= +DESTDIR= +CHMOD=":" +CHOWN=":" +CHGRP=":" +RM="rm -f" +MV="mv @MV_F@" +ECHO=echo +VERBOSE=":" +STRIP="@STRIP@" +CMP=cmp + +TARGETS= +while [ x"$1" != x ] +do + arg=$1 + case $arg in + -m) shift; CHMOD="@CHMOD@ $1";; + -u) shift; CHOWN="@CHOWN@ $1";; + -g) shift; CHGRP="@CHGRP@ $1";; + -o) SaveFirst=yes;; + -O) RemoveFirst=yes; SaveFirst=yes;; + -root) shift; ROOT=$1;; + -dir) CMD=mkdir; HasSource=no; + RM=":"; STRIP=":" + ;; + -fifo) CMD=@MKFIFO@; HasSource=no; + x=`echo $CMD | @SED@ 's;.*/;;'`; + test $x = mknod && postopts="p"; + STRIP=":" + ;; + -ln) shift; CMD=@LN@; SRC="$1" + STRIP=":" + ;; + -lns) shift; CMD=@LN@; preopts="@LN_S@"; SRC="$1" + STRIP=":" + ;; + -src) shift; SRC="$1";; + -[fF]) shift; DESTDIR="$1";; + -idb) shift; opt="$1" + case "$opt" in + *config\(update\)*) Updated=yes;; + *config\(suggest\)*) Suggested=yes;; + *config\(noupdate\)*) NoUpdate=yes;; + *nostrip*) STRIP=":";; + esac + ;; + # these are skipped/not handled + -new|-rawidb|-blk|-chr) shift;; + -v) VERBOSE=$ECHO;; + -*) ;; + *) TARGETS="$TARGETS $arg";; + esac + shift +done + +# +# Install the specified target. +# +install() +{ + src=$1 target=$2 + if [ $RemoveFirst = yes -a -f $target ]; then + $VERBOSE "$RM $target" + $RM $target + fi + if [ $SaveFirst = yes -a -f $target ]; then + bf=`echo $src | @SED@ 's;.*/;;'` + $VERBOSE "$MV $target $ROOT/$DESTDIR/OLD$bf" + $MV $target $ROOT/$DESTDIR/OLD$bf + fi + if [ -z "$SRC" -a $HasSource = yes ]; then + $VERBOSE "$CMD $preopts $src $target $postopts" + $CMD $preopts $f $target $postopts + else + $VERBOSE "$CMD $preopts $SRC $target $postopts" + $CMD $preopts $SRC $target $postopts + fi + if [ $? -eq 0 ]; then + $VERBOSE "$CHOWN $target" + $CHOWN $target + $VERBOSE "$CHGRP $target" + $CHGRP $target + $VERBOSE "$CHMOD $target" + $CHMOD $target + if [ $STRIP != ":" -a -x $ROOT/$DESTDIR/$f ]; then + $STRIP $target >/dev/null 2>&1 || true + $VERBOSE "$STRIP $target" + fi + fi +} + +if [ $Suggested = yes ]; then + # + # A suggested file. If an existing target does + # not exist, then install it. Otherwise, install + # it as target.N if it's different from the current + # installed target. + # + # NB: cannot be used with a special file 'cuz we + # use test -f to see if the file exists. + # + for f in $TARGETS; do + t=$ROOT/$DESTDIR/$f + if [ -f $t ]; then + if [ -z "$SRC" -a $HasSource = yes ]; then + $CMP -s $f $t || { + $ECHO "*** Warning, target has local changes, installing $f as $t.N" + install $f $t.N; + } + else + $CMP -s $SRC $t || { + $ECHO "*** Warning, target has local changes, installing $f as $t.N" + install $f $t.N + } + fi + else + install $f $t + fi + done +elif [ $Updated = yes ]; then + # + # A file to be updated. If an existing target does + # not exist, then install it. Otherwise, install + # it as target and save the old version as target.O + # if the old version is different from the current + # installed target. + # + # NB: cannot be used with a special file 'cuz we + # use test -f to see if the file exists. + # + for f in $TARGETS; do + t=$ROOT/$DESTDIR/$f + if [ -f $t ]; then + if [ -z "$SRC" -a $HasSource = yes ]; then + $CMP -s $f $t || $MV $t $t.O + else + $CMP -s $SRC $t || $MV $t $t.O + fi + fi + install $f $t + done +elif [ $NoUpdate = yes ]; then + # + # A file that is never to be updated; the target + # is created only if it does not exist. + # + # NB: cannot be used with a special file 'cuz we + # use test -f to see if the file exists. + # + for f in $TARGETS; do + t=$ROOT/$DESTDIR/$f + test -f $t || install $f $t + done +else + # + # Normal case, a target that should be installed + # with the existing copy, optionally, saved first. + # + for f in $TARGETS; do + install $f $ROOT/$DESTDIR/$f + done +fi diff --git a/port/irix/so_locations b/port/irix/so_locations new file mode 100755 index 0000000..0f4f454 --- /dev/null +++ b/port/irix/so_locations @@ -0,0 +1,4 @@ +libtiff.so \ + :st = .text 0x5ff70000, 0x00030000:\ + :st = .data 0x5ffd0000, 0x00030000:\ + diff --git a/port/strcasecmp.c b/port/strcasecmp.c new file mode 100755 index 0000000..78163f9 --- /dev/null +++ b/port/strcasecmp.c @@ -0,0 +1,98 @@ +/* + * Copyright (c) 1987 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that: (1) source distributions retain this entire copyright + * notice and comment, and (2) distributions including binaries display + * the following acknowledgement: ``This product includes software + * developed by the University of California, Berkeley and its contributors'' + * in the documentation or other materials provided with the distribution + * and in all advertising materials mentioning features or use of this + * software. Neither the name of the University nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +#include +#include + +#if defined(LIBC_SCCS) && !defined(lint) +static const char sccsid[] = "@(#)strcasecmp.c 5.9 (Berkeley) 6/1/90"; +#endif /* LIBC_SCCS and not lint */ + +/* + * This array is designed for mapping upper and lower case letter + * together for a case independent comparison. The mappings are + * based upon ascii character sequences. + */ +static const unsigned char charmap[] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', + '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', +}; + +int +strcasecmp(s1, s2) + const char *s1, *s2; +{ + register const unsigned char *cm = charmap, + *us1 = (const unsigned char *)s1, + *us2 = (const unsigned char *)s2; + + while (cm[*us1] == cm[*us2++]) + if (*us1++ == '\0') + return (0); + return (cm[*us1] - cm[*--us2]); +} + +int +strncasecmp(s1, s2, n) + const char *s1, *s2; + register size_t n; +{ + if (n != 0) { + register const unsigned char *cm = charmap, + *us1 = (const unsigned char *)s1, + *us2 = (const unsigned char *)s2; + + do { + if (cm[*us1] != cm[*us2++]) + return (cm[*us1] - cm[*--us2]); + if (*us1++ == '\0') + break; + } while (--n != 0); + } + return (0); +} diff --git a/port/strtoul.c b/port/strtoul.c new file mode 100755 index 0000000..32762fd --- /dev/null +++ b/port/strtoul.c @@ -0,0 +1,107 @@ +/* + * Copyright (c) 1990 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)strtoul.c 5.3 (Berkeley) 2/23/91"; +#endif /* LIBC_SCCS and not lint */ + +#include +#include +#include +#include + +/* + * Convert a string to an unsigned long integer. + * + * Ignores `locale' stuff. Assumes that the upper and lower case + * alphabets and digits are each contiguous. + */ +unsigned long +strtoul(nptr, endptr, base) + const char *nptr; + char **endptr; + register int base; +{ + register const char *s = nptr; + register unsigned long acc; + register int c; + register unsigned long cutoff; + register int neg = 0, any, cutlim; + + /* + * See strtol for comments as to the logic used. + */ + do { + c = *s++; + } while (isspace(c)); + if (c == '-') { + neg = 1; + c = *s++; + } else if (c == '+') + c = *s++; + if ((base == 0 || base == 16) && + c == '0' && (*s == 'x' || *s == 'X')) { + c = s[1]; + s += 2; + base = 16; + } + if (base == 0) + base = c == '0' ? 8 : 10; + cutoff = (unsigned long)ULONG_MAX / (unsigned long)base; + cutlim = (unsigned long)ULONG_MAX % (unsigned long)base; + for (acc = 0, any = 0;; c = *s++) { + if (isdigit(c)) + c -= '0'; + else if (isalpha(c)) + c -= isupper(c) ? 'A' - 10 : 'a' - 10; + else + break; + if (c >= base) + break; + if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim) + any = -1; + else { + any = 1; + acc *= base; + acc += c; + } + } + if (any < 0) { + acc = ULONG_MAX; + errno = ERANGE; + } else if (neg) + acc = -acc; + if (endptr != 0) + *endptr = any ? s - 1 : (char *)nptr; + return (acc); +} diff --git a/readme b/readme new file mode 100755 index 0000000..18f06e9 --- /dev/null +++ b/readme @@ -0,0 +1,61 @@ +$Header: /home/cvsroot/libtiff/README,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ + + +TIFF Software Distribution +-------------------------- +This file is just a placeholder; all the documentation is now in +HTML in the html directory. To view the documentation point your +favorite WWW viewer at html/index.html; e.g. + + netscape html/index.html + +If you don't have an HTML viewer then you can read the HTML source +or fetch a PostScript version of this documentation from the directory + + ftp://ftp.sgi.com/graphics/tiff/doc + +If you can't hack either of these options then basically what you +want to do is: + + % ./configure + % make + % su + # make install + +If that doesn't do what you want, or something isn't clear then +sorry, but you're SOL. + + Sam Leffler (sam@engr.sgi.com) + + +Use and Copyright +----------------- +Silicon Graphics has seen fit to allow me to give this work away. It +is free. There is no support or guarantee of any sort as to its +operations, correctness, or whatever. If you do anything useful with +all or parts of it you need to honor the copyright notices. I would +also be interested in knowing about it and, hopefully, be acknowledged. + +The legal way of saying that is: + +Copyright (c) 1988-1997 Sam Leffler +Copyright (c) 1991-1997 Silicon Graphics, Inc. + +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. diff --git a/test_pics.sh b/test_pics.sh new file mode 100755 index 0000000..02da476 --- /dev/null +++ b/test_pics.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# +# The -f force flag will force new logs to overwrite existing ones. +# +FORCE=0 +if test "$1" = "-f" ; then + FORCE=1 + shift +fi + +# +# Loop over all passed TIFF files +# +for a in $* ; do + BASE=`dirname $a`/`basename $a .tif` + tools/tiffdump $a > ${BASE}.rpt.new + + if test $FORCE = 1 ; then + mv ${BASE}.rpt.new ${BASE}.rpt + continue; + fi + + if diff ${BASE}.rpt ${BASE}.rpt.new ; then + rm ${BASE}.rpt.new + else + echo Differences between ${BASE}.rpt and ${BASE}.rpt.new + fi +done diff --git a/todo b/todo new file mode 100755 index 0000000..e13a33b --- /dev/null +++ b/todo @@ -0,0 +1,9 @@ +# $Header: /home/cvsroot/libtiff/TODO,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ + +o remove lzw compression flags from tools, update man pages +o gif2tiff segaulting on selected images +o tiffcmp read data by strip/tile instead of scanline +o YCbCr sampling support +o extracate colorspace conversion support +o look at isolating all codecs from TIFF library +o JPEG colormode order dependency problem diff --git a/tools/Makefile.in b/tools/Makefile.in new file mode 100755 index 0000000..55cc9da --- /dev/null +++ b/tools/Makefile.in @@ -0,0 +1,259 @@ +# $Header: /home/cvsroot/libtiff/tools/Makefile.in,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# @WARNING@ +# +# TIFF Library Tools +# +# Copyright (c) 1988-1997 Sam Leffler +# Copyright (c) 1991-1997 Silicon Graphics, Inc. +# +# 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 Stanford 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. +# +DEPTH = .. + +SRCDIR = @RELSRCDIR@/tools +LIBDIR = @RELSRCDIR@/libtiff + +# +# VERSION: @VERSION@ +# DATE: @DATE@ +# TARGET: @TARGET@ +# CCOMPILER: @CCOMPILER@ +# +SHELL = @SCRIPT_SH@ +NULL = +CC = @CCOMPILER@ +INSTALL = @INSTALL@ +# +COPTS = @GCOPTS@ +OPTIMIZER=-O +IPATH = -I. -I${SRCDIR} -I${LIBDIR} +CFLAGS = @ENVOPTS@ ${COPTS} ${OPTIMIZER} ${IPATH} +# +TIFFLIB = ${DEPTH}/libtiff/libtiff.@DSOSUF@ +LIBJPEG = @LIBJPEG@ +LIBGZ = @LIBGZ@ +LIBTIFF = @TIFFLIBREF@ +LIBPORT = @LIBPORT@ +MACHLIBS= @MACHDEPLIBS@ +LIBS = ${LIBTIFF} ${LIBJPEG} ${LIBGZ} ${LIBPORT} ${MACHLIBS} +# +OBJS= \ + fax2tiff.o \ + fax2ps.o \ + gif2tiff.o \ + pal2rgb.o \ + ppm2tiff.o \ + rgb2ycbcr.o \ + ras2tiff.o \ + thumbnail.o \ + tiff2bw.o \ + tiff2rgba.o \ + tiff2ps.o \ + tiffcmp.o \ + tiffcp.o \ + tiffdither.o \ + tiffdump.o \ + tiffinfo.o \ + tiffmedian.o \ + tiffsplit.o \ + ${NULL} +TARGETS =\ + fax2tiff \ + fax2ps \ + gif2tiff \ + pal2rgb \ + ppm2tiff \ + rgb2ycbcr \ + thumbnail \ + ras2tiff \ + tiff2bw \ + tiff2rgba \ + tiff2ps \ + tiffcmp \ + tiffcp \ + tiffdither \ + tiffdump \ + tiffinfo \ + tiffmedian \ + tiffsplit \ + ${NULL} + +all: ${TARGETS} + @if [ "@LIBIMAGE@" = yes ]; then \ + ${MAKE} sgi2tiff; \ + else \ + true; \ + fi + @if [ "@LIBGL@" = yes ]; then \ + ${MAKE} tiffgt tiffsv; \ + else \ + true; \ + fi +install: all + ${INSTALL} -idb nostrip tiff.sw.tools -m 755 -dir @DIR_BIN@ + ${INSTALL} -idb nostrip tiff.sw.tools -m 755 -F @DIR_BIN@ -O ${TARGETS} + @if [ "@LIBIMAGE@" = yes ]; then \ + ${INSTALL} -idb tiff.sw.tools -m 755 -F @DIR_BIN@ -O sgi2tiff; \ + else \ + true; \ + fi + @if [ "@LIBGL@" = yes ]; then \ + ${INSTALL} -idb tiff.sw.tools -m 755 -F @DIR_BIN@ -O tiffgt tiffsv;\ + else \ + true; \ + fi +clean: + rm -f ${TARGETS} ${OBJS} sgigt.o tiffgt sgisv.o tiffsv \ + sgi2tiff.o sgi2tiff core a.out ycbcr + +# +# System-independent tools +# + +tiffinfo: tiffinfo.o ${TIFFLIB} + ${CC} -o tiffinfo ${CFLAGS} tiffinfo.o ${LIBS} +tiffinfo.o: ${SRCDIR}/tiffinfo.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffinfo.c + +tiffcmp:tiffcmp.o ${TIFFLIB} + ${CC} -o tiffcmp ${CFLAGS} tiffcmp.o ${LIBS} +tiffcmp.o: ${SRCDIR}/tiffcmp.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffcmp.c + +tiffcp: tiffcp.o ${TIFFLIB} + ${CC} -o tiffcp ${CFLAGS} tiffcp.o ${LIBS} +tiffcp.o: ${SRCDIR}/tiffcp.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffcp.c + +tiffdump: tiffdump.o + ${CC} -o tiffdump ${CFLAGS} tiffdump.o ${LIBS} +tiffdump.o: ${SRCDIR}/tiffdump.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffdump.c + +tiffmedian: tiffmedian.o ${TIFFLIB} + ${CC} -o tiffmedian ${CFLAGS} tiffmedian.o ${LIBS} +tiffmedian.o: ${SRCDIR}/tiffmedian.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffmedian.c + +tiffsplit: tiffsplit.o ${TIFFLIB} + ${CC} -o tiffsplit ${CFLAGS} tiffsplit.o ${LIBS} +tiffsplit.o: ${SRCDIR}/tiffsplit.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffsplit.c + +tiff2ps: tiff2ps.o ${TIFFLIB} + ${CC} -o tiff2ps ${CFLAGS} tiff2ps.o ${LIBS} +tiff2ps.o: ${SRCDIR}/tiff2ps.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiff2ps.c + +# +# Junky stuff... programs that are more examples of how +# to use the library than full-blown useful tools. +# + +# convert RGB image to B&W +tiff2bw: tiff2bw.o ${TIFFLIB} + ${CC} -o tiff2bw ${CFLAGS} tiff2bw.o ${LIBS} +tiff2bw.o: ${SRCDIR}/tiff2bw.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiff2bw.c + +# convert anything to RGBA. +tiff2rgba: tiff2rgba.o ${TIFFLIB} + ${CC} -o tiff2rgba ${CFLAGS} tiff2rgba.o ${LIBS} +tiff2rgba.o: ${SRCDIR}/tiff2rgba.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiff2rgba.c + +# convert B&W image to bilevel w/ FS dithering +tiffdither: tiffdither.o ${TIFFLIB} + ${CC} -o tiffdither ${CFLAGS} tiffdither.o ${LIBS} +tiffdither.o: ${SRCDIR}/tiffdither.c + ${CC} -c ${CFLAGS} ${SRCDIR}/tiffdither.c + +# simple Sun rasterfile converter +ras2tiff: ras2tiff.o ${TIFFLIB} + ${CC} -o ras2tiff ${CFLAGS} ras2tiff.o ${LIBS} +ras2tiff.o: ${SRCDIR}/ras2tiff.c + ${CC} -c ${CFLAGS} ${SRCDIR}/ras2tiff.c + +# simple GIF converter +gif2tiff: gif2tiff.o ${TIFFLIB} + ${CC} -o gif2tiff ${CFLAGS} gif2tiff.o ${LIBS} +gif2tiff.o: ${SRCDIR}/gif2tiff.c + ${CC} -c ${CFLAGS} ${SRCDIR}/gif2tiff.c + +# very limited PBM converter +ppm2tiff: ppm2tiff.o ${TIFFLIB} + ${CC} -o ppm2tiff ${CFLAGS} ppm2tiff.o ${LIBS} +ppm2tiff.o: ${SRCDIR}/ppm2tiff.c + ${CC} -c ${CFLAGS} ${SRCDIR}/ppm2tiff.c + +# Group 3/4 FAX file converter +fax2tiff: fax2tiff.o ${TIFFLIB} + ${CC} -o fax2tiff ${CFLAGS} fax2tiff.o ${LIBS} +fax2tiff.o: ${SRCDIR}/fax2tiff.c + ${CC} -c -I${LIBDIR} -I${DEPTH}/libtiff ${CFLAGS} ${SRCDIR}/fax2tiff.c + +# Group 3/4 FAX to encoded PS converter +fax2ps: fax2ps.o ${TIFFLIB} + ${CC} -o fax2ps ${CFLAGS} fax2ps.o ${LIBS} +fax2ps.o: ${SRCDIR}/fax2ps.c + ${CC} -c ${CFLAGS} ${SRCDIR}/fax2ps.c + +# convert Palette image to RGB +pal2rgb: pal2rgb.o ${TIFFLIB} + ${CC} -o pal2rgb ${CFLAGS} pal2rgb.o ${LIBS} +pal2rgb.o: ${SRCDIR}/pal2rgb.c + ${CC} -c ${CFLAGS} ${SRCDIR}/pal2rgb.c + +# convert RGB image to YCbCr +rgb2ycbcr: rgb2ycbcr.o ${TIFFLIB} + ${CC} -o rgb2ycbcr ${CFLAGS} rgb2ycbcr.o ${LIBS} +rgb2ycbcr.o: ${SRCDIR}/rgb2ycbcr.c + ${CC} -c ${CFLAGS} ${SRCDIR}/rgb2ycbcr.c + +# generate thumbnail images from fax (example of SubIFD usage) +thumbnail: thumbnail.o ${TIFFLIB} + ${CC} -o thumbnail ${CFLAGS} thumbnail.o ${LIBS} +thumbnail.o: ${SRCDIR}/thumbnail.c + ${CC} -c ${CFLAGS} ${SRCDIR}/thumbnail.c + +# +# System-specific tools. +# + +# +# sgi2tiff converts SGI RGB images to TIFF; it requires +# the SGI image library -limage. +# +sgi2tiff: sgi2tiff.o ${TIFFLIB} + ${CC} -o sgi2tiff ${CFLAGS} sgi2tiff.o -limage ${LIBS} +sgi2tiff.o: ${SRCDIR}/sgi2tiff.c + ${CC} -c ${CFLAGS} ${SRCDIR}/sgi2tiff.c + +# SGI versions of tiffgt & tiffsv that require -lgl +tiffgt: sgigt.o ${TIFFLIB} + ${CC} -o tiffgt ${CFLAGS} sgigt.o -lgutil -lgl ${LIBS} +sgigt.o: ${SRCDIR}/sgigt.c + ${CC} -c ${CFLAGS} ${SRCDIR}/sgigt.c + +tiffsv: sgisv.o ${TIFFLIB} + ${CC} -o tiffsv ${CFLAGS} sgisv.o -lgutil -lgl ${LIBS} +sgisv.o: ${SRCDIR}/sgisv.c + ${CC} -c ${CFLAGS} ${SRCDIR}/sgisv.c diff --git a/tools/Makefile.lcc b/tools/Makefile.lcc new file mode 100755 index 0000000..ad21791 --- /dev/null +++ b/tools/Makefile.lcc @@ -0,0 +1,137 @@ +# $Header: /home/cvsroot/libtiff/tools/Makefile.lcc,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ +# +# TIFF Library Tools +# +# Copyright (c) 1988-1997 Sam Leffler +# Copyright (c) 1991-1997 Silicon Graphics, Inc. +# +# 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 Stanford 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. +# +NULL= +IPATH= -I..\libtiff +# +# If you don't want the public domain getopt code, then +# simply null this out and you'll get whatever is in your +# libc (or similar). +# +GETOPT= getopt.o +# +# Library-wide configuration defines: +# Note that if you change the library-wide configuration, you'll +# need to manual force a full rebuild. +# +CONF_LIBRARY=\ + ${NULL} +COPTS= -Oloop -cwagshf -d1 -b0 -v -DNDEBUG -rr -j135i +CFLAGS= ${COPTS} ${IPATH} -DBINMODE='"b"' +# +LIBTIFF=..\libtiff\tiffrnb.lib +LIBS= -l${LIBTIFF} -lm +MACHALL=ras2tiff.ttp +OBJS=\ + fax2tiff.o \ + gif2tiff.o \ + pal2rgb.o \ + ppm2tiff.o \ + rgb2ycbcr.o \ + tiff2bw.o \ + tiff2rgba.o \ + tiff2ps.o \ + tiffcmp.o \ + tiffcp.o \ + tiffdither.o \ + tiffdump.o \ + tiffinfo.o \ + tiffmedian.o \ + tiffsplit.o \ + ras2tiff.o \ + ${GETOPT} \ + ${NULL} +ALL=\ + fax2tiff.ttp \ + gif2tiff.ttp \ + pal2rgb.ttp \ + ppm2tiff.ttp \ + rgb2ycbcr.ttp \ + tiff2bw.ttp \ + tiff2rgba.ttp \ + tiff2ps.ttp \ + tiffcmp.ttp \ + tiffcp.ttp \ + tiffdither.ttp \ + tiffdump.ttp \ + tiffinfo.ttp \ + tiffmedian.ttp \ + tiffsplit.ttp \ + ${MACHALL} \ + ${NULL} + +all: ${ALL} + +tiffinfo.ttp: tiffinfo.c ${GETOPT} ${LIBTIFF} + ${CC} -o tiffinfo.ttp ${CFLAGS} tiffinfo.c ${GETOPT} ${LIBS} +tiffcmp.ttp: tiffcmp.c ${GETOPT} ${LIBTIFF} + ${CC} -o tiffcmp.ttp ${CFLAGS} tiffcmp.c ${GETOPT} ${LIBS} +tiffcp.ttp: tiffcp.c ${LIBTIFF} + ${CC} -o tiffcp.ttp ${CFLAGS} tiffcp.c ${LIBS} +tiffdump.ttp: tiffdump.c + ${CC} -o tiffdump.ttp ${CFLAGS} tiffdump.c -lm ${LIBS} +tiffmedian.ttp: tiffmedian.c ${LIBTIFF} + ${CC} -o tiffmedian.ttp ${CFLAGS} tiffmedian.c ${LIBS} +tiffsplit.ttp: tiffsplit.c ${LIBTIFF} + ${CC} -o tiffsplit.ttp ${CFLAGS} tiffsplit.c ${LIBS} +tiff2ps.ttp: tiff2ps.c ${LIBTIFF} + ${CC} -o tiff2ps.ttp ${CFLAGS} tiff2ps.c ${LIBS} +# junky stuff... +# convert RGB image to B&W +tiff2bw.ttp: tiff2bw.c ${GETOPT} ${LIBTIFF} + ${CC} -o tiff2bw.ttp ${CFLAGS} tiff2bw.c ${GETOPT} ${LIBS} +# convert anything to RGBA +tiff2rgba.ttp: tiff2rgba.c ${GETOPT} ${LIBTIFF} + ${CC} -o tiff2rgba.ttp ${CFLAGS} tiff2rgba.c ${GETOPT} ${LIBS} +# convert B&W image to bilevel w/ FS dithering +tiffdither.ttp: tiffdither.c ${LIBTIFF} + ${CC} -o tiffdither.ttp ${CFLAGS} tiffdither.c ${LIBS} +# Group 3 FAX file converter +fax2tiff.ttp: fax2tiff.c ${GETOPT} ${LIBTIFF} + ${CC} -o fax2tiff.ttp ${CFLAGS} ${CONF_LIBRARY} fax2tiff.c ${GETOPT} ${LIBS} +# convert Palette image to RGB +pal2rgb.ttp: pal2rgb.c ${LIBTIFF} + ${CC} -o pal2rgb.ttp ${CFLAGS} pal2rgb.c ${LIBS} +# convert RGB image to YCbCr +rgb2ycbcr.ttp: rgb2ycbcr.c ${GETOPT} ${LIBTIFF} + ${CC} -o rgb2ycbcr.ttp ${CFLAGS} rgb2ycbcr.c ${GETOPT} ${LIBS} +# GIF converter +gif2tiff.ttp: gif2tiff.c ${LIBTIFF} + ${CC} -o gif2tiff.ttp ${CFLAGS} gif2tiff.c ${LIBS} +# PBM converter +ppm2tiff.ttp: ppm2tiff.c ${LIBTIFF} + ${CC} -o ppm2tiff.ttp ${CFLAGS} ppm2tiff.c ${LIBS} +# Sun rasterfile converter +ras2tiff.ttp: ras2tiff.c ${LIBTIFF} + ${CC} -o ras2tiff.ttp ${CFLAGS} ras2tiff.c ${LIBS} +# generate thumbnail images from fax +thumbnail: thumbnail.c ${LIBTIFF} + ${CC} -o thumbnail ${CFLAGS} thumbnail.c ${LIBS} -lm + +install: all + +clean: + rm -f ${ALL} ${OBJS} ycbcr.ttp diff --git a/tools/Makefile.vc b/tools/Makefile.vc new file mode 100755 index 0000000..6f3d5e1 --- /dev/null +++ b/tools/Makefile.vc @@ -0,0 +1,31 @@ +# +# Simple MS VC++ Makefile +# +# To build: +# C:\libtiff\tools> nmake /f makefile.vc +# +TARGETS = tiffcp.exe tiffinfo.exe tiffdump.exe fax2tiff.exe \ + fax2ps.exe gif2tiff.exe pal2rgb.exe ppm2tiff.exe \ + rgb2ycbcr.exe thumbnail.exe ras2tiff.exe tiff2bw.exe \ + tiff2rgba.exe tiff2ps.exe tiffcmp.exe tiffdither.exe \ + tiffmedian.exe tiffsplit.exe + +EXTRA_OBJ = strcasecmp.obj getopt.obj + +LIBS = ..\libtiff\libtiff.lib + +CFLAGS = /nologo -I..\libtiff /D_WINDOWS + +default: $(EXTRA_OBJ) $(TARGETS) + +.c.exe: + $(CC) $(CFLAGS) $*.c $(EXTRA_OBJ) $(LIBS) + +getopt.obj: ..\port\getopt.c + $(CC) /c $(CFLAGS) ..\port\getopt.c + +strcasecmp.obj: ..\port\strcasecmp.c + $(CC) /c $(CFLAGS) ..\port\strcasecmp.c + +clean: + del *.obj *.exe diff --git a/tools/fax2ps.c b/tools/fax2ps.c new file mode 100755 index 0000000..3a89330 --- /dev/null +++ b/tools/fax2ps.c @@ -0,0 +1,437 @@ +/* $Header: /home/cvsroot/libtiff/tools/fax2ps.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $" */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ +#include +#include +#include +#include +#include + +#if defined(VMS) +#include +#elif defined(_WINDOWS) +#include +#define off_t toff_t +#else +#include +#endif + +#include "tiffio.h" + +float defxres = 204.; /* default x resolution (pixels/inch) */ +float defyres = 98.; /* default y resolution (lines/inch) */ +const float basePageWidth = 8.5; +const float basePageHeight = 11.0; +const float half = 0.5; +const float points = 72.0; +float pageWidth = 8.5; /* image page width (inches) */ +float pageHeight = 11.0; /* image page length (inches) */ +int scaleToPage = 0; /* if true, scale raster to page dimensions */ +int totalPages = 0; /* total # pages printed */ +int row; /* current output row */ +int maxline = 512; /* max output line of PostScript */ + +/* + * Turn a bit-mapped scanline into the appropriate sequence + * of PostScript characters to be rendered. + * + * Original version written by Bret D. Whissel, + * Florida State University Meteorology Department + * March 13-15, 1995. + */ +static void +printruns(unsigned char* buf, uint32* runs, uint32* erun, uint32 lastx) +{ + static struct { + char white, black; + short width; + } WBarr[] = { + { 'd', 'n', 512 }, { 'e', 'o', 256 }, { 'f', 'p', 128 }, + { 'g', 'q', 64 }, { 'h', 'r', 32 }, { 'i', 's', 16 }, + { 'j', 't', 8 }, { 'k', 'u', 4 }, { 'l', 'v', 2 }, + { 'm', 'w', 1 } + }; + static char* svalue = + " !\"#$&'*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abc"; + int colormode = 1; /* 0 for white, 1 for black */ + int runlength = 0; + int n = maxline; + int x = 0; + int l; + + (void) buf; + printf("%d m(", row++); + while (runs < erun) { + if (!runlength) { + colormode ^= 1; + runlength = *runs++; + if (x+runlength > lastx) + runlength = runs[-1] = lastx-x; + x += runlength; + if (!colormode && runs == erun) + break; /* don't bother printing the final white run */ + } + /* + * If a runlength is greater than 6 pixels, then spit out + * black or white characters until the runlength drops to + * 6 or less. Once a runlength is <= 6, then combine black + * and white runlengths until a 6-pixel pattern is obtained. + * Then write out the special character. Six-pixel patterns + * were selected since 64 patterns is the largest power of + * two less than the 92 "easily printable" PostScript + * characters (i.e., no escape codes or octal chars). + */ + l = 0; + while (runlength > 6) { /* Run is greater than six... */ + if (runlength >= WBarr[l].width) { + if (n == 0) { + putchar('\n'); + n = maxline; + } + putchar(colormode ? WBarr[l].black : WBarr[l].white), n--; + runlength -= WBarr[l].width; + } else + l++; + } + while (runlength > 0 && runlength <= 6) { + int bitsleft = 6; + int t = 0; + while (bitsleft) { + if (runlength <= bitsleft) { + if (colormode) + t |= ((1 << runlength)-1) << (bitsleft-runlength); + bitsleft -= runlength; + runlength = 0; + if (bitsleft) { + if (runs >= erun) + break; + colormode ^= 1; + runlength = *runs++; + if (x+runlength > lastx) + runlength = runs[-1] = lastx-x; + x += runlength; + } + } else { /* runlength exceeds bits left */ + if (colormode) + t |= ((1 << bitsleft)-1); + runlength -= bitsleft; + bitsleft = 0; + } + } + if (n == 0) { + putchar('\n'); + n = maxline; + } + putchar(svalue[t]), n--; + } + } + printf(")s\n"); +} + +void +printTIF(TIFF* tif, int pageNumber) +{ + uint32 w, h; + uint16 unit; + float xres, yres; + tstrip_t s, ns; + + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); + if (!TIFFGetField(tif, TIFFTAG_XRESOLUTION, &xres)) { + TIFFWarning(TIFFFileName(tif), + "No x-resolution, assuming %g dpi", defxres); + xres = defxres; + } + if (!TIFFGetField(tif, TIFFTAG_YRESOLUTION, &yres)) { + TIFFWarning(TIFFFileName(tif), + "No y-resolution, assuming %g lpi", defyres); + yres = defyres; /* XXX */ + } + if (TIFFGetField(tif, TIFFTAG_RESOLUTIONUNIT, &unit) && + unit == RESUNIT_CENTIMETER) { + xres *= 25.4; + yres *= 25.4; + } + + printf("%%%%Page: \"%d\" %d\n", pageNumber, pageNumber); + printf("/$pageTop save def gsave\n"); + if (scaleToPage) { + float yscale = pageHeight / (h/yres); + float xscale = pageWidth / (w/xres); + printf("%d %d translate\n", + (int) (((basePageWidth - pageWidth) * points) * half), + (int)((yscale*(h/yres)*points) + + (basePageHeight - pageHeight) * points * half) ); + printf("%g %g scale\n", (72.*xscale)/xres, -(72.*yscale)/yres); + } else { + printf("%d %d translate\n", + (int) ((basePageWidth - pageWidth) * points * half), + (int)((72.*h/yres) + + (basePageHeight - pageHeight) * points * half) ); + printf("%g %g scale\n", 72./xres, -72./yres); + } + printf("0 setgray\n"); + TIFFSetField(tif, TIFFTAG_FAXFILLFUNC, printruns); + ns = TIFFNumberOfStrips(tif); + row = 0; + for (s = 0; s < ns; s++) + (void) TIFFReadEncodedStrip(tif, s, (tdata_t) NULL, (tsize_t) -1); + printf("p\n"); + printf("grestore $pageTop restore\n"); + totalPages++; +} + +#define GetPageNumber(tif) \ +TIFFGetField(tif, TIFFTAG_PAGENUMBER, &pn, &ptotal) + +int +findPage(TIFF* tif, int pageNumber) +{ + uint16 pn = (uint16) -1; + uint16 ptotal = (uint16) -1; + if (GetPageNumber(tif)) { + while (pn != pageNumber && TIFFReadDirectory(tif) && GetPageNumber(tif)) + ; + return (pn == pageNumber); + } else + return (TIFFSetDirectory(tif, pageNumber-1)); +} + +void +fax2ps(TIFF* tif, int npages, int* pages, char* filename) +{ + if (npages > 0) { + uint16 pn, ptotal; + int i; + + if (!GetPageNumber(tif)) + fprintf(stderr, "%s: No page numbers, counting directories.\n", + filename); + for (i = 0; i < npages; i++) { + if (findPage(tif, pages[i])) + printTIF(tif, pages[i]); + else + fprintf(stderr, "%s: No page number %d\n", filename, pages[i]); + } + } else { + int pageNumber = 1; + do + printTIF(tif, pageNumber++); + while (TIFFReadDirectory(tif)); + } +} + +#undef GetPageNumber + +/* + * Create a special PostScript font for printing FAX documents. By taking + * advantage of the font-cacheing mechanism, a substantial speed-up in + * rendering time is realized. + */ +static void +emitFont(FILE* fd) +{ + static const char* fontPrologue[] = { + "/newfont 10 dict def newfont begin /FontType 3 def /FontMatrix [1", + "0 0 1 0 0] def /FontBBox [0 0 512 1] def /Encoding 256 array def", + "0 1 31{Encoding exch /255 put}for 120 1 255{Encoding exch /255", + "put}for Encoding 37 /255 put Encoding 40 /255 put Encoding 41 /255", + "put Encoding 92 /255 put /count 0 def /ls{Encoding exch count 3", + "string cvs cvn put /count count 1 add def}def 32 1 36{ls}for", + "38 1 39{ls}for 42 1 91{ls}for 93 1 99{ls}for /count 100", + "def 100 1 119{ls}for /CharDict 5 dict def CharDict begin /white", + "{dup 255 eq{pop}{1 dict begin 100 sub neg 512 exch bitshift", + "/cw exch def cw 0 0 0 cw 1 setcachedevice end}ifelse}def /black", + "{dup 255 eq{pop}{1 dict begin 110 sub neg 512 exch bitshift", + "/cw exch def cw 0 0 0 cw 1 setcachedevice 0 0 moveto cw 0 rlineto", + "0 1 rlineto cw neg 0 rlineto closepath fill end}ifelse}def /numbuild", + "{dup 255 eq{pop}{6 0 0 0 6 1 setcachedevice 0 1 5{0 moveto", + "dup 32 and 32 eq{1 0 rlineto 0 1 rlineto -1 0 rlineto closepath", + "fill newpath}if 1 bitshift}for pop}ifelse}def /.notdef {}", + "def /255 {}def end /BuildChar{exch begin dup 110 ge{Encoding", + "exch get 3 string cvs cvi CharDict /black get}{dup 100 ge {Encoding", + "exch get 3 string cvs cvi CharDict /white get}{Encoding exch get", + "3 string cvs cvi CharDict /numbuild get}ifelse}ifelse exec end", + "}def end /Bitfont newfont definefont 1 scalefont setfont", + NULL + }; + int i; + for (i = 0; fontPrologue[i] != NULL; i++) + fprintf(fd, "%s\n", fontPrologue[i]); +} + +static int +pcompar(const void* va, const void* vb) +{ + const int* pa = (const int*) va; + const int* pb = (const int*) vb; + return (*pa - *pb); +} + +static void usage(int code); + +int +main(int argc, char** argv) +{ + extern int optind; + extern char* optarg; + int c, pageNumber; + int* pages = 0, npages = 0; + int dowarnings = 0; /* if 1, enable library warnings */ + time_t t; + TIFF* tif; + + while ((c = getopt(argc, argv, "l:p:x:y:W:H:wS")) != -1) + switch (c) { + case 'H': /* page height */ + pageHeight = atof(optarg); + break; + case 'S': /* scale to page */ + scaleToPage = 1; + break; + case 'W': /* page width */ + pageWidth = atof(optarg); + break; + case 'p': /* print specific page */ + pageNumber = atoi(optarg); + if (pageNumber < 1) { + fprintf(stderr, "%s: Invalid page number (must be > 0).\n", + optarg); + usage(-1); + } + if (pages) + pages = (int*) realloc((char*) pages, (npages+1)*sizeof (int)); + else + pages = (int*) malloc(sizeof (int)); + pages[npages++] = pageNumber; + break; + case 'w': + dowarnings = 1; + break; + case 'x': + defxres = atof(optarg); + break; + case 'y': + defyres = atof(optarg); + break; + case 'l': + maxline = atoi(optarg); + break; + case '?': + usage(-1); + } + if (npages > 0) + qsort(pages, npages, sizeof (int), pcompar); + if (!dowarnings) + TIFFSetWarningHandler(0); + printf("%%!PS-Adobe-3.0\n"); + printf("%%%%Creator: fax2ps\n"); +#ifdef notdef + printf("%%%%Title: %s\n", file); +#endif + t = time(0); + printf("%%%%CreationDate: %s", ctime(&t)); + printf("%%%%Origin: 0 0\n"); + printf("%%%%BoundingBox: 0 0 %u %u\n", + (int)(pageWidth*72), (int)(pageHeight*72)); /* XXX */ + printf("%%%%Pages: (atend)\n"); + printf("%%%%EndComments\n"); + printf("%%%%BeginProlog\n"); + emitFont(stdout); + printf("/d{bind def}def\n"); /* bind and def proc */ + printf("/m{0 exch moveto}d\n"); + printf("/s{show}d\n"); + printf("/p{showpage}d \n"); /* end page */ + printf("%%%%EndProlog\n"); + if (optind < argc) { + do { + tif = TIFFOpen(argv[optind], "r"); + if (tif) { + fax2ps(tif, npages, pages, argv[optind]); + TIFFClose(tif); + } else + fprintf(stderr, "%s: Can not open, or not a TIFF file.\n", + argv[optind]); + } while (++optind < argc); + } else { + int n; + FILE* fd; + char temp[1024], buf[16*1024]; + + strcpy(temp, "/tmp/fax2psXXXXXX"); + (void) mktemp(temp); + fd = fopen(temp, "w"); + if (fd == NULL) { + fprintf(stderr, "Could not create temp file \"%s\"\n", temp); + exit(-2); + } + while ((n = read(fileno(stdin), buf, sizeof (buf))) > 0) + write(fileno(fd), buf, n); + tif = TIFFOpen(temp, "r"); +#ifndef VMS + unlink(temp); +#else + remove(temp); +#endif + if (tif) { + fax2ps(tif, npages, pages, ""); + TIFFClose(tif); + } else + fprintf(stderr, "%s: Can not open, or not a TIFF file.\n", temp); + fclose(fd); + } + printf("%%%%Trailer\n"); + printf("%%%%Pages: %u\n", totalPages); + printf("%%%%EOF\n"); + + return (0); +} + +char* stuff[] = { +"usage: fax2ps [options] [input.tif ...]", +"where options are:", +" -w suppress warning messages", +" -l chars set maximum output line length for generated PostScript", +" -p page# select page to print (can use multiple times)", +" -x xres set default horizontal resolution of input data (dpi)", +" -y yres set default vertical resolution of input data (lpi)", +" -S scale output to page size", +" -W width set output page width (inches), default is 8.5", +" -H height set output page height (inchest), default is 11", +NULL +}; + +static void +usage(int code) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(code); +} diff --git a/tools/fax2tiff.c b/tools/fax2tiff.c new file mode 100755 index 0000000..eb4cbb8 --- /dev/null +++ b/tools/fax2tiff.c @@ -0,0 +1,359 @@ +/* $Header: /home/cvsroot/libtiff/tools/fax2tiff.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1990-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * Convert a CCITT Group 3 FAX file to TIFF Group 3 format. + */ +#include +#include /* should have atof & getopt */ +#include "tiffiop.h" + +#ifndef BINMODE +#define BINMODE +#endif + +#ifndef EXIT_SUCCESS +#define EXIT_SUCCESS 0 +#endif +#ifndef EXIT_FAILURE +#define EXIT_FAILURE 1 +#endif + +TIFF *faxTIFF; +#define XSIZE 1728 +char rowbuf[TIFFhowmany(XSIZE,8)]; +char refbuf[TIFFhowmany(XSIZE,8)]; + +int verbose; +int stretch; +uint16 badfaxrun; +uint32 badfaxlines; + +int copyFaxFile(TIFF* tifin, TIFF* tifout); +static void usage(void); + +static tsize_t +DummyReadProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + (void) fd; (void) buf; (void) size; + return (0); +} + +static tsize_t +DummyWriteProc(thandle_t fd, tdata_t buf, tsize_t size) +{ + (void) fd; (void) buf; (void) size; + return (size); +} + +int +main(int argc, char* argv[]) +{ + FILE *in; + TIFF *out = NULL; + TIFFErrorHandler whandler; + int compression = COMPRESSION_CCITTFAX3; + int fillorder = FILLORDER_LSB2MSB; + uint32 group3options = GROUP3OPT_FILLBITS|GROUP3OPT_2DENCODING; + int photometric = PHOTOMETRIC_MINISWHITE; + int mode = FAXMODE_CLASSF; + int rows; + int c; + int pn, npages; + extern int optind; + extern char* optarg; + + /* smuggle a descriptor out of the library */ + faxTIFF = TIFFClientOpen("(FakeInput)", "w", (thandle_t) -1, + DummyReadProc, DummyWriteProc, + NULL, NULL, NULL, NULL, NULL); + if (faxTIFF == NULL) + return (EXIT_FAILURE); + faxTIFF->tif_mode = O_RDONLY; + + TIFFSetField(faxTIFF, TIFFTAG_IMAGEWIDTH, XSIZE); + TIFFSetField(faxTIFF, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(faxTIFF, TIFFTAG_BITSPERSAMPLE, 1); + TIFFSetField(faxTIFF, TIFFTAG_FILLORDER, FILLORDER_LSB2MSB); + TIFFSetField(faxTIFF, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(faxTIFF, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); + TIFFSetField(faxTIFF, TIFFTAG_YRESOLUTION, 196.); + TIFFSetField(faxTIFF, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH); + /* NB: this is normally setup when a directory is read */ + faxTIFF->tif_scanlinesize = TIFFScanlineSize(faxTIFF); + + while ((c = getopt(argc, argv, "R:o:2BLMW14cflmpsvwz")) != -1) + switch (c) { + /* input-related options */ + case '2': /* input is 2d-encoded */ + TIFFSetField(faxTIFF, + TIFFTAG_GROUP3OPTIONS, GROUP3OPT_2DENCODING); + break; + case 'B': /* input has 0 mean black */ + TIFFSetField(faxTIFF, + TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + break; + case 'L': /* input has lsb-to-msb fillorder */ + TIFFSetField(faxTIFF, + TIFFTAG_FILLORDER, FILLORDER_LSB2MSB); + break; + case 'M': /* input has msb-to-lsb fillorder */ + TIFFSetField(faxTIFF, + TIFFTAG_FILLORDER, FILLORDER_MSB2LSB); + break; + case 'R': /* input resolution */ + TIFFSetField(faxTIFF, + TIFFTAG_YRESOLUTION, atof(optarg)); + break; + case 'W': /* input has 0 mean white */ + TIFFSetField(faxTIFF, + TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); + break; + + /* output-related options */ + case '1': /* generate 1d-encoded output */ + group3options &= ~GROUP3OPT_2DENCODING; + break; + case '4': /* generate g4-encoded output */ + compression = COMPRESSION_CCITTFAX4; + break; + case 'c': /* generate "classic" g3 format */ + mode = FAXMODE_CLASSIC; + break; + case 'f': /* generate Class F format */ + mode = FAXMODE_CLASSF; + break; + case 'm': /* output's fillorder is msb-to-lsb */ + fillorder = FILLORDER_MSB2LSB; + break; + case 'o': + out = TIFFOpen(optarg, "w"); + if (out == NULL) + return EXIT_FAILURE; + break; + case 'p': /* zero pad output scanline EOLs */ + group3options &= ~GROUP3OPT_FILLBITS; + break; + case 's': /* stretch image by dup'ng scanlines */ + stretch = 1; + break; + case 'w': /* undocumented -- for testing */ + photometric = PHOTOMETRIC_MINISBLACK; + break; + + case 'z': /* undocumented -- for testing */ + compression = COMPRESSION_LZW; + break; + + case 'v': /* -v for info */ + verbose++; + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (out == NULL) { + out = TIFFOpen("fax.tif", "w"); + if (out == NULL) + return (EXIT_FAILURE); + } + faxTIFF->tif_readproc = out->tif_readproc; /* XXX */ + faxTIFF->tif_writeproc = out->tif_writeproc; /* XXX */ + faxTIFF->tif_seekproc = out->tif_seekproc; /* XXX */ + faxTIFF->tif_closeproc = out->tif_closeproc; /* XXX */ + faxTIFF->tif_sizeproc = out->tif_sizeproc; /* XXX */ + faxTIFF->tif_mapproc = out->tif_mapproc; /* XXX */ + faxTIFF->tif_unmapproc = out->tif_unmapproc; /* XXX */ + + npages = argc - optind; + if (npages < 1) + usage(); + + /* NB: this must be done after directory info is setup */ + TIFFSetField(faxTIFF, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX3); + for (pn = 0; optind < argc; pn++, optind++) { + in = fopen(argv[optind], "r" BINMODE); + if (in == NULL) { + fprintf(stderr, + "%s: %s: Can not open\n", argv[0], argv[optind]); + continue; + } + faxTIFF->tif_fd = fileno(in); + faxTIFF->tif_clientdata = (thandle_t) faxTIFF->tif_fd; + faxTIFF->tif_name = argv[optind]; + TIFFSetField(out, TIFFTAG_IMAGEWIDTH, XSIZE); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 1); + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, photometric); + TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 1); + if (compression == COMPRESSION_CCITTFAX3) { + TIFFSetField(out, TIFFTAG_GROUP3OPTIONS, group3options); + TIFFSetField(out, TIFFTAG_FAXMODE, mode); + } + if (compression == COMPRESSION_CCITTFAX3 || + compression == COMPRESSION_CCITTFAX4) + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, -1L); + else + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, + TIFFDefaultStripSize(out, 0)); + TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(out, TIFFTAG_FILLORDER, fillorder); + TIFFSetField(out, TIFFTAG_SOFTWARE, "fax2tiff"); + TIFFSetField(out, TIFFTAG_XRESOLUTION, 204.0); + if (!stretch) { + float yres; + TIFFGetField(faxTIFF, TIFFTAG_YRESOLUTION, &yres); + TIFFSetField(out, TIFFTAG_YRESOLUTION, yres); + } else + TIFFSetField(out, TIFFTAG_YRESOLUTION, 196.); + TIFFSetField(out, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH); + TIFFSetField(out, TIFFTAG_PAGENUMBER, pn+1, npages); + + if (!verbose) + whandler = TIFFSetWarningHandler(NULL); + rows = copyFaxFile(faxTIFF, out); + fclose(in); + if (!verbose) + (void) TIFFSetWarningHandler(whandler); + + TIFFSetField(out, TIFFTAG_IMAGELENGTH, rows); + + if (verbose) { + fprintf(stderr, "%s:\n", argv[optind]); + fprintf(stderr, "%d rows in input\n", rows); + fprintf(stderr, "%ld total bad rows\n", + (long) badfaxlines); + fprintf(stderr, "%d max consecutive bad rows\n", badfaxrun); + } + if (compression == COMPRESSION_CCITTFAX3 && + mode == FAXMODE_CLASSF) { + TIFFSetField(out, TIFFTAG_BADFAXLINES, badfaxlines); + TIFFSetField(out, TIFFTAG_CLEANFAXDATA, badfaxlines ? + CLEANFAXDATA_REGENERATED : CLEANFAXDATA_CLEAN); + TIFFSetField(out, TIFFTAG_CONSECUTIVEBADFAXLINES, badfaxrun); + } + TIFFWriteDirectory(out); + } + TIFFClose(out); + return (EXIT_SUCCESS); +} + +int +copyFaxFile(TIFF* tifin, TIFF* tifout) +{ + uint32 row; + uint16 badrun; + int ok; + + tifin->tif_rawdatasize = TIFFGetFileSize(tifin); + tifin->tif_rawdata = _TIFFmalloc(tifin->tif_rawdatasize); + if (!ReadOK(tifin, tifin->tif_rawdata, tifin->tif_rawdatasize)) { + TIFFError(tifin->tif_name, "%s: Read error at scanline 0"); + return (0); + } + tifin->tif_rawcp = tifin->tif_rawdata; + tifin->tif_rawcc = tifin->tif_rawdatasize; + + (*tifin->tif_setupdecode)(tifin); + (*tifin->tif_predecode)(tifin, (tsample_t) 0); + tifin->tif_row = 0; + badfaxlines = 0; + badfaxrun = 0; + + _TIFFmemset(refbuf, 0, sizeof (refbuf)); + row = 0; + badrun = 0; /* current run of bad lines */ + while (tifin->tif_rawcc > 0) { + ok = (*tifin->tif_decoderow)(tifin, (tdata_t) rowbuf, + sizeof (rowbuf), 0); + if (!ok) { + badfaxlines++; + badrun++; + /* regenerate line from previous good line */ + _TIFFmemcpy(rowbuf, refbuf, sizeof (rowbuf)); + } else { + if (badrun > badfaxrun) + badfaxrun = badrun; + badrun = 0; + _TIFFmemcpy(refbuf, rowbuf, sizeof (rowbuf)); + } + tifin->tif_row++; + + if (TIFFWriteScanline(tifout, rowbuf, row, 0) < 0) { + fprintf(stderr, "%s: Write error at row %ld.\n", + tifout->tif_name, (long) row); + break; + } + row++; + if (stretch) { + if (TIFFWriteScanline(tifout, rowbuf, row, 0) < 0) { + fprintf(stderr, "%s: Write error at row %ld.\n", + tifout->tif_name, (long) row); + break; + } + row++; + } + } + if (badrun > badfaxrun) + badfaxrun = badrun; + _TIFFfree(tifin->tif_rawdata); + return (row); +} + +char* stuff[] = { +"usage: fax2tiff [options] input.g3...", +"where options are:", +" -2 input data is 2d encoded", +" -B input data has min 0 means black", +" -L input data has LSB2MSB bit order (default)", +" -M input data has MSB2LSB bit order", +" -W input data has min 0 means white (default)", +" -R # input data has # resolution (lines/inch) (default is 196)", +"", +" -o out.tif write output to out.tif", +" -1 generate 1d-encoded output (default is G3 2d)", +" -4 generate G4-encoded output (default is G3 2D)", +" -c generate \"classic\" TIFF format (default is TIFF/F)", +" -f generate TIFF Class F (TIFF/F) format (default)", +" -m output fill order is MSB2LSB (default is LSB2MSB)", +" -p do not byte-align EOL codes in output (default is byte-align)", +" -s stretch image by duplicating scanlines", +" -v print information about conversion work", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(EXIT_FAILURE); +} diff --git a/tools/gif2tiff.c b/tools/gif2tiff.c new file mode 100755 index 0000000..dd1f282 --- /dev/null +++ b/tools/gif2tiff.c @@ -0,0 +1,513 @@ +/* $Header: /home/cvsroot/libtiff/tools/gif2tiff.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1990-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +/* + * convert a GIF file into a TIFF file. + * based on Paul Haeberli's fromgif program which in turn is + * based on a GIF file reader by Marcel J.E. Mol March 23 1989 + * + * if input is 320 by 200 pixel aspect is probably 1.2 + * if input is 640 350 pixel aspect is probably 1.37 + * + */ +#include +#include +#include +#include + +#include "tiffio.h" + +#if defined(_WINDOWS) || defined(MSDOS) +#define BINMODE "b" +#else +#define BINMODE +#endif + +#define GIFGAMMA (1.5) /* smaller makes output img brighter */ +#define IMAX 0xffff /* max intensity value */ +#define EXTRAFUDGE 128 /* some people write BAD .gif files */ + +#define streq(a,b) (strcmp(a,b) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) + +unsigned short gamtab[256]; + +void +makegamtab(float gam) +{ + int i; + + for(i=0; i<256; i++) + gamtab[i] = IMAX*pow(i/255.0,gam)+0.5; +} + +char* stuff[] = { +"usage: gif2tiff [options] input.gif output.tif", +"where options are:", +" -r # make each strip have no more than # rows", +"", +" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", +" (no longer supported by default due to Unisys patent enforcement)", +" -c zip[:opts] compress output with deflate encoding", +" -c packbits compress output with packbits encoding", +" -c none use no compression algorithm on output", +"", +"LZW and deflate options:", +" # set predictor value", +"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} + +#define COLSIZE 256 + +unsigned char *stackp; +unsigned int prefix[4096]; +unsigned char suffix[4096]; +unsigned char stack[4096]; +int datasize,codesize,codemask; /* Decoder working variables */ +int clear,eoi; /* Special code values */ +int avail, oldcode; + +FILE *infile; +int global; /* Is there a global color map? */ +int globalbits; /* Number of bits of global colors */ +unsigned char globalmap[COLSIZE][3];/* RGB values for global color map */ +unsigned char *raster; /* Decoded image data */ +unsigned long width, height; +unsigned short red[COLSIZE]; +unsigned short green[COLSIZE]; +unsigned short blue[COLSIZE]; +char *filename, *imagename; + +static uint16 compression = COMPRESSION_PACKBITS; +static uint16 predictor = 0; +static uint32 rowsperstrip = (uint32) -1; +static int processCompressOptions(char*); + +int convert(void); +int checksignature(void); +void readscreen(void); +int readgifimage(char*); +void readextension(void); +int readraster(void); +int process(int, unsigned char**); +void initcolors(unsigned char [COLSIZE][3], int); +void rasterize(int, char*); + +int +main(int argc, char* argv[]) +{ + extern int optind; + extern char *optarg; + int c, status; + + while ((c = getopt(argc, argv, "c:r:")) != -1) + switch (c) { + case 'c': /* compression scheme */ + if (!processCompressOptions(optarg)) + usage(); + break; + case 'r': /* rows/strip */ + rowsperstrip = atoi(optarg); + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind != 2) + usage(); + + makegamtab(GIFGAMMA); + filename = argv[optind]; + imagename = argv[optind+1]; + if ((infile = fopen(imagename, "r" BINMODE)) != NULL) { + int c; + fclose(infile); + printf("overwrite %s? ", imagename); fflush(stdout); + c = getc(stdin); + if (c != 'y' && c != 'Y') + return (1); + } + if ((infile = fopen(filename, "r" BINMODE)) == NULL) { + perror(filename); + return (1); + } + status = convert(); + fclose(infile); + return (status); +} + +static int +processCompressOptions(char* opt) +{ + if (streq(opt, "none")) + compression = COMPRESSION_NONE; + else if (streq(opt, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (strneq(opt, "lzw", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_LZW; + } else if (strneq(opt, "zip", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_DEFLATE; + } else + return (0); + return (1); +} + +int +convert(void) +{ + int ch; + char* mode = "w"; + + if (!checksignature()) + return (-1); + readscreen(); + while ((ch = getc(infile)) != ';' && ch != EOF) { + switch (ch) { + case '\0': break; /* this kludge for non-standard files */ + case ',': if (!readgifimage(mode)) + return (-1); + mode = "a"; /* subsequent images append */ + break; + case '!': readextension(); + break; + default: fprintf(stderr, "illegal GIF block type\n"); + return (-1); + } + } + return (0); +} + +int +checksignature(void) +{ + char buf[6]; + + fread(buf,1,6,infile); + if (strncmp(buf,"GIF",3)) { + fprintf(stderr, "file is not a GIF file\n"); + return 0; + } + if (strncmp(&buf[3],"87a",3)) { + fprintf(stderr, "unknown GIF version number\n"); + return 0; + } + return 1; +} + +/* + * readscreen - + * Get information which is global to all the images stored + * in the file + */ +void +readscreen(void) +{ + unsigned char buf[7]; + + fread(buf,1,7,infile); + global = buf[4] & 0x80; + if (global) { + globalbits = (buf[4] & 0x07) + 1; + fread(globalmap,3,1< 0; count = getc(infile)) { + fread(buf,1,count,infile); + for (ch=buf; count-- > 0; ch++) { + datum += (unsigned long) *ch << bits; + bits += 8; + while (bits >= codesize) { + code = datum & codemask; + datum >>= codesize; + bits -= codesize; + if (code == eoi) { /* This kludge put in */ + goto exitloop; /* because some GIF files*/ + } /* aren't standard */ + if (!process(code, &fill)) { + status = 0; + goto exitloop; + } + } + } + if (fill >= raster + width*height) { + fprintf(stderr, "raster full before eoi code\n"); + break; + } + } +exitloop: + if (fill != raster + width*height) { + fprintf(stderr, "warning: wrong rastersize: %ld bytes\n", + (long) (fill-raster)); + fprintf(stderr, " instead of %ld bytes\n", + (long) width*height); + } + return status; +} + +/* + * process - + * Process a compression code. "clear" resets the code table. + * Otherwise make a new code table entry, and output the bytes + * associated with the code. + */ +int +process(register int code, unsigned char** fill) +{ + int incode; + static unsigned char firstchar; + + if (code == clear) { + codesize = datasize + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + return 1; + } + + if (oldcode == -1) { + *(*fill)++ = suffix[code]; + firstchar = oldcode = code; + return 1; + } + if (code > avail) { + fprintf(stderr, "code %d too large for %d\n", code, avail); + return 0; + } + + incode = code; + if (code == avail) { /* the first code is always < avail */ + *stackp++ = firstchar; + code = oldcode; + } + while (code > clear) { + *stackp++ = suffix[code]; + code = prefix[code]; + } + + *stackp++ = firstchar = suffix[code]; + prefix[avail] = oldcode; + suffix[avail] = firstchar; + avail++; + + if (((avail & codemask) == 0) && (avail < 4096)) { + codesize++; + codemask += avail; + } + oldcode = incode; + do { + *(*fill)++ = *--stackp; + } while (stackp > stack); + return 1; +} + +/* + * initcolors - + * Convert a color map (local or global) to arrays with R, G and B + * values. + * + */ +void +initcolors(unsigned char colormap[COLSIZE][3], int ncolors) +{ + register int i; + + for (i = 0; i < ncolors; i++) { + red[i] = gamtab[colormap[i][0]]; + green[i] = gamtab[colormap[i][1]]; + blue[i] = gamtab[colormap[i][2]]; + } +} + +void +rasterize(int interleaved, char* mode) +{ + register long row; + unsigned char *newras; + unsigned char *ras; + TIFF *tif; + tstrip_t strip; + tsize_t stripsize; + + if ((newras = (unsigned char*) _TIFFmalloc(width*height+EXTRAFUDGE)) == NULL) { + fprintf(stderr, "not enough memory for image\n"); + return; + } +#define DRAWSEGMENT(offset, step) { \ + for (row = offset; row < height; row += step) { \ + _TIFFmemcpy(newras + row*width, ras, width);\ + ras += width; \ + } \ + } + ras = raster; + if (interleaved) { + DRAWSEGMENT(0, 8); + DRAWSEGMENT(4, 8); + DRAWSEGMENT(2, 4); + DRAWSEGMENT(1, 2); + } else + DRAWSEGMENT(0, 1); +#undef DRAWSEGMENT + + tif = TIFFOpen(imagename, mode); + if (!tif) { + TIFFError(imagename,"Can not open output image"); + exit(-1); + } + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, (uint32) width); + TIFFSetField(tif, TIFFTAG_IMAGELENGTH, (uint32) height); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_PALETTE); + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, + rowsperstrip = TIFFDefaultStripSize(tif, rowsperstrip)); + TIFFSetField(tif, TIFFTAG_COMPRESSION, compression); + switch (compression) { + case COMPRESSION_LZW: + case COMPRESSION_DEFLATE: + if (predictor != 0) + TIFFSetField(tif, TIFFTAG_PREDICTOR, predictor); + break; + } + TIFFSetField(tif, TIFFTAG_COLORMAP, red, green, blue); + TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + strip = 0; + stripsize = TIFFStripSize(tif); + for (row=0; row +#include +#include +#include + +#include "tiffio.h" + +#define streq(a,b) (strcmp(a,b) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) + +static void usage(void); +static void cpTags(TIFF* in, TIFF* out); + +static int +checkcmap(int n, uint16* r, uint16* g, uint16* b) +{ + while (n-- > 0) + if (*r++ >= 256 || *g++ >= 256 || *b++ >= 256) + return (16); + fprintf(stderr, "Warning, assuming 8-bit colormap.\n"); + return (8); +} + +#define CopyField(tag, v) \ + if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) +#define CopyField3(tag, v1, v2, v3) \ + if (TIFFGetField(in, tag, &v1, &v2, &v3)) TIFFSetField(out, tag, v1, v2, v3) + +static uint16 compression = (uint16) -1; +static uint16 predictor = 0; +static int quality = 75; /* JPEG quality */ +static int jpegcolormode = JPEGCOLORMODE_RGB; +static int processCompressOptions(char*); + +int +main(int argc, char* argv[]) +{ + uint16 bitspersample, shortv; + uint32 imagewidth, imagelength; + uint16 config = PLANARCONFIG_CONTIG; + uint32 rowsperstrip = (uint32) -1; + uint16 photometric = PHOTOMETRIC_RGB; + uint16 *rmap, *gmap, *bmap; + uint32 row; + int cmap = -1; + TIFF *in, *out; + int c; + extern int optind; + extern char* optarg; + + while ((c = getopt(argc, argv, "C:c:p:r:")) != -1) + switch (c) { + case 'C': /* force colormap interpretation */ + cmap = atoi(optarg); + break; + case 'c': /* compression scheme */ + if (!processCompressOptions(optarg)) + usage(); + break; + case 'p': /* planar configuration */ + if (streq(optarg, "separate")) + config = PLANARCONFIG_SEPARATE; + else if (streq(optarg, "contig")) + config = PLANARCONFIG_CONTIG; + else + usage(); + break; + case 'r': /* rows/strip */ + rowsperstrip = atoi(optarg); + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind != 2) + usage(); + in = TIFFOpen(argv[optind], "r"); + if (in == NULL) + return (-1); + if (!TIFFGetField(in, TIFFTAG_PHOTOMETRIC, &shortv) || + shortv != PHOTOMETRIC_PALETTE) { + fprintf(stderr, "%s: Expecting a palette image.\n", + argv[optind]); + return (-1); + } + if (!TIFFGetField(in, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap)) { + fprintf(stderr, + "%s: No colormap (not a valid palette image).\n", + argv[optind]); + return (-1); + } + bitspersample = 0; + TIFFGetField(in, TIFFTAG_BITSPERSAMPLE, &bitspersample); + if (bitspersample != 8) { + fprintf(stderr, "%s: Sorry, can only handle 8-bit images.\n", + argv[optind]); + return (-1); + } + out = TIFFOpen(argv[optind+1], "w"); + if (out == NULL) + return (-2); + cpTags(in, out); + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &imagewidth); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &imagelength); + if (compression != (uint16)-1) + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + else + TIFFGetField(in, TIFFTAG_COMPRESSION, &compression); + switch (compression) { + case COMPRESSION_JPEG: + if (jpegcolormode == JPEGCOLORMODE_RGB) + photometric = PHOTOMETRIC_YCBCR; + else + photometric = PHOTOMETRIC_RGB; + TIFFSetField(out, TIFFTAG_JPEGQUALITY, quality); + TIFFSetField(out, TIFFTAG_JPEGCOLORMODE, jpegcolormode); + break; + case COMPRESSION_LZW: + case COMPRESSION_DEFLATE: + if (predictor != 0) + TIFFSetField(out, TIFFTAG_PREDICTOR, predictor); + break; + } + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, photometric); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 3); + TIFFSetField(out, TIFFTAG_PLANARCONFIG, config); + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, + rowsperstrip = TIFFDefaultStripSize(out, rowsperstrip)); + (void) TIFFGetField(in, TIFFTAG_PLANARCONFIG, &shortv); + if (cmap == -1) + cmap = checkcmap(1<= 0; i--) { +#define CVT(x) (((x) * 255) / ((1L<<16)-1)) + rmap[i] = CVT(rmap[i]); + gmap[i] = CVT(gmap[i]); + bmap[i] = CVT(bmap[i]); + } + } + { unsigned char *ibuf, *obuf; + register unsigned char* pp; + register uint32 x; + ibuf = (unsigned char*)_TIFFmalloc(TIFFScanlineSize(in)); + obuf = (unsigned char*)_TIFFmalloc(TIFFScanlineSize(out)); + switch (config) { + case PLANARCONFIG_CONTIG: + for (row = 0; row < imagelength; row++) { + if (!TIFFReadScanline(in, ibuf, row, 0)) + goto done; + pp = obuf; + for (x = 0; x < imagewidth; x++) { + *pp++ = rmap[ibuf[x]]; + *pp++ = gmap[ibuf[x]]; + *pp++ = bmap[ibuf[x]]; + } + if (!TIFFWriteScanline(out, obuf, row, 0)) + goto done; + } + break; + case PLANARCONFIG_SEPARATE: + for (row = 0; row < imagelength; row++) { + if (!TIFFReadScanline(in, ibuf, row, 0)) + goto done; + for (pp = obuf, x = 0; x < imagewidth; x++) + *pp++ = rmap[ibuf[x]]; + if (!TIFFWriteScanline(out, obuf, row, 0)) + goto done; + for (pp = obuf, x = 0; x < imagewidth; x++) + *pp++ = gmap[ibuf[x]]; + if (!TIFFWriteScanline(out, obuf, row, 0)) + goto done; + for (pp = obuf, x = 0; x < imagewidth; x++) + *pp++ = bmap[ibuf[x]]; + if (!TIFFWriteScanline(out, obuf, row, 0)) + goto done; + } + break; + } + _TIFFfree(ibuf); + _TIFFfree(obuf); + } +done: + (void) TIFFClose(in); + (void) TIFFClose(out); + return (0); +} + +static int +processCompressOptions(char* opt) +{ + if (streq(opt, "none")) + compression = COMPRESSION_NONE; + else if (streq(opt, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (strneq(opt, "jpeg", 4)) { + char* cp = strchr(opt, ':'); + if (cp && isdigit(cp[1])) + quality = atoi(cp+1); + if (cp && strchr(cp, 'r')) + jpegcolormode = JPEGCOLORMODE_RAW; + compression = COMPRESSION_JPEG; + } else if (strneq(opt, "lzw", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_LZW; + } else if (strneq(opt, "zip", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_DEFLATE; + } else + return (0); + return (1); +} + +#define CopyField1(tag, v) \ + if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) +#define CopyField2(tag, v1, v2) \ + if (TIFFGetField(in, tag, &v1, &v2)) TIFFSetField(out, tag, v1, v2) +#define CopyField3(tag, v1, v2, v3) \ + if (TIFFGetField(in, tag, &v1, &v2, &v3)) TIFFSetField(out, tag, v1, v2, v3) +#define CopyField4(tag, v1, v2, v3, v4) \ + if (TIFFGetField(in, tag, &v1, &v2, &v3, &v4)) TIFFSetField(out, tag, v1, v2, v3, v4) + +static void +cpTag(TIFF* in, TIFF* out, uint16 tag, uint16 count, TIFFDataType type) +{ + uint16 shortv, shortv2, *shortav; + float floatv, *floatav; + char *stringv; + uint32 longv; + + switch (type) { + case TIFF_SHORT: + if (count == 1) { + CopyField1(tag, shortv); + } else if (count == 2) { + CopyField2(tag, shortv, shortv2); + } else if (count == (uint16) -1) { + CopyField2(tag, shortv, shortav); + } + break; + case TIFF_LONG: + CopyField1(tag, longv); + break; + case TIFF_RATIONAL: + if (count == 1) { + CopyField1(tag, floatv); + } else if (count == (uint16) -1) { + CopyField1(tag, floatav); + } + break; + case TIFF_ASCII: + CopyField1(tag, stringv); + break; + } +} +#undef CopyField4 +#undef CopyField3 +#undef CopyField2 +#undef CopyField1 + +static struct cpTag { + uint16 tag; + uint16 count; + TIFFDataType type; +} tags[] = { + { TIFFTAG_IMAGEWIDTH, 1, TIFF_LONG }, + { TIFFTAG_IMAGELENGTH, 1, TIFF_LONG }, + { TIFFTAG_BITSPERSAMPLE, 1, TIFF_SHORT }, + { TIFFTAG_COMPRESSION, 1, TIFF_SHORT }, + { TIFFTAG_FILLORDER, 1, TIFF_SHORT }, + { TIFFTAG_ROWSPERSTRIP, 1, TIFF_LONG }, + { TIFFTAG_GROUP3OPTIONS, 1, TIFF_LONG }, + { TIFFTAG_SUBFILETYPE, 1, TIFF_LONG }, + { TIFFTAG_THRESHHOLDING, 1, TIFF_SHORT }, + { TIFFTAG_DOCUMENTNAME, 1, TIFF_ASCII }, + { TIFFTAG_IMAGEDESCRIPTION, 1, TIFF_ASCII }, + { TIFFTAG_MAKE, 1, TIFF_ASCII }, + { TIFFTAG_MODEL, 1, TIFF_ASCII }, + { TIFFTAG_ORIENTATION, 1, TIFF_SHORT }, + { TIFFTAG_MINSAMPLEVALUE, 1, TIFF_SHORT }, + { TIFFTAG_MAXSAMPLEVALUE, 1, TIFF_SHORT }, + { TIFFTAG_XRESOLUTION, 1, TIFF_RATIONAL }, + { TIFFTAG_YRESOLUTION, 1, TIFF_RATIONAL }, + { TIFFTAG_PAGENAME, 1, TIFF_ASCII }, + { TIFFTAG_XPOSITION, 1, TIFF_RATIONAL }, + { TIFFTAG_YPOSITION, 1, TIFF_RATIONAL }, + { TIFFTAG_GROUP4OPTIONS, 1, TIFF_LONG }, + { TIFFTAG_RESOLUTIONUNIT, 1, TIFF_SHORT }, + { TIFFTAG_PAGENUMBER, 2, TIFF_SHORT }, + { TIFFTAG_SOFTWARE, 1, TIFF_ASCII }, + { TIFFTAG_DATETIME, 1, TIFF_ASCII }, + { TIFFTAG_ARTIST, 1, TIFF_ASCII }, + { TIFFTAG_HOSTCOMPUTER, 1, TIFF_ASCII }, + { TIFFTAG_WHITEPOINT, 1, TIFF_RATIONAL }, + { TIFFTAG_PRIMARYCHROMATICITIES, (uint16) -1,TIFF_RATIONAL }, + { TIFFTAG_HALFTONEHINTS, 2, TIFF_SHORT }, + { TIFFTAG_BADFAXLINES, 1, TIFF_LONG }, + { TIFFTAG_CLEANFAXDATA, 1, TIFF_SHORT }, + { TIFFTAG_CONSECUTIVEBADFAXLINES, 1, TIFF_LONG }, + { TIFFTAG_INKSET, 1, TIFF_SHORT }, + { TIFFTAG_INKNAMES, 1, TIFF_ASCII }, + { TIFFTAG_DOTRANGE, 2, TIFF_SHORT }, + { TIFFTAG_TARGETPRINTER, 1, TIFF_ASCII }, + { TIFFTAG_SAMPLEFORMAT, 1, TIFF_SHORT }, + { TIFFTAG_YCBCRCOEFFICIENTS, (uint16) -1,TIFF_RATIONAL }, + { TIFFTAG_YCBCRSUBSAMPLING, 2, TIFF_SHORT }, + { TIFFTAG_YCBCRPOSITIONING, 1, TIFF_SHORT }, + { TIFFTAG_REFERENCEBLACKWHITE, (uint16) -1,TIFF_RATIONAL }, +}; +#define NTAGS (sizeof (tags) / sizeof (tags[0])) + +static void +cpTags(TIFF* in, TIFF* out) +{ + struct cpTag *p; + for (p = tags; p < &tags[NTAGS]; p++) + cpTag(in, out, p->tag, p->count, p->type); +} +#undef NTAGS + +char* stuff[] = { +"usage: pal2rgb [options] input.tif output.tif", +"where options are:", +" -p contig pack samples contiguously (e.g. RGBRGB...)", +" -p separate store samples separately (e.g. RRR...GGG...BBB...)", +" -r # make each strip have no more than # rows", +" -C 8 assume 8-bit colormap values (instead of 16-bit)", +" -C 16 assume 16-bit colormap values", +"", +" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", +" (no longer supported by default due to Unisys patent enforcement)", +" -c zip[:opts] compress output with deflate encoding", +" -c packbits compress output with packbits encoding", +" -c none use no compression algorithm on output", +"", +"LZW and deflate options:", +" # set predictor value", +"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} diff --git a/tools/ppm2tiff.c b/tools/ppm2tiff.c new file mode 100755 index 0000000..69479f0 --- /dev/null +++ b/tools/ppm2tiff.c @@ -0,0 +1,242 @@ +/* $Header: /home/cvsroot/libtiff/tools/ppm2tiff.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include +#include + +#include "tiffio.h" + +#if defined(_WINDOWS) || defined(MSDOS) +#define BINMODE "b" +#else +#define BINMODE +#endif + +#define streq(a,b) (strcmp(a,b) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) + +static uint16 compression = COMPRESSION_PACKBITS; +static uint16 predictor = 0; +static int quality = 75; /* JPEG quality */ +static int jpegcolormode = JPEGCOLORMODE_RGB; + +static void usage(void); +static int processCompressOptions(char*); + +static void +BadPPM(char* file) +{ + fprintf(stderr, "%s: Not a PPM file.\n", file); + exit(-2); +} + +int +main(int argc, char* argv[]) +{ + uint16 photometric; + uint32 rowsperstrip = (uint32) -1; + double resolution = -1; + unsigned char *buf = NULL; + uint32 row; + tsize_t linebytes; + uint16 spp; + TIFF *out; + FILE *in; + uint32 w, h; + int prec; + char *infile; + int c; + extern int optind; + extern char* optarg; + + while ((c = getopt(argc, argv, "c:r:R:")) != -1) + switch (c) { + case 'c': /* compression scheme */ + if (!processCompressOptions(optarg)) + usage(); + break; + case 'r': /* rows/strip */ + rowsperstrip = atoi(optarg); + break; + case 'R': /* resolution */ + resolution = atof(optarg); + break; + case '?': + usage(); + /*NOTREACHED*/ + } + + /* + * If only one file is specified, read input from + * stdin; otherwise usage is: ppm2tiff input output. + */ + if (argc - optind > 1) { + infile = argv[optind++]; + in = fopen(infile, "r" BINMODE); + if (in == NULL) { + fprintf(stderr, "%s: Can not open.\n", infile); + return (-1); + } + } else { + infile = ""; + in = stdin; + } + + if (getc(in) != 'P') + BadPPM(infile); + switch (getc(in)) { + case '5': /* it's a PGM file */ + spp = 1; + photometric = PHOTOMETRIC_MINISBLACK; + break; + case '6': /* it's a PPM file */ + spp = 3; + photometric = PHOTOMETRIC_RGB; + if (compression == COMPRESSION_JPEG && + jpegcolormode == JPEGCOLORMODE_RGB) + photometric = PHOTOMETRIC_YCBCR; + break; + default: + BadPPM(infile); + } + if (fscanf(in, " %ld %ld %d", &w, &h, &prec) != 3) + BadPPM(infile); + if (getc(in) != '\n' || w <= 0 || h <= 0 || prec != 255) + BadPPM(infile); + + out = TIFFOpen(argv[optind], "w"); + if (out == NULL) + return (-4); + TIFFSetField(out, TIFFTAG_IMAGEWIDTH, w); + TIFFSetField(out, TIFFTAG_IMAGELENGTH, h); + TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, spp); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 8); + TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, photometric); + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + switch (compression) { + case COMPRESSION_JPEG: + TIFFSetField(out, TIFFTAG_JPEGQUALITY, quality); + TIFFSetField(out, TIFFTAG_JPEGCOLORMODE, jpegcolormode); + break; + case COMPRESSION_LZW: + case COMPRESSION_DEFLATE: + if (predictor != 0) + TIFFSetField(out, TIFFTAG_PREDICTOR, predictor); + break; + } + linebytes = spp * w; + if (TIFFScanlineSize(out) > linebytes) + buf = (unsigned char *)_TIFFmalloc(linebytes); + else + buf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out)); + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, + TIFFDefaultStripSize(out, rowsperstrip)); + if (resolution > 0) { + TIFFSetField(out, TIFFTAG_XRESOLUTION, resolution); + TIFFSetField(out, TIFFTAG_YRESOLUTION, resolution); + TIFFSetField(out, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH); + } + for (row = 0; row < h; row++) { + if (fread(buf, linebytes, 1, in) != 1) { + fprintf(stderr, "%s: scanline %lu: Read error.\n", + infile, (unsigned long) row); + break; + } + if (TIFFWriteScanline(out, buf, row, 0) < 0) + break; + } + (void) TIFFClose(out); + if (buf) + _TIFFfree(buf); + return (0); +} + +static int +processCompressOptions(char* opt) +{ + if (streq(opt, "none")) + compression = COMPRESSION_NONE; + else if (streq(opt, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (strneq(opt, "jpeg", 4)) { + char* cp = strchr(opt, ':'); + if (cp && isdigit(cp[1])) + quality = atoi(cp+1); + if (cp && strchr(cp, 'r')) + jpegcolormode = JPEGCOLORMODE_RAW; + compression = COMPRESSION_JPEG; + } else if (strneq(opt, "lzw", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_LZW; + } else if (strneq(opt, "zip", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_DEFLATE; + } else + return (0); + return (1); +} + +char* stuff[] = { +"usage: ppm2tiff [options] input.ppm output.tif", +"where options are:", +" -r # make each strip have no more than # rows", +" -R # set x&y resolution (dpi)", +"", +" -c jpeg[:opts] compress output with JPEG encoding", +" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", +" (no longer supported by default due to Unisys patent enforcement)", +" -c zip[:opts] compress output with deflate encoding", +" -c packbits compress output with packbits encoding", +" -c none use no compression algorithm on output", +"", +"JPEG options:", +" # set compression quality level (0-100, default 75)", +" r output color image as RGB rather than YCbCr", +"LZW and deflate options:", +" # set predictor value", +"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} diff --git a/tools/ras2tiff.c b/tools/ras2tiff.c new file mode 100755 index 0000000..b28cd2c --- /dev/null +++ b/tools/ras2tiff.c @@ -0,0 +1,266 @@ +/* $Header: /home/cvsroot/libtiff/tools/ras2tiff.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include +#include + +#include "rasterfile.h" +#include "tiffio.h" + +#ifndef howmany +#define howmany(x, y) (((x)+((y)-1))/(y)) +#endif +#define streq(a,b) (strcmp(a,b) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) + +#ifndef BINMODE +#define BINMODE +#endif + +static uint16 compression = (uint16) -1; +static int jpegcolormode = JPEGCOLORMODE_RGB; +static int quality = 75; /* JPEG quality */ +static uint16 predictor = 0; + +static void usage(void); +static int processCompressOptions(char*); + +int +main(int argc, char* argv[]) +{ + unsigned char* buf; + uint32 row; + tsize_t linebytes, scanline; + TIFF *out; + FILE *in; + struct rasterfile h; + uint16 photometric; + uint16 config = PLANARCONFIG_CONTIG; + uint32 rowsperstrip = (uint32) -1; + int c; + extern int optind; + extern char* optarg; + + while ((c = getopt(argc, argv, "c:r:")) != -1) + switch (c) { + case 'c': /* compression scheme */ + if (!processCompressOptions(optarg)) + usage(); + break; + case 'r': /* rows/strip */ + rowsperstrip = atoi(optarg); + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind != 2) + usage(); + in = fopen(argv[optind], "r" BINMODE); + if (in == NULL) { + fprintf(stderr, "%s: Can not open.\n", argv[optind]); + return (-1); + } + if (fread(&h, sizeof (h), 1, in) != 1) { + fprintf(stderr, "%s: Can not read header.\n", argv[optind]); + return (-2); + } + if (h.ras_magic != RAS_MAGIC) { + fprintf(stderr, "%s: Not a rasterfile.\n", argv[optind]); + return (-3); + } + out = TIFFOpen(argv[optind+1], "w"); + if (out == NULL) + return (-4); + TIFFSetField(out, TIFFTAG_IMAGEWIDTH, (uint32) h.ras_width); + TIFFSetField(out, TIFFTAG_IMAGELENGTH, (uint32) h.ras_height); + TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, h.ras_depth > 8 ? 3 : 1); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, h.ras_depth > 1 ? 8 : 1); + TIFFSetField(out, TIFFTAG_PLANARCONFIG, config); + if (h.ras_maptype != RMT_NONE) { + uint16* red; + register uint16* map; + register int i, j; + int mapsize; + + buf = (unsigned char *)_TIFFmalloc(h.ras_maplength); + if (buf == NULL) { + fprintf(stderr, "No space to read in colormap.\n"); + return (-5); + } + if (fread(buf, h.ras_maplength, 1, in) != 1) { + fprintf(stderr, "%s: Read error on colormap.\n", + argv[optind]); + return (-6); + } + mapsize = 1< mapsize*3) { + fprintf(stderr, + "%s: Huh, %d colormap entries, should be %d?\n", + argv[optind], h.ras_maplength, mapsize*3); + return (-7); + } + red = (uint16*)_TIFFmalloc(mapsize * 3 * sizeof (uint16)); + if (red == NULL) { + fprintf(stderr, "No space for colormap.\n"); + return (-8); + } + map = red; + for (j = 0; j < 3; j++) { +#define SCALE(x) (((x)*((1L<<16)-1))/255) + for (i = h.ras_maplength/3; i-- > 0;) + *map++ = SCALE(*buf++); + if ((i = h.ras_maplength/3) < mapsize) { + i = mapsize - i; + _TIFFmemset(map, 0, i*sizeof (uint16)); + map += i; + } + } + TIFFSetField(out, TIFFTAG_COLORMAP, + red, red + mapsize, red + 2*mapsize); + photometric = PHOTOMETRIC_PALETTE; + if (compression == (uint16) -1) + compression = COMPRESSION_PACKBITS; + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + } else { + /* XXX this is bogus... */ + photometric = h.ras_depth == 24 ? + PHOTOMETRIC_RGB : PHOTOMETRIC_MINISBLACK; + if (compression == (uint16) -1) + compression = COMPRESSION_LZW; + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + } + switch (compression) { + case COMPRESSION_JPEG: + if (photometric == PHOTOMETRIC_RGB && jpegcolormode == JPEGCOLORMODE_RGB) + photometric = PHOTOMETRIC_YCBCR; + TIFFSetField(out, TIFFTAG_JPEGQUALITY, quality); + TIFFSetField(out, TIFFTAG_JPEGCOLORMODE, jpegcolormode); + break; + case COMPRESSION_LZW: + case COMPRESSION_DEFLATE: + if (predictor != 0) + TIFFSetField(out, TIFFTAG_PREDICTOR, predictor); + break; + } + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, photometric); + linebytes = ((h.ras_depth*h.ras_width+15) >> 3) &~ 1; + scanline = TIFFScanlineSize(out); + if (scanline > linebytes) { + buf = (unsigned char *)_TIFFmalloc(scanline); + _TIFFmemset(buf+linebytes, 0, scanline-linebytes); + } else + buf = (unsigned char *)_TIFFmalloc(linebytes); + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, + TIFFDefaultStripSize(out, rowsperstrip)); + for (row = 0; row < h.ras_height; row++) { + if (fread(buf, linebytes, 1, in) != 1) { + fprintf(stderr, "%s: scanline %lu: Read error.\n", + argv[optind], (unsigned long) row); + break; + } + if (h.ras_type == RT_STANDARD && h.ras_depth == 24) { + tsize_t cc = h.ras_width; + unsigned char* cp = buf; +#define SWAP(a,b) { unsigned char t = (a); (a) = (b); (b) = t; } + do { + SWAP(cp[0], cp[2]); + cp += 3; + } while (--cc); + } + if (TIFFWriteScanline(out, buf, row, 0) < 0) + break; + } + (void) TIFFClose(out); + return (0); +} + +static int +processCompressOptions(char* opt) +{ + if (streq(opt, "none")) + compression = COMPRESSION_NONE; + else if (streq(opt, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (strneq(opt, "jpeg", 4)) { + char* cp = strchr(opt, ':'); + if (cp && isdigit(cp[1])) + quality = atoi(cp+1); + if (cp && strchr(cp, 'r')) + jpegcolormode = JPEGCOLORMODE_RAW; + compression = COMPRESSION_JPEG; + } else if (strneq(opt, "lzw", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_LZW; + } else if (strneq(opt, "zip", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_DEFLATE; + } else + return (0); + return (1); +} + +char* stuff[] = { +"usage: ras2tiff [options] input.ras output.tif", +"where options are:", +" -r # make each strip have no more than # rows", +"", +" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", +" (no longer supported by default due to Unisys patent enforcement)", +" -c zip[:opts] compress output with deflate encoding", +" -c jpeg[:opts]compress output with JPEG encoding", +" -c packbits compress output with packbits encoding", +" -c none use no compression algorithm on output", +"", +"JPEG options:", +" # set compression quality level (0-100, default 75)", +" r output color image as RGB rather than YCbCr", +"For example, -c jpeg:r:50 to get JPEG-encoded RGB data with 50% comp. quality", +"", +"LZW and deflate options:", +" # set predictor value", +"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} diff --git a/tools/rasterfile.h b/tools/rasterfile.h new file mode 100755 index 0000000..e22e1ef --- /dev/null +++ b/tools/rasterfile.h @@ -0,0 +1,41 @@ +/* $Header: /home/cvsroot/libtiff/tools/rasterfile.h,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Description of header for files containing raster images + */ +struct rasterfile { + int ras_magic; /* magic number */ + int ras_width; /* width (pixels) of image */ + int ras_height; /* height (pixels) of image */ + int ras_depth; /* depth (1, 8, or 24 bits) of pixel */ + int ras_length; /* length (bytes) of image */ + int ras_type; /* type of file; see RT_* below */ + int ras_maptype; /* type of colormap; see RMT_* below */ + int ras_maplength; /* length (bytes) of following map */ + /* color map follows for ras_maplength bytes, followed by image */ +}; +#define RAS_MAGIC 0x59a66a95 + + /* Sun supported ras_type's */ +#define RT_OLD 0 /* Raw pixrect image in 68000 byte order */ +#define RT_STANDARD 1 /* Raw pixrect image in 68000 byte order */ +#define RT_BYTE_ENCODED 2 /* Run-length compression of bytes */ +#define RT_EXPERIMENTAL 0xffff /* Reserved for testing */ + + /* Sun registered ras_maptype's */ +#define RMT_RAW 2 + /* Sun supported ras_maptype's */ +#define RMT_NONE 0 /* ras_maplength is expected to be 0 */ +#define RMT_EQUAL_RGB 1 /* red[ras_maplength/3],green[],blue[] */ + +/* + * NOTES: + * Each line of the image is rounded out to a multiple of 16 bits. + * This corresponds to the rounding convention used by the memory pixrect + * package (/usr/include/pixrect/memvar.h) of the SunWindows system. + * The ras_encoding field (always set to 0 by Sun's supported software) + * was renamed to ras_length in release 2.0. As a result, rasterfiles + * of type 0 generated by the old software claim to have 0 length; for + * compatibility, code reading rasterfiles must be prepared to compute the + * true length from the width, height, and depth fields. + */ diff --git a/tools/rgb2ycbcr.c b/tools/rgb2ycbcr.c new file mode 100755 index 0000000..62d05ae --- /dev/null +++ b/tools/rgb2ycbcr.c @@ -0,0 +1,341 @@ +/* $Header: /home/cvsroot/libtiff/tools/rgb2ycbcr.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include + +#include "tiffio.h" + +#define streq(a,b) (strcmp(a,b) == 0) +#define CopyField(tag, v) \ + if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) + +#ifndef howmany +#define howmany(x, y) (((x)+((y)-1))/(y)) +#endif +#define roundup(x, y) (howmany(x,y)*((uint32)(y))) + +#define LumaRed ycbcrCoeffs[0] +#define LumaGreen ycbcrCoeffs[1] +#define LumaBlue ycbcrCoeffs[2] + +uint16 compression = COMPRESSION_PACKBITS; +uint32 rowsperstrip = (uint32) -1; + +uint16 horizSubSampling = 2; /* YCbCr horizontal subsampling */ +uint16 vertSubSampling = 2; /* YCbCr vertical subsampling */ +float ycbcrCoeffs[3] = { .299, .587, .114 }; +/* default coding range is CCIR Rec 601-1 with no headroom/footroom */ +float refBlackWhite[6] = { 0., 255., 128., 255., 128., 255. }; + +static int tiffcvt(TIFF* in, TIFF* out); +static void usage(void); +static void setupLumaTables(void); + +int +main(int argc, char* argv[]) +{ + TIFF *in, *out; + int c; + extern int optind; + extern char *optarg; + + while ((c = getopt(argc, argv, "c:h:r:v:z")) != -1) + switch (c) { + case 'c': + if (streq(optarg, "none")) + compression = COMPRESSION_NONE; + else if (streq(optarg, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (streq(optarg, "lzw")) + compression = COMPRESSION_LZW; + else if (streq(optarg, "jpeg")) + compression = COMPRESSION_JPEG; + else + usage(); + break; + case 'h': + horizSubSampling = atoi(optarg); + break; + case 'v': + vertSubSampling = atoi(optarg); + break; + case 'r': + rowsperstrip = atoi(optarg); + break; + case 'z': /* CCIR Rec 601-1 w/ headroom/footroom */ + refBlackWhite[0] = 16.; + refBlackWhite[1] = 235.; + refBlackWhite[2] = 128.; + refBlackWhite[3] = 240.; + refBlackWhite[4] = 128.; + refBlackWhite[5] = 240.; + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind < 2) + usage(); + out = TIFFOpen(argv[argc-1], "w"); + if (out == NULL) + return (-2); + setupLumaTables(); + for (; optind < argc-1; optind++) { + in = TIFFOpen(argv[optind], "r"); + if (in != NULL) { + do { + if (!tiffcvt(in, out) || + !TIFFWriteDirectory(out)) { + (void) TIFFClose(out); + return (1); + } + } while (TIFFReadDirectory(in)); + (void) TIFFClose(in); + } + } + (void) TIFFClose(out); + return (0); +} + +float *lumaRed; +float *lumaGreen; +float *lumaBlue; +float D1, D2; +int Yzero; + +static float* +setupLuma(float c) +{ + float *v = (float *)_TIFFmalloc(256 * sizeof (float)); + int i; + for (i = 0; i < 256; i++) + v[i] = c * i; + return (v); +} + +static unsigned +V2Code(float f, float RB, float RW, int CR) +{ + unsigned int c = (unsigned int)((((f)*(RW-RB)/CR)+RB)+.5); + return (c > 255 ? 255 : c); +} + +static void +setupLumaTables(void) +{ + lumaRed = setupLuma(LumaRed); + lumaGreen = setupLuma(LumaGreen); + lumaBlue = setupLuma(LumaBlue); + D1 = 1./(2 - 2*LumaBlue); + D2 = 1./(2 - 2*LumaRed); + Yzero = V2Code(0, refBlackWhite[0], refBlackWhite[1], 255); +} + +static void +cvtClump(unsigned char* op, uint32* raster, uint32 ch, uint32 cw, uint32 w) +{ + float Y, Cb = 0, Cr = 0; + int j, k; + /* + * Convert ch-by-cw block of RGB + * to YCbCr and sample accordingly. + */ + for (k = 0; k < ch; k++) { + for (j = 0; j < cw; j++) { + uint32 RGB = (raster - k*w)[j]; + Y = lumaRed[TIFFGetR(RGB)] + + lumaGreen[TIFFGetG(RGB)] + + lumaBlue[TIFFGetB(RGB)]; + /* accumulate chrominance */ + Cb += (TIFFGetB(RGB) - Y) * D1; + Cr += (TIFFGetR(RGB) - Y) * D2; + /* emit luminence */ + *op++ = V2Code(Y, + refBlackWhite[0], refBlackWhite[1], 255); + } + for (; j < horizSubSampling; j++) + *op++ = Yzero; + } + for (; k < vertSubSampling; k++) { + for (j = 0; j < horizSubSampling; j++) + *op++ = Yzero; + } + /* emit sampled chrominance values */ + *op++ = V2Code(Cb / (ch*cw), refBlackWhite[2], refBlackWhite[3], 127); + *op++ = V2Code(Cr / (ch*cw), refBlackWhite[4], refBlackWhite[5], 127); +} +#undef LumaRed +#undef LumaGreen +#undef LumaBlue +#undef V2Code + +/* + * Convert a strip of RGB data to YCbCr and + * sample to generate the output data. + */ +static void +cvtStrip(unsigned char* op, uint32* raster, uint32 nrows, uint32 width) +{ + uint32 x; + int clumpSize = vertSubSampling * horizSubSampling + 2; + uint32 *tp; + + for (; nrows >= vertSubSampling; nrows -= vertSubSampling) { + tp = raster; + for (x = width; x >= horizSubSampling; x -= horizSubSampling) { + cvtClump(op, tp, + vertSubSampling, horizSubSampling, width); + op += clumpSize; + tp += horizSubSampling; + } + if (x > 0) { + cvtClump(op, tp, vertSubSampling, x, width); + op += clumpSize; + } + raster -= vertSubSampling*width; + } + if (nrows > 0) { + tp = raster; + for (x = width; x >= horizSubSampling; x -= horizSubSampling) { + cvtClump(op, tp, nrows, horizSubSampling, width); + op += clumpSize; + tp += horizSubSampling; + } + if (x > 0) + cvtClump(op, tp, nrows, x, width); + } +} + +static int +cvtRaster(TIFF* tif, uint32* raster, uint32 width, uint32 height) +{ + uint32 y; + tstrip_t strip = 0; + tsize_t cc, acc; + unsigned char* buf; + uint32 rwidth = roundup(width, horizSubSampling); + uint32 rheight = roundup(height, vertSubSampling); + uint32 nrows = (rowsperstrip > rheight ? rheight : rowsperstrip); + + cc = nrows*rwidth + + 2*((nrows*rwidth) / (horizSubSampling*vertSubSampling)); + buf = (unsigned char*)_TIFFmalloc(cc); + for (y = height; (int32) y > 0; y -= nrows) { + uint32 nr = (y > nrows ? nrows : y); + cvtStrip(buf, raster + (y-1)*width, nr, width); + nr = roundup(nr, vertSubSampling); + acc = nr*rwidth + + 2*((nr*rwidth)/(horizSubSampling*vertSubSampling)); + if (!TIFFWriteEncodedStrip(tif, strip++, buf, acc)) { + _TIFFfree(buf); + return (0); + } + } + _TIFFfree(buf); + return (1); +} + +static int +tiffcvt(TIFF* in, TIFF* out) +{ + uint32 width, height; /* image width & height */ + uint32* raster; /* retrieve RGBA image */ + uint16 shortv; + float floatv; + char *stringv; + uint32 longv; + + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &width); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &height); + raster = (uint32*)_TIFFmalloc(width * height * sizeof (uint32)); + if (raster == 0) { + TIFFError(TIFFFileName(in), "No space for raster buffer"); + return (0); + } + if (!TIFFReadRGBAImage(in, width, height, raster, 0)) { + _TIFFfree(raster); + return (0); + } + + CopyField(TIFFTAG_SUBFILETYPE, longv); + TIFFSetField(out, TIFFTAG_IMAGEWIDTH, width); + TIFFSetField(out, TIFFTAG_IMAGELENGTH, height); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 8); + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_YCBCR); + if (compression == COMPRESSION_JPEG) + TIFFSetField(out, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RAW); + CopyField(TIFFTAG_FILLORDER, shortv); + TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 3); + CopyField(TIFFTAG_XRESOLUTION, floatv); + CopyField(TIFFTAG_YRESOLUTION, floatv); + CopyField(TIFFTAG_RESOLUTIONUNIT, shortv); + TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + { char buf[2048]; + char *cp = strrchr(TIFFFileName(in), '/'); + sprintf(buf, "YCbCr conversion of %s", cp ? cp+1 : TIFFFileName(in)); + TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, buf); + } + TIFFSetField(out, TIFFTAG_SOFTWARE, TIFFGetVersion()); + CopyField(TIFFTAG_DOCUMENTNAME, stringv); + + TIFFSetField(out, TIFFTAG_REFERENCEBLACKWHITE, refBlackWhite); + TIFFSetField(out, TIFFTAG_YCBCRSUBSAMPLING, + horizSubSampling, vertSubSampling); + TIFFSetField(out, TIFFTAG_YCBCRPOSITIONING, YCBCRPOSITION_CENTERED); + TIFFSetField(out, TIFFTAG_YCBCRCOEFFICIENTS, ycbcrCoeffs); + rowsperstrip = TIFFDefaultStripSize(out, rowsperstrip); + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, rowsperstrip); + + return (cvtRaster(out, raster, width, height)); +} + +static char* usageMsg[] = { + "usage: rgb2ycbcr [-c comp] [-r rows] [-h N] [-v N] input... output\n", + "where comp is one of the following compression algorithms:\n", + " jpeg\t\tJPEG encoding\n", + " lzw\t\tLempel-Ziv & Welch encoding\n", + " (lzw no longer supported by default due to Unisys patent enforcement)", + " packbits\tPackBits encoding\n", + " none\t\tno compression\n", + "and the other options are:\n", + " -r\trows/strip\n", + " -h\thorizontal sampling factor (1,2,4)\n", + " -v\tvertical sampling factor (1,2,4)\n", + NULL +}; + +static void +usage(void) +{ + int i; + for (i = 0; usageMsg[i]; i++) + fprintf(stderr, "%s", usageMsg[i]); + exit(-1); +} diff --git a/tools/sgi2tiff.c b/tools/sgi2tiff.c new file mode 100755 index 0000000..c068fbd --- /dev/null +++ b/tools/sgi2tiff.c @@ -0,0 +1,321 @@ +/* $Header: /home/cvsroot/libtiff/tools/sgi2tiff.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include +#include +#include + +#include "tiffio.h" + +#define streq(a,b) (strcmp(a,b) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) + +static short config = PLANARCONFIG_CONTIG; +static uint16 compression = COMPRESSION_PACKBITS; +static uint16 predictor = 0; +static uint16 fillorder = 0; +static uint32 rowsperstrip = (uint32) -1; +static int jpegcolormode = JPEGCOLORMODE_RGB; +static int quality = 75; /* JPEG quality */ +static uint16 photometric; + +static void usage(void); +static int cpContig(IMAGE*, TIFF*); +static int cpSeparate(IMAGE*, TIFF*); +static int processCompressOptions(char*); + +/* XXX image library has no prototypes */ +extern IMAGE* iopen(const char*, const char*); +extern void iclose(IMAGE*); +extern void getrow(IMAGE*, short*, int, int); + +int +main(int argc, char* argv[]) +{ + IMAGE *in; + TIFF *out; + int c; + extern int optind; + extern char* optarg; + + while ((c = getopt(argc, argv, "c:p:r:")) != -1) + switch (c) { + case 'c': /* compression scheme */ + if (!processCompressOptions(optarg)) + usage(); + break; + case 'f': /* fill order */ + if (streq(optarg, "lsb2msb")) + fillorder = FILLORDER_LSB2MSB; + else if (streq(optarg, "msb2lsb")) + fillorder = FILLORDER_MSB2LSB; + else + usage(); + break; + case 'p': /* planar configuration */ + if (streq(optarg, "separate")) + config = PLANARCONFIG_SEPARATE; + else if (streq(optarg, "contig")) + config = PLANARCONFIG_CONTIG; + else + usage(); + break; + case 'r': /* rows/strip */ + rowsperstrip = atoi(optarg); + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind != 2) + usage(); + in = iopen(argv[optind], "r"); + if (in == NULL) + return (-1); + out = TIFFOpen(argv[optind+1], "w"); + if (out == NULL) + return (-2); + TIFFSetField(out, TIFFTAG_IMAGEWIDTH, (uint32) in->xsize); + TIFFSetField(out, TIFFTAG_IMAGELENGTH, (uint32) in->ysize); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 8); + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + if (in->zsize == 1) + photometric = PHOTOMETRIC_MINISBLACK; + else + photometric = PHOTOMETRIC_RGB; + switch (compression) { + case COMPRESSION_JPEG: + if (photometric == PHOTOMETRIC_RGB && jpegcolormode == JPEGCOLORMODE_RGB) + photometric = PHOTOMETRIC_YCBCR; + TIFFSetField(out, TIFFTAG_JPEGQUALITY, quality); + TIFFSetField(out, TIFFTAG_JPEGCOLORMODE, jpegcolormode); + break; + case COMPRESSION_LZW: + case COMPRESSION_DEFLATE: + if (predictor != 0) + TIFFSetField(out, TIFFTAG_PREDICTOR, predictor); + break; + } + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, photometric); + if (fillorder != 0) + TIFFSetField(out, TIFFTAG_FILLORDER, fillorder); + TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, in->zsize); + if (in->zsize > 3) { + uint16 v[1]; + v[0] = EXTRASAMPLE_UNASSALPHA; + TIFFSetField(out, TIFFTAG_EXTRASAMPLES, 1, v); + } + TIFFSetField(out, TIFFTAG_MINSAMPLEVALUE, (uint16) in->min); + TIFFSetField(out, TIFFTAG_MAXSAMPLEVALUE, (uint16) in->max); + TIFFSetField(out, TIFFTAG_PLANARCONFIG, config); + if (config != PLANARCONFIG_SEPARATE) + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, + TIFFDefaultStripSize(out, rowsperstrip)); + else /* force 1 row/strip for library limitation */ + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, 1L); + if (in->name[0] != '\0') + TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, in->name); + if (config == PLANARCONFIG_CONTIG) + cpContig(in, out); + else + cpSeparate(in, out); + (void) iclose(in); + (void) TIFFClose(out); + return (0); +} + +static int +processCompressOptions(char* opt) +{ + if (streq(opt, "none")) + compression = COMPRESSION_NONE; + else if (streq(opt, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (strneq(opt, "jpeg", 4)) { + char* cp = strchr(opt, ':'); + if (cp && isdigit(cp[1])) + quality = atoi(cp+1); + if (cp && strchr(cp, 'r')) + jpegcolormode = JPEGCOLORMODE_RAW; + compression = COMPRESSION_JPEG; + } else if (strneq(opt, "lzw", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_LZW; + } else if (strneq(opt, "zip", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_DEFLATE; + } else + return (0); + return (1); +} + +static int +cpContig(IMAGE* in, TIFF* out) +{ + tdata_t buf = _TIFFmalloc(TIFFScanlineSize(out)); + short *r = NULL; + int x, y; + + if (in->zsize == 3) { + short *g, *b; + + r = (short *)_TIFFmalloc(3 * in->xsize * sizeof (short)); + g = r + in->xsize; + b = g + in->xsize; + for (y = in->ysize-1; y >= 0; y--) { + uint8* pp = (uint8*) buf; + + getrow(in, r, y, 0); + getrow(in, g, y, 1); + getrow(in, b, y, 2); + for (x = 0; x < in->xsize; x++) { + pp[0] = r[x]; + pp[1] = g[x]; + pp[2] = b[x]; + pp += 3; + } + if (TIFFWriteScanline(out, buf, in->ysize-y-1, 0) < 0) + goto bad; + } + } else if (in->zsize == 4) { + short *g, *b, *a; + + r = (short *)_TIFFmalloc(4 * in->xsize * sizeof (short)); + g = r + in->xsize; + b = g + in->xsize; + a = b + in->xsize; + for (y = in->ysize-1; y >= 0; y--) { + uint8* pp = (uint8*) buf; + + getrow(in, r, y, 0); + getrow(in, g, y, 1); + getrow(in, b, y, 2); + getrow(in, a, y, 3); + for (x = 0; x < in->xsize; x++) { + pp[0] = r[x]; + pp[1] = g[x]; + pp[2] = b[x]; + pp[3] = a[x]; + pp += 4; + } + if (TIFFWriteScanline(out, buf, in->ysize-y-1, 0) < 0) + goto bad; + } + } else { + uint8* pp = (uint8*) buf; + + r = (short *)_TIFFmalloc(in->xsize * sizeof (short)); + for (y = in->ysize-1; y >= 0; y--) { + getrow(in, r, y, 0); + for (x = in->xsize-1; x >= 0; x--) + pp[x] = r[x]; + if (TIFFWriteScanline(out, buf, in->ysize-y-1, 0) < 0) + goto bad; + } + } + if (r) + _TIFFfree(r); + _TIFFfree(buf); + return (1); +bad: + if (r) + _TIFFfree(r); + _TIFFfree(buf); + return (0); +} + +static int +cpSeparate(IMAGE* in, TIFF* out) +{ + tdata_t buf = _TIFFmalloc(TIFFScanlineSize(out)); + short *r = (short *)_TIFFmalloc(in->xsize * sizeof (short)); + uint8* pp = (uint8*) buf; + int x, y, z; + + for (z = 0; z < in->zsize; z++) { + for (y = in->ysize-1; y >= 0; y--) { + getrow(in, r, y, z); + for (x = 0; x < in->xsize; x++) + pp[x] = r[x]; + if (TIFFWriteScanline(out, buf, in->ysize-y-1, z) < 0) + goto bad; + } + } + _TIFFfree(r); + _TIFFfree(buf); + return (1); +bad: + _TIFFfree(r); + _TIFFfree(buf); + return (0); +} + +char* stuff[] = { +"usage: sgi2tiff [options] input.rgb output.tif", +"where options are:", +" -r # make each strip have no more than # rows", +"", +" -p contig pack samples contiguously (e.g. RGBRGB...)", +" -p separate store samples separately (e.g. RRR...GGG...BBB...)", +"", +" -f lsb2msb force lsb-to-msb FillOrder for output", +" -f msb2lsb force msb-to-lsb FillOrder for output", +"", +" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", +" (no longer supported by default due to Unisys patent enforcement)", +" -c zip[:opts] compress output with deflate encoding", +" -c jpeg[:opts]compress output with JPEG encoding", +" -c packbits compress output with packbits encoding", +" -c none use no compression algorithm on output", +"", +"JPEG options:", +" # set compression quality level (0-100, default 75)", +" r output color image as RGB rather than YCbCr", +"", +"LZW and deflate options:", +" # set predictor value", +"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} diff --git a/tools/sgigt.c b/tools/sgigt.c new file mode 100755 index 0000000..24b5ce5 --- /dev/null +++ b/tools/sgigt.c @@ -0,0 +1,984 @@ +/* $Header: /home/cvsroot/libtiff/tools/sgigt.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include +#include + +#include +#include + +#include "tiffio.h" + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +/* XXX fudge adjustment for window borders */ +#define YFUDGE 20 +#define XFUDGE 20 + +static tileContigRoutine putContig; +static tileSeparateRoutine putSeparate; +static uint32 width, height; /* window width & height */ +static uint32* raster = NULL; /* displayable image */ + +extern Colorindex greyi(int); +static void setupColormapSupport(TIFFRGBAImage*); +static void putContigAndDraw(TIFFRGBAImage*, uint32*, + uint32, uint32, uint32, uint32, int32, int32, unsigned char*); +static void putSeparateAndDraw(TIFFRGBAImage*, uint32*, + uint32, uint32, uint32, uint32, int32, int32, + unsigned char*, unsigned char*, unsigned char*, unsigned char*); + +static int prevImage(char* argv[], int ix, int b, int e, int wrap); +static int nextImage(char* argv[], int ix, int b, int e, int wrap); +static void usage(void); +static uint16 photoArg(const char*); +static void beep(void); + +extern char* optarg; +extern int optind; + +int +main(int argc, char* argv[]) +{ + static Cursor hourglass = { + 0x1ff0, 0x1ff0, 0x0820, 0x0820, + 0x0820, 0x0c60, 0x06c0, 0x0100, + 0x0100, 0x06c0, 0x0c60, 0x0820, + 0x0820, 0x0820, 0x1ff0, 0x1ff0 + }; + int isRGB0 = -1, isRGB; + int verbose = 0; + int stoponerr = 0; /* stop on read error */ + char* filename; + TIFF* tif = NULL; + int fg = 0; + int c; + int dirnum = -1; + int order0 = 0, order; + uint32 diroff = 0; + uint16 photo0 = (uint16) -1, photo; + long x, y, xmax, ymax; + int ix, nix; + TIFFErrorHandler oerror = TIFFSetErrorHandler(NULL); + TIFFErrorHandler owarning = TIFFSetWarningHandler(NULL); + uint32 w, h; + long wid = -1; + + while ((c = getopt(argc, argv, "d:o:p:cerflmsvw")) != -1) + switch (c) { + case 'c': + isRGB0 = 0; + break; + case 'd': + dirnum = atoi(optarg); + break; + case 'e': + oerror = TIFFSetErrorHandler(oerror); + break; + case 'f': + fg = 1; + break; + case 'l': + order0 = FILLORDER_LSB2MSB; + break; + case 'm': + order0 = FILLORDER_MSB2LSB; + break; + case 'o': + diroff = strtoul(optarg, NULL, 0); + break; + case 'p': + photo0 = photoArg(optarg); + break; + case 'r': + isRGB0 = 1; + break; + case 's': + stoponerr = 1; + break; + case 'w': + owarning = TIFFSetWarningHandler(owarning); + break; + case 'v': + verbose = 1; + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind < 1) + usage(); + xmax = getgdesc(GD_XPMAX) - XFUDGE; + ymax = getgdesc(GD_YPMAX) - YFUDGE; + ix = optind; + do { + tif = TIFFOpen(argv[ix], "r"); + } while (tif == NULL && (ix = nextImage(argv, ix, optind, argc, FALSE))); + if (tif == NULL) + exit(0); + if (ix == optind) { + /* + * Set initial directory if user-specified + * file was opened successfully. + */ + if (dirnum != -1 && !TIFFSetDirectory(tif, dirnum)) + TIFFError(argv[ix], "Error, seeking to directory %d", dirnum); + if (diroff != 0 && !TIFFSetSubDirectory(tif, diroff)) + TIFFError(argv[ix], "Error, setting subdirectory at %#x", diroff); + } + isRGB = isRGB0; + order = order0; + photo = photo0; + goto newfile0; + for (;;) { + TIFFRGBAImage img; + char title[1024]; /* window title line */ + const char* cp; + int isrgb; + + if (order) + TIFFSetField(tif, TIFFTAG_FILLORDER, order); + if (photo != (uint16) -1) + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, photo); + if (!TIFFRGBAImageBegin(&img, tif, stoponerr, title)) { + TIFFError(filename, title); + goto bad2; + } + /* + * Use a full-color window if the image is + * full color or a palette image and the + * hardware support is present. + */ + isrgb = isRGB; + if (isrgb == -1) + isrgb = (img.bitspersample >= 8 && + (img.photometric == PHOTOMETRIC_RGB || + img.photometric == PHOTOMETRIC_YCBCR || + img.photometric == PHOTOMETRIC_SEPARATED || + img.photometric == PHOTOMETRIC_PALETTE || + img.photometric == PHOTOMETRIC_LOGLUV)); + /* + * Check to see if the hardware can display 24-bit RGB. + */ + if (isrgb && getgdesc(GD_BITS_NORM_SNG_RED) < img.bitspersample && + !getgdesc(GD_DITHER)) { + if (verbose) + printf("Warning, display is incapable of full RGB,%s\n", + " using dithered colormap"); + isrgb = 0; + } + /* + * Colormap-based display is done by overriding the put + * routine to install a private method that understands + * how to convert RGBA values to suitable colormap indices. + */ + if (!isrgb) + setupColormapSupport(&img); + /* + * Override default ``put routine'' with private + * routine that also draws the raster on the display. + */ + if (img.put.any == 0) { + TIFFError(filename, + "No \"put\" routine; must not handle image format"); + goto bad3; + } + if (img.isContig) { + putContig = img.put.contig; + img.put.contig = putContigAndDraw; + } else { + putSeparate = img.put.separate; + img.put.separate = putSeparateAndDraw; + } + /* + * Setup the image raster as required. + */ + if ((w = img.width) > xmax) + w = xmax; + if ((h = img.height) > ymax) + h = ymax; + if (w != width || h != height) { + if (raster != NULL) + _TIFFfree(raster), raster = NULL; + raster = (uint32*) _TIFFmalloc(w * h * sizeof (uint32)); + if (raster == NULL) { + width = height = 0; + TIFFError(filename, "No space for raster buffer"); + goto bad3; + } + width = w; + height = h; + } + /* + * Create a new window or reconfigure an existing + * one to suit the image to be displayed. + */ + if (wid < 0) { + x = (xmax+XFUDGE-width)/2; + y = (ymax+YFUDGE-height)/2; + prefposition(x, x+width-1, y, y+height-1); + cp = strrchr(filename, '/'); + sprintf(title, "%s [%u] %s", + cp == NULL ? filename : cp+1, + (unsigned int) TIFFCurrentDirectory(tif), + isrgb ? " rgb" : " cmap"); + if (fg) + foreground(); + wid = winopen(title); + if (wid < 0) { + TIFFError(filename, "Can not create window"); + TIFFRGBAImageEnd(&img); + break; + } + curstype(C16X1); + defcursor(1, hourglass); + qdevice(LEFTMOUSE); + qdevice(MIDDLEMOUSE); + qdevice(RIGHTMOUSE); + qdevice(KEYBD); + qdevice(PAGEUPKEY); + qdevice(PAGEDOWNKEY); + qdevice(HOMEKEY); + qdevice(ENDKEY); + } else { + x = (xmax+XFUDGE-width)/2; + y = (ymax+YFUDGE-height)/2; + winposition(x, x+width-1, y, y+height-1); + viewport(0, width-1, 0, height-1); + cp = strrchr(filename, '/'); + sprintf(title, "%s [%u] %s", + cp == NULL ? filename : cp+1, + (unsigned int) TIFFCurrentDirectory(tif), + isrgb ? " rgb" : " cmap"); + wintitle(title); + } + singlebuffer(); + if (isrgb) { + RGBmode(); + gconfig(); + } else { + cmode(); + gconfig(); + } + /* + * Fetch the image. + */ + setcursor(1, 0, 0); + greyi(225); + clear(); + (void) TIFFRGBAImageGet(&img, raster, width, height); + setcursor(0, 0, 0); + /* + * Process input. + */ + for (;;) { + short val; + switch (qread(&val)) { + case KEYBD: + switch (val) { + case 'b': /* photometric MinIsBlack */ + photo = PHOTOMETRIC_MINISBLACK; + goto newpage; + case 'l': /* lsb-to-msb FillOrder */ + order = FILLORDER_LSB2MSB; + goto newpage; + case 'm': /* msb-to-lsb FillOrder */ + order = FILLORDER_MSB2LSB; + goto newpage; + case 'c': /* colormap visual */ + isRGB = 0; + goto newpage; + case 'r': /* RGB visual */ + isRGB = 1; + goto newpage; + case 'w': /* photometric MinIsWhite */ + photo = PHOTOMETRIC_MINISWHITE; + goto newpage; + case 'W': /* toggle warnings */ + owarning = TIFFSetWarningHandler(owarning); + goto newpage; + case 'E': /* toggle errors */ + oerror = TIFFSetErrorHandler(oerror); + goto newpage; + case 'z': /* reset to defaults */ + case 'Z': + order = order0; + photo = photo0; + isRGB = isRGB0; + if (owarning == NULL) + owarning = TIFFSetWarningHandler(NULL); + if (oerror == NULL) + oerror = TIFFSetErrorHandler(NULL); + goto newpage; + case 'q': /* exit */ + case '\033': + TIFFRGBAImageEnd(&img); + goto done; + } + break; + case PAGEUPKEY: /* previous logical image */ + if (val) { + if (TIFFCurrentDirectory(tif) > 0) { + if (TIFFSetDirectory(tif, TIFFCurrentDirectory(tif)-1)) + goto newpage; + beep(); /* XXX */ + } else { + ix = prevImage(argv, ix, optind, argc, TRUE); + /* XXX set directory to last image in new file */ + goto newfile; + } + } + break; + case PAGEDOWNKEY: /* next logical image */ + if (val) { + if (!TIFFLastDirectory(tif)) { + if (TIFFReadDirectory(tif)) + goto newpage; + beep(); /* XXX */ + } else { + ix = nextImage(argv, ix, optind, argc, TRUE); + goto newfile; + } + } + break; + case HOMEKEY: /* 1st image in current file */ + if (val) { + if (TIFFSetDirectory(tif, 0)) + goto newpage; + beep(); + } + break; + case ENDKEY: /* last image in current file */ + if (val) { + /* XXX */ + beep(); + } + break; + case RIGHTMOUSE: /* previous file */ + if (val) { + if (nix = prevImage(argv, ix, optind, argc, FALSE)) { + ix = nix; + goto newfile; + } + beep(); + } + break; + case LEFTMOUSE: /* next file */ + if (val) { + if (nix = nextImage(argv, ix, optind, argc, FALSE)) { + ix = nix; + goto newfile; + } + beep(); + } + break; + case MIDDLEMOUSE: /* first file */ + if (val) { + if (nix = nextImage(argv, optind-1, optind, argc, FALSE)) { + ix = nix; + goto newfile; + } + beep(); + } + break; + case REDRAW: + lrectwrite(0, 0, width-1, height-1, raster); + break; + } + } + newfile: + TIFFRGBAImageEnd(&img); + if (tif != NULL && argv[ix] != filename) + TIFFClose(tif), tif = NULL; + /* fall thru... */ + newfile0: + if (argv[ix] == NULL) + break; + filename = argv[ix]; + if (tif == NULL) { + tif = TIFFOpen(filename, "r"); + if (tif == NULL) + goto bad1; + isRGB = isRGB0; + order = order0; + photo = photo0; + } + continue; + newpage: + TIFFRGBAImageEnd(&img); + continue; + bad3: + TIFFRGBAImageEnd(&img); + bad2: + TIFFClose(tif), tif = NULL; + bad1: + argv[ix] = NULL; /* don't revisit file */ + ix = nextImage(argv, ix, optind, argc, TRUE); + goto newfile0; + } +done: + if (wid >= 0) + winclose(wid); + if (raster != NULL) + _TIFFfree(raster); + if (tif != NULL) + TIFFClose(tif); + return (0); +} + +static int +prevImage(char* argv[], int ix, int b, int e, int wrap) +{ + int i; + + for (i = ix-1; i >= b && argv[i] == NULL; i--) + ; + if (i < b) { + if (wrap) { + for (i = e-1; i > ix && argv[i] == NULL; i--) + ; + } else + i = 0; + } + return (i); +} + +static int +nextImage(char* argv[], int ix, int b, int e, int wrap) +{ + int i; + + for (i = ix+1; i < e && argv[i] == NULL; i++) + ; + if (i >= e) { + if (wrap) { + for (i = b; i < ix && argv[i] == NULL; i++) + ; + } else + i = 0; + } + return (i); +} + +static void +beep(void) +{ + greyi(0); + clear(); + sginap(5); + lrectwrite(0, 0, width-1, height-1, raster); +} + +char* stuff[] = { +"usage: tiffgt [options] file.tif", +"where options are:", +" -c use colormap visual", +" -d dirnum set initial directory (default is 0)", +" -e enable display of TIFF error messages", +" -f run program in the foreground", +" -l force lsb-to-msb FillOrder", +" -m force msb-to-lsb FillOrder", +" -o offset set initial directory offset", +" -p photo override photometric interpretation", +" -r use fullcolor visual", +" -s stop decoding on first error (default is ignore errors)", +" -v enable verbose mode", +" -w enable display of TIFF warning messages", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} + +static uint16 +photoArg(const char* arg) +{ + if (strcmp(arg, "miniswhite") == 0) + return (PHOTOMETRIC_MINISWHITE); + else if (strcmp(arg, "minisblack") == 0) + return (PHOTOMETRIC_MINISBLACK); + else if (strcmp(arg, "rgb") == 0) + return (PHOTOMETRIC_RGB); + else if (strcmp(arg, "palette") == 0) + return (PHOTOMETRIC_PALETTE); + else if (strcmp(arg, "mask") == 0) + return (PHOTOMETRIC_MASK); + else if (strcmp(arg, "separated") == 0) + return (PHOTOMETRIC_SEPARATED); + else if (strcmp(arg, "ycbcr") == 0) + return (PHOTOMETRIC_YCBCR); + else if (strcmp(arg, "cielab") == 0) + return (PHOTOMETRIC_CIELAB); + else if (strcmp(arg, "logl") == 0) + return (PHOTOMETRIC_LOGL); + else if (strcmp(arg, "logluv") == 0) + return (PHOTOMETRIC_LOGLUV); + else + return ((uint16) -1); +} + +static void +putContigAndDraw(TIFFRGBAImage* img, uint32* raster, + uint32 x, uint32 y, uint32 w, uint32 h, + int32 fromskew, int32 toskew, + unsigned char* cp) +{ + (*putContig)(img, raster, x, y, w, h, fromskew, toskew, cp); + if (x+w == width) { + w = width; + if (img->orientation == ORIENTATION_TOPLEFT) + lrectwrite(0, y-(h-1), w-1, y, raster-x-(h-1)*w); + else + lrectwrite(0, y, w-1, y+h-1, raster); + } +} + +static void +putSeparateAndDraw(TIFFRGBAImage* img, uint32* raster, + uint32 x, uint32 y, uint32 w, uint32 h, + int32 fromskew, int32 toskew, + unsigned char* r, unsigned char* g, unsigned char* b, unsigned char* a) +{ + (*putSeparate)(img, raster, x, y, w, h, fromskew, toskew, r, g, b, a); + if (x+w == width) { + w = width; + if (img->orientation == ORIENTATION_TOPLEFT) + lrectwrite(0, y-(h-1), w-1, y, raster-x-(h-1)*w); + else + lrectwrite(0, y, w-1, y+h-1, raster); + } +} + +/* + * {red,green,blue}_inverse are tables in libgutil.a that + * do an inverse map from (r,g,b) to the closest colormap + * index in the "standard" GL colormap. grey_inverse is + * the equivalent map for mapping greyscale values to + * colormap indices. We access these maps directly instead + * of through the rgbi and greyi functions to avoid the + * additional overhead of the color calls that they make. + */ +extern u_char red_inverse[256]; +extern u_char green_inverse[256]; +extern u_char blue_inverse[256]; +extern u_char grey_inverse[256]; +#define greyi(g) grey_inverse[g] + +static u_char +rgbi(u_char r, u_char g, u_char b) +{ + return (r == g && g == b ? grey_inverse[r] : + red_inverse[r] + green_inverse[g] + blue_inverse[b]); +} + +/* + * The following routines move decoded data returned + * from the TIFF library into rasters that are suitable + * for passing to lrecwrite. They do the necessary + * conversions for when a colormap drawing mode is used. + */ +#define REPEAT8(op) REPEAT4(op); REPEAT4(op) +#define REPEAT4(op) REPEAT2(op); REPEAT2(op) +#define REPEAT2(op) op; op +#define CASE8(x,op) \ + switch (x) { \ + case 7: op; case 6: op; case 5: op; \ + case 4: op; case 3: op; case 2: op; \ + case 1: op; \ + } +#define CASE4(x,op) switch (x) { case 3: op; case 2: op; case 1: op; } +#define NOP + +#define UNROLL8(w, op1, op2) { \ + uint32 _x; \ + for (_x = w; _x >= 8; _x -= 8) { \ + op1; \ + REPEAT8(op2); \ + } \ + if (_x > 0) { \ + op1; \ + CASE8(_x,op2); \ + } \ +} +#define UNROLL4(w, op1, op2) { \ + uint32 _x; \ + for (_x = w; _x >= 4; _x -= 4) { \ + op1; \ + REPEAT4(op2); \ + } \ + if (_x > 0) { \ + op1; \ + CASE4(_x,op2); \ + } \ +} +#define UNROLL2(w, op1, op2) { \ + uint32 _x; \ + for (_x = w; _x >= 2; _x -= 2) { \ + op1; \ + REPEAT2(op2); \ + } \ + if (_x) { \ + op1; \ + op2; \ + } \ +} + +#define SKEW(r,g,b,skew) { r += skew; g += skew; b += skew; } + +#define DECLAREContigPutFunc(name) \ +static void name(\ + TIFFRGBAImage* img, \ + uint32* cp, \ + uint32 x, uint32 y, \ + uint32 w, uint32 h, \ + int32 fromskew, int32 toskew, \ + u_char* pp \ +) + +#define DECLARESepPutFunc(name) \ +static void name(\ + TIFFRGBAImage* img,\ + uint32* cp,\ + uint32 x, uint32 y, \ + uint32 w, uint32 h,\ + int32 fromskew, int32 toskew,\ + u_char* r, u_char* g, u_char* b, u_char* a\ +) + +static tileContigRoutine libput; + +/* + * 8-bit packed samples => colormap + */ +DECLAREContigPutFunc(putcontig8bittile) +{ + int samplesperpixel = img->samplesperpixel; + TIFFRGBValue* Map = img->Map; + + (void) y; + fromskew *= samplesperpixel; + if (Map) { + while (h-- > 0) { + for (x = w; x-- > 0;) { + *cp++ = rgbi(Map[pp[0]], Map[pp[1]], Map[pp[2]]); + pp += samplesperpixel; + } + cp += toskew; + pp += fromskew; + } + } else { + while (h-- > 0) { + for (x = w; x-- > 0;) { + *cp++ = rgbi(pp[0], pp[1], pp[2]); + pp += samplesperpixel; + } + cp += toskew; + pp += fromskew; + } + } +} + +/* + * Convert 8-bit packed samples => colormap + */ +DECLAREContigPutFunc(cvtcontig8bittile) +{ + (*libput)(img, cp, x, y, w, h, fromskew, toskew, pp); + while (h-- > 0) { + UNROLL8(w, NOP, + cp[0] = rgbi(TIFFGetR(cp[0]),TIFFGetG(cp[0]),TIFFGetB(cp[0])); cp++ + ); + cp += toskew; + } +} + +/* + * 16-bit packed samples => colormap + */ +DECLAREContigPutFunc(putcontig16bittile) +{ + int samplesperpixel = img->samplesperpixel; + TIFFRGBValue* Map = img->Map; + + (void) y; + fromskew *= samplesperpixel; + if (Map) { + while (h-- > 0) { + for (x = w; x-- > 0;) { + *cp++ = rgbi(Map[pp[0]], Map[pp[1]], Map[pp[2]]); + pp += samplesperpixel; + } + cp += toskew; + pp += fromskew; + } + } else { + while (h-- > 0) { + for (x = w; x-- > 0;) { + *cp++ = rgbi(pp[0], pp[1], pp[2]); + pp += samplesperpixel; + } + cp += toskew; + pp += fromskew; + } + } +} + +/* + * 8-bit unpacked samples => colormap + */ +DECLARESepPutFunc(putseparate8bittile) +{ + TIFFRGBValue* Map = img->Map; + + (void) y; (void) a; + if (Map) { + while (h-- > 0) { + for (x = w; x-- > 0;) + *cp++ = rgbi(Map[*r++], Map[*g++], Map[*b++]); + SKEW(r, g, b, fromskew); + cp += toskew; + } + } else { + while (h-- > 0) { + for (x = w; x-- > 0;) + *cp++ = rgbi(*r++, *g++, *b++); + SKEW(r, g, b, fromskew); + cp += toskew; + } + } +} + +/* + * 16-bit unpacked samples => colormap + */ +DECLARESepPutFunc(putseparate16bittile) +{ + TIFFRGBValue* Map = img->Map; + + (void) y; (void) a; + if (Map) { + while (h-- > 0) { + for (x = 0; x < w; x++) + *cp++ = rgbi(Map[*r++], Map[*g++], Map[*b++]); + SKEW(r, g, b, fromskew); + cp += toskew; + } + } else { + while (h-- > 0) { + for (x = 0; x < w; x++) + *cp++ = rgbi(*r++, *g++, *b++); + SKEW(r, g, b, fromskew); + cp += toskew; + } + } +} + +/* + * 8-bit packed CMYK samples => cmap + * + * NB: The conversion of CMYK->RGB is *very* crude. + */ +DECLAREContigPutFunc(putcontig8bitCMYKtile) +{ + int samplesperpixel = img->samplesperpixel; + TIFFRGBValue* Map = img->Map; + uint16 r, g, b, k; + + (void) y; + fromskew *= samplesperpixel; + if (Map) { + while (h-- > 0) { + for (x = w; x-- > 0;) { + k = 255 - pp[3]; + r = (k*(255-pp[0]))/255; + g = (k*(255-pp[1]))/255; + b = (k*(255-pp[2]))/255; + *cp++ = rgbi(Map[r], Map[g], Map[b]); + pp += samplesperpixel; + } + pp += fromskew; + cp += toskew; + } + } else { + while (h-- > 0) { + UNROLL8(w, NOP, + k = 255 - pp[3]; + r = (k*(255-pp[0]))/255; + g = (k*(255-pp[1]))/255; + b = (k*(255-pp[2]))/255; + *cp++ = rgbi(r, g, b); + pp += samplesperpixel); + cp += toskew; + pp += fromskew; + } + } +} + +#define YCbCrtoRGB(dst, yc) { \ + int Y = (yc); \ + dst = rgbi( \ + clamptab[Y+Crrtab[Cr]], \ + clamptab[Y + (int)((Cbgtab[Cb]+Crgtab[Cr])>>16)], \ + clamptab[Y+Cbbtab[Cb]]); \ +} +#define YCbCrSetup \ + TIFFYCbCrToRGB* ycbcr = img->ycbcr; \ + int* Crrtab = ycbcr->Cr_r_tab; \ + int* Cbbtab = ycbcr->Cb_b_tab; \ + int32* Crgtab = ycbcr->Cr_g_tab; \ + int32* Cbgtab = ycbcr->Cb_g_tab; \ + TIFFRGBValue* clamptab = ycbcr->clamptab + +/* + * 8-bit packed YCbCr samples w/ 2,2 subsampling => RGB + */ +DECLAREContigPutFunc(putcontig8bitYCbCr22tile) +{ + YCbCrSetup; + uint32* cp1 = cp+w+toskew; + int32 incr = 2*toskew+w; + + (void) y; + /* XXX adjust fromskew */ + for (; h >= 2; h -= 2) { + x = w>>1; + do { + int Cb = pp[4]; + int Cr = pp[5]; + + YCbCrtoRGB(cp [0], pp[0]); + YCbCrtoRGB(cp [1], pp[1]); + YCbCrtoRGB(cp1[0], pp[2]); + YCbCrtoRGB(cp1[1], pp[3]); + + cp += 2, cp1 += 2; + pp += 6; + } while (--x); + cp += incr, cp1 += incr; + pp += fromskew; + } +} +#undef YCbCrSetup +#undef YCbCrtoRGB + +/* + * Setup to handle conversion for display in a colormap + * window. Many cases are handled by massaging the mapping + * tables used by the normal library code to convert 32-bit + * packed RGBA samples into colormap indices. Other cases + * are handled with special-case routines that replace the + * normal ``put routine'' installed by the library. + */ +static void +setupColormapSupport(TIFFRGBAImage* img) +{ + int bitspersample = img->bitspersample; + int i; + + if (img->BWmap) { + i = 255; + do { + uint32* p = img->BWmap[i]; + switch (bitspersample) { +#define GREY(x) p[x] = greyi(TIFFGetR(p[x])) + case 1: GREY(7); GREY(6); GREY(5); GREY(4); + case 2: GREY(3); GREY(2); + case 4: GREY(1); + case 8: GREY(0); + } +#undef GREY + } while (i--); + } else if (img->PALmap) { + i = 255; + do { + uint32 rgb; + uint32* p = img->PALmap[i]; +#define CMAP(x) \ + (rgb = p[x], p[x] = rgbi(TIFFGetR(rgb),TIFFGetG(rgb),TIFFGetB(rgb))) + switch (bitspersample) { + case 1: CMAP(7); CMAP(6); CMAP(5); CMAP(4); + case 2: CMAP(3); CMAP(2); + case 4: CMAP(1); + case 8: CMAP(0); + } +#undef CMAP + } while (i--); + } else if (img->isContig) { + switch (img->photometric) { + case PHOTOMETRIC_RGB: + case PHOTOMETRIC_LOGLUV: + switch (bitspersample) { + case 8: img->put.contig = putcontig8bittile; break; + case 16: img->put.contig = putcontig16bittile; break; + } + break; + case PHOTOMETRIC_SEPARATED: + switch (bitspersample) { + case 8: img->put.contig = putcontig8bitCMYKtile; break; + } + break; + case PHOTOMETRIC_YCBCR: + if (img->bitspersample == 8) { + uint16 hs, vs; + TIFFGetFieldDefaulted(img->tif, TIFFTAG_YCBCRSUBSAMPLING, + &hs, &vs); + switch ((hs<<4)|vs) { + case 0x22: /* most common case */ + img->put.contig = putcontig8bitYCbCr22tile; + break; + default: /* all others cost more */ + libput = img->put.contig; + img->put.contig = cvtcontig8bittile; + break; + } + } + break; + } + } else { + switch (img->photometric) { + case PHOTOMETRIC_RGB: + switch (img->bitspersample) { + case 8: img->put.separate = putseparate8bittile; break; + case 16: img->put.separate = putseparate16bittile; break; + } + break; + } + } +} diff --git a/tools/sgisv.c b/tools/sgisv.c new file mode 100755 index 0000000..82bf9ca --- /dev/null +++ b/tools/sgisv.c @@ -0,0 +1,310 @@ +/* $Header: /home/cvsroot/libtiff/tools/sgisv.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1990-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include + +#include +#include + +#include "tiffio.h" + +typedef unsigned char u_char; +typedef unsigned long u_long; + +#define streq(a,b) (strcmp(a,b) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) + +uint32 rowsperstrip = (uint32) -1; +uint16 compression = COMPRESSION_PACKBITS; +uint16 config = PLANARCONFIG_CONTIG; +uint16 predictor = 0; +int xmaxscreen; +int ymaxscreen; +uint16 photometric = PHOTOMETRIC_RGB; +int jpegcolormode = JPEGCOLORMODE_RGB; +int quality = 75; /* JPEG quality */ + +static void usage(void); +static void tiffsv(char*, int, int, int, int); + +int +main(int argc, char* argv[]) +{ + int c; + extern int optind; + extern char* optarg; + + while ((c = getopt(argc, argv, "c:p:r:")) != -1) + switch (c) { + case 'b': /* save as b&w */ + photometric = PHOTOMETRIC_MINISBLACK; + break; + case 'c': /* compression scheme */ + if (streq(optarg, "none")) + compression = COMPRESSION_NONE; + else if (streq(optarg, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (strneq(optarg, "jpeg", 4)) { + char* cp = strchr(optarg, ':'); + if (cp && isdigit(cp[1])) + quality = atoi(cp+1); + if (cp && strchr(cp, 'r')) + jpegcolormode = JPEGCOLORMODE_RAW; + compression = COMPRESSION_JPEG; + } else if (strneq(optarg, "lzw", 3)) { + char* cp = strchr(optarg, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_LZW; + } else + usage(); + break; + case 'p': /* planar configuration */ + if (streq(optarg, "separate")) + config = PLANARCONFIG_SEPARATE; + else if (streq(optarg, "contig")) + config = PLANARCONFIG_CONTIG; + else + usage(); + break; + case 'r': /* rows/strip */ + rowsperstrip = atoi(optarg); + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind != 1 && argc - optind != 5) + usage(); + xmaxscreen = getgdesc(GD_XPMAX)-1; + ymaxscreen = getgdesc(GD_YPMAX)-1; + foreground(); + noport(); + winopen("tiffsv"); + if (argc - optind == 5) + tiffsv(argv[optind], + atoi(argv[optind+1]), atoi(argv[optind+2]), + atoi(argv[optind+3]), atoi(argv[optind+4])); + else + tiffsv(argv[optind], 0, xmaxscreen, 0, ymaxscreen); + return (0); +} + +char* stuff[] = { +"usage: tiffsv [options] outimage.tif [x1 x2 y1 y2] [-b]", +"where options are:", +" -p contig pack samples contiguously (e.g. RGBRGB...)", +" -p separate store samples separately (e.g. RRR...GGG...BBB...)", +"", +" -r # make each strip have no more than # rows", +"", +" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", +" (no longer supported by default due to Unisys patent enforcement)", +" -c jpeg[:opts]compress output with JPEG encoding", +" -c packbits compress output with packbits encoding", +" -c none use no compression algorithm on output", +"", +"JPEG options:", +" # set compression quality level (0-100, default 75)", +" r output color image as RGB rather than YCbCr", +"", +"LZW options:", +" # set predictor value for Lempel-Ziv & Welch encoding", +"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} + +static void +svRGBSeparate(TIFF* tif, u_long* ss, int xsize, int ysize) +{ + tsize_t stripsize = TIFFStripSize(tif); + u_char *rbuf = (u_char *)_TIFFmalloc(3*stripsize); + u_char *gbuf = rbuf + stripsize; + u_char *bbuf = gbuf + stripsize; + register int y; + + for (y = 0; y <= ysize; y += rowsperstrip) { + u_char *rp, *gp, *bp; + register int x; + register uint32 n; + + n = rowsperstrip; + if (n > ysize-y+1) + n = ysize-y+1; + rp = rbuf; gp = gbuf; bp = bbuf; + do { + for (x = 0; x <= xsize; x++) { + u_long v = ss[x]; + rp[x] = v; + gp[x] = v >> 8; + bp[x] = v >> 16; + } + rp += xsize+1, gp += xsize+1, bp += xsize+1; + ss += xsize+1; + } while (--n); + if (TIFFWriteEncodedStrip(tif, TIFFComputeStrip(tif,y,0), + rbuf, stripsize) < 0) + break; + if (TIFFWriteEncodedStrip(tif, TIFFComputeStrip(tif,y,1), + gbuf, stripsize) < 0) + break; + if (TIFFWriteEncodedStrip(tif, TIFFComputeStrip(tif,y,2), + bbuf, stripsize) < 0) + break; + } + _TIFFfree(rbuf); +} + +static void +svRGBContig(TIFF* tif, u_long* ss, int xsize, int ysize) +{ + register int x, y; + tsize_t stripsize = TIFFStripSize(tif); + u_char *strip = (u_char *)_TIFFmalloc(stripsize); + + for (y = 0; y <= ysize; y += rowsperstrip) { + register u_char *pp = strip; + register uint32 n; + + n = rowsperstrip; + if (n > ysize-y+1) + n = ysize-y+1; + do { + for (x = 0; x <= xsize; x++) { + u_long v = ss[x]; + pp[0] = v; + pp[1] = v >> 8; + pp[2] = v >> 16; + pp += 3; + } + ss += xsize+1; + } while (--n); + if (TIFFWriteEncodedStrip(tif, TIFFComputeStrip(tif,y,0), + strip, stripsize) < 0) + break; + } + _TIFFfree(strip); +} + +#undef RED +#undef GREEN +#undef BLUE +#define CVT(x) (((x)*255)/100) +#define RED CVT(28) /* 28% */ +#define GREEN CVT(59) /* 59% */ +#define BLUE CVT(11) /* 11% */ + +static void +svGrey(TIFF* tif, u_long* ss, int xsize, int ysize) +{ + register int x, y; + u_char *buf = (u_char *)_TIFFmalloc(TIFFScanlineSize(tif)); + + for (y = 0; y <= ysize; y++) { + for (x = 0; x <= xsize; x++) { + u_char *cp = (u_char *)&ss[x]; + buf[x] = (RED*cp[3] + GREEN*cp[2] + BLUE*cp[1]) >> 8; + } + if (TIFFWriteScanline(tif, buf, (uint32) y, 0) < 0) + break; + ss += xsize+1; + } + _TIFFfree(buf); +} + +#define MIN(a,b) ((a)<(b)?(a):(b)) +#define ABS(x) ((x)<0?-(x):(x)) + +static void +tiffsv(char* name, int x1, int x2, int y1, int y2) +{ + TIFF *tif; + int xsize, ysize; + int xorg, yorg; + u_long *scrbuf; + + xorg = MIN(x1,x2); + yorg = MIN(y1,y2); + if (xorg<0) + xorg = 0; + if (yorg<0) + yorg = 0; + xsize = ABS(x2-x1); + ysize = ABS(y2-y1); + if (xorg+xsize > xmaxscreen) + xsize = xmaxscreen-xorg; + if (yorg+ysize > ymaxscreen) + ysize = ymaxscreen-yorg; + tif = TIFFOpen(name, "w"); + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, (uint32) (xsize+1)); + TIFFSetField(tif, TIFFTAG_IMAGELENGTH, (uint32) (ysize+1)); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, + photometric == PHOTOMETRIC_RGB ? 3 : 1); + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, config); + TIFFSetField(tif, TIFFTAG_COMPRESSION, compression); + switch (compression) { + case COMPRESSION_JPEG: + if (photometric == PHOTOMETRIC_RGB && jpegcolormode == JPEGCOLORMODE_RGB) + photometric = PHOTOMETRIC_YCBCR; + TIFFSetField(tif, TIFFTAG_JPEGQUALITY, quality); + TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE, jpegcolormode); + break; + case COMPRESSION_LZW: + if (predictor != 0) + TIFFSetField(tif, TIFFTAG_PREDICTOR, predictor); + break; + } + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, photometric); + TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_BOTLEFT); + rowsperstrip = TIFFDefaultStripSize(tif, rowsperstrip); + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip); + scrbuf = (u_long *)_TIFFmalloc((xsize+1)*(ysize+1)*sizeof (u_long)); + readdisplay(xorg, yorg, xorg+xsize, yorg+ysize, scrbuf, RD_FREEZE); + if (photometric == PHOTOMETRIC_RGB) { + if (config == PLANARCONFIG_SEPARATE) + svRGBSeparate(tif, scrbuf, xsize, ysize); + else + svRGBContig(tif, scrbuf, xsize, ysize); + } else + svGrey(tif, scrbuf, xsize, ysize); + (void) TIFFClose(tif); + _TIFFfree((char *)scrbuf); +} diff --git a/tools/thumbnail.c b/tools/thumbnail.c new file mode 100755 index 0000000..a018047 --- /dev/null +++ b/tools/thumbnail.c @@ -0,0 +1,572 @@ +/* $Header: /home/cvsroot/libtiff/tools/thumbnail.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1994-1997 Sam Leffler + * Copyright (c) 1994-1997 Silicon Graphics, Inc. + * + * 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. + */ +#include +#include +#include +#include + +#include "tiffio.h" + +#define streq(a,b) (strcasecmp(a,b) == 0) + +#ifndef howmany +#define howmany(x, y) (((x)+((y)-1))/(y)) +#endif + +typedef enum { + EXP50, + EXP60, + EXP70, + EXP80, + EXP90, + EXP, + LINEAR +} Contrast; + +static uint32 tnw = 216; /* thumbnail width */ +static uint32 tnh = 274; /* thumbnail height */ +static Contrast contrast = LINEAR; /* current contrast */ +static uint8* thumbnail; + +static int cpIFD(TIFF*, TIFF*); +static int generateThumbnail(TIFF*, TIFF*); +static void initScale(); +static void usage(void); + +extern char* optarg; +extern int optind; + +int +main(int argc, char* argv[]) +{ + TIFF* in; + TIFF* out; + int c; + + while ((c = getopt(argc, argv, "w:h:c:")) != -1) { + switch (c) { + case 'w': tnw = strtoul(optarg, NULL, 0); break; + case 'h': tnh = strtoul(optarg, NULL, 0); break; + case 'c': contrast = streq(optarg, "exp50") ? EXP50 : + streq(optarg, "exp60") ? EXP60 : + streq(optarg, "exp70") ? EXP70 : + streq(optarg, "exp80") ? EXP80 : + streq(optarg, "exp90") ? EXP90 : + streq(optarg, "exp") ? EXP : + streq(optarg, "linear")? LINEAR : + EXP; + break; + default: usage(); + } + } + if (argc-optind != 2) + usage(); + thumbnail = (uint8*) _TIFFmalloc(tnw * tnh); + out = TIFFOpen(argv[optind+1], "w"); + if (out == NULL) + return (-2); + in = TIFFOpen(argv[optind], "r"); + if (in != NULL) { + initScale(); + do { + if (!generateThumbnail(in, out)) + goto bad; + if (!cpIFD(in, out) || !TIFFWriteDirectory(out)) + goto bad; + } while (TIFFReadDirectory(in)); + (void) TIFFClose(in); + } + (void) TIFFClose(out); + return (0); +bad: + (void) TIFFClose(out); + return (1); +} + +#define CopyField1(tag, v) \ + if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) +#define CopyField2(tag, v1, v2) \ + if (TIFFGetField(in, tag, &v1, &v2)) TIFFSetField(out, tag, v1, v2) +#define CopyField3(tag, v1, v2, v3) \ + if (TIFFGetField(in, tag, &v1, &v2, &v3)) TIFFSetField(out, tag, v1, v2, v3) +#define CopyField4(tag, v1, v2, v3, v4) \ + if (TIFFGetField(in, tag, &v1, &v2, &v3, &v4)) TIFFSetField(out, tag, v1, v2, v3, v4) + +static void +cpTag(TIFF* in, TIFF* out, uint16 tag, uint16 count, TIFFDataType type) +{ + uint16 shortv, shortv2, *shortav; + float floatv, *floatav; + char *stringv; + uint32 longv; + + switch (type) { + case TIFF_SHORT: + if (count == 1) { + CopyField1(tag, shortv); + } else if (count == 2) { + CopyField2(tag, shortv, shortv2); + } else if (count == (uint16) -1) { + CopyField2(tag, shortv, shortav); + } + break; + case TIFF_LONG: + CopyField1(tag, longv); + break; + case TIFF_RATIONAL: + if (count == 1) { + CopyField1(tag, floatv); + } else if (count == (uint16) -1) { + CopyField1(tag, floatav); + } + break; + case TIFF_ASCII: + CopyField1(tag, stringv); + break; + } +} +#undef CopyField4 +#undef CopyField3 +#undef CopyField2 +#undef CopyField1 + +static struct cpTag { + uint16 tag; + uint16 count; + TIFFDataType type; +} tags[] = { + { TIFFTAG_IMAGEWIDTH, 1, TIFF_LONG }, + { TIFFTAG_IMAGELENGTH, 1, TIFF_LONG }, + { TIFFTAG_BITSPERSAMPLE, 1, TIFF_SHORT }, + { TIFFTAG_COMPRESSION, 1, TIFF_SHORT }, + { TIFFTAG_FILLORDER, 1, TIFF_SHORT }, + { TIFFTAG_SAMPLESPERPIXEL, 1, TIFF_SHORT }, + { TIFFTAG_ROWSPERSTRIP, 1, TIFF_LONG }, + { TIFFTAG_PLANARCONFIG, 1, TIFF_SHORT }, + { TIFFTAG_GROUP3OPTIONS, 1, TIFF_LONG }, + { TIFFTAG_SUBFILETYPE, 1, TIFF_LONG }, + { TIFFTAG_PHOTOMETRIC, 1, TIFF_SHORT }, + { TIFFTAG_THRESHHOLDING, 1, TIFF_SHORT }, + { TIFFTAG_DOCUMENTNAME, 1, TIFF_ASCII }, + { TIFFTAG_IMAGEDESCRIPTION, 1, TIFF_ASCII }, + { TIFFTAG_MAKE, 1, TIFF_ASCII }, + { TIFFTAG_MODEL, 1, TIFF_ASCII }, + { TIFFTAG_ORIENTATION, 1, TIFF_SHORT }, + { TIFFTAG_MINSAMPLEVALUE, 1, TIFF_SHORT }, + { TIFFTAG_MAXSAMPLEVALUE, 1, TIFF_SHORT }, + { TIFFTAG_XRESOLUTION, 1, TIFF_RATIONAL }, + { TIFFTAG_YRESOLUTION, 1, TIFF_RATIONAL }, + { TIFFTAG_PAGENAME, 1, TIFF_ASCII }, + { TIFFTAG_XPOSITION, 1, TIFF_RATIONAL }, + { TIFFTAG_YPOSITION, 1, TIFF_RATIONAL }, + { TIFFTAG_GROUP4OPTIONS, 1, TIFF_LONG }, + { TIFFTAG_RESOLUTIONUNIT, 1, TIFF_SHORT }, + { TIFFTAG_PAGENUMBER, 2, TIFF_SHORT }, + { TIFFTAG_SOFTWARE, 1, TIFF_ASCII }, + { TIFFTAG_DATETIME, 1, TIFF_ASCII }, + { TIFFTAG_ARTIST, 1, TIFF_ASCII }, + { TIFFTAG_HOSTCOMPUTER, 1, TIFF_ASCII }, + { TIFFTAG_WHITEPOINT, 1, TIFF_RATIONAL }, + { TIFFTAG_PRIMARYCHROMATICITIES, (uint16) -1,TIFF_RATIONAL }, + { TIFFTAG_HALFTONEHINTS, 2, TIFF_SHORT }, + { TIFFTAG_BADFAXLINES, 1, TIFF_LONG }, + { TIFFTAG_CLEANFAXDATA, 1, TIFF_SHORT }, + { TIFFTAG_CONSECUTIVEBADFAXLINES, 1, TIFF_LONG }, + { TIFFTAG_INKSET, 1, TIFF_SHORT }, + { TIFFTAG_INKNAMES, 1, TIFF_ASCII }, + { TIFFTAG_DOTRANGE, 2, TIFF_SHORT }, + { TIFFTAG_TARGETPRINTER, 1, TIFF_ASCII }, + { TIFFTAG_SAMPLEFORMAT, 1, TIFF_SHORT }, + { TIFFTAG_YCBCRCOEFFICIENTS, (uint16) -1,TIFF_RATIONAL }, + { TIFFTAG_YCBCRSUBSAMPLING, 2, TIFF_SHORT }, + { TIFFTAG_YCBCRPOSITIONING, 1, TIFF_SHORT }, + { TIFFTAG_REFERENCEBLACKWHITE, (uint16) -1,TIFF_RATIONAL }, + { TIFFTAG_EXTRASAMPLES, (uint16) -1, TIFF_SHORT }, +}; +#define NTAGS (sizeof (tags) / sizeof (tags[0])) + +static void +cpTags(TIFF* in, TIFF* out) +{ + struct cpTag *p; + for (p = tags; p < &tags[NTAGS]; p++) + cpTag(in, out, p->tag, p->count, p->type); +} +#undef NTAGS + +static int +cpStrips(TIFF* in, TIFF* out) +{ + tsize_t bufsize = TIFFStripSize(in); + unsigned char *buf = (unsigned char *)_TIFFmalloc(bufsize); + + if (buf) { + tstrip_t s, ns = TIFFNumberOfStrips(in); + uint32 *bytecounts; + + TIFFGetField(in, TIFFTAG_STRIPBYTECOUNTS, &bytecounts); + for (s = 0; s < ns; s++) { + if (bytecounts[s] > bufsize) { + buf = (unsigned char *)_TIFFrealloc(buf, bytecounts[s]); + if (!buf) + return (0); + bufsize = bytecounts[s]; + } + if (TIFFReadRawStrip(in, s, buf, bytecounts[s]) < 0 || + TIFFWriteRawStrip(out, s, buf, bytecounts[s]) < 0) { + _TIFFfree(buf); + return (0); + } + } + _TIFFfree(buf); + return (1); + } + return (0); +} + +static int +cpTiles(TIFF* in, TIFF* out) +{ + tsize_t bufsize = TIFFTileSize(in); + unsigned char *buf = (unsigned char *)_TIFFmalloc(bufsize); + + if (buf) { + ttile_t t, nt = TIFFNumberOfTiles(in); + uint32 *bytecounts; + + TIFFGetField(in, TIFFTAG_TILEBYTECOUNTS, &bytecounts); + for (t = 0; t < nt; t++) { + if (bytecounts[t] > bufsize) { + buf = (unsigned char *)_TIFFrealloc(buf, bytecounts[t]); + if (!buf) + return (0); + bufsize = bytecounts[t]; + } + if (TIFFReadRawTile(in, t, buf, bytecounts[t]) < 0 || + TIFFWriteRawTile(out, t, buf, bytecounts[t]) < 0) { + _TIFFfree(buf); + return (0); + } + } + _TIFFfree(buf); + return (1); + } + return (0); +} + +static int +cpIFD(TIFF* in, TIFF* out) +{ + cpTags(in, out); + if (TIFFIsTiled(in)) { + if (!cpTiles(in, out)) + return (0); + } else { + if (!cpStrips(in, out)) + return (0); + } + return (1); +} + +static uint16 photometric; /* current photometric of raster */ +static uint16 filterWidth; /* filter width in pixels */ +static uint16 stepSrcWidth; /* src image stepping width */ +static uint16 stepDstWidth; /* dest stepping width */ +static uint8* src0; /* horizontal bit stepping (start) */ +static uint8* src1; /* horizontal bit stepping (middle) */ +static uint8* src2; /* horizontal bit stepping (end) */ +static uint16* rowoff; /* row offset for stepping */ +static uint8 cmap[256]; /* colormap indexes */ +static uint8 bits[256]; /* count of bits set */ + +static void +setupBitsTables() +{ + int i; + for (i = 0; i < 256; i++) { + int n = 0; + if (i&0x01) n++; + if (i&0x02) n++; + if (i&0x04) n++; + if (i&0x08) n++; + if (i&0x10) n++; + if (i&0x20) n++; + if (i&0x40) n++; + if (i&0x80) n++; + bits[i] = n; + } +} + +static int clamp(float v, int low, int high) + { return (v < low ? low : v > high ? high : (int)v); } + +#ifndef M_E +#define M_E 2.7182818284590452354 +#endif + +static void +expFill(float pct[], uint32 p, uint32 n) +{ + uint32 i; + uint32 c = (p * n) / 100; + for (i = 1; i < c; i++) + pct[i] = 1-exp(i/((double)(n-1)))/ M_E; + for (; i < n; i++) + pct[i] = 0.; +} + +static void +setupCmap() +{ + float pct[256]; /* known to be large enough */ + uint32 i; + pct[0] = 1; /* force white */ + switch (contrast) { + case EXP50: expFill(pct, 50, 256); break; + case EXP60: expFill(pct, 60, 256); break; + case EXP70: expFill(pct, 70, 256); break; + case EXP80: expFill(pct, 80, 256); break; + case EXP90: expFill(pct, 90, 256); break; + case EXP: expFill(pct, 100, 256); break; + case LINEAR: + for (i = 1; i < 256; i++) + pct[i] = 1-((float)i)/(256-1); + break; + } + switch (photometric) { + case PHOTOMETRIC_MINISWHITE: + for (i = 0; i < 256; i++) + cmap[i] = clamp(255*pct[(256-1)-i], 0, 255); + break; + case PHOTOMETRIC_MINISBLACK: + for (i = 0; i < 256; i++) + cmap[i] = clamp(255*pct[i], 0, 255); + break; + } +} + +static void +initScale() +{ + src0 = (uint8*) _TIFFmalloc(sizeof (uint8) * tnw); + src1 = (uint8*) _TIFFmalloc(sizeof (uint8) * tnw); + src2 = (uint8*) _TIFFmalloc(sizeof (uint8) * tnw); + rowoff = (uint16*) _TIFFmalloc(sizeof (uint16) * tnw); + filterWidth = 0; + stepDstWidth = stepSrcWidth = 0; + setupBitsTables(); +} + +/* + * Calculate the horizontal accumulation parameteres + * according to the widths of the src and dst images. + */ +static void +setupStepTables(uint16 sw) +{ + if (stepSrcWidth != sw || stepDstWidth != tnw) { + int step = sw; + int limit = tnw; + int err = 0; + uint32 sx = 0; + uint32 x; + int fw; + uint8 b; + for (x = 0; x < tnw; x++) { + uint32 sx0 = sx; + err += step; + while (err >= limit) { + err -= limit; + sx++; + } + rowoff[x] = sx0 >> 3; + fw = sx - sx0; /* width */ + b = (fw < 8) ? 0xff<<(8-fw) : 0xff; + src0[x] = b >> (sx0&7); + fw -= 8 - (sx0&7); + if (fw < 0) + fw = 0; + src1[x] = fw >> 3; + fw -= (fw>>3)<<3; + src2[x] = 0xff << (8-fw); + } + stepSrcWidth = sw; + stepDstWidth = tnw; + } +} + +static void +setrow(uint8* row, int nrows, const uint8* rows[]) +{ + uint32 x; + uint32 area = nrows * filterWidth; + for (x = 0; x < tnw; x++) { + uint32 mask0 = src0[x]; + uint32 fw = src1[x]; + uint32 mask1 = src1[x]; + uint32 off = rowoff[x]; + uint32 acc = 0; + uint32 y, i; + for (y = 0; y < nrows; y++) { + const uint8* src = rows[y] + off; + acc += bits[*src++ & mask0]; + switch (fw) { + default: + for (i = fw; i > 8; i--) + acc += bits[*src++]; + /* fall thru... */ + case 8: acc += bits[*src++]; + case 7: acc += bits[*src++]; + case 6: acc += bits[*src++]; + case 5: acc += bits[*src++]; + case 4: acc += bits[*src++]; + case 3: acc += bits[*src++]; + case 2: acc += bits[*src++]; + case 1: acc += bits[*src++]; + case 0: break; + } + acc += bits[*src & mask1]; + } + *row++ = cmap[(255*acc)/area]; + } +} + +/* + * Install the specified image. The + * image is resized to fit the display page using + * a box filter. The resultant pixels are mapped + * with a user-selectable contrast curve. + */ +static void +setImage1(const uint8* br, uint32 rw, uint32 rh) +{ + int step = rh; + int limit = tnh; + int err = 0; + int bpr = howmany(rw,8); + uint32 sy = 0; + uint8* row = thumbnail; + uint32 dy; + for (dy = 0; dy < tnh; dy++) { + const uint8* rows[256]; + int nrows = 1; + rows[0] = br + bpr*sy; + err += step; + while (err >= limit) { + err -= limit; + sy++; + if (err >= limit) + rows[nrows++] = br + bpr*sy; + } + setrow(row, nrows, rows); + row += tnw; + } +} + +static void +setImage(const uint8* br, uint32 rw, uint32 rh) +{ + filterWidth = (uint16) ceil((double) rw / (double) tnw); + setupStepTables(rw); + setImage1(br, rw, rh); +} + +static int +generateThumbnail(TIFF* in, TIFF* out) +{ + unsigned char* raster; + unsigned char* rp; + uint32 sw, sh, rps; + uint16 bps, spp; + tsize_t rowsize, rastersize; + tstrip_t s, ns = TIFFNumberOfStrips(in); + uint32 diroff[1]; + + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &sw); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &sh); + TIFFGetFieldDefaulted(in, TIFFTAG_BITSPERSAMPLE, &bps); + TIFFGetFieldDefaulted(in, TIFFTAG_SAMPLESPERPIXEL, &spp); + TIFFGetFieldDefaulted(in, TIFFTAG_ROWSPERSTRIP, &rps); + if (spp != 1 || bps != 1) + return (0); + rowsize = TIFFScanlineSize(in); + rastersize = sh * rowsize; + raster = (unsigned char*)_TIFFmalloc(rastersize); + rp = raster; + for (s = 0; s < ns; s++) { + (void) TIFFReadEncodedStrip(in, s, rp, -1); + rp += rps * rowsize; + } + TIFFGetField(in, TIFFTAG_PHOTOMETRIC, &photometric); + setupCmap(); + setImage(raster, sw, sh); + + TIFFSetField(out, TIFFTAG_SUBFILETYPE, FILETYPE_REDUCEDIMAGE); + TIFFSetField(out, TIFFTAG_IMAGEWIDTH, (uint32) tnw); + TIFFSetField(out, TIFFTAG_IMAGELENGTH, (uint32) tnh); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, (uint16) 8); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, (uint16) 1); + TIFFSetField(out, TIFFTAG_COMPRESSION, COMPRESSION_LZW); + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); + TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + cpTag(in, out, TIFFTAG_SOFTWARE, (uint16) -1, TIFF_ASCII); + cpTag(in, out, TIFFTAG_IMAGEDESCRIPTION, (uint16) -1, TIFF_ASCII); + cpTag(in, out, TIFFTAG_DATETIME, (uint16) -1, TIFF_ASCII); + cpTag(in, out, TIFFTAG_HOSTCOMPUTER, (uint16) -1, TIFF_ASCII); + diroff[0] = 0; + TIFFSetField(out, TIFFTAG_SUBIFD, 1, diroff); + return (TIFFWriteEncodedStrip(out, 0, thumbnail, tnw*tnh) != -1 && + TIFFWriteDirectory(out) != -1); +} + +char* stuff[] = { +"usage: thumbnail [options] input.tif output.tif", +"where options are:", +" -h # specify thumbnail image height (default is 274)", +" -w # specify thumbnail image width (default is 216)", +"", +" -c linear use linear contrast curve", +" -c exp50 use 50% exponential contrast curve", +" -c exp60 use 60% exponential contrast curve", +" -c exp70 use 70% exponential contrast curve", +" -c exp80 use 80% exponential contrast curve", +" -c exp90 use 90% exponential contrast curve", +" -c exp use pure exponential contrast curve", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} diff --git a/tools/tiff2bw.c b/tools/tiff2bw.c new file mode 100755 index 0000000..2e8a580 --- /dev/null +++ b/tools/tiff2bw.c @@ -0,0 +1,401 @@ +/* $Header: /home/cvsroot/libtiff/tools/tiff2bw.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include +#include +#include "tiffio.h" + +#define streq(a,b) (strcmp((a),(b)) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) + +/* x% weighting -> fraction of full color */ +#define PCT(x) (((x)*255)/100) +int RED = PCT(28); /* 28% */ +int GREEN = PCT(59); /* 59% */ +int BLUE = PCT(11); /* 11% */ + +static void usage(void); +static int processCompressOptions(char*); + +static void +compresscontig(unsigned char* out, unsigned char* rgb, uint32 n) +{ + register int v, red = RED, green = GREEN, blue = BLUE; + + while (n-- > 0) { + v = red*(*rgb++); + v += green*(*rgb++); + v += blue*(*rgb++); + *out++ = v>>8; + } +} + +static void +compresssep(unsigned char* out, + unsigned char* r, unsigned char* g, unsigned char* b, uint32 n) +{ + register uint32 red = RED, green = GREEN, blue = BLUE; + + while (n-- > 0) + *out++ = (red*(*r++) + green*(*g++) + blue*(*b++)) >> 8; +} + +static int +checkcmap(TIFF* tif, int n, uint16* r, uint16* g, uint16* b) +{ + while (n-- > 0) + if (*r++ >= 256 || *g++ >= 256 || *b++ >= 256) + return (16); + TIFFWarning(TIFFFileName(tif), "Assuming 8-bit colormap"); + return (8); +} + +static void +compresspalette(unsigned char* out, unsigned char* data, uint32 n, uint16* rmap, uint16* gmap, uint16* bmap) +{ + register int v, red = RED, green = GREEN, blue = BLUE; + + while (n-- > 0) { + unsigned int ix = *data++; + v = red*rmap[ix]; + v += green*gmap[ix]; + v += blue*bmap[ix]; + *out++ = v>>8; + } +} + +static uint16 compression = (uint16) -1; +static uint16 predictor = 0; +static int jpegcolormode = JPEGCOLORMODE_RGB; +static int quality = 75; /* JPEG quality */ + +static void cpTags(TIFF* in, TIFF* out); + +int +main(int argc, char* argv[]) +{ + uint32 rowsperstrip = (uint32) -1; + TIFF *in, *out; + uint32 w, h; + uint16 samplesperpixel; + uint16 bitspersample; + uint16 config; + uint16 photometric; + uint16* red; + uint16* green; + uint16* blue; + tsize_t rowsize; + register uint32 row; + register tsample_t s; + unsigned char *inbuf, *outbuf; + char thing[1024]; + int c; + extern int optind; + extern char *optarg; + + while ((c = getopt(argc, argv, "c:r:R:G:B:")) != -1) + switch (c) { + case 'c': /* compression scheme */ + if (!processCompressOptions(optarg)) + usage(); + break; + case 'r': /* rows/strip */ + rowsperstrip = atoi(optarg); + break; + case 'R': + RED = PCT(atoi(optarg)); + break; + case 'G': + GREEN = PCT(atoi(optarg)); + break; + case 'B': + BLUE = PCT(atoi(optarg)); + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind < 2) + usage(); + in = TIFFOpen(argv[optind], "r"); + if (in == NULL) + return (-1); + photometric = 0; + TIFFGetField(in, TIFFTAG_PHOTOMETRIC, &photometric); + if (photometric != PHOTOMETRIC_RGB && photometric != PHOTOMETRIC_PALETTE ) { + fprintf(stderr, + "%s: Bad photometric; can only handle RGB and Palette images.\n", + argv[optind]); + return (-1); + } + TIFFGetField(in, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel); + if (samplesperpixel != 1 && samplesperpixel != 3) { + fprintf(stderr, "%s: Bad samples/pixel %u.\n", + argv[optind], samplesperpixel); + return (-1); + } + TIFFGetField(in, TIFFTAG_BITSPERSAMPLE, &bitspersample); + if (bitspersample != 8) { + fprintf(stderr, + " %s: Sorry, only handle 8-bit samples.\n", argv[optind]); + return (-1); + } + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &h); + TIFFGetField(in, TIFFTAG_PLANARCONFIG, &config); + + out = TIFFOpen(argv[optind+1], "w"); + if (out == NULL) + return (-1); + cpTags(in, out); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 8); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + if (compression != (uint16) -1) { + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + switch (compression) { + case COMPRESSION_JPEG: + TIFFSetField(out, TIFFTAG_JPEGQUALITY, quality); + TIFFSetField(out, TIFFTAG_JPEGCOLORMODE, jpegcolormode); + break; + case COMPRESSION_LZW: + case COMPRESSION_DEFLATE: + if (predictor != 0) + TIFFSetField(out, TIFFTAG_PREDICTOR, predictor); + break; + } + } + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + sprintf(thing, "B&W version of %s", argv[optind]); + TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, thing); + TIFFSetField(out, TIFFTAG_SOFTWARE, "tiff2bw"); + outbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out)); + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, + TIFFDefaultStripSize(out, rowsperstrip)); + +#define pack(a,b) ((a)<<8 | (b)) + switch (pack(photometric, config)) { + case pack(PHOTOMETRIC_PALETTE, PLANARCONFIG_CONTIG): + case pack(PHOTOMETRIC_PALETTE, PLANARCONFIG_SEPARATE): + TIFFGetField(in, TIFFTAG_COLORMAP, &red, &green, &blue); + /* + * Convert 16-bit colormap to 8-bit (unless it looks + * like an old-style 8-bit colormap). + */ + if (checkcmap(in, 1<= 0; i--) { + red[i] = CVT(red[i]); + green[i] = CVT(green[i]); + blue[i] = CVT(blue[i]); + } +#undef CVT + } + inbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(in)); + for (row = 0; row < h; row++) { + if (TIFFReadScanline(in, inbuf, row, 0) < 0) + break; + compresspalette(outbuf, inbuf, w, red, green, blue); + if (TIFFWriteScanline(out, outbuf, row, 0) < 0) + break; + } + break; + case pack(PHOTOMETRIC_RGB, PLANARCONFIG_CONTIG): + inbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(in)); + for (row = 0; row < h; row++) { + if (TIFFReadScanline(in, inbuf, row, 0) < 0) + break; + compresscontig(outbuf, inbuf, w); + if (TIFFWriteScanline(out, outbuf, row, 0) < 0) + break; + } + break; + case pack(PHOTOMETRIC_RGB, PLANARCONFIG_SEPARATE): + rowsize = TIFFScanlineSize(in); + inbuf = (unsigned char *)_TIFFmalloc(3*rowsize); + for (row = 0; row < h; row++) { + for (s = 0; s < 3; s++) + if (TIFFReadScanline(in, + inbuf+s*rowsize, row, s) < 0) + return (-1); + compresssep(outbuf, + inbuf, inbuf+rowsize, inbuf+2*rowsize, w); + if (TIFFWriteScanline(out, outbuf, row, 0) < 0) + break; + } + break; + } +#undef pack + TIFFClose(out); + return (0); +} + +static int +processCompressOptions(char* opt) +{ + if (streq(opt, "none")) + compression = COMPRESSION_NONE; + else if (streq(opt, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (strneq(opt, "jpeg", 4)) { + char* cp = strchr(opt, ':'); + if (cp && isdigit(cp[1])) + quality = atoi(cp+1); + if (cp && strchr(cp, 'r')) + jpegcolormode = JPEGCOLORMODE_RAW; + compression = COMPRESSION_JPEG; + } else if (strneq(opt, "lzw", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_LZW; + } else if (strneq(opt, "zip", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_DEFLATE; + } else + return (0); + return (1); +} + +#define CopyField1(tag, v) \ + if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) +#define CopyField2(tag, v1, v2) \ + if (TIFFGetField(in, tag, &v1, &v2)) TIFFSetField(out, tag, v1, v2) +#define CopyField3(tag, v1, v2, v3) \ + if (TIFFGetField(in, tag, &v1, &v2, &v3)) TIFFSetField(out, tag, v1, v2, v3) +#define CopyField4(tag, v1, v2, v3, v4) \ + if (TIFFGetField(in, tag, &v1, &v2, &v3, &v4)) TIFFSetField(out, tag, v1, v2, v3, v4) + +static void +cpTag(TIFF* in, TIFF* out, uint16 tag, uint16 count, TIFFDataType type) +{ + uint16 shortv, shortv2, *shortav; + float floatv, *floatav; + char *stringv; + uint32 longv; + + switch (type) { + case TIFF_SHORT: + if (count == 1) { + CopyField1(tag, shortv); + } else if (count == 2) { + CopyField2(tag, shortv, shortv2); + } else if (count == (uint16) -1) { + CopyField2(tag, shortv, shortav); + } + break; + case TIFF_LONG: + CopyField1(tag, longv); + break; + case TIFF_RATIONAL: + if (count == 1) { + CopyField1(tag, floatv); + } else if (count == (uint16) -1) { + CopyField1(tag, floatav); + } + break; + case TIFF_ASCII: + CopyField1(tag, stringv); + break; + } +} +#undef CopyField4 +#undef CopyField3 +#undef CopyField2 +#undef CopyField1 + +static struct cpTag { + uint16 tag; + uint16 count; + TIFFDataType type; +} tags[] = { + { TIFFTAG_IMAGEWIDTH, 1, TIFF_LONG }, + { TIFFTAG_IMAGELENGTH, 1, TIFF_LONG }, + { TIFFTAG_FILLORDER, 1, TIFF_SHORT }, + { TIFFTAG_DOCUMENTNAME, 1, TIFF_ASCII }, + { TIFFTAG_MAKE, 1, TIFF_ASCII }, + { TIFFTAG_MODEL, 1, TIFF_ASCII }, + { TIFFTAG_ORIENTATION, 1, TIFF_SHORT }, + { TIFFTAG_XRESOLUTION, 1, TIFF_RATIONAL }, + { TIFFTAG_YRESOLUTION, 1, TIFF_RATIONAL }, + { TIFFTAG_PAGENAME, 1, TIFF_ASCII }, + { TIFFTAG_XPOSITION, 1, TIFF_RATIONAL }, + { TIFFTAG_YPOSITION, 1, TIFF_RATIONAL }, + { TIFFTAG_RESOLUTIONUNIT, 1, TIFF_SHORT }, + { TIFFTAG_PAGENUMBER, 2, TIFF_SHORT }, + { TIFFTAG_ARTIST, 1, TIFF_ASCII }, + { TIFFTAG_HOSTCOMPUTER, 1, TIFF_ASCII }, +}; +#define NTAGS (sizeof (tags) / sizeof (tags[0])) + +static void +cpTags(TIFF* in, TIFF* out) +{ + struct cpTag *p; + for (p = tags; p < &tags[NTAGS]; p++) + cpTag(in, out, p->tag, p->count, p->type); +} +#undef NTAGS + +char* stuff[] = { +"usage: tiff2bw [options] input.tif output.tif", +"where options are:", +" -R % use #% from red channel", +" -G % use #% from green channel", +" -B % use #% from blue channel", +"", +" -r # make each strip have no more than # rows", +"", +" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", +" (no longer supported by default due to Unisys patent enforcement)", +" -c zip[:opts] compress output with deflate encoding", +" -c packbits compress output with packbits encoding", +" -c g3[:opts] compress output with CCITT Group 3 encoding", +" -c g4 compress output with CCITT Group 4 encoding", +" -c none use no compression algorithm on output", +"", +"LZW and deflate options:", +" # set predictor value", +"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} diff --git a/tools/tiff2ps.c b/tools/tiff2ps.c new file mode 100755 index 0000000..9f77ec1 --- /dev/null +++ b/tools/tiff2ps.c @@ -0,0 +1,1408 @@ +/* $Header: /home/cvsroot/libtiff/tools/tiff2ps.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include /* for atof */ +#include +#include + +#include "tiffio.h" + +/* + * NB: this code assumes uint32 works with printf's %l[ud]. + */ +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +int ascii85 = FALSE; /* use ASCII85 encoding */ +int interpolate = TRUE; /* interpolate level2 image */ +int level2 = FALSE; /* generate PostScript level 2 */ +int printAll = FALSE; /* print all images in file */ +int generateEPSF = TRUE; /* generate Encapsulated PostScript */ +int PSduplex = FALSE; /* enable duplex printing */ +int PStumble = FALSE; /* enable top edge binding */ +int PSavoiddeadzone = TRUE; /* enable avoiding printer deadzone */ +char *filename; /* input filename */ + +/* + * ASCII85 Encoding Support. + */ +unsigned char ascii85buf[10]; +int ascii85count; +int ascii85breaklen; + +int TIFF2PS(FILE*, TIFF*, float, float); +void PSpage(FILE*, TIFF*, uint32, uint32); +void PSColorContigPreamble(FILE*, uint32, uint32, int); +void PSColorSeparatePreamble(FILE*, uint32, uint32, int); +void PSDataColorContig(FILE*, TIFF*, uint32, uint32, int); +void PSDataColorSeparate(FILE*, TIFF*, uint32, uint32, int); +void PSDataPalette(FILE*, TIFF*, uint32, uint32); +void PSDataBW(FILE*, TIFF*, uint32, uint32); +void PSRawDataBW(FILE*, TIFF*, uint32, uint32); +void Ascii85Init(void); +void Ascii85Put(unsigned char code, FILE* fd); +void Ascii85Flush(FILE* fd); +void PSHead(FILE*, TIFF*, uint32, uint32, float, float, float, float); +void PSTail(FILE*, int); + +static void usage(int); + +int +main(int argc, char* argv[]) +{ + int dirnum = -1, c, np = 0; + float pageWidth = 0; + float pageHeight = 0; + uint32 diroff = 0; + extern char *optarg; + extern int optind; + FILE* output = stdout; + + while ((c = getopt(argc, argv, "h:w:d:o:O:aezps128DT")) != -1) + switch (c) { + case 'd': + dirnum = atoi(optarg); + break; + case 'D': + PSduplex = TRUE; + break; + case 'T': + PStumble = TRUE; + break; + case 'e': + generateEPSF = TRUE; + break; + case 'h': + pageHeight = atof(optarg); + break; + case 'o': + diroff = (uint32) strtoul(optarg, NULL, 0); + break; + case 'O': /* XXX too bad -o is already taken */ + output = fopen(optarg, "w"); + if (output == NULL) { + fprintf(stderr, + "%s: %s: Cannot open output file.\n", + argv[0], optarg); + exit(-2); + } + break; + case 'a': + printAll = TRUE; + /* fall thru... */ + case 'p': + generateEPSF = FALSE; + break; + case 's': + printAll = FALSE; + break; + case 'w': + pageWidth = atof(optarg); + break; + case 'z': + PSavoiddeadzone = FALSE; + break; + case '1': + level2 = FALSE; + ascii85 = FALSE; + break; + case '2': + level2 = TRUE; + ascii85 = TRUE; /* default to yes */ + break; + case '8': + ascii85 = FALSE; + break; + case '?': + usage(-1); + } + for (; argc - optind > 0; optind++) { + TIFF* tif = TIFFOpen(filename = argv[optind], "r"); + if (tif != NULL) { + if (dirnum != -1 && !TIFFSetDirectory(tif, dirnum)) + return (-1); + else if (diroff != 0 && + !TIFFSetSubDirectory(tif, diroff)) + return (-1); + np = TIFF2PS(output, tif, pageWidth, pageHeight); + TIFFClose(tif); + } + } + if (np) + PSTail(output, np); + else + usage(-1); + if (output != stdout) + fclose(output); + return (0); +} + +static uint16 samplesperpixel; +static uint16 bitspersample; +static uint16 planarconfiguration; +static uint16 photometric; +static uint16 compression; +static uint16 extrasamples; +static int alpha; + +static int +checkImage(TIFF* tif) +{ + switch (photometric) { + case PHOTOMETRIC_YCBCR: + if (compression == COMPRESSION_JPEG && + planarconfiguration == PLANARCONFIG_CONTIG) { + /* can rely on libjpeg to convert to RGB */ + TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE, + JPEGCOLORMODE_RGB); + photometric = PHOTOMETRIC_RGB; + } else { + if (level2) + break; + TIFFError(filename, "Can not handle image with %s", + "PhotometricInterpretation=YCbCr"); + return (0); + } + /* fall thru... */ + case PHOTOMETRIC_RGB: + if (alpha && bitspersample != 8) { + TIFFError(filename, + "Can not handle %d-bit/sample RGB image with alpha", + bitspersample); + return (0); + } + /* fall thru... */ + case PHOTOMETRIC_SEPARATED: + case PHOTOMETRIC_PALETTE: + case PHOTOMETRIC_MINISBLACK: + case PHOTOMETRIC_MINISWHITE: + break; + case PHOTOMETRIC_LOGL: + case PHOTOMETRIC_LOGLUV: + if (compression != COMPRESSION_SGILOG && + compression != COMPRESSION_SGILOG24) { + TIFFError(filename, + "Can not handle %s data with compression other than SGILog", + (photometric == PHOTOMETRIC_LOGL) ? + "LogL" : "LogLuv" + ); + return (0); + } + /* rely on library to convert to RGB/greyscale */ + TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_8BIT); + photometric = (photometric == PHOTOMETRIC_LOGL) ? + PHOTOMETRIC_MINISBLACK : PHOTOMETRIC_RGB; + bitspersample = 8; + break; + case PHOTOMETRIC_CIELAB: + /* fall thru... */ + default: + TIFFError(filename, + "Can not handle image with PhotometricInterpretation=%d", + photometric); + return (0); + } + switch (bitspersample) { + case 1: case 2: + case 4: case 8: + break; + default: + TIFFError(filename, "Can not handle %d-bit/sample image", + bitspersample); + return (0); + } + if (planarconfiguration == PLANARCONFIG_SEPARATE && extrasamples > 0) + TIFFWarning(filename, "Ignoring extra samples"); + return (1); +} + +#define PS_UNIT_SIZE 72.0 +#define PSUNITS(npix,res) ((npix) * (PS_UNIT_SIZE / (res))) + +static char RGBcolorimage[] = "\ +/bwproc {\n\ + rgbproc\n\ + dup length 3 idiv string 0 3 0\n\ + 5 -1 roll {\n\ + add 2 1 roll 1 sub dup 0 eq {\n\ + pop 3 idiv\n\ + 3 -1 roll\n\ + dup 4 -1 roll\n\ + dup 3 1 roll\n\ + 5 -1 roll put\n\ + 1 add 3 0\n\ + } { 2 1 roll } ifelse\n\ + } forall\n\ + pop pop pop\n\ +} def\n\ +/colorimage where {pop} {\n\ + /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def\n\ +} ifelse\n\ +"; + +/* + * Adobe Photoshop requires a comment line of the form: + * + * %ImageData:
      + * <1 for binary|2 for hex> "data start" + * + * It is claimed to be part of some future revision of the EPS spec. + */ +static void +PhotoshopBanner(FILE* fd, uint32 w, uint32 h, int bs, int nc, char* startline) +{ + fprintf(fd, "%%ImageData: %ld %ld %d %d 0 %d 2 \"", + (long) w, (long) h, bitspersample, nc, bs); + fprintf(fd, startline, nc); + fprintf(fd, "\"\n"); +} + +static void +setupPageState(TIFF* tif, uint32* pw, uint32* ph, float* pprw, float* pprh) +{ + uint16 res_unit; + float xres, yres; + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, pw); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, ph); + TIFFGetFieldDefaulted(tif, TIFFTAG_RESOLUTIONUNIT, &res_unit); + /* + * Calculate printable area. + */ + if (!TIFFGetField(tif, TIFFTAG_XRESOLUTION, &xres)) + xres = PS_UNIT_SIZE; + if (!TIFFGetField(tif, TIFFTAG_YRESOLUTION, &yres)) + yres = PS_UNIT_SIZE; + switch (res_unit) { + case RESUNIT_CENTIMETER: + xres *= 2.54, yres *= 2.54; + break; + case RESUNIT_NONE: + xres *= PS_UNIT_SIZE, yres *= PS_UNIT_SIZE; + break; + } + *pprh = PSUNITS(*ph, yres); + *pprw = PSUNITS(*pw, xres); +} + +static int +isCCITTCompression(TIFF* tif) +{ + uint16 compress; + TIFFGetField(tif, TIFFTAG_COMPRESSION, &compress); + return (compress == COMPRESSION_CCITTFAX3 || + compress == COMPRESSION_CCITTFAX4 || + compress == COMPRESSION_CCITTRLE || + compress == COMPRESSION_CCITTRLEW); +} + +static tsize_t tf_bytesperrow; +static tsize_t ps_bytesperrow; +static tsize_t tf_rowsperstrip; +static tsize_t tf_numberstrips; +static char *hex = "0123456789abcdef"; + + +/* returns the sequence number of the page processed */ +int +TIFF2PS(FILE* fd, TIFF* tif, float pw, float ph) +{ + uint32 w, h; + float ox, oy, prw, prh; + float scale; + uint32 subfiletype; + uint16* sampleinfo; + static int npages = 0; + + if (!TIFFGetField(tif, TIFFTAG_XPOSITION, &ox)) + ox = 0; + if (!TIFFGetField(tif, TIFFTAG_YPOSITION, &oy)) + oy = 0; + setupPageState(tif, &w, &h, &prw, &prh); + + do { + tf_numberstrips = TIFFNumberOfStrips(tif); + TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, + &tf_rowsperstrip); + setupPageState(tif, &w, &h, &prw, &prh); + if (!npages) + PSHead(fd, tif, w, h, prw, prh, ox, oy); + TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, + &bitspersample); + TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, + &samplesperpixel); + TIFFGetFieldDefaulted(tif, TIFFTAG_PLANARCONFIG, + &planarconfiguration); + TIFFGetField(tif, TIFFTAG_COMPRESSION, &compression); + TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES, + &extrasamples, &sampleinfo); + alpha = (extrasamples == 1 && + sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA); + if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometric)) { + switch (samplesperpixel - extrasamples) { + case 1: + if (isCCITTCompression(tif)) + photometric = PHOTOMETRIC_MINISWHITE; + else + photometric = PHOTOMETRIC_MINISBLACK; + break; + case 3: + photometric = PHOTOMETRIC_RGB; + break; + } + } + if (checkImage(tif)) { + tf_bytesperrow = TIFFScanlineSize(tif); + npages++; + fprintf(fd, "%%%%Page: %d %d\n", npages, npages); + fprintf(fd, "gsave\n"); + fprintf(fd, "100 dict begin\n"); + if (pw != 0 && ph != 0) { + /* NB: maintain image aspect ratio */ + scale = (pw*PS_UNIT_SIZE/prw) < (ph*PS_UNIT_SIZE/prh) ? + (pw*PS_UNIT_SIZE/prw) : + (ph*PS_UNIT_SIZE/prh); + if (scale > 1.0) + scale = 1.0; + fprintf(fd, "0 %f translate\n", ph*PS_UNIT_SIZE-prh*scale); + fprintf(fd, "%f %f scale\n", prw*scale, prh*scale); + } else + fprintf(fd, "%f %f scale\n", prw, prh); + PSpage(fd, tif, w, h); + fprintf(fd, "end\n"); + fprintf(fd, "grestore\n"); + fprintf(fd, "showpage\n"); + } + if (generateEPSF) + break; + TIFFGetFieldDefaulted(tif, TIFFTAG_SUBFILETYPE, &subfiletype); + } while (((subfiletype & FILETYPE_PAGE) || printAll) && + TIFFReadDirectory(tif)); + + return(npages); +} + + +static char DuplexPreamble[] = "\ +%%BeginFeature: *Duplex True\n\ +systemdict begin\n\ + /languagelevel where { pop languagelevel } { 1 } ifelse\n\ + 2 ge { 1 dict dup /Duplex true put setpagedevice }\n\ + { statusdict /setduplex known { statusdict begin setduplex true end } if\n\ + } ifelse\n\ +end\n\ +%%EndFeature\n\ +"; + +static char TumblePreamble[] = "\ +%%BeginFeature: *Tumble True\n\ +systemdict begin\n\ + /languagelevel where { pop languagelevel } { 1 } ifelse\n\ + 2 ge { 1 dict dup /Tumble true put setpagedevice }\n\ + { statusdict /settumble known { statusdict begin settumble true end } if\n\ + } ifelse\n\ +end\n\ +%%EndFeature\n\ +"; + +static char AvoidDeadZonePreamble[] = "\ +gsave newpath clippath pathbbox grestore\n\ + 4 2 roll 2 copy translate\n\ + exch 3 1 roll sub 3 1 roll sub exch\n\ + currentpagedevice /PageSize get aload pop\n\ + exch 3 1 roll div 3 1 roll div abs exch abs\n\ + 2 copy gt { exch } if pop\n\ + dup 1 lt { dup scale } { pop } ifelse\n\ +"; + +void +PSHead(FILE *fd, TIFF *tif, uint32 w, uint32 h, float pw, float ph, + float ox, float oy) +{ + time_t t; + + (void) tif; (void) w; (void) h; + t = time(0); + fprintf(fd, "%%!PS-Adobe-3.0%s\n", generateEPSF ? " EPSF-3.0" : ""); + fprintf(fd, "%%%%Creator: tiff2ps\n"); + fprintf(fd, "%%%%Title: %s\n", filename); + fprintf(fd, "%%%%CreationDate: %s", ctime(&t)); + fprintf(fd, "%%%%DocumentData: Clean7Bit\n"); + fprintf(fd, "%%%%Origin: %ld %ld\n", (long) ox, (long) oy); + /* NB: should use PageBoundingBox */ + fprintf(fd, "%%%%BoundingBox: 0 0 %ld %ld\n", + (long) ceil(pw), (long) ceil(ph)); + fprintf(fd, "%%%%LanguageLevel: %d\n", level2 ? 2 : 1); + fprintf(fd, "%%%%Pages: (atend)\n"); + fprintf(fd, "%%%%EndComments\n"); + fprintf(fd, "%%%%BeginSetup\n"); + if (PSduplex) + fprintf(fd, "%s", DuplexPreamble); + if (PStumble) + fprintf(fd, "%s", TumblePreamble); + if (PSavoiddeadzone && level2) + fprintf(fd, "%s", AvoidDeadZonePreamble); + fprintf(fd, "%%%%EndSetup\n"); +} + +void +PSTail(FILE *fd, int npages) +{ + fprintf(fd, "%%%%Trailer\n"); + fprintf(fd, "%%%%Pages: %d\n", npages); + fprintf(fd, "%%%%EOF\n"); +} + +static int +checkcmap(TIFF* tif, int n, uint16* r, uint16* g, uint16* b) +{ + (void) tif; + while (n-- > 0) + if (*r++ >= 256 || *g++ >= 256 || *b++ >= 256) + return (16); + TIFFWarning(filename, "Assuming 8-bit colormap"); + return (8); +} + +static void +PS_Lvl2colorspace(FILE* fd, TIFF* tif) +{ + uint16 *rmap, *gmap, *bmap; + int i, num_colors; + + /* + * Set up PostScript Level 2 colorspace according to + * section 4.8 in the PostScript refenence manual. + */ + fputs("% PostScript Level 2 only.\n", fd); + if (photometric != PHOTOMETRIC_PALETTE) { + if (photometric == PHOTOMETRIC_YCBCR) { + /* MORE CODE HERE */ + } + fprintf(fd, "/Device%s", + samplesperpixel > 2 ? "RGB" : "Gray"); + fputs(" setcolorspace\n", fd); + return; + } + + /* + * Set up an indexed/palette colorspace + */ + num_colors = (1 << bitspersample); + if (!TIFFGetField(tif, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap)) { + TIFFError(filename, + "Palette image w/o \"Colormap\" tag"); + return; + } + if (checkcmap(tif, num_colors, rmap, gmap, bmap) == 16) { + /* + * Convert colormap to 8-bits values. + */ +#define CVT(x) (((x) * 255) / ((1L<<16)-1)) + for (i = 0; i < num_colors; i++) { + rmap[i] = CVT(rmap[i]); + gmap[i] = CVT(gmap[i]); + bmap[i] = CVT(bmap[i]); + } +#undef CVT + } + fprintf(fd, "[ /Indexed /DeviceRGB %d", num_colors - 1); + if (ascii85) { + Ascii85Init(); + fputs("\n<~", fd); + ascii85breaklen -= 2; + } else + fputs(" <", fd); + for (i = 0; i < num_colors; i++) { + if (ascii85) { + Ascii85Put(rmap[i], fd); + Ascii85Put(gmap[i], fd); + Ascii85Put(bmap[i], fd); + } else { + fputs((i % 8) ? " " : "\n ", fd); + fprintf(fd, "%02x%02x%02x", + rmap[i], gmap[i], bmap[i]); + } + } + if (ascii85) + Ascii85Flush(fd); + else + fputs(">\n", fd); + fputs("] setcolorspace\n", fd); +} + +static int +PS_Lvl2ImageDict(FILE* fd, TIFF* tif, uint32 w, uint32 h) +{ + int use_rawdata; + uint32 tile_width, tile_height; + uint16 predictor, minsamplevalue, maxsamplevalue; + int repeat_count; + char im_h[64], im_x[64], im_y[64]; + + (void)strcpy(im_x, "0"); + (void)sprintf(im_y, "%lu", (long) h); + (void)sprintf(im_h, "%lu", (long) h); + tile_width = w; + tile_height = h; + if (TIFFIsTiled(tif)) { + repeat_count = TIFFNumberOfTiles(tif); + TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tile_width); + TIFFGetField(tif, TIFFTAG_TILELENGTH, &tile_height); + if (tile_width > w || tile_height > h || + (w % tile_width) != 0 || (h % tile_height != 0)) { + /* + * The tiles does not fit image width and height. + * Set up a clip rectangle for the image unit square. + */ + fputs("0 0 1 1 rectclip\n", fd); + } + if (tile_width < w) { + fputs("/im_x 0 def\n", fd); + (void)strcpy(im_x, "im_x neg"); + } + if (tile_height < h) { + fputs("/im_y 0 def\n", fd); + (void)sprintf(im_y, "%lu im_y sub", (unsigned long) h); + } + } else { + repeat_count = tf_numberstrips; + tile_height = tf_rowsperstrip; + if (tile_height > h) + tile_height = h; + if (repeat_count > 1) { + fputs("/im_y 0 def\n", fd); + fprintf(fd, "/im_h %lu def\n", + (unsigned long) tile_height); + (void)strcpy(im_h, "im_h"); + (void)sprintf(im_y, "%lu im_y sub", (unsigned long) h); + } + } + + /* + * Output start of exec block + */ + fputs("{ % exec\n", fd); + + if (repeat_count > 1) + fprintf(fd, "%d { %% repeat\n", repeat_count); + + /* + * Output filter options and image dictionary. + */ + if (ascii85) + fputs(" /im_stream currentfile /ASCII85Decode filter def\n", + fd); + fputs(" <<\n", fd); + fputs(" /ImageType 1\n", fd); + fprintf(fd, " /Width %lu\n", (unsigned long) tile_width); + fprintf(fd, " /Height %lu\n", (unsigned long) tile_height); + if (planarconfiguration == PLANARCONFIG_SEPARATE && samplesperpixel > 1) + fputs(" /MultipleDataSources true\n", fd); + fprintf(fd, " /ImageMatrix [ %lu 0 0 %ld %s %s ]\n", + (unsigned long) w, - (long)h, im_x, im_y); + fprintf(fd, " /BitsPerComponent %d\n", bitspersample); + fprintf(fd, " /Interpolate %s\n", interpolate ? "true" : "false"); + + switch (samplesperpixel) { + case 1: + switch (photometric) { + case PHOTOMETRIC_MINISBLACK: + fputs(" /Decode [0 1]\n", fd); + break; + case PHOTOMETRIC_MINISWHITE: + switch (compression) { + case COMPRESSION_CCITTRLE: + case COMPRESSION_CCITTRLEW: + case COMPRESSION_CCITTFAX3: + case COMPRESSION_CCITTFAX4: + /* + * Manage inverting with /Blackis1 flag + * since there migth be uncompressed parts + */ + fputs(" /Decode [0 1]\n", fd); + break; + default: + /* + * ERROR... + */ + fputs(" /Decode [1 0]\n", fd); + break; + } + break; + case PHOTOMETRIC_PALETTE: + TIFFGetFieldDefaulted(tif, TIFFTAG_MINSAMPLEVALUE, + &minsamplevalue); + TIFFGetFieldDefaulted(tif, TIFFTAG_MAXSAMPLEVALUE, + &maxsamplevalue); + fprintf(fd, " /Decode [%u %u]\n", + minsamplevalue, maxsamplevalue); + break; + default: + /* + * ERROR ? + */ + fputs(" /Decode [0 1]\n", fd); + break; + } + break; + case 3: + switch (photometric) { + case PHOTOMETRIC_RGB: + fputs(" /Decode [0 1 0 1 0 1]\n", fd); + break; + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + default: + /* + * ERROR?? + */ + fputs(" /Decode [0 1 0 1 0 1]\n", fd); + break; + } + break; + case 4: + /* + * ERROR?? + */ + fputs(" /Decode [0 1 0 1 0 1 0 1]\n", fd); + break; + } + fputs(" /DataSource", fd); + if (planarconfiguration == PLANARCONFIG_SEPARATE && + samplesperpixel > 1) + fputs(" [", fd); + if (ascii85) + fputs(" im_stream", fd); + else + fputs(" currentfile /ASCIIHexDecode filter", fd); + + use_rawdata = TRUE; + switch (compression) { + case COMPRESSION_NONE: /* 1: uncompressed */ + break; + case COMPRESSION_CCITTRLE: /* 2: CCITT modified Huffman RLE */ + case COMPRESSION_CCITTRLEW: /* 32771: #1 w/ word alignment */ + case COMPRESSION_CCITTFAX3: /* 3: CCITT Group 3 fax encoding */ + case COMPRESSION_CCITTFAX4: /* 4: CCITT Group 4 fax encoding */ + fputs("\n\t<<\n", fd); + if (compression == COMPRESSION_CCITTFAX3) { + uint32 g3_options; + + fputs("\t /EndOfLine true\n", fd); + fputs("\t /EndOfBlock false\n", fd); + if (!TIFFGetField(tif, TIFFTAG_GROUP3OPTIONS, + &g3_options)) + g3_options = 0; + if (g3_options & GROUP3OPT_2DENCODING) + fprintf(fd, "\t /K %s\n", im_h); + if (g3_options & GROUP3OPT_UNCOMPRESSED) + fputs("\t /Uncompressed true\n", fd); + if (g3_options & GROUP3OPT_FILLBITS) + fputs("\t /EncodedByteAlign true\n", fd); + } + if (compression == COMPRESSION_CCITTFAX4) { + uint32 g4_options; + + fputs("\t /K -1\n", fd); + TIFFGetFieldDefaulted(tif, TIFFTAG_GROUP4OPTIONS, + &g4_options); + if (g4_options & GROUP4OPT_UNCOMPRESSED) + fputs("\t /Uncompressed true\n", fd); + } + if (!(tile_width == w && w == 1728U)) + fprintf(fd, "\t /Columns %lu\n", + (unsigned long) tile_width); + fprintf(fd, "\t /Rows %s\n", im_h); + if (compression == COMPRESSION_CCITTRLE || + compression == COMPRESSION_CCITTRLEW) { + fputs("\t /EncodedByteAlign true\n", fd); + fputs("\t /EndOfBlock false\n", fd); + } + if (photometric == PHOTOMETRIC_MINISBLACK) + fputs("\t /BlackIs1 true\n", fd); + fprintf(fd, "\t>> /CCITTFaxDecode filter"); + break; + case COMPRESSION_LZW: /* 5: Lempel-Ziv & Welch */ + TIFFGetFieldDefaulted(tif, TIFFTAG_PREDICTOR, &predictor); + if (predictor == 2) { + fputs("\n\t<<\n", fd); + fprintf(fd, "\t /Predictor %u\n", predictor); + fprintf(fd, "\t /Columns %lu\n", + (unsigned long) tile_width); + fprintf(fd, "\t /Colors %u\n", samplesperpixel); + fprintf(fd, "\t /BitsPerComponent %u\n", + bitspersample); + fputs("\t>>", fd); + } + fputs(" /LZWDecode filter", fd); + break; + case COMPRESSION_PACKBITS: /* 32773: Macintosh RLE */ + fputs(" /RunLengthDecode filter", fd); + use_rawdata = TRUE; + break; + case COMPRESSION_OJPEG: /* 6: !6.0 JPEG */ + case COMPRESSION_JPEG: /* 7: %JPEG DCT compression */ +#ifdef notdef + /* + * Code not tested yet + */ + fputs(" /DCTDecode filter", fd); + use_rawdata = TRUE; +#else + use_rawdata = FALSE; +#endif + break; + case COMPRESSION_NEXT: /* 32766: NeXT 2-bit RLE */ + case COMPRESSION_THUNDERSCAN: /* 32809: ThunderScan RLE */ + case COMPRESSION_PIXARFILM: /* 32908: Pixar companded 10bit LZW */ + case COMPRESSION_DEFLATE: /* 32946: Deflate compression */ + case COMPRESSION_JBIG: /* 34661: ISO JBIG */ + use_rawdata = FALSE; + break; + case COMPRESSION_SGILOG: /* 34676: SGI LogL or LogLuv */ + case COMPRESSION_SGILOG24: /* 34677: SGI 24-bit LogLuv */ + use_rawdata = FALSE; + break; + default: + /* + * ERROR... + */ + use_rawdata = FALSE; + break; + } + if (planarconfiguration == PLANARCONFIG_SEPARATE && + samplesperpixel > 1) { + uint16 i; + + /* + * NOTE: This code does not work yet... + */ + for (i = 1; i < samplesperpixel; i++) + fputs(" dup", fd); + fputs(" ]", fd); + } + fputs("\n >> image\n", fd); + if (ascii85) + fputs(" im_stream flushfile\n", fd); + if (repeat_count > 1) { + if (tile_width < w) { + fprintf(fd, " /im_x im_x %lu add def\n", + (unsigned long) tile_width); + if (tile_height < h) { + fprintf(fd, " im_x %lu ge {\n", + (unsigned long) w); + fputs(" /im_x 0 def\n", fd); + fprintf(fd, " /im_y im_y %lu add def\n", + (unsigned long) tile_height); + fputs(" } if\n", fd); + } + } + if (tile_height < h) { + if (tile_width >= w) { + fprintf(fd, " /im_y im_y %lu add def\n", + (unsigned long) tile_height); + if (!TIFFIsTiled(tif)) { + fprintf(fd, " /im_h %lu im_y sub", + (unsigned long) h); + fprintf(fd, " dup %lu gt { pop", + (unsigned long) tile_height); + fprintf(fd, " %lu } if def\n", + (unsigned long) tile_height); + } + } + } + fputs("} repeat\n", fd); + } + /* + * End of exec function + */ + fputs("}\n", fd); + + return(use_rawdata); +} + +int +PS_Lvl2page(FILE* fd, TIFF* tif, uint32 w, uint32 h) +{ + uint16 fillorder; + int use_rawdata, tiled_image, breaklen; + uint32 chunk_no, num_chunks, *bc; + unsigned char *buf_data, *cp; + tsize_t chunk_size, byte_count; + + PS_Lvl2colorspace(fd, tif); + use_rawdata = PS_Lvl2ImageDict(fd, tif, w, h); + + fputs("%%BeginData:\n", fd); + fputs("exec\n", fd); + + tiled_image = TIFFIsTiled(tif); + if (tiled_image) { + num_chunks = TIFFNumberOfTiles(tif); + TIFFGetField(tif, TIFFTAG_TILEBYTECOUNTS, &bc); + } else { + num_chunks = TIFFNumberOfStrips(tif); + TIFFGetField(tif, TIFFTAG_STRIPBYTECOUNTS, &bc); + } + + if (use_rawdata) { + chunk_size = bc[0]; + for (chunk_no = 1; chunk_no < num_chunks; chunk_no++) + if (bc[chunk_no] > chunk_size) + chunk_size = bc[chunk_no]; + } else { + if (tiled_image) + chunk_size = TIFFTileSize(tif); + else + chunk_size = TIFFStripSize(tif); + } + buf_data = (unsigned char *)_TIFFmalloc(chunk_size); + if (!buf_data) { + TIFFError(filename, "Can't alloc %u bytes for %s.", + chunk_size, tiled_image ? "tiles" : "strips"); + return(FALSE); + } + + TIFFGetFieldDefaulted(tif, TIFFTAG_FILLORDER, &fillorder); + for (chunk_no = 0; chunk_no < num_chunks; chunk_no++) { + if (ascii85) + Ascii85Init(); + else + breaklen = 36; + if (use_rawdata) { + if (tiled_image) + byte_count = TIFFReadRawTile(tif, chunk_no, + buf_data, chunk_size); + else + byte_count = TIFFReadRawStrip(tif, chunk_no, + buf_data, chunk_size); + if (fillorder == FILLORDER_LSB2MSB) + TIFFReverseBits(buf_data, byte_count); + } else { + if (tiled_image) + byte_count = TIFFReadEncodedTile(tif, + chunk_no, buf_data, + chunk_size); + else + byte_count = TIFFReadEncodedStrip(tif, + chunk_no, buf_data, + chunk_size); + } + if (byte_count < 0) { + TIFFError(filename, "Can't read %s %d.", + tiled_image ? "tile" : "strip", chunk_no); + if (ascii85) + Ascii85Put('\0', fd); + } + for (cp = buf_data; byte_count > 0; byte_count--) { + if (ascii85) + Ascii85Put(*cp++, fd); + else { + if (--breaklen <= 0) { + putc('\n', fd); + breaklen = 36; + } + putc(hex[((*cp)>>4)&0xf], fd); + putc(hex[(*cp)&0xf], fd); + cp++; + } + } + if (ascii85) + Ascii85Flush(fd); + else + putc('\n', fd); + } + _TIFFfree(buf_data); + fputs("%%EndData\n", fd); + return(TRUE); +} + +void +PSpage(FILE* fd, TIFF* tif, uint32 w, uint32 h) +{ + if (level2 && PS_Lvl2page(fd, tif, w, h)) + return; + ps_bytesperrow = tf_bytesperrow; + switch (photometric) { + case PHOTOMETRIC_RGB: + if (planarconfiguration == PLANARCONFIG_CONTIG) { + fprintf(fd, "%s", RGBcolorimage); + PSColorContigPreamble(fd, w, h, 3); + PSDataColorContig(fd, tif, w, h, 3); + } else { + PSColorSeparatePreamble(fd, w, h, 3); + PSDataColorSeparate(fd, tif, w, h, 3); + } + break; + case PHOTOMETRIC_SEPARATED: + /* XXX should emit CMYKcolorimage */ + if (planarconfiguration == PLANARCONFIG_CONTIG) { + PSColorContigPreamble(fd, w, h, 4); + PSDataColorContig(fd, tif, w, h, 4); + } else { + PSColorSeparatePreamble(fd, w, h, 4); + PSDataColorSeparate(fd, tif, w, h, 4); + } + break; + case PHOTOMETRIC_PALETTE: + fprintf(fd, "%s", RGBcolorimage); + PhotoshopBanner(fd, w, h, 1, 3, "false 3 colorimage"); + fprintf(fd, "/scanLine %ld string def\n", + (long) ps_bytesperrow); + fprintf(fd, "%lu %lu 8\n", + (unsigned long) w, (unsigned long) h); + fprintf(fd, "[%lu 0 0 -%lu 0 %lu]\n", + (unsigned long) w, (unsigned long) h, (unsigned long) h); + fprintf(fd, "{currentfile scanLine readhexstring pop} bind\n"); + fprintf(fd, "false 3 colorimage\n"); + PSDataPalette(fd, tif, w, h); + break; + case PHOTOMETRIC_MINISBLACK: + case PHOTOMETRIC_MINISWHITE: + PhotoshopBanner(fd, w, h, 1, 1, "image"); + fprintf(fd, "/scanLine %ld string def\n", + (long) ps_bytesperrow); + fprintf(fd, "%lu %lu %d\n", + (unsigned long) w, (unsigned long) h, bitspersample); + fprintf(fd, "[%lu 0 0 -%lu 0 %lu]\n", + (unsigned long) w, (unsigned long) h, (unsigned long) h); + fprintf(fd, + "{currentfile scanLine readhexstring pop} bind\n"); + fprintf(fd, "image\n"); + PSDataBW(fd, tif, w, h); + break; + } + putc('\n', fd); +} + +void +PSColorContigPreamble(FILE* fd, uint32 w, uint32 h, int nc) +{ + ps_bytesperrow = nc * (tf_bytesperrow / samplesperpixel); + PhotoshopBanner(fd, w, h, 1, nc, "false %d colorimage"); + fprintf(fd, "/line %ld string def\n", (long) ps_bytesperrow); + fprintf(fd, "%lu %lu %d\n", + (unsigned long) w, (unsigned long) h, bitspersample); + fprintf(fd, "[%lu 0 0 -%lu 0 %lu]\n", + (unsigned long) w, (unsigned long) h, (unsigned long) h); + fprintf(fd, "{currentfile line readhexstring pop} bind\n"); + fprintf(fd, "false %d colorimage\n", nc); +} + +void +PSColorSeparatePreamble(FILE* fd, uint32 w, uint32 h, int nc) +{ + int i; + + PhotoshopBanner(fd, w, h, ps_bytesperrow, nc, "true %d colorimage"); + for (i = 0; i < nc; i++) + fprintf(fd, "/line%d %ld string def\n", + i, (long) ps_bytesperrow); + fprintf(fd, "%lu %lu %d\n", + (unsigned long) w, (unsigned long) h, bitspersample); + fprintf(fd, "[%lu 0 0 -%lu 0 %lu] \n", + (unsigned long) w, (unsigned long) h, (unsigned long) h); + for (i = 0; i < nc; i++) + fprintf(fd, "{currentfile line%d readhexstring pop}bind\n", i); + fprintf(fd, "true %d colorimage\n", nc); +} + +#define MAXLINE 36 +#define DOBREAK(len, howmany, fd) \ + if (((len) -= (howmany)) <= 0) { \ + putc('\n', fd); \ + (len) = MAXLINE-(howmany); \ + } +#define PUTHEX(c,fd) putc(hex[((c)>>4)&0xf],fd); putc(hex[(c)&0xf],fd) + +void +PSDataColorContig(FILE* fd, TIFF* tif, uint32 w, uint32 h, int nc) +{ + uint32 row; + int breaklen = MAXLINE, cc, es = samplesperpixel - nc; + unsigned char *tf_buf; + unsigned char *cp, c; + + (void) w; + tf_buf = (unsigned char *) _TIFFmalloc(tf_bytesperrow); + if (tf_buf == NULL) { + TIFFError(filename, "No space for scanline buffer"); + return; + } + for (row = 0; row < h; row++) { + if (TIFFReadScanline(tif, tf_buf, row, 0) < 0) + break; + cp = tf_buf; + if (alpha) { + int adjust; + cc = 0; + for (; cc < tf_bytesperrow; cc += samplesperpixel) { + DOBREAK(breaklen, nc, fd); + /* + * For images with alpha, matte against + * a white background; i.e. + * Cback * (1 - Aimage) + * where Cback = 1. + */ + adjust = 255 - cp[nc]; + switch (nc) { + case 4: c = *cp++ + adjust; PUTHEX(c,fd); + case 3: c = *cp++ + adjust; PUTHEX(c,fd); + case 2: c = *cp++ + adjust; PUTHEX(c,fd); + case 1: c = *cp++ + adjust; PUTHEX(c,fd); + } + cp += es; + } + } else { + cc = 0; + for (; cc < tf_bytesperrow; cc += samplesperpixel) { + DOBREAK(breaklen, nc, fd); + switch (nc) { + case 4: c = *cp++; PUTHEX(c,fd); + case 3: c = *cp++; PUTHEX(c,fd); + case 2: c = *cp++; PUTHEX(c,fd); + case 1: c = *cp++; PUTHEX(c,fd); + } + cp += es; + } + } + } + _TIFFfree((char *) tf_buf); +} + +void +PSDataColorSeparate(FILE* fd, TIFF* tif, uint32 w, uint32 h, int nc) +{ + uint32 row; + int breaklen = MAXLINE, cc, s, maxs; + unsigned char *tf_buf; + unsigned char *cp, c; + + (void) w; + tf_buf = (unsigned char *) _TIFFmalloc(tf_bytesperrow); + if (tf_buf == NULL) { + TIFFError(filename, "No space for scanline buffer"); + return; + } + maxs = (samplesperpixel > nc ? nc : samplesperpixel); + for (row = 0; row < h; row++) { + for (s = 0; s < maxs; s++) { + if (TIFFReadScanline(tif, tf_buf, row, s) < 0) + break; + for (cp = tf_buf, cc = 0; cc < tf_bytesperrow; cc++) { + DOBREAK(breaklen, 1, fd); + c = *cp++; + PUTHEX(c,fd); + } + } + } + _TIFFfree((char *) tf_buf); +} + +#define PUTRGBHEX(c,fd) \ + PUTHEX(rmap[c],fd); PUTHEX(gmap[c],fd); PUTHEX(bmap[c],fd) + +void +PSDataPalette(FILE* fd, TIFF* tif, uint32 w, uint32 h) +{ + uint16 *rmap, *gmap, *bmap; + uint32 row; + int breaklen = MAXLINE, cc, nc; + unsigned char *tf_buf; + unsigned char *cp, c; + + (void) w; + if (!TIFFGetField(tif, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap)) { + TIFFError(filename, "Palette image w/o \"Colormap\" tag"); + return; + } + switch (bitspersample) { + case 8: case 4: case 2: case 1: + break; + default: + TIFFError(filename, "Depth %d not supported", bitspersample); + return; + } + nc = 3 * (8 / bitspersample); + tf_buf = (unsigned char *) _TIFFmalloc(tf_bytesperrow); + if (tf_buf == NULL) { + TIFFError(filename, "No space for scanline buffer"); + return; + } + if (checkcmap(tif, 1<= 0; i--) { + rmap[i] = CVT(rmap[i]); + gmap[i] = CVT(gmap[i]); + bmap[i] = CVT(bmap[i]); + } +#undef CVT + } + for (row = 0; row < h; row++) { + if (TIFFReadScanline(tif, tf_buf, row, 0) < 0) + break; + for (cp = tf_buf, cc = 0; cc < tf_bytesperrow; cc++) { + DOBREAK(breaklen, nc, fd); + switch (bitspersample) { + case 8: + c = *cp++; PUTRGBHEX(c, fd); + break; + case 4: + c = *cp++; PUTRGBHEX(c&0xf, fd); + c >>= 4; PUTRGBHEX(c, fd); + break; + case 2: + c = *cp++; PUTRGBHEX(c&0x3, fd); + c >>= 2; PUTRGBHEX(c&0x3, fd); + c >>= 2; PUTRGBHEX(c&0x3, fd); + c >>= 2; PUTRGBHEX(c, fd); + break; + case 1: + c = *cp++; PUTRGBHEX(c&0x1, fd); + c >>= 1; PUTRGBHEX(c&0x1, fd); + c >>= 1; PUTRGBHEX(c&0x1, fd); + c >>= 1; PUTRGBHEX(c&0x1, fd); + c >>= 1; PUTRGBHEX(c&0x1, fd); + c >>= 1; PUTRGBHEX(c&0x1, fd); + c >>= 1; PUTRGBHEX(c&0x1, fd); + c >>= 1; PUTRGBHEX(c, fd); + break; + } + } + } + _TIFFfree((char *) tf_buf); +} + +void +PSDataBW(FILE* fd, TIFF* tif, uint32 w, uint32 h) +{ + int breaklen = MAXLINE; + unsigned char* tf_buf; + unsigned char* cp; + tsize_t stripsize = TIFFStripSize(tif); + tstrip_t s; + + (void) w; (void) h; + tf_buf = (unsigned char *) _TIFFmalloc(stripsize); + if (tf_buf == NULL) { + TIFFError(filename, "No space for scanline buffer"); + return; + } + if (ascii85) + Ascii85Init(); + for (s = 0; s < TIFFNumberOfStrips(tif); s++) { + int cc = TIFFReadEncodedStrip(tif, s, tf_buf, stripsize); + if (cc < 0) { + TIFFError(filename, "Can't read strip"); + break; + } + cp = tf_buf; + if (photometric == PHOTOMETRIC_MINISWHITE) { + for (cp += cc; --cp >= tf_buf;) + *cp = ~*cp; + cp++; + } + if (ascii85) { + while (cc-- > 0) + Ascii85Put(*cp++, fd); + } else { + while (cc-- > 0) { + unsigned char c = *cp++; + DOBREAK(breaklen, 1, fd); + PUTHEX(c, fd); + } + } + } + if (ascii85) + Ascii85Flush(fd); + else if (level2) + fputs(">\n", fd); + _TIFFfree(tf_buf); +} + +void +PSRawDataBW(FILE* fd, TIFF* tif, uint32 w, uint32 h) +{ + uint32 *bc; + uint32 bufsize; + int breaklen = MAXLINE, cc; + uint16 fillorder; + unsigned char *tf_buf; + unsigned char *cp, c; + tstrip_t s; + + (void) w; (void) h; + TIFFGetFieldDefaulted(tif, TIFFTAG_FILLORDER, &fillorder); + TIFFGetField(tif, TIFFTAG_STRIPBYTECOUNTS, &bc); + bufsize = bc[0]; + tf_buf = (unsigned char*) _TIFFmalloc(bufsize); + if (tf_buf == NULL) { + TIFFError(filename, "No space for strip buffer"); + return; + } + for (s = 0; s < tf_numberstrips; s++) { + if (bc[s] > bufsize) { + tf_buf = (unsigned char *) _TIFFrealloc(tf_buf, bc[s]); + if (tf_buf == NULL) { + TIFFError(filename, + "No space for strip buffer"); + return; + } + bufsize = bc[s]; + } + cc = TIFFReadRawStrip(tif, s, tf_buf, bc[s]); + if (cc < 0) { + TIFFError(filename, "Can't read strip"); + break; + } + if (fillorder == FILLORDER_LSB2MSB) + TIFFReverseBits(tf_buf, cc); + if (!ascii85) { + for (cp = tf_buf; cc > 0; cc--) { + DOBREAK(breaklen, 1, fd); + c = *cp++; + PUTHEX(c, fd); + } + fputs(">\n", fd); + breaklen = MAXLINE; + } else { + Ascii85Init(); + for (cp = tf_buf; cc > 0; cc--) + Ascii85Put(*cp++, fd); + Ascii85Flush(fd); + } + } + _TIFFfree((char *) tf_buf); +} + +void +Ascii85Init(void) +{ + ascii85breaklen = 2*MAXLINE; + ascii85count = 0; +} + +static char* +Ascii85Encode(unsigned char* raw) +{ + static char encoded[6]; + uint32 word; + + word = (((raw[0]<<8)+raw[1])<<16) + (raw[2]<<8) + raw[3]; + if (word != 0L) { + uint32 q; + uint16 w1; + + q = word / (85L*85*85*85); /* actually only a byte */ + encoded[0] = q + '!'; + + word -= q * (85L*85*85*85); q = word / (85L*85*85); + encoded[1] = q + '!'; + + word -= q * (85L*85*85); q = word / (85*85); + encoded[2] = q + '!'; + + w1 = (uint16) (word - q*(85L*85)); + encoded[3] = (w1 / 85) + '!'; + encoded[4] = (w1 % 85) + '!'; + encoded[5] = '\0'; + } else + encoded[0] = 'z', encoded[1] = '\0'; + return (encoded); +} + +void +Ascii85Put(unsigned char code, FILE* fd) +{ + ascii85buf[ascii85count++] = code; + if (ascii85count >= 4) { + unsigned char* p; + int n; + + for (n = ascii85count, p = ascii85buf; n >= 4; n -= 4, p += 4) { + char* cp; + for (cp = Ascii85Encode(p); *cp; cp++) { + putc(*cp, fd); + if (--ascii85breaklen == 0) { + putc('\n', fd); + ascii85breaklen = 2*MAXLINE; + } + } + } + _TIFFmemcpy(ascii85buf, p, n); + ascii85count = n; + } +} + +void +Ascii85Flush(FILE* fd) +{ + if (ascii85count > 0) { + char* res; + _TIFFmemset(&ascii85buf[ascii85count], 0, 3); + res = Ascii85Encode(ascii85buf); + fwrite(res[0] == 'z' ? "!!!!" : res, ascii85count + 1, 1, fd); + } + fputs("~>\n", fd); +} + +char* stuff[] = { +"usage: tiff2ps [options] input.tif ...", +"where options are:", +" -1 generate PostScript Level I (default)", +" -2 generate PostScript Level II", +" -8 disable use of ASCII85 encoding with PostScript Level II", +" -d # convert directory number #", +" -D enable duplex printing (two pages per sheet of paper)", +" -e generate Encapsulated PostScript (EPS)", +" -h # assume printed page height is # inches (default 11)", +" -o # convert directory at file offset #", +" -O file write PostScript to file instead of standard output", +" -a convert all directories in file (default is first)", +" -p generate regular PostScript", +" -s generate PostScript for a single image", +" -T print pages for top edge binding", +" -w # assume printed page width is # inches (default 8.5)", +" -z enable printing in the deadzone (only for PostScript Level II)", +NULL +}; + +static void +usage(int code) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(code); +} diff --git a/tools/tiff2rgba.c b/tools/tiff2rgba.c new file mode 100755 index 0000000..0895c7e --- /dev/null +++ b/tools/tiff2rgba.c @@ -0,0 +1,453 @@ +/* $Header: /home/cvsroot/libtiff/tools/tiff2rgba.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1991-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include + +#include "tiffio.h" + +#define streq(a,b) (strcmp(a,b) == 0) +#define CopyField(tag, v) \ + if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) + +#ifndef howmany +#define howmany(x, y) (((x)+((y)-1))/(y)) +#endif +#define roundup(x, y) (howmany(x,y)*((uint32)(y))) + +uint16 compression = COMPRESSION_PACKBITS; +uint32 rowsperstrip = (uint32) -1; +int process_by_block = 0; /* default is whole image at once */ + + +static int tiffcvt(TIFF* in, TIFF* out); +static void usage(void); + +int +main(int argc, char* argv[]) +{ + TIFF *in, *out; + int c; + extern int optind; + extern char *optarg; + + while ((c = getopt(argc, argv, "c:r:t:b")) != -1) + switch (c) { + case 'b': + process_by_block = 1; + break; + + case 'c': + if (streq(optarg, "none")) + compression = COMPRESSION_NONE; + else if (streq(optarg, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (streq(optarg, "lzw")) + compression = COMPRESSION_LZW; + else if (streq(optarg, "jpeg")) + compression = COMPRESSION_JPEG; + else + usage(); + break; + + case 'r': + rowsperstrip = atoi(optarg); + break; + + case 't': + rowsperstrip = atoi(optarg); + break; + + case '?': + usage(); + /*NOTREACHED*/ + } + + if (argc - optind < 2) + usage(); + + out = TIFFOpen(argv[argc-1], "w"); + if (out == NULL) + return (-2); + + for (; optind < argc-1; optind++) { + in = TIFFOpen(argv[optind], "r"); + if (in != NULL) { + do { + if (!tiffcvt(in, out) || + !TIFFWriteDirectory(out)) { + (void) TIFFClose(out); + return (1); + } + } while (TIFFReadDirectory(in)); + (void) TIFFClose(in); + } + } + (void) TIFFClose(out); + return (0); +} + +static int +cvt_by_tile( TIFF *in, TIFF *out ) + +{ + uint32* raster; /* retrieve RGBA image */ + uint32 width, height; /* image width & height */ + uint32 tile_width, tile_height; + uint32 row, col; + uint32 *wrk_line; + int ok = 1; + + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &width); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &height); + + if( !TIFFGetField(in, TIFFTAG_TILEWIDTH, &tile_width) + || !TIFFGetField(in, TIFFTAG_TILELENGTH, &tile_height) ) { + TIFFError(TIFFFileName(in), "Source image not tiled"); + return (0); + } + + TIFFSetField(out, TIFFTAG_TILEWIDTH, tile_width ); + TIFFSetField(out, TIFFTAG_TILELENGTH, tile_height ); + + /* + * Allocate tile buffer + */ + raster = (uint32*)_TIFFmalloc(tile_width * tile_height * sizeof (uint32)); + if (raster == 0) { + TIFFError(TIFFFileName(in), "No space for raster buffer"); + return (0); + } + + /* + * Allocate a scanline buffer for swapping during the vertical + * mirroring pass. + */ + wrk_line = (uint32*)_TIFFmalloc(tile_width * sizeof (uint32)); + if (wrk_line == 0) { + TIFFError(TIFFFileName(in), "No space for raster scanline buffer"); + ok = 0; + } + + /* + * Loop over the tiles. + */ + for( row = 0; ok && row < height; row += tile_height ) + { + for( col = 0; ok && col < width; col += tile_width ) + { + int i_row; + + /* Read the tile into an RGBA array */ + if (!TIFFReadRGBATile(in, col, row, raster)) { + ok = 0; + break; + } + + /* + * For some reason the TIFFReadRGBATile() function chooses the + * lower left corner as the origin. Vertically mirror scanlines. + */ + for( i_row = 0; i_row < tile_height / 2; i_row++ ) + { + uint32 *top_line, *bottom_line; + + top_line = raster + tile_width * i_row; + bottom_line = raster + tile_width * (tile_height-i_row-1); + + _TIFFmemcpy(wrk_line, top_line, 4*tile_width); + _TIFFmemcpy(top_line, bottom_line, 4*tile_width); + _TIFFmemcpy(bottom_line, wrk_line, 4*tile_width); + } + + /* + * Write out the result in a tile. + */ + + if( TIFFWriteEncodedTile( out, + TIFFComputeTile( out, col, row, 0, 0), + raster, + 4 * tile_width * tile_height ) == -1 ) + { + ok = 0; + break; + } + } + } + + _TIFFfree( raster ); + _TIFFfree( wrk_line ); + + return ok; +} + +static int +cvt_by_strip( TIFF *in, TIFF *out ) + +{ + uint32* raster; /* retrieve RGBA image */ + uint32 width, height; /* image width & height */ + uint32 row; + uint32 *wrk_line; + int ok = 1; + + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &width); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &height); + + if( !TIFFGetField(in, TIFFTAG_ROWSPERSTRIP, &rowsperstrip) ) { + TIFFError(TIFFFileName(in), "Source image not in strips"); + return (0); + } + + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, rowsperstrip); + + /* + * Allocate strip buffer + */ + raster = (uint32*)_TIFFmalloc(width * rowsperstrip * sizeof (uint32)); + if (raster == 0) { + TIFFError(TIFFFileName(in), "No space for raster buffer"); + return (0); + } + + /* + * Allocate a scanline buffer for swapping during the vertical + * mirroring pass. + */ + wrk_line = (uint32*)_TIFFmalloc(width * sizeof (uint32)); + if (wrk_line == 0) { + TIFFError(TIFFFileName(in), "No space for raster scanline buffer"); + ok = 0; + } + + /* + * Loop over the strips. + */ + for( row = 0; ok && row < height; row += rowsperstrip ) + { + int rows_to_write, i_row; + + /* Read the strip into an RGBA array */ + if (!TIFFReadRGBAStrip(in, row, raster)) { + ok = 0; + break; + } + + /* + * Figure out the number of scanlines actually in this strip. + */ + if( row + rowsperstrip > height ) + rows_to_write = height - row; + else + rows_to_write = rowsperstrip; + + /* + * For some reason the TIFFReadRGBAStrip() function chooses the + * lower left corner as the origin. Vertically mirror scanlines. + */ + + for( i_row = 0; i_row < rows_to_write / 2; i_row++ ) + { + uint32 *top_line, *bottom_line; + + top_line = raster + width * i_row; + bottom_line = raster + width * (rows_to_write-i_row-1); + + _TIFFmemcpy(wrk_line, top_line, 4*width); + _TIFFmemcpy(top_line, bottom_line, 4*width); + _TIFFmemcpy(bottom_line, wrk_line, 4*width); + } + + /* + * Write out the result in a strip + */ + + if( TIFFWriteEncodedStrip( out, row / rowsperstrip, raster, + 4 * rows_to_write * width ) == -1 ) + { + ok = 0; + break; + } + } + + _TIFFfree( raster ); + _TIFFfree( wrk_line ); + + return ok; +} + +/* + * cvt_whole_image() + * + * read the whole image into one big RGBA buffer and then write out + * strips from that. This is using the traditional TIFFReadRGBAImage() + * API that we trust. + */ + +static int +cvt_whole_image( TIFF *in, TIFF *out ) + +{ + uint32* raster; /* retrieve RGBA image */ + uint32 width, height; /* image width & height */ + uint32 row; + uint32 *wrk_line; + + + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &width); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &height); + + rowsperstrip = TIFFDefaultStripSize(out, rowsperstrip); + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, rowsperstrip); + + raster = (uint32*)_TIFFmalloc(width * height * sizeof (uint32)); + if (raster == 0) { + TIFFError(TIFFFileName(in), "No space for raster buffer"); + return (0); + } + + /* Read the image in one chunk into an RGBA array */ + if (!TIFFReadRGBAImage(in, width, height, raster, 0)) { + _TIFFfree(raster); + return (0); + } + + /* For some reason the TIFFReadRGBAImage() function chooses the + lower left corner as the origin. Vertically mirror scanlines. */ + + wrk_line = (uint32*)_TIFFmalloc(width * sizeof (uint32)); + if (wrk_line == 0) { + TIFFError(TIFFFileName(in), "No space for raster scanline buffer"); + return (0); + } + + for( row = 0; row < height / 2; row++ ) + { + uint32 *top_line, *bottom_line; + + top_line = raster + width * row; + bottom_line = raster + width * (height-row-1); + + _TIFFmemcpy(wrk_line, top_line, 4*width); + _TIFFmemcpy(top_line, bottom_line, 4*width); + _TIFFmemcpy(bottom_line, wrk_line, 4*width); + } + + _TIFFfree( wrk_line ); + + + /* Write out the result in strips */ + + for( row = 0; row < height; row += rowsperstrip ) + { + uint32* raster_strip; + int rows_to_write; + + raster_strip = raster + row * width; + + if( row + rowsperstrip > height ) + rows_to_write = height - row; + else + rows_to_write = rowsperstrip; + + if( TIFFWriteEncodedStrip( out, row / rowsperstrip, + raster_strip, + 4 * rows_to_write * width ) == -1 ) + { + _TIFFfree( raster ); + return 0; + } + } + + _TIFFfree( raster ); + + return 1; +} + + +static int +tiffcvt(TIFF* in, TIFF* out) +{ + uint32 width, height; /* image width & height */ + uint16 shortv; + float floatv; + char *stringv; + uint32 longv; + uint16 v[1]; + + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &width); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &height); + + CopyField(TIFFTAG_SUBFILETYPE, longv); + TIFFSetField(out, TIFFTAG_IMAGEWIDTH, width); + TIFFSetField(out, TIFFTAG_IMAGELENGTH, height); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 8); + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); + + CopyField(TIFFTAG_FILLORDER, shortv); + TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 4); + v[0] = EXTRASAMPLE_ASSOCALPHA; + TIFFSetField(out, TIFFTAG_EXTRASAMPLES, 1, v); + CopyField(TIFFTAG_XRESOLUTION, floatv); + CopyField(TIFFTAG_YRESOLUTION, floatv); + CopyField(TIFFTAG_RESOLUTIONUNIT, shortv); + TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(out, TIFFTAG_SOFTWARE, TIFFGetVersion()); + CopyField(TIFFTAG_DOCUMENTNAME, stringv); + + if( process_by_block && TIFFIsTiled( in ) ) + return( cvt_by_tile( in, out ) ); + else if( process_by_block ) + return( cvt_by_strip( in, out ) ); + else + return( cvt_whole_image( in, out ) ); +} + +static char* usageMsg[] = { + "usage: tiff2rgba [-c comp] [-r rows] [-b] input... output\n", + "where comp is one of the following compression algorithms:\n", + " jpeg\t\tJPEG encoding\n", + " lzw\t\tLempel-Ziv & Welch encoding\n", + " (lzw compression unsupported by default due to Unisys patent enforcement)\n", + " packbits\tPackBits encoding\n", + " none\t\tno compression\n", + "and the other options are:\n", + " -r\trows/strip\n", + " -b (progress by block rather than as a whole image)\n", + NULL +}; + +static void +usage(void) +{ + int i; + for (i = 0; usageMsg[i]; i++) + fprintf(stderr, "%s", usageMsg[i]); + exit(-1); +} diff --git a/tools/tiffcmp.c b/tools/tiffcmp.c new file mode 100755 index 0000000..da8cda7 --- /dev/null +++ b/tools/tiffcmp.c @@ -0,0 +1,483 @@ +/* $Header: /home/cvsroot/libtiff/tools/tiffcmp.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include + +#include "tiffio.h" + +static int stopondiff = 1; +static int stoponfirsttag = 1; +static uint16 bitspersample = 1; +static uint16 samplesperpixel = 1; +static uint32 imagewidth; +static uint32 imagelength; + +static int tiffcmp(TIFF*, TIFF*); +static int cmptags(TIFF*, TIFF*); +static void ContigCompare(int, uint32, unsigned char*, unsigned char*, int); +static void PrintDiff(uint32, int, uint32, int, int); +static void SeparateCompare(int, int, uint32, unsigned char*, unsigned char*); +static void eof(const char*, uint32, int); + +static void +usage(void) +{ + fprintf(stderr, "Usage: tiffcmp [-l] [-t] [-z] file1 file2\n"); + exit(-3); +} + +int +main(int argc, char* argv[]) +{ + TIFF *tif1, *tif2; + int c, dirnum; + extern int optind; + + while ((c = getopt(argc, argv, "ltz")) != -1) + switch (c) { + case 'l': + stopondiff = 0; + break; + case 'z': + stopondiff += 100; + break; + case 't': + stoponfirsttag = 0; + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind < 2) + usage(); + tif1 = TIFFOpen(argv[optind], "r"); + if (tif1 == NULL) + return (-1); + tif2 = TIFFOpen(argv[optind+1], "r"); + if (tif2 == NULL) + return (-2); + dirnum = 0; + while (tiffcmp(tif1, tif2)) { + if (!TIFFReadDirectory(tif1)) { + if (!TIFFReadDirectory(tif2)) + break; + printf("No more directories for %s\n", + TIFFFileName(tif1)); + return (1); + } else if (!TIFFReadDirectory(tif2)) { + printf("No more directories for %s\n", + TIFFFileName(tif2)); + return (1); + } + printf("Directory %d:\n", ++dirnum); + } + return (0); +} + +#define checkEOF(tif, row, sample) { \ + eof(TIFFFileName(tif), row, sample); \ + goto bad; \ +} + +static int CheckShortTag(TIFF*, TIFF*, int, char*); +static int CheckShort2Tag(TIFF*, TIFF*, int, char*); +static int CheckShortArrayTag(TIFF*, TIFF*, int, char*); +static int CheckLongTag(TIFF*, TIFF*, int, char*); +static int CheckFloatTag(TIFF*, TIFF*, int, char*); +static int CheckStringTag(TIFF*, TIFF*, int, char*); + +static int +tiffcmp(TIFF* tif1, TIFF* tif2) +{ + uint16 config1, config2; + tsize_t size1; + uint32 s, row; + unsigned char *buf1, *buf2; + + if (!CheckShortTag(tif1, tif2, TIFFTAG_BITSPERSAMPLE, "BitsPerSample")) + return (0); + if (!CheckShortTag(tif1, tif2, TIFFTAG_SAMPLESPERPIXEL, "SamplesPerPixel")) + return (0); + if (!CheckLongTag(tif1, tif2, TIFFTAG_IMAGEWIDTH, "ImageWidth")) + return (0); + if (!cmptags(tif1, tif2)) + return (1); + (void) TIFFGetField(tif1, TIFFTAG_BITSPERSAMPLE, &bitspersample); + (void) TIFFGetField(tif1, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel); + (void) TIFFGetField(tif1, TIFFTAG_IMAGEWIDTH, &imagewidth); + (void) TIFFGetField(tif1, TIFFTAG_IMAGELENGTH, &imagelength); + (void) TIFFGetField(tif1, TIFFTAG_PLANARCONFIG, &config1); + (void) TIFFGetField(tif2, TIFFTAG_PLANARCONFIG, &config2); + buf1 = (unsigned char *)_TIFFmalloc(size1 = TIFFScanlineSize(tif1)); + buf2 = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(tif2)); + if (buf1 == NULL || buf2 == NULL) { + fprintf(stderr, "No space for scanline buffers\n"); + exit(-1); + } + if (config1 != config2 && bitspersample != 8 && samplesperpixel > 1) { + fprintf(stderr, +"Can't handle different planar configuration w/ different bits/sample\n"); + goto bad; + } +#define pack(a,b) ((a)<<8)|(b) + switch (pack(config1, config2)) { + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_CONTIG): + for (row = 0; row < imagelength; row++) { + if (TIFFReadScanline(tif2, buf2, row, 0) < 0) + checkEOF(tif2, row, -1) + for (s = 0; s < samplesperpixel; s++) { + if (TIFFReadScanline(tif1, buf1, row, s) < 0) + checkEOF(tif1, row, s) + SeparateCompare(1, s, row, buf2, buf1); + } + } + break; + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_SEPARATE): + for (row = 0; row < imagelength; row++) { + if (TIFFReadScanline(tif1, buf1, row, 0) < 0) + checkEOF(tif1, row, -1) + for (s = 0; s < samplesperpixel; s++) { + if (TIFFReadScanline(tif2, buf2, row, s) < 0) + checkEOF(tif2, row, s) + SeparateCompare(0, s, row, buf1, buf2); + } + } + break; + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_SEPARATE): + for (s = 0; s < samplesperpixel; s++) + for (row = 0; row < imagelength; row++) { + if (TIFFReadScanline(tif1, buf1, row, s) < 0) + checkEOF(tif1, row, s) + if (TIFFReadScanline(tif2, buf2, row, s) < 0) + checkEOF(tif2, row, s) + ContigCompare(s, row, buf1, buf2, size1); + } + break; + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_CONTIG): + for (row = 0; row < imagelength; row++) { + if (TIFFReadScanline(tif1, buf1, row, 0) < 0) + checkEOF(tif1, row, -1) + if (TIFFReadScanline(tif2, buf2, row, 0) < 0) + checkEOF(tif2, row, -1) + ContigCompare(-1, row, buf1, buf2, size1); + } + break; + } + if (buf1) _TIFFfree(buf1); + if (buf2) _TIFFfree(buf2); + return (1); +bad: + if (stopondiff) + exit(1); + if (buf1) _TIFFfree(buf1); + if (buf2) _TIFFfree(buf2); + return (0); +} + +#define CmpShortField(tag, name) \ + if (!CheckShortTag(tif1, tif2, tag, name) && stoponfirsttag) return (0) +#define CmpShortField2(tag, name) \ + if (!CheckShort2Tag(tif1, tif2, tag, name) && stoponfirsttag) return (0) +#define CmpLongField(tag, name) \ + if (!CheckLongTag(tif1, tif2, tag, name) && stoponfirsttag) return (0) +#define CmpFloatField(tag, name) \ + if (!CheckFloatTag(tif1, tif2, tag, name) && stoponfirsttag) return (0) +#define CmpStringField(tag, name) \ + if (!CheckStringTag(tif1, tif2, tag, name) && stoponfirsttag) return (0) +#define CmpShortArrayField(tag, name) \ + if (!CheckShortArrayTag(tif1, tif2, tag, name) && stoponfirsttag) return (0) + +static int +cmptags(TIFF* tif1, TIFF* tif2) +{ + CmpLongField(TIFFTAG_SUBFILETYPE, "SubFileType"); + CmpLongField(TIFFTAG_IMAGEWIDTH, "ImageWidth"); + CmpLongField(TIFFTAG_IMAGELENGTH, "ImageLength"); + CmpShortField(TIFFTAG_BITSPERSAMPLE, "BitsPerSample"); + CmpShortField(TIFFTAG_COMPRESSION, "Compression"); + CmpShortField(TIFFTAG_PREDICTOR, "Predictor"); + CmpShortField(TIFFTAG_PHOTOMETRIC, "PhotometricInterpretation"); + CmpShortField(TIFFTAG_THRESHHOLDING, "Thresholding"); + CmpShortField(TIFFTAG_FILLORDER, "FillOrder"); + CmpShortField(TIFFTAG_ORIENTATION, "Orientation"); + CmpShortField(TIFFTAG_SAMPLESPERPIXEL, "SamplesPerPixel"); + CmpShortField(TIFFTAG_MINSAMPLEVALUE, "MinSampleValue"); + CmpShortField(TIFFTAG_MAXSAMPLEVALUE, "MaxSampleValue"); + CmpFloatField(TIFFTAG_XRESOLUTION, "XResolution"); + CmpFloatField(TIFFTAG_YRESOLUTION, "YResolution"); + CmpLongField(TIFFTAG_GROUP3OPTIONS, "Group3Options"); + CmpLongField(TIFFTAG_GROUP4OPTIONS, "Group4Options"); + CmpShortField(TIFFTAG_RESOLUTIONUNIT, "ResolutionUnit"); + CmpShortField(TIFFTAG_PLANARCONFIG, "PlanarConfiguration"); + CmpLongField(TIFFTAG_ROWSPERSTRIP, "RowsPerStrip"); + CmpFloatField(TIFFTAG_XPOSITION, "XPosition"); + CmpFloatField(TIFFTAG_YPOSITION, "YPosition"); + CmpShortField(TIFFTAG_GRAYRESPONSEUNIT, "GrayResponseUnit"); + CmpShortField(TIFFTAG_COLORRESPONSEUNIT, "ColorResponseUnit"); +#ifdef notdef + { uint16 *graycurve; + CmpField(TIFFTAG_GRAYRESPONSECURVE, graycurve); + } + { uint16 *red, *green, *blue; + CmpField3(TIFFTAG_COLORRESPONSECURVE, red, green, blue); + } + { uint16 *red, *green, *blue; + CmpField3(TIFFTAG_COLORMAP, red, green, blue); + } +#endif + CmpShortField2(TIFFTAG_PAGENUMBER, "PageNumber"); + CmpStringField(TIFFTAG_ARTIST, "Artist"); + CmpStringField(TIFFTAG_IMAGEDESCRIPTION,"ImageDescription"); + CmpStringField(TIFFTAG_MAKE, "Make"); + CmpStringField(TIFFTAG_MODEL, "Model"); + CmpStringField(TIFFTAG_SOFTWARE, "Software"); + CmpStringField(TIFFTAG_DATETIME, "DateTime"); + CmpStringField(TIFFTAG_HOSTCOMPUTER, "HostComputer"); + CmpStringField(TIFFTAG_PAGENAME, "PageName"); + CmpStringField(TIFFTAG_DOCUMENTNAME, "DocumentName"); + CmpShortField(TIFFTAG_MATTEING, "Matteing"); + CmpShortArrayField(TIFFTAG_EXTRASAMPLES,"ExtraSamples"); + return (1); +} + +static void +ContigCompare(int sample, uint32 row, unsigned char* p1, unsigned char* p2, int size) +{ + register uint32 pix; + register int ppb = 8/bitspersample; + + if (memcmp(p1, p2, size) == 0) + return; + switch (bitspersample) { + case 1: case 2: case 4: case 8: { + register unsigned char *pix1 = p1, *pix2 = p2; + + for (pix = 0; pix < imagewidth; pix1++, pix2++, pix += ppb) + if (*pix1 != *pix2) + PrintDiff(row, sample, pix, + *pix1, *pix2); + break; + } + case 16: { + register uint16 *pix1 = (uint16 *)p1, *pix2 = (uint16 *)p2; + + for (pix = 0; pix < imagewidth; pix1++, pix2++, pix++) + if (*pix1 != *pix2) + PrintDiff(row, sample, pix, + *pix1, *pix2); + break; + } + } +} + +static void +PrintDiff(uint32 row, int sample, uint32 pix, int w1, int w2) +{ + register int mask1, mask2, s, bps; + + if (sample < 0) + sample = 0; + bps = bitspersample; + switch (bps) { + case 1: + case 2: + case 4: + mask1 = ~((-1)<>= bps, s -= bps, pix++) { + if ((w1 & mask2) ^ (w2 & mask2)) { + printf( + "Scanline %lu, pixel %lu, sample %d: %01x %01x\n", + (long) row, (long) pix, + sample, (w1 >> s) & mask1, + (w2 >> s) & mask1 ); + if (--stopondiff == 0) + exit(1); + } + } + break; + case 8: + printf("Scanline %lu, pixel %lu, sample %d: %02x %02x\n", + (long) row, (long) pix, sample, w1, w2); + if (--stopondiff == 0) + exit(1); + break; + case 16: + printf("Scanline %lu, pixel %lu, sample %d: %04x %04x\n", + (long) row, (long) pix, sample, w1, w2); + if (--stopondiff == 0) + exit(1); + break; + } +} + +static void +SeparateCompare(int reversed, int sample, uint32 row, unsigned char* cp1, unsigned char* p2) +{ + uint32 npixels = imagewidth; + register int pixel; + + cp1 += sample; + for (pixel = 0; npixels-- > 0; pixel++, cp1 += samplesperpixel, p2++) + if (*cp1 != *p2) { + printf("Scanline %lu, pixel %lu, sample %ld: ", + (long) row, (long) pixel, (long) sample); + if (reversed) + printf("%02x %02x\n", *p2, *cp1); + else + printf("%02x %02x\n", *cp1, *p2); + if (--stopondiff == 0) + exit(1); + } +} + +static int +checkTag(TIFF* tif1, TIFF* tif2, int tag, char* name, void* p1, void* p2) +{ + + if (TIFFGetField(tif1, tag, p1)) { + if (!TIFFGetField(tif2, tag, p2)) { + printf("%s tag appears only in %s\n", + name, TIFFFileName(tif1)); + return (0); + } + return (1); + } else if (TIFFGetField(tif2, tag, p2)) { + printf("%s tag appears only in %s\n", name, TIFFFileName(tif2)); + return (0); + } + return (-1); +} + +#define CHECK(cmp, fmt) { \ + switch (checkTag(tif1,tif2,tag,name,&v1,&v2)) { \ + case 1: if (cmp) \ + case -1: return (1); \ + printf(fmt, name, v1, v2); \ + } \ + return (0); \ +} + +static int +CheckShortTag(TIFF* tif1, TIFF* tif2, int tag, char* name) +{ + uint16 v1, v2; + CHECK(v1 == v2, "%s: %u %u\n"); +} + +static int +CheckShort2Tag(TIFF* tif1, TIFF* tif2, int tag, char* name) +{ + uint16 v11, v12, v21, v22; + + if (TIFFGetField(tif1, tag, &v11, &v12)) { + if (!TIFFGetField(tif2, tag, &v21, &v22)) { + printf("%s tag appears only in %s\n", + name, TIFFFileName(tif1)); + return (0); + } + if (v11 == v21 && v12 == v22) + return (1); + printf("%s: <%u,%u> <%u,%u>\n", name, v11, v12, v21, v22); + } else if (TIFFGetField(tif2, tag, &v21, &v22)) + printf("%s tag appears only in %s\n", name, TIFFFileName(tif2)); + else + return (1); + return (0); +} + +static int +CheckShortArrayTag(TIFF* tif1, TIFF* tif2, int tag, char* name) +{ + uint16 n1, *a1; + uint16 n2, *a2; + + if (TIFFGetField(tif1, tag, &n1, &a1)) { + if (!TIFFGetField(tif2, tag, &n2, &a2)) { + printf("%s tag appears only in %s\n", + name, TIFFFileName(tif1)); + return (0); + } + if (n1 == n2) { + char* sep; + uint16 i; + + if (memcmp(a1, a2, n1) == 0) + return (1); + printf("%s: value mismatch, <%u:", name, n1); + sep = ""; + for (i = 0; i < n1; i++) + printf("%s%u", sep, a1[i]), sep = ","; + printf("> and <%u: ", n2); + sep = ""; + for (i = 0; i < n2; i++) + printf("%s%u", sep, a2[i]), sep = ","; + printf(">\n"); + } else + printf("%s: %u items in %s, %u items in %s", name, + n1, TIFFFileName(tif1), + n2, TIFFFileName(tif2) + ); + } else if (TIFFGetField(tif2, tag, &n2, &a2)) + printf("%s tag appears only in %s\n", name, TIFFFileName(tif2)); + else + return (1); + return (0); +} + +static int +CheckLongTag(TIFF* tif1, TIFF* tif2, int tag, char* name) +{ + uint32 v1, v2; + CHECK(v1 == v2, "%s: %lu %lu\n"); +} + +static int +CheckFloatTag(TIFF* tif1, TIFF* tif2, int tag, char* name) +{ + float v1, v2; + CHECK(v1 == v2, "%s: %g %g\n"); +} + +static int +CheckStringTag(TIFF* tif1, TIFF* tif2, int tag, char* name) +{ + char *v1, *v2; + CHECK(strcmp(v1, v2) == 0, "%s: \"%s\" \"%s\"\n"); +} + +static void +eof(const char* name, uint32 row, int s) +{ + + printf("%s: EOF at scanline %lu", name, row); + if (s >= 0) + printf(", sample %d", s); + printf("\n"); +} diff --git a/tools/tiffcp.c b/tools/tiffcp.c new file mode 100755 index 0000000..c41c3a8 --- /dev/null +++ b/tools/tiffcp.c @@ -0,0 +1,1314 @@ +/* $Header: /home/cvsroot/libtiff/tools/tiffcp.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include + +#include +#include + +#include "tiffio.h" + +#if defined(VMS) +#define unlink delete +#endif + +#define streq(a,b) (strcmp(a,b) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) + +#define TRUE 1 +#define FALSE 0 + +static int outtiled = -1; +static uint32 tilewidth; +static uint32 tilelength; + +static uint16 config; +static uint16 compression; +static uint16 predictor; +static uint16 fillorder; +static uint32 rowsperstrip; +static uint32 g3opts; +static int ignore = FALSE; /* if true, ignore read errors */ +static uint32 defg3opts = (uint32) -1; +static int quality = 75; /* JPEG quality */ +static int jpegcolormode = JPEGCOLORMODE_RGB; +static uint16 defcompression = (uint16) -1; +static uint16 defpredictor = (uint16) -1; + +static int tiffcp(TIFF*, TIFF*); +static int processCompressOptions(char*); +static void usage(void); + +int +main(int argc, char* argv[]) +{ + uint16 defconfig = (uint16) -1; + uint16 deffillorder = 0; + uint32 deftilewidth = (uint32) -1; + uint32 deftilelength = (uint32) -1; + uint32 defrowsperstrip = (uint32) -1; + uint32 diroff = 0, p_diroff = 0; + TIFF* in; + TIFF* out; + char mode[10]; + char* mp = mode; + int c; + extern int optind; + extern char* optarg; + + *mp++ = 'w'; + *mp = '\0'; + while ((c = getopt(argc, argv, "c:f:l:o:z:p:r:w:aistBLMC")) != -1) + switch (c) { + case 'a': /* append to output */ + mode[0] = 'a'; + break; + case 'c': /* compression scheme */ + if (!processCompressOptions(optarg)) + usage(); + break; + case 'f': /* fill order */ + if (streq(optarg, "lsb2msb")) + deffillorder = FILLORDER_LSB2MSB; + else if (streq(optarg, "msb2lsb")) + deffillorder = FILLORDER_MSB2LSB; + else + usage(); + break; + case 'i': /* ignore errors */ + ignore = TRUE; + break; + case 'l': /* tile length */ + outtiled = TRUE; + deftilelength = atoi(optarg); + break; + case 'o': /* initial directory offset */ + diroff = strtoul(optarg, NULL, 0); + break; + case 'z': /* initial directory offset */ + p_diroff = strtoul(optarg, NULL, 0); + break; + case 'p': /* planar configuration */ + if (streq(optarg, "separate")) + defconfig = PLANARCONFIG_SEPARATE; + else if (streq(optarg, "contig")) + defconfig = PLANARCONFIG_CONTIG; + else + usage(); + break; + case 'r': /* rows/strip */ + defrowsperstrip = atoi(optarg); + break; + case 's': /* generate stripped output */ + outtiled = FALSE; + break; + case 't': /* generate tiled output */ + outtiled = TRUE; + break; + case 'w': /* tile width */ + outtiled = TRUE; + deftilewidth = atoi(optarg); + break; + case 'B': + *mp++ = 'b'; *mp = '\0'; + break; + case 'L': + *mp++ = 'l'; *mp = '\0'; + break; + case 'M': + *mp++ = 'm'; *mp = '\0'; + break; + case 'C': + *mp++ = 'c'; *mp = '\0'; + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind < 2) + usage(); + out = TIFFOpen(argv[argc-1], mode); + if (out == NULL) + return (-2); + mode[0] = 'r'; + for (; optind < argc-1 ; optind++) { + in = TIFFOpen(argv[optind], mode); + if (in == NULL) + return (-3); + if (diroff != 0 && !TIFFSetSubDirectory(in, diroff)) { + TIFFError(TIFFFileName(in), + "Error, setting subdirectory at %#x", diroff); + (void) TIFFClose(out); + return (1); + } + if (p_diroff != 0 && !TIFFSetDirectory(in, p_diroff)) { + TIFFError(TIFFFileName(in), + "Error, setting subdirectory at %#x", diroff); + (void) TIFFClose(out); + return (1); + } + do { + config = defconfig; + compression = defcompression; + predictor = defpredictor; + fillorder = deffillorder; + rowsperstrip = defrowsperstrip; + tilewidth = deftilewidth; + tilelength = deftilelength; + g3opts = defg3opts; + if (!tiffcp(in, out) || !TIFFWriteDirectory(out)) { + (void) TIFFClose(out); + return (1); + } + } while (TIFFReadDirectory(in) && p_diroff == 0 ); + (void) TIFFClose(in); + } + (void) TIFFClose(out); + return (0); +} + +static void +processG3Options(char* cp) +{ + if (cp = strchr(cp, ':')) { + if (defg3opts == (uint32) -1) + defg3opts = 0; + do { + cp++; + if (strneq(cp, "1d", 2)) + defg3opts &= ~GROUP3OPT_2DENCODING; + else if (strneq(cp, "2d", 2)) + defg3opts |= GROUP3OPT_2DENCODING; + else if (strneq(cp, "fill", 4)) + defg3opts |= GROUP3OPT_FILLBITS; + else + usage(); + } while (cp = strchr(cp, ':')); + } +} + +static int +processCompressOptions(char* opt) +{ + if (streq(opt, "none")) { + defcompression = COMPRESSION_NONE; + } else if (streq(opt, "packbits")) { + defcompression = COMPRESSION_PACKBITS; + } else if (strneq(opt, "jpeg", 4)) { + char* cp = strchr(opt, ':'); + if (cp && isdigit(cp[1])) + quality = atoi(cp+1); + if (cp && strchr(cp, 'r')) + jpegcolormode = JPEGCOLORMODE_RAW; + defcompression = COMPRESSION_JPEG; + } else if (strneq(opt, "g3", 2)) { + processG3Options(opt); + defcompression = COMPRESSION_CCITTFAX3; + } else if (streq(opt, "g4")) { + defcompression = COMPRESSION_CCITTFAX4; + } else if (strneq(opt, "lzw", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + defpredictor = atoi(cp+1); + defcompression = COMPRESSION_LZW; + } else if (strneq(opt, "zip", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + defpredictor = atoi(cp+1); + defcompression = COMPRESSION_DEFLATE; + } else + return (0); + return (1); +} + +char* stuff[] = { +"usage: tiffcp [options] input... output", +"where options are:", +" -a append to output instead of overwriting", +" -o offset set initial directory offset", +" -p contig pack samples contiguously (e.g. RGBRGB...)", +" -p separate store samples separately (e.g. RRR...GGG...BBB...)", +" -s write output in strips", +" -t write output in tiles", +" -i ignore read errors", +"", +" -r # make each strip have no more than # rows", +" -w # set output tile width (pixels)", +" -l # set output tile length (pixels)", +"", +" -f lsb2msb force lsb-to-msb FillOrder for output", +" -f msb2lsb force msb-to-lsb FillOrder for output", +"", +" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", +" (no longer supported by default due to Unisys patent enforcement)", +" -c zip[:opts] compress output with deflate encoding", +" -c jpeg[:opts]compress output with JPEG encoding", +" -c packbits compress output with packbits encoding", +" -c g3[:opts] compress output with CCITT Group 3 encoding", +" -c g4 compress output with CCITT Group 4 encoding", +" -c none use no compression algorithm on output", +"", +"Group 3 options:", +" 1d use default CCITT Group 3 1D-encoding", +" 2d use optional CCITT Group 3 2D-encoding", +" fill byte-align EOL codes", +"For example, -c g3:2d:fill to get G3-2D-encoded data with byte-aligned EOLs", +"", +"JPEG options:", +" # set compression quality level (0-100, default 75)", +" r output color image as RGB rather than YCbCr", +"For example, -c jpeg:r:50 to get JPEG-encoded RGB data with 50% comp. quality", +"", +"LZW and deflate options:", +" # set predictor value", +"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} + +static void +CheckAndCorrectColormap(TIFF* tif, int n, uint16* r, uint16* g, uint16* b) +{ + int i; + + for (i = 0; i < n; i++) + if (r[i] >= 256 || g[i] >= 256 || b[i] >= 256) + return; + TIFFWarning(TIFFFileName(tif), "Scaling 8-bit colormap"); +#define CVT(x) (((x) * ((1L<<16)-1)) / 255) + for (i = 0; i < n; i++) { + r[i] = CVT(r[i]); + g[i] = CVT(g[i]); + b[i] = CVT(b[i]); + } +#undef CVT +} + +#define CopyField(tag, v) \ + if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) +#define CopyField2(tag, v1, v2) \ + if (TIFFGetField(in, tag, &v1, &v2)) TIFFSetField(out, tag, v1, v2) +#define CopyField3(tag, v1, v2, v3) \ + if (TIFFGetField(in, tag, &v1, &v2, &v3)) TIFFSetField(out, tag, v1, v2, v3) +#define CopyField4(tag, v1, v2, v3, v4) \ + if (TIFFGetField(in, tag, &v1, &v2, &v3, &v4)) TIFFSetField(out, tag, v1, v2, v3, v4) + +static void +cpTag(TIFF* in, TIFF* out, uint16 tag, uint16 count, TIFFDataType type) +{ + switch (type) { + case TIFF_SHORT: + if (count == 1) { + uint16 shortv; + CopyField(tag, shortv); + } else if (count == 2) { + uint16 shortv1, shortv2; + CopyField2(tag, shortv1, shortv2); + } else if (count == 4) { + uint16 *tr, *tg, *tb, *ta; + CopyField4(tag, tr, tg, tb, ta); + } else if (count == (uint16) -1) { + uint16 shortv1; + uint16* shortav; + CopyField2(tag, shortv1, shortav); + } + break; + case TIFF_LONG: + { uint32 longv; + CopyField(tag, longv); + } + break; + case TIFF_RATIONAL: + if (count == 1) { + float floatv; + CopyField(tag, floatv); + } else if (count == (uint16) -1) { + float* floatav; + CopyField(tag, floatav); + } + break; + case TIFF_ASCII: + { char* stringv; + CopyField(tag, stringv); + } + break; + case TIFF_DOUBLE: + if (count == 1) { + double doublev; + CopyField(tag, doublev); + } else if (count == (uint16) -1) { + double* doubleav; + CopyField(tag, doubleav); + } + break; + } +} + +static struct cpTag { + uint16 tag; + uint16 count; + TIFFDataType type; +} tags[] = { + { TIFFTAG_SUBFILETYPE, 1, TIFF_LONG }, + { TIFFTAG_THRESHHOLDING, 1, TIFF_SHORT }, + { TIFFTAG_DOCUMENTNAME, 1, TIFF_ASCII }, + { TIFFTAG_IMAGEDESCRIPTION, 1, TIFF_ASCII }, + { TIFFTAG_MAKE, 1, TIFF_ASCII }, + { TIFFTAG_MODEL, 1, TIFF_ASCII }, + { TIFFTAG_ORIENTATION, 1, TIFF_SHORT }, + { TIFFTAG_MINSAMPLEVALUE, 1, TIFF_SHORT }, + { TIFFTAG_MAXSAMPLEVALUE, 1, TIFF_SHORT }, + { TIFFTAG_XRESOLUTION, 1, TIFF_RATIONAL }, + { TIFFTAG_YRESOLUTION, 1, TIFF_RATIONAL }, + { TIFFTAG_PAGENAME, 1, TIFF_ASCII }, + { TIFFTAG_XPOSITION, 1, TIFF_RATIONAL }, + { TIFFTAG_YPOSITION, 1, TIFF_RATIONAL }, + { TIFFTAG_RESOLUTIONUNIT, 1, TIFF_SHORT }, + { TIFFTAG_PAGENUMBER, 2, TIFF_SHORT }, + { TIFFTAG_SOFTWARE, 1, TIFF_ASCII }, + { TIFFTAG_DATETIME, 1, TIFF_ASCII }, + { TIFFTAG_ARTIST, 1, TIFF_ASCII }, + { TIFFTAG_HOSTCOMPUTER, 1, TIFF_ASCII }, + { TIFFTAG_WHITEPOINT, 1, TIFF_RATIONAL }, + { TIFFTAG_PRIMARYCHROMATICITIES,(uint16) -1,TIFF_RATIONAL }, + { TIFFTAG_HALFTONEHINTS, 2, TIFF_SHORT }, + { TIFFTAG_INKSET, 1, TIFF_SHORT }, + { TIFFTAG_INKNAMES, 1, TIFF_ASCII }, + { TIFFTAG_NUMBEROFINKS, 1, TIFF_SHORT }, + { TIFFTAG_DOTRANGE, 2, TIFF_SHORT }, + { TIFFTAG_TARGETPRINTER, 1, TIFF_ASCII }, + { TIFFTAG_SAMPLEFORMAT, 1, TIFF_SHORT }, + { TIFFTAG_YCBCRCOEFFICIENTS, (uint16) -1,TIFF_RATIONAL }, + { TIFFTAG_YCBCRSUBSAMPLING, 2, TIFF_SHORT }, + { TIFFTAG_YCBCRPOSITIONING, 1, TIFF_SHORT }, + { TIFFTAG_REFERENCEBLACKWHITE, (uint16) -1,TIFF_RATIONAL }, + { TIFFTAG_EXTRASAMPLES, (uint16) -1, TIFF_SHORT }, + { TIFFTAG_SMINSAMPLEVALUE, 1, TIFF_DOUBLE }, + { TIFFTAG_SMAXSAMPLEVALUE, 1, TIFF_DOUBLE }, + { TIFFTAG_STONITS, 1, TIFF_DOUBLE }, +}; +#define NTAGS (sizeof (tags) / sizeof (tags[0])) + +#define CopyTag(tag, count, type) cpTag(in, out, tag, count, type) + +typedef int (*copyFunc) + (TIFF* in, TIFF* out, uint32 l, uint32 w, uint16 samplesperpixel); +static copyFunc pickCopyFunc(TIFF*, TIFF*, uint16, uint16); + +static int +tiffcp(TIFF* in, TIFF* out) +{ + uint16 bitspersample, samplesperpixel; + copyFunc cf; + uint32 w, l; + struct cpTag* p; + + CopyField(TIFFTAG_IMAGEWIDTH, w); + CopyField(TIFFTAG_IMAGELENGTH, l); + CopyField(TIFFTAG_BITSPERSAMPLE, bitspersample); + CopyField(TIFFTAG_SAMPLESPERPIXEL, samplesperpixel); + if (compression != (uint16)-1) + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + else + CopyField(TIFFTAG_COMPRESSION, compression); + if (compression == COMPRESSION_JPEG && jpegcolormode == JPEGCOLORMODE_RGB) + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_YCBCR); + else if (compression == COMPRESSION_SGILOG || compression == COMPRESSION_SGILOG24) + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, + samplesperpixel == 1 ? + PHOTOMETRIC_LOGL : PHOTOMETRIC_LOGLUV); + else + CopyTag(TIFFTAG_PHOTOMETRIC, 1, TIFF_SHORT); + if (fillorder != 0) + TIFFSetField(out, TIFFTAG_FILLORDER, fillorder); + else + CopyTag(TIFFTAG_FILLORDER, 1, TIFF_SHORT); + /* + * Choose tiles/strip for the output image according to + * the command line arguments (-tiles, -strips) and the + * structure of the input image. + */ + if (outtiled == -1) + outtiled = TIFFIsTiled(in); + if (outtiled) { + /* + * Setup output file's tile width&height. If either + * is not specified, use either the value from the + * input image or, if nothing is defined, use the + * library default. + */ + if (tilewidth == (uint32) -1) + TIFFGetField(in, TIFFTAG_TILEWIDTH, &tilewidth); + if (tilelength == (uint32) -1) + TIFFGetField(in, TIFFTAG_TILELENGTH, &tilelength); + TIFFDefaultTileSize(out, &tilewidth, &tilelength); + TIFFSetField(out, TIFFTAG_TILEWIDTH, tilewidth); + TIFFSetField(out, TIFFTAG_TILELENGTH, tilelength); + } else { + /* + * RowsPerStrip is left unspecified: use either the + * value from the input image or, if nothing is defined, + * use the library default. + */ + if (rowsperstrip == (uint32) -1) + TIFFGetField(in, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + rowsperstrip = TIFFDefaultStripSize(out, rowsperstrip); + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, rowsperstrip); + } + if (config != (uint16) -1) + TIFFSetField(out, TIFFTAG_PLANARCONFIG, config); + else + CopyField(TIFFTAG_PLANARCONFIG, config); + if (samplesperpixel <= 4) + CopyTag(TIFFTAG_TRANSFERFUNCTION, 4, TIFF_SHORT); + CopyTag(TIFFTAG_COLORMAP, 4, TIFF_SHORT); +/* SMinSampleValue & SMaxSampleValue */ + switch (compression) { + case COMPRESSION_JPEG: + TIFFSetField(out, TIFFTAG_JPEGQUALITY, quality); + TIFFSetField(out, TIFFTAG_JPEGCOLORMODE, jpegcolormode); + break; + case COMPRESSION_LZW: + case COMPRESSION_DEFLATE: + if (predictor != (uint16)-1) + TIFFSetField(out, TIFFTAG_PREDICTOR, predictor); + else + CopyField(TIFFTAG_PREDICTOR, predictor); + break; + case COMPRESSION_CCITTFAX3: + case COMPRESSION_CCITTFAX4: + if (compression == COMPRESSION_CCITTFAX3) { + if (g3opts != (uint32) -1) + TIFFSetField(out, TIFFTAG_GROUP3OPTIONS, + g3opts); + else + CopyField(TIFFTAG_GROUP3OPTIONS, g3opts); + } else + CopyTag(TIFFTAG_GROUP4OPTIONS, 1, TIFF_LONG); + CopyTag(TIFFTAG_BADFAXLINES, 1, TIFF_LONG); + CopyTag(TIFFTAG_CLEANFAXDATA, 1, TIFF_LONG); + CopyTag(TIFFTAG_CONSECUTIVEBADFAXLINES, 1, TIFF_LONG); + CopyTag(TIFFTAG_FAXRECVPARAMS, 1, TIFF_LONG); + CopyTag(TIFFTAG_FAXRECVTIME, 1, TIFF_LONG); + CopyTag(TIFFTAG_FAXSUBADDRESS, 1, TIFF_ASCII); + break; + } + { uint32 len32; + void** data; + if (TIFFGetField(in, TIFFTAG_ICCPROFILE, &len32, &data)) + TIFFSetField(out, TIFFTAG_ICCPROFILE, len32, data); + } + for (p = tags; p < &tags[NTAGS]; p++) + CopyTag(p->tag, p->count, p->type); + + cf = pickCopyFunc(in, out, bitspersample, samplesperpixel); + return (cf ? (*cf)(in, out, l, w, samplesperpixel) : FALSE); +} + +/* + * Copy Functions. + */ +#define DECLAREcpFunc(x) \ +static int x(TIFF* in, TIFF* out, \ + uint32 imagelength, uint32 imagewidth, tsample_t spp) + +#define DECLAREreadFunc(x) \ +static void x(TIFF* in, \ + uint8* buf, uint32 imagelength, uint32 imagewidth, tsample_t spp) +typedef void (*readFunc)(TIFF*, uint8*, uint32, uint32, tsample_t); + +#define DECLAREwriteFunc(x) \ +static int x(TIFF* out, \ + uint8* buf, uint32 imagelength, uint32 imagewidth, tsample_t spp) +typedef int (*writeFunc)(TIFF*, uint8*, uint32, uint32, tsample_t); + +/* + * Contig -> contig by scanline for rows/strip change. + */ +DECLAREcpFunc(cpContig2ContigByRow) +{ + tdata_t buf = _TIFFmalloc(TIFFScanlineSize(in)); + uint32 row; + + (void) imagewidth; (void) spp; + for (row = 0; row < imagelength; row++) { + if (TIFFReadScanline(in, buf, row, 0) < 0 && !ignore) + goto done; + if (TIFFWriteScanline(out, buf, row, 0) < 0) + goto bad; + } +done: + _TIFFfree(buf); + return (TRUE); +bad: + _TIFFfree(buf); + return (FALSE); +} + +/* + * Strip -> strip for change in encoding. + */ +DECLAREcpFunc(cpDecodedStrips) +{ + tsize_t stripsize = TIFFStripSize(in); + tdata_t buf = _TIFFmalloc(stripsize); + + (void) imagewidth; (void) spp; + if (buf) { + tstrip_t s, ns = TIFFNumberOfStrips(in); + uint32 row = 0; + for (s = 0; s < ns; s++) { + tsize_t cc = (row + rowsperstrip > imagelength) ? + TIFFVStripSize(in, imagelength - row) : stripsize; + if (TIFFReadEncodedStrip(in, s, buf, cc) < 0 && !ignore) + break; + if (TIFFWriteEncodedStrip(out, s, buf, cc) < 0) { + _TIFFfree(buf); + return (FALSE); + } + row += rowsperstrip; + } + _TIFFfree(buf); + return (TRUE); + } + return (FALSE); +} + +/* + * Separate -> separate by row for rows/strip change. + */ +DECLAREcpFunc(cpSeparate2SeparateByRow) +{ + tdata_t buf = _TIFFmalloc(TIFFScanlineSize(in)); + uint32 row; + tsample_t s; + + (void) imagewidth; + for (s = 0; s < spp; s++) { + for (row = 0; row < imagelength; row++) { + if (TIFFReadScanline(in, buf, row, s) < 0 && !ignore) + goto done; + if (TIFFWriteScanline(out, buf, row, s) < 0) + goto bad; + } + } +done: + _TIFFfree(buf); + return (TRUE); +bad: + _TIFFfree(buf); + return (FALSE); +} + +/* + * Contig -> separate by row. + */ +DECLAREcpFunc(cpContig2SeparateByRow) +{ + tdata_t inbuf = _TIFFmalloc(TIFFScanlineSize(in)); + tdata_t outbuf = _TIFFmalloc(TIFFScanlineSize(out)); + register uint8 *inp, *outp; + register uint32 n; + uint32 row; + tsample_t s; + + /* unpack channels */ + for (s = 0; s < spp; s++) { + for (row = 0; row < imagelength; row++) { + if (TIFFReadScanline(in, inbuf, row, 0) < 0 && !ignore) + goto done; + inp = ((uint8*)inbuf) + s; + outp = (uint8*)outbuf; + for (n = imagewidth; n-- > 0;) { + *outp++ = *inp; + inp += spp; + } + if (TIFFWriteScanline(out, outbuf, row, s) < 0) + goto bad; + } + } +done: + if (inbuf) _TIFFfree(inbuf); + if (outbuf) _TIFFfree(outbuf); + return (TRUE); +bad: + if (inbuf) _TIFFfree(inbuf); + if (outbuf) _TIFFfree(outbuf); + return (FALSE); +} + +/* + * Separate -> contig by row. + */ +DECLAREcpFunc(cpSeparate2ContigByRow) +{ + tdata_t inbuf = _TIFFmalloc(TIFFScanlineSize(in)); + tdata_t outbuf = _TIFFmalloc(TIFFScanlineSize(out)); + register uint8 *inp, *outp; + register uint32 n; + uint32 row; + tsample_t s; + + for (row = 0; row < imagelength; row++) { + /* merge channels */ + for (s = 0; s < spp; s++) { + if (TIFFReadScanline(in, inbuf, row, s) < 0 && !ignore) + goto done; + inp = (uint8*)inbuf; + outp = ((uint8*)outbuf) + s; + for (n = imagewidth; n-- > 0;) { + *outp = *inp++; + outp += spp; + } + } + if (TIFFWriteScanline(out, outbuf, row, 0) < 0) + goto bad; + } +done: + if (inbuf) _TIFFfree(inbuf); + if (outbuf) _TIFFfree(outbuf); + return (TRUE); +bad: + if (inbuf) _TIFFfree(inbuf); + if (outbuf) _TIFFfree(outbuf); + return (FALSE); +} + +static void +cpStripToTile(uint8* out, uint8* in, + uint32 rows, uint32 cols, int outskew, int inskew) +{ + while (rows-- > 0) { + uint32 j = cols; + while (j-- > 0) + *out++ = *in++; + out += outskew; + in += inskew; + } +} + +static void +cpContigBufToSeparateBuf(uint8* out, uint8* in, + uint32 rows, uint32 cols, int outskew, int inskew, tsample_t spp, + int bytes_per_sample ) +{ + while (rows-- > 0) { + uint32 j = cols; + while (j-- > 0) + { + int n = bytes_per_sample; + + while( n-- ) { + *out++ = *in++; + } + in += (spp-1) * bytes_per_sample; + } + out += outskew; + in += inskew; + } +} + +static void +cpSeparateBufToContigBuf(uint8* out, uint8* in, + uint32 rows, uint32 cols, int outskew, int inskew, tsample_t spp, + int bytes_per_sample) +{ + while (rows-- > 0) { + uint32 j = cols; + while (j-- > 0) { + int n = bytes_per_sample; + + while( n-- ) { + *out++ = *in++; + } + out += (spp-1)*bytes_per_sample; + } + out += outskew; + in += inskew; + } +} + +static int +cpImage(TIFF* in, TIFF* out, readFunc fin, writeFunc fout, + uint32 imagelength, uint32 imagewidth, tsample_t spp) +{ + int status = FALSE; + tdata_t buf = _TIFFmalloc(TIFFRasterScanlineSize(in) * imagelength); + + if (buf) { + (*fin)(in, (uint8*)buf, imagelength, imagewidth, spp); + status = (fout)(out, (uint8*)buf, imagelength, imagewidth, spp); + _TIFFfree(buf); + } + return (status); +} + +DECLAREreadFunc(readContigStripsIntoBuffer) +{ + tsize_t scanlinesize = TIFFScanlineSize(in); + uint8* bufp = buf; + uint32 row; + + (void) imagewidth; (void) spp; + for (row = 0; row < imagelength; row++) { + if (TIFFReadScanline(in, (tdata_t) bufp, row, 0) < 0 && !ignore) + break; + bufp += scanlinesize; + } +} + +DECLAREreadFunc(readSeparateStripsIntoBuffer) +{ + tsize_t scanlinesize = TIFFScanlineSize(in); + tdata_t scanline = _TIFFmalloc(scanlinesize); + + (void) imagewidth; + if (scanline) { + uint8* bufp = (uint8*) buf; + uint32 row; + tsample_t s; + + for (row = 0; row < imagelength; row++) { + /* merge channels */ + for (s = 0; s < spp; s++) { + uint8* bp = bufp + s; + tsize_t n = scanlinesize; + uint8* sbuf = scanline; + + if (TIFFReadScanline(in, scanline, row, s) < 0 && !ignore) + goto done; + while (n-- > 0) + *bp = *sbuf++, bp += spp; + } + bufp += scanlinesize * spp; + } + +done: + _TIFFfree(scanline); + } +} + +DECLAREreadFunc(readContigTilesIntoBuffer) +{ + tdata_t tilebuf = _TIFFmalloc(TIFFTileSize(in)); + uint32 imagew = TIFFScanlineSize(in); + uint32 tilew = TIFFTileRowSize(in); + int iskew = imagew - tilew; + uint8* bufp = (uint8*) buf; + uint32 tw, tl; + uint32 row; + + (void) spp; + if (tilebuf == 0) + return; + (void) TIFFGetField(in, TIFFTAG_TILEWIDTH, &tw); + (void) TIFFGetField(in, TIFFTAG_TILELENGTH, &tl); + + for (row = 0; row < imagelength; row += tl) { + uint32 nrow = (row+tl > imagelength) ? imagelength-row : tl; + uint32 colb = 0; + uint32 col; + + for (col = 0; col < imagewidth; col += tw) { + if (TIFFReadTile(in, tilebuf, col, row, 0, 0) < 0 && + !ignore) + goto done; + if (colb + tilew > imagew) { + uint32 width = imagew - colb; + uint32 oskew = tilew - width; + cpStripToTile(bufp + colb, + tilebuf, nrow, width, + oskew + iskew, oskew ); + } else + cpStripToTile(bufp + colb, + tilebuf, nrow, tilew, + iskew, 0); + colb += tilew; + } + bufp += imagew * nrow; + } +done: + _TIFFfree(tilebuf); +} + +DECLAREreadFunc(readSeparateTilesIntoBuffer) +{ + uint32 imagew = TIFFRasterScanlineSize(in); + uint32 tilew = TIFFTileRowSize(in); + int iskew = imagew - tilew*spp; + tdata_t tilebuf = _TIFFmalloc(TIFFTileSize(in)); + uint8* bufp = (uint8*) buf; + uint32 tw, tl; + uint32 row; + uint16 bps, bytes_per_sample; + + if (tilebuf == 0) + return; + (void) TIFFGetField(in, TIFFTAG_TILEWIDTH, &tw); + (void) TIFFGetField(in, TIFFTAG_TILELENGTH, &tl); + (void) TIFFGetField(in, TIFFTAG_BITSPERSAMPLE, &bps); + assert( bps % 8 == 0 ); + bytes_per_sample = bps/8; + + for (row = 0; row < imagelength; row += tl) { + uint32 nrow = (row+tl > imagelength) ? imagelength-row : tl; + uint32 colb = 0; + uint32 col; + + for (col = 0; col < imagewidth; col += tw) { + tsample_t s; + + for (s = 0; s < spp; s++) { + if (TIFFReadTile(in, tilebuf, col, row, 0, s) < 0 && !ignore) + goto done; + /* + * Tile is clipped horizontally. Calculate + * visible portion and skewing factors. + */ + if (colb + tilew*spp > imagew) { + uint32 width = imagew - colb; + int oskew = tilew*spp - width; + cpSeparateBufToContigBuf( + bufp+colb+s*bytes_per_sample, + tilebuf, nrow, + width/(spp*bytes_per_sample), + oskew + iskew, + oskew/spp, spp, + bytes_per_sample); + } else + cpSeparateBufToContigBuf( + bufp+colb+s*bytes_per_sample, + tilebuf, nrow, tw, + iskew, 0, spp, + bytes_per_sample); + } + colb += tilew*spp; + } + bufp += imagew * nrow; + } +done: + _TIFFfree(tilebuf); +} + +DECLAREwriteFunc(writeBufferToContigStrips) +{ + uint32 row, rowsperstrip; + tstrip_t strip = 0; + + (void) imagewidth; (void) spp; + (void) TIFFGetFieldDefaulted(out, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + for (row = 0; row < imagelength; row += rowsperstrip) { + uint32 nrows = (row+rowsperstrip > imagelength) ? + imagelength-row : rowsperstrip; + tsize_t stripsize = TIFFVStripSize(out, nrows); + if (TIFFWriteEncodedStrip(out, strip++, buf, stripsize) < 0) + return (FALSE); + buf += stripsize; + } + return (TRUE); +} + +DECLAREwriteFunc(writeBufferToSeparateStrips) +{ + uint32 rowsize = imagewidth * spp; + uint32 rowsperstrip; + tdata_t obuf = _TIFFmalloc(TIFFStripSize(out)); + tstrip_t strip = 0; + tsample_t s; + + if (obuf == NULL) + return (0); + (void) TIFFGetFieldDefaulted(out, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + for (s = 0; s < spp; s++) { + uint32 row; + for (row = 0; row < imagelength; row += rowsperstrip) { + uint32 nrows = (row+rowsperstrip > imagelength) ? + imagelength-row : rowsperstrip; + tsize_t stripsize = TIFFVStripSize(out, nrows); + + cpContigBufToSeparateBuf( + obuf, (uint8*) buf + row*rowsize + s, + nrows, imagewidth, 0, 0, spp, 1); + if (TIFFWriteEncodedStrip(out, strip++, obuf, stripsize) < 0) { + _TIFFfree(obuf); + return (FALSE); + } + } + } + _TIFFfree(obuf); + return (TRUE); + +} + +DECLAREwriteFunc(writeBufferToContigTiles) +{ + uint32 imagew = TIFFScanlineSize(out); + uint32 tilew = TIFFTileRowSize(out); + int iskew = imagew - tilew; + tdata_t obuf = _TIFFmalloc(TIFFTileSize(out)); + uint8* bufp = (uint8*) buf; + uint32 tl, tw; + uint32 row; + + (void) spp; + if (obuf == NULL) + return (FALSE); + (void) TIFFGetField(out, TIFFTAG_TILELENGTH, &tl); + (void) TIFFGetField(out, TIFFTAG_TILEWIDTH, &tw); + for (row = 0; row < imagelength; row += tilelength) { + uint32 nrow = (row+tl > imagelength) ? imagelength-row : tl; + uint32 colb = 0; + uint32 col; + + for (col = 0; col < imagewidth; col += tw) { + /* + * Tile is clipped horizontally. Calculate + * visible portion and skewing factors. + */ + if (colb + tilew > imagew) { + uint32 width = imagew - colb; + int oskew = tilew - width; + cpStripToTile(obuf, bufp + colb, nrow, width, + oskew, oskew + iskew); + } else + cpStripToTile(obuf, bufp + colb, nrow, tilew, + 0, iskew); + if (TIFFWriteTile(out, obuf, col, row, 0, 0) < 0) { + _TIFFfree(obuf); + return (FALSE); + } + colb += tilew; + } + bufp += nrow * imagew; + } + _TIFFfree(obuf); + return (TRUE); +} + +DECLAREwriteFunc(writeBufferToSeparateTiles) +{ + uint32 imagew = TIFFScanlineSize(out); + tsize_t tilew = TIFFTileRowSize(out); + uint32 iimagew = TIFFRasterScanlineSize(out); + int iskew = iimagew - tilew*spp; + tdata_t obuf = _TIFFmalloc(TIFFTileSize(out)); + uint8* bufp = (uint8*) buf; + uint32 tl, tw; + uint32 row; + uint16 bps, bytes_per_sample; + + if (obuf == NULL) + return (FALSE); + (void) TIFFGetField(out, TIFFTAG_TILELENGTH, &tl); + (void) TIFFGetField(out, TIFFTAG_TILEWIDTH, &tw); + (void) TIFFGetField(out, TIFFTAG_BITSPERSAMPLE, &bps); + assert( bps % 8 == 0 ); + bytes_per_sample = bps/8; + + for (row = 0; row < imagelength; row += tl) { + uint32 nrow = (row+tl > imagelength) ? imagelength-row : tl; + uint32 colb = 0; + uint32 col; + + for (col = 0; col < imagewidth; col += tw) { + tsample_t s; + for (s = 0; s < spp; s++) { + /* + * Tile is clipped horizontally. Calculate + * visible portion and skewing factors. + */ + if (colb + tilew > imagew) { + uint32 width = (imagew - colb); + int oskew = tilew - width; + + cpContigBufToSeparateBuf(obuf, + bufp + (colb*spp) + s, + nrow, width/bytes_per_sample, + oskew, (oskew*spp)+iskew, spp, + bytes_per_sample); + } else + cpContigBufToSeparateBuf(obuf, + bufp + (colb*spp) + s, + nrow, tilewidth, + 0, iskew, spp, + bytes_per_sample); + if (TIFFWriteTile(out, obuf, col, row, 0, s) < 0) { + _TIFFfree(obuf); + return (FALSE); + } + } + colb += tilew; + } + bufp += nrow * iimagew; + } + _TIFFfree(obuf); + return (TRUE); +} + +/* + * Contig strips -> contig tiles. + */ +DECLAREcpFunc(cpContigStrips2ContigTiles) +{ + return cpImage(in, out, + readContigStripsIntoBuffer, + writeBufferToContigTiles, + imagelength, imagewidth, spp); +} + +/* + * Contig strips -> separate tiles. + */ +DECLAREcpFunc(cpContigStrips2SeparateTiles) +{ + return cpImage(in, out, + readContigStripsIntoBuffer, + writeBufferToSeparateTiles, + imagelength, imagewidth, spp); +} + +/* + * Separate strips -> contig tiles. + */ +DECLAREcpFunc(cpSeparateStrips2ContigTiles) +{ + return cpImage(in, out, + readSeparateStripsIntoBuffer, + writeBufferToContigTiles, + imagelength, imagewidth, spp); +} + +/* + * Separate strips -> separate tiles. + */ +DECLAREcpFunc(cpSeparateStrips2SeparateTiles) +{ + return cpImage(in, out, + readSeparateStripsIntoBuffer, + writeBufferToSeparateTiles, + imagelength, imagewidth, spp); +} + +/* + * Contig strips -> contig tiles. + */ +DECLAREcpFunc(cpContigTiles2ContigTiles) +{ + return cpImage(in, out, + readContigTilesIntoBuffer, + writeBufferToContigTiles, + imagelength, imagewidth, spp); +} + +/* + * Contig tiles -> separate tiles. + */ +DECLAREcpFunc(cpContigTiles2SeparateTiles) +{ + return cpImage(in, out, + readContigTilesIntoBuffer, + writeBufferToSeparateTiles, + imagelength, imagewidth, spp); +} + +/* + * Separate tiles -> contig tiles. + */ +DECLAREcpFunc(cpSeparateTiles2ContigTiles) +{ + return cpImage(in, out, + readSeparateTilesIntoBuffer, + writeBufferToContigTiles, + imagelength, imagewidth, spp); +} + +/* + * Separate tiles -> separate tiles (tile dimension change). + */ +DECLAREcpFunc(cpSeparateTiles2SeparateTiles) +{ + return cpImage(in, out, + readSeparateTilesIntoBuffer, + writeBufferToSeparateTiles, + imagelength, imagewidth, spp); +} + +/* + * Contig tiles -> contig tiles (tile dimension change). + */ +DECLAREcpFunc(cpContigTiles2ContigStrips) +{ + return cpImage(in, out, + readContigTilesIntoBuffer, + writeBufferToContigStrips, + imagelength, imagewidth, spp); +} + +/* + * Contig tiles -> separate strips. + */ +DECLAREcpFunc(cpContigTiles2SeparateStrips) +{ + return cpImage(in, out, + readContigTilesIntoBuffer, + writeBufferToSeparateStrips, + imagelength, imagewidth, spp); +} + +/* + * Separate tiles -> contig strips. + */ +DECLAREcpFunc(cpSeparateTiles2ContigStrips) +{ + return cpImage(in, out, + readSeparateTilesIntoBuffer, + writeBufferToContigStrips, + imagelength, imagewidth, spp); +} + +/* + * Separate tiles -> separate strips. + */ +DECLAREcpFunc(cpSeparateTiles2SeparateStrips) +{ + return cpImage(in, out, + readSeparateTilesIntoBuffer, + writeBufferToSeparateStrips, + imagelength, imagewidth, spp); +} + +/* + * Select the appropriate copy function to use. + */ +static copyFunc +pickCopyFunc(TIFF* in, TIFF* out, uint16 bitspersample, uint16 samplesperpixel) +{ + uint16 shortv; + uint32 w, l, tw, tl; + int bychunk; + + (void) TIFFGetField(in, TIFFTAG_PLANARCONFIG, &shortv); + if (shortv != config && bitspersample != 8 && samplesperpixel > 1) { + fprintf(stderr, +"%s: Can not handle different planar configuration w/ bits/sample != 8\n", + TIFFFileName(in)); + return (NULL); + } + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &l); + if (TIFFIsTiled(out)) { + if (!TIFFGetField(in, TIFFTAG_TILEWIDTH, &tw)) + tw = w; + if (!TIFFGetField(in, TIFFTAG_TILELENGTH, &tl)) + tl = l; + bychunk = (tw == tilewidth && tl == tilelength); + } else if (TIFFIsTiled(in)) { + TIFFGetField(in, TIFFTAG_TILEWIDTH, &tw); + TIFFGetField(in, TIFFTAG_TILELENGTH, &tl); + bychunk = (tw == w && tl == rowsperstrip); + } else { + uint32 irps = (uint32) -1L; + TIFFGetField(in, TIFFTAG_ROWSPERSTRIP, &irps); + bychunk = (rowsperstrip == irps); + } +#define T 1 +#define F 0 +#define pack(a,b,c,d,e) ((long)(((a)<<11)|((b)<<3)|((c)<<2)|((d)<<1)|(e))) + switch(pack(shortv,config,TIFFIsTiled(in),TIFFIsTiled(out),bychunk)) { +/* Strips -> Tiles */ + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_CONTIG, F,T,F): + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_CONTIG, F,T,T): + return cpContigStrips2ContigTiles; + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_SEPARATE, F,T,F): + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_SEPARATE, F,T,T): + return cpContigStrips2SeparateTiles; + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_CONTIG, F,T,F): + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_CONTIG, F,T,T): + return cpSeparateStrips2ContigTiles; + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_SEPARATE, F,T,F): + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_SEPARATE, F,T,T): + return cpSeparateStrips2SeparateTiles; +/* Tiles -> Tiles */ + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_CONTIG, T,T,F): + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_CONTIG, T,T,T): + return cpContigTiles2ContigTiles; + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_SEPARATE, T,T,F): + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_SEPARATE, T,T,T): + return cpContigTiles2SeparateTiles; + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_CONTIG, T,T,F): + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_CONTIG, T,T,T): + return cpSeparateTiles2ContigTiles; + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_SEPARATE, T,T,F): + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_SEPARATE, T,T,T): + return cpSeparateTiles2SeparateTiles; +/* Tiles -> Strips */ + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_CONTIG, T,F,F): + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_CONTIG, T,F,T): + return cpContigTiles2ContigStrips; + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_SEPARATE, T,F,F): + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_SEPARATE, T,F,T): + return cpContigTiles2SeparateStrips; + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_CONTIG, T,F,F): + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_CONTIG, T,F,T): + return cpSeparateTiles2ContigStrips; + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_SEPARATE, T,F,F): + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_SEPARATE, T,F,T): + return cpSeparateTiles2SeparateStrips; +/* Strips -> Strips */ + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_CONTIG, F,F,F): + return cpContig2ContigByRow; + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_CONTIG, F,F,T): + return cpDecodedStrips; + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_SEPARATE, F,F,F): + case pack(PLANARCONFIG_CONTIG, PLANARCONFIG_SEPARATE, F,F,T): + return cpContig2SeparateByRow; + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_CONTIG, F,F,F): + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_CONTIG, F,F,T): + return cpSeparate2ContigByRow; + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_SEPARATE, F,F,F): + case pack(PLANARCONFIG_SEPARATE, PLANARCONFIG_SEPARATE, F,F,T): + return cpSeparate2SeparateByRow; + } +#undef pack +#undef F +#undef T + fprintf(stderr, "tiffcp: %s: Don't know how to copy/convert image.\n", + TIFFFileName(in)); + return (NULL); +} diff --git a/tools/tiffdither.c b/tools/tiffdither.c new file mode 100755 index 0000000..6f86d79 --- /dev/null +++ b/tools/tiffdither.c @@ -0,0 +1,314 @@ +/* $Header: /home/cvsroot/libtiff/tools/tiffdither.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include + +#include "tiffio.h" + +#define streq(a,b) (strcmp(a,b) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) + +#define CopyField(tag, v) \ + if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) + +uint32 imagewidth; +uint32 imagelength; +int threshold = 128; + +static void usage(void); + +/* + * Floyd-Steinberg error propragation with threshold. + * This code is stolen from tiffmedian. + */ +static void +fsdither(TIFF* in, TIFF* out) +{ + unsigned char *outline, *inputline, *inptr; + short *thisline, *nextline, *tmpptr; + register unsigned char *outptr; + register short *thisptr, *nextptr; + register uint32 i, j; + uint32 imax, jmax; + int lastline, lastpixel; + int bit; + tsize_t outlinesize; + + imax = imagelength - 1; + jmax = imagewidth - 1; + inputline = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(in)); + thisline = (short *)_TIFFmalloc(imagewidth * sizeof (short)); + nextline = (short *)_TIFFmalloc(imagewidth * sizeof (short)); + outlinesize = TIFFScanlineSize(out); + outline = (unsigned char *) _TIFFmalloc(outlinesize); + + /* + * Get first line + */ + if (TIFFReadScanline(in, inputline, 0, 0) <= 0) + return; + inptr = inputline; + nextptr = nextline; + for (j = 0; j < imagewidth; ++j) + *nextptr++ = *inptr++; + for (i = 1; i < imagelength; ++i) { + tmpptr = thisline; + thisline = nextline; + nextline = tmpptr; + lastline = (i == imax); + if (TIFFReadScanline(in, inputline, i, 0) <= 0) + break; + inptr = inputline; + nextptr = nextline; + for (j = 0; j < imagewidth; ++j) + *nextptr++ = *inptr++; + thisptr = thisline; + nextptr = nextline; + _TIFFmemset(outptr = outline, 0, outlinesize); + bit = 0x80; + for (j = 0; j < imagewidth; ++j) { + register int v; + + lastpixel = (j == jmax); + v = *thisptr++; + if (v < 0) + v = 0; + else if (v > 255) + v = 255; + if (v > threshold) { + *outptr |= bit; + v -= 255; + } + bit >>= 1; + if (bit == 0) { + outptr++; + bit = 0x80; + } + if (!lastpixel) + thisptr[0] += v * 7 / 16; + if (!lastline) { + if (j != 0) + nextptr[-1] += v * 3 / 16; + *nextptr++ += v * 5 / 16; + if (!lastpixel) + nextptr[0] += v / 16; + } + } + if (TIFFWriteScanline(out, outline, i-1, 0) < 0) + break; + } + _TIFFfree(inputline); + _TIFFfree(thisline); + _TIFFfree(nextline); + _TIFFfree(outline); +} + +static uint16 compression = COMPRESSION_PACKBITS; +static uint16 predictor = 0; +static uint32 group3options = 0; + +static void +processG3Options(char* cp) +{ + if (cp = strchr(cp, ':')) { + do { + cp++; + if (strneq(cp, "1d", 2)) + group3options &= ~GROUP3OPT_2DENCODING; + else if (strneq(cp, "2d", 2)) + group3options |= GROUP3OPT_2DENCODING; + else if (strneq(cp, "fill", 4)) + group3options |= GROUP3OPT_FILLBITS; + else + usage(); + } while (cp = strchr(cp, ':')); + } +} + +static int +processCompressOptions(char* opt) +{ + if (streq(opt, "none")) + compression = COMPRESSION_NONE; + else if (streq(opt, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (strneq(opt, "g3", 2)) { + processG3Options(opt); + compression = COMPRESSION_CCITTFAX3; + } else if (streq(opt, "g4")) + compression = COMPRESSION_CCITTFAX4; + else if (strneq(opt, "lzw", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_LZW; + } else if (strneq(opt, "zip", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_DEFLATE; + } else + return (0); + return (1); +} + +int +main(int argc, char* argv[]) +{ + TIFF *in, *out; + uint16 samplesperpixel, bitspersample = 1, shortv; + float floatv; + char thing[1024]; + uint32 rowsperstrip = (uint32) -1; + int onestrip = 0; + uint16 fillorder = 0; + int c; + extern int optind; + extern char *optarg; + + while ((c = getopt(argc, argv, "c:f:r:t:")) != -1) + switch (c) { + case 'c': /* compression scheme */ + if (!processCompressOptions(optarg)) + usage(); + break; + case 'f': /* fill order */ + if (streq(optarg, "lsb2msb")) + fillorder = FILLORDER_LSB2MSB; + else if (streq(optarg, "msb2lsb")) + fillorder = FILLORDER_MSB2LSB; + else + usage(); + break; + case 'r': /* rows/strip */ + rowsperstrip = atoi(optarg); + onestrip = 0; + break; + case 't': + threshold = atoi(optarg); + if (threshold < 0) + threshold = 0; + else if (threshold > 255) + threshold = 255; + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind < 2) + usage(); + in = TIFFOpen(argv[optind], "r"); + if (in == NULL) + return (-1); + TIFFGetField(in, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel); + if (samplesperpixel != 1) { + fprintf(stderr, "%s: Not a b&w image.\n", argv[0]); + return (-1); + } + TIFFGetField(in, TIFFTAG_BITSPERSAMPLE, &bitspersample); + if (bitspersample != 8) { + fprintf(stderr, + " %s: Sorry, only handle 8-bit samples.\n", argv[0]); + return (-1); + } + out = TIFFOpen(argv[optind+1], "w"); + if (out == NULL) + return (-1); + CopyField(TIFFTAG_IMAGEWIDTH, imagewidth); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &imagelength); + TIFFSetField(out, TIFFTAG_IMAGELENGTH, imagelength-1); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 1); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + TIFFSetField(out, TIFFTAG_FILLORDER, fillorder); + sprintf(thing, "Dithered B&W version of %s", argv[optind]); + TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, thing); + CopyField(TIFFTAG_ORIENTATION, shortv); + CopyField(TIFFTAG_XRESOLUTION, floatv); + CopyField(TIFFTAG_YRESOLUTION, floatv); + CopyField(TIFFTAG_RESOLUTIONUNIT, shortv); + if (onestrip) + rowsperstrip = imagelength-1; + else + rowsperstrip = TIFFDefaultStripSize(out, rowsperstrip); + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, rowsperstrip); + switch (compression) { + case COMPRESSION_CCITTFAX3: + TIFFSetField(out, TIFFTAG_GROUP3OPTIONS, group3options); + break; + case COMPRESSION_LZW: + case COMPRESSION_DEFLATE: + if (predictor) + TIFFSetField(out, TIFFTAG_PREDICTOR, predictor); + break; + } + fsdither(in, out); + TIFFClose(in); + TIFFClose(out); + return (0); +} + +char* stuff[] = { +"usage: tiffdither [options] input.tif output.tif", +"where options are:", +" -r # make each strip have no more than # rows", +" -f lsb2msb force lsb-to-msb FillOrder for output", +" -f msb2lsb force msb-to-lsb FillOrder for output", +" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", +" (no longer supported by default due to Unisys patent enforcement)", +" -c zip[:opts] compress output with deflate encoding", +" -c packbits compress output with packbits encoding", +" -c g3[:opts] compress output with CCITT Group 3 encoding", +" -c g4 compress output with CCITT Group 4 encoding", +" -c none use no compression algorithm on output", +"", +"Group 3 options:", +" 1d use default CCITT Group 3 1D-encoding", +" 2d use optional CCITT Group 3 2D-encoding", +" fill byte-align EOL codes", +"For example, -c g3:2d:fill to get G3-2D-encoded data with byte-aligned EOLs", +"", +"LZW and deflate options:", +" # set predictor value", +"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} diff --git a/tools/tiffdump.c b/tools/tiffdump.c new file mode 100755 index 0000000..36106d7 --- /dev/null +++ b/tools/tiffdump.c @@ -0,0 +1,755 @@ +/* $Header: /home/cvsroot/libtiff/tools/tiffdump.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include + +#if defined(VMS) +#include +#include +#elif defined(_WINDOWS) +#include +#define off_t toff_t +#include "tiffio.h" +#include +#elif defined(applec) +#define open _open_ /* to avoid conflicts */ +#include +#undef open +int open(const char*, int, int); +typedef unsigned int off_t; +#else /* !VMS && !_WINDOWS && !applec */ +#ifdef unix +#include +#endif +#include +#include +#endif + +#if defined(MSDOS) +#include +#endif + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +#include "tiffio.h" + +char* appname; +char* curfile; +int swabflag; +int bigendian; +int typeshift[13]; /* data type shift counts */ +long typemask[13]; /* data type masks */ +int maxitems = 24; /* maximum indirect data items to print */ + +char* bytefmt = "%s%#02x"; /* BYTE */ +char* sbytefmt = "%s%d"; /* SBYTE */ +char* shortfmt = "%s%u"; /* SHORT */ +char* sshortfmt = "%s%d"; /* SSHORT */ +char* longfmt = "%s%lu"; /* LONG */ +char* slongfmt = "%s%ld"; /* SLONG */ +char* rationalfmt = "%s%g"; /* RATIONAL */ +char* srationalfmt = "%s%g"; /* SRATIONAL */ +char* floatfmt = "%s%g"; /* FLOAT */ +char* doublefmt = "%s%g"; /* DOUBLE */ + +static void dump(int, uint32); +extern int optind; +extern char* optarg; + +void +usage() +{ + fprintf(stderr, "usage: %s [-h] [-o offset] file.tif ...\n", appname); + exit(-1); +} + +int +main(int argc, char* argv[]) +{ + int one = 1, fd; + int multiplefiles = (argc > 1); + int c; + uint32 diroff = (uint32) 0; + bigendian = (*(char *)&one == 0); + + appname = argv[0]; + while ((c = getopt(argc, argv, "m:o:h")) != -1) { + switch (c) { + case 'h': /* print values in hex */ + shortfmt = "%s%#x"; + sshortfmt = "%s%#x"; + longfmt = "%s%#lx"; + slongfmt = "%s%#lx"; + break; + case 'o': + diroff = (uint32) strtoul(optarg, NULL, 0); + break; + case 'm': + maxitems = strtoul(optarg, NULL, 0); + break; + default: + usage(); + } + } + if (optind >= argc) + usage(); + for (; optind < argc; optind++) { + fd = open(argv[optind], O_RDONLY|O_BINARY, 0); + if (fd < 0) { + perror(argv[0]); + return (-1); + } + if (multiplefiles) + printf("%s:\n", argv[optind]); + curfile = argv[optind]; + swabflag = 0; + dump(fd, diroff); + close(fd); + } + return (0); +} + +static TIFFHeader hdr; + +#define ord(e) ((int)e) + +/* + * Initialize shift & mask tables and byte + * swapping state according to the file + * byte order. + */ +static void +InitByteOrder(int magic) +{ + typemask[0] = 0; + typemask[ord(TIFF_BYTE)] = 0xff; + typemask[ord(TIFF_SBYTE)] = 0xff; + typemask[ord(TIFF_UNDEFINED)] = 0xff; + typemask[ord(TIFF_SHORT)] = 0xffff; + typemask[ord(TIFF_SSHORT)] = 0xffff; + typemask[ord(TIFF_LONG)] = 0xffffffff; + typemask[ord(TIFF_SLONG)] = 0xffffffff; + typemask[ord(TIFF_RATIONAL)] = 0xffffffff; + typemask[ord(TIFF_SRATIONAL)] = 0xffffffff; + typemask[ord(TIFF_FLOAT)] = 0xffffffff; + typemask[ord(TIFF_DOUBLE)] = 0xffffffff; + typeshift[0] = 0; + typeshift[ord(TIFF_LONG)] = 0; + typeshift[ord(TIFF_SLONG)] = 0; + typeshift[ord(TIFF_RATIONAL)] = 0; + typeshift[ord(TIFF_SRATIONAL)] = 0; + typeshift[ord(TIFF_FLOAT)] = 0; + typeshift[ord(TIFF_DOUBLE)] = 0; + if (magic == TIFF_BIGENDIAN) { + typeshift[ord(TIFF_BYTE)] = 24; + typeshift[ord(TIFF_SBYTE)] = 24; + typeshift[ord(TIFF_SHORT)] = 16; + typeshift[ord(TIFF_SSHORT)] = 16; + swabflag = !bigendian; + } else { + typeshift[ord(TIFF_BYTE)] = 0; + typeshift[ord(TIFF_SBYTE)] = 0; + typeshift[ord(TIFF_SHORT)] = 0; + typeshift[ord(TIFF_SSHORT)] = 0; + swabflag = bigendian; + } +} + +static uint32 ReadDirectory(int, unsigned, uint32); +static void ReadError(char*); +static void Error(const char*, ...); +static void Fatal(const char*, ...); + +static void +dump(int fd, uint32 diroff) +{ + unsigned i; + + lseek(fd, (off_t) 0, 0); + if (read(fd, (char*) &hdr, sizeof (hdr)) != sizeof (hdr)) + ReadError("TIFF header"); + /* + * Setup the byte order handling. + */ + if (hdr.tiff_magic != TIFF_BIGENDIAN && hdr.tiff_magic != TIFF_LITTLEENDIAN) + Fatal("Not a TIFF file, bad magic number %u (%#x)", + hdr.tiff_magic, hdr.tiff_magic); + InitByteOrder(hdr.tiff_magic); + /* + * Swap header if required. + */ + if (swabflag) { + TIFFSwabShort(&hdr.tiff_version); + TIFFSwabLong(&hdr.tiff_diroff); + } + /* + * Now check version (if needed, it's been byte-swapped). + * Note that this isn't actually a version number, it's a + * magic number that doesn't change (stupid). + */ + if (hdr.tiff_version != TIFF_VERSION) + Fatal("Not a TIFF file, bad version number %u (%#x)", + hdr.tiff_version, hdr.tiff_version); + printf("Magic: %#x <%s-endian> Version: %#x\n", + hdr.tiff_magic, + hdr.tiff_magic == TIFF_BIGENDIAN ? "big" : "little", + hdr.tiff_version); + if (diroff == 0) + diroff = hdr.tiff_diroff; + for (i = 0; diroff != 0; i++) { + if (i > 0) + putchar('\n'); + diroff = ReadDirectory(fd, i, diroff); + } +} + +static int datawidth[] = { + 0, /* nothing */ + 1, /* TIFF_BYTE */ + 1, /* TIFF_ASCII */ + 2, /* TIFF_SHORT */ + 4, /* TIFF_LONG */ + 8, /* TIFF_RATIONAL */ + 1, /* TIFF_SBYTE */ + 1, /* TIFF_UNDEFINED */ + 2, /* TIFF_SSHORT */ + 4, /* TIFF_SLONG */ + 8, /* TIFF_SRATIONAL */ + 4, /* TIFF_FLOAT */ + 8, /* TIFF_DOUBLE */ +}; +#define NWIDTHS (sizeof (datawidth) / sizeof (datawidth[0])) +static int TIFFFetchData(int, TIFFDirEntry*, void*); +static void PrintTag(FILE*, uint16); +static void PrintType(FILE*, uint16); +static void PrintData(FILE*, uint16, uint32, unsigned char*); +static void PrintByte(FILE*, const char*, TIFFDirEntry*); +static void PrintShort(FILE*, const char*, TIFFDirEntry*); +static void PrintLong(FILE*, const char*, TIFFDirEntry*); + +/* + * Read the next TIFF directory from a file + * and convert it to the internal format. + * We read directories sequentially. + */ +static uint32 +ReadDirectory(int fd, unsigned ix, uint32 off) +{ + register TIFFDirEntry *dp; + register int n; + TIFFDirEntry *dir = 0; + uint16 dircount; + int space; + uint32 nextdiroff = 0; + + if (off == 0) /* no more directories */ + goto done; + if (lseek(fd, (off_t) off, 0) != off) { + Fatal("Seek error accessing TIFF directory"); + goto done; + } + if (read(fd, (char*) &dircount, sizeof (uint16)) != sizeof (uint16)) { + ReadError("directory count"); + goto done; + } + if (swabflag) + TIFFSwabShort(&dircount); + dir = (TIFFDirEntry *)_TIFFmalloc(dircount * sizeof (TIFFDirEntry)); + if (dir == NULL) { + Fatal("No space for TIFF directory"); + goto done; + } + n = read(fd, (char*) dir, dircount*sizeof (*dp)); + if (n != dircount*sizeof (*dp)) { + n /= sizeof (*dp); + Error( + "Could only read %u of %u entries in directory at offset %#lx", + n, dircount, (unsigned long) off); + dircount = n; + } + if (read(fd, (char*) &nextdiroff, sizeof (uint32)) != sizeof (uint32)) + nextdiroff = 0; + if (swabflag) + TIFFSwabLong(&nextdiroff); + printf("Directory %u: offset %lu (%#lx) next %lu (%#lx)\n", ix, + (unsigned long) off, (unsigned long) off, + (unsigned long) nextdiroff, (unsigned long) nextdiroff); + for (dp = dir, n = dircount; n > 0; n--, dp++) { + if (swabflag) { + TIFFSwabArrayOfShort(&dp->tdir_tag, 2); + TIFFSwabArrayOfLong(&dp->tdir_count, 2); + } + PrintTag(stdout, dp->tdir_tag); + putchar(' '); + PrintType(stdout, dp->tdir_type); + putchar(' '); + printf("%lu<", (unsigned long) dp->tdir_count); + if (dp->tdir_type >= NWIDTHS) { + printf(">\n"); + continue; + } + space = dp->tdir_count * datawidth[dp->tdir_type]; + if (space <= 4) { + switch (dp->tdir_type) { + case TIFF_FLOAT: + case TIFF_UNDEFINED: + case TIFF_ASCII: { + unsigned char data[4]; + _TIFFmemcpy(data, &dp->tdir_offset, 4); + if (swabflag) + TIFFSwabLong((uint32*) data); + PrintData(stdout, + dp->tdir_type, dp->tdir_count, data); + break; + } + case TIFF_BYTE: + PrintByte(stdout, bytefmt, dp); + break; + case TIFF_SBYTE: + PrintByte(stdout, sbytefmt, dp); + break; + case TIFF_SHORT: + PrintShort(stdout, shortfmt, dp); + break; + case TIFF_SSHORT: + PrintShort(stdout, sshortfmt, dp); + break; + case TIFF_LONG: + PrintLong(stdout, longfmt, dp); + break; + case TIFF_SLONG: + PrintLong(stdout, slongfmt, dp); + break; + } + } else { + unsigned char *data = (unsigned char *)_TIFFmalloc(space); + if (data) { + if (TIFFFetchData(fd, dp, data)) + if (dp->tdir_count > maxitems) { + PrintData(stdout, dp->tdir_type, + maxitems, data); + printf(" ..."); + } else + PrintData(stdout, dp->tdir_type, + dp->tdir_count, data); + _TIFFfree(data); + } else + Error("No space for data for tag %u", + dp->tdir_tag); + } + printf(">\n"); + } +done: + if (dir) + _TIFFfree((char *)dir); + return (nextdiroff); +} + +static struct tagname { + uint16 tag; + char* name; +} tagnames[] = { + { TIFFTAG_SUBFILETYPE, "SubFileType" }, + { TIFFTAG_OSUBFILETYPE, "OldSubFileType" }, + { TIFFTAG_IMAGEWIDTH, "ImageWidth" }, + { TIFFTAG_IMAGELENGTH, "ImageLength" }, + { TIFFTAG_BITSPERSAMPLE, "BitsPerSample" }, + { TIFFTAG_COMPRESSION, "Compression" }, + { TIFFTAG_PHOTOMETRIC, "Photometric" }, + { TIFFTAG_THRESHHOLDING, "Threshholding" }, + { TIFFTAG_CELLWIDTH, "CellWidth" }, + { TIFFTAG_CELLLENGTH, "CellLength" }, + { TIFFTAG_FILLORDER, "FillOrder" }, + { TIFFTAG_DOCUMENTNAME, "DocumentName" }, + { TIFFTAG_IMAGEDESCRIPTION, "ImageDescription" }, + { TIFFTAG_MAKE, "Make" }, + { TIFFTAG_MODEL, "Model" }, + { TIFFTAG_STRIPOFFSETS, "StripOffsets" }, + { TIFFTAG_ORIENTATION, "Orientation" }, + { TIFFTAG_SAMPLESPERPIXEL, "SamplesPerPixel" }, + { TIFFTAG_ROWSPERSTRIP, "RowsPerStrip" }, + { TIFFTAG_STRIPBYTECOUNTS, "StripByteCounts" }, + { TIFFTAG_MINSAMPLEVALUE, "MinSampleValue" }, + { TIFFTAG_MAXSAMPLEVALUE, "MaxSampleValue" }, + { TIFFTAG_XRESOLUTION, "XResolution" }, + { TIFFTAG_YRESOLUTION, "YResolution" }, + { TIFFTAG_PLANARCONFIG, "PlanarConfig" }, + { TIFFTAG_PAGENAME, "PageName" }, + { TIFFTAG_XPOSITION, "XPosition" }, + { TIFFTAG_YPOSITION, "YPosition" }, + { TIFFTAG_FREEOFFSETS, "FreeOffsets" }, + { TIFFTAG_FREEBYTECOUNTS, "FreeByteCounts" }, + { TIFFTAG_GRAYRESPONSEUNIT, "GrayResponseUnit" }, + { TIFFTAG_GRAYRESPONSECURVE,"GrayResponseCurve" }, + { TIFFTAG_GROUP3OPTIONS, "Group3Options" }, + { TIFFTAG_GROUP4OPTIONS, "Group4Options" }, + { TIFFTAG_RESOLUTIONUNIT, "ResolutionUnit" }, + { TIFFTAG_PAGENUMBER, "PageNumber" }, + { TIFFTAG_COLORRESPONSEUNIT,"ColorResponseUnit" }, + { TIFFTAG_TRANSFERFUNCTION, "TransferFunction" }, + { TIFFTAG_SOFTWARE, "Software" }, + { TIFFTAG_DATETIME, "DateTime" }, + { TIFFTAG_ARTIST, "Artist" }, + { TIFFTAG_HOSTCOMPUTER, "HostComputer" }, + { TIFFTAG_PREDICTOR, "Predictor" }, + { TIFFTAG_WHITEPOINT, "Whitepoint" }, + { TIFFTAG_PRIMARYCHROMATICITIES,"PrimaryChromaticities" }, + { TIFFTAG_COLORMAP, "Colormap" }, + { TIFFTAG_HALFTONEHINTS, "HalftoneHints" }, + { TIFFTAG_TILEWIDTH, "TileWidth" }, + { TIFFTAG_TILELENGTH, "TileLength" }, + { TIFFTAG_TILEOFFSETS, "TileOffsets" }, + { TIFFTAG_TILEBYTECOUNTS, "TileByteCounts" }, + { TIFFTAG_BADFAXLINES, "BadFaxLines" }, + { TIFFTAG_CLEANFAXDATA, "CleanFaxData" }, + { TIFFTAG_CONSECUTIVEBADFAXLINES, "ConsecutiveBadFaxLines" }, + { TIFFTAG_SUBIFD, "SubIFD" }, + { TIFFTAG_INKSET, "InkSet" }, + { TIFFTAG_INKNAMES, "InkNames" }, + { TIFFTAG_NUMBEROFINKS, "NumberOfInks" }, + { TIFFTAG_DOTRANGE, "DotRange" }, + { TIFFTAG_TARGETPRINTER, "TargetPrinter" }, + { TIFFTAG_EXTRASAMPLES, "ExtraSamples" }, + { TIFFTAG_SAMPLEFORMAT, "SampleFormat" }, + { TIFFTAG_SMINSAMPLEVALUE, "SMinSampleValue" }, + { TIFFTAG_SMAXSAMPLEVALUE, "SMaxSampleValue" }, + { TIFFTAG_JPEGPROC, "JPEGProcessingMode" }, + { TIFFTAG_JPEGIFOFFSET, "JPEGInterchangeFormat" }, + { TIFFTAG_JPEGIFBYTECOUNT, "JPEGInterchangeFormatLength" }, + { TIFFTAG_JPEGRESTARTINTERVAL,"JPEGRestartInterval" }, + { TIFFTAG_JPEGLOSSLESSPREDICTORS,"JPEGLosslessPredictors" }, + { TIFFTAG_JPEGPOINTTRANSFORM,"JPEGPointTransform" }, + { TIFFTAG_JPEGQTABLES, "JPEGQTables" }, + { TIFFTAG_JPEGDCTABLES, "JPEGDCTables" }, + { TIFFTAG_JPEGACTABLES, "JPEGACTables" }, + { TIFFTAG_YCBCRCOEFFICIENTS,"YCbCrCoefficients" }, + { TIFFTAG_YCBCRSUBSAMPLING, "YCbCrSubsampling" }, + { TIFFTAG_YCBCRPOSITIONING, "YCbCrPositioning" }, + { TIFFTAG_REFERENCEBLACKWHITE, "ReferenceBlackWhite" }, + { TIFFTAG_REFPTS, "IgReferencePoints (Island Graphics)" }, + { TIFFTAG_REGIONTACKPOINT, "IgRegionTackPoint (Island Graphics)" }, + { TIFFTAG_REGIONWARPCORNERS,"IgRegionWarpCorners (Island Graphics)" }, + { TIFFTAG_REGIONAFFINE, "IgRegionAffine (Island Graphics)" }, + { TIFFTAG_MATTEING, "OBSOLETE Matteing (Silicon Graphics)" }, + { TIFFTAG_DATATYPE, "OBSOLETE DataType (Silicon Graphics)" }, + { TIFFTAG_IMAGEDEPTH, "ImageDepth (Silicon Graphics)" }, + { TIFFTAG_TILEDEPTH, "TileDepth (Silicon Graphics)" }, + { 32768, "OLD BOGUS Matteing tag" }, + { TIFFTAG_COPYRIGHT, "Copyright" }, + { TIFFTAG_ICCPROFILE, "ICC Profile" }, + { TIFFTAG_JBIGOPTIONS, "JBIG Options" }, + { TIFFTAG_STONITS, "StoNits" }, +}; +#define NTAGS (sizeof (tagnames) / sizeof (tagnames[0])) + +static void +PrintTag(FILE* fd, uint16 tag) +{ + register struct tagname *tp; + + for (tp = tagnames; tp < &tagnames[NTAGS]; tp++) + if (tp->tag == tag) { + fprintf(fd, "%s (%u)", tp->name, tag); + return; + } + fprintf(fd, "%u (%#x)", tag, tag); +} + +static void +PrintType(FILE* fd, uint16 type) +{ + static char *typenames[] = { + "0", + "BYTE", + "ASCII", + "SHORT", + "LONG", + "RATIONAL", + "SBYTE", + "UNDEFINED", + "SSHORT", + "SLONG", + "SRATIONAL", + "FLOAT", + "DOUBLE" + }; +#define NTYPES (sizeof (typenames) / sizeof (typenames[0])) + + if (type < NTYPES) + fprintf(fd, "%s (%u)", typenames[type], type); + else + fprintf(fd, "%u (%#x)", type, type); +} +#undef NTYPES + +static void +PrintByte(FILE* fd, const char* fmt, TIFFDirEntry* dp) +{ + char* sep = ""; + + if (hdr.tiff_magic != TIFF_LITTLEENDIAN) { + switch ((int)dp->tdir_count) { + case 4: fprintf(fd, fmt, sep, dp->tdir_offset&0xff); + sep = " "; + case 3: fprintf(fd, fmt, sep, (dp->tdir_offset>>8)&0xff); + sep = " "; + case 2: fprintf(fd, fmt, sep, (dp->tdir_offset>>16)&0xff); + sep = " "; + case 1: fprintf(fd, fmt, sep, dp->tdir_offset>>24); + } + } else { + switch ((int)dp->tdir_count) { + case 4: fprintf(fd, fmt, sep, dp->tdir_offset>>24); + sep = " "; + case 3: fprintf(fd, fmt, sep, (dp->tdir_offset>>16)&0xff); + sep = " "; + case 2: fprintf(fd, fmt, sep, (dp->tdir_offset>>8)&0xff); + sep = " "; + case 1: fprintf(fd, fmt, sep, dp->tdir_offset&0xff); + } + } +} + +static void +PrintShort(FILE* fd, const char* fmt, TIFFDirEntry* dp) +{ + char *sep = ""; + + if (hdr.tiff_magic != TIFF_LITTLEENDIAN) { + switch (dp->tdir_count) { + case 2: fprintf(fd, fmt, sep, dp->tdir_offset&0xffff); + sep = " "; + case 1: fprintf(fd, fmt, sep, dp->tdir_offset>>16); + } + } else { + switch (dp->tdir_count) { + case 2: fprintf(fd, fmt, sep, dp->tdir_offset>>16); + sep = " "; + case 1: fprintf(fd, fmt, sep, dp->tdir_offset&0xffff); + } + } +} + +static void +PrintLong(FILE* fd, const char* fmt, TIFFDirEntry* dp) +{ + fprintf(fd, fmt, "", (long) dp->tdir_offset); +} + +#include + +static void +PrintASCII(FILE* fd, uint32 cc, const unsigned char* cp) +{ + for (; cc > 0; cc--, cp++) { + const char* tp; + + if (isprint(*cp)) { + fputc(*cp, fd); + continue; + } + for (tp = "\tt\bb\rr\nn\vv"; *tp; tp++) + if (*tp++ == *cp) + break; + if (*tp) + fprintf(fd, "\\%c", *tp); + else if (*cp) + fprintf(fd, "\\%03o", *cp); + else + fprintf(fd, "\\0"); + } +} + +static void +PrintData(FILE* fd, uint16 type, uint32 count, unsigned char* data) +{ + char* sep = ""; + + switch (type) { + case TIFF_BYTE: + while (count-- > 0) + fprintf(fd, bytefmt, sep, *data++), sep = " "; + break; + case TIFF_SBYTE: + while (count-- > 0) + fprintf(fd, sbytefmt, sep, *(char *)data++), sep = " "; + break; + case TIFF_UNDEFINED: + while (count-- > 0) + fprintf(fd, bytefmt, sep, *data++), sep = " "; + break; + case TIFF_ASCII: + PrintASCII(fd, count, data); + break; + case TIFF_SHORT: { + register uint16 *wp = (uint16*)data; + while (count-- > 0) + fprintf(fd, shortfmt, sep, *wp++), sep = " "; + break; + } + case TIFF_SSHORT: { + register int16 *wp = (int16*)data; + while (count-- > 0) + fprintf(fd, sshortfmt, sep, *wp++), sep = " "; + break; + } + case TIFF_LONG: { + register uint32 *lp = (uint32*)data; + while (count-- > 0) { + fprintf(fd, longfmt, sep, (unsigned long) *lp++); + sep = " "; + } + break; + } + case TIFF_SLONG: { + register int32 *lp = (int32*)data; + while (count-- > 0) + fprintf(fd, slongfmt, sep, (long) *lp++), sep = " "; + break; + } + case TIFF_RATIONAL: { + register uint32 *lp = (uint32*)data; + while (count-- > 0) { + if (lp[1] == 0) + fprintf(fd, "%sNan (%lu/%lu)", sep, + (unsigned long) lp[0], + (unsigned long) lp[1]); + else + fprintf(fd, rationalfmt, sep, + (double)lp[0] / (double)lp[1]); + sep = " "; + lp += 2; + } + break; + } + case TIFF_SRATIONAL: { + register int32 *lp = (int32*)data; + while (count-- > 0) { + if (lp[1] == 0) + fprintf(fd, "%sNan (%ld/%ld)", sep, + (long) lp[0], (long) lp[1]); + else + fprintf(fd, srationalfmt, sep, + (double)lp[0] / (double)lp[1]); + sep = " "; + lp += 2; + } + break; + } + case TIFF_FLOAT: { + register float *fp = (float *)data; + while (count-- > 0) + fprintf(fd, floatfmt, sep, *fp++), sep = " "; + break; + } + case TIFF_DOUBLE: { + register double *dp = (double *)data; + while (count-- > 0) + fprintf(fd, doublefmt, sep, *dp++), sep = " "; + break; + } + } +} + +/* + * Fetch a contiguous directory item. + */ +static int +TIFFFetchData(int fd, TIFFDirEntry* dir, void* cp) +{ + int cc, w; + + w = (dir->tdir_type < NWIDTHS ? datawidth[dir->tdir_type] : 0); + cc = dir->tdir_count * w; + if (lseek(fd, (off_t) dir->tdir_offset, 0) == dir->tdir_offset && + read(fd, cp, cc) == cc) { + if (swabflag) { + switch (dir->tdir_type) { + case TIFF_SHORT: + case TIFF_SSHORT: + TIFFSwabArrayOfShort((uint16*) cp, + dir->tdir_count); + break; + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_FLOAT: + TIFFSwabArrayOfLong((uint32*) cp, + dir->tdir_count); + break; + case TIFF_RATIONAL: + TIFFSwabArrayOfLong((uint32*) cp, + 2*dir->tdir_count); + break; + case TIFF_DOUBLE: + TIFFSwabArrayOfDouble((double*) cp, + dir->tdir_count); + break; + } + } + return (cc); + } + Error("Error while reading data for tag %u", dir->tdir_tag); + return (0); +} + +static void +ReadError(char* what) +{ + Fatal("Error while reading %s", what); +} + +#include + +static void +vError(FILE* fd, const char* fmt, va_list ap) +{ + fprintf(fd, "%s: ", curfile); + vfprintf(fd, fmt, ap); + fprintf(fd, ".\n"); +} + +static void +Error(const char* fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vError(stderr, fmt, ap); + va_end(ap); +} + +static void +Fatal(const char* fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vError(stderr, fmt, ap); + va_end(ap); + exit(-1); +} diff --git a/tools/tiffinfo.c b/tools/tiffinfo.c new file mode 100755 index 0000000..11fd990 --- /dev/null +++ b/tools/tiffinfo.c @@ -0,0 +1,429 @@ +/* $Header: /home/cvsroot/libtiff/tools/tiffinfo.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include + +#include "tiffio.h" + +#define streq(a,b) (strcmp(a,b) == 0) + +int showdata = 0; /* show data */ +int rawdata = 0; /* show raw/decoded data */ +int showwords = 0; /* show data as bytes/words */ +int readdata = 0; /* read data in file */ +int stoponerr = 1; /* stop on first read error */ + +static void usage(void); +static void tiffinfo(TIFF*, uint16, long); + +int +main(int argc, char* argv[]) +{ + int dirnum = -1, multiplefiles, c; + uint16 order = 0; + TIFF* tif; + extern int optind; + extern char* optarg; + long flags = 0; + uint32 diroff = 0; + int chopstrips = 0; /* disable strip chopping */ + + while ((c = getopt(argc, argv, "f:o:cdDSjlmrsvwz0123456789")) != -1) + switch (c) { + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + case '8': case '9': + dirnum = atoi(&argv[optind-1][1]); + break; + case 'd': + showdata++; + /* fall thru... */ + case 'D': + readdata++; + break; + case 'c': + flags |= TIFFPRINT_COLORMAP | TIFFPRINT_CURVES; + break; + case 'f': /* fill order */ + if (streq(optarg, "lsb2msb")) + order = FILLORDER_LSB2MSB; + else if (streq(optarg, "msb2lsb")) + order = FILLORDER_MSB2LSB; + else + usage(); + break; + case 'i': + stoponerr = 0; + break; + case 'o': + diroff = strtoul(optarg, NULL, 0); + break; + case 'j': + flags |= TIFFPRINT_JPEGQTABLES | + TIFFPRINT_JPEGACTABLES | + TIFFPRINT_JPEGDCTABLES; + break; + case 'r': + rawdata = 1; + break; + case 's': + flags |= TIFFPRINT_STRIPS; + break; + case 'w': + showwords = 1; + break; + case 'z': + chopstrips = 1; + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (optind >= argc) + usage(); + multiplefiles = (argc - optind > 1); + for (; optind < argc; optind++) { + if (multiplefiles) + printf("%s:\n", argv[optind]); + tif = TIFFOpen(argv[optind], chopstrips ? "rC" : "rc"); + if (tif != NULL) { + if (dirnum != -1) { + if (TIFFSetDirectory(tif, dirnum)) + tiffinfo(tif, order, flags); + } else if (diroff != 0) { + if (TIFFSetSubDirectory(tif, diroff)) + tiffinfo(tif, order, flags); + } else { + do + tiffinfo(tif, order, flags); + while (TIFFReadDirectory(tif)); + } + TIFFClose(tif); + } + } + return (0); +} + +char* stuff[] = { +"usage: tiffinfo [options] input...", +"where options are:", +" -D read data", +" -i ignore read errors", +" -c display data for grey/color response curve or colormap", +" -d display raw/decoded image data", +" -f lsb2msb force lsb-to-msb FillOrder for input", +" -f msb2lsb force msb-to-lsb FillOrder for input", +" -j show JPEG tables", +" -o offset set initial directory offset", +" -r read/display raw image data instead of decoded data", +" -s display strip offsets and byte counts", +" -w display raw data in words rather than bytes", +" -z enable strip chopping", +" -# set initial directory (first directory is # 0)", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} + +static void +ShowStrip(tstrip_t strip, unsigned char* pp, uint32 nrow, tsize_t scanline) +{ + register tsize_t cc; + + printf("Strip %lu:\n", (unsigned long) strip); + while (nrow-- > 0) { + for (cc = 0; cc < scanline; cc++) { + printf(" %02x", *pp++); + if (((cc+1) % 24) == 0) + putchar('\n'); + } + putchar('\n'); + } +} + +void +TIFFReadContigStripData(TIFF* tif) +{ + unsigned char *buf; + tsize_t scanline = TIFFScanlineSize(tif); + + buf = (unsigned char *)_TIFFmalloc(TIFFStripSize(tif)); + if (buf) { + uint32 row, h; + uint32 rowsperstrip = (uint32)-1; + + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); + TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + for (row = 0; row < h; row += rowsperstrip) { + uint32 nrow = (row+rowsperstrip > h ? + h-row : rowsperstrip); + tstrip_t strip = TIFFComputeStrip(tif, row, 0); + if (TIFFReadEncodedStrip(tif, strip, buf, nrow*scanline) < 0) { + if (stoponerr) + break; + } else if (showdata) + ShowStrip(strip, buf, nrow, scanline); + } + _TIFFfree(buf); + } +} + +void +TIFFReadSeparateStripData(TIFF* tif) +{ + unsigned char *buf; + tsize_t scanline = TIFFScanlineSize(tif); + + buf = (unsigned char *)_TIFFmalloc(TIFFStripSize(tif)); + if (buf) { + uint32 row, h; + uint32 rowsperstrip = (uint32)-1; + tsample_t s, samplesperpixel; + + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); + TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel); + for (row = 0; row < h; row += rowsperstrip) { + for (s = 0; s < samplesperpixel; s++) { + uint32 nrow = (row+rowsperstrip > h ? + h-row : rowsperstrip); + tstrip_t strip = TIFFComputeStrip(tif, row, s); + if (TIFFReadEncodedStrip(tif, strip, buf, nrow*scanline) < 0) { + if (stoponerr) + break; + } else if (showdata) + ShowStrip(strip, buf, nrow, scanline); + } + } + _TIFFfree(buf); + } +} + +static void +ShowTile(uint32 row, uint32 col, tsample_t sample, + unsigned char* pp, uint32 nrow, uint32 rowsize) +{ + register tsize_t cc; + + printf("Tile (%lu,%lu", (unsigned long) row, (unsigned long) col); + if (sample != (tsample_t) -1) + printf(",%u", sample); + printf("):\n"); + while (nrow-- > 0) { + for (cc = 0; cc < rowsize; cc++) { + printf(" %02x", *pp++); + if (((cc+1) % 24) == 0) + putchar('\n'); + } + putchar('\n'); + } +} + +void +TIFFReadContigTileData(TIFF* tif) +{ + unsigned char *buf; + tsize_t rowsize = TIFFTileRowSize(tif); + + buf = (unsigned char *)_TIFFmalloc(TIFFTileSize(tif)); + if (buf) { + uint32 tw, th, w, h; + uint32 row, col; + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); + TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw); + TIFFGetField(tif, TIFFTAG_TILELENGTH, &th); + for (row = 0; row < h; row += th) { + for (col = 0; col < w; col += tw) { + if (TIFFReadTile(tif, buf, col, row, 0, 0) < 0) { + if (stoponerr) + break; + } else if (showdata) + ShowTile(row, col, (tsample_t) -1, buf, th, rowsize); + } + } + _TIFFfree(buf); + } +} + +void +TIFFReadSeparateTileData(TIFF* tif) +{ + unsigned char *buf; + tsize_t rowsize = TIFFTileRowSize(tif); + + buf = (unsigned char *)_TIFFmalloc(TIFFTileSize(tif)); + if (buf) { + uint32 tw, th, w, h; + uint32 row, col; + tsample_t s, samplesperpixel; + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); + TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tw); + TIFFGetField(tif, TIFFTAG_TILELENGTH, &th); + TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel); + for (row = 0; row < h; row += th) { + for (col = 0; col < w; col += tw) { + for (s = 0; s < samplesperpixel; s++) { + if (TIFFReadTile(tif, buf, col, row, 0, s) < 0) { + if (stoponerr) + break; + } else if (showdata) + ShowTile(row, col, s, buf, th, rowsize); + } + } + } + _TIFFfree(buf); + } +} + +void +TIFFReadData(TIFF* tif) +{ + uint16 config; + + TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &config); + if (TIFFIsTiled(tif)) { + if (config == PLANARCONFIG_CONTIG) + TIFFReadContigTileData(tif); + else + TIFFReadSeparateTileData(tif); + } else { + if (config == PLANARCONFIG_CONTIG) + TIFFReadContigStripData(tif); + else + TIFFReadSeparateStripData(tif); + } +} + +static void +ShowRawBytes(unsigned char* pp, uint32 n) +{ + tsize_t i; + + for (i = 0; i < n; i++) { + printf(" %02x", *pp++); + if (((i+1) % 24) == 0) + printf("\n "); + } + putchar('\n'); +} + +static void +ShowRawWords(uint16* pp, uint32 n) +{ + tsize_t i; + + for (i = 0; i < n; i++) { + printf(" %04x", *pp++); + if (((i+1) % 15) == 0) + printf("\n "); + } + putchar('\n'); +} + +void +TIFFReadRawData(TIFF* tif, int bitrev) +{ + tstrip_t nstrips = TIFFNumberOfStrips(tif); + const char* what = TIFFIsTiled(tif) ? "Tile" : "Strip"; + uint32* stripbc; + + TIFFGetField(tif, TIFFTAG_STRIPBYTECOUNTS, &stripbc); + if (nstrips > 0) { + tsize_t bufsize = stripbc[0]; + tdata_t buf = _TIFFmalloc(bufsize); + tstrip_t s; + + for (s = 0; s < nstrips; s++) { + if (stripbc[s] > bufsize) { + buf = _TIFFrealloc(buf, stripbc[s]); + bufsize = stripbc[s]; + } + if (buf == NULL) { + fprintf(stderr, + "Cannot allocate buffer to read strip %lu\n", + (unsigned long) s); + break; + } + if (TIFFReadRawStrip(tif, s, buf, stripbc[s]) < 0) { + fprintf(stderr, "Error reading strip %lu\n", + (unsigned long) s); + if (stoponerr) + break; + } else if (showdata) { + if (bitrev) { + TIFFReverseBits(buf, stripbc[s]); + printf("%s %lu: (bit reversed)\n ", + what, (unsigned long) s); + } else + printf("%s %lu:\n ", what, + (unsigned long) s); + if (showwords) + ShowRawWords((uint16*) buf, stripbc[s]>>1); + else + ShowRawBytes((unsigned char*) buf, stripbc[s]); + } + } + if (buf != NULL) + _TIFFfree(buf); + } +} + +static void +tiffinfo(TIFF* tif, uint16 order, long flags) +{ + TIFFPrintDirectory(tif, stdout, flags); + if (!readdata) + return; + if (rawdata) { + if (order) { + uint16 o; + TIFFGetFieldDefaulted(tif, + TIFFTAG_FILLORDER, &o); + TIFFReadRawData(tif, o != order); + } else + TIFFReadRawData(tif, 0); + } else { + if (order) + TIFFSetField(tif, TIFFTAG_FILLORDER, order); + TIFFReadData(tif); + } +} diff --git a/tools/tiffmedian.c b/tools/tiffmedian.c new file mode 100755 index 0000000..b6a65c7 --- /dev/null +++ b/tools/tiffmedian.c @@ -0,0 +1,890 @@ +/* $Header: /home/cvsroot/libtiff/tools/tiffmedian.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Apply median cut on an image. + * + * tiffmedian [-c n] [-f] input output + * -C n - set colortable size. Default is 256. + * -f - use Floyd-Steinberg dithering. + * -c lzw - compress output with LZW + * (no longer supported by default due to unisys patent enforcement) + * -c none - use no compression on output + * -c packbits - use packbits compression on output + * -r n - create output with n rows/strip of data + * (by default the compression scheme and rows/strip are taken + * from the input file) + * + * Notes: + * + * [1] Floyd-Steinberg dither: + * I should point out that the actual fractions we used were, assuming + * you are at X, moving left to right: + * + * X 7/16 + * 3/16 5/16 1/16 + * + * Note that the error goes to four neighbors, not three. I think this + * will probably do better (at least for black and white) than the + * 3/8-3/8-1/4 distribution, at the cost of greater processing. I have + * seen the 3/8-3/8-1/4 distribution described as "our" algorithm before, + * but I have no idea who the credit really belongs to. + + * Also, I should add that if you do zig-zag scanning (see my immediately + * previous message), it is sufficient (but not quite as good) to send + * half the error one pixel ahead (e.g. to the right on lines you scan + * left to right), and half one pixel straight down. Again, this is for + * black and white; I've not tried it with color. + * -- + * Lou Steinberg + * + * [2] Color Image Quantization for Frame Buffer Display, Paul Heckbert, + * Siggraph '82 proceedings, pp. 297-307 + */ + +#include +#include +#include + +#include "tiffio.h" + +#define MAX_CMAP_SIZE 256 + +#define streq(a,b) (strcmp(a,b) == 0) +#define strneq(a,b,n) (strncmp(a,b,n) == 0) + +#define COLOR_DEPTH 8 +#define MAX_COLOR 256 + +#define B_DEPTH 5 /* # bits/pixel to use */ +#define B_LEN (1L< MAX_CMAP_SIZE) { + fprintf(stderr, + "-c: colormap too big, max %d\n", + MAX_CMAP_SIZE); + usage(); + } + break; + case 'f': /* dither */ + dither = 1; + break; + case 'r': /* rows/strip */ + rowsperstrip = atoi(optarg); + break; + case '?': + usage(); + /*NOTREACHED*/ + } + if (argc - optind != 2) + usage(); + in = TIFFOpen(argv[optind], "r"); + if (in == NULL) + return (-1); + TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &imagewidth); + TIFFGetField(in, TIFFTAG_IMAGELENGTH, &imagelength); + TIFFGetField(in, TIFFTAG_BITSPERSAMPLE, &bitspersample); + TIFFGetField(in, TIFFTAG_SAMPLESPERPIXEL, &samplesperpixel); + if (bitspersample != 8 && bitspersample != 16) { + fprintf(stderr, "%s: Image must have at least 8-bits/sample\n", + argv[optind]); + return (-3); + } + if (!TIFFGetField(in, TIFFTAG_PHOTOMETRIC, &photometric) || + photometric != PHOTOMETRIC_RGB || samplesperpixel < 3) { + fprintf(stderr, "%s: Image must have RGB data\n", argv[optind]); + return (-4); + } + TIFFGetField(in, TIFFTAG_PLANARCONFIG, &config); + if (config != PLANARCONFIG_CONTIG) { + fprintf(stderr, "%s: Can only handle contiguous data packing\n", + argv[optind]); + return (-5); + } + + /* + * STEP 1: create empty boxes + */ + usedboxes = NULL; + box_list = freeboxes = (Colorbox *)_TIFFmalloc(num_colors*sizeof (Colorbox)); + freeboxes[0].next = &freeboxes[1]; + freeboxes[0].prev = NULL; + for (i = 1; i < num_colors-1; ++i) { + freeboxes[i].next = &freeboxes[i+1]; + freeboxes[i].prev = &freeboxes[i-1]; + } + freeboxes[num_colors-1].next = NULL; + freeboxes[num_colors-1].prev = &freeboxes[num_colors-2]; + + /* + * STEP 2: get histogram, initialize first box + */ + ptr = freeboxes; + freeboxes = ptr->next; + if (freeboxes) + freeboxes->prev = NULL; + ptr->next = usedboxes; + usedboxes = ptr; + if (ptr->next) + ptr->next->prev = ptr; + get_histogram(in, ptr); + + /* + * STEP 3: continually subdivide boxes until no more free + * boxes remain or until all colors assigned. + */ + while (freeboxes != NULL) { + ptr = largest_box(); + if (ptr != NULL) + splitbox(ptr); + else + freeboxes = NULL; + } + + /* + * STEP 4: assign colors to all boxes + */ + for (i = 0, ptr = usedboxes; ptr != NULL; ++i, ptr = ptr->next) { + rm[i] = ((ptr->rmin + ptr->rmax) << COLOR_SHIFT) / 2; + gm[i] = ((ptr->gmin + ptr->gmax) << COLOR_SHIFT) / 2; + bm[i] = ((ptr->bmin + ptr->bmax) << COLOR_SHIFT) / 2; + } + + /* We're done with the boxes now */ + _TIFFfree(box_list); + freeboxes = usedboxes = NULL; + + /* + * STEP 5: scan histogram and map all values to closest color + */ + /* 5a: create cell list as described in Heckbert[2] */ + ColorCells = (C_cell **)_TIFFmalloc(C_LEN*C_LEN*C_LEN*sizeof (C_cell*)); + _TIFFmemset(ColorCells, 0, C_LEN*C_LEN*C_LEN*sizeof (C_cell*)); + /* 5b: create mapping from truncated pixel space to color + table entries */ + map_colortable(); + + /* + * STEP 6: scan image, match input values to table entries + */ + out = TIFFOpen(argv[optind+1], "w"); + if (out == NULL) + return (-2); + + CopyField(TIFFTAG_SUBFILETYPE, longv); + CopyField(TIFFTAG_IMAGEWIDTH, longv); + TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, (short)COLOR_DEPTH); + if (compression != (uint16)-1) { + TIFFSetField(out, TIFFTAG_COMPRESSION, compression); + switch (compression) { + case COMPRESSION_LZW: + case COMPRESSION_DEFLATE: + if (predictor != 0) + TIFFSetField(out, TIFFTAG_PREDICTOR, predictor); + break; + } + } else + CopyField(TIFFTAG_COMPRESSION, compression); + TIFFSetField(out, TIFFTAG_PHOTOMETRIC, (short)PHOTOMETRIC_PALETTE); + CopyField(TIFFTAG_ORIENTATION, shortv); + TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, (short)1); + CopyField(TIFFTAG_PLANARCONFIG, shortv); + TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, + TIFFDefaultStripSize(out, rowsperstrip)); + CopyField(TIFFTAG_MINSAMPLEVALUE, shortv); + CopyField(TIFFTAG_MAXSAMPLEVALUE, shortv); + CopyField(TIFFTAG_RESOLUTIONUNIT, shortv); + CopyField(TIFFTAG_XRESOLUTION, floatv); + CopyField(TIFFTAG_YRESOLUTION, floatv); + CopyField(TIFFTAG_XPOSITION, floatv); + CopyField(TIFFTAG_YPOSITION, floatv); + + if (dither) + quant_fsdither(in, out); + else + quant(in, out); + /* + * Scale colormap to TIFF-required 16-bit values. + */ +#define SCALE(x) (((x)*((1L<<16)-1))/255) + for (i = 0; i < MAX_CMAP_SIZE; ++i) { + rm[i] = SCALE(rm[i]); + gm[i] = SCALE(gm[i]); + bm[i] = SCALE(bm[i]); + } + TIFFSetField(out, TIFFTAG_COLORMAP, rm, gm, bm); + (void) TIFFClose(out); + return (0); +} + +static int +processCompressOptions(char* opt) +{ + if (streq(opt, "none")) + compression = COMPRESSION_NONE; + else if (streq(opt, "packbits")) + compression = COMPRESSION_PACKBITS; + else if (strneq(opt, "lzw", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_LZW; + } else if (strneq(opt, "zip", 3)) { + char* cp = strchr(opt, ':'); + if (cp) + predictor = atoi(cp+1); + compression = COMPRESSION_DEFLATE; + } else + return (0); + return (1); +} + +char* stuff[] = { +"usage: tiffmedian [options] input.tif output.tif", +"where options are:", +" -r # make each strip have no more than # rows", +" -C # create a colormap with # entries", +" -f use Floyd-Steinberg dithering", +" -c lzw[:opts] compress output with Lempel-Ziv & Welch encoding", +" (no longer supported by default due to Unisys patent enforcement)", +" -c zip[:opts] compress output with deflate encoding", +" -c packbits compress output with packbits encoding", +" -c none use no compression algorithm on output", +"", +"LZW and deflate options:", +" # set predictor value", +"For example, -c lzw:2 to get LZW-encoded data with horizontal differencing", +NULL +}; + +static void +usage(void) +{ + char buf[BUFSIZ]; + int i; + + setbuf(stderr, buf); + for (i = 0; stuff[i] != NULL; i++) + fprintf(stderr, "%s\n", stuff[i]); + exit(-1); +} + +static void +get_histogram(TIFF* in, Colorbox* box) +{ + register unsigned char *inptr; + register int red, green, blue; + register uint32 j, i; + unsigned char *inputline; + + inputline = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(in)); + if (inputline == NULL) { + fprintf(stderr, "No space for scanline buffer\n"); + exit(-1); + } + box->rmin = box->gmin = box->bmin = 999; + box->rmax = box->gmax = box->bmax = -1; + box->total = imagewidth * imagelength; + + { register int *ptr = &histogram[0][0][0]; + for (i = B_LEN*B_LEN*B_LEN; i-- > 0;) + *ptr++ = 0; + } + for (i = 0; i < imagelength; i++) { + if (TIFFReadScanline(in, inputline, i, 0) <= 0) + break; + inptr = inputline; + for (j = imagewidth; j-- > 0;) { + red = *inptr++ >> COLOR_SHIFT; + green = *inptr++ >> COLOR_SHIFT; + blue = *inptr++ >> COLOR_SHIFT; + if (red < box->rmin) + box->rmin = red; + if (red > box->rmax) + box->rmax = red; + if (green < box->gmin) + box->gmin = green; + if (green > box->gmax) + box->gmax = green; + if (blue < box->bmin) + box->bmin = blue; + if (blue > box->bmax) + box->bmax = blue; + histogram[red][green][blue]++; + } + } + _TIFFfree(inputline); +} + +static Colorbox * +largest_box(void) +{ + register Colorbox *p, *b; + register int size; + + b = NULL; + size = -1; + for (p = usedboxes; p != NULL; p = p->next) + if ((p->rmax > p->rmin || p->gmax > p->gmin || + p->bmax > p->bmin) && p->total > size) + size = (b = p)->total; + return (b); +} + +static void +splitbox(Colorbox* ptr) +{ + int hist2[B_LEN]; + int first, last; + register Colorbox *new; + register int *iptr, *histp; + register int i, j; + register int ir,ig,ib; + register int sum, sum1, sum2; + enum { RED, GREEN, BLUE } axis; + + /* + * See which axis is the largest, do a histogram along that + * axis. Split at median point. Contract both new boxes to + * fit points and return + */ + i = ptr->rmax - ptr->rmin; + if (i >= ptr->gmax - ptr->gmin && i >= ptr->bmax - ptr->bmin) + axis = RED; + else if (ptr->gmax - ptr->gmin >= ptr->bmax - ptr->bmin) + axis = GREEN; + else + axis = BLUE; + /* get histogram along longest axis */ + switch (axis) { + case RED: + histp = &hist2[ptr->rmin]; + for (ir = ptr->rmin; ir <= ptr->rmax; ++ir) { + *histp = 0; + for (ig = ptr->gmin; ig <= ptr->gmax; ++ig) { + iptr = &histogram[ir][ig][ptr->bmin]; + for (ib = ptr->bmin; ib <= ptr->bmax; ++ib) + *histp += *iptr++; + } + histp++; + } + first = ptr->rmin; + last = ptr->rmax; + break; + case GREEN: + histp = &hist2[ptr->gmin]; + for (ig = ptr->gmin; ig <= ptr->gmax; ++ig) { + *histp = 0; + for (ir = ptr->rmin; ir <= ptr->rmax; ++ir) { + iptr = &histogram[ir][ig][ptr->bmin]; + for (ib = ptr->bmin; ib <= ptr->bmax; ++ib) + *histp += *iptr++; + } + histp++; + } + first = ptr->gmin; + last = ptr->gmax; + break; + case BLUE: + histp = &hist2[ptr->bmin]; + for (ib = ptr->bmin; ib <= ptr->bmax; ++ib) { + *histp = 0; + for (ir = ptr->rmin; ir <= ptr->rmax; ++ir) { + iptr = &histogram[ir][ptr->gmin][ib]; + for (ig = ptr->gmin; ig <= ptr->gmax; ++ig) { + *histp += *iptr; + iptr += B_LEN; + } + } + histp++; + } + first = ptr->bmin; + last = ptr->bmax; + break; + } + /* find median point */ + sum2 = ptr->total / 2; + histp = &hist2[first]; + sum = 0; + for (i = first; i <= last && (sum += *histp++) < sum2; ++i) + ; + if (i == first) + i++; + + /* Create new box, re-allocate points */ + new = freeboxes; + freeboxes = new->next; + if (freeboxes) + freeboxes->prev = NULL; + if (usedboxes) + usedboxes->prev = new; + new->next = usedboxes; + usedboxes = new; + + histp = &hist2[first]; + for (sum1 = 0, j = first; j < i; j++) + sum1 += *histp++; + for (sum2 = 0, j = i; j <= last; j++) + sum2 += *histp++; + new->total = sum1; + ptr->total = sum2; + + new->rmin = ptr->rmin; + new->rmax = ptr->rmax; + new->gmin = ptr->gmin; + new->gmax = ptr->gmax; + new->bmin = ptr->bmin; + new->bmax = ptr->bmax; + switch (axis) { + case RED: + new->rmax = i-1; + ptr->rmin = i; + break; + case GREEN: + new->gmax = i-1; + ptr->gmin = i; + break; + case BLUE: + new->bmax = i-1; + ptr->bmin = i; + break; + } + shrinkbox(new); + shrinkbox(ptr); +} + +static void +shrinkbox(Colorbox* box) +{ + register int *histp, ir, ig, ib; + + if (box->rmax > box->rmin) { + for (ir = box->rmin; ir <= box->rmax; ++ir) + for (ig = box->gmin; ig <= box->gmax; ++ig) { + histp = &histogram[ir][ig][box->bmin]; + for (ib = box->bmin; ib <= box->bmax; ++ib) + if (*histp++ != 0) { + box->rmin = ir; + goto have_rmin; + } + } + have_rmin: + if (box->rmax > box->rmin) + for (ir = box->rmax; ir >= box->rmin; --ir) + for (ig = box->gmin; ig <= box->gmax; ++ig) { + histp = &histogram[ir][ig][box->bmin]; + ib = box->bmin; + for (; ib <= box->bmax; ++ib) + if (*histp++ != 0) { + box->rmax = ir; + goto have_rmax; + } + } + } +have_rmax: + if (box->gmax > box->gmin) { + for (ig = box->gmin; ig <= box->gmax; ++ig) + for (ir = box->rmin; ir <= box->rmax; ++ir) { + histp = &histogram[ir][ig][box->bmin]; + for (ib = box->bmin; ib <= box->bmax; ++ib) + if (*histp++ != 0) { + box->gmin = ig; + goto have_gmin; + } + } + have_gmin: + if (box->gmax > box->gmin) + for (ig = box->gmax; ig >= box->gmin; --ig) + for (ir = box->rmin; ir <= box->rmax; ++ir) { + histp = &histogram[ir][ig][box->bmin]; + ib = box->bmin; + for (; ib <= box->bmax; ++ib) + if (*histp++ != 0) { + box->gmax = ig; + goto have_gmax; + } + } + } +have_gmax: + if (box->bmax > box->bmin) { + for (ib = box->bmin; ib <= box->bmax; ++ib) + for (ir = box->rmin; ir <= box->rmax; ++ir) { + histp = &histogram[ir][box->gmin][ib]; + for (ig = box->gmin; ig <= box->gmax; ++ig) { + if (*histp != 0) { + box->bmin = ib; + goto have_bmin; + } + histp += B_LEN; + } + } + have_bmin: + if (box->bmax > box->bmin) + for (ib = box->bmax; ib >= box->bmin; --ib) + for (ir = box->rmin; ir <= box->rmax; ++ir) { + histp = &histogram[ir][box->gmin][ib]; + ig = box->gmin; + for (; ig <= box->gmax; ++ig) { + if (*histp != 0) { + box->bmax = ib; + goto have_bmax; + } + histp += B_LEN; + } + } + } +have_bmax: + ; +} + +static C_cell * +create_colorcell(int red, int green, int blue) +{ + register int ir, ig, ib, i; + register C_cell *ptr; + int mindist, next_n; + register int tmp, dist, n; + + ir = red >> (COLOR_DEPTH-C_DEPTH); + ig = green >> (COLOR_DEPTH-C_DEPTH); + ib = blue >> (COLOR_DEPTH-C_DEPTH); + ptr = (C_cell *)_TIFFmalloc(sizeof (C_cell)); + *(ColorCells + ir*C_LEN*C_LEN + ig*C_LEN + ib) = ptr; + ptr->num_ents = 0; + + /* + * Step 1: find all colors inside this cell, while we're at + * it, find distance of centermost point to furthest corner + */ + mindist = 99999999; + for (i = 0; i < num_colors; ++i) { + if (rm[i]>>(COLOR_DEPTH-C_DEPTH) != ir || + gm[i]>>(COLOR_DEPTH-C_DEPTH) != ig || + bm[i]>>(COLOR_DEPTH-C_DEPTH) != ib) + continue; + ptr->entries[ptr->num_ents][0] = i; + ptr->entries[ptr->num_ents][1] = 0; + ++ptr->num_ents; + tmp = rm[i] - red; + if (tmp < (MAX_COLOR/C_LEN/2)) + tmp = MAX_COLOR/C_LEN-1 - tmp; + dist = tmp*tmp; + tmp = gm[i] - green; + if (tmp < (MAX_COLOR/C_LEN/2)) + tmp = MAX_COLOR/C_LEN-1 - tmp; + dist += tmp*tmp; + tmp = bm[i] - blue; + if (tmp < (MAX_COLOR/C_LEN/2)) + tmp = MAX_COLOR/C_LEN-1 - tmp; + dist += tmp*tmp; + if (dist < mindist) + mindist = dist; + } + + /* + * Step 3: find all points within that distance to cell. + */ + for (i = 0; i < num_colors; ++i) { + if (rm[i] >> (COLOR_DEPTH-C_DEPTH) == ir && + gm[i] >> (COLOR_DEPTH-C_DEPTH) == ig && + bm[i] >> (COLOR_DEPTH-C_DEPTH) == ib) + continue; + dist = 0; + if ((tmp = red - rm[i]) > 0 || + (tmp = rm[i] - (red + MAX_COLOR/C_LEN-1)) > 0 ) + dist += tmp*tmp; + if ((tmp = green - gm[i]) > 0 || + (tmp = gm[i] - (green + MAX_COLOR/C_LEN-1)) > 0 ) + dist += tmp*tmp; + if ((tmp = blue - bm[i]) > 0 || + (tmp = bm[i] - (blue + MAX_COLOR/C_LEN-1)) > 0 ) + dist += tmp*tmp; + if (dist < mindist) { + ptr->entries[ptr->num_ents][0] = i; + ptr->entries[ptr->num_ents][1] = dist; + ++ptr->num_ents; + } + } + + /* + * Sort color cells by distance, use cheap exchange sort + */ + for (n = ptr->num_ents - 1; n > 0; n = next_n) { + next_n = 0; + for (i = 0; i < n; ++i) + if (ptr->entries[i][1] > ptr->entries[i+1][1]) { + tmp = ptr->entries[i][0]; + ptr->entries[i][0] = ptr->entries[i+1][0]; + ptr->entries[i+1][0] = tmp; + tmp = ptr->entries[i][1]; + ptr->entries[i][1] = ptr->entries[i+1][1]; + ptr->entries[i+1][1] = tmp; + next_n = i; + } + } + return (ptr); +} + +static void +map_colortable(void) +{ + register int *histp = &histogram[0][0][0]; + register C_cell *cell; + register int j, tmp, d2, dist; + int ir, ig, ib, i; + + for (ir = 0; ir < B_LEN; ++ir) + for (ig = 0; ig < B_LEN; ++ig) + for (ib = 0; ib < B_LEN; ++ib, histp++) { + if (*histp == 0) { + *histp = -1; + continue; + } + cell = *(ColorCells + + (((ir>>(B_DEPTH-C_DEPTH)) << C_DEPTH*2) + + ((ig>>(B_DEPTH-C_DEPTH)) << C_DEPTH) + + (ib>>(B_DEPTH-C_DEPTH)))); + if (cell == NULL ) + cell = create_colorcell( + ir << COLOR_SHIFT, + ig << COLOR_SHIFT, + ib << COLOR_SHIFT); + dist = 9999999; + for (i = 0; i < cell->num_ents && + dist > cell->entries[i][1]; ++i) { + j = cell->entries[i][0]; + d2 = rm[j] - (ir << COLOR_SHIFT); + d2 *= d2; + tmp = gm[j] - (ig << COLOR_SHIFT); + d2 += tmp*tmp; + tmp = bm[j] - (ib << COLOR_SHIFT); + d2 += tmp*tmp; + if (d2 < dist) { + dist = d2; + *histp = j; + } + } + } +} + +/* + * straight quantization. Each pixel is mapped to the colors + * closest to it. Color values are rounded to the nearest color + * table entry. + */ +static void +quant(TIFF* in, TIFF* out) +{ + unsigned char *outline, *inputline; + register unsigned char *outptr, *inptr; + register uint32 i, j; + register int red, green, blue; + + inputline = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(in)); + outline = (unsigned char *)_TIFFmalloc(imagewidth); + for (i = 0; i < imagelength; i++) { + if (TIFFReadScanline(in, inputline, i, 0) <= 0) + break; + inptr = inputline; + outptr = outline; + for (j = 0; j < imagewidth; j++) { + red = *inptr++ >> COLOR_SHIFT; + green = *inptr++ >> COLOR_SHIFT; + blue = *inptr++ >> COLOR_SHIFT; + *outptr++ = histogram[red][green][blue]; + } + if (TIFFWriteScanline(out, outline, i, 0) < 0) + break; + } + _TIFFfree(inputline); + _TIFFfree(outline); +} + +#define SWAP(type,a,b) { type p; p = a; a = b; b = p; } + +#define GetInputLine(tif, row, bad) \ + if (TIFFReadScanline(tif, inputline, row, 0) <= 0) \ + bad; \ + inptr = inputline; \ + nextptr = nextline; \ + for (j = 0; j < imagewidth; ++j) { \ + *nextptr++ = *inptr++; \ + *nextptr++ = *inptr++; \ + *nextptr++ = *inptr++; \ + } +#define GetComponent(raw, cshift, c) \ + cshift = raw; \ + if (cshift < 0) \ + cshift = 0; \ + else if (cshift >= MAX_COLOR) \ + cshift = MAX_COLOR-1; \ + c = cshift; \ + cshift >>= COLOR_SHIFT; + +static void +quant_fsdither(TIFF* in, TIFF* out) +{ + unsigned char *outline, *inputline, *inptr; + short *thisline, *nextline; + register unsigned char *outptr; + register short *thisptr, *nextptr; + register uint32 i, j; + uint32 imax, jmax; + int lastline, lastpixel; + + imax = imagelength - 1; + jmax = imagewidth - 1; + inputline = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(in)); + thisline = (short *)_TIFFmalloc(imagewidth * 3 * sizeof (short)); + nextline = (short *)_TIFFmalloc(imagewidth * 3 * sizeof (short)); + outline = (unsigned char *) _TIFFmalloc(TIFFScanlineSize(out)); + + GetInputLine(in, 0, goto bad); /* get first line */ + for (i = 1; i <= imagelength; ++i) { + SWAP(short *, thisline, nextline); + lastline = (i >= imax); + if (i <= imax) + GetInputLine(in, i, break); + thisptr = thisline; + nextptr = nextline; + outptr = outline; + for (j = 0; j < imagewidth; ++j) { + int red, green, blue; + register int oval, r2, g2, b2; + + lastpixel = (j == jmax); + GetComponent(*thisptr++, r2, red); + GetComponent(*thisptr++, g2, green); + GetComponent(*thisptr++, b2, blue); + oval = histogram[r2][g2][b2]; + if (oval == -1) { + int ci; + register int cj, tmp, d2, dist; + register C_cell *cell; + + cell = *(ColorCells + + (((r2>>(B_DEPTH-C_DEPTH)) << C_DEPTH*2) + + ((g2>>(B_DEPTH-C_DEPTH)) << C_DEPTH ) + + (b2>>(B_DEPTH-C_DEPTH)))); + if (cell == NULL) + cell = create_colorcell(red, + green, blue); + dist = 9999999; + for (ci = 0; ci < cell->num_ents && dist > cell->entries[ci][1]; ++ci) { + cj = cell->entries[ci][0]; + d2 = (rm[cj] >> COLOR_SHIFT) - r2; + d2 *= d2; + tmp = (gm[cj] >> COLOR_SHIFT) - g2; + d2 += tmp*tmp; + tmp = (bm[cj] >> COLOR_SHIFT) - b2; + d2 += tmp*tmp; + if (d2 < dist) { + dist = d2; + oval = cj; + } + } + histogram[r2][g2][b2] = oval; + } + *outptr++ = oval; + red -= rm[oval]; + green -= gm[oval]; + blue -= bm[oval]; + if (!lastpixel) { + thisptr[0] += blue * 7 / 16; + thisptr[1] += green * 7 / 16; + thisptr[2] += red * 7 / 16; + } + if (!lastline) { + if (j != 0) { + nextptr[-3] += blue * 3 / 16; + nextptr[-2] += green * 3 / 16; + nextptr[-1] += red * 3 / 16; + } + nextptr[0] += blue * 5 / 16; + nextptr[1] += green * 5 / 16; + nextptr[2] += red * 5 / 16; + if (!lastpixel) { + nextptr[3] += blue / 16; + nextptr[4] += green / 16; + nextptr[5] += red / 16; + } + nextptr += 3; + } + } + if (TIFFWriteScanline(out, outline, i-1, 0) < 0) + break; + } +bad: + _TIFFfree(inputline); + _TIFFfree(thisline); + _TIFFfree(nextline); + _TIFFfree(outline); +} diff --git a/tools/tiffsplit.c b/tools/tiffsplit.c new file mode 100755 index 0000000..ef261c6 --- /dev/null +++ b/tools/tiffsplit.c @@ -0,0 +1,226 @@ +/* $Header: /home/cvsroot/libtiff/tools/tiffsplit.c,v 1.1.1.1 2000/06/24 19:10:16 tshead Exp $ */ + +/* + * Copyright (c) 1992-1997 Sam Leffler + * Copyright (c) 1992-1997 Silicon Graphics, Inc. + * + * 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. + */ + +#include +#include +#include + +#include "tiffio.h" + +#define streq(a,b) (strcmp(a,b) == 0) +#define CopyField(tag, v) \ + if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) +#define CopyField2(tag, v1, v2) \ + if (TIFFGetField(in, tag, &v1, &v2)) TIFFSetField(out, tag, v1, v2) +#define CopyField3(tag, v1, v2, v3) \ + if (TIFFGetField(in, tag, &v1, &v2, &v3)) TIFFSetField(out, tag, v1, v2, v3) + +static char fname[1024+1]; + +static int tiffcp(TIFF*, TIFF*); +static void newfilename(void); +static int cpStrips(TIFF*, TIFF*); +static int cpTiles(TIFF*, TIFF*); + +int +main(int argc, char* argv[]) +{ + TIFF *in, *out; + + if (argc < 2) { + fprintf(stderr, "usage: tiffsplit input.tif [prefix]\n"); + return (-3); + } + if (argc > 2) + strcpy(fname, argv[2]); + in = TIFFOpen(argv[1], "r"); + if (in != NULL) { + do { + char path[1024+1]; + newfilename(); + strcpy(path, fname); + strcat(path, ".tif"); + out = TIFFOpen(path, "w"); + if (out == NULL) + return (-2); + if (!tiffcp(in, out)) + return (-1); + TIFFClose(out); + } while (TIFFReadDirectory(in)); + (void) TIFFClose(in); + } + return (0); +} + +static void +newfilename(void) +{ + static int first = 1; + static long fnum; + static short defname; + static char *fpnt; + + if (first) { + if (fname[0]) { + fpnt = fname + strlen(fname); + defname = 0; + } else { + fname[0] = 'x'; + fpnt = fname + 1; + defname = 1; + } + first = 0; + } +#define MAXFILES 676 + if (fnum == MAXFILES) { + if (!defname || fname[0] == 'z') { + fprintf(stderr, "tiffsplit: too many files.\n"); + exit(1); + } + fname[0]++; + fnum = 0; + } + fpnt[0] = fnum / 26 + 'a'; + fpnt[1] = fnum % 26 + 'a'; + fnum++; +} + +static int +tiffcp(TIFF* in, TIFF* out) +{ + short bitspersample, samplesperpixel, shortv, *shortav; + uint32 w, l; + float floatv; + char *stringv; + uint32 longv; + + CopyField(TIFFTAG_SUBFILETYPE, longv); + CopyField(TIFFTAG_TILEWIDTH, w); + CopyField(TIFFTAG_TILELENGTH, l); + CopyField(TIFFTAG_IMAGEWIDTH, w); + CopyField(TIFFTAG_IMAGELENGTH, l); + CopyField(TIFFTAG_BITSPERSAMPLE, bitspersample); + CopyField(TIFFTAG_COMPRESSION, shortv); + CopyField(TIFFTAG_PREDICTOR, shortv); + CopyField(TIFFTAG_PHOTOMETRIC, shortv); + CopyField(TIFFTAG_THRESHHOLDING, shortv); + CopyField(TIFFTAG_FILLORDER, shortv); + CopyField(TIFFTAG_ORIENTATION, shortv); + CopyField(TIFFTAG_SAMPLESPERPIXEL, samplesperpixel); + CopyField(TIFFTAG_MINSAMPLEVALUE, shortv); + CopyField(TIFFTAG_MAXSAMPLEVALUE, shortv); + CopyField(TIFFTAG_XRESOLUTION, floatv); + CopyField(TIFFTAG_YRESOLUTION, floatv); + CopyField(TIFFTAG_GROUP3OPTIONS, longv); + CopyField(TIFFTAG_GROUP4OPTIONS, longv); + CopyField(TIFFTAG_RESOLUTIONUNIT, shortv); + CopyField(TIFFTAG_PLANARCONFIG, shortv); + CopyField(TIFFTAG_ROWSPERSTRIP, longv); + CopyField(TIFFTAG_XPOSITION, floatv); + CopyField(TIFFTAG_YPOSITION, floatv); + CopyField(TIFFTAG_IMAGEDEPTH, longv); + CopyField(TIFFTAG_TILEDEPTH, longv); + CopyField2(TIFFTAG_EXTRASAMPLES, shortv, shortav); + { uint16 *red, *green, *blue; + CopyField3(TIFFTAG_COLORMAP, red, green, blue); + } + { uint16 shortv2; + CopyField2(TIFFTAG_PAGENUMBER, shortv, shortv2); + } + CopyField(TIFFTAG_ARTIST, stringv); + CopyField(TIFFTAG_IMAGEDESCRIPTION, stringv); + CopyField(TIFFTAG_MAKE, stringv); + CopyField(TIFFTAG_MODEL, stringv); + CopyField(TIFFTAG_SOFTWARE, stringv); + CopyField(TIFFTAG_DATETIME, stringv); + CopyField(TIFFTAG_HOSTCOMPUTER, stringv); + CopyField(TIFFTAG_PAGENAME, stringv); + CopyField(TIFFTAG_DOCUMENTNAME, stringv); + if (TIFFIsTiled(in)) + return (cpTiles(in, out)); + else + return (cpStrips(in, out)); +} + +static int +cpStrips(TIFF* in, TIFF* out) +{ + tsize_t bufsize = TIFFStripSize(in); + unsigned char *buf = (unsigned char *)_TIFFmalloc(bufsize); + + if (buf) { + tstrip_t s, ns = TIFFNumberOfStrips(in); + uint32 *bytecounts; + + TIFFGetField(in, TIFFTAG_STRIPBYTECOUNTS, &bytecounts); + for (s = 0; s < ns; s++) { + if (bytecounts[s] > bufsize) { + buf = (unsigned char *)_TIFFrealloc(buf, bytecounts[s]); + if (!buf) + return (0); + bufsize = bytecounts[s]; + } + if (TIFFReadRawStrip(in, s, buf, bytecounts[s]) < 0 || + TIFFWriteRawStrip(out, s, buf, bytecounts[s]) < 0) { + _TIFFfree(buf); + return (0); + } + } + _TIFFfree(buf); + return (1); + } + return (0); +} + +static int +cpTiles(TIFF* in, TIFF* out) +{ + tsize_t bufsize = TIFFTileSize(in); + unsigned char *buf = (unsigned char *)_TIFFmalloc(bufsize); + + if (buf) { + ttile_t t, nt = TIFFNumberOfTiles(in); + uint32 *bytecounts; + + TIFFGetField(in, TIFFTAG_TILEBYTECOUNTS, &bytecounts); + for (t = 0; t < nt; t++) { + if (bytecounts[t] > bufsize) { + buf = (unsigned char *)_TIFFrealloc(buf, bytecounts[t]); + if (!buf) + return (0); + bufsize = bytecounts[t]; + } + if (TIFFReadRawTile(in, t, buf, bytecounts[t]) < 0 || + TIFFWriteRawTile(out, t, buf, bytecounts[t]) < 0) { + _TIFFfree(buf); + return (0); + } + } + _TIFFfree(buf); + return (1); + } + return (0); +} diff --git a/tools/ycbcr.c b/tools/ycbcr.c new file mode 100755 index 0000000..959825a --- /dev/null +++ b/tools/ycbcr.c @@ -0,0 +1,161 @@ +float ycbcrCoeffs[3] = { .299, .587, .114 }; +/* default coding range is CCIR Rec 601-1 with no headroom/footroom */ +unsigned long refBlackWhite[6] = { 0, 255, 128, 255, 128, 255 }; + +#define LumaRed ycbcrCoeffs[0] +#define LumaGreen ycbcrCoeffs[1] +#define LumaBlue ycbcrCoeffs[2] + +long eRtotal = 0; +long eGtotal = 0; +long eBtotal = 0; +long preveRtotal = 0; +long preveGtotal = 0; +long preveBtotal = 0; +unsigned long AbseRtotal = 0; +unsigned long AbseGtotal = 0; +unsigned long AbseBtotal = 0; +unsigned long eCodes = 0; +unsigned long preveCodes = 0; +unsigned long eBits = 0; +unsigned long preveBits = 0; + +static void setupLumaTables(); +static int abs(int v) { return (v < 0 ? -v : v); } +static double pct(int v,double range) { return (v*100. / range); } +static void check(int R, int G, int B); + +float D1, D2; +float D3, D4; +float D5, D6; + +int +main(int argc, char* argv) +{ + int R, G, B; + + if (argc > 1) { + refBlackWhite[0] = 16; + refBlackWhite[1] = 235; + refBlackWhite[2] = 128; + refBlackWhite[3] = 240; + refBlackWhite[4] = 128; + refBlackWhite[5] = 240; + } + D3 = 2 - 2*LumaRed; + D4 = 2 - 2*LumaBlue; + D1 = 1. / D3; + D2 = 1. / D4; + D5 = D3*LumaRed / LumaGreen; + D6 = D4*LumaBlue / LumaGreen; + setupLumaTables(); + for (R = 0; R < 256; R++) { + for (G = 0; G < 256; G++) + for (B = 0; B < 256; B++) + check(R, G, B); + printf("[%3u] c %u/%u b %u/%u (R %u/%d/%u G %u/%d/%u B %u/%d/%u)\n" + , R + , eCodes - preveCodes, eCodes + , eBits - preveBits, eBits + , abs(AbseRtotal - preveRtotal), eRtotal , AbseRtotal + , abs(AbseGtotal - preveGtotal), eGtotal , AbseGtotal + , abs(AbseBtotal - preveBtotal), eBtotal , AbseBtotal + ); + preveRtotal = AbseRtotal; + preveGtotal = AbseGtotal; + preveBtotal = AbseBtotal; + preveCodes = eCodes; + preveBits = eBits; + } + printf("%u total codes\n", 256*256*256); + printf("total error: %u codes %u bits (R %d/%u G %d/%u B %d/%u)\n" + , eCodes + , eBits + , eRtotal , AbseRtotal + , eGtotal , AbseGtotal + , eBtotal , AbseBtotal + ); + return (0); +} + +float *lumaRed; +float *lumaGreen; +float *lumaBlue; + +static float* +setupLuma(float c) +{ + float *v = (float *)_TIFFmalloc(256 * sizeof (float)); + int i; + for (i = 0; i < 256; i++) + v[i] = c * i; + return (v); +} + +static void +setupLumaTables(void) +{ + lumaRed = setupLuma(LumaRed); + lumaGreen = setupLuma(LumaGreen); + lumaBlue = setupLuma(LumaBlue); +} + +static unsigned +V2Code(float f, unsigned long RB, unsigned long RW, int CR) +{ + unsigned int c = (unsigned int)((((f)*(RW-RB)/CR)+RB)+.5); + return (c > 255 ? 255 : c); +} + +#define Code2V(c, RB, RW, CR) ((((c)-(int)RB)*(float)CR)/(float)(RW-RB)) + +#define CLAMP(f,min,max) \ + (int)((f)+.5 < (min) ? (min) : (f)+.5 > (max) ? (max) : (f)+.5) + +static +void +check(int R, int G, int B) +{ + float Y, Cb, Cr; + int iY, iCb, iCr; + float rY, rCb, rCr; + float rR, rG, rB; + int eR, eG, eB; + + Y = lumaRed[R] + lumaGreen[G] + lumaBlue[B]; + Cb = (B - Y)*D2; + Cr = (R - Y)*D1; + iY = V2Code(Y, refBlackWhite[0], refBlackWhite[1], 255); + iCb = V2Code(Cb, refBlackWhite[2], refBlackWhite[3], 127); + iCr = V2Code(Cr, refBlackWhite[4], refBlackWhite[5], 127); + rCb = Code2V(iCb, refBlackWhite[2], refBlackWhite[3], 127); + rCr = Code2V(iCr, refBlackWhite[4], refBlackWhite[5], 127); + rY = Code2V(iY, refBlackWhite[0], refBlackWhite[1], 255); + rR = rY + rCr*D3; + rB = rY + rCb*D4; + rG = rY - rCb*D6 - rCr*D5; + eR = R - CLAMP(rR,0,255); + eG = G - CLAMP(rG,0,255); + eB = B - CLAMP(rB,0,255); + if (abs(eR) > 1 || abs(eG) > 1 || abs(eB) > 1) { + printf("R %u G %u B %u", R, G, B); + printf(" Y %g Cb %g Cr %g", Y, Cb, Cr); + printf(" iY %u iCb %u iCr %u", iY, iCb, iCr); + printf("\n -> Y %g Cb %g Cr %g", rY, rCb, rCr); + printf(" R %g (%u) G %g (%u) B %g (%u) E=[%d %d %d])\n" + , rR, CLAMP(rR,0,255) + , rG, CLAMP(rG,0,255) + , rB, CLAMP(rB,0,255) + , eR, eG, eB + ); + } + eRtotal += eR; + eGtotal += eG; + eBtotal += eB; + AbseRtotal += abs(eR); + AbseGtotal += abs(eG); + AbseBtotal += abs(eB); + if (eR | eG | eB) + eCodes++; + eBits += abs(eR) + abs(eG) + abs(eB); +} diff --git a/version b/version new file mode 100755 index 0000000..47067f5 --- /dev/null +++ b/version @@ -0,0 +1 @@ +3.5.5

      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 z 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%0A$#GX54l|;(dbF-;V~kUpPrE({e>3aH$3toS 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

    _o$%DJwxaE0jz*!=Nk;X1hv# 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 literal 0 HcmV?d00001 diff --git a/Debug/tif_flush.obj b/Debug/tif_flush.obj new file mode 100755 index 0000000000000000000000000000000000000000..ce01755ca4ba97c7cf404028cd08b069bc04bd8d GIT binary patch literal 11431 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

  • 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�C2RNtnV@3jX9$ATk@0smMBo>$OmM~i0&6pX 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