home *** CD-ROM | disk | FTP | other *** search
- /*
- Copyright (c) 1988 by Sam Leffler.
- All rights reserved.
-
- Program ported to Turbo C by Craig A. Lindley 12/08/89
-
- This file is provided for unrestricted use provided that this
- legend is included on all tape media and as a part of the
- software program in whole or part. Users may copy, modify or
- distribute this file at will.
- */
-
- #include <dos.h>
- #include <fcntl.h>
- #include <stdarg.h>
- #include "tiff.h"
-
- #define FALSE 0
- #define TRUE 1
-
- #ifndef _TIFFIO_
- #define _TIFFIO_
-
- #ifndef _CompletionCode_
- #define _CompletionCode_
- typedef int CompletionCode;
- #endif
-
-
- /*
- Internal format of a TIFF directory entry.
- */
- typedef struct
- {
- unsigned long td_subfiletype;
- unsigned long td_imagewidth, td_imagelength;
- unsigned td_bitspersample;
- unsigned td_compression;
- unsigned td_photometric;
- unsigned td_threshholding;
- unsigned td_orientation;
- unsigned td_samplesperpixel;
- unsigned td_predictor;
- unsigned long td_rowsperstrip;
- unsigned td_minsamplevalue, td_maxsamplevalue;
- float td_xresolution, td_yresolution;
- unsigned td_resolutionunit;
- unsigned td_planarconfig;
- float td_xposition, td_yposition;
- unsigned long td_group3options;
- unsigned long td_group4options;
- unsigned td_pagenumber;
- unsigned td_grayresponseunit;
- unsigned td_colorresponseunit;
- unsigned *td_grayresponsecurve;
- unsigned *td_redresponsecurve;
- unsigned *td_greenresponsecurve;
- unsigned *td_blueresponsecurve;
- unsigned *td_redcolormap;
- unsigned *td_greencolormap;
- unsigned *td_bluecolormap;
- char *td_documentname;
- char *td_artist;
- char *td_datetime;
- char *td_hostcomputer;
- char *td_imagedescription;
- char *td_make;
- char *td_model;
- char *td_software;
- char *td_pagename;
- unsigned long td_fieldsset[2]; /* bit vector of fields that are set */
- unsigned long td_stripsperimage;
- unsigned long td_nstrips; /* size of offset & bytecount arrays */
- unsigned long *td_stripoffset;
- unsigned long *td_stripbytecount;
- } TIFFDirectory;
-
-
- typedef struct
- {
- unsigned field_tag; /* field's tag */
- short field_count; /* expected item count */
- TIFFDataType field_type; /* type of associated data */
- unsigned field_bit; /* bit in fieldsset bit vector */
- char *field_name; /* ASCII name */
- } TIFFFieldInfo;
-
- /*
- Field flags used to indicate fields that have
- been set in a directory, and to reference fields
- when manipulating a directory.
- */
-
- /* multi-entry fields */
- #define FIELD_IMAGEDIMENSIONS 0
- #define FIELD_CELLDIMENSIONS 1
- #define FIELD_RESOLUTION 2
- #define FIELD_POSITION 3
-
- /* single-entry fields */
- #define FIELD_SUBFILETYPE 4
- #define FIELD_BITSPERSAMPLE 5
- #define FIELD_COMPRESSION 6
- #define FIELD_PHOTOMETRIC 7
- #define FIELD_THRESHHOLDING 8
- #define FIELD_FILLORDER 9
- #define FIELD_DOCUMENTNAME 10
- #define FIELD_IMAGEDESCRIPTION 11
- #define FIELD_MAKE 12
- #define FIELD_MODEL 13
- #define FIELD_ORIENTATION 14
- #define FIELD_SAMPLESPERPIXEL 15
- #define FIELD_ROWSPERSTRIP 16
- #define FIELD_MINSAMPLEVALUE 17
- #define FIELD_MAXSAMPLEVALUE 18
- #define FIELD_PLANARCONFIG 19
- #define FIELD_PAGENAME 20
- #define FIELD_GRAYRESPONSEUNIT 21
- #define FIELD_GRAYRESPONSECURVE 22
- #define FIELD_GROUP3OPTIONS 23
- #define FIELD_GROUP4OPTIONS 24
- #define FIELD_RESOLUTIONUNIT 25
- #define FIELD_PAGENUMBER 26
- #define FIELD_COLORRESPONSEUNIT 27
- #define FIELD_COLORRESPONSECURVE 28
- #define FIELD_STRIPBYTECOUNTS 29
- #define FIELD_STRIPOFFSETS 31
- #define FIELD_COLORMAP 32
- #define FIELD_PREDICTOR 33
- #define FIELD_ARTIST 34
- #define FIELD_DATETIME 35
- #define FIELD_HOSTCOMPUTER 36
- #define FIELD_SOFTWARE 37
- #define FIELD_MATTEING 38
- #define FIELD_LAST FIELD_MATTEING
-
- #define TIFFFieldSet(tif, field) \
- ((tif)->tif_dir.td_fieldsset[field/32] & (1L<<(field&0x1f)))
- #define TIFFSetFieldBit(tif, field) \
- ((tif)->tif_dir.td_fieldsset[field/32] |= (1L<<(field&0x1f)))
-
- typedef struct
- {
- char *tif_name; /* name of open file */
- int tif_fd; /* open file descriptor */
- int tif_mode; /* open mode (O_*) */
- int tif_flags;
- #define TIFF_DIRTYHEADER 0x1 /* header must be written on close */
- #define TIFF_DIRTYDIRECT 0x2 /* current directory must be written */
- #define TIFF_BUFFERSETUP 0x4 /* data buffers setup */
- #define TIFF_BEENWRITING 0x8 /* written 1+ scanlines to file */
- #define TIFF_SWAB 0x10 /* byte swap file information */
- long tif_diroff; /* file offset of current directory */
- long tif_nextdiroff; /* file offset of following directory */
- TIFFDirectory tif_dir; /* internal rep of current directory */
- TIFFHeader tif_header; /* file's header block */
- long tif_typeshift[6]; /* data type shift counts */
- long tif_typemask[6]; /* data type masks */
- long tif_row; /* current scanline */
- long tif_curstrip; /* current strip for read/write */
- long tif_curoff; /* current offset for read/write */
-
- /* compression scheme hooks */
- int (*tif_stripdecode)(void *);/* strip decoding routine (pre) */
- int (*tif_decoderow)(void *, char *, long); /* scanline decoding routine */
- int (*tif_stripencode)(void *);/* strip encoding routine (pre) */
- int (*tif_encoderow)(void *, char *, long);/* scanline encoding routine */
- int (*tif_encodestrip)(void *);/* strip encoding routine (post) */
- int (*tif_seek)(void *, long); /* position within a strip routine */
- int (*tif_cleanup)(void *); /* routine called to cleanup state */
- char *tif_data; /* compression scheme private data */
-
- /* input/output buffer */
- long tif_scanlinesize; /* # of bytes in a scanline */
- signed char *tif_rawdata; /* raw data buffer */
- long tif_rawdatasize; /* # of bytes in raw data buffer */
- signed char *tif_rawcp; /* current spot in raw buffer */
- long tif_rawcc; /* bytes unread from raw buffer */
- } TIFF;
-
- #ifndef NULL
- #define NULL 0
- #endif
- extern TIFF *TIFFOpen();
- #endif _TIFFIO_
-
- /* External Declarations */
-
- void TIFFWarning(char *module, char *fmt, ...);
- void TIFFError(char *module, char *fmt, ...);
- CompletionCode TIFFDefaultDirectory(TIFF *tif);
- void TIFFSwabShort(unsigned *wp);
- void TIFFSwabLong(unsigned long *lp);
- void TIFFSwabArrayOfShort(unsigned *wp, unsigned n);
- void TIFFSwabArrayOfLong(unsigned long *lp, unsigned n);
- CompletionCode TIFFReadDirectory(TIFF *tif);
- CompletionCode TIFFWriteDirectory(TIFF *tif);
- CompletionCode TIFFFlushData1(TIFF *tif);
- CompletionCode TIFFFlushData(TIFF *tif);
- void TIFFFreeDirectory(TIFF *tif);
- CompletionCode TIFFWriteSetup(register TIFF *tif);
- CompletionCode TIFFBufferSetup(register TIFF *tif);
- CompletionCode TIFFSetCompressionScheme(TIFF *tif, unsigned scheme);