summaryrefslogtreecommitdiff
path: root/devices
diff options
context:
space:
mode:
authorRobin Watts <Robin.Watts@artifex.com>2021-04-08 16:29:55 +0100
committerRobin Watts <Robin.Watts@artifex.com>2021-04-20 15:03:02 +0100
commite1a3956f252404f07d93be47f7845b23e4a2c4de (patch)
tree9f702e5846dbeba82ccf4b65a28434a8b80de708 /devices
parent8d83e9871f14d44c7120f0e170c43064c6a738ea (diff)
downloadghostpdl-e1a3956f252404f07d93be47f7845b23e4a2c4de.tar.gz
Move devices away from static init of procs.
Diffstat (limited to 'devices')
-rw-r--r--devices/gdev3852.c18
-rw-r--r--devices/gdev4693.c18
-rw-r--r--devices/gdevbit.c229
-rw-r--r--devices/gdevbj10.c32
-rw-r--r--devices/gdevbmp.c71
-rw-r--r--devices/gdevccr.c17
-rw-r--r--devices/gdevcdj.c266
-rw-r--r--devices/gdevcfax.c17
-rw-r--r--devices/gdevchameleon.c89
-rw-r--r--devices/gdevclj.c76
-rw-r--r--devices/gdevcljc.c3
-rw-r--r--devices/gdevcmykog.c90
-rw-r--r--devices/gdevdfax.c16
-rw-r--r--devices/gdevdjet.c35
-rw-r--r--devices/gdevdjtc.c16
-rw-r--r--devices/gdevdsp.c97
-rw-r--r--devices/gdevepsc.c17
-rw-r--r--devices/gdevfax.c18
-rw-r--r--devices/gdevfpng.c88
-rw-r--r--devices/gdevhl7x.c17
-rw-r--r--devices/gdevicov.c25
-rw-r--r--devices/gdevifno.c20
-rw-r--r--devices/gdevijs.c56
-rw-r--r--devices/gdevimgn.c16
-rw-r--r--devices/gdevjpeg.c120
-rw-r--r--devices/gdevl31s.c16
-rw-r--r--devices/gdevlj56.c34
-rw-r--r--devices/gdevlxm.c17
-rw-r--r--devices/gdevmgr.c67
-rw-r--r--devices/gdevmiff.c4
-rw-r--r--devices/gdevn533.c17
-rw-r--r--devices/gdevocr.c42
-rw-r--r--devices/gdevpbm.c126
-rw-r--r--devices/gdevpcx.c73
-rw-r--r--devices/gdevpdfimg.c96
-rw-r--r--devices/gdevpdfocr.c72
-rw-r--r--devices/gdevpe.c25
-rw-r--r--devices/gdevperm.c74
-rw-r--r--devices/gdevphex.c34
-rw-r--r--devices/gdevpjet.c22
-rw-r--r--devices/gdevplan.c159
-rw-r--r--devices/gdevplib.c164
-rw-r--r--devices/gdevpng.c197
-rw-r--r--devices/gdevpsd.c113
-rw-r--r--devices/gdevrinkj.c77
-rw-r--r--devices/gdevsnfb.c19
-rw-r--r--devices/gdevstc.c37
-rw-r--r--devices/gdevtfax.c23
-rw-r--r--devices/gdevtfnx.c43
-rw-r--r--devices/gdevtknk.c17
-rw-r--r--devices/gdevtrac.c140
-rw-r--r--devices/gdevtsep.c325
-rw-r--r--devices/gdevupd.c35
-rw-r--r--devices/gdevwpr2.c22
-rw-r--r--devices/gdevx.c121
-rw-r--r--devices/gdevx.h13
-rw-r--r--devices/gdevxalt.c226
-rw-r--r--devices/gdevxcf.c92
-rw-r--r--devices/gdevxini.c19
-rw-r--r--devices/vector/gdevdocxw.c93
-rw-r--r--devices/vector/gdevpdf.c37
-rw-r--r--devices/vector/gdevpdfb.h77
-rw-r--r--devices/vector/gdevpx.c86
-rw-r--r--devices/vector/gdevtxtw.c93
-rw-r--r--devices/vector/gdevxps.c82
65 files changed, 2347 insertions, 2149 deletions
diff --git a/devices/gdev3852.c b/devices/gdev3852.c
index 1b3377b2d..e39c17111 100644
--- a/devices/gdev3852.c
+++ b/devices/gdev3852.c
@@ -39,12 +39,26 @@ Modified by L. Peter Deutsch <ghost@aladdin.com> 1999-01-10 to remove _ss
/* Should = 96 (KMG) */
#define LINE_SIZE ((X_DPI * 86 / 10 + 63) / 64 * 8)
+static int
+jetp3852_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, output_page, gdev_prn_bg_output_page);
+ set_dev_proc(dev, map_rgb_color, gdev_pcl_3bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gdev_pcl_3bit_map_color_rgb);
+
+ return 0;
+}
+
/* The device descriptor */
static dev_proc_print_page(jetp3852_print_page);
/* Since the 'print_page' does not change the device, this device can print in the background */
static gx_device_procs jetp3852_procs =
- prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gdev_pcl_3bit_map_rgb_color, gdev_pcl_3bit_map_color_rgb);
+ devprocs_initialize(jetp3852_initialize);
const gx_device_printer far_data gs_jetp3852_device =
prn_device(jetp3852_procs, "jetp3852",
86, /* width_10ths, 8.6" (?) */
diff --git a/devices/gdev4693.c b/devices/gdev4693.c
index baa975c5c..302bc191f 100644
--- a/devices/gdev4693.c
+++ b/devices/gdev4693.c
@@ -22,10 +22,24 @@ static dev_proc_print_page(t4693d_print_page);
static dev_proc_map_rgb_color(gdev_t4693d_map_rgb_color);
static dev_proc_map_color_rgb(gdev_t4693d_map_color_rgb);
+static int
+t4693d_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, output_page, gdev_prn_bg_output_page);
+ set_dev_proc(dev, map_rgb_color, gdev_t4693d_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gdev_t4693d_map_color_rgb);
+
+ return 0;
+}
+
/* Since the print_page doesn't alter the device, this device can print in the background */
static gx_device_procs t4693d_procs =
- prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gdev_t4693d_map_rgb_color, gdev_t4693d_map_color_rgb);
+ devprocs_initialize(t4693d_initialize);
#define t4693d_prn_device(name,depth,max_rgb) {prn_device_body( \
gx_device_printer,t4693d_procs,name, \
diff --git a/devices/gdevbit.c b/devices/gdevbit.c
index 8808c0239..d8347bc63 100644
--- a/devices/gdevbit.c
+++ b/devices/gdevbit.c
@@ -57,74 +57,21 @@ static dev_proc_put_image(bit_put_image);
static dev_proc_dev_spec_op(bit_dev_spec_op);
dev_proc_get_color_comp_index(gx_default_DevRGB_get_color_comp_index);
-#define bit_procs(encode_color)\
-{ gdev_prn_open,\
- gx_default_get_initial_matrix,\
- NULL, /* sync_output */\
- /* Since the print_page doesn't alter the device, this device can print in the background */\
- gdev_prn_bg_output_page,\
- gdev_prn_close,\
- encode_color, /* map_rgb_color */\
- bit_map_color_rgb, /* map_color_rgb */\
- NULL, /* fill_rectangle */\
- NULL, /* tile_rectangle */\
- NULL, /* copy_mono */\
- NULL, /* copy_color */\
- NULL, /* draw_line */\
- NULL, /* get_bits */\
- bit_get_params,\
- bit_put_params,\
- encode_color, /* map_cmyk_color */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- gx_page_device_get_page_device, /* get_page_device */\
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- NULL, /* fill_path */\
- NULL, /* stroke_path */\
- NULL, /* fill_mask */\
- NULL, /* fill_trapezoid */\
- NULL, /* fill_parallelogram */\
- NULL, /* fill_triangle */\
- NULL, /* draw_thin_line */\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- NULL, /* initialize */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- NULL, /* get_color_mapping_procs */\
- NULL, /* get_color_comp_index */\
- encode_color, /* encode_color */\
- bit_map_color_rgb, /* decode_color */\
- NULL, /* pattern_manage */\
- NULL, /* fill_rectangle_hl_color */\
- NULL, /* include_color_space */\
- NULL, /* fill_linear_color_scanline */\
- NULL, /* fill_linear_color_trapezoid */\
- NULL, /* fill_linear_color_triangle */\
- NULL, /* update_spot_equivalent_colors */\
- NULL, /* ret_devn_params */\
- NULL, /* fillpage */\
- NULL, /* push_transparency_state */\
- NULL, /* pop_transparency_state */\
- NULL, /* put_image */\
- bit_dev_spec_op\
+static int
+bit_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_color_rgb, bit_map_color_rgb);
+ set_dev_proc(dev, get_params, bit_get_params);
+ set_dev_proc(dev, put_params, bit_put_params);
+ set_dev_proc(dev, decode_color, bit_map_color_rgb);
+ set_dev_proc(dev, dev_spec_op, bit_dev_spec_op);
+
+ return 0;
}
/*
@@ -144,8 +91,24 @@ struct gx_device_bit_s {
};
typedef struct gx_device_bit_s gx_device_bit;
+static int
+bitmono_initialize(gx_device *dev)
+{
+ int code = bit_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, bit_mono_map_color);
+ set_dev_proc(dev, map_cmyk_color, bit_mono_map_color);
+ set_dev_proc(dev, encode_color, bit_mono_map_color);
+
+ return 0;
+}
+
static const gx_device_procs bitmono_procs =
-bit_procs(bit_mono_map_color);
+ devprocs_initialize(bitmono_initialize);
+
const gx_device_bit gs_bit_device =
{prn_device_body(gx_device_bit, bitmono_procs, "bit",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -154,8 +117,24 @@ const gx_device_bit gs_bit_device =
1, 1, 1, 0, 2, 1, bit_print_page)
};
+static int
+bitrgb_initialize(gx_device *dev)
+{
+ int code = bit_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, bitrgb_rgb_map_rgb_color);
+ set_dev_proc(dev, map_cmyk_color, bitrgb_rgb_map_rgb_color);
+ set_dev_proc(dev, encode_color, bitrgb_rgb_map_rgb_color);
+
+ return 0;
+}
+
static const gx_device_procs bitrgb_procs =
-bit_procs(bitrgb_rgb_map_rgb_color);
+ devprocs_initialize(bitrgb_initialize);
+
const gx_device_bit gs_bitrgb_device =
{prn_device_body(gx_device_bit, bitrgb_procs, "bitrgb",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -164,8 +143,23 @@ const gx_device_bit gs_bitrgb_device =
3, 4, 1, 1, 2, 2, bit_print_page)
};
+static int
+bitcmyk_initialize(gx_device *dev)
+{
+ int code = bit_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, bit_map_cmyk_color);
+ set_dev_proc(dev, map_cmyk_color, bit_map_cmyk_color);
+ set_dev_proc(dev, encode_color, bit_map_cmyk_color);
+
+ return 0;
+}
+
static const gx_device_procs bitcmyk_procs =
-bit_procs(bit_map_cmyk_color);
+ devprocs_initialize(bitcmyk_initialize);
const gx_device_bit gs_bitcmyk_device =
{prn_device_body(gx_device_bit, bitcmyk_procs, "bitcmyk",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -174,75 +168,32 @@ const gx_device_bit gs_bitcmyk_device =
4, 4, 1, 1, 2, 2, bit_print_page)
};
+static int
+bitrgbtags_initialize(gx_device *dev)
+{
+ int code = bit_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, bittag_open);
+ set_dev_proc(dev, map_rgb_color, bittag_rgb_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, bittag_map_color_rgb);
+ set_dev_proc(dev, get_params, gdev_prn_get_params);
+ set_dev_proc(dev, put_params, bittag_put_params);
+ set_dev_proc(dev, map_cmyk_color, bittag_rgb_map_rgb_color);
+ set_dev_proc(dev, get_color_mapping_procs, bittag_get_color_mapping_procs);
+ set_dev_proc(dev, get_color_comp_index, gx_default_DevRGB_get_color_comp_index);
+ set_dev_proc(dev, encode_color, bittag_rgb_map_rgb_color);
+ set_dev_proc(dev, decode_color, bittag_map_color_rgb);
+ set_dev_proc(dev, fillpage, bittag_fillpage);
+ set_dev_proc(dev, put_image, bit_put_image);
+
+ return 0;
+}
+
static const gx_device_procs bitrgbtags_procs =
- {
- bittag_open, /* open_device */
- gx_default_get_initial_matrix, /* initial_matrix */
- ((void *)0), /* sync_output */
- gdev_prn_output_page, /* output page */
- gdev_prn_close, /* close_device */
- bittag_rgb_map_rgb_color, /* map rgb color */
- bittag_map_color_rgb, /* map color rgb */
- ((void *)0), /* fill_rectangle */
- ((void *)0), /* tile rectangle */
- ((void *)0), /* copy mono */
- ((void *)0), /* copy color */
- ((void *)0), /* obsolete draw line */
- ((void *)0), /* get_bits */
- gdev_prn_get_params, /* get params */
- bittag_put_params, /* put params */
- bittag_rgb_map_rgb_color, /* map_cmyk_color */
- ((void *)0), /* get_xfonts */
- ((void *)0), /* get_xfont_device */
- ((void *)0), /* map_rgb_alpha_color */
- gx_page_device_get_page_device, /* get_page_device */
- ((void *)0), /* get_alpha_bits */
- ((void *)0), /* copy_alpha */
- ((void *)0), /* get_band */
- ((void *)0), /* copy_rop */
- ((void *)0), /* fill_path */
- ((void *)0), /* stroke_path */
- ((void *)0), /* fill_mask */
- ((void *)0), /* fill_trapezoid */
- ((void *)0), /* fill_parallelogram */
- ((void *)0), /* fill_triangle */
- ((void *)0), /* draw_thin_line */
- ((void *)0), /* begin_image */
- ((void *)0), /* image_data */
- ((void *)0), /* end_image */
- ((void *)0), /* strip_tile_rectangle */
- ((void *)0), /* strip_copy_rop */
- ((void *)0), /* get_clipping_box */
- ((void *)0), /* begin_typed_image */
- ((void *)0), /* get_bits_rectangle */
- ((void *)0), /* map_color_rgb_alpha */
- ((void *)0), /* create_compositor */
- ((void *)0), /* get_hardware_params */
- ((void *)0), /* text_begin */
- ((void *)0), /* initialize */
- ((void *)0), /* begin_transparency_group */
- ((void *)0), /* end_transparency_group */
- ((void *)0), /* begin_transparency_mask */
- ((void *)0), /* end_transparency_mask */
- ((void *)0), /* discard_transparency_layer */
- bittag_get_color_mapping_procs, /* get_color_mapping_procs */
- gx_default_DevRGB_get_color_comp_index, /* get_color_comp_index */
- bittag_rgb_map_rgb_color, /* encode_color */
- bittag_map_color_rgb, /* decode_color */
- ((void *)0), /* pattern_manage */
- ((void *)0), /* fill_rectangle_hl_color */
- ((void *)0), /* include_color_space */
- ((void *)0), /* fill_linear_color_scanline */
- ((void *)0), /* fill_linear_color_trapezoid */
- ((void *)0), /* fill_linear_color_triangle */
- ((void *)0), /* update_spot_equivalent_colors */
- ((void *)0), /* ret_devn_params */
- bittag_fillpage, /* fillpage */
- ((void *)0), /* push_transparency_state */
- ((void *)0), /* pop_transparency_state */
- bit_put_image, /* put_image */
- bit_dev_spec_op /* dev_spec_op */
- };
+ devprocs_initialize(bitrgbtags_initialize);
const gx_device_bit gs_bitrgbtags_device =
{
diff --git a/devices/gdevbj10.c b/devices/gdevbj10.c
index 9468552a4..4d411500c 100644
--- a/devices/gdevbj10.c
+++ b/devices/gdevbj10.c
@@ -106,9 +106,22 @@ static dev_proc_open_device(bj200_open);
static dev_proc_print_page(bj10e_print_page);
-static gx_device_procs prn_bj200_procs =
/* Since the print_page doesn't alter the device, this device can print in the background */
- prn_procs(bj200_open, gdev_prn_bg_output_page, gdev_prn_close);
+static int
+bj200_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, bj200_open);
+
+ return 0;
+}
+
+static gx_device_procs prn_bj200_procs =
+ devprocs_initialize(bj200_initialize);
const gx_device_printer far_data gs_bj200_device =
prn_device(prn_bj200_procs, "bj200",
@@ -142,8 +155,21 @@ const gx_device_printer far_data gs_bj200_device =
static dev_proc_open_device(bj10e_open);
+static int
+bj10e_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, bj10e_open);
+
+ return 0;
+}
+
static gx_device_procs prn_bj10e_procs =
- prn_procs(bj10e_open, gdev_prn_output_page, gdev_prn_close);
+ devprocs_initialize(bj10e_initialize);
const gx_device_printer far_data gs_bj10e_device =
prn_device(prn_bj10e_procs, "bj10e",
diff --git a/devices/gdevbmp.c b/devices/gdevbmp.c
index 52a133745..fb4c75f36 100644
--- a/devices/gdevbmp.c
+++ b/devices/gdevbmp.c
@@ -37,8 +37,8 @@ prn_device(prn_bg_procs, "bmpmono", /* The print_page proc is compatible with al
/* Since the print_page doesn't alter the device, this device can print in the background */
static const gx_device_procs bmpgray_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_gray_map_rgb_color, gx_default_gray_map_color_rgb);
+ devprocs_initialize(gdev_prn_initialize_gray_bg);
+
const gx_device_printer gs_bmpgray_device = {
prn_device_body(gx_device_printer, bmpgray_procs, "bmpgray",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -56,9 +56,9 @@ const gx_device_printer gs_bmpgray_device = {
gdev_prn_get_params, gdev_prn_put_params,\
p_map_cmyk_color, NULL, NULL, NULL, gx_page_device_get_page_device
-static const gx_device_procs bmpsep1_procs = {
- bmp_cmyk_procs(cmyk_1bit_map_color_rgb, cmyk_1bit_map_cmyk_color)
-};
+static const gx_device_procs bmpsep1_procs =
+ devprocs_initialize(gdev_prn_initialize_cmyk1_bg);
+
const gx_device_printer gs_bmpsep1_device = {
prn_device_body(gx_device_printer, bmpsep1_procs, "bmpsep1",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -68,10 +68,9 @@ const gx_device_printer gs_bmpsep1_device = {
};
/* 8-bit-per-plane separated CMYK color. */
+static const gx_device_procs bmpsep8_procs =
+ devprocs_initialize(gdev_prn_initialize_cmyk8_bg);
-static const gx_device_procs bmpsep8_procs = {
- bmp_cmyk_procs(cmyk_8bit_map_color_rgb, cmyk_8bit_map_cmyk_color)
-};
const gx_device_printer gs_bmpsep8_device = {
prn_device_body(gx_device_printer, bmpsep8_procs, "bmpsep8",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -83,9 +82,22 @@ const gx_device_printer gs_bmpsep8_device = {
/* 4-bit planar (EGA/VGA-style) color. */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+bmpsep16_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_cmyk8_bg(dev);
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, pc_4bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, pc_4bit_map_color_rgb);
+
+ return 0;
+}
+
static const gx_device_procs bmp16_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- pc_4bit_map_rgb_color, pc_4bit_map_color_rgb);
+ devprocs_initialize(bmpsep16_initialize);
+
const gx_device_printer gs_bmp16_device = {
prn_device_body(gx_device_printer, bmp16_procs, "bmp16",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -98,9 +110,22 @@ const gx_device_printer gs_bmp16_device = {
/* (Uses a fixed palette of 3,3,2 bits.) */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+bmp256_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, pc_8bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, pc_8bit_map_color_rgb);
+
+ return 0;
+}
+
static const gx_device_procs bmp256_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- pc_8bit_map_rgb_color, pc_8bit_map_color_rgb);
+ devprocs_initialize(bmp256_initialize);
+
const gx_device_printer gs_bmp256_device = {
prn_device_body(gx_device_printer, bmp256_procs, "bmp256",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -112,9 +137,22 @@ const gx_device_printer gs_bmp256_device = {
/* 24-bit color. */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+bmp16m_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, bmp_map_16m_rgb_color);
+ set_dev_proc(dev, map_color_rgb, bmp_map_16m_color_rgb);
+
+ return 0;
+}
+
static const gx_device_procs bmp16m_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- bmp_map_16m_rgb_color, bmp_map_16m_color_rgb);
+ devprocs_initialize(bmp16m_initialize);
+
const gx_device_printer gs_bmp16m_device =
prn_device(bmp16m_procs, "bmp16m",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -123,10 +161,9 @@ prn_device(bmp16m_procs, "bmp16m",
24, bmp_print_page);
/* 32-bit CMYK color (outside the BMP specification). */
+static const gx_device_procs bmp32b_procs =
+ devprocs_initialize(gdev_prn_initialize_cmyk8_bg);
-static const gx_device_procs bmp32b_procs = {
- bmp_cmyk_procs(cmyk_8bit_map_color_rgb, gx_default_cmyk_map_cmyk_color)
-};
const gx_device_printer gs_bmp32b_device =
prn_device(bmp32b_procs, "bmp32b",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
diff --git a/devices/gdevccr.c b/devices/gdevccr.c
index 451cb82c0..d4906c99c 100644
--- a/devices/gdevccr.c
+++ b/devices/gdevccr.c
@@ -96,10 +96,23 @@ static dev_proc_map_color_rgb(ccr_map_color_rgb);
static dev_proc_print_page(ccr_print_page);
/* The device procedures */
+static int
+ccr_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, ccr_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, ccr_map_color_rgb);
+
+ return 0;
+}
+
/* Since the print_page doesn't alter the device, this device can print in the background */
static gx_device_procs ccr_procs =
- prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- ccr_map_rgb_color, ccr_map_color_rgb);
+ devprocs_initialize(ccr_initialize);
/* The device descriptors themselves */
gx_device_ccr far_data gs_ccr_device =
diff --git a/devices/gdevcdj.c b/devices/gdevcdj.c
index dc014077a..733c09219 100644
--- a/devices/gdevcdj.c
+++ b/devices/gdevcdj.c
@@ -454,115 +454,217 @@ typedef struct {
}
/* Since the print_page doesn't alter the device, this device can print in the background */
-#define hp_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_bg_output_page,\
- gdev_prn_close,\
- gdev_pcl_map_rgb_color,\
- gdev_pcl_map_color_rgb,\
- NULL, /* fill_rectangle */\
- NULL, /* tile_rectangle */\
- NULL, /* copy_mono */\
- NULL, /* copy_color */\
- NULL, /* draw_line */\
- gx_default_get_bits,\
- proc_get_params,\
- proc_put_params\
+static int
+hp_colour_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, gdev_pcl_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gdev_pcl_map_color_rgb);
+ set_dev_proc(dev, get_params, cdj_get_params);
+ set_dev_proc(dev, put_params, cdj_put_params);
+
+ return 0;
}
-/* Since the print_page doesn't alter the device, this device can print in the background */
-#define cmyk_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_bg_output_page,\
- gdev_prn_close,\
- NULL /* map_rgb_color */,\
- NULL /* map_color_rgb */,\
- NULL /* fill_rectangle */,\
- NULL /* tile_rectangle */,\
- NULL /* copy_mono */,\
- NULL /* copy_color */,\
- NULL /* draw_line */,\
- gx_default_get_bits,\
- proc_get_params,\
- proc_put_params,\
- gdev_cmyk_map_cmyk_color,\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- NULL, /* get_page_device */\
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- NULL, /* fill_path */\
- NULL, /* stroke_path */\
- NULL, /* fill_mask */\
- NULL, /* fill_trapezoid */\
- NULL, /* fill_parallelogram */\
- NULL, /* fill_triangle */\
- NULL, /* draw_thin_line */\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- NULL, /* initialize */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- NULL, /* get_color_mapping_procs */\
- NULL, /* get_color_comp_index */\
- gdev_cmyk_map_cmyk_color, /* encode_color */\
- gdev_cmyk_map_color_cmyk /* decode_color */\
+static int
+cdj500_initialize(gx_device *dev)
+{
+ int code = hp_colour_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, dj500c_open);
+
+ return 0;
}
static gx_device_procs cdj500_procs =
-hp_colour_procs(dj500c_open, cdj_get_params, cdj_put_params);
+ devprocs_initialize(cdj500_initialize);
+
+static int
+cdj550_initialize(gx_device *dev)
+{
+ int code = hp_colour_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, dj550c_open);
+
+ return 0;
+}
static gx_device_procs cdj550_procs =
-hp_colour_procs(dj550c_open, cdj_get_params, cdj_put_params);
+ devprocs_initialize(cdj550_initialize);
#ifdef USE_CDJ550_CMYK
+static int
+cdj550cmyk_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, dj550c_open);
+ set_dev_proc(dev, get_params, cdj_get_params);
+ set_dev_proc(dev, put_params, cdj_put_params);
+ set_dev_proc(dev, map_cmyk_color, gdev_cmyk_map_cmyk_color);
+ set_dev_proc(dev, encode_color, gdev_cmyk_map_cmyk_color);
+ set_dev_proc(dev, decode_color, gdev_cmyk_map_color_cmyk);
+
+ return 0;
+}
+
static gx_device_procs cdj550cmyk_procs =
-cmyk_colour_procs(dj550c_open, cdj_get_params, cdj_put_params);
+ devprocs_initialize(cdj550cmyk_initialize);
#endif
+static int
+dj505j_initialize(gx_device *dev)
+{
+ int code = hp_colour_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, dj505j_open);
+
+ return 0;
+}
+
static gx_device_procs dj505j_procs =
-hp_colour_procs(dj505j_open, cdj_get_params, cdj_put_params);
+ devprocs_initialize(dj505j_initialize);
+
+static int
+dnj650c_initialize(gx_device *dev)
+{
+ int code = hp_colour_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, dnj650c_open);
+
+ return 0;
+}
static gx_device_procs dnj650c_procs =
-hp_colour_procs(dnj650c_open, cdj_get_params, cdj_put_params);
+ devprocs_initialize(dnj650c_initialize);
+
+static int
+lj4dith_initialize(gx_device *dev)
+{
+ int code = hp_colour_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, lj4dith_open);
+
+ return 0;
+}
static gx_device_procs lj4dith_procs =
-hp_colour_procs(lj4dith_open, cdj_get_params, cdj_put_params);
+ devprocs_initialize(lj4dith_initialize);
+
+static int
+pj_initialize(gx_device *dev)
+{
+ int code = hp_colour_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pj_open);
+ set_dev_proc(dev, get_params, gdev_prn_get_params);
+ set_dev_proc(dev, put_params, pj_put_params);
+
+ return 0;
+}
static gx_device_procs pj_procs =
-hp_colour_procs(pj_open, gdev_prn_get_params, pj_put_params);
+ devprocs_initialize(pj_initialize);
+
+static int
+pjxl_initialize(gx_device *dev)
+{
+ int code = hp_colour_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pjxl_open);
+ set_dev_proc(dev, get_params, pjxl_get_params);
+ set_dev_proc(dev, put_params, pjxl_put_params);
+
+ return 0;
+}
static gx_device_procs pjxl_procs =
-hp_colour_procs(pjxl_open, pjxl_get_params, pjxl_put_params);
+ devprocs_initialize(pjxl_initialize);
+
+static int
+pjxl300_initialize(gx_device *dev)
+{
+ int code = hp_colour_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pjxl300_open);
+ set_dev_proc(dev, get_params, pjxl_get_params);
+ set_dev_proc(dev, put_params, pjxl_put_params);
+
+ return 0;
+}
static gx_device_procs pjxl300_procs =
-hp_colour_procs(pjxl300_open, pjxl_get_params, pjxl_put_params);
+ devprocs_initialize(pjxl300_initialize);
+
+static int
+bjc_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, bjc_open);
+ set_dev_proc(dev, get_params, bjc_get_params);
+ set_dev_proc(dev, put_params, bjc_put_params);
+ set_dev_proc(dev, map_cmyk_color, gdev_cmyk_map_cmyk_color);
+ set_dev_proc(dev, encode_color, gdev_cmyk_map_cmyk_color);
+ set_dev_proc(dev, decode_color, gdev_cmyk_map_color_cmyk);
+
+ return 0;
+}
static gx_device_procs bjc_procs =
-cmyk_colour_procs(bjc_open, bjc_get_params, bjc_put_params);
+ devprocs_initialize(bjc_initialize);
+
+static int
+escp_initialize(gx_device *dev)
+{
+ int code = hp_colour_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, escp_open);
+ set_dev_proc(dev, get_params, ep_get_params);
+ set_dev_proc(dev, put_params, ep_put_params);
+
+ return 0;
+}
static gx_device_procs escp_procs =
-hp_colour_procs(escp_open, ep_get_params, ep_put_params);
+ devprocs_initialize(escp_initialize);
gx_device_cdj far_data gs_cdjmono_device =
cdj_device(cdj500_procs, "cdjmono", 300, 300, 1,
diff --git a/devices/gdevcfax.c b/devices/gdevcfax.c
index cd3dc15cc..9ffead664 100644
--- a/devices/gdevcfax.c
+++ b/devices/gdevcfax.c
@@ -28,9 +28,22 @@ static dev_proc_close_device(cfax_prn_close);
/* an additional "end of document" signature after the last */
/* "end page" signature */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+cfax_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, close_device, cfax_prn_close);
+ set_dev_proc(dev, get_params, gdev_fax_get_params);
+ set_dev_proc(dev, put_params, gdev_fax_put_params);
+
+ return 0;
+}
static const gx_device_procs gdev_cfax_std_procs =
- prn_params_procs(gdev_prn_open, gdev_prn_bg_output_page, cfax_prn_close,
- gdev_fax_get_params, gdev_fax_put_params);
+ devprocs_initialize(cfax_initialize);
const gx_device_fax gs_cfax_device = {
FAX_DEVICE_BODY(gx_device_fax, gdev_cfax_std_procs, "cfax", cfax_print_page)
diff --git a/devices/gdevchameleon.c b/devices/gdevchameleon.c
index 20abe218f..7f529e127 100644
--- a/devices/gdevchameleon.c
+++ b/devices/gdevchameleon.c
@@ -59,75 +59,28 @@ struct gx_device_chameleon_s {
};
typedef struct gx_device_chameleon_s gx_device_chameleon;
+static int
+chameleon_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, chameleon_rgb_encode_color);
+ set_dev_proc(dev, map_color_rgb, chameleon_rgb_decode_color);
+ set_dev_proc(dev, get_params, chameleon_get_params);
+ set_dev_proc(dev, put_params, chameleon_put_params);
+ set_dev_proc(dev, map_cmyk_color, chameleon_rgb_encode_color);
+ set_dev_proc(dev, encode_color, chameleon_rgb_encode_color);
+ set_dev_proc(dev, decode_color, chameleon_rgb_decode_color);
+ set_dev_proc(dev, dev_spec_op, chameleon_spec_op);
+
+ return 0;
+}
+
static const gx_device_procs chameleon_procs =
-{ gdev_prn_open,
- gx_default_get_initial_matrix,
- NULL, /* sync_output */
- /* Since the print_page doesn't alter the device, this device can print in the background */
- gdev_prn_bg_output_page,
- gdev_prn_close,
- chameleon_rgb_encode_color, /* map_rgb_color */
- chameleon_rgb_decode_color, /* map_color_rgb */
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- NULL, /* get_bits */
- chameleon_get_params,
- chameleon_put_params,
- chameleon_rgb_encode_color, /* map_cmyk_color */
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device, /* get_page_device */
- NULL, /* get_alpha_bits */
- NULL, /* copy_alpha */
- NULL, /* get_band */
- NULL, /* copy_rop */
- NULL, /* fill_path */
- NULL, /* stroke_path */
- NULL, /* fill_mask */
- NULL, /* fill_trapezoid */
- NULL, /* fill_parallelogram */
- NULL, /* fill_triangle */
- NULL, /* draw_thin_line */
- NULL, /* begin_image */
- NULL, /* image_data */
- NULL, /* end_image */
- NULL, /* strip_tile_rectangle */
- NULL, /* strip_copy_rop */
- NULL, /* get_clipping_box */
- NULL, /* begin_typed_image */
- NULL, /* get_bits_rectangle */
- NULL, /* map_color_rgb_alpha */
- NULL, /* create_compositor */
- NULL, /* get_hardware_params */
- NULL, /* text_begin */
- NULL, /* finish_copydevice */
- NULL, /* begin_transparency_group */
- NULL, /* end_transparency_group */
- NULL, /* begin_transparency_mask */
- NULL, /* end_transparency_mask */
- NULL, /* discard_transparency_layer */
- NULL, /* get_color_mapping_procs */
- NULL, /* get_color_comp_index */
- chameleon_rgb_encode_color,/* encode_color */
- chameleon_rgb_decode_color, /* decode_color */
- NULL, /* pattern_manage */
- NULL, /* fill_rectangle_hl_color */
- NULL, /* include_color_space */
- NULL, /* fill_linear_color_scanline */
- NULL, /* fill_linear_color_trapezoid */
- NULL, /* fill_linear_color_triangle */
- NULL, /* update_spot_equivalent_colors */
- NULL, /* ret_devn_params */
- NULL, /* fillpage */
- NULL, /* push_transparency_state */
- NULL, /* pop_transparency_state */
- NULL, /* put_image */
- chameleon_spec_op /* dev_spec_op */
-};
+ devprocs_initialize(chameleon_initialize);
const gx_device_chameleon gs_chameleon_device =
{prn_device_body(gx_device_chameleon, chameleon_procs, "chameleon",
diff --git a/devices/gdevclj.c b/devices/gdevclj.c
index 5edac41ef..a423c6f26 100644
--- a/devices/gdevclj.c
+++ b/devices/gdevclj.c
@@ -515,32 +515,37 @@ xit:
}
/* CLJ device methods */
-#define CLJ_PROCS(get_params, put_params)\
- gdev_prn_open, /* open_device */\
- clj_get_initial_matrix, /* get_initial matrix */\
- NULL, /* sync_output */\
-/* Since the print_page doesn't alter the device, this device can print in the background */\
- gdev_prn_bg_output_page, /* output_page */\
- gdev_prn_close, /* close_device */\
- gdev_pcl_3bit_map_rgb_color, /* map_rgb_color */\
- gdev_pcl_3bit_map_color_rgb, /* map_color_rgb */\
- NULL, /* fill_rectangle */\
- NULL, /* tile_rectangle */\
- NULL, /* copy_mono */\
- NULL, /* copy_color */\
- NULL, /* obsolete draw_line */\
- NULL, /* get_bits */\
- get_params, /* get_params */\
- put_params, /* put_params */\
- NULL, /* map_cmyk_color */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- gx_page_device_get_page_device /* get_page_device */
-
-static gx_device_procs cljet5_procs = {
- CLJ_PROCS(clj_get_params, clj_put_params)
-};
+static int
+clj_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_initial_matrix, clj_get_initial_matrix);
+ set_dev_proc(dev, map_rgb_color, gdev_pcl_3bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gdev_pcl_3bit_map_color_rgb);
+
+ return 0;
+}
+
+static int
+cljet5_initialize(gx_device *dev)
+{
+ int code = clj_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_params, clj_get_params);
+ set_dev_proc(dev, put_params, clj_put_params);
+
+ return 0;
+}
+
+static gx_device_procs cljet5_procs =
+ devprocs_initialize(cljet5_initialize);
/* CLJ device structure */
#define CLJ_DEVICE_BODY(procs, dname, rotated)\
@@ -677,9 +682,22 @@ clj_pr_put_params(
}
/* CLJ device methods -- se above for CLJ_PROCS */
-static gx_device_procs cljet5pr_procs = {
- CLJ_PROCS(clj_pr_get_params, clj_pr_put_params)
-};
+static int
+cljet5pr_initialize(gx_device *dev)
+{
+ int code = clj_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_params, clj_pr_get_params);
+ set_dev_proc(dev, put_params, clj_pr_put_params);
+
+ return 0;
+}
+
+static gx_device_procs cljet5pr_procs =
+ devprocs_initialize(cljet5pr_initialize);
/* CLJ device structure -- see above for CLJ_DEVICE_BODY */
gx_device_clj gs_cljet5pr_device = {
diff --git a/devices/gdevcljc.c b/devices/gdevcljc.c
index bf8a4b821..7f0f2d3cf 100644
--- a/devices/gdevcljc.c
+++ b/devices/gdevcljc.c
@@ -85,8 +85,7 @@ out:
/* CLJ device methods */
/* Since the print_page doesn't alter the device, this device can print in the background */
static gx_device_procs cljc_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_rgb_map_rgb_color, gx_default_rgb_map_color_rgb);
+ devprocs_initialize(gdev_prn_initialize_rgb_bg);
/* the CLJ device */
const gx_device_printer gs_cljet5c_device =
diff --git a/devices/gdevcmykog.c b/devices/gdevcmykog.c
index ff9919661..6caec93ee 100644
--- a/devices/gdevcmykog.c
+++ b/devices/gdevcmykog.c
@@ -718,73 +718,26 @@ prn_done:
/* Finally, the device definition itself */
-#define device_procs(get_color_mapping_procs)\
-{ cmykog_open, /* open device */\
- gx_default_get_initial_matrix, /* initialize matrix */\
- NULL, /* sync_output */\
- gdev_prn_bg_output_page, /* output_page */\
- cmykog_close, /* close */\
- NULL, /* map_rgb_color - not used */\
- NULL, /* map_color_rgb - not used */\
- NULL, /* fill_rectangle */\
- NULL, /* tile_rectangle */\
- NULL, /* copy_mono */\
- NULL, /* copy_color */\
- NULL, /* draw_line */\
- NULL, /* get_bits */\
- gx_devn_prn_get_params, /* get_params */\
- cmykog_put_params, /* put_params */\
- NULL, /* map_cmyk_color - not used */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- gx_page_device_get_page_device, /* get_page_device */\
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- NULL, /* fill_path */\
- NULL, /* stroke_path */\
- NULL, /* fill_mask */\
- NULL, /* fill_trapezoid */\
- NULL, /* fill_parallelogram */\
- NULL, /* fill_triangle */\
- NULL, /* draw_thin_line */\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- NULL, /* initialize */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- gx_devn_prn_get_color_mapping_procs,/* get_color_mapping_procs */\
- cmykog_get_color_comp_index, /* get_color_comp_index */\
- gx_devn_prn_encode_color, /* encode_color */\
- gx_devn_prn_decode_color, /* decode_color */\
- NULL, /* pattern_manage */\
- NULL, /* fill_rectangle_hl_color */\
- NULL, /* include_color_space */\
- NULL, /* fill_linear_color_scanline */\
- NULL, /* fill_linear_color_trapezoid */\
- NULL, /* fill_linear_color_triangle */\
- NULL, /* update_spot_equivalent_colors */\
- gx_devn_prn_ret_devn_params, /* ret_devn_params */\
- NULL, /* fillpage */\
- NULL, /* push_transparency_state */\
- NULL, /* pop_transparency_state */\
- NULL, /* put_image */\
- cmykog_dev_spec_op /* dev_spec_op */\
+static int
+psdcmykog_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, cmykog_open);
+ set_dev_proc(dev, close_device, cmykog_close);
+ set_dev_proc(dev, get_params, gx_devn_prn_get_params);
+ set_dev_proc(dev, put_params, cmykog_put_params);
+ set_dev_proc(dev, get_color_mapping_procs, gx_devn_prn_get_color_mapping_procs);
+ set_dev_proc(dev, get_color_comp_index, cmykog_get_color_comp_index);
+ set_dev_proc(dev, encode_color, gx_devn_prn_encode_color);
+ set_dev_proc(dev, decode_color, gx_devn_prn_decode_color);
+ set_dev_proc(dev, ret_devn_params, gx_devn_prn_ret_devn_params);
+ set_dev_proc(dev, dev_spec_op, cmykog_dev_spec_op);
+
+ return 0;
}
fixed_colorant_name DevCMYKOGComponents[] = {
@@ -819,7 +772,8 @@ fixed_colorant_name DevCMYKOGComponents[] = {
/*
* PSDCMYKOG 8bits
*/
-static const gx_device_procs cmykog_procs = device_procs(get_cmykog_spot_color_mapping_procs);
+static const gx_device_procs cmykog_procs =
+ devprocs_initialize(psdcmykog_initialize);
const gx_device_cmykog gs_psdcmykog_device =
{
diff --git a/devices/gdevdfax.c b/devices/gdevdfax.c
index d113fd077..658199b05 100644
--- a/devices/gdevdfax.c
+++ b/devices/gdevdfax.c
@@ -42,8 +42,22 @@ struct gx_device_dfax_s {
typedef struct gx_device_dfax_s gx_device_dfax;
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+dfax_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, dfax_prn_open);
+ set_dev_proc(dev, output_page, gdev_prn_bg_output_page_seekable);
+
+ return 0;
+}
+
static gx_device_procs dfax_procs =
- prn_procs(dfax_prn_open, gdev_prn_bg_output_page_seekable, gdev_prn_close);
+ devprocs_initialize(dfax_initialize);
gx_device_dfax far_data gs_dfaxlow_device =
{ prn_device_std_body(gx_device_dfax, dfax_procs, "dfaxlow",
diff --git a/devices/gdevdjet.c b/devices/gdevdjet.c
index 402e8aaa3..d7103f283 100644
--- a/devices/gdevdjet.c
+++ b/devices/gdevdjet.c
@@ -115,14 +115,41 @@ static dev_proc_get_params(hpjet_get_params);
static dev_proc_put_params(hpjet_put_params);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+hpjet_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, hpjet_open);
+ set_dev_proc(dev, close_device, hpjet_close);
+ set_dev_proc(dev, get_params, hpjet_get_params);
+ set_dev_proc(dev, put_params, hpjet_put_params);
+
+ return 0;
+}
+
static const gx_device_procs prn_hp_procs =
-prn_params_procs(hpjet_open, gdev_prn_bg_output_page, hpjet_close,
- hpjet_get_params, hpjet_put_params);
+ devprocs_initialize(hpjet_initialize);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+ljet4pjl_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, hpjet_open);
+ set_dev_proc(dev, close_device, ljet4pjl_close);
+
+ return 0;
+}
static gx_device_procs prn_ljet4pjl_procs =
-prn_params_procs(hpjet_open, gdev_prn_bg_output_page, ljet4pjl_close,
- gdev_prn_get_params, gdev_prn_put_params);
+ devprocs_initialize(ljet4pjl_initialize);
typedef struct gx_device_hpjet_s gx_device_hpjet;
diff --git a/devices/gdevdjtc.c b/devices/gdevdjtc.c
index 34bb030d2..a1630a722 100644
--- a/devices/gdevdjtc.c
+++ b/devices/gdevdjtc.c
@@ -40,9 +40,21 @@
static dev_proc_print_page(djet500c_print_page);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+djet500c_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return 0;
+
+ set_dev_proc(dev, map_rgb_color, gdev_pcl_3bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gdev_pcl_3bit_map_color_rgb);
+
+ return 0;
+}
static gx_device_procs djet500c_procs =
- prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gdev_pcl_3bit_map_rgb_color, gdev_pcl_3bit_map_color_rgb);
+ devprocs_initialize(djet500c_initialize);
const gx_device_printer far_data gs_djet500c_device =
prn_device(djet500c_procs, "djet500c",
diff --git a/devices/gdevdsp.c b/devices/gdevdsp.c
index 8991bd813..f502f8542 100644
--- a/devices/gdevdsp.c
+++ b/devices/gdevdsp.c
@@ -105,76 +105,11 @@ static dev_proc_ret_devn_params(display_ret_devn_params);
static dev_proc_dev_spec_op(display_spec_op);
static dev_proc_fill_rectangle_hl_color(display_fill_rectangle_hl_color);
+extern dev_proc_open_device(clist_open);
+extern dev_proc_close_device(clist_close);
+
static const gx_device_procs display_procs =
-{
- display_open,
- display_get_initial_matrix,
- display_sync_output,
- display_output_page,
- display_close,
- gx_default_w_b_map_rgb_color,
- gx_default_w_b_map_color_rgb,
- NULL, /* display_fill_rectangle - will be inserted later */
- NULL, /* tile rectangle */
- NULL, /* display_copy_mono - will be inserted later */
- NULL, /* display_copy_color - will be inserted later */
- NULL, /* draw line */
- NULL, /* display_get_bits - will be inserted later */
- display_get_params,
- display_put_params,
- gx_default_cmyk_map_cmyk_color, /* map_cmyk_color */
- gx_default_get_xfont_procs,
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device,
- /* extra entries */
- NULL, /* get_alpha_bits */
- NULL, /* copy_alpha */
- NULL, /* get_band */
- NULL, /* copy_rop */
- NULL, /* fill_path */
- NULL, /* stroke_path */
- NULL, /* fill_mask */
- NULL, /* fill_trapezoid */
- NULL, /* fill_parallelogram */
- NULL, /* fill_triangle */
- NULL, /* draw_thin_line */
- NULL, /* begin_image */
- NULL, /* image_data */
- NULL, /* end_image */
- NULL, /* strip_tile_rectangle */
- NULL, /* strip_copy_rop */
- NULL, /* get_clipping_box */
- NULL, /* begin_typed_image */
- NULL, /* get_bits_rectangle */
- NULL, /* map_color_rgb_alpha */
- NULL, /* create_compositor */
- NULL, /* get_hardware_params */
- NULL, /* text_begin */
- display_initialize, /* initialize */
- NULL, /* begin_transparency_group */
- NULL, /* end_transparency_group */
- NULL, /* begin_transparency_mask */
- NULL, /* end_transparency_mask */
- NULL, /* discard_transparency_layer */
- NULL, /* get_color_mapping_procs */
- NULL, /* get_color_comp_index */
- NULL, /* encode_color */
- NULL, /* decode_color */
- NULL, /* pattern_manage */
- display_fill_rectangle_hl_color, /* fill_rectangle_hl_color */\
- NULL, /* include_color_space */\
- NULL, /* fill_linear_color_scanline */\
- NULL, /* fill_linear_color_trapezoid */\
- NULL, /* fill_linear_color_triangle */\
- display_update_spot_equivalent_colors, /* update_spot_equivalent_colors */
- display_ret_devn_params, /* ret_devn_params */\
- NULL, /* fillpage */\
- NULL, /* push_transparency_state */\
- NULL, /* pop_transparency_state */\
- NULL, /* put_image */\
- display_spec_op /* dev_spec_op */\
-};
+ devprocs_initialize(display_initialize);
/* GC descriptor */
public_st_device_display();
@@ -1217,6 +1152,23 @@ display_initialize(gx_device *dev)
{
gx_device_display *ddev = (gx_device_display *) dev;
+ set_dev_proc(dev, open_device, display_open);
+ set_dev_proc(dev, get_initial_matrix, display_get_initial_matrix);
+ set_dev_proc(dev, sync_output, display_sync_output);
+ set_dev_proc(dev, output_page, display_output_page);
+ set_dev_proc(dev, close_device, display_close);
+ set_dev_proc(dev, map_rgb_color, gx_default_w_b_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gx_default_w_b_map_color_rgb);
+ set_dev_proc(dev, get_params, display_get_params);
+ set_dev_proc(dev, put_params, display_put_params);
+ set_dev_proc(dev, map_cmyk_color, gx_default_cmyk_map_cmyk_color);
+ set_dev_proc(dev, get_xfont_procs, gx_default_get_xfont_procs);
+ set_dev_proc(dev, get_page_device, gx_page_device_get_page_device);
+ set_dev_proc(dev, fill_rectangle_hl_color, display_fill_rectangle_hl_color);
+ set_dev_proc(dev, update_spot_equivalent_colors, display_update_spot_equivalent_colors);
+ set_dev_proc(dev, ret_devn_params, display_ret_devn_params);
+ set_dev_proc(dev, dev_spec_op, display_spec_op);
+
/* Mark the new instance as closed. */
ddev->is_open = false;
@@ -1493,7 +1445,7 @@ display_free_bitmap(gx_device_display * ddev)
gx_device_clist_common * const pcldev = &pclist_dev->common;
gx_device_clist_reader * const pcrdev = &pclist_dev->reader;
/* Close cmd list device & point to the storage */
- (*gs_clist_device_procs.close_device)( (gx_device *)pcldev );
+ clist_close( (gx_device *)pcldev );
ddev->buf = NULL;
ddev->buffer_space = 0;
@@ -1750,8 +1702,11 @@ display_alloc_bitmap(gx_device_display * ddev, gx_device * param_dev)
&display_buf_procs,
ddev->orig_procs.dev_spec_op,
MIN_BUFFER_SPACE);
- if (ccode >= 0)
+ if (ccode >= 0) {
ddev->procs = gs_clist_device_procs;
+ /* Hacky - we know this can't fail. */
+ clist_open((gx_device *)ddev);
+ }
} else {
/* Set up as PageMode. */
gx_device *bdev = (gx_device *)ddev;
diff --git a/devices/gdevepsc.c b/devices/gdevepsc.c
index 5818eac8a..427ab9e50 100644
--- a/devices/gdevepsc.c
+++ b/devices/gdevepsc.c
@@ -143,9 +143,22 @@ epson_map_color_rgb(gx_device * dev, gx_color_index color,
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 int
+epson_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, epson_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, epson_map_color_rgb);
+
+ return 0;
+}
+
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);
+ devprocs_initialize(epson_initialize);
const gx_device_printer far_data gs_epsonc_device =
prn_device(epson_procs, "epsonc",
diff --git a/devices/gdevfax.c b/devices/gdevfax.c
index f85d8392f..03396f33c 100644
--- a/devices/gdevfax.c
+++ b/devices/gdevfax.c
@@ -27,9 +27,23 @@ static dev_proc_print_page(faxg4_print_page);
/* Define procedures that adjust the paper size. */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+fax_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, gdev_prn_open);
+ set_dev_proc(dev, get_params, gdev_fax_get_params);
+ set_dev_proc(dev, put_params, gdev_fax_put_params);
+
+ return 0;
+}
+
const gx_device_procs gdev_fax_std_procs =
- prn_params_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gdev_fax_get_params, gdev_fax_put_params);
+ devprocs_initialize(fax_initialize);
#define FAX_DEVICE(dname, print_page)\
{\
diff --git a/devices/gdevfpng.c b/devices/gdevfpng.c
index 81fd7b49a..0cc4fd701 100644
--- a/devices/gdevfpng.c
+++ b/devices/gdevfpng.c
@@ -107,78 +107,24 @@ fpng_dev_spec_op(gx_device *pdev, int dev_spec_op, void *data, int size)
/* 24-bit color. */
/* Since the print_page doesn't alter the device, this device can print in the background */
-static const gx_device_procs fpng_procs =
+static int
+fpng_initialize(gx_device *dev)
{
- gdev_prn_open,
- NULL, /* get_initial_matrix */
- NULL, /* sync_output */
- gdev_prn_bg_output_page,
- gdev_prn_close,
- gx_default_rgb_map_rgb_color,
- gx_default_rgb_map_color_rgb,
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- NULL, /* get_bits */
- fpng_get_params,
- fpng_put_params,
- NULL, /* map_cmyk_color */
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device,
- NULL, /* get_alpha_bits */
- NULL, /* copy_alpha */
- NULL, /* get_band */
- NULL, /* copy_rop */
- NULL, /* fill_path */
- NULL, /* stroke_path */
- NULL, /* fill_mask */
- NULL, /* fill_trapezoid */
- NULL, /* fill_parallelogram */
- NULL, /* fill_triangle */
- NULL, /* draw_thin_line */
- NULL, /* begin_image */
- NULL, /* image_data */
- NULL, /* end_image */
- NULL, /* strip_tile_rectangle */
- NULL, /* strip_copy_rop, */
- NULL, /* get_clipping_box */
- NULL, /* begin_typed_image */
- NULL, /* get_bits_rectangle */
- NULL, /* map_color_rgb_alpha */
- NULL, /* create_compositor */
- NULL, /* get_hardware_params */
- NULL, /* text_begin */
- NULL, /* initialize */
- NULL, /* begin_transparency_group */
- NULL, /* end_transparency_group */
- NULL, /* begin_transparency_mask */
- NULL, /* end_transparency_mask */
- NULL, /* discard_transparency_layer */
- NULL, /* get_color_mapping_procs */
- NULL, /* get_color_comp_index */
- NULL, /* encode_color */
- NULL, /* decode_color */
- NULL, /* pattern_manage */
- NULL, /* fill_rectangle_hl_color */
- NULL, /* include_color_space */
- NULL, /* fill_linear_color_scanline */
- NULL, /* fill_linear_color_trapezoid */
- NULL, /* fill_linear_color_triangle */
- NULL, /* update_spot_equivalent_colors */
- NULL, /* ret_devn_params */
- NULL, /* fillpage */
- NULL, /* push_transparency_state */
- NULL, /* pop_transparency_state */
- NULL, /* put_image */
- fpng_dev_spec_op, /* dev_spec_op */
- NULL, /* copy plane */
- gx_default_get_profile, /* get_profile */
- gx_default_set_graphics_type_tag /* set_graphics_type_tag */
-};
+ int code = gdev_prn_initialize_rgb_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_params, fpng_get_params);
+ set_dev_proc(dev, put_params, fpng_put_params);
+ set_dev_proc(dev, dev_spec_op, fpng_dev_spec_op);
+
+ return 0;
+}
+
+static const gx_device_procs fpng_procs =
+ devprocs_initialize(fpng_initialize);
+
const gx_device_fpng gs_fpng_device =
{prn_device_body(gx_device_fpng, fpng_procs, "fpng",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
diff --git a/devices/gdevhl7x.c b/devices/gdevhl7x.c
index c2f1eaa1c..bebfc78d3 100644
--- a/devices/gdevhl7x.c
+++ b/devices/gdevhl7x.c
@@ -248,9 +248,22 @@ static dev_proc_close_device(hl7x0_close);
static dev_proc_print_page(hl720_print_page);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+hl7x0_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, hl7x0_open);
+ set_dev_proc(dev, close_device, hl7x0_close);
+
+ return 0;
+}
+
static const gx_device_procs prn_hl_procs =
- prn_params_procs(hl7x0_open, gdev_prn_bg_output_page, hl7x0_close,
- gdev_prn_get_params, gdev_prn_put_params);
+ devprocs_initialize(hl7x0_initialize);
const gx_device_printer far_data gs_hl7x0_device =
prn_device(prn_hl_procs, "hl7x0",
diff --git a/devices/gdevicov.c b/devices/gdevicov.c
index 91e98d6ea..765e0fc08 100644
--- a/devices/gdevicov.c
+++ b/devices/gdevicov.c
@@ -167,29 +167,7 @@ static int cov_write_page_ink(gx_device_printer *pdev, gp_file *file)
}
static const gx_device_procs cov_procs =
-{
- gdev_prn_open,
- NULL, /* get_initial_matrix */
- NULL, /* sync_output */
- /* Since the print_page doesn't alter the device, this device can print in the background */
- gdev_prn_bg_output_page,
- gdev_prn_close,
- NULL, /* map_rgb_color */
- cmyk_8bit_map_color_rgb,
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- NULL, /* get_bits */
- gdev_prn_get_params,
- gdev_prn_put_params,
- cmyk_8bit_map_cmyk_color,
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device
-};
+ devprocs_initialize(gdev_prn_initialize_cmyk8_bg);
const gx_device_printer gs_inkcov_device = prn_device(
cov_procs, "inkcov",
@@ -204,4 +182,3 @@ const gx_device_printer gs_ink_cov_device = prn_device(
75, 75, /* dpi */
0, 0, 0, 0, /* margins */
32, cov_write_page_ink);
-
diff --git a/devices/gdevifno.c b/devices/gdevifno.c
index 22d5837fd..7c1496e07 100644
--- a/devices/gdevifno.c
+++ b/devices/gdevifno.c
@@ -81,10 +81,24 @@ gs_private_st_suffix_add1_final(st_inferno_device, inferno_device,
"inferno_device", inferno_device_enum_ptrs, inferno_device_reloc_ptrs,
gx_device_finalize, st_device_printer, p9color);
+static int
+inferno_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, inferno_open);
+ set_dev_proc(dev, close_device, inferno_close);
+ set_dev_proc(dev, map_rgb_color, inferno_rgb2cmap);
+ set_dev_proc(dev, map_color_rgb, inferno_cmap2rgb);
+
+ return 0;
+}
+
static const gx_device_procs inferno_procs =
- prn_color_params_procs(inferno_open, gdev_prn_output_page, inferno_close,
- inferno_rgb2cmap, inferno_cmap2rgb,
- gdev_prn_get_params, gdev_prn_put_params);
+ devprocs_initialize(inferno_initialize);
inferno_device far_data gs_inferno_device =
{ prn_device_stype_body(inferno_device, inferno_procs, "inferno",
diff --git a/devices/gdevijs.c b/devices/gdevijs.c
index cdb861436..6aab72371 100644
--- a/devices/gdevijs.c
+++ b/devices/gdevijs.c
@@ -100,52 +100,8 @@ static dev_proc_fill_mask(gsijs_fill_mask);
static dev_proc_fill_path(gsijs_fill_path);
static dev_proc_stroke_path(gsijs_stroke_path);
-static const gx_device_procs gsijs_procs = {
- gsijs_open,
- NULL, /* get_initial_matrix */
- NULL, /* sync_output */
- gsijs_output_page,
- gsijs_close,
- gx_default_rgb_map_rgb_color,
- gx_default_rgb_map_color_rgb,
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- NULL, /* get_bits */
- gsijs_get_params,
- gsijs_put_params,
- NULL, /* map_cmyk_color */
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device,
- NULL, /* get_alpha_bits */
- NULL, /* copy_alpha */
- NULL, /* get_band */
- NULL, /* copy_rop */
- NULL, /* fill_path */
- NULL, /* stroke_path */
- NULL, /* fill_mask */
- NULL, /* fill_trapezoid */
- NULL, /* fill_parallelogram */
- NULL, /* fill_triangle */
- NULL, /* draw_thin_line */
- NULL, /* begin_image */
- NULL, /* image_data */
- NULL, /* end_image */
- NULL, /* strip_tile_rectangle */
- NULL, /* strip_copy_rop, */
- NULL, /* get_clipping_box */
- NULL, /* begin_typed_image */
- NULL, /* get_bits_rectangle */
- NULL, /* map_color_rgb_alpha */
- NULL, /* create_compositor */
- NULL, /* get_hardware_params */
- NULL, /* text_begin */
- gsijs_initialize
-};
+static const gx_device_procs gsijs_procs =
+ devprocs_initialize(gsijs_initialize);
typedef struct gx_device_ijs_s gx_device_ijs;
@@ -938,6 +894,14 @@ gsijs_initialize(gx_device *dev)
if(code < 0)
return code;
+ set_dev_proc(dev, open_device, gsijs_open);
+ set_dev_proc(dev, output_page, gsijs_output_page);
+ set_dev_proc(dev, close_device, gsijs_close);
+ set_dev_proc(dev, map_rgb_color, gx_default_rgb_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gx_default_rgb_map_color_rgb);
+ set_dev_proc(dev, get_params, gsijs_get_params);
+ set_dev_proc(dev, put_params, gsijs_put_params);
+
if (!ijsdev->ColorSpace) {
ijsdev->ColorSpace = gs_malloc(ijsdev->memory, sizeof(rgb), 1,
"gsijs_initialize");
diff --git a/devices/gdevimgn.c b/devices/gdevimgn.c
index 1abde2944..16a0b19d6 100644
--- a/devices/gdevimgn.c
+++ b/devices/gdevimgn.c
@@ -228,8 +228,22 @@ static dev_proc_open_device(imagen_prn_open);
static dev_proc_close_device(imagen_prn_close);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+imagen_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, imagen_prn_open);
+ set_dev_proc(dev, close_device, imagen_prn_close);
+
+ return 0;
+}
+
gx_device_procs imagen_procs =
- prn_procs(imagen_prn_open, gdev_prn_bg_output_page, imagen_prn_close);
+ devprocs_initialize(imagen_initialize);
#define ppdev ((gx_device_printer *)pdev)
diff --git a/devices/gdevjpeg.c b/devices/gdevjpeg.c
index eee3abd0d..5c50163f5 100644
--- a/devices/gdevjpeg.c
+++ b/devices/gdevjpeg.c
@@ -63,30 +63,23 @@ static dev_proc_map_cmyk_color(jpegcmyk_map_cmyk_color);
/* 24-bit color */
-static const gx_device_procs jpeg_procs =
+static int
+jpeg_initialize(gx_device *dev)
{
- gdev_prn_open,
- jpeg_get_initial_matrix, /* get_initial_matrix */
- NULL, /* sync_output */
-/* Since the print_page doesn't alter the device, this device can print in the background */
- gdev_prn_bg_output_page,
- gdev_prn_close,
- gx_default_rgb_map_rgb_color,/* map_rgb_color */
- gx_default_rgb_map_color_rgb,
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- NULL, /* get_bits */
- jpeg_get_params,
- jpeg_put_params,
- NULL,
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device
-};
+ int code = gdev_prn_initialize_rgb_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_initial_matrix, jpeg_get_initial_matrix);
+ set_dev_proc(dev, get_params, jpeg_get_params);
+ set_dev_proc(dev, put_params, jpeg_put_params);
+
+ return 0;
+}
+
+static const gx_device_procs jpeg_procs =
+ devprocs_initialize(jpeg_initialize);
const gx_device_jpeg gs_jpeg_device =
{prn_device_std_body(gx_device_jpeg, jpeg_procs, "jpeg",
@@ -101,30 +94,23 @@ const gx_device_jpeg gs_jpeg_device =
/* 8-bit gray */
-static const gx_device_procs jpeggray_procs =
+static int
+jpeggray_initialize(gx_device *dev)
{
- gdev_prn_open,
- jpeg_get_initial_matrix, /* get_initial_matrix */
- NULL, /* sync_output */
-/* Since the print_page doesn't alter the device, this device can print in the background */
- gdev_prn_bg_output_page,
- gdev_prn_close,
- gx_default_gray_map_rgb_color,/* map_rgb_color */
- gx_default_gray_map_color_rgb,
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- NULL, /* get_bits */
- jpeg_get_params,
- jpeg_put_params,
- NULL,
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device
-};
+ int code = gdev_prn_initialize_gray_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_initial_matrix, jpeg_get_initial_matrix);
+ set_dev_proc(dev, get_params, jpeg_get_params);
+ set_dev_proc(dev, put_params, jpeg_put_params);
+
+ return 0;
+}
+
+static const gx_device_procs jpeggray_procs =
+ devprocs_initialize(jpeggray_initialize);
const gx_device_jpeg gs_jpeggray_device =
{prn_device_body(gx_device_jpeg, jpeggray_procs, "jpeggray",
@@ -138,31 +124,28 @@ const gx_device_jpeg gs_jpeggray_device =
{ 0.0, 0.0 }, /* translation 0 */
GX_DOWNSCALER_PARAMS_DEFAULTS
};
+
/* 32-bit CMYK */
+static int
+jpegcmyk_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_initial_matrix, jpeg_get_initial_matrix);
+ set_dev_proc(dev, map_color_rgb, jpegcmyk_map_color_rgb);
+ set_dev_proc(dev, get_params, jpeg_get_params);
+ set_dev_proc(dev, put_params, jpeg_put_params);
+ set_dev_proc(dev, map_cmyk_color, jpegcmyk_map_cmyk_color);
+
+ return 0;
+}
+
static const gx_device_procs jpegcmyk_procs =
-{ gdev_prn_open,
- gx_default_get_initial_matrix,
-/* Since the print_page doesn't alter the device, this device can print in the background */
- NULL, /* sync_output */
- gdev_prn_bg_output_page,
- gdev_prn_close,
- NULL,
- jpegcmyk_map_color_rgb,
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- NULL, /* get_bits */
- jpeg_get_params,
- jpeg_put_params,
- jpegcmyk_map_cmyk_color,
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device /* get_page_device */
-};
+ devprocs_initialize(jpegcmyk_initialize);
const gx_device_jpeg gs_jpegcmyk_device =
{prn_device_std_body(gx_device_jpeg, jpegcmyk_procs, "jpegcmyk",
@@ -578,4 +561,3 @@ jpeg_print_page(gx_device_printer * pdev, gp_file * prn_stream)
gs_free_object(mem, in, "jpeg_print_page(in)");
return code;
}
-
diff --git a/devices/gdevl31s.c b/devices/gdevl31s.c
index 9a32d434e..049d39029 100644
--- a/devices/gdevl31s.c
+++ b/devices/gdevl31s.c
@@ -79,9 +79,21 @@ static dev_proc_print_page_copies(lj3100sw_print_page_copies);
static dev_proc_close_device(lj3100sw_close);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+lj3100sw_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, close_device, lj3100sw_close);
+
+ return 0;
+}
+
static gx_device_procs prn_lj3100sw_procs =
- prn_params_procs(gdev_prn_open, gdev_prn_bg_output_page, lj3100sw_close,
- gdev_prn_get_params, gdev_prn_put_params);
+ devprocs_initialize(lj3100sw_initialize);
/* workaround to emulate the missing prn_device_margins_copies macro */
#define gx_default_print_page_copies lj3100sw_print_page_copies
diff --git a/devices/gdevlj56.c b/devices/gdevlj56.c
index ed022c0c3..dfca02c98 100644
--- a/devices/gdevlj56.c
+++ b/devices/gdevlj56.c
@@ -42,8 +42,22 @@ static dev_proc_close_device(ljet5_close);
static dev_proc_print_page(ljet5_print_page);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+ljet5_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, ljet5_open);
+ set_dev_proc(dev, close_device, ljet5_close);
+
+ return 0;
+}
+
static const gx_device_procs ljet5_procs =
-prn_procs(ljet5_open, gdev_prn_bg_output_page, ljet5_close);
+ devprocs_initialize(ljet5_initialize);
const gx_device_printer gs_lj5mono_device =
prn_device(ljet5_procs, "lj5mono",
@@ -53,10 +67,22 @@ prn_device(ljet5_procs, "lj5mono",
1, ljet5_print_page);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+lj5gray_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_gray_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, ljet5_open);
+ set_dev_proc(dev, close_device, ljet5_close);
+
+ return 0;
+}
+
static const gx_device_procs lj5gray_procs =
-prn_color_procs(ljet5_open, gdev_prn_bg_output_page, ljet5_close,
- gx_default_gray_map_rgb_color,
- gx_default_gray_map_color_rgb);
+ devprocs_initialize(lj5gray_initialize);
const gx_device_printer gs_lj5gray_device = {
prn_device_body(gx_device_printer, lj5gray_procs, "lj5gray",
diff --git a/devices/gdevlxm.c b/devices/gdevlxm.c
index 4f9bfca17..757ed9524 100644
--- a/devices/gdevlxm.c
+++ b/devices/gdevlxm.c
@@ -40,9 +40,22 @@ static dev_proc_put_params(lxm_put_params);
/* set up dispatch table. I follow gdevdjet in using gdev_prn_output_page */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+lxm5700m_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_params, lxm_get_params);
+ set_dev_proc(dev, put_params, lxm_put_params);
+
+ return 0;
+}
+
static const gx_device_procs lxm5700m_procs =
- prn_params_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- lxm_get_params, lxm_put_params);
+ devprocs_initialize(lxm5700m_initialize);
/* The device descriptors */
diff --git a/devices/gdevmgr.c b/devices/gdevmgr.c
index 40ff63733..5ef6b2700 100644
--- a/devices/gdevmgr.c
+++ b/devices/gdevmgr.c
@@ -66,17 +66,70 @@ static dev_proc_print_page(cmgrN_print_page);
/* The device procedures */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+mgr_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, gdev_mgr_open);
+
+ return 0;
+}
+
+static int
+mgrN_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_gray_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, gdev_mgr_open);
+
+ return 0;
+}
+
+static int
+cmgr4_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, gdev_mgr_open);
+ set_dev_proc(dev, map_rgb_color, pc_4bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, pc_4bit_map_color_rgb);
+
+ return 0;
+}
+
+static int
+cmgr8_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, gdev_mgr_open);
+ set_dev_proc(dev, map_rgb_color, mgr_8bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, mgr_8bit_map_color_rgb);
+
+ return 0;
+}
+
static gx_device_procs mgr_procs =
- prn_procs(gdev_mgr_open, gdev_prn_bg_output_page, gdev_prn_close);
+ devprocs_initialize(mgr_initialize);
static gx_device_procs mgrN_procs =
- prn_color_procs(gdev_mgr_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_gray_map_rgb_color, gx_default_gray_map_color_rgb);
+ devprocs_initialize(mgrN_initialize);
static gx_device_procs cmgr4_procs =
- prn_color_procs(gdev_mgr_open, gdev_prn_bg_output_page, gdev_prn_close,
- pc_4bit_map_rgb_color, pc_4bit_map_color_rgb);
+ devprocs_initialize(cmgr4_initialize);
static gx_device_procs cmgr8_procs =
- prn_color_procs(gdev_mgr_open, gdev_prn_bg_output_page, gdev_prn_close,
- mgr_8bit_map_rgb_color, mgr_8bit_map_color_rgb);
+ devprocs_initialize(cmgr8_initialize);
/* The device descriptors themselves */
gx_device_mgr far_data gs_mgrmono_device =
diff --git a/devices/gdevmiff.c b/devices/gdevmiff.c
index 7919f7a5e..255f3b1fa 100644
--- a/devices/gdevmiff.c
+++ b/devices/gdevmiff.c
@@ -28,8 +28,8 @@ static dev_proc_print_page(miff24_print_page);
/* Since the print_page doesn't alter the device, this device can print in the background */
static const gx_device_procs miff24_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_rgb_map_rgb_color, gx_default_rgb_map_color_rgb);
+ devprocs_initialize(gdev_prn_initialize_rgb_bg);
+
const gx_device_printer gs_miff24_device =
prn_device(miff24_procs, "miff24",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
diff --git a/devices/gdevn533.c b/devices/gdevn533.c
index aa4ebef3b..1fbf88cb7 100644
--- a/devices/gdevn533.c
+++ b/devices/gdevn533.c
@@ -46,8 +46,23 @@ static dev_proc_open_device(nwp533_open);
static dev_proc_print_page(nwp533_print_page);
static dev_proc_close_device(nwp533_close);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+nwp533_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, nwp533_open);
+ set_dev_proc(dev, output_page, gdev_prn_bg_output_page_seekable);
+ set_dev_proc(dev, close_device, nwp533_close);
+
+ return 0;
+}
+
static gx_device_procs nwp533_procs =
- prn_procs(nwp533_open, gdev_prn_bg_output_page_seekable, nwp533_close);
+ devprocs_initialize(mwp533_initialize);
const gx_device_printer far_data gs_nwp533_device =
prn_device(nwp533_procs, "nwp533",
diff --git a/devices/gdevocr.c b/devices/gdevocr.c
index cd1efeb14..6557faf71 100644
--- a/devices/gdevocr.c
+++ b/devices/gdevocr.c
@@ -50,12 +50,25 @@ struct gx_device_ocr_s {
};
/* 8-bit gray bitmap -> UTF8 OCRd text */
+static int
+ocr_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_gray_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, ocr_open);
+ set_dev_proc(dev, close_device, ocr_close);
+ set_dev_proc(dev, get_params, ocr_get_params);
+ set_dev_proc(dev, put_params, ocr_put_params);
+
+ return 0;
+}
static const gx_device_procs ocr_procs =
-prn_color_params_procs(ocr_open, gdev_prn_bg_output_page, ocr_close,
- gx_default_gray_map_rgb_color,
- gx_default_gray_map_color_rgb,
- ocr_get_params, ocr_put_params);
+ devprocs_initialize(ocr_initialize);
+
const gx_device_ocr gs_ocr_device =
{
prn_device_body(gx_device_ocr, ocr_procs, "ocr",
@@ -67,12 +80,25 @@ const gx_device_ocr gs_ocr_device =
};
/* 8-bit gray bitmap -> HTML OCRd text */
+static int
+hocr_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_gray_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, ocr_open);
+ set_dev_proc(dev, close_device, hocr_close);
+ set_dev_proc(dev, get_params, ocr_get_params);
+ set_dev_proc(dev, put_params, ocr_put_params);
+
+ return 0;
+}
static const gx_device_procs hocr_procs =
-prn_color_params_procs(ocr_open, gdev_prn_bg_output_page, hocr_close,
- gx_default_gray_map_rgb_color,
- gx_default_gray_map_color_rgb,
- ocr_get_params, ocr_put_params);
+ devprocs_initialize(hocr_initialize);
+
const gx_device_ocr gs_hocr_device =
{
prn_device_body(gx_device_ocr, hocr_procs, "hocr",
diff --git a/devices/gdevpbm.c b/devices/gdevpbm.c
index d5e0736e4..46c92064c 100644
--- a/devices/gdevpbm.c
+++ b/devices/gdevpbm.c
@@ -140,35 +140,121 @@ static dev_proc_print_page(pnmcmyk_print_page);
/* The device procedures */
-/* See gdevprn.h for the template for the following. */
-#define pgpm_procs(p_open, p_get_params, p_map_rgb_color, p_map_color_rgb, p_map_cmyk_color) {\
- p_open, NULL, NULL, ppm_output_page, gdev_prn_close,\
- p_map_rgb_color, p_map_color_rgb, NULL, NULL, NULL, NULL, NULL, NULL,\
- p_get_params, ppm_put_params,\
- p_map_cmyk_color, NULL, NULL, NULL, gx_page_device_get_page_device\
+static int
+pbm_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, put_params, ppm_put_params);
+ set_dev_proc(dev, output_page, ppm_output_page);
+
+ return 0;
+}
+
+static int
+ppm_initialize(gx_device *dev)
+{
+ int code = pbm_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_params, ppm_get_params);
+ set_dev_proc(dev, map_rgb_color, gx_default_rgb_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, ppm_map_color_rgb);
+ set_dev_proc(dev, open_device, ppm_open);
+
+ return 0;
+}
+
+static int
+pgm_initialize(gx_device *dev)
+{
+ int code = pbm_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, pgm_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, pgm_map_color_rgb);
+ set_dev_proc(dev, open_device, ppm_open);
+
+ return 0;
+}
+
+static int
+pnm_initialize(gx_device *dev)
+{
+ int code = ppm_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, ppm_map_rgb_color);
+
+ return 0;
+}
+
+static int
+pkm_initialize(gx_device *dev)
+{
+ int code = ppm_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, NULL);
+ set_dev_proc(dev, map_color_rgb, cmyk_1bit_map_color_rgb);
+ set_dev_proc(dev, map_cmyk_color, cmyk_1bit_map_cmyk_color);
+
+ return 0;
+}
+
+static int
+pam_initialize(gx_device *dev)
+{
+ int code = ppm_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, NULL);
+ set_dev_proc(dev, map_color_rgb, cmyk_8bit_map_color_rgb);
+ set_dev_proc(dev, map_cmyk_color, cmyk_8bit_map_cmyk_color);
+
+ return 0;
+}
+
+static int
+pnmcmyk_initialize(gx_device *dev)
+{
+ int code = pam_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pnmcmyk_open);
+
+ return 0;
}
static const gx_device_procs pbm_procs =
- pgpm_procs(gdev_prn_open, gdev_prn_get_params,
- gdev_prn_map_rgb_color, gdev_prn_map_color_rgb, NULL);
+ devprocs_initialize(pbm_initialize);
static const gx_device_procs pgm_procs =
- pgpm_procs(ppm_open, gdev_prn_get_params,
- pgm_map_rgb_color, pgm_map_color_rgb, NULL);
+ devprocs_initialize(pgm_initialize);
static const gx_device_procs ppm_procs =
- pgpm_procs(ppm_open, ppm_get_params,
- gx_default_rgb_map_rgb_color, ppm_map_color_rgb, NULL);
+ devprocs_initialize(ppm_initialize);
static const gx_device_procs pnm_procs =
- pgpm_procs(ppm_open, ppm_get_params,
- ppm_map_rgb_color, ppm_map_color_rgb, NULL);
+ devprocs_initialize(pnm_initialize);
static const gx_device_procs pkm_procs =
- pgpm_procs(ppm_open, ppm_get_params,
- NULL, cmyk_1bit_map_color_rgb, cmyk_1bit_map_cmyk_color);
+ devprocs_initialize(pkm_initialize);
static const gx_device_procs pam_procs =
- pgpm_procs(ppm_open, ppm_get_params,
- NULL, cmyk_8bit_map_color_rgb, cmyk_8bit_map_cmyk_color);
+ devprocs_initialize(pam_initialize);
static const gx_device_procs pnmcmyk_procs =
- pgpm_procs(pnmcmyk_open, ppm_get_params,
- NULL, cmyk_8bit_map_color_rgb, cmyk_8bit_map_cmyk_color);
+ devprocs_initialize(pnmcmyk_initialize);
/* The device descriptors themselves */
const gx_device_pbm gs_pbm_device =
diff --git a/devices/gdevpcx.c b/devices/gdevpcx.c
index 3486f9800..53c71f7cf 100644
--- a/devices/gdevpcx.c
+++ b/devices/gdevpcx.c
@@ -37,8 +37,8 @@ static dev_proc_print_page(pcxmono_print_page);
/* Use the default RGB->color map, so we get black=0, white=1. */
/* Since the print_page doesn't alter the device, this device can print in the background */
static const gx_device_procs pcxmono_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_map_rgb_color, gx_default_map_color_rgb);
+ devprocs_initialize(gdev_prn_initialize_mono_bg);
+
const gx_device_printer gs_pcxmono_device =
prn_device(pcxmono_procs, "pcxmono",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -52,8 +52,8 @@ static dev_proc_print_page(pcx256_print_page);
/* Since the print_page doesn't alter the device, this device can print in the background */
static const gx_device_procs pcxgray_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_gray_map_rgb_color, gx_default_gray_map_color_rgb);
+ devprocs_initialize(gdev_prn_initialize_gray_bg);
+
const gx_device_printer gs_pcxgray_device =
{prn_device_body(gx_device_printer, pcxgray_procs, "pcxgray",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -67,9 +67,23 @@ const gx_device_printer gs_pcxgray_device =
static dev_proc_print_page(pcx16_print_page);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+pcx16_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return 0;
+
+ set_dev_proc(dev, map_rgb_color, pc_4bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, pc_4bit_map_color_rgb);
+
+ return 0;
+}
+
static const gx_device_procs pcx16_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- pc_4bit_map_rgb_color, pc_4bit_map_color_rgb);
+ devprocs_initialize(pcx16_initialize);
+
const gx_device_printer gs_pcx16_device =
{prn_device_body(gx_device_printer, pcx16_procs, "pcx16",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -82,9 +96,23 @@ const gx_device_printer gs_pcx16_device =
/* (Uses a fixed palette of 3,3,2 bits.) */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+pcx256_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return 0;
+
+ set_dev_proc(dev, map_rgb_color, pc_8bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, pc_8bit_map_color_rgb);
+
+ return 0;
+}
+
static const gx_device_procs pcx256_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- pc_8bit_map_rgb_color, pc_8bit_map_color_rgb);
+ devprocs_initialize(pcx256_initialize);
+
const gx_device_printer gs_pcx256_device =
{prn_device_body(gx_device_printer, pcx256_procs, "pcx256",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -99,8 +127,8 @@ static dev_proc_print_page(pcx24b_print_page);
/* Since the print_page doesn't alter the device, this device can print in the background */
static const gx_device_procs pcx24b_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_rgb_map_rgb_color, gx_default_rgb_map_color_rgb);
+ devprocs_initialize(gdev_prn_initialize_rgb_bg);
+
const gx_device_printer gs_pcx24b_device =
prn_device(pcx24b_procs, "pcx24b",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -113,29 +141,8 @@ prn_device(pcx24b_procs, "pcx24b",
static dev_proc_print_page(pcxcmyk_print_page);
static const gx_device_procs pcxcmyk_procs =
-{
- gdev_prn_open,
- NULL, /* get_initial_matrix */
- NULL, /* sync_output */
-/* Since the print_page doesn't alter the device, this device can print in the background */
- gdev_prn_bg_output_page,
- gdev_prn_close,
- NULL, /* map_rgb_color */
- cmyk_1bit_map_color_rgb,
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- NULL, /* get_bits */
- gdev_prn_get_params,
- gdev_prn_put_params,
- cmyk_1bit_map_cmyk_color,
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device
-};
+ devprocs_initialize(gdev_prn_initialize_cmyk1_bg);
+
const gx_device_printer gs_pcxcmyk_device =
{prn_device_body(gx_device_printer, pcxcmyk_procs, "pcxcmyk",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
diff --git a/devices/gdevpdfimg.c b/devices/gdevpdfimg.c
index 7d04755b5..420cad2b7 100644
--- a/devices/gdevpdfimg.c
+++ b/devices/gdevpdfimg.c
@@ -57,15 +57,25 @@ int PCLm_close(gx_device * pdev);
/* ------ The pdfimage8 device ------ */
+static int
+pdfimage8_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_gray(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pdf_image_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, pdf_image_close);
+ set_dev_proc(dev, get_params, pdf_image_get_params_downscale);
+ set_dev_proc(dev, put_params, pdf_image_put_params_downscale);
+
+ return 0;
+}
static const gx_device_procs pdfimage8_procs =
-prn_color_params_procs(pdf_image_open,
- gdev_prn_output_page_seekable,
- pdf_image_close,
- gx_default_gray_map_rgb_color,
- gx_default_gray_map_color_rgb,
- pdf_image_get_params_downscale,
- pdf_image_put_params_downscale);
+ devprocs_initialize(pdfimage8_initialize);
const gx_device_pdf_image gs_pdfimage8_device = {
prn_device_body(gx_device_pdf_image,
@@ -86,15 +96,25 @@ const gx_device_pdf_image gs_pdfimage8_device = {
};
/* ------ The pdfimage24 device ------ */
+static int
+pdfimage24_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_rgb(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pdf_image_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, pdf_image_close);
+ set_dev_proc(dev, get_params, pdf_image_get_params_downscale);
+ set_dev_proc(dev, put_params, pdf_image_put_params_downscale);
+
+ return 0;
+}
static const gx_device_procs pdfimage24_procs =
-prn_color_params_procs(pdf_image_open,
- gdev_prn_output_page_seekable,
- pdf_image_close,
- gx_default_rgb_map_rgb_color,
- gx_default_rgb_map_color_rgb,
- pdf_image_get_params_downscale,
- pdf_image_put_params_downscale);
+ devprocs_initialize(pdfimage24_initialize);
const gx_device_pdf_image gs_pdfimage24_device = {
prn_device_body(gx_device_pdf_image,
@@ -115,13 +135,25 @@ const gx_device_pdf_image gs_pdfimage24_device = {
};
/* ------ The pdfimage32 device ------ */
+static int
+pdfimage32_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_cmyk8(dev);
-static const gx_device_procs pdfimage32_procs = {
- pdf_image_open, NULL, NULL, gdev_prn_output_page_seekable, pdf_image_close,
- NULL, cmyk_8bit_map_color_cmyk, NULL, NULL, NULL, NULL, NULL, NULL,
- pdf_image_get_params_downscale_cmyk, pdf_image_put_params_downscale_cmyk,
- cmyk_8bit_map_cmyk_color, NULL, NULL, NULL, gx_page_device_get_page_device
-};
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pdf_image_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, pdf_image_close);
+ set_dev_proc(dev, get_params, pdf_image_get_params_downscale_cmyk);
+ set_dev_proc(dev, put_params, pdf_image_put_params_downscale_cmyk);
+
+ return 0;
+}
+
+static const gx_device_procs pdfimage32_procs =
+ devprocs_initialize(pdfimage32_initialize);
const gx_device_pdf_image gs_pdfimage32_device = {
prn_device_body(gx_device_pdf_image,
@@ -1099,17 +1131,27 @@ pdf_image_put_params_downscale_cmyk_ets(gx_device * dev, gs_param_list * plist)
}
/* ------ The PCLm device ------ */
+static int
+PCLm_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_rgb(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, PCLm_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, PCLm_close);
+ set_dev_proc(dev, get_params, pdf_image_get_params_downscale);
+ set_dev_proc(dev, put_params, pdf_image_put_params_downscale);
+
+ return 0;
+}
static dev_proc_print_page(PCLm_print_page);
static const gx_device_procs PCLm_procs =
-prn_color_params_procs(PCLm_open,
- gdev_prn_output_page_seekable,
- PCLm_close,
- gx_default_rgb_map_rgb_color,
- gx_default_rgb_map_color_rgb,
- pdf_image_get_params_downscale,
- pdf_image_put_params_downscale);
+ devprocs_initialize(PCLm_initialize);
const gx_device_pdf_image gs_PCLm_device = {
prn_device_body(gx_device_pdf_image,
diff --git a/devices/gdevpdfocr.c b/devices/gdevpdfocr.c
index afc73ff2a..aea5010f2 100644
--- a/devices/gdevpdfocr.c
+++ b/devices/gdevpdfocr.c
@@ -142,15 +142,25 @@ pdfocr_get_params_downscale(gx_device * dev, gs_param_list * plist)
}
/* ------ The pdfocr8 device ------ */
+static int
+pdfocr8_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_gray(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pdf_ocr_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, pdf_ocr_close);
+ set_dev_proc(dev, get_params, pdfocr_get_params_downscale);
+ set_dev_proc(dev, put_params, pdfocr_put_params_downscale);
+
+ return 0;
+}
static const gx_device_procs pdfocr8_procs =
-prn_color_params_procs(pdf_ocr_open,
- gdev_prn_output_page_seekable,
- pdf_ocr_close,
- gx_default_gray_map_rgb_color,
- gx_default_gray_map_color_rgb,
- pdfocr_get_params_downscale,
- pdfocr_put_params_downscale);
+ devprocs_initialize(pdfocr8_initialize);
const gx_device_pdf_image gs_pdfocr8_device = {
prn_device_body(gx_device_pdf_image,
@@ -171,15 +181,25 @@ const gx_device_pdf_image gs_pdfocr8_device = {
};
/* ------ The pdfocr24 device ------ */
+static int
+pdfocr24_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pdf_ocr_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, pdf_ocr_close);
+ set_dev_proc(dev, get_params, pdfocr_get_params_downscale);
+ set_dev_proc(dev, put_params, pdfocr_put_params_downscale);
+
+ return 0;
+}
static const gx_device_procs pdfocr24_procs =
-prn_color_params_procs(pdf_ocr_open,
- gdev_prn_output_page_seekable,
- pdf_ocr_close,
- gx_default_rgb_map_rgb_color,
- gx_default_rgb_map_color_rgb,
- pdfocr_get_params_downscale,
- pdfocr_put_params_downscale);
+ devprocs_initialize(pdfocr24_initialize);
const gx_device_pdf_image gs_pdfocr24_device = {
prn_device_body(gx_device_pdf_image,
@@ -200,13 +220,25 @@ const gx_device_pdf_image gs_pdfocr24_device = {
};
/* ------ The pdfocr32 device ------ */
+static int
+pdfocr32_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_cmyk8(dev);
-static const gx_device_procs pdfocr32_procs = {
- pdf_ocr_open, NULL, NULL, gdev_prn_output_page_seekable, pdf_ocr_close,
- NULL, cmyk_8bit_map_color_cmyk, NULL, NULL, NULL, NULL, NULL, NULL,
- pdfocr_get_params_downscale_cmyk, pdfocr_put_params_downscale_cmyk,
- cmyk_8bit_map_cmyk_color, NULL, NULL, NULL, gx_page_device_get_page_device
-};
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pdf_ocr_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, pdf_ocr_close);
+ set_dev_proc(dev, get_params, pdfocr_get_params_downscale_cmyk);
+ set_dev_proc(dev, put_params, pdfocr_put_params_downscale_cmyk);
+
+ return 0;
+}
+
+static const gx_device_procs pdfocr32_procs =
+ devprocs_initialize(pdfocr32_initialize);
const gx_device_pdf_image gs_pdfocr32_device = {
prn_device_body(gx_device_pdf_image,
diff --git a/devices/gdevpe.c b/devices/gdevpe.c
index b4d462f38..5a47397f0 100644
--- a/devices/gdevpe.c
+++ b/devices/gdevpe.c
@@ -50,22 +50,19 @@ dev_proc_close_device(pe_close);
dev_proc_fill_rectangle(pe_fill_rectangle);
dev_proc_copy_mono(pe_copy_mono);
-static gx_device_procs pe_procs =
-{ pe_open,
- NULL, /* get_initial_matrix */
- NULL, /* sync_output */
- NULL, /* output_page */
- pe_close,
- NULL, /* map_rgb_color */
- NULL, /* map_color_rgb */
- pe_fill_rectangle,
- NULL, /* tile_rectangle */
- pe_copy_mono,
- NULL /* copy_color */
-};
+static int
+pe_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, pe_open);
+ set_dev_proc(dev, close_device, pe_close);
+ set_dev_proc(dev, fill_rectangle, pe_fill_rectangle);
+ set_dev_proc(dev, copy_mono, pe_copy_mono);
+
+ return 0;
+}
gx_device_pe far_data gs_pe_device =
-{ std_device_std_body(gx_device_pe, &pe_procs, "pe",
+{ std_device_std_body(gx_device_pe, pe_initialize, "pe",
XSIZE, YSIZE, XPPI, YPPI),
{ 0 }, /* std_procs */
DEFAULT_ADDRESS, DEFAULT_REGISTERS
diff --git a/devices/gdevperm.c b/devices/gdevperm.c
index e8e65d1b3..98c4a191a 100644
--- a/devices/gdevperm.c
+++ b/devices/gdevperm.c
@@ -57,66 +57,26 @@ struct gx_device_perm_s {
};
typedef struct gx_device_perm_s gx_device_perm_t;
-static const gx_device_procs perm_procs = {
- gdev_prn_open,
- NULL,
-/* Since the print_page doesn't alter the device, this device can print in the background */
- NULL,
- gdev_prn_bg_output_page,
- gdev_prn_close,
- NULL,
- NULL,
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- NULL, /* get_bits */
- perm_get_params, /* get_params */
- perm_put_params, /* put_params */
- NULL, /* map_cmyk_color - not used */
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device, /* get_page_device */
- NULL, /* get_alpha_bits */
- NULL, /* copy_alpha */
- NULL, /* get_band */
- NULL, /* copy_rop */
- NULL, /* fill_path */
- NULL, /* stroke_path */
- NULL, /* fill_mask */
- NULL, /* fill_trapezoid */
- NULL, /* fill_parallelogram */
- NULL, /* fill_triangle */
- NULL, /* draw_thin_line */
- NULL, /* begin_image */
- NULL, /* image_data */
- NULL, /* end_image */
- NULL, /* strip_tile_rectangle */
- NULL, /* strip_copy_rop */
- NULL, /* get_clipping_box */
- NULL, /* begin_typed_image */
- NULL, /* get_bits_rectangle */
- NULL, /* map_color_rgb_alpha */
- NULL, /* create_compositor */
- NULL, /* get_hardware_params */
- NULL, /* text_begin */
- NULL, /* initialize */
- NULL, /* begin_transparency_group */
- NULL, /* end_transparency_group */
- NULL, /* begin_transparency_mask */
- NULL, /* end_transparency_mask */
- NULL, /* discard_transparency_layer */
- perm_get_color_mapping_procs, /* get_color_mapping_procs */
- perm_get_color_comp_index,
- perm_encode_color, /* encode_color */
- perm_decode_color /* decode_color */
+static int
+perm_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
-};
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_params, perm_get_params);
+ set_dev_proc(dev, put_params, perm_put_params);
+ set_dev_proc(dev, get_color_mapping_procs, perm_get_color_mapping_procs);
+ set_dev_proc(dev, get_color_comp_index, perm_get_color_comp_index);
+ set_dev_proc(dev, encode_color, perm_encode_color);
+ set_dev_proc(dev, decode_color, perm_decode_color);
+
+ return 0;
+}
const gx_device_perm_t gs_perm_device = {
- prn_device_body_extended(gx_device_perm_t, perm_procs, "permute",
+ prn_device_body_extended(gx_device_perm_t, perm_initialize, "permute",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS, 72, 72,
0, 0, 0, 0,
GX_DEVICE_COLOR_MAX_COMPONENTS, 4,
diff --git a/devices/gdevphex.c b/devices/gdevphex.c
index 7afc6ba3b..25efd75db 100644
--- a/devices/gdevphex.c
+++ b/devices/gdevphex.c
@@ -1007,19 +1007,27 @@ static const HFUNCS htable[ MAXHTONE ] = {
* The definition is based on GS macros, the only real stuff that we
* define here are the photoex_ functions.
*/
-static const gx_device_procs photoex_device_procs = prn_color_params_procs_enc_dec(
-
- photoex_open, /* Opens the device */
-/* Since the print_page doesn't alter the device, this device can print in the background */
- gdev_prn_bg_output_page,
- gdev_prn_close,
- photoex_map_rgb_color, /* Maps an RGB pixel to device colour */
- photoex_map_color_rgb, /* Maps device colour back to RGB */
- photoex_get_params, /* Gets device parameters */
- photoex_put_params, /* Puts device parameters */
- photoex_encode_color,
- photoex_decode_color
-);
+static int
+photoex_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, photoex_open);
+ set_dev_proc(dev, map_rgb_color, photoex_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, photoex_map_color_rgb);
+ set_dev_proc(dev, get_params, photoex_get_params);
+ set_dev_proc(dev, put_params, photoex_put_params);
+ set_dev_proc(dev, encode_color, photoex_encode_color);
+ set_dev_proc(dev, decode_color, photoex_decode_color);
+
+ return 0;
+}
+
+static const gx_device_procs photoex_device_procs =
+ devprocs_initialize(photoex_initialize);
/*
* Device descriptor structure - this is what GhostScript looks
diff --git a/devices/gdevpjet.c b/devices/gdevpjet.c
index 8df438f5d..6fa7e2a27 100644
--- a/devices/gdevpjet.c
+++ b/devices/gdevpjet.c
@@ -30,9 +30,23 @@ static dev_proc_print_page(paintjet_print_page);
static dev_proc_print_page(pjetxl_print_page);
static int pj_common_print_page(gx_device_printer *, gp_file *, int, const char *);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+paintjet_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, gdev_pcl_3bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gdev_pcl_3bit_map_color_rgb);
+
+ return 0;
+}
+
static gx_device_procs paintjet_procs =
- prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gdev_pcl_3bit_map_rgb_color, gdev_pcl_3bit_map_color_rgb);
+ devprocs_initialize(paintjet_initialize);
+
const gx_device_printer far_data gs_lj250_device =
prn_device(paintjet_procs, "lj250",
85, /* width_10ths, 8.5" */
@@ -49,8 +63,8 @@ const gx_device_printer far_data gs_paintjet_device =
3, paintjet_print_page);
/* Since the print_page doesn't alter the device, this device can print in the background */
static gx_device_procs pjetxl_procs =
- prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gdev_pcl_3bit_map_rgb_color, gdev_pcl_3bit_map_color_rgb);
+ devprocs_initialize(paintjet_initialize);
+
const gx_device_printer far_data gs_pjetxl_device =
prn_device(pjetxl_procs, "pjetxl",
85, /* width_10ths, 8.5" */
diff --git a/devices/gdevplan.c b/devices/gdevplan.c
index 0f1d07de3..9e100610c 100644
--- a/devices/gdevplan.c
+++ b/devices/gdevplan.c
@@ -77,89 +77,98 @@ static int planr_print_page(gx_device_printer * pdev, gp_file * pstream);
/* The device procedures */
-/* See gdevprn.h for the template for the following. */
-#define pgpm_procs(p_color_rgb, encode_color, decode_color) {\
- plan_open,\
- NULL, /* get_initial_matrix */ \
- NULL, /* sync output */ \
- /* Since the print_page doesn't alter the device, this device can print in the background */\
- gdev_prn_bg_output_page, \
- plan_close,\
- NULL, /* map_rgb_color */ \
- p_color_rgb, /* map_color_rgb */ \
- NULL, /* fill_rectangle */ \
- NULL, /* tile_rectangle */ \
- NULL, /* copy_mono */ \
- NULL, /* copy_color */ \
- NULL, /* draw_line */ \
- NULL, /* get_bits */ \
- gdev_prn_get_params, \
- gdev_prn_put_params,\
- NULL, /* map_cmyk_color */ \
- NULL, /* get_xfont_procs */ \
- NULL, /* get_xfont_device */ \
- NULL, /* map_rgb_alpha_color */ \
- gx_page_device_get_page_device, \
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- NULL, /* fill_path */\
- NULL, /* stroke_path */\
- NULL, /* fill_mask */\
- NULL, /* fill_trapezoid */\
- NULL, /* fill_parallelogram */\
- NULL, /* fill_triangle */\
- NULL, /* draw_thin_line */\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- NULL, /* initialize */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- NULL, /* get_color_mapping_procs */\
- NULL, /* get_color_comp_index */\
- encode_color, /* encode_color */\
- decode_color, /* decode_color */\
- NULL, /* pattern_manage */\
- NULL, /* fill_rectangle_hl_color */\
- NULL, /* include_color_space */\
- NULL, /* fill_linear_color_scanline */\
- NULL, /* fill_linear_color_trapezoid */\
- NULL, /* fill_linear_color_triangle */\
- NULL, /* update spot */\
- NULL, /* DevN params */\
- NULL, /* fill page */\
- NULL, /* push_transparency_state */\
- NULL, /* pop_transparency_state */\
- NULL, /* put_image */\
- NULL /* dev_spec_op */\
+static int
+plan_base_initialize(gx_device *dev,
+ dev_proc_map_color_rgb(map_color_rgb),
+ dev_proc_encode_color(encode_color),
+ dev_proc_decode_color(decode_color))
+{
+ int code = gdev_prn_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, plan_open);
+ set_dev_proc(dev, close_device, plan_close);
+ set_dev_proc(dev, map_color_rgb, map_color_rgb);
+ set_dev_proc(dev, get_page_device, gx_page_device_get_page_device);
+ set_dev_proc(dev, encode_color, encode_color);
+ set_dev_proc(dev, decode_color, decode_color);
+
+ return 0;
+}
+
+static int
+planm_initialize(gx_device *dev)
+{
+ return plan_base_initialize(dev,
+ gdev_prn_map_color_rgb,
+ gdev_prn_map_rgb_color,
+ gdev_prn_map_color_rgb);
}
static const gx_device_procs planm_procs =
- pgpm_procs(gdev_prn_map_color_rgb, gdev_prn_map_rgb_color, gdev_prn_map_color_rgb);
+ devprocs_initialize(planm_initialize);
+
+static int
+plang_initialize(gx_device *dev)
+{
+ return plan_base_initialize(dev,
+ plang_decode_color,
+ plang_encode_color,
+ plang_decode_color);
+}
+
static const gx_device_procs plang_procs =
- pgpm_procs(plang_decode_color, plang_encode_color, plang_decode_color);
+ devprocs_initialize(plang_initialize);
+
+static int
+plan_initialize(gx_device *dev)
+{
+ return plan_base_initialize(dev,
+ plan_decode_color,
+ gx_default_rgb_map_rgb_color,
+ plan_decode_color);
+}
+
static const gx_device_procs plan_procs =
- pgpm_procs(plan_decode_color, gx_default_rgb_map_rgb_color, plan_decode_color);
+ devprocs_initialize(plan_initialize);
+
+static int
+planc_initialize(gx_device *dev)
+{
+ return plan_base_initialize(dev,
+ planc_map_color_rgb,
+ planc_encode_color,
+ planc_decode_color);
+}
+
static const gx_device_procs planc_procs =
- pgpm_procs(planc_map_color_rgb, planc_encode_color, planc_decode_color);
+ devprocs_initialize(planc_initialize);
+
+static int
+plank_initialize(gx_device *dev)
+{
+ return plan_base_initialize(dev,
+ planc_map_color_rgb,
+ planc_encode_color,
+ planc_decode_color);
+}
+
static const gx_device_procs plank_procs =
- pgpm_procs(planc_map_color_rgb, planc_encode_color, planc_decode_color);
+ devprocs_initialize(plank_initialize);
+
+static int
+planr_initialize(gx_device *dev)
+{
+ return plan_base_initialize(dev,
+ plan_decode_color,
+ gx_default_rgb_map_rgb_color,
+ plan_decode_color);
+}
+
static const gx_device_procs planr_procs =
- pgpm_procs(plan_decode_color, gx_default_rgb_map_rgb_color, plan_decode_color);
+ devprocs_initialize(planr_initialize);
/* Macro for generating device descriptors. */
#define plan_prn_device(procs, dev_name, num_comp, depth, max_gray, max_rgb, print_page) \
diff --git a/devices/gdevplib.c b/devices/gdevplib.c
index fe9aa33db..20f21471e 100644
--- a/devices/gdevplib.c
+++ b/devices/gdevplib.c
@@ -267,87 +267,103 @@ static int plibk_print_page(gx_device_printer * pdev, gp_file * pstream);
/* The device procedures */
-/* See gdevprn.h for the template for the following. */
-#define pgpm_procs(p_color_rgb, p_encode_color, p_decode_color) {\
- plib_open,\
- NULL, /* get_initial_matrix */ \
- NULL, /* sync output */ \
- /* Since the print_page doesn't alter the device, this device can print in the background */\
- gdev_prn_bg_output_page, \
- plib_close,\
- NULL, /* map_rgb_color */ \
- p_color_rgb, /* map_color_rgb */ \
- NULL, /* fill_rectangle */ \
- NULL, /* tile_rectangle */ \
- NULL, /* copy_mono */ \
- NULL, /* copy_color */ \
- NULL, /* draw_line */ \
- NULL, /* get_bits */ \
- gdev_prn_get_params, \
- plib_put_params,\
- NULL, /* map_cmyk_color */ \
- NULL, /* get_xfont_procs */ \
- NULL, /* get_xfont_device */ \
- NULL, /* map_rgb_alpha_color */ \
- gx_page_device_get_page_device, \
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- NULL, /* fill_path */\
- NULL, /* stroke_path */\
- NULL, /* fill_mask */\
- NULL, /* fill_trapezoid */\
- NULL, /* fill_parallelogram */\
- NULL, /* fill_triangle */\
- NULL, /* draw_thin_line */\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- NULL, /* initialize */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- NULL, /* get_color_mapping_procs */\
- NULL, /* get_color_comp_index */\
- p_encode_color, /* encode_color */\
- p_decode_color, /* decode_color */\
- NULL, /* pattern_manage */\
- NULL, /* fill_rectangle_hl_color */\
- NULL, /* include_color_space */\
- NULL, /* fill_linear_color_scanline */\
- NULL, /* fill_linear_color_trapezoid */\
- NULL, /* fill_linear_color_triangle */\
- NULL, /* update spot */\
- NULL, /* DevN params */\
- NULL, /* fill page */\
- NULL, /* push_transparency_state */\
- NULL, /* pop_transparency_state */\
- NULL, /* put_image */\
- NULL /* dev_spec_op */\
+static int
+plib_base_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, plib_open);
+ set_dev_proc(dev, close_device, plib_close);
+ set_dev_proc(dev, put_params, plib_put_params);
+
+ return 0;
+}
+
+static int
+plibm_initialize(gx_device *dev)
+{
+ int code = plib_base_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, encode_color, gdev_prn_map_rgb_color);
+ set_dev_proc(dev, decode_color, gdev_prn_map_color_rgb);
+
+ return 0;
+}
+
+static int
+plibg_initialize(gx_device *dev)
+{
+ int code = plib_base_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, encode_color, plibg_encode_color);
+ set_dev_proc(dev, decode_color, plibg_decode_color);
+
+ return 0;
+}
+
+static int
+plib_initialize(gx_device *dev)
+{
+ int code = plib_base_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, encode_color, gx_default_rgb_map_rgb_color);
+ set_dev_proc(dev, decode_color, plib_decode_color);
+
+ return 0;
+}
+
+static int
+plibc_initialize(gx_device *dev)
+{
+ int code = plib_base_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_color_rgb, plibc_map_color_rgb);
+ set_dev_proc(dev, encode_color, plibc_encode_color);
+ set_dev_proc(dev, decode_color, plibc_decode_color);
+
+ return 0;
+}
+
+static int
+plibk_initialize(gx_device *dev)
+{
+ int code = plib_base_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_color_rgb, plibc_map_color_rgb);
+ set_dev_proc(dev, encode_color, plibc_encode_color);
+ set_dev_proc(dev, decode_color, plibc_decode_color);
+
+ return 0;
}
static const gx_device_procs plibm_procs =
- pgpm_procs(NULL, gdev_prn_map_rgb_color, gdev_prn_map_color_rgb);
+ devprocs_initialize(plibm_initialize);
static const gx_device_procs plibg_procs =
- pgpm_procs(NULL, plibg_encode_color, plibg_decode_color);
+ devprocs_initialize(plibg_initialize);
static const gx_device_procs plib_procs =
- pgpm_procs(NULL, gx_default_rgb_map_rgb_color, plib_decode_color);
+ devprocs_initialize(plib_initialize);
static const gx_device_procs plibc_procs =
- pgpm_procs(plibc_map_color_rgb, plibc_encode_color, plibc_decode_color);
+ devprocs_initialize(plibc_initialize);
static const gx_device_procs plibk_procs =
- pgpm_procs(plibc_map_color_rgb, plibc_encode_color, plibc_decode_color);
+ devprocs_initialize(plibk_initialize);
/* Macro for generating device descriptors. */
/* Ideally we'd use something like:
diff --git a/devices/gdevpng.c b/devices/gdevpng.c
index 6eb32c366..df1ebafe9 100644
--- a/devices/gdevpng.c
+++ b/devices/gdevpng.c
@@ -105,9 +105,23 @@ const gx_device_png gs_pngmono_device =
/* 4-bit planar (EGA/VGA-style) color. */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+png16_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, pc_4bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, pc_4bit_map_color_rgb);
+
+ return 0;
+}
+
static const gx_device_procs png16_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- pc_4bit_map_rgb_color, pc_4bit_map_color_rgb);
+ devprocs_initialize(png16_initialize);
+
const gx_device_png gs_png16_device = {
prn_device_body(gx_device_png, png16_procs, "png16",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -121,9 +135,23 @@ const gx_device_png gs_png16_device = {
/* (Uses a fixed palette of 3,3,2 bits.) */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+png256_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, pc_8bit_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, pc_8bit_map_color_rgb);
+
+ return 0;
+}
+
static const gx_device_procs png256_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- pc_8bit_map_rgb_color, pc_8bit_map_color_rgb);
+ devprocs_initialize(png256_initialize);
+
const gx_device_png gs_png256_device = {
prn_device_body(gx_device_png, png256_procs, "png256",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -136,11 +164,23 @@ const gx_device_png gs_png256_device = {
/* 8-bit gray */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+pnggray_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_gray_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_params, png_get_params_downscale);
+ set_dev_proc(dev, put_params, png_put_params_downscale);
+
+ return 0;
+}
+
static const gx_device_procs pnggray_procs =
-prn_color_params_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_gray_map_rgb_color,
- gx_default_gray_map_color_rgb,
- png_get_params_downscale, png_put_params_downscale);
+ devprocs_initialize(pnggray_initialize);
+
const gx_device_png gs_pnggray_device =
{prn_device_body(gx_device_png, pnggray_procs, "pnggray",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -153,12 +193,23 @@ const gx_device_png gs_pnggray_device =
/* Monochrome (with error diffusion) */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+pngmonod_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_rgb_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_params, png_get_params_downscale_mfs);
+ set_dev_proc(dev, put_params, png_put_params_downscale_mfs);
+
+ return 0;
+}
+
static const gx_device_procs pngmonod_procs =
-prn_color_params_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_gray_map_rgb_color,
- gx_default_gray_map_color_rgb,
- png_get_params_downscale_mfs,
- png_put_params_downscale_mfs);
+ devprocs_initialize(pngmonod_initialize);
+
const gx_device_png gs_pngmonod_device =
{prn_device_body(gx_device_png, pngmonod_procs, "pngmonod",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -171,11 +222,23 @@ const gx_device_png gs_pngmonod_device =
/* 24-bit color. */
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+png16m_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_rgb_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_params, png_get_params_downscale);
+ set_dev_proc(dev, put_params, png_put_params_downscale);
+
+ return 0;
+}
+
static const gx_device_procs png16m_procs =
-prn_color_params_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_rgb_map_rgb_color,
- gx_default_rgb_map_color_rgb,
- png_get_params_downscale, png_put_params_downscale);
+ devprocs_initialize(png16m_initialize);
+
const gx_device_png gs_png16m_device =
{prn_device_body(gx_device_png, png16m_procs, "png16m",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -189,8 +252,8 @@ const gx_device_png gs_png16m_device =
/* Since the print_page doesn't alter the device, this device can print in the background */
static const gx_device_procs png48_procs =
-prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- gx_default_rgb_map_rgb_color, gx_default_rgb_map_color_rgb);
+ devprocs_initialize(gdev_prn_initialize_rgb_bg);
+
const gx_device_png gs_png48_device =
{prn_device_body(gx_device_png, png48_procs, "png48",
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
@@ -215,76 +278,34 @@ struct gx_device_pngalpha_s {
gx_downscaler_params downscale;
int background;
};
-static const gx_device_procs pngalpha_procs =
+
+static int
+pngalpha_initialize(gx_device *dev)
{
- pngalpha_open,
- NULL, /* get_initial_matrix */
- NULL, /* sync_output */
- /* Since the print_page doesn't alter the device, this device can print in the background */
- gdev_prn_bg_output_page,
- gdev_prn_close,
- pngalpha_encode_color, /* map_rgb_color */
- pngalpha_decode_color, /* map_color_rgb */
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- NULL, /* get_bits */
- pngalpha_get_params,
- pngalpha_put_params,
- NULL, /* map_cmyk_color */
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device,
- NULL, /* get_alpha_bits */
- pngalpha_copy_alpha,
- NULL, /* get_band */
- NULL, /* copy_rop */
- NULL, /* fill_path */
- NULL, /* stroke_path */
- NULL, /* fill_mask */
- NULL, /* fill_trapezoid */
- NULL, /* fill_parallelogram */
- NULL, /* fill_triangle */
- NULL, /* draw_thin_line */
- NULL, /* begin_image */
- NULL, /* image_data */
- NULL, /* end_image */
- NULL, /* strip_tile_rectangle */
- NULL, /* strip_copy_rop, */
- NULL, /* get_clipping_box */
- NULL, /* begin_typed_image */
- NULL, /* get_bits_rectangle */
- NULL, /* map_color_rgb_alpha */
- NULL, /* create_compositor */
- NULL, /* get_hardware_params */
- NULL, /* text_begin */
- NULL, /* initialize */
- NULL, /* begin_transparency_group */
- NULL, /* end_transparency_group */
- NULL, /* begin_transparency_mask */
- NULL, /* end_transparency_mask */
- NULL, /* discard_transparency_layer */
- gx_default_DevRGB_get_color_mapping_procs,
- gx_default_DevRGB_get_color_comp_index,
- pngalpha_encode_color,
- pngalpha_decode_color,
- NULL, /* pattern_manage */
- NULL, /* fill_rectangle_hl_color */
- NULL, /* include_color_space */
- NULL, /* fill_linear_color_scanline */
- NULL, /* fill_linear_color_trapezoid */
- NULL, /* fill_linear_color_triangle */
- NULL, /* update_spot_equivalent_colors */
- NULL, /* ret_devn_params */
- pngalpha_fillpage,
- NULL, /* push_transparency_state */
- NULL, /* pop_transparency_state */
- pngalpha_put_image,
- pngalpha_spec_op /* dev_spec_op */\
-};
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, pngalpha_open);
+ set_dev_proc(dev, map_rgb_color, pngalpha_encode_color);
+ set_dev_proc(dev, map_color_rgb, pngalpha_decode_color);
+ set_dev_proc(dev, encode_color, pngalpha_encode_color);
+ set_dev_proc(dev, decode_color, pngalpha_decode_color);
+ set_dev_proc(dev, get_params, pngalpha_get_params);
+ set_dev_proc(dev, put_params, pngalpha_put_params);
+ set_dev_proc(dev, copy_alpha, pngalpha_copy_alpha);
+ set_dev_proc(dev, get_color_mapping_procs, gx_default_DevRGB_get_color_mapping_procs);
+ set_dev_proc(dev, get_color_comp_index, gx_default_DevRGB_get_color_comp_index);
+ set_dev_proc(dev, fillpage, pngalpha_fillpage);
+ set_dev_proc(dev, put_image, pngalpha_put_image);
+ set_dev_proc(dev, dev_spec_op, pngalpha_spec_op);
+
+ return 0;
+}
+
+static const gx_device_procs pngalpha_procs =
+ devprocs_initialize(pngalpha_initialize);
const gx_device_pngalpha gs_pngalpha_device = {
std_device_part1_(gx_device_pngalpha, &pngalpha_procs, "pngalpha",
diff --git a/devices/gdevpsd.c b/devices/gdevpsd.c
index 669cfb4d1..a4593d80c 100644
--- a/devices/gdevpsd.c
+++ b/devices/gdevpsd.c
@@ -148,77 +148,28 @@ gs_private_st_composite_final(st_psd_device, psd_device,
"psd_device", psd_device_enum_ptrs, psd_device_reloc_ptrs,
psd_device_finalize);
-/*
- * Macro definition for psd device procedures
- */
-#define device_procs(get_color_mapping_procs, params)\
-{ psd_prn_open,\
- gx_default_get_initial_matrix,\
- NULL, /* sync_output */\
- /* Since the print_page doesn't alter the device, this device can print in the background */\
- gdev_prn_bg_output_page, /* output_page */\
- psd_prn_close, /* close */\
- NULL, /* map_rgb_color - not used */\
- psd_map_color_rgb, /* map_color_rgb */\
- NULL, /* fill_rectangle */\
- NULL, /* tile_rectangle */\
- NULL, /* copy_mono */\
- NULL, /* copy_color */\
- NULL, /* draw_line */\
- NULL, /* get_bits */\
- psd_get_##params, /* get_params */\
- psd_put_##params, /* put_params */\
- NULL, /* map_cmyk_color - not used */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- gx_page_device_get_page_device, /* get_page_device */\
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- NULL, /* fill_path */\
- NULL, /* stroke_path */\
- NULL, /* fill_mask */\
- NULL, /* fill_trapezoid */\
- NULL, /* fill_parallelogram */\
- NULL, /* fill_triangle */\
- NULL, /* draw_thin_line */\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- NULL, /* initialize */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- get_color_mapping_procs, /* get_color_mapping_procs */\
- psd_get_color_comp_index, /* get_color_comp_index */\
- gx_devn_prn_encode_color, /* encode_color */\
- gx_devn_prn_decode_color, /* decode_color */\
- NULL, /* pattern_manage */\
- NULL, /* fill_rectangle_hl_color */\
- NULL, /* include_color_space */\
- NULL, /* fill_linear_color_scanline */\
- NULL, /* fill_linear_color_trapezoid */\
- NULL, /* fill_linear_color_triangle */\
- gx_devn_prn_update_spot_equivalent_colors, /* update_spot_equivalent_colors */\
- gx_devn_prn_ret_devn_params, /* ret_devn_params */\
- NULL, /* fillpage */\
- NULL, /* push_transparency_state */\
- NULL, /* pop_transparency_state */\
- NULL, /* put_image */\
- psd_spec_op /* dev_spec_op */\
+static int
+psd_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, psd_prn_open);
+ set_dev_proc(dev, close_device, psd_prn_close);
+ set_dev_proc(dev, map_color_rgb, psd_map_color_rgb);
+ set_dev_proc(dev, get_params, psd_get_params);
+ set_dev_proc(dev, put_params, psd_put_params);
+ set_dev_proc(dev, get_color_mapping_procs, get_psdrgb_color_mapping_procs);
+ set_dev_proc(dev, get_color_comp_index, psd_get_color_comp_index);
+ set_dev_proc(dev, encode_color, gx_devn_prn_encode_color);
+ set_dev_proc(dev, decode_color, gx_devn_prn_decode_color);
+ set_dev_proc(dev, update_spot_equivalent_colors, gx_devn_prn_update_spot_equivalent_colors);
+ set_dev_proc(dev, ret_devn_params, gx_devn_prn_ret_devn_params);
+ set_dev_proc(dev, dev_spec_op, psd_spec_op);
+
+ return 0;
}
#define psd_device_body(procs, dname, ncomp, pol, depth, mg, mc, sl, cn)\
@@ -244,7 +195,7 @@ gs_private_st_composite_final(st_psd_device, psd_device,
* PSD device with RGB process color model.
*/
static const gx_device_procs spot_rgb_procs =
- device_procs(get_psdrgb_color_mapping_procs, params);
+ devprocs_initialize(psd_initialize);
const psd_device gs_psdrgb_device =
{
@@ -291,8 +242,22 @@ const psd_device gs_psdrgb16_device =
/*
* PSD device with CMYK process color model and spot color support.
*/
-static const gx_device_procs spot_cmyk_procs
- = device_procs(get_psd_color_mapping_procs, params_cmyk);
+static int
+psdcmyk_initialize(gx_device *dev)
+{
+ int code = psd_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, get_params, psd_get_params_cmyk);
+ set_dev_proc(dev, put_params, psd_put_params_cmyk);
+ set_dev_proc(dev, get_color_mapping_procs, get_psd_color_mapping_procs);
+
+ return 0;
+}
+static const gx_device_procs spot_cmyk_procs =
+ devprocs_initialize(psdcmyk_initialize);
const psd_device gs_psdcmyk_device =
{
diff --git a/devices/gdevrinkj.c b/devices/gdevrinkj.c
index ca7b7966c..10e8f5c75 100644
--- a/devices/gdevrinkj.c
+++ b/devices/gdevrinkj.c
@@ -126,67 +126,26 @@ typedef struct rinkj_device_s {
char setup_fn[256];
} rinkj_device;
-/*
- * Macro definition for DeviceN procedures
- */
-#define device_procs(get_color_mapping_procs)\
-{ gdev_prn_open,\
- gx_default_get_initial_matrix,\
- NULL, /* sync_output */\
- /* Since the print_page doesn't alter the device, this device can print in the background */\
- gdev_prn_bg_output_page, /* output_page */\
- rinkj_close_device, /* close */\
- NULL, /* map_rgb_color - not used */\
- rinkj_map_color_rgb, /* map_color_rgb */\
- NULL, /* fill_rectangle */\
- NULL, /* tile_rectangle */\
- NULL, /* copy_mono */\
- NULL, /* copy_color */\
- NULL, /* draw_line */\
- NULL, /* get_bits */\
- rinkj_get_params, /* get_params */\
- rinkj_put_params, /* put_params */\
- NULL, /* map_cmyk_color - not used */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- gx_page_device_get_page_device, /* get_page_device */\
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- NULL, /* fill_path */\
- NULL, /* stroke_path */\
- NULL, /* fill_mask */\
- NULL, /* fill_trapezoid */\
- NULL, /* fill_parallelogram */\
- NULL, /* fill_triangle */\
- NULL, /* draw_thin_line */\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- NULL, /* initialize */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- get_color_mapping_procs, /* get_color_mapping_procs */\
- rinkj_get_color_comp_index, /* get_color_comp_index */\
- rinkj_encode_color, /* encode_color */\
- rinkj_decode_color /* decode_color */\
+static int
+spot_cmyk_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, gdev_prn_open);
+ set_dev_proc(dev, output_page, gdev_prn_bg_output_page);
+ set_dev_proc(dev, close_device, rinkj_close_device);
+ set_dev_proc(dev, map_color_rgb, rinkj_map_color_rgb);
+ set_dev_proc(dev, get_params, rinkj_get_params);
+ set_dev_proc(dev, put_params, rinkj_put_params);
+ set_dev_proc(dev, get_page_device, gx_page_device_get_page_device);
+ set_dev_proc(dev, get_color_mapping_procs, get_rinkj_color_mapping_procs);
+ set_dev_proc(dev, get_color_comp_index, rinkj_get_color_comp_index);
+ set_dev_proc(dev, encode_color, rinkj_encode_color);
+ set_dev_proc(dev, decode_color, rinkj_decode_color);
+
+ return 0;
}
-static const gx_device_procs spot_cmyk_procs = device_procs(get_rinkj_color_mapping_procs);
+static const gx_device_procs spot_cmyk_procs =
+ devprocs_initialize(spot_cmyk_initialize);
const rinkj_device gs_rinkj_device =
{
diff --git a/devices/gdevsnfb.c b/devices/gdevsnfb.c
index 6ffc7ba46..99ee99cb6 100644
--- a/devices/gdevsnfb.c
+++ b/devices/gdevsnfb.c
@@ -27,8 +27,25 @@ typedef long off_t;
static dev_proc_open_device(sonyfb_open);
static dev_proc_output_page(sonyfb_output_page);
static dev_proc_close_device(sonyfb_close);
+
+static int
+sonyfb_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, sonyfb_open);
+ set_dev_proc(dev, output_page, sonyfb_output_page);
+ set_dev_proc(dev, close_device, sonyfb_close);
+
+ return 0;
+}
+
static gx_device_procs sonyfb_procs =
- prn_procs(sonyfb_open, sonyfb_output_page, sonyfb_close);
+ devprocs_initialize(sonyfb_initialize);
+
const gx_device_printer far_data gs_sonyfb_device =
prn_device(sonyfb_procs, "sonyfb",
102.4, /* width_10ths */
diff --git a/devices/gdevstc.c b/devices/gdevstc.c
index 5d8bf4254..47794f27f 100644
--- a/devices/gdevstc.c
+++ b/devices/gdevstc.c
@@ -130,25 +130,24 @@ static dev_proc_map_color_rgb(stc_map_color_cmyk10);
/***
*** Table of Device-Procedures
***/
-static gx_device_procs stcolor_procs = {
- stc_open,
- gx_default_get_initial_matrix,
- gx_default_sync_output,
- /* Since the print_page doesn't alter the device, this device can print in the background */
- gdev_prn_bg_output_page,
- stc_close,
- NULL,
- stc_map_color_cmyk,
- NULL, /* fill_rectangle */
- NULL, /* tile_rectangle */
- NULL, /* copy_mono */
- NULL, /* copy_color */
- NULL, /* draw_line */
- gx_default_get_bits,
- stc_get_params,
- stc_put_params,
- stc_map_cmyk_color
-};
+static int
+stcolor_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, stc_open);
+ set_dev_proc(dev, get_initial_matrix, gx_default_get_initial_matrix);
+ set_dev_proc(dev, sync_output, gx_default_sync_output);
+ set_dev_proc(dev, output_page, gdev_prn_bg_output_page);
+ set_dev_proc(dev, close_device, stc_close);
+ set_dev_proc(dev, map_color_rgb, stc_map_color_cmyk);
+ set_dev_proc(dev, get_bits, gx_default_get_bits);
+ set_dev_proc(dev, get_params, stc_get_params);
+ set_dev_proc(dev, put_params, stc_put_params);
+ set_dev_proc(dev, map_cmyk_color, stc_map_cmyk_color);
+
+ return 0;
+}
+static gx_device_procs stcolor_procs =
+ devprocs_initialize(stcolor_initialize);
/***
*** A local dummy-array for extvals
diff --git a/devices/gdevtfax.c b/devices/gdevtfax.c
index d7abc954c..0dd916aa6 100644
--- a/devices/gdevtfax.c
+++ b/devices/gdevtfax.c
@@ -54,10 +54,27 @@ struct gx_device_tfax_s {
typedef struct gx_device_tfax_s gx_device_tfax;
/* Define procedures that adjust the paper size. */
-static const gx_device_procs gdev_tfax_std_procs =
/* FIXME: From initial analysis this is NOT safe for bg_printing, but might be fixable */
- prn_params_procs(tfax_open, gdev_prn_output_page_seekable, tfax_close,
- tfax_get_params, tfax_put_params);
+static int
+tfax_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_mono(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tfax_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tfax_close);
+ set_dev_proc(dev, get_params, tfax_get_params);
+ set_dev_proc(dev, put_params, tfax_put_params);
+
+ return 0;
+}
+
+
+static const gx_device_procs gdev_tfax_std_procs =
+ devprocs_initialize(tfax_initialize);
#define TFAX_DEVICE(dname, print_page, compr)\
{\
diff --git a/devices/gdevtfnx.c b/devices/gdevtfnx.c
index e7c7f0fe4..9a316362e 100644
--- a/devices/gdevtfnx.c
+++ b/devices/gdevtfnx.c
@@ -39,14 +39,45 @@ static dev_proc_print_page(tiff_rgb_print_page);
/* FIXME: From initial analysis this is NOT safe for bg_printing, but might be fixable */
+static int
+tiff12_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_rgb(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiff_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tiff_close);
+ set_dev_proc(dev, get_params, tiff_get_params);
+ set_dev_proc(dev, put_params, tiff_put_params);
+
+ return 0;
+}
+
static const gx_device_procs tiff12_procs =
-prn_color_params_procs(tiff_open, gdev_prn_output_page_seekable, tiff_close,
- gx_default_rgb_map_rgb_color, gx_default_rgb_map_color_rgb,
- tiff_get_params, tiff_put_params);
+ devprocs_initialize(tiff12_initialize);
+
+static int
+tiff24_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_rgb(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiff_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tiff_close);
+ set_dev_proc(dev, get_params, tiff_get_params);
+ set_dev_proc(dev, put_params, tiff_put_params);
+
+ return 0;
+}
+
static const gx_device_procs tiff24_procs =
-prn_color_params_procs(tiff_open, gdev_prn_output_page_seekable, tiff_close,
- gx_default_rgb_map_rgb_color, gx_default_rgb_map_color_rgb,
- tiff_get_params, tiff_put_params);
+ devprocs_initialize(tiff24_initialize);
const gx_device_tiff gs_tiff12nc_device = {
prn_device_std_body(gx_device_tiff, tiff12_procs, "tiff12nc",
diff --git a/devices/gdevtknk.c b/devices/gdevtknk.c
index 7ea923269..0b8a54b57 100644
--- a/devices/gdevtknk.c
+++ b/devices/gdevtknk.c
@@ -32,9 +32,22 @@ static dev_proc_map_rgb_color(tekink_map_rgb_color);
static dev_proc_map_color_rgb(tekink_map_color_rgb);
static dev_proc_print_page(tekink_print_page);
/* Since the print_page doesn't alter the device, this device can print in the background */
+static int
+tekink_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_bg(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, map_rgb_color, tekink_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, tekink_map_color_rgb);
+
+ return 0;
+}
+
static gx_device_procs tekink_procs =
- prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close,
- tekink_map_rgb_color, tekink_map_color_rgb);
+ devprocs_initialize(tekink_initialize);
/*
Device descriptor for the Tek 4696.
diff --git a/devices/gdevtrac.c b/devices/gdevtrac.c
index 8dc5bf70c..e42b4d5b2 100644
--- a/devices/gdevtrac.c
+++ b/devices/gdevtrac.c
@@ -602,8 +602,40 @@ trace_text_begin(gx_device * dev, gs_gstate * pgs,
/* ---------------- The device definition ---------------- */
-#define TRACE_DEVICE_BODY(dname, ncomp, depth, map_rgb_color, map_color_rgb, map_cmyk_color, map_rgb_alpha_color)\
- std_device_dci_body(gx_device, 0, dname,\
+static int
+tr_base_initialize(gx_device *dev,
+ dev_proc_map_rgb_color((*map_rgb_color)),
+ dev_proc_map_color_rgb((*map_color_rgb)),
+ dev_proc_map_cmyk_color((*map_cmyk_color)),
+ dev_proc_map_rgb_alpha_color((*map_rgb_alpha_color)))
+{
+ set_dev_proc(dev, map_rgb_color, map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, map_color_rgb);
+ set_dev_proc(dev, fill_rectangle, trace_fill_rectangle);
+ set_dev_proc(dev, copy_mono, trace_copy_mono);
+ set_dev_proc(dev, copy_color, trace_copy_color);
+ set_dev_proc(dev, map_cmyk_color, map_cmyk_color);
+ set_dev_proc(dev, map_rgb_alpha_color, map_rgb_alpha_color);
+ set_dev_proc(dev, get_page_device, gx_page_device_get_page_device);
+ set_dev_proc(dev, copy_alpha, trace_copy_alpha);
+ set_dev_proc(dev, fill_path, trace_fill_path);
+ set_dev_proc(dev, stroke_path, trace_stroke_path);
+ set_dev_proc(dev, fill_mask, trace_fill_mask);
+ set_dev_proc(dev, fill_trapezoid, trace_fill_trapezoid);
+ set_dev_proc(dev, fill_parallelogram, trace_fill_parallelogram);
+ set_dev_proc(dev, fill_triangle, trace_fill_triangle);
+ set_dev_proc(dev, draw_thin_line, trace_draw_thin_line);
+ set_dev_proc(dev, strip_tile_rectangle, trace_strip_tile_rectangle);
+ set_dev_proc(dev, strip_copy_rop, trace_strip_copy_rop);
+ set_dev_proc(dev, begin_typed_image, trace_begin_typed_image);
+ set_dev_proc(dev, text_begin, trace_text_begin);
+ set_dev_proc(dev, strip_copy_rop2, trace_strip_copy_rop2);
+
+ return 0;
+}
+
+#define TRACE_DEVICE_BODY(dname, ncomp, depth, init)\
+ std_device_dci_body(gx_device, init, dname,\
DEFAULT_WIDTH_10THS * X_DPI / 10,\
DEFAULT_HEIGHT_10THS * Y_DPI / 10,\
X_DPI, Y_DPI, ncomp, depth,\
@@ -611,91 +643,41 @@ trace_text_begin(gx_device * dev, gs_gstate * pgs,
(ncomp > 1 ? (1 << (depth / ncomp)) - 1 : 0),\
1 << (depth / ncomp),\
(ncomp > 1 ? 1 << (depth / ncomp) : 1)),\
-{\
- NULL, /* open_device */\
- NULL, /* get_initial_matrix */\
- NULL, /* sync_output */\
- NULL, /* output_page */\
- NULL, /* close_device */\
- map_rgb_color, /* differs */\
- map_color_rgb, /* differs */\
- trace_fill_rectangle,\
- NULL, /* tile_rectangle */\
- trace_copy_mono,\
- trace_copy_color,\
- NULL, /* draw_line */\
- NULL, /* get_bits */\
- NULL, /* get_params */\
- NULL, /* put_params */\
- map_cmyk_color, /* differs */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- map_rgb_alpha_color, /* differs */\
- gx_page_device_get_page_device,\
- NULL, /* get_alpha_bits */\
- trace_copy_alpha,\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- trace_fill_path,\
- trace_stroke_path,\
- trace_fill_mask,\
- trace_fill_trapezoid,\
- trace_fill_parallelogram,\
- trace_fill_triangle,\
- trace_draw_thin_line,\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- trace_strip_tile_rectangle,\
- trace_strip_copy_rop,\
- NULL, /* get_clipping_box */\
- trace_begin_typed_image,\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- trace_text_begin,\
- NULL, /* initialize */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- NULL, /* get_color_mapping_procs */\
- NULL, /* get_color_comp_index */\
- NULL, /* encode_color */\
- NULL, /* decode_color */\
- NULL, /* pattern_manage */\
- NULL, /* fill_rectangle_hl_color */\
- NULL, /* include_color_space */\
- NULL, /* fill_linear_color_scanline */\
- NULL, /* fill_linear_color_trapezoid */\
- NULL, /* fill_linear_color_triangle */\
- NULL, /* update_spot_equivalent_colors */\
- NULL, /* ret_devn_params */\
- NULL, /* fillpage */\
- NULL, /* push_transparency_state */\
- NULL, /* pop_transparency_state */\
- NULL, /* put_image */\
- NULL, /* dev_spec_op */\
- NULL, /* copy_planes */\
- NULL, /* get_profile */\
- NULL, /* set_graphics_type_tag */\
- trace_strip_copy_rop2\
+}
+
+static init
+tr_mono_initialize(gx_device *dev)
+{
+ return tr_base_initialize(dev,
+ gx_default_b_w_map_rgb_color,
+ gx_default_b_w_map_color_rgb, NULL, NULL);
+
}
const gx_device gs_tr_mono_device = {
- TRACE_DEVICE_BODY("tr_mono", 1, 1,
- gx_default_b_w_map_rgb_color,
- gx_default_b_w_map_color_rgb, NULL, NULL)
+ TRACE_DEVICE_BODY("tr_mono", 1, 1, tr_mono_initialize)
};
+static int
+tr_rgb_initialize(gx_device *dev)
+{
+ return tr_base_initialize(dev,
+ gx_default_rgb_map_rgb_color,
+ gx_default_rgb_map_color_rgb, NULL, NULL);
+}
+
const gx_device gs_tr_rgb_device = {
- TRACE_DEVICE_BODY("tr_rgb", 3, 24,
- gx_default_rgb_map_rgb_color,
- gx_default_rgb_map_color_rgb, NULL, NULL)
+ TRACE_DEVICE_BODY("tr_rgb", 3, 24, tr_rgb_initialize);
};
+static int
+tr_cmyk_initialize(gx_device *dev)
+{
+ return tr_base_initialize(dev,
+ NULL, cmyk_1bit_map_color_rgb,
+ cmyk_1bit_map_cmyk_color, NULL);
+}
+
const gx_device gs_tr_cmyk_device = {
TRACE_DEVICE_BODY("tr_cmyk", 4, 4,
NULL, cmyk_1bit_map_color_rgb,
diff --git a/devices/gdevtsep.c b/devices/gdevtsep.c
index df1a31796..119b0d81c 100644
--- a/devices/gdevtsep.c
+++ b/devices/gdevtsep.c
@@ -72,11 +72,26 @@
static dev_proc_print_page(tiffgray_print_page);
/* FIXME: From initial analysis this is NOT safe for bg_printing, but might be fixable */
+static int
+tiffgray_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_gray(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiff_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tiff_close);
+ set_dev_proc(dev, get_params, tiff_get_params);
+ set_dev_proc(dev, put_params, tiff_put_params);
+
+ return 0;
+}
+
static const gx_device_procs tiffgray_procs =
-prn_color_params_procs(tiff_open, gdev_prn_output_page_seekable, tiff_close,
- gx_default_gray_map_rgb_color, gx_default_gray_map_color_rgb,
- tiff_get_params, tiff_put_params);
+ devprocs_initialize(tiffgray_initialize);
const gx_device_tiff gs_tiffgray_device = {
prn_device_body(gx_device_tiff, tiffgray_procs, "tiffgray",
@@ -109,14 +124,25 @@ dev_proc_open_device(tiff_open_s);
static dev_proc_print_page(tiffscaled_print_page);
static int tiff_set_icc_color_fields(gx_device_printer *pdev);
+static int
+tiffscaled_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_gray(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiff_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tiff_close);
+ set_dev_proc(dev, get_params, tiff_get_params_downscale);
+ set_dev_proc(dev, put_params, tiff_put_params_downscale);
+
+ return 0;
+}
+
static const gx_device_procs tiffscaled_procs =
-prn_color_params_procs(tiff_open,
- gdev_prn_output_page_seekable,
- tiff_close,
- gx_default_gray_map_rgb_color,
- gx_default_gray_map_color_rgb,
- tiff_get_params_downscale,
- tiff_put_params_downscale);
+ devprocs_initialize(tiffscaled_initialize);
const gx_device_tiff gs_tiffscaled_device = {
prn_device_body(gx_device_tiff,
@@ -143,16 +169,26 @@ const gx_device_tiff gs_tiffscaled_device = {
static dev_proc_print_page(tiffscaled8_print_page);
-static const gx_device_procs tiffscaled8_procs = {
- tiff_open_s, NULL, NULL, gdev_prn_output_page_seekable, tiff_close,
- gx_default_gray_map_rgb_color, gx_default_gray_map_color_rgb, NULL, NULL,
- NULL, NULL, NULL, NULL, tiff_get_params_downscale, tiff_put_params_downscale,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, tiffscaled_spec_op
-};
+static int
+tiffscaled8_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_gray(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiff_open_s);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tiff_close);
+ set_dev_proc(dev, get_params, tiff_get_params_downscale);
+ set_dev_proc(dev, put_params, tiff_put_params_downscale);
+ set_dev_proc(dev, dev_spec_op, tiffscaled_spec_op);
+
+ return 0;
+}
+
+static const gx_device_procs tiffscaled8_procs =
+ devprocs_initialize(tiffscaled8_initialize);
const gx_device_tiff gs_tiffscaled8_device = {
prn_device_body(gx_device_tiff,
@@ -179,16 +215,26 @@ const gx_device_tiff gs_tiffscaled8_device = {
static dev_proc_print_page(tiffscaled24_print_page);
-static const gx_device_procs tiffscaled24_procs = {
- tiff_open_s, NULL, NULL, gdev_prn_output_page_seekable, tiff_close,
- gx_default_rgb_map_rgb_color, gx_default_rgb_map_color_rgb, NULL, NULL,
- NULL, NULL, NULL, NULL, tiff_get_params_downscale, tiff_put_params_downscale,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, tiffscaled_spec_op
-};
+static int
+tiffscaled24_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_rgb(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiff_open_s);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tiff_close);
+ set_dev_proc(dev, get_params, tiff_get_params_downscale);
+ set_dev_proc(dev, put_params, tiff_put_params_downscale);
+ set_dev_proc(dev, dev_spec_op, tiffscaled_spec_op);
+
+ return 0;
+}
+
+static const gx_device_procs tiffscaled24_procs =
+ devprocs_initialize(tiffscaled24_initialize);
const gx_device_tiff gs_tiffscaled24_device = {
prn_device_body(gx_device_tiff,
@@ -215,16 +261,26 @@ const gx_device_tiff gs_tiffscaled24_device = {
static dev_proc_print_page(tiffscaled32_print_page);
-static const gx_device_procs tiffscaled32_procs = {
- tiff_open_s, NULL, NULL, gdev_prn_output_page_seekable, tiff_close,
- NULL, cmyk_8bit_map_color_cmyk, NULL, NULL, NULL, NULL, NULL, NULL,
- tiff_get_params_downscale_cmyk, tiff_put_params_downscale_cmyk,
- cmyk_8bit_map_cmyk_color, NULL, NULL, NULL, gx_page_device_get_page_device,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tiffscaled_spec_op
-};
+static int
+tiffscaled32_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_cmyk8(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiff_open_s);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tiff_close);
+ set_dev_proc(dev, get_params, tiff_get_params_downscale_cmyk);
+ set_dev_proc(dev, put_params, tiff_put_params_downscale_cmyk);
+ set_dev_proc(dev, dev_spec_op, tiffscaled_spec_op);
+
+ return 0;
+}
+
+static const gx_device_procs tiffscaled32_procs =
+ devprocs_initialize(tiffscaled32_initialize);
const gx_device_tiff gs_tiffscaled32_device = {
prn_device_body(gx_device_tiff,
@@ -251,12 +307,25 @@ const gx_device_tiff gs_tiffscaled32_device = {
static dev_proc_print_page(tiffscaled4_print_page);
-static const gx_device_procs tiffscaled4_procs = {
- tiff_open, NULL, NULL, gdev_prn_output_page_seekable, tiff_close,
- NULL, cmyk_8bit_map_color_cmyk, NULL, NULL, NULL, NULL, NULL, NULL,
- tiff_get_params_downscale_cmyk_ets, tiff_put_params_downscale_cmyk_ets,
- cmyk_8bit_map_cmyk_color, NULL, NULL, NULL, gx_page_device_get_page_device
-};
+static int
+tiffscaled4_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_cmyk8(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiff_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tiff_close);
+ set_dev_proc(dev, get_params, tiff_get_params_downscale_cmyk_ets);
+ set_dev_proc(dev, put_params, tiff_put_params_downscale_cmyk_ets);
+
+ return 0;
+}
+
+static const gx_device_procs tiffscaled4_procs =
+ devprocs_initialize(tiffscaled4_initialize);
const gx_device_tiff gs_tiffscaled4_device = {
prn_device_body(gx_device_tiff,
@@ -519,17 +588,27 @@ tiffsep_spec_op(gx_device *dev_, int op, void *data, int datasize)
static dev_proc_print_page(tiffcmyk_print_page);
-#define cmyk_procs(p_map_color_rgb, p_map_cmyk_color)\
- tiff_open, NULL, NULL, gdev_prn_output_page_seekable, tiff_close,\
- NULL, p_map_color_rgb, NULL, NULL, NULL, NULL, NULL, NULL,\
- tiff_get_params, tiff_put_params,\
- p_map_cmyk_color, NULL, NULL, NULL, gx_page_device_get_page_device
-
/* 8-bit-per-plane separated CMYK color. */
-static const gx_device_procs tiffcmyk_procs = {
- cmyk_procs(cmyk_8bit_map_color_cmyk, cmyk_8bit_map_cmyk_color)
-};
+static int
+tiffcmyk_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_cmyk8(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiff_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tiff_close);
+ set_dev_proc(dev, get_params, tiff_get_params);
+ set_dev_proc(dev, put_params, tiff_put_params);
+
+ return 0;
+}
+
+static const gx_device_procs tiffcmyk_procs =
+ devprocs_initialize(tiffcmyk_initialize);
const gx_device_tiff gs_tiff32nc_device = {
prn_device_body(gx_device_tiff, tiffcmyk_procs, "tiff32nc",
@@ -549,9 +628,25 @@ const gx_device_tiff gs_tiff32nc_device = {
/* 16-bit-per-plane separated CMYK color. */
-static const gx_device_procs tiff64nc_procs = {
- cmyk_procs(cmyk_16bit_map_color_cmyk, cmyk_16bit_map_cmyk_color)
-};
+static int
+tiff64_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize_cmyk16(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiff_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
+ set_dev_proc(dev, close_device, tiff_close);
+ set_dev_proc(dev, get_params, tiff_get_params);
+ set_dev_proc(dev, put_params, tiff_put_params);
+
+ return 0;
+}
+
+static const gx_device_procs tiff64nc_procs =
+ devprocs_initialize(tiff64_initialize);
const gx_device_tiff gs_tiff64nc_device = {
prn_device_body(gx_device_tiff, tiff64nc_procs, "tiff64nc",
@@ -701,78 +796,45 @@ gs_private_st_composite_final(st_tiffsep_device, tiffsep_device,
"tiffsep_device", tiffsep_device_enum_ptrs, tiffsep_device_reloc_ptrs,
tiffsep_device_finalize);
-/*
- * Macro definition for tiffsep device procedures
- */
-#define sep_device_procs(open, close, encode_color, decode_color, update_spot_colors,put_params, fill_path) \
-{ open,\
- gx_default_get_initial_matrix,\
- NULL, /* sync_output */\
- gdev_prn_output_page_seekable, /* output_page */\
- close, /* close */\
- NULL, /* map_rgb_color - not used */\
- tiffsep_decode_color, /* map_color_rgb */\
- NULL, /* fill_rectangle */\
- NULL, /* tile_rectangle */\
- NULL, /* copy_mono */\
- NULL, /* copy_color */\
- NULL, /* draw_line */\
- NULL, /* get_bits */\
- tiffsep_get_params, /* get_params */\
- put_params, /* put_params */\
- NULL, /* map_cmyk_color - not used */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- gx_page_device_get_page_device, /* get_page_device */\
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- fill_path, /* fill_path */\
- NULL, /* stroke_path */\
- NULL, /* fill_mask */\
- NULL, /* fill_trapezoid */\
- NULL, /* fill_parallelogram */\
- NULL, /* fill_triangle */\
- NULL, /* draw_thin_line */\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- NULL, /* initialize */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- tiffsep_get_color_mapping_procs,/* get_color_mapping_procs */\
- tiffsep_get_color_comp_index, /* get_color_comp_index */\
- encode_color, /* encode_color */\
- decode_color, /* decode_color */\
- NULL, /* pattern_manage */\
- NULL, /* fill_rectangle_hl_color */\
- NULL, /* include_color_space */\
- NULL, /* fill_linear_color_scanline */\
- NULL, /* fill_linear_color_trapezoid */\
- NULL, /* fill_linear_color_triangle */\
- update_spot_colors, /* update_spot_equivalent_colors */\
- tiffsep_ret_devn_params, /* ret_devn_params */\
- NULL, /* fillpage */\
- NULL, /* push_transparency_state */\
- NULL, /* pop_transparency_state */\
- NULL, /* put_image */\
- tiffsep_spec_op /* dev_spec_op */\
+static int
+tiffsep_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiffsep_prn_open);
+ set_dev_proc(dev, close_device, tiffsep_prn_close);
+ set_dev_proc(dev, map_color_rgb, tiffsep_decode_color);
+ set_dev_proc(dev, get_params, tiffsep_get_params);
+ set_dev_proc(dev, put_params, tiffsep_put_params);
+ set_dev_proc(dev, get_color_mapping_procs, tiffsep_get_color_mapping_procs);
+ set_dev_proc(dev, get_color_comp_index, tiffsep_get_color_comp_index);
+ set_dev_proc(dev, encode_color, tiffsep_encode_color);
+ set_dev_proc(dev, decode_color, tiffsep_decode_color);
+ set_dev_proc(dev, update_spot_equivalent_colors, tiffsep_update_spot_equivalent_colors);
+ set_dev_proc(dev, ret_devn_params, tiffsep_ret_devn_params);
+ set_dev_proc(dev, dev_spec_op, tiffsep_spec_op);
+
+ return 0;
}
+static int
+tiffsep1_initialize(gx_device *dev)
+{
+ int code = tiffsep_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, tiffsep1_prn_open);
+ set_dev_proc(dev, close_device, tiffsep1_prn_close);
+ set_dev_proc(dev, put_params, tiffsep1_put_params);
+ set_dev_proc(dev, fill_path, sep1_fill_path);
+
+ return 0;
+}
#define tiffsep_devices_body(dtype, procs, dname, ncomp, pol, depth, mg, mc, sl, cn, print_page, compr)\
std_device_full_body_type_extended(dtype, &procs, dname,\
@@ -812,12 +874,10 @@ gs_private_st_composite_final(st_tiffsep_device, tiffsep_device,
* TIFF devices with CMYK process color model and spot color support.
*/
static const gx_device_procs spot_cmyk_procs =
- sep_device_procs(tiffsep_prn_open, tiffsep_prn_close, tiffsep_encode_color, tiffsep_decode_color,
- tiffsep_update_spot_equivalent_colors, tiffsep_put_params, NULL);
+ devprocs_initialize(tiffsep_initialize);
static const gx_device_procs spot1_cmyk_procs =
- sep_device_procs(tiffsep1_prn_open, tiffsep1_prn_close, tiffsep_encode_color, tiffsep_decode_color,
- tiffsep_update_spot_equivalent_colors, tiffsep1_put_params, sep1_fill_path);
+ devprocs_initialize(tiffsep1_initialize);
const tiffsep_device gs_tiffsep_device =
{
@@ -2989,4 +3049,3 @@ tiff_open_s(gx_device *pdev)
}
return tiff_open(pdev);
}
-
diff --git a/devices/gdevupd.c b/devices/gdevupd.c
index badc80417..58369c7dd 100644
--- a/devices/gdevupd.c
+++ b/devices/gdevupd.c
@@ -218,24 +218,23 @@ prn_std_procs instead of defining their own procedure-table.
#define upd_set_dev_proc(dev, p, proc) \
((dev)->std_procs.p = (dev)->orig_procs.p = (proc))
-static gx_device_procs upd_procs = { /** Table of procedures */
- upd_open, /** open-function, upd-special */
- gx_default_get_initial_matrix, /** retrieve matrix */
- gx_default_sync_output, /** sync display */
- gdev_prn_output_page, /** superclass-print (calls back) */
- upd_close, /** close-function, upd-special */
- gx_default_map_rgb_color, /** RGB-mapping */
- gx_default_map_color_rgb, /** reverse mapping */
- NULL, /** fill_rectangle */
- NULL, /** tile_rectangle */
- NULL, /** copy_mono */
- NULL, /** copy_color */
- NULL, /** draw_line */
- gx_default_get_bits, /** reads scanlines, e.g. for the driver */
- upd_get_params, /** Export parameters, upd-special */
- upd_put_params, /** Import parameters, upd-special */
- gx_default_map_cmyk_color /** KCMY-mapping */
-}; /** */
+static int
+upd_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, upd_open);
+ set_dev_proc(dev, output_page, gdev_prn_output_page);
+ set_dev_proc(dev, close_device, upd_close);
+ set_dev_proc(dev, map_rgb_color, gx_default_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gx_default_map_color_rgb);
+ set_dev_proc(dev, get_params, upd_get_params);
+ set_dev_proc(dev, get_params, upd_put_params);
+ set_dev_proc(dev, map_cmyk_color, gx_default_map_cmyk_color);
+
+ return 0;
+}
+
+static gx_device_procs upd_procs =
+ devprocs_initialize(upd_initialize);
/**
The prototype-instance of the device-structure _must_ have the name
diff --git a/devices/gdevwpr2.c b/devices/gdevwpr2.c
index c91e82a16..f2f14fef3 100644
--- a/devices/gdevwpr2.c
+++ b/devices/gdevwpr2.c
@@ -147,10 +147,26 @@ static dev_proc_put_params(win_pr2_put_params);
static int win_pr2_set_bpp(gx_device * dev, int depth);
+static int
+win_pr2_initialize(gx_device *dev)
+{
+ int code = gdev_prn_initialize(dev);
+
+ if (code < 0)
+ return code;
+
+ set_dev_proc(dev, open_device, win_pr2_open);
+ set_dev_proc(dev, close_device, win_pr2_close);
+ set_dev_proc(dev, map_rgb_color, win_pr2_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, win_pr2_map_color_rgb);
+ set_dev_proc(dev, get_params, win_pr2_get_params);
+ set_dev_proc(dev, put_params, win_pr2_put_params);
+
+ return 0;
+}
+
static const gx_device_procs win_pr2_procs =
-prn_color_params_procs(win_pr2_open, gdev_prn_output_page, win_pr2_close,
- win_pr2_map_rgb_color, win_pr2_map_color_rgb,
- win_pr2_get_params, win_pr2_put_params);
+ devprocs_initialize(win_pr2_initialize);
#define PARENT_WINDOW HWND_DESKTOP
BOOL CALLBACK CancelDlgProc(HWND, UINT, WPARAM, LPARAM);
diff --git a/devices/gdevx.c b/devices/gdevx.c
index f15932e93..8daec3a19 100644
--- a/devices/gdevx.c
+++ b/devices/gdevx.c
@@ -52,106 +52,12 @@ static void update_do_flush(gx_device_X *);
static void do_flush_text(gx_device_X *);
/* Driver procedures */
-/* (External procedures are declared in gdevx.h.) */
-/*extern int gdev_x_open(gx_device_X *);*/
-static dev_proc_open_device(x_open);
-static dev_proc_get_initial_matrix(x_get_initial_matrix);
-static dev_proc_sync_output(x_sync);
-static dev_proc_output_page(x_output_page);
-/*extern int gdev_x_close(gx_device_X *);*/
-static dev_proc_close_device(x_close);
-/*extern dev_proc_map_rgb_color(gdev_x_map_rgb_color);*/
-/*extern dev_proc_map_color_rgb(gdev_x_map_color_rgb);*/
-static dev_proc_fill_rectangle(x_fill_rectangle);
-static dev_proc_copy_mono(x_copy_mono);
-static dev_proc_copy_color(x_copy_color);
-/*extern dev_proc_get_params(gdev_x_get_params);*/
-/*extern dev_proc_put_params(gdev_x_put_params);*/
-static dev_proc_get_page_device(x_get_page_device);
-static dev_proc_strip_tile_rectangle(x_strip_tile_rectangle);
-static dev_proc_get_bits_rectangle(x_get_bits_rectangle);
-/*extern dev_proc_get_xfont_procs(gdev_x_initialize);*/
-static dev_proc_fillpage(x_fillpage);
/* The device descriptor */
#define x_device(this_device, dev_body) \
const gx_device_X this_device = { \
dev_body, \
- { /* std_procs */ \
- x_open, \
- x_get_initial_matrix, \
- x_sync, \
- x_output_page, \
- x_close, \
- gdev_x_map_rgb_color, \
- gdev_x_map_color_rgb, \
- x_fill_rectangle, \
- NULL, /* tile_rectangle */ \
- x_copy_mono, \
- x_copy_color, \
- NULL, /* draw_line */ \
- NULL, /* get_bits */ \
- gdev_x_get_params, \
- gdev_x_put_params, \
- NULL, /* map_cmyk_color */ \
- NULL, \
- NULL, /* get_xfont_device */ \
- NULL, /* map_rgb_alpha_color */ \
- x_get_page_device, \
- NULL, /* get_alpha_bits */ \
- NULL, /* copy_alpha */ \
- NULL, /* get_band */ \
- NULL, /* copy_rop */ \
- NULL, /* fill_path */ \
- NULL, /* stroke_path */ \
- NULL, /* fill_mask */ \
- NULL, /* fill_trapezoid */ \
- NULL, /* fill_parallelogram */ \
- NULL, /* fill_triangle */ \
- NULL, /* draw_thin_line */ \
- NULL, /* begin_image */ \
- NULL, /* image_data */ \
- NULL, /* end_image */ \
- x_strip_tile_rectangle, \
- NULL, /* strip_copy_rop */ \
- NULL, /* get_clipping_box */ \
- NULL, /* begin_typed_image */ \
- x_get_bits_rectangle, \
- NULL, /* map_color_rgb_alpha */ \
- NULL, /* create_compositor */ \
- NULL, /* get_hardware_params */ \
- NULL, /* text_begin */ \
- gdev_x_initialize, \
- NULL, /* begin_transparency_group */ \
- NULL, /* end_transparency_group */ \
- NULL, /* begin_transparency_mask */ \
- NULL, /* end_transparency_mask */ \
- NULL, /* discard_transparency_layer */ \
- NULL, /* get_color_mapping_procs */ \
- NULL, /* get_color_comp_index */ \
- NULL, /* encode_color */ \
- NULL, /* decode_color */ \
- NULL, /* pattern_manage */ \
- NULL, /* fill_rectangle_hl_color */ \
- NULL, /* include_color_space */ \
- NULL, /* fill_linear_color_scanline */ \
- NULL, /* fill_linear_color_trapezoid */ \
- NULL, /* fill_linear_color_triangle */ \
- NULL, /* update_spot_equivalent_colors */ \
- NULL, /* ret_devn_params */ \
- x_fillpage, /* fillpage */ \
- NULL, /* push_transparency_state */ \
- NULL, /* pop_transparency_state */ \
- NULL, /* put_image */ \
- NULL, /* dev_spec_op */ \
- NULL, /* copy_planes */ \
- NULL, /* get_profile */ \
- NULL, /* set_graphics_type_tag */ \
- NULL, \
- NULL, \
- NULL, \
- NULL \
- }, \
+ devprocs_initialize(gdev_x_initialize), \
gx_device_bbox_common_initial(0 /*false*/, 1 /*true*/, 1 /*true*/), \
0 /*false*/, /* is_buffered */ \
1 /*true*/, /* IsPageDevice */ \
@@ -284,7 +190,7 @@ GC gc, XImage * pi, int sx, int sy, int dx, int dy, unsigned w, unsigned h);
END
/* Open the device. Most of the code is in gdevxini.c. */
-static int
+int
x_open(gx_device * dev)
{
gx_device_X *xdev = (gx_device_X *) dev;
@@ -310,7 +216,7 @@ x_open(gx_device * dev)
}
/* Close the device. */
-static int
+int
x_close(gx_device * dev)
{
gx_device_X *xdev = (gx_device_X *) dev;
@@ -321,7 +227,7 @@ x_close(gx_device * dev)
/* Get initial matrix for X device. */
/* This conflicts seriously with the code for page devices; */
/* we only do it if Ghostview is active. */
-static void
+void
x_get_initial_matrix(gx_device * dev, gs_matrix * pmat)
{
gx_device_X *xdev = (gx_device_X *) dev;
@@ -339,7 +245,7 @@ x_get_initial_matrix(gx_device * dev, gs_matrix * pmat)
}
/* Synchronize the display with the commands already given. */
-static int
+int
x_sync(gx_device * dev)
{
gx_device_X *xdev = (gx_device_X *) dev;
@@ -366,7 +272,7 @@ gdev_x_send_event(gx_device_X *xdev, Atom msg)
}
/* Output "page" */
-static int
+int
x_output_page(gx_device * dev, int num_copies, int flush)
{
gx_device_X *xdev = (gx_device_X *) dev;
@@ -389,7 +295,7 @@ x_output_page(gx_device * dev, int num_copies, int flush)
}
/* Fill a rectangle with a color. */
-static int
+int
x_fill_rectangle(gx_device * dev,
int x, int y, int w, int h, gx_color_index gscolor)
{
@@ -420,7 +326,7 @@ x_fill_rectangle(gx_device * dev,
}
/* Copy a monochrome bitmap. */
-static int
+int
x_copy_mono(gx_device * dev,
const byte * base, int sourcex, int raster, gx_bitmap_id id,
int x, int y, int w, int h,
@@ -642,7 +548,8 @@ x_copy_image(gx_device_X * xdev, const byte * base, int sourcex, int raster,
}
return 0;
}
-static int
+
+int
x_copy_color(gx_device * dev,
const byte * base, int sourcex, int raster, gx_bitmap_id id,
int x, int y, int w, int h)
@@ -662,14 +569,14 @@ x_copy_color(gx_device * dev,
/* Get the page device. We reimplement this so that we can make this */
/* device be a page device conditionally. */
-static gx_device *
+gx_device *
x_get_page_device(gx_device * dev)
{
return (((gx_device_X *) dev)->IsPageDevice ? dev : (gx_device *) 0);
}
/* Tile a rectangle. */
-static int
+int
x_strip_tile_rectangle(gx_device * dev, const gx_strip_bitmap * tiles,
int x, int y, int w, int h,
gx_color_index zero, gx_color_index one,
@@ -751,7 +658,7 @@ x_strip_tile_rectangle(gx_device * dev, const gx_strip_bitmap * tiles,
}
/* Read bits back from the screen. */
-static int
+int
x_get_bits_rectangle(gx_device * dev, const gs_int_rect * prect,
gs_get_bits_params_t * params, gs_int_rect ** unread)
{
@@ -947,7 +854,7 @@ x_get_bits_rectangle(gx_device * dev, const gs_int_rect * prect,
/* Supplying a fillpage prevents the erasepage optimisation
device being installed.
*/
-static int
+int
x_fillpage(gx_device *dev, gs_gstate * pgs, gx_device_color *pdevc)
{
return gx_default_fillpage(dev, pgs, pdevc);
diff --git a/devices/gdevx.h b/devices/gdevx.h
index 05c6d2ab1..03defc609 100644
--- a/devices/gdevx.h
+++ b/devices/gdevx.h
@@ -228,5 +228,18 @@ dev_proc_map_color_rgb(gdev_x_map_color_rgb); /* gdevxcmp.c */
dev_proc_get_params(gdev_x_get_params); /* gdevxini.c */
dev_proc_put_params(gdev_x_put_params); /* gdevxini.c */
dev_proc_initialize(gdev_x_initialize); /* gdevxini.c */
+dev_proc_open_device(x_open);
+dev_proc_get_initial_matrix(x_get_initial_matrix);
+dev_proc_sync_output(x_sync);
+dev_proc_output_page(x_output_page);
+dev_proc_close_device(x_close);
+dev_proc_fill_rectangle(x_fill_rectangle);
+dev_proc_copy_mono(x_copy_mono);
+dev_proc_copy_color(x_copy_color);
+dev_proc_get_page_device(x_get_page_device);
+dev_proc_strip_tile_rectangle(x_strip_tile_rectangle);
+dev_proc_get_bits_rectangle(x_get_bits_rectangle);
+dev_proc_fillpage(x_fillpage);
+
#endif /* gdevx_INCLUDED */
diff --git a/devices/gdevxalt.c b/devices/gdevxalt.c
index 0290c8c60..92b71ce7a 100644
--- a/devices/gdevxalt.c
+++ b/devices/gdevxalt.c
@@ -546,32 +546,35 @@ static dev_proc_put_params(x_cmyk_put_params);
static dev_proc_map_cmyk_color(x_cmyk_map_cmyk_color);
/* Extended device procedures */
static dev_proc_map_color_rgb(x_cmyk_alt_map_color);
+extern dev_proc_output_page(x_output_page);
+
+static int
+x_cmyk_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, x_cmyk_open);
+ set_dev_proc(dev, get_initial_matrix, gx_forward_get_initial_matrix);
+ set_dev_proc(dev, sync_output, x_forward_sync_output);
+ set_dev_proc(dev, output_page, x_output_page);
+ set_dev_proc(dev, close_device, x_wrap_close);
+ set_dev_proc(dev, map_color_rgb, x_wrap_map_color_rgb);
+ set_dev_proc(dev, fill_rectangle, x_wrap_fill_rectangle);
+ set_dev_proc(dev, copy_mono, x_wrap_copy_mono);
+ set_dev_proc(dev, copy_color, x_wrap_copy_color);
+ set_dev_proc(dev, get_bits, x_wrap_get_bits);
+ set_dev_proc(dev, get_params, x_wrap_get_params);
+ set_dev_proc(dev, put_params, x_cmyk_put_params);
+ set_dev_proc(dev, map_cmyk_color, x_cmyk_map_cmyk_color);
+ set_dev_proc(dev, get_xfont_procs, gx_forward_get_xfont_procs);
+ set_dev_proc(dev, get_xfont_device, gx_forward_get_xfont_device);
+ set_dev_proc(dev, get_page_device, gx_forward_get_page_device);
+ set_dev_proc(dev, get_alpha_bits, gx_forward_get_alpha_bits);
+
+ return 0;
+}
/* The device descriptor */
-static const gx_device_procs x_cmyk_procs = {
- x_cmyk_open,
- gx_forward_get_initial_matrix,
- x_forward_sync_output,
- x_forward_output_page,
- x_wrap_close,
- NULL, /* map_rgb_color */
- x_wrap_map_color_rgb,
- x_wrap_fill_rectangle,
- gx_default_tile_rectangle,
- x_wrap_copy_mono,
- x_wrap_copy_color,
- gx_default_draw_line,
- x_wrap_get_bits,
- x_wrap_get_params,
- x_cmyk_put_params,
- x_cmyk_map_cmyk_color,
- gx_forward_get_xfont_procs,
- gx_forward_get_xfont_device,
- NULL, /* map_rgb_alpha_color */
- gx_forward_get_page_device,
- gx_forward_get_alpha_bits,
- NULL /* copy_alpha */
-};
+static const gx_device_procs x_cmyk_procs =
+ devprocs_initialize(x_cmyk_initialize);
/* The instances are public. */
const gx_device_X_wrapper gs_x11cmyk_device = {
@@ -679,30 +682,31 @@ x_cmyk_map_cmyk_color(gx_device * dev, const gx_color_value cv[])
static dev_proc_map_color_rgb(x_mono_alt_map_color);
/* The device descriptor */
-static const gx_device_procs x_mono_procs = {
- x_wrap_open,
- gx_forward_get_initial_matrix,
- x_forward_sync_output,
- x_forward_output_page,
- x_wrap_close,
- gx_default_b_w_map_rgb_color,
- x_wrap_map_color_rgb,
- x_wrap_fill_rectangle,
- gx_default_tile_rectangle,
- x_wrap_copy_mono,
- gx_default_copy_color, /* this is fast for the 1-bit case */
- gx_default_draw_line,
- x_wrap_get_bits,
- x_wrap_get_params,
- x_wrap_put_params,
- gx_default_map_cmyk_color,
- gx_forward_get_xfont_procs,
- gx_forward_get_xfont_device,
- NULL, /* map_rgb_alpha_color */
- gx_forward_get_page_device,
- gx_forward_get_alpha_bits,
- NULL /* copy_alpha */
-};
+static int
+x_mono_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, x_wrap_open);
+ set_dev_proc(dev, get_initial_matrix, gx_forward_get_initial_matrix);
+ set_dev_proc(dev, sync_output, x_forward_sync_output);
+ set_dev_proc(dev, output_page, x_forward_output_page);
+ set_dev_proc(dev, close_device, x_wrap_close);
+ set_dev_proc(dev, map_rgb_color, gx_default_b_w_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, x_wrap_map_color_rgb);
+ set_dev_proc(dev, fill_rectangle, x_wrap_fill_rectangle);
+ set_dev_proc(dev, copy_mono, x_wrap_copy_mono);
+ set_dev_proc(dev, get_bits, x_wrap_get_bits);
+ set_dev_proc(dev, get_params, x_wrap_get_params);
+ set_dev_proc(dev, put_params, x_wrap_put_params);
+ set_dev_proc(dev, get_xfont_procs, gx_forward_get_xfont_procs);
+ set_dev_proc(dev, get_xfont_device, gx_forward_get_xfont_device);
+ set_dev_proc(dev, get_page_device, gx_forward_get_page_device);
+ set_dev_proc(dev, get_alpha_bits, gx_forward_get_alpha_bits);
+
+ return 0;
+}
+
+static const gx_device_procs x_mono_procs =
+ devprocs_initialize(x_mono_initialize);
/* The instance is public. */
const gx_device_X_wrapper gs_x11mono_device = {
@@ -729,30 +733,32 @@ x_mono_alt_map_color(gx_device * dev, gx_color_index color,
static dev_proc_map_color_rgb(x_gray_alt_map_color);
/* The device descriptor */
-static const gx_device_procs x_gray_procs = {
- x_wrap_open,
- gx_forward_get_initial_matrix,
- x_forward_sync_output,
- x_forward_output_page,
- x_wrap_close,
- gx_default_gray_map_rgb_color,
- x_wrap_map_color_rgb,
- x_wrap_fill_rectangle,
- gx_default_tile_rectangle,
- x_wrap_copy_mono,
- x_wrap_copy_color,
- gx_default_draw_line,
- x_wrap_get_bits,
- x_wrap_get_params,
- x_wrap_put_params,
- gx_default_map_cmyk_color,
- gx_forward_get_xfont_procs,
- gx_forward_get_xfont_device,
- NULL, /* map_rgb_alpha_color */
- gx_forward_get_page_device,
- gx_forward_get_alpha_bits,
- NULL /* copy_alpha */
-};
+static int
+x_gray_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, x_wrap_open);
+ set_dev_proc(dev, get_initial_matrix, gx_forward_get_initial_matrix);
+ set_dev_proc(dev, sync_output, x_forward_sync_output);
+ set_dev_proc(dev, output_page, x_forward_output_page);
+ set_dev_proc(dev, close_device, x_wrap_close);
+ set_dev_proc(dev, map_rgb_color, gx_default_gray_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, x_wrap_map_color_rgb);
+ set_dev_proc(dev, fill_rectangle, x_wrap_fill_rectangle);
+ set_dev_proc(dev, copy_mono, x_wrap_copy_mono);
+ set_dev_proc(dev, copy_color, x_wrap_copy_color);
+ set_dev_proc(dev, get_bits, x_wrap_get_bits);
+ set_dev_proc(dev, get_params, x_wrap_get_params);
+ set_dev_proc(dev, put_params, x_wrap_put_params);
+ set_dev_proc(dev, get_xfont_procs, gx_forward_get_xfont_procs);
+ set_dev_proc(dev, get_xfont_device, gx_forward_get_xfont_device);
+ set_dev_proc(dev, get_page_device, gx_forward_get_page_device);
+ set_dev_proc(dev, get_alpha_bits, gx_forward_get_alpha_bits);
+
+ return 0;
+}
+
+static const gx_device_procs x_gray_procs =
+ devprocs_initialize(x_gray_initialize);
/* The instances are public. */
const gx_device_X_wrapper gs_x11gray2_device = {
@@ -810,33 +816,41 @@ static dev_proc_map_color_rgb(x_rg16x_alt_map_color);
static dev_proc_map_color_rgb(x_rg32x_alt_map_color);
/* The device descriptor */
-#define RGBX_PROCS(map_rgb_proc)\
- x_wrap_open,\
- gx_forward_get_initial_matrix,\
- x_forward_sync_output,\
- x_forward_output_page,\
- x_wrap_close,\
- map_rgb_proc, /* differs */\
- x_wrap_map_color_rgb,\
- x_wrap_fill_rectangle,\
- gx_default_tile_rectangle,\
- x_wrap_copy_mono,\
- x_forward_copy_color,\
- gx_default_draw_line,\
- x_forward_get_bits,\
- x_wrap_get_params,\
- x_wrap_put_params,\
- gx_forward_map_cmyk_color,\
- gx_forward_get_xfont_procs,\
- gx_forward_get_xfont_device,\
- x_alpha_map_rgb_alpha_color,\
- gx_forward_get_page_device,\
- gx_default_get_alpha_bits,\
- gx_default_copy_alpha
-
-static const gx_device_procs x_rg16x_procs = {
- RGBX_PROCS(x_rg16x_map_rgb_color)
-};
+static int
+rgbx_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, x_wrap_open);
+ set_dev_proc(dev, get_initial_matrix, gx_forward_get_initial_matrix);
+ set_dev_proc(dev, sync_output, x_forward_sync_output);
+ set_dev_proc(dev, output_page, x_forward_output_page);
+ set_dev_proc(dev, close_device, x_wrap_close);
+ set_dev_proc(dev, map_color_rgb, x_wrap_map_color_rgb);
+ set_dev_proc(dev, fill_rectangle, x_wrap_fill_rectangle);
+ set_dev_proc(dev, copy_mono, x_wrap_copy_mono);
+ set_dev_proc(dev, copy_color, x_forward_copy_color);
+ set_dev_proc(dev, get_bits, x_forward_get_bits);
+ set_dev_proc(dev, get_params, x_wrap_get_params);
+ set_dev_proc(dev, put_params, x_wrap_put_params);
+ set_dev_proc(dev, map_cmyk_color, gx_forward_map_cmyk_color);
+ set_dev_proc(dev, get_xfont_procs, gx_forward_get_xfont_procs);
+ set_dev_proc(dev, get_xfont_device, gx_forward_get_xfont_device);
+ set_dev_proc(dev, map_rgb_alpha_color, x_alpha_map_rgb_alpha_color);
+ set_dev_proc(dev, get_page_device, gx_forward_get_page_device);
+
+ return 0;
+}
+
+static int
+x_rg16x_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, map_rgb_color, x_rg16x_map_rgb_color);
+
+ return rgbx_initialize(dev);
+}
+
+static const gx_device_procs x_rg16x_procs =
+ devprocs_initialize(x_rg16x_initialize);
+
const gx_device_X_wrapper gs_x11rg16x_device = {
std_device_dci_type_body(gx_device_X_wrapper, &x_rg16x_procs, "x11rg16x",
&st_device_X_wrapper,
@@ -846,9 +860,17 @@ const gx_device_X_wrapper gs_x11rg16x_device = {
X_WRAPPER_DATA(x_rg16x_alt_map_color)
};
-static const gx_device_procs x_rg32x_procs = {
- RGBX_PROCS(x_rg32x_map_rgb_color)
-};
+static int
+x_rg32x_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, map_rgb_color, x_rg32x_map_rgb_color);
+
+ return rgbx_initialize(dev);
+}
+
+static const gx_device_procs x_rg32x_procs =
+ devprocs_initialize(x_rg32x_initialize);
+
const gx_device_X_wrapper gs_x11rg32x_device = {
std_device_dci_type_body(gx_device_X_wrapper, &x_rg32x_procs, "x11rg32x",
&st_device_X_wrapper,
diff --git a/devices/gdevxcf.c b/devices/gdevxcf.c
index 86b635e57..3ffae2b72 100644
--- a/devices/gdevxcf.c
+++ b/devices/gdevxcf.c
@@ -135,67 +135,36 @@ typedef struct xcf_device_s {
/*
* Macro definition for DeviceN procedures
*/
-#define device_procs(get_color_mapping_procs)\
-{ gdev_prn_open,\
- gx_default_get_initial_matrix,\
- NULL, /* sync_output */\
- /* Since the print_page doesn't alter the device, this device can print in the background */\
- gdev_prn_bg_output_page, /* output_page */\
- xcf_prn_close, /* close */\
- NULL, /* map_rgb_color - not used */\
- xcf_map_color_rgb, /* map_color_rgb */\
- NULL, /* fill_rectangle */\
- NULL, /* tile_rectangle */\
- NULL, /* copy_mono */\
- NULL, /* copy_color */\
- NULL, /* draw_line */\
- NULL, /* get_bits */\
- xcf_get_params, /* get_params */\
- xcf_put_params, /* put_params */\
- NULL, /* map_cmyk_color - not used */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- gx_page_device_get_page_device, /* get_page_device */\
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- NULL, /* fill_path */\
- NULL, /* stroke_path */\
- NULL, /* fill_mask */\
- NULL, /* fill_trapezoid */\
- NULL, /* fill_parallelogram */\
- NULL, /* fill_triangle */\
- NULL, /* draw_thin_line */\
- NULL, /* begin_image */\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- NULL, /* initialize */\
- NULL, /* begin_transparency_group */\
- NULL, /* end_transparency_group */\
- NULL, /* begin_transparency_mask */\
- NULL, /* end_transparency_mask */\
- NULL, /* discard_transparency_layer */\
- get_color_mapping_procs, /* get_color_mapping_procs */\
- xcf_get_color_comp_index, /* get_color_comp_index */\
- xcf_encode_color, /* encode_color */\
- xcf_decode_color /* decode_color */\
+static int
+xcf_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, gdev_prn_open);
+ set_dev_proc(dev, output_page, gdev_prn_bg_output_page);
+ set_dev_proc(dev, close_device, xcf_prn_close);
+ set_dev_proc(dev, map_color_rgb, xcf_map_color_rgb);
+ set_dev_proc(dev, get_params, xcf_get_params);
+ set_dev_proc(dev, put_params, xcf_put_params);
+ set_dev_proc(dev, get_page_device, gx_page_device_get_page_device);
+ set_dev_proc(dev, get_color_comp_index, xcf_get_color_comp_index);
+ set_dev_proc(dev, encode_color, xcf_encode_color);
+ set_dev_proc(dev, decode_color, xcf_decode_color);
+
+ return 0;
+}
+
+static int
+spot_rgb_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, get_color_mapping_procs, get_spotrgb_color_mapping_procs);
+
+ return xcf_initialize(dev);
}
/*
* Example device with RGB and spot color support
*/
-static const gx_device_procs spot_rgb_procs = device_procs(get_spotrgb_color_mapping_procs);
+static const gx_device_procs spot_rgb_procs =
+ devprocs_initialize(spot_rgb_initialize);
const xcf_device gs_xcf_device =
{
@@ -219,7 +188,16 @@ const xcf_device gs_xcf_device =
{0} /* SeparationOrder names */
};
-static const gx_device_procs spot_cmyk_procs = device_procs(get_xcf_color_mapping_procs);
+static int
+spot_cmyk_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, get_color_mapping_procs, get_xcf_color_mapping_procs);
+
+ return xcf_initialize(dev);
+}
+
+static const gx_device_procs spot_cmyk_procs =
+ devprocs_initialize(spot_cmyk_initialize);
const xcf_device gs_xcfcmyk_device =
{
diff --git a/devices/gdevxini.c b/devices/gdevxini.c
index 4fd7992d0..039c09954 100644
--- a/devices/gdevxini.c
+++ b/devices/gdevxini.c
@@ -754,12 +754,29 @@ gdev_x_clear_window(gx_device_X * xdev)
}
-/* Clean up the instance after making a copy. */
+/* (External procedures are declared in gdevx.h.) */
int
gdev_x_initialize(gx_device *dev)
{
gx_device_X *xdev = (gx_device_X *) dev;
+ set_dev_proc(dev, open_device, x_open);
+ set_dev_proc(dev, get_initial_matrix, x_get_initial_matrix);
+ set_dev_proc(dev, sync_output, x_sync);
+ set_dev_proc(dev, output_page, x_output_page);
+ set_dev_proc(dev, close_device, x_close);
+ set_dev_proc(dev, map_rgb_color, gdev_x_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gdev_x_map_color_rgb);
+ set_dev_proc(dev, fill_rectangle, x_fill_rectangle);
+ set_dev_proc(dev, copy_mono, x_copy_mono);
+ set_dev_proc(dev, copy_color, x_copy_color);
+ set_dev_proc(dev, get_params, gdev_x_get_params);
+ set_dev_proc(dev, put_params, gdev_x_put_params);
+ set_dev_proc(dev, get_page_device, x_get_page_device);
+ set_dev_proc(dev, strip_tile_rectangle, x_strip_tile_rectangle);
+ set_dev_proc(dev, get_bits_rectangle, x_get_bits_rectangle);
+ set_dev_proc(dev, fillpage, x_fillpage);
+
/* Mark the new instance as closed. */
xdev->is_open = false;
diff --git a/devices/vector/gdevdocxw.c b/devices/vector/gdevdocxw.c
index cc0590602..ec6c34d99 100644
--- a/devices/vector/gdevdocxw.c
+++ b/devices/vector/gdevdocxw.c
@@ -144,6 +144,26 @@ typedef struct {
private_st_textw_text_enum();
+static int
+docxwrite_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, docxwrite_open_device);
+ set_dev_proc(dev, output_page, docxwrite_output_page);
+ set_dev_proc(dev, close_device, docxwrite_close_device);
+ set_dev_proc(dev, fill_rectangle, docxwrite_fill_rectangle);
+ set_dev_proc(dev, get_params, docxwrite_get_params);
+ set_dev_proc(dev, put_params, docxwrite_put_params);
+ set_dev_proc(dev, get_page_device, gx_page_device_get_page_device);
+ set_dev_proc(dev, fill_path, docxwrite_fill_path);
+ set_dev_proc(dev, stroke_path, docxwrite_stroke_path);
+ set_dev_proc(dev, strip_copy_rop, docxwrite_strip_copy_rop);
+ set_dev_proc(dev, create_compositor, gx_null_create_compositor);
+ set_dev_proc(dev, text_begin, docxwrite_text_begin);
+ set_dev_proc(dev, dev_spec_op, docxwrite_dev_spec_op);
+
+ return 0;
+}
+
const gx_device_docxwrite_t gs_docxwrite_device =
{
/* Define the device as 8-bit gray scale to avoid computing halftones. */
@@ -152,78 +172,7 @@ const gx_device_docxwrite_t gs_docxwrite_device =
DEFAULT_HEIGHT_10THS * Y_DPI / 10,
X_DPI, Y_DPI,
1, 8, 255, 0, 256, 1),
- {docxwrite_open_device,
- NULL, /*gx_upright_get_initial_matrix,*/
- NULL, /*gx_default_sync_output,*/
- docxwrite_output_page,
- docxwrite_close_device,
- NULL, /*gx_default_gray_map_rgb_color,*/
- NULL, /*gx_default_gray_map_color_rgb,*/
- docxwrite_fill_rectangle, /* Can't be NULL and there is no gx_default_fill_rectangle! */
- NULL, /*gx_default_tile_rectangle,*/
- NULL, /*gx_default_copy_mono,*/
- NULL, /*gx_default_copy_color,*/
- NULL, /*gx_default_draw_line,*/
- NULL, /*gx_default_get_bits,*/
- docxwrite_get_params,
- docxwrite_put_params,
- NULL, /*gx_default_map_cmyk_color,*/
- NULL, /*gx_default_get_xfont_procs,*/
- NULL, /*gx_default_get_xfont_device,*/
- NULL, /*gx_default_map_rgb_alpha_color,*/
- gx_page_device_get_page_device, /*gx_page_device_get_page_device,*/
- NULL, /* get_alpha_bits */
- NULL, /*gx_default_copy_alpha,*/
- NULL, /* get_band */
- NULL, /* copy_rop */
- docxwrite_fill_path,
- docxwrite_stroke_path,
- NULL, /*gx_default_fill_mask,*/
- NULL, /*gx_default_fill_trapezoid,*/
- NULL, /*gx_default_fill_parallelogram,*/
- NULL, /*gx_default_fill_triangle,*/
- NULL, /*gx_default_draw_thin_line,*/
- NULL, /* begin image */
- NULL, /* image_data */
- NULL, /* end_image */
- NULL, /*gx_default_strip_tile_rectangle,*/
- docxwrite_strip_copy_rop,
- NULL, /* get_clipping_box */
- NULL, /* docxwrite_begin_typed_image */
- NULL, /* get_bits_rectangle */
- NULL, /*gx_default_map_color_rgb_alpha,*/
- gx_null_create_compositor,
- NULL, /* get_hardware_params */
- docxwrite_text_begin,
- NULL, /* initialize */
- NULL, /* begin_transparency_group */
- NULL, /* end_transparency_group */
- NULL, /* begin_transparency_mask */
- NULL, /* end_transparency_mask */
- NULL, /* discard_transparency_layer */
- NULL, /* get_color_mapping_procs */
- NULL, /* get_color_comp_index */
- NULL, /* encode_color */
- NULL, /* decode_color */
- NULL, /* pattern manager */
- NULL, /* fill_rectangle_hl_color */
- NULL, /* include_color_space */
- NULL, /* fill_linear_color_scanline */
- NULL, /* fill_linear_color_trapezoid */
- NULL, /* fill_linear_color_triangle */
- NULL, /* update_spot_equivalent_colors */
- NULL, /* ret_devn_params */
- NULL, /* fillpage */
- NULL, /* push_transparency_state */
- NULL, /* pop_transparency_state */
- NULL, /* put_image */
- docxwrite_dev_spec_op, /* dev_spec_op */
- NULL, /* copy_planes */
- NULL, /* get_profile */
- NULL, /* set_graphics_type_tag */
- NULL, /* strip_copy_rop2 */
- NULL /* strip_tile_rect_devn */
- },
+ devprocs_initialize(docxwrite_initialize),
{ 0 }, /* Page Data */
0, /* Output FILE * */
0, /* TextFormat */
diff --git a/devices/vector/gdevpdf.c b/devices/vector/gdevpdf.c
index 116a9ed82..736162504 100644
--- a/devices/vector/gdevpdf.c
+++ b/devices/vector/gdevpdf.c
@@ -220,6 +220,43 @@ static dev_proc_close_device(pdf_close);
/* ---------------- Device prototype ---------------- */
+static int
+pdfwrite_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, pdf_open);
+ set_dev_proc(dev, get_initial_matrix, gx_upright_get_initial_matrix);
+ set_dev_proc(dev, output_page, pdf_output_page);
+ set_dev_proc(dev, close_device, pdf_close);
+ set_dev_proc(dev, map_rgb_color, gx_default_rgb_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gx_default_rgb_map_color_rgb);
+ set_dev_proc(dev, fill_rectangle, gdev_pdf_fill_rectangle);
+ set_dev_proc(dev, copy_mono, gdev_pdf_copy_mono);
+ set_dev_proc(dev, copy_color, gdev_pdf_copy_color);
+ set_dev_proc(dev, get_bits, psdf_get_bits);
+ set_dev_proc(dev, get_params, gdev_pdf_get_params);
+ set_dev_proc(dev, put_params, gdev_pdf_put_params);
+ set_dev_proc(dev, get_page_device, gx_page_device_get_page_device);
+ set_dev_proc(dev, fill_path, gdev_pdf_fill_path);
+ set_dev_proc(dev, stroke_path, gdev_pdf_stroke_path);
+ set_dev_proc(dev, fill_mask, gdev_pdf_fill_mask);
+ set_dev_proc(dev, strip_tile_rectangle, gdev_pdf_strip_tile_rectangle);
+ set_dev_proc(dev, begin_typed_image, gdev_pdf_begin_typed_image);
+ set_dev_proc(dev, get_bits_rectangle, psdf_get_bits_rectangle);
+ set_dev_proc(dev, create_compositor, gdev_pdf_create_compositor);
+ set_dev_proc(dev, text_begin, gdev_pdf_text_begin);
+ set_dev_proc(dev, begin_transparency_group, gdev_pdf_begin_transparency_group);
+ set_dev_proc(dev, end_transparency_group, gdev_pdf_end_transparency_group);
+ set_dev_proc(dev, begin_transparency_mask ,gdev_pdf_begin_transparency_mask);
+ set_dev_proc(dev, end_transparency_mask, gdev_pdf_end_transparency_mask);
+ set_dev_proc(dev, fill_rectangle_hl_color, gdev_pdf_fill_rectangle_hl_color);
+ set_dev_proc(dev, include_color_space, gdev_pdf_include_color_space);
+ set_dev_proc(dev, fillpage, gdev_pdf_fillpage);
+ set_dev_proc(dev, dev_spec_op, gdev_pdf_dev_spec_op);
+ set_dev_proc(dev, fill_stroke_path, gdev_pdf_fill_stroke_path);
+
+ return 0;
+}
+
#define PDF_DEVICE_NAME "pdfwrite"
#define PDF_DEVICE_IDENT gs_pdfwrite_device
#define PDF_DEVICE_MaxInlineImageSize 4000
diff --git a/devices/vector/gdevpdfb.h b/devices/vector/gdevpdfb.h
index d218e104b..b3039a7e8 100644
--- a/devices/vector/gdevpdfb.h
+++ b/devices/vector/gdevpdfb.h
@@ -33,82 +33,7 @@ const gx_device_pdf PDF_DEVICE_IDENT =
DEFAULT_HEIGHT_10THS * Y_DPI / 10,
X_DPI, Y_DPI,
3, 24, 255, 255, 256, 256),
- {pdf_open,
- gx_upright_get_initial_matrix,
- NULL, /* sync_output */
- pdf_output_page,
- pdf_close,
- gx_default_rgb_map_rgb_color,
- gx_default_rgb_map_color_rgb,
- gdev_pdf_fill_rectangle,
- NULL, /* tile_rectangle */
- gdev_pdf_copy_mono,
- gdev_pdf_copy_color,
- NULL, /* draw_line */
- psdf_get_bits, /* get_bits */
- gdev_pdf_get_params,
- gdev_pdf_put_params,
- NULL, /* map_cmyk_color */
- NULL, /* get_xfont_procs */
- NULL, /* get_xfont_device */
- NULL, /* map_rgb_alpha_color */
- gx_page_device_get_page_device,
- NULL, /* get_alpha_bits */
- NULL, /* copy_alpha */
- NULL, /* get_band */
- NULL, /* copy_rop */
- gdev_pdf_fill_path,
- gdev_pdf_stroke_path,
- gdev_pdf_fill_mask,
- NULL, /* fill_trapezoid */
- NULL, /* fill_parallelogram */
- NULL, /* fill_triangle */
- NULL, /* draw_thin_line */
- NULL, /* begin_image */
- NULL, /* image_data */
- NULL, /* end_image */
- gdev_pdf_strip_tile_rectangle,
- NULL, /* strip_copy_rop */
- NULL, /* get_clipping_box */
- gdev_pdf_begin_typed_image,
- psdf_get_bits_rectangle, /* get_bits_rectangle */
- NULL, /* map_color_rgb_alpha */
- gdev_pdf_create_compositor, /* create_compositor */
- NULL, /* get_hardware_params */
- gdev_pdf_text_begin,
- NULL, /* initialize */
- gdev_pdf_begin_transparency_group, /* begin_transparency_group */
- gdev_pdf_end_transparency_group, /* end_transparency_group */
- gdev_pdf_begin_transparency_mask, /* begin_transparency_mask */
- gdev_pdf_end_transparency_mask, /* end_transparency_mask */
- NULL, /* discard_transparency_layer */
- NULL, /* get_color_mapping_procs */
- NULL, /* get_color_comp_index */
- NULL, /* encode_color */
- NULL, /* decode_color */
- NULL, /* pattern_manage */
- gdev_pdf_fill_rectangle_hl_color, /* fill_rectangle_hl_color */
- gdev_pdf_include_color_space, /* include_color_space */
- NULL, /* fill_linear_color_scanline */
- NULL, /* fill_linear_color_trapezoid */
- NULL, /* fill_linear_color_triangle */
- NULL, /* update_spot_equivalent_colors */
- NULL, /* ret_devn_params */
- gdev_pdf_fillpage, /* fillpage */
- NULL, /* push_transparency_state */
- NULL, /* pop_transparency_state */
- NULL, /* put_image */
- gdev_pdf_dev_spec_op, /* dev_spec_op */
- NULL, /* copy_planes */
- NULL, /* get_profile */
- NULL, /* set_graphics_type_tag */
- NULL, /* strip_copy_rop2 */
- NULL, /* strip_tile_rect_devn */
- NULL, /* copy_alpha_hl_color */
- NULL, /* process_page */
- NULL, /* transform_pixel_region */
- gdev_pdf_fill_stroke_path /* fill_stroke_path */
- },
+ devprocs_initialize(pdfwrite_initialize),
psdf_initial_values(PSDF_VERSION_INITIAL, 0 /*false */ ), /* (!ASCII85EncodePages) */
0, /* pdf_font_dir */
PDF_FOR_OPDFREAD, /* is_ps2write */
diff --git a/devices/vector/gdevpx.c b/devices/vector/gdevpx.c
index 2002219d0..1b34c42fb 100644
--- a/devices/vector/gdevpx.c
+++ b/devices/vector/gdevpx.c
@@ -146,56 +146,58 @@ static dev_proc_put_params(pclxl_put_params);
static dev_proc_begin_image(pclxl_begin_image);
static dev_proc_strip_copy_rop(pclxl_strip_copy_rop);
-#define pclxl_device_procs(map_rgb_color, map_color_rgb)\
-{\
- pclxl_open_device,\
- NULL, /* get_initial_matrix */\
- NULL, /* sync_output */\
- pclxl_output_page,\
- pclxl_close_device,\
- map_rgb_color, /* differs */\
- map_color_rgb, /* differs */\
- gdev_vector_fill_rectangle,\
- NULL, /* tile_rectangle */\
- pclxl_copy_mono,\
- pclxl_copy_color,\
- NULL, /* draw_line */\
- NULL, /* get_bits */\
- pclxl_get_params,\
- pclxl_put_params,\
- NULL, /* map_cmyk_color */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- gx_page_device_get_page_device,\
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- gdev_vector_fill_path,\
- gdev_vector_stroke_path,\
- pclxl_fill_mask,\
- gdev_vector_fill_trapezoid,\
- gdev_vector_fill_parallelogram,\
- gdev_vector_fill_triangle,\
- NULL /****** WRONG ******/, /* draw_thin_line */\
- pclxl_begin_image,\
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- pclxl_strip_copy_rop\
+static int
+pclxl_initialize(gx_device *dev,
+ dev_proc_map_rgb_color(map_rgb_color),
+ dev_proc_map_color_rgb(map_color_rgb))
+{
+ set_dev_proc(dev, open_device, pclxl_open_device);
+ set_dev_proc(dev, output_page, pclxl_output_page);
+ set_dev_proc(dev, close_device, pclxl_close_device);
+ set_dev_proc(dev, map_rgb_color, map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, map_color_rgb);
+ set_dev_proc(dev, fill_rectangle, gdev_vector_fill_rectangle);
+ set_dev_proc(dev, copy_mono, pclxl_copy_mono);
+ set_dev_proc(dev, copy_color, pclxl_copy_color);
+ set_dev_proc(dev, get_params, pclxl_get_params);
+ set_dev_proc(dev, put_params, pclxl_put_params);
+ set_dev_proc(dev, get_page_device, gx_page_device_get_page_device);
+ set_dev_proc(dev, fill_path, gdev_vector_fill_path);
+ set_dev_proc(dev, stroke_path, gdev_vector_stroke_path);
+ set_dev_proc(dev, fill_mask, pclxl_fill_mask);
+ set_dev_proc(dev, fill_trapezoid, gdev_vector_fill_trapezoid);
+ set_dev_proc(dev, fill_parallelogram, gdev_vector_fill_parallelogram);
+ set_dev_proc(dev, fill_triangle, gdev_vector_fill_triangle);
+ set_dev_proc(dev, begin_image, pclxl_begin_image);
+ set_dev_proc(dev, strip_copy_rop, pclxl_strip_copy_rop);
+
+ return 0;
+}
+
+static int
+pxlmono_initialize(gx_device *dev)
+{
+ return pclxl_initialize(dev,
+ gx_default_gray_map_rgb_color,
+ gx_default_gray_map_color_rgb);
+}
+
+static int
+pxlcolor_initialize(gx_device *dev)
+{
+ return pclxl_initialize(dev,
+ gx_default_rgb_map_rgb_color,
+ gx_default_rgb_map_color_rgb);
}
const gx_device_pclxl gs_pxlmono_device = {
pclxl_device_body("pxlmono", 8),
- pclxl_device_procs(gx_default_gray_map_rgb_color,
- gx_default_gray_map_color_rgb)
+ devprocs_initialize(pxlmono_initialize)
};
const gx_device_pclxl gs_pxlcolor_device = {
pclxl_device_body("pxlcolor", 24),
- pclxl_device_procs(gx_default_rgb_map_rgb_color,
- gx_default_rgb_map_color_rgb)
+ devprocs_initialize(pxlcolor_initialize)
};
/* ---------------- Other utilities ---------------- */
diff --git a/devices/vector/gdevtxtw.c b/devices/vector/gdevtxtw.c
index fe8468334..8a0ec55c3 100644
--- a/devices/vector/gdevtxtw.c
+++ b/devices/vector/gdevtxtw.c
@@ -145,6 +145,26 @@ typedef struct textw_text_enum_s {
private_st_textw_text_enum();
+static int
+txtwrite_initialize(gx_device *dev)
+{
+ set_dev_proc(dev, open_device, txtwrite_open_device);
+ set_dev_proc(dev, output_page, txtwrite_output_page);
+ set_dev_proc(dev, close_device, txtwrite_close_device);
+ set_dev_proc(dev, fill_rectangle, txtwrite_fill_rectangle);
+ set_dev_proc(dev, get_params, txtwrite_get_params);
+ set_dev_proc(dev, put_params, txtwrite_put_params);
+ set_dev_proc(dev, get_page_device, gx_page_device_get_page_device);
+ set_dev_proc(dev, fill_path, txtwrite_fill_path);
+ set_dev_proc(dev, stroke_path, txtwrite_stroke_path);
+ set_dev_proc(dev, strip_copy_rop, txtwrite_strip_copy_rop);
+ set_dev_proc(dev, create_compositor, gx_null_create_compositor);
+ set_dev_proc(dev, text_begin, txtwrite_text_begin);
+ set_dev_proc(dev, dev_spec_op, txtwrite_dev_spec_op);
+
+ return 0;
+}
+
const gx_device_txtwrite_t gs_txtwrite_device =
{
/* Define the device as 8-bit gray scale to avoid computing halftones. */
@@ -153,78 +173,7 @@ const gx_device_txtwrite_t gs_txtwrite_device =
DEFAULT_HEIGHT_10THS * Y_DPI / 10,
X_DPI, Y_DPI,
1, 8, 255, 0, 256, 1),
- {txtwrite_open_device,
- NULL, /*gx_upright_get_initial_matrix,*/
- NULL, /*gx_default_sync_output,*/
- txtwrite_output_page,
- txtwrite_close_device,
- NULL, /*gx_default_gray_map_rgb_color,*/
- NULL, /*gx_default_gray_map_color_rgb,*/
- txtwrite_fill_rectangle, /* Can't be NULL and there is no gx_default_fill_rectangle! */
- NULL, /*gx_default_tile_rectangle,*/
- NULL, /*gx_default_copy_mono,*/
- NULL, /*gx_default_copy_color,*/
- NULL, /*gx_default_draw_line,*/
- NULL, /*gx_default_get_bits,*/
- txtwrite_get_params,
- txtwrite_put_params,
- NULL, /*gx_default_map_cmyk_color,*/
- NULL, /*gx_default_get_xfont_procs,*/
- NULL, /*gx_default_get_xfont_device,*/
- NULL, /*gx_default_map_rgb_alpha_color,*/
- gx_page_device_get_page_device, /*gx_page_device_get_page_device,*/
- NULL, /* get_alpha_bits */
- NULL, /*gx_default_copy_alpha,*/
- NULL, /* get_band */
- NULL, /* copy_rop */
- txtwrite_fill_path,
- txtwrite_stroke_path,
- NULL, /*gx_default_fill_mask,*/
- NULL, /*gx_default_fill_trapezoid,*/
- NULL, /*gx_default_fill_parallelogram,*/
- NULL, /*gx_default_fill_triangle,*/
- NULL, /*gx_default_draw_thin_line,*/
- NULL, /* begin image */
- NULL, /* image_data */
- NULL, /* end_image */
- NULL, /*gx_default_strip_tile_rectangle,*/
- txtwrite_strip_copy_rop,
- NULL, /* get_clipping_box */
- NULL, /* txtwrite_begin_typed_image */
- NULL, /* get_bits_rectangle */
- NULL, /*gx_default_map_color_rgb_alpha,*/
- gx_null_create_compositor,
- NULL, /* get_hardware_params */
- txtwrite_text_begin,
- NULL, /* initialize */
- NULL, /* begin_transparency_group */
- NULL, /* end_transparency_group */
- NULL, /* begin_transparency_mask */
- NULL, /* end_transparency_mask */
- NULL, /* discard_transparency_layer */
- NULL, /* get_color_mapping_procs */
- NULL, /* get_color_comp_index */
- NULL, /* encode_color */
- NULL, /* decode_color */
- NULL, /* pattern manager */
- NULL, /* fill_rectangle_hl_color */
- NULL, /* include_color_space */
- NULL, /* fill_linear_color_scanline */
- NULL, /* fill_linear_color_trapezoid */
- NULL, /* fill_linear_color_triangle */
- NULL, /* update_spot_equivalent_colors */
- NULL, /* ret_devn_params */
- NULL, /* fillpage */
- NULL, /* push_transparency_state */
- NULL, /* pop_transparency_state */
- NULL, /* put_image */
- txtwrite_dev_spec_op, /* dev_spec_op */
- NULL, /* copy_planes */
- NULL, /* get_profile */
- NULL, /* set_graphics_type_tag */
- NULL, /* strip_copy_rop2 */
- NULL /* strip_tile_rect_devn */
- },
+ devprocs_initialize(txtwrite_initialize),
{ 0 }, /* Page Data */
{ 0 }, /* Output Filename */
0, /* Output FILE * */
diff --git a/devices/vector/gdevxps.c b/devices/vector/gdevxps.c
index e8afd0d3a..d4564ac3c 100644
--- a/devices/vector/gdevxps.c
+++ b/devices/vector/gdevxps.c
@@ -217,60 +217,34 @@ static dev_proc_stroke_path(gdev_xps_stroke_path);
static dev_proc_initialize(xps_initialize);
static dev_proc_begin_image(xps_begin_image);
-#define xps_device_procs \
-{ \
- xps_open_device, \
- NULL, /* get_initial_matrix */\
- NULL, /* sync_output */\
- xps_output_page,\
- xps_close_device,\
- gx_default_rgb_map_rgb_color,\
- gx_default_rgb_map_color_rgb,\
- gdev_vector_fill_rectangle,\
- NULL, /* tile_rectangle */\
- NULL, /* copy_mono */\
- NULL, /* copy_color */\
- NULL, /* draw_line */\
- NULL, /* get_bits */\
- xps_get_params,\
- xps_put_params,\
- NULL, /* map_cmyk_color */\
- NULL, /* get_xfont_procs */\
- NULL, /* get_xfont_device */\
- NULL, /* map_rgb_alpha_color */\
- gx_page_device_get_page_device,\
- NULL, /* get_alpha_bits */\
- NULL, /* copy_alpha */\
- NULL, /* get_band */\
- NULL, /* copy_rop */\
- gdev_xps_fill_path,\
- gdev_xps_stroke_path,\
- NULL, /* fill_mask */\
- NULL, /* gdev_vector_fill_trapezoid, */ \
- NULL, /* gdev_vector_fill_parallelogram */ \
- NULL, /* gdev_vector_fill_triangle */ \
- NULL, /* draw_thin_line */\
- xps_begin_image, /* begin_image */ \
- NULL, /* image_data */\
- NULL, /* end_image */\
- NULL, /* strip_tile_rectangle */\
- NULL, /* strip_copy_rop */\
- NULL, /* get_clipping_box */\
- NULL, /* begin_typed_image */\
- NULL, /* get_bits_rectangle */\
- NULL, /* map_color_rgb_alpha */\
- NULL, /* create_compositor */\
- NULL, /* get_hardware_params */\
- NULL, /* text_begin */\
- xps_initialize,\
- NULL,\
-}
-
const gx_device_xps gs_xpswrite_device = {
xps_device_body("xpswrite", 24),
- xps_device_procs
+ devprocs_initialize(xps_initialize)
};
+static int
+xps_initialize(gx_device *dev)
+{
+ gx_device_xps *xps = (gx_device_xps*)dev;
+
+ set_dev_proc(dev, open_device, xps_open_device);
+ set_dev_proc(dev, output_page, xps_output_page);
+ set_dev_proc(dev, close_device, xps_close_device);
+ set_dev_proc(dev, map_rgb_color, gx_default_rgb_map_rgb_color);
+ set_dev_proc(dev, map_color_rgb, gx_default_rgb_map_color_rgb);
+ set_dev_proc(dev, fill_rectangle, gdev_vector_fill_rectangle);
+ set_dev_proc(dev, get_params, xps_get_params);
+ set_dev_proc(dev, put_params, xps_put_params);
+ set_dev_proc(dev, get_page_device, gx_page_device_get_page_device);
+ set_dev_proc(dev, fill_path, gdev_xps_fill_path);
+ set_dev_proc(dev, stroke_path, gdev_xps_stroke_path);
+ set_dev_proc(dev, begin_image, xps_begin_image);
+
+ memset(xps->PrinterName, 0x00, MAXPRINTERNAME);
+
+ return 0;
+}
+
/* Vector device procedures */
static int
xps_beginpage(gx_device_vector *vdev);
@@ -1321,14 +1295,6 @@ xps_put_params(gx_device *dev, gs_param_list *plist)
return code;
}
-static int xps_initialize(gx_device *dev)
-{
- gx_device_xps *xps = (gx_device_xps*)dev;
-
- memset(xps->PrinterName, 0x00, MAXPRINTERNAME);
- return 0;
-}
-
static int
set_state_color(gx_device_vector *vdev, const gx_drawing_color *pdc, gx_color_index *color)
{