summaryrefslogtreecommitdiff
path: root/xts5/Xopen/XAllocNamedColor.m
diff options
context:
space:
mode:
Diffstat (limited to 'xts5/Xopen/XAllocNamedColor.m')
-rw-r--r--xts5/Xopen/XAllocNamedColor.m1007
1 files changed, 1007 insertions, 0 deletions
diff --git a/xts5/Xopen/XAllocNamedColor.m b/xts5/Xopen/XAllocNamedColor.m
new file mode 100644
index 00000000..174d10fb
--- /dev/null
+++ b/xts5/Xopen/XAllocNamedColor.m
@@ -0,0 +1,1007 @@
+Copyright (c) 2005 X.Org Foundation L.L.C.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+>># Project: VSW5
+>>#
+>># File: xts5/Xopen/XAllocNamedColor.m
+>>#
+>># Description:
+>># Tests for XAllocNamedColor()
+>>#
+>># Modifications:
+>># $Log: allcnmdclr.m,v $
+>># Revision 1.2 2005-11-03 08:44:00 jmichael
+>># clean up all vsw5 paths to use xts5 instead.
+>>#
+>># Revision 1.1.1.2 2005/04/15 14:05:39 anderson
+>># Reimport of the base with the legal name in the copyright fixed.
+>>#
+>># Revision 8.0 1998/12/23 23:36:01 mar
+>># Branch point for Release 5.0.2
+>>#
+>># Revision 7.0 1998/10/30 22:58:47 mar
+>># Branch point for Release 5.0.2b1
+>>#
+>># Revision 6.0 1998/03/02 05:27:14 tbr
+>># Branch point for Release 5.0.1
+>>#
+>># Revision 5.0 1998/01/26 03:23:47 tbr
+>># Branch point for Release 5.0.1b1
+>>#
+>># Revision 4.0 1995/12/15 09:14:55 tbr
+>># Branch point for Release 5.0.0
+>>#
+>># Revision 3.1 1995/12/15 01:18:22 andy
+>># Prepare for GA Release
+>>#
+
+/*
+ * SCCS: @(#) allcnmdclr.m Rel 1.10 (12/10/91)
+ *
+ * UniSoft Ltd., London, England
+ *
+ * (C) Copyright 1991 X/Open Company Limited
+ *
+ * All rights reserved. No part of this source code may be reproduced,
+ * stored in a retrieval system, or transmitted, in any form or by any
+ * means, electronic, mechanical, photocopying, recording or otherwise,
+ * except as stated in the end-user licence agreement, without the prior
+ * permission of the copyright owners.
+ *
+ * X/Open and the 'X' symbol are trademarks of X/Open Company Limited in
+ * the UK and other countries.
+ */
+>>TITLE XAllocNamedColor Xopen
+Status
+XAllocNamedColor(display, colormap, color_name, screen_def_return, exact_def_return)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+char *color_name = "";
+XColor *screen_def_return = &dummycol;
+XColor *exact_def_return = &dummycol;
+>>EXTERN
+
+XColor dummycol;
+
+static char *convertname(s)
+char *s;
+{
+ char *res;
+ char *rp;
+ char *cp = s;
+ int len = strlen(s);
+
+ if(s == (char *) NULL)
+ return((char *) NULL);
+
+ if((res = rp = (char*) malloc(len + 1)) == (char *) NULL) {
+ delete("Malloc returned NULL.");
+ return((char *) NULL);
+ }
+
+ while(*cp == ' ')
+ cp++;
+
+ *rp++ = toupper(*cp++);
+ while(*cp) {
+ if(*cp == ' ') {
+ while(*cp == ' ')
+ cp++;
+ if(*cp)
+ *rp++ = toupper(*cp++);
+ } else
+ *rp++ = *cp++;
+ }
+
+ *rp = '\0';
+ return(res);
+}
+
+>>ASSERTION Good A
+When a colour name in the table is recognised on a call to xname,
+then all other colour names on the same line of the table
+are also recognised on another call to xname
+using the same
+.A display
+and
+.A colormap ,
+and the same values are returned by each call to xname in the
+.M red ,
+.M green
+and
+.M blue
+components of the
+.S XColor
+structures named by the
+.A exact_def_return
+argument and
+.A screen_def_return
+arguments.
+.tL "Set" "Color name(s)"
+.tL "M" "gray" "grey"
+.tL "M" "dark gray" "dark grey"
+.tL "X" "dark slate gray" "dark slate grey"
+.tL "X" "dim gray" "dim grey"
+.tL "X" "light gray" "light grey"
+>>STRATEGY
+For each supported visual type:
+ Create a colourmap of that type using XCreateColormap.
+ For each equivalent colour name:
+ Obtain the rgb values for the colour.
+ Verify that the exact rgb values are identical.
+ Verify that the supported rbg values are identical.
+ Free the allocated colourmap cell using XFreeColors.
+>>CODE
+int i;
+int firstunsupported;
+int secondunsupported;
+XVisualInfo *vp;
+Status status;
+XColor exactcol, screencol;
+XColor exactcol2, screencol2;
+unsigned long vmask;
+static char *p[5][2] =
+ {{ "gray", "grey"},
+ { "dark gray", "dark grey"},
+ { "dark slate gray", "dark slate grey"},
+ { "dim gray", "dim grey"},
+ { "light gray", "light grey"}};
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ } else
+ CHECK;
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ for(i=0; i< NELEM(p); i++) {
+
+ firstunsupported = secondunsupported = 0;
+ trace("Compare \"%s\" against \"%s\".", p[i][0], p[i][1]);
+
+ exact_def_return = &exactcol;
+ screen_def_return = &screencol;
+ color_name= p[i][0];
+
+ status = XCALL;
+
+
+ if( status == (Status) 0) {
+ trace("Colour \"%s\" is not supported.", color_name);
+ firstunsupported = 1;
+ } else
+ XFreeColors(display, colormap, &exactcol.pixel, 1, (unsigned long)0);
+
+ exact_def_return = &exactcol2;
+ screen_def_return = &screencol2;
+ color_name= p[i][1];
+
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ trace("Colour \"%s\" is not supported.", color_name);
+ secondunsupported = 1;
+ } else
+ XFreeColors(display, colormap, &(exactcol2.pixel), 1, (unsigned long)0);
+
+ if(firstunsupported && secondunsupported) {
+ CHECK;
+ CHECK;
+ CHECK;
+ continue;
+ }
+
+ if(firstunsupported && !secondunsupported) {
+ report("Colour %s is unsupported.", p[i][0]);
+ report("Colour %s is supported.", p[i][1]);
+ FAIL;
+ } else if(!firstunsupported && secondunsupported) {
+ report("Colour %s is unsupported.", p[i][1]);
+ report("Colour %s is supported.", p[i][0]);
+ FAIL;
+ } else {
+ CHECK;
+
+ if((exactcol2.red != exactcol.red) ||
+ (exactcol2.green != exactcol.green) ||
+ (exactcol2.blue != exactcol.blue) ) {
+ report("Colour names \"%s\" and \"%s\" do not yield the same exact rgb values.",
+ p[i][0], p[i][1]);
+ report("( r %u g %u b %u instead of r %u g %u b %u respectively.)",
+ exactcol.red, exactcol.green, exactcol.blue,
+ exactcol2.red, exactcol2.green, exactcol2.blue);
+ FAIL;
+ } else
+ CHECK;
+
+ if((screencol2.red != screencol.red) ||
+ (screencol2.green != screencol.green) ||
+ (screencol2.blue != screencol.blue) ) {
+ report("Colour names \"%s\" and \"%s\" do not yield the same supported rgb values.",
+ p[i][0], p[i][1]);
+ report("( r %u g %u b %u instead of r %u g %u b %u respectively.)",
+ screencol.red, screencol.green, screencol.blue,
+ screencol2.red, screencol2.green, screencol2.blue);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ }
+ }
+
+ CHECKPASS(1 + 3 * nsupvis() * NELEM(p) );
+
+>>ASSERTION Good A
+When a colour name in the table is recognised on a call to xname,
+and a colour name on a different line of the table
+is also recognised on another call to xname
+using the same
+.A display
+and
+.A colormap ,
+then distinct values are returned by each call to xname in the
+.M red ,
+.M green
+and
+.M blue
+components of the
+.S XColor
+structures named by the
+.A exact_def_return
+argument and
+.A screen_def_return
+arguments.
+.tL "Set" "Color name(s)"
+.tL "A" "black"
+.tL "A" "white"
+.tL "C" "blue"
+.tL "C" "cyan"
+.tL "C" "green"
+.tL "C" "magenta"
+.tL "C" "red"
+.tL "C" "yellow"
+.tL "M" "gray" "grey"
+.tL "M" "dark gray" "dark grey"
+.tL "V" "dark blue"
+.tL "V" "brown"
+.tL "V" "dark cyan"
+.tL "V" "dark green"
+.tL "V" "dark magenta"
+.tL "V" "dark red"
+.tL "X" "medium blue"
+.tL "X" "midnight blue"
+.tL "X" "navy blue"
+.tL "X" "sky blue"
+.tL "X" "coral"
+.tL "X" "gold"
+.tL "X" "dark slate gray" "dark slate grey"
+.tL "X" "dim gray" "dim grey"
+.tL "X" "light gray" "light grey"
+.tL "X" "light green"
+.tL "X" "forest green"
+.tL "X" "lime green"
+.tL "X" "pale green"
+.tL "X" "spring green"
+.tL "X" "maroon"
+.tL "X" "orange"
+.tL "X" "pink"
+.tL "X" "indian red"
+.tL "X" "orange red"
+.tL "X" "violet red"
+.tL "X" "salmon"
+.tL "X" "sienna"
+.tL "X" "tan"
+.tL "X" "turquoise"
+.tL "X" "violet"
+.tL "X" "blue violet"
+.tL "X" "wheat"
+>>STRATEGY
+For each supported visual:
+ Create a colourmap of that type using XCreateColormap.
+ For each pair of colour names in the table:
+ Obtain the rgb values corresponding to the name using xname.
+ Verify that the rgb triples are different.
+ Free the allocated colourmap cell using XFreeColors.
+>>EXTERN
+static int
+compare(col1, col2, name1, name2, eflag)
+XColor *col1;
+XColor *col2;
+char *name1;
+char *name2;
+int eflag;
+{
+
+ if((col2->red == col1->red) &&
+ (col2->green == col1->green) &&
+ (col2->blue == col1->blue) ) {
+ report("Colour names \"%s\" and \"%s\" yield the same %s rgb values.",
+ name1, name2, eflag ? "exact" : "supported");
+ trace("%s = r %u g %u b %u, %s = r %u g %u b %u",
+ name1, col1->red, col1->green, col1->blue,
+ name2, col2->red, col2->green, col2->blue);
+ return(0);
+ }
+ return(1);
+}
+>>CODE
+XColor scols[43];
+XColor ecols[43];
+XColor scols2[5];
+XColor ecols2[5];
+Status status;
+int i, j;
+unsigned long vmask;
+XVisualInfo *vp;
+static char *list[43] = {
+ "gray",
+ "dark gray",
+ "dark slate gray",
+ "dim gray",
+ "light gray",
+ "black",
+ "white",
+ "blue",
+ "cyan",
+ "green",
+ "magenta",
+ "red",
+ "yellow",
+ "dark blue",
+ "brown",
+ "dark cyan",
+ "dark green",
+ "dark magenta",
+ "dark red",
+ "medium blue",
+ "midnight blue",
+ "navy blue",
+ "sky blue",
+ "coral",
+ "gold",
+ "light green",
+ "forest green",
+ "lime green",
+ "pale green",
+ "spring green",
+ "maroon",
+ "orange",
+ "pink",
+ "indian red",
+ "orange red",
+ "violet red",
+ "salmon",
+ "sienna",
+ "tan",
+ "turquoise",
+ "violet",
+ "blue violet",
+ "wheat"};
+static char *list2[5] = {
+ "grey",
+ "dark grey",
+ "dark slate grey",
+ "dim grey",
+ "light grey"};
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ } else
+ CHECK;
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ for(i=0; i<NELEM(list); i++) {
+
+ color_name = list[i];
+ exact_def_return = &ecols[i];
+ screen_def_return = &scols[i];
+
+ status = XCALL;
+
+ if(status == 0) {
+ trace("Colour \"%s\" is not supported.", color_name);
+ ecols[i].flags = 0;
+ } else {
+ XFreeColors(display, colormap, &ecols[i].pixel, 1, (unsigned long)0);
+ ecols[i].flags = 1;
+ }
+
+ if(i==0)
+ CHECK;
+ }
+
+ /*
+ * test all pairs of colours - n!
+ * 2!(n-2)!
+ */
+ for(i=0; i<NELEM(list)-1; i++) {
+ for(j=i+1; j<NELEM(list); j++) {
+ if((ecols[i].flags) && (ecols[j].flags)) {
+ if(compare(&ecols[i], &ecols[j], list[i], list[j], 1) == 0)
+ FAIL;
+ if(compare(&scols[i], &scols[j], list[i], list[j], 0) == 0)
+ FAIL;
+ }
+ }
+
+ if(i==0)
+ CHECK;
+ }
+
+ for(i=0; i<NELEM(list2); i++) {
+
+ color_name = list2[i];
+ exact_def_return = &ecols2[i];
+ screen_def_return = &scols2[i];
+
+ status = XCALL;
+
+ if(status == 0) {
+ trace("Colour \"%s\" is not supported.", color_name);
+ ecols2[i].flags = 0;
+ } else {
+ XFreeColors(display, colormap, &ecols[i].pixel, 1, (unsigned long)0);
+ ecols2[i].flags = 1;
+ }
+
+ if(i==0)
+ CHECK;
+ }
+
+ for(i=0; i<NELEM(list2)-1; i++) {
+ for(j=i+5; j<NELEM(list); j++) {
+ if((ecols2[i].flags) && (ecols[j].flags)) {
+ if(compare(&ecols2[i], &ecols[j], list2[i], list[j], 1) == 0)
+ FAIL;
+ if(compare(&scols2[i], &scols[j], list2[i], list[j], 0) == 0)
+ FAIL;
+ }
+ }
+
+ if(i==0)
+ CHECK;
+
+ }
+ }
+
+ CHECKPASS(1 + nsupvis() * 4);
+
+>>ASSERTION Good A
+When a colour name in the table is recognised on a call to xname,
+then the colour name with the first letter of each word in upper-case
+and with no spaces between words
+is also recognised on another call to xname
+using the same
+.A display
+and
+.A colormap ,
+and the same values are returned by each call to xname in the
+.M red ,
+.M green
+and
+.M blue
+components of the
+.S XColor
+structures named by the
+.A exact_def_return
+argument and
+.A screen_def_return
+arguments.
+.tL "Set" "Color name(s)"
+.tL "A" "black"
+.tL "A" "white"
+.tL "C" "blue"
+.tL "C" "cyan"
+.tL "C" "green"
+.tL "C" "magenta"
+.tL "C" "red"
+.tL "C" "yellow"
+.tL "M" "gray" "grey"
+.tL "M" "dark gray" "dark grey"
+.tL "V" "dark blue"
+.tL "V" "brown"
+.tL "V" "dark cyan"
+.tL "V" "dark green"
+.tL "V" "dark magenta"
+.tL "V" "dark red"
+.tL "X" "medium blue"
+.tL "X" "midnight blue"
+.tL "X" "navy blue"
+.tL "X" "sky blue"
+.tL "X" "coral"
+.tL "X" "gold"
+.tL "X" "dark slate gray" "dark slate grey"
+.tL "X" "dim gray" "dim grey"
+.tL "X" "light gray" "light grey"
+.tL "X" "light green"
+.tL "X" "forest green"
+.tL "X" "lime green"
+.tL "X" "pale green"
+.tL "X" "spring green"
+.tL "X" "maroon"
+.tL "X" "orange"
+.tL "X" "pink"
+.tL "X" "indian red"
+.tL "X" "orange red"
+.tL "X" "violet red"
+.tL "X" "salmon"
+.tL "X" "sienna"
+.tL "X" "tan"
+.tL "X" "turquoise"
+.tL "X" "violet"
+.tL "X" "blue violet"
+.tL "X" "wheat"
+>>STRATEGY
+For each supported visual type:
+ Create a colourmap of that type using XCreateColormap.
+ For each equivalent colour name:
+ Obtain the rgb values for the colour.
+ Verify that the exact rgb values are identical.
+ Verify that the supported rbg values are identical.
+ Free the allocated colourmap cell using XFreeColors.
+>>CODE
+int i;
+XVisualInfo *vp;
+Status status;
+XColor exactcol, screencol;
+XColor exactcol2, screencol2;
+unsigned long vmask;
+static char *list[] = {
+ "black",
+ "white",
+ "blue",
+ "cyan",
+ "green",
+ "magenta",
+ "red",
+ "yellow",
+ "gray",
+ "grey",
+ "dark gray",
+ "dark grey",
+ "dark blue",
+ "brown",
+ "dark cyan",
+ "dark green",
+ "dark magenta",
+ "dark red",
+ "medium blue",
+ "midnight blue",
+ "navy blue",
+ "sky blue",
+ "coral",
+ "gold",
+ "dark slate gray",
+ "dark slate grey",
+ "dim gray",
+ "dim grey",
+ "light gray",
+ "light grey",
+ "light green",
+ "forest green",
+ "lime green",
+ "pale green",
+ "spring green",
+ "maroon",
+ "orange",
+ "pink",
+ "indian red",
+ "orange red",
+ "violet red",
+ "salmon",
+ "sienna",
+ "tan",
+ "turquoise",
+ "violet",
+ "blue violet",
+ "wheat" };
+
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ for(i=0; i< NELEM(list); i++) {
+
+ color_name = list[i];
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ exact_def_return = &exactcol;
+ screen_def_return = &screencol;
+ status = XCALL;
+
+ if(status == (Status) 0) {
+ trace("Colour name \"%s\" is not supported.", color_name);
+ CHECK; CHECK;CHECK;
+ } else {
+ XFreeColors(display, colormap, &exactcol.pixel, 1, (unsigned long)0);
+
+ color_name = convertname(list[i]);
+ exact_def_return = &exactcol2;
+ screen_def_return = &screencol2;
+ status = XCALL;
+
+ if(status == 0) {
+ report("Colour name \"%s\" is supported but \"%s\" is not.", list[i], color_name);
+ FAIL;
+ } else {
+
+ XFreeColors(display, colormap, &exactcol.pixel, 1, (unsigned long)0);
+ CHECK;
+
+ if((exactcol2.red != exactcol.red) ||
+ (exactcol2.green != exactcol.green) ||
+ (exactcol2.blue != exactcol.blue) ) {
+ report("Colour names \"%s\" and \"%s\" do not yield the same exact rgb values.",
+ list[i], color_name);
+ report("( r %u g %u b %u instead of r %u g %u b %u respectively.)",
+ exactcol.red, exactcol.green, exactcol.blue,
+ exactcol2.red, exactcol2.green, exactcol2.blue);
+ FAIL;
+ } else
+ CHECK;
+
+ if((screencol2.red != screencol.red) ||
+ (screencol2.green != screencol.green) ||
+ (screencol2.blue != screencol.blue) ) {
+ report("Colour names \"%s\" and \"%s\" do not yield the same supported rgb values.",
+ list[i], color_name);
+ report("( r %u g %u b %u instead of r %u g %u b %u respectively.)",
+ screencol.red, screencol.green, screencol.blue,
+ screencol2.red, screencol2.green, screencol2.blue);
+ FAIL;
+ } else
+ CHECK;
+
+
+ }
+
+ if(!isdeleted())
+ free(color_name);
+
+ }
+ }
+
+ }
+
+ CHECKPASS(nsupvis() * 3 * NELEM(list));
+
+>>ASSERTION Good A
+All colour names in the table which are in set A are recognised
+on a call to xname.
+.tL "Set" "Color name(s)"
+.tL "A" "black"
+.tL "A" "white"
+>>STRATEGY
+For each supported visual type:
+ Create a colourmap of that type using XCreateColormap.
+ For the colournames in the table:
+ Obtain the rgb values for the colour using xname.
+ Verify that the call did not return 0.
+ Free the allocated colourmap cell using XFreeColors.
+>>CODE
+int i;
+Status status;
+XVisualInfo *vp;
+XColor exactcol;
+unsigned long vmask;
+static char *list[] = { "black", "white" };
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ } else
+ CHECK;
+
+ exact_def_return = &exactcol;
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+
+ for(i=0; i< NELEM(list); i++) {
+
+ color_name = list[i];
+ status = XCALL;
+
+ if(status == 0) {
+ report("Colour name \"%s\" is not supported.", list[i]);
+ FAIL;
+ } else {
+ XFreeColors(display, colormap, &exactcol.pixel, 1, (unsigned long)0);
+ CHECK;
+ }
+ }
+ }
+
+ CHECKPASS(1 + nsupvis() * NELEM(list));
+
+>>ASSERTION Good C
+If any of the visual classes
+.S GrayScale
+or
+.S StaticGray
+support colourmaps with at least four colour cells:
+When the visual type of the
+.A colormap
+argument is
+.S GrayScale
+or
+.S StaticGray ,
+and
+.A colormap
+has at least four colour cells,
+then all colour names in the table which are in set M are recognised
+on a call to xname.
+.tL "Set" "Color name(s)"
+.tL "M" "gray" "grey"
+.tL "M" "dark gray" "dark grey"
+>>STRATEGY
+If the server supports GrayScale or StaticGray with colourmap size greater than 4:
+ For those supported visuals:
+ Create a colourmap using XCreateColormap.
+ For each colour name in the table:
+ Obtain the rgb values for the for the colour using xname.
+ Verify that the call did not return 0.
+ Free the allocated colourmap cell using XFreeColors.
+>>CODE
+int i;
+Status status;
+XVisualInfo *vp;
+XColor exactcol;
+unsigned long vmask;
+static char *list[] = { "gray", "grey", "dark gray", "dark grey" };
+
+
+ if( (vmask = visualsupported(display, 1L<<GrayScale)) != 0L) {
+
+ resetsupvis(vmask);
+ (void) nextsupvis(&vp);
+ if(vp->colormap_size < 4)
+ vmask = 0L;
+ }
+
+
+ if( (vmask |= visualsupported(display, 1L<<StaticGray)) | StaticGray) {
+
+ resetsupvis(1L<<StaticGray);
+ (void) nextsupvis(&vp);
+ if(vp->colormap_size < 4)
+ vmask &= ~(1L<<StaticGray);
+ }
+
+ if(vmask == 0L) {
+ unsupported("StaticGray and GrayScale visuals are not supported.");
+ return;
+ } else
+ CHECK;
+
+ exact_def_return = &exactcol;
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ for(i=0; i< NELEM(list); i++) {
+
+ color_name = list[i];
+ status = XCALL;
+
+ if(status == 0L) {
+ report("Colour name \"%s\" is not supported.", color_name);
+ FAIL;
+ } else {
+ XFreeColors(display, colormap, &exactcol.pixel, 1, (unsigned long)0);
+ CHECK;
+ }
+ }
+ }
+
+ CHECKPASS(1 + nsupvis()* NELEM(list));
+
+>>ASSERTION Good C
+If any of the visual classes
+.S PseudoColor ,
+.S StaticColor ,
+.S TrueColor ,
+or
+.S DirectColor
+are supported:
+When the visual type of the
+.A colormap
+argument is
+.S PseudoColor ,
+.S StaticColor ,
+.S TrueColor ,
+or
+.S DirectColor ,
+then all colour names in the table which are in set C are recognised
+on a call to xname.
+.tL "Set" "Color name(s)"
+.tL "C" "blue"
+.tL "C" "cyan"
+.tL "C" "green"
+.tL "C" "magenta"
+.tL "C" "red"
+.tL "C" "yellow"
+>>STRATEGY
+For each supported visual type from PseudoColor, StaticColor, TrueColor and DirectColor:
+ Create a colourmap of that type using XCreateColormap.
+ For the colournames in the table:
+ Obtain the rgb values for the colour using xname.
+ Verify that the call did not return 0.
+ Free the allocated colourmap cell using XFreeColors.
+>>CODE
+int i;
+unsigned long vmask = (1L<<PseudoColor|1L<<StaticColor|1L<<TrueColor|1L<<DirectColor);
+Status status;
+XVisualInfo *vp;
+XColor exactcol;
+static char *list[] = { "blue", "cyan", "green", "magenta", "red", "yellow" };
+
+
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ unsupported("Required visual types are not supported.");
+ return;
+ } else
+ CHECK;
+
+
+ exact_def_return = &exactcol;
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ for(i=0; i< NELEM(list); i++) {
+
+ color_name = list[i];
+ status = XCALL;
+
+ if(status == 0L) {
+ report("Colour name \"%s\" is not supported.", color_name);
+ FAIL;
+ } else {
+ XFreeColors(display, colormap, &exactcol.pixel, 1, (unsigned long)0);
+ CHECK;
+ }
+ }
+ }
+
+ CHECKPASS(nsupvis() * NELEM(list) + 1);
+
+>>ASSERTION Good A
+When a colour name in the table which is in set M, V or X
+is recognised on a call to xname,
+then all other colour names in the table which are in set C, M, or V
+are also recognised on another call to xname.
+.tL "Set" "Color name(s)"
+.tL "C" "blue"
+.tL "C" "cyan"
+.tL "C" "green"
+.tL "C" "magenta"
+.tL "C" "red"
+.tL "C" "yellow"
+.tL "M" "gray" "grey"
+.tL "M" "dark gray" "dark grey"
+.tL "V" "dark blue"
+.tL "V" "brown"
+.tL "V" "dark cyan"
+.tL "V" "dark green"
+.tL "V" "dark magenta"
+.tL "V" "dark red"
+.tL "X" "medium blue"
+.tL "X" "midnight blue"
+.tL "X" "navy blue"
+.tL "X" "sky blue"
+.tL "X" "coral"
+.tL "X" "gold"
+.tL "X" "dark slate gray" "dark slate grey"
+.tL "X" "dim gray" "dim grey"
+.tL "X" "light gray" "light grey"
+.tL "X" "light green"
+.tL "X" "forest green"
+.tL "X" "lime green"
+.tL "X" "pale green"
+.tL "X" "spring green"
+.tL "X" "maroon"
+.tL "X" "orange"
+.tL "X" "pink"
+.tL "X" "indian red"
+.tL "X" "orange red"
+.tL "X" "violet red"
+.tL "X" "salmon"
+.tL "X" "sienna"
+.tL "X" "tan"
+.tL "X" "turquoise"
+.tL "X" "violet"
+.tL "X" "blue violet"
+.tL "X" "wheat"
+>>STRATEGY
+If a colourname in sets M, V or X causes xname to return non-zero:
+ For each supported visual:
+ Verify that all the colour names in C, M and V also cause xname to return non-zero:
+ Free the allocated colourmap cell using XFreeColors.
+>>CODE
+XVisualInfo *vp;
+unsigned long vmask;
+int i;
+int j;
+int supported = 0;
+int unsupported = 0;
+Status status;
+XColor exactcol;
+static char *MVX[] = { "gray", "grey", "dark gray","dark grey","dark blue","brown","dark cyan","dark green","dark magenta",
+ "dark red","medium blue","midnight blue","navy blue","sky blue","coral","gold","dark slate gray",
+ "dark slate grey","dim gray","dim grey","light gray","light grey", "light green", "forest green",
+ "lime green","pale green","spring green","maroon","orange","pink","indian red","orange red",
+ "violet red","salmon","sienna","tan","turquoise","violet","blue violet","wheat" };
+static char *CMV[] = { "blue","cyan","green","magenta","red","yellow","gray","grey","dark gray","dark grey",
+ "dark blue","brown","dark cyan","dark green","dark magenta","dark red"};
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ } else
+ CHECK;
+
+ exact_def_return = &exactcol;
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ i = 0;
+ supported = 0;
+ color_name = MVX[i];
+ status = XCALL;
+
+ if(status != 0) {
+ supported++;
+ XFreeColors(display, colormap, &exactcol.pixel, 1, (unsigned long)0);
+ break;
+ } else
+ unsupported++;
+ }
+
+ if(unsupported == NELEM(MVX) && supported == 0) {
+ PASS;
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ for(j=0; j<NELEM(CMV); j++) {
+ color_name = CMV[j];
+ status = XCALL;
+ if(status == (Status) 0) {
+ report("Colour name \"%s\" is not supported.", color_name);
+ FAIL;
+ } else {
+ XFreeColors(display, colormap, &exactcol.pixel, 1, (unsigned long)0);
+ CHECK;
+ }
+ }
+ }
+
+ CHECKPASS(NELEM(CMV) * nsupvis() + 1);
+