#include "xlib.h" #include "scheme48.h" s48_value scx_Free_Pixmap (s48_value Xdisplay, s48_value Xpixmap){ XFreePixmap (SCX_EXTRACT_DISPLAY(Xdisplay), SCX_EXTRACT_PIXMAP(Xpixmap)); return S48_UNSPECIFIC; } s48_value scx_Create_Pixmap (s48_value Xdisplay, s48_value Xdrawable, s48_value w, s48_value h, s48_value depth){ Pixmap pm = XCreatePixmap (SCX_EXTRACT_DISPLAY(Xdisplay), SCX_EXTRACT_DRAWABLE(Xdrawable), (int)s48_extract_integer (w), (int)s48_extract_integer (h), (int)s48_extract_integer (depth)); return SCX_ENTER_PIXMAP(pm); } s48_value scx_Create_Bitmap_From_Data (s48_value Xdisplay, s48_value Xdrawable, s48_value data, s48_value w, s48_value h){ Pixmap pm = XCreateBitmapFromData (SCX_EXTRACT_DISPLAY(Xdisplay), SCX_EXTRACT_DRAWABLE(Xdrawable), s48_extract_string(data), s48_extract_integer(w), s48_extract_integer(h)); return SCX_ENTER_PIXMAP(pm); } s48_value scx_Create_Pixmap_From_Bitmap_Data (s48_value Xdisplay, s48_value Xdrawable, s48_value data, s48_value w,s48_value h, s48_value f, s48_value b, s48_value d){ Pixmap pm = XCreatePixmapFromBitmapData (SCX_EXTRACT_DISPLAY(Xdisplay), SCX_EXTRACT_DRAWABLE(Xdrawable), s48_extract_string(data), (int)s48_extract_integer(w), (int)s48_extract_integer(h), s48_extract_integer(f), s48_extract_integer(b), (int)s48_extract_integer(d)); return SCX_ENTER_PIXMAP(pm); } s48_value scx_Read_Bitmap_File (s48_value Xdisplay, s48_value Xdrawable, s48_value file){ unsigned width, height; int res, xhot, yhot; Pixmap bitmap; s48_value ret = S48_FALSE; S48_DECLARE_GC_PROTECT(1); // Not used: Disable_Interrupts; res = XReadBitmapFile (SCX_EXTRACT_DISPLAY(Xdisplay), SCX_EXTRACT_DRAWABLE(Xdrawable), s48_extract_string(file), &width, &height, &bitmap, &xhot, &yhot); // Not used: Enable_Interrupts; if (res != BitmapSuccess){ return Bit_To_Symbol ((unsigned long)ret, Bitmapstatus_Syms); } S48_GC_PROTECT_1 (ret); ret = s48_cons (s48_enter_integer(yhot), S48_NULL); ret = s48_cons (s48_enter_integer(xhot), ret); ret = s48_cons (s48_enter_integer(height), ret); ret = s48_cons (s48_enter_integer(width), ret); ret = s48_cons (SCX_ENTER_PIXMAP(bitmap), ret); S48_GC_UNPROTECT(); return ret; } s48_value scx_Write_Bitmap_File (s48_value Xdisplay, s48_value file, s48_value Xbitmap, s48_value w, s48_value h, s48_value x, s48_value y){ int ret; // Not used: Disable_Interrupts; ret = XWriteBitmapFile (SCX_EXTRACT_DISPLAY(Xdisplay), s48_extract_string(file), SCX_EXTRACT_PIXMAP(Xbitmap), (int)s48_extract_integer(w), (int)s48_extract_integer(h), (int)s48_extract_integer(x), (int)s48_extract_integer(y)); // Enable_Interrupts; return Bit_To_Symbol ((unsigned long)ret, Bitmapstatus_Syms); } void scx_init_pixmap(void) { S48_EXPORT_FUNCTION(scx_Free_Pixmap); S48_EXPORT_FUNCTION(scx_Create_Pixmap); S48_EXPORT_FUNCTION(scx_Create_Bitmap_From_Data); S48_EXPORT_FUNCTION(scx_Create_Pixmap_From_Bitmap_Data); S48_EXPORT_FUNCTION(scx_Read_Bitmap_File); S48_EXPORT_FUNCTION(scx_Write_Bitmap_File); }