fixed gc protection
This commit is contained in:
parent
6b05d8297e
commit
87b35c474c
|
@ -3,54 +3,61 @@
|
|||
#include "xlib.h"
|
||||
|
||||
s48_value scx_Load_Font(s48_value display, s48_value font_name) {
|
||||
return scx_enter_font(XLoadFont(scx_extract_display(display),
|
||||
s48_extract_string(font_name)));
|
||||
Font f;
|
||||
S48_DECLARE_GC_PROTECT_2(display, font_name);
|
||||
f = XLoadFont(scx_extract_display(display),
|
||||
s48_extract_string(font_name));
|
||||
S48_GC_RETURN(scx_enter_font(f));
|
||||
}
|
||||
|
||||
s48_value scx_Unload_Font(s48_value display, s48_value font) {
|
||||
S48_DECLARE_GC_PROTECT_2(display, font);
|
||||
XUnloadFont(scx_extract_display(display),
|
||||
scx_extract_font(font));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Query_Font(s48_value display, s48_value font) {
|
||||
XFontStruct* fs = XQueryFont(scx_extract_display(display),
|
||||
XFontStruct* fs;
|
||||
S48_DECLARE_GC_PROTECT_2(display, font);
|
||||
fs = XQueryFont(scx_extract_display(display),
|
||||
scx_extract_font(font));
|
||||
if (fs == NULL)
|
||||
return S48_FALSE;
|
||||
S48_GC_RETURN(S48_FALSE);
|
||||
else
|
||||
return scx_enter_fontstruct(fs);
|
||||
S48_GC_RETURN(scx_enter_fontstruct(fs));
|
||||
}
|
||||
|
||||
s48_value scx_Load_Query_Font(s48_value display, s48_value font_name) {
|
||||
XFontStruct* fs = XLoadQueryFont(scx_extract_display(display),
|
||||
XFontStruct* fs;
|
||||
S48_DECLARE_GC_PROTECT_2(display, font_name);
|
||||
fs = XLoadQueryFont(scx_extract_display(display),
|
||||
s48_extract_string(font_name));
|
||||
if (fs == NULL)
|
||||
return S48_FALSE;
|
||||
S48_GC_RETURN(S48_FALSE);
|
||||
else
|
||||
return scx_enter_fontstruct(fs);
|
||||
S48_GC_RETURN(scx_enter_fontstruct(fs));
|
||||
}
|
||||
|
||||
s48_value scx_Free_Font(s48_value display, s48_value fontstruct) {
|
||||
S48_DECLARE_GC_PROTECT_2(display, fontstruct);
|
||||
XFreeFont(scx_extract_display(display),
|
||||
scx_extract_fontstruct(fontstruct));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_List_Fonts(s48_value display, s48_value pattern, s48_value max) {
|
||||
s48_value res = S48_NULL;
|
||||
int i, count;
|
||||
char** fonts;
|
||||
S48_DECLARE_GC_PROTECT(1);
|
||||
S48_DECLARE_GC_PROTECT_4(display, pattern, max, res);
|
||||
|
||||
fonts = XListFonts(scx_extract_display(display), s48_extract_string(pattern),
|
||||
s48_extract_integer(max), &count);
|
||||
S48_GC_PROTECT_1(res);
|
||||
for (i = count; i > 0; i--)
|
||||
res = s48_cons(s48_enter_string(fonts[i-1]), res);
|
||||
S48_GC_UNPROTECT();
|
||||
XFreeFontNames(fonts);
|
||||
return res;
|
||||
S48_GC_RETURN(res);
|
||||
}
|
||||
|
||||
s48_value scx_List_Fonts_With_Info(s48_value display, s48_value pattern,
|
||||
|
@ -59,51 +66,48 @@ s48_value scx_List_Fonts_With_Info(s48_value display, s48_value pattern,
|
|||
int i, count;
|
||||
char** fonts;
|
||||
XFontStruct* infos;
|
||||
S48_DECLARE_GC_PROTECT(2);
|
||||
S48_DECLARE_GC_PROTECT_5(display, pattern, max, res, cell);
|
||||
|
||||
fonts = XListFontsWithInfo(scx_extract_display(display),
|
||||
s48_extract_string(pattern),
|
||||
s48_extract_integer(max), &count,
|
||||
&infos);
|
||||
S48_GC_PROTECT_2(res, cell);
|
||||
for (i = count; i > 0; i--) {
|
||||
cell = scx_enter_fontstruct(&infos[i-1]);
|
||||
cell = s48_cons(s48_enter_string(fonts[i-1]), cell);
|
||||
res = s48_cons(cell, res);
|
||||
}
|
||||
S48_GC_UNPROTECT();
|
||||
XFreeFontNames(fonts); /* FontStructs have to be freed later */
|
||||
return res;
|
||||
S48_GC_RETURN(res);
|
||||
}
|
||||
|
||||
s48_value scx_Set_Font_Path(s48_value display, s48_value dirs) {
|
||||
int i, n = s48_list_length(dirs);
|
||||
char* sa[n];
|
||||
s48_value l = dirs;
|
||||
S48_DECLARE_GC_PROTECT_3(display, dirs, l);
|
||||
for (i = 0; i < n; i++) {
|
||||
sa[i] = s48_extract_string(S48_CAR(l));
|
||||
l = S48_CDR(l);
|
||||
}
|
||||
XSetFontPath(scx_extract_display(display), sa, n);
|
||||
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Get_Font_Path(s48_value display) {
|
||||
int n, i;
|
||||
char** sa;
|
||||
s48_value res = S48_NULL;
|
||||
S48_DECLARE_GC_PROTECT(1);
|
||||
S48_DECLARE_GC_PROTECT_2(display, res);
|
||||
|
||||
sa = XGetFontPath(scx_extract_display(display), &n);
|
||||
|
||||
S48_GC_PROTECT_1(res);
|
||||
for (i = n; i > 0; i--)
|
||||
res = s48_cons(s48_enter_string(sa[i]), res);
|
||||
S48_GC_UNPROTECT();
|
||||
XFreeFontPath(sa);
|
||||
|
||||
return res;
|
||||
S48_GC_RETURN(res);
|
||||
}
|
||||
|
||||
/* TODO:
|
||||
|
|
|
@ -115,9 +115,11 @@ s48_value scx_enter_gc(GC gc) {
|
|||
|
||||
unsigned long scx_extract_gc_value_alist(s48_value values, XGCValues* GCV) {
|
||||
unsigned long mask = 0;
|
||||
s48_value v = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT_2(values, v);
|
||||
while (values != S48_NULL) {
|
||||
int mv = scx_extract_gc_value(S48_CAR(S48_CAR(values)));
|
||||
s48_value v = S48_CDR(S48_CAR(values));
|
||||
v = S48_CDR(S48_CAR(values));
|
||||
values = S48_CDR(values);
|
||||
mask = mask | (1L << mv);
|
||||
switch (1L << mv) {
|
||||
|
@ -169,11 +171,12 @@ unsigned long scx_extract_gc_value_alist(s48_value values, XGCValues* GCV) {
|
|||
GCV->arc_mode = scx_extract_arc_mode(v); break;
|
||||
}
|
||||
}
|
||||
S48_GC_UNPROTECT();
|
||||
return mask;
|
||||
}
|
||||
|
||||
static s48_value scx_enter_gc_value_alist(s48_value values, XGCValues* GCV) {
|
||||
S48_DECLARE_GC_PROTECT(1);
|
||||
S48_DECLARE_GC_PROTECT(3);
|
||||
s48_value res = S48_NULL;
|
||||
s48_value v = S48_FALSE;
|
||||
S48_GC_PROTECT_3(res, v, values);
|
||||
|
@ -181,7 +184,7 @@ static s48_value scx_enter_gc_value_alist(s48_value values, XGCValues* GCV) {
|
|||
int mv = scx_extract_gc_value(S48_CAR(values));
|
||||
switch (1L << mv) {
|
||||
case GCFunction:
|
||||
v = scx_extract_gc_function(GCV->function); break;
|
||||
v = scx_enter_gc_function(GCV->function); break;
|
||||
case GCPlaneMask:
|
||||
v = scx_enter_pixel(GCV->plane_mask); break;
|
||||
case GCForeground:
|
||||
|
@ -238,26 +241,31 @@ static s48_value scx_enter_gc_value_alist(s48_value values, XGCValues* GCV) {
|
|||
s48_value scx_Create_Gc(s48_value display, s48_value drawable,
|
||||
s48_value values) {
|
||||
XGCValues GCV;
|
||||
unsigned long mask = scx_extract_gc_value_alist(values, &GCV);
|
||||
unsigned long mask;
|
||||
S48_DECLARE_GC_PROTECT_3(display, drawable, values);
|
||||
mask = scx_extract_gc_value_alist(values, &GCV);
|
||||
GC gc = XCreateGC(scx_extract_display(display),
|
||||
scx_extract_drawable(drawable),
|
||||
mask, &GCV);
|
||||
return scx_enter_gc(gc);
|
||||
S48_GC_RETURN(scx_enter_gc(gc));
|
||||
}
|
||||
|
||||
s48_value scx_Copy_Gc(s48_value display, s48_value source, s48_value mask,
|
||||
s48_value dest) {
|
||||
S48_DECLARE_GC_PROTECT_4(display, source, mask, dest);
|
||||
XCopyGC(scx_extract_display(display), scx_extract_gc(source),
|
||||
scx_extract_gc_value_set(mask), scx_extract_gc(dest));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Change_Gc(s48_value display, s48_value gc, s48_value values) {
|
||||
XGCValues GCV;
|
||||
unsigned long mask = scx_extract_gc_value_alist(values, &GCV);
|
||||
unsigned long mask;
|
||||
S48_DECLARE_GC_PROTECT_3(display, gc, values);
|
||||
mask = scx_extract_gc_value_alist(values, &GCV);
|
||||
XChangeGC(scx_extract_display(display), scx_extract_gc(gc),
|
||||
mask, &GCV);
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
|
||||
|
@ -272,20 +280,22 @@ s48_value scx_Get_Gc_Values(s48_value display, s48_value gc,
|
|||
s48_value values) {
|
||||
unsigned long mask = 0;
|
||||
XGCValues GCV;
|
||||
S48_DECLARE_GC_PROTECT_3(display, gc, values);
|
||||
for (; values != S48_NULL; values = S48_CDR(values))
|
||||
mask |= (1L << scx_extract_gc_value(S48_CAR(values)));
|
||||
|
||||
if (!XGetGCValues(scx_extract_display(display),
|
||||
scx_extract_gc(gc),
|
||||
mask, &GCV))
|
||||
return S48_FALSE;
|
||||
S48_GC_RETURN(S48_FALSE);
|
||||
else
|
||||
return scx_enter_gc_value_alist(values, &GCV);
|
||||
S48_GC_RETURN(scx_enter_gc_value_alist(values, &GCV));
|
||||
}
|
||||
|
||||
s48_value scx_Free_Gc(s48_value display, s48_value gc) {
|
||||
S48_DECLARE_GC_PROTECT_2(display, gc);
|
||||
XFreeGC(scx_extract_display(display), scx_extract_gc(gc));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_GContext_From_Gc(s48_value gc) {
|
||||
|
@ -296,6 +306,7 @@ s48_value scx_Set_Dashes(s48_value display, s48_value gc, s48_value dashoffset,
|
|||
s48_value dashlist) {
|
||||
int i, n = s48_list_length(dashlist);
|
||||
char dl[n];
|
||||
S48_DECLARE_GC_PROTECT_4(display, gc, dashoffset, dashlist);
|
||||
for (i = 0; i < n; i++) {
|
||||
dl[i] = s48_extract_integer(S48_CAR(dashlist));
|
||||
dashlist = S48_CDR(dashlist);
|
||||
|
@ -303,7 +314,7 @@ s48_value scx_Set_Dashes(s48_value display, s48_value gc, s48_value dashoffset,
|
|||
XSetDashes(scx_extract_display(display), scx_extract_gc(gc),
|
||||
s48_extract_integer(dashoffset),
|
||||
dl, n);
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_rectangle_ordering_binding = S48_FALSE;
|
||||
|
@ -315,8 +326,11 @@ s48_value scx_Set_Clip_Rectangles(s48_value display, s48_value gc,
|
|||
s48_value rects, s48_value ordering) {
|
||||
int i, n = s48_list_length(rects);
|
||||
XRectangle crects[n];
|
||||
s48_value r = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT_7(display, gc, x_origin, y_origin, rects,
|
||||
ordering, r);
|
||||
for (i = 0; i < n; i++) {
|
||||
s48_value r = S48_CAR(rects);
|
||||
r = S48_CAR(rects);
|
||||
crects[i].x = s48_extract_integer(S48_CAR(r)); r = S48_CDR(r);
|
||||
crects[i].y = s48_extract_integer(S48_CAR(r)); r = S48_CDR(r);
|
||||
crects[i].width = s48_extract_integer(S48_CAR(r)); r = S48_CDR(r);
|
||||
|
@ -327,13 +341,15 @@ s48_value scx_Set_Clip_Rectangles(s48_value display, s48_value gc,
|
|||
s48_extract_integer(x_origin),
|
||||
s48_extract_integer(y_origin),
|
||||
crects, n, scx_extract_rectangle_ordering(ordering));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Query_Best_Size(s48_value screen, s48_value class,
|
||||
s48_value width, s48_value height) {
|
||||
unsigned int rw, rh;
|
||||
Screen* s = scx_extract_screen(screen);
|
||||
Screen* s;
|
||||
S48_DECLARE_GC_PROTECT_4(screen, class, width, height);
|
||||
s = scx_extract_screen(screen);
|
||||
|
||||
if (!XQueryBestSize(s->display,
|
||||
s48_extract_integer(class),
|
||||
|
@ -341,9 +357,9 @@ s48_value scx_Query_Best_Size(s48_value screen, s48_value class,
|
|||
(int)s48_extract_integer(width),
|
||||
(int)s48_extract_integer(height),
|
||||
&rw, &rh))
|
||||
return S48_FALSE;
|
||||
S48_GC_RETURN(S48_FALSE);
|
||||
else
|
||||
return s48_cons(s48_enter_fixnum(rw), s48_enter_fixnum(rh));
|
||||
S48_GC_RETURN(s48_cons(s48_enter_fixnum(rw), s48_enter_fixnum(rh)));
|
||||
}
|
||||
|
||||
void scx_init_gcontext(void) {
|
||||
|
|
|
@ -12,7 +12,10 @@ s48_value scx_Grab_Pointer(s48_value dpy, s48_value win,
|
|||
s48_value pmode, s48_value kmode,
|
||||
s48_value confine_to, s48_value cursor,
|
||||
s48_value time) {
|
||||
int res = XGrabPointer(scx_extract_display(dpy),
|
||||
int res;
|
||||
S48_DECLARE_GC_PROTECT_9(dpy, win, ownerp, events, pmode, kmode, confine_to,
|
||||
cursor, time);
|
||||
res = XGrabPointer(scx_extract_display(dpy),
|
||||
scx_extract_window(win),
|
||||
S48_EXTRACT_BOOLEAN(ownerp),
|
||||
scx_extract_event_mask(events),
|
||||
|
@ -21,27 +24,31 @@ s48_value scx_Grab_Pointer(s48_value dpy, s48_value win,
|
|||
scx_extract_window(confine_to),
|
||||
scx_extract_cursor(cursor),
|
||||
scx_extract_time(time));
|
||||
return scx_enter_grab_status(res);
|
||||
S48_GC_RETURN(scx_enter_grab_status(res));
|
||||
}
|
||||
|
||||
s48_value scx_Ungrab_Pointer(s48_value dpy, s48_value time) {
|
||||
S48_DECLARE_GC_PROTECT_2(dpy, time);
|
||||
XUngrabPointer(scx_extract_display(dpy), scx_extract_time(time));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Change_Active_Pointer_Grab(s48_value dpy, s48_value events,
|
||||
s48_value cursor, s48_value time){
|
||||
S48_DECLARE_GC_PROTECT_4(dpy, events, cursor, time);
|
||||
XChangeActivePointerGrab(scx_extract_display(dpy),
|
||||
scx_extract_event_mask(events),
|
||||
scx_extract_cursor(cursor),
|
||||
scx_extract_time(time));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Grab_Button(s48_value dpy, s48_value button, s48_value mods,
|
||||
s48_value win, s48_value ownerp, s48_value events,
|
||||
s48_value pmode, s48_value kmode,
|
||||
s48_value confine_to, s48_value cursor) {
|
||||
S48_DECLARE_GC_PROTECT_10(dpy, button, mods, win, ownerp, events, pmode,
|
||||
kmode, confine_to, cursor);
|
||||
XGrabButton(scx_extract_display(dpy),
|
||||
scx_extract_button(button),
|
||||
scx_extract_state_set(mods),
|
||||
|
@ -52,39 +59,43 @@ s48_value scx_Grab_Button(s48_value dpy, s48_value button, s48_value mods,
|
|||
scx_extract_grab_mode(kmode),
|
||||
scx_extract_window(confine_to),
|
||||
scx_extract_cursor(cursor));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Ungrab_Button(s48_value dpy, s48_value button,
|
||||
s48_value mods, s48_value win) {
|
||||
S48_DECLARE_GC_PROTECT_4(dpy, button, mods, win);
|
||||
XUngrabButton(scx_extract_display(dpy),
|
||||
scx_extract_button(button),
|
||||
scx_extract_state_set(mods),
|
||||
scx_extract_window(win));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Grab_Keyboard(s48_value dpy, s48_value win, s48_value ownerp,
|
||||
s48_value pmode, s48_value kmode,
|
||||
s48_value time) {
|
||||
S48_DECLARE_GC_PROTECT_6(dpy, win, ownerp, pmode, kmode, time);
|
||||
int res = XGrabKeyboard( scx_extract_display(dpy),
|
||||
scx_extract_window(win),
|
||||
S48_EXTRACT_BOOLEAN(ownerp),
|
||||
scx_extract_grab_mode(pmode),
|
||||
scx_extract_grab_mode(kmode),
|
||||
scx_extract_time(time));
|
||||
return scx_enter_grab_status(res);
|
||||
S48_GC_RETURN(scx_enter_grab_status(res));
|
||||
}
|
||||
|
||||
s48_value scx_Ungrab_Keyboard(s48_value dpy, s48_value time){
|
||||
S48_DECLARE_GC_PROTECT_2(dpy, time);
|
||||
XUngrabKeyboard(scx_extract_display(dpy),
|
||||
scx_extract_time(time));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Grab_Key(s48_value dpy, s48_value key, s48_value mods,
|
||||
s48_value win, s48_value ownerp, s48_value pmode,
|
||||
s48_value kmode) {
|
||||
S48_DECLARE_GC_PROTECT_7(dpy, key, mods, win, ownerp, pmode, kmode);
|
||||
XGrabKey(scx_extract_display(dpy),
|
||||
s48_extract_integer(key),
|
||||
scx_extract_state_set(mods),
|
||||
|
@ -92,16 +103,17 @@ s48_value scx_Grab_Key(s48_value dpy, s48_value key, s48_value mods,
|
|||
S48_EXTRACT_BOOLEAN(ownerp),
|
||||
scx_extract_grab_mode(pmode),
|
||||
scx_extract_grab_mode(kmode));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Ungrab_Key(s48_value dpy, s48_value key, s48_value mods,
|
||||
s48_value win) {
|
||||
S48_DECLARE_GC_PROTECT_4(dpy, key, mods, win);
|
||||
XUngrabKey(scx_extract_display(dpy),
|
||||
s48_extract_integer(key),
|
||||
scx_extract_state_set(mods),
|
||||
scx_extract_window(win));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_event_mode_binding = S48_FALSE;
|
||||
|
@ -109,10 +121,11 @@ s48_value scx_event_mode_binding = S48_FALSE;
|
|||
|
||||
s48_value scx_Allow_Events(s48_value dpy, s48_value event_mode,
|
||||
s48_value time) {
|
||||
S48_DECLARE_GC_PROTECT_3(dpy, event_mode, time);
|
||||
XAllowEvents(scx_extract_display(dpy),
|
||||
scx_extract_event_mode(event_mode),
|
||||
scx_extract_time(time));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Grab_Server(s48_value dpy) {
|
||||
|
|
|
@ -12,81 +12,92 @@ s48_value scx_Copy_Area(s48_value display, s48_value src, s48_value dest,
|
|||
s48_value gc, s48_value srcx, s48_value srcy,
|
||||
s48_value width, s48_value height, s48_value destx,
|
||||
s48_value desty) {
|
||||
S48_DECLARE_GC_PROTECT_10(display, src, dest, gc, srcx, srcy, width, height,
|
||||
destx, desty);
|
||||
XCopyArea(scx_extract_display(display), scx_extract_drawable(src),
|
||||
scx_extract_drawable(dest), scx_extract_gc(gc),
|
||||
(int)s48_extract_integer(srcx), (int)s48_extract_integer(srcy),
|
||||
(int)s48_extract_integer(width), (int)s48_extract_integer(height),
|
||||
(int)s48_extract_integer(destx), (int)s48_extract_integer(desty));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Copy_Plane(s48_value display, s48_value src, s48_value dest,
|
||||
s48_value gc, s48_value srcx, s48_value srcy,
|
||||
s48_value width, s48_value height,
|
||||
s48_value destx, s48_value desty, s48_value plane) {
|
||||
S48_DECLARE_GC_PROTECT_11(display, src, dest, gc, srcx, srcy, width, height,
|
||||
destx, desty, plane);
|
||||
XCopyPlane(scx_extract_display(display), scx_extract_drawable(src),
|
||||
scx_extract_drawable(dest), scx_extract_gc(gc),
|
||||
(int)s48_extract_integer(srcx), (int)s48_extract_integer(srcy),
|
||||
(int)s48_extract_integer(width), (int)s48_extract_integer(height),
|
||||
(int)s48_extract_integer(destx), (int)s48_extract_integer(desty),
|
||||
(unsigned long)s48_extract_integer(plane));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Draw_Point(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value x, s48_value y) {
|
||||
S48_DECLARE_GC_PROTECT_5(display, drawable, gc, x, y);
|
||||
XDrawPoint(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), (int)s48_extract_integer(x),
|
||||
(int)s48_extract_integer(y));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
static void List_To_XPoints(s48_value l, XPoint* p, int n) {
|
||||
int i;
|
||||
S48_DECLARE_GC_PROTECT_1(l);
|
||||
for (i = 0; i < n; i++) {
|
||||
s48_value point = S48_CAR(l);
|
||||
p[i].x = (int)s48_extract_integer(S48_CAR(point));
|
||||
p[i].y = (int)s48_extract_integer(S48_CDR(point));
|
||||
l = S48_CDR(l);
|
||||
}
|
||||
S48_GC_UNPROTECT();
|
||||
}
|
||||
|
||||
s48_value scx_Draw_Points(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value points, s48_value mode) {
|
||||
int n = s48_list_length(points);
|
||||
XPoint p[n];
|
||||
S48_DECLARE_GC_PROTECT_5(display, drawable, gc, points, mode);
|
||||
List_To_XPoints(points, p, n);
|
||||
XDrawPoints(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), p, n,
|
||||
scx_extract_coord_mode(mode));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Draw_Line(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value x1, s48_value y1,
|
||||
s48_value x2, s48_value y2) {
|
||||
S48_DECLARE_GC_PROTECT_7(display, drawable, gc, x1, y1, x2, y2);
|
||||
XDrawLine(scx_extract_display(display),scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), (int)s48_extract_integer(x1),
|
||||
(int)s48_extract_integer(y1), (int)s48_extract_integer(x2),
|
||||
(int)s48_extract_integer(y2));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Draw_Lines(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value points, s48_value mode) {
|
||||
int n = s48_list_length(points);
|
||||
XPoint p[n];
|
||||
S48_DECLARE_GC_PROTECT_5(display, drawable, gc, points, mode);
|
||||
List_To_XPoints(points, p, n);
|
||||
XDrawLines(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), p, n,
|
||||
scx_extract_coord_mode(mode));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_segment_binding = S48_FALSE;
|
||||
|
||||
static void List_To_XSegments(s48_value l, XSegment* p, int n) {
|
||||
int i;
|
||||
S48_DECLARE_GC_PROTECT_1(l);
|
||||
for (i = 0; i < n; i++) {
|
||||
s48_value s = S48_CAR(l);
|
||||
s48_check_record_type(s, scx_segment_binding);
|
||||
|
@ -96,75 +107,81 @@ static void List_To_XSegments(s48_value l, XSegment* p, int n) {
|
|||
p[i].y2 = (int)s48_extract_integer(S48_RECORD_REF(s, 3));
|
||||
l = S48_CDR(l);
|
||||
}
|
||||
S48_GC_UNPROTECT();
|
||||
}
|
||||
|
||||
s48_value scx_Draw_Segments(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value segs) {
|
||||
int n = s48_list_length(segs);
|
||||
XSegment p[n];
|
||||
S48_DECLARE_GC_PROTECT_4(display, drawable, gc, segs);
|
||||
List_To_XSegments(segs, p, n);
|
||||
XDrawSegments(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), p, n);
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Draw_Rectangle(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value x, s48_value y,
|
||||
s48_value width, s48_value height) {
|
||||
S48_DECLARE_GC_PROTECT_7(display, drawable, gc, x, y, width, height);
|
||||
XDrawRectangle(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc),
|
||||
(int)s48_extract_integer(x),
|
||||
(int)s48_extract_integer(y),
|
||||
(int)s48_extract_integer(width),
|
||||
(int)s48_extract_integer(height));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_rectangle_binding = S48_FALSE;
|
||||
|
||||
static void List_To_XRectangles(s48_value l, XRectangle* p, int n) {
|
||||
int i;
|
||||
s48_value rectype = scx_rectangle_binding;
|
||||
S48_DECLARE_GC_PROTECT_1(l);
|
||||
for (i = 0; i < n; i++) {
|
||||
s48_value r = S48_CAR(l);
|
||||
s48_check_record_type(r, rectype);
|
||||
s48_check_record_type(r, scx_rectangle_binding);
|
||||
p[i].x = (int)s48_extract_integer(S48_RECORD_REF(r, 0));
|
||||
p[i].y = (int)s48_extract_integer(S48_RECORD_REF(r, 1));
|
||||
p[i].width = (int)s48_extract_integer(S48_RECORD_REF(r, 2));
|
||||
p[i].height = (int)s48_extract_integer(S48_RECORD_REF(r, 3));
|
||||
l = S48_CDR(l);
|
||||
}
|
||||
S48_GC_UNPROTECT();
|
||||
}
|
||||
|
||||
s48_value scx_Draw_Rectangles(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value rects) {
|
||||
int n = s48_list_length(rects);
|
||||
XRectangle p[n];
|
||||
S48_DECLARE_GC_PROTECT_4(display, drawable, gc, rects);
|
||||
List_To_XRectangles(rects, p, n);
|
||||
XDrawRectangles(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), p, n);
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Draw_Arc(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value x, s48_value y, s48_value w,
|
||||
s48_value h, s48_value a1, s48_value a2) {
|
||||
S48_DECLARE_GC_PROTECT_9(display, drawable, gc, x, y, w, h, a1, a2);
|
||||
XDrawArc(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), (int)s48_extract_integer(x),
|
||||
(int)s48_extract_integer(y), (int)s48_extract_integer(w),
|
||||
(int)s48_extract_integer(h), (int)s48_extract_integer(a1),
|
||||
(int)s48_extract_integer(a2));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_arc_binding = S48_FALSE;
|
||||
|
||||
static void List_To_XArcs(s48_value l, XArc* p, int n) {
|
||||
int i;
|
||||
s48_value rectype = scx_arc_binding;
|
||||
S48_DECLARE_GC_PROTECT_1(l);
|
||||
for (i = 0; i < n; i++) {
|
||||
s48_value r = S48_CAR(l);
|
||||
s48_check_record_type(r, rectype);
|
||||
s48_check_record_type(r, scx_arc_binding);
|
||||
p[i].x = (int)s48_extract_integer(S48_RECORD_REF(r, 0));
|
||||
p[i].y = (int)s48_extract_integer(S48_RECORD_REF(r, 1));
|
||||
p[i].width = (int)s48_extract_integer(S48_RECORD_REF(r, 2));
|
||||
|
@ -173,38 +190,42 @@ static void List_To_XArcs(s48_value l, XArc* p, int n) {
|
|||
p[i].angle2 = (int)s48_extract_integer(S48_RECORD_REF(r, 5));
|
||||
l = S48_CDR(l);
|
||||
}
|
||||
S48_GC_UNPROTECT();
|
||||
}
|
||||
|
||||
s48_value scx_Draw_Arcs(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value arcs) {
|
||||
int n = s48_list_length(arcs);
|
||||
XArc p[n];
|
||||
S48_DECLARE_GC_PROTECT_4(display, drawable, gc, arcs);
|
||||
List_To_XArcs(arcs, p, n);
|
||||
XDrawArcs(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), p, n);
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Fill_Rectangle(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value x, s48_value y,
|
||||
s48_value width, s48_value height) {
|
||||
S48_DECLARE_GC_PROTECT_7(display, drawable, gc, x, y, width, height);
|
||||
XFillRectangle(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc),
|
||||
(int)s48_extract_integer(x),
|
||||
(int)s48_extract_integer(y),
|
||||
(int)s48_extract_integer(width),
|
||||
(int)s48_extract_integer(height));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Fill_Rectangles(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value rects) {
|
||||
int n = s48_list_length(rects);
|
||||
XRectangle p[n];
|
||||
S48_DECLARE_GC_PROTECT_4(display, drawable, gc, rects);
|
||||
List_To_XRectangles(rects, p, n);
|
||||
XFillRectangles(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), p, n);
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Fill_Polygon(s48_value display, s48_value drawable,
|
||||
|
@ -212,33 +233,36 @@ s48_value scx_Fill_Polygon(s48_value display, s48_value drawable,
|
|||
s48_value shape, s48_value mode) {
|
||||
int n = s48_list_length(points);
|
||||
XPoint p[n];
|
||||
S48_DECLARE_GC_PROTECT_6(display, drawable, gc, points, shape, mode);
|
||||
List_To_XPoints(points, p, n);
|
||||
XFillPolygon(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), p, n,
|
||||
scx_extract_polygon_shape(shape),
|
||||
scx_extract_coord_mode(mode));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Fill_Arc(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value x, s48_value y, s48_value w,
|
||||
s48_value h, s48_value a1, s48_value a2) {
|
||||
S48_DECLARE_GC_PROTECT_9(display, drawable, gc, x, y, w, h, a1, a2);
|
||||
XFillArc(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), (int)s48_extract_integer(x),
|
||||
(int)s48_extract_integer(y), (int)s48_extract_integer(w),
|
||||
(int)s48_extract_integer(h), (int)s48_extract_integer(a1),
|
||||
(int)s48_extract_integer(a2));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Fill_Arcs(s48_value display, s48_value drawable,
|
||||
s48_value gc, s48_value arcs) {
|
||||
int n = s48_list_length(arcs);
|
||||
XArc p[n];
|
||||
S48_DECLARE_GC_PROTECT_4(display, drawable, gc, arcs);
|
||||
List_To_XArcs(arcs, p, n);
|
||||
XFillArcs(scx_extract_display(display), scx_extract_drawable(drawable),
|
||||
scx_extract_gc(gc), p, n);
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
void scx_init_graphics(void) {
|
||||
|
|
55
c/xlib/key.c
55
c/xlib/key.c
|
@ -7,6 +7,7 @@ s48_value scx_Change_Keyboard_Mapping(s48_value display,
|
|||
s48_value keysyms_lists) {
|
||||
int max = 0, n = s48_list_length(keysyms_lists), i;
|
||||
s48_value l = keysyms_lists;
|
||||
S48_DECLARE_GC_PROTECT_3(display, first_keycode, keysyms_lists);
|
||||
for (i = 0; i < n; i++) {
|
||||
int m = s48_list_length(S48_CAR(l));
|
||||
if (m > max) max = m;
|
||||
|
@ -33,7 +34,7 @@ s48_value scx_Change_Keyboard_Mapping(s48_value display,
|
|||
s48_extract_integer(first_keycode),
|
||||
max, ks, max * n);
|
||||
}
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Get_Keyboard_Mapping(s48_value display, s48_value first_keycode,
|
||||
|
@ -59,7 +60,7 @@ s48_value scx_Get_Keyboard_Mapping(s48_value display, s48_value first_keycode,
|
|||
S48_GC_UNPROTECT();
|
||||
|
||||
XFree(ks);
|
||||
return l;
|
||||
S48_GC_RETURN(l);
|
||||
}
|
||||
|
||||
s48_value scx_Display_Keycodes(s48_value display) {
|
||||
|
@ -70,12 +71,14 @@ s48_value scx_Display_Keycodes(s48_value display) {
|
|||
|
||||
s48_value scx_Set_Modifier_Mapping(s48_value display, s48_value modmap) {
|
||||
int max = 0;
|
||||
s48_value l = modmap;
|
||||
s48_value l = modmap, l2 = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT_4(display, modmap, l, l2);
|
||||
for (; l != S48_NULL; l = S48_CDR(l)) {
|
||||
int m = s48_list_length(S48_CDR(S48_CAR(l)));
|
||||
if (m > max) max = m;
|
||||
}
|
||||
{
|
||||
int res;
|
||||
KeyCode ks[8*max];
|
||||
XModifierKeymap cmap;
|
||||
cmap.max_keypermod = max;
|
||||
|
@ -83,7 +86,7 @@ s48_value scx_Set_Modifier_Mapping(s48_value display, s48_value modmap) {
|
|||
|
||||
for (l = modmap; l != S48_NULL; l = S48_CDR(l)) {
|
||||
int mod = scx_extract_state(S48_CAR(S48_CAR(l)));
|
||||
s48_value l2 = S48_CDR(S48_CAR(l));
|
||||
l2 = S48_CDR(S48_CAR(l));
|
||||
int j = 0;
|
||||
for (j = 0; j < max; j++) {
|
||||
if ((mod < 0) || (mod > 7)) continue; /* TODO: error?? */
|
||||
|
@ -94,17 +97,19 @@ s48_value scx_Set_Modifier_Mapping(s48_value display, s48_value modmap) {
|
|||
ks[mod*max + j] = 0;
|
||||
}
|
||||
}
|
||||
return s48_enter_integer(XSetModifierMapping(scx_extract_display(display),
|
||||
&cmap));
|
||||
res = XSetModifierMapping(scx_extract_display(display),
|
||||
&cmap);
|
||||
S48_GC_RETURN(s48_enter_integer(res));
|
||||
}
|
||||
}
|
||||
|
||||
s48_value scx_Get_Modifier_Mapping(s48_value display) {
|
||||
XModifierKeymap* km = XGetModifierMapping(scx_extract_display(display));
|
||||
XModifierKeymap* km;
|
||||
s48_value l = S48_NULL, l2 = S48_NULL;
|
||||
int i;
|
||||
S48_DECLARE_GC_PROTECT(2);
|
||||
S48_GC_PROTECT_2(l, l2);
|
||||
S48_DECLARE_GC_PROTECT(3);
|
||||
S48_GC_PROTECT_3(display, l, l2);
|
||||
km = XGetModifierMapping(scx_extract_display(display));
|
||||
for (i = 7; i >= 0; i--) {
|
||||
int j;
|
||||
l2 = S48_NULL;
|
||||
|
@ -132,28 +137,39 @@ s48_value scx_Keysym_To_String(s48_value ks) {
|
|||
}
|
||||
|
||||
s48_value scx_Keycode_To_Keysym(s48_value display, s48_value kc, s48_value i) {
|
||||
KeySym ks = XKeycodeToKeysym(scx_extract_display(display),
|
||||
KeySym ks;
|
||||
S48_DECLARE_GC_PROTECT_3(display, kc, i);
|
||||
ks = XKeycodeToKeysym(scx_extract_display(display),
|
||||
s48_extract_integer(kc),
|
||||
s48_extract_integer(i));
|
||||
return scx_enter_keysym(ks);
|
||||
S48_GC_RETURN(scx_enter_keysym(ks));
|
||||
}
|
||||
|
||||
s48_value scx_Keysym_To_Keycode(s48_value display, s48_value ks) {
|
||||
KeyCode kc = XKeysymToKeycode(scx_extract_display(display),
|
||||
KeyCode kc;
|
||||
S48_DECLARE_GC_PROTECT_2(display, ks);
|
||||
kc = XKeysymToKeycode(scx_extract_display(display),
|
||||
scx_extract_keysym(ks));
|
||||
return s48_enter_integer(kc);
|
||||
S48_GC_RETURN(s48_enter_integer(kc));
|
||||
}
|
||||
|
||||
s48_value scx_Convert_Case(s48_value keysym) {
|
||||
KeySym low, up;
|
||||
s48_value res = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT_2(keysym, res);
|
||||
XConvertCase(scx_extract_keysym(keysym), &low, &up);
|
||||
return s48_cons(scx_enter_keysym(low), scx_enter_keysym(up));
|
||||
res = scx_enter_keysym(up);
|
||||
res = s48_cons(scx_enter_keysym(low), res);
|
||||
S48_GC_RETURN(res);
|
||||
}
|
||||
|
||||
s48_value scx_Lookup_Keysym(s48_value key_event, s48_value index) {
|
||||
XKeyEvent ke;
|
||||
s48_value res = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT_3(key_event, index, res);
|
||||
scx_extract_key_event(key_event, &ke);
|
||||
return scx_enter_keysym(XLookupKeysym(&ke, s48_extract_integer(index)));
|
||||
res = scx_enter_keysym(XLookupKeysym(&ke, s48_extract_integer(index)));
|
||||
S48_GC_RETURN(res);
|
||||
}
|
||||
|
||||
s48_value scx_Refresh_Keyboard_Mapping(s48_value mapping_event) {
|
||||
|
@ -169,24 +185,23 @@ s48_value scx_Lookup_String(s48_value key_event) {
|
|||
int len;
|
||||
KeySym keysym_return;
|
||||
s48_value res = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT(1);
|
||||
S48_DECLARE_GC_PROTECT_2(key_event, res);
|
||||
|
||||
scx_extract_key_event(key_event, &e);
|
||||
len = XLookupString(&e, buf, 1023, &keysym_return, NULL);
|
||||
buf[len] = 0;
|
||||
|
||||
S48_GC_PROTECT_1(res);
|
||||
res = s48_enter_string(buf);
|
||||
res = s48_cons(scx_enter_keysym(keysym_return), res);
|
||||
S48_GC_UNPROTECT();
|
||||
|
||||
return res;
|
||||
S48_GC_RETURN(res);
|
||||
}
|
||||
|
||||
s48_value scx_Rebind_Keysym(s48_value display, s48_value keysym,
|
||||
s48_value mod_keysyms, s48_value str) {
|
||||
int i, n = s48_list_length(mod_keysyms);
|
||||
KeySym mods[n];
|
||||
S48_DECLARE_GC_PROTECT_4(display, keysym, mod_keysyms, str);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
mods[i] = scx_extract_keysym(S48_CAR(mod_keysyms));
|
||||
|
@ -197,7 +212,7 @@ s48_value scx_Rebind_Keysym(s48_value display, s48_value keysym,
|
|||
mods, n,
|
||||
(unsigned char *)s48_extract_string(str),
|
||||
S48_STRING_LENGTH(str));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
scx_init_key () {
|
||||
|
|
|
@ -4,17 +4,19 @@
|
|||
|
||||
s48_value scx_Create_Pixmap(s48_value display, s48_value drawable, s48_value w,
|
||||
s48_value h, s48_value depth) {
|
||||
S48_DECLARE_GC_PROTECT_5(display, drawable, w, h, depth);
|
||||
Pixmap pm = XCreatePixmap(scx_extract_display(display),
|
||||
scx_extract_drawable(drawable),
|
||||
(int)s48_extract_integer(w),
|
||||
(int)s48_extract_integer(h),
|
||||
(int)s48_extract_integer(depth));
|
||||
return scx_enter_pixmap(pm);
|
||||
S48_GC_RETURN(scx_enter_pixmap(pm));
|
||||
}
|
||||
|
||||
s48_value scx_Free_Pixmap(s48_value display, s48_value pixmap) {
|
||||
S48_DECLARE_GC_PROTECT_2(display, pixmap);
|
||||
XFreePixmap(scx_extract_display(display), scx_extract_pixmap(pixmap));
|
||||
return S48_UNSPECIFIC;
|
||||
S48_GC_RETURN(S48_UNSPECIFIC);
|
||||
}
|
||||
|
||||
s48_value scx_Read_Bitmap_File(s48_value display, s48_value drawable,
|
||||
|
@ -23,7 +25,7 @@ s48_value scx_Read_Bitmap_File(s48_value display, s48_value drawable,
|
|||
int res, xhot, yhot;
|
||||
Pixmap bitmap;
|
||||
s48_value ret = S48_FALSE;
|
||||
S48_DECLARE_GC_PROTECT(1);
|
||||
S48_DECLARE_GC_PROTECT_4(display, drawable, filename, ret);
|
||||
|
||||
res = XReadBitmapFile(scx_extract_display(display),
|
||||
scx_extract_drawable(drawable),
|
||||
|
@ -31,22 +33,21 @@ s48_value scx_Read_Bitmap_File(s48_value display, s48_value drawable,
|
|||
&xhot, &yhot);
|
||||
|
||||
if (res != BitmapSuccess)
|
||||
return s48_enter_integer(res);
|
||||
S48_GC_RETURN(s48_enter_integer(res));
|
||||
|
||||
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_GC_RETURN(ret);
|
||||
}
|
||||
|
||||
s48_value scx_Write_Bitmap_File(s48_value display, s48_value filename,
|
||||
s48_value bitmap, s48_value w, s48_value h,
|
||||
s48_value x, s48_value y) {
|
||||
int ret;
|
||||
S48_DECLARE_GC_PROTECT_7(display, filename, bitmap, w, h, x, y);
|
||||
ret = XWriteBitmapFile(scx_extract_display(display),
|
||||
s48_extract_string(filename),
|
||||
scx_extract_pixmap(bitmap),
|
||||
|
@ -54,18 +55,20 @@ s48_value scx_Write_Bitmap_File(s48_value display, s48_value filename,
|
|||
(int)s48_extract_integer(h),
|
||||
(int)s48_extract_integer(x),
|
||||
(int)s48_extract_integer(y));
|
||||
return s48_enter_integer(ret);
|
||||
S48_GC_RETURN(s48_enter_integer(ret));
|
||||
}
|
||||
|
||||
s48_value scx_Create_Bitmap_From_Data(s48_value display, s48_value drawable,
|
||||
s48_value data, s48_value w,
|
||||
s48_value h) {
|
||||
Pixmap pm = XCreateBitmapFromData(scx_extract_display(display),
|
||||
Pixmap pm;
|
||||
S48_DECLARE_GC_PROTECT_5(display, drawable, data, w, h);
|
||||
pm = XCreateBitmapFromData(scx_extract_display(display),
|
||||
scx_extract_drawable(drawable),
|
||||
s48_extract_string(data),
|
||||
s48_extract_integer(w),
|
||||
s48_extract_integer(h));
|
||||
return scx_enter_pixmap(pm);
|
||||
S48_GC_RETURN(scx_enter_pixmap(pm));
|
||||
}
|
||||
|
||||
s48_value scx_Create_Pixmap_From_Bitmap_Data(s48_value display,
|
||||
|
@ -74,7 +77,9 @@ s48_value scx_Create_Pixmap_From_Bitmap_Data(s48_value display,
|
|||
s48_value w,s48_value h,
|
||||
s48_value f, s48_value b,
|
||||
s48_value depth) {
|
||||
Pixmap pm = XCreatePixmapFromBitmapData(scx_extract_display(display),
|
||||
Pixmap pm;
|
||||
S48_DECLARE_GC_PROTECT_8(display, drawable, data, w, h, f, b, depth);
|
||||
pm = XCreatePixmapFromBitmapData(scx_extract_display(display),
|
||||
scx_extract_drawable(drawable),
|
||||
s48_extract_string(data),
|
||||
(int)s48_extract_integer(w),
|
||||
|
@ -82,7 +87,7 @@ s48_value scx_Create_Pixmap_From_Bitmap_Data(s48_value display,
|
|||
scx_extract_pixel(f),
|
||||
scx_extract_pixel(b),
|
||||
(int)s48_extract_integer(depth));
|
||||
return scx_enter_pixmap(pm);
|
||||
S48_GC_RETURN(scx_enter_pixmap(pm));
|
||||
}
|
||||
|
||||
void scx_init_pixmap(void) {
|
||||
|
|
Loading…
Reference in New Issue