#include "xlib.h" s48_value scx_Create_Color(s48_value r, s48_value g, s48_value b) { s48_value col = S48_MAKE_VALUE(XColor); XColor* c = S48_EXTRACT_VALUE_POINTER(col, XColor); c->red = s48_extract_integer(r); c->green = s48_extract_integer(g); c->blue = s48_extract_integer(b); return col; } s48_value scx_Int_Extract_RGB_Values(XColor col) { s48_value res = S48_NULL; S48_DECLARE_GC_PROTECT(1); S48_GC_PROTECT_1(res); res = s48_cons( s48_enter_integer(col.blue), res ); res = s48_cons( s48_enter_integer(col.green), res ); res = s48_cons( s48_enter_integer(col.red), res ); S48_GC_UNPROTECT(); return res; } s48_value scx_Extract_RGB_Values(s48_value Xcolor) { return scx_Int_Extract_RGB_Values(*SCX_EXTRACT_COLOR(Xcolor)); } s48_value scx_Query_Color (s48_value Xcolormap, s48_value Xpixel, s48_value Xdisplay) { XColor c; c.pixel = SCX_EXTRACT_PIXEL(Xpixel); XQueryColor(SCX_EXTRACT_DISPLAY(Xdisplay), SCX_EXTRACT_COLORMAP(Xcolormap), &c); return scx_Int_Extract_RGB_Values(c); } s48_value scx_Query_Colors(s48_value Xcolormap, s48_value Xpixels, s48_value Xdisplay) { s48_value result = S48_FALSE; S48_DECLARE_GC_PROTECT(1); long n = S48_VECTOR_LENGTH(Xpixels); XColor p[n]; int i; for (i=0; i < n; i++) p[i].pixel = SCX_EXTRACT_PIXEL(S48_VECTOR_REF(Xpixels, i)); XQueryColors( SCX_EXTRACT_DISPLAY(Xdisplay), SCX_EXTRACT_COLORMAP(Xcolormap), p, n ); S48_GC_PROTECT_1(result); result = s48_make_vector(n, S48_FALSE); for (i=0; i < n; i++) S48_VECTOR_SET(result, i, scx_Int_Extract_RGB_Values(p[i])); S48_GC_UNPROTECT(); return result; } s48_value scx_Lookup_Color(s48_value Xcolormap, s48_value Xdisplay, s48_value color_name) { XColor visual, exact; s48_value res = S48_FALSE; S48_DECLARE_GC_PROTECT(1); if (XLookupColor( SCX_EXTRACT_DISPLAY(Xdisplay), SCX_EXTRACT_COLORMAP(Xcolormap), s48_extract_string(color_name), &visual, &exact )) { S48_GC_PROTECT_1(res); res = scx_Int_Extract_RGB_Values( visual ); res = s48_cons(res, scx_Int_Extract_RGB_Values( exact ) ); } S48_GC_UNPROTECT(); return res; } void scx_init_color(void) { S48_EXPORT_FUNCTION(scx_Create_Color); S48_EXPORT_FUNCTION(scx_Extract_RGB_Values); S48_EXPORT_FUNCTION(scx_Query_Color); S48_EXPORT_FUNCTION(scx_Query_Colors); S48_EXPORT_FUNCTION(scx_Lookup_Color); }