diff options
Diffstat (limited to 'nx-X11/lib/XRes')
-rw-r--r-- | nx-X11/lib/XRes/Imakefile | 34 | ||||
-rw-r--r-- | nx-X11/lib/XRes/XRes-def.cpp | 9 | ||||
-rw-r--r-- | nx-X11/lib/XRes/XRes.c | 233 | ||||
-rw-r--r-- | nx-X11/lib/XRes/XRes.man | 140 |
4 files changed, 416 insertions, 0 deletions
diff --git a/nx-X11/lib/XRes/Imakefile b/nx-X11/lib/XRes/Imakefile new file mode 100644 index 000000000..410f57ff5 --- /dev/null +++ b/nx-X11/lib/XRes/Imakefile @@ -0,0 +1,34 @@ +XCOMM $XFree86: xc/lib/XRes/Imakefile,v 1.3 2003/10/13 21:19:28 herrb Exp $ + +#define DoNormalLib NormalLibXRes +#define DoSharedLib SharedLibXRes +#define DoDebugLib DebugLibXRes +#define DoProfileLib ProfileLibXRes +#define LibName XRes +#define SoRev SOXRESREV +#define LibHeaders NO + +#include <Threads.tmpl> + +#ifdef SharedXResReqs +REQUIREDLIBS = SharedXResReqs +#endif + +#if Malloc0ReturnsNull +ALLOC_DEFINES = -DMALLOC_0_RETURNS_NULL +#endif + + DEFINES = $(ALLOC_DEFINES) + SRCS = XRes.c + OBJS = XRes.o + LINTLIBS = $(LINTXLIB) + +#include <Library.tmpl> + +MANSUFFIX=$(LIBMANSUFFIX) +InstallManPage(LibName,$(LIBMANDIR)) +#if ExpandManNames +InstallManPageAliases(LibName,$(LIBMANDIR),XResQueryExtension XResQueryVersion XResQueryClients XResQueryClientResources XResQueryClientPixmapBytes) +#endif + +DependTarget() diff --git a/nx-X11/lib/XRes/XRes-def.cpp b/nx-X11/lib/XRes/XRes-def.cpp new file mode 100644 index 000000000..1da4ccc16 --- /dev/null +++ b/nx-X11/lib/XRes/XRes-def.cpp @@ -0,0 +1,9 @@ +LIBRARY XRes +VERSION LIBRARY_VERSION +EXPORTS + XResQueryClientPixmapBytes + XResQueryClientResources + XResQueryClients + XResQueryExtension + XResQueryVersion +/* $XFree86$ */ diff --git a/nx-X11/lib/XRes/XRes.c b/nx-X11/lib/XRes/XRes.c new file mode 100644 index 000000000..06cc78d12 --- /dev/null +++ b/nx-X11/lib/XRes/XRes.c @@ -0,0 +1,233 @@ +/* + Copyright (c) 2002 XFree86 Inc +*/ +/* $XFree86: xc/lib/XRes/XRes.c,v 1.3 2002/03/10 22:06:53 mvojkovi Exp $ */ + +#define NEED_EVENTS +#define NEED_REPLIES +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include <stdlib.h> +#include <X11/Xlibint.h> +#include <X11/Xutil.h> +#include <X11/extensions/Xext.h> +#include <X11/extensions/extutil.h> +#include <X11/extensions/XResproto.h> +#include <X11/extensions/XRes.h> + + +static XExtensionInfo _xres_ext_info_data; +static XExtensionInfo *xres_ext_info = &_xres_ext_info_data; +static char *xres_extension_name = XRES_NAME; + +#define XResCheckExtension(dpy,i,val) \ + XextCheckExtension (dpy, i, xres_extension_name, val) + +static XEXT_GENERATE_CLOSE_DISPLAY (close_display, xres_ext_info) + +static XExtensionHooks xres_extension_hooks = { + NULL, /* create_gc */ + NULL, /* copy_gc */ + NULL, /* flush_gc */ + NULL, /* free_gc */ + NULL, /* create_font */ + NULL, /* free_font */ + close_display, /* close_display */ + NULL, /* wire_to_event */ + NULL, /* event_to_wire */ + NULL, /* error */ + NULL, /* error_string */ +}; + +static XEXT_GENERATE_FIND_DISPLAY (find_display, xres_ext_info, + xres_extension_name, + &xres_extension_hooks, + 0, NULL) + +Bool XResQueryExtension ( + Display *dpy, + int *event_basep, + int *error_basep +) +{ + XExtDisplayInfo *info = find_display (dpy); + + if (XextHasExtension(info)) { + *event_basep = info->codes->first_event; + *error_basep = info->codes->first_error; + return True; + } else { + return False; + } +} + +Status XResQueryVersion( + Display *dpy, + int *major_versionp, + int *minor_versionp +) +{ + XExtDisplayInfo *info = find_display (dpy); + xXResQueryVersionReply rep; + xXResQueryVersionReq *req; + + XResCheckExtension (dpy, info, 0); + + LockDisplay (dpy); + GetReq (XResQueryVersion, req); + req->reqType = info->codes->major_opcode; + req->XResReqType = X_XResQueryVersion; + req->client_major = XRES_MAJOR_VERSION; + req->client_minor = XRES_MINOR_VERSION; + if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { + UnlockDisplay (dpy); + SyncHandle (); + return 0; + } + *major_versionp = rep.server_major; + *minor_versionp = rep.server_minor; + UnlockDisplay (dpy); + SyncHandle (); + return 1; +} + + +Status XResQueryClients ( + Display *dpy, + int *num_clients, + XResClient **clients +) +{ + XExtDisplayInfo *info = find_display (dpy); + xXResQueryClientsReq *req; + xXResQueryClientsReply rep; + XResClient *clnts; + int result = 0; + + *num_clients = 0; + *clients = NULL; + + XResCheckExtension (dpy, info, 0); + + LockDisplay (dpy); + GetReq (XResQueryClients, req); + req->reqType = info->codes->major_opcode; + req->XResReqType = X_XResQueryClients; + if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) { + UnlockDisplay (dpy); + SyncHandle (); + return 0; + } + + if(rep.num_clients) { + if((clnts = Xmalloc(sizeof(XResClient) * rep.num_clients))) { + xXResClient scratch; + int i; + + for(i = 0; i < rep.num_clients; i++) { + _XRead(dpy, (char*)&scratch, sz_xXResClient); + clnts[i].resource_base = scratch.resource_base; + clnts[i].resource_mask = scratch.resource_mask; + } + *clients = clnts; + *num_clients = rep.num_clients; + result = 1; + } else { + _XEatData(dpy, rep.length << 2); + } + } + + UnlockDisplay (dpy); + SyncHandle (); + return result; +} + +Status XResQueryClientResources ( + Display *dpy, + XID xid, + int *num_types, + XResType **types +) +{ + XExtDisplayInfo *info = find_display (dpy); + xXResQueryClientResourcesReq *req; + xXResQueryClientResourcesReply rep; + XResType *typs; + int result = 0; + + *num_types = 0; + *types = NULL; + + XResCheckExtension (dpy, info, 0); + + LockDisplay (dpy); + GetReq (XResQueryClientResources, req); + req->reqType = info->codes->major_opcode; + req->XResReqType = X_XResQueryClientResources; + req->xid = xid; + if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) { + UnlockDisplay (dpy); + SyncHandle (); + return 0; + } + + if(rep.num_types) { + if((typs = Xmalloc(sizeof(XResType) * rep.num_types))) { + xXResType scratch; + int i; + + for(i = 0; i < rep.num_types; i++) { + _XRead(dpy, (char*)&scratch, sz_xXResType); + typs[i].resource_type = scratch.resource_type; + typs[i].count = scratch.count; + } + *types = typs; + *num_types = rep.num_types; + result = 1; + } else { + _XEatData(dpy, rep.length << 2); + } + } + + UnlockDisplay (dpy); + SyncHandle (); + return result; +} + +Status XResQueryClientPixmapBytes ( + Display *dpy, + XID xid, + unsigned long *bytes +) +{ + XExtDisplayInfo *info = find_display (dpy); + xXResQueryClientPixmapBytesReq *req; + xXResQueryClientPixmapBytesReply rep; + + *bytes = 0; + + XResCheckExtension (dpy, info, 0); + + LockDisplay (dpy); + GetReq (XResQueryClientPixmapBytes, req); + req->reqType = info->codes->major_opcode; + req->XResReqType = X_XResQueryClientPixmapBytes; + req->xid = xid; + if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { + UnlockDisplay (dpy); + SyncHandle (); + return 0; + } + +#ifdef LONG64 + *bytes = (rep.bytes_overflow * 4294967295) + rep.bytes; +#else + *bytes = rep.bytes_overflow ? 0xffffffff : rep.bytes; +#endif + + UnlockDisplay (dpy); + SyncHandle (); + return 1; +} + diff --git a/nx-X11/lib/XRes/XRes.man b/nx-X11/lib/XRes/XRes.man new file mode 100644 index 000000000..25c27b997 --- /dev/null +++ b/nx-X11/lib/XRes/XRes.man @@ -0,0 +1,140 @@ +.\" +.\" $XdotOrg: xc/lib/XRes/XRes.man,v 1.2 2004/04/23 18:43:36 eich Exp $ +.\" $XFree86: xc/lib/XRes/XRes.man,v 1.2 2003/10/13 21:22:54 herrb Exp $ +.\" +.\" Copyright (C) 1994-2003 The XFree86 Project, Inc. All Rights Reserved. +.\" +.\" Permission is hereby granted, free of charge, to any person obtaining +.\" a copy of this software and associated documentation files (the +.\" "Software"), to deal in the Software without restriction, including +.\" without limitation the rights to use, copy, modify, merge, publish, +.\" distribute, sublicense, and/or sell copies of the Software, and to +.\" permit persons to whom the Software is furnished to do so, subject to +.\" the following conditions: +.\" +.\" 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 NON-INFRINGEMENT. +.\" IN NO EVENT SHALL THE XFREE86 PROJECT 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 XFree86 Project +.\" 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 XFree86 Project. +.\" +.TH XRes 3 __vendorversion__ +.SH NAME +XRes \- X-Resource extension client library +.SH SYNOPSIS +.B #include <X11/extension/XRes.h> +.PP +.nf +.ta .5i 2i +typedef struct { + XID resource_base; + XID resource_mask; +} XResClient; + +typedef struct { + Atom resource_type; + unsigned int count; +} XResType; +.fi +.HP +Bool XResQueryExtension(Display *\fIdpy\fP, +int *\fIevent_basep\fP, int *\fIerror_basep\fP\^); +.HP +Status XResQueryVersion(Display *\fIdpy\fP, int *\fImajor_versionp\fP, +int *\fIminor_versionp\fP\^); +.HP +Status XResQueryClients(Display *\fIdpy\fP, int *\fInum_clients\fP, +XResClient **\fIclients\fP\^); +.HP +Status XResQueryClientResources(Display *\fIdpy\fP, XID \fIxid\fP, +int *\fInum_types\fP, XResType **\fItypes\fP\^); +.HP +Status XResQueryClientPixmapBytes(Display *\fIdpy\fP, XID \fIxid\fP, +unsigned long *\fIbytes\fP\^); +.PP +.SH DESCRIPTION +.B X-Resource +is an extension that allows a client to query the X +server about its usage of various resources. It should not be mixed +with the X resource database access functions. +.PP +.B XResQueryExtension +returns +.B True +if the +.I XRes +extension is available on the given display. +A client must call +.B XResQueryExtension +before calling any other XRes function in order +to negotiate a compatible protocol version; otherwise the client will +get undefined behavior (XRes may or may not work). +.PP +.B XResQueryVersion +returns +.B True +if the request succeeded; the values of the major and minor protocol +versions supported by the server are returned in +.I major_versionp +and +.I minor_versionp . +.PP +.PP +.B XResQueryClients +fills a list of clients of the given display. For each client it +returns in the +.I XResClient +structure a mask and a base value of the resources used by these +clients. +Returns +.B True +on success or +.B False +on failure. +.PP +.B XResQueryClientResources +fills a list of +XResType +structures, indicating for each resource type allocated by the client its +name (as an Atom) and the number of resources of this type allocated. +Returns +.B True +on success or +.B False +on failure. +.PP +.B XresQueryClientPixmapBytes +gives, for resources of type +.I PIXMAP +the total number of bytes allocated in the X server by the given +client. +Returns +.B True +on success or +.B False +on failure. +.SH "ERRORS" +.B XResQueryClientResources +and +.B XResQueryClientPixmapBytes +will return +.I BadValue +if passed an illegal client identifier. +.SH "SEE ALSO" +X(__miscmansuffix__) +.SH AUTHOR +Mark Vojkovich, originally for The XFree86 Project Inc. +.SH STABILITY +This API is considered as experimental. The XRes library major +revision may be incremented whenever incompatible changes are done to +the API without notice. Use with care. |