home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 8 / CDASC08.ISO / NEWS / RADIANCE / SRC / CV / NFF2RAD.C < prev    next >
C/C++ Source or Header  |  1993-10-07  |  54KB  |  1,366 lines

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