1
/* Copyright (C) 2001-2006 Artifex Software, Inc.
4
This software is provided AS-IS with no warranty, either express or
7
This software is distributed under license and may not be copied, modified
8
or distributed except as expressly authorized under the terms of that
9
license. Refer to licensing information at http://www.artifex.com/
10
or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
11
San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
14
/* $Id: gxclpage.c 9062 2008-09-03 11:42:35Z leonardo $ */
15
/* Page object management */
22
gdev_prn_save_page(gx_device_printer * pdev, gx_saved_page * page,
25
gx_device_clist *cdev = (gx_device_clist *) pdev;
27
/* Make sure we are banding. */
28
if (!pdev->buffer_space)
29
return_error(gs_error_rangecheck);
30
if (strlen(pdev->dname) >= sizeof(page->dname))
31
return_error(gs_error_limitcheck);
33
gx_device_clist_writer * const pcldev =
34
(gx_device_clist_writer *)pdev;
37
if ((code = clist_end_page(pcldev)) < 0 ||
38
(code = cdev->common.page_info.io_procs->fclose(pcldev->page_cfile, pcldev->page_cfname, false)) < 0 ||
39
(code = cdev->common.page_info.io_procs->fclose(pcldev->page_bfile, pcldev->page_bfname, false)) < 0
42
/* Save the device information. */
43
memcpy(&page->device, pdev, sizeof(gx_device));
44
strcpy(page->dname, pdev->dname);
45
/* Save the page information. */
46
page->info = pcldev->page_info;
50
/* Save other information. */
51
page->num_copies = num_copies;
52
return (*gs_clist_device_procs.open_device) ((gx_device *) pdev);
55
/* Render an array of saved pages. */
57
gdev_prn_render_pages(gx_device_printer * pdev,
58
const gx_placed_page * ppages, int count)
60
gx_device_clist_reader * const pcldev =
61
(gx_device_clist_reader *)pdev;
63
/* Check to make sure the pages are compatible with the device. */
67
for (i = 0; i < count; ++i) {
68
const gx_saved_page *page = ppages[i].page;
70
/* We would like to fully check the color representation, */
71
/* but we don't have enough information to do that. */
72
if (strcmp(page->dname, pdev->dname) != 0 ||
73
memcmp(&page->device.color_info, &pdev->color_info,
74
sizeof(pdev->color_info)) != 0
76
return_error(gs_error_rangecheck);
77
/* Currently we don't allow translation in Y. */
78
if (ppages[i].offset.y != 0)
79
return_error(gs_error_rangecheck);
80
/* Make sure the band parameters are compatible. */
81
if (page->info.band_params.BandBufferSpace !=
83
page->info.band_params.BandWidth !=
86
return_error(gs_error_rangecheck);
87
/* Currently we require all band heights to be the same. */
88
if (i > 0 && page->info.band_params.BandHeight !=
89
ppages[0].page->info.band_params.BandHeight)
90
return_error(gs_error_rangecheck);
93
/* Set up the page list in the device. */
94
/****** SHOULD FACTOR THIS OUT OF clist_render_init ******/
95
pcldev->ymin = pcldev->ymax = 0;
96
pcldev->pages = ppages;
97
pcldev->num_pages = count;
98
pcldev->offset_map = NULL;
99
/* Render the pages. */
101
int code = (*dev_proc(pdev, output_page))
102
((gx_device *) pdev, ppages[0].page->num_copies, true);
104
/* Delete the temporary files. */
107
for (i = 0; i < count; ++i) {
108
const gx_saved_page *page = ppages[i].page;
110
pcldev->page_info.io_procs->unlink(page->info.cfname);
111
pcldev->page_info.io_procs->unlink(page->info.bfname);