1 /* Copyright (C) 1995, 1996 Aladdin Enterprises. All rights reserved. 2 3 This software is provided AS-IS with no warranty, either express or 4 implied. 5 6 This software is distributed under license and may not be copied, 7 modified or distributed except as expressly authorized under the terms 8 of the license contained in the file LICENSE in this distribution. 9 10 For more information about licensing, please refer to 11 http://www.ghostscript.com/licensing/. For information on 12 commercial licensing, go to http://www.artifex.com/licensing/ or 13 contact Artifex Software, Inc., 101 Lucas Valley Road #110, 14 San Rafael, CA 94903, U.S.A., +1(415)492-9861. 15 */ 16 17 /* $Id: gdevstc.h,v 1.5 2002/06/16 07:25:26 lpd Exp $*/ 18 /* Epson Stylus-Color Printer-Driver */ 19 #ifndef gdevstc_INCLUDED 20 # define gdevstc_INCLUDED 21 22 /*** 23 *** This holds most of the declarations used by gdevstc.c/stcolor. 24 *** It should be included by the dithering-routines and should be 25 *** modified to include the separately compilable routines. 26 ***/ 27 28 /*** Ghostscript-Headers ***/ 29 30 #include "gdevprn.h" 31 #include "gsparam.h" 32 #include "gsstate.h" 33 34 /*** Private Type for 32Bit-Pixels ***/ 35 #if arch_log2_sizeof_int < 2 /* int is too small */ 36 typedef unsigned long stc_pixel; 37 #else /* int is sufficient */ 38 typedef unsigned int stc_pixel; 39 #endif /* use int or long ? */ 40 41 /*** Auxillary-Device Structure ***/ 42 43 typedef struct stc_s { 44 long flags; /* some mode-flags */ 45 int bits; /* the number of bits per component */ 46 const struct stc_dither_s *dither; /* dithering-mode */ 47 float *am; /* 3/9/16-E. vector/matrix */ 48 49 float *extc[4]; /* Given arrays for stccode */ 50 uint sizc[4]; /* Size of extcode-arrays */ 51 gx_color_value *code[4]; /* cv -> internal */ 52 53 float *extv[4]; /* Given arrays for stcvals */ 54 uint sizv[4]; /* Size of extvals-arrays */ 55 byte *vals[4]; /* internal -> dithering */ 56 57 stc_pixel white_run[3]; /* the white-pattern */ 58 stc_pixel white_end[3]; /* the white-Trailer */ 59 gs_param_string_array 60 algorithms; /* Names of the available algorithms */ 61 62 gs_param_string escp_init; /* Initialization-Sequence */ 63 gs_param_string escp_release; /* Initialization-Sequence */ 64 int escp_width; /* Number of Pixels printed */ 65 int escp_height;/* Height send to the Printer */ 66 int escp_top; /* Top-Margin, send to the printer */ 67 int escp_bottom;/* Bottom-Margin, send to the printer */ 68 69 int alg_item; /* Size of the items used by the algorithm */ 70 71 int prt_buf; /* Number of buffers */ 72 int prt_size; /* Size of the Printer-buffer */ 73 int escp_size; /* Size of the ESC/P2-buffer */ 74 int seed_size; /* Size of the seed-buffers */ 75 76 int escp_u; /* print-resolution (3600 / ydpi )*/ 77 int escp_c; /* selected color */ 78 int escp_v; /* spacing within band */ 79 int escp_h; /* 3600 / xdpi */ 80 int escp_m; /* number of heads */ 81 int escp_lf; /* linefeed in units */ 82 83 int prt_y; /* print-coordinate */ 84 int stc_y; /* Next line 2b printed */ 85 int buf_y; /* Next line 2b loaded into the buffer */ 86 int prt_scans; /* number of lines printed */ 87 88 89 int *prt_width; /* Width of buffered lines */ 90 byte **prt_data; /* Buffered printer-lines */ 91 byte *escp_data; /* Buffer for ESC/P2-Data */ 92 byte *seed_row[4];/* Buffer for delta-row compression (prt_size) */ 93 94 } stc_t; 95 96 /*** Main-Device Structure ***/ 97 98 typedef struct stcolor_device_s { 99 gx_device_common; 100 gx_prn_device_common; 101 stc_t stc; 102 } stcolor_device; 103 104 #define STCDFLAG0 0x000001L /* Algorithm-Bit 0 */ 105 #define STCDFLAG1 0x000002L /* Algorithm-Bit 1 */ 106 #define STCDFLAG2 0x000004L /* Algorithm-Bit 2 */ 107 #define STCDFLAG3 0x000008L /* Algorithm-Bit 3 */ 108 #define STCDFLAG4 0x000010L /* Algorithm-Bit 4 */ 109 #define STCCMYK10 0x000020L /* CMYK10-Coding active */ 110 111 #define STCUNIDIR 0x000040L /* Unidirectional, if set */ 112 #define STCUWEAVE 0x000080L /* Hardware Microweave */ 113 #define STCNWEAVE 0x000100L /* Software Microweave disabled */ 114 115 #define STCOK4GO 0x000200L /* stc_put_params was o.k. */ 116 117 #define STCCOMP 0x000C00L /* RLE, Plain (>= 1.18) */ 118 #define STCPLAIN 0x000400L /* No compression */ 119 #define STCDELTA 0x000800L /* Delta-Row */ 120 121 #define STCMODEL 0x00f000L /* STC, ST800 */ 122 #define STCST800 0x001000L /* Monochrome-Variant */ 123 #define STCSTCII 0x002000L /* Stylus Color II */ 124 125 #define STCBAND 0x010000L /* Initialization defined */ 126 #define STCHEIGHT 0x020000L /* Page-Length set */ 127 #define STCWIDTH 0x040000L /* Page-Length set */ 128 #define STCTOP 0x080000L /* Top-Margin set */ 129 #define STCBOTTOM 0x100000L /* Bottom-Margin set */ 130 #define STCINIT 0x200000L /* Initialization defined */ 131 #define STCRELEASE 0x400000L /* Release defined */ 132 133 #define STCPRINT 0x800000L /* Data printed */ 134 135 /*** Datatype for the array of dithering-Algorithms ***/ 136 137 #define stc_proc_dither(name) \ 138 int name(stcolor_device *sdev,int npixel,byte *in,byte *buf,byte *out) 139 140 typedef struct stc_dither_s { 141 const char *name; /* Mode-Name for Dithering */ 142 stc_proc_dither((*fun)); 143 uint flags; 144 uint bufadd; 145 double minmax[2]; 146 } stc_dither_t; 147 148 /* 149 * Color-Values for the output 150 */ 151 #define BLACK 1 /* in monochrome-Mode as well as in CMYK-Mode */ 152 #define RED 4 /* in RGB-Mode */ 153 #define GREEN 2 154 #define BLUE 1 155 #define CYAN 8 /* in CMYK-Mode */ 156 #define MAGENTA 4 157 #define YELLOW 2 158 159 /*** A Macro to ease Type-depending things with the stc_p-union ***/ 160 161 #define STC_TYPESWITCH(Dither,Action) \ 162 switch((Dither)->flags & STC_TYPE) { \ 163 case STC_BYTE: Action(byte); break; \ 164 case STC_LONG: Action(long); break; \ 165 default: Action(float); break;} 166 167 /*** 168 *** MODIFY HERE to include your routine: 169 *** 170 *** 1. Declare it here 171 *** 2. Add it to the definition of STC_MODI 172 *** 3. Add your file to the dependency-list in the Makefile & devices.mak 173 ***/ 174 175 /* Step 1. */ 176 stc_proc_dither(stc_gsmono); /* resides in gdevstc1.c */ 177 stc_proc_dither(stc_fs); /* resides in gdevstc2.c */ 178 stc_proc_dither(stc_fscmyk); /* resides in gdevstc2.c too */ 179 stc_proc_dither(stc_gsrgb); /* resides in gdevstc3.c */ 180 stc_proc_dither(stc_fs2); /* resides in gdevstc4.c */ 181 182 183 /* Values used to assemble flags */ 184 #define DeviceGray 1 /* ProcessColorModel = DeviceGray */ 185 #define DeviceRGB 3 /* ProcessColorModel = DeviceRGB */ 186 #define DeviceCMYK 4 /* ProcessColorModel = DeviceCMYK */ 187 188 #define STC_BYTE 8 /* Pass Bytes to the Dithering-Routine */ 189 #define STC_LONG 16 /* Pass Longs to the Dithering-Routine */ 190 #define STC_FLOAT 24 /* Pass Floats to the Dithering-Routine */ 191 #define STC_TYPE 24 /* all the type-bits */ 192 193 #define STC_CMYK10 32 /* Special 32-Bit CMYK-Coding */ 194 #define STC_DIRECT 64 /* Suppress conversion of Scanlines */ 195 #define STC_WHITE 128 /* Call Algorithm for white lines too (out == NULL) */ 196 #define STC_SCAN 256 /* multiply by number of scanlines in buffer */ 197 198 /* Step 2. */ 199 /* Items: 1. Name to activate it 200 2. Name of the dithering-function 201 3. Several flags ored together, including # of buffered scanlines 202 4. Additional buffer-space (bytes/longs/floats) 203 5. Array of double with minimum and maximum-value 204 Keep the last line as it is. 205 */ 206 207 #define STC_MODI \ 208 {"gsmono", stc_gsmono, DeviceGray|STC_BYTE,0,{0.0,1.0}},\ 209 {"gsrgb" , stc_gsrgb , DeviceRGB |STC_BYTE,0,{0.0,1.0}},\ 210 {"fsmono", stc_fs, \ 211 DeviceGray|STC_LONG|1*STC_SCAN,3+3*1,{0.0,16777215.0}},\ 212 {"fsrgb", stc_fs, \ 213 DeviceRGB |STC_LONG|1*STC_SCAN,3+3*3,{0.0,16777215.0}},\ 214 {"fsx4", stc_fs, \ 215 DeviceCMYK|STC_LONG|1*STC_SCAN,3+3*4,{0.0,16777215.0}},\ 216 {"fscmyk", stc_fscmyk, \ 217 DeviceCMYK|STC_LONG|1*STC_SCAN,3+3*4,{0.0,16777215.0}},\ 218 {"fs2", stc_fs2, \ 219 DeviceRGB |STC_BYTE|STC_WHITE|1*STC_SCAN,0,{0.0,255.0}}, 220 221 222 #ifndef X_DPI 223 #define X_DPI 360 224 #endif /* X_DPI */ 225 #ifndef Y_DPI 226 #define Y_DPI 360 227 #endif /* Y_DPI */ 228 229 #ifndef STC_L_MARGIN 230 # define STC_L_MARGIN 0.125 /* yields 45 Pixel@360DpI */ 231 #endif /* STC_L_MARGIN */ 232 #ifndef STC_B_MARGIN 233 # define STC_B_MARGIN 0.555 /* yields 198 Pixel@#60DpI (looses 1mm) */ 234 #endif /* STC_B_MARGIN */ 235 /* 236 * Right-Margin: Should match maximum print-width of 8". 237 */ 238 239 #ifndef STC_R_MARGIN 240 # ifdef A4 241 # define STC_R_MARGIN 0.175 /* Yields 63 Pixel@360DpI */ 242 # else 243 # define STC_R_MARGIN 0.375 /* 135 Pixel */ 244 # endif 245 #endif /* STC_R_MARGIN */ 246 #ifndef STC_T_MARGIN 247 # define STC_T_MARGIN 0.125 248 #endif /* STC_T_MARGIN */ 249 250 #endif 251