[gs-cvs] rev 7837 - trunk/gs/src
leonardo at ghostscript.com
leonardo at ghostscript.com
Mon Apr 9 01:54:32 PDT 2007
Author: leonardo
Date: 2007-04-09 01:54:30 -0700 (Mon, 09 Apr 2007)
New Revision: 7837
Modified:
trunk/gs/src/gdevprn.c
trunk/gs/src/gdevprna.c
trunk/gs/src/gxband.h
trunk/gs/src/gxclfile.c
trunk/gs/src/gxclio.h
trunk/gs/src/gxclist.c
trunk/gs/src/gxclist.h
trunk/gs/src/gxclmem.c
trunk/gs/src/gxclmem.h
trunk/gs/src/gxclpage.c
trunk/gs/src/gxclread.c
trunk/gs/src/gxclutil.c
trunk/gs/src/gxpageq.c
trunk/gs/src/gxpageq.h
trunk/gs/src/lib.mak
Log:
Implementing clist i/o virtual functions.
DETAILS :
This is a preparation for fixing the bug 688396.
This change is algorithmically equivalent.
The old code defines macros for substituting
memfile_* procs to clist_* procs when
the makefile option BAND_LIST_STORAGE is set to 'memory'.
Instead that, the new code defines a new structure clist_io_procs_t,
stores the procs into it, and chooses
an implementation by the module initialization mechanizm.
The new function clist_init_io_procs works for that.
We would like to define the procs as virtual methods
of *clist_file_ptr, but it needs to change the logics
of clist_fopen, clist_fclose with allocating an
auxiliary structure. We would like to make this improvement
as a separate patch in order to simplify the
regression testing and debugging.
EXPECTED DIFFERENCES :
None.
Modified: trunk/gs/src/gdevprn.c
===================================================================
--- trunk/gs/src/gdevprn.c 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gdevprn.c 2007-04-09 08:54:30 UTC (rev 7837)
@@ -137,6 +137,7 @@
open_c:
ppdev->buf = base;
ppdev->buffer_space = space;
+ clist_init_io_procs(pclist_dev, false);
clist_init_params(pclist_dev, base, space, pdev,
ppdev->printer_procs.buf_procs,
space_params->band, ppdev->is_async_renderer,
Modified: trunk/gs/src/gdevprna.c
===================================================================
--- trunk/gs/src/gdevprna.c 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gdevprna.c 2007-04-09 08:54:30 UTC (rev 7837)
@@ -251,9 +251,11 @@
gdev_prn_async_write_close_device(gx_device * pdev)
{
gx_device_printer *const pwdev = (gx_device_printer *) pdev;
+ gx_device_clist_writer *const pcwdev =
+ &((gx_device_clist *) pdev)->writer;
/* Signal render thread to close & terminate when done */
- gx_page_queue_add_page(pwdev->page_queue,
+ gx_page_queue_add_page(pcwdev, pwdev->page_queue,
GX_PAGE_QUEUE_ACTION_TERMINATE, 0, 0);
/* Wait for renderer to finish all pages & terminate req */
@@ -599,7 +601,7 @@
/* do NOT close files before sending to page queue */
flush_code = clist_end_page(pcwdev);
- add_code = gx_page_queue_add_page(pwdev->page_queue,
+ add_code = gx_page_queue_add_page(pcwdev, pwdev->page_queue,
(flush ? GX_PAGE_QUEUE_ACTION_FULL_PAGE :
GX_PAGE_QUEUE_ACTION_COPY_PAGE),
&pcwdev->page_info, num_copies);
@@ -654,7 +656,7 @@
/* do NOT close files before sending to page queue */
flush_code = clist_end_page(pcwdev);
- add_code = gx_page_queue_add_page(pwdev->page_queue,
+ add_code = gx_page_queue_add_page(pcwdev, pwdev->page_queue,
(partial ? GX_PAGE_QUEUE_ACTION_PARTIAL_PAGE :
GX_PAGE_QUEUE_ACTION_FULL_PAGE),
&pcwdev->page_info, 0);
Modified: trunk/gs/src/gxband.h
===================================================================
--- trunk/gs/src/gxband.h 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxband.h 2007-04-09 08:54:30 UTC (rev 7837)
@@ -61,6 +61,7 @@
clist_file_ptr cfile; /* command file, normally 0 */
char bfname[gp_file_name_sizeof]; /* block file name */
clist_file_ptr bfile; /* block file, normally 0 */
+ clist_io_procs_t *io_procs;
uint tile_cache_size; /* size of tile cache */
int64_t bfile_end_pos; /* ftell at end of bfile */
gx_band_params_t band_params; /* parameters used when writing band list */
@@ -70,7 +71,7 @@
gx_colors_used_t band_colors_used[PAGE_INFO_NUM_COLORS_USED]; /* colors used on the page */
} gx_band_page_info_t;
#define PAGE_INFO_NULL_VALUES\
- { 0 }, 0, { 0 }, 0, 0, 0, { BAND_PARAMS_INITIAL_VALUES },\
+ { 0 }, 0, { 0 }, NULL, 0, 0, 0, { BAND_PARAMS_INITIAL_VALUES },\
0x3fffffff, { { 0 } }
/*
Modified: trunk/gs/src/gxclfile.c
===================================================================
--- trunk/gs/src/gxclfile.c 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxclfile.c 2007-04-09 08:54:30 UTC (rev 7837)
@@ -25,9 +25,11 @@
/* This is an implementation of the command list I/O interface */
/* that uses the file system for storage. */
+extern clist_io_procs_t *clist_io_procs_file_global;
+
/* ------ Open/close/unlink ------ */
-int
+private int
clist_fopen(char fname[gp_file_name_sizeof], const char *fmode,
clist_file_ptr * pcf, gs_memory_t * mem, gs_memory_t *data_mem,
bool ok_to_compress)
@@ -47,7 +49,13 @@
return 0;
}
-int
+private int
+clist_unlink(const char *fname)
+{
+ return (unlink(fname) != 0 ? gs_note_error(gs_error_ioerror) : 0);
+}
+
+private int
clist_fclose(clist_file_ptr cf, const char *fname, bool delete)
{
return (fclose((FILE *) cf) != 0 ? gs_note_error(gs_error_ioerror) :
@@ -55,21 +63,9 @@
0);
}
-int
-clist_unlink(const char *fname)
-{
- return (unlink(fname) != 0 ? gs_note_error(gs_error_ioerror) : 0);
-}
-
/* ------ Writing ------ */
-long
-clist_space_available(long requested)
-{
- return requested;
-}
-
-int
+private int
clist_fwrite_chars(const void *data, uint len, clist_file_ptr cf)
{
return fwrite(data, 1, len, (FILE *) cf);
@@ -77,7 +73,7 @@
/* ------ Reading ------ */
-int
+private int
clist_fread_chars(void *data, uint len, clist_file_ptr cf)
{
FILE *f = (FILE *) cf;
@@ -111,25 +107,25 @@
/* ------ Position/status ------ */
-int
+private int
clist_set_memory_warning(clist_file_ptr cf, int bytes_left)
{
return 0; /* no-op */
}
-int
+private int
clist_ferror_code(clist_file_ptr cf)
{
return (ferror((FILE *) cf) ? gs_error_ioerror : 0);
}
-int64_t
+private int64_t
clist_ftell(clist_file_ptr cf)
{
return gp_ftell_64((FILE *) cf);
}
-void
+private void
clist_rewind(clist_file_ptr cf, bool discard_data, const char *fname)
{
FILE *f = (FILE *) cf;
@@ -153,8 +149,29 @@
}
}
-int
+private int
clist_fseek(clist_file_ptr cf, int64_t offset, int mode, const char *ignore_fname)
{
return gp_fseek_64((FILE *) cf, offset, mode);
}
+
+clist_io_procs_t clist_io_procs_file = {
+ clist_fopen,
+ clist_fclose,
+ clist_unlink,
+ clist_fwrite_chars,
+ clist_fread_chars,
+ clist_set_memory_warning,
+ clist_ferror_code,
+ clist_ftell,
+ clist_rewind,
+ clist_fseek,
+};
+
+init_proc(gs_clist_init);
+int
+gs_gxclfile_init(gs_memory_t *mem)
+{
+ clist_io_procs_file_global = &clist_io_procs_file;
+ return 0;
+}
Modified: trunk/gs/src/gxclio.h
===================================================================
--- trunk/gs/src/gxclio.h 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxclio.h 2007-04-09 08:54:30 UTC (rev 7837)
@@ -29,63 +29,67 @@
typedef void *clist_file_ptr; /* We can't do any better than this. */
-/* ---------------- Open/close/unlink ---------------- */
+struct clist_io_procs_s {
-/*
- * If *fname = 0, generate and store a new scratch file name; otherwise,
- * open an existing file. Only modes "r" and "w+" are supported,
- * and only binary data (but the caller must append the "b" if needed).
- * Mode "r" with *fname = 0 is an error.
- */
-int clist_fopen(char fname[gp_file_name_sizeof], const char *fmode,
- clist_file_ptr * pcf,
- gs_memory_t * mem, gs_memory_t *data_mem,
- bool ok_to_compress);
+ /* ---------------- Open/close/unlink ---------------- */
-/*
- * Close a file, optionally deleting it.
- */
-int clist_fclose(clist_file_ptr cf, const char *fname, bool delete);
+ /*
+ * If *fname = 0, generate and store a new scratch file name; otherwise,
+ * open an existing file. Only modes "r" and "w+" are supported,
+ * and only binary data (but the caller must append the "b" if needed).
+ * Mode "r" with *fname = 0 is an error.
+ */
+ int (*fopen)(char fname[gp_file_name_sizeof], const char *fmode,
+ clist_file_ptr * pcf,
+ gs_memory_t * mem, gs_memory_t *data_mem,
+ bool ok_to_compress);
-/*
- * Delete a file.
- */
-int clist_unlink(const char *fname);
+ /*
+ * Close a file, optionally deleting it.
+ */
+ int (*fclose)(clist_file_ptr cf, const char *fname, bool delete);
-/* ---------------- Writing ---------------- */
+ /*
+ * Delete a file.
+ */
+ int (*unlink)(const char *fname);
-/* clist_space_available returns min(requested, available). */
-long clist_space_available(long requested);
+ /* ---------------- Writing ---------------- */
-int clist_fwrite_chars(const void *data, uint len, clist_file_ptr cf);
+ int (*fwrite_chars)(const void *data, uint len, clist_file_ptr cf);
-/* ---------------- Reading ---------------- */
+ /* ---------------- Reading ---------------- */
-int clist_fread_chars(void *data, uint len, clist_file_ptr cf);
+ int (*fread_chars)(void *data, uint len, clist_file_ptr cf);
-/* ---------------- Position/status ---------------- */
+ /* ---------------- Position/status ---------------- */
-/*
- * Set the low-memory warning threshold. clist_ferror_code will return 1
- * if fewer than this many bytes of memory are left for storing band data.
- */
-int clist_set_memory_warning(clist_file_ptr cf, int bytes_left);
+ /*
+ * Set the low-memory warning threshold. clist_ferror_code will return 1
+ * if fewer than this many bytes of memory are left for storing band data.
+ */
+ int (*set_memory_warning)(clist_file_ptr cf, int bytes_left);
-/*
- * clist_ferror_code returns a negative error code per gserrors.h, not a
- * Boolean; 0 means no error, 1 means low-memory warning.
- */
-int clist_ferror_code(clist_file_ptr cf);
+ /*
+ * clist_ferror_code returns a negative error code per gserrors.h, not a
+ * Boolean; 0 means no error, 1 means low-memory warning.
+ */
+ int (*ferror_code)(clist_file_ptr cf);
-int64_t clist_ftell(clist_file_ptr cf);
+ int64_t (*ftell)(clist_file_ptr cf);
-/*
- * We pass the file name to clist_rewind and clist_fseek in case the
- * implementation has to close and reopen the file. (clist_fseek with
- * offset = 0 and mode = SEEK_END indicates we are about to append.)
- */
-void clist_rewind(clist_file_ptr cf, bool discard_data, const char *fname);
+ /*
+ * We pass the file name to clist_rewind and clist_fseek in case the
+ * implementation has to close and reopen the file. (clist_fseek with
+ * offset = 0 and mode = SEEK_END indicates we are about to append.)
+ */
+ void (*rewind)(clist_file_ptr cf, bool discard_data, const char *fname);
-int clist_fseek(clist_file_ptr cf, int64_t offset, int mode, const char *fname);
+ int (*fseek)(clist_file_ptr cf, int64_t offset, int mode, const char *fname);
+};
+typedef struct clist_io_procs_s clist_io_procs_t;
+
+extern clist_io_procs_t *clist_io_procs_file_global;
+
#endif /* gxclio_INCLUDED */
Modified: trunk/gs/src/gxclist.c
===================================================================
--- trunk/gs/src/gxclist.c 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxclist.c 2007-04-09 08:54:30 UTC (rev 7837)
@@ -139,6 +139,27 @@
gx_forward_ret_devn_params
};
+/*------------------- Choose the implementation -----------------------
+
+ For chossing the clist i/o implementation by makefile options
+ we define a global variable, which is initialized with
+ file io procs when they are included into the build.
+ */
+clist_io_procs_t *clist_io_procs_file_global = NULL;
+
+void
+clist_init_io_procs(gx_device_clist *pclist_dev, bool in_memory)
+{
+#if 0 /* reserved for future use */
+ if (in_memory || clist_io_procs_file_global == NULL)
+ pclist_dev->common.page_info.io_procs = pclist_dev->reader.page_info.io_procs =
+ pclist_dev->writer.page_info.io_procs = &clist_io_procs_memory;
+ else
+#endif
+ pclist_dev->common.page_info.io_procs = pclist_dev->reader.page_info.io_procs =
+ pclist_dev->writer.page_info.io_procs = clist_io_procs_file_global;
+}
+
/* ------ Define the command set and syntax ------ */
/* Initialization for imager state. */
@@ -452,9 +473,9 @@
/* if partial page rendering is available */
if ( clist_test_VMerror_recoverable(cdev) )
{ if (cdev->page_bfile != 0)
- code = clist_set_memory_warning(cdev->page_bfile, b_block);
+ code = cdev->page_info.io_procs->set_memory_warning(cdev->page_bfile, b_block);
if (code >= 0 && cdev->page_cfile != 0)
- code = clist_set_memory_warning(cdev->page_cfile, c_block);
+ code = cdev->page_info.io_procs->set_memory_warning(cdev->page_cfile, c_block);
}
return code;
}
@@ -512,10 +533,10 @@
cdev->page_cfname[0] = 0; /* create a new file */
cdev->page_bfname[0] = 0; /* ditto */
clist_reset_page(cdev);
- if ((code = clist_fopen(cdev->page_cfname, fmode, &cdev->page_cfile,
+ if ((code = cdev->page_info.io_procs->fopen(cdev->page_cfname, fmode, &cdev->page_cfile,
cdev->bandlist_memory, cdev->bandlist_memory,
true)) < 0 ||
- (code = clist_fopen(cdev->page_bfname, fmode, &cdev->page_bfile,
+ (code = cdev->page_info.io_procs->fopen(cdev->page_bfname, fmode, &cdev->page_bfile,
cdev->bandlist_memory, cdev->bandlist_memory,
false)) < 0 ||
(code = clist_reinit_output_file(dev)) < 0
@@ -533,11 +554,11 @@
clist_close_page_info(gx_band_page_info_t *ppi)
{
if (ppi->cfile != NULL) {
- clist_fclose(ppi->cfile, ppi->cfname, true);
+ ppi->io_procs->fclose(ppi->cfile, ppi->cfname, true);
ppi->cfile = NULL;
}
if (ppi->bfile != NULL) {
- clist_fclose(ppi->bfile, ppi->bfname, true);
+ ppi->io_procs->fclose(ppi->bfile, ppi->bfname, true);
ppi->bfile = NULL;
}
return 0;
@@ -601,15 +622,15 @@
if (flush) {
if (cdev->page_cfile != 0)
- clist_rewind(cdev->page_cfile, true, cdev->page_cfname);
+ cdev->page_info.io_procs->rewind(cdev->page_cfile, true, cdev->page_cfname);
if (cdev->page_bfile != 0)
- clist_rewind(cdev->page_bfile, true, cdev->page_bfname);
+ cdev->page_info.io_procs->rewind(cdev->page_bfile, true, cdev->page_bfname);
clist_reset_page(cdev);
} else {
if (cdev->page_cfile != 0)
- clist_fseek(cdev->page_cfile, 0L, SEEK_END, cdev->page_cfname);
+ cdev->page_info.io_procs->fseek(cdev->page_cfile, 0L, SEEK_END, cdev->page_cfname);
if (cdev->page_bfile != 0)
- clist_fseek(cdev->page_bfile, 0L, SEEK_END, cdev->page_bfname);
+ cdev->page_info.io_procs->fseek(cdev->page_bfile, 0L, SEEK_END, cdev->page_bfname);
}
code = clist_init(dev); /* reinitialize */
if (code >= 0)
@@ -636,24 +657,24 @@
* Note that because of copypage, there may be many such entries.
*/
cb.band_min = cb.band_max = cmd_band_end;
- cb.pos = (cldev->page_cfile == 0 ? 0 : clist_ftell(cldev->page_cfile));
- code = clist_fwrite_chars(&cb, sizeof(cb), cldev->page_bfile);
+ cb.pos = (cldev->page_cfile == 0 ? 0 : cldev->page_info.io_procs->ftell(cldev->page_cfile));
+ code = cldev->page_info.io_procs->fwrite_chars(&cb, sizeof(cb), cldev->page_bfile);
if (code > 0)
code = 0;
}
if (code >= 0) {
clist_compute_colors_used(cldev);
ecode |= code;
- cldev->page_bfile_end_pos = clist_ftell(cldev->page_bfile);
+ cldev->page_bfile_end_pos = cldev->page_info.io_procs->ftell(cldev->page_bfile);
}
if (code < 0)
ecode = code;
/* Reset warning margin to 0 to release reserve memory if mem files */
if (cldev->page_bfile != 0)
- clist_set_memory_warning(cldev->page_bfile, 0);
+ cldev->page_info.io_procs->set_memory_warning(cldev->page_bfile, 0);
if (cldev->page_cfile != 0)
- clist_set_memory_warning(cldev->page_cfile, 0);
+ cldev->page_info.io_procs->set_memory_warning(cldev->page_cfile, 0);
#ifdef DEBUG
if (gs_debug_c('l') | gs_debug_c(':'))
Modified: trunk/gs/src/gxclist.h
===================================================================
--- trunk/gs/src/gxclist.h 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxclist.h 2007-04-09 08:54:30 UTC (rev 7837)
@@ -176,7 +176,7 @@
int ymin, ymax; /* current band, <0 when writing */\
/* Following are set when writing, read when reading. */\
gx_band_page_info_t page_info; /* page information */\
- int nbands /* # of bands */
+ int nbands /* # of bands */
typedef struct gx_device_clist_common_s {
gx_device_clist_common_members;
@@ -300,6 +300,8 @@
/* The device template itself is never used, only the procedures. */
extern const gx_device_procs gs_clist_device_procs;
+void clist_init_io_procs(gx_device_clist *pclist_dev, bool in_memory);
+
/* Reset (or prepare to append to) the command list after printing a page. */
int clist_finish_page(gx_device * dev, bool flush);
Modified: trunk/gs/src/gxclmem.c
===================================================================
--- trunk/gs/src/gxclmem.c 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxclmem.c 2007-04-09 08:54:30 UTC (rev 7837)
@@ -152,6 +152,8 @@
/* forward references */
private void memfile_free_mem(MEMFILE * f);
private int memfile_init_empty(MEMFILE * f);
+private int memfile_set_memory_warning(clist_file_ptr cf, int bytes_left);
+private int memfile_fclose(clist_file_ptr cf, const char *fname, bool delete);
/************************************************/
/* #define DEBUG /- force statistics -/ */
@@ -218,7 +220,7 @@
/* ---------------- Open/close/unlink ---------------- */
-int
+private int
memfile_fopen(char fname[gp_file_name_sizeof], const char *fmode,
clist_file_ptr /*MEMFILE * */ * pf,
gs_memory_t *mem, gs_memory_t *data_mem, bool ok_to_compress)
@@ -319,7 +321,7 @@
return code;
}
-int
+private int
memfile_fclose(clist_file_ptr cf, const char *fname, bool delete)
{
MEMFILE *const f = (MEMFILE *)cf;
@@ -355,7 +357,7 @@
return 0;
}
-int
+private int
memfile_unlink(const char *fname)
{
/*
@@ -368,7 +370,7 @@
/* ---------------- Writing ---------------- */
/* Pre-alloc enough reserve mem blox to guarantee a write of N bytes will succeed */
-int /* returns 0 ok, gs_error_VMerror if insufficient */
+private int /* returns 0 ok, gs_error_VMerror if insufficient */
memfile_set_memory_warning(clist_file_ptr cf, int bytes_left)
{
MEMFILE *const f = (MEMFILE *)cf;
@@ -611,7 +613,7 @@
return (ecode);
}
-int /* returns # of chars actually written */
+private int /* returns # of chars actually written */
memfile_fwrite_chars(const void *data, uint len, clist_file_ptr cf)
{
const char *str = (const char *)data;
@@ -824,7 +826,7 @@
/* ---------------- Reading ---------------- */
-int
+private int
memfile_fread_chars(void *data, uint len, clist_file_ptr cf)
{
char *str = (char *)data;
@@ -857,19 +859,19 @@
/* ---------------- Position/status ---------------- */
-int
+private int
memfile_ferror_code(clist_file_ptr cf)
{
return (((MEMFILE *) cf)->error_code); /* errors stored here */
}
-int64_t
+private int64_t
memfile_ftell(clist_file_ptr cf)
{
return (((MEMFILE *) cf)->log_curr_pos);
}
-void
+private void
memfile_rewind(clist_file_ptr cf, bool discard_data, const char *ignore_fname)
{
MEMFILE *f = (MEMFILE *) cf;
@@ -885,7 +887,7 @@
}
}
-int
+private int
memfile_fseek(clist_file_ptr cf, int64_t offset, int mode, const char *ignore_fname)
{
MEMFILE *f = (MEMFILE *) cf;
@@ -1122,3 +1124,23 @@
return 0;
}
+
+clist_io_procs_t clist_io_procs_memory = {
+ memfile_fopen,
+ memfile_fclose,
+ memfile_unlink,
+ memfile_fwrite_chars,
+ memfile_fread_chars,
+ memfile_set_memory_warning,
+ memfile_ferror_code,
+ memfile_ftell,
+ memfile_rewind,
+ memfile_fseek,
+};
+
+int
+gs_gxclmem_init(gs_memory_t *mem)
+{
+ clist_io_procs_file_global = &clist_io_procs_memory;
+ return 0;
+}
Modified: trunk/gs/src/gxclmem.h
===================================================================
--- trunk/gs/src/gxclmem.h 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxclmem.h 2007-04-09 08:54:30 UTC (rev 7837)
@@ -113,29 +113,6 @@
gs_private_st_ptrs2(st_MEMFILE, MEMFILE, "MEMFILE",\
MEMFILE_enum_ptrs, MEMFILE_reloc_ptrs, compress_state, decompress_state)
-/* Make the memfile_... operations aliases for the clist_... operations. */
-
-#define memfile_fopen(fname, fmode, pcf, mem, data_mem, compress)\
- clist_fopen(fname, fmode, pcf, mem, data_mem, compress)
-#define memfile_fclose(cf, fname, delete)\
- clist_fclose(cf, fname, delete)
-#define memfile_unlink(fname)\
- clist_unlink(fname)
-
-#define memfile_space_available(req)\
- clist_space_available(req)
-#define memfile_fwrite_chars(data, len, cf)\
- clist_fwrite_chars(data, len, cf)
-
-#define memfile_fread_chars(data, len, cf)\
- clist_fread_chars(data, len, cf)
-
-#define memfile_set_memory_warning(cf, nbytes) clist_set_memory_warning(cf, nbytes)
-#define memfile_ferror_code(cf) clist_ferror_code(cf)
-#define memfile_ftell(cf) clist_ftell(cf)
-#define memfile_rewind(cf, discard, fname) clist_rewind(cf, discard, fname)
-#define memfile_fseek(cf, offset, mode, fname) clist_fseek(cf, offset, mode, fname)
-
/* Declare the procedures for returning the prototype filter states */
/* for compressing and decompressing the band list. */
const stream_state *clist_compressor_state(void *);
Modified: trunk/gs/src/gxclpage.c
===================================================================
--- trunk/gs/src/gxclpage.c 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxclpage.c 2007-04-09 08:54:30 UTC (rev 7837)
@@ -22,6 +22,8 @@
gdev_prn_save_page(gx_device_printer * pdev, gx_saved_page * page,
int num_copies)
{
+ gx_device_clist *cdev = (gx_device_clist *) pdev;
+
/* Make sure we are banding. */
if (!pdev->buffer_space)
return_error(gs_error_rangecheck);
@@ -33,8 +35,8 @@
int code;
if ((code = clist_end_page(pcldev)) < 0 ||
- (code = clist_fclose(pcldev->page_cfile, pcldev->page_cfname, false)) < 0 ||
- (code = clist_fclose(pcldev->page_bfile, pcldev->page_bfname, false)) < 0
+ (code = cdev->common.page_info.io_procs->fclose(pcldev->page_cfile, pcldev->page_cfname, false)) < 0 ||
+ (code = cdev->common.page_info.io_procs->fclose(pcldev->page_bfile, pcldev->page_bfname, false)) < 0
)
return code;
/* Save the device information. */
@@ -108,8 +110,8 @@
for (i = 0; i < count; ++i) {
const gx_saved_page *page = ppages[i].page;
- clist_unlink(page->info.cfname);
- clist_unlink(page->info.bfname);
+ pcldev->page_info.io_procs->unlink(page->info.cfname);
+ pcldev->page_info.io_procs->unlink(page->info.bfname);
}
return code;
}
Modified: trunk/gs/src/gxclread.c
===================================================================
--- trunk/gs/src/gxclread.c 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxclread.c 2007-04-09 08:54:30 UTC (rev 7837)
@@ -60,12 +60,13 @@
s_band_read_init(stream_state * st)
{
stream_band_read_state *const ss = (stream_band_read_state *) st;
+ clist_io_procs_t *io_procs = ss->page_info.io_procs;
ss->left = 0;
ss->b_this.band_min = 0;
ss->b_this.band_max = 0;
ss->b_this.pos = 0;
- clist_rewind(ss->page_bfile, false, ss->page_bfname);
+ io_procs->rewind(ss->page_bfile, false, ss->page_bfname);
return 0;
}
@@ -81,13 +82,14 @@
uint left = ss->left;
int status = 1;
uint count;
+ clist_io_procs_t *io_procs = ss->page_info.io_procs;
while ((count = wlimit - q) != 0) {
if (left) { /* Read more data for the current run. */
if (count > left)
count = left;
- clist_fread_chars(q + 1, count, cfile);
- if (clist_ferror_code(cfile) < 0) {
+ io_procs->fread_chars(q + 1, count, cfile);
+ if (io_procs->ferror_code(cfile) < 0) {
status = ERRC;
break;
}
@@ -102,7 +104,7 @@
* that includes a current band).
*/
if (ss->b_this.band_min == cmd_band_end &&
- clist_ftell(bfile) == ss->page_bfile_end_pos
+ io_procs->ftell(bfile) == ss->page_bfile_end_pos
) {
status = EOFC;
break;
@@ -111,15 +113,15 @@
int bmax = ss->b_this.band_max;
int64_t pos = ss->b_this.pos;
- clist_fread_chars(&ss->b_this, sizeof(ss->b_this), bfile);
+ io_procs->fread_chars(&ss->b_this, sizeof(ss->b_this), bfile);
if (!(ss->band_last >= bmin && ss->band_first <= bmax))
goto rb;
- clist_fseek(cfile, pos, SEEK_SET, ss->page_cfname);
+ io_procs->fseek(cfile, pos, SEEK_SET, ss->page_cfname);
left = (uint) (ss->b_this.pos - pos);
if_debug7('l',
"[l]reading for bands (%d,%d) at bfile %ld, cfile %ld, length %u color %d rop %d\n",
bmin, bmax,
- (long)(clist_ftell(bfile) - sizeof(ss->b_this)), /* stefan foo was: 2 * sizeof ?? */
+ (long)(io_procs->ftell(bfile) - sizeof(ss->b_this)), /* stefan foo was: 2 * sizeof ?? */
(long)pos, left, ss->b_this.band_complexity.uses_color,
ss->b_this.band_complexity.nontrivial_rops);
}
@@ -505,13 +507,13 @@
/* If this is a saved page, open the files. */
if (rs.page_cfile == 0) {
- code = clist_fopen(rs.page_cfname,
+ code = crdev->page_info.io_procs->fopen(rs.page_cfname,
gp_fmode_rb, &rs.page_cfile, crdev->bandlist_memory,
crdev->bandlist_memory, true);
opened_cfile = (code >= 0);
}
if (rs.page_bfile == 0 && code >= 0) {
- code = clist_fopen(rs.page_bfname,
+ code = crdev->page_info.io_procs->fopen(rs.page_bfname,
gp_fmode_rb, &rs.page_bfile, crdev->bandlist_memory,
crdev->bandlist_memory, false);
opened_bfile = (code >= 0);
@@ -535,9 +537,9 @@
/* Close the files if we just opened them. */
if (opened_bfile && rs.page_bfile != 0)
- clist_fclose(rs.page_bfile, rs.page_bfname, false);
+ crdev->page_info.io_procs->fclose(rs.page_bfile, rs.page_bfname, false);
if (opened_cfile && rs.page_cfile != 0)
- clist_fclose(rs.page_cfile, rs.page_cfname, false);
+ crdev->page_info.io_procs->fclose(rs.page_cfile, rs.page_cfname, false);
return code;
}
@@ -585,15 +587,15 @@
rs.band_last = crdev->nbands;
rs.page_info = crdev->page_info;
- save_pos = clist_ftell(rs.page_bfile);
- clist_fseek(rs.page_bfile, pos, SEEK_SET, rs.page_bfname);
+ save_pos = crdev->page_info.io_procs->ftell(rs.page_bfile);
+ crdev->page_info.io_procs->fseek(rs.page_bfile, pos, SEEK_SET, rs.page_bfname);
for (i=0; i < crdev->nbands; i++) {
- clist_fread_chars(&cb, sizeof(cb), rs.page_bfile);
+ crdev->page_info.io_procs->fread_chars(&cb, sizeof(cb), rs.page_bfile);
crdev->band_complexity_array[i] = cb.band_complexity;
}
- clist_fseek(rs.page_bfile, save_pos, SEEK_SET, rs.page_bfname);
+ crdev->page_info.io_procs->fseek(rs.page_bfile, save_pos, SEEK_SET, rs.page_bfname);
code = 0;
}
return code;
Modified: trunk/gs/src/gxclutil.c
===================================================================
--- trunk/gs/src/gxclutil.c 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxclutil.c 2007-04-09 08:54:30 UTC (rev 7837)
@@ -143,11 +143,11 @@
return_error(gs_error_ioerror);
cb.band_min = band_min;
cb.band_max = band_max;
- cb.pos = clist_ftell(cfile);
+ cb.pos = cldev->page_info.io_procs->ftell(cfile);
clist_copy_band_complexity(&cb.band_complexity, band_complexity);
if_debug4('l', "[l]writing for bands (%d,%d) at %ld K %d \n",
band_min, band_max, (long)cb.pos, cb.band_complexity.uses_color);
- clist_fwrite_chars(&cb, sizeof(cb), bfile);
+ cldev->page_info.io_procs->fwrite_chars(&cb, sizeof(cb), bfile);
if (cp != 0) {
pcl->tail->next = 0; /* terminate the list */
for (; cp != 0; cp = cp->next) {
@@ -160,14 +160,14 @@
return_error(gs_error_Fatal);
}
#endif
- clist_fwrite_chars(cp + 1, cp->size, cfile);
+ cldev->page_info.io_procs->fwrite_chars(cp + 1, cp->size, cfile);
}
pcl->head = pcl->tail = 0;
}
- clist_fwrite_chars(&end, 1, cfile);
+ cldev->page_info.io_procs->fwrite_chars(&end, 1, cfile);
process_interrupts(cldev->memory);
- code_b = clist_ferror_code(bfile);
- code_c = clist_ferror_code(cfile);
+ code_b = cldev->page_info.io_procs->ferror_code(bfile);
+ code_c = cldev->page_info.io_procs->ferror_code(cfile);
if (code_b < 0)
return_error(code_b);
if (code_c < 0)
Modified: trunk/gs/src/gxpageq.c
===================================================================
--- trunk/gs/src/gxpageq.c 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxpageq.c 2007-04-09 08:54:30 UTC (rev 7837)
@@ -272,7 +272,7 @@
/* Add page to a page queue */
/* Even if an error is returned, entry will have been added to queue! */
int /* rets 0 ok, gs_error_VMerror if error */
-gx_page_queue_add_page(
+gx_page_queue_add_page(gx_device_clist_writer *const pcwdev,
gx_page_queue_t * queue, /* page queue to add to */
gx_page_queue_action_t action, /* action code to queue */
const gx_band_page_info_t * page_info, /* bandinfo incl. bandlist (or 0) */
@@ -296,8 +296,10 @@
entry->action = action;
if (page_info != 0)
entry->page_info = *page_info;
- else
+ else {
entry->page_info = null_page_info;
+ entry->page_info.io_procs = pcwdev->io_procs;
+ }
entry->num_copies = page_count;
/* Stick onto page queue & signal */
Modified: trunk/gs/src/gxpageq.h
===================================================================
--- trunk/gs/src/gxpageq.h 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/gxpageq.h 2007-04-09 08:54:30 UTC (rev 7837)
@@ -227,6 +227,7 @@
*/
/* rets 0 ok, gs_error_Fatal if error */
int gx_page_queue_add_page(
+ gx_device_clist_writer *const pcwdev,
gx_page_queue_t * queue, /* page queue to add to */
gx_page_queue_action_t action, /* action code to queue */
const gx_band_page_info_t * page_info, /* bandinfo incl. bandlist */
Modified: trunk/gs/src/lib.mak
===================================================================
--- trunk/gs/src/lib.mak 2007-04-09 03:18:38 UTC (rev 7836)
+++ trunk/gs/src/lib.mak 2007-04-09 08:54:30 UTC (rev 7837)
@@ -1709,6 +1709,7 @@
clfile_=$(GLOBJ)gxclfile.$(OBJ)
$(GLD)clfile.dev : $(LIB_MAK) $(ECHOGS_XE) $(clfile_)
$(SETMOD) $(GLD)clfile $(clfile_)
+ $(ADDMOD) $(GLD)clfile -init gxclfile
$(GLOBJ)gxclfile.$(OBJ) : $(GLSRC)gxclfile.c $(stdio__h) $(string__h)\
$(gp_h) $(gsmemory_h) $(gserror_h) $(gserrors_h) $(gxclio_h)
@@ -1721,6 +1722,7 @@
$(SETMOD) $(GLD)clmemory $(clmemory_)
$(ADDMOD) $(GLD)clmemory -include $(GLD)s$(BAND_LIST_COMPRESSOR)e
$(ADDMOD) $(GLD)clmemory -include $(GLD)s$(BAND_LIST_COMPRESSOR)d
+ $(ADDMOD) $(GLD)clmemory -init gxclmem
$(ADDMOD) $(GLD)clmemory -init cl_$(BAND_LIST_COMPRESSOR)
gxclmem_h=$(GLSRC)gxclmem.h $(gxclio_h) $(strimpl_h)
More information about the gs-cvs
mailing list