#include "xlib.h" #include "scheme48.h" s48_value Free_Colormap (s48_value Xcolormap, s48_value Xdisplay) { Display* dpy = EXTRACT_DISPLAY(Xdisplay); Colormap cm = EXTRACT_COLORMAP(Xcolormap); XFreeColormap(dpy, cm); return S48_UNSPECIFIC; } s48_value Alloc_Color(s48_value Xcolormap, s48_value Xcolor, s48_value Xdisplay) { XColor* cp = EXTRACT_COLOR(Xcolor); Colormap cm = EXTRACT_COLORMAP(Xcolormap); Display* dpy = EXTRACT_DISPLAY(Xdisplay); int r; r = XAllocColor (dpy, cm, cp); if (!r) return S48_FALSE; else return ENTER_PIXEL(cp->pixel); } s48_value Alloc_Named_Color(s48_value Xcolormap, s48_value color_name, s48_value Xdisplay) { Colormap cm = EXTRACT_COLORMAP(Xcolormap); Display* dpy = EXTRACT_DISPLAY(Xdisplay); XColor screen, exact; int r; s48_value ret; S48_DECLARE_GC_PROTECT(1); r = XAllocNamedColor (dpy, cm, s48_extract_string(color_name), &screen, &exact); if (!r) return S48_FALSE; S48_GC_PROTECT_1(ret); ret = s48_cons(Int_Extract_RGB_Values(exact), S48_NULL); ret = s48_cons(Int_Extract_RGB_Values(screen), ret); ret = s48_cons(ENTER_PIXEL(screen.pixel), ret); S48_GC_UNPROTECT(); return ret; } void s48_init_colormap(void) { S48_EXPORT_FUNCTION(Free_Colormap); S48_EXPORT_FUNCTION(Alloc_Color); S48_EXPORT_FUNCTION(Alloc_Named_Color); }