diff options
author | Chris Liddell <chris.liddell@artifex.com> | 2017-09-14 07:01:32 +0100 |
---|---|---|
committer | Chris Liddell <chris.liddell@artifex.com> | 2017-09-14 07:01:32 +0100 |
commit | 6bf33a5d01518dcba8e957299a91a68d871f2b0b (patch) | |
tree | 7618bda8562b0076514f372c2404d90e30d843ef | |
parent | d26d2bb23f2d8867d99d5f1fa08a37d3f131e1ad (diff) | |
download | ghostpdl-6bf33a5d01518dcba8e957299a91a68d871f2b0b.tar.gz |
White space issues reported against 9.22 rc1
It seems newer gcc versions (6.4.x and later) report indentation "problems".
Also, add a cast to ensure bitshift op is done on an unsigned value.
-rw-r--r-- | base/gsbitops.c | 2 | ||||
-rw-r--r-- | base/gsicc_create.c | 4 | ||||
-rw-r--r-- | base/gxclread.c | 13 | ||||
-rw-r--r-- | contrib/gdevbjca.c | 16 | ||||
-rw-r--r-- | contrib/gdevdj9.c | 3011 | ||||
-rw-r--r-- | devices/gdevepsc.c | 697 | ||||
-rw-r--r-- | pcl/pxl/pxpaint.c | 16 | ||||
-rw-r--r-- | psi/dscparse.c | 8 | ||||
-rw-r--r-- | psi/zcrd.c | 25 |
9 files changed, 1951 insertions, 1841 deletions
diff --git a/base/gsbitops.c b/base/gsbitops.c index 3b14c767e..329e5ad19 100644 --- a/base/gsbitops.c +++ b/base/gsbitops.c @@ -38,7 +38,7 @@ const bits16 mono_copy_masks[17] = { }; const bits32 mono_fill_masks[33] = { #define mask(n)\ - ((~0xff | (0xff >> (n & 7))) << (n & -8)) + (((bits32)~0xff | (0xff >> (n & 7))) << (n & -8)) mask( 0),mask( 1),mask( 2),mask( 3),mask( 4),mask( 5),mask( 6),mask( 7), mask( 8),mask( 9),mask(10),mask(11),mask(12),mask(13),mask(14),mask(15), mask(16),mask(17),mask(18),mask(19),mask(20),mask(21),mask(22),mask(23), diff --git a/base/gsicc_create.c b/base/gsicc_create.c index bffff50ab..a334a8e02 100644 --- a/base/gsicc_create.c +++ b/base/gsicc_create.c @@ -2280,8 +2280,8 @@ gsicc_create_fromdef(const gs_color_space *pcs, unsigned char **pp_buffer_in, if (has_def_procs) { icc_luta2bparts.a_curves = (float*) gs_alloc_bytes(memory, 3*CURVE_SIZE*sizeof(float),"gsicc_create_fromdef"); - if (icc_luta2bparts.a_curves == NULL) - return gs_throw(gs_error_VMerror, "Allocation of ICC a curves failed"); + if (icc_luta2bparts.a_curves == NULL) + return gs_throw(gs_error_VMerror, "Allocation of ICC a curves failed"); curr_pos = icc_luta2bparts.a_curves; memcpy(curr_pos,&(pcie->caches_def.DecodeDEF->floats.values[0]), CURVE_SIZE*sizeof(float)); diff --git a/base/gxclread.c b/base/gxclread.c index 1893e32ca..4ef4ead19 100644 --- a/base/gxclread.c +++ b/base/gxclread.c @@ -396,13 +396,14 @@ clist_find_pseudoband(gx_device_clist_reader *crdev, int band, cmd_block *cb) strcpy(fmode, "r"); strncat(fmode, gp_fmode_binary_suffix, 1); if ((code=page_info->io_procs->fopen(page_info->cfname, fmode, - &page_info->cfile, - crdev->memory, crdev->memory, true)) < 0 || - (code=page_info->io_procs->fopen(page_info->bfname, fmode, - &page_info->bfile, - crdev->memory, crdev->memory, false)) < 0) + &page_info->cfile, + crdev->memory, crdev->memory, true)) < 0 || + (code=page_info->io_procs->fopen(page_info->bfname, fmode, + &page_info->bfile, + crdev->memory, crdev->memory, false)) < 0) { return code; - bfile = page_info->bfile; + } + bfile = page_info->bfile; } /* Go to the start of the last command block */ start_pos = page_info->bfile_end_pos - sizeof(cmd_block); diff --git a/contrib/gdevbjca.c b/contrib/gdevbjca.c index b0bdc0c4f..df4203cd1 100644 --- a/contrib/gdevbjca.c +++ b/contrib/gdevbjca.c @@ -172,7 +172,7 @@ bjc_put_page_margins(FILE *file, int length, int lm, int rm, int top) byte parms[4]; parms[0] = length, parms[1] = lm, parms[2] = rm, parms[3] = top; -/* count = 4; */ /* could be 1..3 */ +/* count = 4; */ /* could be 1..3 */ bjc_put_command(file, 'g', 4); bjc_put_bytes(file, parms, 4); } @@ -265,7 +265,7 @@ void bjc_put_indexed_image(FILE *file, int dot_rows, int dot_cols, int layers) { bjc_put_command(file, 'f', 5); - fputc('R', file); /* per spec */ + fputc('R', file); /* per spec */ fputc(dot_rows, file); fputc(dot_cols, file); fputc(layers, file); @@ -282,8 +282,8 @@ bjc_invert_bytes(byte *row, uint raster, bool inverse, byte lastmask) if(!(inverse)) *row = ~(*row); if(*row) ret = true; } - if(!(inverse)) *row ^= 0xff; - *row &= lastmask; + if(!(inverse)) *row ^= 0xff; + *row &= lastmask; return ret; } @@ -363,7 +363,7 @@ bjc_compress(const byte *row, uint raster, byte *compressed) /* and [end_dis..next) should be encoded as similar. */ /* Note that either of these ranges may be empty. */ - for ( ; ; ) { /* Encode up to 128 dissimilar bytes */ + for ( ; ; ) { /* Encode up to 128 dissimilar bytes */ uint count = end_dis - compr; /* uint for faster switch */ switch ( count ) { /* Use memcpy only if it's worthwhile. */ case 6: cptr[6] = compr[5]; @@ -386,7 +386,7 @@ bjc_compress(const byte *row, uint raster, byte *compressed) break; } - { /* Encode up to 128 similar bytes. */ + { /* Encode up to 128 similar bytes. */ /* Note that count may be <0 at end of row. */ int count = next - end_dis; if (next < end_row || test != 0) @@ -476,8 +476,8 @@ void bjc_init_tresh(gx_device_bjc_printer *dev, int rnd) * Errors are accumulated into the array fserrors[], at a resolution of * 1/16th of a pixel count. The error at a given pixel is propagated * to its not-yet-processed neighbors using the standard F-S fractions, - * ... (here) 7/16 - * 3/16 5/16 1/16 + * ... (here) 7/16 + * 3/16 5/16 1/16 * We work left-to-right on even rows, right-to-left on odd rows. * * We can get away with a single array (holding one row's worth of errors) diff --git a/contrib/gdevdj9.c b/contrib/gdevdj9.c index c659f1886..eec1c7766 100644 --- a/contrib/gdevdj9.c +++ b/contrib/gdevdj9.c @@ -108,7 +108,7 @@ s #include "math_.h" #include "string.h" -#include <stdlib.h> /* for rand() */ +#include <stdlib.h> /* for rand() */ #include <assert.h> #include "gdevprn.h" #include "gdevpcl.h" @@ -118,60 +118,61 @@ s #include "gxlum.h" /* this holds the initialisation data of the hp970 */ -typedef struct hp970_cmyk_init_s { +typedef struct hp970_cmyk_init_s +{ byte a[26]; } hp970_cmyk_init_t; -static const hp970_cmyk_init_t hp970_cmyk_init = -{ + +static const hp970_cmyk_init_t hp970_cmyk_init = { { - 0x02, /* format */ - 0x04, /* number of components */ - /* black */ - 0x01, /* MSB x resolution */ - 0x2c, /* LSB x resolution */ - 0x01, /* MSB y resolution */ - 0x2c, /* LSB y resolution */ - 0x00, /* MSB intensity levels */ - 0x02, /* LSB intensity levels */ - - /* cyan */ - 0x01, /* MSB x resolution */ - 0x2c, /* LSB x resolution */ - 0x01, /* MSB y resolution */ - 0x2c, /* LSB y resolution */ - 0x00, /* MSB intensity levels */ - 0x02, /* LSB intensity levels */ - - /* magenta */ - 0x01, /* MSB x resolution */ - 0x2c, /* LSB x resolution */ - 0x01, /* MSB y resolution */ - 0x2c, /* LSB y resolution */ - 0x00, /* MSB intensity levels */ - 0x02, /* LSB intensity levels */ - - /* yellow */ - 0x01, /* MSB x resolution */ - 0x2c, /* LSB x resolution */ - 0x01, /* MSB y resolution */ - 0x2c, /* LSB y resolution */ - 0x00, /* MSB intensity levels */ - 0x02 /* LSB intensity levels */ - } + 0x02, /* format */ + 0x04, /* number of components */ + /* black */ + 0x01, /* MSB x resolution */ + 0x2c, /* LSB x resolution */ + 0x01, /* MSB y resolution */ + 0x2c, /* LSB y resolution */ + 0x00, /* MSB intensity levels */ + 0x02, /* LSB intensity levels */ + + /* cyan */ + 0x01, /* MSB x resolution */ + 0x2c, /* LSB x resolution */ + 0x01, /* MSB y resolution */ + 0x2c, /* LSB y resolution */ + 0x00, /* MSB intensity levels */ + 0x02, /* LSB intensity levels */ + + /* magenta */ + 0x01, /* MSB x resolution */ + 0x2c, /* LSB x resolution */ + 0x01, /* MSB y resolution */ + 0x2c, /* LSB y resolution */ + 0x00, /* MSB intensity levels */ + 0x02, /* LSB intensity levels */ + + /* yellow */ + 0x01, /* MSB x resolution */ + 0x2c, /* LSB x resolution */ + 0x01, /* MSB y resolution */ + 0x2c, /* LSB y resolution */ + 0x00, /* MSB intensity levels */ + 0x02 /* LSB intensity levels */ + } }; /* this holds the color lookuptable data of the hp970 */ -typedef struct { - byte c[256]; /* Lookuptable for cyan */ - byte m[256]; /* dito for magenta */ - byte y[256]; /* dito for yellow */ - byte k[256]; /* dito for black */ - int correct[256]; /* potential undercolor black correction */ +typedef struct +{ + byte c[256]; /* Lookuptable for cyan */ + byte m[256]; /* dito for magenta */ + byte y[256]; /* dito for yellow */ + byte k[256]; /* dito for black */ + int correct[256]; /* potential undercolor black correction */ } Gamma; -static const Gamma gammat970 = -{ - /* Lookup values for cyan */ +static const Gamma gammat970 = { + /* Lookup values for cyan */ {0, 0, 0, 2, 2, 2, 3, 3, 3, 5, 5, 5, 7, 7, 6, 7, 7, 6, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 16, 16, 15, 16, 16, 17, 17, @@ -188,7 +189,7 @@ static const Gamma gammat970 = 129, 131, 132, 135, 136, 138, 140, 142, 144, 146, 147, 150, 152, 154, 157, 159, 162, 164, 166, 168, 171, 174, 176, 180, 182, 187, 192, 197, 204, 215, 255}, - /* Lookup values for magenta */ + /* Lookup values for magenta */ {0, 0, 0, 1, 1, 1, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 9, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 16, 16, 16, 16, 16, 17, 17, 17, @@ -205,7 +206,7 @@ static const Gamma gammat970 = 130, 133, 134, 135, 138, 139, 142, 144, 145, 148, 150, 152, 154, 157, 159, 162, 164, 168, 169, 170, 172, 175, 177, 179, 182, 185, 189, 193, 198, 204, 215, 255}, - /* Lookup values for yellow */ + /* Lookup values for yellow */ {0, 0, 0, 2, 2, 2, 3, 3, 3, 5, 5, 5, 7, 7, 6, 7, 7, 6, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 17, 17, 18, 18, @@ -222,7 +223,7 @@ static const Gamma gammat970 = 131, 134, 135, 137, 139, 140, 143, 145, 146, 148, 150, 152, 154, 156, 158, 160, 163, 166, 167, 169, 171, 173, 176, 178, 181, 184, 188, 192, 198, 204, 215, 255}, - /* Lookup values for black */ + /* Lookup values for black */ {0, 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 2, 4, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 9, 9, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, @@ -240,31 +241,28 @@ static const Gamma gammat970 = 166, 169, 174, 177, 182, 187, 194, 203, 215, 255} }; -static const Gamma * const gammat[] = -{ - &gammat970, /* CDJ970Cxi */ +static const Gamma *const gammat[] = { + &gammat970, /* CDJ970Cxi */ }; static int - rescale_byte_wise1x1(int bytecount, const byte * inbytea, - const byte * inbyteb, byte * outbyte); +rescale_byte_wise1x1(int bytecount, const byte * inbytea, + const byte * inbyteb, byte * outbyte); static int - rescale_byte_wise2x1(int bytecount, const byte * inbytea, - const byte * inbyteb, byte * outbyte); +rescale_byte_wise2x1(int bytecount, const byte * inbytea, + const byte * inbyteb, byte * outbyte); static int - rescale_byte_wise1x2(int bytecount, const byte * inbytea, - const byte * inbyteb, byte * outbyte); +rescale_byte_wise1x2(int bytecount, const byte * inbytea, + const byte * inbyteb, byte * outbyte); static int - rescale_byte_wise2x2(int bytecount, const byte * inbytea, - const byte * inbyteb, byte * outbyte); +rescale_byte_wise2x2(int bytecount, const byte * inbytea, + const byte * inbyteb, byte * outbyte); -static int (* const rescale_color_plane[2][2]) (int, const byte *, const byte *, byte *) = { +static int (*const rescale_color_plane[2][2]) (int, const byte *, + const byte *, byte *) = { { - rescale_byte_wise1x1, rescale_byte_wise1x2 - }, - { - rescale_byte_wise2x1, rescale_byte_wise2x2 - } + rescale_byte_wise1x1, rescale_byte_wise1x2}, { + rescale_byte_wise2x1, rescale_byte_wise2x2} }; /* static int (* const rescale_color_plane[2][2]) (int, const byte *, const byte *, byte *) = { @@ -287,10 +285,10 @@ static int cdj970_write_trailer(gx_device *, FILE *); #define DUPLEX_BOTTOM_MARGIN_A4 205 #define DUPLEX_LEFT_MARGIN_A4 120 -#define DUPLEX_BOTTOM_MARGIN_LETTER 205 /* ???? */ -#define DUPLEX_LEFT_MARGIN_LETTER 120 /* ???? */ +#define DUPLEX_BOTTOM_MARGIN_LETTER 205 /* ???? */ +#define DUPLEX_LEFT_MARGIN_LETTER 120 /* ???? */ -#define DESKJET_PRINT_LIMIT 0.04 /* 'real' top margin? */ +#define DESKJET_PRINT_LIMIT 0.04 /* 'real' top margin? */ /* Margins are left, bottom, right, top. */ #define DESKJET_MARGINS_LETTER 0.25, 0.50, 0.25, 0.167 #define DESKJET_MARGINS_A4 0.13, 0.46, 0.13, 0.04 @@ -298,29 +296,33 @@ static int cdj970_write_trailer(gx_device *, FILE *); #ifndef BITSPERPIXEL # define BITSPERPIXEL 32 #endif -#define DOFFSET (dev_t_margin(pdev) - DESKJET_PRINT_LIMIT) /* Print position */ +#define DOFFSET (dev_t_margin(pdev) - DESKJET_PRINT_LIMIT) /* Print position */ #define W sizeof(word) #define I sizeof(int) /* paper types */ -typedef enum { +typedef enum +{ PLAIN_PAPER, BOND_PAPER, SPECIAL_PAPER, GLOSSY_FILM, TRANSPARENCY_FILM } cdj_paper_type_t; /* quality */ -typedef enum { +typedef enum +{ DRAFT = -1, NORMAL = 0, PRESENTATION = 1 } cdj_quality_t; /* duplex mode */ -typedef enum { - NONE, BLOCK, BOOK +typedef enum +{ + NONE, BLOCK, BOOK } cdj_duplex_t; /* Printer types */ -typedef enum { - DJ970C +typedef enum +{ + DJ970C } cdj_printer_type_t; /* No. of ink jets (used to minimise head movements) */ @@ -354,110 +356,114 @@ static dev_proc_print_page(cdj970_print_page); #define gx_prn_colour_device_common \ gx_prn_device_common; \ - int cmyk; /* 0: not CMYK-capable, > 0: printing CMYK, */ \ + int cmyk; /* 0: not CMYK-capable, > 0: printing CMYK, */ \ /* < 0 : CMYK-capable, not printing CMYK */ \ - uint default_depth; /* Used only for CMYK-capable printers now. */ \ + uint default_depth; /* Used only for CMYK-capable printers now. */ \ uint correction /* some definitions needed later */ -struct error_val_field { - int c; /* Current value of Cyan error during dithering */ - int m; /* Current value of Magenta error during dithering */ - int y; /* Current value of Yellow error during dithering */ - int k; /* Current value of Black error during dithering */ +struct error_val_field +{ + int c; /* Current value of Cyan error during dithering */ + int m; /* Current value of Magenta error during dithering */ + int y; /* Current value of Yellow error during dithering */ + int k; /* Current value of Black error during dithering */ }; /* this structure holds all the pointers to the different values in all those data fields */ /* - * The principal data pointers are stored as pairs of values, with - * the selection being made by the 'scan' variable. The function of the - * scan variable is overloaded, as it controls both the alternating - * raster scan direction used in the Floyd-Steinberg dithering and also - * the buffer alternation required for line-difference compression. - * - * Thus, the number of pointers required is as follows: + * The principal data pointers are stored as pairs of values, with + * the selection being made by the 'scan' variable. The function of the + * scan variable is overloaded, as it controls both the alternating + * raster scan direction used in the Floyd-Steinberg dithering and also + * the buffer alternation required for line-difference compression. + * + * Thus, the number of pointers required is as follows: */ -struct ptr_arrays { - byte *data[4]; /* 4 600dpi data, scan direction and alternating buffers */ - byte *data_c[4]; /* 4 300dpi data, as above, */ - byte *plane_data[4][4]; /*4 b/w-planes, scan direction and alternating buffers */ - byte *plane_data_c[4][8]; /* as above, but for 8 planes */ - byte *out_data; /* output buffer for the b/w data, one 600dpi plane */ - byte *test_data[4]; /* holds a copy of the last plane */ - int *errors[2]; /* 2 b/w dithering erros (scan direction only) */ - int *errors_c[2]; /* 2 color dithering errors (scan direction only) */ - word *storage; /* pointer to the beginning of the b/w-buffer */ - word *storage_start; /* used for debugging */ - word *storage_end; /* used for debugging */ - word *storage_size; /* used for debugging */ +struct ptr_arrays +{ + byte *data[4]; /* 4 600dpi data, scan direction and alternating buffers */ + byte *data_c[4]; /* 4 300dpi data, as above, */ + byte *plane_data[4][4]; /*4 b/w-planes, scan direction and alternating buffers */ + byte *plane_data_c[4][8]; /* as above, but for 8 planes */ + byte *out_data; /* output buffer for the b/w data, one 600dpi plane */ + byte *test_data[4]; /* holds a copy of the last plane */ + int *errors[2]; /* 2 b/w dithering erros (scan direction only) */ + int *errors_c[2]; /* 2 color dithering errors (scan direction only) */ + word *storage; /* pointer to the beginning of the b/w-buffer */ + word *storage_start; /* used for debugging */ + word *storage_end; /* used for debugging */ + word *storage_size; /* used for debugging */ }; /* Some miscellaneous variables */ -struct misc_struct { - int line_size; /* size of scan_line */ - int line_size_c; /* size of rescaled scan_line */ - int line_size_words; /* size of scan_line in words */ - int paper_size; /* size of paper */ - int num_comps; /* number of color components (1 - 4) */ - int bits_per_pixel; /* bits per pixel 1,4,8,16,24,32 */ - int storage_bpp; /* = bits_per_pixel */ - int expanded_bpp; /* = bits_per_pixel */ - int plane_size; /* size of b/w bit plane */ - int plane_size_c; /* size of color bit plane */ - int databuff_size; /* size of databuffer for b/w data */ - int databuff_size_c; /* size of databuffer for color data */ - int errbuff_size; /* size of error buffer b/w -data */ - int errbuff_size_c; /* size of error buffer color -data */ - int outbuff_size; /* size of output buffer for b/w data */ - int scan; /* scan-line variable [0,1] */ - int cscan; /* dito for the color-planes */ - int is_two_pass; /* checks if b/w data has already been printed */ - int zero_row_count; /* How many empty lines */ - uint storage_size_words; /* size of storage in words for b/w data */ - uint storage_size_words_c; /* size of storage in words for c-data */ - int is_color_data; /* indicates whether there is color data */ +struct misc_struct +{ + int line_size; /* size of scan_line */ + int line_size_c; /* size of rescaled scan_line */ + int line_size_words; /* size of scan_line in words */ + int paper_size; /* size of paper */ + int num_comps; /* number of color components (1 - 4) */ + int bits_per_pixel; /* bits per pixel 1,4,8,16,24,32 */ + int storage_bpp; /* = bits_per_pixel */ + int expanded_bpp; /* = bits_per_pixel */ + int plane_size; /* size of b/w bit plane */ + int plane_size_c; /* size of color bit plane */ + int databuff_size; /* size of databuffer for b/w data */ + int databuff_size_c; /* size of databuffer for color data */ + int errbuff_size; /* size of error buffer b/w -data */ + int errbuff_size_c; /* size of error buffer color -data */ + int outbuff_size; /* size of output buffer for b/w data */ + int scan; /* scan-line variable [0,1] */ + int cscan; /* dito for the color-planes */ + int is_two_pass; /* checks if b/w data has already been printed */ + int zero_row_count; /* How many empty lines */ + uint storage_size_words; /* size of storage in words for b/w data */ + uint storage_size_words_c; /* size of storage in words for c-data */ + int is_color_data; /* indicates whether there is color data */ }; /* function pointer typedefs for device driver struct */ typedef void (*StartRasterMode) (gx_device_printer * pdev, int paper_size, FILE * prn_stream); typedef void (*PrintNonBlankLines) (gx_device_printer * pdev, - struct ptr_arrays *data_ptrs, - struct misc_struct *misc_vars, - struct error_val_field *error_values, - const Gamma *gamma, - FILE * prn_stream); + struct ptr_arrays * data_ptrs, + struct misc_struct * misc_vars, + struct error_val_field * error_values, + const Gamma * gamma, FILE * prn_stream); typedef void (*TerminatePage) (gx_device_printer * pdev, FILE * prn_stream); -typedef struct gx_device_cdj970_s { +typedef struct gx_device_cdj970_s +{ gx_device_common; gx_prn_colour_device_common; - int /*cdj_quality_t*/ quality; /* -1 draft, 0 normal, 1 best */ - int /*cdj_paper_type_t*/ papertype; /* papertype [0,4] */ - int /*cdj_duplex_t*/ duplex; - int intensities; /* intensity values per pixel [2,4] */ - int xscal; /* boolean to indicate x scaling by 2 */ - int yscal; /* boolean to indicate y scaling by 2 */ - int /*cdj_printer_type_t*/ ptype; /* printer type, one of DJ670C, DJ970C, DJ890C, DJ1600C */ - int compression; /* compression level */ - float mastergamma; /* Gammavalue applied to all colors */ - float gammavalc; /* range to which gamma-correction is + int /*cdj_quality_t */ quality; /* -1 draft, 0 normal, 1 best */ + int /*cdj_paper_type_t */ papertype; /* papertype [0,4] */ + int /*cdj_duplex_t */ duplex; + int intensities; /* intensity values per pixel [2,4] */ + int xscal; /* boolean to indicate x scaling by 2 */ + int yscal; /* boolean to indicate y scaling by 2 */ + int /*cdj_printer_type_t */ ptype; /* printer type, one of DJ670C, DJ970C, DJ890C, DJ1600C */ + int compression; /* compression level */ + float mastergamma; /* Gammavalue applied to all colors */ + float gammavalc; /* range to which gamma-correction is applied to bw values */ - float gammavalm; /* amount of gamma correction for bw */ - float gammavaly; /* range to which gamma-correction i + float gammavalm; /* amount of gamma correction for bw */ + float gammavaly; /* range to which gamma-correction i applied to color values */ - float gammavalk; /* amount of gamma correction for color */ - float blackcorrect; /* amount of gamma correction for color */ - StartRasterMode start_raster_mode; /* output function to start raster mode */ - PrintNonBlankLines print_non_blank_lines; /* output function to print a non blank line */ - TerminatePage terminate_page; /* page termination output function */ + float gammavalk; /* amount of gamma correction for color */ + float blackcorrect; /* amount of gamma correction for color */ + StartRasterMode start_raster_mode; /* output function to start raster mode */ + PrintNonBlankLines print_non_blank_lines; /* output function to print a non blank line */ + TerminatePage terminate_page; /* page termination output function */ int PageCtr; } gx_device_cdj970; -typedef struct { +typedef struct +{ gx_device_common; gx_prn_colour_device_common; } gx_device_colour_prn; @@ -467,7 +473,7 @@ typedef struct { devices. */ #define cprn_device ((gx_device_colour_prn*) pdev) -#define cdj970 ((gx_device_cdj970 *)pdev) +#define cdj970 ((gx_device_cdj970 *)pdev) #define prn_cmyk_colour_device(dtype, procs, dev_name, x_dpi, y_dpi, bpp, print_page, correct)\ prn_colour_device_body(dtype, procs, dev_name,\ @@ -526,103 +532,108 @@ typedef struct { } static void - cdj970_start_raster_mode(gx_device_printer * pdev, - int papersize, FILE * prn_stream); +cdj970_start_raster_mode(gx_device_printer * pdev, + int papersize, FILE * prn_stream); static void - cdj970_print_non_blank_lines(gx_device_printer * pdev, - struct ptr_arrays *data_ptrs, - struct misc_struct *misc_vars, - struct error_val_field *error_values, - const Gamma *gamma, - FILE * prn_stream); +cdj970_print_non_blank_lines(gx_device_printer * pdev, + struct ptr_arrays *data_ptrs, + struct misc_struct *misc_vars, + struct error_val_field *error_values, + const Gamma * gamma, FILE * prn_stream); static void - cdj970_terminate_page(gx_device_printer * pdev, FILE * prn_stream); +cdj970_terminate_page(gx_device_printer * pdev, FILE * prn_stream); static const gx_device_procs cdj970_procs = cmyk_colour_procs(hp_colour_open, cdj970_get_params, cdj970_put_params, - cdj970_close, NULL, gdev_cmyk_map_color_rgb, gdev_cmyk_map_cmyk_color); + cdj970_close, NULL, gdev_cmyk_map_color_rgb, + gdev_cmyk_map_cmyk_color); const gx_device_cdj970 gs_cdj970_device = - cdj_970_device(cdj970_procs, "cdj970", 600, 600, 32, cdj970_print_page, 0, - NORMAL, PLAIN_PAPER, NONE, 4, DJ970C, 2, - 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, - cdj970_start_raster_mode, cdj970_print_non_blank_lines, - cdj970_terminate_page); +cdj_970_device(cdj970_procs, "cdj970", 600, 600, 32, cdj970_print_page, 0, + NORMAL, PLAIN_PAPER, NONE, 4, DJ970C, 2, + 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, + cdj970_start_raster_mode, cdj970_print_non_blank_lines, + cdj970_terminate_page); /* Forward references */ static int cdj_put_param_int(gs_param_list *, gs_param_name, - int *, int, int, int); + int *, int, int, int); static int cdj_put_param_float(gs_param_list *, gs_param_name, float - *, float, float, int); + *, float, float, int); static int cdj_put_param_bpp(gx_device *, gs_param_list *, int, int, int); static int cdj_set_bpp(gx_device *, int, int); /**********************************************************************************/ /* */ -/* private functions */ +/* private functions */ /* */ /**********************************************************************************/ /* hp_colour_open: Open the printer and set up the margins. ----------------------------------------------------------------------------------*/ -static int hp_colour_open(gx_device * pdev) +static int +hp_colour_open(gx_device * pdev) { - int retCode; + int retCode; - cdj970->PageCtr = 0; + cdj970->PageCtr = 0; - /* Set up colour params if put_params has not already done so */ - if (pdev->color_info.num_components == 0) { - int code = cdj_set_bpp(pdev, pdev->color_info.depth, - pdev->color_info.num_components); + /* Set up colour params if put_params has not already done so */ + if (pdev->color_info.num_components == 0) { + int code = cdj_set_bpp(pdev, pdev->color_info.depth, + pdev->color_info.num_components); - if (code < 0) - return code; - } + if (code < 0) + return code; + } - retCode = gdev_prn_open (pdev); + retCode = gdev_prn_open(pdev); + if (retCode < 0) + return (retCode); + else { + retCode = gdev_prn_open_printer(pdev, true); if (retCode < 0) - return (retCode); - else { - retCode = gdev_prn_open_printer(pdev, true); - if (retCode < 0) - return (retCode); - } + return (retCode); + } - return 0; + return 0; } /* cdj970_get_params: Added parameters for DeskJet 970C ----------------------------------------------------------------------------------*/ -static int cdj970_get_params(gx_device * pdev, gs_param_list * plist) +static int +cdj970_get_params(gx_device * pdev, gs_param_list * plist) { - int code = gdev_prn_get_params(pdev, plist); - - if (code < 0 || - (code = param_write_int(plist, "Quality", &cdj970->quality)) < 0 || - (code = param_write_int(plist, "Duplex", &cdj970->duplex)) < 0 || - (code = param_write_int(plist, "Papertype", &cdj970->papertype)) < 0 || - (code = param_write_float(plist, "MasterGamma", &cdj970->gammavalc)) - < 0 || - (code = param_write_float(plist, "GammaValC", &cdj970->gammavalc)) < - 0 || - (code = param_write_float(plist, "GammaValM", &cdj970->gammavalm)) < - 0 || - (code = param_write_float(plist, "GammaValY", &cdj970->gammavaly)) < - 0 || - (code = param_write_float(plist, "GammaValK", &cdj970->gammavalk)) < - 0 || - (code = param_write_float(plist, "BlackCorrect", - &cdj970->blackcorrect)) < 0) - - return (code); + int code = gdev_prn_get_params(pdev, plist); + + if (code < 0 || + (code = param_write_int(plist, "Quality", &cdj970->quality)) < 0 || + (code = param_write_int(plist, "Duplex", &cdj970->duplex)) < 0 || + (code = param_write_int(plist, "Papertype", &cdj970->papertype)) < 0 + || (code = + param_write_float(plist, "MasterGamma", &cdj970->gammavalc)) + < 0 + || (code = + param_write_float(plist, "GammaValC", &cdj970->gammavalc)) < 0 + || (code = + param_write_float(plist, "GammaValM", &cdj970->gammavalm)) < 0 + || (code = + param_write_float(plist, "GammaValY", &cdj970->gammavaly)) < 0 + || (code = + param_write_float(plist, "GammaValK", &cdj970->gammavalk)) < 0 + || (code = + param_write_float(plist, "BlackCorrect", + &cdj970->blackcorrect)) < 0) + return (code); + return (code); } /* cdj970_put_params: ----------------------------------------------------------------------------------*/ -static int cdj970_put_params(gx_device * pdev, gs_param_list * plist) +static int +cdj970_put_params(gx_device * pdev, gs_param_list * plist) { int quality = cdj970->quality; int papertype = cdj970->papertype; @@ -641,21 +652,28 @@ static int cdj970_put_params(gx_device * pdev, gs_param_list * plist) code = cdj_put_param_int(plist, "Quality", &quality, 0, 2, code); code = cdj_put_param_int(plist, "Papertype", &papertype, 0, 4, code); code = cdj_put_param_int(plist, "Duplex", &duplex, 0, 2, code); - code = cdj_put_param_float(plist, "MasterGamma", &mastergamma, 0.1, 9.0, code); - code = cdj_put_param_float(plist, "GammaValC", &gammavalc, 0.0, 9.0, code); - code = cdj_put_param_float(plist, "GammaValM", &gammavalm, 0.0, 9.0, code); - code = cdj_put_param_float(plist, "GammaValY", &gammavaly, 0.0, 9.0, code); - code = cdj_put_param_float(plist, "GammaValK", &gammavalk, 0.0, 9.0, code); - code = cdj_put_param_float(plist, "BlackCorrect", &blackcorrect, 0.0, - 9.0, code); + code = + cdj_put_param_float(plist, "MasterGamma", &mastergamma, 0.1, 9.0, + code); + code = + cdj_put_param_float(plist, "GammaValC", &gammavalc, 0.0, 9.0, code); + code = + cdj_put_param_float(plist, "GammaValM", &gammavalm, 0.0, 9.0, code); + code = + cdj_put_param_float(plist, "GammaValY", &gammavaly, 0.0, 9.0, code); + code = + cdj_put_param_float(plist, "GammaValK", &gammavalk, 0.0, 9.0, code); + code = + cdj_put_param_float(plist, "BlackCorrect", &blackcorrect, 0.0, 9.0, + code); if (code < 0) - return code; + return code; code = cdj_put_param_bpp(pdev, plist, bpp, bpp, 0); if (code < 0) - return code; + return code; cdj970->quality = quality; cdj970->papertype = papertype; @@ -672,7 +690,7 @@ static int cdj970_put_params(gx_device * pdev, gs_param_list * plist) /**********************************************************************************/ /* */ -/* Internal routines */ +/* Internal routines */ /* */ /**********************************************************************************/ @@ -687,93 +705,89 @@ static int cdj970_put_params(gx_device * pdev, gs_param_list * plist) /* internal functions */ static void - FSDlinebw(int scan, int plane_size, - struct error_val_field *error_values, - byte * kP, - int n, int *ep, byte * dp); +FSDlinebw(int scan, int plane_size, + struct error_val_field *error_values, + byte * kP, int n, int *ep, byte * dp); static void - FSDlinec2(int scan, int plane_size, - struct error_val_field *error_values, - byte * cPa, byte * mPa, byte * yPa, int n, - byte * dp, int *ep); +FSDlinec2(int scan, int plane_size, + struct error_val_field *error_values, + byte * cPa, byte * mPa, byte * yPa, int n, byte * dp, int *ep); static void - FSDlinec3(int scan, int plane_size, - struct error_val_field *error_values, - byte * cPa, byte * mPa, byte * yPa, - byte * cPb, byte * mPb, byte * yPb, - int n, byte * dp, int *ep); +FSDlinec3(int scan, int plane_size, + struct error_val_field *error_values, + byte * cPa, byte * mPa, byte * yPa, + byte * cPb, byte * mPb, byte * yPb, int n, byte * dp, int *ep); static void - FSDlinec4(int scan, int plane_size, - struct error_val_field *error_values, - byte * cPa, byte * mPa, byte * yPa, - byte * cPb, byte * mPb, byte * yPb, - int n, byte * dp, int *ep); +FSDlinec4(int scan, int plane_size, + struct error_val_field *error_values, + byte * cPa, byte * mPa, byte * yPa, + byte * cPb, byte * mPb, byte * yPb, int n, byte * dp, int *ep); static void - init_error_buffer(struct misc_struct *misc_vars, - struct ptr_arrays *data_ptrs); +init_error_buffer(struct misc_struct *misc_vars, + struct ptr_arrays *data_ptrs); static void - do_floyd_steinberg(int scan, int cscan, int plane_size, - int plane_size_c, int n, - struct ptr_arrays *data_ptrs, - gx_device_printer * pdev, - struct error_val_field *error_values); +do_floyd_steinberg(int scan, int cscan, int plane_size, + int plane_size_c, int n, + struct ptr_arrays *data_ptrs, + gx_device_printer * pdev, + struct error_val_field *error_values); static int - do_gcr(int bytecount, byte * inbyte, const byte * kvalues, - const byte * cvalues, const byte * mvalues, - const byte * yvalues, const int *kcorrect); +do_gcr(int bytecount, byte * inbyte, const byte * kvalues, + const byte * cvalues, const byte * mvalues, + const byte * yvalues, const int *kcorrect); static void - send_scan_lines(gx_device_printer * pdev, - struct ptr_arrays *data_ptrs, - struct misc_struct *misc_vars, - struct error_val_field *error_values, - const Gamma *gamma, - FILE * prn_stream); +send_scan_lines(gx_device_printer * pdev, + struct ptr_arrays *data_ptrs, + struct misc_struct *misc_vars, + struct error_val_field *error_values, + const Gamma * gamma, FILE * prn_stream); -static void - do_gamma(float mastergamma, float gammaval, byte * values); +static void do_gamma(float mastergamma, float gammaval, byte * values); -static void - do_black_correction(float kvalue, int *kcorrect); +static void do_black_correction(float kvalue, int *kcorrect); static void - init_data_structure(gx_device_printer * pdev, - struct ptr_arrays *data_ptrs, - struct misc_struct *misc_vars); +init_data_structure(gx_device_printer * pdev, + struct ptr_arrays *data_ptrs, + struct misc_struct *misc_vars); static void - calculate_memory_size(gx_device_printer * pdev, - struct misc_struct *misc_vars); +calculate_memory_size(gx_device_printer * pdev, + struct misc_struct *misc_vars); /* assign_dpi: ----------------------------------------------------------------------------------*/ -static void assign_dpi(int dpi, byte * msb) +static void +assign_dpi(int dpi, byte * msb) { - if (dpi == 600) { - msb[0] = 0x02; - msb[1] = 0x58; - } else { - msb[0] = 0x01; - msb[1] = 0x2c; - } + if (dpi == 600) { + msb[0] = 0x02; + msb[1] = 0x58; + } else { + msb[0] = 0x01; + msb[1] = 0x2c; + } } /* cdj970_terminate_page: ----------------------------------------------------------------------------------*/ -static void cdj970_terminate_page(gx_device_printer * pdev, FILE * prn_stream) +static void +cdj970_terminate_page(gx_device_printer * pdev, FILE * prn_stream) { - fputs("\033*rC\f\033&l-2H", prn_stream); /* End Graphics, Reset */ + fputs("\033*rC\f\033&l-2H", prn_stream); /* End Graphics, Reset */ } /* cdj970_one_time_initialisation: ----------------------------------------------------------------------------------*/ -static void cdj970_one_time_initialisation(gx_device_printer * pdev) +static void +cdj970_one_time_initialisation(gx_device_printer * pdev) { /* Change the margins if necessary. */ static const float dj_a4[4] = { @@ -787,102 +801,107 @@ static void cdj970_one_time_initialisation(gx_device_printer * pdev) /* quality setup */ if (cdj970->quality == DRAFT) { - gx_device_set_resolution((gx_device *)pdev, 300.0, 300.0); + gx_device_set_resolution((gx_device *) pdev, 300.0, 300.0); cdj970->xscal = 0; cdj970->yscal = 0; cdj970->intensities = 2; } else if (cdj970->quality == NORMAL) { - gx_device_set_resolution((gx_device *)pdev, 600.0, 600.0); + gx_device_set_resolution((gx_device *) pdev, 600.0, 600.0); cdj970->xscal = 1; cdj970->yscal = 1; /* intensities = 4 from initialization */ - } else { /* quality == PRESENTATION */ - gx_device_set_resolution((gx_device *)pdev, 600.0, 600.0); + } else { /* quality == PRESENTATION */ + gx_device_set_resolution((gx_device *) pdev, 600.0, 600.0); cdj970->xscal = 0; - cdj970->yscal = 0 ; + cdj970->yscal = 0; /* intensities = 4 from initialization */ } - m = (gdev_pcl_paper_size((gx_device *)pdev) == PAPER_SIZE_A4 ? dj_a4 : dj_letter); + m = (gdev_pcl_paper_size((gx_device *) pdev) == + PAPER_SIZE_A4 ? dj_a4 : dj_letter); - gx_device_set_margins((gx_device *)pdev, m, true); + gx_device_set_margins((gx_device *) pdev, m, true); - cdj970_write_header ((gx_device *)pdev, pdev->file); + cdj970_write_header((gx_device *) pdev, pdev->file); } /* cdj970_print_page: Here comes the hp970 output routine ----------------------------------------------------------------------------------*/ -static int cdj970_print_page(gx_device_printer * pdev, FILE * prn_stream) +static int +cdj970_print_page(gx_device_printer * pdev, FILE * prn_stream) { - struct error_val_field error_values; - struct ptr_arrays data_ptrs; - struct misc_struct misc_vars; - - Gamma gamma; - - if (cdj970->PageCtr == 0 && cdj970->ptype == DJ970C) { - cdj970_one_time_initialisation(pdev); - } + struct error_val_field error_values; + struct ptr_arrays data_ptrs; + struct misc_struct misc_vars; - /* make a local writable copy of the Gamma tables */ - memcpy(&gamma, gammat[cdj970->ptype], sizeof(Gamma)); - - /* if mastergamma, don't use the built in functions */ - if (cdj970->mastergamma > 1.0) { - /* prepare the bw lookup table */ - do_gamma(cdj970->mastergamma, cdj970->gammavalk, gamma.k); - /* prepare the color lookup table */ - do_gamma(cdj970->mastergamma, cdj970->gammavalc, gamma.c); - do_gamma(cdj970->mastergamma, cdj970->gammavalm, gamma.m); - do_gamma(cdj970->mastergamma, cdj970->gammavaly, gamma.y); - } - - /* prepare the black correction table for the unbunt mask */ - do_black_correction(cdj970->blackcorrect, gamma.correct); - - /* Calculate the needed memory */ - calculate_memory_size(pdev, &misc_vars); + Gamma gamma; - /* and allocate the memory */ - - /* Since we need 600 and 300 dpi, we set up several buffers: - storage contains the data as copied from gs, as well as the - plane-data and the out_row buffer. - storagec will contain the rescaled color data. It also contains the - plane_data for the color-planes - these are needed by the - compression routine, but would be overwritten by the - b/w-dithering. The color planes allow for overwriting the - color-data by the error-data. Since we might use the - 2bpp feature of the hp970 someday, it is sized like storage. - storagee contains the errors from b/w fs-ditherng */ + if (cdj970->PageCtr == 0 && cdj970->ptype == DJ970C) { + cdj970_one_time_initialisation(pdev); + } - data_ptrs.storage = (ulong *) gs_malloc(pdev->memory->non_gc_memory, misc_vars.storage_size_words, W, - "cdj970_print_page"); + /* make a local writable copy of the Gamma tables */ + memcpy(&gamma, gammat[cdj970->ptype], sizeof(Gamma)); + + /* if mastergamma, don't use the built in functions */ + if (cdj970->mastergamma > 1.0) { + /* prepare the bw lookup table */ + do_gamma(cdj970->mastergamma, cdj970->gammavalk, gamma.k); + /* prepare the color lookup table */ + do_gamma(cdj970->mastergamma, cdj970->gammavalc, gamma.c); + do_gamma(cdj970->mastergamma, cdj970->gammavalm, gamma.m); + do_gamma(cdj970->mastergamma, cdj970->gammavaly, gamma.y); + } - /* if we can't allocate working area */ - if (data_ptrs.storage == 0) { - return_error(gs_error_VMerror); - } + /* prepare the black correction table for the unbunt mask */ + do_black_correction(cdj970->blackcorrect, gamma.correct); + + /* Calculate the needed memory */ + calculate_memory_size(pdev, &misc_vars); + + /* and allocate the memory */ + + /* Since we need 600 and 300 dpi, we set up several buffers: + storage contains the data as copied from gs, as well as the + plane-data and the out_row buffer. + storagec will contain the rescaled color data. It also contains the + plane_data for the color-planes - these are needed by the + compression routine, but would be overwritten by the + b/w-dithering. The color planes allow for overwriting the + color-data by the error-data. Since we might use the + 2bpp feature of the hp970 someday, it is sized like storage. + storagee contains the errors from b/w fs-ditherng */ + + data_ptrs.storage = + (ulong *) gs_malloc(pdev->memory->non_gc_memory, + misc_vars.storage_size_words, W, + "cdj970_print_page"); + + /* if we can't allocate working area */ + if (data_ptrs.storage == 0) { + return_error(gs_error_VMerror); + } - /* Initialise the needed pointers */ - init_data_structure(pdev, &data_ptrs, &misc_vars); + /* Initialise the needed pointers */ + init_data_structure(pdev, &data_ptrs, &misc_vars); - /* Start Raster mode */ - (*cdj970->start_raster_mode) (pdev, misc_vars.paper_size, prn_stream); + /* Start Raster mode */ + (*cdj970->start_raster_mode) (pdev, misc_vars.paper_size, prn_stream); - /* Send each scan line in turn */ - send_scan_lines(pdev, &data_ptrs, &misc_vars, &error_values, &gamma, prn_stream); + /* Send each scan line in turn */ + send_scan_lines(pdev, &data_ptrs, &misc_vars, &error_values, &gamma, + prn_stream); - /* terminate page and eject paper */ - (*cdj970->terminate_page) (pdev, prn_stream); + /* terminate page and eject paper */ + (*cdj970->terminate_page) (pdev, prn_stream); - /* Free Memory */ - gs_free(pdev->memory->non_gc_memory, (char *)data_ptrs.storage, misc_vars.storage_size_words, W, - "hp970_print_page"); + /* Free Memory */ + gs_free(pdev->memory->non_gc_memory, (char *)data_ptrs.storage, + misc_vars.storage_size_words, W, "hp970_print_page"); - cdj970->PageCtr ++; + cdj970->PageCtr++; - return (0); + return (0); } #define odd(i) ((i & 01) != 0) @@ -890,326 +909,356 @@ static int cdj970_print_page(gx_device_printer * pdev, FILE * prn_stream) /* GetScanLine: ----------------------------------------------------------------------------------*/ -static int GetScanLine( gx_device_printer * pdev, - int *lnum, - struct ptr_arrays *data_ptrs, - struct misc_struct *misc_vars, - word rmask) +static int +GetScanLine(gx_device_printer * pdev, + int *lnum, + struct ptr_arrays *data_ptrs, + struct misc_struct *misc_vars, word rmask) { - word *data_words = (word *) data_ptrs->data[misc_vars->scan]; - register word *end_data = data_words + misc_vars->line_size_words; - unsigned long tempBuffer[BUFFER_SIZE]; - int i = 0; - register word *enddata2; - - if ((cdj970->duplex == BOOK) && (cdj970->PageCtr%2 == 1)) --(*lnum); - else ++(*lnum); - - gdev_prn_copy_scan_lines(pdev, *lnum, (byte *) data_words, misc_vars->line_size); - - if (cdj970->quality == DRAFT) - enddata2 = (unsigned long*)end_data - ((gdev_pcl_paper_size((gx_device*)pdev) == - PAPER_SIZE_A4 ? DUPLEX_LEFT_MARGIN_A4/2 : DUPLEX_LEFT_MARGIN_LETTER/2)); - - else - enddata2 = (unsigned long*)end_data - ((gdev_pcl_paper_size((gx_device*)pdev) == - PAPER_SIZE_A4 ? DUPLEX_LEFT_MARGIN_A4 : DUPLEX_LEFT_MARGIN_LETTER)); - - end_data = enddata2; - - if ((cdj970->duplex == BOOK) && (cdj970->PageCtr%2 == 1)) { - memset (tempBuffer, 0, BUFFER_SIZE*sizeof(unsigned long)); - - while (enddata2 > data_words) { - tempBuffer[i++] = *((unsigned long*)enddata2); - enddata2 --; - } + word *data_words = (word *) data_ptrs->data[misc_vars->scan]; + register word *end_data = data_words + misc_vars->line_size_words; + unsigned long tempBuffer[BUFFER_SIZE]; + int i = 0; + register word *enddata2; + + if ((cdj970->duplex == BOOK) && (cdj970->PageCtr % 2 == 1)) + --(*lnum); + else + ++(*lnum); + + gdev_prn_copy_scan_lines(pdev, *lnum, (byte *) data_words, + misc_vars->line_size); + + if (cdj970->quality == DRAFT) + enddata2 = + (unsigned long *)end_data - + ((gdev_pcl_paper_size((gx_device *) pdev) == + PAPER_SIZE_A4 ? DUPLEX_LEFT_MARGIN_A4 / + 2 : DUPLEX_LEFT_MARGIN_LETTER / 2)); + + else + enddata2 = + (unsigned long *)end_data - + ((gdev_pcl_paper_size((gx_device *) pdev) == + PAPER_SIZE_A4 ? DUPLEX_LEFT_MARGIN_A4 : + DUPLEX_LEFT_MARGIN_LETTER)); + + end_data = enddata2; + + if ((cdj970->duplex == BOOK) && (cdj970->PageCtr % 2 == 1)) { + memset(tempBuffer, 0, BUFFER_SIZE * sizeof(unsigned long)); + + while (enddata2 > data_words) { + tempBuffer[i++] = *((unsigned long *)enddata2); + enddata2--; + } - memcpy (data_words, tempBuffer, i*sizeof(unsigned long)); + memcpy(data_words, tempBuffer, i * sizeof(unsigned long)); - } + } - misc_vars->scan = 1 - misc_vars->scan; /* toggle scan direction */ - misc_vars->is_two_pass = odd(*lnum); /* color output for odd lines */ + misc_vars->scan = 1 - misc_vars->scan; /* toggle scan direction */ + misc_vars->is_two_pass = odd(*lnum); /* color output for odd lines */ - /* Mask off 1-bits beyond the line width. */ - end_data[-1] &= rmask; + /* Mask off 1-bits beyond the line width. */ + end_data[-1] &= rmask; - /* Remove trailing 0s. */ - while (end_data > data_words && end_data[-1] == 0) - end_data--; + /* Remove trailing 0s. */ + while (end_data > data_words && end_data[-1] == 0) + end_data--; - return (end_data - data_words); + return (end_data - data_words); } #define PAGE_CTR_OK ( ((cdj970->duplex < BOOK) && (lnum < lend)) || ((cdj970->duplex == BOOK) && (lnum >= 0) && (cdj970->PageCtr%2 == 1)) || ((cdj970->duplex == BOOK) && (cdj970->PageCtr%2 == 0) && (lnum < lend))) /* send_scan_lines: Send the scan lines to the printer ----------------------------------------------------------------------------------*/ -static void send_scan_lines( gx_device_printer *pdev, - struct ptr_arrays *data_ptrs, - struct misc_struct *misc_vars, - struct error_val_field *error_values, - const Gamma *gamma, - FILE *prn_stream) +static void +send_scan_lines(gx_device_printer * pdev, + struct ptr_arrays *data_ptrs, + struct misc_struct *misc_vars, + struct error_val_field *error_values, + const Gamma * gamma, FILE * prn_stream) { - int lnum, lend, llen; - int num_blank_lines = 0; + int lnum, lend, llen; + int num_blank_lines = 0; - word rmask = ~(word) 0 << ((-pdev->width * misc_vars->storage_bpp) & (W * 8 - 1)); + word rmask = + ~(word) 0 << ((-pdev->width * misc_vars->storage_bpp) & (W * 8 - 1)); - lend = pdev->height - (dev_t_margin(pdev) + dev_b_margin(pdev)) * y_dpi; + lend = pdev->height - (dev_t_margin(pdev) + dev_b_margin(pdev)) * y_dpi; - error_values->c = error_values->m = error_values->y = error_values->k = 0; + error_values->c = error_values->m = error_values->y = error_values->k = 0; - /* init the error buffer */ - init_error_buffer(misc_vars, data_ptrs); + /* init the error buffer */ + init_error_buffer(misc_vars, data_ptrs); - misc_vars->zero_row_count = 0; + misc_vars->zero_row_count = 0; - if ((cdj970->duplex == BOOK) && (cdj970->PageCtr%2==1)) { - lnum = lend; + if ((cdj970->duplex == BOOK) && (cdj970->PageCtr % 2 == 1)) { + lnum = lend; - if (cdj970->quality == DRAFT) - num_blank_lines = (gdev_pcl_paper_size((gx_device*)pdev) == PAPER_SIZE_A4 - ? DUPLEX_BOTTOM_MARGIN_A4/2 : DUPLEX_BOTTOM_MARGIN_LETTER/2); - else - num_blank_lines = (gdev_pcl_paper_size((gx_device*)pdev) == PAPER_SIZE_A4 - ? DUPLEX_BOTTOM_MARGIN_A4 : DUPLEX_BOTTOM_MARGIN_LETTER); - } else lnum = -1; + if (cdj970->quality == DRAFT) + num_blank_lines = + (gdev_pcl_paper_size((gx_device *) pdev) == + PAPER_SIZE_A4 ? DUPLEX_BOTTOM_MARGIN_A4 / + 2 : DUPLEX_BOTTOM_MARGIN_LETTER / 2); + else + num_blank_lines = + (gdev_pcl_paper_size((gx_device *) pdev) == + PAPER_SIZE_A4 ? DUPLEX_BOTTOM_MARGIN_A4 : + DUPLEX_BOTTOM_MARGIN_LETTER); + } else + lnum = -1; - llen = GetScanLine(pdev, &lnum, data_ptrs, misc_vars, rmask); + llen = GetScanLine(pdev, &lnum, data_ptrs, misc_vars, rmask); - while ( PAGE_CTR_OK ) { + while (PAGE_CTR_OK) { - while (PAGE_CTR_OK && llen == 0) { - ++num_blank_lines; - llen = GetScanLine(pdev, &lnum, data_ptrs, misc_vars, rmask); - } + while (PAGE_CTR_OK && llen == 0) { + ++num_blank_lines; + llen = GetScanLine(pdev, &lnum, data_ptrs, misc_vars, rmask); + } - if (! PAGE_CTR_OK) { - break; - } - - /* Skip blank lines if any */ - if (num_blank_lines > 0) { - fprintf(prn_stream, "%dy", num_blank_lines / (cdj970->yscal + 1)); - memset(data_ptrs->plane_data[0][0], 0, (misc_vars->plane_size * 2 * misc_vars->num_comps)); - memset(data_ptrs->plane_data_c[0][0], 0, (misc_vars->plane_size_c * 2 * misc_vars->num_comps)); - - } - - /* all blank lines printed, now for the non-blank lines */ - if (cdj970->yscal && odd(lnum)) { - /* output a blank black plane for odd lines */ - putc('v', prn_stream); - } - /* now output all non blank lines */ - while (PAGE_CTR_OK && llen != 0) { - misc_vars->is_color_data = 0; /* maybe we have color ? */ - (*cdj970->print_non_blank_lines) (pdev, data_ptrs, misc_vars, - error_values, gamma, prn_stream); - llen = GetScanLine(pdev, &lnum, data_ptrs, misc_vars, rmask); - } - if (cdj970->yscal && odd(lnum)) { /* output empty line for odd lines */ - (*cdj970->print_non_blank_lines) (pdev, data_ptrs, misc_vars, - error_values, gamma, prn_stream); - } - /* the current line is empty => run the next iteration */ - num_blank_lines = 0; - } + if (!PAGE_CTR_OK) { + break; + } + + /* Skip blank lines if any */ + if (num_blank_lines > 0) { + fprintf(prn_stream, "%dy", num_blank_lines / (cdj970->yscal + 1)); + memset(data_ptrs->plane_data[0][0], 0, + (misc_vars->plane_size * 2 * misc_vars->num_comps)); + memset(data_ptrs->plane_data_c[0][0], 0, + (misc_vars->plane_size_c * 2 * misc_vars->num_comps)); + + } + + /* all blank lines printed, now for the non-blank lines */ + if (cdj970->yscal && odd(lnum)) { + /* output a blank black plane for odd lines */ + putc('v', prn_stream); + } + /* now output all non blank lines */ + while (PAGE_CTR_OK && llen != 0) { + misc_vars->is_color_data = 0; /* maybe we have color ? */ + (*cdj970->print_non_blank_lines) (pdev, data_ptrs, misc_vars, + error_values, gamma, + prn_stream); + llen = GetScanLine(pdev, &lnum, data_ptrs, misc_vars, rmask); + } + if (cdj970->yscal && odd(lnum)) { /* output empty line for odd lines */ + (*cdj970->print_non_blank_lines) (pdev, data_ptrs, misc_vars, + error_values, gamma, + prn_stream); + } + /* the current line is empty => run the next iteration */ + num_blank_lines = 0; + } } /* print_c2plane: Sprint_line compresses (mode 2) and outputs one plane ----------------------------------------------------------------------------------*/ -static void print_c2plane( FILE *prn_stream, - char plane_code, - int plane_size, - const byte *curr, - const byte *prev, - byte *out_data) +static void +print_c2plane(FILE * prn_stream, + char plane_code, + int plane_size, + const byte * curr, const byte * prev, byte * out_data) { - const word *row = (const word *)curr; - const word *end_row = row + plane_size/W; - int out_count; - - out_count = gdev_pcl_mode2compress(row, end_row, out_data); - - /* and output the data */ - if (out_count > 0) { - fprintf(prn_stream, "%d%c", out_count, plane_code); - fwrite(out_data, sizeof(byte), out_count, prn_stream); - } else { - putc(plane_code, prn_stream); - } + const word *row = (const word *)curr; + const word *end_row = row + plane_size / W; + int out_count; + + out_count = gdev_pcl_mode2compress(row, end_row, out_data); + + /* and output the data */ + if (out_count > 0) { + fprintf(prn_stream, "%d%c", out_count, plane_code); + fwrite(out_data, sizeof(byte), out_count, prn_stream); + } else { + putc(plane_code, prn_stream); + } } #define SET_BLACK(n) *cPa=*cPa|n; *mPa=*mPa|n; *yPa=*yPa|n; /* cdj970_print_non_blank_lines: Printing non-blank lines ----------------------------------------------------------------------------------*/ -static void cdj970_print_non_blank_lines( gx_device_printer *pdev, - struct ptr_arrays *data_ptrs, - struct misc_struct *misc_vars, - struct error_val_field *error_values, - const Gamma *gamma, - FILE *prn_stream) +static void +cdj970_print_non_blank_lines(gx_device_printer * pdev, + struct ptr_arrays *data_ptrs, + struct misc_struct *misc_vars, + struct error_val_field *error_values, + const Gamma * gamma, FILE * prn_stream) { - static const char *const plane_code[2] = {"vvvv", "wvvv"}; - - int i; - byte *kP = data_ptrs->plane_data[misc_vars->scan + 2][3]; - byte *dp = data_ptrs->data[misc_vars->scan + 2]; - int *ep = data_ptrs->errors[misc_vars->scan]; - - /* we need cmyk color separation befor all the rest, since - black may be contained in the color fields. This needs to - be done on all pixel-rows, since even unused color-bytes - might generate black */ - - misc_vars->is_color_data = - do_gcr(misc_vars->databuff_size, data_ptrs->data[misc_vars->scan], - gamma->k, gamma->c, gamma->m, gamma->y, gamma->correct); - - /* dithering the black-plane */ - FSDlinebw(misc_vars->scan, misc_vars->plane_size, - error_values, kP, misc_vars->num_comps, ep, dp); - /* output the black plane */ - print_c2plane(prn_stream, 'v', misc_vars->plane_size, - data_ptrs->plane_data[misc_vars->scan][3], - data_ptrs->plane_data[1 - misc_vars->scan][3], - data_ptrs->out_data); - - /* since color resolution is only half of the b/w-resolution, - we only output every second row */ - if (!cdj970->yscal || misc_vars->is_two_pass) { - int plane_size_c = (*rescale_color_plane[cdj970->xscal][cdj970->yscal]) - (misc_vars->databuff_size, - data_ptrs->data[misc_vars->scan], - data_ptrs->data[1 - misc_vars->scan], - data_ptrs->data_c[misc_vars->cscan]) / misc_vars->storage_bpp; - - /* dither the color planes */ - do_floyd_steinberg(misc_vars->scan, misc_vars->cscan, - misc_vars->plane_size, plane_size_c, - misc_vars->num_comps, data_ptrs, pdev, error_values); - - /* the color pointers, lower byte */ - /* Transfer raster graphics in the order C, M, Y, that is planes 2,1,0 */ - for (i = misc_vars->num_comps - 2; i >= 0; i--) { - - /* output the lower color planes */ - if (cdj970->intensities > 2) { - /* output the upper color planes */ - print_c2plane(prn_stream, plane_code[0][i], plane_size_c, - data_ptrs->plane_data_c[misc_vars->cscan][i + 4], - data_ptrs->plane_data_c[1 - misc_vars->cscan][i + 4], - data_ptrs->out_data); + static const char *const plane_code[2] = { "vvvv", "wvvv" }; + + int i; + byte *kP = data_ptrs->plane_data[misc_vars->scan + 2][3]; + byte *dp = data_ptrs->data[misc_vars->scan + 2]; + int *ep = data_ptrs->errors[misc_vars->scan]; + + /* we need cmyk color separation befor all the rest, since + black may be contained in the color fields. This needs to + be done on all pixel-rows, since even unused color-bytes + might generate black */ + + misc_vars->is_color_data = + do_gcr(misc_vars->databuff_size, data_ptrs->data[misc_vars->scan], + gamma->k, gamma->c, gamma->m, gamma->y, gamma->correct); + + /* dithering the black-plane */ + FSDlinebw(misc_vars->scan, misc_vars->plane_size, + error_values, kP, misc_vars->num_comps, ep, dp); + /* output the black plane */ + print_c2plane(prn_stream, 'v', misc_vars->plane_size, + data_ptrs->plane_data[misc_vars->scan][3], + data_ptrs->plane_data[1 - misc_vars->scan][3], + data_ptrs->out_data); + + /* since color resolution is only half of the b/w-resolution, + we only output every second row */ + if (!cdj970->yscal || misc_vars->is_two_pass) { + int plane_size_c = + (*rescale_color_plane[cdj970->xscal][cdj970->yscal]) + (misc_vars->databuff_size, + data_ptrs->data[misc_vars->scan], + data_ptrs->data[1 - misc_vars->scan], + data_ptrs->data_c[misc_vars->cscan]) / misc_vars->storage_bpp; + + /* dither the color planes */ + do_floyd_steinberg(misc_vars->scan, misc_vars->cscan, + misc_vars->plane_size, plane_size_c, + misc_vars->num_comps, data_ptrs, pdev, + error_values); - } - print_c2plane(prn_stream, plane_code[1][i], - plane_size_c, - data_ptrs->plane_data_c[misc_vars->cscan][i], - data_ptrs->plane_data_c[1 - misc_vars->cscan][i], - data_ptrs->out_data); + /* the color pointers, lower byte */ + /* Transfer raster graphics in the order C, M, Y, that is planes 2,1,0 */ + for (i = misc_vars->num_comps - 2; i >= 0; i--) { - } /* End For i = num_comps */ + /* output the lower color planes */ + if (cdj970->intensities > 2) { + /* output the upper color planes */ + print_c2plane(prn_stream, plane_code[0][i], plane_size_c, + data_ptrs->plane_data_c[misc_vars->cscan][i + + 4], + data_ptrs->plane_data_c[1 - + misc_vars->cscan][i + + 4], + data_ptrs->out_data); + + } + print_c2plane(prn_stream, plane_code[1][i], + plane_size_c, + data_ptrs->plane_data_c[misc_vars->cscan][i], + data_ptrs->plane_data_c[1 - misc_vars->cscan][i], + data_ptrs->out_data); - misc_vars->cscan = 1 - misc_vars->cscan; + } /* End For i = num_comps */ - } /* End of is_two_pass */ + misc_vars->cscan = 1 - misc_vars->cscan; - return; + } + /* End of is_two_pass */ + return; } -/* do_floyd_steinberg: moved that code into his own subroutine, - * otherwise things get somewhat clumsy +/* do_floyd_steinberg: moved that code into his own subroutine, + * otherwise things get somewhat clumsy ----------------------------------------------------------------------------------*/ -static void do_floyd_steinberg( int scan, - int cscan, - int plane_size, - int plane_size_c, - int n, - struct ptr_arrays *data_ptrs, - gx_device_printer *pdev, - struct error_val_field *error_values) +static void +do_floyd_steinberg(int scan, + int cscan, + int plane_size, + int plane_size_c, + int n, + struct ptr_arrays *data_ptrs, + gx_device_printer * pdev, + struct error_val_field *error_values) { - /* the color pointers */ - byte *cPa, *mPa, *yPa, *cPb, *mPb, *yPb; - byte *dpc; - int *epc; - - /* the color pointers, lower byte */ - cPa = data_ptrs->plane_data_c[cscan + 2][2]; - mPa = data_ptrs->plane_data_c[cscan + 2][1]; - yPa = data_ptrs->plane_data_c[cscan + 2][0]; - - /* upper byte */ - cPb = data_ptrs->plane_data_c[cscan + 2][6]; - mPb = data_ptrs->plane_data_c[cscan + 2][5]; - yPb = data_ptrs->plane_data_c[cscan + 2][4]; - - /* data and error */ - dpc = data_ptrs->data_c[cscan + 2]; - epc = data_ptrs->errors_c[cscan]; - - switch (cdj970->intensities) { - case 2: - FSDlinec2(cscan, plane_size_c, error_values, - cPa, mPa, yPa, n, dpc, epc); - break; - - case 3: - FSDlinec3(cscan, plane_size_c, error_values, - cPa, mPa, yPa, cPb, mPb, yPb, n, dpc, epc); - break; - - case 4: - FSDlinec4(cscan, plane_size_c, error_values, - cPa, mPa, yPa, cPb, mPb, yPb, n, dpc, epc); - break; - - default: - assert(0); - } + /* the color pointers */ + byte *cPa, *mPa, *yPa, *cPb, *mPb, *yPb; + byte *dpc; + int *epc; + + /* the color pointers, lower byte */ + cPa = data_ptrs->plane_data_c[cscan + 2][2]; + mPa = data_ptrs->plane_data_c[cscan + 2][1]; + yPa = data_ptrs->plane_data_c[cscan + 2][0]; + + /* upper byte */ + cPb = data_ptrs->plane_data_c[cscan + 2][6]; + mPb = data_ptrs->plane_data_c[cscan + 2][5]; + yPb = data_ptrs->plane_data_c[cscan + 2][4]; + + /* data and error */ + dpc = data_ptrs->data_c[cscan + 2]; + epc = data_ptrs->errors_c[cscan]; + + switch (cdj970->intensities) { + case 2: + FSDlinec2(cscan, plane_size_c, error_values, + cPa, mPa, yPa, n, dpc, epc); + break; + + case 3: + FSDlinec3(cscan, plane_size_c, error_values, + cPa, mPa, yPa, cPb, mPb, yPb, n, dpc, epc); + break; + + case 4: + FSDlinec4(cscan, plane_size_c, error_values, + cPa, mPa, yPa, cPb, mPb, yPb, n, dpc, epc); + break; + + default: + assert(0); + } - return; + return; } /* do_gamma: here we do our own gamma-correction ----------------------------------------------------------------------------------*/ -static void do_gamma(float mastergamma, float gammaval, byte values[256]) +static void +do_gamma(float mastergamma, float gammaval, byte values[256]) { - int i; - float gamma; + int i; + float gamma; - if (gammaval > 0.0) { - gamma = gammaval; - } else { - gamma = mastergamma; - } + if (gammaval > 0.0) { + gamma = gammaval; + } else { + gamma = mastergamma; + } - for (i = 0; i < 256; i++) { - values[i] = (byte) (255.0 * (1.0 - pow(((double)(255.0 - (float)i) / 255.0), - (double)(1.0 / gamma)))); - } + for (i = 0; i < 256; i++) { + values[i] = + (byte) (255.0 * + (1.0 - + pow(((double)(255.0 - (float)i) / 255.0), + (double)(1.0 / gamma)))); + } - return; + return; } /* do_black_correction: here we calculate a lookup-table which is used to - * compensate the relativ loss of color due to - * undercolor-removal + * compensate the relativ loss of color due to + * undercolor-removal ----------------------------------------------------------------------------------*/ -static void do_black_correction(float kvalue, int kcorrect[256]) +static void +do_black_correction(float kvalue, int kcorrect[256]) { - int i; + int i; - for (i = 0; i < 256; i++) { - kcorrect[i] = (int)(100.0 * kvalue * (pow(10.0, pow((i / 255.0), 3.0)) - 1.0)); - } + for (i = 0; i < 256; i++) { + kcorrect[i] = + (int)(100.0 * kvalue * (pow(10.0, pow((i / 255.0), 3.0)) - 1.0)); + } - return; + return; } /* DOUCR: For Better Performance we use a macro here @@ -1255,157 +1304,168 @@ static void do_black_correction(float kvalue, int kcorrect[256]) } /* do_gcr: Since resolution can be different on different planes, we need to - * do real color separation, here we try a real grey component - * replacement + * do real color separation, here we try a real grey component + * replacement ----------------------------------------------------------------------------------*/ -static int do_gcr( int bytecount, - byte *inbyte, - const byte kvalues[256], - const byte cvalues[256], - const byte mvalues[256], - const byte yvalues[256], - const int kcorrect[256]) +static int +do_gcr(int bytecount, + byte * inbyte, + const byte kvalues[256], + const byte cvalues[256], + const byte mvalues[256], + const byte yvalues[256], const int kcorrect[256]) { - int i, ucr, kadd, is_color = 0; - byte *black, *cyan, *magenta, *yellow; - float uca_fac; - - /* Grey component replacement */ - for (i = 0; i < bytecount; i += 4) { - black = inbyte++; /* Assign to black the current address of inbyte */ - cyan = inbyte++; - magenta = inbyte++; - yellow = inbyte++; - - if (*magenta + *yellow + *cyan > 0) { /* if any color at all */ + int i, ucr, kadd, is_color = 0; + byte *black, *cyan, *magenta, *yellow; + float uca_fac; + + /* Grey component replacement */ + for (i = 0; i < bytecount; i += 4) { + black = inbyte++; /* Assign to black the current address of inbyte */ + cyan = inbyte++; + magenta = inbyte++; + yellow = inbyte++; + + if (*magenta + *yellow + *cyan > 0) { /* if any color at all */ is_color = 1; - if ((*cyan >= *magenta) && (*magenta >= *yellow) && (*yellow > 0)) { /* if any grey component */ - DOGCR(cyan, magenta, yellow, black); - } else if ((*cyan >= *yellow) && (*yellow >= *magenta) && (*magenta > 0)) { - DOGCR(cyan, yellow, magenta, black); - } else if ((*yellow >= *magenta) && (*magenta >= *cyan) && (*cyan > 0)) { - DOGCR(yellow, magenta, cyan, black); - } else if ((*yellow >= *cyan) && (*cyan >= *magenta) && (*magenta > 0)) { - DOGCR(yellow, cyan, magenta, black); - } else if ((*magenta >= *yellow) && (*yellow >= *cyan) && (*cyan > 0)) { - DOGCR(magenta, yellow, cyan, black); - } else if ((*magenta >= *cyan) && (*cyan >= *yellow) && (*yellow > 0)) { - DOGCR(magenta, cyan, yellow, black); - } else { /* do gamma only if no black */ - ; + if ((*cyan >= *magenta) && (*magenta >= *yellow) && (*yellow > 0)) { /* if any grey component */ + DOGCR(cyan, magenta, yellow, black); + } else if ((*cyan >= *yellow) && (*yellow >= *magenta) + && (*magenta > 0)) { + DOGCR(cyan, yellow, magenta, black); + } else if ((*yellow >= *magenta) && (*magenta >= *cyan) + && (*cyan > 0)) { + DOGCR(yellow, magenta, cyan, black); + } else if ((*yellow >= *cyan) && (*cyan >= *magenta) + && (*magenta > 0)) { + DOGCR(yellow, cyan, magenta, black); + } else if ((*magenta >= *yellow) && (*yellow >= *cyan) + && (*cyan > 0)) { + DOGCR(magenta, yellow, cyan, black); + } else if ((*magenta >= *cyan) && (*cyan >= *yellow) + && (*yellow > 0)) { + DOGCR(magenta, cyan, yellow, black); + } else { /* do gamma only if no black */ + ; } *cyan = *(cvalues + *cyan); *magenta = *(mvalues + *magenta); *yellow = *(yvalues + *yellow); - } /* end of if c+m+y > 0 */ - - *black = *(kvalues + *black); - } /* end of for bytecount */ + } + /* end of if c+m+y > 0 */ + *black = *(kvalues + *black); + } /* end of for bytecount */ - return (is_color); + return (is_color); } -/* rescale_byte_wise2x2: Since resolution can be different on different planes, - * we need to rescale the data byte by byte +/* rescale_byte_wise2x2: Since resolution can be different on different planes, + * we need to rescale the data byte by byte ----------------------------------------------------------------------------------*/ -static int rescale_byte_wise2x2( int bytecount, - const byte *inbytea, - const byte *inbyteb, - byte *outbyte) +static int +rescale_byte_wise2x2(int bytecount, + const byte * inbytea, + const byte * inbyteb, byte * outbyte) { - register int i, j; - int max = bytecount / 2; + register int i, j; + int max = bytecount / 2; - for (i = 0; i < max; i += 4) { - j = 2 * i; - /* cyan */ - outbyte[i + 1] = (inbytea[j + 1] + inbytea[j + 5] + inbyteb[j + 1] + inbyteb[j + 5]) / 4; + for (i = 0; i < max; i += 4) { + j = 2 * i; + /* cyan */ + outbyte[i + 1] = + (inbytea[j + 1] + inbytea[j + 5] + inbyteb[j + 1] + + inbyteb[j + 5]) / 4; - /* magenta */ - outbyte[i + 2] = (inbytea[j + 2] + inbytea[j + 6] + inbyteb[j + 2] + inbyteb[j + 6]) / 4; + /* magenta */ + outbyte[i + 2] = + (inbytea[j + 2] + inbytea[j + 6] + inbyteb[j + 2] + + inbyteb[j + 6]) / 4; - /* yellow */ - outbyte[i + 3] = (inbytea[j + 3] + inbytea[j + 7] + inbyteb[j + 3] + inbyteb[j + 7]) / 4; - } + /* yellow */ + outbyte[i + 3] = + (inbytea[j + 3] + inbytea[j + 7] + inbyteb[j + 3] + + inbyteb[j + 7]) / 4; + } - return (max); + return (max); } -/* rescale_byte_wise2x1: Since resolution can be different on different planes, - * we need to rescale the data byte by byte +/* rescale_byte_wise2x1: Since resolution can be different on different planes, + * we need to rescale the data byte by byte ----------------------------------------------------------------------------------*/ -static int rescale_byte_wise2x1( int bytecount, - const byte *inbytea, - const byte *inbyteb, - byte *outbyte) +static int +rescale_byte_wise2x1(int bytecount, + const byte * inbytea, + const byte * inbyteb, byte * outbyte) { - register int i, j; - int max = bytecount / 2; + register int i, j; + int max = bytecount / 2; - for (i = 0; i < max; i += 4) { - j = 2 * i; + for (i = 0; i < max; i += 4) { + j = 2 * i; - /* cyan */ - outbyte[i + 1] = (inbytea[j + 1] + inbytea[j + 5]) / 2; + /* cyan */ + outbyte[i + 1] = (inbytea[j + 1] + inbytea[j + 5]) / 2; - /* magenta */ - outbyte[i + 2] = (inbytea[j + 2] + inbytea[j + 6]) / 2; + /* magenta */ + outbyte[i + 2] = (inbytea[j + 2] + inbytea[j + 6]) / 2; - /* yellow */ - outbyte[i + 3] = (inbytea[j + 3] + inbytea[j + 7]) / 2; - } + /* yellow */ + outbyte[i + 3] = (inbytea[j + 3] + inbytea[j + 7]) / 2; + } - return (max); + return (max); } -/* rescale_byte_wise1x2: Since resolution can be different on different planes, - * we need to rescale the data byte by byte +/* rescale_byte_wise1x2: Since resolution can be different on different planes, + * we need to rescale the data byte by byte ----------------------------------------------------------------------------------*/ -static int rescale_byte_wise1x2( int bytecount, - const byte *inbytea, - const byte *inbyteb, - byte *outbyte) +static int +rescale_byte_wise1x2(int bytecount, + const byte * inbytea, + const byte * inbyteb, byte * outbyte) { - register int i; + register int i; - for (i = 0; i < bytecount; i += 4) { - /* cyan */ - outbyte[i + 1] = (inbytea[i + 1] + inbyteb[i + 1]) / 2; + for (i = 0; i < bytecount; i += 4) { + /* cyan */ + outbyte[i + 1] = (inbytea[i + 1] + inbyteb[i + 1]) / 2; - /* magenta */ - outbyte[i + 2] = (inbytea[i + 2] + inbyteb[i + 2]) / 2; + /* magenta */ + outbyte[i + 2] = (inbytea[i + 2] + inbyteb[i + 2]) / 2; - /* yellow */ - outbyte[i + 3] = (inbytea[i + 3] + inbyteb[i + 3]) / 2; - } + /* yellow */ + outbyte[i + 3] = (inbytea[i + 3] + inbyteb[i + 3]) / 2; + } - return bytecount; + return bytecount; } -/* rescale_byte_wise1x1: Since resolution can be different on different planes, - * we need to rescale the data byte by byte +/* rescale_byte_wise1x1: Since resolution can be different on different planes, + * we need to rescale the data byte by byte ----------------------------------------------------------------------------------*/ -static int rescale_byte_wise1x1( int bytecount, - const byte *inbytea, - const byte *inbyteb, - byte *outbyte) +static int +rescale_byte_wise1x1(int bytecount, + const byte * inbytea, + const byte * inbyteb, byte * outbyte) { - register int i; + register int i; - for (i = 0; i < bytecount; i += 4) { - /* cyan */ - outbyte[i + 1] = inbytea[i + 1]; + for (i = 0; i < bytecount; i += 4) { + /* cyan */ + outbyte[i + 1] = inbytea[i + 1]; - /* magenta */ - outbyte[i + 2] = inbytea[i + 2]; + /* magenta */ + outbyte[i + 2] = inbytea[i + 2]; - /* yellow */ - outbyte[i + 3] = inbytea[i + 3]; - } + /* yellow */ + outbyte[i + 3] = inbytea[i + 3]; + } - return (bytecount); + return (bytecount); } /* MACROS FOR DITHERING (we use macros for compact source and faster code) */ @@ -1440,31 +1500,31 @@ static int rescale_byte_wise1x1( int bytecount, /* --------------------------- */ -/* init_error_buffer: initialise the error_buffer +/* init_error_buffer: initialise the error_buffer ----------------------------------------------------------------------------------*/ -static void init_error_buffer( struct misc_struct *misc_vars, - struct ptr_arrays *data_ptrs) +static void +init_error_buffer(struct misc_struct *misc_vars, struct ptr_arrays *data_ptrs) { - int i; - int *ep; - int *epc; + int i; + int *ep; + int *epc; - ep = data_ptrs->errors[0]; - epc = data_ptrs->errors_c[0]; + ep = data_ptrs->errors[0]; + epc = data_ptrs->errors_c[0]; - if (misc_vars->bits_per_pixel > 4) { /* Randomly seed initial error buffer */ - /* Otherwise, the first dithered rows would look rather uniform */ - for (i = 0; i < misc_vars->databuff_size; i++) { /* 600dpi planes */ + if (misc_vars->bits_per_pixel > 4) { /* Randomly seed initial error buffer */ + /* Otherwise, the first dithered rows would look rather uniform */ + for (i = 0; i < misc_vars->databuff_size; i++) { /* 600dpi planes */ *ep++ = RANDOM; - } + } - /* Now for the 2 * 300dpi color planes */ - for (i = 0; i < misc_vars->databuff_size_c; i++) { + /* Now for the 2 * 300dpi color planes */ + for (i = 0; i < misc_vars->databuff_size_c; i++) { *epc++ = RANDOM; - } } + } - return; + return; } /* FSdither: @@ -1485,115 +1545,109 @@ static void init_error_buffer( struct misc_struct *misc_vars, /* FSDlinebw: The hp970 has 600dpi black and 300 dpi color. ----------------------------------------------------------------------------------*/ -static void FSDlinebw( int scan, - int plane_size, - struct error_val_field *error_values, - byte *kP, - int n, - int *ep, - byte *dp) +static void +FSDlinebw(int scan, + int plane_size, + struct error_val_field *error_values, + byte * kP, int n, int *ep, byte * dp) { - if (scan == 0) { /* going_up */ - byte k, bitmask; /* k = outbyte byte, whereas bitmask defines the - bit to be set within k */ - int oldErr, i; + if (scan == 0) { /* going_up */ + byte k, bitmask; /* k = outbyte byte, whereas bitmask defines the + bit to be set within k */ + int oldErr, i; - for (i = 0; i < plane_size; i++) { - bitmask = 0x80; + for (i = 0; i < plane_size; i++) { + bitmask = 0x80; for (k = 0; bitmask != 0; bitmask >>= 1) { - /* dp points to the first word of the input data which is in kcmy-format */ - /* k points to the beginning of the first outbut byte, which - is filled up, bit by bit while looping over bytemask */ - /* ep points to the first word of the error-plane which - contains the errors kcmy format */ - /* err_values->k tempararily holds the error-value */ - /* bitmask selects the bit to be set in the outbyte */ - /* n gives the offset for the byte selection within - words. With simple cmyk-printing, this should be 4 */ - /* 0 points to the active color within the input-word, i.e. 0 - = black, 1 = cyan, 2 = yellow, 3 = magenta */ - - FSdither(dp, k, ep, error_values->k, bitmask, -n, 0); - dp += n, ep += n; /* increment the input and error pointer one - word (=4 byte) further, in order to - convert the next word into an bit */ - } - *kP++ = k; /* fill the output-plane byte with the computet byte - and increment the output plane pointer one byte */ - } - } else { /* going_down */ - byte k, bitmask; - int oldErr, i; + /* dp points to the first word of the input data which is in kcmy-format */ + /* k points to the beginning of the first outbut byte, which + is filled up, bit by bit while looping over bytemask */ + /* ep points to the first word of the error-plane which + contains the errors kcmy format */ + /* err_values->k tempararily holds the error-value */ + /* bitmask selects the bit to be set in the outbyte */ + /* n gives the offset for the byte selection within + words. With simple cmyk-printing, this should be 4 */ + /* 0 points to the active color within the input-word, i.e. 0 + = black, 1 = cyan, 2 = yellow, 3 = magenta */ + + FSdither(dp, k, ep, error_values->k, bitmask, -n, 0); + dp += n, ep += n; /* increment the input and error pointer one + word (=4 byte) further, in order to + convert the next word into an bit */ + } + *kP++ = k; /* fill the output-plane byte with the computet byte + and increment the output plane pointer one byte */ + } + } else { /* going_down */ + byte k, bitmask; + int oldErr, i; - for (i = 0; i < plane_size; i++) { + for (i = 0; i < plane_size; i++) { bitmask = 0x01; - for (k = 0; bitmask != 0; bitmask <<= 1) { - dp -= n, ep -= n; - FSdither(dp, k, ep, error_values->k, bitmask, n, 0); - } - *--kP = k; - } + for (k = 0; bitmask != 0; bitmask <<= 1) { + dp -= n, ep -= n; + FSdither(dp, k, ep, error_values->k, bitmask, n, 0); + } + *--kP = k; } + } - return; + return; } /* FSDlinec2: Since bw has already been dithered for the hp970c, we need - * an adapted dither algorythm + * an adapted dither algorythm ----------------------------------------------------------------------------------*/ -static void FSDlinec2( int scan, - int plane_size, - struct error_val_field *error_values, - byte *cPa, - byte *mPa, - byte *yPa, - int n, - byte *dp, - int *ep) +static void +FSDlinec2(int scan, + int plane_size, + struct error_val_field *error_values, + byte * cPa, byte * mPa, byte * yPa, int n, byte * dp, int *ep) { - if (scan == 0) { /* going_up */ - int oldErr, i; - byte ca, ya, ma, bitmask; + if (scan == 0) { /* going_up */ + int oldErr, i; + byte ca, ya, ma, bitmask; - for (i = 0; i < plane_size; i++) { + for (i = 0; i < plane_size; i++) { bitmask = 0x80; ca = ya = ma = 0; - for (ca = 0; bitmask != 0; bitmask >>= 1) { - FSdither(dp, ca, ep, error_values->c, bitmask, -n, n - 3); - FSdither(dp, ma, ep, error_values->m, bitmask, -n, n - 2); - FSdither(dp, ya, ep, error_values->y, bitmask, -n, n - 1); - dp += n, ep += n; + for (ca = 0; bitmask != 0; bitmask >>= 1) { + FSdither(dp, ca, ep, error_values->c, bitmask, -n, n - 3); + FSdither(dp, ma, ep, error_values->m, bitmask, -n, n - 2); + FSdither(dp, ya, ep, error_values->y, bitmask, -n, n - 1); + dp += n, ep += n; } *cPa++ = ca; *mPa++ = ma; *yPa++ = ya; - } - } else { /* going_down */ - byte ca, ya, ma, bitmask; - int oldErr, i; + } + } else { /* going_down */ + byte ca, ya, ma, bitmask; + int oldErr, i; - for (i = 0; i < plane_size; i++) { + for (i = 0; i < plane_size; i++) { bitmask = 0x01; ca = ya = ma = 0; for (ca = 0; bitmask != 0; bitmask <<= 1) { - dp -= n, ep -= n; - FSdither(dp, ya, ep, error_values->y, bitmask, n, n - 1); - FSdither(dp, ma, ep, error_values->m, bitmask, n, n - 2); - FSdither(dp, ca, ep, error_values->c, bitmask, n, n - 3); + dp -= n, ep -= n; + FSdither(dp, ya, ep, error_values->y, bitmask, n, n - 1); + FSdither(dp, ma, ep, error_values->m, bitmask, n, n - 2); + FSdither(dp, ca, ep, error_values->c, bitmask, n, n - 3); } *--yPa = ya; *--mPa = ma; *--cPa = ca; - } } + } - return; + return; } /* FSdither9703: while printing on paper, we only use 3 -intensities @@ -1618,32 +1672,31 @@ static void FSDlinec2( int scan, /* FSDlinec3: On ordinary paper, we'll only use 3 intensities with the hp970 ----------------------------------------------------------------------------------*/ -static void FSDlinec3( int scan, - int plane_size, - struct error_val_field *error_values, - byte *cPa, - byte *mPa, - byte *yPa, - byte *cPb, - byte *mPb, - byte *yPb, - int n, - byte *dp, - int *ep) +static void +FSDlinec3(int scan, + int plane_size, + struct error_val_field *error_values, + byte * cPa, + byte * mPa, + byte * yPa, + byte * cPb, byte * mPb, byte * yPb, int n, byte * dp, int *ep) { - if (scan == 0) { /* going_up */ - byte ca, ya, ma, cb, yb, mb, bitmask; - int oldErr, i; + if (scan == 0) { /* going_up */ + byte ca, ya, ma, cb, yb, mb, bitmask; + int oldErr, i; - for (i = 0; i < plane_size; i++) { + for (i = 0; i < plane_size; i++) { bitmask = 0x80; ca = ya = ma = cb = yb = mb = 0; for (ca = 0; bitmask != 0; bitmask >>= 1) { - FSdither9703(dp, ca, cb, ep, error_values->c, bitmask, -n, n - 3); - FSdither9703(dp, ma, mb, ep, error_values->m, bitmask, -n, n - 2); - FSdither9703(dp, ya, yb, ep, error_values->y, bitmask, -n, n - 1); - dp += n, ep += n; + FSdither9703(dp, ca, cb, ep, error_values->c, bitmask, -n, + n - 3); + FSdither9703(dp, ma, mb, ep, error_values->m, bitmask, -n, + n - 2); + FSdither9703(dp, ya, yb, ep, error_values->y, bitmask, -n, + n - 1); + dp += n, ep += n; } *cPa++ = ca; @@ -1652,20 +1705,23 @@ static void FSDlinec3( int scan, *cPb++ = cb; *mPb++ = mb; *yPb++ = yb; - } - } else { /* going_down */ - byte ca, ya, ma, cb, yb, mb, bitmask; - int oldErr, i; + } + } else { /* going_down */ + byte ca, ya, ma, cb, yb, mb, bitmask; + int oldErr, i; - for (i = 0; i < plane_size; i++) { + for (i = 0; i < plane_size; i++) { bitmask = 0x01; ca = ya = ma = cb = yb = mb = 0; for (ca = 0; bitmask != 0; bitmask <<= 1) { - dp -= n, ep -= n; - FSdither9703(dp, ya, yb, ep, error_values->y, bitmask, n, n - 1); - FSdither9703(dp, ma, mb, ep, error_values->m, bitmask, n, n - 2); - FSdither9703(dp, ca, cb, ep, error_values->c, bitmask, n, n - 3); + dp -= n, ep -= n; + FSdither9703(dp, ya, yb, ep, error_values->y, bitmask, n, + n - 1); + FSdither9703(dp, ma, mb, ep, error_values->m, bitmask, n, + n - 2); + FSdither9703(dp, ca, cb, ep, error_values->c, bitmask, n, + n - 3); } *--yPa = ya; @@ -1674,10 +1730,10 @@ static void FSDlinec3( int scan, *--yPb = yb; *--mPb = mb; *--cPb = cb; - } } + } - return; + return; } /* FSdither9704: the hp970 knows about 4 different color intensities per color @@ -1706,34 +1762,33 @@ static void FSDlinec3( int scan, } /* FSDlinec4: The hp970c knows about 4 intensity levels per color. Once more, - * we need an adapted dither algorythm + * we need an adapted dither algorythm ----------------------------------------------------------------------------------*/ -static void FSDlinec4( int scan, - int plane_size, - struct error_val_field *error_values, - byte *cPa, - byte *mPa, - byte *yPa, - byte *cPb, - byte *mPb, - byte *yPb, - int n, - byte *dp, - int *ep) +static void +FSDlinec4(int scan, + int plane_size, + struct error_val_field *error_values, + byte * cPa, + byte * mPa, + byte * yPa, + byte * cPb, byte * mPb, byte * yPb, int n, byte * dp, int *ep) { - if (scan == 0) { /* going_up */ - byte ca, ya, ma, cb, yb, mb, bitmask; - int oldErr, i; + if (scan == 0) { /* going_up */ + byte ca, ya, ma, cb, yb, mb, bitmask; + int oldErr, i; - for (i = 0; i < plane_size; i++) { + for (i = 0; i < plane_size; i++) { bitmask = 0x80; ca = ya = ma = cb = yb = mb = 0; for (ca = 0; bitmask != 0; bitmask >>= 1) { - FSdither9704(dp, ca, cb, ep, error_values->c, bitmask, -n, n - 3); - FSdither9704(dp, ma, mb, ep, error_values->m, bitmask, -n, n - 2); - FSdither9704(dp, ya, yb, ep, error_values->y, bitmask, -n, n - 1); - dp += n, ep += n; + FSdither9704(dp, ca, cb, ep, error_values->c, bitmask, -n, + n - 3); + FSdither9704(dp, ma, mb, ep, error_values->m, bitmask, -n, + n - 2); + FSdither9704(dp, ya, yb, ep, error_values->y, bitmask, -n, + n - 1); + dp += n, ep += n; } @@ -1743,20 +1798,23 @@ static void FSDlinec4( int scan, *cPb++ = cb; *mPb++ = mb; *yPb++ = yb; - } - } else { /* going_down */ - byte ca, ya, ma, cb, yb, mb, bitmask; - int oldErr, i; + } + } else { /* going_down */ + byte ca, ya, ma, cb, yb, mb, bitmask; + int oldErr, i; - for (i = 0; i < plane_size; i++) { + for (i = 0; i < plane_size; i++) { bitmask = 0x01; ca = ya = ma = cb = yb = mb = 0; for (ca = 0; bitmask != 0; bitmask <<= 1) { - dp -= n, ep -= n; - FSdither9704(dp, ya, yb, ep, error_values->y, bitmask, n, n - 1); - FSdither9704(dp, ma, mb, ep, error_values->m, bitmask, n, n - 2); - FSdither9704(dp, ca, cb, ep, error_values->c, bitmask, n, n - 3); + dp -= n, ep -= n; + FSdither9704(dp, ya, yb, ep, error_values->y, bitmask, n, + n - 1); + FSdither9704(dp, ma, mb, ep, error_values->m, bitmask, n, + n - 2); + FSdither9704(dp, ca, cb, ep, error_values->c, bitmask, n, + n - 3); } *--yPa = ya; *--mPa = ma; @@ -1764,466 +1822,467 @@ static void FSDlinec4( int scan, *--yPb = yb; *--mPb = mb; *--cPb = cb; - } } + } - return; + return; } /* calculate_memory_size: calculate the needed memory ----------------------------------------------------------------------------------*/ -static void calculate_memory_size( gx_device_printer *pdev, - struct misc_struct *misc_vars) +static void +calculate_memory_size(gx_device_printer * pdev, struct misc_struct *misc_vars) { - int xfac = cdj970->xscal ? 2 : 1; - - misc_vars->line_size = gdev_prn_raster(pdev); - misc_vars->line_size_c = misc_vars->line_size / xfac; - misc_vars->line_size_words = (misc_vars->line_size + W - 1) / W; - misc_vars->paper_size = gdev_pcl_paper_size((gx_device *) pdev); - misc_vars->num_comps = pdev->color_info.num_components; - misc_vars->bits_per_pixel = pdev->color_info.depth; - misc_vars->storage_bpp = misc_vars->num_comps * 8; - misc_vars->expanded_bpp = misc_vars->num_comps * 8; - misc_vars->errbuff_size = 0; - misc_vars->errbuff_size_c = 0; - - misc_vars->plane_size = calc_buffsize(misc_vars->line_size, misc_vars->storage_bpp); - - /* plane_size_c is dependedend on the bits used for - dithering. Currently 2 bits are sufficient */ - misc_vars->plane_size_c = 2 * misc_vars->plane_size / xfac; - - /* 4n extra values for line ends */ - /* might be wrong, see gdevcdj.c */ - misc_vars->errbuff_size = - calc_buffsize((misc_vars->plane_size * misc_vars->expanded_bpp + - misc_vars->num_comps * 4) * I, 1); - - /* 4n extra values for line ends */ - misc_vars->errbuff_size_c = - calc_buffsize((misc_vars->plane_size_c / 2 * misc_vars->expanded_bpp - + misc_vars->num_comps * 4) * I, 1); - - misc_vars->databuff_size = - misc_vars->plane_size * misc_vars->storage_bpp; - - misc_vars->databuff_size_c = - misc_vars->plane_size_c / 2 * misc_vars->storage_bpp; - - misc_vars->outbuff_size = misc_vars->plane_size * 4; - - misc_vars->storage_size_words = (((misc_vars->plane_size) * 2 - * misc_vars->num_comps) - + misc_vars->databuff_size - + misc_vars->errbuff_size - + misc_vars->outbuff_size - + ((misc_vars->plane_size_c) - * 2 - * misc_vars->num_comps) - + misc_vars->databuff_size_c - + misc_vars->errbuff_size_c - + (4 * misc_vars->plane_size_c)) - / W; - - return; + int xfac = cdj970->xscal ? 2 : 1; + + misc_vars->line_size = gdev_prn_raster(pdev); + misc_vars->line_size_c = misc_vars->line_size / xfac; + misc_vars->line_size_words = (misc_vars->line_size + W - 1) / W; + misc_vars->paper_size = gdev_pcl_paper_size((gx_device *) pdev); + misc_vars->num_comps = pdev->color_info.num_components; + misc_vars->bits_per_pixel = pdev->color_info.depth; + misc_vars->storage_bpp = misc_vars->num_comps * 8; + misc_vars->expanded_bpp = misc_vars->num_comps * 8; + misc_vars->errbuff_size = 0; + misc_vars->errbuff_size_c = 0; + + misc_vars->plane_size = + calc_buffsize(misc_vars->line_size, misc_vars->storage_bpp); + + /* plane_size_c is dependedend on the bits used for + dithering. Currently 2 bits are sufficient */ + misc_vars->plane_size_c = 2 * misc_vars->plane_size / xfac; + + /* 4n extra values for line ends */ + /* might be wrong, see gdevcdj.c */ + misc_vars->errbuff_size = + calc_buffsize((misc_vars->plane_size * misc_vars->expanded_bpp + + misc_vars->num_comps * 4) * I, 1); + + /* 4n extra values for line ends */ + misc_vars->errbuff_size_c = + calc_buffsize((misc_vars->plane_size_c / 2 * misc_vars->expanded_bpp + + misc_vars->num_comps * 4) * I, 1); + + misc_vars->databuff_size = misc_vars->plane_size * misc_vars->storage_bpp; + + misc_vars->databuff_size_c = + misc_vars->plane_size_c / 2 * misc_vars->storage_bpp; + + misc_vars->outbuff_size = misc_vars->plane_size * 4; + + misc_vars->storage_size_words = (((misc_vars->plane_size) * 2 + * misc_vars->num_comps) + + misc_vars->databuff_size + + misc_vars->errbuff_size + + misc_vars->outbuff_size + + ((misc_vars->plane_size_c) + * 2 * misc_vars->num_comps) + + misc_vars->databuff_size_c + + misc_vars->errbuff_size_c + + (4 * misc_vars->plane_size_c)) + / W; + + return; } /* init_data_structure: Initialise the needed pointers ----------------------------------------------------------------------------------*/ -static void init_data_structure( gx_device_printer *pdev, - struct ptr_arrays *data_ptrs, - struct misc_struct *misc_vars) +static void +init_data_structure(gx_device_printer * pdev, + struct ptr_arrays *data_ptrs, + struct misc_struct *misc_vars) { - int i; - byte *p = (byte *) data_ptrs->storage; + int i; + byte *p = (byte *) data_ptrs->storage; - misc_vars->scan = 0; - misc_vars->cscan = 0; - misc_vars->is_two_pass = 1; + misc_vars->scan = 0; + misc_vars->cscan = 0; + misc_vars->is_two_pass = 1; - /* the b/w pointer */ - data_ptrs->data[0] = data_ptrs->data[1] = data_ptrs->data[2] = p; - data_ptrs->data[3] = p + misc_vars->databuff_size; - /* Note: The output data will overwrite part of the input-data */ + /* the b/w pointer */ + data_ptrs->data[0] = data_ptrs->data[1] = data_ptrs->data[2] = p; + data_ptrs->data[3] = p + misc_vars->databuff_size; + /* Note: The output data will overwrite part of the input-data */ - if (misc_vars->bits_per_pixel > 1) { - p += misc_vars->databuff_size; - } + if (misc_vars->bits_per_pixel > 1) { + p += misc_vars->databuff_size; + } - if (misc_vars->bits_per_pixel > 4) { - data_ptrs->errors[0] = (int *)p + misc_vars->num_comps * 2; - data_ptrs->errors[1] = data_ptrs->errors[0] + misc_vars->databuff_size; - p += misc_vars->errbuff_size; - } + if (misc_vars->bits_per_pixel > 4) { + data_ptrs->errors[0] = (int *)p + misc_vars->num_comps * 2; + data_ptrs->errors[1] = + data_ptrs->errors[0] + misc_vars->databuff_size; + p += misc_vars->errbuff_size; + } - for (i = 0; i < misc_vars->num_comps; i++) { - data_ptrs->plane_data[0][i] = data_ptrs->plane_data[2][i] = p; - p += misc_vars->plane_size; - } + for (i = 0; i < misc_vars->num_comps; i++) { + data_ptrs->plane_data[0][i] = data_ptrs->plane_data[2][i] = p; + p += misc_vars->plane_size; + } - for (i = 0; i < misc_vars->num_comps; i++) { - data_ptrs->plane_data[1][i] = p; - data_ptrs->plane_data[3][i] = p + misc_vars->plane_size; - p += misc_vars->plane_size; - } + for (i = 0; i < misc_vars->num_comps; i++) { + data_ptrs->plane_data[1][i] = p; + data_ptrs->plane_data[3][i] = p + misc_vars->plane_size; + p += misc_vars->plane_size; + } - data_ptrs->out_data = p; - p += misc_vars->outbuff_size; + data_ptrs->out_data = p; + p += misc_vars->outbuff_size; - /* --------------------------------------------------------- - now for the color pointers - --------------------------------------------------------- */ + /* --------------------------------------------------------- + now for the color pointers + --------------------------------------------------------- */ - data_ptrs->data_c[0] = data_ptrs->data_c[1] = data_ptrs->data_c[2] = p; - data_ptrs->data_c[3] = p + misc_vars->databuff_size_c; - /* Note: The output data will overwrite part of the input-data */ + data_ptrs->data_c[0] = data_ptrs->data_c[1] = data_ptrs->data_c[2] = p; + data_ptrs->data_c[3] = p + misc_vars->databuff_size_c; + /* Note: The output data will overwrite part of the input-data */ - if (misc_vars->bits_per_pixel > 1) { - p += misc_vars->databuff_size_c; - } + if (misc_vars->bits_per_pixel > 1) { + p += misc_vars->databuff_size_c; + } - if (misc_vars->bits_per_pixel > 4) { - data_ptrs->errors_c[0] = (int *)p + misc_vars->num_comps * 2; - data_ptrs->errors_c[1] = data_ptrs->errors_c[0] + misc_vars->databuff_size_c; - p += misc_vars->errbuff_size_c; - } + if (misc_vars->bits_per_pixel > 4) { + data_ptrs->errors_c[0] = (int *)p + misc_vars->num_comps * 2; + data_ptrs->errors_c[1] = + data_ptrs->errors_c[0] + misc_vars->databuff_size_c; + p += misc_vars->errbuff_size_c; + } - /* pointer for the lower bits of the output data */ - for (i = 0; i < misc_vars->num_comps; i++) { - data_ptrs->plane_data_c[0][i] = data_ptrs->plane_data_c[2][i] = p; - p += misc_vars->plane_size_c / 2; - } + /* pointer for the lower bits of the output data */ + for (i = 0; i < misc_vars->num_comps; i++) { + data_ptrs->plane_data_c[0][i] = data_ptrs->plane_data_c[2][i] = p; + p += misc_vars->plane_size_c / 2; + } - for (i = 0; i < misc_vars->num_comps; i++) { - data_ptrs->plane_data_c[1][i] = p; - data_ptrs->plane_data_c[3][i] = p + misc_vars->plane_size_c / 2; - p += misc_vars->plane_size_c / 2; - } + for (i = 0; i < misc_vars->num_comps; i++) { + data_ptrs->plane_data_c[1][i] = p; + data_ptrs->plane_data_c[3][i] = p + misc_vars->plane_size_c / 2; + p += misc_vars->plane_size_c / 2; + } - /* pointer for the upper bits of the output data */ - for (i = 0; i < misc_vars->num_comps; i++) { - data_ptrs->plane_data_c[0][i + 4] = data_ptrs->plane_data_c[2][i + 4] = p; - p += misc_vars->plane_size_c / 2; - } + /* pointer for the upper bits of the output data */ + for (i = 0; i < misc_vars->num_comps; i++) { + data_ptrs->plane_data_c[0][i + 4] = + data_ptrs->plane_data_c[2][i + 4] = p; + p += misc_vars->plane_size_c / 2; + } - for (i = 0; i < misc_vars->num_comps; i++) { - data_ptrs->plane_data_c[1][i + 4] = p; - data_ptrs->plane_data_c[3][i + 4] = p + misc_vars->plane_size_c / 2; - p += misc_vars->plane_size_c / 2; - } + for (i = 0; i < misc_vars->num_comps; i++) { + data_ptrs->plane_data_c[1][i + 4] = p; + data_ptrs->plane_data_c[3][i + 4] = p + misc_vars->plane_size_c / 2; + p += misc_vars->plane_size_c / 2; + } - for (i = 0; i < misc_vars->num_comps; i++) { - data_ptrs->test_data[i] = p; - p += misc_vars->plane_size_c / 2; - } + for (i = 0; i < misc_vars->num_comps; i++) { + data_ptrs->test_data[i] = p; + p += misc_vars->plane_size_c / 2; + } - /* Clear temp storage */ - memset(data_ptrs->storage, 0, misc_vars->storage_size_words * W); + /* Clear temp storage */ + memset(data_ptrs->storage, 0, misc_vars->storage_size_words * W); - return; + return; } /* cdj970_start_raster_mode: Configure the printer and start Raster mode ----------------------------------------------------------------------------------*/ -static void cdj970_start_raster_mode( gx_device_printer *pdev, - int paper_size, - FILE *prn_stream) +static void +cdj970_start_raster_mode(gx_device_printer * pdev, + int paper_size, FILE * prn_stream) { - int xres, yres; /* x,y resolution for color planes */ - hp970_cmyk_init_t init; + int xres, yres; /* x,y resolution for color planes */ + hp970_cmyk_init_t init; - init = hp970_cmyk_init; + init = hp970_cmyk_init; - init.a[13] = cdj970->intensities; /* Intensity levels cyan */ - init.a[19] = cdj970->intensities; /* Intensity levels magenta */ - init.a[25] = cdj970->intensities; /* Intensity levels yellow */ + init.a[13] = cdj970->intensities; /* Intensity levels cyan */ + init.a[19] = cdj970->intensities; /* Intensity levels magenta */ + init.a[25] = cdj970->intensities; /* Intensity levels yellow */ - /* black plane resolution */ - assign_dpi(cdj970->x_pixels_per_inch, init.a + 2); - assign_dpi(cdj970->y_pixels_per_inch, init.a + 4); + /* black plane resolution */ + assign_dpi(cdj970->x_pixels_per_inch, init.a + 2); + assign_dpi(cdj970->y_pixels_per_inch, init.a + 4); - /* color plane resolution */ - xres = cdj970->x_pixels_per_inch / (cdj970->xscal + 1); - yres = cdj970->y_pixels_per_inch / (cdj970->yscal + 1); + /* color plane resolution */ + xres = cdj970->x_pixels_per_inch / (cdj970->xscal + 1); + yres = cdj970->y_pixels_per_inch / (cdj970->yscal + 1); - /* cyan */ - assign_dpi(xres, init.a + 8); - assign_dpi(yres, init.a + 10); + /* cyan */ + assign_dpi(xres, init.a + 8); + assign_dpi(yres, init.a + 10); - /* magenta */ - assign_dpi(xres, init.a + 14); - assign_dpi(yres, init.a + 16); + /* magenta */ + assign_dpi(xres, init.a + 14); + assign_dpi(yres, init.a + 16); - /* yellow */ - assign_dpi(xres, init.a + 20); - assign_dpi(yres, init.a + 22); + /* yellow */ + assign_dpi(xres, init.a + 20); + assign_dpi(yres, init.a + 22); - /* Page size, orientation, top margin & perforation skip */ - fprintf(prn_stream, "\033&l%dA", paper_size); + /* Page size, orientation, top margin & perforation skip */ + fprintf(prn_stream, "\033&l%dA", paper_size); - /* Print Quality, -1 = draft, 0 = normal, 1 = presentation */ - fprintf(prn_stream, "\033*o%dM", cdj970->quality); + /* Print Quality, -1 = draft, 0 = normal, 1 = presentation */ + fprintf(prn_stream, "\033*o%dM", cdj970->quality); - /* Media Type,0 = plain paper, 1 = bond paper, 2 = special - paper, 3 = glossy film, 4 = transparency film */ - fprintf(prn_stream, "\033&l%dM", cdj970->papertype); + /* Media Type,0 = plain paper, 1 = bond paper, 2 = special + paper, 3 = glossy film, 4 = transparency film */ + fprintf(prn_stream, "\033&l%dM", cdj970->papertype); - fprintf (prn_stream, "\033u%dD\033&l0e0L", xres); + fprintf(prn_stream, "\033u%dD\033&l0e0L", xres); - /* fputs("\033u%dD\033&l0e0L", prn_stream); */ + /* fputs("\033u%dD\033&l0e0L", prn_stream); */ - fprintf(prn_stream, "\033*p%dY", (int)(600 * DOFFSET)); + fprintf(prn_stream, "\033*p%dY", (int)(600 * DOFFSET)); - /* This will start and configure the raster-mode */ - fprintf(prn_stream, "\033*g%dW", (int)sizeof(init.a)); /* The new configure - raster data comand */ - fwrite(init.a, sizeof(byte), sizeof(init.a), prn_stream); /* Transmit config - data */ - fputs("\033&l0H", prn_stream); - fputs("\033*r1A", prn_stream); - /* From now on, all escape commands start with \033*b, so we - * combine them (if the printer supports this). */ - fputs("\033*b", prn_stream); + /* This will start and configure the raster-mode */ + fprintf(prn_stream, "\033*g%dW", (int)sizeof(init.a)); /* The new configure + raster data comand */ + fwrite(init.a, sizeof(byte), sizeof(init.a), prn_stream); /* Transmit config + data */ + fputs("\033&l0H", prn_stream); + fputs("\033*r1A", prn_stream); + /* From now on, all escape commands start with \033*b, so we + * combine them (if the printer supports this). */ + fputs("\033*b", prn_stream); - /* Set compression if the mode has been defined. */ - if (cdj970->compression) - fprintf(prn_stream, "%dm", cdj970->compression); + /* Set compression if the mode has been defined. */ + if (cdj970->compression) + fprintf(prn_stream, "%dm", cdj970->compression); - return; + return; } /* cdj_put_param_int: ----------------------------------------------------------------------------------*/ -static int cdj_put_param_int( gs_param_list *plist, - gs_param_name pname, - int *pvalue, - int minval, - int maxval, - int ecode) +static int +cdj_put_param_int(gs_param_list * plist, + gs_param_name pname, + int *pvalue, int minval, int maxval, int ecode) { - int code, value; + int code, value; - switch (code = param_read_int(plist, pname, &value)) { - default: - return code; + switch (code = param_read_int(plist, pname, &value)) { + default: + return code; - case 1: - return ecode; + case 1: + return ecode; - case 0: - if (value < minval || value > maxval) - param_signal_error(plist, pname, gs_error_rangecheck); - *pvalue = value; - return (ecode < 0 ? ecode : 1); - } + case 0: + if (value < minval || value > maxval) + param_signal_error(plist, pname, gs_error_rangecheck); + *pvalue = value; + return (ecode < 0 ? ecode : 1); + } } /* cdj_put_param_float: ----------------------------------------------------------------------------------*/ -static int cdj_put_param_float( gs_param_list *plist, - gs_param_name pname, - float *pvalue, - float minval, - float maxval, - int ecode) +static int +cdj_put_param_float(gs_param_list * plist, + gs_param_name pname, + float *pvalue, float minval, float maxval, int ecode) { - int code; - float value; + int code; + float value; - switch (code = param_read_float(plist, pname, &value)) { - default: - return code; + switch (code = param_read_float(plist, pname, &value)) { + default: + return code; - case 1: - return ecode; + case 1: + return ecode; - case 0: - if (value < minval || value > maxval) - param_signal_error(plist, pname, gs_error_rangecheck); - *pvalue = value; - return (ecode < 0 ? ecode : 1); - } + case 0: + if (value < minval || value > maxval) + param_signal_error(plist, pname, gs_error_rangecheck); + *pvalue = value; + return (ecode < 0 ? ecode : 1); + } } /* cdj_set_bpp: ----------------------------------------------------------------------------------*/ -static int cdj_set_bpp(gx_device * pdev, int bpp, int ccomps) +static int +cdj_set_bpp(gx_device * pdev, int bpp, int ccomps) { - gx_device_color_info *ci = &pdev->color_info; + gx_device_color_info *ci = &pdev->color_info; - if (ccomps && bpp == 0) { - if (cprn_device->cmyk) { + if (ccomps && bpp == 0) { + if (cprn_device->cmyk) { switch (ccomps) { - default: - return_error(gs_error_rangecheck); - /*NOTREACHED */ - break; - - case 1: - bpp = 1; - break; - - case 3: - bpp = 24; - break; - - case 4: - switch (ci->depth) { - case 8: - case 16: - case 24: - case 32: - break; - - default: - bpp = cprn_device->default_depth; - break; - } - break; - } - } - } + default: + return_error(gs_error_rangecheck); + /*NOTREACHED */ + break; + + case 1: + bpp = 1; + break; + + case 3: + bpp = 24; + break; - if (bpp == 0) { - bpp = ci->depth; /* Use the current setting. */ + case 4: + switch (ci->depth) { + case 8: + case 16: + case 24: + case 32: + break; + + default: + bpp = cprn_device->default_depth; + break; + } + break; + } } + } - if (cprn_device->cmyk < 0) { - /* Reset procedures because we may have been in another mode. */ - dev_proc(pdev, map_cmyk_color) = gdev_cmyk_map_cmyk_color; - dev_proc(pdev, map_rgb_color) = NULL; - dev_proc(pdev, map_color_rgb) = gdev_cmyk_map_color_rgb; + if (bpp == 0) { + bpp = ci->depth; /* Use the current setting. */ + } - if (pdev->is_open) + if (cprn_device->cmyk < 0) { + /* Reset procedures because we may have been in another mode. */ + dev_proc(pdev, map_cmyk_color) = gdev_cmyk_map_cmyk_color; + dev_proc(pdev, map_rgb_color) = NULL; + dev_proc(pdev, map_color_rgb) = gdev_cmyk_map_color_rgb; + + if (pdev->is_open) gs_closedevice(pdev); } /* Check for valid bpp values */ switch (bpp) { - case 16: - case 32: - if (cprn_device->cmyk && ccomps && ccomps != 4) - goto bppe; - break; + case 16: + case 32: + if (cprn_device->cmyk && ccomps && ccomps != 4) + goto bppe; + break; + + case 24: + if (!cprn_device->cmyk || ccomps == 0 || ccomps == 4) { + break; + } else if (ccomps == 1) { + goto bppe; + } else { + /* 3 components 24 bpp printing for CMYK device. */ + cprn_device->cmyk = -1; + } + break; + + case 8: + if (cprn_device->cmyk) { + if (ccomps) { + if (ccomps == 3) { + cprn_device->cmyk = -1; + bpp = 3; + } else if (ccomps != 1 && ccomps != 4) { + goto bppe; + } + } - case 24: - if (!cprn_device->cmyk || ccomps == 0 || ccomps == 4) { - break; - } else if (ccomps == 1) { - goto bppe; - } else { - /* 3 components 24 bpp printing for CMYK device. */ - cprn_device->cmyk = -1; - } - break; + if (ccomps != 1) + break; + } else { + break; + } + case 1: + if (ccomps != 1) + goto bppe; - case 8: - if (cprn_device->cmyk) { - if (ccomps) { - if (ccomps == 3) { - cprn_device->cmyk = -1; - bpp = 3; - } else if (ccomps != 1 && ccomps != 4) { - goto bppe; - } - } - - if (ccomps != 1) - break; - } else { - break; - } - case 1: - if (ccomps != 1) - goto bppe; - - if (cprn_device->cmyk && bpp != pdev->color_info.depth) { - dev_proc(pdev, map_cmyk_color) = NULL; - dev_proc(pdev, map_rgb_color) = gdev_cmyk_map_rgb_color; - - if (pdev->is_open) { - gs_closedevice(pdev); - } - } - break; - - case 3: - if (!cprn_device->cmyk) { - break; - } - default: - bppe:return_error(gs_error_rangecheck); + if (cprn_device->cmyk && bpp != pdev->color_info.depth) { + dev_proc(pdev, map_cmyk_color) = NULL; + dev_proc(pdev, map_rgb_color) = gdev_cmyk_map_rgb_color; + + if (pdev->is_open) { + gs_closedevice(pdev); + } + } + break; + + case 3: + if (!cprn_device->cmyk) { + break; + } + default: + bppe:return_error(gs_error_rangecheck); } if (cprn_device->cmyk == -1) { - dev_proc(pdev, map_cmyk_color) = NULL; - dev_proc(pdev, map_rgb_color) = gdev_pcl_map_rgb_color; - dev_proc(pdev, map_color_rgb) = gdev_pcl_map_color_rgb; + dev_proc(pdev, map_cmyk_color) = NULL; + dev_proc(pdev, map_rgb_color) = gdev_pcl_map_rgb_color; + dev_proc(pdev, map_color_rgb) = gdev_pcl_map_color_rgb; - if (pdev->is_open) { - gs_closedevice(pdev); - } + if (pdev->is_open) { + gs_closedevice(pdev); + } } switch (ccomps) { - case 0: - break; - - case 1: - if (bpp != 1 && bpp != 8) - goto cce; - break; - - case 4: - if (cprn_device->cmyk) { - if (bpp >= 8) - break; - } - - case 3: - if (bpp == 1 || bpp == 3 || bpp == 8 || bpp == 16 || bpp == 24 || bpp == 32) { - break; - } - - cce: - default: - return_error(gs_error_rangecheck); + case 0: + break; + + case 1: + if (bpp != 1 && bpp != 8) + goto cce; + break; + + case 4: + if (cprn_device->cmyk) { + if (bpp >= 8) + break; + } + + case 3: + if (bpp == 1 || bpp == 3 || bpp == 8 || bpp == 16 || bpp == 24 + || bpp == 32) { + break; + } + + cce: + default: + return_error(gs_error_rangecheck); } if (cprn_device->cmyk) { - if (cprn_device->cmyk > 0) { - ci->num_components = ccomps ? ccomps : (bpp < 8 ? 1 : 4); - } else { - ci->num_components = ccomps ? ccomps : (bpp < 8 ? 1 : 3); - } - - if (bpp != 1 && ci->num_components == 1) { /* We do dithered grays. */ - bpp = bpp < 8 ? 8 : bpp; - } + if (cprn_device->cmyk > 0) { + ci->num_components = ccomps ? ccomps : (bpp < 8 ? 1 : 4); + } else { + ci->num_components = ccomps ? ccomps : (bpp < 8 ? 1 : 3); + } - ci->max_color = (1 << (bpp >> 2)) - 1; - ci->max_gray = (bpp >= 8 ? 255 : 1); + if (bpp != 1 && ci->num_components == 1) { /* We do dithered grays. */ + bpp = bpp < 8 ? 8 : bpp; + } - if (ci->num_components == 1) { + ci->max_color = (1 << (bpp >> 2)) - 1; + ci->max_gray = (bpp >= 8 ? 255 : 1); + + if (ci->num_components == 1) { ci->dither_grays = (bpp >= 8 ? 5 : 2); ci->dither_colors = (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0); - } else { + } else { ci->dither_grays = (bpp > 8 ? 5 : 2); ci->dither_colors = (bpp > 8 ? 5 : bpp > 1 ? 2 : 0); - } - } else { - ci->num_components = (bpp == 1 || bpp == 8 ? 1 : 3); - ci->max_color = (bpp >= 8 ? 255 : bpp > 1 ? 1 : 0); - ci->max_gray = (bpp >= 8 ? 255 : 1); - ci->dither_grays = (bpp >= 8 ? 5 : 2); - ci->dither_colors = (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0); } + } else { + ci->num_components = (bpp == 1 || bpp == 8 ? 1 : 3); + ci->max_color = (bpp >= 8 ? 255 : bpp > 1 ? 1 : 0); + ci->max_gray = (bpp >= 8 ? 255 : 1); + ci->dither_grays = (bpp >= 8 ? 5 : 2); + ci->dither_colors = (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0); + } - ci->depth = ((bpp > 1) && (bpp < 8) ? 8 : bpp); + ci->depth = ((bpp > 1) && (bpp < 8) ? 8 : bpp); - return (0); + return (0); } /* @@ -2254,128 +2313,149 @@ static int cdj_set_bpp(gx_device * pdev, int bpp, int ccomps) /* gdev_cmyk_map_cmyk_color: ----------------------------------------------------------------------------------*/ -static gx_color_index gdev_cmyk_map_cmyk_color(gx_device * pdev, - const gx_color_value cv[]) +static gx_color_index +gdev_cmyk_map_cmyk_color(gx_device * pdev, const gx_color_value cv[]) { - gx_color_index color; - gx_color_value cyan, magenta, yellow, black; - - cyan = cv[0]; magenta = cv[1]; yellow = cv[2]; black = cv[3]; - switch (pdev->color_info.depth) { - case 1: - color = (cyan | magenta | yellow | black) > gx_max_color_value / 2 ? - ( gx_color_index) 1 : (gx_color_index) 0; - break; - - default:{ - int nbits = pdev->color_info.depth; - - if (cyan == magenta && magenta == yellow) { - /* Convert CMYK to gray -- Red Book 6.2.2 */ - float bpart = ((float)cyan) * (lum_red_weight / 100.) + - ((float)magenta) * (lum_green_weight / 100.) + - ((float)yellow) * (lum_blue_weight / 100.) + - (float)black; - - cyan = magenta = yellow = (gx_color_index) 0; - black = (gx_color_index) (bpart > gx_max_color_value ? - gx_max_color_value : bpart); - } - color = gx_cmyk_value_bits(cyan, magenta, yellow, black, - nbits >> 2); + gx_color_index color; + gx_color_value cyan, magenta, yellow, black; + + cyan = cv[0]; + magenta = cv[1]; + yellow = cv[2]; + black = cv[3]; + switch (pdev->color_info.depth) { + case 1: + color = + (cyan | magenta | yellow | black) > + gx_max_color_value / + 2 ? (gx_color_index) 1 : (gx_color_index) 0; + break; + + default:{ + int nbits = pdev->color_info.depth; + + if (cyan == magenta && magenta == yellow) { + /* Convert CMYK to gray -- Red Book 6.2.2 */ + float bpart = ((float)cyan) * (lum_red_weight / 100.) + + ((float)magenta) * (lum_green_weight / 100.) + + ((float)yellow) * (lum_blue_weight / 100.) + + (float)black; + + cyan = magenta = yellow = (gx_color_index) 0; + black = (gx_color_index) (bpart > gx_max_color_value ? + gx_max_color_value : bpart); } - } + color = gx_cmyk_value_bits(cyan, magenta, yellow, black, + nbits >> 2); + } + } - return (color); + return (color); } /* gdev_cmyk_map_rgb_color: Mapping of RGB colors to gray values. ----------------------------------------------------------------------------------*/ -static gx_color_index gdev_cmyk_map_rgb_color( gx_device * pdev, - const gx_color_value cv[]) +static gx_color_index +gdev_cmyk_map_rgb_color(gx_device * pdev, const gx_color_value cv[]) { - gx_color_value r, g, b; - - r = cv[0]; g = cv[1]; b = cv[2]; - if (gx_color_value_to_byte(r & g & b) == 0xff) { - return (gx_color_index) 0; /* White */ - } else { - gx_color_value c = gx_max_color_value - r; - gx_color_value m = gx_max_color_value - g; - gx_color_value y = gx_max_color_value - b; + gx_color_value r, g, b; + + r = cv[0]; + g = cv[1]; + b = cv[2]; + if (gx_color_value_to_byte(r & g & b) == 0xff) { + return (gx_color_index) 0; /* White */ + } else { + gx_color_value c = gx_max_color_value - r; + gx_color_value m = gx_max_color_value - g; + gx_color_value y = gx_max_color_value - b; - switch (pdev->color_info.depth) { + switch (pdev->color_info.depth) { case 1: - return (c | m | y) > gx_max_color_value / 2 ? (gx_color_index) 1 : (gx_color_index) 0; - /*NOTREACHED */ - break; + return (c | m | y) > + gx_max_color_value / + 2 ? (gx_color_index) 1 : (gx_color_index) 0; + /*NOTREACHED */ + break; case 8: - return ((ulong) c * lum_red_weight * 10 - + (ulong) m * lum_green_weight * 10 - + (ulong) y * lum_blue_weight * 10) - >> (gx_color_value_bits + 2); - /*NOTREACHED */ - break; - } + return ((ulong) c * lum_red_weight * 10 + + (ulong) m * lum_green_weight * 10 + + (ulong) y * lum_blue_weight * 10) + >> (gx_color_value_bits + 2); + /*NOTREACHED */ + break; } + } - return (gx_color_index) 0; /* This should never happen. */ + return (gx_color_index) 0; /* This should never happen. */ } /* gdev_cmyk_map_rgb_color: Mapping of CMYK colors. ----------------------------------------------------------------------------------*/ -static int gdev_cmyk_map_color_rgb( gx_device *pdev, - gx_color_index color, - gx_color_value prgb[3]) +static int +gdev_cmyk_map_color_rgb(gx_device * pdev, + gx_color_index color, gx_color_value prgb[3]) { - switch (pdev->color_info.depth) { - case 1: - prgb[0] = prgb[1] = prgb[2] = gx_max_color_value * (1 - color); - break; + switch (pdev->color_info.depth) { + case 1: + prgb[0] = prgb[1] = prgb[2] = gx_max_color_value * (1 - color); + break; - case 8: - if (pdev->color_info.num_components == 1) { - gx_color_value value = (gx_color_value) color ^ 0xff; - prgb[0] = prgb[1] = prgb[2] = (value << 8) + value; - break; - } + case 8: + if (pdev->color_info.num_components == 1) { + gx_color_value value = (gx_color_value) color ^ 0xff; - default:{ - unsigned long bcyan, bmagenta, byellow, black; - int nbits = pdev->color_info.depth; - - gx_value_cmyk_bits(color, bcyan, bmagenta, byellow, black, nbits >> 2); - -# ifdef USE_ADOBE_CMYK_RGB - - /* R = 1.0 - min(1.0, C + K), etc. */ - - bcyan += black, bmagenta += black, byellow += black; - prgb[0] = (bcyan > gx_max_color_value ? (gx_color_value) 0 : - gx_max_color_value - bcyan); - prgb[1] = (bmagenta > gx_max_color_value ? (gx_color_value) 0 : - gx_max_color_value - bmagenta); - prgb[2] = (byellow > gx_max_color_value ? (gx_color_value) 0 : - gx_max_color_value - byellow); - -# else - - /* R = (1.0 - C) * (1.0 - K), etc. */ + prgb[0] = prgb[1] = prgb[2] = (value << 8) + value; + break; + } - prgb[0] = (gx_color_value)((ulong) (gx_max_color_value - bcyan) * - (gx_max_color_value - black) / gx_max_color_value); - prgb[1] = (gx_color_value)((ulong) (gx_max_color_value - bmagenta) * - (gx_max_color_value - black) / gx_max_color_value); - prgb[2] = (gx_color_value)((ulong) (gx_max_color_value - byellow) * - (gx_max_color_value - black) / gx_max_color_value); + default:{ + unsigned long bcyan, bmagenta, byellow, black; + int nbits = pdev->color_info.depth; + + gx_value_cmyk_bits(color, bcyan, bmagenta, byellow, black, + nbits >> 2); + +#ifdef USE_ADOBE_CMYK_RGB + + /* R = 1.0 - min(1.0, C + K), etc. */ + + bcyan += black, bmagenta += black, byellow += black; + prgb[0] = (bcyan > gx_max_color_value ? (gx_color_value) 0 : + gx_max_color_value - bcyan); + prgb[1] = + (bmagenta > + gx_max_color_value ? (gx_color_value) 0 : + gx_max_color_value - bmagenta); + prgb[2] = + (byellow > + gx_max_color_value ? (gx_color_value) 0 : + gx_max_color_value - byellow); + +#else + + /* R = (1.0 - C) * (1.0 - K), etc. */ + + prgb[0] = + (gx_color_value) ((ulong) (gx_max_color_value - bcyan) * + (gx_max_color_value - + black) / gx_max_color_value); + prgb[1] = + (gx_color_value) ((ulong) (gx_max_color_value - bmagenta) + * (gx_max_color_value - + black) / gx_max_color_value); + prgb[2] = + (gx_color_value) ((ulong) (gx_max_color_value - byellow) * + (gx_max_color_value - + black) / gx_max_color_value); #endif - } - } + } + } - return (0); + return (0); } #define gx_color_value_to_1bit(cv) ((cv) >> (gx_color_value_bits - 1)) @@ -2387,227 +2467,240 @@ static int gdev_cmyk_map_color_rgb( gx_device *pdev, /* gdev_pcl_map_rgb_color: ----------------------------------------------------------------------------------*/ -static gx_color_index gdev_pcl_map_rgb_color( gx_device * pdev, - const gx_color_value cv[]) +static gx_color_index +gdev_pcl_map_rgb_color(gx_device * pdev, const gx_color_value cv[]) { - gx_color_value r, g, b; + gx_color_value r, g, b; + + r = cv[0]; + g = cv[1]; + b = cv[2]; + if (gx_color_value_to_byte(r & g & b) == 0xff) + return (gx_color_index) 0; /* white */ + else { + gx_color_value c = gx_max_color_value - r; + gx_color_value m = gx_max_color_value - g; + gx_color_value y = gx_max_color_value - b; - r = cv[0]; g = cv[1]; b = cv[2]; - if (gx_color_value_to_byte(r & g & b) == 0xff) - return (gx_color_index) 0; /* white */ - else { - gx_color_value c = gx_max_color_value - r; - gx_color_value m = gx_max_color_value - g; - gx_color_value y = gx_max_color_value - b; - - switch (pdev->color_info.depth) { + switch (pdev->color_info.depth) { case 1: - return ((c | m | y) > gx_max_color_value / 2 ? (gx_color_index) 1 : (gx_color_index) 0); + return ((c | m | y) > + gx_max_color_value / + 2 ? (gx_color_index) 1 : (gx_color_index) 0); case 8: - if (pdev->color_info.num_components >= 3) - return (gx_color_value_to_1bit(c) - + (gx_color_value_to_1bit(m) << 1) - + (gx_color_value_to_1bit(y) << 2)); - else - return ((((ulong) c * red_weight + (ulong) m * green_weight + (ulong) y * blue_weight) - >> (gx_color_value_bits + 2))); - - case 16: - return (gx_color_value_to_5bits(y) + - (gx_color_value_to_6bits(m) << 5) + - (gx_color_value_to_5bits(c) << 11)); + if (pdev->color_info.num_components >= 3) + return (gx_color_value_to_1bit(c) + + (gx_color_value_to_1bit(m) << 1) + + (gx_color_value_to_1bit(y) << 2)); + else + return ((((ulong) c * red_weight + + (ulong) m * green_weight + + (ulong) y * blue_weight) + >> (gx_color_value_bits + 2))); + + case 16: + return (gx_color_value_to_5bits(y) + + (gx_color_value_to_6bits(m) << 5) + + (gx_color_value_to_5bits(c) << 11)); case 24: - return (gx_color_value_to_byte(y) + - (gx_color_value_to_byte(m) << 8) + - ((ulong) gx_color_value_to_byte(c) << 16)); - case 32: { - return ((c == m && c == y) ? ((ulong) gx_color_value_to_byte(c) << 24) - : (gx_color_value_to_byte(y) + - (gx_color_value_to_byte(m) << 8) + - ((ulong) gx_color_value_to_byte(c) << 16))); - } + return (gx_color_value_to_byte(y) + + (gx_color_value_to_byte(m) << 8) + + ((ulong) gx_color_value_to_byte(c) << 16)); + case 32:{ + return ((c == m + && c == + y) ? ((ulong) gx_color_value_to_byte(c) << 24) + : (gx_color_value_to_byte(y) + + (gx_color_value_to_byte(m) << 8) + + ((ulong) gx_color_value_to_byte(c) << 16))); } } + } - return ((gx_color_index) 0); /* This never happens */ + return ((gx_color_index) 0); /* This never happens */ } #define gx_maxcol gx_color_value_from_byte(gx_color_value_to_byte(gx_max_color_value)) /* gdev_pcl_map_color_rgb: Map a color index to a r-g-b color. ----------------------------------------------------------------------------------*/ -static int gdev_pcl_map_color_rgb( gx_device *pdev, - gx_color_index color, - gx_color_value prgb[3]) +static int +gdev_pcl_map_color_rgb(gx_device * pdev, + gx_color_index color, gx_color_value prgb[3]) { - /* For the moment, we simply ignore any black correction */ - switch (pdev->color_info.depth) { - case 1: - prgb[0] = prgb[1] = prgb[2] = -((gx_color_value) color ^ 1); - break; - - case 8: - if (pdev->color_info.num_components >= 3) { - gx_color_value c = (gx_color_value) color ^ 7; - - prgb[0] = -(c & 1); - prgb[1] = -((c >> 1) & 1); - prgb[2] = -(c >> 2); - } else { - gx_color_value value = (gx_color_value) color ^ 0xff; - prgb[0] = prgb[1] = prgb[2] = (value << 8) + value; - } - break; - case 16: { - gx_color_value c = (gx_color_value) color ^ 0xffff; - ushort value = c >> 11; - - prgb[0] = ((value << 11) + (value << 6) + (value << 1) + - (value >> 4)) >> (16 - gx_color_value_bits); - value = (c >> 6) & 0x3f; - prgb[1] = ((value << 10) + (value << 4) + (value >> 2)) - >> (16 - gx_color_value_bits); - value = c & 0x1f; - prgb[2] = ((value << 11) + (value << 6) + (value << 1) + - (value >> 4)) >> (16 - gx_color_value_bits); - } - break; + /* For the moment, we simply ignore any black correction */ + switch (pdev->color_info.depth) { + case 1: + prgb[0] = prgb[1] = prgb[2] = -((gx_color_value) color ^ 1); + break; + + case 8: + if (pdev->color_info.num_components >= 3) { + gx_color_value c = (gx_color_value) color ^ 7; + + prgb[0] = -(c & 1); + prgb[1] = -((c >> 1) & 1); + prgb[2] = -(c >> 2); + } else { + gx_color_value value = (gx_color_value) color ^ 0xff; + + prgb[0] = prgb[1] = prgb[2] = (value << 8) + value; + } + break; + case 16:{ + gx_color_value c = (gx_color_value) color ^ 0xffff; + ushort value = c >> 11; + + prgb[0] = ((value << 11) + (value << 6) + (value << 1) + + (value >> 4)) >> (16 - gx_color_value_bits); + value = (c >> 6) & 0x3f; + prgb[1] = ((value << 10) + (value << 4) + (value >> 2)) + >> (16 - gx_color_value_bits); + value = c & 0x1f; + prgb[2] = ((value << 11) + (value << 6) + (value << 1) + + (value >> 4)) >> (16 - gx_color_value_bits); + } + break; - case 24: { - gx_color_value c = (gx_color_value) color ^ 0xffffff; + case 24:{ + gx_color_value c = (gx_color_value) color ^ 0xffffff; - prgb[0] = gx_color_value_from_byte(c >> 16); - prgb[1] = gx_color_value_from_byte((c >> 8) & 0xff); - prgb[2] = gx_color_value_from_byte(c & 0xff); - } - break; + prgb[0] = gx_color_value_from_byte(c >> 16); + prgb[1] = gx_color_value_from_byte((c >> 8) & 0xff); + prgb[2] = gx_color_value_from_byte(c & 0xff); + } + break; - case 32: { - gx_color_value w = gx_maxcol - gx_color_value_from_byte(color >> 24); + case 32:{ + gx_color_value w = + gx_maxcol - gx_color_value_from_byte(color >> 24); - prgb[0] = w - gx_color_value_from_byte((color >> 16) & 0xff); - prgb[1] = w - gx_color_value_from_byte((color >> 8) & 0xff); - prgb[2] = w - gx_color_value_from_byte(color & 0xff); - } - break; - } + prgb[0] = w - gx_color_value_from_byte((color >> 16) & 0xff); + prgb[1] = w - gx_color_value_from_byte((color >> 8) & 0xff); + prgb[2] = w - gx_color_value_from_byte(color & 0xff); + } + break; + } - return (0); + return (0); } #define save_ccomps save_info.num_components /* cdj_put_param_bpp: new_bpp == save_bpp or new_bpp == 0 means don't change bpp. - * ccomps == 0 means don't change number of color comps. - * If new_bpp != 0, it must be the value of the BitsPerPixel element of - * the plist; real_bpp may differ from new_bpp. + * ccomps == 0 means don't change number of color comps. + * If new_bpp != 0, it must be the value of the BitsPerPixel element of + * the plist; real_bpp may differ from new_bpp. ----------------------------------------------------------------------------------*/ -static int cdj_put_param_bpp( gx_device *pdev, - gs_param_list *plist, - int new_bpp, - int real_bpp, - int ccomps) +static int +cdj_put_param_bpp(gx_device * pdev, + gs_param_list * plist, + int new_bpp, int real_bpp, int ccomps) { - if (new_bpp == 0 && ccomps == 0) - return gdev_prn_put_params(pdev, plist); - else { - gx_device_color_info save_info; - int save_bpp; - int code; + if (new_bpp == 0 && ccomps == 0) + return gdev_prn_put_params(pdev, plist); + else { + gx_device_color_info save_info; + int save_bpp; + int code; - save_info = pdev->color_info; - save_bpp = save_info.depth; + save_info = pdev->color_info; + save_bpp = save_info.depth; - if (save_bpp == 8 && save_ccomps == 3 && !cprn_device->cmyk) - save_bpp = 3; + if (save_bpp == 8 && save_ccomps == 3 && !cprn_device->cmyk) + save_bpp = 3; - code = cdj_set_bpp(pdev, real_bpp, ccomps); + code = cdj_set_bpp(pdev, real_bpp, ccomps); - if (code < 0) { + if (code < 0) { param_signal_error(plist, "BitsPerPixel", code); param_signal_error(plist, "ProcessColorModel", code); return (code); - } + } - pdev->color_info.depth = new_bpp; /* cdj_set_bpp maps 3/6 to 8 */ - code = gdev_prn_put_params(pdev, plist); + pdev->color_info.depth = new_bpp; /* cdj_set_bpp maps 3/6 to 8 */ + code = gdev_prn_put_params(pdev, plist); - if (code < 0) { + if (code < 0) { cdj_set_bpp(pdev, save_bpp, save_ccomps); return (code); - } + } - cdj_set_bpp(pdev, real_bpp, ccomps); /* reset depth if needed */ - if ((cdj970->color_info.depth != save_bpp - || (ccomps != 0 && ccomps != save_ccomps)) - && pdev->is_open) + cdj_set_bpp(pdev, real_bpp, ccomps); /* reset depth if needed */ + if ((cdj970->color_info.depth != save_bpp + || (ccomps != 0 && ccomps != save_ccomps)) + && pdev->is_open) return (gs_closedevice(pdev)); return (0); #undef save_ccomps - } + } } /* cdj970_write_header: ----------------------------------------------------------------------------------*/ -static int cdj970_write_header (gx_device *pdev, FILE * prn_stream) +static int +cdj970_write_header(gx_device * pdev, FILE * prn_stream) { - char startbuffer[1260]; + char startbuffer[1260]; - memset (startbuffer, 0, 1260); + memset(startbuffer, 0, 1260); - gs_sprintf (&(startbuffer[600]), "\033E\033%%-12345X@PJL JOB NAME = \"GHOST BY RENE HARSCH\"\n@PJL ENTER LANGUAGE=PCL3GUI\n"); + gs_sprintf(&(startbuffer[600]), + "\033E\033%%-12345X@PJL JOB NAME = \"GHOST BY RENE HARSCH\"\n@PJL ENTER LANGUAGE=PCL3GUI\n"); - fwrite (startbuffer, sizeof(char), 678, prn_stream); + fwrite(startbuffer, sizeof(char), 678, prn_stream); - fputs("\033&l1H\033&l-2H", prn_stream); /* reverse engineering */ + fputs("\033&l1H\033&l-2H", prn_stream); /* reverse engineering */ - /* enter duplex mode / reverse engineering */ - if (cdj970->duplex > NONE) { - fputs("\033&l2S\033&b16WPML", prn_stream); + /* enter duplex mode / reverse engineering */ + if (cdj970->duplex > NONE) { + fputs("\033&l2S\033&b16WPML", prn_stream); - fputc (0x20, prn_stream); - fputc (0x04, prn_stream); - fputc (0x00, prn_stream); - fputc (0x06, prn_stream); - fputc (0x01, prn_stream); - fputc (0x04, prn_stream); - fputc (0x01, prn_stream); - fputc (0x04, prn_stream); - fputc (0x01, prn_stream); - fputc (0x06, prn_stream); - fputc (0x08, prn_stream); - fputc (0x01, prn_stream); - fputc (0x00, prn_stream); - } + fputc(0x20, prn_stream); + fputc(0x04, prn_stream); + fputc(0x00, prn_stream); + fputc(0x06, prn_stream); + fputc(0x01, prn_stream); + fputc(0x04, prn_stream); + fputc(0x01, prn_stream); + fputc(0x04, prn_stream); + fputc(0x01, prn_stream); + fputc(0x06, prn_stream); + fputc(0x08, prn_stream); + fputc(0x01, prn_stream); + fputc(0x00, prn_stream); + } - return 0; + return 0; } /* cdj970_write_trailer: ----------------------------------------------------------------------------------*/ -static int cdj970_write_trailer (gx_device *pdev, FILE * prn_stream) +static int +cdj970_write_trailer(gx_device * pdev, FILE * prn_stream) { - fprintf(prn_stream, "\033E\033%%-12345X"); /* reverse engineering */ + fprintf(prn_stream, "\033E\033%%-12345X"); /* reverse engineering */ - return 0; + return 0; } /* cdj970_close: ----------------------------------------------------------------------------------*/ -static int cdj970_close(gx_device *pdev) +static int +cdj970_close(gx_device * pdev) { - gx_device_printer *const ppdev = (gx_device_printer *)pdev; - int retCode = gdev_prn_open_printer (pdev, true); + gx_device_printer *const ppdev = (gx_device_printer *) pdev; + int retCode = gdev_prn_open_printer(pdev, true); - if (retCode < 0) - return (retCode); + if (retCode < 0) + return (retCode); - cdj970_write_trailer (pdev, ppdev->file); + cdj970_write_trailer(pdev, ppdev->file); - return gdev_prn_close(pdev); + return gdev_prn_close(pdev); } diff --git a/devices/gdevepsc.c b/devices/gdevepsc.c index 7eb4b6fd8..93baae7eb 100644 --- a/devices/gdevepsc.c +++ b/devices/gdevepsc.c @@ -40,39 +40,39 @@ */ #ifndef X_DPI -# define X_DPI 180 /* pixels per inch */ +# define X_DPI 180 /* pixels per inch */ #endif #ifndef Y_DPI -# define Y_DPI 180 /* pixels per inch */ +# define Y_DPI 180 /* pixels per inch */ #endif /* -** Colors for EPSON LQ-2550. +** Colors for EPSON LQ-2550. ** -** We map VIOLET to BLUE since this is the best we can do. +** We map VIOLET to BLUE since this is the best we can do. */ -#define BLACK 0 +#define BLACK 0 #define MAGENTA 1 -#define CYAN 2 -#define VIOLET 3 -#define YELLOW 4 -#define RED 5 -#define GREEN 6 -#define WHITE 7 +#define CYAN 2 +#define VIOLET 3 +#define YELLOW 4 +#define RED 5 +#define GREEN 6 +#define WHITE 7 /* -** The offset in this array correspond to -** the ESC-r n value +** The offset in this array correspond to +** the ESC-r n value */ -static char rgb_color[2][2][2] = { - {{BLACK, VIOLET}, {GREEN, CYAN}}, - {{RED, MAGENTA}, {YELLOW, WHITE}} - }; +static char rgb_color[2][2][2] = { + {{BLACK, VIOLET}, {GREEN, CYAN}}, + {{RED, MAGENTA}, {YELLOW, WHITE}} +}; /* Map an RGB color to a printer color. */ #define cv_shift (sizeof(gx_color_value) * 8 - 1) static gx_color_index -epson_map_rgb_color(gx_device *dev, const gx_color_value cv[]) +epson_map_rgb_color(gx_device * dev, const gx_color_value cv[]) { gx_color_value r = cv[0]; @@ -81,40 +81,62 @@ epson_map_rgb_color(gx_device *dev, const gx_color_value cv[]) if (gx_device_has_color(dev)) /* use ^7 so WHITE is 0 for internal calculations */ - return (gx_color_index)rgb_color[r >> cv_shift][g >> cv_shift][b >> cv_shift] ^ 7; + return (gx_color_index) rgb_color[r >> cv_shift][g >> cv_shift][b >> cv_shift] ^ 7; else return gx_default_map_rgb_color(dev, cv); } /* Map the printer color back to RGB. */ static int -epson_map_color_rgb(gx_device *dev, gx_color_index color, - gx_color_value prgb[3]) +epson_map_color_rgb(gx_device * dev, gx_color_index color, + gx_color_value prgb[3]) { #define c1 gx_max_color_value -if (gx_device_has_color(dev)) - switch ((ushort)color ^ 7) - { - case BLACK: - prgb[0] = 0; prgb[1] = 0; prgb[2] = 0; break; - case VIOLET: - prgb[0] = 0; prgb[1] = 0; prgb[2] = c1; break; - case GREEN: - prgb[0] = 0; prgb[1] = c1; prgb[2] = 0; break; - case CYAN: - prgb[0] = 0; prgb[1] = c1; prgb[2] = c1; break; - case RED: - prgb[0] = c1; prgb[1] = 0; prgb[2] = 0; break; - case MAGENTA: - prgb[0] = c1; prgb[1] = 0; prgb[2] = c1; break; - case YELLOW: - prgb[0] = c1; prgb[1] = c1; prgb[2] = 0; break; - case WHITE: - prgb[0] = c1; prgb[1] = c1; prgb[2] = c1; break; - } - else - return gx_default_map_color_rgb(dev, color, prgb); - return 0; + if (gx_device_has_color(dev)) + switch ((ushort) color ^ 7) { + case BLACK: + prgb[0] = 0; + prgb[1] = 0; + prgb[2] = 0; + break; + case VIOLET: + prgb[0] = 0; + prgb[1] = 0; + prgb[2] = c1; + break; + case GREEN: + prgb[0] = 0; + prgb[1] = c1; + prgb[2] = 0; + break; + case CYAN: + prgb[0] = 0; + prgb[1] = c1; + prgb[2] = c1; + break; + case RED: + prgb[0] = c1; + prgb[1] = 0; + prgb[2] = 0; + break; + case MAGENTA: + prgb[0] = c1; + prgb[1] = 0; + prgb[2] = c1; + break; + case YELLOW: + prgb[0] = c1; + prgb[1] = c1; + prgb[2] = 0; + break; + case WHITE: + prgb[0] = c1; + prgb[1] = c1; + prgb[2] = c1; + break; + } else + return gx_default_map_color_rgb(dev, color, prgb); + return 0; } /* The device descriptor */ @@ -122,15 +144,15 @@ static dev_proc_print_page(epsc_print_page); /* Since the print_page doesn't alter the device, this device can print in the background */ static gx_device_procs epson_procs = - prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close, - epson_map_rgb_color, epson_map_color_rgb); +prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close, + epson_map_rgb_color, epson_map_color_rgb); const gx_device_printer far_data gs_epsonc_device = - prn_device(epson_procs, "epsonc", - DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS, - X_DPI, Y_DPI, - 0, 0, 0.25, 0, /* margins */ - 3, epsc_print_page); +prn_device(epson_procs, "epsonc", + DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS, + X_DPI, Y_DPI, + 0, 0, 0.25, 0, /* margins */ + 3, epsc_print_page); /* ------ Internal routines ------ */ @@ -138,316 +160,307 @@ const gx_device_printer far_data gs_epsonc_device = static void epsc_output_run(byte *, int, int, char, FILE *, int); /* Send the page to the printer. */ -#define DD 0x80 /* double density flag */ +#define DD 0x80 /* double density flag */ static int -epsc_print_page(gx_device_printer *pdev, FILE *prn_stream) -{ static int graphics_modes_9[5] = - { -1, 0 /*60*/, 1 /*120*/, -1, DD+3 /*240*/ - }; - static int graphics_modes_24[7] = - { -1, 32 /*60*/, 33 /*120*/, 39 /*180*/, - -1, -1, DD+40 /*360*/ - }; - int y_24pin = pdev->y_pixels_per_inch > 72; - int y_mult = (y_24pin ? 3 : 1); - int line_size = (pdev->width + 7) >> 3; /* always mono */ - int in_size = line_size * (8 * y_mult); - byte *in = (byte *)gs_malloc(pdev->memory, in_size+1, 1, "epsc_print_page(in)"); - int out_size = ((pdev->width + 7) & -8) * y_mult; - byte *out = (byte *)gs_malloc(pdev->memory, out_size+1, 1, "epsc_print_page(out)"); - int x_dpi = (int)pdev->x_pixels_per_inch; - char start_graphics = (char) - ((y_24pin ? graphics_modes_24 : graphics_modes_9)[x_dpi / 60]); - int first_pass = (start_graphics & DD ? 1 : 0); - int last_pass = first_pass * 2; - int dots_per_space = x_dpi / 10; /* pica space = 1/10" */ - int bytes_per_space = dots_per_space * y_mult; - int skip = 0, lnum = 0, pass; +epsc_print_page(gx_device_printer * pdev, FILE * prn_stream) +{ + static int graphics_modes_9[5] = { -1, 0 /*60 */ , 1 /*120 */ , -1, DD + 3 /*240 */ + }; + static int graphics_modes_24[7] = + { -1, 32 /*60 */ , 33 /*120 */ , 39 /*180 */ , + -1, -1, DD + 40 /*360 */ + }; + int y_24pin = pdev->y_pixels_per_inch > 72; + int y_mult = (y_24pin ? 3 : 1); + int line_size = (pdev->width + 7) >> 3; /* always mono */ + int in_size = line_size * (8 * y_mult); + byte *in = + (byte *) gs_malloc(pdev->memory, in_size + 1, 1, + "epsc_print_page(in)"); + int out_size = ((pdev->width + 7) & -8) * y_mult; + byte *out = + (byte *) gs_malloc(pdev->memory, out_size + 1, 1, + "epsc_print_page(out)"); + int x_dpi = (int)pdev->x_pixels_per_inch; + char start_graphics = (char) + ((y_24pin ? graphics_modes_24 : graphics_modes_9)[x_dpi / 60]); + int first_pass = (start_graphics & DD ? 1 : 0); + int last_pass = first_pass * 2; + int dots_per_space = x_dpi / 10; /* pica space = 1/10" */ + int bytes_per_space = dots_per_space * y_mult; + int skip = 0, lnum = 0, pass; + /* declare color buffer and related vars */ - byte *color_in; - int color_line_size, color_in_size; - int spare_bits = (pdev->width % 8); /* left over bits to go to margin */ - int whole_bits = pdev->width - spare_bits; - - /* Check allocations */ - if ( in == 0 || out == 0 ) - { if ( in ) gs_free(pdev->memory, (char *)in, in_size+1, 1, "epsc_print_page(in)"); - if ( out ) gs_free(pdev->memory, (char *)out, out_size+1, 1, "epsc_print_page(out)"); - return -1; - } - - /* Initialize the printer and reset the margins. */ - fwrite("\033@\033P\033l\000\033Q\377\033U\001\r", 1, 14, prn_stream); - -/* Create color buffer */ - if (gx_device_has_color(pdev)) - { - color_line_size = gdev_mem_bytes_per_scan_line((gx_device *)pdev); - color_in_size = color_line_size * (8 * y_mult); - if((color_in = (byte *)gs_malloc(pdev->memory, color_in_size+1, 1, - "epsc_print_page(color)")) == 0) - { - gs_free(pdev->memory, (char *)in, in_size+1, 1, "epsc_print_page(in)"); - gs_free(pdev->memory, (char *)out, out_size+1, 1, "epsc_print_page(out)"); - return(-1); - } - } - else - { - color_in = in; - color_in_size = in_size; - color_line_size = line_size; + byte *color_in; + int color_line_size, color_in_size; + int spare_bits = (pdev->width % 8); /* left over bits to go to margin */ + int whole_bits = pdev->width - spare_bits; + + /* Check allocations */ + if (in == 0 || out == 0) { + if (in) + gs_free(pdev->memory, (char *)in, in_size + 1, 1, + "epsc_print_page(in)"); + if (out) + gs_free(pdev->memory, (char *)out, out_size + 1, 1, + "epsc_print_page(out)"); + return -1; + } + + /* Initialize the printer and reset the margins. */ + fwrite("\033@\033P\033l\000\033Q\377\033U\001\r", 1, 14, prn_stream); + + /* Create color buffer */ + if (gx_device_has_color(pdev)) { + color_line_size = gdev_mem_bytes_per_scan_line((gx_device *) pdev); + color_in_size = color_line_size * (8 * y_mult); + if ((color_in = (byte *) gs_malloc(pdev->memory, color_in_size + 1, 1, + "epsc_print_page(color)")) == 0) { + gs_free(pdev->memory, (char *)in, in_size + 1, 1, + "epsc_print_page(in)"); + gs_free(pdev->memory, (char *)out, out_size + 1, 1, + "epsc_print_page(out)"); + return (-1); + } + } else { + color_in = in; + color_in_size = in_size; + color_line_size = line_size; + } + + /* Print lines of graphics */ + while (lnum < pdev->height) { + int lcnt; + byte *nextcolor = NULL; /* position where next color appears */ + byte *nextmono = NULL; /* position to map next color */ + + /* Copy 1 scan line and test for all zero. */ + gdev_prn_copy_scan_lines(pdev, lnum, color_in, color_line_size); + + if (color_in[0] == 0 && + !memcmp((char *)color_in, (char *)color_in + 1, + color_line_size - 1) + ) { + lnum++; + skip += 3 / y_mult; + continue; + } + + /* Vertical tab to the appropriate position. */ + while (skip > 255) { + fputs("\033J\377", prn_stream); + skip -= 255; + } + if (skip) + fprintf(prn_stream, "\033J%c", skip); + + /* Copy the rest of the scan lines. */ + lcnt = 1 + gdev_prn_copy_scan_lines(pdev, lnum + 1, + color_in + color_line_size, + color_in_size - color_line_size); + + if (lcnt < 8 * y_mult) { + memset((char *)(color_in + lcnt * color_line_size), 0, + color_in_size - lcnt * color_line_size); + if (gx_device_has_color(pdev)) /* clear the work buffer */ + memset((char *)(in + lcnt * line_size), 0, + in_size - lcnt * line_size); + } + + /* + ** We need to create a normal epson scan line from our color scan line + ** We do this by setting a bit in the "in" buffer if the pixel byte is set + ** to any color. We then search for any more pixels of that color, setting + ** "in" accordingly. If any other color is found, we save it for the next + ** pass. There may be up to 7 passes. + ** In the future, we should make the passes so as to maximize the + ** life of the color ribbon (i.e. go lightest to darkest). + */ + do { + byte *inp = in; + byte *in_end = in + line_size; + byte *out_end = out; + byte *out_blk; + register byte *outp; + + if (gx_device_has_color(pdev)) { + register int i, j; + register byte *outbuf, *realbuf; + byte current_color; + int end_next_bits = whole_bits; + int lastbits; + + /* Move to the point in the scanline that has a new color */ + if (nextcolor) { + realbuf = nextcolor; + outbuf = nextmono; + memset((char *)in, 0, (nextmono - in)); + i = nextcolor - color_in; + nextcolor = NULL; + end_next_bits = (i / color_line_size) * color_line_size + + whole_bits; + } else { + i = 0; + realbuf = color_in; + outbuf = in; + nextcolor = NULL; } - - /* Print lines of graphics */ - while ( lnum < pdev->height ) - { - int lcnt; - byte *nextcolor = NULL; /* position where next color appears */ - byte *nextmono = NULL; /* position to map next color */ - - /* Copy 1 scan line and test for all zero. */ - gdev_prn_copy_scan_lines(pdev, lnum, color_in, color_line_size); - - if ( color_in[0] == 0 && - !memcmp((char *)color_in, (char *)color_in + 1, color_line_size - 1) - ) - { lnum++; - skip += 3 / y_mult; - continue; - } - - /* Vertical tab to the appropriate position. */ - while ( skip > 255 ) - { fputs("\033J\377", prn_stream); - skip -= 255; - } - if ( skip ) - fprintf(prn_stream, "\033J%c", skip); - - /* Copy the rest of the scan lines. */ - lcnt = 1 + gdev_prn_copy_scan_lines(pdev, lnum + 1, - color_in + color_line_size, color_in_size - color_line_size); - - if ( lcnt < 8 * y_mult ) - { - memset((char *)(color_in + lcnt * color_line_size), 0, - color_in_size - lcnt * color_line_size); - if (gx_device_has_color(pdev)) /* clear the work buffer */ - memset((char *)(in + lcnt * line_size), 0, - in_size - lcnt * line_size); - } - -/* -** We need to create a normal epson scan line from our color scan line -** We do this by setting a bit in the "in" buffer if the pixel byte is set -** to any color. We then search for any more pixels of that color, setting -** "in" accordingly. If any other color is found, we save it for the next -** pass. There may be up to 7 passes. -** In the future, we should make the passes so as to maximize the -** life of the color ribbon (i.e. go lightest to darkest). -*/ - do - { - byte *inp = in; - byte *in_end = in + line_size; - byte *out_end = out; - byte *out_blk; - register byte *outp; - - if (gx_device_has_color(pdev)) - { - register int i,j; - register byte *outbuf, *realbuf; - byte current_color; - int end_next_bits = whole_bits; - int lastbits; - -/* Move to the point in the scanline that has a new color */ - if (nextcolor) - { - realbuf = nextcolor; - outbuf = nextmono; - memset((char *)in, 0, (nextmono - in)); - i = nextcolor - color_in; - nextcolor = NULL; - end_next_bits = (i / color_line_size) * color_line_size - + whole_bits; + /* move thru the color buffer, turning on the appropriate + ** bit in the "mono" buffer", setting pointers to the next + ** color and changing the color output of the epson + */ + for (current_color = 0; i <= color_in_size && outbuf < in + in_size; outbuf++) { + /* Remember, line_size is rounded up to next whole byte + ** whereas color_line_size is the proper length + ** We only want to set the proper bits in the last line_size byte. + */ + if (spare_bits && i == end_next_bits) { + end_next_bits = whole_bits + i + spare_bits; + lastbits = 8 - spare_bits; + } else + lastbits = 0; + + for (*outbuf = 0, j = 8; + --j >= lastbits && i <= color_in_size; + realbuf++, i++) { + if (*realbuf) { + if (current_color > 0) { + if (*realbuf == current_color) { + *outbuf |= 1 << j; + *realbuf = 0; /* throw this byte away */ } - else - { - i = 0; - realbuf = color_in; - outbuf = in; - nextcolor = NULL; + /* save this location for next pass */ + else if (nextcolor == NULL) { + nextcolor = realbuf - (7 - j); + nextmono = outbuf; } -/* move thru the color buffer, turning on the appropriate -** bit in the "mono" buffer", setting pointers to the next -** color and changing the color output of the epson -*/ - for (current_color = 0; i <= color_in_size && outbuf < in + in_size; outbuf++) - { -/* Remember, line_size is rounded up to next whole byte -** whereas color_line_size is the proper length -** We only want to set the proper bits in the last line_size byte. -*/ - if (spare_bits && i == end_next_bits) - { - end_next_bits = whole_bits + i + spare_bits; - lastbits = 8 - spare_bits; - } - else - lastbits = 0; - - for (*outbuf = 0, j = 8; --j >= lastbits && i <= color_in_size; - realbuf++,i++) - { - if (*realbuf) - { - if (current_color > 0) - { - if (*realbuf == current_color) - { - *outbuf |= 1 << j; - *realbuf = 0; /* throw this byte away */ - } - /* save this location for next pass */ - else if (nextcolor == NULL) - { - nextcolor = realbuf - (7 - j); - nextmono = outbuf; - } - } - else - { - *outbuf |= 1 << j; - current_color = *realbuf; /* set color */ - *realbuf = 0; - } - } - } - } - *outbuf = 0; /* zero the end, for safe keeping */ -/* Change color on the EPSON, current_color must be set -** but lets check anyway -*/ - if (current_color) - fprintf(prn_stream,"\033r%c",current_color ^ 7); + } else { + *outbuf |= 1 << j; + current_color = *realbuf; /* set color */ + *realbuf = 0; + } } - - /* We have to 'transpose' blocks of 8 pixels x 8 lines, */ - /* because that's how the printer wants the data. */ - /* If we are in a 24-pin mode, we have to transpose */ - /* groups of 3 lines at a time. */ - - if ( y_24pin ) - { for ( ; inp < in_end; inp++, out_end += 24 ) - { gdev_prn_transpose_8x8(inp, line_size, out_end, 3); - gdev_prn_transpose_8x8(inp + line_size * 8, line_size, out_end + 1, 3); - gdev_prn_transpose_8x8(inp + line_size * 16, line_size, out_end + 2, 3); } - /* Remove trailing 0s. */ - while ( out_end > out && out_end[-1] == 0 && - out_end[-2] == 0 && out_end[-3] == 0 - ) - out_end -= 3; - } - else - { for ( ; inp < in_end; inp++, out_end += 8 ) - { gdev_prn_transpose_8x8(inp, line_size, out_end, 1); - } - /* Remove trailing 0s. */ - while ( out_end > out && out_end[-1] == 0 ) - out_end--; - } - - for ( pass = first_pass; pass <= last_pass; pass++ ) - { - for ( out_blk = outp = out; outp < out_end; ) - { /* Skip a run of leading 0s. */ - /* At least 10 are needed to make tabbing worth it. */ - /* We do everything by 3's to avoid having to make */ - /* different cases for 9- and 24-pin. */ - - if ( *outp == 0 && outp + 12 <= out_end && + } + *outbuf = 0; /* zero the end, for safe keeping */ + /* Change color on the EPSON, current_color must be set + ** but lets check anyway + */ + if (current_color) + fprintf(prn_stream, "\033r%c", current_color ^ 7); + } + + /* We have to 'transpose' blocks of 8 pixels x 8 lines, */ + /* because that's how the printer wants the data. */ + /* If we are in a 24-pin mode, we have to transpose */ + /* groups of 3 lines at a time. */ + + if (y_24pin) { + for (; inp < in_end; inp++, out_end += 24) { + gdev_prn_transpose_8x8(inp, line_size, out_end, 3); + gdev_prn_transpose_8x8(inp + line_size * 8, line_size, + out_end + 1, 3); + gdev_prn_transpose_8x8(inp + line_size * 16, line_size, + out_end + 2, 3); + } + /* Remove trailing 0s. */ + while (out_end > out && out_end[-1] == 0 && + out_end[-2] == 0 && out_end[-3] == 0) + out_end -= 3; + } else { + for (; inp < in_end; inp++, out_end += 8) { + gdev_prn_transpose_8x8(inp, line_size, out_end, 1); + } + /* Remove trailing 0s. */ + while (out_end > out && out_end[-1] == 0) + out_end--; + } + + for (pass = first_pass; pass <= last_pass; pass++) { + for (out_blk = outp = out; outp < out_end;) { /* Skip a run of leading 0s. */ + /* At least 10 are needed to make tabbing worth it. */ + /* We do everything by 3's to avoid having to make */ + /* different cases for 9- and 24-pin. */ + + if (*outp == 0 && outp + 12 <= out_end && outp[1] == 0 && outp[2] == 0 && (outp[3] | outp[4] | outp[5]) == 0 && (outp[6] | outp[7] | outp[8]) == 0 && - (outp[9] | outp[10] | outp[11]) == 0 - ) - { byte *zp = outp; + (outp[9] | outp[10] | outp[11]) == 0) { + byte *zp = outp; int tpos; byte *newp; + outp += 12; - while ( outp + 3 <= out_end && *outp == 0 && - outp[1] == 0 && outp[2] == 0 - ) - outp += 3; + while (outp + 3 <= out_end && *outp == 0 && + outp[1] == 0 && outp[2] == 0) + outp += 3; tpos = (outp - out) / bytes_per_space; newp = out + tpos * bytes_per_space; - if ( newp > zp + 10 ) - { /* Output preceding bit data. */ - if ( zp > out_blk ) /* only false at */ - /* beginning of line */ - epsc_output_run(out_blk, (int)(zp - out_blk), - y_mult, start_graphics, - prn_stream, pass); - /* Tab over to the appropriate position. */ - fprintf(prn_stream, "\033D%c%c\t", tpos, 0); - out_blk = outp = newp; - } - } - else + if (newp > zp + 10) { /* Output preceding bit data. */ + if (zp > out_blk) + /* only false at */ + /* beginning of line */ + epsc_output_run(out_blk, (int)(zp - out_blk), + y_mult, start_graphics, + prn_stream, pass); + /* Tab over to the appropriate position. */ + fprintf(prn_stream, "\033D%c%c\t", tpos, 0); + out_blk = outp = newp; + } + } else outp += y_mult; - } - if ( outp > out_blk ) - epsc_output_run(out_blk, (int)(outp - out_blk), - y_mult, start_graphics, - prn_stream, pass); - - fputc('\r', prn_stream); - } - } while (nextcolor); - skip = 24; - lnum += 8 * y_mult; - } - - /* Eject the page and reinitialize the printer */ - fputs("\f\033@", prn_stream); - - gs_free(pdev->memory, (char *)out, out_size+1, 1, "epsc_print_page(out)"); - gs_free(pdev->memory, (char *)in, in_size+1, 1, "epsc_print_page(in)"); - if (gx_device_has_color(pdev)) - gs_free(pdev->memory, (char *)color_in, color_in_size+1, 1, "epsc_print_page(rin)"); - return 0; + } + if (outp > out_blk) + epsc_output_run(out_blk, (int)(outp - out_blk), + y_mult, start_graphics, prn_stream, pass); + + fputc('\r', prn_stream); + } + } while (nextcolor); + skip = 24; + lnum += 8 * y_mult; + } + + /* Eject the page and reinitialize the printer */ + fputs("\f\033@", prn_stream); + + gs_free(pdev->memory, (char *)out, out_size + 1, 1, + "epsc_print_page(out)"); + gs_free(pdev->memory, (char *)in, in_size + 1, 1, "epsc_print_page(in)"); + if (gx_device_has_color(pdev)) + gs_free(pdev->memory, (char *)color_in, color_in_size + 1, 1, + "epsc_print_page(rin)"); + return 0; } /* Output a single graphics command. */ /* pass=0 for all columns, 1 for even columns, 2 for odd columns. */ static void -epsc_output_run(byte *data, int count, int y_mult, - char start_graphics, FILE *prn_stream, int pass) -{ int xcount = count / y_mult; - fputc(033, prn_stream); - if ( !(start_graphics & ~3) ) - { fputc("KLYZ"[(int)start_graphics], prn_stream); - } - else - { fputc('*', prn_stream); - fputc(start_graphics & ~DD, prn_stream); - } - fputc(xcount & 0xff, prn_stream); - fputc(xcount >> 8, prn_stream); - if ( !pass ) - fwrite((char *)data, 1, count, prn_stream); - else - { /* Only write every other column of y_mult bytes. */ - int which = pass; - byte *dp = data; - register int i, j; - for ( i = 0; i < xcount; i++, which++ ) - for ( j = 0; j < y_mult; j++, dp++ ) - { putc(((which & 1) ? *dp : 0), prn_stream); - } - } +epsc_output_run(byte * data, int count, int y_mult, + char start_graphics, FILE * prn_stream, int pass) +{ + int xcount = count / y_mult; + + fputc(033, prn_stream); + if (!(start_graphics & ~3)) { + fputc("KLYZ"[(int)start_graphics], prn_stream); + } else { + fputc('*', prn_stream); + fputc(start_graphics & ~DD, prn_stream); + } + fputc(xcount & 0xff, prn_stream); + fputc(xcount >> 8, prn_stream); + if (!pass) + fwrite((char *)data, 1, count, prn_stream); + else { /* Only write every other column of y_mult bytes. */ + int which = pass; + byte *dp = data; + register int i, j; + + for (i = 0; i < xcount; i++, which++) + for (j = 0; j < y_mult; j++, dp++) { + putc(((which & 1) ? *dp : 0), prn_stream); + } + } } diff --git a/pcl/pxl/pxpaint.c b/pcl/pxl/pxpaint.c index aab8c42ca..3495f1d89 100644 --- a/pcl/pxl/pxpaint.c +++ b/pcl/pxl/pxpaint.c @@ -829,15 +829,17 @@ const byte apxText[] = { }; int pxText(px_args_t * par, px_state_t * pxs) -{ { - int code = px_set_paint(&pxs->pxgs->brush, pxs); +{ + { + int code = px_set_paint(&pxs->pxgs->brush, pxs); - if (code < 0) - return code; -} -if (par->pv[0]->value.array.size != 0 && pxs->pxgs->brush.type != pxpNull) + if (code < 0) + return code; + } + if (par->pv[0]->value.array.size != 0 && pxs->pxgs->brush.type != pxpNull) pxs->have_page = true; - return px_text(par, pxs, false); + + return px_text(par, pxs, false); } const byte apxTextPath[] = { diff --git a/psi/dscparse.c b/psi/dscparse.c index c5bc53157..5ceced7e2 100644 --- a/psi/dscparse.c +++ b/psi/dscparse.c @@ -1605,10 +1605,10 @@ dsc_parse_bounding_box(CDSC *dsc, CDSCBBOX** pbbox, int offset) *pbbox = (CDSCBBOX *)dsc_memalloc(dsc, sizeof(CDSCBBOX)); if (*pbbox == NULL) return CDSC_ERROR; /* no memory */ - (*pbbox)->llx = (int)fllx; - (*pbbox)->lly = (int)flly; - (*pbbox)->urx = (int)(furx+0.999); - (*pbbox)->ury = (int)(fury+0.999); + (*pbbox)->llx = (int)fllx; + (*pbbox)->lly = (int)flly; + (*pbbox)->urx = (int)(furx+0.999); + (*pbbox)->ury = (int)(fury+0.999); } return CDSC_OK; case CDSC_RESPONSE_CANCEL: diff --git a/psi/zcrd.c b/psi/zcrd.c index af538781d..665b22f51 100644 --- a/psi/zcrd.c +++ b/psi/zcrd.c @@ -214,22 +214,23 @@ zcrd1_params(os_ptr op, gs_cie_render * pcrd, return code; if ((code = zcrd1_proc_params(mem, op, pcprocs)) < 0) return code; - if ((code = dict_matrix3_param(mem, op, "MatrixLMN", &pcrd->MatrixLMN)) < 0) + + if ((code = dict_matrix3_param(mem, op, "MatrixLMN", &pcrd->MatrixLMN)) < 0) + return code; + if ((code = dict_range3_param(mem, op, "RangeLMN", &pcrd->RangeLMN)) < 0) + return code; + if ((code = dict_matrix3_param(mem, op, "MatrixABC", &pcrd->MatrixABC)) < 0) return code; - if ((code = dict_range3_param(mem, op, "RangeLMN", &pcrd->RangeLMN)) < 0) + if ((code = dict_range3_param(mem, op, "RangeABC", &pcrd->RangeABC)) < 0) return code; - if ((code = dict_matrix3_param(mem, op, "MatrixABC", &pcrd->MatrixABC)) < 0) + if ((code = cie_points_param(mem, op, &pcrd->points)) < 0) return code; - if ((code = dict_range3_param(mem, op, "RangeABC", &pcrd->RangeABC)) < 0) + if ((code = dict_matrix3_param(mem, op, "MatrixPQR", &pcrd->MatrixPQR)) < 0) return code; - if ((code = cie_points_param(mem, op, &pcrd->points)) < 0) - return code; - if ((code = dict_matrix3_param(mem, op, "MatrixPQR", &pcrd->MatrixPQR)) < 0) - return code; - if ((code = dict_range3_param(mem,op, "RangePQR", &pcrd->RangePQR)) < 0) - return code; - - if (dict_find_string(op, "RenderTable", &pRT) > 0) { + if ((code = dict_range3_param(mem,op, "RangePQR", &pcrd->RangePQR)) < 0) + return code; + + if (dict_find_string(op, "RenderTable", &pRT) > 0) { const ref *prte = pRT->value.const_refs; /* Finish unpacking and checking the RenderTable parameter. */ |