2 Copyright (c) 2002 XFree86 Inc
9 #include <X11/Xlibint.h>
10 #include <X11/Xutil.h>
11 #include <X11/extensions/Xext.h>
12 #include <X11/extensions/extutil.h>
13 #include <X11/extensions/XResproto.h>
14 #include <X11/extensions/XRes.h>
17 static XExtensionInfo _xres_ext_info_data;
18 static XExtensionInfo *xres_ext_info = &_xres_ext_info_data;
19 static char *xres_extension_name = XRES_NAME;
21 #define XResCheckExtension(dpy,i,val) \
22 XextCheckExtension (dpy, i, xres_extension_name, val)
24 static XEXT_GENERATE_CLOSE_DISPLAY (close_display, xres_ext_info)
26 static XExtensionHooks xres_extension_hooks = {
31 NULL, /* create_font */
33 close_display, /* close_display */
34 NULL, /* wire_to_event */
35 NULL, /* event_to_wire */
37 NULL, /* error_string */
40 static XEXT_GENERATE_FIND_DISPLAY (find_display, xres_ext_info,
42 &xres_extension_hooks,
45 Bool XResQueryExtension (
47 int *event_base_return,
48 int *error_base_return
51 XExtDisplayInfo *info = find_display (dpy);
53 if (XextHasExtension(info)) {
54 *event_base_return = info->codes->first_event;
55 *error_base_return = info->codes->first_error;
62 Status XResQueryVersion(
64 int *major_version_return,
65 int *minor_version_return
68 XExtDisplayInfo *info = find_display (dpy);
69 xXResQueryVersionReply rep;
70 xXResQueryVersionReq *req;
72 XResCheckExtension (dpy, info, 0);
75 GetReq (XResQueryVersion, req);
76 req->reqType = info->codes->major_opcode;
77 req->XResReqType = X_XResQueryVersion;
78 req->client_major = XRES_MAJOR_VERSION;
79 req->client_minor = XRES_MINOR_VERSION;
80 if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
85 *major_version_return = rep.server_major;
86 *minor_version_return = rep.server_minor;
93 Status XResQueryClients (
99 XExtDisplayInfo *info = find_display (dpy);
100 xXResQueryClientsReq *req;
101 xXResQueryClientsReply rep;
108 XResCheckExtension (dpy, info, 0);
111 GetReq (XResQueryClients, req);
112 req->reqType = info->codes->major_opcode;
113 req->XResReqType = X_XResQueryClients;
114 if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) {
120 if(rep.num_clients) {
121 if((clnts = Xmalloc(sizeof(XResClient) * rep.num_clients))) {
125 for(i = 0; i < rep.num_clients; i++) {
126 _XRead(dpy, (char*)&scratch, sz_xXResClient);
127 clnts[i].resource_base = scratch.resource_base;
128 clnts[i].resource_mask = scratch.resource_mask;
131 *num_clients = rep.num_clients;
134 _XEatData(dpy, rep.length << 2);
143 Status XResQueryClientResources (
150 XExtDisplayInfo *info = find_display (dpy);
151 xXResQueryClientResourcesReq *req;
152 xXResQueryClientResourcesReply rep;
159 XResCheckExtension (dpy, info, 0);
162 GetReq (XResQueryClientResources, req);
163 req->reqType = info->codes->major_opcode;
164 req->XResReqType = X_XResQueryClientResources;
166 if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) {
173 if((typs = Xmalloc(sizeof(XResType) * rep.num_types))) {
177 for(i = 0; i < rep.num_types; i++) {
178 _XRead(dpy, (char*)&scratch, sz_xXResType);
179 typs[i].resource_type = scratch.resource_type;
180 typs[i].count = scratch.count;
183 *num_types = rep.num_types;
186 _XEatData(dpy, rep.length << 2);
195 Status XResQueryClientPixmapBytes (
201 XExtDisplayInfo *info = find_display (dpy);
202 xXResQueryClientPixmapBytesReq *req;
203 xXResQueryClientPixmapBytesReply rep;
207 XResCheckExtension (dpy, info, 0);
210 GetReq (XResQueryClientPixmapBytes, req);
211 req->reqType = info->codes->major_opcode;
212 req->XResReqType = X_XResQueryClientPixmapBytes;
214 if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
221 *bytes = (rep.bytes_overflow * 4294967295) + rep.bytes;
223 *bytes = rep.bytes_overflow ? 0xffffffff : rep.bytes;