ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/nff2rad.c
Revision: 2.7
Committed: Sat Nov 15 17:54:06 2003 UTC (20 years, 11 months ago) by schorsch
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R4, rad5R2, rad4R2P2, rad5R0, rad5R1, rad3R7P2, rad3R7P1, rad4R2, rad4R1, rad4R0, rad3R6, rad3R6P1, rad3R8, rad3R9, rad4R2P1, rad5R3, HEAD
Changes since 2.6: +76 -41 lines
Log Message:
Continued ANSIfication and reduced compile warnings.

File Contents

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