diff options
Diffstat (limited to 'driver/driver.h')
-rw-r--r-- | driver/driver.h | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/driver/driver.h b/driver/driver.h new file mode 100644 index 0000000..8cff244 --- /dev/null +++ b/driver/driver.h @@ -0,0 +1,249 @@ +/* + * "$Id: driver.h 7306 2008-02-15 00:52:38Z mike $" + * + * Printer driver utilities header file for CUPS. + * + * Copyright 2007 by Apple Inc. + * Copyright 1993-2005 by Easy Software Products. + * + * These coded instructions, statements, and computer programs are the + * property of Apple Inc. and are protected by Federal copyright + * law. Distribution and use rights are outlined in the file "LICENSE.txt" + * which should have been included with this file. If this file is + * file is missing or damaged, see the license at "http://www.cups.org/". + */ + +#ifndef _CUPS_DRIVER_H_ +# define _CUPS_DRIVER_H_ + +# ifdef __cplusplus +extern "C" { +# endif /* __cplusplus */ + +/* + * Include necessary headers... + */ + +# include <stdio.h> +# include <stdlib.h> +# include <time.h> +# include <math.h> + +# if defined(WIN32) || defined(__EMX__) +# include <io.h> +# else +# include <unistd.h> +# include <fcntl.h> +# endif /* WIN32 || __EMX__ */ + +# include <cups/cups.h> +# include <cups/raster.h> + + +/* + * Common macros... + */ + +# ifndef min +# define min(a,b) ((a) < (b) ? (a) : (b)) +# define max(a,b) ((a) > (b) ? (a) : (b)) +# endif /* !min */ + + +/* + * Constants... + */ + +#define CUPS_MAX_CHAN 15 /* Maximum number of color components */ +#define CUPS_MAX_LUT 4095 /* Maximum LUT value */ +#define CUPS_MAX_RGB 4 /* Maximum number of sRGB components */ + + +/* + * Types/structures for the various routines. + */ + +typedef struct cups_lut_s /**** Lookup Table for Dithering ****/ +{ + short intensity; /* Adjusted intensity */ + short pixel; /* Output pixel value */ + int error; /* Error from desired value */ +} cups_lut_t; + +typedef struct cups_dither_s /**** Dithering State ****/ +{ + int width; /* Width of buffer */ + int row; /* Current row */ + int errors[96]; /* Error values */ +} cups_dither_t; + +typedef struct cups_sample_s /**** Color sample point ****/ +{ + unsigned char rgb[3]; /* sRGB values */ + unsigned char colors[CUPS_MAX_RGB]; /* Color values */ +} cups_sample_t; + +typedef struct cups_rgb_s /**** Color separation lookup table ****/ +{ + int cube_size; /* Size of color cube (2-N) on a side */ + int num_channels; /* Number of colors per sample */ + unsigned char ****colors; /* 4-D array of sample values */ + int cube_index[256]; /* Index into cube for a given sRGB value */ + int cube_mult[256]; /* Multiplier value for a given sRGB value */ + int cache_init; /* Are cached values initialized? */ + unsigned char black[CUPS_MAX_RGB]; /* Cached black (sRGB = 0,0,0) */ + unsigned char white[CUPS_MAX_RGB]; /* Cached white (sRGB = 255,255,255) */ +} cups_rgb_t; + +typedef struct cups_cmyk_s /**** Simple CMYK lookup table ****/ +{ + unsigned char black_lut[256]; /* Black generation LUT */ + unsigned char color_lut[256]; /* Color removal LUT */ + int ink_limit; /* Ink limit */ + int num_channels; /* Number of components */ + short *channels[CUPS_MAX_CHAN]; + /* Lookup tables */ +} cups_cmyk_t; + + +/* + * Globals... + */ + +extern const unsigned char + cups_srgb_lut[256]; + /* sRGB gamma lookup table */ +extern const unsigned char + cups_scmy_lut[256]; + /* sRGB gamma lookup table (inverted) */ + + +/* + * Prototypes... + */ + +/* + * Attribute function... + */ + +extern ppd_attr_t *cupsFindAttr(ppd_file_t *ppd, const char *name, + const char *colormodel, + const char *media, + const char *resolution, + char *spec, int specsize); + +/* + * Byte checking functions... + */ + +extern int cupsCheckBytes(const unsigned char *, int); +extern int cupsCheckValue(const unsigned char *, int, + const unsigned char); + +/* + * Dithering functions... + */ + +extern void cupsDitherLine(cups_dither_t *d, const cups_lut_t *lut, + const short *data, int num_channels, + unsigned char *p); +extern cups_dither_t *cupsDitherNew(int width); +extern void cupsDitherDelete(cups_dither_t *); + +/* + * Lookup table functions for dithering... + */ + +extern cups_lut_t *cupsLutNew(int num_vals, const float *vals); +extern void cupsLutDelete(cups_lut_t *lut); +extern cups_lut_t *cupsLutLoad(ppd_file_t *ppd, + const char *colormodel, + const char *media, + const char *resolution, + const char *ink); + + +/* + * Bit packing functions... + */ + +extern void cupsPackHorizontal(const unsigned char *, + unsigned char *, int, + const unsigned char, const int); +extern void cupsPackHorizontal2(const unsigned char *, + unsigned char *, int, const int); +extern void cupsPackHorizontalBit(const unsigned char *, + unsigned char *, int, + const unsigned char, + const unsigned char); +extern void cupsPackVertical(const unsigned char *, unsigned char *, + int, const unsigned char, const int); + +/* + * Color separation functions... + */ + +extern void cupsRGBDelete(cups_rgb_t *rgb); +extern void cupsRGBDoGray(cups_rgb_t *rgb, + const unsigned char *input, + unsigned char *output, int num_pixels); +extern void cupsRGBDoRGB(cups_rgb_t *rgb, + const unsigned char *input, + unsigned char *output, int num_pixels); +extern cups_rgb_t *cupsRGBLoad(ppd_file_t *ppd, + const char *colormodel, + const char *media, + const char *resolution); +extern cups_rgb_t *cupsRGBNew(int num_samples, cups_sample_t *samples, + int cube_size, int num_channels); + +/* + * CMYK separation functions... + */ + +extern cups_cmyk_t *cupsCMYKNew(int num_channels); +extern void cupsCMYKDelete(cups_cmyk_t *cmyk); +extern void cupsCMYKDoBlack(const cups_cmyk_t *cmyk, + const unsigned char *input, + short *output, int num_pixels); +extern void cupsCMYKDoCMYK(const cups_cmyk_t *cmyk, + const unsigned char *input, + short *output, int num_pixels); +extern void cupsCMYKDoGray(const cups_cmyk_t *cmyk, + const unsigned char *input, + short *output, int num_pixels); +extern void cupsCMYKDoRGB(const cups_cmyk_t *cmyk, + const unsigned char *input, + short *output, int num_pixels); +extern cups_cmyk_t *cupsCMYKLoad(ppd_file_t *ppd, + const char *colormodel, + const char *media, + const char *resolution); +extern void cupsCMYKSetBlack(cups_cmyk_t *cmyk, + float lower, float upper); +extern void cupsCMYKSetCurve(cups_cmyk_t *cmyk, int channel, + int num_xypoints, + const float *xypoints); +extern void cupsCMYKSetGamma(cups_cmyk_t *cmyk, int channel, + float gamval, float density); +extern void cupsCMYKSetInkLimit(cups_cmyk_t *cmyk, float limit); +extern void cupsCMYKSetLtDk(cups_cmyk_t *cmyk, int channel, + float light, float dark); + + +/* + * Convenience macro for writing print data... + */ + +# define cupsWritePrintData(s,n) fwrite((s), 1, (n), stdout) + +# ifdef __cplusplus +} +# endif /* __cplusplus */ + +#endif /* !_CUPS_DRIVER_H_ */ + +/* + * End of "$Id: driver.h 7306 2008-02-15 00:52:38Z mike $". + */ + |