diff options
Diffstat (limited to 'japanese/vfghostscript5/files/gdevmjc.c.patch')
-rw-r--r-- | japanese/vfghostscript5/files/gdevmjc.c.patch | 795 |
1 files changed, 337 insertions, 458 deletions
diff --git a/japanese/vfghostscript5/files/gdevmjc.c.patch b/japanese/vfghostscript5/files/gdevmjc.c.patch index b1313a081801..02c2ed71fae1 100644 --- a/japanese/vfghostscript5/files/gdevmjc.c.patch +++ b/japanese/vfghostscript5/files/gdevmjc.c.patch @@ -1,3 +1,12 @@ +This is gdevmjc.c-0.8 patch for ghostscript 5.50 by kurosawa +with mj_put_params() fix by Inagaki Kentaro. + +NO WARRANTY + +-- Toshihiro Kanda <candy@ops.dti.ne.jp> + + +>>>>>>>>>>>>>>> original (0.7) patch preamble >>>>>>>>>>>>>> From root Fri Nov 22 01:20:20 1996 Received: from theta.iis.u-tokyo.ac.jp by daikon.fujita3.iis.u-tokyo.ac.jp (AIX 3.2/UCB 5.64/3.4W2) id AA18127; Fri, 22 Nov 1996 01:20:20 +0900 @@ -31,462 +40,332 @@ X-Mailer: mnews [version 1.19PL2] 1996-01/26(Fri) # $B%*%j%8%J%k$+$i$N%Q%C%A$K$7$?$O$:$G$9$1$I(B, $B:#F|$N>u67$@$H$A$g$C$H<+?.(B # $B$r;}$F$J$$(B(^^;) +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -*** gdevmjc.c.org Fri Nov 22 00:27:16 1996 ---- gdevmjc.c Fri Nov 22 00:35:20 1996 -*************** -*** 43,49 **** - #include <limits.h> - #include "gdevprn.h" - #include "gdevpcl.h" -! #include "gsprops.h" - - /*** - *** Note: Original driver gdevcdj.c for HP color printer was written ---- 43,50 ---- - #include <limits.h> - #include "gdevprn.h" - #include "gdevpcl.h" -! #include "gsparam.h" -! #include "gsstate.h" - - /*** - *** Note: Original driver gdevcdj.c for HP color printer was written -*************** -*** 139,145 **** ---- 140,148 ---- - - /* Undefined macros expected to be defined in gdevpcl.h */ - #define PAPER_SIZE_A3_NOBI 28 -+ #ifndef PAPER_SIZE_A2 - #define PAPER_SIZE_A2 29 -+ #endif - #define PAPER_SIZE_B4 30 - #define PAPER_SIZE_B5 31 - -*************** -*** 179,193 **** - private dev_proc_print_page(mjc720_print_page); - private dev_proc_print_page(mj500c_print_page); - -! private dev_proc_get_props(mj_get_props); -! private dev_proc_put_props(mj_put_props); - - private void expand_line(word *, int, int, int); - -! private int put_prop_float(gs_prop_item *, float *, float, float, int); -! private int put_prop_int(gs_prop_item *, int *, int, int, int); -! -! private void set_bpp(gx_device *, int); - - private uint gdev_prn_rasterwidth(const gx_device_printer *, int ); - ---- 182,194 ---- - private dev_proc_print_page(mjc720_print_page); - private dev_proc_print_page(mj500c_print_page); - -! private dev_proc_get_params(mj_get_params); -! private dev_proc_put_params(mj_put_params); - - private void expand_line(word *, int, int, int); - -! private int mj_put_param_int(P6(gs_param_list *, gs_param_name, int *, int, int, int)); -! private void mj_set_bpp(P2(gx_device *, int)); - - private uint gdev_prn_rasterwidth(const gx_device_printer *, int ); - -*************** -*** 214,220 **** - #define mj ((gx_device_mj *) pdev) - - #define prn_hp_colour_device(procs, dev_name, x_dpi, y_dpi, bpp, print_page)\ -! prn_device_body(gx_device_printer, procs, dev_name,\ - WIDTH_10THS, HEIGHT_10THS, x_dpi, y_dpi, 0, 0, 0, 0, 0,\ - bpp, 0, 0, 0, 0, print_page) - ---- 215,221 ---- - #define mj ((gx_device_mj *) pdev) - - #define prn_hp_colour_device(procs, dev_name, x_dpi, y_dpi, bpp, print_page)\ -! prn_device_body(gx_device_mj, procs, dev_name,\ - WIDTH_10THS, HEIGHT_10THS, x_dpi, y_dpi, 0, 0, 0, 0, 0,\ - bpp, 0, 0, 0, 0, print_page) - -*************** -*** 226,234 **** - } - - -! #define mj_colour_procs(proc_colour_open, proc_get_props, proc_put_props) {\ - proc_colour_open,\ -! gdev_pcl_get_initial_matrix,\ - gx_default_sync_output,\ - gdev_prn_output_page,\ - gdev_prn_close,\ ---- 227,235 ---- - } - - -! #define mj_colour_procs(proc_colour_open, proc_get_params, proc_put_params) {\ - proc_colour_open,\ -! gx_default_get_initial_matrix,\ - gx_default_sync_output,\ - gdev_prn_output_page,\ - gdev_prn_close,\ -*************** -*** 240,247 **** - NULL, /* copy_color */\ - NULL, /* draw_line */\ - gx_default_get_bits,\ -! proc_get_props,\ -! proc_put_props\ - } - - private int mjc_open(gx_device *); ---- 241,248 ---- - NULL, /* copy_color */\ - NULL, /* draw_line */\ - gx_default_get_bits,\ -! proc_get_params,\ -! proc_put_params\ - } - - private int mjc_open(gx_device *); -*************** -*** 249,255 **** - - - private gx_device_procs mj_procs = -! mj_colour_procs(mjc_open, mj_get_props, mj_put_props); - - gx_device_mj far_data gs_mjc180_device = - mj_device(mj_procs, "mjc180", 180, 180, BITSPERPIXEL, ---- 250,256 ---- - - - private gx_device_procs mj_procs = -! mj_colour_procs(mjc_open, mj_get_params, mj_put_params); - - gx_device_mj far_data gs_mjc180_device = - mj_device(mj_procs, "mjc180", 180, 180, BITSPERPIXEL, -*************** -*** 305,311 **** - - /* Set up colour params if put_props has not already done so */ - if (pdev->color_info.num_components == 0) -! set_bpp(pdev, pdev->color_info.depth); - - paper_size = gdev_mjc_paper_size(pdev); - if (paper_size == PAPER_SIZE_A2 ) { ---- 306,312 ---- - - /* Set up colour params if put_props has not already done so */ - if (pdev->color_info.num_components == 0) -! mj_set_bpp(pdev, pdev->color_info.depth); - - paper_size = gdev_mjc_paper_size(pdev); - if (paper_size == PAPER_SIZE_A2 ) { -*************** -*** 324,333 **** - m = mj_letter; - } - -! pdev->l_margin = m[0]; -! pdev->b_margin = m[1]; -! pdev->r_margin = m[2]; -! pdev->t_margin = m[3]; - - switch (mj->colorcomp) { - case 1: ---- 325,331 ---- - m = mj_letter; - } - -! gx_device_set_margins(pdev, m, true); - - switch (mj->colorcomp) { - case 1: -*************** -*** 352,430 **** - * and control over the bits-per-pixel used in output rendering */ - /* Added properties for DeskJet 5xxC */ - -- private const gs_prop_item props_mj[] = { -- /* Read-write properties. */ -- prop_def("Density", prt_int), -- prop_def("Cyan", prt_int), -- prop_def("Magenta", prt_int), -- prop_def("Yellow", prt_int), -- prop_def("Black", prt_int), -- prop_def("Dither", prt_int), -- prop_def("ColorComponent", prt_int), -- prop_def("Direction", prt_int), -- prop_def("MicroWeave", prt_int), -- prop_def("DotSize", prt_int), -- }; -- - private int -! mj_get_props(gx_device *pdev, gs_prop_item *plist) -! { int start = gdev_prn_get_props(pdev, plist); -! if ( plist != 0 ) { -! register gs_prop_item *pi = plist + start; -! memcpy(pi, props_mj, sizeof(props_mj)); -! pi[0].value.i = mj->density; -! pi[1].value.i = mj->cyan; -! pi[2].value.i = mj->magenta; -! pi[3].value.i = mj->yellow; -! pi[4].value.i = mj->black; -! pi[5].value.i = mj->dither; -! pi[6].value.i = mj->colorcomp; -! pi[7].value.i = mj->direction; -! pi[8].value.i = mj->microweave; -! pi[9].value.i = mj->dotsize; -! } -! return start + sizeof(props_mj) / sizeof(gs_prop_item); - } - - /* Put properties. */ - private int -! mj_put_props(gx_device *pdev, gs_prop_item *plist, int count) - { -- static const argn = 10; -- gs_prop_item *known[argn]; - int old_bpp = mj->color_info.depth; - int bpp = 0; - int code = 0; -! -! props_extract(plist, count, props_mj, argn, known, 0); -! code = gdev_prn_put_props(pdev, plist, count); -! if ( code < 0 ) return code; -! -! code = put_prop_int(known[0], &mj->density, 0, INT_MAX, code); -! code = put_prop_int(known[1], &mj->cyan, 0, INT_MAX, code); -! code = put_prop_int(known[2], &mj->magenta, 0, INT_MAX, code); -! code = put_prop_int(known[3], &mj->yellow, 0, INT_MAX, code); -! code = put_prop_int(known[4], &mj->black, 0, INT_MAX, code); -! code = put_prop_int(known[5], &mj->dither, 0, 1, code); -! code = put_prop_int(known[6], &mj->colorcomp, 1, 4, code); -! code = put_prop_int(known[7], &mj->direction, 1, 2, code); -! code = put_prop_int(known[8], &mj->microweave, 0, 1, code); -! code = put_prop_int(known[9], &mj->dotsize, 0, 1, code); - - if ( code < 0 ) -! return_error(code); - -! if (bpp != 0) { -! set_bpp(pdev, bpp); -! -! /* Close the device; gs_putdeviceprops will reopen it. */ - if ( bpp != old_bpp && pdev->is_open ) -! { int ccode = gs_closedevice(pdev); -! if ( ccode < 0 ) return ccode; -! } - } -! -! return code; - } - - /* ------ Internal routines ------ */ ---- 350,427 ---- - * and control over the bits-per-pixel used in output rendering */ - /* Added properties for DeskJet 5xxC */ - - private int -! mj_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, "Density", &mj->density)) < 0 || -! (code = param_write_int(plist, "Cyan", &mj->cyan)) < 0 || -! (code = param_write_int(plist, "Magenta", &mj->magenta)) < 0 || -! (code = param_write_int(plist, "Yellow", &mj->yellow)) < 0 || -! (code = param_write_int(plist, "Black", &mj->black)) < 0 || -! (code = param_write_int(plist, "Dither", &mj->dither)) < 0 || -! (code = param_write_int(plist, "ColorComponent", &mj->colorcomp)) < 0 || -! (code = param_write_int(plist, "Direction", &mj->direction)) < 0 || -! (code = param_write_int(plist, "MicroWeave", &mj->microweave)) < 0 || -! (code = param_write_int(plist, "DotSize", &mj->dotsize)) < 0 -! ) -! return code; -! -! return code; - } - - /* Put properties. */ - private int -! mj_put_params(gx_device *pdev, gs_param_list *plist) - { - int old_bpp = mj->color_info.depth; - int bpp = 0; - int code = 0; -! int density = mj->density; -! int cyan = mj->cyan; -! int magenta = mj->magenta; -! int yellow = mj->yellow; -! int black = mj->black; -! int dither = mj->dither; -! int colorcomp = mj->colorcomp; -! int direction = mj->direction; -! int microweave = mj->microweave; -! int dotsize = mj->dotsize; -! -! code = mj_put_param_int(plist, "Density", &density, 0, INT_MAX, code); -! code = mj_put_param_int(plist, "Cyan", &density, 0, INT_MAX, code); -! code = mj_put_param_int(plist, "Magenta", &density, 0, INT_MAX, code); -! code = mj_put_param_int(plist, "Yellow", &density, 0, INT_MAX, code); -! code = mj_put_param_int(plist, "Black", &density, 0, INT_MAX, code); -! code = mj_put_param_int(plist, "Dither", &density, 0, 1, code); -! code = mj_put_param_int(plist, "ColorComponent", &density, 1, 4, code); -! code = mj_put_param_int(plist, "Direction", &density, 1, 2, code); -! code = mj_put_param_int(plist, "MicroWeave", &density, 0, 1, code); -! code = mj_put_param_int(plist, "DotSize", &density, 0, 1, code); -! code = mj_put_param_int(plist, "BitsPerPixel", &bpp, 1, 32, code); - - if ( code < 0 ) -! return code; - -! mj->density = density; -! mj->cyan = cyan; -! mj->magenta = magenta; -! mj->yellow = yellow; -! mj->black = black; -! mj->dither = dither; -! mj->colorcomp = colorcomp; -! mj->direction = direction; -! mj->microweave = microweave; -! mj->dotsize = dotsize; -! if ( bpp != 0 ) { -! mj_set_bpp(pdev, bpp); -! gdev_prn_put_params(pdev, plist); - if ( bpp != old_bpp && pdev->is_open ) -! return gs_closedevice(pdev); -! return 0; - } -! else -! return gdev_prn_put_params(pdev, plist); - } - - /* ------ Internal routines ------ */ -*************** -*** 947,953 **** - - /* Send each scan line in turn */ - { -! long int lend = pdev->height - (pdev->t_margin + pdev->b_margin) * y_dpi; - int cErr, mErr, yErr, kErr; - int this_pass, i; - long int lnum; ---- 944,951 ---- - - /* Send each scan line in turn */ - { -! long int lend = pdev->height - -! (dev_t_margin_points(pdev) + dev_b_margin_points(pdev)); - int cErr, mErr, yErr, kErr; - int this_pass, i; - long int lnum; -*************** -*** 1323,1361 **** - } - - private int -! put_prop_int(gs_prop_item *pi, int *property, int minval, int maxval, int code) -! { -! if ( pi == 0 ) -! return (code); -! -! if ( pi->value.i < minval || pi->value.i > maxval ) -! { pi->status = pv_rangecheck; -! return (gs_error_rangecheck); -! } -! else -! { *property = pi->value.i; -! return (code ? code : 1); -! } -! } -! -! private int -! put_prop_float(gs_prop_item *pi, float *property, float minval, float maxval, int code) -! { -! if ( pi == 0 ) -! return (code); -! -! if ( pi->value.f < minval || pi->value.f > maxval ) -! { pi->status = pv_rangecheck; -! return (gs_error_rangecheck); -! } -! else -! { *property = pi->value.f; -! return (code ? code : 1); -! } - } - - private void -! set_bpp(gx_device *pdev, int bits_per_pixel) - { gx_device_color_info *ci = &pdev->color_info; - /* Only valid bits-per-pixel are 1, 3, 8, 16, 24, 32 */ - int bpp = bits_per_pixel < 3 ? 1 : bits_per_pixel < 8 ? 3 : ---- 1321,1345 ---- - } - - private int -! mj_put_param_int(gs_param_list *plist, gs_param_name pname, int *pvalue, -! int minval, int maxval, int ecode) -! { int code, value; -! switch ( code = param_read_int(plist, pname, &value) ) -! { -! default: -! return code; -! 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); -! } - } - - private void -! mj_set_bpp(gx_device *pdev, int bits_per_pixel) - { gx_device_color_info *ci = &pdev->color_info; - /* Only valid bits-per-pixel are 1, 3, 8, 16, 24, 32 */ - int bpp = bits_per_pixel < 3 ? 1 : bits_per_pixel < 8 ? 3 : -*************** -*** 1363,1371 **** - ci->num_components = ((bpp == 1) || (bpp == 8) ? 1 : 3); - ci->depth = ((bpp > 1) && (bpp < 8) ? 8 : bpp); - ci->max_gray = (bpp >= 8 ? 255 : 1); -! ci->max_rgb = (bpp >= 8 ? 255 : bpp > 1 ? 1 : 0); -! ci->dither_gray = (bpp >= 8 ? 5 : 2); -! ci->dither_rgb = (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0); - } - - /* This returns either the number of pixels in a scan line, or the number ---- 1347,1355 ---- - ci->num_components = ((bpp == 1) || (bpp == 8) ? 1 : 3); - ci->depth = ((bpp > 1) && (bpp < 8) ? 8 : bpp); - ci->max_gray = (bpp >= 8 ? 255 : 1); -! ci->max_color = (bpp >= 8 ? 255 : bpp > 1 ? 1 : 0); -! ci->dither_grays = (bpp >= 8 ? 5 : 2); -! ci->dither_colors = (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0); - } - - /* This returns either the number of pixels in a scan line, or the number -*************** -*** 1374,1380 **** - gdev_prn_rasterwidth(const gx_device_printer *pdev, int pixelcount) - { - word raster_width = -! pdev->width - pdev->x_pixels_per_inch * (pdev->l_margin + pdev->r_margin); - return (pixelcount ? - (uint)raster_width : - (uint)((raster_width * pdev->color_info.depth + 7) >> 3)); ---- 1358,1364 ---- - gdev_prn_rasterwidth(const gx_device_printer *pdev, int pixelcount) - { - word raster_width = -! pdev->width - (pdev->HWMargins[0] + pdev->HWMargins[2]); - return (pixelcount ? - (uint)raster_width : - (uint)((raster_width * pdev->color_info.depth + 7) >> 3)); - +--- gdevmjc.c.orig Fri Jun 4 00:54:24 1999 ++++ gdevmjc.c Fri Jun 4 01:06:06 1999 +@@ -43,7 +43,8 @@ + #include <limits.h> + #include "gdevprn.h" + #include "gdevpcl.h" +-#include "gsprops.h" ++#include "gsparam.h" ++#include "gsstate.h" + + #include "mjmtx2.c" + #include "mjbksep.c" +@@ -150,7 +151,9 @@ + + /* Undefined macros expected to be defined in gdevpcl.h */ + #define PAPER_SIZE_A3_NOBI 28 ++#ifndef PAPER_SIZE_A2 + #define PAPER_SIZE_A2 29 ++#endif + #define PAPER_SIZE_B4 30 + #define PAPER_SIZE_B5 31 + +@@ -190,14 +193,12 @@ + private dev_proc_print_page(mjc720_print_page); + private dev_proc_print_page(mj500c_print_page); + +-private dev_proc_get_props(mj_get_props); +-private dev_proc_put_props(mj_put_props); ++private dev_proc_get_params(mj_get_params); ++private dev_proc_put_params(mj_put_params); + + private void expand_line(P4(word*, int, int, int)); +-private int put_prop_float(P5(gs_prop_item *, float *, float, float, int)); +-private int put_prop_int(P5(gs_prop_item *, int *, int, int, int)); +- +-private void set_bpp(P2(gx_device *, int)); ++private int mj_put_param_int(P6(gs_param_list *, gs_param_name, int *, int, int, int)); ++private void mj_set_bpp(P2(gx_device *, int)); + + private uint gdev_prn_rasterwidth(P2(const gx_device_printer *, int )); + +@@ -224,7 +225,7 @@ + #define mj ((gx_device_mj *) pdev) + + #define prn_hp_colour_device(procs, dev_name, x_dpi, y_dpi, bpp, print_page)\ +- prn_device_body(gx_device_printer, procs, dev_name,\ ++ prn_device_body(gx_device_mj, procs, dev_name,\ + WIDTH_10THS, HEIGHT_10THS, x_dpi, y_dpi, 0, 0, 0, 0, 0,\ + bpp, 0, 0, 0, 0, print_page) + +@@ -235,9 +236,9 @@ + } + + +-#define mj_colour_procs(proc_colour_open, proc_get_props, proc_put_props) {\ ++#define mj_colour_procs(proc_colour_open, proc_get_params, proc_put_params) {\ + proc_colour_open,\ +- gdev_pcl_get_initial_matrix,\ ++ gx_default_get_initial_matrix,\ + gx_default_sync_output,\ + gdev_prn_output_page,\ + gdev_prn_close,\ +@@ -249,15 +250,15 @@ + NULL, /* copy_color */\ + NULL, /* draw_line */\ + gx_default_get_bits,\ +- proc_get_props,\ +- proc_put_props\ ++ proc_get_params,\ ++ proc_put_params\ + } + + private int mjc_open(P1(gx_device *)); + private int mj_colour_open(P1(gx_device *)); + + private gx_device_procs mj_procs = +-mj_colour_procs(mjc_open, mj_get_props, mj_put_props); ++mj_colour_procs(mjc_open, mj_get_params, mj_put_params); + + gx_device_mj far_data gs_mjc180_device = + mj_device(mj_procs, "mjc180", 180, 180, BITSPERPIXEL, +@@ -313,7 +314,7 @@ + + /* Set up colour params if put_props has not already done so */ + if (pdev->color_info.num_components == 0) +- set_bpp(pdev, pdev->color_info.depth); ++ mj_set_bpp(pdev, pdev->color_info.depth); + + paper_size = gdev_mjc_paper_size(pdev); + if (paper_size == PAPER_SIZE_A2 ) { +@@ -332,10 +333,7 @@ + m = mj_letter; + } + +- pdev->l_margin = m[0]; +- pdev->b_margin = m[1]; +- pdev->r_margin = m[2]; +- pdev->t_margin = m[3]; ++ gx_device_set_margins(pdev, m, true); + + switch (mj->colorcomp) { + case 1: +@@ -360,80 +358,74 @@ + * and control over the bits-per-pixel used in output rendering */ + /* Added properties for DeskJet 5xxC */ + +-private const gs_prop_item props_mj[] = { +- /* Read-write properties. */ +- prop_def("Density", prt_int), +- prop_def("Cyan", prt_int), +- prop_def("Magenta", prt_int), +- prop_def("Yellow", prt_int), +- prop_def("Black", prt_int), +- prop_def("Dither", prt_int), +- prop_def("ColorComponent", prt_int), +- prop_def("Direction", prt_int), +- prop_def("MicroWeave", prt_int), +- prop_def("DotSize", prt_int), +-}; +- + private int +-mj_get_props(gx_device *pdev, gs_prop_item *plist) +-{ int start = gdev_prn_get_props(pdev, plist); +- if ( plist != 0 ) { +- register gs_prop_item *pi = plist + start; +- memcpy(pi, props_mj, sizeof(props_mj)); +- pi[0].value.i = mj->density; +- pi[1].value.i = mj->cyan; +- pi[2].value.i = mj->magenta; +- pi[3].value.i = mj->yellow; +- pi[4].value.i = mj->black; +- pi[5].value.i = mj->dither; +- pi[6].value.i = mj->colorcomp; +- pi[7].value.i = mj->direction; +- pi[8].value.i = mj->microweave; +- pi[9].value.i = mj->dotsize; +- } +- return start + sizeof(props_mj) / sizeof(gs_prop_item); ++mj_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, "Density", &mj->density)) < 0 || ++ (code = param_write_int(plist, "Cyan", &mj->cyan)) < 0 || ++ (code = param_write_int(plist, "Magenta", &mj->magenta)) < 0 || ++ (code = param_write_int(plist, "Yellow", &mj->yellow)) < 0 || ++ (code = param_write_int(plist, "Black", &mj->black)) < 0 || ++ (code = param_write_int(plist, "Dither", &mj->dither)) < 0 || ++ (code = param_write_int(plist, "ColorComponent", &mj->colorcomp)) < 0 || ++ (code = param_write_int(plist, "Direction", &mj->direction)) < 0 || ++ (code = param_write_int(plist, "MicroWeave", &mj->microweave)) < 0 || ++ (code = param_write_int(plist, "DotSize", &mj->dotsize)) < 0 ++ ) ++ return code; ++ return code; + } + + /* Put properties. */ + private int +-mj_put_props(gx_device *pdev, gs_prop_item *plist, int count) ++mj_put_params(gx_device *pdev, gs_param_list *plist) + { +- static const argn = 10; +-/* gs_prop_item *known[argn]; */ +- gs_prop_item *known[10]; + int old_bpp = mj->color_info.depth; + int bpp = 0; + int code = 0; +- +- props_extract(plist, count, props_mj, argn, known, 0); +- code = gdev_prn_put_props(pdev, plist, count); +- if ( code < 0 ) return code; +- +- code = put_prop_int(known[0], &mj->density, 0, INT_MAX, code); +- code = put_prop_int(known[1], &mj->cyan, 0, INT_MAX, code); +- code = put_prop_int(known[2], &mj->magenta, 0, INT_MAX, code); +- code = put_prop_int(known[3], &mj->yellow, 0, INT_MAX, code); +- code = put_prop_int(known[4], &mj->black, 0, INT_MAX, code); +- code = put_prop_int(known[5], &mj->dither, 0, 1, code); +- code = put_prop_int(known[6], &mj->colorcomp, 1, 4, code); +- code = put_prop_int(known[7], &mj->direction, 1, 2, code); +- code = put_prop_int(known[8], &mj->microweave, 0, 1, code); +- code = put_prop_int(known[9], &mj->dotsize, 0, 1, code); +- ++ int density = mj->density; ++ int cyan = mj->cyan; ++ int magenta = mj->magenta; ++ int yellow = mj->yellow; ++ int black = mj->black; ++ int dither = mj->dither; ++ int colorcomp = mj->colorcomp; ++ int direction = mj->direction; ++ int microweave = mj->microweave; ++ int dotsize = mj->dotsize; ++ code = mj_put_param_int(plist, "Density", &density, 0, INT_MAX, code); ++ code = mj_put_param_int(plist, "Cyan", &cyan, 0, INT_MAX, code); ++ code = mj_put_param_int(plist, "Magenta", &magenta, 0, INT_MAX, code); ++ code = mj_put_param_int(plist, "Yellow", &yellow, 0, INT_MAX, code); ++ code = mj_put_param_int(plist, "Black", &black, 0, INT_MAX, code); ++ code = mj_put_param_int(plist, "Dither", &dither, 0, 1, code); ++ code = mj_put_param_int(plist, "ColorComponent", &colorcomp, 1, 4, code); ++ code = mj_put_param_int(plist, "Direction", &direction, 1, 2, code); ++ code = mj_put_param_int(plist, "MicroWeave", µweave, 0, 1, code); ++ code = mj_put_param_int(plist, "DotSize", &dotsize, 0, 1, code); ++ code = mj_put_param_int(plist, "BitsPerPixel", &bpp, 1, 32, code); + if ( code < 0 ) +- return_error(code); +- +- if (bpp != 0) { +- set_bpp(pdev, bpp); +- +- /* Close the device; gs_putdeviceprops will reopen it. */ ++ return code; ++ mj->density = density; ++ mj->cyan = cyan; ++ mj->magenta = magenta; ++ mj->yellow = yellow; ++ mj->black = black; ++ mj->dither = dither; ++ mj->colorcomp = colorcomp; ++ mj->direction = direction; ++ mj->microweave = microweave; ++ mj->dotsize = dotsize; ++ if ( bpp != 0 ) { ++ mj_set_bpp(pdev, bpp); ++ gdev_prn_put_params(pdev, plist); + if ( bpp != old_bpp && pdev->is_open ) +- { int ccode = gs_closedevice(pdev); +- if ( ccode < 0 ) return ccode; +- } ++ return gs_closedevice(pdev); ++ return 0; + } +- +- return code; ++ else ++ return gdev_prn_put_params(pdev, plist); + } + + /* ------ Internal routines ------ */ +@@ -1163,7 +1155,8 @@ + + /* Send each scan line in turn */ + { +- long int lend = pdev->height - (pdev->t_margin + pdev->b_margin) * y_dpi; ++ long int lend = pdev->height - ++ (dev_t_margin_points(pdev) + dev_b_margin_points(pdev)); + int cErr, mErr, yErr, kErr; + int this_pass, i; + long int lnum; +@@ -1685,39 +1678,25 @@ + } + + private int +-put_prop_int(gs_prop_item *pi, int *property, int minval, int maxval, int code) +-{ +- if ( pi == 0 ) +- return (code); +- +- if ( pi->value.i < minval || pi->value.i > maxval ) +- { pi->status = pv_rangecheck; +- return (gs_error_rangecheck); +- } +- else +- { *property = pi->value.i; +- return (code ? code : 1); +- } +-} +- +-private int +-put_prop_float(gs_prop_item *pi, float *property, float minval, float maxval, int code) +-{ +- if ( pi == 0 ) +- return (code); +- +- if ( pi->value.f < minval || pi->value.f > maxval ) +- { pi->status = pv_rangecheck; +- return (gs_error_rangecheck); +- } +- else +- { *property = pi->value.f; +- return (code ? code : 1); +- } ++mj_put_param_int(gs_param_list *plist, gs_param_name pname, int *pvalue, ++ int minval, int maxval, int ecode) ++{ int code, value; ++ switch ( code = param_read_int(plist, pname, &value) ) ++ { ++ default: ++ return code; ++ 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); ++ } + } + + private void +-set_bpp(gx_device *pdev, int bits_per_pixel) ++mj_set_bpp(gx_device *pdev, int bits_per_pixel) + { gx_device_color_info *ci = &pdev->color_info; + /* Only valid bits-per-pixel are 1, 3, 8, 16, 24, 32 */ + int bpp = bits_per_pixel < 3 ? 1 : bits_per_pixel < 8 ? 3 : +@@ -1725,9 +1704,9 @@ + ci->num_components = ((bpp == 1) || (bpp == 8) ? 1 : 3); + ci->depth = ((bpp > 1) && (bpp < 8) ? 8 : bpp); + ci->max_gray = (bpp >= 8 ? 255 : 1); +- ci->max_rgb = (bpp >= 8 ? 255 : bpp > 1 ? 1 : 0); +- ci->dither_gray = (bpp >= 8 ? 5 : 2); +- ci->dither_rgb = (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0); ++ ci->max_color = (bpp >= 8 ? 255 : bpp > 1 ? 1 : 0); ++ ci->dither_grays = (bpp >= 8 ? 5 : 2); ++ ci->dither_colors = (bpp >= 8 ? 5 : bpp > 1 ? 2 : 0); + } + + /* This returns either the number of pixels in a scan line, or the number +@@ -1736,7 +1715,7 @@ + gdev_prn_rasterwidth(const gx_device_printer *pdev, int pixelcount) + { + word raster_width = +- pdev->width - pdev->x_pixels_per_inch * (pdev->l_margin + pdev->r_margin); ++ pdev->width - (pdev->HWMargins[0] + pdev->HWMargins[2]); + return (pixelcount ? + (uint)raster_width : + (uint)((raster_width * pdev->color_info.depth + 7) >> 3)); |