123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- /* Copyright (C) 1995, 1996 Aladdin Enterprises. All rights reserved.
-
- This software is provided AS-IS with no warranty, either express or
- implied.
-
- This software is distributed under license and may not be copied,
- modified or distributed except as expressly authorized under the terms
- of the license contained in the file LICENSE in this distribution.
-
- For more information about licensing, please refer to
- http://www.ghostscript.com/licensing/. For information on
- commercial licensing, go to http://www.artifex.com/licensing/ or
- contact Artifex Software, Inc., 101 Lucas Valley Road #110,
- San Rafael, CA 94903, U.S.A., +1(415)492-9861.
- */
- /* $Id: gdevstc.h,v 1.5 2002/06/16 07:25:26 lpd Exp $*/
- /* Epson Stylus-Color Printer-Driver */
- #ifndef gdevstc_INCLUDED
- # define gdevstc_INCLUDED
- /***
- *** This holds most of the declarations used by gdevstc.c/stcolor.
- *** It should be included by the dithering-routines and should be
- *** modified to include the separately compilable routines.
- ***/
- /*** Ghostscript-Headers ***/
- #include "gdevprn.h"
- #include "gsparam.h"
- #include "gsstate.h"
- /*** Private Type for 32Bit-Pixels ***/
- #if arch_log2_sizeof_int < 2 /* int is too small */
- typedef unsigned long stc_pixel;
- #else /* int is sufficient */
- typedef unsigned int stc_pixel;
- #endif /* use int or long ? */
- /*** Auxillary-Device Structure ***/
- typedef struct stc_s {
- long flags; /* some mode-flags */
- int bits; /* the number of bits per component */
- const struct stc_dither_s *dither; /* dithering-mode */
- float *am; /* 3/9/16-E. vector/matrix */
- float *extc[4]; /* Given arrays for stccode */
- uint sizc[4]; /* Size of extcode-arrays */
- gx_color_value *code[4]; /* cv -> internal */
- float *extv[4]; /* Given arrays for stcvals */
- uint sizv[4]; /* Size of extvals-arrays */
- byte *vals[4]; /* internal -> dithering */
- stc_pixel white_run[3]; /* the white-pattern */
- stc_pixel white_end[3]; /* the white-Trailer */
- gs_param_string_array
- algorithms; /* Names of the available algorithms */
- gs_param_string escp_init; /* Initialization-Sequence */
- gs_param_string escp_release; /* Initialization-Sequence */
- int escp_width; /* Number of Pixels printed */
- int escp_height;/* Height send to the Printer */
- int escp_top; /* Top-Margin, send to the printer */
- int escp_bottom;/* Bottom-Margin, send to the printer */
- int alg_item; /* Size of the items used by the algorithm */
- int prt_buf; /* Number of buffers */
- int prt_size; /* Size of the Printer-buffer */
- int escp_size; /* Size of the ESC/P2-buffer */
- int seed_size; /* Size of the seed-buffers */
- int escp_u; /* print-resolution (3600 / ydpi )*/
- int escp_c; /* selected color */
- int escp_v; /* spacing within band */
- int escp_h; /* 3600 / xdpi */
- int escp_m; /* number of heads */
- int escp_lf; /* linefeed in units */
- int prt_y; /* print-coordinate */
- int stc_y; /* Next line 2b printed */
- int buf_y; /* Next line 2b loaded into the buffer */
- int prt_scans; /* number of lines printed */
- int *prt_width; /* Width of buffered lines */
- byte **prt_data; /* Buffered printer-lines */
- byte *escp_data; /* Buffer for ESC/P2-Data */
- byte *seed_row[4];/* Buffer for delta-row compression (prt_size) */
- } stc_t;
- /*** Main-Device Structure ***/
- typedef struct stcolor_device_s {
- gx_device_common;
- gx_prn_device_common;
- stc_t stc;
- } stcolor_device;
- #define STCDFLAG0 0x000001L /* Algorithm-Bit 0 */
- #define STCDFLAG1 0x000002L /* Algorithm-Bit 1 */
- #define STCDFLAG2 0x000004L /* Algorithm-Bit 2 */
- #define STCDFLAG3 0x000008L /* Algorithm-Bit 3 */
- #define STCDFLAG4 0x000010L /* Algorithm-Bit 4 */
- #define STCCMYK10 0x000020L /* CMYK10-Coding active */
- #define STCUNIDIR 0x000040L /* Unidirectional, if set */
- #define STCUWEAVE 0x000080L /* Hardware Microweave */
- #define STCNWEAVE 0x000100L /* Software Microweave disabled */
- #define STCOK4GO 0x000200L /* stc_put_params was o.k. */
- #define STCCOMP 0x000C00L /* RLE, Plain (>= 1.18) */
- #define STCPLAIN 0x000400L /* No compression */
- #define STCDELTA 0x000800L /* Delta-Row */
- #define STCMODEL 0x00f000L /* STC, ST800 */
- #define STCST800 0x001000L /* Monochrome-Variant */
- #define STCSTCII 0x002000L /* Stylus Color II */
- #define STCBAND 0x010000L /* Initialization defined */
- #define STCHEIGHT 0x020000L /* Page-Length set */
- #define STCWIDTH 0x040000L /* Page-Length set */
- #define STCTOP 0x080000L /* Top-Margin set */
- #define STCBOTTOM 0x100000L /* Bottom-Margin set */
- #define STCINIT 0x200000L /* Initialization defined */
- #define STCRELEASE 0x400000L /* Release defined */
- #define STCPRINT 0x800000L /* Data printed */
- /*** Datatype for the array of dithering-Algorithms ***/
- #define stc_proc_dither(name) \
- int name(stcolor_device *sdev,int npixel,byte *in,byte *buf,byte *out)
- typedef struct stc_dither_s {
- const char *name; /* Mode-Name for Dithering */
- stc_proc_dither((*fun));
- uint flags;
- uint bufadd;
- double minmax[2];
- } stc_dither_t;
- /*
- * Color-Values for the output
- */
- #define BLACK 1 /* in monochrome-Mode as well as in CMYK-Mode */
- #define RED 4 /* in RGB-Mode */
- #define GREEN 2
- #define BLUE 1
- #define CYAN 8 /* in CMYK-Mode */
- #define MAGENTA 4
- #define YELLOW 2
- /*** A Macro to ease Type-depending things with the stc_p-union ***/
- #define STC_TYPESWITCH(Dither,Action) \
- switch((Dither)->flags & STC_TYPE) { \
- case STC_BYTE: Action(byte); break; \
- case STC_LONG: Action(long); break; \
- default: Action(float); break;}
- /***
- *** MODIFY HERE to include your routine:
- ***
- *** 1. Declare it here
- *** 2. Add it to the definition of STC_MODI
- *** 3. Add your file to the dependency-list in the Makefile & devices.mak
- ***/
- /* Step 1. */
- stc_proc_dither(stc_gsmono); /* resides in gdevstc1.c */
- stc_proc_dither(stc_fs); /* resides in gdevstc2.c */
- stc_proc_dither(stc_fscmyk); /* resides in gdevstc2.c too */
- stc_proc_dither(stc_gsrgb); /* resides in gdevstc3.c */
- stc_proc_dither(stc_fs2); /* resides in gdevstc4.c */
- /* Values used to assemble flags */
- #define DeviceGray 1 /* ProcessColorModel = DeviceGray */
- #define DeviceRGB 3 /* ProcessColorModel = DeviceRGB */
- #define DeviceCMYK 4 /* ProcessColorModel = DeviceCMYK */
- #define STC_BYTE 8 /* Pass Bytes to the Dithering-Routine */
- #define STC_LONG 16 /* Pass Longs to the Dithering-Routine */
- #define STC_FLOAT 24 /* Pass Floats to the Dithering-Routine */
- #define STC_TYPE 24 /* all the type-bits */
- #define STC_CMYK10 32 /* Special 32-Bit CMYK-Coding */
- #define STC_DIRECT 64 /* Suppress conversion of Scanlines */
- #define STC_WHITE 128 /* Call Algorithm for white lines too (out == NULL) */
- #define STC_SCAN 256 /* multiply by number of scanlines in buffer */
- /* Step 2. */
- /* Items: 1. Name to activate it
- 2. Name of the dithering-function
- 3. Several flags ored together, including # of buffered scanlines
- 4. Additional buffer-space (bytes/longs/floats)
- 5. Array of double with minimum and maximum-value
- Keep the last line as it is.
- */
- #define STC_MODI \
- {"gsmono", stc_gsmono, DeviceGray|STC_BYTE,0,{0.0,1.0}},\
- {"gsrgb" , stc_gsrgb , DeviceRGB |STC_BYTE,0,{0.0,1.0}},\
- {"fsmono", stc_fs, \
- DeviceGray|STC_LONG|1*STC_SCAN,3+3*1,{0.0,16777215.0}},\
- {"fsrgb", stc_fs, \
- DeviceRGB |STC_LONG|1*STC_SCAN,3+3*3,{0.0,16777215.0}},\
- {"fsx4", stc_fs, \
- DeviceCMYK|STC_LONG|1*STC_SCAN,3+3*4,{0.0,16777215.0}},\
- {"fscmyk", stc_fscmyk, \
- DeviceCMYK|STC_LONG|1*STC_SCAN,3+3*4,{0.0,16777215.0}},\
- {"fs2", stc_fs2, \
- DeviceRGB |STC_BYTE|STC_WHITE|1*STC_SCAN,0,{0.0,255.0}},
- #ifndef X_DPI
- #define X_DPI 360
- #endif /* X_DPI */
- #ifndef Y_DPI
- #define Y_DPI 360
- #endif /* Y_DPI */
- #ifndef STC_L_MARGIN
- # define STC_L_MARGIN 0.125 /* yields 45 Pixel@360DpI */
- #endif /* STC_L_MARGIN */
- #ifndef STC_B_MARGIN
- # define STC_B_MARGIN 0.555 /* yields 198 Pixel@#60DpI (looses 1mm) */
- #endif /* STC_B_MARGIN */
- /*
- * Right-Margin: Should match maximum print-width of 8".
- */
- #ifndef STC_R_MARGIN
- # ifdef A4
- # define STC_R_MARGIN 0.175 /* Yields 63 Pixel@360DpI */
- # else
- # define STC_R_MARGIN 0.375 /* 135 Pixel */
- # endif
- #endif /* STC_R_MARGIN */
- #ifndef STC_T_MARGIN
- # define STC_T_MARGIN 0.125
- #endif /* STC_T_MARGIN */
- #endif
|