ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/nff2rad.c
Revision: 2.5
Committed: Sat Feb 22 02:07:23 2003 UTC (21 years ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R5
Changes since 2.4: +1 -4 lines
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2 greg 2.5 static const char RCSid[] = "$Id$";
3 greg 1.1 #endif
4     /*
5     * Convert Neutral File Format input to Radiance scene description.
6     *
7     * 12/9/90 Greg Ward
8 greg 2.2 * 02/7/92 Peter Averkamp added X11(MTV)color names &
9     * fixed some lf's for direct import of MTV
10     * source files
11 greg 1.1 */
12    
13     /******************************************************************
14    
15     Since Eric Haines wrote such excellent documentation of his
16     Neutral File Format, I am just going to reprint it here with
17     my added comments in braces {}.
18    
19     Neutral File Format (NFF), by Eric Haines
20    
21     Draft document #1, 10/3/88
22    
23     The NFF (Neutral File Format) is designed as a minimal scene description
24     language. The language was designed in order to test various rendering
25     algorithms and efficiency schemes. It is meant to describe the geometry and
26     basic surface characteristics of objects, the placement of lights, and the
27     viewing frustum for the eye. Some additional information is provided for
28     esthetic reasons (such as the color of the objects, which is not strictly
29     necessary for testing rendering algorithms).
30    
31     Future enhancements include: circle and torus objects, spline surfaces
32     with trimming curves, directional lights, characteristics for positional
33     lights, CSG descriptions, and probably more by the time you read this.
34     Comments, suggestions, and criticisms are all welcome.
35    
36     At present the NFF file format is used in conjunction with the SPD (Standard
37     Procedural Database) software, a package designed to create a variety of
38     databases for testing rendering schemes. The SPD package is available
39     from Netlib and via ftp from drizzle.cs.uoregon.edu. For more information
40     about SPD see "A Proposal for Standard Graphics Environments," IEEE Computer
41     Graphics and Applications, vol. 7, no. 11, November 1987, pp. 3-5.
42    
43     By providing a minimal interface, NFF is meant to act as a simple format to
44     allow the programmer to quickly write filters to move from NFF to the
45     local file format. Presently the following entities are supported:
46     A simple perspective frustum
47     A positional (vs. directional) light source description
48     A background color description
49     A surface properties description
50     Polygon, polygonal patch, cylinder/cone, and sphere descriptions
51    
52     Files are output as lines of text. For each entity, the first line
53     defines its type. The rest of the first line and possibly other lines
54     contain further information about the entity. Entities include:
55    
56     "v" - viewing vectors and angles { optionally creates view file }
57     "l" - positional light location { it's there, but bad to use }
58     "b" - background color { ditto }
59     "f" - object material properties { this is flakey }
60     "c" - cone or cylinder primitive
61     "s" - sphere primitive
62     "p" - polygon primitive
63     "pp" - polygonal patch primitive { interpreted same as p for now }
64    
65     These are explained in depth below: { see conversion routines }
66    
67     ***********************************************************************/
68    
69     #include <stdio.h>
70    
71     char *viewfile = NULL; /* view parameters file */
72    
73     char *progname;
74    
75    
76     main(argc, argv) /* convert NFF file to Radiance */
77     int argc;
78     char *argv[];
79     {
80     int i;
81    
82     progname = argv[0];
83     for (i = 1; i < argc; i++)
84     if (argc-i > 1 && !strcmp(argv[i], "-vf"))
85     viewfile = argv[++i];
86 greg 2.2 else if (!strncmp(argv[i], "-h",2))
87     goto userr;
88 greg 1.1 else
89     break;
90 greg 2.2 if (argc-i > 1)
91 greg 1.1 goto userr;
92 greg 2.2 if (argc-i == 1 && freopen(argv[i], "r", stdin) == NULL) {
93 greg 1.1 perror(argv[i]);
94     exit(1);
95     }
96     init();
97     nff2rad();
98     exit(0);
99     userr:
100     fprintf(stderr, "Usage: %s [-vf viewfile] [input]\n", progname);
101     exit(1);
102     }
103    
104    
105     init() /* spit out initial definitions */
106     {
107     printf("# File created by %s\n", progname);
108     printf("\nvoid light light\n");
109 greg 2.4 printf("0\n0\n3 1e6 1e6 1e6\n");
110 greg 1.1 printf("\nvoid plastic fill\n");
111     printf("0\n0\n5 .5 .5 .5 0 0\n");
112     }
113    
114    
115     nff2rad() /* convert NFF on stdin to Radiance on stdout */
116     {
117     register int c;
118    
119     while ((c = getchar()) != EOF)
120     switch (c) {
121     case ' ': /* white space */
122     case '\t':
123     case '\n':
124     case '\f':
125     case '\r':
126     continue;
127     case '#': /* comment */
128     comment();
129     break;
130     case 'v': /* view point */
131     view();
132     break;
133     case 'l': /* light source */
134     light();
135     break;
136     case 'b': /* background color */
137     background();
138     break;
139     case 'f': /* fill material */
140     fill();
141     break;
142     case 'c': /* cylinder or cone */
143     cone();
144     break;
145     case 's': /* sphere */
146     sphere();
147     break;
148     case 'p': /* polygon or patch */
149     poly();
150     break;
151     default: /* unknown */
152     fprintf(stderr, "%c: unknown NFF primitive\n", c);
153     exit(1);
154     }
155     }
156    
157    
158     /*******************************************
159    
160     Comment. Description:
161     "#" [ string ]
162    
163     Format:
164     # [ string ]
165    
166     As soon as a "#" character is detected, the rest of the line is considered
167     a comment.
168    
169     ******************/
170    
171     comment()
172     {
173     register int c;
174    
175     putchar('#');
176     while ((c = getchar()) != EOF) {
177     putchar(c);
178     if (c == '\n')
179     break;
180     }
181     }
182    
183    
184     /***************************************************
185    
186     Viewpoint location. Description:
187     "v"
188     "from" Fx Fy Fz
189     "at" Ax Ay Az
190     "up" Ux Uy Uz
191     "angle" angle
192     "hither" hither
193     "resolution" xres yres
194    
195     Format:
196    
197     v
198     from %g %g %g
199     at %g %g %g
200     up %g %g %g
201     angle %g
202     hither %g
203     resolution %d %d
204    
205     The parameters are:
206    
207     From: the eye location in XYZ.
208     At: a position to be at the center of the image, in XYZ world
209     coordinates. A.k.a. "lookat".
210     Up: a vector defining which direction is up, as an XYZ vector.
211     Angle: in degrees, defined as from the center of top pixel row to
212     bottom pixel row and left column to right column.
213     Resolution: in pixels, in x and in y.
214    
215     Note that no assumptions are made about normalizing the data (e.g. the
216     from-at distance does not have to be 1). Also, vectors are not
217     required to be perpendicular to each other.
218    
219     For all databases some viewing parameters are always the same:
220     Yon is "at infinity."
221     Aspect ratio is 1.0.
222    
223     A view entity must be defined before any objects are defined (this
224     requirement is so that NFF files can be used by hidden surface machines).
225    
226     ***************/
227    
228     view()
229     {
230     static FILE *fp = NULL;
231     float from[3], at[3], up[3], angle;
232    
233     if (scanf(" from %f %f %f", &from[0], &from[1], &from[2]) != 3)
234     goto fmterr;
235     if (scanf(" at %f %f %f", &at[0], &at[1], &at[2]) != 3)
236     goto fmterr;
237     if (scanf(" up %f %f %f", &up[0], &up[1], &up[2]) != 3)
238     goto fmterr;
239     if (scanf(" angle %f", &angle) != 1)
240     goto fmterr;
241     scanf(" hither %*f");
242     scanf(" resolution %*d %*d");
243     if (viewfile != NULL) {
244     if (fp == NULL && (fp = fopen(viewfile, "a")) == NULL) {
245     perror(viewfile);
246     exit(1);
247     }
248     fprintf(fp,
249     "VIEW= -vp %g %g %g -vd %g %g %g -vu %g %g %g -vh %g -vv %g\n",
250     from[0], from[1], from[2],
251     at[0]-from[0], at[1]-from[1], at[2]-from[2],
252     up[0], up[1], up[2],
253     angle, angle);
254     }
255     return;
256     fmterr:
257     fprintf(stderr, "%s: view syntax error\n", progname);
258     exit(1);
259     }
260    
261    
262     /********************************
263    
264     Positional light. A light is defined by XYZ position. Description:
265     "l" X Y Z
266    
267     Format:
268     l %g %g %g
269    
270     All light entities must be defined before any objects are defined (this
271     requirement is so that NFF files can be used by hidden surface machines).
272     Lights have a non-zero intensity of no particular value [this definition
273     may change soon, with the addition of an intensity and/or color].
274    
275     **************************/
276    
277     light()
278     {
279     static int nlights = 0;
280     register int c;
281     float x, y, z;
282 greg 2.2
283     if (scanf("%f %f %f",&x, &y, &z) != 3) {
284     fprintf(stderr, "%s: light source syntax error\n", progname);
285     exit(1);
286 greg 1.1 }
287     while ((c = getchar()) != EOF && c != '\n')
288     ;
289 greg 2.2 printf("\nlight sphere l%d \n", ++nlights);
290 greg 2.4 printf("0\n0\n4 %g %g %g .01\n", x, y, z);
291 greg 1.1 }
292    
293    
294     /**************************************************
295    
296     Background color. A color is simply RGB with values between 0 and 1:
297     "b" R G B
298    
299     Format:
300     b %g %g %g
301    
302     If no background color is set, assume RGB = {0,0,0}.
303    
304     ********************/
305    
306     background()
307     {
308     float r, g, b;
309 greg 2.2 char colname[50];
310     double cvec[3];
311    
312     if (scanf("%s", colname) != 1) {
313     fprintf(stderr,"%s: background syntax error\n",progname);exit(1);
314     }
315     if(LookupColorByName(colname,cvec)==1){
316     r=cvec[0];g=cvec[1];b=cvec[2];
317     }else{
318     if(sscanf(colname,"%f",&r)!=1 ||
319     scanf("%f %f", &g, &b) !=2) {
320 greg 1.1 fprintf(stderr, "%s: background syntax error\n", progname);
321     exit(1);
322 greg 2.2 }
323 greg 1.1 }
324     printf("\nvoid glow backg_color\n");
325     printf("0\n0\n4 %g %g %g 0\n", r, g, b);
326     printf("\nbackg_color source background\n");
327     printf("0\n0\n4 0 0 1 360\n");
328     }
329    
330    
331     /****************************************************
332    
333     Fill color and shading parameters. Description:
334     "f" red green blue Kd Ks Shine T index_of_refraction
335    
336     Format:
337     f %g %g %g %g %g %g %g %g
338    
339     RGB is in terms of 0.0 to 1.0.
340    
341     Kd is the diffuse component, Ks the specular, Shine is the Phong cosine
342     power for highlights, T is transmittance (fraction of light passed per
343     unit). Usually, 0 <= Kd <= 1 and 0 <= Ks <= 1, though it is not required
344     that Kd + Ks == 1. Note that transmitting objects ( T > 0 ) are considered
345     to have two sides for algorithms that need these (normally objects have
346     one side).
347    
348     The fill color is used to color the objects following it until a new color
349     is assigned.
350    
351     *********************/
352    
353     fill()
354     {
355     float r, g, b, d, s, p, t, n;
356 greg 2.2 char colname[50];
357     double cvec[3];
358    
359     if (scanf("%s", colname) != 1) {
360     fprintf(stderr,"%s: fill syntax error\n",progname);exit(1);
361     }
362     if(LookupColorByName(colname,cvec)==1){
363     r=cvec[0];g=cvec[1];b=cvec[2];
364     }else{
365     if(sscanf(colname,"%f",&r)!=1 ||
366     scanf("%f %f", &g, &b) !=2) {
367     fprintf(stderr, "%s: fill syntax error\n", progname);
368     exit(1);
369     }
370     }
371     if (scanf("%f %f %f %f %f", &d, &s, &p, &t, &n) != 5) {
372 greg 1.1 fprintf(stderr, "%s: fill material syntax error\n", progname);
373     exit(1);
374     }
375     if (p > 1.)
376     p = 1./p;
377     if (t > .001) { /* has transmission */
378 greg 2.4 if (n > 1.1) { /* has index of refraction */
379     printf("\nvoid dielectric fill\n");
380     printf("0\n0\n5 %g %g %g %g 0\n", r, g, b, n);
381     } else { /* transmits w/o refraction */
382     printf("\nvoid trans fill\n");
383     printf("0\n0\n7 %g %g %g %g 0 %g 1\n",
384     r*d, g*d, b*d, s, t);
385     }
386 greg 1.1 } else { /* no transmission */
387     printf("\nvoid plastic fill\n");
388 greg 2.4 printf("0\n0\n5 %g %g %g %g %g\n", r*d, g*d, b*d, s, p);
389 greg 1.1 }
390     }
391    
392    
393     /*****************************************************
394    
395     Cylinder or cone. A cylinder is defined as having a radius and an axis
396     defined by two points, which also define the top and bottom edge of the
397     cylinder. A cone is defined similarly, the difference being that the apex
398     and base radii are different. The apex radius is defined as being smaller
399     than the base radius. Note that the surface exists without endcaps. The
400     cone or cylinder description:
401    
402     "c"
403     base.x base.y base.z base_radius
404     apex.x apex.y apex.z apex_radius
405    
406     Format:
407     c
408     %g %g %g %g
409     %g %g %g %g
410    
411     A negative value for both radii means that only the inside of the object is
412     visible (objects are normally considered one sided, with the outside
413     visible). Note that the base and apex cannot be coincident for a cylinder
414     or cone.
415    
416     ************************/
417    
418     cone()
419     {
420     static int ncs = 0;
421     int invert;
422     float x0, y0, z0, x1, y1, z1, r0, r1;
423    
424     if (scanf("%f %f %f %f %f %f %f %f", &x0, &y0, &z0, &r0,
425     &x1, &y1, &z1, &r1) != 8) {
426     fprintf(stderr, "%s: cylinder or cone syntax error\n",
427     progname);
428     exit(1);
429     }
430     if (invert = r0 < 0.) {
431     r0 = -r0;
432     r1 = -r1;
433     }
434     if (r0-r1 < .001 && r1-r0 < .001) { /* cylinder */
435 greg 2.2 printf("\nfill %s c%d \n", invert?"tube":"cylinder", ++ncs);
436 greg 1.1 printf("0\n0\n7\n");
437     printf("\t%g\t%g\t%g\n", x0, y0, z0);
438     printf("\t%g\t%g\t%g\n", x1, y1, z1);
439     printf("\t%g\n", r0);
440     } else { /* cone */
441 greg 2.2 printf("\nfill %s c%d \n", invert?"cup":"cone", ++ncs);
442 greg 1.1 printf("0\n0\n8\n");
443     printf("\t%g\t%g\t%g\n", x0, y0, z0);
444     printf("\t%g\t%g\t%g\n", x1, y1, z1);
445     printf("\t%g\t%g\n", r0, r1);
446     }
447     }
448    
449    
450     /*****************************************
451    
452     Sphere. A sphere is defined by a radius and center position:
453     "s" center.x center.y center.z radius
454    
455     Format:
456     s %g %g %g %g
457    
458     If the radius is negative, then only the sphere's inside is visible
459     (objects are normally considered one sided, with the outside visible).
460    
461     ******************/
462    
463     sphere()
464     {
465     static int nspheres = 0;
466     float x, y, z, r;
467    
468     if (scanf("%f %f %f %f", &x, &y, &z, &r) != 4) {
469     fprintf(stderr, "%s: sphere syntax error\n", progname);
470     exit(1);
471     }
472     if (r < 0.) {
473 greg 2.2 printf("\nfill bubble s%d \n", ++nspheres);
474 greg 1.1 printf("0\n0\n4 %g %g %g %g\n", x, y, z, -r);
475     } else {
476 greg 2.2 printf("\nfill sphere s%d \n", ++nspheres);
477 greg 1.1 printf("0\n0\n4 %g %g %g %g\n", x, y, z, r);
478     }
479     }
480    
481    
482     /*********************************************
483    
484     Polygon. A polygon is defined by a set of vertices. With these databases,
485     a polygon is defined to have all points coplanar. A polygon has only
486     one side, with the order of the vertices being counterclockwise as you
487     face the polygon (right-handed coordinate system). The first two edges
488     must form a non-zero convex angle, so that the normal and side visibility
489     can be determined. Description:
490    
491     "p" total_vertices
492     vert1.x vert1.y vert1.z
493     [etc. for total_vertices vertices]
494    
495     Format:
496     p %d
497     [ %g %g %g ] <-- for total_vertices vertices
498    
499     --------
500    
501     Polygonal patch. A patch is defined by a set of vertices and their normals.
502     With these databases, a patch is defined to have all points coplanar.
503     A patch has only one side, with the order of the vertices being
504     counterclockwise as you face the patch (right-handed coordinate system).
505     The first two edges must form a non-zero convex angle, so that the normal
506     and side visibility can be determined. Description:
507    
508     "pp" total_vertices
509     vert1.x vert1.y vert1.z norm1.x norm1.y norm1.z
510     [etc. for total_vertices vertices]
511    
512     Format:
513     pp %d
514     [ %g %g %g %g %g %g ] <-- for total_vertices vertices
515    
516     *******************/
517    
518     poly()
519     {
520     static int npolys = 0;
521     int ispatch;
522     int nverts;
523     float x, y, z;
524    
525     ispatch = getchar();
526     if (ispatch != 'p') {
527     ungetc(ispatch, stdin);
528     ispatch = 0;
529     }
530     if (scanf("%d", &nverts) != 1)
531     goto fmterr;
532 greg 2.2 printf("\nfill polygon p%d \n", ++npolys);
533 greg 1.1 printf("0\n0\n%d\n", 3*nverts);
534     while (nverts-- > 0) {
535     if (scanf("%f %f %f", &x, &y, &z) != 3)
536     goto fmterr;
537     if (ispatch)
538     scanf("%*f %*f %*f");
539     printf("\t%g\t%g\t%g\n", x, y, z);
540     }
541     return;
542     fmterr:
543     fprintf(stderr, "%s: polygon or patch syntax error\n", progname);
544     exit(1);
545 greg 2.2 }
546     /***********************************************************************
547     * $Author: markv $ (Mark VandeWettering, drizzle.cs.uoregon.edu)
548     * $Revision: 1.2 $
549     * $Date: 88/09/12 12:53:47 $
550     * $Log: color.c,v $
551     * Revision 1.2 88/09/12 12:53:47 markv
552     * Fixed problem in LookupColorbyName, had return ; and return(0).
553     * [ Thank you lint! ]
554     *
555     * Revision 1.1 88/09/11 11:00:37 markv
556     * Initial revision
557     *
558     * Peter Averkamp 92/02/01
559     * added complete X11R5 rgb.txt-table, hacked standalone version
560     * for nff2rad
561     *
562     ***********************************************************************/
563    
564     typedef double Flt ;
565     typedef Flt Vec[3] ;
566     typedef Vec Point ;
567     typedef Vec Color ;
568    
569     #define VecCopy(a,b) (b)[0]=(a)[0];(b)[1]=(a)[1];(b)[2]=(a)[2];
570     #define NCOLORS (738)
571    
572     typedef struct t_color_entry {
573     char * ce_name ;
574     Vec ce_color ;
575     } ColorEntry ;
576    
577     #define LESS_THAN -1
578     #define GREATER_THAN 1
579     #define EQUAL_TO 0
580    
581     /*
582     * Note: These colors must be in sorted order, because we binary search
583     * for them.
584     *
585     * They were swiped from the X-11 distribution. Sorry....
586     */
587    
588     ColorEntry Colors[] = {
589 greg 2.3 {"AliceBlue", {0.941176 , 0.972549 , 1.000000 }},
590     {"AntiqueWhite", {0.980392 , 0.921569 , 0.843137 }},
591     {"AntiqueWhite1", {1.000000 , 0.937255 , 0.858824 }},
592     {"AntiqueWhite2", {0.933333 , 0.874510 , 0.800000 }},
593     {"AntiqueWhite3", {0.803922 , 0.752941 , 0.690196 }},
594     {"AntiqueWhite4", {0.545098 , 0.513725 , 0.470588 }},
595     {"BlanchedAlmond", {1.000000 , 0.921569 , 0.803922 }},
596     {"BlueViolet", {0.541176 , 0.168627 , 0.886275 }},
597     {"CadetBlue", {0.372549 , 0.619608 , 0.627451 }},
598     {"CadetBlue1", {0.596078 , 0.960784 , 1.000000 }},
599     {"CadetBlue2", {0.556863 , 0.898039 , 0.933333 }},
600     {"CadetBlue3", {0.478431 , 0.772549 , 0.803922 }},
601     {"CadetBlue4", {0.325490 , 0.525490 , 0.545098 }},
602     {"CornflowerBlue", {0.392157 , 0.584314 , 0.929412 }},
603     {"DarkGoldenrod", {0.721569 , 0.525490 , 0.043137 }},
604     {"DarkGoldenrod1", {1.000000 , 0.725490 , 0.058824 }},
605     {"DarkGoldenrod2", {0.933333 , 0.678431 , 0.054902 }},
606     {"DarkGoldenrod3", {0.803922 , 0.584314 , 0.047059 }},
607     {"DarkGoldenrod4", {0.545098 , 0.396078 , 0.031373 }},
608     {"DarkGreen", {0.000000 , 0.392157 , 0.000000 }},
609     {"DarkKhaki", {0.741176 , 0.717647 , 0.419608 }},
610     {"DarkOliveGreen", {0.333333 , 0.419608 , 0.184314 }},
611     {"DarkOliveGreen1", {0.792157 , 1.000000 , 0.439216 }},
612     {"DarkOliveGreen2", {0.737255 , 0.933333 , 0.407843 }},
613     {"DarkOliveGreen3", {0.635294 , 0.803922 , 0.352941 }},
614     {"DarkOliveGreen4", {0.431373 , 0.545098 , 0.239216 }},
615     {"DarkOrange", {1.000000 , 0.549020 , 0.000000 }},
616     {"DarkOrange1", {1.000000 , 0.498039 , 0.000000 }},
617     {"DarkOrange2", {0.933333 , 0.462745 , 0.000000 }},
618     {"DarkOrange3", {0.803922 , 0.400000 , 0.000000 }},
619     {"DarkOrange4", {0.545098 , 0.270588 , 0.000000 }},
620     {"DarkOrchid", {0.600000 , 0.196078 , 0.800000 }},
621     {"DarkOrchid1", {0.749020 , 0.243137 , 1.000000 }},
622     {"DarkOrchid2", {0.698039 , 0.227451 , 0.933333 }},
623     {"DarkOrchid3", {0.603922 , 0.196078 , 0.803922 }},
624     {"DarkOrchid4", {0.407843 , 0.133333 , 0.545098 }},
625     {"DarkSalmon", {0.913725 , 0.588235 , 0.478431 }},
626     {"DarkSeaGreen", {0.560784 , 0.737255 , 0.560784 }},
627     {"DarkSeaGreen1", {0.756863 , 1.000000 , 0.756863 }},
628     {"DarkSeaGreen2", {0.705882 , 0.933333 , 0.705882 }},
629     {"DarkSeaGreen3", {0.607843 , 0.803922 , 0.607843 }},
630     {"DarkSeaGreen4", {0.411765 , 0.545098 , 0.411765 }},
631     {"DarkSlateBlue", {0.282353 , 0.239216 , 0.545098 }},
632     {"DarkSlateGray", {0.184314 , 0.309804 , 0.309804 }},
633     {"DarkSlateGray1", {0.592157 , 1.000000 , 1.000000 }},
634     {"DarkSlateGray2", {0.552941 , 0.933333 , 0.933333 }},
635     {"DarkSlateGray3", {0.474510 , 0.803922 , 0.803922 }},
636     {"DarkSlateGray4", {0.321569 , 0.545098 , 0.545098 }},
637     {"DarkSlateGrey", {0.184314 , 0.309804 , 0.309804 }},
638     {"DarkTurquoise", {0.000000 , 0.807843 , 0.819608 }},
639     {"DarkViolet", {0.580392 , 0.000000 , 0.827451 }},
640     {"DeepPink", {1.000000 , 0.078431 , 0.576471 }},
641     {"DeepPink1", {1.000000 , 0.078431 , 0.576471 }},
642     {"DeepPink2", {0.933333 , 0.070588 , 0.537255 }},
643     {"DeepPink3", {0.803922 , 0.062745 , 0.462745 }},
644     {"DeepPink4", {0.545098 , 0.039216 , 0.313725 }},
645     {"DeepSkyBlue", {0.000000 , 0.749020 , 1.000000 }},
646     {"DeepSkyBlue1", {0.000000 , 0.749020 , 1.000000 }},
647     {"DeepSkyBlue2", {0.000000 , 0.698039 , 0.933333 }},
648     {"DeepSkyBlue3", {0.000000 , 0.603922 , 0.803922 }},
649     {"DeepSkyBlue4", {0.000000 , 0.407843 , 0.545098 }},
650     {"DimGray", {0.411765 , 0.411765 , 0.411765 }},
651     {"DimGrey", {0.411765 , 0.411765 , 0.411765 }},
652     {"DodgerBlue", {0.117647 , 0.564706 , 1.000000 }},
653     {"DodgerBlue1", {0.117647 , 0.564706 , 1.000000 }},
654     {"DodgerBlue2", {0.109804 , 0.525490 , 0.933333 }},
655     {"DodgerBlue3", {0.094118 , 0.454902 , 0.803922 }},
656     {"DodgerBlue4", {0.062745 , 0.305882 , 0.545098 }},
657     {"FloralWhite", {1.000000 , 0.980392 , 0.941176 }},
658     {"ForestGreen", {0.133333 , 0.545098 , 0.133333 }},
659     {"GhostWhite", {0.972549 , 0.972549 , 1.000000 }},
660     {"GreenYellow", {0.678431 , 1.000000 , 0.184314 }},
661     {"HotPink", {1.000000 , 0.411765 , 0.705882 }},
662     {"HotPink1", {1.000000 , 0.431373 , 0.705882 }},
663     {"HotPink2", {0.933333 , 0.415686 , 0.654902 }},
664     {"HotPink3", {0.803922 , 0.376471 , 0.564706 }},
665     {"HotPink4", {0.545098 , 0.227451 , 0.384314 }},
666     {"IndianRed", {0.803922 , 0.360784 , 0.360784 }},
667     {"IndianRed1", {1.000000 , 0.415686 , 0.415686 }},
668     {"IndianRed2", {0.933333 , 0.388235 , 0.388235 }},
669     {"IndianRed3", {0.803922 , 0.333333 , 0.333333 }},
670     {"IndianRed4", {0.545098 , 0.227451 , 0.227451 }},
671     {"LavenderBlush", {1.000000 , 0.941176 , 0.960784 }},
672     {"LavenderBlush1", {1.000000 , 0.941176 , 0.960784 }},
673     {"LavenderBlush2", {0.933333 , 0.878431 , 0.898039 }},
674     {"LavenderBlush3", {0.803922 , 0.756863 , 0.772549 }},
675     {"LavenderBlush4", {0.545098 , 0.513725 , 0.525490 }},
676     {"LawnGreen", {0.486275 , 0.988235 , 0.000000 }},
677     {"LemonChiffon", {1.000000 , 0.980392 , 0.803922 }},
678     {"LemonChiffon1", {1.000000 , 0.980392 , 0.803922 }},
679     {"LemonChiffon2", {0.933333 , 0.913725 , 0.749020 }},
680     {"LemonChiffon3", {0.803922 , 0.788235 , 0.647059 }},
681     {"LemonChiffon4", {0.545098 , 0.537255 , 0.439216 }},
682     {"LightBlue", {0.678431 , 0.847059 , 0.901961 }},
683     {"LightBlue1", {0.749020 , 0.937255 , 1.000000 }},
684     {"LightBlue2", {0.698039 , 0.874510 , 0.933333 }},
685     {"LightBlue3", {0.603922 , 0.752941 , 0.803922 }},
686     {"LightBlue4", {0.407843 , 0.513725 , 0.545098 }},
687     {"LightCoral", {0.941176 , 0.501961 , 0.501961 }},
688     {"LightCyan", {0.878431 , 1.000000 , 1.000000 }},
689     {"LightCyan1", {0.878431 , 1.000000 , 1.000000 }},
690     {"LightCyan2", {0.819608 , 0.933333 , 0.933333 }},
691     {"LightCyan3", {0.705882 , 0.803922 , 0.803922 }},
692     {"LightCyan4", {0.478431 , 0.545098 , 0.545098 }},
693     {"LightGoldenrod", {0.933333 , 0.866667 , 0.509804 }},
694     {"LightGoldenrod1", {1.000000 , 0.925490 , 0.545098 }},
695     {"LightGoldenrod2", {0.933333 , 0.862745 , 0.509804 }},
696     {"LightGoldenrod3", {0.803922 , 0.745098 , 0.439216 }},
697     {"LightGoldenrod4", {0.545098 , 0.505882 , 0.298039 }},
698     {"LightGoldenrodYellow", {0.980392 , 0.980392 , 0.823529 }},
699     {"LightGray", {0.827451 , 0.827451 , 0.827451 }},
700     {"LightGrey", {0.827451 , 0.827451 , 0.827451 }},
701     {"LightPink", {1.000000 , 0.713725 , 0.756863 }},
702     {"LightPink1", {1.000000 , 0.682353 , 0.725490 }},
703     {"LightPink2", {0.933333 , 0.635294 , 0.678431 }},
704     {"LightPink3", {0.803922 , 0.549020 , 0.584314 }},
705     {"LightPink4", {0.545098 , 0.372549 , 0.396078 }},
706     {"LightSalmon", {1.000000 , 0.627451 , 0.478431 }},
707     {"LightSalmon1", {1.000000 , 0.627451 , 0.478431 }},
708     {"LightSalmon2", {0.933333 , 0.584314 , 0.447059 }},
709     {"LightSalmon3", {0.803922 , 0.505882 , 0.384314 }},
710     {"LightSalmon4", {0.545098 , 0.341176 , 0.258824 }},
711     {"LightSeaGreen", {0.125490 , 0.698039 , 0.666667 }},
712     {"LightSkyBlue", {0.529412 , 0.807843 , 0.980392 }},
713     {"LightSkyBlue1", {0.690196 , 0.886275 , 1.000000 }},
714     {"LightSkyBlue2", {0.643137 , 0.827451 , 0.933333 }},
715     {"LightSkyBlue3", {0.552941 , 0.713725 , 0.803922 }},
716     {"LightSkyBlue4", {0.376471 , 0.482353 , 0.545098 }},
717     {"LightSlateBlue", {0.517647 , 0.439216 , 1.000000 }},
718     {"LightSlateGray", {0.466667 , 0.533333 , 0.600000 }},
719     {"LightSlateGrey", {0.466667 , 0.533333 , 0.600000 }},
720     {"LightSteelBlue", {0.690196 , 0.768627 , 0.870588 }},
721     {"LightSteelBlue1", {0.792157 , 0.882353 , 1.000000 }},
722     {"LightSteelBlue2", {0.737255 , 0.823529 , 0.933333 }},
723     {"LightSteelBlue3", {0.635294 , 0.709804 , 0.803922 }},
724     {"LightSteelBlue4", {0.431373 , 0.482353 , 0.545098 }},
725     {"LightYellow", {1.000000 , 1.000000 , 0.878431 }},
726     {"LightYellow1", {1.000000 , 1.000000 , 0.878431 }},
727     {"LightYellow2", {0.933333 , 0.933333 , 0.819608 }},
728     {"LightYellow3", {0.803922 , 0.803922 , 0.705882 }},
729     {"LightYellow4", {0.545098 , 0.545098 , 0.478431 }},
730     {"LimeGreen", {0.196078 , 0.803922 , 0.196078 }},
731     {"MediumAquamarine", {0.400000 , 0.803922 , 0.666667 }},
732     {"MediumBlue", {0.000000 , 0.000000 , 0.803922 }},
733     {"MediumOrchid", {0.729412 , 0.333333 , 0.827451 }},
734     {"MediumOrchid1", {0.878431 , 0.400000 , 1.000000 }},
735     {"MediumOrchid2", {0.819608 , 0.372549 , 0.933333 }},
736     {"MediumOrchid3", {0.705882 , 0.321569 , 0.803922 }},
737     {"MediumOrchid4", {0.478431 , 0.215686 , 0.545098 }},
738     {"MediumPurple", {0.576471 , 0.439216 , 0.858824 }},
739     {"MediumPurple1", {0.670588 , 0.509804 , 1.000000 }},
740     {"MediumPurple2", {0.623529 , 0.474510 , 0.933333 }},
741     {"MediumPurple3", {0.537255 , 0.407843 , 0.803922 }},
742     {"MediumPurple4", {0.364706 , 0.278431 , 0.545098 }},
743     {"MediumSeaGreen", {0.235294 , 0.701961 , 0.443137 }},
744     {"MediumSlateBlue", {0.482353 , 0.407843 , 0.933333 }},
745     {"MediumSpringGreen", {0.000000 , 0.980392 , 0.603922 }},
746     {"MediumTurquoise", {0.282353 , 0.819608 , 0.800000 }},
747     {"MediumVioletRed", {0.780392 , 0.082353 , 0.521569 }},
748     {"MidnightBlue", {0.098039 , 0.098039 , 0.439216 }},
749     {"MintCream", {0.960784 , 1.000000 , 0.980392 }},
750     {"MistyRose", {1.000000 , 0.894118 , 0.882353 }},
751     {"MistyRose1", {1.000000 , 0.894118 , 0.882353 }},
752     {"MistyRose2", {0.933333 , 0.835294 , 0.823529 }},
753     {"MistyRose3", {0.803922 , 0.717647 , 0.709804 }},
754     {"MistyRose4", {0.545098 , 0.490196 , 0.482353 }},
755     {"NavajoWhite", {1.000000 , 0.870588 , 0.678431 }},
756     {"NavajoWhite1", {1.000000 , 0.870588 , 0.678431 }},
757     {"NavajoWhite2", {0.933333 , 0.811765 , 0.631373 }},
758     {"NavajoWhite3", {0.803922 , 0.701961 , 0.545098 }},
759     {"NavajoWhite4", {0.545098 , 0.474510 , 0.368627 }},
760     {"NavyBlue", {0.000000 , 0.000000 , 0.501961 }},
761     {"OldLace", {0.992157 , 0.960784 , 0.901961 }},
762     {"OliveDrab", {0.419608 , 0.556863 , 0.137255 }},
763     {"OliveDrab1", {0.752941 , 1.000000 , 0.243137 }},
764     {"OliveDrab2", {0.701961 , 0.933333 , 0.227451 }},
765     {"OliveDrab3", {0.603922 , 0.803922 , 0.196078 }},
766     {"OliveDrab4", {0.411765 , 0.545098 , 0.133333 }},
767     {"OrangeRed", {1.000000 , 0.270588 , 0.000000 }},
768     {"OrangeRed1", {1.000000 , 0.270588 , 0.000000 }},
769     {"OrangeRed2", {0.933333 , 0.250980 , 0.000000 }},
770     {"OrangeRed3", {0.803922 , 0.215686 , 0.000000 }},
771     {"OrangeRed4", {0.545098 , 0.145098 , 0.000000 }},
772     {"PaleGoldenrod", {0.933333 , 0.909804 , 0.666667 }},
773     {"PaleGreen", {0.596078 , 0.984314 , 0.596078 }},
774     {"PaleGreen1", {0.603922 , 1.000000 , 0.603922 }},
775     {"PaleGreen2", {0.564706 , 0.933333 , 0.564706 }},
776     {"PaleGreen3", {0.486275 , 0.803922 , 0.486275 }},
777     {"PaleGreen4", {0.329412 , 0.545098 , 0.329412 }},
778     {"PaleTurquoise", {0.686275 , 0.933333 , 0.933333 }},
779     {"PaleTurquoise1", {0.733333 , 1.000000 , 1.000000 }},
780     {"PaleTurquoise2", {0.682353 , 0.933333 , 0.933333 }},
781     {"PaleTurquoise3", {0.588235 , 0.803922 , 0.803922 }},
782     {"PaleTurquoise4", {0.400000 , 0.545098 , 0.545098 }},
783     {"PaleVioletRed", {0.858824 , 0.439216 , 0.576471 }},
784     {"PaleVioletRed1", {1.000000 , 0.509804 , 0.670588 }},
785     {"PaleVioletRed2", {0.933333 , 0.474510 , 0.623529 }},
786     {"PaleVioletRed3", {0.803922 , 0.407843 , 0.537255 }},
787     {"PaleVioletRed4", {0.545098 , 0.278431 , 0.364706 }},
788     {"PapayaWhip", {1.000000 , 0.937255 , 0.835294 }},
789     {"PeachPuff", {1.000000 , 0.854902 , 0.725490 }},
790     {"PeachPuff1", {1.000000 , 0.854902 , 0.725490 }},
791     {"PeachPuff2", {0.933333 , 0.796078 , 0.678431 }},
792     {"PeachPuff3", {0.803922 , 0.686275 , 0.584314 }},
793     {"PeachPuff4", {0.545098 , 0.466667 , 0.396078 }},
794     {"PowderBlue", {0.690196 , 0.878431 , 0.901961 }},
795     {"RosyBrown", {0.737255 , 0.560784 , 0.560784 }},
796     {"RosyBrown1", {1.000000 , 0.756863 , 0.756863 }},
797     {"RosyBrown2", {0.933333 , 0.705882 , 0.705882 }},
798     {"RosyBrown3", {0.803922 , 0.607843 , 0.607843 }},
799     {"RosyBrown4", {0.545098 , 0.411765 , 0.411765 }},
800     {"RoyalBlue", {0.254902 , 0.411765 , 0.882353 }},
801     {"RoyalBlue1", {0.282353 , 0.462745 , 1.000000 }},
802     {"RoyalBlue2", {0.262745 , 0.431373 , 0.933333 }},
803     {"RoyalBlue3", {0.227451 , 0.372549 , 0.803922 }},
804     {"RoyalBlue4", {0.152941 , 0.250980 , 0.545098 }},
805     {"SaddleBrown", {0.545098 , 0.270588 , 0.074510 }},
806     {"SandyBrown", {0.956863 , 0.643137 , 0.376471 }},
807     {"SeaGreen", {0.180392 , 0.545098 , 0.341176 }},
808     {"SeaGreen1", {0.329412 , 1.000000 , 0.623529 }},
809     {"SeaGreen2", {0.305882 , 0.933333 , 0.580392 }},
810     {"SeaGreen3", {0.262745 , 0.803922 , 0.501961 }},
811     {"SeaGreen4", {0.180392 , 0.545098 , 0.341176 }},
812     {"SkyBlue", {0.529412 , 0.807843 , 0.921569 }},
813     {"SkyBlue1", {0.529412 , 0.807843 , 1.000000 }},
814     {"SkyBlue2", {0.494118 , 0.752941 , 0.933333 }},
815     {"SkyBlue3", {0.423529 , 0.650980 , 0.803922 }},
816     {"SkyBlue4", {0.290196 , 0.439216 , 0.545098 }},
817     {"SlateBlue", {0.415686 , 0.352941 , 0.803922 }},
818     {"SlateBlue1", {0.513725 , 0.435294 , 1.000000 }},
819     {"SlateBlue2", {0.478431 , 0.403922 , 0.933333 }},
820     {"SlateBlue3", {0.411765 , 0.349020 , 0.803922 }},
821     {"SlateBlue4", {0.278431 , 0.235294 , 0.545098 }},
822     {"SlateGray", {0.439216 , 0.501961 , 0.564706 }},
823     {"SlateGray1", {0.776471 , 0.886275 , 1.000000 }},
824     {"SlateGray2", {0.725490 , 0.827451 , 0.933333 }},
825     {"SlateGray3", {0.623529 , 0.713725 , 0.803922 }},
826     {"SlateGray4", {0.423529 , 0.482353 , 0.545098 }},
827     {"SlateGrey", {0.439216 , 0.501961 , 0.564706 }},
828     {"SpringGreen", {0.000000 , 1.000000 , 0.498039 }},
829     {"SpringGreen1", {0.000000 , 1.000000 , 0.498039 }},
830     {"SpringGreen2", {0.000000 , 0.933333 , 0.462745 }},
831     {"SpringGreen3", {0.000000 , 0.803922 , 0.400000 }},
832     {"SpringGreen4", {0.000000 , 0.545098 , 0.270588 }},
833     {"SteelBlue", {0.274510 , 0.509804 , 0.705882 }},
834     {"SteelBlue1", {0.388235 , 0.721569 , 1.000000 }},
835     {"SteelBlue2", {0.360784 , 0.674510 , 0.933333 }},
836     {"SteelBlue3", {0.309804 , 0.580392 , 0.803922 }},
837     {"SteelBlue4", {0.211765 , 0.392157 , 0.545098 }},
838     {"VioletRed", {0.815686 , 0.125490 , 0.564706 }},
839     {"VioletRed1", {1.000000 , 0.243137 , 0.588235 }},
840     {"VioletRed2", {0.933333 , 0.227451 , 0.549020 }},
841     {"VioletRed3", {0.803922 , 0.196078 , 0.470588 }},
842     {"VioletRed4", {0.545098 , 0.133333 , 0.321569 }},
843     {"WhiteSmoke", {0.960784 , 0.960784 , 0.960784 }},
844     {"YellowGreen", {0.603922 , 0.803922 , 0.196078 }},
845     {"alice_blue", {0.941176 , 0.972549 , 1.000000 }},
846     {"antique_white", {0.980392 , 0.921569 , 0.843137 }},
847     {"aquamarine", {0.498039 , 1.000000 , 0.831373 }},
848     {"aquamarine1", {0.498039 , 1.000000 , 0.831373 }},
849     {"aquamarine2", {0.462745 , 0.933333 , 0.776471 }},
850     {"aquamarine3", {0.400000 , 0.803922 , 0.666667 }},
851     {"aquamarine4", {0.270588 , 0.545098 , 0.454902 }},
852     {"azure", {0.941176 , 1.000000 , 1.000000 }},
853     {"azure1", {0.941176 , 1.000000 , 1.000000 }},
854     {"azure2", {0.878431 , 0.933333 , 0.933333 }},
855     {"azure3", {0.756863 , 0.803922 , 0.803922 }},
856     {"azure4", {0.513725 , 0.545098 , 0.545098 }},
857     {"beige", {0.960784 , 0.960784 , 0.862745 }},
858     {"bisque", {1.000000 , 0.894118 , 0.768627 }},
859     {"bisque1", {1.000000 , 0.894118 , 0.768627 }},
860     {"bisque2", {0.933333 , 0.835294 , 0.717647 }},
861     {"bisque3", {0.803922 , 0.717647 , 0.619608 }},
862     {"bisque4", {0.545098 , 0.490196 , 0.419608 }},
863     {"black", {0.000000 , 0.000000 , 0.000000 }},
864     {"blanched_almond", {1.000000 , 0.921569 , 0.803922 }},
865     {"blue", {0.000000 , 0.000000 , 1.000000 }},
866     {"blue1", {0.000000 , 0.000000 , 1.000000 }},
867     {"blue2", {0.000000 , 0.000000 , 0.933333 }},
868     {"blue3", {0.000000 , 0.000000 , 0.803922 }},
869     {"blue4", {0.000000 , 0.000000 , 0.545098 }},
870     {"blue_violet", {0.541176 , 0.168627 , 0.886275 }},
871     {"brown", {0.647059 , 0.164706 , 0.164706 }},
872     {"brown1", {1.000000 , 0.250980 , 0.250980 }},
873     {"brown2", {0.933333 , 0.231373 , 0.231373 }},
874     {"brown3", {0.803922 , 0.200000 , 0.200000 }},
875     {"brown4", {0.545098 , 0.137255 , 0.137255 }},
876     {"burlywood", {0.870588 , 0.721569 , 0.529412 }},
877     {"burlywood1", {1.000000 , 0.827451 , 0.607843 }},
878     {"burlywood2", {0.933333 , 0.772549 , 0.568627 }},
879     {"burlywood3", {0.803922 , 0.666667 , 0.490196 }},
880     {"burlywood4", {0.545098 , 0.450980 , 0.333333 }},
881     {"cadet_blue", {0.372549 , 0.619608 , 0.627451 }},
882     {"chartreuse", {0.498039 , 1.000000 , 0.000000 }},
883     {"chartreuse1", {0.498039 , 1.000000 , 0.000000 }},
884     {"chartreuse2", {0.462745 , 0.933333 , 0.000000 }},
885     {"chartreuse3", {0.400000 , 0.803922 , 0.000000 }},
886     {"chartreuse4", {0.270588 , 0.545098 , 0.000000 }},
887     {"chocolate", {0.823529 , 0.411765 , 0.117647 }},
888     {"chocolate1", {1.000000 , 0.498039 , 0.141176 }},
889     {"chocolate2", {0.933333 , 0.462745 , 0.129412 }},
890     {"chocolate3", {0.803922 , 0.400000 , 0.113725 }},
891     {"chocolate4", {0.545098 , 0.270588 , 0.074510 }},
892     {"coral", {1.000000 , 0.498039 , 0.313725 }},
893     {"coral1", {1.000000 , 0.447059 , 0.337255 }},
894     {"coral2", {0.933333 , 0.415686 , 0.313725 }},
895     {"coral3", {0.803922 , 0.356863 , 0.270588 }},
896     {"coral4", {0.545098 , 0.243137 , 0.184314 }},
897     {"cornflower_blue", {0.392157 , 0.584314 , 0.929412 }},
898     {"cornsilk", {1.000000 , 0.972549 , 0.862745 }},
899     {"cornsilk1", {1.000000 , 0.972549 , 0.862745 }},
900     {"cornsilk2", {0.933333 , 0.909804 , 0.803922 }},
901     {"cornsilk3", {0.803922 , 0.784314 , 0.694118 }},
902     {"cornsilk4", {0.545098 , 0.533333 , 0.470588 }},
903     {"cyan", {0.000000 , 1.000000 , 1.000000 }},
904     {"cyan1", {0.000000 , 1.000000 , 1.000000 }},
905     {"cyan2", {0.000000 , 0.933333 , 0.933333 }},
906     {"cyan3", {0.000000 , 0.803922 , 0.803922 }},
907     {"cyan4", {0.000000 , 0.545098 , 0.545098 }},
908     {"dark_goldenrod", {0.721569 , 0.525490 , 0.043137 }},
909     {"dark_green", {0.000000 , 0.392157 , 0.000000 }},
910     {"dark_khaki", {0.741176 , 0.717647 , 0.419608 }},
911     {"dark_olive_green", {0.333333 , 0.419608 , 0.184314 }},
912     {"dark_orange", {1.000000 , 0.549020 , 0.000000 }},
913     {"dark_orchid", {0.600000 , 0.196078 , 0.800000 }},
914     {"dark_salmon", {0.913725 , 0.588235 , 0.478431 }},
915     {"dark_sea_green", {0.560784 , 0.737255 , 0.560784 }},
916     {"dark_slate_blue", {0.282353 , 0.239216 , 0.545098 }},
917     {"dark_slate_gray", {0.184314 , 0.309804 , 0.309804 }},
918     {"dark_slate_grey", {0.184314 , 0.309804 , 0.309804 }},
919     {"dark_turquoise", {0.000000 , 0.807843 , 0.819608 }},
920     {"dark_violet", {0.580392 , 0.000000 , 0.827451 }},
921     {"deep_pink", {1.000000 , 0.078431 , 0.576471 }},
922     {"deep_sky_blue", {0.000000 , 0.749020 , 1.000000 }},
923     {"dim_gray", {0.411765 , 0.411765 , 0.411765 }},
924     {"dim_grey", {0.411765 , 0.411765 , 0.411765 }},
925     {"dodger_blue", {0.117647 , 0.564706 , 1.000000 }},
926     {"firebrick", {0.698039 , 0.133333 , 0.133333 }},
927     {"firebrick1", {1.000000 , 0.188235 , 0.188235 }},
928     {"firebrick2", {0.933333 , 0.172549 , 0.172549 }},
929     {"firebrick3", {0.803922 , 0.149020 , 0.149020 }},
930     {"firebrick4", {0.545098 , 0.101961 , 0.101961 }},
931     {"floral_white", {1.000000 , 0.980392 , 0.941176 }},
932     {"forest_green", {0.133333 , 0.545098 , 0.133333 }},
933     {"gainsboro", {0.862745 , 0.862745 , 0.862745 }},
934     {"ghost_white", {0.972549 , 0.972549 , 1.000000 }},
935     {"gold", {1.000000 , 0.843137 , 0.000000 }},
936     {"gold1", {1.000000 , 0.843137 , 0.000000 }},
937     {"gold2", {0.933333 , 0.788235 , 0.000000 }},
938     {"gold3", {0.803922 , 0.678431 , 0.000000 }},
939     {"gold4", {0.545098 , 0.458824 , 0.000000 }},
940     {"goldenrod", {0.854902 , 0.647059 , 0.125490 }},
941     {"goldenrod1", {1.000000 , 0.756863 , 0.145098 }},
942     {"goldenrod2", {0.933333 , 0.705882 , 0.133333 }},
943     {"goldenrod3", {0.803922 , 0.607843 , 0.113725 }},
944     {"goldenrod4", {0.545098 , 0.411765 , 0.078431 }},
945     {"gray", {0.752941 , 0.752941 , 0.752941 }},
946     {"gray0", {0.000000 , 0.000000 , 0.000000 }},
947     {"gray1", {0.011765 , 0.011765 , 0.011765 }},
948     {"gray10", {0.101961 , 0.101961 , 0.101961 }},
949     {"gray100", {1.000000 , 1.000000 , 1.000000 }},
950     {"gray11", {0.109804 , 0.109804 , 0.109804 }},
951     {"gray12", {0.121569 , 0.121569 , 0.121569 }},
952     {"gray13", {0.129412 , 0.129412 , 0.129412 }},
953     {"gray14", {0.141176 , 0.141176 , 0.141176 }},
954     {"gray15", {0.149020 , 0.149020 , 0.149020 }},
955     {"gray16", {0.160784 , 0.160784 , 0.160784 }},
956     {"gray17", {0.168627 , 0.168627 , 0.168627 }},
957     {"gray18", {0.180392 , 0.180392 , 0.180392 }},
958     {"gray19", {0.188235 , 0.188235 , 0.188235 }},
959     {"gray2", {0.019608 , 0.019608 , 0.019608 }},
960     {"gray20", {0.200000 , 0.200000 , 0.200000 }},
961     {"gray21", {0.211765 , 0.211765 , 0.211765 }},
962     {"gray22", {0.219608 , 0.219608 , 0.219608 }},
963     {"gray23", {0.231373 , 0.231373 , 0.231373 }},
964     {"gray24", {0.239216 , 0.239216 , 0.239216 }},
965     {"gray25", {0.250980 , 0.250980 , 0.250980 }},
966     {"gray26", {0.258824 , 0.258824 , 0.258824 }},
967     {"gray27", {0.270588 , 0.270588 , 0.270588 }},
968     {"gray28", {0.278431 , 0.278431 , 0.278431 }},
969     {"gray29", {0.290196 , 0.290196 , 0.290196 }},
970     {"gray3", {0.031373 , 0.031373 , 0.031373 }},
971     {"gray30", {0.301961 , 0.301961 , 0.301961 }},
972     {"gray31", {0.309804 , 0.309804 , 0.309804 }},
973     {"gray32", {0.321569 , 0.321569 , 0.321569 }},
974     {"gray33", {0.329412 , 0.329412 , 0.329412 }},
975     {"gray34", {0.341176 , 0.341176 , 0.341176 }},
976     {"gray35", {0.349020 , 0.349020 , 0.349020 }},
977     {"gray36", {0.360784 , 0.360784 , 0.360784 }},
978     {"gray37", {0.368627 , 0.368627 , 0.368627 }},
979     {"gray38", {0.380392 , 0.380392 , 0.380392 }},
980     {"gray39", {0.388235 , 0.388235 , 0.388235 }},
981     {"gray4", {0.039216 , 0.039216 , 0.039216 }},
982     {"gray40", {0.400000 , 0.400000 , 0.400000 }},
983     {"gray41", {0.411765 , 0.411765 , 0.411765 }},
984     {"gray42", {0.419608 , 0.419608 , 0.419608 }},
985     {"gray43", {0.431373 , 0.431373 , 0.431373 }},
986     {"gray44", {0.439216 , 0.439216 , 0.439216 }},
987     {"gray45", {0.450980 , 0.450980 , 0.450980 }},
988     {"gray46", {0.458824 , 0.458824 , 0.458824 }},
989     {"gray47", {0.470588 , 0.470588 , 0.470588 }},
990     {"gray48", {0.478431 , 0.478431 , 0.478431 }},
991     {"gray49", {0.490196 , 0.490196 , 0.490196 }},
992     {"gray5", {0.050980 , 0.050980 , 0.050980 }},
993     {"gray50", {0.498039 , 0.498039 , 0.498039 }},
994     {"gray51", {0.509804 , 0.509804 , 0.509804 }},
995     {"gray52", {0.521569 , 0.521569 , 0.521569 }},
996     {"gray53", {0.529412 , 0.529412 , 0.529412 }},
997     {"gray54", {0.541176 , 0.541176 , 0.541176 }},
998     {"gray55", {0.549020 , 0.549020 , 0.549020 }},
999     {"gray56", {0.560784 , 0.560784 , 0.560784 }},
1000     {"gray57", {0.568627 , 0.568627 , 0.568627 }},
1001     {"gray58", {0.580392 , 0.580392 , 0.580392 }},
1002     {"gray59", {0.588235 , 0.588235 , 0.588235 }},
1003     {"gray6", {0.058824 , 0.058824 , 0.058824 }},
1004     {"gray60", {0.600000 , 0.600000 , 0.600000 }},
1005     {"gray61", {0.611765 , 0.611765 , 0.611765 }},
1006     {"gray62", {0.619608 , 0.619608 , 0.619608 }},
1007     {"gray63", {0.631373 , 0.631373 , 0.631373 }},
1008     {"gray64", {0.639216 , 0.639216 , 0.639216 }},
1009     {"gray65", {0.650980 , 0.650980 , 0.650980 }},
1010     {"gray66", {0.658824 , 0.658824 , 0.658824 }},
1011     {"gray67", {0.670588 , 0.670588 , 0.670588 }},
1012     {"gray68", {0.678431 , 0.678431 , 0.678431 }},
1013     {"gray69", {0.690196 , 0.690196 , 0.690196 }},
1014     {"gray7", {0.070588 , 0.070588 , 0.070588 }},
1015     {"gray70", {0.701961 , 0.701961 , 0.701961 }},
1016     {"gray71", {0.709804 , 0.709804 , 0.709804 }},
1017     {"gray72", {0.721569 , 0.721569 , 0.721569 }},
1018     {"gray73", {0.729412 , 0.729412 , 0.729412 }},
1019     {"gray74", {0.741176 , 0.741176 , 0.741176 }},
1020     {"gray75", {0.749020 , 0.749020 , 0.749020 }},
1021     {"gray76", {0.760784 , 0.760784 , 0.760784 }},
1022     {"gray77", {0.768627 , 0.768627 , 0.768627 }},
1023     {"gray78", {0.780392 , 0.780392 , 0.780392 }},
1024     {"gray79", {0.788235 , 0.788235 , 0.788235 }},
1025     {"gray8", {0.078431 , 0.078431 , 0.078431 }},
1026     {"gray80", {0.800000 , 0.800000 , 0.800000 }},
1027     {"gray81", {0.811765 , 0.811765 , 0.811765 }},
1028     {"gray82", {0.819608 , 0.819608 , 0.819608 }},
1029     {"gray83", {0.831373 , 0.831373 , 0.831373 }},
1030     {"gray84", {0.839216 , 0.839216 , 0.839216 }},
1031     {"gray85", {0.850980 , 0.850980 , 0.850980 }},
1032     {"gray86", {0.858824 , 0.858824 , 0.858824 }},
1033     {"gray87", {0.870588 , 0.870588 , 0.870588 }},
1034     {"gray88", {0.878431 , 0.878431 , 0.878431 }},
1035     {"gray89", {0.890196 , 0.890196 , 0.890196 }},
1036     {"gray9", {0.090196 , 0.090196 , 0.090196 }},
1037     {"gray90", {0.898039 , 0.898039 , 0.898039 }},
1038     {"gray91", {0.909804 , 0.909804 , 0.909804 }},
1039     {"gray92", {0.921569 , 0.921569 , 0.921569 }},
1040     {"gray93", {0.929412 , 0.929412 , 0.929412 }},
1041     {"gray94", {0.941176 , 0.941176 , 0.941176 }},
1042     {"gray95", {0.949020 , 0.949020 , 0.949020 }},
1043     {"gray96", {0.960784 , 0.960784 , 0.960784 }},
1044     {"gray97", {0.968627 , 0.968627 , 0.968627 }},
1045     {"gray98", {0.980392 , 0.980392 , 0.980392 }},
1046     {"gray99", {0.988235 , 0.988235 , 0.988235 }},
1047     {"green", {0.000000 , 1.000000 , 0.000000 }},
1048     {"green1", {0.000000 , 1.000000 , 0.000000 }},
1049     {"green2", {0.000000 , 0.933333 , 0.000000 }},
1050     {"green3", {0.000000 , 0.803922 , 0.000000 }},
1051     {"green4", {0.000000 , 0.545098 , 0.000000 }},
1052     {"green_yellow", {0.678431 , 1.000000 , 0.184314 }},
1053     {"grey", {0.752941 , 0.752941 , 0.752941 }},
1054     {"grey0", {0.000000 , 0.000000 , 0.000000 }},
1055     {"grey1", {0.011765 , 0.011765 , 0.011765 }},
1056     {"grey10", {0.101961 , 0.101961 , 0.101961 }},
1057     {"grey100", {1.000000 , 1.000000 , 1.000000 }},
1058     {"grey11", {0.109804 , 0.109804 , 0.109804 }},
1059     {"grey12", {0.121569 , 0.121569 , 0.121569 }},
1060     {"grey13", {0.129412 , 0.129412 , 0.129412 }},
1061     {"grey14", {0.141176 , 0.141176 , 0.141176 }},
1062     {"grey15", {0.149020 , 0.149020 , 0.149020 }},
1063     {"grey16", {0.160784 , 0.160784 , 0.160784 }},
1064     {"grey17", {0.168627 , 0.168627 , 0.168627 }},
1065     {"grey18", {0.180392 , 0.180392 , 0.180392 }},
1066     {"grey19", {0.188235 , 0.188235 , 0.188235 }},
1067     {"grey2", {0.019608 , 0.019608 , 0.019608 }},
1068     {"grey20", {0.200000 , 0.200000 , 0.200000 }},
1069     {"grey21", {0.211765 , 0.211765 , 0.211765 }},
1070     {"grey22", {0.219608 , 0.219608 , 0.219608 }},
1071     {"grey23", {0.231373 , 0.231373 , 0.231373 }},
1072     {"grey24", {0.239216 , 0.239216 , 0.239216 }},
1073     {"grey25", {0.250980 , 0.250980 , 0.250980 }},
1074     {"grey26", {0.258824 , 0.258824 , 0.258824 }},
1075     {"grey27", {0.270588 , 0.270588 , 0.270588 }},
1076     {"grey28", {0.278431 , 0.278431 , 0.278431 }},
1077     {"grey29", {0.290196 , 0.290196 , 0.290196 }},
1078     {"grey3", {0.031373 , 0.031373 , 0.031373 }},
1079     {"grey30", {0.301961 , 0.301961 , 0.301961 }},
1080     {"grey31", {0.309804 , 0.309804 , 0.309804 }},
1081     {"grey32", {0.321569 , 0.321569 , 0.321569 }},
1082     {"grey33", {0.329412 , 0.329412 , 0.329412 }},
1083     {"grey34", {0.341176 , 0.341176 , 0.341176 }},
1084     {"grey35", {0.349020 , 0.349020 , 0.349020 }},
1085     {"grey36", {0.360784 , 0.360784 , 0.360784 }},
1086     {"grey37", {0.368627 , 0.368627 , 0.368627 }},
1087     {"grey38", {0.380392 , 0.380392 , 0.380392 }},
1088     {"grey39", {0.388235 , 0.388235 , 0.388235 }},
1089     {"grey4", {0.039216 , 0.039216 , 0.039216 }},
1090     {"grey40", {0.400000 , 0.400000 , 0.400000 }},
1091     {"grey41", {0.411765 , 0.411765 , 0.411765 }},
1092     {"grey42", {0.419608 , 0.419608 , 0.419608 }},
1093     {"grey43", {0.431373 , 0.431373 , 0.431373 }},
1094     {"grey44", {0.439216 , 0.439216 , 0.439216 }},
1095     {"grey45", {0.450980 , 0.450980 , 0.450980 }},
1096     {"grey46", {0.458824 , 0.458824 , 0.458824 }},
1097     {"grey47", {0.470588 , 0.470588 , 0.470588 }},
1098     {"grey48", {0.478431 , 0.478431 , 0.478431 }},
1099     {"grey49", {0.490196 , 0.490196 , 0.490196 }},
1100     {"grey5", {0.050980 , 0.050980 , 0.050980 }},
1101     {"grey50", {0.498039 , 0.498039 , 0.498039 }},
1102     {"grey51", {0.509804 , 0.509804 , 0.509804 }},
1103     {"grey52", {0.521569 , 0.521569 , 0.521569 }},
1104     {"grey53", {0.529412 , 0.529412 , 0.529412 }},
1105     {"grey54", {0.541176 , 0.541176 , 0.541176 }},
1106     {"grey55", {0.549020 , 0.549020 , 0.549020 }},
1107     {"grey56", {0.560784 , 0.560784 , 0.560784 }},
1108     {"grey57", {0.568627 , 0.568627 , 0.568627 }},
1109     {"grey58", {0.580392 , 0.580392 , 0.580392 }},
1110     {"grey59", {0.588235 , 0.588235 , 0.588235 }},
1111     {"grey6", {0.058824 , 0.058824 , 0.058824 }},
1112     {"grey60", {0.600000 , 0.600000 , 0.600000 }},
1113     {"grey61", {0.611765 , 0.611765 , 0.611765 }},
1114     {"grey62", {0.619608 , 0.619608 , 0.619608 }},
1115     {"grey63", {0.631373 , 0.631373 , 0.631373 }},
1116     {"grey64", {0.639216 , 0.639216 , 0.639216 }},
1117     {"grey65", {0.650980 , 0.650980 , 0.650980 }},
1118     {"grey66", {0.658824 , 0.658824 , 0.658824 }},
1119     {"grey67", {0.670588 , 0.670588 , 0.670588 }},
1120     {"grey68", {0.678431 , 0.678431 , 0.678431 }},
1121     {"grey69", {0.690196 , 0.690196 , 0.690196 }},
1122     {"grey7", {0.070588 , 0.070588 , 0.070588 }},
1123     {"grey70", {0.701961 , 0.701961 , 0.701961 }},
1124     {"grey71", {0.709804 , 0.709804 , 0.709804 }},
1125     {"grey72", {0.721569 , 0.721569 , 0.721569 }},
1126     {"grey73", {0.729412 , 0.729412 , 0.729412 }},
1127     {"grey74", {0.741176 , 0.741176 , 0.741176 }},
1128     {"grey75", {0.749020 , 0.749020 , 0.749020 }},
1129     {"grey76", {0.760784 , 0.760784 , 0.760784 }},
1130     {"grey77", {0.768627 , 0.768627 , 0.768627 }},
1131     {"grey78", {0.780392 , 0.780392 , 0.780392 }},
1132     {"grey79", {0.788235 , 0.788235 , 0.788235 }},
1133     {"grey8", {0.078431 , 0.078431 , 0.078431 }},
1134     {"grey80", {0.800000 , 0.800000 , 0.800000 }},
1135     {"grey81", {0.811765 , 0.811765 , 0.811765 }},
1136     {"grey82", {0.819608 , 0.819608 , 0.819608 }},
1137     {"grey83", {0.831373 , 0.831373 , 0.831373 }},
1138     {"grey84", {0.839216 , 0.839216 , 0.839216 }},
1139     {"grey85", {0.850980 , 0.850980 , 0.850980 }},
1140     {"grey86", {0.858824 , 0.858824 , 0.858824 }},
1141     {"grey87", {0.870588 , 0.870588 , 0.870588 }},
1142     {"grey88", {0.878431 , 0.878431 , 0.878431 }},
1143     {"grey89", {0.890196 , 0.890196 , 0.890196 }},
1144     {"grey9", {0.090196 , 0.090196 , 0.090196 }},
1145     {"grey90", {0.898039 , 0.898039 , 0.898039 }},
1146     {"grey91", {0.909804 , 0.909804 , 0.909804 }},
1147     {"grey92", {0.921569 , 0.921569 , 0.921569 }},
1148     {"grey93", {0.929412 , 0.929412 , 0.929412 }},
1149     {"grey94", {0.941176 , 0.941176 , 0.941176 }},
1150     {"grey95", {0.949020 , 0.949020 , 0.949020 }},
1151     {"grey96", {0.960784 , 0.960784 , 0.960784 }},
1152     {"grey97", {0.968627 , 0.968627 , 0.968627 }},
1153     {"grey98", {0.980392 , 0.980392 , 0.980392 }},
1154     {"grey99", {0.988235 , 0.988235 , 0.988235 }},
1155     {"honeydew", {0.941176 , 1.000000 , 0.941176 }},
1156     {"honeydew1", {0.941176 , 1.000000 , 0.941176 }},
1157     {"honeydew2", {0.878431 , 0.933333 , 0.878431 }},
1158     {"honeydew3", {0.756863 , 0.803922 , 0.756863 }},
1159     {"honeydew4", {0.513725 , 0.545098 , 0.513725 }},
1160     {"hot_pink", {1.000000 , 0.411765 , 0.705882 }},
1161     {"indian_red", {0.803922 , 0.360784 , 0.360784 }},
1162     {"ivory", {1.000000 , 1.000000 , 0.941176 }},
1163     {"ivory1", {1.000000 , 1.000000 , 0.941176 }},
1164     {"ivory2", {0.933333 , 0.933333 , 0.878431 }},
1165     {"ivory3", {0.803922 , 0.803922 , 0.756863 }},
1166     {"ivory4", {0.545098 , 0.545098 , 0.513725 }},
1167     {"khaki", {0.941176 , 0.901961 , 0.549020 }},
1168     {"khaki1", {1.000000 , 0.964706 , 0.560784 }},
1169     {"khaki2", {0.933333 , 0.901961 , 0.521569 }},
1170     {"khaki3", {0.803922 , 0.776471 , 0.450980 }},
1171     {"khaki4", {0.545098 , 0.525490 , 0.305882 }},
1172     {"lavender", {0.901961 , 0.901961 , 0.980392 }},
1173     {"lavender_blush", {1.000000 , 0.941176 , 0.960784 }},
1174     {"lawn_green", {0.486275 , 0.988235 , 0.000000 }},
1175     {"lemon_chiffon", {1.000000 , 0.980392 , 0.803922 }},
1176     {"light_blue", {0.678431 , 0.847059 , 0.901961 }},
1177     {"light_coral", {0.941176 , 0.501961 , 0.501961 }},
1178     {"light_cyan", {0.878431 , 1.000000 , 1.000000 }},
1179     {"light_goldenrod", {0.933333 , 0.866667 , 0.509804 }},
1180     {"light_goldenrod_yellow", {0.980392 , 0.980392 , 0.823529 }},
1181     {"light_gray", {0.827451 , 0.827451 , 0.827451 }},
1182     {"light_grey", {0.827451 , 0.827451 , 0.827451 }},
1183     {"light_pink", {1.000000 , 0.713725 , 0.756863 }},
1184     {"light_salmon", {1.000000 , 0.627451 , 0.478431 }},
1185     {"light_sea_green", {0.125490 , 0.698039 , 0.666667 }},
1186     {"light_sky_blue", {0.529412 , 0.807843 , 0.980392 }},
1187     {"light_slate_blue", {0.517647 , 0.439216 , 1.000000 }},
1188     {"light_slate_gray", {0.466667 , 0.533333 , 0.600000 }},
1189     {"light_slate_grey", {0.466667 , 0.533333 , 0.600000 }},
1190     {"light_steel_blue", {0.690196 , 0.768627 , 0.870588 }},
1191     {"light_yellow", {1.000000 , 1.000000 , 0.878431 }},
1192     {"lime_green", {0.196078 , 0.803922 , 0.196078 }},
1193     {"linen", {0.980392 , 0.941176 , 0.901961 }},
1194     {"magenta", {1.000000 , 0.000000 , 1.000000 }},
1195     {"magenta1", {1.000000 , 0.000000 , 1.000000 }},
1196     {"magenta2", {0.933333 , 0.000000 , 0.933333 }},
1197     {"magenta3", {0.803922 , 0.000000 , 0.803922 }},
1198     {"magenta4", {0.545098 , 0.000000 , 0.545098 }},
1199     {"maroon", {0.690196 , 0.188235 , 0.376471 }},
1200     {"maroon1", {1.000000 , 0.203922 , 0.701961 }},
1201     {"maroon2", {0.933333 , 0.188235 , 0.654902 }},
1202     {"maroon3", {0.803922 , 0.160784 , 0.564706 }},
1203     {"maroon4", {0.545098 , 0.109804 , 0.384314 }},
1204     {"medium_aquamarine", {0.400000 , 0.803922 , 0.666667 }},
1205     {"medium_blue", {0.000000 , 0.000000 , 0.803922 }},
1206     {"medium_orchid", {0.729412 , 0.333333 , 0.827451 }},
1207     {"medium_purple", {0.576471 , 0.439216 , 0.858824 }},
1208     {"medium_sea_green", {0.235294 , 0.701961 , 0.443137 }},
1209     {"medium_slate_blue", {0.482353 , 0.407843 , 0.933333 }},
1210     {"medium_spring_green", {0.000000 , 0.980392 , 0.603922 }},
1211     {"medium_turquoise", {0.282353 , 0.819608 , 0.800000 }},
1212     {"medium_violet_red", {0.780392 , 0.082353 , 0.521569 }},
1213     {"midnight_blue", {0.098039 , 0.098039 , 0.439216 }},
1214     {"mint_cream", {0.960784 , 1.000000 , 0.980392 }},
1215     {"misty_rose", {1.000000 , 0.894118 , 0.882353 }},
1216     {"moccasin", {1.000000 , 0.894118 , 0.709804 }},
1217     {"navajo_white", {1.000000 , 0.870588 , 0.678431 }},
1218     {"navy", {0.000000 , 0.000000 , 0.501961 }},
1219     {"navy_blue", {0.000000 , 0.000000 , 0.501961 }},
1220     {"old_lace", {0.992157 , 0.960784 , 0.901961 }},
1221     {"olive_drab", {0.419608 , 0.556863 , 0.137255 }},
1222     {"orange", {1.000000 , 0.647059 , 0.000000 }},
1223     {"orange1", {1.000000 , 0.647059 , 0.000000 }},
1224     {"orange2", {0.933333 , 0.603922 , 0.000000 }},
1225     {"orange3", {0.803922 , 0.521569 , 0.000000 }},
1226     {"orange4", {0.545098 , 0.352941 , 0.000000 }},
1227     {"orange_red", {1.000000 , 0.270588 , 0.000000 }},
1228     {"orchid", {0.854902 , 0.439216 , 0.839216 }},
1229     {"orchid1", {1.000000 , 0.513725 , 0.980392 }},
1230     {"orchid2", {0.933333 , 0.478431 , 0.913725 }},
1231     {"orchid3", {0.803922 , 0.411765 , 0.788235 }},
1232     {"orchid4", {0.545098 , 0.278431 , 0.537255 }},
1233     {"pale_goldenrod", {0.933333 , 0.909804 , 0.666667 }},
1234     {"pale_green", {0.596078 , 0.984314 , 0.596078 }},
1235     {"pale_turquoise", {0.686275 , 0.933333 , 0.933333 }},
1236     {"pale_violet_red", {0.858824 , 0.439216 , 0.576471 }},
1237     {"papaya_whip", {1.000000 , 0.937255 , 0.835294 }},
1238     {"peach_puff", {1.000000 , 0.854902 , 0.725490 }},
1239     {"peru", {0.803922 , 0.521569 , 0.247059 }},
1240     {"pink", {1.000000 , 0.752941 , 0.796078 }},
1241     {"pink1", {1.000000 , 0.709804 , 0.772549 }},
1242     {"pink2", {0.933333 , 0.662745 , 0.721569 }},
1243     {"pink3", {0.803922 , 0.568627 , 0.619608 }},
1244     {"pink4", {0.545098 , 0.388235 , 0.423529 }},
1245     {"plum", {0.866667 , 0.627451 , 0.866667 }},
1246     {"plum1", {1.000000 , 0.733333 , 1.000000 }},
1247     {"plum2", {0.933333 , 0.682353 , 0.933333 }},
1248     {"plum3", {0.803922 , 0.588235 , 0.803922 }},
1249     {"plum4", {0.545098 , 0.400000 , 0.545098 }},
1250     {"powder_blue", {0.690196 , 0.878431 , 0.901961 }},
1251     {"purple", {0.627451 , 0.125490 , 0.941176 }},
1252     {"purple1", {0.607843 , 0.188235 , 1.000000 }},
1253     {"purple2", {0.568627 , 0.172549 , 0.933333 }},
1254     {"purple3", {0.490196 , 0.149020 , 0.803922 }},
1255     {"purple4", {0.333333 , 0.101961 , 0.545098 }},
1256     {"red", {1.000000 , 0.000000 , 0.000000 }},
1257     {"red1", {1.000000 , 0.000000 , 0.000000 }},
1258     {"red2", {0.933333 , 0.000000 , 0.000000 }},
1259     {"red3", {0.803922 , 0.000000 , 0.000000 }},
1260     {"red4", {0.545098 , 0.000000 , 0.000000 }},
1261     {"rosy_brown", {0.737255 , 0.560784 , 0.560784 }},
1262     {"royal_blue", {0.254902 , 0.411765 , 0.882353 }},
1263     {"saddle_brown", {0.545098 , 0.270588 , 0.074510 }},
1264     {"salmon", {0.980392 , 0.501961 , 0.447059 }},
1265     {"salmon1", {1.000000 , 0.549020 , 0.411765 }},
1266     {"salmon2", {0.933333 , 0.509804 , 0.384314 }},
1267     {"salmon3", {0.803922 , 0.439216 , 0.329412 }},
1268     {"salmon4", {0.545098 , 0.298039 , 0.223529 }},
1269     {"sandy_brown", {0.956863 , 0.643137 , 0.376471 }},
1270     {"sea_green", {0.180392 , 0.545098 , 0.341176 }},
1271     {"seashell", {1.000000 , 0.960784 , 0.933333 }},
1272     {"seashell1", {1.000000 , 0.960784 , 0.933333 }},
1273     {"seashell2", {0.933333 , 0.898039 , 0.870588 }},
1274     {"seashell3", {0.803922 , 0.772549 , 0.749020 }},
1275     {"seashell4", {0.545098 , 0.525490 , 0.509804 }},
1276     {"sienna", {0.627451 , 0.321569 , 0.176471 }},
1277     {"sienna1", {1.000000 , 0.509804 , 0.278431 }},
1278     {"sienna2", {0.933333 , 0.474510 , 0.258824 }},
1279     {"sienna3", {0.803922 , 0.407843 , 0.223529 }},
1280     {"sienna4", {0.545098 , 0.278431 , 0.149020 }},
1281     {"sky_blue", {0.529412 , 0.807843 , 0.921569 }},
1282     {"slate_blue", {0.415686 , 0.352941 , 0.803922 }},
1283     {"slate_gray", {0.439216 , 0.501961 , 0.564706 }},
1284     {"slate_grey", {0.439216 , 0.501961 , 0.564706 }},
1285     {"snow", {1.000000 , 0.980392 , 0.980392 }},
1286     {"snow1", {1.000000 , 0.980392 , 0.980392 }},
1287     {"snow2", {0.933333 , 0.913725 , 0.913725 }},
1288     {"snow3", {0.803922 , 0.788235 , 0.788235 }},
1289     {"snow4", {0.545098 , 0.537255 , 0.537255 }},
1290     {"spring_green", {0.000000 , 1.000000 , 0.498039 }},
1291     {"steel_blue", {0.274510 , 0.509804 , 0.705882 }},
1292     {"tan", {0.823529 , 0.705882 , 0.549020 }},
1293     {"tan1", {1.000000 , 0.647059 , 0.309804 }},
1294     {"tan2", {0.933333 , 0.603922 , 0.286275 }},
1295     {"tan3", {0.803922 , 0.521569 , 0.247059 }},
1296     {"tan4", {0.545098 , 0.352941 , 0.168627 }},
1297     {"thistle", {0.847059 , 0.749020 , 0.847059 }},
1298     {"thistle1", {1.000000 , 0.882353 , 1.000000 }},
1299     {"thistle2", {0.933333 , 0.823529 , 0.933333 }},
1300     {"thistle3", {0.803922 , 0.709804 , 0.803922 }},
1301     {"thistle4", {0.545098 , 0.482353 , 0.545098 }},
1302     {"tomato", {1.000000 , 0.388235 , 0.278431 }},
1303     {"tomato1", {1.000000 , 0.388235 , 0.278431 }},
1304     {"tomato2", {0.933333 , 0.360784 , 0.258824 }},
1305     {"tomato3", {0.803922 , 0.309804 , 0.223529 }},
1306     {"tomato4", {0.545098 , 0.211765 , 0.149020 }},
1307     {"turquoise", {0.250980 , 0.878431 , 0.815686 }},
1308     {"turquoise1", {0.000000 , 0.960784 , 1.000000 }},
1309     {"turquoise2", {0.000000 , 0.898039 , 0.933333 }},
1310     {"turquoise3", {0.000000 , 0.772549 , 0.803922 }},
1311     {"turquoise4", {0.000000 , 0.525490 , 0.545098 }},
1312     {"violet", {0.933333 , 0.509804 , 0.933333 }},
1313     {"violet_red", {0.815686 , 0.125490 , 0.564706 }},
1314     {"wheat", {0.960784 , 0.870588 , 0.701961 }},
1315     {"wheat1", {1.000000 , 0.905882 , 0.729412 }},
1316     {"wheat2", {0.933333 , 0.847059 , 0.682353 }},
1317     {"wheat3", {0.803922 , 0.729412 , 0.588235 }},
1318     {"wheat4", {0.545098 , 0.494118 , 0.400000 }},
1319     {"white", {1.000000 , 1.000000 , 1.000000 }},
1320     {"white_smoke", {0.960784 , 0.960784 , 0.960784 }},
1321     {"yellow", {1.000000 , 1.000000 , 0.000000 }},
1322     {"yellow1", {1.000000 , 1.000000 , 0.000000 }},
1323     {"yellow2", {0.933333 , 0.933333 , 0.000000 }},
1324     {"yellow3", {0.803922 , 0.803922 , 0.000000 }},
1325     {"yellow4", {0.545098 , 0.545098 , 0.000000 }},
1326     {"yellow_green", {0.603922 , 0.803922 , 0.196078} }
1327 greg 2.2 } ;
1328    
1329     int
1330     LookupColorByName(name, color)
1331     char * name ;
1332     Vec color ;
1333     {
1334     int rc ;
1335     rc = BinarySearch(name, 0, NCOLORS - 1 , Colors) ;
1336     if (rc < 0) {
1337     return(0) ;
1338     }
1339    
1340     VecCopy(Colors[rc].ce_color, color) ;
1341     return 1 ;
1342     }
1343    
1344    
1345     int
1346     BinarySearch(name, l, h, array)
1347     char * name ;
1348     int l, h ;
1349     ColorEntry array[] ;
1350     {
1351     int m, rc ;
1352     if (l > h)
1353     return(-1) ;
1354    
1355     m = (l + h) / 2 ;
1356    
1357     rc = strcmp(name, array[m].ce_name) ;
1358     if (rc == 0)
1359     return m ;
1360     else if (rc < 0)
1361     return BinarySearch(name, l, m-1, array) ;
1362     else
1363     return BinarySearch(name, m + 1, h, array) ;
1364 greg 1.1 }