#include "xlib.h" s48_value Enter_Visual_And_Visual_Info(XVisualInfo* vi) { s48_value t = s48_make_vector(10, S48_FALSE); S48_DECLARE_GC_PROTECT(1); S48_GC_PROTECT_1(t); S48_VECTOR_SET(t, 0, s48_enter_integer(vi->visualid)); S48_VECTOR_SET(t, 1, s48_enter_fixnum(vi->screen)); S48_VECTOR_SET(t, 2, s48_enter_fixnum(vi->depth)); S48_VECTOR_SET(t, 3, s48_enter_integer(vi->class)); S48_VECTOR_SET(t, 4, s48_enter_integer(vi->red_mask)); S48_VECTOR_SET(t, 5, s48_enter_integer(vi->green_mask)); S48_VECTOR_SET(t, 6, s48_enter_integer(vi->blue_mask)); S48_VECTOR_SET(t, 7, s48_enter_integer(vi->colormap_size)); S48_VECTOR_SET(t, 8, s48_enter_fixnum(vi->bits_per_rgb)); t = s48_cons(s48_enter_integer(VisualAllMask), t); t = s48_cons(SCX_ENTER_VISUAL(vi->visual), t); S48_GC_UNPROTECT(); return t; } unsigned long Extract_Visual_Info(s48_value vi, XVisualInfo* VI) { unsigned long mask = s48_extract_integer(S48_CAR(vi)); s48_value v = S48_CDR(vi); if (mask & VisualIDMask) VI->visualid = s48_extract_integer(S48_VECTOR_REF(v, 0)); if (mask & VisualScreenMask) VI->screen = s48_extract_integer(S48_VECTOR_REF(v, 1)); if (mask & VisualDepthMask) VI->depth = s48_extract_integer(S48_VECTOR_REF(v, 2)); if (mask & VisualClassMask) VI->class = s48_extract_integer(S48_VECTOR_REF(v, 3)); if (mask & VisualRedMaskMask) VI->red_mask = s48_extract_integer(S48_VECTOR_REF(v, 4)); if (mask & VisualGreenMaskMask) VI->green_mask = s48_extract_integer(S48_VECTOR_REF(v, 5)); if (mask & VisualBlueMaskMask) VI->blue_mask = s48_extract_integer(S48_VECTOR_REF(v, 6)); if (mask & VisualColormapSizeMask) VI->colormap_size = s48_extract_integer(S48_VECTOR_REF(v, 7)); if (mask & VisualBitsPerRGBMask) VI->bits_per_rgb = s48_extract_integer(S48_VECTOR_REF(v, 8)); return mask; } s48_value scx_Get_Visual_Info(s48_value Xdisplay, s48_value v) { XVisualInfo template; XVisualInfo* visualList; int visualsMatch, i; long mask = VisualNoMask; s48_value res = S48_FALSE; S48_DECLARE_GC_PROTECT(1); mask = Extract_Visual_Info(v, &template); visualList = XGetVisualInfo( SCX_EXTRACT_DISPLAY(Xdisplay), mask, &template, &visualsMatch); res = s48_make_vector(visualsMatch, S48_FALSE); S48_GC_PROTECT_1(res); for (i=0; i