diff --git a/c/algo_color.c b/c/algo_color.c new file mode 100644 index 0000000..5c601db --- /dev/null +++ b/c/algo_color.c @@ -0,0 +1,200 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dtypes.h" +#include "utils.h" +#include "utf8.h" +#include "ios.h" +#include "socket.h" +#include "timefuncs.h" +#include "hashing.h" +#include "htable.h" +#include "htableh_inc.h" +#include "bitvector.h" +#include "os.h" +#include "random.h" +#include "llt.h" + +#include "flisp.h" + +#include "argcount.h" +#include "builtins.h" + +static char color_name_table[] = + +":f0f8ff=aliceblue" +":faebd7=antiquewhite" +":00ffff=aqua" +":7fffd4=aquamarine" +":f0ffff=azure" +":f5f5dc=beige" +":ffe4c4=bisque" +":000000=black" +":ffebcd=blanchedalmond" +":0000ff=blue" +":8a2be2=blueviolet" +":a52a2a=brown" +":deb887=burlywood" +":5f9ea0=cadetblue" +":7fff00=chartreuse" +":d2691e=chocolate" +":ff7f50=coral" +":6495ed=cornflowerblue" +":fff8dc=cornsilk" +":dc143c=crimson" +":00ffff=cyan" +":00008b=darkblue" +":008b8b=darkcyan" +":b8860b=darkgoldenrod" +":a9a9a9=darkgray" +":006400=darkgreen" +":a9a9a9=darkgrey" +":bdb76b=darkkhaki" +":8b008b=darkmagenta" +":556b2f=darkolivegreen" +":ff8c00=darkorange" +":9932cc=darkorchid" +":8b0000=darkred" +":e9967a=darksalmon" +":8fbc8f=darkseagreen" +":483d8b=darkslateblue" +":2f4f4f=darkslategray" +":2f4f4f=darkslategrey" +":00ced1=darkturquoise" +":9400d3=darkviolet" +":ff1493=deeppink" +":00bfff=deepskyblue" +":696969=dimgray" +":696969=dimgrey" +":1e90ff=dodgerblue" +":b22222=firebrick" +":fffaf0=floralwhite" +":228b22=forestgreen" +":ff00ff=fuchsia" +":dcdcdc=gainsboro" +":f8f8ff=ghostwhite" +":ffd700=gold" +":daa520=goldenrod" +":808080=gray" +":008000=green" +":adff2f=greenyellow" +":808080=grey" +":f0fff0=honeydew" +":ff69b4=hotpink" +":cd5c5c=indianred" +":4b0082=indigo" +":fffff0=ivory" +":f0e68c=khaki" +":e6e6fa=lavender" +":fff0f5=lavenderblush" +":7cfc00=lawngreen" +":fffacd=lemonchiffon" +":add8e6=lightblue" +":f08080=lightcoral" +":e0ffff=lightcyan" +":fafad2=lightgoldenrodyellow" +":d3d3d3=lightgray" +":90ee90=lightgreen" +":d3d3d3=lightgrey" +":ffb6c1=lightpink" +":ffa07a=lightsalmon" +":20b2aa=lightseagreen" +":87cefa=lightskyblue" +":778899=lightslategray" +":778899=lightslategrey" +":b0c4de=lightsteelblue" +":ffffe0=lightyellow" +":00ff00=lime" +":32cd32=limegreen" +":faf0e6=linen" +":ff00ff=magenta" +":800000=maroon" +":66cdaa=mediumaquamarine" +":0000cd=mediumblue" +":ba55d3=mediumorchid" +":9370db=mediumpurple" +":3cb371=mediumseagreen" +":7b68ee=mediumslateblue" +":00fa9a=mediumspringgreen" +":48d1cc=mediumturquoise" +":c71585=mediumvioletred" +":191970=midnightblue" +":f5fffa=mintcream" +":ffe4e1=mistyrose" +":ffe4b5=moccasin" +":ffdead=navajowhite" +":000080=navy" +":fdf5e6=oldlace" +":808000=olive" +":6b8e23=olivedrab" +":ffa500=orange" +":ff4500=orangered" +":da70d6=orchid" +":eee8aa=palegoldenrod" +":98fb98=palegreen" +":afeeee=paleturquoise" +":db7093=palevioletred" +":ffefd5=papayawhip" +":ffdab9=peachpuff" +":cd853f=peru" +":ffc0cb=pink" +":dda0dd=plum" +":b0e0e6=powderblue" +":800080=purple" +":ff0000=red" +":bc8f8f=rosybrown" +":4169e1=royalblue" +":8b4513=saddlebrown" +":fa8072=salmon" +":f4a460=sandybrown" +":2e8b57=seagreen" +":fff5ee=seashell" +":a0522d=sienna" +":c0c0c0=silver" +":87ceeb=skyblue" +":6a5acd=slateblue" +":708090=slategray" +":708090=slategrey" +":fffafa=snow" +":00ff7f=springgreen" +":4682b4=steelblue" +":d2b48c=tan" +":008080=teal" +":d8bfd8=thistle" +":ff6347=tomato" +":40e0d0=turquoise" +":ee82ee=violet" +":f5deb3=wheat" +":ffffff=white" +":f5f5f5=whitesmoke" +":ffff00=yellow" +":9acd32=yellowgreen" +":"; + +value_t builtin_color_name_to_rgb24(value_t *args, uint32_t nargs) +{ + char key[24]; + const char *name; + const char *match; + + (void)args; + argcount("color-name->rgb24", nargs, 1); + name = tostring(args[0], "color-name"); + if (snprintf(key, sizeof(key), "=%s:", name) >= (int)sizeof(key)) + return FL_NIL; + if (!(match = strstr(color_name_table, key))) + return FL_NIL; + return string_from_cstrn(match - 6, 6); +} + +// hex3_to_rgb() {} +// hex6_to_rgb() {} diff --git a/c/builtins.h b/c/builtins.h index f833987..0db1c81 100644 --- a/c/builtins.h +++ b/c/builtins.h @@ -8,3 +8,5 @@ value_t builtin_user_real_gid(value_t *args, uint32_t nargs); value_t builtin_user_real_uid(value_t *args, uint32_t nargs); value_t builtin_read_ini_file(value_t *args, uint32_t nargs); + +value_t builtin_color_name_to_rgb24(value_t *args, uint32_t nargs); diff --git a/c/libraries.c b/c/libraries.c index 896401a..c539025 100644 --- a/c/libraries.c +++ b/c/libraries.c @@ -97,6 +97,8 @@ static struct builtin_procedure builtin_procedures[] = { { "user-real-gid", builtin_user_real_gid, SRFI_170 | UP_2019 }, { "user-real-uid", builtin_user_real_uid, SRFI_170 | UP_2019 }, + { "color-name->rgb24", builtin_color_name_to_rgb24, UP_2019 }, + { 0, 0, 0 }, }; diff --git a/scripts/build.sh b/scripts/build.sh index d75d911..ca800ee 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -2,6 +2,7 @@ set -eu os="$(uname | tr A-Z- a-z_)" o_files="" +o_files="$o_files algo_color.o" o_files="$o_files bitvector-ops.o" o_files="$o_files bitvector.o" o_files="$o_files buf.o" @@ -82,6 +83,7 @@ cd "$builddir" echo "Entering directory '$PWD'" set -x +$CC $CFLAGS -c ../c/algo_color.c $CC $CFLAGS -c ../c/bitvector-ops.c $CC $CFLAGS -c ../c/bitvector.c $CC $CFLAGS -c ../c/buf.c