scsh-checkins
[Top] [All Lists]

[Scsh-checkins] CVS: scx/c/xlib visual.c,NONE,1.1 Makefile,1.4,1.5 color

To: scsh-checkins@lists.sourceforge.net
Subject: [Scsh-checkins] CVS: scx/c/xlib visual.c,NONE,1.1 Makefile,1.4,1.5 colormap.c,1.7,1.8 display.c,1.9,1.10 main.c,1.5,1.6 test,1.4,1.5 type.c,1.11,1.12 window.c,1.10,1.11 xlib.h,1.8,1.9
From: David Frese <frese@users.sourceforge.net>
Date: Thu Sep 20 07:42:01 2001
List-id: <scsh-checkins.lists.sourceforge.net>
Sender: scsh-checkins-admin@lists.sourceforge.net
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[];



<Prev in Thread] Current Thread [Next in Thread>
  • [Scsh-checkins] CVS: scx/c/xlib visual.c,NONE,1.1 Makefile,1.4,1.5 colormap.c,1.7,1.8 display.c,1.9,1.10 main.c,1.5,1.6 test,1.4,1.5 type.c,1.11,1.12 window.c,1.10,1.11 xlib.h,1.8,1.9, David Frese <=