Update of /cvsroot/scsh/scx/c/xlib
In directory usw-pr-cvs1:/tmp/cvs-serv3515/c/xlib
Modified Files:
Makefile colormap.c display.c main.c test type.c window.c
xlib.h
Added Files:
visual.c
Log Message:
+ Added support for visuals.
+ Implemented some missing routines for color control:
create-colormap, alloc-color-cells, set-color-cell.
--- NEW FILE ---
#include "xlib.h"
s48_value Enter_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, SCX_ENTER_VISUAL(vi->visual));
S48_VECTOR_SET(t, 1, s48_enter_integer(vi->visualid));
S48_VECTOR_SET(t, 2, s48_enter_integer(vi->screen));
S48_VECTOR_SET(t, 3, s48_enter_integer(vi->depth));
S48_VECTOR_SET(t, 4, Bit_To_Symbol(vi->class, Visual_Class_Syms));
S48_VECTOR_SET(t, 5, s48_enter_integer(vi->red_mask));
S48_VECTOR_SET(t, 6, s48_enter_integer(vi->green_mask));
S48_VECTOR_SET(t, 7, s48_enter_integer(vi->blue_mask));
S48_VECTOR_SET(t, 8, s48_enter_integer(vi->colormap_size));
S48_VECTOR_SET(t, 9, s48_enter_integer(vi->bits_per_rgb));
S48_GC_UNPROTECT();
return t;
}
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);
for (i=1; i<10; i++) {
s48_value val = S48_VECTOR_REF(v, i);
if (!S48_FALSE_P(val)) {
switch (i) {
// 0 = visual is not allowed here.
case 1: {
template.visualid = s48_extract_integer(val);
mask |= VisualIDMask;
} break;
case 2: {
template.screen = s48_extract_integer(val);
mask |= VisualScreenMask;
} break;
case 3: {
template.depth = s48_extract_integer(val);
mask |= VisualDepthMask;
} break;
case 4: {
template.class = Symbol_To_Bit(val, Visual_Class_Syms);
mask |= VisualClassMask;
} break;
case 5: {
template.red_mask = s48_extract_integer(val);
mask |= VisualRedMaskMask;
} break;
case 6: {
template.green_mask = s48_extract_integer(val);
mask |= VisualGreenMaskMask;
} break;
case 7: {
template.blue_mask = s48_extract_integer(val);
mask |= VisualBlueMaskMask;
} break;
case 8: {
template.colormap_size = s48_extract_integer(val);
mask |= VisualColormapSizeMask;
} break;
case 9: {
template.bits_per_rgb = s48_extract_integer(val);
mask |= VisualBitsPerRGBMask;
} break;
}
}
}
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<visualsMatch; i++)
S48_VECTOR_SET(res, i, Enter_Visual_Info(&visualList[i]));
S48_GC_UNPROTECT();
return res;
}
s48_value scx_Visual_ID(s48_value Xvisual) {
return s48_enter_integer(XVisualIDFromVisual(SCX_EXTRACT_VISUAL(Xvisual)));
}
s48_value scx_Match_Visual_Info(s48_value Xdisplay, s48_value scrnum,
s48_value depth, s48_value class) {
XVisualInfo r;
if (XMatchVisualInfo(SCX_EXTRACT_DISPLAY(Xdisplay),
s48_extract_integer(scrnum),
s48_extract_integer(depth),
Symbol_To_Bit(class, Visual_Class_Syms),
&r))
return Enter_Visual_Info(&r);
else
return S48_FALSE;
}
void scx_init_visual(void) {
S48_EXPORT_FUNCTION(scx_Get_Visual_Info);
S48_EXPORT_FUNCTION(scx_Visual_ID);
S48_EXPORT_FUNCTION(scx_Match_Visual_Info);
}
Index: Makefile
===================================================================
RCS file: /cvsroot/scsh/scx/c/xlib/Makefile,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** Makefile 2001/07/31 14:51:21 1.4
--- Makefile 2001/09/20 14:41:01 1.5
***************
*** 1,3 ****
! OBJECTS = main.o display.o window.o type.o color.o colormap.o pixel.o
gcontext.o event.o pixmap.o graphics.o font.o cursor.o text.o property.o wm.o
$(OBJECTS): xlib.h
--- 1,3 ----
! OBJECTS = main.o display.o window.o type.o color.o colormap.o pixel.o
gcontext.o event.o pixmap.o graphics.o font.o cursor.o text.o property.o wm.o
client.o key.o error.o extension.o init.o util.o grab.o visual.o
$(OBJECTS): xlib.h
Index: colormap.c
===================================================================
RCS file: /cvsroot/scsh/scx/c/xlib/colormap.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** colormap.c 2001/08/29 14:54:26 1.7
--- colormap.c 2001/09/20 14:41:01 1.8
***************
*** 56,59 ****
--- 56,116 ----
}
+ s48_value scx_Create_Colormap (s48_value Xdisplay, s48_value Xwindow,
+ s48_value Xvisual, s48_value alloc) {
+ Colormap cm = XCreateColormap( SCX_EXTRACT_DISPLAY(Xdisplay),
+ SCX_EXTRACT_WINDOW(Xwindow),
+ SCX_EXTRACT_VISUAL(Xvisual),
+ S48_FALSE_P(alloc) ? AllocNone : AllocAll );
+ return SCX_ENTER_COLORMAP(cm);
+ }
+
+ s48_value scx_Alloc_Color_Cells (s48_value Xdisplay, s48_value Xcolormap,
+ s48_value contig, s48_value nplanes,
+ s48_value npixels) {
+ int npl = s48_extract_integer(nplanes);
+ int npx = s48_extract_integer(npixels);
+ unsigned long plane_masks[npl];
+ unsigned long pixels[npx];
+ s48_value pls = S48_FALSE, pxs = S48_FALSE;
+ S48_DECLARE_GC_PROTECT(2);
+
+ if (XAllocColorCells(SCX_EXTRACT_DISPLAY(Xdisplay),
+ SCX_EXTRACT_COLORMAP(Xcolormap),
+ !S48_FALSE_P(contig),
+ plane_masks, npl,
+ pixels, npx)) {
+ int i;
+ pls = s48_make_vector(npl, S48_FALSE);
+ pxs = s48_make_vector(npx, S48_FALSE);
+ S48_GC_PROTECT_2(pls, pxs);
+ for (i = 0; i < npl; i++)
+ S48_VECTOR_SET(pls, i, s48_enter_integer(plane_masks[i]));
+ for (i = 0; i < npx; i++)
+ S48_VECTOR_SET(pxs, i, s48_enter_integer(pixels[i]));
+ S48_GC_UNPROTECT();
+ return s48_cons(pls, pxs);
+ } else
+ return S48_FALSE;
+ }
+
+ s48_value scx_Set_Color_Cell(s48_value Xdisplay, s48_value Xcolormap,
+ s48_value Xpixel, s48_value Xcolor,
+ s48_value flags) {
+ XColor t;
+ XColor* c;
+
+ c = SCX_EXTRACT_COLOR(Xcolor);
+ t.pixel = SCX_EXTRACT_PIXEL(Xpixel);
+ t.red = c->red;
+ t.green = c->green;
+ t.blue = c->blue;
+ t.flags = Symbols_To_Bits(flags, Color_Flags_Syms);
+
+ XStoreColor(SCX_EXTRACT_DISPLAY(Xdisplay), SCX_EXTRACT_COLORMAP(Xcolormap),
+ &t);
+
+ return S48_UNSPECIFIC;
+ }
+
void scx_init_colormap(void) {
S48_EXPORT_FUNCTION(scx_Free_Colormap);
***************
*** 61,63 ****
--- 118,123 ----
S48_EXPORT_FUNCTION(scx_Alloc_Named_Color);
S48_EXPORT_FUNCTION(scx_Parse_Color);
+ S48_EXPORT_FUNCTION(scx_Create_Colormap);
+ S48_EXPORT_FUNCTION(scx_Alloc_Color_Cells);
+ S48_EXPORT_FUNCTION(scx_Set_Color_Cell);
}
Index: display.c
===================================================================
RCS file: /cvsroot/scsh/scx/c/xlib/display.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -r1.9 -r1.10
*** display.c 2001/08/29 14:52:44 1.9
--- display.c 2001/09/20 14:41:01 1.10
***************
*** 85,88 ****
--- 85,93 ----
}
+ s48_value scx_Display_Default_Visual(s48_value Xdisplay, s48_value scrnum) {
+ return SCX_ENTER_VISUAL( DefaultVisual( SCX_EXTRACT_DISPLAY(Xdisplay),
+ s48_extract_integer(scrnum) ));
+ }
+
s48_value scx_Display_Cells(s48_value Xdisplay, s48_value ScrNum) {
int num = (int)s48_extract_integer(ScrNum);
***************
*** 243,246 ****
--- 248,252 ----
S48_EXPORT_FUNCTION(scx_Display_Default_Depth);
S48_EXPORT_FUNCTION(scx_Display_Default_Screen_Number);
+ S48_EXPORT_FUNCTION(scx_Display_Default_Visual);
S48_EXPORT_FUNCTION(scx_Display_Cells);
S48_EXPORT_FUNCTION(scx_Display_Planes);
Index: main.c
===================================================================
RCS file: /cvsroot/scsh/scx/c/xlib/main.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** main.c 2001/07/31 14:51:21 1.5
--- main.c 2001/09/20 14:41:01 1.6
***************
*** 16,20 ****
--- 16,29 ----
extern void scx_init_property();
extern void scx_init_wm();
+ extern void scx_init_client();
+ extern void scx_init_key();
+ extern void scx_init_error();
+ extern void scx_init_extension();
+ extern void scx_init_init();
+ extern void scx_init_util();
+ extern void scx_init_grab();
+ extern void scx_init_visual();
+
int main(){
s48_add_external_init(scx_init_window);
***************
*** 34,37 ****
--- 43,54 ----
s48_add_external_init(scx_init_cursor);
s48_add_external_init(scx_init_wm);
+ s48_add_external_init(scx_init_client);
+ s48_add_external_init(scx_init_key);
+ s48_add_external_init(scx_init_error);
+ s48_add_external_init(scx_init_extension);
+ s48_add_external_init(scx_init_init);
+ s48_add_external_init(scx_init_util);
+ s48_add_external_init(scx_init_grab);
+ s48_add_external_init(scx_init_visual);
s48_main(8000000, 64000,
Index: test
===================================================================
RCS file: /cvsroot/scsh/scx/c/xlib/test,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
Binary files /tmp/cvsxCuc63 and /tmp/cvssYCiI4 differ
Index: type.c
===================================================================
RCS file: /cvsroot/scsh/scx/c/xlib/type.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -r1.11 -r1.12
*** type.c 2001/07/31 14:51:21 1.11
--- type.c 2001/09/20 14:41:01 1.12
***************
*** 482,930 ****
};
! /*************************************************************************
! Other things
! *************************************************************************/
!
! /*
!
!
! static s48_value Set_Attr_Slots;
! static s48_value Conf_Slots;
! static s48_value GC_Slots;
! static s48_value Geometry_Slots;
! static s48_value Win_Attr_Slots;
! static s48_value Font_Info_Slots;
! static s48_value Char_Info_Slots;
! static s48_value Wm_Hints_Slots;
! static s48_value Size_Hints_Slots;
!
! static s48_value Sym_Parent_Relative, Sym_Copy_From_Parent;
!
! XSetWindowAttributes SWA;
! RECORD Set_Attr_Rec[] = {
! { (char *)&SWA.background_pixmap, "background-pixmap",
T_BACKGROUND,
! 0, CWBackPixmap },
! { (char *)&SWA.background_pixel, "background-pixel", T_PIXEL,
! 0, CWBackPixel },
! { (char *)&SWA.border_pixmap, "border-pixmap", T_BORDER,
! 0, CWBorderPixmap },
! { (char *)&SWA.border_pixel, "border-pixel", T_PIXEL,
! 0, CWBorderPixel },
! { (char *)&SWA.bit_gravity, "bit-gravity", T_SYM,
! Bit_Grav_Syms, CWBitGravity },
! { (char *)&SWA.win_gravity, "gravity", T_SYM,
! Grav_Syms, CWWinGravity },
! { (char *)&SWA.backing_store, "backing-store", T_SYM,
! Backing_Store_Syms, CWBackingStore },
! { (char *)&SWA.backing_planes, "backing-planes", T_PIXEL,
! 0, CWBackingPlanes },
! { (char *)&SWA.backing_pixel, "backing-pixel", T_PIXEL,
! 0, CWBackingPixel },
! { (char *)&SWA.save_under, "save-under", T_BOOL,
! 0, CWSaveUnder },
! { (char *)&SWA.event_mask, "event-mask", T_MASK,
! Event_Syms, CWEventMask },
! { (char *)&SWA.do_not_propagate_mask, "do-not-propagate-mask", T_MASK,
! Event_Syms, CWDontPropagate },
! { (char *)&SWA.override_redirect, "override-redirect", T_BOOL,
! 0, CWOverrideRedirect },
! { (char *)&SWA.colormap, "colormap", T_COLORMAP,
! 0, CWColormap },
! { (char *)&SWA.cursor, "cursor", T_CURSOR,
! 0, CWCursor },
! { 0, 0, T_NONE, 0, 0 }
! };
! int Set_Attr_Size = sizeof Set_Attr_Rec / sizeof (RECORD);
!
! XWindowChanges WC;
! RECORD Conf_Rec[] = {
! { (char *)&WC.x, "x", T_INT, 0, CWX },
! { (char *)&WC.y, "y", T_INT, 0, CWY },
! { (char *)&WC.width, "width", T_INT, 0, CWWidth },
! { (char *)&WC.height, "height", T_INT, 0, CWHeight },
! { (char *)&WC.border_width, "border-width", T_INT, 0, CWBorderWidth },
! { (char *)&WC.sibling, "sibling", T_WINDOW, 0, CWSibling },
! { (char *)&WC.stack_mode, "stack-mode", T_SYM, Stack_Mode_Syms,
! CWStackMode },
! { 0, 0, T_NONE, 0, 0 }
};
- int Conf_Size = sizeof Conf_Rec / sizeof (RECORD);
! XGCValues GCV;
! RECORD GC_Rec[] = {
! { (char *)&GCV.function, "function", T_SYM,
! Func_Syms, GCFunction },
! { (char *)&GCV.plane_mask, "plane-mask", T_PIXEL,
! 0, GCPlaneMask },
! { (char *)&GCV.foreground, "foreground", T_PIXEL,
! 0, GCForeground },
! { (char *)&GCV.background, "background", T_PIXEL,
! 0, GCBackground },
! { (char *)&GCV.line_width, "line-width", T_INT,
! 0, GCLineWidth },
! { (char *)&GCV.line_style, "line-style", T_SYM,
! Line_Style_Syms, GCLineStyle },
! { (char *)&GCV.cap_style, "cap-style", T_SYM,
! Cap_Style_Syms, GCCapStyle },
! { (char *)&GCV.join_style, "join-style", T_SYM,
! Join_Style_Syms, GCJoinStyle },
! { (char *)&GCV.fill_style, "fill-style", T_SYM,
! Fill_Style_Syms, GCFillStyle },
! { (char *)&GCV.fill_rule, "fill-rule", T_SYM,
! Fill_Rule_Syms, GCFillRule },
! { (char *)&GCV.arc_mode, "arc-mode", T_SYM,
! Arc_Mode_Syms, GCArcMode },
! { (char *)&GCV.tile, "tile", T_PIXMAP,
! 0, GCTile },
! { (char *)&GCV.stipple, "stipple", T_PIXMAP,
! 0, GCStipple },
! { (char *)&GCV.ts_x_origin, "ts-x", T_INT,
! 0, GCTileStipXOrigin },
! { (char *)&GCV.ts_y_origin, "ts-y", T_INT,
! 0, GCTileStipYOrigin },
! { (char *)&GCV.font, "font", T_FONT,
! 0, GCFont },
! { (char *)&GCV.subwindow_mode, "subwindow-mode", T_SYM,
! Subwin_Mode_Syms, GCSubwindowMode },
! { (char *)&GCV.graphics_exposures, "exposures", T_BOOL,
! 0, GCGraphicsExposures },
! { (char *)&GCV.clip_x_origin, "clip-x", T_INT,
! 0, GCClipXOrigin },
! { (char *)&GCV.clip_y_origin, "clip-y", T_INT,
! 0, GCClipYOrigin },
! { (char *)&GCV.clip_mask, "clip-mask", T_PIXMAP,
! 0, GCClipMask },
! { (char *)&GCV.dash_offset, "dash-offset", T_INT,
! 0, GCDashOffset },
! { (char *)&GCV.dashes, "dashes", T_s48_extract_char,
! 0, GCDashList },
! {0, 0, T_NONE, 0, 0 }
};
- int GC_Size = sizeof GC_Rec / sizeof (RECORD);
-
- GEOMETRY GEO;
- RECORD Geometry_Rec[] = {
- { (char *)&GEO.root, "root", T_WINDOW, 0, 0 },
- { (char *)&GEO.x, "x", T_INT, 0, 0 },
- { (char *)&GEO.y, "y", T_INT, 0, 0 },
- { (char *)&GEO.width, "width", T_INT, 0, 0 },
- { (char *)&GEO.height, "height", T_INT, 0, 0 },
- { (char *)&GEO.border_width, "border-width", T_INT, 0, 0 },
- { (char *)&GEO.depth, "depth", T_INT, 0, 0 },
- {0, 0, T_NONE, 0, 0 }
- };
- int Geometry_Size = sizeof Geometry_Rec / sizeof (RECORD);
-
- XWindowAttributes WA;
- RECORD Win_Attr_Rec[] = {
- { (char *)&WA.x, "x", T_INT,
- 0, 0 },
- { (char *)&WA.y, "y", T_INT,
- 0, 0 },
- { (char *)&WA.width, "width", T_INT,
- 0, 0 },
- { (char *)&WA.height, "height", T_INT,
- 0, 0 },
- { (char *)&WA.border_width, "border-width", T_INT,
- 0, 0 },
- { (char *)&WA.depth, "depth", T_INT,
- 0, 0 },
- { (char *)&WA.visual, "visual", T_NONE,
- 0, 0 },
- { (char *)&WA.root, "root", T_WINDOW,
- 0, 0 },
- #if defined(__cplusplus) || defined(c_plusplus)
- { (char *)&WA.c_class, "class", T_SYM,
- #else
- { (char *)&WA.class, "class", T_SYM,
- #endif
- Class_Syms, 0 },
- { (char *)&WA.bit_gravity, "bit-gravity", T_SYM,
- Bit_Grav_Syms, 0 },
- { (char *)&WA.win_gravity, "gravity", T_SYM,
- Grav_Syms, 0 },
- { (char *)&WA.backing_store, "backing-store", T_SYM,
- Backing_Store_Syms, 0 },
- { (char *)&WA.backing_planes, "backing-planes", T_PIXEL,
- 0, 0 },
- { (char *)&WA.backing_pixel, "backing-pixel", T_PIXEL,
- 0, 0 },
- { (char *)&WA.save_under, "save-under", T_BOOL,
- 0, 0 },
- { (char *)&WA.colormap , "colormap", T_COLORMAP,
- 0, 0 },
- { (char *)&WA.map_installed, "map-installed", T_BOOL,
- 0, 0 },
- { (char *)&WA.map_state, "map-state", T_SYM,
- Map_State_Syms, 0 },
- { (char *)&WA.all_event_masks, "all-event-masks", T_MASK,
- Event_Syms, 0 },
- { (char *)&WA.your_event_mask, "your-event-mask", T_MASK,
- Event_Syms, 0 },
- { (char *)&WA.do_not_propagate_mask, "do-not-propagate-mask", T_MASK,
- Event_Syms, 0 },
- { (char *)&WA.override_redirect, "override-redirect", T_BOOL,
- 0, 0 },
- { (char *)&WA.screen, "screen", T_NONE,
- 0, 0 },
- {0, 0, T_NONE, 0, 0 }
- };
- int Win_Attr_Size = sizeof Win_Attr_Rec / sizeof (RECORD);
-
- XFontStruct FI;
- RECORD Font_Info_Rec[] = {
- { (char *)&FI.direction, "direction", T_SYM,
- Direction_Syms, 0 },
- { (char *)&FI.min_char_or_byte2, "min-byte2", T_INT,
- 0, 0 },
- { (char *)&FI.max_char_or_byte2, "max-byte2", T_INT,
- 0, 0 },
- { (char *)&FI.min_byte1, "min-byte1", T_INT,
- 0, 0 },
- { (char *)&FI.max_byte1, "max-byte1", T_INT,
- 0, 0 },
- { (char *)&FI.all_chars_exist, "all-chars-exist?", T_BOOL,
- 0, 0 },
- { (char *)&FI.default_char, "default-char", T_INT,
- 0, 0 },
- { (char *)&FI.ascent, "ascent", T_INT,
- 0, 0 },
- { (char *)&FI.descent, "descent", T_INT,
- 0, 0 },
- {0, 0, T_NONE, 0, 0 }
- };
- int Font_Info_Size = sizeof Font_Info_Rec / sizeof (RECORD);
-
- XCharStruct CI;
- RECORD Char_Info_Rec[] = {
- { (char *)&CI.lbearing, "lbearing", T_SHORT, 0, 0 },
- { (char *)&CI.rbearing, "rbearing", T_SHORT, 0, 0 },
- { (char *)&CI.width, "width", T_SHORT, 0, 0 },
- { (char *)&CI.ascent, "ascent", T_SHORT, 0, 0 },
- { (char *)&CI.descent, "descent", T_SHORT, 0, 0 },
- { (char *)&CI.attributes, "attributes", T_SHORT, 0, 0 },
- {0, 0, T_NONE, 0, 0 }
- };
- int Char_Info_Size = sizeof Char_Info_Rec / sizeof (RECORD);
-
- XWMHints WMH;
- RECORD Wm_Hints_Rec[] = {
- { (char *)&WMH.input, "input?", T_BOOL,
- 0, InputHint },
- { (char *)&WMH.initial_state, "initial-state", T_SYM,
- Initial_State_Syms, StateHint },
- { (char *)&WMH.icon_pixmap, "icon-pixmap", T_PIXMAP,
- 0, IconPixmapHint },
- { (char *)&WMH.icon_window, "icon-window", T_WINDOW,
- 0, IconWindowHint },
- { (char *)&WMH.icon_x, "icon-x", T_INT,
- 0, IconPositionHint },
- { (char *)&WMH.icon_y, "icon-y", T_INT,
- 0, IconPositionHint },
- { (char *)&WMH.icon_mask, "icon-mask", T_PIXMAP,
- 0, IconMaskHint },
- { (char *)&WMH.window_group, "window-group", T_WINDOW,
- 0, WindowGroupHint },
- {0, 0, T_NONE, 0, 0 }
- };
- int Wm_Hints_Size = sizeof Wm_Hints_Rec / sizeof (RECORD);
-
- XSizeHints SZH;
- RECORD Size_Hints_Rec[] = {
- { (char *)&SZH.x, "x", T_INT, 0, PPosition },
- { (char *)&SZH.y, "y", T_INT, 0, PPosition },
- { (char *)&SZH.width, "width", T_INT, 0, PSize },
- { (char *)&SZH.height, "height", T_INT, 0, PSize },
- { (char *)&SZH.x, "x", T_INT, 0, USPosition },
- { (char *)&SZH.y, "y", T_INT, 0, USPosition },
- { (char *)&SZH.width, "width", T_INT, 0, USSize },
- { (char *)&SZH.height, "height", T_INT, 0, USSize },
- { (char *)&SZH.min_width, "min-width", T_INT, 0, PMinSize },
- { (char *)&SZH.min_height, "min-height", T_INT, 0, PMinSize },
- { (char *)&SZH.max_width, "max-width", T_INT, 0, PMaxSize },
- { (char *)&SZH.max_height, "max-height", T_INT, 0, PMaxSize },
- { (char *)&SZH.width_inc, "width-inc", T_INT, 0, PResizeInc },
- { (char *)&SZH.height_inc, "height-inc", T_INT, 0, PResizeInc },
- { (char *)&SZH.min_aspect.x, "min-aspect-x", T_INT, 0, PAspect },
- { (char *)&SZH.min_aspect.y, "min-aspect-y", T_INT, 0, PAspect },
- { (char *)&SZH.max_aspect.x, "max-aspect-x", T_INT, 0, PAspect },
- { (char *)&SZH.max_aspect.y, "max-aspect-y", T_INT, 0, PAspect },
- { (char *)&SZH.base_width, "base-width", T_INT, 0, PBaseSize },
- { (char *)&SZH.base_height, "base-height", T_INT, 0, PBaseSize },
- { (char *)&SZH.win_gravity, "gravity", T_SYM, Grav_Syms,
- PWinGravity },
- {0, 0, T_NONE, 0, 0 }
- };
- int Size_Hints_Size = sizeof Size_Hints_Rec / sizeof (RECORD);
-
- unsigned long Vector_To_Record (v, len, sym, rp) s48_value v, sym;
- register RECORD *rp; {
- register s48_value *p;
- unsigned long mask = 0;
-
- Check_Type (v, T_Vector);
- p = VECTOR(v)->data;
- if (S48_VECTOR_LENGTH(v) != len && !S48_EQ_P(p[0], sym))
- Primitive_Error ("invalid argument");
- for ( ; rp->slot; rp++) {
- ++p;
- if (rp->type == T_NONE || S48_NULL_P (*p))
- continue;
- switch (rp->type) {
- case T_INT:
- *(int *)rp->slot = (int)s48_extract_integer (*p); break;
- case T_SHORT:
- *(short *)rp->slot = (int)s48_extract_integer (*p); break;
- case T_s48_extract_char:
- *(char *)rp->slot = (int)s48_extract_integer (*p); break;
- case T_PIXEL:
- *(unsigned long *)rp->slot = Get_Pixel (*p); break;
- case T_BACKGROUND:
- if (S48_EQ_P(*p, Sym_None))
- *(Pixmap *)rp->slot = None;
- else if (S48_EQ_P(*p, Sym_Parent_Relative))
- *(Pixmap *)rp->slot = ParentRelative;
- else
- *(Pixmap *)rp->slot = Get_Pixmap (*p);
- break;
- case T_BORDER:
- if (S48_EQ_P(*p, Sym_Copy_From_Parent)) {
- *(Pixmap *)rp->slot = CopyFromParent;
- break;
- }
- // fall through
- case T_PIXMAP:
- *(Pixmap *)rp->slot = Get_Pixmap (*p); break;
- case T_BOOL:
- Check_Type (*p, T_Boolean);
- *(Bool *)rp->slot = (Bool)(s48_extract_integer(*p));
- break;
- case T_FONT:
- *(Font *)rp->slot = Get_Font (*p);
- break;
- case T_COLORMAP:
- *(Colormap *)rp->slot = Get_Colormap (*p); break;
- case T_CURSOR:
- *(Cursor *)rp->slot = Get_Cursor (*p);
- break;
- case T_WINDOW:
- break;
- case T_MASK:
- *(long *)rp->slot = Symbols_To_Bits (*p, 1, rp->syms);
- break;
- case T_SYM:
- *(int *)rp->slot = (int)Symbols_To_Bits (*p, 0, rp->syms);
- break;
- default:
- Panic ("vector->record");
- }
- mask |= rp->mask;
- }
- return mask;
- }
-
- s48_value Record_To_Vector (rp, len, sym, dpy, flags) s48_value sym;
- register RECORD *rp; Display *dpy; unsigned long flags; {
- register i;
- s48_value v, x;
- S48_DECLARE_GC_PROTECT(2);
-
- v = S48_NULL;
- S48_GC_PROTECT_2 (sym, v);
- v = s48_make_vector (len, S48_NULL);
- S48_VECTOR_SET(v, 0, sym;)
- for (i = 1; rp->slot; i++, rp++) {
- if (rp->type == T_NONE)
- continue;
- if (rp->mask && !(flags & rp->mask))
- continue;
- x = S48_NULL;
- switch (rp->type) {
- case T_INT:
- x = s48_enter_integer (*(int *)rp->slot); break;
- case T_SHORT:
- x = s48_enter_integer (*(short *)rp->slot); break;
- case T_s48_extract_char:
- x = s48_enter_integer (*(char *)rp->slot); break;
- case T_PIXEL:
- x = Make_Pixel (*(unsigned long *)rp->slot); break;
- case T_PIXMAP:
- if (*(unsigned long *)rp->slot == ~0L)
- x = Sym_None;
- else
- x = Make_Pixmap_Foreign (dpy, *(Pixmap *)rp->slot);
- break;
- case T_FONT:
- if (*(unsigned long *)rp->slot == ~0L)
- x = Sym_None;
- else {
- register XFontStruct *info;
- Disable_Interrupts;
- info = XQueryFont (dpy, *(Font *)rp->slot);
- Enable_Interrupts;
- x = Make_Font_Foreign (dpy, S48_FALSE, *(Font *)rp->slot, info);
- }
- break;
- case T_BOOL:
- x = *(Bool *)rp->slot ? S48_TRUE : S48_FALSE; break;
- case T_COLORMAP:
- x = Make_Colormap (0, dpy, *(Colormap *)rp->slot); break;
- case T_WINDOW:
- x = Make_Window (0, dpy, *(Window *)rp->slot); break;
- case T_MASK:
- x = Bits_To_Symbols (*(long *)rp->slot, 1, rp->syms);
- break;
- case T_SYM:
- x = Bits_To_Symbols ((unsigned long)*(int *)rp->slot, 0, rp->syms);
- break;
- default:
- Panic ("record->vector");
- }
- S48_VECTOR_SET(v, i, x;)
- }
- S48_GC_UNPROTECT;
- return v;
- }
-
- static Init_Record (rec, size, name, var) RECORD *rec; char *name;
- s48_value *var; {
- s48_value list, tail, cell;
- register i;
- char buf[128];
- S48_DECLARE_GC_PROTECT(2);
-
- S48_GC_PROTECT_2 (list, tail);
- for (list = tail = S48_NULL, i = 1; i < size; tail = cell, i++, rec++) {
- cell = Intern (rec->name);
- cell = s48_cons (cell, s48_enter_integer (i));
- cell = s48_cons (cell, S48_NULL);
- if (S48_NULL_P (list))
- list = cell;
- else
- P_Set_S48_CDR (tail, cell);
- }
- sprintf (buf, "%s-slots", name);
- Define_Variable (var, buf, list);
- S48_GC_UNPROTECT;
- }
-
- elk_init_xlib_type () {
- Init_Record (Set_Attr_Rec, Set_Attr_Size, "set-window-attributes",
- &Set_Attr_Slots);
- Init_Record (Conf_Rec, Conf_Size, "window-configuration", &Conf_Slots);
- Init_Record (GC_Rec, GC_Size, "gcontext", &GC_Slots);
- Init_Record (Geometry_Rec, Geometry_Size, "geometry", &Geometry_Slots);
- Init_Record (Win_Attr_Rec, Win_Attr_Size, "get-window-attributes",
- &Win_Attr_Slots);
- Init_Record (Font_Info_Rec, Font_Info_Size, "font-info",
&Font_Info_Slots);
- Init_Record (Char_Info_Rec, Char_Info_Size, "char-info",
&Char_Info_Slots);
- Init_Record (Wm_Hints_Rec, Wm_Hints_Size, "wm-hints", &Wm_Hints_Slots);
- Init_Record (Size_Hints_Rec, Size_Hints_Size, "size-hints",
- &Size_Hints_Slots);
- Define_Symbol (&Sym_Parent_Relative, "parent-relative");
- Define_Symbol (&Sym_Copy_From_Parent, "copy-from-parent");
- }
-
- */
void scx_init_type(void) {
--- 482,501 ----
};
! SYMDESCR Visual_Class_Syms[] = {
! { "direct-color", DirectColor },
! { "gray-scale", GrayScale },
! { "pseudo-color", PseudoColor },
! { "static-color", StaticColor },
! { "static-gray", StaticGray },
! { "true-color", TrueColor },
! { 0, 0 }
};
! SYMDESCR Color_Flags_Syms[] = {
! { "do-red", DoRed },
! { "do-green", DoGreen },
! { "do-blue", DoBlue },
! { 0, 0 }
};
void scx_init_type(void) {
Index: window.c
===================================================================
RCS file: /cvsroot/scsh/scx/c/xlib/window.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -r1.10 -r1.11
*** window.c 2001/08/21 08:26:54 1.10
--- window.c 2001/09/20 14:41:01 1.11
***************
*** 89,94 ****
s48_value scx_Create_Window (s48_value Xdisplay, s48_value Xparent, s48_value
x,
! s48_value y, s48_value width, s48_value height,
! s48_value border_width, s48_value attrAlist) {
XSetWindowAttributes Xattrs;
--- 89,95 ----
s48_value scx_Create_Window (s48_value Xdisplay, s48_value Xparent, s48_value
x,
! s48_value y, s48_value width, s48_value height,
! s48_value border_width, s48_value Xvisual,
! s48_value attrAlist) {
XSetWindowAttributes Xattrs;
***************
*** 96,99 ****
--- 97,102 ----
Window win;
+ Visual* vis = S48_FALSE_P(Xvisual) ? CopyFromParent :
+ SCX_EXTRACT_VISUAL(Xvisual);
win = XCreateWindow( SCX_EXTRACT_DISPLAY(Xdisplay),
SCX_EXTRACT_WINDOW(Xparent),
(int)s48_extract_integer(x),
***************
*** 104,108 ****
CopyFromParent,
CopyFromParent,
! CopyFromParent,
mask,
&Xattrs );
--- 107,111 ----
CopyFromParent,
CopyFromParent,
! vis,
mask,
&Xattrs );
Index: xlib.h
===================================================================
RCS file: /cvsroot/scsh/scx/c/xlib/xlib.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -r1.8 -r1.9
*** xlib.h 2001/07/31 14:51:21 1.8
--- xlib.h 2001/09/20 14:41:01 1.9
***************
*** 3,9 ****
#include <X11/Xutil.h>
- //#undef S48_TRUE
- //#undef S48_FALSE
-
#ifndef NeedFunctionPrototypes /* Kludge */
#error "X11 Release 3 (or earlier) no longer supported"
--- 3,6 ----
***************
*** 54,165 ****
#define SCX_ENTER_FONTSTRUCT(x) s48_enter_integer((long)x)
#define SCX_EXTRACT_FONTSTRUCT(x) (XFontStruct*)s48_extract_integer(x)
! // TODO:
! #define SCX_ENTER_VISUAL(x) S48_FALSE
!
!
! /*
! extern int T_Display;
! extern int T_Gc;
! extern int T_Pixel;
! extern int T_Pixmap;
! extern int T_Window;
! extern int T_Font;
! extern int T_Colormap;
! extern int T_Color;
! extern int T_Cursor;
! extern int T_Atom;
!
! #define DISPLAY(x) ((struct S_Display *)POINTER(x))
! #define GCONTEXT(x) ((struct S_Gc *)POINTER(x))
! #define PIXEL(x) ((struct S_Pixel *)POINTER(x))
! #define PIXMAP(x) ((struct S_Pixmap *)POINTER(x))
! #define WINDOW(x) ((struct S_Window *)POINTER(x))
! #define FONT(x) ((struct S_Font *)POINTER(x))
! #define COLORMAP(x) ((struct S_Colormap *)POINTER(x))
! #define COLOR(x) ((struct S_Color *)POINTER(x))
! #define CURSOR(x) ((struct S_Cursor *)POINTER(x))
! #define ATOM(x) ((struct S_Atom *)POINTER(x))
!
! struct S_Display {
! s48_value after;
! Display *dpy;
! char free;
! };
!
! struct S_Gc {
! s48_value tag;
! GC gc;
! Display *dpy;
! char free;
! };
!
! struct S_Pixel {
! s48_value tag;
! unsigned long pix;
! };
!
! struct S_Pixmap {
! s48_value tag;
! Pixmap pm;
! Display *dpy;
! char free;
! };
!
! struct S_Window {
! s48_value tag;
! Window win;
! Display *dpy;
! char free;
! char finalize;
! };
!
! struct S_Font {
! s48_value name;
! Font id;
! XFontStruct *info;
! Display *dpy;
! };
!
! struct S_Colormap {
! s48_value tag;
! Colormap cm;
! Display *dpy;
! char free;
! };
!
! struct S_Color {
! s48_value tag;
! XColor c;
! };
!
! struct S_Cursor {
! s48_value tag;
! Cursor cursor;
! Display *dpy;
! char free;
! };
!
! struct S_Atom {
! s48_value tag;
! Atom atom;
! };
!
! enum Type {
! T_NONE,
! T_INT, T_s48_extract_char, T_PIXEL, T_PIXMAP, T_BOOL, T_FONT, T_COLORMAP,
T_CURSOR,
! T_WINDOW, T_MASK, T_SYM, T_SHORT, T_BACKGROUND, T_BORDER
! };
!
! */
! /*
! typedef struct {
! char *slot;
! char *name;
! enum Type type;
! SYMDESCR *syms;
! int mask;
! } RECORD;
! */
typedef struct {
--- 51,59 ----
#define SCX_ENTER_FONTSTRUCT(x) s48_enter_integer((long)x)
#define SCX_EXTRACT_FONTSTRUCT(x) (XFontStruct*)s48_extract_integer(x)
! #define SCX_ENTER_VISUAL(x) s48_enter_integer((long)x)
! #define SCX_EXTRACT_VISUAL(x) (Visual*)s48_extract_integer(x)
! extern unsigned long AList_To_XWindowChanges(s48_value alist,
! XWindowChanges* WC);
typedef struct {
***************
*** 176,246 ****
- /*
-
- C_LINKAGE_BEGIN
-
- extern Colormap Get_Colormap P_((Object));
- extern Cursor Get_Cursor P_((Object));
- extern Drawable Get_Drawable P_((Object, Display**));
- extern Font Get_Font P_((Object));
- extern int Get_Screen_Number P_((Display*, Object));
- extern s48_value Get_Event_Args P_((XEvent*));
- extern Pixmap Get_Pixmap P_((Object));
- extern Time Get_Time P_((Object));
- extern Window Get_Window P_((Object));
- extern XColor *Get_Color P_((Object));
- extern unsigned long Get_Pixel P_((Object));
- extern void Destroy_Event_Args P_((Object));
- extern int Encode_Event P_((Object));
- extern int Match_X_Obj P_((ELLIPSIS));
- extern void Open_Font_Maybe P_((Object));
- extern s48_value Make_Atom P_((Atom));
- extern s48_value Make_Color P_((unsigned int, unsigned int, unsigned int));
- extern s48_value Make_Colormap P_((int, Display*, Colormap));
- extern s48_value Make_Cursor P_((Display*, Cursor));
- extern s48_value Make_Cursor_Foreign P_((Display*, Cursor));
- extern s48_value Make_Display P_((int, Display*));
- extern s48_value Make_Font P_((Display*, Object, Font, XFontStruct*));
- extern s48_value Make_Font_Foreign P_((Display*, Object, Font, XFontStruct*));
- extern s48_value Make_Gc P_((int, Display*, GC));
- extern s48_value Make_Pixel P_((unsigned long));
- extern s48_value Make_Pixmap P_((Display*, Pixmap));
- extern s48_value Make_Pixmap_Foreign P_((Display*, Pixmap));
- extern s48_value Make_Window P_((int, Display*, Window));
- extern s48_value P_Close_Display P_((Object));
- extern s48_value P_Close_Font P_((Object));
- extern s48_value P_Destroy_Window P_((Object));
- extern s48_value P_Free_Colormap P_((Object));
- extern s48_value P_Free_Cursor P_((Object));
- extern s48_value P_Free_Gc P_((Object));
- extern s48_value P_Free_Pixmap P_((Object));
- extern s48_value P_Window_Unique_Id P_((Object));
- extern s48_value Record_To_Vector
- P_((RECORD*, int, Object, Display*, unsigned long));
- extern unsigned long Vector_To_Record P_((Object, int, Object, RECORD*));
-
- C_LINKAGE_END
-
- */
- /*
- extern XSetWindowAttributes SWA;
- extern XWindowChanges WC;
- extern XGCValues GCV;
- extern GEOMETRY GEO;
- extern XWindowAttributes WA;
- extern XFontStruct FI;
- extern XCharStruct CI;
- extern XWMHints WMH;
- extern XSizeHints SZH;
-
- extern Set_Attr_Size, Conf_Size, GC_Size, Geometry_Size, Win_Attr_Size,
- Font_Info_Size, Char_Info_Size, Wm_Hints_Size, Size_Hints_Size;
- */
- /*
- extern RECORD Set_Attr_Rec[], Conf_Rec[], GC_Rec[], Geometry_Rec[],
- Win_Attr_Rec[], Font_Info_Rec[], Char_Info_Rec[], Wm_Hints_Rec[],
- Size_Hints_Rec[];
- */
-
extern SYMDESCR Func_Syms[], Bit_Grav_Syms[], Event_Syms[], Error_Syms[],
Grav_Syms[], Backing_Store_Syms[], Class_Syms[], Stack_Mode_Syms[],
--- 70,73 ----
***************
*** 253,258 ****
Initial_State_Syms[], Bitmapstatus_Syms[], Circulate_Syms[],
Ordering_Syms[], Byte_Order_Syms[], Saveset_Syms[], Closemode_Syms[],
! Event_Mask_Syms[];
! /*
! extern s48_value Sym_None, Sym_Now, Sym_Char_Info, Sym_Conf;
! */
--- 80,82 ----
Initial_State_Syms[], Bitmapstatus_Syms[], Circulate_Syms[],
Ordering_Syms[], Byte_Order_Syms[], Saveset_Syms[], Closemode_Syms[],
! Event_Mask_Syms[], Visual_Class_Syms[], Color_Flags_Syms[];
|