Initial revision

This commit is contained in:
Mike Welles 1999-07-27 21:50:26 +00:00
commit 0ef31e1f62
275 changed files with 68113 additions and 0 deletions

5
1 Normal file
View File

@ -0,0 +1,5 @@
First post-maintenance grab version.
CVS: ----------------------------------------------------------------------
CVS: Enter Log. Lines beginning with `CVS:' are removed automatically
CVS:
CVS: ----------------------------------------------------------------------

21
COPYRIGHT Normal file
View File

@ -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.

505
Makefile Normal file
View File

@ -0,0 +1,505 @@
#! smake
# $Header: /cvs/maptools/cvsroot/libtiff/Attic/Makefile,v 1.1 1999-07-27 21:50:26 mike Exp $
#
# Warning, this file was automatically created by the TIFF configure script
#
# 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 = .
#
# VERSION: v3.4beta037
# DATE: Wed Feb 3 19:53:27 EST 1999
# TARGET: i586-unknown-linux
# CCOMPILER: /usr/bin/gcc
#
SHELL = /bin/sh
NULL =
ECHO = echo
GENDIST = ${TOOLROOT}/usr/sbin/gendist
INSTALL = ${SHELL} ../port/install.sh
all default:
@if [ "no" = yes ]; then \
${ECHO} "= "port; cd port; ${MAKE}; \
else \
true; \
fi
@${ECHO} "= "libtiff; cd libtiff; ${MAKE}
@${ECHO} "= "tools; cd tools; ${MAKE}
@${ECHO} "= "man; cd man; ${MAKE}
install:
@${ECHO} "= "libtiff; cd libtiff; ${MAKE} install
@${ECHO} "= "tools; cd tools; ${MAKE} install
@${ECHO} "= "man; cd man; ${MAKE} install
@if [ "no" = yes ]; then \
${ECHO} "= "html; cd html; ${MAKE} install; \
else \
true; \
fi
clean:
@if [ "no" = yes ]; then \
${ECHO} "= "port; cd port; ${MAKE} clean; \
else \
true; \
fi
@${ECHO} "= "libtiff; cd libtiff; ${MAKE} clean
@${ECHO} "= "tools; cd tools; ${MAKE} clean
@${ECHO} "= "man; cd man; ${MAKE} clean
# -cd contrib/dbs; ${MAKE} clean
# -cd contrib/dbs/xtiff; ${MAKE} clean
clobber distclean: clean
rm -f Makefile libtiff/port.h config.log
rm -f libtiff/Makefile
rm -f tools/Makefile
rm -f man/Makefile
rm -f port/Makefile port/install.sh
rm -f html/Makefile
#
# The folllowing rule creates a binary distribution for IRIX.
#
installLink::
if [ /usr/local/lib != /usr/lib ]; then \
${INSTALL} -idb tiff.sw.tools -F /usr/lib \
-lns /usr/local/lib/libtiff.a -O libtiff.a; \
else \
true; \
fi
product::
test -d dist || mkdir dist
rm -f dist/rawidb
SRC=`pwd` RAWIDB=`pwd`/dist/rawidb ${MAKE} install installLink
rm -f dist/idb
sort -u +4 dist/rawidb > 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 \
dist/tiff.spec \
dist/newalpha \
dist/newversion \
libtiff/Makefile.in \
libtiff/Makefile.lcc \
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/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.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/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/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/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/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.4beta036.html \
html/v3.4beta035.html \
html/v3.4beta034.html \
html/v3.4beta033.html \
html/v3.4beta032.html \
html/v3.4beta031.html \
html/v3.4beta029.html \
html/v3.4beta028.html \
html/v3.4beta024.html \
html/v3.4beta018.html \
html/v3.4beta016.html \
html/v3.4beta007.html \
${NULL}
OTHERFILES=\
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 \
${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 \
${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}
alpha:
(cd ${SRCDIR}/dist; sh newversion)
-${MAKE} clean
${MAKE} alpha.stamp
${SRCDIR}/configure ${CONFIG}
${MAKE} product
${MAKE} alpha.tar
# stamp relevant files according to current alpha
alpha.stamp:
VERSION="Alpha037"; \
NOW=`date`; \
for i in ${TIFFFILES}; do \
REV=`rlog -h -d"$$NOW" ${SRCDIR}/$$i|fgrep 'head:'|awk '{print $$2}'`;\
rcs "-N$$VERSION:$$REV" "-sExp:$$REV" ${SRCDIR}/$$i && co -sExp ${SRCDIR}/$$i; \
done
purge-old-alphas:
VERSIONS=`awk 'BEGIN { \
for (i=1; i<=037; i++) printf " -nAlpha%03d",i;\
exit \
}'`; \
for i in ${TIFFFILES}; do \
echo rcs $$VERSIONS ${SRCDIR}/$$i; \
rcs $$VERSIONS ${SRCDIR}/$$i && co ${SRCDIR}/$$i; \
done
alphadiff:
-@for i in ${TIFFFILES}; do \
rcsdiff -r${ALPHA} ${SRCDIR}/$$i; \
done
# create alpha distribution archive
alpha.tar:
VERSION="v3.4beta037"; \
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`; \
rm -f tiff-$$VERSION-tar.${ZIPSUF}; \
cat $$VERSION-tar | ${COMPRESS} >tiff-$$VERSION-tar.${ZIPSUF}; \
rm -f tiff-$$VERSION $$VERSION $$VERSION-tar;
release:
(cd ${SRCDIR}/dist; sh newversion)
-${MAKE} clean
${MAKE} release.stamp
${SRCDIR}/configure ${CONFIG}
${MAKE} product
${MAKE} release.tar
release.stamp:
NOW=`date`; \
for i in ${TIFFFILES}; do \
REV=`rlog -h -d"$$NOW" ${SRCDIR}/$$i|fgrep 'head:'|awk '{print $$2}'`;\
rcs "-NRelease3_4_beta:$$REV" "-sRel:$$REV" ${SRCDIR}/$$i && co -sRel ${SRCDIR}/$$i; \
done
# create release distribution archive
release.tar:
VERSION="v3.4beta037"; \
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`; \
rm -f tiff-$$VERSION-tar.${ZIPSUF}; \
cat $$VERSION-tar | ${COMPRESS} >tiff-$$VERSION-tar.${ZIPSUF}; \
rm -f tiff-$$VERSION $$VERSION $$VERSION-tar;
#
# 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}

505
Makefile.in Normal file
View File

@ -0,0 +1,505 @@
#! smake
# $Header: /cvs/maptools/cvsroot/libtiff/Makefile.in,v 1.1 1999-07-27 21:50:26 mike Exp $
#
# @WARNING@
#
# 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 = @SRCDIR@
#
# VERSION: @VERSION@
# DATE: @DATE@
# TARGET: @TARGET@
# CCOMPILER: @CCOMPILER@
#
@SETMAKE@
SHELL = @SCRIPT_SH@
NULL =
ECHO = echo
GENDIST = ${TOOLROOT}/usr/sbin/gendist
INSTALL = @INSTALL@
all default:
@if [ "@PORT@" = yes ]; then \
${ECHO} "= "port; cd port; ${MAKE}; \
else \
true; \
fi
@${ECHO} "= "libtiff; cd libtiff; ${MAKE}
@${ECHO} "= "tools; cd tools; ${MAKE}
@${ECHO} "= "man; cd man; ${MAKE}
install:
@${ECHO} "= "libtiff; cd libtiff; ${MAKE} install
@${ECHO} "= "tools; cd tools; ${MAKE} install
@${ECHO} "= "man; cd man; ${MAKE} install
@if [ "@HTML@" = yes ]; then \
${ECHO} "= "html; cd html; ${MAKE} install; \
else \
true; \
fi
clean:
@if [ "@PORT@" = yes ]; then \
${ECHO} "= "port; cd port; ${MAKE} clean; \
else \
true; \
fi
@${ECHO} "= "libtiff; cd libtiff; ${MAKE} clean
@${ECHO} "= "tools; cd tools; ${MAKE} clean
@${ECHO} "= "man; cd man; ${MAKE} clean
# -cd contrib/dbs; ${MAKE} clean
# -cd contrib/dbs/xtiff; ${MAKE} clean
clobber distclean: clean
rm -f Makefile libtiff/port.h config.log
rm -f libtiff/Makefile
rm -f tools/Makefile
rm -f man/Makefile
rm -f port/Makefile port/install.sh
rm -f html/Makefile
#
# The folllowing rule creates a binary distribution for IRIX.
#
installLink::
if [ @DIR_LIB@ != /usr/lib ]; then \
${INSTALL} -idb tiff.sw.tools -F /usr/lib \
-lns @DIR_LIB@/libtiff.@DSOSUF@ -O libtiff.@DSOSUF@; \
else \
true; \
fi
product::
test -d dist || mkdir dist
rm -f dist/rawidb
SRC=`pwd` RAWIDB=`pwd`/dist/rawidb ${MAKE} install installLink
rm -f dist/idb
sort -u +4 dist/rawidb > 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 \
dist/tiff.spec \
dist/newalpha \
dist/newversion \
libtiff/Makefile.in \
libtiff/Makefile.lcc \
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/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.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/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/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/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/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.4beta036.html \
html/v3.4beta035.html \
html/v3.4beta034.html \
html/v3.4beta033.html \
html/v3.4beta032.html \
html/v3.4beta031.html \
html/v3.4beta029.html \
html/v3.4beta028.html \
html/v3.4beta024.html \
html/v3.4beta018.html \
html/v3.4beta016.html \
html/v3.4beta007.html \
${NULL}
OTHERFILES=\
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 \
${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 \
${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}
alpha:
(cd ${SRCDIR}/dist; sh newversion)
-${MAKE} clean
${MAKE} alpha.stamp
${SRCDIR}/configure ${CONFIG}
${MAKE} product
${MAKE} alpha.tar
# stamp relevant files according to current alpha
alpha.stamp:
VERSION="Alpha@DIST_ALPHA@"; \
NOW=`date`; \
for i in ${TIFFFILES}; do \
REV=`rlog -h -d"$$NOW" ${SRCDIR}/$$i|fgrep 'head:'|awk '{print $$2}'`;\
rcs "-N$$VERSION:$$REV" "-sExp:$$REV" ${SRCDIR}/$$i && co -sExp ${SRCDIR}/$$i; \
done
purge-old-alphas:
VERSIONS=`awk 'BEGIN { \
for (i=1; i<=@DIST_ALPHA@; i++) printf " -nAlpha%03d",i;\
exit \
}'`; \
for i in ${TIFFFILES}; do \
echo rcs $$VERSIONS ${SRCDIR}/$$i; \
rcs $$VERSIONS ${SRCDIR}/$$i && co ${SRCDIR}/$$i; \
done
alphadiff:
-@for i in ${TIFFFILES}; do \
rcsdiff -r${ALPHA} ${SRCDIR}/$$i; \
done
# create alpha distribution archive
alpha.tar:
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`; \
rm -f tiff-$$VERSION-tar.${ZIPSUF}; \
cat $$VERSION-tar | ${COMPRESS} >tiff-$$VERSION-tar.${ZIPSUF}; \
rm -f tiff-$$VERSION $$VERSION $$VERSION-tar;
release:
(cd ${SRCDIR}/dist; sh newversion)
-${MAKE} clean
${MAKE} release.stamp
${SRCDIR}/configure ${CONFIG}
${MAKE} product
${MAKE} release.tar
release.stamp:
NOW=`date`; \
for i in ${TIFFFILES}; do \
REV=`rlog -h -d"$$NOW" ${SRCDIR}/$$i|fgrep 'head:'|awk '{print $$2}'`;\
rcs "-NRelease@DIST_MAJOR@_@DIST_MINOR@_@DIST_TYPE@:$$REV" "-sRel:$$REV" ${SRCDIR}/$$i && co -sRel ${SRCDIR}/$$i; \
done
# create release distribution archive
release.tar:
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`; \
rm -f tiff-$$VERSION-tar.${ZIPSUF}; \
cat $$VERSION-tar | ${COMPRESS} >tiff-$$VERSION-tar.${ZIPSUF}; \
rm -f tiff-$$VERSION $$VERSION $$VERSION-tar;
#
# 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}

60
README Normal file
View File

@ -0,0 +1,60 @@
$Header: /cvs/maptools/cvsroot/libtiff/README,v 1.1 1999-07-27 21:50:26 mike 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.

41
README-IPTC Normal file
View File

@ -0,0 +1,41 @@
To: sam@engr.sgi.com
cc: adam@onshore.com
cc: billr@corbis.com
cc: magick@wizards.dupont.com
Subject: libtiff fork
X-Mailer: VM 6.63 under Emacs 20.3.2
--text follows this line--
I've finished merging a forked libtiff that was being shipped with
ImageMagick (that added IPTC newsphoto support) with the last libtiff
release (tiff-v3.4beta037). I'm going to make this available at
ftp://ftp.onshore.com/pub/libtiff (as tiff-v3.4beta037-IPTC).
I'm very reluctant to fork code, and I woud refrain, but for the following:
1. Repeated mail to you about the patches has gone unanswered.
2. I keep getting mail from people strugging to get IPTC newphoto support
to work properly with ImageMagick.
3. The NT source distibution was already shipping with a forked version.
In order for the situation to be less confusing, I'm going to make an
archive of the forked version available.
I very much would like for there not to be a fork. Are you still
maintaining libtiff? If not, is there a current maintainer?
I'm willing to adopt it if there isn't. I'd hate to see such an
important library fragment. It's extremely likely that onShore
(http://onshore.com/), will donate web space, bandwidth, and listserv
services if so.
------------------------------------------------------
M. L. Welles mike@onShore.com
http://fifth.net/
-------------------------------------------------------

8
README-v3.5 Normal file
View File

@ -0,0 +1,8 @@
Release 3.5 is merely a renaming of v3.4-beta037-IPTC to bump the
version number so that the maintainer switch is clear and folks will
know which problems I caused. See README-IPTC forchages between v3.5
and the last version that Sam released.
--Mike Welles (mike@onshore.com)

7
TODO Normal file
View File

@ -0,0 +1,7 @@
# $Header: /cvs/maptools/cvsroot/libtiff/TODO,v 1.1 1999-07-27 21:50:26 mike Exp $
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

1
VERSION Normal file
View File

@ -0,0 +1 @@
3.4beta

473
config.guess vendored Executable file
View File

@ -0,0 +1,473 @@
#!/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 <bothner@cygnus.com>.
# 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 <sys/systemcfg.h>
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 <unistd.h>
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[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' </usr/options/cb.name`
echo ${UNAME_MACHINE}-unknown-isc$UNAME_REL
elif /bin/uname -X 2>/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 <<EOF
main ()
{
#if defined (sony)
#if defined (MIPSEB)
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
I don't know.... */
printf ("mips-sony-bsd\n"); exit (0);
#else
printf ("m68k-sony-newsos\n"); exit (0);
#endif
#endif
#if defined (__arm) && defined (__acorn) && defined (__unix)
printf ("arm-acorn-riscix"); exit (0);
#endif
#if defined (hp300) && !defined (hpux)
printf ("m68k-hp-bsd\n"); exit (0);
#endif
#if defined (NeXT)
#if !defined (__ARCHITECTURE__)
#define __ARCHITECTURE__ "m68k"
#endif
int version;
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/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

160
config.site Normal file
View File

@ -0,0 +1,160 @@
# $Header: /cvs/maptools/cvsroot/libtiff/Attic/config.site,v 1.1 1999-07-27 21:50:26 mike 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_<package>LIB is the pathname of the directory where <package>'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_<package>LIB} -l<package>
#
# 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<package> 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-5a" # directory for jpeg include files
#DIR_JPEGLIB=../src/jpeg-5a # 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

793
config.sub vendored Executable file
View File

@ -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

1831
configure vendored Executable file

File diff suppressed because it is too large Load Diff

165
contrib/acorn/Makefile Normal file
View File

@ -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
<Prefix$Dir>.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
<Prefix$Dir>.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:

79
contrib/acorn/ReadMe Normal file
View File

@ -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 <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.

3
contrib/acorn/SetVars Executable file
View File

@ -0,0 +1,3 @@
Set LibTIFF$Dir <Obey$Dir>
Set LibTIFF$Path <LibTIFF$Dir>.
Set C$Path <C$Path>,LibTIFF:

5
contrib/acorn/cleanlib Executable file
View File

@ -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

175
contrib/acorn/convert Normal file
View File

@ -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 <sys/types.h>
#endif
Acorn also doesn't have this header so:
#if !defined(__MWERKS__) && !defined(THINK_C) && !defined(__acorn)
#include <sys/types.h>
#endif
====2====
#ifdef VMS
#include <file.h>
#include <unixio.h>
#else
#include <fcntl.h>
#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 <file.h>
#include <unixio.h>
#else
#ifndef __acorn
#include <fcntl.h>
#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 <stdlib.h>
#define BSDTYPES
#endif
Added RISC OS to above thus:
#if defined(__MWERKS__) || defined(THINK_C) || defined(applec) || defined(__acorn)
#include <stdlib.h>
#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 <unistd.h>
#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 <unistd.h>
#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 <osfcn.h>
#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.
===============================================================================

128
contrib/acorn/install Executable file
View File

@ -0,0 +1,128 @@
If "%0" = "" Then Error Syntax: install |<source_dir> |<dest_dir>
If "%1" = "" Then Error Syntax: install |<source_dir> |<dest_dir>
Set LibTiffInstall$Dir %0
Set LibTiff$Dir %1
Set Alias$CPY Copy <LibTiffInstall$Dir>.%%0 <LibTiff$Dir>.%%1 ~C~DF~NRV
CDir <LibTiff$Dir>
CDir <LibTiff$Dir>.c
CDir <LibTiff$Dir>.h
CDir <LibTiff$Dir>.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 <LibTiff$Dir>.COPYRIGHT Text
SetType <LibTiff$Dir>.README Text
SetType <LibTiff$Dir>.VERSION Text
SetType <LibTiff$Dir>.tiff/alpha Text
SetType <LibTiff$Dir>.SetVars Obey
SetType <LibTiff$Dir>.Makefile fe1
SetType <LibTiff$Dir>.cleanlib Obey
SetType <LibTiff$Dir>.c.getopt Text
SetType <LibTiff$Dir>.c.mkg3states Text
SetType <LibTiff$Dir>.c.mkspans Text
SetType <LibTiff$Dir>.c.mkversion Text
SetType <LibTiff$Dir>.c.tif_acorn Text
SetType <LibTiff$Dir>.c.tif_aux Text
SetType <LibTiff$Dir>.c.tif_close Text
SetType <LibTiff$Dir>.c.tif_codec Text
SetType <LibTiff$Dir>.c.tif_compre Text
SetType <LibTiff$Dir>.c.tif_dir Text
SetType <LibTiff$Dir>.c.tif_dirinf Text
SetType <LibTiff$Dir>.c.tif_dirrea Text
SetType <LibTiff$Dir>.c.tif_dirwri Text
SetType <LibTiff$Dir>.c.tif_dumpmo Text
SetType <LibTiff$Dir>.c.tif_error Text
SetType <LibTiff$Dir>.c.tif_fax3 Text
SetType <LibTiff$Dir>.c.tif_flush Text
SetType <LibTiff$Dir>.c.tif_getima Text
SetType <LibTiff$Dir>.c.tif_jpeg Text
SetType <LibTiff$Dir>.c.tif_lzw Text
SetType <LibTiff$Dir>.c.tif_next Text
SetType <LibTiff$Dir>.c.tif_open Text
SetType <LibTiff$Dir>.c.tif_packbi Text
SetType <LibTiff$Dir>.c.tif_predic Text
SetType <LibTiff$Dir>.c.tif_print Text
SetType <LibTiff$Dir>.c.tif_read Text
SetType <LibTiff$Dir>.c.tif_strip Text
SetType <LibTiff$Dir>.c.tif_swab Text
SetType <LibTiff$Dir>.c.tif_thunde Text
SetType <LibTiff$Dir>.c.tif_tile Text
SetType <LibTiff$Dir>.c.tif_versio Text
SetType <LibTiff$Dir>.c.tif_warnin Text
SetType <LibTiff$Dir>.c.tif_write Text
SetType <LibTiff$Dir>.c.tif_zip Text
SetType <LibTiff$Dir>.h.t4 Text
SetType <LibTiff$Dir>.h.tiff Text
SetType <LibTiff$Dir>.h.tiffcomp Text
SetType <LibTiff$Dir>.h.tiffconf Text
SetType <LibTiff$Dir>.h.tiffio Text
SetType <LibTiff$Dir>.h.tiffiop Text
SetType <LibTiff$Dir>.h.tif_dir Text
SetType <LibTiff$Dir>.h.tif_fax3 Text
SetType <LibTiff$Dir>.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 <LibTiff$Dir>.%%0 <LibTiff$Dir>.%%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!

12
contrib/dbs/Imakefile Normal file
View File

@ -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)

7
contrib/dbs/README Normal file
View File

@ -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

85
contrib/dbs/tiff-bi.c Normal file
View File

@ -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 <stdio.h>
#include <tiffio.h>
#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);
}

View File

@ -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 <math.h>
#include <stdio.h>
#include <tiffio.h>
#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<<bits_per_pixel) - 1;
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_MINISBLACK);
TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField(tif, TIFFTAG_REFERENCEBLACKWHITE, refblackwhite);
TIFFSetField(tif, TIFFTAG_TRANSFERFUNCTION, gray);
TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_NONE);
scan_line = (u_char *) malloc(WIDTH / (8 / bits_per_pixel));
for (i = 0; i < HEIGHT; i++) {
for (j = 0, k = 0; j < WIDTH;) {
gray_index = (j / chunk_size) + ((i / chunk_size) * nchunks);
switch (bits_per_pixel) {
case 8:
scan_line[k++] = gray_index;
j++;
break;
case 4:
scan_line[k++] = (gray_index << 4) + gray_index;
j += 2;
break;
case 2:
scan_line[k++] = (gray_index << 6) + (gray_index << 4)
+ (gray_index << 2) + gray_index;
j += 4;
break;
}
}
TIFFWriteScanline(tif, scan_line, i, 0);
}
free(scan_line);
TIFFClose(tif);
exit(0);
}
void
Usage()
{
fprintf(stderr, "Usage: %s -depth (8 | 4 | 2) tiff-image\n", programName);
exit(0);
}

277
contrib/dbs/tiff-palette.c Normal file
View File

@ -0,0 +1,277 @@
/*
* tiff-palette.c -- create a Class P (palette) 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 <stdio.h>
#include <tiffio.h>
#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);
}

196
contrib/dbs/tiff-rgb.c Normal file
View File

@ -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 <math.h>
#include <stdio.h>
#include <tiffio.h>
#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);
}

View File

@ -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)

6
contrib/dbs/xtiff/README Normal file
View File

@ -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).

View File

@ -0,0 +1 @@
#define PATCHLEVEL 0

1275
contrib/dbs/xtiff/xtiff.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -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};

View File

@ -0,0 +1,247 @@
# $Header: /cvs/maptools/cvsroot/libtiff/contrib/dosdjgpp/Attic/Makefile.lib,v 1.1 1999-07-27 21:50:27 mike 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 \
${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 \
${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

View File

@ -0,0 +1,217 @@
# $Header: /cvs/maptools/cvsroot/libtiff/contrib/dosdjgpp/Attic/Makefile.tools,v 1.1 1999-07-27 21:50:27 mike 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

View File

@ -0,0 +1,54 @@
#! smake
# $Header: /cvs/maptools/cvsroot/libtiff/contrib/dosdjgpp/Attic/Makefile.top,v 1.1 1999-07-27 21:50:27 mike 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

30
contrib/dosdjgpp/README Normal file
View File

@ -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 <alex@hal.rhein-main.de>

11
contrib/dosdjgpp/conf.bat Normal file
View File

@ -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 ..\..

29
contrib/dosdjgpp/port.h Normal file
View File

@ -0,0 +1,29 @@
#ifndef _PORT_
#define _PORT_ 1
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
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 <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
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

12
contrib/iptcutil/Makefile Normal file
View File

@ -0,0 +1,12 @@
CC=gcc
CFLAGS=
iptcutil: iptcutil.c
$(CC) $(CFLAGS) -o iptcutil iptcutil.c
clean:
rm iptcutil *~
all: iptcutil

920
contrib/iptcutil/iptcutil.c Normal file
View File

@ -0,0 +1,920 @@
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#ifdef WIN32
#include <io.h>
#endif
#include <string.h>
#include <memory.h>
#include <ctype.h>
#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("&amp;", ofile);
break;
#ifdef HANDLE_GT_LT
case '<':
fputs("&lt;", ofile);
break;
case '>':
fputs("&gt;", ofile);
break;
#endif
case '"':
fputs("&quot;", 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,"&lt;",'<',
4,"&gt;",'>',
#endif
5,"&amp;",'&',
6,"&quot;",'"'
};
/*
* 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<taglen; tagindx++)
{
c = str[tagindx] = getc(ifile);
if (c == EOF)
return -1;
}
str[ taglen ] = 0;
/* now finish up by formatting this binary data into ASCII equivalent */
if (strlen(readable) > 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] <input >output";
if( argc < 2 )
{
printf(usage);
return 1;
}
mode = 0;
length = -1;
buffer = (unsigned char *)NULL;
for (i=1; i<argc; i++)
{
c = argv[i][0];
if (c == '-' || c == '/')
{
c = argv[i][1];
switch( c )
{
case 't':
mode = 1;
#ifdef WIN32
/* Set "stdout" to binary mode: */
_setmode( _fileno( ofile ), _O_BINARY );
#endif
break;
case 'b':
mode = 0;
#ifdef WIN32
/* Set "stdin" to binary mode: */
_setmode( _fileno( ifile ), _O_BINARY );
#endif
break;
case 'i':
if (mode == 0)
ifile = fopen(argv[++i], "rb");
else
ifile = fopen(argv[++i], "rt");
if (ifile == (FILE *)NULL)
{
printf("Unable to open: %s\n", argv[i]);
return 1;
}
break;
case 'o':
if (mode == 0)
ofile = fopen(argv[++i], "wt");
else
ofile = fopen(argv[++i], "wb");
if (ofile == (FILE *)NULL)
{
printf("Unable to open: %s\n", argv[i]);
return 1;
}
break;
default:
printf("Unknown option: %s\n", argv[i]);
return 1;
}
}
else
{
printf(usage);
return 1;
}
}
if (mode == 0) /* handle binary iptc info */
formatIPTC(ifile, ofile);
if (mode == 1) /* handle text form of iptc info */
{
char
brkused,
quoted,
*line,
*token,
*newstr;
int
state,
next;
unsigned char
recnum,
dataset;
int
inputlen = BUFFER_SZ;
line = (char *) malloc(inputlen);
token = (char *)NULL;
while((line = super_fgets(line,&inputlen,ifile))!=NULL)
{
state=0;
next=0;
token = (char *) malloc(inputlen);
newstr = (char *) malloc(inputlen);
while(tokenizer(0, token, inputlen, line, "", "=", "\"", 0,
&brkused,&next,&quoted)==0)
{
if (state == 0)
{
int
state,
next;
char
brkused,
quoted;
state=0;
next=0;
while(tokenizer(0, newstr, inputlen, token, "", "#", "", 0,
&brkused, &next, &quoted)==0)
{
if (state == 0)
dataset = (unsigned char) atoi(newstr);
else
if (state == 1)
recnum = (unsigned char) atoi(newstr);
state++;
}
}
else
if (state == 1)
{
int
next;
unsigned long
len;
char
brkused,
quoted;
next=0;
len = strlen(token);
while(tokenizer(0, newstr, inputlen, token, "", "&", "", 0,
&brkused, &next, &quoted)==0)
{
if (brkused && next > 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<max-1)
{
if(_p_state==IN_QUOTE)
c=ch;
else
switch(_p_flag&3)
{
case 1: /* convert to upper */
c=toupper(ch);
break;
case 2: /* convert to lower */
c=tolower(ch);
break;
default: /* use as is */
c=ch;
break;
}
string[_p_tokpos++]=c;
}
return;
}
int tokenizer(unsigned inflag,char *token,int tokmax,char *line,
char *white,char *brkchar,char *quote,char eschar,char *brkused,
int *next,char *quoted)
{
int qp;
char c,nc;
*brkused=0; /* initialize to null */
*quoted=0; /* assume not quoted */
if(!line[*next]) /* if we're at end of line, indicate such */
return 1;
_p_state=IN_WHITE; /* initialize state */
_p_curquote=0; /* initialize previous quote char */
_p_flag=inflag; /* set option flag */
for(_p_tokpos=0;c=line[*next];++(*next)) /* main loop */
{
if((qp=sindex(c,brkchar))>=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;
}

BIN
contrib/iptcutil/test.iptc Normal file

Binary file not shown.

32
contrib/iptcutil/test.txt Normal file
View File

@ -0,0 +1,32 @@
2#0="&#0;&#2;"
2#120#Caption="Chairman of the US House Judiciary Committee, Henry Hyde,R-IL, makes his opening statement during impeachment hearings 11 December on Capitol Hill in Washington, DC. The committee is debating the articles of impechment and my take a vote on the impeachment of US President BIll Clinton on charges that he obstucted justice, lied and abused the power of his office as early as today. AFP PHOTO Paul J. RICHARDS&#13;"
2#122#Caption Writer="kb/lt"
2#100#Country Code="USA"
2#105#Headline="Old fart squeezing two fingers."
2#30#Release Date="19981211"
2#35#Release Time="000000+0000"
2#40#Special Instructions="This is a test. This is only a test. ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890"
2#80#Byline="PAUL J. RICHARDS"
2#85#Byline Title="STF"
2#110#Credit="AFP"
2#65#Originating Program="MacDesk Reporter"
2#115#Source="AFP"
2#5#Image Name="US-HYDE"
2#55#Created Date="19981211"
2#90#City="WASHINGTON"
2#95#Province State="DC"
2#101#Country="UNITED STATES"
2#103#Original Transmission Reference="DCA03"
2#15#Category="POL"
2#20#Supplemental Category="GOVERNMENT"
2#10#Priority="5"
2#25#Keyword="fart"
2#25#Keyword="squeezing"
2#25#Keyword="old"
2#25#Keyword="fingers"
2#75#Object Cycle="a"
2#60#Created Time="000000+0000"
2#70#Program Version="2.0.3"
2#130="3S"
2#135="GB"
2#231="Kaya A. Hoffmann 12/14/98 12:00:44 PM Copy To : Selects - \\KINYANI\Selects&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;&#0;"

View File

@ -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

18
contrib/mac-cw/README Normal file
View File

@ -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.

20
contrib/mac-cw/mac_main.c Normal file
View File

@ -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
}

12
contrib/mac-cw/mac_main.h Normal file
View File

@ -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 */

View File

@ -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).

View File

@ -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
}

4
contrib/mac-cw/version.h Normal file
View File

@ -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."

47
contrib/mac-mpw/BUILD.mpw Normal file
View File

@ -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

20
contrib/mac-mpw/README Normal file
View File

@ -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 <file>.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)

View File

@ -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

View File

@ -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 <stdio.h>
#include <stdlib.h>
#include <ctype.h>
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);
}
}
}

53
contrib/mac-mpw/port.make Normal file
View File

@ -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

138
contrib/mac-mpw/tools.make Normal file
View File

@ -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

133
contrib/mac-mpw/top.make Normal file
View File

@ -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

37
contrib/mfs/README Normal file
View File

@ -0,0 +1,37 @@
Date: Mon, 23 Jun 1997 13:30:48 +0200
To: <sam@cthulhu.engr.sgi.com>
From: "Mike Johnson" <mikehunt@swipnet.se>
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.

579
contrib/mfs/mfs_file.c Normal file
View File

@ -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 <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
--------------------------------------------------------------------------------
- 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;
}
}

90
contrib/pds/README Normal file
View File

@ -0,0 +1,90 @@
Date: Fri, 01 Aug 1997 20:14:52 MDT
To: Sam Leffler <sam@cthulhu.engr.sgi.com>
From: "Conrad J. Poelman (WSAT)" <poelmanc@plk.af.mil>
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

518
contrib/pds/tif_imageiter.c Normal file
View File

@ -0,0 +1,518 @@
/* $Header: /cvs/maptools/cvsroot/libtiff/contrib/pds/tif_imageiter.c,v 1.1 1999-07-27 21:50:27 mike 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 <assert.h>
#include <stdio.h>
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

View File

@ -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 */
};

1124
contrib/pds/tif_pdsdirread.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,964 @@
/* $Header: /cvs/maptools/cvsroot/libtiff/contrib/pds/tif_pdsdirwrite.c,v 1.1 1999-07-27 21:50:27 mike 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->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->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);
}

10
contrib/ras/README Normal file
View File

@ -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

244
contrib/ras/ras2tif.c Normal file
View File

@ -0,0 +1,244 @@
#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.
*
* 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 <stdio.h>
#include <sys/time.h>
#include <pixrect/pixrect_hs.h>
#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;
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);
sprintf(datetime, "19%02d:%02d:%02d %02d:%02d:%02d",
ct->tm_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);
}

337
contrib/ras/tif2ras.c Normal file
View File

@ -0,0 +1,337 @@
#ifndef lint
static char sccsid[] = "@(#)tif2ras.c 1.2 90/03/06";
#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 <stdio.h>
#include <pixrect/pixrect_hs.h>
#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);
}

229
contrib/vms/libtiff/makevms.com Executable file
View File

@ -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

1
contrib/vms/libtiff/tiff.opt Executable file
View File

@ -0,0 +1 @@
TIFFSHR/SHAREABLE

View File

@ -0,0 +1,122 @@
! VMS linker options file for linking the TIFF library into a shareable image
!
IDENTIFICATION="LIBTIFF 3.4-032"
!
! Please update the minor version number below, when adding new routines
GSMATCH=LEQUAL,1,9
!
! 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.
!
SYMBOL_VECTOR=(-
TIFFCheckTile=PROCEDURE,-
TIFFClose=PROCEDURE,-
TIFFComputeStrip=PROCEDURE,-
TIFFComputeTile=PROCEDURE,-
TIFFCurrentDirectory=PROCEDURE,-
TIFFCurrentRow=PROCEDURE,-
TIFFCurrentStrip=PROCEDURE,-
TIFFCurrentTile=PROCEDURE,-
TIFFError=PROCEDURE,-
TIFFFdOpen=PROCEDURE,-
TIFFFileName=PROCEDURE,-
TIFFFileno=PROCEDURE,-
TIFFFlush=PROCEDURE,-
TIFFFlushData=PROCEDURE,-
TIFFGetField=PROCEDURE,-
TIFFGetFieldDefaulted=PROCEDURE,-
TIFFGetMode=PROCEDURE,-
TIFFIsTiled=PROCEDURE,-
TIFFModeCCITTFax3=PRIVATE_PROCEDURE,- ! gone in 3.3 beta 024
TIFFNumberOfStrips=PROCEDURE,-
TIFFNumberOfTiles=PROCEDURE,-
TIFFOpen=PROCEDURE,-
TIFFPrintDirectory=PROCEDURE,-
TIFFReadBufferSetup=PROCEDURE,-
TIFFReadDirectory=PROCEDURE,-
TIFFReadEncodedStrip=PROCEDURE,-
TIFFReadEncodedTile=PROCEDURE,-
TIFFReadRawStrip=PROCEDURE,-
TIFFReadRawTile=PROCEDURE,-
TIFFReadRGBAImage=PROCEDURE,-
TIFFReadScanline=PROCEDURE,-
TIFFReadTile=PROCEDURE,-
TIFFReverseBits=PROCEDURE,-
TIFFScanlineSize=PROCEDURE,-
TIFFSetDirectory=PROCEDURE,-
TIFFSetErrorHandler=PROCEDURE,-
TIFFSetField=PROCEDURE,-
TIFFSetWarningHandler=PROCEDURE,-
TIFFStripSize=PROCEDURE,-
TIFFSwabShort=PROCEDURE,-
TIFFSwabLong=PROCEDURE,-
TIFFSwabArrayOfShort=PROCEDURE,-
TIFFSwabArrayOfLong=PROCEDURE,-
TIFFTileRowSize=PROCEDURE,-
TIFFTileSize=PROCEDURE,-
TIFFVGetField=PROCEDURE,-
TIFFVGetFieldDefaulted=PROCEDURE,-
TIFFVSetField=PROCEDURE,-
TIFFWarning=PROCEDURE,-
TIFFWriteDirectory=PROCEDURE,-
TIFFWriteEncodedStrip=PROCEDURE,-
TIFFWriteEncodedTile=PROCEDURE,-
TIFFWriteRawStrip=PROCEDURE,-
TIFFWriteRawTile=PROCEDURE,-
TIFFWriteScanline=PROCEDURE,-
TIFFWriteTile=PROCEDURE,-
!
! New entries in version 3.1
!
TIFFClientOpen=PROCEDURE,-
TIFFVStripSize=PROCEDURE,- ! For tiffcp
!
! New entries in version 3.2
!
TIFFGetVersion=PROCEDURE,-
TIFFGetBitRevTable=PROCEDURE,-
_TIFFmalloc=PROCEDURE,- ! For fax2tiff
!
! New entries in version 3.3
!
TIFFIsByteSwapped=PROCEDURE,-
TIFFSetWriteOffset=PROCEDURE,-
!
! New entries in version 3.3 beta 020
!
TIFFSetSubDirectory=PROCEDURE,-
TIFFUnlinkDirectory=PROCEDURE,-
!
! These needs to be global on the Alpha (used in fax2tiff)
!
tiffDataWidth=DATA,-
tiffFieldInfo=DATA,-
!
! New entries in version 3.3 beta 026 (for the tools)
!
_TIFFfree=PROCEDURE,-
_TIFFrealloc=PROCEDURE,-
_TIFFmemset=PROCEDURE,-
_TIFFmemcpy=PROCEDURE,-
_TIFFmemcmp=PROCEDURE,-
!
! New entries in version 3.4 beta 002
!
TIFFRasterScanlineSize=PROCEDURE,-
TIFFDefaultStripSize=PROCEDURE,-
TIFFDefaultTileSize=PROCEDURE,-
TIFFVTileSize=PROCEDURE,- ! not new, but omitted previously
TIFFSwabDouble=PROCEDURE,-
TIFFSwabArrayOfDouble=PROCEDURE,-
TIFFLastDirectory=PROCEDURE,- ! not new either
!
! New entries in version 3.4 beta 007 through 032
!
TIFFCurrentDirOffset=PROCEDURE,-
TIFFWriteBufferSetup=PROCEDURE)
!
! Then take the object library
!
TIFF/LIBRARY

View File

@ -0,0 +1,18 @@
! VMS linker options file for linking the TIFF library into a shareable image
!
IDENTIFICATION="LIBTIFF 3.4-032"
!
! Please update the minor version number below, when adding new routines
GSMATCH=LEQUAL,1,9
!
! Place the transfer vector at the beginning of the image
!
CLUSTER=TIFFVEC,,,TIFFVEC
!
! Then take the object library
!
TIFF/LIBRARY/INCLUDE=(TIF_FAX3SM,TIF_CODEC)
!
! The C RTL shareable image
!
SYS$SHARE:VAXCRTL/SHARE

131
contrib/vms/libtiff/tiffvec.mar Executable file
View File

@ -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

113
contrib/vms/tools/makevms.com Executable file
View File

@ -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

111
contrib/win32/README Normal file
View File

@ -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

38
contrib/win32/dllshell.c Normal file
View File

@ -0,0 +1,38 @@
dllshell.c ---------------------------------------------------------------
#define STRICT
#include <windows.h>
#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;
}

72
contrib/win32/libtiff.def Normal file
View File

@ -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

134
contrib/win95/Makefile.w95 Normal file
View File

@ -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)

50
contrib/win95/README Normal file
View File

@ -0,0 +1,50 @@
Date: 04 Dec 95 10:34:23 EST
From: Philippe <100423.3705@compuserve.com>
To: TIFF/sam Leffler <sam@cthulhu.engr.sgi.com>
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

372
contrib/win95/tiff2dib.c Normal file
View File

@ -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<<BitsPerSample, red, green, blue) == 16)
Palette16Bits = TRUE;
else
Palette16Bits = FALSE;
lpbmi = (LPBITMAPINFO)lpDIB;
//load the palette in the DIB
for (i = (1<<BitsPerSample)-1; i >= 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;
}
}

26
contrib/winnt/README Normal file
View File

@ -0,0 +1,26 @@
Date: Fri, 10 Nov 1995 13:02:33 -0800
Message-Id: <199511102102.NAA07993@lido>
To: tiff@sgi.engr.sgi.com
Subject: Contribution: libtiff for Windows-nt
Reply-To: Dave Dyer <ddyer@triple-i.com>
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.

View File

@ -0,0 +1,182 @@
Date: Fri, 18 Apr 1997 09:25:09 EDT
To: "'sam@cthulhu.engr.sgi.com'" <sam@cthulhu.engr.sgi.com>
cc: "'tiff@sgi.engr.sgi.com'" <tiff@sgi.engr.sgi.com>
From: xingong chang <xingong@feith1.FEITH.COM>
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 <ntwin32.mak>).
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 <ntwin32.mak>
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


1046
contrib/winnt/fax3sm.c Normal file

File diff suppressed because it is too large Load Diff

72
contrib/winnt/libtiff.def Normal file
View File

@ -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

1947
contrib/winnt/libtiff.mak Normal file

File diff suppressed because it is too large Load Diff

BIN
contrib/winnt/libtiff.vcp Normal file

Binary file not shown.

1
contrib/winnt/version.h Normal file
View File

@ -0,0 +1 @@
#define VERSION "LIBTIFF, Version 3.4beta024\nCopyright (c) 1988-1995 Sam Leffler\nCopyright (c) 1991-1995 Silicon Graphics, Inc."

8
dist/newalpha vendored Executable file
View File

@ -0,0 +1,8 @@
#! /bin/sh
# $Header: /cvs/maptools/cvsroot/libtiff/dist/Attic/newalpha,v 1.1 1999-07-27 21:50:27 mike Exp $
if test -r tiff.alpha; then
ALPHA=`cat tiff.alpha`; rm -f tiff.alpha
echo "$ALPHA" | awk '{ printf "define ALPHA %03d\n", $3+1}' > tiff.alpha
else
echo "define ALPHA 001" >tiff.alpha
fi

32
dist/newversion vendored Normal file
View File

@ -0,0 +1,32 @@
#! /bin/sh
# $Header: /cvs/maptools/cvsroot/libtiff/dist/Attic/newversion,v 1.1 1999-07-27 21:50:27 mike 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

1
dist/tiff.alpha vendored Normal file
View File

@ -0,0 +1 @@
define ALPHA 037

68
dist/tiff.spec vendored Normal file
View File

@ -0,0 +1,68 @@
# $Header: /cvs/maptools/cvsroot/libtiff/dist/Attic/tiff.spec,v 1.1 1999-07-27 21:50:27 mike 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

1
dist/tiff.version vendored Normal file
View File

@ -0,0 +1 @@
define TIFF_VNUM 3.4beta

104
html/Makefile.in Normal file
View File

@ -0,0 +1,104 @@
# $Header: /cvs/maptools/cvsroot/libtiff/html/Makefile.in,v 1.1 1999-07-27 21:50:27 mike 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 \
${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:;

66
html/bugs.html Normal file
View File

@ -0,0 +1,66 @@
<HTML>
<HEAD>
<TITLE>
Bugs and the TIFF Mailing List
</TITLE>
</HEAD>
<H1>
<IMG SRC=images/cover.jpg WIDTH=110 HEIGHT=110 ALIGN=left BORDER=1 HSPACE=6>
Bugs and the TIFF Mailing List
</H1>
<H5>
This documentation is best viewed using a graphical browser that supports
the latest HTML directives for formatting documents. In particular,
this document was authored
for viewing with version 1.1 or newer of the
<A HREF="http://home.mcom.com/comprod/products/navigator/index.html">Netscape Navigator</A>.
</H5>
<BR CLEAR=left>
<P>
This software is free. The only thing that I ask in return is that you
tell me when you find a problem or fix a bug. I also gladly accept
software contributions, although I hesitate to include such software in
my regular stuff if I am personally unable to test it.
<P>
A mailing list for users of this software is located on sgi.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
<UL>
<A HREF="mailto:tiff-request@sgi.com">tiff-request@sgi.com</A>
</UL>
For example, to subscribe, send the line
<UL><PRE>
subscribe
</PRE></UL>
in the body of your message. The line <TT>help</TT> will return a list of
the commands understood by the mailing list management software.
<P>
Submissions (including bug reports) should be directed to:
<UL>
<A HREF="mailto:tiff@sgi.com">tiff@sgi.com</A>
</UL>
When corresponding about this software please always specify what
version you have and what system you are running on.
<P>
If all else fails, I can be reached by sending mail to the address
shown below.
(but beware that I'm more likely to respond to mail sent to the
mailing list than mail sent directly to me).
<P>
<HR>
<ADDRESS>
<A HREF="sam.html">Sam Leffler</A> / <A HREF="mailto:sam@engr.sgi.com">sam@engr.sgi.com</A>.
Last updated: $Date: 1999-07-27 21:50:27 $
</ADDRESS>
</BODY>
</HTML>

1153
html/build.html Normal file

File diff suppressed because it is too large Load Diff

159
html/contrib.html Normal file
View File

@ -0,0 +1,159 @@
<HTML>
<HEAD>
<TITLE>
Contributed TIFF Software
</TITLE>
</HEAD>
<H1>
<IMG SRC=images/smallliz.jpg WIDTH=144 HEIGHT=108 ALIGN=left BORDER=1 HSPACE=6>
Contributed TIFF Software
</H1>
<P>
The <B>contrib</B> 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).
<BR CLEAR=left>
<P>
<TABLE BORDER CELLPADDING=3>
<TR>
<TD VALIGN=top>
<B>contrib/vms</B>
</TD>
<TD>
scripts and files from Karsten Spang for building
the library and tools under VMS
</TD>
</TR>
<TR>
<TD VALIGN=top>
<B>contrib/dbs</B>
</TD>
<TD>
various tools from Dan & Chris Sears, including a simple X-based viewer
</TD>
</TR>
<TR>
<TD VALIGN=top>
<B>contrib/ras</B>
</TD>
<TD>
two programs by Patrick Naughton for converting
between Sun rasterfile format and TIFF (these
require <TT>libpixrect.a</TT>, as opposed to the one in
tools that doesn't)
</TD>
</TR>
<TR>
<TD VALIGN=top>
<B>contrib/mac-mpw</B>
</TD>
<TD>
scripts and files from Niles Ritter for building
the library and tools under Macintosh/MPW C.
</TD>
</TR>
<TR>
<TD VALIGN=top>
<B>contrib/acorn</B>
</TD>
<TD>
scripts and files from Peter Greenham for building
the library and tools on an Acorn RISC OS system.
</TD>
</TR>
<TR>
<TD VALIGN=top>
<B>contrib/win32</B>
</TD>
<TD>
scripts and files from Scott Wagner for building
the library under Windows NT and Windows 95.
</TD>
</TR>
<TR>
<TD VALIGN=top>
<B>contrib/dosdjgpp</B>
</TD>
<TD>
scripts and files from Alexander Lehmann for building
the library under MSDOS with the DJGPP v2 compiler.
</TD>
</TR>
<TR>
<TD VALIGN=top>
<B>contrib/tags</B>
</TD>
<TD>
scripts and files from Niles Ritter for adding private
tag support at runtime, without changing libtiff.
</TD>
</TR>
<TR>
<TD VALIGN=top>
<B>contrib/mfs</B>
</TD>
<TD>
code from Mike Johnson to read+write images in memory
without modifying the library
</TD>
</TR>
<TR>
<TD VALIGN=top>
<B>contrib/pds</B>
</TD>
<TD>
various routines from Conrad Poelman; a TIFF image iterator and
code to support ``private sub-directories''
</TD>
</TR>
<TR>
<TD VALIGN=top>
<B>contrib/iptcutil</B>
</TD>
<TD>
A utility by <A HREF=mailto:billr@corbis.com>Bill Radcliffe</a> 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 <A
HREF=http://www.wizards.dupont.com/magick>ImageMagick</a> convert(1)
utility.
</TD>
</TR>
</TABLE>
<P>
Don't send me mail asking about this stuff; I frequently know
absolutely nothing about it. Send questions
and/or bug reports directly to the authors.
<P>
<HR>
Last updated: $Date: 1999-07-27 21:50:27 $
</BODY>
</HTML>

52
html/document.html Normal file
View File

@ -0,0 +1,52 @@
<HTML>
<HEAD>
<TITLE>
TIFF Documentation
</TITLE>
</HEAD>
<H1>
<IMG SRC=images/jim.gif WIDTH=139 HEIGHT=170 ALIGN=left BORDER=1 HSPACE=6>
TIFF Documentation
</H1>
<P>
A copy of the 6.0 specification is available by public ftp at
<UL>
<A HREF="ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.Z">ftp:://ftp.sgi.com/graphics/tiff/TIFF6.ps.Z</A>
</UL>
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.
<BR CLEAR=left>
<P>
Adobe (nee Aldus) provides the 6.0 spec online in
Acrobat format (PDF); this can be found at
<UL>
<A HREF="http://www.adobe.com/supportservice/devrelations/PDFS/TN/TIFF6.pdf">http://www.adobe.com/supportservice/devrelations/PDFS/TN/TIFF6.pdf</A>
</UL>
TIFF Technical Notes can be retrieved from
<UL>
<A HREF="http://www.adobe.com/supportservice/devrelations/technotes.html">http://www.adobe.com/supportservice/devrelations/technotes.html</A>
</UL>
<P>
<HR>
<ADDRESS>
<A HREF="http://fifth.net/">Mike Welles</A> / <A HREF="mailto:mike@onshore.com">mike@onshore.com</A>.
<A HREF="sam.html">Sam Leffler</A> / <A HREF="mailto:sam@engr.sgi.com">sam@engr.sgi.com</A>.
Last updated: $Date: 1999-07-27 21:50:27 $
</ADDRESS>
</BODY>
</HTML>

39
html/images.html Normal file
View File

@ -0,0 +1,39 @@
<HTML>
<HEAD>
<TITLE>
TIFF Test Images
</TITLE>
</HEAD>
<H1>
<IMG SRC=images/bali.jpg WIDTH=158 HEIGHT=107 ALIGN=left BORDER=1 HSPACE=6>
TIFF Test Images
</H1>
<P>
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.
<BR CLEAR=left>
<P>
The latest archive of test images is located at
<A HREF="ftp://ftp.sgi.com/graphics/tiff/v3.0pics.tar.Z">ftp://ftp.sgi.com/graphics/tiff/v3.0pics.tar.Z</A>.
<P>
There are two other good sources for TIFF test images:
the contributed software <B>contrib/dbs</B> includes several
programs that generate test images suitable for debugging, and
the <TT>tiffcp</TT> program can be used to generate a variety
of images with different storage characteristics.
<P>
<HR>
Last updated: $Date: 1999-07-27 21:50:27 $
</BODY>
</HTML>

BIN
html/images/back.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1000 B

BIN
html/images/bali.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
html/images/cat.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
html/images/cover.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
html/images/cramps.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
html/images/dave.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Some files were not shown because too many files have changed in this diff Show More