#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/extensions/XRes.h>
int main(int argc, char **argv)
{
Display *display = NULL;
int major_version, minor_version;
int event, error;
int count;
int i;
XResClient *clients;
if (argc == 2) {
if (!(display = XOpenDisplay(argv[1]))) {
printf("Cannot open display %s\n", argv[1]);
return -1;
}
} else {
printf("Usage: %s display\n", argv[0]);
return -1;
}
if (!display && !(display = XOpenDisplay(NULL))) {
printf("Cannot open default display\n");
return -1;
}
if (!XResQueryExtension(display, &event, &error)) {
printf("X-Resource extension not present\n");
return -1;
}
printf("X-Resource extension present: event=%d error=%d\n", event, error);
if (!XResQueryVersion(display, &major_version, &minor_version)) {
printf("XResQueryVersion call failed\n");
return -1;
}
printf("X-Resource extension version: %d.%d\n",
major_version, minor_version);
XResQueryClients(display, &count, &clients);
printf("%d clients:\n", count);
for (i = 0; i < count; i++) {
int c, j;
XResType *types;
XResQueryClientResources(display, clients[i].resource_base,
&c, &types);
printf(" %3d: base = 0x%lx, mask = 0x%lx, %d resource types:\n",
i, (long unsigned)clients[i].resource_base,
(long unsigned)clients[i].resource_mask, c);
for (j = 0; j < c; j++) {
char *name = XGetAtomName(display, types[j].resource_type);
printf(" %2d: %s %d\n", j, name, types[j].count);
XFree(name);
}
XFree(types);
}
XFree(clients);
XCloseDisplay(display);
return 0;
}