123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- /*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
- /* $XConsortium: iltiffint.h /main/4 1995/12/19 16:55:04 cde-dec $ */
- #ifndef ILTIFFINT_H
- #define ILTIFFINT_H
- /* PRIVATE definitions shared between /ilc/iltiff*.c files.
- NO OTHER CODE SHOULD INCLUDE THIS FILE !
- */
- #ifndef ILINT_H
- #include "ilint.h"
- #endif
- #ifndef ILFILE_H
- #include "ilfile.h"
- #endif
- #ifdef DTLIB
- /* Used when this header is compiled into the DtHelp library */
- #include "GraphicsP.h"
- #endif /* DTLIB */
- /* Defines for values of tag IL_TAG_PRIVATE_0 (34209). This is a private tag
- read and (sometimes) written by the IL. The tag is extensible; it is variable
- length, and the data in the tag depends on the flags. The values are always
- an array of shorts, as follows:
- IL_TAG_P0_FLAGS array of 16 bits. Only bit 0 is defined as follows;
- all other bits must be zero:
- IL_TAG_P0_FLAG_DITHER_LEVELS ignored if the image is not a palette image; else
- image was dithered / error diffused. The red/green/blue
- levels are stored in offsets 1..3; tag must be at least
- IL_TAG_P0_DITHER_LEVELS_LENGTH shorts long.
- */
- #define IL_TAG_P0_FLAGS 0
- #define IL_TAG_P0_FLAG_DITHER_LEVELS (1<<0)
- #define IL_TAG_P0_DITHER_LEVELS_LENGTH 4
- /* Size in bytes of one item (# items = TIFF "length"), for each TIFF tag type.
- Also, # of entries of that type which fit in one long.
- Indexed by tag type = 1..IL_MAX_TAG_TYPE (0 entry unused).
- */
- IL_EXTERN int _ilTagTypeItemSizes [];
- IL_EXTERN int _ilTagTypeItemsThatFit [];
- /* How a file image relates to its brethren. */
- typedef enum {mainImage, childImage, maskImage} ilFileImageRelation;
- /* One TIFF file tag, as it appears in a TIFF file. */
- typedef struct {
- unsigned short number;
- unsigned short type;
- /* compatibility problem with long and unsigned long data fields */
- CARD32 length;
- union {
- char chars[4];
- unsigned short shorts[2];
- /* compatibility problem with long and unsigned long data fields */
- INT32 aLong;
- CARD32 offset;
- } data;
- } ilTIFFTagRec, *ilTIFFTagPtr;
- #define IL_TAG_SIZE (sizeof (ilTIFFTagRec))
- typedef CARD32 ilFileOffset; /* a file offset, i.e. byte location */
- /* Private definition of object ilFileImage.
- This identifies one "IFD" = Image File Directory - not a directory at all,
- it is the header for a file image: # of tags, list of tags, offset to next IFD.
- */
- typedef struct {
- ilFileImagePublicRec p; /* public part: MUST BE FIRST */
- ilContext context; /* context for this file image */
- ilFileImageRelation imageType; /* main/child/maskImage */
- short tagCount; /* # of tags for this image */
- ilFileOffset tagOffset; /* file offset to first tag */
- } ilFileImageRec, *ilFileImagePtr;
- /* Private definition of object ilFile.
- The file exists at byte offset "offset" within "*file".
- See the TIFF spec for a description of TIFF tiles.
- "haveImageList" is true iff there is a *valid* image list;
- there may be a non-null list if false. The list is invalidated
- when a write to the file is done.
- */
- typedef struct _ilFileRec {
- ilObjectRec o; /* std header: MUST BE FIRST */
- #ifdef DTLIB
- /* Used when this header is compiled into the DtHelp library */
- _DtGrStream *stream; /* stream handle */
- #else
- FILE *stream; /* stdio file handle */
- #endif /* DTLIB */
- ilFileOffset offset; /* offset to start of TIFF data within file */
- ilBool bigEndian; /* true: "MM" file; false: "II" file */
- ilFileOffset IFDTailPtrOffset; /* offset of last IFD ptr */
- ilBool haveImageList; /* see above */
- ilFileImagePtr pFileImageHead,
- pFileImageTail; /* ptr to head/tail of file image list */
- } ilFileRec, *ilFilePtr;
- /* Converts the 4 TIFF bytes at "_4b" to a long, returned to the long "_long",
- based on the byte order specified by "_bigEndian" (TRUE == Motorola order).
- Note that the 4 bytes are not necessarily on a long boundary,
- so they must be shifted up in case long alignment is required.
- */
- /* compatibility problem with long and unsigned long data fields */
- #define IL_FLIP_LONG(_bigEndian, _4b, _long) { \
- CARD32 _l; \
- if (_bigEndian) { \
- _l = *((ilPtr)(_4b)+0); _l <<= 8; \
- _l |= *((ilPtr)(_4b)+1); _l <<= 8; \
- _l |= *((ilPtr)(_4b)+2); _l <<= 8; \
- _l |= *((ilPtr)(_4b)+3); \
- } \
- else { \
- _l = *((ilPtr)(_4b)+3); _l <<= 8; \
- _l |= *((ilPtr)(_4b)+2); _l <<= 8; \
- _l |= *((ilPtr)(_4b)+1); _l <<= 8; \
- _l |= *((ilPtr)(_4b)+0); \
- } \
- (_long) = _l; \
- }
- /* Same for a short.
- */
- #define IL_FLIP_SHORT(_bigEndian, _2b, _short) {\
- unsigned short _s; \
- if (_bigEndian) { \
- _s = *((ilPtr)(_2b)+0); _s <<= 8; \
- _s |= *((ilPtr)(_2b)+1); \
- } \
- else { \
- _s = *((ilPtr)(_2b)+1); _s <<= 8; \
- _s |= *((ilPtr)(_2b)+0); \
- } \
- (_short) = _s; \
- }
- /* Seek to the given offset within the given file, taking into
- account the offset at which the logical file begins.
- Returns true if seek successful, else false.
- */
- #ifdef DTLIB
- /* Used when this header is compiled into the DtHelp library */
- #define IL_SEEK(_pFile, _offset) \
- ( _DtGrSeek ((_pFile)->stream, (_pFile)->offset + (_offset), 0) == 0 )
- #else
- #define IL_SEEK(_pFile, _offset) \
- ( fseek ((_pFile)->stream, (_pFile)->offset + (_offset), 0) == 0 )
- #endif /* DTLIB */
- /* Read the given number of bytes into the given buffer.
- All read macros return true if read successful, else false.
- */
- #ifdef DTLIB
- /* Used when this header is compiled into the DtHelp library */
- #define IL_READ(_pFile, _nBytes, _pBuffer) \
- ( (_DtGrRead ((char *)(_pBuffer), _nBytes, 1, (_pFile)->stream) == 1) ? \
- TRUE : FALSE )
- #else
- #define IL_READ(_pFile, _nBytes, _pBuffer) \
- ( (_DtGrRead ((char *)(_pBuffer), _nBytes, 1, (_pFile)->stream) == 1) ? \
- TRUE : FALSE )
- #endif /* DTLIB */
- /* Write the given number of bytes into the given buffer.
- Returns true if read successful, else false.
- */
- #define IL_WRITE(_pFile, _nBytes, _pBuffer) \
- ( (fwrite ((char *)(_pBuffer), _nBytes, 1, (_pFile)->stream) == 1) ? \
- TRUE : FALSE )
- #endif
|