/** versions
** Created htmlcolours.c <-- logtim/scanning.c 2010-01-30
** Stable version 2014-02-22
** MIT-licence 2014-05-31
**/
/*******************************************************************************
** Copyright (C) 2014 by Harm J. Schoonhoven
**
** Permission is hereby granted, free of charge, to any person obtaining a copy
** of this software and associated documentation files (the "Software"), to deal
** in the Software without restriction, including without limitation the rights
** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
** copies of the Software, and to permit persons to whom the Software is
** furnished to do so, subject to the following conditions:
**
** The above copyright notice and this permission notice shall be included in
** all copies or substantial portions of the Software.
**
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
** THE SOFTWARE.
**
** Mail to: info@harmjschoonhoven.com
**
*******************************************************************************/
#include
#include
#include
#include
#ifndef BOOL
typedef int BOOL;
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define FORI(n) for(i=0;i<(n);i++)
#include "htmlcolours.h"
#define NHTMLCOLOUR 147
typedef struct {
char * name;
int r,g,b;
} STR_HTMLCOLOUR;
static STR_HTMLCOLOUR htmlcolours[NHTMLCOLOUR]={
{"aliceblue",240,248,255},
{"antiquewhite",250,235,215},
{"aqua",0,255,255},
{"aquamarine",127,255,212},
{"azure",240,255,255},
{"beige",245,245,220},
{"bisque",255,228,196},
{"black",0,0,0},
{"blanchedalmond",255,235,205},
{"blue",0,0,255},
{"blueviolet",138,43,226},
{"brown",165,42,42},
{"burlywood",222,184,135},
{"cadetblue",95,158,160},
{"chartreuse",127,255,0},
{"chocolate",210,105,30},
{"coral",255,127,80},
{"cornflowerblue",100,149,237},
{"cornsilk",255,248,220},
{"crimson",220,20,60},
{"cyan",0,255,255},
{"darkblue",0,0,139},
{"darkcyan",0,139,139},
{"darkgoldenrod",184,134,11},
{"darkgray",169,169,169},
{"darkgreen",0,100,0},
{"darkgrey",169,169,169},
{"darkkhaki",189,183,107},
{"darkmagenta",139,0,139},
{"darkolivegreen",85,107,47},
{"darkorange",255,140,0},
{"darkorchid",153,50,204},
{"darkred",139,0,0},
{"darksalmon",233,150,122},
{"darkseagreen",143,188,143},
{"darkslateblue",72,61,139},
{"darkslategray",47,79,79},
{"darkslategrey",47,79,79},
{"darkturquoise",0,206,209},
{"darkviolet",148,0,211},
{"deeppink",255,20,147},
{"deepskyblue",0,191,255},
{"dimgray",105,105,105},
{"dimgrey",105,105,105},
{"dodgerblue",30,144,255},
{"firebrick",178,34,34},
{"floralwhite",255,250,240},
{"forestgreen",34,139,34},
{"fuchsia",255,0,255},
{"gainsboro",220,220,220},
{"ghostwhite",248,248,255},
{"gold",255,215,0},
{"goldenrod",218,165,32},
{"gray",128,128,128},
{"green",0,128,0},
{"greenyellow",173,255,47},
{"grey",128,128,128},
{"honeydew",240,255,240},
{"hotpink",255,105,180},
{"indianred",205,92,92},
{"indigo",75,0,130},
{"ivory",255,255,240},
{"khaki",240,230,140},
{"lavender",230,230,250},
{"lavenderblush",255,240,245},
{"lawngreen",124,252,0},
{"lemonchiffon",255,250,205},
{"lightblue",173,216,230},
{"lightcoral",240,128,128},
{"lightcyan",224,255,255},
{"lightgoldenrodyellow",250,250,210},
{"lightgray",211,211,211},
{"lightgreen",144,238,144},
{"lightgrey",211,211,211},
{"lightpink",255,182,193},
{"lightsalmon",255,160,122},
{"lightseagreen",32,178,170},
{"lightskyblue",135,206,250},
{"lightslategray",119,136,153},
{"lightslategrey",119,136,153},
{"lightsteelblue",176,196,222},
{"lightyellow",255,255,224},
{"lime",0,255,0},
{"limegreen",50,205,50},
{"linen",250,240,230},
{"magenta",255,0,255},
{"maroon",128,0,0},
{"mediumaquamarine",102,205,170},
{"mediumblue",0,0,205},
{"mediumorchid",186,85,211},
{"mediumpurple",147,112,219},
{"mediumseagreen",60,179,113},
{"mediumslateblue",123,104,238},
{"mediumspringgreen",0,250,154},
{"mediumturquoise",72,209,204},
{"mediumvioletred",199,21,133},
{"midnightblue",25,25,112},
{"mintcream",245,255,250},
{"mistyrose",255,228,225},
{"moccasin",255,228,181},
{"navajowhite",255,222,173},
{"navy",0,0,128},
{"oldlace",253,245,230},
{"olive",128,128,0},
{"olivedrab",107,142,35},
{"orange",255,165,0},
{"orangered",255,69,0},
{"orchid",218,112,214},
{"palegoldenrod",238,232,170},
{"palegreen",152,251,152},
{"paleturquoise",175,238,238},
{"palevioletred",219,112,147},
{"papayawhip",255,239,213},
{"peachpuff",255,218,185},
{"peru",205,133,63},
{"pink",255,192,203},
{"plum",221,160,221},
{"powderblue",176,224,230},
{"purple",128,0,128},
{"red",255,0,0},
{"rosybrown",188,143,143},
{"royalblue",65,105,225},
{"saddlebrown",139,69,19},
{"salmon",250,128,114},
{"sandybrown",244,164,96},
{"seagreen",46,139,87},
{"seashell",255,245,238},
{"sienna",160,82,45},
{"silver",192,192,192},
{"skyblue",135,206,235},
{"slateblue",106,90,205},
{"slategray",112,128,144},
{"slategrey",112,128,144},
{"snow",255,250,250},
{"springgreen",0,255,127},
{"steelblue",70,130,180},
{"tan",210,180,140},
{"teal",0,128,128},
{"thistle",216,191,216},
{"tomato",255,99,71},
{"turquoise",64,224,208},
{"violet",238,130,238},
{"wheat",245,222,179},
{"white",255,255,255},
{"whitesmoke",245,245,245},
{"yellow",255,255,0},
{"yellowgreen",154,205,50}
};
void
Writehtmlcolours(FILE * writeto)
{
int i;
FORI(NHTMLCOLOUR)
{
fprintf(writeto,"%3d %-21s %03d/%03d/%03d #%02x%02x%02x %3d\n",i,htmlcolours[i].name,htmlcolours[i].r,htmlcolours[i].g,htmlcolours[i].b,htmlcolours[i].r,htmlcolours[i].g,htmlcolours[i].b,i);
}
}
void
Htmlcolours(FILE * writehtml)
{
int i;
fprintf(writehtml,"\n");
fprintf(writehtml,"\n");
fprintf(writehtml,"\n");
fprintf(writehtml,"\n");
fprintf(writehtml,"HTML colournames\n");
fprintf(writehtml,"\n");
fprintf(writehtml,"\n");
fprintf(writehtml," Known colournames
\n");
FORI(NHTMLCOLOUR)
{
fprintf(writehtml,"\n",htmlcolours[i].r,htmlcolours[i].g,htmlcolours[i].b);
fprintf(writehtml,"∎\n");
fprintf(writehtml,"\n");
fprintf(writehtml,"%s %d/%d/%d #%02x%02x%02x
\n",htmlcolours[i].name,htmlcolours[i].r,htmlcolours[i].g,htmlcolours[i].b,htmlcolours[i].r,htmlcolours[i].g,htmlcolours[i].b);
}
fprintf(writehtml,"\n");
fprintf(writehtml,"\n");
}
BOOL
Readcolour(char * arg,int * pred, int * pgreen, int * pblue,BOOL (*ASk)(int * pr, int * pg, int * pb,char * message),char * message)
{
int i;
unsigned int hex;
BOOL nok;
if(arg && *arg && pred && pgreen && pblue)
{
if(strcmp(arg,"ask"))
{
if(*arg>='a' && *arg<='z')
{
FORI(NHTMLCOLOUR)if(!strcmp(arg,htmlcolours[i].name))break;
if(i>16)&0x00ff;
*pgreen=(hex>>8)&0x00ff;
*pblue=(hex)&0x00ff;
}
}
else
{
nok=(3!=sscanf(arg,"%d/%d/%d",pred,pgreen,pblue));
}
}
else
{
if(*pred<0 || *pred>255)*pred=0;
if(*pgreen<0 || *pgreen>255)*pgreen=0;
if(*pblue<0 || *pblue>255)*pblue=0;
if(ASk)nok=ASk(pred,pgreen,pblue,message);
else nok=TRUE;
}
}
else nok=TRUE;
return(nok);
}
char *
Colourstring(int r,int g,int b,enum ENUM_COLOURTEXT colourtext)
{
static char colourstring[40];
STR_HTMLCOLOUR * ph;
STR_HTMLCOLOUR * bydh;
*colourstring=0;
switch(colourtext)
{
case COLOURTEXT_HEX:
sprintf(colourstring,"#%02x%02x%02x",r,g,b);
break;
case COLOURTEXT_HTML:
bydh=htmlcolours+NHTMLCOLOUR;
for(ph=htmlcolours;phr==r && ph->g==g && ph->b==b)break;
if(phname);
break;
case COLOURTEXT_RGB:
sprintf(colourstring,"%d/%d/%d",r,g,b);
break;
}
return(colourstring);
}