diff options
Diffstat (limited to 'contrib/japanese')
-rw-r--r-- | contrib/japanese/gdev10v.c | 22 | ||||
-rw-r--r-- | contrib/japanese/gdevalps.c | 27 | ||||
-rw-r--r-- | contrib/japanese/gdevespg.c | 20 | ||||
-rw-r--r-- | contrib/japanese/gdevlbp3.c | 4 | ||||
-rw-r--r-- | contrib/japanese/gdevmjc.c | 48 | ||||
-rw-r--r-- | contrib/japanese/gdevnpdl.c | 68 | ||||
-rw-r--r-- | contrib/japanese/gdevp201.c | 34 | ||||
-rw-r--r-- | contrib/japanese/gdevrpdl.c | 8 |
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; |