From d1e8cd61e0fa02a5b415a5c161b355c95f45ae14 Mon Sep 17 00:00:00 2001
From: marha <marha@users.sourceforge.net>
Date: Thu, 8 Jul 2010 06:58:33 +0000
Subject: git update 8/7/2010

---
 libX11/src/xcms/cmsAllNCol.c | 397 +++++++++--------
 libX11/src/xcms/cmsCmap.c    | 988 +++++++++++++++++++++----------------------
 libX11/src/xcms/cmsInt.c     | 825 ++++++++++++++++++------------------
 libX11/src/xcms/cmsLkCol.c   | 387 +++++++++--------
 4 files changed, 1296 insertions(+), 1301 deletions(-)

(limited to 'libX11/src/xcms')

diff --git a/libX11/src/xcms/cmsAllNCol.c b/libX11/src/xcms/cmsAllNCol.c
index 105e8bd98..79e1bfe7f 100644
--- a/libX11/src/xcms/cmsAllNCol.c
+++ b/libX11/src/xcms/cmsAllNCol.c
@@ -1,199 +1,198 @@
-
-/*
- * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
- * 	All Rights Reserved
- *
- * This file is a component of an X Window System-specific implementation
- * of Xcms based on the TekColor Color Management System.  Permission is
- * hereby granted to use, copy, modify, sell, and otherwise distribute this
- * software and its documentation for any purpose and without fee, provided
- * that this copyright, permission, and disclaimer notice is reproduced in
- * all copies of this software and in supporting documentation.  TekColor
- * is a trademark of Tektronix, Inc.
- *
- * Tektronix makes no representation about the suitability of this software
- * for any purpose.  It is provided "as is" and with all faults.
- *
- * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
- * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
- *
- *
- *	NAME
- *		XcmsAlNCol.c
- *
- *	DESCRIPTION
- *		Source for XcmsAllocNamedColor
- *
- *
- */
-
-#define NEED_REPLIES
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include "Xlibint.h"
-#include "Xcmsint.h"
-#include "Cv.h"
-
-
-/*
- *	NAME
- *		XcmsAllocNamedColor -
- *
- *	SYNOPSIS
- */
-Status
-XcmsAllocNamedColor (
-    Display *dpy,
-    Colormap cmap,
-    _Xconst char *colorname,
-    XcmsColor *pColor_scrn_return,
-    XcmsColor *pColor_exact_return,
-    XcmsColorFormat result_format)
-/*
- *	DESCRIPTION
- *		Finds the color specification associated with the color
- *		name in the Device-Independent Color Name Database, then
- *		converts that color specification to an RGB format.  This
- *		RGB value is then used in a call to XAllocColor to allocate
- *		a read-only color cell.
- *
- *	RETURNS
- *		0 if failed to parse string or find any entry in the database.
- *		1 if succeeded in converting color name to XcmsColor.
- *		2 if succeeded in converting color name to another color name.
- *
- */
-{
-    long nbytes;
-    xAllocNamedColorReply rep;
-    xAllocNamedColorReq *req;
-    XColor hard_def;
-    XColor exact_def;
-    Status retval1 = 1;
-    Status retval2 = XcmsSuccess;
-    XcmsColor tmpColor;
-    XColor XColor_in_out;
-    XcmsCCC ccc;
-
-    /*
-     * 0. Check for invalid arguments.
-     */
-    if (dpy == NULL || colorname[0] == '\0' || pColor_scrn_return == 0
-	    || pColor_exact_return == NULL) {
-	return(XcmsFailure);
-    }
-
-    if ((ccc = XcmsCCCOfColormap(dpy, cmap)) == (XcmsCCC)NULL) {
-	return(XcmsFailure);
-    }
-
-    /*
-     * 1. Convert string to a XcmsColor using Xcms and i18n mechanism
-     */
-    if ((retval1 = _XcmsResolveColorString(ccc, &colorname,
-	    &tmpColor, result_format)) == XcmsFailure) {
-	return(XcmsFailure);
-    }
-    if (retval1 == _XCMS_NEWNAME) {
-	goto PassToServer;
-    }
-    memcpy((char *)pColor_exact_return, (char *)&tmpColor, sizeof(XcmsColor));
-
-    /*
-     * 2. Convert tmpColor to RGB
-     *	Assume pColor_exact_return is now adjusted to Client White Point
-     */
-    if ((retval2 = XcmsConvertColors(ccc, &tmpColor,
-	    1, XcmsRGBFormat, (Bool *) NULL)) == XcmsFailure) {
-	return(XcmsFailure);
-    }
-
-    /*
-     * 3. Convert to XColor and call XAllocColor
-     */
-    _XcmsRGB_to_XColor(&tmpColor, &XColor_in_out, 1);
-    if (XAllocColor(ccc->dpy, cmap, &XColor_in_out) == 0) {
-	return(XcmsFailure);
-    }
-
-    /*
-     * 4. pColor_scrn_return
-     *
-     * Now convert to the target format.
-     *    We can ignore the return value because we're already in a
-     *    device-dependent format.
-     */
-    _XColor_to_XcmsRGB(ccc, &XColor_in_out, pColor_scrn_return, 1);
-    if (result_format != XcmsRGBFormat) {
-	if (result_format == XcmsUndefinedFormat) {
-	    result_format = pColor_exact_return->format;
-	}
-	if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format,
-		(Bool *) NULL) == XcmsFailure) {
-	    return(XcmsFailure);
-	}
-    }
-
-    return(retval1 > retval2 ? retval1 : retval2);
-
-PassToServer:
-    /*
-     * All previous methods failed, so lets pass it to the server
-     * for parsing.
-     */
-    dpy = ccc->dpy;
-    LockDisplay(dpy);
-    GetReq(AllocNamedColor, req);
-
-    req->cmap = cmap;
-    nbytes = req->nbytes = strlen(colorname);
-    req->length += (nbytes + 3) >> 2; /* round up to mult of 4 */
-
-    _XSend(dpy, colorname, nbytes);
-       /* _XSend is more efficient that Data, since _XReply follows */
-
-    if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
-	UnlockDisplay(dpy);
-        SyncHandle();
-        return (0);
-    }
-
-    exact_def.red = rep.exactRed;
-    exact_def.green = rep.exactGreen;
-    exact_def.blue = rep.exactBlue;
-
-    hard_def.red = rep.screenRed;
-    hard_def.green = rep.screenGreen;
-    hard_def.blue = rep.screenBlue;
-
-    exact_def.pixel = hard_def.pixel = rep.pixel;
-
-    UnlockDisplay(dpy);
-    SyncHandle();
-
-    /*
-     * Now convert to the target format.
-     */
-    _XColor_to_XcmsRGB(ccc, &exact_def, pColor_exact_return, 1);
-    _XColor_to_XcmsRGB(ccc, &hard_def, pColor_scrn_return, 1);
-    if (result_format != XcmsRGBFormat
-	    && result_format != XcmsUndefinedFormat) {
-	if (XcmsConvertColors(ccc, pColor_exact_return, 1, result_format,
-		(Bool *) NULL) == XcmsFailure) {
-	    return(XcmsFailure);
-	}
-	if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format,
-		(Bool *) NULL) == XcmsFailure) {
-	    return(XcmsFailure);
-	}
-    }
-
-    return(XcmsSuccess);
-}
+
+/*
+ * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
+ * 	All Rights Reserved
+ *
+ * This file is a component of an X Window System-specific implementation
+ * of Xcms based on the TekColor Color Management System.  Permission is
+ * hereby granted to use, copy, modify, sell, and otherwise distribute this
+ * software and its documentation for any purpose and without fee, provided
+ * that this copyright, permission, and disclaimer notice is reproduced in
+ * all copies of this software and in supporting documentation.  TekColor
+ * is a trademark of Tektronix, Inc.
+ *
+ * Tektronix makes no representation about the suitability of this software
+ * for any purpose.  It is provided "as is" and with all faults.
+ *
+ * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
+ * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
+ * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
+ *
+ *
+ *	NAME
+ *		XcmsAlNCol.c
+ *
+ *	DESCRIPTION
+ *		Source for XcmsAllocNamedColor
+ *
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include "Xlibint.h"
+#include "Xcmsint.h"
+#include "Cv.h"
+
+
+/*
+ *	NAME
+ *		XcmsAllocNamedColor -
+ *
+ *	SYNOPSIS
+ */
+Status
+XcmsAllocNamedColor (
+    Display *dpy,
+    Colormap cmap,
+    _Xconst char *colorname,
+    XcmsColor *pColor_scrn_return,
+    XcmsColor *pColor_exact_return,
+    XcmsColorFormat result_format)
+/*
+ *	DESCRIPTION
+ *		Finds the color specification associated with the color
+ *		name in the Device-Independent Color Name Database, then
+ *		converts that color specification to an RGB format.  This
+ *		RGB value is then used in a call to XAllocColor to allocate
+ *		a read-only color cell.
+ *
+ *	RETURNS
+ *		0 if failed to parse string or find any entry in the database.
+ *		1 if succeeded in converting color name to XcmsColor.
+ *		2 if succeeded in converting color name to another color name.
+ *
+ */
+{
+    long nbytes;
+    xAllocNamedColorReply rep;
+    xAllocNamedColorReq *req;
+    XColor hard_def;
+    XColor exact_def;
+    Status retval1 = 1;
+    Status retval2 = XcmsSuccess;
+    XcmsColor tmpColor;
+    XColor XColor_in_out;
+    XcmsCCC ccc;
+
+    /*
+     * 0. Check for invalid arguments.
+     */
+    if (dpy == NULL || colorname[0] == '\0' || pColor_scrn_return == 0
+	    || pColor_exact_return == NULL) {
+	return(XcmsFailure);
+    }
+
+    if ((ccc = XcmsCCCOfColormap(dpy, cmap)) == (XcmsCCC)NULL) {
+	return(XcmsFailure);
+    }
+
+    /*
+     * 1. Convert string to a XcmsColor using Xcms and i18n mechanism
+     */
+    if ((retval1 = _XcmsResolveColorString(ccc, &colorname,
+	    &tmpColor, result_format)) == XcmsFailure) {
+	return(XcmsFailure);
+    }
+    if (retval1 == _XCMS_NEWNAME) {
+	goto PassToServer;
+    }
+    memcpy((char *)pColor_exact_return, (char *)&tmpColor, sizeof(XcmsColor));
+
+    /*
+     * 2. Convert tmpColor to RGB
+     *	Assume pColor_exact_return is now adjusted to Client White Point
+     */
+    if ((retval2 = XcmsConvertColors(ccc, &tmpColor,
+	    1, XcmsRGBFormat, (Bool *) NULL)) == XcmsFailure) {
+	return(XcmsFailure);
+    }
+
+    /*
+     * 3. Convert to XColor and call XAllocColor
+     */
+    _XcmsRGB_to_XColor(&tmpColor, &XColor_in_out, 1);
+    if (XAllocColor(ccc->dpy, cmap, &XColor_in_out) == 0) {
+	return(XcmsFailure);
+    }
+
+    /*
+     * 4. pColor_scrn_return
+     *
+     * Now convert to the target format.
+     *    We can ignore the return value because we're already in a
+     *    device-dependent format.
+     */
+    _XColor_to_XcmsRGB(ccc, &XColor_in_out, pColor_scrn_return, 1);
+    if (result_format != XcmsRGBFormat) {
+	if (result_format == XcmsUndefinedFormat) {
+	    result_format = pColor_exact_return->format;
+	}
+	if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format,
+		(Bool *) NULL) == XcmsFailure) {
+	    return(XcmsFailure);
+	}
+    }
+
+    return(retval1 > retval2 ? retval1 : retval2);
+
+PassToServer:
+    /*
+     * All previous methods failed, so lets pass it to the server
+     * for parsing.
+     */
+    dpy = ccc->dpy;
+    LockDisplay(dpy);
+    GetReq(AllocNamedColor, req);
+
+    req->cmap = cmap;
+    nbytes = req->nbytes = strlen(colorname);
+    req->length += (nbytes + 3) >> 2; /* round up to mult of 4 */
+
+    _XSend(dpy, colorname, nbytes);
+       /* _XSend is more efficient that Data, since _XReply follows */
+
+    if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
+	UnlockDisplay(dpy);
+        SyncHandle();
+        return (0);
+    }
+
+    exact_def.red = rep.exactRed;
+    exact_def.green = rep.exactGreen;
+    exact_def.blue = rep.exactBlue;
+
+    hard_def.red = rep.screenRed;
+    hard_def.green = rep.screenGreen;
+    hard_def.blue = rep.screenBlue;
+
+    exact_def.pixel = hard_def.pixel = rep.pixel;
+
+    UnlockDisplay(dpy);
+    SyncHandle();
+
+    /*
+     * Now convert to the target format.
+     */
+    _XColor_to_XcmsRGB(ccc, &exact_def, pColor_exact_return, 1);
+    _XColor_to_XcmsRGB(ccc, &hard_def, pColor_scrn_return, 1);
+    if (result_format != XcmsRGBFormat
+	    && result_format != XcmsUndefinedFormat) {
+	if (XcmsConvertColors(ccc, pColor_exact_return, 1, result_format,
+		(Bool *) NULL) == XcmsFailure) {
+	    return(XcmsFailure);
+	}
+	if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format,
+		(Bool *) NULL) == XcmsFailure) {
+	    return(XcmsFailure);
+	}
+    }
+
+    return(XcmsSuccess);
+}
diff --git a/libX11/src/xcms/cmsCmap.c b/libX11/src/xcms/cmsCmap.c
index f93a25b1f..2f14cdb25 100644
--- a/libX11/src/xcms/cmsCmap.c
+++ b/libX11/src/xcms/cmsCmap.c
@@ -1,495 +1,493 @@
-
-/*
- * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
- * 	All Rights Reserved
- *
- * This file is a component of an X Window System-specific implementation
- * of Xcms based on the TekColor Color Management System.  Permission is
- * hereby granted to use, copy, modify, sell, and otherwise distribute this
- * software and its documentation for any purpose and without fee, provided
- * that this copyright, permission, and disclaimer notice is reproduced in
- * all copies of this software and in supporting documentation.  TekColor
- * is a trademark of Tektronix, Inc.
- *
- * Tektronix makes no representation about the suitability of this software
- * for any purpose.  It is provided "as is" and with all faults.
- *
- * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
- * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
- *
- *
- *	NAME
- *		XcmsCmap.c - Client Colormap Management Routines
- *
- *	DESCRIPTION
- *		Routines that store additional information about
- *		colormaps being used by the X Client.
- *
- *
- */
-
-#define NEED_EVENTS
-#define NEED_REPLIES
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "Xlibint.h"
-#include "Xcmsint.h"
-#include "Xutil.h"
-#include "Cmap.h"
-#include "Cv.h"
-
-/*
- *      FORWARD DECLARATIONS
- */
-static void _XcmsFreeClientCmaps(Display *dpy);
-
-
-/************************************************************************
- *									*
- *			PRIVATE INTERFACES				*
- *									*
- ************************************************************************/
-
-/*
- *	NAME
- *		CmapRecForColormap
- *
- *	SYNOPSIS
- */
-static XcmsCmapRec *
-CmapRecForColormap(
-    Display *dpy,
-    Colormap cmap)
-/*
- *	DESCRIPTION
- *		Find the corresponding XcmsCmapRec for cmap.  In not found
- *		this routines attempts to create one.
- *
- *	RETURNS
- *		Returns NULL if failed; otherwise the address to
- *		the corresponding XcmsCmapRec.
- *
- */
-{
-    XcmsCmapRec *pRec;
-    int nScrn;
-    int i, j;
-    XVisualInfo visualTemplate;	/* Template of the visual we want */
-    XVisualInfo *visualList;	/* List for visuals that match */
-    int nVisualsMatched;	/* Number of visuals that match */
-    Window tmpWindow;
-    Visual *vp;
-    unsigned long border = 0;
-    _XAsyncHandler async;
-    _XAsyncErrorState async_state;
-
-    for (pRec = (XcmsCmapRec *)dpy->cms.clientCmaps; pRec != NULL;
-	    pRec = pRec->pNext) {
-	if (pRec->cmapID == cmap) {
-	    return(pRec);
-	}
-    }
-
-    /*
-     * Can't find an XcmsCmapRec associated with cmap in our records.
-     * Let's try to see if its a default colormap
-     */
-    nScrn = ScreenCount(dpy);
-    for (i = 0; i < nScrn; i++) {
-	if (cmap == DefaultColormap(dpy, i)) {
-	    /* It is ... lets go ahead and store that info */
-	    if ((pRec = _XcmsAddCmapRec(dpy, cmap, RootWindow(dpy, i),
-		    DefaultVisual(dpy, i))) == NULL) {
-		return((XcmsCmapRec *)NULL);
-	    }
-	    pRec->ccc = XcmsCreateCCC(
-		    dpy,
-		    i,			/* screenNumber */
-		    DefaultVisual(dpy, i),
-		    (XcmsColor *)NULL,	/* clientWhitePt */
-		    (XcmsCompressionProc)NULL,  /* gamutCompProc */
-		    (XPointer)NULL,	/* gamutCompClientData */
-		    (XcmsWhiteAdjustProc)NULL,  /* whitePtAdjProc */
-		    (XPointer)NULL	/* whitePtAdjClientData */
-		    );
-	    return(pRec);
-	}
-    }
-
-    /*
-     * Nope, its not a default colormap, so it's probably a foreign color map
-     * of which we have no specific details.  Let's go through the
-     * rigorous process of finding this colormap:
-     *        for each screen
-     *            for each screen's visual types
-     *                create a window with cmap specified as the colormap
-     *                if successful
-     *                    Add a CmapRec
-     *                    Create an XcmsCCC
-     *                    return the CmapRec
-     *                else
-     *                    continue
-     */
-
-    async_state.error_code = 0; /* don't care */
-    async_state.major_opcode = X_CreateWindow;
-    async_state.minor_opcode = 0;
-    for (i = 0; i < nScrn; i++) {
-	visualTemplate.screen = i;
-	visualList = XGetVisualInfo(dpy, VisualScreenMask, &visualTemplate,
-	    &nVisualsMatched);
-	if (visualList == NULL) {
-	    continue;
-	}
-
-	/*
-	 * Attempt to create a window with cmap
-	 */
-	j = 0;
-	do {
-	    vp = (visualList+j)->visual;
-	    LockDisplay(dpy);
-	    {
-		register xCreateWindowReq *req;
-
-		GetReq(CreateWindow, req);
-		async_state.min_sequence_number = dpy->request;
-		async_state.max_sequence_number = dpy->request;
-		async_state.error_count = 0;
-		async.next = dpy->async_handlers;
-		async.handler = _XAsyncErrorHandler;
-		async.data = (XPointer)&async_state;
-		dpy->async_handlers = &async;
-		req->parent = RootWindow(dpy, i);
-		req->x = 0;
-		req->y = 0;
-		req->width = 1;
-		req->height = 1;
-		req->borderWidth = 0;
-		req->depth = (visualList+j)->depth;
-		req->class = CopyFromParent;
-		req->visual = vp->visualid;
-		tmpWindow = req->wid = XAllocID(dpy);
-		req->mask = CWBorderPixel | CWColormap;
-		req->length += 2;
-		Data32 (dpy, (long *) &border, 4);
-		Data32 (dpy, (long *) &cmap, 4);
-	    }
-	    {
-		xGetInputFocusReply rep;
-		register xReq *req;
-
-		GetEmptyReq(GetInputFocus, req);
-		(void) _XReply (dpy, (xReply *)&rep, 0, xTrue);
-	    }
-	    DeqAsyncHandler(dpy, &async);
-	    UnlockDisplay(dpy);
-	    SyncHandle();
-	} while (async_state.error_count > 0 && ++j < nVisualsMatched);
-
-	Xfree((char *)visualList);
-
-	/*
-	 * if successful
-	 */
-	if (j < nVisualsMatched) {
-	    if ((pRec = _XcmsAddCmapRec(dpy, cmap, tmpWindow, vp)) == NULL)
-		return((XcmsCmapRec *)NULL);
-	    pRec->ccc = XcmsCreateCCC(
-		    dpy,
-		    i,			/* screenNumber */
-		    vp,
-		    (XcmsColor *)NULL,	/* clientWhitePt */
-		    (XcmsCompressionProc)NULL,  /* gamutCompProc */
-		    (XPointer)NULL,	/* gamutCompClientData */
-		    (XcmsWhiteAdjustProc)NULL,  /* whitePtAdjProc */
-		    (XPointer)NULL	/* whitePtAdjClientData */
-		    );
-	    XDestroyWindow(dpy, tmpWindow);
-	    return(pRec);
-	}
-    }
-
-    return(NULL);
-}
-
-
-
-/************************************************************************
- *									*
- *			API PRIVATE INTERFACES				*
- *									*
- ************************************************************************/
-
-/*
- *	NAME
- *		_XcmsAddCmapRec
- *
- *	SYNOPSIS
- */
-XcmsCmapRec *
-_XcmsAddCmapRec(
-    Display *dpy,
-    Colormap cmap,
-    Window windowID,
-    Visual *visual)
-/*
- *	DESCRIPTION
- *		Create an XcmsCmapRec for the specified cmap, windowID,
- *		and visual, then adds it to its list of CmapRec's.
- *
- *	RETURNS
- *		Returns NULL if failed; otherwise the address to
- *		the added XcmsCmapRec.
- *
- */
-{
-    XcmsCmapRec *pNew;
-
-    if ((pNew = (XcmsCmapRec *) Xcalloc(1, (unsigned) sizeof(XcmsCmapRec)))
-	    == NULL) {
-	return((XcmsCmapRec *)NULL);
-    }
-
-    pNew->cmapID = cmap;
-    pNew->dpy = dpy;
-    pNew->windowID = windowID;
-    pNew->visual = visual;
-    pNew->pNext = (XcmsCmapRec *)dpy->cms.clientCmaps;
-    dpy->cms.clientCmaps = (XPointer)pNew;
-    dpy->free_funcs->clientCmaps = _XcmsFreeClientCmaps;
-
-    /*
-     * Note, we don't create the XcmsCCC for pNew->ccc here because
-     * it may require the use of XGetWindowAttributes (a round trip request)
-     * to determine the screen.
-     */
-    return(pNew);
-}
-
-
-/*
- *	NAME
- *		_XcmsCopyCmapRecAndFree
- *
- *	SYNOPSIS
- */
-XcmsCmapRec *
-_XcmsCopyCmapRecAndFree(
-    Display *dpy,
-    Colormap src_cmap,
-    Colormap copy_cmap)
-/*
- *	DESCRIPTION
- *		Augments Xlib's XCopyColormapAndFree() to copy
- *		XcmsCmapRecs.
- *
- *	RETURNS
- *		Returns NULL if failed; otherwise the address to
- *		the copy XcmsCmapRec.
- *
- */
-{
-    XcmsCmapRec *pRec_src;
-    XcmsCmapRec *pRec_copy;
-
-    if ((pRec_src = CmapRecForColormap(dpy, src_cmap)) != NULL) {
-	pRec_copy =_XcmsAddCmapRec(dpy, copy_cmap, pRec_src->windowID,
-		pRec_src->visual);
-	if (pRec_copy != NULL && pRec_src->ccc) {
-	    pRec_copy->ccc = (XcmsCCC)Xcalloc(1, (unsigned) sizeof(XcmsCCCRec));
-	    memcpy((char *)pRec_copy->ccc, (char *)pRec_src->ccc,
-		   sizeof(XcmsCCCRec));
-	}
-	return(pRec_copy);
-    }
-    return((XcmsCmapRec *)NULL);
-}
-
-
-/*
- *	NAME
- *		_XcmsDeleteCmapRec
- *
- *	SYNOPSIS
- */
-void
-_XcmsDeleteCmapRec(
-    Display *dpy,
-    Colormap cmap)
-/*
- *	DESCRIPTION
- *		Removes and frees the specified XcmsCmapRec structure
- *		from the linked list of structures.
- *
- *	RETURNS
- *		void
- *
- */
-{
-    XcmsCmapRec **pPrevPtr;
-    XcmsCmapRec *pRec;
-    int scr;
-
-    /* If it is the default cmap for a screen, do not delete it,
-     * because the server will not actually free it */
-    for (scr = ScreenCount(dpy); --scr >= 0; ) {
-	if (cmap == DefaultColormap(dpy, scr))
-	    return;
-    }
-
-    /* search for it in the list */
-    pPrevPtr = (XcmsCmapRec **)&dpy->cms.clientCmaps;
-    while ((pRec = *pPrevPtr) && (pRec->cmapID != cmap)) {
-	pPrevPtr = &pRec->pNext;
-    }
-
-    if (pRec) {
-	if (pRec->ccc) {
-	    XcmsFreeCCC(pRec->ccc);
-	}
-	*pPrevPtr = pRec->pNext;
-	Xfree((char *)pRec);
-    }
-}
-
-
-/*
- *	NAME
- *		_XcmsFreeClientCmaps
- *
- *	SYNOPSIS
- */
-static void
-_XcmsFreeClientCmaps(
-    Display *dpy)
-/*
- *	DESCRIPTION
- *		Frees all XcmsCmapRec structures in the linked list
- *		and sets dpy->cms.clientCmaps to NULL.
- *
- *	RETURNS
- *		void
- *
- */
-{
-    XcmsCmapRec *pRecNext, *pRecFree;
-
-    pRecNext = (XcmsCmapRec *)dpy->cms.clientCmaps;
-    while (pRecNext != NULL) {
-	pRecFree = pRecNext;
-	pRecNext = pRecNext->pNext;
-	if (pRecFree->ccc) {
-	    /* Free the XcmsCCC structure */
-	    XcmsFreeCCC(pRecFree->ccc);
-	}
-	/* Now free the XcmsCmapRec structure */
-	Xfree((char *)pRecFree);
-    }
-    dpy->cms.clientCmaps = (XPointer)NULL;
-}
-
-
-
-/************************************************************************
- *									*
- *			PUBLIC INTERFACES				*
- *									*
- ************************************************************************/
-
-/*
- *	NAME
- *		XcmsCCCOfColormap
- *
- *	SYNOPSIS
- */
-XcmsCCC
-XcmsCCCOfColormap(
-    Display *dpy,
-    Colormap cmap)
-/*
- *	DESCRIPTION
- *		Finds the XcmsCCC associated with the specified colormap.
- *
- *	RETURNS
- *		Returns NULL if failed; otherwise the address to
- *		the associated XcmsCCC structure.
- *
- */
-{
-    XWindowAttributes windowAttr;
-    XcmsCmapRec *pRec;
-    int nScrn = ScreenCount(dpy);
-    int i;
-
-    if ((pRec = CmapRecForColormap(dpy, cmap)) != NULL) {
-	if (pRec->ccc) {
-	    /* XcmsCmapRec already has a XcmsCCC */
-	    return(pRec->ccc);
-	}
-
-	/*
-	 * The XcmsCmapRec does not have a XcmsCCC yet, so let's create
-	 * one.  But first, we need to know the screen associated with
-	 * cmap, so use XGetWindowAttributes() to extract that
-	 * information.  Unless, of course there is only one screen!!
-	 */
-	if (nScrn == 1) {
-	    /* Assume screenNumber == 0 */
-	    return(pRec->ccc = XcmsCreateCCC(
-		    dpy,
-		    0,			/* screenNumber */
-		    pRec->visual,
-		    (XcmsColor *)NULL,	/* clientWhitePt */
-		    (XcmsCompressionProc)NULL,  /* gamutCompProc */
-		    (XPointer)NULL,	/* gamutCompClientData */
-		    (XcmsWhiteAdjustProc)NULL,  /* whitePtAdjProc */
-		    (XPointer)NULL	/* whitePtAdjClientData */
-		    ));
-	} else {
-	    if (XGetWindowAttributes(dpy, pRec->windowID, &windowAttr)) {
-		for (i = 0; i < nScrn; i++) {
-		    if (ScreenOfDisplay(dpy, i) == windowAttr.screen) {
-			return(pRec->ccc = XcmsCreateCCC(
-				dpy,
-				i,		   /* screenNumber */
-				pRec->visual,
-				(XcmsColor *)NULL, /* clientWhitePt */
-				(XcmsCompressionProc)NULL, /* gamutCompProc */
-				(XPointer)NULL,	   /* gamutCompClientData */
-				(XcmsWhiteAdjustProc)NULL, /* whitePtAdjProc */
-				(XPointer)NULL	   /* whitePtAdjClientData */
-				));
-		    }
-		}
-	    }
-	}
-    }
-
-    /*
-     * No such cmap
-     */
-    return(NULL);
-}
-
-XcmsCCC XcmsSetCCCOfColormap(
-    Display *dpy,
-    Colormap cmap,
-    XcmsCCC ccc)
-{
-    XcmsCCC prev_ccc = NULL;
-    XcmsCmapRec *pRec;
-
-    pRec = CmapRecForColormap(dpy, cmap);
-    if (pRec) {
-	prev_ccc = pRec->ccc;
-	pRec->ccc = ccc;
-    }
-    return prev_ccc;
-}
+
+/*
+ * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
+ * 	All Rights Reserved
+ *
+ * This file is a component of an X Window System-specific implementation
+ * of Xcms based on the TekColor Color Management System.  Permission is
+ * hereby granted to use, copy, modify, sell, and otherwise distribute this
+ * software and its documentation for any purpose and without fee, provided
+ * that this copyright, permission, and disclaimer notice is reproduced in
+ * all copies of this software and in supporting documentation.  TekColor
+ * is a trademark of Tektronix, Inc.
+ *
+ * Tektronix makes no representation about the suitability of this software
+ * for any purpose.  It is provided "as is" and with all faults.
+ *
+ * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
+ * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
+ * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
+ *
+ *
+ *	NAME
+ *		XcmsCmap.c - Client Colormap Management Routines
+ *
+ *	DESCRIPTION
+ *		Routines that store additional information about
+ *		colormaps being used by the X Client.
+ *
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "Xlibint.h"
+#include "Xcmsint.h"
+#include "Xutil.h"
+#include "Cmap.h"
+#include "Cv.h"
+
+/*
+ *      FORWARD DECLARATIONS
+ */
+static void _XcmsFreeClientCmaps(Display *dpy);
+
+
+/************************************************************************
+ *									*
+ *			PRIVATE INTERFACES				*
+ *									*
+ ************************************************************************/
+
+/*
+ *	NAME
+ *		CmapRecForColormap
+ *
+ *	SYNOPSIS
+ */
+static XcmsCmapRec *
+CmapRecForColormap(
+    Display *dpy,
+    Colormap cmap)
+/*
+ *	DESCRIPTION
+ *		Find the corresponding XcmsCmapRec for cmap.  In not found
+ *		this routines attempts to create one.
+ *
+ *	RETURNS
+ *		Returns NULL if failed; otherwise the address to
+ *		the corresponding XcmsCmapRec.
+ *
+ */
+{
+    XcmsCmapRec *pRec;
+    int nScrn;
+    int i, j;
+    XVisualInfo visualTemplate;	/* Template of the visual we want */
+    XVisualInfo *visualList;	/* List for visuals that match */
+    int nVisualsMatched;	/* Number of visuals that match */
+    Window tmpWindow;
+    Visual *vp;
+    unsigned long border = 0;
+    _XAsyncHandler async;
+    _XAsyncErrorState async_state;
+
+    for (pRec = (XcmsCmapRec *)dpy->cms.clientCmaps; pRec != NULL;
+	    pRec = pRec->pNext) {
+	if (pRec->cmapID == cmap) {
+	    return(pRec);
+	}
+    }
+
+    /*
+     * Can't find an XcmsCmapRec associated with cmap in our records.
+     * Let's try to see if its a default colormap
+     */
+    nScrn = ScreenCount(dpy);
+    for (i = 0; i < nScrn; i++) {
+	if (cmap == DefaultColormap(dpy, i)) {
+	    /* It is ... lets go ahead and store that info */
+	    if ((pRec = _XcmsAddCmapRec(dpy, cmap, RootWindow(dpy, i),
+		    DefaultVisual(dpy, i))) == NULL) {
+		return((XcmsCmapRec *)NULL);
+	    }
+	    pRec->ccc = XcmsCreateCCC(
+		    dpy,
+		    i,			/* screenNumber */
+		    DefaultVisual(dpy, i),
+		    (XcmsColor *)NULL,	/* clientWhitePt */
+		    (XcmsCompressionProc)NULL,  /* gamutCompProc */
+		    (XPointer)NULL,	/* gamutCompClientData */
+		    (XcmsWhiteAdjustProc)NULL,  /* whitePtAdjProc */
+		    (XPointer)NULL	/* whitePtAdjClientData */
+		    );
+	    return(pRec);
+	}
+    }
+
+    /*
+     * Nope, its not a default colormap, so it's probably a foreign color map
+     * of which we have no specific details.  Let's go through the
+     * rigorous process of finding this colormap:
+     *        for each screen
+     *            for each screen's visual types
+     *                create a window with cmap specified as the colormap
+     *                if successful
+     *                    Add a CmapRec
+     *                    Create an XcmsCCC
+     *                    return the CmapRec
+     *                else
+     *                    continue
+     */
+
+    async_state.error_code = 0; /* don't care */
+    async_state.major_opcode = X_CreateWindow;
+    async_state.minor_opcode = 0;
+    for (i = 0; i < nScrn; i++) {
+	visualTemplate.screen = i;
+	visualList = XGetVisualInfo(dpy, VisualScreenMask, &visualTemplate,
+	    &nVisualsMatched);
+	if (visualList == NULL) {
+	    continue;
+	}
+
+	/*
+	 * Attempt to create a window with cmap
+	 */
+	j = 0;
+	do {
+	    vp = (visualList+j)->visual;
+	    LockDisplay(dpy);
+	    {
+		register xCreateWindowReq *req;
+
+		GetReq(CreateWindow, req);
+		async_state.min_sequence_number = dpy->request;
+		async_state.max_sequence_number = dpy->request;
+		async_state.error_count = 0;
+		async.next = dpy->async_handlers;
+		async.handler = _XAsyncErrorHandler;
+		async.data = (XPointer)&async_state;
+		dpy->async_handlers = &async;
+		req->parent = RootWindow(dpy, i);
+		req->x = 0;
+		req->y = 0;
+		req->width = 1;
+		req->height = 1;
+		req->borderWidth = 0;
+		req->depth = (visualList+j)->depth;
+		req->class = CopyFromParent;
+		req->visual = vp->visualid;
+		tmpWindow = req->wid = XAllocID(dpy);
+		req->mask = CWBorderPixel | CWColormap;
+		req->length += 2;
+		Data32 (dpy, (long *) &border, 4);
+		Data32 (dpy, (long *) &cmap, 4);
+	    }
+	    {
+		xGetInputFocusReply rep;
+		register xReq *req;
+
+		GetEmptyReq(GetInputFocus, req);
+		(void) _XReply (dpy, (xReply *)&rep, 0, xTrue);
+	    }
+	    DeqAsyncHandler(dpy, &async);
+	    UnlockDisplay(dpy);
+	    SyncHandle();
+	} while (async_state.error_count > 0 && ++j < nVisualsMatched);
+
+	Xfree((char *)visualList);
+
+	/*
+	 * if successful
+	 */
+	if (j < nVisualsMatched) {
+	    if ((pRec = _XcmsAddCmapRec(dpy, cmap, tmpWindow, vp)) == NULL)
+		return((XcmsCmapRec *)NULL);
+	    pRec->ccc = XcmsCreateCCC(
+		    dpy,
+		    i,			/* screenNumber */
+		    vp,
+		    (XcmsColor *)NULL,	/* clientWhitePt */
+		    (XcmsCompressionProc)NULL,  /* gamutCompProc */
+		    (XPointer)NULL,	/* gamutCompClientData */
+		    (XcmsWhiteAdjustProc)NULL,  /* whitePtAdjProc */
+		    (XPointer)NULL	/* whitePtAdjClientData */
+		    );
+	    XDestroyWindow(dpy, tmpWindow);
+	    return(pRec);
+	}
+    }
+
+    return(NULL);
+}
+
+
+
+/************************************************************************
+ *									*
+ *			API PRIVATE INTERFACES				*
+ *									*
+ ************************************************************************/
+
+/*
+ *	NAME
+ *		_XcmsAddCmapRec
+ *
+ *	SYNOPSIS
+ */
+XcmsCmapRec *
+_XcmsAddCmapRec(
+    Display *dpy,
+    Colormap cmap,
+    Window windowID,
+    Visual *visual)
+/*
+ *	DESCRIPTION
+ *		Create an XcmsCmapRec for the specified cmap, windowID,
+ *		and visual, then adds it to its list of CmapRec's.
+ *
+ *	RETURNS
+ *		Returns NULL if failed; otherwise the address to
+ *		the added XcmsCmapRec.
+ *
+ */
+{
+    XcmsCmapRec *pNew;
+
+    if ((pNew = (XcmsCmapRec *) Xcalloc(1, (unsigned) sizeof(XcmsCmapRec)))
+	    == NULL) {
+	return((XcmsCmapRec *)NULL);
+    }
+
+    pNew->cmapID = cmap;
+    pNew->dpy = dpy;
+    pNew->windowID = windowID;
+    pNew->visual = visual;
+    pNew->pNext = (XcmsCmapRec *)dpy->cms.clientCmaps;
+    dpy->cms.clientCmaps = (XPointer)pNew;
+    dpy->free_funcs->clientCmaps = _XcmsFreeClientCmaps;
+
+    /*
+     * Note, we don't create the XcmsCCC for pNew->ccc here because
+     * it may require the use of XGetWindowAttributes (a round trip request)
+     * to determine the screen.
+     */
+    return(pNew);
+}
+
+
+/*
+ *	NAME
+ *		_XcmsCopyCmapRecAndFree
+ *
+ *	SYNOPSIS
+ */
+XcmsCmapRec *
+_XcmsCopyCmapRecAndFree(
+    Display *dpy,
+    Colormap src_cmap,
+    Colormap copy_cmap)
+/*
+ *	DESCRIPTION
+ *		Augments Xlib's XCopyColormapAndFree() to copy
+ *		XcmsCmapRecs.
+ *
+ *	RETURNS
+ *		Returns NULL if failed; otherwise the address to
+ *		the copy XcmsCmapRec.
+ *
+ */
+{
+    XcmsCmapRec *pRec_src;
+    XcmsCmapRec *pRec_copy;
+
+    if ((pRec_src = CmapRecForColormap(dpy, src_cmap)) != NULL) {
+	pRec_copy =_XcmsAddCmapRec(dpy, copy_cmap, pRec_src->windowID,
+		pRec_src->visual);
+	if (pRec_copy != NULL && pRec_src->ccc) {
+	    pRec_copy->ccc = (XcmsCCC)Xcalloc(1, (unsigned) sizeof(XcmsCCCRec));
+	    memcpy((char *)pRec_copy->ccc, (char *)pRec_src->ccc,
+		   sizeof(XcmsCCCRec));
+	}
+	return(pRec_copy);
+    }
+    return((XcmsCmapRec *)NULL);
+}
+
+
+/*
+ *	NAME
+ *		_XcmsDeleteCmapRec
+ *
+ *	SYNOPSIS
+ */
+void
+_XcmsDeleteCmapRec(
+    Display *dpy,
+    Colormap cmap)
+/*
+ *	DESCRIPTION
+ *		Removes and frees the specified XcmsCmapRec structure
+ *		from the linked list of structures.
+ *
+ *	RETURNS
+ *		void
+ *
+ */
+{
+    XcmsCmapRec **pPrevPtr;
+    XcmsCmapRec *pRec;
+    int scr;
+
+    /* If it is the default cmap for a screen, do not delete it,
+     * because the server will not actually free it */
+    for (scr = ScreenCount(dpy); --scr >= 0; ) {
+	if (cmap == DefaultColormap(dpy, scr))
+	    return;
+    }
+
+    /* search for it in the list */
+    pPrevPtr = (XcmsCmapRec **)&dpy->cms.clientCmaps;
+    while ((pRec = *pPrevPtr) && (pRec->cmapID != cmap)) {
+	pPrevPtr = &pRec->pNext;
+    }
+
+    if (pRec) {
+	if (pRec->ccc) {
+	    XcmsFreeCCC(pRec->ccc);
+	}
+	*pPrevPtr = pRec->pNext;
+	Xfree((char *)pRec);
+    }
+}
+
+
+/*
+ *	NAME
+ *		_XcmsFreeClientCmaps
+ *
+ *	SYNOPSIS
+ */
+static void
+_XcmsFreeClientCmaps(
+    Display *dpy)
+/*
+ *	DESCRIPTION
+ *		Frees all XcmsCmapRec structures in the linked list
+ *		and sets dpy->cms.clientCmaps to NULL.
+ *
+ *	RETURNS
+ *		void
+ *
+ */
+{
+    XcmsCmapRec *pRecNext, *pRecFree;
+
+    pRecNext = (XcmsCmapRec *)dpy->cms.clientCmaps;
+    while (pRecNext != NULL) {
+	pRecFree = pRecNext;
+	pRecNext = pRecNext->pNext;
+	if (pRecFree->ccc) {
+	    /* Free the XcmsCCC structure */
+	    XcmsFreeCCC(pRecFree->ccc);
+	}
+	/* Now free the XcmsCmapRec structure */
+	Xfree((char *)pRecFree);
+    }
+    dpy->cms.clientCmaps = (XPointer)NULL;
+}
+
+
+
+/************************************************************************
+ *									*
+ *			PUBLIC INTERFACES				*
+ *									*
+ ************************************************************************/
+
+/*
+ *	NAME
+ *		XcmsCCCOfColormap
+ *
+ *	SYNOPSIS
+ */
+XcmsCCC
+XcmsCCCOfColormap(
+    Display *dpy,
+    Colormap cmap)
+/*
+ *	DESCRIPTION
+ *		Finds the XcmsCCC associated with the specified colormap.
+ *
+ *	RETURNS
+ *		Returns NULL if failed; otherwise the address to
+ *		the associated XcmsCCC structure.
+ *
+ */
+{
+    XWindowAttributes windowAttr;
+    XcmsCmapRec *pRec;
+    int nScrn = ScreenCount(dpy);
+    int i;
+
+    if ((pRec = CmapRecForColormap(dpy, cmap)) != NULL) {
+	if (pRec->ccc) {
+	    /* XcmsCmapRec already has a XcmsCCC */
+	    return(pRec->ccc);
+	}
+
+	/*
+	 * The XcmsCmapRec does not have a XcmsCCC yet, so let's create
+	 * one.  But first, we need to know the screen associated with
+	 * cmap, so use XGetWindowAttributes() to extract that
+	 * information.  Unless, of course there is only one screen!!
+	 */
+	if (nScrn == 1) {
+	    /* Assume screenNumber == 0 */
+	    return(pRec->ccc = XcmsCreateCCC(
+		    dpy,
+		    0,			/* screenNumber */
+		    pRec->visual,
+		    (XcmsColor *)NULL,	/* clientWhitePt */
+		    (XcmsCompressionProc)NULL,  /* gamutCompProc */
+		    (XPointer)NULL,	/* gamutCompClientData */
+		    (XcmsWhiteAdjustProc)NULL,  /* whitePtAdjProc */
+		    (XPointer)NULL	/* whitePtAdjClientData */
+		    ));
+	} else {
+	    if (XGetWindowAttributes(dpy, pRec->windowID, &windowAttr)) {
+		for (i = 0; i < nScrn; i++) {
+		    if (ScreenOfDisplay(dpy, i) == windowAttr.screen) {
+			return(pRec->ccc = XcmsCreateCCC(
+				dpy,
+				i,		   /* screenNumber */
+				pRec->visual,
+				(XcmsColor *)NULL, /* clientWhitePt */
+				(XcmsCompressionProc)NULL, /* gamutCompProc */
+				(XPointer)NULL,	   /* gamutCompClientData */
+				(XcmsWhiteAdjustProc)NULL, /* whitePtAdjProc */
+				(XPointer)NULL	   /* whitePtAdjClientData */
+				));
+		    }
+		}
+	    }
+	}
+    }
+
+    /*
+     * No such cmap
+     */
+    return(NULL);
+}
+
+XcmsCCC XcmsSetCCCOfColormap(
+    Display *dpy,
+    Colormap cmap,
+    XcmsCCC ccc)
+{
+    XcmsCCC prev_ccc = NULL;
+    XcmsCmapRec *pRec;
+
+    pRec = CmapRecForColormap(dpy, cmap);
+    if (pRec) {
+	prev_ccc = pRec->ccc;
+	pRec->ccc = ccc;
+    }
+    return prev_ccc;
+}
diff --git a/libX11/src/xcms/cmsInt.c b/libX11/src/xcms/cmsInt.c
index b48036522..47c54a701 100644
--- a/libX11/src/xcms/cmsInt.c
+++ b/libX11/src/xcms/cmsInt.c
@@ -1,413 +1,412 @@
-
-/*
- * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
- * 	All Rights Reserved
- *
- * This file is a component of an X Window System-specific implementation
- * of Xcms based on the TekColor Color Management System.  Permission is
- * hereby granted to use, copy, modify, sell, and otherwise distribute this
- * software and its documentation for any purpose and without fee, provided
- * that this copyright, permission, and disclaimer notice is reproduced in
- * all copies of this software and in supporting documentation.  TekColor
- * is a trademark of Tektronix, Inc.
- *
- * Tektronix makes no representation about the suitability of this software
- * for any purpose.  It is provided "as is" and with all faults.
- *
- * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
- * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
- *
- *
- *	NAME
- *		XcmsInt.c - Xcms API utility routines
- *
- *	DESCRIPTION
- *		Xcms Application Program Interface (API) utility
- *		routines for hanging information directly onto
- *		the Display structure.
- *
- *
- */
-
-/* #define NEED_EVENTS */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include "Xlibint.h"
-#include "Xcmsint.h"
-#include "Cv.h"
-
-#ifndef XCMSCOMPPROC
-#  define XCMSCOMPPROC	XcmsTekHVCClipC
-#endif
-
-/* forward/static */
-static void _XcmsFreeDefaultCCCs(Display *dpy);
-
-
-/************************************************************************
- *									*
- *			   API PRIVATE ROUTINES				*
- *									*
- ************************************************************************/
-
-/*
- *	NAME
- *		_XcmsCopyPointerArray
- *
- *	SYNOPSIS
- */
-XPointer *
-_XcmsCopyPointerArray(
-    XPointer *pap)
-/*
- *	DESCRIPTION
- *		Copies an array of NULL terminated pointers.
- *
- *	RETURNS
- *		Returns NULL if failed; otherwise the address to
- *		the copy.
- *
- */
-{
-    XPointer *newArray;
-    char **tmp;
-    int n;
-
-    for (tmp = pap, n = 0; *tmp != NULL; tmp++, n++);
-    n++; /* add 1 to include the NULL pointer */
-
-    if ((newArray = (XPointer *)Xmalloc(n * sizeof(XPointer)))) {
-	memcpy((char *)newArray, (char *)pap,
-	       (unsigned)(n * sizeof(XPointer)));
-    }
-    return((XPointer *)newArray);
-}
-
-/*
- *	NAME
- *		_XcmsFreePointerArray
- *
- *	SYNOPSIS
- */
-void
-_XcmsFreePointerArray(
-    XPointer *pap)
-/*
- *	DESCRIPTION
- *		Frees an array of NULL terminated pointers.
- *
- *	RETURNS
- *		void
- *
- */
-{
-    Xfree(pap);
-}
-
-/*
- *	NAME
- *		_XcmsPushPointerArray
- *
- *	SYNOPSIS
- */
-XPointer *
-_XcmsPushPointerArray(
-    XPointer *pap,
-    XPointer p,
-    XPointer *papNoFree)
-/*
- *	DESCRIPTION
- *		Places the specified pointer at the head of an array of NULL
- *		terminated pointers.
- *
- *	RETURNS
- *		Returns NULL if failed; otherwise the address to
- *		the head of the array.
- *
- */
-{
-    XPointer *newArray;
-    char **tmp;
-    int n;
-
-    for (tmp = pap, n = 0; *tmp != NULL; tmp++, n++);
-
-    /* add 2: 1 for the new pointer and another for the NULL pointer */
-    n += 2;
-
-    if ((newArray = (XPointer *)Xmalloc(n * sizeof(XPointer)))) {
-	memcpy((char *)(newArray+1),(char *)pap,
-	       (unsigned)((n-1) * sizeof(XPointer)));
-	*newArray = p;
-    }
-    if (pap != papNoFree) {
-        _XcmsFreePointerArray(pap);
-    }
-    return((XPointer *)newArray);
-}
-
-/*
- *	NAME
- *		_XcmsInitDefaultCCCs
- *
- *	SYNOPSIS
- */
-int
-_XcmsInitDefaultCCCs(
-    Display *dpy)
-/*
- *	DESCRIPTION
- *		Initializes the Xcms per Display Info structure
- *		(XcmsPerDpyInfo).
- *
- *	RETURNS
- *		Returns 0 if failed; otherwise non-zero.
- *
- */
-{
-    int nScrn = ScreenCount(dpy);
-    int i;
-    XcmsCCC ccc;
-
-    if (nScrn <= 0) {
-	return(0);
-    }
-
-    /*
-     * Create an array of XcmsCCC structures, one for each screen.
-     * They serve as the screen's default CCC.
-     */
-    if (!(ccc = (XcmsCCC)
-	    Xcalloc((unsigned)nScrn, (unsigned) sizeof(XcmsCCCRec)))) {
-	return(0);
-    }
-    dpy->cms.defaultCCCs = (XPointer)ccc;
-    dpy->free_funcs->defaultCCCs = _XcmsFreeDefaultCCCs;
-
-    for (i = 0; i < nScrn; i++, ccc++) {
-	ccc->dpy = dpy;
-	ccc->screenNumber = i;
-	ccc->visual = DefaultVisual(dpy, i);
-	/*
-	 * Used calloc to allocate memory so:
-	 *	ccc->clientWhitePt->format == XcmsUndefinedFormat
-	 *	ccc->gamutCompProc == NULL
-	 *	ccc->whitePtAdjProc == NULL
-	 *	ccc->pPerScrnInfo = NULL
-	 *
-	 * Don't need to create XcmsPerScrnInfo and its functionSet and
-	 * pScreenData components until the default CCC is accessed.
-	 * Note that the XcmsDefaultCCC routine calls _XcmsInitScrnInto
-	 * to do this.
-	 */
-	ccc->gamutCompProc = XCMSCOMPPROC;
-    }
-
-    return(1);
-}
-
-
-/*
- *	NAME
- *		_XcmsFreeDefaultCCCs - Free Default CCCs and its PerScrnInfo
- *
- *	SYNOPSIS
- */
-static void
-_XcmsFreeDefaultCCCs(
-    Display *dpy)
-/*
- *	DESCRIPTION
- *		This routine frees the default XcmsCCC's associated with
- *		each screen and its associated substructures as neccessary.
- *
- *	RETURNS
- *		void
- *
- *
- */
-{
-    int nScrn = ScreenCount(dpy);
-    XcmsCCC ccc;
-    int i;
-
-    /*
-     * Free Screen data in each DefaultCCC
-     *		Do not use XcmsFreeCCC here because it will not free
-     *		DefaultCCC's.
-     */
-    ccc = (XcmsCCC)dpy->cms.defaultCCCs;
-    for (i = nScrn; i--; ccc++) {
-	/*
-	 * Check if XcmsPerScrnInfo exists.
-	 *
-	 * This is the only place where XcmsPerScrnInfo structures
-	 * are freed since there is only one allocated per Screen.
-	 * It just so happens that we place its reference in the
-	 * default CCC.
-	 */
-	if (ccc->pPerScrnInfo) {
-	    /* Check if SCCData exists */
-	    if (ccc->pPerScrnInfo->state != XcmsInitNone
-		    && ccc->pPerScrnInfo->screenData) {
-		(*((XcmsFunctionSet *)ccc->pPerScrnInfo->functionSet)->screenFreeProc)
-			(ccc->pPerScrnInfo->screenData);
-	    }
-	    Xfree(ccc->pPerScrnInfo);
-	}
-    }
-
-    /*
-     * Free the array of XcmsCCC structures
-     */
-    Xfree(dpy->cms.defaultCCCs);
-    dpy->cms.defaultCCCs = (XPointer)NULL;
-}
-
-
-
-/*
- *	NAME
- *		_XcmsInitScrnInfo
- *
- *	SYNOPSIS
- */
-int
-_XcmsInitScrnInfo(
-    register Display *dpy,
-    int screenNumber)
-/*
- *	DESCRIPTION
- *		Given a display and screen number, this routine attempts
- *		to initialize the Xcms per Screen Info structure
- *		(XcmsPerScrnInfo).
- *
- *	RETURNS
- *		Returns zero if initialization failed; non-zero otherwise.
- */
-{
-    XcmsFunctionSet **papSCCFuncSet = _XcmsSCCFuncSets;
-    XcmsCCC defaultccc;
-
-    /*
-     * Check if the XcmsCCC's for each screen has been created.
-     * Really dont need to be created until some routine uses the Xcms
-     * API routines.
-     */
-    if ((XcmsCCC)dpy->cms.defaultCCCs == NULL) {
-	if (!_XcmsInitDefaultCCCs(dpy)) {
-	    return(0);
-	}
-    }
-
-    defaultccc = (XcmsCCC)dpy->cms.defaultCCCs + screenNumber;
-
-    /*
-     * For each SCCFuncSet, try its pInitScrnFunc.
-     *	If the function succeeds, then we got it!
-     */
-
-    if (!defaultccc->pPerScrnInfo) {
-	/*
-	 * This is one of two places where XcmsPerScrnInfo structures
-	 * are allocated.  There is one allocated per Screen that is
-	 * shared among visuals that do not have specific intensity
-	 * tables.  Other XcmsPerScrnInfo structures are created
-	 * for the latter (see XcmsCreateCCC).  The ones created
-	 * here are referenced by the default CCC.
-	 */
-	if (!(defaultccc->pPerScrnInfo = (XcmsPerScrnInfo *)
-		Xcalloc(1, (unsigned) sizeof(XcmsPerScrnInfo)))) {
-	    return(0);
-	}
-	defaultccc->pPerScrnInfo->state = XcmsInitNone;
-    }
-
-    while (*papSCCFuncSet != NULL) {
-	if ((*(*papSCCFuncSet)->screenInitProc)(dpy, screenNumber,
-		defaultccc->pPerScrnInfo)) {
-	    defaultccc->pPerScrnInfo->state = XcmsInitSuccess;
-	    return(1);
-	}
-	papSCCFuncSet++;
-    }
-
-    /*
-     * Use Default SCCData
-     */
-    return(_XcmsLRGB_InitScrnDefault(dpy, screenNumber, defaultccc->pPerScrnInfo));
-}
-
-
-/*
- *	NAME
- *		_XcmsFreeIntensityMaps
- *
- *	SYNOPSIS
- */
-void
-_XcmsFreeIntensityMaps(
-    Display *dpy)
-/*
- *	DESCRIPTION
- *		Frees all XcmsIntensityMap structures in the linked list
- *		and sets dpy->cms.perVisualIntensityMaps to NULL.
- *
- *	RETURNS
- *		void
- *
- */
-{
-    XcmsIntensityMap *pNext, *pFree;
-
-    pNext = (XcmsIntensityMap *)dpy->cms.perVisualIntensityMaps;
-    while (pNext != NULL) {
-	pFree = pNext;
-	pNext = pNext->pNext;
-	(*pFree->pFreeScreenData)(pFree->screenData);
-	/* Now free the XcmsIntensityMap structure */
-	Xfree(pFree);
-    }
-    dpy->cms.perVisualIntensityMaps = (XPointer)NULL;
-}
-
-
-/*
- *	NAME
- *		_XcmsGetIntensityMap
- *
- *	SYNOPSIS
- */
-XcmsIntensityMap *
-_XcmsGetIntensityMap(
-    Display *dpy,
-    Visual *visual)
-/*
- *	DESCRIPTION
- *		Attempts to return a per-Visual intensity map.
- *
- *	RETURNS
- *		Pointer to the XcmsIntensityMap structure if found;
- *		otherwise NULL
- *
- */
-{
-    VisualID targetID = visual->visualid;
-    XcmsIntensityMap *pNext;
-
-    pNext = (XcmsIntensityMap *)dpy->cms.perVisualIntensityMaps;
-    while (pNext != NULL) {
-	if (targetID == pNext->visualID) {
-	    return(pNext);
-	}
-	pNext = pNext->pNext;
-    }
-    return((XcmsIntensityMap *)NULL);
-}
+
+/*
+ * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
+ * 	All Rights Reserved
+ *
+ * This file is a component of an X Window System-specific implementation
+ * of Xcms based on the TekColor Color Management System.  Permission is
+ * hereby granted to use, copy, modify, sell, and otherwise distribute this
+ * software and its documentation for any purpose and without fee, provided
+ * that this copyright, permission, and disclaimer notice is reproduced in
+ * all copies of this software and in supporting documentation.  TekColor
+ * is a trademark of Tektronix, Inc.
+ *
+ * Tektronix makes no representation about the suitability of this software
+ * for any purpose.  It is provided "as is" and with all faults.
+ *
+ * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
+ * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
+ * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
+ *
+ *
+ *	NAME
+ *		XcmsInt.c - Xcms API utility routines
+ *
+ *	DESCRIPTION
+ *		Xcms Application Program Interface (API) utility
+ *		routines for hanging information directly onto
+ *		the Display structure.
+ *
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include "Xlibint.h"
+#include "Xcmsint.h"
+#include "Cv.h"
+
+#ifndef XCMSCOMPPROC
+#  define XCMSCOMPPROC	XcmsTekHVCClipC
+#endif
+
+/* forward/static */
+static void _XcmsFreeDefaultCCCs(Display *dpy);
+
+
+/************************************************************************
+ *									*
+ *			   API PRIVATE ROUTINES				*
+ *									*
+ ************************************************************************/
+
+/*
+ *	NAME
+ *		_XcmsCopyPointerArray
+ *
+ *	SYNOPSIS
+ */
+XPointer *
+_XcmsCopyPointerArray(
+    XPointer *pap)
+/*
+ *	DESCRIPTION
+ *		Copies an array of NULL terminated pointers.
+ *
+ *	RETURNS
+ *		Returns NULL if failed; otherwise the address to
+ *		the copy.
+ *
+ */
+{
+    XPointer *newArray;
+    char **tmp;
+    int n;
+
+    for (tmp = pap, n = 0; *tmp != NULL; tmp++, n++);
+    n++; /* add 1 to include the NULL pointer */
+
+    if ((newArray = (XPointer *)Xmalloc(n * sizeof(XPointer)))) {
+	memcpy((char *)newArray, (char *)pap,
+	       (unsigned)(n * sizeof(XPointer)));
+    }
+    return((XPointer *)newArray);
+}
+
+/*
+ *	NAME
+ *		_XcmsFreePointerArray
+ *
+ *	SYNOPSIS
+ */
+void
+_XcmsFreePointerArray(
+    XPointer *pap)
+/*
+ *	DESCRIPTION
+ *		Frees an array of NULL terminated pointers.
+ *
+ *	RETURNS
+ *		void
+ *
+ */
+{
+    Xfree(pap);
+}
+
+/*
+ *	NAME
+ *		_XcmsPushPointerArray
+ *
+ *	SYNOPSIS
+ */
+XPointer *
+_XcmsPushPointerArray(
+    XPointer *pap,
+    XPointer p,
+    XPointer *papNoFree)
+/*
+ *	DESCRIPTION
+ *		Places the specified pointer at the head of an array of NULL
+ *		terminated pointers.
+ *
+ *	RETURNS
+ *		Returns NULL if failed; otherwise the address to
+ *		the head of the array.
+ *
+ */
+{
+    XPointer *newArray;
+    char **tmp;
+    int n;
+
+    for (tmp = pap, n = 0; *tmp != NULL; tmp++, n++);
+
+    /* add 2: 1 for the new pointer and another for the NULL pointer */
+    n += 2;
+
+    if ((newArray = (XPointer *)Xmalloc(n * sizeof(XPointer)))) {
+	memcpy((char *)(newArray+1),(char *)pap,
+	       (unsigned)((n-1) * sizeof(XPointer)));
+	*newArray = p;
+    }
+    if (pap != papNoFree) {
+        _XcmsFreePointerArray(pap);
+    }
+    return((XPointer *)newArray);
+}
+
+/*
+ *	NAME
+ *		_XcmsInitDefaultCCCs
+ *
+ *	SYNOPSIS
+ */
+int
+_XcmsInitDefaultCCCs(
+    Display *dpy)
+/*
+ *	DESCRIPTION
+ *		Initializes the Xcms per Display Info structure
+ *		(XcmsPerDpyInfo).
+ *
+ *	RETURNS
+ *		Returns 0 if failed; otherwise non-zero.
+ *
+ */
+{
+    int nScrn = ScreenCount(dpy);
+    int i;
+    XcmsCCC ccc;
+
+    if (nScrn <= 0) {
+	return(0);
+    }
+
+    /*
+     * Create an array of XcmsCCC structures, one for each screen.
+     * They serve as the screen's default CCC.
+     */
+    if (!(ccc = (XcmsCCC)
+	    Xcalloc((unsigned)nScrn, (unsigned) sizeof(XcmsCCCRec)))) {
+	return(0);
+    }
+    dpy->cms.defaultCCCs = (XPointer)ccc;
+    dpy->free_funcs->defaultCCCs = _XcmsFreeDefaultCCCs;
+
+    for (i = 0; i < nScrn; i++, ccc++) {
+	ccc->dpy = dpy;
+	ccc->screenNumber = i;
+	ccc->visual = DefaultVisual(dpy, i);
+	/*
+	 * Used calloc to allocate memory so:
+	 *	ccc->clientWhitePt->format == XcmsUndefinedFormat
+	 *	ccc->gamutCompProc == NULL
+	 *	ccc->whitePtAdjProc == NULL
+	 *	ccc->pPerScrnInfo = NULL
+	 *
+	 * Don't need to create XcmsPerScrnInfo and its functionSet and
+	 * pScreenData components until the default CCC is accessed.
+	 * Note that the XcmsDefaultCCC routine calls _XcmsInitScrnInto
+	 * to do this.
+	 */
+	ccc->gamutCompProc = XCMSCOMPPROC;
+    }
+
+    return(1);
+}
+
+
+/*
+ *	NAME
+ *		_XcmsFreeDefaultCCCs - Free Default CCCs and its PerScrnInfo
+ *
+ *	SYNOPSIS
+ */
+static void
+_XcmsFreeDefaultCCCs(
+    Display *dpy)
+/*
+ *	DESCRIPTION
+ *		This routine frees the default XcmsCCC's associated with
+ *		each screen and its associated substructures as neccessary.
+ *
+ *	RETURNS
+ *		void
+ *
+ *
+ */
+{
+    int nScrn = ScreenCount(dpy);
+    XcmsCCC ccc;
+    int i;
+
+    /*
+     * Free Screen data in each DefaultCCC
+     *		Do not use XcmsFreeCCC here because it will not free
+     *		DefaultCCC's.
+     */
+    ccc = (XcmsCCC)dpy->cms.defaultCCCs;
+    for (i = nScrn; i--; ccc++) {
+	/*
+	 * Check if XcmsPerScrnInfo exists.
+	 *
+	 * This is the only place where XcmsPerScrnInfo structures
+	 * are freed since there is only one allocated per Screen.
+	 * It just so happens that we place its reference in the
+	 * default CCC.
+	 */
+	if (ccc->pPerScrnInfo) {
+	    /* Check if SCCData exists */
+	    if (ccc->pPerScrnInfo->state != XcmsInitNone
+		    && ccc->pPerScrnInfo->screenData) {
+		(*((XcmsFunctionSet *)ccc->pPerScrnInfo->functionSet)->screenFreeProc)
+			(ccc->pPerScrnInfo->screenData);
+	    }
+	    Xfree(ccc->pPerScrnInfo);
+	}
+    }
+
+    /*
+     * Free the array of XcmsCCC structures
+     */
+    Xfree(dpy->cms.defaultCCCs);
+    dpy->cms.defaultCCCs = (XPointer)NULL;
+}
+
+
+
+/*
+ *	NAME
+ *		_XcmsInitScrnInfo
+ *
+ *	SYNOPSIS
+ */
+int
+_XcmsInitScrnInfo(
+    register Display *dpy,
+    int screenNumber)
+/*
+ *	DESCRIPTION
+ *		Given a display and screen number, this routine attempts
+ *		to initialize the Xcms per Screen Info structure
+ *		(XcmsPerScrnInfo).
+ *
+ *	RETURNS
+ *		Returns zero if initialization failed; non-zero otherwise.
+ */
+{
+    XcmsFunctionSet **papSCCFuncSet = _XcmsSCCFuncSets;
+    XcmsCCC defaultccc;
+
+    /*
+     * Check if the XcmsCCC's for each screen has been created.
+     * Really dont need to be created until some routine uses the Xcms
+     * API routines.
+     */
+    if ((XcmsCCC)dpy->cms.defaultCCCs == NULL) {
+	if (!_XcmsInitDefaultCCCs(dpy)) {
+	    return(0);
+	}
+    }
+
+    defaultccc = (XcmsCCC)dpy->cms.defaultCCCs + screenNumber;
+
+    /*
+     * For each SCCFuncSet, try its pInitScrnFunc.
+     *	If the function succeeds, then we got it!
+     */
+
+    if (!defaultccc->pPerScrnInfo) {
+	/*
+	 * This is one of two places where XcmsPerScrnInfo structures
+	 * are allocated.  There is one allocated per Screen that is
+	 * shared among visuals that do not have specific intensity
+	 * tables.  Other XcmsPerScrnInfo structures are created
+	 * for the latter (see XcmsCreateCCC).  The ones created
+	 * here are referenced by the default CCC.
+	 */
+	if (!(defaultccc->pPerScrnInfo = (XcmsPerScrnInfo *)
+		Xcalloc(1, (unsigned) sizeof(XcmsPerScrnInfo)))) {
+	    return(0);
+	}
+	defaultccc->pPerScrnInfo->state = XcmsInitNone;
+    }
+
+    while (*papSCCFuncSet != NULL) {
+	if ((*(*papSCCFuncSet)->screenInitProc)(dpy, screenNumber,
+		defaultccc->pPerScrnInfo)) {
+	    defaultccc->pPerScrnInfo->state = XcmsInitSuccess;
+	    return(1);
+	}
+	papSCCFuncSet++;
+    }
+
+    /*
+     * Use Default SCCData
+     */
+    return(_XcmsLRGB_InitScrnDefault(dpy, screenNumber, defaultccc->pPerScrnInfo));
+}
+
+
+/*
+ *	NAME
+ *		_XcmsFreeIntensityMaps
+ *
+ *	SYNOPSIS
+ */
+void
+_XcmsFreeIntensityMaps(
+    Display *dpy)
+/*
+ *	DESCRIPTION
+ *		Frees all XcmsIntensityMap structures in the linked list
+ *		and sets dpy->cms.perVisualIntensityMaps to NULL.
+ *
+ *	RETURNS
+ *		void
+ *
+ */
+{
+    XcmsIntensityMap *pNext, *pFree;
+
+    pNext = (XcmsIntensityMap *)dpy->cms.perVisualIntensityMaps;
+    while (pNext != NULL) {
+	pFree = pNext;
+	pNext = pNext->pNext;
+	(*pFree->pFreeScreenData)(pFree->screenData);
+	/* Now free the XcmsIntensityMap structure */
+	Xfree(pFree);
+    }
+    dpy->cms.perVisualIntensityMaps = (XPointer)NULL;
+}
+
+
+/*
+ *	NAME
+ *		_XcmsGetIntensityMap
+ *
+ *	SYNOPSIS
+ */
+XcmsIntensityMap *
+_XcmsGetIntensityMap(
+    Display *dpy,
+    Visual *visual)
+/*
+ *	DESCRIPTION
+ *		Attempts to return a per-Visual intensity map.
+ *
+ *	RETURNS
+ *		Pointer to the XcmsIntensityMap structure if found;
+ *		otherwise NULL
+ *
+ */
+{
+    VisualID targetID = visual->visualid;
+    XcmsIntensityMap *pNext;
+
+    pNext = (XcmsIntensityMap *)dpy->cms.perVisualIntensityMaps;
+    while (pNext != NULL) {
+	if (targetID == pNext->visualID) {
+	    return(pNext);
+	}
+	pNext = pNext->pNext;
+    }
+    return((XcmsIntensityMap *)NULL);
+}
diff --git a/libX11/src/xcms/cmsLkCol.c b/libX11/src/xcms/cmsLkCol.c
index 776fffd75..02e48462e 100644
--- a/libX11/src/xcms/cmsLkCol.c
+++ b/libX11/src/xcms/cmsLkCol.c
@@ -1,194 +1,193 @@
-
-/*
- * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
- * 	All Rights Reserved
- *
- * This file is a component of an X Window System-specific implementation
- * of Xcms based on the TekColor Color Management System.  Permission is
- * hereby granted to use, copy, modify, sell, and otherwise distribute this
- * software and its documentation for any purpose and without fee, provided
- * that this copyright, permission, and disclaimer notice is reproduced in
- * all copies of this software and in supporting documentation.  TekColor
- * is a trademark of Tektronix, Inc.
- *
- * Tektronix makes no representation about the suitability of this software
- * for any purpose.  It is provided "as is" and with all faults.
- *
- * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
- * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
- *
- *
- *	NAME
- *		XcmsLkCol.c
- *
- *	DESCRIPTION
- *		Source for XcmsLookupColor
- *
- *
- */
-
-#define NEED_REPLIES
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include "Xlibint.h"
-#include "Xcmsint.h"
-#include "Cv.h"
-
-
-/*
- *	NAME
- *		XcmsLookupColor -
- *
- *	SYNOPSIS
- */
-Status
-XcmsLookupColor (
-    Display *dpy,
-    Colormap cmap,
-    _Xconst char *colorname,
-    XcmsColor *pColor_exact_return,
-    XcmsColor *pColor_scrn_return,
-    XcmsColorFormat result_format)
-/*
- *	DESCRIPTION
- *		The XcmsLookupColor function finds the color specification
- *		associated with a color name in the Device-Independent Color
- *		Name Database.
- *	RETURNS
- *		This function returns both the color specification found in the
- *		database (db specification) and the color specification for the
- *		color displayable by the specified screen (screen
- *		specification).  The calling routine sets the format for these
- *		returned specifications in the XcmsColor format component.
- *		If XcmsUndefinedFormat, the specification is returned in the
- *		format used to store the color in the database.
- */
-{
-    Status retval1 = XcmsSuccess;
-    Status retval2 = XcmsSuccess;
-    XcmsCCC ccc;
-    register int n;
-    xLookupColorReply reply;
-    register xLookupColorReq *req;
-    XColor def, scr;
-
-/*
- * 0. Check for invalid arguments.
- */
-    if (dpy == NULL || colorname[0] == '\0' || pColor_scrn_return == 0
-	    || pColor_exact_return == NULL) {
-	return(XcmsFailure);
-    }
-
-    if ((ccc = XcmsCCCOfColormap(dpy, cmap)) == (XcmsCCC)NULL) {
-	return(XcmsFailure);
-    }
-
-/*
- * 1. Convert string to a XcmsColor
- */
-    if ((retval1 = _XcmsResolveColorString(ccc, &colorname,
-	    pColor_exact_return, result_format)) == XcmsFailure) {
-	return(XcmsFailure);
-    }
-    if (retval1 == _XCMS_NEWNAME) {
-	goto PassToServer;
-    }
-
-/*
- * 2. pColor_scrn_return
- *	    Assume the pColor_exact_return has already been adjusted to
- *	    the Client White Point.
- *
- */
-    /*
-     * Convert to RGB, adjusting for white point differences if necessary.
-     */
-    memcpy((char *)pColor_scrn_return, (char *)pColor_exact_return,
-	   sizeof(XcmsColor));
-    if (pColor_scrn_return->format == XcmsRGBFormat) {
-	retval2 = XcmsSuccess;
-    } else if ((retval2 = XcmsConvertColors(ccc, pColor_scrn_return, 1,
-	    XcmsRGBFormat, (Bool *)NULL)) == XcmsFailure) {
-	return(XcmsFailure);
-    }
-
-    /*
-     * Then, convert XcmsColor structure to the target specification
-     *    format.  Note that we must use NULL instead of passing
-     *    pCompressed.
-     */
-
-    if (result_format ==  XcmsUndefinedFormat) {
-	result_format = pColor_exact_return->format;
-    }
-    if (result_format == XcmsRGBFormat) {
-	_XcmsUnresolveColor(ccc, pColor_scrn_return);
-    } else {
-	_XcmsResolveColor(ccc, pColor_scrn_return);
-	if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format,
-		(Bool *) NULL) == XcmsFailure) {
-	    return(XcmsFailure);
-	}
-    }
-
-    return(retval1 > retval2 ? retval1 : retval2);
-
-PassToServer:
-    /*
-     * Xcms and i18n methods failed, so lets pass it to the server
-     * for parsing.
-     */
-
-    LockDisplay(dpy);
-    GetReq (LookupColor, req);
-    req->cmap = cmap;
-    req->nbytes = n = strlen(colorname);
-    req->length += (n + 3) >> 2;
-    Data (dpy, colorname, (long)n);
-    if (!_XReply (dpy, (xReply *) &reply, 0, xTrue)) {
-	UnlockDisplay(dpy);
-	SyncHandle();
-	return (XcmsFailure);
-	}
-    def.red   = reply.exactRed;
-    def.green = reply.exactGreen;
-    def.blue  = reply.exactBlue;
-
-    scr.red   = reply.screenRed;
-    scr.green = reply.screenGreen;
-    scr.blue  = reply.screenBlue;
-
-    UnlockDisplay(dpy);
-    SyncHandle();
-
-    _XColor_to_XcmsRGB(ccc, &def, pColor_exact_return, 1);
-    _XColor_to_XcmsRGB(ccc, &scr, pColor_scrn_return, 1);
-
-    /*
-     * Then, convert XcmsColor structure to the target specification
-     *    format.  Note that we must use NULL instead of passing
-     *    pCompressed.
-     */
-
-    if (result_format != XcmsRGBFormat
-	    && result_format != XcmsUndefinedFormat) {
-	if (XcmsConvertColors(ccc, pColor_exact_return, 1, result_format,
-		(Bool *) NULL) == XcmsFailure) {
-	    return(XcmsFailure);
-	}
-	if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format,
-		(Bool *) NULL) == XcmsFailure) {
-	    return(XcmsFailure);
-	}
-    }
-
-    return(XcmsSuccess);
-}
+
+/*
+ * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
+ * 	All Rights Reserved
+ *
+ * This file is a component of an X Window System-specific implementation
+ * of Xcms based on the TekColor Color Management System.  Permission is
+ * hereby granted to use, copy, modify, sell, and otherwise distribute this
+ * software and its documentation for any purpose and without fee, provided
+ * that this copyright, permission, and disclaimer notice is reproduced in
+ * all copies of this software and in supporting documentation.  TekColor
+ * is a trademark of Tektronix, Inc.
+ *
+ * Tektronix makes no representation about the suitability of this software
+ * for any purpose.  It is provided "as is" and with all faults.
+ *
+ * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
+ * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
+ * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
+ *
+ *
+ *	NAME
+ *		XcmsLkCol.c
+ *
+ *	DESCRIPTION
+ *		Source for XcmsLookupColor
+ *
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include "Xlibint.h"
+#include "Xcmsint.h"
+#include "Cv.h"
+
+
+/*
+ *	NAME
+ *		XcmsLookupColor -
+ *
+ *	SYNOPSIS
+ */
+Status
+XcmsLookupColor (
+    Display *dpy,
+    Colormap cmap,
+    _Xconst char *colorname,
+    XcmsColor *pColor_exact_return,
+    XcmsColor *pColor_scrn_return,
+    XcmsColorFormat result_format)
+/*
+ *	DESCRIPTION
+ *		The XcmsLookupColor function finds the color specification
+ *		associated with a color name in the Device-Independent Color
+ *		Name Database.
+ *	RETURNS
+ *		This function returns both the color specification found in the
+ *		database (db specification) and the color specification for the
+ *		color displayable by the specified screen (screen
+ *		specification).  The calling routine sets the format for these
+ *		returned specifications in the XcmsColor format component.
+ *		If XcmsUndefinedFormat, the specification is returned in the
+ *		format used to store the color in the database.
+ */
+{
+    Status retval1 = XcmsSuccess;
+    Status retval2 = XcmsSuccess;
+    XcmsCCC ccc;
+    register int n;
+    xLookupColorReply reply;
+    register xLookupColorReq *req;
+    XColor def, scr;
+
+/*
+ * 0. Check for invalid arguments.
+ */
+    if (dpy == NULL || colorname[0] == '\0' || pColor_scrn_return == 0
+	    || pColor_exact_return == NULL) {
+	return(XcmsFailure);
+    }
+
+    if ((ccc = XcmsCCCOfColormap(dpy, cmap)) == (XcmsCCC)NULL) {
+	return(XcmsFailure);
+    }
+
+/*
+ * 1. Convert string to a XcmsColor
+ */
+    if ((retval1 = _XcmsResolveColorString(ccc, &colorname,
+	    pColor_exact_return, result_format)) == XcmsFailure) {
+	return(XcmsFailure);
+    }
+    if (retval1 == _XCMS_NEWNAME) {
+	goto PassToServer;
+    }
+
+/*
+ * 2. pColor_scrn_return
+ *	    Assume the pColor_exact_return has already been adjusted to
+ *	    the Client White Point.
+ *
+ */
+    /*
+     * Convert to RGB, adjusting for white point differences if necessary.
+     */
+    memcpy((char *)pColor_scrn_return, (char *)pColor_exact_return,
+	   sizeof(XcmsColor));
+    if (pColor_scrn_return->format == XcmsRGBFormat) {
+	retval2 = XcmsSuccess;
+    } else if ((retval2 = XcmsConvertColors(ccc, pColor_scrn_return, 1,
+	    XcmsRGBFormat, (Bool *)NULL)) == XcmsFailure) {
+	return(XcmsFailure);
+    }
+
+    /*
+     * Then, convert XcmsColor structure to the target specification
+     *    format.  Note that we must use NULL instead of passing
+     *    pCompressed.
+     */
+
+    if (result_format ==  XcmsUndefinedFormat) {
+	result_format = pColor_exact_return->format;
+    }
+    if (result_format == XcmsRGBFormat) {
+	_XcmsUnresolveColor(ccc, pColor_scrn_return);
+    } else {
+	_XcmsResolveColor(ccc, pColor_scrn_return);
+	if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format,
+		(Bool *) NULL) == XcmsFailure) {
+	    return(XcmsFailure);
+	}
+    }
+
+    return(retval1 > retval2 ? retval1 : retval2);
+
+PassToServer:
+    /*
+     * Xcms and i18n methods failed, so lets pass it to the server
+     * for parsing.
+     */
+
+    LockDisplay(dpy);
+    GetReq (LookupColor, req);
+    req->cmap = cmap;
+    req->nbytes = n = strlen(colorname);
+    req->length += (n + 3) >> 2;
+    Data (dpy, colorname, (long)n);
+    if (!_XReply (dpy, (xReply *) &reply, 0, xTrue)) {
+	UnlockDisplay(dpy);
+	SyncHandle();
+	return (XcmsFailure);
+	}
+    def.red   = reply.exactRed;
+    def.green = reply.exactGreen;
+    def.blue  = reply.exactBlue;
+
+    scr.red   = reply.screenRed;
+    scr.green = reply.screenGreen;
+    scr.blue  = reply.screenBlue;
+
+    UnlockDisplay(dpy);
+    SyncHandle();
+
+    _XColor_to_XcmsRGB(ccc, &def, pColor_exact_return, 1);
+    _XColor_to_XcmsRGB(ccc, &scr, pColor_scrn_return, 1);
+
+    /*
+     * Then, convert XcmsColor structure to the target specification
+     *    format.  Note that we must use NULL instead of passing
+     *    pCompressed.
+     */
+
+    if (result_format != XcmsRGBFormat
+	    && result_format != XcmsUndefinedFormat) {
+	if (XcmsConvertColors(ccc, pColor_exact_return, 1, result_format,
+		(Bool *) NULL) == XcmsFailure) {
+	    return(XcmsFailure);
+	}
+	if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format,
+		(Bool *) NULL) == XcmsFailure) {
+	    return(XcmsFailure);
+	}
+    }
+
+    return(XcmsSuccess);
+}
-- 
cgit v1.2.3