summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--base/gdevmem.c3
-rw-r--r--base/unix-gcc.mak2
-rw-r--r--devices/devs.mak5
-rw-r--r--devices/gdevplan.c51
-rw-r--r--psi/msvc.mak2
5 files changed, 58 insertions, 5 deletions
diff --git a/base/gdevmem.c b/base/gdevmem.c
index 6ec443bc9..ceace17b6 100644
--- a/base/gdevmem.c
+++ b/base/gdevmem.c
@@ -133,6 +133,9 @@ gs_device_is_memory(const gx_device * dev)
133 int bits_per_pixel = dev->color_info.depth; 133 int bits_per_pixel = dev->color_info.depth;
134 const gx_device_memory *mdproto; 134 const gx_device_memory *mdproto;
135 135
136 if (dev->is_planar)
137 bits_per_pixel /= dev->color_info.num_components;
138
136 mdproto = gdev_mem_device_for_bits(bits_per_pixel); 139 mdproto = gdev_mem_device_for_bits(bits_per_pixel);
137 if (mdproto != 0 && dev_proc(dev, draw_thin_line) == dev_proc(mdproto, draw_thin_line)) 140 if (mdproto != 0 && dev_proc(dev, draw_thin_line) == dev_proc(mdproto, draw_thin_line))
138 return true; 141 return true;
diff --git a/base/unix-gcc.mak b/base/unix-gcc.mak
index 9de449d5a..9a2023e29 100644
--- a/base/unix-gcc.mak
+++ b/base/unix-gcc.mak
@@ -564,7 +564,7 @@ DISPLAY_DEV=$(DD)bbox.dev
564# devs.mak and contrib.mak for the list of available devices. 564# devs.mak and contrib.mak for the list of available devices.
565# DEVICE_DEVS=$(DISPLAY_DEV) $(DD)x11.dev $(DD)x11_.dev $(DD)x11alpha.dev $(DD)x11alt_.dev $(DD)x11cmyk.dev $(DD)x11cmyk2.dev $(DD)x11cmyk4.dev $(DD)x11cmyk8.dev $(DD)x11gray2.dev $(DD)x11gray4.dev $(DD)x11mono.dev $(DD)x11rg16x.dev $(DD)x11rg32x.dev 565# DEVICE_DEVS=$(DISPLAY_DEV) $(DD)x11.dev $(DD)x11_.dev $(DD)x11alpha.dev $(DD)x11alt_.dev $(DD)x11cmyk.dev $(DD)x11cmyk2.dev $(DD)x11cmyk4.dev $(DD)x11cmyk8.dev $(DD)x11gray2.dev $(DD)x11gray4.dev $(DD)x11mono.dev $(DD)x11rg16x.dev $(DD)x11rg32x.dev
566DEVICE_DEVS=$(DISPLAY_DEV) 566DEVICE_DEVS=$(DISPLAY_DEV)
567DEVICE_DEVS1=$(DD)bit.dev $(DD)bitcmyk.dev $(DD)bitrgb.dev $(DD)bitrgbtags.dev $(DD)bmp16.dev $(DD)bmp16m.dev $(DD)bmp256.dev $(DD)bmp32b.dev $(DD)bmpgray.dev $(DD)bmpmono.dev $(DD)bmpsep1.dev $(DD)bmpsep8.dev $(DD)ccr.dev $(DD)cif.dev $(DD)devicen.dev $(DD)eps2write.dev $(DD)fpng.dev $(DD)inferno.dev $(DD)ink_cov.dev $(DD)inkcov.dev $(DD)jpeg.dev $(DD)jpegcmyk.dev $(DD)jpeggray.dev $(DD)mgr4.dev $(DD)mgr8.dev $(DD)mgrgray2.dev $(DD)mgrgray4.dev $(DD)mgrgray8.dev $(DD)mgrmono.dev $(DD)miff24.dev $(DD)pam.dev $(DD)pamcmyk32.dev $(DD)pamcmyk4.dev $(DD)pbm.dev $(DD)pbmraw.dev $(DD)pcx16.dev $(DD)pcx24b.dev $(DD)pcx256.dev $(DD)pcxcmyk.dev $(DD)pcxgray.dev $(DD)pcxmono.dev $(DD)pdfwrite.dev $(DD)pgm.dev $(DD)pgmraw.dev $(DD)pgnm.dev $(DD)pgnmraw.dev $(DD)pkm.dev $(DD)pkmraw.dev $(DD)pksm.dev $(DD)pksmraw.dev $(DD)plan.dev $(DD)plan9bm.dev $(DD)planc.dev $(DD)plang.dev $(DD)plank.dev $(DD)planm.dev $(DD)plib.dev $(DD)plibc.dev $(DD)plibg.dev $(DD)plibk.dev $(DD)plibm.dev $(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev $(DD)ps2write.dev $(DD)psdcmyk.dev $(DD)psdcmykog.dev $(DD)psdf.dev $(DD)psdrgb.dev $(DD)spotcmyk.dev $(DD)txtwrite.dev $(DD)xcf.dev 567DEVICE_DEVS1=$(DD)bit.dev $(DD)bitcmyk.dev $(DD)bitrgb.dev $(DD)bitrgbtags.dev $(DD)bmp16.dev $(DD)bmp16m.dev $(DD)bmp256.dev $(DD)bmp32b.dev $(DD)bmpgray.dev $(DD)bmpmono.dev $(DD)bmpsep1.dev $(DD)bmpsep8.dev $(DD)ccr.dev $(DD)cif.dev $(DD)devicen.dev $(DD)eps2write.dev $(DD)fpng.dev $(DD)inferno.dev $(DD)ink_cov.dev $(DD)inkcov.dev $(DD)jpeg.dev $(DD)jpegcmyk.dev $(DD)jpeggray.dev $(DD)mgr4.dev $(DD)mgr8.dev $(DD)mgrgray2.dev $(DD)mgrgray4.dev $(DD)mgrgray8.dev $(DD)mgrmono.dev $(DD)miff24.dev $(DD)pam.dev $(DD)pamcmyk32.dev $(DD)pamcmyk4.dev $(DD)pbm.dev $(DD)pbmraw.dev $(DD)pcx16.dev $(DD)pcx24b.dev $(DD)pcx256.dev $(DD)pcxcmyk.dev $(DD)pcxgray.dev $(DD)pcxmono.dev $(DD)pdfwrite.dev $(DD)pgm.dev $(DD)pgmraw.dev $(DD)pgnm.dev $(DD)pgnmraw.dev $(DD)pkm.dev $(DD)pkmraw.dev $(DD)pksm.dev $(DD)pksmraw.dev $(DD)plan.dev $(DD)plan9bm.dev $(DD)planc.dev $(DD)plang.dev $(DD)plank.dev $(DD)planm.dev $(DD)plank.dev $(DD)plib.dev $(DD)plibc.dev $(DD)plibg.dev $(DD)plibk.dev $(DD)plibm.dev $(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev $(DD)ps2write.dev $(DD)psdcmyk.dev $(DD)psdcmykog.dev $(DD)psdf.dev $(DD)psdrgb.dev $(DD)spotcmyk.dev $(DD)txtwrite.dev $(DD)xcf.dev
568DEVICE_DEVS2=$(DD)ap3250.dev $(DD)atx23.dev $(DD)atx24.dev $(DD)atx38.dev $(DD)bj10e.dev $(DD)bj200.dev $(DD)bjc600.dev $(DD)bjc800.dev $(DD)cdeskjet.dev $(DD)cdj500.dev $(DD)cdj550.dev $(DD)cdjcolor.dev $(DD)cdjmono.dev $(DD)cljet5.dev $(DD)cljet5c.dev $(DD)cljet5pr.dev $(DD)coslw2p.dev $(DD)coslwxl.dev $(DD)cp50.dev $(DD)declj250.dev $(DD)deskjet.dev $(DD)dj505j.dev $(DD)djet500.dev $(DD)djet500c.dev $(DD)dnj650c.dev $(DD)eps9high.dev $(DD)eps9mid.dev $(DD)epson.dev $(DD)epsonc.dev $(DD)escp.dev $(DD)fs600.dev $(DD)hl7x0.dev $(DD)ibmpro.dev $(DD)imagen.dev $(DD)itk24i.dev $(DD)itk38.dev $(DD)jetp3852.dev $(DD)laserjet.dev $(DD)lbp8.dev $(DD)lips3.dev $(DD)lj250.dev $(DD)lj3100sw.dev $(DD)lj4dith.dev $(DD)lj4dithp.dev $(DD)lj5gray.dev $(DD)lj5mono.dev $(DD)ljet2p.dev $(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev $(DD)ljet4pjl.dev $(DD)ljetplus.dev $(DD)lp2563.dev $(DD)lp8000.dev $(DD)lq850.dev $(DD)lxm5700m.dev $(DD)m8510.dev $(DD)necp6.dev $(DD)oce9050.dev $(DD)oki182.dev $(DD)okiibm.dev $(DD)paintjet.dev $(DD)photoex.dev $(DD)picty180.dev $(DD)pj.dev $(DD)pjetxl.dev $(DD)pjxl.dev $(DD)pjxl300.dev $(DD)pxlcolor.dev $(DD)pxlmono.dev $(DD)r4081.dev $(DD)rinkj.dev $(DD)sj48.dev $(DD)st800.dev $(DD)stcolor.dev $(DD)t4693d2.dev $(DD)t4693d4.dev $(DD)t4693d8.dev $(DD)tek4696.dev $(DD)uniprint.dev 568DEVICE_DEVS2=$(DD)ap3250.dev $(DD)atx23.dev $(DD)atx24.dev $(DD)atx38.dev $(DD)bj10e.dev $(DD)bj200.dev $(DD)bjc600.dev $(DD)bjc800.dev $(DD)cdeskjet.dev $(DD)cdj500.dev $(DD)cdj550.dev $(DD)cdjcolor.dev $(DD)cdjmono.dev $(DD)cljet5.dev $(DD)cljet5c.dev $(DD)cljet5pr.dev $(DD)coslw2p.dev $(DD)coslwxl.dev $(DD)cp50.dev $(DD)declj250.dev $(DD)deskjet.dev $(DD)dj505j.dev $(DD)djet500.dev $(DD)djet500c.dev $(DD)dnj650c.dev $(DD)eps9high.dev $(DD)eps9mid.dev $(DD)epson.dev $(DD)epsonc.dev $(DD)escp.dev $(DD)fs600.dev $(DD)hl7x0.dev $(DD)ibmpro.dev $(DD)imagen.dev $(DD)itk24i.dev $(DD)itk38.dev $(DD)jetp3852.dev $(DD)laserjet.dev $(DD)lbp8.dev $(DD)lips3.dev $(DD)lj250.dev $(DD)lj3100sw.dev $(DD)lj4dith.dev $(DD)lj4dithp.dev $(DD)lj5gray.dev $(DD)lj5mono.dev $(DD)ljet2p.dev $(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev $(DD)ljet4pjl.dev $(DD)ljetplus.dev $(DD)lp2563.dev $(DD)lp8000.dev $(DD)lq850.dev $(DD)lxm5700m.dev $(DD)m8510.dev $(DD)necp6.dev $(DD)oce9050.dev $(DD)oki182.dev $(DD)okiibm.dev $(DD)paintjet.dev $(DD)photoex.dev $(DD)picty180.dev $(DD)pj.dev $(DD)pjetxl.dev $(DD)pjxl.dev $(DD)pjxl300.dev $(DD)pxlcolor.dev $(DD)pxlmono.dev $(DD)r4081.dev $(DD)rinkj.dev $(DD)sj48.dev $(DD)st800.dev $(DD)stcolor.dev $(DD)t4693d2.dev $(DD)t4693d4.dev $(DD)t4693d8.dev $(DD)tek4696.dev $(DD)uniprint.dev
569DEVICE_DEVS3= 569DEVICE_DEVS3=
570DEVICE_DEVS4=$(DD)ijs.dev 570DEVICE_DEVS4=$(DD)ijs.dev
diff --git a/devices/devs.mak b/devices/devs.mak
index 2f00b32b7..099baf330 100644
--- a/devices/devs.mak
+++ b/devices/devs.mak
@@ -166,6 +166,7 @@ DEVGEN=$(DEVGENDIR)$(D)
166# plang PLANar device (8 bit Gray) 166# plang PLANar device (8 bit Gray)
167# planc PLANar device (32 bit CMYK) 167# planc PLANar device (32 bit CMYK)
168# plank PLANar device (4 bit CMYK) 168# plank PLANar device (4 bit CMYK)
169# planr PLANar device (3 bit RGB)
169# plib PLanar Interleaved Band buffer device (24 bit RGB) 170# plib PLanar Interleaved Band buffer device (24 bit RGB)
170# plibm PLanar Interleaved Band buffer device (1 bit Mono) 171# plibm PLanar Interleaved Band buffer device (1 bit Mono)
171# plibg PLanar Interleaved Band buffer device (8 bit Gray) 172# plibg PLanar Interleaved Band buffer device (8 bit Gray)
@@ -1798,6 +1799,10 @@ $(DD)plank.dev : $(plan_) $(GLD)page.dev $(GDEV) \
1798 $(DEVS_MAK) $(MAKEDIRS) 1799 $(DEVS_MAK) $(MAKEDIRS)
1799 $(SETPDEV2) $(DD)plank $(plan_) 1800 $(SETPDEV2) $(DD)plank $(plan_)
1800 1801
1802$(DD)planr.dev : $(plan_) $(GLD)page.dev $(GDEV) \
1803 $(DEVS_MAK) $(MAKEDIRS)
1804 $(SETPDEV2) $(DD)planr $(plan_)
1805
1801# 1806#
1802# PLanar Interlaced Buffer device 1807# PLanar Interlaced Buffer device
1803 1808
diff --git a/devices/gdevplan.c b/devices/gdevplan.c
index b64387040..81bc5c545 100644
--- a/devices/gdevplan.c
+++ b/devices/gdevplan.c
@@ -32,6 +32,7 @@
32 * planm 1 bit Monochrome 32 * planm 1 bit Monochrome
33 * planc 32 bit CMYK (8 bits per channel) 33 * planc 32 bit CMYK (8 bits per channel)
34 * plank 4 bit CMYK (1 bit per channel) 34 * plank 4 bit CMYK (1 bit per channel)
35 * planr 3 bit RGB (1 bit per channel)
35 */ 36 */
36 37
37/* Define DEBUG_PRINT to enable some debugging printfs. */ 38/* Define DEBUG_PRINT to enable some debugging printfs. */
@@ -72,6 +73,7 @@ static int planm_print_page(gx_device_printer * pdev, FILE * pstream);
72static int plang_print_page(gx_device_printer * pdev, FILE * pstream); 73static int plang_print_page(gx_device_printer * pdev, FILE * pstream);
73static int planc_print_page(gx_device_printer * pdev, FILE * pstream); 74static int planc_print_page(gx_device_printer * pdev, FILE * pstream);
74static int plank_print_page(gx_device_printer * pdev, FILE * pstream); 75static int plank_print_page(gx_device_printer * pdev, FILE * pstream);
76static int planr_print_page(gx_device_printer * pdev, FILE * pstream);
75 77
76/* The device procedures */ 78/* The device procedures */
77 79
@@ -156,6 +158,8 @@ static const gx_device_procs planc_procs =
156 pgpm_procs(planc_map_color_rgb, planc_encode_color, planc_decode_color); 158 pgpm_procs(planc_map_color_rgb, planc_encode_color, planc_decode_color);
157static const gx_device_procs plank_procs = 159static const gx_device_procs plank_procs =
158 pgpm_procs(planc_map_color_rgb, planc_encode_color, planc_decode_color); 160 pgpm_procs(planc_map_color_rgb, planc_encode_color, planc_decode_color);
161static const gx_device_procs planr_procs =
162 pgpm_procs(plan_decode_color, gx_default_rgb_map_rgb_color, plan_decode_color);
159 163
160/* Macro for generating device descriptors. */ 164/* Macro for generating device descriptors. */
161#define plan_prn_device(procs, dev_name, num_comp, depth, max_gray, max_rgb, print_page) \ 165#define plan_prn_device(procs, dev_name, num_comp, depth, max_gray, max_rgb, print_page) \
@@ -177,6 +181,8 @@ const gx_device_printer gs_plank_device =
177 plan_prn_device(plank_procs, "plank", 4, 4, 1, 1, plank_print_page); 181 plan_prn_device(plank_procs, "plank", 4, 4, 1, 1, plank_print_page);
178const gx_device_printer gs_planc_device = 182const gx_device_printer gs_planc_device =
179 plan_prn_device(planc_procs, "planc", 4, 32, 255, 255, planc_print_page); 183 plan_prn_device(planc_procs, "planc", 4, 32, 255, 255, planc_print_page);
184const gx_device_printer gs_planr_device =
185 plan_prn_device(planr_procs, "planr", 3, 3, 1, 1, planr_print_page);
180 186
181/* ------ Initialization ------ */ 187/* ------ Initialization ------ */
182 188
@@ -262,6 +268,29 @@ static void dump_row_pgm(int w, byte **data, FILE *dump_file)
262 } 268 }
263} 269}
264 270
271static void dump_row_pnmr(int w, byte **data, FILE *dump_file)
272{
273 byte *r = data[0];
274 byte *g = data[1];
275 byte *b = data[2];
276
277 if (dump_file == NULL)
278 return;
279 while (w) {
280 byte R = *r++;
281 byte G = *g++;
282 byte B = *b++;
283 int s;
284 for (s=7; s>=0; s--) {
285 fputc(255*((R>>s)&1), dump_file);
286 fputc(255*((G>>s)&1), dump_file);
287 fputc(255*((B>>s)&1), dump_file);
288 w--;
289 if (w == 0) break;
290 }
291 }
292}
293
265typedef void (*dump_row)(int w, byte **planes, FILE *file); 294typedef void (*dump_row)(int w, byte **planes, FILE *file);
266 295
267static dump_row dump_start(int w, int h, int num_comps, int log2bits, 296static dump_row dump_start(int w, int h, int num_comps, int log2bits,
@@ -278,13 +307,19 @@ static dump_row dump_start(int w, int h, int num_comps, int log2bits,
278 row_proc = dump_row_pnmk; 307 row_proc = dump_row_pnmk;
279 } else if ((num_comps == 4) && (log2bits == 3)) { 308 } else if ((num_comps == 4) && (log2bits == 3)) {
280 row_proc = dump_row_pnmc; 309 row_proc = dump_row_pnmc;
310 } else if ((num_comps == 3) && (log2bits == 0)) {
311 row_proc = dump_row_pnmr;
281 } else 312 } else
282 return NULL; 313 return NULL;
283 if (dump_file == NULL) 314 if (dump_file == NULL)
284 return row_proc; 315 return row_proc;
285 if (num_comps == 3) 316 if (num_comps == 3) {
286 fprintf(dump_file, "P6 %d %d 255\n", w, h); 317 if (log2bits == 0)
287 else if (num_comps == 4) { 318 fprintf(dump_file, "P7\nWIDTH %d\nHEIGHT %d\nDEPTH 3\n"
319 "MAXVAL 255\nTUPLTYPE RGB\n# Image generated by %s\nENDHDR\n", w, h, gs_product);
320 else
321 fprintf(dump_file, "P6 %d %d 255\n", w, h);
322 } else if (num_comps == 4) {
288 if (log2bits == 0) 323 if (log2bits == 0)
289 fprintf(dump_file, "P7\nWIDTH %d\nHEIGHT %d\nDEPTH 4\n" 324 fprintf(dump_file, "P7\nWIDTH %d\nHEIGHT %d\nDEPTH 4\n"
290 "MAXVAL 255\nTUPLTYPE CMYK\n# Image generated by %s\nENDHDR\n", w, h, gs_product); 325 "MAXVAL 255\nTUPLTYPE CMYK\n# Image generated by %s\nENDHDR\n", w, h, gs_product);
@@ -547,3 +582,13 @@ planc_print_page(gx_device_printer * pdev, FILE * pstream)
547#endif 582#endif
548 return plan_print_page_loop(pdev, 3, 4, pstream); 583 return plan_print_page_loop(pdev, 3, 4, pstream);
549} 584}
585
586/* Print a color-mapped page (rgb, 1 bpc). */
587static int
588planr_print_page(gx_device_printer * pdev, FILE * pstream)
589{
590#ifdef DEBUG_PRINT
591 emprintf(pdev->memory, "planr_print_page\n");
592#endif
593 return plan_print_page_loop(pdev, 0, 3, pstream);
594}
diff --git a/psi/msvc.mak b/psi/msvc.mak
index 92671cf20..8ad032c32 100644
--- a/psi/msvc.mak
+++ b/psi/msvc.mak
@@ -1469,7 +1469,7 @@ DEVICE_DEVS12=$(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev $(DD)bitrgbtags.dev
1469DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pngmonod.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev $(DD)fpng.dev $(DD)psdcmykog.dev 1469DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pngmonod.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev $(DD)fpng.dev $(DD)psdcmykog.dev
1470DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev $(DD)jpegcmyk.dev 1470DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev $(DD)jpegcmyk.dev
1471DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)ps2write.dev $(DD)eps2write.dev $(DD)txtwrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev $(DD)xpswrite.dev $(DD)inkcov.dev $(DD)ink_cov.dev 1471DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)ps2write.dev $(DD)eps2write.dev $(DD)txtwrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev $(DD)xpswrite.dev $(DD)inkcov.dev $(DD)ink_cov.dev
1472DEVICE_DEVS16=$(DD)bbox.dev $(DD)plib.dev $(DD)plibg.dev $(DD)plibm.dev $(DD)plibc.dev $(DD)plibk.dev $(DD)plan.dev $(DD)plang.dev $(DD)planm.dev $(DD)planc.dev $(DD)plank.dev 1472DEVICE_DEVS16=$(DD)bbox.dev $(DD)plib.dev $(DD)plibg.dev $(DD)plibm.dev $(DD)plibc.dev $(DD)plibk.dev $(DD)plan.dev $(DD)plang.dev $(DD)planm.dev $(DD)planc.dev $(DD)plank.dev $(DD)planr.dev
1473!if "$(WITH_CUPS)" == "1" 1473!if "$(WITH_CUPS)" == "1"
1474DEVICE_DEVS16=$(DEVICE_DEVS16) $(DD)cups.dev 1474DEVICE_DEVS16=$(DEVICE_DEVS16) $(DD)cups.dev
1475!endif 1475!endif