home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / src / tiff / tiffiop.h < prev    next >
C/C++ Source or Header  |  2002-11-10  |  12KB  |  279 lines

  1. /* $Header: /pack/cvsroots/wxwindows/wxWindows/src/tiff/tiffiop.h,v 1.3.2.1 2002/11/10 13:13:58 JS Exp $ */
  2.  
  3. /*
  4.  * Copyright (c) 1988-1997 Sam Leffler
  5.  * Copyright (c) 1991-1997 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.  * UNIX systems should run the configure script to generate
  34.  * a port.h file that reflects the system capabilities.
  35.  * Doing this obviates all the dreck done in tiffcomp.h.
  36.  */
  37. #if (defined(unix) || defined(__unix)) && !defined(__DJGPP__)
  38. #include "port.h"
  39. #include "tiffconf.h"
  40. #else
  41. #include "tiffconf.h"
  42. #include "tiffcomp.h"
  43. #endif
  44. #include "tiffio.h"
  45. #include "tif_dir.h"
  46.  
  47. #ifndef TRUE
  48. #define    TRUE    1
  49. #define    FALSE    0
  50. #endif
  51.  
  52. /*
  53.  * Typedefs for ``method pointers'' used internally.
  54.  */
  55. typedef    unsigned char tidataval_t;    /* internal image data value type */
  56. typedef    tidataval_t* tidata_t;        /* reference to internal image data */
  57.  
  58. typedef    void (*TIFFVoidMethod)(TIFF*);
  59. typedef    int (*TIFFBoolMethod)(TIFF*);
  60. typedef    int (*TIFFPreMethod)(TIFF*, tsample_t);
  61. typedef    int (LINKAGEMODE *TIFFCodeMethod)(TIFF*, tidata_t, tsize_t, tsample_t);
  62. typedef    int (LINKAGEMODE *TIFFSeekMethod)(TIFF*, uint32);
  63. typedef    void (LINKAGEMODE *TIFFPostMethod)(TIFF*, tidata_t, tsize_t);
  64. typedef    int (*TIFFVSetMethod)(TIFF*, ttag_t, va_list);
  65. typedef    int (*TIFFVGetMethod)(TIFF*, ttag_t, va_list);
  66. typedef    void (LINKAGEMODE *TIFFPrintMethod)(TIFF*, FILE*, long);
  67. typedef    uint32 (LINKAGEMODE *TIFFStripMethod)(TIFF*, uint32);
  68. typedef    void (LINKAGEMODE *TIFFTileMethod)(TIFF*, uint32*, uint32*);
  69.  
  70. struct tiff {
  71.     char*        tif_name;    /* name of open file */
  72.     int        tif_fd;        /* open file descriptor */
  73.     int        tif_mode;    /* open mode (O_*) */
  74.     uint32        tif_flags;
  75. #define    TIFF_FILLORDER        0x0003    /* natural bit fill order for machine */
  76. #define    TIFF_DIRTYHEADER    0x0004    /* header must be written on close */
  77. #define    TIFF_DIRTYDIRECT    0x0008    /* current directory must be written */
  78. #define    TIFF_BUFFERSETUP    0x0010    /* data buffers setup */
  79. #define    TIFF_CODERSETUP        0x0020    /* encoder/decoder setup done */
  80. #define    TIFF_BEENWRITING    0x0040    /* written 1+ scanlines to file */
  81. #define    TIFF_SWAB        0x0080    /* byte swap file information */
  82. #define    TIFF_NOBITREV        0x0100    /* inhibit bit reversal logic */
  83. #define    TIFF_MYBUFFER        0x0200    /* my raw data buffer; free on close */
  84. #define    TIFF_ISTILED        0x0400    /* file is tile, not strip- based */
  85. #define    TIFF_MAPPED        0x0800    /* file is mapped into memory */
  86. #define    TIFF_POSTENCODE        0x1000    /* need call to postencode routine */
  87. #define    TIFF_INSUBIFD        0x2000    /* currently writing a subifd */
  88. #define    TIFF_UPSAMPLED        0x4000    /* library is doing data up-sampling */
  89. #define    TIFF_STRIPCHOP        0x8000    /* enable strip chopping support */
  90.     toff_t        tif_diroff;    /* file offset of current directory */
  91.     toff_t        tif_nextdiroff;    /* file offset of following directory */
  92.     TIFFDirectory    tif_dir;    /* internal rep of current directory */
  93.     TIFFHeader    tif_header;    /* file's header block */
  94.         tidata_t        tif_clientdir;  /* client TIFF directory */
  95.     const int*    tif_typeshift;    /* data type shift counts */
  96.     const long*    tif_typemask;    /* data type masks */
  97.     uint32        tif_row;    /* current scanline */
  98.     tdir_t        tif_curdir;    /* current directory (index) */
  99.     tstrip_t    tif_curstrip;    /* current strip for read/write */
  100.     toff_t        tif_curoff;    /* current offset for read/write */
  101.     toff_t        tif_dataoff;    /* current offset for writing dir */
  102. #if SUBIFD_SUPPORT
  103.     uint16        tif_nsubifd;    /* remaining subifds to write */
  104.     toff_t        tif_subifdoff;    /* offset for patching SubIFD link */
  105. #endif
  106. /* tiling support */
  107.     uint32         tif_col;    /* current column (offset by row too) */
  108.     ttile_t        tif_curtile;    /* current tile for read/write */
  109.     tsize_t        tif_tilesize;    /* # of bytes in a tile */
  110. /* compression scheme hooks */
  111.     TIFFBoolMethod    tif_setupdecode;/* called once before predecode */
  112.     TIFFPreMethod    tif_predecode;    /* pre- row/strip/tile decoding */
  113.     TIFFBoolMethod    tif_setupencode;/* called once before preencode */
  114.     TIFFPreMethod    tif_preencode;    /* pre- row/strip/tile encoding */
  115.     TIFFBoolMethod    tif_postencode;    /* post- row/strip/tile encoding */
  116.     TIFFCodeMethod    tif_decoderow;    /* scanline decoding routine */
  117.     TIFFCodeMethod    tif_encoderow;    /* scanline encoding routine */
  118.     TIFFCodeMethod    tif_decodestrip;/* strip decoding routine */
  119.     TIFFCodeMethod    tif_encodestrip;/* strip encoding routine */
  120.     TIFFCodeMethod    tif_decodetile;    /* tile decoding routine */
  121.     TIFFCodeMethod    tif_encodetile;    /* tile encoding routine */
  122.     TIFFVoidMethod    tif_close;    /* cleanup-on-close routine */
  123.     TIFFSeekMethod    tif_seek;    /* position within a strip routine */
  124.     TIFFVoidMethod    tif_cleanup;    /* cleanup state routine */
  125.     TIFFStripMethod    tif_defstripsize;/* calculate/constrain strip size */
  126.     TIFFTileMethod    tif_deftilesize;/* calculate/constrain tile size */
  127.     tidata_t    tif_data;    /* compression scheme private data */
  128. /* input/output buffering */
  129.     tsize_t        tif_scanlinesize;/* # of bytes in a scanline */
  130.     tsize_t        tif_scanlineskew;/* scanline skew for reading strips */
  131.     tidata_t    tif_rawdata;    /* raw data buffer */
  132.     tsize_t        tif_rawdatasize;/* # of bytes in raw data buffer */
  133.     tidata_t    tif_rawcp;    /* current spot in raw buffer */
  134.     tsize_t        tif_rawcc;    /* bytes unread from raw buffer */
  135. /* memory-mapped file support */
  136.     tidata_t    tif_base;    /* base of mapped file */
  137.     toff_t        tif_size;    /* size of mapped file region (bytes) */
  138.     TIFFMapFileProc    tif_mapproc;    /* map file method */
  139.     TIFFUnmapFileProc tif_unmapproc;/* unmap file method */
  140. /* input/output callback methods */
  141.     thandle_t    tif_clientdata;    /* callback parameter */
  142.     TIFFReadWriteProc tif_readproc;    /* read method */
  143.     TIFFReadWriteProc tif_writeproc;/* write method */
  144.     TIFFSeekProc    tif_seekproc;    /* lseek method */
  145.     TIFFCloseProc    tif_closeproc;    /* close method */
  146.     TIFFSizeProc    tif_sizeproc;    /* filesize method */
  147. /* post-decoding support */
  148.     TIFFPostMethod    tif_postdecode;    /* post decoding routine */
  149. /* tag support */
  150.     TIFFFieldInfo**    tif_fieldinfo;    /* sorted table of registered tags */
  151.     int        tif_nfields;    /* # entries in registered tag table */
  152.     TIFFVSetMethod    tif_vsetfield;    /* tag set routine */
  153.     TIFFVGetMethod    tif_vgetfield;    /* tag get routine */
  154.     TIFFPrintMethod    tif_printdir;    /* directory print routine */
  155. };
  156.  
  157. #define    isPseudoTag(t)    (t > 0xffff)    /* is tag value normal or pseudo */
  158.  
  159. #define    isTiled(tif)    (((tif)->tif_flags & TIFF_ISTILED) != 0)
  160. #define    isMapped(tif)    (((tif)->tif_flags & TIFF_MAPPED) != 0)
  161. #define    isFillOrder(tif, o)    (((tif)->tif_flags & (o)) != 0)
  162. #define    isUpSampled(tif)    (((tif)->tif_flags & TIFF_UPSAMPLED) != 0)
  163. #define    TIFFReadFile(tif, buf, size) \
  164.     ((*(tif)->tif_readproc)((tif)->tif_clientdata,buf,size))
  165. #define    TIFFWriteFile(tif, buf, size) \
  166.     ((*(tif)->tif_writeproc)((tif)->tif_clientdata,buf,size))
  167. #define    TIFFSeekFile(tif, off, whence) \
  168.     ((*(tif)->tif_seekproc)((tif)->tif_clientdata,(toff_t)(off),whence))
  169. #define    TIFFCloseFile(tif) \
  170.     ((*(tif)->tif_closeproc)((tif)->tif_clientdata))
  171. #define    TIFFGetFileSize(tif) \
  172.     ((*(tif)->tif_sizeproc)((tif)->tif_clientdata))
  173. #define    TIFFMapFileContents(tif, paddr, psize) \
  174.     ((*(tif)->tif_mapproc)((tif)->tif_clientdata,paddr,psize))
  175. #define    TIFFUnmapFileContents(tif, addr, size) \
  176.     ((*(tif)->tif_unmapproc)((tif)->tif_clientdata,addr,size))
  177.  
  178. /*
  179.  * Default Read/Seek/Write definitions.
  180.  */
  181. #ifndef ReadOK
  182. #define    ReadOK(tif, buf, size) \
  183.     (TIFFReadFile(tif, (tdata_t) buf, (tsize_t) size) == (tsize_t) size)
  184. #endif
  185. #ifndef SeekOK
  186. #define    SeekOK(tif, off) \
  187.     (TIFFSeekFile(tif, (toff_t) off, SEEK_SET) == (toff_t) off)
  188. #endif
  189. #ifndef WriteOK
  190. #define    WriteOK(tif, buf, size) \
  191.     (TIFFWriteFile(tif, (tdata_t) buf, (tsize_t) size) == (tsize_t) size)
  192. #endif
  193.  
  194. /* NB: the uint32 casts are to silence certain ANSI-C compilers */
  195. #define    TIFFhowmany(x, y) ((((uint32)(x))+(((uint32)(y))-1))/((uint32)(y)))
  196. #define    TIFFroundup(x, y) (TIFFhowmany(x,y)*((uint32)(y)))
  197.  
  198. #if defined(__cplusplus)
  199. extern "C" {
  200. #endif
  201. extern    int _TIFFgetMode(const char*, const char*);
  202. extern    int _TIFFNoRowEncode(TIFF*, tidata_t, tsize_t, tsample_t);
  203. extern    int _TIFFNoStripEncode(TIFF*, tidata_t, tsize_t, tsample_t);
  204. extern    int _TIFFNoTileEncode(TIFF*, tidata_t, tsize_t, tsample_t);
  205. extern    int _TIFFNoRowDecode(TIFF*, tidata_t, tsize_t, tsample_t);
  206. extern    int _TIFFNoStripDecode(TIFF*, tidata_t, tsize_t, tsample_t);
  207. extern    int _TIFFNoTileDecode(TIFF*, tidata_t, tsize_t, tsample_t);
  208. extern    void _TIFFNoPostDecode(TIFF*, tidata_t, tsize_t);
  209. extern    int _TIFFNoSeek(TIFF*, uint32);
  210. extern    void _TIFFSwab16BitData(TIFF*, tidata_t, tsize_t);
  211. extern    void _TIFFSwab32BitData(TIFF*, tidata_t, tsize_t);
  212. extern    void _TIFFSwab64BitData(TIFF*, tidata_t, tsize_t);
  213. extern    int  TIFFFlushData1(TIFF*);
  214. extern    void  TIFFFreeDirectory(TIFF*);
  215. extern    int  TIFFDefaultDirectory(TIFF*);
  216. extern    int  TIFFSetCompressionScheme(TIFF*, int);
  217. extern    int  TIFFSetDefaultCompressionState(TIFF*);
  218. extern    uint32 _TIFFDefaultStripSize(TIFF*, uint32);
  219. extern    void _TIFFDefaultTileSize(TIFF*, uint32*, uint32*);
  220.  
  221. extern    void _TIFFsetByteArray(void**, void*, long);
  222. extern    void _TIFFsetString(char**, char*);
  223. extern    void _TIFFsetShortArray(uint16**, uint16*, long);
  224. extern    void _TIFFsetLongArray(uint32**, uint32*, long);
  225. extern    void _TIFFsetFloatArray(float**, float*, long);
  226. extern    void _TIFFsetDoubleArray(double**, double*, long);
  227.  
  228. extern    void _TIFFprintAscii(FILE*, const char*);
  229. extern    void _TIFFprintAsciiTag(FILE*, const char*, const char*);
  230.  
  231. GLOBALDATA(TIFFErrorHandler,_TIFFwarningHandler);
  232. GLOBALDATA(TIFFErrorHandler,_TIFFerrorHandler);
  233.  
  234. extern int TIFFInitDumpMode(TIFF*, int);
  235. #ifdef PACKBITS_SUPPORT
  236. extern    int TIFFInitPackBits(TIFF*, int);
  237. #endif
  238. #ifdef CCITT_SUPPORT
  239. extern    int TIFFInitCCITTRLE(TIFF*, int), TIFFInitCCITTRLEW(TIFF*, int);
  240. extern    int TIFFInitCCITTFax3(TIFF*, int), TIFFInitCCITTFax4(TIFF*, int);
  241. #endif
  242. #ifdef THUNDER_SUPPORT
  243. extern    int TIFFInitThunderScan(TIFF*, int);
  244. #endif
  245. #ifdef NEXT_SUPPORT
  246. extern    int TIFFInitNeXT(TIFF*, int);
  247. #endif
  248. #ifdef LZW_SUPPORT
  249. extern    int TIFFInitLZW(TIFF*, int);
  250. #endif
  251. #ifdef OJPEG_SUPPORT
  252. extern    int TIFFInitOJPEG(TIFF*, int);
  253. #endif
  254. #ifdef JPEG_SUPPORT
  255. extern    int TIFFInitJPEG(TIFF*, int);
  256. #endif
  257. #ifdef JBIG_SUPPORT
  258. extern    int TIFFInitJBIG(TIFF*, int);
  259. #endif
  260. #ifdef ZIP_SUPPORT
  261. extern    int TIFFInitZIP(TIFF*, int);
  262. #endif
  263. #ifdef PIXARLOG_SUPPORT
  264. extern    int TIFFInitPixarLog(TIFF*, int);
  265. #endif
  266. #ifdef LOGLUV_SUPPORT
  267. extern    int TIFFInitSGILog(TIFF*, int);
  268. #endif
  269. #ifdef VMS
  270. extern    const TIFFCodec _TIFFBuiltinCODECS[];
  271. #else
  272. extern    TIFFCodec _TIFFBuiltinCODECS[];
  273. #endif
  274.  
  275. #if defined(__cplusplus)
  276. }
  277. #endif
  278. #endif /* _TIFFIOP_ */
  279.