home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / xloadimg.zip / xloadimage.4.1 / tiff / tiffioP.h < prev   
C/C++ Source or Header  |  1996-03-18  |  13KB  |  360 lines

  1. /* $Header: /usr/people/sam/tiff/libtiff/RCS/tiffioP.h,v 1.28 92/03/06 11:59:52 sam Exp $ */
  2.  
  3. /*
  4.  * Copyright (c) 1988, 1989, 1990, 1991, 1992 Sam Leffler
  5.  * Copyright (c) 1991, 1992 Silicon Graphics, Inc.
  6.  *
  7.  * Permission to use, copy, modify, distribute, and sell this software and 
  8.  * its documentation for any purpose is hereby granted without fee, provided
  9.  * that (i) the above copyright notices and this permission notice appear in
  10.  * all copies of the software and related documentation, and (ii) the names of
  11.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  12.  * publicity relating to the software without the specific, prior written
  13.  * permission of Sam Leffler and Silicon Graphics.
  14.  * 
  15.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  16.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  17.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  18.  * 
  19.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  20.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  21.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  24.  * OF THIS SOFTWARE.
  25.  */
  26.  
  27. #ifndef _TIFFIOP_
  28. #define    _TIFFIOP_
  29. /*
  30.  * ``Library-private'' definitions.
  31.  */
  32.  
  33.  
  34. #if defined(sun) || defined(sparc) || defined(stellar) || defined(MIPSEB) || defined(hpux) || defined(apollo) || defined(NeXT) || defined(_IBMR2)
  35. #define    BIGENDIAN    1
  36. #define    IEEEFP
  37. #endif /* sun || sparc || stellar || MIPSEB || hpux || apollo || NeXT || _IBMR2 */
  38.  
  39. /* MIPSEL = MIPS w/ Little Endian byte ordering (e.g. DEC 3100) */
  40. #if defined(MIPSEL)
  41. #define    BIGENDIAN    0
  42. #define    IEEEFP
  43. #endif /* MIPSEL */
  44.  
  45. #ifdef transputer
  46. #define    BIGENDIAN    0
  47. #define    IEEEFP            /* IEEE floating point supported */
  48. #endif /* transputer */
  49.  
  50. #if defined(m386) || defined(M_I86) || defined(i386)
  51. #define BIGENDIAN    0
  52. #define IEEEFP            /* IEEE floating point supported */
  53. #endif /* m386 || M_I86 || i386 */
  54.  
  55.  
  56. #include "tiffcompat.h"
  57. #include "tiff.h"
  58.  
  59. /*
  60.  * Internal format of a TIFF directory entry.
  61.  */
  62. typedef    struct {
  63.     u_long    td_fieldsset[2];    /* bit vector of fields that are set */
  64.  
  65.     u_long    td_imagewidth, td_imagelength, td_imagedepth;
  66.     u_long    td_tilewidth, td_tilelength, td_tiledepth;
  67.     u_short    td_subfiletype;
  68.     u_short    td_bitspersample;
  69.     u_short    td_sampleformat;
  70.     u_short    td_compression;
  71.     u_short    td_photometric;
  72.     u_short    td_threshholding;
  73.     u_short    td_fillorder;
  74.     u_short    td_orientation;
  75.     u_short    td_samplesperpixel;
  76.     u_short    td_predictor;
  77.     u_long    td_rowsperstrip;
  78.     u_long    td_minsamplevalue, td_maxsamplevalue;    /* XXX */
  79.     float    td_xresolution, td_yresolution;
  80.     u_short    td_resolutionunit;
  81.     u_short    td_planarconfig;
  82.     float    td_xposition, td_yposition;
  83.     u_long    td_group3options;
  84.     u_long    td_group4options;
  85.     u_short    td_pagenumber[2];
  86.     u_short    td_matteing;
  87.     u_short    td_cleanfaxdata;
  88.     u_short    td_badfaxrun;
  89.     u_long    td_badfaxlines;
  90.     u_short    *td_colormap[3];
  91.     u_short    td_halftonehints[2];
  92.     char    *td_documentname;
  93.     char    *td_artist;
  94.     char    *td_datetime;
  95.     char    *td_hostcomputer;
  96.     char    *td_imagedescription;
  97.     char    *td_make;
  98.     char    *td_model;
  99.     char    *td_software;
  100.     char    *td_pagename;
  101.     u_long    td_stripsperimage;
  102.     u_long    td_nstrips;        /* size of offset & bytecount arrays */
  103.     u_long    *td_stripoffset;
  104.     u_long    *td_stripbytecount;
  105. #ifdef YCBCR_SUPPORT
  106.     float    *td_ycbcrcoeffs;
  107.     u_short    td_ycbcrsubsampling[2];
  108.     u_short    td_ycbcrpositioning;
  109. #endif
  110. #ifdef JPEG_SUPPORT
  111.     u_short    td_jpegproc;
  112.     u_short    td_jpegrestartinterval;
  113.     u_char    **td_qtab;
  114.     u_char    **td_dctab;
  115.     u_char    **td_actab;
  116. #endif
  117. #ifdef COLORIMETRY_SUPPORT
  118.     float    *td_whitepoint;
  119.     float    *td_primarychromas;
  120.     float    *td_refblackwhite;
  121.     u_short    *td_transferfunction[4];
  122. #endif
  123. #ifdef CMYK_SUPPORT
  124.     u_short    td_inkset;
  125.     u_short    td_dotrange[2];
  126.     char    *td_inknames;
  127.     char    *td_targetprinter;
  128. #endif
  129. } TIFFDirectory;
  130.  
  131. /*
  132.  * Field flags used to indicate fields that have
  133.  * been set in a directory, and to reference fields
  134.  * when manipulating a directory.
  135.  */
  136. /* multi-entry fields */
  137. #define    FIELD_IMAGEDIMENSIONS        0
  138. #define FIELD_TILEDIMENSIONS        1
  139. #define    FIELD_CELLDIMENSIONS        2        /* XXX */
  140. #define    FIELD_RESOLUTION        3
  141. #define    FIELD_POSITION            4
  142. /* single-entry fields */
  143. #define    FIELD_SUBFILETYPE        5
  144. #define    FIELD_BITSPERSAMPLE        6
  145. #define    FIELD_COMPRESSION        7
  146. #define    FIELD_PHOTOMETRIC        8
  147. #define    FIELD_THRESHHOLDING        9
  148. #define    FIELD_FILLORDER            10
  149. #define    FIELD_DOCUMENTNAME        11
  150. #define    FIELD_IMAGEDESCRIPTION        12
  151. #define    FIELD_MAKE            13
  152. #define    FIELD_MODEL            14
  153. #define    FIELD_ORIENTATION        15
  154. #define    FIELD_SAMPLESPERPIXEL        16
  155. #define    FIELD_ROWSPERSTRIP        17
  156. #define    FIELD_MINSAMPLEVALUE        18
  157. #define    FIELD_MAXSAMPLEVALUE        19
  158. #define    FIELD_PLANARCONFIG        20
  159. #define    FIELD_PAGENAME            21
  160. #define    FIELD_GROUP3OPTIONS        22
  161. #define    FIELD_GROUP4OPTIONS        23
  162. #define    FIELD_RESOLUTIONUNIT        24
  163. #define    FIELD_PAGENUMBER        25
  164. #define    FIELD_STRIPBYTECOUNTS        26
  165. #define    FIELD_STRIPOFFSETS        27
  166. #define    FIELD_COLORMAP            28
  167. #define FIELD_PREDICTOR            29
  168. #define FIELD_ARTIST            30
  169. #define FIELD_DATETIME            31
  170. #define FIELD_HOSTCOMPUTER        32
  171. #define FIELD_SOFTWARE            33
  172. #define    FIELD_MATTEING            34
  173. #define    FIELD_BADFAXLINES        35
  174. #define    FIELD_CLEANFAXDATA        36
  175. #define    FIELD_BADFAXRUN            37
  176. #define FIELD_SAMPLEFORMAT        38
  177. #define    FIELD_SMINSAMPLEVALUE        39
  178. #define    FIELD_SMAXSAMPLEVALUE        40
  179. #define FIELD_IMAGEDEPTH        41
  180. #define FIELD_TILEDEPTH            42
  181. #define    FIELD_HALFTONEHINTS        43
  182. #ifdef YCBCR_SUPPORT
  183. #define FIELD_YCBCRCOEFFICIENTS        44
  184. #define FIELD_YCBCRSUBSAMPLING        45
  185. #define FIELD_YCBCRPOSITIONING        46
  186. #endif
  187. #ifdef JPEG_SUPPORT
  188. #define FIELD_JPEGPROC            47
  189. #define FIELD_JPEGRESTARTINTERVAL    48
  190. #define FIELD_JPEGQTABLES        49
  191. #define FIELD_JPEGDCTABLES        50
  192. #define FIELD_JPEGACTABLES        51
  193. #endif
  194. #ifdef COLORIMETRY_SUPPORT
  195. #define    FIELD_REFBLACKWHITE        52
  196. #define    FIELD_WHITEPOINT        53
  197. #define    FIELD_PRIMARYCHROMAS        54
  198. #define    FIELD_TRANSFERFUNCTION        55
  199. #endif
  200. #ifdef CMYK_SUPPORT
  201. #define    FIELD_INKSET            56
  202. #define    FIELD_INKNAMES            57
  203. #define    FIELD_DOTRANGE            58
  204. #define    FIELD_TARGETPRINTER        59
  205. #endif
  206. #define    FIELD_LAST            59
  207.  
  208. #define    TIFFExtractData(tif, type, v) \
  209.     ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \
  210.         ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : \
  211.     (v) & (tif)->tif_typemask[type])
  212. #define    TIFFInsertData(tif, type, v) \
  213.     ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \
  214.         ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : \
  215.     (v) & (tif)->tif_typemask[type])
  216.  
  217. typedef    struct {
  218.     u_short    field_tag;        /* field's tag */
  219.     short    field_readcount;    /* read count (-1 for unknown) */
  220.     short    field_writecount;    /* write count (-1 for unknown) */
  221.     TIFFDataType field_type;    /* type of associated data */
  222.     u_short    field_bit;        /* bit in fieldsset bit vector */
  223.     u_short    field_oktochange;    /* if true, can change while writing */
  224.     char    *field_name;        /* ASCII name */
  225. } TIFFFieldInfo;
  226.  
  227. #define    FIELD_IGNORE    ((u_short)-1)    /* tags processed but ignored */
  228.  
  229. #define    TIFF_ANY    TIFF_NOTYPE    /* for field descriptor searching */
  230. #define    TIFF_VARIABLE    -1        /* marker for variable length tags */
  231. #define    TIFF_SPP    -2        /* marker for SamplesPerPixel tags */
  232.  
  233. extern    const TIFFFieldInfo tiffFieldInfo[];/* table of field descriptors */
  234. extern    const int tiffDataWidth[];    /* table of tag datatype widths */
  235.  
  236. #define BITn(n)                (((unsigned)1L)<<((n)&0x1f)) 
  237. #define BITFIELDn(tif, n)        ((tif)->tif_dir.td_fieldsset[(n)/32]) 
  238. #define TIFFFieldSet(tif, field)    (BITFIELDn(tif, field) & BITn(field)) 
  239. #define TIFFSetFieldBit(tif, field)    (BITFIELDn(tif, field) |= BITn(field))
  240. #define TIFFClrFieldBit(tif, field)    (BITFIELDn(tif, field) &= ~BITn(field))
  241.  
  242. #define    FieldSet(fields, f)        (fields[(f)/32] & BITn(f))
  243. #define    ResetFieldBit(fields, f)    (fields[(f)/32] &= ~BITn(f))
  244.  
  245. struct tiff {
  246.     char    *tif_name;        /* name of open file */
  247.     short    tif_fd;            /* open file descriptor */
  248.     short    tif_mode;        /* open mode (O_*) */
  249.     char    tif_fillorder;        /* natural bit fill order for machine */
  250.     char    tif_options;        /* compression-specific options */
  251.     short    tif_flags;
  252. #define    TIFF_DIRTYHEADER    0x1    /* header must be written on close */
  253. #define    TIFF_DIRTYDIRECT    0x2    /* current directory must be written */
  254. #define    TIFF_BUFFERSETUP    0x4    /* data buffers setup */
  255. #define    TIFF_BEENWRITING    0x8    /* written 1+ scanlines to file */
  256. #define    TIFF_SWAB        0x10    /* byte swap file information */
  257. #define    TIFF_NOBITREV        0x20    /* inhibit bit reversal logic */
  258. #define    TIFF_MYBUFFER        0x40    /* my raw data buffer; free on close */
  259. #define    TIFF_ISTILED        0x80    /* file is tile, not strip- based */
  260. #define    TIFF_MAPPED        0x100    /* file is mapped into memory */
  261. #define    TIFF_POSTENCODE        0x200    /* need call to postencode routine */
  262.     long    tif_diroff;        /* file offset of current directory */
  263.     long    tif_nextdiroff;        /* file offset of following directory */
  264.     TIFFDirectory tif_dir;        /* internal rep of current directory */
  265.     TIFFHeader tif_header;        /* file's header block */
  266.     int const *tif_typeshift;    /* data type shift counts */
  267.     long const *tif_typemask;    /* data type masks */
  268.     long    tif_row;        /* current scanline */
  269.     int    tif_curdir;        /* current directory (index) */
  270.     int    tif_curstrip;        /* current strip for read/write */
  271.     long    tif_curoff;        /* current offset for read/write */
  272. /* tiling support */
  273.     long     tif_col;        /* current column (offset by row too) */
  274.     int     tif_curtile;        /* current tile for read/write */
  275.     long     tif_tilesize;        /* # of bytes in a tile */
  276. /* compression scheme hooks */
  277.     int    (*tif_predecode)();    /* pre row/strip/tile decoding */
  278.     int    (*tif_preencode)();    /* pre row/strip/tile encoding */
  279.     int    (*tif_postencode)();    /* post row/strip/tile encoding */
  280.     int    (*tif_decoderow)();    /* scanline decoding routine */
  281.     int    (*tif_encoderow)();    /* scanline encoding routine */
  282.     int    (*tif_decodestrip)();    /* strip decoding routine */
  283.     int    (*tif_encodestrip)();    /* strip encoding routine */
  284.     int    (*tif_decodetile)();    /* tile decoding routine */
  285.     int    (*tif_encodetile)();    /* tile encoding routine */
  286.     int    (*tif_close)();        /* cleanup-on-close routine */
  287.     int    (*tif_seek)();        /* position within a strip routine */
  288.     int    (*tif_cleanup)();    /* routine called to cleanup state */
  289.     char    *tif_data;        /* compression scheme private data */
  290. /* input/output buffering */
  291.     int    tif_scanlinesize;    /* # of bytes in a scanline */
  292.     int    tif_scanlineskew;    /* scanline skew for reading strips */
  293.     char    *tif_rawdata;        /* raw data buffer */
  294.     long    tif_rawdatasize;    /* # of bytes in raw data buffer */
  295.     char    *tif_rawcp;        /* current spot in raw buffer */
  296.     long    tif_rawcc;        /* bytes unread from raw buffer */
  297. #ifdef MMAP_SUPPORT
  298.     char*    tif_base;        /* base of mapped file */
  299.     long    tif_size;        /* size of mapped file region (bytes) */
  300. #endif
  301. };
  302.  
  303. #define    isTiled(tif)    (((tif)->tif_flags & TIFF_ISTILED) != 0)
  304. #ifdef MMAP_SUPPORT
  305. #define    isMapped(tif)    (((tif)->tif_flags & TIFF_MAPPED) != 0)
  306. #else
  307. #define    isMapped(tif)    0        /* force dead code */
  308. #endif
  309.  
  310. /* generic option bit names */
  311. #define    TIFF_OPT0    0x1
  312. #define    TIFF_OPT1    0x2
  313. #define    TIFF_OPT2    0x4
  314. #define    TIFF_OPT3    0x8
  315. #define    TIFF_OPT4    0x10
  316. #define    TIFF_OPT5    0x20
  317. #define    TIFF_OPT6    0x40
  318. #define    TIFF_OPT7    0x80
  319.  
  320. #include "tiffio.h"
  321.  
  322. /* NB: the u_int casts are to silence certain ANSI-C compilers */
  323. #ifdef howmany
  324. #undef howmany
  325. #endif
  326. #define    howmany(x, y)    ((((u_int)(x))+(((u_int)(y))-1))/((u_int)(y)))
  327. #ifdef roundup
  328. #undef roundup
  329. #endif
  330. #define    roundup(x, y)    (howmany(x,y)*((u_int)(y)))
  331.  
  332. #if defined(c_plusplus) || defined(__cplusplus) || defined(__STDC__) || USE_PROTOTYPES
  333. #if defined(__cplusplus)
  334. extern "C" {
  335. #endif
  336. extern    TIFFFieldInfo const *TIFFFindFieldInfo(u_short, TIFFDataType);
  337. extern    TIFFFieldInfo const *TIFFFieldWithTag(u_short);
  338. extern    int _TIFFgetfield(TIFFDirectory*, int, ...);
  339. extern    int TIFFNoRowEncode(TIFF*, u_char*, int, u_int);
  340. extern    int TIFFNoStripEncode(TIFF*, u_char*, int, u_int);
  341. extern    int TIFFNoTileEncode(TIFF*, u_char*, int, u_int);
  342. extern    int TIFFNoRowDecode(TIFF*, u_char*, int, u_int);
  343. extern    int TIFFNoStripDecode(TIFF*, u_char*, int, u_int);
  344. extern    int TIFFNoTileDecode(TIFF*, u_char*, int, u_int);
  345. #if defined(__cplusplus)
  346. }
  347. #endif
  348. #else
  349. extern    TIFFFieldInfo const *TIFFFindFieldInfo();
  350. extern    TIFFFieldInfo const *TIFFFieldWithTag();
  351. extern    int _TIFFgetfield();
  352. extern    int TIFFNoRowEncode();
  353. extern    int TIFFNoStripEncode();
  354. extern    int TIFFNoTileEncode();
  355. extern    int TIFFNoRowDecode();
  356. extern    int TIFFNoStripDecode();
  357. extern    int TIFFNoTileDecode();
  358. #endif
  359. #endif /* _TIFFIOP_ */
  360.