Removed. Use glxinfo instead.
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 3 May 2000 14:17:50 +0000 (14:17 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 3 May 2000 14:17:50 +0000 (14:17 +0000)
progs/xdemos/glxdpyinfo.c [deleted file]

diff --git a/progs/xdemos/glxdpyinfo.c b/progs/xdemos/glxdpyinfo.c
deleted file mode 100644 (file)
index 70c8069..0000000
+++ /dev/null
@@ -1,1072 +0,0 @@
-/*
- * $TOG: xdpyinfo.c /main/35 1998/02/09 13:57:05 kaleb $
- * 
- * xdpyinfo - print information about X display connecton
- *
- * 
-Copyright 1988, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
- *
- * Author:  Jim Fulton, MIT X Consortium
- * GLX and Overlay support added by Jamie Zawinski <jwz@jwz.org>, 11-Nov-99
- *
- *      To compile:
- *         cc -DHAVE_GLX glxdpyinfo.c -o glxdpyinfo -lGL -lX11 -lXext -lm
- *
- *      Other defines to consider:
- *         -DHAVE_XIE -DHAVE_XTEST -DHAVE_XRECORD
- */
-
-#define HAVE_GLX  /* added by Brian Paul */
-
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Xproto.h> /* for CARD32 */
-#include <X11/extensions/multibuf.h>
-#ifdef HAVE_XIE
-#include <X11/extensions/XIElib.h>
-#endif /* HAVE_XIE */
-#ifdef HAVE_XTEST
-#include <X11/extensions/XTest.h>
-#endif /* HAVE_XTEST */
-#include <X11/extensions/sync.h>
-#include <X11/extensions/Xdbe.h>
-#ifdef HAVE_XRECORD
-#include <X11/extensions/record.h>
-#endif /* HAVE_XRECORD */
-#ifdef MITSHM
-#include <X11/extensions/XShm.h>
-#endif
-#include <X11/Xos.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifdef HAVE_GLX
-# include <GL/gl.h>
-# include <GL/glx.h>
-#endif /* HAVE_GLX */
-
-#define HAVE_OVERLAY /* jwz: no compile-time deps, so do this all the time */
-
-char *ProgramName;
-Bool queryExtensions = False;
-
-static int StrCmp(a, b)
-    char **a, **b;
-{
-    return strcmp(*a, *b);
-}
-
-
-static int print_event_mask (char *buf, int lastcol, int indent, long mask);
-
-
-
-#ifdef HAVE_GLX  /* Added by jwz, 11-Nov-99 */
-
-static void
-print_glx_versions (dpy)
-    Display *dpy;
-{
-  /* Note: with Mesa 3.0, this lies: it prints the info from the
-     client's GL library, rather than the info from the GLX server.
-
-     Note also that we can't protect these calls by only doing
-     them when the GLX extension is present, because with Mesa,
-     the server doesn't have that extension (but the GL library
-     works anyway.)
-   */
-      int scr = DefaultScreen (dpy);
-      const char *vend, *vers;
-      vend = glXQueryServerString (dpy, scr, GLX_VENDOR);
-      if (!vend) return;
-      vers = glXQueryServerString (dpy, scr, GLX_VERSION);
-      printf ("GLX vendor:    %s (%s)\n",
-              vend, (vers ? vers : "unknown version"));
-}
-
-static void
-print_glx_visual_info (dpy, vip)
-    Display *dpy;
-    XVisualInfo *vip;
-{
-  int status, value = False;
-
-  status = glXGetConfig (dpy, vip, GLX_USE_GL, &value);
-  if (status == GLX_NO_EXTENSION)
-    /* dpy does not support the GLX extension. */
-    return;
-
-  if (status == GLX_BAD_VISUAL || value == False)
-    {
-      printf ("    GLX supported:     no\n");
-      return;
-    }
-  else
-    {
-      printf ("    GLX supported:     yes\n");
-    }
-    
-  if (!glXGetConfig (dpy, vip, GLX_LEVEL, &value) &&
-      value != 0)
-    printf ("    GLX level:         %d\n", value);
-
-  if (!glXGetConfig (dpy, vip, GLX_RGBA, &value) && value)
-    {
-      int r=0, g=0, b=0, a=0;
-      glXGetConfig (dpy, vip, GLX_RED_SIZE,   &r);
-      glXGetConfig (dpy, vip, GLX_GREEN_SIZE, &g);
-      glXGetConfig (dpy, vip, GLX_BLUE_SIZE,  &b);
-      glXGetConfig (dpy, vip, GLX_ALPHA_SIZE, &a);
-      printf ("    GLX type:          RGBA (%2d, %2d, %2d, %2d)\n",
-              r, g, b, a);
-
-      r=0, g=0, b=0, a=0;
-      glXGetConfig (dpy, vip, GLX_ACCUM_RED_SIZE,   &r);
-      glXGetConfig (dpy, vip, GLX_ACCUM_GREEN_SIZE, &g);
-      glXGetConfig (dpy, vip, GLX_ACCUM_BLUE_SIZE,  &b);
-      glXGetConfig (dpy, vip, GLX_ACCUM_ALPHA_SIZE, &a);
-      printf ("    GLX accum:         RGBA (%2d, %2d, %2d, %2d)\n",
-              r, g, b, a);
-    }
-  else
-    {
-      value = 0;
-      glXGetConfig (dpy, vip, GLX_BUFFER_SIZE, &value);
-      printf ("    GLX type:          indexed (%d)\n", value);
-    }
-
-# if 0  /* redundant */
-  if (!glXGetConfig (dpy, vip, GLX_X_VISUAL_TYPE_EXT, &value))
-      printf ("    GLX class:         %s\n",
-              (value == GLX_TRUE_COLOR_EXT ? "TrueColor" :
-               value == GLX_DIRECT_COLOR_EXT ? "DirectColor" :
-               value == GLX_PSEUDO_COLOR_EXT ? "PseudoColor" :
-               value == GLX_STATIC_COLOR_EXT ? "StaticColor" :
-               value == GLX_GRAY_SCALE_EXT ? "Grayscale" :
-               value == GLX_STATIC_GRAY_EXT ? "StaticGray" : "???"));
-# endif
-
-# ifdef GLX_VISUAL_CAVEAT_EXT
-  if (!glXGetConfig (dpy, vip, GLX_VISUAL_CAVEAT_EXT, &value) &&
-      value != GLX_NONE_EXT)
-    printf ("    GLX rating:        %s\n",
-            (value == GLX_NONE_EXT ? "none" :
-             value == GLX_SLOW_VISUAL_EXT ? "slow" :
-#   ifdef GLX_NON_CONFORMANT_EXT
-             value == GLX_NON_CONFORMANT_EXT ? "non-conformant" :
-#   endif
-             "???"));
-# endif
-
-  if (!glXGetConfig (dpy, vip, GLX_DOUBLEBUFFER, &value))
-    printf ("    GLX double-buffer: %s\n", (value ? "yes" : "no"));
-
-  if (!glXGetConfig (dpy, vip, GLX_STEREO, &value) &&
-      value)
-    printf ("    GLX stereo:        %s\n", (value ? "yes" : "no"));
-
-  if (!glXGetConfig (dpy, vip, GLX_AUX_BUFFERS, &value) &&
-      value != 0)
-    printf ("    GLX aux buffers:   %d\n", value);
-
-  if (!glXGetConfig (dpy, vip, GLX_DEPTH_SIZE, &value))
-    printf ("    GLX depth size:    %d\n", value);
-
-  if (!glXGetConfig (dpy, vip, GLX_STENCIL_SIZE, &value) &&
-      value != 0)
-    printf ("    GLX stencil size:  %d\n", value);
-
-# ifdef GLX_SAMPLE_BUFFERS_SGIS
-  if (!glXGetConfig (dpy, vip, GLX_SAMPLE_BUFFERS_SGIS, &value) &&
-      value != 0)
-    {
-      int bufs = value;
-      if (!glXGetConfig (dpy, vip, GLX_SAMPLES_SGIS, &value))
-        printf ("    GLX multisamplers: %d (%d)\n", bufs, value);
-    }
-# endif
-
-  if (!glXGetConfig (dpy, vip, GLX_TRANSPARENT_TYPE_EXT, &value) &&
-      value != GLX_NONE_EXT)
-    {
-      if (value == GLX_NONE_EXT)
-        printf ("    GLX transparency:  none\n");
-      else if (value == GLX_TRANSPARENT_INDEX_EXT)
-        {
-          if (!glXGetConfig (dpy, vip, GLX_TRANSPARENT_INDEX_VALUE_EXT,&value))
-            printf ("    GLX transparency:  indexed (%d)\n", value);
-        }
-      else if (value == GLX_TRANSPARENT_RGB_EXT)
-        {
-          int r=0, g=0, b=0, a=0;
-          glXGetConfig (dpy, vip, GLX_TRANSPARENT_RED_VALUE_EXT,   &r);
-          glXGetConfig (dpy, vip, GLX_TRANSPARENT_GREEN_VALUE_EXT, &g);
-          glXGetConfig (dpy, vip, GLX_TRANSPARENT_BLUE_VALUE_EXT,  &b);
-          glXGetConfig (dpy, vip, GLX_TRANSPARENT_ALPHA_VALUE_EXT, &a);
-          printf ("    GLX transparency:  RGBA (%2d, %2d, %2d, %2d)\n",
-                  r, g, b, a);
-        }
-    }
-}
-#endif /* HAVE_GLX */
-
-
-#ifdef HAVE_OVERLAY  /* Added by jwz, 11-Nov-99 */
-
- /* If the server's root window contains a SERVER_OVERLAY_VISUALS property,
-    then that identifies the visuals which correspond to the video hardware's
-    overlay planes.  Windows created in these kinds of visuals may have
-    transparent pixels that let other layers shine through.
-
-    This might not be an X Consortium standard, but it turns out that
-    SGI, HP, DEC, and IBM all use this same mechanism.  So that's close
-    enough for me.
-
-    Documentation on the SERVER_OVERLAY_VISUALS property can be found at:
-    http://www.hp.com/xwindow/sharedInfo/Whitepapers/Visuals/server_overlay_visuals.html
-  */
-
-struct overlay
-{
-  CARD32 visual_id;
-  CARD32 transparency; /* 0: none; 1: pixel; 2: mask */
-  CARD32 value;                /* the transparent pixel */
-  CARD32 layer;                /* -1: underlay; 0: normal; 1: popup; 2: overlay */
-};
-
-struct overlay_list
-{
-  int count;
-  struct overlay *list;
-};
-
-static struct overlay_list *overlays = 0;
-
-static void
-find_overlay_info (dpy)
-  Display *dpy;
-{
-  int screen;
-  Atom OVERLAY = XInternAtom (dpy, "SERVER_OVERLAY_VISUALS", False);
-
-  overlays = (struct overlay_list *) calloc (sizeof (struct overlay_list),
-                                             ScreenCount (dpy));
-
-  for (screen = 0; screen < ScreenCount (dpy); screen++)
-    {
-      Window window = RootWindow (dpy, screen);
-      Atom actual_type;
-      int actual_format;
-      unsigned long nitems, bytes_after;
-      struct overlay *data = 0;
-      int result = XGetWindowProperty (dpy, window, OVERLAY,
-                                       0, (65536 / sizeof (long)), False, 
-                                       OVERLAY, &actual_type, &actual_format,
-                                       &nitems, &bytes_after,
-                                       (unsigned char **) &data);
-      if (result == Success &&
-          actual_type == OVERLAY &&
-          actual_format == 32 &&
-          nitems > 0)
-        {
-          overlays[screen].count = (nitems /
-                                    (sizeof(struct overlay) / sizeof(CARD32)));
-          overlays[screen].list = data;
-        }
-      else if (data)
-        XFree((char *) data);
-    }
-}
-
-static void
-print_overlay_visual_info (vip)
-    XVisualInfo *vip;
-{
-  int i;
-  int vis = vip->visualid;
-  int scr = vip->screen;
-  if (!overlays) return;
-  for (i = 0; i < overlays[scr].count; i++)
-    if (vis == overlays[scr].list[i].visual_id)
-      {
-        struct overlay *ov = &overlays[scr].list[i];
-        printf ("    Overlay info:      layer %ld (%s), ",
-                (long) ov->layer,
-                (ov->layer == -1 ? "underlay" :
-                 ov->layer ==  0 ? "normal" :
-                 ov->layer ==  1 ? "popup" :
-                 ov->layer ==  2 ? "overlay" : "???"));
-        if (ov->transparency == 1)
-          printf ("transparent pixel %lu\n", (unsigned long) ov->value);
-        else if (ov->transparency == 2)
-          printf ("transparent mask 0x%x\n", (unsigned) ov->value);
-        else
-          printf ("opaque\n");
-      }
-}
-#endif /* HAVE_OVERLAY */
-
-
-static void
-print_extension_info (dpy)
-    Display *dpy;
-{
-    int n = 0;
-    char **extlist = XListExtensions (dpy, &n);
-
-    printf ("number of extensions:    %d\n", n);
-
-    if (extlist) {
-       register int i;
-       int opcode, event, error;
-
-       qsort(extlist, n, sizeof(char *), StrCmp);
-       for (i = 0; i < n; i++) {
-           if (!queryExtensions) {
-               printf ("    %s\n", extlist[i]);
-               continue;
-           }
-           XQueryExtension(dpy, extlist[i], &opcode, &event, &error);
-           printf ("    %s  (opcode: %d", extlist[i], opcode);
-           if (event)
-               printf (", base event: %d", event);
-           if (error)
-               printf (", base error: %d", error);
-           printf(")\n");
-       }
-       /* do not free, Xlib can depend on contents being unaltered */
-       /* XFreeExtensionList (extlist); */
-    }
-}
-
-static void
-print_display_info (dpy)
-    Display *dpy;
-{
-    char dummybuf[40];
-    char *cp;
-    int minkeycode, maxkeycode;
-    int i, n;
-    long req_size;
-    XPixmapFormatValues *pmf;
-    Window focuswin;
-    int focusrevert;
-
-    printf ("name of display:    %s\n", DisplayString (dpy));
-    printf ("version number:    %d.%d\n",
-           ProtocolVersion (dpy), ProtocolRevision (dpy));
-    printf ("vendor string:    %s\n", ServerVendor (dpy));
-    printf ("vendor release number:    %d\n", VendorRelease (dpy));
-
-#ifdef HAVE_GLX
-    print_glx_versions (dpy);
-#endif /* HAVE_GLX */
-
-    req_size = XExtendedMaxRequestSize (dpy);
-    if (!req_size) req_size = XMaxRequestSize (dpy);
-    printf ("maximum request size:  %ld bytes\n", req_size * 4);
-    printf ("motion buffer size:  %d\n", (int) XDisplayMotionBufferSize(dpy));
-
-    switch (BitmapBitOrder (dpy)) {
-      case LSBFirst:    cp = "LSBFirst"; break;
-      case MSBFirst:    cp = "MSBFirst"; break;
-      default:    
-       sprintf (dummybuf, "unknown order %d", BitmapBitOrder (dpy));
-       cp = dummybuf;
-       break;
-    }
-    printf ("bitmap unit, bit order, padding:    %d, %s, %d\n",
-           BitmapUnit (dpy), cp, BitmapPad (dpy));
-
-    switch (ImageByteOrder (dpy)) {
-      case LSBFirst:    cp = "LSBFirst"; break;
-      case MSBFirst:    cp = "MSBFirst"; break;
-      default:    
-       sprintf (dummybuf, "unknown order %d", ImageByteOrder (dpy));
-       cp = dummybuf;
-       break;
-    }
-    printf ("image byte order:    %s\n", cp);
-
-    pmf = XListPixmapFormats (dpy, &n);
-    printf ("number of supported pixmap formats:    %d\n", n);
-    if (pmf) {
-       printf ("supported pixmap formats:\n");
-       for (i = 0; i < n; i++) {
-           printf ("    depth %d, bits_per_pixel %d, scanline_pad %d\n",
-                   pmf[i].depth, pmf[i].bits_per_pixel, pmf[i].scanline_pad);
-       }
-       XFree ((char *) pmf);
-    }
-
-
-    /*
-     * when we get interfaces to the PixmapFormat stuff, insert code here
-     */
-
-    XDisplayKeycodes (dpy, &minkeycode, &maxkeycode);
-    printf ("keycode range:    minimum %d, maximum %d\n",
-           minkeycode, maxkeycode);
-
-    XGetInputFocus (dpy, &focuswin, &focusrevert);
-    printf ("focus:  ");
-    switch (focuswin) {
-      case PointerRoot:
-       printf ("PointerRoot\n");
-       break;
-      case None:
-       printf ("None\n");
-       break;
-      default:
-       printf("window 0x%lx, revert to ", focuswin);
-       switch (focusrevert) {
-         case RevertToParent:
-           printf ("Parent\n");
-           break;
-         case RevertToNone:
-           printf ("None\n");
-           break;
-         case RevertToPointerRoot:
-           printf ("PointerRoot\n");
-           break;
-         default:                      /* should not happen */
-           printf ("%d\n", focusrevert);
-           break;
-       }
-       break;
-    }
-
-    print_extension_info (dpy);
-
-    printf ("default screen number:    %d\n", DefaultScreen (dpy));
-    printf ("number of screens:    %d\n", ScreenCount (dpy));
-}
-
-static void
-print_visual_info (vip)
-    XVisualInfo *vip;
-{
-    char errorbuf[40];                 /* for sprintfing into */
-    char *class = NULL;                        /* for printing */
-
-    switch (vip->class) {
-      case StaticGray:    class = "StaticGray"; break;
-      case GrayScale:    class = "GrayScale"; break;
-      case StaticColor:    class = "StaticColor"; break;
-      case PseudoColor:    class = "PseudoColor"; break;
-      case TrueColor:    class = "TrueColor"; break;
-      case DirectColor:    class = "DirectColor"; break;
-      default:    
-       sprintf (errorbuf, "unknown class %d", vip->class);
-       class = errorbuf;
-       break;
-    }
-
-    printf ("  visual:\n");
-    printf ("    visual id:    0x%lx\n", vip->visualid);
-    printf ("    class:    %s\n", class);
-    printf ("    depth:    %d plane%s\n", vip->depth, 
-           vip->depth == 1 ? "" : "s");
-    if (vip->class == TrueColor || vip->class == DirectColor)
-       printf ("    available colormap entries:    %d per subfield\n",
-               vip->colormap_size);
-    else
-       printf ("    available colormap entries:    %d\n",
-               vip->colormap_size);
-    printf ("    red, green, blue masks:    0x%lx, 0x%lx, 0x%lx\n",
-           vip->red_mask, vip->green_mask, vip->blue_mask);
-    printf ("    significant bits in color specification:    %d bits\n",
-           vip->bits_per_rgb);
-}
-
-static void
-print_screen_info (dpy, scr)
-    Display *dpy;
-    int scr;
-{
-    Screen *s = ScreenOfDisplay (dpy, scr);  /* opaque structure */
-    XVisualInfo viproto;               /* fill in for getting info */
-    XVisualInfo *vip;                  /* retured info */
-    int nvi;                           /* number of elements returned */
-    int i;                             /* temp variable: iterator */
-    char eventbuf[80];                 /* want 79 chars per line + nul */
-    static char *yes = "YES", *no = "NO", *when = "WHEN MAPPED";
-    double xres, yres;
-    int ndepths = 0, *depths = NULL;
-    unsigned int width, height;
-
-
-    /*
-     * there are 2.54 centimeters to an inch; so there are 25.4 millimeters.
-     *
-     *     dpi = N pixels / (M millimeters / (25.4 millimeters / 1 inch))
-     *         = N pixels / (M inch / 25.4)
-     *         = N * 25.4 pixels / M inch
-     */
-
-    xres = ((((double) DisplayWidth(dpy,scr)) * 25.4) / 
-           ((double) DisplayWidthMM(dpy,scr)));
-    yres = ((((double) DisplayHeight(dpy,scr)) * 25.4) / 
-           ((double) DisplayHeightMM(dpy,scr)));
-
-    printf ("\n");
-    printf ("screen #%d:\n", scr);
-    printf ("  dimensions:    %dx%d pixels (%dx%d millimeters)\n",
-           DisplayWidth (dpy, scr), DisplayHeight (dpy, scr),
-           DisplayWidthMM(dpy, scr), DisplayHeightMM (dpy, scr));
-    printf ("  resolution:    %dx%d dots per inch\n", 
-           (int) (xres + 0.5), (int) (yres + 0.5));
-    depths = XListDepths (dpy, scr, &ndepths);
-    if (!depths) ndepths = 0;
-    printf ("  depths (%d):    ", ndepths);
-    for (i = 0; i < ndepths; i++) {
-       printf ("%d", depths[i]);
-       if (i < ndepths - 1) { 
-           putchar (',');
-           putchar (' ');
-       }
-    }
-    putchar ('\n');
-    if (depths) XFree ((char *) depths);
-    printf ("  root window id:    0x%lx\n", RootWindow (dpy, scr));
-    printf ("  depth of root window:    %d plane%s\n",
-           DisplayPlanes (dpy, scr),
-           DisplayPlanes (dpy, scr) == 1 ? "" : "s");
-    printf ("  number of colormaps:    minimum %d, maximum %d\n",
-           MinCmapsOfScreen(s), MaxCmapsOfScreen(s));
-    printf ("  default colormap:    0x%lx\n", DefaultColormap (dpy, scr));
-    printf ("  default number of colormap cells:    %d\n",
-           DisplayCells (dpy, scr));
-    printf ("  preallocated pixels:    black %ld, white %ld\n",
-           BlackPixel (dpy, scr), WhitePixel (dpy, scr));
-    printf ("  options:    backing-store %s, save-unders %s\n",
-           (DoesBackingStore (s) == NotUseful) ? no :
-           ((DoesBackingStore (s) == Always) ? yes : when),
-           DoesSaveUnders (s) ? yes : no);
-    XQueryBestSize (dpy, CursorShape, RootWindow (dpy, scr), 65535, 65535,
-                   &width, &height);
-    if (width == 65535 && height == 65535)
-       printf ("  largest cursor:    unlimited\n");
-    else
-       printf ("  largest cursor:    %dx%d\n", width, height);
-    printf ("  current input event mask:    0x%lx\n", EventMaskOfScreen (s));
-    (void) print_event_mask (eventbuf, 79, 4, EventMaskOfScreen (s));
-                     
-
-    nvi = 0;
-    viproto.screen = scr;
-    vip = XGetVisualInfo (dpy, VisualScreenMask, &viproto, &nvi);
-    printf ("  number of visuals:    %d\n", nvi);
-    printf ("  default visual id:  0x%lx\n", 
-           XVisualIDFromVisual (DefaultVisual (dpy, scr)));
-    for (i = 0; i < nvi; i++) {
-       print_visual_info (vip+i);
-#ifdef HAVE_OVERLAY
-       print_overlay_visual_info (vip+i);
-#endif /* HAVE_OVERLAY */
-#ifdef HAVE_GLX
-       print_glx_visual_info (dpy, vip+i);
-#endif /* HAVE_GLX */
-    }
-    if (vip) XFree ((char *) vip);
-}
-
-/*
- * The following routine prints out an event mask, wrapping events at nice
- * boundaries.
- */
-
-#define MASK_NAME_WIDTH 25
-
-static struct _event_table {
-    char *name;
-    long value;
-} event_table[] = {
-    { "KeyPressMask             ", KeyPressMask },
-    { "KeyReleaseMask           ", KeyReleaseMask },
-    { "ButtonPressMask          ", ButtonPressMask },
-    { "ButtonReleaseMask        ", ButtonReleaseMask },
-    { "EnterWindowMask          ", EnterWindowMask },
-    { "LeaveWindowMask          ", LeaveWindowMask },
-    { "PointerMotionMask        ", PointerMotionMask },
-    { "PointerMotionHintMask    ", PointerMotionHintMask },
-    { "Button1MotionMask        ", Button1MotionMask },
-    { "Button2MotionMask        ", Button2MotionMask },
-    { "Button3MotionMask        ", Button3MotionMask },
-    { "Button4MotionMask        ", Button4MotionMask },
-    { "Button5MotionMask        ", Button5MotionMask },
-    { "ButtonMotionMask         ", ButtonMotionMask },
-    { "KeymapStateMask          ", KeymapStateMask },
-    { "ExposureMask             ", ExposureMask },
-    { "VisibilityChangeMask     ", VisibilityChangeMask },
-    { "StructureNotifyMask      ", StructureNotifyMask },
-    { "ResizeRedirectMask       ", ResizeRedirectMask },
-    { "SubstructureNotifyMask   ", SubstructureNotifyMask },
-    { "SubstructureRedirectMask ", SubstructureRedirectMask },
-    { "FocusChangeMask          ", FocusChangeMask },
-    { "PropertyChangeMask       ", PropertyChangeMask },
-    { "ColormapChangeMask       ", ColormapChangeMask },
-    { "OwnerGrabButtonMask      ", OwnerGrabButtonMask },
-    { NULL, 0 }};
-
-static int print_event_mask (char *buf, int lastcol, int indent, long mask)
-{
-    struct _event_table *etp;
-    int len;
-    int bitsfound = 0;
-
-    buf[0] = buf[lastcol] = '\0';      /* just in case */
-
-#define INDENT() { register int i; len = indent; \
-                  for (i = 0; i < indent; i++) buf[i] = ' '; }
-
-    INDENT ();
-
-    for (etp = event_table; etp->name; etp++) {
-       if (mask & etp->value) {
-           if (len + MASK_NAME_WIDTH > lastcol) {
-               puts (buf);
-               INDENT ();
-           }
-           strcpy (buf+len, etp->name);
-           len += MASK_NAME_WIDTH;
-           bitsfound++;
-       }
-    }
-
-    if (bitsfound) puts (buf);
-
-#undef INDENT
-
-    return (bitsfound);
-}
-
-static void
-print_standard_extension_info(dpy, extname, majorrev, minorrev)
-    Display *dpy;
-    char *extname;
-    int majorrev, minorrev;
-{
-    int opcode, event, error;
-
-    printf("%s version %d.%d ", extname, majorrev, minorrev);
-
-    XQueryExtension(dpy, extname, &opcode, &event, &error);
-    printf ("opcode: %d", opcode);
-    if (event)
-       printf (", base event: %d", event);
-    if (error)
-       printf (", base error: %d", error);
-    printf("\n");
-}
-
-static int
-print_multibuf_info(dpy, extname)
-    Display *dpy;
-    char *extname;
-{
-    int i, j;                  /* temp variable: iterator */
-    int nmono, nstereo;                /* count */
-    XmbufBufferInfo *mono_info = NULL, *stereo_info = NULL; /* arrays */
-    static char *fmt = 
-       "    visual id, max buffers, depth:    0x%lx, %d, %d\n";
-    int scr = 0;
-    int majorrev, minorrev;
-
-    if (!XmbufGetVersion(dpy, &majorrev, &minorrev))
-       return 0;
-
-    print_standard_extension_info(dpy, extname, majorrev, minorrev);
-
-    for (i = 0; i < ScreenCount (dpy); i++)
-    {
-       if (!XmbufGetScreenInfo (dpy, RootWindow(dpy, scr), &nmono, &mono_info,
-                                &nstereo, &stereo_info)) {
-           fprintf (stderr,
-                    "%s:  unable to get multibuffer info for screen %d\n",
-                    ProgramName, scr);
-       } else {
-           printf ("  screen %d number of mono multibuffer types:    %d\n", i, nmono);
-           for (j = 0; j < nmono; j++) {
-               printf (fmt, mono_info[j].visualid, mono_info[j].max_buffers,
-                       mono_info[j].depth);
-           }
-           printf ("  number of stereo multibuffer types:    %d\n", nstereo);
-           for (j = 0; j < nstereo; j++) {
-               printf (fmt, stereo_info[j].visualid,
-                       stereo_info[j].max_buffers, stereo_info[j].depth);
-           }
-           if (mono_info) XFree ((char *) mono_info);
-           if (stereo_info) XFree ((char *) stereo_info);
-       }
-    }
-    return 1;
-} /* end print_multibuf_info */
-
-
-/* XIE stuff */
-
-#ifdef HAVE_XIE
-
-char *subset_names[] = { NULL, "FULL", "DIS" };
-char *align_names[] = { NULL, "Alignable", "Arbitrary" };
-char *group_names[] = { /* 0  */ "Default",
-                           /* 2  */ "ColorAlloc",
-                           /* 4  */ "Constrain",
-                           /* 6  */ "ConvertFromRGB",
-                           /* 8  */ "ConvertToRGB",
-                           /* 10 */ "Convolve",
-                           /* 12 */ "Decode",
-                           /* 14 */ "Dither",
-                           /* 16 */ "Encode",
-                           /* 18 */ "Gamut",
-                           /* 20 */ "Geometry",
-                           /* 22 */ "Histogram",
-                           /* 24 */ "WhiteAdjust"
-                           };
-
-int
-print_xie_info(dpy, extname)
-    Display *dpy;
-    char *extname;
-{
-    XieExtensionInfo *xieInfo;
-    int i;
-    int ntechs;
-    XieTechnique *techs;
-    XieTechniqueGroup prevGroup;
-
-    if (!XieInitialize(dpy, &xieInfo ))
-       return 0;
-
-    print_standard_extension_info(dpy, extname,
-       xieInfo->server_major_rev, xieInfo->server_minor_rev);
-
-    printf("  service class: %s\n", subset_names[xieInfo->service_class]);
-    printf("  alignment: %s\n", align_names[xieInfo->alignment]);
-    printf("  uncnst_mantissa: %d\n", xieInfo->uncnst_mantissa);
-    printf("  uncnst_min_exp: %d\n", xieInfo->uncnst_min_exp);
-    printf("  uncnst_max_exp: %d\n", xieInfo->uncnst_max_exp);
-    printf("  cnst_levels:"); 
-    for (i = 0; i < xieInfo->n_cnst_levels; i++)
-       printf(" %d", xieInfo->cnst_levels[i]);
-    printf("\n");
-
-    if (!XieQueryTechniques(dpy, xieValAll, &ntechs, &techs))
-       return 1;
-
-    prevGroup = -1;
-
-    for (i = 0; i < ntechs; i++)
-    {
-       if (techs[i].group != prevGroup)
-       {
-           printf("  technique group: %s\n", group_names[techs[i].group >> 1]);
-           prevGroup = techs[i].group;
-       }
-       printf("    %s\tspeed: %d  needs_param: %s  number: %d\n",
-              techs[i].name,
-              techs[i].speed, (techs[i].needs_param ? "True " : "False"),
-              techs[i].number);
-    }
-    return 1;
-} /* end print_xie_info */
-
-#endif /* HAVE_XIE */
-
-
-#ifdef HAVE_XTEST
-int
-print_xtest_info(dpy, extname)
-    Display *dpy;
-    char *extname;
-{
-    int majorrev, minorrev, foo;
-
-    if (!XTestQueryExtension(dpy, &foo, &foo, &majorrev, &minorrev))
-       return 0;
-    print_standard_extension_info(dpy, extname, majorrev, minorrev);
-    return 1;
-}
-#endif /* HAVE_XTEST */
-
-static int
-print_sync_info(dpy, extname)
-    Display *dpy;
-    char *extname;
-{
-    int majorrev, minorrev;
-    XSyncSystemCounter *syscounters;
-    int ncounters, i;
-
-    if (!XSyncInitialize(dpy, &majorrev, &minorrev))
-       return 0;
-    print_standard_extension_info(dpy, extname, majorrev, minorrev);
-
-    syscounters = XSyncListSystemCounters(dpy, &ncounters);
-    printf("  system counters: %d\n", ncounters);
-    for (i = 0; i < ncounters; i++)
-    {
-       printf("    %s  id: 0x%08x  resolution_lo: %d  resolution_hi: %d\n",
-              syscounters[i].name, (int) syscounters[i].counter,
-              (int) XSyncValueLow32(syscounters[i].resolution),
-               (int) XSyncValueHigh32(syscounters[i].resolution));
-    }
-    XSyncFreeSystemCounterList(syscounters);
-    return 1;
-}
-
-static int
-print_shape_info(dpy, extname)
-    Display *dpy;
-    char *extname;
-{
-    int majorrev, minorrev;
-
-    if (!XShapeQueryVersion(dpy, &majorrev, &minorrev))
-       return 0;
-    print_standard_extension_info(dpy, extname, majorrev, minorrev);
-    return 1;
-}
-
-#ifdef MITSHM
-static int
-print_mitshm_info(dpy, extname)
-    Display *dpy;
-    char *extname;
-{
-    int majorrev, minorrev;
-    Bool sharedPixmaps;
-
-    if (!XShmQueryVersion(dpy, &majorrev, &minorrev, &sharedPixmaps))
-       return 0;
-    print_standard_extension_info(dpy, extname, majorrev, minorrev);
-    printf("  shared pixmaps: ");
-    if (sharedPixmaps)
-    {
-       int format = XShmPixmapFormat(dpy);
-       printf("yes, format: %d\n", format);
-    }
-    else
-    {
-       printf("no\n");
-    }
-    return 1;
-}
-#endif /* MITSHM */
-
-static int
-print_dbe_info(dpy, extname)
-    Display *dpy;
-    char *extname;
-{
-    int majorrev, minorrev;
-    XdbeScreenVisualInfo *svi;
-    int numscreens = 0;
-    int iscrn, ivis;
-
-    if (!XdbeQueryExtension(dpy, &majorrev, &minorrev))
-       return 0;
-
-    print_standard_extension_info(dpy, extname, majorrev, minorrev);
-    svi = XdbeGetVisualInfo(dpy, (Drawable *)NULL, &numscreens);
-    for (iscrn = 0; iscrn < numscreens; iscrn++)
-    {
-       printf("  Double-buffered visuals on screen %d\n", iscrn);
-       for (ivis = 0; ivis < svi[iscrn].count; ivis++)
-       {
-           printf("    visual id 0x%lx  depth %d  perflevel %d\n",
-                  svi[iscrn].visinfo[ivis].visual,
-                  svi[iscrn].visinfo[ivis].depth,
-                  svi[iscrn].visinfo[ivis].perflevel);
-       }
-    }
-    XdbeFreeVisualInfo(svi);
-    return 1;
-}
-
-#ifdef HAVE_XRECORD
-static int
-print_record_info(dpy, extname)
-    Display *dpy;
-    char *extname;
-{
-    int majorrev, minorrev;
-
-    if (!XRecordQueryVersion(dpy, &majorrev, &minorrev))
-       return 0;
-    print_standard_extension_info(dpy, extname, majorrev, minorrev);
-    return 1;
-}
-#endif /* HAVE_XRECORD */
-
-/* utilities to manage the list of recognized extensions */
-
-
-typedef int (*ExtensionPrintFunc)(
-#if NeedFunctionPrototypes
-    Display *, char *
-#endif
-);
-
-typedef struct {
-    char *extname;
-    ExtensionPrintFunc printfunc;
-    Bool printit;
-} ExtensionPrintInfo;
-
-ExtensionPrintInfo known_extensions[] =
-{
-#ifdef MITSHM
-    {"MIT-SHM",        print_mitshm_info, False},
-#endif /* MITSHM */
-    {MULTIBUFFER_PROTOCOL_NAME,        print_multibuf_info, False},
-    {"SHAPE", print_shape_info, False},
-    {SYNC_NAME, print_sync_info, False},
-#ifdef HAVE_XIE
-    {xieExtName, print_xie_info, False},
-#endif /* HAVE_XIE */
-#ifdef HAVE_XTEST
-    {XTestExtensionName, print_xtest_info, False},
-#endif /* HAVE_XTEST */
-    {"DOUBLE-BUFFER", print_dbe_info, False},
-#ifdef HAVE_XRECORD
-    {"RECORD", print_record_info, False}    
-#endif /* HAVE_XRECORD */
-    /* add new extensions here */
-    /* wish list: PEX XKB LBX */
-};
-
-int num_known_extensions = sizeof known_extensions / sizeof known_extensions[0];
-
-static void
-print_known_extensions(f)
-    FILE *f;
-{
-    int i;
-    for (i = 0; i < num_known_extensions; i++)
-    {
-       fprintf(f, "%s ", known_extensions[i].extname);
-    }
-}
-
-static void
-mark_extension_for_printing(extname)
-    char *extname;
-{
-    int i;
-
-    if (strcmp(extname, "all") == 0)
-    {
-       for (i = 0; i < num_known_extensions; i++)
-           known_extensions[i].printit = True;
-    }
-    else
-    {
-       for (i = 0; i < num_known_extensions; i++)
-       {
-           if (strcmp(extname, known_extensions[i].extname) == 0)
-           {
-               known_extensions[i].printit = True;
-               return;
-           }
-       }
-       printf("%s extension not supported by %s\n", extname, ProgramName);
-    }
-}
-
-static void
-print_marked_extensions(dpy)
-    Display *dpy;
-{
-    int i;
-    for (i = 0; i < num_known_extensions; i++)
-    {
-       if (known_extensions[i].printit)
-       {
-           printf("\n");
-           if (! (*known_extensions[i].printfunc)(dpy,
-                                       known_extensions[i].extname))
-           {
-               printf("%s extension not supported by server\n",
-                      known_extensions[i].extname);
-           }
-       }
-    }
-}
-
-static void usage ()
-{
-    fprintf (stderr, "usage:  %s [options]\n", ProgramName);
-    fprintf (stderr, "-display displayname\tserver to query\n");
-    fprintf (stderr, "-queryExtensions\tprint info returned by XQueryExtension\n");
-    fprintf (stderr, "-ext all\t\tprint detailed info for all supported extensions\n");
-    fprintf (stderr, "-ext extension-name\tprint detailed info for extension-name if one of:\n     ");
-    print_known_extensions(stderr);
-    fprintf (stderr, "\n");
-    exit (1);
-}
-
-int main (argc, argv)
-    int argc;
-    char *argv[];
-{
-    Display *dpy;                      /* X connection */
-    char *displayname = NULL;          /* server to contact */
-    int i;                             /* temp variable:  iterator */
-
-    ProgramName = argv[0];
-
-    for (i = 1; i < argc; i++) {
-       char *arg = argv[i];
-       int len = strlen(arg);
-       
-       if (!strncmp("-display", arg, len)) {
-           if (++i >= argc) usage ();
-           displayname = argv[i];
-       } else if (!strncmp("-queryExtensions", arg, len)) {
-           queryExtensions = True;
-       } else if (!strncmp("-ext", arg, len)) {
-           if (++i >= argc) usage ();
-           mark_extension_for_printing(argv[i]);
-       } else
-           usage ();
-    }
-
-    dpy = XOpenDisplay (displayname);
-    if (!dpy) {
-       fprintf (stderr, "%s:  unable to open display \"%s\".\n",
-                ProgramName, XDisplayName (displayname));
-       exit (1);
-    }
-
-#ifdef HAVE_OVERLAY
-       find_overlay_info (dpy);
-#endif /* HAVE_OVERLAY */
-
-    print_display_info (dpy);
-    for (i = 0; i < ScreenCount (dpy); i++) {
-       print_screen_info (dpy, i);
-    }
-
-    print_marked_extensions(dpy);
-
-    XCloseDisplay (dpy);
-    exit (0);
-}