Home | History | Annotate | Line # | Download | only in X11
      1 
      2 /*
      3  * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
      4  * 	All Rights Reserved
      5  *
      6  * This file is a component of an X Window System-specific implementation
      7  * of Xcms based on the TekColor Color Management System.  Permission is
      8  * hereby granted to use, copy, modify, sell, and otherwise distribute this
      9  * software and its documentation for any purpose and without fee, provided
     10  * that this copyright, permission, and disclaimer notice is reproduced in
     11  * all copies of this software and in supporting documentation.  TekColor
     12  * is a trademark of Tektronix, Inc.
     13  *
     14  * Tektronix makes no representation about the suitability of this software
     15  * for any purpose.  It is provided "as is" and with all faults.
     16  *
     17  * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
     18  * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
     19  * PARTICULAR PURPOSE.  IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
     20  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
     21  * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
     22  * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
     23  * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
     24  *
     25  *
     26  *	DESCRIPTION
     27  *		Public include file for X Color Management System
     28  */
     29 #ifndef _X11_XCMS_H_
     30 #define _X11_XCMS_H_
     31 
     32 #include <X11/Xlib.h>
     33 
     34 /* The Xcms structs are full of implicit padding to properly align members.
     35    We can't clean that up without breaking ABI, so tell clang not to bother
     36    complaining about it. */
     37 #ifdef __clang__
     38 #pragma clang diagnostic push
     39 #pragma clang diagnostic ignored "-Wpadded"
     40 #endif
     41 
     42     /*
     43      * XCMS Status Values
     44      */
     45 #define XcmsFailure			0
     46 #define XcmsSuccess			1
     47 #define XcmsSuccessWithCompression	2
     48 
     49     /*
     50      * Color Space Format ID's
     51      *    Color Space ID's are of XcmsColorFormat type.
     52      *
     53      *    bit 31
     54      *	    0 == Device-Independent
     55      *	    1 == Device-Dependent
     56      *
     57      *    bit 30:
     58      *	    0 == Registered with X Consortium
     59      *	    1 == Unregistered
     60      */
     61 #define XcmsUndefinedFormat	(XcmsColorFormat)0x00000000
     62 #define XcmsCIEXYZFormat	(XcmsColorFormat)0x00000001
     63 #define XcmsCIEuvYFormat	(XcmsColorFormat)0x00000002
     64 #define XcmsCIExyYFormat	(XcmsColorFormat)0x00000003
     65 #define XcmsCIELabFormat	(XcmsColorFormat)0x00000004
     66 #define XcmsCIELuvFormat	(XcmsColorFormat)0x00000005
     67 #define XcmsTekHVCFormat	(XcmsColorFormat)0x00000006
     68 #define XcmsRGBFormat		(XcmsColorFormat)0x80000000
     69 #define XcmsRGBiFormat		(XcmsColorFormat)0x80000001
     70 
     71     /*
     72      * State of XcmsPerScrnInfo
     73      */
     74 #define XcmsInitNone		0x00	/* no initialization attempted */
     75 #define XcmsInitSuccess		0x01	/* initialization successful */
     76 #define XcmsInitFailure		0xff	/* failure, use defaults */
     77 
     78 #define DisplayOfCCC(ccc)		((ccc)->dpy)
     79 #define ScreenNumberOfCCC(ccc)		((ccc)->screenNumber)
     80 #define VisualOfCCC(ccc)		((ccc)->visual)
     81 #define ClientWhitePointOfCCC(ccc)	(&(ccc)->clientWhitePt)
     82 #define ScreenWhitePointOfCCC(ccc)	(&(ccc)->pPerScrnInfo->screenWhitePt)
     83 #define FunctionSetOfCCC(ccc)		((ccc)->pPerScrnInfo->functionSet)
     84 
     85 typedef unsigned long XcmsColorFormat;	/* Color Space Format ID */
     86 
     87 typedef double XcmsFloat;
     88 
     89     /*
     90      * Device RGB
     91      */
     92 typedef struct {
     93     unsigned short red;		/* scaled from 0x0000 to 0xffff */
     94     unsigned short green;	/* scaled from 0x0000 to 0xffff */
     95     unsigned short blue;	/* scaled from 0x0000 to 0xffff */
     96 } XcmsRGB;
     97 
     98     /*
     99      * RGB Intensity
    100      */
    101 typedef struct {
    102     XcmsFloat red;	/* 0.0 - 1.0 */
    103     XcmsFloat green;	/* 0.0 - 1.0 */
    104     XcmsFloat blue;	/* 0.0 - 1.0 */
    105 } XcmsRGBi;
    106 
    107     /*
    108      * CIE XYZ
    109      */
    110 typedef struct {
    111     XcmsFloat X;
    112     XcmsFloat Y;
    113     XcmsFloat Z;
    114 } XcmsCIEXYZ;
    115 
    116     /*
    117      * CIE u'v'Y
    118      */
    119 typedef struct {
    120     XcmsFloat u_prime;		/* 0.0 - 1.0 */
    121     XcmsFloat v_prime;		/* 0.0 - 1.0 */
    122     XcmsFloat Y;		/* 0.0 - 1.0 */
    123 } XcmsCIEuvY;
    124 
    125     /*
    126      * CIE xyY
    127      */
    128 typedef struct {
    129     XcmsFloat x;		/* 0.0 - 1.0 */
    130     XcmsFloat y;		/* 0.0 - 1.0 */
    131     XcmsFloat Y;		/* 0.0 - 1.0 */
    132 } XcmsCIExyY;
    133 
    134     /*
    135      * CIE L*a*b*
    136      */
    137 typedef struct {
    138     XcmsFloat L_star;		/* 0.0 - 100.0 */
    139     XcmsFloat a_star;
    140     XcmsFloat b_star;
    141 } XcmsCIELab;
    142 
    143     /*
    144      * CIE L*u*v*
    145      */
    146 typedef struct {
    147     XcmsFloat L_star;		/* 0.0 - 100.0 */
    148     XcmsFloat u_star;
    149     XcmsFloat v_star;
    150 } XcmsCIELuv;
    151 
    152     /*
    153      * TekHVC
    154      */
    155 typedef struct {
    156     XcmsFloat H;		/* 0.0 - 360.0 */
    157     XcmsFloat V;		/* 0.0 - 100.0 */
    158     XcmsFloat C;		/* 0.0 - 100.0 */
    159 } XcmsTekHVC;
    160 
    161     /*
    162      * PAD
    163      */
    164 typedef struct {
    165     XcmsFloat pad0;
    166     XcmsFloat pad1;
    167     XcmsFloat pad2;
    168     XcmsFloat pad3;
    169 } XcmsPad;
    170 
    171 
    172     /*
    173      * XCMS Color Structure
    174      */
    175 typedef struct {
    176     union {
    177 	XcmsRGB RGB;
    178 	XcmsRGBi RGBi;
    179 	XcmsCIEXYZ CIEXYZ;
    180 	XcmsCIEuvY CIEuvY;
    181 	XcmsCIExyY CIExyY;
    182 	XcmsCIELab CIELab;
    183 	XcmsCIELuv CIELuv;
    184 	XcmsTekHVC TekHVC;
    185 	XcmsPad Pad;
    186     } spec;			/* the color specification	*/
    187     unsigned long pixel;	/* pixel value (as needed)	*/
    188     XcmsColorFormat	format;		/* the specification format	*/
    189 } XcmsColor;
    190 
    191 
    192     /*
    193      * XCMS Per Screen related data
    194      */
    195 
    196 typedef struct _XcmsPerScrnInfo {
    197     XcmsColor	screenWhitePt;	/* Screen White point */
    198     XPointer	functionSet;	/* pointer to Screen Color Characterization */
    199 				/*      Function Set structure		*/
    200     XPointer	screenData;	/* pointer to corresponding Screen Color*/
    201 				/*	Characterization Data		*/
    202     unsigned char state;   /* XcmsInitNone, XcmsInitSuccess, XcmsInitFailure */
    203     char	pad[3];
    204 } XcmsPerScrnInfo;
    205 
    206 typedef struct _XcmsCCC *XcmsCCC;
    207 
    208 typedef Status (*XcmsCompressionProc)(		/* Gamut Compression Proc */
    209     XcmsCCC		/* ccc */,
    210     XcmsColor*		/* colors_in_out */,
    211     unsigned int	/* ncolors */,
    212     unsigned int	/* index */,
    213     Bool*		/* compression_flags_return */
    214 );
    215 
    216 typedef Status (*XcmsWhiteAdjustProc)(	 	/* White Point Adjust Proc */
    217     XcmsCCC		/* ccc */,
    218     XcmsColor*		/* initial_white_point*/,
    219     XcmsColor*		/* target_white_point*/,
    220     XcmsColorFormat	/* target_format */,
    221     XcmsColor*		/* colors_in_out */,
    222     unsigned int	/* ncolors */,
    223     Bool*		/* compression_flags_return */
    224 );
    225 
    226     /*
    227      * XCMS Color Conversion Context
    228      */
    229 typedef struct _XcmsCCC {
    230     Display	*dpy;			/* X Display */
    231     int		screenNumber;		/* X screen number */
    232     Visual	*visual;		/* X Visual */
    233     XcmsColor	clientWhitePt;		/* Client White Point */
    234     XcmsCompressionProc	gamutCompProc;	/* Gamut Compression Function */
    235     XPointer	gamutCompClientData;	/* Gamut Comp Func Client Data */
    236     XcmsWhiteAdjustProc	whitePtAdjProc;	/* White Point Adjustment Function */
    237     XPointer	whitePtAdjClientData;	/* White Pt Adj Func Client Data */
    238     XcmsPerScrnInfo *pPerScrnInfo;	/* pointer to per screen information */
    239 					/*  associated with the above display */
    240 					/*  screenNumber */
    241 } XcmsCCCRec;
    242 
    243 typedef Status (*XcmsScreenInitProc)(	/* Screen Initialization Proc */
    244     Display*		/* dpy */,
    245     int			/* screen_number */,
    246     XcmsPerScrnInfo*	/* screen_info */
    247 );
    248 
    249 typedef void (*XcmsScreenFreeProc)(
    250     XPointer		/* screenData */
    251 );
    252 
    253     /*
    254      * Function List Pointer -- pointer to an array of function pointers.
    255      *    The end of list is indicated by a NULL pointer.
    256      */
    257 /*
    258  * XXX:  The use of the XcmsConversionProc type is broken.  The
    259  *       device-independent colour conversion code uses it as:
    260 
    261 typedef Status (*XcmsConversionProc)(XcmsCCC, XcmsColor *, XcmsColor *,
    262 				     unsigned int);
    263 
    264  *       while the device-dependent code uses it as:
    265 
    266 typedef Status (*XcmsConversionProc)(XcmsCCC, XcmsColor *, unsigned int,
    267 				     Bool *);
    268 
    269  *       Until this is reworked, it's probably best to leave it unprotoized.
    270  *       The code works regardless.
    271  */
    272 typedef Status (*XcmsDDConversionProc)( /* using device-dependent version */
    273     XcmsCCC             /* ccc */,
    274     XcmsColor*          /* pcolors_in_out */,
    275     unsigned int        /* ncolors */,
    276     Bool*               /* pCompressed */
    277     );
    278 
    279 typedef Status (*XcmsDIConversionProc)( /* using device-independent version */
    280     XcmsCCC             /* ccc */,
    281     XcmsColor*          /* white_point */,
    282     XcmsColor*          /* pcolors_in_out */,
    283     unsigned int        /* ncolors */
    284     );
    285 
    286 typedef XcmsDIConversionProc XcmsConversionProc;
    287 typedef XcmsConversionProc *XcmsFuncListPtr;
    288 
    289 typedef int (*XcmsParseStringProc)(	/* Color String Parsing Proc */
    290     char*		/* color_string */,
    291     XcmsColor*		/* color_return */
    292 );
    293 
    294     /*
    295      * Color Space -- per Color Space related data (Device-Independent
    296      *    or Device-Dependent)
    297      */
    298 typedef struct _XcmsColorSpace {
    299     const char *prefix;		/* Prefix of string format.		*/
    300     XcmsColorFormat id;		/* Format ID number.			*/
    301     XcmsParseStringProc parseString;
    302 				/* String format parsing function	*/
    303     XcmsFuncListPtr to_CIEXYZ;	/* Pointer to an array of function 	*/
    304 				/*   pointers such that when the	*/
    305 				/*   functions are executed in sequence	*/
    306 				/*   will convert a XcmsColor structure	*/
    307 				/*   from this color space to CIEXYZ	*/
    308 				/*   space.				*/
    309     XcmsFuncListPtr from_CIEXYZ;/* Pointer to an array of function 	*/
    310 				/*   pointers such that when the	*/
    311 				/*   functions are executed in sequence	*/
    312 				/*   will convert a XcmsColor structure	*/
    313 				/*   from CIEXYZ space to this color	*/
    314 				/*   space.				*/
    315     int inverse_flag;		/* If 1, indicates that for 0 <= i < n	*/
    316 				/*   where n is the number of function	*/
    317 				/*   pointers in the lists to_CIEXYZ	*/
    318 				/*   and from_CIEXYZ; for each function */
    319 				/*   to_CIEXYZ[i] its inverse function	*/
    320 				/*   is from_CIEXYZ[n - i].		*/
    321 
    322 } XcmsColorSpace;
    323 
    324     /*
    325      * Screen Color Characterization Function Set -- per device class
    326      *    color space conversion functions.
    327      */
    328 typedef struct _XcmsFunctionSet {
    329     XcmsColorSpace **DDColorSpaces;
    330 				/* Pointer to an array of pointers to	*/
    331 				/*   Device-DEPENDENT color spaces	*/
    332 				/*   understood by this SCCFuncSet.	*/
    333     XcmsScreenInitProc screenInitProc;
    334 				/* Screen initialization function that	*/
    335 				/*   reads Screen Color Characterization*/
    336 				/*   Data off properties on the screen's*/
    337 				/*   root window.			*/
    338     XcmsScreenFreeProc screenFreeProc;
    339 				/* Function that frees the SCCData	*/
    340 				/*   structures.			*/
    341 } XcmsFunctionSet;
    342 
    343 _XFUNCPROTOBEGIN
    344 
    345 extern Status XcmsAddColorSpace (
    346     XcmsColorSpace*	/* pColorSpace */
    347 );
    348 
    349 extern Status XcmsAddFunctionSet (
    350     XcmsFunctionSet*	/* functionSet */
    351 );
    352 
    353 extern Status XcmsAllocColor (
    354     Display*		/* dpy */,
    355     Colormap		/* colormap */,
    356     XcmsColor*		/* color_in_out */,
    357     XcmsColorFormat		/* result_format */
    358 );
    359 
    360 extern Status XcmsAllocNamedColor (
    361     Display*		/* dpy */,
    362     Colormap		/* colormap */,
    363     _Xconst char*	/* color_string */,
    364     XcmsColor*		/* color_scrn_return */,
    365     XcmsColor*		/* color_exact_return */,
    366     XcmsColorFormat		/* result_format */
    367 );
    368 
    369 extern XcmsCCC XcmsCCCOfColormap (
    370     Display*		/* dpy */,
    371     Colormap		/* colormap */
    372 );
    373 
    374 extern Status XcmsCIELabClipab(
    375     XcmsCCC		/* ccc */,
    376     XcmsColor*		/* colors_in_out */,
    377     unsigned int	/* ncolors */,
    378     unsigned int	/* index */,
    379     Bool*		/* compression_flags_return */
    380 );
    381 
    382 extern Status XcmsCIELabClipL(
    383     XcmsCCC		/* ccc */,
    384     XcmsColor*		/* colors_in_out */,
    385     unsigned int	/* ncolors */,
    386     unsigned int	/* index */,
    387     Bool*		/* compression_flags_return */
    388 );
    389 
    390 extern Status XcmsCIELabClipLab(
    391     XcmsCCC		/* ccc */,
    392     XcmsColor*		/* colors_in_out */,
    393     unsigned int	/* ncolors */,
    394     unsigned int	/* index */,
    395     Bool*		/* compression_flags_return */
    396 );
    397 
    398 extern Status XcmsCIELabQueryMaxC (
    399     XcmsCCC		/* ccc */,
    400     XcmsFloat		/* hue_angle */,
    401     XcmsFloat		/* L_star */,
    402     XcmsColor*		/* color_return */
    403 );
    404 
    405 extern Status XcmsCIELabQueryMaxL (
    406     XcmsCCC		/* ccc */,
    407     XcmsFloat		/* hue_angle */,
    408     XcmsFloat		/* chroma */,
    409     XcmsColor*		/* color_return */
    410 );
    411 
    412 extern Status XcmsCIELabQueryMaxLC (
    413     XcmsCCC		/* ccc */,
    414     XcmsFloat		/* hue_angle */,
    415     XcmsColor*		/* color_return */
    416 );
    417 
    418 extern Status XcmsCIELabQueryMinL (
    419     XcmsCCC		/* ccc */,
    420     XcmsFloat		/* hue_angle */,
    421     XcmsFloat		/* chroma */,
    422     XcmsColor*		/* color_return */
    423 );
    424 
    425 extern Status XcmsCIELabToCIEXYZ (
    426     XcmsCCC		/* ccc */,
    427     XcmsColor*		/* white_point */,
    428     XcmsColor*		/* colors */,
    429     unsigned int	/* ncolors */
    430 );
    431 
    432 extern Status XcmsCIELabWhiteShiftColors(
    433     XcmsCCC		/* ccc */,
    434     XcmsColor*		/* initial_white_point*/,
    435     XcmsColor*		/* target_white_point*/,
    436     XcmsColorFormat	/* target_format */,
    437     XcmsColor*		/* colors_in_out */,
    438     unsigned int	/* ncolors */,
    439     Bool*		/* compression_flags_return */
    440 );
    441 
    442 extern Status XcmsCIELuvClipL(
    443     XcmsCCC		/* ccc */,
    444     XcmsColor*		/* colors_in_out */,
    445     unsigned int	/* ncolors */,
    446     unsigned int	/* index */,
    447     Bool*		/* compression_flags_return */
    448 );
    449 
    450 extern Status XcmsCIELuvClipLuv(
    451     XcmsCCC		/* ccc */,
    452     XcmsColor*		/* colors_in_out */,
    453     unsigned int	/* ncolors */,
    454     unsigned int	/* index */,
    455     Bool*		/* compression_flags_return */
    456 );
    457 
    458 extern Status XcmsCIELuvClipuv(
    459     XcmsCCC		/* ccc */,
    460     XcmsColor*		/* colors_in_out */,
    461     unsigned int	/* ncolors */,
    462     unsigned int	/* index */,
    463     Bool*		/* compression_flags_return */
    464 );
    465 
    466 extern Status XcmsCIELuvQueryMaxC (
    467     XcmsCCC		/* ccc */,
    468     XcmsFloat		/* hue_angle */,
    469     XcmsFloat		/* L_star */,
    470     XcmsColor*		/* color_return */
    471 );
    472 
    473 extern Status XcmsCIELuvQueryMaxL (
    474     XcmsCCC		/* ccc */,
    475     XcmsFloat		/* hue_angle */,
    476     XcmsFloat		/* chroma */,
    477     XcmsColor*		/* color_return */
    478 );
    479 
    480 extern Status XcmsCIELuvQueryMaxLC (
    481     XcmsCCC		/* ccc */,
    482     XcmsFloat		/* hue_angle */,
    483     XcmsColor*		/* color_return */
    484 );
    485 
    486 extern Status XcmsCIELuvQueryMinL (
    487     XcmsCCC		/* ccc */,
    488     XcmsFloat		/* hue_angle */,
    489     XcmsFloat		/* chroma */,
    490     XcmsColor*		/* color_return */
    491 );
    492 
    493 extern Status XcmsCIELuvToCIEuvY (
    494     XcmsCCC		/* ccc */,
    495     XcmsColor*		/* white_point */,
    496     XcmsColor*		/* colors */,
    497     unsigned int	/* ncolors */
    498 );
    499 
    500 extern Status XcmsCIELuvWhiteShiftColors(
    501     XcmsCCC		/* ccc */,
    502     XcmsColor*		/* initial_white_point*/,
    503     XcmsColor*		/* target_white_point*/,
    504     XcmsColorFormat	/* target_format */,
    505     XcmsColor*		/* colors_in_out */,
    506     unsigned int	/* ncolors */,
    507     Bool*		/* compression_flags_return */
    508 );
    509 
    510 extern Status XcmsCIEXYZToCIELab (
    511     XcmsCCC		/* ccc */,
    512     XcmsColor*		/* white_point */,
    513     XcmsColor*		/* colors */,
    514     unsigned int	/* ncolors */
    515 );
    516 
    517 extern Status XcmsCIEXYZToCIEuvY (
    518     XcmsCCC		/* ccc */,
    519     XcmsColor*		/* white_point */,
    520     XcmsColor*		/* colors */,
    521     unsigned int	/* ncolors */
    522 );
    523 
    524 extern Status XcmsCIEXYZToCIExyY (
    525     XcmsCCC		/* ccc */,
    526     XcmsColor*		/* white_point */,
    527     XcmsColor*		/* colors */,
    528     unsigned int	/* ncolors */
    529 );
    530 
    531 extern Status XcmsCIEXYZToRGBi (
    532     XcmsCCC		/* ccc */,
    533     XcmsColor*		/* colors */,
    534     unsigned int	/* ncolors */,
    535     Bool*		/* compression_flags_return */
    536 );
    537 
    538 extern Status XcmsCIEuvYToCIELuv (
    539     XcmsCCC		/* ccc */,
    540     XcmsColor*		/* white_point */,
    541     XcmsColor*		/* colors */,
    542     unsigned int	/* ncolors */
    543 );
    544 
    545 extern Status XcmsCIEuvYToCIEXYZ (
    546     XcmsCCC		/* ccc */,
    547     XcmsColor*		/* white_point */,
    548     XcmsColor*		/* colors */,
    549     unsigned int	/* ncolors */
    550 );
    551 
    552 extern Status XcmsCIEuvYToTekHVC (
    553     XcmsCCC		/* ccc */,
    554     XcmsColor*		/* white_point */,
    555     XcmsColor*		/* colors */,
    556     unsigned int	/* ncolors */
    557 );
    558 
    559 extern Status XcmsCIExyYToCIEXYZ (
    560     XcmsCCC		/* ccc */,
    561     XcmsColor*		/* white_point */,
    562     XcmsColor*		/* colors */,
    563     unsigned int	/* ncolors */
    564 );
    565 
    566 extern XcmsColor *XcmsClientWhitePointOfCCC (
    567     XcmsCCC		/* ccc */
    568 );
    569 
    570 extern Status XcmsConvertColors (
    571     XcmsCCC		/* ccc */,
    572     XcmsColor*		/* colorArry_in_out */,
    573     unsigned int	/* nColors */,
    574     XcmsColorFormat		/* targetFormat */,
    575     Bool*		/* compArry_return */
    576 );
    577 
    578 extern XcmsCCC XcmsCreateCCC (
    579     Display*		/* dpy */,
    580     int			/* screenNumber */,
    581     Visual*		/* visual */,
    582     XcmsColor*		/* clientWhitePt */,
    583     XcmsCompressionProc /* gamutCompProc */,
    584     XPointer		/* gamutCompClientData */,
    585     XcmsWhiteAdjustProc	/* whitePtAdjProc */,
    586     XPointer		/* whitePtAdjClientData */
    587 );
    588 
    589 extern XcmsCCC XcmsDefaultCCC (
    590     Display*		/* dpy */,
    591     int			/* screenNumber */
    592 );
    593 
    594 extern Display *XcmsDisplayOfCCC (
    595     XcmsCCC		/* ccc */
    596 );
    597 
    598 extern XcmsColorFormat XcmsFormatOfPrefix (
    599     char*		/* prefix */
    600 );
    601 
    602 extern void XcmsFreeCCC (
    603     XcmsCCC		/* ccc */
    604 );
    605 
    606 extern Status XcmsLookupColor (
    607     Display*		/* dpy */,
    608     Colormap		/* colormap */,
    609     _Xconst char*	/* color_string */,
    610     XcmsColor*		/* pColor_exact_in_out */,
    611     XcmsColor*		/* pColor_scrn_in_out */,
    612     XcmsColorFormat		/* result_format */
    613 );
    614 
    615 extern char *XcmsPrefixOfFormat (
    616     XcmsColorFormat		/* id */
    617 );
    618 
    619 extern Status XcmsQueryBlack (
    620     XcmsCCC		/* ccc */,
    621     XcmsColorFormat	/* target_format */,
    622     XcmsColor*		/* color_return */
    623 );
    624 
    625 extern Status XcmsQueryBlue (
    626     XcmsCCC		/* ccc */,
    627     XcmsColorFormat	/* target_format */,
    628     XcmsColor*		/* color_return */
    629 );
    630 
    631 extern Status XcmsQueryColor (
    632     Display*		/* dpy */,
    633     Colormap		/* colormap */,
    634     XcmsColor*		/* pColor_in_out */,
    635     XcmsColorFormat		/* result_format */
    636 );
    637 
    638 extern Status XcmsQueryColors (
    639     Display*		/* dpy */,
    640     Colormap		/* colormap */,
    641     XcmsColor*		/* colorArry_in_out */,
    642     unsigned int	/* nColors */,
    643     XcmsColorFormat	/* result_format */
    644 );
    645 
    646 extern Status XcmsQueryGreen (
    647     XcmsCCC		/* ccc */,
    648     XcmsColorFormat	/* target_format */,
    649     XcmsColor*		/* color_return */
    650 );
    651 
    652 extern Status XcmsQueryRed (
    653     XcmsCCC		/* ccc */,
    654     XcmsColorFormat	/* target_format */,
    655     XcmsColor*		/* color_return */
    656 );
    657 
    658 extern Status XcmsQueryWhite (
    659     XcmsCCC		/* ccc */,
    660     XcmsColorFormat	/* target_format */,
    661     XcmsColor*		/* color_return */
    662 );
    663 
    664 extern Status XcmsRGBiToCIEXYZ (
    665     XcmsCCC		/* ccc */,
    666     XcmsColor*		/* colors */,
    667     unsigned int	/* ncolors */,
    668     Bool*		/* compression_flags_return */
    669 );
    670 
    671 extern Status XcmsRGBiToRGB (
    672     XcmsCCC		/* ccc */,
    673     XcmsColor*		/* colors */,
    674     unsigned int	/* ncolors */,
    675     Bool*		/* compression_flags_return */
    676 );
    677 
    678 extern Status XcmsRGBToRGBi (
    679     XcmsCCC		/* ccc */,
    680     XcmsColor*		/* colors */,
    681     unsigned int	/* ncolors */,
    682     Bool*		/* compression_flags_return */
    683 );
    684 
    685 extern int XcmsScreenNumberOfCCC (
    686     XcmsCCC		/* ccc */
    687 );
    688 
    689 extern XcmsColor *XcmsScreenWhitePointOfCCC (
    690     XcmsCCC		/* ccc */
    691 );
    692 
    693 extern XcmsCCC XcmsSetCCCOfColormap(
    694     Display*		/* dpy */,
    695     Colormap		/* colormap */,
    696     XcmsCCC		/* ccc */
    697 );
    698 
    699 extern XcmsCompressionProc XcmsSetCompressionProc (
    700     XcmsCCC		/* ccc */,
    701     XcmsCompressionProc	/* compression_proc */,
    702     XPointer		/* client_data */
    703 );
    704 
    705 extern XcmsWhiteAdjustProc XcmsSetWhiteAdjustProc (
    706     XcmsCCC		/* ccc */,
    707     XcmsWhiteAdjustProc	/* white_adjust_proc */,
    708     XPointer		/* client_data */
    709 );
    710 
    711 extern Status XcmsSetWhitePoint (
    712     XcmsCCC		/* ccc */,
    713     XcmsColor*		/* color */
    714 );
    715 
    716 extern Status XcmsStoreColor (
    717     Display*		/* dpy */,
    718     Colormap		/* colormap */,
    719     XcmsColor*		/* pColor_in */
    720 );
    721 
    722 extern Status XcmsStoreColors (
    723     Display*		/* dpy */,
    724     Colormap		/* colormap */,
    725     XcmsColor*		/* colorArry_in */,
    726     unsigned int	/* nColors */,
    727     Bool*		/* compArry_return */
    728 );
    729 
    730 extern Status XcmsTekHVCClipC(
    731     XcmsCCC		/* ccc */,
    732     XcmsColor*		/* colors_in_out */,
    733     unsigned int	/* ncolors */,
    734     unsigned int	/* index */,
    735     Bool*		/* compression_flags_return */
    736 );
    737 
    738 extern Status XcmsTekHVCClipV(
    739     XcmsCCC		/* ccc */,
    740     XcmsColor*		/* colors_in_out */,
    741     unsigned int	/* ncolors */,
    742     unsigned int	/* index */,
    743     Bool*		/* compression_flags_return */
    744 );
    745 
    746 extern Status XcmsTekHVCClipVC(
    747     XcmsCCC		/* ccc */,
    748     XcmsColor*		/* colors_in_out */,
    749     unsigned int	/* ncolors */,
    750     unsigned int	/* index */,
    751     Bool*		/* compression_flags_return */
    752 );
    753 
    754 extern Status XcmsTekHVCQueryMaxC (
    755     XcmsCCC		/* ccc */,
    756     XcmsFloat		/* hue */,
    757     XcmsFloat		/* value */,
    758     XcmsColor*		/* color_return */
    759 );
    760 
    761 extern Status XcmsTekHVCQueryMaxV (
    762     XcmsCCC		/* ccc */,
    763     XcmsFloat		/* hue */,
    764     XcmsFloat		/* chroma */,
    765     XcmsColor*		/* color_return */
    766 );
    767 
    768 extern Status XcmsTekHVCQueryMaxVC (
    769     XcmsCCC		/* ccc */,
    770     XcmsFloat		/* hue */,
    771     XcmsColor*		/* color_return */
    772 );
    773 
    774 extern Status XcmsTekHVCQueryMaxVSamples (
    775     XcmsCCC		/* ccc */,
    776     XcmsFloat		/* hue */,
    777     XcmsColor*		/* colors_return */,
    778     unsigned int	/* nsamples */
    779 );
    780 
    781 extern Status XcmsTekHVCQueryMinV (
    782     XcmsCCC		/* ccc */,
    783     XcmsFloat		/* hue */,
    784     XcmsFloat		/* chroma */,
    785     XcmsColor*		/* color_return */
    786 );
    787 
    788 extern Status XcmsTekHVCToCIEuvY (
    789     XcmsCCC		/* ccc */,
    790     XcmsColor*		/* white_point */,
    791     XcmsColor*		/* colors */,
    792     unsigned int	/* ncolors */
    793 );
    794 
    795 extern Status XcmsTekHVCWhiteShiftColors(
    796     XcmsCCC		/* ccc */,
    797     XcmsColor*		/* initial_white_point*/,
    798     XcmsColor*		/* target_white_point*/,
    799     XcmsColorFormat	/* target_format */,
    800     XcmsColor*		/* colors_in_out */,
    801     unsigned int	/* ncolors */,
    802     Bool*		/* compression_flags_return */
    803 );
    804 
    805 extern Visual *XcmsVisualOfCCC (
    806     XcmsCCC		/* ccc */
    807 );
    808 
    809 #ifdef __clang__
    810 #pragma clang diagnostic pop
    811 #endif
    812 
    813 _XFUNCPROTOEND
    814 
    815 #endif /* _X11_XCMS_H_ */
    816