913
clist_writer_push_no_cropping(gx_device_clist_writer *cdev)
915
clist_writer_cropping_buffer_t *buf = gs_alloc_struct(cdev->memory,
916
clist_writer_cropping_buffer_t,
917
&st_clist_writer_cropping_buffer, "clist_writer_transparency_push");
920
return_error(gs_error_VMerror);
921
if_debug1('v', "[v]push cropping[%d]\n", cdev->cropping_level);
922
buf->next = cdev->cropping_stack;
923
cdev->cropping_stack = buf;
924
buf->cropping_min = cdev->cropping_min;
925
buf->cropping_max = cdev->cropping_max;
926
buf->mask_id = cdev->mask_id;
927
buf->temp_mask_id = cdev->temp_mask_id;
928
cdev->cropping_level++;
933
clist_writer_push_cropping(gx_device_clist_writer *cdev, int ry, int rheight)
935
int code = clist_writer_push_no_cropping(cdev);
939
cdev->cropping_min = max(cdev->cropping_min, ry);
940
cdev->cropping_max = min(cdev->cropping_max, ry + rheight);
945
clist_writer_pop_cropping(gx_device_clist_writer *cdev)
947
clist_writer_cropping_buffer_t *buf = cdev->cropping_stack;
950
return_error(gs_error_unregistered); /*Must not happen. */
951
cdev->cropping_min = buf->cropping_min;
952
cdev->cropping_max = buf->cropping_max;
953
cdev->mask_id = buf->mask_id;
954
cdev->temp_mask_id = buf->temp_mask_id;
955
cdev->cropping_stack = buf->next;
956
cdev->cropping_level--;
957
if_debug1('v', "[v]pop cropping[%d]\n", cdev->cropping_level);
958
gs_free_object(cdev->memory, buf, "clist_writer_transparency_pop");
963
clist_writer_check_empty_cropping_stack(gx_device_clist_writer *cdev)
965
if (cdev->cropping_stack != NULL) {
966
if_debug1('v', "[v]Error: left %d cropping(s)\n", cdev->cropping_level);
967
return_error(gs_error_unregistered); /* Must not happen */
972
/* Retrieve total size for cfile and bfile. */
973
int clist_data_size(const gx_device_clist *cdev, int select)
975
const gx_band_page_info_t *pinfo = &cdev->common.page_info;
976
clist_file_ptr pfile = (!select ? pinfo->bfile : pinfo->cfile);
977
const char *fname = (!select ? pinfo->bfname : pinfo->cfname);
980
code = pinfo->io_procs->fseek(pfile, 0, SEEK_END, fname);
982
return_error(gs_error_unregistered); /* Must not happen. */
983
code = pinfo->io_procs->ftell(pfile);
985
return_error(gs_error_unregistered); /* Must not happen. */
990
/* Get command list data. */
992
clist_get_data(const gx_device_clist *cdev, int select, int offset, byte *buf, int length)
994
const gx_band_page_info_t *pinfo = &cdev->common.page_info;
995
clist_file_ptr pfile = (!select ? pinfo->bfile : pinfo->cfile);
996
const char *fname = (!select ? pinfo->bfname : pinfo->cfname);
999
code = pinfo->io_procs->fseek(pfile, offset, SEEK_SET, fname);
1001
return_error(gs_error_unregistered); /* Must not happen. */
1002
/* This assumes that fread_chars doesn't return prematurely
1003
when the buffer is not fully filled and the end of stream is not reached. */
1004
return pinfo->io_procs->fread_chars(buf, length, pfile);
1007
/* Put command list data. */
1009
clist_put_data(const gx_device_clist *cdev, int select, int offset, const byte *buf, int length)
1011
const gx_band_page_info_t *pinfo = &cdev->common.page_info;
1012
clist_file_ptr pfile = (!select ? pinfo->bfile : pinfo->cfile);
1015
code = pinfo->io_procs->ftell(pfile);
1017
return_error(gs_error_unregistered); /* Must not happen. */
1018
if (code != offset) {
1019
/* Assuming a consecutive writing only. */
1020
return_error(gs_error_unregistered); /* Must not happen. */
1022
/* This assumes that fwrite_chars doesn't return prematurely
1023
when the buffer is not fully written, except with an error. */
1024
return pinfo->io_procs->fwrite_chars(buf, length, pfile);