home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0040 - 0049 / ibm0040-0049 / ibm0040.tar / ibm0040 / IMGPROC.ZIP / C6TIFF.ZIP / TIFFIO.H < prev   
Encoding:
C/C++ Source or Header  |  1989-12-30  |  7.4 KB  |  204 lines

  1. /*
  2. Copyright (c) 1988 by Sam Leffler.
  3. All rights reserved.
  4.  
  5. Program ported to Turbo C by Craig A. Lindley 12/08/89
  6.  
  7. This file is provided for unrestricted use provided that this
  8. legend is included on all tape media and as a part of the
  9. software program in whole or part.  Users may copy, modify or
  10. distribute this file at will.
  11. */
  12.  
  13. #include <dos.h>
  14. #include <fcntl.h>
  15. #include <stdarg.h>
  16. #include "tiff.h"
  17.  
  18. #define  FALSE 0
  19. #define  TRUE  1
  20.  
  21. #ifndef _TIFFIO_
  22. #define _TIFFIO_
  23.  
  24. #ifndef _CompletionCode_
  25. #define _CompletionCode_
  26. typedef int CompletionCode;
  27. #endif
  28.  
  29.  
  30. /*
  31. Internal format of a TIFF directory entry.
  32. */
  33. typedef struct
  34. {
  35.    unsigned long td_subfiletype;
  36.    unsigned long td_imagewidth, td_imagelength;
  37.    unsigned td_bitspersample;
  38.    unsigned td_compression;
  39.    unsigned td_photometric;
  40.    unsigned td_threshholding;
  41.    unsigned td_orientation;
  42.    unsigned td_samplesperpixel;
  43.    unsigned td_predictor;
  44.    unsigned long td_rowsperstrip;
  45.    unsigned td_minsamplevalue, td_maxsamplevalue;
  46.    float    td_xresolution, td_yresolution;
  47.    unsigned td_resolutionunit;
  48.    unsigned td_planarconfig;
  49.    float    td_xposition, td_yposition;
  50.    unsigned long  td_group3options;
  51.    unsigned long  td_group4options;
  52.    unsigned td_pagenumber;
  53.    unsigned td_grayresponseunit;
  54.    unsigned td_colorresponseunit;
  55.    unsigned *td_grayresponsecurve;
  56.    unsigned *td_redresponsecurve;
  57.    unsigned *td_greenresponsecurve;
  58.    unsigned *td_blueresponsecurve;
  59.    unsigned *td_redcolormap;
  60.    unsigned *td_greencolormap;
  61.    unsigned *td_bluecolormap;
  62.    char     *td_documentname;
  63.    char     *td_artist;
  64.    char     *td_datetime;
  65.    char     *td_hostcomputer;
  66.    char     *td_imagedescription;
  67.    char     *td_make;
  68.    char     *td_model;
  69.    char     *td_software;
  70.    char     *td_pagename;
  71.    unsigned long  td_fieldsset[2];        /* bit vector of fields that are set */
  72.    unsigned long  td_stripsperimage;
  73.    unsigned long  td_nstrips;             /* size of offset & bytecount arrays */
  74.    unsigned long  *td_stripoffset;
  75.    unsigned long  *td_stripbytecount;
  76. } TIFFDirectory;
  77.  
  78.  
  79. typedef struct
  80. {
  81.    unsigned field_tag;       /* field's tag */
  82.    short    field_count;     /* expected item count */
  83.    TIFFDataType field_type;  /* type of associated data */
  84.    unsigned field_bit;       /* bit in fieldsset bit vector */
  85.    char    *field_name;      /* ASCII name */
  86. } TIFFFieldInfo;
  87.  
  88. /*
  89. Field flags used to indicate fields that have
  90. been set in a directory, and to reference fields
  91. when manipulating a directory.
  92. */
  93.  
  94. /* multi-entry fields */
  95. #define FIELD_IMAGEDIMENSIONS           0
  96. #define FIELD_CELLDIMENSIONS            1
  97. #define FIELD_RESOLUTION                2
  98. #define FIELD_POSITION                  3
  99.  
  100. /* single-entry fields */
  101. #define FIELD_SUBFILETYPE               4
  102. #define FIELD_BITSPERSAMPLE             5
  103. #define FIELD_COMPRESSION               6
  104. #define FIELD_PHOTOMETRIC               7
  105. #define FIELD_THRESHHOLDING             8
  106. #define FIELD_FILLORDER                 9
  107. #define FIELD_DOCUMENTNAME              10
  108. #define FIELD_IMAGEDESCRIPTION          11
  109. #define FIELD_MAKE                      12
  110. #define FIELD_MODEL                     13
  111. #define FIELD_ORIENTATION               14
  112. #define FIELD_SAMPLESPERPIXEL           15
  113. #define FIELD_ROWSPERSTRIP              16
  114. #define FIELD_MINSAMPLEVALUE            17
  115. #define FIELD_MAXSAMPLEVALUE            18
  116. #define FIELD_PLANARCONFIG              19
  117. #define FIELD_PAGENAME                  20
  118. #define FIELD_GRAYRESPONSEUNIT          21
  119. #define FIELD_GRAYRESPONSECURVE         22
  120. #define FIELD_GROUP3OPTIONS             23
  121. #define FIELD_GROUP4OPTIONS             24
  122. #define FIELD_RESOLUTIONUNIT            25
  123. #define FIELD_PAGENUMBER                26
  124. #define FIELD_COLORRESPONSEUNIT         27
  125. #define FIELD_COLORRESPONSECURVE        28
  126. #define FIELD_STRIPBYTECOUNTS           29
  127. #define FIELD_STRIPOFFSETS              31
  128. #define FIELD_COLORMAP                  32
  129. #define FIELD_PREDICTOR                 33
  130. #define FIELD_ARTIST                    34
  131. #define FIELD_DATETIME                  35
  132. #define FIELD_HOSTCOMPUTER              36
  133. #define FIELD_SOFTWARE                  37
  134. #define FIELD_MATTEING                  38
  135. #define FIELD_LAST                      FIELD_MATTEING
  136.  
  137. #define TIFFFieldSet(tif, field) \
  138.     ((tif)->tif_dir.td_fieldsset[field/32] & (1L<<(field&0x1f)))
  139. #define TIFFSetFieldBit(tif, field) \
  140.     ((tif)->tif_dir.td_fieldsset[field/32] |= (1L<<(field&0x1f)))
  141.  
  142. typedef struct
  143. {
  144.    char  *tif_name;                /* name of open file */
  145.    int  tif_fd;                    /* open file descriptor */
  146.    int  tif_mode;                  /* open mode (O_*) */
  147.    int  tif_flags;
  148. #define TIFF_DIRTYHEADER  0x1      /* header must be written on close */
  149. #define TIFF_DIRTYDIRECT  0x2      /* current directory must be written */
  150. #define TIFF_BUFFERSETUP  0x4      /* data buffers setup */
  151. #define TIFF_BEENWRITING  0x8      /* written 1+ scanlines to file */
  152. #define TIFF_SWAB         0x10     /* byte swap file information */
  153.    long tif_diroff;                /* file offset of current directory */
  154.    long tif_nextdiroff;            /* file offset of following directory */
  155.    TIFFDirectory tif_dir;          /* internal rep of current directory */
  156.    TIFFHeader tif_header;          /* file's header block */
  157.    long tif_typeshift[6];          /* data type shift counts */
  158.    long tif_typemask[6];           /* data type masks */
  159.    long tif_row;                   /* current scanline */
  160.    long tif_curstrip;              /* current strip for read/write */
  161.    long tif_curoff;                /* current offset for read/write */
  162.  
  163.    /* compression scheme hooks */
  164.    int  (*tif_stripdecode)(void *);/* strip decoding routine (pre) */
  165.    int  (*tif_decoderow)(void *, char *, long); /* scanline decoding routine */
  166.    int  (*tif_stripencode)(void *);/* strip encoding routine (pre) */
  167.    int  (*tif_encoderow)(void *, char *, long);/* scanline encoding routine */
  168.    int  (*tif_encodestrip)(void *);/* strip encoding routine (post) */
  169.    int  (*tif_seek)(void *, long); /* position within a strip routine */
  170.    int  (*tif_cleanup)(void *);    /* routine called to cleanup state */
  171.    char *tif_data;                 /* compression scheme private data */
  172.  
  173.    /* input/output buffer */
  174.    long tif_scanlinesize;          /* # of bytes in a scanline */
  175.    signed char *tif_rawdata;       /* raw data buffer */
  176.    long tif_rawdatasize;           /* # of bytes in raw data buffer */
  177.    signed char *tif_rawcp;         /* current spot in raw buffer */
  178.    long tif_rawcc;                 /* bytes unread from raw buffer */
  179. } TIFF;
  180.  
  181. #ifndef NULL
  182. #define NULL    0
  183. #endif
  184. extern  TIFF *TIFFOpen();
  185. #endif _TIFFIO_
  186.  
  187. /* External Declarations */
  188.  
  189. void TIFFWarning(char *module, char *fmt, ...);
  190. void TIFFError(char *module, char *fmt, ...);
  191. CompletionCode TIFFDefaultDirectory(TIFF *tif);
  192. void TIFFSwabShort(unsigned *wp);
  193. void TIFFSwabLong(unsigned long *lp);
  194. void TIFFSwabArrayOfShort(unsigned *wp, unsigned n);
  195. void TIFFSwabArrayOfLong(unsigned long *lp, unsigned n);
  196. CompletionCode TIFFReadDirectory(TIFF *tif);
  197. CompletionCode TIFFWriteDirectory(TIFF *tif);
  198. CompletionCode TIFFFlushData1(TIFF *tif);
  199. CompletionCode TIFFFlushData(TIFF *tif);
  200. void TIFFFreeDirectory(TIFF *tif);
  201. CompletionCode TIFFWriteSetup(register TIFF *tif);
  202. CompletionCode TIFFBufferSetup(register TIFF *tif);
  203. CompletionCode TIFFSetCompressionScheme(TIFF *tif, unsigned scheme);
  204.