summaryrefslogtreecommitdiff
path: root/gs/base/gdevtifs.h
diff options
context:
space:
mode:
Diffstat (limited to 'gs/base/gdevtifs.h')
-rw-r--r--gs/base/gdevtifs.h219
1 files changed, 20 insertions, 199 deletions
diff --git a/gs/base/gdevtifs.h b/gs/base/gdevtifs.h
index 595209238..4deacbd3e 100644
--- a/gs/base/gdevtifs.h
+++ b/gs/base/gdevtifs.h
@@ -17,220 +17,41 @@
#ifndef gdevtifs_INCLUDED
# define gdevtifs_INCLUDED
-/* ================ TIFF specification ================ */
-
-/* Based on TIFF specification version 6.0 obtained from */
-/* sgi.com:graphics/tiff/TIFF6.ps.Z. */
-
-/*
- * The sizes of TIFF data types are system-independent. Therefore,
- * we cannot use short, long, etc., but must use types of known sizes.
- */
-#if arch_sizeof_short == 2
-typedef short TIFF_short; /* no plausible alternative */
-typedef unsigned short TIFF_ushort;
-
-#endif
-#if arch_sizeof_int == 4
-typedef int TIFF_long;
-typedef unsigned int TIFF_ulong;
-
-#else
-# if arch_sizeof_long == 4
-typedef long TIFF_long;
-typedef unsigned long TIFF_ulong;
-
-# endif
-#endif
-
-#define SWAP_SHORT(x)\
- x = x << 8 | x >> 8\
-
-/*
- * Define the TIFF file header.
- */
-typedef struct TIFF_header_s {
- TIFF_ushort magic; /* magic number (defines byte order) */
- TIFF_ushort version; /* TIFF version number */
- TIFF_ulong diroff; /* byte offset to first directory */
-} TIFF_header;
-
-#define TIFF_magic_big_endian 0x4d4d /* 'MM' */
-#define TIFF_magic_little_endian 0x4949 /* 'II' */
-
-#define TIFF_version_value 42
-
-/*
- * Define an individual entry in a TIFF directory. Within a directory,
- * the entries must be sorted by increasing tag value.
- *
- * The value field contains either the offset of the field data in the file,
- * or, if the value fits in 32 bits, the value itself, left-justified.
- * Field data may appear anywhere in the file, so long as each data block is
- * aligned on a 32-bit boundary and is disjoint from all other data blocks.
- */
-typedef struct TIFF_dir_entry_s {
- TIFF_ushort tag; /* TIFF_tag */
- TIFF_ushort type; /* TIFF_data_type */
- TIFF_ulong count; /* number of items (spec calls this 'length') */
- TIFF_ulong value; /* byte offset to field data, */
- /* or actual value if <=4 bytes */
-} TIFF_dir_entry;
-
-/*
- * Define the tag data type values.
- */
-typedef enum {
- TIFF_BYTE = 1, /* 8-bit unsigned integer */
- TIFF_ASCII = 2, /* 8-bit bytes with last byte null */
- TIFF_SHORT = 3, /* 16-bit unsigned integer */
- TIFF_LONG = 4, /* 32-bit unsigned integer */
- TIFF_RATIONAL = 5, /* 64-bit unsigned fraction */
- /* (ratio of two 32-bit unsigned integers) */
- TIFF_SBYTE = 6, /* 8-bit signed integer */
- TIFF_UNDEFINED = 7, /* 8-bit untyped data */
- TIFF_SSHORT = 8, /* 16-bit signed integer */
- TIFF_SLONG = 9, /* 32-bit signed integer */
- TIFF_SRATIONAL = 10, /* 64-bit signed fraction */
- /* (ratio of two 32-bit signed integers) */
- TIFF_FLOAT = 11, /* 32-bit IEEE floating point */
- TIFF_DOUBLE = 12, /* 64-bit IEEE floating point */
- /* A flag to indicate the value is indirect. */
- /* This is only used internally; it is not part of the */
- /* TIFF specification (although it should be!). */
- TIFF_INDIRECT = 128
-} TIFF_data_type;
-
-/*
- * Define the tag values we need. Note that this is only a very small subset
- * of all the values defined in the TIFF specification; we will add more
- * as the need arises.
- */
-typedef enum {
- TIFFTAG_SubFileType = 254, /* subfile data descriptor */
-#define SubFileType_reduced_image 0x1 /* reduced resolution version */
-#define SubFileType_page 0x2 /* one page of many */
-#define SubFileType_mask 0x4 /* transparency mask */
- TIFFTAG_ImageWidth = 256, /* image width in pixels */
- TIFFTAG_ImageLength = 257, /* image height in pixels */
- TIFFTAG_BitsPerSample = 258, /* bits per channel (sample) */
- TIFFTAG_Compression = 259, /* data compression technique */
-#define Compression_none 1 /* dump mode */
-#define Compression_CCITT_RLE 2 /* CCITT modified Huffman RLE */
-#define Compression_CCITT_T4 3 /* CCITT T.4 fax encoding */
-#define Compression_CCITT_T6 4 /* CCITT T.6 fax encoding */
-#define Compression_LZW 5 /* Lempel-Ziv & Welch */
-#define Compression_JPEG 6 /* !JPEG compression */
-#define Compression_NeXT 32766 /* NeXT 2-bit RLE */
-#define Compression_CCITT_RLEW 32771 /* #1 w/ word alignment */
-#define Compression_PackBits 32773 /* Macintosh RLE */
-#define Compression_Thunderscan 32809 /* ThunderScan RLE */
- TIFFTAG_Photometric = 262, /* photometric interpretation */
-#define Photometric_min_is_white 0 /* min value is white */
-#define Photometric_min_is_black 1 /* min value is black */
-#define Photometric_RGB 2 /* RGB color model */
-#define Photometric_palette 3 /* color map indexed */
-#define Photometric_mask 4 /* $holdout mask */
-#define Photometric_separated 5 /* !color separations */
-#define Photometric_YCbCr 6 /* !CCIR 601 */
-#define Photometric_CIE_Lab 8 /* !1976 CIE L*a*b* */
- TIFFTAG_FillOrder = 266, /* data order within a byte */
-#define FillOrder_MSB2LSB 1 /* most significant -> least */
-#define FillOrder_LSB2MSB 2 /* least significant -> most */
- TIFFTAG_StripOffsets = 273, /* offsets to data strips */
- TIFFTAG_Orientation = 274, /* +image Orientation */
-#define Orientation_top_left 1 /* row 0 top, col 0 lhs */
-#define Orientation_top_right 2 /* row 0 top, col 0 rhs */
-#define Orientation_bot_right 3 /* row 0 bottom, col 0 rhs */
-#define Orientation_bot_left 4 /* row 0 bottom, col 0 lhs */
-#define Orientation_left_top 5 /* row 0 lhs, col 0 top */
-#define Orientation_right_top 6 /* row 0 rhs, col 0 top */
-#define Orientation_right_bot 7 /* row 0 rhs, col 0 bottom */
-#define Orientation_left_bot 8 /* row 0 lhs, col 0 bottom */
- TIFFTAG_SamplesPerPixel = 277, /* samples per pixel */
- TIFFTAG_RowsPerStrip = 278, /* rows per strip of data */
- TIFFTAG_StripByteCounts = 279, /* bytes counts for strips */
- TIFFTAG_XResolution = 282, /* pixels/resolution in x */
- TIFFTAG_YResolution = 283, /* pixels/resolution in y */
- TIFFTAG_PlanarConfig = 284, /* storage organization */
-#define PlanarConfig_contig 1 /* single image plane */
-#define PlanarConfig_separate 2 /* separate planes of data */
- TIFFTAG_T4Options = 292, /* 32 flag bits */
-#define T4Options_2D_encoding 0x1 /* 2-dimensional coding */
-#define T4Options_uncompressed 0x2 /* data not compressed */
-#define T4Options_fill_bits 0x4 /* fill to byte boundary */
- TIFFTAG_T6Options = 293, /* 32 flag bits */
-#define T6Options_uncompressed 0x2 /* data not compressed */
- TIFFTAG_ResolutionUnit = 296, /* units of resolutions */
-#define ResolutionUnit_none 1 /* no meaningful units */
-#define ResolutionUnit_inch 2 /* english */
-#define ResolutionUnit_centimeter 3 /* metric */
- TIFFTAG_PageNumber = 297, /* page number if multi-page */
- TIFFTAG_Software = 305, /* software name & release */
- TIFFTAG_DateTime = 306, /* creation date and time */
- /*
- * The CleanFaxData tag isn't in the TIFF 6 documentation, and many
- * TIFF-reading applications don't recognize it. Don't use it!
- */
- TIFFTAG_CleanFaxData = 327 /* regenerated line info */
-#define CleanFaxData_clean 0 /* no errors detected */
-#define CleanFaxData_regenerated 1 /* receiver regenerated lines */
-#define CleanFaxData_unclean 2 /* uncorrected errors exist */
-} TIFF_tag;
+#include <tiffio.h> /* must be first, because gdevio.h re-#defines "printf"
+ which is used in a function __attribute__ by
+ tiffio.h */
+#include "gdevprn.h"
/* ================ Implementation ================ */
-/*
- * Define the added driver state for TIFF writing. Note that we provide
- * no GC descriptor, so this structure must exist only on the stack,
- * never in allocated storage.
- */
-typedef struct gdev_tiff_state_s {
- gs_memory_t *mem;
- long prev_dir; /* file offset of previous directory offset */
- long dir_off; /* file offset of next write */
- int ntags; /* # of tags in directory */
- long strip_index; /* current strip being output, 0 = first */
- long strip_count;
- long rows;
- /* Record offsets of values - these may be indirect if more than one strip */
- int offset_StripOffsets;
- int offset_StripByteCounts;
- TIFF_ulong *StripOffsets;
- TIFF_ulong *StripByteCounts;
-} gdev_tiff_state;
-
typedef struct gx_device_tiff_s {
gx_device_common;
gx_prn_device_common;
bool BigEndian; /* true = big endian; false = little endian*/
- gdev_tiff_state tiff;
+
+ TIFF *tif; /* TIFF file opened on gx_device_common.file */
} gx_device_tiff;
+dev_proc_output_page(tiff_output_page);
+dev_proc_open_device(tiff_open);
+dev_proc_close_device(tiff_close);
dev_proc_get_params(tiff_get_params);
dev_proc_put_params(tiff_put_params);
/*
- * Begin writing a TIFF page. This procedure supplies a standard set of
- * tags; the client can provide additional tags (pre-sorted) and
- * indirect values.
+ * Open a TIFF file for writing from a file descriptor.
*/
-int gdev_tiff_begin_page(gx_device_printer * pdev, gdev_tiff_state * tifs,
- FILE * fp,
- const TIFF_dir_entry * entries, int entry_count,
- const byte * values, int value_size,
- long max_strip_size, bool swap_bytes);
+TIFF * tiff_from_filep(const char *name, FILE *filep, int big_endian);
-/*
- * Finish writing a TIFF strip. All data written since begin or last
- * end_strip is considered to be a single strip.
- */
-int gdev_tiff_end_strip(gdev_tiff_state * tifs, FILE * fp);
+int tiff_print_page(gx_device_printer *dev, TIFF *tif);
+
+int tiff_set_fields_for_printer(gx_device_printer *pdev,
+ TIFF *tif,
+ long max_strip_size);
+
+int gdev_tiff_begin_page(gx_device_tiff *tfdev,
+ FILE *file,
+ long max_strip_size);
-/*
- * Finish writing a TIFF page. StripOffsets and StripByteCounts are
- * patched into the file.
- */
-int gdev_tiff_end_page(gdev_tiff_state * tifs, FILE * fp, bool swap_bytes);
#endif /* gdevtifs_INCLUDED */