summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/japanese')
-rw-r--r--contrib/japanese/gdev10v.c22
-rw-r--r--contrib/japanese/gdevalps.c27
-rw-r--r--contrib/japanese/gdevespg.c20
-rw-r--r--contrib/japanese/gdevlbp3.c4
-rw-r--r--contrib/japanese/gdevmjc.c48
-rw-r--r--contrib/japanese/gdevnpdl.c68
-rw-r--r--contrib/japanese/gdevp201.c34
-rw-r--r--contrib/japanese/gdevrpdl.c8
8 files changed, 131 insertions, 100 deletions
diff --git a/contrib/japanese/gdev10v.c b/contrib/japanese/gdev10v.c
index 510a74e8..f4c349d1 100644
--- a/contrib/japanese/gdev10v.c
+++ b/contrib/japanese/gdev10v.c
@@ -68,13 +68,26 @@ static dev_proc_print_page(bj10v_print_page);
static dev_proc_get_initial_matrix(bj10v_get_initial_matrix);
#endif
+static int
+bj10v_open(gx_device * pdev)
+{
+ if (pdev->HWResolution[0] < 180 ||
+ pdev->HWResolution[1] < 180)
+ {
+ emprintf(pdev->memory, "device requires a resolution of at least 180dpi\n");
+ return_error(gs_error_rangecheck);
+ }
+ return gdev_prn_open(pdev);
+}
+
+
#if 0
gx_device_procs prn_bj10v_procs =
prn_matrix_procs(gdev_prn_open, bj10v_get_initial_matrix,
gdev_prn_output_page, gdev_prn_close);
#endif
gx_device_procs prn_bj10v_procs =
- prn_procs(gdev_prn_open, gdev_prn_output_page, gdev_prn_close);
+ prn_procs(bj10v_open, gdev_prn_output_page, gdev_prn_close);
gx_device_printer gs_bj10v_device =
prn_device(prn_bj10v_procs, "bj10v",
@@ -196,8 +209,8 @@ bj10v_output_run(byte *data, int dnum, int bytes,
static int
bj10v_print_page(gx_device_printer *pdev, gp_file *prn_stream)
{ int line_size = gdev_prn_raster((gx_device *)pdev);
- int xres = pdev->x_pixels_per_inch;
- int yres = pdev->y_pixels_per_inch;
+ int xres = (int)pdev->x_pixels_per_inch;
+ int yres = (int)pdev->y_pixels_per_inch;
const char *mode = (yres == 180 ?
(xres == 180 ? "\052\047" : "\052\050") :
"|*");
@@ -206,7 +219,8 @@ bj10v_print_page(gx_device_printer *pdev, gp_file *prn_stream)
int x_skip_unit = bytes_per_column * (xres / 180);
int y_skip_unit = (yres / 180);
byte *in = (byte *)gs_malloc(pdev->memory->non_gc_memory, 8, line_size, "bj10v_print_page(in)");
- byte *out = (byte *)gs_malloc(pdev->memory->non_gc_memory, bits_per_column, line_size, "bj10v_print_page(out)");
+ /* We need one extra byte in <out> for our sentinel. */
+ byte *out = (byte *)gs_malloc(pdev->memory->non_gc_memory, bits_per_column * line_size + 1, 1, "bj10v_print_page(out)");
int lnum = 0;
int y_skip = 0;
int code = 0;
diff --git a/contrib/japanese/gdevalps.c b/contrib/japanese/gdevalps.c
index e6af9cf1..9d3122ac 100644
--- a/contrib/japanese/gdevalps.c
+++ b/contrib/japanese/gdevalps.c
@@ -43,9 +43,9 @@
/* Alps Micro Dry 600dpi monochrome printer driver */
#include "gdevprn.h"
-#define MD_TOP_MARGIN 0.47
-#define MD_BOTTOM_MARGIN 0.59
-#define MD_SIDE_MARGIN 0.13
+#define MD_TOP_MARGIN 0.47f
+#define MD_BOTTOM_MARGIN 0.59f
+#define MD_SIDE_MARGIN 0.13f
#define X_DPI 600
#define Y_DPI 600
@@ -155,13 +155,20 @@ static const char end_md[] = {
static int
md_open(gx_device *pdev)
{
- static const float md_margins[4] =
- { MD_SIDE_MARGIN, MD_BOTTOM_MARGIN,
- MD_SIDE_MARGIN, MD_TOP_MARGIN
- };
-
- gx_device_set_margins(pdev, md_margins, true);
- return gdev_prn_open(pdev);
+ static const float md_margins[4] =
+ {
+ MD_SIDE_MARGIN, MD_BOTTOM_MARGIN,
+ MD_SIDE_MARGIN, MD_TOP_MARGIN
+ };
+
+ if (pdev->HWResolution[0] != 600)
+ {
+ emprintf(pdev->memory, "device must have an X resolution of 600dpi\n");
+ return_error(gs_error_rangecheck);
+ }
+
+ gx_device_set_margins(pdev, md_margins, true);
+ return gdev_prn_open(pdev);
}
/* MD5000 monochrome mode entrance. */
diff --git a/contrib/japanese/gdevespg.c b/contrib/japanese/gdevespg.c
index 18ce6ca4..2f182134 100644
--- a/contrib/japanese/gdevespg.c
+++ b/contrib/japanese/gdevespg.c
@@ -66,8 +66,8 @@ static const char *epson_remote_start = "\033\001@EJL \r\n";
static int
escpage_open(gx_device * pdev)
{
- int xdpi = pdev->x_pixels_per_inch;
- int ydpi = pdev->y_pixels_per_inch;
+ int xdpi = (int)pdev->x_pixels_per_inch;
+ int ydpi = (int)pdev->y_pixels_per_inch;
/* Resolution Check */
if (xdpi != ydpi)
@@ -81,8 +81,8 @@ escpage_open(gx_device * pdev)
static int
lp2000_open(gx_device * pdev)
{
- int xdpi = pdev->x_pixels_per_inch;
- int ydpi = pdev->y_pixels_per_inch;
+ int xdpi = (int)pdev->x_pixels_per_inch;
+ int ydpi = (int)pdev->y_pixels_per_inch;
/* Resolution Check */
if (xdpi != ydpi)
@@ -273,21 +273,21 @@ escpage_paper_set(gx_device_printer * pdev, gp_file * fp)
int width, height, w, h, wp, hp, bLandscape;
EpagPaperTable *pt;
- width = pdev->MediaSize[0];
- height = pdev->MediaSize[1];
+ width = (int)pdev->MediaSize[0];
+ height = (int)pdev->MediaSize[1];
if (width < height) {
bLandscape = 0;
w = width;
h = height;
- wp = width / 72.0 * pdev->x_pixels_per_inch;
- hp = height / 72.0 * pdev->y_pixels_per_inch;
+ wp = (int)(width / 72.0 * pdev->x_pixels_per_inch);
+ hp = (int)(height / 72.0 * pdev->y_pixels_per_inch);
} else {
bLandscape = 1;
w = height;
h = width;
- wp = height / 72.0 * pdev->y_pixels_per_inch;
- hp = width / 72.0 * pdev->x_pixels_per_inch;
+ wp = (int)(height / 72.0 * pdev->y_pixels_per_inch);
+ hp = (int)(width / 72.0 * pdev->x_pixels_per_inch);
}
for (pt = epagPaperTable; pt->escpage > 0; pt++)
diff --git a/contrib/japanese/gdevlbp3.c b/contrib/japanese/gdevlbp3.c
index 096aecf6..8cbc2ce8 100644
--- a/contrib/japanese/gdevlbp3.c
+++ b/contrib/japanese/gdevlbp3.c
@@ -137,8 +137,8 @@ BoundImage(gx_device_printer *pDev, struct bounding *pBox)
height*10/Yres < 98 ? a5 :\
height*10/Yres < 109 ? b5 :\
height*10/Yres < 116 ? letter : a4;
- Xsize = Xres * mm_to_inch(PaperInfo[paper].w-100) / 160;
- Ysize = Yres * mm_to_inch(PaperInfo[paper].h-100) / 10;
+ Xsize = (int)(Xres * mm_to_inch(PaperInfo[paper].w-100) / 160);
+ Ysize = (int)(Yres * mm_to_inch(PaperInfo[paper].h-100) / 10);
/* ----==== Allocate momory ====---- */
if (LineSize < Xsize*2+1) {
LineSize = Xsize*2+1;
diff --git a/contrib/japanese/gdevmjc.c b/contrib/japanese/gdevmjc.c
index 85fa6a8a..b132167d 100644
--- a/contrib/japanese/gdevmjc.c
+++ b/contrib/japanese/gdevmjc.c
@@ -113,9 +113,9 @@ copies. */
/* Margins are left, bottom, right, top. */
/* left bottom right top */
-#define MJ700V2C_MARGINS_A4 0.118, 0.52, 0.118, 0.33465
-#define MJ6000C_MARGINS_A2 0.948, 0.52, 1.969, 0.33465
-#define MJ8000C_MARGINS_A2 0.194, 0.52, 0.194, 0.33465
+#define MJ700V2C_MARGINS_A4 0.118f, 0.52f, 0.118f, 0.33465f
+#define MJ6000C_MARGINS_A2 0.948f, 0.52f, 1.969f, 0.33465f
+#define MJ8000C_MARGINS_A2 0.194f, 0.52f, 0.194f, 0.33465f
/* Define bits-per-pixel for generic drivers - default is 24-bit mode */
#ifndef BITSPERPIXEL
@@ -296,8 +296,8 @@ mjcmyk_device(mj8000c_procs, "mj8000c", 360, 360, BITSPERPIXEL,
static int
gdev_mjc_paper_size(gx_device *dev)
{
- int width = dev->MediaSize[0];
- int height = dev->MediaSize[1];
+ int width = (int)dev->MediaSize[0];
+ int height = (int)dev->MediaSize[1];
if (width == 1190 && height == 1684)
return PAPER_SIZE_A2;
@@ -333,8 +333,8 @@ mj8000c_open(gx_device * pdev)
static int
mj_open(gx_device *pdev, int ptype)
{ /* Change the margins if necessary. */
- int xdpi = pdev->x_pixels_per_inch;
- int ydpi = pdev->y_pixels_per_inch;
+ int xdpi = (int)pdev->x_pixels_per_inch;
+ int ydpi = (int)pdev->y_pixels_per_inch;
static const float mj_margin[4] = { MJ700V2C_MARGINS_A4 };
static const float mj6000c_a2[4] = { MJ6000C_MARGINS_A2 };
@@ -365,7 +365,7 @@ mj_open(gx_device *pdev, int ptype)
gx_device_set_margins(pdev, m, true);
if (mj->colorcomp == 3)
- mj->density = mj->density * 720 / ydpi * 1.5;
+ mj->density = (int)(mj->density * 720 / ydpi) * 1.5;
else
mj->density = mj->density * 720 / ydpi;
@@ -440,6 +440,7 @@ mj_put_params(gx_device *pdev, gs_param_list *plist, int ptype)
code = put_param_int(plist, "Magenta", &magenta, 0, INT_MAX, code);
code = put_param_int(plist, "Yellow", &yellow, 0, INT_MAX, code);
code = put_param_int(plist, "Black", &black, 0, INT_MAX, code);
+ (void) code;
if ((code = param_read_bool(plist,
(param_name = "Unidirectional"),
@@ -667,7 +668,7 @@ mj_raster_cmd(int c_id, int in_size, byte* in, byte* buf2,
** walk forward, looking for matches:
*/
- for( q++ ; *q == *p && q < in_end ; q++ ) {
+ for( q++ ; q < in_end && *q == *p ; q++ ) {
if( (q-p) >= 128 ) {
if( p > inp ) {
count = p - inp;
@@ -998,7 +999,6 @@ mj_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
plane_size = calc_buffsize(line_size, storage_bpp);
if (bits_per_pixel == 1) { /* Data printed direct from i/p */
- databuff_size = 0; /* so no data buffer required, */
outbuff_size = plane_size * 4; /* but need separate output buffers */
}
@@ -1053,6 +1053,7 @@ mj_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
p += xtalbuff_size;
Kbuf[1] = p;
p += xtalbuff_size;
+ (void) p;
}
storage = (word *) gs_malloc(pdev->memory->non_gc_memory, storage_size_words, W, "mj_colour_print_page");
@@ -1105,7 +1106,6 @@ mj_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
p += plane_size;
}
if (bits_per_pixel == 1) {
- out_data = out_row = p; /* size is outbuff_size * 4 */
data[1] += databuff_size; /* coincides with plane_data pointers */
data[3] += databuff_size;
}
@@ -1174,17 +1174,14 @@ mj_print_page(gx_device_printer * pdev, gp_file * prn_stream, int ptype)
#define MOFFSET (pdev->t_margin - MJ700V2C_PRINT_LIMIT) /* Print position */
{
- int MJ_MARGIN_MM = 55;
- uint top_skip = ( MJ_MARGIN_MM * pdev->y_pixels_per_inch ) / 254;
- top_skip = (top_skip ^ (-1)) & 65536;
gp_fwrite("\033(V\2\0\0\0",sizeof(byte), 7, prn_stream);
gp_fwrite("\033(v\2\0\0\xff",sizeof(byte), 7, prn_stream);
}
/* Send each scan line in turn */
{
- long int lend = pdev->height -
- (dev_t_margin_points(pdev) + dev_b_margin_points(pdev));
+ long int lend = (int)(pdev->height -
+ (dev_t_margin_points(pdev) + dev_b_margin_points(pdev)));
int cErr, mErr, yErr, kErr;
int this_pass, i;
long int lnum;
@@ -1441,14 +1438,6 @@ mj_color_correct(gx_color_value *Rptr ,gx_color_value *Gptr , gx_color_value *Bp
*Gptr = M;
*Bptr = Y;
return;
- } else if (G>B) { /* R=G>B */
- D = G-B;
- Wa = R;
- H = 256;
- } else { /* B>R=G */
- D = G-B;
- Wa = R;
- H = 1024;
}
}
@@ -1504,7 +1493,10 @@ mj_color_correct(gx_color_value *Rptr ,gx_color_value *Gptr , gx_color_value *Bp
if (Y<0)
Y=0;
- if(H>256 && H<1024){ /* green correct */
+ /* 2019-10-29 this used to be 'if(H>256 && H<1024)', which can then go
+ beyond bounds of the 512-element grnsep2[]. So have patched up to avoid
+ this, but without any proper idea about what's going on. */
+ if(H>256 && H<768){ /* green correct */
short work;
work=(((long)grnsep[M]*(long)grnsep2[H-256])>>16);
C+=work;
@@ -1613,12 +1605,12 @@ gdev_mjc_map_color_rgb(gx_device *pdev, gx_color_index color,
prgb[2] = -(c >> 2);
}
else
- { gx_color_value value = (gx_color_value)color ^ 0xff;
+ { gx_color_index value = (gx_color_index)color ^ 0xff;
prgb[0] = prgb[1] = prgb[2] = (value << 8) + value;
}
break;
case 16:
- { gx_color_value c = (gx_color_value)color ^ 0xffff;
+ { gx_color_index c = (gx_color_index)color ^ 0xffff;
ushort value = c >> 11;
prgb[0] = ((value << 11) + (value << 6) + (value << 1) +
(value >> 4)) >> (16 - gx_color_value_bits);
@@ -1631,7 +1623,7 @@ gdev_mjc_map_color_rgb(gx_device *pdev, gx_color_index color,
}
break;
case 24:
- { gx_color_value c = (gx_color_value)color ^ 0xffffff;
+ { gx_color_index c = (gx_color_index)color ^ 0xffffff;
prgb[0] = gx_color_value_from_byte(c >> 16);
prgb[1] = gx_color_value_from_byte((c >> 8) & 0xff);
prgb[2] = gx_color_value_from_byte(c & 0xff);
diff --git a/contrib/japanese/gdevnpdl.c b/contrib/japanese/gdevnpdl.c
index 4ecace50..9deadaee 100644
--- a/contrib/japanese/gdevnpdl.c
+++ b/contrib/japanese/gdevnpdl.c
@@ -71,45 +71,45 @@
* The commented values are from the PC-PR1000E/4 User's Manual.
*/
/* margins of A3 paper */
-#define L_MARGIN_A3 0.20
-#define B_MARGIN_A3 0.24
-#define R_MARGIN_A3 0.20
-#define T_MARGIN_A3 0.20
+#define L_MARGIN_A3 0.20f
+#define B_MARGIN_A3 0.24f
+#define R_MARGIN_A3 0.20f
+#define T_MARGIN_A3 0.20f
/* margins of A4 paper */
-#define L_MARGIN_A4 0.31
-#define B_MARGIN_A4 0.20
-#define R_MARGIN_A4 0.16
-#define T_MARGIN_A4 0.20
+#define L_MARGIN_A4 0.31f
+#define B_MARGIN_A4 0.20f
+#define R_MARGIN_A4 0.16f
+#define T_MARGIN_A4 0.20f
/* margins of A5 paper */
-#define L_MARGIN_A5 0.31
-#define B_MARGIN_A5 0.16
-#define R_MARGIN_A5 0.16
-#define T_MARGIN_A5 0.20
+#define L_MARGIN_A5 0.31f
+#define B_MARGIN_A5 0.16f
+#define R_MARGIN_A5 0.16f
+#define T_MARGIN_A5 0.20f
/* margins of B4 paper */
-#define L_MARGIN_B4 0.31
-#define B_MARGIN_B4 0.24
-#define R_MARGIN_B4 0.31
-#define T_MARGIN_B4 0.20
+#define L_MARGIN_B4 0.31f
+#define B_MARGIN_B4 0.24f
+#define R_MARGIN_B4 0.31f
+#define T_MARGIN_B4 0.20f
/* margins of B5 paper */
-#define L_MARGIN_B5 0.31
-#define B_MARGIN_B5 0.24
-#define R_MARGIN_B5 0.16
-#define T_MARGIN_B5 0.20
+#define L_MARGIN_B5 0.31f
+#define B_MARGIN_B5 0.24f
+#define R_MARGIN_B5 0.16f
+#define T_MARGIN_B5 0.20f
/* margins of letter size paper */
-#define L_MARGIN_LETTER 0.31
-#define B_MARGIN_LETTER 0.24
-#define R_MARGIN_LETTER 0.20
-#define T_MARGIN_LETTER 0.20
+#define L_MARGIN_LETTER 0.31f
+#define B_MARGIN_LETTER 0.24f
+#define R_MARGIN_LETTER 0.20f
+#define T_MARGIN_LETTER 0.20f
/* margins of postcard size paper */
-#define L_MARGIN_POSTCARD 0.31
-#define B_MARGIN_POSTCARD 0.12
-#define R_MARGIN_POSTCARD 0.24
-#define T_MARGIN_POSTCARD 0.20
+#define L_MARGIN_POSTCARD 0.31f
+#define B_MARGIN_POSTCARD 0.12f
+#define R_MARGIN_POSTCARD 0.24f
+#define T_MARGIN_POSTCARD 0.20f
/* margins of env4 size paper */
-#define L_MARGIN_ENV4 0.20
-#define B_MARGIN_ENV4 0.20
-#define R_MARGIN_ENV4 0.20
-#define T_MARGIN_ENV4 0.20
+#define L_MARGIN_ENV4 0.20f
+#define B_MARGIN_ENV4 0.20f
+#define R_MARGIN_ENV4 0.20f
+#define T_MARGIN_ENV4 0.20f
/* The device descriptors */
static dev_proc_open_device(npdl_open);
@@ -527,8 +527,8 @@ npdl_set_page_layout(gx_device * dev)
static int
npdl_open(gx_device * dev)
{
- int xdpi = dev->x_pixels_per_inch;
- int ydpi = dev->y_pixels_per_inch;
+ int xdpi = (int)dev->x_pixels_per_inch;
+ int ydpi = (int)dev->y_pixels_per_inch;
/* Print Resolution Check */
if (xdpi != ydpi)
diff --git a/contrib/japanese/gdevp201.c b/contrib/japanese/gdevp201.c
index 11f8f98e..1d3f4607 100644
--- a/contrib/japanese/gdevp201.c
+++ b/contrib/japanese/gdevp201.c
@@ -134,6 +134,9 @@ pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
byte *in, *out;
int lnum, skip;
int head_pins, lr_pitch, x_dpi;
+ int code = 0;
+ byte mask;
+ int endidx = pdev->width>>3;
switch (check_mode(pdev->dname)){
case PR201:
@@ -160,6 +163,11 @@ pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
if(in == 0 || out == 0)
return -1;
+ if (pdev->width & 7)
+ mask = ~(255>>(pdev->width & 7));
+ else
+ mask = 255, endidx--;
+
/* Initialize printer */
gp_fputs("\033cl", pdev->file); /* Software Reset */
gp_fputs("\033P", pdev->file); /* Proportional Mode */
@@ -173,17 +181,26 @@ pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
lnum = 0;
skip = 0;
while(lnum < height) {
- byte *inp, *outp, *out_beg, *out_end;
- int x, y, num_lines, size, mod;
-
- /* Copy scan lines */
- if(gdev_prn_copy_scan_lines(pdev, lnum, in, chunk_size) < 0)
- break;
+ byte *inp, *outp, *out_beg, *out_end, *p;
+ int x, y, num_lines, size, mod, i;
/* The number of lines to process */
if((num_lines = height - lnum) > bits_per_column)
num_lines = bits_per_column;
+ /* Copy scan lines */
+ for (i = 0, p = in; i < num_lines; i++, p += line_size) {
+ code = gdev_prn_get_bits(pdev, lnum + i, p, NULL);
+ if (code < 0)
+ goto error;
+ p[endidx] &= mask;
+ }
+
+ /* Ensure we have a full stripe of line data */
+ for (; i < bits_per_column; i++, p += line_size) {
+ memset(p, 0, line_size);
+ }
+
/* Test for all zero */
size = line_size * num_lines;
if(in[0] == 0 &&
@@ -242,7 +259,7 @@ pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
out_beg -= (out_beg - out) % bytes_per_column;
/* Dot addressing */
- gp_fprintf(pdev->file, "\033F%04d",
+ gp_fprintf(pdev->file, "\033F%04" PRIdSIZE,
(out_beg - out) / bytes_per_column);
/* Dot graphics */
@@ -264,10 +281,11 @@ pr201_print_page(gx_device_printer *pdev, gp_file *prn_stream)
gp_fputc('\f',pdev->file);
gp_fflush(pdev->file);
+error:
gs_free(pdev->memory->non_gc_memory, (char *)out,
bits_per_column, line_size, "pr201_print_page(out)");
gs_free(pdev->memory->non_gc_memory, (char *)in,
bits_per_column, line_size, "pr201_print_page(in)");
- return 0;
+ return code;
}
diff --git a/contrib/japanese/gdevrpdl.c b/contrib/japanese/gdevrpdl.c
index dee81bb5..d7e561f5 100644
--- a/contrib/japanese/gdevrpdl.c
+++ b/contrib/japanese/gdevrpdl.c
@@ -48,8 +48,8 @@ lprn_device(gx_device_lprn, rpdl_prn_procs, "rpdl",
static int
rpdl_open(gx_device * pdev)
{
- int xdpi = pdev->x_pixels_per_inch;
- int ydpi = pdev->y_pixels_per_inch;
+ int xdpi = (int)pdev->x_pixels_per_inch;
+ int ydpi = (int)pdev->y_pixels_per_inch;
/* Resolution Check */
if (xdpi != ydpi)
@@ -238,8 +238,8 @@ rpdl_paper_set(gx_device_printer * pdev, gp_file * prn_stream)
/* Page size match tolerance in points */
#define TOL 5
- width = pdev->MediaSize[0];
- height = pdev->MediaSize[1];
+ width = (int)pdev->MediaSize[0];
+ height = (int)pdev->MediaSize[1];
if (width < height) {
w = width;