[gs-cvs] rev 8764 - trunk/gs/src

mvrhel at ghostscript.com mvrhel at ghostscript.com
Wed May 21 11:27:43 PDT 2008


Author: mvrhel
Date: 2008-05-21 11:27:42 -0700 (Wed, 21 May 2008)
New Revision: 8764

Modified:
   trunk/gs/src/gscdevn.c
   trunk/gs/src/gscie.c
   trunk/gs/src/gsciemap.c
   trunk/gs/src/gscspace.c
   trunk/gs/src/gsicc.c
   trunk/gs/src/gslibctx.c
   trunk/gs/src/gslibctx.h
   trunk/gs/src/gsnamecl.c
   trunk/gs/src/gsnamecl.h
   trunk/gs/src/gsncdummy.c
   trunk/gs/src/gxcmap.c
   trunk/gs/src/iapi.c
Log:
Fix for 689811.  Enables custom color callback when banding of images is occurs.

DETAILS:
This was a simple fix which puts the callback structure address into gslib_ctx instead of in the graphic state.  This fixes the customer's issue.  The postscript interface for custom color remains as it was with this commit.  Soon, in the future, we will be changing to a C API interface.  There does remain an issue with respect to object type tagging.  If high level images occur with banding, the object type is different than if there was no banding.  Opening a new bug in regard to this.

Modified: trunk/gs/src/gscdevn.c
===================================================================
--- trunk/gs/src/gscdevn.c	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gscdevn.c	2008-05-21 18:27:42 UTC (rev 8764)
@@ -399,7 +399,7 @@
 #endif
 
 #if ENABLE_CUSTOM_COLOR_CALLBACK
-    if (pis->custom_color_callback) {
+    if (pis->memory->gs_lib_ctx->custom_color_callback) {
 	int code = gx_remap_concrete_custom_color_DeviceN(pconc, pcs, pdc,
 						       	pis, dev, select);
 	if (code >= 0)

Modified: trunk/gs/src/gscie.c
===================================================================
--- trunk/gs/src/gscie.c	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gscie.c	2008-05-21 18:27:42 UTC (rev 8764)
@@ -402,7 +402,7 @@
          * color space.
          */
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) pgs->custom_color_callback;
+	    (client_custom_color_params_t *) pgs->memory->gs_lib_ctx->custom_color_callback;
 
         if (pcb != NULL) {
 	    if (pcb->client_procs->install_CIEBasedDEFG(pcb, pcs, pgs))
@@ -429,7 +429,7 @@
          * color space.
          */
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) pgs->custom_color_callback;
+            (client_custom_color_params_t *) pgs->memory->gs_lib_ctx->custom_color_callback;
 
         if (pcb != NULL) {
 	    if (pcb->client_procs->install_CIEBasedDEF(pcb, pcs, pgs))
@@ -454,7 +454,7 @@
          * color space.
          */
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) pgs->custom_color_callback;
+            (client_custom_color_params_t *) pgs->memory->gs_lib_ctx->custom_color_callback;
 
         if (pcb != NULL) {
 	    if (pcb->client_procs->install_CIEBasedABC(pcb, pcs, pgs))
@@ -480,7 +480,7 @@
          * color space.
          */
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) pgs->custom_color_callback;
+            (client_custom_color_params_t *) pgs->memory->gs_lib_ctx->custom_color_callback;
 
         if (pcb != NULL) {
 	    if (pcb->client_procs->install_CIEBasedA(pcb, pcs, pgs))

Modified: trunk/gs/src/gsciemap.c
===================================================================
--- trunk/gs/src/gsciemap.c	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gsciemap.c	2008-05-21 18:27:42 UTC (rev 8764)
@@ -259,7 +259,7 @@
 		gs_color_select_t select)
 {
     client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+        (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
     if (pcb != NULL) {
 	if (pcb->client_procs->remap_CIEBasedDEFG(pcb, pc, pcs,
@@ -283,7 +283,7 @@
 		gs_color_select_t select)
 {
     client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+	    (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
     if (pcb != NULL) {
 	if (pcb->client_procs->remap_CIEBasedDEF(pcb, pc, pcs,
@@ -307,7 +307,7 @@
 		gs_color_select_t select)
 {
     client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+	    (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
     if (pcb != NULL) {
 	if (pcb->client_procs->remap_CIEBasedA(pcb, pc, pcs,
@@ -337,7 +337,7 @@
 #if ENABLE_CUSTOM_COLOR_CALLBACK
     {
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+	    (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
         if (pcb != NULL) {
 	    if (pcb->client_procs->remap_CIEBasedABC(pcb, pc, pcs,

Modified: trunk/gs/src/gscspace.c
===================================================================
--- trunk/gs/src/gscspace.c	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gscspace.c	2008-05-21 18:27:42 UTC (rev 8764)
@@ -193,7 +193,7 @@
      * color space.
      */
     client_custom_color_params_t * pcb =
-	(client_custom_color_params_t *) pgs->custom_color_callback;
+	(client_custom_color_params_t *) pgs->memory->gs_lib_ctx->custom_color_callback;
 
     if (pcb != NULL) 
 	pcb->client_procs->install_DeviceGray(pcb, pcs, pgs);
@@ -246,7 +246,7 @@
      * color space.
      */
     client_custom_color_params_t * pcb =
-	(client_custom_color_params_t *) pgs->custom_color_callback;
+	(client_custom_color_params_t *) pgs->memory->gs_lib_ctx->custom_color_callback;
 
     if (pcb != NULL) 
 	pcb->client_procs->install_DeviceRGB(pcb, pcs, pgs);
@@ -264,7 +264,7 @@
      * color space.
      */
     client_custom_color_params_t * pcb =
-	(client_custom_color_params_t *) pgs->custom_color_callback;
+	(client_custom_color_params_t *) pgs->memory->gs_lib_ctx->custom_color_callback;
 
     if (pcb != NULL) 
 	pcb->client_procs->install_DeviceCMYK(pcb, pcs, pgs);

Modified: trunk/gs/src/gsicc.c
===================================================================
--- trunk/gs/src/gsicc.c	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gsicc.c	2008-05-21 18:27:42 UTC (rev 8764)
@@ -324,7 +324,7 @@
 		gs_color_select_t select)
 {
     client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+	    (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
     if (pcb != NULL) {
 	if (pcb->client_procs->remap_ICCBased(pcb, pc, pcs,
@@ -599,7 +599,7 @@
          * color space.
          */
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) pgs->custom_color_callback;
+	    (client_custom_color_params_t *) pgs->memory->gs_lib_ctx->custom_color_callback;
 
         if (pcb != NULL) {
 	    if (pcb->client_procs->install_ICCBased(pcb, pcs, pgs))

Modified: trunk/gs/src/gslibctx.c
===================================================================
--- trunk/gs/src/gslibctx.c	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gslibctx.c	2008-05-21 18:27:42 UTC (rev 8764)
@@ -72,11 +72,13 @@
     pio->stdout_fn = 0;
     pio->stderr_fn = 0;
     pio->poll_fn = 0;
+    pio->custom_color_callback = NULL;
 
     /* id's 1 through 4 are reserved for Device color spaces; see gscspace.h */
     pio->gs_next_id = 5;  /* this implies that each thread has its own complete state */
 
     pio->dict_auto_expand = false;
+
     return 0;
 }
 

Modified: trunk/gs/src/gslibctx.h
===================================================================
--- trunk/gs/src/gslibctx.h	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gslibctx.h	2008-05-21 18:27:42 UTC (rev 8764)
@@ -33,6 +33,7 @@
     bool stdout_to_stderr;
     bool stdin_is_interactive;   
     void *caller_handle;	/* identifies caller of GS DLL/shared object */
+    void *custom_color_callback;  /* pointer to color callback structure */
     int (GSDLLCALL *stdin_fn)(void *caller_handle, char *buf, int len);
     int (GSDLLCALL *stdout_fn)(void *caller_handle, const char *str, int len);
     int (GSDLLCALL *stderr_fn)(void *caller_handle, const char *str, int len);

Modified: trunk/gs/src/gsnamecl.c
===================================================================
--- trunk/gs/src/gsnamecl.c	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gsnamecl.c	2008-05-21 18:27:42 UTC (rev 8764)
@@ -52,7 +52,7 @@
 custom_color_callback_install_Separation(gs_color_space * pcs, gs_state * pgs)
 {
 	client_custom_color_params_t * pcb =
-	(client_custom_color_params_t *) pgs->custom_color_callback;
+	(client_custom_color_params_t *) pgs->memory->gs_lib_ctx->custom_color_callback;
 
     return (pcb == NULL) ? false
 	    		 : pcb->client_procs->install_Separation(pcb, pcs, pgs);
@@ -66,7 +66,7 @@
 custom_color_callback_install_DeviceN(gs_color_space * pcs, gs_state * pgs)
 {
     client_custom_color_params_t * pcb =
-	(client_custom_color_params_t *) pgs->custom_color_callback;
+	(client_custom_color_params_t *) pgs->memory->gs_lib_ctx->custom_color_callback;
   
     return (pcb == NULL) ? false
   	    		 : pcb->client_procs->install_DeviceN(pcb, pcs, pgs);
@@ -82,7 +82,7 @@
          	const gs_imager_state * pis, gx_device * dev, gs_color_select_t select)
 {
     client_custom_color_params_t * pcb =
-	(client_custom_color_params_t *) pis->custom_color_callback;
+	(client_custom_color_params_t *) pis->memory->gs_lib_ctx->custom_color_callback;
   
       if (pcb == NULL) {
   	return_error(gs_error_rangecheck);
@@ -102,7 +102,7 @@
        	const gs_imager_state * pis, gx_device * dev, gs_color_select_t select)
 {
     client_custom_color_params_t * pcb =
-	(client_custom_color_params_t *) pis->custom_color_callback;
+	(client_custom_color_params_t *) pis->memory->gs_lib_ctx->custom_color_callback;
   
 	if (pcb == NULL) {
   		return_error(gs_error_rangecheck);
@@ -131,7 +131,7 @@
     size_t iptr;
  
     idx = ((int)sizeof(size_t)) * 8 - 4;
-    iptr = (size_t)(pgs->custom_color_callback);
+    iptr = (size_t)(pgs->memory->gs_lib_ctx->custom_color_callback);
     while (idx >= 0) {
 	val = (int)(iptr >> idx) & 0xf;
     if (val <= 9)
@@ -157,7 +157,7 @@
 custom_color_callback_put_params(gs_state * pgs, gs_param_list * plist)
 {
     int code;
-    size_t iptr = (size_t)(pgs->custom_color_callback);
+    size_t iptr = (size_t)(pgs->memory->gs_lib_ctx->custom_color_callback);
     gs_param_string dh = { 0 };
 
     switch (code = param_read_string(plist, CustomColorCallbackParamName, &dh)) {
@@ -201,8 +201,8 @@
     if (code < 0) {
 	param_signal_error(plist, "CustomColorCallback", code);
     }
-    else if (pgs->custom_color_callback != (void *)iptr) {
-        pgs->custom_color_callback = (void *)iptr;
+    else if (pgs->memory->gs_lib_ctx->custom_color_callback != (void *)iptr) {
+        pgs->memory->gs_lib_ctx->custom_color_callback = (void *)iptr;
 	/*
 	 * Custom color processing can depend upon the type of object
 	 * being imaged so we enable object type tagging.

Modified: trunk/gs/src/gsnamecl.h
===================================================================
--- trunk/gs/src/gsnamecl.h	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gsnamecl.h	2008-05-21 18:27:42 UTC (rev 8764)
@@ -147,12 +147,16 @@
  * consists of a pointer to a list of client color space handling procedures
  * and a pointer to a client data structure.
  */
+
+#ifndef client_custom_color_params_DEFINED
+#define client_custom_color_params_DEFINED
 typedef struct client_custom_color_params_s {
     /* Client callback handlers */
     struct client_custom_color_procs_s * client_procs;
     /* For global client data */
     void * data;
 } client_custom_color_params_t;
+#endif
 
 
 /*

Modified: trunk/gs/src/gsncdummy.c
===================================================================
--- trunk/gs/src/gsncdummy.c	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gsncdummy.c	2008-05-21 18:27:42 UTC (rev 8764)
@@ -23,7 +23,7 @@
 
 /* Added these two defines so that I could compare to ghost script rendering color */
 
-#define OBJECT_TYPE_EXAMPLE 0		/* 0 --> disabled, 1 --> enabled */
+#define OBJECT_TYPE_EXAMPLE 1		/* 0 --> disabled, 1 --> enabled */
 #define PANTONE_ONLY 0
 /*
  * This module has been created to demonstrate how to support the use of

Modified: trunk/gs/src/gxcmap.c
===================================================================
--- trunk/gs/src/gxcmap.c	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/gxcmap.c	2008-05-21 18:27:42 UTC (rev 8764)
@@ -622,7 +622,7 @@
 #if ENABLE_CUSTOM_COLOR_CALLBACK
     {
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+	    (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
         if (pcb != NULL) {
 	    int code = pcb->client_procs->remap_DeviceGray(pcb, pconc,
@@ -657,7 +657,7 @@
 #if ENABLE_CUSTOM_COLOR_CALLBACK
     {
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+	    (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
         if (pcb != NULL) {
 	    int code = pcb->client_procs->remap_DeviceGray(pcb, &fgray,
@@ -696,7 +696,7 @@
 #if ENABLE_CUSTOM_COLOR_CALLBACK
     {
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+	    (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
         if (pcb != NULL) {
 	    int code = pcb->client_procs->remap_DeviceRGB(pcb, pconc,
@@ -733,7 +733,7 @@
 #if ENABLE_CUSTOM_COLOR_CALLBACK
     {
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+	    (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
         if (pcb != NULL) {
 	    frac conc[3];
@@ -778,7 +778,7 @@
 #if ENABLE_CUSTOM_COLOR_CALLBACK
     {
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+	    (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
         if (pcb != NULL) {
 	    int code = pcb->client_procs->remap_DeviceCMYK(pcb, pconc,
@@ -809,7 +809,7 @@
 #if ENABLE_CUSTOM_COLOR_CALLBACK
     {
         client_custom_color_params_t * pcb =
-	    (client_custom_color_params_t *) (pis->custom_color_callback);
+	    (client_custom_color_params_t *) (pis->memory->gs_lib_ctx->custom_color_callback);
 
         if (pcb != NULL) {
 	    frac conc[4];

Modified: trunk/gs/src/iapi.c
===================================================================
--- trunk/gs/src/iapi.c	2008-05-21 18:13:13 UTC (rev 8763)
+++ trunk/gs/src/iapi.c	2008-05-21 18:27:42 UTC (rev 8764)
@@ -81,6 +81,7 @@
     minst = gs_main_alloc_instance(mem);
     mem->gs_lib_ctx->top_of_system = (void*) minst;
     mem->gs_lib_ctx->caller_handle = caller_handle;
+    mem->gs_lib_ctx->custom_color_callback = NULL;
     mem->gs_lib_ctx->stdin_fn = NULL;
     mem->gs_lib_ctx->stdout_fn = NULL;
     mem->gs_lib_ctx->stderr_fn = NULL;



More information about the gs-cvs mailing list