⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xcmsadddic.c

📁 早期freebsd实现
💻 C
字号:
/* $XConsortium: XcmsAddDIC.c,v 1.5 91/05/15 15:40:22 rws Exp $" *//* * 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 *		XcmsAddDIC.c * *	DESCRIPTION *		Source for XcmsAddColorSpace * * */#include "Xlibint.h"#include "Xcmsint.h"/* *      DEFINES */#define NextUnregDiCsID(lastid) \	    (XCMS_UNREG_ID(lastid) ? ++lastid : XCMS_FIRST_UNREG_DI_ID)#define MAX(x,y) ((x) < (y) ? (y) : (x))/* *      EXTERNS */extern XcmsPerDpyInfo *_XcmsFindDpyInfo();extern XPointer *_XcmsPushPointerArray();extern XcmsColorFormat _XcmsRegFormatOfPrefix();extern XcmsColorSpace **_XcmsDIColorSpaces;extern XcmsColorSpace *_XcmsDIColorSpacesInit[];/* *	NAME *		XcmsAddColorSpace - Add a Device-Independent Color Space * *	SYNOPSIS */StatusXcmsAddColorSpace(pCS)    XcmsColorSpace *pCS;/* *	DESCRIPTION *		DI Color Spaces are managed on a global basis. *		This means that with exception of the provided DI color spaces: *			CIEXYZ, CIExyY, CIELab, CIEuvY, CIELuv, and TekHVC *		DI color spaces may have different XcmsColorFormat IDs between *		clients.  So, you must be careful when using XcmsColor *		structures between clients!  Use the routines XcmsFormatOfPrefix() *		and XcmsPrefixOfFormat() appropriately. * *	RETURNS *		XcmsSuccess if succeeded, otherwise XcmsFailure */{    XcmsColorSpace **papColorSpaces;    XcmsColorSpace *ptmpCS;    XcmsColorFormat lastID = 0;    if ((pCS->id = _XcmsRegFormatOfPrefix(pCS->prefix)) != 0) {	if (XCMS_DD_ID(pCS->id)) {	    /* This is a Device-Dependent Color Space */	    return(XcmsFailure);	}	/*	 * REGISTERED DI Color Space	 *    then see if the color space has already been added to the	 *    system:	 *	    a. If the same ID/prefix and same XcmsColorSpec is found,	 *		then its a duplicate, so return success.	 *	    b. If same ID/prefix but different XcmsColorSpec is	 *		found, then add the color space to the front of the	 *		list using the same ID.  This allows one to override	 *		an existing DI Color Space.	 *	    c. Otherwise none found so just add the color space.	 */	if ((papColorSpaces = _XcmsDIColorSpaces) != NULL) {	    while ((ptmpCS = *papColorSpaces++) != NULL) {		if (pCS->id == ptmpCS->id) {		    if (pCS == ptmpCS) {			/* a. duplicate*/			return(XcmsSuccess);		    }		    /* b. same ID/prefix but different XcmsColorSpace */		    break;		}	    }	}	/* c. None found */    } else {	/*	 * UNREGISTERED DI Color Space	 *    then see if the color space has already been added to the	 *    system:	 *	    a. If same prefix and XcmsColorSpec, then	 *		its a duplicate ... return success.	 *	    b. If same prefix but different XcmsColorSpec, then	 *		add the color space to the front of the list using	 *		the same ID.  This allows one to override an existing	 *		DI Color Space.	 *	    c. Otherwise none found so, add the color space using the	 *		next unregistered ID for the connection.	 */	if ((papColorSpaces = _XcmsDIColorSpaces) != NULL) {	    while ((ptmpCS = *papColorSpaces++) != NULL) {		lastID = MAX(lastID, ptmpCS->id);		if (strcmp(pCS->prefix, ptmpCS->prefix) == 0) {		    if (pCS == ptmpCS) {			/* a. duplicate */			return(XcmsSuccess);		    }		    /* b. same prefix but different XcmsColorSpec */		    pCS->id = ptmpCS->id;		    goto AddColorSpace;		}	    }	}	/* c. None found */	pCS->id = NextUnregDiCsID(lastID);    }AddColorSpace:    if ((papColorSpaces = (XcmsColorSpace **)	    _XcmsPushPointerArray((XPointer *)_XcmsDIColorSpaces,	    (XPointer)pCS,	    (XPointer *)_XcmsDIColorSpacesInit)) == NULL) {	return(XcmsFailure);    }    _XcmsDIColorSpaces = papColorSpaces;    return(XcmsSuccess);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -